<?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>208490</bug_id>
          
          <creation_ts>2020-03-02 17:26:50 -0800</creation_ts>
          <short_desc>Implement 1GB of executable memory on arm64</short_desc>
          <delta_ts>2020-04-06 11:19:58 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>JavaScriptCore</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>208537</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Saam Barati">saam</reporter>
          <assigned_to name="Saam Barati">saam</assigned_to>
          <cc>benjamin</cc>
    
    <cc>cdumez</cc>
    
    <cc>cmarcelo</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>fpizlo</cc>
    
    <cc>jbedard</cc>
    
    <cc>jonlee</cc>
    
    <cc>justin_michaud</cc>
    
    <cc>keith_miller</cc>
    
    <cc>mark.lam</cc>
    
    <cc>msaboff</cc>
    
    <cc>rmorisset</cc>
    
    <cc>rniwa</cc>
    
    <cc>tzagallo</cc>
    
    <cc>webkit-bug-importer</cc>
    
    <cc>ysuzuki</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1624861</commentid>
    <comment_count>0</comment_count>
    <who name="Saam Barati">saam</who>
    <bug_when>2020-03-02 17:26:50 -0800</bug_when>
    <thetext>...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1625197</commentid>
    <comment_count>1</comment_count>
      <attachid>392317</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2020-03-03 13:08:55 -0800</bug_when>
    <thetext>Created attachment 392317
WIP

It begins</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1625355</commentid>
    <comment_count>2</comment_count>
      <attachid>392359</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2020-03-03 18:30:25 -0800</bug_when>
    <thetext>Created attachment 392359
WIP</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1625400</commentid>
    <comment_count>3</comment_count>
      <attachid>392370</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2020-03-03 21:25:25 -0800</bug_when>
    <thetext>Created attachment 392370
WIP</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1625913</commentid>
    <comment_count>4</comment_count>
      <attachid>392529</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2020-03-04 19:31:58 -0800</bug_when>
    <thetext>Created attachment 392529
WIP</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1626240</commentid>
    <comment_count>5</comment_count>
      <attachid>392608</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2020-03-05 12:44:54 -0800</bug_when>
    <thetext>Created attachment 392608
WIP</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1626473</commentid>
    <comment_count>6</comment_count>
      <attachid>392663</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2020-03-05 20:03:45 -0800</bug_when>
    <thetext>Created attachment 392663
WIP</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1627041</commentid>
    <comment_count>7</comment_count>
      <attachid>392822</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2020-03-06 17:53:34 -0800</bug_when>
    <thetext>Created attachment 392822
WIP

Seems to work. Now, I need to implement freeing islands and pick the correct region sizes.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1627095</commentid>
    <comment_count>8</comment_count>
      <attachid>392836</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2020-03-06 19:00:15 -0800</bug_when>
    <thetext>Created attachment 392836
WIP</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1627574</commentid>
    <comment_count>9</comment_count>
      <attachid>392983</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2020-03-08 14:08:22 -0700</bug_when>
    <thetext>Created attachment 392983
WIP</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1627575</commentid>
    <comment_count>10</comment_count>
      <attachid>392984</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2020-03-08 14:12:01 -0700</bug_when>
    <thetext>Created attachment 392984
WIP</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1627576</commentid>
    <comment_count>11</comment_count>
      <attachid>392985</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2020-03-08 14:22:55 -0700</bug_when>
    <thetext>Created attachment 392985
WIP</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1628070</commentid>
    <comment_count>12</comment_count>
      <attachid>393107</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2020-03-09 18:34:12 -0700</bug_when>
    <thetext>Created attachment 393107
WIP

I think it might be complete. Time to clean up the code</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1628096</commentid>
    <comment_count>13</comment_count>
      <attachid>393118</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2020-03-09 20:16:06 -0700</bug_when>
    <thetext>Created attachment 393118
WIP

I need to make jump islands work with live repatching wasm code. Currently, we might load the wrong thing from the icache :-(</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1628420</commentid>
    <comment_count>14</comment_count>
      <attachid>393184</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2020-03-10 16:04:51 -0700</bug_when>
    <thetext>Created attachment 393184
WIP</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1628421</commentid>
    <comment_count>15</comment_count>
    <who name="Saam Barati">saam</who>
    <bug_when>2020-03-10 16:06:42 -0700</bug_when>
    <thetext>(In reply to Saam Barati from comment #14)
&gt; Created attachment 393184 [details]
&gt; WIP

I solved my wasm bug. Turns out, when hot patching code concurrently, you need to do a few things to not SIGILL (surprise surprise...). I need to clean up the code again after my wasm debugging session, and then it should be ready for reviews.

Running JS2, and using the random allocation algorithm, our max jump island utilization rate is about 1%. So if we use 16MB, we should have a lot of leeway.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1629320</commentid>
    <comment_count>16</comment_count>
      <attachid>393403</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2020-03-12 13:07:53 -0700</bug_when>
    <thetext>Created attachment 393403
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1629327</commentid>
    <comment_count>17</comment_count>
      <attachid>393406</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2020-03-12 13:14:46 -0700</bug_when>
    <thetext>Created attachment 393406
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1629361</commentid>
    <comment_count>18</comment_count>
      <attachid>393412</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2020-03-12 14:23:14 -0700</bug_when>
    <thetext>Created attachment 393412
patch

try to fix testwtf build error</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1629363</commentid>
    <comment_count>19</comment_count>
      <attachid>393413</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2020-03-12 14:28:08 -0700</bug_when>
    <thetext>Created attachment 393413
patch

testwtf build fix take 2</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1629368</commentid>
    <comment_count>20</comment_count>
      <attachid>393415</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2020-03-12 14:37:34 -0700</bug_when>
    <thetext>Created attachment 393415
patch

testwtf build fix take 3</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1629451</commentid>
    <comment_count>21</comment_count>
      <attachid>393440</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2020-03-12 19:06:22 -0700</bug_when>
    <thetext>Created attachment 393440
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1629458</commentid>
    <comment_count>22</comment_count>
      <attachid>393444</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2020-03-12 19:34:00 -0700</bug_when>
    <thetext>Created attachment 393444
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1629480</commentid>
    <comment_count>23</comment_count>
      <attachid>393449</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2020-03-12 20:50:13 -0700</bug_when>
    <thetext>Created attachment 393449
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1629731</commentid>
    <comment_count>24</comment_count>
      <attachid>393449</attachid>
    <who name="Keith Miller">keith_miller</who>
    <bug_when>2020-03-13 11:31:51 -0700</bug_when>
    <thetext>Comment on attachment 393449
patch

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

r=me if you make the requested changes and fix Win build.

&gt; Source/JavaScriptCore/jit/ExecutableAllocator.cpp:113
&gt; +#if USE(JUMP_ISLANDS)
&gt; +static constexpr size_t fixedExecutableMemoryPoolSize = 1 * 1024 * 1024 * 1024;
&gt; +// These sizes guarantee that any jump within an island can jump forwards or backwards
&gt; +// to the adjacent island in a single instruction.
&gt; +static constexpr size_t regionSize = 112 * 1024 * 1024;
&gt; +static constexpr size_t islandRegionSize = 16 * 1024 * 1024;
&gt; +static constexpr size_t numberOfRegions = fixedExecutableMemoryPoolSize / regionSize;
&gt; +static constexpr size_t islandSizeInBytes = 4;
&gt; +static constexpr size_t maxIslandsPerRegion = islandRegionSize / islandSizeInBytes;
&gt; +#else
&gt;  static constexpr size_t fixedExecutableMemoryPoolSize = 128 * 1024 * 1024;
&gt; +#endif
&gt;  #elif CPU(X86_64)
&gt; -static constexpr size_t fixedExecutableMemoryPoolSize = 1024 * 1024 * 1024;
&gt; +static constexpr size_t fixedExecutableMemoryPoolSize = 1 * 1024 * 1024 * 1024;

Can we switch to using the MB/GB constants here?

&gt; Source/JavaScriptCore/jit/ExecutableAllocator.cpp:815
&gt; +        CodeLocationLabel&lt;ExecutableMemoryPtrTag&gt; rootJumpLocation;

Can we call this jumpSourceLocation? rootJumpLocation doesn&apos;t really make it clear what this is to me. I thought it was the destination for a while, which clearly would have been borked.

&gt; Source/JavaScriptCore/jit/ExecutableAllocator.cpp:824
&gt; +    RedBlackTree&lt;Islands, void*&gt; islandsForJumpLocation;

ditto on changing this to m_islandsForJumpSourceLocation. You also don&apos;t have an m_ prefix which is weird.

&gt; Source/JavaScriptCore/wasm/WasmBBQPlan.cpp:173
&gt; +        for (unsigned i = 0; i &lt; m_codeBlock-&gt;m_wasmToWasmCallsites.size(); ++i) {
&gt; +            stageRepatch(m_codeBlock-&gt;m_wasmToWasmCallsites[i]);
&gt; +            if (m_codeBlock-&gt;m_llintCallees) {
&gt; +                LLIntCallee&amp; llintCallee = m_codeBlock-&gt;m_llintCallees-&gt;at(i).get();
&gt; +                if (JITCallee* replacementCallee = llintCallee.replacement())
&gt; +                    stageRepatch(replacementCallee-&gt;wasmToWasmCallsites());
&gt; +                if (OMGForOSREntryCallee* osrEntryCallee = llintCallee.osrEntryCallee())
&gt; +                    stageRepatch(osrEntryCallee-&gt;wasmToWasmCallsites());
&gt; +            }
&gt; +            if (BBQCallee* bbqCallee = m_codeBlock-&gt;m_bbqCallees[i].get()) {
&gt; +                if (OMGCallee* replacementCallee = bbqCallee-&gt;replacement())
&gt; +                    stageRepatch(replacementCallee-&gt;wasmToWasmCallsites());
&gt; +                if (OMGForOSREntryCallee* osrEntryCallee = bbqCallee-&gt;osrEntryCallee())
&gt; +                    stageRepatch(osrEntryCallee-&gt;wasmToWasmCallsites());
&gt; +            }
&gt; +        }

Seems like we could have some code deduplication between the different plans... Can you do that?

&gt; Tools/ChangeLog:8
&gt; +        * Scripts/run-jsc-stress-tests:

I think you need to update this for the TestWTF changes? Can you also add a TestWTF for RedBlackTree::iterate?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1633096</commentid>
    <comment_count>25</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2020-03-23 16:05:19 -0700</bug_when>
    <thetext>&lt;rdar://problem/60797127&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1633987</commentid>
    <comment_count>26</comment_count>
    <who name="Saam Barati">saam</who>
    <bug_when>2020-03-25 12:26:41 -0700</bug_when>
    <thetext>I&apos;m addressing Keith&apos;s comments.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1634017</commentid>
    <comment_count>27</comment_count>
      <attachid>394534</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2020-03-25 13:18:17 -0700</bug_when>
    <thetext>Created attachment 394534
patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1634488</commentid>
    <comment_count>28</comment_count>
      <attachid>394639</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2020-03-26 12:29:44 -0700</bug_when>
    <thetext>Created attachment 394639
patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1638197</commentid>
    <comment_count>29</comment_count>
    <who name="EWS">ews-feeder</who>
    <bug_when>2020-04-06 11:19:57 -0700</bug_when>
    <thetext>Committed r259582: &lt;https://trac.webkit.org/changeset/259582&gt;

All reviewed patches have been landed. Closing bug and clearing flags on attachment 394639.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>392317</attachid>
            <date>2020-03-03 13:08:55 -0800</date>
            <delta_ts>2020-03-03 18:30:25 -0800</delta_ts>
            <desc>WIP</desc>
            <filename>c-backup.diff</filename>
            <type>text/plain</type>
            <size>25903</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvRXhlY3V0YWJsZUFsbG9jYXRvci5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9FeGVjdXRhYmxlQWxsb2Nh
dG9yLmNwcAkocmV2aXNpb24gMjU3NzUwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9F
eGVjdXRhYmxlQWxsb2NhdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTYsOSArOTYsMTAgQEAg
c3RhdGljIGNvbnN0ZXhwciBzaXplX3QgZml4ZWRFeGVjdXRhYmxlTQogI2VsaWYgQ1BVKEFSTSkK
IHN0YXRpYyBjb25zdGV4cHIgc2l6ZV90IGZpeGVkRXhlY3V0YWJsZU1lbW9yeVBvb2xTaXplID0g
MTYgKiAxMDI0ICogMTAyNDsKICNlbGlmIENQVShBUk02NCkKLXN0YXRpYyBjb25zdGV4cHIgc2l6
ZV90IGZpeGVkRXhlY3V0YWJsZU1lbW9yeVBvb2xTaXplID0gMTI4ICogMTAyNCAqIDEwMjQ7Citz
dGF0aWMgY29uc3RleHByIHNpemVfdCBmaXhlZEV4ZWN1dGFibGVNZW1vcnlQb29sU2l6ZSA9IDEg
KiAxMDI0ICogMTAyNCAqIDEwMjQ7CitzdGF0aWMgY29uc3RleHByIHNpemVfdCBmaXhlZFBvb2xJ
c2xhbmRTaXplID0gMTI4ICogMTAyNCAqIDEwMjQ7CiAjZWxpZiBDUFUoWDg2XzY0KQotc3RhdGlj
IGNvbnN0ZXhwciBzaXplX3QgZml4ZWRFeGVjdXRhYmxlTWVtb3J5UG9vbFNpemUgPSAxMDI0ICog
MTAyNCAqIDEwMjQ7CitzdGF0aWMgY29uc3RleHByIHNpemVfdCBmaXhlZEV4ZWN1dGFibGVNZW1v
cnlQb29sU2l6ZSA9IDEgKiAxMDI0ICogMTAyNCAqIDEwMjQ7CiAjZWxzZQogc3RhdGljIGNvbnN0
ZXhwciBzaXplX3QgZml4ZWRFeGVjdXRhYmxlTWVtb3J5UG9vbFNpemUgPSAzMiAqIDEwMjQgKiAx
MDI0OwogI2VuZGlmCkBAIC0xNTQsNjYgKzE1NSwyMjYgQEAgdm9pZCBFeGVjdXRhYmxlQWxsb2Nh
dG9yOjpzZXRKSVRFbmFibGVkKAogI2VuZGlmCiB9CiAKLWNsYXNzIEZpeGVkVk1Qb29sRXhlY3V0
YWJsZUFsbG9jYXRvciBmaW5hbCA6IHB1YmxpYyBNZXRhQWxsb2NhdG9yIHsKLSAgICBXVEZfTUFL
RV9GQVNUX0FMTE9DQVRFRDsKLXB1YmxpYzoKLSAgICBGaXhlZFZNUG9vbEV4ZWN1dGFibGVBbGxv
Y2F0b3IoKQotICAgICAgICA6IE1ldGFBbGxvY2F0b3Ioaml0QWxsb2NhdGlvbkdyYW51bGUpIC8v
IHJvdW5kIHVwIGFsbCBhbGxvY2F0aW9ucyB0byAzMiBieXRlcwotICAgIHsKLSAgICAgICAgaWYg
KCFpc0pJVEVuYWJsZWQoKSkKLSAgICAgICAgICAgIHJldHVybjsKKyNpZiBPUyhEQVJXSU4pICYm
IEhBVkUoUkVNQVBfSklUKQorCisjaWYgQ1BVKEFSTTY0KSAmJiBVU0UoRVhFQ1VURV9PTkxZX0pJ
VF9XUklURV9GVU5DVElPTikKK3N0YXRpYyBBTFdBWVNfSU5MSU5FIE1hY3JvQXNzZW1ibGVyQ29k
ZVJlZjxKSVRUaHVua1B0clRhZz4gaml0V3JpdGVUaHVua0dlbmVyYXRvcih2b2lkKiB3cml0YWJs
ZUFkZHIsIHZvaWQqIHN0dWJCYXNlLCBzaXplX3Qgc3R1YlNpemUpCit7CisgICAgdXNpbmcgbmFt
ZXNwYWNlIEFSTTY0UmVnaXN0ZXJzOworICAgIHVzaW5nIFRydXN0ZWRJbW0zMiA9IE1hY3JvQXNz
ZW1ibGVyOjpUcnVzdGVkSW1tMzI7CisKKyAgICBNYWNyb0Fzc2VtYmxlciBqaXQ7CisKKyAgICBq
aXQudGFnUmV0dXJuQWRkcmVzcygpOworICAgIGppdC5tb3ZlKE1hY3JvQXNzZW1ibGVyOjpUcnVz
dGVkSW1tUHRyKHdyaXRhYmxlQWRkciksIHg3KTsKKyAgICBqaXQuYWRkUHRyKHg3LCB4MCk7CisK
KyAgICBqaXQubW92ZSh4MCwgeDMpOworICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIHNtYWxsQ29w
eSA9IGppdC5icmFuY2g2NChNYWNyb0Fzc2VtYmxlcjo6QmVsb3csIHgyLCBNYWNyb0Fzc2VtYmxl
cjo6VHJ1c3RlZEltbTY0KDY0KSk7CisKKyAgICBqaXQuYWRkNjQoVHJ1c3RlZEltbTMyKDMyKSwg
eDMpOworICAgIGppdC5hbmQ2NChUcnVzdGVkSW1tMzIoLTMyKSwgeDMpOworICAgIGppdC5sb2Fk
UGFpcjY0KHgxLCB4MTIsIHgxMyk7CisgICAgaml0LmxvYWRQYWlyNjQoeDEsIFRydXN0ZWRJbW0z
MigxNiksIHgxNCwgeDE1KTsKKyAgICBqaXQuc3ViNjQoeDMsIHgwLCB4NSk7CisgICAgaml0LmFk
ZFB0cih4NSwgeDEpOworCisgICAgaml0LmxvYWRQYWlyNjQoeDEsIHg4LCB4OSk7CisgICAgaml0
LmxvYWRQYWlyNjQoeDEsIFRydXN0ZWRJbW0zMigxNiksIHgxMCwgeDExKTsKKyAgICBqaXQuYWRk
NjQoVHJ1c3RlZEltbTMyKDMyKSwgeDEpOworICAgIGppdC5zdWI2NCh4NSwgeDIpOworICAgIGpp
dC5zdG9yZVBhaXI2NCh4MTIsIHgxMywgeDApOworICAgIGppdC5zdG9yZVBhaXI2NCh4MTQsIHgx
NSwgeDAsIFRydXN0ZWRJbW0zMigxNikpOworICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIGNsZWFu
dXAgPSBqaXQuYnJhbmNoU3ViNjQoTWFjcm9Bc3NlbWJsZXI6OkJlbG93T3JFcXVhbCwgVHJ1c3Rl
ZEltbTMyKDY0KSwgeDIpOworCisgICAgTWFjcm9Bc3NlbWJsZXI6OkxhYmVsIGNvcHlMb29wID0g
aml0LmxhYmVsKCk7CisgICAgaml0LnN0b3JlUGFpcjY0V2l0aE5vblRlbXBvcmFsQWNjZXNzKHg4
LCB4OSwgeDMpOworICAgIGppdC5zdG9yZVBhaXI2NFdpdGhOb25UZW1wb3JhbEFjY2Vzcyh4MTAs
IHgxMSwgeDMsIFRydXN0ZWRJbW0zMigxNikpOworICAgIGppdC5hZGQ2NChUcnVzdGVkSW1tMzIo
MzIpLCB4Myk7CisgICAgaml0LmxvYWRQYWlyNjRXaXRoTm9uVGVtcG9yYWxBY2Nlc3MoeDEsIHg4
LCB4OSk7CisgICAgaml0LmxvYWRQYWlyNjRXaXRoTm9uVGVtcG9yYWxBY2Nlc3MoeDEsIFRydXN0
ZWRJbW0zMigxNiksIHgxMCwgeDExKTsKKyAgICBqaXQuYWRkNjQoVHJ1c3RlZEltbTMyKDMyKSwg
eDEpOworICAgIGppdC5icmFuY2hTdWI2NChNYWNyb0Fzc2VtYmxlcjo6QWJvdmUsIFRydXN0ZWRJ
bW0zMigzMiksIHgyKS5saW5rVG8oY29weUxvb3AsICZqaXQpOworCisgICAgY2xlYW51cC5saW5r
KCZqaXQpOworICAgIGppdC5hZGQ2NCh4MiwgeDEpOworICAgIGppdC5sb2FkUGFpcjY0KHgxLCB4
MTIsIHgxMyk7CisgICAgaml0LmxvYWRQYWlyNjQoeDEsIFRydXN0ZWRJbW0zMigxNiksIHgxNCwg
eDE1KTsKKyAgICBqaXQuc3RvcmVQYWlyNjQoeDgsIHg5LCB4Myk7CisgICAgaml0LnN0b3JlUGFp
cjY0KHgxMCwgeDExLCB4MywgVHJ1c3RlZEltbTMyKDE2KSk7CisgICAgaml0LmFkZFB0cih4Miwg
eDMpOworICAgIGppdC5zdG9yZVBhaXI2NCh4MTIsIHgxMywgeDMsIFRydXN0ZWRJbW0zMigzMikp
OworICAgIGppdC5zdG9yZVBhaXI2NCh4MTQsIHgxNSwgeDMsIFRydXN0ZWRJbW0zMig0OCkpOwor
ICAgIGppdC5yZXQoKTsKKworICAgIE1hY3JvQXNzZW1ibGVyOjpMYWJlbCBsb2NhbDAgPSBqaXQu
bGFiZWwoKTsKKyAgICBqaXQubG9hZDY0KHgxLCBQb3N0SW5kZXgoOCksIHg2KTsKKyAgICBqaXQu
c3RvcmU2NCh4NiwgeDMsIFBvc3RJbmRleCg4KSk7CisgICAgc21hbGxDb3B5LmxpbmsoJmppdCk7
CisgICAgaml0LmJyYW5jaFN1YjY0KE1hY3JvQXNzZW1ibGVyOjpBYm92ZU9yRXF1YWwsIFRydXN0
ZWRJbW0zMig4KSwgeDIpLmxpbmtUbyhsb2NhbDAsICZqaXQpOworICAgIE1hY3JvQXNzZW1ibGVy
OjpKdW1wIGxvY2FsMiA9IGppdC5icmFuY2hBZGQ2NChNYWNyb0Fzc2VtYmxlcjo6RXF1YWwsIFRy
dXN0ZWRJbW0zMig4KSwgeDIpOworICAgIE1hY3JvQXNzZW1ibGVyOjpMYWJlbCBsb2NhbDEgPSBq
aXQubGFiZWwoKTsKKyAgICBqaXQubG9hZDgoeDEsIFBvc3RJbmRleCgxKSwgeDYpOworICAgIGpp
dC5zdG9yZTgoeDYsIHgzLCBQb3N0SW5kZXgoMSkpOworICAgIGppdC5icmFuY2hTdWI2NChNYWNy
b0Fzc2VtYmxlcjo6Tm90RXF1YWwsIFRydXN0ZWRJbW0zMigxKSwgeDIpLmxpbmtUbyhsb2NhbDEs
ICZqaXQpOworICAgIGxvY2FsMi5saW5rKCZqaXQpOworICAgIGppdC5yZXQoKTsKKworICAgIGF1
dG8gc3R1YkJhc2VDb2RlUHRyID0gTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPExpbmtCdWZmZXJQdHJU
YWc+KHRhZ0NvZGVQdHI8TGlua0J1ZmZlclB0clRhZz4oc3R1YkJhc2UpKTsKKyAgICBMaW5rQnVm
ZmVyIGxpbmtCdWZmZXIoaml0LCBzdHViQmFzZUNvZGVQdHIsIHN0dWJTaXplKTsKKyAgICAvLyBX
ZSBkb24ndCB1c2UgRklOQUxJWkVfQ09ERSgpIGZvciB0d28gcmVhc29ucy4KKyAgICAvLyBUaGUg
Zmlyc3QgaXMgdGhhdCB3ZSBkb24ndCB3YW50IHRoZSB3cml0ZWFibGUgYWRkcmVzcywgYXMgZGlz
YXNzZW1ibGVkIGluc3RydWN0aW9ucywKKyAgICAvLyB0byBhcHBlYXIgaW4gdGhlIGNvbnNvbGUg
b3IgYW55d2hlcmUgaW4gbWVtb3J5LCB2aWEgdGhlIFByaW50U3RyZWFtIGJ1ZmZlci4KKyAgICAv
LyBUaGUgc2Vjb25kIGlzIHdlIGNhbid0IGd1YXJhbnRlZSB0aGF0IHRoZSBjb2RlIGlzIHJlYWRh
YmxlIHdoZW4gdXNpbmcgdGhlCisgICAgLy8gYXN5bmNEaXNhc3NlbWJseSBvcHRpb24gYXMgb3Vy
IGNhbGxlciB3aWxsIHNldCBvdXIgcGFnZXMgZXhlY3V0ZSBvbmx5LgorICAgIHJldHVybiBsaW5r
QnVmZmVyLmZpbmFsaXplQ29kZVdpdGhvdXREaXNhc3NlbWJseTxKSVRUaHVua1B0clRhZz4oKTsK
K30KKyNlbHNlIC8vIG5vdCBDUFUoQVJNNjQpICYmIFVTRShFWEVDVVRFX09OTFlfSklUX1dSSVRF
X0ZVTkNUSU9OKQorc3RhdGljIHZvaWQgZ2VuZXJpY1dyaXRlVG9KSVRSZWdpb24ob2ZmX3Qgb2Zm
c2V0LCBjb25zdCB2b2lkKiBkYXRhLCBzaXplX3QgZGF0YVNpemUpCit7CisgICAgbWVtY3B5KCh2
b2lkKikoZ19qc2NDb25maWcuc3RhcnRPZkZpeGVkV3JpdGFibGVNZW1vcnlQb29sICsgb2Zmc2V0
KSwgZGF0YSwgZGF0YVNpemUpOworfQorCitzdGF0aWMgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJ
VFRodW5rUHRyVGFnPiBBTFdBWVNfSU5MSU5FIGppdFdyaXRlVGh1bmtHZW5lcmF0b3Iodm9pZCog
YWRkcmVzcywgdm9pZCosIHNpemVfdCkKK3sKKyAgICBnX2pzY0NvbmZpZy5zdGFydE9mRml4ZWRX
cml0YWJsZU1lbW9yeVBvb2wgPSByZWludGVycHJldF9jYXN0PHVpbnRwdHJfdD4oYWRkcmVzcyk7
CisgICAgdm9pZCogZnVuY3Rpb24gPSByZWludGVycHJldF9jYXN0PHZvaWQqPigmZ2VuZXJpY1dy
aXRlVG9KSVRSZWdpb24pOworI2lmIENQVShBUk1fVEhVTUIyKQorICAgIC8vIEhhbmRsZSB0aHVt
YiBvZmZzZXQKKyAgICB1aW50cHRyX3QgZnVuY3Rpb25Bc0ludCA9IHJlaW50ZXJwcmV0X2Nhc3Q8
dWludHB0cl90PihmdW5jdGlvbik7CisgICAgZnVuY3Rpb25Bc0ludCAtPSAxOworICAgIGZ1bmN0
aW9uID0gcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oZnVuY3Rpb25Bc0ludCk7CisjZW5kaWYKKyAg
ICBhdXRvIGNvZGVQdHIgPSBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8SklUVGh1bmtQdHJUYWc+KHRh
Z0NGdW5jdGlvblB0cjxKSVRUaHVua1B0clRhZz4oZnVuY3Rpb24pKTsKKyAgICByZXR1cm4gTWFj
cm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPjo6Y3JlYXRlU2VsZk1hbmFnZWRDb2Rl
UmVmKGNvZGVQdHIpOworfQorI2VuZGlmIC8vIENQVShBUk02NCkgJiYgVVNFKEVYRUNVVEVfT05M
WV9KSVRfV1JJVEVfRlVOQ1RJT04pCisKK3N0YXRpYyBBTFdBWVNfSU5MSU5FIHZvaWQgaW5pdGlh
bGl6ZVNlcGFyYXRlZFdYSGVhcHModm9pZCogc3R1YkJhc2UsIHNpemVfdCBzdHViU2l6ZSwgdm9p
ZCogaml0QmFzZSwgc2l6ZV90IGppdFNpemUpCit7CisgICAgbWFjaF92bV9hZGRyZXNzX3Qgd3Jp
dGFibGVBZGRyID0gMDsKKworICAgIC8vIENyZWF0ZSBhIHNlY29uZCBtYXBwaW5nIG9mIHRoZSBK
SVQgcmVnaW9uIGF0IGEgcmFuZG9tIGFkZHJlc3MuCisgICAgdm1fcHJvdF90IGN1ciwgbWF4Owor
ICAgIGludCByZW1hcEZsYWdzID0gVk1fRkxBR1NfQU5ZV0hFUkU7CisjaWYgZGVmaW5lZChWTV9G
TEFHU19SQU5ET01fQUREUikKKyAgICByZW1hcEZsYWdzIHw9IFZNX0ZMQUdTX1JBTkRPTV9BRERS
OworI2VuZGlmCisgICAga2Vybl9yZXR1cm5fdCByZXQgPSBtYWNoX3ZtX3JlbWFwKG1hY2hfdGFz
a19zZWxmKCksICZ3cml0YWJsZUFkZHIsIGppdFNpemUsIDAsCisgICAgICAgIHJlbWFwRmxhZ3Ms
CisgICAgICAgIG1hY2hfdGFza19zZWxmKCksIChtYWNoX3ZtX2FkZHJlc3NfdClqaXRCYXNlLCBG
QUxTRSwKKyAgICAgICAgJmN1ciwgJm1heCwgVk1fSU5IRVJJVF9ERUZBVUxUKTsKIAotICAgICAg
ICBzaXplX3QgcmVzZXJ2YXRpb25TaXplOwotICAgICAgICBpZiAoT3B0aW9uczo6aml0TWVtb3J5
UmVzZXJ2YXRpb25TaXplKCkpCi0gICAgICAgICAgICByZXNlcnZhdGlvblNpemUgPSBPcHRpb25z
OjpqaXRNZW1vcnlSZXNlcnZhdGlvblNpemUoKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAg
cmVzZXJ2YXRpb25TaXplID0gZml4ZWRFeGVjdXRhYmxlTWVtb3J5UG9vbFNpemU7Ci0gICAgICAg
IHJlc2VydmF0aW9uU2l6ZSA9IHN0ZDo6bWF4KHJvdW5kVXBUb011bHRpcGxlT2YocGFnZVNpemUo
KSwgcmVzZXJ2YXRpb25TaXplKSwgcGFnZVNpemUoKSAqIDIpOworICAgIGJvb2wgcmVtYXBTdWNj
ZWVkZWQgPSAocmV0ID09IEtFUk5fU1VDQ0VTUyk7CisgICAgaWYgKCFyZW1hcFN1Y2NlZWRlZCkK
KyAgICAgICAgcmV0dXJuOworCisgICAgLy8gQXNzZW1ibGUgYSB0aHVuayB0aGF0IHdpbGwgc2Vy
dmUgYXMgdGhlIG1lYW5zIGZvciB3cml0aW5nIGludG8gdGhlIEpJVCByZWdpb24uCisgICAgTWFj
cm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiB3cml0ZVRodW5rID0gaml0V3JpdGVU
aHVua0dlbmVyYXRvcihyZWludGVycHJldF9jYXN0PHZvaWQqPih3cml0YWJsZUFkZHIpLCBzdHVi
QmFzZSwgc3R1YlNpemUpOworCisgICAgaW50IHJlc3VsdCA9IDA7CisKKyNpZiBVU0UoRVhFQ1VU
RV9PTkxZX0pJVF9XUklURV9GVU5DVElPTikKKyAgICAvLyBQcmV2ZW50IHJlYWRpbmcgdGhlIHdy
aXRlIHRodW5rIGNvZGUuCisgICAgcmVzdWx0ID0gdm1fcHJvdGVjdChtYWNoX3Rhc2tfc2VsZigp
LCByZWludGVycHJldF9jYXN0PHZtX2FkZHJlc3NfdD4oc3R1YkJhc2UpLCBzdHViU2l6ZSwgdHJ1
ZSwgVk1fUFJPVF9FWEVDVVRFKTsKKyAgICBSRUxFQVNFX0FTU0VSVCghcmVzdWx0KTsKKyNlbmRp
ZgorCisgICAgLy8gUHJldmVudCB3cml0aW5nIGludG8gdGhlIGV4ZWN1dGFibGUgSklUIG1hcHBp
bmcuCisgICAgcmVzdWx0ID0gdm1fcHJvdGVjdChtYWNoX3Rhc2tfc2VsZigpLCByZWludGVycHJl
dF9jYXN0PHZtX2FkZHJlc3NfdD4oaml0QmFzZSksIGppdFNpemUsIHRydWUsIFZNX1BST1RfUkVB
RCB8IFZNX1BST1RfRVhFQ1VURSk7CisgICAgUkVMRUFTRV9BU1NFUlQoIXJlc3VsdCk7CisKKyAg
ICAvLyBQcmV2ZW50IGV4ZWN1dGlvbiBpbiB0aGUgd3JpdGFibGUgSklUIG1hcHBpbmcuCisgICAg
cmVzdWx0ID0gdm1fcHJvdGVjdChtYWNoX3Rhc2tfc2VsZigpLCBzdGF0aWNfY2FzdDx2bV9hZGRy
ZXNzX3Q+KHdyaXRhYmxlQWRkciksIGppdFNpemUsIHRydWUsIFZNX1BST1RfUkVBRCB8IFZNX1BS
T1RfV1JJVEUpOworICAgIFJFTEVBU0VfQVNTRVJUKCFyZXN1bHQpOworCisgICAgLy8gWmVybyBv
dXQgd3JpdGFibGVBZGRyIHRvIGF2b2lkIGxlYWtpbmcgdGhlIGFkZHJlc3Mgb2YgdGhlIHdyaXRh
YmxlIG1hcHBpbmcuCisgICAgbWVtc2V0X3MoJndyaXRhYmxlQWRkciwgc2l6ZW9mKHdyaXRhYmxl
QWRkciksIDAsIHNpemVvZih3cml0YWJsZUFkZHIpKTsKKworI2lmIEVOQUJMRShTRVBBUkFURURf
V1hfSEVBUCkKKyAgICBnX2pzY0NvbmZpZy5qaXRXcml0ZVNlcGFyYXRlSGVhcHMgPSByZWludGVy
cHJldF9jYXN0PEpJVFdyaXRlU2VwYXJhdGVIZWFwc0Z1bmN0aW9uPih3cml0ZVRodW5rLmNvZGUo
KS5leGVjdXRhYmxlQWRkcmVzcygpKTsKKyNlbmRpZgorfQorCisjZWxzZSAvLyBPUyhEQVJXSU4p
ICYmIEhBVkUoUkVNQVBfSklUKQorc3RhdGljIEFMV0FZU19JTkxJTkUgdm9pZCBpbml0aWFsaXpl
U2VwYXJhdGVkV1hIZWFwcyh2b2lkKiwgc2l6ZV90LCB2b2lkKiwgc2l6ZV90KQoreworfQorI2Vu
ZGlmCisKK3N0cnVjdCBKSVRSZXNlcnZhdGlvbiB7CisgICAgUGFnZVJlc2VydmF0aW9uIHBhZ2VS
ZXNlcnZhdGlvbjsKKyAgICB2b2lkKiBiYXNlIHsgbnVsbHB0ciB9OworICAgIHNpemVfdCBzaXpl
IHsgMCB9OworfTsKKworc3RhdGljIEFMV0FZU19JTkxJTkUgSklUUmVzZXJ2YXRpb24gaW5pdGlh
bGl6ZUpJVFBhZ2VSZXNlcnZhdGlvbigpCit7CisgICAgSklUUmVzZXJ2YXRpb24gcmVzZXJ2YXRp
b247CisgICAgaWYgKCFpc0pJVEVuYWJsZWQoKSkKKyAgICAgICAgcmV0dXJuIHJlc2VydmF0aW9u
OworCisgICAgaWYgKE9wdGlvbnM6OmppdE1lbW9yeVJlc2VydmF0aW9uU2l6ZSgpKQorICAgICAg
ICByZXNlcnZhdGlvbi5zaXplID0gT3B0aW9uczo6aml0TWVtb3J5UmVzZXJ2YXRpb25TaXplKCk7
CisgICAgZWxzZQorICAgICAgICByZXNlcnZhdGlvbi5zaXplID0gZml4ZWRFeGVjdXRhYmxlTWVt
b3J5UG9vbFNpemU7CisgICAgcmVzZXJ2YXRpb24uc2l6ZSA9IHN0ZDo6bWF4KHJvdW5kVXBUb011
bHRpcGxlT2YocGFnZVNpemUoKSwgcmVzZXJ2YXRpb24uc2l6ZSksIHBhZ2VTaXplKCkgKiAyKTsK
IAotICAgICAgICBhdXRvIHRyeUNyZWF0ZVBhZ2VSZXNlcnZhdGlvbiA9IFtdIChzaXplX3QgcmVz
ZXJ2YXRpb25TaXplKSB7CisgICAgYXV0byB0cnlDcmVhdGVQYWdlUmVzZXJ2YXRpb24gPSBbXSAo
c2l6ZV90IHJlc2VydmF0aW9uU2l6ZSkgewogI2lmIE9TKExJTlVYKQotICAgICAgICAgICAgLy8g
SWYgd2UgdXNlIHVuY29tbWl0dGVkIHJlc2VydmF0aW9uLCBtbWFwIG9wZXJhdGlvbiBpcyByZWNv
cmRlZCB3aXRoIHNtYWxsIHBhZ2Ugc2l6ZSBpbiBwZXJmIGNvbW1hbmQncyBvdXRwdXQuCi0gICAg
ICAgICAgICAvLyBUaGlzIG1ha2VzIHRoZSBmb2xsb3dpbmcgSklUIGNvZGUgbG9nZ2luZyBicm9r
ZW4gYW5kIHNvbWUgb2YgSklUIGNvZGUgaXMgbm90IHJlY29yZGVkIGNvcnJlY3RseS4KLSAgICAg
ICAgICAgIC8vIFRvIGF2b2lkIHRoaXMgcHJvYmxlbSwgd2UgdXNlIGNvbW1pdHRlZCByZXNlcnZh
dGlvbiBpZiB3ZSBuZWVkIHBlcmYgSklURHVtcCBsb2dnaW5nLgotICAgICAgICAgICAgaWYgKE9w
dGlvbnM6OmxvZ0pJVENvZGVGb3JQZXJmKCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIFBhZ2VS
ZXNlcnZhdGlvbjo6cmVzZXJ2ZUFuZENvbW1pdFdpdGhHdWFyZFBhZ2VzKHJlc2VydmF0aW9uU2l6
ZSwgT1NBbGxvY2F0b3I6OkpTSklUQ29kZVBhZ2VzLCBFWEVDVVRBQkxFX1BPT0xfV1JJVEFCTEUs
IHRydWUpOworICAgICAgICAvLyBJZiB3ZSB1c2UgdW5jb21taXR0ZWQgcmVzZXJ2YXRpb24sIG1t
YXAgb3BlcmF0aW9uIGlzIHJlY29yZGVkIHdpdGggc21hbGwgcGFnZSBzaXplIGluIHBlcmYgY29t
bWFuZCdzIG91dHB1dC4KKyAgICAgICAgLy8gVGhpcyBtYWtlcyB0aGUgZm9sbG93aW5nIEpJVCBj
b2RlIGxvZ2dpbmcgYnJva2VuIGFuZCBzb21lIG9mIEpJVCBjb2RlIGlzIG5vdCByZWNvcmRlZCBj
b3JyZWN0bHkuCisgICAgICAgIC8vIFRvIGF2b2lkIHRoaXMgcHJvYmxlbSwgd2UgdXNlIGNvbW1p
dHRlZCByZXNlcnZhdGlvbiBpZiB3ZSBuZWVkIHBlcmYgSklURHVtcCBsb2dnaW5nLgorICAgICAg
ICBpZiAoT3B0aW9uczo6bG9nSklUQ29kZUZvclBlcmYoKSkKKyAgICAgICAgICAgIHJldHVybiBQ
YWdlUmVzZXJ2YXRpb246OnJlc2VydmVBbmRDb21taXRXaXRoR3VhcmRQYWdlcyhyZXNlcnZhdGlv
blNpemUsIE9TQWxsb2NhdG9yOjpKU0pJVENvZGVQYWdlcywgRVhFQ1VUQUJMRV9QT09MX1dSSVRB
QkxFLCB0cnVlKTsKICNlbmRpZgotICAgICAgICAgICAgcmV0dXJuIFBhZ2VSZXNlcnZhdGlvbjo6
cmVzZXJ2ZVdpdGhHdWFyZFBhZ2VzKHJlc2VydmF0aW9uU2l6ZSwgT1NBbGxvY2F0b3I6OkpTSklU
Q29kZVBhZ2VzLCBFWEVDVVRBQkxFX1BPT0xfV1JJVEFCTEUsIHRydWUpOwotICAgICAgICB9Owor
ICAgICAgICByZXR1cm4gUGFnZVJlc2VydmF0aW9uOjpyZXNlcnZlV2l0aEd1YXJkUGFnZXMocmVz
ZXJ2YXRpb25TaXplLCBPU0FsbG9jYXRvcjo6SlNKSVRDb2RlUGFnZXMsIEVYRUNVVEFCTEVfUE9P
TF9XUklUQUJMRSwgdHJ1ZSk7CisgICAgfTsKIAotICAgICAgICBtX3Jlc2VydmF0aW9uID0gdHJ5
Q3JlYXRlUGFnZVJlc2VydmF0aW9uKHJlc2VydmF0aW9uU2l6ZSk7Ci0gICAgICAgIGlmIChtX3Jl
c2VydmF0aW9uKSB7Ci0gICAgICAgICAgICBBU1NFUlQobV9yZXNlcnZhdGlvbi5zaXplKCkgPT0g
cmVzZXJ2YXRpb25TaXplKTsKLSAgICAgICAgICAgIHZvaWQqIHJlc2VydmF0aW9uQmFzZSA9IG1f
cmVzZXJ2YXRpb24uYmFzZSgpOworICAgIHJlc2VydmF0aW9uLnBhZ2VSZXNlcnZhdGlvbiA9IHRy
eUNyZWF0ZVBhZ2VSZXNlcnZhdGlvbihyZXNlcnZhdGlvbi5zaXplKTsKKyAgICBpZiAocmVzZXJ2
YXRpb24ucGFnZVJlc2VydmF0aW9uKSB7CisgICAgICAgIEFTU0VSVChyZXNlcnZhdGlvbi5wYWdl
UmVzZXJ2YXRpb24uc2l6ZSgpID09IHJlc2VydmF0aW9uLnNpemUpOworICAgICAgICByZXNlcnZh
dGlvbi5iYXNlID0gcmVzZXJ2YXRpb24ucGFnZVJlc2VydmF0aW9uLmJhc2UoKTsKIAogI2lmIEVO
QUJMRShGQVNUX0pJVF9QRVJNSVNTSU9OUykgJiYgIUVOQUJMRShTRVBBUkFURURfV1hfSEVBUCkK
LSAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKG9zX3RocmVhZF9zZWxmX3Jlc3RyaWN0X3J3eF9p
c19zdXBwb3J0ZWQoKSk7Ci0gICAgICAgICAgICBvc190aHJlYWRfc2VsZl9yZXN0cmljdF9yd3hf
dG9fcngoKTsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQob3NfdGhyZWFkX3NlbGZfcmVzdHJpY3Rf
cnd4X2lzX3N1cHBvcnRlZCgpKTsKKyAgICAgICAgb3NfdGhyZWFkX3NlbGZfcmVzdHJpY3Rfcnd4
X3RvX3J4KCk7CiAKICNlbHNlIC8vIG5vdCBFTkFCTEUoRkFTVF9KSVRfUEVSTUlTU0lPTlMpIG9y
IEVOQUJMRShTRVBBUkFURURfV1hfSEVBUCkKICNpZiBFTkFCTEUoRkFTVF9KSVRfUEVSTUlTU0lP
TlMpCi0gICAgICAgICAgICBpZiAob3NfdGhyZWFkX3NlbGZfcmVzdHJpY3Rfcnd4X2lzX3N1cHBv
cnRlZCgpKSB7Ci0gICAgICAgICAgICAgICAgZ19qc2NDb25maWcudXNlRmFzdFBlcm1pc2lvbnNK
SVRDb3B5ID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICBvc190aHJlYWRfc2VsZl9yZXN0cmljdF9y
d3hfdG9fcngoKTsKLSAgICAgICAgICAgIH0gZWxzZQotI2VuZGlmCi0gICAgICAgICAgICBpZiAo
T3B0aW9uczo6dXNlU2VwYXJhdGVkV1hIZWFwKCkpIHsKLSAgICAgICAgICAgICAgICAvLyBGaXJz
dCBwYWdlIG9mIG91ciBKSVQgYWxsb2NhdGlvbiBpcyByZXNlcnZlZC4KLSAgICAgICAgICAgICAg
ICBBU1NFUlQocmVzZXJ2YXRpb25TaXplID49IHBhZ2VTaXplKCkgKiAyKTsKLSAgICAgICAgICAg
ICAgICByZXNlcnZhdGlvbkJhc2UgPSAodm9pZCopKCh1aW50cHRyX3QpcmVzZXJ2YXRpb25CYXNl
ICsgcGFnZVNpemUoKSk7Ci0gICAgICAgICAgICAgICAgcmVzZXJ2YXRpb25TaXplIC09IHBhZ2VT
aXplKCk7Ci0gICAgICAgICAgICAgICAgaW5pdGlhbGl6ZVNlcGFyYXRlZFdYSGVhcHMobV9yZXNl
cnZhdGlvbi5iYXNlKCksIHBhZ2VTaXplKCksIHJlc2VydmF0aW9uQmFzZSwgcmVzZXJ2YXRpb25T
aXplKTsKLSAgICAgICAgICAgIH0KKyAgICAgICAgaWYgKG9zX3RocmVhZF9zZWxmX3Jlc3RyaWN0
X3J3eF9pc19zdXBwb3J0ZWQoKSkgeworICAgICAgICAgICAgZ19qc2NDb25maWcudXNlRmFzdFBl
cm1pc2lvbnNKSVRDb3B5ID0gdHJ1ZTsKKyAgICAgICAgICAgIG9zX3RocmVhZF9zZWxmX3Jlc3Ry
aWN0X3J3eF90b19yeCgpOworICAgICAgICB9IGVsc2UKKyNlbmRpZgorICAgICAgICBpZiAoT3B0
aW9uczo6dXNlU2VwYXJhdGVkV1hIZWFwKCkpIHsKKyAgICAgICAgICAgIC8vIEZpcnN0IHBhZ2Ug
b2Ygb3VyIEpJVCBhbGxvY2F0aW9uIGlzIHJlc2VydmVkLgorICAgICAgICAgICAgQVNTRVJUKHJl
c2VydmF0aW9uLnNpemUgPj0gcGFnZVNpemUoKSAqIDIpOworICAgICAgICAgICAgcmVzZXJ2YXRp
b24uYmFzZSA9ICh2b2lkKikoc3RhdGljX2Nhc3Q8dWludHB0cl90PihyZXNlcnZhdGlvbi5iYXNl
KSArIHBhZ2VTaXplKCkpOworICAgICAgICAgICAgcmVzZXJ2YXRpb24uc2l6ZSAtPSBwYWdlU2l6
ZSgpOworICAgICAgICAgICAgaW5pdGlhbGl6ZVNlcGFyYXRlZFdYSGVhcHMocmVzZXJ2YXRpb24u
cGFnZVJlc2VydmF0aW9uLmJhc2UoKSwgcGFnZVNpemUoKSwgcmVzZXJ2YXRpb24uYmFzZSwgcmVz
ZXJ2YXRpb24uc2l6ZSk7CisgICAgICAgIH0KICNlbmRpZiAvLyBub3QgRU5BQkxFKEZBU1RfSklU
X1BFUk1JU1NJT05TKSBvciBFTkFCTEUoU0VQQVJBVEVEX1dYX0hFQVApCisgICAgICAgIHZvaWQq
IHJlc2VydmF0aW9uRW5kID0gcmVpbnRlcnByZXRfY2FzdDx1aW50OF90Kj4ocmVzZXJ2YXRpb24u
YmFzZSkgKyByZXNlcnZhdGlvbi5zaXplOwogCi0gICAgICAgICAgICBhZGRGcmVzaEZyZWVTcGFj
ZShyZXNlcnZhdGlvbkJhc2UsIHJlc2VydmF0aW9uU2l6ZSk7Ci0KLSAgICAgICAgICAgIEFTU0VS
VChieXRlc1Jlc2VydmVkKCkgPT0gcmVzZXJ2YXRpb25TaXplKTsgLy8gU2luY2Ugb3VyIGV4ZWN1
dGFibGUgbWVtb3J5IGlzIGZpeGVkLXNpemVkLCBieXRlc1Jlc2VydmVkIGlzIG5ldmVyIGNoYW5n
ZWQgYWZ0ZXIgaW5pdGlhbGl6YXRpb24uCisgICAgICAgIGdfanNjQ29uZmlnLnN0YXJ0RXhlY3V0
YWJsZU1lbW9yeSA9IHRhZ0NvZGVQdHI8RXhlY3V0YWJsZU1lbW9yeVB0clRhZz4ocmVzZXJ2YXRp
b24uYmFzZSk7CisgICAgICAgIGdfanNjQ29uZmlnLmVuZEV4ZWN1dGFibGVNZW1vcnkgPSB0YWdD
b2RlUHRyPEV4ZWN1dGFibGVNZW1vcnlQdHJUYWc+KHJlc2VydmF0aW9uRW5kKTsKKyAgICB9CiAK
LSAgICAgICAgICAgIHZvaWQqIHJlc2VydmF0aW9uRW5kID0gcmVpbnRlcnByZXRfY2FzdDx1aW50
OF90Kj4ocmVzZXJ2YXRpb25CYXNlKSArIHJlc2VydmF0aW9uU2l6ZTsKKyAgICByZXR1cm4gcmVz
ZXJ2YXRpb247Cit9CiAKLSAgICAgICAgICAgIGdfanNjQ29uZmlnLnN0YXJ0RXhlY3V0YWJsZU1l
bW9yeSA9IHRhZ0NvZGVQdHI8RXhlY3V0YWJsZU1lbW9yeVB0clRhZz4ocmVzZXJ2YXRpb25CYXNl
KTsKLSAgICAgICAgICAgIGdfanNjQ29uZmlnLmVuZEV4ZWN1dGFibGVNZW1vcnkgPSB0YWdDb2Rl
UHRyPEV4ZWN1dGFibGVNZW1vcnlQdHJUYWc+KHJlc2VydmF0aW9uRW5kKTsKK2NsYXNzIEZpeGVk
Vk1Qb29sRXhlY3V0YWJsZUFsbG9jYXRvciBmaW5hbCA6IHB1YmxpYyBNZXRhQWxsb2NhdG9yIHsK
KyAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKK3B1YmxpYzoKKyAgICBGaXhlZFZNUG9vbEV4
ZWN1dGFibGVBbGxvY2F0b3IoKQorICAgICAgICA6IE1ldGFBbGxvY2F0b3Ioaml0QWxsb2NhdGlv
bkdyYW51bGUpIC8vIHJvdW5kIHVwIGFsbCBhbGxvY2F0aW9ucyB0byAzMiBieXRlcworICAgIHsK
KyAgICAgICAgSklUUmVzZXJ2YXRpb24gcmVzZXJ2YXRpb24gPSBpbml0aWFsaXplSklUUGFnZVJl
c2VydmF0aW9uKCk7CisgICAgICAgIG1fcmVzZXJ2YXRpb24gPSBXVEZNb3ZlKHJlc2VydmF0aW9u
LnBhZ2VSZXNlcnZhdGlvbik7CisgICAgICAgIGlmIChtX3Jlc2VydmF0aW9uKSB7CisgICAgICAg
ICAgICBhZGRGcmVzaEZyZWVTcGFjZShyZXNlcnZhdGlvbi5iYXNlLCByZXNlcnZhdGlvbi5zaXpl
KTsKKyAgICAgICAgICAgIEFTU0VSVChieXRlc1Jlc2VydmVkKCkgPT0gcmVzZXJ2YXRpb24uc2l6
ZSk7IC8vIFNpbmNlIG91ciBleGVjdXRhYmxlIG1lbW9yeSBpcyBmaXhlZC1zaXplZCwgYnl0ZXNS
ZXNlcnZlZCBpcyBuZXZlciBjaGFuZ2VkIGFmdGVyIGluaXRpYWxpemF0aW9uLgogICAgICAgICB9
CiAgICAgfQogCkBAIC0yMzIsMTc4ICszOTMsMTUgQEAgcHJvdGVjdGVkOgogCiAgICAgdm9pZCBu
b3RpZnlOZWVkUGFnZSh2b2lkKiBwYWdlLCBzaXplX3QgY291bnQpIG92ZXJyaWRlCiAgICAgewot
I2lmIFVTRShNQURWX0ZSRUVfRk9SX0pJVF9NRU1PUlkpCi0gICAgICAgIFVOVVNFRF9QQVJBTShw
YWdlKTsKLSAgICAgICAgVU5VU0VEX1BBUkFNKGNvdW50KTsKLSNlbHNlCiAgICAgICAgIG1fcmVz
ZXJ2YXRpb24uY29tbWl0KHBhZ2UsIHBhZ2VTaXplKCkgKiBjb3VudCk7Ci0jZW5kaWYKICAgICB9
CiAKICAgICB2b2lkIG5vdGlmeVBhZ2VJc0ZyZWUodm9pZCogcGFnZSwgc2l6ZV90IGNvdW50KSBv
dmVycmlkZQogICAgIHsKLSNpZiBVU0UoTUFEVl9GUkVFX0ZPUl9KSVRfTUVNT1JZKQotICAgICAg
ICBmb3IgKDs7KSB7Ci0gICAgICAgICAgICBpbnQgcmVzdWx0ID0gbWFkdmlzZShwYWdlLCBwYWdl
U2l6ZSgpICogY291bnQsIE1BRFZfRlJFRSk7Ci0gICAgICAgICAgICBpZiAoIXJlc3VsdCkKLSAg
ICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICBBU1NFUlQocmVzdWx0ID09IC0xKTsK
LSAgICAgICAgICAgIGlmIChlcnJubyAhPSBFQUdBSU4pIHsKLSAgICAgICAgICAgICAgICBSRUxF
QVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOyAvLyBJbiBkZWJ1ZyBtb2RlLCB0aGlzIHNob3VsZCBi
ZSBhIGhhcmQgZmFpbHVyZS4KLSAgICAgICAgICAgICAgICBicmVhazsgLy8gSW4gcmVsZWFzZSBt
b2RlLCB3ZSBzaG91bGQganVzdCBpZ25vcmUgdGhlIGVycm9yIC0gbm90IHJldHVybmluZyBtZW1v
cnkgdG8gdGhlIE9TIGlzIGJldHRlciB0aGFuIGNyYXNoaW5nLCBlc3BlY2lhbGx5IHNpbmNlIHdl
IF93aWxsXyBiZSBhYmxlIHRvIHJldXNlIHRoZSBtZW1vcnkgaW50ZXJuYWxseSBhbnl3YXkuCi0g
ICAgICAgICAgICB9Ci0gICAgICAgIH0KLSNlbHNlCiAgICAgICAgIG1fcmVzZXJ2YXRpb24uZGVj
b21taXQocGFnZSwgcGFnZVNpemUoKSAqIGNvdW50KTsKLSNlbmRpZgogICAgIH0KIAogcHJpdmF0
ZToKLSNpZiBPUyhEQVJXSU4pICYmIEhBVkUoUkVNQVBfSklUKQotICAgIHZvaWQgaW5pdGlhbGl6
ZVNlcGFyYXRlZFdYSGVhcHModm9pZCogc3R1YkJhc2UsIHNpemVfdCBzdHViU2l6ZSwgdm9pZCog
aml0QmFzZSwgc2l6ZV90IGppdFNpemUpCi0gICAgewotICAgICAgICBtYWNoX3ZtX2FkZHJlc3Nf
dCB3cml0YWJsZUFkZHIgPSAwOwotCi0gICAgICAgIC8vIENyZWF0ZSBhIHNlY29uZCBtYXBwaW5n
IG9mIHRoZSBKSVQgcmVnaW9uIGF0IGEgcmFuZG9tIGFkZHJlc3MuCi0gICAgICAgIHZtX3Byb3Rf
dCBjdXIsIG1heDsKLSAgICAgICAgaW50IHJlbWFwRmxhZ3MgPSBWTV9GTEFHU19BTllXSEVSRTsK
LSNpZiBkZWZpbmVkKFZNX0ZMQUdTX1JBTkRPTV9BRERSKQotICAgICAgICByZW1hcEZsYWdzIHw9
IFZNX0ZMQUdTX1JBTkRPTV9BRERSOwotI2VuZGlmCi0gICAgICAgIGtlcm5fcmV0dXJuX3QgcmV0
ID0gbWFjaF92bV9yZW1hcChtYWNoX3Rhc2tfc2VsZigpLCAmd3JpdGFibGVBZGRyLCBqaXRTaXpl
LCAwLAotICAgICAgICAgICAgcmVtYXBGbGFncywKLSAgICAgICAgICAgIG1hY2hfdGFza19zZWxm
KCksIChtYWNoX3ZtX2FkZHJlc3NfdClqaXRCYXNlLCBGQUxTRSwKLSAgICAgICAgICAgICZjdXIs
ICZtYXgsIFZNX0lOSEVSSVRfREVGQVVMVCk7Ci0KLSAgICAgICAgYm9vbCByZW1hcFN1Y2NlZWRl
ZCA9IChyZXQgPT0gS0VSTl9TVUNDRVNTKTsKLSAgICAgICAgaWYgKCFyZW1hcFN1Y2NlZWRlZCkK
LSAgICAgICAgICAgIHJldHVybjsKLQotICAgICAgICAvLyBBc3NlbWJsZSBhIHRodW5rIHRoYXQg
d2lsbCBzZXJ2ZSBhcyB0aGUgbWVhbnMgZm9yIHdyaXRpbmcgaW50byB0aGUgSklUIHJlZ2lvbi4K
LSAgICAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiB3cml0ZVRodW5r
ID0gaml0V3JpdGVUaHVua0dlbmVyYXRvcihyZWludGVycHJldF9jYXN0PHZvaWQqPih3cml0YWJs
ZUFkZHIpLCBzdHViQmFzZSwgc3R1YlNpemUpOwotCi0gICAgICAgIGludCByZXN1bHQgPSAwOwot
Ci0jaWYgVVNFKEVYRUNVVEVfT05MWV9KSVRfV1JJVEVfRlVOQ1RJT04pCi0gICAgICAgIC8vIFBy
ZXZlbnQgcmVhZGluZyB0aGUgd3JpdGUgdGh1bmsgY29kZS4KLSAgICAgICAgcmVzdWx0ID0gdm1f
cHJvdGVjdChtYWNoX3Rhc2tfc2VsZigpLCByZWludGVycHJldF9jYXN0PHZtX2FkZHJlc3NfdD4o
c3R1YkJhc2UpLCBzdHViU2l6ZSwgdHJ1ZSwgVk1fUFJPVF9FWEVDVVRFKTsKLSAgICAgICAgUkVM
RUFTRV9BU1NFUlQoIXJlc3VsdCk7Ci0jZW5kaWYKLQotICAgICAgICAvLyBQcmV2ZW50IHdyaXRp
bmcgaW50byB0aGUgZXhlY3V0YWJsZSBKSVQgbWFwcGluZy4KLSAgICAgICAgcmVzdWx0ID0gdm1f
cHJvdGVjdChtYWNoX3Rhc2tfc2VsZigpLCByZWludGVycHJldF9jYXN0PHZtX2FkZHJlc3NfdD4o
aml0QmFzZSksIGppdFNpemUsIHRydWUsIFZNX1BST1RfUkVBRCB8IFZNX1BST1RfRVhFQ1VURSk7
Ci0gICAgICAgIFJFTEVBU0VfQVNTRVJUKCFyZXN1bHQpOwotCi0gICAgICAgIC8vIFByZXZlbnQg
ZXhlY3V0aW9uIGluIHRoZSB3cml0YWJsZSBKSVQgbWFwcGluZy4KLSAgICAgICAgcmVzdWx0ID0g
dm1fcHJvdGVjdChtYWNoX3Rhc2tfc2VsZigpLCBzdGF0aWNfY2FzdDx2bV9hZGRyZXNzX3Q+KHdy
aXRhYmxlQWRkciksIGppdFNpemUsIHRydWUsIFZNX1BST1RfUkVBRCB8IFZNX1BST1RfV1JJVEUp
OwotICAgICAgICBSRUxFQVNFX0FTU0VSVCghcmVzdWx0KTsKLQotICAgICAgICAvLyBaZXJvIG91
dCB3cml0YWJsZUFkZHIgdG8gYXZvaWQgbGVha2luZyB0aGUgYWRkcmVzcyBvZiB0aGUgd3JpdGFi
bGUgbWFwcGluZy4KLSAgICAgICAgbWVtc2V0X3MoJndyaXRhYmxlQWRkciwgc2l6ZW9mKHdyaXRh
YmxlQWRkciksIDAsIHNpemVvZih3cml0YWJsZUFkZHIpKTsKLQotI2lmIEVOQUJMRShTRVBBUkFU
RURfV1hfSEVBUCkKLSAgICAgICAgZ19qc2NDb25maWcuaml0V3JpdGVTZXBhcmF0ZUhlYXBzID0g
cmVpbnRlcnByZXRfY2FzdDxKSVRXcml0ZVNlcGFyYXRlSGVhcHNGdW5jdGlvbj4od3JpdGVUaHVu
ay5jb2RlKCkuZXhlY3V0YWJsZUFkZHJlc3MoKSk7Ci0jZW5kaWYKLSAgICB9Ci0KLSNpZiBDUFUo
QVJNNjQpICYmIFVTRShFWEVDVVRFX09OTFlfSklUX1dSSVRFX0ZVTkNUSU9OKQotICAgIE1hY3Jv
QXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gaml0V3JpdGVUaHVua0dlbmVyYXRvcih2
b2lkKiB3cml0YWJsZUFkZHIsIHZvaWQqIHN0dWJCYXNlLCBzaXplX3Qgc3R1YlNpemUpCi0gICAg
ewotICAgICAgICB1c2luZyBuYW1lc3BhY2UgQVJNNjRSZWdpc3RlcnM7Ci0gICAgICAgIHVzaW5n
IFRydXN0ZWRJbW0zMiA9IE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzI7Ci0KLSAgICAgICAg
TWFjcm9Bc3NlbWJsZXIgaml0OwotCi0gICAgICAgIGppdC50YWdSZXR1cm5BZGRyZXNzKCk7Ci0g
ICAgICAgIGppdC5tb3ZlKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKHdyaXRhYmxlQWRk
ciksIHg3KTsKLSAgICAgICAgaml0LmFkZFB0cih4NywgeDApOwotCi0gICAgICAgIGppdC5tb3Zl
KHgwLCB4Myk7Ci0gICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIHNtYWxsQ29weSA9IGppdC5i
cmFuY2g2NChNYWNyb0Fzc2VtYmxlcjo6QmVsb3csIHgyLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3Rl
ZEltbTY0KDY0KSk7Ci0KLSAgICAgICAgaml0LmFkZDY0KFRydXN0ZWRJbW0zMigzMiksIHgzKTsK
LSAgICAgICAgaml0LmFuZDY0KFRydXN0ZWRJbW0zMigtMzIpLCB4Myk7Ci0gICAgICAgIGppdC5s
b2FkUGFpcjY0KHgxLCB4MTIsIHgxMyk7Ci0gICAgICAgIGppdC5sb2FkUGFpcjY0KHgxLCBUcnVz
dGVkSW1tMzIoMTYpLCB4MTQsIHgxNSk7Ci0gICAgICAgIGppdC5zdWI2NCh4MywgeDAsIHg1KTsK
LSAgICAgICAgaml0LmFkZFB0cih4NSwgeDEpOwotCi0gICAgICAgIGppdC5sb2FkUGFpcjY0KHgx
LCB4OCwgeDkpOwotICAgICAgICBqaXQubG9hZFBhaXI2NCh4MSwgVHJ1c3RlZEltbTMyKDE2KSwg
eDEwLCB4MTEpOwotICAgICAgICBqaXQuYWRkNjQoVHJ1c3RlZEltbTMyKDMyKSwgeDEpOwotICAg
ICAgICBqaXQuc3ViNjQoeDUsIHgyKTsKLSAgICAgICAgaml0LnN0b3JlUGFpcjY0KHgxMiwgeDEz
LCB4MCk7Ci0gICAgICAgIGppdC5zdG9yZVBhaXI2NCh4MTQsIHgxNSwgeDAsIFRydXN0ZWRJbW0z
MigxNikpOwotICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBjbGVhbnVwID0gaml0LmJyYW5j
aFN1YjY0KE1hY3JvQXNzZW1ibGVyOjpCZWxvd09yRXF1YWwsIFRydXN0ZWRJbW0zMig2NCksIHgy
KTsKLQotICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6TGFiZWwgY29weUxvb3AgPSBqaXQubGFiZWwo
KTsKLSAgICAgICAgaml0LnN0b3JlUGFpcjY0V2l0aE5vblRlbXBvcmFsQWNjZXNzKHg4LCB4OSwg
eDMpOwotICAgICAgICBqaXQuc3RvcmVQYWlyNjRXaXRoTm9uVGVtcG9yYWxBY2Nlc3MoeDEwLCB4
MTEsIHgzLCBUcnVzdGVkSW1tMzIoMTYpKTsKLSAgICAgICAgaml0LmFkZDY0KFRydXN0ZWRJbW0z
MigzMiksIHgzKTsKLSAgICAgICAgaml0LmxvYWRQYWlyNjRXaXRoTm9uVGVtcG9yYWxBY2Nlc3Mo
eDEsIHg4LCB4OSk7Ci0gICAgICAgIGppdC5sb2FkUGFpcjY0V2l0aE5vblRlbXBvcmFsQWNjZXNz
KHgxLCBUcnVzdGVkSW1tMzIoMTYpLCB4MTAsIHgxMSk7Ci0gICAgICAgIGppdC5hZGQ2NChUcnVz
dGVkSW1tMzIoMzIpLCB4MSk7Ci0gICAgICAgIGppdC5icmFuY2hTdWI2NChNYWNyb0Fzc2VtYmxl
cjo6QWJvdmUsIFRydXN0ZWRJbW0zMigzMiksIHgyKS5saW5rVG8oY29weUxvb3AsICZqaXQpOwot
Ci0gICAgICAgIGNsZWFudXAubGluaygmaml0KTsKLSAgICAgICAgaml0LmFkZDY0KHgyLCB4MSk7
Ci0gICAgICAgIGppdC5sb2FkUGFpcjY0KHgxLCB4MTIsIHgxMyk7Ci0gICAgICAgIGppdC5sb2Fk
UGFpcjY0KHgxLCBUcnVzdGVkSW1tMzIoMTYpLCB4MTQsIHgxNSk7Ci0gICAgICAgIGppdC5zdG9y
ZVBhaXI2NCh4OCwgeDksIHgzKTsKLSAgICAgICAgaml0LnN0b3JlUGFpcjY0KHgxMCwgeDExLCB4
MywgVHJ1c3RlZEltbTMyKDE2KSk7Ci0gICAgICAgIGppdC5hZGRQdHIoeDIsIHgzKTsKLSAgICAg
ICAgaml0LnN0b3JlUGFpcjY0KHgxMiwgeDEzLCB4MywgVHJ1c3RlZEltbTMyKDMyKSk7Ci0gICAg
ICAgIGppdC5zdG9yZVBhaXI2NCh4MTQsIHgxNSwgeDMsIFRydXN0ZWRJbW0zMig0OCkpOwotICAg
ICAgICBqaXQucmV0KCk7Ci0KLSAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkxhYmVsIGxvY2FsMCA9
IGppdC5sYWJlbCgpOwotICAgICAgICBqaXQubG9hZDY0KHgxLCBQb3N0SW5kZXgoOCksIHg2KTsK
LSAgICAgICAgaml0LnN0b3JlNjQoeDYsIHgzLCBQb3N0SW5kZXgoOCkpOwotICAgICAgICBzbWFs
bENvcHkubGluaygmaml0KTsKLSAgICAgICAgaml0LmJyYW5jaFN1YjY0KE1hY3JvQXNzZW1ibGVy
OjpBYm92ZU9yRXF1YWwsIFRydXN0ZWRJbW0zMig4KSwgeDIpLmxpbmtUbyhsb2NhbDAsICZqaXQp
OwotICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBsb2NhbDIgPSBqaXQuYnJhbmNoQWRkNjQo
TWFjcm9Bc3NlbWJsZXI6OkVxdWFsLCBUcnVzdGVkSW1tMzIoOCksIHgyKTsKLSAgICAgICAgTWFj
cm9Bc3NlbWJsZXI6OkxhYmVsIGxvY2FsMSA9IGppdC5sYWJlbCgpOwotICAgICAgICBqaXQubG9h
ZDgoeDEsIFBvc3RJbmRleCgxKSwgeDYpOwotICAgICAgICBqaXQuc3RvcmU4KHg2LCB4MywgUG9z
dEluZGV4KDEpKTsKLSAgICAgICAgaml0LmJyYW5jaFN1YjY0KE1hY3JvQXNzZW1ibGVyOjpOb3RF
cXVhbCwgVHJ1c3RlZEltbTMyKDEpLCB4MikubGlua1RvKGxvY2FsMSwgJmppdCk7Ci0gICAgICAg
IGxvY2FsMi5saW5rKCZqaXQpOwotICAgICAgICBqaXQucmV0KCk7Ci0KLSAgICAgICAgYXV0byBz
dHViQmFzZUNvZGVQdHIgPSBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8TGlua0J1ZmZlclB0clRhZz4o
dGFnQ29kZVB0cjxMaW5rQnVmZmVyUHRyVGFnPihzdHViQmFzZSkpOwotICAgICAgICBMaW5rQnVm
ZmVyIGxpbmtCdWZmZXIoaml0LCBzdHViQmFzZUNvZGVQdHIsIHN0dWJTaXplKTsKLSAgICAgICAg
Ly8gV2UgZG9uJ3QgdXNlIEZJTkFMSVpFX0NPREUoKSBmb3IgdHdvIHJlYXNvbnMuCi0gICAgICAg
IC8vIFRoZSBmaXJzdCBpcyB0aGF0IHdlIGRvbid0IHdhbnQgdGhlIHdyaXRlYWJsZSBhZGRyZXNz
LCBhcyBkaXNhc3NlbWJsZWQgaW5zdHJ1Y3Rpb25zLAotICAgICAgICAvLyB0byBhcHBlYXIgaW4g
dGhlIGNvbnNvbGUgb3IgYW55d2hlcmUgaW4gbWVtb3J5LCB2aWEgdGhlIFByaW50U3RyZWFtIGJ1
ZmZlci4KLSAgICAgICAgLy8gVGhlIHNlY29uZCBpcyB3ZSBjYW4ndCBndWFyYW50ZWUgdGhhdCB0
aGUgY29kZSBpcyByZWFkYWJsZSB3aGVuIHVzaW5nIHRoZQotICAgICAgICAvLyBhc3luY0Rpc2Fz
c2VtYmx5IG9wdGlvbiBhcyBvdXIgY2FsbGVyIHdpbGwgc2V0IG91ciBwYWdlcyBleGVjdXRlIG9u
bHkuCi0gICAgICAgIHJldHVybiBsaW5rQnVmZmVyLmZpbmFsaXplQ29kZVdpdGhvdXREaXNhc3Nl
bWJseTxKSVRUaHVua1B0clRhZz4oKTsKLSAgICB9Ci0jZWxzZSAvLyBub3QgQ1BVKEFSTTY0KSAm
JiBVU0UoRVhFQ1VURV9PTkxZX0pJVF9XUklURV9GVU5DVElPTikKLSAgICBzdGF0aWMgdm9pZCBn
ZW5lcmljV3JpdGVUb0pJVFJlZ2lvbihvZmZfdCBvZmZzZXQsIGNvbnN0IHZvaWQqIGRhdGEsIHNp
emVfdCBkYXRhU2l6ZSkKLSAgICB7Ci0gICAgICAgIG1lbWNweSgodm9pZCopKGdfanNjQ29uZmln
LnN0YXJ0T2ZGaXhlZFdyaXRhYmxlTWVtb3J5UG9vbCArIG9mZnNldCksIGRhdGEsIGRhdGFTaXpl
KTsKLSAgICB9Ci0KLSAgICBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IGpp
dFdyaXRlVGh1bmtHZW5lcmF0b3Iodm9pZCogYWRkcmVzcywgdm9pZCosIHNpemVfdCkKLSAgICB7
Ci0gICAgICAgIGdfanNjQ29uZmlnLnN0YXJ0T2ZGaXhlZFdyaXRhYmxlTWVtb3J5UG9vbCA9IHJl
aW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90PihhZGRyZXNzKTsKLSAgICAgICAgdm9pZCogZnVuY3Rp
b24gPSByZWludGVycHJldF9jYXN0PHZvaWQqPigmZ2VuZXJpY1dyaXRlVG9KSVRSZWdpb24pOwot
I2lmIENQVShBUk1fVEhVTUIyKQotICAgICAgICAvLyBIYW5kbGUgdGh1bWIgb2Zmc2V0Ci0gICAg
ICAgIHVpbnRwdHJfdCBmdW5jdGlvbkFzSW50ID0gcmVpbnRlcnByZXRfY2FzdDx1aW50cHRyX3Q+
KGZ1bmN0aW9uKTsKLSAgICAgICAgZnVuY3Rpb25Bc0ludCAtPSAxOwotICAgICAgICBmdW5jdGlv
biA9IHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KGZ1bmN0aW9uQXNJbnQpOwotI2VuZGlmCi0gICAg
ICAgIGF1dG8gY29kZVB0ciA9IE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxKSVRUaHVua1B0clRhZz4o
dGFnQ0Z1bmN0aW9uUHRyPEpJVFRodW5rUHRyVGFnPihmdW5jdGlvbikpOwotICAgICAgICByZXR1
cm4gTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPjo6Y3JlYXRlU2VsZk1hbmFn
ZWRDb2RlUmVmKGNvZGVQdHIpOwotICAgIH0KLSNlbmRpZiAvLyBDUFUoQVJNNjQpICYmIFVTRShF
WEVDVVRFX09OTFlfSklUX1dSSVRFX0ZVTkNUSU9OKQotCi0jZWxzZSAvLyBPUyhEQVJXSU4pICYm
IEhBVkUoUkVNQVBfSklUKQotICAgIHZvaWQgaW5pdGlhbGl6ZVNlcGFyYXRlZFdYSGVhcHModm9p
ZCosIHNpemVfdCwgdm9pZCosIHNpemVfdCkKLSAgICB7Ci0gICAgfQotI2VuZGlmCiAKIHByaXZh
dGU6CiAgICAgUGFnZVJlc2VydmF0aW9uIG1fcmVzZXJ2YXRpb247CkBAIC00MjcsNyArNDI1LDcg
QEAgdm9pZCBFeGVjdXRhYmxlQWxsb2NhdG9yOjppbml0aWFsaXplVW5kZQogCiBib29sIEV4ZWN1
dGFibGVBbGxvY2F0b3I6OmlzVmFsaWQoKSBjb25zdAogewotICAgIGF1dG8qIGFsbG9jYXRvciA9
IGdfanNjQ29uZmlnLmZpeGVkVk1Qb29sRXhlY3V0YWJsZUFsbG9jYXRvcjsKKyAgICBGaXhlZFZN
UG9vbEV4ZWN1dGFibGVBbGxvY2F0b3IqIGFsbG9jYXRvciA9IGdfanNjQ29uZmlnLmZpeGVkVk1Q
b29sRXhlY3V0YWJsZUFsbG9jYXRvcjsKICAgICBpZiAoIWFsbG9jYXRvcikKICAgICAgICAgcmV0
dXJuIEJhc2U6OmlzVmFsaWQoKTsKICAgICByZXR1cm4gISFhbGxvY2F0b3ItPmJ5dGVzUmVzZXJ2
ZWQoKTsKQEAgLTQzNSw3ICs0MzMsNyBAQCBib29sIEV4ZWN1dGFibGVBbGxvY2F0b3I6OmlzVmFs
aWQoKSBjb25zCiAKIGJvb2wgRXhlY3V0YWJsZUFsbG9jYXRvcjo6dW5kZXJNZW1vcnlQcmVzc3Vy
ZSgpCiB7Ci0gICAgYXV0byogYWxsb2NhdG9yID0gZ19qc2NDb25maWcuZml4ZWRWTVBvb2xFeGVj
dXRhYmxlQWxsb2NhdG9yOworICAgIEZpeGVkVk1Qb29sRXhlY3V0YWJsZUFsbG9jYXRvciogYWxs
b2NhdG9yID0gZ19qc2NDb25maWcuZml4ZWRWTVBvb2xFeGVjdXRhYmxlQWxsb2NhdG9yOwogICAg
IGlmICghYWxsb2NhdG9yKQogICAgICAgICByZXR1cm4gQmFzZTo6dW5kZXJNZW1vcnlQcmVzc3Vy
ZSgpOwogICAgIHJldHVybiBhbGxvY2F0b3ItPmJ5dGVzQWxsb2NhdGVkKCkgPiBhbGxvY2F0b3It
PmJ5dGVzUmVzZXJ2ZWQoKSAvIDI7CkBAIC00NDMsNyArNDQxLDcgQEAgYm9vbCBFeGVjdXRhYmxl
QWxsb2NhdG9yOjp1bmRlck1lbW9yeVByZQogCiBkb3VibGUgRXhlY3V0YWJsZUFsbG9jYXRvcjo6
bWVtb3J5UHJlc3N1cmVNdWx0aXBsaWVyKHNpemVfdCBhZGRlZE1lbW9yeVVzYWdlKQogewotICAg
IGF1dG8qIGFsbG9jYXRvciA9IGdfanNjQ29uZmlnLmZpeGVkVk1Qb29sRXhlY3V0YWJsZUFsbG9j
YXRvcjsKKyAgICBGaXhlZFZNUG9vbEV4ZWN1dGFibGVBbGxvY2F0b3IqIGFsbG9jYXRvciA9IGdf
anNjQ29uZmlnLmZpeGVkVk1Qb29sRXhlY3V0YWJsZUFsbG9jYXRvcjsKICAgICBpZiAoIWFsbG9j
YXRvcikKICAgICAgICAgcmV0dXJuIEJhc2U6Om1lbW9yeVByZXNzdXJlTXVsdGlwbGllcihhZGRl
ZE1lbW9yeVVzYWdlKTsKICAgICBBU1NFUlQoYWxsb2NhdG9yLT5ieXRlc0FsbG9jYXRlZCgpIDw9
IGFsbG9jYXRvci0+Ynl0ZXNSZXNlcnZlZCgpKTsKQEAgLTQ2Myw3ICs0NjEsNyBAQCBkb3VibGUg
RXhlY3V0YWJsZUFsbG9jYXRvcjo6bWVtb3J5UHJlc3N1CiAKIFJlZlB0cjxFeGVjdXRhYmxlTWVt
b3J5SGFuZGxlPiBFeGVjdXRhYmxlQWxsb2NhdG9yOjphbGxvY2F0ZShzaXplX3Qgc2l6ZUluQnl0
ZXMsIHZvaWQqIG93bmVyVUlELCBKSVRDb21waWxhdGlvbkVmZm9ydCBlZmZvcnQpCiB7Ci0gICAg
YXV0byogYWxsb2NhdG9yID0gZ19qc2NDb25maWcuZml4ZWRWTVBvb2xFeGVjdXRhYmxlQWxsb2Nh
dG9yOworICAgIEZpeGVkVk1Qb29sRXhlY3V0YWJsZUFsbG9jYXRvciogYWxsb2NhdG9yID0gZ19q
c2NDb25maWcuZml4ZWRWTVBvb2xFeGVjdXRhYmxlQWxsb2NhdG9yOwogICAgIGlmICghYWxsb2Nh
dG9yKQogICAgICAgICByZXR1cm4gQmFzZTo6YWxsb2NhdGUoc2l6ZUluQnl0ZXMsIG93bmVyVUlE
LCBlZmZvcnQpOwogICAgIGlmIChPcHRpb25zOjpsb2dFeGVjdXRhYmxlQWxsb2NhdGlvbigpKSB7
CkBAIC01MTIsNyArNTEwLDcgQEAgUmVmUHRyPEV4ZWN1dGFibGVNZW1vcnlIYW5kbGU+IEV4ZWN1
dGFibAogCiBib29sIEV4ZWN1dGFibGVBbGxvY2F0b3I6OmlzVmFsaWRFeGVjdXRhYmxlTWVtb3J5
KGNvbnN0IEFic3RyYWN0TG9ja2VyJiBsb2NrZXIsIHZvaWQqIGFkZHJlc3MpCiB7Ci0gICAgYXV0
byogYWxsb2NhdG9yID0gZ19qc2NDb25maWcuZml4ZWRWTVBvb2xFeGVjdXRhYmxlQWxsb2NhdG9y
OworICAgIEZpeGVkVk1Qb29sRXhlY3V0YWJsZUFsbG9jYXRvciogYWxsb2NhdG9yID0gZ19qc2ND
b25maWcuZml4ZWRWTVBvb2xFeGVjdXRhYmxlQWxsb2NhdG9yOwogICAgIGlmICghYWxsb2NhdG9y
KQogICAgICAgICByZXR1cm4gQmFzZTo6aXNWYWxpZEV4ZWN1dGFibGVNZW1vcnkobG9ja2VyLCBh
ZGRyZXNzKTsKICAgICByZXR1cm4gYWxsb2NhdG9yLT5pc0luQWxsb2NhdGVkTWVtb3J5KGxvY2tl
ciwgYWRkcmVzcyk7CkBAIC01MjAsNyArNTE4LDcgQEAgYm9vbCBFeGVjdXRhYmxlQWxsb2NhdG9y
Ojppc1ZhbGlkRXhlY3V0YQogCiBMb2NrJiBFeGVjdXRhYmxlQWxsb2NhdG9yOjpnZXRMb2NrKCkg
Y29uc3QKIHsKLSAgICBhdXRvKiBhbGxvY2F0b3IgPSBnX2pzY0NvbmZpZy5maXhlZFZNUG9vbEV4
ZWN1dGFibGVBbGxvY2F0b3I7CisgICAgRml4ZWRWTVBvb2xFeGVjdXRhYmxlQWxsb2NhdG9yKiBh
bGxvY2F0b3IgPSBnX2pzY0NvbmZpZy5maXhlZFZNUG9vbEV4ZWN1dGFibGVBbGxvY2F0b3I7CiAg
ICAgaWYgKCFhbGxvY2F0b3IpCiAgICAgICAgIHJldHVybiBCYXNlOjpnZXRMb2NrKCk7CiAgICAg
cmV0dXJuIGFsbG9jYXRvci0+Z2V0TG9jaygpOwpAQCAtNTI4LDcgKzUyNiw3IEBAIExvY2smIEV4
ZWN1dGFibGVBbGxvY2F0b3I6OmdldExvY2soKSBjb24KIAogc2l6ZV90IEV4ZWN1dGFibGVBbGxv
Y2F0b3I6OmNvbW1pdHRlZEJ5dGVDb3VudCgpCiB7Ci0gICAgYXV0byogYWxsb2NhdG9yID0gZ19q
c2NDb25maWcuZml4ZWRWTVBvb2xFeGVjdXRhYmxlQWxsb2NhdG9yOworICAgIEZpeGVkVk1Qb29s
RXhlY3V0YWJsZUFsbG9jYXRvciogYWxsb2NhdG9yID0gZ19qc2NDb25maWcuZml4ZWRWTVBvb2xF
eGVjdXRhYmxlQWxsb2NhdG9yOwogICAgIGlmICghYWxsb2NhdG9yKQogICAgICAgICByZXR1cm4g
QmFzZTo6Y29tbWl0dGVkQnl0ZUNvdW50KCk7CiAgICAgcmV0dXJuIGFsbG9jYXRvci0+Ynl0ZXND
b21taXR0ZWQoKTsKQEAgLTUzNyw3ICs1MzUsNyBAQCBzaXplX3QgRXhlY3V0YWJsZUFsbG9jYXRv
cjo6Y29tbWl0dGVkQnl0CiAjaWYgRU5BQkxFKE1FVEFfQUxMT0NBVE9SX1BST0ZJTEUpCiB2b2lk
IEV4ZWN1dGFibGVBbGxvY2F0b3I6OmR1bXBQcm9maWxlKCkKIHsKLSAgICBhdXRvKiBhbGxvY2F0
b3IgPSBnX2pzY0NvbmZpZy5maXhlZFZNUG9vbEV4ZWN1dGFibGVBbGxvY2F0b3I7CisgICAgRml4
ZWRWTVBvb2xFeGVjdXRhYmxlQWxsb2NhdG9yKiBhbGxvY2F0b3IgPSBnX2pzY0NvbmZpZy5maXhl
ZFZNUG9vbEV4ZWN1dGFibGVBbGxvY2F0b3I7CiAgICAgaWYgKCFhbGxvY2F0b3IpCiAgICAgICAg
IHJldHVybjsKICAgICBhbGxvY2F0b3ItPmR1bXBQcm9maWxlKCk7CkBAIC01NDYsNyArNTQ0LDcg
QEAgdm9pZCBFeGVjdXRhYmxlQWxsb2NhdG9yOjpkdW1wUHJvZmlsZSgpCiAKIHZvaWQqIHN0YXJ0
T2ZGaXhlZEV4ZWN1dGFibGVNZW1vcnlQb29sSW1wbCgpCiB7Ci0gICAgYXV0byogYWxsb2NhdG9y
ID0gZ19qc2NDb25maWcuZml4ZWRWTVBvb2xFeGVjdXRhYmxlQWxsb2NhdG9yOworICAgIEZpeGVk
Vk1Qb29sRXhlY3V0YWJsZUFsbG9jYXRvciogYWxsb2NhdG9yID0gZ19qc2NDb25maWcuZml4ZWRW
TVBvb2xFeGVjdXRhYmxlQWxsb2NhdG9yOwogICAgIGlmICghYWxsb2NhdG9yKQogICAgICAgICBy
ZXR1cm4gbnVsbHB0cjsKICAgICByZXR1cm4gYWxsb2NhdG9yLT5tZW1vcnlTdGFydCgpOwpAQCAt
NTU0LDcgKzU1Miw3IEBAIHZvaWQqIHN0YXJ0T2ZGaXhlZEV4ZWN1dGFibGVNZW1vcnlQb29sSW0K
IAogdm9pZCogZW5kT2ZGaXhlZEV4ZWN1dGFibGVNZW1vcnlQb29sSW1wbCgpCiB7Ci0gICAgYXV0
byogYWxsb2NhdG9yID0gZ19qc2NDb25maWcuZml4ZWRWTVBvb2xFeGVjdXRhYmxlQWxsb2NhdG9y
OworICAgIEZpeGVkVk1Qb29sRXhlY3V0YWJsZUFsbG9jYXRvciogYWxsb2NhdG9yID0gZ19qc2ND
b25maWcuZml4ZWRWTVBvb2xFeGVjdXRhYmxlQWxsb2NhdG9yOwogICAgIGlmICghYWxsb2NhdG9y
KQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICByZXR1cm4gYWxsb2NhdG9yLT5tZW1vcnlF
bmQoKTsKQEAgLTU2Miw3ICs1NjAsNyBAQCB2b2lkKiBlbmRPZkZpeGVkRXhlY3V0YWJsZU1lbW9y
eVBvb2xJbXBsCiAKIGJvb2wgaXNKSVRQQyh2b2lkKiBwYykKIHsKLSAgICBhdXRvKiBhbGxvY2F0
b3IgPSBnX2pzY0NvbmZpZy5maXhlZFZNUG9vbEV4ZWN1dGFibGVBbGxvY2F0b3I7CisgICAgRml4
ZWRWTVBvb2xFeGVjdXRhYmxlQWxsb2NhdG9yKiBhbGxvY2F0b3IgPSBnX2pzY0NvbmZpZy5maXhl
ZFZNUG9vbEV4ZWN1dGFibGVBbGxvY2F0b3I7CiAgICAgcmV0dXJuIGFsbG9jYXRvciAmJiBhbGxv
Y2F0b3ItPmlzSklUUEMocGMpOwogfQogCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>392359</attachid>
            <date>2020-03-03 18:30:25 -0800</date>
            <delta_ts>2020-03-03 21:25:25 -0800</delta_ts>
            <desc>WIP</desc>
            <filename>c-backup.diff</filename>
            <type>text/plain</type>
            <size>31769</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjU3ODAzKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDMzIEBA
CisyMDIwLTAzLTAzICBTYWFtIEJhcmF0aSAgPHNiYXJhdGlAYXBwbGUuY29tPgorCisgICAgICAg
IFJlZmFjdG9yIEZpeGVkVk1Qb29sRXhlY3V0YWJsZUFsbG9jYXRvciB0byBub3QgaGF2ZSBtZW1i
ZXIgZnVuY3Rpb25zIHdoaWNoIGFyZSByZWFsbHkganVzdCBoZWxwZXIgZnVuY3Rpb25zCisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMDg1MzcKKworICAg
ICAgICBSZXZpZXdlZCBieSBNYXJrIExhbS4KKworICAgICAgICBUaGVyZSB3ZXJlIGEgZmV3IG1l
bWJlciBmdW5jdGlvbnMgaW4gRml4ZWRWTVBvb2xFeGVjdXRhYmxlQWxsb2NhdG9yIHRoYXQgd2Vy
ZQorICAgICAgICBlc3NlbnRpYWxseSBoZWxwZXIgZnVuY3Rpb25zLiBJJ3ZlIGZhY3RvcmVkIHRo
ZW0gb3V0LCBhbmQgbWFkZSBGaXhlZFZNUG9vbEV4ZWN1dGFibGVBbGxvY2F0b3IKKyAgICAgICAg
Y2FsbCB0aGVtIGRpcmVjdGx5LiBUaGlzIHJlZmFjdG9yaW5nIGlzIG5lZWRlZCB3aGVuIEkgaW1w
bGVtZW50IHRoZSAxR0IKKyAgICAgICAgZXhlY3V0YWJsZSBwb29sIG9uIGFybTY0IHNpbmNlIHRo
ZSBpbXBsZW1lbnRhdGlvbiBvZiB0aGF0IHdpbGwgY3JlYXRlIHNwbGl0CisgICAgICAgIGltcGxl
bWVudGF0aW9ucyBvZiBzb21ldGhpbmcgbGlrZSBGaXhlZFZNUG9vbEV4ZWN1dGFibGVBbGxvY2F0
b3IuCisKKyAgICAgICAgKiBqaXQvRXhlY3V0YWJsZUFsbG9jYXRvci5jcHA6CisgICAgICAgIChK
U0M6OmppdFdyaXRlVGh1bmtHZW5lcmF0b3IpOgorICAgICAgICAoSlNDOjpnZW5lcmljV3JpdGVU
b0pJVFJlZ2lvbik6CisgICAgICAgIChKU0M6OmluaXRpYWxpemVTZXBhcmF0ZWRXWEhlYXBzKToK
KyAgICAgICAgKEpTQzo6aW5pdGlhbGl6ZUpJVFBhZ2VSZXNlcnZhdGlvbik6CisgICAgICAgIChK
U0M6OkV4ZWN1dGFibGVBbGxvY2F0b3I6OmlzVmFsaWQgY29uc3QpOgorICAgICAgICAoSlNDOjpF
eGVjdXRhYmxlQWxsb2NhdG9yOjp1bmRlck1lbW9yeVByZXNzdXJlKToKKyAgICAgICAgKEpTQzo6
RXhlY3V0YWJsZUFsbG9jYXRvcjo6bWVtb3J5UHJlc3N1cmVNdWx0aXBsaWVyKToKKyAgICAgICAg
KEpTQzo6RXhlY3V0YWJsZUFsbG9jYXRvcjo6YWxsb2NhdGUpOgorICAgICAgICAoSlNDOjpFeGVj
dXRhYmxlQWxsb2NhdG9yOjppc1ZhbGlkRXhlY3V0YWJsZU1lbW9yeSk6CisgICAgICAgIChKU0M6
OkV4ZWN1dGFibGVBbGxvY2F0b3I6OmdldExvY2sgY29uc3QpOgorICAgICAgICAoSlNDOjpFeGVj
dXRhYmxlQWxsb2NhdG9yOjpjb21taXR0ZWRCeXRlQ291bnQpOgorICAgICAgICAoSlNDOjpFeGVj
dXRhYmxlQWxsb2NhdG9yOjpkdW1wUHJvZmlsZSk6CisgICAgICAgIChKU0M6OnN0YXJ0T2ZGaXhl
ZEV4ZWN1dGFibGVNZW1vcnlQb29sSW1wbCk6CisgICAgICAgIChKU0M6OmVuZE9mRml4ZWRFeGVj
dXRhYmxlTWVtb3J5UG9vbEltcGwpOgorICAgICAgICAoSlNDOjppc0pJVFBDKToKKwogMjAyMC0w
My0wMyAgQmFzdWtlIFN1enVraSAgPGJhc3VrZS5zdXp1a2lAc29ueS5jb20+CiAKICAgICAgICAg
W1dpbkNhaXJvXVtQbGF5U3RhdGlvbl0gQWRkIGludGVyZmFjZSB0byBnZXQgbGlzdGVuaW5nIHBv
cnQgb2YgUmVtb3RlSW5zcGVjdG9yU2VydmVyCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L0V4ZWN1dGFibGVBbGxvY2F0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvRXhlY3V0YWJsZUFsbG9jYXRvci5jcHAJKHJldmlzaW9uIDI1Nzc1MCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvRXhlY3V0YWJsZUFsbG9jYXRvci5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTMwLDYgKzMwLDcgQEAKIAogI2luY2x1ZGUgIkNvZGVQcm9maWxpbmcuaCIK
ICNpbmNsdWRlICJFeGVjdXRhYmxlQWxsb2NhdGlvbkZ1enouaCIKKyNpbmNsdWRlICJJdGVyYXRp
b25TdGF0dXMuaCIKICNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCiAjaW5jbHVkZSA8d3RmL0ZpbGVT
eXN0ZW0uaD4KICNpbmNsdWRlIDx3dGYvTWV0YUFsbG9jYXRvci5oPgpAQCAtMTU0LDI2NiArMTU1
LDM2MCBAQCB2b2lkIEV4ZWN1dGFibGVBbGxvY2F0b3I6OnNldEpJVEVuYWJsZWQoCiAjZW5kaWYK
IH0KIAotY2xhc3MgRml4ZWRWTVBvb2xFeGVjdXRhYmxlQWxsb2NhdG9yIGZpbmFsIDogcHVibGlj
IE1ldGFBbGxvY2F0b3IgewotICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwotcHVibGljOgot
ICAgIEZpeGVkVk1Qb29sRXhlY3V0YWJsZUFsbG9jYXRvcigpCi0gICAgICAgIDogTWV0YUFsbG9j
YXRvcihqaXRBbGxvY2F0aW9uR3JhbnVsZSkgLy8gcm91bmQgdXAgYWxsIGFsbG9jYXRpb25zIHRv
IDMyIGJ5dGVzCi0gICAgewotICAgICAgICBpZiAoIWlzSklURW5hYmxlZCgpKQotICAgICAgICAg
ICAgcmV0dXJuOworI2lmIE9TKERBUldJTikgJiYgSEFWRShSRU1BUF9KSVQpCisKKyNpZiBDUFUo
QVJNNjQpICYmIFVTRShFWEVDVVRFX09OTFlfSklUX1dSSVRFX0ZVTkNUSU9OKQorc3RhdGljIEFM
V0FZU19JTkxJTkUgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBqaXRXcml0
ZVRodW5rR2VuZXJhdG9yKHZvaWQqIHdyaXRhYmxlQWRkciwgdm9pZCogc3R1YkJhc2UsIHNpemVf
dCBzdHViU2l6ZSkKK3sKKyAgICB1c2luZyBuYW1lc3BhY2UgQVJNNjRSZWdpc3RlcnM7CisgICAg
dXNpbmcgVHJ1c3RlZEltbTMyID0gTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMjsKKworICAg
IE1hY3JvQXNzZW1ibGVyIGppdDsKKworICAgIGppdC50YWdSZXR1cm5BZGRyZXNzKCk7CisgICAg
aml0Lm1vdmUoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIod3JpdGFibGVBZGRyKSwgeDcp
OworICAgIGppdC5hZGRQdHIoeDcsIHgwKTsKKworICAgIGppdC5tb3ZlKHgwLCB4Myk7CisgICAg
TWFjcm9Bc3NlbWJsZXI6Okp1bXAgc21hbGxDb3B5ID0gaml0LmJyYW5jaDY0KE1hY3JvQXNzZW1i
bGVyOjpCZWxvdywgeDIsIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tNjQoNjQpKTsKKworICAg
IGppdC5hZGQ2NChUcnVzdGVkSW1tMzIoMzIpLCB4Myk7CisgICAgaml0LmFuZDY0KFRydXN0ZWRJ
bW0zMigtMzIpLCB4Myk7CisgICAgaml0LmxvYWRQYWlyNjQoeDEsIHgxMiwgeDEzKTsKKyAgICBq
aXQubG9hZFBhaXI2NCh4MSwgVHJ1c3RlZEltbTMyKDE2KSwgeDE0LCB4MTUpOworICAgIGppdC5z
dWI2NCh4MywgeDAsIHg1KTsKKyAgICBqaXQuYWRkUHRyKHg1LCB4MSk7CisKKyAgICBqaXQubG9h
ZFBhaXI2NCh4MSwgeDgsIHg5KTsKKyAgICBqaXQubG9hZFBhaXI2NCh4MSwgVHJ1c3RlZEltbTMy
KDE2KSwgeDEwLCB4MTEpOworICAgIGppdC5hZGQ2NChUcnVzdGVkSW1tMzIoMzIpLCB4MSk7Cisg
ICAgaml0LnN1YjY0KHg1LCB4Mik7CisgICAgaml0LnN0b3JlUGFpcjY0KHgxMiwgeDEzLCB4MCk7
CisgICAgaml0LnN0b3JlUGFpcjY0KHgxNCwgeDE1LCB4MCwgVHJ1c3RlZEltbTMyKDE2KSk7Cisg
ICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgY2xlYW51cCA9IGppdC5icmFuY2hTdWI2NChNYWNyb0Fz
c2VtYmxlcjo6QmVsb3dPckVxdWFsLCBUcnVzdGVkSW1tMzIoNjQpLCB4Mik7CisKKyAgICBNYWNy
b0Fzc2VtYmxlcjo6TGFiZWwgY29weUxvb3AgPSBqaXQubGFiZWwoKTsKKyAgICBqaXQuc3RvcmVQ
YWlyNjRXaXRoTm9uVGVtcG9yYWxBY2Nlc3MoeDgsIHg5LCB4Myk7CisgICAgaml0LnN0b3JlUGFp
cjY0V2l0aE5vblRlbXBvcmFsQWNjZXNzKHgxMCwgeDExLCB4MywgVHJ1c3RlZEltbTMyKDE2KSk7
CisgICAgaml0LmFkZDY0KFRydXN0ZWRJbW0zMigzMiksIHgzKTsKKyAgICBqaXQubG9hZFBhaXI2
NFdpdGhOb25UZW1wb3JhbEFjY2Vzcyh4MSwgeDgsIHg5KTsKKyAgICBqaXQubG9hZFBhaXI2NFdp
dGhOb25UZW1wb3JhbEFjY2Vzcyh4MSwgVHJ1c3RlZEltbTMyKDE2KSwgeDEwLCB4MTEpOworICAg
IGppdC5hZGQ2NChUcnVzdGVkSW1tMzIoMzIpLCB4MSk7CisgICAgaml0LmJyYW5jaFN1YjY0KE1h
Y3JvQXNzZW1ibGVyOjpBYm92ZSwgVHJ1c3RlZEltbTMyKDMyKSwgeDIpLmxpbmtUbyhjb3B5TG9v
cCwgJmppdCk7CisKKyAgICBjbGVhbnVwLmxpbmsoJmppdCk7CisgICAgaml0LmFkZDY0KHgyLCB4
MSk7CisgICAgaml0LmxvYWRQYWlyNjQoeDEsIHgxMiwgeDEzKTsKKyAgICBqaXQubG9hZFBhaXI2
NCh4MSwgVHJ1c3RlZEltbTMyKDE2KSwgeDE0LCB4MTUpOworICAgIGppdC5zdG9yZVBhaXI2NCh4
OCwgeDksIHgzKTsKKyAgICBqaXQuc3RvcmVQYWlyNjQoeDEwLCB4MTEsIHgzLCBUcnVzdGVkSW1t
MzIoMTYpKTsKKyAgICBqaXQuYWRkUHRyKHgyLCB4Myk7CisgICAgaml0LnN0b3JlUGFpcjY0KHgx
MiwgeDEzLCB4MywgVHJ1c3RlZEltbTMyKDMyKSk7CisgICAgaml0LnN0b3JlUGFpcjY0KHgxNCwg
eDE1LCB4MywgVHJ1c3RlZEltbTMyKDQ4KSk7CisgICAgaml0LnJldCgpOworCisgICAgTWFjcm9B
c3NlbWJsZXI6OkxhYmVsIGxvY2FsMCA9IGppdC5sYWJlbCgpOworICAgIGppdC5sb2FkNjQoeDEs
IFBvc3RJbmRleCg4KSwgeDYpOworICAgIGppdC5zdG9yZTY0KHg2LCB4MywgUG9zdEluZGV4KDgp
KTsKKyAgICBzbWFsbENvcHkubGluaygmaml0KTsKKyAgICBqaXQuYnJhbmNoU3ViNjQoTWFjcm9B
c3NlbWJsZXI6OkFib3ZlT3JFcXVhbCwgVHJ1c3RlZEltbTMyKDgpLCB4MikubGlua1RvKGxvY2Fs
MCwgJmppdCk7CisgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgbG9jYWwyID0gaml0LmJyYW5jaEFk
ZDY0KE1hY3JvQXNzZW1ibGVyOjpFcXVhbCwgVHJ1c3RlZEltbTMyKDgpLCB4Mik7CisgICAgTWFj
cm9Bc3NlbWJsZXI6OkxhYmVsIGxvY2FsMSA9IGppdC5sYWJlbCgpOworICAgIGppdC5sb2FkOCh4
MSwgUG9zdEluZGV4KDEpLCB4Nik7CisgICAgaml0LnN0b3JlOCh4NiwgeDMsIFBvc3RJbmRleCgx
KSk7CisgICAgaml0LmJyYW5jaFN1YjY0KE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgVHJ1c3Rl
ZEltbTMyKDEpLCB4MikubGlua1RvKGxvY2FsMSwgJmppdCk7CisgICAgbG9jYWwyLmxpbmsoJmpp
dCk7CisgICAgaml0LnJldCgpOworCisgICAgYXV0byBzdHViQmFzZUNvZGVQdHIgPSBNYWNyb0Fz
c2VtYmxlckNvZGVQdHI8TGlua0J1ZmZlclB0clRhZz4odGFnQ29kZVB0cjxMaW5rQnVmZmVyUHRy
VGFnPihzdHViQmFzZSkpOworICAgIExpbmtCdWZmZXIgbGlua0J1ZmZlcihqaXQsIHN0dWJCYXNl
Q29kZVB0ciwgc3R1YlNpemUpOworICAgIC8vIFdlIGRvbid0IHVzZSBGSU5BTElaRV9DT0RFKCkg
Zm9yIHR3byByZWFzb25zLgorICAgIC8vIFRoZSBmaXJzdCBpcyB0aGF0IHdlIGRvbid0IHdhbnQg
dGhlIHdyaXRlYWJsZSBhZGRyZXNzLCBhcyBkaXNhc3NlbWJsZWQgaW5zdHJ1Y3Rpb25zLAorICAg
IC8vIHRvIGFwcGVhciBpbiB0aGUgY29uc29sZSBvciBhbnl3aGVyZSBpbiBtZW1vcnksIHZpYSB0
aGUgUHJpbnRTdHJlYW0gYnVmZmVyLgorICAgIC8vIFRoZSBzZWNvbmQgaXMgd2UgY2FuJ3QgZ3Vh
cmFudGVlIHRoYXQgdGhlIGNvZGUgaXMgcmVhZGFibGUgd2hlbiB1c2luZyB0aGUKKyAgICAvLyBh
c3luY0Rpc2Fzc2VtYmx5IG9wdGlvbiBhcyBvdXIgY2FsbGVyIHdpbGwgc2V0IG91ciBwYWdlcyBl
eGVjdXRlIG9ubHkuCisgICAgcmV0dXJuIGxpbmtCdWZmZXIuZmluYWxpemVDb2RlV2l0aG91dERp
c2Fzc2VtYmx5PEpJVFRodW5rUHRyVGFnPigpOworfQorI2Vsc2UgLy8gbm90IENQVShBUk02NCkg
JiYgVVNFKEVYRUNVVEVfT05MWV9KSVRfV1JJVEVfRlVOQ1RJT04pCitzdGF0aWMgdm9pZCBnZW5l
cmljV3JpdGVUb0pJVFJlZ2lvbihvZmZfdCBvZmZzZXQsIGNvbnN0IHZvaWQqIGRhdGEsIHNpemVf
dCBkYXRhU2l6ZSkKK3sKKyAgICBtZW1jcHkoKHZvaWQqKShnX2pzY0NvbmZpZy5zdGFydE9mRml4
ZWRXcml0YWJsZU1lbW9yeVBvb2wgKyBvZmZzZXQpLCBkYXRhLCBkYXRhU2l6ZSk7Cit9CisKK3N0
YXRpYyBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IEFMV0FZU19JTkxJTkUg
aml0V3JpdGVUaHVua0dlbmVyYXRvcih2b2lkKiBhZGRyZXNzLCB2b2lkKiwgc2l6ZV90KQorewor
ICAgIGdfanNjQ29uZmlnLnN0YXJ0T2ZGaXhlZFdyaXRhYmxlTWVtb3J5UG9vbCA9IHJlaW50ZXJw
cmV0X2Nhc3Q8dWludHB0cl90PihhZGRyZXNzKTsKKyAgICB2b2lkKiBmdW5jdGlvbiA9IHJlaW50
ZXJwcmV0X2Nhc3Q8dm9pZCo+KCZnZW5lcmljV3JpdGVUb0pJVFJlZ2lvbik7CisjaWYgQ1BVKEFS
TV9USFVNQjIpCisgICAgLy8gSGFuZGxlIHRodW1iIG9mZnNldAorICAgIHVpbnRwdHJfdCBmdW5j
dGlvbkFzSW50ID0gcmVpbnRlcnByZXRfY2FzdDx1aW50cHRyX3Q+KGZ1bmN0aW9uKTsKKyAgICBm
dW5jdGlvbkFzSW50IC09IDE7CisgICAgZnVuY3Rpb24gPSByZWludGVycHJldF9jYXN0PHZvaWQq
PihmdW5jdGlvbkFzSW50KTsKKyNlbmRpZgorICAgIGF1dG8gY29kZVB0ciA9IE1hY3JvQXNzZW1i
bGVyQ29kZVB0cjxKSVRUaHVua1B0clRhZz4odGFnQ0Z1bmN0aW9uUHRyPEpJVFRodW5rUHRyVGFn
PihmdW5jdGlvbikpOworICAgIHJldHVybiBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQ
dHJUYWc+OjpjcmVhdGVTZWxmTWFuYWdlZENvZGVSZWYoY29kZVB0cik7Cit9CisjZW5kaWYgLy8g
Q1BVKEFSTTY0KSAmJiBVU0UoRVhFQ1VURV9PTkxZX0pJVF9XUklURV9GVU5DVElPTikKKworc3Rh
dGljIEFMV0FZU19JTkxJTkUgdm9pZCBpbml0aWFsaXplU2VwYXJhdGVkV1hIZWFwcyh2b2lkKiBz
dHViQmFzZSwgc2l6ZV90IHN0dWJTaXplLCB2b2lkKiBqaXRCYXNlLCBzaXplX3Qgaml0U2l6ZSkK
K3sKKyAgICBtYWNoX3ZtX2FkZHJlc3NfdCB3cml0YWJsZUFkZHIgPSAwOworCisgICAgLy8gQ3Jl
YXRlIGEgc2Vjb25kIG1hcHBpbmcgb2YgdGhlIEpJVCByZWdpb24gYXQgYSByYW5kb20gYWRkcmVz
cy4KKyAgICB2bV9wcm90X3QgY3VyLCBtYXg7CisgICAgaW50IHJlbWFwRmxhZ3MgPSBWTV9GTEFH
U19BTllXSEVSRTsKKyNpZiBkZWZpbmVkKFZNX0ZMQUdTX1JBTkRPTV9BRERSKQorICAgIHJlbWFw
RmxhZ3MgfD0gVk1fRkxBR1NfUkFORE9NX0FERFI7CisjZW5kaWYKKyAgICBrZXJuX3JldHVybl90
IHJldCA9IG1hY2hfdm1fcmVtYXAobWFjaF90YXNrX3NlbGYoKSwgJndyaXRhYmxlQWRkciwgaml0
U2l6ZSwgMCwKKyAgICAgICAgcmVtYXBGbGFncywKKyAgICAgICAgbWFjaF90YXNrX3NlbGYoKSwg
KG1hY2hfdm1fYWRkcmVzc190KWppdEJhc2UsIEZBTFNFLAorICAgICAgICAmY3VyLCAmbWF4LCBW
TV9JTkhFUklUX0RFRkFVTFQpOworCisgICAgYm9vbCByZW1hcFN1Y2NlZWRlZCA9IChyZXQgPT0g
S0VSTl9TVUNDRVNTKTsKKyAgICBpZiAoIXJlbWFwU3VjY2VlZGVkKQorICAgICAgICByZXR1cm47
CisKKyAgICAvLyBBc3NlbWJsZSBhIHRodW5rIHRoYXQgd2lsbCBzZXJ2ZSBhcyB0aGUgbWVhbnMg
Zm9yIHdyaXRpbmcgaW50byB0aGUgSklUIHJlZ2lvbi4KKyAgICBNYWNyb0Fzc2VtYmxlckNvZGVS
ZWY8SklUVGh1bmtQdHJUYWc+IHdyaXRlVGh1bmsgPSBqaXRXcml0ZVRodW5rR2VuZXJhdG9yKHJl
aW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KHdyaXRhYmxlQWRkciksIHN0dWJCYXNlLCBzdHViU2l6ZSk7
CisKKyAgICBpbnQgcmVzdWx0ID0gMDsKKworI2lmIFVTRShFWEVDVVRFX09OTFlfSklUX1dSSVRF
X0ZVTkNUSU9OKQorICAgIC8vIFByZXZlbnQgcmVhZGluZyB0aGUgd3JpdGUgdGh1bmsgY29kZS4K
KyAgICByZXN1bHQgPSB2bV9wcm90ZWN0KG1hY2hfdGFza19zZWxmKCksIHJlaW50ZXJwcmV0X2Nh
c3Q8dm1fYWRkcmVzc190PihzdHViQmFzZSksIHN0dWJTaXplLCB0cnVlLCBWTV9QUk9UX0VYRUNV
VEUpOworICAgIFJFTEVBU0VfQVNTRVJUKCFyZXN1bHQpOworI2VuZGlmCisKKyAgICAvLyBQcmV2
ZW50IHdyaXRpbmcgaW50byB0aGUgZXhlY3V0YWJsZSBKSVQgbWFwcGluZy4KKyAgICByZXN1bHQg
PSB2bV9wcm90ZWN0KG1hY2hfdGFza19zZWxmKCksIHJlaW50ZXJwcmV0X2Nhc3Q8dm1fYWRkcmVz
c190PihqaXRCYXNlKSwgaml0U2l6ZSwgdHJ1ZSwgVk1fUFJPVF9SRUFEIHwgVk1fUFJPVF9FWEVD
VVRFKTsKKyAgICBSRUxFQVNFX0FTU0VSVCghcmVzdWx0KTsKIAotICAgICAgICBzaXplX3QgcmVz
ZXJ2YXRpb25TaXplOwotICAgICAgICBpZiAoT3B0aW9uczo6aml0TWVtb3J5UmVzZXJ2YXRpb25T
aXplKCkpCi0gICAgICAgICAgICByZXNlcnZhdGlvblNpemUgPSBPcHRpb25zOjpqaXRNZW1vcnlS
ZXNlcnZhdGlvblNpemUoKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgcmVzZXJ2YXRpb25T
aXplID0gZml4ZWRFeGVjdXRhYmxlTWVtb3J5UG9vbFNpemU7Ci0gICAgICAgIHJlc2VydmF0aW9u
U2l6ZSA9IHN0ZDo6bWF4KHJvdW5kVXBUb011bHRpcGxlT2YocGFnZVNpemUoKSwgcmVzZXJ2YXRp
b25TaXplKSwgcGFnZVNpemUoKSAqIDIpOworICAgIC8vIFByZXZlbnQgZXhlY3V0aW9uIGluIHRo
ZSB3cml0YWJsZSBKSVQgbWFwcGluZy4KKyAgICByZXN1bHQgPSB2bV9wcm90ZWN0KG1hY2hfdGFz
a19zZWxmKCksIHN0YXRpY19jYXN0PHZtX2FkZHJlc3NfdD4od3JpdGFibGVBZGRyKSwgaml0U2l6
ZSwgdHJ1ZSwgVk1fUFJPVF9SRUFEIHwgVk1fUFJPVF9XUklURSk7CisgICAgUkVMRUFTRV9BU1NF
UlQoIXJlc3VsdCk7CiAKLSAgICAgICAgYXV0byB0cnlDcmVhdGVQYWdlUmVzZXJ2YXRpb24gPSBb
XSAoc2l6ZV90IHJlc2VydmF0aW9uU2l6ZSkgeworICAgIC8vIFplcm8gb3V0IHdyaXRhYmxlQWRk
ciB0byBhdm9pZCBsZWFraW5nIHRoZSBhZGRyZXNzIG9mIHRoZSB3cml0YWJsZSBtYXBwaW5nLgor
ICAgIG1lbXNldF9zKCZ3cml0YWJsZUFkZHIsIHNpemVvZih3cml0YWJsZUFkZHIpLCAwLCBzaXpl
b2Yod3JpdGFibGVBZGRyKSk7CisKKyNpZiBFTkFCTEUoU0VQQVJBVEVEX1dYX0hFQVApCisgICAg
Z19qc2NDb25maWcuaml0V3JpdGVTZXBhcmF0ZUhlYXBzID0gcmVpbnRlcnByZXRfY2FzdDxKSVRX
cml0ZVNlcGFyYXRlSGVhcHNGdW5jdGlvbj4od3JpdGVUaHVuay5jb2RlKCkuZXhlY3V0YWJsZUFk
ZHJlc3MoKSk7CisjZW5kaWYKK30KKworI2Vsc2UgLy8gT1MoREFSV0lOKSAmJiBIQVZFKFJFTUFQ
X0pJVCkKK3N0YXRpYyBBTFdBWVNfSU5MSU5FIHZvaWQgaW5pdGlhbGl6ZVNlcGFyYXRlZFdYSGVh
cHModm9pZCosIHNpemVfdCwgdm9pZCosIHNpemVfdCkKK3sKK30KKyNlbmRpZgorCitzdHJ1Y3Qg
SklUUmVzZXJ2YXRpb24geworICAgIFBhZ2VSZXNlcnZhdGlvbiBwYWdlUmVzZXJ2YXRpb247Cisg
ICAgdm9pZCogYmFzZSB7IG51bGxwdHIgfTsKKyAgICBzaXplX3Qgc2l6ZSB7IDAgfTsKK307CisK
K3N0YXRpYyBBTFdBWVNfSU5MSU5FIEpJVFJlc2VydmF0aW9uIGluaXRpYWxpemVKSVRQYWdlUmVz
ZXJ2YXRpb24oKQoreworICAgIEpJVFJlc2VydmF0aW9uIHJlc2VydmF0aW9uOworICAgIGlmICgh
aXNKSVRFbmFibGVkKCkpCisgICAgICAgIHJldHVybiByZXNlcnZhdGlvbjsKKworICAgIGlmIChP
cHRpb25zOjpqaXRNZW1vcnlSZXNlcnZhdGlvblNpemUoKSkKKyAgICAgICAgcmVzZXJ2YXRpb24u
c2l6ZSA9IE9wdGlvbnM6OmppdE1lbW9yeVJlc2VydmF0aW9uU2l6ZSgpOworICAgIGVsc2UKKyAg
ICAgICAgcmVzZXJ2YXRpb24uc2l6ZSA9IGZpeGVkRXhlY3V0YWJsZU1lbW9yeVBvb2xTaXplOwor
ICAgIHJlc2VydmF0aW9uLnNpemUgPSBzdGQ6Om1heChyb3VuZFVwVG9NdWx0aXBsZU9mKHBhZ2VT
aXplKCksIHJlc2VydmF0aW9uLnNpemUpLCBwYWdlU2l6ZSgpICogMik7CisKKyAgICBhdXRvIHRy
eUNyZWF0ZVBhZ2VSZXNlcnZhdGlvbiA9IFtdIChzaXplX3QgcmVzZXJ2YXRpb25TaXplKSB7CiAj
aWYgT1MoTElOVVgpCi0gICAgICAgICAgICAvLyBJZiB3ZSB1c2UgdW5jb21taXR0ZWQgcmVzZXJ2
YXRpb24sIG1tYXAgb3BlcmF0aW9uIGlzIHJlY29yZGVkIHdpdGggc21hbGwgcGFnZSBzaXplIGlu
IHBlcmYgY29tbWFuZCdzIG91dHB1dC4KLSAgICAgICAgICAgIC8vIFRoaXMgbWFrZXMgdGhlIGZv
bGxvd2luZyBKSVQgY29kZSBsb2dnaW5nIGJyb2tlbiBhbmQgc29tZSBvZiBKSVQgY29kZSBpcyBu
b3QgcmVjb3JkZWQgY29ycmVjdGx5LgotICAgICAgICAgICAgLy8gVG8gYXZvaWQgdGhpcyBwcm9i
bGVtLCB3ZSB1c2UgY29tbWl0dGVkIHJlc2VydmF0aW9uIGlmIHdlIG5lZWQgcGVyZiBKSVREdW1w
IGxvZ2dpbmcuCi0gICAgICAgICAgICBpZiAoT3B0aW9uczo6bG9nSklUQ29kZUZvclBlcmYoKSkK
LSAgICAgICAgICAgICAgICByZXR1cm4gUGFnZVJlc2VydmF0aW9uOjpyZXNlcnZlQW5kQ29tbWl0
V2l0aEd1YXJkUGFnZXMocmVzZXJ2YXRpb25TaXplLCBPU0FsbG9jYXRvcjo6SlNKSVRDb2RlUGFn
ZXMsIEVYRUNVVEFCTEVfUE9PTF9XUklUQUJMRSwgdHJ1ZSk7CisgICAgICAgIC8vIElmIHdlIHVz
ZSB1bmNvbW1pdHRlZCByZXNlcnZhdGlvbiwgbW1hcCBvcGVyYXRpb24gaXMgcmVjb3JkZWQgd2l0
aCBzbWFsbCBwYWdlIHNpemUgaW4gcGVyZiBjb21tYW5kJ3Mgb3V0cHV0LgorICAgICAgICAvLyBU
aGlzIG1ha2VzIHRoZSBmb2xsb3dpbmcgSklUIGNvZGUgbG9nZ2luZyBicm9rZW4gYW5kIHNvbWUg
b2YgSklUIGNvZGUgaXMgbm90IHJlY29yZGVkIGNvcnJlY3RseS4KKyAgICAgICAgLy8gVG8gYXZv
aWQgdGhpcyBwcm9ibGVtLCB3ZSB1c2UgY29tbWl0dGVkIHJlc2VydmF0aW9uIGlmIHdlIG5lZWQg
cGVyZiBKSVREdW1wIGxvZ2dpbmcuCisgICAgICAgIGlmIChPcHRpb25zOjpsb2dKSVRDb2RlRm9y
UGVyZigpKQorICAgICAgICAgICAgcmV0dXJuIFBhZ2VSZXNlcnZhdGlvbjo6cmVzZXJ2ZUFuZENv
bW1pdFdpdGhHdWFyZFBhZ2VzKHJlc2VydmF0aW9uU2l6ZSwgT1NBbGxvY2F0b3I6OkpTSklUQ29k
ZVBhZ2VzLCBFWEVDVVRBQkxFX1BPT0xfV1JJVEFCTEUsIHRydWUpOwogI2VuZGlmCi0gICAgICAg
ICAgICByZXR1cm4gUGFnZVJlc2VydmF0aW9uOjpyZXNlcnZlV2l0aEd1YXJkUGFnZXMocmVzZXJ2
YXRpb25TaXplLCBPU0FsbG9jYXRvcjo6SlNKSVRDb2RlUGFnZXMsIEVYRUNVVEFCTEVfUE9PTF9X
UklUQUJMRSwgdHJ1ZSk7Ci0gICAgICAgIH07CisgICAgICAgIHJldHVybiBQYWdlUmVzZXJ2YXRp
b246OnJlc2VydmVXaXRoR3VhcmRQYWdlcyhyZXNlcnZhdGlvblNpemUsIE9TQWxsb2NhdG9yOjpK
U0pJVENvZGVQYWdlcywgRVhFQ1VUQUJMRV9QT09MX1dSSVRBQkxFLCB0cnVlKTsKKyAgICB9Owog
Ci0gICAgICAgIG1fcmVzZXJ2YXRpb24gPSB0cnlDcmVhdGVQYWdlUmVzZXJ2YXRpb24ocmVzZXJ2
YXRpb25TaXplKTsKLSAgICAgICAgaWYgKG1fcmVzZXJ2YXRpb24pIHsKLSAgICAgICAgICAgIEFT
U0VSVChtX3Jlc2VydmF0aW9uLnNpemUoKSA9PSByZXNlcnZhdGlvblNpemUpOwotICAgICAgICAg
ICAgdm9pZCogcmVzZXJ2YXRpb25CYXNlID0gbV9yZXNlcnZhdGlvbi5iYXNlKCk7CisgICAgcmVz
ZXJ2YXRpb24ucGFnZVJlc2VydmF0aW9uID0gdHJ5Q3JlYXRlUGFnZVJlc2VydmF0aW9uKHJlc2Vy
dmF0aW9uLnNpemUpOworICAgIGlmIChyZXNlcnZhdGlvbi5wYWdlUmVzZXJ2YXRpb24pIHsKKyAg
ICAgICAgQVNTRVJUKHJlc2VydmF0aW9uLnBhZ2VSZXNlcnZhdGlvbi5zaXplKCkgPT0gcmVzZXJ2
YXRpb24uc2l6ZSk7CisgICAgICAgIHJlc2VydmF0aW9uLmJhc2UgPSByZXNlcnZhdGlvbi5wYWdl
UmVzZXJ2YXRpb24uYmFzZSgpOwogCiAjaWYgRU5BQkxFKEZBU1RfSklUX1BFUk1JU1NJT05TKSAm
JiAhRU5BQkxFKFNFUEFSQVRFRF9XWF9IRUFQKQotICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQo
b3NfdGhyZWFkX3NlbGZfcmVzdHJpY3Rfcnd4X2lzX3N1cHBvcnRlZCgpKTsKLSAgICAgICAgICAg
IG9zX3RocmVhZF9zZWxmX3Jlc3RyaWN0X3J3eF90b19yeCgpOworICAgICAgICBSRUxFQVNFX0FT
U0VSVChvc190aHJlYWRfc2VsZl9yZXN0cmljdF9yd3hfaXNfc3VwcG9ydGVkKCkpOworICAgICAg
ICBvc190aHJlYWRfc2VsZl9yZXN0cmljdF9yd3hfdG9fcngoKTsKIAogI2Vsc2UgLy8gbm90IEVO
QUJMRShGQVNUX0pJVF9QRVJNSVNTSU9OUykgb3IgRU5BQkxFKFNFUEFSQVRFRF9XWF9IRUFQKQog
I2lmIEVOQUJMRShGQVNUX0pJVF9QRVJNSVNTSU9OUykKLSAgICAgICAgICAgIGlmIChvc190aHJl
YWRfc2VsZl9yZXN0cmljdF9yd3hfaXNfc3VwcG9ydGVkKCkpIHsKLSAgICAgICAgICAgICAgICBn
X2pzY0NvbmZpZy51c2VGYXN0UGVybWlzaW9uc0pJVENvcHkgPSB0cnVlOwotICAgICAgICAgICAg
ICAgIG9zX3RocmVhZF9zZWxmX3Jlc3RyaWN0X3J3eF90b19yeCgpOwotICAgICAgICAgICAgfSBl
bHNlCi0jZW5kaWYKLSAgICAgICAgICAgIGlmIChPcHRpb25zOjp1c2VTZXBhcmF0ZWRXWEhlYXAo
KSkgewotICAgICAgICAgICAgICAgIC8vIEZpcnN0IHBhZ2Ugb2Ygb3VyIEpJVCBhbGxvY2F0aW9u
IGlzIHJlc2VydmVkLgotICAgICAgICAgICAgICAgIEFTU0VSVChyZXNlcnZhdGlvblNpemUgPj0g
cGFnZVNpemUoKSAqIDIpOwotICAgICAgICAgICAgICAgIHJlc2VydmF0aW9uQmFzZSA9ICh2b2lk
KikoKHVpbnRwdHJfdClyZXNlcnZhdGlvbkJhc2UgKyBwYWdlU2l6ZSgpKTsKLSAgICAgICAgICAg
ICAgICByZXNlcnZhdGlvblNpemUgLT0gcGFnZVNpemUoKTsKLSAgICAgICAgICAgICAgICBpbml0
aWFsaXplU2VwYXJhdGVkV1hIZWFwcyhtX3Jlc2VydmF0aW9uLmJhc2UoKSwgcGFnZVNpemUoKSwg
cmVzZXJ2YXRpb25CYXNlLCByZXNlcnZhdGlvblNpemUpOwotICAgICAgICAgICAgfQorICAgICAg
ICBpZiAob3NfdGhyZWFkX3NlbGZfcmVzdHJpY3Rfcnd4X2lzX3N1cHBvcnRlZCgpKSB7CisgICAg
ICAgICAgICBnX2pzY0NvbmZpZy51c2VGYXN0UGVybWlzaW9uc0pJVENvcHkgPSB0cnVlOworICAg
ICAgICAgICAgb3NfdGhyZWFkX3NlbGZfcmVzdHJpY3Rfcnd4X3RvX3J4KCk7CisgICAgICAgIH0g
ZWxzZQorI2VuZGlmCisgICAgICAgIGlmIChPcHRpb25zOjp1c2VTZXBhcmF0ZWRXWEhlYXAoKSkg
eworICAgICAgICAgICAgLy8gRmlyc3QgcGFnZSBvZiBvdXIgSklUIGFsbG9jYXRpb24gaXMgcmVz
ZXJ2ZWQuCisgICAgICAgICAgICBBU1NFUlQocmVzZXJ2YXRpb24uc2l6ZSA+PSBwYWdlU2l6ZSgp
ICogMik7CisgICAgICAgICAgICByZXNlcnZhdGlvbi5iYXNlID0gKHZvaWQqKSgodWludHB0cl90
KShyZXNlcnZhdGlvbi5iYXNlKSArIHBhZ2VTaXplKCkpOworICAgICAgICAgICAgcmVzZXJ2YXRp
b24uc2l6ZSAtPSBwYWdlU2l6ZSgpOworICAgICAgICAgICAgaW5pdGlhbGl6ZVNlcGFyYXRlZFdY
SGVhcHMocmVzZXJ2YXRpb24ucGFnZVJlc2VydmF0aW9uLmJhc2UoKSwgcGFnZVNpemUoKSwgcmVz
ZXJ2YXRpb24uYmFzZSwgcmVzZXJ2YXRpb24uc2l6ZSk7CisgICAgICAgIH0KICNlbmRpZiAvLyBu
b3QgRU5BQkxFKEZBU1RfSklUX1BFUk1JU1NJT05TKSBvciBFTkFCTEUoU0VQQVJBVEVEX1dYX0hF
QVApCisgICAgICAgIHZvaWQqIHJlc2VydmF0aW9uRW5kID0gcmVpbnRlcnByZXRfY2FzdDx1aW50
OF90Kj4ocmVzZXJ2YXRpb24uYmFzZSkgKyByZXNlcnZhdGlvbi5zaXplOwogCi0gICAgICAgICAg
ICBhZGRGcmVzaEZyZWVTcGFjZShyZXNlcnZhdGlvbkJhc2UsIHJlc2VydmF0aW9uU2l6ZSk7Ci0K
LSAgICAgICAgICAgIEFTU0VSVChieXRlc1Jlc2VydmVkKCkgPT0gcmVzZXJ2YXRpb25TaXplKTsg
Ly8gU2luY2Ugb3VyIGV4ZWN1dGFibGUgbWVtb3J5IGlzIGZpeGVkLXNpemVkLCBieXRlc1Jlc2Vy
dmVkIGlzIG5ldmVyIGNoYW5nZWQgYWZ0ZXIgaW5pdGlhbGl6YXRpb24uCisgICAgICAgIGdfanNj
Q29uZmlnLnN0YXJ0RXhlY3V0YWJsZU1lbW9yeSA9IHRhZ0NvZGVQdHI8RXhlY3V0YWJsZU1lbW9y
eVB0clRhZz4ocmVzZXJ2YXRpb24uYmFzZSk7CisgICAgICAgIGdfanNjQ29uZmlnLmVuZEV4ZWN1
dGFibGVNZW1vcnkgPSB0YWdDb2RlUHRyPEV4ZWN1dGFibGVNZW1vcnlQdHJUYWc+KHJlc2VydmF0
aW9uRW5kKTsKKyAgICB9CiAKLSAgICAgICAgICAgIHZvaWQqIHJlc2VydmF0aW9uRW5kID0gcmVp
bnRlcnByZXRfY2FzdDx1aW50OF90Kj4ocmVzZXJ2YXRpb25CYXNlKSArIHJlc2VydmF0aW9uU2l6
ZTsKKyAgICByZXR1cm4gcmVzZXJ2YXRpb247Cit9CiAKLSAgICAgICAgICAgIGdfanNjQ29uZmln
LnN0YXJ0RXhlY3V0YWJsZU1lbW9yeSA9IHRhZ0NvZGVQdHI8RXhlY3V0YWJsZU1lbW9yeVB0clRh
Zz4ocmVzZXJ2YXRpb25CYXNlKTsKLSAgICAgICAgICAgIGdfanNjQ29uZmlnLmVuZEV4ZWN1dGFi
bGVNZW1vcnkgPSB0YWdDb2RlUHRyPEV4ZWN1dGFibGVNZW1vcnlQdHJUYWc+KHJlc2VydmF0aW9u
RW5kKTsKK2NsYXNzIEZpeGVkVk1Qb29sRXhlY3V0YWJsZUFsbG9jYXRvciBmaW5hbCB7CisgICAg
V1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CitwdWJsaWM6CisgICAgRml4ZWRWTVBvb2xFeGVjdXRh
YmxlQWxsb2NhdG9yKCkKKyAgICAgICAgOiBtX2FsbG9jYXRvcigqdGhpcykKKyAgICB7CisgICAg
ICAgIEpJVFJlc2VydmF0aW9uIHJlc2VydmF0aW9uID0gaW5pdGlhbGl6ZUpJVFBhZ2VSZXNlcnZh
dGlvbigpOworICAgICAgICBtX3Jlc2VydmF0aW9uID0gV1RGTW92ZShyZXNlcnZhdGlvbi5wYWdl
UmVzZXJ2YXRpb24pOworICAgICAgICBpZiAobV9yZXNlcnZhdGlvbikgeworICAgICAgICAgICAg
bV9hbGxvY2F0b3IuYWRkRnJlc2hGcmVlU3BhY2UocmVzZXJ2YXRpb24uYmFzZSwgcmVzZXJ2YXRp
b24uc2l6ZSk7CisgICAgICAgICAgICBBU1NFUlQoYnl0ZXNSZXNlcnZlZCgpID09IHJlc2VydmF0
aW9uLnNpemUpOyAvLyBTaW5jZSBvdXIgZXhlY3V0YWJsZSBtZW1vcnkgaXMgZml4ZWQtc2l6ZWQs
IGJ5dGVzUmVzZXJ2ZWQgaXMgbmV2ZXIgY2hhbmdlZCBhZnRlciBpbml0aWFsaXphdGlvbi4KICAg
ICAgICAgfQogICAgIH0KIAotICAgIHZpcnR1YWwgfkZpeGVkVk1Qb29sRXhlY3V0YWJsZUFsbG9j
YXRvcigpOworICAgIH5GaXhlZFZNUG9vbEV4ZWN1dGFibGVBbGxvY2F0b3IoKQorICAgIHsKKyAg
ICAgICAgbV9yZXNlcnZhdGlvbi5kZWFsbG9jYXRlKCk7CisgICAgfQogCiAgICAgdm9pZCogbWVt
b3J5U3RhcnQoKSB7IHJldHVybiB1bnRhZ0NvZGVQdHI8RXhlY3V0YWJsZU1lbW9yeVB0clRhZz4o
Z19qc2NDb25maWcuc3RhcnRFeGVjdXRhYmxlTWVtb3J5KTsgfQogICAgIHZvaWQqIG1lbW9yeUVu
ZCgpIHsgcmV0dXJuIHVudGFnQ29kZVB0cjxFeGVjdXRhYmxlTWVtb3J5UHRyVGFnPihnX2pzY0Nv
bmZpZy5lbmRFeGVjdXRhYmxlTWVtb3J5KTsgfQogICAgIGJvb2wgaXNKSVRQQyh2b2lkKiBwYykg
eyByZXR1cm4gbWVtb3J5U3RhcnQoKSA8PSBwYyAmJiBwYyA8IG1lbW9yeUVuZCgpOyB9CisgICAg
Ym9vbCBpc1ZhbGlkKCkgeyByZXR1cm4gISFtX3Jlc2VydmF0aW9uOyB9CiAKLXByb3RlY3RlZDoK
LSAgICBGcmVlU3BhY2VQdHIgYWxsb2NhdGVOZXdTcGFjZShzaXplX3QmKSBvdmVycmlkZQotICAg
IHsKLSAgICAgICAgLy8gV2UncmUgb3BlcmF0aW5nIGluIGEgZml4ZWQgcG9vbCwgc28gbmV3IGFs
bG9jYXRpb24gaXMgYWx3YXlzIHByb2hpYml0ZWQuCi0gICAgICAgIHJldHVybiBudWxscHRyOwot
ICAgIH0KLQotICAgIHZvaWQgbm90aWZ5TmVlZFBhZ2Uodm9pZCogcGFnZSwgc2l6ZV90IGNvdW50
KSBvdmVycmlkZQorICAgIFJlZlB0cjxFeGVjdXRhYmxlTWVtb3J5SGFuZGxlPiBhbGxvY2F0ZShz
aXplX3Qgc2l6ZUluQnl0ZXMsIHZvaWQqIG93bmVyVUlEKQogICAgIHsKLSNpZiBVU0UoTUFEVl9G
UkVFX0ZPUl9KSVRfTUVNT1JZKQotICAgICAgICBVTlVTRURfUEFSQU0ocGFnZSk7Ci0gICAgICAg
IFVOVVNFRF9QQVJBTShjb3VudCk7CisjaWYgQ1BVKEFSTTY0KQogI2Vsc2UKLSAgICAgICAgbV9y
ZXNlcnZhdGlvbi5jb21taXQocGFnZSwgcGFnZVNpemUoKSAqIGNvdW50KTsKKyAgICAgICAgcmV0
dXJuIG1fYWxsb2NhdG9yLmFsbG9jYXRlKHNpemVJbkJ5dGVzLCBvd25lclVJRCk7CiAjZW5kaWYK
ICAgICB9CiAKLSAgICB2b2lkIG5vdGlmeVBhZ2VJc0ZyZWUodm9pZCogcGFnZSwgc2l6ZV90IGNv
dW50KSBvdmVycmlkZQorICAgIExvY2smIGdldExvY2soKSB7IHJldHVybiBtX2xvY2s7IH0KKwor
ICAgIC8vIE5vbiBhdG9taWMKKyAgICBzaXplX3QgYnl0ZXNBbGxvY2F0ZWQoKSAKICAgICB7Ci0j
aWYgVVNFKE1BRFZfRlJFRV9GT1JfSklUX01FTU9SWSkKLSAgICAgICAgZm9yICg7OykgewotICAg
ICAgICAgICAgaW50IHJlc3VsdCA9IG1hZHZpc2UocGFnZSwgcGFnZVNpemUoKSAqIGNvdW50LCBN
QURWX0ZSRUUpOwotICAgICAgICAgICAgaWYgKCFyZXN1bHQpCi0gICAgICAgICAgICAgICAgcmV0
dXJuOwotICAgICAgICAgICAgQVNTRVJUKHJlc3VsdCA9PSAtMSk7Ci0gICAgICAgICAgICBpZiAo
ZXJybm8gIT0gRUFHQUlOKSB7Ci0gICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JF
QUNIRUQoKTsgLy8gSW4gZGVidWcgbW9kZSwgdGhpcyBzaG91bGQgYmUgYSBoYXJkIGZhaWx1cmUu
Ci0gICAgICAgICAgICAgICAgYnJlYWs7IC8vIEluIHJlbGVhc2UgbW9kZSwgd2Ugc2hvdWxkIGp1
c3QgaWdub3JlIHRoZSBlcnJvciAtIG5vdCByZXR1cm5pbmcgbWVtb3J5IHRvIHRoZSBPUyBpcyBi
ZXR0ZXIgdGhhbiBjcmFzaGluZywgZXNwZWNpYWxseSBzaW5jZSB3ZSBfd2lsbF8gYmUgYWJsZSB0
byByZXVzZSB0aGUgbWVtb3J5IGludGVybmFsbHkgYW55d2F5LgotICAgICAgICAgICAgfQotICAg
ICAgICB9Ci0jZWxzZQotICAgICAgICBtX3Jlc2VydmF0aW9uLmRlY29tbWl0KHBhZ2UsIHBhZ2VT
aXplKCkgKiBjb3VudCk7Ci0jZW5kaWYKKyAgICAgICAgc2l6ZV90IHJlc3VsdCA9IDA7CisgICAg
ICAgIGZvckVhY2hBbGxvY2F0b3IoWyZdIChBbGxvY2F0b3ImIGFsbG9jYXRvcikgeworICAgICAg
ICAgICAgcmVzdWx0ICs9IGFsbG9jYXRvci5ieXRlc0FsbG9jYXRlZCgpOworICAgICAgICB9KTsK
KyAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICB9Ci0KLXByaXZhdGU6Ci0jaWYgT1MoREFSV0lO
KSAmJiBIQVZFKFJFTUFQX0pJVCkKLSAgICB2b2lkIGluaXRpYWxpemVTZXBhcmF0ZWRXWEhlYXBz
KHZvaWQqIHN0dWJCYXNlLCBzaXplX3Qgc3R1YlNpemUsIHZvaWQqIGppdEJhc2UsIHNpemVfdCBq
aXRTaXplKQorICAgIHNpemVfdCBieXRlc1Jlc2VydmVkKCkgCiAgICAgewotICAgICAgICBtYWNo
X3ZtX2FkZHJlc3NfdCB3cml0YWJsZUFkZHIgPSAwOwotCi0gICAgICAgIC8vIENyZWF0ZSBhIHNl
Y29uZCBtYXBwaW5nIG9mIHRoZSBKSVQgcmVnaW9uIGF0IGEgcmFuZG9tIGFkZHJlc3MuCi0gICAg
ICAgIHZtX3Byb3RfdCBjdXIsIG1heDsKLSAgICAgICAgaW50IHJlbWFwRmxhZ3MgPSBWTV9GTEFH
U19BTllXSEVSRTsKLSNpZiBkZWZpbmVkKFZNX0ZMQUdTX1JBTkRPTV9BRERSKQotICAgICAgICBy
ZW1hcEZsYWdzIHw9IFZNX0ZMQUdTX1JBTkRPTV9BRERSOwotI2VuZGlmCi0gICAgICAgIGtlcm5f
cmV0dXJuX3QgcmV0ID0gbWFjaF92bV9yZW1hcChtYWNoX3Rhc2tfc2VsZigpLCAmd3JpdGFibGVB
ZGRyLCBqaXRTaXplLCAwLAotICAgICAgICAgICAgcmVtYXBGbGFncywKLSAgICAgICAgICAgIG1h
Y2hfdGFza19zZWxmKCksIChtYWNoX3ZtX2FkZHJlc3NfdClqaXRCYXNlLCBGQUxTRSwKLSAgICAg
ICAgICAgICZjdXIsICZtYXgsIFZNX0lOSEVSSVRfREVGQVVMVCk7Ci0KLSAgICAgICAgYm9vbCBy
ZW1hcFN1Y2NlZWRlZCA9IChyZXQgPT0gS0VSTl9TVUNDRVNTKTsKLSAgICAgICAgaWYgKCFyZW1h
cFN1Y2NlZWRlZCkKLSAgICAgICAgICAgIHJldHVybjsKLQotICAgICAgICAvLyBBc3NlbWJsZSBh
IHRodW5rIHRoYXQgd2lsbCBzZXJ2ZSBhcyB0aGUgbWVhbnMgZm9yIHdyaXRpbmcgaW50byB0aGUg
SklUIHJlZ2lvbi4KLSAgICAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFn
PiB3cml0ZVRodW5rID0gaml0V3JpdGVUaHVua0dlbmVyYXRvcihyZWludGVycHJldF9jYXN0PHZv
aWQqPih3cml0YWJsZUFkZHIpLCBzdHViQmFzZSwgc3R1YlNpemUpOwotCi0gICAgICAgIGludCBy
ZXN1bHQgPSAwOwotCi0jaWYgVVNFKEVYRUNVVEVfT05MWV9KSVRfV1JJVEVfRlVOQ1RJT04pCi0g
ICAgICAgIC8vIFByZXZlbnQgcmVhZGluZyB0aGUgd3JpdGUgdGh1bmsgY29kZS4KLSAgICAgICAg
cmVzdWx0ID0gdm1fcHJvdGVjdChtYWNoX3Rhc2tfc2VsZigpLCByZWludGVycHJldF9jYXN0PHZt
X2FkZHJlc3NfdD4oc3R1YkJhc2UpLCBzdHViU2l6ZSwgdHJ1ZSwgVk1fUFJPVF9FWEVDVVRFKTsK
LSAgICAgICAgUkVMRUFTRV9BU1NFUlQoIXJlc3VsdCk7Ci0jZW5kaWYKLQotICAgICAgICAvLyBQ
cmV2ZW50IHdyaXRpbmcgaW50byB0aGUgZXhlY3V0YWJsZSBKSVQgbWFwcGluZy4KLSAgICAgICAg
cmVzdWx0ID0gdm1fcHJvdGVjdChtYWNoX3Rhc2tfc2VsZigpLCByZWludGVycHJldF9jYXN0PHZt
X2FkZHJlc3NfdD4oaml0QmFzZSksIGppdFNpemUsIHRydWUsIFZNX1BST1RfUkVBRCB8IFZNX1BS
T1RfRVhFQ1VURSk7Ci0gICAgICAgIFJFTEVBU0VfQVNTRVJUKCFyZXN1bHQpOwotCi0gICAgICAg
IC8vIFByZXZlbnQgZXhlY3V0aW9uIGluIHRoZSB3cml0YWJsZSBKSVQgbWFwcGluZy4KLSAgICAg
ICAgcmVzdWx0ID0gdm1fcHJvdGVjdChtYWNoX3Rhc2tfc2VsZigpLCBzdGF0aWNfY2FzdDx2bV9h
ZGRyZXNzX3Q+KHdyaXRhYmxlQWRkciksIGppdFNpemUsIHRydWUsIFZNX1BST1RfUkVBRCB8IFZN
X1BST1RfV1JJVEUpOwotICAgICAgICBSRUxFQVNFX0FTU0VSVCghcmVzdWx0KTsKLQotICAgICAg
ICAvLyBaZXJvIG91dCB3cml0YWJsZUFkZHIgdG8gYXZvaWQgbGVha2luZyB0aGUgYWRkcmVzcyBv
ZiB0aGUgd3JpdGFibGUgbWFwcGluZy4KLSAgICAgICAgbWVtc2V0X3MoJndyaXRhYmxlQWRkciwg
c2l6ZW9mKHdyaXRhYmxlQWRkciksIDAsIHNpemVvZih3cml0YWJsZUFkZHIpKTsKLQotI2lmIEVO
QUJMRShTRVBBUkFURURfV1hfSEVBUCkKLSAgICAgICAgZ19qc2NDb25maWcuaml0V3JpdGVTZXBh
cmF0ZUhlYXBzID0gcmVpbnRlcnByZXRfY2FzdDxKSVRXcml0ZVNlcGFyYXRlSGVhcHNGdW5jdGlv
bj4od3JpdGVUaHVuay5jb2RlKCkuZXhlY3V0YWJsZUFkZHJlc3MoKSk7Ci0jZW5kaWYKKyAgICAg
ICAgc2l6ZV90IHJlc3VsdCA9IDA7CisgICAgICAgIGZvckVhY2hBbGxvY2F0b3IoWyZdIChBbGxv
Y2F0b3ImIGFsbG9jYXRvcikgeworICAgICAgICAgICAgcmVzdWx0ICs9IGFsbG9jYXRvci5ieXRl
c1Jlc2VydmVkKCk7CisgICAgICAgIH0pOworICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgIH0K
LQotI2lmIENQVShBUk02NCkgJiYgVVNFKEVYRUNVVEVfT05MWV9KSVRfV1JJVEVfRlVOQ1RJT04p
Ci0gICAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBqaXRXcml0ZVRodW5r
R2VuZXJhdG9yKHZvaWQqIHdyaXRhYmxlQWRkciwgdm9pZCogc3R1YkJhc2UsIHNpemVfdCBzdHVi
U2l6ZSkKKyAgICBzaXplX3QgYnl0ZXNDb21taXR0ZWQoKQogICAgIHsKLSAgICAgICAgdXNpbmcg
bmFtZXNwYWNlIEFSTTY0UmVnaXN0ZXJzOwotICAgICAgICB1c2luZyBUcnVzdGVkSW1tMzIgPSBN
YWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyOworICAgICAgICBzaXplX3QgcmVzdWx0ID0gMDsK
KyAgICAgICAgZm9yRWFjaEFsbG9jYXRvcihbJl0gKEFsbG9jYXRvciYgYWxsb2NhdG9yKSB7Cisg
ICAgICAgICAgICByZXN1bHQgKz0gYWxsb2NhdG9yLmJ5dGVzQ29tbWl0dGVkKCk7CisgICAgICAg
IH0pOworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KIAotICAgICAgICBNYWNyb0Fzc2Vt
YmxlciBqaXQ7CisgICAgYm9vbCBpc0luQWxsb2NhdGVkTWVtb3J5KGNvbnN0IEFic3RyYWN0TG9j
a2VyJiBsb2NrZXIsIHZvaWQqIGFkZHJlc3MpCisgICAgeworICAgICAgICBib29sIHJlc3VsdCA9
IGZhbHNlOworICAgICAgICBmb3JFYWNoQWxsb2NhdG9yKFsmXSAoQWxsb2NhdG9yJiBhbGxvY2F0
b3IpIHsKKyAgICAgICAgICAgIGlmIChhbGxvY2F0b3IuaXNJbkFsbG9jYXRlZE1lbW9yeShsb2Nr
ZXIsIGFkZHJlc3MpKSB7CisgICAgICAgICAgICAgICAgcmVzdWx0ID0gdHJ1ZTsKKyAgICAgICAg
ICAgICAgICByZXR1cm4gSXRlcmF0aW9uU3RhdHVzOjpEb25lOworICAgICAgICAgICAgfQorICAg
ICAgICAgICAgcmV0dXJuIEl0ZXJhdGlvblN0YXR1czo6Q29udGludWU7CisgICAgICAgIH0pOwog
Ci0gICAgICAgIGppdC50YWdSZXR1cm5BZGRyZXNzKCk7Ci0gICAgICAgIGppdC5tb3ZlKE1hY3Jv
QXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKHdyaXRhYmxlQWRkciksIHg3KTsKLSAgICAgICAgaml0
LmFkZFB0cih4NywgeDApOwotCi0gICAgICAgIGppdC5tb3ZlKHgwLCB4Myk7Ci0gICAgICAgIE1h
Y3JvQXNzZW1ibGVyOjpKdW1wIHNtYWxsQ29weSA9IGppdC5icmFuY2g2NChNYWNyb0Fzc2VtYmxl
cjo6QmVsb3csIHgyLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTY0KDY0KSk7Ci0KLSAgICAg
ICAgaml0LmFkZDY0KFRydXN0ZWRJbW0zMigzMiksIHgzKTsKLSAgICAgICAgaml0LmFuZDY0KFRy
dXN0ZWRJbW0zMigtMzIpLCB4Myk7Ci0gICAgICAgIGppdC5sb2FkUGFpcjY0KHgxLCB4MTIsIHgx
Myk7Ci0gICAgICAgIGppdC5sb2FkUGFpcjY0KHgxLCBUcnVzdGVkSW1tMzIoMTYpLCB4MTQsIHgx
NSk7Ci0gICAgICAgIGppdC5zdWI2NCh4MywgeDAsIHg1KTsKLSAgICAgICAgaml0LmFkZFB0cih4
NSwgeDEpOwotCi0gICAgICAgIGppdC5sb2FkUGFpcjY0KHgxLCB4OCwgeDkpOwotICAgICAgICBq
aXQubG9hZFBhaXI2NCh4MSwgVHJ1c3RlZEltbTMyKDE2KSwgeDEwLCB4MTEpOwotICAgICAgICBq
aXQuYWRkNjQoVHJ1c3RlZEltbTMyKDMyKSwgeDEpOwotICAgICAgICBqaXQuc3ViNjQoeDUsIHgy
KTsKLSAgICAgICAgaml0LnN0b3JlUGFpcjY0KHgxMiwgeDEzLCB4MCk7Ci0gICAgICAgIGppdC5z
dG9yZVBhaXI2NCh4MTQsIHgxNSwgeDAsIFRydXN0ZWRJbW0zMigxNikpOwotICAgICAgICBNYWNy
b0Fzc2VtYmxlcjo6SnVtcCBjbGVhbnVwID0gaml0LmJyYW5jaFN1YjY0KE1hY3JvQXNzZW1ibGVy
OjpCZWxvd09yRXF1YWwsIFRydXN0ZWRJbW0zMig2NCksIHgyKTsKLQotICAgICAgICBNYWNyb0Fz
c2VtYmxlcjo6TGFiZWwgY29weUxvb3AgPSBqaXQubGFiZWwoKTsKLSAgICAgICAgaml0LnN0b3Jl
UGFpcjY0V2l0aE5vblRlbXBvcmFsQWNjZXNzKHg4LCB4OSwgeDMpOwotICAgICAgICBqaXQuc3Rv
cmVQYWlyNjRXaXRoTm9uVGVtcG9yYWxBY2Nlc3MoeDEwLCB4MTEsIHgzLCBUcnVzdGVkSW1tMzIo
MTYpKTsKLSAgICAgICAgaml0LmFkZDY0KFRydXN0ZWRJbW0zMigzMiksIHgzKTsKLSAgICAgICAg
aml0LmxvYWRQYWlyNjRXaXRoTm9uVGVtcG9yYWxBY2Nlc3MoeDEsIHg4LCB4OSk7Ci0gICAgICAg
IGppdC5sb2FkUGFpcjY0V2l0aE5vblRlbXBvcmFsQWNjZXNzKHgxLCBUcnVzdGVkSW1tMzIoMTYp
LCB4MTAsIHgxMSk7Ci0gICAgICAgIGppdC5hZGQ2NChUcnVzdGVkSW1tMzIoMzIpLCB4MSk7Ci0g
ICAgICAgIGppdC5icmFuY2hTdWI2NChNYWNyb0Fzc2VtYmxlcjo6QWJvdmUsIFRydXN0ZWRJbW0z
MigzMiksIHgyKS5saW5rVG8oY29weUxvb3AsICZqaXQpOwotCi0gICAgICAgIGNsZWFudXAubGlu
aygmaml0KTsKLSAgICAgICAgaml0LmFkZDY0KHgyLCB4MSk7Ci0gICAgICAgIGppdC5sb2FkUGFp
cjY0KHgxLCB4MTIsIHgxMyk7Ci0gICAgICAgIGppdC5sb2FkUGFpcjY0KHgxLCBUcnVzdGVkSW1t
MzIoMTYpLCB4MTQsIHgxNSk7Ci0gICAgICAgIGppdC5zdG9yZVBhaXI2NCh4OCwgeDksIHgzKTsK
LSAgICAgICAgaml0LnN0b3JlUGFpcjY0KHgxMCwgeDExLCB4MywgVHJ1c3RlZEltbTMyKDE2KSk7
Ci0gICAgICAgIGppdC5hZGRQdHIoeDIsIHgzKTsKLSAgICAgICAgaml0LnN0b3JlUGFpcjY0KHgx
MiwgeDEzLCB4MywgVHJ1c3RlZEltbTMyKDMyKSk7Ci0gICAgICAgIGppdC5zdG9yZVBhaXI2NCh4
MTQsIHgxNSwgeDMsIFRydXN0ZWRJbW0zMig0OCkpOwotICAgICAgICBqaXQucmV0KCk7Ci0KLSAg
ICAgICAgTWFjcm9Bc3NlbWJsZXI6OkxhYmVsIGxvY2FsMCA9IGppdC5sYWJlbCgpOwotICAgICAg
ICBqaXQubG9hZDY0KHgxLCBQb3N0SW5kZXgoOCksIHg2KTsKLSAgICAgICAgaml0LnN0b3JlNjQo
eDYsIHgzLCBQb3N0SW5kZXgoOCkpOwotICAgICAgICBzbWFsbENvcHkubGluaygmaml0KTsKLSAg
ICAgICAgaml0LmJyYW5jaFN1YjY0KE1hY3JvQXNzZW1ibGVyOjpBYm92ZU9yRXF1YWwsIFRydXN0
ZWRJbW0zMig4KSwgeDIpLmxpbmtUbyhsb2NhbDAsICZqaXQpOwotICAgICAgICBNYWNyb0Fzc2Vt
Ymxlcjo6SnVtcCBsb2NhbDIgPSBqaXQuYnJhbmNoQWRkNjQoTWFjcm9Bc3NlbWJsZXI6OkVxdWFs
LCBUcnVzdGVkSW1tMzIoOCksIHgyKTsKLSAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkxhYmVsIGxv
Y2FsMSA9IGppdC5sYWJlbCgpOwotICAgICAgICBqaXQubG9hZDgoeDEsIFBvc3RJbmRleCgxKSwg
eDYpOwotICAgICAgICBqaXQuc3RvcmU4KHg2LCB4MywgUG9zdEluZGV4KDEpKTsKLSAgICAgICAg
aml0LmJyYW5jaFN1YjY0KE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgVHJ1c3RlZEltbTMyKDEp
LCB4MikubGlua1RvKGxvY2FsMSwgJmppdCk7Ci0gICAgICAgIGxvY2FsMi5saW5rKCZqaXQpOwot
ICAgICAgICBqaXQucmV0KCk7Ci0KLSAgICAgICAgYXV0byBzdHViQmFzZUNvZGVQdHIgPSBNYWNy
b0Fzc2VtYmxlckNvZGVQdHI8TGlua0J1ZmZlclB0clRhZz4odGFnQ29kZVB0cjxMaW5rQnVmZmVy
UHRyVGFnPihzdHViQmFzZSkpOwotICAgICAgICBMaW5rQnVmZmVyIGxpbmtCdWZmZXIoaml0LCBz
dHViQmFzZUNvZGVQdHIsIHN0dWJTaXplKTsKLSAgICAgICAgLy8gV2UgZG9uJ3QgdXNlIEZJTkFM
SVpFX0NPREUoKSBmb3IgdHdvIHJlYXNvbnMuCi0gICAgICAgIC8vIFRoZSBmaXJzdCBpcyB0aGF0
IHdlIGRvbid0IHdhbnQgdGhlIHdyaXRlYWJsZSBhZGRyZXNzLCBhcyBkaXNhc3NlbWJsZWQgaW5z
dHJ1Y3Rpb25zLAotICAgICAgICAvLyB0byBhcHBlYXIgaW4gdGhlIGNvbnNvbGUgb3IgYW55d2hl
cmUgaW4gbWVtb3J5LCB2aWEgdGhlIFByaW50U3RyZWFtIGJ1ZmZlci4KLSAgICAgICAgLy8gVGhl
IHNlY29uZCBpcyB3ZSBjYW4ndCBndWFyYW50ZWUgdGhhdCB0aGUgY29kZSBpcyByZWFkYWJsZSB3
aGVuIHVzaW5nIHRoZQotICAgICAgICAvLyBhc3luY0Rpc2Fzc2VtYmx5IG9wdGlvbiBhcyBvdXIg
Y2FsbGVyIHdpbGwgc2V0IG91ciBwYWdlcyBleGVjdXRlIG9ubHkuCi0gICAgICAgIHJldHVybiBs
aW5rQnVmZmVyLmZpbmFsaXplQ29kZVdpdGhvdXREaXNhc3NlbWJseTxKSVRUaHVua1B0clRhZz4o
KTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICB9Ci0jZWxzZSAvLyBub3QgQ1BVKEFSTTY0
KSAmJiBVU0UoRVhFQ1VURV9PTkxZX0pJVF9XUklURV9GVU5DVElPTikKLSAgICBzdGF0aWMgdm9p
ZCBnZW5lcmljV3JpdGVUb0pJVFJlZ2lvbihvZmZfdCBvZmZzZXQsIGNvbnN0IHZvaWQqIGRhdGEs
IHNpemVfdCBkYXRhU2l6ZSkKKworI2lmIEVOQUJMRShNRVRBX0FMTE9DQVRPUl9QUk9GSUxFKQor
ICAgIHZvaWQgZHVtcFByb2ZpbGUoKQogICAgIHsKLSAgICAgICAgbWVtY3B5KCh2b2lkKikoZ19q
c2NDb25maWcuc3RhcnRPZkZpeGVkV3JpdGFibGVNZW1vcnlQb29sICsgb2Zmc2V0KSwgZGF0YSwg
ZGF0YVNpemUpOworICAgICAgICBmb3JFYWNoQWxsb2NhdG9yKFsmXSAoQWxsb2NhdG9yJiBhbGxv
Y2F0b3IpIHsKKyAgICAgICAgICAgIGFsbG9jYXRvci5kdW1wUHJvZmlsZSgpOworICAgICAgICB9
KTsKICAgICB9CisjZW5kaWYKIAotICAgIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0
clRhZz4gaml0V3JpdGVUaHVua0dlbmVyYXRvcih2b2lkKiBhZGRyZXNzLCB2b2lkKiwgc2l6ZV90
KQorICAgIHZvaWQgbm90aWZ5Q29kZVByb2ZpbGluZygpCiAgICAgewotICAgICAgICBnX2pzY0Nv
bmZpZy5zdGFydE9mRml4ZWRXcml0YWJsZU1lbW9yeVBvb2wgPSByZWludGVycHJldF9jYXN0PHVp
bnRwdHJfdD4oYWRkcmVzcyk7Ci0gICAgICAgIHZvaWQqIGZ1bmN0aW9uID0gcmVpbnRlcnByZXRf
Y2FzdDx2b2lkKj4oJmdlbmVyaWNXcml0ZVRvSklUUmVnaW9uKTsKLSNpZiBDUFUoQVJNX1RIVU1C
MikKLSAgICAgICAgLy8gSGFuZGxlIHRodW1iIG9mZnNldAotICAgICAgICB1aW50cHRyX3QgZnVu
Y3Rpb25Bc0ludCA9IHJlaW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90PihmdW5jdGlvbik7Ci0gICAg
ICAgIGZ1bmN0aW9uQXNJbnQgLT0gMTsKLSAgICAgICAgZnVuY3Rpb24gPSByZWludGVycHJldF9j
YXN0PHZvaWQqPihmdW5jdGlvbkFzSW50KTsKLSNlbmRpZgotICAgICAgICBhdXRvIGNvZGVQdHIg
PSBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8SklUVGh1bmtQdHJUYWc+KHRhZ0NGdW5jdGlvblB0cjxK
SVRUaHVua1B0clRhZz4oZnVuY3Rpb24pKTsKLSAgICAgICAgcmV0dXJuIE1hY3JvQXNzZW1ibGVy
Q29kZVJlZjxKSVRUaHVua1B0clRhZz46OmNyZWF0ZVNlbGZNYW5hZ2VkQ29kZVJlZihjb2RlUHRy
KTsKKyAgICAgICAgZm9yRWFjaEFsbG9jYXRvcihbJl0gKEFsbG9jYXRvciYgYWxsb2NhdG9yKSB7
CisgICAgICAgICAgICBDb2RlUHJvZmlsaW5nOjpub3RpZnlBbGxvY2F0b3IoJmFsbG9jYXRvcik7
CisgICAgICAgIH0pOwogICAgIH0KLSNlbmRpZiAvLyBDUFUoQVJNNjQpICYmIFVTRShFWEVDVVRF
X09OTFlfSklUX1dSSVRFX0ZVTkNUSU9OKQogCi0jZWxzZSAvLyBPUyhEQVJXSU4pICYmIEhBVkUo
UkVNQVBfSklUKQotICAgIHZvaWQgaW5pdGlhbGl6ZVNlcGFyYXRlZFdYSGVhcHModm9pZCosIHNp
emVfdCwgdm9pZCosIHNpemVfdCkKKyAgICBNZXRhQWxsb2NhdG9yOjpTdGF0aXN0aWNzIGN1cnJl
bnRTdGF0aXN0aWNzKCkKICAgICB7CisgICAgICAgIC8vIE9PUFM6IG1ha2UgYXRvbWljIGJ5IGhv
bGRpbmcgbG9jay4uLgorICAgICAgICBNZXRhQWxsb2NhdG9yOjpTdGF0aXN0aWNzIHJlc3VsdCB7
IDAsIDAsIDAgfTsKKyAgICAgICAgZm9yRWFjaEFsbG9jYXRvcihbJl0gKEFsbG9jYXRvciYgYWxs
b2NhdG9yKSB7CisgICAgICAgICAgICBhdXRvIGFsbG9jYXRvclN0YXRzID0gYWxsb2NhdG9yLmN1
cnJlbnRTdGF0aXN0aWNzKCk7CisgICAgICAgICAgICByZXN1bHQuYnl0ZXNBbGxvY2F0ZWQgKz0g
YWxsb2NhdG9yU3RhdHMuYnl0ZXNBbGxvY2F0ZWQ7CisgICAgICAgICAgICByZXN1bHQuYnl0ZXNS
ZXNlcnZlZCArPSBhbGxvY2F0b3JTdGF0cy5ieXRlc1Jlc2VydmVkOworICAgICAgICAgICAgcmVz
dWx0LmJ5dGVzQ29tbWl0dGVkICs9IGFsbG9jYXRvclN0YXRzLmJ5dGVzQ29tbWl0dGVkOworICAg
ICAgICB9KTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICB9Ci0jZW5kaWYKIAogcHJpdmF0
ZToKKyAgICBjbGFzcyBBbGxvY2F0b3IgOiBwdWJsaWMgTWV0YUFsbG9jYXRvciB7CisgICAgcHVi
bGljOgorICAgICAgICBBbGxvY2F0b3IoRml4ZWRWTVBvb2xFeGVjdXRhYmxlQWxsb2NhdG9yJiBm
aXhlZEFsbG9jYXRvcikKKyAgICAgICAgICAgIDogTWV0YUFsbG9jYXRvcihqaXRBbGxvY2F0aW9u
R3JhbnVsZSkgLy8gcm91bmQgdXAgYWxsIGFsbG9jYXRpb25zIHRvIDMyIGJ5dGVzCisgICAgICAg
ICAgICAsIG1fZml4ZWRBbGxvY2F0b3IoZml4ZWRBbGxvY2F0b3IpCisgICAgICAgIHsKKyAgICAg
ICAgfQorCisgICAgICAgIEZyZWVTcGFjZVB0ciBhbGxvY2F0ZU5ld1NwYWNlKHNpemVfdCYpIG92
ZXJyaWRlCisgICAgICAgIHsKKyAgICAgICAgICAgIC8vIFdlJ3JlIG9wZXJhdGluZyBpbiBhIGZp
eGVkIHBvb2wsIHNvIG5ldyBhbGxvY2F0aW9uIGlzIGFsd2F5cyBwcm9oaWJpdGVkLgorICAgICAg
ICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgIH0KKworICAgICAgICB2b2lkIG5vdGlmeU5l
ZWRQYWdlKHZvaWQqIHBhZ2UsIHNpemVfdCBjb3VudCkgb3ZlcnJpZGUKKyAgICAgICAgeworICAg
ICAgICAgICAgbV9maXhlZEFsbG9jYXRvci5tX3Jlc2VydmF0aW9uLmNvbW1pdChwYWdlLCBwYWdl
U2l6ZSgpICogY291bnQpOworICAgICAgICB9CisKKyAgICAgICAgdm9pZCBub3RpZnlQYWdlSXNG
cmVlKHZvaWQqIHBhZ2UsIHNpemVfdCBjb3VudCkgb3ZlcnJpZGUKKyAgICAgICAgeworICAgICAg
ICAgICAgbV9maXhlZEFsbG9jYXRvci5tX3Jlc2VydmF0aW9uLmRlY29tbWl0KHBhZ2UsIHBhZ2VT
aXplKCkgKiBjb3VudCk7CisgICAgICAgIH0KKworICAgICAgICBGaXhlZFZNUG9vbEV4ZWN1dGFi
bGVBbGxvY2F0b3ImIG1fZml4ZWRBbGxvY2F0b3I7CisgICAgfTsKKworICAgIHRlbXBsYXRlIDx0
eXBlbmFtZSBGdW5jdGlvbj4KKyAgICB2b2lkIGZvckVhY2hBbGxvY2F0b3IoRnVuY3Rpb24gZnVu
Y3Rpb24pCisgICAgeworICAgICAgICBmdW5jdGlvbihtX2FsbG9jYXRvcik7CisgICAgfQorCisg
ICAgTG9jayBtX2xvY2s7CiAgICAgUGFnZVJlc2VydmF0aW9uIG1fcmVzZXJ2YXRpb247CisjaWYg
Q1BVKEFSTTY0KQorI2Vsc2UKKyAgICBBbGxvY2F0b3IgbV9hbGxvY2F0b3I7CisjZW5kaWYKIH07
CiAKLUZpeGVkVk1Qb29sRXhlY3V0YWJsZUFsbG9jYXRvcjo6fkZpeGVkVk1Qb29sRXhlY3V0YWJs
ZUFsbG9jYXRvcigpCi17Ci0gICAgbV9yZXNlcnZhdGlvbi5kZWFsbG9jYXRlKCk7Ci19Ci0KIC8v
IEtlZXAgdGhpcyBwb2ludGVyIGluIGEgbXV0YWJsZSBnbG9iYWwgdmFyaWFibGUgdG8gaGVscCBM
ZWFrcyBmaW5kIGl0LgogLy8gQnV0IHdlIGRvIG5vdCB1c2UgdGhpcyBwb2ludGVyLgogc3RhdGlj
IEZpeGVkVk1Qb29sRXhlY3V0YWJsZUFsbG9jYXRvciogZ2xvYmFsRml4ZWRWTVBvb2xFeGVjdXRh
YmxlQWxsb2NhdG9yVG9Xb3JrQXJvdW5kTGVha3MgPSBudWxscHRyOwpAQCAtNDIyLDIwICs1MTcs
MjAgQEAgdm9pZCBFeGVjdXRhYmxlQWxsb2NhdG9yOjppbml0aWFsaXplVW5kZQogICAgIFJFTEVB
U0VfQVNTRVJUKCFnX2pzY0NvbmZpZy5maXhlZFZNUG9vbEV4ZWN1dGFibGVBbGxvY2F0b3IpOwog
ICAgIGdfanNjQ29uZmlnLmZpeGVkVk1Qb29sRXhlY3V0YWJsZUFsbG9jYXRvciA9IG5ldyBGaXhl
ZFZNUG9vbEV4ZWN1dGFibGVBbGxvY2F0b3IoKTsKICAgICBnbG9iYWxGaXhlZFZNUG9vbEV4ZWN1
dGFibGVBbGxvY2F0b3JUb1dvcmtBcm91bmRMZWFrcyA9IGdfanNjQ29uZmlnLmZpeGVkVk1Qb29s
RXhlY3V0YWJsZUFsbG9jYXRvcjsKLSAgICBDb2RlUHJvZmlsaW5nOjpub3RpZnlBbGxvY2F0b3Io
Z19qc2NDb25maWcuZml4ZWRWTVBvb2xFeGVjdXRhYmxlQWxsb2NhdG9yKTsKKyAgICBnX2pzY0Nv
bmZpZy5maXhlZFZNUG9vbEV4ZWN1dGFibGVBbGxvY2F0b3ItPm5vdGlmeUNvZGVQcm9maWxpbmco
KTsKIH0KIAogYm9vbCBFeGVjdXRhYmxlQWxsb2NhdG9yOjppc1ZhbGlkKCkgY29uc3QKIHsKLSAg
ICBhdXRvKiBhbGxvY2F0b3IgPSBnX2pzY0NvbmZpZy5maXhlZFZNUG9vbEV4ZWN1dGFibGVBbGxv
Y2F0b3I7CisgICAgRml4ZWRWTVBvb2xFeGVjdXRhYmxlQWxsb2NhdG9yKiBhbGxvY2F0b3IgPSBn
X2pzY0NvbmZpZy5maXhlZFZNUG9vbEV4ZWN1dGFibGVBbGxvY2F0b3I7CiAgICAgaWYgKCFhbGxv
Y2F0b3IpCiAgICAgICAgIHJldHVybiBCYXNlOjppc1ZhbGlkKCk7Ci0gICAgcmV0dXJuICEhYWxs
b2NhdG9yLT5ieXRlc1Jlc2VydmVkKCk7CisgICAgcmV0dXJuIGFsbG9jYXRvci0+aXNWYWxpZCgp
OwogfQogCiBib29sIEV4ZWN1dGFibGVBbGxvY2F0b3I6OnVuZGVyTWVtb3J5UHJlc3N1cmUoKQog
ewotICAgIGF1dG8qIGFsbG9jYXRvciA9IGdfanNjQ29uZmlnLmZpeGVkVk1Qb29sRXhlY3V0YWJs
ZUFsbG9jYXRvcjsKKyAgICBGaXhlZFZNUG9vbEV4ZWN1dGFibGVBbGxvY2F0b3IqIGFsbG9jYXRv
ciA9IGdfanNjQ29uZmlnLmZpeGVkVk1Qb29sRXhlY3V0YWJsZUFsbG9jYXRvcjsKICAgICBpZiAo
IWFsbG9jYXRvcikKICAgICAgICAgcmV0dXJuIEJhc2U6OnVuZGVyTWVtb3J5UHJlc3N1cmUoKTsK
ICAgICByZXR1cm4gYWxsb2NhdG9yLT5ieXRlc0FsbG9jYXRlZCgpID4gYWxsb2NhdG9yLT5ieXRl
c1Jlc2VydmVkKCkgLyAyOwpAQCAtNDQzLDcgKzUzOCw3IEBAIGJvb2wgRXhlY3V0YWJsZUFsbG9j
YXRvcjo6dW5kZXJNZW1vcnlQcmUKIAogZG91YmxlIEV4ZWN1dGFibGVBbGxvY2F0b3I6Om1lbW9y
eVByZXNzdXJlTXVsdGlwbGllcihzaXplX3QgYWRkZWRNZW1vcnlVc2FnZSkKIHsKLSAgICBhdXRv
KiBhbGxvY2F0b3IgPSBnX2pzY0NvbmZpZy5maXhlZFZNUG9vbEV4ZWN1dGFibGVBbGxvY2F0b3I7
CisgICAgRml4ZWRWTVBvb2xFeGVjdXRhYmxlQWxsb2NhdG9yKiBhbGxvY2F0b3IgPSBnX2pzY0Nv
bmZpZy5maXhlZFZNUG9vbEV4ZWN1dGFibGVBbGxvY2F0b3I7CiAgICAgaWYgKCFhbGxvY2F0b3Ip
CiAgICAgICAgIHJldHVybiBCYXNlOjptZW1vcnlQcmVzc3VyZU11bHRpcGxpZXIoYWRkZWRNZW1v
cnlVc2FnZSk7CiAgICAgQVNTRVJUKGFsbG9jYXRvci0+Ynl0ZXNBbGxvY2F0ZWQoKSA8PSBhbGxv
Y2F0b3ItPmJ5dGVzUmVzZXJ2ZWQoKSk7CkBAIC00NjMsNyArNTU4LDcgQEAgZG91YmxlIEV4ZWN1
dGFibGVBbGxvY2F0b3I6Om1lbW9yeVByZXNzdQogCiBSZWZQdHI8RXhlY3V0YWJsZU1lbW9yeUhh
bmRsZT4gRXhlY3V0YWJsZUFsbG9jYXRvcjo6YWxsb2NhdGUoc2l6ZV90IHNpemVJbkJ5dGVzLCB2
b2lkKiBvd25lclVJRCwgSklUQ29tcGlsYXRpb25FZmZvcnQgZWZmb3J0KQogewotICAgIGF1dG8q
IGFsbG9jYXRvciA9IGdfanNjQ29uZmlnLmZpeGVkVk1Qb29sRXhlY3V0YWJsZUFsbG9jYXRvcjsK
KyAgICBGaXhlZFZNUG9vbEV4ZWN1dGFibGVBbGxvY2F0b3IqIGFsbG9jYXRvciA9IGdfanNjQ29u
ZmlnLmZpeGVkVk1Qb29sRXhlY3V0YWJsZUFsbG9jYXRvcjsKICAgICBpZiAoIWFsbG9jYXRvcikK
ICAgICAgICAgcmV0dXJuIEJhc2U6OmFsbG9jYXRlKHNpemVJbkJ5dGVzLCBvd25lclVJRCwgZWZm
b3J0KTsKICAgICBpZiAoT3B0aW9uczo6bG9nRXhlY3V0YWJsZUFsbG9jYXRpb24oKSkgewpAQCAt
NTEyLDcgKzYwNyw3IEBAIFJlZlB0cjxFeGVjdXRhYmxlTWVtb3J5SGFuZGxlPiBFeGVjdXRhYmwK
IAogYm9vbCBFeGVjdXRhYmxlQWxsb2NhdG9yOjppc1ZhbGlkRXhlY3V0YWJsZU1lbW9yeShjb25z
dCBBYnN0cmFjdExvY2tlciYgbG9ja2VyLCB2b2lkKiBhZGRyZXNzKQogewotICAgIGF1dG8qIGFs
bG9jYXRvciA9IGdfanNjQ29uZmlnLmZpeGVkVk1Qb29sRXhlY3V0YWJsZUFsbG9jYXRvcjsKKyAg
ICBGaXhlZFZNUG9vbEV4ZWN1dGFibGVBbGxvY2F0b3IqIGFsbG9jYXRvciA9IGdfanNjQ29uZmln
LmZpeGVkVk1Qb29sRXhlY3V0YWJsZUFsbG9jYXRvcjsKICAgICBpZiAoIWFsbG9jYXRvcikKICAg
ICAgICAgcmV0dXJuIEJhc2U6OmlzVmFsaWRFeGVjdXRhYmxlTWVtb3J5KGxvY2tlciwgYWRkcmVz
cyk7CiAgICAgcmV0dXJuIGFsbG9jYXRvci0+aXNJbkFsbG9jYXRlZE1lbW9yeShsb2NrZXIsIGFk
ZHJlc3MpOwpAQCAtNTIwLDcgKzYxNSw3IEBAIGJvb2wgRXhlY3V0YWJsZUFsbG9jYXRvcjo6aXNW
YWxpZEV4ZWN1dGEKIAogTG9jayYgRXhlY3V0YWJsZUFsbG9jYXRvcjo6Z2V0TG9jaygpIGNvbnN0
CiB7Ci0gICAgYXV0byogYWxsb2NhdG9yID0gZ19qc2NDb25maWcuZml4ZWRWTVBvb2xFeGVjdXRh
YmxlQWxsb2NhdG9yOworICAgIEZpeGVkVk1Qb29sRXhlY3V0YWJsZUFsbG9jYXRvciogYWxsb2Nh
dG9yID0gZ19qc2NDb25maWcuZml4ZWRWTVBvb2xFeGVjdXRhYmxlQWxsb2NhdG9yOwogICAgIGlm
ICghYWxsb2NhdG9yKQogICAgICAgICByZXR1cm4gQmFzZTo6Z2V0TG9jaygpOwogICAgIHJldHVy
biBhbGxvY2F0b3ItPmdldExvY2soKTsKQEAgLTUyOCw3ICs2MjMsNyBAQCBMb2NrJiBFeGVjdXRh
YmxlQWxsb2NhdG9yOjpnZXRMb2NrKCkgY29uCiAKIHNpemVfdCBFeGVjdXRhYmxlQWxsb2NhdG9y
Ojpjb21taXR0ZWRCeXRlQ291bnQoKQogewotICAgIGF1dG8qIGFsbG9jYXRvciA9IGdfanNjQ29u
ZmlnLmZpeGVkVk1Qb29sRXhlY3V0YWJsZUFsbG9jYXRvcjsKKyAgICBGaXhlZFZNUG9vbEV4ZWN1
dGFibGVBbGxvY2F0b3IqIGFsbG9jYXRvciA9IGdfanNjQ29uZmlnLmZpeGVkVk1Qb29sRXhlY3V0
YWJsZUFsbG9jYXRvcjsKICAgICBpZiAoIWFsbG9jYXRvcikKICAgICAgICAgcmV0dXJuIEJhc2U6
OmNvbW1pdHRlZEJ5dGVDb3VudCgpOwogICAgIHJldHVybiBhbGxvY2F0b3ItPmJ5dGVzQ29tbWl0
dGVkKCk7CkBAIC01MzcsNyArNjMyLDcgQEAgc2l6ZV90IEV4ZWN1dGFibGVBbGxvY2F0b3I6OmNv
bW1pdHRlZEJ5dAogI2lmIEVOQUJMRShNRVRBX0FMTE9DQVRPUl9QUk9GSUxFKQogdm9pZCBFeGVj
dXRhYmxlQWxsb2NhdG9yOjpkdW1wUHJvZmlsZSgpCiB7Ci0gICAgYXV0byogYWxsb2NhdG9yID0g
Z19qc2NDb25maWcuZml4ZWRWTVBvb2xFeGVjdXRhYmxlQWxsb2NhdG9yOworICAgIEZpeGVkVk1Q
b29sRXhlY3V0YWJsZUFsbG9jYXRvciogYWxsb2NhdG9yID0gZ19qc2NDb25maWcuZml4ZWRWTVBv
b2xFeGVjdXRhYmxlQWxsb2NhdG9yOwogICAgIGlmICghYWxsb2NhdG9yKQogICAgICAgICByZXR1
cm47CiAgICAgYWxsb2NhdG9yLT5kdW1wUHJvZmlsZSgpOwpAQCAtNTQ2LDcgKzY0MSw3IEBAIHZv
aWQgRXhlY3V0YWJsZUFsbG9jYXRvcjo6ZHVtcFByb2ZpbGUoKQogCiB2b2lkKiBzdGFydE9mRml4
ZWRFeGVjdXRhYmxlTWVtb3J5UG9vbEltcGwoKQogewotICAgIGF1dG8qIGFsbG9jYXRvciA9IGdf
anNjQ29uZmlnLmZpeGVkVk1Qb29sRXhlY3V0YWJsZUFsbG9jYXRvcjsKKyAgICBGaXhlZFZNUG9v
bEV4ZWN1dGFibGVBbGxvY2F0b3IqIGFsbG9jYXRvciA9IGdfanNjQ29uZmlnLmZpeGVkVk1Qb29s
RXhlY3V0YWJsZUFsbG9jYXRvcjsKICAgICBpZiAoIWFsbG9jYXRvcikKICAgICAgICAgcmV0dXJu
IG51bGxwdHI7CiAgICAgcmV0dXJuIGFsbG9jYXRvci0+bWVtb3J5U3RhcnQoKTsKQEAgLTU1NCw3
ICs2NDksNyBAQCB2b2lkKiBzdGFydE9mRml4ZWRFeGVjdXRhYmxlTWVtb3J5UG9vbEltCiAKIHZv
aWQqIGVuZE9mRml4ZWRFeGVjdXRhYmxlTWVtb3J5UG9vbEltcGwoKQogewotICAgIGF1dG8qIGFs
bG9jYXRvciA9IGdfanNjQ29uZmlnLmZpeGVkVk1Qb29sRXhlY3V0YWJsZUFsbG9jYXRvcjsKKyAg
ICBGaXhlZFZNUG9vbEV4ZWN1dGFibGVBbGxvY2F0b3IqIGFsbG9jYXRvciA9IGdfanNjQ29uZmln
LmZpeGVkVk1Qb29sRXhlY3V0YWJsZUFsbG9jYXRvcjsKICAgICBpZiAoIWFsbG9jYXRvcikKICAg
ICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgcmV0dXJuIGFsbG9jYXRvci0+bWVtb3J5RW5kKCk7
CkBAIC01NjIsNyArNjU3LDcgQEAgdm9pZCogZW5kT2ZGaXhlZEV4ZWN1dGFibGVNZW1vcnlQb29s
SW1wbAogCiBib29sIGlzSklUUEModm9pZCogcGMpCiB7Ci0gICAgYXV0byogYWxsb2NhdG9yID0g
Z19qc2NDb25maWcuZml4ZWRWTVBvb2xFeGVjdXRhYmxlQWxsb2NhdG9yOworICAgIEZpeGVkVk1Q
b29sRXhlY3V0YWJsZUFsbG9jYXRvciogYWxsb2NhdG9yID0gZ19qc2NDb25maWcuZml4ZWRWTVBv
b2xFeGVjdXRhYmxlQWxsb2NhdG9yOwogICAgIHJldHVybiBhbGxvY2F0b3IgJiYgYWxsb2NhdG9y
LT5pc0pJVFBDKHBjKTsKIH0KIAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>392370</attachid>
            <date>2020-03-03 21:25:25 -0800</date>
            <delta_ts>2020-03-04 19:31:58 -0800</delta_ts>
            <desc>WIP</desc>
            <filename>c-backup.diff</filename>
            <type>text/plain</type>
            <size>35660</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjU3ODAzKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDMzIEBA
CisyMDIwLTAzLTAzICBTYWFtIEJhcmF0aSAgPHNiYXJhdGlAYXBwbGUuY29tPgorCisgICAgICAg
IFJlZmFjdG9yIEZpeGVkVk1Qb29sRXhlY3V0YWJsZUFsbG9jYXRvciB0byBub3QgaGF2ZSBtZW1i
ZXIgZnVuY3Rpb25zIHdoaWNoIGFyZSByZWFsbHkganVzdCBoZWxwZXIgZnVuY3Rpb25zCisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMDg1MzcKKworICAg
ICAgICBSZXZpZXdlZCBieSBNYXJrIExhbS4KKworICAgICAgICBUaGVyZSB3ZXJlIGEgZmV3IG1l
bWJlciBmdW5jdGlvbnMgaW4gRml4ZWRWTVBvb2xFeGVjdXRhYmxlQWxsb2NhdG9yIHRoYXQgd2Vy
ZQorICAgICAgICBlc3NlbnRpYWxseSBoZWxwZXIgZnVuY3Rpb25zLiBJJ3ZlIGZhY3RvcmVkIHRo
ZW0gb3V0LCBhbmQgbWFkZSBGaXhlZFZNUG9vbEV4ZWN1dGFibGVBbGxvY2F0b3IKKyAgICAgICAg
Y2FsbCB0aGVtIGRpcmVjdGx5LiBUaGlzIHJlZmFjdG9yaW5nIGlzIG5lZWRlZCB3aGVuIEkgaW1w
bGVtZW50IHRoZSAxR0IKKyAgICAgICAgZXhlY3V0YWJsZSBwb29sIG9uIGFybTY0IHNpbmNlIHRo
ZSBpbXBsZW1lbnRhdGlvbiBvZiB0aGF0IHdpbGwgY3JlYXRlIHNwbGl0CisgICAgICAgIGltcGxl
bWVudGF0aW9ucyBvZiBzb21ldGhpbmcgbGlrZSBGaXhlZFZNUG9vbEV4ZWN1dGFibGVBbGxvY2F0
b3IuCisKKyAgICAgICAgKiBqaXQvRXhlY3V0YWJsZUFsbG9jYXRvci5jcHA6CisgICAgICAgIChK
U0M6OmppdFdyaXRlVGh1bmtHZW5lcmF0b3IpOgorICAgICAgICAoSlNDOjpnZW5lcmljV3JpdGVU
b0pJVFJlZ2lvbik6CisgICAgICAgIChKU0M6OmluaXRpYWxpemVTZXBhcmF0ZWRXWEhlYXBzKToK
KyAgICAgICAgKEpTQzo6aW5pdGlhbGl6ZUpJVFBhZ2VSZXNlcnZhdGlvbik6CisgICAgICAgIChK
U0M6OkV4ZWN1dGFibGVBbGxvY2F0b3I6OmlzVmFsaWQgY29uc3QpOgorICAgICAgICAoSlNDOjpF
eGVjdXRhYmxlQWxsb2NhdG9yOjp1bmRlck1lbW9yeVByZXNzdXJlKToKKyAgICAgICAgKEpTQzo6
RXhlY3V0YWJsZUFsbG9jYXRvcjo6bWVtb3J5UHJlc3N1cmVNdWx0aXBsaWVyKToKKyAgICAgICAg
KEpTQzo6RXhlY3V0YWJsZUFsbG9jYXRvcjo6YWxsb2NhdGUpOgorICAgICAgICAoSlNDOjpFeGVj
dXRhYmxlQWxsb2NhdG9yOjppc1ZhbGlkRXhlY3V0YWJsZU1lbW9yeSk6CisgICAgICAgIChKU0M6
OkV4ZWN1dGFibGVBbGxvY2F0b3I6OmdldExvY2sgY29uc3QpOgorICAgICAgICAoSlNDOjpFeGVj
dXRhYmxlQWxsb2NhdG9yOjpjb21taXR0ZWRCeXRlQ291bnQpOgorICAgICAgICAoSlNDOjpFeGVj
dXRhYmxlQWxsb2NhdG9yOjpkdW1wUHJvZmlsZSk6CisgICAgICAgIChKU0M6OnN0YXJ0T2ZGaXhl
ZEV4ZWN1dGFibGVNZW1vcnlQb29sSW1wbCk6CisgICAgICAgIChKU0M6OmVuZE9mRml4ZWRFeGVj
dXRhYmxlTWVtb3J5UG9vbEltcGwpOgorICAgICAgICAoSlNDOjppc0pJVFBDKToKKwogMjAyMC0w
My0wMyAgQmFzdWtlIFN1enVraSAgPGJhc3VrZS5zdXp1a2lAc29ueS5jb20+CiAKICAgICAgICAg
W1dpbkNhaXJvXVtQbGF5U3RhdGlvbl0gQWRkIGludGVyZmFjZSB0byBnZXQgbGlzdGVuaW5nIHBv
cnQgb2YgUmVtb3RlSW5zcGVjdG9yU2VydmVyCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L0V4ZWN1dGFibGVBbGxvY2F0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvRXhlY3V0YWJsZUFsbG9jYXRvci5jcHAJKHJldmlzaW9uIDI1Nzc1MCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvRXhlY3V0YWJsZUFsbG9jYXRvci5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTMwLDYgKzMwLDcgQEAKIAogI2luY2x1ZGUgIkNvZGVQcm9maWxpbmcuaCIK
ICNpbmNsdWRlICJFeGVjdXRhYmxlQWxsb2NhdGlvbkZ1enouaCIKKyNpbmNsdWRlICJJdGVyYXRp
b25TdGF0dXMuaCIKICNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCiAjaW5jbHVkZSA8d3RmL0ZpbGVT
eXN0ZW0uaD4KICNpbmNsdWRlIDx3dGYvTWV0YUFsbG9jYXRvci5oPgpAQCAtOTYsOSArOTcsMTAg
QEAgc3RhdGljIGNvbnN0ZXhwciBzaXplX3QgZml4ZWRFeGVjdXRhYmxlTQogI2VsaWYgQ1BVKEFS
TSkKIHN0YXRpYyBjb25zdGV4cHIgc2l6ZV90IGZpeGVkRXhlY3V0YWJsZU1lbW9yeVBvb2xTaXpl
ID0gMTYgKiAxMDI0ICogMTAyNDsKICNlbGlmIENQVShBUk02NCkKLXN0YXRpYyBjb25zdGV4cHIg
c2l6ZV90IGZpeGVkRXhlY3V0YWJsZU1lbW9yeVBvb2xTaXplID0gMTI4ICogMTAyNCAqIDEwMjQ7
CitzdGF0aWMgY29uc3RleHByIHNpemVfdCBmaXhlZEV4ZWN1dGFibGVNZW1vcnlQb29sU2l6ZSA9
IDEgKiAxMDI0ICogMTAyNCAqIDEwMjQ7CitzdGF0aWMgY29uc3RleHByIHNpemVfdCBpc2xhbmRT
aXplSW5CeXRlcyA9IDE2OwogI2VsaWYgQ1BVKFg4Nl82NCkKLXN0YXRpYyBjb25zdGV4cHIgc2l6
ZV90IGZpeGVkRXhlY3V0YWJsZU1lbW9yeVBvb2xTaXplID0gMTAyNCAqIDEwMjQgKiAxMDI0Owor
c3RhdGljIGNvbnN0ZXhwciBzaXplX3QgZml4ZWRFeGVjdXRhYmxlTWVtb3J5UG9vbFNpemUgPSAx
ICogMTAyNCAqIDEwMjQgKiAxMDI0OwogI2Vsc2UKIHN0YXRpYyBjb25zdGV4cHIgc2l6ZV90IGZp
eGVkRXhlY3V0YWJsZU1lbW9yeVBvb2xTaXplID0gMzIgKiAxMDI0ICogMTAyNDsKICNlbmRpZgpA
QCAtMTU0LDI2NiArMTU2LDQzNiBAQCB2b2lkIEV4ZWN1dGFibGVBbGxvY2F0b3I6OnNldEpJVEVu
YWJsZWQoCiAjZW5kaWYKIH0KIAotY2xhc3MgRml4ZWRWTVBvb2xFeGVjdXRhYmxlQWxsb2NhdG9y
IGZpbmFsIDogcHVibGljIE1ldGFBbGxvY2F0b3IgewotICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NB
VEVEOwotcHVibGljOgotICAgIEZpeGVkVk1Qb29sRXhlY3V0YWJsZUFsbG9jYXRvcigpCi0gICAg
ICAgIDogTWV0YUFsbG9jYXRvcihqaXRBbGxvY2F0aW9uR3JhbnVsZSkgLy8gcm91bmQgdXAgYWxs
IGFsbG9jYXRpb25zIHRvIDMyIGJ5dGVzCi0gICAgewotICAgICAgICBpZiAoIWlzSklURW5hYmxl
ZCgpKQotICAgICAgICAgICAgcmV0dXJuOworI2lmIE9TKERBUldJTikgJiYgSEFWRShSRU1BUF9K
SVQpCisKKyNpZiBDUFUoQVJNNjQpICYmIFVTRShFWEVDVVRFX09OTFlfSklUX1dSSVRFX0ZVTkNU
SU9OKQorc3RhdGljIEFMV0FZU19JTkxJTkUgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5r
UHRyVGFnPiBqaXRXcml0ZVRodW5rR2VuZXJhdG9yKHZvaWQqIHdyaXRhYmxlQWRkciwgdm9pZCog
c3R1YkJhc2UsIHNpemVfdCBzdHViU2l6ZSkKK3sKKyAgICB1c2luZyBuYW1lc3BhY2UgQVJNNjRS
ZWdpc3RlcnM7CisgICAgdXNpbmcgVHJ1c3RlZEltbTMyID0gTWFjcm9Bc3NlbWJsZXI6OlRydXN0
ZWRJbW0zMjsKKworICAgIE1hY3JvQXNzZW1ibGVyIGppdDsKKworICAgIGppdC50YWdSZXR1cm5B
ZGRyZXNzKCk7CisgICAgaml0Lm1vdmUoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIod3Jp
dGFibGVBZGRyKSwgeDcpOworICAgIGppdC5hZGRQdHIoeDcsIHgwKTsKKworICAgIGppdC5tb3Zl
KHgwLCB4Myk7CisgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgc21hbGxDb3B5ID0gaml0LmJyYW5j
aDY0KE1hY3JvQXNzZW1ibGVyOjpCZWxvdywgeDIsIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1t
NjQoNjQpKTsKKworICAgIGppdC5hZGQ2NChUcnVzdGVkSW1tMzIoMzIpLCB4Myk7CisgICAgaml0
LmFuZDY0KFRydXN0ZWRJbW0zMigtMzIpLCB4Myk7CisgICAgaml0LmxvYWRQYWlyNjQoeDEsIHgx
MiwgeDEzKTsKKyAgICBqaXQubG9hZFBhaXI2NCh4MSwgVHJ1c3RlZEltbTMyKDE2KSwgeDE0LCB4
MTUpOworICAgIGppdC5zdWI2NCh4MywgeDAsIHg1KTsKKyAgICBqaXQuYWRkUHRyKHg1LCB4MSk7
CisKKyAgICBqaXQubG9hZFBhaXI2NCh4MSwgeDgsIHg5KTsKKyAgICBqaXQubG9hZFBhaXI2NCh4
MSwgVHJ1c3RlZEltbTMyKDE2KSwgeDEwLCB4MTEpOworICAgIGppdC5hZGQ2NChUcnVzdGVkSW1t
MzIoMzIpLCB4MSk7CisgICAgaml0LnN1YjY0KHg1LCB4Mik7CisgICAgaml0LnN0b3JlUGFpcjY0
KHgxMiwgeDEzLCB4MCk7CisgICAgaml0LnN0b3JlUGFpcjY0KHgxNCwgeDE1LCB4MCwgVHJ1c3Rl
ZEltbTMyKDE2KSk7CisgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgY2xlYW51cCA9IGppdC5icmFu
Y2hTdWI2NChNYWNyb0Fzc2VtYmxlcjo6QmVsb3dPckVxdWFsLCBUcnVzdGVkSW1tMzIoNjQpLCB4
Mik7CisKKyAgICBNYWNyb0Fzc2VtYmxlcjo6TGFiZWwgY29weUxvb3AgPSBqaXQubGFiZWwoKTsK
KyAgICBqaXQuc3RvcmVQYWlyNjRXaXRoTm9uVGVtcG9yYWxBY2Nlc3MoeDgsIHg5LCB4Myk7Cisg
ICAgaml0LnN0b3JlUGFpcjY0V2l0aE5vblRlbXBvcmFsQWNjZXNzKHgxMCwgeDExLCB4MywgVHJ1
c3RlZEltbTMyKDE2KSk7CisgICAgaml0LmFkZDY0KFRydXN0ZWRJbW0zMigzMiksIHgzKTsKKyAg
ICBqaXQubG9hZFBhaXI2NFdpdGhOb25UZW1wb3JhbEFjY2Vzcyh4MSwgeDgsIHg5KTsKKyAgICBq
aXQubG9hZFBhaXI2NFdpdGhOb25UZW1wb3JhbEFjY2Vzcyh4MSwgVHJ1c3RlZEltbTMyKDE2KSwg
eDEwLCB4MTEpOworICAgIGppdC5hZGQ2NChUcnVzdGVkSW1tMzIoMzIpLCB4MSk7CisgICAgaml0
LmJyYW5jaFN1YjY0KE1hY3JvQXNzZW1ibGVyOjpBYm92ZSwgVHJ1c3RlZEltbTMyKDMyKSwgeDIp
LmxpbmtUbyhjb3B5TG9vcCwgJmppdCk7CisKKyAgICBjbGVhbnVwLmxpbmsoJmppdCk7CisgICAg
aml0LmFkZDY0KHgyLCB4MSk7CisgICAgaml0LmxvYWRQYWlyNjQoeDEsIHgxMiwgeDEzKTsKKyAg
ICBqaXQubG9hZFBhaXI2NCh4MSwgVHJ1c3RlZEltbTMyKDE2KSwgeDE0LCB4MTUpOworICAgIGpp
dC5zdG9yZVBhaXI2NCh4OCwgeDksIHgzKTsKKyAgICBqaXQuc3RvcmVQYWlyNjQoeDEwLCB4MTEs
IHgzLCBUcnVzdGVkSW1tMzIoMTYpKTsKKyAgICBqaXQuYWRkUHRyKHgyLCB4Myk7CisgICAgaml0
LnN0b3JlUGFpcjY0KHgxMiwgeDEzLCB4MywgVHJ1c3RlZEltbTMyKDMyKSk7CisgICAgaml0LnN0
b3JlUGFpcjY0KHgxNCwgeDE1LCB4MywgVHJ1c3RlZEltbTMyKDQ4KSk7CisgICAgaml0LnJldCgp
OworCisgICAgTWFjcm9Bc3NlbWJsZXI6OkxhYmVsIGxvY2FsMCA9IGppdC5sYWJlbCgpOworICAg
IGppdC5sb2FkNjQoeDEsIFBvc3RJbmRleCg4KSwgeDYpOworICAgIGppdC5zdG9yZTY0KHg2LCB4
MywgUG9zdEluZGV4KDgpKTsKKyAgICBzbWFsbENvcHkubGluaygmaml0KTsKKyAgICBqaXQuYnJh
bmNoU3ViNjQoTWFjcm9Bc3NlbWJsZXI6OkFib3ZlT3JFcXVhbCwgVHJ1c3RlZEltbTMyKDgpLCB4
MikubGlua1RvKGxvY2FsMCwgJmppdCk7CisgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgbG9jYWwy
ID0gaml0LmJyYW5jaEFkZDY0KE1hY3JvQXNzZW1ibGVyOjpFcXVhbCwgVHJ1c3RlZEltbTMyKDgp
LCB4Mik7CisgICAgTWFjcm9Bc3NlbWJsZXI6OkxhYmVsIGxvY2FsMSA9IGppdC5sYWJlbCgpOwor
ICAgIGppdC5sb2FkOCh4MSwgUG9zdEluZGV4KDEpLCB4Nik7CisgICAgaml0LnN0b3JlOCh4Niwg
eDMsIFBvc3RJbmRleCgxKSk7CisgICAgaml0LmJyYW5jaFN1YjY0KE1hY3JvQXNzZW1ibGVyOjpO
b3RFcXVhbCwgVHJ1c3RlZEltbTMyKDEpLCB4MikubGlua1RvKGxvY2FsMSwgJmppdCk7CisgICAg
bG9jYWwyLmxpbmsoJmppdCk7CisgICAgaml0LnJldCgpOworCisgICAgYXV0byBzdHViQmFzZUNv
ZGVQdHIgPSBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8TGlua0J1ZmZlclB0clRhZz4odGFnQ29kZVB0
cjxMaW5rQnVmZmVyUHRyVGFnPihzdHViQmFzZSkpOworICAgIExpbmtCdWZmZXIgbGlua0J1ZmZl
cihqaXQsIHN0dWJCYXNlQ29kZVB0ciwgc3R1YlNpemUpOworICAgIC8vIFdlIGRvbid0IHVzZSBG
SU5BTElaRV9DT0RFKCkgZm9yIHR3byByZWFzb25zLgorICAgIC8vIFRoZSBmaXJzdCBpcyB0aGF0
IHdlIGRvbid0IHdhbnQgdGhlIHdyaXRlYWJsZSBhZGRyZXNzLCBhcyBkaXNhc3NlbWJsZWQgaW5z
dHJ1Y3Rpb25zLAorICAgIC8vIHRvIGFwcGVhciBpbiB0aGUgY29uc29sZSBvciBhbnl3aGVyZSBp
biBtZW1vcnksIHZpYSB0aGUgUHJpbnRTdHJlYW0gYnVmZmVyLgorICAgIC8vIFRoZSBzZWNvbmQg
aXMgd2UgY2FuJ3QgZ3VhcmFudGVlIHRoYXQgdGhlIGNvZGUgaXMgcmVhZGFibGUgd2hlbiB1c2lu
ZyB0aGUKKyAgICAvLyBhc3luY0Rpc2Fzc2VtYmx5IG9wdGlvbiBhcyBvdXIgY2FsbGVyIHdpbGwg
c2V0IG91ciBwYWdlcyBleGVjdXRlIG9ubHkuCisgICAgcmV0dXJuIGxpbmtCdWZmZXIuZmluYWxp
emVDb2RlV2l0aG91dERpc2Fzc2VtYmx5PEpJVFRodW5rUHRyVGFnPigpOworfQorI2Vsc2UgLy8g
bm90IENQVShBUk02NCkgJiYgVVNFKEVYRUNVVEVfT05MWV9KSVRfV1JJVEVfRlVOQ1RJT04pCitz
dGF0aWMgdm9pZCBnZW5lcmljV3JpdGVUb0pJVFJlZ2lvbihvZmZfdCBvZmZzZXQsIGNvbnN0IHZv
aWQqIGRhdGEsIHNpemVfdCBkYXRhU2l6ZSkKK3sKKyAgICBtZW1jcHkoKHZvaWQqKShnX2pzY0Nv
bmZpZy5zdGFydE9mRml4ZWRXcml0YWJsZU1lbW9yeVBvb2wgKyBvZmZzZXQpLCBkYXRhLCBkYXRh
U2l6ZSk7Cit9CisKK3N0YXRpYyBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+
IEFMV0FZU19JTkxJTkUgaml0V3JpdGVUaHVua0dlbmVyYXRvcih2b2lkKiBhZGRyZXNzLCB2b2lk
Kiwgc2l6ZV90KQoreworICAgIGdfanNjQ29uZmlnLnN0YXJ0T2ZGaXhlZFdyaXRhYmxlTWVtb3J5
UG9vbCA9IHJlaW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90PihhZGRyZXNzKTsKKyAgICB2b2lkKiBm
dW5jdGlvbiA9IHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KCZnZW5lcmljV3JpdGVUb0pJVFJlZ2lv
bik7CisjaWYgQ1BVKEFSTV9USFVNQjIpCisgICAgLy8gSGFuZGxlIHRodW1iIG9mZnNldAorICAg
IHVpbnRwdHJfdCBmdW5jdGlvbkFzSW50ID0gcmVpbnRlcnByZXRfY2FzdDx1aW50cHRyX3Q+KGZ1
bmN0aW9uKTsKKyAgICBmdW5jdGlvbkFzSW50IC09IDE7CisgICAgZnVuY3Rpb24gPSByZWludGVy
cHJldF9jYXN0PHZvaWQqPihmdW5jdGlvbkFzSW50KTsKKyNlbmRpZgorICAgIGF1dG8gY29kZVB0
ciA9IE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxKSVRUaHVua1B0clRhZz4odGFnQ0Z1bmN0aW9uUHRy
PEpJVFRodW5rUHRyVGFnPihmdW5jdGlvbikpOworICAgIHJldHVybiBNYWNyb0Fzc2VtYmxlckNv
ZGVSZWY8SklUVGh1bmtQdHJUYWc+OjpjcmVhdGVTZWxmTWFuYWdlZENvZGVSZWYoY29kZVB0cik7
Cit9CisjZW5kaWYgLy8gQ1BVKEFSTTY0KSAmJiBVU0UoRVhFQ1VURV9PTkxZX0pJVF9XUklURV9G
VU5DVElPTikKKworc3RhdGljIEFMV0FZU19JTkxJTkUgdm9pZCBpbml0aWFsaXplU2VwYXJhdGVk
V1hIZWFwcyh2b2lkKiBzdHViQmFzZSwgc2l6ZV90IHN0dWJTaXplLCB2b2lkKiBqaXRCYXNlLCBz
aXplX3Qgaml0U2l6ZSkKK3sKKyAgICBtYWNoX3ZtX2FkZHJlc3NfdCB3cml0YWJsZUFkZHIgPSAw
OworCisgICAgLy8gQ3JlYXRlIGEgc2Vjb25kIG1hcHBpbmcgb2YgdGhlIEpJVCByZWdpb24gYXQg
YSByYW5kb20gYWRkcmVzcy4KKyAgICB2bV9wcm90X3QgY3VyLCBtYXg7CisgICAgaW50IHJlbWFw
RmxhZ3MgPSBWTV9GTEFHU19BTllXSEVSRTsKKyNpZiBkZWZpbmVkKFZNX0ZMQUdTX1JBTkRPTV9B
RERSKQorICAgIHJlbWFwRmxhZ3MgfD0gVk1fRkxBR1NfUkFORE9NX0FERFI7CisjZW5kaWYKKyAg
ICBrZXJuX3JldHVybl90IHJldCA9IG1hY2hfdm1fcmVtYXAobWFjaF90YXNrX3NlbGYoKSwgJndy
aXRhYmxlQWRkciwgaml0U2l6ZSwgMCwKKyAgICAgICAgcmVtYXBGbGFncywKKyAgICAgICAgbWFj
aF90YXNrX3NlbGYoKSwgKG1hY2hfdm1fYWRkcmVzc190KWppdEJhc2UsIEZBTFNFLAorICAgICAg
ICAmY3VyLCAmbWF4LCBWTV9JTkhFUklUX0RFRkFVTFQpOworCisgICAgYm9vbCByZW1hcFN1Y2Nl
ZWRlZCA9IChyZXQgPT0gS0VSTl9TVUNDRVNTKTsKKyAgICBpZiAoIXJlbWFwU3VjY2VlZGVkKQor
ICAgICAgICByZXR1cm47CisKKyAgICAvLyBBc3NlbWJsZSBhIHRodW5rIHRoYXQgd2lsbCBzZXJ2
ZSBhcyB0aGUgbWVhbnMgZm9yIHdyaXRpbmcgaW50byB0aGUgSklUIHJlZ2lvbi4KKyAgICBNYWNy
b0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IHdyaXRlVGh1bmsgPSBqaXRXcml0ZVRo
dW5rR2VuZXJhdG9yKHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KHdyaXRhYmxlQWRkciksIHN0dWJC
YXNlLCBzdHViU2l6ZSk7CisKKyAgICBpbnQgcmVzdWx0ID0gMDsKKworI2lmIFVTRShFWEVDVVRF
X09OTFlfSklUX1dSSVRFX0ZVTkNUSU9OKQorICAgIC8vIFByZXZlbnQgcmVhZGluZyB0aGUgd3Jp
dGUgdGh1bmsgY29kZS4KKyAgICByZXN1bHQgPSB2bV9wcm90ZWN0KG1hY2hfdGFza19zZWxmKCks
IHJlaW50ZXJwcmV0X2Nhc3Q8dm1fYWRkcmVzc190PihzdHViQmFzZSksIHN0dWJTaXplLCB0cnVl
LCBWTV9QUk9UX0VYRUNVVEUpOworICAgIFJFTEVBU0VfQVNTRVJUKCFyZXN1bHQpOworI2VuZGlm
CisKKyAgICAvLyBQcmV2ZW50IHdyaXRpbmcgaW50byB0aGUgZXhlY3V0YWJsZSBKSVQgbWFwcGlu
Zy4KKyAgICByZXN1bHQgPSB2bV9wcm90ZWN0KG1hY2hfdGFza19zZWxmKCksIHJlaW50ZXJwcmV0
X2Nhc3Q8dm1fYWRkcmVzc190PihqaXRCYXNlKSwgaml0U2l6ZSwgdHJ1ZSwgVk1fUFJPVF9SRUFE
IHwgVk1fUFJPVF9FWEVDVVRFKTsKKyAgICBSRUxFQVNFX0FTU0VSVCghcmVzdWx0KTsKIAotICAg
ICAgICBzaXplX3QgcmVzZXJ2YXRpb25TaXplOwotICAgICAgICBpZiAoT3B0aW9uczo6aml0TWVt
b3J5UmVzZXJ2YXRpb25TaXplKCkpCi0gICAgICAgICAgICByZXNlcnZhdGlvblNpemUgPSBPcHRp
b25zOjpqaXRNZW1vcnlSZXNlcnZhdGlvblNpemUoKTsKLSAgICAgICAgZWxzZQotICAgICAgICAg
ICAgcmVzZXJ2YXRpb25TaXplID0gZml4ZWRFeGVjdXRhYmxlTWVtb3J5UG9vbFNpemU7Ci0gICAg
ICAgIHJlc2VydmF0aW9uU2l6ZSA9IHN0ZDo6bWF4KHJvdW5kVXBUb011bHRpcGxlT2YocGFnZVNp
emUoKSwgcmVzZXJ2YXRpb25TaXplKSwgcGFnZVNpemUoKSAqIDIpOworICAgIC8vIFByZXZlbnQg
ZXhlY3V0aW9uIGluIHRoZSB3cml0YWJsZSBKSVQgbWFwcGluZy4KKyAgICByZXN1bHQgPSB2bV9w
cm90ZWN0KG1hY2hfdGFza19zZWxmKCksIHN0YXRpY19jYXN0PHZtX2FkZHJlc3NfdD4od3JpdGFi
bGVBZGRyKSwgaml0U2l6ZSwgdHJ1ZSwgVk1fUFJPVF9SRUFEIHwgVk1fUFJPVF9XUklURSk7Cisg
ICAgUkVMRUFTRV9BU1NFUlQoIXJlc3VsdCk7CiAKLSAgICAgICAgYXV0byB0cnlDcmVhdGVQYWdl
UmVzZXJ2YXRpb24gPSBbXSAoc2l6ZV90IHJlc2VydmF0aW9uU2l6ZSkgeworICAgIC8vIFplcm8g
b3V0IHdyaXRhYmxlQWRkciB0byBhdm9pZCBsZWFraW5nIHRoZSBhZGRyZXNzIG9mIHRoZSB3cml0
YWJsZSBtYXBwaW5nLgorICAgIG1lbXNldF9zKCZ3cml0YWJsZUFkZHIsIHNpemVvZih3cml0YWJs
ZUFkZHIpLCAwLCBzaXplb2Yod3JpdGFibGVBZGRyKSk7CisKKyNpZiBFTkFCTEUoU0VQQVJBVEVE
X1dYX0hFQVApCisgICAgZ19qc2NDb25maWcuaml0V3JpdGVTZXBhcmF0ZUhlYXBzID0gcmVpbnRl
cnByZXRfY2FzdDxKSVRXcml0ZVNlcGFyYXRlSGVhcHNGdW5jdGlvbj4od3JpdGVUaHVuay5jb2Rl
KCkuZXhlY3V0YWJsZUFkZHJlc3MoKSk7CisjZW5kaWYKK30KKworI2Vsc2UgLy8gT1MoREFSV0lO
KSAmJiBIQVZFKFJFTUFQX0pJVCkKK3N0YXRpYyBBTFdBWVNfSU5MSU5FIHZvaWQgaW5pdGlhbGl6
ZVNlcGFyYXRlZFdYSGVhcHModm9pZCosIHNpemVfdCwgdm9pZCosIHNpemVfdCkKK3sKK30KKyNl
bmRpZgorCitzdHJ1Y3QgSklUUmVzZXJ2YXRpb24geworICAgIFBhZ2VSZXNlcnZhdGlvbiBwYWdl
UmVzZXJ2YXRpb247CisgICAgdm9pZCogYmFzZSB7IG51bGxwdHIgfTsKKyAgICBzaXplX3Qgc2l6
ZSB7IDAgfTsKK307CisKK3N0YXRpYyBBTFdBWVNfSU5MSU5FIEpJVFJlc2VydmF0aW9uIGluaXRp
YWxpemVKSVRQYWdlUmVzZXJ2YXRpb24oKQoreworICAgIEpJVFJlc2VydmF0aW9uIHJlc2VydmF0
aW9uOworICAgIGlmICghaXNKSVRFbmFibGVkKCkpCisgICAgICAgIHJldHVybiByZXNlcnZhdGlv
bjsKKworICAgIGlmIChPcHRpb25zOjpqaXRNZW1vcnlSZXNlcnZhdGlvblNpemUoKSkKKyAgICAg
ICAgcmVzZXJ2YXRpb24uc2l6ZSA9IE9wdGlvbnM6OmppdE1lbW9yeVJlc2VydmF0aW9uU2l6ZSgp
OworICAgIGVsc2UKKyAgICAgICAgcmVzZXJ2YXRpb24uc2l6ZSA9IGZpeGVkRXhlY3V0YWJsZU1l
bW9yeVBvb2xTaXplOworICAgIHJlc2VydmF0aW9uLnNpemUgPSBzdGQ6Om1heChyb3VuZFVwVG9N
dWx0aXBsZU9mKHBhZ2VTaXplKCksIHJlc2VydmF0aW9uLnNpemUpLCBwYWdlU2l6ZSgpICogMik7
CisKKyAgICBhdXRvIHRyeUNyZWF0ZVBhZ2VSZXNlcnZhdGlvbiA9IFtdIChzaXplX3QgcmVzZXJ2
YXRpb25TaXplKSB7CiAjaWYgT1MoTElOVVgpCi0gICAgICAgICAgICAvLyBJZiB3ZSB1c2UgdW5j
b21taXR0ZWQgcmVzZXJ2YXRpb24sIG1tYXAgb3BlcmF0aW9uIGlzIHJlY29yZGVkIHdpdGggc21h
bGwgcGFnZSBzaXplIGluIHBlcmYgY29tbWFuZCdzIG91dHB1dC4KLSAgICAgICAgICAgIC8vIFRo
aXMgbWFrZXMgdGhlIGZvbGxvd2luZyBKSVQgY29kZSBsb2dnaW5nIGJyb2tlbiBhbmQgc29tZSBv
ZiBKSVQgY29kZSBpcyBub3QgcmVjb3JkZWQgY29ycmVjdGx5LgotICAgICAgICAgICAgLy8gVG8g
YXZvaWQgdGhpcyBwcm9ibGVtLCB3ZSB1c2UgY29tbWl0dGVkIHJlc2VydmF0aW9uIGlmIHdlIG5l
ZWQgcGVyZiBKSVREdW1wIGxvZ2dpbmcuCi0gICAgICAgICAgICBpZiAoT3B0aW9uczo6bG9nSklU
Q29kZUZvclBlcmYoKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gUGFnZVJlc2VydmF0aW9uOjpy
ZXNlcnZlQW5kQ29tbWl0V2l0aEd1YXJkUGFnZXMocmVzZXJ2YXRpb25TaXplLCBPU0FsbG9jYXRv
cjo6SlNKSVRDb2RlUGFnZXMsIEVYRUNVVEFCTEVfUE9PTF9XUklUQUJMRSwgdHJ1ZSk7CisgICAg
ICAgIC8vIElmIHdlIHVzZSB1bmNvbW1pdHRlZCByZXNlcnZhdGlvbiwgbW1hcCBvcGVyYXRpb24g
aXMgcmVjb3JkZWQgd2l0aCBzbWFsbCBwYWdlIHNpemUgaW4gcGVyZiBjb21tYW5kJ3Mgb3V0cHV0
LgorICAgICAgICAvLyBUaGlzIG1ha2VzIHRoZSBmb2xsb3dpbmcgSklUIGNvZGUgbG9nZ2luZyBi
cm9rZW4gYW5kIHNvbWUgb2YgSklUIGNvZGUgaXMgbm90IHJlY29yZGVkIGNvcnJlY3RseS4KKyAg
ICAgICAgLy8gVG8gYXZvaWQgdGhpcyBwcm9ibGVtLCB3ZSB1c2UgY29tbWl0dGVkIHJlc2VydmF0
aW9uIGlmIHdlIG5lZWQgcGVyZiBKSVREdW1wIGxvZ2dpbmcuCisgICAgICAgIGlmIChPcHRpb25z
Ojpsb2dKSVRDb2RlRm9yUGVyZigpKQorICAgICAgICAgICAgcmV0dXJuIFBhZ2VSZXNlcnZhdGlv
bjo6cmVzZXJ2ZUFuZENvbW1pdFdpdGhHdWFyZFBhZ2VzKHJlc2VydmF0aW9uU2l6ZSwgT1NBbGxv
Y2F0b3I6OkpTSklUQ29kZVBhZ2VzLCBFWEVDVVRBQkxFX1BPT0xfV1JJVEFCTEUsIHRydWUpOwog
I2VuZGlmCi0gICAgICAgICAgICByZXR1cm4gUGFnZVJlc2VydmF0aW9uOjpyZXNlcnZlV2l0aEd1
YXJkUGFnZXMocmVzZXJ2YXRpb25TaXplLCBPU0FsbG9jYXRvcjo6SlNKSVRDb2RlUGFnZXMsIEVY
RUNVVEFCTEVfUE9PTF9XUklUQUJMRSwgdHJ1ZSk7Ci0gICAgICAgIH07CisgICAgICAgIHJldHVy
biBQYWdlUmVzZXJ2YXRpb246OnJlc2VydmVXaXRoR3VhcmRQYWdlcyhyZXNlcnZhdGlvblNpemUs
IE9TQWxsb2NhdG9yOjpKU0pJVENvZGVQYWdlcywgRVhFQ1VUQUJMRV9QT09MX1dSSVRBQkxFLCB0
cnVlKTsKKyAgICB9OwogCi0gICAgICAgIG1fcmVzZXJ2YXRpb24gPSB0cnlDcmVhdGVQYWdlUmVz
ZXJ2YXRpb24ocmVzZXJ2YXRpb25TaXplKTsKLSAgICAgICAgaWYgKG1fcmVzZXJ2YXRpb24pIHsK
LSAgICAgICAgICAgIEFTU0VSVChtX3Jlc2VydmF0aW9uLnNpemUoKSA9PSByZXNlcnZhdGlvblNp
emUpOwotICAgICAgICAgICAgdm9pZCogcmVzZXJ2YXRpb25CYXNlID0gbV9yZXNlcnZhdGlvbi5i
YXNlKCk7CisgICAgcmVzZXJ2YXRpb24ucGFnZVJlc2VydmF0aW9uID0gdHJ5Q3JlYXRlUGFnZVJl
c2VydmF0aW9uKHJlc2VydmF0aW9uLnNpemUpOworICAgIGlmIChyZXNlcnZhdGlvbi5wYWdlUmVz
ZXJ2YXRpb24pIHsKKyAgICAgICAgQVNTRVJUKHJlc2VydmF0aW9uLnBhZ2VSZXNlcnZhdGlvbi5z
aXplKCkgPT0gcmVzZXJ2YXRpb24uc2l6ZSk7CisgICAgICAgIHJlc2VydmF0aW9uLmJhc2UgPSBy
ZXNlcnZhdGlvbi5wYWdlUmVzZXJ2YXRpb24uYmFzZSgpOwogCiAjaWYgRU5BQkxFKEZBU1RfSklU
X1BFUk1JU1NJT05TKSAmJiAhRU5BQkxFKFNFUEFSQVRFRF9XWF9IRUFQKQotICAgICAgICAgICAg
UkVMRUFTRV9BU1NFUlQob3NfdGhyZWFkX3NlbGZfcmVzdHJpY3Rfcnd4X2lzX3N1cHBvcnRlZCgp
KTsKLSAgICAgICAgICAgIG9zX3RocmVhZF9zZWxmX3Jlc3RyaWN0X3J3eF90b19yeCgpOworICAg
ICAgICBSRUxFQVNFX0FTU0VSVChvc190aHJlYWRfc2VsZl9yZXN0cmljdF9yd3hfaXNfc3VwcG9y
dGVkKCkpOworICAgICAgICBvc190aHJlYWRfc2VsZl9yZXN0cmljdF9yd3hfdG9fcngoKTsKIAog
I2Vsc2UgLy8gbm90IEVOQUJMRShGQVNUX0pJVF9QRVJNSVNTSU9OUykgb3IgRU5BQkxFKFNFUEFS
QVRFRF9XWF9IRUFQKQogI2lmIEVOQUJMRShGQVNUX0pJVF9QRVJNSVNTSU9OUykKLSAgICAgICAg
ICAgIGlmIChvc190aHJlYWRfc2VsZl9yZXN0cmljdF9yd3hfaXNfc3VwcG9ydGVkKCkpIHsKLSAg
ICAgICAgICAgICAgICBnX2pzY0NvbmZpZy51c2VGYXN0UGVybWlzaW9uc0pJVENvcHkgPSB0cnVl
OwotICAgICAgICAgICAgICAgIG9zX3RocmVhZF9zZWxmX3Jlc3RyaWN0X3J3eF90b19yeCgpOwot
ICAgICAgICAgICAgfSBlbHNlCi0jZW5kaWYKLSAgICAgICAgICAgIGlmIChPcHRpb25zOjp1c2VT
ZXBhcmF0ZWRXWEhlYXAoKSkgewotICAgICAgICAgICAgICAgIC8vIEZpcnN0IHBhZ2Ugb2Ygb3Vy
IEpJVCBhbGxvY2F0aW9uIGlzIHJlc2VydmVkLgotICAgICAgICAgICAgICAgIEFTU0VSVChyZXNl
cnZhdGlvblNpemUgPj0gcGFnZVNpemUoKSAqIDIpOwotICAgICAgICAgICAgICAgIHJlc2VydmF0
aW9uQmFzZSA9ICh2b2lkKikoKHVpbnRwdHJfdClyZXNlcnZhdGlvbkJhc2UgKyBwYWdlU2l6ZSgp
KTsKLSAgICAgICAgICAgICAgICByZXNlcnZhdGlvblNpemUgLT0gcGFnZVNpemUoKTsKLSAgICAg
ICAgICAgICAgICBpbml0aWFsaXplU2VwYXJhdGVkV1hIZWFwcyhtX3Jlc2VydmF0aW9uLmJhc2Uo
KSwgcGFnZVNpemUoKSwgcmVzZXJ2YXRpb25CYXNlLCByZXNlcnZhdGlvblNpemUpOwotICAgICAg
ICAgICAgfQorICAgICAgICBpZiAob3NfdGhyZWFkX3NlbGZfcmVzdHJpY3Rfcnd4X2lzX3N1cHBv
cnRlZCgpKSB7CisgICAgICAgICAgICBnX2pzY0NvbmZpZy51c2VGYXN0UGVybWlzaW9uc0pJVENv
cHkgPSB0cnVlOworICAgICAgICAgICAgb3NfdGhyZWFkX3NlbGZfcmVzdHJpY3Rfcnd4X3RvX3J4
KCk7CisgICAgICAgIH0gZWxzZQorI2VuZGlmCisgICAgICAgIGlmIChPcHRpb25zOjp1c2VTZXBh
cmF0ZWRXWEhlYXAoKSkgeworICAgICAgICAgICAgLy8gRmlyc3QgcGFnZSBvZiBvdXIgSklUIGFs
bG9jYXRpb24gaXMgcmVzZXJ2ZWQuCisgICAgICAgICAgICBBU1NFUlQocmVzZXJ2YXRpb24uc2l6
ZSA+PSBwYWdlU2l6ZSgpICogMik7CisgICAgICAgICAgICByZXNlcnZhdGlvbi5iYXNlID0gKHZv
aWQqKSgodWludHB0cl90KShyZXNlcnZhdGlvbi5iYXNlKSArIHBhZ2VTaXplKCkpOworICAgICAg
ICAgICAgcmVzZXJ2YXRpb24uc2l6ZSAtPSBwYWdlU2l6ZSgpOworICAgICAgICAgICAgaW5pdGlh
bGl6ZVNlcGFyYXRlZFdYSGVhcHMocmVzZXJ2YXRpb24ucGFnZVJlc2VydmF0aW9uLmJhc2UoKSwg
cGFnZVNpemUoKSwgcmVzZXJ2YXRpb24uYmFzZSwgcmVzZXJ2YXRpb24uc2l6ZSk7CisgICAgICAg
IH0KICNlbmRpZiAvLyBub3QgRU5BQkxFKEZBU1RfSklUX1BFUk1JU1NJT05TKSBvciBFTkFCTEUo
U0VQQVJBVEVEX1dYX0hFQVApCisgICAgICAgIHZvaWQqIHJlc2VydmF0aW9uRW5kID0gcmVpbnRl
cnByZXRfY2FzdDx1aW50OF90Kj4ocmVzZXJ2YXRpb24uYmFzZSkgKyByZXNlcnZhdGlvbi5zaXpl
OwogCi0gICAgICAgICAgICBhZGRGcmVzaEZyZWVTcGFjZShyZXNlcnZhdGlvbkJhc2UsIHJlc2Vy
dmF0aW9uU2l6ZSk7CisgICAgICAgIGdfanNjQ29uZmlnLnN0YXJ0RXhlY3V0YWJsZU1lbW9yeSA9
IHRhZ0NvZGVQdHI8RXhlY3V0YWJsZU1lbW9yeVB0clRhZz4ocmVzZXJ2YXRpb24uYmFzZSk7Cisg
ICAgICAgIGdfanNjQ29uZmlnLmVuZEV4ZWN1dGFibGVNZW1vcnkgPSB0YWdDb2RlUHRyPEV4ZWN1
dGFibGVNZW1vcnlQdHJUYWc+KHJlc2VydmF0aW9uRW5kKTsKKyAgICB9CiAKLSAgICAgICAgICAg
IEFTU0VSVChieXRlc1Jlc2VydmVkKCkgPT0gcmVzZXJ2YXRpb25TaXplKTsgLy8gU2luY2Ugb3Vy
IGV4ZWN1dGFibGUgbWVtb3J5IGlzIGZpeGVkLXNpemVkLCBieXRlc1Jlc2VydmVkIGlzIG5ldmVy
IGNoYW5nZWQgYWZ0ZXIgaW5pdGlhbGl6YXRpb24uCisgICAgcmV0dXJuIHJlc2VydmF0aW9uOwor
fQogCi0gICAgICAgICAgICB2b2lkKiByZXNlcnZhdGlvbkVuZCA9IHJlaW50ZXJwcmV0X2Nhc3Q8
dWludDhfdCo+KHJlc2VydmF0aW9uQmFzZSkgKyByZXNlcnZhdGlvblNpemU7CitjbGFzcyBGaXhl
ZFZNUG9vbEV4ZWN1dGFibGVBbGxvY2F0b3IgZmluYWwgeworICAgIFdURl9NQUtFX0ZBU1RfQUxM
T0NBVEVEOworcHVibGljOgorICAgIEZpeGVkVk1Qb29sRXhlY3V0YWJsZUFsbG9jYXRvcigpCisg
ICAgeworICAgICAgICBtX2FsbG9jYXRvci5tX2ZpeGVkQWxsb2NhdG9yID0gdGhpczsKKworICAg
ICAgICBKSVRSZXNlcnZhdGlvbiByZXNlcnZhdGlvbiA9IGluaXRpYWxpemVKSVRQYWdlUmVzZXJ2
YXRpb24oKTsKKyAgICAgICAgbV9yZXNlcnZhdGlvbiA9IFdURk1vdmUocmVzZXJ2YXRpb24ucGFn
ZVJlc2VydmF0aW9uKTsKKyAgICAgICAgaWYgKG1fcmVzZXJ2YXRpb24pIHsKKyAgICAgICAgICAg
IG1fYWxsb2NhdG9yLmFkZEZyZXNoRnJlZVNwYWNlKHJlc2VydmF0aW9uLmJhc2UsIHJlc2VydmF0
aW9uLnNpemUpOwogCi0gICAgICAgICAgICBnX2pzY0NvbmZpZy5zdGFydEV4ZWN1dGFibGVNZW1v
cnkgPSB0YWdDb2RlUHRyPEV4ZWN1dGFibGVNZW1vcnlQdHJUYWc+KHJlc2VydmF0aW9uQmFzZSk7
Ci0gICAgICAgICAgICBnX2pzY0NvbmZpZy5lbmRFeGVjdXRhYmxlTWVtb3J5ID0gdGFnQ29kZVB0
cjxFeGVjdXRhYmxlTWVtb3J5UHRyVGFnPihyZXNlcnZhdGlvbkVuZCk7CisgICAgICAgICAgICBB
U1NFUlQoYnl0ZXNSZXNlcnZlZCgpID09IHJlc2VydmF0aW9uLnNpemUpOyAvLyBTaW5jZSBvdXIg
ZXhlY3V0YWJsZSBtZW1vcnkgaXMgZml4ZWQtc2l6ZWQsIGJ5dGVzUmVzZXJ2ZWQgaXMgbmV2ZXIg
Y2hhbmdlZCBhZnRlciBpbml0aWFsaXphdGlvbi4KICAgICAgICAgfQogICAgIH0KIAotICAgIHZp
cnR1YWwgfkZpeGVkVk1Qb29sRXhlY3V0YWJsZUFsbG9jYXRvcigpOworICAgIH5GaXhlZFZNUG9v
bEV4ZWN1dGFibGVBbGxvY2F0b3IoKQorICAgIHsKKyAgICAgICAgbV9yZXNlcnZhdGlvbi5kZWFs
bG9jYXRlKCk7CisgICAgfQogCiAgICAgdm9pZCogbWVtb3J5U3RhcnQoKSB7IHJldHVybiB1bnRh
Z0NvZGVQdHI8RXhlY3V0YWJsZU1lbW9yeVB0clRhZz4oZ19qc2NDb25maWcuc3RhcnRFeGVjdXRh
YmxlTWVtb3J5KTsgfQogICAgIHZvaWQqIG1lbW9yeUVuZCgpIHsgcmV0dXJuIHVudGFnQ29kZVB0
cjxFeGVjdXRhYmxlTWVtb3J5UHRyVGFnPihnX2pzY0NvbmZpZy5lbmRFeGVjdXRhYmxlTWVtb3J5
KTsgfQogICAgIGJvb2wgaXNKSVRQQyh2b2lkKiBwYykgeyByZXR1cm4gbWVtb3J5U3RhcnQoKSA8
PSBwYyAmJiBwYyA8IG1lbW9yeUVuZCgpOyB9CisgICAgYm9vbCBpc1ZhbGlkKCkgeyByZXR1cm4g
ISFtX3Jlc2VydmF0aW9uOyB9CiAKLXByb3RlY3RlZDoKLSAgICBGcmVlU3BhY2VQdHIgYWxsb2Nh
dGVOZXdTcGFjZShzaXplX3QmKSBvdmVycmlkZQorICAgIFJlZlB0cjxFeGVjdXRhYmxlTWVtb3J5
SGFuZGxlPiBhbGxvY2F0ZShzaXplX3Qgc2l6ZUluQnl0ZXMsIHZvaWQqIG93bmVyVUlELCBzaXpl
X3QgbnVtSXNsYW5kcykKICAgICB7Ci0gICAgICAgIC8vIFdlJ3JlIG9wZXJhdGluZyBpbiBhIGZp
eGVkIHBvb2wsIHNvIG5ldyBhbGxvY2F0aW9uIGlzIGFsd2F5cyBwcm9oaWJpdGVkLgotICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKLSAgICB9CisjaWYgQ1BVKEFSTTY0KQorICAgICAgICBSZWZQdHI8
RXhlY3V0YWJsZU1lbW9yeUhhbmRsZT4gcmVzdWx0OworICAgICAgICBmb3JFYWNoQWxsb2NhdG9y
KFsmXSAoUmVnaW9uQWxsb2NhdG9yJiBhbGxvY2F0b3IpIHsKKyAgICAgICAgICAgIGlmICghYWxs
b2NhdG9yLnRyeUFsbG9jYXRlSXNsYW5kcyhudW1Jc2xhbmRzKSkKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gSXRlcmF0aW9uU3RhdHVzOjpDb250aW51ZTsKKyAgICAgICAgICAgIHJlc3VsdCA9IGFs
bG9jYXRvci5hbGxvY2F0ZShzaXplSW5CeXRlcywgb3duZXJVSUQpOworICAgICAgICAgICAgaWYg
KHJlc3VsdCkKKyAgICAgICAgICAgICAgICByZXR1cm4gSXRlcmF0aW9uU3RhdHVzOjpEb25lOwog
Ci0gICAgdm9pZCBub3RpZnlOZWVkUGFnZSh2b2lkKiBwYWdlLCBzaXplX3QgY291bnQpIG92ZXJy
aWRlCi0gICAgewotI2lmIFVTRShNQURWX0ZSRUVfRk9SX0pJVF9NRU1PUlkpCi0gICAgICAgIFVO
VVNFRF9QQVJBTShwYWdlKTsKLSAgICAgICAgVU5VU0VEX1BBUkFNKGNvdW50KTsKKyAgICAgICAg
ICAgIGFsbG9jYXRvci5kZWFsbG9jYXRlSXNsYW5kcyhudW1Jc2xhbmRzKTsKKyAgICAgICAgICAg
IHJldHVybiBJdGVyYXRpb25TdGF0dXM6OkNvbnRpbnVlOworICAgICAgICB9KTsKICNlbHNlCi0g
ICAgICAgIG1fcmVzZXJ2YXRpb24uY29tbWl0KHBhZ2UsIHBhZ2VTaXplKCkgKiBjb3VudCk7Cisg
ICAgICAgIHJldHVybiBtX2FsbG9jYXRvci5hbGxvY2F0ZShzaXplSW5CeXRlcywgb3duZXJVSUQp
OwogI2VuZGlmCiAgICAgfQogCi0gICAgdm9pZCBub3RpZnlQYWdlSXNGcmVlKHZvaWQqIHBhZ2Us
IHNpemVfdCBjb3VudCkgb3ZlcnJpZGUKKyAgICBMb2NrJiBnZXRMb2NrKCkgeyByZXR1cm4gbV9s
b2NrOyB9CisKKyAgICAvLyBOb24gYXRvbWljCisgICAgc2l6ZV90IGJ5dGVzQWxsb2NhdGVkKCkg
CiAgICAgewotI2lmIFVTRShNQURWX0ZSRUVfRk9SX0pJVF9NRU1PUlkpCi0gICAgICAgIGZvciAo
OzspIHsKLSAgICAgICAgICAgIGludCByZXN1bHQgPSBtYWR2aXNlKHBhZ2UsIHBhZ2VTaXplKCkg
KiBjb3VudCwgTUFEVl9GUkVFKTsKLSAgICAgICAgICAgIGlmICghcmVzdWx0KQotICAgICAgICAg
ICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIEFTU0VSVChyZXN1bHQgPT0gLTEpOwotICAgICAg
ICAgICAgaWYgKGVycm5vICE9IEVBR0FJTikgewotICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNT
RVJUX05PVF9SRUFDSEVEKCk7IC8vIEluIGRlYnVnIG1vZGUsIHRoaXMgc2hvdWxkIGJlIGEgaGFy
ZCBmYWlsdXJlLgotICAgICAgICAgICAgICAgIGJyZWFrOyAvLyBJbiByZWxlYXNlIG1vZGUsIHdl
IHNob3VsZCBqdXN0IGlnbm9yZSB0aGUgZXJyb3IgLSBub3QgcmV0dXJuaW5nIG1lbW9yeSB0byB0
aGUgT1MgaXMgYmV0dGVyIHRoYW4gY3Jhc2hpbmcsIGVzcGVjaWFsbHkgc2luY2Ugd2UgX3dpbGxf
IGJlIGFibGUgdG8gcmV1c2UgdGhlIG1lbW9yeSBpbnRlcm5hbGx5IGFueXdheS4KLSAgICAgICAg
ICAgIH0KLSAgICAgICAgfQotI2Vsc2UKLSAgICAgICAgbV9yZXNlcnZhdGlvbi5kZWNvbW1pdChw
YWdlLCBwYWdlU2l6ZSgpICogY291bnQpOwotI2VuZGlmCisgICAgICAgIHNpemVfdCByZXN1bHQg
PSAwOworICAgICAgICBmb3JFYWNoQWxsb2NhdG9yKFsmXSAoQWxsb2NhdG9yJiBhbGxvY2F0b3Ip
IHsKKyAgICAgICAgICAgIHJlc3VsdCArPSBhbGxvY2F0b3IuYnl0ZXNBbGxvY2F0ZWQoKTsKKyAg
ICAgICAgfSk7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorICAgIHNpemVfdCBieXRl
c1Jlc2VydmVkKCkgCisgICAgeworICAgICAgICBzaXplX3QgcmVzdWx0ID0gMDsKKyAgICAgICAg
Zm9yRWFjaEFsbG9jYXRvcihbJl0gKEFsbG9jYXRvciYgYWxsb2NhdG9yKSB7CisgICAgICAgICAg
ICByZXN1bHQgKz0gYWxsb2NhdG9yLmJ5dGVzUmVzZXJ2ZWQoKTsKKyAgICAgICAgfSk7CisgICAg
ICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorICAgIHNpemVfdCBieXRlc0NvbW1pdHRlZCgpCisg
ICAgeworICAgICAgICBzaXplX3QgcmVzdWx0ID0gMDsKKyAgICAgICAgZm9yRWFjaEFsbG9jYXRv
cihbJl0gKEFsbG9jYXRvciYgYWxsb2NhdG9yKSB7CisgICAgICAgICAgICByZXN1bHQgKz0gYWxs
b2NhdG9yLmJ5dGVzQ29tbWl0dGVkKCk7CisgICAgICAgIH0pOworICAgICAgICByZXR1cm4gcmVz
dWx0OwogICAgIH0KIAotcHJpdmF0ZToKLSNpZiBPUyhEQVJXSU4pICYmIEhBVkUoUkVNQVBfSklU
KQotICAgIHZvaWQgaW5pdGlhbGl6ZVNlcGFyYXRlZFdYSGVhcHModm9pZCogc3R1YkJhc2UsIHNp
emVfdCBzdHViU2l6ZSwgdm9pZCogaml0QmFzZSwgc2l6ZV90IGppdFNpemUpCisgICAgYm9vbCBp
c0luQWxsb2NhdGVkTWVtb3J5KGNvbnN0IEFic3RyYWN0TG9ja2VyJiBsb2NrZXIsIHZvaWQqIGFk
ZHJlc3MpCiAgICAgewotICAgICAgICBtYWNoX3ZtX2FkZHJlc3NfdCB3cml0YWJsZUFkZHIgPSAw
OworICAgICAgICBib29sIHJlc3VsdCA9IGZhbHNlOworICAgICAgICBmb3JFYWNoQWxsb2NhdG9y
KFsmXSAoQWxsb2NhdG9yJiBhbGxvY2F0b3IpIHsKKyAgICAgICAgICAgIGlmIChhbGxvY2F0b3Iu
aXNJbkFsbG9jYXRlZE1lbW9yeShsb2NrZXIsIGFkZHJlc3MpKSB7CisgICAgICAgICAgICAgICAg
cmVzdWx0ID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICByZXR1cm4gSXRlcmF0aW9uU3RhdHVzOjpE
b25lOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIEl0ZXJhdGlvblN0YXR1czo6
Q29udGludWU7CisgICAgICAgIH0pOwogCi0gICAgICAgIC8vIENyZWF0ZSBhIHNlY29uZCBtYXBw
aW5nIG9mIHRoZSBKSVQgcmVnaW9uIGF0IGEgcmFuZG9tIGFkZHJlc3MuCi0gICAgICAgIHZtX3By
b3RfdCBjdXIsIG1heDsKLSAgICAgICAgaW50IHJlbWFwRmxhZ3MgPSBWTV9GTEFHU19BTllXSEVS
RTsKLSNpZiBkZWZpbmVkKFZNX0ZMQUdTX1JBTkRPTV9BRERSKQotICAgICAgICByZW1hcEZsYWdz
IHw9IFZNX0ZMQUdTX1JBTkRPTV9BRERSOwotI2VuZGlmCi0gICAgICAgIGtlcm5fcmV0dXJuX3Qg
cmV0ID0gbWFjaF92bV9yZW1hcChtYWNoX3Rhc2tfc2VsZigpLCAmd3JpdGFibGVBZGRyLCBqaXRT
aXplLCAwLAotICAgICAgICAgICAgcmVtYXBGbGFncywKLSAgICAgICAgICAgIG1hY2hfdGFza19z
ZWxmKCksIChtYWNoX3ZtX2FkZHJlc3NfdClqaXRCYXNlLCBGQUxTRSwKLSAgICAgICAgICAgICZj
dXIsICZtYXgsIFZNX0lOSEVSSVRfREVGQVVMVCk7CisgICAgICAgIHJldHVybiByZXN1bHQ7Cisg
ICAgfQogCi0gICAgICAgIGJvb2wgcmVtYXBTdWNjZWVkZWQgPSAocmV0ID09IEtFUk5fU1VDQ0VT
Uyk7Ci0gICAgICAgIGlmICghcmVtYXBTdWNjZWVkZWQpCi0gICAgICAgICAgICByZXR1cm47Cisj
aWYgRU5BQkxFKE1FVEFfQUxMT0NBVE9SX1BST0ZJTEUpCisgICAgdm9pZCBkdW1wUHJvZmlsZSgp
CisgICAgeworICAgICAgICBmb3JFYWNoQWxsb2NhdG9yKFsmXSAoQWxsb2NhdG9yJiBhbGxvY2F0
b3IpIHsKKyAgICAgICAgICAgIGFsbG9jYXRvci5kdW1wUHJvZmlsZSgpOworICAgICAgICB9KTsK
KyAgICB9CisjZW5kaWYKIAotICAgICAgICAvLyBBc3NlbWJsZSBhIHRodW5rIHRoYXQgd2lsbCBz
ZXJ2ZSBhcyB0aGUgbWVhbnMgZm9yIHdyaXRpbmcgaW50byB0aGUgSklUIHJlZ2lvbi4KLSAgICAg
ICAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiB3cml0ZVRodW5rID0gaml0
V3JpdGVUaHVua0dlbmVyYXRvcihyZWludGVycHJldF9jYXN0PHZvaWQqPih3cml0YWJsZUFkZHIp
LCBzdHViQmFzZSwgc3R1YlNpemUpOworICAgIHZvaWQgbm90aWZ5Q29kZVByb2ZpbGluZygpCisg
ICAgeworICAgICAgICBmb3JFYWNoQWxsb2NhdG9yKFsmXSAoQWxsb2NhdG9yJiBhbGxvY2F0b3Ip
IHsKKyAgICAgICAgICAgIENvZGVQcm9maWxpbmc6Om5vdGlmeUFsbG9jYXRvcigmYWxsb2NhdG9y
KTsKKyAgICAgICAgfSk7CisgICAgfQogCi0gICAgICAgIGludCByZXN1bHQgPSAwOworICAgIE1l
dGFBbGxvY2F0b3I6OlN0YXRpc3RpY3MgY3VycmVudFN0YXRpc3RpY3MoKQorICAgIHsKKyAgICAg
ICAgLy8gT09QUzogbWFrZSBhdG9taWMgYnkgaG9sZGluZyBsb2NrLi4uCisgICAgICAgIE1ldGFB
bGxvY2F0b3I6OlN0YXRpc3RpY3MgcmVzdWx0IHsgMCwgMCwgMCB9OworICAgICAgICBmb3JFYWNo
QWxsb2NhdG9yKFsmXSAoQWxsb2NhdG9yJiBhbGxvY2F0b3IpIHsKKyAgICAgICAgICAgIGF1dG8g
YWxsb2NhdG9yU3RhdHMgPSBhbGxvY2F0b3IuY3VycmVudFN0YXRpc3RpY3MoKTsKKyAgICAgICAg
ICAgIHJlc3VsdC5ieXRlc0FsbG9jYXRlZCArPSBhbGxvY2F0b3JTdGF0cy5ieXRlc0FsbG9jYXRl
ZDsKKyAgICAgICAgICAgIHJlc3VsdC5ieXRlc1Jlc2VydmVkICs9IGFsbG9jYXRvclN0YXRzLmJ5
dGVzUmVzZXJ2ZWQ7CisgICAgICAgICAgICByZXN1bHQuYnl0ZXNDb21taXR0ZWQgKz0gYWxsb2Nh
dG9yU3RhdHMuYnl0ZXNDb21taXR0ZWQ7CisgICAgICAgIH0pOworICAgICAgICByZXR1cm4gcmVz
dWx0OworICAgIH0KIAotI2lmIFVTRShFWEVDVVRFX09OTFlfSklUX1dSSVRFX0ZVTkNUSU9OKQot
ICAgICAgICAvLyBQcmV2ZW50IHJlYWRpbmcgdGhlIHdyaXRlIHRodW5rIGNvZGUuCi0gICAgICAg
IHJlc3VsdCA9IHZtX3Byb3RlY3QobWFjaF90YXNrX3NlbGYoKSwgcmVpbnRlcnByZXRfY2FzdDx2
bV9hZGRyZXNzX3Q+KHN0dWJCYXNlKSwgc3R1YlNpemUsIHRydWUsIFZNX1BST1RfRVhFQ1VURSk7
Ci0gICAgICAgIFJFTEVBU0VfQVNTRVJUKCFyZXN1bHQpOwotI2VuZGlmCitwcml2YXRlOgorICAg
IGNsYXNzIEFsbG9jYXRvciA6IHB1YmxpYyBNZXRhQWxsb2NhdG9yIHsKKyAgICBwdWJsaWM6Cisg
ICAgICAgIEFsbG9jYXRvcigpCisgICAgICAgICAgICA6IE1ldGFBbGxvY2F0b3Ioaml0QWxsb2Nh
dGlvbkdyYW51bGUsIHBhZ2VTaXplKCkpIC8vIHJvdW5kIHVwIGFsbCBhbGxvY2F0aW9ucyB0byAz
MiBieXRlcworICAgICAgICB7CisgICAgICAgIH0KIAotICAgICAgICAvLyBQcmV2ZW50IHdyaXRp
bmcgaW50byB0aGUgZXhlY3V0YWJsZSBKSVQgbWFwcGluZy4KLSAgICAgICAgcmVzdWx0ID0gdm1f
cHJvdGVjdChtYWNoX3Rhc2tfc2VsZigpLCByZWludGVycHJldF9jYXN0PHZtX2FkZHJlc3NfdD4o
aml0QmFzZSksIGppdFNpemUsIHRydWUsIFZNX1BST1RfUkVBRCB8IFZNX1BST1RfRVhFQ1VURSk7
Ci0gICAgICAgIFJFTEVBU0VfQVNTRVJUKCFyZXN1bHQpOworICAgICAgICBGcmVlU3BhY2VQdHIg
YWxsb2NhdGVOZXdTcGFjZShzaXplX3QmKSBvdmVycmlkZQorICAgICAgICB7CisgICAgICAgICAg
ICAvLyBXZSdyZSBvcGVyYXRpbmcgaW4gYSBmaXhlZCBwb29sLCBzbyBuZXcgYWxsb2NhdGlvbiBp
cyBhbHdheXMgcHJvaGliaXRlZC4KKyAgICAgICAgICAgIHJldHVybiBudWxscHRyOworICAgICAg
ICB9CiAKLSAgICAgICAgLy8gUHJldmVudCBleGVjdXRpb24gaW4gdGhlIHdyaXRhYmxlIEpJVCBt
YXBwaW5nLgotICAgICAgICByZXN1bHQgPSB2bV9wcm90ZWN0KG1hY2hfdGFza19zZWxmKCksIHN0
YXRpY19jYXN0PHZtX2FkZHJlc3NfdD4od3JpdGFibGVBZGRyKSwgaml0U2l6ZSwgdHJ1ZSwgVk1f
UFJPVF9SRUFEIHwgVk1fUFJPVF9XUklURSk7Ci0gICAgICAgIFJFTEVBU0VfQVNTRVJUKCFyZXN1
bHQpOworICAgICAgICB2b2lkIG5vdGlmeU5lZWRQYWdlKHZvaWQqIHBhZ2UsIHNpemVfdCBjb3Vu
dCkgb3ZlcnJpZGUKKyAgICAgICAgeworICAgICAgICAgICAgbV9maXhlZEFsbG9jYXRvci0+bV9y
ZXNlcnZhdGlvbi5jb21taXQocGFnZSwgcGFnZVNpemUoKSAqIGNvdW50KTsKKyAgICAgICAgfQog
Ci0gICAgICAgIC8vIFplcm8gb3V0IHdyaXRhYmxlQWRkciB0byBhdm9pZCBsZWFraW5nIHRoZSBh
ZGRyZXNzIG9mIHRoZSB3cml0YWJsZSBtYXBwaW5nLgotICAgICAgICBtZW1zZXRfcygmd3JpdGFi
bGVBZGRyLCBzaXplb2Yod3JpdGFibGVBZGRyKSwgMCwgc2l6ZW9mKHdyaXRhYmxlQWRkcikpOwor
ICAgICAgICB2b2lkIG5vdGlmeVBhZ2VJc0ZyZWUodm9pZCogcGFnZSwgc2l6ZV90IGNvdW50KSBv
dmVycmlkZQorICAgICAgICB7CisgICAgICAgICAgICBtX2ZpeGVkQWxsb2NhdG9yLT5tX3Jlc2Vy
dmF0aW9uLmRlY29tbWl0KHBhZ2UsIHBhZ2VTaXplKCkgKiBjb3VudCk7CisgICAgICAgIH0KIAot
I2lmIEVOQUJMRShTRVBBUkFURURfV1hfSEVBUCkKLSAgICAgICAgZ19qc2NDb25maWcuaml0V3Jp
dGVTZXBhcmF0ZUhlYXBzID0gcmVpbnRlcnByZXRfY2FzdDxKSVRXcml0ZVNlcGFyYXRlSGVhcHNG
dW5jdGlvbj4od3JpdGVUaHVuay5jb2RlKCkuZXhlY3V0YWJsZUFkZHJlc3MoKSk7Ci0jZW5kaWYK
LSAgICB9CisgICAgICAgIEZpeGVkVk1Qb29sRXhlY3V0YWJsZUFsbG9jYXRvciogbV9maXhlZEFs
bG9jYXRvcjsKKyAgICB9OwogCi0jaWYgQ1BVKEFSTTY0KSAmJiBVU0UoRVhFQ1VURV9PTkxZX0pJ
VF9XUklURV9GVU5DVElPTikKLSAgICBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJU
YWc+IGppdFdyaXRlVGh1bmtHZW5lcmF0b3Iodm9pZCogd3JpdGFibGVBZGRyLCB2b2lkKiBzdHVi
QmFzZSwgc2l6ZV90IHN0dWJTaXplKQotICAgIHsKLSAgICAgICAgdXNpbmcgbmFtZXNwYWNlIEFS
TTY0UmVnaXN0ZXJzOwotICAgICAgICB1c2luZyBUcnVzdGVkSW1tMzIgPSBNYWNyb0Fzc2VtYmxl
cjo6VHJ1c3RlZEltbTMyOworI2lmIENQVShBUk02NCkgLy8gT09QUzogY2FuJ3QgZG8gdGhpcyBm
b3IgYXJtNjRfMzIKKyAgICBjbGFzcyBSZWdpb25BbGxvY2F0b3IgOiBwdWJsaWMgQWxsb2NhdG9y
IHsKKyAgICBwdWJsaWM6CisgICAgICAgIC8vICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0KKyAgICAgICAgLy8gIHwgYWxsb2NhdG9yIC0tPiAgICAgPC0tIGlzbGFuZCAgICAg
IHwKKyAgICAgICAgLy8gIHwgICAgICAgICAgICAgXiAgICAgXiAgICAgICAgICAgICAgIHwKKyAg
ICAgICAgLy8gIHwgICAgICAgICAgICAgfCAgICAgfCAgICAgICAgICAgICAgIHwKKyAgICAgICAg
Ly8gIHwgYWxsb2NhdG9yU2l6ZSAgICAgcmVzZXJ2ZWRJc2xhbmRzIHwKKyAgICAgICAgLy8gIC0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgICAgLy8gIGFsbG9jYXRv
ckVuZCA8PSBpc2xhbmQgYmVnaW4KKworICAgICAgICAvLyBPT1BTOiBwYXNzIExvY2tIb2xkZXIg
dG8gbWFrZSBpdCBvYnZpb3VzIGxvY2sgaXMgaGVsZC4KKyAgICAgICAgRnJlZVNwYWNlUHRyIGFs
bG9jYXRlTmV3U3BhY2Uoc2l6ZV90JiBudW1QYWdlcykgb3ZlcnJpZGUKKyAgICAgICAgeworICAg
ICAgICAgICAgdWludHB0cl90IGlzbGFuZEJlZ2luID0gZW5kIC0gKG51bVJlc2VydmVkSXNsYW5k
cyAqIGlzbGFuZFNpemVJbkJ5dGVzKTsgLy8gW2lzbGFuZEJlZ2luLCBlbmQpCisgICAgICAgICAg
ICBzaXplX3QgcmVxdWVzdGVkQnl0ZXMgPSBudW1QYWdlcyAqIHBhZ2VTaXplKCk7CisgICAgICAg
ICAgICB1aW50cHRyX3QgbmV3QWxsb2NhdG9yRW5kID0gc3RhcnQgKyBhbGxvY2F0b3JTaXplICsg
cmVxdWVzdGVkQnl0ZXM7IC8vIFtzdGFydCwgbmV3QWxsb2NhdG9yRW5kKQorICAgICAgICAgICAg
aWYgKG5ld0FsbG9jYXRvckVuZCA+IGlzbGFuZEJlZ2luKQorICAgICAgICAgICAgICAgIHJldHVy
biBudWxscHRyOworICAgICAgICAgICAgdWludHB0cl90IHJlc3VsdCA9IHN0YXJ0ICsgYWxsb2Nh
dG9yU2l6ZTsKKyAgICAgICAgICAgIGFsbG9jYXRvclNpemUgKz0gcmVxdWVzdGVkQnl0ZXM7Cisg
ICAgICAgICAgICByZXR1cm4gRnJlZVNwYWNlUHRyIHsgYml0d2lzZV9jYXN0PHZvaWQqPihyZXN1
bHQpIH07CisgICAgICAgIH0KIAotICAgICAgICBNYWNyb0Fzc2VtYmxlciBqaXQ7CisgICAgICAg
IC8vIE9PUFM6IHBhc3MgTG9ja0hvbGRlciB0byBtYWtlIGl0IG9idmlvdXMgbG9jayBpcyBoZWxk
LgorICAgICAgICBib29sIHRyeUFsbG9jYXRlSXNsYW5kcyhzaXplX3QgbnVtSXNsYW5kc1RvQWxs
b2NhdGUpCisgICAgICAgIHsKKyAgICAgICAgICAgIHVpbnRwdHJfdCBudW1GcmVlSXNsYW5kcyA9
IG51bVJlc2VydmVkSXNsYW5kcyAtIG51bUFsbG9jYXRlZElzbGFuZHM7IAorICAgICAgICAgICAg
aWYgKG51bUZyZWVJc2xhbmRzID49IG51bUlzbGFuZHNUb0FsbG9jYXRlKSB7CisgICAgICAgICAg
ICAgICAgbnVtQWxsb2NhdGVkSXNsYW5kcyArPSBudW1Jc2xhbmRzVG9BbGxvY2F0ZTsKKyAgICAg
ICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChudW1BbGxvY2F0ZWRJc2xhbmRzIDw9IG51bVJlc2Vy
dmVkSXNsYW5kcyk7IC8vIE9PUFM6IGNoZWNrQ29uc2lzdGVuY3k/CisgICAgICAgICAgICAgICAg
cmV0dXJuIHRydWU7CisgICAgICAgICAgICB9IAorICAgICAgICAgICAgCisgICAgICAgICAgICB1
aW50cHRyX3QgaXNsYW5kc1RvUmVzZXJ2ZSA9IG51bUlzbGFuZHNUb0FsbG9jYXRlIC0gbnVtRnJl
ZUlzbGFuZHM7CisgICAgICAgICAgICB1aW50cHRyX3QgbmV3SXNsYW5kQmVnaW4gPSBlbmQgLSAo
KG51bVJlc2VydmVkSXNsYW5kcyArIGlzbGFuZHNUb1Jlc2VydmUpICogaXNsYW5kU2l6ZUluQnl0
ZXMpOworICAgICAgICAgICAgdWludHB0cl90IGFsbG9jYXRvckVuZCA9IHN0YXJ0ICsgYWxsb2Nh
dG9yU2l6ZTsKKyAgICAgICAgICAgIGlmIChuZXdJc2xhbmRCZWdpbiA8IGFsbG9jYXRvckVuZCkK
KyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAgICAgICAgIG51bUFsbG9jYXRl
ZElzbGFuZHMgKz0gbnVtSXNsYW5kc1RvQWxsb2NhdGU7CisgICAgICAgICAgICBudW1SZXNlcnZl
ZElzbGFuZHMgKz0gaXNsYW5kc1RvUmVzZXJ2ZTsKKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJU
KG51bUFsbG9jYXRlZElzbGFuZHMgPT0gbnVtUmVzZXJ2ZWRJc2xhbmRzKTsKKyAgICAgICAgICAg
IHJldHVybiB0cnVlOworICAgICAgICB9CiAKLSAgICAgICAgaml0LnRhZ1JldHVybkFkZHJlc3Mo
KTsKLSAgICAgICAgaml0Lm1vdmUoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIod3JpdGFi
bGVBZGRyKSwgeDcpOwotICAgICAgICBqaXQuYWRkUHRyKHg3LCB4MCk7Ci0KLSAgICAgICAgaml0
Lm1vdmUoeDAsIHgzKTsKLSAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgc21hbGxDb3B5ID0g
aml0LmJyYW5jaDY0KE1hY3JvQXNzZW1ibGVyOjpCZWxvdywgeDIsIE1hY3JvQXNzZW1ibGVyOjpU
cnVzdGVkSW1tNjQoNjQpKTsKLQotICAgICAgICBqaXQuYWRkNjQoVHJ1c3RlZEltbTMyKDMyKSwg
eDMpOwotICAgICAgICBqaXQuYW5kNjQoVHJ1c3RlZEltbTMyKC0zMiksIHgzKTsKLSAgICAgICAg
aml0LmxvYWRQYWlyNjQoeDEsIHgxMiwgeDEzKTsKLSAgICAgICAgaml0LmxvYWRQYWlyNjQoeDEs
IFRydXN0ZWRJbW0zMigxNiksIHgxNCwgeDE1KTsKLSAgICAgICAgaml0LnN1YjY0KHgzLCB4MCwg
eDUpOwotICAgICAgICBqaXQuYWRkUHRyKHg1LCB4MSk7Ci0KLSAgICAgICAgaml0LmxvYWRQYWly
NjQoeDEsIHg4LCB4OSk7Ci0gICAgICAgIGppdC5sb2FkUGFpcjY0KHgxLCBUcnVzdGVkSW1tMzIo
MTYpLCB4MTAsIHgxMSk7Ci0gICAgICAgIGppdC5hZGQ2NChUcnVzdGVkSW1tMzIoMzIpLCB4MSk7
Ci0gICAgICAgIGppdC5zdWI2NCh4NSwgeDIpOwotICAgICAgICBqaXQuc3RvcmVQYWlyNjQoeDEy
LCB4MTMsIHgwKTsKLSAgICAgICAgaml0LnN0b3JlUGFpcjY0KHgxNCwgeDE1LCB4MCwgVHJ1c3Rl
ZEltbTMyKDE2KSk7Ci0gICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIGNsZWFudXAgPSBqaXQu
YnJhbmNoU3ViNjQoTWFjcm9Bc3NlbWJsZXI6OkJlbG93T3JFcXVhbCwgVHJ1c3RlZEltbTMyKDY0
KSwgeDIpOwotCi0gICAgICAgIE1hY3JvQXNzZW1ibGVyOjpMYWJlbCBjb3B5TG9vcCA9IGppdC5s
YWJlbCgpOwotICAgICAgICBqaXQuc3RvcmVQYWlyNjRXaXRoTm9uVGVtcG9yYWxBY2Nlc3MoeDgs
IHg5LCB4Myk7Ci0gICAgICAgIGppdC5zdG9yZVBhaXI2NFdpdGhOb25UZW1wb3JhbEFjY2Vzcyh4
MTAsIHgxMSwgeDMsIFRydXN0ZWRJbW0zMigxNikpOwotICAgICAgICBqaXQuYWRkNjQoVHJ1c3Rl
ZEltbTMyKDMyKSwgeDMpOwotICAgICAgICBqaXQubG9hZFBhaXI2NFdpdGhOb25UZW1wb3JhbEFj
Y2Vzcyh4MSwgeDgsIHg5KTsKLSAgICAgICAgaml0LmxvYWRQYWlyNjRXaXRoTm9uVGVtcG9yYWxB
Y2Nlc3MoeDEsIFRydXN0ZWRJbW0zMigxNiksIHgxMCwgeDExKTsKLSAgICAgICAgaml0LmFkZDY0
KFRydXN0ZWRJbW0zMigzMiksIHgxKTsKLSAgICAgICAgaml0LmJyYW5jaFN1YjY0KE1hY3JvQXNz
ZW1ibGVyOjpBYm92ZSwgVHJ1c3RlZEltbTMyKDMyKSwgeDIpLmxpbmtUbyhjb3B5TG9vcCwgJmpp
dCk7Ci0KLSAgICAgICAgY2xlYW51cC5saW5rKCZqaXQpOwotICAgICAgICBqaXQuYWRkNjQoeDIs
IHgxKTsKLSAgICAgICAgaml0LmxvYWRQYWlyNjQoeDEsIHgxMiwgeDEzKTsKLSAgICAgICAgaml0
LmxvYWRQYWlyNjQoeDEsIFRydXN0ZWRJbW0zMigxNiksIHgxNCwgeDE1KTsKLSAgICAgICAgaml0
LnN0b3JlUGFpcjY0KHg4LCB4OSwgeDMpOwotICAgICAgICBqaXQuc3RvcmVQYWlyNjQoeDEwLCB4
MTEsIHgzLCBUcnVzdGVkSW1tMzIoMTYpKTsKLSAgICAgICAgaml0LmFkZFB0cih4MiwgeDMpOwot
ICAgICAgICBqaXQuc3RvcmVQYWlyNjQoeDEyLCB4MTMsIHgzLCBUcnVzdGVkSW1tMzIoMzIpKTsK
LSAgICAgICAgaml0LnN0b3JlUGFpcjY0KHgxNCwgeDE1LCB4MywgVHJ1c3RlZEltbTMyKDQ4KSk7
Ci0gICAgICAgIGppdC5yZXQoKTsKLQotICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6TGFiZWwgbG9j
YWwwID0gaml0LmxhYmVsKCk7Ci0gICAgICAgIGppdC5sb2FkNjQoeDEsIFBvc3RJbmRleCg4KSwg
eDYpOwotICAgICAgICBqaXQuc3RvcmU2NCh4NiwgeDMsIFBvc3RJbmRleCg4KSk7Ci0gICAgICAg
IHNtYWxsQ29weS5saW5rKCZqaXQpOwotICAgICAgICBqaXQuYnJhbmNoU3ViNjQoTWFjcm9Bc3Nl
bWJsZXI6OkFib3ZlT3JFcXVhbCwgVHJ1c3RlZEltbTMyKDgpLCB4MikubGlua1RvKGxvY2FsMCwg
JmppdCk7Ci0gICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIGxvY2FsMiA9IGppdC5icmFuY2hB
ZGQ2NChNYWNyb0Fzc2VtYmxlcjo6RXF1YWwsIFRydXN0ZWRJbW0zMig4KSwgeDIpOwotICAgICAg
ICBNYWNyb0Fzc2VtYmxlcjo6TGFiZWwgbG9jYWwxID0gaml0LmxhYmVsKCk7Ci0gICAgICAgIGpp
dC5sb2FkOCh4MSwgUG9zdEluZGV4KDEpLCB4Nik7Ci0gICAgICAgIGppdC5zdG9yZTgoeDYsIHgz
LCBQb3N0SW5kZXgoMSkpOwotICAgICAgICBqaXQuYnJhbmNoU3ViNjQoTWFjcm9Bc3NlbWJsZXI6
Ok5vdEVxdWFsLCBUcnVzdGVkSW1tMzIoMSksIHgyKS5saW5rVG8obG9jYWwxLCAmaml0KTsKLSAg
ICAgICAgbG9jYWwyLmxpbmsoJmppdCk7Ci0gICAgICAgIGppdC5yZXQoKTsKLQotICAgICAgICBh
dXRvIHN0dWJCYXNlQ29kZVB0ciA9IE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxMaW5rQnVmZmVyUHRy
VGFnPih0YWdDb2RlUHRyPExpbmtCdWZmZXJQdHJUYWc+KHN0dWJCYXNlKSk7Ci0gICAgICAgIExp
bmtCdWZmZXIgbGlua0J1ZmZlcihqaXQsIHN0dWJCYXNlQ29kZVB0ciwgc3R1YlNpemUpOwotICAg
ICAgICAvLyBXZSBkb24ndCB1c2UgRklOQUxJWkVfQ09ERSgpIGZvciB0d28gcmVhc29ucy4KLSAg
ICAgICAgLy8gVGhlIGZpcnN0IGlzIHRoYXQgd2UgZG9uJ3Qgd2FudCB0aGUgd3JpdGVhYmxlIGFk
ZHJlc3MsIGFzIGRpc2Fzc2VtYmxlZCBpbnN0cnVjdGlvbnMsCi0gICAgICAgIC8vIHRvIGFwcGVh
ciBpbiB0aGUgY29uc29sZSBvciBhbnl3aGVyZSBpbiBtZW1vcnksIHZpYSB0aGUgUHJpbnRTdHJl
YW0gYnVmZmVyLgotICAgICAgICAvLyBUaGUgc2Vjb25kIGlzIHdlIGNhbid0IGd1YXJhbnRlZSB0
aGF0IHRoZSBjb2RlIGlzIHJlYWRhYmxlIHdoZW4gdXNpbmcgdGhlCi0gICAgICAgIC8vIGFzeW5j
RGlzYXNzZW1ibHkgb3B0aW9uIGFzIG91ciBjYWxsZXIgd2lsbCBzZXQgb3VyIHBhZ2VzIGV4ZWN1
dGUgb25seS4KLSAgICAgICAgcmV0dXJuIGxpbmtCdWZmZXIuZmluYWxpemVDb2RlV2l0aG91dERp
c2Fzc2VtYmx5PEpJVFRodW5rUHRyVGFnPigpOwotICAgIH0KLSNlbHNlIC8vIG5vdCBDUFUoQVJN
NjQpICYmIFVTRShFWEVDVVRFX09OTFlfSklUX1dSSVRFX0ZVTkNUSU9OKQotICAgIHN0YXRpYyB2
b2lkIGdlbmVyaWNXcml0ZVRvSklUUmVnaW9uKG9mZl90IG9mZnNldCwgY29uc3Qgdm9pZCogZGF0
YSwgc2l6ZV90IGRhdGFTaXplKQotICAgIHsKLSAgICAgICAgbWVtY3B5KCh2b2lkKikoZ19qc2ND
b25maWcuc3RhcnRPZkZpeGVkV3JpdGFibGVNZW1vcnlQb29sICsgb2Zmc2V0KSwgZGF0YSwgZGF0
YVNpemUpOwotICAgIH0KKyAgICAgICAgLy8gT09QUzogdGFrZSBsb2NraG9sZGVyCisgICAgICAg
IHZvaWQgZGVhbGxvY2F0ZUlzbGFuZHMoc2l6ZV90IG51bUlzbGFuZHNUb0ZyZWUpCisgICAgICAg
IHsKKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKG51bUlzbGFuZHNUb0ZyZWUgPD0gbnVtQWxs
b2NhdGVkSXNsYW5kcyk7CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChudW1BbGxvY2F0ZWRJ
c2xhbmRzIDw9IG51bVJlc2VydmVkSXNsYW5kcyk7IC8vIE9PUFM6IGNoZWNrQ29uc2lzdGVuY3kK
KyAgICAgICAgICAgIG51bUFsbG9jYXRlZElzbGFuZHMgLT0gbnVtSXNsYW5kc1RvRnJlZTsKKyAg
ICAgICAgfQogCi0gICAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBqaXRX
cml0ZVRodW5rR2VuZXJhdG9yKHZvaWQqIGFkZHJlc3MsIHZvaWQqLCBzaXplX3QpCi0gICAgewot
ICAgICAgICBnX2pzY0NvbmZpZy5zdGFydE9mRml4ZWRXcml0YWJsZU1lbW9yeVBvb2wgPSByZWlu
dGVycHJldF9jYXN0PHVpbnRwdHJfdD4oYWRkcmVzcyk7Ci0gICAgICAgIHZvaWQqIGZ1bmN0aW9u
ID0gcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oJmdlbmVyaWNXcml0ZVRvSklUUmVnaW9uKTsKLSNp
ZiBDUFUoQVJNX1RIVU1CMikKLSAgICAgICAgLy8gSGFuZGxlIHRodW1iIG9mZnNldAotICAgICAg
ICB1aW50cHRyX3QgZnVuY3Rpb25Bc0ludCA9IHJlaW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90Pihm
dW5jdGlvbik7Ci0gICAgICAgIGZ1bmN0aW9uQXNJbnQgLT0gMTsKLSAgICAgICAgZnVuY3Rpb24g
PSByZWludGVycHJldF9jYXN0PHZvaWQqPihmdW5jdGlvbkFzSW50KTsKKyAgICAgICAgLy8gW3N0
YXJ0LCBlbmQpCisgICAgICAgIHVpbnRwdHJfdCBzdGFydDsKKyAgICAgICAgdWludHB0cl90IGVu
ZDsKKworICAgICAgICB1aW50cHRyX3QgYWxsb2NhdG9yU2l6ZSB7IDAgfTsKKyAgICAgICAgdWlu
dHB0cl90IG51bVJlc2VydmVkSXNsYW5kcyB7IDAgfTsKKyAgICAgICAgdWludHB0cl90IG51bUFs
bG9jYXRlZElzbGFuZHMgeyAwIH07IC8vIDw9IG51bVJlc2VydmVkSXNsYW5kcworICAgIH07CiAj
ZW5kaWYKLSAgICAgICAgYXV0byBjb2RlUHRyID0gTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPEpJVFRo
dW5rUHRyVGFnPih0YWdDRnVuY3Rpb25QdHI8SklUVGh1bmtQdHJUYWc+KGZ1bmN0aW9uKSk7Ci0g
ICAgICAgIHJldHVybiBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+OjpjcmVh
dGVTZWxmTWFuYWdlZENvZGVSZWYoY29kZVB0cik7Ci0gICAgfQotI2VuZGlmIC8vIENQVShBUk02
NCkgJiYgVVNFKEVYRUNVVEVfT05MWV9KSVRfV1JJVEVfRlVOQ1RJT04pCiAKLSNlbHNlIC8vIE9T
KERBUldJTikgJiYgSEFWRShSRU1BUF9KSVQpCi0gICAgdm9pZCBpbml0aWFsaXplU2VwYXJhdGVk
V1hIZWFwcyh2b2lkKiwgc2l6ZV90LCB2b2lkKiwgc2l6ZV90KQorICAgIHRlbXBsYXRlIDx0eXBl
bmFtZSBGdW5jdGlvbj4KKyAgICB2b2lkIGZvckVhY2hBbGxvY2F0b3IoRnVuY3Rpb24gZnVuY3Rp
b24pCiAgICAgeworICAgICAgICBmdW5jdGlvbihtX2FsbG9jYXRvcik7CiAgICAgfQotI2VuZGlm
CiAKLXByaXZhdGU6CisgICAgTG9jayBtX2xvY2s7CiAgICAgUGFnZVJlc2VydmF0aW9uIG1fcmVz
ZXJ2YXRpb247CisjaWYgQ1BVKEFSTTY0KQorI2Vsc2UKKyAgICBBbGxvY2F0b3IgbV9hbGxvY2F0
b3I7CisjZW5kaWYKIH07CiAKLUZpeGVkVk1Qb29sRXhlY3V0YWJsZUFsbG9jYXRvcjo6fkZpeGVk
Vk1Qb29sRXhlY3V0YWJsZUFsbG9jYXRvcigpCi17Ci0gICAgbV9yZXNlcnZhdGlvbi5kZWFsbG9j
YXRlKCk7Ci19Ci0KIC8vIEtlZXAgdGhpcyBwb2ludGVyIGluIGEgbXV0YWJsZSBnbG9iYWwgdmFy
aWFibGUgdG8gaGVscCBMZWFrcyBmaW5kIGl0LgogLy8gQnV0IHdlIGRvIG5vdCB1c2UgdGhpcyBw
b2ludGVyLgogc3RhdGljIEZpeGVkVk1Qb29sRXhlY3V0YWJsZUFsbG9jYXRvciogZ2xvYmFsRml4
ZWRWTVBvb2xFeGVjdXRhYmxlQWxsb2NhdG9yVG9Xb3JrQXJvdW5kTGVha3MgPSBudWxscHRyOwpA
QCAtNDIyLDIwICs1OTQsMjAgQEAgdm9pZCBFeGVjdXRhYmxlQWxsb2NhdG9yOjppbml0aWFsaXpl
VW5kZQogICAgIFJFTEVBU0VfQVNTRVJUKCFnX2pzY0NvbmZpZy5maXhlZFZNUG9vbEV4ZWN1dGFi
bGVBbGxvY2F0b3IpOwogICAgIGdfanNjQ29uZmlnLmZpeGVkVk1Qb29sRXhlY3V0YWJsZUFsbG9j
YXRvciA9IG5ldyBGaXhlZFZNUG9vbEV4ZWN1dGFibGVBbGxvY2F0b3IoKTsKICAgICBnbG9iYWxG
aXhlZFZNUG9vbEV4ZWN1dGFibGVBbGxvY2F0b3JUb1dvcmtBcm91bmRMZWFrcyA9IGdfanNjQ29u
ZmlnLmZpeGVkVk1Qb29sRXhlY3V0YWJsZUFsbG9jYXRvcjsKLSAgICBDb2RlUHJvZmlsaW5nOjpu
b3RpZnlBbGxvY2F0b3IoZ19qc2NDb25maWcuZml4ZWRWTVBvb2xFeGVjdXRhYmxlQWxsb2NhdG9y
KTsKKyAgICBnX2pzY0NvbmZpZy5maXhlZFZNUG9vbEV4ZWN1dGFibGVBbGxvY2F0b3ItPm5vdGlm
eUNvZGVQcm9maWxpbmcoKTsKIH0KIAogYm9vbCBFeGVjdXRhYmxlQWxsb2NhdG9yOjppc1ZhbGlk
KCkgY29uc3QKIHsKLSAgICBhdXRvKiBhbGxvY2F0b3IgPSBnX2pzY0NvbmZpZy5maXhlZFZNUG9v
bEV4ZWN1dGFibGVBbGxvY2F0b3I7CisgICAgRml4ZWRWTVBvb2xFeGVjdXRhYmxlQWxsb2NhdG9y
KiBhbGxvY2F0b3IgPSBnX2pzY0NvbmZpZy5maXhlZFZNUG9vbEV4ZWN1dGFibGVBbGxvY2F0b3I7
CiAgICAgaWYgKCFhbGxvY2F0b3IpCiAgICAgICAgIHJldHVybiBCYXNlOjppc1ZhbGlkKCk7Ci0g
ICAgcmV0dXJuICEhYWxsb2NhdG9yLT5ieXRlc1Jlc2VydmVkKCk7CisgICAgcmV0dXJuIGFsbG9j
YXRvci0+aXNWYWxpZCgpOwogfQogCiBib29sIEV4ZWN1dGFibGVBbGxvY2F0b3I6OnVuZGVyTWVt
b3J5UHJlc3N1cmUoKQogewotICAgIGF1dG8qIGFsbG9jYXRvciA9IGdfanNjQ29uZmlnLmZpeGVk
Vk1Qb29sRXhlY3V0YWJsZUFsbG9jYXRvcjsKKyAgICBGaXhlZFZNUG9vbEV4ZWN1dGFibGVBbGxv
Y2F0b3IqIGFsbG9jYXRvciA9IGdfanNjQ29uZmlnLmZpeGVkVk1Qb29sRXhlY3V0YWJsZUFsbG9j
YXRvcjsKICAgICBpZiAoIWFsbG9jYXRvcikKICAgICAgICAgcmV0dXJuIEJhc2U6OnVuZGVyTWVt
b3J5UHJlc3N1cmUoKTsKICAgICByZXR1cm4gYWxsb2NhdG9yLT5ieXRlc0FsbG9jYXRlZCgpID4g
YWxsb2NhdG9yLT5ieXRlc1Jlc2VydmVkKCkgLyAyOwpAQCAtNDQzLDcgKzYxNSw3IEBAIGJvb2wg
RXhlY3V0YWJsZUFsbG9jYXRvcjo6dW5kZXJNZW1vcnlQcmUKIAogZG91YmxlIEV4ZWN1dGFibGVB
bGxvY2F0b3I6Om1lbW9yeVByZXNzdXJlTXVsdGlwbGllcihzaXplX3QgYWRkZWRNZW1vcnlVc2Fn
ZSkKIHsKLSAgICBhdXRvKiBhbGxvY2F0b3IgPSBnX2pzY0NvbmZpZy5maXhlZFZNUG9vbEV4ZWN1
dGFibGVBbGxvY2F0b3I7CisgICAgRml4ZWRWTVBvb2xFeGVjdXRhYmxlQWxsb2NhdG9yKiBhbGxv
Y2F0b3IgPSBnX2pzY0NvbmZpZy5maXhlZFZNUG9vbEV4ZWN1dGFibGVBbGxvY2F0b3I7CiAgICAg
aWYgKCFhbGxvY2F0b3IpCiAgICAgICAgIHJldHVybiBCYXNlOjptZW1vcnlQcmVzc3VyZU11bHRp
cGxpZXIoYWRkZWRNZW1vcnlVc2FnZSk7CiAgICAgQVNTRVJUKGFsbG9jYXRvci0+Ynl0ZXNBbGxv
Y2F0ZWQoKSA8PSBhbGxvY2F0b3ItPmJ5dGVzUmVzZXJ2ZWQoKSk7CkBAIC00NjMsNyArNjM1LDcg
QEAgZG91YmxlIEV4ZWN1dGFibGVBbGxvY2F0b3I6Om1lbW9yeVByZXNzdQogCiBSZWZQdHI8RXhl
Y3V0YWJsZU1lbW9yeUhhbmRsZT4gRXhlY3V0YWJsZUFsbG9jYXRvcjo6YWxsb2NhdGUoc2l6ZV90
IHNpemVJbkJ5dGVzLCB2b2lkKiBvd25lclVJRCwgSklUQ29tcGlsYXRpb25FZmZvcnQgZWZmb3J0
KQogewotICAgIGF1dG8qIGFsbG9jYXRvciA9IGdfanNjQ29uZmlnLmZpeGVkVk1Qb29sRXhlY3V0
YWJsZUFsbG9jYXRvcjsKKyAgICBGaXhlZFZNUG9vbEV4ZWN1dGFibGVBbGxvY2F0b3IqIGFsbG9j
YXRvciA9IGdfanNjQ29uZmlnLmZpeGVkVk1Qb29sRXhlY3V0YWJsZUFsbG9jYXRvcjsKICAgICBp
ZiAoIWFsbG9jYXRvcikKICAgICAgICAgcmV0dXJuIEJhc2U6OmFsbG9jYXRlKHNpemVJbkJ5dGVz
LCBvd25lclVJRCwgZWZmb3J0KTsKICAgICBpZiAoT3B0aW9uczo6bG9nRXhlY3V0YWJsZUFsbG9j
YXRpb24oKSkgewpAQCAtNTEyLDcgKzY4NCw3IEBAIFJlZlB0cjxFeGVjdXRhYmxlTWVtb3J5SGFu
ZGxlPiBFeGVjdXRhYmwKIAogYm9vbCBFeGVjdXRhYmxlQWxsb2NhdG9yOjppc1ZhbGlkRXhlY3V0
YWJsZU1lbW9yeShjb25zdCBBYnN0cmFjdExvY2tlciYgbG9ja2VyLCB2b2lkKiBhZGRyZXNzKQog
ewotICAgIGF1dG8qIGFsbG9jYXRvciA9IGdfanNjQ29uZmlnLmZpeGVkVk1Qb29sRXhlY3V0YWJs
ZUFsbG9jYXRvcjsKKyAgICBGaXhlZFZNUG9vbEV4ZWN1dGFibGVBbGxvY2F0b3IqIGFsbG9jYXRv
ciA9IGdfanNjQ29uZmlnLmZpeGVkVk1Qb29sRXhlY3V0YWJsZUFsbG9jYXRvcjsKICAgICBpZiAo
IWFsbG9jYXRvcikKICAgICAgICAgcmV0dXJuIEJhc2U6OmlzVmFsaWRFeGVjdXRhYmxlTWVtb3J5
KGxvY2tlciwgYWRkcmVzcyk7CiAgICAgcmV0dXJuIGFsbG9jYXRvci0+aXNJbkFsbG9jYXRlZE1l
bW9yeShsb2NrZXIsIGFkZHJlc3MpOwpAQCAtNTIwLDcgKzY5Miw3IEBAIGJvb2wgRXhlY3V0YWJs
ZUFsbG9jYXRvcjo6aXNWYWxpZEV4ZWN1dGEKIAogTG9jayYgRXhlY3V0YWJsZUFsbG9jYXRvcjo6
Z2V0TG9jaygpIGNvbnN0CiB7Ci0gICAgYXV0byogYWxsb2NhdG9yID0gZ19qc2NDb25maWcuZml4
ZWRWTVBvb2xFeGVjdXRhYmxlQWxsb2NhdG9yOworICAgIEZpeGVkVk1Qb29sRXhlY3V0YWJsZUFs
bG9jYXRvciogYWxsb2NhdG9yID0gZ19qc2NDb25maWcuZml4ZWRWTVBvb2xFeGVjdXRhYmxlQWxs
b2NhdG9yOwogICAgIGlmICghYWxsb2NhdG9yKQogICAgICAgICByZXR1cm4gQmFzZTo6Z2V0TG9j
aygpOwogICAgIHJldHVybiBhbGxvY2F0b3ItPmdldExvY2soKTsKQEAgLTUyOCw3ICs3MDAsNyBA
QCBMb2NrJiBFeGVjdXRhYmxlQWxsb2NhdG9yOjpnZXRMb2NrKCkgY29uCiAKIHNpemVfdCBFeGVj
dXRhYmxlQWxsb2NhdG9yOjpjb21taXR0ZWRCeXRlQ291bnQoKQogewotICAgIGF1dG8qIGFsbG9j
YXRvciA9IGdfanNjQ29uZmlnLmZpeGVkVk1Qb29sRXhlY3V0YWJsZUFsbG9jYXRvcjsKKyAgICBG
aXhlZFZNUG9vbEV4ZWN1dGFibGVBbGxvY2F0b3IqIGFsbG9jYXRvciA9IGdfanNjQ29uZmlnLmZp
eGVkVk1Qb29sRXhlY3V0YWJsZUFsbG9jYXRvcjsKICAgICBpZiAoIWFsbG9jYXRvcikKICAgICAg
ICAgcmV0dXJuIEJhc2U6OmNvbW1pdHRlZEJ5dGVDb3VudCgpOwogICAgIHJldHVybiBhbGxvY2F0
b3ItPmJ5dGVzQ29tbWl0dGVkKCk7CkBAIC01MzcsNyArNzA5LDcgQEAgc2l6ZV90IEV4ZWN1dGFi
bGVBbGxvY2F0b3I6OmNvbW1pdHRlZEJ5dAogI2lmIEVOQUJMRShNRVRBX0FMTE9DQVRPUl9QUk9G
SUxFKQogdm9pZCBFeGVjdXRhYmxlQWxsb2NhdG9yOjpkdW1wUHJvZmlsZSgpCiB7Ci0gICAgYXV0
byogYWxsb2NhdG9yID0gZ19qc2NDb25maWcuZml4ZWRWTVBvb2xFeGVjdXRhYmxlQWxsb2NhdG9y
OworICAgIEZpeGVkVk1Qb29sRXhlY3V0YWJsZUFsbG9jYXRvciogYWxsb2NhdG9yID0gZ19qc2ND
b25maWcuZml4ZWRWTVBvb2xFeGVjdXRhYmxlQWxsb2NhdG9yOwogICAgIGlmICghYWxsb2NhdG9y
KQogICAgICAgICByZXR1cm47CiAgICAgYWxsb2NhdG9yLT5kdW1wUHJvZmlsZSgpOwpAQCAtNTQ2
LDcgKzcxOCw3IEBAIHZvaWQgRXhlY3V0YWJsZUFsbG9jYXRvcjo6ZHVtcFByb2ZpbGUoKQogCiB2
b2lkKiBzdGFydE9mRml4ZWRFeGVjdXRhYmxlTWVtb3J5UG9vbEltcGwoKQogewotICAgIGF1dG8q
IGFsbG9jYXRvciA9IGdfanNjQ29uZmlnLmZpeGVkVk1Qb29sRXhlY3V0YWJsZUFsbG9jYXRvcjsK
KyAgICBGaXhlZFZNUG9vbEV4ZWN1dGFibGVBbGxvY2F0b3IqIGFsbG9jYXRvciA9IGdfanNjQ29u
ZmlnLmZpeGVkVk1Qb29sRXhlY3V0YWJsZUFsbG9jYXRvcjsKICAgICBpZiAoIWFsbG9jYXRvcikK
ICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgcmV0dXJuIGFsbG9jYXRvci0+bWVtb3J5U3Rh
cnQoKTsKQEAgLTU1NCw3ICs3MjYsNyBAQCB2b2lkKiBzdGFydE9mRml4ZWRFeGVjdXRhYmxlTWVt
b3J5UG9vbEltCiAKIHZvaWQqIGVuZE9mRml4ZWRFeGVjdXRhYmxlTWVtb3J5UG9vbEltcGwoKQog
ewotICAgIGF1dG8qIGFsbG9jYXRvciA9IGdfanNjQ29uZmlnLmZpeGVkVk1Qb29sRXhlY3V0YWJs
ZUFsbG9jYXRvcjsKKyAgICBGaXhlZFZNUG9vbEV4ZWN1dGFibGVBbGxvY2F0b3IqIGFsbG9jYXRv
ciA9IGdfanNjQ29uZmlnLmZpeGVkVk1Qb29sRXhlY3V0YWJsZUFsbG9jYXRvcjsKICAgICBpZiAo
IWFsbG9jYXRvcikKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgcmV0dXJuIGFsbG9jYXRv
ci0+bWVtb3J5RW5kKCk7CkBAIC01NjIsNyArNzM0LDcgQEAgdm9pZCogZW5kT2ZGaXhlZEV4ZWN1
dGFibGVNZW1vcnlQb29sSW1wbAogCiBib29sIGlzSklUUEModm9pZCogcGMpCiB7Ci0gICAgYXV0
byogYWxsb2NhdG9yID0gZ19qc2NDb25maWcuZml4ZWRWTVBvb2xFeGVjdXRhYmxlQWxsb2NhdG9y
OworICAgIEZpeGVkVk1Qb29sRXhlY3V0YWJsZUFsbG9jYXRvciogYWxsb2NhdG9yID0gZ19qc2ND
b25maWcuZml4ZWRWTVBvb2xFeGVjdXRhYmxlQWxsb2NhdG9yOwogICAgIHJldHVybiBhbGxvY2F0
b3IgJiYgYWxsb2NhdG9yLT5pc0pJVFBDKHBjKTsKIH0KIAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>392529</attachid>
            <date>2020-03-04 19:31:58 -0800</date>
            <delta_ts>2020-03-05 12:44:54 -0800</delta_ts>
            <desc>WIP</desc>
            <filename>c-backup.diff</filename>
            <type>text/plain</type>
            <size>15544</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvRXhlY3V0YWJsZUFsbG9jYXRvci5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9FeGVjdXRhYmxlQWxsb2Nh
dG9yLmNwcAkocmV2aXNpb24gMjU3ODY2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9F
eGVjdXRhYmxlQWxsb2NhdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzAsNiArMzAsNyBAQAog
CiAjaW5jbHVkZSAiQ29kZVByb2ZpbGluZy5oIgogI2luY2x1ZGUgIkV4ZWN1dGFibGVBbGxvY2F0
aW9uRnV6ei5oIgorI2luY2x1ZGUgIkl0ZXJhdGlvblN0YXR1cy5oIgogI2luY2x1ZGUgIkpTQ0lu
bGluZXMuaCIKICNpbmNsdWRlIDx3dGYvRmlsZVN5c3RlbS5oPgogI2luY2x1ZGUgPHd0Zi9NZXRh
QWxsb2NhdG9yLmg+CkBAIC05Niw5ICs5NywxMiBAQCBzdGF0aWMgY29uc3RleHByIHNpemVfdCBm
aXhlZEV4ZWN1dGFibGVNCiAjZWxpZiBDUFUoQVJNKQogc3RhdGljIGNvbnN0ZXhwciBzaXplX3Qg
Zml4ZWRFeGVjdXRhYmxlTWVtb3J5UG9vbFNpemUgPSAxNiAqIDEwMjQgKiAxMDI0OwogI2VsaWYg
Q1BVKEFSTTY0KQotc3RhdGljIGNvbnN0ZXhwciBzaXplX3QgZml4ZWRFeGVjdXRhYmxlTWVtb3J5
UG9vbFNpemUgPSAxMjggKiAxMDI0ICogMTAyNDsKK3N0YXRpYyBjb25zdGV4cHIgc2l6ZV90IGZp
eGVkRXhlY3V0YWJsZU1lbW9yeVBvb2xTaXplID0gMSAqIDEwMjQgKiAxMDI0ICogMTAyNDsKK3N0
YXRpYyBjb25zdGV4cHIgc2l6ZV90IHJlZ2lvblNpemUgPSAxMjggKiAxMDI0ICogMTAyNDsKK3N0
YXRpYyBjb25zdGV4cHIgc2l6ZV90IG51bWJlck9mUmVnaW9ucyA9IGZpeGVkRXhlY3V0YWJsZU1l
bW9yeVBvb2xTaXplIC8gcmVnaW9uU2l6ZTsKK3N0YXRpYyBjb25zdGV4cHIgc2l6ZV90IGlzbGFu
ZFNpemVJbkJ5dGVzID0gMTY7CiAjZWxpZiBDUFUoWDg2XzY0KQotc3RhdGljIGNvbnN0ZXhwciBz
aXplX3QgZml4ZWRFeGVjdXRhYmxlTWVtb3J5UG9vbFNpemUgPSAxMDI0ICogMTAyNCAqIDEwMjQ7
CitzdGF0aWMgY29uc3RleHByIHNpemVfdCBmaXhlZEV4ZWN1dGFibGVNZW1vcnlQb29sU2l6ZSA9
IDEgKiAxMDI0ICogMTAyNCAqIDEwMjQ7CiAjZWxzZQogc3RhdGljIGNvbnN0ZXhwciBzaXplX3Qg
Zml4ZWRFeGVjdXRhYmxlTWVtb3J5UG9vbFNpemUgPSAzMiAqIDEwMjQgKiAxMDI0OwogI2VuZGlm
CkBAIC0zNjMsNTIgKzM2NywzNDMgQEAgc3RhdGljIEFMV0FZU19JTkxJTkUgSklUUmVzZXJ2YXRp
b24gaW5pdAogICAgIHJldHVybiByZXNlcnZhdGlvbjsKIH0KIAotY2xhc3MgRml4ZWRWTVBvb2xF
eGVjdXRhYmxlQWxsb2NhdG9yIGZpbmFsIDogcHVibGljIE1ldGFBbGxvY2F0b3IgeworY2xhc3Mg
Rml4ZWRWTVBvb2xFeGVjdXRhYmxlQWxsb2NhdG9yIGZpbmFsIHsKICAgICBXVEZfTUFLRV9GQVNU
X0FMTE9DQVRFRDsKIHB1YmxpYzoKICAgICBGaXhlZFZNUG9vbEV4ZWN1dGFibGVBbGxvY2F0b3Io
KQotICAgICAgICA6IE1ldGFBbGxvY2F0b3Ioaml0QWxsb2NhdGlvbkdyYW51bGUpIC8vIHJvdW5k
IHVwIGFsbCBhbGxvY2F0aW9ucyB0byAzMiBieXRlcwogICAgIHsKKyAgICAgICAgZm9yRWFjaEFs
bG9jYXRvcihbJl0gKEFsbG9jYXRvciYgYWxsb2NhdG9yKSB7CisgICAgICAgICAgICBhbGxvY2F0
b3IubV9maXhlZEFsbG9jYXRvciA9IHRoaXM7CisgICAgICAgIH0pOworCiAgICAgICAgIEpJVFJl
c2VydmF0aW9uIHJlc2VydmF0aW9uID0gaW5pdGlhbGl6ZUpJVFBhZ2VSZXNlcnZhdGlvbigpOwog
ICAgICAgICBtX3Jlc2VydmF0aW9uID0gV1RGTW92ZShyZXNlcnZhdGlvbi5wYWdlUmVzZXJ2YXRp
b24pOwogICAgICAgICBpZiAobV9yZXNlcnZhdGlvbikgewotICAgICAgICAgICAgYWRkRnJlc2hG
cmVlU3BhY2UocmVzZXJ2YXRpb24uYmFzZSwgcmVzZXJ2YXRpb24uc2l6ZSk7CisjaWYgQ1BVKEFS
TTY0KQorICAgICAgICAgICAgdWludHB0cl90IHN0YXJ0ID0gYml0d2lzZV9jYXN0PHVpbnRwdHJf
dD4obV9yZXNlcnZhdGlvbi5iYXNlKCkpOworICAgICAgICAgICAgdWludHB0cl90IHJlc2VydmF0
aW9uRW5kID0gc3RhcnQgKyBtX3Jlc2VydmF0aW9uLnNpemUoKTsKKyAgICAgICAgICAgIGZvciAo
c2l6ZV90IGkgPSAwOyBpIDwgbnVtYmVyT2ZSZWdpb25zOyArK2kpIHsKKyAgICAgICAgICAgICAg
ICBSRUxFQVNFX0FTU0VSVChzdGFydCA8IHJlc2VydmF0aW9uRW5kKTsKKyAgICAgICAgICAgICAg
ICBtX2FsbG9jYXRvcnNbaV0uc3RhcnQgPSBzdGFydDsKKyAgICAgICAgICAgICAgICBtX2FsbG9j
YXRvcnNbaV0uZW5kID0gc3RhcnQgKyByZWdpb25TaXplOworICAgICAgICAgICAgICAgIGlmICht
X2FsbG9jYXRvcnNbaV0uZW5kID4gcmVzZXJ2YXRpb25FbmQpIHsKKyAgICAgICAgICAgICAgICAg
ICAgLy8gV2UgbWF5IGhhdmUgdGFrZW4gYSBwYWdlIGZvciB0aGUgZXhlY3V0YWJsZSBvbmx5IGNv
cHkgdGh1bmsuCisgICAgICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKGkgPT0gbnVtYmVy
T2ZSZWdpb25zIC0gMSk7CisgICAgICAgICAgICAgICAgICAgIG1fYWxsb2NhdG9yc1tpXS5lbmQg
PSByZXNlcnZhdGlvbkVuZDsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBz
dGFydCArPSByZWdpb25TaXplOworICAgICAgICAgICAgfQorI2Vsc2UKKyAgICAgICAgICAgIG1f
YWxsb2NhdG9yLmFkZEZyZXNoRnJlZVNwYWNlKHJlc2VydmF0aW9uLmJhc2UsIHJlc2VydmF0aW9u
LnNpemUpOworI2VuZGlmCisKICAgICAgICAgICAgIEFTU0VSVChieXRlc1Jlc2VydmVkKCkgPT0g
cmVzZXJ2YXRpb24uc2l6ZSk7IC8vIFNpbmNlIG91ciBleGVjdXRhYmxlIG1lbW9yeSBpcyBmaXhl
ZC1zaXplZCwgYnl0ZXNSZXNlcnZlZCBpcyBuZXZlciBjaGFuZ2VkIGFmdGVyIGluaXRpYWxpemF0
aW9uLgogICAgICAgICB9CiAgICAgfQogCi0gICAgdmlydHVhbCB+Rml4ZWRWTVBvb2xFeGVjdXRh
YmxlQWxsb2NhdG9yKCk7CisgICAgfkZpeGVkVk1Qb29sRXhlY3V0YWJsZUFsbG9jYXRvcigpCisg
ICAgeworICAgICAgICBtX3Jlc2VydmF0aW9uLmRlYWxsb2NhdGUoKTsKKyAgICB9CiAKICAgICB2
b2lkKiBtZW1vcnlTdGFydCgpIHsgcmV0dXJuIHVudGFnQ29kZVB0cjxFeGVjdXRhYmxlTWVtb3J5
UHRyVGFnPihnX2pzY0NvbmZpZy5zdGFydEV4ZWN1dGFibGVNZW1vcnkpOyB9CiAgICAgdm9pZCog
bWVtb3J5RW5kKCkgeyByZXR1cm4gdW50YWdDb2RlUHRyPEV4ZWN1dGFibGVNZW1vcnlQdHJUYWc+
KGdfanNjQ29uZmlnLmVuZEV4ZWN1dGFibGVNZW1vcnkpOyB9CiAgICAgYm9vbCBpc0pJVFBDKHZv
aWQqIHBjKSB7IHJldHVybiBtZW1vcnlTdGFydCgpIDw9IHBjICYmIHBjIDwgbWVtb3J5RW5kKCk7
IH0KKyAgICBib29sIGlzVmFsaWQoKSB7IHJldHVybiAhIW1fcmVzZXJ2YXRpb247IH0KIAotcHJv
dGVjdGVkOgotICAgIEZyZWVTcGFjZVB0ciBhbGxvY2F0ZU5ld1NwYWNlKHNpemVfdCYpIG92ZXJy
aWRlCisgICAgUmVmUHRyPEV4ZWN1dGFibGVNZW1vcnlIYW5kbGU+IGFsbG9jYXRlKHNpemVfdCBz
aXplSW5CeXRlcywgdm9pZCogb3duZXJVSUQsIHNpemVfdCBudW1Jc2xhbmRzKQogICAgIHsKLSAg
ICAgICAgLy8gV2UncmUgb3BlcmF0aW5nIGluIGEgZml4ZWQgcG9vbCwgc28gbmV3IGFsbG9jYXRp
b24gaXMgYWx3YXlzIHByb2hpYml0ZWQuCi0gICAgICAgIHJldHVybiBudWxscHRyOworI2lmIENQ
VShBUk02NCkKKyAgICAgICAgUmVmUHRyPEV4ZWN1dGFibGVNZW1vcnlIYW5kbGU+IHJlc3VsdDsK
KyAgICAgICAgZm9yRWFjaEFsbG9jYXRvcihbJl0gKFJlZ2lvbkFsbG9jYXRvciYgYWxsb2NhdG9y
KSB7CisgICAgICAgICAgICBpZiAoIWFsbG9jYXRvci50cnlBbGxvY2F0ZUlzbGFuZHMobnVtSXNs
YW5kcykpCisgICAgICAgICAgICAgICAgcmV0dXJuIEl0ZXJhdGlvblN0YXR1czo6Q29udGludWU7
CisgICAgICAgICAgICByZXN1bHQgPSBhbGxvY2F0b3IuYWxsb2NhdGUoc2l6ZUluQnl0ZXMsIG93
bmVyVUlEKTsKKyAgICAgICAgICAgIGlmIChyZXN1bHQpCisgICAgICAgICAgICAgICAgcmV0dXJu
IEl0ZXJhdGlvblN0YXR1czo6RG9uZTsKKworICAgICAgICAgICAgYWxsb2NhdG9yLmRlYWxsb2Nh
dGVJc2xhbmRzKG51bUlzbGFuZHMpOworICAgICAgICAgICAgcmV0dXJuIEl0ZXJhdGlvblN0YXR1
czo6Q29udGludWU7CisgICAgICAgIH0pOworI2Vsc2UKKyAgICAgICAgcmV0dXJuIG1fYWxsb2Nh
dG9yLmFsbG9jYXRlKHNpemVJbkJ5dGVzLCBvd25lclVJRCk7CisjZW5kaWYKICAgICB9CiAKLSAg
ICB2b2lkIG5vdGlmeU5lZWRQYWdlKHZvaWQqIHBhZ2UsIHNpemVfdCBjb3VudCkgb3ZlcnJpZGUK
KyAgICBMb2NrJiBnZXRMb2NrKCkgeyByZXR1cm4gbV9sb2NrOyB9CisKKyAgICAvLyBOb24gYXRv
bWljCisgICAgc2l6ZV90IGJ5dGVzQWxsb2NhdGVkKCkgCisgICAgeworICAgICAgICBzaXplX3Qg
cmVzdWx0ID0gMDsKKyAgICAgICAgZm9yRWFjaEFsbG9jYXRvcihbJl0gKEFsbG9jYXRvciYgYWxs
b2NhdG9yKSB7CisgICAgICAgICAgICByZXN1bHQgKz0gYWxsb2NhdG9yLmJ5dGVzQWxsb2NhdGVk
KCk7CisgICAgICAgIH0pOworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKyAgICBzaXpl
X3QgYnl0ZXNSZXNlcnZlZCgpIAogICAgIHsKLSAgICAgICAgbV9yZXNlcnZhdGlvbi5jb21taXQo
cGFnZSwgcGFnZVNpemUoKSAqIGNvdW50KTsKKyAgICAgICAgc2l6ZV90IHJlc3VsdCA9IDA7Cisg
ICAgICAgIGZvckVhY2hBbGxvY2F0b3IoWyZdIChBbGxvY2F0b3ImIGFsbG9jYXRvcikgeworICAg
ICAgICAgICAgcmVzdWx0ICs9IGFsbG9jYXRvci5ieXRlc1Jlc2VydmVkKCk7CisgICAgICAgIH0p
OworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKyAgICBzaXplX3QgYnl0ZXNDb21taXR0
ZWQoKQorICAgIHsKKyAgICAgICAgc2l6ZV90IHJlc3VsdCA9IDA7CisgICAgICAgIGZvckVhY2hB
bGxvY2F0b3IoWyZdIChBbGxvY2F0b3ImIGFsbG9jYXRvcikgeworICAgICAgICAgICAgcmVzdWx0
ICs9IGFsbG9jYXRvci5ieXRlc0NvbW1pdHRlZCgpOworICAgICAgICB9KTsKKyAgICAgICAgcmV0
dXJuIHJlc3VsdDsKICAgICB9CiAKLSAgICB2b2lkIG5vdGlmeVBhZ2VJc0ZyZWUodm9pZCogcGFn
ZSwgc2l6ZV90IGNvdW50KSBvdmVycmlkZQorICAgIGJvb2wgaXNJbkFsbG9jYXRlZE1lbW9yeShj
b25zdCBBYnN0cmFjdExvY2tlciYgbG9ja2VyLCB2b2lkKiBhZGRyZXNzKQogICAgIHsKLSAgICAg
ICAgbV9yZXNlcnZhdGlvbi5kZWNvbW1pdChwYWdlLCBwYWdlU2l6ZSgpICogY291bnQpOworICAg
ICAgICBib29sIHJlc3VsdCA9IGZhbHNlOworICAgICAgICBmb3JFYWNoQWxsb2NhdG9yKFsmXSAo
QWxsb2NhdG9yJiBhbGxvY2F0b3IpIHsKKyAgICAgICAgICAgIGlmIChhbGxvY2F0b3IuaXNJbkFs
bG9jYXRlZE1lbW9yeShsb2NrZXIsIGFkZHJlc3MpKSB7CisgICAgICAgICAgICAgICAgcmVzdWx0
ID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICByZXR1cm4gSXRlcmF0aW9uU3RhdHVzOjpEb25lOwor
ICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIEl0ZXJhdGlvblN0YXR1czo6Q29udGlu
dWU7CisgICAgICAgIH0pOworCisgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgfQogCisjaWYg
RU5BQkxFKE1FVEFfQUxMT0NBVE9SX1BST0ZJTEUpCisgICAgdm9pZCBkdW1wUHJvZmlsZSgpCisg
ICAgeworICAgICAgICBmb3JFYWNoQWxsb2NhdG9yKFsmXSAoQWxsb2NhdG9yJiBhbGxvY2F0b3Ip
IHsKKyAgICAgICAgICAgIGFsbG9jYXRvci5kdW1wUHJvZmlsZSgpOworICAgICAgICB9KTsKKyAg
ICB9CisjZW5kaWYKKworICAgIHZvaWQgbm90aWZ5Q29kZVByb2ZpbGluZygpCisgICAgeworICAg
ICAgICBmb3JFYWNoQWxsb2NhdG9yKFsmXSAoQWxsb2NhdG9yJiBhbGxvY2F0b3IpIHsKKyAgICAg
ICAgICAgIENvZGVQcm9maWxpbmc6Om5vdGlmeUFsbG9jYXRvcigmYWxsb2NhdG9yKTsKKyAgICAg
ICAgfSk7CisgICAgfQorCisgICAgTWV0YUFsbG9jYXRvcjo6U3RhdGlzdGljcyBjdXJyZW50U3Rh
dGlzdGljcygpCisgICAgeworICAgICAgICAvLyBPT1BTOiBtYWtlIGF0b21pYyBieSBob2xkaW5n
IGxvY2suLi4KKyAgICAgICAgTWV0YUFsbG9jYXRvcjo6U3RhdGlzdGljcyByZXN1bHQgeyAwLCAw
LCAwIH07CisgICAgICAgIGZvckVhY2hBbGxvY2F0b3IoWyZdIChBbGxvY2F0b3ImIGFsbG9jYXRv
cikgeworICAgICAgICAgICAgYXV0byBhbGxvY2F0b3JTdGF0cyA9IGFsbG9jYXRvci5jdXJyZW50
U3RhdGlzdGljcygpOworICAgICAgICAgICAgcmVzdWx0LmJ5dGVzQWxsb2NhdGVkICs9IGFsbG9j
YXRvclN0YXRzLmJ5dGVzQWxsb2NhdGVkOworICAgICAgICAgICAgcmVzdWx0LmJ5dGVzUmVzZXJ2
ZWQgKz0gYWxsb2NhdG9yU3RhdHMuYnl0ZXNSZXNlcnZlZDsKKyAgICAgICAgICAgIHJlc3VsdC5i
eXRlc0NvbW1pdHRlZCArPSBhbGxvY2F0b3JTdGF0cy5ieXRlc0NvbW1pdHRlZDsKKyAgICAgICAg
fSk7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorCisjaWYgQ1BVKEFSTTY0KQorICAg
IFJlZ2lvbkFsbG9jYXRvciogZmluZFJlZ2lvbih2b2lkKiBwdHIpCisgICAgeworICAgICAgICBS
ZWdpb25BbGxvY2F0b3IqIHJlc3VsdCA9IG51bGxwdHI7CisgICAgICAgIHVpbnRwdHJfdCBwdHJO
dW1iZXIgPSBiaXR3aXNlX2Nhc3Q8dWludHB0cl90PihwdHIpOworICAgICAgICBmb3JFYWNoQWxs
b2NhdG9yKFsmXSAoUmVnaW9uQWxsb2NhdG9yJiBhbGxvY2F0b3IpIHsKKyAgICAgICAgICAgIGlm
IChhbGxvY2F0b3Iuc3RhcnQgPD0gcHRyTnVtYmVyICYmIHB0ck51bWJlciA8IGFsbG9jYXRvci5l
bmQpIHsKKyAgICAgICAgICAgICAgICByZXN1bHQgPSAmYWxsb2NhdG9yOworICAgICAgICAgICAg
ICAgIHJldHVybiBJdGVyYXRpb25TdGF0dXM6OkRvbmU7CisgICAgICAgICAgICB9CisgICAgICAg
ICAgICByZXR1cm4gSXRlcmF0aW9uU3RhdHVzOjpDb250aW51ZTsKKyAgICAgICAgfSk7CisgICAg
ICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorCisgICAgdm9pZCogaXNsYW5kRm9ySnVtcExvY2F0
aW9uKHZvaWQqIGp1bXBMb2NhdGlvbikKKyAgICB7CisgICAgICAgIFJlZ2lvbkFsbG9jYXRvciog
YWxsb2NhdG9yID0gZmluZFJlZ2lvbihqdW1wTG9jYXRpb24pOworICAgICAgICBSRUxFQVNFX0FT
U0VSVChhbGxvY2F0b3IpOworICAgICAgICByZXR1cm4gYWxsb2NhdG9yLT4KKyAgICB9CisKKyAg
ICB2b2lkIHJlcGF0Y2hKdW1wVGhyb3VnaElzbGFuZCh2b2lkKiBqdW1wTG9jYXRpb24sIHZvaWQq
IGRlc3RpbmF0aW9uKQorICAgIHsKKworICAgIH0KKworI2VuZGlmCisKIHByaXZhdGU6CisgICAg
Y2xhc3MgQWxsb2NhdG9yIDogcHVibGljIE1ldGFBbGxvY2F0b3IgeworICAgIHB1YmxpYzoKKyAg
ICAgICAgQWxsb2NhdG9yKCkKKyAgICAgICAgICAgIDogTWV0YUFsbG9jYXRvcihqaXRBbGxvY2F0
aW9uR3JhbnVsZSwgcGFnZVNpemUoKSkgLy8gcm91bmQgdXAgYWxsIGFsbG9jYXRpb25zIHRvIDMy
IGJ5dGVzCisgICAgICAgIHsKKyAgICAgICAgfQorCisgICAgICAgIEZyZWVTcGFjZVB0ciBhbGxv
Y2F0ZU5ld1NwYWNlKHNpemVfdCYpIG92ZXJyaWRlCisgICAgICAgIHsKKyAgICAgICAgICAgIC8v
IFdlJ3JlIG9wZXJhdGluZyBpbiBhIGZpeGVkIHBvb2wsIHNvIG5ldyBhbGxvY2F0aW9uIGlzIGFs
d2F5cyBwcm9oaWJpdGVkLgorICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgIH0K
KworICAgICAgICB2b2lkIG5vdGlmeU5lZWRQYWdlKHZvaWQqIHBhZ2UsIHNpemVfdCBjb3VudCkg
b3ZlcnJpZGUKKyAgICAgICAgeworICAgICAgICAgICAgbV9maXhlZEFsbG9jYXRvci0+bV9yZXNl
cnZhdGlvbi5jb21taXQocGFnZSwgcGFnZVNpemUoKSAqIGNvdW50KTsKKyAgICAgICAgfQorCisg
ICAgICAgIHZvaWQgbm90aWZ5UGFnZUlzRnJlZSh2b2lkKiBwYWdlLCBzaXplX3QgY291bnQpIG92
ZXJyaWRlCisgICAgICAgIHsKKyAgICAgICAgICAgIG1fZml4ZWRBbGxvY2F0b3ItPm1fcmVzZXJ2
YXRpb24uZGVjb21taXQocGFnZSwgcGFnZVNpemUoKSAqIGNvdW50KTsKKyAgICAgICAgfQorCisg
ICAgICAgIEZpeGVkVk1Qb29sRXhlY3V0YWJsZUFsbG9jYXRvciogbV9maXhlZEFsbG9jYXRvcjsK
KyAgICB9OworCisjaWYgQ1BVKEFSTTY0KSAvLyBPT1BTOiBjYW4ndCBkbyB0aGlzIGZvciBhcm02
NF8zMgorICAgIGNsYXNzIFJlZ2lvbkFsbG9jYXRvciA6IHB1YmxpYyBBbGxvY2F0b3IgeworICAg
IHB1YmxpYzoKKyAgICAgICAgLy8gIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LQorICAgICAgICAvLyAgfCBhbGxvY2F0b3IgLS0+ICAgICA8LS0gaXNsYW5kICAgICAgfAorICAg
ICAgICAvLyAgfCAgICAgICAgICAgICBeICAgICBeICAgICAgICAgICAgICAgfAorICAgICAgICAv
LyAgfCAgICAgICAgICAgICB8ICAgICB8ICAgICAgICAgICAgICAgfAorICAgICAgICAvLyAgfCBh
bGxvY2F0b3JTaXplICAgICByZXNlcnZlZElzbGFuZHMgfAorICAgICAgICAvLyAgLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAgICAvLyAgYWxsb2NhdG9yRW5kIDw9
IGlzbGFuZCBiZWdpbgorCisgICAgICAgIHVpbnRwdHJfdCBpc2xhbmRCZWdpbigpCisgICAgICAg
IHsKKyAgICAgICAgICAgIC8vIFtpc2xhbmRCZWdpbiwgZW5kKQorICAgICAgICAgICAgcmV0dXJu
IGVuZCAtIChudW1SZXNlcnZlZElzbGFuZHMgKiBpc2xhbmRTaXplSW5CeXRlcyk7IAorICAgICAg
ICB9CisKKyAgICAgICAgdWludHB0cl90IGFsbG9jYXRvckVuZCgpCisgICAgICAgIHsKKyAgICAg
ICAgICAgIC8vIFtzdGFydCwgYWxsb2NhdG9yRW5kKQorICAgICAgICAgICAgcmV0dXJuIHN0YXJ0
ICsgYWxsb2NhdG9yU2l6ZTsKKyAgICAgICAgfQorCisgICAgICAgIC8vIE9PUFM6IHBhc3MgTG9j
a0hvbGRlciB0byBtYWtlIGl0IG9idmlvdXMgbG9jayBpcyBoZWxkLgorICAgICAgICBGcmVlU3Bh
Y2VQdHIgYWxsb2NhdGVOZXdTcGFjZShzaXplX3QmIG51bVBhZ2VzKSBvdmVycmlkZQorICAgICAg
ICB7CisgICAgICAgICAgICBzaXplX3QgcmVxdWVzdGVkQnl0ZXMgPSBudW1QYWdlcyAqIHBhZ2VT
aXplKCk7CisgICAgICAgICAgICB1aW50cHRyX3QgbmV3QWxsb2NhdG9yRW5kID0gc3RhcnQgKyBh
bGxvY2F0b3JTaXplICsgcmVxdWVzdGVkQnl0ZXM7IC8vIFtzdGFydCwgbmV3QWxsb2NhdG9yRW5k
KQorICAgICAgICAgICAgaWYgKG5ld0FsbG9jYXRvckVuZCA+IGlzbGFuZEJlZ2luKCkpCisgICAg
ICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgICAgICB1aW50cHRyX3QgcmVzdWx0
ID0gc3RhcnQgKyBhbGxvY2F0b3JTaXplOworICAgICAgICAgICAgYWxsb2NhdG9yU2l6ZSArPSBy
ZXF1ZXN0ZWRCeXRlczsKKyAgICAgICAgICAgIHJldHVybiBGcmVlU3BhY2VQdHIgeyBiaXR3aXNl
X2Nhc3Q8dm9pZCo+KHJlc3VsdCkgfTsKKyAgICAgICAgfQorCisgICAgICAgIHNpemVfdCBpc2xh
bmRzUGVyUGFnZSgpCisgICAgICAgIHsKKyAgICAgICAgICAgIHNpemVfdCBpc2xhbmRzUGVyUGFn
ZSA9IHBhZ2VTaXplKCkgLyBpc2xhbmRTaXplSW5CeXRlczsKKyAgICAgICAgICAgIEFTU0VSVChp
c2xhbmRzUGVyUGFnZSAqIGlzbGFuZFNpemVJbkJ5dGVzID09IHBhZ2VTaXplKCkpOyAvLyB3ZSBy
ZWx5IG9uIHBlcmZlY3QgZGl2aXNpb24gZm9yIGZpbmRpbmcgd2hpY2ggYml0IGEgcG9pbnRlciBp
cy4KKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKGlzUG93ZXJPZlR3byhpc2xhbmRzUGVyUGFn
ZSkpOworICAgICAgICAgICAgcmV0dXJuIGlzbGFuZHNQZXJQYWdlOworICAgICAgICB9CisKKyAg
ICAgICAgLy8gT09QUzogcGFzcyBMb2NrSG9sZGVyIHRvIG1ha2UgaXQgb2J2aW91cyBsb2NrIGlz
IGhlbGQuCisgICAgICAgIGJvb2wgdHJ5QWxsb2NhdGVJc2xhbmRzKHNpemVfdCBudW1Jc2xhbmRz
VG9BbGxvY2F0ZSkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKCFudW1Jc2xhbmRzVG9BbGxv
Y2F0ZSkKKyAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgICAgICAgICAgdWludHB0
cl90IG51bUZyZWVJc2xhbmRzID0gbnVtUmVzZXJ2ZWRJc2xhbmRzIC0gbnVtQWxsb2NhdGVkSXNs
YW5kczsgCisgICAgICAgICAgICBpZiAobnVtRnJlZUlzbGFuZHMgPj0gbnVtSXNsYW5kc1RvQWxs
b2NhdGUpIHsKKyAgICAgICAgICAgICAgICBudW1BbGxvY2F0ZWRJc2xhbmRzICs9IG51bUlzbGFu
ZHNUb0FsbG9jYXRlOworICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKG51bUFsbG9jYXRl
ZElzbGFuZHMgPD0gbnVtUmVzZXJ2ZWRJc2xhbmRzKTsgLy8gT09QUzogY2hlY2tDb25zaXN0ZW5j
eT8KKyAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgIH0gCisKKyAgICAg
ICAgICAgIHNpemVfdCBpc2xhbmRzUGVyUGFnZSA9IHRoaXMtPmlzbGFuZHNQZXJQYWdlKCk7Cisg
ICAgICAgICAgICAKKyAgICAgICAgICAgIHVpbnRwdHJfdCBpc2xhbmRzVG9SZXNlcnZlID0gbnVt
SXNsYW5kc1RvQWxsb2NhdGUgLSBudW1GcmVlSXNsYW5kczsKKworICAgICAgICAgICAgaXNsYW5k
c1RvUmVzZXJ2ZSA9IHJvdW5kVXBUb011bHRpcGxlT2YoaXNsYW5kc1BlclBhZ2UsIGlzbGFuZHNU
b1Jlc2VydmUpOworICAgICAgICAgICAgdWludHB0cl90IG5ld0lzbGFuZEJlZ2luID0gZW5kIC0g
KChudW1SZXNlcnZlZElzbGFuZHMgKyBpc2xhbmRzVG9SZXNlcnZlKSAqIGlzbGFuZFNpemVJbkJ5
dGVzKTsKKyAgICAgICAgICAgIGlmIChuZXdJc2xhbmRCZWdpbiA8IGFsbG9jYXRvckVuZCgpKQor
ICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgICAgICAgICAgbnVtQWxsb2NhdGVk
SXNsYW5kcyArPSBudW1Jc2xhbmRzVG9BbGxvY2F0ZTsKKyAgICAgICAgICAgIG51bVJlc2VydmVk
SXNsYW5kcyArPSBpc2xhbmRzVG9SZXNlcnZlOworICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQo
bnVtQWxsb2NhdGVkSXNsYW5kcyA8PSBudW1SZXNlcnZlZElzbGFuZHMpOworICAgICAgICAgICAg
cmV0dXJuIHRydWU7CisgICAgICAgIH0KKworICAgICAgICAvLyBPT1BTOiB0YWtlIGxvY2tob2xk
ZXIKKyAgICAgICAgdm9pZCBkZWFsbG9jYXRlSXNsYW5kcyhzaXplX3QgbnVtSXNsYW5kc1RvRnJl
ZSkKKyAgICAgICAgeworICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQobnVtSXNsYW5kc1RvRnJl
ZSA8PSBudW1BbGxvY2F0ZWRJc2xhbmRzKTsKKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKG51
bUFsbG9jYXRlZElzbGFuZHMgPD0gbnVtUmVzZXJ2ZWRJc2xhbmRzKTsgLy8gT09QUzogY2hlY2tD
b25zaXN0ZW5jeQorICAgICAgICAgICAgbnVtQWxsb2NhdGVkSXNsYW5kcyAtPSBudW1Jc2xhbmRz
VG9GcmVlOworICAgICAgICB9CisKKyAgICAgICAgLy8gT09QUzogbG9ja2hvbGRlci4KKyAgICAg
ICAgdm9pZCogZ2V0QWxsb2NhdGVkSXNsYW5kKCkKKyAgICAgICAgeworICAgICAgICAgICAgYXV0
byBmaW5kUmVzdWx0ID0gWyZdICgpIC0+IHZvaWQqIHsKKyAgICAgICAgICAgICAgICBzaXplX3Qg
cmVzdWx0Qml0ID0gaXNsYW5kQml0cy5maW5kQ2xlYXJCaXQoMCk7CisgICAgICAgICAgICAgICAg
aWYgKHJlc3VsdEJpdCA9PSBpc2xhbmRCaXRzLnNpemUoKSkKKyAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIG51bGxwdHI7CisgICAgICAgICAgICAgICAgaXNsYW5kQml0c1tyZXN1bHRCaXRdID0g
dHJ1ZTsKKyAgICAgICAgICAgICAgICB1aW50cHRyX3QgcmVzdWx0ID0gZW5kIC0gKChyZXN1bHRC
aXQgLSAxKSAqIGlzbGFuZFNpemVJbkJ5dGVzKTsgCisgICAgICAgICAgICAgICAgcmV0dXJuIGJp
dHdpc2VfY2FzdDx2b2lkKj4ocmVzdWx0KTsKKyAgICAgICAgICAgIH07CisKKyAgICAgICAgICAg
IGlmICh2b2lkKiByZXN1bHQgPSBmaW5kUmVzdWx0KCkpCisgICAgICAgICAgICAgICAgcmV0dXJu
IHJlc3VsdDsKKworICAgICAgICAgICAgc2l6ZV90IG9sZFNpemUgPSBpc2xhbmRCaXRzLnNpemUo
KTsKKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKG9sZFNpemUgPCBudW1SZXNlcnZlZElzbGFu
ZHMpOworICAgICAgICAgICAgaXNsYW5kQml0cy5lbnN1cmVTaXplKG51bVJlc2VydmVkSXNsYW5k
cyk7CisKKyAgICAgICAgICAgIHVpbnRwdHJfdCBpc2xhbmRCZWdpbiA9IGVuZCAtIChudW1SZXNl
cnZlZElzbGFuZHMgKiBpc2xhbmRTaXplSW5CeXRlcyk7IC8vIFtpc2xhbmRCZWdpbiwgZW5kKQor
ICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQocm91bmRVcFRvTXVsdGlwbGVPZihpc2xhbmRzUGVy
UGFnZSgpLCBudW1SZXNlcnZlZElzbGFuZHMgLSBvbGRTaXplKSA9PSAobnVtUmVzZXJ2ZWRJc2xh
bmRzIC0gb2xkU2l6ZSkpOworICAgICAgICAgICAgc2l6ZV90IG51bVBhZ2VzVG9Db21taXQgPSAo
bnVtUmVzZXJ2ZWRJc2xhbmRzIC0gb2xkU2l6ZSkgLyBpc2xhbmRzUGVyUGFnZSgpOworICAgICAg
ICAgICAgLy8gT09QUzogTWF5YmUgZG9uJ3QgYWxsb2NhdGUgYWxsIHBhZ2VzPyBCdXQganVzdCBh
bGxvY2F0ZSBhIHBhZ2UgYXQgYSB0aW1lPworICAgICAgICAgICAgbV9maXhlZEFsbG9jYXRvci0+
bV9yZXNlcnZhdGlvbi5jb21taXQoYml0d2lzZV9jYXN0PHZvaWQqPihpc2xhbmRCZWdpbiksIHBh
Z2VTaXplKCkgKiBudW1QYWdlc1RvQ29tbWl0KTsKKyAgICAgICAgICAgIHZvaWQqIHJlc3VsdCA9
IGZpbmRSZXN1bHQoKTsKKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKHJlc3VsdCk7CisgICAg
ICAgICAgICByZXR1cm4gcmVzdWx0OworICAgICAgICB9CisKKyAgICAgICAgLy8gW3N0YXJ0LCBl
bmQpCisgICAgICAgIHVpbnRwdHJfdCBzdGFydDsKKyAgICAgICAgdWludHB0cl90IGVuZDsKKwor
ICAgICAgICBzaXplX3QgYWxsb2NhdG9yU2l6ZSB7IDAgfTsKKyAgICAgICAgc2l6ZV90IG51bVJl
c2VydmVkSXNsYW5kcyB7IDAgfTsKKyAgICAgICAgc2l6ZV90IG51bUFsbG9jYXRlZElzbGFuZHMg
eyAwIH07IC8vIDw9IG51bVJlc2VydmVkSXNsYW5kcworICAgICAgICBGYXN0Qml0VmVjdG9yIGlz
bGFuZEJpdHM7CisgICAgfTsKKyNlbmRpZgorCisgICAgdGVtcGxhdGUgPHR5cGVuYW1lIEZ1bmN0
aW9uPgorICAgIHZvaWQgZm9yRWFjaEFsbG9jYXRvcihGdW5jdGlvbiBmdW5jdGlvbikKKyAgICB7
CisjaWYgQ1BVKEFSTTY0KQorICAgICAgICBmb3IgKFJlZ2lvbkFsbG9jYXRvciYgYWxsb2NhdG9y
IDogbV9hbGxvY2F0b3JzKSB7CisgICAgICAgICAgICBpZiBjb25zdGV4cHIgKHN0ZDo6aXNfc2Ft
ZTxJdGVyYXRpb25TdGF0dXMsIHN0ZDo6cmVzdWx0X29mX3Q8RnVuY3Rpb24+Pjo6dmFsdWUpIHsK
KyAgICAgICAgICAgICAgICBpZiAoZnVuY3Rpb24oYWxsb2NhdG9yKSA9PSBJdGVyYXRpb25TdGF0
dXM6OkRvbmUpCisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfSBlbHNl
IHsKKyAgICAgICAgICAgICAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfc2FtZTx2b2lkLCBzdGQ6
OnJlc3VsdF9vZl90PEZ1bmN0aW9uPj46OnZhbHVlKTsKKyAgICAgICAgICAgICAgICBmdW5jdGlv
bihhbGxvY2F0b3IpOworICAgICAgICAgICAgfQorICAgICAgICB9CisjZWxzZQorICAgICAgICBm
dW5jdGlvbihtX2FsbG9jYXRvcik7CisjZW5kaWYKKyAgICB9CisKKyAgICBMb2NrIG1fbG9jazsK
ICAgICBQYWdlUmVzZXJ2YXRpb24gbV9yZXNlcnZhdGlvbjsKKyNpZiBDUFUoQVJNNjQpCisgICAg
c3RkOjphcnJheTxSZWdpb25BbGxvY2F0b3IsIG51bWJlck9mUmVnaW9ucz4gbV9hbGxvY2F0b3Jz
OworI2Vsc2UKKyAgICBBbGxvY2F0b3IgbV9hbGxvY2F0b3I7CisjZW5kaWYKIH07CiAKLUZpeGVk
Vk1Qb29sRXhlY3V0YWJsZUFsbG9jYXRvcjo6fkZpeGVkVk1Qb29sRXhlY3V0YWJsZUFsbG9jYXRv
cigpCi17Ci0gICAgbV9yZXNlcnZhdGlvbi5kZWFsbG9jYXRlKCk7Ci19Ci0KIC8vIEtlZXAgdGhp
cyBwb2ludGVyIGluIGEgbXV0YWJsZSBnbG9iYWwgdmFyaWFibGUgdG8gaGVscCBMZWFrcyBmaW5k
IGl0LgogLy8gQnV0IHdlIGRvIG5vdCB1c2UgdGhpcyBwb2ludGVyLgogc3RhdGljIEZpeGVkVk1Q
b29sRXhlY3V0YWJsZUFsbG9jYXRvciogZ2xvYmFsRml4ZWRWTVBvb2xFeGVjdXRhYmxlQWxsb2Nh
dG9yVG9Xb3JrQXJvdW5kTGVha3MgPSBudWxscHRyOwpAQCAtNDE3LDcgKzcxMiw3IEBAIHZvaWQg
RXhlY3V0YWJsZUFsbG9jYXRvcjo6aW5pdGlhbGl6ZVVuZGUKICAgICBSRUxFQVNFX0FTU0VSVCgh
Z19qc2NDb25maWcuZml4ZWRWTVBvb2xFeGVjdXRhYmxlQWxsb2NhdG9yKTsKICAgICBnX2pzY0Nv
bmZpZy5maXhlZFZNUG9vbEV4ZWN1dGFibGVBbGxvY2F0b3IgPSBuZXcgRml4ZWRWTVBvb2xFeGVj
dXRhYmxlQWxsb2NhdG9yKCk7CiAgICAgZ2xvYmFsRml4ZWRWTVBvb2xFeGVjdXRhYmxlQWxsb2Nh
dG9yVG9Xb3JrQXJvdW5kTGVha3MgPSBnX2pzY0NvbmZpZy5maXhlZFZNUG9vbEV4ZWN1dGFibGVB
bGxvY2F0b3I7Ci0gICAgQ29kZVByb2ZpbGluZzo6bm90aWZ5QWxsb2NhdG9yKGdfanNjQ29uZmln
LmZpeGVkVk1Qb29sRXhlY3V0YWJsZUFsbG9jYXRvcik7CisgICAgZ19qc2NDb25maWcuZml4ZWRW
TVBvb2xFeGVjdXRhYmxlQWxsb2NhdG9yLT5ub3RpZnlDb2RlUHJvZmlsaW5nKCk7CiB9CiAKIGJv
b2wgRXhlY3V0YWJsZUFsbG9jYXRvcjo6aXNWYWxpZCgpIGNvbnN0CkBAIC00MjUsNyArNzIwLDcg
QEAgYm9vbCBFeGVjdXRhYmxlQWxsb2NhdG9yOjppc1ZhbGlkKCkgY29ucwogICAgIEZpeGVkVk1Q
b29sRXhlY3V0YWJsZUFsbG9jYXRvciogYWxsb2NhdG9yID0gZ19qc2NDb25maWcuZml4ZWRWTVBv
b2xFeGVjdXRhYmxlQWxsb2NhdG9yOwogICAgIGlmICghYWxsb2NhdG9yKQogICAgICAgICByZXR1
cm4gQmFzZTo6aXNWYWxpZCgpOwotICAgIHJldHVybiAhIWFsbG9jYXRvci0+Ynl0ZXNSZXNlcnZl
ZCgpOworICAgIHJldHVybiBhbGxvY2F0b3ItPmlzVmFsaWQoKTsKIH0KIAogYm9vbCBFeGVjdXRh
YmxlQWxsb2NhdG9yOjp1bmRlck1lbW9yeVByZXNzdXJlKCkKSW5kZXg6IFNvdXJjZS9XVEYvd3Rm
L0JpdFZlY3Rvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL0JpdFZlY3Rvci5oCShy
ZXZpc2lvbiAyNTc4NjYpCisrKyBTb3VyY2UvV1RGL3d0Zi9CaXRWZWN0b3IuaAkod29ya2luZyBj
b3B5KQpAQCAtMTA4LDcgKzEwOCw3IEBAIHB1YmxpYzogCiAgICAgewogICAgICAgICBpZiAobnVt
Qml0cyA8PSBzaXplKCkpCiAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIHJlc2l6ZU91dE9m
TGluZShudW1CaXRzKTsKKyAgICAgICAgcmVzaXplT3V0T2ZMaW5lcmVzaXplT3V0T2ZMaW5lKG51
bUJpdHMpOwogICAgIH0KICAgICAKICAgICAvLyBMaWtlIGVuc3VyZVNpemUoKSwgYnV0IHN1cHBv
cnRzIHJlZHVjaW5nIHRoZSBzaXplIG9mIHRoZSBiaXR2ZWN0b3IuCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>392608</attachid>
            <date>2020-03-05 12:44:54 -0800</date>
            <delta_ts>2020-03-05 20:03:45 -0800</delta_ts>
            <desc>WIP</desc>
            <filename>c-backup.diff</filename>
            <type>text/plain</type>
            <size>16237</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvRXhlY3V0YWJsZUFsbG9jYXRvci5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9FeGVjdXRhYmxlQWxsb2Nh
dG9yLmNwcAkocmV2aXNpb24gMjU3ODY2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9F
eGVjdXRhYmxlQWxsb2NhdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzAsNiArMzAsNyBAQAog
CiAjaW5jbHVkZSAiQ29kZVByb2ZpbGluZy5oIgogI2luY2x1ZGUgIkV4ZWN1dGFibGVBbGxvY2F0
aW9uRnV6ei5oIgorI2luY2x1ZGUgIkl0ZXJhdGlvblN0YXR1cy5oIgogI2luY2x1ZGUgIkpTQ0lu
bGluZXMuaCIKICNpbmNsdWRlIDx3dGYvRmlsZVN5c3RlbS5oPgogI2luY2x1ZGUgPHd0Zi9NZXRh
QWxsb2NhdG9yLmg+CkBAIC05Niw5ICs5NywxMyBAQCBzdGF0aWMgY29uc3RleHByIHNpemVfdCBm
aXhlZEV4ZWN1dGFibGVNCiAjZWxpZiBDUFUoQVJNKQogc3RhdGljIGNvbnN0ZXhwciBzaXplX3Qg
Zml4ZWRFeGVjdXRhYmxlTWVtb3J5UG9vbFNpemUgPSAxNiAqIDEwMjQgKiAxMDI0OwogI2VsaWYg
Q1BVKEFSTTY0KQotc3RhdGljIGNvbnN0ZXhwciBzaXplX3QgZml4ZWRFeGVjdXRhYmxlTWVtb3J5
UG9vbFNpemUgPSAxMjggKiAxMDI0ICogMTAyNDsKK3N0YXRpYyBjb25zdGV4cHIgc2l6ZV90IGZp
eGVkRXhlY3V0YWJsZU1lbW9yeVBvb2xTaXplID0gMSAqIDEwMjQgKiAxMDI0ICogMTAyNDsKK3N0
YXRpYyBjb25zdGV4cHIgc2l6ZV90IHJlZ2lvblNpemUgPSAxMjggKiAxMDI0ICogMTAyNDsKK3N0
YXRpYyBjb25zdGV4cHIgc2l6ZV90IGlzbGFuZFJlZ2lvblNpemUgPSA2NCAqIDEwMjQgKiAxMDI0
Oworc3RhdGljIGNvbnN0ZXhwciBzaXplX3QgbnVtYmVyT2ZSZWdpb25zID0gZml4ZWRFeGVjdXRh
YmxlTWVtb3J5UG9vbFNpemUgLyByZWdpb25TaXplOworc3RhdGljIGNvbnN0ZXhwciBzaXplX3Qg
aXNsYW5kU2l6ZUluQnl0ZXMgPSAxNjsKICNlbGlmIENQVShYODZfNjQpCi1zdGF0aWMgY29uc3Rl
eHByIHNpemVfdCBmaXhlZEV4ZWN1dGFibGVNZW1vcnlQb29sU2l6ZSA9IDEwMjQgKiAxMDI0ICog
MTAyNDsKK3N0YXRpYyBjb25zdGV4cHIgc2l6ZV90IGZpeGVkRXhlY3V0YWJsZU1lbW9yeVBvb2xT
aXplID0gMSAqIDEwMjQgKiAxMDI0ICogMTAyNDsKICNlbHNlCiBzdGF0aWMgY29uc3RleHByIHNp
emVfdCBmaXhlZEV4ZWN1dGFibGVNZW1vcnlQb29sU2l6ZSA9IDMyICogMTAyNCAqIDEwMjQ7CiAj
ZW5kaWYKQEAgLTM2Myw1MiArMzY4LDM1MyBAQCBzdGF0aWMgQUxXQVlTX0lOTElORSBKSVRSZXNl
cnZhdGlvbiBpbml0CiAgICAgcmV0dXJuIHJlc2VydmF0aW9uOwogfQogCi1jbGFzcyBGaXhlZFZN
UG9vbEV4ZWN1dGFibGVBbGxvY2F0b3IgZmluYWwgOiBwdWJsaWMgTWV0YUFsbG9jYXRvciB7Citj
bGFzcyBGaXhlZFZNUG9vbEV4ZWN1dGFibGVBbGxvY2F0b3IgZmluYWwgewogICAgIFdURl9NQUtF
X0ZBU1RfQUxMT0NBVEVEOwogcHVibGljOgogICAgIEZpeGVkVk1Qb29sRXhlY3V0YWJsZUFsbG9j
YXRvcigpCi0gICAgICAgIDogTWV0YUFsbG9jYXRvcihqaXRBbGxvY2F0aW9uR3JhbnVsZSkgLy8g
cm91bmQgdXAgYWxsIGFsbG9jYXRpb25zIHRvIDMyIGJ5dGVzCiAgICAgeworICAgICAgICBmb3JF
YWNoQWxsb2NhdG9yKFsmXSAoQWxsb2NhdG9yJiBhbGxvY2F0b3IpIHsKKyAgICAgICAgICAgIGFs
bG9jYXRvci5tX2ZpeGVkQWxsb2NhdG9yID0gdGhpczsKKyAgICAgICAgfSk7CisKICAgICAgICAg
SklUUmVzZXJ2YXRpb24gcmVzZXJ2YXRpb24gPSBpbml0aWFsaXplSklUUGFnZVJlc2VydmF0aW9u
KCk7CiAgICAgICAgIG1fcmVzZXJ2YXRpb24gPSBXVEZNb3ZlKHJlc2VydmF0aW9uLnBhZ2VSZXNl
cnZhdGlvbik7CiAgICAgICAgIGlmIChtX3Jlc2VydmF0aW9uKSB7Ci0gICAgICAgICAgICBhZGRG
cmVzaEZyZWVTcGFjZShyZXNlcnZhdGlvbi5iYXNlLCByZXNlcnZhdGlvbi5zaXplKTsKKyNpZiBD
UFUoQVJNNjQpCisgICAgICAgICAgICB1aW50cHRyX3Qgc3RhcnQgPSBiaXR3aXNlX2Nhc3Q8dWlu
dHB0cl90PihtX3Jlc2VydmF0aW9uLmJhc2UoKSk7CisgICAgICAgICAgICB1aW50cHRyX3QgcmVz
ZXJ2YXRpb25FbmQgPSBzdGFydCArIG1fcmVzZXJ2YXRpb24uc2l6ZSgpOworICAgICAgICAgICAg
Zm9yIChzaXplX3QgaSA9IDA7IGkgPCBudW1iZXJPZlJlZ2lvbnM7ICsraSkgeworICAgICAgICAg
ICAgICAgIFJFTEVBU0VfQVNTRVJUKHN0YXJ0IDwgcmVzZXJ2YXRpb25FbmQpOworICAgICAgICAg
ICAgICAgIG1fYWxsb2NhdG9yc1tpXS5zdGFydCA9IHN0YXJ0OworICAgICAgICAgICAgICAgIG1f
YWxsb2NhdG9yc1tpXS5lbmQgPSBzdGFydCArIHJlZ2lvblNpemU7CisgICAgICAgICAgICAgICAg
aWYgKG1fYWxsb2NhdG9yc1tpXS5lbmQgPiByZXNlcnZhdGlvbkVuZCkgeworICAgICAgICAgICAg
ICAgICAgICAvLyBXZSBtYXkgaGF2ZSB0YWtlbiBhIHBhZ2UgZm9yIHRoZSBleGVjdXRhYmxlIG9u
bHkgY29weSB0aHVuay4KKyAgICAgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoaSA9PSBu
dW1iZXJPZlJlZ2lvbnMgLSAxKTsKKyAgICAgICAgICAgICAgICAgICAgbV9hbGxvY2F0b3JzW2ld
LmVuZCA9IHJlc2VydmF0aW9uRW5kOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAg
ICAgIHN0YXJ0ICs9IHJlZ2lvblNpemU7CisgICAgICAgICAgICB9CisjZWxzZQorICAgICAgICAg
ICAgbV9hbGxvY2F0b3IuYWRkRnJlc2hGcmVlU3BhY2UocmVzZXJ2YXRpb24uYmFzZSwgcmVzZXJ2
YXRpb24uc2l6ZSk7CisjZW5kaWYKKwogICAgICAgICAgICAgQVNTRVJUKGJ5dGVzUmVzZXJ2ZWQo
KSA9PSByZXNlcnZhdGlvbi5zaXplKTsgLy8gU2luY2Ugb3VyIGV4ZWN1dGFibGUgbWVtb3J5IGlz
IGZpeGVkLXNpemVkLCBieXRlc1Jlc2VydmVkIGlzIG5ldmVyIGNoYW5nZWQgYWZ0ZXIgaW5pdGlh
bGl6YXRpb24uCiAgICAgICAgIH0KICAgICB9CiAKLSAgICB2aXJ0dWFsIH5GaXhlZFZNUG9vbEV4
ZWN1dGFibGVBbGxvY2F0b3IoKTsKKyAgICB+Rml4ZWRWTVBvb2xFeGVjdXRhYmxlQWxsb2NhdG9y
KCkKKyAgICB7CisgICAgICAgIG1fcmVzZXJ2YXRpb24uZGVhbGxvY2F0ZSgpOworICAgIH0KIAog
ICAgIHZvaWQqIG1lbW9yeVN0YXJ0KCkgeyByZXR1cm4gdW50YWdDb2RlUHRyPEV4ZWN1dGFibGVN
ZW1vcnlQdHJUYWc+KGdfanNjQ29uZmlnLnN0YXJ0RXhlY3V0YWJsZU1lbW9yeSk7IH0KICAgICB2
b2lkKiBtZW1vcnlFbmQoKSB7IHJldHVybiB1bnRhZ0NvZGVQdHI8RXhlY3V0YWJsZU1lbW9yeVB0
clRhZz4oZ19qc2NDb25maWcuZW5kRXhlY3V0YWJsZU1lbW9yeSk7IH0KICAgICBib29sIGlzSklU
UEModm9pZCogcGMpIHsgcmV0dXJuIG1lbW9yeVN0YXJ0KCkgPD0gcGMgJiYgcGMgPCBtZW1vcnlF
bmQoKTsgfQorICAgIGJvb2wgaXNWYWxpZCgpIHsgcmV0dXJuICEhbV9yZXNlcnZhdGlvbjsgfQog
Ci1wcm90ZWN0ZWQ6Ci0gICAgRnJlZVNwYWNlUHRyIGFsbG9jYXRlTmV3U3BhY2Uoc2l6ZV90Jikg
b3ZlcnJpZGUKKyAgICBSZWZQdHI8RXhlY3V0YWJsZU1lbW9yeUhhbmRsZT4gYWxsb2NhdGUoc2l6
ZV90IHNpemVJbkJ5dGVzLCB2b2lkKiBvd25lclVJRCwgc2l6ZV90IG51bUlzbGFuZHMpCiAgICAg
ewotICAgICAgICAvLyBXZSdyZSBvcGVyYXRpbmcgaW4gYSBmaXhlZCBwb29sLCBzbyBuZXcgYWxs
b2NhdGlvbiBpcyBhbHdheXMgcHJvaGliaXRlZC4KLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Cisj
aWYgQ1BVKEFSTTY0KQorICAgICAgICBSZWZQdHI8RXhlY3V0YWJsZU1lbW9yeUhhbmRsZT4gcmVz
dWx0OworICAgICAgICBmb3JFYWNoQWxsb2NhdG9yKFsmXSAoUmVnaW9uQWxsb2NhdG9yJiBhbGxv
Y2F0b3IpIHsKKyAgICAgICAgICAgIGlmICghYWxsb2NhdG9yLnRyeUFsbG9jYXRlSXNsYW5kcyhu
dW1Jc2xhbmRzKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gSXRlcmF0aW9uU3RhdHVzOjpDb250
aW51ZTsKKyAgICAgICAgICAgIHJlc3VsdCA9IGFsbG9jYXRvci5hbGxvY2F0ZShzaXplSW5CeXRl
cywgb3duZXJVSUQpOworICAgICAgICAgICAgaWYgKHJlc3VsdCkKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gSXRlcmF0aW9uU3RhdHVzOjpEb25lOworCisgICAgICAgICAgICBhbGxvY2F0b3IuZGVh
bGxvY2F0ZUlzbGFuZHMobnVtSXNsYW5kcyk7CisgICAgICAgICAgICByZXR1cm4gSXRlcmF0aW9u
U3RhdHVzOjpDb250aW51ZTsKKyAgICAgICAgfSk7CisjZWxzZQorICAgICAgICByZXR1cm4gbV9h
bGxvY2F0b3IuYWxsb2NhdGUoc2l6ZUluQnl0ZXMsIG93bmVyVUlEKTsKKyNlbmRpZgorICAgIH0K
KworICAgIExvY2smIGdldExvY2soKSB7IHJldHVybiBtX2xvY2s7IH0KKworICAgIC8vIE5vbiBh
dG9taWMKKyAgICBzaXplX3QgYnl0ZXNBbGxvY2F0ZWQoKSAKKyAgICB7CisgICAgICAgIHNpemVf
dCByZXN1bHQgPSAwOworICAgICAgICBmb3JFYWNoQWxsb2NhdG9yKFsmXSAoQWxsb2NhdG9yJiBh
bGxvY2F0b3IpIHsKKyAgICAgICAgICAgIHJlc3VsdCArPSBhbGxvY2F0b3IuYnl0ZXNBbGxvY2F0
ZWQoKTsKKyAgICAgICAgfSk7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorICAgIHNp
emVfdCBieXRlc1Jlc2VydmVkKCkgCisgICAgeworICAgICAgICBzaXplX3QgcmVzdWx0ID0gMDsK
KyAgICAgICAgZm9yRWFjaEFsbG9jYXRvcihbJl0gKEFsbG9jYXRvciYgYWxsb2NhdG9yKSB7Cisg
ICAgICAgICAgICByZXN1bHQgKz0gYWxsb2NhdG9yLmJ5dGVzUmVzZXJ2ZWQoKTsKKyAgICAgICAg
fSk7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorICAgIHNpemVfdCBieXRlc0NvbW1p
dHRlZCgpCisgICAgeworICAgICAgICBzaXplX3QgcmVzdWx0ID0gMDsKKyAgICAgICAgZm9yRWFj
aEFsbG9jYXRvcihbJl0gKEFsbG9jYXRvciYgYWxsb2NhdG9yKSB7CisgICAgICAgICAgICByZXN1
bHQgKz0gYWxsb2NhdG9yLmJ5dGVzQ29tbWl0dGVkKCk7CisgICAgICAgIH0pOworICAgICAgICBy
ZXR1cm4gcmVzdWx0OworICAgIH0KKworICAgIGJvb2wgaXNJbkFsbG9jYXRlZE1lbW9yeShjb25z
dCBBYnN0cmFjdExvY2tlciYgbG9ja2VyLCB2b2lkKiBhZGRyZXNzKQorICAgIHsKKyAgICAgICAg
Ym9vbCByZXN1bHQgPSBmYWxzZTsKKyAgICAgICAgZm9yRWFjaEFsbG9jYXRvcihbJl0gKEFsbG9j
YXRvciYgYWxsb2NhdG9yKSB7CisgICAgICAgICAgICBpZiAoYWxsb2NhdG9yLmlzSW5BbGxvY2F0
ZWRNZW1vcnkobG9ja2VyLCBhZGRyZXNzKSkgeworICAgICAgICAgICAgICAgIHJlc3VsdCA9IHRy
dWU7CisgICAgICAgICAgICAgICAgcmV0dXJuIEl0ZXJhdGlvblN0YXR1czo6RG9uZTsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybiBJdGVyYXRpb25TdGF0dXM6OkNvbnRpbnVlOwor
ICAgICAgICB9KTsKKworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKworI2lmIEVOQUJM
RShNRVRBX0FMTE9DQVRPUl9QUk9GSUxFKQorICAgIHZvaWQgZHVtcFByb2ZpbGUoKQorICAgIHsK
KyAgICAgICAgZm9yRWFjaEFsbG9jYXRvcihbJl0gKEFsbG9jYXRvciYgYWxsb2NhdG9yKSB7Cisg
ICAgICAgICAgICBhbGxvY2F0b3IuZHVtcFByb2ZpbGUoKTsKKyAgICAgICAgfSk7CisgICAgfQor
I2VuZGlmCisKKyAgICB2b2lkIG5vdGlmeUNvZGVQcm9maWxpbmcoKQorICAgIHsKKyAgICAgICAg
Zm9yRWFjaEFsbG9jYXRvcihbJl0gKEFsbG9jYXRvciYgYWxsb2NhdG9yKSB7CisgICAgICAgICAg
ICBDb2RlUHJvZmlsaW5nOjpub3RpZnlBbGxvY2F0b3IoJmFsbG9jYXRvcik7CisgICAgICAgIH0p
OworICAgIH0KKworICAgIE1ldGFBbGxvY2F0b3I6OlN0YXRpc3RpY3MgY3VycmVudFN0YXRpc3Rp
Y3MoKQorICAgIHsKKyAgICAgICAgLy8gT09QUzogbWFrZSBhdG9taWMgYnkgaG9sZGluZyBsb2Nr
Li4uCisgICAgICAgIE1ldGFBbGxvY2F0b3I6OlN0YXRpc3RpY3MgcmVzdWx0IHsgMCwgMCwgMCB9
OworICAgICAgICBmb3JFYWNoQWxsb2NhdG9yKFsmXSAoQWxsb2NhdG9yJiBhbGxvY2F0b3IpIHsK
KyAgICAgICAgICAgIGF1dG8gYWxsb2NhdG9yU3RhdHMgPSBhbGxvY2F0b3IuY3VycmVudFN0YXRp
c3RpY3MoKTsKKyAgICAgICAgICAgIHJlc3VsdC5ieXRlc0FsbG9jYXRlZCArPSBhbGxvY2F0b3JT
dGF0cy5ieXRlc0FsbG9jYXRlZDsKKyAgICAgICAgICAgIHJlc3VsdC5ieXRlc1Jlc2VydmVkICs9
IGFsbG9jYXRvclN0YXRzLmJ5dGVzUmVzZXJ2ZWQ7CisgICAgICAgICAgICByZXN1bHQuYnl0ZXND
b21taXR0ZWQgKz0gYWxsb2NhdG9yU3RhdHMuYnl0ZXNDb21taXR0ZWQ7CisgICAgICAgIH0pOwor
ICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKworI2lmIENQVShBUk02NCkKKyAgICBSZWdp
b25BbGxvY2F0b3IqIGZpbmRSZWdpb24odm9pZCogcHRyKQorICAgIHsKKyAgICAgICAgUmVnaW9u
QWxsb2NhdG9yKiByZXN1bHQgPSBudWxscHRyOworICAgICAgICB1aW50cHRyX3QgcHRyTnVtYmVy
ID0gYml0d2lzZV9jYXN0PHVpbnRwdHJfdD4ocHRyKTsKKyAgICAgICAgZm9yRWFjaEFsbG9jYXRv
cihbJl0gKFJlZ2lvbkFsbG9jYXRvciYgYWxsb2NhdG9yKSB7CisgICAgICAgICAgICBpZiAoYWxs
b2NhdG9yLnN0YXJ0IDw9IHB0ck51bWJlciAmJiBwdHJOdW1iZXIgPCBhbGxvY2F0b3IuZW5kKSB7
CisgICAgICAgICAgICAgICAgcmVzdWx0ID0gJmFsbG9jYXRvcjsKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gSXRlcmF0aW9uU3RhdHVzOjpEb25lOworICAgICAgICAgICAgfQorICAgICAgICAgICAg
cmV0dXJuIEl0ZXJhdGlvblN0YXR1czo6Q29udGludWU7CisgICAgICAgIH0pOworICAgICAgICBy
ZXR1cm4gcmVzdWx0OwogICAgIH0KIAotICAgIHZvaWQgbm90aWZ5TmVlZFBhZ2Uodm9pZCogcGFn
ZSwgc2l6ZV90IGNvdW50KSBvdmVycmlkZQorICAgIHZvaWQqIGlzbGFuZEZvckp1bXBMb2NhdGlv
bih1aW50cHRyX3QganVtcExvY2F0aW9uLCB1aW50cHRyX3Qgb2xkVGFyZ2V0LCB1aW50cHRyX3Qg
bmV3VGFyZ2V0KQogICAgIHsKLSAgICAgICAgbV9yZXNlcnZhdGlvbi5jb21taXQocGFnZSwgcGFn
ZVNpemUoKSAqIGNvdW50KTsKKyAgICAgICAgUmVnaW9uQWxsb2NhdG9yKiBhbGxvY2F0b3IgPSBm
aW5kUmVnaW9uKGJpdHdpc2VfY2FzdDx2b2lkKj4oanVtcExvY2F0aW9uKSk7CisgICAgICAgIFJF
TEVBU0VfQVNTRVJUKGFsbG9jYXRvcik7CisKKyAgICAgICAgLy8gSWYgd2Ugd2VyZSBhbHJlYWR5
IGFuIGlzbGFuZCwgd2UgY2FuIGp1c3QgcmV1c2UgaXQuCisgICAgICAgIGlmIChhbGxvY2F0b3It
PmlzbGFuZEJlZ2luKCkgPD0gb2xkVGFyZ2V0ICYmIG9sZFRhcmdldCA8IGFsbG9jYXRvci0+ZW5k
KSB7CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChhbGxvY2F0b3ItPmp1bXBMb2NhdGlvbnNU
b0lzbGFuZHMuY29udGFpbnMoanVtcExvY2F0aW9uKSk7CisgICAgICAgICAgICByZXR1cm4gYml0
d2lzZV9jYXN0PHZvaWQqPihvbGRUYXJnZXQpOworICAgICAgICB9CisKKyAgICAgICAgdm9pZCog
cmVzdWx0ID0gZ2V0QWxsb2NhdGVkSXNsYW5kKCk7CisgICAgICAgIGFsbG9jYXRvci0+anVtcExv
Y2F0aW9uc1RvSXNsYW5kcy5hcHBlbmQoanVtcExvY2F0aW9uKTsKKyAgICAgICAgcmV0dXJuIHJl
c3VsdDsKICAgICB9CiAKLSAgICB2b2lkIG5vdGlmeVBhZ2VJc0ZyZWUodm9pZCogcGFnZSwgc2l6
ZV90IGNvdW50KSBvdmVycmlkZQorICAgIHZvaWQgcmVwYXRjaEp1bXBUaHJvdWdoSXNsYW5kKHVp
bnRwdHJfdCBqdW1wTG9jYXRpb24sIHVpbnRwdHJfdCBvbGRUYXJnZXQsIHVpbnRwdHJfdCBuZXdU
YXJnZXQpCiAgICAgewotICAgICAgICBtX3Jlc2VydmF0aW9uLmRlY29tbWl0KHBhZ2UsIHBhZ2VT
aXplKCkgKiBjb3VudCk7CisKICAgICB9CiAKKyNlbmRpZgorCiBwcml2YXRlOgorICAgIGNsYXNz
IEFsbG9jYXRvciA6IHB1YmxpYyBNZXRhQWxsb2NhdG9yIHsKKyAgICBwdWJsaWM6CisgICAgICAg
IEFsbG9jYXRvcigpCisgICAgICAgICAgICA6IE1ldGFBbGxvY2F0b3Ioaml0QWxsb2NhdGlvbkdy
YW51bGUsIHBhZ2VTaXplKCkpIC8vIHJvdW5kIHVwIGFsbCBhbGxvY2F0aW9ucyB0byAzMiBieXRl
cworICAgICAgICB7CisgICAgICAgIH0KKworICAgICAgICBGcmVlU3BhY2VQdHIgYWxsb2NhdGVO
ZXdTcGFjZShzaXplX3QmKSBvdmVycmlkZQorICAgICAgICB7CisgICAgICAgICAgICAvLyBXZSdy
ZSBvcGVyYXRpbmcgaW4gYSBmaXhlZCBwb29sLCBzbyBuZXcgYWxsb2NhdGlvbiBpcyBhbHdheXMg
cHJvaGliaXRlZC4KKyAgICAgICAgICAgIHJldHVybiBudWxscHRyOworICAgICAgICB9CisKKyAg
ICAgICAgdm9pZCBub3RpZnlOZWVkUGFnZSh2b2lkKiBwYWdlLCBzaXplX3QgY291bnQpIG92ZXJy
aWRlCisgICAgICAgIHsKKyAgICAgICAgICAgIG1fZml4ZWRBbGxvY2F0b3ItPm1fcmVzZXJ2YXRp
b24uY29tbWl0KHBhZ2UsIHBhZ2VTaXplKCkgKiBjb3VudCk7CisgICAgICAgIH0KKworICAgICAg
ICB2b2lkIG5vdGlmeVBhZ2VJc0ZyZWUodm9pZCogcGFnZSwgc2l6ZV90IGNvdW50KSBvdmVycmlk
ZQorICAgICAgICB7CisgICAgICAgICAgICBtX2ZpeGVkQWxsb2NhdG9yLT5tX3Jlc2VydmF0aW9u
LmRlY29tbWl0KHBhZ2UsIHBhZ2VTaXplKCkgKiBjb3VudCk7CisgICAgICAgIH0KKworICAgICAg
ICBGaXhlZFZNUG9vbEV4ZWN1dGFibGVBbGxvY2F0b3IqIG1fZml4ZWRBbGxvY2F0b3I7CisgICAg
fTsKKworI2lmIENQVShBUk02NCkgLy8gT09QUzogY2FuJ3QgZG8gdGhpcyBmb3IgYXJtNjRfMzIK
KyAgICBjbGFzcyBSZWdpb25BbGxvY2F0b3IgOiBwdWJsaWMgQWxsb2NhdG9yIHsKKyAgICBwdWJs
aWM6CisgICAgICAgIC8vICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAg
ICAgICAgLy8gIHwgYWxsb2NhdG9yIC0tPiAgICAgPC0tIGlzbGFuZCAgICAgIHwKKyAgICAgICAg
Ly8gIHwgICAgICAgICAgICAgXiAgICAgXiAgICAgICAgICAgICAgIHwKKyAgICAgICAgLy8gIHwg
ICAgICAgICAgICAgfCAgICAgfCAgICAgICAgICAgICAgIHwKKyAgICAgICAgLy8gIHwgYWxsb2Nh
dG9yU2l6ZSAgICAgcmVzZXJ2ZWRJc2xhbmRzIHwKKyAgICAgICAgLy8gIC0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgICAgLy8gIGFsbG9jYXRvckVuZCA8PSBpc2xh
bmQgYmVnaW4KKworICAgICAgICB1aW50cHRyX3QgaXNsYW5kQmVnaW4oKQorICAgICAgICB7Cisg
ICAgICAgICAgICAvLyBbaXNsYW5kQmVnaW4sIGVuZCkKKyAgICAgICAgICAgIHJldHVybiBlbmQg
LSAobnVtUmVzZXJ2ZWRJc2xhbmRzICogaXNsYW5kU2l6ZUluQnl0ZXMpOyAKKyAgICAgICAgfQor
CisgICAgICAgIHVpbnRwdHJfdCBhbGxvY2F0b3JFbmQoKQorICAgICAgICB7CisgICAgICAgICAg
ICAvLyBbc3RhcnQsIGFsbG9jYXRvckVuZCkKKyAgICAgICAgICAgIHJldHVybiBzdGFydCArIGFs
bG9jYXRvclNpemU7CisgICAgICAgIH0KKworICAgICAgICAvLyBPT1BTOiBwYXNzIExvY2tIb2xk
ZXIgdG8gbWFrZSBpdCBvYnZpb3VzIGxvY2sgaXMgaGVsZC4KKyAgICAgICAgRnJlZVNwYWNlUHRy
IGFsbG9jYXRlTmV3U3BhY2Uoc2l6ZV90JiBudW1QYWdlcykgb3ZlcnJpZGUKKyAgICAgICAgewor
ICAgICAgICAgICAgc2l6ZV90IHJlcXVlc3RlZEJ5dGVzID0gbnVtUGFnZXMgKiBwYWdlU2l6ZSgp
OworICAgICAgICAgICAgdWludHB0cl90IG5ld0FsbG9jYXRvckVuZCA9IHN0YXJ0ICsgYWxsb2Nh
dG9yU2l6ZSArIHJlcXVlc3RlZEJ5dGVzOyAvLyBbc3RhcnQsIG5ld0FsbG9jYXRvckVuZCkKKyAg
ICAgICAgICAgIGlmIChuZXdBbGxvY2F0b3JFbmQgPiBpc2xhbmRCZWdpbigpKQorICAgICAgICAg
ICAgICAgIHJldHVybiBudWxscHRyOworICAgICAgICAgICAgdWludHB0cl90IHJlc3VsdCA9IHN0
YXJ0ICsgYWxsb2NhdG9yU2l6ZTsKKyAgICAgICAgICAgIGFsbG9jYXRvclNpemUgKz0gcmVxdWVz
dGVkQnl0ZXM7CisgICAgICAgICAgICByZXR1cm4gRnJlZVNwYWNlUHRyIHsgYml0d2lzZV9jYXN0
PHZvaWQqPihyZXN1bHQpIH07CisgICAgICAgIH0KKworICAgICAgICBzaXplX3QgaXNsYW5kc1Bl
clBhZ2UoKQorICAgICAgICB7CisgICAgICAgICAgICBzaXplX3QgaXNsYW5kc1BlclBhZ2UgPSBw
YWdlU2l6ZSgpIC8gaXNsYW5kU2l6ZUluQnl0ZXM7CisgICAgICAgICAgICBBU1NFUlQoaXNsYW5k
c1BlclBhZ2UgKiBpc2xhbmRTaXplSW5CeXRlcyA9PSBwYWdlU2l6ZSgpKTsgLy8gd2UgcmVseSBv
biBwZXJmZWN0IGRpdmlzaW9uIGZvciBmaW5kaW5nIHdoaWNoIGJpdCBhIHBvaW50ZXIgaXMuCisg
ICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChpc1Bvd2VyT2ZUd28oaXNsYW5kc1BlclBhZ2UpKTsK
KyAgICAgICAgICAgIHJldHVybiBpc2xhbmRzUGVyUGFnZTsKKyAgICAgICAgfQorCisgICAgICAg
IC8vIE9PUFM6IHBhc3MgTG9ja0hvbGRlciB0byBtYWtlIGl0IG9idmlvdXMgbG9jayBpcyBoZWxk
LgorICAgICAgICBib29sIHRyeUFsbG9jYXRlSXNsYW5kcyhzaXplX3QgbnVtSXNsYW5kc1RvQWxs
b2NhdGUpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmICghbnVtSXNsYW5kc1RvQWxsb2NhdGUp
CisgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICAgICAgICAgIHVpbnRwdHJfdCBu
dW1GcmVlSXNsYW5kcyA9IG51bVJlc2VydmVkSXNsYW5kcyAtIG51bUFsbG9jYXRlZElzbGFuZHM7
IAorICAgICAgICAgICAgaWYgKG51bUZyZWVJc2xhbmRzID49IG51bUlzbGFuZHNUb0FsbG9jYXRl
KSB7CisgICAgICAgICAgICAgICAgbnVtQWxsb2NhdGVkSXNsYW5kcyArPSBudW1Jc2xhbmRzVG9B
bGxvY2F0ZTsKKyAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChudW1BbGxvY2F0ZWRJc2xh
bmRzIDw9IG51bVJlc2VydmVkSXNsYW5kcyk7IC8vIE9PUFM6IGNoZWNrQ29uc2lzdGVuY3k/Cisg
ICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAgICB9IAorCisgICAgICAgICAg
ICBzaXplX3QgaXNsYW5kc1BlclBhZ2UgPSB0aGlzLT5pc2xhbmRzUGVyUGFnZSgpOworICAgICAg
ICAgICAgCisgICAgICAgICAgICB1aW50cHRyX3QgaXNsYW5kc1RvUmVzZXJ2ZSA9IG51bUlzbGFu
ZHNUb0FsbG9jYXRlIC0gbnVtRnJlZUlzbGFuZHM7CisKKyAgICAgICAgICAgIGlzbGFuZHNUb1Jl
c2VydmUgPSByb3VuZFVwVG9NdWx0aXBsZU9mKGlzbGFuZHNQZXJQYWdlLCBpc2xhbmRzVG9SZXNl
cnZlKTsKKyAgICAgICAgICAgIHVpbnRwdHJfdCBuZXdJc2xhbmRCZWdpbiA9IGVuZCAtICgobnVt
UmVzZXJ2ZWRJc2xhbmRzICsgaXNsYW5kc1RvUmVzZXJ2ZSkgKiBpc2xhbmRTaXplSW5CeXRlcyk7
CisgICAgICAgICAgICBpZiAobmV3SXNsYW5kQmVnaW4gPCBhbGxvY2F0b3JFbmQoKSkKKyAgICAg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAgICAgICAgIG51bUFsbG9jYXRlZElzbGFu
ZHMgKz0gbnVtSXNsYW5kc1RvQWxsb2NhdGU7CisgICAgICAgICAgICBudW1SZXNlcnZlZElzbGFu
ZHMgKz0gaXNsYW5kc1RvUmVzZXJ2ZTsKKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKG51bUFs
bG9jYXRlZElzbGFuZHMgPD0gbnVtUmVzZXJ2ZWRJc2xhbmRzKTsKKyAgICAgICAgICAgIHJldHVy
biB0cnVlOworICAgICAgICB9CisKKyAgICAgICAgLy8gT09QUzogdGFrZSBsb2NraG9sZGVyCisg
ICAgICAgIHZvaWQgZGVhbGxvY2F0ZUlzbGFuZHMoc2l6ZV90IG51bUlzbGFuZHNUb0ZyZWUpCisg
ICAgICAgIHsKKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKG51bUlzbGFuZHNUb0ZyZWUgPD0g
bnVtQWxsb2NhdGVkSXNsYW5kcyk7CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChudW1BbGxv
Y2F0ZWRJc2xhbmRzIDw9IG51bVJlc2VydmVkSXNsYW5kcyk7IC8vIE9PUFM6IGNoZWNrQ29uc2lz
dGVuY3kKKyAgICAgICAgICAgIG51bUFsbG9jYXRlZElzbGFuZHMgLT0gbnVtSXNsYW5kc1RvRnJl
ZTsKKyAgICAgICAgfQorCisgICAgICAgIC8vIE9PUFM6IGxvY2tob2xkZXIuCisgICAgICAgIHZv
aWQqIGdldEFsbG9jYXRlZElzbGFuZCgpCisgICAgICAgIHsKKyAgICAgICAgICAgIGF1dG8gZmlu
ZFJlc3VsdCA9IFsmXSAoKSAtPiB2b2lkKiB7CisgICAgICAgICAgICAgICAgc2l6ZV90IHJlc3Vs
dEJpdCA9IGlzbGFuZEJpdHMuZmluZENsZWFyQml0KDApOworICAgICAgICAgICAgICAgIGlmIChy
ZXN1bHRCaXQgPT0gaXNsYW5kQml0cy5zaXplKCkpCisgICAgICAgICAgICAgICAgICAgIHJldHVy
biBudWxscHRyOworICAgICAgICAgICAgICAgIGlzbGFuZEJpdHNbcmVzdWx0Qml0XSA9IHRydWU7
CisgICAgICAgICAgICAgICAgdWludHB0cl90IHJlc3VsdCA9IGVuZCAtICgocmVzdWx0Qml0IC0g
MSkgKiBpc2xhbmRTaXplSW5CeXRlcyk7IAorICAgICAgICAgICAgICAgIHJldHVybiBiaXR3aXNl
X2Nhc3Q8dm9pZCo+KHJlc3VsdCk7CisgICAgICAgICAgICB9OworCisgICAgICAgICAgICBpZiAo
dm9pZCogcmVzdWx0ID0gZmluZFJlc3VsdCgpKQorICAgICAgICAgICAgICAgIHJldHVybiByZXN1
bHQ7CisKKyAgICAgICAgICAgIHNpemVfdCBvbGRTaXplID0gaXNsYW5kQml0cy5zaXplKCk7Cisg
ICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChvbGRTaXplIDwgbnVtUmVzZXJ2ZWRJc2xhbmRzKTsK
KyAgICAgICAgICAgIGlzbGFuZEJpdHMuZW5zdXJlU2l6ZShudW1SZXNlcnZlZElzbGFuZHMpOwor
CisgICAgICAgICAgICB1aW50cHRyX3QgaXNsYW5kQmVnaW4gPSBlbmQgLSAobnVtUmVzZXJ2ZWRJ
c2xhbmRzICogaXNsYW5kU2l6ZUluQnl0ZXMpOyAvLyBbaXNsYW5kQmVnaW4sIGVuZCkKKyAgICAg
ICAgICAgIFJFTEVBU0VfQVNTRVJUKHJvdW5kVXBUb011bHRpcGxlT2YoaXNsYW5kc1BlclBhZ2Uo
KSwgbnVtUmVzZXJ2ZWRJc2xhbmRzIC0gb2xkU2l6ZSkgPT0gKG51bVJlc2VydmVkSXNsYW5kcyAt
IG9sZFNpemUpKTsKKyAgICAgICAgICAgIHNpemVfdCBudW1QYWdlc1RvQ29tbWl0ID0gKG51bVJl
c2VydmVkSXNsYW5kcyAtIG9sZFNpemUpIC8gaXNsYW5kc1BlclBhZ2UoKTsKKyAgICAgICAgICAg
IC8vIE9PUFM6IE1heWJlIGRvbid0IGFsbG9jYXRlIGFsbCBwYWdlcz8gQnV0IGp1c3QgYWxsb2Nh
dGUgYSBwYWdlIGF0IGEgdGltZT8KKyAgICAgICAgICAgIG1fZml4ZWRBbGxvY2F0b3ItPm1fcmVz
ZXJ2YXRpb24uY29tbWl0KGJpdHdpc2VfY2FzdDx2b2lkKj4oaXNsYW5kQmVnaW4pLCBwYWdlU2l6
ZSgpICogbnVtUGFnZXNUb0NvbW1pdCk7CisgICAgICAgICAgICB2b2lkKiByZXN1bHQgPSBmaW5k
UmVzdWx0KCk7CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChyZXN1bHQpOworICAgICAgICAg
ICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAgfQorCisgICAgICAgIC8vIFtzdGFydCwgZW5kKQor
ICAgICAgICB1aW50cHRyX3Qgc3RhcnQ7CisgICAgICAgIHVpbnRwdHJfdCBlbmQ7CisKKyAgICAg
ICAgc2l6ZV90IGFsbG9jYXRvclNpemUgeyAwIH07CisgICAgICAgIHNpemVfdCBudW1SZXNlcnZl
ZElzbGFuZHMgeyAwIH07CisgICAgICAgIHNpemVfdCBudW1BbGxvY2F0ZWRJc2xhbmRzIHsgMCB9
OyAvLyA8PSBudW1SZXNlcnZlZElzbGFuZHMKKyAgICAgICAgRmFzdEJpdFZlY3RvciBpc2xhbmRC
aXRzOworICAgICAgICBWZWN0b3I8dWludHB0cl90PiBqdW1wTG9jYXRpb25zVG9Jc2xhbmRzOyAv
LyBPT1BTOiB1c2UgcmVkIGJsYWNrIHRyZWUgYW5kIG1ha2UgaXQgZmFzdCB0byByZW1vdmUgYWxs
IGVudHJpZXMgbWF0Y2hpbmcuCisgICAgfTsKKyNlbmRpZgorCisgICAgdGVtcGxhdGUgPHR5cGVu
YW1lIEZ1bmN0aW9uPgorICAgIHZvaWQgZm9yRWFjaEFsbG9jYXRvcihGdW5jdGlvbiBmdW5jdGlv
bikKKyAgICB7CisjaWYgQ1BVKEFSTTY0KQorICAgICAgICBmb3IgKFJlZ2lvbkFsbG9jYXRvciYg
YWxsb2NhdG9yIDogbV9hbGxvY2F0b3JzKSB7CisgICAgICAgICAgICBpZiBjb25zdGV4cHIgKHN0
ZDo6aXNfc2FtZTxJdGVyYXRpb25TdGF0dXMsIHN0ZDo6cmVzdWx0X29mX3Q8RnVuY3Rpb24+Pjo6
dmFsdWUpIHsKKyAgICAgICAgICAgICAgICBpZiAoZnVuY3Rpb24oYWxsb2NhdG9yKSA9PSBJdGVy
YXRpb25TdGF0dXM6OkRvbmUpCisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAg
ICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfc2FtZTx2
b2lkLCBzdGQ6OnJlc3VsdF9vZl90PEZ1bmN0aW9uPj46OnZhbHVlKTsKKyAgICAgICAgICAgICAg
ICBmdW5jdGlvbihhbGxvY2F0b3IpOworICAgICAgICAgICAgfQorICAgICAgICB9CisjZWxzZQor
ICAgICAgICBmdW5jdGlvbihtX2FsbG9jYXRvcik7CisjZW5kaWYKKyAgICB9CisKKyAgICBMb2Nr
IG1fbG9jazsKICAgICBQYWdlUmVzZXJ2YXRpb24gbV9yZXNlcnZhdGlvbjsKKyNpZiBDUFUoQVJN
NjQpCisgICAgc3RkOjphcnJheTxSZWdpb25BbGxvY2F0b3IsIG51bWJlck9mUmVnaW9ucz4gbV9h
bGxvY2F0b3JzOworI2Vsc2UKKyAgICBBbGxvY2F0b3IgbV9hbGxvY2F0b3I7CisjZW5kaWYKIH07
CiAKLUZpeGVkVk1Qb29sRXhlY3V0YWJsZUFsbG9jYXRvcjo6fkZpeGVkVk1Qb29sRXhlY3V0YWJs
ZUFsbG9jYXRvcigpCi17Ci0gICAgbV9yZXNlcnZhdGlvbi5kZWFsbG9jYXRlKCk7Ci19Ci0KIC8v
IEtlZXAgdGhpcyBwb2ludGVyIGluIGEgbXV0YWJsZSBnbG9iYWwgdmFyaWFibGUgdG8gaGVscCBM
ZWFrcyBmaW5kIGl0LgogLy8gQnV0IHdlIGRvIG5vdCB1c2UgdGhpcyBwb2ludGVyLgogc3RhdGlj
IEZpeGVkVk1Qb29sRXhlY3V0YWJsZUFsbG9jYXRvciogZ2xvYmFsRml4ZWRWTVBvb2xFeGVjdXRh
YmxlQWxsb2NhdG9yVG9Xb3JrQXJvdW5kTGVha3MgPSBudWxscHRyOwpAQCAtNDE3LDcgKzcyMyw3
IEBAIHZvaWQgRXhlY3V0YWJsZUFsbG9jYXRvcjo6aW5pdGlhbGl6ZVVuZGUKICAgICBSRUxFQVNF
X0FTU0VSVCghZ19qc2NDb25maWcuZml4ZWRWTVBvb2xFeGVjdXRhYmxlQWxsb2NhdG9yKTsKICAg
ICBnX2pzY0NvbmZpZy5maXhlZFZNUG9vbEV4ZWN1dGFibGVBbGxvY2F0b3IgPSBuZXcgRml4ZWRW
TVBvb2xFeGVjdXRhYmxlQWxsb2NhdG9yKCk7CiAgICAgZ2xvYmFsRml4ZWRWTVBvb2xFeGVjdXRh
YmxlQWxsb2NhdG9yVG9Xb3JrQXJvdW5kTGVha3MgPSBnX2pzY0NvbmZpZy5maXhlZFZNUG9vbEV4
ZWN1dGFibGVBbGxvY2F0b3I7Ci0gICAgQ29kZVByb2ZpbGluZzo6bm90aWZ5QWxsb2NhdG9yKGdf
anNjQ29uZmlnLmZpeGVkVk1Qb29sRXhlY3V0YWJsZUFsbG9jYXRvcik7CisgICAgZ19qc2NDb25m
aWcuZml4ZWRWTVBvb2xFeGVjdXRhYmxlQWxsb2NhdG9yLT5ub3RpZnlDb2RlUHJvZmlsaW5nKCk7
CiB9CiAKIGJvb2wgRXhlY3V0YWJsZUFsbG9jYXRvcjo6aXNWYWxpZCgpIGNvbnN0CkBAIC00MjUs
NyArNzMxLDcgQEAgYm9vbCBFeGVjdXRhYmxlQWxsb2NhdG9yOjppc1ZhbGlkKCkgY29ucwogICAg
IEZpeGVkVk1Qb29sRXhlY3V0YWJsZUFsbG9jYXRvciogYWxsb2NhdG9yID0gZ19qc2NDb25maWcu
Zml4ZWRWTVBvb2xFeGVjdXRhYmxlQWxsb2NhdG9yOwogICAgIGlmICghYWxsb2NhdG9yKQogICAg
ICAgICByZXR1cm4gQmFzZTo6aXNWYWxpZCgpOwotICAgIHJldHVybiAhIWFsbG9jYXRvci0+Ynl0
ZXNSZXNlcnZlZCgpOworICAgIHJldHVybiBhbGxvY2F0b3ItPmlzVmFsaWQoKTsKIH0KIAogYm9v
bCBFeGVjdXRhYmxlQWxsb2NhdG9yOjp1bmRlck1lbW9yeVByZXNzdXJlKCkKSW5kZXg6IFNvdXJj
ZS9XVEYvd3RmL0JpdFZlY3Rvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL0JpdFZl
Y3Rvci5oCShyZXZpc2lvbiAyNTc4NjYpCisrKyBTb3VyY2UvV1RGL3d0Zi9CaXRWZWN0b3IuaAko
d29ya2luZyBjb3B5KQpAQCAtMTA4LDcgKzEwOCw3IEBAIHB1YmxpYzogCiAgICAgewogICAgICAg
ICBpZiAobnVtQml0cyA8PSBzaXplKCkpCiAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIHJl
c2l6ZU91dE9mTGluZShudW1CaXRzKTsKKyAgICAgICAgcmVzaXplT3V0T2ZMaW5lcmVzaXplT3V0
T2ZMaW5lKG51bUJpdHMpOwogICAgIH0KICAgICAKICAgICAvLyBMaWtlIGVuc3VyZVNpemUoKSwg
YnV0IHN1cHBvcnRzIHJlZHVjaW5nIHRoZSBzaXplIG9mIHRoZSBiaXR2ZWN0b3IuCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>392663</attachid>
            <date>2020-03-05 20:03:45 -0800</date>
            <delta_ts>2020-03-06 17:53:34 -0800</delta_ts>
            <desc>WIP</desc>
            <filename>c-backup.diff</filename>
            <type>text/plain</type>
            <size>21879</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvQVJNNjRBc3NlbWJsZXIuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL0FSTTY0QXNzZW1i
bGVyLmgJKHJldmlzaW9uIDI1Nzg2NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJs
ZXIvQVJNNjRBc3NlbWJsZXIuaAkod29ya2luZyBjb3B5KQpAQCAtNzgzLDEyICs3ODMsMTMgQEAg
cHVibGljOgogICAgICAgICBpbnNuKGRhdGFQcm9jZXNzaW5nMlNvdXJjZShEQVRBU0laRSwgcm0s
IERhdGFPcF9BU1JWLCBybiwgcmQpKTsKICAgICB9CiAKLSAgICBBTFdBWVNfSU5MSU5FIHZvaWQg
YihpbnQzMl90IG9mZnNldCA9IDApCisgICAgQUxXQVlTX0lOTElORSB2b2lkIGIoLyppbnQzMl90
IG9mZnNldCA9IDAqLykKICAgICB7Ci0gICAgICAgIEFTU0VSVCghKG9mZnNldCAmIDMpKTsKLSAg
ICAgICAgb2Zmc2V0ID4+PSAyOwotICAgICAgICBBU1NFUlQob2Zmc2V0ID09IChvZmZzZXQgPDwg
NikgPj4gNik7Ci0gICAgICAgIGluc24odW5jb25kaXRpb25hbEJyYW5jaEltbWVkaWF0ZShmYWxz
ZSwgb2Zmc2V0KSk7CisgICAgICAgIC8vQVNTRVJUKCEob2Zmc2V0ICYgMykpOworICAgICAgICAv
L29mZnNldCA+Pj0gMjsKKyAgICAgICAgLy9BU1NFUlQob2Zmc2V0ID09IChvZmZzZXQgPDwgNikg
Pj4gNik7CisgICAgICAgIC8vaW5zbih1bmNvbmRpdGlvbmFsQnJhbmNoSW1tZWRpYXRlKGZhbHNl
LCBvZmZzZXQpKTsKKyAgICAgICAgaW5zbih1bmNvbmRpdGlvbmFsQnJhbmNoSW1tZWRpYXRlKGZh
bHNlLCAwKSk7CiAgICAgfQogCiAgICAgQUxXQVlTX0lOTElORSB2b2lkIGJfY29uZChDb25kaXRp
b24gY29uZCwgaW50MzJfdCBvZmZzZXQgPSAwKQpAQCAtODMxLDExICs4MzIsMTIgQEAgcHVibGlj
OgogICAgICAgICBpbnNuKGxvZ2ljYWxTaGlmdGVkUmVnaXN0ZXIoREFUQVNJWkUsIHNldEZsYWdz
ID8gTG9naWNhbE9wX0FORFMgOiBMb2dpY2FsT3BfQU5ELCBzaGlmdCwgdHJ1ZSwgcm0sIGFtb3Vu
dCwgcm4sIHJkKSk7CiAgICAgfQogCi0gICAgQUxXQVlTX0lOTElORSB2b2lkIGJsKGludDMyX3Qg
b2Zmc2V0ID0gMCkKKyAgICBBTFdBWVNfSU5MSU5FIHZvaWQgYmwoLyppbnQzMl90IG9mZnNldCA9
IDAqLykKICAgICB7Ci0gICAgICAgIEFTU0VSVCghKG9mZnNldCAmIDMpKTsKLSAgICAgICAgb2Zm
c2V0ID4+PSAyOwotICAgICAgICBpbnNuKHVuY29uZGl0aW9uYWxCcmFuY2hJbW1lZGlhdGUodHJ1
ZSwgb2Zmc2V0KSk7CisgICAgICAgIC8vQVNTRVJUKCEob2Zmc2V0ICYgMykpOworICAgICAgICAv
L29mZnNldCA+Pj0gMjsKKyAgICAgICAgLy9pbnNuKHVuY29uZGl0aW9uYWxCcmFuY2hJbW1lZGlh
dGUodHJ1ZSwgb2Zmc2V0KSk7CisgICAgICAgIGluc24odW5jb25kaXRpb25hbEJyYW5jaEltbWVk
aWF0ZSh0cnVlLCAwKSk7CiAgICAgfQogCiAgICAgQUxXQVlTX0lOTElORSB2b2lkIGJscihSZWdp
c3RlcklEIHJuKQpAQCAtMjg3Miw3ICsyODc0LDcgQEAgcHVibGljOgogICAgICAgICAgICAgICAg
IHJldHVybiBMaW5rSnVtcENvbmRpdGlvbkRpcmVjdDsKIAogICAgICAgICAgICAgcmV0dXJuIExp
bmtKdW1wQ29uZGl0aW9uOwotICAgICAgICAgICAgfQorICAgICAgICB9CiAgICAgICAgIGNhc2Ug
SnVtcENvbXBhcmVBbmRCcmFuY2g6ICB7CiAgICAgICAgICAgICBBU1NFUlQoaXM0Qnl0ZUFsaWdu
ZWQoZnJvbSkpOwogICAgICAgICAgICAgQVNTRVJUKGlzNEJ5dGVBbGlnbmVkKHRvKSk7CkBAIC0y
OTk0LDkgKzI5OTYsMTYgQEAgcHJvdGVjdGVkOgogICAgICAgICBBU1NFUlQoIShyZWludGVycHJl
dF9jYXN0PGludHB0cl90Pih0bykgJiAzKSk7CiAgICAgICAgIGFzc2VydElzTm90VGFnZ2VkKHRv
KTsKICAgICAgICAgYXNzZXJ0SXNOb3RUYWdnZWQoZnJvbUluc3RydWN0aW9uKTsKLSAgICAgICAg
aW50cHRyX3Qgb2Zmc2V0ID0gKHJlaW50ZXJwcmV0X2Nhc3Q8aW50cHRyX3Q+KHRvKSAtIHJlaW50
ZXJwcmV0X2Nhc3Q8aW50cHRyX3Q+KGZyb21JbnN0cnVjdGlvbikpID4+IDI7CisgICAgICAgIGlu
dHB0cl90IG9mZnNldCA9IChiaXR3aXNlX2Nhc3Q8aW50cHRyX3Q+KHRvKSAtIGJpdHdpc2VfY2Fz
dDxpbnRwdHJfdD4oZnJvbUluc3RydWN0aW9uKSkgPj4gMjsKICAgICAgICAgQVNTRVJUKHN0YXRp
Y19jYXN0PGludD4ob2Zmc2V0KSA9PSBvZmZzZXQpOwogCisgICAgICAgIGlmICghaXNJbnQ8MjY+
KG9mZnNldCkpIHsKKyAgICAgICAgICAgIC8vIE9PUFM6IGRpc2Fzc2VtYmxlIG9sZCBicmFuY2gg
ZGVzdCEKKyAgICAgICAgICAgIHRvID0gRXhlY3V0YWJsZUFsbG9jYXRvcjo6Z2V0SnVtcElzbGFu
ZFRvKGZyb21JbnN0cnVjdGlvbiwgbnVsbHB0ciwgbmV3RGVzdGluYXRpb24pOworICAgICAgICAg
ICAgb2Zmc2V0ID0gKGJpdHdpc2VfY2FzdDxpbnRwdHJfdD4odG8pIC0gYml0d2lzZV9jYXN0PGlu
dHB0cl90Pihmcm9tSW5zdHJ1Y3Rpb24pKSA+PiAyOworICAgICAgICAgICAgUkVMRUFTRV9BU1NF
UlQoaXNJbnQ8MjY+KG9mZnNldCkpOworICAgICAgICB9CisKICAgICAgICAgaW50IGluc24gPSB1
bmNvbmRpdGlvbmFsQnJhbmNoSW1tZWRpYXRlKGlzQ2FsbCwgc3RhdGljX2Nhc3Q8aW50PihvZmZz
ZXQpKTsKICAgICAgICAgUkVMRUFTRV9BU1NFUlQocm91bmRVcFRvTXVsdGlwbGVPZjxpbnN0cnVj
dGlvblNpemU+KGZyb20pID09IGZyb20pOwogICAgICAgICBjb3B5KGZyb20sICZpbnNuLCBzaXpl
b2YoaW50KSk7CkBAIC0zMDA4LDcgKzMwMTcsNyBAQCBwcm90ZWN0ZWQ6CiAgICAgICAgIEFTU0VS
VCghKHJlaW50ZXJwcmV0X2Nhc3Q8aW50cHRyX3Q+KGZyb20pICYgMykpOwogICAgICAgICBBU1NF
UlQoIShyZWludGVycHJldF9jYXN0PGludHB0cl90Pih0bykgJiAzKSk7CiAgICAgICAgIGludHB0
cl90IG9mZnNldCA9IChyZWludGVycHJldF9jYXN0PGludHB0cl90Pih0bykgLSByZWludGVycHJl
dF9jYXN0PGludHB0cl90Pihmcm9tSW5zdHJ1Y3Rpb24pKSA+PiAyOwotICAgICAgICBBU1NFUlQo
aXNJbnQ8MjY+KG9mZnNldCkpOworICAgICAgICAvL0FTU0VSVChpc0ludDwyNj4ob2Zmc2V0KSk7
IC8vT09QUwogCiAgICAgICAgIGJvb2wgdXNlRGlyZWN0ID0gaXNJbnQ8MTk+KG9mZnNldCk7CiAg
ICAgICAgIEFTU0VSVCh0eXBlID09IEluZGlyZWN0QnJhbmNoIHx8IHVzZURpcmVjdCk7CkBAIC0z
MDM2LDcgKzMwNDUsNyBAQCBwcm90ZWN0ZWQ6CiAgICAgICAgIEFTU0VSVCghKHJlaW50ZXJwcmV0
X2Nhc3Q8aW50cHRyX3Q+KGZyb20pICYgMykpOwogICAgICAgICBBU1NFUlQoIShyZWludGVycHJl
dF9jYXN0PGludHB0cl90Pih0bykgJiAzKSk7CiAgICAgICAgIGludHB0cl90IG9mZnNldCA9IChy
ZWludGVycHJldF9jYXN0PGludHB0cl90Pih0bykgLSByZWludGVycHJldF9jYXN0PGludHB0cl90
Pihmcm9tSW5zdHJ1Y3Rpb24pKSA+PiAyOwotICAgICAgICBBU1NFUlQoaXNJbnQ8MjY+KG9mZnNl
dCkpOworICAgICAgICAvLyBBU1NFUlQoaXNJbnQ8MjY+KG9mZnNldCkpOyBPT1BTCiAKICAgICAg
ICAgYm9vbCB1c2VEaXJlY3QgPSBpc0ludDwxOT4ob2Zmc2V0KTsKICAgICAgICAgQVNTRVJUKHR5
cGUgPT0gSW5kaXJlY3RCcmFuY2ggfHwgdXNlRGlyZWN0KTsKQEAgLTMwNjUsNyArMzA3NCw3IEBA
IHByb3RlY3RlZDoKICAgICAgICAgQVNTRVJUKCEocmVpbnRlcnByZXRfY2FzdDxpbnRwdHJfdD4o
dG8pICYgMykpOwogICAgICAgICBpbnRwdHJfdCBvZmZzZXQgPSAocmVpbnRlcnByZXRfY2FzdDxp
bnRwdHJfdD4odG8pIC0gcmVpbnRlcnByZXRfY2FzdDxpbnRwdHJfdD4oZnJvbUluc3RydWN0aW9u
KSkgPj4gMjsKICAgICAgICAgQVNTRVJUKHN0YXRpY19jYXN0PGludD4ob2Zmc2V0KSA9PSBvZmZz
ZXQpOwotICAgICAgICBBU1NFUlQoaXNJbnQ8MjY+KG9mZnNldCkpOworICAgICAgICAvL0FTU0VS
VChpc0ludDwyNj4ob2Zmc2V0KSk7IE9PUFMKIAogICAgICAgICBib29sIHVzZURpcmVjdCA9IGlz
SW50PDE0PihvZmZzZXQpOwogICAgICAgICBBU1NFUlQodHlwZSA9PSBJbmRpcmVjdEJyYW5jaCB8
fCB1c2VEaXJlY3QpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlRmxh
Z3MuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZUZs
YWdzLmNwcAkocmV2aXNpb24gMjU3ODY2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdOb2RlRmxhZ3MuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02OCw3ICs2OCw3IEBAIHZvaWQgZHVt
cE5vZGVGbGFncyhQcmludFN0cmVhbSYgYWN0dWFsT3UKICAgICAgICAgfQogICAgIH0KICAgICAK
LSAgICBpZiAoZmxhZ3MgJiBOb2RlTXVzdEdlbmVyYXRlKQorICAgIGlmIChmbGFncyAmIG9kZU11
c3RHZW5lcmF0ZSkKICAgICAgICAgb3V0LnByaW50KGNvbW1hLCAiTXVzdEdlbiIpOwogICAgIAog
ICAgIGlmIChmbGFncyAmIE5vZGVIYXNWYXJBcmdzKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9FeGVjdXRhYmxlQWxsb2NhdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L0V4ZWN1dGFibGVBbGxvY2F0b3IuY3BwCShyZXZpc2lvbiAyNTc4NjYp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0V4ZWN1dGFibGVBbGxvY2F0b3IuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0zMCw2ICszMCw3IEBACiAKICNpbmNsdWRlICJDb2RlUHJvZmlsaW5n
LmgiCiAjaW5jbHVkZSAiRXhlY3V0YWJsZUFsbG9jYXRpb25GdXp6LmgiCisjaW5jbHVkZSAiSXRl
cmF0aW9uU3RhdHVzLmgiCiAjaW5jbHVkZSAiSlNDSW5saW5lcy5oIgogI2luY2x1ZGUgPHd0Zi9G
aWxlU3lzdGVtLmg+CiAjaW5jbHVkZSA8d3RmL01ldGFBbGxvY2F0b3IuaD4KQEAgLTk2LDkgKzk3
LDE0IEBAIHN0YXRpYyBjb25zdGV4cHIgc2l6ZV90IGZpeGVkRXhlY3V0YWJsZU0KICNlbGlmIENQ
VShBUk0pCiBzdGF0aWMgY29uc3RleHByIHNpemVfdCBmaXhlZEV4ZWN1dGFibGVNZW1vcnlQb29s
U2l6ZSA9IDE2ICogMTAyNCAqIDEwMjQ7CiAjZWxpZiBDUFUoQVJNNjQpCi1zdGF0aWMgY29uc3Rl
eHByIHNpemVfdCBmaXhlZEV4ZWN1dGFibGVNZW1vcnlQb29sU2l6ZSA9IDEyOCAqIDEwMjQgKiAx
MDI0Oworc3RhdGljIGNvbnN0ZXhwciBzaXplX3QgZml4ZWRFeGVjdXRhYmxlTWVtb3J5UG9vbFNp
emUgPSAxICogMTAyNCAqIDEwMjQgKiAxMDI0Oworc3RhdGljIGNvbnN0ZXhwciBzaXplX3QgcmVn
aW9uU2l6ZSA9IDEyOCAqIDEwMjQgKiAxMDI0Oworc3RhdGljIGNvbnN0ZXhwciBzaXplX3QgaXNs
YW5kUmVnaW9uU2l6ZSA9IDY0ICogMTAyNCAqIDEwMjQ7CitzdGF0aWMgY29uc3RleHByIHNpemVf
dCBudW1iZXJPZlJlZ2lvbnMgPSBmaXhlZEV4ZWN1dGFibGVNZW1vcnlQb29sU2l6ZSAvIHJlZ2lv
blNpemU7CitzdGF0aWMgY29uc3RleHByIHNpemVfdCBpc2xhbmRTaXplSW5CeXRlcyA9IDE2Owor
c3RhdGljIGNvbnN0ZXhwciBzaXplX3QgbWF4SXNsYW5kc1BlclJlZ2lvbiA9IGlzbGFuZFJlZ2lv
blNpemUgLyBpc2xhbmRTaXplSW5CeXRlczsKICNlbGlmIENQVShYODZfNjQpCi1zdGF0aWMgY29u
c3RleHByIHNpemVfdCBmaXhlZEV4ZWN1dGFibGVNZW1vcnlQb29sU2l6ZSA9IDEwMjQgKiAxMDI0
ICogMTAyNDsKK3N0YXRpYyBjb25zdGV4cHIgc2l6ZV90IGZpeGVkRXhlY3V0YWJsZU1lbW9yeVBv
b2xTaXplID0gMSAqIDEwMjQgKiAxMDI0ICogMTAyNDsKICNlbHNlCiBzdGF0aWMgY29uc3RleHBy
IHNpemVfdCBmaXhlZEV4ZWN1dGFibGVNZW1vcnlQb29sU2l6ZSA9IDMyICogMTAyNCAqIDEwMjQ7
CiAjZW5kaWYKQEAgLTM2Myw1MiArMzY5LDM1NSBAQCBzdGF0aWMgQUxXQVlTX0lOTElORSBKSVRS
ZXNlcnZhdGlvbiBpbml0CiAgICAgcmV0dXJuIHJlc2VydmF0aW9uOwogfQogCi1jbGFzcyBGaXhl
ZFZNUG9vbEV4ZWN1dGFibGVBbGxvY2F0b3IgZmluYWwgOiBwdWJsaWMgTWV0YUFsbG9jYXRvciB7
CitjbGFzcyBGaXhlZFZNUG9vbEV4ZWN1dGFibGVBbGxvY2F0b3IgZmluYWwgewogICAgIFdURl9N
QUtFX0ZBU1RfQUxMT0NBVEVEOwogcHVibGljOgogICAgIEZpeGVkVk1Qb29sRXhlY3V0YWJsZUFs
bG9jYXRvcigpCi0gICAgICAgIDogTWV0YUFsbG9jYXRvcihqaXRBbGxvY2F0aW9uR3JhbnVsZSkg
Ly8gcm91bmQgdXAgYWxsIGFsbG9jYXRpb25zIHRvIDMyIGJ5dGVzCiAgICAgeworICAgICAgICBm
b3JFYWNoQWxsb2NhdG9yKFsmXSAoQWxsb2NhdG9yJiBhbGxvY2F0b3IpIHsKKyAgICAgICAgICAg
IGFsbG9jYXRvci5tX2ZpeGVkQWxsb2NhdG9yID0gdGhpczsKKyAgICAgICAgfSk7CisKICAgICAg
ICAgSklUUmVzZXJ2YXRpb24gcmVzZXJ2YXRpb24gPSBpbml0aWFsaXplSklUUGFnZVJlc2VydmF0
aW9uKCk7CiAgICAgICAgIG1fcmVzZXJ2YXRpb24gPSBXVEZNb3ZlKHJlc2VydmF0aW9uLnBhZ2VS
ZXNlcnZhdGlvbik7CiAgICAgICAgIGlmIChtX3Jlc2VydmF0aW9uKSB7Ci0gICAgICAgICAgICBh
ZGRGcmVzaEZyZWVTcGFjZShyZXNlcnZhdGlvbi5iYXNlLCByZXNlcnZhdGlvbi5zaXplKTsKKyNp
ZiBDUFUoQVJNNjQpCisgICAgICAgICAgICB1aW50cHRyX3Qgc3RhcnQgPSBiaXR3aXNlX2Nhc3Q8
dWludHB0cl90PihtX3Jlc2VydmF0aW9uLmJhc2UoKSk7CisgICAgICAgICAgICB1aW50cHRyX3Qg
cmVzZXJ2YXRpb25FbmQgPSBzdGFydCArIG1fcmVzZXJ2YXRpb24uc2l6ZSgpOworICAgICAgICAg
ICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBudW1iZXJPZlJlZ2lvbnM7ICsraSkgeworICAgICAg
ICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKHN0YXJ0IDwgcmVzZXJ2YXRpb25FbmQpOworICAgICAg
ICAgICAgICAgIG1fYWxsb2NhdG9yc1tpXS5zdGFydCA9IHN0YXJ0OworICAgICAgICAgICAgICAg
IG1fYWxsb2NhdG9yc1tpXS5lbmQgPSBzdGFydCArIHJlZ2lvblNpemU7CisgICAgICAgICAgICAg
ICAgaWYgKG1fYWxsb2NhdG9yc1tpXS5lbmQgPiByZXNlcnZhdGlvbkVuZCkgeworICAgICAgICAg
ICAgICAgICAgICAvLyBXZSBtYXkgaGF2ZSB0YWtlbiBhIHBhZ2UgZm9yIHRoZSBleGVjdXRhYmxl
IG9ubHkgY29weSB0aHVuay4KKyAgICAgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoaSA9
PSBudW1iZXJPZlJlZ2lvbnMgLSAxKTsKKyAgICAgICAgICAgICAgICAgICAgbV9hbGxvY2F0b3Jz
W2ldLmVuZCA9IHJlc2VydmF0aW9uRW5kOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAg
ICAgICAgIG1fYWxsb2NhdG9yc1tpXS5hZGRGcmVzaEZyZWVTcGFjZShtX2FsbG9jYXRvcnNbaV0u
c3RhcnQsIG1fYWxsb2NhdG9yc1tpXS5hbGxvY2F0b3JTaXplKCkpOworCisgICAgICAgICAgICAg
ICAgc3RhcnQgKz0gcmVnaW9uU2l6ZTsKKyAgICAgICAgICAgIH0KKyNlbHNlCisgICAgICAgICAg
ICBtX2FsbG9jYXRvci5hZGRGcmVzaEZyZWVTcGFjZShyZXNlcnZhdGlvbi5iYXNlLCByZXNlcnZh
dGlvbi5zaXplKTsKKyNlbmRpZgorCiAgICAgICAgICAgICBBU1NFUlQoYnl0ZXNSZXNlcnZlZCgp
ID09IHJlc2VydmF0aW9uLnNpemUpOyAvLyBTaW5jZSBvdXIgZXhlY3V0YWJsZSBtZW1vcnkgaXMg
Zml4ZWQtc2l6ZWQsIGJ5dGVzUmVzZXJ2ZWQgaXMgbmV2ZXIgY2hhbmdlZCBhZnRlciBpbml0aWFs
aXphdGlvbi4KICAgICAgICAgfQogICAgIH0KIAotICAgIHZpcnR1YWwgfkZpeGVkVk1Qb29sRXhl
Y3V0YWJsZUFsbG9jYXRvcigpOworICAgIH5GaXhlZFZNUG9vbEV4ZWN1dGFibGVBbGxvY2F0b3Io
KQorICAgIHsKKyAgICAgICAgbV9yZXNlcnZhdGlvbi5kZWFsbG9jYXRlKCk7CisgICAgfQogCiAg
ICAgdm9pZCogbWVtb3J5U3RhcnQoKSB7IHJldHVybiB1bnRhZ0NvZGVQdHI8RXhlY3V0YWJsZU1l
bW9yeVB0clRhZz4oZ19qc2NDb25maWcuc3RhcnRFeGVjdXRhYmxlTWVtb3J5KTsgfQogICAgIHZv
aWQqIG1lbW9yeUVuZCgpIHsgcmV0dXJuIHVudGFnQ29kZVB0cjxFeGVjdXRhYmxlTWVtb3J5UHRy
VGFnPihnX2pzY0NvbmZpZy5lbmRFeGVjdXRhYmxlTWVtb3J5KTsgfQogICAgIGJvb2wgaXNKSVRQ
Qyh2b2lkKiBwYykgeyByZXR1cm4gbWVtb3J5U3RhcnQoKSA8PSBwYyAmJiBwYyA8IG1lbW9yeUVu
ZCgpOyB9CisgICAgYm9vbCBpc1ZhbGlkKCkgeyByZXR1cm4gISFtX3Jlc2VydmF0aW9uOyB9CiAK
LXByb3RlY3RlZDoKLSAgICBGcmVlU3BhY2VQdHIgYWxsb2NhdGVOZXdTcGFjZShzaXplX3QmKSBv
dmVycmlkZQorICAgIFJlZlB0cjxFeGVjdXRhYmxlTWVtb3J5SGFuZGxlPiBhbGxvY2F0ZShzaXpl
X3Qgc2l6ZUluQnl0ZXMsIHZvaWQqIG93bmVyVUlEKQogICAgIHsKLSAgICAgICAgLy8gV2UncmUg
b3BlcmF0aW5nIGluIGEgZml4ZWQgcG9vbCwgc28gbmV3IGFsbG9jYXRpb24gaXMgYWx3YXlzIHBy
b2hpYml0ZWQuCi0gICAgICAgIHJldHVybiBudWxscHRyOworI2lmIENQVShBUk02NCkKKyAgICAg
ICAgLy8gT09QUzogcGlwZSB0aHJvdWdoIGxvY2sgdG8gYWxsb2NhdG9ycworICAgICAgICBhdXRv
IGxvY2tIb2xkZXIgPSBob2xkTG9jayhnZXRMb2NrKCkpOworICAgICAgICBSZWZQdHI8RXhlY3V0
YWJsZU1lbW9yeUhhbmRsZT4gcmVzdWx0OworICAgICAgICAvL2ZvckVhY2hBbGxvY2F0b3IoWyZd
IChSZWdpb25BbGxvY2F0b3ImIGFsbG9jYXRvcikgeworICAgICAgICBmb3IgKFJlZ2lvbkFsbG9j
YXRvciYgYWxsb2NhdG9yIDogbV9hbGxvY2F0b3JzKSB7CisgICAgICAgICAgICByZXN1bHQgPSBh
bGxvY2F0b3IuYWxsb2NhdGUoc2l6ZUluQnl0ZXMsIG93bmVyVUlEKTsKKyAgICAgICAgICAgIGlm
IChyZXN1bHQpCisgICAgICAgICAgICAgICAgcmV0dXJuIEl0ZXJhdGlvblN0YXR1czo6RG9uZTsK
KyAgICAgICAgICAgIHJldHVybiBJdGVyYXRpb25TdGF0dXM6OkNvbnRpbnVlOworICAgICAgICB9
CisgICAgICAgIC8vfSk7CisjZWxzZQorICAgICAgICByZXR1cm4gbV9hbGxvY2F0b3IuYWxsb2Nh
dGUoc2l6ZUluQnl0ZXMsIG93bmVyVUlEKTsKKyNlbmRpZgogICAgIH0KIAotICAgIHZvaWQgbm90
aWZ5TmVlZFBhZ2Uodm9pZCogcGFnZSwgc2l6ZV90IGNvdW50KSBvdmVycmlkZQorICAgIExvY2sm
IGdldExvY2soKSB7IHJldHVybiBtX2xvY2s7IH0KKworICAgIC8vIE5vbiBhdG9taWMKKyAgICBz
aXplX3QgYnl0ZXNBbGxvY2F0ZWQoKSAKKyAgICB7CisgICAgICAgIHNpemVfdCByZXN1bHQgPSAw
OworICAgICAgICBmb3JFYWNoQWxsb2NhdG9yKFsmXSAoQWxsb2NhdG9yJiBhbGxvY2F0b3IpIHsK
KyAgICAgICAgICAgIHJlc3VsdCArPSBhbGxvY2F0b3IuYnl0ZXNBbGxvY2F0ZWQoKTsKKyAgICAg
ICAgfSk7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorICAgIHNpemVfdCBieXRlc1Jl
c2VydmVkKCkgCisgICAgeworICAgICAgICBzaXplX3QgcmVzdWx0ID0gMDsKKyAgICAgICAgZm9y
RWFjaEFsbG9jYXRvcihbJl0gKEFsbG9jYXRvciYgYWxsb2NhdG9yKSB7CisgICAgICAgICAgICBy
ZXN1bHQgKz0gYWxsb2NhdG9yLmJ5dGVzUmVzZXJ2ZWQoKTsKKyAgICAgICAgfSk7CisgICAgICAg
IHJldHVybiByZXN1bHQ7CisgICAgfQorICAgIHNpemVfdCBieXRlc0NvbW1pdHRlZCgpCiAgICAg
ewotICAgICAgICBtX3Jlc2VydmF0aW9uLmNvbW1pdChwYWdlLCBwYWdlU2l6ZSgpICogY291bnQp
OworICAgICAgICBzaXplX3QgcmVzdWx0ID0gMDsKKyAgICAgICAgZm9yRWFjaEFsbG9jYXRvcihb
Jl0gKEFsbG9jYXRvciYgYWxsb2NhdG9yKSB7CisgICAgICAgICAgICByZXN1bHQgKz0gYWxsb2Nh
dG9yLmJ5dGVzQ29tbWl0dGVkKCk7CisgICAgICAgIH0pOworICAgICAgICByZXR1cm4gcmVzdWx0
OworICAgIH0KKworICAgIGJvb2wgaXNJbkFsbG9jYXRlZE1lbW9yeShjb25zdCBBYnN0cmFjdExv
Y2tlciYgbG9ja2VyLCB2b2lkKiBhZGRyZXNzKQorICAgIHsKKyAgICAgICAgYm9vbCByZXN1bHQg
PSBmYWxzZTsKKyAgICAgICAgZm9yRWFjaEFsbG9jYXRvcihbJl0gKEFsbG9jYXRvciYgYWxsb2Nh
dG9yKSB7CisgICAgICAgICAgICBpZiAoYWxsb2NhdG9yLmlzSW5BbGxvY2F0ZWRNZW1vcnkobG9j
a2VyLCBhZGRyZXNzKSkgeworICAgICAgICAgICAgICAgIHJlc3VsdCA9IHRydWU7CisgICAgICAg
ICAgICAgICAgcmV0dXJuIEl0ZXJhdGlvblN0YXR1czo6RG9uZTsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIHJldHVybiBJdGVyYXRpb25TdGF0dXM6OkNvbnRpbnVlOworICAgICAgICB9KTsK
KworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKworI2lmIEVOQUJMRShNRVRBX0FMTE9D
QVRPUl9QUk9GSUxFKQorICAgIHZvaWQgZHVtcFByb2ZpbGUoKQorICAgIHsKKyAgICAgICAgZm9y
RWFjaEFsbG9jYXRvcihbJl0gKEFsbG9jYXRvciYgYWxsb2NhdG9yKSB7CisgICAgICAgICAgICBh
bGxvY2F0b3IuZHVtcFByb2ZpbGUoKTsKKyAgICAgICAgfSk7CisgICAgfQorI2VuZGlmCisKKyAg
ICB2b2lkIG5vdGlmeUNvZGVQcm9maWxpbmcoKQorICAgIHsKKyAgICAgICAgZm9yRWFjaEFsbG9j
YXRvcihbJl0gKEFsbG9jYXRvciYgYWxsb2NhdG9yKSB7CisgICAgICAgICAgICBDb2RlUHJvZmls
aW5nOjpub3RpZnlBbGxvY2F0b3IoJmFsbG9jYXRvcik7CisgICAgICAgIH0pOworICAgIH0KKwor
ICAgIE1ldGFBbGxvY2F0b3I6OlN0YXRpc3RpY3MgY3VycmVudFN0YXRpc3RpY3MoKQorICAgIHsK
KyAgICAgICAgLy8gT09QUzogbWFrZSBhdG9taWMgYnkgaG9sZGluZyBsb2NrLi4uCisgICAgICAg
IE1ldGFBbGxvY2F0b3I6OlN0YXRpc3RpY3MgcmVzdWx0IHsgMCwgMCwgMCB9OworICAgICAgICBm
b3JFYWNoQWxsb2NhdG9yKFsmXSAoQWxsb2NhdG9yJiBhbGxvY2F0b3IpIHsKKyAgICAgICAgICAg
IGF1dG8gYWxsb2NhdG9yU3RhdHMgPSBhbGxvY2F0b3IuY3VycmVudFN0YXRpc3RpY3MoKTsKKyAg
ICAgICAgICAgIHJlc3VsdC5ieXRlc0FsbG9jYXRlZCArPSBhbGxvY2F0b3JTdGF0cy5ieXRlc0Fs
bG9jYXRlZDsKKyAgICAgICAgICAgIHJlc3VsdC5ieXRlc1Jlc2VydmVkICs9IGFsbG9jYXRvclN0
YXRzLmJ5dGVzUmVzZXJ2ZWQ7CisgICAgICAgICAgICByZXN1bHQuYnl0ZXNDb21taXR0ZWQgKz0g
YWxsb2NhdG9yU3RhdHMuYnl0ZXNDb21taXR0ZWQ7CisgICAgICAgIH0pOworICAgICAgICByZXR1
cm4gcmVzdWx0OworICAgIH0KKworI2lmIENQVShBUk02NCkKK3ByaXZhdGU6CisgICAgUmVnaW9u
QWxsb2NhdG9yKiBmaW5kUmVnaW9uKHVpbnRwdHJfdCBwdHIpCisgICAgeworICAgICAgICBSZWdp
b25BbGxvY2F0b3IqIHJlc3VsdCA9IG51bGxwdHI7CisgICAgICAgIGZvckVhY2hBbGxvY2F0b3Io
WyZdIChSZWdpb25BbGxvY2F0b3ImIGFsbG9jYXRvcikgeworICAgICAgICAgICAgaWYgKGFsbG9j
YXRvci5zdGFydCA8PSBwdHIgJiYgcHRyIDwgYWxsb2NhdG9yLmVuZCkgeworICAgICAgICAgICAg
ICAgIHJlc3VsdCA9ICZhbGxvY2F0b3I7CisgICAgICAgICAgICAgICAgcmV0dXJuIEl0ZXJhdGlv
blN0YXR1czo6RG9uZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybiBJdGVyYXRp
b25TdGF0dXM6OkNvbnRpbnVlOworICAgICAgICB9KTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsK
KyAgICB9CisKKyAgICB2b2lkKiBpc2xhbmRGb3JKdW1wTG9jYXRpb24odWludHB0cl90IGp1bXBM
b2NhdGlvbiwgdWludHB0cl90IG9sZFRhcmdldCkKKyAgICB7CisgICAgICAgIFJlZ2lvbkFsbG9j
YXRvciogYWxsb2NhdG9yID0gZmluZFJlZ2lvbihiaXR3aXNlX2Nhc3Q8dm9pZCo+KGp1bXBMb2Nh
dGlvbikpOworICAgICAgICBSRUxFQVNFX0FTU0VSVChhbGxvY2F0b3IpOworCisgICAgICAgIC8v
IElmIHdlIHdlcmUgYWxyZWFkeSBhbiBpc2xhbmQsIHdlIGNhbiBqdXN0IHJldXNlIGl0LgorICAg
ICAgICBpZiAoYWxsb2NhdG9yLT5pc2xhbmRCZWdpbigpIDw9IG9sZFRhcmdldCAmJiBvbGRUYXJn
ZXQgPCBhbGxvY2F0b3ItPmVuZCkgeworICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoYWxsb2Nh
dG9yLT5qdW1wTG9jYXRpb25zVG9Jc2xhbmRzLmNvbnRhaW5zKGp1bXBMb2NhdGlvbikpOworICAg
ICAgICAgICAgcmV0dXJuIGJpdHdpc2VfY2FzdDx2b2lkKj4ob2xkVGFyZ2V0KTsKKyAgICAgICAg
fQorCisgICAgICAgIHZvaWQqIHJlc3VsdCA9IGFsbG9jYXRvci0+YWxsb2NhdGVJc2xhbmQoKTsK
KyAgICAgICAgYWxsb2NhdG9yLT5qdW1wTG9jYXRpb25zVG9Jc2xhbmRzLmFwcGVuZChqdW1wTG9j
YXRpb24pOworICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgIH0KIAotICAgIHZvaWQgbm90aWZ5
UGFnZUlzRnJlZSh2b2lkKiBwYWdlLCBzaXplX3QgY291bnQpIG92ZXJyaWRlCitwdWJsaWM6CisK
KyAgICB2b2lkKiBtYWtlSXNsYW5kKHVpbnRwdHJfdCBqdW1wTG9jYXRpb24sIHVpbnRwdHJfdCBv
bGRUYXJnZXQsIHVpbnRwdHJfdCBuZXdUYXJnZXQpCiAgICAgewotICAgICAgICBtX3Jlc2VydmF0
aW9uLmRlY29tbWl0KHBhZ2UsIHBhZ2VTaXplKCkgKiBjb3VudCk7CisgICAgICAgIGF1dG8gbG9j
a0hvbGRlciA9IGhvbGRMb2NrKGdldExvY2soKSk7CisKKyAgICAgICAgLy8gT09QUzogdGhyZWFk
IHRoaXMgdGhyb3VnaCBhIHNlcmllcyBvZiBqdW1wcy4KKyAgICAgICAgdm9pZCogaXNsYW5kID0g
aXNsYW5kRm9ySnVtcExvY2F0aW9uKGp1bXBMb2NhdGlvbiwgb2xkVGFyZ2V0KTsKKyAgICAgICAg
Q0NhbGxIZWxwZXJzIGppdDsKKyAgICAgICAgaml0Lm1vdmUoQ0NhbGxIZWxwZXJzOjpUcnVzdGVk
SW1tUHRyKG5ld1RhcmdldCksIENDYWxsSGVscGVyczo6ZGF0YVRlbXBSZWdpc3Rlcik7CisgICAg
ICAgIGppdC5mYXJKdW1wKENDYWxsSGVscGVyczo6ZGF0YVRlbXBSZWdpc3RlciwgTm9QdHJUYWcp
OworCisgICAgICAgIExpbmtCdWZmZXIgbGlua0J1ZmZlcihqaXQsIE1hY3JvQXNzZW1ibGVyQ29k
ZVB0cjxOb1B0clRhZz4oaXNsYW5kKSwgaXNsYW5kU2l6ZUluQnl0ZXMsIEpJVENvbXBpbGF0aW9u
TXVzdFN1Y2NlZWQsIGZhbHNlKTsKKyAgICAgICAgRklOQUxJWkVfQ09ERShsaW5rQnVmZmVyLCBO
b1B0clRhZywgIkp1bXAgSXNsYW5kOiAlbHUiLCBqdW1wTG9jYXRpb24pOworICAgICAgICByZXR1
cm4gaXNsYW5kOwogICAgIH0KKyNlbmRpZgogCiBwcml2YXRlOgorICAgIGNsYXNzIEFsbG9jYXRv
ciA6IHB1YmxpYyBNZXRhQWxsb2NhdG9yIHsKKyAgICBwdWJsaWM6CisgICAgICAgIEFsbG9jYXRv
cigpCisgICAgICAgICAgICA6IE1ldGFBbGxvY2F0b3Ioaml0QWxsb2NhdGlvbkdyYW51bGUsIHBh
Z2VTaXplKCkpIC8vIHJvdW5kIHVwIGFsbCBhbGxvY2F0aW9ucyB0byAzMiBieXRlcworICAgICAg
ICB7CisgICAgICAgIH0KKworICAgICAgICBGcmVlU3BhY2VQdHIgYWxsb2NhdGVOZXdTcGFjZShz
aXplX3QmKSBvdmVycmlkZQorICAgICAgICB7CisgICAgICAgICAgICAvLyBXZSdyZSBvcGVyYXRp
bmcgaW4gYSBmaXhlZCBwb29sLCBzbyBuZXcgYWxsb2NhdGlvbiBpcyBhbHdheXMgcHJvaGliaXRl
ZC4KKyAgICAgICAgICAgIHJldHVybiBudWxscHRyOworICAgICAgICB9CisKKyAgICAgICAgdm9p
ZCBub3RpZnlOZWVkUGFnZSh2b2lkKiBwYWdlLCBzaXplX3QgY291bnQpIG92ZXJyaWRlCisgICAg
ICAgIHsKKyAgICAgICAgICAgIG1fZml4ZWRBbGxvY2F0b3ItPm1fcmVzZXJ2YXRpb24uY29tbWl0
KHBhZ2UsIHBhZ2VTaXplKCkgKiBjb3VudCk7CisgICAgICAgIH0KKworICAgICAgICB2b2lkIG5v
dGlmeVBhZ2VJc0ZyZWUodm9pZCogcGFnZSwgc2l6ZV90IGNvdW50KSBvdmVycmlkZQorICAgICAg
ICB7CisgICAgICAgICAgICBtX2ZpeGVkQWxsb2NhdG9yLT5tX3Jlc2VydmF0aW9uLmRlY29tbWl0
KHBhZ2UsIHBhZ2VTaXplKCkgKiBjb3VudCk7CisgICAgICAgIH0KKworICAgICAgICBGaXhlZFZN
UG9vbEV4ZWN1dGFibGVBbGxvY2F0b3IqIG1fZml4ZWRBbGxvY2F0b3I7CisgICAgfTsKKworI2lm
IENQVShBUk02NCkgLy8gT09QUzogY2FuJ3QgZG8gdGhpcyBmb3IgYXJtNjRfMzIKKyAgICBjbGFz
cyBSZWdpb25BbGxvY2F0b3IgOiBwdWJsaWMgQWxsb2NhdG9yIHsKKyAgICBwdWJsaWM6CisgICAg
ICAgIC8vICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgICAgLy8g
IHwgYWxsb2NhdG9yIC0tPiAgICAgPC0tIGlzbGFuZCAgICAgIHwKKyAgICAgICAgLy8gIHwgICAg
ICAgICAgICAgXiAgICAgXiAgICAgICAgICAgICAgIHwKKyAgICAgICAgLy8gIHwgICAgICAgICAg
ICAgfCAgICAgfCAgICAgICAgICAgICAgIHwKKyAgICAgICAgLy8gIHwgYWxsb2NhdG9yU2l6ZSAg
ICAgcmVzZXJ2ZWRJc2xhbmRzIHwKKyAgICAgICAgLy8gIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0KKyAgICAgICAgLy8gIGFsbG9jYXRvckVuZCA8PSBpc2xhbmQgYmVnaW4K
KworICAgICAgICB1aW50cHRyX3QgaXNsYW5kQmVnaW4oKQorICAgICAgICB7CisgICAgICAgICAg
ICAvLyBbc3RhcnQsIGFsbG9jYXRvckVuZCkKKyAgICAgICAgICAgIHJldHVybiBlbmQgLSBpc2xh
bmRSZWdpb25TaXplOworICAgICAgICB9CisKKyAgICAgICAgdWludHB0cl90IGFsbG9jYXRvclNp
emUoKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gaXNsYW5kQmVnaW4oKSAtIHN0YXJ0
OworICAgICAgICB9CisKKyAgICAgICAgLy8gT09QUzogcGFzcyBMb2NrSG9sZGVyIHRvIG1ha2Ug
aXQgb2J2aW91cyBsb2NrIGlzIGhlbGQuCisgICAgICAgIEZyZWVTcGFjZVB0ciBhbGxvY2F0ZU5l
d1NwYWNlKHNpemVfdCYgbnVtUGFnZXMpIG92ZXJyaWRlCisgICAgICAgIHsKKyAgICAgICAgICAg
IHJldHVybiBudWxscHRyOworICAgICAgICB9CisKKyAgICAgICAgc2l6ZV90IGlzbGFuZHNQZXJQ
YWdlKCkKKyAgICAgICAgeworICAgICAgICAgICAgc2l6ZV90IGlzbGFuZHNQZXJQYWdlID0gcGFn
ZVNpemUoKSAvIGlzbGFuZFNpemVJbkJ5dGVzOworICAgICAgICAgICAgQVNTRVJUKGlzbGFuZHNQ
ZXJQYWdlICogaXNsYW5kU2l6ZUluQnl0ZXMgPT0gcGFnZVNpemUoKSk7IC8vIHdlIHJlbHkgb24g
cGVyZmVjdCBkaXZpc2lvbiBmb3IgZmluZGluZyB3aGljaCBiaXQgYSBwb2ludGVyIGlzLgorICAg
ICAgICAgICAgUkVMRUFTRV9BU1NFUlQoaXNQb3dlck9mVHdvKGlzbGFuZHNQZXJQYWdlKSk7Cisg
ICAgICAgICAgICByZXR1cm4gaXNsYW5kc1BlclBhZ2U7CisgICAgICAgIH0KKworICAgICAgICAv
KgorICAgICAgICAvLyBPT1BTOiBwYXNzIExvY2tIb2xkZXIgdG8gbWFrZSBpdCBvYnZpb3VzIGxv
Y2sgaXMgaGVsZC4KKyAgICAgICAgYm9vbCB0cnlBbGxvY2F0ZUlzbGFuZHMoc2l6ZV90IG51bUlz
bGFuZHNUb0FsbG9jYXRlKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAoIW51bUlzbGFuZHNU
b0FsbG9jYXRlKQorICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOworCisgICAgICAgICAgICB1
aW50cHRyX3QgbnVtRnJlZUlzbGFuZHMgPSBudW1SZXNlcnZlZElzbGFuZHMgLSBudW1BbGxvY2F0
ZWRJc2xhbmRzOyAKKyAgICAgICAgICAgIGlmIChudW1GcmVlSXNsYW5kcyA+PSBudW1Jc2xhbmRz
VG9BbGxvY2F0ZSkgeworICAgICAgICAgICAgICAgIG51bUFsbG9jYXRlZElzbGFuZHMgKz0gbnVt
SXNsYW5kc1RvQWxsb2NhdGU7CisgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQobnVtQWxs
b2NhdGVkSXNsYW5kcyA8PSBudW1SZXNlcnZlZElzbGFuZHMpOyAvLyBPT1BTOiBjaGVja0NvbnNp
c3RlbmN5PworICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAgICAgfSAKKwor
ICAgICAgICAgICAgc2l6ZV90IGlzbGFuZHNQZXJQYWdlID0gdGhpcy0+aXNsYW5kc1BlclBhZ2Uo
KTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgdWludHB0cl90IGlzbGFuZHNUb1Jlc2VydmUg
PSBudW1Jc2xhbmRzVG9BbGxvY2F0ZSAtIG51bUZyZWVJc2xhbmRzOworCisgICAgICAgICAgICBp
c2xhbmRzVG9SZXNlcnZlID0gcm91bmRVcFRvTXVsdGlwbGVPZihpc2xhbmRzUGVyUGFnZSwgaXNs
YW5kc1RvUmVzZXJ2ZSk7CisgICAgICAgICAgICB1aW50cHRyX3QgbmV3SXNsYW5kQmVnaW4gPSBl
bmQgLSAoKG51bVJlc2VydmVkSXNsYW5kcyArIGlzbGFuZHNUb1Jlc2VydmUpICogaXNsYW5kU2l6
ZUluQnl0ZXMpOworICAgICAgICAgICAgaWYgKG5ld0lzbGFuZEJlZ2luIDwgYWxsb2NhdG9yRW5k
KCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgICAgICAgICBudW1BbGxv
Y2F0ZWRJc2xhbmRzICs9IG51bUlzbGFuZHNUb0FsbG9jYXRlOworICAgICAgICAgICAgbnVtUmVz
ZXJ2ZWRJc2xhbmRzICs9IGlzbGFuZHNUb1Jlc2VydmU7CisgICAgICAgICAgICBSRUxFQVNFX0FT
U0VSVChudW1BbGxvY2F0ZWRJc2xhbmRzIDw9IG51bVJlc2VydmVkSXNsYW5kcyk7CisgICAgICAg
ICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorCisgICAgICAgIC8vIE9PUFM6IHRha2UgbG9j
a2hvbGRlcgorICAgICAgICB2b2lkIGRlYWxsb2NhdGVJc2xhbmRzKHNpemVfdCBudW1Jc2xhbmRz
VG9GcmVlKQorICAgICAgICB7CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChudW1Jc2xhbmRz
VG9GcmVlIDw9IG51bUFsbG9jYXRlZElzbGFuZHMpOworICAgICAgICAgICAgUkVMRUFTRV9BU1NF
UlQobnVtQWxsb2NhdGVkSXNsYW5kcyA8PSBudW1SZXNlcnZlZElzbGFuZHMpOyAvLyBPT1BTOiBj
aGVja0NvbnNpc3RlbmN5CisgICAgICAgICAgICBudW1BbGxvY2F0ZWRJc2xhbmRzIC09IG51bUlz
bGFuZHNUb0ZyZWU7CisgICAgICAgIH0KKyAgICAgICAgKi8KKworICAgICAgICAvLyBPT1BTOiBs
b2NraG9sZGVyLgorICAgICAgICB2b2lkKiBhbGxvY2F0ZUlzbGFuZCgpCisgICAgICAgIHsKKyAg
ICAgICAgICAgIGF1dG8gZmluZFJlc3VsdCA9IFsmXSAoKSAtPiB2b2lkKiB7CisgICAgICAgICAg
ICAgICAgc2l6ZV90IHJlc3VsdEJpdCA9IGlzbGFuZEJpdHMuZmluZENsZWFyQml0KDApOworICAg
ICAgICAgICAgICAgIGlmIChyZXN1bHRCaXQgPT0gaXNsYW5kQml0cy5zaXplKCkpCisgICAgICAg
ICAgICAgICAgICAgIHJldHVybiBudWxscHRyOworICAgICAgICAgICAgICAgIGlzbGFuZEJpdHNb
cmVzdWx0Qml0XSA9IHRydWU7CisgICAgICAgICAgICAgICAgdWludHB0cl90IHJlc3VsdCA9IGVu
ZCAtICgocmVzdWx0Qml0IC0gMSkgKiBpc2xhbmRTaXplSW5CeXRlcyk7IAorICAgICAgICAgICAg
ICAgIHJldHVybiBiaXR3aXNlX2Nhc3Q8dm9pZCo+KHJlc3VsdCk7CisgICAgICAgICAgICB9Owor
CisgICAgICAgICAgICBpZiAodm9pZCogcmVzdWx0ID0gZmluZFJlc3VsdCgpKQorICAgICAgICAg
ICAgICAgIHJldHVybiByZXN1bHQ7CisKKyAgICAgICAgICAgIGlzbGFuZEJpdHMuZW5zdXJlU2l6
ZShpc2xhbmRCaXRzLnNpemUoKSArIGlzbGFuZHNQZXJQYWdlKCkpOworICAgICAgICAgICAgUkVM
RUFTRV9BU1NFUlQoaXNsYW5kQml0cy5zaXplKCkgPD0gbWF4SXNsYW5kc1BlclJlZ2lvbik7IAor
CisgICAgICAgICAgICB1aW50cHRyX3QgcGFnZUJlZ2luID0gZW5kIC0gKGlzbGFuZEJpdHMuc2l6
ZSgpICogaXNsYW5kU2l6ZUluQnl0ZXMpOyAvLyBbaXNsYW5kQmVnaW4sIGVuZCkKKyAgICAgICAg
ICAgIG1fZml4ZWRBbGxvY2F0b3ItPm1fcmVzZXJ2YXRpb24uY29tbWl0KGJpdHdpc2VfY2FzdDx2
b2lkKj4ocGFnZUJlZ2luKSwgcGFnZVNpemUoKSk7CisgICAgICAgICAgICB2b2lkKiByZXN1bHQg
PSBmaW5kUmVzdWx0KCk7CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChyZXN1bHQpOworICAg
ICAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAgfQorCisgICAgICAgIC8vIFtzdGFydCwg
ZW5kKQorICAgICAgICB1aW50cHRyX3Qgc3RhcnQ7CisgICAgICAgIHVpbnRwdHJfdCBlbmQ7CisK
KyAgICAgICAgc2l6ZV90IG51bUFsbG9jYXRlZElzbGFuZHMgeyAwIH07IC8vIDw9IG51bVJlc2Vy
dmVkSXNsYW5kcworICAgICAgICBGYXN0Qml0VmVjdG9yIGlzbGFuZEJpdHM7CisgICAgICAgIFZl
Y3Rvcjx1aW50cHRyX3Q+IGp1bXBMb2NhdGlvbnNUb0lzbGFuZHM7IC8vIE9PUFM6IHVzZSByZWQg
YmxhY2sgdHJlZSBhbmQgbWFrZSBpdCBmYXN0IHRvIHJlbW92ZSBhbGwgZW50cmllcyBtYXRjaGlu
Zy4KKyAgICB9OworI2VuZGlmCisKKyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgRnVuY3Rpb24+Cisg
ICAgdm9pZCBmb3JFYWNoQWxsb2NhdG9yKEZ1bmN0aW9uIGZ1bmN0aW9uKQorICAgIHsKKyNpZiBD
UFUoQVJNNjQpCisgICAgICAgIGZvciAoUmVnaW9uQWxsb2NhdG9yJiBhbGxvY2F0b3IgOiBtX2Fs
bG9jYXRvcnMpIHsKKyAgICAgICAgICAgIGlmIGNvbnN0ZXhwciAoc3RkOjppc19zYW1lPEl0ZXJh
dGlvblN0YXR1cywgc3RkOjpyZXN1bHRfb2ZfdDxGdW5jdGlvbj4+Ojp2YWx1ZSkgeworICAgICAg
ICAgICAgICAgIGlmIChmdW5jdGlvbihhbGxvY2F0b3IpID09IEl0ZXJhdGlvblN0YXR1czo6RG9u
ZSkKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9IGVsc2UgeworICAg
ICAgICAgICAgICAgIHN0YXRpY19hc3NlcnQoc3RkOjppc19zYW1lPHZvaWQsIHN0ZDo6cmVzdWx0
X29mX3Q8RnVuY3Rpb24+Pjo6dmFsdWUpOworICAgICAgICAgICAgICAgIGZ1bmN0aW9uKGFsbG9j
YXRvcik7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyNlbHNlCisgICAgICAgIGZ1bmN0aW9u
KG1fYWxsb2NhdG9yKTsKKyNlbmRpZgorICAgIH0KKworICAgIExvY2sgbV9sb2NrOwogICAgIFBh
Z2VSZXNlcnZhdGlvbiBtX3Jlc2VydmF0aW9uOworI2lmIENQVShBUk02NCkKKyAgICBzdGQ6OmFy
cmF5PFJlZ2lvbkFsbG9jYXRvciwgbnVtYmVyT2ZSZWdpb25zPiBtX2FsbG9jYXRvcnM7CisjZWxz
ZQorICAgIEFsbG9jYXRvciBtX2FsbG9jYXRvcjsKKyNlbmRpZgogfTsKIAotRml4ZWRWTVBvb2xF
eGVjdXRhYmxlQWxsb2NhdG9yOjp+Rml4ZWRWTVBvb2xFeGVjdXRhYmxlQWxsb2NhdG9yKCkKLXsK
LSAgICBtX3Jlc2VydmF0aW9uLmRlYWxsb2NhdGUoKTsKLX0KLQogLy8gS2VlcCB0aGlzIHBvaW50
ZXIgaW4gYSBtdXRhYmxlIGdsb2JhbCB2YXJpYWJsZSB0byBoZWxwIExlYWtzIGZpbmQgaXQuCiAv
LyBCdXQgd2UgZG8gbm90IHVzZSB0aGlzIHBvaW50ZXIuCiBzdGF0aWMgRml4ZWRWTVBvb2xFeGVj
dXRhYmxlQWxsb2NhdG9yKiBnbG9iYWxGaXhlZFZNUG9vbEV4ZWN1dGFibGVBbGxvY2F0b3JUb1dv
cmtBcm91bmRMZWFrcyA9IG51bGxwdHI7CkBAIC00MTcsNyArNzI2LDcgQEAgdm9pZCBFeGVjdXRh
YmxlQWxsb2NhdG9yOjppbml0aWFsaXplVW5kZQogICAgIFJFTEVBU0VfQVNTRVJUKCFnX2pzY0Nv
bmZpZy5maXhlZFZNUG9vbEV4ZWN1dGFibGVBbGxvY2F0b3IpOwogICAgIGdfanNjQ29uZmlnLmZp
eGVkVk1Qb29sRXhlY3V0YWJsZUFsbG9jYXRvciA9IG5ldyBGaXhlZFZNUG9vbEV4ZWN1dGFibGVB
bGxvY2F0b3IoKTsKICAgICBnbG9iYWxGaXhlZFZNUG9vbEV4ZWN1dGFibGVBbGxvY2F0b3JUb1dv
cmtBcm91bmRMZWFrcyA9IGdfanNjQ29uZmlnLmZpeGVkVk1Qb29sRXhlY3V0YWJsZUFsbG9jYXRv
cjsKLSAgICBDb2RlUHJvZmlsaW5nOjpub3RpZnlBbGxvY2F0b3IoZ19qc2NDb25maWcuZml4ZWRW
TVBvb2xFeGVjdXRhYmxlQWxsb2NhdG9yKTsKKyAgICBnX2pzY0NvbmZpZy5maXhlZFZNUG9vbEV4
ZWN1dGFibGVBbGxvY2F0b3ItPm5vdGlmeUNvZGVQcm9maWxpbmcoKTsKIH0KIAogYm9vbCBFeGVj
dXRhYmxlQWxsb2NhdG9yOjppc1ZhbGlkKCkgY29uc3QKQEAgLTQyNSw3ICs3MzQsNyBAQCBib29s
IEV4ZWN1dGFibGVBbGxvY2F0b3I6OmlzVmFsaWQoKSBjb25zCiAgICAgRml4ZWRWTVBvb2xFeGVj
dXRhYmxlQWxsb2NhdG9yKiBhbGxvY2F0b3IgPSBnX2pzY0NvbmZpZy5maXhlZFZNUG9vbEV4ZWN1
dGFibGVBbGxvY2F0b3I7CiAgICAgaWYgKCFhbGxvY2F0b3IpCiAgICAgICAgIHJldHVybiBCYXNl
Ojppc1ZhbGlkKCk7Ci0gICAgcmV0dXJuICEhYWxsb2NhdG9yLT5ieXRlc1Jlc2VydmVkKCk7Cisg
ICAgcmV0dXJuIGFsbG9jYXRvci0+aXNWYWxpZCgpOwogfQogCiBib29sIEV4ZWN1dGFibGVBbGxv
Y2F0b3I6OnVuZGVyTWVtb3J5UHJlc3N1cmUoKQpAQCAtNTM5LDYgKzg0OCwxOCBAQCB2b2lkIEV4
ZWN1dGFibGVBbGxvY2F0b3I6OmR1bXBQcm9maWxlKCkKIH0KICNlbmRpZgogCisjaWYgQ1BVKEFS
TTY0KQordm9pZCogRXhlY3V0YWJsZUFsbG9jYXRvcjo6Z2V0SnVtcElzbGFuZFRvKHZvaWQqIGZy
b20sIHZvaWQqIG9sZERlc3RpbmF0aW9uLCB2b2lkKiBuZXdEZXN0aW5hdGlvbikKK3sKKyAgICBG
aXhlZFZNUG9vbEV4ZWN1dGFibGVBbGxvY2F0b3IqIGFsbG9jYXRvciA9IGdfanNjQ29uZmlnLmZp
eGVkVk1Qb29sRXhlY3V0YWJsZUFsbG9jYXRvcjsKKyAgICBpZiAoIWFsbG9jYXRvcikgeworICAg
ICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOyAvLyBPT1BTOiBpcyB0aGlzIGNvcnJl
Y3Q/CisgICAgfQorCisgICAgcmV0dXJuIGFsbG9jYXRvci0+bWFrZUlzbGFuZChiaXR3aXNlX2Nh
c3Q8dWludHB0cl90PihqdW1wTG9jYXRpb24pLCBiaXR3aXNlX2Nhc3Q8dWludHB0cl90PihvbGRE
ZXN0aW5hdGlvbiksIGJpdHdpc2VfY2FzdDx1aW50cHRyX3Q+KG5ld0Rlc3RpbmF0aW9uKSk7Cit9
CisjZW5kaWYKKwogdm9pZCogc3RhcnRPZkZpeGVkRXhlY3V0YWJsZU1lbW9yeVBvb2xJbXBsKCkK
IHsKICAgICBGaXhlZFZNUG9vbEV4ZWN1dGFibGVBbGxvY2F0b3IqIGFsbG9jYXRvciA9IGdfanNj
Q29uZmlnLmZpeGVkVk1Qb29sRXhlY3V0YWJsZUFsbG9jYXRvcjsKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvRXhlY3V0YWJsZUFsbG9jYXRvci5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvRXhlY3V0YWJsZUFsbG9jYXRvci5oCShyZXZpc2lvbiAyNTc4
NjYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0V4ZWN1dGFibGVBbGxvY2F0b3IuaAko
d29ya2luZyBjb3B5KQpAQCAtMTg0LDYgKzE4NCwxMCBAQCBwdWJsaWM6CiAKICAgICBMb2NrJiBn
ZXRMb2NrKCkgY29uc3Q7CiAKKyNpZiBDUFUoQVJNNjQpCisgICAgdm9pZCogZ2V0SnVtcElzbGFu
ZFRvKHZvaWQqIGZyb20sIHZvaWQqIG9sZERlc3RpbmF0aW9uLCB2b2lkKiBuZXdEZXN0aW5hdGlv
bik7CisjZW5kaWYKKwogcHJpdmF0ZToKICAgICBFeGVjdXRhYmxlQWxsb2NhdG9yKCkgPSBkZWZh
dWx0OwogICAgIH5FeGVjdXRhYmxlQWxsb2NhdG9yKCkgPSBkZWZhdWx0OwpJbmRleDogU291cmNl
L1dURi93dGYvQml0VmVjdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvQml0VmVj
dG9yLmgJKHJldmlzaW9uIDI1Nzg2NikKKysrIFNvdXJjZS9XVEYvd3RmL0JpdFZlY3Rvci5oCSh3
b3JraW5nIGNvcHkpCkBAIC0xMDgsNyArMTA4LDcgQEAgcHVibGljOiAKICAgICB7CiAgICAgICAg
IGlmIChudW1CaXRzIDw9IHNpemUoKSkKICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgcmVz
aXplT3V0T2ZMaW5lKG51bUJpdHMpOworICAgICAgICByZXNpemVPdXRPZkxpbmVyZXNpemVPdXRP
ZkxpbmUobnVtQml0cyk7CiAgICAgfQogICAgIAogICAgIC8vIExpa2UgZW5zdXJlU2l6ZSgpLCBi
dXQgc3VwcG9ydHMgcmVkdWNpbmcgdGhlIHNpemUgb2YgdGhlIGJpdHZlY3Rvci4K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>392822</attachid>
            <date>2020-03-06 17:53:34 -0800</date>
            <delta_ts>2020-03-06 19:00:15 -0800</delta_ts>
            <desc>WIP</desc>
            <filename>c-backup.diff</filename>
            <type>text/plain</type>
            <size>22770</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvQVJNNjRBc3NlbWJsZXIuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL0FSTTY0QXNzZW1i
bGVyLmgJKHJldmlzaW9uIDI1Nzg2NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJs
ZXIvQVJNNjRBc3NlbWJsZXIuaAkod29ya2luZyBjb3B5KQpAQCAtNzgzLDEyICs3ODMsMTMgQEAg
cHVibGljOgogICAgICAgICBpbnNuKGRhdGFQcm9jZXNzaW5nMlNvdXJjZShEQVRBU0laRSwgcm0s
IERhdGFPcF9BU1JWLCBybiwgcmQpKTsKICAgICB9CiAKLSAgICBBTFdBWVNfSU5MSU5FIHZvaWQg
YihpbnQzMl90IG9mZnNldCA9IDApCisgICAgQUxXQVlTX0lOTElORSB2b2lkIGIoLyppbnQzMl90
IG9mZnNldCA9IDAqLykKICAgICB7Ci0gICAgICAgIEFTU0VSVCghKG9mZnNldCAmIDMpKTsKLSAg
ICAgICAgb2Zmc2V0ID4+PSAyOwotICAgICAgICBBU1NFUlQob2Zmc2V0ID09IChvZmZzZXQgPDwg
NikgPj4gNik7Ci0gICAgICAgIGluc24odW5jb25kaXRpb25hbEJyYW5jaEltbWVkaWF0ZShmYWxz
ZSwgb2Zmc2V0KSk7CisgICAgICAgIC8vQVNTRVJUKCEob2Zmc2V0ICYgMykpOworICAgICAgICAv
L29mZnNldCA+Pj0gMjsKKyAgICAgICAgLy9BU1NFUlQob2Zmc2V0ID09IChvZmZzZXQgPDwgNikg
Pj4gNik7CisgICAgICAgIC8vaW5zbih1bmNvbmRpdGlvbmFsQnJhbmNoSW1tZWRpYXRlKGZhbHNl
LCBvZmZzZXQpKTsKKyAgICAgICAgaW5zbih1bmNvbmRpdGlvbmFsQnJhbmNoSW1tZWRpYXRlKGZh
bHNlLCAwKSk7CiAgICAgfQogCiAgICAgQUxXQVlTX0lOTElORSB2b2lkIGJfY29uZChDb25kaXRp
b24gY29uZCwgaW50MzJfdCBvZmZzZXQgPSAwKQpAQCAtODMxLDExICs4MzIsMTIgQEAgcHVibGlj
OgogICAgICAgICBpbnNuKGxvZ2ljYWxTaGlmdGVkUmVnaXN0ZXIoREFUQVNJWkUsIHNldEZsYWdz
ID8gTG9naWNhbE9wX0FORFMgOiBMb2dpY2FsT3BfQU5ELCBzaGlmdCwgdHJ1ZSwgcm0sIGFtb3Vu
dCwgcm4sIHJkKSk7CiAgICAgfQogCi0gICAgQUxXQVlTX0lOTElORSB2b2lkIGJsKGludDMyX3Qg
b2Zmc2V0ID0gMCkKKyAgICBBTFdBWVNfSU5MSU5FIHZvaWQgYmwoLyppbnQzMl90IG9mZnNldCA9
IDAqLykKICAgICB7Ci0gICAgICAgIEFTU0VSVCghKG9mZnNldCAmIDMpKTsKLSAgICAgICAgb2Zm
c2V0ID4+PSAyOwotICAgICAgICBpbnNuKHVuY29uZGl0aW9uYWxCcmFuY2hJbW1lZGlhdGUodHJ1
ZSwgb2Zmc2V0KSk7CisgICAgICAgIC8vQVNTRVJUKCEob2Zmc2V0ICYgMykpOworICAgICAgICAv
L29mZnNldCA+Pj0gMjsKKyAgICAgICAgLy9pbnNuKHVuY29uZGl0aW9uYWxCcmFuY2hJbW1lZGlh
dGUodHJ1ZSwgb2Zmc2V0KSk7CisgICAgICAgIGluc24odW5jb25kaXRpb25hbEJyYW5jaEltbWVk
aWF0ZSh0cnVlLCAwKSk7CiAgICAgfQogCiAgICAgQUxXQVlTX0lOTElORSB2b2lkIGJscihSZWdp
c3RlcklEIHJuKQpAQCAtMjU4Miw2ICsyNTg0LDE0IEBAIHB1YmxpYzoKICAgICB7CiAgICAgICAg
IGludHB0cl90IG9mZnNldCA9IChyZWludGVycHJldF9jYXN0PGludHB0cl90Pih0bykgLSByZWlu
dGVycHJldF9jYXN0PGludHB0cl90Pih3aGVyZSkpID4+IDI7CiAgICAgICAgIEFTU0VSVChzdGF0
aWNfY2FzdDxpbnQ+KG9mZnNldCkgPT0gb2Zmc2V0KTsKKworICAgICAgICBpZiAoIWlzSW50PDI2
PihvZmZzZXQpKSB7CisgICAgICAgICAgICAvLyBPT1BTOiBkaXNhc3NlbWJsZSBvbGQgYnJhbmNo
IGRlc3QhCisgICAgICAgICAgICB0byA9IEV4ZWN1dGFibGVBbGxvY2F0b3I6OnNpbmdsZXRvbigp
LmdldEp1bXBJc2xhbmRUbyh3aGVyZSwgbnVsbHB0ciwgdG8pOworICAgICAgICAgICAgb2Zmc2V0
ID0gKGJpdHdpc2VfY2FzdDxpbnRwdHJfdD4odG8pIC0gYml0d2lzZV9jYXN0PGludHB0cl90Pih3
aGVyZSkpID4+IDI7CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChpc0ludDwyNj4ob2Zmc2V0
KSk7CisgICAgICAgIH0KKwogICAgICAgICBpbnQgaW5zbiA9IHVuY29uZGl0aW9uYWxCcmFuY2hJ
bW1lZGlhdGUoZmFsc2UsIHN0YXRpY19jYXN0PGludD4ob2Zmc2V0KSk7CiAgICAgICAgIFJFTEVB
U0VfQVNTRVJUKHJvdW5kVXBUb011bHRpcGxlT2Y8aW5zdHJ1Y3Rpb25TaXplPih3aGVyZSkgPT0g
d2hlcmUpOwogICAgICAgICBwZXJmb3JtSklUTWVtY3B5KHdoZXJlLCAmaW5zbiwgc2l6ZW9mKGlu
dCkpOwpAQCAtMjg3Miw3ICsyODgyLDcgQEAgcHVibGljOgogICAgICAgICAgICAgICAgIHJldHVy
biBMaW5rSnVtcENvbmRpdGlvbkRpcmVjdDsKIAogICAgICAgICAgICAgcmV0dXJuIExpbmtKdW1w
Q29uZGl0aW9uOwotICAgICAgICAgICAgfQorICAgICAgICB9CiAgICAgICAgIGNhc2UgSnVtcENv
bXBhcmVBbmRCcmFuY2g6ICB7CiAgICAgICAgICAgICBBU1NFUlQoaXM0Qnl0ZUFsaWduZWQoZnJv
bSkpOwogICAgICAgICAgICAgQVNTRVJUKGlzNEJ5dGVBbGlnbmVkKHRvKSk7CkBAIC0yOTk0LDkg
KzMwMDQsMTYgQEAgcHJvdGVjdGVkOgogICAgICAgICBBU1NFUlQoIShyZWludGVycHJldF9jYXN0
PGludHB0cl90Pih0bykgJiAzKSk7CiAgICAgICAgIGFzc2VydElzTm90VGFnZ2VkKHRvKTsKICAg
ICAgICAgYXNzZXJ0SXNOb3RUYWdnZWQoZnJvbUluc3RydWN0aW9uKTsKLSAgICAgICAgaW50cHRy
X3Qgb2Zmc2V0ID0gKHJlaW50ZXJwcmV0X2Nhc3Q8aW50cHRyX3Q+KHRvKSAtIHJlaW50ZXJwcmV0
X2Nhc3Q8aW50cHRyX3Q+KGZyb21JbnN0cnVjdGlvbikpID4+IDI7CisgICAgICAgIGludHB0cl90
IG9mZnNldCA9IChiaXR3aXNlX2Nhc3Q8aW50cHRyX3Q+KHRvKSAtIGJpdHdpc2VfY2FzdDxpbnRw
dHJfdD4oZnJvbUluc3RydWN0aW9uKSkgPj4gMjsKICAgICAgICAgQVNTRVJUKHN0YXRpY19jYXN0
PGludD4ob2Zmc2V0KSA9PSBvZmZzZXQpOwogCisgICAgICAgIGlmICghaXNJbnQ8MjY+KG9mZnNl
dCkpIHsKKyAgICAgICAgICAgIC8vIE9PUFM6IGRpc2Fzc2VtYmxlIG9sZCBicmFuY2ggZGVzdCEK
KyAgICAgICAgICAgIHRvID0gRXhlY3V0YWJsZUFsbG9jYXRvcjo6c2luZ2xldG9uKCkuZ2V0SnVt
cElzbGFuZFRvKGJpdHdpc2VfY2FzdDx2b2lkKj4oZnJvbUluc3RydWN0aW9uKSwgbnVsbHB0ciwg
dG8pOworICAgICAgICAgICAgb2Zmc2V0ID0gKGJpdHdpc2VfY2FzdDxpbnRwdHJfdD4odG8pIC0g
Yml0d2lzZV9jYXN0PGludHB0cl90Pihmcm9tSW5zdHJ1Y3Rpb24pKSA+PiAyOworICAgICAgICAg
ICAgUkVMRUFTRV9BU1NFUlQoaXNJbnQ8MjY+KG9mZnNldCkpOworICAgICAgICB9CisKICAgICAg
ICAgaW50IGluc24gPSB1bmNvbmRpdGlvbmFsQnJhbmNoSW1tZWRpYXRlKGlzQ2FsbCwgc3RhdGlj
X2Nhc3Q8aW50PihvZmZzZXQpKTsKICAgICAgICAgUkVMRUFTRV9BU1NFUlQocm91bmRVcFRvTXVs
dGlwbGVPZjxpbnN0cnVjdGlvblNpemU+KGZyb20pID09IGZyb20pOwogICAgICAgICBjb3B5KGZy
b20sICZpbnNuLCBzaXplb2YoaW50KSk7CkBAIC0zMDA4LDcgKzMwMjUsNyBAQCBwcm90ZWN0ZWQ6
CiAgICAgICAgIEFTU0VSVCghKHJlaW50ZXJwcmV0X2Nhc3Q8aW50cHRyX3Q+KGZyb20pICYgMykp
OwogICAgICAgICBBU1NFUlQoIShyZWludGVycHJldF9jYXN0PGludHB0cl90Pih0bykgJiAzKSk7
CiAgICAgICAgIGludHB0cl90IG9mZnNldCA9IChyZWludGVycHJldF9jYXN0PGludHB0cl90Pih0
bykgLSByZWludGVycHJldF9jYXN0PGludHB0cl90Pihmcm9tSW5zdHJ1Y3Rpb24pKSA+PiAyOwot
ICAgICAgICBBU1NFUlQoaXNJbnQ8MjY+KG9mZnNldCkpOworICAgICAgICAvL0FTU0VSVChpc0lu
dDwyNj4ob2Zmc2V0KSk7IC8vT09QUwogCiAgICAgICAgIGJvb2wgdXNlRGlyZWN0ID0gaXNJbnQ8
MTk+KG9mZnNldCk7CiAgICAgICAgIEFTU0VSVCh0eXBlID09IEluZGlyZWN0QnJhbmNoIHx8IHVz
ZURpcmVjdCk7CkBAIC0zMDM2LDcgKzMwNTMsNyBAQCBwcm90ZWN0ZWQ6CiAgICAgICAgIEFTU0VS
VCghKHJlaW50ZXJwcmV0X2Nhc3Q8aW50cHRyX3Q+KGZyb20pICYgMykpOwogICAgICAgICBBU1NF
UlQoIShyZWludGVycHJldF9jYXN0PGludHB0cl90Pih0bykgJiAzKSk7CiAgICAgICAgIGludHB0
cl90IG9mZnNldCA9IChyZWludGVycHJldF9jYXN0PGludHB0cl90Pih0bykgLSByZWludGVycHJl
dF9jYXN0PGludHB0cl90Pihmcm9tSW5zdHJ1Y3Rpb24pKSA+PiAyOwotICAgICAgICBBU1NFUlQo
aXNJbnQ8MjY+KG9mZnNldCkpOworICAgICAgICAvLyBBU1NFUlQoaXNJbnQ8MjY+KG9mZnNldCkp
OyBPT1BTCiAKICAgICAgICAgYm9vbCB1c2VEaXJlY3QgPSBpc0ludDwxOT4ob2Zmc2V0KTsKICAg
ICAgICAgQVNTRVJUKHR5cGUgPT0gSW5kaXJlY3RCcmFuY2ggfHwgdXNlRGlyZWN0KTsKQEAgLTMw
NjUsNyArMzA4Miw3IEBAIHByb3RlY3RlZDoKICAgICAgICAgQVNTRVJUKCEocmVpbnRlcnByZXRf
Y2FzdDxpbnRwdHJfdD4odG8pICYgMykpOwogICAgICAgICBpbnRwdHJfdCBvZmZzZXQgPSAocmVp
bnRlcnByZXRfY2FzdDxpbnRwdHJfdD4odG8pIC0gcmVpbnRlcnByZXRfY2FzdDxpbnRwdHJfdD4o
ZnJvbUluc3RydWN0aW9uKSkgPj4gMjsKICAgICAgICAgQVNTRVJUKHN0YXRpY19jYXN0PGludD4o
b2Zmc2V0KSA9PSBvZmZzZXQpOwotICAgICAgICBBU1NFUlQoaXNJbnQ8MjY+KG9mZnNldCkpOwor
ICAgICAgICAvL0FTU0VSVChpc0ludDwyNj4ob2Zmc2V0KSk7IE9PUFMKIAogICAgICAgICBib29s
IHVzZURpcmVjdCA9IGlzSW50PDE0PihvZmZzZXQpOwogICAgICAgICBBU1NFUlQodHlwZSA9PSBJ
bmRpcmVjdEJyYW5jaCB8fCB1c2VEaXJlY3QpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9FeGVjdXRhYmxlQWxsb2NhdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L0V4ZWN1dGFibGVBbGxvY2F0b3IuY3BwCShyZXZpc2lvbiAyNTc4NjYpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0V4ZWN1dGFibGVBbGxvY2F0b3IuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zMCw3ICszMCw5IEBACiAKICNpbmNsdWRlICJDb2RlUHJvZmlsaW5nLmgi
CiAjaW5jbHVkZSAiRXhlY3V0YWJsZUFsbG9jYXRpb25GdXp6LmgiCisjaW5jbHVkZSAiSXRlcmF0
aW9uU3RhdHVzLmgiCiAjaW5jbHVkZSAiSlNDSW5saW5lcy5oIgorI2luY2x1ZGUgPHR5cGVfdHJh
aXRzPgogI2luY2x1ZGUgPHd0Zi9GaWxlU3lzdGVtLmg+CiAjaW5jbHVkZSA8d3RmL01ldGFBbGxv
Y2F0b3IuaD4KICNpbmNsdWRlIDx3dGYvUGFnZVJlc2VydmF0aW9uLmg+CkBAIC05Niw5ICs5OCwx
NCBAQCBzdGF0aWMgY29uc3RleHByIHNpemVfdCBmaXhlZEV4ZWN1dGFibGVNCiAjZWxpZiBDUFUo
QVJNKQogc3RhdGljIGNvbnN0ZXhwciBzaXplX3QgZml4ZWRFeGVjdXRhYmxlTWVtb3J5UG9vbFNp
emUgPSAxNiAqIDEwMjQgKiAxMDI0OwogI2VsaWYgQ1BVKEFSTTY0KQotc3RhdGljIGNvbnN0ZXhw
ciBzaXplX3QgZml4ZWRFeGVjdXRhYmxlTWVtb3J5UG9vbFNpemUgPSAxMjggKiAxMDI0ICogMTAy
NDsKK3N0YXRpYyBjb25zdGV4cHIgc2l6ZV90IGZpeGVkRXhlY3V0YWJsZU1lbW9yeVBvb2xTaXpl
ID0gMSAqIDEwMjQgKiAxMDI0ICogMTAyNDsKK3N0YXRpYyBjb25zdGV4cHIgc2l6ZV90IHJlZ2lv
blNpemUgPSAxMjggKiAxMDI0ICogMTAyNDsKK3N0YXRpYyBjb25zdGV4cHIgc2l6ZV90IGlzbGFu
ZFJlZ2lvblNpemUgPSA2NCAqIDEwMjQgKiAxMDI0Oworc3RhdGljIGNvbnN0ZXhwciBzaXplX3Qg
bnVtYmVyT2ZSZWdpb25zID0gZml4ZWRFeGVjdXRhYmxlTWVtb3J5UG9vbFNpemUgLyByZWdpb25T
aXplOworc3RhdGljIGNvbnN0ZXhwciBzaXplX3QgaXNsYW5kU2l6ZUluQnl0ZXMgPSAxNjsKK3N0
YXRpYyBjb25zdGV4cHIgc2l6ZV90IG1heElzbGFuZHNQZXJSZWdpb24gPSBpc2xhbmRSZWdpb25T
aXplIC8gaXNsYW5kU2l6ZUluQnl0ZXM7CiAjZWxpZiBDUFUoWDg2XzY0KQotc3RhdGljIGNvbnN0
ZXhwciBzaXplX3QgZml4ZWRFeGVjdXRhYmxlTWVtb3J5UG9vbFNpemUgPSAxMDI0ICogMTAyNCAq
IDEwMjQ7CitzdGF0aWMgY29uc3RleHByIHNpemVfdCBmaXhlZEV4ZWN1dGFibGVNZW1vcnlQb29s
U2l6ZSA9IDEgKiAxMDI0ICogMTAyNCAqIDEwMjQ7CiAjZWxzZQogc3RhdGljIGNvbnN0ZXhwciBz
aXplX3QgZml4ZWRFeGVjdXRhYmxlTWVtb3J5UG9vbFNpemUgPSAzMiAqIDEwMjQgKiAxMDI0Owog
I2VuZGlmCkBAIC0zMTMsOSArMzIwLDEwIEBAIHN0YXRpYyBBTFdBWVNfSU5MSU5FIEpJVFJlc2Vy
dmF0aW9uIGluaXQKICAgICBpZiAoIWlzSklURW5hYmxlZCgpKQogICAgICAgICByZXR1cm4gcmVz
ZXJ2YXRpb247CiAKLSAgICBpZiAoT3B0aW9uczo6aml0TWVtb3J5UmVzZXJ2YXRpb25TaXplKCkp
Ci0gICAgICAgIHJlc2VydmF0aW9uLnNpemUgPSBPcHRpb25zOjpqaXRNZW1vcnlSZXNlcnZhdGlv
blNpemUoKTsKLSAgICBlbHNlCisgICAgLy8gT09QUyEKKyAgICAvL2lmIChPcHRpb25zOjpqaXRN
ZW1vcnlSZXNlcnZhdGlvblNpemUoKSkKKyAgICAvLyAgICByZXNlcnZhdGlvbi5zaXplID0gT3B0
aW9uczo6aml0TWVtb3J5UmVzZXJ2YXRpb25TaXplKCk7CisgICAgLy9lbHNlCiAgICAgICAgIHJl
c2VydmF0aW9uLnNpemUgPSBmaXhlZEV4ZWN1dGFibGVNZW1vcnlQb29sU2l6ZTsKICAgICByZXNl
cnZhdGlvbi5zaXplID0gc3RkOjptYXgocm91bmRVcFRvTXVsdGlwbGVPZihwYWdlU2l6ZSgpLCBy
ZXNlcnZhdGlvbi5zaXplKSwgcGFnZVNpemUoKSAqIDIpOwogCkBAIC0zNjMsNTIgKzM3MSwzNjUg
QEAgc3RhdGljIEFMV0FZU19JTkxJTkUgSklUUmVzZXJ2YXRpb24gaW5pdAogICAgIHJldHVybiBy
ZXNlcnZhdGlvbjsKIH0KIAotY2xhc3MgRml4ZWRWTVBvb2xFeGVjdXRhYmxlQWxsb2NhdG9yIGZp
bmFsIDogcHVibGljIE1ldGFBbGxvY2F0b3IgeworY2xhc3MgRml4ZWRWTVBvb2xFeGVjdXRhYmxl
QWxsb2NhdG9yIGZpbmFsIHsKICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKIHB1YmxpYzoK
ICAgICBGaXhlZFZNUG9vbEV4ZWN1dGFibGVBbGxvY2F0b3IoKQotICAgICAgICA6IE1ldGFBbGxv
Y2F0b3Ioaml0QWxsb2NhdGlvbkdyYW51bGUpIC8vIHJvdW5kIHVwIGFsbCBhbGxvY2F0aW9ucyB0
byAzMiBieXRlcwogICAgIHsKKyAgICAgICAgZm9yRWFjaEFsbG9jYXRvcihbJl0gKEFsbG9jYXRv
ciYgYWxsb2NhdG9yKSB7CisgICAgICAgICAgICBhbGxvY2F0b3IubV9maXhlZEFsbG9jYXRvciA9
IHRoaXM7CisgICAgICAgIH0pOworCiAgICAgICAgIEpJVFJlc2VydmF0aW9uIHJlc2VydmF0aW9u
ID0gaW5pdGlhbGl6ZUpJVFBhZ2VSZXNlcnZhdGlvbigpOwogICAgICAgICBtX3Jlc2VydmF0aW9u
ID0gV1RGTW92ZShyZXNlcnZhdGlvbi5wYWdlUmVzZXJ2YXRpb24pOwogICAgICAgICBpZiAobV9y
ZXNlcnZhdGlvbikgewotICAgICAgICAgICAgYWRkRnJlc2hGcmVlU3BhY2UocmVzZXJ2YXRpb24u
YmFzZSwgcmVzZXJ2YXRpb24uc2l6ZSk7CisjaWYgQ1BVKEFSTTY0KQorICAgICAgICAgICAgdWlu
dHB0cl90IHN0YXJ0ID0gYml0d2lzZV9jYXN0PHVpbnRwdHJfdD4obV9yZXNlcnZhdGlvbi5iYXNl
KCkpOworICAgICAgICAgICAgdWludHB0cl90IHJlc2VydmF0aW9uRW5kID0gc3RhcnQgKyBtX3Jl
c2VydmF0aW9uLnNpemUoKTsKKyAgICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbnVt
YmVyT2ZSZWdpb25zOyArK2kpIHsKKyAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChzdGFy
dCA8IHJlc2VydmF0aW9uRW5kKTsKKyAgICAgICAgICAgICAgICBtX2FsbG9jYXRvcnNbaV0uc3Rh
cnQgPSBzdGFydDsKKyAgICAgICAgICAgICAgICBtX2FsbG9jYXRvcnNbaV0uZW5kID0gc3RhcnQg
KyByZWdpb25TaXplOworICAgICAgICAgICAgICAgIGlmIChtX2FsbG9jYXRvcnNbaV0uZW5kID4g
cmVzZXJ2YXRpb25FbmQpIHsKKyAgICAgICAgICAgICAgICAgICAgLy8gV2UgbWF5IGhhdmUgdGFr
ZW4gYSBwYWdlIGZvciB0aGUgZXhlY3V0YWJsZSBvbmx5IGNvcHkgdGh1bmsuCisgICAgICAgICAg
ICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKGkgPT0gbnVtYmVyT2ZSZWdpb25zIC0gMSk7CisgICAg
ICAgICAgICAgICAgICAgIG1fYWxsb2NhdG9yc1tpXS5lbmQgPSByZXNlcnZhdGlvbkVuZDsKKyAg
ICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBtX2FsbG9jYXRvcnNbaV0uYWRkRnJl
c2hGcmVlU3BhY2UoYml0d2lzZV9jYXN0PHZvaWQqPihtX2FsbG9jYXRvcnNbaV0uc3RhcnQpLCBt
X2FsbG9jYXRvcnNbaV0uYWxsb2NhdG9yU2l6ZSgpKTsKKworICAgICAgICAgICAgICAgIHN0YXJ0
ICs9IHJlZ2lvblNpemU7CisgICAgICAgICAgICB9CisjZWxzZQorICAgICAgICAgICAgbV9hbGxv
Y2F0b3IuYWRkRnJlc2hGcmVlU3BhY2UocmVzZXJ2YXRpb24uYmFzZSwgcmVzZXJ2YXRpb24uc2l6
ZSk7CisjZW5kaWYKKwogICAgICAgICAgICAgQVNTRVJUKGJ5dGVzUmVzZXJ2ZWQoKSA9PSByZXNl
cnZhdGlvbi5zaXplKTsgLy8gU2luY2Ugb3VyIGV4ZWN1dGFibGUgbWVtb3J5IGlzIGZpeGVkLXNp
emVkLCBieXRlc1Jlc2VydmVkIGlzIG5ldmVyIGNoYW5nZWQgYWZ0ZXIgaW5pdGlhbGl6YXRpb24u
CiAgICAgICAgIH0KICAgICB9CiAKLSAgICB2aXJ0dWFsIH5GaXhlZFZNUG9vbEV4ZWN1dGFibGVB
bGxvY2F0b3IoKTsKKyAgICB+Rml4ZWRWTVBvb2xFeGVjdXRhYmxlQWxsb2NhdG9yKCkKKyAgICB7
CisgICAgICAgIG1fcmVzZXJ2YXRpb24uZGVhbGxvY2F0ZSgpOworICAgIH0KIAogICAgIHZvaWQq
IG1lbW9yeVN0YXJ0KCkgeyByZXR1cm4gdW50YWdDb2RlUHRyPEV4ZWN1dGFibGVNZW1vcnlQdHJU
YWc+KGdfanNjQ29uZmlnLnN0YXJ0RXhlY3V0YWJsZU1lbW9yeSk7IH0KICAgICB2b2lkKiBtZW1v
cnlFbmQoKSB7IHJldHVybiB1bnRhZ0NvZGVQdHI8RXhlY3V0YWJsZU1lbW9yeVB0clRhZz4oZ19q
c2NDb25maWcuZW5kRXhlY3V0YWJsZU1lbW9yeSk7IH0KICAgICBib29sIGlzSklUUEModm9pZCog
cGMpIHsgcmV0dXJuIG1lbW9yeVN0YXJ0KCkgPD0gcGMgJiYgcGMgPCBtZW1vcnlFbmQoKTsgfQor
ICAgIGJvb2wgaXNWYWxpZCgpIHsgcmV0dXJuICEhbV9yZXNlcnZhdGlvbjsgfQogCi1wcm90ZWN0
ZWQ6Ci0gICAgRnJlZVNwYWNlUHRyIGFsbG9jYXRlTmV3U3BhY2Uoc2l6ZV90Jikgb3ZlcnJpZGUK
KyAgICBSZWZQdHI8RXhlY3V0YWJsZU1lbW9yeUhhbmRsZT4gYWxsb2NhdGUoc2l6ZV90IHNpemVJ
bkJ5dGVzLCB2b2lkKiBvd25lclVJRCkKICAgICB7Ci0gICAgICAgIC8vIFdlJ3JlIG9wZXJhdGlu
ZyBpbiBhIGZpeGVkIHBvb2wsIHNvIG5ldyBhbGxvY2F0aW9uIGlzIGFsd2F5cyBwcm9oaWJpdGVk
LgorI2lmIENQVShBUk02NCkKKyAgICAgICAgLy8gT09QUzogcGlwZSB0aHJvdWdoIGxvY2sgdG8g
YWxsb2NhdG9ycworICAgICAgICBhdXRvIGxvY2tIb2xkZXIgPSBob2xkTG9jayhnZXRMb2NrKCkp
OworICAgICAgICAKKyAgICAgICAgdW5zaWduZWQgc3RhcnQgPSBjcnlwdG9ncmFwaGljYWxseVJh
bmRvbU51bWJlcigpICUgbV9hbGxvY2F0b3JzLnNpemUoKTsKKyAgICAgICAgdW5zaWduZWQgaSA9
IHN0YXJ0OworICAgICAgICB3aGlsZSAodHJ1ZSkgeworICAgICAgICAgICAgUmVnaW9uQWxsb2Nh
dG9yJiBhbGxvY2F0b3IgPSBtX2FsbG9jYXRvcnNbaV07CisgICAgICAgICAgICBpZiAoUmVmUHRy
PEV4ZWN1dGFibGVNZW1vcnlIYW5kbGU+IHJlc3VsdCA9IGFsbG9jYXRvci5hbGxvY2F0ZShzaXpl
SW5CeXRlcywgb3duZXJVSUQpKQorICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAg
ICAgICAgICBpID0gaSArIDE7CisgICAgICAgICAgICBpID0gaSAlIG1fYWxsb2NhdG9ycy5zaXpl
KCk7CisgICAgICAgICAgICBpZiAoaSA9PSBzdGFydCkKKyAgICAgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgfQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyNlbHNlCisgICAgICAgIHJldHVy
biBtX2FsbG9jYXRvci5hbGxvY2F0ZShzaXplSW5CeXRlcywgb3duZXJVSUQpOworI2VuZGlmCisg
ICAgfQorCisgICAgTG9jayYgZ2V0TG9jaygpIHsgcmV0dXJuIG1fbG9jazsgfQorCisgICAgLy8g
Tm9uIGF0b21pYworICAgIHNpemVfdCBieXRlc0FsbG9jYXRlZCgpIAorICAgIHsKKyAgICAgICAg
c2l6ZV90IHJlc3VsdCA9IDA7CisgICAgICAgIGZvckVhY2hBbGxvY2F0b3IoWyZdIChBbGxvY2F0
b3ImIGFsbG9jYXRvcikgeworICAgICAgICAgICAgcmVzdWx0ICs9IGFsbG9jYXRvci5ieXRlc0Fs
bG9jYXRlZCgpOworICAgICAgICB9KTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9Cisg
ICAgc2l6ZV90IGJ5dGVzUmVzZXJ2ZWQoKSAKKyAgICB7CisgICAgICAgIHNpemVfdCByZXN1bHQg
PSAwOworICAgICAgICBmb3JFYWNoQWxsb2NhdG9yKFsmXSAoQWxsb2NhdG9yJiBhbGxvY2F0b3Ip
IHsKKyAgICAgICAgICAgIHJlc3VsdCArPSBhbGxvY2F0b3IuYnl0ZXNSZXNlcnZlZCgpOworICAg
ICAgICB9KTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisgICAgc2l6ZV90IGJ5dGVz
Q29tbWl0dGVkKCkKKyAgICB7CisgICAgICAgIHNpemVfdCByZXN1bHQgPSAwOworICAgICAgICBm
b3JFYWNoQWxsb2NhdG9yKFsmXSAoQWxsb2NhdG9yJiBhbGxvY2F0b3IpIHsKKyAgICAgICAgICAg
IHJlc3VsdCArPSBhbGxvY2F0b3IuYnl0ZXNDb21taXR0ZWQoKTsKKyAgICAgICAgfSk7CisgICAg
ICAgIHJldHVybiByZXN1bHQ7CiAgICAgfQogCi0gICAgdm9pZCBub3RpZnlOZWVkUGFnZSh2b2lk
KiBwYWdlLCBzaXplX3QgY291bnQpIG92ZXJyaWRlCisgICAgYm9vbCBpc0luQWxsb2NhdGVkTWVt
b3J5KGNvbnN0IEFic3RyYWN0TG9ja2VyJiBsb2NrZXIsIHZvaWQqIGFkZHJlc3MpCiAgICAgewot
ICAgICAgICBtX3Jlc2VydmF0aW9uLmNvbW1pdChwYWdlLCBwYWdlU2l6ZSgpICogY291bnQpOwor
ICAgICAgICBib29sIHJlc3VsdCA9IGZhbHNlOworICAgICAgICBmb3JFYWNoQWxsb2NhdG9yKFsm
XSAoQWxsb2NhdG9yJiBhbGxvY2F0b3IpIHsKKyAgICAgICAgICAgIGlmIChhbGxvY2F0b3IuaXNJ
bkFsbG9jYXRlZE1lbW9yeShsb2NrZXIsIGFkZHJlc3MpKSB7CisgICAgICAgICAgICAgICAgcmVz
dWx0ID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICByZXR1cm4gSXRlcmF0aW9uU3RhdHVzOjpEb25l
OworICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIEl0ZXJhdGlvblN0YXR1czo6Q29u
dGludWU7CisgICAgICAgIH0pOworCisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorCisj
aWYgRU5BQkxFKE1FVEFfQUxMT0NBVE9SX1BST0ZJTEUpCisgICAgdm9pZCBkdW1wUHJvZmlsZSgp
CisgICAgeworICAgICAgICBmb3JFYWNoQWxsb2NhdG9yKFsmXSAoQWxsb2NhdG9yJiBhbGxvY2F0
b3IpIHsKKyAgICAgICAgICAgIGFsbG9jYXRvci5kdW1wUHJvZmlsZSgpOworICAgICAgICB9KTsK
KyAgICB9CisjZW5kaWYKKworICAgIHZvaWQgbm90aWZ5Q29kZVByb2ZpbGluZygpCisgICAgewor
ICAgICAgICBmb3JFYWNoQWxsb2NhdG9yKFsmXSAoQWxsb2NhdG9yJiBhbGxvY2F0b3IpIHsKKyAg
ICAgICAgICAgIENvZGVQcm9maWxpbmc6Om5vdGlmeUFsbG9jYXRvcigmYWxsb2NhdG9yKTsKKyAg
ICAgICAgfSk7CisgICAgfQorCisgICAgTWV0YUFsbG9jYXRvcjo6U3RhdGlzdGljcyBjdXJyZW50
U3RhdGlzdGljcygpCisgICAgeworICAgICAgICAvLyBPT1BTOiBtYWtlIGF0b21pYyBieSBob2xk
aW5nIGxvY2suLi4KKyAgICAgICAgTWV0YUFsbG9jYXRvcjo6U3RhdGlzdGljcyByZXN1bHQgeyAw
LCAwLCAwIH07CisgICAgICAgIGZvckVhY2hBbGxvY2F0b3IoWyZdIChBbGxvY2F0b3ImIGFsbG9j
YXRvcikgeworICAgICAgICAgICAgYXV0byBhbGxvY2F0b3JTdGF0cyA9IGFsbG9jYXRvci5jdXJy
ZW50U3RhdGlzdGljcygpOworICAgICAgICAgICAgcmVzdWx0LmJ5dGVzQWxsb2NhdGVkICs9IGFs
bG9jYXRvclN0YXRzLmJ5dGVzQWxsb2NhdGVkOworICAgICAgICAgICAgcmVzdWx0LmJ5dGVzUmVz
ZXJ2ZWQgKz0gYWxsb2NhdG9yU3RhdHMuYnl0ZXNSZXNlcnZlZDsKKyAgICAgICAgICAgIHJlc3Vs
dC5ieXRlc0NvbW1pdHRlZCArPSBhbGxvY2F0b3JTdGF0cy5ieXRlc0NvbW1pdHRlZDsKKyAgICAg
ICAgfSk7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorCisjaWYgQ1BVKEFSTTY0KQor
cHJpdmF0ZToKKyAgICBjbGFzcyBSZWdpb25BbGxvY2F0b3I7CisKKyAgICBSZWdpb25BbGxvY2F0
b3IqIGZpbmRSZWdpb24odWludHB0cl90IHB0cikKKyAgICB7CisgICAgICAgIFJlZ2lvbkFsbG9j
YXRvciogcmVzdWx0ID0gbnVsbHB0cjsKKyAgICAgICAgZm9yRWFjaEFsbG9jYXRvcihbJl0gKFJl
Z2lvbkFsbG9jYXRvciYgYWxsb2NhdG9yKSB7CisgICAgICAgICAgICBpZiAoYWxsb2NhdG9yLnN0
YXJ0IDw9IHB0ciAmJiBwdHIgPCBhbGxvY2F0b3IuZW5kKSB7CisgICAgICAgICAgICAgICAgcmVz
dWx0ID0gJmFsbG9jYXRvcjsKKyAgICAgICAgICAgICAgICByZXR1cm4gSXRlcmF0aW9uU3RhdHVz
OjpEb25lOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIEl0ZXJhdGlvblN0YXR1
czo6Q29udGludWU7CisgICAgICAgIH0pOworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0K
KworICAgIHZvaWQqIGlzbGFuZEZvckp1bXBMb2NhdGlvbih1aW50cHRyX3QganVtcExvY2F0aW9u
LCB1aW50cHRyX3Qgb2xkVGFyZ2V0KQorICAgIHsKKyAgICAgICAgUmVnaW9uQWxsb2NhdG9yKiBh
bGxvY2F0b3IgPSBmaW5kUmVnaW9uKGp1bXBMb2NhdGlvbik7CisgICAgICAgIFJFTEVBU0VfQVNT
RVJUKGFsbG9jYXRvcik7CisKKyAgICAgICAgLy8gSWYgd2Ugd2VyZSBhbHJlYWR5IGFuIGlzbGFu
ZCwgd2UgY2FuIGp1c3QgcmV1c2UgaXQuCisgICAgICAgIGlmIChhbGxvY2F0b3ItPmlzbGFuZEJl
Z2luKCkgPD0gb2xkVGFyZ2V0ICYmIG9sZFRhcmdldCA8IGFsbG9jYXRvci0+ZW5kKSB7CisgICAg
ICAgICAgICBSRUxFQVNFX0FTU0VSVChhbGxvY2F0b3ItPmp1bXBMb2NhdGlvbnNUb0lzbGFuZHMu
Y29udGFpbnMoanVtcExvY2F0aW9uKSk7CisgICAgICAgICAgICByZXR1cm4gYml0d2lzZV9jYXN0
PHZvaWQqPihvbGRUYXJnZXQpOworICAgICAgICB9CisKKyAgICAgICAgdm9pZCogcmVzdWx0ID0g
YWxsb2NhdG9yLT5hbGxvY2F0ZUlzbGFuZCgpOworICAgICAgICBhbGxvY2F0b3ItPmp1bXBMb2Nh
dGlvbnNUb0lzbGFuZHMuYXBwZW5kKGp1bXBMb2NhdGlvbik7CisgICAgICAgIHJldHVybiByZXN1
bHQ7CiAgICAgfQogCi0gICAgdm9pZCBub3RpZnlQYWdlSXNGcmVlKHZvaWQqIHBhZ2UsIHNpemVf
dCBjb3VudCkgb3ZlcnJpZGUKK3B1YmxpYzoKKworICAgIHZvaWQqIG1ha2VJc2xhbmQodWludHB0
cl90IGp1bXBMb2NhdGlvbiwgdWludHB0cl90IG9sZFRhcmdldCwgdWludHB0cl90IG5ld1Rhcmdl
dCkKICAgICB7Ci0gICAgICAgIG1fcmVzZXJ2YXRpb24uZGVjb21taXQocGFnZSwgcGFnZVNpemUo
KSAqIGNvdW50KTsKKyAgICAgICAgYXV0byBsb2NrSG9sZGVyID0gaG9sZExvY2soZ2V0TG9jaygp
KTsKKworICAgICAgICAvLyBPT1BTOiB0aHJlYWQgdGhpcyB0aHJvdWdoIGEgc2VyaWVzIG9mIGp1
bXBzLgorICAgICAgICB2b2lkKiBpc2xhbmQgPSBpc2xhbmRGb3JKdW1wTG9jYXRpb24oanVtcExv
Y2F0aW9uLCBvbGRUYXJnZXQpOworICAgICAgICBDQ2FsbEhlbHBlcnMgaml0OworICAgICAgICBq
aXQubW92ZShDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIobmV3VGFyZ2V0KSwgQ0NhbGxIZWxw
ZXJzOjpkYXRhVGVtcFJlZ2lzdGVyKTsKKyAgICAgICAgaml0LmZhckp1bXAoQ0NhbGxIZWxwZXJz
OjpkYXRhVGVtcFJlZ2lzdGVyLCBOb1B0clRhZyk7CisKKyAgICAgICAgTGlua0J1ZmZlciBsaW5r
QnVmZmVyKGppdCwgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPE5vUHRyVGFnPihpc2xhbmQpLCBpc2xh
bmRTaXplSW5CeXRlcywgSklUQ29tcGlsYXRpb25NdXN0U3VjY2VlZCwgZmFsc2UpOworICAgICAg
ICBhdXRvIHJlc3VsdCA9IEZJTkFMSVpFX0NPREUobGlua0J1ZmZlciwgTm9QdHJUYWcsICJKdW1w
IElzbGFuZDogJWx1IiwganVtcExvY2F0aW9uKTsKKyAgICAgICAgcmV0dXJuIGlzbGFuZDsKICAg
ICB9CisjZW5kaWYKIAogcHJpdmF0ZToKKyAgICBjbGFzcyBBbGxvY2F0b3IgOiBwdWJsaWMgTWV0
YUFsbG9jYXRvciB7CisgICAgcHVibGljOgorICAgICAgICBBbGxvY2F0b3IoKQorICAgICAgICAg
ICAgOiBNZXRhQWxsb2NhdG9yKGppdEFsbG9jYXRpb25HcmFudWxlLCBwYWdlU2l6ZSgpKSAvLyBy
b3VuZCB1cCBhbGwgYWxsb2NhdGlvbnMgdG8gMzIgYnl0ZXMKKyAgICAgICAgeworICAgICAgICB9
CisKKyAgICAgICAgRnJlZVNwYWNlUHRyIGFsbG9jYXRlTmV3U3BhY2Uoc2l6ZV90Jikgb3ZlcnJp
ZGUKKyAgICAgICAgeworICAgICAgICAgICAgLy8gV2UncmUgb3BlcmF0aW5nIGluIGEgZml4ZWQg
cG9vbCwgc28gbmV3IGFsbG9jYXRpb24gaXMgYWx3YXlzIHByb2hpYml0ZWQuCisgICAgICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgfQorCisgICAgICAgIHZvaWQgbm90aWZ5TmVlZFBh
Z2Uodm9pZCogcGFnZSwgc2l6ZV90IGNvdW50KSBvdmVycmlkZQorICAgICAgICB7CisgICAgICAg
ICAgICBtX2ZpeGVkQWxsb2NhdG9yLT5tX3Jlc2VydmF0aW9uLmNvbW1pdChwYWdlLCBwYWdlU2l6
ZSgpICogY291bnQpOworICAgICAgICB9CisKKyAgICAgICAgdm9pZCBub3RpZnlQYWdlSXNGcmVl
KHZvaWQqIHBhZ2UsIHNpemVfdCBjb3VudCkgb3ZlcnJpZGUKKyAgICAgICAgeworICAgICAgICAg
ICAgbV9maXhlZEFsbG9jYXRvci0+bV9yZXNlcnZhdGlvbi5kZWNvbW1pdChwYWdlLCBwYWdlU2l6
ZSgpICogY291bnQpOworICAgICAgICB9CisKKyAgICAgICAgRml4ZWRWTVBvb2xFeGVjdXRhYmxl
QWxsb2NhdG9yKiBtX2ZpeGVkQWxsb2NhdG9yOworICAgIH07CisKKyNpZiBDUFUoQVJNNjQpIC8v
IE9PUFM6IGNhbid0IGRvIHRoaXMgZm9yIGFybTY0XzMyCisgICAgY2xhc3MgUmVnaW9uQWxsb2Nh
dG9yIDogcHVibGljIEFsbG9jYXRvciB7CisgICAgcHVibGljOgorICAgICAgICAvLyAgLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICAgIC8vICB8IGFsbG9jYXRvciAt
LT4gICAgIDwtLSBpc2xhbmQgICAgICB8CisgICAgICAgIC8vICB8ICAgICAgICAgICAgIF4gICAg
IF4gICAgICAgICAgICAgICB8CisgICAgICAgIC8vICB8ICAgICAgICAgICAgIHwgICAgIHwgICAg
ICAgICAgICAgICB8CisgICAgICAgIC8vICB8IGFsbG9jYXRvclNpemUgICAgIHJlc2VydmVkSXNs
YW5kcyB8CisgICAgICAgIC8vICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
CisgICAgICAgIC8vICBhbGxvY2F0b3JFbmQgPD0gaXNsYW5kIGJlZ2luCisKKyAgICAgICAgdWlu
dHB0cl90IGlzbGFuZEJlZ2luKCkKKyAgICAgICAgeworICAgICAgICAgICAgLy8gW3N0YXJ0LCBh
bGxvY2F0b3JFbmQpCisgICAgICAgICAgICByZXR1cm4gZW5kIC0gaXNsYW5kUmVnaW9uU2l6ZTsK
KyAgICAgICAgfQorCisgICAgICAgIHVpbnRwdHJfdCBhbGxvY2F0b3JTaXplKCkKKyAgICAgICAg
eworICAgICAgICAgICAgcmV0dXJuIGlzbGFuZEJlZ2luKCkgLSBzdGFydDsKKyAgICAgICAgfQor
CisgICAgICAgIC8vIE9PUFM6IHBhc3MgTG9ja0hvbGRlciB0byBtYWtlIGl0IG9idmlvdXMgbG9j
ayBpcyBoZWxkLgorICAgICAgICBGcmVlU3BhY2VQdHIgYWxsb2NhdGVOZXdTcGFjZShzaXplX3Qm
KSBvdmVycmlkZQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAg
ICAgfQorCisgICAgICAgIHNpemVfdCBpc2xhbmRzUGVyUGFnZSgpCisgICAgICAgIHsKKyAgICAg
ICAgICAgIHNpemVfdCBpc2xhbmRzUGVyUGFnZSA9IHBhZ2VTaXplKCkgLyBpc2xhbmRTaXplSW5C
eXRlczsKKyAgICAgICAgICAgIEFTU0VSVChpc2xhbmRzUGVyUGFnZSAqIGlzbGFuZFNpemVJbkJ5
dGVzID09IHBhZ2VTaXplKCkpOyAvLyB3ZSByZWx5IG9uIHBlcmZlY3QgZGl2aXNpb24gZm9yIGZp
bmRpbmcgd2hpY2ggYml0IGEgcG9pbnRlciBpcy4KKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJU
KGlzUG93ZXJPZlR3byhpc2xhbmRzUGVyUGFnZSkpOworICAgICAgICAgICAgcmV0dXJuIGlzbGFu
ZHNQZXJQYWdlOworICAgICAgICB9CisKKyAgICAgICAgLyoKKyAgICAgICAgLy8gT09QUzogcGFz
cyBMb2NrSG9sZGVyIHRvIG1ha2UgaXQgb2J2aW91cyBsb2NrIGlzIGhlbGQuCisgICAgICAgIGJv
b2wgdHJ5QWxsb2NhdGVJc2xhbmRzKHNpemVfdCBudW1Jc2xhbmRzVG9BbGxvY2F0ZSkKKyAgICAg
ICAgeworICAgICAgICAgICAgaWYgKCFudW1Jc2xhbmRzVG9BbGxvY2F0ZSkKKyAgICAgICAgICAg
ICAgICByZXR1cm4gdHJ1ZTsKKworICAgICAgICAgICAgdWludHB0cl90IG51bUZyZWVJc2xhbmRz
ID0gbnVtUmVzZXJ2ZWRJc2xhbmRzIC0gbnVtQWxsb2NhdGVkSXNsYW5kczsgCisgICAgICAgICAg
ICBpZiAobnVtRnJlZUlzbGFuZHMgPj0gbnVtSXNsYW5kc1RvQWxsb2NhdGUpIHsKKyAgICAgICAg
ICAgICAgICBudW1BbGxvY2F0ZWRJc2xhbmRzICs9IG51bUlzbGFuZHNUb0FsbG9jYXRlOworICAg
ICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKG51bUFsbG9jYXRlZElzbGFuZHMgPD0gbnVtUmVz
ZXJ2ZWRJc2xhbmRzKTsgLy8gT09QUzogY2hlY2tDb25zaXN0ZW5jeT8KKyAgICAgICAgICAgICAg
ICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgIH0gCisKKyAgICAgICAgICAgIHNpemVfdCBpc2xh
bmRzUGVyUGFnZSA9IHRoaXMtPmlzbGFuZHNQZXJQYWdlKCk7CisgICAgICAgICAgICAKKyAgICAg
ICAgICAgIHVpbnRwdHJfdCBpc2xhbmRzVG9SZXNlcnZlID0gbnVtSXNsYW5kc1RvQWxsb2NhdGUg
LSBudW1GcmVlSXNsYW5kczsKKworICAgICAgICAgICAgaXNsYW5kc1RvUmVzZXJ2ZSA9IHJvdW5k
VXBUb011bHRpcGxlT2YoaXNsYW5kc1BlclBhZ2UsIGlzbGFuZHNUb1Jlc2VydmUpOworICAgICAg
ICAgICAgdWludHB0cl90IG5ld0lzbGFuZEJlZ2luID0gZW5kIC0gKChudW1SZXNlcnZlZElzbGFu
ZHMgKyBpc2xhbmRzVG9SZXNlcnZlKSAqIGlzbGFuZFNpemVJbkJ5dGVzKTsKKyAgICAgICAgICAg
IGlmIChuZXdJc2xhbmRCZWdpbiA8IGFsbG9jYXRvckVuZCgpKQorICAgICAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKKworICAgICAgICAgICAgbnVtQWxsb2NhdGVkSXNsYW5kcyArPSBudW1Jc2xh
bmRzVG9BbGxvY2F0ZTsKKyAgICAgICAgICAgIG51bVJlc2VydmVkSXNsYW5kcyArPSBpc2xhbmRz
VG9SZXNlcnZlOworICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQobnVtQWxsb2NhdGVkSXNsYW5k
cyA8PSBudW1SZXNlcnZlZElzbGFuZHMpOworICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAg
ICAgIH0KKworICAgICAgICAvLyBPT1BTOiB0YWtlIGxvY2tob2xkZXIKKyAgICAgICAgdm9pZCBk
ZWFsbG9jYXRlSXNsYW5kcyhzaXplX3QgbnVtSXNsYW5kc1RvRnJlZSkKKyAgICAgICAgeworICAg
ICAgICAgICAgUkVMRUFTRV9BU1NFUlQobnVtSXNsYW5kc1RvRnJlZSA8PSBudW1BbGxvY2F0ZWRJ
c2xhbmRzKTsKKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKG51bUFsbG9jYXRlZElzbGFuZHMg
PD0gbnVtUmVzZXJ2ZWRJc2xhbmRzKTsgLy8gT09QUzogY2hlY2tDb25zaXN0ZW5jeQorICAgICAg
ICAgICAgbnVtQWxsb2NhdGVkSXNsYW5kcyAtPSBudW1Jc2xhbmRzVG9GcmVlOworICAgICAgICB9
CisgICAgICAgICovCisKKyAgICAgICAgLy8gT09QUzogbG9ja2hvbGRlci4KKyAgICAgICAgdm9p
ZCogYWxsb2NhdGVJc2xhbmQoKQorICAgICAgICB7CisgICAgICAgICAgICBhdXRvIGZpbmRSZXN1
bHQgPSBbJl0gKCkgLT4gdm9pZCogeworICAgICAgICAgICAgICAgIHNpemVfdCByZXN1bHRCaXQg
PSBpc2xhbmRCaXRzLmZpbmRDbGVhckJpdCgwKTsKKyAgICAgICAgICAgICAgICBpZiAocmVzdWx0
Qml0ID09IGlzbGFuZEJpdHMuc2l6ZSgpKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVs
bHB0cjsKKyAgICAgICAgICAgICAgICBpc2xhbmRCaXRzW3Jlc3VsdEJpdF0gPSB0cnVlOworICAg
ICAgICAgICAgICAgIHVpbnRwdHJfdCByZXN1bHQgPSBlbmQgLSAoKHJlc3VsdEJpdCArIDEpICog
aXNsYW5kU2l6ZUluQnl0ZXMpOyAKKyAgICAgICAgICAgICAgICByZXR1cm4gYml0d2lzZV9jYXN0
PHZvaWQqPihyZXN1bHQpOworICAgICAgICAgICAgfTsKKworICAgICAgICAgICAgaWYgKHZvaWQq
IHJlc3VsdCA9IGZpbmRSZXN1bHQoKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0Owor
CisgICAgICAgICAgICBpc2xhbmRCaXRzLnJlc2l6ZShpc2xhbmRCaXRzLnNpemUoKSArIGlzbGFu
ZHNQZXJQYWdlKCkpOworICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoaXNsYW5kQml0cy5zaXpl
KCkgPD0gbWF4SXNsYW5kc1BlclJlZ2lvbik7IAorCisgICAgICAgICAgICAvL2RhdGFMb2dMbigi
cmVnaW9uOiBbIiwgc3RhcnQsICIsICIsIGVuZCwgIikiKTsKKworICAgICAgICAgICAgdWludHB0
cl90IHBhZ2VCZWdpbiA9IGVuZCAtIChpc2xhbmRCaXRzLnNpemUoKSAqIGlzbGFuZFNpemVJbkJ5
dGVzKTsgLy8gW2lzbGFuZEJlZ2luLCBlbmQpCisgICAgICAgICAgICAvL2RhdGFMb2dMbigiY29t
bWl0dGluZzogIiwgcGFnZUJlZ2luKTsKKyAgICAgICAgICAgIG1fZml4ZWRBbGxvY2F0b3ItPm1f
cmVzZXJ2YXRpb24uY29tbWl0KGJpdHdpc2VfY2FzdDx2b2lkKj4ocGFnZUJlZ2luKSwgcGFnZVNp
emUoKSk7CisgICAgICAgICAgICB2b2lkKiByZXN1bHQgPSBmaW5kUmVzdWx0KCk7CisgICAgICAg
ICAgICBSRUxFQVNFX0FTU0VSVChyZXN1bHQpOworICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsK
KyAgICAgICAgfQorCisgICAgICAgIC8vIFtzdGFydCwgZW5kKQorICAgICAgICB1aW50cHRyX3Qg
c3RhcnQ7CisgICAgICAgIHVpbnRwdHJfdCBlbmQ7CisKKyAgICAgICAgc2l6ZV90IG51bUFsbG9j
YXRlZElzbGFuZHMgeyAwIH07IC8vIDw9IG51bVJlc2VydmVkSXNsYW5kcworICAgICAgICBGYXN0
Qml0VmVjdG9yIGlzbGFuZEJpdHM7CisgICAgICAgIFZlY3Rvcjx1aW50cHRyX3Q+IGp1bXBMb2Nh
dGlvbnNUb0lzbGFuZHM7IC8vIE9PUFM6IHVzZSByZWQgYmxhY2sgdHJlZSBhbmQgbWFrZSBpdCBm
YXN0IHRvIHJlbW92ZSBhbGwgZW50cmllcyBtYXRjaGluZy4KKyAgICB9OworI2VuZGlmCisKKyAg
ICB0ZW1wbGF0ZSA8dHlwZW5hbWUgRnVuY3Rpb24+CisgICAgdm9pZCBmb3JFYWNoQWxsb2NhdG9y
KEZ1bmN0aW9uIGZ1bmN0aW9uKQorICAgIHsKKyNpZiBDUFUoQVJNNjQpCisgICAgICAgIGZvciAo
UmVnaW9uQWxsb2NhdG9yJiBhbGxvY2F0b3IgOiBtX2FsbG9jYXRvcnMpIHsKKyAgICAgICAgICAg
IHVzaW5nIEZ1bmN0aW9uUmVzdWx0VHlwZSA9IGRlY2x0eXBlKGZ1bmN0aW9uKGFsbG9jYXRvcikp
OworICAgICAgICAgICAgaWYgY29uc3RleHByIChzdGQ6OmlzX3NhbWU8SXRlcmF0aW9uU3RhdHVz
LCBGdW5jdGlvblJlc3VsdFR5cGU+Ojp2YWx1ZSkgeworICAgICAgICAgICAgICAgIGlmIChmdW5j
dGlvbihhbGxvY2F0b3IpID09IEl0ZXJhdGlvblN0YXR1czo6RG9uZSkKKyAgICAgICAgICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIHN0YXRp
Y19hc3NlcnQoc3RkOjppc19zYW1lPHZvaWQsIEZ1bmN0aW9uUmVzdWx0VHlwZT46OnZhbHVlKTsK
KyAgICAgICAgICAgICAgICBmdW5jdGlvbihhbGxvY2F0b3IpOworICAgICAgICAgICAgfQorICAg
ICAgICB9CisjZWxzZQorICAgICAgICBmdW5jdGlvbihtX2FsbG9jYXRvcik7CisjZW5kaWYKKyAg
ICB9CisKKyAgICBMb2NrIG1fbG9jazsKICAgICBQYWdlUmVzZXJ2YXRpb24gbV9yZXNlcnZhdGlv
bjsKKyNpZiBDUFUoQVJNNjQpCisgICAgc3RkOjphcnJheTxSZWdpb25BbGxvY2F0b3IsIG51bWJl
ck9mUmVnaW9ucz4gbV9hbGxvY2F0b3JzOworI2Vsc2UKKyAgICBBbGxvY2F0b3IgbV9hbGxvY2F0
b3I7CisjZW5kaWYKIH07CiAKLUZpeGVkVk1Qb29sRXhlY3V0YWJsZUFsbG9jYXRvcjo6fkZpeGVk
Vk1Qb29sRXhlY3V0YWJsZUFsbG9jYXRvcigpCi17Ci0gICAgbV9yZXNlcnZhdGlvbi5kZWFsbG9j
YXRlKCk7Ci19Ci0KIC8vIEtlZXAgdGhpcyBwb2ludGVyIGluIGEgbXV0YWJsZSBnbG9iYWwgdmFy
aWFibGUgdG8gaGVscCBMZWFrcyBmaW5kIGl0LgogLy8gQnV0IHdlIGRvIG5vdCB1c2UgdGhpcyBw
b2ludGVyLgogc3RhdGljIEZpeGVkVk1Qb29sRXhlY3V0YWJsZUFsbG9jYXRvciogZ2xvYmFsRml4
ZWRWTVBvb2xFeGVjdXRhYmxlQWxsb2NhdG9yVG9Xb3JrQXJvdW5kTGVha3MgPSBudWxscHRyOwpA
QCAtNDE3LDcgKzczOCw3IEBAIHZvaWQgRXhlY3V0YWJsZUFsbG9jYXRvcjo6aW5pdGlhbGl6ZVVu
ZGUKICAgICBSRUxFQVNFX0FTU0VSVCghZ19qc2NDb25maWcuZml4ZWRWTVBvb2xFeGVjdXRhYmxl
QWxsb2NhdG9yKTsKICAgICBnX2pzY0NvbmZpZy5maXhlZFZNUG9vbEV4ZWN1dGFibGVBbGxvY2F0
b3IgPSBuZXcgRml4ZWRWTVBvb2xFeGVjdXRhYmxlQWxsb2NhdG9yKCk7CiAgICAgZ2xvYmFsRml4
ZWRWTVBvb2xFeGVjdXRhYmxlQWxsb2NhdG9yVG9Xb3JrQXJvdW5kTGVha3MgPSBnX2pzY0NvbmZp
Zy5maXhlZFZNUG9vbEV4ZWN1dGFibGVBbGxvY2F0b3I7Ci0gICAgQ29kZVByb2ZpbGluZzo6bm90
aWZ5QWxsb2NhdG9yKGdfanNjQ29uZmlnLmZpeGVkVk1Qb29sRXhlY3V0YWJsZUFsbG9jYXRvcik7
CisgICAgZ19qc2NDb25maWcuZml4ZWRWTVBvb2xFeGVjdXRhYmxlQWxsb2NhdG9yLT5ub3RpZnlD
b2RlUHJvZmlsaW5nKCk7CiB9CiAKIGJvb2wgRXhlY3V0YWJsZUFsbG9jYXRvcjo6aXNWYWxpZCgp
IGNvbnN0CkBAIC00MjUsNyArNzQ2LDcgQEAgYm9vbCBFeGVjdXRhYmxlQWxsb2NhdG9yOjppc1Zh
bGlkKCkgY29ucwogICAgIEZpeGVkVk1Qb29sRXhlY3V0YWJsZUFsbG9jYXRvciogYWxsb2NhdG9y
ID0gZ19qc2NDb25maWcuZml4ZWRWTVBvb2xFeGVjdXRhYmxlQWxsb2NhdG9yOwogICAgIGlmICgh
YWxsb2NhdG9yKQogICAgICAgICByZXR1cm4gQmFzZTo6aXNWYWxpZCgpOwotICAgIHJldHVybiAh
IWFsbG9jYXRvci0+Ynl0ZXNSZXNlcnZlZCgpOworICAgIHJldHVybiBhbGxvY2F0b3ItPmlzVmFs
aWQoKTsKIH0KIAogYm9vbCBFeGVjdXRhYmxlQWxsb2NhdG9yOjp1bmRlck1lbW9yeVByZXNzdXJl
KCkKQEAgLTUzOSw2ICs4NjAsMjAgQEAgdm9pZCBFeGVjdXRhYmxlQWxsb2NhdG9yOjpkdW1wUHJv
ZmlsZSgpCiB9CiAjZW5kaWYKIAorI2lmIENQVShBUk02NCkKK3ZvaWQqIEV4ZWN1dGFibGVBbGxv
Y2F0b3I6OmdldEp1bXBJc2xhbmRUbyh2b2lkKiBmcm9tLCB2b2lkKiBvbGREZXN0aW5hdGlvbiwg
dm9pZCogbmV3RGVzdGluYXRpb24pCit7CisgICAgRml4ZWRWTVBvb2xFeGVjdXRhYmxlQWxsb2Nh
dG9yKiBhbGxvY2F0b3IgPSBnX2pzY0NvbmZpZy5maXhlZFZNUG9vbEV4ZWN1dGFibGVBbGxvY2F0
b3I7CisgICAgaWYgKCFhbGxvY2F0b3IpIHsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JF
QUNIRUQoKTsgLy8gT09QUzogaXMgdGhpcyBjb3JyZWN0PworICAgIH0KKyAgICAvL2ludHB0cl90
IGRlbHRhID0gYml0d2lzZV9jYXN0PGludHB0cl90PihuZXdEZXN0aW5hdGlvbikgLSBiaXR3aXNl
X2Nhc3Q8aW50cHRyX3Q+KGZyb20pOworICAgIC8vZGF0YUxvZ0xuKCJnZXRKdW1wSXNsYW5kVG8g
ZGVsdGE6ICIsIHN0YXRpY19jYXN0PGRvdWJsZT4oZGVsdGEpLzEwMjQuMC8xMDI0LjAsICJNQiIp
OworCisgICAgcmV0dXJuIGFsbG9jYXRvci0+bWFrZUlzbGFuZChiaXR3aXNlX2Nhc3Q8dWludHB0
cl90Pihmcm9tKSwgYml0d2lzZV9jYXN0PHVpbnRwdHJfdD4ob2xkRGVzdGluYXRpb24pLCBiaXR3
aXNlX2Nhc3Q8dWludHB0cl90PihuZXdEZXN0aW5hdGlvbikpOworfQorI2VuZGlmCisKIHZvaWQq
IHN0YXJ0T2ZGaXhlZEV4ZWN1dGFibGVNZW1vcnlQb29sSW1wbCgpCiB7CiAgICAgRml4ZWRWTVBv
b2xFeGVjdXRhYmxlQWxsb2NhdG9yKiBhbGxvY2F0b3IgPSBnX2pzY0NvbmZpZy5maXhlZFZNUG9v
bEV4ZWN1dGFibGVBbGxvY2F0b3I7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0V4
ZWN1dGFibGVBbGxvY2F0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L0V4ZWN1dGFibGVBbGxvY2F0b3IuaAkocmV2aXNpb24gMjU3ODY2KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9FeGVjdXRhYmxlQWxsb2NhdG9yLmgJKHdvcmtpbmcgY29weSkKQEAg
LTE4NCw2ICsxODQsMTAgQEAgcHVibGljOgogCiAgICAgTG9jayYgZ2V0TG9jaygpIGNvbnN0Owog
CisjaWYgQ1BVKEFSTTY0KQorICAgIHZvaWQqIGdldEp1bXBJc2xhbmRUbyh2b2lkKiBmcm9tLCB2
b2lkKiBvbGREZXN0aW5hdGlvbiwgdm9pZCogbmV3RGVzdGluYXRpb24pOworI2VuZGlmCisKIHBy
aXZhdGU6CiAgICAgRXhlY3V0YWJsZUFsbG9jYXRvcigpID0gZGVmYXVsdDsKICAgICB+RXhlY3V0
YWJsZUFsbG9jYXRvcigpID0gZGVmYXVsdDsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>392836</attachid>
            <date>2020-03-06 19:00:15 -0800</date>
            <delta_ts>2020-03-08 14:08:22 -0700</delta_ts>
            <desc>WIP</desc>
            <filename>c-backup.diff</filename>
            <type>text/plain</type>
            <size>23536</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvQVJNNjRBc3NlbWJsZXIuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL0FSTTY0QXNzZW1i
bGVyLmgJKHJldmlzaW9uIDI1Nzg2NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJs
ZXIvQVJNNjRBc3NlbWJsZXIuaAkod29ya2luZyBjb3B5KQpAQCAtNzgzLDEyICs3ODMsMTMgQEAg
cHVibGljOgogICAgICAgICBpbnNuKGRhdGFQcm9jZXNzaW5nMlNvdXJjZShEQVRBU0laRSwgcm0s
IERhdGFPcF9BU1JWLCBybiwgcmQpKTsKICAgICB9CiAKLSAgICBBTFdBWVNfSU5MSU5FIHZvaWQg
YihpbnQzMl90IG9mZnNldCA9IDApCisgICAgQUxXQVlTX0lOTElORSB2b2lkIGIoLyppbnQzMl90
IG9mZnNldCA9IDAqLykKICAgICB7Ci0gICAgICAgIEFTU0VSVCghKG9mZnNldCAmIDMpKTsKLSAg
ICAgICAgb2Zmc2V0ID4+PSAyOwotICAgICAgICBBU1NFUlQob2Zmc2V0ID09IChvZmZzZXQgPDwg
NikgPj4gNik7Ci0gICAgICAgIGluc24odW5jb25kaXRpb25hbEJyYW5jaEltbWVkaWF0ZShmYWxz
ZSwgb2Zmc2V0KSk7CisgICAgICAgIC8vQVNTRVJUKCEob2Zmc2V0ICYgMykpOworICAgICAgICAv
L29mZnNldCA+Pj0gMjsKKyAgICAgICAgLy9BU1NFUlQob2Zmc2V0ID09IChvZmZzZXQgPDwgNikg
Pj4gNik7CisgICAgICAgIC8vaW5zbih1bmNvbmRpdGlvbmFsQnJhbmNoSW1tZWRpYXRlKGZhbHNl
LCBvZmZzZXQpKTsKKyAgICAgICAgaW5zbih1bmNvbmRpdGlvbmFsQnJhbmNoSW1tZWRpYXRlKGZh
bHNlLCAwKSk7CiAgICAgfQogCiAgICAgQUxXQVlTX0lOTElORSB2b2lkIGJfY29uZChDb25kaXRp
b24gY29uZCwgaW50MzJfdCBvZmZzZXQgPSAwKQpAQCAtODMxLDExICs4MzIsMTIgQEAgcHVibGlj
OgogICAgICAgICBpbnNuKGxvZ2ljYWxTaGlmdGVkUmVnaXN0ZXIoREFUQVNJWkUsIHNldEZsYWdz
ID8gTG9naWNhbE9wX0FORFMgOiBMb2dpY2FsT3BfQU5ELCBzaGlmdCwgdHJ1ZSwgcm0sIGFtb3Vu
dCwgcm4sIHJkKSk7CiAgICAgfQogCi0gICAgQUxXQVlTX0lOTElORSB2b2lkIGJsKGludDMyX3Qg
b2Zmc2V0ID0gMCkKKyAgICBBTFdBWVNfSU5MSU5FIHZvaWQgYmwoLyppbnQzMl90IG9mZnNldCA9
IDAqLykKICAgICB7Ci0gICAgICAgIEFTU0VSVCghKG9mZnNldCAmIDMpKTsKLSAgICAgICAgb2Zm
c2V0ID4+PSAyOwotICAgICAgICBpbnNuKHVuY29uZGl0aW9uYWxCcmFuY2hJbW1lZGlhdGUodHJ1
ZSwgb2Zmc2V0KSk7CisgICAgICAgIC8vQVNTRVJUKCEob2Zmc2V0ICYgMykpOworICAgICAgICAv
L29mZnNldCA+Pj0gMjsKKyAgICAgICAgLy9pbnNuKHVuY29uZGl0aW9uYWxCcmFuY2hJbW1lZGlh
dGUodHJ1ZSwgb2Zmc2V0KSk7CisgICAgICAgIGluc24odW5jb25kaXRpb25hbEJyYW5jaEltbWVk
aWF0ZSh0cnVlLCAwKSk7CiAgICAgfQogCiAgICAgQUxXQVlTX0lOTElORSB2b2lkIGJscihSZWdp
c3RlcklEIHJuKQpAQCAtMjU4Miw2ICsyNTg0LDE0IEBAIHB1YmxpYzoKICAgICB7CiAgICAgICAg
IGludHB0cl90IG9mZnNldCA9IChyZWludGVycHJldF9jYXN0PGludHB0cl90Pih0bykgLSByZWlu
dGVycHJldF9jYXN0PGludHB0cl90Pih3aGVyZSkpID4+IDI7CiAgICAgICAgIEFTU0VSVChzdGF0
aWNfY2FzdDxpbnQ+KG9mZnNldCkgPT0gb2Zmc2V0KTsKKworICAgICAgICBpZiAoIWlzSW50PDI2
PihvZmZzZXQpKSB7CisgICAgICAgICAgICAvLyBPT1BTOiBkaXNhc3NlbWJsZSBvbGQgYnJhbmNo
IGRlc3QhCisgICAgICAgICAgICB0byA9IEV4ZWN1dGFibGVBbGxvY2F0b3I6OnNpbmdsZXRvbigp
LmdldEp1bXBJc2xhbmRUbyh3aGVyZSwgbnVsbHB0ciwgdG8pOworICAgICAgICAgICAgb2Zmc2V0
ID0gKGJpdHdpc2VfY2FzdDxpbnRwdHJfdD4odG8pIC0gYml0d2lzZV9jYXN0PGludHB0cl90Pih3
aGVyZSkpID4+IDI7CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChpc0ludDwyNj4ob2Zmc2V0
KSk7CisgICAgICAgIH0KKwogICAgICAgICBpbnQgaW5zbiA9IHVuY29uZGl0aW9uYWxCcmFuY2hJ
bW1lZGlhdGUoZmFsc2UsIHN0YXRpY19jYXN0PGludD4ob2Zmc2V0KSk7CiAgICAgICAgIFJFTEVB
U0VfQVNTRVJUKHJvdW5kVXBUb011bHRpcGxlT2Y8aW5zdHJ1Y3Rpb25TaXplPih3aGVyZSkgPT0g
d2hlcmUpOwogICAgICAgICBwZXJmb3JtSklUTWVtY3B5KHdoZXJlLCAmaW5zbiwgc2l6ZW9mKGlu
dCkpOwpAQCAtMjg3Miw3ICsyODgyLDcgQEAgcHVibGljOgogICAgICAgICAgICAgICAgIHJldHVy
biBMaW5rSnVtcENvbmRpdGlvbkRpcmVjdDsKIAogICAgICAgICAgICAgcmV0dXJuIExpbmtKdW1w
Q29uZGl0aW9uOwotICAgICAgICAgICAgfQorICAgICAgICB9CiAgICAgICAgIGNhc2UgSnVtcENv
bXBhcmVBbmRCcmFuY2g6ICB7CiAgICAgICAgICAgICBBU1NFUlQoaXM0Qnl0ZUFsaWduZWQoZnJv
bSkpOwogICAgICAgICAgICAgQVNTRVJUKGlzNEJ5dGVBbGlnbmVkKHRvKSk7CkBAIC0yOTk0LDkg
KzMwMDQsMTYgQEAgcHJvdGVjdGVkOgogICAgICAgICBBU1NFUlQoIShyZWludGVycHJldF9jYXN0
PGludHB0cl90Pih0bykgJiAzKSk7CiAgICAgICAgIGFzc2VydElzTm90VGFnZ2VkKHRvKTsKICAg
ICAgICAgYXNzZXJ0SXNOb3RUYWdnZWQoZnJvbUluc3RydWN0aW9uKTsKLSAgICAgICAgaW50cHRy
X3Qgb2Zmc2V0ID0gKHJlaW50ZXJwcmV0X2Nhc3Q8aW50cHRyX3Q+KHRvKSAtIHJlaW50ZXJwcmV0
X2Nhc3Q8aW50cHRyX3Q+KGZyb21JbnN0cnVjdGlvbikpID4+IDI7CisgICAgICAgIGludHB0cl90
IG9mZnNldCA9IChiaXR3aXNlX2Nhc3Q8aW50cHRyX3Q+KHRvKSAtIGJpdHdpc2VfY2FzdDxpbnRw
dHJfdD4oZnJvbUluc3RydWN0aW9uKSkgPj4gMjsKICAgICAgICAgQVNTRVJUKHN0YXRpY19jYXN0
PGludD4ob2Zmc2V0KSA9PSBvZmZzZXQpOwogCisgICAgICAgIGlmICghaXNJbnQ8MjY+KG9mZnNl
dCkpIHsKKyAgICAgICAgICAgIC8vIE9PUFM6IGRpc2Fzc2VtYmxlIG9sZCBicmFuY2ggZGVzdCEK
KyAgICAgICAgICAgIHRvID0gRXhlY3V0YWJsZUFsbG9jYXRvcjo6c2luZ2xldG9uKCkuZ2V0SnVt
cElzbGFuZFRvKGJpdHdpc2VfY2FzdDx2b2lkKj4oZnJvbUluc3RydWN0aW9uKSwgbnVsbHB0ciwg
dG8pOworICAgICAgICAgICAgb2Zmc2V0ID0gKGJpdHdpc2VfY2FzdDxpbnRwdHJfdD4odG8pIC0g
Yml0d2lzZV9jYXN0PGludHB0cl90Pihmcm9tSW5zdHJ1Y3Rpb24pKSA+PiAyOworICAgICAgICAg
ICAgUkVMRUFTRV9BU1NFUlQoaXNJbnQ8MjY+KG9mZnNldCkpOworICAgICAgICB9CisKICAgICAg
ICAgaW50IGluc24gPSB1bmNvbmRpdGlvbmFsQnJhbmNoSW1tZWRpYXRlKGlzQ2FsbCwgc3RhdGlj
X2Nhc3Q8aW50PihvZmZzZXQpKTsKICAgICAgICAgUkVMRUFTRV9BU1NFUlQocm91bmRVcFRvTXVs
dGlwbGVPZjxpbnN0cnVjdGlvblNpemU+KGZyb20pID09IGZyb20pOwogICAgICAgICBjb3B5KGZy
b20sICZpbnNuLCBzaXplb2YoaW50KSk7CkBAIC0zMDA4LDcgKzMwMjUsNyBAQCBwcm90ZWN0ZWQ6
CiAgICAgICAgIEFTU0VSVCghKHJlaW50ZXJwcmV0X2Nhc3Q8aW50cHRyX3Q+KGZyb20pICYgMykp
OwogICAgICAgICBBU1NFUlQoIShyZWludGVycHJldF9jYXN0PGludHB0cl90Pih0bykgJiAzKSk7
CiAgICAgICAgIGludHB0cl90IG9mZnNldCA9IChyZWludGVycHJldF9jYXN0PGludHB0cl90Pih0
bykgLSByZWludGVycHJldF9jYXN0PGludHB0cl90Pihmcm9tSW5zdHJ1Y3Rpb24pKSA+PiAyOwot
ICAgICAgICBBU1NFUlQoaXNJbnQ8MjY+KG9mZnNldCkpOworICAgICAgICAvL0FTU0VSVChpc0lu
dDwyNj4ob2Zmc2V0KSk7IC8vT09QUwogCiAgICAgICAgIGJvb2wgdXNlRGlyZWN0ID0gaXNJbnQ8
MTk+KG9mZnNldCk7CiAgICAgICAgIEFTU0VSVCh0eXBlID09IEluZGlyZWN0QnJhbmNoIHx8IHVz
ZURpcmVjdCk7CkBAIC0zMDM2LDcgKzMwNTMsNyBAQCBwcm90ZWN0ZWQ6CiAgICAgICAgIEFTU0VS
VCghKHJlaW50ZXJwcmV0X2Nhc3Q8aW50cHRyX3Q+KGZyb20pICYgMykpOwogICAgICAgICBBU1NF
UlQoIShyZWludGVycHJldF9jYXN0PGludHB0cl90Pih0bykgJiAzKSk7CiAgICAgICAgIGludHB0
cl90IG9mZnNldCA9IChyZWludGVycHJldF9jYXN0PGludHB0cl90Pih0bykgLSByZWludGVycHJl
dF9jYXN0PGludHB0cl90Pihmcm9tSW5zdHJ1Y3Rpb24pKSA+PiAyOwotICAgICAgICBBU1NFUlQo
aXNJbnQ8MjY+KG9mZnNldCkpOworICAgICAgICAvLyBBU1NFUlQoaXNJbnQ8MjY+KG9mZnNldCkp
OyBPT1BTCiAKICAgICAgICAgYm9vbCB1c2VEaXJlY3QgPSBpc0ludDwxOT4ob2Zmc2V0KTsKICAg
ICAgICAgQVNTRVJUKHR5cGUgPT0gSW5kaXJlY3RCcmFuY2ggfHwgdXNlRGlyZWN0KTsKQEAgLTMw
NjUsNyArMzA4Miw3IEBAIHByb3RlY3RlZDoKICAgICAgICAgQVNTRVJUKCEocmVpbnRlcnByZXRf
Y2FzdDxpbnRwdHJfdD4odG8pICYgMykpOwogICAgICAgICBpbnRwdHJfdCBvZmZzZXQgPSAocmVp
bnRlcnByZXRfY2FzdDxpbnRwdHJfdD4odG8pIC0gcmVpbnRlcnByZXRfY2FzdDxpbnRwdHJfdD4o
ZnJvbUluc3RydWN0aW9uKSkgPj4gMjsKICAgICAgICAgQVNTRVJUKHN0YXRpY19jYXN0PGludD4o
b2Zmc2V0KSA9PSBvZmZzZXQpOwotICAgICAgICBBU1NFUlQoaXNJbnQ8MjY+KG9mZnNldCkpOwor
ICAgICAgICAvL0FTU0VSVChpc0ludDwyNj4ob2Zmc2V0KSk7IE9PUFMKIAogICAgICAgICBib29s
IHVzZURpcmVjdCA9IGlzSW50PDE0PihvZmZzZXQpOwogICAgICAgICBBU1NFUlQodHlwZSA9PSBJ
bmRpcmVjdEJyYW5jaCB8fCB1c2VEaXJlY3QpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9FeGVjdXRhYmxlQWxsb2NhdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L0V4ZWN1dGFibGVBbGxvY2F0b3IuY3BwCShyZXZpc2lvbiAyNTc4NjYpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0V4ZWN1dGFibGVBbGxvY2F0b3IuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zMCw3ICszMCw5IEBACiAKICNpbmNsdWRlICJDb2RlUHJvZmlsaW5nLmgi
CiAjaW5jbHVkZSAiRXhlY3V0YWJsZUFsbG9jYXRpb25GdXp6LmgiCisjaW5jbHVkZSAiSXRlcmF0
aW9uU3RhdHVzLmgiCiAjaW5jbHVkZSAiSlNDSW5saW5lcy5oIgorI2luY2x1ZGUgPHR5cGVfdHJh
aXRzPgogI2luY2x1ZGUgPHd0Zi9GaWxlU3lzdGVtLmg+CiAjaW5jbHVkZSA8d3RmL01ldGFBbGxv
Y2F0b3IuaD4KICNpbmNsdWRlIDx3dGYvUGFnZVJlc2VydmF0aW9uLmg+CkBAIC05Niw5ICs5OCwx
NCBAQCBzdGF0aWMgY29uc3RleHByIHNpemVfdCBmaXhlZEV4ZWN1dGFibGVNCiAjZWxpZiBDUFUo
QVJNKQogc3RhdGljIGNvbnN0ZXhwciBzaXplX3QgZml4ZWRFeGVjdXRhYmxlTWVtb3J5UG9vbFNp
emUgPSAxNiAqIDEwMjQgKiAxMDI0OwogI2VsaWYgQ1BVKEFSTTY0KQotc3RhdGljIGNvbnN0ZXhw
ciBzaXplX3QgZml4ZWRFeGVjdXRhYmxlTWVtb3J5UG9vbFNpemUgPSAxMjggKiAxMDI0ICogMTAy
NDsKK3N0YXRpYyBjb25zdGV4cHIgc2l6ZV90IGZpeGVkRXhlY3V0YWJsZU1lbW9yeVBvb2xTaXpl
ID0gMSAqIDEwMjQgKiAxMDI0ICogMTAyNDsKK3N0YXRpYyBjb25zdGV4cHIgc2l6ZV90IHJlZ2lv
blNpemUgPSAxMjggKiAxMDI0ICogMTAyNDsKK3N0YXRpYyBjb25zdGV4cHIgc2l6ZV90IGlzbGFu
ZFJlZ2lvblNpemUgPSA2NCAqIDEwMjQgKiAxMDI0Oworc3RhdGljIGNvbnN0ZXhwciBzaXplX3Qg
bnVtYmVyT2ZSZWdpb25zID0gZml4ZWRFeGVjdXRhYmxlTWVtb3J5UG9vbFNpemUgLyByZWdpb25T
aXplOworc3RhdGljIGNvbnN0ZXhwciBzaXplX3QgaXNsYW5kU2l6ZUluQnl0ZXMgPSAxNjsKK3N0
YXRpYyBjb25zdGV4cHIgc2l6ZV90IG1heElzbGFuZHNQZXJSZWdpb24gPSBpc2xhbmRSZWdpb25T
aXplIC8gaXNsYW5kU2l6ZUluQnl0ZXM7CiAjZWxpZiBDUFUoWDg2XzY0KQotc3RhdGljIGNvbnN0
ZXhwciBzaXplX3QgZml4ZWRFeGVjdXRhYmxlTWVtb3J5UG9vbFNpemUgPSAxMDI0ICogMTAyNCAq
IDEwMjQ7CitzdGF0aWMgY29uc3RleHByIHNpemVfdCBmaXhlZEV4ZWN1dGFibGVNZW1vcnlQb29s
U2l6ZSA9IDEgKiAxMDI0ICogMTAyNCAqIDEwMjQ7CiAjZWxzZQogc3RhdGljIGNvbnN0ZXhwciBz
aXplX3QgZml4ZWRFeGVjdXRhYmxlTWVtb3J5UG9vbFNpemUgPSAzMiAqIDEwMjQgKiAxMDI0Owog
I2VuZGlmCkBAIC0zMTMsOSArMzIwLDEwIEBAIHN0YXRpYyBBTFdBWVNfSU5MSU5FIEpJVFJlc2Vy
dmF0aW9uIGluaXQKICAgICBpZiAoIWlzSklURW5hYmxlZCgpKQogICAgICAgICByZXR1cm4gcmVz
ZXJ2YXRpb247CiAKLSAgICBpZiAoT3B0aW9uczo6aml0TWVtb3J5UmVzZXJ2YXRpb25TaXplKCkp
Ci0gICAgICAgIHJlc2VydmF0aW9uLnNpemUgPSBPcHRpb25zOjpqaXRNZW1vcnlSZXNlcnZhdGlv
blNpemUoKTsKLSAgICBlbHNlCisgICAgLy8gT09QUyEKKyAgICAvL2lmIChPcHRpb25zOjpqaXRN
ZW1vcnlSZXNlcnZhdGlvblNpemUoKSkKKyAgICAvLyAgICByZXNlcnZhdGlvbi5zaXplID0gT3B0
aW9uczo6aml0TWVtb3J5UmVzZXJ2YXRpb25TaXplKCk7CisgICAgLy9lbHNlCiAgICAgICAgIHJl
c2VydmF0aW9uLnNpemUgPSBmaXhlZEV4ZWN1dGFibGVNZW1vcnlQb29sU2l6ZTsKICAgICByZXNl
cnZhdGlvbi5zaXplID0gc3RkOjptYXgocm91bmRVcFRvTXVsdGlwbGVPZihwYWdlU2l6ZSgpLCBy
ZXNlcnZhdGlvbi5zaXplKSwgcGFnZVNpemUoKSAqIDIpOwogCkBAIC0zNjMsNTIgKzM3MSwzOTYg
QEAgc3RhdGljIEFMV0FZU19JTkxJTkUgSklUUmVzZXJ2YXRpb24gaW5pdAogICAgIHJldHVybiBy
ZXNlcnZhdGlvbjsKIH0KIAotY2xhc3MgRml4ZWRWTVBvb2xFeGVjdXRhYmxlQWxsb2NhdG9yIGZp
bmFsIDogcHVibGljIE1ldGFBbGxvY2F0b3IgeworY2xhc3MgRml4ZWRWTVBvb2xFeGVjdXRhYmxl
QWxsb2NhdG9yIGZpbmFsIHsKICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKIHB1YmxpYzoK
ICAgICBGaXhlZFZNUG9vbEV4ZWN1dGFibGVBbGxvY2F0b3IoKQotICAgICAgICA6IE1ldGFBbGxv
Y2F0b3Ioaml0QWxsb2NhdGlvbkdyYW51bGUpIC8vIHJvdW5kIHVwIGFsbCBhbGxvY2F0aW9ucyB0
byAzMiBieXRlcwogICAgIHsKKyAgICAgICAgZm9yRWFjaEFsbG9jYXRvcihbJl0gKEFsbG9jYXRv
ciYgYWxsb2NhdG9yKSB7CisgICAgICAgICAgICBhbGxvY2F0b3IubV9maXhlZEFsbG9jYXRvciA9
IHRoaXM7CisgICAgICAgIH0pOworCiAgICAgICAgIEpJVFJlc2VydmF0aW9uIHJlc2VydmF0aW9u
ID0gaW5pdGlhbGl6ZUpJVFBhZ2VSZXNlcnZhdGlvbigpOwogICAgICAgICBtX3Jlc2VydmF0aW9u
ID0gV1RGTW92ZShyZXNlcnZhdGlvbi5wYWdlUmVzZXJ2YXRpb24pOwogICAgICAgICBpZiAobV9y
ZXNlcnZhdGlvbikgewotICAgICAgICAgICAgYWRkRnJlc2hGcmVlU3BhY2UocmVzZXJ2YXRpb24u
YmFzZSwgcmVzZXJ2YXRpb24uc2l6ZSk7CisjaWYgQ1BVKEFSTTY0KQorICAgICAgICAgICAgdWlu
dHB0cl90IHN0YXJ0ID0gYml0d2lzZV9jYXN0PHVpbnRwdHJfdD4obV9yZXNlcnZhdGlvbi5iYXNl
KCkpOworICAgICAgICAgICAgdWludHB0cl90IHJlc2VydmF0aW9uRW5kID0gc3RhcnQgKyBtX3Jl
c2VydmF0aW9uLnNpemUoKTsKKyAgICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbnVt
YmVyT2ZSZWdpb25zOyArK2kpIHsKKyAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChzdGFy
dCA8IHJlc2VydmF0aW9uRW5kKTsKKyAgICAgICAgICAgICAgICBtX2FsbG9jYXRvcnNbaV0uc3Rh
cnQgPSBzdGFydDsKKyAgICAgICAgICAgICAgICBtX2FsbG9jYXRvcnNbaV0uZW5kID0gc3RhcnQg
KyByZWdpb25TaXplOworICAgICAgICAgICAgICAgIGlmIChtX2FsbG9jYXRvcnNbaV0uZW5kID4g
cmVzZXJ2YXRpb25FbmQpIHsKKyAgICAgICAgICAgICAgICAgICAgLy8gV2UgbWF5IGhhdmUgdGFr
ZW4gYSBwYWdlIGZvciB0aGUgZXhlY3V0YWJsZSBvbmx5IGNvcHkgdGh1bmsuCisgICAgICAgICAg
ICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKGkgPT0gbnVtYmVyT2ZSZWdpb25zIC0gMSk7CisgICAg
ICAgICAgICAgICAgICAgIG1fYWxsb2NhdG9yc1tpXS5lbmQgPSByZXNlcnZhdGlvbkVuZDsKKyAg
ICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBtX2FsbG9jYXRvcnNbaV0uYWRkRnJl
c2hGcmVlU3BhY2UoYml0d2lzZV9jYXN0PHZvaWQqPihtX2FsbG9jYXRvcnNbaV0uc3RhcnQpLCBt
X2FsbG9jYXRvcnNbaV0uYWxsb2NhdG9yU2l6ZSgpKTsKKworICAgICAgICAgICAgICAgIHN0YXJ0
ICs9IHJlZ2lvblNpemU7CisgICAgICAgICAgICB9CisjZWxzZQorICAgICAgICAgICAgbV9hbGxv
Y2F0b3IuYWRkRnJlc2hGcmVlU3BhY2UocmVzZXJ2YXRpb24uYmFzZSwgcmVzZXJ2YXRpb24uc2l6
ZSk7CisjZW5kaWYKKwogICAgICAgICAgICAgQVNTRVJUKGJ5dGVzUmVzZXJ2ZWQoKSA9PSByZXNl
cnZhdGlvbi5zaXplKTsgLy8gU2luY2Ugb3VyIGV4ZWN1dGFibGUgbWVtb3J5IGlzIGZpeGVkLXNp
emVkLCBieXRlc1Jlc2VydmVkIGlzIG5ldmVyIGNoYW5nZWQgYWZ0ZXIgaW5pdGlhbGl6YXRpb24u
CiAgICAgICAgIH0KICAgICB9CiAKLSAgICB2aXJ0dWFsIH5GaXhlZFZNUG9vbEV4ZWN1dGFibGVB
bGxvY2F0b3IoKTsKKyAgICB+Rml4ZWRWTVBvb2xFeGVjdXRhYmxlQWxsb2NhdG9yKCkKKyAgICB7
CisgICAgICAgIG1fcmVzZXJ2YXRpb24uZGVhbGxvY2F0ZSgpOworICAgIH0KIAogICAgIHZvaWQq
IG1lbW9yeVN0YXJ0KCkgeyByZXR1cm4gdW50YWdDb2RlUHRyPEV4ZWN1dGFibGVNZW1vcnlQdHJU
YWc+KGdfanNjQ29uZmlnLnN0YXJ0RXhlY3V0YWJsZU1lbW9yeSk7IH0KICAgICB2b2lkKiBtZW1v
cnlFbmQoKSB7IHJldHVybiB1bnRhZ0NvZGVQdHI8RXhlY3V0YWJsZU1lbW9yeVB0clRhZz4oZ19q
c2NDb25maWcuZW5kRXhlY3V0YWJsZU1lbW9yeSk7IH0KICAgICBib29sIGlzSklUUEModm9pZCog
cGMpIHsgcmV0dXJuIG1lbW9yeVN0YXJ0KCkgPD0gcGMgJiYgcGMgPCBtZW1vcnlFbmQoKTsgfQor
ICAgIGJvb2wgaXNWYWxpZCgpIHsgcmV0dXJuICEhbV9yZXNlcnZhdGlvbjsgfQogCi1wcm90ZWN0
ZWQ6Ci0gICAgRnJlZVNwYWNlUHRyIGFsbG9jYXRlTmV3U3BhY2Uoc2l6ZV90Jikgb3ZlcnJpZGUK
KyAgICBSZWZQdHI8RXhlY3V0YWJsZU1lbW9yeUhhbmRsZT4gYWxsb2NhdGUoc2l6ZV90IHNpemVJ
bkJ5dGVzLCB2b2lkKiBvd25lclVJRCkKICAgICB7Ci0gICAgICAgIC8vIFdlJ3JlIG9wZXJhdGlu
ZyBpbiBhIGZpeGVkIHBvb2wsIHNvIG5ldyBhbGxvY2F0aW9uIGlzIGFsd2F5cyBwcm9oaWJpdGVk
LgorI2lmIENQVShBUk02NCkKKyAgICAgICAgLy8gT09QUzogcGlwZSB0aHJvdWdoIGxvY2sgdG8g
YWxsb2NhdG9ycworICAgICAgICBhdXRvIGxvY2tIb2xkZXIgPSBob2xkTG9jayhnZXRMb2NrKCkp
OworICAgICAgICAKKyAgICAgICAgdW5zaWduZWQgc3RhcnQgPSBjcnlwdG9ncmFwaGljYWxseVJh
bmRvbU51bWJlcigpICUgbV9hbGxvY2F0b3JzLnNpemUoKTsKKyAgICAgICAgdW5zaWduZWQgaSA9
IHN0YXJ0OworICAgICAgICB3aGlsZSAodHJ1ZSkgeworICAgICAgICAgICAgUmVnaW9uQWxsb2Nh
dG9yJiBhbGxvY2F0b3IgPSBtX2FsbG9jYXRvcnNbaV07CisgICAgICAgICAgICBpZiAoUmVmUHRy
PEV4ZWN1dGFibGVNZW1vcnlIYW5kbGU+IHJlc3VsdCA9IGFsbG9jYXRvci5hbGxvY2F0ZShzaXpl
SW5CeXRlcywgb3duZXJVSUQpKQorICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAg
ICAgICAgICBpID0gaSArIDE7CisgICAgICAgICAgICBpID0gaSAlIG1fYWxsb2NhdG9ycy5zaXpl
KCk7CisgICAgICAgICAgICBpZiAoaSA9PSBzdGFydCkKKyAgICAgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgfQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyNlbHNlCisgICAgICAgIHJldHVy
biBtX2FsbG9jYXRvci5hbGxvY2F0ZShzaXplSW5CeXRlcywgb3duZXJVSUQpOworI2VuZGlmCiAg
ICAgfQogCi0gICAgdm9pZCBub3RpZnlOZWVkUGFnZSh2b2lkKiBwYWdlLCBzaXplX3QgY291bnQp
IG92ZXJyaWRlCisgICAgLyoKKyAgICAgKiAjaW5jbHVkZSA8dHVwbGU+CisjaW5jbHVkZSA8YXJy
YXk+CisjaW5jbHVkZSA8Y3N0ZGlvPgorCitzdHJ1Y3QgRm9vIHsKKyAgICBpbnQgeDsKKyAgICBp
bnQgeTsKK307CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBSZXN1bHRUeXBlLCBzaXplX3QuLi4gSXMs
IHR5cGVuYW1lIC4uLkFyZ3M+Citjb25zdGV4cHIgYXV0byBtYXAoc3RkOjppbmRleF9zZXF1ZW5j
ZTxJcy4uLj4gc2VxdWVuY2UsIEFyZ3MmJi4uLiBhcmdzKSAtPiBzdGQ6OmFycmF5PFJlc3VsdFR5
cGUsIHNpemVvZi4uLihJcyk+Cit7CisgICAgcmV0dXJuIHsgKElzLCBSZXN1bHRUeXBlIHsgc3Rk
Ojpmb3J3YXJkPEFyZ3M+KGFyZ3MpLi4uIH0gKS4uLiB9OworfQordGVtcGxhdGU8dHlwZW5hbWUg
UmVzdWx0VHlwZSwgc2l6ZV90IE4sIHR5cGVuYW1lIC4uLkFyZ3M+Citjb25zdGV4cHIgYXV0byBn
ZW5lcmF0ZUFycmF5KEFyZ3MmJi4uLiBhcmdzKSAtPiBkZWNsdHlwZShhdXRvKQoreworICAgIGF1
dG8gdHVwbGUgPSBzdGQ6Om1ha2VfaW5kZXhfc2VxdWVuY2U8Tj4oKTsKKyAgICByZXR1cm4gbWFw
PFJlc3VsdFR5cGU+KHR1cGxlLCBzdGQ6OmZvcndhcmQ8QXJncz4oYXJncykuLi4pOworfQorCitj
b25zdGV4cHIgYXV0byB2YWx1ZXMgPSBnZW5lcmF0ZUFycmF5PEZvbywgMj4oMzAsIDQ1KTsKKwor
aW50IG1haW4oKQoreworICAgIGZvciAoYXV0byYgdmFsdWUgOiB2YWx1ZXMpCisgICAgICAgIHN0
ZDo6cHJpbnRmKCIldSwgIiwgdmFsdWUpOworfQorKi8KKworICAgIExvY2smIGdldExvY2soKSB7
IHJldHVybiBtX2xvY2s7IH0KKworICAgIC8vIE5vbiBhdG9taWMKKyAgICBzaXplX3QgYnl0ZXNB
bGxvY2F0ZWQoKSAKICAgICB7Ci0gICAgICAgIG1fcmVzZXJ2YXRpb24uY29tbWl0KHBhZ2UsIHBh
Z2VTaXplKCkgKiBjb3VudCk7CisgICAgICAgIHNpemVfdCByZXN1bHQgPSAwOworICAgICAgICBm
b3JFYWNoQWxsb2NhdG9yKFsmXSAoQWxsb2NhdG9yJiBhbGxvY2F0b3IpIHsKKyAgICAgICAgICAg
IHJlc3VsdCArPSBhbGxvY2F0b3IuYnl0ZXNBbGxvY2F0ZWQoKTsKKyAgICAgICAgfSk7CisgICAg
ICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorICAgIHNpemVfdCBieXRlc1Jlc2VydmVkKCkgCisg
ICAgeworICAgICAgICBzaXplX3QgcmVzdWx0ID0gMDsKKyAgICAgICAgZm9yRWFjaEFsbG9jYXRv
cihbJl0gKEFsbG9jYXRvciYgYWxsb2NhdG9yKSB7CisgICAgICAgICAgICByZXN1bHQgKz0gYWxs
b2NhdG9yLmJ5dGVzUmVzZXJ2ZWQoKTsKKyAgICAgICAgfSk7CisgICAgICAgIHJldHVybiByZXN1
bHQ7CisgICAgfQorICAgIHNpemVfdCBieXRlc0NvbW1pdHRlZCgpCisgICAgeworICAgICAgICBz
aXplX3QgcmVzdWx0ID0gMDsKKyAgICAgICAgZm9yRWFjaEFsbG9jYXRvcihbJl0gKEFsbG9jYXRv
ciYgYWxsb2NhdG9yKSB7CisgICAgICAgICAgICByZXN1bHQgKz0gYWxsb2NhdG9yLmJ5dGVzQ29t
bWl0dGVkKCk7CisgICAgICAgIH0pOworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKwor
ICAgIGJvb2wgaXNJbkFsbG9jYXRlZE1lbW9yeShjb25zdCBBYnN0cmFjdExvY2tlciYgbG9ja2Vy
LCB2b2lkKiBhZGRyZXNzKQorICAgIHsKKyAgICAgICAgYm9vbCByZXN1bHQgPSBmYWxzZTsKKyAg
ICAgICAgZm9yRWFjaEFsbG9jYXRvcihbJl0gKEFsbG9jYXRvciYgYWxsb2NhdG9yKSB7CisgICAg
ICAgICAgICBpZiAoYWxsb2NhdG9yLmlzSW5BbGxvY2F0ZWRNZW1vcnkobG9ja2VyLCBhZGRyZXNz
KSkgeworICAgICAgICAgICAgICAgIHJlc3VsdCA9IHRydWU7CisgICAgICAgICAgICAgICAgcmV0
dXJuIEl0ZXJhdGlvblN0YXR1czo6RG9uZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJl
dHVybiBJdGVyYXRpb25TdGF0dXM6OkNvbnRpbnVlOworICAgICAgICB9KTsKKworICAgICAgICBy
ZXR1cm4gcmVzdWx0OworICAgIH0KKworI2lmIEVOQUJMRShNRVRBX0FMTE9DQVRPUl9QUk9GSUxF
KQorICAgIHZvaWQgZHVtcFByb2ZpbGUoKQorICAgIHsKKyAgICAgICAgZm9yRWFjaEFsbG9jYXRv
cihbJl0gKEFsbG9jYXRvciYgYWxsb2NhdG9yKSB7CisgICAgICAgICAgICBhbGxvY2F0b3IuZHVt
cFByb2ZpbGUoKTsKKyAgICAgICAgfSk7CisgICAgfQorI2VuZGlmCisKKyAgICB2b2lkIG5vdGlm
eUNvZGVQcm9maWxpbmcoKQorICAgIHsKKyAgICAgICAgZm9yRWFjaEFsbG9jYXRvcihbJl0gKEFs
bG9jYXRvciYgYWxsb2NhdG9yKSB7CisgICAgICAgICAgICBDb2RlUHJvZmlsaW5nOjpub3RpZnlB
bGxvY2F0b3IoJmFsbG9jYXRvcik7CisgICAgICAgIH0pOwogICAgIH0KIAotICAgIHZvaWQgbm90
aWZ5UGFnZUlzRnJlZSh2b2lkKiBwYWdlLCBzaXplX3QgY291bnQpIG92ZXJyaWRlCisgICAgTWV0
YUFsbG9jYXRvcjo6U3RhdGlzdGljcyBjdXJyZW50U3RhdGlzdGljcygpCiAgICAgewotICAgICAg
ICBtX3Jlc2VydmF0aW9uLmRlY29tbWl0KHBhZ2UsIHBhZ2VTaXplKCkgKiBjb3VudCk7CisgICAg
ICAgIC8vIE9PUFM6IG1ha2UgYXRvbWljIGJ5IGhvbGRpbmcgbG9jay4uLgorICAgICAgICBNZXRh
QWxsb2NhdG9yOjpTdGF0aXN0aWNzIHJlc3VsdCB7IDAsIDAsIDAgfTsKKyAgICAgICAgZm9yRWFj
aEFsbG9jYXRvcihbJl0gKEFsbG9jYXRvciYgYWxsb2NhdG9yKSB7CisgICAgICAgICAgICBhdXRv
IGFsbG9jYXRvclN0YXRzID0gYWxsb2NhdG9yLmN1cnJlbnRTdGF0aXN0aWNzKCk7CisgICAgICAg
ICAgICByZXN1bHQuYnl0ZXNBbGxvY2F0ZWQgKz0gYWxsb2NhdG9yU3RhdHMuYnl0ZXNBbGxvY2F0
ZWQ7CisgICAgICAgICAgICByZXN1bHQuYnl0ZXNSZXNlcnZlZCArPSBhbGxvY2F0b3JTdGF0cy5i
eXRlc1Jlc2VydmVkOworICAgICAgICAgICAgcmVzdWx0LmJ5dGVzQ29tbWl0dGVkICs9IGFsbG9j
YXRvclN0YXRzLmJ5dGVzQ29tbWl0dGVkOworICAgICAgICB9KTsKKyAgICAgICAgcmV0dXJuIHJl
c3VsdDsKICAgICB9CiAKKyNpZiBDUFUoQVJNNjQpCiBwcml2YXRlOgorICAgIGNsYXNzIFJlZ2lv
bkFsbG9jYXRvcjsKKworICAgIFJlZ2lvbkFsbG9jYXRvciogZmluZFJlZ2lvbih1aW50cHRyX3Qg
cHRyKQorICAgIHsKKyAgICAgICAgUmVnaW9uQWxsb2NhdG9yKiByZXN1bHQgPSBudWxscHRyOwor
ICAgICAgICBmb3JFYWNoQWxsb2NhdG9yKFsmXSAoUmVnaW9uQWxsb2NhdG9yJiBhbGxvY2F0b3Ip
IHsKKyAgICAgICAgICAgIGlmIChhbGxvY2F0b3Iuc3RhcnQgPD0gcHRyICYmIHB0ciA8IGFsbG9j
YXRvci5lbmQpIHsKKyAgICAgICAgICAgICAgICByZXN1bHQgPSAmYWxsb2NhdG9yOworICAgICAg
ICAgICAgICAgIHJldHVybiBJdGVyYXRpb25TdGF0dXM6OkRvbmU7CisgICAgICAgICAgICB9Cisg
ICAgICAgICAgICByZXR1cm4gSXRlcmF0aW9uU3RhdHVzOjpDb250aW51ZTsKKyAgICAgICAgfSk7
CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorCisgICAgdm9pZCogaXNsYW5kRm9ySnVt
cExvY2F0aW9uKHVpbnRwdHJfdCBqdW1wTG9jYXRpb24sIHVpbnRwdHJfdCBvbGRUYXJnZXQpCisg
ICAgeworICAgICAgICBSZWdpb25BbGxvY2F0b3IqIGFsbG9jYXRvciA9IGZpbmRSZWdpb24oanVt
cExvY2F0aW9uKTsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQoYWxsb2NhdG9yKTsKKworICAgICAg
ICAvLyBJZiB3ZSB3ZXJlIGFscmVhZHkgYW4gaXNsYW5kLCB3ZSBjYW4ganVzdCByZXVzZSBpdC4K
KyAgICAgICAgaWYgKGFsbG9jYXRvci0+aXNsYW5kQmVnaW4oKSA8PSBvbGRUYXJnZXQgJiYgb2xk
VGFyZ2V0IDwgYWxsb2NhdG9yLT5lbmQpIHsKKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKGFs
bG9jYXRvci0+anVtcExvY2F0aW9uc1RvSXNsYW5kcy5jb250YWlucyhqdW1wTG9jYXRpb24pKTsK
KyAgICAgICAgICAgIHJldHVybiBiaXR3aXNlX2Nhc3Q8dm9pZCo+KG9sZFRhcmdldCk7CisgICAg
ICAgIH0KKworICAgICAgICB2b2lkKiByZXN1bHQgPSBhbGxvY2F0b3ItPmFsbG9jYXRlSXNsYW5k
KCk7CisgICAgICAgIGFsbG9jYXRvci0+anVtcExvY2F0aW9uc1RvSXNsYW5kcy5hcHBlbmQoanVt
cExvY2F0aW9uKTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisKK3B1YmxpYzoKKwor
ICAgIHZvaWQqIG1ha2VJc2xhbmQodWludHB0cl90IGp1bXBMb2NhdGlvbiwgdWludHB0cl90IG9s
ZFRhcmdldCwgdWludHB0cl90IG5ld1RhcmdldCkKKyAgICB7CisgICAgICAgIGF1dG8gbG9ja0hv
bGRlciA9IGhvbGRMb2NrKGdldExvY2soKSk7CisKKyAgICAgICAgLy8gT09QUzogdGhyZWFkIHRo
aXMgdGhyb3VnaCBhIHNlcmllcyBvZiBqdW1wcy4KKyAgICAgICAgdm9pZCogaXNsYW5kID0gaXNs
YW5kRm9ySnVtcExvY2F0aW9uKGp1bXBMb2NhdGlvbiwgb2xkVGFyZ2V0KTsKKyAgICAgICAgQ0Nh
bGxIZWxwZXJzIGppdDsKKyAgICAgICAgaml0Lm1vdmUoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1t
UHRyKG5ld1RhcmdldCksIENDYWxsSGVscGVyczo6ZGF0YVRlbXBSZWdpc3Rlcik7CisgICAgICAg
IGppdC5mYXJKdW1wKENDYWxsSGVscGVyczo6ZGF0YVRlbXBSZWdpc3RlciwgTm9QdHJUYWcpOwor
CisgICAgICAgIExpbmtCdWZmZXIgbGlua0J1ZmZlcihqaXQsIE1hY3JvQXNzZW1ibGVyQ29kZVB0
cjxOb1B0clRhZz4oaXNsYW5kKSwgaXNsYW5kU2l6ZUluQnl0ZXMsIEpJVENvbXBpbGF0aW9uTXVz
dFN1Y2NlZWQsIGZhbHNlKTsKKyAgICAgICAgYXV0byByZXN1bHQgPSBGSU5BTElaRV9DT0RFKGxp
bmtCdWZmZXIsIE5vUHRyVGFnLCAiSnVtcCBJc2xhbmQ6ICVsdSIsIGp1bXBMb2NhdGlvbik7Cisg
ICAgICAgIHJldHVybiBpc2xhbmQ7CisgICAgfQorI2VuZGlmCisKK3ByaXZhdGU6CisgICAgY2xh
c3MgQWxsb2NhdG9yIDogcHVibGljIE1ldGFBbGxvY2F0b3IgeworICAgIHB1YmxpYzoKKyAgICAg
ICAgQWxsb2NhdG9yKCkKKyAgICAgICAgICAgIDogTWV0YUFsbG9jYXRvcihqaXRBbGxvY2F0aW9u
R3JhbnVsZSwgcGFnZVNpemUoKSkgLy8gcm91bmQgdXAgYWxsIGFsbG9jYXRpb25zIHRvIDMyIGJ5
dGVzCisgICAgICAgIHsKKyAgICAgICAgfQorCisgICAgICAgIEZyZWVTcGFjZVB0ciBhbGxvY2F0
ZU5ld1NwYWNlKHNpemVfdCYpIG92ZXJyaWRlCisgICAgICAgIHsKKyAgICAgICAgICAgIC8vIFdl
J3JlIG9wZXJhdGluZyBpbiBhIGZpeGVkIHBvb2wsIHNvIG5ldyBhbGxvY2F0aW9uIGlzIGFsd2F5
cyBwcm9oaWJpdGVkLgorICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgIH0KKwor
ICAgICAgICB2b2lkIG5vdGlmeU5lZWRQYWdlKHZvaWQqIHBhZ2UsIHNpemVfdCBjb3VudCkgb3Zl
cnJpZGUKKyAgICAgICAgeworICAgICAgICAgICAgbV9maXhlZEFsbG9jYXRvci0+bV9yZXNlcnZh
dGlvbi5jb21taXQocGFnZSwgcGFnZVNpemUoKSAqIGNvdW50KTsKKyAgICAgICAgfQorCisgICAg
ICAgIHZvaWQgbm90aWZ5UGFnZUlzRnJlZSh2b2lkKiBwYWdlLCBzaXplX3QgY291bnQpIG92ZXJy
aWRlCisgICAgICAgIHsKKyAgICAgICAgICAgIG1fZml4ZWRBbGxvY2F0b3ItPm1fcmVzZXJ2YXRp
b24uZGVjb21taXQocGFnZSwgcGFnZVNpemUoKSAqIGNvdW50KTsKKyAgICAgICAgfQorCisgICAg
ICAgIEZpeGVkVk1Qb29sRXhlY3V0YWJsZUFsbG9jYXRvciogbV9maXhlZEFsbG9jYXRvcjsKKyAg
ICB9OworCisjaWYgQ1BVKEFSTTY0KSAvLyBPT1BTOiBjYW4ndCBkbyB0aGlzIGZvciBhcm02NF8z
MgorICAgIGNsYXNzIFJlZ2lvbkFsbG9jYXRvciA6IHB1YmxpYyBBbGxvY2F0b3IgeworICAgIHB1
YmxpYzoKKyAgICAgICAgLy8gIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQor
ICAgICAgICAvLyAgfCBhbGxvY2F0b3IgLS0+ICAgICA8LS0gaXNsYW5kICAgICAgfAorICAgICAg
ICAvLyAgfCAgICAgICAgICAgICBeICAgICBeICAgICAgICAgICAgICAgfAorICAgICAgICAvLyAg
fCAgICAgICAgICAgICB8ICAgICB8ICAgICAgICAgICAgICAgfAorICAgICAgICAvLyAgfCBhbGxv
Y2F0b3JTaXplICAgICByZXNlcnZlZElzbGFuZHMgfAorICAgICAgICAvLyAgLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAgICAvLyAgYWxsb2NhdG9yRW5kIDw9IGlz
bGFuZCBiZWdpbgorCisgICAgICAgIHVpbnRwdHJfdCBpc2xhbmRCZWdpbigpCisgICAgICAgIHsK
KyAgICAgICAgICAgIC8vIFtzdGFydCwgYWxsb2NhdG9yRW5kKQorICAgICAgICAgICAgcmV0dXJu
IGVuZCAtIGlzbGFuZFJlZ2lvblNpemU7CisgICAgICAgIH0KKworICAgICAgICB1aW50cHRyX3Qg
YWxsb2NhdG9yU2l6ZSgpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBpc2xhbmRCZWdp
bigpIC0gc3RhcnQ7CisgICAgICAgIH0KKworICAgICAgICAvLyBPT1BTOiBwYXNzIExvY2tIb2xk
ZXIgdG8gbWFrZSBpdCBvYnZpb3VzIGxvY2sgaXMgaGVsZC4KKyAgICAgICAgRnJlZVNwYWNlUHRy
IGFsbG9jYXRlTmV3U3BhY2Uoc2l6ZV90Jikgb3ZlcnJpZGUKKyAgICAgICAgeworICAgICAgICAg
ICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgIH0KKworICAgICAgICBzaXplX3QgaXNsYW5kc1Bl
clBhZ2UoKQorICAgICAgICB7CisgICAgICAgICAgICBzaXplX3QgaXNsYW5kc1BlclBhZ2UgPSBw
YWdlU2l6ZSgpIC8gaXNsYW5kU2l6ZUluQnl0ZXM7CisgICAgICAgICAgICBBU1NFUlQoaXNsYW5k
c1BlclBhZ2UgKiBpc2xhbmRTaXplSW5CeXRlcyA9PSBwYWdlU2l6ZSgpKTsgLy8gd2UgcmVseSBv
biBwZXJmZWN0IGRpdmlzaW9uIGZvciBmaW5kaW5nIHdoaWNoIGJpdCBhIHBvaW50ZXIgaXMuCisg
ICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChpc1Bvd2VyT2ZUd28oaXNsYW5kc1BlclBhZ2UpKTsK
KyAgICAgICAgICAgIHJldHVybiBpc2xhbmRzUGVyUGFnZTsKKyAgICAgICAgfQorCisgICAgICAg
IC8qCisgICAgICAgIC8vIE9PUFM6IHBhc3MgTG9ja0hvbGRlciB0byBtYWtlIGl0IG9idmlvdXMg
bG9jayBpcyBoZWxkLgorICAgICAgICBib29sIHRyeUFsbG9jYXRlSXNsYW5kcyhzaXplX3QgbnVt
SXNsYW5kc1RvQWxsb2NhdGUpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmICghbnVtSXNsYW5k
c1RvQWxsb2NhdGUpCisgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICAgICAgICAg
IHVpbnRwdHJfdCBudW1GcmVlSXNsYW5kcyA9IG51bVJlc2VydmVkSXNsYW5kcyAtIG51bUFsbG9j
YXRlZElzbGFuZHM7IAorICAgICAgICAgICAgaWYgKG51bUZyZWVJc2xhbmRzID49IG51bUlzbGFu
ZHNUb0FsbG9jYXRlKSB7CisgICAgICAgICAgICAgICAgbnVtQWxsb2NhdGVkSXNsYW5kcyArPSBu
dW1Jc2xhbmRzVG9BbGxvY2F0ZTsKKyAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChudW1B
bGxvY2F0ZWRJc2xhbmRzIDw9IG51bVJlc2VydmVkSXNsYW5kcyk7IC8vIE9PUFM6IGNoZWNrQ29u
c2lzdGVuY3k/CisgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAgICB9IAor
CisgICAgICAgICAgICBzaXplX3QgaXNsYW5kc1BlclBhZ2UgPSB0aGlzLT5pc2xhbmRzUGVyUGFn
ZSgpOworICAgICAgICAgICAgCisgICAgICAgICAgICB1aW50cHRyX3QgaXNsYW5kc1RvUmVzZXJ2
ZSA9IG51bUlzbGFuZHNUb0FsbG9jYXRlIC0gbnVtRnJlZUlzbGFuZHM7CisKKyAgICAgICAgICAg
IGlzbGFuZHNUb1Jlc2VydmUgPSByb3VuZFVwVG9NdWx0aXBsZU9mKGlzbGFuZHNQZXJQYWdlLCBp
c2xhbmRzVG9SZXNlcnZlKTsKKyAgICAgICAgICAgIHVpbnRwdHJfdCBuZXdJc2xhbmRCZWdpbiA9
IGVuZCAtICgobnVtUmVzZXJ2ZWRJc2xhbmRzICsgaXNsYW5kc1RvUmVzZXJ2ZSkgKiBpc2xhbmRT
aXplSW5CeXRlcyk7CisgICAgICAgICAgICBpZiAobmV3SXNsYW5kQmVnaW4gPCBhbGxvY2F0b3JF
bmQoKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAgICAgICAgIG51bUFs
bG9jYXRlZElzbGFuZHMgKz0gbnVtSXNsYW5kc1RvQWxsb2NhdGU7CisgICAgICAgICAgICBudW1S
ZXNlcnZlZElzbGFuZHMgKz0gaXNsYW5kc1RvUmVzZXJ2ZTsKKyAgICAgICAgICAgIFJFTEVBU0Vf
QVNTRVJUKG51bUFsbG9jYXRlZElzbGFuZHMgPD0gbnVtUmVzZXJ2ZWRJc2xhbmRzKTsKKyAgICAg
ICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisKKyAgICAgICAgLy8gT09QUzogdGFrZSBs
b2NraG9sZGVyCisgICAgICAgIHZvaWQgZGVhbGxvY2F0ZUlzbGFuZHMoc2l6ZV90IG51bUlzbGFu
ZHNUb0ZyZWUpCisgICAgICAgIHsKKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKG51bUlzbGFu
ZHNUb0ZyZWUgPD0gbnVtQWxsb2NhdGVkSXNsYW5kcyk7CisgICAgICAgICAgICBSRUxFQVNFX0FT
U0VSVChudW1BbGxvY2F0ZWRJc2xhbmRzIDw9IG51bVJlc2VydmVkSXNsYW5kcyk7IC8vIE9PUFM6
IGNoZWNrQ29uc2lzdGVuY3kKKyAgICAgICAgICAgIG51bUFsbG9jYXRlZElzbGFuZHMgLT0gbnVt
SXNsYW5kc1RvRnJlZTsKKyAgICAgICAgfQorICAgICAgICAqLworCisgICAgICAgIC8vIE9PUFM6
IGxvY2tob2xkZXIuCisgICAgICAgIHZvaWQqIGFsbG9jYXRlSXNsYW5kKCkKKyAgICAgICAgewor
ICAgICAgICAgICAgYXV0byBmaW5kUmVzdWx0ID0gWyZdICgpIC0+IHZvaWQqIHsKKyAgICAgICAg
ICAgICAgICBzaXplX3QgcmVzdWx0Qml0ID0gaXNsYW5kQml0cy5maW5kQ2xlYXJCaXQoMCk7Cisg
ICAgICAgICAgICAgICAgaWYgKHJlc3VsdEJpdCA9PSBpc2xhbmRCaXRzLnNpemUoKSkKKyAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgICAgICAgICAgaXNsYW5kQml0
c1tyZXN1bHRCaXRdID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICB1aW50cHRyX3QgcmVzdWx0ID0g
ZW5kIC0gKChyZXN1bHRCaXQgKyAxKSAqIGlzbGFuZFNpemVJbkJ5dGVzKTsgCisgICAgICAgICAg
ICAgICAgcmV0dXJuIGJpdHdpc2VfY2FzdDx2b2lkKj4ocmVzdWx0KTsKKyAgICAgICAgICAgIH07
CisKKyAgICAgICAgICAgIGlmICh2b2lkKiByZXN1bHQgPSBmaW5kUmVzdWx0KCkpCisgICAgICAg
ICAgICAgICAgcmV0dXJuIHJlc3VsdDsKKworICAgICAgICAgICAgaXNsYW5kQml0cy5yZXNpemUo
aXNsYW5kQml0cy5zaXplKCkgKyBpc2xhbmRzUGVyUGFnZSgpKTsKKyAgICAgICAgICAgIFJFTEVB
U0VfQVNTRVJUKGlzbGFuZEJpdHMuc2l6ZSgpIDw9IG1heElzbGFuZHNQZXJSZWdpb24pOyAKKwor
ICAgICAgICAgICAgLy9kYXRhTG9nTG4oInJlZ2lvbjogWyIsIHN0YXJ0LCAiLCAiLCBlbmQsICIp
Iik7CisKKyAgICAgICAgICAgIHVpbnRwdHJfdCBwYWdlQmVnaW4gPSBlbmQgLSAoaXNsYW5kQml0
cy5zaXplKCkgKiBpc2xhbmRTaXplSW5CeXRlcyk7IC8vIFtpc2xhbmRCZWdpbiwgZW5kKQorICAg
ICAgICAgICAgLy9kYXRhTG9nTG4oImNvbW1pdHRpbmc6ICIsIHBhZ2VCZWdpbik7CisgICAgICAg
ICAgICBtX2ZpeGVkQWxsb2NhdG9yLT5tX3Jlc2VydmF0aW9uLmNvbW1pdChiaXR3aXNlX2Nhc3Q8
dm9pZCo+KHBhZ2VCZWdpbiksIHBhZ2VTaXplKCkpOworICAgICAgICAgICAgdm9pZCogcmVzdWx0
ID0gZmluZFJlc3VsdCgpOworICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQocmVzdWx0KTsKKyAg
ICAgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgICAgIH0KKworICAgICAgICAvLyBbc3RhcnQs
IGVuZCkKKyAgICAgICAgdWludHB0cl90IHN0YXJ0OworICAgICAgICB1aW50cHRyX3QgZW5kOwor
CisgICAgICAgIHNpemVfdCBudW1BbGxvY2F0ZWRJc2xhbmRzIHsgMCB9OyAvLyA8PSBudW1SZXNl
cnZlZElzbGFuZHMKKyAgICAgICAgRmFzdEJpdFZlY3RvciBpc2xhbmRCaXRzOworICAgICAgICBW
ZWN0b3I8dWludHB0cl90PiBqdW1wTG9jYXRpb25zVG9Jc2xhbmRzOyAvLyBPT1BTOiB1c2UgcmVk
IGJsYWNrIHRyZWUgYW5kIG1ha2UgaXQgZmFzdCB0byByZW1vdmUgYWxsIGVudHJpZXMgbWF0Y2hp
bmcuCisgICAgfTsKKyNlbmRpZgorCisgICAgdGVtcGxhdGUgPHR5cGVuYW1lIEZ1bmN0aW9uPgor
ICAgIHZvaWQgZm9yRWFjaEFsbG9jYXRvcihGdW5jdGlvbiBmdW5jdGlvbikKKyAgICB7CisjaWYg
Q1BVKEFSTTY0KQorICAgICAgICBmb3IgKFJlZ2lvbkFsbG9jYXRvciYgYWxsb2NhdG9yIDogbV9h
bGxvY2F0b3JzKSB7CisgICAgICAgICAgICB1c2luZyBGdW5jdGlvblJlc3VsdFR5cGUgPSBkZWNs
dHlwZShmdW5jdGlvbihhbGxvY2F0b3IpKTsKKyAgICAgICAgICAgIGlmIGNvbnN0ZXhwciAoc3Rk
Ojppc19zYW1lPEl0ZXJhdGlvblN0YXR1cywgRnVuY3Rpb25SZXN1bHRUeXBlPjo6dmFsdWUpIHsK
KyAgICAgICAgICAgICAgICBpZiAoZnVuY3Rpb24oYWxsb2NhdG9yKSA9PSBJdGVyYXRpb25TdGF0
dXM6OkRvbmUpCisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfSBlbHNl
IHsKKyAgICAgICAgICAgICAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfc2FtZTx2b2lkLCBGdW5j
dGlvblJlc3VsdFR5cGU+Ojp2YWx1ZSk7CisgICAgICAgICAgICAgICAgZnVuY3Rpb24oYWxsb2Nh
dG9yKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorI2Vsc2UKKyAgICAgICAgZnVuY3Rpb24o
bV9hbGxvY2F0b3IpOworI2VuZGlmCisgICAgfQorCisgICAgTG9jayBtX2xvY2s7CiAgICAgUGFn
ZVJlc2VydmF0aW9uIG1fcmVzZXJ2YXRpb247CisjaWYgQ1BVKEFSTTY0KQorICAgIHN0ZDo6YXJy
YXk8UmVnaW9uQWxsb2NhdG9yLCBudW1iZXJPZlJlZ2lvbnM+IG1fYWxsb2NhdG9yczsKKyNlbHNl
CisgICAgQWxsb2NhdG9yIG1fYWxsb2NhdG9yOworI2VuZGlmCiB9OwogCi1GaXhlZFZNUG9vbEV4
ZWN1dGFibGVBbGxvY2F0b3I6On5GaXhlZFZNUG9vbEV4ZWN1dGFibGVBbGxvY2F0b3IoKQotewot
ICAgIG1fcmVzZXJ2YXRpb24uZGVhbGxvY2F0ZSgpOwotfQotCiAvLyBLZWVwIHRoaXMgcG9pbnRl
ciBpbiBhIG11dGFibGUgZ2xvYmFsIHZhcmlhYmxlIHRvIGhlbHAgTGVha3MgZmluZCBpdC4KIC8v
IEJ1dCB3ZSBkbyBub3QgdXNlIHRoaXMgcG9pbnRlci4KIHN0YXRpYyBGaXhlZFZNUG9vbEV4ZWN1
dGFibGVBbGxvY2F0b3IqIGdsb2JhbEZpeGVkVk1Qb29sRXhlY3V0YWJsZUFsbG9jYXRvclRvV29y
a0Fyb3VuZExlYWtzID0gbnVsbHB0cjsKQEAgLTQxNyw3ICs3NjksNyBAQCB2b2lkIEV4ZWN1dGFi
bGVBbGxvY2F0b3I6OmluaXRpYWxpemVVbmRlCiAgICAgUkVMRUFTRV9BU1NFUlQoIWdfanNjQ29u
ZmlnLmZpeGVkVk1Qb29sRXhlY3V0YWJsZUFsbG9jYXRvcik7CiAgICAgZ19qc2NDb25maWcuZml4
ZWRWTVBvb2xFeGVjdXRhYmxlQWxsb2NhdG9yID0gbmV3IEZpeGVkVk1Qb29sRXhlY3V0YWJsZUFs
bG9jYXRvcigpOwogICAgIGdsb2JhbEZpeGVkVk1Qb29sRXhlY3V0YWJsZUFsbG9jYXRvclRvV29y
a0Fyb3VuZExlYWtzID0gZ19qc2NDb25maWcuZml4ZWRWTVBvb2xFeGVjdXRhYmxlQWxsb2NhdG9y
OwotICAgIENvZGVQcm9maWxpbmc6Om5vdGlmeUFsbG9jYXRvcihnX2pzY0NvbmZpZy5maXhlZFZN
UG9vbEV4ZWN1dGFibGVBbGxvY2F0b3IpOworICAgIGdfanNjQ29uZmlnLmZpeGVkVk1Qb29sRXhl
Y3V0YWJsZUFsbG9jYXRvci0+bm90aWZ5Q29kZVByb2ZpbGluZygpOwogfQogCiBib29sIEV4ZWN1
dGFibGVBbGxvY2F0b3I6OmlzVmFsaWQoKSBjb25zdApAQCAtNDI1LDcgKzc3Nyw3IEBAIGJvb2wg
RXhlY3V0YWJsZUFsbG9jYXRvcjo6aXNWYWxpZCgpIGNvbnMKICAgICBGaXhlZFZNUG9vbEV4ZWN1
dGFibGVBbGxvY2F0b3IqIGFsbG9jYXRvciA9IGdfanNjQ29uZmlnLmZpeGVkVk1Qb29sRXhlY3V0
YWJsZUFsbG9jYXRvcjsKICAgICBpZiAoIWFsbG9jYXRvcikKICAgICAgICAgcmV0dXJuIEJhc2U6
OmlzVmFsaWQoKTsKLSAgICByZXR1cm4gISFhbGxvY2F0b3ItPmJ5dGVzUmVzZXJ2ZWQoKTsKKyAg
ICByZXR1cm4gYWxsb2NhdG9yLT5pc1ZhbGlkKCk7CiB9CiAKIGJvb2wgRXhlY3V0YWJsZUFsbG9j
YXRvcjo6dW5kZXJNZW1vcnlQcmVzc3VyZSgpCkBAIC01MzksNiArODkxLDIwIEBAIHZvaWQgRXhl
Y3V0YWJsZUFsbG9jYXRvcjo6ZHVtcFByb2ZpbGUoKQogfQogI2VuZGlmCiAKKyNpZiBDUFUoQVJN
NjQpCit2b2lkKiBFeGVjdXRhYmxlQWxsb2NhdG9yOjpnZXRKdW1wSXNsYW5kVG8odm9pZCogZnJv
bSwgdm9pZCogb2xkRGVzdGluYXRpb24sIHZvaWQqIG5ld0Rlc3RpbmF0aW9uKQoreworICAgIEZp
eGVkVk1Qb29sRXhlY3V0YWJsZUFsbG9jYXRvciogYWxsb2NhdG9yID0gZ19qc2NDb25maWcuZml4
ZWRWTVBvb2xFeGVjdXRhYmxlQWxsb2NhdG9yOworICAgIGlmICghYWxsb2NhdG9yKSB7CisgICAg
ICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7IC8vIE9PUFM6IGlzIHRoaXMgY29ycmVj
dD8KKyAgICB9CisgICAgLy9pbnRwdHJfdCBkZWx0YSA9IGJpdHdpc2VfY2FzdDxpbnRwdHJfdD4o
bmV3RGVzdGluYXRpb24pIC0gYml0d2lzZV9jYXN0PGludHB0cl90Pihmcm9tKTsKKyAgICAvL2Rh
dGFMb2dMbigiZ2V0SnVtcElzbGFuZFRvIGRlbHRhOiAiLCBzdGF0aWNfY2FzdDxkb3VibGU+KGRl
bHRhKS8xMDI0LjAvMTAyNC4wLCAiTUIiKTsKKworICAgIHJldHVybiBhbGxvY2F0b3ItPm1ha2VJ
c2xhbmQoYml0d2lzZV9jYXN0PHVpbnRwdHJfdD4oZnJvbSksIGJpdHdpc2VfY2FzdDx1aW50cHRy
X3Q+KG9sZERlc3RpbmF0aW9uKSwgYml0d2lzZV9jYXN0PHVpbnRwdHJfdD4obmV3RGVzdGluYXRp
b24pKTsKK30KKyNlbmRpZgorCiB2b2lkKiBzdGFydE9mRml4ZWRFeGVjdXRhYmxlTWVtb3J5UG9v
bEltcGwoKQogewogICAgIEZpeGVkVk1Qb29sRXhlY3V0YWJsZUFsbG9jYXRvciogYWxsb2NhdG9y
ID0gZ19qc2NDb25maWcuZml4ZWRWTVBvb2xFeGVjdXRhYmxlQWxsb2NhdG9yOwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9FeGVjdXRhYmxlQWxsb2NhdG9yLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9FeGVjdXRhYmxlQWxsb2NhdG9yLmgJKHJldmlz
aW9uIDI1Nzg2NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvRXhlY3V0YWJsZUFsbG9j
YXRvci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xODQsNiArMTg0LDEwIEBAIHB1YmxpYzoKIAogICAg
IExvY2smIGdldExvY2soKSBjb25zdDsKIAorI2lmIENQVShBUk02NCkKKyAgICB2b2lkKiBnZXRK
dW1wSXNsYW5kVG8odm9pZCogZnJvbSwgdm9pZCogb2xkRGVzdGluYXRpb24sIHZvaWQqIG5ld0Rl
c3RpbmF0aW9uKTsKKyNlbmRpZgorCiBwcml2YXRlOgogICAgIEV4ZWN1dGFibGVBbGxvY2F0b3Io
KSA9IGRlZmF1bHQ7CiAgICAgfkV4ZWN1dGFibGVBbGxvY2F0b3IoKSA9IGRlZmF1bHQ7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>392983</attachid>
            <date>2020-03-08 14:08:22 -0700</date>
            <delta_ts>2020-03-08 14:12:01 -0700</delta_ts>
            <desc>WIP</desc>
            <filename>c-backup.diff</filename>
            <type>text/plain</type>
            <size>63308</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9Tb3VyY2VzLnR4dAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvU291cmNlcy50eHQJKHJldmlzaW9uIDI1Nzg2NikKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9Tb3VyY2VzLnR4dAkod29ya2luZyBjb3B5KQpAQCAtOTk0LDgg
Kzk5NCw2IEBAIHJ1bnRpbWUvV2lkZW5pbmdOdW1iZXJQcmVkaWN0aW9uRnV6emVyQWcKIEpTQ0J1
aWx0aW5zLmNwcAogCiB0b29scy9DZWxsTGlzdC5jcHAKLXRvb2xzL0NvZGVQcm9maWxlLmNwcAot
dG9vbHMvQ29kZVByb2ZpbGluZy5jcHAKIHRvb2xzL0NvbXBpbGVyVGltaW5nU2NvcGUuY3BwCiB0
b29scy9GdW5jdGlvbk92ZXJyaWRlcy5jcHAKIHRvb2xzL0Z1bmN0aW9uV2hpdGVsaXN0LmNwcApJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9q
ZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3Jp
cHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDI1Nzg2NikKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhw
cm9qCSh3b3JraW5nIGNvcHkpCkBAIC00MDcxLDggKzQwNzEsNiBAQAogCQk4NjAxNjFFMDBGM0E4
M0MxMDBGODQ3MTAgLyogTWFjcm9Bc3NlbWJsZXJYODYuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gTWFjcm9Bc3NlbWJsZXJYODYuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJODYwMTYxRTEwRjNBODNDMTAwRjg0NzEwIC8qIE1hY3JvQXNzZW1ibGVyWDg2XzY0Lmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE1hY3JvQXNzZW1ibGVyWDg2XzY0Lmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTg2MDE2MUUyMEYzQTgzQzEwMEY4NDcxMCAv
KiBNYWNyb0Fzc2VtYmxlclg4NkNvbW1vbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBNYWNyb0Fzc2VtYmxlclg4NkNvbW1vbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwotCQk4NjAzQ0VGMjE0Qzc1NDY0MDBBRTU5RTMgLyogQ29kZVByb2ZpbGluZy5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBDb2RlUHJvZmlsaW5nLmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJODYwM0NFRjMxNEM3NTQ2NDAwQUU1OUUzIC8qIENvZGVQ
cm9maWxpbmcuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ29kZVByb2ZpbGlu
Zy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk4NjA0RjRGMjE0M0E2QzQ0MDBCMjk1
RjUgLyogQ2hhbmdlTG9nICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZp
bGVUeXBlID0gdGV4dDsgbGluZUVuZGluZyA9IDA7IHBhdGggPSBDaGFuZ2VMb2c7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTg2MDZEREU5MThEQTQ0QUIwMEEzODNEMCAvKiBJZGVudGlm
aWVySW5saW5lcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJZGVudGlmaWVy
SW5saW5lcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk4NjEyRTRDQjE1MjI5MTg0
MDBDODM2QkUgLyogTWF0Y2hSZXN1bHQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gTWF0Y2hSZXN1bHQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTQxMTgsOCAr
NDExNiw2IEBACiAJCTg2QUREMTQzMEZEREVBOTgwMDA2RkZDQyAvKiBBUk12N1JlZ2lzdGVycy5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBBUk12N1JlZ2lzdGVycy5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk4NkFERDE0NDBGRERFQTk4MDAwNkVFQzIgLyogTWFj
cm9Bc3NlbWJsZXJBUk12Ny5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBNYWNy
b0Fzc2VtYmxlckFSTXY3Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTg2QjU4MjJD
MTREMjJGNUYwMEE5QzMwNiAvKiBQcm9maWxlVHJlZU5vZGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gUHJvZmlsZVRyZWVOb2RlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07Ci0JCTg2QjU4MjJFMTREMjM3M0IwMEE5QzMwNiAvKiBDb2RlUHJvZmlsZS5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBDb2RlUHJvZmlsZS5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTg2QjU4MjJGMTREMjM3M0IwMEE5QzMwNiAvKiBDb2RlUHJv
ZmlsZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBDb2RlUHJvZmlsZS5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk4NkI1ODI2QTE0RDM1RDUxMDBBOUMzMDYgLyog
VGllcmVkTU1hcEFycmF5LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFRpZXJl
ZE1NYXBBcnJheS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk4NkJGNjQyQTE0OERC
MkI1MDA0REUzNkEgLyogSW50cmluc2ljLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IEludHJpbnNpYy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk4NkMzNkVFOTBF
RTEyODlEMDBCM0RGNTkgLyogTWFjcm9Bc3NlbWJsZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gTWFjcm9Bc3NlbWJsZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
QEAgLTc2NzYsMTAgKzc2NzIsNiBAQAogCQkJCUZFMUJEMDFCMUU3MjAwMjEwMDEzNEJDOSAvKiBD
ZWxsTGlzdC5jcHAgKi8sCiAJCQkJRkUxQkQwMUMxRTcyMDAyMTAwMTM0QkM5IC8qIENlbGxMaXN0
LmggKi8sCiAJCQkJRkUxQkQwMjAxRTcyMDI3MDAwMTM0QkM5IC8qIENlbGxQcm9maWxlLmggKi8s
Ci0JCQkJODZCNTgyMkUxNEQyMzczQjAwQTlDMzA2IC8qIENvZGVQcm9maWxlLmNwcCAqLywKLQkJ
CQk4NkI1ODIyRjE0RDIzNzNCMDBBOUMzMDYgLyogQ29kZVByb2ZpbGUuaCAqLywKLQkJCQk4NjAz
Q0VGMjE0Qzc1NDY0MDBBRTU5RTMgLyogQ29kZVByb2ZpbGluZy5jcHAgKi8sCi0JCQkJODYwM0NF
RjMxNEM3NTQ2NDAwQUU1OUUzIC8qIENvZGVQcm9maWxpbmcuaCAqLywKIAkJCQkwRjRGMTFFNzIw
OUJDREExMDA3MDk2NTQgLyogQ29tcGlsZXJUaW1pbmdTY29wZS5jcHAgKi8sCiAJCQkJMEY0RjEx
RTYyMDlCQ0RBMTAwNzA5NjU0IC8qIENvbXBpbGVyVGltaW5nU2NvcGUuaCAqLywKIAkJCQlGRTRC
RkYyOTFBRDQ3NkU3MDAwODhGODcgLyogRnVuY3Rpb25PdmVycmlkZXMuY3BwICovLApJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9BUk02NEFzc2VtYmxlci5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvQVJNNjRBc3NlbWJsZXIuaAko
cmV2aXNpb24gMjU3ODY2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9BUk02
NEFzc2VtYmxlci5oCSh3b3JraW5nIGNvcHkpCkBAIC03ODMsMTIgKzc4Myw5IEBAIHB1YmxpYzoK
ICAgICAgICAgaW5zbihkYXRhUHJvY2Vzc2luZzJTb3VyY2UoREFUQVNJWkUsIHJtLCBEYXRhT3Bf
QVNSViwgcm4sIHJkKSk7CiAgICAgfQogCi0gICAgQUxXQVlTX0lOTElORSB2b2lkIGIoaW50MzJf
dCBvZmZzZXQgPSAwKQorICAgIEFMV0FZU19JTkxJTkUgdm9pZCBiKCkKICAgICB7Ci0gICAgICAg
IEFTU0VSVCghKG9mZnNldCAmIDMpKTsKLSAgICAgICAgb2Zmc2V0ID4+PSAyOwotICAgICAgICBB
U1NFUlQob2Zmc2V0ID09IChvZmZzZXQgPDwgNikgPj4gNik7Ci0gICAgICAgIGluc24odW5jb25k
aXRpb25hbEJyYW5jaEltbWVkaWF0ZShmYWxzZSwgb2Zmc2V0KSk7CisgICAgICAgIGluc24odW5j
b25kaXRpb25hbEJyYW5jaEltbWVkaWF0ZShmYWxzZSwgMCkpOwogICAgIH0KIAogICAgIEFMV0FZ
U19JTkxJTkUgdm9pZCBiX2NvbmQoQ29uZGl0aW9uIGNvbmQsIGludDMyX3Qgb2Zmc2V0ID0gMCkK
QEAgLTgzMSwxMSArODI4LDkgQEAgcHVibGljOgogICAgICAgICBpbnNuKGxvZ2ljYWxTaGlmdGVk
UmVnaXN0ZXIoREFUQVNJWkUsIHNldEZsYWdzID8gTG9naWNhbE9wX0FORFMgOiBMb2dpY2FsT3Bf
QU5ELCBzaGlmdCwgdHJ1ZSwgcm0sIGFtb3VudCwgcm4sIHJkKSk7CiAgICAgfQogCi0gICAgQUxX
QVlTX0lOTElORSB2b2lkIGJsKGludDMyX3Qgb2Zmc2V0ID0gMCkKKyAgICBBTFdBWVNfSU5MSU5F
IHZvaWQgYmwoKQogICAgIHsKLSAgICAgICAgQVNTRVJUKCEob2Zmc2V0ICYgMykpOwotICAgICAg
ICBvZmZzZXQgPj49IDI7Ci0gICAgICAgIGluc24odW5jb25kaXRpb25hbEJyYW5jaEltbWVkaWF0
ZSh0cnVlLCBvZmZzZXQpKTsKKyAgICAgICAgaW5zbih1bmNvbmRpdGlvbmFsQnJhbmNoSW1tZWRp
YXRlKHRydWUsIDApKTsKICAgICB9CiAKICAgICBBTFdBWVNfSU5MSU5FIHZvaWQgYmxyKFJlZ2lz
dGVySUQgcm4pCkBAIC0yNTgyLDYgKzI1NzcsMTMgQEAgcHVibGljOgogICAgIHsKICAgICAgICAg
aW50cHRyX3Qgb2Zmc2V0ID0gKHJlaW50ZXJwcmV0X2Nhc3Q8aW50cHRyX3Q+KHRvKSAtIHJlaW50
ZXJwcmV0X2Nhc3Q8aW50cHRyX3Q+KHdoZXJlKSkgPj4gMjsKICAgICAgICAgQVNTRVJUKHN0YXRp
Y19jYXN0PGludD4ob2Zmc2V0KSA9PSBvZmZzZXQpOworCisgICAgICAgIGlmICghaXNJbnQ8MjY+
KG9mZnNldCkpIHsKKyAgICAgICAgICAgIHRvID0gRXhlY3V0YWJsZUFsbG9jYXRvcjo6c2luZ2xl
dG9uKCkuZ2V0SnVtcElzbGFuZFRvKHdoZXJlLCBudWxscHRyLCB0byk7CisgICAgICAgICAgICBv
ZmZzZXQgPSAoYml0d2lzZV9jYXN0PGludHB0cl90Pih0bykgLSBiaXR3aXNlX2Nhc3Q8aW50cHRy
X3Q+KHdoZXJlKSkgPj4gMjsKKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKGlzSW50PDI2Pihv
ZmZzZXQpKTsKKyAgICAgICAgfQorCiAgICAgICAgIGludCBpbnNuID0gdW5jb25kaXRpb25hbEJy
YW5jaEltbWVkaWF0ZShmYWxzZSwgc3RhdGljX2Nhc3Q8aW50PihvZmZzZXQpKTsKICAgICAgICAg
UkVMRUFTRV9BU1NFUlQocm91bmRVcFRvTXVsdGlwbGVPZjxpbnN0cnVjdGlvblNpemU+KHdoZXJl
KSA9PSB3aGVyZSk7CiAgICAgICAgIHBlcmZvcm1KSVRNZW1jcHkod2hlcmUsICZpbnNuLCBzaXpl
b2YoaW50KSk7CkBAIC0yODcyLDcgKzI4NzQsNyBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAg
cmV0dXJuIExpbmtKdW1wQ29uZGl0aW9uRGlyZWN0OwogCiAgICAgICAgICAgICByZXR1cm4gTGlu
a0p1bXBDb25kaXRpb247Ci0gICAgICAgICAgICB9CisgICAgICAgIH0KICAgICAgICAgY2FzZSBK
dW1wQ29tcGFyZUFuZEJyYW5jaDogIHsKICAgICAgICAgICAgIEFTU0VSVChpczRCeXRlQWxpZ25l
ZChmcm9tKSk7CiAgICAgICAgICAgICBBU1NFUlQoaXM0Qnl0ZUFsaWduZWQodG8pKTsKQEAgLTI5
ODUsNyArMjk4NywxOSBAQCBwcm90ZWN0ZWQ6CiAKICAgICAgICAgYm9vbCBsaW5rOwogICAgICAg
ICBpbnQgaW1tMjY7Ci0gICAgICAgIGJvb2wgaXNVbmNvbmRpdGlvbmFsQnJhbmNoSW1tZWRpYXRl
T3JOb3AgPSBkaXNhc3NlbWJsZVVuY29uZGl0aW9uYWxCcmFuY2hJbW1lZGlhdGUoZnJvbSwgbGlu
aywgaW1tMjYpIHx8IGRpc2Fzc2VtYmxlTm9wKGZyb20pOworICAgICAgICB2b2lkKiBwcmV2aW91
c1RhcmdldCA9IG51bGxwdHI7CisgICAgICAgIGJvb2wgaXNVbmNvbmRpdGlvbmFsQnJhbmNoSW1t
ZWRpYXRlT3JOb3AgPSBmYWxzZTsKKyAgICAgICAgaWYgKGRpc2Fzc2VtYmxlVW5jb25kaXRpb25h
bEJyYW5jaEltbWVkaWF0ZShmcm9tLCBsaW5rLCBpbW0yNikpIHsKKyAgICAgICAgICAgIGlzVW5j
b25kaXRpb25hbEJyYW5jaEltbWVkaWF0ZU9yTm9wID0gdHJ1ZTsKKyAgICAgICAgICAgIGludHB0
cl90IHByZXZpb3VzT2Zmc2V0ID0gaW1tMjYgPDwgMjsKKyAgICAgICAgICAgIGlmIChwcmV2aW91
c09mZnNldCkgeworICAgICAgICAgICAgICAgIC8vIFdoZW4gZW1pdHRpbmcgYnJhbmNoZXMgYmVm
b3JlIGxpbmtpbmcgdGhlbSwgd2UgZW1pdCB0aGVtIHdpdGggb2Zmc2V0cyBvZiB6ZXJvLiBUaGlz
CisgICAgICAgICAgICAgICAgLy8gbWVhbnMgaXQgY291bGRuJ3QgaGF2ZSBqdW1wZWQgdG8gYW4g
aXNsYW5kIGJlZm9yZSwgc28ganVzdCBpZ25vcmUgcnVubmluZyBleHRyYSBjb2RlCisgICAgICAg
ICAgICAgICAgLy8gaW4gdGhlIGlzbGFuZCBhbGxvY2F0b3IuCisgICAgICAgICAgICAgICAgcHJl
dmlvdXNUYXJnZXQgPSBiaXR3aXNlX2Nhc3Q8dm9pZCo+KGJpdHdpc2VfY2FzdDxpbnRwdHJfdD4o
ZnJvbUluc3RydWN0aW9uKSArIHByZXZpb3VzT2Zmc2V0KTsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgfSBlbHNlIGlmIChkaXNhc3NlbWJsZU5vcChmcm9tKSkKKyAgICAgICAgICAgIGlzVW5jb25k
aXRpb25hbEJyYW5jaEltbWVkaWF0ZU9yTm9wID0gdHJ1ZTsKIAogICAgICAgICBBU1NFUlRfVU5V
U0VEKGlzVW5jb25kaXRpb25hbEJyYW5jaEltbWVkaWF0ZU9yTm9wLCBpc1VuY29uZGl0aW9uYWxC
cmFuY2hJbW1lZGlhdGVPck5vcCk7CiAgICAgICAgIGNvbnN0ZXhwciBib29sIGlzQ2FsbCA9ICh0
eXBlID09IEJyYW5jaFR5cGVfQ0FMTCk7CkBAIC0yOTk0LDkgKzMwMDgsMTUgQEAgcHJvdGVjdGVk
OgogICAgICAgICBBU1NFUlQoIShyZWludGVycHJldF9jYXN0PGludHB0cl90Pih0bykgJiAzKSk7
CiAgICAgICAgIGFzc2VydElzTm90VGFnZ2VkKHRvKTsKICAgICAgICAgYXNzZXJ0SXNOb3RUYWdn
ZWQoZnJvbUluc3RydWN0aW9uKTsKLSAgICAgICAgaW50cHRyX3Qgb2Zmc2V0ID0gKHJlaW50ZXJw
cmV0X2Nhc3Q8aW50cHRyX3Q+KHRvKSAtIHJlaW50ZXJwcmV0X2Nhc3Q8aW50cHRyX3Q+KGZyb21J
bnN0cnVjdGlvbikpID4+IDI7CisgICAgICAgIGludHB0cl90IG9mZnNldCA9IChiaXR3aXNlX2Nh
c3Q8aW50cHRyX3Q+KHRvKSAtIGJpdHdpc2VfY2FzdDxpbnRwdHJfdD4oZnJvbUluc3RydWN0aW9u
KSkgPj4gMjsKICAgICAgICAgQVNTRVJUKHN0YXRpY19jYXN0PGludD4ob2Zmc2V0KSA9PSBvZmZz
ZXQpOwogCisgICAgICAgIGlmICghaXNJbnQ8MjY+KG9mZnNldCkpIHsKKyAgICAgICAgICAgIHRv
ID0gRXhlY3V0YWJsZUFsbG9jYXRvcjo6c2luZ2xldG9uKCkuZ2V0SnVtcElzbGFuZFRvKGJpdHdp
c2VfY2FzdDx2b2lkKj4oZnJvbUluc3RydWN0aW9uKSwgcHJldmlvdXNUYXJnZXQsIHRvKTsKKyAg
ICAgICAgICAgIG9mZnNldCA9IChiaXR3aXNlX2Nhc3Q8aW50cHRyX3Q+KHRvKSAtIGJpdHdpc2Vf
Y2FzdDxpbnRwdHJfdD4oZnJvbUluc3RydWN0aW9uKSkgPj4gMjsKKyAgICAgICAgICAgIFJFTEVB
U0VfQVNTRVJUKGlzSW50PDI2PihvZmZzZXQpKTsKKyAgICAgICAgfQorCiAgICAgICAgIGludCBp
bnNuID0gdW5jb25kaXRpb25hbEJyYW5jaEltbWVkaWF0ZShpc0NhbGwsIHN0YXRpY19jYXN0PGlu
dD4ob2Zmc2V0KSk7CiAgICAgICAgIFJFTEVBU0VfQVNTRVJUKHJvdW5kVXBUb011bHRpcGxlT2Y8
aW5zdHJ1Y3Rpb25TaXplPihmcm9tKSA9PSBmcm9tKTsKICAgICAgICAgY29weShmcm9tLCAmaW5z
biwgc2l6ZW9mKGludCkpOwpAQCAtMzAwOCw3ICszMDI4LDcgQEAgcHJvdGVjdGVkOgogICAgICAg
ICBBU1NFUlQoIShyZWludGVycHJldF9jYXN0PGludHB0cl90Pihmcm9tKSAmIDMpKTsKICAgICAg
ICAgQVNTRVJUKCEocmVpbnRlcnByZXRfY2FzdDxpbnRwdHJfdD4odG8pICYgMykpOwogICAgICAg
ICBpbnRwdHJfdCBvZmZzZXQgPSAocmVpbnRlcnByZXRfY2FzdDxpbnRwdHJfdD4odG8pIC0gcmVp
bnRlcnByZXRfY2FzdDxpbnRwdHJfdD4oZnJvbUluc3RydWN0aW9uKSkgPj4gMjsKLSAgICAgICAg
QVNTRVJUKGlzSW50PDI2PihvZmZzZXQpKTsKKyAgICAgICAgLy9BU1NFUlQoaXNJbnQ8MjY+KG9m
ZnNldCkpOyAvL09PUFMKIAogICAgICAgICBib29sIHVzZURpcmVjdCA9IGlzSW50PDE5PihvZmZz
ZXQpOwogICAgICAgICBBU1NFUlQodHlwZSA9PSBJbmRpcmVjdEJyYW5jaCB8fCB1c2VEaXJlY3Qp
OwpAQCAtMzAzNiw3ICszMDU2LDcgQEAgcHJvdGVjdGVkOgogICAgICAgICBBU1NFUlQoIShyZWlu
dGVycHJldF9jYXN0PGludHB0cl90Pihmcm9tKSAmIDMpKTsKICAgICAgICAgQVNTRVJUKCEocmVp
bnRlcnByZXRfY2FzdDxpbnRwdHJfdD4odG8pICYgMykpOwogICAgICAgICBpbnRwdHJfdCBvZmZz
ZXQgPSAocmVpbnRlcnByZXRfY2FzdDxpbnRwdHJfdD4odG8pIC0gcmVpbnRlcnByZXRfY2FzdDxp
bnRwdHJfdD4oZnJvbUluc3RydWN0aW9uKSkgPj4gMjsKLSAgICAgICAgQVNTRVJUKGlzSW50PDI2
PihvZmZzZXQpKTsKKyAgICAgICAgLy8gQVNTRVJUKGlzSW50PDI2PihvZmZzZXQpKTsgT09QUwog
CiAgICAgICAgIGJvb2wgdXNlRGlyZWN0ID0gaXNJbnQ8MTk+KG9mZnNldCk7CiAgICAgICAgIEFT
U0VSVCh0eXBlID09IEluZGlyZWN0QnJhbmNoIHx8IHVzZURpcmVjdCk7CkBAIC0zMDY1LDcgKzMw
ODUsNyBAQCBwcm90ZWN0ZWQ6CiAgICAgICAgIEFTU0VSVCghKHJlaW50ZXJwcmV0X2Nhc3Q8aW50
cHRyX3Q+KHRvKSAmIDMpKTsKICAgICAgICAgaW50cHRyX3Qgb2Zmc2V0ID0gKHJlaW50ZXJwcmV0
X2Nhc3Q8aW50cHRyX3Q+KHRvKSAtIHJlaW50ZXJwcmV0X2Nhc3Q8aW50cHRyX3Q+KGZyb21JbnN0
cnVjdGlvbikpID4+IDI7CiAgICAgICAgIEFTU0VSVChzdGF0aWNfY2FzdDxpbnQ+KG9mZnNldCkg
PT0gb2Zmc2V0KTsKLSAgICAgICAgQVNTRVJUKGlzSW50PDI2PihvZmZzZXQpKTsKKyAgICAgICAg
Ly9BU1NFUlQoaXNJbnQ8MjY+KG9mZnNldCkpOyBPT1BTCiAKICAgICAgICAgYm9vbCB1c2VEaXJl
Y3QgPSBpc0ludDwxND4ob2Zmc2V0KTsKICAgICAgICAgQVNTRVJUKHR5cGUgPT0gSW5kaXJlY3RC
cmFuY2ggfHwgdXNlRGlyZWN0KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJs
ZXIvTGlua0J1ZmZlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Fz
c2VtYmxlci9MaW5rQnVmZmVyLmNwcAkocmV2aXNpb24gMjU3ODY2KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2Fzc2VtYmxlci9MaW5rQnVmZmVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzQ0
LDcgKzM0NCw4IEBAIHZvaWQgTGlua0J1ZmZlcjo6YWxsb2NhdGUoTWFjcm9Bc3NlbWJsZXIKICAg
ICAgICAgaW5pdGlhbFNpemUgPSBtYWNyb0Fzc2VtYmxlci5tX2Fzc2VtYmxlci5jb2RlU2l6ZSgp
OwogICAgIH0KIAotICAgIG1fZXhlY3V0YWJsZU1lbW9yeSA9IEV4ZWN1dGFibGVBbGxvY2F0b3I6
OnNpbmdsZXRvbigpLmFsbG9jYXRlKGluaXRpYWxTaXplLCBvd25lclVJRCwgZWZmb3J0KTsKKyAg
ICBVTlVTRURfUEFSQU0ob3duZXJVSUQpOyAvLyBPT1BTOiBnZXQgcmlkIG9mIG93bmVyVUlEPwor
ICAgIG1fZXhlY3V0YWJsZU1lbW9yeSA9IEV4ZWN1dGFibGVBbGxvY2F0b3I6OnNpbmdsZXRvbigp
LmFsbG9jYXRlKGluaXRpYWxTaXplLCBlZmZvcnQpOwogICAgIGlmICghbV9leGVjdXRhYmxlTWVt
b3J5KQogICAgICAgICByZXR1cm47CiAgICAgbV9jb2RlID0gTWFjcm9Bc3NlbWJsZXJDb2RlUHRy
PExpbmtCdWZmZXJQdHJUYWc+KG1fZXhlY3V0YWJsZU1lbW9yeS0+c3RhcnQoKS5yZXRhZ2dlZFB0
cjxMaW5rQnVmZmVyUHRyVGFnPigpKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3Nl
bWJsZXIvTWFjcm9Bc3NlbWJsZXJDb2RlUmVmLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlckNvZGVSZWYuaAkocmV2aXNpb24gMjU3
ODY2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlckNv
ZGVSZWYuaAkod29ya2luZyBjb3B5KQpAQCAtNDM0LDcgKzQzNCw2IEBAIHB1YmxpYzoKICAgICAg
ICAgOiBtX2NvZGVQdHIoZXhlY3V0YWJsZU1lbW9yeS0+c3RhcnQoKS5yZXRhZ2dlZFB0cjx0YWc+
KCkpCiAgICAgICAgICwgbV9leGVjdXRhYmxlTWVtb3J5KFdURk1vdmUoZXhlY3V0YWJsZU1lbW9y
eSkpCiAgICAgewotICAgICAgICBBU1NFUlQobV9leGVjdXRhYmxlTWVtb3J5LT5pc01hbmFnZWQo
KSk7CiAgICAgICAgIEFTU0VSVChtX2V4ZWN1dGFibGVNZW1vcnktPnN0YXJ0KCkpOwogICAgICAg
ICBBU1NFUlQobV9jb2RlUHRyKTsKICAgICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L0V4ZWN1dGFibGVBbGxvY2F0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvRXhlY3V0YWJsZUFsbG9jYXRvci5jcHAJKHJldmlzaW9uIDI1Nzg2NikKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvRXhlY3V0YWJsZUFsbG9jYXRvci5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTI4LDkgKzI4LDEwIEBACiAKICNpZiBFTkFCTEUoSklUKQogCi0jaW5jbHVk
ZSAiQ29kZVByb2ZpbGluZy5oIgogI2luY2x1ZGUgIkV4ZWN1dGFibGVBbGxvY2F0aW9uRnV6ei5o
IgorI2luY2x1ZGUgIkl0ZXJhdGlvblN0YXR1cy5oIgogI2luY2x1ZGUgIkpTQ0lubGluZXMuaCIK
KyNpbmNsdWRlIDx0eXBlX3RyYWl0cz4KICNpbmNsdWRlIDx3dGYvRmlsZVN5c3RlbS5oPgogI2lu
Y2x1ZGUgPHd0Zi9NZXRhQWxsb2NhdG9yLmg+CiAjaW5jbHVkZSA8d3RmL1BhZ2VSZXNlcnZhdGlv
bi5oPgpAQCAtOTYsOSArOTcsMTQgQEAgc3RhdGljIGNvbnN0ZXhwciBzaXplX3QgZml4ZWRFeGVj
dXRhYmxlTQogI2VsaWYgQ1BVKEFSTSkKIHN0YXRpYyBjb25zdGV4cHIgc2l6ZV90IGZpeGVkRXhl
Y3V0YWJsZU1lbW9yeVBvb2xTaXplID0gMTYgKiAxMDI0ICogMTAyNDsKICNlbGlmIENQVShBUk02
NCkKLXN0YXRpYyBjb25zdGV4cHIgc2l6ZV90IGZpeGVkRXhlY3V0YWJsZU1lbW9yeVBvb2xTaXpl
ID0gMTI4ICogMTAyNCAqIDEwMjQ7CitzdGF0aWMgY29uc3RleHByIHNpemVfdCBmaXhlZEV4ZWN1
dGFibGVNZW1vcnlQb29sU2l6ZSA9IDEgKiAxMDI0ICogMTAyNCAqIDEwMjQ7CitzdGF0aWMgY29u
c3RleHByIHNpemVfdCByZWdpb25TaXplID0gMTI4ICogMTAyNCAqIDEwMjQ7CitzdGF0aWMgY29u
c3RleHByIHNpemVfdCBpc2xhbmRSZWdpb25TaXplID0gNjQgKiAxMDI0ICogMTAyNDsKK3N0YXRp
YyBjb25zdGV4cHIgc2l6ZV90IG51bWJlck9mUmVnaW9ucyA9IGZpeGVkRXhlY3V0YWJsZU1lbW9y
eVBvb2xTaXplIC8gcmVnaW9uU2l6ZTsKK3N0YXRpYyBjb25zdGV4cHIgc2l6ZV90IGlzbGFuZFNp
emVJbkJ5dGVzID0gMTY7CitzdGF0aWMgY29uc3RleHByIHNpemVfdCBtYXhJc2xhbmRzUGVyUmVn
aW9uID0gaXNsYW5kUmVnaW9uU2l6ZSAvIGlzbGFuZFNpemVJbkJ5dGVzOwogI2VsaWYgQ1BVKFg4
Nl82NCkKLXN0YXRpYyBjb25zdGV4cHIgc2l6ZV90IGZpeGVkRXhlY3V0YWJsZU1lbW9yeVBvb2xT
aXplID0gMTAyNCAqIDEwMjQgKiAxMDI0Oworc3RhdGljIGNvbnN0ZXhwciBzaXplX3QgZml4ZWRF
eGVjdXRhYmxlTWVtb3J5UG9vbFNpemUgPSAxICogMTAyNCAqIDEwMjQgKiAxMDI0OwogI2Vsc2UK
IHN0YXRpYyBjb25zdGV4cHIgc2l6ZV90IGZpeGVkRXhlY3V0YWJsZU1lbW9yeVBvb2xTaXplID0g
MzIgKiAxMDI0ICogMTAyNDsKICNlbmRpZgpAQCAtMzEzLDkgKzMxOSwxMCBAQCBzdGF0aWMgQUxX
QVlTX0lOTElORSBKSVRSZXNlcnZhdGlvbiBpbml0CiAgICAgaWYgKCFpc0pJVEVuYWJsZWQoKSkK
ICAgICAgICAgcmV0dXJuIHJlc2VydmF0aW9uOwogCi0gICAgaWYgKE9wdGlvbnM6OmppdE1lbW9y
eVJlc2VydmF0aW9uU2l6ZSgpKQotICAgICAgICByZXNlcnZhdGlvbi5zaXplID0gT3B0aW9uczo6
aml0TWVtb3J5UmVzZXJ2YXRpb25TaXplKCk7Ci0gICAgZWxzZQorICAgIC8vIE9PUFMhCisgICAg
Ly9pZiAoT3B0aW9uczo6aml0TWVtb3J5UmVzZXJ2YXRpb25TaXplKCkpCisgICAgLy8gICAgcmVz
ZXJ2YXRpb24uc2l6ZSA9IE9wdGlvbnM6OmppdE1lbW9yeVJlc2VydmF0aW9uU2l6ZSgpOworICAg
IC8vZWxzZQogICAgICAgICByZXNlcnZhdGlvbi5zaXplID0gZml4ZWRFeGVjdXRhYmxlTWVtb3J5
UG9vbFNpemU7CiAgICAgcmVzZXJ2YXRpb24uc2l6ZSA9IHN0ZDo6bWF4KHJvdW5kVXBUb011bHRp
cGxlT2YocGFnZVNpemUoKSwgcmVzZXJ2YXRpb24uc2l6ZSksIHBhZ2VTaXplKCkgKiAyKTsKIApA
QCAtMzYzLDUyICszNzAsMzY5IEBAIHN0YXRpYyBBTFdBWVNfSU5MSU5FIEpJVFJlc2VydmF0aW9u
IGluaXQKICAgICByZXR1cm4gcmVzZXJ2YXRpb247CiB9CiAKLWNsYXNzIEZpeGVkVk1Qb29sRXhl
Y3V0YWJsZUFsbG9jYXRvciBmaW5hbCA6IHB1YmxpYyBNZXRhQWxsb2NhdG9yIHsKK2NsYXNzIEZp
eGVkVk1Qb29sRXhlY3V0YWJsZUFsbG9jYXRvciBmaW5hbCB7CiAgICAgV1RGX01BS0VfRkFTVF9B
TExPQ0FURUQ7CiBwdWJsaWM6CiAgICAgRml4ZWRWTVBvb2xFeGVjdXRhYmxlQWxsb2NhdG9yKCkK
LSAgICAgICAgOiBNZXRhQWxsb2NhdG9yKGppdEFsbG9jYXRpb25HcmFudWxlKSAvLyByb3VuZCB1
cCBhbGwgYWxsb2NhdGlvbnMgdG8gMzIgYnl0ZXMKKyNpZiBDUFUoQVJNNjQpCisgICAgICAgIDog
bV9hbGxvY2F0b3JzKGNvbnN0cnVjdEZpeGVkU2l6ZUFycmF5V2l0aEFyZ3VtZW50czxSZWdpb25B
bGxvY2F0b3IsIG51bWJlck9mUmVnaW9ucz4obV9sb2NrKSkKKyNlbHNlCisgICAgICAgIDogbV9h
bGxvY2F0b3IobV9sb2NrKQorI2VuZGlmCiAgICAgeworICAgICAgICBmb3JFYWNoQWxsb2NhdG9y
KFsmXSAoQWxsb2NhdG9yJiBhbGxvY2F0b3IpIHsKKyAgICAgICAgICAgIGFsbG9jYXRvci5tX2Zp
eGVkQWxsb2NhdG9yID0gdGhpczsKKyAgICAgICAgfSk7CisKICAgICAgICAgSklUUmVzZXJ2YXRp
b24gcmVzZXJ2YXRpb24gPSBpbml0aWFsaXplSklUUGFnZVJlc2VydmF0aW9uKCk7CiAgICAgICAg
IG1fcmVzZXJ2YXRpb24gPSBXVEZNb3ZlKHJlc2VydmF0aW9uLnBhZ2VSZXNlcnZhdGlvbik7CiAg
ICAgICAgIGlmIChtX3Jlc2VydmF0aW9uKSB7Ci0gICAgICAgICAgICBhZGRGcmVzaEZyZWVTcGFj
ZShyZXNlcnZhdGlvbi5iYXNlLCByZXNlcnZhdGlvbi5zaXplKTsKKyNpZiBDUFUoQVJNNjQpCisg
ICAgICAgICAgICB1aW50cHRyX3Qgc3RhcnQgPSBiaXR3aXNlX2Nhc3Q8dWludHB0cl90PihtX3Jl
c2VydmF0aW9uLmJhc2UoKSk7CisgICAgICAgICAgICB1aW50cHRyX3QgcmVzZXJ2YXRpb25FbmQg
PSBzdGFydCArIG1fcmVzZXJ2YXRpb24uc2l6ZSgpOworICAgICAgICAgICAgZm9yIChzaXplX3Qg
aSA9IDA7IGkgPCBudW1iZXJPZlJlZ2lvbnM7ICsraSkgeworICAgICAgICAgICAgICAgIFJFTEVB
U0VfQVNTRVJUKHN0YXJ0IDwgcmVzZXJ2YXRpb25FbmQpOworICAgICAgICAgICAgICAgIG1fYWxs
b2NhdG9yc1tpXS5zdGFydCA9IHN0YXJ0OworICAgICAgICAgICAgICAgIG1fYWxsb2NhdG9yc1tp
XS5lbmQgPSBzdGFydCArIHJlZ2lvblNpemU7CisgICAgICAgICAgICAgICAgaWYgKG1fYWxsb2Nh
dG9yc1tpXS5lbmQgPiByZXNlcnZhdGlvbkVuZCkgeworICAgICAgICAgICAgICAgICAgICAvLyBX
ZSBtYXkgaGF2ZSB0YWtlbiBhIHBhZ2UgZm9yIHRoZSBleGVjdXRhYmxlIG9ubHkgY29weSB0aHVu
ay4KKyAgICAgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoaSA9PSBudW1iZXJPZlJlZ2lv
bnMgLSAxKTsKKyAgICAgICAgICAgICAgICAgICAgbV9hbGxvY2F0b3JzW2ldLmVuZCA9IHJlc2Vy
dmF0aW9uRW5kOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIG1fYWxsb2Nh
dG9yc1tpXS5hZGRGcmVzaEZyZWVTcGFjZShiaXR3aXNlX2Nhc3Q8dm9pZCo+KG1fYWxsb2NhdG9y
c1tpXS5zdGFydCksIG1fYWxsb2NhdG9yc1tpXS5hbGxvY2F0b3JTaXplKCkpOworCisgICAgICAg
ICAgICAgICAgc3RhcnQgKz0gcmVnaW9uU2l6ZTsKKyAgICAgICAgICAgIH0KKyNlbHNlCisgICAg
ICAgICAgICBtX2FsbG9jYXRvci5hZGRGcmVzaEZyZWVTcGFjZShyZXNlcnZhdGlvbi5iYXNlLCBy
ZXNlcnZhdGlvbi5zaXplKTsKKyNlbmRpZgorCiAgICAgICAgICAgICBBU1NFUlQoYnl0ZXNSZXNl
cnZlZCgpID09IHJlc2VydmF0aW9uLnNpemUpOyAvLyBTaW5jZSBvdXIgZXhlY3V0YWJsZSBtZW1v
cnkgaXMgZml4ZWQtc2l6ZWQsIGJ5dGVzUmVzZXJ2ZWQgaXMgbmV2ZXIgY2hhbmdlZCBhZnRlciBp
bml0aWFsaXphdGlvbi4KICAgICAgICAgfQogICAgIH0KIAotICAgIHZpcnR1YWwgfkZpeGVkVk1Q
b29sRXhlY3V0YWJsZUFsbG9jYXRvcigpOworICAgIH5GaXhlZFZNUG9vbEV4ZWN1dGFibGVBbGxv
Y2F0b3IoKQorICAgIHsKKyAgICAgICAgbV9yZXNlcnZhdGlvbi5kZWFsbG9jYXRlKCk7CisgICAg
fQogCiAgICAgdm9pZCogbWVtb3J5U3RhcnQoKSB7IHJldHVybiB1bnRhZ0NvZGVQdHI8RXhlY3V0
YWJsZU1lbW9yeVB0clRhZz4oZ19qc2NDb25maWcuc3RhcnRFeGVjdXRhYmxlTWVtb3J5KTsgfQog
ICAgIHZvaWQqIG1lbW9yeUVuZCgpIHsgcmV0dXJuIHVudGFnQ29kZVB0cjxFeGVjdXRhYmxlTWVt
b3J5UHRyVGFnPihnX2pzY0NvbmZpZy5lbmRFeGVjdXRhYmxlTWVtb3J5KTsgfQogICAgIGJvb2wg
aXNKSVRQQyh2b2lkKiBwYykgeyByZXR1cm4gbWVtb3J5U3RhcnQoKSA8PSBwYyAmJiBwYyA8IG1l
bW9yeUVuZCgpOyB9CisgICAgYm9vbCBpc1ZhbGlkKCkgeyByZXR1cm4gISFtX3Jlc2VydmF0aW9u
OyB9CiAKLXByb3RlY3RlZDoKLSAgICBGcmVlU3BhY2VQdHIgYWxsb2NhdGVOZXdTcGFjZShzaXpl
X3QmKSBvdmVycmlkZQorICAgIFJlZlB0cjxFeGVjdXRhYmxlTWVtb3J5SGFuZGxlPiBhbGxvY2F0
ZShzaXplX3Qgc2l6ZUluQnl0ZXMpCiAgICAgewotICAgICAgICAvLyBXZSdyZSBvcGVyYXRpbmcg
aW4gYSBmaXhlZCBwb29sLCBzbyBuZXcgYWxsb2NhdGlvbiBpcyBhbHdheXMgcHJvaGliaXRlZC4K
KyNpZiBDUFUoQVJNNjQpCisgICAgICAgIC8vIE9PUFM6IHBpcGUgdGhyb3VnaCBsb2NrIHRvIGFs
bG9jYXRvcnMKKyAgICAgICAgYXV0byBsb2NrSG9sZGVyID0gaG9sZExvY2soZ2V0TG9jaygpKTsK
KyAgICAgICAgCisgICAgICAgIHVuc2lnbmVkIHN0YXJ0ID0gY3J5cHRvZ3JhcGhpY2FsbHlSYW5k
b21OdW1iZXIoKSAlIG1fYWxsb2NhdG9ycy5zaXplKCk7CisgICAgICAgIHVuc2lnbmVkIGkgPSBz
dGFydDsKKyAgICAgICAgd2hpbGUgKHRydWUpIHsKKyAgICAgICAgICAgIFJlZ2lvbkFsbG9jYXRv
ciYgYWxsb2NhdG9yID0gbV9hbGxvY2F0b3JzW2ldOworICAgICAgICAgICAgaWYgKFJlZlB0cjxF
eGVjdXRhYmxlTWVtb3J5SGFuZGxlPiByZXN1bHQgPSBhbGxvY2F0b3IuYWxsb2NhdGUoc2l6ZUlu
Qnl0ZXMpKQorICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgICAgICAgICBpID0g
aSArIDE7CisgICAgICAgICAgICBpID0gaSAlIG1fYWxsb2NhdG9ycy5zaXplKCk7CisgICAgICAg
ICAgICBpZiAoaSA9PSBzdGFydCkKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQog
ICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyNlbHNlCisgICAgICAgIHJldHVybiBtX2FsbG9jYXRv
ci5hbGxvY2F0ZShzaXplSW5CeXRlcyk7CisjZW5kaWYKICAgICB9CiAKLSAgICB2b2lkIG5vdGlm
eU5lZWRQYWdlKHZvaWQqIHBhZ2UsIHNpemVfdCBjb3VudCkgb3ZlcnJpZGUKKyAgICBMb2NrJiBn
ZXRMb2NrKCkgeyByZXR1cm4gbV9sb2NrOyB9CisKKyAgICAvLyBOb24gYXRvbWljCisgICAgc2l6
ZV90IGJ5dGVzQWxsb2NhdGVkKCkgCiAgICAgewotICAgICAgICBtX3Jlc2VydmF0aW9uLmNvbW1p
dChwYWdlLCBwYWdlU2l6ZSgpICogY291bnQpOworICAgICAgICBzaXplX3QgcmVzdWx0ID0gMDsK
KyAgICAgICAgZm9yRWFjaEFsbG9jYXRvcihbJl0gKEFsbG9jYXRvciYgYWxsb2NhdG9yKSB7Cisg
ICAgICAgICAgICByZXN1bHQgKz0gYWxsb2NhdG9yLmJ5dGVzQWxsb2NhdGVkKCk7CisgICAgICAg
IH0pOworICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgIH0KKyAgICBzaXplX3QgYnl0ZXNSZXNl
cnZlZCgpIAorICAgIHsKKyAgICAgICAgc2l6ZV90IHJlc3VsdCA9IDA7CisgICAgICAgIGZvckVh
Y2hBbGxvY2F0b3IoWyZdIChBbGxvY2F0b3ImIGFsbG9jYXRvcikgeworICAgICAgICAgICAgcmVz
dWx0ICs9IGFsbG9jYXRvci5ieXRlc1Jlc2VydmVkKCk7CisgICAgICAgIH0pOworICAgICAgICBy
ZXR1cm4gcmVzdWx0OworICAgIH0KKyAgICBzaXplX3QgYnl0ZXNDb21taXR0ZWQoKQorICAgIHsK
KyAgICAgICAgc2l6ZV90IHJlc3VsdCA9IDA7CisgICAgICAgIGZvckVhY2hBbGxvY2F0b3IoWyZd
IChBbGxvY2F0b3ImIGFsbG9jYXRvcikgeworICAgICAgICAgICAgcmVzdWx0ICs9IGFsbG9jYXRv
ci5ieXRlc0NvbW1pdHRlZCgpOworICAgICAgICB9KTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsK
KyAgICB9CisKKyAgICBib29sIGlzSW5BbGxvY2F0ZWRNZW1vcnkoY29uc3QgQWJzdHJhY3RMb2Nr
ZXImIGxvY2tlciwgdm9pZCogYWRkcmVzcykKKyAgICB7CisgICAgICAgIGJvb2wgcmVzdWx0ID0g
ZmFsc2U7CisgICAgICAgIGZvckVhY2hBbGxvY2F0b3IoWyZdIChBbGxvY2F0b3ImIGFsbG9jYXRv
cikgeworICAgICAgICAgICAgaWYgKGFsbG9jYXRvci5pc0luQWxsb2NhdGVkTWVtb3J5KGxvY2tl
ciwgYWRkcmVzcykpIHsKKyAgICAgICAgICAgICAgICByZXN1bHQgPSB0cnVlOworICAgICAgICAg
ICAgICAgIHJldHVybiBJdGVyYXRpb25TdGF0dXM6OkRvbmU7CisgICAgICAgICAgICB9CisgICAg
ICAgICAgICByZXR1cm4gSXRlcmF0aW9uU3RhdHVzOjpDb250aW51ZTsKKyAgICAgICAgfSk7CisK
KyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisKKyNpZiBFTkFCTEUoTUVUQV9BTExPQ0FU
T1JfUFJPRklMRSkKKyAgICB2b2lkIGR1bXBQcm9maWxlKCkKKyAgICB7CisgICAgICAgIGZvckVh
Y2hBbGxvY2F0b3IoWyZdIChBbGxvY2F0b3ImIGFsbG9jYXRvcikgeworICAgICAgICAgICAgYWxs
b2NhdG9yLmR1bXBQcm9maWxlKCk7CisgICAgICAgIH0pOworICAgIH0KKyNlbmRpZgorCisgICAg
TWV0YUFsbG9jYXRvcjo6U3RhdGlzdGljcyBjdXJyZW50U3RhdGlzdGljcygpCisgICAgeworICAg
ICAgICAvLyBPT1BTOiBtYWtlIGF0b21pYyBieSBob2xkaW5nIGxvY2suLi4KKyAgICAgICAgTWV0
YUFsbG9jYXRvcjo6U3RhdGlzdGljcyByZXN1bHQgeyAwLCAwLCAwIH07CisgICAgICAgIGZvckVh
Y2hBbGxvY2F0b3IoWyZdIChBbGxvY2F0b3ImIGFsbG9jYXRvcikgeworICAgICAgICAgICAgYXV0
byBhbGxvY2F0b3JTdGF0cyA9IGFsbG9jYXRvci5jdXJyZW50U3RhdGlzdGljcygpOworICAgICAg
ICAgICAgcmVzdWx0LmJ5dGVzQWxsb2NhdGVkICs9IGFsbG9jYXRvclN0YXRzLmJ5dGVzQWxsb2Nh
dGVkOworICAgICAgICAgICAgcmVzdWx0LmJ5dGVzUmVzZXJ2ZWQgKz0gYWxsb2NhdG9yU3RhdHMu
Ynl0ZXNSZXNlcnZlZDsKKyAgICAgICAgICAgIHJlc3VsdC5ieXRlc0NvbW1pdHRlZCArPSBhbGxv
Y2F0b3JTdGF0cy5ieXRlc0NvbW1pdHRlZDsKKyAgICAgICAgfSk7CisgICAgICAgIHJldHVybiBy
ZXN1bHQ7CisgICAgfQorCisjaWYgQ1BVKEFSTTY0KQorcHJpdmF0ZToKKyAgICBjbGFzcyBSZWdp
b25BbGxvY2F0b3I7CisKKyAgICBSZWdpb25BbGxvY2F0b3IqIGZpbmRSZWdpb24odWludHB0cl90
IHB0cikKKyAgICB7CisgICAgICAgIFJlZ2lvbkFsbG9jYXRvciogcmVzdWx0ID0gbnVsbHB0cjsK
KyAgICAgICAgZm9yRWFjaEFsbG9jYXRvcihbJl0gKFJlZ2lvbkFsbG9jYXRvciYgYWxsb2NhdG9y
KSB7CisgICAgICAgICAgICBpZiAoYWxsb2NhdG9yLnN0YXJ0IDw9IHB0ciAmJiBwdHIgPCBhbGxv
Y2F0b3IuZW5kKSB7CisgICAgICAgICAgICAgICAgcmVzdWx0ID0gJmFsbG9jYXRvcjsKKyAgICAg
ICAgICAgICAgICByZXR1cm4gSXRlcmF0aW9uU3RhdHVzOjpEb25lOworICAgICAgICAgICAgfQor
ICAgICAgICAgICAgcmV0dXJuIEl0ZXJhdGlvblN0YXR1czo6Q29udGludWU7CisgICAgICAgIH0p
OworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKworICAgIHZvaWQqIGlzbGFuZEZvckp1
bXBMb2NhdGlvbih1aW50cHRyX3QganVtcExvY2F0aW9uLCB1aW50cHRyX3Qgb2xkVGFyZ2V0KQor
ICAgIHsKKyAgICAgICAgUmVnaW9uQWxsb2NhdG9yKiBhbGxvY2F0b3IgPSBmaW5kUmVnaW9uKGp1
bXBMb2NhdGlvbik7CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKGFsbG9jYXRvcik7CisKKyAgICAg
ICAgLy8gSWYgd2Ugd2VyZSBhbHJlYWR5IGFuIGlzbGFuZCwgd2UgY2FuIGp1c3QgcmV1c2UgaXQu
CisgICAgICAgIGlmIChhbGxvY2F0b3ItPmlzbGFuZEJlZ2luKCkgPD0gb2xkVGFyZ2V0ICYmIG9s
ZFRhcmdldCA8IGFsbG9jYXRvci0+ZW5kKSB7CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChh
bGxvY2F0b3ItPmp1bXBMb2NhdGlvbnNUb0lzbGFuZHMuY29udGFpbnMoanVtcExvY2F0aW9uKSk7
CisgICAgICAgICAgICByZXR1cm4gYml0d2lzZV9jYXN0PHZvaWQqPihvbGRUYXJnZXQpOworICAg
ICAgICB9CisKKyAgICAgICAgdm9pZCogcmVzdWx0ID0gYWxsb2NhdG9yLT5hbGxvY2F0ZUlzbGFu
ZCgpOworICAgICAgICBhbGxvY2F0b3ItPmp1bXBMb2NhdGlvbnNUb0lzbGFuZHMuYXBwZW5kKGp1
bXBMb2NhdGlvbik7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorCitwdWJsaWM6CiAK
LSAgICB2b2lkIG5vdGlmeVBhZ2VJc0ZyZWUodm9pZCogcGFnZSwgc2l6ZV90IGNvdW50KSBvdmVy
cmlkZQorICAgIHZvaWQqIG1ha2VJc2xhbmQodWludHB0cl90IGp1bXBMb2NhdGlvbiwgdWludHB0
cl90IG9sZFRhcmdldCwgdWludHB0cl90IG5ld1RhcmdldCkKICAgICB7Ci0gICAgICAgIG1fcmVz
ZXJ2YXRpb24uZGVjb21taXQocGFnZSwgcGFnZVNpemUoKSAqIGNvdW50KTsKKyAgICAgICAgYXV0
byBsb2NrSG9sZGVyID0gaG9sZExvY2soZ2V0TG9jaygpKTsKKworICAgICAgICAvLyBPT1BTOiB0
aHJlYWQgdGhpcyB0aHJvdWdoIGEgc2VyaWVzIG9mIGp1bXBzLgorICAgICAgICB2b2lkKiBpc2xh
bmQgPSBpc2xhbmRGb3JKdW1wTG9jYXRpb24oanVtcExvY2F0aW9uLCBvbGRUYXJnZXQpOworICAg
ICAgICBDQ2FsbEhlbHBlcnMgaml0OworICAgICAgICBqaXQubW92ZShDQ2FsbEhlbHBlcnM6OlRy
dXN0ZWRJbW1QdHIobmV3VGFyZ2V0KSwgQ0NhbGxIZWxwZXJzOjpkYXRhVGVtcFJlZ2lzdGVyKTsK
KyAgICAgICAgaml0LmZhckp1bXAoQ0NhbGxIZWxwZXJzOjpkYXRhVGVtcFJlZ2lzdGVyLCBOb1B0
clRhZyk7CisKKyAgICAgICAgTGlua0J1ZmZlciBsaW5rQnVmZmVyKGppdCwgTWFjcm9Bc3NlbWJs
ZXJDb2RlUHRyPE5vUHRyVGFnPihpc2xhbmQpLCBpc2xhbmRTaXplSW5CeXRlcywgSklUQ29tcGls
YXRpb25NdXN0U3VjY2VlZCwgZmFsc2UpOworICAgICAgICBhdXRvIHJlc3VsdCA9IEZJTkFMSVpF
X0NPREUobGlua0J1ZmZlciwgTm9QdHJUYWcsICJKdW1wIElzbGFuZDogJWx1IiwganVtcExvY2F0
aW9uKTsKKyAgICAgICAgcmV0dXJuIGlzbGFuZDsKICAgICB9CisjZW5kaWYKIAogcHJpdmF0ZToK
KyAgICBjbGFzcyBBbGxvY2F0b3IgOiBwdWJsaWMgTWV0YUFsbG9jYXRvciB7CisgICAgICAgIHVz
aW5nIEJhc2UgPSBNZXRhQWxsb2NhdG9yOworICAgIHB1YmxpYzoKKyAgICAgICAgQWxsb2NhdG9y
KExvY2smIGxvY2spCisgICAgICAgICAgICA6IEJhc2UobG9jaywgaml0QWxsb2NhdGlvbkdyYW51
bGUsIHBhZ2VTaXplKCkpIC8vIHJvdW5kIHVwIGFsbCBhbGxvY2F0aW9ucyB0byAzMiBieXRlcwor
ICAgICAgICB7CisgICAgICAgIH0KKworICAgICAgICBGcmVlU3BhY2VQdHIgYWxsb2NhdGVOZXdT
cGFjZShzaXplX3QmKSBvdmVycmlkZQorICAgICAgICB7CisgICAgICAgICAgICAvLyBXZSdyZSBv
cGVyYXRpbmcgaW4gYSBmaXhlZCBwb29sLCBzbyBuZXcgYWxsb2NhdGlvbiBpcyBhbHdheXMgcHJv
aGliaXRlZC4KKyAgICAgICAgICAgIHJldHVybiBudWxscHRyOworICAgICAgICB9CisKKyAgICAg
ICAgdm9pZCBub3RpZnlOZWVkUGFnZSh2b2lkKiBwYWdlLCBzaXplX3QgY291bnQpIG92ZXJyaWRl
CisgICAgICAgIHsKKyAgICAgICAgICAgIG1fZml4ZWRBbGxvY2F0b3ItPm1fcmVzZXJ2YXRpb24u
Y29tbWl0KHBhZ2UsIHBhZ2VTaXplKCkgKiBjb3VudCk7CisgICAgICAgIH0KKworICAgICAgICB2
b2lkIG5vdGlmeVBhZ2VJc0ZyZWUodm9pZCogcGFnZSwgc2l6ZV90IGNvdW50KSBvdmVycmlkZQor
ICAgICAgICB7CisgICAgICAgICAgICBtX2ZpeGVkQWxsb2NhdG9yLT5tX3Jlc2VydmF0aW9uLmRl
Y29tbWl0KHBhZ2UsIHBhZ2VTaXplKCkgKiBjb3VudCk7CisgICAgICAgIH0KKworICAgICAgICBG
aXhlZFZNUG9vbEV4ZWN1dGFibGVBbGxvY2F0b3IqIG1fZml4ZWRBbGxvY2F0b3I7CisgICAgfTsK
KworI2lmIENQVShBUk02NCkgLy8gT09QUzogY2FuJ3QgZG8gdGhpcyBmb3IgYXJtNjRfMzIKKyAg
ICBjbGFzcyBSZWdpb25BbGxvY2F0b3IgZmluYWwgOiBwdWJsaWMgQWxsb2NhdG9yIHsKKyAgICAg
ICAgdXNpbmcgQmFzZSA9IEFsbG9jYXRvcjsKKyAgICBwdWJsaWM6CisgICAgICAgIFJlZ2lvbkFs
bG9jYXRvcihMb2NrJiBsb2NrKQorICAgICAgICAgICAgOiBCYXNlKGxvY2spCisgICAgICAgIHsK
KworICAgICAgICB9CisgICAgICAgIC8vICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0KKyAgICAgICAgLy8gIHwgYWxsb2NhdG9yIC0tPiAgICAgPC0tIGlzbGFuZCAgICAgIHwK
KyAgICAgICAgLy8gIHwgICAgICAgICAgICAgXiAgICAgXiAgICAgICAgICAgICAgIHwKKyAgICAg
ICAgLy8gIHwgICAgICAgICAgICAgfCAgICAgfCAgICAgICAgICAgICAgIHwKKyAgICAgICAgLy8g
IHwgYWxsb2NhdG9yU2l6ZSAgICAgcmVzZXJ2ZWRJc2xhbmRzIHwKKyAgICAgICAgLy8gIC0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgICAgLy8gIGFsbG9jYXRvckVu
ZCA8PSBpc2xhbmQgYmVnaW4KKworICAgICAgICB1aW50cHRyX3QgaXNsYW5kQmVnaW4oKQorICAg
ICAgICB7CisgICAgICAgICAgICAvLyBbc3RhcnQsIGFsbG9jYXRvckVuZCkKKyAgICAgICAgICAg
IHJldHVybiBlbmQgLSBpc2xhbmRSZWdpb25TaXplOworICAgICAgICB9CisKKyAgICAgICAgdWlu
dHB0cl90IGFsbG9jYXRvclNpemUoKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gaXNs
YW5kQmVnaW4oKSAtIHN0YXJ0OworICAgICAgICB9CisKKyAgICAgICAgc2l6ZV90IGlzbGFuZHNQ
ZXJQYWdlKCkKKyAgICAgICAgeworICAgICAgICAgICAgc2l6ZV90IGlzbGFuZHNQZXJQYWdlID0g
cGFnZVNpemUoKSAvIGlzbGFuZFNpemVJbkJ5dGVzOworICAgICAgICAgICAgQVNTRVJUKGlzbGFu
ZHNQZXJQYWdlICogaXNsYW5kU2l6ZUluQnl0ZXMgPT0gcGFnZVNpemUoKSk7IC8vIHdlIHJlbHkg
b24gcGVyZmVjdCBkaXZpc2lvbiBmb3IgZmluZGluZyB3aGljaCBiaXQgYSBwb2ludGVyIGlzLgor
ICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoaXNQb3dlck9mVHdvKGlzbGFuZHNQZXJQYWdlKSk7
CisgICAgICAgICAgICByZXR1cm4gaXNsYW5kc1BlclBhZ2U7CisgICAgICAgIH0KKworICAgICAg
ICB2b2lkIG5vdGlmeUJlZm9yZVJlbGVhc2UoTWV0YUFsbG9jYXRvckhhbmRsZSYpIGZpbmFsCisg
ICAgICAgIHsKKyAgICAgICAgfQorCisKKyAgICAgICAgLyoKKyAgICAgICAgLy8gT09QUzogcGFz
cyBMb2NrSG9sZGVyIHRvIG1ha2UgaXQgb2J2aW91cyBsb2NrIGlzIGhlbGQuCisgICAgICAgIGJv
b2wgdHJ5QWxsb2NhdGVJc2xhbmRzKHNpemVfdCBudW1Jc2xhbmRzVG9BbGxvY2F0ZSkKKyAgICAg
ICAgeworICAgICAgICAgICAgaWYgKCFudW1Jc2xhbmRzVG9BbGxvY2F0ZSkKKyAgICAgICAgICAg
ICAgICByZXR1cm4gdHJ1ZTsKKworICAgICAgICAgICAgdWludHB0cl90IG51bUZyZWVJc2xhbmRz
ID0gbnVtUmVzZXJ2ZWRJc2xhbmRzIC0gbnVtQWxsb2NhdGVkSXNsYW5kczsgCisgICAgICAgICAg
ICBpZiAobnVtRnJlZUlzbGFuZHMgPj0gbnVtSXNsYW5kc1RvQWxsb2NhdGUpIHsKKyAgICAgICAg
ICAgICAgICBudW1BbGxvY2F0ZWRJc2xhbmRzICs9IG51bUlzbGFuZHNUb0FsbG9jYXRlOworICAg
ICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKG51bUFsbG9jYXRlZElzbGFuZHMgPD0gbnVtUmVz
ZXJ2ZWRJc2xhbmRzKTsgLy8gT09QUzogY2hlY2tDb25zaXN0ZW5jeT8KKyAgICAgICAgICAgICAg
ICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgIH0gCisKKyAgICAgICAgICAgIHNpemVfdCBpc2xh
bmRzUGVyUGFnZSA9IHRoaXMtPmlzbGFuZHNQZXJQYWdlKCk7CisgICAgICAgICAgICAKKyAgICAg
ICAgICAgIHVpbnRwdHJfdCBpc2xhbmRzVG9SZXNlcnZlID0gbnVtSXNsYW5kc1RvQWxsb2NhdGUg
LSBudW1GcmVlSXNsYW5kczsKKworICAgICAgICAgICAgaXNsYW5kc1RvUmVzZXJ2ZSA9IHJvdW5k
VXBUb011bHRpcGxlT2YoaXNsYW5kc1BlclBhZ2UsIGlzbGFuZHNUb1Jlc2VydmUpOworICAgICAg
ICAgICAgdWludHB0cl90IG5ld0lzbGFuZEJlZ2luID0gZW5kIC0gKChudW1SZXNlcnZlZElzbGFu
ZHMgKyBpc2xhbmRzVG9SZXNlcnZlKSAqIGlzbGFuZFNpemVJbkJ5dGVzKTsKKyAgICAgICAgICAg
IGlmIChuZXdJc2xhbmRCZWdpbiA8IGFsbG9jYXRvckVuZCgpKQorICAgICAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKKworICAgICAgICAgICAgbnVtQWxsb2NhdGVkSXNsYW5kcyArPSBudW1Jc2xh
bmRzVG9BbGxvY2F0ZTsKKyAgICAgICAgICAgIG51bVJlc2VydmVkSXNsYW5kcyArPSBpc2xhbmRz
VG9SZXNlcnZlOworICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQobnVtQWxsb2NhdGVkSXNsYW5k
cyA8PSBudW1SZXNlcnZlZElzbGFuZHMpOworICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAg
ICAgIH0KKworICAgICAgICAvLyBPT1BTOiB0YWtlIGxvY2tob2xkZXIKKyAgICAgICAgdm9pZCBk
ZWFsbG9jYXRlSXNsYW5kcyhzaXplX3QgbnVtSXNsYW5kc1RvRnJlZSkKKyAgICAgICAgeworICAg
ICAgICAgICAgUkVMRUFTRV9BU1NFUlQobnVtSXNsYW5kc1RvRnJlZSA8PSBudW1BbGxvY2F0ZWRJ
c2xhbmRzKTsKKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKG51bUFsbG9jYXRlZElzbGFuZHMg
PD0gbnVtUmVzZXJ2ZWRJc2xhbmRzKTsgLy8gT09QUzogY2hlY2tDb25zaXN0ZW5jeQorICAgICAg
ICAgICAgbnVtQWxsb2NhdGVkSXNsYW5kcyAtPSBudW1Jc2xhbmRzVG9GcmVlOworICAgICAgICB9
CisgICAgICAgICovCisKKyAgICAgICAgLy8gT09QUzogbG9ja2hvbGRlci4KKyAgICAgICAgdm9p
ZCogYWxsb2NhdGVJc2xhbmQoKQorICAgICAgICB7CisgICAgICAgICAgICBhdXRvIGZpbmRSZXN1
bHQgPSBbJl0gKCkgLT4gdm9pZCogeworICAgICAgICAgICAgICAgIHNpemVfdCByZXN1bHRCaXQg
PSBpc2xhbmRCaXRzLmZpbmRDbGVhckJpdCgwKTsKKyAgICAgICAgICAgICAgICBpZiAocmVzdWx0
Qml0ID09IGlzbGFuZEJpdHMuc2l6ZSgpKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVs
bHB0cjsKKyAgICAgICAgICAgICAgICBpc2xhbmRCaXRzW3Jlc3VsdEJpdF0gPSB0cnVlOworICAg
ICAgICAgICAgICAgIHVpbnRwdHJfdCByZXN1bHQgPSBlbmQgLSAoKHJlc3VsdEJpdCArIDEpICog
aXNsYW5kU2l6ZUluQnl0ZXMpOyAKKyAgICAgICAgICAgICAgICByZXR1cm4gYml0d2lzZV9jYXN0
PHZvaWQqPihyZXN1bHQpOworICAgICAgICAgICAgfTsKKworICAgICAgICAgICAgaWYgKHZvaWQq
IHJlc3VsdCA9IGZpbmRSZXN1bHQoKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0Owor
CisgICAgICAgICAgICBpc2xhbmRCaXRzLnJlc2l6ZShpc2xhbmRCaXRzLnNpemUoKSArIGlzbGFu
ZHNQZXJQYWdlKCkpOworICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoaXNsYW5kQml0cy5zaXpl
KCkgPD0gbWF4SXNsYW5kc1BlclJlZ2lvbik7IAorCisgICAgICAgICAgICAvL2RhdGFMb2dMbigi
cmVnaW9uOiBbIiwgc3RhcnQsICIsICIsIGVuZCwgIikiKTsKKworICAgICAgICAgICAgdWludHB0
cl90IHBhZ2VCZWdpbiA9IGVuZCAtIChpc2xhbmRCaXRzLnNpemUoKSAqIGlzbGFuZFNpemVJbkJ5
dGVzKTsgLy8gW2lzbGFuZEJlZ2luLCBlbmQpCisgICAgICAgICAgICAvL2RhdGFMb2dMbigiY29t
bWl0dGluZzogIiwgcGFnZUJlZ2luKTsKKyAgICAgICAgICAgIG1fZml4ZWRBbGxvY2F0b3ItPm1f
cmVzZXJ2YXRpb24uY29tbWl0KGJpdHdpc2VfY2FzdDx2b2lkKj4ocGFnZUJlZ2luKSwgcGFnZVNp
emUoKSk7CisgICAgICAgICAgICB2b2lkKiByZXN1bHQgPSBmaW5kUmVzdWx0KCk7CisgICAgICAg
ICAgICBSRUxFQVNFX0FTU0VSVChyZXN1bHQpOworICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsK
KyAgICAgICAgfQorCisgICAgICAgIC8vIFtzdGFydCwgZW5kKQorICAgICAgICB1aW50cHRyX3Qg
c3RhcnQ7CisgICAgICAgIHVpbnRwdHJfdCBlbmQ7CisKKyAgICAgICAgc2l6ZV90IG51bUFsbG9j
YXRlZElzbGFuZHMgeyAwIH07IC8vIDw9IG51bVJlc2VydmVkSXNsYW5kcworICAgICAgICBGYXN0
Qml0VmVjdG9yIGlzbGFuZEJpdHM7CisgICAgICAgIFZlY3Rvcjx1aW50cHRyX3Q+IGp1bXBMb2Nh
dGlvbnNUb0lzbGFuZHM7IC8vIE9PUFM6IHVzZSByZWQgYmxhY2sgdHJlZSBhbmQgbWFrZSBpdCBm
YXN0IHRvIHJlbW92ZSBhbGwgZW50cmllcyBtYXRjaGluZy4KKyAgICB9OworI2VuZGlmCisKKyAg
ICB0ZW1wbGF0ZSA8dHlwZW5hbWUgRnVuY3Rpb24+CisgICAgdm9pZCBmb3JFYWNoQWxsb2NhdG9y
KEZ1bmN0aW9uIGZ1bmN0aW9uKQorICAgIHsKKyNpZiBDUFUoQVJNNjQpCisgICAgICAgIGZvciAo
UmVnaW9uQWxsb2NhdG9yJiBhbGxvY2F0b3IgOiBtX2FsbG9jYXRvcnMpIHsKKyAgICAgICAgICAg
IHVzaW5nIEZ1bmN0aW9uUmVzdWx0VHlwZSA9IGRlY2x0eXBlKGZ1bmN0aW9uKGFsbG9jYXRvcikp
OworICAgICAgICAgICAgaWYgY29uc3RleHByIChzdGQ6OmlzX3NhbWU8SXRlcmF0aW9uU3RhdHVz
LCBGdW5jdGlvblJlc3VsdFR5cGU+Ojp2YWx1ZSkgeworICAgICAgICAgICAgICAgIGlmIChmdW5j
dGlvbihhbGxvY2F0b3IpID09IEl0ZXJhdGlvblN0YXR1czo6RG9uZSkKKyAgICAgICAgICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIHN0YXRp
Y19hc3NlcnQoc3RkOjppc19zYW1lPHZvaWQsIEZ1bmN0aW9uUmVzdWx0VHlwZT46OnZhbHVlKTsK
KyAgICAgICAgICAgICAgICBmdW5jdGlvbihhbGxvY2F0b3IpOworICAgICAgICAgICAgfQorICAg
ICAgICB9CisjZWxzZQorICAgICAgICBmdW5jdGlvbihtX2FsbG9jYXRvcik7CisjZW5kaWYKKyAg
ICB9CisKKyAgICBMb2NrIG1fbG9jazsKICAgICBQYWdlUmVzZXJ2YXRpb24gbV9yZXNlcnZhdGlv
bjsKKyNpZiBDUFUoQVJNNjQpCisgICAgc3RkOjphcnJheTxSZWdpb25BbGxvY2F0b3IsIG51bWJl
ck9mUmVnaW9ucz4gbV9hbGxvY2F0b3JzOworI2Vsc2UKKyAgICBBbGxvY2F0b3IgbV9hbGxvY2F0
b3I7CisjZW5kaWYKIH07CiAKLUZpeGVkVk1Qb29sRXhlY3V0YWJsZUFsbG9jYXRvcjo6fkZpeGVk
Vk1Qb29sRXhlY3V0YWJsZUFsbG9jYXRvcigpCi17Ci0gICAgbV9yZXNlcnZhdGlvbi5kZWFsbG9j
YXRlKCk7Ci19Ci0KIC8vIEtlZXAgdGhpcyBwb2ludGVyIGluIGEgbXV0YWJsZSBnbG9iYWwgdmFy
aWFibGUgdG8gaGVscCBMZWFrcyBmaW5kIGl0LgogLy8gQnV0IHdlIGRvIG5vdCB1c2UgdGhpcyBw
b2ludGVyLgogc3RhdGljIEZpeGVkVk1Qb29sRXhlY3V0YWJsZUFsbG9jYXRvciogZ2xvYmFsRml4
ZWRWTVBvb2xFeGVjdXRhYmxlQWxsb2NhdG9yVG9Xb3JrQXJvdW5kTGVha3MgPSBudWxscHRyOwpA
QCAtNDE3LDcgKzc0MSw2IEBAIHZvaWQgRXhlY3V0YWJsZUFsbG9jYXRvcjo6aW5pdGlhbGl6ZVVu
ZGUKICAgICBSRUxFQVNFX0FTU0VSVCghZ19qc2NDb25maWcuZml4ZWRWTVBvb2xFeGVjdXRhYmxl
QWxsb2NhdG9yKTsKICAgICBnX2pzY0NvbmZpZy5maXhlZFZNUG9vbEV4ZWN1dGFibGVBbGxvY2F0
b3IgPSBuZXcgRml4ZWRWTVBvb2xFeGVjdXRhYmxlQWxsb2NhdG9yKCk7CiAgICAgZ2xvYmFsRml4
ZWRWTVBvb2xFeGVjdXRhYmxlQWxsb2NhdG9yVG9Xb3JrQXJvdW5kTGVha3MgPSBnX2pzY0NvbmZp
Zy5maXhlZFZNUG9vbEV4ZWN1dGFibGVBbGxvY2F0b3I7Ci0gICAgQ29kZVByb2ZpbGluZzo6bm90
aWZ5QWxsb2NhdG9yKGdfanNjQ29uZmlnLmZpeGVkVk1Qb29sRXhlY3V0YWJsZUFsbG9jYXRvcik7
CiB9CiAKIGJvb2wgRXhlY3V0YWJsZUFsbG9jYXRvcjo6aXNWYWxpZCgpIGNvbnN0CkBAIC00MjUs
NyArNzQ4LDcgQEAgYm9vbCBFeGVjdXRhYmxlQWxsb2NhdG9yOjppc1ZhbGlkKCkgY29ucwogICAg
IEZpeGVkVk1Qb29sRXhlY3V0YWJsZUFsbG9jYXRvciogYWxsb2NhdG9yID0gZ19qc2NDb25maWcu
Zml4ZWRWTVBvb2xFeGVjdXRhYmxlQWxsb2NhdG9yOwogICAgIGlmICghYWxsb2NhdG9yKQogICAg
ICAgICByZXR1cm4gQmFzZTo6aXNWYWxpZCgpOwotICAgIHJldHVybiAhIWFsbG9jYXRvci0+Ynl0
ZXNSZXNlcnZlZCgpOworICAgIHJldHVybiBhbGxvY2F0b3ItPmlzVmFsaWQoKTsKIH0KIAogYm9v
bCBFeGVjdXRhYmxlQWxsb2NhdG9yOjp1bmRlck1lbW9yeVByZXNzdXJlKCkKQEAgLTQ1NiwxMSAr
Nzc5LDExIEBAIGRvdWJsZSBFeGVjdXRhYmxlQWxsb2NhdG9yOjptZW1vcnlQcmVzc3UKICAgICBy
ZXR1cm4gcmVzdWx0OwogfQogCi1SZWZQdHI8RXhlY3V0YWJsZU1lbW9yeUhhbmRsZT4gRXhlY3V0
YWJsZUFsbG9jYXRvcjo6YWxsb2NhdGUoc2l6ZV90IHNpemVJbkJ5dGVzLCB2b2lkKiBvd25lclVJ
RCwgSklUQ29tcGlsYXRpb25FZmZvcnQgZWZmb3J0KQorUmVmUHRyPEV4ZWN1dGFibGVNZW1vcnlI
YW5kbGU+IEV4ZWN1dGFibGVBbGxvY2F0b3I6OmFsbG9jYXRlKHNpemVfdCBzaXplSW5CeXRlcywg
SklUQ29tcGlsYXRpb25FZmZvcnQgZWZmb3J0KQogewogICAgIEZpeGVkVk1Qb29sRXhlY3V0YWJs
ZUFsbG9jYXRvciogYWxsb2NhdG9yID0gZ19qc2NDb25maWcuZml4ZWRWTVBvb2xFeGVjdXRhYmxl
QWxsb2NhdG9yOwogICAgIGlmICghYWxsb2NhdG9yKQotICAgICAgICByZXR1cm4gQmFzZTo6YWxs
b2NhdGUoc2l6ZUluQnl0ZXMsIG93bmVyVUlELCBlZmZvcnQpOworICAgICAgICByZXR1cm4gQmFz
ZTo6YWxsb2NhdGUoc2l6ZUluQnl0ZXMsIGVmZm9ydCk7CiAgICAgaWYgKE9wdGlvbnM6OmxvZ0V4
ZWN1dGFibGVBbGxvY2F0aW9uKCkpIHsKICAgICAgICAgTWV0YUFsbG9jYXRvcjo6U3RhdGlzdGlj
cyBzdGF0cyA9IGFsbG9jYXRvci0+Y3VycmVudFN0YXRpc3RpY3MoKTsKICAgICAgICAgZGF0YUxv
ZygiQWxsb2NhdGluZyAiLCBzaXplSW5CeXRlcywgIiBieXRlcyBvZiBleGVjdXRhYmxlIG1lbW9y
eSB3aXRoICIsIHN0YXRzLmJ5dGVzQWxsb2NhdGVkLCAiIGJ5dGVzIGFsbG9jYXRlZCwgIiwgc3Rh
dHMuYnl0ZXNSZXNlcnZlZCwgIiBieXRlcyByZXNlcnZlZCwgYW5kICIsIHN0YXRzLmJ5dGVzQ29t
bWl0dGVkLCAiIGNvbW1pdHRlZC5cbiIpOwpAQCAtNDg3LDcgKzgxMCw3IEBAIFJlZlB0cjxFeGVj
dXRhYmxlTWVtb3J5SGFuZGxlPiBFeGVjdXRhYmwKICAgICAgICAgfQogICAgIH0KIAotICAgIFJl
ZlB0cjxFeGVjdXRhYmxlTWVtb3J5SGFuZGxlPiByZXN1bHQgPSBhbGxvY2F0b3ItPmFsbG9jYXRl
KHNpemVJbkJ5dGVzLCBvd25lclVJRCk7CisgICAgUmVmUHRyPEV4ZWN1dGFibGVNZW1vcnlIYW5k
bGU+IHJlc3VsdCA9IGFsbG9jYXRvci0+YWxsb2NhdGUoc2l6ZUluQnl0ZXMpOwogICAgIGlmICgh
cmVzdWx0KSB7CiAgICAgICAgIGlmIChlZmZvcnQgIT0gSklUQ29tcGlsYXRpb25DYW5GYWlsKSB7
CiAgICAgICAgICAgICBkYXRhTG9nKCJSYW4gb3V0IG9mIGV4ZWN1dGFibGUgbWVtb3J5IHdoaWxl
IGFsbG9jYXRpbmcgIiwgc2l6ZUluQnl0ZXMsICIgYnl0ZXMuXG4iKTsKQEAgLTUzOSw2ICs4NjIs
MjAgQEAgdm9pZCBFeGVjdXRhYmxlQWxsb2NhdG9yOjpkdW1wUHJvZmlsZSgpCiB9CiAjZW5kaWYK
IAorI2lmIENQVShBUk02NCkKK3ZvaWQqIEV4ZWN1dGFibGVBbGxvY2F0b3I6OmdldEp1bXBJc2xh
bmRUbyh2b2lkKiBmcm9tLCB2b2lkKiBvbGREZXN0aW5hdGlvbiwgdm9pZCogbmV3RGVzdGluYXRp
b24pCit7CisgICAgRml4ZWRWTVBvb2xFeGVjdXRhYmxlQWxsb2NhdG9yKiBhbGxvY2F0b3IgPSBn
X2pzY0NvbmZpZy5maXhlZFZNUG9vbEV4ZWN1dGFibGVBbGxvY2F0b3I7CisgICAgaWYgKCFhbGxv
Y2F0b3IpIHsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsgLy8gT09QUzog
aXMgdGhpcyBjb3JyZWN0PworICAgIH0KKyAgICAvL2ludHB0cl90IGRlbHRhID0gYml0d2lzZV9j
YXN0PGludHB0cl90PihuZXdEZXN0aW5hdGlvbikgLSBiaXR3aXNlX2Nhc3Q8aW50cHRyX3Q+KGZy
b20pOworICAgIC8vZGF0YUxvZ0xuKCJnZXRKdW1wSXNsYW5kVG8gZGVsdGE6ICIsIHN0YXRpY19j
YXN0PGRvdWJsZT4oZGVsdGEpLzEwMjQuMC8xMDI0LjAsICJNQiIpOworCisgICAgcmV0dXJuIGFs
bG9jYXRvci0+bWFrZUlzbGFuZChiaXR3aXNlX2Nhc3Q8dWludHB0cl90Pihmcm9tKSwgYml0d2lz
ZV9jYXN0PHVpbnRwdHJfdD4ob2xkRGVzdGluYXRpb24pLCBiaXR3aXNlX2Nhc3Q8dWludHB0cl90
PihuZXdEZXN0aW5hdGlvbikpOworfQorI2VuZGlmCisKIHZvaWQqIHN0YXJ0T2ZGaXhlZEV4ZWN1
dGFibGVNZW1vcnlQb29sSW1wbCgpCiB7CiAgICAgRml4ZWRWTVBvb2xFeGVjdXRhYmxlQWxsb2Nh
dG9yKiBhbGxvY2F0b3IgPSBnX2pzY0NvbmZpZy5maXhlZFZNUG9vbEV4ZWN1dGFibGVBbGxvY2F0
b3I7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0V4ZWN1dGFibGVBbGxvY2F0b3Iu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0V4ZWN1dGFibGVBbGxv
Y2F0b3IuaAkocmV2aXNpb24gMjU3ODY2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9F
eGVjdXRhYmxlQWxsb2NhdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTcxLDcgKzcxLDcgQEAgcHVi
bGljOgogCiAgICAgc3RhdGljIHZvaWQgZHVtcFByb2ZpbGUoKSB7IH0KIAotICAgIFJlZlB0cjxF
eGVjdXRhYmxlTWVtb3J5SGFuZGxlPiBhbGxvY2F0ZShzaXplX3QsIHZvaWQqLCBKSVRDb21waWxh
dGlvbkVmZm9ydCkgeyByZXR1cm4gbnVsbHB0cjsgfQorICAgIFJlZlB0cjxFeGVjdXRhYmxlTWVt
b3J5SGFuZGxlPiBhbGxvY2F0ZShzaXplX3QsIEpJVENvbXBpbGF0aW9uRWZmb3J0KSB7IHJldHVy
biBudWxscHRyOyB9CiAKICAgICBzdGF0aWMgdm9pZCBzZXRKSVRFbmFibGVkKGJvb2wpIHsgfTsK
ICAgICAKQEAgLTE3Niw3ICsxNzYsNyBAQCBwdWJsaWM6CiAgICAgCiAgICAgSlNfRVhQT1JUX1BS
SVZBVEUgc3RhdGljIHZvaWQgc2V0SklURW5hYmxlZChib29sKTsKIAotICAgIFJlZlB0cjxFeGVj
dXRhYmxlTWVtb3J5SGFuZGxlPiBhbGxvY2F0ZShzaXplX3Qgc2l6ZUluQnl0ZXMsIHZvaWQqIG93
bmVyVUlELCBKSVRDb21waWxhdGlvbkVmZm9ydCk7CisgICAgUmVmUHRyPEV4ZWN1dGFibGVNZW1v
cnlIYW5kbGU+IGFsbG9jYXRlKHNpemVfdCBzaXplSW5CeXRlcywgSklUQ29tcGlsYXRpb25FZmZv
cnQpOwogCiAgICAgYm9vbCBpc1ZhbGlkRXhlY3V0YWJsZU1lbW9yeShjb25zdCBBYnN0cmFjdExv
Y2tlciYsIHZvaWQqIGFkZHJlc3MpOwogCkBAIC0xODQsNiArMTg0LDEwIEBAIHB1YmxpYzoKIAog
ICAgIExvY2smIGdldExvY2soKSBjb25zdDsKIAorI2lmIENQVShBUk02NCkKKyAgICB2b2lkKiBn
ZXRKdW1wSXNsYW5kVG8odm9pZCogZnJvbSwgdm9pZCogb2xkRGVzdGluYXRpb24sIHZvaWQqIG5l
d0Rlc3RpbmF0aW9uKTsKKyNlbmRpZgorCiBwcml2YXRlOgogICAgIEV4ZWN1dGFibGVBbGxvY2F0
b3IoKSA9IGRlZmF1bHQ7CiAgICAgfkV4ZWN1dGFibGVBbGxvY2F0b3IoKSA9IGRlZmF1bHQ7Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db21tb25TbG93UGF0aHMuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbW1vblNsb3dQYXRo
cy5jcHAJKHJldmlzaW9uIDI1Nzg2NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0NvbW1vblNsb3dQYXRocy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMyLDcgKzMyLDYgQEAKICNp
bmNsdWRlICJCeXRlY29kZVN0cnVjdHMuaCIKICNpbmNsdWRlICJDYWxsRnJhbWUuaCIKICNpbmNs
dWRlICJDbG9uZWRBcmd1bWVudHMuaCIKLSNpbmNsdWRlICJDb2RlUHJvZmlsaW5nLmgiCiAjaW5j
bHVkZSAiRGVmaW5lUHJvcGVydHlBdHRyaWJ1dGVzLmgiCiAjaW5jbHVkZSAiRGlyZWN0QXJndW1l
bnRzLmgiCiAjaW5jbHVkZSAiRXJyb3IuaCIKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTTW9kdWxlTG9hZGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9KU01vZHVsZUxvYWRlci5jcHAJKHJldmlzaW9uIDI1Nzg2NikKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTW9kdWxlTG9hZGVyLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMjksNyArMjksNiBAQAogCiAjaW5jbHVkZSAiQnVpbHRpbk5hbWVzLmgiCiAjaW5j
bHVkZSAiQ2F0Y2hTY29wZS5oIgotI2luY2x1ZGUgIkNvZGVQcm9maWxpbmcuaCIKICNpbmNsdWRl
ICJFcnJvci5oIgogI2luY2x1ZGUgIkV4Y2VwdGlvbi5oIgogI2luY2x1ZGUgIkpTQ0lubGluZXMu
aCIKQEAgLTQwMCw4ICszOTksNiBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG1vZHVs
ZUxvYWRlCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoSlNXZWJBc3NlbWJseTo6aW5z
dGFudGlhdGUoZ2xvYmFsT2JqZWN0LCBwcm9taXNlLCBtb2R1bGVLZXksIGpzU291cmNlQ29kZSkp
OwogI2VuZGlmCiAKLSAgICBDb2RlUHJvZmlsaW5nIHByb2ZpbGUoc291cmNlQ29kZSk7Ci0KICAg
ICBQYXJzZXJFcnJvciBlcnJvcjsKICAgICBzdGQ6OnVuaXF1ZV9wdHI8TW9kdWxlUHJvZ3JhbU5v
ZGU+IG1vZHVsZVByb2dyYW1Ob2RlID0gcGFyc2U8TW9kdWxlUHJvZ3JhbU5vZGU+KAogICAgICAg
ICB2bSwgc291cmNlQ29kZSwgSWRlbnRpZmllcigpLCBKU1BhcnNlckJ1aWx0aW5Nb2RlOjpOb3RC
dWlsdGluLApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9uc0xpc3Qu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25zTGlz
dC5oCShyZXZpc2lvbiAyNTc4NjYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9P
cHRpb25zTGlzdC5oCSh3b3JraW5nIGNvcHkpCkBAIC01MDAsNiArNTAwLDcgQEAgY29uc3RleHBy
IGJvb2wgZW5hYmxlV2ViQXNzZW1ibHlTdHJlYW1pbgogICAgIHYoQm9vbCwgZm9yY2VPU1JFeGl0
VG9MTEludCwgZmFsc2UsIE5vcm1hbCwgIklmIHRydWUsIHdlIGFsd2F5cyBleGl0IHRvIHRoZSBM
TEludC4gSWYgZmFsc2UsIHdlIGV4aXQgdG8gd2hhdGV2ZXIgaXMgbW9zdCBjb252ZW5pZW50LiIp
IFwKICAgICB2KFVuc2lnbmVkLCBnZXRCeVZhbElDTWF4TnVtYmVyT2ZJZGVudGlmaWVycywgNCwg
Tm9ybWFsLCAiTnVtYmVyIG9mIGlkZW50aWZpZXJzIHdlIHNlZSBpbiB0aGUgTExJbnQgdGhhdCBj
b3VsZCBjYXVzZSB1cyB0byBiYWlsIG9uIGdlbmVyYXRpbmcgYW4gSUMgZm9yIGdldF9ieV92YWwu
IikgXAogICAgIHYoQm9vbCwgdXNlQ2xhc3NGaWVsZHMsIGZhbHNlLCBOb3JtYWwsICJJZiB0cnVl
LCB0aGUgcGFyc2VyIHdpbGwgdW5kZXJzdGFuZCBkYXRhIGZpZWxkcyBpbnNpZGUgY2xhc3Nlcy4i
KSBcCisgICAgdihCb29sLCB1c2VSYW5kb21pemluZ0V4ZWN1dGFibGVJc2xhbmRBbGxvY2F0aW9u
LCBmYWxzZSwgTm9ybWFsLCAiRm9yIHRoZSBhcm02NCBFeGVjdXRhYmxlQWxsb2NhdG9yLCBpZiB0
cnVlLCBzZWxlY3Qgd2hpY2ggcmVnaW9uIHRvIHVzZSByYW5kb21seS4gVGhpcyBpcyB1c2VmdWwg
Zm9yIHRlc3RpbmcgdGhhdCBqdW1wIGlzbGFuZHMgd29yay4iKSBcCiAKIGVudW0gT3B0aW9uRXF1
aXZhbGVuY2UgewogICAgIFNhbWVPcHRpb24sCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
dG9vbHMvQ29kZVByb2ZpbGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS90b29scy9Db2RlUHJvZmlsZS5jcHAJKHJldmlzaW9uIDI1Nzg2NikKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS90b29scy9Db2RlUHJvZmlsZS5jcHAJKG5vbmV4aXN0ZW50KQpAQCAtMSwxNzIg
KzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMiBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0g
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
LSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0g
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotCi0j
aW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiQ29kZVByb2ZpbGUuaCIKLQotI2luY2x1ZGUg
IkNvZGVCbG9jay5oIgotI2luY2x1ZGUgIkNvZGVQcm9maWxpbmcuaCIKLSNpbmNsdWRlICJMaW5r
QnVmZmVyLmgiCi0jaW5jbHVkZSAiUHJvZmlsZVRyZWVOb2RlLmgiCi0jaW5jbHVkZSA8d3RmL1N0
YWNrVHJhY2UuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KLQotbmFtZXNwYWNl
IEpTQyB7Ci0KLS8vIE1hcCBmcm9tIENvZGVUeXBlIGVudW0gdG8gYSBjb3JyZXNwb25kaW5nIG5h
bWUuCi1zdGF0aWMgY29uc3QgY2hhciogY29uc3Qgc19jb2RlVHlwZU5hbWVzW0NvZGVQcm9maWxl
OjpOdW1iZXJPZkNvZGVUeXBlc10gPSB7Ci0gICAgIltbRW5naW5lQ29kZV1dIiwKLSAgICAiW1tH
bG9iYWxUaHVua11dIiwKLSAgICAiW1tSZWdFeHBDb2RlXV0iLAotICAgICJbW0RGR0pJVF1dIiwK
LSAgICAiW1tCYXNlbGluZU9ubHldXSIsCi0gICAgIltbQmFzZWxpbmVQcm9maWxlXV0iLAotICAg
ICJbW0Jhc2VsaW5lT1NSXV0iLAotICAgICJbW0VuZ2luZUZyYW1lXV0iCi19OwotCi0vLyBIZWxw
ZXIgZnVuY3Rpb24sIHRydW5jYXRlIHRyYWNlcyB0byBwcnVuZSB0aGUgb3V0cHV0ICYgbWFrZSB2
ZXJ5IHZlcmJvc2UgbW9kZSBhIGxpdHRsZSBtb3JlIHJlYWRhYmxlLgotc3RhdGljIGJvb2wgdHJ1
bmNhdGVUcmFjZShjb25zdCBjaGFyKiBzeW1ib2xOYW1lKQotewotICAgIHJldHVybiAhc3RyY21w
KHN5bWJvbE5hbWUsICJKU0M6OkJ5dGVjb2RlR2VuZXJhdG9yOjpnZW5lcmF0ZSgpIikKLSAgICAg
ICAgfHwgIXN0cmNtcChzeW1ib2xOYW1lLCAiSlNDOjpQYXJzZXI8SlNDOjpMZXhlcjx1bnNpZ25l
ZCBjaGFyPj46OnBhcnNlSW5uZXIoKSIpCi0gICAgICAgIHx8ICFzdHJjbXAoc3ltYm9sTmFtZSwg
IldURjo6ZmFzdE1hbGxvYyh1bnNpZ25lZCBsb25nKSIpCi0gICAgICAgIHx8ICFzdHJjbXAoc3lt
Ym9sTmFtZSwgIldURjo6Y2FsY3VsYXRlVVRDT2Zmc2V0KCkiKQotICAgICAgICB8fCAhc3RyY21w
KHN5bWJvbE5hbWUsICJKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OnBhcnNlQ29kZUJsb2NrKCki
KTsKLSAgICAgICAgCi19Ci0KLS8vIEVhY2ggdHJhY2UgY29uc2lzdHMgb2YgYSBzZXF1ZW5jZSBv
ZiB6ZXJvIG9yIG1vcmUgJ0VuZ2luZUZyYW1lJyBlbnRyaWVzLAotLy8gZm9sbG93ZWQgYnkgYSBz
YW1wbGUgaW4gSklUIGNvZGUsIG9yIG9uZSBvciBtb3JlICdFbmdpbmVGcmFtZScgZW50cmllcywK
LS8vIGZvbGxvd2VkIGJ5IGEgJ0VuZ2luZUNvZGUnIHRlcm1pbmF0b3IuCi12b2lkIENvZGVQcm9m
aWxlOjpzYW1wbGUodm9pZCogcGMsIHZvaWQqKiBmcmFtZVBvaW50ZXIpCi17Ci0gICAgLy8gRGlz
YWxsb3cgdHJhY2VzIGNvbnRhaW5pbmcgb25seSBhICdFbmdpbmVDb2RlJyB0ZXJtaW5hdG9yLCB3
aXRob3V0IGFueSAnRW5naW5lRnJhbWUnIGZyYW1lcy4KLSAgICBpZiAoIWZyYW1lUG9pbnRlcikK
LSAgICAgICAgcmV0dXJuOwotCi0gICAgd2hpbGUgKGZyYW1lUG9pbnRlcikgewotICAgICAgICBD
b2RlVHlwZSB0eXBlOwotCi0jaWYgRU5BQkxFKEpJVCkKLSAgICAgICAgLy8gRGV0ZXJtaW5lIGlm
IHRoaXMgc2FtcGxlIGZlbGwgaW4gSklUIGNvZGUsIGFuZCBpZiBzbywgZnJvbSB3aGljaCBKSVQg
JiB3aHkuCi0gICAgICAgIHZvaWQqIG93bmVyVUlEID0gQ29kZVByb2ZpbGluZzo6Z2V0T3duZXJV
SURGb3JQQyhwYyk7Ci0KLSAgICAgICAgaWYgKCFvd25lclVJRCkKLSAgICAgICAgICAgIHR5cGUg
PSBFbmdpbmVGcmFtZTsKLSAgICAgICAgZWxzZSBpZiAob3duZXJVSUQgPT0gR0xPQkFMX1RIVU5L
X0lEKQotICAgICAgICAgICAgdHlwZSA9IEdsb2JhbFRodW5rOwotICAgICAgICBlbHNlIGlmIChv
d25lclVJRCA9PSBSRUdFWFBfQ09ERV9JRCkKLSAgICAgICAgICAgIHR5cGUgPSBSZWdFeHBDb2Rl
OwotICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgIENvZGVCbG9jayogY29kZUJsb2NrID0gc3Rh
dGljX2Nhc3Q8Q29kZUJsb2NrKj4ob3duZXJVSUQpOwotICAgICAgICAgICAgaWYgKGNvZGVCbG9j
ay0+aml0VHlwZSgpID09IEpJVFR5cGU6OkRGR0pJVCkKLSAgICAgICAgICAgICAgICB0eXBlID0g
REZHSklUOwotICAgICAgICAgICAgZWxzZSBpZiAoIWNhbkNvbXBpbGUoY29kZUJsb2NrLT5jYXBh
YmlsaXR5TGV2ZWxTdGF0ZSgpKSkKLSAgICAgICAgICAgICAgICB0eXBlID0gQmFzZWxpbmVPbmx5
OwotICAgICAgICAgICAgZWxzZSBpZiAoY29kZUJsb2NrLT5yZXBsYWNlbWVudCgpKQotICAgICAg
ICAgICAgICAgIHR5cGUgPSBCYXNlbGluZU9TUjsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAg
ICAgICAgICB0eXBlID0gQmFzZWxpbmVQcm9maWxlOwotICAgICAgICB9Ci0jZWxzZQotICAgICAg
ICB0eXBlID0gRW5naW5lRnJhbWU7Ci0jZW5kaWYKLQotICAgICAgICAvLyBBIHNhbXBsZSBpbiBK
SVQgY29kZSB0ZXJtaW5hdGVzIHRoZSB0cmFjZS4KLSAgICAgICAgbV9zYW1wbGVzLmFwcGVuZChD
b2RlUmVjb3JkKHBjLCB0eXBlKSk7Ci0gICAgICAgIGlmICh0eXBlICE9IEVuZ2luZUZyYW1lKQot
ICAgICAgICAgICAgcmV0dXJuOwotCi0jaWYgT1MoREFSV0lOKSAmJiBDUFUoWDg2XzY0KQotICAg
ICAgICAvLyBXYWxrIHVwIHRoZSBzdGFjay4KLSAgICAgICAgcGMgPSBmcmFtZVBvaW50ZXJbMV07
Ci0gICAgICAgIGZyYW1lUG9pbnRlciA9IHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCoqPigqZnJhbWVQ
b2ludGVyKTsKLSNlbGlmIE9TKExJTlVYKSAmJiBDUFUoWDg2KQotICAgICAgICAvLyBEb24ndCB1
bndpbmQgdGhlIHN0YWNrIGFzIHNvbWUgZGVwZW5kZW50IHRoaXJkIHBhcnR5IGxpYnJhcmllcwot
ICAgICAgICAvLyBtYXkgYmUgY29tcGlsZWQgd2l0aCAtZm9taXQtZnJhbWUtcG9pbnRlci4KLSAg
ICAgICAgZnJhbWVQb2ludGVyID0gMDsKLSNlbHNlCi0gICAgICAgIC8vIFRoaXMgcGxhdGZvcm0g
aXMgbm90IHlldCBzdXBwb3J0ZWQhCi0gICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVE
KCk7Ci0jZW5kaWYKLSAgICB9Ci0KLSAgICAvLyBJZiB3ZSBnZXQgaGVyZSwgd2Ugd2Fsa2VkIHRo
ZSBlbnRpcmUgc3RhY2sgd2l0aG91dCBmaW5kaW5nIGFueSBmcmFtZXMgb2YgSklUIGNvZGUuCi0g
ICAgbV9zYW1wbGVzLmFwcGVuZChDb2RlUmVjb3JkKDAsIEVuZ2luZUNvZGUpKTsKLX0KLQotdm9p
ZCBDb2RlUHJvZmlsZTo6cmVwb3J0KCkKLXsKLSAgICBkYXRhTG9nRigiPENvZGVQcm9maWxpbmcg
JXM6JWQ+XG4iLCBtX2ZpbGUuZGF0YSgpLCBtX2xpbmVOdW1iZXIpOwotCi0gICAgLy8gSG93IG1h
bnkgZnJhbWVzIG9mIEMtY29kZSB0byBwcmludCAtIDAsIGlmIG5vdCB2ZXJib3NlLCAxIGlmIHZl
cmJvc2UsIHVwIHRvIDEwMjQgaWYgdmVyeSB2ZXJib3NlLgotICAgIHVuc2lnbmVkIHJlY3Vyc2lv
bkxpbWl0ID0gQ29kZVByb2ZpbGluZzo6YmVWZXJ5VmVyYm9zZSgpID8gMTAyNCA6IENvZGVQcm9m
aWxpbmc6OmJlVmVyYm9zZSgpOwotCi0gICAgUHJvZmlsZVRyZWVOb2RlIHByb2ZpbGU7Ci0KLSAg
ICAvLyBXYWxrIHRocm91Z2ggdGhlIHNhbXBsZSBidWZmZXIuCi0gICAgc2l6ZV90IHRyYWNlID0g
MDsKLSAgICB3aGlsZSAodHJhY2UgPCBtX3NhbXBsZXMuc2l6ZSgpKSB7Ci0KLSAgICAgICAgLy8g
QWxsIHRyYWNlcyBhcmUgemVybyBvciBtb3JlICdFbmdpbmVGcmFtZSdzLCBmb2xsb3dlZCBieSBh
IG5vbi0nRW5naW5lRnJhbWUnLgotICAgICAgICAvLyBTY2FuIHRvIGZpbmQgdGhlIGxhc3Qgc2Ft
cGxlIGluIHRoZSB0cmFjZS4KLSAgICAgICAgc2l6ZV90IGxhc3RJblRyYWNlID0gdHJhY2U7Ci0g
ICAgICAgIHdoaWxlIChtX3NhbXBsZXNbbGFzdEluVHJhY2VdLnR5cGUgPT0gRW5naW5lRnJhbWUp
Ci0gICAgICAgICAgICArK2xhc3RJblRyYWNlOwotCi0gICAgICAgIC8vIFdlIHVzZSB0aGUgbGFz
dCBzYW1wbGUgdHlwZSB0byBsb29rIHVwIGEgbmFtZSAodXNlZCBhcyBhIGJ1Y2tldCBpbiB0aGUg
cHJvZmlsZXIpLgotICAgICAgICBQcm9maWxlVHJlZU5vZGUqIGNhbGxiYWNrcyA9IHByb2ZpbGUu
c2FtcGxlQ2hpbGQoc19jb2RlVHlwZU5hbWVzW21fc2FtcGxlc1tsYXN0SW5UcmFjZV0udHlwZV0p
OwotCi0gICAgICAgIC8vIElmIHRoZXJlIGFyZSBhbnkgc2FtcGxlcyBpbiBDLWNvZGUsIGFkZCB1
cCB0byByZWN1cnNpb25MaW1pdCBvZiB0aGVtIGludG8gdGhlIHByb2ZpbGUgdHJlZS4KLSAgICAg
ICAgc2l6ZV90IGxhc3RFbmdpbmVGcmFtZSA9IGxhc3RJblRyYWNlOwotICAgICAgICBmb3IgKHVu
c2lnbmVkIGNvdW50ID0gMDsgbGFzdEVuZ2luZUZyYW1lID4gdHJhY2UgJiYgY291bnQgPCByZWN1
cnNpb25MaW1pdDsgKytjb3VudCkgewotICAgICAgICAgICAgLS1sYXN0RW5naW5lRnJhbWU7Ci0g
ICAgICAgICAgICBBU1NFUlQobV9zYW1wbGVzW2xhc3RFbmdpbmVGcmFtZV0udHlwZSA9PSBFbmdp
bmVGcmFtZSk7Ci0gICAgICAgICAgICBjb25zdCBjaGFyKiBuYW1lID0gIjx1bmtub3duPiI7Ci0g
ICAgICAgICAgICBhdXRvIGRlbWFuZ2xlZCA9IFN0YWNrVHJhY2U6OmRlbWFuZ2xlKG1fc2FtcGxl
c1tsYXN0RW5naW5lRnJhbWVdLnBjKTsKLSAgICAgICAgICAgIGlmIChkZW1hbmdsZWQpCi0gICAg
ICAgICAgICAgICAgbmFtZSA9IGRlbWFuZ2xlZC0+ZGVtYW5nbGVkTmFtZSgpID8gZGVtYW5nbGVk
LT5kZW1hbmdsZWROYW1lKCkgOiBkZW1hbmdsZWQtPm1hbmdsZWROYW1lKCk7Ci0gICAgICAgICAg
ICBjYWxsYmFja3MgPSBjYWxsYmFja3MtPnNhbXBsZUNoaWxkKG5hbWUpOwotICAgICAgICAgICAg
aWYgKHRydW5jYXRlVHJhY2UobmFtZSkpCi0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
IH0KLQotICAgICAgICAvLyBNb3ZlIG9uIHRvIHRoZSBuZXh0IHRyYWNlLgotICAgICAgICB0cmFj
ZSA9IGxhc3RJblRyYWNlICsgMTsKLSAgICAgICAgQVNTRVJUKHRyYWNlIDw9IG1fc2FtcGxlcy5z
aXplKCkpOwotICAgIH0KLQotICAgIC8vIE91dHB1dCB0aGUgcHJvZmlsZSB0cmVlLgotICAgIGRh
dGFMb2dGKCJUb3RhbCBzYW1wbGVzOiAlbGxkXG4iLCBzdGF0aWNfY2FzdDxsb25nIGxvbmc+KHBy
b2ZpbGUuY2hpbGRDb3VudCgpKSk7Ci0gICAgcHJvZmlsZS5kdW1wKCk7Ci0gICAgCi0gICAgZm9y
IChzaXplX3QgaSA9IDAgOyBpIDwgbV9jaGlsZHJlbi5zaXplKCk7ICsraSkKLSAgICAgICAgbV9j
aGlsZHJlbltpXS0+cmVwb3J0KCk7Ci0KLSAgICBkYXRhTG9nRigiPC9Db2RlUHJvZmlsaW5nICVz
OiVkPlxuIiwgbV9maWxlLmRhdGEoKSwgbV9saW5lTnVtYmVyKTsKLX0KLQotfQpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL3Rvb2xzL0NvZGVQcm9maWxlLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL3Rvb2xzL0NvZGVQcm9maWxlLmgJKHJldmlzaW9uIDI1Nzg2NikK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90b29scy9Db2RlUHJvZmlsZS5oCShub25leGlzdGVu
dCkKQEAgLTEsODkgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMiBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAq
IGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICog
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LiAKLSAqLwotCi0jcHJhZ21hIG9uY2UKLQotI2luY2x1ZGUgIlNvdXJjZUNvZGUuaCIKLSNpbmNs
dWRlICJUaWVyZWRNTWFwQXJyYXkuaCIKLSNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+Ci0K
LW5hbWVzcGFjZSBKU0MgewotCi1jbGFzcyBDb2RlUHJvZmlsZSB7Ci0gICAgV1RGX01BS0VfRkFT
VF9BTExPQ0FURUQ7Ci1wdWJsaWM6Ci0gICAgQ29kZVByb2ZpbGUoY29uc3QgU291cmNlQ29kZSYg
c291cmNlLCBDb2RlUHJvZmlsZSogcGFyZW50KQotICAgICAgICA6IG1fZmlsZShTdHJpbmcoc291
cmNlLnByb3ZpZGVyKCktPnVybCgpKS51dGY4KCkpCi0gICAgICAgICwgbV9saW5lTnVtYmVyKHNv
dXJjZS5maXJzdExpbmUoKS5vbmVCYXNlZEludCgpKQotICAgICAgICAsIG1fcGFyZW50KHBhcmVu
dCkKLSAgICB7Ci0gICAgICAgIGlmIChwYXJlbnQpCi0gICAgICAgICAgICBwYXJlbnQtPmFkZENo
aWxkKHN0ZDo6dW5pcXVlX3B0cjxDb2RlUHJvZmlsZT4odGhpcykpOwotICAgIH0KLQotICAgIHZv
aWQgc2FtcGxlKHZvaWQqIHBjLCB2b2lkKiogZnJhbWVQb2ludGVyKTsKLSAgICB2b2lkIHJlcG9y
dCgpOwotCi0gICAgQ29kZVByb2ZpbGUqIHBhcmVudCgpCi0gICAgewotICAgICAgICByZXR1cm4g
bV9wYXJlbnQ7Ci0gICAgfQotICAgIAotICAgIHZvaWQgYWRkQ2hpbGQoc3RkOjp1bmlxdWVfcHRy
PENvZGVQcm9maWxlPiBjaGlsZCkKLSAgICB7Ci0gICAgICAgIG1fY2hpbGRyZW4uYXBwZW5kKFdU
Rk1vdmUoY2hpbGQpKTsKLSAgICB9Ci0KLSAgICBlbnVtIENvZGVUeXBlIHsKLSAgICAgICAgRW5n
aW5lQ29kZSwKLSAgICAgICAgR2xvYmFsVGh1bmssCi0gICAgICAgIFJlZ0V4cENvZGUsCi0gICAg
ICAgIERGR0pJVCwKLSAgICAgICAgQmFzZWxpbmVPbmx5LAotICAgICAgICBCYXNlbGluZVByb2Zp
bGUsCi0gICAgICAgIEJhc2VsaW5lT1NSLAotICAgICAgICBFbmdpbmVGcmFtZSwKLSAgICAgICAg
TnVtYmVyT2ZDb2RlVHlwZXMKLSAgICB9OwotCi1wcml2YXRlOgotICAgIHN0cnVjdCBDb2RlUmVj
b3JkIHsKLSAgICAgICAgQ29kZVJlY29yZCh2b2lkKiBwYywgQ29kZVR5cGUgdHlwZSkKLSAgICAg
ICAgICAgIDogcGMocGMpCi0gICAgICAgICAgICAsIHR5cGUodHlwZSkKLSAgICAgICAgewotICAg
ICAgICB9Ci0gICAgICAgIHZvaWQqIHBjOwotICAgICAgICBDb2RlVHlwZSB0eXBlOwotICAgIH07
Ci0KLSAgICBDU3RyaW5nIG1fZmlsZTsKLSAgICB1bnNpZ25lZCBtX2xpbmVOdW1iZXI7Ci0gICAg
Q29kZVByb2ZpbGUqIG1fcGFyZW50OwotICAgIFZlY3RvcjxzdGQ6OnVuaXF1ZV9wdHI8Q29kZVBy
b2ZpbGU+PiBtX2NoaWxkcmVuOwotICAgIFRpZXJlZE1NYXBBcnJheTxDb2RlUmVjb3JkPiBtX3Nh
bXBsZXM7Ci19OwotCi19IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS90b29scy9Db2RlUHJvZmlsaW5nLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvdG9vbHMvQ29kZVByb2ZpbGluZy5jcHAJKHJldmlzaW9uIDI1Nzg2NikKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS90b29scy9Db2RlUHJvZmlsaW5nLmNwcAkobm9uZXhpc3RlbnQp
CkBAIC0xLDE2OSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEyLTIwMTggQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
Ci0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0g
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUK
LSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4gCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIkNvZGVQcm9maWxp
bmcuaCIKLQotI2luY2x1ZGUgIkNvZGVQcm9maWxlLmgiCi0jaW5jbHVkZSAiTWFjaGluZUNvbnRl
eHQuaCIKLSNpbmNsdWRlIDx3dGYvTWV0YUFsbG9jYXRvci5oPgotCi0jaWYgSEFWRShTSUdOQUxf
SCkKLSNpbmNsdWRlIDxzaWduYWwuaD4KLSNlbmRpZgotCi0jaWYgSEFWRShNQUNISU5FX0NPTlRF
WFQpCi0jaW5jbHVkZSA8c3lzL3RpbWUuaD4KLSNlbmRpZgotCi1uYW1lc3BhY2UgSlNDIHsKLQot
dm9sYXRpbGUgQ29kZVByb2ZpbGUqIENvZGVQcm9maWxpbmc6OnNfcHJvZmlsZVN0YWNrID0gMDsK
LUNvZGVQcm9maWxpbmc6Ok1vZGUgQ29kZVByb2ZpbGluZzo6c19tb2RlID0gQ29kZVByb2ZpbGlu
Zzo6RGlzYWJsZWQ7Ci1XVEY6Ok1ldGFBbGxvY2F0b3JUcmFja2VyKiBDb2RlUHJvZmlsaW5nOjpz
X3RyYWNrZXIgPSAwOwotCi1JR05PUkVfV0FSTklOR1NfQkVHSU4oIm1pc3Npbmctbm9yZXR1cm4i
KQotCi0jaWYgSEFWRShNQUNISU5FX0NPTlRFWFQpCi0vLyBIZWxwZXIgZnVuY3Rpb24gdG8gc3Rh
cnQgJiBzdG9wIHRoZSB0aW1lci4KLS8vIFByZXNlbnRseSB3ZSdyZSB1c2luZyB0aGUgd2FsbC1j
bG9jayB0aW1lciwgc2luY2UgdGhpcyBzZWVtcyB0byBnaXZlIHRoZSBiZXN0IHJlc3VsdHMuCi1z
dGF0aWMgdm9pZCBzZXRQcm9maWxlVGltZXIodW5zaWduZWQgdXNlYykKLXsKLSAgICBpdGltZXJ2
YWwgdGltZXI7Ci0gICAgdGltZXIuaXRfdmFsdWUudHZfc2VjID0gMDsKLSAgICB0aW1lci5pdF92
YWx1ZS50dl91c2VjID0gdXNlYzsKLSAgICB0aW1lci5pdF9pbnRlcnZhbC50dl9zZWMgPSAwOwot
ICAgIHRpbWVyLml0X2ludGVydmFsLnR2X3VzZWMgPSB1c2VjOwotICAgIHNldGl0aW1lcihJVElN
RVJfUkVBTCwgJnRpbWVyLCAwKTsKLX0KLSNlbmRpZgotCi1JR05PUkVfV0FSTklOR1NfRU5ECi0K
LSNpZiBIQVZFKE1BQ0hJTkVfQ09OVEVYVCkKLXN0YXRpYyB2b2lkIHByb2ZpbGluZ1RpbWVyKGlu
dCwgc2lnaW5mb190Kiwgdm9pZCogdWFwKQotewotICAgIFBsYXRmb3JtUmVnaXN0ZXJzJiBwbGF0
Zm9ybVJlZ2lzdGVycyA9IFdURjo6cmVnaXN0ZXJzRnJvbVVDb250ZXh0KHN0YXRpY19jYXN0PHVj
b250ZXh0X3QqPih1YXApKTsKLSAgICBpZiAoYXV0byBpbnN0cnVjdGlvblBvaW50ZXIgPSBNYWNo
aW5lQ29udGV4dDo6aW5zdHJ1Y3Rpb25Qb2ludGVyKHBsYXRmb3JtUmVnaXN0ZXJzKSkgewotICAg
ICAgICBDb2RlUHJvZmlsaW5nOjpzYW1wbGUoCi0gICAgICAgICAgICBpbnN0cnVjdGlvblBvaW50
ZXItPnVudGFnZ2VkRXhlY3V0YWJsZUFkZHJlc3MoKSwKLSAgICAgICAgICAgIHJlaW50ZXJwcmV0
X2Nhc3Q8dm9pZCoqPihNYWNoaW5lQ29udGV4dDo6ZnJhbWVQb2ludGVyKHBsYXRmb3JtUmVnaXN0
ZXJzKSkpOwotICAgIH0KLX0KLSNlbmRpZgotCi0vLyBDYWxsYmFjayB0cmlnZ2VyZWQgd2hlbiB0
aGUgdGltZXIgaXMgZmlyZWQuCi12b2lkIENvZGVQcm9maWxpbmc6OnNhbXBsZSh2b2lkKiBwYywg
dm9pZCoqIGZyYW1lUG9pbnRlcikKLXsKLSAgICBDb2RlUHJvZmlsZSogcHJvZmlsZVN0YWNrID0g
Y29uc3RfY2FzdDxDb2RlUHJvZmlsZSo+KHNfcHJvZmlsZVN0YWNrKTsKLSAgICBpZiAocHJvZmls
ZVN0YWNrKQotICAgICAgICBwcm9maWxlU3RhY2stPnNhbXBsZShwYywgZnJhbWVQb2ludGVyKTsK
LX0KLQotdm9pZCBDb2RlUHJvZmlsaW5nOjpub3RpZnlBbGxvY2F0b3IoV1RGOjpNZXRhQWxsb2Nh
dG9yKiBhbGxvY2F0b3IpCi17Ci0gICAgLy8gQ2hlY2sgZm9yIEpTQ19DT0RFX1BST0ZJTElORy4K
LSAgICBjb25zdCBjaGFyKiBjb2RlUHJvZmlsaW5nTW9kZSA9IGdldGVudigiSlNDX0NPREVfUFJP
RklMSU5HIik7Ci0gICAgaWYgKCFjb2RlUHJvZmlsaW5nTW9kZSkKLSAgICAgICAgcmV0dXJuOwot
Ci0gICAgLy8gQ2hlY2sgZm9yIGEgdmFsaWQgbW9kZSwgY3VycmVudGx5ICIxIiwgIjIiLCBvciAi
MyIuCi0gICAgaWYgKCFjb2RlUHJvZmlsaW5nTW9kZVswXSB8fCBjb2RlUHJvZmlsaW5nTW9kZVsx
XSkKLSAgICAgICAgcmV0dXJuOwotICAgIHN3aXRjaCAoKmNvZGVQcm9maWxpbmdNb2RlKSB7Ci0g
ICAgY2FzZSAnMSc6Ci0gICAgICAgIHNfbW9kZSA9IEVuYWJsZWQ7Ci0gICAgICAgIGJyZWFrOwot
ICAgIGNhc2UgJzInOgotICAgICAgICBzX21vZGUgPSBWZXJib3NlOwotICAgICAgICBicmVhazsK
LSAgICBjYXNlICczJzoKLSAgICAgICAgc19tb2RlID0gVmVyeVZlcmJvc2U7Ci0gICAgICAgIGJy
ZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBBU1NFUlQo
ZW5hYmxlZCgpKTsKLSAgICBBU1NFUlQoIXNfdHJhY2tlcik7Ci0gICAgc190cmFja2VyID0gbmV3
IFdURjo6TWV0YUFsbG9jYXRvclRyYWNrZXIoKTsKLSAgICBhbGxvY2F0b3ItPnRyYWNrQWxsb2Nh
dGlvbnMoc190cmFja2VyKTsKLX0KLQotdm9pZCogQ29kZVByb2ZpbGluZzo6Z2V0T3duZXJVSURG
b3JQQyh2b2lkKiBhZGRyZXNzKQotewotICAgIGlmICghc190cmFja2VyKQotICAgICAgICByZXR1
cm4gMDsKLSAgICBXVEY6Ok1ldGFBbGxvY2F0b3JIYW5kbGUqIGhhbmRsZSA9IHNfdHJhY2tlci0+
ZmluZChhZGRyZXNzKTsKLSAgICBpZiAoIWhhbmRsZSkKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAg
cmV0dXJuIGhhbmRsZS0+b3duZXJVSUQoKTsKLX0KLQotdm9pZCBDb2RlUHJvZmlsaW5nOjpiZWdp
bihjb25zdCBTb3VyY2VDb2RlJiBzb3VyY2UpCi17Ci0gICAgLy8gUHVzaCBhIG5ldyBDb2RlUHJv
ZmlsZSBvbnRvIHRoZSBzdGFjayBmb3IgZWFjaCBzY3JpcHQgZW5jb3VudGVyZWQuCi0gICAgQ29k
ZVByb2ZpbGUqIHByb2ZpbGVTdGFjayA9IGNvbnN0X2Nhc3Q8Q29kZVByb2ZpbGUqPihzX3Byb2Zp
bGVTdGFjayk7Ci0gICAgYm9vbCBhbHJlYWR5UHJvZmlsaW5nID0gcHJvZmlsZVN0YWNrOwotICAg
IHNfcHJvZmlsZVN0YWNrID0gcHJvZmlsZVN0YWNrID0gbmV3IENvZGVQcm9maWxlKHNvdXJjZSwg
cHJvZmlsZVN0YWNrKTsKLQotICAgIC8vIElzIHRoZSBwcm9maWxlciBhbHJlYWR5IHJ1bm5pbmcg
LSBpZiBzbywgdGhlIHRpbWVyIHdpbGwgYWxyZWFkeSBiZSBzZXQgdXAuCi0gICAgaWYgKGFscmVh
ZHlQcm9maWxpbmcpCi0gICAgICAgIHJldHVybjsKLQotI2lmIEhBVkUoTUFDSElORV9DT05URVhU
KQotICAgIC8vIFJlZ3NpdGVyIGEgc2lnbmFsIGhhbmRsZXIgJiBpdGltZXIuCi0gICAgc3RydWN0
IHNpZ2FjdGlvbiBhY3Rpb247Ci0gICAgYWN0aW9uLnNhX3NpZ2FjdGlvbiA9IHJlaW50ZXJwcmV0
X2Nhc3Q8dm9pZCAoKikoaW50LCBzaWdpbmZvX3QgKiwgdm9pZCAqKT4ocHJvZmlsaW5nVGltZXIp
OwotICAgIHNpZ2ZpbGxzZXQoJmFjdGlvbi5zYV9tYXNrKTsKLSAgICBhY3Rpb24uc2FfZmxhZ3Mg
PSBTQV9TSUdJTkZPOwotICAgIHNpZ2FjdGlvbihTSUdBTFJNLCAmYWN0aW9uLCAwKTsKLSAgICBz
ZXRQcm9maWxlVGltZXIoMTAwKTsKLSNlbmRpZgotfQotCi12b2lkIENvZGVQcm9maWxpbmc6OmVu
ZCgpCi17Ci0gICAgLy8gUG9wIHRoZSBjdXJyZW50IHByb2ZpbGVyIG9mZiB0aGUgc3RhY2suCi0g
ICAgQ29kZVByb2ZpbGUqIGN1cnJlbnQgPSBjb25zdF9jYXN0PENvZGVQcm9maWxlKj4oc19wcm9m
aWxlU3RhY2spOwotICAgIEFTU0VSVChjdXJyZW50KTsKLSAgICBzX3Byb2ZpbGVTdGFjayA9IGN1
cnJlbnQtPnBhcmVudCgpOwotCi0gICAgLy8gSXMgdGhpcyB0aGUgb3V0ZXJtb3N0IHNjcmlwdCBi
ZWluZyBwcm9maWxlZD8gLSBpZiBub3QsIGp1c3QgcmV0dXJuLgotICAgIC8vIFdlIHBlcmZvcm0g
YWxsIG91dHB1dCBvZiBwcm9maWxlcyByZWN1cnNpdmVseSBmcm9tIHRoZSBvdXRlcm1vc3Qgc2Ny
aXB0LAotICAgIC8vIHRvIG1pbmltaXplIHByb2ZpbGluZyBvdmVyaGVhZCBmcm9tIHNrZXdpbmcg
cmVzdWx0cy4KLSAgICBpZiAoc19wcm9maWxlU3RhY2spCi0gICAgICAgIHJldHVybjsKLQotI2lm
IEhBVkUoTUFDSElORV9DT05URVhUKQotICAgIC8vIFN0b3AgcHJvZmlsaW5nCi0gICAgc2V0UHJv
ZmlsZVRpbWVyKDApOwotI2VuZGlmCi0KLSAgICBjdXJyZW50LT5yZXBvcnQoKTsKLSAgICBkZWxl
dGUgY3VycmVudDsKLX0KLQotfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3Rvb2xzL0Nv
ZGVQcm9maWxpbmcuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvdG9vbHMv
Q29kZVByb2ZpbGluZy5oCShyZXZpc2lvbiAyNTc4NjYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvdG9vbHMvQ29kZVByb2ZpbGluZy5oCShub25leGlzdGVudCkKQEAgLTEsODEgKzAsMCBAQAot
LyoKLSAqIENvcHlyaWdodCAoQykgMjAxMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAq
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotCi0jcHJhZ21hIG9u
Y2UKLQotbmFtZXNwYWNlIFdURiB7Ci0KLWNsYXNzIE1ldGFBbGxvY2F0b3I7Ci1jbGFzcyBNZXRh
QWxsb2NhdG9yVHJhY2tlcjsKLQotfQotCi1uYW1lc3BhY2UgSlNDIHsKLQotY2xhc3MgQ29kZVBy
b2ZpbGU7Ci1jbGFzcyBTb3VyY2VDb2RlOwotCi1jbGFzcyBDb2RlUHJvZmlsaW5nIHsKLSAgICBl
bnVtIE1vZGUgewotICAgICAgICBEaXNhYmxlZCwKLSAgICAgICAgRW5hYmxlZCwKLSAgICAgICAg
VmVyYm9zZSwKLSAgICAgICAgVmVyeVZlcmJvc2UKLSAgICB9OwotCi1wdWJsaWM6Ci0gICAgQ29k
ZVByb2ZpbGluZyhjb25zdCBTb3VyY2VDb2RlJiBzb3VyY2UpCi0gICAgICAgIDogbV9hY3RpdmUo
ZW5hYmxlZCgpKQotICAgIHsKLSAgICAgICAgaWYgKG1fYWN0aXZlKQotICAgICAgICAgICAgYmVn
aW4oc291cmNlKTsKLSAgICB9Ci0KLSAgICB+Q29kZVByb2ZpbGluZygpCi0gICAgewotICAgICAg
ICBpZiAobV9hY3RpdmUpCi0gICAgICAgICAgICBlbmQoKTsKLSAgICB9Ci0KLSAgICBzdGF0aWMg
Ym9vbCBlbmFibGVkKCkgeyByZXR1cm4gc19tb2RlICE9IERpc2FibGVkOyB9Ci0gICAgc3RhdGlj
IGJvb2wgYmVWZXJib3NlKCkgeyByZXR1cm4gc19tb2RlID49IFZlcmJvc2U7IH0KLSAgICBzdGF0
aWMgYm9vbCBiZVZlcnlWZXJib3NlKCkgeyByZXR1cm4gc19tb2RlID49IFZlcnlWZXJib3NlOyB9
Ci0KLSAgICBzdGF0aWMgdm9pZCBub3RpZnlBbGxvY2F0b3IoV1RGOjpNZXRhQWxsb2NhdG9yKik7
Ci0gICAgc3RhdGljIHZvaWQqIGdldE93bmVyVUlERm9yUEModm9pZCopOwotICAgIHN0YXRpYyB2
b2lkIHNhbXBsZSh2b2lkKiBwYywgdm9pZCoqIGZyYW1lUG9pbnRlcik7Ci0KLXByaXZhdGU6Ci0g
ICAgdm9pZCBiZWdpbihjb25zdCBTb3VyY2VDb2RlJik7Ci0gICAgdm9pZCBlbmQoKTsKLQotICAg
IGJvb2wgbV9hY3RpdmU7Ci0KLSAgICBzdGF0aWMgTW9kZSBzX21vZGU7Ci0gICAgc3RhdGljIFdU
Rjo6TWV0YUFsbG9jYXRvclRyYWNrZXIqIHNfdHJhY2tlcjsKLSAgICBzdGF0aWMgdm9sYXRpbGUg
Q29kZVByb2ZpbGUqIHNfcHJvZmlsZVN0YWNrOwotfTsKLQotfSAvLyBuYW1lc3BhY2UgSlNDCklu
ZGV4OiBTb3VyY2UvV1RGL3d0Zi9NZXRhQWxsb2NhdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV1RGL3d0Zi9NZXRhQWxsb2NhdG9yLmNwcAkocmV2aXNpb24gMjU3ODY2KQorKysgU291cmNl
L1dURi93dGYvTWV0YUFsbG9jYXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU0LDQ1ICs1NCw0
NSBAQCBNZXRhQWxsb2NhdG9yOjp+TWV0YUFsbG9jYXRvcigpCiAjZW5kaWYKIH0KIAotdm9pZCBN
ZXRhQWxsb2NhdG9yVHJhY2tlcjo6bm90aWZ5KE1ldGFBbGxvY2F0b3JIYW5kbGUqIGhhbmRsZSkK
K3ZvaWQgTWV0YUFsbG9jYXRvclRyYWNrZXI6Om5vdGlmeShNZXRhQWxsb2NhdG9ySGFuZGxlJiBo
YW5kbGUpCiB7Ci0gICAgbV9hbGxvY2F0aW9ucy5pbnNlcnQoaGFuZGxlKTsKKyAgICBtX2FsbG9j
YXRpb25zLmluc2VydCgmaGFuZGxlKTsKIH0KIAotdm9pZCBNZXRhQWxsb2NhdG9yVHJhY2tlcjo6
cmVsZWFzZShNZXRhQWxsb2NhdG9ySGFuZGxlKiBoYW5kbGUpCit2b2lkIE1ldGFBbGxvY2F0b3JU
cmFja2VyOjpyZWxlYXNlKE1ldGFBbGxvY2F0b3JIYW5kbGUmIGhhbmRsZSkKIHsKLSAgICBtX2Fs
bG9jYXRpb25zLnJlbW92ZShoYW5kbGUpOworICAgIG1fYWxsb2NhdGlvbnMucmVtb3ZlKCZoYW5k
bGUpOwogfQogCi1BTFdBWVNfSU5MSU5FIHZvaWQgTWV0YUFsbG9jYXRvcjo6cmVsZWFzZShNZXRh
QWxsb2NhdG9ySGFuZGxlKiBoYW5kbGUpCitBTFdBWVNfSU5MSU5FIHZvaWQgTWV0YUFsbG9jYXRv
cjo6cmVsZWFzZShNZXRhQWxsb2NhdG9ySGFuZGxlJiBoYW5kbGUpCiB7CiAgICAgTG9ja0hvbGRl
ciBsb2NrZXIoJm1fbG9jayk7Ci0gICAgaWYgKGhhbmRsZS0+c2l6ZUluQnl0ZXMoKSkgewotICAg
ICAgICB2b2lkKiBzdGFydCA9IGhhbmRsZS0+c3RhcnQoKS51bnRhZ2dlZFB0cigpOwotICAgICAg
ICBzaXplX3Qgc2l6ZUluQnl0ZXMgPSBoYW5kbGUtPnNpemVJbkJ5dGVzKCk7CisgICAgaWYgKGhh
bmRsZS5zaXplSW5CeXRlcygpKSB7CisgICAgICAgIHZvaWQqIHN0YXJ0ID0gaGFuZGxlLnN0YXJ0
KCkudW50YWdnZWRQdHIoKTsKKyAgICAgICAgc2l6ZV90IHNpemVJbkJ5dGVzID0gaGFuZGxlLnNp
emVJbkJ5dGVzKCk7CiAgICAgICAgIGRlY3JlbWVudFBhZ2VPY2N1cGFuY3koc3RhcnQsIHNpemVJ
bkJ5dGVzKTsKICAgICAgICAgYWRkRnJlZVNwYWNlRnJvbVJlbGVhc2VkSGFuZGxlKEZyZWVTcGFj
ZVB0cihzdGFydCksIHNpemVJbkJ5dGVzKTsKICAgICB9CiAKLSAgICBpZiAoVU5MSUtFTFkoISFt
X3RyYWNrZXIpKQotICAgICAgICBtX3RyYWNrZXItPnJlbGVhc2UoaGFuZGxlKTsKKyAgICBpZiAo
aGFuZGxlLm5lZWRzVG9CZU5vdGlmaWVkT2ZSZWxlYXNlKCkpCisgICAgICAgIG5vdGlmeUJlZm9y
ZVJlbGVhc2UoaGFuZGxlKTsKKworICAgIG1fdHJhY2tlci5yZWxlYXNlKGhhbmRsZSk7CiB9CiAK
LU1ldGFBbGxvY2F0b3JIYW5kbGU6Ok1ldGFBbGxvY2F0b3JIYW5kbGUoTWV0YUFsbG9jYXRvciog
YWxsb2NhdG9yLCB2b2lkKiBzdGFydCwgc2l6ZV90IHNpemVJbkJ5dGVzLCB2b2lkKiBvd25lclVJ
RCkKLSAgICA6IG1fYWxsb2NhdG9yKGFsbG9jYXRvcikKK01ldGFBbGxvY2F0b3JIYW5kbGU6Ok1l
dGFBbGxvY2F0b3JIYW5kbGUoTWV0YUFsbG9jYXRvciYgYWxsb2NhdG9yLCB2b2lkKiBzdGFydCwg
c2l6ZV90IHNpemVJbkJ5dGVzKQorICAgIDogbV9hbGxvY2F0b3IoJmFsbG9jYXRvcikKICAgICAs
IG1fc3RhcnQoc3RhcnQpCiAgICAgLCBtX2VuZChyZWludGVycHJldF9jYXN0PGNoYXIqPihzdGFy
dCkgKyBzaXplSW5CeXRlcykKLSAgICAsIG1fb3duZXJVSUQob3duZXJVSUQpCiB7Ci0gICAgQVNT
RVJUKGFsbG9jYXRvcik7CisgICAgQVNTRVJUKCEoYml0d2lzZV9jYXN0PHVpbnRwdHJfdD4obV9h
bGxvY2F0b3IpICYgbmVlZHNUb0JlTm90aWZpZWRPZlJlbGVhc2VCaXQpKTsKICAgICBBU1NFUlQo
c3RhcnQpOwogICAgIEFTU0VSVChzaXplSW5CeXRlcyk7CiB9CiAKIE1ldGFBbGxvY2F0b3JIYW5k
bGU6On5NZXRhQWxsb2NhdG9ySGFuZGxlKCkKIHsKLSAgICBBU1NFUlQobV9hbGxvY2F0b3IpOwot
ICAgIG1fYWxsb2NhdG9yLT5yZWxlYXNlKHRoaXMpOworICAgIGFsbG9jYXRvcigpLnJlbGVhc2Uo
KnRoaXMpOwogfQogCiB2b2lkIE1ldGFBbGxvY2F0b3JIYW5kbGU6OnNocmluayhzaXplX3QgbmV3
U2l6ZUluQnl0ZXMpCkBAIC0xMDAsOSArMTAwLDEwIEBAIHZvaWQgTWV0YUFsbG9jYXRvckhhbmRs
ZTo6c2hyaW5rKHNpemVfdCAKICAgICBzaXplX3Qgc2l6ZUluQnl0ZXMgPSB0aGlzLT5zaXplSW5C
eXRlcygpOwogICAgIEFTU0VSVChuZXdTaXplSW5CeXRlcyA8PSBzaXplSW5CeXRlcyk7CiAKLSAg
ICBMb2NrSG9sZGVyIGxvY2tlcigmbV9hbGxvY2F0b3ItPm1fbG9jayk7CisgICAgTWV0YUFsbG9j
YXRvciYgYWxsb2NhdG9yID0gdGhpcy0+YWxsb2NhdG9yKCk7CisgICAgTG9ja0hvbGRlciBsb2Nr
ZXIoJmFsbG9jYXRvci5tX2xvY2spOwogCi0gICAgbmV3U2l6ZUluQnl0ZXMgPSBtX2FsbG9jYXRv
ci0+cm91bmRVcChuZXdTaXplSW5CeXRlcyk7CisgICAgbmV3U2l6ZUluQnl0ZXMgPSBhbGxvY2F0
b3Iucm91bmRVcChuZXdTaXplSW5CeXRlcyk7CiAgICAgCiAgICAgQVNTRVJUKG5ld1NpemVJbkJ5
dGVzIDw9IHNpemVJbkJ5dGVzKTsKIApAQCAtMTEzLDExICsxMTQsMTEgQEAgdm9pZCBNZXRhQWxs
b2NhdG9ySGFuZGxlOjpzaHJpbmsoc2l6ZV90IAogICAgIHNpemVfdCBmcmVlU2l6ZSA9IHNpemVJ
bkJ5dGVzIC0gbmV3U2l6ZUluQnl0ZXM7CiAgICAgdWludHB0cl90IGZyZWVFbmQgPSBmcmVlU3Rh
cnQgKyBmcmVlU2l6ZTsKICAgICAKLSAgICB1aW50cHRyX3QgZmlyc3RDb21wbGV0ZWx5RnJlZVBh
Z2UgPSAoZnJlZVN0YXJ0ICsgbV9hbGxvY2F0b3ItPm1fcGFnZVNpemUgLSAxKSAmIH4obV9hbGxv
Y2F0b3ItPm1fcGFnZVNpemUgLSAxKTsKKyAgICB1aW50cHRyX3QgZmlyc3RDb21wbGV0ZWx5RnJl
ZVBhZ2UgPSAoZnJlZVN0YXJ0ICsgYWxsb2NhdG9yLm1fcGFnZVNpemUgLSAxKSAmIH4oYWxsb2Nh
dG9yLm1fcGFnZVNpemUgLSAxKTsKICAgICBpZiAoZmlyc3RDb21wbGV0ZWx5RnJlZVBhZ2UgPCBm
cmVlRW5kKQotICAgICAgICBtX2FsbG9jYXRvci0+ZGVjcmVtZW50UGFnZU9jY3VwYW5jeShyZWlu
dGVycHJldF9jYXN0PHZvaWQqPihmaXJzdENvbXBsZXRlbHlGcmVlUGFnZSksIGZyZWVTaXplIC0g
KGZpcnN0Q29tcGxldGVseUZyZWVQYWdlIC0gZnJlZVN0YXJ0KSk7CisgICAgICAgIGFsbG9jYXRv
ci5kZWNyZW1lbnRQYWdlT2NjdXBhbmN5KHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KGZpcnN0Q29t
cGxldGVseUZyZWVQYWdlKSwgZnJlZVNpemUgLSAoZmlyc3RDb21wbGV0ZWx5RnJlZVBhZ2UgLSBm
cmVlU3RhcnQpKTsKIAotICAgIG1fYWxsb2NhdG9yLT5hZGRGcmVlU3BhY2VGcm9tUmVsZWFzZWRI
YW5kbGUoTWV0YUFsbG9jYXRvcjo6RnJlZVNwYWNlUHRyKGZyZWVTdGFydCksIGZyZWVTaXplKTsK
KyAgICBhbGxvY2F0b3IuYWRkRnJlZVNwYWNlRnJvbVJlbGVhc2VkSGFuZGxlKE1ldGFBbGxvY2F0
b3I6OkZyZWVTcGFjZVB0cihmcmVlU3RhcnQpLCBmcmVlU2l6ZSk7CiAKICAgICBtX2VuZCA9IG1f
c3RhcnQgKyBuZXdTaXplSW5CeXRlczsKIH0KQEAgLTEyNywxMyArMTI4LDEzIEBAIHZvaWQgTWV0
YUFsbG9jYXRvckhhbmRsZTo6ZHVtcChQcmludFN0cmUKICAgICBvdXQucHJpbnQoUmF3UG9pbnRl
cihzdGFydCgpLnVudGFnZ2VkUHRyKCkpLCAiLi4uIiwgUmF3UG9pbnRlcihlbmQoKS51bnRhZ2dl
ZFB0cigpKSk7CiB9CiAKLU1ldGFBbGxvY2F0b3I6Ok1ldGFBbGxvY2F0b3Ioc2l6ZV90IGFsbG9j
YXRpb25HcmFudWxlLCBzaXplX3QgcGFnZVNpemUpCitNZXRhQWxsb2NhdG9yOjpNZXRhQWxsb2Nh
dG9yKExvY2smIGxvY2ssIHNpemVfdCBhbGxvY2F0aW9uR3JhbnVsZSwgc2l6ZV90IHBhZ2VTaXpl
KQogICAgIDogbV9hbGxvY2F0aW9uR3JhbnVsZShhbGxvY2F0aW9uR3JhbnVsZSkKICAgICAsIG1f
cGFnZVNpemUocGFnZVNpemUpCiAgICAgLCBtX2J5dGVzQWxsb2NhdGVkKDApCiAgICAgLCBtX2J5
dGVzUmVzZXJ2ZWQoMCkKICAgICAsIG1fYnl0ZXNDb21taXR0ZWQoMCkKLSAgICAsIG1fdHJhY2tl
cigwKQorICAgICwgbV9sb2NrKGxvY2spCiAjaWZuZGVmIE5ERUJVRwogICAgICwgbV9tYWxsb2NC
YWxhbmNlKDApCiAjZW5kaWYKQEAgLTE1Nyw3ICsxNTgsNyBAQCBNZXRhQWxsb2NhdG9yOjpNZXRh
QWxsb2NhdG9yKHNpemVfdCBhbGxvCiAgICAgQVNTRVJUKHN0YXRpY19jYXN0PHNpemVfdD4oMSkg
PDwgbV9sb2dBbGxvY2F0aW9uR3JhbnVsZSA9PSBtX2FsbG9jYXRpb25HcmFudWxlKTsKIH0KIAot
UmVmUHRyPE1ldGFBbGxvY2F0b3JIYW5kbGU+IE1ldGFBbGxvY2F0b3I6OmFsbG9jYXRlKHNpemVf
dCBzaXplSW5CeXRlcywgdm9pZCogb3duZXJVSUQpCitSZWZQdHI8TWV0YUFsbG9jYXRvckhhbmRs
ZT4gTWV0YUFsbG9jYXRvcjo6YWxsb2NhdGUoc2l6ZV90IHNpemVJbkJ5dGVzKQogewogICAgIExv
Y2tIb2xkZXIgbG9ja2VyKCZtX2xvY2spOwogCkBAIC0xOTUsMTAgKzE5Niw5IEBAIFJlZlB0cjxN
ZXRhQWxsb2NhdG9ySGFuZGxlPiBNZXRhQWxsb2NhdG8KICAgICBtX251bUFsbG9jYXRpb25zKys7
CiAjZW5kaWYKIAotICAgIGF1dG8gaGFuZGxlID0gYWRvcHRSZWYoKm5ldyBNZXRhQWxsb2NhdG9y
SGFuZGxlKHRoaXMsIHN0YXJ0LnVudGFnZ2VkUHRyKCksIHNpemVJbkJ5dGVzLCBvd25lclVJRCkp
OworICAgIGF1dG8gaGFuZGxlID0gYWRvcHRSZWYoKm5ldyBNZXRhQWxsb2NhdG9ySGFuZGxlKCp0
aGlzLCBzdGFydC51bnRhZ2dlZFB0cigpLCBzaXplSW5CeXRlcykpOwogCi0gICAgaWYgKFVOTElL
RUxZKCEhbV90cmFja2VyKSkKLSAgICAgICAgbV90cmFja2VyLT5ub3RpZnkoaGFuZGxlLnB0cigp
KTsKKyAgICBtX3RyYWNrZXIubm90aWZ5KCpoYW5kbGUucHRyKCkpOwogCiAgICAgcmV0dXJuIGhh
bmRsZTsKIH0KSW5kZXg6IFNvdXJjZS9XVEYvd3RmL01ldGFBbGxvY2F0b3IuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV1RGL3d0Zi9NZXRhQWxsb2NhdG9yLmgJKHJldmlzaW9uIDI1Nzg2NikKKysr
IFNvdXJjZS9XVEYvd3RmL01ldGFBbGxvY2F0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtNDQsMTUg
KzQ0LDE1IEBAIG5hbWVzcGFjZSBXVEYgewogY2xhc3MgTWV0YUFsbG9jYXRvclRyYWNrZXIgewog
ICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogcHVibGljOgotICAgIHZvaWQgbm90aWZ5KE1l
dGFBbGxvY2F0b3JIYW5kbGUqKTsKLSAgICB2b2lkIHJlbGVhc2UoTWV0YUFsbG9jYXRvckhhbmRs
ZSopOworICAgIHZvaWQgbm90aWZ5KE1ldGFBbGxvY2F0b3JIYW5kbGUmKTsKKyAgICB2b2lkIHJl
bGVhc2UoTWV0YUFsbG9jYXRvckhhbmRsZSYpOwogCiAgICAgTWV0YUFsbG9jYXRvckhhbmRsZSog
ZmluZCh2b2lkKiBhZGRyZXNzKQogICAgIHsKICAgICAgICAgTWV0YUFsbG9jYXRvckhhbmRsZSog
aGFuZGxlID0gbV9hbGxvY2F0aW9ucy5maW5kR3JlYXRlc3RMZXNzVGhhbk9yRXF1YWwoYWRkcmVz
cyk7Ci0gICAgICAgIGlmIChoYW5kbGUgJiYgYWRkcmVzcyA8IGhhbmRsZS0+ZW5kKCkudW50YWdn
ZWRQdHIoKSkKKyAgICAgICAgaWYgKGhhbmRsZSAmJiBoYW5kbGUtPnN0YXJ0KCkudW50YWdnZWRQ
dHIoKSA8PSBhZGRyZXNzICYmIGFkZHJlc3MgPCBoYW5kbGUtPmVuZCgpLnVudGFnZ2VkUHRyKCkp
CiAgICAgICAgICAgICByZXR1cm4gaGFuZGxlOwotICAgICAgICByZXR1cm4gMDsKKyAgICAgICAg
cmV0dXJuIG51bGxwdHI7CiAgICAgfQogCiAgICAgUmVkQmxhY2tUcmVlPE1ldGFBbGxvY2F0b3JI
YW5kbGUsIHZvaWQqPiBtX2FsbG9jYXRpb25zOwpAQCAtNjQsMTcgKzY0LDEyIEBAIGNsYXNzIE1l
dGFBbGxvY2F0b3IgewogcHVibGljOgogICAgIHVzaW5nIEZyZWVTcGFjZVB0ciA9IE1ldGFBbGxv
Y2F0b3JQdHI8RnJlZVNwYWNlUHRyVGFnPjsKIAotICAgIFdURl9FWFBPUlRfUFJJVkFURSBNZXRh
QWxsb2NhdG9yKHNpemVfdCBhbGxvY2F0aW9uR3JhbnVsZSwgc2l6ZV90IHBhZ2VTaXplID0gV1RG
OjpwYWdlU2l6ZSgpKTsKKyAgICBXVEZfRVhQT1JUX1BSSVZBVEUgTWV0YUFsbG9jYXRvcihMb2Nr
Jiwgc2l6ZV90IGFsbG9jYXRpb25HcmFudWxlLCBzaXplX3QgcGFnZVNpemUgPSBXVEY6OnBhZ2VT
aXplKCkpOwogICAgIAogICAgIFdURl9FWFBPUlRfUFJJVkFURSB2aXJ0dWFsIH5NZXRhQWxsb2Nh
dG9yKCk7CiAgICAgCi0gICAgV1RGX0VYUE9SVF9QUklWQVRFIFJlZlB0cjxNZXRhQWxsb2NhdG9y
SGFuZGxlPiBhbGxvY2F0ZShzaXplX3Qgc2l6ZUluQnl0ZXMsIHZvaWQqIG93bmVyVUlEKTsKKyAg
ICBXVEZfRVhQT1JUX1BSSVZBVEUgUmVmUHRyPE1ldGFBbGxvY2F0b3JIYW5kbGU+IGFsbG9jYXRl
KHNpemVfdCBzaXplSW5CeXRlcyk7CiAKLSAgICB2b2lkIHRyYWNrQWxsb2NhdGlvbnMoTWV0YUFs
bG9jYXRvclRyYWNrZXIqIHRyYWNrZXIpCi0gICAgewotICAgICAgICBtX3RyYWNrZXIgPSB0cmFj
a2VyOwotICAgIH0KLSAgICAKICAgICAvLyBOb24tYXRvbWljIG1ldGhvZHMgZm9yIGdldHRpbmcg
YWxsb2NhdG9yIHN0YXRpc3RpY3MuCiAgICAgc2l6ZV90IGJ5dGVzQWxsb2NhdGVkKCkgeyByZXR1
cm4gbV9ieXRlc0FsbG9jYXRlZDsgfQogICAgIHNpemVfdCBieXRlc1Jlc2VydmVkKCkgeyByZXR1
cm4gbV9ieXRlc1Jlc2VydmVkOyB9CkBAIC05OCw3ICs5Myw2IEBAIHB1YmxpYzoKICAgICAvLyBi
dWlsZHMuCiAgICAgV1RGX0VYUE9SVF9QUklWQVRFIHNpemVfdCBkZWJ1Z0ZyZWVTcGFjZVNpemUo
KTsKIAotICAgIExvY2smIGdldExvY2soKSB7IHJldHVybiBtX2xvY2s7IH0KICAgICBXVEZfRVhQ
T1JUX1BSSVZBVEUgYm9vbCBpc0luQWxsb2NhdGVkTWVtb3J5KGNvbnN0IEFic3RyYWN0TG9ja2Vy
Jiwgdm9pZCogYWRkcmVzcyk7CiAgICAgCiAjaWYgRU5BQkxFKE1FVEFfQUxMT0NBVE9SX1BST0ZJ
TEUpCkBAIC0xMDcsNiArMTAxLDExIEBAIHB1YmxpYzoKICAgICB2b2lkIGR1bXBQcm9maWxlKCkg
eyB9CiAjZW5kaWYKIAorICAgIE1ldGFBbGxvY2F0b3JIYW5kbGUqIGZpbmQodm9pZCogYWRkcmVz
cykKKyAgICB7CisgICAgICAgIHJldHVybiBtX3RyYWNrZXIuZmluZChhZGRyZXNzKTsKKyAgICB9
CisKIHByb3RlY3RlZDoKICAgICAKICAgICAvLyBBbGxvY2F0ZSBuZXcgdmlydHVhbCBzcGFjZSwg
YnV0IGRvbid0IGNvbW1pdC4gVGhpcyBtYXkgcmV0dXJuIG1vcmUKQEAgLTExOCw2ICsxMTcsOCBA
QCBwcm90ZWN0ZWQ6CiAgICAgCiAgICAgLy8gVW5jb21taXQgYSBwYWdlLgogICAgIHZpcnR1YWwg
dm9pZCBub3RpZnlQYWdlSXNGcmVlKHZvaWQqIHBhZ2UsIHNpemVfdCkgPSAwOworCisgICAgdmly
dHVhbCB2b2lkIG5vdGlmeUJlZm9yZVJlbGVhc2UoTWV0YUFsbG9jYXRvckhhbmRsZSYpIHsgfQog
ICAgIAogICAgIC8vIE5PVEU6IG5vbmUgb2YgdGhlIGFib3ZlIG1ldGhvZHMgYXJlIGNhbGxlZCBk
dXJpbmcgYWxsb2NhdG9yCiAgICAgLy8gZGVzdHJ1Y3Rpb24sIGluIHBhcnQgYmVjYXVzZSBhIE1l
dGFBbGxvY2F0b3IgY2Fubm90IGRpZSBzbyBsb25nCkBAIC0xNTIsNyArMTUzLDcgQEAgcHJpdmF0
ZToKICAgICB0eXBlZGVmIFJlZEJsYWNrVHJlZTxGcmVlU3BhY2VOb2RlLCBzaXplX3Q+IFRyZWU7
CiAKICAgICAvLyBSZWxlYXNlIGEgTWV0YUFsbG9jYXRvckhhbmRsZS4KLSAgICB2b2lkIHJlbGVh
c2UoTWV0YUFsbG9jYXRvckhhbmRsZSopOworICAgIHZvaWQgcmVsZWFzZShNZXRhQWxsb2NhdG9y
SGFuZGxlJik7CiAgICAgCiAgICAgLy8gUmVtb3ZlIGZyZWUgc3BhY2UgZnJvbSB0aGUgYWxsb2Nh
dG9yLiBUaGlzIGlzIGVmZmVjdGl2ZWx5CiAgICAgLy8gdGhlIGFsbG9jYXRlKCkgZnVuY3Rpb24s
IGV4Y2VwdCB0aGF0IGl0IGRvZXMgbm90IG1hcmsgdGhlCkBAIC0xOTMsOSArMTk0LDkgQEAgcHJp
dmF0ZToKICAgICBzaXplX3QgbV9ieXRlc1Jlc2VydmVkOwogICAgIHNpemVfdCBtX2J5dGVzQ29t
bWl0dGVkOwogICAgIAotICAgIExvY2sgbV9sb2NrOworICAgIExvY2smIG1fbG9jazsKIAotICAg
IE1ldGFBbGxvY2F0b3JUcmFja2VyKiBtX3RyYWNrZXI7CisgICAgTWV0YUFsbG9jYXRvclRyYWNr
ZXIgbV90cmFja2VyOwogCiAjaWZuZGVmIE5ERUJVRwogICAgIHNpemVfdCBtX21hbGxvY0JhbGFu
Y2U7CkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9NZXRhQWxsb2NhdG9ySGFuZGxlLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dURi93dGYvTWV0YUFsbG9jYXRvckhhbmRsZS5oCShyZXZpc2lvbiAyNTc4
NjYpCisrKyBTb3VyY2UvV1RGL3d0Zi9NZXRhQWxsb2NhdG9ySGFuZGxlLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTQyLDcgKzQyLDcgQEAgREVDTEFSRV9BTExPQ0FUT1JfV0lUSF9IRUFQX0lERU5USUZJ
RVIoTQogY2xhc3MgTWV0YUFsbG9jYXRvckhhbmRsZSA6IHB1YmxpYyBUaHJlYWRTYWZlUmVmQ291
bnRlZDxNZXRhQWxsb2NhdG9ySGFuZGxlPiwgcHVibGljIFJlZEJsYWNrVHJlZTxNZXRhQWxsb2Nh
dG9ySGFuZGxlLCB2b2lkKj46Ok5vZGUgewogICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEX1dJ
VEhfSEVBUF9JREVOVElGSUVSKE1ldGFBbGxvY2F0b3JIYW5kbGUpOwogcHJpdmF0ZToKLSAgICBN
ZXRhQWxsb2NhdG9ySGFuZGxlKE1ldGFBbGxvY2F0b3IqLCB2b2lkKiBzdGFydCwgc2l6ZV90IHNp
emVJbkJ5dGVzLCB2b2lkKiBvd25lclVJRCk7CisgICAgTWV0YUFsbG9jYXRvckhhbmRsZShNZXRh
QWxsb2NhdG9yJiwgdm9pZCogc3RhcnQsIHNpemVfdCBzaXplSW5CeXRlcyk7CiAKIHB1YmxpYzoK
ICAgICB1c2luZyBNZW1vcnlQdHIgPSBNZXRhQWxsb2NhdG9yUHRyPEhhbmRsZU1lbW9yeVB0clRh
Zz47CkBAIC04NiwyMCArODYsMjAgQEAgcHVibGljOgogICAgICAgICAKICAgICBXVEZfRVhQT1JU
X1BSSVZBVEUgdm9pZCBzaHJpbmsoc2l6ZV90IG5ld1NpemVJbkJ5dGVzKTsKICAgICAKLSAgICBi
b29sIGlzTWFuYWdlZCgpCisgICAgTWV0YUFsbG9jYXRvciYgYWxsb2NhdG9yKCkKICAgICB7Ci0g
ICAgICAgIHJldHVybiAhIW1fYWxsb2NhdG9yOworICAgICAgICBNZXRhQWxsb2NhdG9yKiB1bnRh
Z2dlZFB0ciA9IGJpdHdpc2VfY2FzdDxNZXRhQWxsb2NhdG9yKj4oYml0d2lzZV9jYXN0PHVpbnRw
dHJfdD4obV9hbGxvY2F0b3IpICYgfm5lZWRzVG9CZU5vdGlmaWVkQmVmb3JlUmVsZWFzZUJpdCk7
CisgICAgICAgIHJldHVybiAqdW50YWdnZWRQdHI7CiAgICAgfQotICAgICAgICAKLSAgICBNZXRh
QWxsb2NhdG9yKiBhbGxvY2F0b3IoKQorCisgICAgdm9pZCBzZXROZWVkc1RvQmVOb3RpZmllZEJl
Zm9yZVJlbGVhc2UoKQogICAgIHsKLSAgICAgICAgQVNTRVJUKG1fYWxsb2NhdG9yKTsKLSAgICAg
ICAgcmV0dXJuIG1fYWxsb2NhdG9yOworICAgICAgICBtX2FsbG9jYXRvciA9IGJpdHdpc2VfY2Fz
dDxNZXRhQWxsb2NhdG9yKj4oYml0d2lzZV9jYXN0PHVpbnRwdHJfdD4obV9hbGxvY2F0b3IpIHwg
bmVlZHNUb0JlTm90aWZpZWRCZWZvcmVSZWxlYXNlQml0KTsKICAgICB9CiAKLSAgICB2b2lkKiBv
d25lclVJRCgpCisgICAgYm9vbCBuZWVkc1RvQmVOb3RpZmllZE9mUmVsZWFzZSgpCiAgICAgewot
ICAgICAgICByZXR1cm4gbV9vd25lclVJRDsKKyAgICAgICAgcmV0dXJuICEhKGJpdHdpc2VfY2Fz
dDx1aW50cHRyX3Q+KG1fYWxsb2NhdG9yKSAmIG5lZWRzVG9CZU5vdGlmaWVkQmVmb3JlUmVsZWFz
ZUJpdCk7CiAgICAgfQogCiAgICAgdm9pZCoga2V5KCkKQEAgLTExMCwxMiArMTEwLDEyIEBAIHB1
YmxpYzoKICAgICBXVEZfRVhQT1JUX1BSSVZBVEUgdm9pZCBkdW1wKFByaW50U3RyZWFtJiBvdXQp
IGNvbnN0OwogICAgIAogcHJpdmF0ZToKKyAgICBzdGF0aWMgY29uc3RleHByIHVpbnRwdHJfdCBu
ZWVkc1RvQmVOb3RpZmllZEJlZm9yZVJlbGVhc2VCaXQgPSAxOwogICAgIGZyaWVuZCBjbGFzcyBN
ZXRhQWxsb2NhdG9yOwogICAgIAogICAgIE1ldGFBbGxvY2F0b3IqIG1fYWxsb2NhdG9yOwogICAg
IE1lbW9yeVB0ciBtX3N0YXJ0OwogICAgIE1lbW9yeVB0ciBtX2VuZDsKLSAgICB2b2lkKiBtX293
bmVyVUlEOwogfTsKIAogfQpJbmRleDogU291cmNlL1dURi93dGYvU3RkTGliRXh0cmFzLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dURi93dGYvU3RkTGliRXh0cmFzLmgJKHJldmlzaW9uIDI1Nzg2
NikKKysrIFNvdXJjZS9XVEYvd3RmL1N0ZExpYkV4dHJhcy5oCSh3b3JraW5nIGNvcHkpCkBAIC00
ODksNiArNDg5LDE5IEBAIEFMV0FZU19JTkxJTkUgZGVjbHR5cGUoYXV0bykgbWFrZVVuaXF1ZVcK
ICAgICByZXR1cm4gc3RkOjptYWtlX3VuaXF1ZTxUPihzdGQ6OmZvcndhcmQ8QXJncz4oYXJncyku
Li4pOwogfQogCit0ZW1wbGF0ZSA8dHlwZW5hbWUgUmVzdWx0VHlwZSwgc2l6ZV90Li4uIElzLCB0
eXBlbmFtZSAuLi5BcmdzPgorY29uc3RleHByIGF1dG8gY29uc3RydWN0Rml4ZWRTaXplQXJyYXlX
aXRoQXJndW1lbnRzSW1wbChzdGQ6OmluZGV4X3NlcXVlbmNlPElzLi4uPiwgQXJncyYmLi4uIGFy
Z3MpIC0+IHN0ZDo6YXJyYXk8UmVzdWx0VHlwZSwgc2l6ZW9mLi4uKElzKT4KK3sKKyAgICByZXR1
cm4geyAoSXMsIFJlc3VsdFR5cGUgeyBhcmdzLi4uIH0pLi4uIH07Cit9CisKKy8vIENvbnN0cnVj
dCBhbiBzdGQ6OmFycmF5IHdpdGggTiBlbGVtZW50cyBvZiBSZXN1bHRUeXBlLCBwYXNzaW5nIEFy
Z3MgdG8gZWFjaCBvZiB0aGUgTiBjb25zdHJ1Y3RvcnMuCit0ZW1wbGF0ZTx0eXBlbmFtZSBSZXN1
bHRUeXBlLCBzaXplX3QgTiwgdHlwZW5hbWUgLi4uQXJncz4KK2NvbnN0ZXhwciBhdXRvIGNvbnN0
cnVjdEZpeGVkU2l6ZUFycmF5V2l0aEFyZ3VtZW50cyhBcmdzJiYuLi4gYXJncykgLT4gZGVjbHR5
cGUoYXV0bykKK3sKKyAgICBhdXRvIHR1cGxlID0gc3RkOjptYWtlX2luZGV4X3NlcXVlbmNlPE4+
KCk7CisgICAgcmV0dXJuIGNvbnN0cnVjdEZpeGVkU2l6ZUFycmF5V2l0aEFyZ3VtZW50c0ltcGw8
UmVzdWx0VHlwZT4odHVwbGUsIHN0ZDo6Zm9yd2FyZDxBcmdzPihhcmdzKS4uLik7Cit9CiAKIH0g
Ly8gbmFtZXNwYWNlIFdURgogCkBAIC01MTQsMyArNTI3LDQgQEAgdXNpbmcgV1RGOjpzYWZlQ2Fz
dDsKIHVzaW5nIFdURjo6dHJ5QmluYXJ5U2VhcmNoOwogdXNpbmcgV1RGOjptYWtlVW5pcXVlOwog
dXNpbmcgV1RGOjptYWtlVW5pcXVlV2l0aG91dEZhc3RNYWxsb2NDaGVjazsKK3VzaW5nIFdURjo6
Y29uc3RydWN0Rml4ZWRTaXplQXJyYXlXaXRoQXJndW1lbnRzOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>392984</attachid>
            <date>2020-03-08 14:12:01 -0700</date>
            <delta_ts>2020-03-08 14:22:55 -0700</delta_ts>
            <desc>WIP</desc>
            <filename>c-backup.diff</filename>
            <type>text/plain</type>
            <size>63314</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9Tb3VyY2VzLnR4dAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvU291cmNlcy50eHQJKHJldmlzaW9uIDI1Nzg2NikKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9Tb3VyY2VzLnR4dAkod29ya2luZyBjb3B5KQpAQCAtOTk0LDgg
Kzk5NCw2IEBAIHJ1bnRpbWUvV2lkZW5pbmdOdW1iZXJQcmVkaWN0aW9uRnV6emVyQWcKIEpTQ0J1
aWx0aW5zLmNwcAogCiB0b29scy9DZWxsTGlzdC5jcHAKLXRvb2xzL0NvZGVQcm9maWxlLmNwcAot
dG9vbHMvQ29kZVByb2ZpbGluZy5jcHAKIHRvb2xzL0NvbXBpbGVyVGltaW5nU2NvcGUuY3BwCiB0
b29scy9GdW5jdGlvbk92ZXJyaWRlcy5jcHAKIHRvb2xzL0Z1bmN0aW9uV2hpdGVsaXN0LmNwcApJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9q
ZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3Jp
cHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDI1Nzg2NikKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhw
cm9qCSh3b3JraW5nIGNvcHkpCkBAIC00MDcxLDggKzQwNzEsNiBAQAogCQk4NjAxNjFFMDBGM0E4
M0MxMDBGODQ3MTAgLyogTWFjcm9Bc3NlbWJsZXJYODYuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gTWFjcm9Bc3NlbWJsZXJYODYuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJODYwMTYxRTEwRjNBODNDMTAwRjg0NzEwIC8qIE1hY3JvQXNzZW1ibGVyWDg2XzY0Lmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE1hY3JvQXNzZW1ibGVyWDg2XzY0Lmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTg2MDE2MUUyMEYzQTgzQzEwMEY4NDcxMCAv
KiBNYWNyb0Fzc2VtYmxlclg4NkNvbW1vbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBNYWNyb0Fzc2VtYmxlclg4NkNvbW1vbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwotCQk4NjAzQ0VGMjE0Qzc1NDY0MDBBRTU5RTMgLyogQ29kZVByb2ZpbGluZy5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBDb2RlUHJvZmlsaW5nLmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJODYwM0NFRjMxNEM3NTQ2NDAwQUU1OUUzIC8qIENvZGVQ
cm9maWxpbmcuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ29kZVByb2ZpbGlu
Zy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk4NjA0RjRGMjE0M0E2QzQ0MDBCMjk1
RjUgLyogQ2hhbmdlTG9nICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZp
bGVUeXBlID0gdGV4dDsgbGluZUVuZGluZyA9IDA7IHBhdGggPSBDaGFuZ2VMb2c7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTg2MDZEREU5MThEQTQ0QUIwMEEzODNEMCAvKiBJZGVudGlm
aWVySW5saW5lcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJZGVudGlmaWVy
SW5saW5lcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk4NjEyRTRDQjE1MjI5MTg0
MDBDODM2QkUgLyogTWF0Y2hSZXN1bHQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gTWF0Y2hSZXN1bHQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTQxMTgsOCAr
NDExNiw2IEBACiAJCTg2QUREMTQzMEZEREVBOTgwMDA2RkZDQyAvKiBBUk12N1JlZ2lzdGVycy5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBBUk12N1JlZ2lzdGVycy5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk4NkFERDE0NDBGRERFQTk4MDAwNkVFQzIgLyogTWFj
cm9Bc3NlbWJsZXJBUk12Ny5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBNYWNy
b0Fzc2VtYmxlckFSTXY3Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTg2QjU4MjJD
MTREMjJGNUYwMEE5QzMwNiAvKiBQcm9maWxlVHJlZU5vZGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gUHJvZmlsZVRyZWVOb2RlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07Ci0JCTg2QjU4MjJFMTREMjM3M0IwMEE5QzMwNiAvKiBDb2RlUHJvZmlsZS5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBDb2RlUHJvZmlsZS5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTg2QjU4MjJGMTREMjM3M0IwMEE5QzMwNiAvKiBDb2RlUHJv
ZmlsZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBDb2RlUHJvZmlsZS5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk4NkI1ODI2QTE0RDM1RDUxMDBBOUMzMDYgLyog
VGllcmVkTU1hcEFycmF5LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFRpZXJl
ZE1NYXBBcnJheS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk4NkJGNjQyQTE0OERC
MkI1MDA0REUzNkEgLyogSW50cmluc2ljLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IEludHJpbnNpYy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk4NkMzNkVFOTBF
RTEyODlEMDBCM0RGNTkgLyogTWFjcm9Bc3NlbWJsZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gTWFjcm9Bc3NlbWJsZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
QEAgLTc2NzYsMTAgKzc2NzIsNiBAQAogCQkJCUZFMUJEMDFCMUU3MjAwMjEwMDEzNEJDOSAvKiBD
ZWxsTGlzdC5jcHAgKi8sCiAJCQkJRkUxQkQwMUMxRTcyMDAyMTAwMTM0QkM5IC8qIENlbGxMaXN0
LmggKi8sCiAJCQkJRkUxQkQwMjAxRTcyMDI3MDAwMTM0QkM5IC8qIENlbGxQcm9maWxlLmggKi8s
Ci0JCQkJODZCNTgyMkUxNEQyMzczQjAwQTlDMzA2IC8qIENvZGVQcm9maWxlLmNwcCAqLywKLQkJ
CQk4NkI1ODIyRjE0RDIzNzNCMDBBOUMzMDYgLyogQ29kZVByb2ZpbGUuaCAqLywKLQkJCQk4NjAz
Q0VGMjE0Qzc1NDY0MDBBRTU5RTMgLyogQ29kZVByb2ZpbGluZy5jcHAgKi8sCi0JCQkJODYwM0NF
RjMxNEM3NTQ2NDAwQUU1OUUzIC8qIENvZGVQcm9maWxpbmcuaCAqLywKIAkJCQkwRjRGMTFFNzIw
OUJDREExMDA3MDk2NTQgLyogQ29tcGlsZXJUaW1pbmdTY29wZS5jcHAgKi8sCiAJCQkJMEY0RjEx
RTYyMDlCQ0RBMTAwNzA5NjU0IC8qIENvbXBpbGVyVGltaW5nU2NvcGUuaCAqLywKIAkJCQlGRTRC
RkYyOTFBRDQ3NkU3MDAwODhGODcgLyogRnVuY3Rpb25PdmVycmlkZXMuY3BwICovLApJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9BUk02NEFzc2VtYmxlci5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvQVJNNjRBc3NlbWJsZXIuaAko
cmV2aXNpb24gMjU3ODY2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9BUk02
NEFzc2VtYmxlci5oCSh3b3JraW5nIGNvcHkpCkBAIC03ODMsMTIgKzc4Myw5IEBAIHB1YmxpYzoK
ICAgICAgICAgaW5zbihkYXRhUHJvY2Vzc2luZzJTb3VyY2UoREFUQVNJWkUsIHJtLCBEYXRhT3Bf
QVNSViwgcm4sIHJkKSk7CiAgICAgfQogCi0gICAgQUxXQVlTX0lOTElORSB2b2lkIGIoaW50MzJf
dCBvZmZzZXQgPSAwKQorICAgIEFMV0FZU19JTkxJTkUgdm9pZCBiKCkKICAgICB7Ci0gICAgICAg
IEFTU0VSVCghKG9mZnNldCAmIDMpKTsKLSAgICAgICAgb2Zmc2V0ID4+PSAyOwotICAgICAgICBB
U1NFUlQob2Zmc2V0ID09IChvZmZzZXQgPDwgNikgPj4gNik7Ci0gICAgICAgIGluc24odW5jb25k
aXRpb25hbEJyYW5jaEltbWVkaWF0ZShmYWxzZSwgb2Zmc2V0KSk7CisgICAgICAgIGluc24odW5j
b25kaXRpb25hbEJyYW5jaEltbWVkaWF0ZShmYWxzZSwgMCkpOwogICAgIH0KIAogICAgIEFMV0FZ
U19JTkxJTkUgdm9pZCBiX2NvbmQoQ29uZGl0aW9uIGNvbmQsIGludDMyX3Qgb2Zmc2V0ID0gMCkK
QEAgLTgzMSwxMSArODI4LDkgQEAgcHVibGljOgogICAgICAgICBpbnNuKGxvZ2ljYWxTaGlmdGVk
UmVnaXN0ZXIoREFUQVNJWkUsIHNldEZsYWdzID8gTG9naWNhbE9wX0FORFMgOiBMb2dpY2FsT3Bf
QU5ELCBzaGlmdCwgdHJ1ZSwgcm0sIGFtb3VudCwgcm4sIHJkKSk7CiAgICAgfQogCi0gICAgQUxX
QVlTX0lOTElORSB2b2lkIGJsKGludDMyX3Qgb2Zmc2V0ID0gMCkKKyAgICBBTFdBWVNfSU5MSU5F
IHZvaWQgYmwoKQogICAgIHsKLSAgICAgICAgQVNTRVJUKCEob2Zmc2V0ICYgMykpOwotICAgICAg
ICBvZmZzZXQgPj49IDI7Ci0gICAgICAgIGluc24odW5jb25kaXRpb25hbEJyYW5jaEltbWVkaWF0
ZSh0cnVlLCBvZmZzZXQpKTsKKyAgICAgICAgaW5zbih1bmNvbmRpdGlvbmFsQnJhbmNoSW1tZWRp
YXRlKHRydWUsIDApKTsKICAgICB9CiAKICAgICBBTFdBWVNfSU5MSU5FIHZvaWQgYmxyKFJlZ2lz
dGVySUQgcm4pCkBAIC0yNTgyLDYgKzI1NzcsMTMgQEAgcHVibGljOgogICAgIHsKICAgICAgICAg
aW50cHRyX3Qgb2Zmc2V0ID0gKHJlaW50ZXJwcmV0X2Nhc3Q8aW50cHRyX3Q+KHRvKSAtIHJlaW50
ZXJwcmV0X2Nhc3Q8aW50cHRyX3Q+KHdoZXJlKSkgPj4gMjsKICAgICAgICAgQVNTRVJUKHN0YXRp
Y19jYXN0PGludD4ob2Zmc2V0KSA9PSBvZmZzZXQpOworCisgICAgICAgIGlmICghaXNJbnQ8MjY+
KG9mZnNldCkpIHsKKyAgICAgICAgICAgIHRvID0gRXhlY3V0YWJsZUFsbG9jYXRvcjo6c2luZ2xl
dG9uKCkuZ2V0SnVtcElzbGFuZFRvKHdoZXJlLCBudWxscHRyLCB0byk7CisgICAgICAgICAgICBv
ZmZzZXQgPSAoYml0d2lzZV9jYXN0PGludHB0cl90Pih0bykgLSBiaXR3aXNlX2Nhc3Q8aW50cHRy
X3Q+KHdoZXJlKSkgPj4gMjsKKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKGlzSW50PDI2Pihv
ZmZzZXQpKTsKKyAgICAgICAgfQorCiAgICAgICAgIGludCBpbnNuID0gdW5jb25kaXRpb25hbEJy
YW5jaEltbWVkaWF0ZShmYWxzZSwgc3RhdGljX2Nhc3Q8aW50PihvZmZzZXQpKTsKICAgICAgICAg
UkVMRUFTRV9BU1NFUlQocm91bmRVcFRvTXVsdGlwbGVPZjxpbnN0cnVjdGlvblNpemU+KHdoZXJl
KSA9PSB3aGVyZSk7CiAgICAgICAgIHBlcmZvcm1KSVRNZW1jcHkod2hlcmUsICZpbnNuLCBzaXpl
b2YoaW50KSk7CkBAIC0yODcyLDcgKzI4NzQsNyBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAg
cmV0dXJuIExpbmtKdW1wQ29uZGl0aW9uRGlyZWN0OwogCiAgICAgICAgICAgICByZXR1cm4gTGlu
a0p1bXBDb25kaXRpb247Ci0gICAgICAgICAgICB9CisgICAgICAgIH0KICAgICAgICAgY2FzZSBK
dW1wQ29tcGFyZUFuZEJyYW5jaDogIHsKICAgICAgICAgICAgIEFTU0VSVChpczRCeXRlQWxpZ25l
ZChmcm9tKSk7CiAgICAgICAgICAgICBBU1NFUlQoaXM0Qnl0ZUFsaWduZWQodG8pKTsKQEAgLTI5
ODUsNyArMjk4NywxOSBAQCBwcm90ZWN0ZWQ6CiAKICAgICAgICAgYm9vbCBsaW5rOwogICAgICAg
ICBpbnQgaW1tMjY7Ci0gICAgICAgIGJvb2wgaXNVbmNvbmRpdGlvbmFsQnJhbmNoSW1tZWRpYXRl
T3JOb3AgPSBkaXNhc3NlbWJsZVVuY29uZGl0aW9uYWxCcmFuY2hJbW1lZGlhdGUoZnJvbSwgbGlu
aywgaW1tMjYpIHx8IGRpc2Fzc2VtYmxlTm9wKGZyb20pOworICAgICAgICB2b2lkKiBwcmV2aW91
c1RhcmdldCA9IG51bGxwdHI7CisgICAgICAgIGJvb2wgaXNVbmNvbmRpdGlvbmFsQnJhbmNoSW1t
ZWRpYXRlT3JOb3AgPSBmYWxzZTsKKyAgICAgICAgaWYgKGRpc2Fzc2VtYmxlVW5jb25kaXRpb25h
bEJyYW5jaEltbWVkaWF0ZShmcm9tLCBsaW5rLCBpbW0yNikpIHsKKyAgICAgICAgICAgIGlzVW5j
b25kaXRpb25hbEJyYW5jaEltbWVkaWF0ZU9yTm9wID0gdHJ1ZTsKKyAgICAgICAgICAgIGludHB0
cl90IHByZXZpb3VzT2Zmc2V0ID0gaW1tMjYgPDwgMjsKKyAgICAgICAgICAgIGlmIChwcmV2aW91
c09mZnNldCkgeworICAgICAgICAgICAgICAgIC8vIFdoZW4gZW1pdHRpbmcgYnJhbmNoZXMgYmVm
b3JlIGxpbmtpbmcgdGhlbSwgd2UgZW1pdCB0aGVtIHdpdGggb2Zmc2V0cyBvZiB6ZXJvLiBUaGlz
CisgICAgICAgICAgICAgICAgLy8gbWVhbnMgaXQgY291bGRuJ3QgaGF2ZSBqdW1wZWQgdG8gYW4g
aXNsYW5kIGJlZm9yZSwgc28ganVzdCBpZ25vcmUgcnVubmluZyBleHRyYSBjb2RlCisgICAgICAg
ICAgICAgICAgLy8gaW4gdGhlIGlzbGFuZCBhbGxvY2F0b3IuCisgICAgICAgICAgICAgICAgcHJl
dmlvdXNUYXJnZXQgPSBiaXR3aXNlX2Nhc3Q8dm9pZCo+KGJpdHdpc2VfY2FzdDxpbnRwdHJfdD4o
ZnJvbUluc3RydWN0aW9uKSArIHByZXZpb3VzT2Zmc2V0KTsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgfSBlbHNlIGlmIChkaXNhc3NlbWJsZU5vcChmcm9tKSkKKyAgICAgICAgICAgIGlzVW5jb25k
aXRpb25hbEJyYW5jaEltbWVkaWF0ZU9yTm9wID0gdHJ1ZTsKIAogICAgICAgICBBU1NFUlRfVU5V
U0VEKGlzVW5jb25kaXRpb25hbEJyYW5jaEltbWVkaWF0ZU9yTm9wLCBpc1VuY29uZGl0aW9uYWxC
cmFuY2hJbW1lZGlhdGVPck5vcCk7CiAgICAgICAgIGNvbnN0ZXhwciBib29sIGlzQ2FsbCA9ICh0
eXBlID09IEJyYW5jaFR5cGVfQ0FMTCk7CkBAIC0yOTk0LDkgKzMwMDgsMTUgQEAgcHJvdGVjdGVk
OgogICAgICAgICBBU1NFUlQoIShyZWludGVycHJldF9jYXN0PGludHB0cl90Pih0bykgJiAzKSk7
CiAgICAgICAgIGFzc2VydElzTm90VGFnZ2VkKHRvKTsKICAgICAgICAgYXNzZXJ0SXNOb3RUYWdn
ZWQoZnJvbUluc3RydWN0aW9uKTsKLSAgICAgICAgaW50cHRyX3Qgb2Zmc2V0ID0gKHJlaW50ZXJw
cmV0X2Nhc3Q8aW50cHRyX3Q+KHRvKSAtIHJlaW50ZXJwcmV0X2Nhc3Q8aW50cHRyX3Q+KGZyb21J
bnN0cnVjdGlvbikpID4+IDI7CisgICAgICAgIGludHB0cl90IG9mZnNldCA9IChiaXR3aXNlX2Nh
c3Q8aW50cHRyX3Q+KHRvKSAtIGJpdHdpc2VfY2FzdDxpbnRwdHJfdD4oZnJvbUluc3RydWN0aW9u
KSkgPj4gMjsKICAgICAgICAgQVNTRVJUKHN0YXRpY19jYXN0PGludD4ob2Zmc2V0KSA9PSBvZmZz
ZXQpOwogCisgICAgICAgIGlmICghaXNJbnQ8MjY+KG9mZnNldCkpIHsKKyAgICAgICAgICAgIHRv
ID0gRXhlY3V0YWJsZUFsbG9jYXRvcjo6c2luZ2xldG9uKCkuZ2V0SnVtcElzbGFuZFRvKGJpdHdp
c2VfY2FzdDx2b2lkKj4oZnJvbUluc3RydWN0aW9uKSwgcHJldmlvdXNUYXJnZXQsIHRvKTsKKyAg
ICAgICAgICAgIG9mZnNldCA9IChiaXR3aXNlX2Nhc3Q8aW50cHRyX3Q+KHRvKSAtIGJpdHdpc2Vf
Y2FzdDxpbnRwdHJfdD4oZnJvbUluc3RydWN0aW9uKSkgPj4gMjsKKyAgICAgICAgICAgIFJFTEVB
U0VfQVNTRVJUKGlzSW50PDI2PihvZmZzZXQpKTsKKyAgICAgICAgfQorCiAgICAgICAgIGludCBp
bnNuID0gdW5jb25kaXRpb25hbEJyYW5jaEltbWVkaWF0ZShpc0NhbGwsIHN0YXRpY19jYXN0PGlu
dD4ob2Zmc2V0KSk7CiAgICAgICAgIFJFTEVBU0VfQVNTRVJUKHJvdW5kVXBUb011bHRpcGxlT2Y8
aW5zdHJ1Y3Rpb25TaXplPihmcm9tKSA9PSBmcm9tKTsKICAgICAgICAgY29weShmcm9tLCAmaW5z
biwgc2l6ZW9mKGludCkpOwpAQCAtMzAwOCw3ICszMDI4LDcgQEAgcHJvdGVjdGVkOgogICAgICAg
ICBBU1NFUlQoIShyZWludGVycHJldF9jYXN0PGludHB0cl90Pihmcm9tKSAmIDMpKTsKICAgICAg
ICAgQVNTRVJUKCEocmVpbnRlcnByZXRfY2FzdDxpbnRwdHJfdD4odG8pICYgMykpOwogICAgICAg
ICBpbnRwdHJfdCBvZmZzZXQgPSAocmVpbnRlcnByZXRfY2FzdDxpbnRwdHJfdD4odG8pIC0gcmVp
bnRlcnByZXRfY2FzdDxpbnRwdHJfdD4oZnJvbUluc3RydWN0aW9uKSkgPj4gMjsKLSAgICAgICAg
QVNTRVJUKGlzSW50PDI2PihvZmZzZXQpKTsKKyAgICAgICAgLy9BU1NFUlQoaXNJbnQ8MjY+KG9m
ZnNldCkpOyAvL09PUFMKIAogICAgICAgICBib29sIHVzZURpcmVjdCA9IGlzSW50PDE5PihvZmZz
ZXQpOwogICAgICAgICBBU1NFUlQodHlwZSA9PSBJbmRpcmVjdEJyYW5jaCB8fCB1c2VEaXJlY3Qp
OwpAQCAtMzAzNiw3ICszMDU2LDcgQEAgcHJvdGVjdGVkOgogICAgICAgICBBU1NFUlQoIShyZWlu
dGVycHJldF9jYXN0PGludHB0cl90Pihmcm9tKSAmIDMpKTsKICAgICAgICAgQVNTRVJUKCEocmVp
bnRlcnByZXRfY2FzdDxpbnRwdHJfdD4odG8pICYgMykpOwogICAgICAgICBpbnRwdHJfdCBvZmZz
ZXQgPSAocmVpbnRlcnByZXRfY2FzdDxpbnRwdHJfdD4odG8pIC0gcmVpbnRlcnByZXRfY2FzdDxp
bnRwdHJfdD4oZnJvbUluc3RydWN0aW9uKSkgPj4gMjsKLSAgICAgICAgQVNTRVJUKGlzSW50PDI2
PihvZmZzZXQpKTsKKyAgICAgICAgLy8gQVNTRVJUKGlzSW50PDI2PihvZmZzZXQpKTsgT09QUwog
CiAgICAgICAgIGJvb2wgdXNlRGlyZWN0ID0gaXNJbnQ8MTk+KG9mZnNldCk7CiAgICAgICAgIEFT
U0VSVCh0eXBlID09IEluZGlyZWN0QnJhbmNoIHx8IHVzZURpcmVjdCk7CkBAIC0zMDY1LDcgKzMw
ODUsNyBAQCBwcm90ZWN0ZWQ6CiAgICAgICAgIEFTU0VSVCghKHJlaW50ZXJwcmV0X2Nhc3Q8aW50
cHRyX3Q+KHRvKSAmIDMpKTsKICAgICAgICAgaW50cHRyX3Qgb2Zmc2V0ID0gKHJlaW50ZXJwcmV0
X2Nhc3Q8aW50cHRyX3Q+KHRvKSAtIHJlaW50ZXJwcmV0X2Nhc3Q8aW50cHRyX3Q+KGZyb21JbnN0
cnVjdGlvbikpID4+IDI7CiAgICAgICAgIEFTU0VSVChzdGF0aWNfY2FzdDxpbnQ+KG9mZnNldCkg
PT0gb2Zmc2V0KTsKLSAgICAgICAgQVNTRVJUKGlzSW50PDI2PihvZmZzZXQpKTsKKyAgICAgICAg
Ly9BU1NFUlQoaXNJbnQ8MjY+KG9mZnNldCkpOyBPT1BTCiAKICAgICAgICAgYm9vbCB1c2VEaXJl
Y3QgPSBpc0ludDwxND4ob2Zmc2V0KTsKICAgICAgICAgQVNTRVJUKHR5cGUgPT0gSW5kaXJlY3RC
cmFuY2ggfHwgdXNlRGlyZWN0KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJs
ZXIvTGlua0J1ZmZlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Fz
c2VtYmxlci9MaW5rQnVmZmVyLmNwcAkocmV2aXNpb24gMjU3ODY2KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2Fzc2VtYmxlci9MaW5rQnVmZmVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzQ0
LDcgKzM0NCw4IEBAIHZvaWQgTGlua0J1ZmZlcjo6YWxsb2NhdGUoTWFjcm9Bc3NlbWJsZXIKICAg
ICAgICAgaW5pdGlhbFNpemUgPSBtYWNyb0Fzc2VtYmxlci5tX2Fzc2VtYmxlci5jb2RlU2l6ZSgp
OwogICAgIH0KIAotICAgIG1fZXhlY3V0YWJsZU1lbW9yeSA9IEV4ZWN1dGFibGVBbGxvY2F0b3I6
OnNpbmdsZXRvbigpLmFsbG9jYXRlKGluaXRpYWxTaXplLCBvd25lclVJRCwgZWZmb3J0KTsKKyAg
ICBVTlVTRURfUEFSQU0ob3duZXJVSUQpOyAvLyBPT1BTOiBnZXQgcmlkIG9mIG93bmVyVUlEPwor
ICAgIG1fZXhlY3V0YWJsZU1lbW9yeSA9IEV4ZWN1dGFibGVBbGxvY2F0b3I6OnNpbmdsZXRvbigp
LmFsbG9jYXRlKGluaXRpYWxTaXplLCBlZmZvcnQpOwogICAgIGlmICghbV9leGVjdXRhYmxlTWVt
b3J5KQogICAgICAgICByZXR1cm47CiAgICAgbV9jb2RlID0gTWFjcm9Bc3NlbWJsZXJDb2RlUHRy
PExpbmtCdWZmZXJQdHJUYWc+KG1fZXhlY3V0YWJsZU1lbW9yeS0+c3RhcnQoKS5yZXRhZ2dlZFB0
cjxMaW5rQnVmZmVyUHRyVGFnPigpKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3Nl
bWJsZXIvTWFjcm9Bc3NlbWJsZXJDb2RlUmVmLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlckNvZGVSZWYuaAkocmV2aXNpb24gMjU3
ODY2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlckNv
ZGVSZWYuaAkod29ya2luZyBjb3B5KQpAQCAtNDM0LDcgKzQzNCw2IEBAIHB1YmxpYzoKICAgICAg
ICAgOiBtX2NvZGVQdHIoZXhlY3V0YWJsZU1lbW9yeS0+c3RhcnQoKS5yZXRhZ2dlZFB0cjx0YWc+
KCkpCiAgICAgICAgICwgbV9leGVjdXRhYmxlTWVtb3J5KFdURk1vdmUoZXhlY3V0YWJsZU1lbW9y
eSkpCiAgICAgewotICAgICAgICBBU1NFUlQobV9leGVjdXRhYmxlTWVtb3J5LT5pc01hbmFnZWQo
KSk7CiAgICAgICAgIEFTU0VSVChtX2V4ZWN1dGFibGVNZW1vcnktPnN0YXJ0KCkpOwogICAgICAg
ICBBU1NFUlQobV9jb2RlUHRyKTsKICAgICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L0V4ZWN1dGFibGVBbGxvY2F0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvRXhlY3V0YWJsZUFsbG9jYXRvci5jcHAJKHJldmlzaW9uIDI1Nzg2NikKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvRXhlY3V0YWJsZUFsbG9jYXRvci5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTI4LDkgKzI4LDEwIEBACiAKICNpZiBFTkFCTEUoSklUKQogCi0jaW5jbHVk
ZSAiQ29kZVByb2ZpbGluZy5oIgogI2luY2x1ZGUgIkV4ZWN1dGFibGVBbGxvY2F0aW9uRnV6ei5o
IgorI2luY2x1ZGUgIkl0ZXJhdGlvblN0YXR1cy5oIgogI2luY2x1ZGUgIkpTQ0lubGluZXMuaCIK
KyNpbmNsdWRlIDx0eXBlX3RyYWl0cz4KICNpbmNsdWRlIDx3dGYvRmlsZVN5c3RlbS5oPgogI2lu
Y2x1ZGUgPHd0Zi9NZXRhQWxsb2NhdG9yLmg+CiAjaW5jbHVkZSA8d3RmL1BhZ2VSZXNlcnZhdGlv
bi5oPgpAQCAtOTYsOSArOTcsMTQgQEAgc3RhdGljIGNvbnN0ZXhwciBzaXplX3QgZml4ZWRFeGVj
dXRhYmxlTQogI2VsaWYgQ1BVKEFSTSkKIHN0YXRpYyBjb25zdGV4cHIgc2l6ZV90IGZpeGVkRXhl
Y3V0YWJsZU1lbW9yeVBvb2xTaXplID0gMTYgKiAxMDI0ICogMTAyNDsKICNlbGlmIENQVShBUk02
NCkKLXN0YXRpYyBjb25zdGV4cHIgc2l6ZV90IGZpeGVkRXhlY3V0YWJsZU1lbW9yeVBvb2xTaXpl
ID0gMTI4ICogMTAyNCAqIDEwMjQ7CitzdGF0aWMgY29uc3RleHByIHNpemVfdCBmaXhlZEV4ZWN1
dGFibGVNZW1vcnlQb29sU2l6ZSA9IDEgKiAxMDI0ICogMTAyNCAqIDEwMjQ7CitzdGF0aWMgY29u
c3RleHByIHNpemVfdCByZWdpb25TaXplID0gMTI4ICogMTAyNCAqIDEwMjQ7CitzdGF0aWMgY29u
c3RleHByIHNpemVfdCBpc2xhbmRSZWdpb25TaXplID0gNjQgKiAxMDI0ICogMTAyNDsKK3N0YXRp
YyBjb25zdGV4cHIgc2l6ZV90IG51bWJlck9mUmVnaW9ucyA9IGZpeGVkRXhlY3V0YWJsZU1lbW9y
eVBvb2xTaXplIC8gcmVnaW9uU2l6ZTsKK3N0YXRpYyBjb25zdGV4cHIgc2l6ZV90IGlzbGFuZFNp
emVJbkJ5dGVzID0gMTY7CitzdGF0aWMgY29uc3RleHByIHNpemVfdCBtYXhJc2xhbmRzUGVyUmVn
aW9uID0gaXNsYW5kUmVnaW9uU2l6ZSAvIGlzbGFuZFNpemVJbkJ5dGVzOwogI2VsaWYgQ1BVKFg4
Nl82NCkKLXN0YXRpYyBjb25zdGV4cHIgc2l6ZV90IGZpeGVkRXhlY3V0YWJsZU1lbW9yeVBvb2xT
aXplID0gMTAyNCAqIDEwMjQgKiAxMDI0Oworc3RhdGljIGNvbnN0ZXhwciBzaXplX3QgZml4ZWRF
eGVjdXRhYmxlTWVtb3J5UG9vbFNpemUgPSAxICogMTAyNCAqIDEwMjQgKiAxMDI0OwogI2Vsc2UK
IHN0YXRpYyBjb25zdGV4cHIgc2l6ZV90IGZpeGVkRXhlY3V0YWJsZU1lbW9yeVBvb2xTaXplID0g
MzIgKiAxMDI0ICogMTAyNDsKICNlbmRpZgpAQCAtMzEzLDkgKzMxOSwxMCBAQCBzdGF0aWMgQUxX
QVlTX0lOTElORSBKSVRSZXNlcnZhdGlvbiBpbml0CiAgICAgaWYgKCFpc0pJVEVuYWJsZWQoKSkK
ICAgICAgICAgcmV0dXJuIHJlc2VydmF0aW9uOwogCi0gICAgaWYgKE9wdGlvbnM6OmppdE1lbW9y
eVJlc2VydmF0aW9uU2l6ZSgpKQotICAgICAgICByZXNlcnZhdGlvbi5zaXplID0gT3B0aW9uczo6
aml0TWVtb3J5UmVzZXJ2YXRpb25TaXplKCk7Ci0gICAgZWxzZQorICAgIC8vIE9PUFMhCisgICAg
Ly9pZiAoT3B0aW9uczo6aml0TWVtb3J5UmVzZXJ2YXRpb25TaXplKCkpCisgICAgLy8gICAgcmVz
ZXJ2YXRpb24uc2l6ZSA9IE9wdGlvbnM6OmppdE1lbW9yeVJlc2VydmF0aW9uU2l6ZSgpOworICAg
IC8vZWxzZQogICAgICAgICByZXNlcnZhdGlvbi5zaXplID0gZml4ZWRFeGVjdXRhYmxlTWVtb3J5
UG9vbFNpemU7CiAgICAgcmVzZXJ2YXRpb24uc2l6ZSA9IHN0ZDo6bWF4KHJvdW5kVXBUb011bHRp
cGxlT2YocGFnZVNpemUoKSwgcmVzZXJ2YXRpb24uc2l6ZSksIHBhZ2VTaXplKCkgKiAyKTsKIApA
QCAtMzYzLDUyICszNzAsMzY5IEBAIHN0YXRpYyBBTFdBWVNfSU5MSU5FIEpJVFJlc2VydmF0aW9u
IGluaXQKICAgICByZXR1cm4gcmVzZXJ2YXRpb247CiB9CiAKLWNsYXNzIEZpeGVkVk1Qb29sRXhl
Y3V0YWJsZUFsbG9jYXRvciBmaW5hbCA6IHB1YmxpYyBNZXRhQWxsb2NhdG9yIHsKK2NsYXNzIEZp
eGVkVk1Qb29sRXhlY3V0YWJsZUFsbG9jYXRvciBmaW5hbCB7CiAgICAgV1RGX01BS0VfRkFTVF9B
TExPQ0FURUQ7CiBwdWJsaWM6CiAgICAgRml4ZWRWTVBvb2xFeGVjdXRhYmxlQWxsb2NhdG9yKCkK
LSAgICAgICAgOiBNZXRhQWxsb2NhdG9yKGppdEFsbG9jYXRpb25HcmFudWxlKSAvLyByb3VuZCB1
cCBhbGwgYWxsb2NhdGlvbnMgdG8gMzIgYnl0ZXMKKyNpZiBDUFUoQVJNNjQpCisgICAgICAgIDog
bV9hbGxvY2F0b3JzKGNvbnN0cnVjdEZpeGVkU2l6ZUFycmF5V2l0aEFyZ3VtZW50czxSZWdpb25B
bGxvY2F0b3IsIG51bWJlck9mUmVnaW9ucz4obV9sb2NrKSkKKyNlbHNlCisgICAgICAgIDogbV9h
bGxvY2F0b3IobV9sb2NrKQorI2VuZGlmCiAgICAgeworICAgICAgICBmb3JFYWNoQWxsb2NhdG9y
KFsmXSAoQWxsb2NhdG9yJiBhbGxvY2F0b3IpIHsKKyAgICAgICAgICAgIGFsbG9jYXRvci5tX2Zp
eGVkQWxsb2NhdG9yID0gdGhpczsKKyAgICAgICAgfSk7CisKICAgICAgICAgSklUUmVzZXJ2YXRp
b24gcmVzZXJ2YXRpb24gPSBpbml0aWFsaXplSklUUGFnZVJlc2VydmF0aW9uKCk7CiAgICAgICAg
IG1fcmVzZXJ2YXRpb24gPSBXVEZNb3ZlKHJlc2VydmF0aW9uLnBhZ2VSZXNlcnZhdGlvbik7CiAg
ICAgICAgIGlmIChtX3Jlc2VydmF0aW9uKSB7Ci0gICAgICAgICAgICBhZGRGcmVzaEZyZWVTcGFj
ZShyZXNlcnZhdGlvbi5iYXNlLCByZXNlcnZhdGlvbi5zaXplKTsKKyNpZiBDUFUoQVJNNjQpCisg
ICAgICAgICAgICB1aW50cHRyX3Qgc3RhcnQgPSBiaXR3aXNlX2Nhc3Q8dWludHB0cl90PihtX3Jl
c2VydmF0aW9uLmJhc2UoKSk7CisgICAgICAgICAgICB1aW50cHRyX3QgcmVzZXJ2YXRpb25FbmQg
PSBzdGFydCArIG1fcmVzZXJ2YXRpb24uc2l6ZSgpOworICAgICAgICAgICAgZm9yIChzaXplX3Qg
aSA9IDA7IGkgPCBudW1iZXJPZlJlZ2lvbnM7ICsraSkgeworICAgICAgICAgICAgICAgIFJFTEVB
U0VfQVNTRVJUKHN0YXJ0IDwgcmVzZXJ2YXRpb25FbmQpOworICAgICAgICAgICAgICAgIG1fYWxs
b2NhdG9yc1tpXS5zdGFydCA9IHN0YXJ0OworICAgICAgICAgICAgICAgIG1fYWxsb2NhdG9yc1tp
XS5lbmQgPSBzdGFydCArIHJlZ2lvblNpemU7CisgICAgICAgICAgICAgICAgaWYgKG1fYWxsb2Nh
dG9yc1tpXS5lbmQgPiByZXNlcnZhdGlvbkVuZCkgeworICAgICAgICAgICAgICAgICAgICAvLyBX
ZSBtYXkgaGF2ZSB0YWtlbiBhIHBhZ2UgZm9yIHRoZSBleGVjdXRhYmxlIG9ubHkgY29weSB0aHVu
ay4KKyAgICAgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoaSA9PSBudW1iZXJPZlJlZ2lv
bnMgLSAxKTsKKyAgICAgICAgICAgICAgICAgICAgbV9hbGxvY2F0b3JzW2ldLmVuZCA9IHJlc2Vy
dmF0aW9uRW5kOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIG1fYWxsb2Nh
dG9yc1tpXS5hZGRGcmVzaEZyZWVTcGFjZShiaXR3aXNlX2Nhc3Q8dm9pZCo+KG1fYWxsb2NhdG9y
c1tpXS5zdGFydCksIG1fYWxsb2NhdG9yc1tpXS5hbGxvY2F0b3JTaXplKCkpOworCisgICAgICAg
ICAgICAgICAgc3RhcnQgKz0gcmVnaW9uU2l6ZTsKKyAgICAgICAgICAgIH0KKyNlbHNlCisgICAg
ICAgICAgICBtX2FsbG9jYXRvci5hZGRGcmVzaEZyZWVTcGFjZShyZXNlcnZhdGlvbi5iYXNlLCBy
ZXNlcnZhdGlvbi5zaXplKTsKKyNlbmRpZgorCiAgICAgICAgICAgICBBU1NFUlQoYnl0ZXNSZXNl
cnZlZCgpID09IHJlc2VydmF0aW9uLnNpemUpOyAvLyBTaW5jZSBvdXIgZXhlY3V0YWJsZSBtZW1v
cnkgaXMgZml4ZWQtc2l6ZWQsIGJ5dGVzUmVzZXJ2ZWQgaXMgbmV2ZXIgY2hhbmdlZCBhZnRlciBp
bml0aWFsaXphdGlvbi4KICAgICAgICAgfQogICAgIH0KIAotICAgIHZpcnR1YWwgfkZpeGVkVk1Q
b29sRXhlY3V0YWJsZUFsbG9jYXRvcigpOworICAgIH5GaXhlZFZNUG9vbEV4ZWN1dGFibGVBbGxv
Y2F0b3IoKQorICAgIHsKKyAgICAgICAgbV9yZXNlcnZhdGlvbi5kZWFsbG9jYXRlKCk7CisgICAg
fQogCiAgICAgdm9pZCogbWVtb3J5U3RhcnQoKSB7IHJldHVybiB1bnRhZ0NvZGVQdHI8RXhlY3V0
YWJsZU1lbW9yeVB0clRhZz4oZ19qc2NDb25maWcuc3RhcnRFeGVjdXRhYmxlTWVtb3J5KTsgfQog
ICAgIHZvaWQqIG1lbW9yeUVuZCgpIHsgcmV0dXJuIHVudGFnQ29kZVB0cjxFeGVjdXRhYmxlTWVt
b3J5UHRyVGFnPihnX2pzY0NvbmZpZy5lbmRFeGVjdXRhYmxlTWVtb3J5KTsgfQogICAgIGJvb2wg
aXNKSVRQQyh2b2lkKiBwYykgeyByZXR1cm4gbWVtb3J5U3RhcnQoKSA8PSBwYyAmJiBwYyA8IG1l
bW9yeUVuZCgpOyB9CisgICAgYm9vbCBpc1ZhbGlkKCkgeyByZXR1cm4gISFtX3Jlc2VydmF0aW9u
OyB9CiAKLXByb3RlY3RlZDoKLSAgICBGcmVlU3BhY2VQdHIgYWxsb2NhdGVOZXdTcGFjZShzaXpl
X3QmKSBvdmVycmlkZQorICAgIFJlZlB0cjxFeGVjdXRhYmxlTWVtb3J5SGFuZGxlPiBhbGxvY2F0
ZShzaXplX3Qgc2l6ZUluQnl0ZXMpCiAgICAgewotICAgICAgICAvLyBXZSdyZSBvcGVyYXRpbmcg
aW4gYSBmaXhlZCBwb29sLCBzbyBuZXcgYWxsb2NhdGlvbiBpcyBhbHdheXMgcHJvaGliaXRlZC4K
KyNpZiBDUFUoQVJNNjQpCisgICAgICAgIC8vIE9PUFM6IHBpcGUgdGhyb3VnaCBsb2NrIHRvIGFs
bG9jYXRvcnMKKyAgICAgICAgYXV0byBsb2NrSG9sZGVyID0gaG9sZExvY2soZ2V0TG9jaygpKTsK
KyAgICAgICAgCisgICAgICAgIHVuc2lnbmVkIHN0YXJ0ID0gY3J5cHRvZ3JhcGhpY2FsbHlSYW5k
b21OdW1iZXIoKSAlIG1fYWxsb2NhdG9ycy5zaXplKCk7CisgICAgICAgIHVuc2lnbmVkIGkgPSBz
dGFydDsKKyAgICAgICAgd2hpbGUgKHRydWUpIHsKKyAgICAgICAgICAgIFJlZ2lvbkFsbG9jYXRv
ciYgYWxsb2NhdG9yID0gbV9hbGxvY2F0b3JzW2ldOworICAgICAgICAgICAgaWYgKFJlZlB0cjxF
eGVjdXRhYmxlTWVtb3J5SGFuZGxlPiByZXN1bHQgPSBhbGxvY2F0b3IuYWxsb2NhdGUoc2l6ZUlu
Qnl0ZXMpKQorICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgICAgICAgICBpID0g
aSArIDE7CisgICAgICAgICAgICBpID0gaSAlIG1fYWxsb2NhdG9ycy5zaXplKCk7CisgICAgICAg
ICAgICBpZiAoaSA9PSBzdGFydCkKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQog
ICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyNlbHNlCisgICAgICAgIHJldHVybiBtX2FsbG9jYXRv
ci5hbGxvY2F0ZShzaXplSW5CeXRlcyk7CisjZW5kaWYKICAgICB9CiAKLSAgICB2b2lkIG5vdGlm
eU5lZWRQYWdlKHZvaWQqIHBhZ2UsIHNpemVfdCBjb3VudCkgb3ZlcnJpZGUKKyAgICBMb2NrJiBn
ZXRMb2NrKCkgeyByZXR1cm4gbV9sb2NrOyB9CisKKyAgICAvLyBOb24gYXRvbWljCisgICAgc2l6
ZV90IGJ5dGVzQWxsb2NhdGVkKCkgCiAgICAgewotICAgICAgICBtX3Jlc2VydmF0aW9uLmNvbW1p
dChwYWdlLCBwYWdlU2l6ZSgpICogY291bnQpOworICAgICAgICBzaXplX3QgcmVzdWx0ID0gMDsK
KyAgICAgICAgZm9yRWFjaEFsbG9jYXRvcihbJl0gKEFsbG9jYXRvciYgYWxsb2NhdG9yKSB7Cisg
ICAgICAgICAgICByZXN1bHQgKz0gYWxsb2NhdG9yLmJ5dGVzQWxsb2NhdGVkKCk7CisgICAgICAg
IH0pOworICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgIH0KKyAgICBzaXplX3QgYnl0ZXNSZXNl
cnZlZCgpIAorICAgIHsKKyAgICAgICAgc2l6ZV90IHJlc3VsdCA9IDA7CisgICAgICAgIGZvckVh
Y2hBbGxvY2F0b3IoWyZdIChBbGxvY2F0b3ImIGFsbG9jYXRvcikgeworICAgICAgICAgICAgcmVz
dWx0ICs9IGFsbG9jYXRvci5ieXRlc1Jlc2VydmVkKCk7CisgICAgICAgIH0pOworICAgICAgICBy
ZXR1cm4gcmVzdWx0OworICAgIH0KKyAgICBzaXplX3QgYnl0ZXNDb21taXR0ZWQoKQorICAgIHsK
KyAgICAgICAgc2l6ZV90IHJlc3VsdCA9IDA7CisgICAgICAgIGZvckVhY2hBbGxvY2F0b3IoWyZd
IChBbGxvY2F0b3ImIGFsbG9jYXRvcikgeworICAgICAgICAgICAgcmVzdWx0ICs9IGFsbG9jYXRv
ci5ieXRlc0NvbW1pdHRlZCgpOworICAgICAgICB9KTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsK
KyAgICB9CisKKyAgICBib29sIGlzSW5BbGxvY2F0ZWRNZW1vcnkoY29uc3QgQWJzdHJhY3RMb2Nr
ZXImIGxvY2tlciwgdm9pZCogYWRkcmVzcykKKyAgICB7CisgICAgICAgIGJvb2wgcmVzdWx0ID0g
ZmFsc2U7CisgICAgICAgIGZvckVhY2hBbGxvY2F0b3IoWyZdIChBbGxvY2F0b3ImIGFsbG9jYXRv
cikgeworICAgICAgICAgICAgaWYgKGFsbG9jYXRvci5pc0luQWxsb2NhdGVkTWVtb3J5KGxvY2tl
ciwgYWRkcmVzcykpIHsKKyAgICAgICAgICAgICAgICByZXN1bHQgPSB0cnVlOworICAgICAgICAg
ICAgICAgIHJldHVybiBJdGVyYXRpb25TdGF0dXM6OkRvbmU7CisgICAgICAgICAgICB9CisgICAg
ICAgICAgICByZXR1cm4gSXRlcmF0aW9uU3RhdHVzOjpDb250aW51ZTsKKyAgICAgICAgfSk7CisK
KyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisKKyNpZiBFTkFCTEUoTUVUQV9BTExPQ0FU
T1JfUFJPRklMRSkKKyAgICB2b2lkIGR1bXBQcm9maWxlKCkKKyAgICB7CisgICAgICAgIGZvckVh
Y2hBbGxvY2F0b3IoWyZdIChBbGxvY2F0b3ImIGFsbG9jYXRvcikgeworICAgICAgICAgICAgYWxs
b2NhdG9yLmR1bXBQcm9maWxlKCk7CisgICAgICAgIH0pOworICAgIH0KKyNlbmRpZgorCisgICAg
TWV0YUFsbG9jYXRvcjo6U3RhdGlzdGljcyBjdXJyZW50U3RhdGlzdGljcygpCisgICAgeworICAg
ICAgICAvLyBPT1BTOiBtYWtlIGF0b21pYyBieSBob2xkaW5nIGxvY2suLi4KKyAgICAgICAgTWV0
YUFsbG9jYXRvcjo6U3RhdGlzdGljcyByZXN1bHQgeyAwLCAwLCAwIH07CisgICAgICAgIGZvckVh
Y2hBbGxvY2F0b3IoWyZdIChBbGxvY2F0b3ImIGFsbG9jYXRvcikgeworICAgICAgICAgICAgYXV0
byBhbGxvY2F0b3JTdGF0cyA9IGFsbG9jYXRvci5jdXJyZW50U3RhdGlzdGljcygpOworICAgICAg
ICAgICAgcmVzdWx0LmJ5dGVzQWxsb2NhdGVkICs9IGFsbG9jYXRvclN0YXRzLmJ5dGVzQWxsb2Nh
dGVkOworICAgICAgICAgICAgcmVzdWx0LmJ5dGVzUmVzZXJ2ZWQgKz0gYWxsb2NhdG9yU3RhdHMu
Ynl0ZXNSZXNlcnZlZDsKKyAgICAgICAgICAgIHJlc3VsdC5ieXRlc0NvbW1pdHRlZCArPSBhbGxv
Y2F0b3JTdGF0cy5ieXRlc0NvbW1pdHRlZDsKKyAgICAgICAgfSk7CisgICAgICAgIHJldHVybiBy
ZXN1bHQ7CisgICAgfQorCisjaWYgQ1BVKEFSTTY0KQorcHJpdmF0ZToKKyAgICBjbGFzcyBSZWdp
b25BbGxvY2F0b3I7CisKKyAgICBSZWdpb25BbGxvY2F0b3IqIGZpbmRSZWdpb24odWludHB0cl90
IHB0cikKKyAgICB7CisgICAgICAgIFJlZ2lvbkFsbG9jYXRvciogcmVzdWx0ID0gbnVsbHB0cjsK
KyAgICAgICAgZm9yRWFjaEFsbG9jYXRvcihbJl0gKFJlZ2lvbkFsbG9jYXRvciYgYWxsb2NhdG9y
KSB7CisgICAgICAgICAgICBpZiAoYWxsb2NhdG9yLnN0YXJ0IDw9IHB0ciAmJiBwdHIgPCBhbGxv
Y2F0b3IuZW5kKSB7CisgICAgICAgICAgICAgICAgcmVzdWx0ID0gJmFsbG9jYXRvcjsKKyAgICAg
ICAgICAgICAgICByZXR1cm4gSXRlcmF0aW9uU3RhdHVzOjpEb25lOworICAgICAgICAgICAgfQor
ICAgICAgICAgICAgcmV0dXJuIEl0ZXJhdGlvblN0YXR1czo6Q29udGludWU7CisgICAgICAgIH0p
OworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKworICAgIHZvaWQqIGlzbGFuZEZvckp1
bXBMb2NhdGlvbih1aW50cHRyX3QganVtcExvY2F0aW9uLCB1aW50cHRyX3Qgb2xkVGFyZ2V0KQor
ICAgIHsKKyAgICAgICAgUmVnaW9uQWxsb2NhdG9yKiBhbGxvY2F0b3IgPSBmaW5kUmVnaW9uKGp1
bXBMb2NhdGlvbik7CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKGFsbG9jYXRvcik7CisKKyAgICAg
ICAgLy8gSWYgd2Ugd2VyZSBhbHJlYWR5IGFuIGlzbGFuZCwgd2UgY2FuIGp1c3QgcmV1c2UgaXQu
CisgICAgICAgIGlmIChhbGxvY2F0b3ItPmlzbGFuZEJlZ2luKCkgPD0gb2xkVGFyZ2V0ICYmIG9s
ZFRhcmdldCA8IGFsbG9jYXRvci0+ZW5kKSB7CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChh
bGxvY2F0b3ItPmp1bXBMb2NhdGlvbnNUb0lzbGFuZHMuY29udGFpbnMoanVtcExvY2F0aW9uKSk7
CisgICAgICAgICAgICByZXR1cm4gYml0d2lzZV9jYXN0PHZvaWQqPihvbGRUYXJnZXQpOworICAg
ICAgICB9CisKKyAgICAgICAgdm9pZCogcmVzdWx0ID0gYWxsb2NhdG9yLT5hbGxvY2F0ZUlzbGFu
ZCgpOworICAgICAgICBhbGxvY2F0b3ItPmp1bXBMb2NhdGlvbnNUb0lzbGFuZHMuYXBwZW5kKGp1
bXBMb2NhdGlvbik7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorCitwdWJsaWM6CiAK
LSAgICB2b2lkIG5vdGlmeVBhZ2VJc0ZyZWUodm9pZCogcGFnZSwgc2l6ZV90IGNvdW50KSBvdmVy
cmlkZQorICAgIHZvaWQqIG1ha2VJc2xhbmQodWludHB0cl90IGp1bXBMb2NhdGlvbiwgdWludHB0
cl90IG9sZFRhcmdldCwgdWludHB0cl90IG5ld1RhcmdldCkKICAgICB7Ci0gICAgICAgIG1fcmVz
ZXJ2YXRpb24uZGVjb21taXQocGFnZSwgcGFnZVNpemUoKSAqIGNvdW50KTsKKyAgICAgICAgYXV0
byBsb2NrSG9sZGVyID0gaG9sZExvY2soZ2V0TG9jaygpKTsKKworICAgICAgICAvLyBPT1BTOiB0
aHJlYWQgdGhpcyB0aHJvdWdoIGEgc2VyaWVzIG9mIGp1bXBzLgorICAgICAgICB2b2lkKiBpc2xh
bmQgPSBpc2xhbmRGb3JKdW1wTG9jYXRpb24oanVtcExvY2F0aW9uLCBvbGRUYXJnZXQpOworICAg
ICAgICBDQ2FsbEhlbHBlcnMgaml0OworICAgICAgICBqaXQubW92ZShDQ2FsbEhlbHBlcnM6OlRy
dXN0ZWRJbW1QdHIobmV3VGFyZ2V0KSwgQ0NhbGxIZWxwZXJzOjpkYXRhVGVtcFJlZ2lzdGVyKTsK
KyAgICAgICAgaml0LmZhckp1bXAoQ0NhbGxIZWxwZXJzOjpkYXRhVGVtcFJlZ2lzdGVyLCBOb1B0
clRhZyk7CisKKyAgICAgICAgTGlua0J1ZmZlciBsaW5rQnVmZmVyKGppdCwgTWFjcm9Bc3NlbWJs
ZXJDb2RlUHRyPE5vUHRyVGFnPihpc2xhbmQpLCBpc2xhbmRTaXplSW5CeXRlcywgSklUQ29tcGls
YXRpb25NdXN0U3VjY2VlZCwgZmFsc2UpOworICAgICAgICBhdXRvIHJlc3VsdCA9IEZJTkFMSVpF
X0NPREUobGlua0J1ZmZlciwgTm9QdHJUYWcsICJKdW1wIElzbGFuZDogJWx1IiwganVtcExvY2F0
aW9uKTsKKyAgICAgICAgcmV0dXJuIGlzbGFuZDsKICAgICB9CisjZW5kaWYKIAogcHJpdmF0ZToK
KyAgICBjbGFzcyBBbGxvY2F0b3IgOiBwdWJsaWMgTWV0YUFsbG9jYXRvciB7CisgICAgICAgIHVz
aW5nIEJhc2UgPSBNZXRhQWxsb2NhdG9yOworICAgIHB1YmxpYzoKKyAgICAgICAgQWxsb2NhdG9y
KExvY2smIGxvY2spCisgICAgICAgICAgICA6IEJhc2UobG9jaywgaml0QWxsb2NhdGlvbkdyYW51
bGUsIHBhZ2VTaXplKCkpIC8vIHJvdW5kIHVwIGFsbCBhbGxvY2F0aW9ucyB0byAzMiBieXRlcwor
ICAgICAgICB7CisgICAgICAgIH0KKworICAgICAgICBGcmVlU3BhY2VQdHIgYWxsb2NhdGVOZXdT
cGFjZShzaXplX3QmKSBvdmVycmlkZQorICAgICAgICB7CisgICAgICAgICAgICAvLyBXZSdyZSBv
cGVyYXRpbmcgaW4gYSBmaXhlZCBwb29sLCBzbyBuZXcgYWxsb2NhdGlvbiBpcyBhbHdheXMgcHJv
aGliaXRlZC4KKyAgICAgICAgICAgIHJldHVybiBudWxscHRyOworICAgICAgICB9CisKKyAgICAg
ICAgdm9pZCBub3RpZnlOZWVkUGFnZSh2b2lkKiBwYWdlLCBzaXplX3QgY291bnQpIG92ZXJyaWRl
CisgICAgICAgIHsKKyAgICAgICAgICAgIG1fZml4ZWRBbGxvY2F0b3ItPm1fcmVzZXJ2YXRpb24u
Y29tbWl0KHBhZ2UsIHBhZ2VTaXplKCkgKiBjb3VudCk7CisgICAgICAgIH0KKworICAgICAgICB2
b2lkIG5vdGlmeVBhZ2VJc0ZyZWUodm9pZCogcGFnZSwgc2l6ZV90IGNvdW50KSBvdmVycmlkZQor
ICAgICAgICB7CisgICAgICAgICAgICBtX2ZpeGVkQWxsb2NhdG9yLT5tX3Jlc2VydmF0aW9uLmRl
Y29tbWl0KHBhZ2UsIHBhZ2VTaXplKCkgKiBjb3VudCk7CisgICAgICAgIH0KKworICAgICAgICBG
aXhlZFZNUG9vbEV4ZWN1dGFibGVBbGxvY2F0b3IqIG1fZml4ZWRBbGxvY2F0b3I7CisgICAgfTsK
KworI2lmIENQVShBUk02NCkgLy8gT09QUzogY2FuJ3QgZG8gdGhpcyBmb3IgYXJtNjRfMzIKKyAg
ICBjbGFzcyBSZWdpb25BbGxvY2F0b3IgZmluYWwgOiBwdWJsaWMgQWxsb2NhdG9yIHsKKyAgICAg
ICAgdXNpbmcgQmFzZSA9IEFsbG9jYXRvcjsKKyAgICBwdWJsaWM6CisgICAgICAgIFJlZ2lvbkFs
bG9jYXRvcihMb2NrJiBsb2NrKQorICAgICAgICAgICAgOiBCYXNlKGxvY2spCisgICAgICAgIHsK
KworICAgICAgICB9CisgICAgICAgIC8vICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0KKyAgICAgICAgLy8gIHwgYWxsb2NhdG9yIC0tPiAgICAgPC0tIGlzbGFuZCAgICAgIHwK
KyAgICAgICAgLy8gIHwgICAgICAgICAgICAgXiAgICAgXiAgICAgICAgICAgICAgIHwKKyAgICAg
ICAgLy8gIHwgICAgICAgICAgICAgfCAgICAgfCAgICAgICAgICAgICAgIHwKKyAgICAgICAgLy8g
IHwgYWxsb2NhdG9yU2l6ZSAgICAgcmVzZXJ2ZWRJc2xhbmRzIHwKKyAgICAgICAgLy8gIC0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgICAgLy8gIGFsbG9jYXRvckVu
ZCA8PSBpc2xhbmQgYmVnaW4KKworICAgICAgICB1aW50cHRyX3QgaXNsYW5kQmVnaW4oKQorICAg
ICAgICB7CisgICAgICAgICAgICAvLyBbc3RhcnQsIGFsbG9jYXRvckVuZCkKKyAgICAgICAgICAg
IHJldHVybiBlbmQgLSBpc2xhbmRSZWdpb25TaXplOworICAgICAgICB9CisKKyAgICAgICAgdWlu
dHB0cl90IGFsbG9jYXRvclNpemUoKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gaXNs
YW5kQmVnaW4oKSAtIHN0YXJ0OworICAgICAgICB9CisKKyAgICAgICAgc2l6ZV90IGlzbGFuZHNQ
ZXJQYWdlKCkKKyAgICAgICAgeworICAgICAgICAgICAgc2l6ZV90IGlzbGFuZHNQZXJQYWdlID0g
cGFnZVNpemUoKSAvIGlzbGFuZFNpemVJbkJ5dGVzOworICAgICAgICAgICAgQVNTRVJUKGlzbGFu
ZHNQZXJQYWdlICogaXNsYW5kU2l6ZUluQnl0ZXMgPT0gcGFnZVNpemUoKSk7IC8vIHdlIHJlbHkg
b24gcGVyZmVjdCBkaXZpc2lvbiBmb3IgZmluZGluZyB3aGljaCBiaXQgYSBwb2ludGVyIGlzLgor
ICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoaXNQb3dlck9mVHdvKGlzbGFuZHNQZXJQYWdlKSk7
CisgICAgICAgICAgICByZXR1cm4gaXNsYW5kc1BlclBhZ2U7CisgICAgICAgIH0KKworICAgICAg
ICB2b2lkIG5vdGlmeUJlZm9yZVJlbGVhc2UoTWV0YUFsbG9jYXRvckhhbmRsZSYpIGZpbmFsCisg
ICAgICAgIHsKKyAgICAgICAgfQorCisKKyAgICAgICAgLyoKKyAgICAgICAgLy8gT09QUzogcGFz
cyBMb2NrSG9sZGVyIHRvIG1ha2UgaXQgb2J2aW91cyBsb2NrIGlzIGhlbGQuCisgICAgICAgIGJv
b2wgdHJ5QWxsb2NhdGVJc2xhbmRzKHNpemVfdCBudW1Jc2xhbmRzVG9BbGxvY2F0ZSkKKyAgICAg
ICAgeworICAgICAgICAgICAgaWYgKCFudW1Jc2xhbmRzVG9BbGxvY2F0ZSkKKyAgICAgICAgICAg
ICAgICByZXR1cm4gdHJ1ZTsKKworICAgICAgICAgICAgdWludHB0cl90IG51bUZyZWVJc2xhbmRz
ID0gbnVtUmVzZXJ2ZWRJc2xhbmRzIC0gbnVtQWxsb2NhdGVkSXNsYW5kczsgCisgICAgICAgICAg
ICBpZiAobnVtRnJlZUlzbGFuZHMgPj0gbnVtSXNsYW5kc1RvQWxsb2NhdGUpIHsKKyAgICAgICAg
ICAgICAgICBudW1BbGxvY2F0ZWRJc2xhbmRzICs9IG51bUlzbGFuZHNUb0FsbG9jYXRlOworICAg
ICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKG51bUFsbG9jYXRlZElzbGFuZHMgPD0gbnVtUmVz
ZXJ2ZWRJc2xhbmRzKTsgLy8gT09QUzogY2hlY2tDb25zaXN0ZW5jeT8KKyAgICAgICAgICAgICAg
ICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgIH0gCisKKyAgICAgICAgICAgIHNpemVfdCBpc2xh
bmRzUGVyUGFnZSA9IHRoaXMtPmlzbGFuZHNQZXJQYWdlKCk7CisgICAgICAgICAgICAKKyAgICAg
ICAgICAgIHVpbnRwdHJfdCBpc2xhbmRzVG9SZXNlcnZlID0gbnVtSXNsYW5kc1RvQWxsb2NhdGUg
LSBudW1GcmVlSXNsYW5kczsKKworICAgICAgICAgICAgaXNsYW5kc1RvUmVzZXJ2ZSA9IHJvdW5k
VXBUb011bHRpcGxlT2YoaXNsYW5kc1BlclBhZ2UsIGlzbGFuZHNUb1Jlc2VydmUpOworICAgICAg
ICAgICAgdWludHB0cl90IG5ld0lzbGFuZEJlZ2luID0gZW5kIC0gKChudW1SZXNlcnZlZElzbGFu
ZHMgKyBpc2xhbmRzVG9SZXNlcnZlKSAqIGlzbGFuZFNpemVJbkJ5dGVzKTsKKyAgICAgICAgICAg
IGlmIChuZXdJc2xhbmRCZWdpbiA8IGFsbG9jYXRvckVuZCgpKQorICAgICAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKKworICAgICAgICAgICAgbnVtQWxsb2NhdGVkSXNsYW5kcyArPSBudW1Jc2xh
bmRzVG9BbGxvY2F0ZTsKKyAgICAgICAgICAgIG51bVJlc2VydmVkSXNsYW5kcyArPSBpc2xhbmRz
VG9SZXNlcnZlOworICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQobnVtQWxsb2NhdGVkSXNsYW5k
cyA8PSBudW1SZXNlcnZlZElzbGFuZHMpOworICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAg
ICAgIH0KKworICAgICAgICAvLyBPT1BTOiB0YWtlIGxvY2tob2xkZXIKKyAgICAgICAgdm9pZCBk
ZWFsbG9jYXRlSXNsYW5kcyhzaXplX3QgbnVtSXNsYW5kc1RvRnJlZSkKKyAgICAgICAgeworICAg
ICAgICAgICAgUkVMRUFTRV9BU1NFUlQobnVtSXNsYW5kc1RvRnJlZSA8PSBudW1BbGxvY2F0ZWRJ
c2xhbmRzKTsKKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKG51bUFsbG9jYXRlZElzbGFuZHMg
PD0gbnVtUmVzZXJ2ZWRJc2xhbmRzKTsgLy8gT09QUzogY2hlY2tDb25zaXN0ZW5jeQorICAgICAg
ICAgICAgbnVtQWxsb2NhdGVkSXNsYW5kcyAtPSBudW1Jc2xhbmRzVG9GcmVlOworICAgICAgICB9
CisgICAgICAgICovCisKKyAgICAgICAgLy8gT09QUzogbG9ja2hvbGRlci4KKyAgICAgICAgdm9p
ZCogYWxsb2NhdGVJc2xhbmQoKQorICAgICAgICB7CisgICAgICAgICAgICBhdXRvIGZpbmRSZXN1
bHQgPSBbJl0gKCkgLT4gdm9pZCogeworICAgICAgICAgICAgICAgIHNpemVfdCByZXN1bHRCaXQg
PSBpc2xhbmRCaXRzLmZpbmRDbGVhckJpdCgwKTsKKyAgICAgICAgICAgICAgICBpZiAocmVzdWx0
Qml0ID09IGlzbGFuZEJpdHMuc2l6ZSgpKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVs
bHB0cjsKKyAgICAgICAgICAgICAgICBpc2xhbmRCaXRzW3Jlc3VsdEJpdF0gPSB0cnVlOworICAg
ICAgICAgICAgICAgIHVpbnRwdHJfdCByZXN1bHQgPSBlbmQgLSAoKHJlc3VsdEJpdCArIDEpICog
aXNsYW5kU2l6ZUluQnl0ZXMpOyAKKyAgICAgICAgICAgICAgICByZXR1cm4gYml0d2lzZV9jYXN0
PHZvaWQqPihyZXN1bHQpOworICAgICAgICAgICAgfTsKKworICAgICAgICAgICAgaWYgKHZvaWQq
IHJlc3VsdCA9IGZpbmRSZXN1bHQoKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0Owor
CisgICAgICAgICAgICBpc2xhbmRCaXRzLnJlc2l6ZShpc2xhbmRCaXRzLnNpemUoKSArIGlzbGFu
ZHNQZXJQYWdlKCkpOworICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoaXNsYW5kQml0cy5zaXpl
KCkgPD0gbWF4SXNsYW5kc1BlclJlZ2lvbik7IAorCisgICAgICAgICAgICAvL2RhdGFMb2dMbigi
cmVnaW9uOiBbIiwgc3RhcnQsICIsICIsIGVuZCwgIikiKTsKKworICAgICAgICAgICAgdWludHB0
cl90IHBhZ2VCZWdpbiA9IGVuZCAtIChpc2xhbmRCaXRzLnNpemUoKSAqIGlzbGFuZFNpemVJbkJ5
dGVzKTsgLy8gW2lzbGFuZEJlZ2luLCBlbmQpCisgICAgICAgICAgICAvL2RhdGFMb2dMbigiY29t
bWl0dGluZzogIiwgcGFnZUJlZ2luKTsKKyAgICAgICAgICAgIG1fZml4ZWRBbGxvY2F0b3ItPm1f
cmVzZXJ2YXRpb24uY29tbWl0KGJpdHdpc2VfY2FzdDx2b2lkKj4ocGFnZUJlZ2luKSwgcGFnZVNp
emUoKSk7CisgICAgICAgICAgICB2b2lkKiByZXN1bHQgPSBmaW5kUmVzdWx0KCk7CisgICAgICAg
ICAgICBSRUxFQVNFX0FTU0VSVChyZXN1bHQpOworICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsK
KyAgICAgICAgfQorCisgICAgICAgIC8vIFtzdGFydCwgZW5kKQorICAgICAgICB1aW50cHRyX3Qg
c3RhcnQ7CisgICAgICAgIHVpbnRwdHJfdCBlbmQ7CisKKyAgICAgICAgc2l6ZV90IG51bUFsbG9j
YXRlZElzbGFuZHMgeyAwIH07IC8vIDw9IG51bVJlc2VydmVkSXNsYW5kcworICAgICAgICBGYXN0
Qml0VmVjdG9yIGlzbGFuZEJpdHM7CisgICAgICAgIFZlY3Rvcjx1aW50cHRyX3Q+IGp1bXBMb2Nh
dGlvbnNUb0lzbGFuZHM7IC8vIE9PUFM6IHVzZSByZWQgYmxhY2sgdHJlZSBhbmQgbWFrZSBpdCBm
YXN0IHRvIHJlbW92ZSBhbGwgZW50cmllcyBtYXRjaGluZy4KKyAgICB9OworI2VuZGlmCisKKyAg
ICB0ZW1wbGF0ZSA8dHlwZW5hbWUgRnVuY3Rpb24+CisgICAgdm9pZCBmb3JFYWNoQWxsb2NhdG9y
KEZ1bmN0aW9uIGZ1bmN0aW9uKQorICAgIHsKKyNpZiBDUFUoQVJNNjQpCisgICAgICAgIGZvciAo
UmVnaW9uQWxsb2NhdG9yJiBhbGxvY2F0b3IgOiBtX2FsbG9jYXRvcnMpIHsKKyAgICAgICAgICAg
IHVzaW5nIEZ1bmN0aW9uUmVzdWx0VHlwZSA9IGRlY2x0eXBlKGZ1bmN0aW9uKGFsbG9jYXRvcikp
OworICAgICAgICAgICAgaWYgY29uc3RleHByIChzdGQ6OmlzX3NhbWU8SXRlcmF0aW9uU3RhdHVz
LCBGdW5jdGlvblJlc3VsdFR5cGU+Ojp2YWx1ZSkgeworICAgICAgICAgICAgICAgIGlmIChmdW5j
dGlvbihhbGxvY2F0b3IpID09IEl0ZXJhdGlvblN0YXR1czo6RG9uZSkKKyAgICAgICAgICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIHN0YXRp
Y19hc3NlcnQoc3RkOjppc19zYW1lPHZvaWQsIEZ1bmN0aW9uUmVzdWx0VHlwZT46OnZhbHVlKTsK
KyAgICAgICAgICAgICAgICBmdW5jdGlvbihhbGxvY2F0b3IpOworICAgICAgICAgICAgfQorICAg
ICAgICB9CisjZWxzZQorICAgICAgICBmdW5jdGlvbihtX2FsbG9jYXRvcik7CisjZW5kaWYKKyAg
ICB9CisKKyAgICBMb2NrIG1fbG9jazsKICAgICBQYWdlUmVzZXJ2YXRpb24gbV9yZXNlcnZhdGlv
bjsKKyNpZiBDUFUoQVJNNjQpCisgICAgc3RkOjphcnJheTxSZWdpb25BbGxvY2F0b3IsIG51bWJl
ck9mUmVnaW9ucz4gbV9hbGxvY2F0b3JzOworI2Vsc2UKKyAgICBBbGxvY2F0b3IgbV9hbGxvY2F0
b3I7CisjZW5kaWYKIH07CiAKLUZpeGVkVk1Qb29sRXhlY3V0YWJsZUFsbG9jYXRvcjo6fkZpeGVk
Vk1Qb29sRXhlY3V0YWJsZUFsbG9jYXRvcigpCi17Ci0gICAgbV9yZXNlcnZhdGlvbi5kZWFsbG9j
YXRlKCk7Ci19Ci0KIC8vIEtlZXAgdGhpcyBwb2ludGVyIGluIGEgbXV0YWJsZSBnbG9iYWwgdmFy
aWFibGUgdG8gaGVscCBMZWFrcyBmaW5kIGl0LgogLy8gQnV0IHdlIGRvIG5vdCB1c2UgdGhpcyBw
b2ludGVyLgogc3RhdGljIEZpeGVkVk1Qb29sRXhlY3V0YWJsZUFsbG9jYXRvciogZ2xvYmFsRml4
ZWRWTVBvb2xFeGVjdXRhYmxlQWxsb2NhdG9yVG9Xb3JrQXJvdW5kTGVha3MgPSBudWxscHRyOwpA
QCAtNDE3LDcgKzc0MSw2IEBAIHZvaWQgRXhlY3V0YWJsZUFsbG9jYXRvcjo6aW5pdGlhbGl6ZVVu
ZGUKICAgICBSRUxFQVNFX0FTU0VSVCghZ19qc2NDb25maWcuZml4ZWRWTVBvb2xFeGVjdXRhYmxl
QWxsb2NhdG9yKTsKICAgICBnX2pzY0NvbmZpZy5maXhlZFZNUG9vbEV4ZWN1dGFibGVBbGxvY2F0
b3IgPSBuZXcgRml4ZWRWTVBvb2xFeGVjdXRhYmxlQWxsb2NhdG9yKCk7CiAgICAgZ2xvYmFsRml4
ZWRWTVBvb2xFeGVjdXRhYmxlQWxsb2NhdG9yVG9Xb3JrQXJvdW5kTGVha3MgPSBnX2pzY0NvbmZp
Zy5maXhlZFZNUG9vbEV4ZWN1dGFibGVBbGxvY2F0b3I7Ci0gICAgQ29kZVByb2ZpbGluZzo6bm90
aWZ5QWxsb2NhdG9yKGdfanNjQ29uZmlnLmZpeGVkVk1Qb29sRXhlY3V0YWJsZUFsbG9jYXRvcik7
CiB9CiAKIGJvb2wgRXhlY3V0YWJsZUFsbG9jYXRvcjo6aXNWYWxpZCgpIGNvbnN0CkBAIC00MjUs
NyArNzQ4LDcgQEAgYm9vbCBFeGVjdXRhYmxlQWxsb2NhdG9yOjppc1ZhbGlkKCkgY29ucwogICAg
IEZpeGVkVk1Qb29sRXhlY3V0YWJsZUFsbG9jYXRvciogYWxsb2NhdG9yID0gZ19qc2NDb25maWcu
Zml4ZWRWTVBvb2xFeGVjdXRhYmxlQWxsb2NhdG9yOwogICAgIGlmICghYWxsb2NhdG9yKQogICAg
ICAgICByZXR1cm4gQmFzZTo6aXNWYWxpZCgpOwotICAgIHJldHVybiAhIWFsbG9jYXRvci0+Ynl0
ZXNSZXNlcnZlZCgpOworICAgIHJldHVybiBhbGxvY2F0b3ItPmlzVmFsaWQoKTsKIH0KIAogYm9v
bCBFeGVjdXRhYmxlQWxsb2NhdG9yOjp1bmRlck1lbW9yeVByZXNzdXJlKCkKQEAgLTQ1NiwxMSAr
Nzc5LDExIEBAIGRvdWJsZSBFeGVjdXRhYmxlQWxsb2NhdG9yOjptZW1vcnlQcmVzc3UKICAgICBy
ZXR1cm4gcmVzdWx0OwogfQogCi1SZWZQdHI8RXhlY3V0YWJsZU1lbW9yeUhhbmRsZT4gRXhlY3V0
YWJsZUFsbG9jYXRvcjo6YWxsb2NhdGUoc2l6ZV90IHNpemVJbkJ5dGVzLCB2b2lkKiBvd25lclVJ
RCwgSklUQ29tcGlsYXRpb25FZmZvcnQgZWZmb3J0KQorUmVmUHRyPEV4ZWN1dGFibGVNZW1vcnlI
YW5kbGU+IEV4ZWN1dGFibGVBbGxvY2F0b3I6OmFsbG9jYXRlKHNpemVfdCBzaXplSW5CeXRlcywg
SklUQ29tcGlsYXRpb25FZmZvcnQgZWZmb3J0KQogewogICAgIEZpeGVkVk1Qb29sRXhlY3V0YWJs
ZUFsbG9jYXRvciogYWxsb2NhdG9yID0gZ19qc2NDb25maWcuZml4ZWRWTVBvb2xFeGVjdXRhYmxl
QWxsb2NhdG9yOwogICAgIGlmICghYWxsb2NhdG9yKQotICAgICAgICByZXR1cm4gQmFzZTo6YWxs
b2NhdGUoc2l6ZUluQnl0ZXMsIG93bmVyVUlELCBlZmZvcnQpOworICAgICAgICByZXR1cm4gQmFz
ZTo6YWxsb2NhdGUoc2l6ZUluQnl0ZXMsIGVmZm9ydCk7CiAgICAgaWYgKE9wdGlvbnM6OmxvZ0V4
ZWN1dGFibGVBbGxvY2F0aW9uKCkpIHsKICAgICAgICAgTWV0YUFsbG9jYXRvcjo6U3RhdGlzdGlj
cyBzdGF0cyA9IGFsbG9jYXRvci0+Y3VycmVudFN0YXRpc3RpY3MoKTsKICAgICAgICAgZGF0YUxv
ZygiQWxsb2NhdGluZyAiLCBzaXplSW5CeXRlcywgIiBieXRlcyBvZiBleGVjdXRhYmxlIG1lbW9y
eSB3aXRoICIsIHN0YXRzLmJ5dGVzQWxsb2NhdGVkLCAiIGJ5dGVzIGFsbG9jYXRlZCwgIiwgc3Rh
dHMuYnl0ZXNSZXNlcnZlZCwgIiBieXRlcyByZXNlcnZlZCwgYW5kICIsIHN0YXRzLmJ5dGVzQ29t
bWl0dGVkLCAiIGNvbW1pdHRlZC5cbiIpOwpAQCAtNDg3LDcgKzgxMCw3IEBAIFJlZlB0cjxFeGVj
dXRhYmxlTWVtb3J5SGFuZGxlPiBFeGVjdXRhYmwKICAgICAgICAgfQogICAgIH0KIAotICAgIFJl
ZlB0cjxFeGVjdXRhYmxlTWVtb3J5SGFuZGxlPiByZXN1bHQgPSBhbGxvY2F0b3ItPmFsbG9jYXRl
KHNpemVJbkJ5dGVzLCBvd25lclVJRCk7CisgICAgUmVmUHRyPEV4ZWN1dGFibGVNZW1vcnlIYW5k
bGU+IHJlc3VsdCA9IGFsbG9jYXRvci0+YWxsb2NhdGUoc2l6ZUluQnl0ZXMpOwogICAgIGlmICgh
cmVzdWx0KSB7CiAgICAgICAgIGlmIChlZmZvcnQgIT0gSklUQ29tcGlsYXRpb25DYW5GYWlsKSB7
CiAgICAgICAgICAgICBkYXRhTG9nKCJSYW4gb3V0IG9mIGV4ZWN1dGFibGUgbWVtb3J5IHdoaWxl
IGFsbG9jYXRpbmcgIiwgc2l6ZUluQnl0ZXMsICIgYnl0ZXMuXG4iKTsKQEAgLTUzOSw2ICs4NjIs
MjAgQEAgdm9pZCBFeGVjdXRhYmxlQWxsb2NhdG9yOjpkdW1wUHJvZmlsZSgpCiB9CiAjZW5kaWYK
IAorI2lmIENQVShBUk02NCkKK3ZvaWQqIEV4ZWN1dGFibGVBbGxvY2F0b3I6OmdldEp1bXBJc2xh
bmRUbyh2b2lkKiBmcm9tLCB2b2lkKiBvbGREZXN0aW5hdGlvbiwgdm9pZCogbmV3RGVzdGluYXRp
b24pCit7CisgICAgRml4ZWRWTVBvb2xFeGVjdXRhYmxlQWxsb2NhdG9yKiBhbGxvY2F0b3IgPSBn
X2pzY0NvbmZpZy5maXhlZFZNUG9vbEV4ZWN1dGFibGVBbGxvY2F0b3I7CisgICAgaWYgKCFhbGxv
Y2F0b3IpIHsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsgLy8gT09QUzog
aXMgdGhpcyBjb3JyZWN0PworICAgIH0KKyAgICAvL2ludHB0cl90IGRlbHRhID0gYml0d2lzZV9j
YXN0PGludHB0cl90PihuZXdEZXN0aW5hdGlvbikgLSBiaXR3aXNlX2Nhc3Q8aW50cHRyX3Q+KGZy
b20pOworICAgIC8vZGF0YUxvZ0xuKCJnZXRKdW1wSXNsYW5kVG8gZGVsdGE6ICIsIHN0YXRpY19j
YXN0PGRvdWJsZT4oZGVsdGEpLzEwMjQuMC8xMDI0LjAsICJNQiIpOworCisgICAgcmV0dXJuIGFs
bG9jYXRvci0+bWFrZUlzbGFuZChiaXR3aXNlX2Nhc3Q8dWludHB0cl90Pihmcm9tKSwgYml0d2lz
ZV9jYXN0PHVpbnRwdHJfdD4ob2xkRGVzdGluYXRpb24pLCBiaXR3aXNlX2Nhc3Q8dWludHB0cl90
PihuZXdEZXN0aW5hdGlvbikpOworfQorI2VuZGlmCisKIHZvaWQqIHN0YXJ0T2ZGaXhlZEV4ZWN1
dGFibGVNZW1vcnlQb29sSW1wbCgpCiB7CiAgICAgRml4ZWRWTVBvb2xFeGVjdXRhYmxlQWxsb2Nh
dG9yKiBhbGxvY2F0b3IgPSBnX2pzY0NvbmZpZy5maXhlZFZNUG9vbEV4ZWN1dGFibGVBbGxvY2F0
b3I7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0V4ZWN1dGFibGVBbGxvY2F0b3Iu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0V4ZWN1dGFibGVBbGxv
Y2F0b3IuaAkocmV2aXNpb24gMjU3ODY2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9F
eGVjdXRhYmxlQWxsb2NhdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTcxLDcgKzcxLDcgQEAgcHVi
bGljOgogCiAgICAgc3RhdGljIHZvaWQgZHVtcFByb2ZpbGUoKSB7IH0KIAotICAgIFJlZlB0cjxF
eGVjdXRhYmxlTWVtb3J5SGFuZGxlPiBhbGxvY2F0ZShzaXplX3QsIHZvaWQqLCBKSVRDb21waWxh
dGlvbkVmZm9ydCkgeyByZXR1cm4gbnVsbHB0cjsgfQorICAgIFJlZlB0cjxFeGVjdXRhYmxlTWVt
b3J5SGFuZGxlPiBhbGxvY2F0ZShzaXplX3QsIEpJVENvbXBpbGF0aW9uRWZmb3J0KSB7IHJldHVy
biBudWxscHRyOyB9CiAKICAgICBzdGF0aWMgdm9pZCBzZXRKSVRFbmFibGVkKGJvb2wpIHsgfTsK
ICAgICAKQEAgLTE3Niw3ICsxNzYsNyBAQCBwdWJsaWM6CiAgICAgCiAgICAgSlNfRVhQT1JUX1BS
SVZBVEUgc3RhdGljIHZvaWQgc2V0SklURW5hYmxlZChib29sKTsKIAotICAgIFJlZlB0cjxFeGVj
dXRhYmxlTWVtb3J5SGFuZGxlPiBhbGxvY2F0ZShzaXplX3Qgc2l6ZUluQnl0ZXMsIHZvaWQqIG93
bmVyVUlELCBKSVRDb21waWxhdGlvbkVmZm9ydCk7CisgICAgUmVmUHRyPEV4ZWN1dGFibGVNZW1v
cnlIYW5kbGU+IGFsbG9jYXRlKHNpemVfdCBzaXplSW5CeXRlcywgSklUQ29tcGlsYXRpb25FZmZv
cnQpOwogCiAgICAgYm9vbCBpc1ZhbGlkRXhlY3V0YWJsZU1lbW9yeShjb25zdCBBYnN0cmFjdExv
Y2tlciYsIHZvaWQqIGFkZHJlc3MpOwogCkBAIC0xODQsNiArMTg0LDEwIEBAIHB1YmxpYzoKIAog
ICAgIExvY2smIGdldExvY2soKSBjb25zdDsKIAorI2lmIENQVShBUk02NCkKKyAgICB2b2lkKiBn
ZXRKdW1wSXNsYW5kVG8odm9pZCogZnJvbSwgdm9pZCogb2xkRGVzdGluYXRpb24sIHZvaWQqIG5l
d0Rlc3RpbmF0aW9uKTsKKyNlbmRpZgorCiBwcml2YXRlOgogICAgIEV4ZWN1dGFibGVBbGxvY2F0
b3IoKSA9IGRlZmF1bHQ7CiAgICAgfkV4ZWN1dGFibGVBbGxvY2F0b3IoKSA9IGRlZmF1bHQ7Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db21tb25TbG93UGF0aHMuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbW1vblNsb3dQYXRo
cy5jcHAJKHJldmlzaW9uIDI1Nzg2NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0NvbW1vblNsb3dQYXRocy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMyLDcgKzMyLDYgQEAKICNp
bmNsdWRlICJCeXRlY29kZVN0cnVjdHMuaCIKICNpbmNsdWRlICJDYWxsRnJhbWUuaCIKICNpbmNs
dWRlICJDbG9uZWRBcmd1bWVudHMuaCIKLSNpbmNsdWRlICJDb2RlUHJvZmlsaW5nLmgiCiAjaW5j
bHVkZSAiRGVmaW5lUHJvcGVydHlBdHRyaWJ1dGVzLmgiCiAjaW5jbHVkZSAiRGlyZWN0QXJndW1l
bnRzLmgiCiAjaW5jbHVkZSAiRXJyb3IuaCIKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTTW9kdWxlTG9hZGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9KU01vZHVsZUxvYWRlci5jcHAJKHJldmlzaW9uIDI1Nzg2NikKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTW9kdWxlTG9hZGVyLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMjksNyArMjksNiBAQAogCiAjaW5jbHVkZSAiQnVpbHRpbk5hbWVzLmgiCiAjaW5j
bHVkZSAiQ2F0Y2hTY29wZS5oIgotI2luY2x1ZGUgIkNvZGVQcm9maWxpbmcuaCIKICNpbmNsdWRl
ICJFcnJvci5oIgogI2luY2x1ZGUgIkV4Y2VwdGlvbi5oIgogI2luY2x1ZGUgIkpTQ0lubGluZXMu
aCIKQEAgLTQwMCw4ICszOTksNiBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG1vZHVs
ZUxvYWRlCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoSlNXZWJBc3NlbWJseTo6aW5z
dGFudGlhdGUoZ2xvYmFsT2JqZWN0LCBwcm9taXNlLCBtb2R1bGVLZXksIGpzU291cmNlQ29kZSkp
OwogI2VuZGlmCiAKLSAgICBDb2RlUHJvZmlsaW5nIHByb2ZpbGUoc291cmNlQ29kZSk7Ci0KICAg
ICBQYXJzZXJFcnJvciBlcnJvcjsKICAgICBzdGQ6OnVuaXF1ZV9wdHI8TW9kdWxlUHJvZ3JhbU5v
ZGU+IG1vZHVsZVByb2dyYW1Ob2RlID0gcGFyc2U8TW9kdWxlUHJvZ3JhbU5vZGU+KAogICAgICAg
ICB2bSwgc291cmNlQ29kZSwgSWRlbnRpZmllcigpLCBKU1BhcnNlckJ1aWx0aW5Nb2RlOjpOb3RC
dWlsdGluLApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9uc0xpc3Qu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25zTGlz
dC5oCShyZXZpc2lvbiAyNTc4NjYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9P
cHRpb25zTGlzdC5oCSh3b3JraW5nIGNvcHkpCkBAIC01MDAsNiArNTAwLDcgQEAgY29uc3RleHBy
IGJvb2wgZW5hYmxlV2ViQXNzZW1ibHlTdHJlYW1pbgogICAgIHYoQm9vbCwgZm9yY2VPU1JFeGl0
VG9MTEludCwgZmFsc2UsIE5vcm1hbCwgIklmIHRydWUsIHdlIGFsd2F5cyBleGl0IHRvIHRoZSBM
TEludC4gSWYgZmFsc2UsIHdlIGV4aXQgdG8gd2hhdGV2ZXIgaXMgbW9zdCBjb252ZW5pZW50LiIp
IFwKICAgICB2KFVuc2lnbmVkLCBnZXRCeVZhbElDTWF4TnVtYmVyT2ZJZGVudGlmaWVycywgNCwg
Tm9ybWFsLCAiTnVtYmVyIG9mIGlkZW50aWZpZXJzIHdlIHNlZSBpbiB0aGUgTExJbnQgdGhhdCBj
b3VsZCBjYXVzZSB1cyB0byBiYWlsIG9uIGdlbmVyYXRpbmcgYW4gSUMgZm9yIGdldF9ieV92YWwu
IikgXAogICAgIHYoQm9vbCwgdXNlQ2xhc3NGaWVsZHMsIGZhbHNlLCBOb3JtYWwsICJJZiB0cnVl
LCB0aGUgcGFyc2VyIHdpbGwgdW5kZXJzdGFuZCBkYXRhIGZpZWxkcyBpbnNpZGUgY2xhc3Nlcy4i
KSBcCisgICAgdihCb29sLCB1c2VSYW5kb21pemluZ0V4ZWN1dGFibGVJc2xhbmRBbGxvY2F0aW9u
LCBmYWxzZSwgTm9ybWFsLCAiRm9yIHRoZSBhcm02NCBFeGVjdXRhYmxlQWxsb2NhdG9yLCBpZiB0
cnVlLCBzZWxlY3Qgd2hpY2ggcmVnaW9uIHRvIHVzZSByYW5kb21seS4gVGhpcyBpcyB1c2VmdWwg
Zm9yIHRlc3RpbmcgdGhhdCBqdW1wIGlzbGFuZHMgd29yay4iKSBcCiAKIGVudW0gT3B0aW9uRXF1
aXZhbGVuY2UgewogICAgIFNhbWVPcHRpb24sCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
dG9vbHMvQ29kZVByb2ZpbGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS90b29scy9Db2RlUHJvZmlsZS5jcHAJKHJldmlzaW9uIDI1Nzg2NikKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS90b29scy9Db2RlUHJvZmlsZS5jcHAJKG5vbmV4aXN0ZW50KQpAQCAtMSwxNzIg
KzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMiBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0g
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
LSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0g
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotCi0j
aW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiQ29kZVByb2ZpbGUuaCIKLQotI2luY2x1ZGUg
IkNvZGVCbG9jay5oIgotI2luY2x1ZGUgIkNvZGVQcm9maWxpbmcuaCIKLSNpbmNsdWRlICJMaW5r
QnVmZmVyLmgiCi0jaW5jbHVkZSAiUHJvZmlsZVRyZWVOb2RlLmgiCi0jaW5jbHVkZSA8d3RmL1N0
YWNrVHJhY2UuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KLQotbmFtZXNwYWNl
IEpTQyB7Ci0KLS8vIE1hcCBmcm9tIENvZGVUeXBlIGVudW0gdG8gYSBjb3JyZXNwb25kaW5nIG5h
bWUuCi1zdGF0aWMgY29uc3QgY2hhciogY29uc3Qgc19jb2RlVHlwZU5hbWVzW0NvZGVQcm9maWxl
OjpOdW1iZXJPZkNvZGVUeXBlc10gPSB7Ci0gICAgIltbRW5naW5lQ29kZV1dIiwKLSAgICAiW1tH
bG9iYWxUaHVua11dIiwKLSAgICAiW1tSZWdFeHBDb2RlXV0iLAotICAgICJbW0RGR0pJVF1dIiwK
LSAgICAiW1tCYXNlbGluZU9ubHldXSIsCi0gICAgIltbQmFzZWxpbmVQcm9maWxlXV0iLAotICAg
ICJbW0Jhc2VsaW5lT1NSXV0iLAotICAgICJbW0VuZ2luZUZyYW1lXV0iCi19OwotCi0vLyBIZWxw
ZXIgZnVuY3Rpb24sIHRydW5jYXRlIHRyYWNlcyB0byBwcnVuZSB0aGUgb3V0cHV0ICYgbWFrZSB2
ZXJ5IHZlcmJvc2UgbW9kZSBhIGxpdHRsZSBtb3JlIHJlYWRhYmxlLgotc3RhdGljIGJvb2wgdHJ1
bmNhdGVUcmFjZShjb25zdCBjaGFyKiBzeW1ib2xOYW1lKQotewotICAgIHJldHVybiAhc3RyY21w
KHN5bWJvbE5hbWUsICJKU0M6OkJ5dGVjb2RlR2VuZXJhdG9yOjpnZW5lcmF0ZSgpIikKLSAgICAg
ICAgfHwgIXN0cmNtcChzeW1ib2xOYW1lLCAiSlNDOjpQYXJzZXI8SlNDOjpMZXhlcjx1bnNpZ25l
ZCBjaGFyPj46OnBhcnNlSW5uZXIoKSIpCi0gICAgICAgIHx8ICFzdHJjbXAoc3ltYm9sTmFtZSwg
IldURjo6ZmFzdE1hbGxvYyh1bnNpZ25lZCBsb25nKSIpCi0gICAgICAgIHx8ICFzdHJjbXAoc3lt
Ym9sTmFtZSwgIldURjo6Y2FsY3VsYXRlVVRDT2Zmc2V0KCkiKQotICAgICAgICB8fCAhc3RyY21w
KHN5bWJvbE5hbWUsICJKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OnBhcnNlQ29kZUJsb2NrKCki
KTsKLSAgICAgICAgCi19Ci0KLS8vIEVhY2ggdHJhY2UgY29uc2lzdHMgb2YgYSBzZXF1ZW5jZSBv
ZiB6ZXJvIG9yIG1vcmUgJ0VuZ2luZUZyYW1lJyBlbnRyaWVzLAotLy8gZm9sbG93ZWQgYnkgYSBz
YW1wbGUgaW4gSklUIGNvZGUsIG9yIG9uZSBvciBtb3JlICdFbmdpbmVGcmFtZScgZW50cmllcywK
LS8vIGZvbGxvd2VkIGJ5IGEgJ0VuZ2luZUNvZGUnIHRlcm1pbmF0b3IuCi12b2lkIENvZGVQcm9m
aWxlOjpzYW1wbGUodm9pZCogcGMsIHZvaWQqKiBmcmFtZVBvaW50ZXIpCi17Ci0gICAgLy8gRGlz
YWxsb3cgdHJhY2VzIGNvbnRhaW5pbmcgb25seSBhICdFbmdpbmVDb2RlJyB0ZXJtaW5hdG9yLCB3
aXRob3V0IGFueSAnRW5naW5lRnJhbWUnIGZyYW1lcy4KLSAgICBpZiAoIWZyYW1lUG9pbnRlcikK
LSAgICAgICAgcmV0dXJuOwotCi0gICAgd2hpbGUgKGZyYW1lUG9pbnRlcikgewotICAgICAgICBD
b2RlVHlwZSB0eXBlOwotCi0jaWYgRU5BQkxFKEpJVCkKLSAgICAgICAgLy8gRGV0ZXJtaW5lIGlm
IHRoaXMgc2FtcGxlIGZlbGwgaW4gSklUIGNvZGUsIGFuZCBpZiBzbywgZnJvbSB3aGljaCBKSVQg
JiB3aHkuCi0gICAgICAgIHZvaWQqIG93bmVyVUlEID0gQ29kZVByb2ZpbGluZzo6Z2V0T3duZXJV
SURGb3JQQyhwYyk7Ci0KLSAgICAgICAgaWYgKCFvd25lclVJRCkKLSAgICAgICAgICAgIHR5cGUg
PSBFbmdpbmVGcmFtZTsKLSAgICAgICAgZWxzZSBpZiAob3duZXJVSUQgPT0gR0xPQkFMX1RIVU5L
X0lEKQotICAgICAgICAgICAgdHlwZSA9IEdsb2JhbFRodW5rOwotICAgICAgICBlbHNlIGlmIChv
d25lclVJRCA9PSBSRUdFWFBfQ09ERV9JRCkKLSAgICAgICAgICAgIHR5cGUgPSBSZWdFeHBDb2Rl
OwotICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgIENvZGVCbG9jayogY29kZUJsb2NrID0gc3Rh
dGljX2Nhc3Q8Q29kZUJsb2NrKj4ob3duZXJVSUQpOwotICAgICAgICAgICAgaWYgKGNvZGVCbG9j
ay0+aml0VHlwZSgpID09IEpJVFR5cGU6OkRGR0pJVCkKLSAgICAgICAgICAgICAgICB0eXBlID0g
REZHSklUOwotICAgICAgICAgICAgZWxzZSBpZiAoIWNhbkNvbXBpbGUoY29kZUJsb2NrLT5jYXBh
YmlsaXR5TGV2ZWxTdGF0ZSgpKSkKLSAgICAgICAgICAgICAgICB0eXBlID0gQmFzZWxpbmVPbmx5
OwotICAgICAgICAgICAgZWxzZSBpZiAoY29kZUJsb2NrLT5yZXBsYWNlbWVudCgpKQotICAgICAg
ICAgICAgICAgIHR5cGUgPSBCYXNlbGluZU9TUjsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAg
ICAgICAgICB0eXBlID0gQmFzZWxpbmVQcm9maWxlOwotICAgICAgICB9Ci0jZWxzZQotICAgICAg
ICB0eXBlID0gRW5naW5lRnJhbWU7Ci0jZW5kaWYKLQotICAgICAgICAvLyBBIHNhbXBsZSBpbiBK
SVQgY29kZSB0ZXJtaW5hdGVzIHRoZSB0cmFjZS4KLSAgICAgICAgbV9zYW1wbGVzLmFwcGVuZChD
b2RlUmVjb3JkKHBjLCB0eXBlKSk7Ci0gICAgICAgIGlmICh0eXBlICE9IEVuZ2luZUZyYW1lKQot
ICAgICAgICAgICAgcmV0dXJuOwotCi0jaWYgT1MoREFSV0lOKSAmJiBDUFUoWDg2XzY0KQotICAg
ICAgICAvLyBXYWxrIHVwIHRoZSBzdGFjay4KLSAgICAgICAgcGMgPSBmcmFtZVBvaW50ZXJbMV07
Ci0gICAgICAgIGZyYW1lUG9pbnRlciA9IHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCoqPigqZnJhbWVQ
b2ludGVyKTsKLSNlbGlmIE9TKExJTlVYKSAmJiBDUFUoWDg2KQotICAgICAgICAvLyBEb24ndCB1
bndpbmQgdGhlIHN0YWNrIGFzIHNvbWUgZGVwZW5kZW50IHRoaXJkIHBhcnR5IGxpYnJhcmllcwot
ICAgICAgICAvLyBtYXkgYmUgY29tcGlsZWQgd2l0aCAtZm9taXQtZnJhbWUtcG9pbnRlci4KLSAg
ICAgICAgZnJhbWVQb2ludGVyID0gMDsKLSNlbHNlCi0gICAgICAgIC8vIFRoaXMgcGxhdGZvcm0g
aXMgbm90IHlldCBzdXBwb3J0ZWQhCi0gICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVE
KCk7Ci0jZW5kaWYKLSAgICB9Ci0KLSAgICAvLyBJZiB3ZSBnZXQgaGVyZSwgd2Ugd2Fsa2VkIHRo
ZSBlbnRpcmUgc3RhY2sgd2l0aG91dCBmaW5kaW5nIGFueSBmcmFtZXMgb2YgSklUIGNvZGUuCi0g
ICAgbV9zYW1wbGVzLmFwcGVuZChDb2RlUmVjb3JkKDAsIEVuZ2luZUNvZGUpKTsKLX0KLQotdm9p
ZCBDb2RlUHJvZmlsZTo6cmVwb3J0KCkKLXsKLSAgICBkYXRhTG9nRigiPENvZGVQcm9maWxpbmcg
JXM6JWQ+XG4iLCBtX2ZpbGUuZGF0YSgpLCBtX2xpbmVOdW1iZXIpOwotCi0gICAgLy8gSG93IG1h
bnkgZnJhbWVzIG9mIEMtY29kZSB0byBwcmludCAtIDAsIGlmIG5vdCB2ZXJib3NlLCAxIGlmIHZl
cmJvc2UsIHVwIHRvIDEwMjQgaWYgdmVyeSB2ZXJib3NlLgotICAgIHVuc2lnbmVkIHJlY3Vyc2lv
bkxpbWl0ID0gQ29kZVByb2ZpbGluZzo6YmVWZXJ5VmVyYm9zZSgpID8gMTAyNCA6IENvZGVQcm9m
aWxpbmc6OmJlVmVyYm9zZSgpOwotCi0gICAgUHJvZmlsZVRyZWVOb2RlIHByb2ZpbGU7Ci0KLSAg
ICAvLyBXYWxrIHRocm91Z2ggdGhlIHNhbXBsZSBidWZmZXIuCi0gICAgc2l6ZV90IHRyYWNlID0g
MDsKLSAgICB3aGlsZSAodHJhY2UgPCBtX3NhbXBsZXMuc2l6ZSgpKSB7Ci0KLSAgICAgICAgLy8g
QWxsIHRyYWNlcyBhcmUgemVybyBvciBtb3JlICdFbmdpbmVGcmFtZSdzLCBmb2xsb3dlZCBieSBh
IG5vbi0nRW5naW5lRnJhbWUnLgotICAgICAgICAvLyBTY2FuIHRvIGZpbmQgdGhlIGxhc3Qgc2Ft
cGxlIGluIHRoZSB0cmFjZS4KLSAgICAgICAgc2l6ZV90IGxhc3RJblRyYWNlID0gdHJhY2U7Ci0g
ICAgICAgIHdoaWxlIChtX3NhbXBsZXNbbGFzdEluVHJhY2VdLnR5cGUgPT0gRW5naW5lRnJhbWUp
Ci0gICAgICAgICAgICArK2xhc3RJblRyYWNlOwotCi0gICAgICAgIC8vIFdlIHVzZSB0aGUgbGFz
dCBzYW1wbGUgdHlwZSB0byBsb29rIHVwIGEgbmFtZSAodXNlZCBhcyBhIGJ1Y2tldCBpbiB0aGUg
cHJvZmlsZXIpLgotICAgICAgICBQcm9maWxlVHJlZU5vZGUqIGNhbGxiYWNrcyA9IHByb2ZpbGUu
c2FtcGxlQ2hpbGQoc19jb2RlVHlwZU5hbWVzW21fc2FtcGxlc1tsYXN0SW5UcmFjZV0udHlwZV0p
OwotCi0gICAgICAgIC8vIElmIHRoZXJlIGFyZSBhbnkgc2FtcGxlcyBpbiBDLWNvZGUsIGFkZCB1
cCB0byByZWN1cnNpb25MaW1pdCBvZiB0aGVtIGludG8gdGhlIHByb2ZpbGUgdHJlZS4KLSAgICAg
ICAgc2l6ZV90IGxhc3RFbmdpbmVGcmFtZSA9IGxhc3RJblRyYWNlOwotICAgICAgICBmb3IgKHVu
c2lnbmVkIGNvdW50ID0gMDsgbGFzdEVuZ2luZUZyYW1lID4gdHJhY2UgJiYgY291bnQgPCByZWN1
cnNpb25MaW1pdDsgKytjb3VudCkgewotICAgICAgICAgICAgLS1sYXN0RW5naW5lRnJhbWU7Ci0g
ICAgICAgICAgICBBU1NFUlQobV9zYW1wbGVzW2xhc3RFbmdpbmVGcmFtZV0udHlwZSA9PSBFbmdp
bmVGcmFtZSk7Ci0gICAgICAgICAgICBjb25zdCBjaGFyKiBuYW1lID0gIjx1bmtub3duPiI7Ci0g
ICAgICAgICAgICBhdXRvIGRlbWFuZ2xlZCA9IFN0YWNrVHJhY2U6OmRlbWFuZ2xlKG1fc2FtcGxl
c1tsYXN0RW5naW5lRnJhbWVdLnBjKTsKLSAgICAgICAgICAgIGlmIChkZW1hbmdsZWQpCi0gICAg
ICAgICAgICAgICAgbmFtZSA9IGRlbWFuZ2xlZC0+ZGVtYW5nbGVkTmFtZSgpID8gZGVtYW5nbGVk
LT5kZW1hbmdsZWROYW1lKCkgOiBkZW1hbmdsZWQtPm1hbmdsZWROYW1lKCk7Ci0gICAgICAgICAg
ICBjYWxsYmFja3MgPSBjYWxsYmFja3MtPnNhbXBsZUNoaWxkKG5hbWUpOwotICAgICAgICAgICAg
aWYgKHRydW5jYXRlVHJhY2UobmFtZSkpCi0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
IH0KLQotICAgICAgICAvLyBNb3ZlIG9uIHRvIHRoZSBuZXh0IHRyYWNlLgotICAgICAgICB0cmFj
ZSA9IGxhc3RJblRyYWNlICsgMTsKLSAgICAgICAgQVNTRVJUKHRyYWNlIDw9IG1fc2FtcGxlcy5z
aXplKCkpOwotICAgIH0KLQotICAgIC8vIE91dHB1dCB0aGUgcHJvZmlsZSB0cmVlLgotICAgIGRh
dGFMb2dGKCJUb3RhbCBzYW1wbGVzOiAlbGxkXG4iLCBzdGF0aWNfY2FzdDxsb25nIGxvbmc+KHBy
b2ZpbGUuY2hpbGRDb3VudCgpKSk7Ci0gICAgcHJvZmlsZS5kdW1wKCk7Ci0gICAgCi0gICAgZm9y
IChzaXplX3QgaSA9IDAgOyBpIDwgbV9jaGlsZHJlbi5zaXplKCk7ICsraSkKLSAgICAgICAgbV9j
aGlsZHJlbltpXS0+cmVwb3J0KCk7Ci0KLSAgICBkYXRhTG9nRigiPC9Db2RlUHJvZmlsaW5nICVz
OiVkPlxuIiwgbV9maWxlLmRhdGEoKSwgbV9saW5lTnVtYmVyKTsKLX0KLQotfQpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL3Rvb2xzL0NvZGVQcm9maWxlLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL3Rvb2xzL0NvZGVQcm9maWxlLmgJKHJldmlzaW9uIDI1Nzg2NikK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90b29scy9Db2RlUHJvZmlsZS5oCShub25leGlzdGVu
dCkKQEAgLTEsODkgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMiBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAq
IGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICog
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LiAKLSAqLwotCi0jcHJhZ21hIG9uY2UKLQotI2luY2x1ZGUgIlNvdXJjZUNvZGUuaCIKLSNpbmNs
dWRlICJUaWVyZWRNTWFwQXJyYXkuaCIKLSNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+Ci0K
LW5hbWVzcGFjZSBKU0MgewotCi1jbGFzcyBDb2RlUHJvZmlsZSB7Ci0gICAgV1RGX01BS0VfRkFT
VF9BTExPQ0FURUQ7Ci1wdWJsaWM6Ci0gICAgQ29kZVByb2ZpbGUoY29uc3QgU291cmNlQ29kZSYg
c291cmNlLCBDb2RlUHJvZmlsZSogcGFyZW50KQotICAgICAgICA6IG1fZmlsZShTdHJpbmcoc291
cmNlLnByb3ZpZGVyKCktPnVybCgpKS51dGY4KCkpCi0gICAgICAgICwgbV9saW5lTnVtYmVyKHNv
dXJjZS5maXJzdExpbmUoKS5vbmVCYXNlZEludCgpKQotICAgICAgICAsIG1fcGFyZW50KHBhcmVu
dCkKLSAgICB7Ci0gICAgICAgIGlmIChwYXJlbnQpCi0gICAgICAgICAgICBwYXJlbnQtPmFkZENo
aWxkKHN0ZDo6dW5pcXVlX3B0cjxDb2RlUHJvZmlsZT4odGhpcykpOwotICAgIH0KLQotICAgIHZv
aWQgc2FtcGxlKHZvaWQqIHBjLCB2b2lkKiogZnJhbWVQb2ludGVyKTsKLSAgICB2b2lkIHJlcG9y
dCgpOwotCi0gICAgQ29kZVByb2ZpbGUqIHBhcmVudCgpCi0gICAgewotICAgICAgICByZXR1cm4g
bV9wYXJlbnQ7Ci0gICAgfQotICAgIAotICAgIHZvaWQgYWRkQ2hpbGQoc3RkOjp1bmlxdWVfcHRy
PENvZGVQcm9maWxlPiBjaGlsZCkKLSAgICB7Ci0gICAgICAgIG1fY2hpbGRyZW4uYXBwZW5kKFdU
Rk1vdmUoY2hpbGQpKTsKLSAgICB9Ci0KLSAgICBlbnVtIENvZGVUeXBlIHsKLSAgICAgICAgRW5n
aW5lQ29kZSwKLSAgICAgICAgR2xvYmFsVGh1bmssCi0gICAgICAgIFJlZ0V4cENvZGUsCi0gICAg
ICAgIERGR0pJVCwKLSAgICAgICAgQmFzZWxpbmVPbmx5LAotICAgICAgICBCYXNlbGluZVByb2Zp
bGUsCi0gICAgICAgIEJhc2VsaW5lT1NSLAotICAgICAgICBFbmdpbmVGcmFtZSwKLSAgICAgICAg
TnVtYmVyT2ZDb2RlVHlwZXMKLSAgICB9OwotCi1wcml2YXRlOgotICAgIHN0cnVjdCBDb2RlUmVj
b3JkIHsKLSAgICAgICAgQ29kZVJlY29yZCh2b2lkKiBwYywgQ29kZVR5cGUgdHlwZSkKLSAgICAg
ICAgICAgIDogcGMocGMpCi0gICAgICAgICAgICAsIHR5cGUodHlwZSkKLSAgICAgICAgewotICAg
ICAgICB9Ci0gICAgICAgIHZvaWQqIHBjOwotICAgICAgICBDb2RlVHlwZSB0eXBlOwotICAgIH07
Ci0KLSAgICBDU3RyaW5nIG1fZmlsZTsKLSAgICB1bnNpZ25lZCBtX2xpbmVOdW1iZXI7Ci0gICAg
Q29kZVByb2ZpbGUqIG1fcGFyZW50OwotICAgIFZlY3RvcjxzdGQ6OnVuaXF1ZV9wdHI8Q29kZVBy
b2ZpbGU+PiBtX2NoaWxkcmVuOwotICAgIFRpZXJlZE1NYXBBcnJheTxDb2RlUmVjb3JkPiBtX3Nh
bXBsZXM7Ci19OwotCi19IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS90b29scy9Db2RlUHJvZmlsaW5nLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvdG9vbHMvQ29kZVByb2ZpbGluZy5jcHAJKHJldmlzaW9uIDI1Nzg2NikKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS90b29scy9Db2RlUHJvZmlsaW5nLmNwcAkobm9uZXhpc3RlbnQp
CkBAIC0xLDE2OSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEyLTIwMTggQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
Ci0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0g
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUK
LSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4gCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIkNvZGVQcm9maWxp
bmcuaCIKLQotI2luY2x1ZGUgIkNvZGVQcm9maWxlLmgiCi0jaW5jbHVkZSAiTWFjaGluZUNvbnRl
eHQuaCIKLSNpbmNsdWRlIDx3dGYvTWV0YUFsbG9jYXRvci5oPgotCi0jaWYgSEFWRShTSUdOQUxf
SCkKLSNpbmNsdWRlIDxzaWduYWwuaD4KLSNlbmRpZgotCi0jaWYgSEFWRShNQUNISU5FX0NPTlRF
WFQpCi0jaW5jbHVkZSA8c3lzL3RpbWUuaD4KLSNlbmRpZgotCi1uYW1lc3BhY2UgSlNDIHsKLQot
dm9sYXRpbGUgQ29kZVByb2ZpbGUqIENvZGVQcm9maWxpbmc6OnNfcHJvZmlsZVN0YWNrID0gMDsK
LUNvZGVQcm9maWxpbmc6Ok1vZGUgQ29kZVByb2ZpbGluZzo6c19tb2RlID0gQ29kZVByb2ZpbGlu
Zzo6RGlzYWJsZWQ7Ci1XVEY6Ok1ldGFBbGxvY2F0b3JUcmFja2VyKiBDb2RlUHJvZmlsaW5nOjpz
X3RyYWNrZXIgPSAwOwotCi1JR05PUkVfV0FSTklOR1NfQkVHSU4oIm1pc3Npbmctbm9yZXR1cm4i
KQotCi0jaWYgSEFWRShNQUNISU5FX0NPTlRFWFQpCi0vLyBIZWxwZXIgZnVuY3Rpb24gdG8gc3Rh
cnQgJiBzdG9wIHRoZSB0aW1lci4KLS8vIFByZXNlbnRseSB3ZSdyZSB1c2luZyB0aGUgd2FsbC1j
bG9jayB0aW1lciwgc2luY2UgdGhpcyBzZWVtcyB0byBnaXZlIHRoZSBiZXN0IHJlc3VsdHMuCi1z
dGF0aWMgdm9pZCBzZXRQcm9maWxlVGltZXIodW5zaWduZWQgdXNlYykKLXsKLSAgICBpdGltZXJ2
YWwgdGltZXI7Ci0gICAgdGltZXIuaXRfdmFsdWUudHZfc2VjID0gMDsKLSAgICB0aW1lci5pdF92
YWx1ZS50dl91c2VjID0gdXNlYzsKLSAgICB0aW1lci5pdF9pbnRlcnZhbC50dl9zZWMgPSAwOwot
ICAgIHRpbWVyLml0X2ludGVydmFsLnR2X3VzZWMgPSB1c2VjOwotICAgIHNldGl0aW1lcihJVElN
RVJfUkVBTCwgJnRpbWVyLCAwKTsKLX0KLSNlbmRpZgotCi1JR05PUkVfV0FSTklOR1NfRU5ECi0K
LSNpZiBIQVZFKE1BQ0hJTkVfQ09OVEVYVCkKLXN0YXRpYyB2b2lkIHByb2ZpbGluZ1RpbWVyKGlu
dCwgc2lnaW5mb190Kiwgdm9pZCogdWFwKQotewotICAgIFBsYXRmb3JtUmVnaXN0ZXJzJiBwbGF0
Zm9ybVJlZ2lzdGVycyA9IFdURjo6cmVnaXN0ZXJzRnJvbVVDb250ZXh0KHN0YXRpY19jYXN0PHVj
b250ZXh0X3QqPih1YXApKTsKLSAgICBpZiAoYXV0byBpbnN0cnVjdGlvblBvaW50ZXIgPSBNYWNo
aW5lQ29udGV4dDo6aW5zdHJ1Y3Rpb25Qb2ludGVyKHBsYXRmb3JtUmVnaXN0ZXJzKSkgewotICAg
ICAgICBDb2RlUHJvZmlsaW5nOjpzYW1wbGUoCi0gICAgICAgICAgICBpbnN0cnVjdGlvblBvaW50
ZXItPnVudGFnZ2VkRXhlY3V0YWJsZUFkZHJlc3MoKSwKLSAgICAgICAgICAgIHJlaW50ZXJwcmV0
X2Nhc3Q8dm9pZCoqPihNYWNoaW5lQ29udGV4dDo6ZnJhbWVQb2ludGVyKHBsYXRmb3JtUmVnaXN0
ZXJzKSkpOwotICAgIH0KLX0KLSNlbmRpZgotCi0vLyBDYWxsYmFjayB0cmlnZ2VyZWQgd2hlbiB0
aGUgdGltZXIgaXMgZmlyZWQuCi12b2lkIENvZGVQcm9maWxpbmc6OnNhbXBsZSh2b2lkKiBwYywg
dm9pZCoqIGZyYW1lUG9pbnRlcikKLXsKLSAgICBDb2RlUHJvZmlsZSogcHJvZmlsZVN0YWNrID0g
Y29uc3RfY2FzdDxDb2RlUHJvZmlsZSo+KHNfcHJvZmlsZVN0YWNrKTsKLSAgICBpZiAocHJvZmls
ZVN0YWNrKQotICAgICAgICBwcm9maWxlU3RhY2stPnNhbXBsZShwYywgZnJhbWVQb2ludGVyKTsK
LX0KLQotdm9pZCBDb2RlUHJvZmlsaW5nOjpub3RpZnlBbGxvY2F0b3IoV1RGOjpNZXRhQWxsb2Nh
dG9yKiBhbGxvY2F0b3IpCi17Ci0gICAgLy8gQ2hlY2sgZm9yIEpTQ19DT0RFX1BST0ZJTElORy4K
LSAgICBjb25zdCBjaGFyKiBjb2RlUHJvZmlsaW5nTW9kZSA9IGdldGVudigiSlNDX0NPREVfUFJP
RklMSU5HIik7Ci0gICAgaWYgKCFjb2RlUHJvZmlsaW5nTW9kZSkKLSAgICAgICAgcmV0dXJuOwot
Ci0gICAgLy8gQ2hlY2sgZm9yIGEgdmFsaWQgbW9kZSwgY3VycmVudGx5ICIxIiwgIjIiLCBvciAi
MyIuCi0gICAgaWYgKCFjb2RlUHJvZmlsaW5nTW9kZVswXSB8fCBjb2RlUHJvZmlsaW5nTW9kZVsx
XSkKLSAgICAgICAgcmV0dXJuOwotICAgIHN3aXRjaCAoKmNvZGVQcm9maWxpbmdNb2RlKSB7Ci0g
ICAgY2FzZSAnMSc6Ci0gICAgICAgIHNfbW9kZSA9IEVuYWJsZWQ7Ci0gICAgICAgIGJyZWFrOwot
ICAgIGNhc2UgJzInOgotICAgICAgICBzX21vZGUgPSBWZXJib3NlOwotICAgICAgICBicmVhazsK
LSAgICBjYXNlICczJzoKLSAgICAgICAgc19tb2RlID0gVmVyeVZlcmJvc2U7Ci0gICAgICAgIGJy
ZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBBU1NFUlQo
ZW5hYmxlZCgpKTsKLSAgICBBU1NFUlQoIXNfdHJhY2tlcik7Ci0gICAgc190cmFja2VyID0gbmV3
IFdURjo6TWV0YUFsbG9jYXRvclRyYWNrZXIoKTsKLSAgICBhbGxvY2F0b3ItPnRyYWNrQWxsb2Nh
dGlvbnMoc190cmFja2VyKTsKLX0KLQotdm9pZCogQ29kZVByb2ZpbGluZzo6Z2V0T3duZXJVSURG
b3JQQyh2b2lkKiBhZGRyZXNzKQotewotICAgIGlmICghc190cmFja2VyKQotICAgICAgICByZXR1
cm4gMDsKLSAgICBXVEY6Ok1ldGFBbGxvY2F0b3JIYW5kbGUqIGhhbmRsZSA9IHNfdHJhY2tlci0+
ZmluZChhZGRyZXNzKTsKLSAgICBpZiAoIWhhbmRsZSkKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAg
cmV0dXJuIGhhbmRsZS0+b3duZXJVSUQoKTsKLX0KLQotdm9pZCBDb2RlUHJvZmlsaW5nOjpiZWdp
bihjb25zdCBTb3VyY2VDb2RlJiBzb3VyY2UpCi17Ci0gICAgLy8gUHVzaCBhIG5ldyBDb2RlUHJv
ZmlsZSBvbnRvIHRoZSBzdGFjayBmb3IgZWFjaCBzY3JpcHQgZW5jb3VudGVyZWQuCi0gICAgQ29k
ZVByb2ZpbGUqIHByb2ZpbGVTdGFjayA9IGNvbnN0X2Nhc3Q8Q29kZVByb2ZpbGUqPihzX3Byb2Zp
bGVTdGFjayk7Ci0gICAgYm9vbCBhbHJlYWR5UHJvZmlsaW5nID0gcHJvZmlsZVN0YWNrOwotICAg
IHNfcHJvZmlsZVN0YWNrID0gcHJvZmlsZVN0YWNrID0gbmV3IENvZGVQcm9maWxlKHNvdXJjZSwg
cHJvZmlsZVN0YWNrKTsKLQotICAgIC8vIElzIHRoZSBwcm9maWxlciBhbHJlYWR5IHJ1bm5pbmcg
LSBpZiBzbywgdGhlIHRpbWVyIHdpbGwgYWxyZWFkeSBiZSBzZXQgdXAuCi0gICAgaWYgKGFscmVh
ZHlQcm9maWxpbmcpCi0gICAgICAgIHJldHVybjsKLQotI2lmIEhBVkUoTUFDSElORV9DT05URVhU
KQotICAgIC8vIFJlZ3NpdGVyIGEgc2lnbmFsIGhhbmRsZXIgJiBpdGltZXIuCi0gICAgc3RydWN0
IHNpZ2FjdGlvbiBhY3Rpb247Ci0gICAgYWN0aW9uLnNhX3NpZ2FjdGlvbiA9IHJlaW50ZXJwcmV0
X2Nhc3Q8dm9pZCAoKikoaW50LCBzaWdpbmZvX3QgKiwgdm9pZCAqKT4ocHJvZmlsaW5nVGltZXIp
OwotICAgIHNpZ2ZpbGxzZXQoJmFjdGlvbi5zYV9tYXNrKTsKLSAgICBhY3Rpb24uc2FfZmxhZ3Mg
PSBTQV9TSUdJTkZPOwotICAgIHNpZ2FjdGlvbihTSUdBTFJNLCAmYWN0aW9uLCAwKTsKLSAgICBz
ZXRQcm9maWxlVGltZXIoMTAwKTsKLSNlbmRpZgotfQotCi12b2lkIENvZGVQcm9maWxpbmc6OmVu
ZCgpCi17Ci0gICAgLy8gUG9wIHRoZSBjdXJyZW50IHByb2ZpbGVyIG9mZiB0aGUgc3RhY2suCi0g
ICAgQ29kZVByb2ZpbGUqIGN1cnJlbnQgPSBjb25zdF9jYXN0PENvZGVQcm9maWxlKj4oc19wcm9m
aWxlU3RhY2spOwotICAgIEFTU0VSVChjdXJyZW50KTsKLSAgICBzX3Byb2ZpbGVTdGFjayA9IGN1
cnJlbnQtPnBhcmVudCgpOwotCi0gICAgLy8gSXMgdGhpcyB0aGUgb3V0ZXJtb3N0IHNjcmlwdCBi
ZWluZyBwcm9maWxlZD8gLSBpZiBub3QsIGp1c3QgcmV0dXJuLgotICAgIC8vIFdlIHBlcmZvcm0g
YWxsIG91dHB1dCBvZiBwcm9maWxlcyByZWN1cnNpdmVseSBmcm9tIHRoZSBvdXRlcm1vc3Qgc2Ny
aXB0LAotICAgIC8vIHRvIG1pbmltaXplIHByb2ZpbGluZyBvdmVyaGVhZCBmcm9tIHNrZXdpbmcg
cmVzdWx0cy4KLSAgICBpZiAoc19wcm9maWxlU3RhY2spCi0gICAgICAgIHJldHVybjsKLQotI2lm
IEhBVkUoTUFDSElORV9DT05URVhUKQotICAgIC8vIFN0b3AgcHJvZmlsaW5nCi0gICAgc2V0UHJv
ZmlsZVRpbWVyKDApOwotI2VuZGlmCi0KLSAgICBjdXJyZW50LT5yZXBvcnQoKTsKLSAgICBkZWxl
dGUgY3VycmVudDsKLX0KLQotfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3Rvb2xzL0Nv
ZGVQcm9maWxpbmcuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvdG9vbHMv
Q29kZVByb2ZpbGluZy5oCShyZXZpc2lvbiAyNTc4NjYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvdG9vbHMvQ29kZVByb2ZpbGluZy5oCShub25leGlzdGVudCkKQEAgLTEsODEgKzAsMCBAQAot
LyoKLSAqIENvcHlyaWdodCAoQykgMjAxMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAq
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotCi0jcHJhZ21hIG9u
Y2UKLQotbmFtZXNwYWNlIFdURiB7Ci0KLWNsYXNzIE1ldGFBbGxvY2F0b3I7Ci1jbGFzcyBNZXRh
QWxsb2NhdG9yVHJhY2tlcjsKLQotfQotCi1uYW1lc3BhY2UgSlNDIHsKLQotY2xhc3MgQ29kZVBy
b2ZpbGU7Ci1jbGFzcyBTb3VyY2VDb2RlOwotCi1jbGFzcyBDb2RlUHJvZmlsaW5nIHsKLSAgICBl
bnVtIE1vZGUgewotICAgICAgICBEaXNhYmxlZCwKLSAgICAgICAgRW5hYmxlZCwKLSAgICAgICAg
VmVyYm9zZSwKLSAgICAgICAgVmVyeVZlcmJvc2UKLSAgICB9OwotCi1wdWJsaWM6Ci0gICAgQ29k
ZVByb2ZpbGluZyhjb25zdCBTb3VyY2VDb2RlJiBzb3VyY2UpCi0gICAgICAgIDogbV9hY3RpdmUo
ZW5hYmxlZCgpKQotICAgIHsKLSAgICAgICAgaWYgKG1fYWN0aXZlKQotICAgICAgICAgICAgYmVn
aW4oc291cmNlKTsKLSAgICB9Ci0KLSAgICB+Q29kZVByb2ZpbGluZygpCi0gICAgewotICAgICAg
ICBpZiAobV9hY3RpdmUpCi0gICAgICAgICAgICBlbmQoKTsKLSAgICB9Ci0KLSAgICBzdGF0aWMg
Ym9vbCBlbmFibGVkKCkgeyByZXR1cm4gc19tb2RlICE9IERpc2FibGVkOyB9Ci0gICAgc3RhdGlj
IGJvb2wgYmVWZXJib3NlKCkgeyByZXR1cm4gc19tb2RlID49IFZlcmJvc2U7IH0KLSAgICBzdGF0
aWMgYm9vbCBiZVZlcnlWZXJib3NlKCkgeyByZXR1cm4gc19tb2RlID49IFZlcnlWZXJib3NlOyB9
Ci0KLSAgICBzdGF0aWMgdm9pZCBub3RpZnlBbGxvY2F0b3IoV1RGOjpNZXRhQWxsb2NhdG9yKik7
Ci0gICAgc3RhdGljIHZvaWQqIGdldE93bmVyVUlERm9yUEModm9pZCopOwotICAgIHN0YXRpYyB2
b2lkIHNhbXBsZSh2b2lkKiBwYywgdm9pZCoqIGZyYW1lUG9pbnRlcik7Ci0KLXByaXZhdGU6Ci0g
ICAgdm9pZCBiZWdpbihjb25zdCBTb3VyY2VDb2RlJik7Ci0gICAgdm9pZCBlbmQoKTsKLQotICAg
IGJvb2wgbV9hY3RpdmU7Ci0KLSAgICBzdGF0aWMgTW9kZSBzX21vZGU7Ci0gICAgc3RhdGljIFdU
Rjo6TWV0YUFsbG9jYXRvclRyYWNrZXIqIHNfdHJhY2tlcjsKLSAgICBzdGF0aWMgdm9sYXRpbGUg
Q29kZVByb2ZpbGUqIHNfcHJvZmlsZVN0YWNrOwotfTsKLQotfSAvLyBuYW1lc3BhY2UgSlNDCklu
ZGV4OiBTb3VyY2UvV1RGL3d0Zi9NZXRhQWxsb2NhdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV1RGL3d0Zi9NZXRhQWxsb2NhdG9yLmNwcAkocmV2aXNpb24gMjU3ODY2KQorKysgU291cmNl
L1dURi93dGYvTWV0YUFsbG9jYXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU0LDQ1ICs1NCw0
NSBAQCBNZXRhQWxsb2NhdG9yOjp+TWV0YUFsbG9jYXRvcigpCiAjZW5kaWYKIH0KIAotdm9pZCBN
ZXRhQWxsb2NhdG9yVHJhY2tlcjo6bm90aWZ5KE1ldGFBbGxvY2F0b3JIYW5kbGUqIGhhbmRsZSkK
K3ZvaWQgTWV0YUFsbG9jYXRvclRyYWNrZXI6Om5vdGlmeShNZXRhQWxsb2NhdG9ySGFuZGxlJiBo
YW5kbGUpCiB7Ci0gICAgbV9hbGxvY2F0aW9ucy5pbnNlcnQoaGFuZGxlKTsKKyAgICBtX2FsbG9j
YXRpb25zLmluc2VydCgmaGFuZGxlKTsKIH0KIAotdm9pZCBNZXRhQWxsb2NhdG9yVHJhY2tlcjo6
cmVsZWFzZShNZXRhQWxsb2NhdG9ySGFuZGxlKiBoYW5kbGUpCit2b2lkIE1ldGFBbGxvY2F0b3JU
cmFja2VyOjpyZWxlYXNlKE1ldGFBbGxvY2F0b3JIYW5kbGUmIGhhbmRsZSkKIHsKLSAgICBtX2Fs
bG9jYXRpb25zLnJlbW92ZShoYW5kbGUpOworICAgIG1fYWxsb2NhdGlvbnMucmVtb3ZlKCZoYW5k
bGUpOwogfQogCi1BTFdBWVNfSU5MSU5FIHZvaWQgTWV0YUFsbG9jYXRvcjo6cmVsZWFzZShNZXRh
QWxsb2NhdG9ySGFuZGxlKiBoYW5kbGUpCitBTFdBWVNfSU5MSU5FIHZvaWQgTWV0YUFsbG9jYXRv
cjo6cmVsZWFzZShNZXRhQWxsb2NhdG9ySGFuZGxlJiBoYW5kbGUpCiB7CiAgICAgTG9ja0hvbGRl
ciBsb2NrZXIoJm1fbG9jayk7Ci0gICAgaWYgKGhhbmRsZS0+c2l6ZUluQnl0ZXMoKSkgewotICAg
ICAgICB2b2lkKiBzdGFydCA9IGhhbmRsZS0+c3RhcnQoKS51bnRhZ2dlZFB0cigpOwotICAgICAg
ICBzaXplX3Qgc2l6ZUluQnl0ZXMgPSBoYW5kbGUtPnNpemVJbkJ5dGVzKCk7CisgICAgaWYgKGhh
bmRsZS5zaXplSW5CeXRlcygpKSB7CisgICAgICAgIHZvaWQqIHN0YXJ0ID0gaGFuZGxlLnN0YXJ0
KCkudW50YWdnZWRQdHIoKTsKKyAgICAgICAgc2l6ZV90IHNpemVJbkJ5dGVzID0gaGFuZGxlLnNp
emVJbkJ5dGVzKCk7CiAgICAgICAgIGRlY3JlbWVudFBhZ2VPY2N1cGFuY3koc3RhcnQsIHNpemVJ
bkJ5dGVzKTsKICAgICAgICAgYWRkRnJlZVNwYWNlRnJvbVJlbGVhc2VkSGFuZGxlKEZyZWVTcGFj
ZVB0cihzdGFydCksIHNpemVJbkJ5dGVzKTsKICAgICB9CiAKLSAgICBpZiAoVU5MSUtFTFkoISFt
X3RyYWNrZXIpKQotICAgICAgICBtX3RyYWNrZXItPnJlbGVhc2UoaGFuZGxlKTsKKyAgICBpZiAo
aGFuZGxlLm5lZWRzVG9CZU5vdGlmaWVkT2ZSZWxlYXNlKCkpCisgICAgICAgIG5vdGlmeUJlZm9y
ZVJlbGVhc2UoaGFuZGxlKTsKKworICAgIG1fdHJhY2tlci5yZWxlYXNlKGhhbmRsZSk7CiB9CiAK
LU1ldGFBbGxvY2F0b3JIYW5kbGU6Ok1ldGFBbGxvY2F0b3JIYW5kbGUoTWV0YUFsbG9jYXRvciog
YWxsb2NhdG9yLCB2b2lkKiBzdGFydCwgc2l6ZV90IHNpemVJbkJ5dGVzLCB2b2lkKiBvd25lclVJ
RCkKLSAgICA6IG1fYWxsb2NhdG9yKGFsbG9jYXRvcikKK01ldGFBbGxvY2F0b3JIYW5kbGU6Ok1l
dGFBbGxvY2F0b3JIYW5kbGUoTWV0YUFsbG9jYXRvciYgYWxsb2NhdG9yLCB2b2lkKiBzdGFydCwg
c2l6ZV90IHNpemVJbkJ5dGVzKQorICAgIDogbV9hbGxvY2F0b3IoJmFsbG9jYXRvcikKICAgICAs
IG1fc3RhcnQoc3RhcnQpCiAgICAgLCBtX2VuZChyZWludGVycHJldF9jYXN0PGNoYXIqPihzdGFy
dCkgKyBzaXplSW5CeXRlcykKLSAgICAsIG1fb3duZXJVSUQob3duZXJVSUQpCiB7Ci0gICAgQVNT
RVJUKGFsbG9jYXRvcik7CisgICAgQVNTRVJUKCEoYml0d2lzZV9jYXN0PHVpbnRwdHJfdD4obV9h
bGxvY2F0b3IpICYgbmVlZHNUb0JlTm90aWZpZWRPZlJlbGVhc2VCaXQpKTsKICAgICBBU1NFUlQo
c3RhcnQpOwogICAgIEFTU0VSVChzaXplSW5CeXRlcyk7CiB9CiAKIE1ldGFBbGxvY2F0b3JIYW5k
bGU6On5NZXRhQWxsb2NhdG9ySGFuZGxlKCkKIHsKLSAgICBBU1NFUlQobV9hbGxvY2F0b3IpOwot
ICAgIG1fYWxsb2NhdG9yLT5yZWxlYXNlKHRoaXMpOworICAgIGFsbG9jYXRvcigpLnJlbGVhc2Uo
KnRoaXMpOwogfQogCiB2b2lkIE1ldGFBbGxvY2F0b3JIYW5kbGU6OnNocmluayhzaXplX3QgbmV3
U2l6ZUluQnl0ZXMpCkBAIC0xMDAsOSArMTAwLDEwIEBAIHZvaWQgTWV0YUFsbG9jYXRvckhhbmRs
ZTo6c2hyaW5rKHNpemVfdCAKICAgICBzaXplX3Qgc2l6ZUluQnl0ZXMgPSB0aGlzLT5zaXplSW5C
eXRlcygpOwogICAgIEFTU0VSVChuZXdTaXplSW5CeXRlcyA8PSBzaXplSW5CeXRlcyk7CiAKLSAg
ICBMb2NrSG9sZGVyIGxvY2tlcigmbV9hbGxvY2F0b3ItPm1fbG9jayk7CisgICAgTWV0YUFsbG9j
YXRvciYgYWxsb2NhdG9yID0gdGhpcy0+YWxsb2NhdG9yKCk7CisgICAgTG9ja0hvbGRlciBsb2Nr
ZXIoJmFsbG9jYXRvci5tX2xvY2spOwogCi0gICAgbmV3U2l6ZUluQnl0ZXMgPSBtX2FsbG9jYXRv
ci0+cm91bmRVcChuZXdTaXplSW5CeXRlcyk7CisgICAgbmV3U2l6ZUluQnl0ZXMgPSBhbGxvY2F0
b3Iucm91bmRVcChuZXdTaXplSW5CeXRlcyk7CiAgICAgCiAgICAgQVNTRVJUKG5ld1NpemVJbkJ5
dGVzIDw9IHNpemVJbkJ5dGVzKTsKIApAQCAtMTEzLDExICsxMTQsMTEgQEAgdm9pZCBNZXRhQWxs
b2NhdG9ySGFuZGxlOjpzaHJpbmsoc2l6ZV90IAogICAgIHNpemVfdCBmcmVlU2l6ZSA9IHNpemVJ
bkJ5dGVzIC0gbmV3U2l6ZUluQnl0ZXM7CiAgICAgdWludHB0cl90IGZyZWVFbmQgPSBmcmVlU3Rh
cnQgKyBmcmVlU2l6ZTsKICAgICAKLSAgICB1aW50cHRyX3QgZmlyc3RDb21wbGV0ZWx5RnJlZVBh
Z2UgPSAoZnJlZVN0YXJ0ICsgbV9hbGxvY2F0b3ItPm1fcGFnZVNpemUgLSAxKSAmIH4obV9hbGxv
Y2F0b3ItPm1fcGFnZVNpemUgLSAxKTsKKyAgICB1aW50cHRyX3QgZmlyc3RDb21wbGV0ZWx5RnJl
ZVBhZ2UgPSAoZnJlZVN0YXJ0ICsgYWxsb2NhdG9yLm1fcGFnZVNpemUgLSAxKSAmIH4oYWxsb2Nh
dG9yLm1fcGFnZVNpemUgLSAxKTsKICAgICBpZiAoZmlyc3RDb21wbGV0ZWx5RnJlZVBhZ2UgPCBm
cmVlRW5kKQotICAgICAgICBtX2FsbG9jYXRvci0+ZGVjcmVtZW50UGFnZU9jY3VwYW5jeShyZWlu
dGVycHJldF9jYXN0PHZvaWQqPihmaXJzdENvbXBsZXRlbHlGcmVlUGFnZSksIGZyZWVTaXplIC0g
KGZpcnN0Q29tcGxldGVseUZyZWVQYWdlIC0gZnJlZVN0YXJ0KSk7CisgICAgICAgIGFsbG9jYXRv
ci5kZWNyZW1lbnRQYWdlT2NjdXBhbmN5KHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KGZpcnN0Q29t
cGxldGVseUZyZWVQYWdlKSwgZnJlZVNpemUgLSAoZmlyc3RDb21wbGV0ZWx5RnJlZVBhZ2UgLSBm
cmVlU3RhcnQpKTsKIAotICAgIG1fYWxsb2NhdG9yLT5hZGRGcmVlU3BhY2VGcm9tUmVsZWFzZWRI
YW5kbGUoTWV0YUFsbG9jYXRvcjo6RnJlZVNwYWNlUHRyKGZyZWVTdGFydCksIGZyZWVTaXplKTsK
KyAgICBhbGxvY2F0b3IuYWRkRnJlZVNwYWNlRnJvbVJlbGVhc2VkSGFuZGxlKE1ldGFBbGxvY2F0
b3I6OkZyZWVTcGFjZVB0cihmcmVlU3RhcnQpLCBmcmVlU2l6ZSk7CiAKICAgICBtX2VuZCA9IG1f
c3RhcnQgKyBuZXdTaXplSW5CeXRlczsKIH0KQEAgLTEyNywxMyArMTI4LDEzIEBAIHZvaWQgTWV0
YUFsbG9jYXRvckhhbmRsZTo6ZHVtcChQcmludFN0cmUKICAgICBvdXQucHJpbnQoUmF3UG9pbnRl
cihzdGFydCgpLnVudGFnZ2VkUHRyKCkpLCAiLi4uIiwgUmF3UG9pbnRlcihlbmQoKS51bnRhZ2dl
ZFB0cigpKSk7CiB9CiAKLU1ldGFBbGxvY2F0b3I6Ok1ldGFBbGxvY2F0b3Ioc2l6ZV90IGFsbG9j
YXRpb25HcmFudWxlLCBzaXplX3QgcGFnZVNpemUpCitNZXRhQWxsb2NhdG9yOjpNZXRhQWxsb2Nh
dG9yKExvY2smIGxvY2ssIHNpemVfdCBhbGxvY2F0aW9uR3JhbnVsZSwgc2l6ZV90IHBhZ2VTaXpl
KQogICAgIDogbV9hbGxvY2F0aW9uR3JhbnVsZShhbGxvY2F0aW9uR3JhbnVsZSkKICAgICAsIG1f
cGFnZVNpemUocGFnZVNpemUpCiAgICAgLCBtX2J5dGVzQWxsb2NhdGVkKDApCiAgICAgLCBtX2J5
dGVzUmVzZXJ2ZWQoMCkKICAgICAsIG1fYnl0ZXNDb21taXR0ZWQoMCkKLSAgICAsIG1fdHJhY2tl
cigwKQorICAgICwgbV9sb2NrKGxvY2spCiAjaWZuZGVmIE5ERUJVRwogICAgICwgbV9tYWxsb2NC
YWxhbmNlKDApCiAjZW5kaWYKQEAgLTE1Nyw3ICsxNTgsNyBAQCBNZXRhQWxsb2NhdG9yOjpNZXRh
QWxsb2NhdG9yKHNpemVfdCBhbGxvCiAgICAgQVNTRVJUKHN0YXRpY19jYXN0PHNpemVfdD4oMSkg
PDwgbV9sb2dBbGxvY2F0aW9uR3JhbnVsZSA9PSBtX2FsbG9jYXRpb25HcmFudWxlKTsKIH0KIAot
UmVmUHRyPE1ldGFBbGxvY2F0b3JIYW5kbGU+IE1ldGFBbGxvY2F0b3I6OmFsbG9jYXRlKHNpemVf
dCBzaXplSW5CeXRlcywgdm9pZCogb3duZXJVSUQpCitSZWZQdHI8TWV0YUFsbG9jYXRvckhhbmRs
ZT4gTWV0YUFsbG9jYXRvcjo6YWxsb2NhdGUoc2l6ZV90IHNpemVJbkJ5dGVzKQogewogICAgIExv
Y2tIb2xkZXIgbG9ja2VyKCZtX2xvY2spOwogCkBAIC0xOTUsMTAgKzE5Niw5IEBAIFJlZlB0cjxN
ZXRhQWxsb2NhdG9ySGFuZGxlPiBNZXRhQWxsb2NhdG8KICAgICBtX251bUFsbG9jYXRpb25zKys7
CiAjZW5kaWYKIAotICAgIGF1dG8gaGFuZGxlID0gYWRvcHRSZWYoKm5ldyBNZXRhQWxsb2NhdG9y
SGFuZGxlKHRoaXMsIHN0YXJ0LnVudGFnZ2VkUHRyKCksIHNpemVJbkJ5dGVzLCBvd25lclVJRCkp
OworICAgIGF1dG8gaGFuZGxlID0gYWRvcHRSZWYoKm5ldyBNZXRhQWxsb2NhdG9ySGFuZGxlKCp0
aGlzLCBzdGFydC51bnRhZ2dlZFB0cigpLCBzaXplSW5CeXRlcykpOwogCi0gICAgaWYgKFVOTElL
RUxZKCEhbV90cmFja2VyKSkKLSAgICAgICAgbV90cmFja2VyLT5ub3RpZnkoaGFuZGxlLnB0cigp
KTsKKyAgICBtX3RyYWNrZXIubm90aWZ5KCpoYW5kbGUucHRyKCkpOwogCiAgICAgcmV0dXJuIGhh
bmRsZTsKIH0KSW5kZXg6IFNvdXJjZS9XVEYvd3RmL01ldGFBbGxvY2F0b3IuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV1RGL3d0Zi9NZXRhQWxsb2NhdG9yLmgJKHJldmlzaW9uIDI1Nzg2NikKKysr
IFNvdXJjZS9XVEYvd3RmL01ldGFBbGxvY2F0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtNDQsMTUg
KzQ0LDE1IEBAIG5hbWVzcGFjZSBXVEYgewogY2xhc3MgTWV0YUFsbG9jYXRvclRyYWNrZXIgewog
ICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogcHVibGljOgotICAgIHZvaWQgbm90aWZ5KE1l
dGFBbGxvY2F0b3JIYW5kbGUqKTsKLSAgICB2b2lkIHJlbGVhc2UoTWV0YUFsbG9jYXRvckhhbmRs
ZSopOworICAgIHZvaWQgbm90aWZ5KE1ldGFBbGxvY2F0b3JIYW5kbGUmKTsKKyAgICB2b2lkIHJl
bGVhc2UoTWV0YUFsbG9jYXRvckhhbmRsZSYpOwogCiAgICAgTWV0YUFsbG9jYXRvckhhbmRsZSog
ZmluZCh2b2lkKiBhZGRyZXNzKQogICAgIHsKICAgICAgICAgTWV0YUFsbG9jYXRvckhhbmRsZSog
aGFuZGxlID0gbV9hbGxvY2F0aW9ucy5maW5kR3JlYXRlc3RMZXNzVGhhbk9yRXF1YWwoYWRkcmVz
cyk7Ci0gICAgICAgIGlmIChoYW5kbGUgJiYgYWRkcmVzcyA8IGhhbmRsZS0+ZW5kKCkudW50YWdn
ZWRQdHIoKSkKKyAgICAgICAgaWYgKGhhbmRsZSAmJiBoYW5kbGUtPnN0YXJ0KCkudW50YWdnZWRQ
dHIoKSA8PSBhZGRyZXNzICYmIGFkZHJlc3MgPCBoYW5kbGUtPmVuZCgpLnVudGFnZ2VkUHRyKCkp
CiAgICAgICAgICAgICByZXR1cm4gaGFuZGxlOwotICAgICAgICByZXR1cm4gMDsKKyAgICAgICAg
cmV0dXJuIG51bGxwdHI7CiAgICAgfQogCiAgICAgUmVkQmxhY2tUcmVlPE1ldGFBbGxvY2F0b3JI
YW5kbGUsIHZvaWQqPiBtX2FsbG9jYXRpb25zOwpAQCAtNjQsMTcgKzY0LDEyIEBAIGNsYXNzIE1l
dGFBbGxvY2F0b3IgewogcHVibGljOgogICAgIHVzaW5nIEZyZWVTcGFjZVB0ciA9IE1ldGFBbGxv
Y2F0b3JQdHI8RnJlZVNwYWNlUHRyVGFnPjsKIAotICAgIFdURl9FWFBPUlRfUFJJVkFURSBNZXRh
QWxsb2NhdG9yKHNpemVfdCBhbGxvY2F0aW9uR3JhbnVsZSwgc2l6ZV90IHBhZ2VTaXplID0gV1RG
OjpwYWdlU2l6ZSgpKTsKKyAgICBXVEZfRVhQT1JUX1BSSVZBVEUgTWV0YUFsbG9jYXRvcihMb2Nr
Jiwgc2l6ZV90IGFsbG9jYXRpb25HcmFudWxlLCBzaXplX3QgcGFnZVNpemUgPSBXVEY6OnBhZ2VT
aXplKCkpOwogICAgIAogICAgIFdURl9FWFBPUlRfUFJJVkFURSB2aXJ0dWFsIH5NZXRhQWxsb2Nh
dG9yKCk7CiAgICAgCi0gICAgV1RGX0VYUE9SVF9QUklWQVRFIFJlZlB0cjxNZXRhQWxsb2NhdG9y
SGFuZGxlPiBhbGxvY2F0ZShzaXplX3Qgc2l6ZUluQnl0ZXMsIHZvaWQqIG93bmVyVUlEKTsKKyAg
ICBXVEZfRVhQT1JUX1BSSVZBVEUgUmVmUHRyPE1ldGFBbGxvY2F0b3JIYW5kbGU+IGFsbG9jYXRl
KHNpemVfdCBzaXplSW5CeXRlcyk7CiAKLSAgICB2b2lkIHRyYWNrQWxsb2NhdGlvbnMoTWV0YUFs
bG9jYXRvclRyYWNrZXIqIHRyYWNrZXIpCi0gICAgewotICAgICAgICBtX3RyYWNrZXIgPSB0cmFj
a2VyOwotICAgIH0KLSAgICAKICAgICAvLyBOb24tYXRvbWljIG1ldGhvZHMgZm9yIGdldHRpbmcg
YWxsb2NhdG9yIHN0YXRpc3RpY3MuCiAgICAgc2l6ZV90IGJ5dGVzQWxsb2NhdGVkKCkgeyByZXR1
cm4gbV9ieXRlc0FsbG9jYXRlZDsgfQogICAgIHNpemVfdCBieXRlc1Jlc2VydmVkKCkgeyByZXR1
cm4gbV9ieXRlc1Jlc2VydmVkOyB9CkBAIC05OCw3ICs5Myw2IEBAIHB1YmxpYzoKICAgICAvLyBi
dWlsZHMuCiAgICAgV1RGX0VYUE9SVF9QUklWQVRFIHNpemVfdCBkZWJ1Z0ZyZWVTcGFjZVNpemUo
KTsKIAotICAgIExvY2smIGdldExvY2soKSB7IHJldHVybiBtX2xvY2s7IH0KICAgICBXVEZfRVhQ
T1JUX1BSSVZBVEUgYm9vbCBpc0luQWxsb2NhdGVkTWVtb3J5KGNvbnN0IEFic3RyYWN0TG9ja2Vy
Jiwgdm9pZCogYWRkcmVzcyk7CiAgICAgCiAjaWYgRU5BQkxFKE1FVEFfQUxMT0NBVE9SX1BST0ZJ
TEUpCkBAIC0xMDcsNiArMTAxLDExIEBAIHB1YmxpYzoKICAgICB2b2lkIGR1bXBQcm9maWxlKCkg
eyB9CiAjZW5kaWYKIAorICAgIE1ldGFBbGxvY2F0b3JIYW5kbGUqIGZpbmQodm9pZCogYWRkcmVz
cykKKyAgICB7CisgICAgICAgIHJldHVybiBtX3RyYWNrZXIuZmluZChhZGRyZXNzKTsKKyAgICB9
CisKIHByb3RlY3RlZDoKICAgICAKICAgICAvLyBBbGxvY2F0ZSBuZXcgdmlydHVhbCBzcGFjZSwg
YnV0IGRvbid0IGNvbW1pdC4gVGhpcyBtYXkgcmV0dXJuIG1vcmUKQEAgLTExOCw2ICsxMTcsOCBA
QCBwcm90ZWN0ZWQ6CiAgICAgCiAgICAgLy8gVW5jb21taXQgYSBwYWdlLgogICAgIHZpcnR1YWwg
dm9pZCBub3RpZnlQYWdlSXNGcmVlKHZvaWQqIHBhZ2UsIHNpemVfdCkgPSAwOworCisgICAgdmly
dHVhbCB2b2lkIG5vdGlmeUJlZm9yZVJlbGVhc2UoTWV0YUFsbG9jYXRvckhhbmRsZSYpIHsgfQog
ICAgIAogICAgIC8vIE5PVEU6IG5vbmUgb2YgdGhlIGFib3ZlIG1ldGhvZHMgYXJlIGNhbGxlZCBk
dXJpbmcgYWxsb2NhdG9yCiAgICAgLy8gZGVzdHJ1Y3Rpb24sIGluIHBhcnQgYmVjYXVzZSBhIE1l
dGFBbGxvY2F0b3IgY2Fubm90IGRpZSBzbyBsb25nCkBAIC0xNTIsNyArMTUzLDcgQEAgcHJpdmF0
ZToKICAgICB0eXBlZGVmIFJlZEJsYWNrVHJlZTxGcmVlU3BhY2VOb2RlLCBzaXplX3Q+IFRyZWU7
CiAKICAgICAvLyBSZWxlYXNlIGEgTWV0YUFsbG9jYXRvckhhbmRsZS4KLSAgICB2b2lkIHJlbGVh
c2UoTWV0YUFsbG9jYXRvckhhbmRsZSopOworICAgIHZvaWQgcmVsZWFzZShNZXRhQWxsb2NhdG9y
SGFuZGxlJik7CiAgICAgCiAgICAgLy8gUmVtb3ZlIGZyZWUgc3BhY2UgZnJvbSB0aGUgYWxsb2Nh
dG9yLiBUaGlzIGlzIGVmZmVjdGl2ZWx5CiAgICAgLy8gdGhlIGFsbG9jYXRlKCkgZnVuY3Rpb24s
IGV4Y2VwdCB0aGF0IGl0IGRvZXMgbm90IG1hcmsgdGhlCkBAIC0xOTMsOSArMTk0LDkgQEAgcHJp
dmF0ZToKICAgICBzaXplX3QgbV9ieXRlc1Jlc2VydmVkOwogICAgIHNpemVfdCBtX2J5dGVzQ29t
bWl0dGVkOwogICAgIAotICAgIExvY2sgbV9sb2NrOworICAgIExvY2smIG1fbG9jazsKIAotICAg
IE1ldGFBbGxvY2F0b3JUcmFja2VyKiBtX3RyYWNrZXI7CisgICAgTWV0YUFsbG9jYXRvclRyYWNr
ZXIgbV90cmFja2VyOwogCiAjaWZuZGVmIE5ERUJVRwogICAgIHNpemVfdCBtX21hbGxvY0JhbGFu
Y2U7CkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9NZXRhQWxsb2NhdG9ySGFuZGxlLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dURi93dGYvTWV0YUFsbG9jYXRvckhhbmRsZS5oCShyZXZpc2lvbiAyNTc4
NjYpCisrKyBTb3VyY2UvV1RGL3d0Zi9NZXRhQWxsb2NhdG9ySGFuZGxlLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTQyLDcgKzQyLDcgQEAgREVDTEFSRV9BTExPQ0FUT1JfV0lUSF9IRUFQX0lERU5USUZJ
RVIoTQogY2xhc3MgTWV0YUFsbG9jYXRvckhhbmRsZSA6IHB1YmxpYyBUaHJlYWRTYWZlUmVmQ291
bnRlZDxNZXRhQWxsb2NhdG9ySGFuZGxlPiwgcHVibGljIFJlZEJsYWNrVHJlZTxNZXRhQWxsb2Nh
dG9ySGFuZGxlLCB2b2lkKj46Ok5vZGUgewogICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEX1dJ
VEhfSEVBUF9JREVOVElGSUVSKE1ldGFBbGxvY2F0b3JIYW5kbGUpOwogcHJpdmF0ZToKLSAgICBN
ZXRhQWxsb2NhdG9ySGFuZGxlKE1ldGFBbGxvY2F0b3IqLCB2b2lkKiBzdGFydCwgc2l6ZV90IHNp
emVJbkJ5dGVzLCB2b2lkKiBvd25lclVJRCk7CisgICAgTWV0YUFsbG9jYXRvckhhbmRsZShNZXRh
QWxsb2NhdG9yJiwgdm9pZCogc3RhcnQsIHNpemVfdCBzaXplSW5CeXRlcyk7CiAKIHB1YmxpYzoK
ICAgICB1c2luZyBNZW1vcnlQdHIgPSBNZXRhQWxsb2NhdG9yUHRyPEhhbmRsZU1lbW9yeVB0clRh
Zz47CkBAIC04NiwyMCArODYsMjAgQEAgcHVibGljOgogICAgICAgICAKICAgICBXVEZfRVhQT1JU
X1BSSVZBVEUgdm9pZCBzaHJpbmsoc2l6ZV90IG5ld1NpemVJbkJ5dGVzKTsKICAgICAKLSAgICBi
b29sIGlzTWFuYWdlZCgpCisgICAgTWV0YUFsbG9jYXRvciYgYWxsb2NhdG9yKCkKICAgICB7Ci0g
ICAgICAgIHJldHVybiAhIW1fYWxsb2NhdG9yOworICAgICAgICBNZXRhQWxsb2NhdG9yKiB1bnRh
Z2dlZFB0ciA9IGJpdHdpc2VfY2FzdDxNZXRhQWxsb2NhdG9yKj4oYml0d2lzZV9jYXN0PHVpbnRw
dHJfdD4obV9hbGxvY2F0b3IpICYgfm5lZWRzVG9CZU5vdGlmaWVkQmVmb3JlUmVsZWFzZUJpdCk7
CisgICAgICAgIHJldHVybiAqdW50YWdnZWRQdHI7CiAgICAgfQotICAgICAgICAKLSAgICBNZXRh
QWxsb2NhdG9yKiBhbGxvY2F0b3IoKQorCisgICAgdm9pZCBzZXROZWVkc1RvQmVOb3RpZmllZEJl
Zm9yZVJlbGVhc2UoKQogICAgIHsKLSAgICAgICAgQVNTRVJUKG1fYWxsb2NhdG9yKTsKLSAgICAg
ICAgcmV0dXJuIG1fYWxsb2NhdG9yOworICAgICAgICBtX2FsbG9jYXRvciA9IGJpdHdpc2VfY2Fz
dDxNZXRhQWxsb2NhdG9yKj4oYml0d2lzZV9jYXN0PHVpbnRwdHJfdD4obV9hbGxvY2F0b3IpIHwg
bmVlZHNUb0JlTm90aWZpZWRCZWZvcmVSZWxlYXNlQml0KTsKICAgICB9CiAKLSAgICB2b2lkKiBv
d25lclVJRCgpCisgICAgYm9vbCBuZWVkc1RvQmVOb3RpZmllZE9mUmVsZWFzZSgpCiAgICAgewot
ICAgICAgICByZXR1cm4gbV9vd25lclVJRDsKKyAgICAgICAgcmV0dXJuICEhKGJpdHdpc2VfY2Fz
dDx1aW50cHRyX3Q+KG1fYWxsb2NhdG9yKSAmIG5lZWRzVG9CZU5vdGlmaWVkQmVmb3JlUmVsZWFz
ZUJpdCk7CiAgICAgfQogCiAgICAgdm9pZCoga2V5KCkKQEAgLTExMCwxMiArMTEwLDEyIEBAIHB1
YmxpYzoKICAgICBXVEZfRVhQT1JUX1BSSVZBVEUgdm9pZCBkdW1wKFByaW50U3RyZWFtJiBvdXQp
IGNvbnN0OwogICAgIAogcHJpdmF0ZToKKyAgICBzdGF0aWMgY29uc3RleHByIHVpbnRwdHJfdCBu
ZWVkc1RvQmVOb3RpZmllZEJlZm9yZVJlbGVhc2VCaXQgPSAxOwogICAgIGZyaWVuZCBjbGFzcyBN
ZXRhQWxsb2NhdG9yOwogICAgIAogICAgIE1ldGFBbGxvY2F0b3IqIG1fYWxsb2NhdG9yOwogICAg
IE1lbW9yeVB0ciBtX3N0YXJ0OwogICAgIE1lbW9yeVB0ciBtX2VuZDsKLSAgICB2b2lkKiBtX293
bmVyVUlEOwogfTsKIAogfQpJbmRleDogU291cmNlL1dURi93dGYvU3RkTGliRXh0cmFzLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dURi93dGYvU3RkTGliRXh0cmFzLmgJKHJldmlzaW9uIDI1Nzg2
NikKKysrIFNvdXJjZS9XVEYvd3RmL1N0ZExpYkV4dHJhcy5oCSh3b3JraW5nIGNvcHkpCkBAIC00
ODksNiArNDg5LDE5IEBAIEFMV0FZU19JTkxJTkUgZGVjbHR5cGUoYXV0bykgbWFrZVVuaXF1ZVcK
ICAgICByZXR1cm4gc3RkOjptYWtlX3VuaXF1ZTxUPihzdGQ6OmZvcndhcmQ8QXJncz4oYXJncyku
Li4pOwogfQogCit0ZW1wbGF0ZSA8dHlwZW5hbWUgUmVzdWx0VHlwZSwgc2l6ZV90Li4uIElzLCB0
eXBlbmFtZSAuLi5BcmdzPgorY29uc3RleHByIGF1dG8gY29uc3RydWN0Rml4ZWRTaXplQXJyYXlX
aXRoQXJndW1lbnRzSW1wbChzdGQ6OmluZGV4X3NlcXVlbmNlPElzLi4uPiwgQXJncyYmLi4uIGFy
Z3MpIC0+IHN0ZDo6YXJyYXk8UmVzdWx0VHlwZSwgc2l6ZW9mLi4uKElzKT4KK3sKKyAgICByZXR1
cm4geyAoKHZvaWQpSXMsIFJlc3VsdFR5cGUgeyBhcmdzLi4uIH0pLi4uIH07Cit9CisKKy8vIENv
bnN0cnVjdCBhbiBzdGQ6OmFycmF5IHdpdGggTiBlbGVtZW50cyBvZiBSZXN1bHRUeXBlLCBwYXNz
aW5nIEFyZ3MgdG8gZWFjaCBvZiB0aGUgTiBjb25zdHJ1Y3RvcnMuCit0ZW1wbGF0ZTx0eXBlbmFt
ZSBSZXN1bHRUeXBlLCBzaXplX3QgTiwgdHlwZW5hbWUgLi4uQXJncz4KK2NvbnN0ZXhwciBhdXRv
IGNvbnN0cnVjdEZpeGVkU2l6ZUFycmF5V2l0aEFyZ3VtZW50cyhBcmdzJiYuLi4gYXJncykgLT4g
ZGVjbHR5cGUoYXV0bykKK3sKKyAgICBhdXRvIHR1cGxlID0gc3RkOjptYWtlX2luZGV4X3NlcXVl
bmNlPE4+KCk7CisgICAgcmV0dXJuIGNvbnN0cnVjdEZpeGVkU2l6ZUFycmF5V2l0aEFyZ3VtZW50
c0ltcGw8UmVzdWx0VHlwZT4odHVwbGUsIHN0ZDo6Zm9yd2FyZDxBcmdzPihhcmdzKS4uLik7Cit9
CiAKIH0gLy8gbmFtZXNwYWNlIFdURgogCkBAIC01MTQsMyArNTI3LDQgQEAgdXNpbmcgV1RGOjpz
YWZlQ2FzdDsKIHVzaW5nIFdURjo6dHJ5QmluYXJ5U2VhcmNoOwogdXNpbmcgV1RGOjptYWtlVW5p
cXVlOwogdXNpbmcgV1RGOjptYWtlVW5pcXVlV2l0aG91dEZhc3RNYWxsb2NDaGVjazsKK3VzaW5n
IFdURjo6Y29uc3RydWN0Rml4ZWRTaXplQXJyYXlXaXRoQXJndW1lbnRzOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>392985</attachid>
            <date>2020-03-08 14:22:55 -0700</date>
            <delta_ts>2020-03-09 18:34:12 -0700</delta_ts>
            <desc>WIP</desc>
            <filename>c-backup.diff</filename>
            <type>text/plain</type>
            <size>64188</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9Tb3VyY2VzLnR4dAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvU291cmNlcy50eHQJKHJldmlzaW9uIDI1Nzg2NikKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9Tb3VyY2VzLnR4dAkod29ya2luZyBjb3B5KQpAQCAtOTk0LDgg
Kzk5NCw2IEBAIHJ1bnRpbWUvV2lkZW5pbmdOdW1iZXJQcmVkaWN0aW9uRnV6emVyQWcKIEpTQ0J1
aWx0aW5zLmNwcAogCiB0b29scy9DZWxsTGlzdC5jcHAKLXRvb2xzL0NvZGVQcm9maWxlLmNwcAot
dG9vbHMvQ29kZVByb2ZpbGluZy5jcHAKIHRvb2xzL0NvbXBpbGVyVGltaW5nU2NvcGUuY3BwCiB0
b29scy9GdW5jdGlvbk92ZXJyaWRlcy5jcHAKIHRvb2xzL0Z1bmN0aW9uV2hpdGVsaXN0LmNwcApJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9q
ZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3Jp
cHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDI1Nzg2NikKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhw
cm9qCSh3b3JraW5nIGNvcHkpCkBAIC00MDcxLDggKzQwNzEsNiBAQAogCQk4NjAxNjFFMDBGM0E4
M0MxMDBGODQ3MTAgLyogTWFjcm9Bc3NlbWJsZXJYODYuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gTWFjcm9Bc3NlbWJsZXJYODYuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJODYwMTYxRTEwRjNBODNDMTAwRjg0NzEwIC8qIE1hY3JvQXNzZW1ibGVyWDg2XzY0Lmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE1hY3JvQXNzZW1ibGVyWDg2XzY0Lmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTg2MDE2MUUyMEYzQTgzQzEwMEY4NDcxMCAv
KiBNYWNyb0Fzc2VtYmxlclg4NkNvbW1vbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBNYWNyb0Fzc2VtYmxlclg4NkNvbW1vbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwotCQk4NjAzQ0VGMjE0Qzc1NDY0MDBBRTU5RTMgLyogQ29kZVByb2ZpbGluZy5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBDb2RlUHJvZmlsaW5nLmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJODYwM0NFRjMxNEM3NTQ2NDAwQUU1OUUzIC8qIENvZGVQ
cm9maWxpbmcuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ29kZVByb2ZpbGlu
Zy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk4NjA0RjRGMjE0M0E2QzQ0MDBCMjk1
RjUgLyogQ2hhbmdlTG9nICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZp
bGVUeXBlID0gdGV4dDsgbGluZUVuZGluZyA9IDA7IHBhdGggPSBDaGFuZ2VMb2c7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTg2MDZEREU5MThEQTQ0QUIwMEEzODNEMCAvKiBJZGVudGlm
aWVySW5saW5lcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJZGVudGlmaWVy
SW5saW5lcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk4NjEyRTRDQjE1MjI5MTg0
MDBDODM2QkUgLyogTWF0Y2hSZXN1bHQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gTWF0Y2hSZXN1bHQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTQxMTgsOCAr
NDExNiw2IEBACiAJCTg2QUREMTQzMEZEREVBOTgwMDA2RkZDQyAvKiBBUk12N1JlZ2lzdGVycy5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBBUk12N1JlZ2lzdGVycy5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk4NkFERDE0NDBGRERFQTk4MDAwNkVFQzIgLyogTWFj
cm9Bc3NlbWJsZXJBUk12Ny5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBNYWNy
b0Fzc2VtYmxlckFSTXY3Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTg2QjU4MjJD
MTREMjJGNUYwMEE5QzMwNiAvKiBQcm9maWxlVHJlZU5vZGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gUHJvZmlsZVRyZWVOb2RlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07Ci0JCTg2QjU4MjJFMTREMjM3M0IwMEE5QzMwNiAvKiBDb2RlUHJvZmlsZS5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBDb2RlUHJvZmlsZS5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTg2QjU4MjJGMTREMjM3M0IwMEE5QzMwNiAvKiBDb2RlUHJv
ZmlsZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBDb2RlUHJvZmlsZS5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk4NkI1ODI2QTE0RDM1RDUxMDBBOUMzMDYgLyog
VGllcmVkTU1hcEFycmF5LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFRpZXJl
ZE1NYXBBcnJheS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk4NkJGNjQyQTE0OERC
MkI1MDA0REUzNkEgLyogSW50cmluc2ljLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IEludHJpbnNpYy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk4NkMzNkVFOTBF
RTEyODlEMDBCM0RGNTkgLyogTWFjcm9Bc3NlbWJsZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gTWFjcm9Bc3NlbWJsZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
QEAgLTc2NzYsMTAgKzc2NzIsNiBAQAogCQkJCUZFMUJEMDFCMUU3MjAwMjEwMDEzNEJDOSAvKiBD
ZWxsTGlzdC5jcHAgKi8sCiAJCQkJRkUxQkQwMUMxRTcyMDAyMTAwMTM0QkM5IC8qIENlbGxMaXN0
LmggKi8sCiAJCQkJRkUxQkQwMjAxRTcyMDI3MDAwMTM0QkM5IC8qIENlbGxQcm9maWxlLmggKi8s
Ci0JCQkJODZCNTgyMkUxNEQyMzczQjAwQTlDMzA2IC8qIENvZGVQcm9maWxlLmNwcCAqLywKLQkJ
CQk4NkI1ODIyRjE0RDIzNzNCMDBBOUMzMDYgLyogQ29kZVByb2ZpbGUuaCAqLywKLQkJCQk4NjAz
Q0VGMjE0Qzc1NDY0MDBBRTU5RTMgLyogQ29kZVByb2ZpbGluZy5jcHAgKi8sCi0JCQkJODYwM0NF
RjMxNEM3NTQ2NDAwQUU1OUUzIC8qIENvZGVQcm9maWxpbmcuaCAqLywKIAkJCQkwRjRGMTFFNzIw
OUJDREExMDA3MDk2NTQgLyogQ29tcGlsZXJUaW1pbmdTY29wZS5jcHAgKi8sCiAJCQkJMEY0RjEx
RTYyMDlCQ0RBMTAwNzA5NjU0IC8qIENvbXBpbGVyVGltaW5nU2NvcGUuaCAqLywKIAkJCQlGRTRC
RkYyOTFBRDQ3NkU3MDAwODhGODcgLyogRnVuY3Rpb25PdmVycmlkZXMuY3BwICovLApJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9BUk02NEFzc2VtYmxlci5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvQVJNNjRBc3NlbWJsZXIuaAko
cmV2aXNpb24gMjU3ODY2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9BUk02
NEFzc2VtYmxlci5oCSh3b3JraW5nIGNvcHkpCkBAIC03ODMsMTIgKzc4Myw5IEBAIHB1YmxpYzoK
ICAgICAgICAgaW5zbihkYXRhUHJvY2Vzc2luZzJTb3VyY2UoREFUQVNJWkUsIHJtLCBEYXRhT3Bf
QVNSViwgcm4sIHJkKSk7CiAgICAgfQogCi0gICAgQUxXQVlTX0lOTElORSB2b2lkIGIoaW50MzJf
dCBvZmZzZXQgPSAwKQorICAgIEFMV0FZU19JTkxJTkUgdm9pZCBiKCkKICAgICB7Ci0gICAgICAg
IEFTU0VSVCghKG9mZnNldCAmIDMpKTsKLSAgICAgICAgb2Zmc2V0ID4+PSAyOwotICAgICAgICBB
U1NFUlQob2Zmc2V0ID09IChvZmZzZXQgPDwgNikgPj4gNik7Ci0gICAgICAgIGluc24odW5jb25k
aXRpb25hbEJyYW5jaEltbWVkaWF0ZShmYWxzZSwgb2Zmc2V0KSk7CisgICAgICAgIGluc24odW5j
b25kaXRpb25hbEJyYW5jaEltbWVkaWF0ZShmYWxzZSwgMCkpOwogICAgIH0KIAogICAgIEFMV0FZ
U19JTkxJTkUgdm9pZCBiX2NvbmQoQ29uZGl0aW9uIGNvbmQsIGludDMyX3Qgb2Zmc2V0ID0gMCkK
QEAgLTgzMSwxMSArODI4LDkgQEAgcHVibGljOgogICAgICAgICBpbnNuKGxvZ2ljYWxTaGlmdGVk
UmVnaXN0ZXIoREFUQVNJWkUsIHNldEZsYWdzID8gTG9naWNhbE9wX0FORFMgOiBMb2dpY2FsT3Bf
QU5ELCBzaGlmdCwgdHJ1ZSwgcm0sIGFtb3VudCwgcm4sIHJkKSk7CiAgICAgfQogCi0gICAgQUxX
QVlTX0lOTElORSB2b2lkIGJsKGludDMyX3Qgb2Zmc2V0ID0gMCkKKyAgICBBTFdBWVNfSU5MSU5F
IHZvaWQgYmwoKQogICAgIHsKLSAgICAgICAgQVNTRVJUKCEob2Zmc2V0ICYgMykpOwotICAgICAg
ICBvZmZzZXQgPj49IDI7Ci0gICAgICAgIGluc24odW5jb25kaXRpb25hbEJyYW5jaEltbWVkaWF0
ZSh0cnVlLCBvZmZzZXQpKTsKKyAgICAgICAgaW5zbih1bmNvbmRpdGlvbmFsQnJhbmNoSW1tZWRp
YXRlKHRydWUsIDApKTsKICAgICB9CiAKICAgICBBTFdBWVNfSU5MSU5FIHZvaWQgYmxyKFJlZ2lz
dGVySUQgcm4pCkBAIC0yNTgyLDYgKzI1NzcsMTMgQEAgcHVibGljOgogICAgIHsKICAgICAgICAg
aW50cHRyX3Qgb2Zmc2V0ID0gKHJlaW50ZXJwcmV0X2Nhc3Q8aW50cHRyX3Q+KHRvKSAtIHJlaW50
ZXJwcmV0X2Nhc3Q8aW50cHRyX3Q+KHdoZXJlKSkgPj4gMjsKICAgICAgICAgQVNTRVJUKHN0YXRp
Y19jYXN0PGludD4ob2Zmc2V0KSA9PSBvZmZzZXQpOworCisgICAgICAgIGlmICghaXNJbnQ8MjY+
KG9mZnNldCkpIHsKKyAgICAgICAgICAgIHRvID0gRXhlY3V0YWJsZUFsbG9jYXRvcjo6c2luZ2xl
dG9uKCkuZ2V0SnVtcElzbGFuZFRvKHdoZXJlLCBudWxscHRyLCB0byk7CisgICAgICAgICAgICBv
ZmZzZXQgPSAoYml0d2lzZV9jYXN0PGludHB0cl90Pih0bykgLSBiaXR3aXNlX2Nhc3Q8aW50cHRy
X3Q+KHdoZXJlKSkgPj4gMjsKKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKGlzSW50PDI2Pihv
ZmZzZXQpKTsKKyAgICAgICAgfQorCiAgICAgICAgIGludCBpbnNuID0gdW5jb25kaXRpb25hbEJy
YW5jaEltbWVkaWF0ZShmYWxzZSwgc3RhdGljX2Nhc3Q8aW50PihvZmZzZXQpKTsKICAgICAgICAg
UkVMRUFTRV9BU1NFUlQocm91bmRVcFRvTXVsdGlwbGVPZjxpbnN0cnVjdGlvblNpemU+KHdoZXJl
KSA9PSB3aGVyZSk7CiAgICAgICAgIHBlcmZvcm1KSVRNZW1jcHkod2hlcmUsICZpbnNuLCBzaXpl
b2YoaW50KSk7CkBAIC0yODcyLDcgKzI4NzQsNyBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAg
cmV0dXJuIExpbmtKdW1wQ29uZGl0aW9uRGlyZWN0OwogCiAgICAgICAgICAgICByZXR1cm4gTGlu
a0p1bXBDb25kaXRpb247Ci0gICAgICAgICAgICB9CisgICAgICAgIH0KICAgICAgICAgY2FzZSBK
dW1wQ29tcGFyZUFuZEJyYW5jaDogIHsKICAgICAgICAgICAgIEFTU0VSVChpczRCeXRlQWxpZ25l
ZChmcm9tKSk7CiAgICAgICAgICAgICBBU1NFUlQoaXM0Qnl0ZUFsaWduZWQodG8pKTsKQEAgLTI5
ODUsNyArMjk4NywxOSBAQCBwcm90ZWN0ZWQ6CiAKICAgICAgICAgYm9vbCBsaW5rOwogICAgICAg
ICBpbnQgaW1tMjY7Ci0gICAgICAgIGJvb2wgaXNVbmNvbmRpdGlvbmFsQnJhbmNoSW1tZWRpYXRl
T3JOb3AgPSBkaXNhc3NlbWJsZVVuY29uZGl0aW9uYWxCcmFuY2hJbW1lZGlhdGUoZnJvbSwgbGlu
aywgaW1tMjYpIHx8IGRpc2Fzc2VtYmxlTm9wKGZyb20pOworICAgICAgICB2b2lkKiBwcmV2aW91
c1RhcmdldCA9IG51bGxwdHI7CisgICAgICAgIGJvb2wgaXNVbmNvbmRpdGlvbmFsQnJhbmNoSW1t
ZWRpYXRlT3JOb3AgPSBmYWxzZTsKKyAgICAgICAgaWYgKGRpc2Fzc2VtYmxlVW5jb25kaXRpb25h
bEJyYW5jaEltbWVkaWF0ZShmcm9tLCBsaW5rLCBpbW0yNikpIHsKKyAgICAgICAgICAgIGlzVW5j
b25kaXRpb25hbEJyYW5jaEltbWVkaWF0ZU9yTm9wID0gdHJ1ZTsKKyAgICAgICAgICAgIGludHB0
cl90IHByZXZpb3VzT2Zmc2V0ID0gaW1tMjYgPDwgMjsKKyAgICAgICAgICAgIGlmIChwcmV2aW91
c09mZnNldCkgeworICAgICAgICAgICAgICAgIC8vIFdoZW4gZW1pdHRpbmcgYnJhbmNoZXMgYmVm
b3JlIGxpbmtpbmcgdGhlbSwgd2UgZW1pdCB0aGVtIHdpdGggb2Zmc2V0cyBvZiB6ZXJvLiBUaGlz
CisgICAgICAgICAgICAgICAgLy8gbWVhbnMgaXQgY291bGRuJ3QgaGF2ZSBqdW1wZWQgdG8gYW4g
aXNsYW5kIGJlZm9yZSwgc28ganVzdCBpZ25vcmUgcnVubmluZyBleHRyYSBjb2RlCisgICAgICAg
ICAgICAgICAgLy8gaW4gdGhlIGlzbGFuZCBhbGxvY2F0b3IuCisgICAgICAgICAgICAgICAgcHJl
dmlvdXNUYXJnZXQgPSBiaXR3aXNlX2Nhc3Q8dm9pZCo+KGJpdHdpc2VfY2FzdDxpbnRwdHJfdD4o
ZnJvbUluc3RydWN0aW9uKSArIHByZXZpb3VzT2Zmc2V0KTsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgfSBlbHNlIGlmIChkaXNhc3NlbWJsZU5vcChmcm9tKSkKKyAgICAgICAgICAgIGlzVW5jb25k
aXRpb25hbEJyYW5jaEltbWVkaWF0ZU9yTm9wID0gdHJ1ZTsKIAogICAgICAgICBBU1NFUlRfVU5V
U0VEKGlzVW5jb25kaXRpb25hbEJyYW5jaEltbWVkaWF0ZU9yTm9wLCBpc1VuY29uZGl0aW9uYWxC
cmFuY2hJbW1lZGlhdGVPck5vcCk7CiAgICAgICAgIGNvbnN0ZXhwciBib29sIGlzQ2FsbCA9ICh0
eXBlID09IEJyYW5jaFR5cGVfQ0FMTCk7CkBAIC0yOTk0LDkgKzMwMDgsMTUgQEAgcHJvdGVjdGVk
OgogICAgICAgICBBU1NFUlQoIShyZWludGVycHJldF9jYXN0PGludHB0cl90Pih0bykgJiAzKSk7
CiAgICAgICAgIGFzc2VydElzTm90VGFnZ2VkKHRvKTsKICAgICAgICAgYXNzZXJ0SXNOb3RUYWdn
ZWQoZnJvbUluc3RydWN0aW9uKTsKLSAgICAgICAgaW50cHRyX3Qgb2Zmc2V0ID0gKHJlaW50ZXJw
cmV0X2Nhc3Q8aW50cHRyX3Q+KHRvKSAtIHJlaW50ZXJwcmV0X2Nhc3Q8aW50cHRyX3Q+KGZyb21J
bnN0cnVjdGlvbikpID4+IDI7CisgICAgICAgIGludHB0cl90IG9mZnNldCA9IChiaXR3aXNlX2Nh
c3Q8aW50cHRyX3Q+KHRvKSAtIGJpdHdpc2VfY2FzdDxpbnRwdHJfdD4oZnJvbUluc3RydWN0aW9u
KSkgPj4gMjsKICAgICAgICAgQVNTRVJUKHN0YXRpY19jYXN0PGludD4ob2Zmc2V0KSA9PSBvZmZz
ZXQpOwogCisgICAgICAgIGlmICghaXNJbnQ8MjY+KG9mZnNldCkpIHsKKyAgICAgICAgICAgIHRv
ID0gRXhlY3V0YWJsZUFsbG9jYXRvcjo6c2luZ2xldG9uKCkuZ2V0SnVtcElzbGFuZFRvKGJpdHdp
c2VfY2FzdDx2b2lkKj4oZnJvbUluc3RydWN0aW9uKSwgcHJldmlvdXNUYXJnZXQsIHRvKTsKKyAg
ICAgICAgICAgIG9mZnNldCA9IChiaXR3aXNlX2Nhc3Q8aW50cHRyX3Q+KHRvKSAtIGJpdHdpc2Vf
Y2FzdDxpbnRwdHJfdD4oZnJvbUluc3RydWN0aW9uKSkgPj4gMjsKKyAgICAgICAgICAgIFJFTEVB
U0VfQVNTRVJUKGlzSW50PDI2PihvZmZzZXQpKTsKKyAgICAgICAgfQorCiAgICAgICAgIGludCBp
bnNuID0gdW5jb25kaXRpb25hbEJyYW5jaEltbWVkaWF0ZShpc0NhbGwsIHN0YXRpY19jYXN0PGlu
dD4ob2Zmc2V0KSk7CiAgICAgICAgIFJFTEVBU0VfQVNTRVJUKHJvdW5kVXBUb011bHRpcGxlT2Y8
aW5zdHJ1Y3Rpb25TaXplPihmcm9tKSA9PSBmcm9tKTsKICAgICAgICAgY29weShmcm9tLCAmaW5z
biwgc2l6ZW9mKGludCkpOwpAQCAtMzAwOCw3ICszMDI4LDcgQEAgcHJvdGVjdGVkOgogICAgICAg
ICBBU1NFUlQoIShyZWludGVycHJldF9jYXN0PGludHB0cl90Pihmcm9tKSAmIDMpKTsKICAgICAg
ICAgQVNTRVJUKCEocmVpbnRlcnByZXRfY2FzdDxpbnRwdHJfdD4odG8pICYgMykpOwogICAgICAg
ICBpbnRwdHJfdCBvZmZzZXQgPSAocmVpbnRlcnByZXRfY2FzdDxpbnRwdHJfdD4odG8pIC0gcmVp
bnRlcnByZXRfY2FzdDxpbnRwdHJfdD4oZnJvbUluc3RydWN0aW9uKSkgPj4gMjsKLSAgICAgICAg
QVNTRVJUKGlzSW50PDI2PihvZmZzZXQpKTsKKyAgICAgICAgLy9BU1NFUlQoaXNJbnQ8MjY+KG9m
ZnNldCkpOyAvL09PUFMKIAogICAgICAgICBib29sIHVzZURpcmVjdCA9IGlzSW50PDE5PihvZmZz
ZXQpOwogICAgICAgICBBU1NFUlQodHlwZSA9PSBJbmRpcmVjdEJyYW5jaCB8fCB1c2VEaXJlY3Qp
OwpAQCAtMzAzNiw3ICszMDU2LDcgQEAgcHJvdGVjdGVkOgogICAgICAgICBBU1NFUlQoIShyZWlu
dGVycHJldF9jYXN0PGludHB0cl90Pihmcm9tKSAmIDMpKTsKICAgICAgICAgQVNTRVJUKCEocmVp
bnRlcnByZXRfY2FzdDxpbnRwdHJfdD4odG8pICYgMykpOwogICAgICAgICBpbnRwdHJfdCBvZmZz
ZXQgPSAocmVpbnRlcnByZXRfY2FzdDxpbnRwdHJfdD4odG8pIC0gcmVpbnRlcnByZXRfY2FzdDxp
bnRwdHJfdD4oZnJvbUluc3RydWN0aW9uKSkgPj4gMjsKLSAgICAgICAgQVNTRVJUKGlzSW50PDI2
PihvZmZzZXQpKTsKKyAgICAgICAgLy8gQVNTRVJUKGlzSW50PDI2PihvZmZzZXQpKTsgT09QUwog
CiAgICAgICAgIGJvb2wgdXNlRGlyZWN0ID0gaXNJbnQ8MTk+KG9mZnNldCk7CiAgICAgICAgIEFT
U0VSVCh0eXBlID09IEluZGlyZWN0QnJhbmNoIHx8IHVzZURpcmVjdCk7CkBAIC0zMDY1LDcgKzMw
ODUsNyBAQCBwcm90ZWN0ZWQ6CiAgICAgICAgIEFTU0VSVCghKHJlaW50ZXJwcmV0X2Nhc3Q8aW50
cHRyX3Q+KHRvKSAmIDMpKTsKICAgICAgICAgaW50cHRyX3Qgb2Zmc2V0ID0gKHJlaW50ZXJwcmV0
X2Nhc3Q8aW50cHRyX3Q+KHRvKSAtIHJlaW50ZXJwcmV0X2Nhc3Q8aW50cHRyX3Q+KGZyb21JbnN0
cnVjdGlvbikpID4+IDI7CiAgICAgICAgIEFTU0VSVChzdGF0aWNfY2FzdDxpbnQ+KG9mZnNldCkg
PT0gb2Zmc2V0KTsKLSAgICAgICAgQVNTRVJUKGlzSW50PDI2PihvZmZzZXQpKTsKKyAgICAgICAg
Ly9BU1NFUlQoaXNJbnQ8MjY+KG9mZnNldCkpOyBPT1BTCiAKICAgICAgICAgYm9vbCB1c2VEaXJl
Y3QgPSBpc0ludDwxND4ob2Zmc2V0KTsKICAgICAgICAgQVNTRVJUKHR5cGUgPT0gSW5kaXJlY3RC
cmFuY2ggfHwgdXNlRGlyZWN0KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJs
ZXIvTGlua0J1ZmZlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Fz
c2VtYmxlci9MaW5rQnVmZmVyLmNwcAkocmV2aXNpb24gMjU3ODY2KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2Fzc2VtYmxlci9MaW5rQnVmZmVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzQ0
LDcgKzM0NCw4IEBAIHZvaWQgTGlua0J1ZmZlcjo6YWxsb2NhdGUoTWFjcm9Bc3NlbWJsZXIKICAg
ICAgICAgaW5pdGlhbFNpemUgPSBtYWNyb0Fzc2VtYmxlci5tX2Fzc2VtYmxlci5jb2RlU2l6ZSgp
OwogICAgIH0KIAotICAgIG1fZXhlY3V0YWJsZU1lbW9yeSA9IEV4ZWN1dGFibGVBbGxvY2F0b3I6
OnNpbmdsZXRvbigpLmFsbG9jYXRlKGluaXRpYWxTaXplLCBvd25lclVJRCwgZWZmb3J0KTsKKyAg
ICBVTlVTRURfUEFSQU0ob3duZXJVSUQpOyAvLyBPT1BTOiBnZXQgcmlkIG9mIG93bmVyVUlEPwor
ICAgIG1fZXhlY3V0YWJsZU1lbW9yeSA9IEV4ZWN1dGFibGVBbGxvY2F0b3I6OnNpbmdsZXRvbigp
LmFsbG9jYXRlKGluaXRpYWxTaXplLCBlZmZvcnQpOwogICAgIGlmICghbV9leGVjdXRhYmxlTWVt
b3J5KQogICAgICAgICByZXR1cm47CiAgICAgbV9jb2RlID0gTWFjcm9Bc3NlbWJsZXJDb2RlUHRy
PExpbmtCdWZmZXJQdHJUYWc+KG1fZXhlY3V0YWJsZU1lbW9yeS0+c3RhcnQoKS5yZXRhZ2dlZFB0
cjxMaW5rQnVmZmVyUHRyVGFnPigpKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3Nl
bWJsZXIvTWFjcm9Bc3NlbWJsZXJDb2RlUmVmLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlckNvZGVSZWYuaAkocmV2aXNpb24gMjU3
ODY2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlckNv
ZGVSZWYuaAkod29ya2luZyBjb3B5KQpAQCAtNDM0LDcgKzQzNCw2IEBAIHB1YmxpYzoKICAgICAg
ICAgOiBtX2NvZGVQdHIoZXhlY3V0YWJsZU1lbW9yeS0+c3RhcnQoKS5yZXRhZ2dlZFB0cjx0YWc+
KCkpCiAgICAgICAgICwgbV9leGVjdXRhYmxlTWVtb3J5KFdURk1vdmUoZXhlY3V0YWJsZU1lbW9y
eSkpCiAgICAgewotICAgICAgICBBU1NFUlQobV9leGVjdXRhYmxlTWVtb3J5LT5pc01hbmFnZWQo
KSk7CiAgICAgICAgIEFTU0VSVChtX2V4ZWN1dGFibGVNZW1vcnktPnN0YXJ0KCkpOwogICAgICAg
ICBBU1NFUlQobV9jb2RlUHRyKTsKICAgICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L0V4ZWN1dGFibGVBbGxvY2F0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvRXhlY3V0YWJsZUFsbG9jYXRvci5jcHAJKHJldmlzaW9uIDI1Nzg2NikKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvRXhlY3V0YWJsZUFsbG9jYXRvci5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTI4LDkgKzI4LDEwIEBACiAKICNpZiBFTkFCTEUoSklUKQogCi0jaW5jbHVk
ZSAiQ29kZVByb2ZpbGluZy5oIgogI2luY2x1ZGUgIkV4ZWN1dGFibGVBbGxvY2F0aW9uRnV6ei5o
IgorI2luY2x1ZGUgIkl0ZXJhdGlvblN0YXR1cy5oIgogI2luY2x1ZGUgIkpTQ0lubGluZXMuaCIK
KyNpbmNsdWRlIDx0eXBlX3RyYWl0cz4KICNpbmNsdWRlIDx3dGYvRmlsZVN5c3RlbS5oPgogI2lu
Y2x1ZGUgPHd0Zi9NZXRhQWxsb2NhdG9yLmg+CiAjaW5jbHVkZSA8d3RmL1BhZ2VSZXNlcnZhdGlv
bi5oPgpAQCAtOTYsOSArOTcsMTQgQEAgc3RhdGljIGNvbnN0ZXhwciBzaXplX3QgZml4ZWRFeGVj
dXRhYmxlTQogI2VsaWYgQ1BVKEFSTSkKIHN0YXRpYyBjb25zdGV4cHIgc2l6ZV90IGZpeGVkRXhl
Y3V0YWJsZU1lbW9yeVBvb2xTaXplID0gMTYgKiAxMDI0ICogMTAyNDsKICNlbGlmIENQVShBUk02
NCkKLXN0YXRpYyBjb25zdGV4cHIgc2l6ZV90IGZpeGVkRXhlY3V0YWJsZU1lbW9yeVBvb2xTaXpl
ID0gMTI4ICogMTAyNCAqIDEwMjQ7CitzdGF0aWMgY29uc3RleHByIHNpemVfdCBmaXhlZEV4ZWN1
dGFibGVNZW1vcnlQb29sU2l6ZSA9IDEgKiAxMDI0ICogMTAyNCAqIDEwMjQ7CitzdGF0aWMgY29u
c3RleHByIHNpemVfdCByZWdpb25TaXplID0gMTI4ICogMTAyNCAqIDEwMjQ7CitzdGF0aWMgY29u
c3RleHByIHNpemVfdCBpc2xhbmRSZWdpb25TaXplID0gNjQgKiAxMDI0ICogMTAyNDsKK3N0YXRp
YyBjb25zdGV4cHIgc2l6ZV90IG51bWJlck9mUmVnaW9ucyA9IGZpeGVkRXhlY3V0YWJsZU1lbW9y
eVBvb2xTaXplIC8gcmVnaW9uU2l6ZTsKK3N0YXRpYyBjb25zdGV4cHIgc2l6ZV90IGlzbGFuZFNp
emVJbkJ5dGVzID0gMTY7CitzdGF0aWMgY29uc3RleHByIHNpemVfdCBtYXhJc2xhbmRzUGVyUmVn
aW9uID0gaXNsYW5kUmVnaW9uU2l6ZSAvIGlzbGFuZFNpemVJbkJ5dGVzOwogI2VsaWYgQ1BVKFg4
Nl82NCkKLXN0YXRpYyBjb25zdGV4cHIgc2l6ZV90IGZpeGVkRXhlY3V0YWJsZU1lbW9yeVBvb2xT
aXplID0gMTAyNCAqIDEwMjQgKiAxMDI0Oworc3RhdGljIGNvbnN0ZXhwciBzaXplX3QgZml4ZWRF
eGVjdXRhYmxlTWVtb3J5UG9vbFNpemUgPSAxICogMTAyNCAqIDEwMjQgKiAxMDI0OwogI2Vsc2UK
IHN0YXRpYyBjb25zdGV4cHIgc2l6ZV90IGZpeGVkRXhlY3V0YWJsZU1lbW9yeVBvb2xTaXplID0g
MzIgKiAxMDI0ICogMTAyNDsKICNlbmRpZgpAQCAtMzEzLDkgKzMxOSwxMCBAQCBzdGF0aWMgQUxX
QVlTX0lOTElORSBKSVRSZXNlcnZhdGlvbiBpbml0CiAgICAgaWYgKCFpc0pJVEVuYWJsZWQoKSkK
ICAgICAgICAgcmV0dXJuIHJlc2VydmF0aW9uOwogCi0gICAgaWYgKE9wdGlvbnM6OmppdE1lbW9y
eVJlc2VydmF0aW9uU2l6ZSgpKQotICAgICAgICByZXNlcnZhdGlvbi5zaXplID0gT3B0aW9uczo6
aml0TWVtb3J5UmVzZXJ2YXRpb25TaXplKCk7Ci0gICAgZWxzZQorICAgIC8vIE9PUFMhCisgICAg
Ly9pZiAoT3B0aW9uczo6aml0TWVtb3J5UmVzZXJ2YXRpb25TaXplKCkpCisgICAgLy8gICAgcmVz
ZXJ2YXRpb24uc2l6ZSA9IE9wdGlvbnM6OmppdE1lbW9yeVJlc2VydmF0aW9uU2l6ZSgpOworICAg
IC8vZWxzZQogICAgICAgICByZXNlcnZhdGlvbi5zaXplID0gZml4ZWRFeGVjdXRhYmxlTWVtb3J5
UG9vbFNpemU7CiAgICAgcmVzZXJ2YXRpb24uc2l6ZSA9IHN0ZDo6bWF4KHJvdW5kVXBUb011bHRp
cGxlT2YocGFnZVNpemUoKSwgcmVzZXJ2YXRpb24uc2l6ZSksIHBhZ2VTaXplKCkgKiAyKTsKIApA
QCAtMzYzLDUyICszNzAsMzY5IEBAIHN0YXRpYyBBTFdBWVNfSU5MSU5FIEpJVFJlc2VydmF0aW9u
IGluaXQKICAgICByZXR1cm4gcmVzZXJ2YXRpb247CiB9CiAKLWNsYXNzIEZpeGVkVk1Qb29sRXhl
Y3V0YWJsZUFsbG9jYXRvciBmaW5hbCA6IHB1YmxpYyBNZXRhQWxsb2NhdG9yIHsKK2NsYXNzIEZp
eGVkVk1Qb29sRXhlY3V0YWJsZUFsbG9jYXRvciBmaW5hbCB7CiAgICAgV1RGX01BS0VfRkFTVF9B
TExPQ0FURUQ7CiBwdWJsaWM6CiAgICAgRml4ZWRWTVBvb2xFeGVjdXRhYmxlQWxsb2NhdG9yKCkK
LSAgICAgICAgOiBNZXRhQWxsb2NhdG9yKGppdEFsbG9jYXRpb25HcmFudWxlKSAvLyByb3VuZCB1
cCBhbGwgYWxsb2NhdGlvbnMgdG8gMzIgYnl0ZXMKKyNpZiBDUFUoQVJNNjQpCisgICAgICAgIDog
bV9hbGxvY2F0b3JzKGNvbnN0cnVjdEZpeGVkU2l6ZUFycmF5V2l0aEFyZ3VtZW50czxSZWdpb25B
bGxvY2F0b3IsIG51bWJlck9mUmVnaW9ucz4obV9sb2NrKSkKKyNlbHNlCisgICAgICAgIDogbV9h
bGxvY2F0b3IobV9sb2NrKQorI2VuZGlmCiAgICAgeworICAgICAgICBmb3JFYWNoQWxsb2NhdG9y
KFsmXSAoQWxsb2NhdG9yJiBhbGxvY2F0b3IpIHsKKyAgICAgICAgICAgIGFsbG9jYXRvci5tX2Zp
eGVkQWxsb2NhdG9yID0gdGhpczsKKyAgICAgICAgfSk7CisKICAgICAgICAgSklUUmVzZXJ2YXRp
b24gcmVzZXJ2YXRpb24gPSBpbml0aWFsaXplSklUUGFnZVJlc2VydmF0aW9uKCk7CiAgICAgICAg
IG1fcmVzZXJ2YXRpb24gPSBXVEZNb3ZlKHJlc2VydmF0aW9uLnBhZ2VSZXNlcnZhdGlvbik7CiAg
ICAgICAgIGlmIChtX3Jlc2VydmF0aW9uKSB7Ci0gICAgICAgICAgICBhZGRGcmVzaEZyZWVTcGFj
ZShyZXNlcnZhdGlvbi5iYXNlLCByZXNlcnZhdGlvbi5zaXplKTsKKyNpZiBDUFUoQVJNNjQpCisg
ICAgICAgICAgICB1aW50cHRyX3Qgc3RhcnQgPSBiaXR3aXNlX2Nhc3Q8dWludHB0cl90PihtX3Jl
c2VydmF0aW9uLmJhc2UoKSk7CisgICAgICAgICAgICB1aW50cHRyX3QgcmVzZXJ2YXRpb25FbmQg
PSBzdGFydCArIG1fcmVzZXJ2YXRpb24uc2l6ZSgpOworICAgICAgICAgICAgZm9yIChzaXplX3Qg
aSA9IDA7IGkgPCBudW1iZXJPZlJlZ2lvbnM7ICsraSkgeworICAgICAgICAgICAgICAgIFJFTEVB
U0VfQVNTRVJUKHN0YXJ0IDwgcmVzZXJ2YXRpb25FbmQpOworICAgICAgICAgICAgICAgIG1fYWxs
b2NhdG9yc1tpXS5zdGFydCA9IHN0YXJ0OworICAgICAgICAgICAgICAgIG1fYWxsb2NhdG9yc1tp
XS5lbmQgPSBzdGFydCArIHJlZ2lvblNpemU7CisgICAgICAgICAgICAgICAgaWYgKG1fYWxsb2Nh
dG9yc1tpXS5lbmQgPiByZXNlcnZhdGlvbkVuZCkgeworICAgICAgICAgICAgICAgICAgICAvLyBX
ZSBtYXkgaGF2ZSB0YWtlbiBhIHBhZ2UgZm9yIHRoZSBleGVjdXRhYmxlIG9ubHkgY29weSB0aHVu
ay4KKyAgICAgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoaSA9PSBudW1iZXJPZlJlZ2lv
bnMgLSAxKTsKKyAgICAgICAgICAgICAgICAgICAgbV9hbGxvY2F0b3JzW2ldLmVuZCA9IHJlc2Vy
dmF0aW9uRW5kOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIG1fYWxsb2Nh
dG9yc1tpXS5hZGRGcmVzaEZyZWVTcGFjZShiaXR3aXNlX2Nhc3Q8dm9pZCo+KG1fYWxsb2NhdG9y
c1tpXS5zdGFydCksIG1fYWxsb2NhdG9yc1tpXS5hbGxvY2F0b3JTaXplKCkpOworCisgICAgICAg
ICAgICAgICAgc3RhcnQgKz0gcmVnaW9uU2l6ZTsKKyAgICAgICAgICAgIH0KKyNlbHNlCisgICAg
ICAgICAgICBtX2FsbG9jYXRvci5hZGRGcmVzaEZyZWVTcGFjZShyZXNlcnZhdGlvbi5iYXNlLCBy
ZXNlcnZhdGlvbi5zaXplKTsKKyNlbmRpZgorCiAgICAgICAgICAgICBBU1NFUlQoYnl0ZXNSZXNl
cnZlZCgpID09IHJlc2VydmF0aW9uLnNpemUpOyAvLyBTaW5jZSBvdXIgZXhlY3V0YWJsZSBtZW1v
cnkgaXMgZml4ZWQtc2l6ZWQsIGJ5dGVzUmVzZXJ2ZWQgaXMgbmV2ZXIgY2hhbmdlZCBhZnRlciBp
bml0aWFsaXphdGlvbi4KICAgICAgICAgfQogICAgIH0KIAotICAgIHZpcnR1YWwgfkZpeGVkVk1Q
b29sRXhlY3V0YWJsZUFsbG9jYXRvcigpOworICAgIH5GaXhlZFZNUG9vbEV4ZWN1dGFibGVBbGxv
Y2F0b3IoKQorICAgIHsKKyAgICAgICAgbV9yZXNlcnZhdGlvbi5kZWFsbG9jYXRlKCk7CisgICAg
fQogCiAgICAgdm9pZCogbWVtb3J5U3RhcnQoKSB7IHJldHVybiB1bnRhZ0NvZGVQdHI8RXhlY3V0
YWJsZU1lbW9yeVB0clRhZz4oZ19qc2NDb25maWcuc3RhcnRFeGVjdXRhYmxlTWVtb3J5KTsgfQog
ICAgIHZvaWQqIG1lbW9yeUVuZCgpIHsgcmV0dXJuIHVudGFnQ29kZVB0cjxFeGVjdXRhYmxlTWVt
b3J5UHRyVGFnPihnX2pzY0NvbmZpZy5lbmRFeGVjdXRhYmxlTWVtb3J5KTsgfQogICAgIGJvb2wg
aXNKSVRQQyh2b2lkKiBwYykgeyByZXR1cm4gbWVtb3J5U3RhcnQoKSA8PSBwYyAmJiBwYyA8IG1l
bW9yeUVuZCgpOyB9CisgICAgYm9vbCBpc1ZhbGlkKCkgeyByZXR1cm4gISFtX3Jlc2VydmF0aW9u
OyB9CiAKLXByb3RlY3RlZDoKLSAgICBGcmVlU3BhY2VQdHIgYWxsb2NhdGVOZXdTcGFjZShzaXpl
X3QmKSBvdmVycmlkZQorICAgIFJlZlB0cjxFeGVjdXRhYmxlTWVtb3J5SGFuZGxlPiBhbGxvY2F0
ZShzaXplX3Qgc2l6ZUluQnl0ZXMpCiAgICAgewotICAgICAgICAvLyBXZSdyZSBvcGVyYXRpbmcg
aW4gYSBmaXhlZCBwb29sLCBzbyBuZXcgYWxsb2NhdGlvbiBpcyBhbHdheXMgcHJvaGliaXRlZC4K
KyNpZiBDUFUoQVJNNjQpCisgICAgICAgIC8vIE9PUFM6IHBpcGUgdGhyb3VnaCBsb2NrIHRvIGFs
bG9jYXRvcnMKKyAgICAgICAgYXV0byBsb2NrSG9sZGVyID0gaG9sZExvY2soZ2V0TG9jaygpKTsK
KyAgICAgICAgCisgICAgICAgIHVuc2lnbmVkIHN0YXJ0ID0gY3J5cHRvZ3JhcGhpY2FsbHlSYW5k
b21OdW1iZXIoKSAlIG1fYWxsb2NhdG9ycy5zaXplKCk7CisgICAgICAgIHVuc2lnbmVkIGkgPSBz
dGFydDsKKyAgICAgICAgd2hpbGUgKHRydWUpIHsKKyAgICAgICAgICAgIFJlZ2lvbkFsbG9jYXRv
ciYgYWxsb2NhdG9yID0gbV9hbGxvY2F0b3JzW2ldOworICAgICAgICAgICAgaWYgKFJlZlB0cjxF
eGVjdXRhYmxlTWVtb3J5SGFuZGxlPiByZXN1bHQgPSBhbGxvY2F0b3IuYWxsb2NhdGUoc2l6ZUlu
Qnl0ZXMpKQorICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgICAgICAgICBpID0g
aSArIDE7CisgICAgICAgICAgICBpID0gaSAlIG1fYWxsb2NhdG9ycy5zaXplKCk7CisgICAgICAg
ICAgICBpZiAoaSA9PSBzdGFydCkKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQog
ICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyNlbHNlCisgICAgICAgIHJldHVybiBtX2FsbG9jYXRv
ci5hbGxvY2F0ZShzaXplSW5CeXRlcyk7CisjZW5kaWYKICAgICB9CiAKLSAgICB2b2lkIG5vdGlm
eU5lZWRQYWdlKHZvaWQqIHBhZ2UsIHNpemVfdCBjb3VudCkgb3ZlcnJpZGUKKyAgICBMb2NrJiBn
ZXRMb2NrKCkgeyByZXR1cm4gbV9sb2NrOyB9CisKKyAgICAvLyBOb24gYXRvbWljCisgICAgc2l6
ZV90IGJ5dGVzQWxsb2NhdGVkKCkgCiAgICAgewotICAgICAgICBtX3Jlc2VydmF0aW9uLmNvbW1p
dChwYWdlLCBwYWdlU2l6ZSgpICogY291bnQpOworICAgICAgICBzaXplX3QgcmVzdWx0ID0gMDsK
KyAgICAgICAgZm9yRWFjaEFsbG9jYXRvcihbJl0gKEFsbG9jYXRvciYgYWxsb2NhdG9yKSB7Cisg
ICAgICAgICAgICByZXN1bHQgKz0gYWxsb2NhdG9yLmJ5dGVzQWxsb2NhdGVkKCk7CisgICAgICAg
IH0pOworICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgIH0KKyAgICBzaXplX3QgYnl0ZXNSZXNl
cnZlZCgpIAorICAgIHsKKyAgICAgICAgc2l6ZV90IHJlc3VsdCA9IDA7CisgICAgICAgIGZvckVh
Y2hBbGxvY2F0b3IoWyZdIChBbGxvY2F0b3ImIGFsbG9jYXRvcikgeworICAgICAgICAgICAgcmVz
dWx0ICs9IGFsbG9jYXRvci5ieXRlc1Jlc2VydmVkKCk7CisgICAgICAgIH0pOworICAgICAgICBy
ZXR1cm4gcmVzdWx0OworICAgIH0KKyAgICBzaXplX3QgYnl0ZXNDb21taXR0ZWQoKQorICAgIHsK
KyAgICAgICAgc2l6ZV90IHJlc3VsdCA9IDA7CisgICAgICAgIGZvckVhY2hBbGxvY2F0b3IoWyZd
IChBbGxvY2F0b3ImIGFsbG9jYXRvcikgeworICAgICAgICAgICAgcmVzdWx0ICs9IGFsbG9jYXRv
ci5ieXRlc0NvbW1pdHRlZCgpOworICAgICAgICB9KTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsK
KyAgICB9CisKKyAgICBib29sIGlzSW5BbGxvY2F0ZWRNZW1vcnkoY29uc3QgQWJzdHJhY3RMb2Nr
ZXImIGxvY2tlciwgdm9pZCogYWRkcmVzcykKKyAgICB7CisgICAgICAgIGJvb2wgcmVzdWx0ID0g
ZmFsc2U7CisgICAgICAgIGZvckVhY2hBbGxvY2F0b3IoWyZdIChBbGxvY2F0b3ImIGFsbG9jYXRv
cikgeworICAgICAgICAgICAgaWYgKGFsbG9jYXRvci5pc0luQWxsb2NhdGVkTWVtb3J5KGxvY2tl
ciwgYWRkcmVzcykpIHsKKyAgICAgICAgICAgICAgICByZXN1bHQgPSB0cnVlOworICAgICAgICAg
ICAgICAgIHJldHVybiBJdGVyYXRpb25TdGF0dXM6OkRvbmU7CisgICAgICAgICAgICB9CisgICAg
ICAgICAgICByZXR1cm4gSXRlcmF0aW9uU3RhdHVzOjpDb250aW51ZTsKKyAgICAgICAgfSk7CisK
KyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisKKyNpZiBFTkFCTEUoTUVUQV9BTExPQ0FU
T1JfUFJPRklMRSkKKyAgICB2b2lkIGR1bXBQcm9maWxlKCkKKyAgICB7CisgICAgICAgIGZvckVh
Y2hBbGxvY2F0b3IoWyZdIChBbGxvY2F0b3ImIGFsbG9jYXRvcikgeworICAgICAgICAgICAgYWxs
b2NhdG9yLmR1bXBQcm9maWxlKCk7CisgICAgICAgIH0pOworICAgIH0KKyNlbmRpZgorCisgICAg
TWV0YUFsbG9jYXRvcjo6U3RhdGlzdGljcyBjdXJyZW50U3RhdGlzdGljcygpCisgICAgeworICAg
ICAgICAvLyBPT1BTOiBtYWtlIGF0b21pYyBieSBob2xkaW5nIGxvY2suLi4KKyAgICAgICAgTWV0
YUFsbG9jYXRvcjo6U3RhdGlzdGljcyByZXN1bHQgeyAwLCAwLCAwIH07CisgICAgICAgIGZvckVh
Y2hBbGxvY2F0b3IoWyZdIChBbGxvY2F0b3ImIGFsbG9jYXRvcikgeworICAgICAgICAgICAgYXV0
byBhbGxvY2F0b3JTdGF0cyA9IGFsbG9jYXRvci5jdXJyZW50U3RhdGlzdGljcygpOworICAgICAg
ICAgICAgcmVzdWx0LmJ5dGVzQWxsb2NhdGVkICs9IGFsbG9jYXRvclN0YXRzLmJ5dGVzQWxsb2Nh
dGVkOworICAgICAgICAgICAgcmVzdWx0LmJ5dGVzUmVzZXJ2ZWQgKz0gYWxsb2NhdG9yU3RhdHMu
Ynl0ZXNSZXNlcnZlZDsKKyAgICAgICAgICAgIHJlc3VsdC5ieXRlc0NvbW1pdHRlZCArPSBhbGxv
Y2F0b3JTdGF0cy5ieXRlc0NvbW1pdHRlZDsKKyAgICAgICAgfSk7CisgICAgICAgIHJldHVybiBy
ZXN1bHQ7CisgICAgfQorCisjaWYgQ1BVKEFSTTY0KQorcHJpdmF0ZToKKyAgICBjbGFzcyBSZWdp
b25BbGxvY2F0b3I7CisKKyAgICBSZWdpb25BbGxvY2F0b3IqIGZpbmRSZWdpb24odWludHB0cl90
IHB0cikKKyAgICB7CisgICAgICAgIFJlZ2lvbkFsbG9jYXRvciogcmVzdWx0ID0gbnVsbHB0cjsK
KyAgICAgICAgZm9yRWFjaEFsbG9jYXRvcihbJl0gKFJlZ2lvbkFsbG9jYXRvciYgYWxsb2NhdG9y
KSB7CisgICAgICAgICAgICBpZiAoYWxsb2NhdG9yLnN0YXJ0IDw9IHB0ciAmJiBwdHIgPCBhbGxv
Y2F0b3IuZW5kKSB7CisgICAgICAgICAgICAgICAgcmVzdWx0ID0gJmFsbG9jYXRvcjsKKyAgICAg
ICAgICAgICAgICByZXR1cm4gSXRlcmF0aW9uU3RhdHVzOjpEb25lOworICAgICAgICAgICAgfQor
ICAgICAgICAgICAgcmV0dXJuIEl0ZXJhdGlvblN0YXR1czo6Q29udGludWU7CisgICAgICAgIH0p
OworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKworICAgIHZvaWQqIGlzbGFuZEZvckp1
bXBMb2NhdGlvbih1aW50cHRyX3QganVtcExvY2F0aW9uLCB1aW50cHRyX3Qgb2xkVGFyZ2V0KQor
ICAgIHsKKyAgICAgICAgUmVnaW9uQWxsb2NhdG9yKiBhbGxvY2F0b3IgPSBmaW5kUmVnaW9uKGp1
bXBMb2NhdGlvbik7CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKGFsbG9jYXRvcik7CisKKyAgICAg
ICAgLy8gSWYgd2Ugd2VyZSBhbHJlYWR5IGFuIGlzbGFuZCwgd2UgY2FuIGp1c3QgcmV1c2UgaXQu
CisgICAgICAgIGlmIChhbGxvY2F0b3ItPmlzbGFuZEJlZ2luKCkgPD0gb2xkVGFyZ2V0ICYmIG9s
ZFRhcmdldCA8IGFsbG9jYXRvci0+ZW5kKSB7CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChh
bGxvY2F0b3ItPmp1bXBMb2NhdGlvbnNUb0lzbGFuZHMuY29udGFpbnMoanVtcExvY2F0aW9uKSk7
CisgICAgICAgICAgICByZXR1cm4gYml0d2lzZV9jYXN0PHZvaWQqPihvbGRUYXJnZXQpOworICAg
ICAgICB9CisKKyAgICAgICAgdm9pZCogcmVzdWx0ID0gYWxsb2NhdG9yLT5hbGxvY2F0ZUlzbGFu
ZCgpOworICAgICAgICBhbGxvY2F0b3ItPmp1bXBMb2NhdGlvbnNUb0lzbGFuZHMuYXBwZW5kKGp1
bXBMb2NhdGlvbik7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorCitwdWJsaWM6CiAK
LSAgICB2b2lkIG5vdGlmeVBhZ2VJc0ZyZWUodm9pZCogcGFnZSwgc2l6ZV90IGNvdW50KSBvdmVy
cmlkZQorICAgIHZvaWQqIG1ha2VJc2xhbmQodWludHB0cl90IGp1bXBMb2NhdGlvbiwgdWludHB0
cl90IG9sZFRhcmdldCwgdWludHB0cl90IG5ld1RhcmdldCkKICAgICB7Ci0gICAgICAgIG1fcmVz
ZXJ2YXRpb24uZGVjb21taXQocGFnZSwgcGFnZVNpemUoKSAqIGNvdW50KTsKKyAgICAgICAgYXV0
byBsb2NrSG9sZGVyID0gaG9sZExvY2soZ2V0TG9jaygpKTsKKworICAgICAgICAvLyBPT1BTOiB0
aHJlYWQgdGhpcyB0aHJvdWdoIGEgc2VyaWVzIG9mIGp1bXBzLgorICAgICAgICB2b2lkKiBpc2xh
bmQgPSBpc2xhbmRGb3JKdW1wTG9jYXRpb24oanVtcExvY2F0aW9uLCBvbGRUYXJnZXQpOworICAg
ICAgICBDQ2FsbEhlbHBlcnMgaml0OworICAgICAgICBqaXQubW92ZShDQ2FsbEhlbHBlcnM6OlRy
dXN0ZWRJbW1QdHIobmV3VGFyZ2V0KSwgQ0NhbGxIZWxwZXJzOjpkYXRhVGVtcFJlZ2lzdGVyKTsK
KyAgICAgICAgaml0LmZhckp1bXAoQ0NhbGxIZWxwZXJzOjpkYXRhVGVtcFJlZ2lzdGVyLCBOb1B0
clRhZyk7CisKKyAgICAgICAgTGlua0J1ZmZlciBsaW5rQnVmZmVyKGppdCwgTWFjcm9Bc3NlbWJs
ZXJDb2RlUHRyPE5vUHRyVGFnPihpc2xhbmQpLCBpc2xhbmRTaXplSW5CeXRlcywgSklUQ29tcGls
YXRpb25NdXN0U3VjY2VlZCwgZmFsc2UpOworICAgICAgICBhdXRvIHJlc3VsdCA9IEZJTkFMSVpF
X0NPREUobGlua0J1ZmZlciwgTm9QdHJUYWcsICJKdW1wIElzbGFuZDogJWx1IiwganVtcExvY2F0
aW9uKTsKKyAgICAgICAgcmV0dXJuIGlzbGFuZDsKICAgICB9CisjZW5kaWYKIAogcHJpdmF0ZToK
KyAgICBjbGFzcyBBbGxvY2F0b3IgOiBwdWJsaWMgTWV0YUFsbG9jYXRvciB7CisgICAgICAgIHVz
aW5nIEJhc2UgPSBNZXRhQWxsb2NhdG9yOworICAgIHB1YmxpYzoKKyAgICAgICAgQWxsb2NhdG9y
KExvY2smIGxvY2spCisgICAgICAgICAgICA6IEJhc2UobG9jaywgaml0QWxsb2NhdGlvbkdyYW51
bGUsIHBhZ2VTaXplKCkpIC8vIHJvdW5kIHVwIGFsbCBhbGxvY2F0aW9ucyB0byAzMiBieXRlcwor
ICAgICAgICB7CisgICAgICAgIH0KKworICAgICAgICBGcmVlU3BhY2VQdHIgYWxsb2NhdGVOZXdT
cGFjZShzaXplX3QmKSBvdmVycmlkZQorICAgICAgICB7CisgICAgICAgICAgICAvLyBXZSdyZSBv
cGVyYXRpbmcgaW4gYSBmaXhlZCBwb29sLCBzbyBuZXcgYWxsb2NhdGlvbiBpcyBhbHdheXMgcHJv
aGliaXRlZC4KKyAgICAgICAgICAgIHJldHVybiBudWxscHRyOworICAgICAgICB9CisKKyAgICAg
ICAgdm9pZCBub3RpZnlOZWVkUGFnZSh2b2lkKiBwYWdlLCBzaXplX3QgY291bnQpIG92ZXJyaWRl
CisgICAgICAgIHsKKyAgICAgICAgICAgIG1fZml4ZWRBbGxvY2F0b3ItPm1fcmVzZXJ2YXRpb24u
Y29tbWl0KHBhZ2UsIHBhZ2VTaXplKCkgKiBjb3VudCk7CisgICAgICAgIH0KKworICAgICAgICB2
b2lkIG5vdGlmeVBhZ2VJc0ZyZWUodm9pZCogcGFnZSwgc2l6ZV90IGNvdW50KSBvdmVycmlkZQor
ICAgICAgICB7CisgICAgICAgICAgICBtX2ZpeGVkQWxsb2NhdG9yLT5tX3Jlc2VydmF0aW9uLmRl
Y29tbWl0KHBhZ2UsIHBhZ2VTaXplKCkgKiBjb3VudCk7CisgICAgICAgIH0KKworICAgICAgICBG
aXhlZFZNUG9vbEV4ZWN1dGFibGVBbGxvY2F0b3IqIG1fZml4ZWRBbGxvY2F0b3I7CisgICAgfTsK
KworI2lmIENQVShBUk02NCkgLy8gT09QUzogY2FuJ3QgZG8gdGhpcyBmb3IgYXJtNjRfMzIKKyAg
ICBjbGFzcyBSZWdpb25BbGxvY2F0b3IgZmluYWwgOiBwdWJsaWMgQWxsb2NhdG9yIHsKKyAgICAg
ICAgdXNpbmcgQmFzZSA9IEFsbG9jYXRvcjsKKyAgICBwdWJsaWM6CisgICAgICAgIFJlZ2lvbkFs
bG9jYXRvcihMb2NrJiBsb2NrKQorICAgICAgICAgICAgOiBCYXNlKGxvY2spCisgICAgICAgIHsK
KworICAgICAgICB9CisgICAgICAgIC8vICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0KKyAgICAgICAgLy8gIHwgYWxsb2NhdG9yIC0tPiAgICAgPC0tIGlzbGFuZCAgICAgIHwK
KyAgICAgICAgLy8gIHwgICAgICAgICAgICAgXiAgICAgXiAgICAgICAgICAgICAgIHwKKyAgICAg
ICAgLy8gIHwgICAgICAgICAgICAgfCAgICAgfCAgICAgICAgICAgICAgIHwKKyAgICAgICAgLy8g
IHwgYWxsb2NhdG9yU2l6ZSAgICAgcmVzZXJ2ZWRJc2xhbmRzIHwKKyAgICAgICAgLy8gIC0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgICAgLy8gIGFsbG9jYXRvckVu
ZCA8PSBpc2xhbmQgYmVnaW4KKworICAgICAgICB1aW50cHRyX3QgaXNsYW5kQmVnaW4oKQorICAg
ICAgICB7CisgICAgICAgICAgICAvLyBbc3RhcnQsIGFsbG9jYXRvckVuZCkKKyAgICAgICAgICAg
IHJldHVybiBlbmQgLSBpc2xhbmRSZWdpb25TaXplOworICAgICAgICB9CisKKyAgICAgICAgdWlu
dHB0cl90IGFsbG9jYXRvclNpemUoKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gaXNs
YW5kQmVnaW4oKSAtIHN0YXJ0OworICAgICAgICB9CisKKyAgICAgICAgc2l6ZV90IGlzbGFuZHNQ
ZXJQYWdlKCkKKyAgICAgICAgeworICAgICAgICAgICAgc2l6ZV90IGlzbGFuZHNQZXJQYWdlID0g
cGFnZVNpemUoKSAvIGlzbGFuZFNpemVJbkJ5dGVzOworICAgICAgICAgICAgQVNTRVJUKGlzbGFu
ZHNQZXJQYWdlICogaXNsYW5kU2l6ZUluQnl0ZXMgPT0gcGFnZVNpemUoKSk7IC8vIHdlIHJlbHkg
b24gcGVyZmVjdCBkaXZpc2lvbiBmb3IgZmluZGluZyB3aGljaCBiaXQgYSBwb2ludGVyIGlzLgor
ICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoaXNQb3dlck9mVHdvKGlzbGFuZHNQZXJQYWdlKSk7
CisgICAgICAgICAgICByZXR1cm4gaXNsYW5kc1BlclBhZ2U7CisgICAgICAgIH0KKworICAgICAg
ICB2b2lkIG5vdGlmeUJlZm9yZVJlbGVhc2UoTWV0YUFsbG9jYXRvckhhbmRsZSYpIGZpbmFsCisg
ICAgICAgIHsKKyAgICAgICAgfQorCisKKyAgICAgICAgLyoKKyAgICAgICAgLy8gT09QUzogcGFz
cyBMb2NrSG9sZGVyIHRvIG1ha2UgaXQgb2J2aW91cyBsb2NrIGlzIGhlbGQuCisgICAgICAgIGJv
b2wgdHJ5QWxsb2NhdGVJc2xhbmRzKHNpemVfdCBudW1Jc2xhbmRzVG9BbGxvY2F0ZSkKKyAgICAg
ICAgeworICAgICAgICAgICAgaWYgKCFudW1Jc2xhbmRzVG9BbGxvY2F0ZSkKKyAgICAgICAgICAg
ICAgICByZXR1cm4gdHJ1ZTsKKworICAgICAgICAgICAgdWludHB0cl90IG51bUZyZWVJc2xhbmRz
ID0gbnVtUmVzZXJ2ZWRJc2xhbmRzIC0gbnVtQWxsb2NhdGVkSXNsYW5kczsgCisgICAgICAgICAg
ICBpZiAobnVtRnJlZUlzbGFuZHMgPj0gbnVtSXNsYW5kc1RvQWxsb2NhdGUpIHsKKyAgICAgICAg
ICAgICAgICBudW1BbGxvY2F0ZWRJc2xhbmRzICs9IG51bUlzbGFuZHNUb0FsbG9jYXRlOworICAg
ICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKG51bUFsbG9jYXRlZElzbGFuZHMgPD0gbnVtUmVz
ZXJ2ZWRJc2xhbmRzKTsgLy8gT09QUzogY2hlY2tDb25zaXN0ZW5jeT8KKyAgICAgICAgICAgICAg
ICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgIH0gCisKKyAgICAgICAgICAgIHNpemVfdCBpc2xh
bmRzUGVyUGFnZSA9IHRoaXMtPmlzbGFuZHNQZXJQYWdlKCk7CisgICAgICAgICAgICAKKyAgICAg
ICAgICAgIHVpbnRwdHJfdCBpc2xhbmRzVG9SZXNlcnZlID0gbnVtSXNsYW5kc1RvQWxsb2NhdGUg
LSBudW1GcmVlSXNsYW5kczsKKworICAgICAgICAgICAgaXNsYW5kc1RvUmVzZXJ2ZSA9IHJvdW5k
VXBUb011bHRpcGxlT2YoaXNsYW5kc1BlclBhZ2UsIGlzbGFuZHNUb1Jlc2VydmUpOworICAgICAg
ICAgICAgdWludHB0cl90IG5ld0lzbGFuZEJlZ2luID0gZW5kIC0gKChudW1SZXNlcnZlZElzbGFu
ZHMgKyBpc2xhbmRzVG9SZXNlcnZlKSAqIGlzbGFuZFNpemVJbkJ5dGVzKTsKKyAgICAgICAgICAg
IGlmIChuZXdJc2xhbmRCZWdpbiA8IGFsbG9jYXRvckVuZCgpKQorICAgICAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKKworICAgICAgICAgICAgbnVtQWxsb2NhdGVkSXNsYW5kcyArPSBudW1Jc2xh
bmRzVG9BbGxvY2F0ZTsKKyAgICAgICAgICAgIG51bVJlc2VydmVkSXNsYW5kcyArPSBpc2xhbmRz
VG9SZXNlcnZlOworICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQobnVtQWxsb2NhdGVkSXNsYW5k
cyA8PSBudW1SZXNlcnZlZElzbGFuZHMpOworICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAg
ICAgIH0KKworICAgICAgICAvLyBPT1BTOiB0YWtlIGxvY2tob2xkZXIKKyAgICAgICAgdm9pZCBk
ZWFsbG9jYXRlSXNsYW5kcyhzaXplX3QgbnVtSXNsYW5kc1RvRnJlZSkKKyAgICAgICAgeworICAg
ICAgICAgICAgUkVMRUFTRV9BU1NFUlQobnVtSXNsYW5kc1RvRnJlZSA8PSBudW1BbGxvY2F0ZWRJ
c2xhbmRzKTsKKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKG51bUFsbG9jYXRlZElzbGFuZHMg
PD0gbnVtUmVzZXJ2ZWRJc2xhbmRzKTsgLy8gT09QUzogY2hlY2tDb25zaXN0ZW5jeQorICAgICAg
ICAgICAgbnVtQWxsb2NhdGVkSXNsYW5kcyAtPSBudW1Jc2xhbmRzVG9GcmVlOworICAgICAgICB9
CisgICAgICAgICovCisKKyAgICAgICAgLy8gT09QUzogbG9ja2hvbGRlci4KKyAgICAgICAgdm9p
ZCogYWxsb2NhdGVJc2xhbmQoKQorICAgICAgICB7CisgICAgICAgICAgICBhdXRvIGZpbmRSZXN1
bHQgPSBbJl0gKCkgLT4gdm9pZCogeworICAgICAgICAgICAgICAgIHNpemVfdCByZXN1bHRCaXQg
PSBpc2xhbmRCaXRzLmZpbmRDbGVhckJpdCgwKTsKKyAgICAgICAgICAgICAgICBpZiAocmVzdWx0
Qml0ID09IGlzbGFuZEJpdHMuc2l6ZSgpKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVs
bHB0cjsKKyAgICAgICAgICAgICAgICBpc2xhbmRCaXRzW3Jlc3VsdEJpdF0gPSB0cnVlOworICAg
ICAgICAgICAgICAgIHVpbnRwdHJfdCByZXN1bHQgPSBlbmQgLSAoKHJlc3VsdEJpdCArIDEpICog
aXNsYW5kU2l6ZUluQnl0ZXMpOyAKKyAgICAgICAgICAgICAgICByZXR1cm4gYml0d2lzZV9jYXN0
PHZvaWQqPihyZXN1bHQpOworICAgICAgICAgICAgfTsKKworICAgICAgICAgICAgaWYgKHZvaWQq
IHJlc3VsdCA9IGZpbmRSZXN1bHQoKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0Owor
CisgICAgICAgICAgICBpc2xhbmRCaXRzLnJlc2l6ZShpc2xhbmRCaXRzLnNpemUoKSArIGlzbGFu
ZHNQZXJQYWdlKCkpOworICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoaXNsYW5kQml0cy5zaXpl
KCkgPD0gbWF4SXNsYW5kc1BlclJlZ2lvbik7IAorCisgICAgICAgICAgICAvL2RhdGFMb2dMbigi
cmVnaW9uOiBbIiwgc3RhcnQsICIsICIsIGVuZCwgIikiKTsKKworICAgICAgICAgICAgdWludHB0
cl90IHBhZ2VCZWdpbiA9IGVuZCAtIChpc2xhbmRCaXRzLnNpemUoKSAqIGlzbGFuZFNpemVJbkJ5
dGVzKTsgLy8gW2lzbGFuZEJlZ2luLCBlbmQpCisgICAgICAgICAgICAvL2RhdGFMb2dMbigiY29t
bWl0dGluZzogIiwgcGFnZUJlZ2luKTsKKyAgICAgICAgICAgIG1fZml4ZWRBbGxvY2F0b3ItPm1f
cmVzZXJ2YXRpb24uY29tbWl0KGJpdHdpc2VfY2FzdDx2b2lkKj4ocGFnZUJlZ2luKSwgcGFnZVNp
emUoKSk7CisgICAgICAgICAgICB2b2lkKiByZXN1bHQgPSBmaW5kUmVzdWx0KCk7CisgICAgICAg
ICAgICBSRUxFQVNFX0FTU0VSVChyZXN1bHQpOworICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsK
KyAgICAgICAgfQorCisgICAgICAgIC8vIFtzdGFydCwgZW5kKQorICAgICAgICB1aW50cHRyX3Qg
c3RhcnQ7CisgICAgICAgIHVpbnRwdHJfdCBlbmQ7CisKKyAgICAgICAgc2l6ZV90IG51bUFsbG9j
YXRlZElzbGFuZHMgeyAwIH07IC8vIDw9IG51bVJlc2VydmVkSXNsYW5kcworICAgICAgICBGYXN0
Qml0VmVjdG9yIGlzbGFuZEJpdHM7CisgICAgICAgIFZlY3Rvcjx1aW50cHRyX3Q+IGp1bXBMb2Nh
dGlvbnNUb0lzbGFuZHM7IC8vIE9PUFM6IHVzZSByZWQgYmxhY2sgdHJlZSBhbmQgbWFrZSBpdCBm
YXN0IHRvIHJlbW92ZSBhbGwgZW50cmllcyBtYXRjaGluZy4KKyAgICB9OworI2VuZGlmCisKKyAg
ICB0ZW1wbGF0ZSA8dHlwZW5hbWUgRnVuY3Rpb24+CisgICAgdm9pZCBmb3JFYWNoQWxsb2NhdG9y
KEZ1bmN0aW9uIGZ1bmN0aW9uKQorICAgIHsKKyNpZiBDUFUoQVJNNjQpCisgICAgICAgIGZvciAo
UmVnaW9uQWxsb2NhdG9yJiBhbGxvY2F0b3IgOiBtX2FsbG9jYXRvcnMpIHsKKyAgICAgICAgICAg
IHVzaW5nIEZ1bmN0aW9uUmVzdWx0VHlwZSA9IGRlY2x0eXBlKGZ1bmN0aW9uKGFsbG9jYXRvcikp
OworICAgICAgICAgICAgaWYgY29uc3RleHByIChzdGQ6OmlzX3NhbWU8SXRlcmF0aW9uU3RhdHVz
LCBGdW5jdGlvblJlc3VsdFR5cGU+Ojp2YWx1ZSkgeworICAgICAgICAgICAgICAgIGlmIChmdW5j
dGlvbihhbGxvY2F0b3IpID09IEl0ZXJhdGlvblN0YXR1czo6RG9uZSkKKyAgICAgICAgICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIHN0YXRp
Y19hc3NlcnQoc3RkOjppc19zYW1lPHZvaWQsIEZ1bmN0aW9uUmVzdWx0VHlwZT46OnZhbHVlKTsK
KyAgICAgICAgICAgICAgICBmdW5jdGlvbihhbGxvY2F0b3IpOworICAgICAgICAgICAgfQorICAg
ICAgICB9CisjZWxzZQorICAgICAgICBmdW5jdGlvbihtX2FsbG9jYXRvcik7CisjZW5kaWYKKyAg
ICB9CisKKyAgICBMb2NrIG1fbG9jazsKICAgICBQYWdlUmVzZXJ2YXRpb24gbV9yZXNlcnZhdGlv
bjsKKyNpZiBDUFUoQVJNNjQpCisgICAgc3RkOjphcnJheTxSZWdpb25BbGxvY2F0b3IsIG51bWJl
ck9mUmVnaW9ucz4gbV9hbGxvY2F0b3JzOworI2Vsc2UKKyAgICBBbGxvY2F0b3IgbV9hbGxvY2F0
b3I7CisjZW5kaWYKIH07CiAKLUZpeGVkVk1Qb29sRXhlY3V0YWJsZUFsbG9jYXRvcjo6fkZpeGVk
Vk1Qb29sRXhlY3V0YWJsZUFsbG9jYXRvcigpCi17Ci0gICAgbV9yZXNlcnZhdGlvbi5kZWFsbG9j
YXRlKCk7Ci19Ci0KIC8vIEtlZXAgdGhpcyBwb2ludGVyIGluIGEgbXV0YWJsZSBnbG9iYWwgdmFy
aWFibGUgdG8gaGVscCBMZWFrcyBmaW5kIGl0LgogLy8gQnV0IHdlIGRvIG5vdCB1c2UgdGhpcyBw
b2ludGVyLgogc3RhdGljIEZpeGVkVk1Qb29sRXhlY3V0YWJsZUFsbG9jYXRvciogZ2xvYmFsRml4
ZWRWTVBvb2xFeGVjdXRhYmxlQWxsb2NhdG9yVG9Xb3JrQXJvdW5kTGVha3MgPSBudWxscHRyOwpA
QCAtNDE3LDcgKzc0MSw2IEBAIHZvaWQgRXhlY3V0YWJsZUFsbG9jYXRvcjo6aW5pdGlhbGl6ZVVu
ZGUKICAgICBSRUxFQVNFX0FTU0VSVCghZ19qc2NDb25maWcuZml4ZWRWTVBvb2xFeGVjdXRhYmxl
QWxsb2NhdG9yKTsKICAgICBnX2pzY0NvbmZpZy5maXhlZFZNUG9vbEV4ZWN1dGFibGVBbGxvY2F0
b3IgPSBuZXcgRml4ZWRWTVBvb2xFeGVjdXRhYmxlQWxsb2NhdG9yKCk7CiAgICAgZ2xvYmFsRml4
ZWRWTVBvb2xFeGVjdXRhYmxlQWxsb2NhdG9yVG9Xb3JrQXJvdW5kTGVha3MgPSBnX2pzY0NvbmZp
Zy5maXhlZFZNUG9vbEV4ZWN1dGFibGVBbGxvY2F0b3I7Ci0gICAgQ29kZVByb2ZpbGluZzo6bm90
aWZ5QWxsb2NhdG9yKGdfanNjQ29uZmlnLmZpeGVkVk1Qb29sRXhlY3V0YWJsZUFsbG9jYXRvcik7
CiB9CiAKIGJvb2wgRXhlY3V0YWJsZUFsbG9jYXRvcjo6aXNWYWxpZCgpIGNvbnN0CkBAIC00MjUs
NyArNzQ4LDcgQEAgYm9vbCBFeGVjdXRhYmxlQWxsb2NhdG9yOjppc1ZhbGlkKCkgY29ucwogICAg
IEZpeGVkVk1Qb29sRXhlY3V0YWJsZUFsbG9jYXRvciogYWxsb2NhdG9yID0gZ19qc2NDb25maWcu
Zml4ZWRWTVBvb2xFeGVjdXRhYmxlQWxsb2NhdG9yOwogICAgIGlmICghYWxsb2NhdG9yKQogICAg
ICAgICByZXR1cm4gQmFzZTo6aXNWYWxpZCgpOwotICAgIHJldHVybiAhIWFsbG9jYXRvci0+Ynl0
ZXNSZXNlcnZlZCgpOworICAgIHJldHVybiBhbGxvY2F0b3ItPmlzVmFsaWQoKTsKIH0KIAogYm9v
bCBFeGVjdXRhYmxlQWxsb2NhdG9yOjp1bmRlck1lbW9yeVByZXNzdXJlKCkKQEAgLTQ1NiwxMSAr
Nzc5LDExIEBAIGRvdWJsZSBFeGVjdXRhYmxlQWxsb2NhdG9yOjptZW1vcnlQcmVzc3UKICAgICBy
ZXR1cm4gcmVzdWx0OwogfQogCi1SZWZQdHI8RXhlY3V0YWJsZU1lbW9yeUhhbmRsZT4gRXhlY3V0
YWJsZUFsbG9jYXRvcjo6YWxsb2NhdGUoc2l6ZV90IHNpemVJbkJ5dGVzLCB2b2lkKiBvd25lclVJ
RCwgSklUQ29tcGlsYXRpb25FZmZvcnQgZWZmb3J0KQorUmVmUHRyPEV4ZWN1dGFibGVNZW1vcnlI
YW5kbGU+IEV4ZWN1dGFibGVBbGxvY2F0b3I6OmFsbG9jYXRlKHNpemVfdCBzaXplSW5CeXRlcywg
SklUQ29tcGlsYXRpb25FZmZvcnQgZWZmb3J0KQogewogICAgIEZpeGVkVk1Qb29sRXhlY3V0YWJs
ZUFsbG9jYXRvciogYWxsb2NhdG9yID0gZ19qc2NDb25maWcuZml4ZWRWTVBvb2xFeGVjdXRhYmxl
QWxsb2NhdG9yOwogICAgIGlmICghYWxsb2NhdG9yKQotICAgICAgICByZXR1cm4gQmFzZTo6YWxs
b2NhdGUoc2l6ZUluQnl0ZXMsIG93bmVyVUlELCBlZmZvcnQpOworICAgICAgICByZXR1cm4gQmFz
ZTo6YWxsb2NhdGUoc2l6ZUluQnl0ZXMsIGVmZm9ydCk7CiAgICAgaWYgKE9wdGlvbnM6OmxvZ0V4
ZWN1dGFibGVBbGxvY2F0aW9uKCkpIHsKICAgICAgICAgTWV0YUFsbG9jYXRvcjo6U3RhdGlzdGlj
cyBzdGF0cyA9IGFsbG9jYXRvci0+Y3VycmVudFN0YXRpc3RpY3MoKTsKICAgICAgICAgZGF0YUxv
ZygiQWxsb2NhdGluZyAiLCBzaXplSW5CeXRlcywgIiBieXRlcyBvZiBleGVjdXRhYmxlIG1lbW9y
eSB3aXRoICIsIHN0YXRzLmJ5dGVzQWxsb2NhdGVkLCAiIGJ5dGVzIGFsbG9jYXRlZCwgIiwgc3Rh
dHMuYnl0ZXNSZXNlcnZlZCwgIiBieXRlcyByZXNlcnZlZCwgYW5kICIsIHN0YXRzLmJ5dGVzQ29t
bWl0dGVkLCAiIGNvbW1pdHRlZC5cbiIpOwpAQCAtNDg3LDcgKzgxMCw3IEBAIFJlZlB0cjxFeGVj
dXRhYmxlTWVtb3J5SGFuZGxlPiBFeGVjdXRhYmwKICAgICAgICAgfQogICAgIH0KIAotICAgIFJl
ZlB0cjxFeGVjdXRhYmxlTWVtb3J5SGFuZGxlPiByZXN1bHQgPSBhbGxvY2F0b3ItPmFsbG9jYXRl
KHNpemVJbkJ5dGVzLCBvd25lclVJRCk7CisgICAgUmVmUHRyPEV4ZWN1dGFibGVNZW1vcnlIYW5k
bGU+IHJlc3VsdCA9IGFsbG9jYXRvci0+YWxsb2NhdGUoc2l6ZUluQnl0ZXMpOwogICAgIGlmICgh
cmVzdWx0KSB7CiAgICAgICAgIGlmIChlZmZvcnQgIT0gSklUQ29tcGlsYXRpb25DYW5GYWlsKSB7
CiAgICAgICAgICAgICBkYXRhTG9nKCJSYW4gb3V0IG9mIGV4ZWN1dGFibGUgbWVtb3J5IHdoaWxl
IGFsbG9jYXRpbmcgIiwgc2l6ZUluQnl0ZXMsICIgYnl0ZXMuXG4iKTsKQEAgLTUzOSw2ICs4NjIs
MjAgQEAgdm9pZCBFeGVjdXRhYmxlQWxsb2NhdG9yOjpkdW1wUHJvZmlsZSgpCiB9CiAjZW5kaWYK
IAorI2lmIENQVShBUk02NCkKK3ZvaWQqIEV4ZWN1dGFibGVBbGxvY2F0b3I6OmdldEp1bXBJc2xh
bmRUbyh2b2lkKiBmcm9tLCB2b2lkKiBvbGREZXN0aW5hdGlvbiwgdm9pZCogbmV3RGVzdGluYXRp
b24pCit7CisgICAgRml4ZWRWTVBvb2xFeGVjdXRhYmxlQWxsb2NhdG9yKiBhbGxvY2F0b3IgPSBn
X2pzY0NvbmZpZy5maXhlZFZNUG9vbEV4ZWN1dGFibGVBbGxvY2F0b3I7CisgICAgaWYgKCFhbGxv
Y2F0b3IpIHsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsgLy8gT09QUzog
aXMgdGhpcyBjb3JyZWN0PworICAgIH0KKyAgICAvL2ludHB0cl90IGRlbHRhID0gYml0d2lzZV9j
YXN0PGludHB0cl90PihuZXdEZXN0aW5hdGlvbikgLSBiaXR3aXNlX2Nhc3Q8aW50cHRyX3Q+KGZy
b20pOworICAgIC8vZGF0YUxvZ0xuKCJnZXRKdW1wSXNsYW5kVG8gZGVsdGE6ICIsIHN0YXRpY19j
YXN0PGRvdWJsZT4oZGVsdGEpLzEwMjQuMC8xMDI0LjAsICJNQiIpOworCisgICAgcmV0dXJuIGFs
bG9jYXRvci0+bWFrZUlzbGFuZChiaXR3aXNlX2Nhc3Q8dWludHB0cl90Pihmcm9tKSwgYml0d2lz
ZV9jYXN0PHVpbnRwdHJfdD4ob2xkRGVzdGluYXRpb24pLCBiaXR3aXNlX2Nhc3Q8dWludHB0cl90
PihuZXdEZXN0aW5hdGlvbikpOworfQorI2VuZGlmCisKIHZvaWQqIHN0YXJ0T2ZGaXhlZEV4ZWN1
dGFibGVNZW1vcnlQb29sSW1wbCgpCiB7CiAgICAgRml4ZWRWTVBvb2xFeGVjdXRhYmxlQWxsb2Nh
dG9yKiBhbGxvY2F0b3IgPSBnX2pzY0NvbmZpZy5maXhlZFZNUG9vbEV4ZWN1dGFibGVBbGxvY2F0
b3I7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0V4ZWN1dGFibGVBbGxvY2F0b3Iu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0V4ZWN1dGFibGVBbGxv
Y2F0b3IuaAkocmV2aXNpb24gMjU3ODY2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9F
eGVjdXRhYmxlQWxsb2NhdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTcxLDcgKzcxLDcgQEAgcHVi
bGljOgogCiAgICAgc3RhdGljIHZvaWQgZHVtcFByb2ZpbGUoKSB7IH0KIAotICAgIFJlZlB0cjxF
eGVjdXRhYmxlTWVtb3J5SGFuZGxlPiBhbGxvY2F0ZShzaXplX3QsIHZvaWQqLCBKSVRDb21waWxh
dGlvbkVmZm9ydCkgeyByZXR1cm4gbnVsbHB0cjsgfQorICAgIFJlZlB0cjxFeGVjdXRhYmxlTWVt
b3J5SGFuZGxlPiBhbGxvY2F0ZShzaXplX3QsIEpJVENvbXBpbGF0aW9uRWZmb3J0KSB7IHJldHVy
biBudWxscHRyOyB9CiAKICAgICBzdGF0aWMgdm9pZCBzZXRKSVRFbmFibGVkKGJvb2wpIHsgfTsK
ICAgICAKQEAgLTE3Niw3ICsxNzYsNyBAQCBwdWJsaWM6CiAgICAgCiAgICAgSlNfRVhQT1JUX1BS
SVZBVEUgc3RhdGljIHZvaWQgc2V0SklURW5hYmxlZChib29sKTsKIAotICAgIFJlZlB0cjxFeGVj
dXRhYmxlTWVtb3J5SGFuZGxlPiBhbGxvY2F0ZShzaXplX3Qgc2l6ZUluQnl0ZXMsIHZvaWQqIG93
bmVyVUlELCBKSVRDb21waWxhdGlvbkVmZm9ydCk7CisgICAgUmVmUHRyPEV4ZWN1dGFibGVNZW1v
cnlIYW5kbGU+IGFsbG9jYXRlKHNpemVfdCBzaXplSW5CeXRlcywgSklUQ29tcGlsYXRpb25FZmZv
cnQpOwogCiAgICAgYm9vbCBpc1ZhbGlkRXhlY3V0YWJsZU1lbW9yeShjb25zdCBBYnN0cmFjdExv
Y2tlciYsIHZvaWQqIGFkZHJlc3MpOwogCkBAIC0xODQsNiArMTg0LDEwIEBAIHB1YmxpYzoKIAog
ICAgIExvY2smIGdldExvY2soKSBjb25zdDsKIAorI2lmIENQVShBUk02NCkKKyAgICB2b2lkKiBn
ZXRKdW1wSXNsYW5kVG8odm9pZCogZnJvbSwgdm9pZCogb2xkRGVzdGluYXRpb24sIHZvaWQqIG5l
d0Rlc3RpbmF0aW9uKTsKKyNlbmRpZgorCiBwcml2YXRlOgogICAgIEV4ZWN1dGFibGVBbGxvY2F0
b3IoKSA9IGRlZmF1bHQ7CiAgICAgfkV4ZWN1dGFibGVBbGxvY2F0b3IoKSA9IGRlZmF1bHQ7Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db21tb25TbG93UGF0aHMuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbW1vblNsb3dQYXRo
cy5jcHAJKHJldmlzaW9uIDI1Nzg2NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0NvbW1vblNsb3dQYXRocy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMyLDcgKzMyLDYgQEAKICNp
bmNsdWRlICJCeXRlY29kZVN0cnVjdHMuaCIKICNpbmNsdWRlICJDYWxsRnJhbWUuaCIKICNpbmNs
dWRlICJDbG9uZWRBcmd1bWVudHMuaCIKLSNpbmNsdWRlICJDb2RlUHJvZmlsaW5nLmgiCiAjaW5j
bHVkZSAiRGVmaW5lUHJvcGVydHlBdHRyaWJ1dGVzLmgiCiAjaW5jbHVkZSAiRGlyZWN0QXJndW1l
bnRzLmgiCiAjaW5jbHVkZSAiRXJyb3IuaCIKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0NvbXBsZXRpb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0NvbXBsZXRpb24uY3BwCShyZXZpc2lvbiAyNTc4NjYpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9Db21wbGV0aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjcs
NyArMjcsNiBAQAogI2luY2x1ZGUgIkNhbGxGcmFtZS5oIgogI2luY2x1ZGUgIkNhdGNoU2NvcGUu
aCIKICNpbmNsdWRlICJDb2RlQ2FjaGUuaCIKLSNpbmNsdWRlICJDb2RlUHJvZmlsaW5nLmgiCiAj
aW5jbHVkZSAiRXhjZXB0aW9uLmgiCiAjaW5jbHVkZSAiSWRlbnRpZmllcklubGluZXMuaCIKICNp
bmNsdWRlICJJbnRlcnByZXRlci5oIgpAQCAtMTM4LDggKzEzNyw2IEBAIEpTVmFsdWUgZXZhbHVh
dGUoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE8KICAgICBSRUxFQVNFX0FTU0VSVCh2bS5hdG9tU3Ry
aW5nVGFibGUoKSA9PSBUaHJlYWQ6OmN1cnJlbnQoKS5hdG9tU3RyaW5nVGFibGUoKSk7CiAgICAg
UkVMRUFTRV9BU1NFUlQoIXZtLmlzQ29sbGVjdG9yQnVzeU9uQ3VycmVudFRocmVhZCgpKTsKIAot
ICAgIENvZGVQcm9maWxpbmcgcHJvZmlsZShzb3VyY2UpOwotCiAgICAgaWYgKCF0aGlzVmFsdWUg
fHwgdGhpc1ZhbHVlLmlzVW5kZWZpbmVkT3JOdWxsKCkpCiAgICAgICAgIHRoaXNWYWx1ZSA9IGds
b2JhbE9iamVjdDsKICAgICBKU09iamVjdCogdGhpc09iaiA9IGpzQ2FzdDxKU09iamVjdCo+KHRo
aXNWYWx1ZS50b1RoaXMoZ2xvYmFsT2JqZWN0LCBOb3RTdHJpY3RNb2RlKSk7CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU01vZHVsZUxvYWRlci5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNNb2R1bGVMb2FkZXIuY3BwCShyZXZp
c2lvbiAyNTc4NjYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU01vZHVsZUxv
YWRlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI5LDcgKzI5LDYgQEAKIAogI2luY2x1ZGUgIkJ1
aWx0aW5OYW1lcy5oIgogI2luY2x1ZGUgIkNhdGNoU2NvcGUuaCIKLSNpbmNsdWRlICJDb2RlUHJv
ZmlsaW5nLmgiCiAjaW5jbHVkZSAiRXJyb3IuaCIKICNpbmNsdWRlICJFeGNlcHRpb24uaCIKICNp
bmNsdWRlICJKU0NJbmxpbmVzLmgiCkBAIC00MDAsOCArMzk5LDYgQEAgRW5jb2RlZEpTVmFsdWUg
SlNDX0hPU1RfQ0FMTCBtb2R1bGVMb2FkZQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2Rl
KEpTV2ViQXNzZW1ibHk6Omluc3RhbnRpYXRlKGdsb2JhbE9iamVjdCwgcHJvbWlzZSwgbW9kdWxl
S2V5LCBqc1NvdXJjZUNvZGUpKTsKICNlbmRpZgogCi0gICAgQ29kZVByb2ZpbGluZyBwcm9maWxl
KHNvdXJjZUNvZGUpOwotCiAgICAgUGFyc2VyRXJyb3IgZXJyb3I7CiAgICAgc3RkOjp1bmlxdWVf
cHRyPE1vZHVsZVByb2dyYW1Ob2RlPiBtb2R1bGVQcm9ncmFtTm9kZSA9IHBhcnNlPE1vZHVsZVBy
b2dyYW1Ob2RlPigKICAgICAgICAgdm0sIHNvdXJjZUNvZGUsIElkZW50aWZpZXIoKSwgSlNQYXJz
ZXJCdWlsdGluTW9kZTo6Tm90QnVpbHRpbiwKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL09wdGlvbnNMaXN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvT3B0aW9uc0xpc3QuaAkocmV2aXNpb24gMjU3ODY2KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9uc0xpc3QuaAkod29ya2luZyBjb3B5KQpAQCAtNTAwLDYg
KzUwMCw3IEBAIGNvbnN0ZXhwciBib29sIGVuYWJsZVdlYkFzc2VtYmx5U3RyZWFtaW4KICAgICB2
KEJvb2wsIGZvcmNlT1NSRXhpdFRvTExJbnQsIGZhbHNlLCBOb3JtYWwsICJJZiB0cnVlLCB3ZSBh
bHdheXMgZXhpdCB0byB0aGUgTExJbnQuIElmIGZhbHNlLCB3ZSBleGl0IHRvIHdoYXRldmVyIGlz
IG1vc3QgY29udmVuaWVudC4iKSBcCiAgICAgdihVbnNpZ25lZCwgZ2V0QnlWYWxJQ01heE51bWJl
ck9mSWRlbnRpZmllcnMsIDQsIE5vcm1hbCwgIk51bWJlciBvZiBpZGVudGlmaWVycyB3ZSBzZWUg
aW4gdGhlIExMSW50IHRoYXQgY291bGQgY2F1c2UgdXMgdG8gYmFpbCBvbiBnZW5lcmF0aW5nIGFu
IElDIGZvciBnZXRfYnlfdmFsLiIpIFwKICAgICB2KEJvb2wsIHVzZUNsYXNzRmllbGRzLCBmYWxz
ZSwgTm9ybWFsLCAiSWYgdHJ1ZSwgdGhlIHBhcnNlciB3aWxsIHVuZGVyc3RhbmQgZGF0YSBmaWVs
ZHMgaW5zaWRlIGNsYXNzZXMuIikgXAorICAgIHYoQm9vbCwgdXNlUmFuZG9taXppbmdFeGVjdXRh
YmxlSXNsYW5kQWxsb2NhdGlvbiwgZmFsc2UsIE5vcm1hbCwgIkZvciB0aGUgYXJtNjQgRXhlY3V0
YWJsZUFsbG9jYXRvciwgaWYgdHJ1ZSwgc2VsZWN0IHdoaWNoIHJlZ2lvbiB0byB1c2UgcmFuZG9t
bHkuIFRoaXMgaXMgdXNlZnVsIGZvciB0ZXN0aW5nIHRoYXQganVtcCBpc2xhbmRzIHdvcmsuIikg
XAogCiBlbnVtIE9wdGlvbkVxdWl2YWxlbmNlIHsKICAgICBTYW1lT3B0aW9uLApJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL3Rvb2xzL0NvZGVQcm9maWxlLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvdG9vbHMvQ29kZVByb2ZpbGUuY3BwCShyZXZpc2lvbiAyNTc4
NjYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvdG9vbHMvQ29kZVByb2ZpbGUuY3BwCShub25l
eGlzdGVudCkKQEAgLTEsMTcyICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICog
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4gCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIkNvZGVQcm9m
aWxlLmgiCi0KLSNpbmNsdWRlICJDb2RlQmxvY2suaCIKLSNpbmNsdWRlICJDb2RlUHJvZmlsaW5n
LmgiCi0jaW5jbHVkZSAiTGlua0J1ZmZlci5oIgotI2luY2x1ZGUgIlByb2ZpbGVUcmVlTm9kZS5o
IgotI2luY2x1ZGUgPHd0Zi9TdGFja1RyYWNlLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvV1RGU3Ry
aW5nLmg+Ci0KLW5hbWVzcGFjZSBKU0MgewotCi0vLyBNYXAgZnJvbSBDb2RlVHlwZSBlbnVtIHRv
IGEgY29ycmVzcG9uZGluZyBuYW1lLgotc3RhdGljIGNvbnN0IGNoYXIqIGNvbnN0IHNfY29kZVR5
cGVOYW1lc1tDb2RlUHJvZmlsZTo6TnVtYmVyT2ZDb2RlVHlwZXNdID0gewotICAgICJbW0VuZ2lu
ZUNvZGVdXSIsCi0gICAgIltbR2xvYmFsVGh1bmtdXSIsCi0gICAgIltbUmVnRXhwQ29kZV1dIiwK
LSAgICAiW1tERkdKSVRdXSIsCi0gICAgIltbQmFzZWxpbmVPbmx5XV0iLAotICAgICJbW0Jhc2Vs
aW5lUHJvZmlsZV1dIiwKLSAgICAiW1tCYXNlbGluZU9TUl1dIiwKLSAgICAiW1tFbmdpbmVGcmFt
ZV1dIgotfTsKLQotLy8gSGVscGVyIGZ1bmN0aW9uLCB0cnVuY2F0ZSB0cmFjZXMgdG8gcHJ1bmUg
dGhlIG91dHB1dCAmIG1ha2UgdmVyeSB2ZXJib3NlIG1vZGUgYSBsaXR0bGUgbW9yZSByZWFkYWJs
ZS4KLXN0YXRpYyBib29sIHRydW5jYXRlVHJhY2UoY29uc3QgY2hhciogc3ltYm9sTmFtZSkKLXsK
LSAgICByZXR1cm4gIXN0cmNtcChzeW1ib2xOYW1lLCAiSlNDOjpCeXRlY29kZUdlbmVyYXRvcjo6
Z2VuZXJhdGUoKSIpCi0gICAgICAgIHx8ICFzdHJjbXAoc3ltYm9sTmFtZSwgIkpTQzo6UGFyc2Vy
PEpTQzo6TGV4ZXI8dW5zaWduZWQgY2hhcj4+OjpwYXJzZUlubmVyKCkiKQotICAgICAgICB8fCAh
c3RyY21wKHN5bWJvbE5hbWUsICJXVEY6OmZhc3RNYWxsb2ModW5zaWduZWQgbG9uZykiKQotICAg
ICAgICB8fCAhc3RyY21wKHN5bWJvbE5hbWUsICJXVEY6OmNhbGN1bGF0ZVVUQ09mZnNldCgpIikK
LSAgICAgICAgfHwgIXN0cmNtcChzeW1ib2xOYW1lLCAiSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2Vy
OjpwYXJzZUNvZGVCbG9jaygpIik7Ci0gICAgICAgIAotfQotCi0vLyBFYWNoIHRyYWNlIGNvbnNp
c3RzIG9mIGEgc2VxdWVuY2Ugb2YgemVybyBvciBtb3JlICdFbmdpbmVGcmFtZScgZW50cmllcywK
LS8vIGZvbGxvd2VkIGJ5IGEgc2FtcGxlIGluIEpJVCBjb2RlLCBvciBvbmUgb3IgbW9yZSAnRW5n
aW5lRnJhbWUnIGVudHJpZXMsCi0vLyBmb2xsb3dlZCBieSBhICdFbmdpbmVDb2RlJyB0ZXJtaW5h
dG9yLgotdm9pZCBDb2RlUHJvZmlsZTo6c2FtcGxlKHZvaWQqIHBjLCB2b2lkKiogZnJhbWVQb2lu
dGVyKQotewotICAgIC8vIERpc2FsbG93IHRyYWNlcyBjb250YWluaW5nIG9ubHkgYSAnRW5naW5l
Q29kZScgdGVybWluYXRvciwgd2l0aG91dCBhbnkgJ0VuZ2luZUZyYW1lJyBmcmFtZXMuCi0gICAg
aWYgKCFmcmFtZVBvaW50ZXIpCi0gICAgICAgIHJldHVybjsKLQotICAgIHdoaWxlIChmcmFtZVBv
aW50ZXIpIHsKLSAgICAgICAgQ29kZVR5cGUgdHlwZTsKLQotI2lmIEVOQUJMRShKSVQpCi0gICAg
ICAgIC8vIERldGVybWluZSBpZiB0aGlzIHNhbXBsZSBmZWxsIGluIEpJVCBjb2RlLCBhbmQgaWYg
c28sIGZyb20gd2hpY2ggSklUICYgd2h5LgotICAgICAgICB2b2lkKiBvd25lclVJRCA9IENvZGVQ
cm9maWxpbmc6OmdldE93bmVyVUlERm9yUEMocGMpOwotCi0gICAgICAgIGlmICghb3duZXJVSUQp
Ci0gICAgICAgICAgICB0eXBlID0gRW5naW5lRnJhbWU7Ci0gICAgICAgIGVsc2UgaWYgKG93bmVy
VUlEID09IEdMT0JBTF9USFVOS19JRCkKLSAgICAgICAgICAgIHR5cGUgPSBHbG9iYWxUaHVuazsK
LSAgICAgICAgZWxzZSBpZiAob3duZXJVSUQgPT0gUkVHRVhQX0NPREVfSUQpCi0gICAgICAgICAg
ICB0eXBlID0gUmVnRXhwQ29kZTsKLSAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICBDb2RlQmxv
Y2sqIGNvZGVCbG9jayA9IHN0YXRpY19jYXN0PENvZGVCbG9jayo+KG93bmVyVUlEKTsKLSAgICAg
ICAgICAgIGlmIChjb2RlQmxvY2stPmppdFR5cGUoKSA9PSBKSVRUeXBlOjpERkdKSVQpCi0gICAg
ICAgICAgICAgICAgdHlwZSA9IERGR0pJVDsKLSAgICAgICAgICAgIGVsc2UgaWYgKCFjYW5Db21w
aWxlKGNvZGVCbG9jay0+Y2FwYWJpbGl0eUxldmVsU3RhdGUoKSkpCi0gICAgICAgICAgICAgICAg
dHlwZSA9IEJhc2VsaW5lT25seTsKLSAgICAgICAgICAgIGVsc2UgaWYgKGNvZGVCbG9jay0+cmVw
bGFjZW1lbnQoKSkKLSAgICAgICAgICAgICAgICB0eXBlID0gQmFzZWxpbmVPU1I7Ci0gICAgICAg
ICAgICBlbHNlCi0gICAgICAgICAgICAgICAgdHlwZSA9IEJhc2VsaW5lUHJvZmlsZTsKLSAgICAg
ICAgfQotI2Vsc2UKLSAgICAgICAgdHlwZSA9IEVuZ2luZUZyYW1lOwotI2VuZGlmCi0KLSAgICAg
ICAgLy8gQSBzYW1wbGUgaW4gSklUIGNvZGUgdGVybWluYXRlcyB0aGUgdHJhY2UuCi0gICAgICAg
IG1fc2FtcGxlcy5hcHBlbmQoQ29kZVJlY29yZChwYywgdHlwZSkpOwotICAgICAgICBpZiAodHlw
ZSAhPSBFbmdpbmVGcmFtZSkKLSAgICAgICAgICAgIHJldHVybjsKLQotI2lmIE9TKERBUldJTikg
JiYgQ1BVKFg4Nl82NCkKLSAgICAgICAgLy8gV2FsayB1cCB0aGUgc3RhY2suCi0gICAgICAgIHBj
ID0gZnJhbWVQb2ludGVyWzFdOwotICAgICAgICBmcmFtZVBvaW50ZXIgPSByZWludGVycHJldF9j
YXN0PHZvaWQqKj4oKmZyYW1lUG9pbnRlcik7Ci0jZWxpZiBPUyhMSU5VWCkgJiYgQ1BVKFg4NikK
LSAgICAgICAgLy8gRG9uJ3QgdW53aW5kIHRoZSBzdGFjayBhcyBzb21lIGRlcGVuZGVudCB0aGly
ZCBwYXJ0eSBsaWJyYXJpZXMKLSAgICAgICAgLy8gbWF5IGJlIGNvbXBpbGVkIHdpdGggLWZvbWl0
LWZyYW1lLXBvaW50ZXIuCi0gICAgICAgIGZyYW1lUG9pbnRlciA9IDA7Ci0jZWxzZQotICAgICAg
ICAvLyBUaGlzIHBsYXRmb3JtIGlzIG5vdCB5ZXQgc3VwcG9ydGVkIQotICAgICAgICBSRUxFQVNF
X0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwotI2VuZGlmCi0gICAgfQotCi0gICAgLy8gSWYgd2UgZ2V0
IGhlcmUsIHdlIHdhbGtlZCB0aGUgZW50aXJlIHN0YWNrIHdpdGhvdXQgZmluZGluZyBhbnkgZnJh
bWVzIG9mIEpJVCBjb2RlLgotICAgIG1fc2FtcGxlcy5hcHBlbmQoQ29kZVJlY29yZCgwLCBFbmdp
bmVDb2RlKSk7Ci19Ci0KLXZvaWQgQ29kZVByb2ZpbGU6OnJlcG9ydCgpCi17Ci0gICAgZGF0YUxv
Z0YoIjxDb2RlUHJvZmlsaW5nICVzOiVkPlxuIiwgbV9maWxlLmRhdGEoKSwgbV9saW5lTnVtYmVy
KTsKLQotICAgIC8vIEhvdyBtYW55IGZyYW1lcyBvZiBDLWNvZGUgdG8gcHJpbnQgLSAwLCBpZiBu
b3QgdmVyYm9zZSwgMSBpZiB2ZXJib3NlLCB1cCB0byAxMDI0IGlmIHZlcnkgdmVyYm9zZS4KLSAg
ICB1bnNpZ25lZCByZWN1cnNpb25MaW1pdCA9IENvZGVQcm9maWxpbmc6OmJlVmVyeVZlcmJvc2Uo
KSA/IDEwMjQgOiBDb2RlUHJvZmlsaW5nOjpiZVZlcmJvc2UoKTsKLQotICAgIFByb2ZpbGVUcmVl
Tm9kZSBwcm9maWxlOwotCi0gICAgLy8gV2FsayB0aHJvdWdoIHRoZSBzYW1wbGUgYnVmZmVyLgot
ICAgIHNpemVfdCB0cmFjZSA9IDA7Ci0gICAgd2hpbGUgKHRyYWNlIDwgbV9zYW1wbGVzLnNpemUo
KSkgewotCi0gICAgICAgIC8vIEFsbCB0cmFjZXMgYXJlIHplcm8gb3IgbW9yZSAnRW5naW5lRnJh
bWUncywgZm9sbG93ZWQgYnkgYSBub24tJ0VuZ2luZUZyYW1lJy4KLSAgICAgICAgLy8gU2NhbiB0
byBmaW5kIHRoZSBsYXN0IHNhbXBsZSBpbiB0aGUgdHJhY2UuCi0gICAgICAgIHNpemVfdCBsYXN0
SW5UcmFjZSA9IHRyYWNlOwotICAgICAgICB3aGlsZSAobV9zYW1wbGVzW2xhc3RJblRyYWNlXS50
eXBlID09IEVuZ2luZUZyYW1lKQotICAgICAgICAgICAgKytsYXN0SW5UcmFjZTsKLQotICAgICAg
ICAvLyBXZSB1c2UgdGhlIGxhc3Qgc2FtcGxlIHR5cGUgdG8gbG9vayB1cCBhIG5hbWUgKHVzZWQg
YXMgYSBidWNrZXQgaW4gdGhlIHByb2ZpbGVyKS4KLSAgICAgICAgUHJvZmlsZVRyZWVOb2RlKiBj
YWxsYmFja3MgPSBwcm9maWxlLnNhbXBsZUNoaWxkKHNfY29kZVR5cGVOYW1lc1ttX3NhbXBsZXNb
bGFzdEluVHJhY2VdLnR5cGVdKTsKLQotICAgICAgICAvLyBJZiB0aGVyZSBhcmUgYW55IHNhbXBs
ZXMgaW4gQy1jb2RlLCBhZGQgdXAgdG8gcmVjdXJzaW9uTGltaXQgb2YgdGhlbSBpbnRvIHRoZSBw
cm9maWxlIHRyZWUuCi0gICAgICAgIHNpemVfdCBsYXN0RW5naW5lRnJhbWUgPSBsYXN0SW5UcmFj
ZTsKLSAgICAgICAgZm9yICh1bnNpZ25lZCBjb3VudCA9IDA7IGxhc3RFbmdpbmVGcmFtZSA+IHRy
YWNlICYmIGNvdW50IDwgcmVjdXJzaW9uTGltaXQ7ICsrY291bnQpIHsKLSAgICAgICAgICAgIC0t
bGFzdEVuZ2luZUZyYW1lOwotICAgICAgICAgICAgQVNTRVJUKG1fc2FtcGxlc1tsYXN0RW5naW5l
RnJhbWVdLnR5cGUgPT0gRW5naW5lRnJhbWUpOwotICAgICAgICAgICAgY29uc3QgY2hhciogbmFt
ZSA9ICI8dW5rbm93bj4iOwotICAgICAgICAgICAgYXV0byBkZW1hbmdsZWQgPSBTdGFja1RyYWNl
OjpkZW1hbmdsZShtX3NhbXBsZXNbbGFzdEVuZ2luZUZyYW1lXS5wYyk7Ci0gICAgICAgICAgICBp
ZiAoZGVtYW5nbGVkKQotICAgICAgICAgICAgICAgIG5hbWUgPSBkZW1hbmdsZWQtPmRlbWFuZ2xl
ZE5hbWUoKSA/IGRlbWFuZ2xlZC0+ZGVtYW5nbGVkTmFtZSgpIDogZGVtYW5nbGVkLT5tYW5nbGVk
TmFtZSgpOwotICAgICAgICAgICAgY2FsbGJhY2tzID0gY2FsbGJhY2tzLT5zYW1wbGVDaGlsZChu
YW1lKTsKLSAgICAgICAgICAgIGlmICh0cnVuY2F0ZVRyYWNlKG5hbWUpKQotICAgICAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8gTW92ZSBvbiB0byB0aGUgbmV4dCB0
cmFjZS4KLSAgICAgICAgdHJhY2UgPSBsYXN0SW5UcmFjZSArIDE7Ci0gICAgICAgIEFTU0VSVCh0
cmFjZSA8PSBtX3NhbXBsZXMuc2l6ZSgpKTsKLSAgICB9Ci0KLSAgICAvLyBPdXRwdXQgdGhlIHBy
b2ZpbGUgdHJlZS4KLSAgICBkYXRhTG9nRigiVG90YWwgc2FtcGxlczogJWxsZFxuIiwgc3RhdGlj
X2Nhc3Q8bG9uZyBsb25nPihwcm9maWxlLmNoaWxkQ291bnQoKSkpOwotICAgIHByb2ZpbGUuZHVt
cCgpOwotICAgIAotICAgIGZvciAoc2l6ZV90IGkgPSAwIDsgaSA8IG1fY2hpbGRyZW4uc2l6ZSgp
OyArK2kpCi0gICAgICAgIG1fY2hpbGRyZW5baV0tPnJlcG9ydCgpOwotCi0gICAgZGF0YUxvZ0Yo
IjwvQ29kZVByb2ZpbGluZyAlczolZD5cbiIsIG1fZmlsZS5kYXRhKCksIG1fbGluZU51bWJlcik7
Ci19Ci0KLX0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90b29scy9Db2RlUHJvZmlsZS5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90b29scy9Db2RlUHJvZmlsZS5o
CShyZXZpc2lvbiAyNTc4NjYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvdG9vbHMvQ29kZVBy
b2ZpbGUuaAkobm9uZXhpc3RlbnQpCkBAIC0xLDg5ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFO
WQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQotI3ByYWdtYSBvbmNlCi0KLSNpbmNsdWRlICJT
b3VyY2VDb2RlLmgiCi0jaW5jbHVkZSAiVGllcmVkTU1hcEFycmF5LmgiCi0jaW5jbHVkZSA8d3Rm
L3RleHQvQ1N0cmluZy5oPgotCi1uYW1lc3BhY2UgSlNDIHsKLQotY2xhc3MgQ29kZVByb2ZpbGUg
ewotICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwotcHVibGljOgotICAgIENvZGVQcm9maWxl
KGNvbnN0IFNvdXJjZUNvZGUmIHNvdXJjZSwgQ29kZVByb2ZpbGUqIHBhcmVudCkKLSAgICAgICAg
OiBtX2ZpbGUoU3RyaW5nKHNvdXJjZS5wcm92aWRlcigpLT51cmwoKSkudXRmOCgpKQotICAgICAg
ICAsIG1fbGluZU51bWJlcihzb3VyY2UuZmlyc3RMaW5lKCkub25lQmFzZWRJbnQoKSkKLSAgICAg
ICAgLCBtX3BhcmVudChwYXJlbnQpCi0gICAgewotICAgICAgICBpZiAocGFyZW50KQotICAgICAg
ICAgICAgcGFyZW50LT5hZGRDaGlsZChzdGQ6OnVuaXF1ZV9wdHI8Q29kZVByb2ZpbGU+KHRoaXMp
KTsKLSAgICB9Ci0KLSAgICB2b2lkIHNhbXBsZSh2b2lkKiBwYywgdm9pZCoqIGZyYW1lUG9pbnRl
cik7Ci0gICAgdm9pZCByZXBvcnQoKTsKLQotICAgIENvZGVQcm9maWxlKiBwYXJlbnQoKQotICAg
IHsKLSAgICAgICAgcmV0dXJuIG1fcGFyZW50OwotICAgIH0KLSAgICAKLSAgICB2b2lkIGFkZENo
aWxkKHN0ZDo6dW5pcXVlX3B0cjxDb2RlUHJvZmlsZT4gY2hpbGQpCi0gICAgewotICAgICAgICBt
X2NoaWxkcmVuLmFwcGVuZChXVEZNb3ZlKGNoaWxkKSk7Ci0gICAgfQotCi0gICAgZW51bSBDb2Rl
VHlwZSB7Ci0gICAgICAgIEVuZ2luZUNvZGUsCi0gICAgICAgIEdsb2JhbFRodW5rLAotICAgICAg
ICBSZWdFeHBDb2RlLAotICAgICAgICBERkdKSVQsCi0gICAgICAgIEJhc2VsaW5lT25seSwKLSAg
ICAgICAgQmFzZWxpbmVQcm9maWxlLAotICAgICAgICBCYXNlbGluZU9TUiwKLSAgICAgICAgRW5n
aW5lRnJhbWUsCi0gICAgICAgIE51bWJlck9mQ29kZVR5cGVzCi0gICAgfTsKLQotcHJpdmF0ZToK
LSAgICBzdHJ1Y3QgQ29kZVJlY29yZCB7Ci0gICAgICAgIENvZGVSZWNvcmQodm9pZCogcGMsIENv
ZGVUeXBlIHR5cGUpCi0gICAgICAgICAgICA6IHBjKHBjKQotICAgICAgICAgICAgLCB0eXBlKHR5
cGUpCi0gICAgICAgIHsKLSAgICAgICAgfQotICAgICAgICB2b2lkKiBwYzsKLSAgICAgICAgQ29k
ZVR5cGUgdHlwZTsKLSAgICB9OwotCi0gICAgQ1N0cmluZyBtX2ZpbGU7Ci0gICAgdW5zaWduZWQg
bV9saW5lTnVtYmVyOwotICAgIENvZGVQcm9maWxlKiBtX3BhcmVudDsKLSAgICBWZWN0b3I8c3Rk
Ojp1bmlxdWVfcHRyPENvZGVQcm9maWxlPj4gbV9jaGlsZHJlbjsKLSAgICBUaWVyZWRNTWFwQXJy
YXk8Q29kZVJlY29yZD4gbV9zYW1wbGVzOwotfTsKLQotfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvdG9vbHMvQ29kZVByb2ZpbGluZy5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3Rvb2xzL0NvZGVQcm9maWxpbmcuY3BwCShyZXZp
c2lvbiAyNTc4NjYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvdG9vbHMvQ29kZVByb2ZpbGlu
Zy5jcHAJKG5vbmV4aXN0ZW50KQpAQCAtMSwxNjkgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAo
QykgMjAxMi0yMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
Ci0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAq
Ci0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFO
RCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAq
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNp
bmNsdWRlICJDb2RlUHJvZmlsaW5nLmgiCi0KLSNpbmNsdWRlICJDb2RlUHJvZmlsZS5oIgotI2lu
Y2x1ZGUgIk1hY2hpbmVDb250ZXh0LmgiCi0jaW5jbHVkZSA8d3RmL01ldGFBbGxvY2F0b3IuaD4K
LQotI2lmIEhBVkUoU0lHTkFMX0gpCi0jaW5jbHVkZSA8c2lnbmFsLmg+Ci0jZW5kaWYKLQotI2lm
IEhBVkUoTUFDSElORV9DT05URVhUKQotI2luY2x1ZGUgPHN5cy90aW1lLmg+Ci0jZW5kaWYKLQot
bmFtZXNwYWNlIEpTQyB7Ci0KLXZvbGF0aWxlIENvZGVQcm9maWxlKiBDb2RlUHJvZmlsaW5nOjpz
X3Byb2ZpbGVTdGFjayA9IDA7Ci1Db2RlUHJvZmlsaW5nOjpNb2RlIENvZGVQcm9maWxpbmc6OnNf
bW9kZSA9IENvZGVQcm9maWxpbmc6OkRpc2FibGVkOwotV1RGOjpNZXRhQWxsb2NhdG9yVHJhY2tl
ciogQ29kZVByb2ZpbGluZzo6c190cmFja2VyID0gMDsKLQotSUdOT1JFX1dBUk5JTkdTX0JFR0lO
KCJtaXNzaW5nLW5vcmV0dXJuIikKLQotI2lmIEhBVkUoTUFDSElORV9DT05URVhUKQotLy8gSGVs
cGVyIGZ1bmN0aW9uIHRvIHN0YXJ0ICYgc3RvcCB0aGUgdGltZXIuCi0vLyBQcmVzZW50bHkgd2Un
cmUgdXNpbmcgdGhlIHdhbGwtY2xvY2sgdGltZXIsIHNpbmNlIHRoaXMgc2VlbXMgdG8gZ2l2ZSB0
aGUgYmVzdCByZXN1bHRzLgotc3RhdGljIHZvaWQgc2V0UHJvZmlsZVRpbWVyKHVuc2lnbmVkIHVz
ZWMpCi17Ci0gICAgaXRpbWVydmFsIHRpbWVyOwotICAgIHRpbWVyLml0X3ZhbHVlLnR2X3NlYyA9
IDA7Ci0gICAgdGltZXIuaXRfdmFsdWUudHZfdXNlYyA9IHVzZWM7Ci0gICAgdGltZXIuaXRfaW50
ZXJ2YWwudHZfc2VjID0gMDsKLSAgICB0aW1lci5pdF9pbnRlcnZhbC50dl91c2VjID0gdXNlYzsK
LSAgICBzZXRpdGltZXIoSVRJTUVSX1JFQUwsICZ0aW1lciwgMCk7Ci19Ci0jZW5kaWYKLQotSUdO
T1JFX1dBUk5JTkdTX0VORAotCi0jaWYgSEFWRShNQUNISU5FX0NPTlRFWFQpCi1zdGF0aWMgdm9p
ZCBwcm9maWxpbmdUaW1lcihpbnQsIHNpZ2luZm9fdCosIHZvaWQqIHVhcCkKLXsKLSAgICBQbGF0
Zm9ybVJlZ2lzdGVycyYgcGxhdGZvcm1SZWdpc3RlcnMgPSBXVEY6OnJlZ2lzdGVyc0Zyb21VQ29u
dGV4dChzdGF0aWNfY2FzdDx1Y29udGV4dF90Kj4odWFwKSk7Ci0gICAgaWYgKGF1dG8gaW5zdHJ1
Y3Rpb25Qb2ludGVyID0gTWFjaGluZUNvbnRleHQ6Omluc3RydWN0aW9uUG9pbnRlcihwbGF0Zm9y
bVJlZ2lzdGVycykpIHsKLSAgICAgICAgQ29kZVByb2ZpbGluZzo6c2FtcGxlKAotICAgICAgICAg
ICAgaW5zdHJ1Y3Rpb25Qb2ludGVyLT51bnRhZ2dlZEV4ZWN1dGFibGVBZGRyZXNzKCksCi0gICAg
ICAgICAgICByZWludGVycHJldF9jYXN0PHZvaWQqKj4oTWFjaGluZUNvbnRleHQ6OmZyYW1lUG9p
bnRlcihwbGF0Zm9ybVJlZ2lzdGVycykpKTsKLSAgICB9Ci19Ci0jZW5kaWYKLQotLy8gQ2FsbGJh
Y2sgdHJpZ2dlcmVkIHdoZW4gdGhlIHRpbWVyIGlzIGZpcmVkLgotdm9pZCBDb2RlUHJvZmlsaW5n
OjpzYW1wbGUodm9pZCogcGMsIHZvaWQqKiBmcmFtZVBvaW50ZXIpCi17Ci0gICAgQ29kZVByb2Zp
bGUqIHByb2ZpbGVTdGFjayA9IGNvbnN0X2Nhc3Q8Q29kZVByb2ZpbGUqPihzX3Byb2ZpbGVTdGFj
ayk7Ci0gICAgaWYgKHByb2ZpbGVTdGFjaykKLSAgICAgICAgcHJvZmlsZVN0YWNrLT5zYW1wbGUo
cGMsIGZyYW1lUG9pbnRlcik7Ci19Ci0KLXZvaWQgQ29kZVByb2ZpbGluZzo6bm90aWZ5QWxsb2Nh
dG9yKFdURjo6TWV0YUFsbG9jYXRvciogYWxsb2NhdG9yKQotewotICAgIC8vIENoZWNrIGZvciBK
U0NfQ09ERV9QUk9GSUxJTkcuCi0gICAgY29uc3QgY2hhciogY29kZVByb2ZpbGluZ01vZGUgPSBn
ZXRlbnYoIkpTQ19DT0RFX1BST0ZJTElORyIpOwotICAgIGlmICghY29kZVByb2ZpbGluZ01vZGUp
Ci0gICAgICAgIHJldHVybjsKLQotICAgIC8vIENoZWNrIGZvciBhIHZhbGlkIG1vZGUsIGN1cnJl
bnRseSAiMSIsICIyIiwgb3IgIjMiLgotICAgIGlmICghY29kZVByb2ZpbGluZ01vZGVbMF0gfHwg
Y29kZVByb2ZpbGluZ01vZGVbMV0pCi0gICAgICAgIHJldHVybjsKLSAgICBzd2l0Y2ggKCpjb2Rl
UHJvZmlsaW5nTW9kZSkgewotICAgIGNhc2UgJzEnOgotICAgICAgICBzX21vZGUgPSBFbmFibGVk
OwotICAgICAgICBicmVhazsKLSAgICBjYXNlICcyJzoKLSAgICAgICAgc19tb2RlID0gVmVyYm9z
ZTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSAnMyc6Ci0gICAgICAgIHNfbW9kZSA9IFZlcnlW
ZXJib3NlOwotICAgICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgICByZXR1cm47Ci0g
ICAgfQotCi0gICAgQVNTRVJUKGVuYWJsZWQoKSk7Ci0gICAgQVNTRVJUKCFzX3RyYWNrZXIpOwot
ICAgIHNfdHJhY2tlciA9IG5ldyBXVEY6Ok1ldGFBbGxvY2F0b3JUcmFja2VyKCk7Ci0gICAgYWxs
b2NhdG9yLT50cmFja0FsbG9jYXRpb25zKHNfdHJhY2tlcik7Ci19Ci0KLXZvaWQqIENvZGVQcm9m
aWxpbmc6OmdldE93bmVyVUlERm9yUEModm9pZCogYWRkcmVzcykKLXsKLSAgICBpZiAoIXNfdHJh
Y2tlcikKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgV1RGOjpNZXRhQWxsb2NhdG9ySGFuZGxlKiBo
YW5kbGUgPSBzX3RyYWNrZXItPmZpbmQoYWRkcmVzcyk7Ci0gICAgaWYgKCFoYW5kbGUpCi0gICAg
ICAgIHJldHVybiAwOwotICAgIHJldHVybiBoYW5kbGUtPm93bmVyVUlEKCk7Ci19Ci0KLXZvaWQg
Q29kZVByb2ZpbGluZzo6YmVnaW4oY29uc3QgU291cmNlQ29kZSYgc291cmNlKQotewotICAgIC8v
IFB1c2ggYSBuZXcgQ29kZVByb2ZpbGUgb250byB0aGUgc3RhY2sgZm9yIGVhY2ggc2NyaXB0IGVu
Y291bnRlcmVkLgotICAgIENvZGVQcm9maWxlKiBwcm9maWxlU3RhY2sgPSBjb25zdF9jYXN0PENv
ZGVQcm9maWxlKj4oc19wcm9maWxlU3RhY2spOwotICAgIGJvb2wgYWxyZWFkeVByb2ZpbGluZyA9
IHByb2ZpbGVTdGFjazsKLSAgICBzX3Byb2ZpbGVTdGFjayA9IHByb2ZpbGVTdGFjayA9IG5ldyBD
b2RlUHJvZmlsZShzb3VyY2UsIHByb2ZpbGVTdGFjayk7Ci0KLSAgICAvLyBJcyB0aGUgcHJvZmls
ZXIgYWxyZWFkeSBydW5uaW5nIC0gaWYgc28sIHRoZSB0aW1lciB3aWxsIGFscmVhZHkgYmUgc2V0
IHVwLgotICAgIGlmIChhbHJlYWR5UHJvZmlsaW5nKQotICAgICAgICByZXR1cm47Ci0KLSNpZiBI
QVZFKE1BQ0hJTkVfQ09OVEVYVCkKLSAgICAvLyBSZWdzaXRlciBhIHNpZ25hbCBoYW5kbGVyICYg
aXRpbWVyLgotICAgIHN0cnVjdCBzaWdhY3Rpb24gYWN0aW9uOwotICAgIGFjdGlvbi5zYV9zaWdh
Y3Rpb24gPSByZWludGVycHJldF9jYXN0PHZvaWQgKCopKGludCwgc2lnaW5mb190ICosIHZvaWQg
Kik+KHByb2ZpbGluZ1RpbWVyKTsKLSAgICBzaWdmaWxsc2V0KCZhY3Rpb24uc2FfbWFzayk7Ci0g
ICAgYWN0aW9uLnNhX2ZsYWdzID0gU0FfU0lHSU5GTzsKLSAgICBzaWdhY3Rpb24oU0lHQUxSTSwg
JmFjdGlvbiwgMCk7Ci0gICAgc2V0UHJvZmlsZVRpbWVyKDEwMCk7Ci0jZW5kaWYKLX0KLQotdm9p
ZCBDb2RlUHJvZmlsaW5nOjplbmQoKQotewotICAgIC8vIFBvcCB0aGUgY3VycmVudCBwcm9maWxl
ciBvZmYgdGhlIHN0YWNrLgotICAgIENvZGVQcm9maWxlKiBjdXJyZW50ID0gY29uc3RfY2FzdDxD
b2RlUHJvZmlsZSo+KHNfcHJvZmlsZVN0YWNrKTsKLSAgICBBU1NFUlQoY3VycmVudCk7Ci0gICAg
c19wcm9maWxlU3RhY2sgPSBjdXJyZW50LT5wYXJlbnQoKTsKLQotICAgIC8vIElzIHRoaXMgdGhl
IG91dGVybW9zdCBzY3JpcHQgYmVpbmcgcHJvZmlsZWQ/IC0gaWYgbm90LCBqdXN0IHJldHVybi4K
LSAgICAvLyBXZSBwZXJmb3JtIGFsbCBvdXRwdXQgb2YgcHJvZmlsZXMgcmVjdXJzaXZlbHkgZnJv
bSB0aGUgb3V0ZXJtb3N0IHNjcmlwdCwKLSAgICAvLyB0byBtaW5pbWl6ZSBwcm9maWxpbmcgb3Zl
cmhlYWQgZnJvbSBza2V3aW5nIHJlc3VsdHMuCi0gICAgaWYgKHNfcHJvZmlsZVN0YWNrKQotICAg
ICAgICByZXR1cm47Ci0KLSNpZiBIQVZFKE1BQ0hJTkVfQ09OVEVYVCkKLSAgICAvLyBTdG9wIHBy
b2ZpbGluZwotICAgIHNldFByb2ZpbGVUaW1lcigwKTsKLSNlbmRpZgotCi0gICAgY3VycmVudC0+
cmVwb3J0KCk7Ci0gICAgZGVsZXRlIGN1cnJlbnQ7Ci19Ci0KLX0KSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS90b29scy9Db2RlUHJvZmlsaW5nLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL3Rvb2xzL0NvZGVQcm9maWxpbmcuaAkocmV2aXNpb24gMjU3ODY2KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL3Rvb2xzL0NvZGVQcm9maWxpbmcuaAkobm9uZXhpc3RlbnQp
CkBAIC0xLDgxICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBh
cmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
Ci0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4g
Ci0gKi8KLQotI3ByYWdtYSBvbmNlCi0KLW5hbWVzcGFjZSBXVEYgewotCi1jbGFzcyBNZXRhQWxs
b2NhdG9yOwotY2xhc3MgTWV0YUFsbG9jYXRvclRyYWNrZXI7Ci0KLX0KLQotbmFtZXNwYWNlIEpT
QyB7Ci0KLWNsYXNzIENvZGVQcm9maWxlOwotY2xhc3MgU291cmNlQ29kZTsKLQotY2xhc3MgQ29k
ZVByb2ZpbGluZyB7Ci0gICAgZW51bSBNb2RlIHsKLSAgICAgICAgRGlzYWJsZWQsCi0gICAgICAg
IEVuYWJsZWQsCi0gICAgICAgIFZlcmJvc2UsCi0gICAgICAgIFZlcnlWZXJib3NlCi0gICAgfTsK
LQotcHVibGljOgotICAgIENvZGVQcm9maWxpbmcoY29uc3QgU291cmNlQ29kZSYgc291cmNlKQot
ICAgICAgICA6IG1fYWN0aXZlKGVuYWJsZWQoKSkKLSAgICB7Ci0gICAgICAgIGlmIChtX2FjdGl2
ZSkKLSAgICAgICAgICAgIGJlZ2luKHNvdXJjZSk7Ci0gICAgfQotCi0gICAgfkNvZGVQcm9maWxp
bmcoKQotICAgIHsKLSAgICAgICAgaWYgKG1fYWN0aXZlKQotICAgICAgICAgICAgZW5kKCk7Ci0g
ICAgfQotCi0gICAgc3RhdGljIGJvb2wgZW5hYmxlZCgpIHsgcmV0dXJuIHNfbW9kZSAhPSBEaXNh
YmxlZDsgfQotICAgIHN0YXRpYyBib29sIGJlVmVyYm9zZSgpIHsgcmV0dXJuIHNfbW9kZSA+PSBW
ZXJib3NlOyB9Ci0gICAgc3RhdGljIGJvb2wgYmVWZXJ5VmVyYm9zZSgpIHsgcmV0dXJuIHNfbW9k
ZSA+PSBWZXJ5VmVyYm9zZTsgfQotCi0gICAgc3RhdGljIHZvaWQgbm90aWZ5QWxsb2NhdG9yKFdU
Rjo6TWV0YUFsbG9jYXRvciopOwotICAgIHN0YXRpYyB2b2lkKiBnZXRPd25lclVJREZvclBDKHZv
aWQqKTsKLSAgICBzdGF0aWMgdm9pZCBzYW1wbGUodm9pZCogcGMsIHZvaWQqKiBmcmFtZVBvaW50
ZXIpOwotCi1wcml2YXRlOgotICAgIHZvaWQgYmVnaW4oY29uc3QgU291cmNlQ29kZSYpOwotICAg
IHZvaWQgZW5kKCk7Ci0KLSAgICBib29sIG1fYWN0aXZlOwotCi0gICAgc3RhdGljIE1vZGUgc19t
b2RlOwotICAgIHN0YXRpYyBXVEY6Ok1ldGFBbGxvY2F0b3JUcmFja2VyKiBzX3RyYWNrZXI7Ci0g
ICAgc3RhdGljIHZvbGF0aWxlIENvZGVQcm9maWxlKiBzX3Byb2ZpbGVTdGFjazsKLX07Ci0KLX0g
Ly8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL1dURi93dGYvTWV0YUFsbG9jYXRvci5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvTWV0YUFsbG9jYXRvci5jcHAJKHJldmlzaW9u
IDI1Nzg2NikKKysrIFNvdXJjZS9XVEYvd3RmL01ldGFBbGxvY2F0b3IuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC01NCw0NSArNTQsNDUgQEAgTWV0YUFsbG9jYXRvcjo6fk1ldGFBbGxvY2F0b3IoKQog
I2VuZGlmCiB9CiAKLXZvaWQgTWV0YUFsbG9jYXRvclRyYWNrZXI6Om5vdGlmeShNZXRhQWxsb2Nh
dG9ySGFuZGxlKiBoYW5kbGUpCit2b2lkIE1ldGFBbGxvY2F0b3JUcmFja2VyOjpub3RpZnkoTWV0
YUFsbG9jYXRvckhhbmRsZSYgaGFuZGxlKQogewotICAgIG1fYWxsb2NhdGlvbnMuaW5zZXJ0KGhh
bmRsZSk7CisgICAgbV9hbGxvY2F0aW9ucy5pbnNlcnQoJmhhbmRsZSk7CiB9CiAKLXZvaWQgTWV0
YUFsbG9jYXRvclRyYWNrZXI6OnJlbGVhc2UoTWV0YUFsbG9jYXRvckhhbmRsZSogaGFuZGxlKQor
dm9pZCBNZXRhQWxsb2NhdG9yVHJhY2tlcjo6cmVsZWFzZShNZXRhQWxsb2NhdG9ySGFuZGxlJiBo
YW5kbGUpCiB7Ci0gICAgbV9hbGxvY2F0aW9ucy5yZW1vdmUoaGFuZGxlKTsKKyAgICBtX2FsbG9j
YXRpb25zLnJlbW92ZSgmaGFuZGxlKTsKIH0KIAotQUxXQVlTX0lOTElORSB2b2lkIE1ldGFBbGxv
Y2F0b3I6OnJlbGVhc2UoTWV0YUFsbG9jYXRvckhhbmRsZSogaGFuZGxlKQorQUxXQVlTX0lOTElO
RSB2b2lkIE1ldGFBbGxvY2F0b3I6OnJlbGVhc2UoTWV0YUFsbG9jYXRvckhhbmRsZSYgaGFuZGxl
KQogewogICAgIExvY2tIb2xkZXIgbG9ja2VyKCZtX2xvY2spOwotICAgIGlmIChoYW5kbGUtPnNp
emVJbkJ5dGVzKCkpIHsKLSAgICAgICAgdm9pZCogc3RhcnQgPSBoYW5kbGUtPnN0YXJ0KCkudW50
YWdnZWRQdHIoKTsKLSAgICAgICAgc2l6ZV90IHNpemVJbkJ5dGVzID0gaGFuZGxlLT5zaXplSW5C
eXRlcygpOworICAgIGlmIChoYW5kbGUuc2l6ZUluQnl0ZXMoKSkgeworICAgICAgICB2b2lkKiBz
dGFydCA9IGhhbmRsZS5zdGFydCgpLnVudGFnZ2VkUHRyKCk7CisgICAgICAgIHNpemVfdCBzaXpl
SW5CeXRlcyA9IGhhbmRsZS5zaXplSW5CeXRlcygpOwogICAgICAgICBkZWNyZW1lbnRQYWdlT2Nj
dXBhbmN5KHN0YXJ0LCBzaXplSW5CeXRlcyk7CiAgICAgICAgIGFkZEZyZWVTcGFjZUZyb21SZWxl
YXNlZEhhbmRsZShGcmVlU3BhY2VQdHIoc3RhcnQpLCBzaXplSW5CeXRlcyk7CiAgICAgfQogCi0g
ICAgaWYgKFVOTElLRUxZKCEhbV90cmFja2VyKSkKLSAgICAgICAgbV90cmFja2VyLT5yZWxlYXNl
KGhhbmRsZSk7CisgICAgaWYgKGhhbmRsZS5uZWVkc1RvQmVOb3RpZmllZE9mUmVsZWFzZSgpKQor
ICAgICAgICBub3RpZnlCZWZvcmVSZWxlYXNlKGhhbmRsZSk7CisKKyAgICBtX3RyYWNrZXIucmVs
ZWFzZShoYW5kbGUpOwogfQogCi1NZXRhQWxsb2NhdG9ySGFuZGxlOjpNZXRhQWxsb2NhdG9ySGFu
ZGxlKE1ldGFBbGxvY2F0b3IqIGFsbG9jYXRvciwgdm9pZCogc3RhcnQsIHNpemVfdCBzaXplSW5C
eXRlcywgdm9pZCogb3duZXJVSUQpCi0gICAgOiBtX2FsbG9jYXRvcihhbGxvY2F0b3IpCitNZXRh
QWxsb2NhdG9ySGFuZGxlOjpNZXRhQWxsb2NhdG9ySGFuZGxlKE1ldGFBbGxvY2F0b3ImIGFsbG9j
YXRvciwgdm9pZCogc3RhcnQsIHNpemVfdCBzaXplSW5CeXRlcykKKyAgICA6IG1fYWxsb2NhdG9y
KCZhbGxvY2F0b3IpCiAgICAgLCBtX3N0YXJ0KHN0YXJ0KQogICAgICwgbV9lbmQocmVpbnRlcnBy
ZXRfY2FzdDxjaGFyKj4oc3RhcnQpICsgc2l6ZUluQnl0ZXMpCi0gICAgLCBtX293bmVyVUlEKG93
bmVyVUlEKQogewotICAgIEFTU0VSVChhbGxvY2F0b3IpOworICAgIEFTU0VSVCghKGJpdHdpc2Vf
Y2FzdDx1aW50cHRyX3Q+KG1fYWxsb2NhdG9yKSAmIG5lZWRzVG9CZU5vdGlmaWVkT2ZSZWxlYXNl
Qml0KSk7CiAgICAgQVNTRVJUKHN0YXJ0KTsKICAgICBBU1NFUlQoc2l6ZUluQnl0ZXMpOwogfQog
CiBNZXRhQWxsb2NhdG9ySGFuZGxlOjp+TWV0YUFsbG9jYXRvckhhbmRsZSgpCiB7Ci0gICAgQVNT
RVJUKG1fYWxsb2NhdG9yKTsKLSAgICBtX2FsbG9jYXRvci0+cmVsZWFzZSh0aGlzKTsKKyAgICBh
bGxvY2F0b3IoKS5yZWxlYXNlKCp0aGlzKTsKIH0KIAogdm9pZCBNZXRhQWxsb2NhdG9ySGFuZGxl
OjpzaHJpbmsoc2l6ZV90IG5ld1NpemVJbkJ5dGVzKQpAQCAtMTAwLDkgKzEwMCwxMCBAQCB2b2lk
IE1ldGFBbGxvY2F0b3JIYW5kbGU6OnNocmluayhzaXplX3QgCiAgICAgc2l6ZV90IHNpemVJbkJ5
dGVzID0gdGhpcy0+c2l6ZUluQnl0ZXMoKTsKICAgICBBU1NFUlQobmV3U2l6ZUluQnl0ZXMgPD0g
c2l6ZUluQnl0ZXMpOwogCi0gICAgTG9ja0hvbGRlciBsb2NrZXIoJm1fYWxsb2NhdG9yLT5tX2xv
Y2spOworICAgIE1ldGFBbGxvY2F0b3ImIGFsbG9jYXRvciA9IHRoaXMtPmFsbG9jYXRvcigpOwor
ICAgIExvY2tIb2xkZXIgbG9ja2VyKCZhbGxvY2F0b3IubV9sb2NrKTsKIAotICAgIG5ld1NpemVJ
bkJ5dGVzID0gbV9hbGxvY2F0b3ItPnJvdW5kVXAobmV3U2l6ZUluQnl0ZXMpOworICAgIG5ld1Np
emVJbkJ5dGVzID0gYWxsb2NhdG9yLnJvdW5kVXAobmV3U2l6ZUluQnl0ZXMpOwogICAgIAogICAg
IEFTU0VSVChuZXdTaXplSW5CeXRlcyA8PSBzaXplSW5CeXRlcyk7CiAKQEAgLTExMywxMSArMTE0
LDExIEBAIHZvaWQgTWV0YUFsbG9jYXRvckhhbmRsZTo6c2hyaW5rKHNpemVfdCAKICAgICBzaXpl
X3QgZnJlZVNpemUgPSBzaXplSW5CeXRlcyAtIG5ld1NpemVJbkJ5dGVzOwogICAgIHVpbnRwdHJf
dCBmcmVlRW5kID0gZnJlZVN0YXJ0ICsgZnJlZVNpemU7CiAgICAgCi0gICAgdWludHB0cl90IGZp
cnN0Q29tcGxldGVseUZyZWVQYWdlID0gKGZyZWVTdGFydCArIG1fYWxsb2NhdG9yLT5tX3BhZ2VT
aXplIC0gMSkgJiB+KG1fYWxsb2NhdG9yLT5tX3BhZ2VTaXplIC0gMSk7CisgICAgdWludHB0cl90
IGZpcnN0Q29tcGxldGVseUZyZWVQYWdlID0gKGZyZWVTdGFydCArIGFsbG9jYXRvci5tX3BhZ2VT
aXplIC0gMSkgJiB+KGFsbG9jYXRvci5tX3BhZ2VTaXplIC0gMSk7CiAgICAgaWYgKGZpcnN0Q29t
cGxldGVseUZyZWVQYWdlIDwgZnJlZUVuZCkKLSAgICAgICAgbV9hbGxvY2F0b3ItPmRlY3JlbWVu
dFBhZ2VPY2N1cGFuY3kocmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oZmlyc3RDb21wbGV0ZWx5RnJl
ZVBhZ2UpLCBmcmVlU2l6ZSAtIChmaXJzdENvbXBsZXRlbHlGcmVlUGFnZSAtIGZyZWVTdGFydCkp
OworICAgICAgICBhbGxvY2F0b3IuZGVjcmVtZW50UGFnZU9jY3VwYW5jeShyZWludGVycHJldF9j
YXN0PHZvaWQqPihmaXJzdENvbXBsZXRlbHlGcmVlUGFnZSksIGZyZWVTaXplIC0gKGZpcnN0Q29t
cGxldGVseUZyZWVQYWdlIC0gZnJlZVN0YXJ0KSk7CiAKLSAgICBtX2FsbG9jYXRvci0+YWRkRnJl
ZVNwYWNlRnJvbVJlbGVhc2VkSGFuZGxlKE1ldGFBbGxvY2F0b3I6OkZyZWVTcGFjZVB0cihmcmVl
U3RhcnQpLCBmcmVlU2l6ZSk7CisgICAgYWxsb2NhdG9yLmFkZEZyZWVTcGFjZUZyb21SZWxlYXNl
ZEhhbmRsZShNZXRhQWxsb2NhdG9yOjpGcmVlU3BhY2VQdHIoZnJlZVN0YXJ0KSwgZnJlZVNpemUp
OwogCiAgICAgbV9lbmQgPSBtX3N0YXJ0ICsgbmV3U2l6ZUluQnl0ZXM7CiB9CkBAIC0xMjcsMTMg
KzEyOCwxMyBAQCB2b2lkIE1ldGFBbGxvY2F0b3JIYW5kbGU6OmR1bXAoUHJpbnRTdHJlCiAgICAg
b3V0LnByaW50KFJhd1BvaW50ZXIoc3RhcnQoKS51bnRhZ2dlZFB0cigpKSwgIi4uLiIsIFJhd1Bv
aW50ZXIoZW5kKCkudW50YWdnZWRQdHIoKSkpOwogfQogCi1NZXRhQWxsb2NhdG9yOjpNZXRhQWxs
b2NhdG9yKHNpemVfdCBhbGxvY2F0aW9uR3JhbnVsZSwgc2l6ZV90IHBhZ2VTaXplKQorTWV0YUFs
bG9jYXRvcjo6TWV0YUFsbG9jYXRvcihMb2NrJiBsb2NrLCBzaXplX3QgYWxsb2NhdGlvbkdyYW51
bGUsIHNpemVfdCBwYWdlU2l6ZSkKICAgICA6IG1fYWxsb2NhdGlvbkdyYW51bGUoYWxsb2NhdGlv
bkdyYW51bGUpCiAgICAgLCBtX3BhZ2VTaXplKHBhZ2VTaXplKQogICAgICwgbV9ieXRlc0FsbG9j
YXRlZCgwKQogICAgICwgbV9ieXRlc1Jlc2VydmVkKDApCiAgICAgLCBtX2J5dGVzQ29tbWl0dGVk
KDApCi0gICAgLCBtX3RyYWNrZXIoMCkKKyAgICAsIG1fbG9jayhsb2NrKQogI2lmbmRlZiBOREVC
VUcKICAgICAsIG1fbWFsbG9jQmFsYW5jZSgwKQogI2VuZGlmCkBAIC0xNTcsNyArMTU4LDcgQEAg
TWV0YUFsbG9jYXRvcjo6TWV0YUFsbG9jYXRvcihzaXplX3QgYWxsbwogICAgIEFTU0VSVChzdGF0
aWNfY2FzdDxzaXplX3Q+KDEpIDw8IG1fbG9nQWxsb2NhdGlvbkdyYW51bGUgPT0gbV9hbGxvY2F0
aW9uR3JhbnVsZSk7CiB9CiAKLVJlZlB0cjxNZXRhQWxsb2NhdG9ySGFuZGxlPiBNZXRhQWxsb2Nh
dG9yOjphbGxvY2F0ZShzaXplX3Qgc2l6ZUluQnl0ZXMsIHZvaWQqIG93bmVyVUlEKQorUmVmUHRy
PE1ldGFBbGxvY2F0b3JIYW5kbGU+IE1ldGFBbGxvY2F0b3I6OmFsbG9jYXRlKHNpemVfdCBzaXpl
SW5CeXRlcykKIHsKICAgICBMb2NrSG9sZGVyIGxvY2tlcigmbV9sb2NrKTsKIApAQCAtMTk1LDEw
ICsxOTYsOSBAQCBSZWZQdHI8TWV0YUFsbG9jYXRvckhhbmRsZT4gTWV0YUFsbG9jYXRvCiAgICAg
bV9udW1BbGxvY2F0aW9ucysrOwogI2VuZGlmCiAKLSAgICBhdXRvIGhhbmRsZSA9IGFkb3B0UmVm
KCpuZXcgTWV0YUFsbG9jYXRvckhhbmRsZSh0aGlzLCBzdGFydC51bnRhZ2dlZFB0cigpLCBzaXpl
SW5CeXRlcywgb3duZXJVSUQpKTsKKyAgICBhdXRvIGhhbmRsZSA9IGFkb3B0UmVmKCpuZXcgTWV0
YUFsbG9jYXRvckhhbmRsZSgqdGhpcywgc3RhcnQudW50YWdnZWRQdHIoKSwgc2l6ZUluQnl0ZXMp
KTsKIAotICAgIGlmIChVTkxJS0VMWSghIW1fdHJhY2tlcikpCi0gICAgICAgIG1fdHJhY2tlci0+
bm90aWZ5KGhhbmRsZS5wdHIoKSk7CisgICAgbV90cmFja2VyLm5vdGlmeSgqaGFuZGxlLnB0cigp
KTsKIAogICAgIHJldHVybiBoYW5kbGU7CiB9CkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9NZXRhQWxs
b2NhdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvTWV0YUFsbG9jYXRvci5oCShy
ZXZpc2lvbiAyNTc4NjYpCisrKyBTb3VyY2UvV1RGL3d0Zi9NZXRhQWxsb2NhdG9yLmgJKHdvcmtp
bmcgY29weSkKQEAgLTQ0LDE1ICs0NCwxNSBAQCBuYW1lc3BhY2UgV1RGIHsKIGNsYXNzIE1ldGFB
bGxvY2F0b3JUcmFja2VyIHsKICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKIHB1YmxpYzoK
LSAgICB2b2lkIG5vdGlmeShNZXRhQWxsb2NhdG9ySGFuZGxlKik7Ci0gICAgdm9pZCByZWxlYXNl
KE1ldGFBbGxvY2F0b3JIYW5kbGUqKTsKKyAgICB2b2lkIG5vdGlmeShNZXRhQWxsb2NhdG9ySGFu
ZGxlJik7CisgICAgdm9pZCByZWxlYXNlKE1ldGFBbGxvY2F0b3JIYW5kbGUmKTsKIAogICAgIE1l
dGFBbGxvY2F0b3JIYW5kbGUqIGZpbmQodm9pZCogYWRkcmVzcykKICAgICB7CiAgICAgICAgIE1l
dGFBbGxvY2F0b3JIYW5kbGUqIGhhbmRsZSA9IG1fYWxsb2NhdGlvbnMuZmluZEdyZWF0ZXN0TGVz
c1RoYW5PckVxdWFsKGFkZHJlc3MpOwotICAgICAgICBpZiAoaGFuZGxlICYmIGFkZHJlc3MgPCBo
YW5kbGUtPmVuZCgpLnVudGFnZ2VkUHRyKCkpCisgICAgICAgIGlmIChoYW5kbGUgJiYgaGFuZGxl
LT5zdGFydCgpLnVudGFnZ2VkUHRyKCkgPD0gYWRkcmVzcyAmJiBhZGRyZXNzIDwgaGFuZGxlLT5l
bmQoKS51bnRhZ2dlZFB0cigpKQogICAgICAgICAgICAgcmV0dXJuIGhhbmRsZTsKLSAgICAgICAg
cmV0dXJuIDA7CisgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIH0KIAogICAgIFJlZEJsYWNr
VHJlZTxNZXRhQWxsb2NhdG9ySGFuZGxlLCB2b2lkKj4gbV9hbGxvY2F0aW9uczsKQEAgLTY0LDE3
ICs2NCwxMiBAQCBjbGFzcyBNZXRhQWxsb2NhdG9yIHsKIHB1YmxpYzoKICAgICB1c2luZyBGcmVl
U3BhY2VQdHIgPSBNZXRhQWxsb2NhdG9yUHRyPEZyZWVTcGFjZVB0clRhZz47CiAKLSAgICBXVEZf
RVhQT1JUX1BSSVZBVEUgTWV0YUFsbG9jYXRvcihzaXplX3QgYWxsb2NhdGlvbkdyYW51bGUsIHNp
emVfdCBwYWdlU2l6ZSA9IFdURjo6cGFnZVNpemUoKSk7CisgICAgV1RGX0VYUE9SVF9QUklWQVRF
IE1ldGFBbGxvY2F0b3IoTG9jayYsIHNpemVfdCBhbGxvY2F0aW9uR3JhbnVsZSwgc2l6ZV90IHBh
Z2VTaXplID0gV1RGOjpwYWdlU2l6ZSgpKTsKICAgICAKICAgICBXVEZfRVhQT1JUX1BSSVZBVEUg
dmlydHVhbCB+TWV0YUFsbG9jYXRvcigpOwogICAgIAotICAgIFdURl9FWFBPUlRfUFJJVkFURSBS
ZWZQdHI8TWV0YUFsbG9jYXRvckhhbmRsZT4gYWxsb2NhdGUoc2l6ZV90IHNpemVJbkJ5dGVzLCB2
b2lkKiBvd25lclVJRCk7CisgICAgV1RGX0VYUE9SVF9QUklWQVRFIFJlZlB0cjxNZXRhQWxsb2Nh
dG9ySGFuZGxlPiBhbGxvY2F0ZShzaXplX3Qgc2l6ZUluQnl0ZXMpOwogCi0gICAgdm9pZCB0cmFj
a0FsbG9jYXRpb25zKE1ldGFBbGxvY2F0b3JUcmFja2VyKiB0cmFja2VyKQotICAgIHsKLSAgICAg
ICAgbV90cmFja2VyID0gdHJhY2tlcjsKLSAgICB9Ci0gICAgCiAgICAgLy8gTm9uLWF0b21pYyBt
ZXRob2RzIGZvciBnZXR0aW5nIGFsbG9jYXRvciBzdGF0aXN0aWNzLgogICAgIHNpemVfdCBieXRl
c0FsbG9jYXRlZCgpIHsgcmV0dXJuIG1fYnl0ZXNBbGxvY2F0ZWQ7IH0KICAgICBzaXplX3QgYnl0
ZXNSZXNlcnZlZCgpIHsgcmV0dXJuIG1fYnl0ZXNSZXNlcnZlZDsgfQpAQCAtOTgsNyArOTMsNiBA
QCBwdWJsaWM6CiAgICAgLy8gYnVpbGRzLgogICAgIFdURl9FWFBPUlRfUFJJVkFURSBzaXplX3Qg
ZGVidWdGcmVlU3BhY2VTaXplKCk7CiAKLSAgICBMb2NrJiBnZXRMb2NrKCkgeyByZXR1cm4gbV9s
b2NrOyB9CiAgICAgV1RGX0VYUE9SVF9QUklWQVRFIGJvb2wgaXNJbkFsbG9jYXRlZE1lbW9yeShj
b25zdCBBYnN0cmFjdExvY2tlciYsIHZvaWQqIGFkZHJlc3MpOwogICAgIAogI2lmIEVOQUJMRShN
RVRBX0FMTE9DQVRPUl9QUk9GSUxFKQpAQCAtMTA3LDYgKzEwMSwxMSBAQCBwdWJsaWM6CiAgICAg
dm9pZCBkdW1wUHJvZmlsZSgpIHsgfQogI2VuZGlmCiAKKyAgICBNZXRhQWxsb2NhdG9ySGFuZGxl
KiBmaW5kKHZvaWQqIGFkZHJlc3MpCisgICAgeworICAgICAgICByZXR1cm4gbV90cmFja2VyLmZp
bmQoYWRkcmVzcyk7CisgICAgfQorCiBwcm90ZWN0ZWQ6CiAgICAgCiAgICAgLy8gQWxsb2NhdGUg
bmV3IHZpcnR1YWwgc3BhY2UsIGJ1dCBkb24ndCBjb21taXQuIFRoaXMgbWF5IHJldHVybiBtb3Jl
CkBAIC0xMTgsNiArMTE3LDggQEAgcHJvdGVjdGVkOgogICAgIAogICAgIC8vIFVuY29tbWl0IGEg
cGFnZS4KICAgICB2aXJ0dWFsIHZvaWQgbm90aWZ5UGFnZUlzRnJlZSh2b2lkKiBwYWdlLCBzaXpl
X3QpID0gMDsKKworICAgIHZpcnR1YWwgdm9pZCBub3RpZnlCZWZvcmVSZWxlYXNlKE1ldGFBbGxv
Y2F0b3JIYW5kbGUmKSB7IH0KICAgICAKICAgICAvLyBOT1RFOiBub25lIG9mIHRoZSBhYm92ZSBt
ZXRob2RzIGFyZSBjYWxsZWQgZHVyaW5nIGFsbG9jYXRvcgogICAgIC8vIGRlc3RydWN0aW9uLCBp
biBwYXJ0IGJlY2F1c2UgYSBNZXRhQWxsb2NhdG9yIGNhbm5vdCBkaWUgc28gbG9uZwpAQCAtMTUy
LDcgKzE1Myw3IEBAIHByaXZhdGU6CiAgICAgdHlwZWRlZiBSZWRCbGFja1RyZWU8RnJlZVNwYWNl
Tm9kZSwgc2l6ZV90PiBUcmVlOwogCiAgICAgLy8gUmVsZWFzZSBhIE1ldGFBbGxvY2F0b3JIYW5k
bGUuCi0gICAgdm9pZCByZWxlYXNlKE1ldGFBbGxvY2F0b3JIYW5kbGUqKTsKKyAgICB2b2lkIHJl
bGVhc2UoTWV0YUFsbG9jYXRvckhhbmRsZSYpOwogICAgIAogICAgIC8vIFJlbW92ZSBmcmVlIHNw
YWNlIGZyb20gdGhlIGFsbG9jYXRvci4gVGhpcyBpcyBlZmZlY3RpdmVseQogICAgIC8vIHRoZSBh
bGxvY2F0ZSgpIGZ1bmN0aW9uLCBleGNlcHQgdGhhdCBpdCBkb2VzIG5vdCBtYXJrIHRoZQpAQCAt
MTkzLDkgKzE5NCw5IEBAIHByaXZhdGU6CiAgICAgc2l6ZV90IG1fYnl0ZXNSZXNlcnZlZDsKICAg
ICBzaXplX3QgbV9ieXRlc0NvbW1pdHRlZDsKICAgICAKLSAgICBMb2NrIG1fbG9jazsKKyAgICBM
b2NrJiBtX2xvY2s7CiAKLSAgICBNZXRhQWxsb2NhdG9yVHJhY2tlciogbV90cmFja2VyOworICAg
IE1ldGFBbGxvY2F0b3JUcmFja2VyIG1fdHJhY2tlcjsKIAogI2lmbmRlZiBOREVCVUcKICAgICBz
aXplX3QgbV9tYWxsb2NCYWxhbmNlOwpJbmRleDogU291cmNlL1dURi93dGYvTWV0YUFsbG9jYXRv
ckhhbmRsZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL01ldGFBbGxvY2F0b3JIYW5k
bGUuaAkocmV2aXNpb24gMjU3ODY2KQorKysgU291cmNlL1dURi93dGYvTWV0YUFsbG9jYXRvckhh
bmRsZS5oCSh3b3JraW5nIGNvcHkpCkBAIC00Miw3ICs0Miw3IEBAIERFQ0xBUkVfQUxMT0NBVE9S
X1dJVEhfSEVBUF9JREVOVElGSUVSKE0KIGNsYXNzIE1ldGFBbGxvY2F0b3JIYW5kbGUgOiBwdWJs
aWMgVGhyZWFkU2FmZVJlZkNvdW50ZWQ8TWV0YUFsbG9jYXRvckhhbmRsZT4sIHB1YmxpYyBSZWRC
bGFja1RyZWU8TWV0YUFsbG9jYXRvckhhbmRsZSwgdm9pZCo+OjpOb2RlIHsKICAgICBXVEZfTUFL
RV9GQVNUX0FMTE9DQVRFRF9XSVRIX0hFQVBfSURFTlRJRklFUihNZXRhQWxsb2NhdG9ySGFuZGxl
KTsKIHByaXZhdGU6Ci0gICAgTWV0YUFsbG9jYXRvckhhbmRsZShNZXRhQWxsb2NhdG9yKiwgdm9p
ZCogc3RhcnQsIHNpemVfdCBzaXplSW5CeXRlcywgdm9pZCogb3duZXJVSUQpOworICAgIE1ldGFB
bGxvY2F0b3JIYW5kbGUoTWV0YUFsbG9jYXRvciYsIHZvaWQqIHN0YXJ0LCBzaXplX3Qgc2l6ZUlu
Qnl0ZXMpOwogCiBwdWJsaWM6CiAgICAgdXNpbmcgTWVtb3J5UHRyID0gTWV0YUFsbG9jYXRvclB0
cjxIYW5kbGVNZW1vcnlQdHJUYWc+OwpAQCAtODYsMjAgKzg2LDIwIEBAIHB1YmxpYzoKICAgICAg
ICAgCiAgICAgV1RGX0VYUE9SVF9QUklWQVRFIHZvaWQgc2hyaW5rKHNpemVfdCBuZXdTaXplSW5C
eXRlcyk7CiAgICAgCi0gICAgYm9vbCBpc01hbmFnZWQoKQorICAgIE1ldGFBbGxvY2F0b3ImIGFs
bG9jYXRvcigpCiAgICAgewotICAgICAgICByZXR1cm4gISFtX2FsbG9jYXRvcjsKKyAgICAgICAg
TWV0YUFsbG9jYXRvciogdW50YWdnZWRQdHIgPSBiaXR3aXNlX2Nhc3Q8TWV0YUFsbG9jYXRvcio+
KGJpdHdpc2VfY2FzdDx1aW50cHRyX3Q+KG1fYWxsb2NhdG9yKSAmIH5uZWVkc1RvQmVOb3RpZmll
ZEJlZm9yZVJlbGVhc2VCaXQpOworICAgICAgICByZXR1cm4gKnVudGFnZ2VkUHRyOwogICAgIH0K
LSAgICAgICAgCi0gICAgTWV0YUFsbG9jYXRvciogYWxsb2NhdG9yKCkKKworICAgIHZvaWQgc2V0
TmVlZHNUb0JlTm90aWZpZWRCZWZvcmVSZWxlYXNlKCkKICAgICB7Ci0gICAgICAgIEFTU0VSVCht
X2FsbG9jYXRvcik7Ci0gICAgICAgIHJldHVybiBtX2FsbG9jYXRvcjsKKyAgICAgICAgbV9hbGxv
Y2F0b3IgPSBiaXR3aXNlX2Nhc3Q8TWV0YUFsbG9jYXRvcio+KGJpdHdpc2VfY2FzdDx1aW50cHRy
X3Q+KG1fYWxsb2NhdG9yKSB8IG5lZWRzVG9CZU5vdGlmaWVkQmVmb3JlUmVsZWFzZUJpdCk7CiAg
ICAgfQogCi0gICAgdm9pZCogb3duZXJVSUQoKQorICAgIGJvb2wgbmVlZHNUb0JlTm90aWZpZWRP
ZlJlbGVhc2UoKQogICAgIHsKLSAgICAgICAgcmV0dXJuIG1fb3duZXJVSUQ7CisgICAgICAgIHJl
dHVybiAhIShiaXR3aXNlX2Nhc3Q8dWludHB0cl90PihtX2FsbG9jYXRvcikgJiBuZWVkc1RvQmVO
b3RpZmllZEJlZm9yZVJlbGVhc2VCaXQpOwogICAgIH0KIAogICAgIHZvaWQqIGtleSgpCkBAIC0x
MTAsMTIgKzExMCwxMiBAQCBwdWJsaWM6CiAgICAgV1RGX0VYUE9SVF9QUklWQVRFIHZvaWQgZHVt
cChQcmludFN0cmVhbSYgb3V0KSBjb25zdDsKICAgICAKIHByaXZhdGU6CisgICAgc3RhdGljIGNv
bnN0ZXhwciB1aW50cHRyX3QgbmVlZHNUb0JlTm90aWZpZWRCZWZvcmVSZWxlYXNlQml0ID0gMTsK
ICAgICBmcmllbmQgY2xhc3MgTWV0YUFsbG9jYXRvcjsKICAgICAKICAgICBNZXRhQWxsb2NhdG9y
KiBtX2FsbG9jYXRvcjsKICAgICBNZW1vcnlQdHIgbV9zdGFydDsKICAgICBNZW1vcnlQdHIgbV9l
bmQ7Ci0gICAgdm9pZCogbV9vd25lclVJRDsKIH07CiAKIH0KSW5kZXg6IFNvdXJjZS9XVEYvd3Rm
L1N0ZExpYkV4dHJhcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL1N0ZExpYkV4dHJh
cy5oCShyZXZpc2lvbiAyNTc4NjYpCisrKyBTb3VyY2UvV1RGL3d0Zi9TdGRMaWJFeHRyYXMuaAko
d29ya2luZyBjb3B5KQpAQCAtNDg5LDYgKzQ4OSwxOSBAQCBBTFdBWVNfSU5MSU5FIGRlY2x0eXBl
KGF1dG8pIG1ha2VVbmlxdWVXCiAgICAgcmV0dXJuIHN0ZDo6bWFrZV91bmlxdWU8VD4oc3RkOjpm
b3J3YXJkPEFyZ3M+KGFyZ3MpLi4uKTsKIH0KIAordGVtcGxhdGUgPHR5cGVuYW1lIFJlc3VsdFR5
cGUsIHNpemVfdC4uLiBJcywgdHlwZW5hbWUgLi4uQXJncz4KK2NvbnN0ZXhwciBhdXRvIGNvbnN0
cnVjdEZpeGVkU2l6ZUFycmF5V2l0aEFyZ3VtZW50c0ltcGwoc3RkOjppbmRleF9zZXF1ZW5jZTxJ
cy4uLj4sIEFyZ3MmJi4uLiBhcmdzKSAtPiBzdGQ6OmFycmF5PFJlc3VsdFR5cGUsIHNpemVvZi4u
LihJcyk+Cit7CisgICAgcmV0dXJuIHsgKCh2b2lkKUlzLCBSZXN1bHRUeXBlIHsgYXJncy4uLiB9
KS4uLiB9OworfQorCisvLyBDb25zdHJ1Y3QgYW4gc3RkOjphcnJheSB3aXRoIE4gZWxlbWVudHMg
b2YgUmVzdWx0VHlwZSwgcGFzc2luZyBBcmdzIHRvIGVhY2ggb2YgdGhlIE4gY29uc3RydWN0b3Jz
LgordGVtcGxhdGU8dHlwZW5hbWUgUmVzdWx0VHlwZSwgc2l6ZV90IE4sIHR5cGVuYW1lIC4uLkFy
Z3M+Citjb25zdGV4cHIgYXV0byBjb25zdHJ1Y3RGaXhlZFNpemVBcnJheVdpdGhBcmd1bWVudHMo
QXJncyYmLi4uIGFyZ3MpIC0+IGRlY2x0eXBlKGF1dG8pCit7CisgICAgYXV0byB0dXBsZSA9IHN0
ZDo6bWFrZV9pbmRleF9zZXF1ZW5jZTxOPigpOworICAgIHJldHVybiBjb25zdHJ1Y3RGaXhlZFNp
emVBcnJheVdpdGhBcmd1bWVudHNJbXBsPFJlc3VsdFR5cGU+KHR1cGxlLCBzdGQ6OmZvcndhcmQ8
QXJncz4oYXJncykuLi4pOworfQogCiB9IC8vIG5hbWVzcGFjZSBXVEYKIApAQCAtNTE0LDMgKzUy
Nyw0IEBAIHVzaW5nIFdURjo6c2FmZUNhc3Q7CiB1c2luZyBXVEY6OnRyeUJpbmFyeVNlYXJjaDsK
IHVzaW5nIFdURjo6bWFrZVVuaXF1ZTsKIHVzaW5nIFdURjo6bWFrZVVuaXF1ZVdpdGhvdXRGYXN0
TWFsbG9jQ2hlY2s7Cit1c2luZyBXVEY6OmNvbnN0cnVjdEZpeGVkU2l6ZUFycmF5V2l0aEFyZ3Vt
ZW50czsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>393107</attachid>
            <date>2020-03-09 18:34:12 -0700</date>
            <delta_ts>2020-03-09 20:16:06 -0700</delta_ts>
            <desc>WIP</desc>
            <filename>c-backup.diff</filename>
            <type>text/plain</type>
            <size>67859</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9Tb3VyY2VzLnR4dAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvU291cmNlcy50eHQJKHJldmlzaW9uIDI1Nzg2NikKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9Tb3VyY2VzLnR4dAkod29ya2luZyBjb3B5KQpAQCAtOTk0LDgg
Kzk5NCw2IEBAIHJ1bnRpbWUvV2lkZW5pbmdOdW1iZXJQcmVkaWN0aW9uRnV6emVyQWcKIEpTQ0J1
aWx0aW5zLmNwcAogCiB0b29scy9DZWxsTGlzdC5jcHAKLXRvb2xzL0NvZGVQcm9maWxlLmNwcAot
dG9vbHMvQ29kZVByb2ZpbGluZy5jcHAKIHRvb2xzL0NvbXBpbGVyVGltaW5nU2NvcGUuY3BwCiB0
b29scy9GdW5jdGlvbk92ZXJyaWRlcy5jcHAKIHRvb2xzL0Z1bmN0aW9uV2hpdGVsaXN0LmNwcApJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9q
ZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3Jp
cHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDI1Nzg2NikKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhw
cm9qCSh3b3JraW5nIGNvcHkpCkBAIC00MDcxLDggKzQwNzEsNiBAQAogCQk4NjAxNjFFMDBGM0E4
M0MxMDBGODQ3MTAgLyogTWFjcm9Bc3NlbWJsZXJYODYuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gTWFjcm9Bc3NlbWJsZXJYODYuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJODYwMTYxRTEwRjNBODNDMTAwRjg0NzEwIC8qIE1hY3JvQXNzZW1ibGVyWDg2XzY0Lmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE1hY3JvQXNzZW1ibGVyWDg2XzY0Lmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTg2MDE2MUUyMEYzQTgzQzEwMEY4NDcxMCAv
KiBNYWNyb0Fzc2VtYmxlclg4NkNvbW1vbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBNYWNyb0Fzc2VtYmxlclg4NkNvbW1vbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwotCQk4NjAzQ0VGMjE0Qzc1NDY0MDBBRTU5RTMgLyogQ29kZVByb2ZpbGluZy5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBDb2RlUHJvZmlsaW5nLmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJODYwM0NFRjMxNEM3NTQ2NDAwQUU1OUUzIC8qIENvZGVQ
cm9maWxpbmcuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ29kZVByb2ZpbGlu
Zy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk4NjA0RjRGMjE0M0E2QzQ0MDBCMjk1
RjUgLyogQ2hhbmdlTG9nICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZp
bGVUeXBlID0gdGV4dDsgbGluZUVuZGluZyA9IDA7IHBhdGggPSBDaGFuZ2VMb2c7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTg2MDZEREU5MThEQTQ0QUIwMEEzODNEMCAvKiBJZGVudGlm
aWVySW5saW5lcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJZGVudGlmaWVy
SW5saW5lcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk4NjEyRTRDQjE1MjI5MTg0
MDBDODM2QkUgLyogTWF0Y2hSZXN1bHQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gTWF0Y2hSZXN1bHQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTQxMTgsOCAr
NDExNiw2IEBACiAJCTg2QUREMTQzMEZEREVBOTgwMDA2RkZDQyAvKiBBUk12N1JlZ2lzdGVycy5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBBUk12N1JlZ2lzdGVycy5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk4NkFERDE0NDBGRERFQTk4MDAwNkVFQzIgLyogTWFj
cm9Bc3NlbWJsZXJBUk12Ny5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBNYWNy
b0Fzc2VtYmxlckFSTXY3Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTg2QjU4MjJD
MTREMjJGNUYwMEE5QzMwNiAvKiBQcm9maWxlVHJlZU5vZGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gUHJvZmlsZVRyZWVOb2RlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07Ci0JCTg2QjU4MjJFMTREMjM3M0IwMEE5QzMwNiAvKiBDb2RlUHJvZmlsZS5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBDb2RlUHJvZmlsZS5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTg2QjU4MjJGMTREMjM3M0IwMEE5QzMwNiAvKiBDb2RlUHJv
ZmlsZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBDb2RlUHJvZmlsZS5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk4NkI1ODI2QTE0RDM1RDUxMDBBOUMzMDYgLyog
VGllcmVkTU1hcEFycmF5LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFRpZXJl
ZE1NYXBBcnJheS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk4NkJGNjQyQTE0OERC
MkI1MDA0REUzNkEgLyogSW50cmluc2ljLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IEludHJpbnNpYy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk4NkMzNkVFOTBF
RTEyODlEMDBCM0RGNTkgLyogTWFjcm9Bc3NlbWJsZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gTWFjcm9Bc3NlbWJsZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
QEAgLTc2NzYsMTAgKzc2NzIsNiBAQAogCQkJCUZFMUJEMDFCMUU3MjAwMjEwMDEzNEJDOSAvKiBD
ZWxsTGlzdC5jcHAgKi8sCiAJCQkJRkUxQkQwMUMxRTcyMDAyMTAwMTM0QkM5IC8qIENlbGxMaXN0
LmggKi8sCiAJCQkJRkUxQkQwMjAxRTcyMDI3MDAwMTM0QkM5IC8qIENlbGxQcm9maWxlLmggKi8s
Ci0JCQkJODZCNTgyMkUxNEQyMzczQjAwQTlDMzA2IC8qIENvZGVQcm9maWxlLmNwcCAqLywKLQkJ
CQk4NkI1ODIyRjE0RDIzNzNCMDBBOUMzMDYgLyogQ29kZVByb2ZpbGUuaCAqLywKLQkJCQk4NjAz
Q0VGMjE0Qzc1NDY0MDBBRTU5RTMgLyogQ29kZVByb2ZpbGluZy5jcHAgKi8sCi0JCQkJODYwM0NF
RjMxNEM3NTQ2NDAwQUU1OUUzIC8qIENvZGVQcm9maWxpbmcuaCAqLywKIAkJCQkwRjRGMTFFNzIw
OUJDREExMDA3MDk2NTQgLyogQ29tcGlsZXJUaW1pbmdTY29wZS5jcHAgKi8sCiAJCQkJMEY0RjEx
RTYyMDlCQ0RBMTAwNzA5NjU0IC8qIENvbXBpbGVyVGltaW5nU2NvcGUuaCAqLywKIAkJCQlGRTRC
RkYyOTFBRDQ3NkU3MDAwODhGODcgLyogRnVuY3Rpb25PdmVycmlkZXMuY3BwICovLApJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9BUk02NEFzc2VtYmxlci5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvQVJNNjRBc3NlbWJsZXIuaAko
cmV2aXNpb24gMjU3ODY2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9BUk02
NEFzc2VtYmxlci5oCSh3b3JraW5nIGNvcHkpCkBAIC03ODMsMTIgKzc4Myw5IEBAIHB1YmxpYzoK
ICAgICAgICAgaW5zbihkYXRhUHJvY2Vzc2luZzJTb3VyY2UoREFUQVNJWkUsIHJtLCBEYXRhT3Bf
QVNSViwgcm4sIHJkKSk7CiAgICAgfQogCi0gICAgQUxXQVlTX0lOTElORSB2b2lkIGIoaW50MzJf
dCBvZmZzZXQgPSAwKQorICAgIEFMV0FZU19JTkxJTkUgdm9pZCBiKCkKICAgICB7Ci0gICAgICAg
IEFTU0VSVCghKG9mZnNldCAmIDMpKTsKLSAgICAgICAgb2Zmc2V0ID4+PSAyOwotICAgICAgICBB
U1NFUlQob2Zmc2V0ID09IChvZmZzZXQgPDwgNikgPj4gNik7Ci0gICAgICAgIGluc24odW5jb25k
aXRpb25hbEJyYW5jaEltbWVkaWF0ZShmYWxzZSwgb2Zmc2V0KSk7CisgICAgICAgIGluc24odW5j
b25kaXRpb25hbEJyYW5jaEltbWVkaWF0ZShmYWxzZSwgMCkpOwogICAgIH0KIAogICAgIEFMV0FZ
U19JTkxJTkUgdm9pZCBiX2NvbmQoQ29uZGl0aW9uIGNvbmQsIGludDMyX3Qgb2Zmc2V0ID0gMCkK
QEAgLTgzMSwxMSArODI4LDkgQEAgcHVibGljOgogICAgICAgICBpbnNuKGxvZ2ljYWxTaGlmdGVk
UmVnaXN0ZXIoREFUQVNJWkUsIHNldEZsYWdzID8gTG9naWNhbE9wX0FORFMgOiBMb2dpY2FsT3Bf
QU5ELCBzaGlmdCwgdHJ1ZSwgcm0sIGFtb3VudCwgcm4sIHJkKSk7CiAgICAgfQogCi0gICAgQUxX
QVlTX0lOTElORSB2b2lkIGJsKGludDMyX3Qgb2Zmc2V0ID0gMCkKKyAgICBBTFdBWVNfSU5MSU5F
IHZvaWQgYmwoKQogICAgIHsKLSAgICAgICAgQVNTRVJUKCEob2Zmc2V0ICYgMykpOwotICAgICAg
ICBvZmZzZXQgPj49IDI7Ci0gICAgICAgIGluc24odW5jb25kaXRpb25hbEJyYW5jaEltbWVkaWF0
ZSh0cnVlLCBvZmZzZXQpKTsKKyAgICAgICAgaW5zbih1bmNvbmRpdGlvbmFsQnJhbmNoSW1tZWRp
YXRlKHRydWUsIDApKTsKICAgICB9CiAKICAgICBBTFdBWVNfSU5MSU5FIHZvaWQgYmxyKFJlZ2lz
dGVySUQgcm4pCkBAIC0yNTgyLDYgKzI1NzcsMTMgQEAgcHVibGljOgogICAgIHsKICAgICAgICAg
aW50cHRyX3Qgb2Zmc2V0ID0gKHJlaW50ZXJwcmV0X2Nhc3Q8aW50cHRyX3Q+KHRvKSAtIHJlaW50
ZXJwcmV0X2Nhc3Q8aW50cHRyX3Q+KHdoZXJlKSkgPj4gMjsKICAgICAgICAgQVNTRVJUKHN0YXRp
Y19jYXN0PGludD4ob2Zmc2V0KSA9PSBvZmZzZXQpOworCisgICAgICAgIGlmICghaXNJbnQ8MjY+
KG9mZnNldCkpIHsKKyAgICAgICAgICAgIHRvID0gRXhlY3V0YWJsZUFsbG9jYXRvcjo6c2luZ2xl
dG9uKCkuZ2V0SnVtcElzbGFuZFRvKHdoZXJlLCBudWxscHRyLCB0byk7CisgICAgICAgICAgICBv
ZmZzZXQgPSAoYml0d2lzZV9jYXN0PGludHB0cl90Pih0bykgLSBiaXR3aXNlX2Nhc3Q8aW50cHRy
X3Q+KHdoZXJlKSkgPj4gMjsKKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKGlzSW50PDI2Pihv
ZmZzZXQpKTsKKyAgICAgICAgfQorCiAgICAgICAgIGludCBpbnNuID0gdW5jb25kaXRpb25hbEJy
YW5jaEltbWVkaWF0ZShmYWxzZSwgc3RhdGljX2Nhc3Q8aW50PihvZmZzZXQpKTsKICAgICAgICAg
UkVMRUFTRV9BU1NFUlQocm91bmRVcFRvTXVsdGlwbGVPZjxpbnN0cnVjdGlvblNpemU+KHdoZXJl
KSA9PSB3aGVyZSk7CiAgICAgICAgIHBlcmZvcm1KSVRNZW1jcHkod2hlcmUsICZpbnNuLCBzaXpl
b2YoaW50KSk7CkBAIC0yODcyLDcgKzI4NzQsNyBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAg
cmV0dXJuIExpbmtKdW1wQ29uZGl0aW9uRGlyZWN0OwogCiAgICAgICAgICAgICByZXR1cm4gTGlu
a0p1bXBDb25kaXRpb247Ci0gICAgICAgICAgICB9CisgICAgICAgIH0KICAgICAgICAgY2FzZSBK
dW1wQ29tcGFyZUFuZEJyYW5jaDogIHsKICAgICAgICAgICAgIEFTU0VSVChpczRCeXRlQWxpZ25l
ZChmcm9tKSk7CiAgICAgICAgICAgICBBU1NFUlQoaXM0Qnl0ZUFsaWduZWQodG8pKTsKQEAgLTI5
ODUsNyArMjk4NywxOSBAQCBwcm90ZWN0ZWQ6CiAKICAgICAgICAgYm9vbCBsaW5rOwogICAgICAg
ICBpbnQgaW1tMjY7Ci0gICAgICAgIGJvb2wgaXNVbmNvbmRpdGlvbmFsQnJhbmNoSW1tZWRpYXRl
T3JOb3AgPSBkaXNhc3NlbWJsZVVuY29uZGl0aW9uYWxCcmFuY2hJbW1lZGlhdGUoZnJvbSwgbGlu
aywgaW1tMjYpIHx8IGRpc2Fzc2VtYmxlTm9wKGZyb20pOworICAgICAgICB2b2lkKiBwcmV2aW91
c1RhcmdldCA9IG51bGxwdHI7CisgICAgICAgIGJvb2wgaXNVbmNvbmRpdGlvbmFsQnJhbmNoSW1t
ZWRpYXRlT3JOb3AgPSBmYWxzZTsKKyAgICAgICAgaWYgKGRpc2Fzc2VtYmxlVW5jb25kaXRpb25h
bEJyYW5jaEltbWVkaWF0ZShmcm9tLCBsaW5rLCBpbW0yNikpIHsKKyAgICAgICAgICAgIGlzVW5j
b25kaXRpb25hbEJyYW5jaEltbWVkaWF0ZU9yTm9wID0gdHJ1ZTsKKyAgICAgICAgICAgIGludHB0
cl90IHByZXZpb3VzT2Zmc2V0ID0gaW1tMjYgPDwgMjsKKyAgICAgICAgICAgIGlmIChwcmV2aW91
c09mZnNldCkgeworICAgICAgICAgICAgICAgIC8vIFdoZW4gZW1pdHRpbmcgYnJhbmNoZXMgYmVm
b3JlIGxpbmtpbmcgdGhlbSwgd2UgZW1pdCB0aGVtIHdpdGggb2Zmc2V0cyBvZiB6ZXJvLiBUaGlz
CisgICAgICAgICAgICAgICAgLy8gbWVhbnMgaXQgY291bGRuJ3QgaGF2ZSBqdW1wZWQgdG8gYW4g
aXNsYW5kIGJlZm9yZSwgc28ganVzdCBpZ25vcmUgcnVubmluZyBleHRyYSBjb2RlCisgICAgICAg
ICAgICAgICAgLy8gaW4gdGhlIGlzbGFuZCBhbGxvY2F0b3IuCisgICAgICAgICAgICAgICAgcHJl
dmlvdXNUYXJnZXQgPSBiaXR3aXNlX2Nhc3Q8dm9pZCo+KGJpdHdpc2VfY2FzdDxpbnRwdHJfdD4o
ZnJvbUluc3RydWN0aW9uKSArIHByZXZpb3VzT2Zmc2V0KTsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgfSBlbHNlIGlmIChkaXNhc3NlbWJsZU5vcChmcm9tKSkKKyAgICAgICAgICAgIGlzVW5jb25k
aXRpb25hbEJyYW5jaEltbWVkaWF0ZU9yTm9wID0gdHJ1ZTsKIAogICAgICAgICBBU1NFUlRfVU5V
U0VEKGlzVW5jb25kaXRpb25hbEJyYW5jaEltbWVkaWF0ZU9yTm9wLCBpc1VuY29uZGl0aW9uYWxC
cmFuY2hJbW1lZGlhdGVPck5vcCk7CiAgICAgICAgIGNvbnN0ZXhwciBib29sIGlzQ2FsbCA9ICh0
eXBlID09IEJyYW5jaFR5cGVfQ0FMTCk7CkBAIC0yOTk0LDkgKzMwMDgsMTUgQEAgcHJvdGVjdGVk
OgogICAgICAgICBBU1NFUlQoIShyZWludGVycHJldF9jYXN0PGludHB0cl90Pih0bykgJiAzKSk7
CiAgICAgICAgIGFzc2VydElzTm90VGFnZ2VkKHRvKTsKICAgICAgICAgYXNzZXJ0SXNOb3RUYWdn
ZWQoZnJvbUluc3RydWN0aW9uKTsKLSAgICAgICAgaW50cHRyX3Qgb2Zmc2V0ID0gKHJlaW50ZXJw
cmV0X2Nhc3Q8aW50cHRyX3Q+KHRvKSAtIHJlaW50ZXJwcmV0X2Nhc3Q8aW50cHRyX3Q+KGZyb21J
bnN0cnVjdGlvbikpID4+IDI7CisgICAgICAgIGludHB0cl90IG9mZnNldCA9IChiaXR3aXNlX2Nh
c3Q8aW50cHRyX3Q+KHRvKSAtIGJpdHdpc2VfY2FzdDxpbnRwdHJfdD4oZnJvbUluc3RydWN0aW9u
KSkgPj4gMjsKICAgICAgICAgQVNTRVJUKHN0YXRpY19jYXN0PGludD4ob2Zmc2V0KSA9PSBvZmZz
ZXQpOwogCisgICAgICAgIGlmICghaXNJbnQ8MjY+KG9mZnNldCkpIHsKKyAgICAgICAgICAgIHRv
ID0gRXhlY3V0YWJsZUFsbG9jYXRvcjo6c2luZ2xldG9uKCkuZ2V0SnVtcElzbGFuZFRvKGJpdHdp
c2VfY2FzdDx2b2lkKj4oZnJvbUluc3RydWN0aW9uKSwgcHJldmlvdXNUYXJnZXQsIHRvKTsKKyAg
ICAgICAgICAgIG9mZnNldCA9IChiaXR3aXNlX2Nhc3Q8aW50cHRyX3Q+KHRvKSAtIGJpdHdpc2Vf
Y2FzdDxpbnRwdHJfdD4oZnJvbUluc3RydWN0aW9uKSkgPj4gMjsKKyAgICAgICAgICAgIFJFTEVB
U0VfQVNTRVJUKGlzSW50PDI2PihvZmZzZXQpKTsKKyAgICAgICAgfQorCiAgICAgICAgIGludCBp
bnNuID0gdW5jb25kaXRpb25hbEJyYW5jaEltbWVkaWF0ZShpc0NhbGwsIHN0YXRpY19jYXN0PGlu
dD4ob2Zmc2V0KSk7CiAgICAgICAgIFJFTEVBU0VfQVNTRVJUKHJvdW5kVXBUb011bHRpcGxlT2Y8
aW5zdHJ1Y3Rpb25TaXplPihmcm9tKSA9PSBmcm9tKTsKICAgICAgICAgY29weShmcm9tLCAmaW5z
biwgc2l6ZW9mKGludCkpOwpAQCAtMzAwOCw3ICszMDI4LDcgQEAgcHJvdGVjdGVkOgogICAgICAg
ICBBU1NFUlQoIShyZWludGVycHJldF9jYXN0PGludHB0cl90Pihmcm9tKSAmIDMpKTsKICAgICAg
ICAgQVNTRVJUKCEocmVpbnRlcnByZXRfY2FzdDxpbnRwdHJfdD4odG8pICYgMykpOwogICAgICAg
ICBpbnRwdHJfdCBvZmZzZXQgPSAocmVpbnRlcnByZXRfY2FzdDxpbnRwdHJfdD4odG8pIC0gcmVp
bnRlcnByZXRfY2FzdDxpbnRwdHJfdD4oZnJvbUluc3RydWN0aW9uKSkgPj4gMjsKLSAgICAgICAg
QVNTRVJUKGlzSW50PDI2PihvZmZzZXQpKTsKKyAgICAgICAgLy9BU1NFUlQoaXNJbnQ8MjY+KG9m
ZnNldCkpOyAvL09PUFMKIAogICAgICAgICBib29sIHVzZURpcmVjdCA9IGlzSW50PDE5PihvZmZz
ZXQpOwogICAgICAgICBBU1NFUlQodHlwZSA9PSBJbmRpcmVjdEJyYW5jaCB8fCB1c2VEaXJlY3Qp
OwpAQCAtMzAzNiw3ICszMDU2LDcgQEAgcHJvdGVjdGVkOgogICAgICAgICBBU1NFUlQoIShyZWlu
dGVycHJldF9jYXN0PGludHB0cl90Pihmcm9tKSAmIDMpKTsKICAgICAgICAgQVNTRVJUKCEocmVp
bnRlcnByZXRfY2FzdDxpbnRwdHJfdD4odG8pICYgMykpOwogICAgICAgICBpbnRwdHJfdCBvZmZz
ZXQgPSAocmVpbnRlcnByZXRfY2FzdDxpbnRwdHJfdD4odG8pIC0gcmVpbnRlcnByZXRfY2FzdDxp
bnRwdHJfdD4oZnJvbUluc3RydWN0aW9uKSkgPj4gMjsKLSAgICAgICAgQVNTRVJUKGlzSW50PDI2
PihvZmZzZXQpKTsKKyAgICAgICAgLy8gQVNTRVJUKGlzSW50PDI2PihvZmZzZXQpKTsgT09QUwog
CiAgICAgICAgIGJvb2wgdXNlRGlyZWN0ID0gaXNJbnQ8MTk+KG9mZnNldCk7CiAgICAgICAgIEFT
U0VSVCh0eXBlID09IEluZGlyZWN0QnJhbmNoIHx8IHVzZURpcmVjdCk7CkBAIC0zMDY1LDcgKzMw
ODUsNyBAQCBwcm90ZWN0ZWQ6CiAgICAgICAgIEFTU0VSVCghKHJlaW50ZXJwcmV0X2Nhc3Q8aW50
cHRyX3Q+KHRvKSAmIDMpKTsKICAgICAgICAgaW50cHRyX3Qgb2Zmc2V0ID0gKHJlaW50ZXJwcmV0
X2Nhc3Q8aW50cHRyX3Q+KHRvKSAtIHJlaW50ZXJwcmV0X2Nhc3Q8aW50cHRyX3Q+KGZyb21JbnN0
cnVjdGlvbikpID4+IDI7CiAgICAgICAgIEFTU0VSVChzdGF0aWNfY2FzdDxpbnQ+KG9mZnNldCkg
PT0gb2Zmc2V0KTsKLSAgICAgICAgQVNTRVJUKGlzSW50PDI2PihvZmZzZXQpKTsKKyAgICAgICAg
Ly9BU1NFUlQoaXNJbnQ8MjY+KG9mZnNldCkpOyBPT1BTCiAKICAgICAgICAgYm9vbCB1c2VEaXJl
Y3QgPSBpc0ludDwxND4ob2Zmc2V0KTsKICAgICAgICAgQVNTRVJUKHR5cGUgPT0gSW5kaXJlY3RC
cmFuY2ggfHwgdXNlRGlyZWN0KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJs
ZXIvTGlua0J1ZmZlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Fz
c2VtYmxlci9MaW5rQnVmZmVyLmNwcAkocmV2aXNpb24gMjU3ODY2KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2Fzc2VtYmxlci9MaW5rQnVmZmVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzQ0
LDcgKzM0NCw4IEBAIHZvaWQgTGlua0J1ZmZlcjo6YWxsb2NhdGUoTWFjcm9Bc3NlbWJsZXIKICAg
ICAgICAgaW5pdGlhbFNpemUgPSBtYWNyb0Fzc2VtYmxlci5tX2Fzc2VtYmxlci5jb2RlU2l6ZSgp
OwogICAgIH0KIAotICAgIG1fZXhlY3V0YWJsZU1lbW9yeSA9IEV4ZWN1dGFibGVBbGxvY2F0b3I6
OnNpbmdsZXRvbigpLmFsbG9jYXRlKGluaXRpYWxTaXplLCBvd25lclVJRCwgZWZmb3J0KTsKKyAg
ICBVTlVTRURfUEFSQU0ob3duZXJVSUQpOyAvLyBPT1BTOiBnZXQgcmlkIG9mIG93bmVyVUlEPwor
ICAgIG1fZXhlY3V0YWJsZU1lbW9yeSA9IEV4ZWN1dGFibGVBbGxvY2F0b3I6OnNpbmdsZXRvbigp
LmFsbG9jYXRlKGluaXRpYWxTaXplLCBlZmZvcnQpOwogICAgIGlmICghbV9leGVjdXRhYmxlTWVt
b3J5KQogICAgICAgICByZXR1cm47CiAgICAgbV9jb2RlID0gTWFjcm9Bc3NlbWJsZXJDb2RlUHRy
PExpbmtCdWZmZXJQdHJUYWc+KG1fZXhlY3V0YWJsZU1lbW9yeS0+c3RhcnQoKS5yZXRhZ2dlZFB0
cjxMaW5rQnVmZmVyUHRyVGFnPigpKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3Nl
bWJsZXIvTWFjcm9Bc3NlbWJsZXJDb2RlUmVmLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlckNvZGVSZWYuaAkocmV2aXNpb24gMjU3
ODY2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlckNv
ZGVSZWYuaAkod29ya2luZyBjb3B5KQpAQCAtNDM0LDcgKzQzNCw2IEBAIHB1YmxpYzoKICAgICAg
ICAgOiBtX2NvZGVQdHIoZXhlY3V0YWJsZU1lbW9yeS0+c3RhcnQoKS5yZXRhZ2dlZFB0cjx0YWc+
KCkpCiAgICAgICAgICwgbV9leGVjdXRhYmxlTWVtb3J5KFdURk1vdmUoZXhlY3V0YWJsZU1lbW9y
eSkpCiAgICAgewotICAgICAgICBBU1NFUlQobV9leGVjdXRhYmxlTWVtb3J5LT5pc01hbmFnZWQo
KSk7CiAgICAgICAgIEFTU0VSVChtX2V4ZWN1dGFibGVNZW1vcnktPnN0YXJ0KCkpOwogICAgICAg
ICBBU1NFUlQobV9jb2RlUHRyKTsKICAgICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L0V4ZWN1dGFibGVBbGxvY2F0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvRXhlY3V0YWJsZUFsbG9jYXRvci5jcHAJKHJldmlzaW9uIDI1Nzg2NikKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvRXhlY3V0YWJsZUFsbG9jYXRvci5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTI4LDkgKzI4LDEwIEBACiAKICNpZiBFTkFCTEUoSklUKQogCi0jaW5jbHVk
ZSAiQ29kZVByb2ZpbGluZy5oIgogI2luY2x1ZGUgIkV4ZWN1dGFibGVBbGxvY2F0aW9uRnV6ei5o
IgorI2luY2x1ZGUgIkl0ZXJhdGlvblN0YXR1cy5oIgogI2luY2x1ZGUgIkpTQ0lubGluZXMuaCIK
KyNpbmNsdWRlIDx0eXBlX3RyYWl0cz4KICNpbmNsdWRlIDx3dGYvRmlsZVN5c3RlbS5oPgogI2lu
Y2x1ZGUgPHd0Zi9NZXRhQWxsb2NhdG9yLmg+CiAjaW5jbHVkZSA8d3RmL1BhZ2VSZXNlcnZhdGlv
bi5oPgpAQCAtOTYsOSArOTcsMTQgQEAgc3RhdGljIGNvbnN0ZXhwciBzaXplX3QgZml4ZWRFeGVj
dXRhYmxlTQogI2VsaWYgQ1BVKEFSTSkKIHN0YXRpYyBjb25zdGV4cHIgc2l6ZV90IGZpeGVkRXhl
Y3V0YWJsZU1lbW9yeVBvb2xTaXplID0gMTYgKiAxMDI0ICogMTAyNDsKICNlbGlmIENQVShBUk02
NCkKLXN0YXRpYyBjb25zdGV4cHIgc2l6ZV90IGZpeGVkRXhlY3V0YWJsZU1lbW9yeVBvb2xTaXpl
ID0gMTI4ICogMTAyNCAqIDEwMjQ7CitzdGF0aWMgY29uc3RleHByIHNpemVfdCBmaXhlZEV4ZWN1
dGFibGVNZW1vcnlQb29sU2l6ZSA9IDEgKiAxMDI0ICogMTAyNCAqIDEwMjQ7CitzdGF0aWMgY29u
c3RleHByIHNpemVfdCByZWdpb25TaXplID0gMTEyICogMTAyNCAqIDEwMjQ7CitzdGF0aWMgY29u
c3RleHByIHNpemVfdCBpc2xhbmRSZWdpb25TaXplID0gMTYgKiAxMDI0ICogMTAyNDsKK3N0YXRp
YyBjb25zdGV4cHIgc2l6ZV90IG51bWJlck9mUmVnaW9ucyA9IGZpeGVkRXhlY3V0YWJsZU1lbW9y
eVBvb2xTaXplIC8gcmVnaW9uU2l6ZTsKK3N0YXRpYyBjb25zdGV4cHIgc2l6ZV90IGlzbGFuZFNp
emVJbkJ5dGVzID0gNDsKK3N0YXRpYyBjb25zdGV4cHIgc2l6ZV90IG1heElzbGFuZHNQZXJSZWdp
b24gPSBpc2xhbmRSZWdpb25TaXplIC8gaXNsYW5kU2l6ZUluQnl0ZXM7CiAjZWxpZiBDUFUoWDg2
XzY0KQotc3RhdGljIGNvbnN0ZXhwciBzaXplX3QgZml4ZWRFeGVjdXRhYmxlTWVtb3J5UG9vbFNp
emUgPSAxMDI0ICogMTAyNCAqIDEwMjQ7CitzdGF0aWMgY29uc3RleHByIHNpemVfdCBmaXhlZEV4
ZWN1dGFibGVNZW1vcnlQb29sU2l6ZSA9IDEgKiAxMDI0ICogMTAyNCAqIDEwMjQ7CiAjZWxzZQog
c3RhdGljIGNvbnN0ZXhwciBzaXplX3QgZml4ZWRFeGVjdXRhYmxlTWVtb3J5UG9vbFNpemUgPSAz
MiAqIDEwMjQgKiAxMDI0OwogI2VuZGlmCkBAIC0zMTMsOSArMzE5LDEwIEBAIHN0YXRpYyBBTFdB
WVNfSU5MSU5FIEpJVFJlc2VydmF0aW9uIGluaXQKICAgICBpZiAoIWlzSklURW5hYmxlZCgpKQog
ICAgICAgICByZXR1cm4gcmVzZXJ2YXRpb247CiAKLSAgICBpZiAoT3B0aW9uczo6aml0TWVtb3J5
UmVzZXJ2YXRpb25TaXplKCkpCi0gICAgICAgIHJlc2VydmF0aW9uLnNpemUgPSBPcHRpb25zOjpq
aXRNZW1vcnlSZXNlcnZhdGlvblNpemUoKTsKLSAgICBlbHNlCisgICAgLy8gT09QUyEKKyAgICAv
L2lmIChPcHRpb25zOjpqaXRNZW1vcnlSZXNlcnZhdGlvblNpemUoKSkKKyAgICAvLyAgICByZXNl
cnZhdGlvbi5zaXplID0gT3B0aW9uczo6aml0TWVtb3J5UmVzZXJ2YXRpb25TaXplKCk7CisgICAg
Ly9lbHNlCiAgICAgICAgIHJlc2VydmF0aW9uLnNpemUgPSBmaXhlZEV4ZWN1dGFibGVNZW1vcnlQ
b29sU2l6ZTsKICAgICByZXNlcnZhdGlvbi5zaXplID0gc3RkOjptYXgocm91bmRVcFRvTXVsdGlw
bGVPZihwYWdlU2l6ZSgpLCByZXNlcnZhdGlvbi5zaXplKSwgcGFnZVNpemUoKSAqIDIpOwogCkBA
IC0zNjMsNTIgKzM3MCw0MjggQEAgc3RhdGljIEFMV0FZU19JTkxJTkUgSklUUmVzZXJ2YXRpb24g
aW5pdAogICAgIHJldHVybiByZXNlcnZhdGlvbjsKIH0KIAotY2xhc3MgRml4ZWRWTVBvb2xFeGVj
dXRhYmxlQWxsb2NhdG9yIGZpbmFsIDogcHVibGljIE1ldGFBbGxvY2F0b3IgeworY2xhc3MgRml4
ZWRWTVBvb2xFeGVjdXRhYmxlQWxsb2NhdG9yIGZpbmFsIHsKICAgICBXVEZfTUFLRV9GQVNUX0FM
TE9DQVRFRDsKIHB1YmxpYzoKICAgICBGaXhlZFZNUG9vbEV4ZWN1dGFibGVBbGxvY2F0b3IoKQot
ICAgICAgICA6IE1ldGFBbGxvY2F0b3Ioaml0QWxsb2NhdGlvbkdyYW51bGUpIC8vIHJvdW5kIHVw
IGFsbCBhbGxvY2F0aW9ucyB0byAzMiBieXRlcworI2lmIENQVShBUk02NCkKKyAgICAgICAgOiBt
X2FsbG9jYXRvcnMoY29uc3RydWN0Rml4ZWRTaXplQXJyYXlXaXRoQXJndW1lbnRzPFJlZ2lvbkFs
bG9jYXRvciwgbnVtYmVyT2ZSZWdpb25zPigqdGhpcykpCisjZWxzZQorICAgICAgICA6IG1fYWxs
b2NhdG9yKCp0aGlzKQorI2VuZGlmCiAgICAgewogICAgICAgICBKSVRSZXNlcnZhdGlvbiByZXNl
cnZhdGlvbiA9IGluaXRpYWxpemVKSVRQYWdlUmVzZXJ2YXRpb24oKTsKICAgICAgICAgbV9yZXNl
cnZhdGlvbiA9IFdURk1vdmUocmVzZXJ2YXRpb24ucGFnZVJlc2VydmF0aW9uKTsKICAgICAgICAg
aWYgKG1fcmVzZXJ2YXRpb24pIHsKLSAgICAgICAgICAgIGFkZEZyZXNoRnJlZVNwYWNlKHJlc2Vy
dmF0aW9uLmJhc2UsIHJlc2VydmF0aW9uLnNpemUpOworI2lmIENQVShBUk02NCkKKyAgICAgICAg
ICAgIHVpbnRwdHJfdCBzdGFydCA9IGJpdHdpc2VfY2FzdDx1aW50cHRyX3Q+KG1fcmVzZXJ2YXRp
b24uYmFzZSgpKTsKKyAgICAgICAgICAgIHVpbnRwdHJfdCByZXNlcnZhdGlvbkVuZCA9IHN0YXJ0
ICsgbV9yZXNlcnZhdGlvbi5zaXplKCk7CisgICAgICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsg
aSA8IG51bWJlck9mUmVnaW9uczsgKytpKSB7CisgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NF
UlQoc3RhcnQgPCByZXNlcnZhdGlvbkVuZCk7CisgICAgICAgICAgICAgICAgbV9hbGxvY2F0b3Jz
W2ldLnN0YXJ0ID0gc3RhcnQ7CisgICAgICAgICAgICAgICAgbV9hbGxvY2F0b3JzW2ldLmVuZCA9
IHN0YXJ0ICsgcmVnaW9uU2l6ZTsKKyAgICAgICAgICAgICAgICBpZiAobV9hbGxvY2F0b3JzW2ld
LmVuZCA+IHJlc2VydmF0aW9uRW5kKSB7CisgICAgICAgICAgICAgICAgICAgIC8vIFdlIG1heSBo
YXZlIHRha2VuIGEgcGFnZSBmb3IgdGhlIGV4ZWN1dGFibGUgb25seSBjb3B5IHRodW5rLgorICAg
ICAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChpID09IG51bWJlck9mUmVnaW9ucyAtIDEp
OworICAgICAgICAgICAgICAgICAgICBtX2FsbG9jYXRvcnNbaV0uZW5kID0gcmVzZXJ2YXRpb25F
bmQ7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgbV9hbGxvY2F0b3JzW2ld
LmFkZEZyZXNoRnJlZVNwYWNlKGJpdHdpc2VfY2FzdDx2b2lkKj4obV9hbGxvY2F0b3JzW2ldLnN0
YXJ0KSwgbV9hbGxvY2F0b3JzW2ldLmFsbG9jYXRvclNpemUoKSk7CisKKyAgICAgICAgICAgICAg
ICBzdGFydCArPSByZWdpb25TaXplOworICAgICAgICAgICAgfQorI2Vsc2UKKyAgICAgICAgICAg
IG1fYWxsb2NhdG9yLmFkZEZyZXNoRnJlZVNwYWNlKHJlc2VydmF0aW9uLmJhc2UsIHJlc2VydmF0
aW9uLnNpemUpOworI2VuZGlmCisKICAgICAgICAgICAgIEFTU0VSVChieXRlc1Jlc2VydmVkKCkg
PT0gcmVzZXJ2YXRpb24uc2l6ZSk7IC8vIFNpbmNlIG91ciBleGVjdXRhYmxlIG1lbW9yeSBpcyBm
aXhlZC1zaXplZCwgYnl0ZXNSZXNlcnZlZCBpcyBuZXZlciBjaGFuZ2VkIGFmdGVyIGluaXRpYWxp
emF0aW9uLgogICAgICAgICB9CiAgICAgfQogCi0gICAgdmlydHVhbCB+Rml4ZWRWTVBvb2xFeGVj
dXRhYmxlQWxsb2NhdG9yKCk7CisgICAgfkZpeGVkVk1Qb29sRXhlY3V0YWJsZUFsbG9jYXRvcigp
CisgICAgeworICAgICAgICBtX3Jlc2VydmF0aW9uLmRlYWxsb2NhdGUoKTsKKyAgICB9CiAKICAg
ICB2b2lkKiBtZW1vcnlTdGFydCgpIHsgcmV0dXJuIHVudGFnQ29kZVB0cjxFeGVjdXRhYmxlTWVt
b3J5UHRyVGFnPihnX2pzY0NvbmZpZy5zdGFydEV4ZWN1dGFibGVNZW1vcnkpOyB9CiAgICAgdm9p
ZCogbWVtb3J5RW5kKCkgeyByZXR1cm4gdW50YWdDb2RlUHRyPEV4ZWN1dGFibGVNZW1vcnlQdHJU
YWc+KGdfanNjQ29uZmlnLmVuZEV4ZWN1dGFibGVNZW1vcnkpOyB9CiAgICAgYm9vbCBpc0pJVFBD
KHZvaWQqIHBjKSB7IHJldHVybiBtZW1vcnlTdGFydCgpIDw9IHBjICYmIHBjIDwgbWVtb3J5RW5k
KCk7IH0KKyAgICBib29sIGlzVmFsaWQoKSB7IHJldHVybiAhIW1fcmVzZXJ2YXRpb247IH0KIAot
cHJvdGVjdGVkOgotICAgIEZyZWVTcGFjZVB0ciBhbGxvY2F0ZU5ld1NwYWNlKHNpemVfdCYpIG92
ZXJyaWRlCisgICAgUmVmUHRyPEV4ZWN1dGFibGVNZW1vcnlIYW5kbGU+IGFsbG9jYXRlKHNpemVf
dCBzaXplSW5CeXRlcykKICAgICB7Ci0gICAgICAgIC8vIFdlJ3JlIG9wZXJhdGluZyBpbiBhIGZp
eGVkIHBvb2wsIHNvIG5ldyBhbGxvY2F0aW9uIGlzIGFsd2F5cyBwcm9oaWJpdGVkLgorI2lmIENQ
VShBUk02NCkKKyAgICAgICAgYXV0byBsb2NrZXIgPSBob2xkTG9jayhnZXRMb2NrKCkpOworICAg
ICAgICAKKyAgICAgICAgdW5zaWduZWQgc3RhcnQgPSAwOworICAgICAgICBpZiAodHJ1ZSB8fCBP
cHRpb25zOjp1c2VSYW5kb21pemluZ0V4ZWN1dGFibGVJc2xhbmRBbGxvY2F0aW9uKCkpIC8vIE9P
UFMKKyAgICAgICAgICAgIHN0YXJ0ID0gY3J5cHRvZ3JhcGhpY2FsbHlSYW5kb21OdW1iZXIoKSAl
IG1fYWxsb2NhdG9ycy5zaXplKCk7CisKKyAgICAgICAgdW5zaWduZWQgaSA9IHN0YXJ0OworICAg
ICAgICB3aGlsZSAodHJ1ZSkgeworICAgICAgICAgICAgUmVnaW9uQWxsb2NhdG9yJiBhbGxvY2F0
b3IgPSBtX2FsbG9jYXRvcnNbaV07CisgICAgICAgICAgICBpZiAoUmVmUHRyPEV4ZWN1dGFibGVN
ZW1vcnlIYW5kbGU+IHJlc3VsdCA9IGFsbG9jYXRvci5hbGxvY2F0ZShsb2NrZXIsIHNpemVJbkJ5
dGVzKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0OworICAgICAgICAgICAgaSA9IChp
ICsgMSkgJSBtX2FsbG9jYXRvcnMuc2l6ZSgpOworICAgICAgICAgICAgaWYgKGkgPT0gc3RhcnQp
CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KICAgICAgICAgcmV0dXJuIG51bGxw
dHI7CisjZWxzZQorICAgICAgICByZXR1cm4gbV9hbGxvY2F0b3IuYWxsb2NhdGUoc2l6ZUluQnl0
ZXMpOworI2VuZGlmCisgICAgfQorCisjaWYgQ1BVKEFSTTY0KQorICAgIHZvaWQgaGFuZGxlV2ls
bEJlUmVsZWFzZWQoY29uc3QgTG9ja0hvbGRlciYsIE1ldGFBbGxvY2F0b3JIYW5kbGUmIGhhbmRs
ZSkKKyAgICB7CisgICAgICAgIGlmIChpc2xhbmRzRm9yTG9jYXRpb24uaXNFbXB0eSgpKQorICAg
ICAgICAgICAgcmV0dXJuOworCisgICAgICAgIFZlY3RvcjxJc2xhbmRzKiwgMTY+IHRvUmVtb3Zl
OworICAgICAgICB2b2lkKiBzdGFydCA9IGhhbmRsZS5zdGFydCgpLnVudGFnZ2VkUHRyKCk7Cisg
ICAgICAgIHZvaWQqIGVuZCA9IGhhbmRsZS5lbmQoKS51bnRhZ2dlZFB0cigpOworICAgICAgICAv
L2RhdGFMb2dMbigiZnJlZWluZyBoYW5kbGU6IFsiLCBiaXR3aXNlX2Nhc3Q8dWludHB0cl90Pihz
dGFydCksICIsICIsIGJpdHdpc2VfY2FzdDx1aW50cHRyX3Q+KGVuZCksICIpIik7CisgICAgICAg
IGlzbGFuZHNGb3JMb2NhdGlvbi5pdGVyYXRlKFsmXSAoSXNsYW5kcyYgaXNsYW5kcywgYm9vbCYg
dmlzaXRMZWZ0LCBib29sJiB2aXNpdFJpZ2h0KSB7CisgICAgICAgICAgICBpZiAoc3RhcnQgPD0g
aXNsYW5kcy5rZXkoKSAmJiBpc2xhbmRzLmtleSgpIDwgZW5kKQorICAgICAgICAgICAgICAgIHRv
UmVtb3ZlLmFwcGVuZCgmaXNsYW5kcyk7CisgICAgICAgICAgICBpZiAoaXNsYW5kcy5rZXkoKSA+
IHN0YXJ0KQorICAgICAgICAgICAgICAgIHZpc2l0TGVmdCA9IHRydWU7CisgICAgICAgICAgICBp
ZiAoaXNsYW5kcy5rZXkoKSA8IGVuZCkKKyAgICAgICAgICAgICAgICB2aXNpdFJpZ2h0ID0gdHJ1
ZTsKKyAgICAgICAgfSk7CisKKyAgICAgICAgZm9yIChJc2xhbmRzKiBpc2xhbmRzIDogdG9SZW1v
dmUpIHsKKyAgICAgICAgICAgIGZyZWVJc2xhbmRzKGlzbGFuZHMpOworICAgICAgICAgICAgLy9k
YXRhTG9nTG4oIlJlbW92aW5nIGlzbGFuZDogIiwgYml0d2lzZV9jYXN0PHVpbnRwdHJfdD4oaXNs
YW5kcy0+a2V5KCkpLCAiICAiLCBSYXdQb2ludGVyKGlzbGFuZHMpKTsKKyAgICAgICAgfQorICAg
IH0KKyNlbmRpZgorCisgICAgTG9jayYgZ2V0TG9jaygpIHsgcmV0dXJuIG1fbG9jazsgfQorCisg
ICAgLy8gTm9uIGF0b21pYworICAgIHNpemVfdCBieXRlc0FsbG9jYXRlZCgpIAorICAgIHsKKyAg
ICAgICAgc2l6ZV90IHJlc3VsdCA9IDA7CisgICAgICAgIGZvckVhY2hBbGxvY2F0b3IoWyZdIChB
bGxvY2F0b3ImIGFsbG9jYXRvcikgeworICAgICAgICAgICAgcmVzdWx0ICs9IGFsbG9jYXRvci5i
eXRlc0FsbG9jYXRlZCgpOworICAgICAgICB9KTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAg
ICB9CisgICAgc2l6ZV90IGJ5dGVzUmVzZXJ2ZWQoKSAKKyAgICB7CisgICAgICAgIHNpemVfdCBy
ZXN1bHQgPSAwOworICAgICAgICBmb3JFYWNoQWxsb2NhdG9yKFsmXSAoQWxsb2NhdG9yJiBhbGxv
Y2F0b3IpIHsKKyAgICAgICAgICAgIHJlc3VsdCArPSBhbGxvY2F0b3IuYnl0ZXNSZXNlcnZlZCgp
OworICAgICAgICB9KTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisgICAgc2l6ZV90
IGJ5dGVzQ29tbWl0dGVkKCkKKyAgICB7CisgICAgICAgIHNpemVfdCByZXN1bHQgPSAwOworICAg
ICAgICBmb3JFYWNoQWxsb2NhdG9yKFsmXSAoQWxsb2NhdG9yJiBhbGxvY2F0b3IpIHsKKyAgICAg
ICAgICAgIHJlc3VsdCArPSBhbGxvY2F0b3IuYnl0ZXNDb21taXR0ZWQoKTsKKyAgICAgICAgfSk7
CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorCisgICAgYm9vbCBpc0luQWxsb2NhdGVk
TWVtb3J5KGNvbnN0IEFic3RyYWN0TG9ja2VyJiBsb2NrZXIsIHZvaWQqIGFkZHJlc3MpCisgICAg
eworICAgICAgICBib29sIHJlc3VsdCA9IGZhbHNlOworICAgICAgICBmb3JFYWNoQWxsb2NhdG9y
KFsmXSAoQWxsb2NhdG9yJiBhbGxvY2F0b3IpIHsKKyAgICAgICAgICAgIGlmIChhbGxvY2F0b3Iu
aXNJbkFsbG9jYXRlZE1lbW9yeShsb2NrZXIsIGFkZHJlc3MpKSB7CisgICAgICAgICAgICAgICAg
cmVzdWx0ID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICByZXR1cm4gSXRlcmF0aW9uU3RhdHVzOjpE
b25lOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIEl0ZXJhdGlvblN0YXR1czo6
Q29udGludWU7CisgICAgICAgIH0pOworCisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQor
CisjaWYgRU5BQkxFKE1FVEFfQUxMT0NBVE9SX1BST0ZJTEUpCisgICAgdm9pZCBkdW1wUHJvZmls
ZSgpCisgICAgeworICAgICAgICBmb3JFYWNoQWxsb2NhdG9yKFsmXSAoQWxsb2NhdG9yJiBhbGxv
Y2F0b3IpIHsKKyAgICAgICAgICAgIGFsbG9jYXRvci5kdW1wUHJvZmlsZSgpOworICAgICAgICB9
KTsKKyAgICB9CisjZW5kaWYKKworICAgIE1ldGFBbGxvY2F0b3I6OlN0YXRpc3RpY3MgY3VycmVu
dFN0YXRpc3RpY3MoKQorICAgIHsKKyAgICAgICAgYXV0byBsb2NrZXIgPSBob2xkTG9jayhnZXRM
b2NrKCkpOworICAgICAgICBNZXRhQWxsb2NhdG9yOjpTdGF0aXN0aWNzIHJlc3VsdCB7IDAsIDAs
IDAgfTsKKyAgICAgICAgZm9yRWFjaEFsbG9jYXRvcihbJl0gKEFsbG9jYXRvciYgYWxsb2NhdG9y
KSB7CisgICAgICAgICAgICBhdXRvIGFsbG9jYXRvclN0YXRzID0gYWxsb2NhdG9yLmN1cnJlbnRT
dGF0aXN0aWNzKGxvY2tlcik7CisgICAgICAgICAgICByZXN1bHQuYnl0ZXNBbGxvY2F0ZWQgKz0g
YWxsb2NhdG9yU3RhdHMuYnl0ZXNBbGxvY2F0ZWQ7CisgICAgICAgICAgICByZXN1bHQuYnl0ZXNS
ZXNlcnZlZCArPSBhbGxvY2F0b3JTdGF0cy5ieXRlc1Jlc2VydmVkOworICAgICAgICAgICAgcmVz
dWx0LmJ5dGVzQ29tbWl0dGVkICs9IGFsbG9jYXRvclN0YXRzLmJ5dGVzQ29tbWl0dGVkOworICAg
ICAgICB9KTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisKKyNpZiBDUFUoQVJNNjQp
Citwcml2YXRlOgorICAgIGNsYXNzIElzbGFuZHM7CisgICAgY2xhc3MgUmVnaW9uQWxsb2NhdG9y
OworCisgICAgUmVnaW9uQWxsb2NhdG9yKiBmaW5kUmVnaW9uKHVpbnRwdHJfdCBwdHIpCisgICAg
eworICAgICAgICBSZWdpb25BbGxvY2F0b3IqIHJlc3VsdCA9IG51bGxwdHI7CisgICAgICAgIGZv
ckVhY2hBbGxvY2F0b3IoWyZdIChSZWdpb25BbGxvY2F0b3ImIGFsbG9jYXRvcikgeworICAgICAg
ICAgICAgaWYgKGFsbG9jYXRvci5zdGFydCA8PSBwdHIgJiYgcHRyIDwgYWxsb2NhdG9yLmVuZCkg
eworICAgICAgICAgICAgICAgIHJlc3VsdCA9ICZhbGxvY2F0b3I7CisgICAgICAgICAgICAgICAg
cmV0dXJuIEl0ZXJhdGlvblN0YXR1czo6RG9uZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IHJldHVybiBJdGVyYXRpb25TdGF0dXM6OkNvbnRpbnVlOworICAgICAgICB9KTsKKyAgICAgICAg
cmV0dXJuIHJlc3VsdDsKICAgICB9CiAKLSAgICB2b2lkIG5vdGlmeU5lZWRQYWdlKHZvaWQqIHBh
Z2UsIHNpemVfdCBjb3VudCkgb3ZlcnJpZGUKKyAgICB2b2lkIGZyZWVJc2xhbmRzKElzbGFuZHMq
IGlzbGFuZHMpCiAgICAgewotICAgICAgICBtX3Jlc2VydmF0aW9uLmNvbW1pdChwYWdlLCBwYWdl
U2l6ZSgpICogY291bnQpOworICAgICAgICBmb3IgKHZvaWQqIGp1bXBJc2xhbmQgOiBpc2xhbmRz
LT5qdW1wSXNsYW5kcykgeworICAgICAgICAgICAgUmVnaW9uQWxsb2NhdG9yKiBhbGxvY2F0b3Ig
PSBmaW5kUmVnaW9uKGJpdHdpc2VfY2FzdDx1aW50cHRyX3Q+KGp1bXBJc2xhbmQpKTsKKyAgICAg
ICAgICAgIFJFTEVBU0VfQVNTRVJUKGFsbG9jYXRvcik7CisgICAgICAgICAgICBhbGxvY2F0b3It
PmZyZWVJc2xhbmQoYml0d2lzZV9jYXN0PHVpbnRwdHJfdD4oanVtcElzbGFuZCkpOworICAgICAg
ICB9CisKKyAgICAgICAgaXNsYW5kc0ZvckxvY2F0aW9uLnJlbW92ZShpc2xhbmRzKTsKKworICAg
ICAgICBkZWxldGUgaXNsYW5kczsKKyAgICB9CisKKyAgICB2b2lkKiBpc2xhbmRGb3JKdW1wTG9j
YXRpb24odWludHB0cl90IGp1bXBMb2NhdGlvbiwgdWludHB0cl90IG5ld1RhcmdldCkKKyAgICB7
CisgICAgICAgIGlmIChJc2xhbmRzKiBpc2xhbmRzID0gaXNsYW5kc0ZvckxvY2F0aW9uLmZpbmRF
eGFjdChiaXR3aXNlX2Nhc3Q8dm9pZCo+KGp1bXBMb2NhdGlvbikpKSB7CisgICAgICAgICAgICAv
LyBGSVhNRTogV2UgY291bGQgY3JlYXRlIHNvbWUgbWV0aG9kIG9mIHJldXNpbmcgYWxyZWFkeSBh
bGxvY2F0ZWQgaXNsYW5kcyBoZXJlLCBidXQgaXQncworICAgICAgICAgICAgLy8gdW5saWtlbHkg
dG8gbWF0dGVyIGluIHByYWN0aWNlLgorICAgICAgICAgICAgZnJlZUlzbGFuZHMoaXNsYW5kcyk7
CisgICAgICAgIH0KKworICAgICAgICAvL2RhdGFMb2dMbigibWFraW5nIGlzbGFuZHMgZm9yIGp1
bXBMb2NhdGlvbj0iLCBqdW1wTG9jYXRpb24sICIgdGFyZ2V0PSIsIG5ld1RhcmdldCk7CisKKyAg
ICAgICAgSXNsYW5kcyogaXNsYW5kcyA9IG5ldyBJc2xhbmRzOzsKKyAgICAgICAgaXNsYW5kcy0+
cm9vdEp1bXBMb2NhdGlvbiA9IGJpdHdpc2VfY2FzdDx2b2lkKj4oanVtcExvY2F0aW9uKTsKKyAg
ICAgICAgaXNsYW5kc0ZvckxvY2F0aW9uLmluc2VydChpc2xhbmRzKTsKKworICAgICAgICBSZWdp
b25BbGxvY2F0b3IqIGFsbG9jYXRvciA9IGZpbmRSZWdpb24oanVtcExvY2F0aW9uID4gbmV3VGFy
Z2V0ID8ganVtcExvY2F0aW9uIC0gcmVnaW9uU2l6ZSA6IGp1bXBMb2NhdGlvbik7CisgICAgICAg
IFJFTEVBU0VfQVNTRVJUKGFsbG9jYXRvcik7CisgICAgICAgIHZvaWQqIHJlc3VsdCA9IGFsbG9j
YXRvci0+YWxsb2NhdGVJc2xhbmQoKTsKKyAgICAgICAgdm9pZCogY3VycmVudElzbGFuZCA9IHJl
c3VsdDsKKyAgICAgICAganVtcExvY2F0aW9uID0gYml0d2lzZV9jYXN0PHVpbnRwdHJfdD4oY3Vy
cmVudElzbGFuZCk7CisgICAgICAgIHdoaWxlICh0cnVlKSB7CisgICAgICAgICAgICBpc2xhbmRz
LT5qdW1wSXNsYW5kcy5hcHBlbmQoY3VycmVudElzbGFuZCk7CisKKyAgICAgICAgICAgIGF1dG8g
ZW1pdEp1bXBUbyA9IFsmXSAodm9pZCogdGFyZ2V0KSB7CisgICAgICAgICAgICAgICAgLy9kYXRh
TG9nTG4oImVtaXR0aW5nIGp1bXAgZnJvbT0iLCBqdW1wTG9jYXRpb24sICIgdG89IiwgYml0d2lz
ZV9jYXN0PHVpbnRwdHJfdD4odGFyZ2V0KSk7CisgICAgICAgICAgICAgICAgaW50cHRyX3QgZGlm
ZiA9IChzdGF0aWNfY2FzdDxpbnRwdHJfdD4oanVtcExvY2F0aW9uKSAtIGJpdHdpc2VfY2FzdDxp
bnRwdHJfdD4odGFyZ2V0KSkgPj4gMjsKKyAgICAgICAgICAgICAgICAvL2lmICghaXNJbnQ8MjY+
KGRpZmYpKQorICAgICAgICAgICAgICAgIC8vICAgIGRhdGFMb2dMbigibm90IGludDI2LiBqdW1w
TG9jYXRpb249IiwganVtcExvY2F0aW9uLCAiIHRhcmdldD0iLCBiaXR3aXNlX2Nhc3Q8dWludHB0
cl90Pih0YXJnZXQpKTsKKyAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChpc0ludDwyNj4o
ZGlmZikpOworCisgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzIGppdDsKKyAgICAgICAgICAg
ICAgICBhdXRvIGp1bXAgPSBqaXQuanVtcCgpOworICAgICAgICAgICAgICAgIExpbmtCdWZmZXIg
bGlua0J1ZmZlcihqaXQsIE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxOb1B0clRhZz4oY3VycmVudElz
bGFuZCksIGlzbGFuZFNpemVJbkJ5dGVzLCBKSVRDb21waWxhdGlvbk11c3RTdWNjZWVkLCBmYWxz
ZSk7CisgICAgICAgICAgICAgICAgbGlua0J1ZmZlci5saW5rKGp1bXAsIENvZGVMb2NhdGlvbkxh
YmVsPE5vUHRyVGFnPih0YXJnZXQpKTsKKyAgICAgICAgICAgICAgICBGSU5BTElaRV9DT0RFKGxp
bmtCdWZmZXIsIE5vUHRyVGFnLCAiSnVtcCBJc2xhbmQ6ICVsdSIsIGp1bXBMb2NhdGlvbik7Cisg
ICAgICAgICAgICB9OworCisgICAgICAgICAgICBpbnRwdHJfdCBkaWZmID0gKHN0YXRpY19jYXN0
PGludHB0cl90PihqdW1wTG9jYXRpb24pIC0gYml0d2lzZV9jYXN0PGludHB0cl90PihuZXdUYXJn
ZXQpKSA+PiAyOworICAgICAgICAgICAgaWYgKGlzSW50PDI2PihkaWZmKSkgeworICAgICAgICAg
ICAgICAgIGVtaXRKdW1wVG8oYml0d2lzZV9jYXN0PHZvaWQqPihuZXdUYXJnZXQpKTsKKyAgICAg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLy9kYXRhTG9n
TG4oImxvb2tpbmcgZm9yIG5leHQgaXNsYW5kIHJlZ2lvbiIpOworICAgICAgICAgICAgdWludHB0
cl90IG5leHRJc2xhbmRSZWdpb247CisgICAgICAgICAgICBpZiAoanVtcExvY2F0aW9uID4gbmV3
VGFyZ2V0KQorICAgICAgICAgICAgICAgIG5leHRJc2xhbmRSZWdpb24gPSBqdW1wTG9jYXRpb24g
LSByZWdpb25TaXplOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIG5leHRJc2xh
bmRSZWdpb24gPSBqdW1wTG9jYXRpb24gKyByZWdpb25TaXplOworCisgICAgICAgICAgICBSZWdp
b25BbGxvY2F0b3IqIGFsbG9jYXRvciA9IGZpbmRSZWdpb24obmV4dElzbGFuZFJlZ2lvbik7Cisg
ICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChhbGxvY2F0b3IpOworICAgICAgICAgICAgdm9pZCog
bmV4dElzbGFuZCA9IGFsbG9jYXRvci0+YWxsb2NhdGVJc2xhbmQoKTsKKyAgICAgICAgICAgIGVt
aXRKdW1wVG8obmV4dElzbGFuZCk7CisgICAgICAgICAgICBqdW1wTG9jYXRpb24gPSBiaXR3aXNl
X2Nhc3Q8dWludHB0cl90PihuZXh0SXNsYW5kKTsKKyAgICAgICAgICAgIGN1cnJlbnRJc2xhbmQg
PSBuZXh0SXNsYW5kOworICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICB9
CiAKLSAgICB2b2lkIG5vdGlmeVBhZ2VJc0ZyZWUodm9pZCogcGFnZSwgc2l6ZV90IGNvdW50KSBv
dmVycmlkZQorcHVibGljOgorCisgICAgdm9pZCogbWFrZUlzbGFuZCh1aW50cHRyX3QganVtcExv
Y2F0aW9uLCB1aW50cHRyX3QgbmV3VGFyZ2V0KQogICAgIHsKLSAgICAgICAgbV9yZXNlcnZhdGlv
bi5kZWNvbW1pdChwYWdlLCBwYWdlU2l6ZSgpICogY291bnQpOworICAgICAgICBhdXRvIGxvY2tI
b2xkZXIgPSBob2xkTG9jayhnZXRMb2NrKCkpOworCisgICAgICAgIHJldHVybiBpc2xhbmRGb3JK
dW1wTG9jYXRpb24oanVtcExvY2F0aW9uLCBuZXdUYXJnZXQpOwogICAgIH0KKyNlbmRpZgogCiBw
cml2YXRlOgorICAgIGNsYXNzIEFsbG9jYXRvciA6IHB1YmxpYyBNZXRhQWxsb2NhdG9yIHsKKyAg
ICAgICAgdXNpbmcgQmFzZSA9IE1ldGFBbGxvY2F0b3I7CisgICAgcHVibGljOgorICAgICAgICBB
bGxvY2F0b3IoRml4ZWRWTVBvb2xFeGVjdXRhYmxlQWxsb2NhdG9yJiBhbGxvY2F0b3IpCisgICAg
ICAgICAgICA6IEJhc2UoYWxsb2NhdG9yLmdldExvY2soKSwgaml0QWxsb2NhdGlvbkdyYW51bGUs
IHBhZ2VTaXplKCkpIC8vIHJvdW5kIHVwIGFsbCBhbGxvY2F0aW9ucyB0byAzMiBieXRlcworICAg
ICAgICAgICAgLCBtX2ZpeGVkQWxsb2NhdG9yKGFsbG9jYXRvcikKKyAgICAgICAgeworICAgICAg
ICB9CisKKyAgICAgICAgRnJlZVNwYWNlUHRyIGFsbG9jYXRlTmV3U3BhY2Uoc2l6ZV90Jikgb3Zl
cnJpZGUKKyAgICAgICAgeworICAgICAgICAgICAgLy8gV2UncmUgb3BlcmF0aW5nIGluIGEgZml4
ZWQgcG9vbCwgc28gbmV3IGFsbG9jYXRpb24gaXMgYWx3YXlzIHByb2hpYml0ZWQuCisgICAgICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgfQorCisgICAgICAgIHZvaWQgbm90aWZ5TmVl
ZFBhZ2Uodm9pZCogcGFnZSwgc2l6ZV90IGNvdW50KSBvdmVycmlkZQorICAgICAgICB7CisgICAg
ICAgICAgICBtX2ZpeGVkQWxsb2NhdG9yLm1fcmVzZXJ2YXRpb24uY29tbWl0KHBhZ2UsIHBhZ2VT
aXplKCkgKiBjb3VudCk7CisgICAgICAgIH0KKworICAgICAgICB2b2lkIG5vdGlmeVBhZ2VJc0Zy
ZWUodm9pZCogcGFnZSwgc2l6ZV90IGNvdW50KSBvdmVycmlkZQorICAgICAgICB7CisgICAgICAg
ICAgICBtX2ZpeGVkQWxsb2NhdG9yLm1fcmVzZXJ2YXRpb24uZGVjb21taXQocGFnZSwgcGFnZVNp
emUoKSAqIGNvdW50KTsKKyAgICAgICAgfQorCisgICAgICAgIEZpeGVkVk1Qb29sRXhlY3V0YWJs
ZUFsbG9jYXRvciYgbV9maXhlZEFsbG9jYXRvcjsKKyAgICB9OworCisjaWYgQ1BVKEFSTTY0KSAv
LyBPT1BTOiBjYW4ndCBkbyB0aGlzIGZvciBhcm02NF8zMgorICAgIGNsYXNzIFJlZ2lvbkFsbG9j
YXRvciBmaW5hbCA6IHB1YmxpYyBBbGxvY2F0b3IgeworICAgICAgICB1c2luZyBCYXNlID0gQWxs
b2NhdG9yOworICAgIHB1YmxpYzoKKyAgICAgICAgUmVnaW9uQWxsb2NhdG9yKEZpeGVkVk1Qb29s
RXhlY3V0YWJsZUFsbG9jYXRvciYgYWxsb2NhdG9yKQorICAgICAgICAgICAgOiBCYXNlKGFsbG9j
YXRvcikKKyAgICAgICAgeworICAgICAgICB9CisKKyAgICAgICAgLy8gIC0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAgICAvLyAgfCBhbGxvY2F0b3IgLS0+ICAgICA8
LS0gaXNsYW5kICAgICAgfAorICAgICAgICAvLyAgfCAgICAgICAgICAgICBeICAgICBeICAgICAg
ICAgICAgICAgfAorICAgICAgICAvLyAgfCAgICAgICAgICAgICB8ICAgICB8ICAgICAgICAgICAg
ICAgfAorICAgICAgICAvLyAgfCBhbGxvY2F0b3JTaXplICAgICByZXNlcnZlZElzbGFuZHMgfAor
ICAgICAgICAvLyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAg
ICAvLyAgYWxsb2NhdG9yRW5kIDw9IGlzbGFuZCBiZWdpbgorCisgICAgICAgIHVpbnRwdHJfdCBp
c2xhbmRCZWdpbigpCisgICAgICAgIHsKKyAgICAgICAgICAgIC8vIFtzdGFydCwgYWxsb2NhdG9y
RW5kKQorICAgICAgICAgICAgcmV0dXJuIGVuZCAtIGlzbGFuZFJlZ2lvblNpemU7CisgICAgICAg
IH0KKworICAgICAgICB1aW50cHRyX3QgYWxsb2NhdG9yU2l6ZSgpCisgICAgICAgIHsKKyAgICAg
ICAgICAgIHJldHVybiBpc2xhbmRCZWdpbigpIC0gc3RhcnQ7CisgICAgICAgIH0KKworICAgICAg
ICBzaXplX3QgaXNsYW5kc1BlclBhZ2UoKQorICAgICAgICB7CisgICAgICAgICAgICBzaXplX3Qg
aXNsYW5kc1BlclBhZ2UgPSBwYWdlU2l6ZSgpIC8gaXNsYW5kU2l6ZUluQnl0ZXM7CisgICAgICAg
ICAgICBBU1NFUlQoaXNsYW5kc1BlclBhZ2UgKiBpc2xhbmRTaXplSW5CeXRlcyA9PSBwYWdlU2l6
ZSgpKTsgLy8gd2UgcmVseSBvbiBwZXJmZWN0IGRpdmlzaW9uIGZvciBmaW5kaW5nIHdoaWNoIGJp
dCBhIHBvaW50ZXIgaXMuCisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChpc1Bvd2VyT2ZUd28o
aXNsYW5kc1BlclBhZ2UpKTsKKyAgICAgICAgICAgIHJldHVybiBpc2xhbmRzUGVyUGFnZTsKKyAg
ICAgICAgfQorCisgICAgICAgIHZvaWQgcmVsZWFzZShjb25zdCBMb2NrSG9sZGVyJiBsb2NrZXIs
IE1ldGFBbGxvY2F0b3JIYW5kbGUmIGhhbmRsZSkgZmluYWwKKyAgICAgICAgeworICAgICAgICAg
ICAgbV9maXhlZEFsbG9jYXRvci5oYW5kbGVXaWxsQmVSZWxlYXNlZChsb2NrZXIsIGhhbmRsZSk7
CisKKyAgICAgICAgICAgIEJhc2U6OnJlbGVhc2UobG9ja2VyLCBoYW5kbGUpOworICAgICAgICB9
CisKKyAgICAgICAgdm9pZCogYWxsb2NhdGVJc2xhbmQoKQorICAgICAgICB7CisgICAgICAgICAg
ICBhdXRvIGZpbmRSZXN1bHQgPSBbJl0gKCkgLT4gdm9pZCogeworICAgICAgICAgICAgICAgIHNp
emVfdCByZXN1bHRCaXQgPSBpc2xhbmRCaXRzLmZpbmRDbGVhckJpdCgwKTsKKyAgICAgICAgICAg
ICAgICBpZiAocmVzdWx0Qml0ID09IGlzbGFuZEJpdHMuc2l6ZSgpKQorICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgICAgICAgICBpc2xhbmRCaXRzW3Jlc3VsdEJp
dF0gPSB0cnVlOworICAgICAgICAgICAgICAgIHVpbnRwdHJfdCByZXN1bHQgPSBlbmQgLSAoKHJl
c3VsdEJpdCArIDEpICogaXNsYW5kU2l6ZUluQnl0ZXMpOyAKKyAgICAgICAgICAgICAgICByZXR1
cm4gYml0d2lzZV9jYXN0PHZvaWQqPihyZXN1bHQpOworICAgICAgICAgICAgfTsKKworICAgICAg
ICAgICAgaWYgKHZvaWQqIHJlc3VsdCA9IGZpbmRSZXN1bHQoKSkKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gcmVzdWx0OworCisgICAgICAgICAgICBpc2xhbmRCaXRzLnJlc2l6ZShpc2xhbmRCaXRz
LnNpemUoKSArIGlzbGFuZHNQZXJQYWdlKCkpOworICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQo
aXNsYW5kQml0cy5zaXplKCkgPD0gbWF4SXNsYW5kc1BlclJlZ2lvbik7IAorCisgICAgICAgICAg
ICAvL2RhdGFMb2dMbigicmVnaW9uOiBbIiwgc3RhcnQsICIsICIsIGVuZCwgIikiKTsKKworICAg
ICAgICAgICAgdWludHB0cl90IHBhZ2VCZWdpbiA9IGVuZCAtIChpc2xhbmRCaXRzLnNpemUoKSAq
IGlzbGFuZFNpemVJbkJ5dGVzKTsgLy8gW2lzbGFuZEJlZ2luLCBlbmQpCisgICAgICAgICAgICAv
L2RhdGFMb2dMbigiY29tbWl0dGluZzogIiwgcGFnZUJlZ2luKTsKKyAgICAgICAgICAgIG1fZml4
ZWRBbGxvY2F0b3IubV9yZXNlcnZhdGlvbi5jb21taXQoYml0d2lzZV9jYXN0PHZvaWQqPihwYWdl
QmVnaW4pLCBwYWdlU2l6ZSgpKTsKKyAgICAgICAgICAgIHZvaWQqIHJlc3VsdCA9IGZpbmRSZXN1
bHQoKTsKKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKHJlc3VsdCk7CisgICAgICAgICAgICBy
ZXR1cm4gcmVzdWx0OworICAgICAgICB9CisKKyAgICAgICAgdm9pZCBmcmVlSXNsYW5kKHVpbnRw
dHJfdCBpc2xhbmQpCisgICAgICAgIHsKKyAgICAgICAgICAgIC8vZGF0YUxvZ0xuKCJJc2xhbmQ6
IFsiLCBpc2xhbmRCZWdpbigpLCAiLCAiLCBlbmQsICIpIik7CisgICAgICAgICAgICAvL2RhdGFM
b2dMbigiZnJlZWluZyBpc2xhbmQ6ICIsIGlzbGFuZCk7CisgICAgICAgICAgICBSRUxFQVNFX0FT
U0VSVChpc2xhbmRCZWdpbigpIDw9IGlzbGFuZCAmJiBpc2xhbmQgPCBlbmQpOworICAgICAgICAg
ICAgc2l6ZV90IGJpdCA9ICgoZW5kIC0gaXNsYW5kKSAvIGlzbGFuZFNpemVJbkJ5dGVzKSAtIDE7
CisgICAgICAgICAgICAvL2RhdGFMb2dMbigiYml0ICIsIGJpdCwgIiA9ICIsICEhaXNsYW5kQml0
c1tiaXRdKTsKKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKCEhaXNsYW5kQml0c1tiaXRdKTsK
KyAgICAgICAgICAgIGlzbGFuZEJpdHNbYml0XSA9IGZhbHNlOworICAgICAgICB9CisKKyAgICAg
ICAgLy8gW3N0YXJ0LCBlbmQpCisgICAgICAgIHVpbnRwdHJfdCBzdGFydDsKKyAgICAgICAgdWlu
dHB0cl90IGVuZDsKKworICAgICAgICBzaXplX3QgbnVtQWxsb2NhdGVkSXNsYW5kcyB7IDAgfTsg
Ly8gPD0gbnVtUmVzZXJ2ZWRJc2xhbmRzCisgICAgICAgIEZhc3RCaXRWZWN0b3IgaXNsYW5kQml0
czsKKyAgICB9OworI2VuZGlmCisKKyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgRnVuY3Rpb24+Cisg
ICAgdm9pZCBmb3JFYWNoQWxsb2NhdG9yKEZ1bmN0aW9uIGZ1bmN0aW9uKQorICAgIHsKKyNpZiBD
UFUoQVJNNjQpCisgICAgICAgIGZvciAoUmVnaW9uQWxsb2NhdG9yJiBhbGxvY2F0b3IgOiBtX2Fs
bG9jYXRvcnMpIHsKKyAgICAgICAgICAgIHVzaW5nIEZ1bmN0aW9uUmVzdWx0VHlwZSA9IGRlY2x0
eXBlKGZ1bmN0aW9uKGFsbG9jYXRvcikpOworICAgICAgICAgICAgaWYgY29uc3RleHByIChzdGQ6
OmlzX3NhbWU8SXRlcmF0aW9uU3RhdHVzLCBGdW5jdGlvblJlc3VsdFR5cGU+Ojp2YWx1ZSkgewor
ICAgICAgICAgICAgICAgIGlmIChmdW5jdGlvbihhbGxvY2F0b3IpID09IEl0ZXJhdGlvblN0YXR1
czo6RG9uZSkKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9IGVsc2Ug
eworICAgICAgICAgICAgICAgIHN0YXRpY19hc3NlcnQoc3RkOjppc19zYW1lPHZvaWQsIEZ1bmN0
aW9uUmVzdWx0VHlwZT46OnZhbHVlKTsKKyAgICAgICAgICAgICAgICBmdW5jdGlvbihhbGxvY2F0
b3IpOworICAgICAgICAgICAgfQorICAgICAgICB9CisjZWxzZQorICAgICAgICBmdW5jdGlvbiht
X2FsbG9jYXRvcik7CisjZW5kaWYKKyAgICB9CisKKyNpZiBDUFUoQVJNNjQpCisgICAgY2xhc3Mg
SXNsYW5kcyA6IHB1YmxpYyBSZWRCbGFja1RyZWU8SXNsYW5kcywgdm9pZCo+OjpOb2RlIHsKKyAg
ICAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CisgICAgcHVibGljOgorICAgICAgICB2b2lk
KiBrZXkoKSB7IHJldHVybiByb290SnVtcExvY2F0aW9uOyB9CisgICAgICAgIHZvaWQqIHJvb3RK
dW1wTG9jYXRpb247CisgICAgICAgIFZlY3Rvcjx2b2lkKj4ganVtcElzbGFuZHM7CisgICAgfTsK
KworICAgIFJlZEJsYWNrVHJlZTxJc2xhbmRzLCB2b2lkKj4gaXNsYW5kc0ZvckxvY2F0aW9uOwor
I2VuZGlmCisKKyAgICBMb2NrIG1fbG9jazsKICAgICBQYWdlUmVzZXJ2YXRpb24gbV9yZXNlcnZh
dGlvbjsKKyNpZiBDUFUoQVJNNjQpCisgICAgc3RkOjphcnJheTxSZWdpb25BbGxvY2F0b3IsIG51
bWJlck9mUmVnaW9ucz4gbV9hbGxvY2F0b3JzOworI2Vsc2UKKyAgICBBbGxvY2F0b3IgbV9hbGxv
Y2F0b3I7CisjZW5kaWYKIH07CiAKLUZpeGVkVk1Qb29sRXhlY3V0YWJsZUFsbG9jYXRvcjo6fkZp
eGVkVk1Qb29sRXhlY3V0YWJsZUFsbG9jYXRvcigpCi17Ci0gICAgbV9yZXNlcnZhdGlvbi5kZWFs
bG9jYXRlKCk7Ci19Ci0KIC8vIEtlZXAgdGhpcyBwb2ludGVyIGluIGEgbXV0YWJsZSBnbG9iYWwg
dmFyaWFibGUgdG8gaGVscCBMZWFrcyBmaW5kIGl0LgogLy8gQnV0IHdlIGRvIG5vdCB1c2UgdGhp
cyBwb2ludGVyLgogc3RhdGljIEZpeGVkVk1Qb29sRXhlY3V0YWJsZUFsbG9jYXRvciogZ2xvYmFs
Rml4ZWRWTVBvb2xFeGVjdXRhYmxlQWxsb2NhdG9yVG9Xb3JrQXJvdW5kTGVha3MgPSBudWxscHRy
OwpAQCAtNDE3LDcgKzgwMCw2IEBAIHZvaWQgRXhlY3V0YWJsZUFsbG9jYXRvcjo6aW5pdGlhbGl6
ZVVuZGUKICAgICBSRUxFQVNFX0FTU0VSVCghZ19qc2NDb25maWcuZml4ZWRWTVBvb2xFeGVjdXRh
YmxlQWxsb2NhdG9yKTsKICAgICBnX2pzY0NvbmZpZy5maXhlZFZNUG9vbEV4ZWN1dGFibGVBbGxv
Y2F0b3IgPSBuZXcgRml4ZWRWTVBvb2xFeGVjdXRhYmxlQWxsb2NhdG9yKCk7CiAgICAgZ2xvYmFs
Rml4ZWRWTVBvb2xFeGVjdXRhYmxlQWxsb2NhdG9yVG9Xb3JrQXJvdW5kTGVha3MgPSBnX2pzY0Nv
bmZpZy5maXhlZFZNUG9vbEV4ZWN1dGFibGVBbGxvY2F0b3I7Ci0gICAgQ29kZVByb2ZpbGluZzo6
bm90aWZ5QWxsb2NhdG9yKGdfanNjQ29uZmlnLmZpeGVkVk1Qb29sRXhlY3V0YWJsZUFsbG9jYXRv
cik7CiB9CiAKIGJvb2wgRXhlY3V0YWJsZUFsbG9jYXRvcjo6aXNWYWxpZCgpIGNvbnN0CkBAIC00
MjUsNyArODA3LDcgQEAgYm9vbCBFeGVjdXRhYmxlQWxsb2NhdG9yOjppc1ZhbGlkKCkgY29ucwog
ICAgIEZpeGVkVk1Qb29sRXhlY3V0YWJsZUFsbG9jYXRvciogYWxsb2NhdG9yID0gZ19qc2NDb25m
aWcuZml4ZWRWTVBvb2xFeGVjdXRhYmxlQWxsb2NhdG9yOwogICAgIGlmICghYWxsb2NhdG9yKQog
ICAgICAgICByZXR1cm4gQmFzZTo6aXNWYWxpZCgpOwotICAgIHJldHVybiAhIWFsbG9jYXRvci0+
Ynl0ZXNSZXNlcnZlZCgpOworICAgIHJldHVybiBhbGxvY2F0b3ItPmlzVmFsaWQoKTsKIH0KIAog
Ym9vbCBFeGVjdXRhYmxlQWxsb2NhdG9yOjp1bmRlck1lbW9yeVByZXNzdXJlKCkKQEAgLTQ1Niwx
MSArODM4LDExIEBAIGRvdWJsZSBFeGVjdXRhYmxlQWxsb2NhdG9yOjptZW1vcnlQcmVzc3UKICAg
ICByZXR1cm4gcmVzdWx0OwogfQogCi1SZWZQdHI8RXhlY3V0YWJsZU1lbW9yeUhhbmRsZT4gRXhl
Y3V0YWJsZUFsbG9jYXRvcjo6YWxsb2NhdGUoc2l6ZV90IHNpemVJbkJ5dGVzLCB2b2lkKiBvd25l
clVJRCwgSklUQ29tcGlsYXRpb25FZmZvcnQgZWZmb3J0KQorUmVmUHRyPEV4ZWN1dGFibGVNZW1v
cnlIYW5kbGU+IEV4ZWN1dGFibGVBbGxvY2F0b3I6OmFsbG9jYXRlKHNpemVfdCBzaXplSW5CeXRl
cywgSklUQ29tcGlsYXRpb25FZmZvcnQgZWZmb3J0KQogewogICAgIEZpeGVkVk1Qb29sRXhlY3V0
YWJsZUFsbG9jYXRvciogYWxsb2NhdG9yID0gZ19qc2NDb25maWcuZml4ZWRWTVBvb2xFeGVjdXRh
YmxlQWxsb2NhdG9yOwogICAgIGlmICghYWxsb2NhdG9yKQotICAgICAgICByZXR1cm4gQmFzZTo6
YWxsb2NhdGUoc2l6ZUluQnl0ZXMsIG93bmVyVUlELCBlZmZvcnQpOworICAgICAgICByZXR1cm4g
QmFzZTo6YWxsb2NhdGUoc2l6ZUluQnl0ZXMsIGVmZm9ydCk7CiAgICAgaWYgKE9wdGlvbnM6Omxv
Z0V4ZWN1dGFibGVBbGxvY2F0aW9uKCkpIHsKICAgICAgICAgTWV0YUFsbG9jYXRvcjo6U3RhdGlz
dGljcyBzdGF0cyA9IGFsbG9jYXRvci0+Y3VycmVudFN0YXRpc3RpY3MoKTsKICAgICAgICAgZGF0
YUxvZygiQWxsb2NhdGluZyAiLCBzaXplSW5CeXRlcywgIiBieXRlcyBvZiBleGVjdXRhYmxlIG1l
bW9yeSB3aXRoICIsIHN0YXRzLmJ5dGVzQWxsb2NhdGVkLCAiIGJ5dGVzIGFsbG9jYXRlZCwgIiwg
c3RhdHMuYnl0ZXNSZXNlcnZlZCwgIiBieXRlcyByZXNlcnZlZCwgYW5kICIsIHN0YXRzLmJ5dGVz
Q29tbWl0dGVkLCAiIGNvbW1pdHRlZC5cbiIpOwpAQCAtNDg3LDcgKzg2OSw3IEBAIFJlZlB0cjxF
eGVjdXRhYmxlTWVtb3J5SGFuZGxlPiBFeGVjdXRhYmwKICAgICAgICAgfQogICAgIH0KIAotICAg
IFJlZlB0cjxFeGVjdXRhYmxlTWVtb3J5SGFuZGxlPiByZXN1bHQgPSBhbGxvY2F0b3ItPmFsbG9j
YXRlKHNpemVJbkJ5dGVzLCBvd25lclVJRCk7CisgICAgUmVmUHRyPEV4ZWN1dGFibGVNZW1vcnlI
YW5kbGU+IHJlc3VsdCA9IGFsbG9jYXRvci0+YWxsb2NhdGUoc2l6ZUluQnl0ZXMpOwogICAgIGlm
ICghcmVzdWx0KSB7CiAgICAgICAgIGlmIChlZmZvcnQgIT0gSklUQ29tcGlsYXRpb25DYW5GYWls
KSB7CiAgICAgICAgICAgICBkYXRhTG9nKCJSYW4gb3V0IG9mIGV4ZWN1dGFibGUgbWVtb3J5IHdo
aWxlIGFsbG9jYXRpbmcgIiwgc2l6ZUluQnl0ZXMsICIgYnl0ZXMuXG4iKTsKQEAgLTUzOSw2ICs5
MjEsMjEgQEAgdm9pZCBFeGVjdXRhYmxlQWxsb2NhdG9yOjpkdW1wUHJvZmlsZSgpCiB9CiAjZW5k
aWYKIAorI2lmIENQVShBUk02NCkKK3ZvaWQqIEV4ZWN1dGFibGVBbGxvY2F0b3I6OmdldEp1bXBJ
c2xhbmRUbyh2b2lkKiBmcm9tLCB2b2lkKiBvbGREZXN0aW5hdGlvbiwgdm9pZCogbmV3RGVzdGlu
YXRpb24pCit7CisgICAgRml4ZWRWTVBvb2xFeGVjdXRhYmxlQWxsb2NhdG9yKiBhbGxvY2F0b3Ig
PSBnX2pzY0NvbmZpZy5maXhlZFZNUG9vbEV4ZWN1dGFibGVBbGxvY2F0b3I7CisgICAgaWYgKCFh
bGxvY2F0b3IpIHsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsgLy8gT09Q
UzogaXMgdGhpcyBjb3JyZWN0PworICAgIH0KKyAgICAvL2ludHB0cl90IGRlbHRhID0gYml0d2lz
ZV9jYXN0PGludHB0cl90PihuZXdEZXN0aW5hdGlvbikgLSBiaXR3aXNlX2Nhc3Q8aW50cHRyX3Q+
KGZyb20pOworICAgIC8vZGF0YUxvZ0xuKCJnZXRKdW1wSXNsYW5kVG8gZGVsdGE6ICIsIHN0YXRp
Y19jYXN0PGRvdWJsZT4oZGVsdGEpLzEwMjQuMC8xMDI0LjAsICJNQiIpOworCisgICAgVU5VU0VE
X1BBUkFNKG9sZERlc3RpbmF0aW9uKTsgLy8gT09QUworICAgIHJldHVybiBhbGxvY2F0b3ItPm1h
a2VJc2xhbmQoYml0d2lzZV9jYXN0PHVpbnRwdHJfdD4oZnJvbSksIGJpdHdpc2VfY2FzdDx1aW50
cHRyX3Q+KG5ld0Rlc3RpbmF0aW9uKSk7Cit9CisjZW5kaWYKKwogdm9pZCogc3RhcnRPZkZpeGVk
RXhlY3V0YWJsZU1lbW9yeVBvb2xJbXBsKCkKIHsKICAgICBGaXhlZFZNUG9vbEV4ZWN1dGFibGVB
bGxvY2F0b3IqIGFsbG9jYXRvciA9IGdfanNjQ29uZmlnLmZpeGVkVk1Qb29sRXhlY3V0YWJsZUFs
bG9jYXRvcjsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvRXhlY3V0YWJsZUFsbG9j
YXRvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvRXhlY3V0YWJs
ZUFsbG9jYXRvci5oCShyZXZpc2lvbiAyNTc4NjYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L0V4ZWN1dGFibGVBbGxvY2F0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtNzEsNyArNzEsNyBA
QCBwdWJsaWM6CiAKICAgICBzdGF0aWMgdm9pZCBkdW1wUHJvZmlsZSgpIHsgfQogCi0gICAgUmVm
UHRyPEV4ZWN1dGFibGVNZW1vcnlIYW5kbGU+IGFsbG9jYXRlKHNpemVfdCwgdm9pZCosIEpJVENv
bXBpbGF0aW9uRWZmb3J0KSB7IHJldHVybiBudWxscHRyOyB9CisgICAgUmVmUHRyPEV4ZWN1dGFi
bGVNZW1vcnlIYW5kbGU+IGFsbG9jYXRlKHNpemVfdCwgSklUQ29tcGlsYXRpb25FZmZvcnQpIHsg
cmV0dXJuIG51bGxwdHI7IH0KIAogICAgIHN0YXRpYyB2b2lkIHNldEpJVEVuYWJsZWQoYm9vbCkg
eyB9OwogICAgIApAQCAtMTc2LDcgKzE3Niw3IEBAIHB1YmxpYzoKICAgICAKICAgICBKU19FWFBP
UlRfUFJJVkFURSBzdGF0aWMgdm9pZCBzZXRKSVRFbmFibGVkKGJvb2wpOwogCi0gICAgUmVmUHRy
PEV4ZWN1dGFibGVNZW1vcnlIYW5kbGU+IGFsbG9jYXRlKHNpemVfdCBzaXplSW5CeXRlcywgdm9p
ZCogb3duZXJVSUQsIEpJVENvbXBpbGF0aW9uRWZmb3J0KTsKKyAgICBSZWZQdHI8RXhlY3V0YWJs
ZU1lbW9yeUhhbmRsZT4gYWxsb2NhdGUoc2l6ZV90IHNpemVJbkJ5dGVzLCBKSVRDb21waWxhdGlv
bkVmZm9ydCk7CiAKICAgICBib29sIGlzVmFsaWRFeGVjdXRhYmxlTWVtb3J5KGNvbnN0IEFic3Ry
YWN0TG9ja2VyJiwgdm9pZCogYWRkcmVzcyk7CiAKQEAgLTE4NCw2ICsxODQsMTAgQEAgcHVibGlj
OgogCiAgICAgTG9jayYgZ2V0TG9jaygpIGNvbnN0OwogCisjaWYgQ1BVKEFSTTY0KQorICAgIHZv
aWQqIGdldEp1bXBJc2xhbmRUbyh2b2lkKiBmcm9tLCB2b2lkKiBvbGREZXN0aW5hdGlvbiwgdm9p
ZCogbmV3RGVzdGluYXRpb24pOworI2VuZGlmCisKIHByaXZhdGU6CiAgICAgRXhlY3V0YWJsZUFs
bG9jYXRvcigpID0gZGVmYXVsdDsKICAgICB+RXhlY3V0YWJsZUFsbG9jYXRvcigpID0gZGVmYXVs
dDsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbW1vblNsb3dQYXRocy5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29tbW9uU2xv
d1BhdGhzLmNwcAkocmV2aXNpb24gMjU3ODY2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvQ29tbW9uU2xvd1BhdGhzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzIsNyArMzIsNiBA
QAogI2luY2x1ZGUgIkJ5dGVjb2RlU3RydWN0cy5oIgogI2luY2x1ZGUgIkNhbGxGcmFtZS5oIgog
I2luY2x1ZGUgIkNsb25lZEFyZ3VtZW50cy5oIgotI2luY2x1ZGUgIkNvZGVQcm9maWxpbmcuaCIK
ICNpbmNsdWRlICJEZWZpbmVQcm9wZXJ0eUF0dHJpYnV0ZXMuaCIKICNpbmNsdWRlICJEaXJlY3RB
cmd1bWVudHMuaCIKICNpbmNsdWRlICJFcnJvci5oIgpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvQ29tcGxldGlvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvQ29tcGxldGlvbi5jcHAJKHJldmlzaW9uIDI1Nzg2NikKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbXBsZXRpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0yNyw3ICsyNyw2IEBACiAjaW5jbHVkZSAiQ2FsbEZyYW1lLmgiCiAjaW5jbHVkZSAiQ2F0Y2hT
Y29wZS5oIgogI2luY2x1ZGUgIkNvZGVDYWNoZS5oIgotI2luY2x1ZGUgIkNvZGVQcm9maWxpbmcu
aCIKICNpbmNsdWRlICJFeGNlcHRpb24uaCIKICNpbmNsdWRlICJJZGVudGlmaWVySW5saW5lcy5o
IgogI2luY2x1ZGUgIkludGVycHJldGVyLmgiCkBAIC0xMzgsOCArMTM3LDYgQEAgSlNWYWx1ZSBl
dmFsdWF0ZShKU0dsb2JhbE9iamVjdCogZ2xvYmFsTwogICAgIFJFTEVBU0VfQVNTRVJUKHZtLmF0
b21TdHJpbmdUYWJsZSgpID09IFRocmVhZDo6Y3VycmVudCgpLmF0b21TdHJpbmdUYWJsZSgpKTsK
ICAgICBSRUxFQVNFX0FTU0VSVCghdm0uaXNDb2xsZWN0b3JCdXN5T25DdXJyZW50VGhyZWFkKCkp
OwogCi0gICAgQ29kZVByb2ZpbGluZyBwcm9maWxlKHNvdXJjZSk7Ci0KICAgICBpZiAoIXRoaXNW
YWx1ZSB8fCB0aGlzVmFsdWUuaXNVbmRlZmluZWRPck51bGwoKSkKICAgICAgICAgdGhpc1ZhbHVl
ID0gZ2xvYmFsT2JqZWN0OwogICAgIEpTT2JqZWN0KiB0aGlzT2JqID0ganNDYXN0PEpTT2JqZWN0
Kj4odGhpc1ZhbHVlLnRvVGhpcyhnbG9iYWxPYmplY3QsIE5vdFN0cmljdE1vZGUpKTsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTW9kdWxlTG9hZGVyLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU01vZHVsZUxvYWRlci5jcHAJ
KHJldmlzaW9uIDI1Nzg2NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTW9k
dWxlTG9hZGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjksNyArMjksNiBAQAogCiAjaW5jbHVk
ZSAiQnVpbHRpbk5hbWVzLmgiCiAjaW5jbHVkZSAiQ2F0Y2hTY29wZS5oIgotI2luY2x1ZGUgIkNv
ZGVQcm9maWxpbmcuaCIKICNpbmNsdWRlICJFcnJvci5oIgogI2luY2x1ZGUgIkV4Y2VwdGlvbi5o
IgogI2luY2x1ZGUgIkpTQ0lubGluZXMuaCIKQEAgLTQwMCw4ICszOTksNiBAQCBFbmNvZGVkSlNW
YWx1ZSBKU0NfSE9TVF9DQUxMIG1vZHVsZUxvYWRlCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjpl
bmNvZGUoSlNXZWJBc3NlbWJseTo6aW5zdGFudGlhdGUoZ2xvYmFsT2JqZWN0LCBwcm9taXNlLCBt
b2R1bGVLZXksIGpzU291cmNlQ29kZSkpOwogI2VuZGlmCiAKLSAgICBDb2RlUHJvZmlsaW5nIHBy
b2ZpbGUoc291cmNlQ29kZSk7Ci0KICAgICBQYXJzZXJFcnJvciBlcnJvcjsKICAgICBzdGQ6OnVu
aXF1ZV9wdHI8TW9kdWxlUHJvZ3JhbU5vZGU+IG1vZHVsZVByb2dyYW1Ob2RlID0gcGFyc2U8TW9k
dWxlUHJvZ3JhbU5vZGU+KAogICAgICAgICB2bSwgc291cmNlQ29kZSwgSWRlbnRpZmllcigpLCBK
U1BhcnNlckJ1aWx0aW5Nb2RlOjpOb3RCdWlsdGluLApJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvT3B0aW9uc0xpc3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9PcHRpb25zTGlzdC5oCShyZXZpc2lvbiAyNTc4NjYpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25zTGlzdC5oCSh3b3JraW5nIGNvcHkpCkBAIC01
MDAsNiArNTAwLDcgQEAgY29uc3RleHByIGJvb2wgZW5hYmxlV2ViQXNzZW1ibHlTdHJlYW1pbgog
ICAgIHYoQm9vbCwgZm9yY2VPU1JFeGl0VG9MTEludCwgZmFsc2UsIE5vcm1hbCwgIklmIHRydWUs
IHdlIGFsd2F5cyBleGl0IHRvIHRoZSBMTEludC4gSWYgZmFsc2UsIHdlIGV4aXQgdG8gd2hhdGV2
ZXIgaXMgbW9zdCBjb252ZW5pZW50LiIpIFwKICAgICB2KFVuc2lnbmVkLCBnZXRCeVZhbElDTWF4
TnVtYmVyT2ZJZGVudGlmaWVycywgNCwgTm9ybWFsLCAiTnVtYmVyIG9mIGlkZW50aWZpZXJzIHdl
IHNlZSBpbiB0aGUgTExJbnQgdGhhdCBjb3VsZCBjYXVzZSB1cyB0byBiYWlsIG9uIGdlbmVyYXRp
bmcgYW4gSUMgZm9yIGdldF9ieV92YWwuIikgXAogICAgIHYoQm9vbCwgdXNlQ2xhc3NGaWVsZHMs
IGZhbHNlLCBOb3JtYWwsICJJZiB0cnVlLCB0aGUgcGFyc2VyIHdpbGwgdW5kZXJzdGFuZCBkYXRh
IGZpZWxkcyBpbnNpZGUgY2xhc3Nlcy4iKSBcCisgICAgdihCb29sLCB1c2VSYW5kb21pemluZ0V4
ZWN1dGFibGVJc2xhbmRBbGxvY2F0aW9uLCBmYWxzZSwgTm9ybWFsLCAiRm9yIHRoZSBhcm02NCBF
eGVjdXRhYmxlQWxsb2NhdG9yLCBpZiB0cnVlLCBzZWxlY3Qgd2hpY2ggcmVnaW9uIHRvIHVzZSBy
YW5kb21seS4gVGhpcyBpcyB1c2VmdWwgZm9yIHRlc3RpbmcgdGhhdCBqdW1wIGlzbGFuZHMgd29y
ay4iKSBcCiAKIGVudW0gT3B0aW9uRXF1aXZhbGVuY2UgewogICAgIFNhbWVPcHRpb24sCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvdG9vbHMvQ29kZVByb2ZpbGUuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90b29scy9Db2RlUHJvZmlsZS5jcHAJKHJldmlzaW9u
IDI1Nzg2NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90b29scy9Db2RlUHJvZmlsZS5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTEsMTcyICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQot
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4gCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIkNv
ZGVQcm9maWxlLmgiCi0KLSNpbmNsdWRlICJDb2RlQmxvY2suaCIKLSNpbmNsdWRlICJDb2RlUHJv
ZmlsaW5nLmgiCi0jaW5jbHVkZSAiTGlua0J1ZmZlci5oIgotI2luY2x1ZGUgIlByb2ZpbGVUcmVl
Tm9kZS5oIgotI2luY2x1ZGUgPHd0Zi9TdGFja1RyYWNlLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQv
V1RGU3RyaW5nLmg+Ci0KLW5hbWVzcGFjZSBKU0MgewotCi0vLyBNYXAgZnJvbSBDb2RlVHlwZSBl
bnVtIHRvIGEgY29ycmVzcG9uZGluZyBuYW1lLgotc3RhdGljIGNvbnN0IGNoYXIqIGNvbnN0IHNf
Y29kZVR5cGVOYW1lc1tDb2RlUHJvZmlsZTo6TnVtYmVyT2ZDb2RlVHlwZXNdID0gewotICAgICJb
W0VuZ2luZUNvZGVdXSIsCi0gICAgIltbR2xvYmFsVGh1bmtdXSIsCi0gICAgIltbUmVnRXhwQ29k
ZV1dIiwKLSAgICAiW1tERkdKSVRdXSIsCi0gICAgIltbQmFzZWxpbmVPbmx5XV0iLAotICAgICJb
W0Jhc2VsaW5lUHJvZmlsZV1dIiwKLSAgICAiW1tCYXNlbGluZU9TUl1dIiwKLSAgICAiW1tFbmdp
bmVGcmFtZV1dIgotfTsKLQotLy8gSGVscGVyIGZ1bmN0aW9uLCB0cnVuY2F0ZSB0cmFjZXMgdG8g
cHJ1bmUgdGhlIG91dHB1dCAmIG1ha2UgdmVyeSB2ZXJib3NlIG1vZGUgYSBsaXR0bGUgbW9yZSBy
ZWFkYWJsZS4KLXN0YXRpYyBib29sIHRydW5jYXRlVHJhY2UoY29uc3QgY2hhciogc3ltYm9sTmFt
ZSkKLXsKLSAgICByZXR1cm4gIXN0cmNtcChzeW1ib2xOYW1lLCAiSlNDOjpCeXRlY29kZUdlbmVy
YXRvcjo6Z2VuZXJhdGUoKSIpCi0gICAgICAgIHx8ICFzdHJjbXAoc3ltYm9sTmFtZSwgIkpTQzo6
UGFyc2VyPEpTQzo6TGV4ZXI8dW5zaWduZWQgY2hhcj4+OjpwYXJzZUlubmVyKCkiKQotICAgICAg
ICB8fCAhc3RyY21wKHN5bWJvbE5hbWUsICJXVEY6OmZhc3RNYWxsb2ModW5zaWduZWQgbG9uZyki
KQotICAgICAgICB8fCAhc3RyY21wKHN5bWJvbE5hbWUsICJXVEY6OmNhbGN1bGF0ZVVUQ09mZnNl
dCgpIikKLSAgICAgICAgfHwgIXN0cmNtcChzeW1ib2xOYW1lLCAiSlNDOjpERkc6OkJ5dGVDb2Rl
UGFyc2VyOjpwYXJzZUNvZGVCbG9jaygpIik7Ci0gICAgICAgIAotfQotCi0vLyBFYWNoIHRyYWNl
IGNvbnNpc3RzIG9mIGEgc2VxdWVuY2Ugb2YgemVybyBvciBtb3JlICdFbmdpbmVGcmFtZScgZW50
cmllcywKLS8vIGZvbGxvd2VkIGJ5IGEgc2FtcGxlIGluIEpJVCBjb2RlLCBvciBvbmUgb3IgbW9y
ZSAnRW5naW5lRnJhbWUnIGVudHJpZXMsCi0vLyBmb2xsb3dlZCBieSBhICdFbmdpbmVDb2RlJyB0
ZXJtaW5hdG9yLgotdm9pZCBDb2RlUHJvZmlsZTo6c2FtcGxlKHZvaWQqIHBjLCB2b2lkKiogZnJh
bWVQb2ludGVyKQotewotICAgIC8vIERpc2FsbG93IHRyYWNlcyBjb250YWluaW5nIG9ubHkgYSAn
RW5naW5lQ29kZScgdGVybWluYXRvciwgd2l0aG91dCBhbnkgJ0VuZ2luZUZyYW1lJyBmcmFtZXMu
Ci0gICAgaWYgKCFmcmFtZVBvaW50ZXIpCi0gICAgICAgIHJldHVybjsKLQotICAgIHdoaWxlIChm
cmFtZVBvaW50ZXIpIHsKLSAgICAgICAgQ29kZVR5cGUgdHlwZTsKLQotI2lmIEVOQUJMRShKSVQp
Ci0gICAgICAgIC8vIERldGVybWluZSBpZiB0aGlzIHNhbXBsZSBmZWxsIGluIEpJVCBjb2RlLCBh
bmQgaWYgc28sIGZyb20gd2hpY2ggSklUICYgd2h5LgotICAgICAgICB2b2lkKiBvd25lclVJRCA9
IENvZGVQcm9maWxpbmc6OmdldE93bmVyVUlERm9yUEMocGMpOwotCi0gICAgICAgIGlmICghb3du
ZXJVSUQpCi0gICAgICAgICAgICB0eXBlID0gRW5naW5lRnJhbWU7Ci0gICAgICAgIGVsc2UgaWYg
KG93bmVyVUlEID09IEdMT0JBTF9USFVOS19JRCkKLSAgICAgICAgICAgIHR5cGUgPSBHbG9iYWxU
aHVuazsKLSAgICAgICAgZWxzZSBpZiAob3duZXJVSUQgPT0gUkVHRVhQX0NPREVfSUQpCi0gICAg
ICAgICAgICB0eXBlID0gUmVnRXhwQ29kZTsKLSAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICBD
b2RlQmxvY2sqIGNvZGVCbG9jayA9IHN0YXRpY19jYXN0PENvZGVCbG9jayo+KG93bmVyVUlEKTsK
LSAgICAgICAgICAgIGlmIChjb2RlQmxvY2stPmppdFR5cGUoKSA9PSBKSVRUeXBlOjpERkdKSVQp
Ci0gICAgICAgICAgICAgICAgdHlwZSA9IERGR0pJVDsKLSAgICAgICAgICAgIGVsc2UgaWYgKCFj
YW5Db21waWxlKGNvZGVCbG9jay0+Y2FwYWJpbGl0eUxldmVsU3RhdGUoKSkpCi0gICAgICAgICAg
ICAgICAgdHlwZSA9IEJhc2VsaW5lT25seTsKLSAgICAgICAgICAgIGVsc2UgaWYgKGNvZGVCbG9j
ay0+cmVwbGFjZW1lbnQoKSkKLSAgICAgICAgICAgICAgICB0eXBlID0gQmFzZWxpbmVPU1I7Ci0g
ICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgdHlwZSA9IEJhc2VsaW5lUHJvZmlsZTsK
LSAgICAgICAgfQotI2Vsc2UKLSAgICAgICAgdHlwZSA9IEVuZ2luZUZyYW1lOwotI2VuZGlmCi0K
LSAgICAgICAgLy8gQSBzYW1wbGUgaW4gSklUIGNvZGUgdGVybWluYXRlcyB0aGUgdHJhY2UuCi0g
ICAgICAgIG1fc2FtcGxlcy5hcHBlbmQoQ29kZVJlY29yZChwYywgdHlwZSkpOwotICAgICAgICBp
ZiAodHlwZSAhPSBFbmdpbmVGcmFtZSkKLSAgICAgICAgICAgIHJldHVybjsKLQotI2lmIE9TKERB
UldJTikgJiYgQ1BVKFg4Nl82NCkKLSAgICAgICAgLy8gV2FsayB1cCB0aGUgc3RhY2suCi0gICAg
ICAgIHBjID0gZnJhbWVQb2ludGVyWzFdOwotICAgICAgICBmcmFtZVBvaW50ZXIgPSByZWludGVy
cHJldF9jYXN0PHZvaWQqKj4oKmZyYW1lUG9pbnRlcik7Ci0jZWxpZiBPUyhMSU5VWCkgJiYgQ1BV
KFg4NikKLSAgICAgICAgLy8gRG9uJ3QgdW53aW5kIHRoZSBzdGFjayBhcyBzb21lIGRlcGVuZGVu
dCB0aGlyZCBwYXJ0eSBsaWJyYXJpZXMKLSAgICAgICAgLy8gbWF5IGJlIGNvbXBpbGVkIHdpdGgg
LWZvbWl0LWZyYW1lLXBvaW50ZXIuCi0gICAgICAgIGZyYW1lUG9pbnRlciA9IDA7Ci0jZWxzZQot
ICAgICAgICAvLyBUaGlzIHBsYXRmb3JtIGlzIG5vdCB5ZXQgc3VwcG9ydGVkIQotICAgICAgICBS
RUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwotI2VuZGlmCi0gICAgfQotCi0gICAgLy8gSWYg
d2UgZ2V0IGhlcmUsIHdlIHdhbGtlZCB0aGUgZW50aXJlIHN0YWNrIHdpdGhvdXQgZmluZGluZyBh
bnkgZnJhbWVzIG9mIEpJVCBjb2RlLgotICAgIG1fc2FtcGxlcy5hcHBlbmQoQ29kZVJlY29yZCgw
LCBFbmdpbmVDb2RlKSk7Ci19Ci0KLXZvaWQgQ29kZVByb2ZpbGU6OnJlcG9ydCgpCi17Ci0gICAg
ZGF0YUxvZ0YoIjxDb2RlUHJvZmlsaW5nICVzOiVkPlxuIiwgbV9maWxlLmRhdGEoKSwgbV9saW5l
TnVtYmVyKTsKLQotICAgIC8vIEhvdyBtYW55IGZyYW1lcyBvZiBDLWNvZGUgdG8gcHJpbnQgLSAw
LCBpZiBub3QgdmVyYm9zZSwgMSBpZiB2ZXJib3NlLCB1cCB0byAxMDI0IGlmIHZlcnkgdmVyYm9z
ZS4KLSAgICB1bnNpZ25lZCByZWN1cnNpb25MaW1pdCA9IENvZGVQcm9maWxpbmc6OmJlVmVyeVZl
cmJvc2UoKSA/IDEwMjQgOiBDb2RlUHJvZmlsaW5nOjpiZVZlcmJvc2UoKTsKLQotICAgIFByb2Zp
bGVUcmVlTm9kZSBwcm9maWxlOwotCi0gICAgLy8gV2FsayB0aHJvdWdoIHRoZSBzYW1wbGUgYnVm
ZmVyLgotICAgIHNpemVfdCB0cmFjZSA9IDA7Ci0gICAgd2hpbGUgKHRyYWNlIDwgbV9zYW1wbGVz
LnNpemUoKSkgewotCi0gICAgICAgIC8vIEFsbCB0cmFjZXMgYXJlIHplcm8gb3IgbW9yZSAnRW5n
aW5lRnJhbWUncywgZm9sbG93ZWQgYnkgYSBub24tJ0VuZ2luZUZyYW1lJy4KLSAgICAgICAgLy8g
U2NhbiB0byBmaW5kIHRoZSBsYXN0IHNhbXBsZSBpbiB0aGUgdHJhY2UuCi0gICAgICAgIHNpemVf
dCBsYXN0SW5UcmFjZSA9IHRyYWNlOwotICAgICAgICB3aGlsZSAobV9zYW1wbGVzW2xhc3RJblRy
YWNlXS50eXBlID09IEVuZ2luZUZyYW1lKQotICAgICAgICAgICAgKytsYXN0SW5UcmFjZTsKLQot
ICAgICAgICAvLyBXZSB1c2UgdGhlIGxhc3Qgc2FtcGxlIHR5cGUgdG8gbG9vayB1cCBhIG5hbWUg
KHVzZWQgYXMgYSBidWNrZXQgaW4gdGhlIHByb2ZpbGVyKS4KLSAgICAgICAgUHJvZmlsZVRyZWVO
b2RlKiBjYWxsYmFja3MgPSBwcm9maWxlLnNhbXBsZUNoaWxkKHNfY29kZVR5cGVOYW1lc1ttX3Nh
bXBsZXNbbGFzdEluVHJhY2VdLnR5cGVdKTsKLQotICAgICAgICAvLyBJZiB0aGVyZSBhcmUgYW55
IHNhbXBsZXMgaW4gQy1jb2RlLCBhZGQgdXAgdG8gcmVjdXJzaW9uTGltaXQgb2YgdGhlbSBpbnRv
IHRoZSBwcm9maWxlIHRyZWUuCi0gICAgICAgIHNpemVfdCBsYXN0RW5naW5lRnJhbWUgPSBsYXN0
SW5UcmFjZTsKLSAgICAgICAgZm9yICh1bnNpZ25lZCBjb3VudCA9IDA7IGxhc3RFbmdpbmVGcmFt
ZSA+IHRyYWNlICYmIGNvdW50IDwgcmVjdXJzaW9uTGltaXQ7ICsrY291bnQpIHsKLSAgICAgICAg
ICAgIC0tbGFzdEVuZ2luZUZyYW1lOwotICAgICAgICAgICAgQVNTRVJUKG1fc2FtcGxlc1tsYXN0
RW5naW5lRnJhbWVdLnR5cGUgPT0gRW5naW5lRnJhbWUpOwotICAgICAgICAgICAgY29uc3QgY2hh
ciogbmFtZSA9ICI8dW5rbm93bj4iOwotICAgICAgICAgICAgYXV0byBkZW1hbmdsZWQgPSBTdGFj
a1RyYWNlOjpkZW1hbmdsZShtX3NhbXBsZXNbbGFzdEVuZ2luZUZyYW1lXS5wYyk7Ci0gICAgICAg
ICAgICBpZiAoZGVtYW5nbGVkKQotICAgICAgICAgICAgICAgIG5hbWUgPSBkZW1hbmdsZWQtPmRl
bWFuZ2xlZE5hbWUoKSA/IGRlbWFuZ2xlZC0+ZGVtYW5nbGVkTmFtZSgpIDogZGVtYW5nbGVkLT5t
YW5nbGVkTmFtZSgpOwotICAgICAgICAgICAgY2FsbGJhY2tzID0gY2FsbGJhY2tzLT5zYW1wbGVD
aGlsZChuYW1lKTsKLSAgICAgICAgICAgIGlmICh0cnVuY2F0ZVRyYWNlKG5hbWUpKQotICAgICAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8gTW92ZSBvbiB0byB0aGUg
bmV4dCB0cmFjZS4KLSAgICAgICAgdHJhY2UgPSBsYXN0SW5UcmFjZSArIDE7Ci0gICAgICAgIEFT
U0VSVCh0cmFjZSA8PSBtX3NhbXBsZXMuc2l6ZSgpKTsKLSAgICB9Ci0KLSAgICAvLyBPdXRwdXQg
dGhlIHByb2ZpbGUgdHJlZS4KLSAgICBkYXRhTG9nRigiVG90YWwgc2FtcGxlczogJWxsZFxuIiwg
c3RhdGljX2Nhc3Q8bG9uZyBsb25nPihwcm9maWxlLmNoaWxkQ291bnQoKSkpOwotICAgIHByb2Zp
bGUuZHVtcCgpOwotICAgIAotICAgIGZvciAoc2l6ZV90IGkgPSAwIDsgaSA8IG1fY2hpbGRyZW4u
c2l6ZSgpOyArK2kpCi0gICAgICAgIG1fY2hpbGRyZW5baV0tPnJlcG9ydCgpOwotCi0gICAgZGF0
YUxvZ0YoIjwvQ29kZVByb2ZpbGluZyAlczolZD5cbiIsIG1fZmlsZS5kYXRhKCksIG1fbGluZU51
bWJlcik7Ci19Ci0KLX0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90b29scy9Db2RlUHJv
ZmlsZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90b29scy9Db2RlUHJv
ZmlsZS5oCShyZXZpc2lvbiAyNTc4NjYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvdG9vbHMv
Q29kZVByb2ZpbGUuaAkod29ya2luZyBjb3B5KQpAQCAtMSw4OSArMCwwIEBACi0vKgotICogQ29w
eXJpZ2h0IChDKSAyMDEyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
LSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycn
IEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwK
LSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0KLSNwcmFnbWEgb25jZQotCi0jaW5j
bHVkZSAiU291cmNlQ29kZS5oIgotI2luY2x1ZGUgIlRpZXJlZE1NYXBBcnJheS5oIgotI2luY2x1
ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KLQotbmFtZXNwYWNlIEpTQyB7Ci0KLWNsYXNzIENvZGVQ
cm9maWxlIHsKLSAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKLXB1YmxpYzoKLSAgICBDb2Rl
UHJvZmlsZShjb25zdCBTb3VyY2VDb2RlJiBzb3VyY2UsIENvZGVQcm9maWxlKiBwYXJlbnQpCi0g
ICAgICAgIDogbV9maWxlKFN0cmluZyhzb3VyY2UucHJvdmlkZXIoKS0+dXJsKCkpLnV0ZjgoKSkK
LSAgICAgICAgLCBtX2xpbmVOdW1iZXIoc291cmNlLmZpcnN0TGluZSgpLm9uZUJhc2VkSW50KCkp
Ci0gICAgICAgICwgbV9wYXJlbnQocGFyZW50KQotICAgIHsKLSAgICAgICAgaWYgKHBhcmVudCkK
LSAgICAgICAgICAgIHBhcmVudC0+YWRkQ2hpbGQoc3RkOjp1bmlxdWVfcHRyPENvZGVQcm9maWxl
Pih0aGlzKSk7Ci0gICAgfQotCi0gICAgdm9pZCBzYW1wbGUodm9pZCogcGMsIHZvaWQqKiBmcmFt
ZVBvaW50ZXIpOwotICAgIHZvaWQgcmVwb3J0KCk7Ci0KLSAgICBDb2RlUHJvZmlsZSogcGFyZW50
KCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBtX3BhcmVudDsKLSAgICB9Ci0gICAgCi0gICAgdm9p
ZCBhZGRDaGlsZChzdGQ6OnVuaXF1ZV9wdHI8Q29kZVByb2ZpbGU+IGNoaWxkKQotICAgIHsKLSAg
ICAgICAgbV9jaGlsZHJlbi5hcHBlbmQoV1RGTW92ZShjaGlsZCkpOwotICAgIH0KLQotICAgIGVu
dW0gQ29kZVR5cGUgewotICAgICAgICBFbmdpbmVDb2RlLAotICAgICAgICBHbG9iYWxUaHVuaywK
LSAgICAgICAgUmVnRXhwQ29kZSwKLSAgICAgICAgREZHSklULAotICAgICAgICBCYXNlbGluZU9u
bHksCi0gICAgICAgIEJhc2VsaW5lUHJvZmlsZSwKLSAgICAgICAgQmFzZWxpbmVPU1IsCi0gICAg
ICAgIEVuZ2luZUZyYW1lLAotICAgICAgICBOdW1iZXJPZkNvZGVUeXBlcwotICAgIH07Ci0KLXBy
aXZhdGU6Ci0gICAgc3RydWN0IENvZGVSZWNvcmQgewotICAgICAgICBDb2RlUmVjb3JkKHZvaWQq
IHBjLCBDb2RlVHlwZSB0eXBlKQotICAgICAgICAgICAgOiBwYyhwYykKLSAgICAgICAgICAgICwg
dHlwZSh0eXBlKQotICAgICAgICB7Ci0gICAgICAgIH0KLSAgICAgICAgdm9pZCogcGM7Ci0gICAg
ICAgIENvZGVUeXBlIHR5cGU7Ci0gICAgfTsKLQotICAgIENTdHJpbmcgbV9maWxlOwotICAgIHVu
c2lnbmVkIG1fbGluZU51bWJlcjsKLSAgICBDb2RlUHJvZmlsZSogbV9wYXJlbnQ7Ci0gICAgVmVj
dG9yPHN0ZDo6dW5pcXVlX3B0cjxDb2RlUHJvZmlsZT4+IG1fY2hpbGRyZW47Ci0gICAgVGllcmVk
TU1hcEFycmF5PENvZGVSZWNvcmQ+IG1fc2FtcGxlczsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIEpT
QwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3Rvb2xzL0NvZGVQcm9maWxpbmcuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90b29scy9Db2RlUHJvZmlsaW5nLmNw
cAkocmV2aXNpb24gMjU3ODY2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3Rvb2xzL0NvZGVQ
cm9maWxpbmcuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDE2OSArMCwwIEBACi0vKgotICogQ29w
eXJpZ2h0IChDKSAyMDEyLTIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoK
LSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFT
IElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
LSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQotI2luY2x1ZGUgImNvbmZp
Zy5oIgotI2luY2x1ZGUgIkNvZGVQcm9maWxpbmcuaCIKLQotI2luY2x1ZGUgIkNvZGVQcm9maWxl
LmgiCi0jaW5jbHVkZSAiTWFjaGluZUNvbnRleHQuaCIKLSNpbmNsdWRlIDx3dGYvTWV0YUFsbG9j
YXRvci5oPgotCi0jaWYgSEFWRShTSUdOQUxfSCkKLSNpbmNsdWRlIDxzaWduYWwuaD4KLSNlbmRp
ZgotCi0jaWYgSEFWRShNQUNISU5FX0NPTlRFWFQpCi0jaW5jbHVkZSA8c3lzL3RpbWUuaD4KLSNl
bmRpZgotCi1uYW1lc3BhY2UgSlNDIHsKLQotdm9sYXRpbGUgQ29kZVByb2ZpbGUqIENvZGVQcm9m
aWxpbmc6OnNfcHJvZmlsZVN0YWNrID0gMDsKLUNvZGVQcm9maWxpbmc6Ok1vZGUgQ29kZVByb2Zp
bGluZzo6c19tb2RlID0gQ29kZVByb2ZpbGluZzo6RGlzYWJsZWQ7Ci1XVEY6Ok1ldGFBbGxvY2F0
b3JUcmFja2VyKiBDb2RlUHJvZmlsaW5nOjpzX3RyYWNrZXIgPSAwOwotCi1JR05PUkVfV0FSTklO
R1NfQkVHSU4oIm1pc3Npbmctbm9yZXR1cm4iKQotCi0jaWYgSEFWRShNQUNISU5FX0NPTlRFWFQp
Ci0vLyBIZWxwZXIgZnVuY3Rpb24gdG8gc3RhcnQgJiBzdG9wIHRoZSB0aW1lci4KLS8vIFByZXNl
bnRseSB3ZSdyZSB1c2luZyB0aGUgd2FsbC1jbG9jayB0aW1lciwgc2luY2UgdGhpcyBzZWVtcyB0
byBnaXZlIHRoZSBiZXN0IHJlc3VsdHMuCi1zdGF0aWMgdm9pZCBzZXRQcm9maWxlVGltZXIodW5z
aWduZWQgdXNlYykKLXsKLSAgICBpdGltZXJ2YWwgdGltZXI7Ci0gICAgdGltZXIuaXRfdmFsdWUu
dHZfc2VjID0gMDsKLSAgICB0aW1lci5pdF92YWx1ZS50dl91c2VjID0gdXNlYzsKLSAgICB0aW1l
ci5pdF9pbnRlcnZhbC50dl9zZWMgPSAwOwotICAgIHRpbWVyLml0X2ludGVydmFsLnR2X3VzZWMg
PSB1c2VjOwotICAgIHNldGl0aW1lcihJVElNRVJfUkVBTCwgJnRpbWVyLCAwKTsKLX0KLSNlbmRp
ZgotCi1JR05PUkVfV0FSTklOR1NfRU5ECi0KLSNpZiBIQVZFKE1BQ0hJTkVfQ09OVEVYVCkKLXN0
YXRpYyB2b2lkIHByb2ZpbGluZ1RpbWVyKGludCwgc2lnaW5mb190Kiwgdm9pZCogdWFwKQotewot
ICAgIFBsYXRmb3JtUmVnaXN0ZXJzJiBwbGF0Zm9ybVJlZ2lzdGVycyA9IFdURjo6cmVnaXN0ZXJz
RnJvbVVDb250ZXh0KHN0YXRpY19jYXN0PHVjb250ZXh0X3QqPih1YXApKTsKLSAgICBpZiAoYXV0
byBpbnN0cnVjdGlvblBvaW50ZXIgPSBNYWNoaW5lQ29udGV4dDo6aW5zdHJ1Y3Rpb25Qb2ludGVy
KHBsYXRmb3JtUmVnaXN0ZXJzKSkgewotICAgICAgICBDb2RlUHJvZmlsaW5nOjpzYW1wbGUoCi0g
ICAgICAgICAgICBpbnN0cnVjdGlvblBvaW50ZXItPnVudGFnZ2VkRXhlY3V0YWJsZUFkZHJlc3Mo
KSwKLSAgICAgICAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCoqPihNYWNoaW5lQ29udGV4dDo6
ZnJhbWVQb2ludGVyKHBsYXRmb3JtUmVnaXN0ZXJzKSkpOwotICAgIH0KLX0KLSNlbmRpZgotCi0v
LyBDYWxsYmFjayB0cmlnZ2VyZWQgd2hlbiB0aGUgdGltZXIgaXMgZmlyZWQuCi12b2lkIENvZGVQ
cm9maWxpbmc6OnNhbXBsZSh2b2lkKiBwYywgdm9pZCoqIGZyYW1lUG9pbnRlcikKLXsKLSAgICBD
b2RlUHJvZmlsZSogcHJvZmlsZVN0YWNrID0gY29uc3RfY2FzdDxDb2RlUHJvZmlsZSo+KHNfcHJv
ZmlsZVN0YWNrKTsKLSAgICBpZiAocHJvZmlsZVN0YWNrKQotICAgICAgICBwcm9maWxlU3RhY2st
PnNhbXBsZShwYywgZnJhbWVQb2ludGVyKTsKLX0KLQotdm9pZCBDb2RlUHJvZmlsaW5nOjpub3Rp
ZnlBbGxvY2F0b3IoV1RGOjpNZXRhQWxsb2NhdG9yKiBhbGxvY2F0b3IpCi17Ci0gICAgLy8gQ2hl
Y2sgZm9yIEpTQ19DT0RFX1BST0ZJTElORy4KLSAgICBjb25zdCBjaGFyKiBjb2RlUHJvZmlsaW5n
TW9kZSA9IGdldGVudigiSlNDX0NPREVfUFJPRklMSU5HIik7Ci0gICAgaWYgKCFjb2RlUHJvZmls
aW5nTW9kZSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgLy8gQ2hlY2sgZm9yIGEgdmFsaWQgbW9k
ZSwgY3VycmVudGx5ICIxIiwgIjIiLCBvciAiMyIuCi0gICAgaWYgKCFjb2RlUHJvZmlsaW5nTW9k
ZVswXSB8fCBjb2RlUHJvZmlsaW5nTW9kZVsxXSkKLSAgICAgICAgcmV0dXJuOwotICAgIHN3aXRj
aCAoKmNvZGVQcm9maWxpbmdNb2RlKSB7Ci0gICAgY2FzZSAnMSc6Ci0gICAgICAgIHNfbW9kZSA9
IEVuYWJsZWQ7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgJzInOgotICAgICAgICBzX21vZGUg
PSBWZXJib3NlOwotICAgICAgICBicmVhazsKLSAgICBjYXNlICczJzoKLSAgICAgICAgc19tb2Rl
ID0gVmVyeVZlcmJvc2U7Ci0gICAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIHJl
dHVybjsKLSAgICB9Ci0KLSAgICBBU1NFUlQoZW5hYmxlZCgpKTsKLSAgICBBU1NFUlQoIXNfdHJh
Y2tlcik7Ci0gICAgc190cmFja2VyID0gbmV3IFdURjo6TWV0YUFsbG9jYXRvclRyYWNrZXIoKTsK
LSAgICBhbGxvY2F0b3ItPnRyYWNrQWxsb2NhdGlvbnMoc190cmFja2VyKTsKLX0KLQotdm9pZCog
Q29kZVByb2ZpbGluZzo6Z2V0T3duZXJVSURGb3JQQyh2b2lkKiBhZGRyZXNzKQotewotICAgIGlm
ICghc190cmFja2VyKQotICAgICAgICByZXR1cm4gMDsKLSAgICBXVEY6Ok1ldGFBbGxvY2F0b3JI
YW5kbGUqIGhhbmRsZSA9IHNfdHJhY2tlci0+ZmluZChhZGRyZXNzKTsKLSAgICBpZiAoIWhhbmRs
ZSkKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgcmV0dXJuIGhhbmRsZS0+b3duZXJVSUQoKTsKLX0K
LQotdm9pZCBDb2RlUHJvZmlsaW5nOjpiZWdpbihjb25zdCBTb3VyY2VDb2RlJiBzb3VyY2UpCi17
Ci0gICAgLy8gUHVzaCBhIG5ldyBDb2RlUHJvZmlsZSBvbnRvIHRoZSBzdGFjayBmb3IgZWFjaCBz
Y3JpcHQgZW5jb3VudGVyZWQuCi0gICAgQ29kZVByb2ZpbGUqIHByb2ZpbGVTdGFjayA9IGNvbnN0
X2Nhc3Q8Q29kZVByb2ZpbGUqPihzX3Byb2ZpbGVTdGFjayk7Ci0gICAgYm9vbCBhbHJlYWR5UHJv
ZmlsaW5nID0gcHJvZmlsZVN0YWNrOwotICAgIHNfcHJvZmlsZVN0YWNrID0gcHJvZmlsZVN0YWNr
ID0gbmV3IENvZGVQcm9maWxlKHNvdXJjZSwgcHJvZmlsZVN0YWNrKTsKLQotICAgIC8vIElzIHRo
ZSBwcm9maWxlciBhbHJlYWR5IHJ1bm5pbmcgLSBpZiBzbywgdGhlIHRpbWVyIHdpbGwgYWxyZWFk
eSBiZSBzZXQgdXAuCi0gICAgaWYgKGFscmVhZHlQcm9maWxpbmcpCi0gICAgICAgIHJldHVybjsK
LQotI2lmIEhBVkUoTUFDSElORV9DT05URVhUKQotICAgIC8vIFJlZ3NpdGVyIGEgc2lnbmFsIGhh
bmRsZXIgJiBpdGltZXIuCi0gICAgc3RydWN0IHNpZ2FjdGlvbiBhY3Rpb247Ci0gICAgYWN0aW9u
LnNhX3NpZ2FjdGlvbiA9IHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCAoKikoaW50LCBzaWdpbmZvX3Qg
Kiwgdm9pZCAqKT4ocHJvZmlsaW5nVGltZXIpOwotICAgIHNpZ2ZpbGxzZXQoJmFjdGlvbi5zYV9t
YXNrKTsKLSAgICBhY3Rpb24uc2FfZmxhZ3MgPSBTQV9TSUdJTkZPOwotICAgIHNpZ2FjdGlvbihT
SUdBTFJNLCAmYWN0aW9uLCAwKTsKLSAgICBzZXRQcm9maWxlVGltZXIoMTAwKTsKLSNlbmRpZgot
fQotCi12b2lkIENvZGVQcm9maWxpbmc6OmVuZCgpCi17Ci0gICAgLy8gUG9wIHRoZSBjdXJyZW50
IHByb2ZpbGVyIG9mZiB0aGUgc3RhY2suCi0gICAgQ29kZVByb2ZpbGUqIGN1cnJlbnQgPSBjb25z
dF9jYXN0PENvZGVQcm9maWxlKj4oc19wcm9maWxlU3RhY2spOwotICAgIEFTU0VSVChjdXJyZW50
KTsKLSAgICBzX3Byb2ZpbGVTdGFjayA9IGN1cnJlbnQtPnBhcmVudCgpOwotCi0gICAgLy8gSXMg
dGhpcyB0aGUgb3V0ZXJtb3N0IHNjcmlwdCBiZWluZyBwcm9maWxlZD8gLSBpZiBub3QsIGp1c3Qg
cmV0dXJuLgotICAgIC8vIFdlIHBlcmZvcm0gYWxsIG91dHB1dCBvZiBwcm9maWxlcyByZWN1cnNp
dmVseSBmcm9tIHRoZSBvdXRlcm1vc3Qgc2NyaXB0LAotICAgIC8vIHRvIG1pbmltaXplIHByb2Zp
bGluZyBvdmVyaGVhZCBmcm9tIHNrZXdpbmcgcmVzdWx0cy4KLSAgICBpZiAoc19wcm9maWxlU3Rh
Y2spCi0gICAgICAgIHJldHVybjsKLQotI2lmIEhBVkUoTUFDSElORV9DT05URVhUKQotICAgIC8v
IFN0b3AgcHJvZmlsaW5nCi0gICAgc2V0UHJvZmlsZVRpbWVyKDApOwotI2VuZGlmCi0KLSAgICBj
dXJyZW50LT5yZXBvcnQoKTsKLSAgICBkZWxldGUgY3VycmVudDsKLX0KLQotfQpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL3Rvb2xzL0NvZGVQcm9maWxpbmcuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvdG9vbHMvQ29kZVByb2ZpbGluZy5oCShyZXZpc2lvbiAyNTc4
NjYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvdG9vbHMvQ29kZVByb2ZpbGluZy5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDgxICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICog
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4gCi0gKi8KLQotI3ByYWdtYSBvbmNlCi0KLW5hbWVzcGFjZSBXVEYgewotCi1jbGFz
cyBNZXRhQWxsb2NhdG9yOwotY2xhc3MgTWV0YUFsbG9jYXRvclRyYWNrZXI7Ci0KLX0KLQotbmFt
ZXNwYWNlIEpTQyB7Ci0KLWNsYXNzIENvZGVQcm9maWxlOwotY2xhc3MgU291cmNlQ29kZTsKLQot
Y2xhc3MgQ29kZVByb2ZpbGluZyB7Ci0gICAgZW51bSBNb2RlIHsKLSAgICAgICAgRGlzYWJsZWQs
Ci0gICAgICAgIEVuYWJsZWQsCi0gICAgICAgIFZlcmJvc2UsCi0gICAgICAgIFZlcnlWZXJib3Nl
Ci0gICAgfTsKLQotcHVibGljOgotICAgIENvZGVQcm9maWxpbmcoY29uc3QgU291cmNlQ29kZSYg
c291cmNlKQotICAgICAgICA6IG1fYWN0aXZlKGVuYWJsZWQoKSkKLSAgICB7Ci0gICAgICAgIGlm
IChtX2FjdGl2ZSkKLSAgICAgICAgICAgIGJlZ2luKHNvdXJjZSk7Ci0gICAgfQotCi0gICAgfkNv
ZGVQcm9maWxpbmcoKQotICAgIHsKLSAgICAgICAgaWYgKG1fYWN0aXZlKQotICAgICAgICAgICAg
ZW5kKCk7Ci0gICAgfQotCi0gICAgc3RhdGljIGJvb2wgZW5hYmxlZCgpIHsgcmV0dXJuIHNfbW9k
ZSAhPSBEaXNhYmxlZDsgfQotICAgIHN0YXRpYyBib29sIGJlVmVyYm9zZSgpIHsgcmV0dXJuIHNf
bW9kZSA+PSBWZXJib3NlOyB9Ci0gICAgc3RhdGljIGJvb2wgYmVWZXJ5VmVyYm9zZSgpIHsgcmV0
dXJuIHNfbW9kZSA+PSBWZXJ5VmVyYm9zZTsgfQotCi0gICAgc3RhdGljIHZvaWQgbm90aWZ5QWxs
b2NhdG9yKFdURjo6TWV0YUFsbG9jYXRvciopOwotICAgIHN0YXRpYyB2b2lkKiBnZXRPd25lclVJ
REZvclBDKHZvaWQqKTsKLSAgICBzdGF0aWMgdm9pZCBzYW1wbGUodm9pZCogcGMsIHZvaWQqKiBm
cmFtZVBvaW50ZXIpOwotCi1wcml2YXRlOgotICAgIHZvaWQgYmVnaW4oY29uc3QgU291cmNlQ29k
ZSYpOwotICAgIHZvaWQgZW5kKCk7Ci0KLSAgICBib29sIG1fYWN0aXZlOwotCi0gICAgc3RhdGlj
IE1vZGUgc19tb2RlOwotICAgIHN0YXRpYyBXVEY6Ok1ldGFBbGxvY2F0b3JUcmFja2VyKiBzX3Ry
YWNrZXI7Ci0gICAgc3RhdGljIHZvbGF0aWxlIENvZGVQcm9maWxlKiBzX3Byb2ZpbGVTdGFjazsK
LX07Ci0KLX0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL1dURi93dGYvTWV0YUFsbG9j
YXRvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvTWV0YUFsbG9jYXRvci5jcHAJ
KHJldmlzaW9uIDI1Nzg2NikKKysrIFNvdXJjZS9XVEYvd3RmL01ldGFBbGxvY2F0b3IuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC01NCw0NSArNTQsNDEgQEAgTWV0YUFsbG9jYXRvcjo6fk1ldGFBbGxv
Y2F0b3IoKQogI2VuZGlmCiB9CiAKLXZvaWQgTWV0YUFsbG9jYXRvclRyYWNrZXI6Om5vdGlmeShN
ZXRhQWxsb2NhdG9ySGFuZGxlKiBoYW5kbGUpCit2b2lkIE1ldGFBbGxvY2F0b3JUcmFja2VyOjpu
b3RpZnkoTWV0YUFsbG9jYXRvckhhbmRsZSYgaGFuZGxlKQogewotICAgIG1fYWxsb2NhdGlvbnMu
aW5zZXJ0KGhhbmRsZSk7CisgICAgbV9hbGxvY2F0aW9ucy5pbnNlcnQoJmhhbmRsZSk7CiB9CiAK
LXZvaWQgTWV0YUFsbG9jYXRvclRyYWNrZXI6OnJlbGVhc2UoTWV0YUFsbG9jYXRvckhhbmRsZSog
aGFuZGxlKQordm9pZCBNZXRhQWxsb2NhdG9yVHJhY2tlcjo6cmVsZWFzZShNZXRhQWxsb2NhdG9y
SGFuZGxlJiBoYW5kbGUpCiB7Ci0gICAgbV9hbGxvY2F0aW9ucy5yZW1vdmUoaGFuZGxlKTsKKyAg
ICBtX2FsbG9jYXRpb25zLnJlbW92ZSgmaGFuZGxlKTsKIH0KIAotQUxXQVlTX0lOTElORSB2b2lk
IE1ldGFBbGxvY2F0b3I6OnJlbGVhc2UoTWV0YUFsbG9jYXRvckhhbmRsZSogaGFuZGxlKQordm9p
ZCBNZXRhQWxsb2NhdG9yOjpyZWxlYXNlKGNvbnN0IExvY2tIb2xkZXImLCBNZXRhQWxsb2NhdG9y
SGFuZGxlJiBoYW5kbGUpCiB7Ci0gICAgTG9ja0hvbGRlciBsb2NrZXIoJm1fbG9jayk7Ci0gICAg
aWYgKGhhbmRsZS0+c2l6ZUluQnl0ZXMoKSkgewotICAgICAgICB2b2lkKiBzdGFydCA9IGhhbmRs
ZS0+c3RhcnQoKS51bnRhZ2dlZFB0cigpOwotICAgICAgICBzaXplX3Qgc2l6ZUluQnl0ZXMgPSBo
YW5kbGUtPnNpemVJbkJ5dGVzKCk7CisgICAgaWYgKGhhbmRsZS5zaXplSW5CeXRlcygpKSB7Cisg
ICAgICAgIHZvaWQqIHN0YXJ0ID0gaGFuZGxlLnN0YXJ0KCkudW50YWdnZWRQdHIoKTsKKyAgICAg
ICAgc2l6ZV90IHNpemVJbkJ5dGVzID0gaGFuZGxlLnNpemVJbkJ5dGVzKCk7CiAgICAgICAgIGRl
Y3JlbWVudFBhZ2VPY2N1cGFuY3koc3RhcnQsIHNpemVJbkJ5dGVzKTsKICAgICAgICAgYWRkRnJl
ZVNwYWNlRnJvbVJlbGVhc2VkSGFuZGxlKEZyZWVTcGFjZVB0cihzdGFydCksIHNpemVJbkJ5dGVz
KTsKICAgICB9CiAKLSAgICBpZiAoVU5MSUtFTFkoISFtX3RyYWNrZXIpKQotICAgICAgICBtX3Ry
YWNrZXItPnJlbGVhc2UoaGFuZGxlKTsKKyAgICBtX3RyYWNrZXIucmVsZWFzZShoYW5kbGUpOwog
fQogCi1NZXRhQWxsb2NhdG9ySGFuZGxlOjpNZXRhQWxsb2NhdG9ySGFuZGxlKE1ldGFBbGxvY2F0
b3IqIGFsbG9jYXRvciwgdm9pZCogc3RhcnQsIHNpemVfdCBzaXplSW5CeXRlcywgdm9pZCogb3du
ZXJVSUQpCitNZXRhQWxsb2NhdG9ySGFuZGxlOjpNZXRhQWxsb2NhdG9ySGFuZGxlKE1ldGFBbGxv
Y2F0b3ImIGFsbG9jYXRvciwgdm9pZCogc3RhcnQsIHNpemVfdCBzaXplSW5CeXRlcykKICAgICA6
IG1fYWxsb2NhdG9yKGFsbG9jYXRvcikKICAgICAsIG1fc3RhcnQoc3RhcnQpCiAgICAgLCBtX2Vu
ZChyZWludGVycHJldF9jYXN0PGNoYXIqPihzdGFydCkgKyBzaXplSW5CeXRlcykKLSAgICAsIG1f
b3duZXJVSUQob3duZXJVSUQpCiB7Ci0gICAgQVNTRVJUKGFsbG9jYXRvcik7CiAgICAgQVNTRVJU
KHN0YXJ0KTsKICAgICBBU1NFUlQoc2l6ZUluQnl0ZXMpOwogfQogCiBNZXRhQWxsb2NhdG9ySGFu
ZGxlOjp+TWV0YUFsbG9jYXRvckhhbmRsZSgpCiB7Ci0gICAgQVNTRVJUKG1fYWxsb2NhdG9yKTsK
LSAgICBtX2FsbG9jYXRvci0+cmVsZWFzZSh0aGlzKTsKKyAgICBhdXRvIGxvY2tlciA9IGhvbGRM
b2NrKGFsbG9jYXRvcigpLm1fbG9jayk7CisgICAgYWxsb2NhdG9yKCkucmVsZWFzZShsb2NrZXIs
ICp0aGlzKTsKIH0KIAogdm9pZCBNZXRhQWxsb2NhdG9ySGFuZGxlOjpzaHJpbmsoc2l6ZV90IG5l
d1NpemVJbkJ5dGVzKQpAQCAtMTAwLDkgKzk2LDEwIEBAIHZvaWQgTWV0YUFsbG9jYXRvckhhbmRs
ZTo6c2hyaW5rKHNpemVfdCAKICAgICBzaXplX3Qgc2l6ZUluQnl0ZXMgPSB0aGlzLT5zaXplSW5C
eXRlcygpOwogICAgIEFTU0VSVChuZXdTaXplSW5CeXRlcyA8PSBzaXplSW5CeXRlcyk7CiAKLSAg
ICBMb2NrSG9sZGVyIGxvY2tlcigmbV9hbGxvY2F0b3ItPm1fbG9jayk7CisgICAgTWV0YUFsbG9j
YXRvciYgYWxsb2NhdG9yID0gdGhpcy0+YWxsb2NhdG9yKCk7CisgICAgTG9ja0hvbGRlciBsb2Nr
ZXIoJmFsbG9jYXRvci5tX2xvY2spOwogCi0gICAgbmV3U2l6ZUluQnl0ZXMgPSBtX2FsbG9jYXRv
ci0+cm91bmRVcChuZXdTaXplSW5CeXRlcyk7CisgICAgbmV3U2l6ZUluQnl0ZXMgPSBhbGxvY2F0
b3Iucm91bmRVcChuZXdTaXplSW5CeXRlcyk7CiAgICAgCiAgICAgQVNTRVJUKG5ld1NpemVJbkJ5
dGVzIDw9IHNpemVJbkJ5dGVzKTsKIApAQCAtMTEzLDExICsxMTAsMTEgQEAgdm9pZCBNZXRhQWxs
b2NhdG9ySGFuZGxlOjpzaHJpbmsoc2l6ZV90IAogICAgIHNpemVfdCBmcmVlU2l6ZSA9IHNpemVJ
bkJ5dGVzIC0gbmV3U2l6ZUluQnl0ZXM7CiAgICAgdWludHB0cl90IGZyZWVFbmQgPSBmcmVlU3Rh
cnQgKyBmcmVlU2l6ZTsKICAgICAKLSAgICB1aW50cHRyX3QgZmlyc3RDb21wbGV0ZWx5RnJlZVBh
Z2UgPSAoZnJlZVN0YXJ0ICsgbV9hbGxvY2F0b3ItPm1fcGFnZVNpemUgLSAxKSAmIH4obV9hbGxv
Y2F0b3ItPm1fcGFnZVNpemUgLSAxKTsKKyAgICB1aW50cHRyX3QgZmlyc3RDb21wbGV0ZWx5RnJl
ZVBhZ2UgPSAoZnJlZVN0YXJ0ICsgYWxsb2NhdG9yLm1fcGFnZVNpemUgLSAxKSAmIH4oYWxsb2Nh
dG9yLm1fcGFnZVNpemUgLSAxKTsKICAgICBpZiAoZmlyc3RDb21wbGV0ZWx5RnJlZVBhZ2UgPCBm
cmVlRW5kKQotICAgICAgICBtX2FsbG9jYXRvci0+ZGVjcmVtZW50UGFnZU9jY3VwYW5jeShyZWlu
dGVycHJldF9jYXN0PHZvaWQqPihmaXJzdENvbXBsZXRlbHlGcmVlUGFnZSksIGZyZWVTaXplIC0g
KGZpcnN0Q29tcGxldGVseUZyZWVQYWdlIC0gZnJlZVN0YXJ0KSk7CisgICAgICAgIGFsbG9jYXRv
ci5kZWNyZW1lbnRQYWdlT2NjdXBhbmN5KHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KGZpcnN0Q29t
cGxldGVseUZyZWVQYWdlKSwgZnJlZVNpemUgLSAoZmlyc3RDb21wbGV0ZWx5RnJlZVBhZ2UgLSBm
cmVlU3RhcnQpKTsKIAotICAgIG1fYWxsb2NhdG9yLT5hZGRGcmVlU3BhY2VGcm9tUmVsZWFzZWRI
YW5kbGUoTWV0YUFsbG9jYXRvcjo6RnJlZVNwYWNlUHRyKGZyZWVTdGFydCksIGZyZWVTaXplKTsK
KyAgICBhbGxvY2F0b3IuYWRkRnJlZVNwYWNlRnJvbVJlbGVhc2VkSGFuZGxlKE1ldGFBbGxvY2F0
b3I6OkZyZWVTcGFjZVB0cihmcmVlU3RhcnQpLCBmcmVlU2l6ZSk7CiAKICAgICBtX2VuZCA9IG1f
c3RhcnQgKyBuZXdTaXplSW5CeXRlczsKIH0KQEAgLTEyNywxMyArMTI0LDEzIEBAIHZvaWQgTWV0
YUFsbG9jYXRvckhhbmRsZTo6ZHVtcChQcmludFN0cmUKICAgICBvdXQucHJpbnQoUmF3UG9pbnRl
cihzdGFydCgpLnVudGFnZ2VkUHRyKCkpLCAiLi4uIiwgUmF3UG9pbnRlcihlbmQoKS51bnRhZ2dl
ZFB0cigpKSk7CiB9CiAKLU1ldGFBbGxvY2F0b3I6Ok1ldGFBbGxvY2F0b3Ioc2l6ZV90IGFsbG9j
YXRpb25HcmFudWxlLCBzaXplX3QgcGFnZVNpemUpCitNZXRhQWxsb2NhdG9yOjpNZXRhQWxsb2Nh
dG9yKExvY2smIGxvY2ssIHNpemVfdCBhbGxvY2F0aW9uR3JhbnVsZSwgc2l6ZV90IHBhZ2VTaXpl
KQogICAgIDogbV9hbGxvY2F0aW9uR3JhbnVsZShhbGxvY2F0aW9uR3JhbnVsZSkKICAgICAsIG1f
cGFnZVNpemUocGFnZVNpemUpCiAgICAgLCBtX2J5dGVzQWxsb2NhdGVkKDApCiAgICAgLCBtX2J5
dGVzUmVzZXJ2ZWQoMCkKICAgICAsIG1fYnl0ZXNDb21taXR0ZWQoMCkKLSAgICAsIG1fdHJhY2tl
cigwKQorICAgICwgbV9sb2NrKGxvY2spCiAjaWZuZGVmIE5ERUJVRwogICAgICwgbV9tYWxsb2NC
YWxhbmNlKDApCiAjZW5kaWYKQEAgLTE1NywxMCArMTU0LDggQEAgTWV0YUFsbG9jYXRvcjo6TWV0
YUFsbG9jYXRvcihzaXplX3QgYWxsbwogICAgIEFTU0VSVChzdGF0aWNfY2FzdDxzaXplX3Q+KDEp
IDw8IG1fbG9nQWxsb2NhdGlvbkdyYW51bGUgPT0gbV9hbGxvY2F0aW9uR3JhbnVsZSk7CiB9CiAK
LVJlZlB0cjxNZXRhQWxsb2NhdG9ySGFuZGxlPiBNZXRhQWxsb2NhdG9yOjphbGxvY2F0ZShzaXpl
X3Qgc2l6ZUluQnl0ZXMsIHZvaWQqIG93bmVyVUlEKQorUmVmUHRyPE1ldGFBbGxvY2F0b3JIYW5k
bGU+IE1ldGFBbGxvY2F0b3I6OmFsbG9jYXRlKGNvbnN0IExvY2tIb2xkZXImLCBzaXplX3Qgc2l6
ZUluQnl0ZXMpCiB7Ci0gICAgTG9ja0hvbGRlciBsb2NrZXIoJm1fbG9jayk7Ci0KICAgICBpZiAo
IXNpemVJbkJ5dGVzKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICAKQEAgLTE5NSwxNyAr
MTkwLDE1IEBAIFJlZlB0cjxNZXRhQWxsb2NhdG9ySGFuZGxlPiBNZXRhQWxsb2NhdG8KICAgICBt
X251bUFsbG9jYXRpb25zKys7CiAjZW5kaWYKIAotICAgIGF1dG8gaGFuZGxlID0gYWRvcHRSZWYo
Km5ldyBNZXRhQWxsb2NhdG9ySGFuZGxlKHRoaXMsIHN0YXJ0LnVudGFnZ2VkUHRyKCksIHNpemVJ
bkJ5dGVzLCBvd25lclVJRCkpOworICAgIGF1dG8gaGFuZGxlID0gYWRvcHRSZWYoKm5ldyBNZXRh
QWxsb2NhdG9ySGFuZGxlKCp0aGlzLCBzdGFydC51bnRhZ2dlZFB0cigpLCBzaXplSW5CeXRlcykp
OwogCi0gICAgaWYgKFVOTElLRUxZKCEhbV90cmFja2VyKSkKLSAgICAgICAgbV90cmFja2VyLT5u
b3RpZnkoaGFuZGxlLnB0cigpKTsKKyAgICBtX3RyYWNrZXIubm90aWZ5KCpoYW5kbGUucHRyKCkp
OwogCiAgICAgcmV0dXJuIGhhbmRsZTsKIH0KIAotTWV0YUFsbG9jYXRvcjo6U3RhdGlzdGljcyBN
ZXRhQWxsb2NhdG9yOjpjdXJyZW50U3RhdGlzdGljcygpCitNZXRhQWxsb2NhdG9yOjpTdGF0aXN0
aWNzIE1ldGFBbGxvY2F0b3I6OmN1cnJlbnRTdGF0aXN0aWNzKGNvbnN0IExvY2tIb2xkZXImKQog
ewotICAgIExvY2tIb2xkZXIgbG9ja2VyKCZtX2xvY2spOwogICAgIFN0YXRpc3RpY3MgcmVzdWx0
OwogICAgIHJlc3VsdC5ieXRlc0FsbG9jYXRlZCA9IG1fYnl0ZXNBbGxvY2F0ZWQ7CiAgICAgcmVz
dWx0LmJ5dGVzUmVzZXJ2ZWQgPSBtX2J5dGVzUmVzZXJ2ZWQ7CkluZGV4OiBTb3VyY2UvV1RGL3d0
Zi9NZXRhQWxsb2NhdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvTWV0YUFsbG9j
YXRvci5oCShyZXZpc2lvbiAyNTc4NjYpCisrKyBTb3VyY2UvV1RGL3d0Zi9NZXRhQWxsb2NhdG9y
LmgJKHdvcmtpbmcgY29weSkKQEAgLTQ0LDE1ICs0NCwxNSBAQCBuYW1lc3BhY2UgV1RGIHsKIGNs
YXNzIE1ldGFBbGxvY2F0b3JUcmFja2VyIHsKICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsK
IHB1YmxpYzoKLSAgICB2b2lkIG5vdGlmeShNZXRhQWxsb2NhdG9ySGFuZGxlKik7Ci0gICAgdm9p
ZCByZWxlYXNlKE1ldGFBbGxvY2F0b3JIYW5kbGUqKTsKKyAgICB2b2lkIG5vdGlmeShNZXRhQWxs
b2NhdG9ySGFuZGxlJik7CisgICAgdm9pZCByZWxlYXNlKE1ldGFBbGxvY2F0b3JIYW5kbGUmKTsK
IAogICAgIE1ldGFBbGxvY2F0b3JIYW5kbGUqIGZpbmQodm9pZCogYWRkcmVzcykKICAgICB7CiAg
ICAgICAgIE1ldGFBbGxvY2F0b3JIYW5kbGUqIGhhbmRsZSA9IG1fYWxsb2NhdGlvbnMuZmluZEdy
ZWF0ZXN0TGVzc1RoYW5PckVxdWFsKGFkZHJlc3MpOwotICAgICAgICBpZiAoaGFuZGxlICYmIGFk
ZHJlc3MgPCBoYW5kbGUtPmVuZCgpLnVudGFnZ2VkUHRyKCkpCisgICAgICAgIGlmIChoYW5kbGUg
JiYgaGFuZGxlLT5zdGFydCgpLnVudGFnZ2VkUHRyKCkgPD0gYWRkcmVzcyAmJiBhZGRyZXNzIDwg
aGFuZGxlLT5lbmQoKS51bnRhZ2dlZFB0cigpKQogICAgICAgICAgICAgcmV0dXJuIGhhbmRsZTsK
LSAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIH0KIAogICAg
IFJlZEJsYWNrVHJlZTxNZXRhQWxsb2NhdG9ySGFuZGxlLCB2b2lkKj4gbV9hbGxvY2F0aW9uczsK
QEAgLTY0LDE3ICs2NCwxNyBAQCBjbGFzcyBNZXRhQWxsb2NhdG9yIHsKIHB1YmxpYzoKICAgICB1
c2luZyBGcmVlU3BhY2VQdHIgPSBNZXRhQWxsb2NhdG9yUHRyPEZyZWVTcGFjZVB0clRhZz47CiAK
LSAgICBXVEZfRVhQT1JUX1BSSVZBVEUgTWV0YUFsbG9jYXRvcihzaXplX3QgYWxsb2NhdGlvbkdy
YW51bGUsIHNpemVfdCBwYWdlU2l6ZSA9IFdURjo6cGFnZVNpemUoKSk7CisgICAgV1RGX0VYUE9S
VF9QUklWQVRFIE1ldGFBbGxvY2F0b3IoTG9jayYsIHNpemVfdCBhbGxvY2F0aW9uR3JhbnVsZSwg
c2l6ZV90IHBhZ2VTaXplID0gV1RGOjpwYWdlU2l6ZSgpKTsKICAgICAKICAgICBXVEZfRVhQT1JU
X1BSSVZBVEUgdmlydHVhbCB+TWV0YUFsbG9jYXRvcigpOwogICAgIAotICAgIFdURl9FWFBPUlRf
UFJJVkFURSBSZWZQdHI8TWV0YUFsbG9jYXRvckhhbmRsZT4gYWxsb2NhdGUoc2l6ZV90IHNpemVJ
bkJ5dGVzLCB2b2lkKiBvd25lclVJRCk7Ci0KLSAgICB2b2lkIHRyYWNrQWxsb2NhdGlvbnMoTWV0
YUFsbG9jYXRvclRyYWNrZXIqIHRyYWNrZXIpCisgICAgUmVmUHRyPE1ldGFBbGxvY2F0b3JIYW5k
bGU+IGFsbG9jYXRlKHNpemVfdCBzaXplSW5CeXRlcykKICAgICB7Ci0gICAgICAgIG1fdHJhY2tl
ciA9IHRyYWNrZXI7CisgICAgICAgIGF1dG8gbG9ja2VyID0gaG9sZExvY2sobV9sb2NrKTsKKyAg
ICAgICAgcmV0dXJuIGFsbG9jYXRlKGxvY2tlciwgc2l6ZUluQnl0ZXMpOwogICAgIH0KLSAgICAK
KyAgICBXVEZfRVhQT1JUX1BSSVZBVEUgUmVmUHRyPE1ldGFBbGxvY2F0b3JIYW5kbGU+IGFsbG9j
YXRlKGNvbnN0IExvY2tIb2xkZXImLCBzaXplX3Qgc2l6ZUluQnl0ZXMpOworCiAgICAgLy8gTm9u
LWF0b21pYyBtZXRob2RzIGZvciBnZXR0aW5nIGFsbG9jYXRvciBzdGF0aXN0aWNzLgogICAgIHNp
emVfdCBieXRlc0FsbG9jYXRlZCgpIHsgcmV0dXJuIG1fYnl0ZXNBbGxvY2F0ZWQ7IH0KICAgICBz
aXplX3QgYnl0ZXNSZXNlcnZlZCgpIHsgcmV0dXJuIG1fYnl0ZXNSZXNlcnZlZDsgfQpAQCAtODcs
NyArODcsMTIgQEAgcHVibGljOgogICAgICAgICBzaXplX3QgYnl0ZXNSZXNlcnZlZDsKICAgICAg
ICAgc2l6ZV90IGJ5dGVzQ29tbWl0dGVkOwogICAgIH07Ci0gICAgV1RGX0VYUE9SVF9QUklWQVRF
IFN0YXRpc3RpY3MgY3VycmVudFN0YXRpc3RpY3MoKTsKKyAgICBTdGF0aXN0aWNzIGN1cnJlbnRT
dGF0aXN0aWNzKCkKKyAgICB7CisgICAgICAgIGF1dG8gbG9ja2VyID0gaG9sZExvY2sobV9sb2Nr
KTsKKyAgICAgICAgcmV0dXJuIGN1cnJlbnRTdGF0aXN0aWNzKGxvY2tlcik7CisgICAgfQorICAg
IFdURl9FWFBPUlRfUFJJVkFURSBTdGF0aXN0aWNzIGN1cnJlbnRTdGF0aXN0aWNzKGNvbnN0IExv
Y2tIb2xkZXImKTsKIAogICAgIC8vIEFkZCBtb3JlIGZyZWUgc3BhY2UgdG8gdGhlIGFsbG9jYXRv
ci4gQ2FsbCB0aGlzIGRpcmVjdGx5IGZyb20KICAgICAvLyB0aGUgY29uc3RydWN0b3IgaWYgeW91
IHdpc2ggdG8gb3BlcmF0ZSB0aGUgYWxsb2NhdG9yIHdpdGhpbiBhCkBAIC05OCw3ICsxMDMsNiBA
QCBwdWJsaWM6CiAgICAgLy8gYnVpbGRzLgogICAgIFdURl9FWFBPUlRfUFJJVkFURSBzaXplX3Qg
ZGVidWdGcmVlU3BhY2VTaXplKCk7CiAKLSAgICBMb2NrJiBnZXRMb2NrKCkgeyByZXR1cm4gbV9s
b2NrOyB9CiAgICAgV1RGX0VYUE9SVF9QUklWQVRFIGJvb2wgaXNJbkFsbG9jYXRlZE1lbW9yeShj
b25zdCBBYnN0cmFjdExvY2tlciYsIHZvaWQqIGFkZHJlc3MpOwogICAgIAogI2lmIEVOQUJMRShN
RVRBX0FMTE9DQVRPUl9QUk9GSUxFKQpAQCAtMTA3LDYgKzExMSwxMSBAQCBwdWJsaWM6CiAgICAg
dm9pZCBkdW1wUHJvZmlsZSgpIHsgfQogI2VuZGlmCiAKKyAgICBNZXRhQWxsb2NhdG9ySGFuZGxl
KiBmaW5kKHZvaWQqIGFkZHJlc3MpCisgICAgeworICAgICAgICByZXR1cm4gbV90cmFja2VyLmZp
bmQoYWRkcmVzcyk7CisgICAgfQorCiBwcm90ZWN0ZWQ6CiAgICAgCiAgICAgLy8gQWxsb2NhdGUg
bmV3IHZpcnR1YWwgc3BhY2UsIGJ1dCBkb24ndCBjb21taXQuIFRoaXMgbWF5IHJldHVybiBtb3Jl
CkBAIC0xMjMsNiArMTMyLDggQEAgcHJvdGVjdGVkOgogICAgIC8vIGRlc3RydWN0aW9uLCBpbiBw
YXJ0IGJlY2F1c2UgYSBNZXRhQWxsb2NhdG9yIGNhbm5vdCBkaWUgc28gbG9uZwogICAgIC8vIGFz
IHRoZXJlIGFyZSBIYW5kbGVzIHRoYXQgcmVmZXIgdG8gaXQuCiAKKyAgICAvLyBSZWxlYXNlIGEg
TWV0YUFsbG9jYXRvckhhbmRsZS4KKyAgICB2aXJ0dWFsIHZvaWQgcmVsZWFzZShjb25zdCBMb2Nr
SG9sZGVyJiwgTWV0YUFsbG9jYXRvckhhbmRsZSYpOwogcHJpdmF0ZToKICAgICAKICAgICBmcmll
bmQgY2xhc3MgTWV0YUFsbG9jYXRvckhhbmRsZTsKQEAgLTE1MCw5ICsxNjEsNiBAQCBwcml2YXRl
OgogICAgICAgICBGcmVlU3BhY2VQdHIgbV9lbmQ7CiAgICAgfTsKICAgICB0eXBlZGVmIFJlZEJs
YWNrVHJlZTxGcmVlU3BhY2VOb2RlLCBzaXplX3Q+IFRyZWU7Ci0KLSAgICAvLyBSZWxlYXNlIGEg
TWV0YUFsbG9jYXRvckhhbmRsZS4KLSAgICB2b2lkIHJlbGVhc2UoTWV0YUFsbG9jYXRvckhhbmRs
ZSopOwogICAgIAogICAgIC8vIFJlbW92ZSBmcmVlIHNwYWNlIGZyb20gdGhlIGFsbG9jYXRvci4g
VGhpcyBpcyBlZmZlY3RpdmVseQogICAgIC8vIHRoZSBhbGxvY2F0ZSgpIGZ1bmN0aW9uLCBleGNl
cHQgdGhhdCBpdCBkb2VzIG5vdCBtYXJrIHRoZQpAQCAtMTkzLDkgKzIwMSw5IEBAIHByaXZhdGU6
CiAgICAgc2l6ZV90IG1fYnl0ZXNSZXNlcnZlZDsKICAgICBzaXplX3QgbV9ieXRlc0NvbW1pdHRl
ZDsKICAgICAKLSAgICBMb2NrIG1fbG9jazsKKyAgICBMb2NrJiBtX2xvY2s7CiAKLSAgICBNZXRh
QWxsb2NhdG9yVHJhY2tlciogbV90cmFja2VyOworICAgIE1ldGFBbGxvY2F0b3JUcmFja2VyIG1f
dHJhY2tlcjsgLy8gT09QUzogcmVtb3ZlPwogCiAjaWZuZGVmIE5ERUJVRwogICAgIHNpemVfdCBt
X21hbGxvY0JhbGFuY2U7CkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9NZXRhQWxsb2NhdG9ySGFuZGxl
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvTWV0YUFsbG9jYXRvckhhbmRsZS5oCShy
ZXZpc2lvbiAyNTc4NjYpCisrKyBTb3VyY2UvV1RGL3d0Zi9NZXRhQWxsb2NhdG9ySGFuZGxlLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTQyLDcgKzQyLDcgQEAgREVDTEFSRV9BTExPQ0FUT1JfV0lUSF9I
RUFQX0lERU5USUZJRVIoTQogY2xhc3MgTWV0YUFsbG9jYXRvckhhbmRsZSA6IHB1YmxpYyBUaHJl
YWRTYWZlUmVmQ291bnRlZDxNZXRhQWxsb2NhdG9ySGFuZGxlPiwgcHVibGljIFJlZEJsYWNrVHJl
ZTxNZXRhQWxsb2NhdG9ySGFuZGxlLCB2b2lkKj46Ok5vZGUgewogICAgIFdURl9NQUtFX0ZBU1Rf
QUxMT0NBVEVEX1dJVEhfSEVBUF9JREVOVElGSUVSKE1ldGFBbGxvY2F0b3JIYW5kbGUpOwogcHJp
dmF0ZToKLSAgICBNZXRhQWxsb2NhdG9ySGFuZGxlKE1ldGFBbGxvY2F0b3IqLCB2b2lkKiBzdGFy
dCwgc2l6ZV90IHNpemVJbkJ5dGVzLCB2b2lkKiBvd25lclVJRCk7CisgICAgTWV0YUFsbG9jYXRv
ckhhbmRsZShNZXRhQWxsb2NhdG9yJiwgdm9pZCogc3RhcnQsIHNpemVfdCBzaXplSW5CeXRlcyk7
CiAKIHB1YmxpYzoKICAgICB1c2luZyBNZW1vcnlQdHIgPSBNZXRhQWxsb2NhdG9yUHRyPEhhbmRs
ZU1lbW9yeVB0clRhZz47CkBAIC04NiwyMiArODYsMTEgQEAgcHVibGljOgogICAgICAgICAKICAg
ICBXVEZfRVhQT1JUX1BSSVZBVEUgdm9pZCBzaHJpbmsoc2l6ZV90IG5ld1NpemVJbkJ5dGVzKTsK
ICAgICAKLSAgICBib29sIGlzTWFuYWdlZCgpCisgICAgTWV0YUFsbG9jYXRvciYgYWxsb2NhdG9y
KCkKICAgICB7Ci0gICAgICAgIHJldHVybiAhIW1fYWxsb2NhdG9yOwotICAgIH0KLSAgICAgICAg
Ci0gICAgTWV0YUFsbG9jYXRvciogYWxsb2NhdG9yKCkKLSAgICB7Ci0gICAgICAgIEFTU0VSVCht
X2FsbG9jYXRvcik7CiAgICAgICAgIHJldHVybiBtX2FsbG9jYXRvcjsKICAgICB9CiAKLSAgICB2
b2lkKiBvd25lclVJRCgpCi0gICAgewotICAgICAgICByZXR1cm4gbV9vd25lclVJRDsKLSAgICB9
Ci0KICAgICB2b2lkKiBrZXkoKQogICAgIHsKICAgICAgICAgcmV0dXJuIG1fc3RhcnQudW50YWdn
ZWRQdHIoKTsKQEAgLTExMiwxMCArMTAxLDkgQEAgcHVibGljOgogcHJpdmF0ZToKICAgICBmcmll
bmQgY2xhc3MgTWV0YUFsbG9jYXRvcjsKICAgICAKLSAgICBNZXRhQWxsb2NhdG9yKiBtX2FsbG9j
YXRvcjsKKyAgICBNZXRhQWxsb2NhdG9yJiBtX2FsbG9jYXRvcjsKICAgICBNZW1vcnlQdHIgbV9z
dGFydDsKICAgICBNZW1vcnlQdHIgbV9lbmQ7Ci0gICAgdm9pZCogbV9vd25lclVJRDsKIH07CiAK
IH0KSW5kZXg6IFNvdXJjZS9XVEYvd3RmL1JlZEJsYWNrVHJlZS5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XVEYvd3RmL1JlZEJsYWNrVHJlZS5oCShyZXZpc2lvbiAyNTc4NjYpCisrKyBTb3VyY2Uv
V1RGL3d0Zi9SZWRCbGFja1RyZWUuaAkod29ya2luZyBjb3B5KQpAQCAtMzI0LDYgKzMyNCwyNiBA
QCBwdWJsaWM6CiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuIGJlc3Q7CiAgICAgfQorCisgICAg
dGVtcGxhdGUgPHR5cGVuYW1lIEZ1bmN0aW9uPgorICAgIHZvaWQgaXRlcmF0ZShGdW5jdGlvbiBm
dW5jdGlvbikKKyAgICB7CisgICAgICAgIGlmICghbV9yb290KQorICAgICAgICAgICAgcmV0dXJu
OworCisgICAgICAgIFZlY3RvcjxOb2RlVHlwZSosIDE2PiB0b0l0ZXJhdGU7CisgICAgICAgIHRv
SXRlcmF0ZS5hcHBlbmQobV9yb290KTsKKyAgICAgICAgd2hpbGUgKHRvSXRlcmF0ZS5zaXplKCkp
IHsKKyAgICAgICAgICAgIE5vZGVUeXBlJiBjdXJyZW50ID0gKnRvSXRlcmF0ZS50YWtlTGFzdCgp
OworICAgICAgICAgICAgYm9vbCBpdGVyYXRlTGVmdCA9IGZhbHNlOworICAgICAgICAgICAgYm9v
bCBpdGVyYXRlUmlnaHQgPSBmYWxzZTsKKyAgICAgICAgICAgIGZ1bmN0aW9uKGN1cnJlbnQsIGl0
ZXJhdGVMZWZ0LCBpdGVyYXRlUmlnaHQpOworICAgICAgICAgICAgaWYgKGl0ZXJhdGVMZWZ0ICYm
IGN1cnJlbnQubGVmdCgpKQorICAgICAgICAgICAgICAgIHRvSXRlcmF0ZS5hcHBlbmQoY3VycmVu
dC5sZWZ0KCkpOworICAgICAgICAgICAgaWYgKGl0ZXJhdGVSaWdodCAmJiBjdXJyZW50LnJpZ2h0
KCkpCisgICAgICAgICAgICAgICAgdG9JdGVyYXRlLmFwcGVuZChjdXJyZW50LnJpZ2h0KCkpOwor
ICAgICAgICB9CisgICAgfQogICAgIAogICAgIE5vZGVUeXBlKiBmaXJzdCgpIGNvbnN0CiAgICAg
ewpJbmRleDogU291cmNlL1dURi93dGYvU3RkTGliRXh0cmFzLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dURi93dGYvU3RkTGliRXh0cmFzLmgJKHJldmlzaW9uIDI1Nzg2NikKKysrIFNvdXJjZS9X
VEYvd3RmL1N0ZExpYkV4dHJhcy5oCSh3b3JraW5nIGNvcHkpCkBAIC00ODksNiArNDg5LDE5IEBA
IEFMV0FZU19JTkxJTkUgZGVjbHR5cGUoYXV0bykgbWFrZVVuaXF1ZVcKICAgICByZXR1cm4gc3Rk
OjptYWtlX3VuaXF1ZTxUPihzdGQ6OmZvcndhcmQ8QXJncz4oYXJncykuLi4pOwogfQogCit0ZW1w
bGF0ZSA8dHlwZW5hbWUgUmVzdWx0VHlwZSwgc2l6ZV90Li4uIElzLCB0eXBlbmFtZSAuLi5Bcmdz
PgorY29uc3RleHByIGF1dG8gY29uc3RydWN0Rml4ZWRTaXplQXJyYXlXaXRoQXJndW1lbnRzSW1w
bChzdGQ6OmluZGV4X3NlcXVlbmNlPElzLi4uPiwgQXJncyYmLi4uIGFyZ3MpIC0+IHN0ZDo6YXJy
YXk8UmVzdWx0VHlwZSwgc2l6ZW9mLi4uKElzKT4KK3sKKyAgICByZXR1cm4geyAoKHZvaWQpSXMs
IFJlc3VsdFR5cGUgeyBhcmdzLi4uIH0pLi4uIH07Cit9CisKKy8vIENvbnN0cnVjdCBhbiBzdGQ6
OmFycmF5IHdpdGggTiBlbGVtZW50cyBvZiBSZXN1bHRUeXBlLCBwYXNzaW5nIEFyZ3MgdG8gZWFj
aCBvZiB0aGUgTiBjb25zdHJ1Y3RvcnMuCit0ZW1wbGF0ZTx0eXBlbmFtZSBSZXN1bHRUeXBlLCBz
aXplX3QgTiwgdHlwZW5hbWUgLi4uQXJncz4KK2NvbnN0ZXhwciBhdXRvIGNvbnN0cnVjdEZpeGVk
U2l6ZUFycmF5V2l0aEFyZ3VtZW50cyhBcmdzJiYuLi4gYXJncykgLT4gZGVjbHR5cGUoYXV0bykK
K3sKKyAgICBhdXRvIHR1cGxlID0gc3RkOjptYWtlX2luZGV4X3NlcXVlbmNlPE4+KCk7CisgICAg
cmV0dXJuIGNvbnN0cnVjdEZpeGVkU2l6ZUFycmF5V2l0aEFyZ3VtZW50c0ltcGw8UmVzdWx0VHlw
ZT4odHVwbGUsIHN0ZDo6Zm9yd2FyZDxBcmdzPihhcmdzKS4uLik7Cit9CiAKIH0gLy8gbmFtZXNw
YWNlIFdURgogCkBAIC01MTQsMyArNTI3LDQgQEAgdXNpbmcgV1RGOjpzYWZlQ2FzdDsKIHVzaW5n
IFdURjo6dHJ5QmluYXJ5U2VhcmNoOwogdXNpbmcgV1RGOjptYWtlVW5pcXVlOwogdXNpbmcgV1RG
OjptYWtlVW5pcXVlV2l0aG91dEZhc3RNYWxsb2NDaGVjazsKK3VzaW5nIFdURjo6Y29uc3RydWN0
Rml4ZWRTaXplQXJyYXlXaXRoQXJndW1lbnRzOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>393118</attachid>
            <date>2020-03-09 20:16:06 -0700</date>
            <delta_ts>2020-03-10 16:04:51 -0700</delta_ts>
            <desc>WIP</desc>
            <filename>c-backup.diff</filename>
            <type>text/plain</type>
            <size>67727</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9Tb3VyY2VzLnR4dAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvU291cmNlcy50eHQJKHJldmlzaW9uIDI1Nzg2NikKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9Tb3VyY2VzLnR4dAkod29ya2luZyBjb3B5KQpAQCAtOTk0LDgg
Kzk5NCw2IEBAIHJ1bnRpbWUvV2lkZW5pbmdOdW1iZXJQcmVkaWN0aW9uRnV6emVyQWcKIEpTQ0J1
aWx0aW5zLmNwcAogCiB0b29scy9DZWxsTGlzdC5jcHAKLXRvb2xzL0NvZGVQcm9maWxlLmNwcAot
dG9vbHMvQ29kZVByb2ZpbGluZy5jcHAKIHRvb2xzL0NvbXBpbGVyVGltaW5nU2NvcGUuY3BwCiB0
b29scy9GdW5jdGlvbk92ZXJyaWRlcy5jcHAKIHRvb2xzL0Z1bmN0aW9uV2hpdGVsaXN0LmNwcApJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9q
ZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3Jp
cHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDI1Nzg2NikKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhw
cm9qCSh3b3JraW5nIGNvcHkpCkBAIC00MDcxLDggKzQwNzEsNiBAQAogCQk4NjAxNjFFMDBGM0E4
M0MxMDBGODQ3MTAgLyogTWFjcm9Bc3NlbWJsZXJYODYuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gTWFjcm9Bc3NlbWJsZXJYODYuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJODYwMTYxRTEwRjNBODNDMTAwRjg0NzEwIC8qIE1hY3JvQXNzZW1ibGVyWDg2XzY0Lmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE1hY3JvQXNzZW1ibGVyWDg2XzY0Lmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTg2MDE2MUUyMEYzQTgzQzEwMEY4NDcxMCAv
KiBNYWNyb0Fzc2VtYmxlclg4NkNvbW1vbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBNYWNyb0Fzc2VtYmxlclg4NkNvbW1vbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwotCQk4NjAzQ0VGMjE0Qzc1NDY0MDBBRTU5RTMgLyogQ29kZVByb2ZpbGluZy5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBDb2RlUHJvZmlsaW5nLmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJODYwM0NFRjMxNEM3NTQ2NDAwQUU1OUUzIC8qIENvZGVQ
cm9maWxpbmcuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ29kZVByb2ZpbGlu
Zy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk4NjA0RjRGMjE0M0E2QzQ0MDBCMjk1
RjUgLyogQ2hhbmdlTG9nICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZp
bGVUeXBlID0gdGV4dDsgbGluZUVuZGluZyA9IDA7IHBhdGggPSBDaGFuZ2VMb2c7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTg2MDZEREU5MThEQTQ0QUIwMEEzODNEMCAvKiBJZGVudGlm
aWVySW5saW5lcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJZGVudGlmaWVy
SW5saW5lcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk4NjEyRTRDQjE1MjI5MTg0
MDBDODM2QkUgLyogTWF0Y2hSZXN1bHQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gTWF0Y2hSZXN1bHQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTQxMTgsOCAr
NDExNiw2IEBACiAJCTg2QUREMTQzMEZEREVBOTgwMDA2RkZDQyAvKiBBUk12N1JlZ2lzdGVycy5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBBUk12N1JlZ2lzdGVycy5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk4NkFERDE0NDBGRERFQTk4MDAwNkVFQzIgLyogTWFj
cm9Bc3NlbWJsZXJBUk12Ny5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBNYWNy
b0Fzc2VtYmxlckFSTXY3Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTg2QjU4MjJD
MTREMjJGNUYwMEE5QzMwNiAvKiBQcm9maWxlVHJlZU5vZGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gUHJvZmlsZVRyZWVOb2RlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07Ci0JCTg2QjU4MjJFMTREMjM3M0IwMEE5QzMwNiAvKiBDb2RlUHJvZmlsZS5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBDb2RlUHJvZmlsZS5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTg2QjU4MjJGMTREMjM3M0IwMEE5QzMwNiAvKiBDb2RlUHJv
ZmlsZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBDb2RlUHJvZmlsZS5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk4NkI1ODI2QTE0RDM1RDUxMDBBOUMzMDYgLyog
VGllcmVkTU1hcEFycmF5LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFRpZXJl
ZE1NYXBBcnJheS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk4NkJGNjQyQTE0OERC
MkI1MDA0REUzNkEgLyogSW50cmluc2ljLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IEludHJpbnNpYy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk4NkMzNkVFOTBF
RTEyODlEMDBCM0RGNTkgLyogTWFjcm9Bc3NlbWJsZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gTWFjcm9Bc3NlbWJsZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
QEAgLTc2NzYsMTAgKzc2NzIsNiBAQAogCQkJCUZFMUJEMDFCMUU3MjAwMjEwMDEzNEJDOSAvKiBD
ZWxsTGlzdC5jcHAgKi8sCiAJCQkJRkUxQkQwMUMxRTcyMDAyMTAwMTM0QkM5IC8qIENlbGxMaXN0
LmggKi8sCiAJCQkJRkUxQkQwMjAxRTcyMDI3MDAwMTM0QkM5IC8qIENlbGxQcm9maWxlLmggKi8s
Ci0JCQkJODZCNTgyMkUxNEQyMzczQjAwQTlDMzA2IC8qIENvZGVQcm9maWxlLmNwcCAqLywKLQkJ
CQk4NkI1ODIyRjE0RDIzNzNCMDBBOUMzMDYgLyogQ29kZVByb2ZpbGUuaCAqLywKLQkJCQk4NjAz
Q0VGMjE0Qzc1NDY0MDBBRTU5RTMgLyogQ29kZVByb2ZpbGluZy5jcHAgKi8sCi0JCQkJODYwM0NF
RjMxNEM3NTQ2NDAwQUU1OUUzIC8qIENvZGVQcm9maWxpbmcuaCAqLywKIAkJCQkwRjRGMTFFNzIw
OUJDREExMDA3MDk2NTQgLyogQ29tcGlsZXJUaW1pbmdTY29wZS5jcHAgKi8sCiAJCQkJMEY0RjEx
RTYyMDlCQ0RBMTAwNzA5NjU0IC8qIENvbXBpbGVyVGltaW5nU2NvcGUuaCAqLywKIAkJCQlGRTRC
RkYyOTFBRDQ3NkU3MDAwODhGODcgLyogRnVuY3Rpb25PdmVycmlkZXMuY3BwICovLApJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9BUk02NEFzc2VtYmxlci5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvQVJNNjRBc3NlbWJsZXIuaAko
cmV2aXNpb24gMjU3ODY2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9BUk02
NEFzc2VtYmxlci5oCSh3b3JraW5nIGNvcHkpCkBAIC03ODMsMTIgKzc4Myw5IEBAIHB1YmxpYzoK
ICAgICAgICAgaW5zbihkYXRhUHJvY2Vzc2luZzJTb3VyY2UoREFUQVNJWkUsIHJtLCBEYXRhT3Bf
QVNSViwgcm4sIHJkKSk7CiAgICAgfQogCi0gICAgQUxXQVlTX0lOTElORSB2b2lkIGIoaW50MzJf
dCBvZmZzZXQgPSAwKQorICAgIEFMV0FZU19JTkxJTkUgdm9pZCBiKCkKICAgICB7Ci0gICAgICAg
IEFTU0VSVCghKG9mZnNldCAmIDMpKTsKLSAgICAgICAgb2Zmc2V0ID4+PSAyOwotICAgICAgICBB
U1NFUlQob2Zmc2V0ID09IChvZmZzZXQgPDwgNikgPj4gNik7Ci0gICAgICAgIGluc24odW5jb25k
aXRpb25hbEJyYW5jaEltbWVkaWF0ZShmYWxzZSwgb2Zmc2V0KSk7CisgICAgICAgIGluc24odW5j
b25kaXRpb25hbEJyYW5jaEltbWVkaWF0ZShmYWxzZSwgMCkpOwogICAgIH0KIAogICAgIEFMV0FZ
U19JTkxJTkUgdm9pZCBiX2NvbmQoQ29uZGl0aW9uIGNvbmQsIGludDMyX3Qgb2Zmc2V0ID0gMCkK
QEAgLTgzMSwxMSArODI4LDkgQEAgcHVibGljOgogICAgICAgICBpbnNuKGxvZ2ljYWxTaGlmdGVk
UmVnaXN0ZXIoREFUQVNJWkUsIHNldEZsYWdzID8gTG9naWNhbE9wX0FORFMgOiBMb2dpY2FsT3Bf
QU5ELCBzaGlmdCwgdHJ1ZSwgcm0sIGFtb3VudCwgcm4sIHJkKSk7CiAgICAgfQogCi0gICAgQUxX
QVlTX0lOTElORSB2b2lkIGJsKGludDMyX3Qgb2Zmc2V0ID0gMCkKKyAgICBBTFdBWVNfSU5MSU5F
IHZvaWQgYmwoKQogICAgIHsKLSAgICAgICAgQVNTRVJUKCEob2Zmc2V0ICYgMykpOwotICAgICAg
ICBvZmZzZXQgPj49IDI7Ci0gICAgICAgIGluc24odW5jb25kaXRpb25hbEJyYW5jaEltbWVkaWF0
ZSh0cnVlLCBvZmZzZXQpKTsKKyAgICAgICAgaW5zbih1bmNvbmRpdGlvbmFsQnJhbmNoSW1tZWRp
YXRlKHRydWUsIDApKTsKICAgICB9CiAKICAgICBBTFdBWVNfSU5MSU5FIHZvaWQgYmxyKFJlZ2lz
dGVySUQgcm4pCkBAIC0yNTgyLDYgKzI1NzcsMTMgQEAgcHVibGljOgogICAgIHsKICAgICAgICAg
aW50cHRyX3Qgb2Zmc2V0ID0gKHJlaW50ZXJwcmV0X2Nhc3Q8aW50cHRyX3Q+KHRvKSAtIHJlaW50
ZXJwcmV0X2Nhc3Q8aW50cHRyX3Q+KHdoZXJlKSkgPj4gMjsKICAgICAgICAgQVNTRVJUKHN0YXRp
Y19jYXN0PGludD4ob2Zmc2V0KSA9PSBvZmZzZXQpOworCisgICAgICAgIGlmICghaXNJbnQ8MjY+
KG9mZnNldCkpIHsKKyAgICAgICAgICAgIHRvID0gRXhlY3V0YWJsZUFsbG9jYXRvcjo6c2luZ2xl
dG9uKCkuZ2V0SnVtcElzbGFuZFRvKHdoZXJlLCB0byk7CisgICAgICAgICAgICBvZmZzZXQgPSAo
Yml0d2lzZV9jYXN0PGludHB0cl90Pih0bykgLSBiaXR3aXNlX2Nhc3Q8aW50cHRyX3Q+KHdoZXJl
KSkgPj4gMjsKKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKGlzSW50PDI2PihvZmZzZXQpKTsK
KyAgICAgICAgfQorCiAgICAgICAgIGludCBpbnNuID0gdW5jb25kaXRpb25hbEJyYW5jaEltbWVk
aWF0ZShmYWxzZSwgc3RhdGljX2Nhc3Q8aW50PihvZmZzZXQpKTsKICAgICAgICAgUkVMRUFTRV9B
U1NFUlQocm91bmRVcFRvTXVsdGlwbGVPZjxpbnN0cnVjdGlvblNpemU+KHdoZXJlKSA9PSB3aGVy
ZSk7CiAgICAgICAgIHBlcmZvcm1KSVRNZW1jcHkod2hlcmUsICZpbnNuLCBzaXplb2YoaW50KSk7
CkBAIC0yODcyLDcgKzI4NzQsNyBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgcmV0dXJuIExp
bmtKdW1wQ29uZGl0aW9uRGlyZWN0OwogCiAgICAgICAgICAgICByZXR1cm4gTGlua0p1bXBDb25k
aXRpb247Ci0gICAgICAgICAgICB9CisgICAgICAgIH0KICAgICAgICAgY2FzZSBKdW1wQ29tcGFy
ZUFuZEJyYW5jaDogIHsKICAgICAgICAgICAgIEFTU0VSVChpczRCeXRlQWxpZ25lZChmcm9tKSk7
CiAgICAgICAgICAgICBBU1NFUlQoaXM0Qnl0ZUFsaWduZWQodG8pKTsKQEAgLTI5OTQsOSArMjk5
NiwxNSBAQCBwcm90ZWN0ZWQ6CiAgICAgICAgIEFTU0VSVCghKHJlaW50ZXJwcmV0X2Nhc3Q8aW50
cHRyX3Q+KHRvKSAmIDMpKTsKICAgICAgICAgYXNzZXJ0SXNOb3RUYWdnZWQodG8pOwogICAgICAg
ICBhc3NlcnRJc05vdFRhZ2dlZChmcm9tSW5zdHJ1Y3Rpb24pOwotICAgICAgICBpbnRwdHJfdCBv
ZmZzZXQgPSAocmVpbnRlcnByZXRfY2FzdDxpbnRwdHJfdD4odG8pIC0gcmVpbnRlcnByZXRfY2Fz
dDxpbnRwdHJfdD4oZnJvbUluc3RydWN0aW9uKSkgPj4gMjsKKyAgICAgICAgaW50cHRyX3Qgb2Zm
c2V0ID0gKGJpdHdpc2VfY2FzdDxpbnRwdHJfdD4odG8pIC0gYml0d2lzZV9jYXN0PGludHB0cl90
Pihmcm9tSW5zdHJ1Y3Rpb24pKSA+PiAyOwogICAgICAgICBBU1NFUlQoc3RhdGljX2Nhc3Q8aW50
PihvZmZzZXQpID09IG9mZnNldCk7CiAKKyAgICAgICAgaWYgKCFpc0ludDwyNj4ob2Zmc2V0KSkg
eworICAgICAgICAgICAgdG8gPSBFeGVjdXRhYmxlQWxsb2NhdG9yOjpzaW5nbGV0b24oKS5nZXRK
dW1wSXNsYW5kVG8oYml0d2lzZV9jYXN0PHZvaWQqPihmcm9tSW5zdHJ1Y3Rpb24pLCB0byk7Cisg
ICAgICAgICAgICBvZmZzZXQgPSAoYml0d2lzZV9jYXN0PGludHB0cl90Pih0bykgLSBiaXR3aXNl
X2Nhc3Q8aW50cHRyX3Q+KGZyb21JbnN0cnVjdGlvbikpID4+IDI7CisgICAgICAgICAgICBSRUxF
QVNFX0FTU0VSVChpc0ludDwyNj4ob2Zmc2V0KSk7CisgICAgICAgIH0KKwogICAgICAgICBpbnQg
aW5zbiA9IHVuY29uZGl0aW9uYWxCcmFuY2hJbW1lZGlhdGUoaXNDYWxsLCBzdGF0aWNfY2FzdDxp
bnQ+KG9mZnNldCkpOwogICAgICAgICBSRUxFQVNFX0FTU0VSVChyb3VuZFVwVG9NdWx0aXBsZU9m
PGluc3RydWN0aW9uU2l6ZT4oZnJvbSkgPT0gZnJvbSk7CiAgICAgICAgIGNvcHkoZnJvbSwgJmlu
c24sIHNpemVvZihpbnQpKTsKQEAgLTMwMDgsNyArMzAxNiw3IEBAIHByb3RlY3RlZDoKICAgICAg
ICAgQVNTRVJUKCEocmVpbnRlcnByZXRfY2FzdDxpbnRwdHJfdD4oZnJvbSkgJiAzKSk7CiAgICAg
ICAgIEFTU0VSVCghKHJlaW50ZXJwcmV0X2Nhc3Q8aW50cHRyX3Q+KHRvKSAmIDMpKTsKICAgICAg
ICAgaW50cHRyX3Qgb2Zmc2V0ID0gKHJlaW50ZXJwcmV0X2Nhc3Q8aW50cHRyX3Q+KHRvKSAtIHJl
aW50ZXJwcmV0X2Nhc3Q8aW50cHRyX3Q+KGZyb21JbnN0cnVjdGlvbikpID4+IDI7Ci0gICAgICAg
IEFTU0VSVChpc0ludDwyNj4ob2Zmc2V0KSk7CisgICAgICAgIC8vQVNTRVJUKGlzSW50PDI2Pihv
ZmZzZXQpKTsgLy9PT1BTCiAKICAgICAgICAgYm9vbCB1c2VEaXJlY3QgPSBpc0ludDwxOT4ob2Zm
c2V0KTsKICAgICAgICAgQVNTRVJUKHR5cGUgPT0gSW5kaXJlY3RCcmFuY2ggfHwgdXNlRGlyZWN0
KTsKQEAgLTMwMzYsNyArMzA0NCw3IEBAIHByb3RlY3RlZDoKICAgICAgICAgQVNTRVJUKCEocmVp
bnRlcnByZXRfY2FzdDxpbnRwdHJfdD4oZnJvbSkgJiAzKSk7CiAgICAgICAgIEFTU0VSVCghKHJl
aW50ZXJwcmV0X2Nhc3Q8aW50cHRyX3Q+KHRvKSAmIDMpKTsKICAgICAgICAgaW50cHRyX3Qgb2Zm
c2V0ID0gKHJlaW50ZXJwcmV0X2Nhc3Q8aW50cHRyX3Q+KHRvKSAtIHJlaW50ZXJwcmV0X2Nhc3Q8
aW50cHRyX3Q+KGZyb21JbnN0cnVjdGlvbikpID4+IDI7Ci0gICAgICAgIEFTU0VSVChpc0ludDwy
Nj4ob2Zmc2V0KSk7CisgICAgICAgIC8vIEFTU0VSVChpc0ludDwyNj4ob2Zmc2V0KSk7IE9PUFMK
IAogICAgICAgICBib29sIHVzZURpcmVjdCA9IGlzSW50PDE5PihvZmZzZXQpOwogICAgICAgICBB
U1NFUlQodHlwZSA9PSBJbmRpcmVjdEJyYW5jaCB8fCB1c2VEaXJlY3QpOwpAQCAtMzA2NSw3ICsz
MDczLDcgQEAgcHJvdGVjdGVkOgogICAgICAgICBBU1NFUlQoIShyZWludGVycHJldF9jYXN0PGlu
dHB0cl90Pih0bykgJiAzKSk7CiAgICAgICAgIGludHB0cl90IG9mZnNldCA9IChyZWludGVycHJl
dF9jYXN0PGludHB0cl90Pih0bykgLSByZWludGVycHJldF9jYXN0PGludHB0cl90Pihmcm9tSW5z
dHJ1Y3Rpb24pKSA+PiAyOwogICAgICAgICBBU1NFUlQoc3RhdGljX2Nhc3Q8aW50PihvZmZzZXQp
ID09IG9mZnNldCk7Ci0gICAgICAgIEFTU0VSVChpc0ludDwyNj4ob2Zmc2V0KSk7CisgICAgICAg
IC8vQVNTRVJUKGlzSW50PDI2PihvZmZzZXQpKTsgT09QUwogCiAgICAgICAgIGJvb2wgdXNlRGly
ZWN0ID0gaXNJbnQ8MTQ+KG9mZnNldCk7CiAgICAgICAgIEFTU0VSVCh0eXBlID09IEluZGlyZWN0
QnJhbmNoIHx8IHVzZURpcmVjdCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1i
bGVyL0xpbmtCdWZmZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9h
c3NlbWJsZXIvTGlua0J1ZmZlci5jcHAJKHJldmlzaW9uIDI1Nzg2NikKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9hc3NlbWJsZXIvTGlua0J1ZmZlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM0
NCw3ICszNDQsOCBAQCB2b2lkIExpbmtCdWZmZXI6OmFsbG9jYXRlKE1hY3JvQXNzZW1ibGVyCiAg
ICAgICAgIGluaXRpYWxTaXplID0gbWFjcm9Bc3NlbWJsZXIubV9hc3NlbWJsZXIuY29kZVNpemUo
KTsKICAgICB9CiAKLSAgICBtX2V4ZWN1dGFibGVNZW1vcnkgPSBFeGVjdXRhYmxlQWxsb2NhdG9y
OjpzaW5nbGV0b24oKS5hbGxvY2F0ZShpbml0aWFsU2l6ZSwgb3duZXJVSUQsIGVmZm9ydCk7Cisg
ICAgVU5VU0VEX1BBUkFNKG93bmVyVUlEKTsgLy8gT09QUzogZ2V0IHJpZCBvZiBvd25lclVJRD8K
KyAgICBtX2V4ZWN1dGFibGVNZW1vcnkgPSBFeGVjdXRhYmxlQWxsb2NhdG9yOjpzaW5nbGV0b24o
KS5hbGxvY2F0ZShpbml0aWFsU2l6ZSwgZWZmb3J0KTsKICAgICBpZiAoIW1fZXhlY3V0YWJsZU1l
bW9yeSkKICAgICAgICAgcmV0dXJuOwogICAgIG1fY29kZSA9IE1hY3JvQXNzZW1ibGVyQ29kZVB0
cjxMaW5rQnVmZmVyUHRyVGFnPihtX2V4ZWN1dGFibGVNZW1vcnktPnN0YXJ0KCkucmV0YWdnZWRQ
dHI8TGlua0J1ZmZlclB0clRhZz4oKSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNz
ZW1ibGVyL01hY3JvQXNzZW1ibGVyQ29kZVJlZi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJDb2RlUmVmLmgJKHJldmlzaW9uIDI1
Nzg2NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJD
b2RlUmVmLmgJKHdvcmtpbmcgY29weSkKQEAgLTQzNCw3ICs0MzQsNiBAQCBwdWJsaWM6CiAgICAg
ICAgIDogbV9jb2RlUHRyKGV4ZWN1dGFibGVNZW1vcnktPnN0YXJ0KCkucmV0YWdnZWRQdHI8dGFn
PigpKQogICAgICAgICAsIG1fZXhlY3V0YWJsZU1lbW9yeShXVEZNb3ZlKGV4ZWN1dGFibGVNZW1v
cnkpKQogICAgIHsKLSAgICAgICAgQVNTRVJUKG1fZXhlY3V0YWJsZU1lbW9yeS0+aXNNYW5hZ2Vk
KCkpOwogICAgICAgICBBU1NFUlQobV9leGVjdXRhYmxlTWVtb3J5LT5zdGFydCgpKTsKICAgICAg
ICAgQVNTRVJUKG1fY29kZVB0cik7CiAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9FeGVjdXRhYmxlQWxsb2NhdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L0V4ZWN1dGFibGVBbGxvY2F0b3IuY3BwCShyZXZpc2lvbiAyNTc4NjYpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0V4ZWN1dGFibGVBbGxvY2F0b3IuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yOCw5ICsyOCwxMCBAQAogCiAjaWYgRU5BQkxFKEpJVCkKIAotI2luY2x1
ZGUgIkNvZGVQcm9maWxpbmcuaCIKICNpbmNsdWRlICJFeGVjdXRhYmxlQWxsb2NhdGlvbkZ1enou
aCIKKyNpbmNsdWRlICJJdGVyYXRpb25TdGF0dXMuaCIKICNpbmNsdWRlICJKU0NJbmxpbmVzLmgi
CisjaW5jbHVkZSA8dHlwZV90cmFpdHM+CiAjaW5jbHVkZSA8d3RmL0ZpbGVTeXN0ZW0uaD4KICNp
bmNsdWRlIDx3dGYvTWV0YUFsbG9jYXRvci5oPgogI2luY2x1ZGUgPHd0Zi9QYWdlUmVzZXJ2YXRp
b24uaD4KQEAgLTk2LDkgKzk3LDE0IEBAIHN0YXRpYyBjb25zdGV4cHIgc2l6ZV90IGZpeGVkRXhl
Y3V0YWJsZU0KICNlbGlmIENQVShBUk0pCiBzdGF0aWMgY29uc3RleHByIHNpemVfdCBmaXhlZEV4
ZWN1dGFibGVNZW1vcnlQb29sU2l6ZSA9IDE2ICogMTAyNCAqIDEwMjQ7CiAjZWxpZiBDUFUoQVJN
NjQpCi1zdGF0aWMgY29uc3RleHByIHNpemVfdCBmaXhlZEV4ZWN1dGFibGVNZW1vcnlQb29sU2l6
ZSA9IDEyOCAqIDEwMjQgKiAxMDI0Oworc3RhdGljIGNvbnN0ZXhwciBzaXplX3QgZml4ZWRFeGVj
dXRhYmxlTWVtb3J5UG9vbFNpemUgPSAxICogMTAyNCAqIDEwMjQgKiAxMDI0Oworc3RhdGljIGNv
bnN0ZXhwciBzaXplX3QgcmVnaW9uU2l6ZSA9IDExMiAqIDEwMjQgKiAxMDI0Oworc3RhdGljIGNv
bnN0ZXhwciBzaXplX3QgaXNsYW5kUmVnaW9uU2l6ZSA9IDE2ICogMTAyNCAqIDEwMjQ7CitzdGF0
aWMgY29uc3RleHByIHNpemVfdCBudW1iZXJPZlJlZ2lvbnMgPSBmaXhlZEV4ZWN1dGFibGVNZW1v
cnlQb29sU2l6ZSAvIHJlZ2lvblNpemU7CitzdGF0aWMgY29uc3RleHByIHNpemVfdCBpc2xhbmRT
aXplSW5CeXRlcyA9IDQ7CitzdGF0aWMgY29uc3RleHByIHNpemVfdCBtYXhJc2xhbmRzUGVyUmVn
aW9uID0gaXNsYW5kUmVnaW9uU2l6ZSAvIGlzbGFuZFNpemVJbkJ5dGVzOwogI2VsaWYgQ1BVKFg4
Nl82NCkKLXN0YXRpYyBjb25zdGV4cHIgc2l6ZV90IGZpeGVkRXhlY3V0YWJsZU1lbW9yeVBvb2xT
aXplID0gMTAyNCAqIDEwMjQgKiAxMDI0Oworc3RhdGljIGNvbnN0ZXhwciBzaXplX3QgZml4ZWRF
eGVjdXRhYmxlTWVtb3J5UG9vbFNpemUgPSAxICogMTAyNCAqIDEwMjQgKiAxMDI0OwogI2Vsc2UK
IHN0YXRpYyBjb25zdGV4cHIgc2l6ZV90IGZpeGVkRXhlY3V0YWJsZU1lbW9yeVBvb2xTaXplID0g
MzIgKiAxMDI0ICogMTAyNDsKICNlbmRpZgpAQCAtMzEzLDkgKzMxOSwxMCBAQCBzdGF0aWMgQUxX
QVlTX0lOTElORSBKSVRSZXNlcnZhdGlvbiBpbml0CiAgICAgaWYgKCFpc0pJVEVuYWJsZWQoKSkK
ICAgICAgICAgcmV0dXJuIHJlc2VydmF0aW9uOwogCi0gICAgaWYgKE9wdGlvbnM6OmppdE1lbW9y
eVJlc2VydmF0aW9uU2l6ZSgpKQotICAgICAgICByZXNlcnZhdGlvbi5zaXplID0gT3B0aW9uczo6
aml0TWVtb3J5UmVzZXJ2YXRpb25TaXplKCk7Ci0gICAgZWxzZQorICAgIC8vIE9PUFMhCisgICAg
Ly9pZiAoT3B0aW9uczo6aml0TWVtb3J5UmVzZXJ2YXRpb25TaXplKCkpCisgICAgLy8gICAgcmVz
ZXJ2YXRpb24uc2l6ZSA9IE9wdGlvbnM6OmppdE1lbW9yeVJlc2VydmF0aW9uU2l6ZSgpOworICAg
IC8vZWxzZQogICAgICAgICByZXNlcnZhdGlvbi5zaXplID0gZml4ZWRFeGVjdXRhYmxlTWVtb3J5
UG9vbFNpemU7CiAgICAgcmVzZXJ2YXRpb24uc2l6ZSA9IHN0ZDo6bWF4KHJvdW5kVXBUb011bHRp
cGxlT2YocGFnZVNpemUoKSwgcmVzZXJ2YXRpb24uc2l6ZSksIHBhZ2VTaXplKCkgKiAyKTsKIApA
QCAtMzYzLDUyICszNzAsNDM2IEBAIHN0YXRpYyBBTFdBWVNfSU5MSU5FIEpJVFJlc2VydmF0aW9u
IGluaXQKICAgICByZXR1cm4gcmVzZXJ2YXRpb247CiB9CiAKLWNsYXNzIEZpeGVkVk1Qb29sRXhl
Y3V0YWJsZUFsbG9jYXRvciBmaW5hbCA6IHB1YmxpYyBNZXRhQWxsb2NhdG9yIHsKK2NsYXNzIEZp
eGVkVk1Qb29sRXhlY3V0YWJsZUFsbG9jYXRvciBmaW5hbCB7CiAgICAgV1RGX01BS0VfRkFTVF9B
TExPQ0FURUQ7CiBwdWJsaWM6CiAgICAgRml4ZWRWTVBvb2xFeGVjdXRhYmxlQWxsb2NhdG9yKCkK
LSAgICAgICAgOiBNZXRhQWxsb2NhdG9yKGppdEFsbG9jYXRpb25HcmFudWxlKSAvLyByb3VuZCB1
cCBhbGwgYWxsb2NhdGlvbnMgdG8gMzIgYnl0ZXMKKyNpZiBDUFUoQVJNNjQpCisgICAgICAgIDog
bV9hbGxvY2F0b3JzKGNvbnN0cnVjdEZpeGVkU2l6ZUFycmF5V2l0aEFyZ3VtZW50czxSZWdpb25B
bGxvY2F0b3IsIG51bWJlck9mUmVnaW9ucz4oKnRoaXMpKQorI2Vsc2UKKyAgICAgICAgOiBtX2Fs
bG9jYXRvcigqdGhpcykKKyNlbmRpZgogICAgIHsKICAgICAgICAgSklUUmVzZXJ2YXRpb24gcmVz
ZXJ2YXRpb24gPSBpbml0aWFsaXplSklUUGFnZVJlc2VydmF0aW9uKCk7CiAgICAgICAgIG1fcmVz
ZXJ2YXRpb24gPSBXVEZNb3ZlKHJlc2VydmF0aW9uLnBhZ2VSZXNlcnZhdGlvbik7CiAgICAgICAg
IGlmIChtX3Jlc2VydmF0aW9uKSB7Ci0gICAgICAgICAgICBhZGRGcmVzaEZyZWVTcGFjZShyZXNl
cnZhdGlvbi5iYXNlLCByZXNlcnZhdGlvbi5zaXplKTsKKyNpZiBDUFUoQVJNNjQpCisgICAgICAg
ICAgICB1aW50cHRyX3Qgc3RhcnQgPSBiaXR3aXNlX2Nhc3Q8dWludHB0cl90PihtX3Jlc2VydmF0
aW9uLmJhc2UoKSk7CisgICAgICAgICAgICB1aW50cHRyX3QgcmVzZXJ2YXRpb25FbmQgPSBzdGFy
dCArIG1fcmVzZXJ2YXRpb24uc2l6ZSgpOworICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7
IGkgPCBudW1iZXJPZlJlZ2lvbnM7ICsraSkgeworICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNT
RVJUKHN0YXJ0IDwgcmVzZXJ2YXRpb25FbmQpOworICAgICAgICAgICAgICAgIG1fYWxsb2NhdG9y
c1tpXS5zdGFydCA9IHN0YXJ0OworICAgICAgICAgICAgICAgIG1fYWxsb2NhdG9yc1tpXS5lbmQg
PSBzdGFydCArIHJlZ2lvblNpemU7CisgICAgICAgICAgICAgICAgaWYgKG1fYWxsb2NhdG9yc1tp
XS5lbmQgPiByZXNlcnZhdGlvbkVuZCkgeworICAgICAgICAgICAgICAgICAgICAvLyBXZSBtYXkg
aGF2ZSB0YWtlbiBhIHBhZ2UgZm9yIHRoZSBleGVjdXRhYmxlIG9ubHkgY29weSB0aHVuay4KKyAg
ICAgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoaSA9PSBudW1iZXJPZlJlZ2lvbnMgLSAx
KTsKKyAgICAgICAgICAgICAgICAgICAgbV9hbGxvY2F0b3JzW2ldLmVuZCA9IHJlc2VydmF0aW9u
RW5kOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIG1fYWxsb2NhdG9yc1tp
XS5hZGRGcmVzaEZyZWVTcGFjZShiaXR3aXNlX2Nhc3Q8dm9pZCo+KG1fYWxsb2NhdG9yc1tpXS5z
dGFydCksIG1fYWxsb2NhdG9yc1tpXS5hbGxvY2F0b3JTaXplKCkpOworCisgICAgICAgICAgICAg
ICAgc3RhcnQgKz0gcmVnaW9uU2l6ZTsKKyAgICAgICAgICAgIH0KKyNlbHNlCisgICAgICAgICAg
ICBtX2FsbG9jYXRvci5hZGRGcmVzaEZyZWVTcGFjZShyZXNlcnZhdGlvbi5iYXNlLCByZXNlcnZh
dGlvbi5zaXplKTsKKyNlbmRpZgorCiAgICAgICAgICAgICBBU1NFUlQoYnl0ZXNSZXNlcnZlZCgp
ID09IHJlc2VydmF0aW9uLnNpemUpOyAvLyBTaW5jZSBvdXIgZXhlY3V0YWJsZSBtZW1vcnkgaXMg
Zml4ZWQtc2l6ZWQsIGJ5dGVzUmVzZXJ2ZWQgaXMgbmV2ZXIgY2hhbmdlZCBhZnRlciBpbml0aWFs
aXphdGlvbi4KICAgICAgICAgfQogICAgIH0KIAotICAgIHZpcnR1YWwgfkZpeGVkVk1Qb29sRXhl
Y3V0YWJsZUFsbG9jYXRvcigpOworICAgIH5GaXhlZFZNUG9vbEV4ZWN1dGFibGVBbGxvY2F0b3Io
KQorICAgIHsKKyAgICAgICAgbV9yZXNlcnZhdGlvbi5kZWFsbG9jYXRlKCk7CisgICAgfQogCiAg
ICAgdm9pZCogbWVtb3J5U3RhcnQoKSB7IHJldHVybiB1bnRhZ0NvZGVQdHI8RXhlY3V0YWJsZU1l
bW9yeVB0clRhZz4oZ19qc2NDb25maWcuc3RhcnRFeGVjdXRhYmxlTWVtb3J5KTsgfQogICAgIHZv
aWQqIG1lbW9yeUVuZCgpIHsgcmV0dXJuIHVudGFnQ29kZVB0cjxFeGVjdXRhYmxlTWVtb3J5UHRy
VGFnPihnX2pzY0NvbmZpZy5lbmRFeGVjdXRhYmxlTWVtb3J5KTsgfQogICAgIGJvb2wgaXNKSVRQ
Qyh2b2lkKiBwYykgeyByZXR1cm4gbWVtb3J5U3RhcnQoKSA8PSBwYyAmJiBwYyA8IG1lbW9yeUVu
ZCgpOyB9CisgICAgYm9vbCBpc1ZhbGlkKCkgeyByZXR1cm4gISFtX3Jlc2VydmF0aW9uOyB9CiAK
LXByb3RlY3RlZDoKLSAgICBGcmVlU3BhY2VQdHIgYWxsb2NhdGVOZXdTcGFjZShzaXplX3QmKSBv
dmVycmlkZQorICAgIFJlZlB0cjxFeGVjdXRhYmxlTWVtb3J5SGFuZGxlPiBhbGxvY2F0ZShzaXpl
X3Qgc2l6ZUluQnl0ZXMpCiAgICAgewotICAgICAgICAvLyBXZSdyZSBvcGVyYXRpbmcgaW4gYSBm
aXhlZCBwb29sLCBzbyBuZXcgYWxsb2NhdGlvbiBpcyBhbHdheXMgcHJvaGliaXRlZC4KKyNpZiBD
UFUoQVJNNjQpCisgICAgICAgIGF1dG8gbG9ja2VyID0gaG9sZExvY2soZ2V0TG9jaygpKTsKKwor
ICAgICAgICBzdGF0aWMgdWludDY0X3QgY291bnRlcjsKKyAgICAgICAgKytjb3VudGVyOworICAg
ICAgICBpZiAoY291bnRlciAlIDUwID09IDApIHsKKyAgICAgICAgICAgIGRvdWJsZSB1c2VkID0g
MDsKKyAgICAgICAgICAgIGRvdWJsZSB0b3RhbCA9IDA7CisgICAgICAgICAgICBzdGF0aWMgZG91
YmxlIG1heFJhdGU7CisgICAgICAgICAgICBmb3JFYWNoQWxsb2NhdG9yKFsmXSAoUmVnaW9uQWxs
b2NhdG9yJiBhbGxvY2F0b3IpIHsKKyAgICAgICAgICAgICAgICB1c2VkICs9IGFsbG9jYXRvci5p
c2xhbmRCaXRzLmJpdENvdW50KCk7CisgICAgICAgICAgICAgICAgdG90YWwgKz0gbWF4SXNsYW5k
c1BlclJlZ2lvbjsKKyAgICAgICAgICAgIH0pOworICAgICAgICAgICAgbWF4UmF0ZSA9IHN0ZDo6
bWF4KG1heFJhdGUsIHVzZWQvdG90YWwpOworICAgICAgICAgICAgZGF0YUxvZ0xuKCJ1dGlsaXph
dGlvbiByYXRlOiAiLCAxMDAqdXNlZC90b3RhbCwgIiUgIG1heFJhdGU9IiwgbWF4UmF0ZSoxMDAs
ICIlIik7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIHVuc2lnbmVkIHN0YXJ0ID0gMDsK
KyAgICAgICAgaWYgKE9wdGlvbnM6OnVzZVJhbmRvbWl6aW5nRXhlY3V0YWJsZUlzbGFuZEFsbG9j
YXRpb24oKSkgLy8gT09QUworICAgICAgICAgICAgc3RhcnQgPSBjcnlwdG9ncmFwaGljYWxseVJh
bmRvbU51bWJlcigpICUgbV9hbGxvY2F0b3JzLnNpemUoKTsKKworICAgICAgICB1bnNpZ25lZCBp
ID0gc3RhcnQ7CisgICAgICAgIHdoaWxlICh0cnVlKSB7CisgICAgICAgICAgICBSZWdpb25BbGxv
Y2F0b3ImIGFsbG9jYXRvciA9IG1fYWxsb2NhdG9yc1tpXTsKKyAgICAgICAgICAgIGlmIChSZWZQ
dHI8RXhlY3V0YWJsZU1lbW9yeUhhbmRsZT4gcmVzdWx0ID0gYWxsb2NhdG9yLmFsbG9jYXRlKGxv
Y2tlciwgc2l6ZUluQnl0ZXMpKQorICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAg
ICAgICAgICBpID0gKGkgKyAxKSAlIG1fYWxsb2NhdG9ycy5zaXplKCk7CisgICAgICAgICAgICBp
ZiAoaSA9PSBzdGFydCkKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQogICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKKyNlbHNlCisgICAgICAgIHJldHVybiBtX2FsbG9jYXRvci5hbGxv
Y2F0ZShzaXplSW5CeXRlcyk7CisjZW5kaWYKKyAgICB9CisKKyAgICBMb2NrJiBnZXRMb2NrKCkg
eyByZXR1cm4gbV9sb2NrOyB9CisKKyAgICAvLyBOb24gYXRvbWljCisgICAgc2l6ZV90IGJ5dGVz
QWxsb2NhdGVkKCkgCisgICAgeworICAgICAgICBzaXplX3QgcmVzdWx0ID0gMDsKKyAgICAgICAg
Zm9yRWFjaEFsbG9jYXRvcihbJl0gKEFsbG9jYXRvciYgYWxsb2NhdG9yKSB7CisgICAgICAgICAg
ICByZXN1bHQgKz0gYWxsb2NhdG9yLmJ5dGVzQWxsb2NhdGVkKCk7CisgICAgICAgIH0pOworICAg
ICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKyAgICBzaXplX3QgYnl0ZXNSZXNlcnZlZCgpIAor
ICAgIHsKKyAgICAgICAgc2l6ZV90IHJlc3VsdCA9IDA7CisgICAgICAgIGZvckVhY2hBbGxvY2F0
b3IoWyZdIChBbGxvY2F0b3ImIGFsbG9jYXRvcikgeworICAgICAgICAgICAgcmVzdWx0ICs9IGFs
bG9jYXRvci5ieXRlc1Jlc2VydmVkKCk7CisgICAgICAgIH0pOworICAgICAgICByZXR1cm4gcmVz
dWx0OworICAgIH0KKyAgICBzaXplX3QgYnl0ZXNDb21taXR0ZWQoKQorICAgIHsKKyAgICAgICAg
c2l6ZV90IHJlc3VsdCA9IDA7CisgICAgICAgIGZvckVhY2hBbGxvY2F0b3IoWyZdIChBbGxvY2F0
b3ImIGFsbG9jYXRvcikgeworICAgICAgICAgICAgcmVzdWx0ICs9IGFsbG9jYXRvci5ieXRlc0Nv
bW1pdHRlZCgpOworICAgICAgICB9KTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICB9CiAK
LSAgICB2b2lkIG5vdGlmeU5lZWRQYWdlKHZvaWQqIHBhZ2UsIHNpemVfdCBjb3VudCkgb3ZlcnJp
ZGUKKyAgICBib29sIGlzSW5BbGxvY2F0ZWRNZW1vcnkoY29uc3QgQWJzdHJhY3RMb2NrZXImIGxv
Y2tlciwgdm9pZCogYWRkcmVzcykKICAgICB7Ci0gICAgICAgIG1fcmVzZXJ2YXRpb24uY29tbWl0
KHBhZ2UsIHBhZ2VTaXplKCkgKiBjb3VudCk7CisgICAgICAgIGJvb2wgcmVzdWx0ID0gZmFsc2U7
CisgICAgICAgIGZvckVhY2hBbGxvY2F0b3IoWyZdIChBbGxvY2F0b3ImIGFsbG9jYXRvcikgewor
ICAgICAgICAgICAgaWYgKGFsbG9jYXRvci5pc0luQWxsb2NhdGVkTWVtb3J5KGxvY2tlciwgYWRk
cmVzcykpIHsKKyAgICAgICAgICAgICAgICByZXN1bHQgPSB0cnVlOworICAgICAgICAgICAgICAg
IHJldHVybiBJdGVyYXRpb25TdGF0dXM6OkRvbmU7CisgICAgICAgICAgICB9CisgICAgICAgICAg
ICByZXR1cm4gSXRlcmF0aW9uU3RhdHVzOjpDb250aW51ZTsKKyAgICAgICAgfSk7CisKKyAgICAg
ICAgcmV0dXJuIHJlc3VsdDsKICAgICB9CiAKLSAgICB2b2lkIG5vdGlmeVBhZ2VJc0ZyZWUodm9p
ZCogcGFnZSwgc2l6ZV90IGNvdW50KSBvdmVycmlkZQorI2lmIEVOQUJMRShNRVRBX0FMTE9DQVRP
Ul9QUk9GSUxFKQorICAgIHZvaWQgZHVtcFByb2ZpbGUoKQogICAgIHsKLSAgICAgICAgbV9yZXNl
cnZhdGlvbi5kZWNvbW1pdChwYWdlLCBwYWdlU2l6ZSgpICogY291bnQpOworICAgICAgICBmb3JF
YWNoQWxsb2NhdG9yKFsmXSAoQWxsb2NhdG9yJiBhbGxvY2F0b3IpIHsKKyAgICAgICAgICAgIGFs
bG9jYXRvci5kdW1wUHJvZmlsZSgpOworICAgICAgICB9KTsKKyAgICB9CisjZW5kaWYKKworICAg
IE1ldGFBbGxvY2F0b3I6OlN0YXRpc3RpY3MgY3VycmVudFN0YXRpc3RpY3MoKQorICAgIHsKKyAg
ICAgICAgYXV0byBsb2NrZXIgPSBob2xkTG9jayhnZXRMb2NrKCkpOworICAgICAgICBNZXRhQWxs
b2NhdG9yOjpTdGF0aXN0aWNzIHJlc3VsdCB7IDAsIDAsIDAgfTsKKyAgICAgICAgZm9yRWFjaEFs
bG9jYXRvcihbJl0gKEFsbG9jYXRvciYgYWxsb2NhdG9yKSB7CisgICAgICAgICAgICBhdXRvIGFs
bG9jYXRvclN0YXRzID0gYWxsb2NhdG9yLmN1cnJlbnRTdGF0aXN0aWNzKGxvY2tlcik7CisgICAg
ICAgICAgICByZXN1bHQuYnl0ZXNBbGxvY2F0ZWQgKz0gYWxsb2NhdG9yU3RhdHMuYnl0ZXNBbGxv
Y2F0ZWQ7CisgICAgICAgICAgICByZXN1bHQuYnl0ZXNSZXNlcnZlZCArPSBhbGxvY2F0b3JTdGF0
cy5ieXRlc1Jlc2VydmVkOworICAgICAgICAgICAgcmVzdWx0LmJ5dGVzQ29tbWl0dGVkICs9IGFs
bG9jYXRvclN0YXRzLmJ5dGVzQ29tbWl0dGVkOworICAgICAgICB9KTsKKyAgICAgICAgcmV0dXJu
IHJlc3VsdDsKKyAgICB9CisKKyNpZiBDUFUoQVJNNjQpCisgICAgdm9pZCBoYW5kbGVXaWxsQmVS
ZWxlYXNlZChjb25zdCBMb2NrSG9sZGVyJiBsb2NrZXIsIE1ldGFBbGxvY2F0b3JIYW5kbGUmIGhh
bmRsZSkKKyAgICB7CisgICAgICAgIGlmIChpc2xhbmRzRm9ySnVtcExvY2F0aW9uLmlzRW1wdHko
KSkKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICBWZWN0b3I8SXNsYW5kcyosIDE2PiB0
b1JlbW92ZTsKKyAgICAgICAgdm9pZCogc3RhcnQgPSBoYW5kbGUuc3RhcnQoKS51bnRhZ2dlZFB0
cigpOworICAgICAgICB2b2lkKiBlbmQgPSBoYW5kbGUuZW5kKCkudW50YWdnZWRQdHIoKTsKKyAg
ICAgICAgLy9kYXRhTG9nTG4oImZyZWVpbmcgaGFuZGxlOiBbIiwgYml0d2lzZV9jYXN0PHVpbnRw
dHJfdD4oc3RhcnQpLCAiLCAiLCBiaXR3aXNlX2Nhc3Q8dWludHB0cl90PihlbmQpLCAiKSIpOwor
ICAgICAgICBpc2xhbmRzRm9ySnVtcExvY2F0aW9uLml0ZXJhdGUoWyZdIChJc2xhbmRzJiBpc2xh
bmRzLCBib29sJiB2aXNpdExlZnQsIGJvb2wmIHZpc2l0UmlnaHQpIHsKKyAgICAgICAgICAgIGlm
IChzdGFydCA8PSBpc2xhbmRzLmtleSgpICYmIGlzbGFuZHMua2V5KCkgPCBlbmQpCisgICAgICAg
ICAgICAgICAgdG9SZW1vdmUuYXBwZW5kKCZpc2xhbmRzKTsKKyAgICAgICAgICAgIGlmIChpc2xh
bmRzLmtleSgpID4gc3RhcnQpCisgICAgICAgICAgICAgICAgdmlzaXRMZWZ0ID0gdHJ1ZTsKKyAg
ICAgICAgICAgIGlmIChpc2xhbmRzLmtleSgpIDwgZW5kKQorICAgICAgICAgICAgICAgIHZpc2l0
UmlnaHQgPSB0cnVlOworICAgICAgICB9KTsKKworICAgICAgICBmb3IgKElzbGFuZHMqIGlzbGFu
ZHMgOiB0b1JlbW92ZSkKKyAgICAgICAgICAgIGZyZWVJc2xhbmRzKGxvY2tlciwgaXNsYW5kcyk7
CisKKyAgICAgICAgLy8gT09QUzogbWFrZSBpdCB1bmRlciBBU1NFUlRfRU5BQkxFRAorICAgICAg
ICBpZiAoZmFsc2UpIHsKKyAgICAgICAgICAgIGlzbGFuZHNGb3JKdW1wTG9jYXRpb24uaXRlcmF0
ZShbJl0gKElzbGFuZHMmIGlzbGFuZHMsIGJvb2wmIHZpc2l0TGVmdCwgYm9vbCYgdmlzaXRSaWdo
dCkgeworICAgICAgICAgICAgICAgIGlmIChzdGFydCA8PSBpc2xhbmRzLmtleSgpICYmIGlzbGFu
ZHMua2V5KCkgPCBlbmQpIHsKKyAgICAgICAgICAgICAgICAgICAgZGF0YUxvZ0xuKCJkaWQgbm90
IHJlbW92ZSBldmVyeXRoaW5nISIpOworICAgICAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VS
VF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB2aXNp
dExlZnQgPSB0cnVlOworICAgICAgICAgICAgICAgIHZpc2l0UmlnaHQgPSB0cnVlOworICAgICAg
ICAgICAgfSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICB2b2lkKiBtYWtlSXNsYW5kKHVpbnRw
dHJfdCBqdW1wTG9jYXRpb24sIHVpbnRwdHJfdCBuZXdUYXJnZXQpCisgICAgeworICAgICAgICBh
dXRvIGxvY2tlciA9IGhvbGRMb2NrKGdldExvY2soKSk7CisgICAgICAgIHJldHVybiBpc2xhbmRG
b3JKdW1wTG9jYXRpb24obG9ja2VyLCBqdW1wTG9jYXRpb24sIG5ld1RhcmdldCk7CiAgICAgfQog
CiBwcml2YXRlOgorICAgIGNsYXNzIElzbGFuZHM7CisgICAgY2xhc3MgUmVnaW9uQWxsb2NhdG9y
OworCisgICAgUmVnaW9uQWxsb2NhdG9yKiBmaW5kUmVnaW9uKHVpbnRwdHJfdCBwdHIpCisgICAg
eworICAgICAgICBSZWdpb25BbGxvY2F0b3IqIHJlc3VsdCA9IG51bGxwdHI7CisgICAgICAgIGZv
ckVhY2hBbGxvY2F0b3IoWyZdIChSZWdpb25BbGxvY2F0b3ImIGFsbG9jYXRvcikgeworICAgICAg
ICAgICAgaWYgKGFsbG9jYXRvci5zdGFydCA8PSBwdHIgJiYgcHRyIDwgYWxsb2NhdG9yLmVuZCkg
eworICAgICAgICAgICAgICAgIHJlc3VsdCA9ICZhbGxvY2F0b3I7CisgICAgICAgICAgICAgICAg
cmV0dXJuIEl0ZXJhdGlvblN0YXR1czo6RG9uZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IHJldHVybiBJdGVyYXRpb25TdGF0dXM6OkNvbnRpbnVlOworICAgICAgICB9KTsKKyAgICAgICAg
cmV0dXJuIHJlc3VsdDsKKyAgICB9CisKKyAgICB2b2lkIGZyZWVKdW1wSXNsYW5kcyhjb25zdCBM
b2NrSG9sZGVyJiwgSXNsYW5kcyogaXNsYW5kcykKKyAgICB7CisgICAgICAgIGZvciAodm9pZCog
anVtcElzbGFuZCA6IGlzbGFuZHMtPmp1bXBJc2xhbmRzKSB7CisgICAgICAgICAgICBSZWdpb25B
bGxvY2F0b3IqIGFsbG9jYXRvciA9IGZpbmRSZWdpb24oYml0d2lzZV9jYXN0PHVpbnRwdHJfdD4o
anVtcElzbGFuZCkpOworICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoYWxsb2NhdG9yKTsKKyAg
ICAgICAgICAgIGFsbG9jYXRvci0+ZnJlZUlzbGFuZChiaXR3aXNlX2Nhc3Q8dWludHB0cl90Pihq
dW1wSXNsYW5kKSk7CisgICAgICAgIH0KKyAgICAgICAgaXNsYW5kcy0+anVtcElzbGFuZHMuY2xl
YXIoKTsKKyAgICB9CisKKyAgICB2b2lkIGZyZWVJc2xhbmRzKGNvbnN0IExvY2tIb2xkZXImIGxv
Y2tlciwgSXNsYW5kcyogaXNsYW5kcykKKyAgICB7CisgICAgICAgIGZyZWVKdW1wSXNsYW5kcyhs
b2NrZXIsIGlzbGFuZHMpOworICAgICAgICBpc2xhbmRzRm9ySnVtcExvY2F0aW9uLnJlbW92ZShp
c2xhbmRzKTsKKyAgICAgICAgZGVsZXRlIGlzbGFuZHM7CisgICAgfQorCisgICAgdm9pZCogaXNs
YW5kRm9ySnVtcExvY2F0aW9uKGNvbnN0IExvY2tIb2xkZXImIGxvY2tlciwgdWludHB0cl90IGp1
bXBMb2NhdGlvbiwgdWludHB0cl90IHRhcmdldCkKKyAgICB7CisgICAgICAgIElzbGFuZHMqIGlz
bGFuZHMgPSBpc2xhbmRzRm9ySnVtcExvY2F0aW9uLmZpbmRFeGFjdChiaXR3aXNlX2Nhc3Q8dm9p
ZCo+KGp1bXBMb2NhdGlvbikpOworICAgICAgICBpZiAoaXNsYW5kcykgeworICAgICAgICAgICAg
Ly8gRklYTUU6IFdlIGNvdWxkIGNyZWF0ZSBzb21lIG1ldGhvZCBvZiByZXVzaW5nIGFscmVhZHkg
YWxsb2NhdGVkIGlzbGFuZHMgaGVyZSwgYnV0IGl0J3MKKyAgICAgICAgICAgIC8vIHVubGlrZWx5
IHRvIG1hdHRlciBpbiBwcmFjdGljZS4KKyAgICAgICAgICAgIGZyZWVKdW1wSXNsYW5kcyhsb2Nr
ZXIsIGlzbGFuZHMpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgaXNsYW5kcyA9IG5l
dyBJc2xhbmRzOworICAgICAgICAgICAgaXNsYW5kcy0+cm9vdEp1bXBMb2NhdGlvbiA9IGJpdHdp
c2VfY2FzdDx2b2lkKj4oanVtcExvY2F0aW9uKTsKKyAgICAgICAgICAgIGlzbGFuZHNGb3JKdW1w
TG9jYXRpb24uaW5zZXJ0KGlzbGFuZHMpOworICAgICAgICB9CisKKyAgICAgICAgUmVnaW9uQWxs
b2NhdG9yKiBhbGxvY2F0b3IgPSBmaW5kUmVnaW9uKGp1bXBMb2NhdGlvbiA+IHRhcmdldCA/IGp1
bXBMb2NhdGlvbiAtIHJlZ2lvblNpemUgOiBqdW1wTG9jYXRpb24pOworICAgICAgICBSRUxFQVNF
X0FTU0VSVChhbGxvY2F0b3IpOworICAgICAgICB2b2lkKiByZXN1bHQgPSBhbGxvY2F0b3ItPmFs
bG9jYXRlSXNsYW5kKCk7CisgICAgICAgIHZvaWQqIGN1cnJlbnRJc2xhbmQgPSByZXN1bHQ7Cisg
ICAgICAgIGp1bXBMb2NhdGlvbiA9IGJpdHdpc2VfY2FzdDx1aW50cHRyX3Q+KGN1cnJlbnRJc2xh
bmQpOworICAgICAgICB3aGlsZSAodHJ1ZSkgeworICAgICAgICAgICAgaXNsYW5kcy0+anVtcElz
bGFuZHMuYXBwZW5kKGN1cnJlbnRJc2xhbmQpOworCisgICAgICAgICAgICBhdXRvIGVtaXRKdW1w
VG8gPSBbJl0gKHZvaWQqIHRhcmdldCkgeworICAgICAgICAgICAgICAgIGludHB0cl90IGRpZmYg
PSAoc3RhdGljX2Nhc3Q8aW50cHRyX3Q+KGp1bXBMb2NhdGlvbikgLSBiaXR3aXNlX2Nhc3Q8aW50
cHRyX3Q+KHRhcmdldCkpID4+IDI7CisgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoaXNJ
bnQ8MjY+KGRpZmYpKTsKKworICAgICAgICAgICAgICAgIENDYWxsSGVscGVycyBqaXQ7CisgICAg
ICAgICAgICAgICAgYXV0byBqdW1wID0gaml0Lmp1bXAoKTsKKyAgICAgICAgICAgICAgICBMaW5r
QnVmZmVyIGxpbmtCdWZmZXIoaml0LCBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8Tm9QdHJUYWc+KGN1
cnJlbnRJc2xhbmQpLCBpc2xhbmRTaXplSW5CeXRlcywgSklUQ29tcGlsYXRpb25NdXN0U3VjY2Vl
ZCwgZmFsc2UpOworICAgICAgICAgICAgICAgIGxpbmtCdWZmZXIubGluayhqdW1wLCBDb2RlTG9j
YXRpb25MYWJlbDxOb1B0clRhZz4odGFyZ2V0KSk7CisgICAgICAgICAgICAgICAgRklOQUxJWkVf
Q09ERShsaW5rQnVmZmVyLCBOb1B0clRhZywgIkp1bXAgSXNsYW5kOiAlbHUiLCBqdW1wTG9jYXRp
b24pOworCisgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OmNhY2hlRmx1c2goY3VycmVu
dElzbGFuZCwgaXNsYW5kU2l6ZUluQnl0ZXMpOworICAgICAgICAgICAgfTsKKworICAgICAgICAg
ICAgaW50cHRyX3QgZGlmZiA9IChzdGF0aWNfY2FzdDxpbnRwdHJfdD4oanVtcExvY2F0aW9uKSAt
IGJpdHdpc2VfY2FzdDxpbnRwdHJfdD4odGFyZ2V0KSkgPj4gMjsKKyAgICAgICAgICAgIGlmIChp
c0ludDwyNj4oZGlmZikpIHsKKyAgICAgICAgICAgICAgICBlbWl0SnVtcFRvKGJpdHdpc2VfY2Fz
dDx2b2lkKj4odGFyZ2V0KSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9
CisKKyAgICAgICAgICAgIHVpbnRwdHJfdCBuZXh0SXNsYW5kUmVnaW9uOworICAgICAgICAgICAg
aWYgKGp1bXBMb2NhdGlvbiA+IHRhcmdldCkKKyAgICAgICAgICAgICAgICBuZXh0SXNsYW5kUmVn
aW9uID0ganVtcExvY2F0aW9uIC0gcmVnaW9uU2l6ZTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAg
ICAgICAgICAgICBuZXh0SXNsYW5kUmVnaW9uID0ganVtcExvY2F0aW9uICsgcmVnaW9uU2l6ZTsK
KworICAgICAgICAgICAgUmVnaW9uQWxsb2NhdG9yKiBhbGxvY2F0b3IgPSBmaW5kUmVnaW9uKG5l
eHRJc2xhbmRSZWdpb24pOworICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoYWxsb2NhdG9yKTsK
KyAgICAgICAgICAgIHZvaWQqIG5leHRJc2xhbmQgPSBhbGxvY2F0b3ItPmFsbG9jYXRlSXNsYW5k
KCk7CisgICAgICAgICAgICBlbWl0SnVtcFRvKG5leHRJc2xhbmQpOworICAgICAgICAgICAganVt
cExvY2F0aW9uID0gYml0d2lzZV9jYXN0PHVpbnRwdHJfdD4obmV4dElzbGFuZCk7CisgICAgICAg
ICAgICBjdXJyZW50SXNsYW5kID0gbmV4dElzbGFuZDsKKyAgICAgICAgfQorCisgICAgICAgIHJl
dHVybiByZXN1bHQ7CisgICAgfQorI2VuZGlmCisKK3ByaXZhdGU6CisgICAgY2xhc3MgQWxsb2Nh
dG9yIDogcHVibGljIE1ldGFBbGxvY2F0b3IgeworICAgICAgICB1c2luZyBCYXNlID0gTWV0YUFs
bG9jYXRvcjsKKyAgICBwdWJsaWM6CisgICAgICAgIEFsbG9jYXRvcihGaXhlZFZNUG9vbEV4ZWN1
dGFibGVBbGxvY2F0b3ImIGFsbG9jYXRvcikKKyAgICAgICAgICAgIDogQmFzZShhbGxvY2F0b3Iu
Z2V0TG9jaygpLCBqaXRBbGxvY2F0aW9uR3JhbnVsZSwgcGFnZVNpemUoKSkgLy8gcm91bmQgdXAg
YWxsIGFsbG9jYXRpb25zIHRvIDMyIGJ5dGVzCisgICAgICAgICAgICAsIG1fZml4ZWRBbGxvY2F0
b3IoYWxsb2NhdG9yKQorICAgICAgICB7CisgICAgICAgIH0KKworICAgICAgICBGcmVlU3BhY2VQ
dHIgYWxsb2NhdGVOZXdTcGFjZShzaXplX3QmKSBvdmVycmlkZQorICAgICAgICB7CisgICAgICAg
ICAgICAvLyBXZSdyZSBvcGVyYXRpbmcgaW4gYSBmaXhlZCBwb29sLCBzbyBuZXcgYWxsb2NhdGlv
biBpcyBhbHdheXMgcHJvaGliaXRlZC4KKyAgICAgICAgICAgIHJldHVybiBudWxscHRyOworICAg
ICAgICB9CisKKyAgICAgICAgdm9pZCBub3RpZnlOZWVkUGFnZSh2b2lkKiBwYWdlLCBzaXplX3Qg
Y291bnQpIG92ZXJyaWRlCisgICAgICAgIHsKKyAgICAgICAgICAgIG1fZml4ZWRBbGxvY2F0b3Iu
bV9yZXNlcnZhdGlvbi5jb21taXQocGFnZSwgcGFnZVNpemUoKSAqIGNvdW50KTsKKyAgICAgICAg
fQorCisgICAgICAgIHZvaWQgbm90aWZ5UGFnZUlzRnJlZSh2b2lkKiBwYWdlLCBzaXplX3QgY291
bnQpIG92ZXJyaWRlCisgICAgICAgIHsKKyAgICAgICAgICAgIG1fZml4ZWRBbGxvY2F0b3IubV9y
ZXNlcnZhdGlvbi5kZWNvbW1pdChwYWdlLCBwYWdlU2l6ZSgpICogY291bnQpOworICAgICAgICB9
CisKKyAgICAgICAgRml4ZWRWTVBvb2xFeGVjdXRhYmxlQWxsb2NhdG9yJiBtX2ZpeGVkQWxsb2Nh
dG9yOworICAgIH07CisKKyNpZiBDUFUoQVJNNjQpIC8vIE9PUFM6IGNhbid0IGRvIHRoaXMgZm9y
IGFybTY0XzMyCisgICAgY2xhc3MgUmVnaW9uQWxsb2NhdG9yIGZpbmFsIDogcHVibGljIEFsbG9j
YXRvciB7CisgICAgICAgIHVzaW5nIEJhc2UgPSBBbGxvY2F0b3I7CisgICAgcHVibGljOgorICAg
ICAgICBSZWdpb25BbGxvY2F0b3IoRml4ZWRWTVBvb2xFeGVjdXRhYmxlQWxsb2NhdG9yJiBhbGxv
Y2F0b3IpCisgICAgICAgICAgICA6IEJhc2UoYWxsb2NhdG9yKQorICAgICAgICB7CisgICAgICAg
IH0KKworICAgICAgICAvLyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisg
ICAgICAgIC8vICB8IGppdCBhbGxvY2F0aW9ucyAtLT4gICA8LS0gaXNsYW5kcyB8CisgICAgICAg
IC8vICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAgICAgICAgdWlu
dHB0cl90IGlzbGFuZEJlZ2luKCkKKyAgICAgICAgeworICAgICAgICAgICAgLy8gW3N0YXJ0LCBh
bGxvY2F0b3JFbmQpCisgICAgICAgICAgICByZXR1cm4gZW5kIC0gaXNsYW5kUmVnaW9uU2l6ZTsK
KyAgICAgICAgfQorCisgICAgICAgIHVpbnRwdHJfdCBhbGxvY2F0b3JTaXplKCkKKyAgICAgICAg
eworICAgICAgICAgICAgcmV0dXJuIGlzbGFuZEJlZ2luKCkgLSBzdGFydDsKKyAgICAgICAgfQor
CisgICAgICAgIHNpemVfdCBpc2xhbmRzUGVyUGFnZSgpCisgICAgICAgIHsKKyAgICAgICAgICAg
IHNpemVfdCBpc2xhbmRzUGVyUGFnZSA9IHBhZ2VTaXplKCkgLyBpc2xhbmRTaXplSW5CeXRlczsK
KyAgICAgICAgICAgIEFTU0VSVChpc2xhbmRzUGVyUGFnZSAqIGlzbGFuZFNpemVJbkJ5dGVzID09
IHBhZ2VTaXplKCkpOworICAgICAgICAgICAgQVNTRVJUKGlzUG93ZXJPZlR3byhpc2xhbmRzUGVy
UGFnZSkpOworICAgICAgICAgICAgcmV0dXJuIGlzbGFuZHNQZXJQYWdlOworICAgICAgICB9CisK
KyAgICAgICAgdm9pZCByZWxlYXNlKGNvbnN0IExvY2tIb2xkZXImIGxvY2tlciwgTWV0YUFsbG9j
YXRvckhhbmRsZSYgaGFuZGxlKSBmaW5hbAorICAgICAgICB7CisgICAgICAgICAgICBtX2ZpeGVk
QWxsb2NhdG9yLmhhbmRsZVdpbGxCZVJlbGVhc2VkKGxvY2tlciwgaGFuZGxlKTsKKyAgICAgICAg
ICAgIEJhc2U6OnJlbGVhc2UobG9ja2VyLCBoYW5kbGUpOworICAgICAgICB9CisKKyAgICAgICAg
dm9pZCogYWxsb2NhdGVJc2xhbmQoKQorICAgICAgICB7CisgICAgICAgICAgICBhdXRvIGZpbmRS
ZXN1bHQgPSBbJl0gKCkgLT4gdm9pZCogeworICAgICAgICAgICAgICAgIHNpemVfdCByZXN1bHRC
aXQgPSBpc2xhbmRCaXRzLmZpbmRDbGVhckJpdCgwKTsKKyAgICAgICAgICAgICAgICBpZiAocmVz
dWx0Qml0ID09IGlzbGFuZEJpdHMuc2l6ZSgpKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4g
bnVsbHB0cjsKKyAgICAgICAgICAgICAgICBpc2xhbmRCaXRzW3Jlc3VsdEJpdF0gPSB0cnVlOwor
ICAgICAgICAgICAgICAgIHVpbnRwdHJfdCByZXN1bHQgPSBlbmQgLSAoKHJlc3VsdEJpdCArIDEp
ICogaXNsYW5kU2l6ZUluQnl0ZXMpOyAKKyAgICAgICAgICAgICAgICByZXR1cm4gYml0d2lzZV9j
YXN0PHZvaWQqPihyZXN1bHQpOworICAgICAgICAgICAgfTsKKworICAgICAgICAgICAgaWYgKHZv
aWQqIHJlc3VsdCA9IGZpbmRSZXN1bHQoKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0
OworCisgICAgICAgICAgICBpc2xhbmRCaXRzLnJlc2l6ZShpc2xhbmRCaXRzLnNpemUoKSArIGlz
bGFuZHNQZXJQYWdlKCkpOworICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoaXNsYW5kQml0cy5z
aXplKCkgPD0gbWF4SXNsYW5kc1BlclJlZ2lvbik7IAorCisgICAgICAgICAgICB1aW50cHRyX3Qg
cGFnZUJlZ2luID0gZW5kIC0gKGlzbGFuZEJpdHMuc2l6ZSgpICogaXNsYW5kU2l6ZUluQnl0ZXMp
OyAvLyBbaXNsYW5kQmVnaW4sIGVuZCkKKyAgICAgICAgICAgIG1fZml4ZWRBbGxvY2F0b3IubV9y
ZXNlcnZhdGlvbi5jb21taXQoYml0d2lzZV9jYXN0PHZvaWQqPihwYWdlQmVnaW4pLCBwYWdlU2l6
ZSgpKTsKKyAgICAgICAgICAgIHZvaWQqIHJlc3VsdCA9IGZpbmRSZXN1bHQoKTsKKyAgICAgICAg
ICAgIFJFTEVBU0VfQVNTRVJUKHJlc3VsdCk7CisgICAgICAgICAgICByZXR1cm4gcmVzdWx0Owor
ICAgICAgICB9CisKKyAgICAgICAgdm9pZCBmcmVlSXNsYW5kKHVpbnRwdHJfdCBpc2xhbmQpCisg
ICAgICAgIHsKKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKGlzbGFuZEJlZ2luKCkgPD0gaXNs
YW5kICYmIGlzbGFuZCA8IGVuZCk7CisgICAgICAgICAgICBzaXplX3QgYml0ID0gKChlbmQgLSBp
c2xhbmQpIC8gaXNsYW5kU2l6ZUluQnl0ZXMpIC0gMTsKKyAgICAgICAgICAgIFJFTEVBU0VfQVNT
RVJUKCEhaXNsYW5kQml0c1tiaXRdKTsKKyAgICAgICAgICAgIGlzbGFuZEJpdHNbYml0XSA9IGZh
bHNlOworICAgICAgICB9CisKKyAgICAgICAgLy8gW3N0YXJ0LCBlbmQpCisgICAgICAgIHVpbnRw
dHJfdCBzdGFydDsKKyAgICAgICAgdWludHB0cl90IGVuZDsKKworICAgICAgICBzaXplX3QgbnVt
QWxsb2NhdGVkSXNsYW5kcyB7IDAgfTsgLy8gPD0gbnVtUmVzZXJ2ZWRJc2xhbmRzCisgICAgICAg
IEZhc3RCaXRWZWN0b3IgaXNsYW5kQml0czsKKyAgICB9OworI2VuZGlmCisKKyAgICB0ZW1wbGF0
ZSA8dHlwZW5hbWUgRnVuY3Rpb24+CisgICAgdm9pZCBmb3JFYWNoQWxsb2NhdG9yKEZ1bmN0aW9u
IGZ1bmN0aW9uKQorICAgIHsKKyNpZiBDUFUoQVJNNjQpCisgICAgICAgIGZvciAoUmVnaW9uQWxs
b2NhdG9yJiBhbGxvY2F0b3IgOiBtX2FsbG9jYXRvcnMpIHsKKyAgICAgICAgICAgIHVzaW5nIEZ1
bmN0aW9uUmVzdWx0VHlwZSA9IGRlY2x0eXBlKGZ1bmN0aW9uKGFsbG9jYXRvcikpOworICAgICAg
ICAgICAgaWYgY29uc3RleHByIChzdGQ6OmlzX3NhbWU8SXRlcmF0aW9uU3RhdHVzLCBGdW5jdGlv
blJlc3VsdFR5cGU+Ojp2YWx1ZSkgeworICAgICAgICAgICAgICAgIGlmIChmdW5jdGlvbihhbGxv
Y2F0b3IpID09IEl0ZXJhdGlvblN0YXR1czo6RG9uZSkKKyAgICAgICAgICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIHN0YXRpY19hc3NlcnQo
c3RkOjppc19zYW1lPHZvaWQsIEZ1bmN0aW9uUmVzdWx0VHlwZT46OnZhbHVlKTsKKyAgICAgICAg
ICAgICAgICBmdW5jdGlvbihhbGxvY2F0b3IpOworICAgICAgICAgICAgfQorICAgICAgICB9Cisj
ZWxzZQorICAgICAgICBmdW5jdGlvbihtX2FsbG9jYXRvcik7CisjZW5kaWYKKyAgICB9CisKKyNp
ZiBDUFUoQVJNNjQpCisgICAgY2xhc3MgSXNsYW5kcyA6IHB1YmxpYyBSZWRCbGFja1RyZWU8SXNs
YW5kcywgdm9pZCo+OjpOb2RlIHsKKyAgICAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7Cisg
ICAgcHVibGljOgorICAgICAgICB2b2lkKiBrZXkoKSB7IHJldHVybiByb290SnVtcExvY2F0aW9u
OyB9CisgICAgICAgIHZvaWQqIHJvb3RKdW1wTG9jYXRpb247CisgICAgICAgIFZlY3Rvcjx2b2lk
Kj4ganVtcElzbGFuZHM7CisgICAgfTsKKyNlbmRpZgorCisgICAgTG9jayBtX2xvY2s7CiAgICAg
UGFnZVJlc2VydmF0aW9uIG1fcmVzZXJ2YXRpb247CisjaWYgQ1BVKEFSTTY0KQorICAgIHN0ZDo6
YXJyYXk8UmVnaW9uQWxsb2NhdG9yLCBudW1iZXJPZlJlZ2lvbnM+IG1fYWxsb2NhdG9yczsKKyAg
ICBSZWRCbGFja1RyZWU8SXNsYW5kcywgdm9pZCo+IGlzbGFuZHNGb3JKdW1wTG9jYXRpb247Cisj
ZWxzZQorICAgIEFsbG9jYXRvciBtX2FsbG9jYXRvcjsKKyNlbmRpZgogfTsKIAotRml4ZWRWTVBv
b2xFeGVjdXRhYmxlQWxsb2NhdG9yOjp+Rml4ZWRWTVBvb2xFeGVjdXRhYmxlQWxsb2NhdG9yKCkK
LXsKLSAgICBtX3Jlc2VydmF0aW9uLmRlYWxsb2NhdGUoKTsKLX0KLQogLy8gS2VlcCB0aGlzIHBv
aW50ZXIgaW4gYSBtdXRhYmxlIGdsb2JhbCB2YXJpYWJsZSB0byBoZWxwIExlYWtzIGZpbmQgaXQu
CiAvLyBCdXQgd2UgZG8gbm90IHVzZSB0aGlzIHBvaW50ZXIuCiBzdGF0aWMgRml4ZWRWTVBvb2xF
eGVjdXRhYmxlQWxsb2NhdG9yKiBnbG9iYWxGaXhlZFZNUG9vbEV4ZWN1dGFibGVBbGxvY2F0b3JU
b1dvcmtBcm91bmRMZWFrcyA9IG51bGxwdHI7CkBAIC00MTcsNyArODA4LDYgQEAgdm9pZCBFeGVj
dXRhYmxlQWxsb2NhdG9yOjppbml0aWFsaXplVW5kZQogICAgIFJFTEVBU0VfQVNTRVJUKCFnX2pz
Y0NvbmZpZy5maXhlZFZNUG9vbEV4ZWN1dGFibGVBbGxvY2F0b3IpOwogICAgIGdfanNjQ29uZmln
LmZpeGVkVk1Qb29sRXhlY3V0YWJsZUFsbG9jYXRvciA9IG5ldyBGaXhlZFZNUG9vbEV4ZWN1dGFi
bGVBbGxvY2F0b3IoKTsKICAgICBnbG9iYWxGaXhlZFZNUG9vbEV4ZWN1dGFibGVBbGxvY2F0b3JU
b1dvcmtBcm91bmRMZWFrcyA9IGdfanNjQ29uZmlnLmZpeGVkVk1Qb29sRXhlY3V0YWJsZUFsbG9j
YXRvcjsKLSAgICBDb2RlUHJvZmlsaW5nOjpub3RpZnlBbGxvY2F0b3IoZ19qc2NDb25maWcuZml4
ZWRWTVBvb2xFeGVjdXRhYmxlQWxsb2NhdG9yKTsKIH0KIAogYm9vbCBFeGVjdXRhYmxlQWxsb2Nh
dG9yOjppc1ZhbGlkKCkgY29uc3QKQEAgLTQyNSw3ICs4MTUsNyBAQCBib29sIEV4ZWN1dGFibGVB
bGxvY2F0b3I6OmlzVmFsaWQoKSBjb25zCiAgICAgRml4ZWRWTVBvb2xFeGVjdXRhYmxlQWxsb2Nh
dG9yKiBhbGxvY2F0b3IgPSBnX2pzY0NvbmZpZy5maXhlZFZNUG9vbEV4ZWN1dGFibGVBbGxvY2F0
b3I7CiAgICAgaWYgKCFhbGxvY2F0b3IpCiAgICAgICAgIHJldHVybiBCYXNlOjppc1ZhbGlkKCk7
Ci0gICAgcmV0dXJuICEhYWxsb2NhdG9yLT5ieXRlc1Jlc2VydmVkKCk7CisgICAgcmV0dXJuIGFs
bG9jYXRvci0+aXNWYWxpZCgpOwogfQogCiBib29sIEV4ZWN1dGFibGVBbGxvY2F0b3I6OnVuZGVy
TWVtb3J5UHJlc3N1cmUoKQpAQCAtNDU2LDExICs4NDYsMTEgQEAgZG91YmxlIEV4ZWN1dGFibGVB
bGxvY2F0b3I6Om1lbW9yeVByZXNzdQogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLVJlZlB0cjxF
eGVjdXRhYmxlTWVtb3J5SGFuZGxlPiBFeGVjdXRhYmxlQWxsb2NhdG9yOjphbGxvY2F0ZShzaXpl
X3Qgc2l6ZUluQnl0ZXMsIHZvaWQqIG93bmVyVUlELCBKSVRDb21waWxhdGlvbkVmZm9ydCBlZmZv
cnQpCitSZWZQdHI8RXhlY3V0YWJsZU1lbW9yeUhhbmRsZT4gRXhlY3V0YWJsZUFsbG9jYXRvcjo6
YWxsb2NhdGUoc2l6ZV90IHNpemVJbkJ5dGVzLCBKSVRDb21waWxhdGlvbkVmZm9ydCBlZmZvcnQp
CiB7CiAgICAgRml4ZWRWTVBvb2xFeGVjdXRhYmxlQWxsb2NhdG9yKiBhbGxvY2F0b3IgPSBnX2pz
Y0NvbmZpZy5maXhlZFZNUG9vbEV4ZWN1dGFibGVBbGxvY2F0b3I7CiAgICAgaWYgKCFhbGxvY2F0
b3IpCi0gICAgICAgIHJldHVybiBCYXNlOjphbGxvY2F0ZShzaXplSW5CeXRlcywgb3duZXJVSUQs
IGVmZm9ydCk7CisgICAgICAgIHJldHVybiBCYXNlOjphbGxvY2F0ZShzaXplSW5CeXRlcywgZWZm
b3J0KTsKICAgICBpZiAoT3B0aW9uczo6bG9nRXhlY3V0YWJsZUFsbG9jYXRpb24oKSkgewogICAg
ICAgICBNZXRhQWxsb2NhdG9yOjpTdGF0aXN0aWNzIHN0YXRzID0gYWxsb2NhdG9yLT5jdXJyZW50
U3RhdGlzdGljcygpOwogICAgICAgICBkYXRhTG9nKCJBbGxvY2F0aW5nICIsIHNpemVJbkJ5dGVz
LCAiIGJ5dGVzIG9mIGV4ZWN1dGFibGUgbWVtb3J5IHdpdGggIiwgc3RhdHMuYnl0ZXNBbGxvY2F0
ZWQsICIgYnl0ZXMgYWxsb2NhdGVkLCAiLCBzdGF0cy5ieXRlc1Jlc2VydmVkLCAiIGJ5dGVzIHJl
c2VydmVkLCBhbmQgIiwgc3RhdHMuYnl0ZXNDb21taXR0ZWQsICIgY29tbWl0dGVkLlxuIik7CkBA
IC00ODcsNyArODc3LDcgQEAgUmVmUHRyPEV4ZWN1dGFibGVNZW1vcnlIYW5kbGU+IEV4ZWN1dGFi
bAogICAgICAgICB9CiAgICAgfQogCi0gICAgUmVmUHRyPEV4ZWN1dGFibGVNZW1vcnlIYW5kbGU+
IHJlc3VsdCA9IGFsbG9jYXRvci0+YWxsb2NhdGUoc2l6ZUluQnl0ZXMsIG93bmVyVUlEKTsKKyAg
ICBSZWZQdHI8RXhlY3V0YWJsZU1lbW9yeUhhbmRsZT4gcmVzdWx0ID0gYWxsb2NhdG9yLT5hbGxv
Y2F0ZShzaXplSW5CeXRlcyk7CiAgICAgaWYgKCFyZXN1bHQpIHsKICAgICAgICAgaWYgKGVmZm9y
dCAhPSBKSVRDb21waWxhdGlvbkNhbkZhaWwpIHsKICAgICAgICAgICAgIGRhdGFMb2coIlJhbiBv
dXQgb2YgZXhlY3V0YWJsZSBtZW1vcnkgd2hpbGUgYWxsb2NhdGluZyAiLCBzaXplSW5CeXRlcywg
IiBieXRlcy5cbiIpOwpAQCAtNTM5LDYgKzkyOSwxNyBAQCB2b2lkIEV4ZWN1dGFibGVBbGxvY2F0
b3I6OmR1bXBQcm9maWxlKCkKIH0KICNlbmRpZgogCisjaWYgQ1BVKEFSTTY0KQordm9pZCogRXhl
Y3V0YWJsZUFsbG9jYXRvcjo6Z2V0SnVtcElzbGFuZFRvKHZvaWQqIGZyb20sIHZvaWQqIG5ld0Rl
c3RpbmF0aW9uKQoreworICAgIEZpeGVkVk1Qb29sRXhlY3V0YWJsZUFsbG9jYXRvciogYWxsb2Nh
dG9yID0gZ19qc2NDb25maWcuZml4ZWRWTVBvb2xFeGVjdXRhYmxlQWxsb2NhdG9yOworICAgIGlm
ICghYWxsb2NhdG9yKQorICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworCisg
ICAgcmV0dXJuIGFsbG9jYXRvci0+bWFrZUlzbGFuZChiaXR3aXNlX2Nhc3Q8dWludHB0cl90Pihm
cm9tKSwgYml0d2lzZV9jYXN0PHVpbnRwdHJfdD4obmV3RGVzdGluYXRpb24pKTsKK30KKyNlbmRp
ZgorCiB2b2lkKiBzdGFydE9mRml4ZWRFeGVjdXRhYmxlTWVtb3J5UG9vbEltcGwoKQogewogICAg
IEZpeGVkVk1Qb29sRXhlY3V0YWJsZUFsbG9jYXRvciogYWxsb2NhdG9yID0gZ19qc2NDb25maWcu
Zml4ZWRWTVBvb2xFeGVjdXRhYmxlQWxsb2NhdG9yOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9FeGVjdXRhYmxlQWxsb2NhdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9FeGVjdXRhYmxlQWxsb2NhdG9yLmgJKHJldmlzaW9uIDI1Nzg2NikKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvRXhlY3V0YWJsZUFsbG9jYXRvci5oCSh3b3JraW5n
IGNvcHkpCkBAIC03MSw3ICs3MSw3IEBAIHB1YmxpYzoKIAogICAgIHN0YXRpYyB2b2lkIGR1bXBQ
cm9maWxlKCkgeyB9CiAKLSAgICBSZWZQdHI8RXhlY3V0YWJsZU1lbW9yeUhhbmRsZT4gYWxsb2Nh
dGUoc2l6ZV90LCB2b2lkKiwgSklUQ29tcGlsYXRpb25FZmZvcnQpIHsgcmV0dXJuIG51bGxwdHI7
IH0KKyAgICBSZWZQdHI8RXhlY3V0YWJsZU1lbW9yeUhhbmRsZT4gYWxsb2NhdGUoc2l6ZV90LCBK
SVRDb21waWxhdGlvbkVmZm9ydCkgeyByZXR1cm4gbnVsbHB0cjsgfQogCiAgICAgc3RhdGljIHZv
aWQgc2V0SklURW5hYmxlZChib29sKSB7IH07CiAgICAgCkBAIC0xNzYsNyArMTc2LDcgQEAgcHVi
bGljOgogICAgIAogICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyB2b2lkIHNldEpJVEVuYWJs
ZWQoYm9vbCk7CiAKLSAgICBSZWZQdHI8RXhlY3V0YWJsZU1lbW9yeUhhbmRsZT4gYWxsb2NhdGUo
c2l6ZV90IHNpemVJbkJ5dGVzLCB2b2lkKiBvd25lclVJRCwgSklUQ29tcGlsYXRpb25FZmZvcnQp
OworICAgIFJlZlB0cjxFeGVjdXRhYmxlTWVtb3J5SGFuZGxlPiBhbGxvY2F0ZShzaXplX3Qgc2l6
ZUluQnl0ZXMsIEpJVENvbXBpbGF0aW9uRWZmb3J0KTsKIAogICAgIGJvb2wgaXNWYWxpZEV4ZWN1
dGFibGVNZW1vcnkoY29uc3QgQWJzdHJhY3RMb2NrZXImLCB2b2lkKiBhZGRyZXNzKTsKIApAQCAt
MTg0LDYgKzE4NCwxMCBAQCBwdWJsaWM6CiAKICAgICBMb2NrJiBnZXRMb2NrKCkgY29uc3Q7CiAK
KyNpZiBDUFUoQVJNNjQpCisgICAgdm9pZCogZ2V0SnVtcElzbGFuZFRvKHZvaWQqIGZyb20sIHZv
aWQqIG5ld0Rlc3RpbmF0aW9uKTsKKyNlbmRpZgorCiBwcml2YXRlOgogICAgIEV4ZWN1dGFibGVB
bGxvY2F0b3IoKSA9IGRlZmF1bHQ7CiAgICAgfkV4ZWN1dGFibGVBbGxvY2F0b3IoKSA9IGRlZmF1
bHQ7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db21tb25TbG93UGF0aHMu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbW1vblNs
b3dQYXRocy5jcHAJKHJldmlzaW9uIDI1Nzg2NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0NvbW1vblNsb3dQYXRocy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMyLDcgKzMyLDYg
QEAKICNpbmNsdWRlICJCeXRlY29kZVN0cnVjdHMuaCIKICNpbmNsdWRlICJDYWxsRnJhbWUuaCIK
ICNpbmNsdWRlICJDbG9uZWRBcmd1bWVudHMuaCIKLSNpbmNsdWRlICJDb2RlUHJvZmlsaW5nLmgi
CiAjaW5jbHVkZSAiRGVmaW5lUHJvcGVydHlBdHRyaWJ1dGVzLmgiCiAjaW5jbHVkZSAiRGlyZWN0
QXJndW1lbnRzLmgiCiAjaW5jbHVkZSAiRXJyb3IuaCIKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0NvbXBsZXRpb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0NvbXBsZXRpb24uY3BwCShyZXZpc2lvbiAyNTc4NjYpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db21wbGV0aW9uLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMjcsNyArMjcsNiBAQAogI2luY2x1ZGUgIkNhbGxGcmFtZS5oIgogI2luY2x1ZGUgIkNhdGNo
U2NvcGUuaCIKICNpbmNsdWRlICJDb2RlQ2FjaGUuaCIKLSNpbmNsdWRlICJDb2RlUHJvZmlsaW5n
LmgiCiAjaW5jbHVkZSAiRXhjZXB0aW9uLmgiCiAjaW5jbHVkZSAiSWRlbnRpZmllcklubGluZXMu
aCIKICNpbmNsdWRlICJJbnRlcnByZXRlci5oIgpAQCAtMTM4LDggKzEzNyw2IEBAIEpTVmFsdWUg
ZXZhbHVhdGUoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE8KICAgICBSRUxFQVNFX0FTU0VSVCh2bS5h
dG9tU3RyaW5nVGFibGUoKSA9PSBUaHJlYWQ6OmN1cnJlbnQoKS5hdG9tU3RyaW5nVGFibGUoKSk7
CiAgICAgUkVMRUFTRV9BU1NFUlQoIXZtLmlzQ29sbGVjdG9yQnVzeU9uQ3VycmVudFRocmVhZCgp
KTsKIAotICAgIENvZGVQcm9maWxpbmcgcHJvZmlsZShzb3VyY2UpOwotCiAgICAgaWYgKCF0aGlz
VmFsdWUgfHwgdGhpc1ZhbHVlLmlzVW5kZWZpbmVkT3JOdWxsKCkpCiAgICAgICAgIHRoaXNWYWx1
ZSA9IGdsb2JhbE9iamVjdDsKICAgICBKU09iamVjdCogdGhpc09iaiA9IGpzQ2FzdDxKU09iamVj
dCo+KHRoaXNWYWx1ZS50b1RoaXMoZ2xvYmFsT2JqZWN0LCBOb3RTdHJpY3RNb2RlKSk7CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU01vZHVsZUxvYWRlci5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNNb2R1bGVMb2FkZXIuY3Bw
CShyZXZpc2lvbiAyNTc4NjYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU01v
ZHVsZUxvYWRlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI5LDcgKzI5LDYgQEAKIAogI2luY2x1
ZGUgIkJ1aWx0aW5OYW1lcy5oIgogI2luY2x1ZGUgIkNhdGNoU2NvcGUuaCIKLSNpbmNsdWRlICJD
b2RlUHJvZmlsaW5nLmgiCiAjaW5jbHVkZSAiRXJyb3IuaCIKICNpbmNsdWRlICJFeGNlcHRpb24u
aCIKICNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCkBAIC00MDAsOCArMzk5LDYgQEAgRW5jb2RlZEpT
VmFsdWUgSlNDX0hPU1RfQ0FMTCBtb2R1bGVMb2FkZQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6
ZW5jb2RlKEpTV2ViQXNzZW1ibHk6Omluc3RhbnRpYXRlKGdsb2JhbE9iamVjdCwgcHJvbWlzZSwg
bW9kdWxlS2V5LCBqc1NvdXJjZUNvZGUpKTsKICNlbmRpZgogCi0gICAgQ29kZVByb2ZpbGluZyBw
cm9maWxlKHNvdXJjZUNvZGUpOwotCiAgICAgUGFyc2VyRXJyb3IgZXJyb3I7CiAgICAgc3RkOjp1
bmlxdWVfcHRyPE1vZHVsZVByb2dyYW1Ob2RlPiBtb2R1bGVQcm9ncmFtTm9kZSA9IHBhcnNlPE1v
ZHVsZVByb2dyYW1Ob2RlPigKICAgICAgICAgdm0sIHNvdXJjZUNvZGUsIElkZW50aWZpZXIoKSwg
SlNQYXJzZXJCdWlsdGluTW9kZTo6Tm90QnVpbHRpbiwKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL09wdGlvbnNMaXN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvT3B0aW9uc0xpc3QuaAkocmV2aXNpb24gMjU3ODY2KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9uc0xpc3QuaAkod29ya2luZyBjb3B5KQpAQCAt
NTAwLDYgKzUwMCw3IEBAIGNvbnN0ZXhwciBib29sIGVuYWJsZVdlYkFzc2VtYmx5U3RyZWFtaW4K
ICAgICB2KEJvb2wsIGZvcmNlT1NSRXhpdFRvTExJbnQsIGZhbHNlLCBOb3JtYWwsICJJZiB0cnVl
LCB3ZSBhbHdheXMgZXhpdCB0byB0aGUgTExJbnQuIElmIGZhbHNlLCB3ZSBleGl0IHRvIHdoYXRl
dmVyIGlzIG1vc3QgY29udmVuaWVudC4iKSBcCiAgICAgdihVbnNpZ25lZCwgZ2V0QnlWYWxJQ01h
eE51bWJlck9mSWRlbnRpZmllcnMsIDQsIE5vcm1hbCwgIk51bWJlciBvZiBpZGVudGlmaWVycyB3
ZSBzZWUgaW4gdGhlIExMSW50IHRoYXQgY291bGQgY2F1c2UgdXMgdG8gYmFpbCBvbiBnZW5lcmF0
aW5nIGFuIElDIGZvciBnZXRfYnlfdmFsLiIpIFwKICAgICB2KEJvb2wsIHVzZUNsYXNzRmllbGRz
LCBmYWxzZSwgTm9ybWFsLCAiSWYgdHJ1ZSwgdGhlIHBhcnNlciB3aWxsIHVuZGVyc3RhbmQgZGF0
YSBmaWVsZHMgaW5zaWRlIGNsYXNzZXMuIikgXAorICAgIHYoQm9vbCwgdXNlUmFuZG9taXppbmdF
eGVjdXRhYmxlSXNsYW5kQWxsb2NhdGlvbiwgZmFsc2UsIE5vcm1hbCwgIkZvciB0aGUgYXJtNjQg
RXhlY3V0YWJsZUFsbG9jYXRvciwgaWYgdHJ1ZSwgc2VsZWN0IHdoaWNoIHJlZ2lvbiB0byB1c2Ug
cmFuZG9tbHkuIFRoaXMgaXMgdXNlZnVsIGZvciB0ZXN0aW5nIHRoYXQganVtcCBpc2xhbmRzIHdv
cmsuIikgXAogCiBlbnVtIE9wdGlvbkVxdWl2YWxlbmNlIHsKICAgICBTYW1lT3B0aW9uLApJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL3Rvb2xzL0NvZGVQcm9maWxlLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvdG9vbHMvQ29kZVByb2ZpbGUuY3BwCShyZXZpc2lv
biAyNTc4NjYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvdG9vbHMvQ29kZVByb2ZpbGUuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0xLDE3MiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAy
MDEyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
LSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuIAotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJD
b2RlUHJvZmlsZS5oIgotCi0jaW5jbHVkZSAiQ29kZUJsb2NrLmgiCi0jaW5jbHVkZSAiQ29kZVBy
b2ZpbGluZy5oIgotI2luY2x1ZGUgIkxpbmtCdWZmZXIuaCIKLSNpbmNsdWRlICJQcm9maWxlVHJl
ZU5vZGUuaCIKLSNpbmNsdWRlIDx3dGYvU3RhY2tUcmFjZS5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0
L1dURlN0cmluZy5oPgotCi1uYW1lc3BhY2UgSlNDIHsKLQotLy8gTWFwIGZyb20gQ29kZVR5cGUg
ZW51bSB0byBhIGNvcnJlc3BvbmRpbmcgbmFtZS4KLXN0YXRpYyBjb25zdCBjaGFyKiBjb25zdCBz
X2NvZGVUeXBlTmFtZXNbQ29kZVByb2ZpbGU6Ok51bWJlck9mQ29kZVR5cGVzXSA9IHsKLSAgICAi
W1tFbmdpbmVDb2RlXV0iLAotICAgICJbW0dsb2JhbFRodW5rXV0iLAotICAgICJbW1JlZ0V4cENv
ZGVdXSIsCi0gICAgIltbREZHSklUXV0iLAotICAgICJbW0Jhc2VsaW5lT25seV1dIiwKLSAgICAi
W1tCYXNlbGluZVByb2ZpbGVdXSIsCi0gICAgIltbQmFzZWxpbmVPU1JdXSIsCi0gICAgIltbRW5n
aW5lRnJhbWVdXSIKLX07Ci0KLS8vIEhlbHBlciBmdW5jdGlvbiwgdHJ1bmNhdGUgdHJhY2VzIHRv
IHBydW5lIHRoZSBvdXRwdXQgJiBtYWtlIHZlcnkgdmVyYm9zZSBtb2RlIGEgbGl0dGxlIG1vcmUg
cmVhZGFibGUuCi1zdGF0aWMgYm9vbCB0cnVuY2F0ZVRyYWNlKGNvbnN0IGNoYXIqIHN5bWJvbE5h
bWUpCi17Ci0gICAgcmV0dXJuICFzdHJjbXAoc3ltYm9sTmFtZSwgIkpTQzo6Qnl0ZWNvZGVHZW5l
cmF0b3I6OmdlbmVyYXRlKCkiKQotICAgICAgICB8fCAhc3RyY21wKHN5bWJvbE5hbWUsICJKU0M6
OlBhcnNlcjxKU0M6OkxleGVyPHVuc2lnbmVkIGNoYXI+Pjo6cGFyc2VJbm5lcigpIikKLSAgICAg
ICAgfHwgIXN0cmNtcChzeW1ib2xOYW1lLCAiV1RGOjpmYXN0TWFsbG9jKHVuc2lnbmVkIGxvbmcp
IikKLSAgICAgICAgfHwgIXN0cmNtcChzeW1ib2xOYW1lLCAiV1RGOjpjYWxjdWxhdGVVVENPZmZz
ZXQoKSIpCi0gICAgICAgIHx8ICFzdHJjbXAoc3ltYm9sTmFtZSwgIkpTQzo6REZHOjpCeXRlQ29k
ZVBhcnNlcjo6cGFyc2VDb2RlQmxvY2soKSIpOwotICAgICAgICAKLX0KLQotLy8gRWFjaCB0cmFj
ZSBjb25zaXN0cyBvZiBhIHNlcXVlbmNlIG9mIHplcm8gb3IgbW9yZSAnRW5naW5lRnJhbWUnIGVu
dHJpZXMsCi0vLyBmb2xsb3dlZCBieSBhIHNhbXBsZSBpbiBKSVQgY29kZSwgb3Igb25lIG9yIG1v
cmUgJ0VuZ2luZUZyYW1lJyBlbnRyaWVzLAotLy8gZm9sbG93ZWQgYnkgYSAnRW5naW5lQ29kZScg
dGVybWluYXRvci4KLXZvaWQgQ29kZVByb2ZpbGU6OnNhbXBsZSh2b2lkKiBwYywgdm9pZCoqIGZy
YW1lUG9pbnRlcikKLXsKLSAgICAvLyBEaXNhbGxvdyB0cmFjZXMgY29udGFpbmluZyBvbmx5IGEg
J0VuZ2luZUNvZGUnIHRlcm1pbmF0b3IsIHdpdGhvdXQgYW55ICdFbmdpbmVGcmFtZScgZnJhbWVz
LgotICAgIGlmICghZnJhbWVQb2ludGVyKQotICAgICAgICByZXR1cm47Ci0KLSAgICB3aGlsZSAo
ZnJhbWVQb2ludGVyKSB7Ci0gICAgICAgIENvZGVUeXBlIHR5cGU7Ci0KLSNpZiBFTkFCTEUoSklU
KQotICAgICAgICAvLyBEZXRlcm1pbmUgaWYgdGhpcyBzYW1wbGUgZmVsbCBpbiBKSVQgY29kZSwg
YW5kIGlmIHNvLCBmcm9tIHdoaWNoIEpJVCAmIHdoeS4KLSAgICAgICAgdm9pZCogb3duZXJVSUQg
PSBDb2RlUHJvZmlsaW5nOjpnZXRPd25lclVJREZvclBDKHBjKTsKLQotICAgICAgICBpZiAoIW93
bmVyVUlEKQotICAgICAgICAgICAgdHlwZSA9IEVuZ2luZUZyYW1lOwotICAgICAgICBlbHNlIGlm
IChvd25lclVJRCA9PSBHTE9CQUxfVEhVTktfSUQpCi0gICAgICAgICAgICB0eXBlID0gR2xvYmFs
VGh1bms7Ci0gICAgICAgIGVsc2UgaWYgKG93bmVyVUlEID09IFJFR0VYUF9DT0RFX0lEKQotICAg
ICAgICAgICAgdHlwZSA9IFJlZ0V4cENvZGU7Ci0gICAgICAgIGVsc2UgewotICAgICAgICAgICAg
Q29kZUJsb2NrKiBjb2RlQmxvY2sgPSBzdGF0aWNfY2FzdDxDb2RlQmxvY2sqPihvd25lclVJRCk7
Ci0gICAgICAgICAgICBpZiAoY29kZUJsb2NrLT5qaXRUeXBlKCkgPT0gSklUVHlwZTo6REZHSklU
KQotICAgICAgICAgICAgICAgIHR5cGUgPSBERkdKSVQ7Ci0gICAgICAgICAgICBlbHNlIGlmICgh
Y2FuQ29tcGlsZShjb2RlQmxvY2stPmNhcGFiaWxpdHlMZXZlbFN0YXRlKCkpKQotICAgICAgICAg
ICAgICAgIHR5cGUgPSBCYXNlbGluZU9ubHk7Ci0gICAgICAgICAgICBlbHNlIGlmIChjb2RlQmxv
Y2stPnJlcGxhY2VtZW50KCkpCi0gICAgICAgICAgICAgICAgdHlwZSA9IEJhc2VsaW5lT1NSOwot
ICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIHR5cGUgPSBCYXNlbGluZVByb2ZpbGU7
Ci0gICAgICAgIH0KLSNlbHNlCi0gICAgICAgIHR5cGUgPSBFbmdpbmVGcmFtZTsKLSNlbmRpZgot
Ci0gICAgICAgIC8vIEEgc2FtcGxlIGluIEpJVCBjb2RlIHRlcm1pbmF0ZXMgdGhlIHRyYWNlLgot
ICAgICAgICBtX3NhbXBsZXMuYXBwZW5kKENvZGVSZWNvcmQocGMsIHR5cGUpKTsKLSAgICAgICAg
aWYgKHR5cGUgIT0gRW5naW5lRnJhbWUpCi0gICAgICAgICAgICByZXR1cm47Ci0KLSNpZiBPUyhE
QVJXSU4pICYmIENQVShYODZfNjQpCi0gICAgICAgIC8vIFdhbGsgdXAgdGhlIHN0YWNrLgotICAg
ICAgICBwYyA9IGZyYW1lUG9pbnRlclsxXTsKLSAgICAgICAgZnJhbWVQb2ludGVyID0gcmVpbnRl
cnByZXRfY2FzdDx2b2lkKio+KCpmcmFtZVBvaW50ZXIpOwotI2VsaWYgT1MoTElOVVgpICYmIENQ
VShYODYpCi0gICAgICAgIC8vIERvbid0IHVud2luZCB0aGUgc3RhY2sgYXMgc29tZSBkZXBlbmRl
bnQgdGhpcmQgcGFydHkgbGlicmFyaWVzCi0gICAgICAgIC8vIG1heSBiZSBjb21waWxlZCB3aXRo
IC1mb21pdC1mcmFtZS1wb2ludGVyLgotICAgICAgICBmcmFtZVBvaW50ZXIgPSAwOwotI2Vsc2UK
LSAgICAgICAgLy8gVGhpcyBwbGF0Zm9ybSBpcyBub3QgeWV0IHN1cHBvcnRlZCEKLSAgICAgICAg
UkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSNlbmRpZgotICAgIH0KLQotICAgIC8vIElm
IHdlIGdldCBoZXJlLCB3ZSB3YWxrZWQgdGhlIGVudGlyZSBzdGFjayB3aXRob3V0IGZpbmRpbmcg
YW55IGZyYW1lcyBvZiBKSVQgY29kZS4KLSAgICBtX3NhbXBsZXMuYXBwZW5kKENvZGVSZWNvcmQo
MCwgRW5naW5lQ29kZSkpOwotfQotCi12b2lkIENvZGVQcm9maWxlOjpyZXBvcnQoKQotewotICAg
IGRhdGFMb2dGKCI8Q29kZVByb2ZpbGluZyAlczolZD5cbiIsIG1fZmlsZS5kYXRhKCksIG1fbGlu
ZU51bWJlcik7Ci0KLSAgICAvLyBIb3cgbWFueSBmcmFtZXMgb2YgQy1jb2RlIHRvIHByaW50IC0g
MCwgaWYgbm90IHZlcmJvc2UsIDEgaWYgdmVyYm9zZSwgdXAgdG8gMTAyNCBpZiB2ZXJ5IHZlcmJv
c2UuCi0gICAgdW5zaWduZWQgcmVjdXJzaW9uTGltaXQgPSBDb2RlUHJvZmlsaW5nOjpiZVZlcnlW
ZXJib3NlKCkgPyAxMDI0IDogQ29kZVByb2ZpbGluZzo6YmVWZXJib3NlKCk7Ci0KLSAgICBQcm9m
aWxlVHJlZU5vZGUgcHJvZmlsZTsKLQotICAgIC8vIFdhbGsgdGhyb3VnaCB0aGUgc2FtcGxlIGJ1
ZmZlci4KLSAgICBzaXplX3QgdHJhY2UgPSAwOwotICAgIHdoaWxlICh0cmFjZSA8IG1fc2FtcGxl
cy5zaXplKCkpIHsKLQotICAgICAgICAvLyBBbGwgdHJhY2VzIGFyZSB6ZXJvIG9yIG1vcmUgJ0Vu
Z2luZUZyYW1lJ3MsIGZvbGxvd2VkIGJ5IGEgbm9uLSdFbmdpbmVGcmFtZScuCi0gICAgICAgIC8v
IFNjYW4gdG8gZmluZCB0aGUgbGFzdCBzYW1wbGUgaW4gdGhlIHRyYWNlLgotICAgICAgICBzaXpl
X3QgbGFzdEluVHJhY2UgPSB0cmFjZTsKLSAgICAgICAgd2hpbGUgKG1fc2FtcGxlc1tsYXN0SW5U
cmFjZV0udHlwZSA9PSBFbmdpbmVGcmFtZSkKLSAgICAgICAgICAgICsrbGFzdEluVHJhY2U7Ci0K
LSAgICAgICAgLy8gV2UgdXNlIHRoZSBsYXN0IHNhbXBsZSB0eXBlIHRvIGxvb2sgdXAgYSBuYW1l
ICh1c2VkIGFzIGEgYnVja2V0IGluIHRoZSBwcm9maWxlcikuCi0gICAgICAgIFByb2ZpbGVUcmVl
Tm9kZSogY2FsbGJhY2tzID0gcHJvZmlsZS5zYW1wbGVDaGlsZChzX2NvZGVUeXBlTmFtZXNbbV9z
YW1wbGVzW2xhc3RJblRyYWNlXS50eXBlXSk7Ci0KLSAgICAgICAgLy8gSWYgdGhlcmUgYXJlIGFu
eSBzYW1wbGVzIGluIEMtY29kZSwgYWRkIHVwIHRvIHJlY3Vyc2lvbkxpbWl0IG9mIHRoZW0gaW50
byB0aGUgcHJvZmlsZSB0cmVlLgotICAgICAgICBzaXplX3QgbGFzdEVuZ2luZUZyYW1lID0gbGFz
dEluVHJhY2U7Ci0gICAgICAgIGZvciAodW5zaWduZWQgY291bnQgPSAwOyBsYXN0RW5naW5lRnJh
bWUgPiB0cmFjZSAmJiBjb3VudCA8IHJlY3Vyc2lvbkxpbWl0OyArK2NvdW50KSB7Ci0gICAgICAg
ICAgICAtLWxhc3RFbmdpbmVGcmFtZTsKLSAgICAgICAgICAgIEFTU0VSVChtX3NhbXBsZXNbbGFz
dEVuZ2luZUZyYW1lXS50eXBlID09IEVuZ2luZUZyYW1lKTsKLSAgICAgICAgICAgIGNvbnN0IGNo
YXIqIG5hbWUgPSAiPHVua25vd24+IjsKLSAgICAgICAgICAgIGF1dG8gZGVtYW5nbGVkID0gU3Rh
Y2tUcmFjZTo6ZGVtYW5nbGUobV9zYW1wbGVzW2xhc3RFbmdpbmVGcmFtZV0ucGMpOwotICAgICAg
ICAgICAgaWYgKGRlbWFuZ2xlZCkKLSAgICAgICAgICAgICAgICBuYW1lID0gZGVtYW5nbGVkLT5k
ZW1hbmdsZWROYW1lKCkgPyBkZW1hbmdsZWQtPmRlbWFuZ2xlZE5hbWUoKSA6IGRlbWFuZ2xlZC0+
bWFuZ2xlZE5hbWUoKTsKLSAgICAgICAgICAgIGNhbGxiYWNrcyA9IGNhbGxiYWNrcy0+c2FtcGxl
Q2hpbGQobmFtZSk7Ci0gICAgICAgICAgICBpZiAodHJ1bmNhdGVUcmFjZShuYW1lKSkKLSAgICAg
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotCi0gICAgICAgIC8vIE1vdmUgb24gdG8gdGhl
IG5leHQgdHJhY2UuCi0gICAgICAgIHRyYWNlID0gbGFzdEluVHJhY2UgKyAxOwotICAgICAgICBB
U1NFUlQodHJhY2UgPD0gbV9zYW1wbGVzLnNpemUoKSk7Ci0gICAgfQotCi0gICAgLy8gT3V0cHV0
IHRoZSBwcm9maWxlIHRyZWUuCi0gICAgZGF0YUxvZ0YoIlRvdGFsIHNhbXBsZXM6ICVsbGRcbiIs
IHN0YXRpY19jYXN0PGxvbmcgbG9uZz4ocHJvZmlsZS5jaGlsZENvdW50KCkpKTsKLSAgICBwcm9m
aWxlLmR1bXAoKTsKLSAgICAKLSAgICBmb3IgKHNpemVfdCBpID0gMCA7IGkgPCBtX2NoaWxkcmVu
LnNpemUoKTsgKytpKQotICAgICAgICBtX2NoaWxkcmVuW2ldLT5yZXBvcnQoKTsKLQotICAgIGRh
dGFMb2dGKCI8L0NvZGVQcm9maWxpbmcgJXM6JWQ+XG4iLCBtX2ZpbGUuZGF0YSgpLCBtX2xpbmVO
dW1iZXIpOwotfQotCi19CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvdG9vbHMvQ29kZVBy
b2ZpbGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvdG9vbHMvQ29kZVBy
b2ZpbGUuaAkocmV2aXNpb24gMjU3ODY2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3Rvb2xz
L0NvZGVQcm9maWxlLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsODkgKzAsMCBAQAotLyoKLSAqIENv
cHlyaWdodCAoQykgMjAxMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
Ci0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMn
JyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
Ci0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotCi0jcHJhZ21hIG9uY2UKLQotI2lu
Y2x1ZGUgIlNvdXJjZUNvZGUuaCIKLSNpbmNsdWRlICJUaWVyZWRNTWFwQXJyYXkuaCIKLSNpbmNs
dWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+Ci0KLW5hbWVzcGFjZSBKU0MgewotCi1jbGFzcyBDb2Rl
UHJvZmlsZSB7Ci0gICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7Ci1wdWJsaWM6Ci0gICAgQ29k
ZVByb2ZpbGUoY29uc3QgU291cmNlQ29kZSYgc291cmNlLCBDb2RlUHJvZmlsZSogcGFyZW50KQot
ICAgICAgICA6IG1fZmlsZShTdHJpbmcoc291cmNlLnByb3ZpZGVyKCktPnVybCgpKS51dGY4KCkp
Ci0gICAgICAgICwgbV9saW5lTnVtYmVyKHNvdXJjZS5maXJzdExpbmUoKS5vbmVCYXNlZEludCgp
KQotICAgICAgICAsIG1fcGFyZW50KHBhcmVudCkKLSAgICB7Ci0gICAgICAgIGlmIChwYXJlbnQp
Ci0gICAgICAgICAgICBwYXJlbnQtPmFkZENoaWxkKHN0ZDo6dW5pcXVlX3B0cjxDb2RlUHJvZmls
ZT4odGhpcykpOwotICAgIH0KLQotICAgIHZvaWQgc2FtcGxlKHZvaWQqIHBjLCB2b2lkKiogZnJh
bWVQb2ludGVyKTsKLSAgICB2b2lkIHJlcG9ydCgpOwotCi0gICAgQ29kZVByb2ZpbGUqIHBhcmVu
dCgpCi0gICAgewotICAgICAgICByZXR1cm4gbV9wYXJlbnQ7Ci0gICAgfQotICAgIAotICAgIHZv
aWQgYWRkQ2hpbGQoc3RkOjp1bmlxdWVfcHRyPENvZGVQcm9maWxlPiBjaGlsZCkKLSAgICB7Ci0g
ICAgICAgIG1fY2hpbGRyZW4uYXBwZW5kKFdURk1vdmUoY2hpbGQpKTsKLSAgICB9Ci0KLSAgICBl
bnVtIENvZGVUeXBlIHsKLSAgICAgICAgRW5naW5lQ29kZSwKLSAgICAgICAgR2xvYmFsVGh1bmss
Ci0gICAgICAgIFJlZ0V4cENvZGUsCi0gICAgICAgIERGR0pJVCwKLSAgICAgICAgQmFzZWxpbmVP
bmx5LAotICAgICAgICBCYXNlbGluZVByb2ZpbGUsCi0gICAgICAgIEJhc2VsaW5lT1NSLAotICAg
ICAgICBFbmdpbmVGcmFtZSwKLSAgICAgICAgTnVtYmVyT2ZDb2RlVHlwZXMKLSAgICB9OwotCi1w
cml2YXRlOgotICAgIHN0cnVjdCBDb2RlUmVjb3JkIHsKLSAgICAgICAgQ29kZVJlY29yZCh2b2lk
KiBwYywgQ29kZVR5cGUgdHlwZSkKLSAgICAgICAgICAgIDogcGMocGMpCi0gICAgICAgICAgICAs
IHR5cGUodHlwZSkKLSAgICAgICAgewotICAgICAgICB9Ci0gICAgICAgIHZvaWQqIHBjOwotICAg
ICAgICBDb2RlVHlwZSB0eXBlOwotICAgIH07Ci0KLSAgICBDU3RyaW5nIG1fZmlsZTsKLSAgICB1
bnNpZ25lZCBtX2xpbmVOdW1iZXI7Ci0gICAgQ29kZVByb2ZpbGUqIG1fcGFyZW50OwotICAgIFZl
Y3RvcjxzdGQ6OnVuaXF1ZV9wdHI8Q29kZVByb2ZpbGU+PiBtX2NoaWxkcmVuOwotICAgIFRpZXJl
ZE1NYXBBcnJheTxDb2RlUmVjb3JkPiBtX3NhbXBsZXM7Ci19OwotCi19IC8vIG5hbWVzcGFjZSBK
U0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90b29scy9Db2RlUHJvZmlsaW5nLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvdG9vbHMvQ29kZVByb2ZpbGluZy5j
cHAJKHJldmlzaW9uIDI1Nzg2NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90b29scy9Db2Rl
UHJvZmlsaW5nLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSwxNjkgKzAsMCBAQAotLyoKLSAqIENv
cHlyaWdodCAoQykgMjAxMi0yMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAq
Ci0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0g
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBB
UyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
Ci0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0KLSNpbmNsdWRlICJjb25m
aWcuaCIKLSNpbmNsdWRlICJDb2RlUHJvZmlsaW5nLmgiCi0KLSNpbmNsdWRlICJDb2RlUHJvZmls
ZS5oIgotI2luY2x1ZGUgIk1hY2hpbmVDb250ZXh0LmgiCi0jaW5jbHVkZSA8d3RmL01ldGFBbGxv
Y2F0b3IuaD4KLQotI2lmIEhBVkUoU0lHTkFMX0gpCi0jaW5jbHVkZSA8c2lnbmFsLmg+Ci0jZW5k
aWYKLQotI2lmIEhBVkUoTUFDSElORV9DT05URVhUKQotI2luY2x1ZGUgPHN5cy90aW1lLmg+Ci0j
ZW5kaWYKLQotbmFtZXNwYWNlIEpTQyB7Ci0KLXZvbGF0aWxlIENvZGVQcm9maWxlKiBDb2RlUHJv
ZmlsaW5nOjpzX3Byb2ZpbGVTdGFjayA9IDA7Ci1Db2RlUHJvZmlsaW5nOjpNb2RlIENvZGVQcm9m
aWxpbmc6OnNfbW9kZSA9IENvZGVQcm9maWxpbmc6OkRpc2FibGVkOwotV1RGOjpNZXRhQWxsb2Nh
dG9yVHJhY2tlciogQ29kZVByb2ZpbGluZzo6c190cmFja2VyID0gMDsKLQotSUdOT1JFX1dBUk5J
TkdTX0JFR0lOKCJtaXNzaW5nLW5vcmV0dXJuIikKLQotI2lmIEhBVkUoTUFDSElORV9DT05URVhU
KQotLy8gSGVscGVyIGZ1bmN0aW9uIHRvIHN0YXJ0ICYgc3RvcCB0aGUgdGltZXIuCi0vLyBQcmVz
ZW50bHkgd2UncmUgdXNpbmcgdGhlIHdhbGwtY2xvY2sgdGltZXIsIHNpbmNlIHRoaXMgc2VlbXMg
dG8gZ2l2ZSB0aGUgYmVzdCByZXN1bHRzLgotc3RhdGljIHZvaWQgc2V0UHJvZmlsZVRpbWVyKHVu
c2lnbmVkIHVzZWMpCi17Ci0gICAgaXRpbWVydmFsIHRpbWVyOwotICAgIHRpbWVyLml0X3ZhbHVl
LnR2X3NlYyA9IDA7Ci0gICAgdGltZXIuaXRfdmFsdWUudHZfdXNlYyA9IHVzZWM7Ci0gICAgdGlt
ZXIuaXRfaW50ZXJ2YWwudHZfc2VjID0gMDsKLSAgICB0aW1lci5pdF9pbnRlcnZhbC50dl91c2Vj
ID0gdXNlYzsKLSAgICBzZXRpdGltZXIoSVRJTUVSX1JFQUwsICZ0aW1lciwgMCk7Ci19Ci0jZW5k
aWYKLQotSUdOT1JFX1dBUk5JTkdTX0VORAotCi0jaWYgSEFWRShNQUNISU5FX0NPTlRFWFQpCi1z
dGF0aWMgdm9pZCBwcm9maWxpbmdUaW1lcihpbnQsIHNpZ2luZm9fdCosIHZvaWQqIHVhcCkKLXsK
LSAgICBQbGF0Zm9ybVJlZ2lzdGVycyYgcGxhdGZvcm1SZWdpc3RlcnMgPSBXVEY6OnJlZ2lzdGVy
c0Zyb21VQ29udGV4dChzdGF0aWNfY2FzdDx1Y29udGV4dF90Kj4odWFwKSk7Ci0gICAgaWYgKGF1
dG8gaW5zdHJ1Y3Rpb25Qb2ludGVyID0gTWFjaGluZUNvbnRleHQ6Omluc3RydWN0aW9uUG9pbnRl
cihwbGF0Zm9ybVJlZ2lzdGVycykpIHsKLSAgICAgICAgQ29kZVByb2ZpbGluZzo6c2FtcGxlKAot
ICAgICAgICAgICAgaW5zdHJ1Y3Rpb25Qb2ludGVyLT51bnRhZ2dlZEV4ZWN1dGFibGVBZGRyZXNz
KCksCi0gICAgICAgICAgICByZWludGVycHJldF9jYXN0PHZvaWQqKj4oTWFjaGluZUNvbnRleHQ6
OmZyYW1lUG9pbnRlcihwbGF0Zm9ybVJlZ2lzdGVycykpKTsKLSAgICB9Ci19Ci0jZW5kaWYKLQot
Ly8gQ2FsbGJhY2sgdHJpZ2dlcmVkIHdoZW4gdGhlIHRpbWVyIGlzIGZpcmVkLgotdm9pZCBDb2Rl
UHJvZmlsaW5nOjpzYW1wbGUodm9pZCogcGMsIHZvaWQqKiBmcmFtZVBvaW50ZXIpCi17Ci0gICAg
Q29kZVByb2ZpbGUqIHByb2ZpbGVTdGFjayA9IGNvbnN0X2Nhc3Q8Q29kZVByb2ZpbGUqPihzX3By
b2ZpbGVTdGFjayk7Ci0gICAgaWYgKHByb2ZpbGVTdGFjaykKLSAgICAgICAgcHJvZmlsZVN0YWNr
LT5zYW1wbGUocGMsIGZyYW1lUG9pbnRlcik7Ci19Ci0KLXZvaWQgQ29kZVByb2ZpbGluZzo6bm90
aWZ5QWxsb2NhdG9yKFdURjo6TWV0YUFsbG9jYXRvciogYWxsb2NhdG9yKQotewotICAgIC8vIENo
ZWNrIGZvciBKU0NfQ09ERV9QUk9GSUxJTkcuCi0gICAgY29uc3QgY2hhciogY29kZVByb2ZpbGlu
Z01vZGUgPSBnZXRlbnYoIkpTQ19DT0RFX1BST0ZJTElORyIpOwotICAgIGlmICghY29kZVByb2Zp
bGluZ01vZGUpCi0gICAgICAgIHJldHVybjsKLQotICAgIC8vIENoZWNrIGZvciBhIHZhbGlkIG1v
ZGUsIGN1cnJlbnRseSAiMSIsICIyIiwgb3IgIjMiLgotICAgIGlmICghY29kZVByb2ZpbGluZ01v
ZGVbMF0gfHwgY29kZVByb2ZpbGluZ01vZGVbMV0pCi0gICAgICAgIHJldHVybjsKLSAgICBzd2l0
Y2ggKCpjb2RlUHJvZmlsaW5nTW9kZSkgewotICAgIGNhc2UgJzEnOgotICAgICAgICBzX21vZGUg
PSBFbmFibGVkOwotICAgICAgICBicmVhazsKLSAgICBjYXNlICcyJzoKLSAgICAgICAgc19tb2Rl
ID0gVmVyYm9zZTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSAnMyc6Ci0gICAgICAgIHNfbW9k
ZSA9IFZlcnlWZXJib3NlOwotICAgICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgICBy
ZXR1cm47Ci0gICAgfQotCi0gICAgQVNTRVJUKGVuYWJsZWQoKSk7Ci0gICAgQVNTRVJUKCFzX3Ry
YWNrZXIpOwotICAgIHNfdHJhY2tlciA9IG5ldyBXVEY6Ok1ldGFBbGxvY2F0b3JUcmFja2VyKCk7
Ci0gICAgYWxsb2NhdG9yLT50cmFja0FsbG9jYXRpb25zKHNfdHJhY2tlcik7Ci19Ci0KLXZvaWQq
IENvZGVQcm9maWxpbmc6OmdldE93bmVyVUlERm9yUEModm9pZCogYWRkcmVzcykKLXsKLSAgICBp
ZiAoIXNfdHJhY2tlcikKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgV1RGOjpNZXRhQWxsb2NhdG9y
SGFuZGxlKiBoYW5kbGUgPSBzX3RyYWNrZXItPmZpbmQoYWRkcmVzcyk7Ci0gICAgaWYgKCFoYW5k
bGUpCi0gICAgICAgIHJldHVybiAwOwotICAgIHJldHVybiBoYW5kbGUtPm93bmVyVUlEKCk7Ci19
Ci0KLXZvaWQgQ29kZVByb2ZpbGluZzo6YmVnaW4oY29uc3QgU291cmNlQ29kZSYgc291cmNlKQot
ewotICAgIC8vIFB1c2ggYSBuZXcgQ29kZVByb2ZpbGUgb250byB0aGUgc3RhY2sgZm9yIGVhY2gg
c2NyaXB0IGVuY291bnRlcmVkLgotICAgIENvZGVQcm9maWxlKiBwcm9maWxlU3RhY2sgPSBjb25z
dF9jYXN0PENvZGVQcm9maWxlKj4oc19wcm9maWxlU3RhY2spOwotICAgIGJvb2wgYWxyZWFkeVBy
b2ZpbGluZyA9IHByb2ZpbGVTdGFjazsKLSAgICBzX3Byb2ZpbGVTdGFjayA9IHByb2ZpbGVTdGFj
ayA9IG5ldyBDb2RlUHJvZmlsZShzb3VyY2UsIHByb2ZpbGVTdGFjayk7Ci0KLSAgICAvLyBJcyB0
aGUgcHJvZmlsZXIgYWxyZWFkeSBydW5uaW5nIC0gaWYgc28sIHRoZSB0aW1lciB3aWxsIGFscmVh
ZHkgYmUgc2V0IHVwLgotICAgIGlmIChhbHJlYWR5UHJvZmlsaW5nKQotICAgICAgICByZXR1cm47
Ci0KLSNpZiBIQVZFKE1BQ0hJTkVfQ09OVEVYVCkKLSAgICAvLyBSZWdzaXRlciBhIHNpZ25hbCBo
YW5kbGVyICYgaXRpbWVyLgotICAgIHN0cnVjdCBzaWdhY3Rpb24gYWN0aW9uOwotICAgIGFjdGlv
bi5zYV9zaWdhY3Rpb24gPSByZWludGVycHJldF9jYXN0PHZvaWQgKCopKGludCwgc2lnaW5mb190
ICosIHZvaWQgKik+KHByb2ZpbGluZ1RpbWVyKTsKLSAgICBzaWdmaWxsc2V0KCZhY3Rpb24uc2Ff
bWFzayk7Ci0gICAgYWN0aW9uLnNhX2ZsYWdzID0gU0FfU0lHSU5GTzsKLSAgICBzaWdhY3Rpb24o
U0lHQUxSTSwgJmFjdGlvbiwgMCk7Ci0gICAgc2V0UHJvZmlsZVRpbWVyKDEwMCk7Ci0jZW5kaWYK
LX0KLQotdm9pZCBDb2RlUHJvZmlsaW5nOjplbmQoKQotewotICAgIC8vIFBvcCB0aGUgY3VycmVu
dCBwcm9maWxlciBvZmYgdGhlIHN0YWNrLgotICAgIENvZGVQcm9maWxlKiBjdXJyZW50ID0gY29u
c3RfY2FzdDxDb2RlUHJvZmlsZSo+KHNfcHJvZmlsZVN0YWNrKTsKLSAgICBBU1NFUlQoY3VycmVu
dCk7Ci0gICAgc19wcm9maWxlU3RhY2sgPSBjdXJyZW50LT5wYXJlbnQoKTsKLQotICAgIC8vIElz
IHRoaXMgdGhlIG91dGVybW9zdCBzY3JpcHQgYmVpbmcgcHJvZmlsZWQ/IC0gaWYgbm90LCBqdXN0
IHJldHVybi4KLSAgICAvLyBXZSBwZXJmb3JtIGFsbCBvdXRwdXQgb2YgcHJvZmlsZXMgcmVjdXJz
aXZlbHkgZnJvbSB0aGUgb3V0ZXJtb3N0IHNjcmlwdCwKLSAgICAvLyB0byBtaW5pbWl6ZSBwcm9m
aWxpbmcgb3ZlcmhlYWQgZnJvbSBza2V3aW5nIHJlc3VsdHMuCi0gICAgaWYgKHNfcHJvZmlsZVN0
YWNrKQotICAgICAgICByZXR1cm47Ci0KLSNpZiBIQVZFKE1BQ0hJTkVfQ09OVEVYVCkKLSAgICAv
LyBTdG9wIHByb2ZpbGluZwotICAgIHNldFByb2ZpbGVUaW1lcigwKTsKLSNlbmRpZgotCi0gICAg
Y3VycmVudC0+cmVwb3J0KCk7Ci0gICAgZGVsZXRlIGN1cnJlbnQ7Ci19Ci0KLX0KSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS90b29scy9Db2RlUHJvZmlsaW5nLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL3Rvb2xzL0NvZGVQcm9maWxpbmcuaAkocmV2aXNpb24gMjU3
ODY2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3Rvb2xzL0NvZGVQcm9maWxpbmcuaAkod29y
a2luZyBjb3B5KQpAQCAtMSw4MSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEyIEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAq
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuIAotICovCi0KLSNwcmFnbWEgb25jZQotCi1uYW1lc3BhY2UgV1RGIHsKLQotY2xh
c3MgTWV0YUFsbG9jYXRvcjsKLWNsYXNzIE1ldGFBbGxvY2F0b3JUcmFja2VyOwotCi19Ci0KLW5h
bWVzcGFjZSBKU0MgewotCi1jbGFzcyBDb2RlUHJvZmlsZTsKLWNsYXNzIFNvdXJjZUNvZGU7Ci0K
LWNsYXNzIENvZGVQcm9maWxpbmcgewotICAgIGVudW0gTW9kZSB7Ci0gICAgICAgIERpc2FibGVk
LAotICAgICAgICBFbmFibGVkLAotICAgICAgICBWZXJib3NlLAotICAgICAgICBWZXJ5VmVyYm9z
ZQotICAgIH07Ci0KLXB1YmxpYzoKLSAgICBDb2RlUHJvZmlsaW5nKGNvbnN0IFNvdXJjZUNvZGUm
IHNvdXJjZSkKLSAgICAgICAgOiBtX2FjdGl2ZShlbmFibGVkKCkpCi0gICAgewotICAgICAgICBp
ZiAobV9hY3RpdmUpCi0gICAgICAgICAgICBiZWdpbihzb3VyY2UpOwotICAgIH0KLQotICAgIH5D
b2RlUHJvZmlsaW5nKCkKLSAgICB7Ci0gICAgICAgIGlmIChtX2FjdGl2ZSkKLSAgICAgICAgICAg
IGVuZCgpOwotICAgIH0KLQotICAgIHN0YXRpYyBib29sIGVuYWJsZWQoKSB7IHJldHVybiBzX21v
ZGUgIT0gRGlzYWJsZWQ7IH0KLSAgICBzdGF0aWMgYm9vbCBiZVZlcmJvc2UoKSB7IHJldHVybiBz
X21vZGUgPj0gVmVyYm9zZTsgfQotICAgIHN0YXRpYyBib29sIGJlVmVyeVZlcmJvc2UoKSB7IHJl
dHVybiBzX21vZGUgPj0gVmVyeVZlcmJvc2U7IH0KLQotICAgIHN0YXRpYyB2b2lkIG5vdGlmeUFs
bG9jYXRvcihXVEY6Ok1ldGFBbGxvY2F0b3IqKTsKLSAgICBzdGF0aWMgdm9pZCogZ2V0T3duZXJV
SURGb3JQQyh2b2lkKik7Ci0gICAgc3RhdGljIHZvaWQgc2FtcGxlKHZvaWQqIHBjLCB2b2lkKiog
ZnJhbWVQb2ludGVyKTsKLQotcHJpdmF0ZToKLSAgICB2b2lkIGJlZ2luKGNvbnN0IFNvdXJjZUNv
ZGUmKTsKLSAgICB2b2lkIGVuZCgpOwotCi0gICAgYm9vbCBtX2FjdGl2ZTsKLQotICAgIHN0YXRp
YyBNb2RlIHNfbW9kZTsKLSAgICBzdGF0aWMgV1RGOjpNZXRhQWxsb2NhdG9yVHJhY2tlciogc190
cmFja2VyOwotICAgIHN0YXRpYyB2b2xhdGlsZSBDb2RlUHJvZmlsZSogc19wcm9maWxlU3RhY2s7
Ci19OwotCi19IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90
b29scy9TaWdpbGxDcmFzaEFuYWx5emVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvdG9vbHMvU2lnaWxsQ3Jhc2hBbmFseXplci5jcHAJKHJldmlzaW9uIDI1Nzg2NikK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90b29scy9TaWdpbGxDcmFzaEFuYWx5emVyLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtNjcsMTcgKzY3LDE3IEBAIHByaXZhdGU6CiAKICNpZiBPUyhEQVJX
SU4pCiAKLSNpZiBVU0UoT1NfTE9HKQorLy8jaWYgVVNFKE9TX0xPRykKIAotI2RlZmluZSBsb2co
Zm9ybWF0LCAuLi4pIFwKLSAgICBvc19sb2dfaW5mbyhPU19MT0dfREVGQVVMVCwgZm9ybWF0LCAj
I19fVkFfQVJHU19fKQotCi0jZWxzZSAvLyBVU0UoT1NfTE9HKQorLy8jZGVmaW5lIGxvZyhmb3Jt
YXQsIC4uLikgXAorLy8gICAgb3NfbG9nX2luZm8oT1NfTE9HX0RFRkFVTFQsIGZvcm1hdCwgIyNf
X1ZBX0FSR1NfXykKKy8vCisvLyNlbHNlIC8vIFVTRShPU19MT0cpCiAKICNkZWZpbmUgbG9nKGZv
cm1hdCwgLi4uKSBcCiAgICAgZGF0YUxvZ0YoZm9ybWF0LCAjI19fVkFfQVJHU19fKQogICAgIAot
I2VuZGlmIC8vIFVTRShPU19MT0cpCisvLyNlbmRpZiAvLyBVU0UoT1NfTE9HKQogCiBzdHJ1Y3Qg
U2lnbmFsQ29udGV4dCB7CiBwcml2YXRlOgpAQCAtMTU4LDcgKzE1OCw5IEBAIHB1YmxpYzoKIHN0
YXRpYyB2b2lkIGluc3RhbGxDcmFzaEhhbmRsZXIoKQogewogI2lmIENQVShYODZfNjQpIHx8IENQ
VShBUk02NCkKKyAgICBkYXRhTG9nTG4oImluc3RhbGxpbmcgc2lnaWxsIGNyYXNoIGhhbmRsZXIi
KTsKICAgICBpbnN0YWxsU2lnbmFsSGFuZGxlcihTaWduYWw6OklsbCwgW10gKFNpZ25hbCwgU2ln
SW5mbyYsIFBsYXRmb3JtUmVnaXN0ZXJzJiByZWdpc3RlcnMpIHsKKyAgICAgICAgZGF0YUxvZ0xu
KCJzaWdpbGwgc2lnbmFsIGNhbGxlZCIpOwogICAgICAgICBhdXRvIHNpZ25hbENvbnRleHQgPSBT
aWduYWxDb250ZXh0Ojp0cnlDcmVhdGUocmVnaXN0ZXJzKTsKICAgICAgICAgaWYgKCFzaWduYWxD
b250ZXh0KQogICAgICAgICAgICAgcmV0dXJuIFNpZ25hbEFjdGlvbjo6Tm90SGFuZGxlZDsKSW5k
ZXg6IFNvdXJjZS9XVEYvd3RmL01ldGFBbGxvY2F0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XVEYvd3RmL01ldGFBbGxvY2F0b3IuY3BwCShyZXZpc2lvbiAyNTc4NjYpCisrKyBTb3VyY2Uv
V1RGL3d0Zi9NZXRhQWxsb2NhdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTQsMjIgKzU0LDIx
IEBAIE1ldGFBbGxvY2F0b3I6On5NZXRhQWxsb2NhdG9yKCkKICNlbmRpZgogfQogCi12b2lkIE1l
dGFBbGxvY2F0b3JUcmFja2VyOjpub3RpZnkoTWV0YUFsbG9jYXRvckhhbmRsZSogaGFuZGxlKQor
dm9pZCBNZXRhQWxsb2NhdG9yVHJhY2tlcjo6bm90aWZ5KE1ldGFBbGxvY2F0b3JIYW5kbGUmIGhh
bmRsZSkKIHsKLSAgICBtX2FsbG9jYXRpb25zLmluc2VydChoYW5kbGUpOworICAgIG1fYWxsb2Nh
dGlvbnMuaW5zZXJ0KCZoYW5kbGUpOwogfQogCi12b2lkIE1ldGFBbGxvY2F0b3JUcmFja2VyOjpy
ZWxlYXNlKE1ldGFBbGxvY2F0b3JIYW5kbGUqIGhhbmRsZSkKK3ZvaWQgTWV0YUFsbG9jYXRvclRy
YWNrZXI6OnJlbGVhc2UoTWV0YUFsbG9jYXRvckhhbmRsZSYgaGFuZGxlKQogewotICAgIG1fYWxs
b2NhdGlvbnMucmVtb3ZlKGhhbmRsZSk7CisgICAgbV9hbGxvY2F0aW9ucy5yZW1vdmUoJmhhbmRs
ZSk7CiB9CiAKLUFMV0FZU19JTkxJTkUgdm9pZCBNZXRhQWxsb2NhdG9yOjpyZWxlYXNlKE1ldGFB
bGxvY2F0b3JIYW5kbGUqIGhhbmRsZSkKK3ZvaWQgTWV0YUFsbG9jYXRvcjo6cmVsZWFzZShjb25z
dCBMb2NrSG9sZGVyJiwgTWV0YUFsbG9jYXRvckhhbmRsZSYgaGFuZGxlKQogewotICAgIExvY2tI
b2xkZXIgbG9ja2VyKCZtX2xvY2spOwotICAgIGlmIChoYW5kbGUtPnNpemVJbkJ5dGVzKCkpIHsK
LSAgICAgICAgdm9pZCogc3RhcnQgPSBoYW5kbGUtPnN0YXJ0KCkudW50YWdnZWRQdHIoKTsKLSAg
ICAgICAgc2l6ZV90IHNpemVJbkJ5dGVzID0gaGFuZGxlLT5zaXplSW5CeXRlcygpOworICAgIGlm
IChoYW5kbGUuc2l6ZUluQnl0ZXMoKSkgeworICAgICAgICB2b2lkKiBzdGFydCA9IGhhbmRsZS5z
dGFydCgpLnVudGFnZ2VkUHRyKCk7CisgICAgICAgIHNpemVfdCBzaXplSW5CeXRlcyA9IGhhbmRs
ZS5zaXplSW5CeXRlcygpOwogICAgICAgICBkZWNyZW1lbnRQYWdlT2NjdXBhbmN5KHN0YXJ0LCBz
aXplSW5CeXRlcyk7CiAgICAgICAgIGFkZEZyZWVTcGFjZUZyb21SZWxlYXNlZEhhbmRsZShGcmVl
U3BhY2VQdHIoc3RhcnQpLCBzaXplSW5CeXRlcyk7CiAgICAgfQpAQCAtNzgsMjEgKzc3LDE5IEBA
IEFMV0FZU19JTkxJTkUgdm9pZCBNZXRhQWxsb2NhdG9yOjpyZWxlYXMKICAgICAgICAgbV90cmFj
a2VyLT5yZWxlYXNlKGhhbmRsZSk7CiB9CiAKLU1ldGFBbGxvY2F0b3JIYW5kbGU6Ok1ldGFBbGxv
Y2F0b3JIYW5kbGUoTWV0YUFsbG9jYXRvciogYWxsb2NhdG9yLCB2b2lkKiBzdGFydCwgc2l6ZV90
IHNpemVJbkJ5dGVzLCB2b2lkKiBvd25lclVJRCkKK01ldGFBbGxvY2F0b3JIYW5kbGU6Ok1ldGFB
bGxvY2F0b3JIYW5kbGUoTWV0YUFsbG9jYXRvciYgYWxsb2NhdG9yLCB2b2lkKiBzdGFydCwgc2l6
ZV90IHNpemVJbkJ5dGVzKQogICAgIDogbV9hbGxvY2F0b3IoYWxsb2NhdG9yKQogICAgICwgbV9z
dGFydChzdGFydCkKICAgICAsIG1fZW5kKHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KHN0YXJ0KSAr
IHNpemVJbkJ5dGVzKQotICAgICwgbV9vd25lclVJRChvd25lclVJRCkKIHsKLSAgICBBU1NFUlQo
YWxsb2NhdG9yKTsKICAgICBBU1NFUlQoc3RhcnQpOwogICAgIEFTU0VSVChzaXplSW5CeXRlcyk7
CiB9CiAKIE1ldGFBbGxvY2F0b3JIYW5kbGU6On5NZXRhQWxsb2NhdG9ySGFuZGxlKCkKIHsKLSAg
ICBBU1NFUlQobV9hbGxvY2F0b3IpOwotICAgIG1fYWxsb2NhdG9yLT5yZWxlYXNlKHRoaXMpOwor
ICAgIGF1dG8gbG9ja2VyID0gaG9sZExvY2soYWxsb2NhdG9yKCkubV9sb2NrKTsKKyAgICBhbGxv
Y2F0b3IoKS5yZWxlYXNlKGxvY2tlciwgKnRoaXMpOwogfQogCiB2b2lkIE1ldGFBbGxvY2F0b3JI
YW5kbGU6OnNocmluayhzaXplX3QgbmV3U2l6ZUluQnl0ZXMpCkBAIC0xMDAsOSArOTcsMTAgQEAg
dm9pZCBNZXRhQWxsb2NhdG9ySGFuZGxlOjpzaHJpbmsoc2l6ZV90IAogICAgIHNpemVfdCBzaXpl
SW5CeXRlcyA9IHRoaXMtPnNpemVJbkJ5dGVzKCk7CiAgICAgQVNTRVJUKG5ld1NpemVJbkJ5dGVz
IDw9IHNpemVJbkJ5dGVzKTsKIAotICAgIExvY2tIb2xkZXIgbG9ja2VyKCZtX2FsbG9jYXRvci0+
bV9sb2NrKTsKKyAgICBNZXRhQWxsb2NhdG9yJiBhbGxvY2F0b3IgPSB0aGlzLT5hbGxvY2F0b3Io
KTsKKyAgICBMb2NrSG9sZGVyIGxvY2tlcigmYWxsb2NhdG9yLm1fbG9jayk7CiAKLSAgICBuZXdT
aXplSW5CeXRlcyA9IG1fYWxsb2NhdG9yLT5yb3VuZFVwKG5ld1NpemVJbkJ5dGVzKTsKKyAgICBu
ZXdTaXplSW5CeXRlcyA9IGFsbG9jYXRvci5yb3VuZFVwKG5ld1NpemVJbkJ5dGVzKTsKICAgICAK
ICAgICBBU1NFUlQobmV3U2l6ZUluQnl0ZXMgPD0gc2l6ZUluQnl0ZXMpOwogCkBAIC0xMTMsMTEg
KzExMSwxMSBAQCB2b2lkIE1ldGFBbGxvY2F0b3JIYW5kbGU6OnNocmluayhzaXplX3QgCiAgICAg
c2l6ZV90IGZyZWVTaXplID0gc2l6ZUluQnl0ZXMgLSBuZXdTaXplSW5CeXRlczsKICAgICB1aW50
cHRyX3QgZnJlZUVuZCA9IGZyZWVTdGFydCArIGZyZWVTaXplOwogICAgIAotICAgIHVpbnRwdHJf
dCBmaXJzdENvbXBsZXRlbHlGcmVlUGFnZSA9IChmcmVlU3RhcnQgKyBtX2FsbG9jYXRvci0+bV9w
YWdlU2l6ZSAtIDEpICYgfihtX2FsbG9jYXRvci0+bV9wYWdlU2l6ZSAtIDEpOworICAgIHVpbnRw
dHJfdCBmaXJzdENvbXBsZXRlbHlGcmVlUGFnZSA9IChmcmVlU3RhcnQgKyBhbGxvY2F0b3IubV9w
YWdlU2l6ZSAtIDEpICYgfihhbGxvY2F0b3IubV9wYWdlU2l6ZSAtIDEpOwogICAgIGlmIChmaXJz
dENvbXBsZXRlbHlGcmVlUGFnZSA8IGZyZWVFbmQpCi0gICAgICAgIG1fYWxsb2NhdG9yLT5kZWNy
ZW1lbnRQYWdlT2NjdXBhbmN5KHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KGZpcnN0Q29tcGxldGVs
eUZyZWVQYWdlKSwgZnJlZVNpemUgLSAoZmlyc3RDb21wbGV0ZWx5RnJlZVBhZ2UgLSBmcmVlU3Rh
cnQpKTsKKyAgICAgICAgYWxsb2NhdG9yLmRlY3JlbWVudFBhZ2VPY2N1cGFuY3kocmVpbnRlcnBy
ZXRfY2FzdDx2b2lkKj4oZmlyc3RDb21wbGV0ZWx5RnJlZVBhZ2UpLCBmcmVlU2l6ZSAtIChmaXJz
dENvbXBsZXRlbHlGcmVlUGFnZSAtIGZyZWVTdGFydCkpOwogCi0gICAgbV9hbGxvY2F0b3ItPmFk
ZEZyZWVTcGFjZUZyb21SZWxlYXNlZEhhbmRsZShNZXRhQWxsb2NhdG9yOjpGcmVlU3BhY2VQdHIo
ZnJlZVN0YXJ0KSwgZnJlZVNpemUpOworICAgIGFsbG9jYXRvci5hZGRGcmVlU3BhY2VGcm9tUmVs
ZWFzZWRIYW5kbGUoTWV0YUFsbG9jYXRvcjo6RnJlZVNwYWNlUHRyKGZyZWVTdGFydCksIGZyZWVT
aXplKTsKIAogICAgIG1fZW5kID0gbV9zdGFydCArIG5ld1NpemVJbkJ5dGVzOwogfQpAQCAtMTI3
LDEzICsxMjUsMTMgQEAgdm9pZCBNZXRhQWxsb2NhdG9ySGFuZGxlOjpkdW1wKFByaW50U3RyZQog
ICAgIG91dC5wcmludChSYXdQb2ludGVyKHN0YXJ0KCkudW50YWdnZWRQdHIoKSksICIuLi4iLCBS
YXdQb2ludGVyKGVuZCgpLnVudGFnZ2VkUHRyKCkpKTsKIH0KIAotTWV0YUFsbG9jYXRvcjo6TWV0
YUFsbG9jYXRvcihzaXplX3QgYWxsb2NhdGlvbkdyYW51bGUsIHNpemVfdCBwYWdlU2l6ZSkKK01l
dGFBbGxvY2F0b3I6Ok1ldGFBbGxvY2F0b3IoTG9jayYgbG9jaywgc2l6ZV90IGFsbG9jYXRpb25H
cmFudWxlLCBzaXplX3QgcGFnZVNpemUpCiAgICAgOiBtX2FsbG9jYXRpb25HcmFudWxlKGFsbG9j
YXRpb25HcmFudWxlKQogICAgICwgbV9wYWdlU2l6ZShwYWdlU2l6ZSkKICAgICAsIG1fYnl0ZXNB
bGxvY2F0ZWQoMCkKICAgICAsIG1fYnl0ZXNSZXNlcnZlZCgwKQogICAgICwgbV9ieXRlc0NvbW1p
dHRlZCgwKQotICAgICwgbV90cmFja2VyKDApCisgICAgLCBtX2xvY2sobG9jaykKICNpZm5kZWYg
TkRFQlVHCiAgICAgLCBtX21hbGxvY0JhbGFuY2UoMCkKICNlbmRpZgpAQCAtMTU3LDEwICsxNTUs
OCBAQCBNZXRhQWxsb2NhdG9yOjpNZXRhQWxsb2NhdG9yKHNpemVfdCBhbGxvCiAgICAgQVNTRVJU
KHN0YXRpY19jYXN0PHNpemVfdD4oMSkgPDwgbV9sb2dBbGxvY2F0aW9uR3JhbnVsZSA9PSBtX2Fs
bG9jYXRpb25HcmFudWxlKTsKIH0KIAotUmVmUHRyPE1ldGFBbGxvY2F0b3JIYW5kbGU+IE1ldGFB
bGxvY2F0b3I6OmFsbG9jYXRlKHNpemVfdCBzaXplSW5CeXRlcywgdm9pZCogb3duZXJVSUQpCitS
ZWZQdHI8TWV0YUFsbG9jYXRvckhhbmRsZT4gTWV0YUFsbG9jYXRvcjo6YWxsb2NhdGUoY29uc3Qg
TG9ja0hvbGRlciYsIHNpemVfdCBzaXplSW5CeXRlcykKIHsKLSAgICBMb2NrSG9sZGVyIGxvY2tl
cigmbV9sb2NrKTsKLQogICAgIGlmICghc2l6ZUluQnl0ZXMpCiAgICAgICAgIHJldHVybiBudWxs
cHRyOwogICAgIApAQCAtMTk1LDE3ICsxOTEsMTYgQEAgUmVmUHRyPE1ldGFBbGxvY2F0b3JIYW5k
bGU+IE1ldGFBbGxvY2F0bwogICAgIG1fbnVtQWxsb2NhdGlvbnMrKzsKICNlbmRpZgogCi0gICAg
YXV0byBoYW5kbGUgPSBhZG9wdFJlZigqbmV3IE1ldGFBbGxvY2F0b3JIYW5kbGUodGhpcywgc3Rh
cnQudW50YWdnZWRQdHIoKSwgc2l6ZUluQnl0ZXMsIG93bmVyVUlEKSk7CisgICAgYXV0byBoYW5k
bGUgPSBhZG9wdFJlZigqbmV3IE1ldGFBbGxvY2F0b3JIYW5kbGUoKnRoaXMsIHN0YXJ0LnVudGFn
Z2VkUHRyKCksIHNpemVJbkJ5dGVzKSk7CiAKICAgICBpZiAoVU5MSUtFTFkoISFtX3RyYWNrZXIp
KQotICAgICAgICBtX3RyYWNrZXItPm5vdGlmeShoYW5kbGUucHRyKCkpOworICAgICAgICBtX3Ry
YWNrZXItPm5vdGlmeSgqaGFuZGxlLnB0cigpKTsKIAogICAgIHJldHVybiBoYW5kbGU7CiB9CiAK
LU1ldGFBbGxvY2F0b3I6OlN0YXRpc3RpY3MgTWV0YUFsbG9jYXRvcjo6Y3VycmVudFN0YXRpc3Rp
Y3MoKQorTWV0YUFsbG9jYXRvcjo6U3RhdGlzdGljcyBNZXRhQWxsb2NhdG9yOjpjdXJyZW50U3Rh
dGlzdGljcyhjb25zdCBMb2NrSG9sZGVyJikKIHsKLSAgICBMb2NrSG9sZGVyIGxvY2tlcigmbV9s
b2NrKTsKICAgICBTdGF0aXN0aWNzIHJlc3VsdDsKICAgICByZXN1bHQuYnl0ZXNBbGxvY2F0ZWQg
PSBtX2J5dGVzQWxsb2NhdGVkOwogICAgIHJlc3VsdC5ieXRlc1Jlc2VydmVkID0gbV9ieXRlc1Jl
c2VydmVkOwpJbmRleDogU291cmNlL1dURi93dGYvTWV0YUFsbG9jYXRvci5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XVEYvd3RmL01ldGFBbGxvY2F0b3IuaAkocmV2aXNpb24gMjU3ODY2KQorKysg
U291cmNlL1dURi93dGYvTWV0YUFsbG9jYXRvci5oCSh3b3JraW5nIGNvcHkpCkBAIC00NCwxNSAr
NDQsMTUgQEAgbmFtZXNwYWNlIFdURiB7CiBjbGFzcyBNZXRhQWxsb2NhdG9yVHJhY2tlciB7CiAg
ICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CiBwdWJsaWM6Ci0gICAgdm9pZCBub3RpZnkoTWV0
YUFsbG9jYXRvckhhbmRsZSopOwotICAgIHZvaWQgcmVsZWFzZShNZXRhQWxsb2NhdG9ySGFuZGxl
Kik7CisgICAgdm9pZCBub3RpZnkoTWV0YUFsbG9jYXRvckhhbmRsZSYpOworICAgIHZvaWQgcmVs
ZWFzZShNZXRhQWxsb2NhdG9ySGFuZGxlJik7CiAKICAgICBNZXRhQWxsb2NhdG9ySGFuZGxlKiBm
aW5kKHZvaWQqIGFkZHJlc3MpCiAgICAgewogICAgICAgICBNZXRhQWxsb2NhdG9ySGFuZGxlKiBo
YW5kbGUgPSBtX2FsbG9jYXRpb25zLmZpbmRHcmVhdGVzdExlc3NUaGFuT3JFcXVhbChhZGRyZXNz
KTsKLSAgICAgICAgaWYgKGhhbmRsZSAmJiBhZGRyZXNzIDwgaGFuZGxlLT5lbmQoKS51bnRhZ2dl
ZFB0cigpKQorICAgICAgICBpZiAoaGFuZGxlICYmIGhhbmRsZS0+c3RhcnQoKS51bnRhZ2dlZFB0
cigpIDw9IGFkZHJlc3MgJiYgYWRkcmVzcyA8IGhhbmRsZS0+ZW5kKCkudW50YWdnZWRQdHIoKSkK
ICAgICAgICAgICAgIHJldHVybiBoYW5kbGU7Ci0gICAgICAgIHJldHVybiAwOworICAgICAgICBy
ZXR1cm4gbnVsbHB0cjsKICAgICB9CiAKICAgICBSZWRCbGFja1RyZWU8TWV0YUFsbG9jYXRvckhh
bmRsZSwgdm9pZCo+IG1fYWxsb2NhdGlvbnM7CkBAIC02NCwxNyArNjQsMjIgQEAgY2xhc3MgTWV0
YUFsbG9jYXRvciB7CiBwdWJsaWM6CiAgICAgdXNpbmcgRnJlZVNwYWNlUHRyID0gTWV0YUFsbG9j
YXRvclB0cjxGcmVlU3BhY2VQdHJUYWc+OwogCi0gICAgV1RGX0VYUE9SVF9QUklWQVRFIE1ldGFB
bGxvY2F0b3Ioc2l6ZV90IGFsbG9jYXRpb25HcmFudWxlLCBzaXplX3QgcGFnZVNpemUgPSBXVEY6
OnBhZ2VTaXplKCkpOworICAgIFdURl9FWFBPUlRfUFJJVkFURSBNZXRhQWxsb2NhdG9yKExvY2sm
LCBzaXplX3QgYWxsb2NhdGlvbkdyYW51bGUsIHNpemVfdCBwYWdlU2l6ZSA9IFdURjo6cGFnZVNp
emUoKSk7CiAgICAgCiAgICAgV1RGX0VYUE9SVF9QUklWQVRFIHZpcnR1YWwgfk1ldGFBbGxvY2F0
b3IoKTsKICAgICAKLSAgICBXVEZfRVhQT1JUX1BSSVZBVEUgUmVmUHRyPE1ldGFBbGxvY2F0b3JI
YW5kbGU+IGFsbG9jYXRlKHNpemVfdCBzaXplSW5CeXRlcywgdm9pZCogb3duZXJVSUQpOworICAg
IFJlZlB0cjxNZXRhQWxsb2NhdG9ySGFuZGxlPiBhbGxvY2F0ZShzaXplX3Qgc2l6ZUluQnl0ZXMp
CisgICAgeworICAgICAgICBhdXRvIGxvY2tlciA9IGhvbGRMb2NrKG1fbG9jayk7CisgICAgICAg
IHJldHVybiBhbGxvY2F0ZShsb2NrZXIsIHNpemVJbkJ5dGVzKTsKKyAgICB9CisgICAgV1RGX0VY
UE9SVF9QUklWQVRFIFJlZlB0cjxNZXRhQWxsb2NhdG9ySGFuZGxlPiBhbGxvY2F0ZShjb25zdCBM
b2NrSG9sZGVyJiwgc2l6ZV90IHNpemVJbkJ5dGVzKTsKIAogICAgIHZvaWQgdHJhY2tBbGxvY2F0
aW9ucyhNZXRhQWxsb2NhdG9yVHJhY2tlciogdHJhY2tlcikKICAgICB7CiAgICAgICAgIG1fdHJh
Y2tlciA9IHRyYWNrZXI7CiAgICAgfQotICAgIAorCiAgICAgLy8gTm9uLWF0b21pYyBtZXRob2Rz
IGZvciBnZXR0aW5nIGFsbG9jYXRvciBzdGF0aXN0aWNzLgogICAgIHNpemVfdCBieXRlc0FsbG9j
YXRlZCgpIHsgcmV0dXJuIG1fYnl0ZXNBbGxvY2F0ZWQ7IH0KICAgICBzaXplX3QgYnl0ZXNSZXNl
cnZlZCgpIHsgcmV0dXJuIG1fYnl0ZXNSZXNlcnZlZDsgfQpAQCAtODcsNyArOTIsMTIgQEAgcHVi
bGljOgogICAgICAgICBzaXplX3QgYnl0ZXNSZXNlcnZlZDsKICAgICAgICAgc2l6ZV90IGJ5dGVz
Q29tbWl0dGVkOwogICAgIH07Ci0gICAgV1RGX0VYUE9SVF9QUklWQVRFIFN0YXRpc3RpY3MgY3Vy
cmVudFN0YXRpc3RpY3MoKTsKKyAgICBTdGF0aXN0aWNzIGN1cnJlbnRTdGF0aXN0aWNzKCkKKyAg
ICB7CisgICAgICAgIGF1dG8gbG9ja2VyID0gaG9sZExvY2sobV9sb2NrKTsKKyAgICAgICAgcmV0
dXJuIGN1cnJlbnRTdGF0aXN0aWNzKGxvY2tlcik7CisgICAgfQorICAgIFdURl9FWFBPUlRfUFJJ
VkFURSBTdGF0aXN0aWNzIGN1cnJlbnRTdGF0aXN0aWNzKGNvbnN0IExvY2tIb2xkZXImKTsKIAog
ICAgIC8vIEFkZCBtb3JlIGZyZWUgc3BhY2UgdG8gdGhlIGFsbG9jYXRvci4gQ2FsbCB0aGlzIGRp
cmVjdGx5IGZyb20KICAgICAvLyB0aGUgY29uc3RydWN0b3IgaWYgeW91IHdpc2ggdG8gb3BlcmF0
ZSB0aGUgYWxsb2NhdG9yIHdpdGhpbiBhCkBAIC05OCw3ICsxMDgsNiBAQCBwdWJsaWM6CiAgICAg
Ly8gYnVpbGRzLgogICAgIFdURl9FWFBPUlRfUFJJVkFURSBzaXplX3QgZGVidWdGcmVlU3BhY2VT
aXplKCk7CiAKLSAgICBMb2NrJiBnZXRMb2NrKCkgeyByZXR1cm4gbV9sb2NrOyB9CiAgICAgV1RG
X0VYUE9SVF9QUklWQVRFIGJvb2wgaXNJbkFsbG9jYXRlZE1lbW9yeShjb25zdCBBYnN0cmFjdExv
Y2tlciYsIHZvaWQqIGFkZHJlc3MpOwogICAgIAogI2lmIEVOQUJMRShNRVRBX0FMTE9DQVRPUl9Q
Uk9GSUxFKQpAQCAtMTA3LDYgKzExNiwxMSBAQCBwdWJsaWM6CiAgICAgdm9pZCBkdW1wUHJvZmls
ZSgpIHsgfQogI2VuZGlmCiAKKyAgICBNZXRhQWxsb2NhdG9ySGFuZGxlKiBmaW5kKHZvaWQqIGFk
ZHJlc3MpCisgICAgeworICAgICAgICByZXR1cm4gbV90cmFja2VyLT5maW5kKGFkZHJlc3MpOwor
ICAgIH0KKwogcHJvdGVjdGVkOgogICAgIAogICAgIC8vIEFsbG9jYXRlIG5ldyB2aXJ0dWFsIHNw
YWNlLCBidXQgZG9uJ3QgY29tbWl0LiBUaGlzIG1heSByZXR1cm4gbW9yZQpAQCAtMTIzLDYgKzEz
Nyw4IEBAIHByb3RlY3RlZDoKICAgICAvLyBkZXN0cnVjdGlvbiwgaW4gcGFydCBiZWNhdXNlIGEg
TWV0YUFsbG9jYXRvciBjYW5ub3QgZGllIHNvIGxvbmcKICAgICAvLyBhcyB0aGVyZSBhcmUgSGFu
ZGxlcyB0aGF0IHJlZmVyIHRvIGl0LgogCisgICAgLy8gUmVsZWFzZSBhIE1ldGFBbGxvY2F0b3JI
YW5kbGUuCisgICAgdmlydHVhbCB2b2lkIHJlbGVhc2UoY29uc3QgTG9ja0hvbGRlciYsIE1ldGFB
bGxvY2F0b3JIYW5kbGUmKTsKIHByaXZhdGU6CiAgICAgCiAgICAgZnJpZW5kIGNsYXNzIE1ldGFB
bGxvY2F0b3JIYW5kbGU7CkBAIC0xNTAsOSArMTY2LDYgQEAgcHJpdmF0ZToKICAgICAgICAgRnJl
ZVNwYWNlUHRyIG1fZW5kOwogICAgIH07CiAgICAgdHlwZWRlZiBSZWRCbGFja1RyZWU8RnJlZVNw
YWNlTm9kZSwgc2l6ZV90PiBUcmVlOwotCi0gICAgLy8gUmVsZWFzZSBhIE1ldGFBbGxvY2F0b3JI
YW5kbGUuCi0gICAgdm9pZCByZWxlYXNlKE1ldGFBbGxvY2F0b3JIYW5kbGUqKTsKICAgICAKICAg
ICAvLyBSZW1vdmUgZnJlZSBzcGFjZSBmcm9tIHRoZSBhbGxvY2F0b3IuIFRoaXMgaXMgZWZmZWN0
aXZlbHkKICAgICAvLyB0aGUgYWxsb2NhdGUoKSBmdW5jdGlvbiwgZXhjZXB0IHRoYXQgaXQgZG9l
cyBub3QgbWFyayB0aGUKQEAgLTE5Myw5ICsyMDYsOSBAQCBwcml2YXRlOgogICAgIHNpemVfdCBt
X2J5dGVzUmVzZXJ2ZWQ7CiAgICAgc2l6ZV90IG1fYnl0ZXNDb21taXR0ZWQ7CiAgICAgCi0gICAg
TG9jayBtX2xvY2s7CisgICAgTG9jayYgbV9sb2NrOwogCi0gICAgTWV0YUFsbG9jYXRvclRyYWNr
ZXIqIG1fdHJhY2tlcjsKKyAgICBNZXRhQWxsb2NhdG9yVHJhY2tlciogbV90cmFja2VyIHsgbnVs
bHB0ciB9OwogCiAjaWZuZGVmIE5ERUJVRwogICAgIHNpemVfdCBtX21hbGxvY0JhbGFuY2U7Cklu
ZGV4OiBTb3VyY2UvV1RGL3d0Zi9NZXRhQWxsb2NhdG9ySGFuZGxlLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dURi93dGYvTWV0YUFsbG9jYXRvckhhbmRsZS5oCShyZXZpc2lvbiAyNTc4NjYpCisr
KyBTb3VyY2UvV1RGL3d0Zi9NZXRhQWxsb2NhdG9ySGFuZGxlLmgJKHdvcmtpbmcgY29weSkKQEAg
LTQyLDcgKzQyLDcgQEAgREVDTEFSRV9BTExPQ0FUT1JfV0lUSF9IRUFQX0lERU5USUZJRVIoTQog
Y2xhc3MgTWV0YUFsbG9jYXRvckhhbmRsZSA6IHB1YmxpYyBUaHJlYWRTYWZlUmVmQ291bnRlZDxN
ZXRhQWxsb2NhdG9ySGFuZGxlPiwgcHVibGljIFJlZEJsYWNrVHJlZTxNZXRhQWxsb2NhdG9ySGFu
ZGxlLCB2b2lkKj46Ok5vZGUgewogICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEX1dJVEhfSEVB
UF9JREVOVElGSUVSKE1ldGFBbGxvY2F0b3JIYW5kbGUpOwogcHJpdmF0ZToKLSAgICBNZXRhQWxs
b2NhdG9ySGFuZGxlKE1ldGFBbGxvY2F0b3IqLCB2b2lkKiBzdGFydCwgc2l6ZV90IHNpemVJbkJ5
dGVzLCB2b2lkKiBvd25lclVJRCk7CisgICAgTWV0YUFsbG9jYXRvckhhbmRsZShNZXRhQWxsb2Nh
dG9yJiwgdm9pZCogc3RhcnQsIHNpemVfdCBzaXplSW5CeXRlcyk7CiAKIHB1YmxpYzoKICAgICB1
c2luZyBNZW1vcnlQdHIgPSBNZXRhQWxsb2NhdG9yUHRyPEhhbmRsZU1lbW9yeVB0clRhZz47CkBA
IC04NiwyMiArODYsMTEgQEAgcHVibGljOgogICAgICAgICAKICAgICBXVEZfRVhQT1JUX1BSSVZB
VEUgdm9pZCBzaHJpbmsoc2l6ZV90IG5ld1NpemVJbkJ5dGVzKTsKICAgICAKLSAgICBib29sIGlz
TWFuYWdlZCgpCisgICAgTWV0YUFsbG9jYXRvciYgYWxsb2NhdG9yKCkKICAgICB7Ci0gICAgICAg
IHJldHVybiAhIW1fYWxsb2NhdG9yOwotICAgIH0KLSAgICAgICAgCi0gICAgTWV0YUFsbG9jYXRv
ciogYWxsb2NhdG9yKCkKLSAgICB7Ci0gICAgICAgIEFTU0VSVChtX2FsbG9jYXRvcik7CiAgICAg
ICAgIHJldHVybiBtX2FsbG9jYXRvcjsKICAgICB9CiAKLSAgICB2b2lkKiBvd25lclVJRCgpCi0g
ICAgewotICAgICAgICByZXR1cm4gbV9vd25lclVJRDsKLSAgICB9Ci0KICAgICB2b2lkKiBrZXko
KQogICAgIHsKICAgICAgICAgcmV0dXJuIG1fc3RhcnQudW50YWdnZWRQdHIoKTsKQEAgLTExMiwx
MCArMTAxLDkgQEAgcHVibGljOgogcHJpdmF0ZToKICAgICBmcmllbmQgY2xhc3MgTWV0YUFsbG9j
YXRvcjsKICAgICAKLSAgICBNZXRhQWxsb2NhdG9yKiBtX2FsbG9jYXRvcjsKKyAgICBNZXRhQWxs
b2NhdG9yJiBtX2FsbG9jYXRvcjsKICAgICBNZW1vcnlQdHIgbV9zdGFydDsKICAgICBNZW1vcnlQ
dHIgbV9lbmQ7Ci0gICAgdm9pZCogbV9vd25lclVJRDsKIH07CiAKIH0KSW5kZXg6IFNvdXJjZS9X
VEYvd3RmL1JlZEJsYWNrVHJlZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL1JlZEJs
YWNrVHJlZS5oCShyZXZpc2lvbiAyNTc4NjYpCisrKyBTb3VyY2UvV1RGL3d0Zi9SZWRCbGFja1Ry
ZWUuaAkod29ya2luZyBjb3B5KQpAQCAtMzI0LDYgKzMyNCwyNiBAQCBwdWJsaWM6CiAgICAgICAg
IH0KICAgICAgICAgcmV0dXJuIGJlc3Q7CiAgICAgfQorCisgICAgdGVtcGxhdGUgPHR5cGVuYW1l
IEZ1bmN0aW9uPgorICAgIHZvaWQgaXRlcmF0ZShGdW5jdGlvbiBmdW5jdGlvbikKKyAgICB7Cisg
ICAgICAgIGlmICghbV9yb290KQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIFZlY3Rv
cjxOb2RlVHlwZSosIDE2PiB0b0l0ZXJhdGU7CisgICAgICAgIHRvSXRlcmF0ZS5hcHBlbmQobV9y
b290KTsKKyAgICAgICAgd2hpbGUgKHRvSXRlcmF0ZS5zaXplKCkpIHsKKyAgICAgICAgICAgIE5v
ZGVUeXBlJiBjdXJyZW50ID0gKnRvSXRlcmF0ZS50YWtlTGFzdCgpOworICAgICAgICAgICAgYm9v
bCBpdGVyYXRlTGVmdCA9IGZhbHNlOworICAgICAgICAgICAgYm9vbCBpdGVyYXRlUmlnaHQgPSBm
YWxzZTsKKyAgICAgICAgICAgIGZ1bmN0aW9uKGN1cnJlbnQsIGl0ZXJhdGVMZWZ0LCBpdGVyYXRl
UmlnaHQpOworICAgICAgICAgICAgaWYgKGl0ZXJhdGVMZWZ0ICYmIGN1cnJlbnQubGVmdCgpKQor
ICAgICAgICAgICAgICAgIHRvSXRlcmF0ZS5hcHBlbmQoY3VycmVudC5sZWZ0KCkpOworICAgICAg
ICAgICAgaWYgKGl0ZXJhdGVSaWdodCAmJiBjdXJyZW50LnJpZ2h0KCkpCisgICAgICAgICAgICAg
ICAgdG9JdGVyYXRlLmFwcGVuZChjdXJyZW50LnJpZ2h0KCkpOworICAgICAgICB9CisgICAgfQog
ICAgIAogICAgIE5vZGVUeXBlKiBmaXJzdCgpIGNvbnN0CiAgICAgewpJbmRleDogU291cmNlL1dU
Ri93dGYvU3RkTGliRXh0cmFzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvU3RkTGli
RXh0cmFzLmgJKHJldmlzaW9uIDI1Nzg2NikKKysrIFNvdXJjZS9XVEYvd3RmL1N0ZExpYkV4dHJh
cy5oCSh3b3JraW5nIGNvcHkpCkBAIC00ODksNiArNDg5LDE5IEBAIEFMV0FZU19JTkxJTkUgZGVj
bHR5cGUoYXV0bykgbWFrZVVuaXF1ZVcKICAgICByZXR1cm4gc3RkOjptYWtlX3VuaXF1ZTxUPihz
dGQ6OmZvcndhcmQ8QXJncz4oYXJncykuLi4pOwogfQogCit0ZW1wbGF0ZSA8dHlwZW5hbWUgUmVz
dWx0VHlwZSwgc2l6ZV90Li4uIElzLCB0eXBlbmFtZSAuLi5BcmdzPgorY29uc3RleHByIGF1dG8g
Y29uc3RydWN0Rml4ZWRTaXplQXJyYXlXaXRoQXJndW1lbnRzSW1wbChzdGQ6OmluZGV4X3NlcXVl
bmNlPElzLi4uPiwgQXJncyYmLi4uIGFyZ3MpIC0+IHN0ZDo6YXJyYXk8UmVzdWx0VHlwZSwgc2l6
ZW9mLi4uKElzKT4KK3sKKyAgICByZXR1cm4geyAoKHZvaWQpSXMsIFJlc3VsdFR5cGUgeyBhcmdz
Li4uIH0pLi4uIH07Cit9CisKKy8vIENvbnN0cnVjdCBhbiBzdGQ6OmFycmF5IHdpdGggTiBlbGVt
ZW50cyBvZiBSZXN1bHRUeXBlLCBwYXNzaW5nIEFyZ3MgdG8gZWFjaCBvZiB0aGUgTiBjb25zdHJ1
Y3RvcnMuCit0ZW1wbGF0ZTx0eXBlbmFtZSBSZXN1bHRUeXBlLCBzaXplX3QgTiwgdHlwZW5hbWUg
Li4uQXJncz4KK2NvbnN0ZXhwciBhdXRvIGNvbnN0cnVjdEZpeGVkU2l6ZUFycmF5V2l0aEFyZ3Vt
ZW50cyhBcmdzJiYuLi4gYXJncykgLT4gZGVjbHR5cGUoYXV0bykKK3sKKyAgICBhdXRvIHR1cGxl
ID0gc3RkOjptYWtlX2luZGV4X3NlcXVlbmNlPE4+KCk7CisgICAgcmV0dXJuIGNvbnN0cnVjdEZp
eGVkU2l6ZUFycmF5V2l0aEFyZ3VtZW50c0ltcGw8UmVzdWx0VHlwZT4odHVwbGUsIHN0ZDo6Zm9y
d2FyZDxBcmdzPihhcmdzKS4uLik7Cit9CiAKIH0gLy8gbmFtZXNwYWNlIFdURgogCkBAIC01MTQs
MyArNTI3LDQgQEAgdXNpbmcgV1RGOjpzYWZlQ2FzdDsKIHVzaW5nIFdURjo6dHJ5QmluYXJ5U2Vh
cmNoOwogdXNpbmcgV1RGOjptYWtlVW5pcXVlOwogdXNpbmcgV1RGOjptYWtlVW5pcXVlV2l0aG91
dEZhc3RNYWxsb2NDaGVjazsKK3VzaW5nIFdURjo6Y29uc3RydWN0Rml4ZWRTaXplQXJyYXlXaXRo
QXJndW1lbnRzOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>393184</attachid>
            <date>2020-03-10 16:04:51 -0700</date>
            <delta_ts>2020-03-12 13:07:53 -0700</delta_ts>
            <desc>WIP</desc>
            <filename>c-backup.diff</filename>
            <type>text/plain</type>
            <size>85051</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9Tb3VyY2VzLnR4dAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvU291cmNlcy50eHQJKHJldmlzaW9uIDI1Nzg2NikKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9Tb3VyY2VzLnR4dAkod29ya2luZyBjb3B5KQpAQCAtOTk0LDgg
Kzk5NCw2IEBAIHJ1bnRpbWUvV2lkZW5pbmdOdW1iZXJQcmVkaWN0aW9uRnV6emVyQWcKIEpTQ0J1
aWx0aW5zLmNwcAogCiB0b29scy9DZWxsTGlzdC5jcHAKLXRvb2xzL0NvZGVQcm9maWxlLmNwcAot
dG9vbHMvQ29kZVByb2ZpbGluZy5jcHAKIHRvb2xzL0NvbXBpbGVyVGltaW5nU2NvcGUuY3BwCiB0
b29scy9GdW5jdGlvbk92ZXJyaWRlcy5jcHAKIHRvb2xzL0Z1bmN0aW9uV2hpdGVsaXN0LmNwcApJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9q
ZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3Jp
cHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDI1Nzg2NikKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhw
cm9qCSh3b3JraW5nIGNvcHkpCkBAIC00MDcxLDggKzQwNzEsNiBAQAogCQk4NjAxNjFFMDBGM0E4
M0MxMDBGODQ3MTAgLyogTWFjcm9Bc3NlbWJsZXJYODYuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gTWFjcm9Bc3NlbWJsZXJYODYuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJODYwMTYxRTEwRjNBODNDMTAwRjg0NzEwIC8qIE1hY3JvQXNzZW1ibGVyWDg2XzY0Lmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE1hY3JvQXNzZW1ibGVyWDg2XzY0Lmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTg2MDE2MUUyMEYzQTgzQzEwMEY4NDcxMCAv
KiBNYWNyb0Fzc2VtYmxlclg4NkNvbW1vbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBNYWNyb0Fzc2VtYmxlclg4NkNvbW1vbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwotCQk4NjAzQ0VGMjE0Qzc1NDY0MDBBRTU5RTMgLyogQ29kZVByb2ZpbGluZy5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBDb2RlUHJvZmlsaW5nLmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJODYwM0NFRjMxNEM3NTQ2NDAwQUU1OUUzIC8qIENvZGVQ
cm9maWxpbmcuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ29kZVByb2ZpbGlu
Zy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk4NjA0RjRGMjE0M0E2QzQ0MDBCMjk1
RjUgLyogQ2hhbmdlTG9nICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZp
bGVUeXBlID0gdGV4dDsgbGluZUVuZGluZyA9IDA7IHBhdGggPSBDaGFuZ2VMb2c7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTg2MDZEREU5MThEQTQ0QUIwMEEzODNEMCAvKiBJZGVudGlm
aWVySW5saW5lcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJZGVudGlmaWVy
SW5saW5lcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk4NjEyRTRDQjE1MjI5MTg0
MDBDODM2QkUgLyogTWF0Y2hSZXN1bHQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gTWF0Y2hSZXN1bHQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTQxMTgsOCAr
NDExNiw2IEBACiAJCTg2QUREMTQzMEZEREVBOTgwMDA2RkZDQyAvKiBBUk12N1JlZ2lzdGVycy5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBBUk12N1JlZ2lzdGVycy5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk4NkFERDE0NDBGRERFQTk4MDAwNkVFQzIgLyogTWFj
cm9Bc3NlbWJsZXJBUk12Ny5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBNYWNy
b0Fzc2VtYmxlckFSTXY3Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTg2QjU4MjJD
MTREMjJGNUYwMEE5QzMwNiAvKiBQcm9maWxlVHJlZU5vZGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gUHJvZmlsZVRyZWVOb2RlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07Ci0JCTg2QjU4MjJFMTREMjM3M0IwMEE5QzMwNiAvKiBDb2RlUHJvZmlsZS5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBDb2RlUHJvZmlsZS5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTg2QjU4MjJGMTREMjM3M0IwMEE5QzMwNiAvKiBDb2RlUHJv
ZmlsZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBDb2RlUHJvZmlsZS5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk4NkI1ODI2QTE0RDM1RDUxMDBBOUMzMDYgLyog
VGllcmVkTU1hcEFycmF5LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFRpZXJl
ZE1NYXBBcnJheS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk4NkJGNjQyQTE0OERC
MkI1MDA0REUzNkEgLyogSW50cmluc2ljLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IEludHJpbnNpYy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk4NkMzNkVFOTBF
RTEyODlEMDBCM0RGNTkgLyogTWFjcm9Bc3NlbWJsZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gTWFjcm9Bc3NlbWJsZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
QEAgLTc2NzYsMTAgKzc2NzIsNiBAQAogCQkJCUZFMUJEMDFCMUU3MjAwMjEwMDEzNEJDOSAvKiBD
ZWxsTGlzdC5jcHAgKi8sCiAJCQkJRkUxQkQwMUMxRTcyMDAyMTAwMTM0QkM5IC8qIENlbGxMaXN0
LmggKi8sCiAJCQkJRkUxQkQwMjAxRTcyMDI3MDAwMTM0QkM5IC8qIENlbGxQcm9maWxlLmggKi8s
Ci0JCQkJODZCNTgyMkUxNEQyMzczQjAwQTlDMzA2IC8qIENvZGVQcm9maWxlLmNwcCAqLywKLQkJ
CQk4NkI1ODIyRjE0RDIzNzNCMDBBOUMzMDYgLyogQ29kZVByb2ZpbGUuaCAqLywKLQkJCQk4NjAz
Q0VGMjE0Qzc1NDY0MDBBRTU5RTMgLyogQ29kZVByb2ZpbGluZy5jcHAgKi8sCi0JCQkJODYwM0NF
RjMxNEM3NTQ2NDAwQUU1OUUzIC8qIENvZGVQcm9maWxpbmcuaCAqLywKIAkJCQkwRjRGMTFFNzIw
OUJDREExMDA3MDk2NTQgLyogQ29tcGlsZXJUaW1pbmdTY29wZS5jcHAgKi8sCiAJCQkJMEY0RjEx
RTYyMDlCQ0RBMTAwNzA5NjU0IC8qIENvbXBpbGVyVGltaW5nU2NvcGUuaCAqLywKIAkJCQlGRTRC
RkYyOTFBRDQ3NkU3MDAwODhGODcgLyogRnVuY3Rpb25PdmVycmlkZXMuY3BwICovLApJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9BUk02NEFzc2VtYmxlci5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvQVJNNjRBc3NlbWJsZXIuaAko
cmV2aXNpb24gMjU3ODY2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9BUk02
NEFzc2VtYmxlci5oCSh3b3JraW5nIGNvcHkpCkBAIC03ODMsMTIgKzc4Myw5IEBAIHB1YmxpYzoK
ICAgICAgICAgaW5zbihkYXRhUHJvY2Vzc2luZzJTb3VyY2UoREFUQVNJWkUsIHJtLCBEYXRhT3Bf
QVNSViwgcm4sIHJkKSk7CiAgICAgfQogCi0gICAgQUxXQVlTX0lOTElORSB2b2lkIGIoaW50MzJf
dCBvZmZzZXQgPSAwKQorICAgIEFMV0FZU19JTkxJTkUgdm9pZCBiKCkKICAgICB7Ci0gICAgICAg
IEFTU0VSVCghKG9mZnNldCAmIDMpKTsKLSAgICAgICAgb2Zmc2V0ID4+PSAyOwotICAgICAgICBB
U1NFUlQob2Zmc2V0ID09IChvZmZzZXQgPDwgNikgPj4gNik7Ci0gICAgICAgIGluc24odW5jb25k
aXRpb25hbEJyYW5jaEltbWVkaWF0ZShmYWxzZSwgb2Zmc2V0KSk7CisgICAgICAgIGluc24odW5j
b25kaXRpb25hbEJyYW5jaEltbWVkaWF0ZShmYWxzZSwgMCkpOwogICAgIH0KIAogICAgIEFMV0FZ
U19JTkxJTkUgdm9pZCBiX2NvbmQoQ29uZGl0aW9uIGNvbmQsIGludDMyX3Qgb2Zmc2V0ID0gMCkK
QEAgLTgzMSwxMSArODI4LDkgQEAgcHVibGljOgogICAgICAgICBpbnNuKGxvZ2ljYWxTaGlmdGVk
UmVnaXN0ZXIoREFUQVNJWkUsIHNldEZsYWdzID8gTG9naWNhbE9wX0FORFMgOiBMb2dpY2FsT3Bf
QU5ELCBzaGlmdCwgdHJ1ZSwgcm0sIGFtb3VudCwgcm4sIHJkKSk7CiAgICAgfQogCi0gICAgQUxX
QVlTX0lOTElORSB2b2lkIGJsKGludDMyX3Qgb2Zmc2V0ID0gMCkKKyAgICBBTFdBWVNfSU5MSU5F
IHZvaWQgYmwoKQogICAgIHsKLSAgICAgICAgQVNTRVJUKCEob2Zmc2V0ICYgMykpOwotICAgICAg
ICBvZmZzZXQgPj49IDI7Ci0gICAgICAgIGluc24odW5jb25kaXRpb25hbEJyYW5jaEltbWVkaWF0
ZSh0cnVlLCBvZmZzZXQpKTsKKyAgICAgICAgaW5zbih1bmNvbmRpdGlvbmFsQnJhbmNoSW1tZWRp
YXRlKHRydWUsIDApKTsKICAgICB9CiAKICAgICBBTFdBWVNfSU5MSU5FIHZvaWQgYmxyKFJlZ2lz
dGVySUQgcm4pCkBAIC0yNTgyLDYgKzI1NzcsMTMgQEAgcHVibGljOgogICAgIHsKICAgICAgICAg
aW50cHRyX3Qgb2Zmc2V0ID0gKHJlaW50ZXJwcmV0X2Nhc3Q8aW50cHRyX3Q+KHRvKSAtIHJlaW50
ZXJwcmV0X2Nhc3Q8aW50cHRyX3Q+KHdoZXJlKSkgPj4gMjsKICAgICAgICAgQVNTRVJUKHN0YXRp
Y19jYXN0PGludD4ob2Zmc2V0KSA9PSBvZmZzZXQpOworCisgICAgICAgIGlmICghaXNJbnQ8MjY+
KG9mZnNldCkpIHsKKyAgICAgICAgICAgIHRvID0gRXhlY3V0YWJsZUFsbG9jYXRvcjo6c2luZ2xl
dG9uKCkuZ2V0SnVtcElzbGFuZFRvKHdoZXJlLCB0byk7CisgICAgICAgICAgICBvZmZzZXQgPSAo
Yml0d2lzZV9jYXN0PGludHB0cl90Pih0bykgLSBiaXR3aXNlX2Nhc3Q8aW50cHRyX3Q+KHdoZXJl
KSkgPj4gMjsKKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKGlzSW50PDI2PihvZmZzZXQpKTsK
KyAgICAgICAgfQorCiAgICAgICAgIGludCBpbnNuID0gdW5jb25kaXRpb25hbEJyYW5jaEltbWVk
aWF0ZShmYWxzZSwgc3RhdGljX2Nhc3Q8aW50PihvZmZzZXQpKTsKICAgICAgICAgUkVMRUFTRV9B
U1NFUlQocm91bmRVcFRvTXVsdGlwbGVPZjxpbnN0cnVjdGlvblNpemU+KHdoZXJlKSA9PSB3aGVy
ZSk7CiAgICAgICAgIHBlcmZvcm1KSVRNZW1jcHkod2hlcmUsICZpbnNuLCBzaXplb2YoaW50KSk7
CkBAIC0yNzcxLDYgKzI3NzMsMjMgQEAgcHVibGljOgogICAgICAgICByZWxpbmtKdW1wT3JDYWxs
PEJyYW5jaFR5cGVfQ0FMTD4ocmVpbnRlcnByZXRfY2FzdDxpbnQqPihmcm9tKSAtIDEsIHJlaW50
ZXJwcmV0X2Nhc3Q8Y29uc3QgaW50Kj4oZnJvbSkgLSAxLCB0byk7CiAgICAgICAgIGNhY2hlRmx1
c2gocmVpbnRlcnByZXRfY2FzdDxpbnQqPihmcm9tKSAtIDEsIHNpemVvZihpbnQpKTsKICAgICB9
CisKKyAgICBzdGF0aWMgdm9pZCogcHJlcGFyZUZvckF0b21pY1JlbGlua0p1bXAodm9pZCogZnJv
bSwgdm9pZCogdG8pCisgICAgeworICAgICAgICBpbnRwdHJfdCBvZmZzZXQgPSAoYml0d2lzZV9j
YXN0PGludHB0cl90Pih0bykgLSBiaXR3aXNlX2Nhc3Q8aW50cHRyX3Q+KGZyb20pKSA+PiAyOwor
ICAgICAgICBBU1NFUlQoc3RhdGljX2Nhc3Q8aW50PihvZmZzZXQpID09IG9mZnNldCk7CisKKyAg
ICAgICAgaWYgKGlzSW50PDI2PihvZmZzZXQpKQorICAgICAgICAgICAgcmV0dXJuIHRvOworCisg
ICAgICAgIHJldHVybiBFeGVjdXRhYmxlQWxsb2NhdG9yOjpzaW5nbGV0b24oKS5nZXROZXdKdW1w
SXNsYW5kVG8oZnJvbSwgdG8pOworICAgIH0KKworICAgIHN0YXRpYyB2b2lkKiBwcmVwYXJlRm9y
QXRvbWljUmVsaW5rQ2FsbCh2b2lkKiBmcm9tLCB2b2lkKiB0bykKKyAgICB7CisgICAgICAgIGZy
b20gPSBzdGF0aWNfY2FzdDx2b2lkKj4oYml0d2lzZV9jYXN0PGludCo+KGZyb20pIC0gMSk7Cisg
ICAgICAgIHJldHVybiBwcmVwYXJlRm9yQXRvbWljUmVsaW5rSnVtcChmcm9tLCB0byk7CisgICAg
fQogICAgIAogICAgIHN0YXRpYyB2b2lkIHJlcGF0Y2hDb21wYWN0KHZvaWQqIHdoZXJlLCBpbnQz
Ml90IHZhbHVlKQogICAgIHsKQEAgLTI4NzIsNyArMjg5MSw3IEBAIHB1YmxpYzoKICAgICAgICAg
ICAgICAgICByZXR1cm4gTGlua0p1bXBDb25kaXRpb25EaXJlY3Q7CiAKICAgICAgICAgICAgIHJl
dHVybiBMaW5rSnVtcENvbmRpdGlvbjsKLSAgICAgICAgICAgIH0KKyAgICAgICAgfQogICAgICAg
ICBjYXNlIEp1bXBDb21wYXJlQW5kQnJhbmNoOiAgewogICAgICAgICAgICAgQVNTRVJUKGlzNEJ5
dGVBbGlnbmVkKGZyb20pKTsKICAgICAgICAgICAgIEFTU0VSVChpczRCeXRlQWxpZ25lZCh0bykp
OwpAQCAtMjk5NCw5ICszMDEzLDE1IEBAIHByb3RlY3RlZDoKICAgICAgICAgQVNTRVJUKCEocmVp
bnRlcnByZXRfY2FzdDxpbnRwdHJfdD4odG8pICYgMykpOwogICAgICAgICBhc3NlcnRJc05vdFRh
Z2dlZCh0byk7CiAgICAgICAgIGFzc2VydElzTm90VGFnZ2VkKGZyb21JbnN0cnVjdGlvbik7Ci0g
ICAgICAgIGludHB0cl90IG9mZnNldCA9IChyZWludGVycHJldF9jYXN0PGludHB0cl90Pih0bykg
LSByZWludGVycHJldF9jYXN0PGludHB0cl90Pihmcm9tSW5zdHJ1Y3Rpb24pKSA+PiAyOworICAg
ICAgICBpbnRwdHJfdCBvZmZzZXQgPSAoYml0d2lzZV9jYXN0PGludHB0cl90Pih0bykgLSBiaXR3
aXNlX2Nhc3Q8aW50cHRyX3Q+KGZyb21JbnN0cnVjdGlvbikpID4+IDI7CiAgICAgICAgIEFTU0VS
VChzdGF0aWNfY2FzdDxpbnQ+KG9mZnNldCkgPT0gb2Zmc2V0KTsKIAorICAgICAgICBpZiAoIWlz
SW50PDI2PihvZmZzZXQpKSB7CisgICAgICAgICAgICB0byA9IEV4ZWN1dGFibGVBbGxvY2F0b3I6
OnNpbmdsZXRvbigpLmdldEp1bXBJc2xhbmRUbyhiaXR3aXNlX2Nhc3Q8dm9pZCo+KGZyb21JbnN0
cnVjdGlvbiksIHRvKTsKKyAgICAgICAgICAgIG9mZnNldCA9IChiaXR3aXNlX2Nhc3Q8aW50cHRy
X3Q+KHRvKSAtIGJpdHdpc2VfY2FzdDxpbnRwdHJfdD4oZnJvbUluc3RydWN0aW9uKSkgPj4gMjsK
KyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKGlzSW50PDI2PihvZmZzZXQpKTsKKyAgICAgICAg
fQorCiAgICAgICAgIGludCBpbnNuID0gdW5jb25kaXRpb25hbEJyYW5jaEltbWVkaWF0ZShpc0Nh
bGwsIHN0YXRpY19jYXN0PGludD4ob2Zmc2V0KSk7CiAgICAgICAgIFJFTEVBU0VfQVNTRVJUKHJv
dW5kVXBUb011bHRpcGxlT2Y8aW5zdHJ1Y3Rpb25TaXplPihmcm9tKSA9PSBmcm9tKTsKICAgICAg
ICAgY29weShmcm9tLCAmaW5zbiwgc2l6ZW9mKGludCkpOwpAQCAtMzAwOCw3ICszMDMzLDcgQEAg
cHJvdGVjdGVkOgogICAgICAgICBBU1NFUlQoIShyZWludGVycHJldF9jYXN0PGludHB0cl90Pihm
cm9tKSAmIDMpKTsKICAgICAgICAgQVNTRVJUKCEocmVpbnRlcnByZXRfY2FzdDxpbnRwdHJfdD4o
dG8pICYgMykpOwogICAgICAgICBpbnRwdHJfdCBvZmZzZXQgPSAocmVpbnRlcnByZXRfY2FzdDxp
bnRwdHJfdD4odG8pIC0gcmVpbnRlcnByZXRfY2FzdDxpbnRwdHJfdD4oZnJvbUluc3RydWN0aW9u
KSkgPj4gMjsKLSAgICAgICAgQVNTRVJUKGlzSW50PDI2PihvZmZzZXQpKTsKKyAgICAgICAgLy9B
U1NFUlQoaXNJbnQ8MjY+KG9mZnNldCkpOyAvL09PUFMKIAogICAgICAgICBib29sIHVzZURpcmVj
dCA9IGlzSW50PDE5PihvZmZzZXQpOwogICAgICAgICBBU1NFUlQodHlwZSA9PSBJbmRpcmVjdEJy
YW5jaCB8fCB1c2VEaXJlY3QpOwpAQCAtMzAzNiw3ICszMDYxLDcgQEAgcHJvdGVjdGVkOgogICAg
ICAgICBBU1NFUlQoIShyZWludGVycHJldF9jYXN0PGludHB0cl90Pihmcm9tKSAmIDMpKTsKICAg
ICAgICAgQVNTRVJUKCEocmVpbnRlcnByZXRfY2FzdDxpbnRwdHJfdD4odG8pICYgMykpOwogICAg
ICAgICBpbnRwdHJfdCBvZmZzZXQgPSAocmVpbnRlcnByZXRfY2FzdDxpbnRwdHJfdD4odG8pIC0g
cmVpbnRlcnByZXRfY2FzdDxpbnRwdHJfdD4oZnJvbUluc3RydWN0aW9uKSkgPj4gMjsKLSAgICAg
ICAgQVNTRVJUKGlzSW50PDI2PihvZmZzZXQpKTsKKyAgICAgICAgLy8gQVNTRVJUKGlzSW50PDI2
PihvZmZzZXQpKTsgT09QUwogCiAgICAgICAgIGJvb2wgdXNlRGlyZWN0ID0gaXNJbnQ8MTk+KG9m
ZnNldCk7CiAgICAgICAgIEFTU0VSVCh0eXBlID09IEluZGlyZWN0QnJhbmNoIHx8IHVzZURpcmVj
dCk7CkBAIC0zMDY1LDcgKzMwOTAsNyBAQCBwcm90ZWN0ZWQ6CiAgICAgICAgIEFTU0VSVCghKHJl
aW50ZXJwcmV0X2Nhc3Q8aW50cHRyX3Q+KHRvKSAmIDMpKTsKICAgICAgICAgaW50cHRyX3Qgb2Zm
c2V0ID0gKHJlaW50ZXJwcmV0X2Nhc3Q8aW50cHRyX3Q+KHRvKSAtIHJlaW50ZXJwcmV0X2Nhc3Q8
aW50cHRyX3Q+KGZyb21JbnN0cnVjdGlvbikpID4+IDI7CiAgICAgICAgIEFTU0VSVChzdGF0aWNf
Y2FzdDxpbnQ+KG9mZnNldCkgPT0gb2Zmc2V0KTsKLSAgICAgICAgQVNTRVJUKGlzSW50PDI2Pihv
ZmZzZXQpKTsKKyAgICAgICAgLy9BU1NFUlQoaXNJbnQ8MjY+KG9mZnNldCkpOyBPT1BTCiAKICAg
ICAgICAgYm9vbCB1c2VEaXJlY3QgPSBpc0ludDwxND4ob2Zmc2V0KTsKICAgICAgICAgQVNTRVJU
KHR5cGUgPT0gSW5kaXJlY3RCcmFuY2ggfHwgdXNlRGlyZWN0KTsKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9hc3NlbWJsZXIvQWJzdHJhY3RNYWNyb0Fzc2VtYmxlci5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvQWJzdHJhY3RNYWNyb0Fzc2VtYmxl
ci5oCShyZXZpc2lvbiAyNTc4NjYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVy
L0Fic3RyYWN0TWFjcm9Bc3NlbWJsZXIuaAkod29ya2luZyBjb3B5KQpAQCAtOTE5LDYgKzkxOSwy
MiBAQCBwdWJsaWM6CiAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAg
fQogCisgICAgdGVtcGxhdGU8UHRyVGFnIGNhbGxUYWcsIFB0clRhZyBkZXN0VGFnPgorICAgIHN0
YXRpYyBDb2RlTG9jYXRpb25MYWJlbDxkZXN0VGFnPiBwcmVwYXJlRm9yQXRvbWljUmVwYXRjaE5l
YXJDYWxsKENvZGVMb2NhdGlvbk5lYXJDYWxsPGNhbGxUYWc+IG5lYXJDYWxsLCBDb2RlTG9jYXRp
b25MYWJlbDxkZXN0VGFnPiBkZXN0aW5hdGlvbikKKyAgICB7CisjaWYgQ1BVKEFSTTY0KQorICAg
ICAgICBzd2l0Y2ggKG5lYXJDYWxsLmNhbGxNb2RlKCkpIHsKKyAgICAgICAgY2FzZSBOZWFyQ2Fs
bE1vZGU6OlRhaWw6CisgICAgICAgICAgICByZXR1cm4gQ29kZUxvY2F0aW9uTGFiZWw8ZGVzdFRh
Zz4oQXNzZW1ibGVyVHlwZTo6cHJlcGFyZUZvckF0b21pY1JlbGlua0p1bXAobmVhckNhbGwuZGF0
YUxvY2F0aW9uKCksIGRlc3RpbmF0aW9uLmRhdGFMb2NhdGlvbigpKSk7CisgICAgICAgIGNhc2Ug
TmVhckNhbGxNb2RlOjpSZWd1bGFyOgorICAgICAgICAgICAgcmV0dXJuIENvZGVMb2NhdGlvbkxh
YmVsPGRlc3RUYWc+KEFzc2VtYmxlclR5cGU6OnByZXBhcmVGb3JBdG9taWNSZWxpbmtDYWxsKG5l
YXJDYWxsLmRhdGFMb2NhdGlvbigpLCBkZXN0aW5hdGlvbi51bnRhZ2dlZEV4ZWN1dGFibGVBZGRy
ZXNzKCkpKTsKKyAgICAgICAgfQorI2Vsc2UKKyAgICAgICAgVU5VU0VEX1BBUkFNKG5lYXJDYWxs
KTsKKyAgICAgICAgcmV0dXJuIGRlc3RpbmF0aW9uOworI2VuZGlmCisgICAgfQorCiAgICAgdGVt
cGxhdGU8UHRyVGFnIHRhZz4KICAgICBzdGF0aWMgdm9pZCByZXBhdGNoQ29tcGFjdChDb2RlTG9j
YXRpb25EYXRhTGFiZWxDb21wYWN0PHRhZz4gZGF0YUxhYmVsQ29tcGFjdCwgaW50MzJfdCB2YWx1
ZSkKICAgICB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL0xpbmtCdWZm
ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTGlu
a0J1ZmZlci5jcHAJKHJldmlzaW9uIDI1Nzg2NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9h
c3NlbWJsZXIvTGlua0J1ZmZlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM0NCw3ICszNDQsOCBA
QCB2b2lkIExpbmtCdWZmZXI6OmFsbG9jYXRlKE1hY3JvQXNzZW1ibGVyCiAgICAgICAgIGluaXRp
YWxTaXplID0gbWFjcm9Bc3NlbWJsZXIubV9hc3NlbWJsZXIuY29kZVNpemUoKTsKICAgICB9CiAK
LSAgICBtX2V4ZWN1dGFibGVNZW1vcnkgPSBFeGVjdXRhYmxlQWxsb2NhdG9yOjpzaW5nbGV0b24o
KS5hbGxvY2F0ZShpbml0aWFsU2l6ZSwgb3duZXJVSUQsIGVmZm9ydCk7CisgICAgVU5VU0VEX1BB
UkFNKG93bmVyVUlEKTsgLy8gT09QUzogZ2V0IHJpZCBvZiBvd25lclVJRD8KKyAgICBtX2V4ZWN1
dGFibGVNZW1vcnkgPSBFeGVjdXRhYmxlQWxsb2NhdG9yOjpzaW5nbGV0b24oKS5hbGxvY2F0ZShp
bml0aWFsU2l6ZSwgZWZmb3J0KTsKICAgICBpZiAoIW1fZXhlY3V0YWJsZU1lbW9yeSkKICAgICAg
ICAgcmV0dXJuOwogICAgIG1fY29kZSA9IE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxMaW5rQnVmZmVy
UHRyVGFnPihtX2V4ZWN1dGFibGVNZW1vcnktPnN0YXJ0KCkucmV0YWdnZWRQdHI8TGlua0J1ZmZl
clB0clRhZz4oKSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3Jv
QXNzZW1ibGVyQ29kZVJlZi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9h
c3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJDb2RlUmVmLmgJKHJldmlzaW9uIDI1Nzg2NikKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJDb2RlUmVmLmgJKHdv
cmtpbmcgY29weSkKQEAgLTQzNCw3ICs0MzQsNiBAQCBwdWJsaWM6CiAgICAgICAgIDogbV9jb2Rl
UHRyKGV4ZWN1dGFibGVNZW1vcnktPnN0YXJ0KCkucmV0YWdnZWRQdHI8dGFnPigpKQogICAgICAg
ICAsIG1fZXhlY3V0YWJsZU1lbW9yeShXVEZNb3ZlKGV4ZWN1dGFibGVNZW1vcnkpKQogICAgIHsK
LSAgICAgICAgQVNTRVJUKG1fZXhlY3V0YWJsZU1lbW9yeS0+aXNNYW5hZ2VkKCkpOwogICAgICAg
ICBBU1NFUlQobV9leGVjdXRhYmxlTWVtb3J5LT5zdGFydCgpKTsKICAgICAgICAgQVNTRVJUKG1f
Y29kZVB0cik7CiAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9FeGVjdXRh
YmxlQWxsb2NhdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L0V4ZWN1dGFibGVBbGxvY2F0b3IuY3BwCShyZXZpc2lvbiAyNTc4NjYpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L0V4ZWN1dGFibGVBbGxvY2F0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0yOCw5ICsyOCwxMCBAQAogCiAjaWYgRU5BQkxFKEpJVCkKIAotI2luY2x1ZGUgIkNvZGVQcm9m
aWxpbmcuaCIKICNpbmNsdWRlICJFeGVjdXRhYmxlQWxsb2NhdGlvbkZ1enouaCIKKyNpbmNsdWRl
ICJJdGVyYXRpb25TdGF0dXMuaCIKICNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCisjaW5jbHVkZSA8
dHlwZV90cmFpdHM+CiAjaW5jbHVkZSA8d3RmL0ZpbGVTeXN0ZW0uaD4KICNpbmNsdWRlIDx3dGYv
TWV0YUFsbG9jYXRvci5oPgogI2luY2x1ZGUgPHd0Zi9QYWdlUmVzZXJ2YXRpb24uaD4KQEAgLTk2
LDkgKzk3LDE0IEBAIHN0YXRpYyBjb25zdGV4cHIgc2l6ZV90IGZpeGVkRXhlY3V0YWJsZU0KICNl
bGlmIENQVShBUk0pCiBzdGF0aWMgY29uc3RleHByIHNpemVfdCBmaXhlZEV4ZWN1dGFibGVNZW1v
cnlQb29sU2l6ZSA9IDE2ICogMTAyNCAqIDEwMjQ7CiAjZWxpZiBDUFUoQVJNNjQpCi1zdGF0aWMg
Y29uc3RleHByIHNpemVfdCBmaXhlZEV4ZWN1dGFibGVNZW1vcnlQb29sU2l6ZSA9IDEyOCAqIDEw
MjQgKiAxMDI0Oworc3RhdGljIGNvbnN0ZXhwciBzaXplX3QgZml4ZWRFeGVjdXRhYmxlTWVtb3J5
UG9vbFNpemUgPSAxICogMTAyNCAqIDEwMjQgKiAxMDI0Oworc3RhdGljIGNvbnN0ZXhwciBzaXpl
X3QgcmVnaW9uU2l6ZSA9IDExMiAqIDEwMjQgKiAxMDI0Oworc3RhdGljIGNvbnN0ZXhwciBzaXpl
X3QgaXNsYW5kUmVnaW9uU2l6ZSA9IDE2ICogMTAyNCAqIDEwMjQ7CitzdGF0aWMgY29uc3RleHBy
IHNpemVfdCBudW1iZXJPZlJlZ2lvbnMgPSBmaXhlZEV4ZWN1dGFibGVNZW1vcnlQb29sU2l6ZSAv
IHJlZ2lvblNpemU7CitzdGF0aWMgY29uc3RleHByIHNpemVfdCBpc2xhbmRTaXplSW5CeXRlcyA9
IDQ7CitzdGF0aWMgY29uc3RleHByIHNpemVfdCBtYXhJc2xhbmRzUGVyUmVnaW9uID0gaXNsYW5k
UmVnaW9uU2l6ZSAvIGlzbGFuZFNpemVJbkJ5dGVzOwogI2VsaWYgQ1BVKFg4Nl82NCkKLXN0YXRp
YyBjb25zdGV4cHIgc2l6ZV90IGZpeGVkRXhlY3V0YWJsZU1lbW9yeVBvb2xTaXplID0gMTAyNCAq
IDEwMjQgKiAxMDI0Oworc3RhdGljIGNvbnN0ZXhwciBzaXplX3QgZml4ZWRFeGVjdXRhYmxlTWVt
b3J5UG9vbFNpemUgPSAxICogMTAyNCAqIDEwMjQgKiAxMDI0OwogI2Vsc2UKIHN0YXRpYyBjb25z
dGV4cHIgc2l6ZV90IGZpeGVkRXhlY3V0YWJsZU1lbW9yeVBvb2xTaXplID0gMzIgKiAxMDI0ICog
MTAyNDsKICNlbmRpZgpAQCAtMzEzLDkgKzMxOSwxMCBAQCBzdGF0aWMgQUxXQVlTX0lOTElORSBK
SVRSZXNlcnZhdGlvbiBpbml0CiAgICAgaWYgKCFpc0pJVEVuYWJsZWQoKSkKICAgICAgICAgcmV0
dXJuIHJlc2VydmF0aW9uOwogCi0gICAgaWYgKE9wdGlvbnM6OmppdE1lbW9yeVJlc2VydmF0aW9u
U2l6ZSgpKQotICAgICAgICByZXNlcnZhdGlvbi5zaXplID0gT3B0aW9uczo6aml0TWVtb3J5UmVz
ZXJ2YXRpb25TaXplKCk7Ci0gICAgZWxzZQorICAgIC8vIE9PUFMhCisgICAgLy9pZiAoT3B0aW9u
czo6aml0TWVtb3J5UmVzZXJ2YXRpb25TaXplKCkpCisgICAgLy8gICAgcmVzZXJ2YXRpb24uc2l6
ZSA9IE9wdGlvbnM6OmppdE1lbW9yeVJlc2VydmF0aW9uU2l6ZSgpOworICAgIC8vZWxzZQogICAg
ICAgICByZXNlcnZhdGlvbi5zaXplID0gZml4ZWRFeGVjdXRhYmxlTWVtb3J5UG9vbFNpemU7CiAg
ICAgcmVzZXJ2YXRpb24uc2l6ZSA9IHN0ZDo6bWF4KHJvdW5kVXBUb011bHRpcGxlT2YocGFnZVNp
emUoKSwgcmVzZXJ2YXRpb24uc2l6ZSksIHBhZ2VTaXplKCkgKiAyKTsKIApAQCAtMzYzLDUyICsz
NzAsNDQwIEBAIHN0YXRpYyBBTFdBWVNfSU5MSU5FIEpJVFJlc2VydmF0aW9uIGluaXQKICAgICBy
ZXR1cm4gcmVzZXJ2YXRpb247CiB9CiAKLWNsYXNzIEZpeGVkVk1Qb29sRXhlY3V0YWJsZUFsbG9j
YXRvciBmaW5hbCA6IHB1YmxpYyBNZXRhQWxsb2NhdG9yIHsKK2NsYXNzIEZpeGVkVk1Qb29sRXhl
Y3V0YWJsZUFsbG9jYXRvciBmaW5hbCB7CiAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CiBw
dWJsaWM6CiAgICAgRml4ZWRWTVBvb2xFeGVjdXRhYmxlQWxsb2NhdG9yKCkKLSAgICAgICAgOiBN
ZXRhQWxsb2NhdG9yKGppdEFsbG9jYXRpb25HcmFudWxlKSAvLyByb3VuZCB1cCBhbGwgYWxsb2Nh
dGlvbnMgdG8gMzIgYnl0ZXMKKyNpZiBDUFUoQVJNNjQpCisgICAgICAgIDogbV9hbGxvY2F0b3Jz
KGNvbnN0cnVjdEZpeGVkU2l6ZUFycmF5V2l0aEFyZ3VtZW50czxSZWdpb25BbGxvY2F0b3IsIG51
bWJlck9mUmVnaW9ucz4oKnRoaXMpKQorI2Vsc2UKKyAgICAgICAgOiBtX2FsbG9jYXRvcigqdGhp
cykKKyNlbmRpZgogICAgIHsKICAgICAgICAgSklUUmVzZXJ2YXRpb24gcmVzZXJ2YXRpb24gPSBp
bml0aWFsaXplSklUUGFnZVJlc2VydmF0aW9uKCk7CiAgICAgICAgIG1fcmVzZXJ2YXRpb24gPSBX
VEZNb3ZlKHJlc2VydmF0aW9uLnBhZ2VSZXNlcnZhdGlvbik7CiAgICAgICAgIGlmIChtX3Jlc2Vy
dmF0aW9uKSB7Ci0gICAgICAgICAgICBhZGRGcmVzaEZyZWVTcGFjZShyZXNlcnZhdGlvbi5iYXNl
LCByZXNlcnZhdGlvbi5zaXplKTsKKyNpZiBDUFUoQVJNNjQpCisgICAgICAgICAgICB1aW50cHRy
X3Qgc3RhcnQgPSBiaXR3aXNlX2Nhc3Q8dWludHB0cl90PihtX3Jlc2VydmF0aW9uLmJhc2UoKSk7
CisgICAgICAgICAgICB1aW50cHRyX3QgcmVzZXJ2YXRpb25FbmQgPSBzdGFydCArIG1fcmVzZXJ2
YXRpb24uc2l6ZSgpOworICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBudW1iZXJP
ZlJlZ2lvbnM7ICsraSkgeworICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKHN0YXJ0IDwg
cmVzZXJ2YXRpb25FbmQpOworICAgICAgICAgICAgICAgIG1fYWxsb2NhdG9yc1tpXS5zdGFydCA9
IHN0YXJ0OworICAgICAgICAgICAgICAgIG1fYWxsb2NhdG9yc1tpXS5lbmQgPSBzdGFydCArIHJl
Z2lvblNpemU7CisgICAgICAgICAgICAgICAgaWYgKG1fYWxsb2NhdG9yc1tpXS5lbmQgPiByZXNl
cnZhdGlvbkVuZCkgeworICAgICAgICAgICAgICAgICAgICAvLyBXZSBtYXkgaGF2ZSB0YWtlbiBh
IHBhZ2UgZm9yIHRoZSBleGVjdXRhYmxlIG9ubHkgY29weSB0aHVuay4KKyAgICAgICAgICAgICAg
ICAgICAgUkVMRUFTRV9BU1NFUlQoaSA9PSBudW1iZXJPZlJlZ2lvbnMgLSAxKTsKKyAgICAgICAg
ICAgICAgICAgICAgbV9hbGxvY2F0b3JzW2ldLmVuZCA9IHJlc2VydmF0aW9uRW5kOworICAgICAg
ICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIG1fYWxsb2NhdG9yc1tpXS5hZGRGcmVzaEZy
ZWVTcGFjZShiaXR3aXNlX2Nhc3Q8dm9pZCo+KG1fYWxsb2NhdG9yc1tpXS5zdGFydCksIG1fYWxs
b2NhdG9yc1tpXS5hbGxvY2F0b3JTaXplKCkpOworCisgICAgICAgICAgICAgICAgc3RhcnQgKz0g
cmVnaW9uU2l6ZTsKKyAgICAgICAgICAgIH0KKyNlbHNlCisgICAgICAgICAgICBtX2FsbG9jYXRv
ci5hZGRGcmVzaEZyZWVTcGFjZShyZXNlcnZhdGlvbi5iYXNlLCByZXNlcnZhdGlvbi5zaXplKTsK
KyNlbmRpZgorCiAgICAgICAgICAgICBBU1NFUlQoYnl0ZXNSZXNlcnZlZCgpID09IHJlc2VydmF0
aW9uLnNpemUpOyAvLyBTaW5jZSBvdXIgZXhlY3V0YWJsZSBtZW1vcnkgaXMgZml4ZWQtc2l6ZWQs
IGJ5dGVzUmVzZXJ2ZWQgaXMgbmV2ZXIgY2hhbmdlZCBhZnRlciBpbml0aWFsaXphdGlvbi4KICAg
ICAgICAgfQogICAgIH0KIAotICAgIHZpcnR1YWwgfkZpeGVkVk1Qb29sRXhlY3V0YWJsZUFsbG9j
YXRvcigpOworICAgIH5GaXhlZFZNUG9vbEV4ZWN1dGFibGVBbGxvY2F0b3IoKQorICAgIHsKKyAg
ICAgICAgbV9yZXNlcnZhdGlvbi5kZWFsbG9jYXRlKCk7CisgICAgfQogCiAgICAgdm9pZCogbWVt
b3J5U3RhcnQoKSB7IHJldHVybiB1bnRhZ0NvZGVQdHI8RXhlY3V0YWJsZU1lbW9yeVB0clRhZz4o
Z19qc2NDb25maWcuc3RhcnRFeGVjdXRhYmxlTWVtb3J5KTsgfQogICAgIHZvaWQqIG1lbW9yeUVu
ZCgpIHsgcmV0dXJuIHVudGFnQ29kZVB0cjxFeGVjdXRhYmxlTWVtb3J5UHRyVGFnPihnX2pzY0Nv
bmZpZy5lbmRFeGVjdXRhYmxlTWVtb3J5KTsgfQogICAgIGJvb2wgaXNKSVRQQyh2b2lkKiBwYykg
eyByZXR1cm4gbWVtb3J5U3RhcnQoKSA8PSBwYyAmJiBwYyA8IG1lbW9yeUVuZCgpOyB9CisgICAg
Ym9vbCBpc1ZhbGlkKCkgeyByZXR1cm4gISFtX3Jlc2VydmF0aW9uOyB9CiAKLXByb3RlY3RlZDoK
LSAgICBGcmVlU3BhY2VQdHIgYWxsb2NhdGVOZXdTcGFjZShzaXplX3QmKSBvdmVycmlkZQorICAg
IFJlZlB0cjxFeGVjdXRhYmxlTWVtb3J5SGFuZGxlPiBhbGxvY2F0ZShzaXplX3Qgc2l6ZUluQnl0
ZXMpCiAgICAgewotICAgICAgICAvLyBXZSdyZSBvcGVyYXRpbmcgaW4gYSBmaXhlZCBwb29sLCBz
byBuZXcgYWxsb2NhdGlvbiBpcyBhbHdheXMgcHJvaGliaXRlZC4KKyNpZiBDUFUoQVJNNjQpCisg
ICAgICAgIGF1dG8gbG9ja2VyID0gaG9sZExvY2soZ2V0TG9jaygpKTsKKworICAgICAgICBzdGF0
aWMgdWludDY0X3QgY291bnRlcjsKKyAgICAgICAgKytjb3VudGVyOworICAgICAgICBpZiAoY291
bnRlciAlIDUwID09IDApIHsKKyAgICAgICAgICAgIGRvdWJsZSB1c2VkID0gMDsKKyAgICAgICAg
ICAgIGRvdWJsZSB0b3RhbCA9IDA7CisgICAgICAgICAgICBzdGF0aWMgZG91YmxlIG1heFJhdGU7
CisgICAgICAgICAgICBmb3JFYWNoQWxsb2NhdG9yKFsmXSAoUmVnaW9uQWxsb2NhdG9yJiBhbGxv
Y2F0b3IpIHsKKyAgICAgICAgICAgICAgICB1c2VkICs9IGFsbG9jYXRvci5pc2xhbmRCaXRzLmJp
dENvdW50KCk7CisgICAgICAgICAgICAgICAgdG90YWwgKz0gbWF4SXNsYW5kc1BlclJlZ2lvbjsK
KyAgICAgICAgICAgIH0pOworICAgICAgICAgICAgbWF4UmF0ZSA9IHN0ZDo6bWF4KG1heFJhdGUs
IHVzZWQvdG90YWwpOworICAgICAgICAgICAgZGF0YUxvZ0xuKCJ1dGlsaXphdGlvbiByYXRlOiAi
LCAxMDAqdXNlZC90b3RhbCwgIiUgIG1heFJhdGU9IiwgbWF4UmF0ZSoxMDAsICIlIik7CisgICAg
ICAgIH0KKyAgICAgICAgCisgICAgICAgIHVuc2lnbmVkIHN0YXJ0ID0gMDsKKyAgICAgICAgaWYg
KHRydWUgfHwgT3B0aW9uczo6dXNlUmFuZG9taXppbmdFeGVjdXRhYmxlSXNsYW5kQWxsb2NhdGlv
bigpKSAvLyBPT1BTCisgICAgICAgICAgICBzdGFydCA9IGNyeXB0b2dyYXBoaWNhbGx5UmFuZG9t
TnVtYmVyKCkgJSBtX2FsbG9jYXRvcnMuc2l6ZSgpOworCisgICAgICAgIHVuc2lnbmVkIGkgPSBz
dGFydDsKKyAgICAgICAgd2hpbGUgKHRydWUpIHsKKyAgICAgICAgICAgIFJlZ2lvbkFsbG9jYXRv
ciYgYWxsb2NhdG9yID0gbV9hbGxvY2F0b3JzW2ldOworICAgICAgICAgICAgaWYgKFJlZlB0cjxF
eGVjdXRhYmxlTWVtb3J5SGFuZGxlPiByZXN1bHQgPSBhbGxvY2F0b3IuYWxsb2NhdGUobG9ja2Vy
LCBzaXplSW5CeXRlcykpCisgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAg
ICAgIGkgPSAoaSArIDEpICUgbV9hbGxvY2F0b3JzLnNpemUoKTsKKyAgICAgICAgICAgIGlmIChp
ID09IHN0YXJ0KQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CiAgICAgICAgIHJl
dHVybiBudWxscHRyOworI2Vsc2UKKyAgICAgICAgcmV0dXJuIG1fYWxsb2NhdG9yLmFsbG9jYXRl
KHNpemVJbkJ5dGVzKTsKKyNlbmRpZgorICAgIH0KKworICAgIExvY2smIGdldExvY2soKSB7IHJl
dHVybiBtX2xvY2s7IH0KKworICAgIC8vIE5vbiBhdG9taWMKKyAgICBzaXplX3QgYnl0ZXNBbGxv
Y2F0ZWQoKSAKKyAgICB7CisgICAgICAgIHNpemVfdCByZXN1bHQgPSAwOworICAgICAgICBmb3JF
YWNoQWxsb2NhdG9yKFsmXSAoQWxsb2NhdG9yJiBhbGxvY2F0b3IpIHsKKyAgICAgICAgICAgIHJl
c3VsdCArPSBhbGxvY2F0b3IuYnl0ZXNBbGxvY2F0ZWQoKTsKKyAgICAgICAgfSk7CisgICAgICAg
IHJldHVybiByZXN1bHQ7CisgICAgfQorICAgIHNpemVfdCBieXRlc1Jlc2VydmVkKCkgCisgICAg
eworICAgICAgICBzaXplX3QgcmVzdWx0ID0gMDsKKyAgICAgICAgZm9yRWFjaEFsbG9jYXRvcihb
Jl0gKEFsbG9jYXRvciYgYWxsb2NhdG9yKSB7CisgICAgICAgICAgICByZXN1bHQgKz0gYWxsb2Nh
dG9yLmJ5dGVzUmVzZXJ2ZWQoKTsKKyAgICAgICAgfSk7CisgICAgICAgIHJldHVybiByZXN1bHQ7
CisgICAgfQorICAgIHNpemVfdCBieXRlc0NvbW1pdHRlZCgpCisgICAgeworICAgICAgICBzaXpl
X3QgcmVzdWx0ID0gMDsKKyAgICAgICAgZm9yRWFjaEFsbG9jYXRvcihbJl0gKEFsbG9jYXRvciYg
YWxsb2NhdG9yKSB7CisgICAgICAgICAgICByZXN1bHQgKz0gYWxsb2NhdG9yLmJ5dGVzQ29tbWl0
dGVkKCk7CisgICAgICAgIH0pOworICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgIH0KIAotICAg
IHZvaWQgbm90aWZ5TmVlZFBhZ2Uodm9pZCogcGFnZSwgc2l6ZV90IGNvdW50KSBvdmVycmlkZQor
ICAgIGJvb2wgaXNJbkFsbG9jYXRlZE1lbW9yeShjb25zdCBBYnN0cmFjdExvY2tlciYgbG9ja2Vy
LCB2b2lkKiBhZGRyZXNzKQogICAgIHsKLSAgICAgICAgbV9yZXNlcnZhdGlvbi5jb21taXQocGFn
ZSwgcGFnZVNpemUoKSAqIGNvdW50KTsKKyAgICAgICAgYm9vbCByZXN1bHQgPSBmYWxzZTsKKyAg
ICAgICAgZm9yRWFjaEFsbG9jYXRvcihbJl0gKEFsbG9jYXRvciYgYWxsb2NhdG9yKSB7CisgICAg
ICAgICAgICBpZiAoYWxsb2NhdG9yLmlzSW5BbGxvY2F0ZWRNZW1vcnkobG9ja2VyLCBhZGRyZXNz
KSkgeworICAgICAgICAgICAgICAgIHJlc3VsdCA9IHRydWU7CisgICAgICAgICAgICAgICAgcmV0
dXJuIEl0ZXJhdGlvblN0YXR1czo6RG9uZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJl
dHVybiBJdGVyYXRpb25TdGF0dXM6OkNvbnRpbnVlOworICAgICAgICB9KTsKKworICAgICAgICBy
ZXR1cm4gcmVzdWx0OwogICAgIH0KIAotICAgIHZvaWQgbm90aWZ5UGFnZUlzRnJlZSh2b2lkKiBw
YWdlLCBzaXplX3QgY291bnQpIG92ZXJyaWRlCisjaWYgRU5BQkxFKE1FVEFfQUxMT0NBVE9SX1BS
T0ZJTEUpCisgICAgdm9pZCBkdW1wUHJvZmlsZSgpCiAgICAgewotICAgICAgICBtX3Jlc2VydmF0
aW9uLmRlY29tbWl0KHBhZ2UsIHBhZ2VTaXplKCkgKiBjb3VudCk7CisgICAgICAgIGZvckVhY2hB
bGxvY2F0b3IoWyZdIChBbGxvY2F0b3ImIGFsbG9jYXRvcikgeworICAgICAgICAgICAgYWxsb2Nh
dG9yLmR1bXBQcm9maWxlKCk7CisgICAgICAgIH0pOworICAgIH0KKyNlbmRpZgorCisgICAgTWV0
YUFsbG9jYXRvcjo6U3RhdGlzdGljcyBjdXJyZW50U3RhdGlzdGljcygpCisgICAgeworICAgICAg
ICBhdXRvIGxvY2tlciA9IGhvbGRMb2NrKGdldExvY2soKSk7CisgICAgICAgIE1ldGFBbGxvY2F0
b3I6OlN0YXRpc3RpY3MgcmVzdWx0IHsgMCwgMCwgMCB9OworICAgICAgICBmb3JFYWNoQWxsb2Nh
dG9yKFsmXSAoQWxsb2NhdG9yJiBhbGxvY2F0b3IpIHsKKyAgICAgICAgICAgIGF1dG8gYWxsb2Nh
dG9yU3RhdHMgPSBhbGxvY2F0b3IuY3VycmVudFN0YXRpc3RpY3MobG9ja2VyKTsKKyAgICAgICAg
ICAgIHJlc3VsdC5ieXRlc0FsbG9jYXRlZCArPSBhbGxvY2F0b3JTdGF0cy5ieXRlc0FsbG9jYXRl
ZDsKKyAgICAgICAgICAgIHJlc3VsdC5ieXRlc1Jlc2VydmVkICs9IGFsbG9jYXRvclN0YXRzLmJ5
dGVzUmVzZXJ2ZWQ7CisgICAgICAgICAgICByZXN1bHQuYnl0ZXNDb21taXR0ZWQgKz0gYWxsb2Nh
dG9yU3RhdHMuYnl0ZXNDb21taXR0ZWQ7CisgICAgICAgIH0pOworICAgICAgICByZXR1cm4gcmVz
dWx0OworICAgIH0KKworI2lmIENQVShBUk02NCkKKyAgICB2b2lkIGhhbmRsZVdpbGxCZVJlbGVh
c2VkKGNvbnN0IExvY2tIb2xkZXImIGxvY2tlciwgTWV0YUFsbG9jYXRvckhhbmRsZSYgaGFuZGxl
KQorICAgIHsKKyAgICAgICAgaWYgKGlzbGFuZHNGb3JKdW1wTG9jYXRpb24uaXNFbXB0eSgpKQor
ICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIFZlY3RvcjxJc2xhbmRzKiwgMTY+IHRvUmVt
b3ZlOworICAgICAgICB2b2lkKiBzdGFydCA9IGhhbmRsZS5zdGFydCgpLnVudGFnZ2VkUHRyKCk7
CisgICAgICAgIHZvaWQqIGVuZCA9IGhhbmRsZS5lbmQoKS51bnRhZ2dlZFB0cigpOworICAgICAg
ICBpc2xhbmRzRm9ySnVtcExvY2F0aW9uLml0ZXJhdGUoWyZdIChJc2xhbmRzJiBpc2xhbmRzLCBi
b29sJiB2aXNpdExlZnQsIGJvb2wmIHZpc2l0UmlnaHQpIHsKKyAgICAgICAgICAgIGlmIChzdGFy
dCA8PSBpc2xhbmRzLmtleSgpICYmIGlzbGFuZHMua2V5KCkgPCBlbmQpCisgICAgICAgICAgICAg
ICAgdG9SZW1vdmUuYXBwZW5kKCZpc2xhbmRzKTsKKyAgICAgICAgICAgIGlmIChpc2xhbmRzLmtl
eSgpID4gc3RhcnQpCisgICAgICAgICAgICAgICAgdmlzaXRMZWZ0ID0gdHJ1ZTsKKyAgICAgICAg
ICAgIGlmIChpc2xhbmRzLmtleSgpIDwgZW5kKQorICAgICAgICAgICAgICAgIHZpc2l0UmlnaHQg
PSB0cnVlOworICAgICAgICB9KTsKKworICAgICAgICBmb3IgKElzbGFuZHMqIGlzbGFuZHMgOiB0
b1JlbW92ZSkKKyAgICAgICAgICAgIGZyZWVJc2xhbmRzKGxvY2tlciwgaXNsYW5kcyk7CisKKyAg
ICAgICAgLy8gT09QUzogbWFrZSBpdCB1bmRlciBBU1NFUlRfRU5BQkxFRAorICAgICAgICBpZiAo
ZmFsc2UpIHsKKyAgICAgICAgICAgIGlzbGFuZHNGb3JKdW1wTG9jYXRpb24uaXRlcmF0ZShbJl0g
KElzbGFuZHMmIGlzbGFuZHMsIGJvb2wmIHZpc2l0TGVmdCwgYm9vbCYgdmlzaXRSaWdodCkgewor
ICAgICAgICAgICAgICAgIGlmIChzdGFydCA8PSBpc2xhbmRzLmtleSgpICYmIGlzbGFuZHMua2V5
KCkgPCBlbmQpIHsKKyAgICAgICAgICAgICAgICAgICAgZGF0YUxvZ0xuKCJkaWQgbm90IHJlbW92
ZSBldmVyeXRoaW5nISIpOworICAgICAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1Rf
UkVBQ0hFRCgpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB2aXNpdExlZnQg
PSB0cnVlOworICAgICAgICAgICAgICAgIHZpc2l0UmlnaHQgPSB0cnVlOworICAgICAgICAgICAg
fSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICB2b2lkKiBtYWtlSXNsYW5kKHVpbnRwdHJfdCBq
dW1wTG9jYXRpb24sIHVpbnRwdHJfdCBuZXdUYXJnZXQsIGJvb2wgZm9yY2VOZXdJc2xhbmRzKQor
ICAgIHsKKyAgICAgICAgYXV0byBsb2NrZXIgPSBob2xkTG9jayhnZXRMb2NrKCkpOworICAgICAg
ICByZXR1cm4gaXNsYW5kRm9ySnVtcExvY2F0aW9uKGxvY2tlciwganVtcExvY2F0aW9uLCBuZXdU
YXJnZXQsIGZvcmNlTmV3SXNsYW5kcyk7CisgICAgfQorCitwcml2YXRlOgorICAgIGNsYXNzIElz
bGFuZHM7CisgICAgY2xhc3MgUmVnaW9uQWxsb2NhdG9yOworCisgICAgUmVnaW9uQWxsb2NhdG9y
KiBmaW5kUmVnaW9uKHVpbnRwdHJfdCBwdHIpCisgICAgeworICAgICAgICBSZWdpb25BbGxvY2F0
b3IqIHJlc3VsdCA9IG51bGxwdHI7CisgICAgICAgIGZvckVhY2hBbGxvY2F0b3IoWyZdIChSZWdp
b25BbGxvY2F0b3ImIGFsbG9jYXRvcikgeworICAgICAgICAgICAgaWYgKGFsbG9jYXRvci5zdGFy
dCA8PSBwdHIgJiYgcHRyIDwgYWxsb2NhdG9yLmVuZCkgeworICAgICAgICAgICAgICAgIHJlc3Vs
dCA9ICZhbGxvY2F0b3I7CisgICAgICAgICAgICAgICAgcmV0dXJuIEl0ZXJhdGlvblN0YXR1czo6
RG9uZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybiBJdGVyYXRpb25TdGF0dXM6
OkNvbnRpbnVlOworICAgICAgICB9KTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisK
KyAgICB2b2lkIGZyZWVKdW1wSXNsYW5kcyhjb25zdCBMb2NrSG9sZGVyJiwgSXNsYW5kcyogaXNs
YW5kcykKKyAgICB7CisgICAgICAgIGZvciAodm9pZCoganVtcElzbGFuZCA6IGlzbGFuZHMtPmp1
bXBJc2xhbmRzKSB7CisgICAgICAgICAgICBSZWdpb25BbGxvY2F0b3IqIGFsbG9jYXRvciA9IGZp
bmRSZWdpb24oYml0d2lzZV9jYXN0PHVpbnRwdHJfdD4oanVtcElzbGFuZCkpOworICAgICAgICAg
ICAgUkVMRUFTRV9BU1NFUlQoYWxsb2NhdG9yKTsKKyAgICAgICAgICAgIGFsbG9jYXRvci0+ZnJl
ZUlzbGFuZChiaXR3aXNlX2Nhc3Q8dWludHB0cl90PihqdW1wSXNsYW5kKSk7CisgICAgICAgIH0K
KyAgICAgICAgaXNsYW5kcy0+anVtcElzbGFuZHMuY2xlYXIoKTsKKyAgICB9CisKKyAgICB2b2lk
IGZyZWVJc2xhbmRzKGNvbnN0IExvY2tIb2xkZXImIGxvY2tlciwgSXNsYW5kcyogaXNsYW5kcykK
KyAgICB7CisgICAgICAgIGZyZWVKdW1wSXNsYW5kcyhsb2NrZXIsIGlzbGFuZHMpOworICAgICAg
ICBpc2xhbmRzRm9ySnVtcExvY2F0aW9uLnJlbW92ZShpc2xhbmRzKTsKKyAgICAgICAgZGVsZXRl
IGlzbGFuZHM7CisgICAgfQorCisgICAgdm9pZCogaXNsYW5kRm9ySnVtcExvY2F0aW9uKGNvbnN0
IExvY2tIb2xkZXImIGxvY2tlciwgdWludHB0cl90IGp1bXBMb2NhdGlvbiwgdWludHB0cl90IHRh
cmdldCwgYm9vbCBmb3JjZU5ld0lzbGFuZHMpCisgICAgeworICAgICAgICBJc2xhbmRzKiBpc2xh
bmRzID0gaXNsYW5kc0Zvckp1bXBMb2NhdGlvbi5maW5kRXhhY3QoYml0d2lzZV9jYXN0PHZvaWQq
PihqdW1wTG9jYXRpb24pKTsKKyAgICAgICAgaWYgKGlzbGFuZHMpIHsKKyAgICAgICAgICAgIC8v
IEZJWE1FOiBXZSBjb3VsZCBjcmVhdGUgc29tZSBtZXRob2Qgb2YgcmV1c2luZyBhbHJlYWR5IGFs
bG9jYXRlZCBpc2xhbmRzIGhlcmUsIGJ1dCBpdCdzCisgICAgICAgICAgICAvLyB1bmxpa2VseSB0
byBtYXR0ZXIgaW4gcHJhY3RpY2UuCisgICAgICAgICAgICBpZiAoIWZvcmNlTmV3SXNsYW5kcykK
KyAgICAgICAgICAgICAgICBmcmVlSnVtcElzbGFuZHMobG9ja2VyLCBpc2xhbmRzKTsKKyAgICAg
ICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGlzbGFuZHMgPSBuZXcgSXNsYW5kczsKKyAgICAgICAg
ICAgIGlzbGFuZHMtPnJvb3RKdW1wTG9jYXRpb24gPSBiaXR3aXNlX2Nhc3Q8dm9pZCo+KGp1bXBM
b2NhdGlvbik7CisgICAgICAgICAgICBpc2xhbmRzRm9ySnVtcExvY2F0aW9uLmluc2VydChpc2xh
bmRzKTsKKyAgICAgICAgfQorCisgICAgICAgIFJlZ2lvbkFsbG9jYXRvciogYWxsb2NhdG9yID0g
ZmluZFJlZ2lvbihqdW1wTG9jYXRpb24gPiB0YXJnZXQgPyBqdW1wTG9jYXRpb24gLSByZWdpb25T
aXplIDoganVtcExvY2F0aW9uKTsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQoYWxsb2NhdG9yKTsK
KyAgICAgICAgdm9pZCogcmVzdWx0ID0gYWxsb2NhdG9yLT5hbGxvY2F0ZUlzbGFuZCgpOworICAg
ICAgICB2b2lkKiBjdXJyZW50SXNsYW5kID0gcmVzdWx0OworICAgICAgICBqdW1wTG9jYXRpb24g
PSBiaXR3aXNlX2Nhc3Q8dWludHB0cl90PihjdXJyZW50SXNsYW5kKTsKKyAgICAgICAgd2hpbGUg
KHRydWUpIHsKKyAgICAgICAgICAgIGlzbGFuZHMtPmp1bXBJc2xhbmRzLmFwcGVuZChjdXJyZW50
SXNsYW5kKTsKKworICAgICAgICAgICAgYXV0byBlbWl0SnVtcFRvID0gWyZdICh2b2lkKiB0YXJn
ZXQpIHsKKyAgICAgICAgICAgICAgICBpbnRwdHJfdCBkaWZmID0gKHN0YXRpY19jYXN0PGludHB0
cl90PihqdW1wTG9jYXRpb24pIC0gYml0d2lzZV9jYXN0PGludHB0cl90Pih0YXJnZXQpKSA+PiAy
OworICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKGlzSW50PDI2PihkaWZmKSk7CisKKyAg
ICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnMgaml0OworICAgICAgICAgICAgICAgIGF1dG8ganVt
cCA9IGppdC5qdW1wKCk7CisgICAgICAgICAgICAgICAgTGlua0J1ZmZlciBsaW5rQnVmZmVyKGpp
dCwgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPE5vUHRyVGFnPihjdXJyZW50SXNsYW5kKSwgaXNsYW5k
U2l6ZUluQnl0ZXMsIEpJVENvbXBpbGF0aW9uTXVzdFN1Y2NlZWQsIGZhbHNlKTsKKyAgICAgICAg
ICAgICAgICBsaW5rQnVmZmVyLmxpbmsoanVtcCwgQ29kZUxvY2F0aW9uTGFiZWw8Tm9QdHJUYWc+
KHRhcmdldCkpOworICAgICAgICAgICAgICAgIEZJTkFMSVpFX0NPREUobGlua0J1ZmZlciwgTm9Q
dHJUYWcsICJKdW1wIElzbGFuZDogJWx1IiwganVtcExvY2F0aW9uKTsKKyAgICAgICAgICAgIH07
CisKKyAgICAgICAgICAgIGludHB0cl90IGRpZmYgPSAoc3RhdGljX2Nhc3Q8aW50cHRyX3Q+KGp1
bXBMb2NhdGlvbikgLSBiaXR3aXNlX2Nhc3Q8aW50cHRyX3Q+KHRhcmdldCkpID4+IDI7CisgICAg
ICAgICAgICBpZiAoaXNJbnQ8MjY+KGRpZmYpKSB7CisgICAgICAgICAgICAgICAgZW1pdEp1bXBU
byhiaXR3aXNlX2Nhc3Q8dm9pZCo+KHRhcmdldCkpOworICAgICAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICAgICAgfQorCisgICAgICAgICAgICB1aW50cHRyX3QgbmV4dElzbGFuZFJlZ2lvbjsK
KyAgICAgICAgICAgIGlmIChqdW1wTG9jYXRpb24gPiB0YXJnZXQpCisgICAgICAgICAgICAgICAg
bmV4dElzbGFuZFJlZ2lvbiA9IGp1bXBMb2NhdGlvbiAtIHJlZ2lvblNpemU7CisgICAgICAgICAg
ICBlbHNlCisgICAgICAgICAgICAgICAgbmV4dElzbGFuZFJlZ2lvbiA9IGp1bXBMb2NhdGlvbiAr
IHJlZ2lvblNpemU7CisKKyAgICAgICAgICAgIFJlZ2lvbkFsbG9jYXRvciogYWxsb2NhdG9yID0g
ZmluZFJlZ2lvbihuZXh0SXNsYW5kUmVnaW9uKTsKKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJU
KGFsbG9jYXRvcik7CisgICAgICAgICAgICB2b2lkKiBuZXh0SXNsYW5kID0gYWxsb2NhdG9yLT5h
bGxvY2F0ZUlzbGFuZCgpOworICAgICAgICAgICAgZW1pdEp1bXBUbyhuZXh0SXNsYW5kKTsKKyAg
ICAgICAgICAgIGp1bXBMb2NhdGlvbiA9IGJpdHdpc2VfY2FzdDx1aW50cHRyX3Q+KG5leHRJc2xh
bmQpOworICAgICAgICAgICAgY3VycmVudElzbGFuZCA9IG5leHRJc2xhbmQ7CisgICAgICAgIH0K
KworICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgIH0KKyNlbmRpZgogCiBwcml2YXRlOgorICAg
IGNsYXNzIEFsbG9jYXRvciA6IHB1YmxpYyBNZXRhQWxsb2NhdG9yIHsKKyAgICAgICAgdXNpbmcg
QmFzZSA9IE1ldGFBbGxvY2F0b3I7CisgICAgcHVibGljOgorICAgICAgICBBbGxvY2F0b3IoRml4
ZWRWTVBvb2xFeGVjdXRhYmxlQWxsb2NhdG9yJiBhbGxvY2F0b3IpCisgICAgICAgICAgICA6IEJh
c2UoYWxsb2NhdG9yLmdldExvY2soKSwgaml0QWxsb2NhdGlvbkdyYW51bGUsIHBhZ2VTaXplKCkp
IC8vIHJvdW5kIHVwIGFsbCBhbGxvY2F0aW9ucyB0byAzMiBieXRlcworICAgICAgICAgICAgLCBt
X2ZpeGVkQWxsb2NhdG9yKGFsbG9jYXRvcikKKyAgICAgICAgeworICAgICAgICB9CisKKyAgICAg
ICAgRnJlZVNwYWNlUHRyIGFsbG9jYXRlTmV3U3BhY2Uoc2l6ZV90Jikgb3ZlcnJpZGUKKyAgICAg
ICAgeworICAgICAgICAgICAgLy8gV2UncmUgb3BlcmF0aW5nIGluIGEgZml4ZWQgcG9vbCwgc28g
bmV3IGFsbG9jYXRpb24gaXMgYWx3YXlzIHByb2hpYml0ZWQuCisgICAgICAgICAgICByZXR1cm4g
bnVsbHB0cjsKKyAgICAgICAgfQorCisgICAgICAgIHZvaWQgbm90aWZ5TmVlZFBhZ2Uodm9pZCog
cGFnZSwgc2l6ZV90IGNvdW50KSBvdmVycmlkZQorICAgICAgICB7CisgICAgICAgICAgICBtX2Zp
eGVkQWxsb2NhdG9yLm1fcmVzZXJ2YXRpb24uY29tbWl0KHBhZ2UsIHBhZ2VTaXplKCkgKiBjb3Vu
dCk7CisgICAgICAgIH0KKworICAgICAgICB2b2lkIG5vdGlmeVBhZ2VJc0ZyZWUodm9pZCogcGFn
ZSwgc2l6ZV90IGNvdW50KSBvdmVycmlkZQorICAgICAgICB7CisgICAgICAgICAgICBtX2ZpeGVk
QWxsb2NhdG9yLm1fcmVzZXJ2YXRpb24uZGVjb21taXQocGFnZSwgcGFnZVNpemUoKSAqIGNvdW50
KTsKKyAgICAgICAgfQorCisgICAgICAgIEZpeGVkVk1Qb29sRXhlY3V0YWJsZUFsbG9jYXRvciYg
bV9maXhlZEFsbG9jYXRvcjsKKyAgICB9OworCisjaWYgQ1BVKEFSTTY0KSAvLyBPT1BTOiBjYW4n
dCBkbyB0aGlzIGZvciBhcm02NF8zMgorICAgIGNsYXNzIFJlZ2lvbkFsbG9jYXRvciBmaW5hbCA6
IHB1YmxpYyBBbGxvY2F0b3IgeworICAgICAgICB1c2luZyBCYXNlID0gQWxsb2NhdG9yOworICAg
IHB1YmxpYzoKKyAgICAgICAgUmVnaW9uQWxsb2NhdG9yKEZpeGVkVk1Qb29sRXhlY3V0YWJsZUFs
bG9jYXRvciYgYWxsb2NhdG9yKQorICAgICAgICAgICAgOiBCYXNlKGFsbG9jYXRvcikKKyAgICAg
ICAgeworICAgICAgICB9CisKKyAgICAgICAgLy8gIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLQorICAgICAgICAvLyAgfCBqaXQgYWxsb2NhdGlvbnMgLS0+ICAgPC0tIGlzbGFu
ZHMgfAorICAgICAgICAvLyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQor
CisgICAgICAgIHVpbnRwdHJfdCBpc2xhbmRCZWdpbigpCisgICAgICAgIHsKKyAgICAgICAgICAg
IC8vIFtzdGFydCwgYWxsb2NhdG9yRW5kKQorICAgICAgICAgICAgcmV0dXJuIGVuZCAtIGlzbGFu
ZFJlZ2lvblNpemU7CisgICAgICAgIH0KKworICAgICAgICB1aW50cHRyX3QgYWxsb2NhdG9yU2l6
ZSgpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBpc2xhbmRCZWdpbigpIC0gc3RhcnQ7
CisgICAgICAgIH0KKworICAgICAgICBzaXplX3QgaXNsYW5kc1BlclBhZ2UoKQorICAgICAgICB7
CisgICAgICAgICAgICBzaXplX3QgaXNsYW5kc1BlclBhZ2UgPSBwYWdlU2l6ZSgpIC8gaXNsYW5k
U2l6ZUluQnl0ZXM7CisgICAgICAgICAgICBBU1NFUlQoaXNsYW5kc1BlclBhZ2UgKiBpc2xhbmRT
aXplSW5CeXRlcyA9PSBwYWdlU2l6ZSgpKTsKKyAgICAgICAgICAgIEFTU0VSVChpc1Bvd2VyT2ZU
d28oaXNsYW5kc1BlclBhZ2UpKTsKKyAgICAgICAgICAgIHJldHVybiBpc2xhbmRzUGVyUGFnZTsK
KyAgICAgICAgfQorCisgICAgICAgIHZvaWQgcmVsZWFzZShjb25zdCBMb2NrSG9sZGVyJiBsb2Nr
ZXIsIE1ldGFBbGxvY2F0b3JIYW5kbGUmIGhhbmRsZSkgZmluYWwKKyAgICAgICAgeworICAgICAg
ICAgICAgbV9maXhlZEFsbG9jYXRvci5oYW5kbGVXaWxsQmVSZWxlYXNlZChsb2NrZXIsIGhhbmRs
ZSk7CisgICAgICAgICAgICBCYXNlOjpyZWxlYXNlKGxvY2tlciwgaGFuZGxlKTsKKyAgICAgICAg
fQorCisgICAgICAgIHZvaWQqIGFsbG9jYXRlSXNsYW5kKCkKKyAgICAgICAgeworICAgICAgICAg
ICAgYXV0byBmaW5kUmVzdWx0ID0gWyZdICgpIC0+IHZvaWQqIHsKKyAgICAgICAgICAgICAgICBz
aXplX3QgcmVzdWx0Qml0ID0gaXNsYW5kQml0cy5maW5kQ2xlYXJCaXQoMCk7CisgICAgICAgICAg
ICAgICAgaWYgKHJlc3VsdEJpdCA9PSBpc2xhbmRCaXRzLnNpemUoKSkKKyAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgICAgICAgICAgaXNsYW5kQml0c1tyZXN1bHRC
aXRdID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICB1aW50cHRyX3QgcmVzdWx0ID0gZW5kIC0gKChy
ZXN1bHRCaXQgKyAxKSAqIGlzbGFuZFNpemVJbkJ5dGVzKTsgCisgICAgICAgICAgICAgICAgcmV0
dXJuIGJpdHdpc2VfY2FzdDx2b2lkKj4ocmVzdWx0KTsKKyAgICAgICAgICAgIH07CisKKyAgICAg
ICAgICAgIGlmICh2b2lkKiByZXN1bHQgPSBmaW5kUmVzdWx0KCkpCisgICAgICAgICAgICAgICAg
cmV0dXJuIHJlc3VsdDsKKworICAgICAgICAgICAgaXNsYW5kQml0cy5yZXNpemUoaXNsYW5kQml0
cy5zaXplKCkgKyBpc2xhbmRzUGVyUGFnZSgpKTsKKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJU
KGlzbGFuZEJpdHMuc2l6ZSgpIDw9IG1heElzbGFuZHNQZXJSZWdpb24pOyAKKworICAgICAgICAg
ICAgdWludHB0cl90IHBhZ2VCZWdpbiA9IGVuZCAtIChpc2xhbmRCaXRzLnNpemUoKSAqIGlzbGFu
ZFNpemVJbkJ5dGVzKTsgLy8gW2lzbGFuZEJlZ2luLCBlbmQpCisgICAgICAgICAgICBtX2ZpeGVk
QWxsb2NhdG9yLm1fcmVzZXJ2YXRpb24uY29tbWl0KGJpdHdpc2VfY2FzdDx2b2lkKj4ocGFnZUJl
Z2luKSwgcGFnZVNpemUoKSk7CisgICAgICAgICAgICBpbnQgYnJlYWtwb2ludCA9ICgweGQ0MDAw
MDAwIHwgMSA8PCAyMSB8IDAgPDwgNSB8IDAgPDwgMiB8IDApOworCisgICAgICAgICAgICBvc190
aHJlYWRfc2VsZl9yZXN0cmljdF9yd3hfdG9fcncoKTsKKyAgICAgICAgICAgIG1lbXNldChiaXR3
aXNlX2Nhc3Q8dm9pZCo+KHBhZ2VCZWdpbiksIGJyZWFrcG9pbnQsIHBhZ2VTaXplKCkpOworICAg
ICAgICAgICAgb3NfdGhyZWFkX3NlbGZfcmVzdHJpY3Rfcnd4X3RvX3J4KCk7CisKKyAgICAgICAg
ICAgIHZvaWQqIHJlc3VsdCA9IGZpbmRSZXN1bHQoKTsKKyAgICAgICAgICAgIFJFTEVBU0VfQVNT
RVJUKHJlc3VsdCk7CisgICAgICAgICAgICByZXR1cm4gcmVzdWx0OworICAgICAgICB9CisKKyAg
ICAgICAgdm9pZCBmcmVlSXNsYW5kKHVpbnRwdHJfdCBpc2xhbmQpCisgICAgICAgIHsKKyAgICAg
ICAgICAgIFJFTEVBU0VfQVNTRVJUKGlzbGFuZEJlZ2luKCkgPD0gaXNsYW5kICYmIGlzbGFuZCA8
IGVuZCk7CisgICAgICAgICAgICBzaXplX3QgYml0ID0gKChlbmQgLSBpc2xhbmQpIC8gaXNsYW5k
U2l6ZUluQnl0ZXMpIC0gMTsKKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKCEhaXNsYW5kQml0
c1tiaXRdKTsKKyAgICAgICAgICAgIGlzbGFuZEJpdHNbYml0XSA9IGZhbHNlOworICAgICAgICB9
CisKKyAgICAgICAgLy8gW3N0YXJ0LCBlbmQpCisgICAgICAgIHVpbnRwdHJfdCBzdGFydDsKKyAg
ICAgICAgdWludHB0cl90IGVuZDsKKworICAgICAgICBzaXplX3QgbnVtQWxsb2NhdGVkSXNsYW5k
cyB7IDAgfTsgLy8gPD0gbnVtUmVzZXJ2ZWRJc2xhbmRzCisgICAgICAgIEZhc3RCaXRWZWN0b3Ig
aXNsYW5kQml0czsKKyAgICB9OworI2VuZGlmCisKKyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgRnVu
Y3Rpb24+CisgICAgdm9pZCBmb3JFYWNoQWxsb2NhdG9yKEZ1bmN0aW9uIGZ1bmN0aW9uKQorICAg
IHsKKyNpZiBDUFUoQVJNNjQpCisgICAgICAgIGZvciAoUmVnaW9uQWxsb2NhdG9yJiBhbGxvY2F0
b3IgOiBtX2FsbG9jYXRvcnMpIHsKKyAgICAgICAgICAgIHVzaW5nIEZ1bmN0aW9uUmVzdWx0VHlw
ZSA9IGRlY2x0eXBlKGZ1bmN0aW9uKGFsbG9jYXRvcikpOworICAgICAgICAgICAgaWYgY29uc3Rl
eHByIChzdGQ6OmlzX3NhbWU8SXRlcmF0aW9uU3RhdHVzLCBGdW5jdGlvblJlc3VsdFR5cGU+Ojp2
YWx1ZSkgeworICAgICAgICAgICAgICAgIGlmIChmdW5jdGlvbihhbGxvY2F0b3IpID09IEl0ZXJh
dGlvblN0YXR1czo6RG9uZSkKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAg
ICB9IGVsc2UgeworICAgICAgICAgICAgICAgIHN0YXRpY19hc3NlcnQoc3RkOjppc19zYW1lPHZv
aWQsIEZ1bmN0aW9uUmVzdWx0VHlwZT46OnZhbHVlKTsKKyAgICAgICAgICAgICAgICBmdW5jdGlv
bihhbGxvY2F0b3IpOworICAgICAgICAgICAgfQorICAgICAgICB9CisjZWxzZQorICAgICAgICBm
dW5jdGlvbihtX2FsbG9jYXRvcik7CisjZW5kaWYKKyAgICB9CisKKyNpZiBDUFUoQVJNNjQpCisg
ICAgY2xhc3MgSXNsYW5kcyA6IHB1YmxpYyBSZWRCbGFja1RyZWU8SXNsYW5kcywgdm9pZCo+OjpO
b2RlIHsKKyAgICAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CisgICAgcHVibGljOgorICAg
ICAgICB2b2lkKiBrZXkoKSB7IHJldHVybiByb290SnVtcExvY2F0aW9uOyB9CisgICAgICAgIHZv
aWQqIHJvb3RKdW1wTG9jYXRpb247CisgICAgICAgIFZlY3Rvcjx2b2lkKj4ganVtcElzbGFuZHM7
CisgICAgfTsKKyNlbmRpZgorCisgICAgTG9jayBtX2xvY2s7CiAgICAgUGFnZVJlc2VydmF0aW9u
IG1fcmVzZXJ2YXRpb247CisjaWYgQ1BVKEFSTTY0KQorICAgIHN0ZDo6YXJyYXk8UmVnaW9uQWxs
b2NhdG9yLCBudW1iZXJPZlJlZ2lvbnM+IG1fYWxsb2NhdG9yczsKKyAgICBSZWRCbGFja1RyZWU8
SXNsYW5kcywgdm9pZCo+IGlzbGFuZHNGb3JKdW1wTG9jYXRpb247CisjZWxzZQorICAgIEFsbG9j
YXRvciBtX2FsbG9jYXRvcjsKKyNlbmRpZgogfTsKIAotRml4ZWRWTVBvb2xFeGVjdXRhYmxlQWxs
b2NhdG9yOjp+Rml4ZWRWTVBvb2xFeGVjdXRhYmxlQWxsb2NhdG9yKCkKLXsKLSAgICBtX3Jlc2Vy
dmF0aW9uLmRlYWxsb2NhdGUoKTsKLX0KLQogLy8gS2VlcCB0aGlzIHBvaW50ZXIgaW4gYSBtdXRh
YmxlIGdsb2JhbCB2YXJpYWJsZSB0byBoZWxwIExlYWtzIGZpbmQgaXQuCiAvLyBCdXQgd2UgZG8g
bm90IHVzZSB0aGlzIHBvaW50ZXIuCiBzdGF0aWMgRml4ZWRWTVBvb2xFeGVjdXRhYmxlQWxsb2Nh
dG9yKiBnbG9iYWxGaXhlZFZNUG9vbEV4ZWN1dGFibGVBbGxvY2F0b3JUb1dvcmtBcm91bmRMZWFr
cyA9IG51bGxwdHI7CkBAIC00MTcsNyArODEyLDYgQEAgdm9pZCBFeGVjdXRhYmxlQWxsb2NhdG9y
Ojppbml0aWFsaXplVW5kZQogICAgIFJFTEVBU0VfQVNTRVJUKCFnX2pzY0NvbmZpZy5maXhlZFZN
UG9vbEV4ZWN1dGFibGVBbGxvY2F0b3IpOwogICAgIGdfanNjQ29uZmlnLmZpeGVkVk1Qb29sRXhl
Y3V0YWJsZUFsbG9jYXRvciA9IG5ldyBGaXhlZFZNUG9vbEV4ZWN1dGFibGVBbGxvY2F0b3IoKTsK
ICAgICBnbG9iYWxGaXhlZFZNUG9vbEV4ZWN1dGFibGVBbGxvY2F0b3JUb1dvcmtBcm91bmRMZWFr
cyA9IGdfanNjQ29uZmlnLmZpeGVkVk1Qb29sRXhlY3V0YWJsZUFsbG9jYXRvcjsKLSAgICBDb2Rl
UHJvZmlsaW5nOjpub3RpZnlBbGxvY2F0b3IoZ19qc2NDb25maWcuZml4ZWRWTVBvb2xFeGVjdXRh
YmxlQWxsb2NhdG9yKTsKIH0KIAogYm9vbCBFeGVjdXRhYmxlQWxsb2NhdG9yOjppc1ZhbGlkKCkg
Y29uc3QKQEAgLTQyNSw3ICs4MTksNyBAQCBib29sIEV4ZWN1dGFibGVBbGxvY2F0b3I6OmlzVmFs
aWQoKSBjb25zCiAgICAgRml4ZWRWTVBvb2xFeGVjdXRhYmxlQWxsb2NhdG9yKiBhbGxvY2F0b3Ig
PSBnX2pzY0NvbmZpZy5maXhlZFZNUG9vbEV4ZWN1dGFibGVBbGxvY2F0b3I7CiAgICAgaWYgKCFh
bGxvY2F0b3IpCiAgICAgICAgIHJldHVybiBCYXNlOjppc1ZhbGlkKCk7Ci0gICAgcmV0dXJuICEh
YWxsb2NhdG9yLT5ieXRlc1Jlc2VydmVkKCk7CisgICAgcmV0dXJuIGFsbG9jYXRvci0+aXNWYWxp
ZCgpOwogfQogCiBib29sIEV4ZWN1dGFibGVBbGxvY2F0b3I6OnVuZGVyTWVtb3J5UHJlc3N1cmUo
KQpAQCAtNDU2LDExICs4NTAsMTEgQEAgZG91YmxlIEV4ZWN1dGFibGVBbGxvY2F0b3I6Om1lbW9y
eVByZXNzdQogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLVJlZlB0cjxFeGVjdXRhYmxlTWVtb3J5
SGFuZGxlPiBFeGVjdXRhYmxlQWxsb2NhdG9yOjphbGxvY2F0ZShzaXplX3Qgc2l6ZUluQnl0ZXMs
IHZvaWQqIG93bmVyVUlELCBKSVRDb21waWxhdGlvbkVmZm9ydCBlZmZvcnQpCitSZWZQdHI8RXhl
Y3V0YWJsZU1lbW9yeUhhbmRsZT4gRXhlY3V0YWJsZUFsbG9jYXRvcjo6YWxsb2NhdGUoc2l6ZV90
IHNpemVJbkJ5dGVzLCBKSVRDb21waWxhdGlvbkVmZm9ydCBlZmZvcnQpCiB7CiAgICAgRml4ZWRW
TVBvb2xFeGVjdXRhYmxlQWxsb2NhdG9yKiBhbGxvY2F0b3IgPSBnX2pzY0NvbmZpZy5maXhlZFZN
UG9vbEV4ZWN1dGFibGVBbGxvY2F0b3I7CiAgICAgaWYgKCFhbGxvY2F0b3IpCi0gICAgICAgIHJl
dHVybiBCYXNlOjphbGxvY2F0ZShzaXplSW5CeXRlcywgb3duZXJVSUQsIGVmZm9ydCk7CisgICAg
ICAgIHJldHVybiBCYXNlOjphbGxvY2F0ZShzaXplSW5CeXRlcywgZWZmb3J0KTsKICAgICBpZiAo
T3B0aW9uczo6bG9nRXhlY3V0YWJsZUFsbG9jYXRpb24oKSkgewogICAgICAgICBNZXRhQWxsb2Nh
dG9yOjpTdGF0aXN0aWNzIHN0YXRzID0gYWxsb2NhdG9yLT5jdXJyZW50U3RhdGlzdGljcygpOwog
ICAgICAgICBkYXRhTG9nKCJBbGxvY2F0aW5nICIsIHNpemVJbkJ5dGVzLCAiIGJ5dGVzIG9mIGV4
ZWN1dGFibGUgbWVtb3J5IHdpdGggIiwgc3RhdHMuYnl0ZXNBbGxvY2F0ZWQsICIgYnl0ZXMgYWxs
b2NhdGVkLCAiLCBzdGF0cy5ieXRlc1Jlc2VydmVkLCAiIGJ5dGVzIHJlc2VydmVkLCBhbmQgIiwg
c3RhdHMuYnl0ZXNDb21taXR0ZWQsICIgY29tbWl0dGVkLlxuIik7CkBAIC00ODcsNyArODgxLDcg
QEAgUmVmUHRyPEV4ZWN1dGFibGVNZW1vcnlIYW5kbGU+IEV4ZWN1dGFibAogICAgICAgICB9CiAg
ICAgfQogCi0gICAgUmVmUHRyPEV4ZWN1dGFibGVNZW1vcnlIYW5kbGU+IHJlc3VsdCA9IGFsbG9j
YXRvci0+YWxsb2NhdGUoc2l6ZUluQnl0ZXMsIG93bmVyVUlEKTsKKyAgICBSZWZQdHI8RXhlY3V0
YWJsZU1lbW9yeUhhbmRsZT4gcmVzdWx0ID0gYWxsb2NhdG9yLT5hbGxvY2F0ZShzaXplSW5CeXRl
cyk7CiAgICAgaWYgKCFyZXN1bHQpIHsKICAgICAgICAgaWYgKGVmZm9ydCAhPSBKSVRDb21waWxh
dGlvbkNhbkZhaWwpIHsKICAgICAgICAgICAgIGRhdGFMb2coIlJhbiBvdXQgb2YgZXhlY3V0YWJs
ZSBtZW1vcnkgd2hpbGUgYWxsb2NhdGluZyAiLCBzaXplSW5CeXRlcywgIiBieXRlcy5cbiIpOwpA
QCAtNTM5LDYgKzkzMywyNiBAQCB2b2lkIEV4ZWN1dGFibGVBbGxvY2F0b3I6OmR1bXBQcm9maWxl
KCkKIH0KICNlbmRpZgogCisjaWYgQ1BVKEFSTTY0KQordm9pZCogRXhlY3V0YWJsZUFsbG9jYXRv
cjo6Z2V0SnVtcElzbGFuZFRvKHZvaWQqIGZyb20sIHZvaWQqIG5ld0Rlc3RpbmF0aW9uKQorewor
ICAgIEZpeGVkVk1Qb29sRXhlY3V0YWJsZUFsbG9jYXRvciogYWxsb2NhdG9yID0gZ19qc2NDb25m
aWcuZml4ZWRWTVBvb2xFeGVjdXRhYmxlQWxsb2NhdG9yOworICAgIGlmICghYWxsb2NhdG9yKQor
ICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworCisgICAgcmV0dXJuIGFsbG9j
YXRvci0+bWFrZUlzbGFuZChiaXR3aXNlX2Nhc3Q8dWludHB0cl90Pihmcm9tKSwgYml0d2lzZV9j
YXN0PHVpbnRwdHJfdD4obmV3RGVzdGluYXRpb24pLCBmYWxzZSk7Cit9CisKK3ZvaWQqIEV4ZWN1
dGFibGVBbGxvY2F0b3I6OmdldE5ld0p1bXBJc2xhbmRUbyh2b2lkKiBmcm9tLCB2b2lkKiBuZXdE
ZXN0aW5hdGlvbikKK3sKKyAgICBGaXhlZFZNUG9vbEV4ZWN1dGFibGVBbGxvY2F0b3IqIGFsbG9j
YXRvciA9IGdfanNjQ29uZmlnLmZpeGVkVk1Qb29sRXhlY3V0YWJsZUFsbG9jYXRvcjsKKyAgICBp
ZiAoIWFsbG9jYXRvcikKKyAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKwor
ICAgIHJldHVybiBhbGxvY2F0b3ItPm1ha2VJc2xhbmQoYml0d2lzZV9jYXN0PHVpbnRwdHJfdD4o
ZnJvbSksIGJpdHdpc2VfY2FzdDx1aW50cHRyX3Q+KG5ld0Rlc3RpbmF0aW9uKSwgdHJ1ZSk7Cit9
CisjZW5kaWYKKwogdm9pZCogc3RhcnRPZkZpeGVkRXhlY3V0YWJsZU1lbW9yeVBvb2xJbXBsKCkK
IHsKICAgICBGaXhlZFZNUG9vbEV4ZWN1dGFibGVBbGxvY2F0b3IqIGFsbG9jYXRvciA9IGdfanNj
Q29uZmlnLmZpeGVkVk1Qb29sRXhlY3V0YWJsZUFsbG9jYXRvcjsKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvRXhlY3V0YWJsZUFsbG9jYXRvci5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvRXhlY3V0YWJsZUFsbG9jYXRvci5oCShyZXZpc2lvbiAyNTc4
NjYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0V4ZWN1dGFibGVBbGxvY2F0b3IuaAko
d29ya2luZyBjb3B5KQpAQCAtNzEsNyArNzEsNyBAQCBwdWJsaWM6CiAKICAgICBzdGF0aWMgdm9p
ZCBkdW1wUHJvZmlsZSgpIHsgfQogCi0gICAgUmVmUHRyPEV4ZWN1dGFibGVNZW1vcnlIYW5kbGU+
IGFsbG9jYXRlKHNpemVfdCwgdm9pZCosIEpJVENvbXBpbGF0aW9uRWZmb3J0KSB7IHJldHVybiBu
dWxscHRyOyB9CisgICAgUmVmUHRyPEV4ZWN1dGFibGVNZW1vcnlIYW5kbGU+IGFsbG9jYXRlKHNp
emVfdCwgSklUQ29tcGlsYXRpb25FZmZvcnQpIHsgcmV0dXJuIG51bGxwdHI7IH0KIAogICAgIHN0
YXRpYyB2b2lkIHNldEpJVEVuYWJsZWQoYm9vbCkgeyB9OwogICAgIApAQCAtMTc2LDcgKzE3Niw3
IEBAIHB1YmxpYzoKICAgICAKICAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgdm9pZCBzZXRK
SVRFbmFibGVkKGJvb2wpOwogCi0gICAgUmVmUHRyPEV4ZWN1dGFibGVNZW1vcnlIYW5kbGU+IGFs
bG9jYXRlKHNpemVfdCBzaXplSW5CeXRlcywgdm9pZCogb3duZXJVSUQsIEpJVENvbXBpbGF0aW9u
RWZmb3J0KTsKKyAgICBSZWZQdHI8RXhlY3V0YWJsZU1lbW9yeUhhbmRsZT4gYWxsb2NhdGUoc2l6
ZV90IHNpemVJbkJ5dGVzLCBKSVRDb21waWxhdGlvbkVmZm9ydCk7CiAKICAgICBib29sIGlzVmFs
aWRFeGVjdXRhYmxlTWVtb3J5KGNvbnN0IEFic3RyYWN0TG9ja2VyJiwgdm9pZCogYWRkcmVzcyk7
CiAKQEAgLTE4NCw2ICsxODQsMTEgQEAgcHVibGljOgogCiAgICAgTG9jayYgZ2V0TG9jaygpIGNv
bnN0OwogCisjaWYgQ1BVKEFSTTY0KQorICAgIHZvaWQqIGdldEp1bXBJc2xhbmRUbyh2b2lkKiBm
cm9tLCB2b2lkKiBuZXdEZXN0aW5hdGlvbik7CisgICAgdm9pZCogZ2V0TmV3SnVtcElzbGFuZFRv
KHZvaWQqIGZyb20sIHZvaWQqIG5ld0Rlc3RpbmF0aW9uKTsKKyNlbmRpZgorCiBwcml2YXRlOgog
ICAgIEV4ZWN1dGFibGVBbGxvY2F0b3IoKSA9IGRlZmF1bHQ7CiAgICAgfkV4ZWN1dGFibGVBbGxv
Y2F0b3IoKSA9IGRlZmF1bHQ7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9D
b21tb25TbG93UGF0aHMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0NvbW1vblNsb3dQYXRocy5jcHAJKHJldmlzaW9uIDI1Nzg2NikKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbW1vblNsb3dQYXRocy5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTMyLDcgKzMyLDYgQEAKICNpbmNsdWRlICJCeXRlY29kZVN0cnVjdHMuaCIKICNpbmNsdWRl
ICJDYWxsRnJhbWUuaCIKICNpbmNsdWRlICJDbG9uZWRBcmd1bWVudHMuaCIKLSNpbmNsdWRlICJD
b2RlUHJvZmlsaW5nLmgiCiAjaW5jbHVkZSAiRGVmaW5lUHJvcGVydHlBdHRyaWJ1dGVzLmgiCiAj
aW5jbHVkZSAiRGlyZWN0QXJndW1lbnRzLmgiCiAjaW5jbHVkZSAiRXJyb3IuaCIKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbXBsZXRpb24uY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbXBsZXRpb24uY3BwCShyZXZpc2lvbiAy
NTc4NjYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db21wbGV0aW9uLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMjcsNyArMjcsNiBAQAogI2luY2x1ZGUgIkNhbGxGcmFtZS5oIgog
I2luY2x1ZGUgIkNhdGNoU2NvcGUuaCIKICNpbmNsdWRlICJDb2RlQ2FjaGUuaCIKLSNpbmNsdWRl
ICJDb2RlUHJvZmlsaW5nLmgiCiAjaW5jbHVkZSAiRXhjZXB0aW9uLmgiCiAjaW5jbHVkZSAiSWRl
bnRpZmllcklubGluZXMuaCIKICNpbmNsdWRlICJJbnRlcnByZXRlci5oIgpAQCAtMTM4LDggKzEz
Nyw2IEBAIEpTVmFsdWUgZXZhbHVhdGUoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE8KICAgICBSRUxF
QVNFX0FTU0VSVCh2bS5hdG9tU3RyaW5nVGFibGUoKSA9PSBUaHJlYWQ6OmN1cnJlbnQoKS5hdG9t
U3RyaW5nVGFibGUoKSk7CiAgICAgUkVMRUFTRV9BU1NFUlQoIXZtLmlzQ29sbGVjdG9yQnVzeU9u
Q3VycmVudFRocmVhZCgpKTsKIAotICAgIENvZGVQcm9maWxpbmcgcHJvZmlsZShzb3VyY2UpOwot
CiAgICAgaWYgKCF0aGlzVmFsdWUgfHwgdGhpc1ZhbHVlLmlzVW5kZWZpbmVkT3JOdWxsKCkpCiAg
ICAgICAgIHRoaXNWYWx1ZSA9IGdsb2JhbE9iamVjdDsKICAgICBKU09iamVjdCogdGhpc09iaiA9
IGpzQ2FzdDxKU09iamVjdCo+KHRoaXNWYWx1ZS50b1RoaXMoZ2xvYmFsT2JqZWN0LCBOb3RTdHJp
Y3RNb2RlKSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU01vZHVsZUxv
YWRlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNN
b2R1bGVMb2FkZXIuY3BwCShyZXZpc2lvbiAyNTc4NjYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU01vZHVsZUxvYWRlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI5LDcgKzI5
LDYgQEAKIAogI2luY2x1ZGUgIkJ1aWx0aW5OYW1lcy5oIgogI2luY2x1ZGUgIkNhdGNoU2NvcGUu
aCIKLSNpbmNsdWRlICJDb2RlUHJvZmlsaW5nLmgiCiAjaW5jbHVkZSAiRXJyb3IuaCIKICNpbmNs
dWRlICJFeGNlcHRpb24uaCIKICNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCkBAIC00MDAsOCArMzk5
LDYgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBtb2R1bGVMb2FkZQogICAgICAgICBy
ZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKEpTV2ViQXNzZW1ibHk6Omluc3RhbnRpYXRlKGdsb2JhbE9i
amVjdCwgcHJvbWlzZSwgbW9kdWxlS2V5LCBqc1NvdXJjZUNvZGUpKTsKICNlbmRpZgogCi0gICAg
Q29kZVByb2ZpbGluZyBwcm9maWxlKHNvdXJjZUNvZGUpOwotCiAgICAgUGFyc2VyRXJyb3IgZXJy
b3I7CiAgICAgc3RkOjp1bmlxdWVfcHRyPE1vZHVsZVByb2dyYW1Ob2RlPiBtb2R1bGVQcm9ncmFt
Tm9kZSA9IHBhcnNlPE1vZHVsZVByb2dyYW1Ob2RlPigKICAgICAgICAgdm0sIHNvdXJjZUNvZGUs
IElkZW50aWZpZXIoKSwgSlNQYXJzZXJCdWlsdGluTW9kZTo6Tm90QnVpbHRpbiwKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnNMaXN0LmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9uc0xpc3QuaAkocmV2aXNpb24gMjU3
ODY2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9uc0xpc3QuaAkod29y
a2luZyBjb3B5KQpAQCAtNTAwLDYgKzUwMCw3IEBAIGNvbnN0ZXhwciBib29sIGVuYWJsZVdlYkFz
c2VtYmx5U3RyZWFtaW4KICAgICB2KEJvb2wsIGZvcmNlT1NSRXhpdFRvTExJbnQsIGZhbHNlLCBO
b3JtYWwsICJJZiB0cnVlLCB3ZSBhbHdheXMgZXhpdCB0byB0aGUgTExJbnQuIElmIGZhbHNlLCB3
ZSBleGl0IHRvIHdoYXRldmVyIGlzIG1vc3QgY29udmVuaWVudC4iKSBcCiAgICAgdihVbnNpZ25l
ZCwgZ2V0QnlWYWxJQ01heE51bWJlck9mSWRlbnRpZmllcnMsIDQsIE5vcm1hbCwgIk51bWJlciBv
ZiBpZGVudGlmaWVycyB3ZSBzZWUgaW4gdGhlIExMSW50IHRoYXQgY291bGQgY2F1c2UgdXMgdG8g
YmFpbCBvbiBnZW5lcmF0aW5nIGFuIElDIGZvciBnZXRfYnlfdmFsLiIpIFwKICAgICB2KEJvb2ws
IHVzZUNsYXNzRmllbGRzLCBmYWxzZSwgTm9ybWFsLCAiSWYgdHJ1ZSwgdGhlIHBhcnNlciB3aWxs
IHVuZGVyc3RhbmQgZGF0YSBmaWVsZHMgaW5zaWRlIGNsYXNzZXMuIikgXAorICAgIHYoQm9vbCwg
dXNlUmFuZG9taXppbmdFeGVjdXRhYmxlSXNsYW5kQWxsb2NhdGlvbiwgZmFsc2UsIE5vcm1hbCwg
IkZvciB0aGUgYXJtNjQgRXhlY3V0YWJsZUFsbG9jYXRvciwgaWYgdHJ1ZSwgc2VsZWN0IHdoaWNo
IHJlZ2lvbiB0byB1c2UgcmFuZG9tbHkuIFRoaXMgaXMgdXNlZnVsIGZvciB0ZXN0aW5nIHRoYXQg
anVtcCBpc2xhbmRzIHdvcmsuIikgXAogCiBlbnVtIE9wdGlvbkVxdWl2YWxlbmNlIHsKICAgICBT
YW1lT3B0aW9uLApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3Rvb2xzL0NvZGVQcm9maWxl
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvdG9vbHMvQ29kZVByb2Zp
bGUuY3BwCShyZXZpc2lvbiAyNTc4NjYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvdG9vbHMv
Q29kZVByb2ZpbGUuY3BwCShub25leGlzdGVudCkKQEAgLTEsMTcyICswLDAgQEAKLS8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElT
JycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5o
IgotI2luY2x1ZGUgIkNvZGVQcm9maWxlLmgiCi0KLSNpbmNsdWRlICJDb2RlQmxvY2suaCIKLSNp
bmNsdWRlICJDb2RlUHJvZmlsaW5nLmgiCi0jaW5jbHVkZSAiTGlua0J1ZmZlci5oIgotI2luY2x1
ZGUgIlByb2ZpbGVUcmVlTm9kZS5oIgotI2luY2x1ZGUgPHd0Zi9TdGFja1RyYWNlLmg+Ci0jaW5j
bHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+Ci0KLW5hbWVzcGFjZSBKU0MgewotCi0vLyBNYXAg
ZnJvbSBDb2RlVHlwZSBlbnVtIHRvIGEgY29ycmVzcG9uZGluZyBuYW1lLgotc3RhdGljIGNvbnN0
IGNoYXIqIGNvbnN0IHNfY29kZVR5cGVOYW1lc1tDb2RlUHJvZmlsZTo6TnVtYmVyT2ZDb2RlVHlw
ZXNdID0gewotICAgICJbW0VuZ2luZUNvZGVdXSIsCi0gICAgIltbR2xvYmFsVGh1bmtdXSIsCi0g
ICAgIltbUmVnRXhwQ29kZV1dIiwKLSAgICAiW1tERkdKSVRdXSIsCi0gICAgIltbQmFzZWxpbmVP
bmx5XV0iLAotICAgICJbW0Jhc2VsaW5lUHJvZmlsZV1dIiwKLSAgICAiW1tCYXNlbGluZU9TUl1d
IiwKLSAgICAiW1tFbmdpbmVGcmFtZV1dIgotfTsKLQotLy8gSGVscGVyIGZ1bmN0aW9uLCB0cnVu
Y2F0ZSB0cmFjZXMgdG8gcHJ1bmUgdGhlIG91dHB1dCAmIG1ha2UgdmVyeSB2ZXJib3NlIG1vZGUg
YSBsaXR0bGUgbW9yZSByZWFkYWJsZS4KLXN0YXRpYyBib29sIHRydW5jYXRlVHJhY2UoY29uc3Qg
Y2hhciogc3ltYm9sTmFtZSkKLXsKLSAgICByZXR1cm4gIXN0cmNtcChzeW1ib2xOYW1lLCAiSlND
OjpCeXRlY29kZUdlbmVyYXRvcjo6Z2VuZXJhdGUoKSIpCi0gICAgICAgIHx8ICFzdHJjbXAoc3lt
Ym9sTmFtZSwgIkpTQzo6UGFyc2VyPEpTQzo6TGV4ZXI8dW5zaWduZWQgY2hhcj4+OjpwYXJzZUlu
bmVyKCkiKQotICAgICAgICB8fCAhc3RyY21wKHN5bWJvbE5hbWUsICJXVEY6OmZhc3RNYWxsb2Mo
dW5zaWduZWQgbG9uZykiKQotICAgICAgICB8fCAhc3RyY21wKHN5bWJvbE5hbWUsICJXVEY6OmNh
bGN1bGF0ZVVUQ09mZnNldCgpIikKLSAgICAgICAgfHwgIXN0cmNtcChzeW1ib2xOYW1lLCAiSlND
OjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpwYXJzZUNvZGVCbG9jaygpIik7Ci0gICAgICAgIAotfQot
Ci0vLyBFYWNoIHRyYWNlIGNvbnNpc3RzIG9mIGEgc2VxdWVuY2Ugb2YgemVybyBvciBtb3JlICdF
bmdpbmVGcmFtZScgZW50cmllcywKLS8vIGZvbGxvd2VkIGJ5IGEgc2FtcGxlIGluIEpJVCBjb2Rl
LCBvciBvbmUgb3IgbW9yZSAnRW5naW5lRnJhbWUnIGVudHJpZXMsCi0vLyBmb2xsb3dlZCBieSBh
ICdFbmdpbmVDb2RlJyB0ZXJtaW5hdG9yLgotdm9pZCBDb2RlUHJvZmlsZTo6c2FtcGxlKHZvaWQq
IHBjLCB2b2lkKiogZnJhbWVQb2ludGVyKQotewotICAgIC8vIERpc2FsbG93IHRyYWNlcyBjb250
YWluaW5nIG9ubHkgYSAnRW5naW5lQ29kZScgdGVybWluYXRvciwgd2l0aG91dCBhbnkgJ0VuZ2lu
ZUZyYW1lJyBmcmFtZXMuCi0gICAgaWYgKCFmcmFtZVBvaW50ZXIpCi0gICAgICAgIHJldHVybjsK
LQotICAgIHdoaWxlIChmcmFtZVBvaW50ZXIpIHsKLSAgICAgICAgQ29kZVR5cGUgdHlwZTsKLQot
I2lmIEVOQUJMRShKSVQpCi0gICAgICAgIC8vIERldGVybWluZSBpZiB0aGlzIHNhbXBsZSBmZWxs
IGluIEpJVCBjb2RlLCBhbmQgaWYgc28sIGZyb20gd2hpY2ggSklUICYgd2h5LgotICAgICAgICB2
b2lkKiBvd25lclVJRCA9IENvZGVQcm9maWxpbmc6OmdldE93bmVyVUlERm9yUEMocGMpOwotCi0g
ICAgICAgIGlmICghb3duZXJVSUQpCi0gICAgICAgICAgICB0eXBlID0gRW5naW5lRnJhbWU7Ci0g
ICAgICAgIGVsc2UgaWYgKG93bmVyVUlEID09IEdMT0JBTF9USFVOS19JRCkKLSAgICAgICAgICAg
IHR5cGUgPSBHbG9iYWxUaHVuazsKLSAgICAgICAgZWxzZSBpZiAob3duZXJVSUQgPT0gUkVHRVhQ
X0NPREVfSUQpCi0gICAgICAgICAgICB0eXBlID0gUmVnRXhwQ29kZTsKLSAgICAgICAgZWxzZSB7
Ci0gICAgICAgICAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9IHN0YXRpY19jYXN0PENvZGVCbG9j
ayo+KG93bmVyVUlEKTsKLSAgICAgICAgICAgIGlmIChjb2RlQmxvY2stPmppdFR5cGUoKSA9PSBK
SVRUeXBlOjpERkdKSVQpCi0gICAgICAgICAgICAgICAgdHlwZSA9IERGR0pJVDsKLSAgICAgICAg
ICAgIGVsc2UgaWYgKCFjYW5Db21waWxlKGNvZGVCbG9jay0+Y2FwYWJpbGl0eUxldmVsU3RhdGUo
KSkpCi0gICAgICAgICAgICAgICAgdHlwZSA9IEJhc2VsaW5lT25seTsKLSAgICAgICAgICAgIGVs
c2UgaWYgKGNvZGVCbG9jay0+cmVwbGFjZW1lbnQoKSkKLSAgICAgICAgICAgICAgICB0eXBlID0g
QmFzZWxpbmVPU1I7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgdHlwZSA9IEJh
c2VsaW5lUHJvZmlsZTsKLSAgICAgICAgfQotI2Vsc2UKLSAgICAgICAgdHlwZSA9IEVuZ2luZUZy
YW1lOwotI2VuZGlmCi0KLSAgICAgICAgLy8gQSBzYW1wbGUgaW4gSklUIGNvZGUgdGVybWluYXRl
cyB0aGUgdHJhY2UuCi0gICAgICAgIG1fc2FtcGxlcy5hcHBlbmQoQ29kZVJlY29yZChwYywgdHlw
ZSkpOwotICAgICAgICBpZiAodHlwZSAhPSBFbmdpbmVGcmFtZSkKLSAgICAgICAgICAgIHJldHVy
bjsKLQotI2lmIE9TKERBUldJTikgJiYgQ1BVKFg4Nl82NCkKLSAgICAgICAgLy8gV2FsayB1cCB0
aGUgc3RhY2suCi0gICAgICAgIHBjID0gZnJhbWVQb2ludGVyWzFdOwotICAgICAgICBmcmFtZVBv
aW50ZXIgPSByZWludGVycHJldF9jYXN0PHZvaWQqKj4oKmZyYW1lUG9pbnRlcik7Ci0jZWxpZiBP
UyhMSU5VWCkgJiYgQ1BVKFg4NikKLSAgICAgICAgLy8gRG9uJ3QgdW53aW5kIHRoZSBzdGFjayBh
cyBzb21lIGRlcGVuZGVudCB0aGlyZCBwYXJ0eSBsaWJyYXJpZXMKLSAgICAgICAgLy8gbWF5IGJl
IGNvbXBpbGVkIHdpdGggLWZvbWl0LWZyYW1lLXBvaW50ZXIuCi0gICAgICAgIGZyYW1lUG9pbnRl
ciA9IDA7Ci0jZWxzZQotICAgICAgICAvLyBUaGlzIHBsYXRmb3JtIGlzIG5vdCB5ZXQgc3VwcG9y
dGVkIQotICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwotI2VuZGlmCi0gICAg
fQotCi0gICAgLy8gSWYgd2UgZ2V0IGhlcmUsIHdlIHdhbGtlZCB0aGUgZW50aXJlIHN0YWNrIHdp
dGhvdXQgZmluZGluZyBhbnkgZnJhbWVzIG9mIEpJVCBjb2RlLgotICAgIG1fc2FtcGxlcy5hcHBl
bmQoQ29kZVJlY29yZCgwLCBFbmdpbmVDb2RlKSk7Ci19Ci0KLXZvaWQgQ29kZVByb2ZpbGU6OnJl
cG9ydCgpCi17Ci0gICAgZGF0YUxvZ0YoIjxDb2RlUHJvZmlsaW5nICVzOiVkPlxuIiwgbV9maWxl
LmRhdGEoKSwgbV9saW5lTnVtYmVyKTsKLQotICAgIC8vIEhvdyBtYW55IGZyYW1lcyBvZiBDLWNv
ZGUgdG8gcHJpbnQgLSAwLCBpZiBub3QgdmVyYm9zZSwgMSBpZiB2ZXJib3NlLCB1cCB0byAxMDI0
IGlmIHZlcnkgdmVyYm9zZS4KLSAgICB1bnNpZ25lZCByZWN1cnNpb25MaW1pdCA9IENvZGVQcm9m
aWxpbmc6OmJlVmVyeVZlcmJvc2UoKSA/IDEwMjQgOiBDb2RlUHJvZmlsaW5nOjpiZVZlcmJvc2Uo
KTsKLQotICAgIFByb2ZpbGVUcmVlTm9kZSBwcm9maWxlOwotCi0gICAgLy8gV2FsayB0aHJvdWdo
IHRoZSBzYW1wbGUgYnVmZmVyLgotICAgIHNpemVfdCB0cmFjZSA9IDA7Ci0gICAgd2hpbGUgKHRy
YWNlIDwgbV9zYW1wbGVzLnNpemUoKSkgewotCi0gICAgICAgIC8vIEFsbCB0cmFjZXMgYXJlIHpl
cm8gb3IgbW9yZSAnRW5naW5lRnJhbWUncywgZm9sbG93ZWQgYnkgYSBub24tJ0VuZ2luZUZyYW1l
Jy4KLSAgICAgICAgLy8gU2NhbiB0byBmaW5kIHRoZSBsYXN0IHNhbXBsZSBpbiB0aGUgdHJhY2Uu
Ci0gICAgICAgIHNpemVfdCBsYXN0SW5UcmFjZSA9IHRyYWNlOwotICAgICAgICB3aGlsZSAobV9z
YW1wbGVzW2xhc3RJblRyYWNlXS50eXBlID09IEVuZ2luZUZyYW1lKQotICAgICAgICAgICAgKyts
YXN0SW5UcmFjZTsKLQotICAgICAgICAvLyBXZSB1c2UgdGhlIGxhc3Qgc2FtcGxlIHR5cGUgdG8g
bG9vayB1cCBhIG5hbWUgKHVzZWQgYXMgYSBidWNrZXQgaW4gdGhlIHByb2ZpbGVyKS4KLSAgICAg
ICAgUHJvZmlsZVRyZWVOb2RlKiBjYWxsYmFja3MgPSBwcm9maWxlLnNhbXBsZUNoaWxkKHNfY29k
ZVR5cGVOYW1lc1ttX3NhbXBsZXNbbGFzdEluVHJhY2VdLnR5cGVdKTsKLQotICAgICAgICAvLyBJ
ZiB0aGVyZSBhcmUgYW55IHNhbXBsZXMgaW4gQy1jb2RlLCBhZGQgdXAgdG8gcmVjdXJzaW9uTGlt
aXQgb2YgdGhlbSBpbnRvIHRoZSBwcm9maWxlIHRyZWUuCi0gICAgICAgIHNpemVfdCBsYXN0RW5n
aW5lRnJhbWUgPSBsYXN0SW5UcmFjZTsKLSAgICAgICAgZm9yICh1bnNpZ25lZCBjb3VudCA9IDA7
IGxhc3RFbmdpbmVGcmFtZSA+IHRyYWNlICYmIGNvdW50IDwgcmVjdXJzaW9uTGltaXQ7ICsrY291
bnQpIHsKLSAgICAgICAgICAgIC0tbGFzdEVuZ2luZUZyYW1lOwotICAgICAgICAgICAgQVNTRVJU
KG1fc2FtcGxlc1tsYXN0RW5naW5lRnJhbWVdLnR5cGUgPT0gRW5naW5lRnJhbWUpOwotICAgICAg
ICAgICAgY29uc3QgY2hhciogbmFtZSA9ICI8dW5rbm93bj4iOwotICAgICAgICAgICAgYXV0byBk
ZW1hbmdsZWQgPSBTdGFja1RyYWNlOjpkZW1hbmdsZShtX3NhbXBsZXNbbGFzdEVuZ2luZUZyYW1l
XS5wYyk7Ci0gICAgICAgICAgICBpZiAoZGVtYW5nbGVkKQotICAgICAgICAgICAgICAgIG5hbWUg
PSBkZW1hbmdsZWQtPmRlbWFuZ2xlZE5hbWUoKSA/IGRlbWFuZ2xlZC0+ZGVtYW5nbGVkTmFtZSgp
IDogZGVtYW5nbGVkLT5tYW5nbGVkTmFtZSgpOwotICAgICAgICAgICAgY2FsbGJhY2tzID0gY2Fs
bGJhY2tzLT5zYW1wbGVDaGlsZChuYW1lKTsKLSAgICAgICAgICAgIGlmICh0cnVuY2F0ZVRyYWNl
KG5hbWUpKQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8g
TW92ZSBvbiB0byB0aGUgbmV4dCB0cmFjZS4KLSAgICAgICAgdHJhY2UgPSBsYXN0SW5UcmFjZSAr
IDE7Ci0gICAgICAgIEFTU0VSVCh0cmFjZSA8PSBtX3NhbXBsZXMuc2l6ZSgpKTsKLSAgICB9Ci0K
LSAgICAvLyBPdXRwdXQgdGhlIHByb2ZpbGUgdHJlZS4KLSAgICBkYXRhTG9nRigiVG90YWwgc2Ft
cGxlczogJWxsZFxuIiwgc3RhdGljX2Nhc3Q8bG9uZyBsb25nPihwcm9maWxlLmNoaWxkQ291bnQo
KSkpOwotICAgIHByb2ZpbGUuZHVtcCgpOwotICAgIAotICAgIGZvciAoc2l6ZV90IGkgPSAwIDsg
aSA8IG1fY2hpbGRyZW4uc2l6ZSgpOyArK2kpCi0gICAgICAgIG1fY2hpbGRyZW5baV0tPnJlcG9y
dCgpOwotCi0gICAgZGF0YUxvZ0YoIjwvQ29kZVByb2ZpbGluZyAlczolZD5cbiIsIG1fZmlsZS5k
YXRhKCksIG1fbGluZU51bWJlcik7Ci19Ci0KLX0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS90b29scy9Db2RlUHJvZmlsZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS90b29scy9Db2RlUHJvZmlsZS5oCShyZXZpc2lvbiAyNTc4NjYpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvdG9vbHMvQ29kZVByb2ZpbGUuaAkobm9uZXhpc3RlbnQpCkBAIC0xLDg5ICswLDAg
QEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAq
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
Ci0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQotI3ByYWdt
YSBvbmNlCi0KLSNpbmNsdWRlICJTb3VyY2VDb2RlLmgiCi0jaW5jbHVkZSAiVGllcmVkTU1hcEFy
cmF5LmgiCi0jaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgotCi1uYW1lc3BhY2UgSlNDIHsK
LQotY2xhc3MgQ29kZVByb2ZpbGUgewotICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwotcHVi
bGljOgotICAgIENvZGVQcm9maWxlKGNvbnN0IFNvdXJjZUNvZGUmIHNvdXJjZSwgQ29kZVByb2Zp
bGUqIHBhcmVudCkKLSAgICAgICAgOiBtX2ZpbGUoU3RyaW5nKHNvdXJjZS5wcm92aWRlcigpLT51
cmwoKSkudXRmOCgpKQotICAgICAgICAsIG1fbGluZU51bWJlcihzb3VyY2UuZmlyc3RMaW5lKCku
b25lQmFzZWRJbnQoKSkKLSAgICAgICAgLCBtX3BhcmVudChwYXJlbnQpCi0gICAgewotICAgICAg
ICBpZiAocGFyZW50KQotICAgICAgICAgICAgcGFyZW50LT5hZGRDaGlsZChzdGQ6OnVuaXF1ZV9w
dHI8Q29kZVByb2ZpbGU+KHRoaXMpKTsKLSAgICB9Ci0KLSAgICB2b2lkIHNhbXBsZSh2b2lkKiBw
Yywgdm9pZCoqIGZyYW1lUG9pbnRlcik7Ci0gICAgdm9pZCByZXBvcnQoKTsKLQotICAgIENvZGVQ
cm9maWxlKiBwYXJlbnQoKQotICAgIHsKLSAgICAgICAgcmV0dXJuIG1fcGFyZW50OwotICAgIH0K
LSAgICAKLSAgICB2b2lkIGFkZENoaWxkKHN0ZDo6dW5pcXVlX3B0cjxDb2RlUHJvZmlsZT4gY2hp
bGQpCi0gICAgewotICAgICAgICBtX2NoaWxkcmVuLmFwcGVuZChXVEZNb3ZlKGNoaWxkKSk7Ci0g
ICAgfQotCi0gICAgZW51bSBDb2RlVHlwZSB7Ci0gICAgICAgIEVuZ2luZUNvZGUsCi0gICAgICAg
IEdsb2JhbFRodW5rLAotICAgICAgICBSZWdFeHBDb2RlLAotICAgICAgICBERkdKSVQsCi0gICAg
ICAgIEJhc2VsaW5lT25seSwKLSAgICAgICAgQmFzZWxpbmVQcm9maWxlLAotICAgICAgICBCYXNl
bGluZU9TUiwKLSAgICAgICAgRW5naW5lRnJhbWUsCi0gICAgICAgIE51bWJlck9mQ29kZVR5cGVz
Ci0gICAgfTsKLQotcHJpdmF0ZToKLSAgICBzdHJ1Y3QgQ29kZVJlY29yZCB7Ci0gICAgICAgIENv
ZGVSZWNvcmQodm9pZCogcGMsIENvZGVUeXBlIHR5cGUpCi0gICAgICAgICAgICA6IHBjKHBjKQot
ICAgICAgICAgICAgLCB0eXBlKHR5cGUpCi0gICAgICAgIHsKLSAgICAgICAgfQotICAgICAgICB2
b2lkKiBwYzsKLSAgICAgICAgQ29kZVR5cGUgdHlwZTsKLSAgICB9OwotCi0gICAgQ1N0cmluZyBt
X2ZpbGU7Ci0gICAgdW5zaWduZWQgbV9saW5lTnVtYmVyOwotICAgIENvZGVQcm9maWxlKiBtX3Bh
cmVudDsKLSAgICBWZWN0b3I8c3RkOjp1bmlxdWVfcHRyPENvZGVQcm9maWxlPj4gbV9jaGlsZHJl
bjsKLSAgICBUaWVyZWRNTWFwQXJyYXk8Q29kZVJlY29yZD4gbV9zYW1wbGVzOwotfTsKLQotfSAv
LyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvdG9vbHMvQ29kZVBy
b2ZpbGluZy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3Rvb2xzL0Nv
ZGVQcm9maWxpbmcuY3BwCShyZXZpc2lvbiAyNTc4NjYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvdG9vbHMvQ29kZVByb2ZpbGluZy5jcHAJKG5vbmV4aXN0ZW50KQpAQCAtMSwxNjkgKzAsMCBA
QAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMi0yMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQot
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
Ci0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0KLSNp
bmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJDb2RlUHJvZmlsaW5nLmgiCi0KLSNpbmNsdWRl
ICJDb2RlUHJvZmlsZS5oIgotI2luY2x1ZGUgIk1hY2hpbmVDb250ZXh0LmgiCi0jaW5jbHVkZSA8
d3RmL01ldGFBbGxvY2F0b3IuaD4KLQotI2lmIEhBVkUoU0lHTkFMX0gpCi0jaW5jbHVkZSA8c2ln
bmFsLmg+Ci0jZW5kaWYKLQotI2lmIEhBVkUoTUFDSElORV9DT05URVhUKQotI2luY2x1ZGUgPHN5
cy90aW1lLmg+Ci0jZW5kaWYKLQotbmFtZXNwYWNlIEpTQyB7Ci0KLXZvbGF0aWxlIENvZGVQcm9m
aWxlKiBDb2RlUHJvZmlsaW5nOjpzX3Byb2ZpbGVTdGFjayA9IDA7Ci1Db2RlUHJvZmlsaW5nOjpN
b2RlIENvZGVQcm9maWxpbmc6OnNfbW9kZSA9IENvZGVQcm9maWxpbmc6OkRpc2FibGVkOwotV1RG
OjpNZXRhQWxsb2NhdG9yVHJhY2tlciogQ29kZVByb2ZpbGluZzo6c190cmFja2VyID0gMDsKLQot
SUdOT1JFX1dBUk5JTkdTX0JFR0lOKCJtaXNzaW5nLW5vcmV0dXJuIikKLQotI2lmIEhBVkUoTUFD
SElORV9DT05URVhUKQotLy8gSGVscGVyIGZ1bmN0aW9uIHRvIHN0YXJ0ICYgc3RvcCB0aGUgdGlt
ZXIuCi0vLyBQcmVzZW50bHkgd2UncmUgdXNpbmcgdGhlIHdhbGwtY2xvY2sgdGltZXIsIHNpbmNl
IHRoaXMgc2VlbXMgdG8gZ2l2ZSB0aGUgYmVzdCByZXN1bHRzLgotc3RhdGljIHZvaWQgc2V0UHJv
ZmlsZVRpbWVyKHVuc2lnbmVkIHVzZWMpCi17Ci0gICAgaXRpbWVydmFsIHRpbWVyOwotICAgIHRp
bWVyLml0X3ZhbHVlLnR2X3NlYyA9IDA7Ci0gICAgdGltZXIuaXRfdmFsdWUudHZfdXNlYyA9IHVz
ZWM7Ci0gICAgdGltZXIuaXRfaW50ZXJ2YWwudHZfc2VjID0gMDsKLSAgICB0aW1lci5pdF9pbnRl
cnZhbC50dl91c2VjID0gdXNlYzsKLSAgICBzZXRpdGltZXIoSVRJTUVSX1JFQUwsICZ0aW1lciwg
MCk7Ci19Ci0jZW5kaWYKLQotSUdOT1JFX1dBUk5JTkdTX0VORAotCi0jaWYgSEFWRShNQUNISU5F
X0NPTlRFWFQpCi1zdGF0aWMgdm9pZCBwcm9maWxpbmdUaW1lcihpbnQsIHNpZ2luZm9fdCosIHZv
aWQqIHVhcCkKLXsKLSAgICBQbGF0Zm9ybVJlZ2lzdGVycyYgcGxhdGZvcm1SZWdpc3RlcnMgPSBX
VEY6OnJlZ2lzdGVyc0Zyb21VQ29udGV4dChzdGF0aWNfY2FzdDx1Y29udGV4dF90Kj4odWFwKSk7
Ci0gICAgaWYgKGF1dG8gaW5zdHJ1Y3Rpb25Qb2ludGVyID0gTWFjaGluZUNvbnRleHQ6Omluc3Ry
dWN0aW9uUG9pbnRlcihwbGF0Zm9ybVJlZ2lzdGVycykpIHsKLSAgICAgICAgQ29kZVByb2ZpbGlu
Zzo6c2FtcGxlKAotICAgICAgICAgICAgaW5zdHJ1Y3Rpb25Qb2ludGVyLT51bnRhZ2dlZEV4ZWN1
dGFibGVBZGRyZXNzKCksCi0gICAgICAgICAgICByZWludGVycHJldF9jYXN0PHZvaWQqKj4oTWFj
aGluZUNvbnRleHQ6OmZyYW1lUG9pbnRlcihwbGF0Zm9ybVJlZ2lzdGVycykpKTsKLSAgICB9Ci19
Ci0jZW5kaWYKLQotLy8gQ2FsbGJhY2sgdHJpZ2dlcmVkIHdoZW4gdGhlIHRpbWVyIGlzIGZpcmVk
Lgotdm9pZCBDb2RlUHJvZmlsaW5nOjpzYW1wbGUodm9pZCogcGMsIHZvaWQqKiBmcmFtZVBvaW50
ZXIpCi17Ci0gICAgQ29kZVByb2ZpbGUqIHByb2ZpbGVTdGFjayA9IGNvbnN0X2Nhc3Q8Q29kZVBy
b2ZpbGUqPihzX3Byb2ZpbGVTdGFjayk7Ci0gICAgaWYgKHByb2ZpbGVTdGFjaykKLSAgICAgICAg
cHJvZmlsZVN0YWNrLT5zYW1wbGUocGMsIGZyYW1lUG9pbnRlcik7Ci19Ci0KLXZvaWQgQ29kZVBy
b2ZpbGluZzo6bm90aWZ5QWxsb2NhdG9yKFdURjo6TWV0YUFsbG9jYXRvciogYWxsb2NhdG9yKQot
ewotICAgIC8vIENoZWNrIGZvciBKU0NfQ09ERV9QUk9GSUxJTkcuCi0gICAgY29uc3QgY2hhciog
Y29kZVByb2ZpbGluZ01vZGUgPSBnZXRlbnYoIkpTQ19DT0RFX1BST0ZJTElORyIpOwotICAgIGlm
ICghY29kZVByb2ZpbGluZ01vZGUpCi0gICAgICAgIHJldHVybjsKLQotICAgIC8vIENoZWNrIGZv
ciBhIHZhbGlkIG1vZGUsIGN1cnJlbnRseSAiMSIsICIyIiwgb3IgIjMiLgotICAgIGlmICghY29k
ZVByb2ZpbGluZ01vZGVbMF0gfHwgY29kZVByb2ZpbGluZ01vZGVbMV0pCi0gICAgICAgIHJldHVy
bjsKLSAgICBzd2l0Y2ggKCpjb2RlUHJvZmlsaW5nTW9kZSkgewotICAgIGNhc2UgJzEnOgotICAg
ICAgICBzX21vZGUgPSBFbmFibGVkOwotICAgICAgICBicmVhazsKLSAgICBjYXNlICcyJzoKLSAg
ICAgICAgc19tb2RlID0gVmVyYm9zZTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSAnMyc6Ci0g
ICAgICAgIHNfbW9kZSA9IFZlcnlWZXJib3NlOwotICAgICAgICBicmVhazsKLSAgICBkZWZhdWx0
OgotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgQVNTRVJUKGVuYWJsZWQoKSk7Ci0gICAg
QVNTRVJUKCFzX3RyYWNrZXIpOwotICAgIHNfdHJhY2tlciA9IG5ldyBXVEY6Ok1ldGFBbGxvY2F0
b3JUcmFja2VyKCk7Ci0gICAgYWxsb2NhdG9yLT50cmFja0FsbG9jYXRpb25zKHNfdHJhY2tlcik7
Ci19Ci0KLXZvaWQqIENvZGVQcm9maWxpbmc6OmdldE93bmVyVUlERm9yUEModm9pZCogYWRkcmVz
cykKLXsKLSAgICBpZiAoIXNfdHJhY2tlcikKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgV1RGOjpN
ZXRhQWxsb2NhdG9ySGFuZGxlKiBoYW5kbGUgPSBzX3RyYWNrZXItPmZpbmQoYWRkcmVzcyk7Ci0g
ICAgaWYgKCFoYW5kbGUpCi0gICAgICAgIHJldHVybiAwOwotICAgIHJldHVybiBoYW5kbGUtPm93
bmVyVUlEKCk7Ci19Ci0KLXZvaWQgQ29kZVByb2ZpbGluZzo6YmVnaW4oY29uc3QgU291cmNlQ29k
ZSYgc291cmNlKQotewotICAgIC8vIFB1c2ggYSBuZXcgQ29kZVByb2ZpbGUgb250byB0aGUgc3Rh
Y2sgZm9yIGVhY2ggc2NyaXB0IGVuY291bnRlcmVkLgotICAgIENvZGVQcm9maWxlKiBwcm9maWxl
U3RhY2sgPSBjb25zdF9jYXN0PENvZGVQcm9maWxlKj4oc19wcm9maWxlU3RhY2spOwotICAgIGJv
b2wgYWxyZWFkeVByb2ZpbGluZyA9IHByb2ZpbGVTdGFjazsKLSAgICBzX3Byb2ZpbGVTdGFjayA9
IHByb2ZpbGVTdGFjayA9IG5ldyBDb2RlUHJvZmlsZShzb3VyY2UsIHByb2ZpbGVTdGFjayk7Ci0K
LSAgICAvLyBJcyB0aGUgcHJvZmlsZXIgYWxyZWFkeSBydW5uaW5nIC0gaWYgc28sIHRoZSB0aW1l
ciB3aWxsIGFscmVhZHkgYmUgc2V0IHVwLgotICAgIGlmIChhbHJlYWR5UHJvZmlsaW5nKQotICAg
ICAgICByZXR1cm47Ci0KLSNpZiBIQVZFKE1BQ0hJTkVfQ09OVEVYVCkKLSAgICAvLyBSZWdzaXRl
ciBhIHNpZ25hbCBoYW5kbGVyICYgaXRpbWVyLgotICAgIHN0cnVjdCBzaWdhY3Rpb24gYWN0aW9u
OwotICAgIGFjdGlvbi5zYV9zaWdhY3Rpb24gPSByZWludGVycHJldF9jYXN0PHZvaWQgKCopKGlu
dCwgc2lnaW5mb190ICosIHZvaWQgKik+KHByb2ZpbGluZ1RpbWVyKTsKLSAgICBzaWdmaWxsc2V0
KCZhY3Rpb24uc2FfbWFzayk7Ci0gICAgYWN0aW9uLnNhX2ZsYWdzID0gU0FfU0lHSU5GTzsKLSAg
ICBzaWdhY3Rpb24oU0lHQUxSTSwgJmFjdGlvbiwgMCk7Ci0gICAgc2V0UHJvZmlsZVRpbWVyKDEw
MCk7Ci0jZW5kaWYKLX0KLQotdm9pZCBDb2RlUHJvZmlsaW5nOjplbmQoKQotewotICAgIC8vIFBv
cCB0aGUgY3VycmVudCBwcm9maWxlciBvZmYgdGhlIHN0YWNrLgotICAgIENvZGVQcm9maWxlKiBj
dXJyZW50ID0gY29uc3RfY2FzdDxDb2RlUHJvZmlsZSo+KHNfcHJvZmlsZVN0YWNrKTsKLSAgICBB
U1NFUlQoY3VycmVudCk7Ci0gICAgc19wcm9maWxlU3RhY2sgPSBjdXJyZW50LT5wYXJlbnQoKTsK
LQotICAgIC8vIElzIHRoaXMgdGhlIG91dGVybW9zdCBzY3JpcHQgYmVpbmcgcHJvZmlsZWQ/IC0g
aWYgbm90LCBqdXN0IHJldHVybi4KLSAgICAvLyBXZSBwZXJmb3JtIGFsbCBvdXRwdXQgb2YgcHJv
ZmlsZXMgcmVjdXJzaXZlbHkgZnJvbSB0aGUgb3V0ZXJtb3N0IHNjcmlwdCwKLSAgICAvLyB0byBt
aW5pbWl6ZSBwcm9maWxpbmcgb3ZlcmhlYWQgZnJvbSBza2V3aW5nIHJlc3VsdHMuCi0gICAgaWYg
KHNfcHJvZmlsZVN0YWNrKQotICAgICAgICByZXR1cm47Ci0KLSNpZiBIQVZFKE1BQ0hJTkVfQ09O
VEVYVCkKLSAgICAvLyBTdG9wIHByb2ZpbGluZwotICAgIHNldFByb2ZpbGVUaW1lcigwKTsKLSNl
bmRpZgotCi0gICAgY3VycmVudC0+cmVwb3J0KCk7Ci0gICAgZGVsZXRlIGN1cnJlbnQ7Ci19Ci0K
LX0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90b29scy9Db2RlUHJvZmlsaW5nLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3Rvb2xzL0NvZGVQcm9maWxpbmcuaAko
cmV2aXNpb24gMjU3ODY2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3Rvb2xzL0NvZGVQcm9m
aWxpbmcuaAkobm9uZXhpc3RlbnQpCkBAIC0xLDgxICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFO
WQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQotI3ByYWdtYSBvbmNlCi0KLW5hbWVzcGFjZSBX
VEYgewotCi1jbGFzcyBNZXRhQWxsb2NhdG9yOwotY2xhc3MgTWV0YUFsbG9jYXRvclRyYWNrZXI7
Ci0KLX0KLQotbmFtZXNwYWNlIEpTQyB7Ci0KLWNsYXNzIENvZGVQcm9maWxlOwotY2xhc3MgU291
cmNlQ29kZTsKLQotY2xhc3MgQ29kZVByb2ZpbGluZyB7Ci0gICAgZW51bSBNb2RlIHsKLSAgICAg
ICAgRGlzYWJsZWQsCi0gICAgICAgIEVuYWJsZWQsCi0gICAgICAgIFZlcmJvc2UsCi0gICAgICAg
IFZlcnlWZXJib3NlCi0gICAgfTsKLQotcHVibGljOgotICAgIENvZGVQcm9maWxpbmcoY29uc3Qg
U291cmNlQ29kZSYgc291cmNlKQotICAgICAgICA6IG1fYWN0aXZlKGVuYWJsZWQoKSkKLSAgICB7
Ci0gICAgICAgIGlmIChtX2FjdGl2ZSkKLSAgICAgICAgICAgIGJlZ2luKHNvdXJjZSk7Ci0gICAg
fQotCi0gICAgfkNvZGVQcm9maWxpbmcoKQotICAgIHsKLSAgICAgICAgaWYgKG1fYWN0aXZlKQot
ICAgICAgICAgICAgZW5kKCk7Ci0gICAgfQotCi0gICAgc3RhdGljIGJvb2wgZW5hYmxlZCgpIHsg
cmV0dXJuIHNfbW9kZSAhPSBEaXNhYmxlZDsgfQotICAgIHN0YXRpYyBib29sIGJlVmVyYm9zZSgp
IHsgcmV0dXJuIHNfbW9kZSA+PSBWZXJib3NlOyB9Ci0gICAgc3RhdGljIGJvb2wgYmVWZXJ5VmVy
Ym9zZSgpIHsgcmV0dXJuIHNfbW9kZSA+PSBWZXJ5VmVyYm9zZTsgfQotCi0gICAgc3RhdGljIHZv
aWQgbm90aWZ5QWxsb2NhdG9yKFdURjo6TWV0YUFsbG9jYXRvciopOwotICAgIHN0YXRpYyB2b2lk
KiBnZXRPd25lclVJREZvclBDKHZvaWQqKTsKLSAgICBzdGF0aWMgdm9pZCBzYW1wbGUodm9pZCog
cGMsIHZvaWQqKiBmcmFtZVBvaW50ZXIpOwotCi1wcml2YXRlOgotICAgIHZvaWQgYmVnaW4oY29u
c3QgU291cmNlQ29kZSYpOwotICAgIHZvaWQgZW5kKCk7Ci0KLSAgICBib29sIG1fYWN0aXZlOwot
Ci0gICAgc3RhdGljIE1vZGUgc19tb2RlOwotICAgIHN0YXRpYyBXVEY6Ok1ldGFBbGxvY2F0b3JU
cmFja2VyKiBzX3RyYWNrZXI7Ci0gICAgc3RhdGljIHZvbGF0aWxlIENvZGVQcm9maWxlKiBzX3By
b2ZpbGVTdGFjazsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL3dhc20vV2FzbUJCUVBsYW4uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS93YXNtL1dhc21CQlFQbGFuLmNwcAkocmV2aXNpb24gMjU3ODY2KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUJCUVBsYW4uY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0xMzIsMTMgKzEzMiw5IEBAIHZvaWQgQkJRUGxhbjo6d29yayhDb21waWxhdGlvbkVmZm9ydCBl
ZmYKICAgICAgICAgLy8gd2lsbCB1cGRhdGUuIEl0J3MgYWxzbyBvayBpZiB0aGV5IHB1Ymxpc2gg
dGhlaXIgY29kZSBiZWZvcmUgd2UgcmVzZXQgdGhlIGluc3RydWN0aW9uIGNhY2hlcyBiZWNhdXNl
IGFmdGVyIHdlIHJlbGVhc2UKICAgICAgICAgLy8gdGhlIGxvY2sgb3VyIGNvZGUgaXMgcmVhZHkg
dG8gYmUgcHVibGlzaGVkIHRvby4KICAgICAgICAgTG9ja0hvbGRlciBob2xkZXIobV9jb2RlQmxv
Y2stPm1fbG9jayk7CisKICAgICAgICAgbV9jb2RlQmxvY2stPm1fYmJxQ2FsbGVlc1ttX2Z1bmN0
aW9uSW5kZXhdID0gY2FsbGVlLmNvcHlSZWYoKTsKLSAgICAgICAgewotICAgICAgICAgICAgTExJ
bnRDYWxsZWUmIGxsaW50Q2FsbGVlID0gbV9jb2RlQmxvY2stPm1fbGxpbnRDYWxsZWVzLT5hdCht
X2Z1bmN0aW9uSW5kZXgpLmdldCgpOwotICAgICAgICAgICAgYXV0byBsb2NrZXIgPSBob2xkTG9j
ayhsbGludENhbGxlZS50aWVyVXBDb3VudGVyKCkubV9sb2NrKTsKLSAgICAgICAgICAgIGxsaW50
Q2FsbGVlLnNldFJlcGxhY2VtZW50KGNhbGxlZS5jb3B5UmVmKCkpOwotICAgICAgICAgICAgbGxp
bnRDYWxsZWUudGllclVwQ291bnRlcigpLm1fY29tcGlsYXRpb25TdGF0dXMgPSBMTEludFRpZXJV
cENvdW50ZXI6OkNvbXBpbGF0aW9uU3RhdHVzOjpDb21waWxlZDsKLSAgICAgICAgfQorCiAgICAg
ICAgIGZvciAoYXV0byYgY2FsbCA6IGNhbGxlZS0+d2FzbVRvV2FzbUNhbGxzaXRlcygpKSB7CiAg
ICAgICAgICAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8V2FzbUVudHJ5UHRyVGFnPiBlbnRyeXBv
aW50OwogICAgICAgICAgICAgaWYgKGNhbGwuZnVuY3Rpb25JbmRleFNwYWNlIDwgbV9tb2R1bGVJ
bmZvcm1hdGlvbi0+aW1wb3J0RnVuY3Rpb25Db3VudCgpKQpAQCAtMTQ4LDI0ICsxNDQsNTUgQEAg
dm9pZCBCQlFQbGFuOjp3b3JrKENvbXBpbGF0aW9uRWZmb3J0IGVmZgogCiAgICAgICAgICAgICBN
YWNyb0Fzc2VtYmxlcjo6cmVwYXRjaE5lYXJDYWxsKGNhbGwuY2FsbExvY2F0aW9uLCBDb2RlTG9j
YXRpb25MYWJlbDxXYXNtRW50cnlQdHJUYWc+KGVudHJ5cG9pbnQpKTsKICAgICAgICAgfQotICAg
IH0KIAotICAgIC8vIEl0J3MgaW1wb3J0YW50IHRvIG1ha2Ugc3VyZSB3ZSBkbyB0aGlzIGJlZm9y
ZSB3ZSBtYWtlIGFueSBvZiB0aGUgY29kZSB3ZSBqdXN0IGNvbXBpbGVkIHZpc2libGUuIElmIHdl
IGRpZG4ndCwgd2UgY291bGQgZW5kIHVwCi0gICAgLy8gd2hlcmUgd2UgYXJlIHRpZXJpbmcgdXAg
c29tZSBmdW5jdGlvbiBBIHRvIEEnIGFuZCB3ZSByZXBhdGNoIHNvbWUgZnVuY3Rpb24gQiB0byBj
YWxsIEEnIGluc3RlYWQgb2YgQS4gQW5vdGhlciBDUFUgY291bGQgc2VlCi0gICAgLy8gdGhlIHVw
ZGF0ZXMgdG8gQiBidXQgc3RpbGwgbm90IGhhdmUgcmVzZXQgaXRzIGNhY2hlIG9mIEEnLCB3aGlj
aCB3b3VsZCBsZWFkIHRvIGFsbCBraW5kcyBvZiBiYWRuZXNzLgotICAgIHJlc2V0SW5zdHJ1Y3Rp
b25DYWNoZU9uQWxsVGhyZWFkcygpOwotICAgIFdURjo6c3RvcmVTdG9yZUZlbmNlKCk7IC8vIFRo
aXMgcHJvYmFibHkgaXNuJ3QgbmVjZXNzYXJ5IGJ1dCBpdCdzIGdvb2QgdG8gYmUgcGFyYW5vaWQu
CisgICAgICAgIEhhc2hNYXA8dm9pZCosIHZvaWQqPiBzdGFnZWRDYWxsczsKKyAgICAgICAgYXV0
byBzdGFnZVJlcGF0Y2ggPSBbJl0gKGNvbnN0IFZlY3RvcjxVbmxpbmtlZFdhc21Ub1dhc21DYWxs
PiYgY2FsbHNpdGVzKSB7CisgICAgICAgICAgICBmb3IgKGF1dG8mIGNhbGwgOiBjYWxsc2l0ZXMp
IHsKKyAgICAgICAgICAgICAgICBpZiAoY2FsbC5mdW5jdGlvbkluZGV4U3BhY2UgPT0gZnVuY3Rp
b25JbmRleFNwYWNlKSB7CisgICAgICAgICAgICAgICAgICAgIHZvaWQqIHRhcmdldCA9IE1hY3Jv
QXNzZW1ibGVyOjpwcmVwYXJlRm9yQXRvbWljUmVwYXRjaE5lYXJDYWxsKGNhbGwuY2FsbExvY2F0
aW9uLCBDb2RlTG9jYXRpb25MYWJlbDxOb1B0clRhZz4oZW50cnlwb2ludC51bnRhZ2dlZEV4ZWN1
dGFibGVBZGRyZXNzKCkpKS51bnRhZ2dlZEV4ZWN1dGFibGVBZGRyZXNzKCk7CisgICAgICAgICAg
ICAgICAgICAgIHN0YWdlZENhbGxzLmFkZChjYWxsLmNhbGxMb2NhdGlvbi5kYXRhTG9jYXRpb24o
KSwgdGFyZ2V0KTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH07
CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX2NvZGVCbG9jay0+bV93YXNtVG9X
YXNtQ2FsbHNpdGVzLnNpemUoKTsgKytpKSB7CisgICAgICAgICAgICBzdGFnZVJlcGF0Y2gobV9j
b2RlQmxvY2stPm1fd2FzbVRvV2FzbUNhbGxzaXRlc1tpXSk7CisgICAgICAgICAgICBpZiAobV9j
b2RlQmxvY2stPm1fbGxpbnRDYWxsZWVzKSB7CisgICAgICAgICAgICAgICAgTExJbnRDYWxsZWUm
IGxsaW50Q2FsbGVlID0gbV9jb2RlQmxvY2stPm1fbGxpbnRDYWxsZWVzLT5hdChpKS5nZXQoKTsK
KyAgICAgICAgICAgICAgICBpZiAoSklUQ2FsbGVlKiByZXBsYWNlbWVudENhbGxlZSA9IGxsaW50
Q2FsbGVlLnJlcGxhY2VtZW50KCkpCisgICAgICAgICAgICAgICAgICAgIHN0YWdlUmVwYXRjaChy
ZXBsYWNlbWVudENhbGxlZS0+d2FzbVRvV2FzbUNhbGxzaXRlcygpKTsKKyAgICAgICAgICAgICAg
ICBpZiAoT01HRm9yT1NSRW50cnlDYWxsZWUqIG9zckVudHJ5Q2FsbGVlID0gbGxpbnRDYWxsZWUu
b3NyRW50cnlDYWxsZWUoKSkKKyAgICAgICAgICAgICAgICAgICAgc3RhZ2VSZXBhdGNoKG9zckVu
dHJ5Q2FsbGVlLT53YXNtVG9XYXNtQ2FsbHNpdGVzKCkpOworICAgICAgICAgICAgfQorICAgICAg
ICAgICAgaWYgKEJCUUNhbGxlZSogYmJxQ2FsbGVlID0gbV9jb2RlQmxvY2stPm1fYmJxQ2FsbGVl
c1tpXS5nZXQoKSkgeworICAgICAgICAgICAgICAgIGlmIChPTUdDYWxsZWUqIHJlcGxhY2VtZW50
Q2FsbGVlID0gYmJxQ2FsbGVlLT5yZXBsYWNlbWVudCgpKQorICAgICAgICAgICAgICAgICAgICBz
dGFnZVJlcGF0Y2gocmVwbGFjZW1lbnRDYWxsZWUtPndhc21Ub1dhc21DYWxsc2l0ZXMoKSk7Cisg
ICAgICAgICAgICAgICAgaWYgKE9NR0Zvck9TUkVudHJ5Q2FsbGVlKiBvc3JFbnRyeUNhbGxlZSA9
IGJicUNhbGxlZS0+b3NyRW50cnlDYWxsZWUoKSkKKyAgICAgICAgICAgICAgICAgICAgc3RhZ2VS
ZXBhdGNoKG9zckVudHJ5Q2FsbGVlLT53YXNtVG9XYXNtQ2FsbHNpdGVzKCkpOworICAgICAgICAg
ICAgfQorICAgICAgICB9CisKKyAgICAgICAgLy8gSXQncyBpbXBvcnRhbnQgdG8gbWFrZSBzdXJl
IHdlIGRvIHRoaXMgYmVmb3JlIHdlIG1ha2UgYW55IG9mIHRoZSBjb2RlIHdlIGp1c3QgY29tcGls
ZWQgdmlzaWJsZS4gSWYgd2UgZGlkbid0LCB3ZSBjb3VsZCBlbmQgdXAKKyAgICAgICAgLy8gd2hl
cmUgd2UgYXJlIHRpZXJpbmcgdXAgc29tZSBmdW5jdGlvbiBBIHRvIEEnIGFuZCB3ZSByZXBhdGNo
IHNvbWUgZnVuY3Rpb24gQiB0byBjYWxsIEEnIGluc3RlYWQgb2YgQS4gQW5vdGhlciBDUFUgY291
bGQgc2VlCisgICAgICAgIC8vIHRoZSB1cGRhdGVzIHRvIEIgYnV0IHN0aWxsIG5vdCBoYXZlIHJl
c2V0IGl0cyBjYWNoZSBvZiBBJywgd2hpY2ggd291bGQgbGVhZCB0byBhbGwga2luZHMgb2YgYmFk
bmVzcy4KKyAgICAgICAgcmVzZXRJbnN0cnVjdGlvbkNhY2hlT25BbGxUaHJlYWRzKCk7CisgICAg
ICAgIFdURjo6c3RvcmVTdG9yZUZlbmNlKCk7IC8vIFRoaXMgcHJvYmFibHkgaXNuJ3QgbmVjZXNz
YXJ5IGJ1dCBpdCdzIGdvb2QgdG8gYmUgcGFyYW5vaWQuCisKKyAgICAgICAgeworICAgICAgICAg
ICAgTExJbnRDYWxsZWUmIGxsaW50Q2FsbGVlID0gbV9jb2RlQmxvY2stPm1fbGxpbnRDYWxsZWVz
LT5hdChtX2Z1bmN0aW9uSW5kZXgpLmdldCgpOworICAgICAgICAgICAgYXV0byBsb2NrZXIgPSBo
b2xkTG9jayhsbGludENhbGxlZS50aWVyVXBDb3VudGVyKCkubV9sb2NrKTsKKyAgICAgICAgICAg
IGxsaW50Q2FsbGVlLnNldFJlcGxhY2VtZW50KGNhbGxlZS5jb3B5UmVmKCkpOworICAgICAgICAg
ICAgbGxpbnRDYWxsZWUudGllclVwQ291bnRlcigpLm1fY29tcGlsYXRpb25TdGF0dXMgPSBMTElu
dFRpZXJVcENvdW50ZXI6OkNvbXBpbGF0aW9uU3RhdHVzOjpDb21waWxlZDsKKyAgICAgICAgfQor
CisgICAgICAgIG1fY29kZUJsb2NrLT5tX3dhc21JbmRpcmVjdENhbGxFbnRyeVBvaW50c1ttX2Z1
bmN0aW9uSW5kZXhdID0gZW50cnlwb2ludDsKIAotICAgIG1fY29kZUJsb2NrLT5tX3dhc21JbmRp
cmVjdENhbGxFbnRyeVBvaW50c1ttX2Z1bmN0aW9uSW5kZXhdID0gZW50cnlwb2ludDsKLSAgICB7
Ci0gICAgICAgIExvY2tIb2xkZXIgaG9sZGVyKG1fY29kZUJsb2NrLT5tX2xvY2spOwogCiAgICAg
ICAgIGF1dG8gcmVwYXRjaENhbGxzID0gWyZdIChjb25zdCBWZWN0b3I8VW5saW5rZWRXYXNtVG9X
YXNtQ2FsbD4mIGNhbGxzaXRlcykgewogICAgICAgICAgICAgZm9yIChhdXRvJiBjYWxsIDogY2Fs
bHNpdGVzKSB7CiAgICAgICAgICAgICAgICAgZGF0YUxvZ0xuSWYoV2FzbUJCUVBsYW5JbnRlcm5h
bDo6dmVyYm9zZSwgIkNvbnNpZGVyaW5nIHJlcGF0Y2hpbmcgY2FsbCBhdDogIiwgUmF3UG9pbnRl
cihjYWxsLmNhbGxMb2NhdGlvbi5kYXRhTG9jYXRpb24oKSksICIgdGhhdCB0YXJnZXRzICIsIGNh
bGwuZnVuY3Rpb25JbmRleFNwYWNlKTsKICAgICAgICAgICAgICAgICBpZiAoY2FsbC5mdW5jdGlv
bkluZGV4U3BhY2UgPT0gZnVuY3Rpb25JbmRleFNwYWNlKSB7CiAgICAgICAgICAgICAgICAgICAg
IGRhdGFMb2dMbklmKFdhc21CQlFQbGFuSW50ZXJuYWw6OnZlcmJvc2UsICJSZXBhdGNoaW5nIGNh
bGwgYXQ6ICIsIFJhd1BvaW50ZXIoY2FsbC5jYWxsTG9jYXRpb24uZGF0YUxvY2F0aW9uKCkpLCAi
IHRvICIsIFJhd1BvaW50ZXIoZW50cnlwb2ludC5leGVjdXRhYmxlQWRkcmVzcygpKSk7Ci0gICAg
ICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpyZXBhdGNoTmVhckNhbGwoY2FsbC5jYWxs
TG9jYXRpb24sIENvZGVMb2NhdGlvbkxhYmVsPFdhc21FbnRyeVB0clRhZz4oZW50cnlwb2ludCkp
OworICAgICAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6cmVwYXRjaE5lYXJDYWxsKGNh
bGwuY2FsbExvY2F0aW9uLCBDb2RlTG9jYXRpb25MYWJlbDxOb1B0clRhZz4oc3RhZ2VkQ2FsbHMu
Z2V0KGNhbGwuY2FsbExvY2F0aW9uLmRhdGFMb2NhdGlvbigpKSkpOwogICAgICAgICAgICAgICAg
IH0KICAgICAgICAgICAgIH0KICAgICAgICAgfTsKQEAgLTE4OCw2ICsyMTUsMTIgQEAgdm9pZCBC
QlFQbGFuOjp3b3JrKENvbXBpbGF0aW9uRWZmb3J0IGVmZgogICAgICAgICB9CiAgICAgfQogCisK
KyAgICAvL3sKKyAgICAvLyAgICBMb2NrSG9sZGVyIGhvbGRlcihtX2NvZGVCbG9jay0+bV9sb2Nr
KTsKKworICAgIC8vfQorCiAgICAgZGF0YUxvZ0xuSWYoV2FzbUJCUVBsYW5JbnRlcm5hbDo6dmVy
Ym9zZSwgIkZpbmlzaGVkIEJCUSAiLCBtX2Z1bmN0aW9uSW5kZXgpOwogCiAKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21PTUdGb3JPU1JFbnRyeVBsYW4uY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21PTUdGb3JPU1JFbnRyeVBsYW4u
Y3BwCShyZXZpc2lvbiAyNTc4NjYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNt
T01HRm9yT1NSRW50cnlQbGFuLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTAzLDE0ICsxMDMsMTUg
QEAgdm9pZCBPTUdGb3JPU1JFbnRyeVBsYW46OndvcmsoQ29tcGlsYXRpbwogCiAgICAgb21nRW50
cnlwb2ludC5jYWxsZWVTYXZlUmVnaXN0ZXJzID0gV1RGTW92ZShwYXJzZUFuZENvbXBpbGVSZXN1
bHQudmFsdWUoKS0+ZW50cnlwb2ludC5jYWxsZWVTYXZlUmVnaXN0ZXJzKTsKIAotICAgIE1hY3Jv
QXNzZW1ibGVyQ29kZVB0cjxXYXNtRW50cnlQdHJUYWc+IGVudHJ5cG9pbnQ7CisgICAgLy9NYWNy
b0Fzc2VtYmxlckNvZGVQdHI8V2FzbUVudHJ5UHRyVGFnPiBlbnRyeXBvaW50OwogICAgIEFTU0VS
VChtX2NvZGVCbG9jay5wdHIoKSA9PSBtX21vZHVsZS0+Y29kZUJsb2NrRm9yKG1vZGUoKSkpOwog
ICAgIFJlZjxPTUdGb3JPU1JFbnRyeUNhbGxlZT4gY2FsbGVlID0gT01HRm9yT1NSRW50cnlDYWxs
ZWU6OmNyZWF0ZShXVEZNb3ZlKG9tZ0VudHJ5cG9pbnQpLCBmdW5jdGlvbkluZGV4U3BhY2UsIG1f
bW9kdWxlSW5mb3JtYXRpb24tPm5hbWVTZWN0aW9uLT5nZXQoZnVuY3Rpb25JbmRleFNwYWNlKSwg
b3NyRW50cnlTY3JhdGNoQnVmZmVyU2l6ZSwgbV9sb29wSW5kZXgsIFdURk1vdmUodW5saW5rZWRD
YWxscykpOwogICAgIHsKICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OnJlcGF0Y2hQb2ludGVyKHBh
cnNlQW5kQ29tcGlsZVJlc3VsdC52YWx1ZSgpLT5jYWxsZWVNb3ZlTG9jYXRpb24sIENhbGxlZUJp
dHM6OmJveFdhc20oY2FsbGVlLnB0cigpKSk7Ci0gICAgICAgIGVudHJ5cG9pbnQgPSBjYWxsZWUt
PmVudHJ5cG9pbnQoKTsKKyAgICAgICAgLy9lbnRyeXBvaW50ID0gY2FsbGVlLT5lbnRyeXBvaW50
KCk7CiAKICAgICAgICAgYXV0byBsb2NrZXIgPSBob2xkTG9jayhtX2NvZGVCbG9jay0+bV9sb2Nr
KTsKKwogICAgICAgICBmb3IgKGF1dG8mIGNhbGwgOiBjYWxsZWUtPndhc21Ub1dhc21DYWxsc2l0
ZXMoKSkgewogICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPFdhc21FbnRyeVB0clRh
Zz4gZW50cnlwb2ludDsKICAgICAgICAgICAgIGlmIChjYWxsLmZ1bmN0aW9uSW5kZXhTcGFjZSA8
IG1fbW9kdWxlLT5tb2R1bGVJbmZvcm1hdGlvbigpLmltcG9ydEZ1bmN0aW9uQ291bnQoKSkKQEAg
LTEyMCwxMSArMTIxLDEwIEBAIHZvaWQgT01HRm9yT1NSRW50cnlQbGFuOjp3b3JrKENvbXBpbGF0
aW8KIAogICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OnJlcGF0Y2hOZWFyQ2FsbChjYWxsLmNh
bGxMb2NhdGlvbiwgQ29kZUxvY2F0aW9uTGFiZWw8V2FzbUVudHJ5UHRyVGFnPihlbnRyeXBvaW50
KSk7CiAgICAgICAgIH0KLSAgICB9Ci0gICAgcmVzZXRJbnN0cnVjdGlvbkNhY2hlT25BbGxUaHJl
YWRzKCk7Ci0gICAgV1RGOjpzdG9yZVN0b3JlRmVuY2UoKTsKLSAgICB7Ci0gICAgICAgIGF1dG8g
bG9ja2VyID0gaG9sZExvY2sobV9jb2RlQmxvY2stPm1fbG9jayk7CisKKyAgICAgICAgcmVzZXRJ
bnN0cnVjdGlvbkNhY2hlT25BbGxUaHJlYWRzKCk7CisgICAgICAgIFdURjo6c3RvcmVTdG9yZUZl
bmNlKCk7CisKICAgICAgICAgewogICAgICAgICAgICAgc3dpdGNoIChtX2NhbGxlZS0+Y29tcGls
YXRpb25Nb2RlKCkpIHsKICAgICAgICAgICAgIGNhc2UgQ29tcGlsYXRpb25Nb2RlOjpMTEludE1v
ZGU6IHsKQEAgLTE1MCwxNiArMTUwLDIxIEBAIHZvaWQgT01HRm9yT1NSRW50cnlQbGFuOjp3b3Jr
KENvbXBpbGF0aW8KICAgICAgICAgLy8gSXQgaXMgcG9zc2libGUgdGhhdCBhIG5ldyBPTUcgY2Fs
bGVlIGlzIGFkZGVkIHdoaWxlIHdlIHJlbGVhc2UgbV9jb2RlQmxvY2stPmxvY2suCiAgICAgICAg
IC8vIFVudGlsIHdlIGFkZCBPTUdGb3JPU1JFbnRyeSBjYWxsZWUgdG8gQkJRQ2FsbGVlJ3MgbV9v
c3JFbnRyeUNhbGxlZSwgdGhpcyBuZXcgT01HIGZ1bmN0aW9uIGxpbmtpbmcgZG9lcyBub3QgaGFw
cGVuIGZvciB0aGlzIE9NR0Zvck9TUkVudHJ5IGNhbGxlZS4KICAgICAgICAgLy8gV2UgcmUtbGlu
ayB0aGlzIE9NR0Zvck9TUkVudHJ5IGNhbGxlZSBhZ2FpbiBub3QgdG8gbWlzcyB0aGF0IGNoYW5j
ZS4KLSAgICAgICAgZm9yIChhdXRvJiBjYWxsIDogY2FsbGVlLT53YXNtVG9XYXNtQ2FsbHNpdGVz
KCkpIHsKLSAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxXYXNtRW50cnlQdHJUYWc+
IGVudHJ5cG9pbnQ7Ci0gICAgICAgICAgICBpZiAoY2FsbC5mdW5jdGlvbkluZGV4U3BhY2UgPCBt
X21vZHVsZS0+bW9kdWxlSW5mb3JtYXRpb24oKS5pbXBvcnRGdW5jdGlvbkNvdW50KCkpCi0gICAg
ICAgICAgICAgICAgZW50cnlwb2ludCA9IG1fY29kZUJsb2NrLT5tX3dhc21Ub1dhc21FeGl0U3R1
YnNbY2FsbC5mdW5jdGlvbkluZGV4U3BhY2VdLmNvZGUoKTsKLSAgICAgICAgICAgIGVsc2UKLSAg
ICAgICAgICAgICAgICBlbnRyeXBvaW50ID0gbV9jb2RlQmxvY2stPndhc21FbnRyeXBvaW50Q2Fs
bGVlRnJvbUZ1bmN0aW9uSW5kZXhTcGFjZShjYWxsLmZ1bmN0aW9uSW5kZXhTcGFjZSkuZW50cnlw
b2ludCgpLnJldGFnZ2VkPFdhc21FbnRyeVB0clRhZz4oKTsKIAotICAgICAgICAgICAgTWFjcm9B
c3NlbWJsZXI6OnJlcGF0Y2hOZWFyQ2FsbChjYWxsLmNhbGxMb2NhdGlvbiwgQ29kZUxvY2F0aW9u
TGFiZWw8V2FzbUVudHJ5UHRyVGFnPihlbnRyeXBvaW50KSk7Ci0gICAgICAgIH0KKyAgICAgICAg
Ly9mb3IgKGF1dG8mIGNhbGwgOiBjYWxsZWUtPndhc21Ub1dhc21DYWxsc2l0ZXMoKSkgeworICAg
ICAgICAvLyAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8V2FzbUVudHJ5UHRyVGFnPiBlbnRyeXBv
aW50OworICAgICAgICAvLyAgICBpZiAoY2FsbC5mdW5jdGlvbkluZGV4U3BhY2UgPCBtX21vZHVs
ZS0+bW9kdWxlSW5mb3JtYXRpb24oKS5pbXBvcnRGdW5jdGlvbkNvdW50KCkpCisgICAgICAgIC8v
ICAgICAgICBlbnRyeXBvaW50ID0gbV9jb2RlQmxvY2stPm1fd2FzbVRvV2FzbUV4aXRTdHVic1tj
YWxsLmZ1bmN0aW9uSW5kZXhTcGFjZV0uY29kZSgpOworICAgICAgICAvLyAgICBlbHNlCisgICAg
ICAgIC8vICAgICAgICBlbnRyeXBvaW50ID0gbV9jb2RlQmxvY2stPndhc21FbnRyeXBvaW50Q2Fs
bGVlRnJvbUZ1bmN0aW9uSW5kZXhTcGFjZShjYWxsLmZ1bmN0aW9uSW5kZXhTcGFjZSkuZW50cnlw
b2ludCgpLnJldGFnZ2VkPFdhc21FbnRyeVB0clRhZz4oKTsKKworICAgICAgICAvLyAgICBNYWNy
b0Fzc2VtYmxlcjo6cmVwYXRjaE5lYXJDYWxsKGNhbGwuY2FsbExvY2F0aW9uLCBDb2RlTG9jYXRp
b25MYWJlbDxXYXNtRW50cnlQdHJUYWc+KGVudHJ5cG9pbnQpKTsKKyAgICAgICAgLy99CisKICAg
ICB9CisgICAgLy97CisgICAgLy8gICAgYXV0byBsb2NrZXIgPSBob2xkTG9jayhtX2NvZGVCbG9j
ay0+bV9sb2NrKTsKKyAgICAvL30KICAgICBkYXRhTG9nTG5JZihXYXNtT01HRm9yT1NSRW50cnlQ
bGFuSW50ZXJuYWw6OnZlcmJvc2UsICJGaW5pc2hlZCBPTUdGb3JPU1JFbnRyeSAiLCBtX2Z1bmN0
aW9uSW5kZXgpOwogICAgIGNvbXBsZXRlKGhvbGRMb2NrKG1fbG9jaykpOwogfQpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU9NR1BsYW4uY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21PTUdQbGFuLmNwcAkocmV2aXNpb24gMjU3ODY2
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU9NR1BsYW4uY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xMTQsNyArMTE0LDUxIEBAIHZvaWQgT01HUGxhbjo6d29yayhDb21waWxhdGlv
bkVmZm9ydCkKICAgICAgICAgLy8gd2lsbCB1cGRhdGUuIEl0J3MgYWxzbyBvayBpZiB0aGV5IHB1
Ymxpc2ggdGhlaXIgY29kZSBiZWZvcmUgd2UgcmVzZXQgdGhlIGluc3RydWN0aW9uIGNhY2hlcyBi
ZWNhdXNlIGFmdGVyIHdlIHJlbGVhc2UKICAgICAgICAgLy8gdGhlIGxvY2sgb3VyIGNvZGUgaXMg
cmVhZHkgdG8gYmUgcHVibGlzaGVkIHRvby4KICAgICAgICAgTG9ja0hvbGRlciBob2xkZXIobV9j
b2RlQmxvY2stPm1fbG9jayk7CisKICAgICAgICAgbV9jb2RlQmxvY2stPm1fb21nQ2FsbGVlc1tt
X2Z1bmN0aW9uSW5kZXhdID0gY2FsbGVlLmNvcHlSZWYoKTsKKworICAgICAgICBmb3IgKGF1dG8m
IGNhbGwgOiBjYWxsZWUtPndhc21Ub1dhc21DYWxsc2l0ZXMoKSkgeworICAgICAgICAgICAgTWFj
cm9Bc3NlbWJsZXJDb2RlUHRyPFdhc21FbnRyeVB0clRhZz4gZW50cnlwb2ludDsKKyAgICAgICAg
ICAgIGlmIChjYWxsLmZ1bmN0aW9uSW5kZXhTcGFjZSA8IG1fbW9kdWxlLT5tb2R1bGVJbmZvcm1h
dGlvbigpLmltcG9ydEZ1bmN0aW9uQ291bnQoKSkKKyAgICAgICAgICAgICAgICBlbnRyeXBvaW50
ID0gbV9jb2RlQmxvY2stPm1fd2FzbVRvV2FzbUV4aXRTdHVic1tjYWxsLmZ1bmN0aW9uSW5kZXhT
cGFjZV0uY29kZSgpOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIGVudHJ5cG9p
bnQgPSBtX2NvZGVCbG9jay0+d2FzbUVudHJ5cG9pbnRDYWxsZWVGcm9tRnVuY3Rpb25JbmRleFNw
YWNlKGNhbGwuZnVuY3Rpb25JbmRleFNwYWNlKS5lbnRyeXBvaW50KCkucmV0YWdnZWQ8V2FzbUVu
dHJ5UHRyVGFnPigpOworCisgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6cmVwYXRjaE5lYXJD
YWxsKGNhbGwuY2FsbExvY2F0aW9uLCBDb2RlTG9jYXRpb25MYWJlbDxXYXNtRW50cnlQdHJUYWc+
KGVudHJ5cG9pbnQpKTsKKyAgICAgICAgfQorCisgICAgICAgIEhhc2hNYXA8dm9pZCosIHZvaWQq
PiBzdGFnZWRDYWxsczsKKyAgICAgICAgYXV0byBzdGFnZVJlcGF0Y2ggPSBbJl0gKGNvbnN0IFZl
Y3RvcjxVbmxpbmtlZFdhc21Ub1dhc21DYWxsPiYgY2FsbHNpdGVzKSB7CisgICAgICAgICAgICBm
b3IgKGF1dG8mIGNhbGwgOiBjYWxsc2l0ZXMpIHsKKyAgICAgICAgICAgICAgICBpZiAoY2FsbC5m
dW5jdGlvbkluZGV4U3BhY2UgPT0gZnVuY3Rpb25JbmRleFNwYWNlKSB7CisgICAgICAgICAgICAg
ICAgICAgIHZvaWQqIHRhcmdldCA9IE1hY3JvQXNzZW1ibGVyOjpwcmVwYXJlRm9yQXRvbWljUmVw
YXRjaE5lYXJDYWxsKGNhbGwuY2FsbExvY2F0aW9uLCBDb2RlTG9jYXRpb25MYWJlbDxOb1B0clRh
Zz4oZW50cnlwb2ludC51bnRhZ2dlZEV4ZWN1dGFibGVBZGRyZXNzKCkpKS51bnRhZ2dlZEV4ZWN1
dGFibGVBZGRyZXNzKCk7CisgICAgICAgICAgICAgICAgICAgIHN0YWdlZENhbGxzLmFkZChjYWxs
LmNhbGxMb2NhdGlvbi5kYXRhTG9jYXRpb24oKSwgdGFyZ2V0KTsKKyAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICB9CisgICAgICAgIH07CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7
IGkgPCBtX2NvZGVCbG9jay0+bV93YXNtVG9XYXNtQ2FsbHNpdGVzLnNpemUoKTsgKytpKSB7Cisg
ICAgICAgICAgICBzdGFnZVJlcGF0Y2gobV9jb2RlQmxvY2stPm1fd2FzbVRvV2FzbUNhbGxzaXRl
c1tpXSk7CisgICAgICAgICAgICBpZiAobV9jb2RlQmxvY2stPm1fbGxpbnRDYWxsZWVzKSB7Cisg
ICAgICAgICAgICAgICAgTExJbnRDYWxsZWUmIGxsaW50Q2FsbGVlID0gbV9jb2RlQmxvY2stPm1f
bGxpbnRDYWxsZWVzLT5hdChpKS5nZXQoKTsKKyAgICAgICAgICAgICAgICBpZiAoSklUQ2FsbGVl
KiByZXBsYWNlbWVudENhbGxlZSA9IGxsaW50Q2FsbGVlLnJlcGxhY2VtZW50KCkpCisgICAgICAg
ICAgICAgICAgICAgIHN0YWdlUmVwYXRjaChyZXBsYWNlbWVudENhbGxlZS0+d2FzbVRvV2FzbUNh
bGxzaXRlcygpKTsKKyAgICAgICAgICAgICAgICBpZiAoT01HRm9yT1NSRW50cnlDYWxsZWUqIG9z
ckVudHJ5Q2FsbGVlID0gbGxpbnRDYWxsZWUub3NyRW50cnlDYWxsZWUoKSkKKyAgICAgICAgICAg
ICAgICAgICAgc3RhZ2VSZXBhdGNoKG9zckVudHJ5Q2FsbGVlLT53YXNtVG9XYXNtQ2FsbHNpdGVz
KCkpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKEJCUUNhbGxlZSogYmJxQ2FsbGVl
ID0gbV9jb2RlQmxvY2stPm1fYmJxQ2FsbGVlc1tpXS5nZXQoKSkgeworICAgICAgICAgICAgICAg
IGlmIChPTUdDYWxsZWUqIHJlcGxhY2VtZW50Q2FsbGVlID0gYmJxQ2FsbGVlLT5yZXBsYWNlbWVu
dCgpKQorICAgICAgICAgICAgICAgICAgICBzdGFnZVJlcGF0Y2gocmVwbGFjZW1lbnRDYWxsZWUt
Pndhc21Ub1dhc21DYWxsc2l0ZXMoKSk7CisgICAgICAgICAgICAgICAgaWYgKE9NR0Zvck9TUkVu
dHJ5Q2FsbGVlKiBvc3JFbnRyeUNhbGxlZSA9IGJicUNhbGxlZS0+b3NyRW50cnlDYWxsZWUoKSkK
KyAgICAgICAgICAgICAgICAgICAgc3RhZ2VSZXBhdGNoKG9zckVudHJ5Q2FsbGVlLT53YXNtVG9X
YXNtQ2FsbHNpdGVzKCkpOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgLy8g
SXQncyBpbXBvcnRhbnQgdG8gbWFrZSBzdXJlIHdlIGRvIHRoaXMgYmVmb3JlIHdlIG1ha2UgYW55
IG9mIHRoZSBjb2RlIHdlIGp1c3QgY29tcGlsZWQgdmlzaWJsZS4gSWYgd2UgZGlkbid0LCB3ZSBj
b3VsZCBlbmQgdXAKKyAgICAgICAgLy8gd2hlcmUgd2UgYXJlIHRpZXJpbmcgdXAgc29tZSBmdW5j
dGlvbiBBIHRvIEEnIGFuZCB3ZSByZXBhdGNoIHNvbWUgZnVuY3Rpb24gQiB0byBjYWxsIEEnIGlu
c3RlYWQgb2YgQS4gQW5vdGhlciBDUFUgY291bGQgc2VlCisgICAgICAgIC8vIHRoZSB1cGRhdGVz
IHRvIEIgYnV0IHN0aWxsIG5vdCBoYXZlIHJlc2V0IGl0cyBjYWNoZSBvZiBBJywgd2hpY2ggd291
bGQgbGVhZCB0byBhbGwga2luZHMgb2YgYmFkbmVzcy4KKyAgICAgICAgcmVzZXRJbnN0cnVjdGlv
bkNhY2hlT25BbGxUaHJlYWRzKCk7CisgICAgICAgIFdURjo6c3RvcmVTdG9yZUZlbmNlKCk7IC8v
IFRoaXMgcHJvYmFibHkgaXNuJ3QgbmVjZXNzYXJ5IGJ1dCBpdCdzIGdvb2QgdG8gYmUgcGFyYW5v
aWQuCisKICAgICAgICAgewogICAgICAgICAgICAgaWYgKEJCUUNhbGxlZSogYmJxQ2FsbGVlID0g
bV9jb2RlQmxvY2stPm1fYmJxQ2FsbGVlc1ttX2Z1bmN0aW9uSW5kZXhdLmdldCgpKSB7CiAgICAg
ICAgICAgICAgICAgYXV0byBsb2NrZXIgPSBob2xkTG9jayhiYnFDYWxsZWUtPnRpZXJVcENvdW50
KCktPmdldExvY2soKSk7CkBAIC0xMjgsMzMgKzE3MiwxNSBAQCB2b2lkIE9NR1BsYW46Ondvcmso
Q29tcGlsYXRpb25FZmZvcnQpCiAgICAgICAgICAgICAgICAgbGxpbnRDYWxsZWUudGllclVwQ291
bnRlcigpLm1fY29tcGlsYXRpb25TdGF0dXMgPSBMTEludFRpZXJVcENvdW50ZXI6OkNvbXBpbGF0
aW9uU3RhdHVzOjpDb21waWxlZDsKICAgICAgICAgICAgIH0KICAgICAgICAgfQotICAgICAgICBm
b3IgKGF1dG8mIGNhbGwgOiBjYWxsZWUtPndhc21Ub1dhc21DYWxsc2l0ZXMoKSkgewotICAgICAg
ICAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPFdhc21FbnRyeVB0clRhZz4gZW50cnlwb2ludDsK
LSAgICAgICAgICAgIGlmIChjYWxsLmZ1bmN0aW9uSW5kZXhTcGFjZSA8IG1fbW9kdWxlLT5tb2R1
bGVJbmZvcm1hdGlvbigpLmltcG9ydEZ1bmN0aW9uQ291bnQoKSkKLSAgICAgICAgICAgICAgICBl
bnRyeXBvaW50ID0gbV9jb2RlQmxvY2stPm1fd2FzbVRvV2FzbUV4aXRTdHVic1tjYWxsLmZ1bmN0
aW9uSW5kZXhTcGFjZV0uY29kZSgpOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAg
IGVudHJ5cG9pbnQgPSBtX2NvZGVCbG9jay0+d2FzbUVudHJ5cG9pbnRDYWxsZWVGcm9tRnVuY3Rp
b25JbmRleFNwYWNlKGNhbGwuZnVuY3Rpb25JbmRleFNwYWNlKS5lbnRyeXBvaW50KCkucmV0YWdn
ZWQ8V2FzbUVudHJ5UHRyVGFnPigpOwotCi0gICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6cmVw
YXRjaE5lYXJDYWxsKGNhbGwuY2FsbExvY2F0aW9uLCBDb2RlTG9jYXRpb25MYWJlbDxXYXNtRW50
cnlQdHJUYWc+KGVudHJ5cG9pbnQpKTsKLSAgICAgICAgfQotICAgIH0KIAotICAgIC8vIEl0J3Mg
aW1wb3J0YW50IHRvIG1ha2Ugc3VyZSB3ZSBkbyB0aGlzIGJlZm9yZSB3ZSBtYWtlIGFueSBvZiB0
aGUgY29kZSB3ZSBqdXN0IGNvbXBpbGVkIHZpc2libGUuIElmIHdlIGRpZG4ndCwgd2UgY291bGQg
ZW5kIHVwCi0gICAgLy8gd2hlcmUgd2UgYXJlIHRpZXJpbmcgdXAgc29tZSBmdW5jdGlvbiBBIHRv
IEEnIGFuZCB3ZSByZXBhdGNoIHNvbWUgZnVuY3Rpb24gQiB0byBjYWxsIEEnIGluc3RlYWQgb2Yg
QS4gQW5vdGhlciBDUFUgY291bGQgc2VlCi0gICAgLy8gdGhlIHVwZGF0ZXMgdG8gQiBidXQgc3Rp
bGwgbm90IGhhdmUgcmVzZXQgaXRzIGNhY2hlIG9mIEEnLCB3aGljaCB3b3VsZCBsZWFkIHRvIGFs
bCBraW5kcyBvZiBiYWRuZXNzLgotICAgIHJlc2V0SW5zdHJ1Y3Rpb25DYWNoZU9uQWxsVGhyZWFk
cygpOwotICAgIFdURjo6c3RvcmVTdG9yZUZlbmNlKCk7IC8vIFRoaXMgcHJvYmFibHkgaXNuJ3Qg
bmVjZXNzYXJ5IGJ1dCBpdCdzIGdvb2QgdG8gYmUgcGFyYW5vaWQuCi0KLSAgICBtX2NvZGVCbG9j
ay0+bV93YXNtSW5kaXJlY3RDYWxsRW50cnlQb2ludHNbbV9mdW5jdGlvbkluZGV4XSA9IGVudHJ5
cG9pbnQ7Ci0gICAgewotICAgICAgICBMb2NrSG9sZGVyIGhvbGRlcihtX2NvZGVCbG9jay0+bV9s
b2NrKTsKKyAgICAgICAgbV9jb2RlQmxvY2stPm1fd2FzbUluZGlyZWN0Q2FsbEVudHJ5UG9pbnRz
W21fZnVuY3Rpb25JbmRleF0gPSBlbnRyeXBvaW50OwogCiAgICAgICAgIGF1dG8gcmVwYXRjaENh
bGxzID0gWyZdIChjb25zdCBWZWN0b3I8VW5saW5rZWRXYXNtVG9XYXNtQ2FsbD4mIGNhbGxzaXRl
cykgewogICAgICAgICAgICAgZm9yIChhdXRvJiBjYWxsIDogY2FsbHNpdGVzKSB7CiAgICAgICAg
ICAgICAgICAgZGF0YUxvZ0xuSWYoV2FzbU9NR1BsYW5JbnRlcm5hbDo6dmVyYm9zZSwgIkNvbnNp
ZGVyaW5nIHJlcGF0Y2hpbmcgY2FsbCBhdDogIiwgUmF3UG9pbnRlcihjYWxsLmNhbGxMb2NhdGlv
bi5kYXRhTG9jYXRpb24oKSksICIgdGhhdCB0YXJnZXRzICIsIGNhbGwuZnVuY3Rpb25JbmRleFNw
YWNlKTsKICAgICAgICAgICAgICAgICBpZiAoY2FsbC5mdW5jdGlvbkluZGV4U3BhY2UgPT0gZnVu
Y3Rpb25JbmRleFNwYWNlKSB7CiAgICAgICAgICAgICAgICAgICAgIGRhdGFMb2dMbklmKFdhc21P
TUdQbGFuSW50ZXJuYWw6OnZlcmJvc2UsICJSZXBhdGNoaW5nIGNhbGwgYXQ6ICIsIFJhd1BvaW50
ZXIoY2FsbC5jYWxsTG9jYXRpb24uZGF0YUxvY2F0aW9uKCkpLCAiIHRvICIsIFJhd1BvaW50ZXIo
ZW50cnlwb2ludC5leGVjdXRhYmxlQWRkcmVzcygpKSk7Ci0gICAgICAgICAgICAgICAgICAgIE1h
Y3JvQXNzZW1ibGVyOjpyZXBhdGNoTmVhckNhbGwoY2FsbC5jYWxsTG9jYXRpb24sIENvZGVMb2Nh
dGlvbkxhYmVsPFdhc21FbnRyeVB0clRhZz4oZW50cnlwb2ludCkpOworICAgICAgICAgICAgICAg
ICAgICBNYWNyb0Fzc2VtYmxlcjo6cmVwYXRjaE5lYXJDYWxsKGNhbGwuY2FsbExvY2F0aW9uLCBD
b2RlTG9jYXRpb25MYWJlbDxOb1B0clRhZz4oc3RhZ2VkQ2FsbHMuZ2V0KGNhbGwuY2FsbExvY2F0
aW9uLmRhdGFMb2NhdGlvbigpKSkpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0K
ICAgICAgICAgfTsKQEAgLTE3Nyw2ICsyMDMsMTIgQEAgdm9pZCBPTUdQbGFuOjp3b3JrKENvbXBp
bGF0aW9uRWZmb3J0KQogICAgICAgICB9CiAgICAgfQogCisKKyAgICB7CisgICAgICAgIExvY2tI
b2xkZXIgaG9sZGVyKG1fY29kZUJsb2NrLT5tX2xvY2spOworCisgICAgfQorCiAgICAgZGF0YUxv
Z0xuSWYoV2FzbU9NR1BsYW5JbnRlcm5hbDo6dmVyYm9zZSwgIkZpbmlzaGVkIE9NRyAiLCBtX2Z1
bmN0aW9uSW5kZXgpOwogICAgIGNvbXBsZXRlKGhvbGRMb2NrKG1fbG9jaykpOwogfQpJbmRleDog
U291cmNlL1dURi93dGYvTWV0YUFsbG9jYXRvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dU
Ri93dGYvTWV0YUFsbG9jYXRvci5jcHAJKHJldmlzaW9uIDI1Nzg2NikKKysrIFNvdXJjZS9XVEYv
d3RmL01ldGFBbGxvY2F0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01NCwyMiArNTQsMjEgQEAg
TWV0YUFsbG9jYXRvcjo6fk1ldGFBbGxvY2F0b3IoKQogI2VuZGlmCiB9CiAKLXZvaWQgTWV0YUFs
bG9jYXRvclRyYWNrZXI6Om5vdGlmeShNZXRhQWxsb2NhdG9ySGFuZGxlKiBoYW5kbGUpCit2b2lk
IE1ldGFBbGxvY2F0b3JUcmFja2VyOjpub3RpZnkoTWV0YUFsbG9jYXRvckhhbmRsZSYgaGFuZGxl
KQogewotICAgIG1fYWxsb2NhdGlvbnMuaW5zZXJ0KGhhbmRsZSk7CisgICAgbV9hbGxvY2F0aW9u
cy5pbnNlcnQoJmhhbmRsZSk7CiB9CiAKLXZvaWQgTWV0YUFsbG9jYXRvclRyYWNrZXI6OnJlbGVh
c2UoTWV0YUFsbG9jYXRvckhhbmRsZSogaGFuZGxlKQordm9pZCBNZXRhQWxsb2NhdG9yVHJhY2tl
cjo6cmVsZWFzZShNZXRhQWxsb2NhdG9ySGFuZGxlJiBoYW5kbGUpCiB7Ci0gICAgbV9hbGxvY2F0
aW9ucy5yZW1vdmUoaGFuZGxlKTsKKyAgICBtX2FsbG9jYXRpb25zLnJlbW92ZSgmaGFuZGxlKTsK
IH0KIAotQUxXQVlTX0lOTElORSB2b2lkIE1ldGFBbGxvY2F0b3I6OnJlbGVhc2UoTWV0YUFsbG9j
YXRvckhhbmRsZSogaGFuZGxlKQordm9pZCBNZXRhQWxsb2NhdG9yOjpyZWxlYXNlKGNvbnN0IExv
Y2tIb2xkZXImLCBNZXRhQWxsb2NhdG9ySGFuZGxlJiBoYW5kbGUpCiB7Ci0gICAgTG9ja0hvbGRl
ciBsb2NrZXIoJm1fbG9jayk7Ci0gICAgaWYgKGhhbmRsZS0+c2l6ZUluQnl0ZXMoKSkgewotICAg
ICAgICB2b2lkKiBzdGFydCA9IGhhbmRsZS0+c3RhcnQoKS51bnRhZ2dlZFB0cigpOwotICAgICAg
ICBzaXplX3Qgc2l6ZUluQnl0ZXMgPSBoYW5kbGUtPnNpemVJbkJ5dGVzKCk7CisgICAgaWYgKGhh
bmRsZS5zaXplSW5CeXRlcygpKSB7CisgICAgICAgIHZvaWQqIHN0YXJ0ID0gaGFuZGxlLnN0YXJ0
KCkudW50YWdnZWRQdHIoKTsKKyAgICAgICAgc2l6ZV90IHNpemVJbkJ5dGVzID0gaGFuZGxlLnNp
emVJbkJ5dGVzKCk7CiAgICAgICAgIGRlY3JlbWVudFBhZ2VPY2N1cGFuY3koc3RhcnQsIHNpemVJ
bkJ5dGVzKTsKICAgICAgICAgYWRkRnJlZVNwYWNlRnJvbVJlbGVhc2VkSGFuZGxlKEZyZWVTcGFj
ZVB0cihzdGFydCksIHNpemVJbkJ5dGVzKTsKICAgICB9CkBAIC03OCwyMSArNzcsMTkgQEAgQUxX
QVlTX0lOTElORSB2b2lkIE1ldGFBbGxvY2F0b3I6OnJlbGVhcwogICAgICAgICBtX3RyYWNrZXIt
PnJlbGVhc2UoaGFuZGxlKTsKIH0KIAotTWV0YUFsbG9jYXRvckhhbmRsZTo6TWV0YUFsbG9jYXRv
ckhhbmRsZShNZXRhQWxsb2NhdG9yKiBhbGxvY2F0b3IsIHZvaWQqIHN0YXJ0LCBzaXplX3Qgc2l6
ZUluQnl0ZXMsIHZvaWQqIG93bmVyVUlEKQorTWV0YUFsbG9jYXRvckhhbmRsZTo6TWV0YUFsbG9j
YXRvckhhbmRsZShNZXRhQWxsb2NhdG9yJiBhbGxvY2F0b3IsIHZvaWQqIHN0YXJ0LCBzaXplX3Qg
c2l6ZUluQnl0ZXMpCiAgICAgOiBtX2FsbG9jYXRvcihhbGxvY2F0b3IpCiAgICAgLCBtX3N0YXJ0
KHN0YXJ0KQogICAgICwgbV9lbmQocmVpbnRlcnByZXRfY2FzdDxjaGFyKj4oc3RhcnQpICsgc2l6
ZUluQnl0ZXMpCi0gICAgLCBtX293bmVyVUlEKG93bmVyVUlEKQogewotICAgIEFTU0VSVChhbGxv
Y2F0b3IpOwogICAgIEFTU0VSVChzdGFydCk7CiAgICAgQVNTRVJUKHNpemVJbkJ5dGVzKTsKIH0K
IAogTWV0YUFsbG9jYXRvckhhbmRsZTo6fk1ldGFBbGxvY2F0b3JIYW5kbGUoKQogewotICAgIEFT
U0VSVChtX2FsbG9jYXRvcik7Ci0gICAgbV9hbGxvY2F0b3ItPnJlbGVhc2UodGhpcyk7CisgICAg
YXV0byBsb2NrZXIgPSBob2xkTG9jayhhbGxvY2F0b3IoKS5tX2xvY2spOworICAgIGFsbG9jYXRv
cigpLnJlbGVhc2UobG9ja2VyLCAqdGhpcyk7CiB9CiAKIHZvaWQgTWV0YUFsbG9jYXRvckhhbmRs
ZTo6c2hyaW5rKHNpemVfdCBuZXdTaXplSW5CeXRlcykKQEAgLTEwMCw5ICs5NywxMCBAQCB2b2lk
IE1ldGFBbGxvY2F0b3JIYW5kbGU6OnNocmluayhzaXplX3QgCiAgICAgc2l6ZV90IHNpemVJbkJ5
dGVzID0gdGhpcy0+c2l6ZUluQnl0ZXMoKTsKICAgICBBU1NFUlQobmV3U2l6ZUluQnl0ZXMgPD0g
c2l6ZUluQnl0ZXMpOwogCi0gICAgTG9ja0hvbGRlciBsb2NrZXIoJm1fYWxsb2NhdG9yLT5tX2xv
Y2spOworICAgIE1ldGFBbGxvY2F0b3ImIGFsbG9jYXRvciA9IHRoaXMtPmFsbG9jYXRvcigpOwor
ICAgIExvY2tIb2xkZXIgbG9ja2VyKCZhbGxvY2F0b3IubV9sb2NrKTsKIAotICAgIG5ld1NpemVJ
bkJ5dGVzID0gbV9hbGxvY2F0b3ItPnJvdW5kVXAobmV3U2l6ZUluQnl0ZXMpOworICAgIG5ld1Np
emVJbkJ5dGVzID0gYWxsb2NhdG9yLnJvdW5kVXAobmV3U2l6ZUluQnl0ZXMpOwogICAgIAogICAg
IEFTU0VSVChuZXdTaXplSW5CeXRlcyA8PSBzaXplSW5CeXRlcyk7CiAKQEAgLTExMywxMSArMTEx
LDExIEBAIHZvaWQgTWV0YUFsbG9jYXRvckhhbmRsZTo6c2hyaW5rKHNpemVfdCAKICAgICBzaXpl
X3QgZnJlZVNpemUgPSBzaXplSW5CeXRlcyAtIG5ld1NpemVJbkJ5dGVzOwogICAgIHVpbnRwdHJf
dCBmcmVlRW5kID0gZnJlZVN0YXJ0ICsgZnJlZVNpemU7CiAgICAgCi0gICAgdWludHB0cl90IGZp
cnN0Q29tcGxldGVseUZyZWVQYWdlID0gKGZyZWVTdGFydCArIG1fYWxsb2NhdG9yLT5tX3BhZ2VT
aXplIC0gMSkgJiB+KG1fYWxsb2NhdG9yLT5tX3BhZ2VTaXplIC0gMSk7CisgICAgdWludHB0cl90
IGZpcnN0Q29tcGxldGVseUZyZWVQYWdlID0gKGZyZWVTdGFydCArIGFsbG9jYXRvci5tX3BhZ2VT
aXplIC0gMSkgJiB+KGFsbG9jYXRvci5tX3BhZ2VTaXplIC0gMSk7CiAgICAgaWYgKGZpcnN0Q29t
cGxldGVseUZyZWVQYWdlIDwgZnJlZUVuZCkKLSAgICAgICAgbV9hbGxvY2F0b3ItPmRlY3JlbWVu
dFBhZ2VPY2N1cGFuY3kocmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oZmlyc3RDb21wbGV0ZWx5RnJl
ZVBhZ2UpLCBmcmVlU2l6ZSAtIChmaXJzdENvbXBsZXRlbHlGcmVlUGFnZSAtIGZyZWVTdGFydCkp
OworICAgICAgICBhbGxvY2F0b3IuZGVjcmVtZW50UGFnZU9jY3VwYW5jeShyZWludGVycHJldF9j
YXN0PHZvaWQqPihmaXJzdENvbXBsZXRlbHlGcmVlUGFnZSksIGZyZWVTaXplIC0gKGZpcnN0Q29t
cGxldGVseUZyZWVQYWdlIC0gZnJlZVN0YXJ0KSk7CiAKLSAgICBtX2FsbG9jYXRvci0+YWRkRnJl
ZVNwYWNlRnJvbVJlbGVhc2VkSGFuZGxlKE1ldGFBbGxvY2F0b3I6OkZyZWVTcGFjZVB0cihmcmVl
U3RhcnQpLCBmcmVlU2l6ZSk7CisgICAgYWxsb2NhdG9yLmFkZEZyZWVTcGFjZUZyb21SZWxlYXNl
ZEhhbmRsZShNZXRhQWxsb2NhdG9yOjpGcmVlU3BhY2VQdHIoZnJlZVN0YXJ0KSwgZnJlZVNpemUp
OwogCiAgICAgbV9lbmQgPSBtX3N0YXJ0ICsgbmV3U2l6ZUluQnl0ZXM7CiB9CkBAIC0xMjcsMTMg
KzEyNSwxMyBAQCB2b2lkIE1ldGFBbGxvY2F0b3JIYW5kbGU6OmR1bXAoUHJpbnRTdHJlCiAgICAg
b3V0LnByaW50KFJhd1BvaW50ZXIoc3RhcnQoKS51bnRhZ2dlZFB0cigpKSwgIi4uLiIsIFJhd1Bv
aW50ZXIoZW5kKCkudW50YWdnZWRQdHIoKSkpOwogfQogCi1NZXRhQWxsb2NhdG9yOjpNZXRhQWxs
b2NhdG9yKHNpemVfdCBhbGxvY2F0aW9uR3JhbnVsZSwgc2l6ZV90IHBhZ2VTaXplKQorTWV0YUFs
bG9jYXRvcjo6TWV0YUFsbG9jYXRvcihMb2NrJiBsb2NrLCBzaXplX3QgYWxsb2NhdGlvbkdyYW51
bGUsIHNpemVfdCBwYWdlU2l6ZSkKICAgICA6IG1fYWxsb2NhdGlvbkdyYW51bGUoYWxsb2NhdGlv
bkdyYW51bGUpCiAgICAgLCBtX3BhZ2VTaXplKHBhZ2VTaXplKQogICAgICwgbV9ieXRlc0FsbG9j
YXRlZCgwKQogICAgICwgbV9ieXRlc1Jlc2VydmVkKDApCiAgICAgLCBtX2J5dGVzQ29tbWl0dGVk
KDApCi0gICAgLCBtX3RyYWNrZXIoMCkKKyAgICAsIG1fbG9jayhsb2NrKQogI2lmbmRlZiBOREVC
VUcKICAgICAsIG1fbWFsbG9jQmFsYW5jZSgwKQogI2VuZGlmCkBAIC0xNTcsMTAgKzE1NSw4IEBA
IE1ldGFBbGxvY2F0b3I6Ok1ldGFBbGxvY2F0b3Ioc2l6ZV90IGFsbG8KICAgICBBU1NFUlQoc3Rh
dGljX2Nhc3Q8c2l6ZV90PigxKSA8PCBtX2xvZ0FsbG9jYXRpb25HcmFudWxlID09IG1fYWxsb2Nh
dGlvbkdyYW51bGUpOwogfQogCi1SZWZQdHI8TWV0YUFsbG9jYXRvckhhbmRsZT4gTWV0YUFsbG9j
YXRvcjo6YWxsb2NhdGUoc2l6ZV90IHNpemVJbkJ5dGVzLCB2b2lkKiBvd25lclVJRCkKK1JlZlB0
cjxNZXRhQWxsb2NhdG9ySGFuZGxlPiBNZXRhQWxsb2NhdG9yOjphbGxvY2F0ZShjb25zdCBMb2Nr
SG9sZGVyJiwgc2l6ZV90IHNpemVJbkJ5dGVzKQogewotICAgIExvY2tIb2xkZXIgbG9ja2VyKCZt
X2xvY2spOwotCiAgICAgaWYgKCFzaXplSW5CeXRlcykKICAgICAgICAgcmV0dXJuIG51bGxwdHI7
CiAgICAgCkBAIC0xOTUsMTcgKzE5MSwxNiBAQCBSZWZQdHI8TWV0YUFsbG9jYXRvckhhbmRsZT4g
TWV0YUFsbG9jYXRvCiAgICAgbV9udW1BbGxvY2F0aW9ucysrOwogI2VuZGlmCiAKLSAgICBhdXRv
IGhhbmRsZSA9IGFkb3B0UmVmKCpuZXcgTWV0YUFsbG9jYXRvckhhbmRsZSh0aGlzLCBzdGFydC51
bnRhZ2dlZFB0cigpLCBzaXplSW5CeXRlcywgb3duZXJVSUQpKTsKKyAgICBhdXRvIGhhbmRsZSA9
IGFkb3B0UmVmKCpuZXcgTWV0YUFsbG9jYXRvckhhbmRsZSgqdGhpcywgc3RhcnQudW50YWdnZWRQ
dHIoKSwgc2l6ZUluQnl0ZXMpKTsKIAogICAgIGlmIChVTkxJS0VMWSghIW1fdHJhY2tlcikpCi0g
ICAgICAgIG1fdHJhY2tlci0+bm90aWZ5KGhhbmRsZS5wdHIoKSk7CisgICAgICAgIG1fdHJhY2tl
ci0+bm90aWZ5KCpoYW5kbGUucHRyKCkpOwogCiAgICAgcmV0dXJuIGhhbmRsZTsKIH0KIAotTWV0
YUFsbG9jYXRvcjo6U3RhdGlzdGljcyBNZXRhQWxsb2NhdG9yOjpjdXJyZW50U3RhdGlzdGljcygp
CitNZXRhQWxsb2NhdG9yOjpTdGF0aXN0aWNzIE1ldGFBbGxvY2F0b3I6OmN1cnJlbnRTdGF0aXN0
aWNzKGNvbnN0IExvY2tIb2xkZXImKQogewotICAgIExvY2tIb2xkZXIgbG9ja2VyKCZtX2xvY2sp
OwogICAgIFN0YXRpc3RpY3MgcmVzdWx0OwogICAgIHJlc3VsdC5ieXRlc0FsbG9jYXRlZCA9IG1f
Ynl0ZXNBbGxvY2F0ZWQ7CiAgICAgcmVzdWx0LmJ5dGVzUmVzZXJ2ZWQgPSBtX2J5dGVzUmVzZXJ2
ZWQ7CkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9NZXRhQWxsb2NhdG9yLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dURi93dGYvTWV0YUFsbG9jYXRvci5oCShyZXZpc2lvbiAyNTc4NjYpCisrKyBTb3Vy
Y2UvV1RGL3d0Zi9NZXRhQWxsb2NhdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ0LDE1ICs0NCwx
NSBAQCBuYW1lc3BhY2UgV1RGIHsKIGNsYXNzIE1ldGFBbGxvY2F0b3JUcmFja2VyIHsKICAgICBX
VEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKIHB1YmxpYzoKLSAgICB2b2lkIG5vdGlmeShNZXRhQWxs
b2NhdG9ySGFuZGxlKik7Ci0gICAgdm9pZCByZWxlYXNlKE1ldGFBbGxvY2F0b3JIYW5kbGUqKTsK
KyAgICB2b2lkIG5vdGlmeShNZXRhQWxsb2NhdG9ySGFuZGxlJik7CisgICAgdm9pZCByZWxlYXNl
KE1ldGFBbGxvY2F0b3JIYW5kbGUmKTsKIAogICAgIE1ldGFBbGxvY2F0b3JIYW5kbGUqIGZpbmQo
dm9pZCogYWRkcmVzcykKICAgICB7CiAgICAgICAgIE1ldGFBbGxvY2F0b3JIYW5kbGUqIGhhbmRs
ZSA9IG1fYWxsb2NhdGlvbnMuZmluZEdyZWF0ZXN0TGVzc1RoYW5PckVxdWFsKGFkZHJlc3MpOwot
ICAgICAgICBpZiAoaGFuZGxlICYmIGFkZHJlc3MgPCBoYW5kbGUtPmVuZCgpLnVudGFnZ2VkUHRy
KCkpCisgICAgICAgIGlmIChoYW5kbGUgJiYgaGFuZGxlLT5zdGFydCgpLnVudGFnZ2VkUHRyKCkg
PD0gYWRkcmVzcyAmJiBhZGRyZXNzIDwgaGFuZGxlLT5lbmQoKS51bnRhZ2dlZFB0cigpKQogICAg
ICAgICAgICAgcmV0dXJuIGhhbmRsZTsKLSAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIHJldHVy
biBudWxscHRyOwogICAgIH0KIAogICAgIFJlZEJsYWNrVHJlZTxNZXRhQWxsb2NhdG9ySGFuZGxl
LCB2b2lkKj4gbV9hbGxvY2F0aW9uczsKQEAgLTY0LDE3ICs2NCwyMiBAQCBjbGFzcyBNZXRhQWxs
b2NhdG9yIHsKIHB1YmxpYzoKICAgICB1c2luZyBGcmVlU3BhY2VQdHIgPSBNZXRhQWxsb2NhdG9y
UHRyPEZyZWVTcGFjZVB0clRhZz47CiAKLSAgICBXVEZfRVhQT1JUX1BSSVZBVEUgTWV0YUFsbG9j
YXRvcihzaXplX3QgYWxsb2NhdGlvbkdyYW51bGUsIHNpemVfdCBwYWdlU2l6ZSA9IFdURjo6cGFn
ZVNpemUoKSk7CisgICAgV1RGX0VYUE9SVF9QUklWQVRFIE1ldGFBbGxvY2F0b3IoTG9jayYsIHNp
emVfdCBhbGxvY2F0aW9uR3JhbnVsZSwgc2l6ZV90IHBhZ2VTaXplID0gV1RGOjpwYWdlU2l6ZSgp
KTsKICAgICAKICAgICBXVEZfRVhQT1JUX1BSSVZBVEUgdmlydHVhbCB+TWV0YUFsbG9jYXRvcigp
OwogICAgIAotICAgIFdURl9FWFBPUlRfUFJJVkFURSBSZWZQdHI8TWV0YUFsbG9jYXRvckhhbmRs
ZT4gYWxsb2NhdGUoc2l6ZV90IHNpemVJbkJ5dGVzLCB2b2lkKiBvd25lclVJRCk7CisgICAgUmVm
UHRyPE1ldGFBbGxvY2F0b3JIYW5kbGU+IGFsbG9jYXRlKHNpemVfdCBzaXplSW5CeXRlcykKKyAg
ICB7CisgICAgICAgIGF1dG8gbG9ja2VyID0gaG9sZExvY2sobV9sb2NrKTsKKyAgICAgICAgcmV0
dXJuIGFsbG9jYXRlKGxvY2tlciwgc2l6ZUluQnl0ZXMpOworICAgIH0KKyAgICBXVEZfRVhQT1JU
X1BSSVZBVEUgUmVmUHRyPE1ldGFBbGxvY2F0b3JIYW5kbGU+IGFsbG9jYXRlKGNvbnN0IExvY2tI
b2xkZXImLCBzaXplX3Qgc2l6ZUluQnl0ZXMpOwogCiAgICAgdm9pZCB0cmFja0FsbG9jYXRpb25z
KE1ldGFBbGxvY2F0b3JUcmFja2VyKiB0cmFja2VyKQogICAgIHsKICAgICAgICAgbV90cmFja2Vy
ID0gdHJhY2tlcjsKICAgICB9Ci0gICAgCisKICAgICAvLyBOb24tYXRvbWljIG1ldGhvZHMgZm9y
IGdldHRpbmcgYWxsb2NhdG9yIHN0YXRpc3RpY3MuCiAgICAgc2l6ZV90IGJ5dGVzQWxsb2NhdGVk
KCkgeyByZXR1cm4gbV9ieXRlc0FsbG9jYXRlZDsgfQogICAgIHNpemVfdCBieXRlc1Jlc2VydmVk
KCkgeyByZXR1cm4gbV9ieXRlc1Jlc2VydmVkOyB9CkBAIC04Nyw3ICs5MiwxMiBAQCBwdWJsaWM6
CiAgICAgICAgIHNpemVfdCBieXRlc1Jlc2VydmVkOwogICAgICAgICBzaXplX3QgYnl0ZXNDb21t
aXR0ZWQ7CiAgICAgfTsKLSAgICBXVEZfRVhQT1JUX1BSSVZBVEUgU3RhdGlzdGljcyBjdXJyZW50
U3RhdGlzdGljcygpOworICAgIFN0YXRpc3RpY3MgY3VycmVudFN0YXRpc3RpY3MoKQorICAgIHsK
KyAgICAgICAgYXV0byBsb2NrZXIgPSBob2xkTG9jayhtX2xvY2spOworICAgICAgICByZXR1cm4g
Y3VycmVudFN0YXRpc3RpY3MobG9ja2VyKTsKKyAgICB9CisgICAgV1RGX0VYUE9SVF9QUklWQVRF
IFN0YXRpc3RpY3MgY3VycmVudFN0YXRpc3RpY3MoY29uc3QgTG9ja0hvbGRlciYpOwogCiAgICAg
Ly8gQWRkIG1vcmUgZnJlZSBzcGFjZSB0byB0aGUgYWxsb2NhdG9yLiBDYWxsIHRoaXMgZGlyZWN0
bHkgZnJvbQogICAgIC8vIHRoZSBjb25zdHJ1Y3RvciBpZiB5b3Ugd2lzaCB0byBvcGVyYXRlIHRo
ZSBhbGxvY2F0b3Igd2l0aGluIGEKQEAgLTk4LDcgKzEwOCw2IEBAIHB1YmxpYzoKICAgICAvLyBi
dWlsZHMuCiAgICAgV1RGX0VYUE9SVF9QUklWQVRFIHNpemVfdCBkZWJ1Z0ZyZWVTcGFjZVNpemUo
KTsKIAotICAgIExvY2smIGdldExvY2soKSB7IHJldHVybiBtX2xvY2s7IH0KICAgICBXVEZfRVhQ
T1JUX1BSSVZBVEUgYm9vbCBpc0luQWxsb2NhdGVkTWVtb3J5KGNvbnN0IEFic3RyYWN0TG9ja2Vy
Jiwgdm9pZCogYWRkcmVzcyk7CiAgICAgCiAjaWYgRU5BQkxFKE1FVEFfQUxMT0NBVE9SX1BST0ZJ
TEUpCkBAIC0xMDcsNiArMTE2LDExIEBAIHB1YmxpYzoKICAgICB2b2lkIGR1bXBQcm9maWxlKCkg
eyB9CiAjZW5kaWYKIAorICAgIE1ldGFBbGxvY2F0b3JIYW5kbGUqIGZpbmQodm9pZCogYWRkcmVz
cykKKyAgICB7CisgICAgICAgIHJldHVybiBtX3RyYWNrZXItPmZpbmQoYWRkcmVzcyk7CisgICAg
fQorCiBwcm90ZWN0ZWQ6CiAgICAgCiAgICAgLy8gQWxsb2NhdGUgbmV3IHZpcnR1YWwgc3BhY2Us
IGJ1dCBkb24ndCBjb21taXQuIFRoaXMgbWF5IHJldHVybiBtb3JlCkBAIC0xMjMsNiArMTM3LDgg
QEAgcHJvdGVjdGVkOgogICAgIC8vIGRlc3RydWN0aW9uLCBpbiBwYXJ0IGJlY2F1c2UgYSBNZXRh
QWxsb2NhdG9yIGNhbm5vdCBkaWUgc28gbG9uZwogICAgIC8vIGFzIHRoZXJlIGFyZSBIYW5kbGVz
IHRoYXQgcmVmZXIgdG8gaXQuCiAKKyAgICAvLyBSZWxlYXNlIGEgTWV0YUFsbG9jYXRvckhhbmRs
ZS4KKyAgICB2aXJ0dWFsIHZvaWQgcmVsZWFzZShjb25zdCBMb2NrSG9sZGVyJiwgTWV0YUFsbG9j
YXRvckhhbmRsZSYpOwogcHJpdmF0ZToKICAgICAKICAgICBmcmllbmQgY2xhc3MgTWV0YUFsbG9j
YXRvckhhbmRsZTsKQEAgLTE1MCw5ICsxNjYsNiBAQCBwcml2YXRlOgogICAgICAgICBGcmVlU3Bh
Y2VQdHIgbV9lbmQ7CiAgICAgfTsKICAgICB0eXBlZGVmIFJlZEJsYWNrVHJlZTxGcmVlU3BhY2VO
b2RlLCBzaXplX3Q+IFRyZWU7Ci0KLSAgICAvLyBSZWxlYXNlIGEgTWV0YUFsbG9jYXRvckhhbmRs
ZS4KLSAgICB2b2lkIHJlbGVhc2UoTWV0YUFsbG9jYXRvckhhbmRsZSopOwogICAgIAogICAgIC8v
IFJlbW92ZSBmcmVlIHNwYWNlIGZyb20gdGhlIGFsbG9jYXRvci4gVGhpcyBpcyBlZmZlY3RpdmVs
eQogICAgIC8vIHRoZSBhbGxvY2F0ZSgpIGZ1bmN0aW9uLCBleGNlcHQgdGhhdCBpdCBkb2VzIG5v
dCBtYXJrIHRoZQpAQCAtMTkzLDkgKzIwNiw5IEBAIHByaXZhdGU6CiAgICAgc2l6ZV90IG1fYnl0
ZXNSZXNlcnZlZDsKICAgICBzaXplX3QgbV9ieXRlc0NvbW1pdHRlZDsKICAgICAKLSAgICBMb2Nr
IG1fbG9jazsKKyAgICBMb2NrJiBtX2xvY2s7CiAKLSAgICBNZXRhQWxsb2NhdG9yVHJhY2tlciog
bV90cmFja2VyOworICAgIE1ldGFBbGxvY2F0b3JUcmFja2VyKiBtX3RyYWNrZXIgeyBudWxscHRy
IH07CiAKICNpZm5kZWYgTkRFQlVHCiAgICAgc2l6ZV90IG1fbWFsbG9jQmFsYW5jZTsKSW5kZXg6
IFNvdXJjZS9XVEYvd3RmL01ldGFBbGxvY2F0b3JIYW5kbGUuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV1RGL3d0Zi9NZXRhQWxsb2NhdG9ySGFuZGxlLmgJKHJldmlzaW9uIDI1Nzg2NikKKysrIFNv
dXJjZS9XVEYvd3RmL01ldGFBbGxvY2F0b3JIYW5kbGUuaAkod29ya2luZyBjb3B5KQpAQCAtNDIs
NyArNDIsNyBAQCBERUNMQVJFX0FMTE9DQVRPUl9XSVRIX0hFQVBfSURFTlRJRklFUihNCiBjbGFz
cyBNZXRhQWxsb2NhdG9ySGFuZGxlIDogcHVibGljIFRocmVhZFNhZmVSZWZDb3VudGVkPE1ldGFB
bGxvY2F0b3JIYW5kbGU+LCBwdWJsaWMgUmVkQmxhY2tUcmVlPE1ldGFBbGxvY2F0b3JIYW5kbGUs
IHZvaWQqPjo6Tm9kZSB7CiAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURURfV0lUSF9IRUFQX0lE
RU5USUZJRVIoTWV0YUFsbG9jYXRvckhhbmRsZSk7CiBwcml2YXRlOgotICAgIE1ldGFBbGxvY2F0
b3JIYW5kbGUoTWV0YUFsbG9jYXRvciosIHZvaWQqIHN0YXJ0LCBzaXplX3Qgc2l6ZUluQnl0ZXMs
IHZvaWQqIG93bmVyVUlEKTsKKyAgICBNZXRhQWxsb2NhdG9ySGFuZGxlKE1ldGFBbGxvY2F0b3Im
LCB2b2lkKiBzdGFydCwgc2l6ZV90IHNpemVJbkJ5dGVzKTsKIAogcHVibGljOgogICAgIHVzaW5n
IE1lbW9yeVB0ciA9IE1ldGFBbGxvY2F0b3JQdHI8SGFuZGxlTWVtb3J5UHRyVGFnPjsKQEAgLTg2
LDIyICs4NiwxMSBAQCBwdWJsaWM6CiAgICAgICAgIAogICAgIFdURl9FWFBPUlRfUFJJVkFURSB2
b2lkIHNocmluayhzaXplX3QgbmV3U2l6ZUluQnl0ZXMpOwogICAgIAotICAgIGJvb2wgaXNNYW5h
Z2VkKCkKKyAgICBNZXRhQWxsb2NhdG9yJiBhbGxvY2F0b3IoKQogICAgIHsKLSAgICAgICAgcmV0
dXJuICEhbV9hbGxvY2F0b3I7Ci0gICAgfQotICAgICAgICAKLSAgICBNZXRhQWxsb2NhdG9yKiBh
bGxvY2F0b3IoKQotICAgIHsKLSAgICAgICAgQVNTRVJUKG1fYWxsb2NhdG9yKTsKICAgICAgICAg
cmV0dXJuIG1fYWxsb2NhdG9yOwogICAgIH0KIAotICAgIHZvaWQqIG93bmVyVUlEKCkKLSAgICB7
Ci0gICAgICAgIHJldHVybiBtX293bmVyVUlEOwotICAgIH0KLQogICAgIHZvaWQqIGtleSgpCiAg
ICAgewogICAgICAgICByZXR1cm4gbV9zdGFydC51bnRhZ2dlZFB0cigpOwpAQCAtMTEyLDEwICsx
MDEsOSBAQCBwdWJsaWM6CiBwcml2YXRlOgogICAgIGZyaWVuZCBjbGFzcyBNZXRhQWxsb2NhdG9y
OwogICAgIAotICAgIE1ldGFBbGxvY2F0b3IqIG1fYWxsb2NhdG9yOworICAgIE1ldGFBbGxvY2F0
b3ImIG1fYWxsb2NhdG9yOwogICAgIE1lbW9yeVB0ciBtX3N0YXJ0OwogICAgIE1lbW9yeVB0ciBt
X2VuZDsKLSAgICB2b2lkKiBtX293bmVyVUlEOwogfTsKIAogfQpJbmRleDogU291cmNlL1dURi93
dGYvUmVkQmxhY2tUcmVlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvUmVkQmxhY2tU
cmVlLmgJKHJldmlzaW9uIDI1Nzg2NikKKysrIFNvdXJjZS9XVEYvd3RmL1JlZEJsYWNrVHJlZS5o
CSh3b3JraW5nIGNvcHkpCkBAIC0zMjQsNiArMzI0LDI2IEBAIHB1YmxpYzoKICAgICAgICAgfQog
ICAgICAgICByZXR1cm4gYmVzdDsKICAgICB9CisKKyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgRnVu
Y3Rpb24+CisgICAgdm9pZCBpdGVyYXRlKEZ1bmN0aW9uIGZ1bmN0aW9uKQorICAgIHsKKyAgICAg
ICAgaWYgKCFtX3Jvb3QpCisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgVmVjdG9yPE5v
ZGVUeXBlKiwgMTY+IHRvSXRlcmF0ZTsKKyAgICAgICAgdG9JdGVyYXRlLmFwcGVuZChtX3Jvb3Qp
OworICAgICAgICB3aGlsZSAodG9JdGVyYXRlLnNpemUoKSkgeworICAgICAgICAgICAgTm9kZVR5
cGUmIGN1cnJlbnQgPSAqdG9JdGVyYXRlLnRha2VMYXN0KCk7CisgICAgICAgICAgICBib29sIGl0
ZXJhdGVMZWZ0ID0gZmFsc2U7CisgICAgICAgICAgICBib29sIGl0ZXJhdGVSaWdodCA9IGZhbHNl
OworICAgICAgICAgICAgZnVuY3Rpb24oY3VycmVudCwgaXRlcmF0ZUxlZnQsIGl0ZXJhdGVSaWdo
dCk7CisgICAgICAgICAgICBpZiAoaXRlcmF0ZUxlZnQgJiYgY3VycmVudC5sZWZ0KCkpCisgICAg
ICAgICAgICAgICAgdG9JdGVyYXRlLmFwcGVuZChjdXJyZW50LmxlZnQoKSk7CisgICAgICAgICAg
ICBpZiAoaXRlcmF0ZVJpZ2h0ICYmIGN1cnJlbnQucmlnaHQoKSkKKyAgICAgICAgICAgICAgICB0
b0l0ZXJhdGUuYXBwZW5kKGN1cnJlbnQucmlnaHQoKSk7CisgICAgICAgIH0KKyAgICB9CiAgICAg
CiAgICAgTm9kZVR5cGUqIGZpcnN0KCkgY29uc3QKICAgICB7CkluZGV4OiBTb3VyY2UvV1RGL3d0
Zi9TdGRMaWJFeHRyYXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9TdGRMaWJFeHRy
YXMuaAkocmV2aXNpb24gMjU3ODY2KQorKysgU291cmNlL1dURi93dGYvU3RkTGliRXh0cmFzLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTQ4OSw2ICs0ODksMTkgQEAgQUxXQVlTX0lOTElORSBkZWNsdHlw
ZShhdXRvKSBtYWtlVW5pcXVlVwogICAgIHJldHVybiBzdGQ6Om1ha2VfdW5pcXVlPFQ+KHN0ZDo6
Zm9yd2FyZDxBcmdzPihhcmdzKS4uLik7CiB9CiAKK3RlbXBsYXRlIDx0eXBlbmFtZSBSZXN1bHRU
eXBlLCBzaXplX3QuLi4gSXMsIHR5cGVuYW1lIC4uLkFyZ3M+Citjb25zdGV4cHIgYXV0byBjb25z
dHJ1Y3RGaXhlZFNpemVBcnJheVdpdGhBcmd1bWVudHNJbXBsKHN0ZDo6aW5kZXhfc2VxdWVuY2U8
SXMuLi4+LCBBcmdzJiYuLi4gYXJncykgLT4gc3RkOjphcnJheTxSZXN1bHRUeXBlLCBzaXplb2Yu
Li4oSXMpPgoreworICAgIHJldHVybiB7ICgodm9pZClJcywgUmVzdWx0VHlwZSB7IGFyZ3MuLi4g
fSkuLi4gfTsKK30KKworLy8gQ29uc3RydWN0IGFuIHN0ZDo6YXJyYXkgd2l0aCBOIGVsZW1lbnRz
IG9mIFJlc3VsdFR5cGUsIHBhc3NpbmcgQXJncyB0byBlYWNoIG9mIHRoZSBOIGNvbnN0cnVjdG9y
cy4KK3RlbXBsYXRlPHR5cGVuYW1lIFJlc3VsdFR5cGUsIHNpemVfdCBOLCB0eXBlbmFtZSAuLi5B
cmdzPgorY29uc3RleHByIGF1dG8gY29uc3RydWN0Rml4ZWRTaXplQXJyYXlXaXRoQXJndW1lbnRz
KEFyZ3MmJi4uLiBhcmdzKSAtPiBkZWNsdHlwZShhdXRvKQoreworICAgIGF1dG8gdHVwbGUgPSBz
dGQ6Om1ha2VfaW5kZXhfc2VxdWVuY2U8Tj4oKTsKKyAgICByZXR1cm4gY29uc3RydWN0Rml4ZWRT
aXplQXJyYXlXaXRoQXJndW1lbnRzSW1wbDxSZXN1bHRUeXBlPih0dXBsZSwgc3RkOjpmb3J3YXJk
PEFyZ3M+KGFyZ3MpLi4uKTsKK30KIAogfSAvLyBuYW1lc3BhY2UgV1RGCiAKQEAgLTUxNCwzICs1
MjcsNCBAQCB1c2luZyBXVEY6OnNhZmVDYXN0OwogdXNpbmcgV1RGOjp0cnlCaW5hcnlTZWFyY2g7
CiB1c2luZyBXVEY6Om1ha2VVbmlxdWU7CiB1c2luZyBXVEY6Om1ha2VVbmlxdWVXaXRob3V0RmFz
dE1hbGxvY0NoZWNrOwordXNpbmcgV1RGOjpjb25zdHJ1Y3RGaXhlZFNpemVBcnJheVdpdGhBcmd1
bWVudHM7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>393403</attachid>
            <date>2020-03-12 13:07:53 -0700</date>
            <delta_ts>2020-03-12 13:14:46 -0700</delta_ts>
            <desc>patch</desc>
            <filename>c-backup.diff</filename>
            <type>text/plain</type>
            <size>118739</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IEpTVGVzdHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEpTVGVzdHMvQ2hhbmdlTG9n
CShyZXZpc2lvbiAyNTc4NjYpCisrKyBKU1Rlc3RzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpA
QCAtMSwzICsxLDEyIEBACisyMDIwLTAzLTEyICBTYWFtIEJhcmF0aSAgPHNiYXJhdGlAYXBwbGUu
Y29tPgorCisgICAgICAgIEltcGxlbWVudCAxR0Igb2YgZXhlY3V0YWJsZSBtZW1vcnkgb24gYXJt
NjQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIwODQ5
MAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogd2Fz
bS55YW1sOgorCiAyMDIwLTAzLTAzICBZdXN1a2UgU3V6dWtpICA8eXN1enVraUBhcHBsZS5jb20+
CiAKICAgICAgICAgW0pTQ10gQGhhc093bkxlbmd0aFByb3BlcnR5IHJldHVybnMgd3JvbmcgdmFs
dWUgaWYgImxlbmd0aCIgaXMgYXR0ZW1wdGVkIHRvIGJlIG1vZGlmaWVkCkluZGV4OiBKU1Rlc3Rz
L3dhc20ueWFtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKU1Rlc3RzL3dhc20ueWFtbAkocmV2aXNpb24gMjU3
ODY2KQorKysgSlNUZXN0cy93YXNtLnlhbWwJKHdvcmtpbmcgY29weSkKQEAgLTIzMSwzICsyMzEs
NiBAQAogLSBwYXRoOiB3YXNtL21vZHVsZXMvcnVuLWZyb20td2FzbS53YXNtCiAgIGNtZDogcnVu
V2ViQXNzZW1ibHkKIAorLSBwYXRoOiAuLi9QZXJmb3JtYW5jZVRlc3RzL0pldFN0cmVhbTIvd2Fz
bS1jbGkuanMKKyAgY21kOiBydW5XZWJBc3NlbWJseUpldFN0cmVhbTIgdW5sZXNzIHBhcnNlUnVu
Q29tbWFuZHMKKwpJbmRleDogUGVyZm9ybWFuY2VUZXN0cy9DaGFuZ2VMb2cKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gUGVyZm9ybWFuY2VUZXN0cy9DaGFuZ2VMb2cJKHJldmlzaW9uIDI1Nzg2NikKKysrIFBlcmZv
cm1hbmNlVGVzdHMvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMjQgQEAKKzIw
MjAtMDMtMTIgIFNhYW0gQmFyYXRpICA8c2JhcmF0aUBhcHBsZS5jb20+CisKKyAgICAgICAgSW1w
bGVtZW50IDFHQiBvZiBleGVjdXRhYmxlIG1lbW9yeSBvbiBhcm02NAorICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjA4NDkwCisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBKZXRTdHJlYW0yL0pldFN0cmVhbURy
aXZlci5qczoKKyAgICAgICAgKERyaXZlci5wcm90b3R5cGUuZHVtcEpTT05SZXN1bHRzSWZOZWVk
ZWQpOgorICAgICAgICAoRGVmYXVsdEJlbmNobWFyay5wcm90b3R5cGUudXBkYXRlVUlBZnRlclJ1
bik6CisgICAgICAgIChEZWZhdWx0QmVuY2htYXJrKToKKyAgICAgICAgKFdTTEJlbmNobWFyay5w
cm90b3R5cGUudXBkYXRlVUlBZnRlclJ1bik6CisgICAgICAgIChXU0xCZW5jaG1hcmspOgorICAg
ICAgICAoV2FzbUJlbmNobWFyay5wcm90b3R5cGUudXBkYXRlVUlBZnRlclJ1bik6CisgICAgICAg
IChXYXNtQmVuY2htYXJrKToKKyAgICAgICAgKERyaXZlci5hc3luYyBmZXRjaFJlc291cmNlcy5z
dGF0dXNFbGVtZW50LmlubmVySFRNTC5hLmhyZWYuc3RyaW5nX2FwcGVhcmVkX2hlcmUpOgorICAg
ICAgICAoRHJpdmVyLnByb3RvdHlwZS5hc3luYyBmZXRjaFJlc291cmNlcyk6CisgICAgICAgICog
SmV0U3RyZWFtMi93YXNtLWNsaS5qczogQWRkZWQuCisgICAgICAgIChjb25zb2xlLmxvZyk6Cisg
ICAgICAgIChhc3luYyBydW5KZXRTdHJlYW0pOgorCiAyMDIwLTAyLTE3ICBEb24gT2xtc3RlYWQg
IDxkb24ub2xtc3RlYWRAc29ueS5jb20+CiAKICAgICAgICAgW0NNYWtlXSBVc2UgYnVpbHRpbiB0
YXJnZXRzCkluZGV4OiBQZXJmb3JtYW5jZVRlc3RzL0pldFN0cmVhbTIvSmV0U3RyZWFtRHJpdmVy
LmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFBlcmZvcm1hbmNlVGVzdHMvSmV0U3RyZWFtMi9KZXRTdHJlYW1E
cml2ZXIuanMJKHJldmlzaW9uIDI1Nzg2NikKKysrIFBlcmZvcm1hbmNlVGVzdHMvSmV0U3RyZWFt
Mi9KZXRTdHJlYW1Ecml2ZXIuanMJKHdvcmtpbmcgY29weSkKQEAgLTQwOSw5ICs0MDksOSBAQCBj
bGFzcyBEcml2ZXIgewogICAgIGR1bXBKU09OUmVzdWx0c0lmTmVlZGVkKCkKICAgICB7CiAgICAg
ICAgIGlmIChkdW1wSlNPTlJlc3VsdHMpIHsKLSAgICAgICAgICAgIHByaW50KCJcbiIpOwotICAg
ICAgICAgICAgcHJpbnQodGhpcy5yZXN1bHRzSlNPTigpKTsKLSAgICAgICAgICAgIHByaW50KCJc
biIpOworICAgICAgICAgICAgY29uc29sZS5sb2coIlxuIik7CisgICAgICAgICAgICBjb25zb2xl
LmxvZyh0aGlzLnJlc3VsdHNKU09OKCkpOworICAgICAgICAgICAgY29uc29sZS5sb2coIlxuIik7
CiAgICAgICAgIH0KICAgICB9CiAKQEAgLTcyNSwxNSArNzI1LDE1IEBAIGNsYXNzIERlZmF1bHRC
ZW5jaG1hcmsgZXh0ZW5kcyBCZW5jaG1hcmsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAg
fQogCi0gICAgICAgIHByaW50KCIgICAgU3RhcnR1cDoiLCB1aUZyaWVuZGx5TnVtYmVyKHRoaXMu
Zmlyc3RJdGVyYXRpb24pKTsKLSAgICAgICAgcHJpbnQoIiAgICBXb3JzdCBDYXNlOiIsIHVpRnJp
ZW5kbHlOdW1iZXIodGhpcy53b3JzdDQpKTsKLSAgICAgICAgcHJpbnQoIiAgICBBdmVyYWdlOiIs
IHVpRnJpZW5kbHlOdW1iZXIodGhpcy5hdmVyYWdlKSk7Ci0gICAgICAgIHByaW50KCIgICAgU2Nv
cmU6IiwgdWlGcmllbmRseU51bWJlcih0aGlzLnNjb3JlKSk7CisgICAgICAgIGNvbnNvbGUubG9n
KCIgICAgU3RhcnR1cDoiLCB1aUZyaWVuZGx5TnVtYmVyKHRoaXMuZmlyc3RJdGVyYXRpb24pKTsK
KyAgICAgICAgY29uc29sZS5sb2coIiAgICBXb3JzdCBDYXNlOiIsIHVpRnJpZW5kbHlOdW1iZXIo
dGhpcy53b3JzdDQpKTsKKyAgICAgICAgY29uc29sZS5sb2coIiAgICBBdmVyYWdlOiIsIHVpRnJp
ZW5kbHlOdW1iZXIodGhpcy5hdmVyYWdlKSk7CisgICAgICAgIGNvbnNvbGUubG9nKCIgICAgU2Nv
cmU6IiwgdWlGcmllbmRseU51bWJlcih0aGlzLnNjb3JlKSk7CiAgICAgICAgIGlmIChSQU1pZmlj
YXRpb24pIHsKLSAgICAgICAgICAgIHByaW50KCIgICAgQ3VycmVudCBGb290cHJpbnQ6IiwgdWlG
cmllbmRseU51bWJlcih0aGlzLmN1cnJlbnRGb290cHJpbnQpKTsKLSAgICAgICAgICAgIHByaW50
KCIgICAgUGVhayBGb290cHJpbnQ6IiwgdWlGcmllbmRseU51bWJlcih0aGlzLnBlYWtGb290cHJp
bnQpKTsKKyAgICAgICAgICAgIGNvbnNvbGUubG9nKCIgICAgQ3VycmVudCBGb290cHJpbnQ6Iiwg
dWlGcmllbmRseU51bWJlcih0aGlzLmN1cnJlbnRGb290cHJpbnQpKTsKKyAgICAgICAgICAgIGNv
bnNvbGUubG9nKCIgICAgUGVhayBGb290cHJpbnQ6IiwgdWlGcmllbmRseU51bWJlcih0aGlzLnBl
YWtGb290cHJpbnQpKTsKICAgICAgICAgfQotICAgICAgICBwcmludCgiICAgIFdhbGwgdGltZToi
LCB1aUZyaWVuZGx5RHVyYXRpb24obmV3IERhdGUodGhpcy5lbmRUaW1lIC0gdGhpcy5zdGFydFRp
bWUpKSk7CisgICAgICAgIGNvbnNvbGUubG9nKCIgICAgV2FsbCB0aW1lOiIsIHVpRnJpZW5kbHlE
dXJhdGlvbihuZXcgRGF0ZSh0aGlzLmVuZFRpbWUgLSB0aGlzLnN0YXJ0VGltZSkpKTsKICAgICB9
CiB9CiAKQEAgLTgxOSwxNCArODE5LDE0IEBAIGNsYXNzIFdTTEJlbmNobWFyayBleHRlbmRzIEJl
bmNobWFyayB7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KIAotICAgICAgICBwcmlu
dCgiICAgIFN0ZGxpYjoiLCB1aUZyaWVuZGx5TnVtYmVyKHRoaXMuc3RkbGliKSk7Ci0gICAgICAg
IHByaW50KCIgICAgVGVzdHM6IiwgdWlGcmllbmRseU51bWJlcih0aGlzLm1haW5SdW4pKTsKLSAg
ICAgICAgcHJpbnQoIiAgICBTY29yZToiLCB1aUZyaWVuZGx5TnVtYmVyKHRoaXMuc2NvcmUpKTsK
KyAgICAgICAgY29uc29sZS5sb2coIiAgICBTdGRsaWI6IiwgdWlGcmllbmRseU51bWJlcih0aGlz
LnN0ZGxpYikpOworICAgICAgICBjb25zb2xlLmxvZygiICAgIFRlc3RzOiIsIHVpRnJpZW5kbHlO
dW1iZXIodGhpcy5tYWluUnVuKSk7CisgICAgICAgIGNvbnNvbGUubG9nKCIgICAgU2NvcmU6Iiwg
dWlGcmllbmRseU51bWJlcih0aGlzLnNjb3JlKSk7CiAgICAgICAgIGlmIChSQU1pZmljYXRpb24p
IHsKLSAgICAgICAgICAgIHByaW50KCIgICAgQ3VycmVudCBGb290cHJpbnQ6IiwgdWlGcmllbmRs
eU51bWJlcih0aGlzLmN1cnJlbnRGb290cHJpbnQpKTsKLSAgICAgICAgICAgIHByaW50KCIgICAg
UGVhayBGb290cHJpbnQ6IiwgdWlGcmllbmRseU51bWJlcih0aGlzLnBlYWtGb290cHJpbnQpKTsK
KyAgICAgICAgICAgIGNvbnNvbGUubG9nKCIgICAgQ3VycmVudCBGb290cHJpbnQ6IiwgdWlGcmll
bmRseU51bWJlcih0aGlzLmN1cnJlbnRGb290cHJpbnQpKTsKKyAgICAgICAgICAgIGNvbnNvbGUu
bG9nKCIgICAgUGVhayBGb290cHJpbnQ6IiwgdWlGcmllbmRseU51bWJlcih0aGlzLnBlYWtGb290
cHJpbnQpKTsKICAgICAgICAgfQotICAgICAgICBwcmludCgiICAgIFdhbGwgdGltZToiLCB1aUZy
aWVuZGx5RHVyYXRpb24obmV3IERhdGUodGhpcy5lbmRUaW1lIC0gdGhpcy5zdGFydFRpbWUpKSk7
CisgICAgICAgIGNvbnNvbGUubG9nKCIgICAgV2FsbCB0aW1lOiIsIHVpRnJpZW5kbHlEdXJhdGlv
bihuZXcgRGF0ZSh0aGlzLmVuZFRpbWUgLSB0aGlzLnN0YXJ0VGltZSkpKTsKICAgICB9CiB9Owog
CkBAIC05NzUsMTMgKzk3NSwxMyBAQCBjbGFzcyBXYXNtQmVuY2htYXJrIGV4dGVuZHMgQmVuY2ht
YXJrIHsKICAgICAgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKHRoaXMuc2NvcmVJRCku
aW5uZXJIVE1MID0gdWlGcmllbmRseU51bWJlcih0aGlzLnNjb3JlKTsKICAgICAgICAgICAgIHJl
dHVybjsKICAgICAgICAgfQotICAgICAgICBwcmludCgiICAgIFN0YXJ0dXA6IiwgdWlGcmllbmRs
eU51bWJlcih0aGlzLnN0YXJ0dXBUaW1lKSk7Ci0gICAgICAgIHByaW50KCIgICAgUnVuIHRpbWU6
IiwgdWlGcmllbmRseU51bWJlcih0aGlzLnJ1blRpbWUpKTsKKyAgICAgICAgY29uc29sZS5sb2co
IiAgICBTdGFydHVwOiIsIHVpRnJpZW5kbHlOdW1iZXIodGhpcy5zdGFydHVwVGltZSkpOworICAg
ICAgICBjb25zb2xlLmxvZygiICAgIFJ1biB0aW1lOiIsIHVpRnJpZW5kbHlOdW1iZXIodGhpcy5y
dW5UaW1lKSk7CiAgICAgICAgIGlmIChSQU1pZmljYXRpb24pIHsKLSAgICAgICAgICAgIHByaW50
KCIgICAgQ3VycmVudCBGb290cHJpbnQ6IiwgdWlGcmllbmRseU51bWJlcih0aGlzLmN1cnJlbnRG
b290cHJpbnQpKTsKLSAgICAgICAgICAgIHByaW50KCIgICAgUGVhayBGb290cHJpbnQ6IiwgdWlG
cmllbmRseU51bWJlcih0aGlzLnBlYWtGb290cHJpbnQpKTsKKyAgICAgICAgICAgIGNvbnNvbGUu
bG9nKCIgICAgQ3VycmVudCBGb290cHJpbnQ6IiwgdWlGcmllbmRseU51bWJlcih0aGlzLmN1cnJl
bnRGb290cHJpbnQpKTsKKyAgICAgICAgICAgIGNvbnNvbGUubG9nKCIgICAgUGVhayBGb290cHJp
bnQ6IiwgdWlGcmllbmRseU51bWJlcih0aGlzLnBlYWtGb290cHJpbnQpKTsKICAgICAgICAgfQot
ICAgICAgICBwcmludCgiICAgIFNjb3JlOiIsIHVpRnJpZW5kbHlOdW1iZXIodGhpcy5zY29yZSkp
OworICAgICAgICBjb25zb2xlLmxvZygiICAgIFNjb3JlOiIsIHVpRnJpZW5kbHlOdW1iZXIodGhp
cy5zY29yZSkpOwogICAgIH0KIH07CiAKSW5kZXg6IFBlcmZvcm1hbmNlVGVzdHMvSmV0U3RyZWFt
Mi93YXNtLWNsaS5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBQZXJmb3JtYW5jZVRlc3RzL0pldFN0cmVhbTIv
d2FzbS1jbGkuanMJKG5vbmV4aXN0ZW50KQorKysgUGVyZm9ybWFuY2VUZXN0cy9KZXRTdHJlYW0y
L3dhc20tY2xpLmpzCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDYgQEAKKworLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMg
Q09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisg
KiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQor
ICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorKi8K
KworY29uc3QgaXNJbkJyb3dzZXIgPSBmYWxzZTsKK2NvbnNvbGUgPSB7CisgICAgbG9nOiAoKSA9
PiB7IH0KK30KKwordGVzdExpc3QgPSBbIkhhc2hTZXQtd2FzbSIsICJ0c2Ytd2FzbSIsICJxdWlj
a3NvcnQtd2FzbSIsICJnY2MtbG9vcHMtd2FzbSIsICJyaWNoYXJkcy13YXNtIl07CisKK1JBTWlm
aWNhdGlvbiA9IGZhbHNlOworCitsb2FkKCIuL0pldFN0cmVhbURyaXZlci5qcyIpOworCithc3lu
YyBmdW5jdGlvbiBydW5KZXRTdHJlYW0oKSB7CisgICAgdHJ5IHsKKyAgICAgICAgYXdhaXQgSmV0
U3RyZWFtLmluaXRpYWxpemUoKTsKKyAgICAgICAgSmV0U3RyZWFtLnN0YXJ0KCk7CisgICAgfSBj
YXRjaCAoZSkgeworICAgICAgICB0aHJvdyBlOworICAgIH0KK30KK3J1bkpldFN0cmVhbSgpOwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCShyZXZpc2lvbiAyNTc4NjYpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTA0IEBA
CisyMDIwLTAzLTEyICBTYWFtIEJhcmF0aSAgPHNiYXJhdGlAYXBwbGUuY29tPgorCisgICAgICAg
IEltcGxlbWVudCAxR0Igb2YgZXhlY3V0YWJsZSBtZW1vcnkgb24gYXJtNjQKKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIwODQ5MAorCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRoaXMgcGF0Y2ggaW1wbGVtZW50
cyB0aGUgMUdCIGV4ZWN1dGFibGUgbWVtb3J5IHNwYWNlIG9uIGFybTY0LiBUbyBtYWtlIHRoaXMK
KyAgICAgICAgd29yaywgd2UgaW1wbGVtZW50IGp1bXBzIGxhcmdlciB0aGFuICsvLTEyOE1CIHRv
IHVzZSBqdW1wIGlzbGFuZHMuIEp1bXAgaXNsYW5kcworICAgICAgICB3b3JrIGJ5IHNwbGl0dGlu
ZyB1cCB0aGUgfjFHQiByZWdpb24gaW50byA5IDExMk1CIGNodW5rcyAoMTAwOCBNQiB0b3RhbCku
IEVhY2gKKyAgICAgICAgY2h1bmsgaXMgc3BsaXQgaW50byB0d286IDk2TUIgb2YgZXhlY3V0YWJs
ZSByZWdpb24sIGFuZCAxNk1CIG9mIGp1bXAgaXNsYW5kIHJlZ2lvbi4KKyAgICAgICAgV2l0aCB0
aGlzIHNwbGl0LCBhbnkganVtcCBpbnNpZGUgYSBqdW1wIGlzbGFuZCByZWdpb24gY2FuIGdldCB0
byB0aGUgYWRqYWNlbnQKKyAgICAgICAgaXNsYW5kIChmb3J3YXJkcyBvciBiYWNrd2FyZHMpIGlu
IGEgc2luZ2xlICsvLTEyOE1CIGp1bXAuIFdoZW4gbGlua2luZyBhIGp1bXAKKyAgICAgICAgZnJv
bSBBIHRvIEIsIHdoZXJlIHxBIC0gQnwgPiAxMjhNQiwgd2UgaW5zdGVhZCBwb2ludCB0aGUganVt
cCB0byBhbiBpc2xhbmQsCisgICAgICAgIHdoZXJlIHRoaXMgaXNsYW5kIGhhcyBhIHBvdGVudGlh
bCBzZXJpZXMgb2YganVtcHMgdGhhdCBmaW5hbGx5IGxhbmRzIGF0IEIuCisgICAgICAgIAorICAg
ICAgICBUbyBhbGxvY2F0ZSBleGVjdXRhYmxlIG1lbW9yeSwgdXNlIGEgTWV0YUFsbG9jYXRvciBm
b3IgZWFjaCA5Nk1CIGNodW5rLiBUbworICAgICAgICBhbGxvY2F0ZSBpc2xhbmRzLCB3ZSBoYXZl
IGEgYml0IHZlY3RvciB3ZSB1c2UgdG8gdHJhY2sgdXNlZCBhbmQgZnJlZWQgaXNsYW5kcy4KKyAg
ICAgICAgV2Ugb25seSBncm93IHRoaXMgYml0IHZlY3RvciBhcyBpc2xhbmRzIGFyZSBhbGxvY2F0
ZWQsIHNvIGl0IGZyZXF1ZW50bHkKKyAgICAgICAgcmVtYWlucyBlbXB0eSBvciB2ZXJ5IHNtYWxs
LgorICAgICAgICAKKyAgICAgICAgVGhlIGdvYWwgb2YgdGhpcyBwYXRjaCBpcyB0byBoYXZlIG1p
bmltYWwgcGVyZiBpbXBhY3Qgd2hlbiBub3QgdXNpbmcgaXNsYW5kcywKKyAgICAgICAgc28gdGhl
IGRhdGEgc3RydWN0dXJlcyBhcmUgZGVzaWduZWQgdG8gb25seSBpbmN1ciBvdmVyaGVhZCB3aGVu
IGFjdHVhbGx5IHVzaW5nCisgICAgICAgIGlzbGFuZHMuIFdlIGV4cGVjdCB0aGUgdXNlIG9mIGlz
bGFuZHMgdG8gYmUgbWluaW1hbC4gV2UgdXNlIGEgcmVkIGJsYWNrIHRyZWUKKyAgICAgICAgdG8g
dHJhY2sgYWxsIGlzbGFuZCBsb2NhdGlvbnMuIFRoaXMgYWxsb3dzIHVzIHRvIGRlYWxsb2NhdGUg
YWxsIGlzbGFuZHMgd2hlbgorICAgICAgICBhbiBleGVjdXRhYmxlIG1lbW9yeSBoYW5kbGUgaXMg
ZnJlZWQuIFR5cGljYWxseSwgdGhpcyByZWQgYmxhY2sgdHJlZSBpcyBlbXB0eSwKKyAgICAgICAg
c28gZnJlZWluZyBhbiBleGVjdXRhYmxlIG1lbW9yeSBoYW5kbGUgaW5jdXJzIG5vIGV4dHJhIG92
ZXJoZWFkLgorICAgICAgICAKKyAgICAgICAgVG8gbWFrZSBpc2xhbmRzIHdvcmsgZm9yIFdhc20s
IHdlIG5vdyBoYXZlIHRvIGxpbmsgdGllciB1cCBjb2RlIGluIHR3byBwaGFzZXMuCisgICAgICAg
IFByZXZpb3VzbHksIHdlIHdvdWxkIGp1c3QgcGF0Y2gganVtcHMgY29uY3VycmVudGx5IHRvIFdh
c20gdGhyZWFkcyBydW5uaW5nIGFmdGVyCisgICAgICAgIHJlc2V0dGluZyB0aGUgaWNhY2hlLCBr
bm93aW5nIHRoYXQgd2Ugd291bGQgYmUgYWJsZSB0byBhdG9taWNhbGx5IHVwZGF0ZSB0aGUganVt
cAorICAgICAgICBpbnN0cnVjdGlvbiB0byBwb2ludCB0byB0aGUgbmV3IGRlc3RpbmF0aW9uLiBI
b3dldmVyLCBub3cgd2hlbiByZXBhdGNoaW5nIHRoZXNlCisgICAgICAgIGp1bXBzIGluIGEgd29y
bGQgd2l0aCBqdW1wIGlzbGFuZHMsIHdlIG1pZ2h0IG5lZWQgdG8gYWxsb2NhdGUgaXNsYW5kcyBk
ZXBlbmRpbmcKKyAgICAgICAgb24gdGhlIGp1bXAgbG9jYXRpb24gYW5kIGl0cyB0YXJnZXQuIFNv
IHdlIG5vdyBhbGxvY2F0ZSBhbmQgY29sbGVjdCB0aGUgc2V0IG9mIGlzbGFuZHMsCisgICAgICAg
IHRoZW4gcmVzZXQgdGhlIGljYWNoZSwgdGhlbiBhdG9taWNhbGx5IHVwZGF0ZSB0aGUgYnJhbmNo
IHRvIHBvaW50IHRvIHRoZSBkZXN0aW5hdGlvbgorICAgICAgICAob3IgYW4gaXNsYW5kIHRoYXQg
anVtcHMgdG8gdGhlIGRlc3RpbmF0aW9uKS4gT25lIGltcG9ydGFudCBpbXBsZW1lbnRhdGlvbiBk
ZXRhaWwKKyAgICAgICAgaGVyZSBpcyB0aGF0IGZvciBub3JtYWwgaXNsYW5kIHJlcGF0Y2hpbmcs
IGlmIHdlIGhhdmUgYSBqdW1wIGZyb20gQSB0byBCLCBhbmQgaXQKKyAgICAgICAgYWxsb2NhdGVz
IGEgc2V0IGlmIGlzbGFuZHMgWCwgd2UgdXN1YWxseSBjYW4gZGVhbGxvY2F0ZSBYIHdoZW4gcmVw
YXRjaGluZyBBIHRvIGdvIHRvIEInLgorICAgICAgICBUaGlzIGlzIGJlY2F1c2UgdGhlIHR5cGlj
YWwgcmVwYXRjaCBzY2VuYXJpbyBpbiBKUyBoYXBwZW5zIHdoZW4gdGhhdCBjb2RlIGlzIG5vdCBi
ZWluZworICAgICAgICBleGVjdXRlZC4gRm9yIFdhc20gdGhvdWdoLCB0aG9zZSBpc2xhbmRzIFgg
bWlnaHQgYmUgcnVubmluZyB3aGlsZSB3ZSB3YW50IHRvIHJlcGF0Y2gKKyAgICAgICAgQSB0byBn
byB0byBCJy4gU28gaW5zdGVhZCBvZiBkZWFsbG9jYXRpbmcgWCwgd2UganVzdCBhcHBlbmQgdG8g
WCBpbiB0aGlzIHNjZW5hcmlvLCBhbmQKKyAgICAgICAgd2UgZnJlZSB0aGUgbmV3IHNldCBYJyB3
aGVuIHRoZSBjb2RlIGl0c2VsZiBpcyBmcmVlZC4KKyAgICAgICAgCisgICAgICAgIChUaGlzIHBh
dGNoIGFsc28gZml4ZXMgYSBidWcgaW4gdGhlIFdhc20gTExJbnQgdG8gQkJRIHRpZXIgdXAgdGhh
dCBJIHNwb3R0ZWQsCisgICAgICAgIHdoZXJlIHdlIHdvdWxkIHB1Ymxpc2ggYSBMTEludCBjYWxs
ZWUncyBCQlEgcmVwbGFjZW1lbnQgYmVmb3JlIHdlIGZpbmlzaGVkCisgICAgICAgIGxpbmtpbmcg
dGhlIG91dGdvaW5nIGNhbGxzIG9mIHRoZSBCQlEgcmVwbGFjZW1lbnQuKQorICAgICAgICAKKyAg
ICAgICAgVGhpcyBwYXRjaCBhbHNvIHJlbW92ZXMgdGhlIG9sZCAiQ29kZVByb2ZpbGluZyIgY29k
ZSB0aGF0IGhhcyBiZWVuIHVudXNlZCBmb3IKKyAgICAgICAgYSBsb25nIHRpbWUuCisKKyAgICAg
ICAgKiBKYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAq
IFNvdXJjZXMudHh0OgorICAgICAgICAqIGFzc2VtYmxlci9BUk02NEFzc2VtYmxlci5oOgorICAg
ICAgICAoSlNDOjpBUk02NEFzc2VtYmxlcjo6Yik6CisgICAgICAgIChKU0M6OkFSTTY0QXNzZW1i
bGVyOjpibCk6CisgICAgICAgIChKU0M6OkFSTTY0QXNzZW1ibGVyOjpyZXBsYWNlV2l0aEp1bXAp
OgorICAgICAgICAoSlNDOjpBUk02NEFzc2VtYmxlcjo6cHJlcGFyZUZvckF0b21pY1JlbGlua0p1
bXBDb25jdXJyZW50bHkpOgorICAgICAgICAoSlNDOjpBUk02NEFzc2VtYmxlcjo6cHJlcGFyZUZv
ckF0b21pY1JlbGlua0NhbGxDb25jdXJyZW50bHkpOgorICAgICAgICAoSlNDOjpBUk02NEFzc2Vt
Ymxlcjo6Y29tcHV0ZUp1bXBUeXBlKToKKyAgICAgICAgKEpTQzo6QVJNNjRBc3NlbWJsZXI6OmNh
bkVtaXRKdW1wKToKKyAgICAgICAgKEpTQzo6QVJNNjRBc3NlbWJsZXI6OmxpbmtKdW1wT3JDYWxs
KToKKyAgICAgICAgKEpTQzo6QVJNNjRBc3NlbWJsZXI6OmxpbmtDb21wYXJlQW5kQnJhbmNoKToK
KyAgICAgICAgKEpTQzo6QVJNNjRBc3NlbWJsZXI6OmxpbmtDb25kaXRpb25hbEJyYW5jaCk6Cisg
ICAgICAgIChKU0M6OkFSTTY0QXNzZW1ibGVyOjpsaW5rVGVzdEFuZEJyYW5jaCk6CisgICAgICAg
ICogYXNzZW1ibGVyL0Fic3RyYWN0TWFjcm9Bc3NlbWJsZXIuaDoKKyAgICAgICAgKEpTQzo6QWJz
dHJhY3RNYWNyb0Fzc2VtYmxlcjo6cHJlcGFyZUZvckF0b21pY1JlcGF0Y2hOZWFyQ2FsbENvbmN1
cnJlbnRseSk6CisgICAgICAgICogYXNzZW1ibGVyL0xpbmtCdWZmZXIuY3BwOgorICAgICAgICAo
SlNDOjpMaW5rQnVmZmVyOjpjb3B5Q29tcGFjdEFuZExpbmtDb2RlKToKKyAgICAgICAgKEpTQzo6
TGlua0J1ZmZlcjo6bGlua0NvZGUpOgorICAgICAgICAoSlNDOjpMaW5rQnVmZmVyOjphbGxvY2F0
ZSk6CisgICAgICAgICogYXNzZW1ibGVyL0xpbmtCdWZmZXIuaDoKKyAgICAgICAgKEpTQzo6TGlu
a0J1ZmZlcjo6TGlua0J1ZmZlcik6CisgICAgICAgICogYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVy
Q29kZVJlZi5oOgorICAgICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxlckNvZGVSZWY6Ok1hY3JvQXNz
ZW1ibGVyQ29kZVJlZik6CisgICAgICAgICogaml0L0V4ZWN1dGFibGVBbGxvY2F0b3IuY3BwOgor
ICAgICAgICAoSlNDOjppbml0aWFsaXplSklUUGFnZVJlc2VydmF0aW9uKToKKyAgICAgICAgKEpT
Qzo6RXhlY3V0YWJsZUFsbG9jYXRvcjo6aW5pdGlhbGl6ZVVuZGVybHlpbmdBbGxvY2F0b3IpOgor
ICAgICAgICAoSlNDOjpFeGVjdXRhYmxlQWxsb2NhdG9yOjppc1ZhbGlkIGNvbnN0KToKKyAgICAg
ICAgKEpTQzo6RXhlY3V0YWJsZUFsbG9jYXRvcjo6YWxsb2NhdGUpOgorICAgICAgICAoSlNDOjpF
eGVjdXRhYmxlQWxsb2NhdG9yOjpnZXRKdW1wSXNsYW5kVG8pOgorICAgICAgICAoSlNDOjpFeGVj
dXRhYmxlQWxsb2NhdG9yOjpnZXRKdW1wSXNsYW5kVG9Db25jdXJyZW50bHkpOgorICAgICAgICAo
SlNDOjpGaXhlZFZNUG9vbEV4ZWN1dGFibGVBbGxvY2F0b3I6On5GaXhlZFZNUG9vbEV4ZWN1dGFi
bGVBbGxvY2F0b3IpOiBEZWxldGVkLgorICAgICAgICAqIGppdC9FeGVjdXRhYmxlQWxsb2NhdG9y
Lmg6CisgICAgICAgIChKU0M6OkV4ZWN1dGFibGVBbGxvY2F0b3JCYXNlOjphbGxvY2F0ZSk6Cisg
ICAgICAgICogcnVudGltZS9Db21tb25TbG93UGF0aHMuY3BwOgorICAgICAgICAqIHJ1bnRpbWUv
Q29tcGxldGlvbi5jcHA6CisgICAgICAgIChKU0M6OmV2YWx1YXRlKToKKyAgICAgICAgKiBydW50
aW1lL0pTTW9kdWxlTG9hZGVyLmNwcDoKKyAgICAgICAgKEpTQzo6bW9kdWxlTG9hZGVyUGFyc2VN
b2R1bGUpOgorICAgICAgICAqIHJ1bnRpbWUvT3B0aW9uc0xpc3QuaDoKKyAgICAgICAgKiB0b29s
cy9Db2RlUHJvZmlsZS5jcHA6IFJlbW92ZWQuCisgICAgICAgICogdG9vbHMvQ29kZVByb2ZpbGUu
aDogUmVtb3ZlZC4KKyAgICAgICAgKiB0b29scy9Db2RlUHJvZmlsaW5nLmNwcDogUmVtb3ZlZC4K
KyAgICAgICAgKiB0b29scy9Db2RlUHJvZmlsaW5nLmg6IFJlbW92ZWQuCisgICAgICAgICogd2Fz
bS9XYXNtQkJRUGxhbi5jcHA6CisgICAgICAgIChKU0M6Oldhc206OkJCUVBsYW46OndvcmspOgor
ICAgICAgICAqIHdhc20vV2FzbU9NR0Zvck9TUkVudHJ5UGxhbi5jcHA6CisgICAgICAgIChKU0M6
Oldhc206Ok9NR0Zvck9TUkVudHJ5UGxhbjo6d29yayk6CisgICAgICAgICogd2FzbS9XYXNtT01H
UGxhbi5jcHA6CisgICAgICAgIChKU0M6Oldhc206Ok9NR1BsYW46OndvcmspOgorCiAyMDIwLTAz
LTA0ICBQYXVsbyBNYXRvcyAgPHBtYXRvc0BpZ2FsaWEuY29tPgogCiAgICAgICAgIEpTQyAzMmJp
dHMgYnJva2VuIGluIGRlYnVnIG1vZGUgYnkgcjI1NzM5OQpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL1NvdXJjZXMudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9T
b3VyY2VzLnR4dAkocmV2aXNpb24gMjU3ODY2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL1Nv
dXJjZXMudHh0CSh3b3JraW5nIGNvcHkpCkBAIC05OTQsOCArOTk0LDYgQEAgcnVudGltZS9XaWRl
bmluZ051bWJlclByZWRpY3Rpb25GdXp6ZXJBZwogSlNDQnVpbHRpbnMuY3BwCiAKIHRvb2xzL0Nl
bGxMaXN0LmNwcAotdG9vbHMvQ29kZVByb2ZpbGUuY3BwCi10b29scy9Db2RlUHJvZmlsaW5nLmNw
cAogdG9vbHMvQ29tcGlsZXJUaW1pbmdTY29wZS5jcHAKIHRvb2xzL0Z1bmN0aW9uT3ZlcnJpZGVz
LmNwcAogdG9vbHMvRnVuY3Rpb25XaGl0ZWxpc3QuY3BwCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2pl
Y3QucGJ4cHJvagkocmV2aXNpb24gMjU3ODY2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0ph
dmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAg
LTQwNzEsOCArNDA3MSw2IEBACiAJCTg2MDE2MUUwMEYzQTgzQzEwMEY4NDcxMCAvKiBNYWNyb0Fz
c2VtYmxlclg4Ni5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBNYWNyb0Fzc2Vt
Ymxlclg4Ni5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk4NjAxNjFFMTBGM0E4M0Mx
MDBGODQ3MTAgLyogTWFjcm9Bc3NlbWJsZXJYODZfNjQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gTWFjcm9Bc3NlbWJsZXJYODZfNjQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJODYwMTYxRTIwRjNBODNDMTAwRjg0NzEwIC8qIE1hY3JvQXNzZW1ibGVyWDg2Q29t
bW9uLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE1hY3JvQXNzZW1ibGVyWDg2
Q29tbW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTg2MDNDRUYyMTRDNzU0NjQw
MEFFNTlFMyAvKiBDb2RlUHJvZmlsaW5nLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgcGF0aCA9IENvZGVQcm9maWxpbmcuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owot
CQk4NjAzQ0VGMzE0Qzc1NDY0MDBBRTU5RTMgLyogQ29kZVByb2ZpbGluZy5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBDb2RlUHJvZmlsaW5nLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTg2MDRGNEYyMTQzQTZDNDQwMEIyOTVGNSAvKiBDaGFuZ2VMb2cgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBsaW5lRW5k
aW5nID0gMDsgcGF0aCA9IENoYW5nZUxvZzsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
ODYwNkRERTkxOERBNDRBQjAwQTM4M0QwIC8qIElkZW50aWZpZXJJbmxpbmVzLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IElkZW50aWZpZXJJbmxpbmVzLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTg2MTJFNENCMTUyMjkxODQwMEM4MzZCRSAvKiBNYXRjaFJlc3Vs
dC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBNYXRjaFJlc3VsdC5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtNDExOCw4ICs0MTE2LDYgQEAKIAkJODZBREQxNDMw
RkRERUE5ODAwMDZGRkNDIC8qIEFSTXY3UmVnaXN0ZXJzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IEFSTXY3UmVnaXN0ZXJzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTg2QUREMTQ0MEZEREVBOTgwMDA2RUVDMiAvKiBNYWNyb0Fzc2VtYmxlckFSTXY3LmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE1hY3JvQXNzZW1ibGVyQVJNdjcuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJODZCNTgyMkMxNEQyMkY1RjAwQTlDMzA2IC8qIFBy
b2ZpbGVUcmVlTm9kZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBQcm9maWxl
VHJlZU5vZGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJODZCNTgyMkUxNEQyMzcz
QjAwQTlDMzA2IC8qIENvZGVQcm9maWxlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgcGF0aCA9IENvZGVQcm9maWxlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJ
ODZCNTgyMkYxNEQyMzczQjAwQTlDMzA2IC8qIENvZGVQcm9maWxlLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IENvZGVQcm9maWxlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTg2QjU4MjZBMTREMzVENTEwMEE5QzMwNiAvKiBUaWVyZWRNTWFwQXJyYXkuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVGllcmVkTU1hcEFycmF5Lmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTg2QkY2NDJBMTQ4REIyQjUwMDRERTM2QSAvKiBJbnRyaW5z
aWMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSW50cmluc2ljLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTg2QzM2RUU5MEVFMTI4OUQwMEIzREY1OSAvKiBNYWNy
b0Fzc2VtYmxlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBNYWNyb0Fzc2Vt
Ymxlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtNzY3NiwxMCArNzY3Miw2IEBA
CiAJCQkJRkUxQkQwMUIxRTcyMDAyMTAwMTM0QkM5IC8qIENlbGxMaXN0LmNwcCAqLywKIAkJCQlG
RTFCRDAxQzFFNzIwMDIxMDAxMzRCQzkgLyogQ2VsbExpc3QuaCAqLywKIAkJCQlGRTFCRDAyMDFF
NzIwMjcwMDAxMzRCQzkgLyogQ2VsbFByb2ZpbGUuaCAqLywKLQkJCQk4NkI1ODIyRTE0RDIzNzNC
MDBBOUMzMDYgLyogQ29kZVByb2ZpbGUuY3BwICovLAotCQkJCTg2QjU4MjJGMTREMjM3M0IwMEE5
QzMwNiAvKiBDb2RlUHJvZmlsZS5oICovLAotCQkJCTg2MDNDRUYyMTRDNzU0NjQwMEFFNTlFMyAv
KiBDb2RlUHJvZmlsaW5nLmNwcCAqLywKLQkJCQk4NjAzQ0VGMzE0Qzc1NDY0MDBBRTU5RTMgLyog
Q29kZVByb2ZpbGluZy5oICovLAogCQkJCTBGNEYxMUU3MjA5QkNEQTEwMDcwOTY1NCAvKiBDb21w
aWxlclRpbWluZ1Njb3BlLmNwcCAqLywKIAkJCQkwRjRGMTFFNjIwOUJDREExMDA3MDk2NTQgLyog
Q29tcGlsZXJUaW1pbmdTY29wZS5oICovLAogCQkJCUZFNEJGRjI5MUFENDc2RTcwMDA4OEY4NyAv
KiBGdW5jdGlvbk92ZXJyaWRlcy5jcHAgKi8sCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
YXNzZW1ibGVyL0FSTTY0QXNzZW1ibGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2Fzc2VtYmxlci9BUk02NEFzc2VtYmxlci5oCShyZXZpc2lvbiAyNTc4NjYpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL0FSTTY0QXNzZW1ibGVyLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTc4MywxMiArNzgzLDkgQEAgcHVibGljOgogICAgICAgICBpbnNuKGRhdGFQcm9j
ZXNzaW5nMlNvdXJjZShEQVRBU0laRSwgcm0sIERhdGFPcF9BU1JWLCBybiwgcmQpKTsKICAgICB9
CiAKLSAgICBBTFdBWVNfSU5MSU5FIHZvaWQgYihpbnQzMl90IG9mZnNldCA9IDApCisgICAgQUxX
QVlTX0lOTElORSB2b2lkIGIoKQogICAgIHsKLSAgICAgICAgQVNTRVJUKCEob2Zmc2V0ICYgMykp
OwotICAgICAgICBvZmZzZXQgPj49IDI7Ci0gICAgICAgIEFTU0VSVChvZmZzZXQgPT0gKG9mZnNl
dCA8PCA2KSA+PiA2KTsKLSAgICAgICAgaW5zbih1bmNvbmRpdGlvbmFsQnJhbmNoSW1tZWRpYXRl
KGZhbHNlLCBvZmZzZXQpKTsKKyAgICAgICAgaW5zbih1bmNvbmRpdGlvbmFsQnJhbmNoSW1tZWRp
YXRlKGZhbHNlLCAwKSk7CiAgICAgfQogCiAgICAgQUxXQVlTX0lOTElORSB2b2lkIGJfY29uZChD
b25kaXRpb24gY29uZCwgaW50MzJfdCBvZmZzZXQgPSAwKQpAQCAtODMxLDExICs4MjgsOSBAQCBw
dWJsaWM6CiAgICAgICAgIGluc24obG9naWNhbFNoaWZ0ZWRSZWdpc3RlcihEQVRBU0laRSwgc2V0
RmxhZ3MgPyBMb2dpY2FsT3BfQU5EUyA6IExvZ2ljYWxPcF9BTkQsIHNoaWZ0LCB0cnVlLCBybSwg
YW1vdW50LCBybiwgcmQpKTsKICAgICB9CiAKLSAgICBBTFdBWVNfSU5MSU5FIHZvaWQgYmwoaW50
MzJfdCBvZmZzZXQgPSAwKQorICAgIEFMV0FZU19JTkxJTkUgdm9pZCBibCgpCiAgICAgewotICAg
ICAgICBBU1NFUlQoIShvZmZzZXQgJiAzKSk7Ci0gICAgICAgIG9mZnNldCA+Pj0gMjsKLSAgICAg
ICAgaW5zbih1bmNvbmRpdGlvbmFsQnJhbmNoSW1tZWRpYXRlKHRydWUsIG9mZnNldCkpOworICAg
ICAgICBpbnNuKHVuY29uZGl0aW9uYWxCcmFuY2hJbW1lZGlhdGUodHJ1ZSwgMCkpOwogICAgIH0K
IAogICAgIEFMV0FZU19JTkxJTkUgdm9pZCBibHIoUmVnaXN0ZXJJRCBybikKQEAgLTI1ODIsNiAr
MjU3NywxMyBAQCBwdWJsaWM6CiAgICAgewogICAgICAgICBpbnRwdHJfdCBvZmZzZXQgPSAocmVp
bnRlcnByZXRfY2FzdDxpbnRwdHJfdD4odG8pIC0gcmVpbnRlcnByZXRfY2FzdDxpbnRwdHJfdD4o
d2hlcmUpKSA+PiAyOwogICAgICAgICBBU1NFUlQoc3RhdGljX2Nhc3Q8aW50PihvZmZzZXQpID09
IG9mZnNldCk7CisKKyAgICAgICAgaWYgKCFpc0ludDwyNj4ob2Zmc2V0KSkgeworICAgICAgICAg
ICAgdG8gPSBFeGVjdXRhYmxlQWxsb2NhdG9yOjpzaW5nbGV0b24oKS5nZXRKdW1wSXNsYW5kVG8o
d2hlcmUsIHRvKTsKKyAgICAgICAgICAgIG9mZnNldCA9IChiaXR3aXNlX2Nhc3Q8aW50cHRyX3Q+
KHRvKSAtIGJpdHdpc2VfY2FzdDxpbnRwdHJfdD4od2hlcmUpKSA+PiAyOworICAgICAgICAgICAg
UkVMRUFTRV9BU1NFUlQoaXNJbnQ8MjY+KG9mZnNldCkpOworICAgICAgICB9CisKICAgICAgICAg
aW50IGluc24gPSB1bmNvbmRpdGlvbmFsQnJhbmNoSW1tZWRpYXRlKGZhbHNlLCBzdGF0aWNfY2Fz
dDxpbnQ+KG9mZnNldCkpOwogICAgICAgICBSRUxFQVNFX0FTU0VSVChyb3VuZFVwVG9NdWx0aXBs
ZU9mPGluc3RydWN0aW9uU2l6ZT4od2hlcmUpID09IHdoZXJlKTsKICAgICAgICAgcGVyZm9ybUpJ
VE1lbWNweSh3aGVyZSwgJmluc24sIHNpemVvZihpbnQpKTsKQEAgLTI3NzEsNiArMjc3MywyNSBA
QCBwdWJsaWM6CiAgICAgICAgIHJlbGlua0p1bXBPckNhbGw8QnJhbmNoVHlwZV9DQUxMPihyZWlu
dGVycHJldF9jYXN0PGludCo+KGZyb20pIC0gMSwgcmVpbnRlcnByZXRfY2FzdDxjb25zdCBpbnQq
Pihmcm9tKSAtIDEsIHRvKTsKICAgICAgICAgY2FjaGVGbHVzaChyZWludGVycHJldF9jYXN0PGlu
dCo+KGZyb20pIC0gMSwgc2l6ZW9mKGludCkpOwogICAgIH0KKworI2lmIFVTRShKVU1QX0lTTEFO
RFMpCisgICAgc3RhdGljIHZvaWQqIHByZXBhcmVGb3JBdG9taWNSZWxpbmtKdW1wQ29uY3VycmVu
dGx5KHZvaWQqIGZyb20sIHZvaWQqIHRvKQorICAgIHsKKyAgICAgICAgaW50cHRyX3Qgb2Zmc2V0
ID0gKGJpdHdpc2VfY2FzdDxpbnRwdHJfdD4odG8pIC0gYml0d2lzZV9jYXN0PGludHB0cl90Pihm
cm9tKSkgPj4gMjsKKyAgICAgICAgQVNTRVJUKHN0YXRpY19jYXN0PGludD4ob2Zmc2V0KSA9PSBv
ZmZzZXQpOworCisgICAgICAgIGlmIChpc0ludDwyNj4ob2Zmc2V0KSkKKyAgICAgICAgICAgIHJl
dHVybiB0bzsKKworICAgICAgICByZXR1cm4gRXhlY3V0YWJsZUFsbG9jYXRvcjo6c2luZ2xldG9u
KCkuZ2V0SnVtcElzbGFuZFRvQ29uY3VycmVudGx5KGZyb20sIHRvKTsKKyAgICB9CisKKyAgICBz
dGF0aWMgdm9pZCogcHJlcGFyZUZvckF0b21pY1JlbGlua0NhbGxDb25jdXJyZW50bHkodm9pZCog
ZnJvbSwgdm9pZCogdG8pCisgICAgeworICAgICAgICBmcm9tID0gc3RhdGljX2Nhc3Q8dm9pZCo+
KGJpdHdpc2VfY2FzdDxpbnQqPihmcm9tKSAtIDEpOworICAgICAgICByZXR1cm4gcHJlcGFyZUZv
ckF0b21pY1JlbGlua0p1bXBDb25jdXJyZW50bHkoZnJvbSwgdG8pOworICAgIH0KKyNlbmRpZgog
ICAgIAogICAgIHN0YXRpYyB2b2lkIHJlcGF0Y2hDb21wYWN0KHZvaWQqIHdoZXJlLCBpbnQzMl90
IHZhbHVlKQogICAgIHsKQEAgLTI4NzIsNyArMjg5Myw3IEBAIHB1YmxpYzoKICAgICAgICAgICAg
ICAgICByZXR1cm4gTGlua0p1bXBDb25kaXRpb25EaXJlY3Q7CiAKICAgICAgICAgICAgIHJldHVy
biBMaW5rSnVtcENvbmRpdGlvbjsKLSAgICAgICAgICAgIH0KKyAgICAgICAgfQogICAgICAgICBj
YXNlIEp1bXBDb21wYXJlQW5kQnJhbmNoOiAgewogICAgICAgICAgICAgQVNTRVJUKGlzNEJ5dGVB
bGlnbmVkKGZyb20pKTsKICAgICAgICAgICAgIEFTU0VSVChpczRCeXRlQWxpZ25lZCh0bykpOwpA
QCAtMjk0NSw2ICsyOTY2LDEyIEBAIHB1YmxpYzoKICAgICAgICAgfQogICAgIH0KIAorICAgIHN0
YXRpYyBBTFdBWVNfSU5MSU5FIGJvb2wgY2FuRW1pdEp1bXAodm9pZCogZnJvbSwgdm9pZCogdG8p
CisgICAgeworICAgICAgICBpbnRwdHJfdCBkaWZmID0gKGJpdHdpc2VfY2FzdDxpbnRwdHJfdD4o
ZnJvbSkgLSBiaXR3aXNlX2Nhc3Q8aW50cHRyX3Q+KHRvKSkgPj4gMjsKKyAgICAgICAgcmV0dXJu
IGlzSW50PDI2PihkaWZmKTsKKyAgICB9CisKIHByb3RlY3RlZDoKICAgICB0ZW1wbGF0ZTxEYXRh
c2l6ZSBzaXplPgogICAgIHN0YXRpYyBib29sIGNoZWNrTW92ayhpbnQgaW5zbiwgaW50IF9odywg
UmVnaXN0ZXJJRCBfcmQpCkBAIC0yOTk0LDkgKzMwMjEsMTUgQEAgcHJvdGVjdGVkOgogICAgICAg
ICBBU1NFUlQoIShyZWludGVycHJldF9jYXN0PGludHB0cl90Pih0bykgJiAzKSk7CiAgICAgICAg
IGFzc2VydElzTm90VGFnZ2VkKHRvKTsKICAgICAgICAgYXNzZXJ0SXNOb3RUYWdnZWQoZnJvbUlu
c3RydWN0aW9uKTsKLSAgICAgICAgaW50cHRyX3Qgb2Zmc2V0ID0gKHJlaW50ZXJwcmV0X2Nhc3Q8
aW50cHRyX3Q+KHRvKSAtIHJlaW50ZXJwcmV0X2Nhc3Q8aW50cHRyX3Q+KGZyb21JbnN0cnVjdGlv
bikpID4+IDI7CisgICAgICAgIGludHB0cl90IG9mZnNldCA9IChiaXR3aXNlX2Nhc3Q8aW50cHRy
X3Q+KHRvKSAtIGJpdHdpc2VfY2FzdDxpbnRwdHJfdD4oZnJvbUluc3RydWN0aW9uKSkgPj4gMjsK
ICAgICAgICAgQVNTRVJUKHN0YXRpY19jYXN0PGludD4ob2Zmc2V0KSA9PSBvZmZzZXQpOwogCisg
ICAgICAgIGlmICghaXNJbnQ8MjY+KG9mZnNldCkpIHsKKyAgICAgICAgICAgIHRvID0gRXhlY3V0
YWJsZUFsbG9jYXRvcjo6c2luZ2xldG9uKCkuZ2V0SnVtcElzbGFuZFRvKGJpdHdpc2VfY2FzdDx2
b2lkKj4oZnJvbUluc3RydWN0aW9uKSwgdG8pOworICAgICAgICAgICAgb2Zmc2V0ID0gKGJpdHdp
c2VfY2FzdDxpbnRwdHJfdD4odG8pIC0gYml0d2lzZV9jYXN0PGludHB0cl90Pihmcm9tSW5zdHJ1
Y3Rpb24pKSA+PiAyOworICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoaXNJbnQ8MjY+KG9mZnNl
dCkpOworICAgICAgICB9CisKICAgICAgICAgaW50IGluc24gPSB1bmNvbmRpdGlvbmFsQnJhbmNo
SW1tZWRpYXRlKGlzQ2FsbCwgc3RhdGljX2Nhc3Q8aW50PihvZmZzZXQpKTsKICAgICAgICAgUkVM
RUFTRV9BU1NFUlQocm91bmRVcFRvTXVsdGlwbGVPZjxpbnN0cnVjdGlvblNpemU+KGZyb20pID09
IGZyb20pOwogICAgICAgICBjb3B5KGZyb20sICZpbnNuLCBzaXplb2YoaW50KSk7CkBAIC0zMDA4
LDEyICszMDQxLDEyIEBAIHByb3RlY3RlZDoKICAgICAgICAgQVNTRVJUKCEocmVpbnRlcnByZXRf
Y2FzdDxpbnRwdHJfdD4oZnJvbSkgJiAzKSk7CiAgICAgICAgIEFTU0VSVCghKHJlaW50ZXJwcmV0
X2Nhc3Q8aW50cHRyX3Q+KHRvKSAmIDMpKTsKICAgICAgICAgaW50cHRyX3Qgb2Zmc2V0ID0gKHJl
aW50ZXJwcmV0X2Nhc3Q8aW50cHRyX3Q+KHRvKSAtIHJlaW50ZXJwcmV0X2Nhc3Q8aW50cHRyX3Q+
KGZyb21JbnN0cnVjdGlvbikpID4+IDI7Ci0gICAgICAgIEFTU0VSVChpc0ludDwyNj4ob2Zmc2V0
KSk7CiAKICAgICAgICAgYm9vbCB1c2VEaXJlY3QgPSBpc0ludDwxOT4ob2Zmc2V0KTsKICAgICAg
ICAgQVNTRVJUKHR5cGUgPT0gSW5kaXJlY3RCcmFuY2ggfHwgdXNlRGlyZWN0KTsKIAogICAgICAg
ICBpZiAodXNlRGlyZWN0IHx8IHR5cGUgPT0gRGlyZWN0QnJhbmNoKSB7CisgICAgICAgICAgICBB
U1NFUlQoaXNJbnQ8MTk+KG9mZnNldCkpOwogICAgICAgICAgICAgaW50IGluc24gPSBjb21wYXJl
QW5kQnJhbmNoSW1tZWRpYXRlKGlzNjRCaXQgPyBEYXRhc2l6ZV82NCA6IERhdGFzaXplXzMyLCBj
b25kaXRpb24gPT0gQ29uZGl0aW9uTkUsIHN0YXRpY19jYXN0PGludD4ob2Zmc2V0KSwgcnQpOwog
ICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQocm91bmRVcFRvTXVsdGlwbGVPZjxpbnN0cnVjdGlv
blNpemU+KGZyb20pID09IGZyb20pOwogICAgICAgICAgICAgY29weShmcm9tLCAmaW5zbiwgc2l6
ZW9mKGludCkpOwpAQCAtMzAzNiwxMiArMzA2OSwxMiBAQCBwcm90ZWN0ZWQ6CiAgICAgICAgIEFT
U0VSVCghKHJlaW50ZXJwcmV0X2Nhc3Q8aW50cHRyX3Q+KGZyb20pICYgMykpOwogICAgICAgICBB
U1NFUlQoIShyZWludGVycHJldF9jYXN0PGludHB0cl90Pih0bykgJiAzKSk7CiAgICAgICAgIGlu
dHB0cl90IG9mZnNldCA9IChyZWludGVycHJldF9jYXN0PGludHB0cl90Pih0bykgLSByZWludGVy
cHJldF9jYXN0PGludHB0cl90Pihmcm9tSW5zdHJ1Y3Rpb24pKSA+PiAyOwotICAgICAgICBBU1NF
UlQoaXNJbnQ8MjY+KG9mZnNldCkpOwogCiAgICAgICAgIGJvb2wgdXNlRGlyZWN0ID0gaXNJbnQ8
MTk+KG9mZnNldCk7CiAgICAgICAgIEFTU0VSVCh0eXBlID09IEluZGlyZWN0QnJhbmNoIHx8IHVz
ZURpcmVjdCk7CiAKICAgICAgICAgaWYgKHVzZURpcmVjdCB8fCB0eXBlID09IERpcmVjdEJyYW5j
aCkgeworICAgICAgICAgICAgQVNTRVJUKGlzSW50PDE5PihvZmZzZXQpKTsKICAgICAgICAgICAg
IGludCBpbnNuID0gY29uZGl0aW9uYWxCcmFuY2hJbW1lZGlhdGUoc3RhdGljX2Nhc3Q8aW50Pihv
ZmZzZXQpLCBjb25kaXRpb24pOwogICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQocm91bmRVcFRv
TXVsdGlwbGVPZjxpbnN0cnVjdGlvblNpemU+KGZyb20pID09IGZyb20pOwogICAgICAgICAgICAg
Y29weShmcm9tLCAmaW5zbiwgc2l6ZW9mKGludCkpOwpAQCAtMzA2NSwxMiArMzA5OCwxMiBAQCBw
cm90ZWN0ZWQ6CiAgICAgICAgIEFTU0VSVCghKHJlaW50ZXJwcmV0X2Nhc3Q8aW50cHRyX3Q+KHRv
KSAmIDMpKTsKICAgICAgICAgaW50cHRyX3Qgb2Zmc2V0ID0gKHJlaW50ZXJwcmV0X2Nhc3Q8aW50
cHRyX3Q+KHRvKSAtIHJlaW50ZXJwcmV0X2Nhc3Q8aW50cHRyX3Q+KGZyb21JbnN0cnVjdGlvbikp
ID4+IDI7CiAgICAgICAgIEFTU0VSVChzdGF0aWNfY2FzdDxpbnQ+KG9mZnNldCkgPT0gb2Zmc2V0
KTsKLSAgICAgICAgQVNTRVJUKGlzSW50PDI2PihvZmZzZXQpKTsKIAogICAgICAgICBib29sIHVz
ZURpcmVjdCA9IGlzSW50PDE0PihvZmZzZXQpOwogICAgICAgICBBU1NFUlQodHlwZSA9PSBJbmRp
cmVjdEJyYW5jaCB8fCB1c2VEaXJlY3QpOwogCiAgICAgICAgIGlmICh1c2VEaXJlY3QgfHwgdHlw
ZSA9PSBEaXJlY3RCcmFuY2gpIHsKKyAgICAgICAgICAgIEFTU0VSVChpc0ludDwxND4ob2Zmc2V0
KSk7CiAgICAgICAgICAgICBpbnQgaW5zbiA9IHRlc3RBbmRCcmFuY2hJbW1lZGlhdGUoY29uZGl0
aW9uID09IENvbmRpdGlvbk5FLCBzdGF0aWNfY2FzdDxpbnQ+KGJpdE51bWJlciksIHN0YXRpY19j
YXN0PGludD4ob2Zmc2V0KSwgcnQpOwogICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQocm91bmRV
cFRvTXVsdGlwbGVPZjxpbnN0cnVjdGlvblNpemU+KGZyb20pID09IGZyb20pOwogICAgICAgICAg
ICAgY29weShmcm9tLCAmaW5zbiwgc2l6ZW9mKGludCkpOwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2Fzc2VtYmxlci9BYnN0cmFjdE1hY3JvQXNzZW1ibGVyLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9BYnN0cmFjdE1hY3JvQXNzZW1ibGVyLmgJ
KHJldmlzaW9uIDI1Nzg2NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvQWJz
dHJhY3RNYWNyb0Fzc2VtYmxlci5oCSh3b3JraW5nIGNvcHkpCkBAIC05MTksNiArOTE5LDIyIEBA
IHB1YmxpYzoKICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICB9CiAK
KyAgICB0ZW1wbGF0ZTxQdHJUYWcgY2FsbFRhZywgUHRyVGFnIGRlc3RUYWc+CisgICAgc3RhdGlj
IENvZGVMb2NhdGlvbkxhYmVsPGRlc3RUYWc+IHByZXBhcmVGb3JBdG9taWNSZXBhdGNoTmVhckNh
bGxDb25jdXJyZW50bHkoQ29kZUxvY2F0aW9uTmVhckNhbGw8Y2FsbFRhZz4gbmVhckNhbGwsIENv
ZGVMb2NhdGlvbkxhYmVsPGRlc3RUYWc+IGRlc3RpbmF0aW9uKQorICAgIHsKKyNpZiBVU0UoSlVN
UF9JU0xBTkRTKQorICAgICAgICBzd2l0Y2ggKG5lYXJDYWxsLmNhbGxNb2RlKCkpIHsKKyAgICAg
ICAgY2FzZSBOZWFyQ2FsbE1vZGU6OlRhaWw6CisgICAgICAgICAgICByZXR1cm4gQ29kZUxvY2F0
aW9uTGFiZWw8ZGVzdFRhZz4odGFnQ29kZVB0cjxkZXN0VGFnPihBc3NlbWJsZXJUeXBlOjpwcmVw
YXJlRm9yQXRvbWljUmVsaW5rSnVtcENvbmN1cnJlbnRseShuZWFyQ2FsbC5kYXRhTG9jYXRpb24o
KSwgZGVzdGluYXRpb24uZGF0YUxvY2F0aW9uKCkpKSk7CisgICAgICAgIGNhc2UgTmVhckNhbGxN
b2RlOjpSZWd1bGFyOgorICAgICAgICAgICAgcmV0dXJuIENvZGVMb2NhdGlvbkxhYmVsPGRlc3RU
YWc+KHRhZ0NvZGVQdHI8ZGVzdFRhZz4oQXNzZW1ibGVyVHlwZTo6cHJlcGFyZUZvckF0b21pY1Jl
bGlua0NhbGxDb25jdXJyZW50bHkobmVhckNhbGwuZGF0YUxvY2F0aW9uKCksIGRlc3RpbmF0aW9u
LnVudGFnZ2VkRXhlY3V0YWJsZUFkZHJlc3MoKSkpKTsKKyAgICAgICAgfQorI2Vsc2UKKyAgICAg
ICAgVU5VU0VEX1BBUkFNKG5lYXJDYWxsKTsKKyAgICAgICAgcmV0dXJuIGRlc3RpbmF0aW9uOwor
I2VuZGlmCisgICAgfQorCiAgICAgdGVtcGxhdGU8UHRyVGFnIHRhZz4KICAgICBzdGF0aWMgdm9p
ZCByZXBhdGNoQ29tcGFjdChDb2RlTG9jYXRpb25EYXRhTGFiZWxDb21wYWN0PHRhZz4gZGF0YUxh
YmVsQ29tcGFjdCwgaW50MzJfdCB2YWx1ZSkKICAgICB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYXNzZW1ibGVyL0xpbmtCdWZmZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9hc3NlbWJsZXIvTGlua0J1ZmZlci5jcHAJKHJldmlzaW9uIDI1Nzg2NikKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTGlua0J1ZmZlci5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTEzMSw5ICsxMzEsOSBAQCBzdGF0aWMgQUxXQVlTX0lOTElORSB2b2lkIHJlY29y
ZExpbmtPZmZzCiB9CiAKIHRlbXBsYXRlIDx0eXBlbmFtZSBJbnN0cnVjdGlvblR5cGU+Ci12b2lk
IExpbmtCdWZmZXI6OmNvcHlDb21wYWN0QW5kTGlua0NvZGUoTWFjcm9Bc3NlbWJsZXImIG1hY3Jv
QXNzZW1ibGVyLCB2b2lkKiBvd25lclVJRCwgSklUQ29tcGlsYXRpb25FZmZvcnQgZWZmb3J0KQor
dm9pZCBMaW5rQnVmZmVyOjpjb3B5Q29tcGFjdEFuZExpbmtDb2RlKE1hY3JvQXNzZW1ibGVyJiBt
YWNyb0Fzc2VtYmxlciwgSklUQ29tcGlsYXRpb25FZmZvcnQgZWZmb3J0KQogewotICAgIGFsbG9j
YXRlKG1hY3JvQXNzZW1ibGVyLCBvd25lclVJRCwgZWZmb3J0KTsKKyAgICBhbGxvY2F0ZShtYWNy
b0Fzc2VtYmxlciwgZWZmb3J0KTsKICAgICBjb25zdCBzaXplX3QgaW5pdGlhbFNpemUgPSBtYWNy
b0Fzc2VtYmxlci5tX2Fzc2VtYmxlci5jb2RlU2l6ZSgpOwogICAgIGlmIChkaWRGYWlsVG9BbGxv
Y2F0ZSgpKQogICAgICAgICByZXR1cm47CkBAIC0yOTUsNyArMjk1LDcgQEAgdm9pZCBMaW5rQnVm
ZmVyOjpjb3B5Q29tcGFjdEFuZExpbmtDb2RlKAogI2VuZGlmIC8vIEVOQUJMRShCUkFOQ0hfQ09N
UEFDVElPTikKIAogCi12b2lkIExpbmtCdWZmZXI6OmxpbmtDb2RlKE1hY3JvQXNzZW1ibGVyJiBt
YWNyb0Fzc2VtYmxlciwgdm9pZCogb3duZXJVSUQsIEpJVENvbXBpbGF0aW9uRWZmb3J0IGVmZm9y
dCkKK3ZvaWQgTGlua0J1ZmZlcjo6bGlua0NvZGUoTWFjcm9Bc3NlbWJsZXImIG1hY3JvQXNzZW1i
bGVyLCBKSVRDb21waWxhdGlvbkVmZm9ydCBlZmZvcnQpCiB7CiAgICAgLy8gRW5zdXJlIHRoYXQg
dGhlIGVuZCBvZiB0aGUgbGFzdCBpbnZhbGlkYXRpb24gcG9pbnQgZG9lcyBub3QgZXh0ZW5kIGJl
eW9uZCB0aGUgZW5kIG9mIHRoZSBidWZmZXIuCiAgICAgbWFjcm9Bc3NlbWJsZXIubGFiZWwoKTsK
QEAgLTMwNCw3ICszMDQsNyBAQCB2b2lkIExpbmtCdWZmZXI6OmxpbmtDb2RlKE1hY3JvQXNzZW1i
bGVyCiAjaWYgZGVmaW5lZChBU1NFTUJMRVJfSEFTX0NPTlNUQU5UX1BPT0wpICYmIEFTU0VNQkxF
Ul9IQVNfQ09OU1RBTlRfUE9PTAogICAgIG1hY3JvQXNzZW1ibGVyLm1fYXNzZW1ibGVyLmJ1ZmZl
cigpLmZsdXNoQ29uc3RhbnRQb29sKGZhbHNlKTsKICNlbmRpZgotICAgIGFsbG9jYXRlKG1hY3Jv
QXNzZW1ibGVyLCBvd25lclVJRCwgZWZmb3J0KTsKKyAgICBhbGxvY2F0ZShtYWNyb0Fzc2VtYmxl
ciwgZWZmb3J0KTsKICAgICBpZiAoIW1fZGlkQWxsb2NhdGUpCiAgICAgICAgIHJldHVybjsKICAg
ICBBU1NFUlQobV9jb2RlKTsKQEAgLTMxOCwxNSArMzE4LDE1IEBAIHZvaWQgTGlua0J1ZmZlcjo6
bGlua0NvZGUoTWFjcm9Bc3NlbWJsZXIKICAgICBtYWNyb0Fzc2VtYmxlci5tX2Fzc2VtYmxlci5y
ZWxvY2F0ZUp1bXBzKGJ1ZmZlci5kYXRhKCksIGNvZGUpOwogI2VuZGlmCiAjZWxpZiBDUFUoQVJN
X1RIVU1CMikKLSAgICBjb3B5Q29tcGFjdEFuZExpbmtDb2RlPHVpbnQxNl90PihtYWNyb0Fzc2Vt
Ymxlciwgb3duZXJVSUQsIGVmZm9ydCk7CisgICAgY29weUNvbXBhY3RBbmRMaW5rQ29kZTx1aW50
MTZfdD4obWFjcm9Bc3NlbWJsZXIsIGVmZm9ydCk7CiAjZWxpZiBDUFUoQVJNNjQpCi0gICAgY29w
eUNvbXBhY3RBbmRMaW5rQ29kZTx1aW50MzJfdD4obWFjcm9Bc3NlbWJsZXIsIG93bmVyVUlELCBl
ZmZvcnQpOworICAgIGNvcHlDb21wYWN0QW5kTGlua0NvZGU8dWludDMyX3Q+KG1hY3JvQXNzZW1i
bGVyLCBlZmZvcnQpOwogI2VuZGlmIC8vICFFTkFCTEUoQlJBTkNIX0NPTVBBQ1RJT04pCiAKICAg
ICBtX2xpbmtUYXNrcyA9IFdURk1vdmUobWFjcm9Bc3NlbWJsZXIubV9saW5rVGFza3MpOwogfQog
Ci12b2lkIExpbmtCdWZmZXI6OmFsbG9jYXRlKE1hY3JvQXNzZW1ibGVyJiBtYWNyb0Fzc2VtYmxl
ciwgdm9pZCogb3duZXJVSUQsIEpJVENvbXBpbGF0aW9uRWZmb3J0IGVmZm9ydCkKK3ZvaWQgTGlu
a0J1ZmZlcjo6YWxsb2NhdGUoTWFjcm9Bc3NlbWJsZXImIG1hY3JvQXNzZW1ibGVyLCBKSVRDb21w
aWxhdGlvbkVmZm9ydCBlZmZvcnQpCiB7CiAgICAgc2l6ZV90IGluaXRpYWxTaXplID0gbWFjcm9B
c3NlbWJsZXIubV9hc3NlbWJsZXIuY29kZVNpemUoKTsKICAgICBpZiAobV9jb2RlKSB7CkBAIC0z
NDQsNyArMzQ0LDcgQEAgdm9pZCBMaW5rQnVmZmVyOjphbGxvY2F0ZShNYWNyb0Fzc2VtYmxlcgog
ICAgICAgICBpbml0aWFsU2l6ZSA9IG1hY3JvQXNzZW1ibGVyLm1fYXNzZW1ibGVyLmNvZGVTaXpl
KCk7CiAgICAgfQogCi0gICAgbV9leGVjdXRhYmxlTWVtb3J5ID0gRXhlY3V0YWJsZUFsbG9jYXRv
cjo6c2luZ2xldG9uKCkuYWxsb2NhdGUoaW5pdGlhbFNpemUsIG93bmVyVUlELCBlZmZvcnQpOwor
ICAgIG1fZXhlY3V0YWJsZU1lbW9yeSA9IEV4ZWN1dGFibGVBbGxvY2F0b3I6OnNpbmdsZXRvbigp
LmFsbG9jYXRlKGluaXRpYWxTaXplLCBlZmZvcnQpOwogICAgIGlmICghbV9leGVjdXRhYmxlTWVt
b3J5KQogICAgICAgICByZXR1cm47CiAgICAgbV9jb2RlID0gTWFjcm9Bc3NlbWJsZXJDb2RlUHRy
PExpbmtCdWZmZXJQdHJUYWc+KG1fZXhlY3V0YWJsZU1lbW9yeS0+c3RhcnQoKS5yZXRhZ2dlZFB0
cjxMaW5rQnVmZmVyUHRyVGFnPigpKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3Nl
bWJsZXIvTGlua0J1ZmZlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9h
c3NlbWJsZXIvTGlua0J1ZmZlci5oCShyZXZpc2lvbiAyNTc4NjYpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYXNzZW1ibGVyL0xpbmtCdWZmZXIuaAkod29ya2luZyBjb3B5KQpAQCAtOTAsNyAr
OTAsOCBAQCBwdWJsaWM6CiAgICAgICAgICwgbV9jb21wbGV0ZWQoZmFsc2UpCiAjZW5kaWYKICAg
ICB7Ci0gICAgICAgIGxpbmtDb2RlKG1hY3JvQXNzZW1ibGVyLCBvd25lclVJRCwgZWZmb3J0KTsK
KyAgICAgICAgVU5VU0VEX1BBUkFNKG93bmVyVUlEKTsKKyAgICAgICAgbGlua0NvZGUobWFjcm9B
c3NlbWJsZXIsIGVmZm9ydCk7CiAgICAgfQogCiAgICAgdGVtcGxhdGU8UHRyVGFnIHRhZz4KQEAg
LTEwNyw3ICsxMDgsNyBAQCBwdWJsaWM6CiAjZWxzZQogICAgICAgICBVTlVTRURfUEFSQU0oc2hv
dWxkUGVyZm9ybUJyYW5jaENvbXBhY3Rpb24pOwogI2VuZGlmCi0gICAgICAgIGxpbmtDb2RlKG1h
Y3JvQXNzZW1ibGVyLCAwLCBlZmZvcnQpOworICAgICAgICBsaW5rQ29kZShtYWNyb0Fzc2VtYmxl
ciwgZWZmb3J0KTsKICAgICB9CiAKICAgICB+TGlua0J1ZmZlcigpCkBAIC0zMjEsMTIgKzMyMiwx
MiBAQCBwcml2YXRlOgogICAgICAgICByZXR1cm4gbV9jb2RlLmRhdGFMb2NhdGlvbigpOwogICAg
IH0KICAgICAKLSAgICB2b2lkIGFsbG9jYXRlKE1hY3JvQXNzZW1ibGVyJiwgdm9pZCogb3duZXJV
SUQsIEpJVENvbXBpbGF0aW9uRWZmb3J0KTsKKyAgICB2b2lkIGFsbG9jYXRlKE1hY3JvQXNzZW1i
bGVyJiwgSklUQ29tcGlsYXRpb25FZmZvcnQpOwogCi0gICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9p
ZCBsaW5rQ29kZShNYWNyb0Fzc2VtYmxlciYsIHZvaWQqIG93bmVyVUlELCBKSVRDb21waWxhdGlv
bkVmZm9ydCk7CisgICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBsaW5rQ29kZShNYWNyb0Fzc2Vt
YmxlciYsIEpJVENvbXBpbGF0aW9uRWZmb3J0KTsKICNpZiBFTkFCTEUoQlJBTkNIX0NPTVBBQ1RJ
T04pCiAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIEluc3RydWN0aW9uVHlwZT4KLSAgICB2b2lkIGNv
cHlDb21wYWN0QW5kTGlua0NvZGUoTWFjcm9Bc3NlbWJsZXImLCB2b2lkKiBvd25lclVJRCwgSklU
Q29tcGlsYXRpb25FZmZvcnQpOworICAgIHZvaWQgY29weUNvbXBhY3RBbmRMaW5rQ29kZShNYWNy
b0Fzc2VtYmxlciYsIEpJVENvbXBpbGF0aW9uRWZmb3J0KTsKICNlbmRpZgogCiAgICAgdm9pZCBw
ZXJmb3JtRmluYWxpemF0aW9uKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1i
bGVyL01hY3JvQXNzZW1ibGVyQ29kZVJlZi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJDb2RlUmVmLmgJKHJldmlzaW9uIDI1Nzg2
NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJDb2Rl
UmVmLmgJKHdvcmtpbmcgY29weSkKQEAgLTQzNCw3ICs0MzQsNiBAQCBwdWJsaWM6CiAgICAgICAg
IDogbV9jb2RlUHRyKGV4ZWN1dGFibGVNZW1vcnktPnN0YXJ0KCkucmV0YWdnZWRQdHI8dGFnPigp
KQogICAgICAgICAsIG1fZXhlY3V0YWJsZU1lbW9yeShXVEZNb3ZlKGV4ZWN1dGFibGVNZW1vcnkp
KQogICAgIHsKLSAgICAgICAgQVNTRVJUKG1fZXhlY3V0YWJsZU1lbW9yeS0+aXNNYW5hZ2VkKCkp
OwogICAgICAgICBBU1NFUlQobV9leGVjdXRhYmxlTWVtb3J5LT5zdGFydCgpKTsKICAgICAgICAg
QVNTRVJUKG1fY29kZVB0cik7CiAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9FeGVjdXRhYmxlQWxsb2NhdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L0V4ZWN1dGFibGVBbGxvY2F0b3IuY3BwCShyZXZpc2lvbiAyNTc4NjYpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0V4ZWN1dGFibGVBbGxvY2F0b3IuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0yOCw5ICsyOCwxMCBAQAogCiAjaWYgRU5BQkxFKEpJVCkKIAotI2luY2x1ZGUg
IkNvZGVQcm9maWxpbmcuaCIKICNpbmNsdWRlICJFeGVjdXRhYmxlQWxsb2NhdGlvbkZ1enouaCIK
KyNpbmNsdWRlICJJdGVyYXRpb25TdGF0dXMuaCIKICNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCisj
aW5jbHVkZSA8dHlwZV90cmFpdHM+CiAjaW5jbHVkZSA8d3RmL0ZpbGVTeXN0ZW0uaD4KICNpbmNs
dWRlIDx3dGYvTWV0YUFsbG9jYXRvci5oPgogI2luY2x1ZGUgPHd0Zi9QYWdlUmVzZXJ2YXRpb24u
aD4KQEAgLTk2LDkgKzk3LDIwIEBAIHN0YXRpYyBjb25zdGV4cHIgc2l6ZV90IGZpeGVkRXhlY3V0
YWJsZU0KICNlbGlmIENQVShBUk0pCiBzdGF0aWMgY29uc3RleHByIHNpemVfdCBmaXhlZEV4ZWN1
dGFibGVNZW1vcnlQb29sU2l6ZSA9IDE2ICogMTAyNCAqIDEwMjQ7CiAjZWxpZiBDUFUoQVJNNjQp
CisjaWYgVVNFKEpVTVBfSVNMQU5EUykKK3N0YXRpYyBjb25zdGV4cHIgc2l6ZV90IGZpeGVkRXhl
Y3V0YWJsZU1lbW9yeVBvb2xTaXplID0gMSAqIDEwMjQgKiAxMDI0ICogMTAyNDsKKy8vIFRoZXNl
IHNpemVzIGd1YXJhbnRlZSB0aGF0IGFueSBqdW1wIHdpdGhpbiBhbiBpc2xhbmQgY2FuIGp1bXAg
Zm9yd2FyZHMgb3IgYmFja3dhcmRzCisvLyB0byB0aGUgYWRqYWNlbnQgaXNsYW5kIGluIGEgc2lu
Z2xlIGluc3RydWN0aW9uLgorc3RhdGljIGNvbnN0ZXhwciBzaXplX3QgcmVnaW9uU2l6ZSA9IDEx
MiAqIDEwMjQgKiAxMDI0Oworc3RhdGljIGNvbnN0ZXhwciBzaXplX3QgaXNsYW5kUmVnaW9uU2l6
ZSA9IDE2ICogMTAyNCAqIDEwMjQ7CitzdGF0aWMgY29uc3RleHByIHNpemVfdCBudW1iZXJPZlJl
Z2lvbnMgPSBmaXhlZEV4ZWN1dGFibGVNZW1vcnlQb29sU2l6ZSAvIHJlZ2lvblNpemU7CitzdGF0
aWMgY29uc3RleHByIHNpemVfdCBpc2xhbmRTaXplSW5CeXRlcyA9IDQ7CitzdGF0aWMgY29uc3Rl
eHByIHNpemVfdCBtYXhJc2xhbmRzUGVyUmVnaW9uID0gaXNsYW5kUmVnaW9uU2l6ZSAvIGlzbGFu
ZFNpemVJbkJ5dGVzOworI2Vsc2UKIHN0YXRpYyBjb25zdGV4cHIgc2l6ZV90IGZpeGVkRXhlY3V0
YWJsZU1lbW9yeVBvb2xTaXplID0gMTI4ICogMTAyNCAqIDEwMjQ7CisjZW5kaWYKICNlbGlmIENQ
VShYODZfNjQpCi1zdGF0aWMgY29uc3RleHByIHNpemVfdCBmaXhlZEV4ZWN1dGFibGVNZW1vcnlQ
b29sU2l6ZSA9IDEwMjQgKiAxMDI0ICogMTAyNDsKK3N0YXRpYyBjb25zdGV4cHIgc2l6ZV90IGZp
eGVkRXhlY3V0YWJsZU1lbW9yeVBvb2xTaXplID0gMSAqIDEwMjQgKiAxMDI0ICogMTAyNDsKICNl
bHNlCiBzdGF0aWMgY29uc3RleHByIHNpemVfdCBmaXhlZEV4ZWN1dGFibGVNZW1vcnlQb29sU2l6
ZSA9IDMyICogMTAyNCAqIDEwMjQ7CiAjZW5kaWYKQEAgLTMxMywxMCArMzI1LDExIEBAIHN0YXRp
YyBBTFdBWVNfSU5MSU5FIEpJVFJlc2VydmF0aW9uIGluaXQKICAgICBpZiAoIWlzSklURW5hYmxl
ZCgpKQogICAgICAgICByZXR1cm4gcmVzZXJ2YXRpb247CiAKKyAgICByZXNlcnZhdGlvbi5zaXpl
ID0gZml4ZWRFeGVjdXRhYmxlTWVtb3J5UG9vbFNpemU7CisjaWYgIVVTRShKVU1QX0lTTEFORFMp
CiAgICAgaWYgKE9wdGlvbnM6OmppdE1lbW9yeVJlc2VydmF0aW9uU2l6ZSgpKQogICAgICAgICBy
ZXNlcnZhdGlvbi5zaXplID0gT3B0aW9uczo6aml0TWVtb3J5UmVzZXJ2YXRpb25TaXplKCk7Ci0g
ICAgZWxzZQotICAgICAgICByZXNlcnZhdGlvbi5zaXplID0gZml4ZWRFeGVjdXRhYmxlTWVtb3J5
UG9vbFNpemU7CisjZW5kaWYKICAgICByZXNlcnZhdGlvbi5zaXplID0gc3RkOjptYXgocm91bmRV
cFRvTXVsdGlwbGVPZihwYWdlU2l6ZSgpLCByZXNlcnZhdGlvbi5zaXplKSwgcGFnZVNpemUoKSAq
IDIpOwogCiAgICAgYXV0byB0cnlDcmVhdGVQYWdlUmVzZXJ2YXRpb24gPSBbXSAoc2l6ZV90IHJl
c2VydmF0aW9uU2l6ZSkgewpAQCAtMzYzLDUyICszNzYsNDQ3IEBAIHN0YXRpYyBBTFdBWVNfSU5M
SU5FIEpJVFJlc2VydmF0aW9uIGluaXQKICAgICByZXR1cm4gcmVzZXJ2YXRpb247CiB9CiAKLWNs
YXNzIEZpeGVkVk1Qb29sRXhlY3V0YWJsZUFsbG9jYXRvciBmaW5hbCA6IHB1YmxpYyBNZXRhQWxs
b2NhdG9yIHsKK2NsYXNzIEZpeGVkVk1Qb29sRXhlY3V0YWJsZUFsbG9jYXRvciBmaW5hbCB7CiAg
ICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CisKKyNpZiBVU0UoSlVNUF9JU0xBTkRTKQorICAg
IGNsYXNzIElzbGFuZHM7CisgICAgY2xhc3MgUmVnaW9uQWxsb2NhdG9yOworI2VuZGlmCisKIHB1
YmxpYzoKICAgICBGaXhlZFZNUG9vbEV4ZWN1dGFibGVBbGxvY2F0b3IoKQotICAgICAgICA6IE1l
dGFBbGxvY2F0b3Ioaml0QWxsb2NhdGlvbkdyYW51bGUpIC8vIHJvdW5kIHVwIGFsbCBhbGxvY2F0
aW9ucyB0byAzMiBieXRlcworI2lmIFVTRShKVU1QX0lTTEFORFMpCisgICAgICAgIDogbV9hbGxv
Y2F0b3JzKGNvbnN0cnVjdEZpeGVkU2l6ZUFycmF5V2l0aEFyZ3VtZW50czxSZWdpb25BbGxvY2F0
b3IsIG51bWJlck9mUmVnaW9ucz4oKnRoaXMpKQorI2Vsc2UKKyAgICAgICAgOiBtX2FsbG9jYXRv
cigqdGhpcykKKyNlbmRpZgogICAgIHsKICAgICAgICAgSklUUmVzZXJ2YXRpb24gcmVzZXJ2YXRp
b24gPSBpbml0aWFsaXplSklUUGFnZVJlc2VydmF0aW9uKCk7CiAgICAgICAgIG1fcmVzZXJ2YXRp
b24gPSBXVEZNb3ZlKHJlc2VydmF0aW9uLnBhZ2VSZXNlcnZhdGlvbik7CiAgICAgICAgIGlmICht
X3Jlc2VydmF0aW9uKSB7Ci0gICAgICAgICAgICBhZGRGcmVzaEZyZWVTcGFjZShyZXNlcnZhdGlv
bi5iYXNlLCByZXNlcnZhdGlvbi5zaXplKTsKKyNpZiBVU0UoSlVNUF9JU0xBTkRTKQorICAgICAg
ICAgICAgdWludHB0cl90IHN0YXJ0ID0gYml0d2lzZV9jYXN0PHVpbnRwdHJfdD4obV9yZXNlcnZh
dGlvbi5iYXNlKCkpOworICAgICAgICAgICAgdWludHB0cl90IHJlc2VydmF0aW9uRW5kID0gc3Rh
cnQgKyBtX3Jlc2VydmF0aW9uLnNpemUoKTsKKyAgICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAw
OyBpIDwgbnVtYmVyT2ZSZWdpb25zOyArK2kpIHsKKyAgICAgICAgICAgICAgICBSRUxFQVNFX0FT
U0VSVChzdGFydCA8IHJlc2VydmF0aW9uRW5kKTsKKyAgICAgICAgICAgICAgICBtX2FsbG9jYXRv
cnNbaV0ubV9zdGFydCA9IHRhZ0NvZGVQdHI8RXhlY3V0YWJsZU1lbW9yeVB0clRhZz4oYml0d2lz
ZV9jYXN0PHZvaWQqPihzdGFydCkpOworICAgICAgICAgICAgICAgIG1fYWxsb2NhdG9yc1tpXS5t
X2VuZCA9IHRhZ0NvZGVQdHI8RXhlY3V0YWJsZU1lbW9yeVB0clRhZz4oYml0d2lzZV9jYXN0PHZv
aWQqPihzdGFydCArIHJlZ2lvblNpemUpKTsKKyAgICAgICAgICAgICAgICBpZiAobV9hbGxvY2F0
b3JzW2ldLmVuZCgpID4gcmVzZXJ2YXRpb25FbmQpIHsKKyAgICAgICAgICAgICAgICAgICAgLy8g
V2UgbWF5IGhhdmUgdGFrZW4gYSBwYWdlIGZvciB0aGUgZXhlY3V0YWJsZSBvbmx5IGNvcHkgdGh1
bmsuCisgICAgICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKGkgPT0gbnVtYmVyT2ZSZWdp
b25zIC0gMSk7CisgICAgICAgICAgICAgICAgICAgIG1fYWxsb2NhdG9yc1tpXS5tX2VuZCA9IHRh
Z0NvZGVQdHI8RXhlY3V0YWJsZU1lbW9yeVB0clRhZz4oYml0d2lzZV9jYXN0PHZvaWQqPihyZXNl
cnZhdGlvbkVuZCkpOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIG1fYWxs
b2NhdG9yc1tpXS5hZGRGcmVzaEZyZWVTcGFjZShiaXR3aXNlX2Nhc3Q8dm9pZCo+KG1fYWxsb2Nh
dG9yc1tpXS5zdGFydCgpKSwgbV9hbGxvY2F0b3JzW2ldLmFsbG9jYXRvclNpemUoKSk7CisKKyAg
ICAgICAgICAgICAgICBzdGFydCArPSByZWdpb25TaXplOworICAgICAgICAgICAgfQorI2Vsc2UK
KyAgICAgICAgICAgIG1fYWxsb2NhdG9yLmFkZEZyZXNoRnJlZVNwYWNlKHJlc2VydmF0aW9uLmJh
c2UsIHJlc2VydmF0aW9uLnNpemUpOworI2VuZGlmCisKICAgICAgICAgICAgIEFTU0VSVChieXRl
c1Jlc2VydmVkKCkgPT0gcmVzZXJ2YXRpb24uc2l6ZSk7IC8vIFNpbmNlIG91ciBleGVjdXRhYmxl
IG1lbW9yeSBpcyBmaXhlZC1zaXplZCwgYnl0ZXNSZXNlcnZlZCBpcyBuZXZlciBjaGFuZ2VkIGFm
dGVyIGluaXRpYWxpemF0aW9uLgogICAgICAgICB9CiAgICAgfQogCi0gICAgdmlydHVhbCB+Rml4
ZWRWTVBvb2xFeGVjdXRhYmxlQWxsb2NhdG9yKCk7CisgICAgfkZpeGVkVk1Qb29sRXhlY3V0YWJs
ZUFsbG9jYXRvcigpCisgICAgeworICAgICAgICBtX3Jlc2VydmF0aW9uLmRlYWxsb2NhdGUoKTsK
KyAgICB9CiAKICAgICB2b2lkKiBtZW1vcnlTdGFydCgpIHsgcmV0dXJuIHVudGFnQ29kZVB0cjxF
eGVjdXRhYmxlTWVtb3J5UHRyVGFnPihnX2pzY0NvbmZpZy5zdGFydEV4ZWN1dGFibGVNZW1vcnkp
OyB9CiAgICAgdm9pZCogbWVtb3J5RW5kKCkgeyByZXR1cm4gdW50YWdDb2RlUHRyPEV4ZWN1dGFi
bGVNZW1vcnlQdHJUYWc+KGdfanNjQ29uZmlnLmVuZEV4ZWN1dGFibGVNZW1vcnkpOyB9CiAgICAg
Ym9vbCBpc0pJVFBDKHZvaWQqIHBjKSB7IHJldHVybiBtZW1vcnlTdGFydCgpIDw9IHBjICYmIHBj
IDwgbWVtb3J5RW5kKCk7IH0KKyAgICBib29sIGlzVmFsaWQoKSB7IHJldHVybiAhIW1fcmVzZXJ2
YXRpb247IH0KIAotcHJvdGVjdGVkOgotICAgIEZyZWVTcGFjZVB0ciBhbGxvY2F0ZU5ld1NwYWNl
KHNpemVfdCYpIG92ZXJyaWRlCisgICAgUmVmUHRyPEV4ZWN1dGFibGVNZW1vcnlIYW5kbGU+IGFs
bG9jYXRlKHNpemVfdCBzaXplSW5CeXRlcykKICAgICB7Ci0gICAgICAgIC8vIFdlJ3JlIG9wZXJh
dGluZyBpbiBhIGZpeGVkIHBvb2wsIHNvIG5ldyBhbGxvY2F0aW9uIGlzIGFsd2F5cyBwcm9oaWJp
dGVkLgorI2lmIFVTRShKVU1QX0lTTEFORFMpCisgICAgICAgIGF1dG8gbG9ja2VyID0gaG9sZExv
Y2soZ2V0TG9jaygpKTsKKworICAgICAgICB1bnNpZ25lZCBzdGFydCA9IDA7CisgICAgICAgIGlm
IChPcHRpb25zOjp1c2VSYW5kb21pemluZ0V4ZWN1dGFibGVJc2xhbmRBbGxvY2F0aW9uKCkpCisg
ICAgICAgICAgICBzdGFydCA9IGNyeXB0b2dyYXBoaWNhbGx5UmFuZG9tTnVtYmVyKCkgJSBtX2Fs
bG9jYXRvcnMuc2l6ZSgpOworCisgICAgICAgIHVuc2lnbmVkIGkgPSBzdGFydDsKKyAgICAgICAg
d2hpbGUgKHRydWUpIHsKKyAgICAgICAgICAgIFJlZ2lvbkFsbG9jYXRvciYgYWxsb2NhdG9yID0g
bV9hbGxvY2F0b3JzW2ldOworICAgICAgICAgICAgaWYgKFJlZlB0cjxFeGVjdXRhYmxlTWVtb3J5
SGFuZGxlPiByZXN1bHQgPSBhbGxvY2F0b3IuYWxsb2NhdGUobG9ja2VyLCBzaXplSW5CeXRlcykp
CisgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAgICAgIGkgPSAoaSArIDEp
ICUgbV9hbGxvY2F0b3JzLnNpemUoKTsKKyAgICAgICAgICAgIGlmIChpID09IHN0YXJ0KQorICAg
ICAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CiAgICAgICAgIHJldHVybiBudWxscHRyOwor
I2Vsc2UKKyAgICAgICAgcmV0dXJuIG1fYWxsb2NhdG9yLmFsbG9jYXRlKHNpemVJbkJ5dGVzKTsK
KyNlbmRpZiAvLyBVU0UoSlVNUF9JU0xBTkRTKQorICAgIH0KKworICAgIExvY2smIGdldExvY2so
KSB7IHJldHVybiBtX2xvY2s7IH0KKworICAgIC8vIE5vbiBhdG9taWMKKyAgICBzaXplX3QgYnl0
ZXNBbGxvY2F0ZWQoKSAKKyAgICB7CisgICAgICAgIHNpemVfdCByZXN1bHQgPSAwOworICAgICAg
ICBmb3JFYWNoQWxsb2NhdG9yKFsmXSAoQWxsb2NhdG9yJiBhbGxvY2F0b3IpIHsKKyAgICAgICAg
ICAgIHJlc3VsdCArPSBhbGxvY2F0b3IuYnl0ZXNBbGxvY2F0ZWQoKTsKKyAgICAgICAgfSk7Cisg
ICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorICAgIHNpemVfdCBieXRlc1Jlc2VydmVkKCkg
CisgICAgeworICAgICAgICBzaXplX3QgcmVzdWx0ID0gMDsKKyAgICAgICAgZm9yRWFjaEFsbG9j
YXRvcihbJl0gKEFsbG9jYXRvciYgYWxsb2NhdG9yKSB7CisgICAgICAgICAgICByZXN1bHQgKz0g
YWxsb2NhdG9yLmJ5dGVzUmVzZXJ2ZWQoKTsKKyAgICAgICAgfSk7CisgICAgICAgIHJldHVybiBy
ZXN1bHQ7CisgICAgfQorICAgIHNpemVfdCBieXRlc0NvbW1pdHRlZCgpCisgICAgeworICAgICAg
ICBzaXplX3QgcmVzdWx0ID0gMDsKKyAgICAgICAgZm9yRWFjaEFsbG9jYXRvcihbJl0gKEFsbG9j
YXRvciYgYWxsb2NhdG9yKSB7CisgICAgICAgICAgICByZXN1bHQgKz0gYWxsb2NhdG9yLmJ5dGVz
Q29tbWl0dGVkKCk7CisgICAgICAgIH0pOworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0K
KworICAgIGJvb2wgaXNJbkFsbG9jYXRlZE1lbW9yeShjb25zdCBBYnN0cmFjdExvY2tlciYgbG9j
a2VyLCB2b2lkKiBhZGRyZXNzKQorICAgIHsKKyNpZiBVU0UoSlVNUF9JU0xBTkRTKQorICAgICAg
ICBpZiAoUmVnaW9uQWxsb2NhdG9yKiBhbGxvY2F0b3IgPSBmaW5kUmVnaW9uKGJpdHdpc2VfY2Fz
dDx1aW50cHRyX3Q+KGFkZHJlc3MpKSkKKyAgICAgICAgICAgIHJldHVybiBhbGxvY2F0b3ItPmlz
SW5BbGxvY2F0ZWRNZW1vcnkobG9ja2VyLCBhZGRyZXNzKTsKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworI2Vsc2UKKyAgICAgICAgcmV0dXJuIG1fYWxsb2NhdG9yLmlzSW5BbGxvY2F0ZWRNZW1vcnko
bG9ja2VyLCBhZGRyZXNzKTsKKyNlbmRpZgorICAgIH0KKworI2lmIEVOQUJMRShNRVRBX0FMTE9D
QVRPUl9QUk9GSUxFKQorICAgIHZvaWQgZHVtcFByb2ZpbGUoKQorICAgIHsKKyAgICAgICAgZm9y
RWFjaEFsbG9jYXRvcihbJl0gKEFsbG9jYXRvciYgYWxsb2NhdG9yKSB7CisgICAgICAgICAgICBh
bGxvY2F0b3IuZHVtcFByb2ZpbGUoKTsKKyAgICAgICAgfSk7CisgICAgfQorI2VuZGlmCisKKyAg
ICBNZXRhQWxsb2NhdG9yOjpTdGF0aXN0aWNzIGN1cnJlbnRTdGF0aXN0aWNzKCkKKyAgICB7Cisg
ICAgICAgIGF1dG8gbG9ja2VyID0gaG9sZExvY2soZ2V0TG9jaygpKTsKKyAgICAgICAgTWV0YUFs
bG9jYXRvcjo6U3RhdGlzdGljcyByZXN1bHQgeyAwLCAwLCAwIH07CisgICAgICAgIGZvckVhY2hB
bGxvY2F0b3IoWyZdIChBbGxvY2F0b3ImIGFsbG9jYXRvcikgeworICAgICAgICAgICAgYXV0byBh
bGxvY2F0b3JTdGF0cyA9IGFsbG9jYXRvci5jdXJyZW50U3RhdGlzdGljcyhsb2NrZXIpOworICAg
ICAgICAgICAgcmVzdWx0LmJ5dGVzQWxsb2NhdGVkICs9IGFsbG9jYXRvclN0YXRzLmJ5dGVzQWxs
b2NhdGVkOworICAgICAgICAgICAgcmVzdWx0LmJ5dGVzUmVzZXJ2ZWQgKz0gYWxsb2NhdG9yU3Rh
dHMuYnl0ZXNSZXNlcnZlZDsKKyAgICAgICAgICAgIHJlc3VsdC5ieXRlc0NvbW1pdHRlZCArPSBh
bGxvY2F0b3JTdGF0cy5ieXRlc0NvbW1pdHRlZDsKKyAgICAgICAgfSk7CisgICAgICAgIHJldHVy
biByZXN1bHQ7CiAgICAgfQogCi0gICAgdm9pZCBub3RpZnlOZWVkUGFnZSh2b2lkKiBwYWdlLCBz
aXplX3QgY291bnQpIG92ZXJyaWRlCisjaWYgVVNFKEpVTVBfSVNMQU5EUykKKyAgICB2b2lkIGhh
bmRsZVdpbGxCZVJlbGVhc2VkKGNvbnN0IExvY2tIb2xkZXImIGxvY2tlciwgTWV0YUFsbG9jYXRv
ckhhbmRsZSYgaGFuZGxlKQogICAgIHsKLSAgICAgICAgbV9yZXNlcnZhdGlvbi5jb21taXQocGFn
ZSwgcGFnZVNpemUoKSAqIGNvdW50KTsKKyAgICAgICAgaWYgKGlzbGFuZHNGb3JKdW1wTG9jYXRp
b24uaXNFbXB0eSgpKQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIFZlY3RvcjxJc2xh
bmRzKiwgMTY+IHRvUmVtb3ZlOworICAgICAgICB2b2lkKiBzdGFydCA9IGhhbmRsZS5zdGFydCgp
LnVudGFnZ2VkUHRyKCk7CisgICAgICAgIHZvaWQqIGVuZCA9IGhhbmRsZS5lbmQoKS51bnRhZ2dl
ZFB0cigpOworICAgICAgICBpc2xhbmRzRm9ySnVtcExvY2F0aW9uLml0ZXJhdGUoWyZdIChJc2xh
bmRzJiBpc2xhbmRzLCBib29sJiB2aXNpdExlZnQsIGJvb2wmIHZpc2l0UmlnaHQpIHsKKyAgICAg
ICAgICAgIGlmIChzdGFydCA8PSBpc2xhbmRzLmtleSgpICYmIGlzbGFuZHMua2V5KCkgPCBlbmQp
CisgICAgICAgICAgICAgICAgdG9SZW1vdmUuYXBwZW5kKCZpc2xhbmRzKTsKKyAgICAgICAgICAg
IGlmIChpc2xhbmRzLmtleSgpID4gc3RhcnQpCisgICAgICAgICAgICAgICAgdmlzaXRMZWZ0ID0g
dHJ1ZTsKKyAgICAgICAgICAgIGlmIChpc2xhbmRzLmtleSgpIDwgZW5kKQorICAgICAgICAgICAg
ICAgIHZpc2l0UmlnaHQgPSB0cnVlOworICAgICAgICB9KTsKKworICAgICAgICBmb3IgKElzbGFu
ZHMqIGlzbGFuZHMgOiB0b1JlbW92ZSkKKyAgICAgICAgICAgIGZyZWVJc2xhbmRzKGxvY2tlciwg
aXNsYW5kcyk7CisKKyAgICAgICAgaWYgKEFTU0VSVF9FTkFCTEVEKSB7CisgICAgICAgICAgICBp
c2xhbmRzRm9ySnVtcExvY2F0aW9uLml0ZXJhdGUoWyZdIChJc2xhbmRzJiBpc2xhbmRzLCBib29s
JiB2aXNpdExlZnQsIGJvb2wmIHZpc2l0UmlnaHQpIHsKKyAgICAgICAgICAgICAgICBpZiAoc3Rh
cnQgPD0gaXNsYW5kcy5rZXkoKSAmJiBpc2xhbmRzLmtleSgpIDwgZW5kKSB7CisgICAgICAgICAg
ICAgICAgICAgIGRhdGFMb2dMbigiZGlkIG5vdCByZW1vdmUgZXZlcnl0aGluZyEiKTsKKyAgICAg
ICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICAgICAgdmlzaXRMZWZ0ID0gdHJ1ZTsKKyAgICAgICAgICAgICAg
ICB2aXNpdFJpZ2h0ID0gdHJ1ZTsKKyAgICAgICAgICAgIH0pOworICAgICAgICB9CiAgICAgfQog
Ci0gICAgdm9pZCBub3RpZnlQYWdlSXNGcmVlKHZvaWQqIHBhZ2UsIHNpemVfdCBjb3VudCkgb3Zl
cnJpZGUKKyAgICB2b2lkKiBtYWtlSXNsYW5kKHVpbnRwdHJfdCBqdW1wTG9jYXRpb24sIHVpbnRw
dHJfdCBuZXdUYXJnZXQsIGJvb2wgY29uY3VycmVudGx5KQogICAgIHsKLSAgICAgICAgbV9yZXNl
cnZhdGlvbi5kZWNvbW1pdChwYWdlLCBwYWdlU2l6ZSgpICogY291bnQpOworICAgICAgICBhdXRv
IGxvY2tlciA9IGhvbGRMb2NrKGdldExvY2soKSk7CisgICAgICAgIHJldHVybiBpc2xhbmRGb3JK
dW1wTG9jYXRpb24obG9ja2VyLCBqdW1wTG9jYXRpb24sIG5ld1RhcmdldCwgY29uY3VycmVudGx5
KTsKICAgICB9CiAKIHByaXZhdGU6CisgICAgUmVnaW9uQWxsb2NhdG9yKiBmaW5kUmVnaW9uKHVp
bnRwdHJfdCBwdHIpCisgICAgeworICAgICAgICBSZWdpb25BbGxvY2F0b3IqIHJlc3VsdCA9IG51
bGxwdHI7CisgICAgICAgIGZvckVhY2hBbGxvY2F0b3IoWyZdIChSZWdpb25BbGxvY2F0b3ImIGFs
bG9jYXRvcikgeworICAgICAgICAgICAgaWYgKGFsbG9jYXRvci5zdGFydCgpIDw9IHB0ciAmJiBw
dHIgPCBhbGxvY2F0b3IuZW5kKCkpIHsKKyAgICAgICAgICAgICAgICByZXN1bHQgPSAmYWxsb2Nh
dG9yOworICAgICAgICAgICAgICAgIHJldHVybiBJdGVyYXRpb25TdGF0dXM6OkRvbmU7CisgICAg
ICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gSXRlcmF0aW9uU3RhdHVzOjpDb250aW51ZTsK
KyAgICAgICAgfSk7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorCisgICAgdm9pZCBm
cmVlSnVtcElzbGFuZHMoY29uc3QgTG9ja0hvbGRlciYsIElzbGFuZHMqIGlzbGFuZHMpCisgICAg
eworICAgICAgICBmb3IgKENvZGVMb2NhdGlvbkxhYmVsPEV4ZWN1dGFibGVNZW1vcnlQdHJUYWc+
IGp1bXBJc2xhbmQgOiBpc2xhbmRzLT5qdW1wSXNsYW5kcykgeworICAgICAgICAgICAgdWludHB0
cl90IHVudGFnZ2VkSnVtcElzbGFuZCA9IGJpdHdpc2VfY2FzdDx1aW50cHRyX3Q+KGp1bXBJc2xh
bmQuZGF0YUxvY2F0aW9uKCkpOworICAgICAgICAgICAgUmVnaW9uQWxsb2NhdG9yKiBhbGxvY2F0
b3IgPSBmaW5kUmVnaW9uKHVudGFnZ2VkSnVtcElzbGFuZCk7CisgICAgICAgICAgICBSRUxFQVNF
X0FTU0VSVChhbGxvY2F0b3IpOworICAgICAgICAgICAgYWxsb2NhdG9yLT5mcmVlSXNsYW5kKHVu
dGFnZ2VkSnVtcElzbGFuZCk7CisgICAgICAgIH0KKyAgICAgICAgaXNsYW5kcy0+anVtcElzbGFu
ZHMuY2xlYXIoKTsKKyAgICB9CisKKyAgICB2b2lkIGZyZWVJc2xhbmRzKGNvbnN0IExvY2tIb2xk
ZXImIGxvY2tlciwgSXNsYW5kcyogaXNsYW5kcykKKyAgICB7CisgICAgICAgIGZyZWVKdW1wSXNs
YW5kcyhsb2NrZXIsIGlzbGFuZHMpOworICAgICAgICBpc2xhbmRzRm9ySnVtcExvY2F0aW9uLnJl
bW92ZShpc2xhbmRzKTsKKyAgICAgICAgZGVsZXRlIGlzbGFuZHM7CisgICAgfQorCisgICAgdm9p
ZCogaXNsYW5kRm9ySnVtcExvY2F0aW9uKGNvbnN0IExvY2tIb2xkZXImIGxvY2tlciwgdWludHB0
cl90IGp1bXBMb2NhdGlvbiwgdWludHB0cl90IHRhcmdldCwgYm9vbCBjb25jdXJyZW50bHkpCisg
ICAgeworICAgICAgICBJc2xhbmRzKiBpc2xhbmRzID0gaXNsYW5kc0Zvckp1bXBMb2NhdGlvbi5m
aW5kRXhhY3QoYml0d2lzZV9jYXN0PHZvaWQqPihqdW1wTG9jYXRpb24pKTsKKyAgICAgICAgaWYg
KGlzbGFuZHMpIHsKKyAgICAgICAgICAgIC8vIEZJWE1FOiBXZSBjb3VsZCBjcmVhdGUgc29tZSBt
ZXRob2Qgb2YgcmV1c2luZyBhbHJlYWR5IGFsbG9jYXRlZCBpc2xhbmRzIGhlcmUsIGJ1dCBpdCdz
CisgICAgICAgICAgICAvLyB1bmxpa2VseSB0byBtYXR0ZXIgaW4gcHJhY3RpY2UuCisgICAgICAg
ICAgICBpZiAoIWNvbmN1cnJlbnRseSkKKyAgICAgICAgICAgICAgICBmcmVlSnVtcElzbGFuZHMo
bG9ja2VyLCBpc2xhbmRzKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGlzbGFuZHMg
PSBuZXcgSXNsYW5kczsKKyAgICAgICAgICAgIGlzbGFuZHMtPnJvb3RKdW1wTG9jYXRpb24gPSBD
b2RlTG9jYXRpb25MYWJlbDxFeGVjdXRhYmxlTWVtb3J5UHRyVGFnPih0YWdDb2RlUHRyPEV4ZWN1
dGFibGVNZW1vcnlQdHJUYWc+KGJpdHdpc2VfY2FzdDx2b2lkKj4oanVtcExvY2F0aW9uKSkpOwor
ICAgICAgICAgICAgaXNsYW5kc0Zvckp1bXBMb2NhdGlvbi5pbnNlcnQoaXNsYW5kcyk7CisgICAg
ICAgIH0KKworICAgICAgICBSZWdpb25BbGxvY2F0b3IqIGFsbG9jYXRvciA9IGZpbmRSZWdpb24o
anVtcExvY2F0aW9uID4gdGFyZ2V0ID8ganVtcExvY2F0aW9uIC0gcmVnaW9uU2l6ZSA6IGp1bXBM
b2NhdGlvbik7CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKGFsbG9jYXRvcik7CisgICAgICAgIHZv
aWQqIHJlc3VsdCA9IGFsbG9jYXRvci0+YWxsb2NhdGVJc2xhbmQoKTsKKyAgICAgICAgdm9pZCog
Y3VycmVudElzbGFuZCA9IHJlc3VsdDsKKyAgICAgICAganVtcExvY2F0aW9uID0gYml0d2lzZV9j
YXN0PHVpbnRwdHJfdD4oY3VycmVudElzbGFuZCk7CisgICAgICAgIHdoaWxlICh0cnVlKSB7Cisg
ICAgICAgICAgICBpc2xhbmRzLT5qdW1wSXNsYW5kcy5hcHBlbmQoQ29kZUxvY2F0aW9uTGFiZWw8
RXhlY3V0YWJsZU1lbW9yeVB0clRhZz4odGFnQ29kZVB0cjxFeGVjdXRhYmxlTWVtb3J5UHRyVGFn
PihjdXJyZW50SXNsYW5kKSkpOworCisgICAgICAgICAgICBhdXRvIGVtaXRKdW1wVG8gPSBbJl0g
KHZvaWQqIHRhcmdldCkgeworICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKEFSTTY0QXNz
ZW1ibGVyOjpjYW5FbWl0SnVtcChiaXR3aXNlX2Nhc3Q8dm9pZCo+KGp1bXBMb2NhdGlvbiksIHRh
cmdldCkpOworCisgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzIGppdDsKKyAgICAgICAgICAg
ICAgICBhdXRvIGp1bXAgPSBqaXQuanVtcCgpOworICAgICAgICAgICAgICAgIExpbmtCdWZmZXIg
bGlua0J1ZmZlcihqaXQsIE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxOb1B0clRhZz4oY3VycmVudElz
bGFuZCksIGlzbGFuZFNpemVJbkJ5dGVzLCBKSVRDb21waWxhdGlvbk11c3RTdWNjZWVkLCBmYWxz
ZSk7CisgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQobGlua0J1ZmZlci5pc1ZhbGlkKCkp
OworICAgICAgICAgICAgICAgIGxpbmtCdWZmZXIubGluayhqdW1wLCBDb2RlTG9jYXRpb25MYWJl
bDxOb1B0clRhZz4odGFyZ2V0KSk7CisgICAgICAgICAgICAgICAgRklOQUxJWkVfQ09ERShsaW5r
QnVmZmVyLCBOb1B0clRhZywgIkp1bXAgSXNsYW5kOiAlbHUiLCBqdW1wTG9jYXRpb24pOworICAg
ICAgICAgICAgfTsKKworICAgICAgICAgICAgaWYgKEFSTTY0QXNzZW1ibGVyOjpjYW5FbWl0SnVt
cChiaXR3aXNlX2Nhc3Q8dm9pZCo+KGp1bXBMb2NhdGlvbiksIGJpdHdpc2VfY2FzdDx2b2lkKj4o
dGFyZ2V0KSkpIHsKKyAgICAgICAgICAgICAgICBlbWl0SnVtcFRvKGJpdHdpc2VfY2FzdDx2b2lk
Kj4odGFyZ2V0KSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisKKyAg
ICAgICAgICAgIHVpbnRwdHJfdCBuZXh0SXNsYW5kUmVnaW9uOworICAgICAgICAgICAgaWYgKGp1
bXBMb2NhdGlvbiA+IHRhcmdldCkKKyAgICAgICAgICAgICAgICBuZXh0SXNsYW5kUmVnaW9uID0g
anVtcExvY2F0aW9uIC0gcmVnaW9uU2l6ZTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAg
ICAgICBuZXh0SXNsYW5kUmVnaW9uID0ganVtcExvY2F0aW9uICsgcmVnaW9uU2l6ZTsKKworICAg
ICAgICAgICAgUmVnaW9uQWxsb2NhdG9yKiBhbGxvY2F0b3IgPSBmaW5kUmVnaW9uKG5leHRJc2xh
bmRSZWdpb24pOworICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoYWxsb2NhdG9yKTsKKyAgICAg
ICAgICAgIHZvaWQqIG5leHRJc2xhbmQgPSBhbGxvY2F0b3ItPmFsbG9jYXRlSXNsYW5kKCk7Cisg
ICAgICAgICAgICBlbWl0SnVtcFRvKG5leHRJc2xhbmQpOworICAgICAgICAgICAganVtcExvY2F0
aW9uID0gYml0d2lzZV9jYXN0PHVpbnRwdHJfdD4obmV4dElzbGFuZCk7CisgICAgICAgICAgICBj
dXJyZW50SXNsYW5kID0gbmV4dElzbGFuZDsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiBy
ZXN1bHQ7CisgICAgfQorI2VuZGlmIC8vIFVTRShKVU1QX0lTTEFORFMpCisKK3ByaXZhdGU6Cisg
ICAgY2xhc3MgQWxsb2NhdG9yIDogcHVibGljIE1ldGFBbGxvY2F0b3IgeworICAgICAgICB1c2lu
ZyBCYXNlID0gTWV0YUFsbG9jYXRvcjsKKyAgICBwdWJsaWM6CisgICAgICAgIEFsbG9jYXRvcihG
aXhlZFZNUG9vbEV4ZWN1dGFibGVBbGxvY2F0b3ImIGFsbG9jYXRvcikKKyAgICAgICAgICAgIDog
QmFzZShhbGxvY2F0b3IuZ2V0TG9jaygpLCBqaXRBbGxvY2F0aW9uR3JhbnVsZSwgcGFnZVNpemUo
KSkgLy8gcm91bmQgdXAgYWxsIGFsbG9jYXRpb25zIHRvIDMyIGJ5dGVzCisgICAgICAgICAgICAs
IG1fZml4ZWRBbGxvY2F0b3IoYWxsb2NhdG9yKQorICAgICAgICB7CisgICAgICAgIH0KKworICAg
ICAgICBGcmVlU3BhY2VQdHIgYWxsb2NhdGVOZXdTcGFjZShzaXplX3QmKSBvdmVycmlkZQorICAg
ICAgICB7CisgICAgICAgICAgICAvLyBXZSdyZSBvcGVyYXRpbmcgaW4gYSBmaXhlZCBwb29sLCBz
byBuZXcgYWxsb2NhdGlvbiBpcyBhbHdheXMgcHJvaGliaXRlZC4KKyAgICAgICAgICAgIHJldHVy
biBudWxscHRyOworICAgICAgICB9CisKKyAgICAgICAgdm9pZCBub3RpZnlOZWVkUGFnZSh2b2lk
KiBwYWdlLCBzaXplX3QgY291bnQpIG92ZXJyaWRlCisgICAgICAgIHsKKyAgICAgICAgICAgIG1f
Zml4ZWRBbGxvY2F0b3IubV9yZXNlcnZhdGlvbi5jb21taXQocGFnZSwgcGFnZVNpemUoKSAqIGNv
dW50KTsKKyAgICAgICAgfQorCisgICAgICAgIHZvaWQgbm90aWZ5UGFnZUlzRnJlZSh2b2lkKiBw
YWdlLCBzaXplX3QgY291bnQpIG92ZXJyaWRlCisgICAgICAgIHsKKyAgICAgICAgICAgIG1fZml4
ZWRBbGxvY2F0b3IubV9yZXNlcnZhdGlvbi5kZWNvbW1pdChwYWdlLCBwYWdlU2l6ZSgpICogY291
bnQpOworICAgICAgICB9CisKKyAgICAgICAgRml4ZWRWTVBvb2xFeGVjdXRhYmxlQWxsb2NhdG9y
JiBtX2ZpeGVkQWxsb2NhdG9yOworICAgIH07CisKKyNpZiBVU0UoSlVNUF9JU0xBTkRTKQorICAg
IGNsYXNzIFJlZ2lvbkFsbG9jYXRvciBmaW5hbCA6IHB1YmxpYyBBbGxvY2F0b3IgeworICAgICAg
ICB1c2luZyBCYXNlID0gQWxsb2NhdG9yOworICAgIHB1YmxpYzoKKyAgICAgICAgUmVnaW9uQWxs
b2NhdG9yKEZpeGVkVk1Qb29sRXhlY3V0YWJsZUFsbG9jYXRvciYgYWxsb2NhdG9yKQorICAgICAg
ICAgICAgOiBCYXNlKGFsbG9jYXRvcikKKyAgICAgICAgeworICAgICAgICB9CisKKyAgICAgICAg
Ly8gIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAgICAvLyAgfCBq
aXQgYWxsb2NhdGlvbnMgLS0+ICAgPC0tIGlzbGFuZHMgfAorICAgICAgICAvLyAgLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgICAgICAgIHVpbnRwdHJfdCBzdGFydCgp
IHsgcmV0dXJuIGJpdHdpc2VfY2FzdDx1aW50cHRyX3Q+KHVudGFnQ29kZVB0cjxFeGVjdXRhYmxl
TWVtb3J5UHRyVGFnPihtX3N0YXJ0KSk7IH0KKyAgICAgICAgdWludHB0cl90IGVuZCgpIHsgcmV0
dXJuIGJpdHdpc2VfY2FzdDx1aW50cHRyX3Q+KHVudGFnQ29kZVB0cjxFeGVjdXRhYmxlTWVtb3J5
UHRyVGFnPihtX2VuZCkpOyB9CisKKyAgICAgICAgdWludHB0cl90IGlzbGFuZEJlZ2luKCkKKyAg
ICAgICAgeworICAgICAgICAgICAgLy8gW3N0YXJ0LCBhbGxvY2F0b3JFbmQpCisgICAgICAgICAg
ICByZXR1cm4gZW5kKCkgLSBpc2xhbmRSZWdpb25TaXplOworICAgICAgICB9CisKKyAgICAgICAg
dWludHB0cl90IGFsbG9jYXRvclNpemUoKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4g
aXNsYW5kQmVnaW4oKSAtIHN0YXJ0KCk7CisgICAgICAgIH0KKworICAgICAgICBzaXplX3QgaXNs
YW5kc1BlclBhZ2UoKQorICAgICAgICB7CisgICAgICAgICAgICBzaXplX3QgaXNsYW5kc1BlclBh
Z2UgPSBwYWdlU2l6ZSgpIC8gaXNsYW5kU2l6ZUluQnl0ZXM7CisgICAgICAgICAgICBBU1NFUlQo
aXNsYW5kc1BlclBhZ2UgKiBpc2xhbmRTaXplSW5CeXRlcyA9PSBwYWdlU2l6ZSgpKTsKKyAgICAg
ICAgICAgIEFTU0VSVChpc1Bvd2VyT2ZUd28oaXNsYW5kc1BlclBhZ2UpKTsKKyAgICAgICAgICAg
IHJldHVybiBpc2xhbmRzUGVyUGFnZTsKKyAgICAgICAgfQorCisgICAgICAgIHZvaWQgcmVsZWFz
ZShjb25zdCBMb2NrSG9sZGVyJiBsb2NrZXIsIE1ldGFBbGxvY2F0b3JIYW5kbGUmIGhhbmRsZSkg
ZmluYWwKKyAgICAgICAgeworICAgICAgICAgICAgbV9maXhlZEFsbG9jYXRvci5oYW5kbGVXaWxs
QmVSZWxlYXNlZChsb2NrZXIsIGhhbmRsZSk7CisgICAgICAgICAgICBCYXNlOjpyZWxlYXNlKGxv
Y2tlciwgaGFuZGxlKTsKKyAgICAgICAgfQorCisgICAgICAgIHZvaWQqIGFsbG9jYXRlSXNsYW5k
KCkKKyAgICAgICAgeworICAgICAgICAgICAgdWludHB0cl90IGVuZCA9IHRoaXMtPmVuZCgpOwor
ICAgICAgICAgICAgYXV0byBmaW5kUmVzdWx0ID0gWyZdICgpIC0+IHZvaWQqIHsKKyAgICAgICAg
ICAgICAgICBzaXplX3QgcmVzdWx0Qml0ID0gaXNsYW5kQml0cy5maW5kQ2xlYXJCaXQoMCk7Cisg
ICAgICAgICAgICAgICAgaWYgKHJlc3VsdEJpdCA9PSBpc2xhbmRCaXRzLnNpemUoKSkKKyAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgICAgICAgICAgaXNsYW5kQml0
c1tyZXN1bHRCaXRdID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICB1aW50cHRyX3QgcmVzdWx0ID0g
ZW5kIC0gKChyZXN1bHRCaXQgKyAxKSAqIGlzbGFuZFNpemVJbkJ5dGVzKTsgCisgICAgICAgICAg
ICAgICAgcmV0dXJuIGJpdHdpc2VfY2FzdDx2b2lkKj4ocmVzdWx0KTsKKyAgICAgICAgICAgIH07
CisKKyAgICAgICAgICAgIGlmICh2b2lkKiByZXN1bHQgPSBmaW5kUmVzdWx0KCkpCisgICAgICAg
ICAgICAgICAgcmV0dXJuIHJlc3VsdDsKKworICAgICAgICAgICAgaXNsYW5kQml0cy5yZXNpemUo
aXNsYW5kQml0cy5zaXplKCkgKyBpc2xhbmRzUGVyUGFnZSgpKTsKKyAgICAgICAgICAgIGlmIChV
TkxJS0VMWShpc2xhbmRCaXRzLnNpemUoKSA+IG1heElzbGFuZHNQZXJSZWdpb24pKQorICAgICAg
ICAgICAgICAgIGNyYXNoT25KdW1wSXNsYW5kRXhoYXVzdGlvbigpOworCisgICAgICAgICAgICB1
aW50cHRyX3QgcGFnZUJlZ2luID0gZW5kIC0gKGlzbGFuZEJpdHMuc2l6ZSgpICogaXNsYW5kU2l6
ZUluQnl0ZXMpOyAvLyBbaXNsYW5kQmVnaW4sIGVuZCkKKyAgICAgICAgICAgIG1fZml4ZWRBbGxv
Y2F0b3IubV9yZXNlcnZhdGlvbi5jb21taXQoYml0d2lzZV9jYXN0PHZvaWQqPihwYWdlQmVnaW4p
LCBwYWdlU2l6ZSgpKTsKKworICAgICAgICAgICAgdm9pZCogcmVzdWx0ID0gZmluZFJlc3VsdCgp
OworICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQocmVzdWx0KTsKKyAgICAgICAgICAgIHJldHVy
biByZXN1bHQ7CisgICAgICAgIH0KKworICAgICAgICBORVZFUl9JTkxJTkUgTk9fUkVUVVJOX0RV
RV9UT19DUkFTSCB2b2lkIGNyYXNoT25KdW1wSXNsYW5kRXhoYXVzdGlvbigpCisgICAgICAgIHsK
KyAgICAgICAgICAgIENSQVNIKCk7CisgICAgICAgIH0KKworICAgICAgICBPcHRpb25hbDxzaXpl
X3Q+IGlzbGFuZEJpdCh1aW50cHRyX3QgaXNsYW5kKQorICAgICAgICB7CisgICAgICAgICAgICB1
aW50cHRyX3QgZW5kID0gdGhpcy0+ZW5kKCk7CisgICAgICAgICAgICBpZiAoaXNsYW5kQmVnaW4o
KSA8PSBpc2xhbmQgJiYgaXNsYW5kIDwgZW5kKQorICAgICAgICAgICAgICAgIHJldHVybiAoKGVu
ZCAtIGlzbGFuZCkgLyBpc2xhbmRTaXplSW5CeXRlcykgLSAxOworICAgICAgICAgICAgcmV0dXJu
IFdURjo6bnVsbG9wdDsKKyAgICAgICAgfQorCisgICAgICAgIHZvaWQgZnJlZUlzbGFuZCh1aW50
cHRyX3QgaXNsYW5kKQorICAgICAgICB7CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChpc2xh
bmRCZWdpbigpIDw9IGlzbGFuZCAmJiBpc2xhbmQgPCBlbmQoKSk7CisgICAgICAgICAgICBzaXpl
X3QgYml0ID0gaXNsYW5kQml0KGlzbGFuZCkudmFsdWUoKTsKKyAgICAgICAgICAgIFJFTEVBU0Vf
QVNTRVJUKCEhaXNsYW5kQml0c1tiaXRdKTsKKyAgICAgICAgICAgIGlzbGFuZEJpdHNbYml0XSA9
IGZhbHNlOworICAgICAgICB9CisKKyAgICAgICAgYm9vbCBpc0luQWxsb2NhdGVkTWVtb3J5KGNv
bnN0IEFic3RyYWN0TG9ja2VyJiBsb2NrZXIsIHZvaWQqIGFkZHJlc3MpCisgICAgICAgIHsKKyAg
ICAgICAgICAgIGlmIChCYXNlOjppc0luQWxsb2NhdGVkTWVtb3J5KGxvY2tlciwgYWRkcmVzcykp
CisgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAgICBpZiAoT3B0aW9uYWw8
c2l6ZV90PiBiaXQgPSBpc2xhbmRCaXQoYml0d2lzZV9jYXN0PHVpbnRwdHJfdD4oYWRkcmVzcykp
KSB7CisgICAgICAgICAgICAgICAgaWYgKGJpdC52YWx1ZSgpIDwgaXNsYW5kQml0cy5zaXplKCkp
CisgICAgICAgICAgICAgICAgICAgIHJldHVybiAhIWlzbGFuZEJpdHNbYml0LnZhbHVlKCldOwor
ICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisKKyAg
ICAgICAgLy8gUmFuZ2U6IFtzdGFydCwgZW5kKQorICAgICAgICB2b2lkKiBtX3N0YXJ0OworICAg
ICAgICB2b2lkKiBtX2VuZDsKKyAgICAgICAgRmFzdEJpdFZlY3RvciBpc2xhbmRCaXRzOworICAg
IH07CisjZW5kaWYgLy8gVVNFKEpVTVBfSVNMQU5EUykKKworICAgIHRlbXBsYXRlIDx0eXBlbmFt
ZSBGdW5jdGlvbj4KKyAgICB2b2lkIGZvckVhY2hBbGxvY2F0b3IoRnVuY3Rpb24gZnVuY3Rpb24p
CisgICAgeworI2lmIFVTRShKVU1QX0lTTEFORFMpCisgICAgICAgIGZvciAoUmVnaW9uQWxsb2Nh
dG9yJiBhbGxvY2F0b3IgOiBtX2FsbG9jYXRvcnMpIHsKKyAgICAgICAgICAgIHVzaW5nIEZ1bmN0
aW9uUmVzdWx0VHlwZSA9IGRlY2x0eXBlKGZ1bmN0aW9uKGFsbG9jYXRvcikpOworICAgICAgICAg
ICAgaWYgY29uc3RleHByIChzdGQ6OmlzX3NhbWU8SXRlcmF0aW9uU3RhdHVzLCBGdW5jdGlvblJl
c3VsdFR5cGU+Ojp2YWx1ZSkgeworICAgICAgICAgICAgICAgIGlmIChmdW5jdGlvbihhbGxvY2F0
b3IpID09IEl0ZXJhdGlvblN0YXR1czo6RG9uZSkKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIHN0YXRpY19hc3NlcnQoc3Rk
Ojppc19zYW1lPHZvaWQsIEZ1bmN0aW9uUmVzdWx0VHlwZT46OnZhbHVlKTsKKyAgICAgICAgICAg
ICAgICBmdW5jdGlvbihhbGxvY2F0b3IpOworICAgICAgICAgICAgfQorICAgICAgICB9CisjZWxz
ZQorICAgICAgICBmdW5jdGlvbihtX2FsbG9jYXRvcik7CisjZW5kaWYgLy8gVVNFKEpVTVBfSVNM
QU5EUykKKyAgICB9CisKKyNpZiBVU0UoSlVNUF9JU0xBTkRTKQorICAgIGNsYXNzIElzbGFuZHMg
OiBwdWJsaWMgUmVkQmxhY2tUcmVlPElzbGFuZHMsIHZvaWQqPjo6Tm9kZSB7CisgICAgICAgIFdU
Rl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworICAgIHB1YmxpYzoKKyAgICAgICAgdm9pZCoga2V5KCkg
eyByZXR1cm4gcm9vdEp1bXBMb2NhdGlvbi5kYXRhTG9jYXRpb24oKTsgfQorICAgICAgICBDb2Rl
TG9jYXRpb25MYWJlbDxFeGVjdXRhYmxlTWVtb3J5UHRyVGFnPiByb290SnVtcExvY2F0aW9uOwor
ICAgICAgICBWZWN0b3I8Q29kZUxvY2F0aW9uTGFiZWw8RXhlY3V0YWJsZU1lbW9yeVB0clRhZz4+
IGp1bXBJc2xhbmRzOworICAgIH07CisjZW5kaWYgLy8gVVNFKEpVTVBfSVNMQU5EUykKKworICAg
IExvY2sgbV9sb2NrOwogICAgIFBhZ2VSZXNlcnZhdGlvbiBtX3Jlc2VydmF0aW9uOworI2lmIFVT
RShKVU1QX0lTTEFORFMpCisgICAgc3RkOjphcnJheTxSZWdpb25BbGxvY2F0b3IsIG51bWJlck9m
UmVnaW9ucz4gbV9hbGxvY2F0b3JzOworICAgIFJlZEJsYWNrVHJlZTxJc2xhbmRzLCB2b2lkKj4g
aXNsYW5kc0Zvckp1bXBMb2NhdGlvbjsKKyNlbHNlCisgICAgQWxsb2NhdG9yIG1fYWxsb2NhdG9y
OworI2VuZGlmIC8vIFVTRShKVU1QX0lTTEFORFMpCiB9OwogCi1GaXhlZFZNUG9vbEV4ZWN1dGFi
bGVBbGxvY2F0b3I6On5GaXhlZFZNUG9vbEV4ZWN1dGFibGVBbGxvY2F0b3IoKQotewotICAgIG1f
cmVzZXJ2YXRpb24uZGVhbGxvY2F0ZSgpOwotfQotCiAvLyBLZWVwIHRoaXMgcG9pbnRlciBpbiBh
IG11dGFibGUgZ2xvYmFsIHZhcmlhYmxlIHRvIGhlbHAgTGVha3MgZmluZCBpdC4KIC8vIEJ1dCB3
ZSBkbyBub3QgdXNlIHRoaXMgcG9pbnRlci4KIHN0YXRpYyBGaXhlZFZNUG9vbEV4ZWN1dGFibGVB
bGxvY2F0b3IqIGdsb2JhbEZpeGVkVk1Qb29sRXhlY3V0YWJsZUFsbG9jYXRvclRvV29ya0Fyb3Vu
ZExlYWtzID0gbnVsbHB0cjsKQEAgLTQxNyw3ICs4MjUsNiBAQCB2b2lkIEV4ZWN1dGFibGVBbGxv
Y2F0b3I6OmluaXRpYWxpemVVbmRlCiAgICAgUkVMRUFTRV9BU1NFUlQoIWdfanNjQ29uZmlnLmZp
eGVkVk1Qb29sRXhlY3V0YWJsZUFsbG9jYXRvcik7CiAgICAgZ19qc2NDb25maWcuZml4ZWRWTVBv
b2xFeGVjdXRhYmxlQWxsb2NhdG9yID0gbmV3IEZpeGVkVk1Qb29sRXhlY3V0YWJsZUFsbG9jYXRv
cigpOwogICAgIGdsb2JhbEZpeGVkVk1Qb29sRXhlY3V0YWJsZUFsbG9jYXRvclRvV29ya0Fyb3Vu
ZExlYWtzID0gZ19qc2NDb25maWcuZml4ZWRWTVBvb2xFeGVjdXRhYmxlQWxsb2NhdG9yOwotICAg
IENvZGVQcm9maWxpbmc6Om5vdGlmeUFsbG9jYXRvcihnX2pzY0NvbmZpZy5maXhlZFZNUG9vbEV4
ZWN1dGFibGVBbGxvY2F0b3IpOwogfQogCiBib29sIEV4ZWN1dGFibGVBbGxvY2F0b3I6OmlzVmFs
aWQoKSBjb25zdApAQCAtNDI1LDcgKzgzMiw3IEBAIGJvb2wgRXhlY3V0YWJsZUFsbG9jYXRvcjo6
aXNWYWxpZCgpIGNvbnMKICAgICBGaXhlZFZNUG9vbEV4ZWN1dGFibGVBbGxvY2F0b3IqIGFsbG9j
YXRvciA9IGdfanNjQ29uZmlnLmZpeGVkVk1Qb29sRXhlY3V0YWJsZUFsbG9jYXRvcjsKICAgICBp
ZiAoIWFsbG9jYXRvcikKICAgICAgICAgcmV0dXJuIEJhc2U6OmlzVmFsaWQoKTsKLSAgICByZXR1
cm4gISFhbGxvY2F0b3ItPmJ5dGVzUmVzZXJ2ZWQoKTsKKyAgICByZXR1cm4gYWxsb2NhdG9yLT5p
c1ZhbGlkKCk7CiB9CiAKIGJvb2wgRXhlY3V0YWJsZUFsbG9jYXRvcjo6dW5kZXJNZW1vcnlQcmVz
c3VyZSgpCkBAIC00NTYsMTEgKzg2MywxMSBAQCBkb3VibGUgRXhlY3V0YWJsZUFsbG9jYXRvcjo6
bWVtb3J5UHJlc3N1CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotUmVmUHRyPEV4ZWN1dGFibGVN
ZW1vcnlIYW5kbGU+IEV4ZWN1dGFibGVBbGxvY2F0b3I6OmFsbG9jYXRlKHNpemVfdCBzaXplSW5C
eXRlcywgdm9pZCogb3duZXJVSUQsIEpJVENvbXBpbGF0aW9uRWZmb3J0IGVmZm9ydCkKK1JlZlB0
cjxFeGVjdXRhYmxlTWVtb3J5SGFuZGxlPiBFeGVjdXRhYmxlQWxsb2NhdG9yOjphbGxvY2F0ZShz
aXplX3Qgc2l6ZUluQnl0ZXMsIEpJVENvbXBpbGF0aW9uRWZmb3J0IGVmZm9ydCkKIHsKICAgICBG
aXhlZFZNUG9vbEV4ZWN1dGFibGVBbGxvY2F0b3IqIGFsbG9jYXRvciA9IGdfanNjQ29uZmlnLmZp
eGVkVk1Qb29sRXhlY3V0YWJsZUFsbG9jYXRvcjsKICAgICBpZiAoIWFsbG9jYXRvcikKLSAgICAg
ICAgcmV0dXJuIEJhc2U6OmFsbG9jYXRlKHNpemVJbkJ5dGVzLCBvd25lclVJRCwgZWZmb3J0KTsK
KyAgICAgICAgcmV0dXJuIEJhc2U6OmFsbG9jYXRlKHNpemVJbkJ5dGVzLCBlZmZvcnQpOwogICAg
IGlmIChPcHRpb25zOjpsb2dFeGVjdXRhYmxlQWxsb2NhdGlvbigpKSB7CiAgICAgICAgIE1ldGFB
bGxvY2F0b3I6OlN0YXRpc3RpY3Mgc3RhdHMgPSBhbGxvY2F0b3ItPmN1cnJlbnRTdGF0aXN0aWNz
KCk7CiAgICAgICAgIGRhdGFMb2coIkFsbG9jYXRpbmcgIiwgc2l6ZUluQnl0ZXMsICIgYnl0ZXMg
b2YgZXhlY3V0YWJsZSBtZW1vcnkgd2l0aCAiLCBzdGF0cy5ieXRlc0FsbG9jYXRlZCwgIiBieXRl
cyBhbGxvY2F0ZWQsICIsIHN0YXRzLmJ5dGVzUmVzZXJ2ZWQsICIgYnl0ZXMgcmVzZXJ2ZWQsIGFu
ZCAiLCBzdGF0cy5ieXRlc0NvbW1pdHRlZCwgIiBjb21taXR0ZWQuXG4iKTsKQEAgLTQ4Nyw3ICs4
OTQsNyBAQCBSZWZQdHI8RXhlY3V0YWJsZU1lbW9yeUhhbmRsZT4gRXhlY3V0YWJsCiAgICAgICAg
IH0KICAgICB9CiAKLSAgICBSZWZQdHI8RXhlY3V0YWJsZU1lbW9yeUhhbmRsZT4gcmVzdWx0ID0g
YWxsb2NhdG9yLT5hbGxvY2F0ZShzaXplSW5CeXRlcywgb3duZXJVSUQpOworICAgIFJlZlB0cjxF
eGVjdXRhYmxlTWVtb3J5SGFuZGxlPiByZXN1bHQgPSBhbGxvY2F0b3ItPmFsbG9jYXRlKHNpemVJ
bkJ5dGVzKTsKICAgICBpZiAoIXJlc3VsdCkgewogICAgICAgICBpZiAoZWZmb3J0ICE9IEpJVENv
bXBpbGF0aW9uQ2FuRmFpbCkgewogICAgICAgICAgICAgZGF0YUxvZygiUmFuIG91dCBvZiBleGVj
dXRhYmxlIG1lbW9yeSB3aGlsZSBhbGxvY2F0aW5nICIsIHNpemVJbkJ5dGVzLCAiIGJ5dGVzLlxu
Iik7CkBAIC01MzksNiArOTQ2LDI2IEBAIHZvaWQgRXhlY3V0YWJsZUFsbG9jYXRvcjo6ZHVtcFBy
b2ZpbGUoKQogfQogI2VuZGlmCiAKKyNpZiBVU0UoSlVNUF9JU0xBTkRTKQordm9pZCogRXhlY3V0
YWJsZUFsbG9jYXRvcjo6Z2V0SnVtcElzbGFuZFRvKHZvaWQqIGZyb20sIHZvaWQqIG5ld0Rlc3Rp
bmF0aW9uKQoreworICAgIEZpeGVkVk1Qb29sRXhlY3V0YWJsZUFsbG9jYXRvciogYWxsb2NhdG9y
ID0gZ19qc2NDb25maWcuZml4ZWRWTVBvb2xFeGVjdXRhYmxlQWxsb2NhdG9yOworICAgIGlmICgh
YWxsb2NhdG9yKQorICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworCisgICAg
cmV0dXJuIGFsbG9jYXRvci0+bWFrZUlzbGFuZChiaXR3aXNlX2Nhc3Q8dWludHB0cl90Pihmcm9t
KSwgYml0d2lzZV9jYXN0PHVpbnRwdHJfdD4obmV3RGVzdGluYXRpb24pLCBmYWxzZSk7Cit9CisK
K3ZvaWQqIEV4ZWN1dGFibGVBbGxvY2F0b3I6OmdldEp1bXBJc2xhbmRUb0NvbmN1cnJlbnRseSh2
b2lkKiBmcm9tLCB2b2lkKiBuZXdEZXN0aW5hdGlvbikKK3sKKyAgICBGaXhlZFZNUG9vbEV4ZWN1
dGFibGVBbGxvY2F0b3IqIGFsbG9jYXRvciA9IGdfanNjQ29uZmlnLmZpeGVkVk1Qb29sRXhlY3V0
YWJsZUFsbG9jYXRvcjsKKyAgICBpZiAoIWFsbG9jYXRvcikKKyAgICAgICAgUkVMRUFTRV9BU1NF
UlRfTk9UX1JFQUNIRUQoKTsKKworICAgIHJldHVybiBhbGxvY2F0b3ItPm1ha2VJc2xhbmQoYml0
d2lzZV9jYXN0PHVpbnRwdHJfdD4oZnJvbSksIGJpdHdpc2VfY2FzdDx1aW50cHRyX3Q+KG5ld0Rl
c3RpbmF0aW9uKSwgdHJ1ZSk7Cit9CisjZW5kaWYKKwogdm9pZCogc3RhcnRPZkZpeGVkRXhlY3V0
YWJsZU1lbW9yeVBvb2xJbXBsKCkKIHsKICAgICBGaXhlZFZNUG9vbEV4ZWN1dGFibGVBbGxvY2F0
b3IqIGFsbG9jYXRvciA9IGdfanNjQ29uZmlnLmZpeGVkVk1Qb29sRXhlY3V0YWJsZUFsbG9jYXRv
cjsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvRXhlY3V0YWJsZUFsbG9jYXRvci5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvRXhlY3V0YWJsZUFsbG9j
YXRvci5oCShyZXZpc2lvbiAyNTc4NjYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0V4
ZWN1dGFibGVBbGxvY2F0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtNzEsNyArNzEsNyBAQCBwdWJs
aWM6CiAKICAgICBzdGF0aWMgdm9pZCBkdW1wUHJvZmlsZSgpIHsgfQogCi0gICAgUmVmUHRyPEV4
ZWN1dGFibGVNZW1vcnlIYW5kbGU+IGFsbG9jYXRlKHNpemVfdCwgdm9pZCosIEpJVENvbXBpbGF0
aW9uRWZmb3J0KSB7IHJldHVybiBudWxscHRyOyB9CisgICAgUmVmUHRyPEV4ZWN1dGFibGVNZW1v
cnlIYW5kbGU+IGFsbG9jYXRlKHNpemVfdCwgSklUQ29tcGlsYXRpb25FZmZvcnQpIHsgcmV0dXJu
IG51bGxwdHI7IH0KIAogICAgIHN0YXRpYyB2b2lkIHNldEpJVEVuYWJsZWQoYm9vbCkgeyB9Owog
ICAgIApAQCAtMTc2LDcgKzE3Niw3IEBAIHB1YmxpYzoKICAgICAKICAgICBKU19FWFBPUlRfUFJJ
VkFURSBzdGF0aWMgdm9pZCBzZXRKSVRFbmFibGVkKGJvb2wpOwogCi0gICAgUmVmUHRyPEV4ZWN1
dGFibGVNZW1vcnlIYW5kbGU+IGFsbG9jYXRlKHNpemVfdCBzaXplSW5CeXRlcywgdm9pZCogb3du
ZXJVSUQsIEpJVENvbXBpbGF0aW9uRWZmb3J0KTsKKyAgICBSZWZQdHI8RXhlY3V0YWJsZU1lbW9y
eUhhbmRsZT4gYWxsb2NhdGUoc2l6ZV90IHNpemVJbkJ5dGVzLCBKSVRDb21waWxhdGlvbkVmZm9y
dCk7CiAKICAgICBib29sIGlzVmFsaWRFeGVjdXRhYmxlTWVtb3J5KGNvbnN0IEFic3RyYWN0TG9j
a2VyJiwgdm9pZCogYWRkcmVzcyk7CiAKQEAgLTE4NCw2ICsxODQsMTEgQEAgcHVibGljOgogCiAg
ICAgTG9jayYgZ2V0TG9jaygpIGNvbnN0OwogCisjaWYgVVNFKEpVTVBfSVNMQU5EUykKKyAgICB2
b2lkKiBnZXRKdW1wSXNsYW5kVG8odm9pZCogZnJvbSwgdm9pZCogbmV3RGVzdGluYXRpb24pOwor
ICAgIHZvaWQqIGdldEp1bXBJc2xhbmRUb0NvbmN1cnJlbnRseSh2b2lkKiBmcm9tLCB2b2lkKiBu
ZXdEZXN0aW5hdGlvbik7CisjZW5kaWYKKwogcHJpdmF0ZToKICAgICBFeGVjdXRhYmxlQWxsb2Nh
dG9yKCkgPSBkZWZhdWx0OwogICAgIH5FeGVjdXRhYmxlQWxsb2NhdG9yKCkgPSBkZWZhdWx0OwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29tbW9uU2xvd1BhdGhzLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db21tb25TbG93UGF0
aHMuY3BwCShyZXZpc2lvbiAyNTc4NjYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9Db21tb25TbG93UGF0aHMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMiw3ICszMiw2IEBACiAj
aW5jbHVkZSAiQnl0ZWNvZGVTdHJ1Y3RzLmgiCiAjaW5jbHVkZSAiQ2FsbEZyYW1lLmgiCiAjaW5j
bHVkZSAiQ2xvbmVkQXJndW1lbnRzLmgiCi0jaW5jbHVkZSAiQ29kZVByb2ZpbGluZy5oIgogI2lu
Y2x1ZGUgIkRlZmluZVByb3BlcnR5QXR0cmlidXRlcy5oIgogI2luY2x1ZGUgIkRpcmVjdEFyZ3Vt
ZW50cy5oIgogI2luY2x1ZGUgIkVycm9yLmgiCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9Db21wbGV0aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9Db21wbGV0aW9uLmNwcAkocmV2aXNpb24gMjU3ODY2KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29tcGxldGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI3
LDcgKzI3LDYgQEAKICNpbmNsdWRlICJDYWxsRnJhbWUuaCIKICNpbmNsdWRlICJDYXRjaFNjb3Bl
LmgiCiAjaW5jbHVkZSAiQ29kZUNhY2hlLmgiCi0jaW5jbHVkZSAiQ29kZVByb2ZpbGluZy5oIgog
I2luY2x1ZGUgIkV4Y2VwdGlvbi5oIgogI2luY2x1ZGUgIklkZW50aWZpZXJJbmxpbmVzLmgiCiAj
aW5jbHVkZSAiSW50ZXJwcmV0ZXIuaCIKQEAgLTEzOCw4ICsxMzcsNiBAQCBKU1ZhbHVlIGV2YWx1
YXRlKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPCiAgICAgUkVMRUFTRV9BU1NFUlQodm0uYXRvbVN0
cmluZ1RhYmxlKCkgPT0gVGhyZWFkOjpjdXJyZW50KCkuYXRvbVN0cmluZ1RhYmxlKCkpOwogICAg
IFJFTEVBU0VfQVNTRVJUKCF2bS5pc0NvbGxlY3RvckJ1c3lPbkN1cnJlbnRUaHJlYWQoKSk7CiAK
LSAgICBDb2RlUHJvZmlsaW5nIHByb2ZpbGUoc291cmNlKTsKLQogICAgIGlmICghdGhpc1ZhbHVl
IHx8IHRoaXNWYWx1ZS5pc1VuZGVmaW5lZE9yTnVsbCgpKQogICAgICAgICB0aGlzVmFsdWUgPSBn
bG9iYWxPYmplY3Q7CiAgICAgSlNPYmplY3QqIHRoaXNPYmogPSBqc0Nhc3Q8SlNPYmplY3QqPih0
aGlzVmFsdWUudG9UaGlzKGdsb2JhbE9iamVjdCwgTm90U3RyaWN0TW9kZSkpOwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNNb2R1bGVMb2FkZXIuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTW9kdWxlTG9hZGVyLmNwcAkocmV2
aXNpb24gMjU3ODY2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNNb2R1bGVM
b2FkZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOSw3ICsyOSw2IEBACiAKICNpbmNsdWRlICJC
dWlsdGluTmFtZXMuaCIKICNpbmNsdWRlICJDYXRjaFNjb3BlLmgiCi0jaW5jbHVkZSAiQ29kZVBy
b2ZpbGluZy5oIgogI2luY2x1ZGUgIkVycm9yLmgiCiAjaW5jbHVkZSAiRXhjZXB0aW9uLmgiCiAj
aW5jbHVkZSAiSlNDSW5saW5lcy5oIgpAQCAtNDAwLDggKzM5OSw2IEBAIEVuY29kZWRKU1ZhbHVl
IEpTQ19IT1NUX0NBTEwgbW9kdWxlTG9hZGUKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29k
ZShKU1dlYkFzc2VtYmx5OjppbnN0YW50aWF0ZShnbG9iYWxPYmplY3QsIHByb21pc2UsIG1vZHVs
ZUtleSwganNTb3VyY2VDb2RlKSk7CiAjZW5kaWYKIAotICAgIENvZGVQcm9maWxpbmcgcHJvZmls
ZShzb3VyY2VDb2RlKTsKLQogICAgIFBhcnNlckVycm9yIGVycm9yOwogICAgIHN0ZDo6dW5pcXVl
X3B0cjxNb2R1bGVQcm9ncmFtTm9kZT4gbW9kdWxlUHJvZ3JhbU5vZGUgPSBwYXJzZTxNb2R1bGVQ
cm9ncmFtTm9kZT4oCiAgICAgICAgIHZtLCBzb3VyY2VDb2RlLCBJZGVudGlmaWVyKCksIEpTUGFy
c2VyQnVpbHRpbk1vZGU6Ok5vdEJ1aWx0aW4sCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9PcHRpb25zTGlzdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL09wdGlvbnNMaXN0LmgJKHJldmlzaW9uIDI1Nzg2NikKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnNMaXN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTUwMCw2
ICs1MDAsNyBAQCBjb25zdGV4cHIgYm9vbCBlbmFibGVXZWJBc3NlbWJseVN0cmVhbWluCiAgICAg
dihCb29sLCBmb3JjZU9TUkV4aXRUb0xMSW50LCBmYWxzZSwgTm9ybWFsLCAiSWYgdHJ1ZSwgd2Ug
YWx3YXlzIGV4aXQgdG8gdGhlIExMSW50LiBJZiBmYWxzZSwgd2UgZXhpdCB0byB3aGF0ZXZlciBp
cyBtb3N0IGNvbnZlbmllbnQuIikgXAogICAgIHYoVW5zaWduZWQsIGdldEJ5VmFsSUNNYXhOdW1i
ZXJPZklkZW50aWZpZXJzLCA0LCBOb3JtYWwsICJOdW1iZXIgb2YgaWRlbnRpZmllcnMgd2Ugc2Vl
IGluIHRoZSBMTEludCB0aGF0IGNvdWxkIGNhdXNlIHVzIHRvIGJhaWwgb24gZ2VuZXJhdGluZyBh
biBJQyBmb3IgZ2V0X2J5X3ZhbC4iKSBcCiAgICAgdihCb29sLCB1c2VDbGFzc0ZpZWxkcywgZmFs
c2UsIE5vcm1hbCwgIklmIHRydWUsIHRoZSBwYXJzZXIgd2lsbCB1bmRlcnN0YW5kIGRhdGEgZmll
bGRzIGluc2lkZSBjbGFzc2VzLiIpIFwKKyAgICB2KEJvb2wsIHVzZVJhbmRvbWl6aW5nRXhlY3V0
YWJsZUlzbGFuZEFsbG9jYXRpb24sIGZhbHNlLCBOb3JtYWwsICJGb3IgdGhlIGFybTY0IEV4ZWN1
dGFibGVBbGxvY2F0b3IsIGlmIHRydWUsIHNlbGVjdCB3aGljaCByZWdpb24gdG8gdXNlIHJhbmRv
bWx5LiBUaGlzIGlzIHVzZWZ1bCBmb3IgdGVzdGluZyB0aGF0IGp1bXAgaXNsYW5kcyB3b3JrLiIp
IFwKIAogZW51bSBPcHRpb25FcXVpdmFsZW5jZSB7CiAgICAgU2FtZU9wdGlvbiwKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS90b29scy9Db2RlUHJvZmlsZS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL3Rvb2xzL0NvZGVQcm9maWxlLmNwcAkocmV2aXNpb24gMjU3
ODY2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3Rvb2xzL0NvZGVQcm9maWxlLmNwcAkobm9u
ZXhpc3RlbnQpCkBAIC0xLDE3MiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEyIEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAq
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuIAotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJDb2RlUHJv
ZmlsZS5oIgotCi0jaW5jbHVkZSAiQ29kZUJsb2NrLmgiCi0jaW5jbHVkZSAiQ29kZVByb2ZpbGlu
Zy5oIgotI2luY2x1ZGUgIkxpbmtCdWZmZXIuaCIKLSNpbmNsdWRlICJQcm9maWxlVHJlZU5vZGUu
aCIKLSNpbmNsdWRlIDx3dGYvU3RhY2tUcmFjZS5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0
cmluZy5oPgotCi1uYW1lc3BhY2UgSlNDIHsKLQotLy8gTWFwIGZyb20gQ29kZVR5cGUgZW51bSB0
byBhIGNvcnJlc3BvbmRpbmcgbmFtZS4KLXN0YXRpYyBjb25zdCBjaGFyKiBjb25zdCBzX2NvZGVU
eXBlTmFtZXNbQ29kZVByb2ZpbGU6Ok51bWJlck9mQ29kZVR5cGVzXSA9IHsKLSAgICAiW1tFbmdp
bmVDb2RlXV0iLAotICAgICJbW0dsb2JhbFRodW5rXV0iLAotICAgICJbW1JlZ0V4cENvZGVdXSIs
Ci0gICAgIltbREZHSklUXV0iLAotICAgICJbW0Jhc2VsaW5lT25seV1dIiwKLSAgICAiW1tCYXNl
bGluZVByb2ZpbGVdXSIsCi0gICAgIltbQmFzZWxpbmVPU1JdXSIsCi0gICAgIltbRW5naW5lRnJh
bWVdXSIKLX07Ci0KLS8vIEhlbHBlciBmdW5jdGlvbiwgdHJ1bmNhdGUgdHJhY2VzIHRvIHBydW5l
IHRoZSBvdXRwdXQgJiBtYWtlIHZlcnkgdmVyYm9zZSBtb2RlIGEgbGl0dGxlIG1vcmUgcmVhZGFi
bGUuCi1zdGF0aWMgYm9vbCB0cnVuY2F0ZVRyYWNlKGNvbnN0IGNoYXIqIHN5bWJvbE5hbWUpCi17
Ci0gICAgcmV0dXJuICFzdHJjbXAoc3ltYm9sTmFtZSwgIkpTQzo6Qnl0ZWNvZGVHZW5lcmF0b3I6
OmdlbmVyYXRlKCkiKQotICAgICAgICB8fCAhc3RyY21wKHN5bWJvbE5hbWUsICJKU0M6OlBhcnNl
cjxKU0M6OkxleGVyPHVuc2lnbmVkIGNoYXI+Pjo6cGFyc2VJbm5lcigpIikKLSAgICAgICAgfHwg
IXN0cmNtcChzeW1ib2xOYW1lLCAiV1RGOjpmYXN0TWFsbG9jKHVuc2lnbmVkIGxvbmcpIikKLSAg
ICAgICAgfHwgIXN0cmNtcChzeW1ib2xOYW1lLCAiV1RGOjpjYWxjdWxhdGVVVENPZmZzZXQoKSIp
Ci0gICAgICAgIHx8ICFzdHJjbXAoc3ltYm9sTmFtZSwgIkpTQzo6REZHOjpCeXRlQ29kZVBhcnNl
cjo6cGFyc2VDb2RlQmxvY2soKSIpOwotICAgICAgICAKLX0KLQotLy8gRWFjaCB0cmFjZSBjb25z
aXN0cyBvZiBhIHNlcXVlbmNlIG9mIHplcm8gb3IgbW9yZSAnRW5naW5lRnJhbWUnIGVudHJpZXMs
Ci0vLyBmb2xsb3dlZCBieSBhIHNhbXBsZSBpbiBKSVQgY29kZSwgb3Igb25lIG9yIG1vcmUgJ0Vu
Z2luZUZyYW1lJyBlbnRyaWVzLAotLy8gZm9sbG93ZWQgYnkgYSAnRW5naW5lQ29kZScgdGVybWlu
YXRvci4KLXZvaWQgQ29kZVByb2ZpbGU6OnNhbXBsZSh2b2lkKiBwYywgdm9pZCoqIGZyYW1lUG9p
bnRlcikKLXsKLSAgICAvLyBEaXNhbGxvdyB0cmFjZXMgY29udGFpbmluZyBvbmx5IGEgJ0VuZ2lu
ZUNvZGUnIHRlcm1pbmF0b3IsIHdpdGhvdXQgYW55ICdFbmdpbmVGcmFtZScgZnJhbWVzLgotICAg
IGlmICghZnJhbWVQb2ludGVyKQotICAgICAgICByZXR1cm47Ci0KLSAgICB3aGlsZSAoZnJhbWVQ
b2ludGVyKSB7Ci0gICAgICAgIENvZGVUeXBlIHR5cGU7Ci0KLSNpZiBFTkFCTEUoSklUKQotICAg
ICAgICAvLyBEZXRlcm1pbmUgaWYgdGhpcyBzYW1wbGUgZmVsbCBpbiBKSVQgY29kZSwgYW5kIGlm
IHNvLCBmcm9tIHdoaWNoIEpJVCAmIHdoeS4KLSAgICAgICAgdm9pZCogb3duZXJVSUQgPSBDb2Rl
UHJvZmlsaW5nOjpnZXRPd25lclVJREZvclBDKHBjKTsKLQotICAgICAgICBpZiAoIW93bmVyVUlE
KQotICAgICAgICAgICAgdHlwZSA9IEVuZ2luZUZyYW1lOwotICAgICAgICBlbHNlIGlmIChvd25l
clVJRCA9PSBHTE9CQUxfVEhVTktfSUQpCi0gICAgICAgICAgICB0eXBlID0gR2xvYmFsVGh1bms7
Ci0gICAgICAgIGVsc2UgaWYgKG93bmVyVUlEID09IFJFR0VYUF9DT0RFX0lEKQotICAgICAgICAg
ICAgdHlwZSA9IFJlZ0V4cENvZGU7Ci0gICAgICAgIGVsc2UgewotICAgICAgICAgICAgQ29kZUJs
b2NrKiBjb2RlQmxvY2sgPSBzdGF0aWNfY2FzdDxDb2RlQmxvY2sqPihvd25lclVJRCk7Ci0gICAg
ICAgICAgICBpZiAoY29kZUJsb2NrLT5qaXRUeXBlKCkgPT0gSklUVHlwZTo6REZHSklUKQotICAg
ICAgICAgICAgICAgIHR5cGUgPSBERkdKSVQ7Ci0gICAgICAgICAgICBlbHNlIGlmICghY2FuQ29t
cGlsZShjb2RlQmxvY2stPmNhcGFiaWxpdHlMZXZlbFN0YXRlKCkpKQotICAgICAgICAgICAgICAg
IHR5cGUgPSBCYXNlbGluZU9ubHk7Ci0gICAgICAgICAgICBlbHNlIGlmIChjb2RlQmxvY2stPnJl
cGxhY2VtZW50KCkpCi0gICAgICAgICAgICAgICAgdHlwZSA9IEJhc2VsaW5lT1NSOwotICAgICAg
ICAgICAgZWxzZQotICAgICAgICAgICAgICAgIHR5cGUgPSBCYXNlbGluZVByb2ZpbGU7Ci0gICAg
ICAgIH0KLSNlbHNlCi0gICAgICAgIHR5cGUgPSBFbmdpbmVGcmFtZTsKLSNlbmRpZgotCi0gICAg
ICAgIC8vIEEgc2FtcGxlIGluIEpJVCBjb2RlIHRlcm1pbmF0ZXMgdGhlIHRyYWNlLgotICAgICAg
ICBtX3NhbXBsZXMuYXBwZW5kKENvZGVSZWNvcmQocGMsIHR5cGUpKTsKLSAgICAgICAgaWYgKHR5
cGUgIT0gRW5naW5lRnJhbWUpCi0gICAgICAgICAgICByZXR1cm47Ci0KLSNpZiBPUyhEQVJXSU4p
ICYmIENQVShYODZfNjQpCi0gICAgICAgIC8vIFdhbGsgdXAgdGhlIHN0YWNrLgotICAgICAgICBw
YyA9IGZyYW1lUG9pbnRlclsxXTsKLSAgICAgICAgZnJhbWVQb2ludGVyID0gcmVpbnRlcnByZXRf
Y2FzdDx2b2lkKio+KCpmcmFtZVBvaW50ZXIpOwotI2VsaWYgT1MoTElOVVgpICYmIENQVShYODYp
Ci0gICAgICAgIC8vIERvbid0IHVud2luZCB0aGUgc3RhY2sgYXMgc29tZSBkZXBlbmRlbnQgdGhp
cmQgcGFydHkgbGlicmFyaWVzCi0gICAgICAgIC8vIG1heSBiZSBjb21waWxlZCB3aXRoIC1mb21p
dC1mcmFtZS1wb2ludGVyLgotICAgICAgICBmcmFtZVBvaW50ZXIgPSAwOwotI2Vsc2UKLSAgICAg
ICAgLy8gVGhpcyBwbGF0Zm9ybSBpcyBub3QgeWV0IHN1cHBvcnRlZCEKLSAgICAgICAgUkVMRUFT
RV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSNlbmRpZgotICAgIH0KLQotICAgIC8vIElmIHdlIGdl
dCBoZXJlLCB3ZSB3YWxrZWQgdGhlIGVudGlyZSBzdGFjayB3aXRob3V0IGZpbmRpbmcgYW55IGZy
YW1lcyBvZiBKSVQgY29kZS4KLSAgICBtX3NhbXBsZXMuYXBwZW5kKENvZGVSZWNvcmQoMCwgRW5n
aW5lQ29kZSkpOwotfQotCi12b2lkIENvZGVQcm9maWxlOjpyZXBvcnQoKQotewotICAgIGRhdGFM
b2dGKCI8Q29kZVByb2ZpbGluZyAlczolZD5cbiIsIG1fZmlsZS5kYXRhKCksIG1fbGluZU51bWJl
cik7Ci0KLSAgICAvLyBIb3cgbWFueSBmcmFtZXMgb2YgQy1jb2RlIHRvIHByaW50IC0gMCwgaWYg
bm90IHZlcmJvc2UsIDEgaWYgdmVyYm9zZSwgdXAgdG8gMTAyNCBpZiB2ZXJ5IHZlcmJvc2UuCi0g
ICAgdW5zaWduZWQgcmVjdXJzaW9uTGltaXQgPSBDb2RlUHJvZmlsaW5nOjpiZVZlcnlWZXJib3Nl
KCkgPyAxMDI0IDogQ29kZVByb2ZpbGluZzo6YmVWZXJib3NlKCk7Ci0KLSAgICBQcm9maWxlVHJl
ZU5vZGUgcHJvZmlsZTsKLQotICAgIC8vIFdhbGsgdGhyb3VnaCB0aGUgc2FtcGxlIGJ1ZmZlci4K
LSAgICBzaXplX3QgdHJhY2UgPSAwOwotICAgIHdoaWxlICh0cmFjZSA8IG1fc2FtcGxlcy5zaXpl
KCkpIHsKLQotICAgICAgICAvLyBBbGwgdHJhY2VzIGFyZSB6ZXJvIG9yIG1vcmUgJ0VuZ2luZUZy
YW1lJ3MsIGZvbGxvd2VkIGJ5IGEgbm9uLSdFbmdpbmVGcmFtZScuCi0gICAgICAgIC8vIFNjYW4g
dG8gZmluZCB0aGUgbGFzdCBzYW1wbGUgaW4gdGhlIHRyYWNlLgotICAgICAgICBzaXplX3QgbGFz
dEluVHJhY2UgPSB0cmFjZTsKLSAgICAgICAgd2hpbGUgKG1fc2FtcGxlc1tsYXN0SW5UcmFjZV0u
dHlwZSA9PSBFbmdpbmVGcmFtZSkKLSAgICAgICAgICAgICsrbGFzdEluVHJhY2U7Ci0KLSAgICAg
ICAgLy8gV2UgdXNlIHRoZSBsYXN0IHNhbXBsZSB0eXBlIHRvIGxvb2sgdXAgYSBuYW1lICh1c2Vk
IGFzIGEgYnVja2V0IGluIHRoZSBwcm9maWxlcikuCi0gICAgICAgIFByb2ZpbGVUcmVlTm9kZSog
Y2FsbGJhY2tzID0gcHJvZmlsZS5zYW1wbGVDaGlsZChzX2NvZGVUeXBlTmFtZXNbbV9zYW1wbGVz
W2xhc3RJblRyYWNlXS50eXBlXSk7Ci0KLSAgICAgICAgLy8gSWYgdGhlcmUgYXJlIGFueSBzYW1w
bGVzIGluIEMtY29kZSwgYWRkIHVwIHRvIHJlY3Vyc2lvbkxpbWl0IG9mIHRoZW0gaW50byB0aGUg
cHJvZmlsZSB0cmVlLgotICAgICAgICBzaXplX3QgbGFzdEVuZ2luZUZyYW1lID0gbGFzdEluVHJh
Y2U7Ci0gICAgICAgIGZvciAodW5zaWduZWQgY291bnQgPSAwOyBsYXN0RW5naW5lRnJhbWUgPiB0
cmFjZSAmJiBjb3VudCA8IHJlY3Vyc2lvbkxpbWl0OyArK2NvdW50KSB7Ci0gICAgICAgICAgICAt
LWxhc3RFbmdpbmVGcmFtZTsKLSAgICAgICAgICAgIEFTU0VSVChtX3NhbXBsZXNbbGFzdEVuZ2lu
ZUZyYW1lXS50eXBlID09IEVuZ2luZUZyYW1lKTsKLSAgICAgICAgICAgIGNvbnN0IGNoYXIqIG5h
bWUgPSAiPHVua25vd24+IjsKLSAgICAgICAgICAgIGF1dG8gZGVtYW5nbGVkID0gU3RhY2tUcmFj
ZTo6ZGVtYW5nbGUobV9zYW1wbGVzW2xhc3RFbmdpbmVGcmFtZV0ucGMpOwotICAgICAgICAgICAg
aWYgKGRlbWFuZ2xlZCkKLSAgICAgICAgICAgICAgICBuYW1lID0gZGVtYW5nbGVkLT5kZW1hbmds
ZWROYW1lKCkgPyBkZW1hbmdsZWQtPmRlbWFuZ2xlZE5hbWUoKSA6IGRlbWFuZ2xlZC0+bWFuZ2xl
ZE5hbWUoKTsKLSAgICAgICAgICAgIGNhbGxiYWNrcyA9IGNhbGxiYWNrcy0+c2FtcGxlQ2hpbGQo
bmFtZSk7Ci0gICAgICAgICAgICBpZiAodHJ1bmNhdGVUcmFjZShuYW1lKSkKLSAgICAgICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgfQotCi0gICAgICAgIC8vIE1vdmUgb24gdG8gdGhlIG5leHQg
dHJhY2UuCi0gICAgICAgIHRyYWNlID0gbGFzdEluVHJhY2UgKyAxOwotICAgICAgICBBU1NFUlQo
dHJhY2UgPD0gbV9zYW1wbGVzLnNpemUoKSk7Ci0gICAgfQotCi0gICAgLy8gT3V0cHV0IHRoZSBw
cm9maWxlIHRyZWUuCi0gICAgZGF0YUxvZ0YoIlRvdGFsIHNhbXBsZXM6ICVsbGRcbiIsIHN0YXRp
Y19jYXN0PGxvbmcgbG9uZz4ocHJvZmlsZS5jaGlsZENvdW50KCkpKTsKLSAgICBwcm9maWxlLmR1
bXAoKTsKLSAgICAKLSAgICBmb3IgKHNpemVfdCBpID0gMCA7IGkgPCBtX2NoaWxkcmVuLnNpemUo
KTsgKytpKQotICAgICAgICBtX2NoaWxkcmVuW2ldLT5yZXBvcnQoKTsKLQotICAgIGRhdGFMb2dG
KCI8L0NvZGVQcm9maWxpbmcgJXM6JWQ+XG4iLCBtX2ZpbGUuZGF0YSgpLCBtX2xpbmVOdW1iZXIp
OwotfQotCi19CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvdG9vbHMvQ29kZVByb2ZpbGUu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvdG9vbHMvQ29kZVByb2ZpbGUu
aAkocmV2aXNpb24gMjU3ODY2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3Rvb2xzL0NvZGVQ
cm9maWxlLmgJKG5vbmV4aXN0ZW50KQpAQCAtMSw4OSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0
IChDKSAyMDEyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0g
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0g
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBB
TlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
ICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0KLSNwcmFnbWEgb25jZQotCi0jaW5jbHVkZSAi
U291cmNlQ29kZS5oIgotI2luY2x1ZGUgIlRpZXJlZE1NYXBBcnJheS5oIgotI2luY2x1ZGUgPHd0
Zi90ZXh0L0NTdHJpbmcuaD4KLQotbmFtZXNwYWNlIEpTQyB7Ci0KLWNsYXNzIENvZGVQcm9maWxl
IHsKLSAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKLXB1YmxpYzoKLSAgICBDb2RlUHJvZmls
ZShjb25zdCBTb3VyY2VDb2RlJiBzb3VyY2UsIENvZGVQcm9maWxlKiBwYXJlbnQpCi0gICAgICAg
IDogbV9maWxlKFN0cmluZyhzb3VyY2UucHJvdmlkZXIoKS0+dXJsKCkpLnV0ZjgoKSkKLSAgICAg
ICAgLCBtX2xpbmVOdW1iZXIoc291cmNlLmZpcnN0TGluZSgpLm9uZUJhc2VkSW50KCkpCi0gICAg
ICAgICwgbV9wYXJlbnQocGFyZW50KQotICAgIHsKLSAgICAgICAgaWYgKHBhcmVudCkKLSAgICAg
ICAgICAgIHBhcmVudC0+YWRkQ2hpbGQoc3RkOjp1bmlxdWVfcHRyPENvZGVQcm9maWxlPih0aGlz
KSk7Ci0gICAgfQotCi0gICAgdm9pZCBzYW1wbGUodm9pZCogcGMsIHZvaWQqKiBmcmFtZVBvaW50
ZXIpOwotICAgIHZvaWQgcmVwb3J0KCk7Ci0KLSAgICBDb2RlUHJvZmlsZSogcGFyZW50KCkKLSAg
ICB7Ci0gICAgICAgIHJldHVybiBtX3BhcmVudDsKLSAgICB9Ci0gICAgCi0gICAgdm9pZCBhZGRD
aGlsZChzdGQ6OnVuaXF1ZV9wdHI8Q29kZVByb2ZpbGU+IGNoaWxkKQotICAgIHsKLSAgICAgICAg
bV9jaGlsZHJlbi5hcHBlbmQoV1RGTW92ZShjaGlsZCkpOwotICAgIH0KLQotICAgIGVudW0gQ29k
ZVR5cGUgewotICAgICAgICBFbmdpbmVDb2RlLAotICAgICAgICBHbG9iYWxUaHVuaywKLSAgICAg
ICAgUmVnRXhwQ29kZSwKLSAgICAgICAgREZHSklULAotICAgICAgICBCYXNlbGluZU9ubHksCi0g
ICAgICAgIEJhc2VsaW5lUHJvZmlsZSwKLSAgICAgICAgQmFzZWxpbmVPU1IsCi0gICAgICAgIEVu
Z2luZUZyYW1lLAotICAgICAgICBOdW1iZXJPZkNvZGVUeXBlcwotICAgIH07Ci0KLXByaXZhdGU6
Ci0gICAgc3RydWN0IENvZGVSZWNvcmQgewotICAgICAgICBDb2RlUmVjb3JkKHZvaWQqIHBjLCBD
b2RlVHlwZSB0eXBlKQotICAgICAgICAgICAgOiBwYyhwYykKLSAgICAgICAgICAgICwgdHlwZSh0
eXBlKQotICAgICAgICB7Ci0gICAgICAgIH0KLSAgICAgICAgdm9pZCogcGM7Ci0gICAgICAgIENv
ZGVUeXBlIHR5cGU7Ci0gICAgfTsKLQotICAgIENTdHJpbmcgbV9maWxlOwotICAgIHVuc2lnbmVk
IG1fbGluZU51bWJlcjsKLSAgICBDb2RlUHJvZmlsZSogbV9wYXJlbnQ7Ci0gICAgVmVjdG9yPHN0
ZDo6dW5pcXVlX3B0cjxDb2RlUHJvZmlsZT4+IG1fY2hpbGRyZW47Ci0gICAgVGllcmVkTU1hcEFy
cmF5PENvZGVSZWNvcmQ+IG1fc2FtcGxlczsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIEpTQwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL3Rvb2xzL0NvZGVQcm9maWxpbmcuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90b29scy9Db2RlUHJvZmlsaW5nLmNwcAkocmV2
aXNpb24gMjU3ODY2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3Rvb2xzL0NvZGVQcm9maWxp
bmcuY3BwCShub25leGlzdGVudCkKQEAgLTEsMTY5ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTItMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0g
KgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBB
TkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0g
KiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0j
aW5jbHVkZSAiQ29kZVByb2ZpbGluZy5oIgotCi0jaW5jbHVkZSAiQ29kZVByb2ZpbGUuaCIKLSNp
bmNsdWRlICJNYWNoaW5lQ29udGV4dC5oIgotI2luY2x1ZGUgPHd0Zi9NZXRhQWxsb2NhdG9yLmg+
Ci0KLSNpZiBIQVZFKFNJR05BTF9IKQotI2luY2x1ZGUgPHNpZ25hbC5oPgotI2VuZGlmCi0KLSNp
ZiBIQVZFKE1BQ0hJTkVfQ09OVEVYVCkKLSNpbmNsdWRlIDxzeXMvdGltZS5oPgotI2VuZGlmCi0K
LW5hbWVzcGFjZSBKU0MgewotCi12b2xhdGlsZSBDb2RlUHJvZmlsZSogQ29kZVByb2ZpbGluZzo6
c19wcm9maWxlU3RhY2sgPSAwOwotQ29kZVByb2ZpbGluZzo6TW9kZSBDb2RlUHJvZmlsaW5nOjpz
X21vZGUgPSBDb2RlUHJvZmlsaW5nOjpEaXNhYmxlZDsKLVdURjo6TWV0YUFsbG9jYXRvclRyYWNr
ZXIqIENvZGVQcm9maWxpbmc6OnNfdHJhY2tlciA9IDA7Ci0KLUlHTk9SRV9XQVJOSU5HU19CRUdJ
TigibWlzc2luZy1ub3JldHVybiIpCi0KLSNpZiBIQVZFKE1BQ0hJTkVfQ09OVEVYVCkKLS8vIEhl
bHBlciBmdW5jdGlvbiB0byBzdGFydCAmIHN0b3AgdGhlIHRpbWVyLgotLy8gUHJlc2VudGx5IHdl
J3JlIHVzaW5nIHRoZSB3YWxsLWNsb2NrIHRpbWVyLCBzaW5jZSB0aGlzIHNlZW1zIHRvIGdpdmUg
dGhlIGJlc3QgcmVzdWx0cy4KLXN0YXRpYyB2b2lkIHNldFByb2ZpbGVUaW1lcih1bnNpZ25lZCB1
c2VjKQotewotICAgIGl0aW1lcnZhbCB0aW1lcjsKLSAgICB0aW1lci5pdF92YWx1ZS50dl9zZWMg
PSAwOwotICAgIHRpbWVyLml0X3ZhbHVlLnR2X3VzZWMgPSB1c2VjOwotICAgIHRpbWVyLml0X2lu
dGVydmFsLnR2X3NlYyA9IDA7Ci0gICAgdGltZXIuaXRfaW50ZXJ2YWwudHZfdXNlYyA9IHVzZWM7
Ci0gICAgc2V0aXRpbWVyKElUSU1FUl9SRUFMLCAmdGltZXIsIDApOwotfQotI2VuZGlmCi0KLUlH
Tk9SRV9XQVJOSU5HU19FTkQKLQotI2lmIEhBVkUoTUFDSElORV9DT05URVhUKQotc3RhdGljIHZv
aWQgcHJvZmlsaW5nVGltZXIoaW50LCBzaWdpbmZvX3QqLCB2b2lkKiB1YXApCi17Ci0gICAgUGxh
dGZvcm1SZWdpc3RlcnMmIHBsYXRmb3JtUmVnaXN0ZXJzID0gV1RGOjpyZWdpc3RlcnNGcm9tVUNv
bnRleHQoc3RhdGljX2Nhc3Q8dWNvbnRleHRfdCo+KHVhcCkpOwotICAgIGlmIChhdXRvIGluc3Ry
dWN0aW9uUG9pbnRlciA9IE1hY2hpbmVDb250ZXh0OjppbnN0cnVjdGlvblBvaW50ZXIocGxhdGZv
cm1SZWdpc3RlcnMpKSB7Ci0gICAgICAgIENvZGVQcm9maWxpbmc6OnNhbXBsZSgKLSAgICAgICAg
ICAgIGluc3RydWN0aW9uUG9pbnRlci0+dW50YWdnZWRFeGVjdXRhYmxlQWRkcmVzcygpLAotICAg
ICAgICAgICAgcmVpbnRlcnByZXRfY2FzdDx2b2lkKio+KE1hY2hpbmVDb250ZXh0OjpmcmFtZVBv
aW50ZXIocGxhdGZvcm1SZWdpc3RlcnMpKSk7Ci0gICAgfQotfQotI2VuZGlmCi0KLS8vIENhbGxi
YWNrIHRyaWdnZXJlZCB3aGVuIHRoZSB0aW1lciBpcyBmaXJlZC4KLXZvaWQgQ29kZVByb2ZpbGlu
Zzo6c2FtcGxlKHZvaWQqIHBjLCB2b2lkKiogZnJhbWVQb2ludGVyKQotewotICAgIENvZGVQcm9m
aWxlKiBwcm9maWxlU3RhY2sgPSBjb25zdF9jYXN0PENvZGVQcm9maWxlKj4oc19wcm9maWxlU3Rh
Y2spOwotICAgIGlmIChwcm9maWxlU3RhY2spCi0gICAgICAgIHByb2ZpbGVTdGFjay0+c2FtcGxl
KHBjLCBmcmFtZVBvaW50ZXIpOwotfQotCi12b2lkIENvZGVQcm9maWxpbmc6Om5vdGlmeUFsbG9j
YXRvcihXVEY6Ok1ldGFBbGxvY2F0b3IqIGFsbG9jYXRvcikKLXsKLSAgICAvLyBDaGVjayBmb3Ig
SlNDX0NPREVfUFJPRklMSU5HLgotICAgIGNvbnN0IGNoYXIqIGNvZGVQcm9maWxpbmdNb2RlID0g
Z2V0ZW52KCJKU0NfQ09ERV9QUk9GSUxJTkciKTsKLSAgICBpZiAoIWNvZGVQcm9maWxpbmdNb2Rl
KQotICAgICAgICByZXR1cm47Ci0KLSAgICAvLyBDaGVjayBmb3IgYSB2YWxpZCBtb2RlLCBjdXJy
ZW50bHkgIjEiLCAiMiIsIG9yICIzIi4KLSAgICBpZiAoIWNvZGVQcm9maWxpbmdNb2RlWzBdIHx8
IGNvZGVQcm9maWxpbmdNb2RlWzFdKQotICAgICAgICByZXR1cm47Ci0gICAgc3dpdGNoICgqY29k
ZVByb2ZpbGluZ01vZGUpIHsKLSAgICBjYXNlICcxJzoKLSAgICAgICAgc19tb2RlID0gRW5hYmxl
ZDsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSAnMic6Ci0gICAgICAgIHNfbW9kZSA9IFZlcmJv
c2U7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgJzMnOgotICAgICAgICBzX21vZGUgPSBWZXJ5
VmVyYm9zZTsKLSAgICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgcmV0dXJuOwot
ICAgIH0KLQotICAgIEFTU0VSVChlbmFibGVkKCkpOwotICAgIEFTU0VSVCghc190cmFja2VyKTsK
LSAgICBzX3RyYWNrZXIgPSBuZXcgV1RGOjpNZXRhQWxsb2NhdG9yVHJhY2tlcigpOwotICAgIGFs
bG9jYXRvci0+dHJhY2tBbGxvY2F0aW9ucyhzX3RyYWNrZXIpOwotfQotCi12b2lkKiBDb2RlUHJv
ZmlsaW5nOjpnZXRPd25lclVJREZvclBDKHZvaWQqIGFkZHJlc3MpCi17Ci0gICAgaWYgKCFzX3Ry
YWNrZXIpCi0gICAgICAgIHJldHVybiAwOwotICAgIFdURjo6TWV0YUFsbG9jYXRvckhhbmRsZSog
aGFuZGxlID0gc190cmFja2VyLT5maW5kKGFkZHJlc3MpOwotICAgIGlmICghaGFuZGxlKQotICAg
ICAgICByZXR1cm4gMDsKLSAgICByZXR1cm4gaGFuZGxlLT5vd25lclVJRCgpOwotfQotCi12b2lk
IENvZGVQcm9maWxpbmc6OmJlZ2luKGNvbnN0IFNvdXJjZUNvZGUmIHNvdXJjZSkKLXsKLSAgICAv
LyBQdXNoIGEgbmV3IENvZGVQcm9maWxlIG9udG8gdGhlIHN0YWNrIGZvciBlYWNoIHNjcmlwdCBl
bmNvdW50ZXJlZC4KLSAgICBDb2RlUHJvZmlsZSogcHJvZmlsZVN0YWNrID0gY29uc3RfY2FzdDxD
b2RlUHJvZmlsZSo+KHNfcHJvZmlsZVN0YWNrKTsKLSAgICBib29sIGFscmVhZHlQcm9maWxpbmcg
PSBwcm9maWxlU3RhY2s7Ci0gICAgc19wcm9maWxlU3RhY2sgPSBwcm9maWxlU3RhY2sgPSBuZXcg
Q29kZVByb2ZpbGUoc291cmNlLCBwcm9maWxlU3RhY2spOwotCi0gICAgLy8gSXMgdGhlIHByb2Zp
bGVyIGFscmVhZHkgcnVubmluZyAtIGlmIHNvLCB0aGUgdGltZXIgd2lsbCBhbHJlYWR5IGJlIHNl
dCB1cC4KLSAgICBpZiAoYWxyZWFkeVByb2ZpbGluZykKLSAgICAgICAgcmV0dXJuOwotCi0jaWYg
SEFWRShNQUNISU5FX0NPTlRFWFQpCi0gICAgLy8gUmVnc2l0ZXIgYSBzaWduYWwgaGFuZGxlciAm
IGl0aW1lci4KLSAgICBzdHJ1Y3Qgc2lnYWN0aW9uIGFjdGlvbjsKLSAgICBhY3Rpb24uc2Ffc2ln
YWN0aW9uID0gcmVpbnRlcnByZXRfY2FzdDx2b2lkICgqKShpbnQsIHNpZ2luZm9fdCAqLCB2b2lk
ICopPihwcm9maWxpbmdUaW1lcik7Ci0gICAgc2lnZmlsbHNldCgmYWN0aW9uLnNhX21hc2spOwot
ICAgIGFjdGlvbi5zYV9mbGFncyA9IFNBX1NJR0lORk87Ci0gICAgc2lnYWN0aW9uKFNJR0FMUk0s
ICZhY3Rpb24sIDApOwotICAgIHNldFByb2ZpbGVUaW1lcigxMDApOwotI2VuZGlmCi19Ci0KLXZv
aWQgQ29kZVByb2ZpbGluZzo6ZW5kKCkKLXsKLSAgICAvLyBQb3AgdGhlIGN1cnJlbnQgcHJvZmls
ZXIgb2ZmIHRoZSBzdGFjay4KLSAgICBDb2RlUHJvZmlsZSogY3VycmVudCA9IGNvbnN0X2Nhc3Q8
Q29kZVByb2ZpbGUqPihzX3Byb2ZpbGVTdGFjayk7Ci0gICAgQVNTRVJUKGN1cnJlbnQpOwotICAg
IHNfcHJvZmlsZVN0YWNrID0gY3VycmVudC0+cGFyZW50KCk7Ci0KLSAgICAvLyBJcyB0aGlzIHRo
ZSBvdXRlcm1vc3Qgc2NyaXB0IGJlaW5nIHByb2ZpbGVkPyAtIGlmIG5vdCwganVzdCByZXR1cm4u
Ci0gICAgLy8gV2UgcGVyZm9ybSBhbGwgb3V0cHV0IG9mIHByb2ZpbGVzIHJlY3Vyc2l2ZWx5IGZy
b20gdGhlIG91dGVybW9zdCBzY3JpcHQsCi0gICAgLy8gdG8gbWluaW1pemUgcHJvZmlsaW5nIG92
ZXJoZWFkIGZyb20gc2tld2luZyByZXN1bHRzLgotICAgIGlmIChzX3Byb2ZpbGVTdGFjaykKLSAg
ICAgICAgcmV0dXJuOwotCi0jaWYgSEFWRShNQUNISU5FX0NPTlRFWFQpCi0gICAgLy8gU3RvcCBw
cm9maWxpbmcKLSAgICBzZXRQcm9maWxlVGltZXIoMCk7Ci0jZW5kaWYKLQotICAgIGN1cnJlbnQt
PnJlcG9ydCgpOwotICAgIGRlbGV0ZSBjdXJyZW50OwotfQotCi19CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvdG9vbHMvQ29kZVByb2ZpbGluZy5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS90b29scy9Db2RlUHJvZmlsaW5nLmgJKHJldmlzaW9uIDI1Nzg2NikKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90b29scy9Db2RlUHJvZmlsaW5nLmgJKG5vbmV4aXN0ZW50
KQpAQCAtMSw4MSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEyIEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICog
YXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
IAotICovCi0KLSNwcmFnbWEgb25jZQotCi1uYW1lc3BhY2UgV1RGIHsKLQotY2xhc3MgTWV0YUFs
bG9jYXRvcjsKLWNsYXNzIE1ldGFBbGxvY2F0b3JUcmFja2VyOwotCi19Ci0KLW5hbWVzcGFjZSBK
U0MgewotCi1jbGFzcyBDb2RlUHJvZmlsZTsKLWNsYXNzIFNvdXJjZUNvZGU7Ci0KLWNsYXNzIENv
ZGVQcm9maWxpbmcgewotICAgIGVudW0gTW9kZSB7Ci0gICAgICAgIERpc2FibGVkLAotICAgICAg
ICBFbmFibGVkLAotICAgICAgICBWZXJib3NlLAotICAgICAgICBWZXJ5VmVyYm9zZQotICAgIH07
Ci0KLXB1YmxpYzoKLSAgICBDb2RlUHJvZmlsaW5nKGNvbnN0IFNvdXJjZUNvZGUmIHNvdXJjZSkK
LSAgICAgICAgOiBtX2FjdGl2ZShlbmFibGVkKCkpCi0gICAgewotICAgICAgICBpZiAobV9hY3Rp
dmUpCi0gICAgICAgICAgICBiZWdpbihzb3VyY2UpOwotICAgIH0KLQotICAgIH5Db2RlUHJvZmls
aW5nKCkKLSAgICB7Ci0gICAgICAgIGlmIChtX2FjdGl2ZSkKLSAgICAgICAgICAgIGVuZCgpOwot
ICAgIH0KLQotICAgIHN0YXRpYyBib29sIGVuYWJsZWQoKSB7IHJldHVybiBzX21vZGUgIT0gRGlz
YWJsZWQ7IH0KLSAgICBzdGF0aWMgYm9vbCBiZVZlcmJvc2UoKSB7IHJldHVybiBzX21vZGUgPj0g
VmVyYm9zZTsgfQotICAgIHN0YXRpYyBib29sIGJlVmVyeVZlcmJvc2UoKSB7IHJldHVybiBzX21v
ZGUgPj0gVmVyeVZlcmJvc2U7IH0KLQotICAgIHN0YXRpYyB2b2lkIG5vdGlmeUFsbG9jYXRvcihX
VEY6Ok1ldGFBbGxvY2F0b3IqKTsKLSAgICBzdGF0aWMgdm9pZCogZ2V0T3duZXJVSURGb3JQQyh2
b2lkKik7Ci0gICAgc3RhdGljIHZvaWQgc2FtcGxlKHZvaWQqIHBjLCB2b2lkKiogZnJhbWVQb2lu
dGVyKTsKLQotcHJpdmF0ZToKLSAgICB2b2lkIGJlZ2luKGNvbnN0IFNvdXJjZUNvZGUmKTsKLSAg
ICB2b2lkIGVuZCgpOwotCi0gICAgYm9vbCBtX2FjdGl2ZTsKLQotICAgIHN0YXRpYyBNb2RlIHNf
bW9kZTsKLSAgICBzdGF0aWMgV1RGOjpNZXRhQWxsb2NhdG9yVHJhY2tlciogc190cmFja2VyOwot
ICAgIHN0YXRpYyB2b2xhdGlsZSBDb2RlUHJvZmlsZSogc19wcm9maWxlU3RhY2s7Ci19OwotCi19
IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21C
QlFQbGFuLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNt
QkJRUGxhbi5jcHAJKHJldmlzaW9uIDI1Nzg2NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93
YXNtL1dhc21CQlFQbGFuLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTMyLDEzICsxMzIsOSBAQCB2
b2lkIEJCUVBsYW46OndvcmsoQ29tcGlsYXRpb25FZmZvcnQgZWZmCiAgICAgICAgIC8vIHdpbGwg
dXBkYXRlLiBJdCdzIGFsc28gb2sgaWYgdGhleSBwdWJsaXNoIHRoZWlyIGNvZGUgYmVmb3JlIHdl
IHJlc2V0IHRoZSBpbnN0cnVjdGlvbiBjYWNoZXMgYmVjYXVzZSBhZnRlciB3ZSByZWxlYXNlCiAg
ICAgICAgIC8vIHRoZSBsb2NrIG91ciBjb2RlIGlzIHJlYWR5IHRvIGJlIHB1Ymxpc2hlZCB0b28u
CiAgICAgICAgIExvY2tIb2xkZXIgaG9sZGVyKG1fY29kZUJsb2NrLT5tX2xvY2spOworCiAgICAg
ICAgIG1fY29kZUJsb2NrLT5tX2JicUNhbGxlZXNbbV9mdW5jdGlvbkluZGV4XSA9IGNhbGxlZS5j
b3B5UmVmKCk7Ci0gICAgICAgIHsKLSAgICAgICAgICAgIExMSW50Q2FsbGVlJiBsbGludENhbGxl
ZSA9IG1fY29kZUJsb2NrLT5tX2xsaW50Q2FsbGVlcy0+YXQobV9mdW5jdGlvbkluZGV4KS5nZXQo
KTsKLSAgICAgICAgICAgIGF1dG8gbG9ja2VyID0gaG9sZExvY2sobGxpbnRDYWxsZWUudGllclVw
Q291bnRlcigpLm1fbG9jayk7Ci0gICAgICAgICAgICBsbGludENhbGxlZS5zZXRSZXBsYWNlbWVu
dChjYWxsZWUuY29weVJlZigpKTsKLSAgICAgICAgICAgIGxsaW50Q2FsbGVlLnRpZXJVcENvdW50
ZXIoKS5tX2NvbXBpbGF0aW9uU3RhdHVzID0gTExJbnRUaWVyVXBDb3VudGVyOjpDb21waWxhdGlv
blN0YXR1czo6Q29tcGlsZWQ7Ci0gICAgICAgIH0KKwogICAgICAgICBmb3IgKGF1dG8mIGNhbGwg
OiBjYWxsZWUtPndhc21Ub1dhc21DYWxsc2l0ZXMoKSkgewogICAgICAgICAgICAgTWFjcm9Bc3Nl
bWJsZXJDb2RlUHRyPFdhc21FbnRyeVB0clRhZz4gZW50cnlwb2ludDsKICAgICAgICAgICAgIGlm
IChjYWxsLmZ1bmN0aW9uSW5kZXhTcGFjZSA8IG1fbW9kdWxlSW5mb3JtYXRpb24tPmltcG9ydEZ1
bmN0aW9uQ291bnQoKSkKQEAgLTE0OCwyNCArMTQ0LDQ4IEBAIHZvaWQgQkJRUGxhbjo6d29yayhD
b21waWxhdGlvbkVmZm9ydCBlZmYKIAogICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OnJlcGF0
Y2hOZWFyQ2FsbChjYWxsLmNhbGxMb2NhdGlvbiwgQ29kZUxvY2F0aW9uTGFiZWw8V2FzbUVudHJ5
UHRyVGFnPihlbnRyeXBvaW50KSk7CiAgICAgICAgIH0KLSAgICB9CiAKLSAgICAvLyBJdCdzIGlt
cG9ydGFudCB0byBtYWtlIHN1cmUgd2UgZG8gdGhpcyBiZWZvcmUgd2UgbWFrZSBhbnkgb2YgdGhl
IGNvZGUgd2UganVzdCBjb21waWxlZCB2aXNpYmxlLiBJZiB3ZSBkaWRuJ3QsIHdlIGNvdWxkIGVu
ZCB1cAotICAgIC8vIHdoZXJlIHdlIGFyZSB0aWVyaW5nIHVwIHNvbWUgZnVuY3Rpb24gQSB0byBB
JyBhbmQgd2UgcmVwYXRjaCBzb21lIGZ1bmN0aW9uIEIgdG8gY2FsbCBBJyBpbnN0ZWFkIG9mIEEu
IEFub3RoZXIgQ1BVIGNvdWxkIHNlZQotICAgIC8vIHRoZSB1cGRhdGVzIHRvIEIgYnV0IHN0aWxs
IG5vdCBoYXZlIHJlc2V0IGl0cyBjYWNoZSBvZiBBJywgd2hpY2ggd291bGQgbGVhZCB0byBhbGwg
a2luZHMgb2YgYmFkbmVzcy4KLSAgICByZXNldEluc3RydWN0aW9uQ2FjaGVPbkFsbFRocmVhZHMo
KTsKLSAgICBXVEY6OnN0b3JlU3RvcmVGZW5jZSgpOyAvLyBUaGlzIHByb2JhYmx5IGlzbid0IG5l
Y2Vzc2FyeSBidXQgaXQncyBnb29kIHRvIGJlIHBhcmFub2lkLgorICAgICAgICBIYXNoTWFwPHZv
aWQqLCBDb2RlTG9jYXRpb25MYWJlbDxXYXNtRW50cnlQdHJUYWc+PiBzdGFnZWRDYWxsczsKKyAg
ICAgICAgYXV0byBzdGFnZVJlcGF0Y2ggPSBbJl0gKGNvbnN0IFZlY3RvcjxVbmxpbmtlZFdhc21U
b1dhc21DYWxsPiYgY2FsbHNpdGVzKSB7CisgICAgICAgICAgICBmb3IgKGF1dG8mIGNhbGwgOiBj
YWxsc2l0ZXMpIHsKKyAgICAgICAgICAgICAgICBpZiAoY2FsbC5mdW5jdGlvbkluZGV4U3BhY2Ug
PT0gZnVuY3Rpb25JbmRleFNwYWNlKSB7CisgICAgICAgICAgICAgICAgICAgIENvZGVMb2NhdGlv
bkxhYmVsPFdhc21FbnRyeVB0clRhZz4gdGFyZ2V0ID0gTWFjcm9Bc3NlbWJsZXI6OnByZXBhcmVG
b3JBdG9taWNSZXBhdGNoTmVhckNhbGxDb25jdXJyZW50bHkoY2FsbC5jYWxsTG9jYXRpb24sIENv
ZGVMb2NhdGlvbkxhYmVsPFdhc21FbnRyeVB0clRhZz4oZW50cnlwb2ludCkpOworICAgICAgICAg
ICAgICAgICAgICBzdGFnZWRDYWxscy5hZGQoY2FsbC5jYWxsTG9jYXRpb24uZGF0YUxvY2F0aW9u
KCksIHRhcmdldCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9
OwogCi0gICAgbV9jb2RlQmxvY2stPm1fd2FzbUluZGlyZWN0Q2FsbEVudHJ5UG9pbnRzW21fZnVu
Y3Rpb25JbmRleF0gPSBlbnRyeXBvaW50OwotICAgIHsKLSAgICAgICAgTG9ja0hvbGRlciBob2xk
ZXIobV9jb2RlQmxvY2stPm1fbG9jayk7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkg
PCBtX2NvZGVCbG9jay0+bV93YXNtVG9XYXNtQ2FsbHNpdGVzLnNpemUoKTsgKytpKSB7CisgICAg
ICAgICAgICBzdGFnZVJlcGF0Y2gobV9jb2RlQmxvY2stPm1fd2FzbVRvV2FzbUNhbGxzaXRlc1tp
XSk7CisgICAgICAgICAgICBpZiAobV9jb2RlQmxvY2stPm1fbGxpbnRDYWxsZWVzKSB7CisgICAg
ICAgICAgICAgICAgTExJbnRDYWxsZWUmIGxsaW50Q2FsbGVlID0gbV9jb2RlQmxvY2stPm1fbGxp
bnRDYWxsZWVzLT5hdChpKS5nZXQoKTsKKyAgICAgICAgICAgICAgICBpZiAoSklUQ2FsbGVlKiBy
ZXBsYWNlbWVudENhbGxlZSA9IGxsaW50Q2FsbGVlLnJlcGxhY2VtZW50KCkpCisgICAgICAgICAg
ICAgICAgICAgIHN0YWdlUmVwYXRjaChyZXBsYWNlbWVudENhbGxlZS0+d2FzbVRvV2FzbUNhbGxz
aXRlcygpKTsKKyAgICAgICAgICAgICAgICBpZiAoT01HRm9yT1NSRW50cnlDYWxsZWUqIG9zckVu
dHJ5Q2FsbGVlID0gbGxpbnRDYWxsZWUub3NyRW50cnlDYWxsZWUoKSkKKyAgICAgICAgICAgICAg
ICAgICAgc3RhZ2VSZXBhdGNoKG9zckVudHJ5Q2FsbGVlLT53YXNtVG9XYXNtQ2FsbHNpdGVzKCkp
OworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKEJCUUNhbGxlZSogYmJxQ2FsbGVlID0g
bV9jb2RlQmxvY2stPm1fYmJxQ2FsbGVlc1tpXS5nZXQoKSkgeworICAgICAgICAgICAgICAgIGlm
IChPTUdDYWxsZWUqIHJlcGxhY2VtZW50Q2FsbGVlID0gYmJxQ2FsbGVlLT5yZXBsYWNlbWVudCgp
KQorICAgICAgICAgICAgICAgICAgICBzdGFnZVJlcGF0Y2gocmVwbGFjZW1lbnRDYWxsZWUtPndh
c21Ub1dhc21DYWxsc2l0ZXMoKSk7CisgICAgICAgICAgICAgICAgaWYgKE9NR0Zvck9TUkVudHJ5
Q2FsbGVlKiBvc3JFbnRyeUNhbGxlZSA9IGJicUNhbGxlZS0+b3NyRW50cnlDYWxsZWUoKSkKKyAg
ICAgICAgICAgICAgICAgICAgc3RhZ2VSZXBhdGNoKG9zckVudHJ5Q2FsbGVlLT53YXNtVG9XYXNt
Q2FsbHNpdGVzKCkpOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgLy8gSXQn
cyBpbXBvcnRhbnQgdG8gbWFrZSBzdXJlIHdlIGRvIHRoaXMgYmVmb3JlIHdlIG1ha2UgYW55IG9m
IHRoZSBjb2RlIHdlIGp1c3QgY29tcGlsZWQgdmlzaWJsZS4gSWYgd2UgZGlkbid0LCB3ZSBjb3Vs
ZCBlbmQgdXAKKyAgICAgICAgLy8gd2hlcmUgd2UgYXJlIHRpZXJpbmcgdXAgc29tZSBmdW5jdGlv
biBBIHRvIEEnIGFuZCB3ZSByZXBhdGNoIHNvbWUgZnVuY3Rpb24gQiB0byBjYWxsIEEnIGluc3Rl
YWQgb2YgQS4gQW5vdGhlciBDUFUgY291bGQgc2VlCisgICAgICAgIC8vIHRoZSB1cGRhdGVzIHRv
IEIgYnV0IHN0aWxsIG5vdCBoYXZlIHJlc2V0IGl0cyBjYWNoZSBvZiBBJywgd2hpY2ggd291bGQg
bGVhZCB0byBhbGwga2luZHMgb2YgYmFkbmVzcy4KKyAgICAgICAgcmVzZXRJbnN0cnVjdGlvbkNh
Y2hlT25BbGxUaHJlYWRzKCk7CisgICAgICAgIFdURjo6c3RvcmVTdG9yZUZlbmNlKCk7IC8vIFRo
aXMgcHJvYmFibHkgaXNuJ3QgbmVjZXNzYXJ5IGJ1dCBpdCdzIGdvb2QgdG8gYmUgcGFyYW5vaWQu
CisKKyAgICAgICAgbV9jb2RlQmxvY2stPm1fd2FzbUluZGlyZWN0Q2FsbEVudHJ5UG9pbnRzW21f
ZnVuY3Rpb25JbmRleF0gPSBlbnRyeXBvaW50OwogCiAgICAgICAgIGF1dG8gcmVwYXRjaENhbGxz
ID0gWyZdIChjb25zdCBWZWN0b3I8VW5saW5rZWRXYXNtVG9XYXNtQ2FsbD4mIGNhbGxzaXRlcykg
ewogICAgICAgICAgICAgZm9yIChhdXRvJiBjYWxsIDogY2FsbHNpdGVzKSB7CiAgICAgICAgICAg
ICAgICAgZGF0YUxvZ0xuSWYoV2FzbUJCUVBsYW5JbnRlcm5hbDo6dmVyYm9zZSwgIkNvbnNpZGVy
aW5nIHJlcGF0Y2hpbmcgY2FsbCBhdDogIiwgUmF3UG9pbnRlcihjYWxsLmNhbGxMb2NhdGlvbi5k
YXRhTG9jYXRpb24oKSksICIgdGhhdCB0YXJnZXRzICIsIGNhbGwuZnVuY3Rpb25JbmRleFNwYWNl
KTsKICAgICAgICAgICAgICAgICBpZiAoY2FsbC5mdW5jdGlvbkluZGV4U3BhY2UgPT0gZnVuY3Rp
b25JbmRleFNwYWNlKSB7CiAgICAgICAgICAgICAgICAgICAgIGRhdGFMb2dMbklmKFdhc21CQlFQ
bGFuSW50ZXJuYWw6OnZlcmJvc2UsICJSZXBhdGNoaW5nIGNhbGwgYXQ6ICIsIFJhd1BvaW50ZXIo
Y2FsbC5jYWxsTG9jYXRpb24uZGF0YUxvY2F0aW9uKCkpLCAiIHRvICIsIFJhd1BvaW50ZXIoZW50
cnlwb2ludC5leGVjdXRhYmxlQWRkcmVzcygpKSk7Ci0gICAgICAgICAgICAgICAgICAgIE1hY3Jv
QXNzZW1ibGVyOjpyZXBhdGNoTmVhckNhbGwoY2FsbC5jYWxsTG9jYXRpb24sIENvZGVMb2NhdGlv
bkxhYmVsPFdhc21FbnRyeVB0clRhZz4oZW50cnlwb2ludCkpOworICAgICAgICAgICAgICAgICAg
ICBNYWNyb0Fzc2VtYmxlcjo6cmVwYXRjaE5lYXJDYWxsKGNhbGwuY2FsbExvY2F0aW9uLCBzdGFn
ZWRDYWxscy5nZXQoY2FsbC5jYWxsTG9jYXRpb24uZGF0YUxvY2F0aW9uKCkpKTsKICAgICAgICAg
ICAgICAgICB9CiAgICAgICAgICAgICB9CiAgICAgICAgIH07CkBAIC0xODYsMTEgKzIwNiwxNyBA
QCB2b2lkIEJCUVBsYW46OndvcmsoQ29tcGlsYXRpb25FZmZvcnQgZWZmCiAgICAgICAgICAgICAg
ICAgICAgIHJlcGF0Y2hDYWxscyhvc3JFbnRyeUNhbGxlZS0+d2FzbVRvV2FzbUNhbGxzaXRlcygp
KTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQorCisgICAgICAgIHsKKyAgICAgICAgICAgIExM
SW50Q2FsbGVlJiBsbGludENhbGxlZSA9IG1fY29kZUJsb2NrLT5tX2xsaW50Q2FsbGVlcy0+YXQo
bV9mdW5jdGlvbkluZGV4KS5nZXQoKTsKKyAgICAgICAgICAgIGF1dG8gbG9ja2VyID0gaG9sZExv
Y2sobGxpbnRDYWxsZWUudGllclVwQ291bnRlcigpLm1fbG9jayk7CisgICAgICAgICAgICBsbGlu
dENhbGxlZS5zZXRSZXBsYWNlbWVudChjYWxsZWUuY29weVJlZigpKTsKKyAgICAgICAgICAgIGxs
aW50Q2FsbGVlLnRpZXJVcENvdW50ZXIoKS5tX2NvbXBpbGF0aW9uU3RhdHVzID0gTExJbnRUaWVy
VXBDb3VudGVyOjpDb21waWxhdGlvblN0YXR1czo6Q29tcGlsZWQ7CisgICAgICAgIH0KICAgICB9
CiAKICAgICBkYXRhTG9nTG5JZihXYXNtQkJRUGxhbkludGVybmFsOjp2ZXJib3NlLCAiRmluaXNo
ZWQgQkJRICIsIG1fZnVuY3Rpb25JbmRleCk7CiAKLQogICAgIGF1dG8gbG9ja2VyID0gaG9sZExv
Y2sobV9sb2NrKTsKICAgICBtb3ZlVG9TdGF0ZShTdGF0ZTo6Q29tcGxldGVkKTsKICAgICBydW5D
b21wbGV0aW9uVGFza3MobG9ja2VyKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNt
L1dhc21PTUdGb3JPU1JFbnRyeVBsYW4uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS93YXNtL1dhc21PTUdGb3JPU1JFbnRyeVBsYW4uY3BwCShyZXZpc2lvbiAyNTc4NjYp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtT01HRm9yT1NSRW50cnlQbGFuLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMTAzLDEyICsxMDMsMTAgQEAgdm9pZCBPTUdGb3JPU1JFbnRy
eVBsYW46OndvcmsoQ29tcGlsYXRpbwogCiAgICAgb21nRW50cnlwb2ludC5jYWxsZWVTYXZlUmVn
aXN0ZXJzID0gV1RGTW92ZShwYXJzZUFuZENvbXBpbGVSZXN1bHQudmFsdWUoKS0+ZW50cnlwb2lu
dC5jYWxsZWVTYXZlUmVnaXN0ZXJzKTsKIAotICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxXYXNt
RW50cnlQdHJUYWc+IGVudHJ5cG9pbnQ7CiAgICAgQVNTRVJUKG1fY29kZUJsb2NrLnB0cigpID09
IG1fbW9kdWxlLT5jb2RlQmxvY2tGb3IobW9kZSgpKSk7CiAgICAgUmVmPE9NR0Zvck9TUkVudHJ5
Q2FsbGVlPiBjYWxsZWUgPSBPTUdGb3JPU1JFbnRyeUNhbGxlZTo6Y3JlYXRlKFdURk1vdmUob21n
RW50cnlwb2ludCksIGZ1bmN0aW9uSW5kZXhTcGFjZSwgbV9tb2R1bGVJbmZvcm1hdGlvbi0+bmFt
ZVNlY3Rpb24tPmdldChmdW5jdGlvbkluZGV4U3BhY2UpLCBvc3JFbnRyeVNjcmF0Y2hCdWZmZXJT
aXplLCBtX2xvb3BJbmRleCwgV1RGTW92ZSh1bmxpbmtlZENhbGxzKSk7CiAgICAgewogICAgICAg
ICBNYWNyb0Fzc2VtYmxlcjo6cmVwYXRjaFBvaW50ZXIocGFyc2VBbmRDb21waWxlUmVzdWx0LnZh
bHVlKCktPmNhbGxlZU1vdmVMb2NhdGlvbiwgQ2FsbGVlQml0czo6Ym94V2FzbShjYWxsZWUucHRy
KCkpKTsKLSAgICAgICAgZW50cnlwb2ludCA9IGNhbGxlZS0+ZW50cnlwb2ludCgpOwogCiAgICAg
ICAgIGF1dG8gbG9ja2VyID0gaG9sZExvY2sobV9jb2RlQmxvY2stPm1fbG9jayk7CiAgICAgICAg
IGZvciAoYXV0byYgY2FsbCA6IGNhbGxlZS0+d2FzbVRvV2FzbUNhbGxzaXRlcygpKSB7CkBAIC0x
MjAsMTEgKzExOCwxMCBAQCB2b2lkIE9NR0Zvck9TUkVudHJ5UGxhbjo6d29yayhDb21waWxhdGlv
CiAKICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpyZXBhdGNoTmVhckNhbGwoY2FsbC5jYWxs
TG9jYXRpb24sIENvZGVMb2NhdGlvbkxhYmVsPFdhc21FbnRyeVB0clRhZz4oZW50cnlwb2ludCkp
OwogICAgICAgICB9Ci0gICAgfQotICAgIHJlc2V0SW5zdHJ1Y3Rpb25DYWNoZU9uQWxsVGhyZWFk
cygpOwotICAgIFdURjo6c3RvcmVTdG9yZUZlbmNlKCk7Ci0gICAgewotICAgICAgICBhdXRvIGxv
Y2tlciA9IGhvbGRMb2NrKG1fY29kZUJsb2NrLT5tX2xvY2spOworCisgICAgICAgIHJlc2V0SW5z
dHJ1Y3Rpb25DYWNoZU9uQWxsVGhyZWFkcygpOworICAgICAgICBXVEY6OnN0b3JlU3RvcmVGZW5j
ZSgpOworCiAgICAgICAgIHsKICAgICAgICAgICAgIHN3aXRjaCAobV9jYWxsZWUtPmNvbXBpbGF0
aW9uTW9kZSgpKSB7CiAgICAgICAgICAgICBjYXNlIENvbXBpbGF0aW9uTW9kZTo6TExJbnRNb2Rl
OiB7CkBAIC0xNDYsMTkgKzE0Myw2IEBAIHZvaWQgT01HRm9yT1NSRW50cnlQbGFuOjp3b3JrKENv
bXBpbGF0aW8KICAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwog
ICAgICAgICAgICAgfQogICAgICAgICB9Ci0gICAgICAgIFdURjo6c3RvcmVTdG9yZUZlbmNlKCk7
Ci0gICAgICAgIC8vIEl0IGlzIHBvc3NpYmxlIHRoYXQgYSBuZXcgT01HIGNhbGxlZSBpcyBhZGRl
ZCB3aGlsZSB3ZSByZWxlYXNlIG1fY29kZUJsb2NrLT5sb2NrLgotICAgICAgICAvLyBVbnRpbCB3
ZSBhZGQgT01HRm9yT1NSRW50cnkgY2FsbGVlIHRvIEJCUUNhbGxlZSdzIG1fb3NyRW50cnlDYWxs
ZWUsIHRoaXMgbmV3IE9NRyBmdW5jdGlvbiBsaW5raW5nIGRvZXMgbm90IGhhcHBlbiBmb3IgdGhp
cyBPTUdGb3JPU1JFbnRyeSBjYWxsZWUuCi0gICAgICAgIC8vIFdlIHJlLWxpbmsgdGhpcyBPTUdG
b3JPU1JFbnRyeSBjYWxsZWUgYWdhaW4gbm90IHRvIG1pc3MgdGhhdCBjaGFuY2UuCi0gICAgICAg
IGZvciAoYXV0byYgY2FsbCA6IGNhbGxlZS0+d2FzbVRvV2FzbUNhbGxzaXRlcygpKSB7Ci0gICAg
ICAgICAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8V2FzbUVudHJ5UHRyVGFnPiBlbnRyeXBvaW50
OwotICAgICAgICAgICAgaWYgKGNhbGwuZnVuY3Rpb25JbmRleFNwYWNlIDwgbV9tb2R1bGUtPm1v
ZHVsZUluZm9ybWF0aW9uKCkuaW1wb3J0RnVuY3Rpb25Db3VudCgpKQotICAgICAgICAgICAgICAg
IGVudHJ5cG9pbnQgPSBtX2NvZGVCbG9jay0+bV93YXNtVG9XYXNtRXhpdFN0dWJzW2NhbGwuZnVu
Y3Rpb25JbmRleFNwYWNlXS5jb2RlKCk7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAg
ICAgZW50cnlwb2ludCA9IG1fY29kZUJsb2NrLT53YXNtRW50cnlwb2ludENhbGxlZUZyb21GdW5j
dGlvbkluZGV4U3BhY2UoY2FsbC5mdW5jdGlvbkluZGV4U3BhY2UpLmVudHJ5cG9pbnQoKS5yZXRh
Z2dlZDxXYXNtRW50cnlQdHJUYWc+KCk7Ci0KLSAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpy
ZXBhdGNoTmVhckNhbGwoY2FsbC5jYWxsTG9jYXRpb24sIENvZGVMb2NhdGlvbkxhYmVsPFdhc21F
bnRyeVB0clRhZz4oZW50cnlwb2ludCkpOwotICAgICAgICB9CiAgICAgfQogICAgIGRhdGFMb2dM
bklmKFdhc21PTUdGb3JPU1JFbnRyeVBsYW5JbnRlcm5hbDo6dmVyYm9zZSwgIkZpbmlzaGVkIE9N
R0Zvck9TUkVudHJ5ICIsIG1fZnVuY3Rpb25JbmRleCk7CiAgICAgY29tcGxldGUoaG9sZExvY2so
bV9sb2NrKSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtT01HUGxhbi5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU9NR1BsYW4u
Y3BwCShyZXZpc2lvbiAyNTc4NjYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNt
T01HUGxhbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTExNCwyMCArMTE0LDkgQEAgdm9pZCBPTUdQ
bGFuOjp3b3JrKENvbXBpbGF0aW9uRWZmb3J0KQogICAgICAgICAvLyB3aWxsIHVwZGF0ZS4gSXQn
cyBhbHNvIG9rIGlmIHRoZXkgcHVibGlzaCB0aGVpciBjb2RlIGJlZm9yZSB3ZSByZXNldCB0aGUg
aW5zdHJ1Y3Rpb24gY2FjaGVzIGJlY2F1c2UgYWZ0ZXIgd2UgcmVsZWFzZQogICAgICAgICAvLyB0
aGUgbG9jayBvdXIgY29kZSBpcyByZWFkeSB0byBiZSBwdWJsaXNoZWQgdG9vLgogICAgICAgICBM
b2NrSG9sZGVyIGhvbGRlcihtX2NvZGVCbG9jay0+bV9sb2NrKTsKKwogICAgICAgICBtX2NvZGVC
bG9jay0+bV9vbWdDYWxsZWVzW21fZnVuY3Rpb25JbmRleF0gPSBjYWxsZWUuY29weVJlZigpOwot
ICAgICAgICB7Ci0gICAgICAgICAgICBpZiAoQkJRQ2FsbGVlKiBiYnFDYWxsZWUgPSBtX2NvZGVC
bG9jay0+bV9iYnFDYWxsZWVzW21fZnVuY3Rpb25JbmRleF0uZ2V0KCkpIHsKLSAgICAgICAgICAg
ICAgICBhdXRvIGxvY2tlciA9IGhvbGRMb2NrKGJicUNhbGxlZS0+dGllclVwQ291bnQoKS0+Z2V0
TG9jaygpKTsKLSAgICAgICAgICAgICAgICBiYnFDYWxsZWUtPnNldFJlcGxhY2VtZW50KGNhbGxl
ZS5jb3B5UmVmKCkpOwotICAgICAgICAgICAgICAgIGJicUNhbGxlZS0+dGllclVwQ291bnQoKS0+
bV9jb21waWxhdGlvblN0YXR1c0Zvck9NRyA9IFRpZXJVcENvdW50OjpDb21waWxhdGlvblN0YXR1
czo6Q29tcGlsZWQ7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAobV9jb2RlQmxvY2st
Pm1fbGxpbnRDYWxsZWVzKSB7Ci0gICAgICAgICAgICAgICAgTExJbnRDYWxsZWUmIGxsaW50Q2Fs
bGVlID0gbV9jb2RlQmxvY2stPm1fbGxpbnRDYWxsZWVzLT5hdChtX2Z1bmN0aW9uSW5kZXgpLmdl
dCgpOwotICAgICAgICAgICAgICAgIGF1dG8gbG9ja2VyID0gaG9sZExvY2sobGxpbnRDYWxsZWUu
dGllclVwQ291bnRlcigpLm1fbG9jayk7Ci0gICAgICAgICAgICAgICAgbGxpbnRDYWxsZWUuc2V0
UmVwbGFjZW1lbnQoY2FsbGVlLmNvcHlSZWYoKSk7Ci0gICAgICAgICAgICAgICAgbGxpbnRDYWxs
ZWUudGllclVwQ291bnRlcigpLm1fY29tcGlsYXRpb25TdGF0dXMgPSBMTEludFRpZXJVcENvdW50
ZXI6OkNvbXBpbGF0aW9uU3RhdHVzOjpDb21waWxlZDsKLSAgICAgICAgICAgIH0KLSAgICAgICAg
fQorCiAgICAgICAgIGZvciAoYXV0byYgY2FsbCA6IGNhbGxlZS0+d2FzbVRvV2FzbUNhbGxzaXRl
cygpKSB7CiAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8V2FzbUVudHJ5UHRyVGFn
PiBlbnRyeXBvaW50OwogICAgICAgICAgICAgaWYgKGNhbGwuZnVuY3Rpb25JbmRleFNwYWNlIDwg
bV9tb2R1bGUtPm1vZHVsZUluZm9ybWF0aW9uKCkuaW1wb3J0RnVuY3Rpb25Db3VudCgpKQpAQCAt
MTM3LDI0ICsxMjYsNDcgQEAgdm9pZCBPTUdQbGFuOjp3b3JrKENvbXBpbGF0aW9uRWZmb3J0KQog
CiAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6cmVwYXRjaE5lYXJDYWxsKGNhbGwuY2FsbExv
Y2F0aW9uLCBDb2RlTG9jYXRpb25MYWJlbDxXYXNtRW50cnlQdHJUYWc+KGVudHJ5cG9pbnQpKTsK
ICAgICAgICAgfQotICAgIH0KIAotICAgIC8vIEl0J3MgaW1wb3J0YW50IHRvIG1ha2Ugc3VyZSB3
ZSBkbyB0aGlzIGJlZm9yZSB3ZSBtYWtlIGFueSBvZiB0aGUgY29kZSB3ZSBqdXN0IGNvbXBpbGVk
IHZpc2libGUuIElmIHdlIGRpZG4ndCwgd2UgY291bGQgZW5kIHVwCi0gICAgLy8gd2hlcmUgd2Ug
YXJlIHRpZXJpbmcgdXAgc29tZSBmdW5jdGlvbiBBIHRvIEEnIGFuZCB3ZSByZXBhdGNoIHNvbWUg
ZnVuY3Rpb24gQiB0byBjYWxsIEEnIGluc3RlYWQgb2YgQS4gQW5vdGhlciBDUFUgY291bGQgc2Vl
Ci0gICAgLy8gdGhlIHVwZGF0ZXMgdG8gQiBidXQgc3RpbGwgbm90IGhhdmUgcmVzZXQgaXRzIGNh
Y2hlIG9mIEEnLCB3aGljaCB3b3VsZCBsZWFkIHRvIGFsbCBraW5kcyBvZiBiYWRuZXNzLgotICAg
IHJlc2V0SW5zdHJ1Y3Rpb25DYWNoZU9uQWxsVGhyZWFkcygpOwotICAgIFdURjo6c3RvcmVTdG9y
ZUZlbmNlKCk7IC8vIFRoaXMgcHJvYmFibHkgaXNuJ3QgbmVjZXNzYXJ5IGJ1dCBpdCdzIGdvb2Qg
dG8gYmUgcGFyYW5vaWQuCisgICAgICAgIEhhc2hNYXA8dm9pZCosIENvZGVMb2NhdGlvbkxhYmVs
PFdhc21FbnRyeVB0clRhZz4+IHN0YWdlZENhbGxzOworICAgICAgICBhdXRvIHN0YWdlUmVwYXRj
aCA9IFsmXSAoY29uc3QgVmVjdG9yPFVubGlua2VkV2FzbVRvV2FzbUNhbGw+JiBjYWxsc2l0ZXMp
IHsKKyAgICAgICAgICAgIGZvciAoYXV0byYgY2FsbCA6IGNhbGxzaXRlcykgeworICAgICAgICAg
ICAgICAgIGlmIChjYWxsLmZ1bmN0aW9uSW5kZXhTcGFjZSA9PSBmdW5jdGlvbkluZGV4U3BhY2Up
IHsKKyAgICAgICAgICAgICAgICAgICAgQ29kZUxvY2F0aW9uTGFiZWw8V2FzbUVudHJ5UHRyVGFn
PiB0YXJnZXQgPSBNYWNyb0Fzc2VtYmxlcjo6cHJlcGFyZUZvckF0b21pY1JlcGF0Y2hOZWFyQ2Fs
bENvbmN1cnJlbnRseShjYWxsLmNhbGxMb2NhdGlvbiwgQ29kZUxvY2F0aW9uTGFiZWw8V2FzbUVu
dHJ5UHRyVGFnPihlbnRyeXBvaW50KSk7CisgICAgICAgICAgICAgICAgICAgIHN0YWdlZENhbGxz
LmFkZChjYWxsLmNhbGxMb2NhdGlvbi5kYXRhTG9jYXRpb24oKSwgdGFyZ2V0KTsKKyAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH07CisgICAgICAgIGZvciAodW5zaWdu
ZWQgaSA9IDA7IGkgPCBtX2NvZGVCbG9jay0+bV93YXNtVG9XYXNtQ2FsbHNpdGVzLnNpemUoKTsg
KytpKSB7CisgICAgICAgICAgICBzdGFnZVJlcGF0Y2gobV9jb2RlQmxvY2stPm1fd2FzbVRvV2Fz
bUNhbGxzaXRlc1tpXSk7CisgICAgICAgICAgICBpZiAobV9jb2RlQmxvY2stPm1fbGxpbnRDYWxs
ZWVzKSB7CisgICAgICAgICAgICAgICAgTExJbnRDYWxsZWUmIGxsaW50Q2FsbGVlID0gbV9jb2Rl
QmxvY2stPm1fbGxpbnRDYWxsZWVzLT5hdChpKS5nZXQoKTsKKyAgICAgICAgICAgICAgICBpZiAo
SklUQ2FsbGVlKiByZXBsYWNlbWVudENhbGxlZSA9IGxsaW50Q2FsbGVlLnJlcGxhY2VtZW50KCkp
CisgICAgICAgICAgICAgICAgICAgIHN0YWdlUmVwYXRjaChyZXBsYWNlbWVudENhbGxlZS0+d2Fz
bVRvV2FzbUNhbGxzaXRlcygpKTsKKyAgICAgICAgICAgICAgICBpZiAoT01HRm9yT1NSRW50cnlD
YWxsZWUqIG9zckVudHJ5Q2FsbGVlID0gbGxpbnRDYWxsZWUub3NyRW50cnlDYWxsZWUoKSkKKyAg
ICAgICAgICAgICAgICAgICAgc3RhZ2VSZXBhdGNoKG9zckVudHJ5Q2FsbGVlLT53YXNtVG9XYXNt
Q2FsbHNpdGVzKCkpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKEJCUUNhbGxlZSog
YmJxQ2FsbGVlID0gbV9jb2RlQmxvY2stPm1fYmJxQ2FsbGVlc1tpXS5nZXQoKSkgeworICAgICAg
ICAgICAgICAgIGlmIChPTUdDYWxsZWUqIHJlcGxhY2VtZW50Q2FsbGVlID0gYmJxQ2FsbGVlLT5y
ZXBsYWNlbWVudCgpKQorICAgICAgICAgICAgICAgICAgICBzdGFnZVJlcGF0Y2gocmVwbGFjZW1l
bnRDYWxsZWUtPndhc21Ub1dhc21DYWxsc2l0ZXMoKSk7CisgICAgICAgICAgICAgICAgaWYgKE9N
R0Zvck9TUkVudHJ5Q2FsbGVlKiBvc3JFbnRyeUNhbGxlZSA9IGJicUNhbGxlZS0+b3NyRW50cnlD
YWxsZWUoKSkKKyAgICAgICAgICAgICAgICAgICAgc3RhZ2VSZXBhdGNoKG9zckVudHJ5Q2FsbGVl
LT53YXNtVG9XYXNtQ2FsbHNpdGVzKCkpOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAg
ICAgICAgLy8gSXQncyBpbXBvcnRhbnQgdG8gbWFrZSBzdXJlIHdlIGRvIHRoaXMgYmVmb3JlIHdl
IG1ha2UgYW55IG9mIHRoZSBjb2RlIHdlIGp1c3QgY29tcGlsZWQgdmlzaWJsZS4gSWYgd2UgZGlk
bid0LCB3ZSBjb3VsZCBlbmQgdXAKKyAgICAgICAgLy8gd2hlcmUgd2UgYXJlIHRpZXJpbmcgdXAg
c29tZSBmdW5jdGlvbiBBIHRvIEEnIGFuZCB3ZSByZXBhdGNoIHNvbWUgZnVuY3Rpb24gQiB0byBj
YWxsIEEnIGluc3RlYWQgb2YgQS4gQW5vdGhlciBDUFUgY291bGQgc2VlCisgICAgICAgIC8vIHRo
ZSB1cGRhdGVzIHRvIEIgYnV0IHN0aWxsIG5vdCBoYXZlIHJlc2V0IGl0cyBjYWNoZSBvZiBBJywg
d2hpY2ggd291bGQgbGVhZCB0byBhbGwga2luZHMgb2YgYmFkbmVzcy4KKyAgICAgICAgcmVzZXRJ
bnN0cnVjdGlvbkNhY2hlT25BbGxUaHJlYWRzKCk7CisgICAgICAgIFdURjo6c3RvcmVTdG9yZUZl
bmNlKCk7IC8vIFRoaXMgcHJvYmFibHkgaXNuJ3QgbmVjZXNzYXJ5IGJ1dCBpdCdzIGdvb2QgdG8g
YmUgcGFyYW5vaWQuCiAKLSAgICBtX2NvZGVCbG9jay0+bV93YXNtSW5kaXJlY3RDYWxsRW50cnlQ
b2ludHNbbV9mdW5jdGlvbkluZGV4XSA9IGVudHJ5cG9pbnQ7Ci0gICAgewotICAgICAgICBMb2Nr
SG9sZGVyIGhvbGRlcihtX2NvZGVCbG9jay0+bV9sb2NrKTsKKyAgICAgICAgbV9jb2RlQmxvY2st
Pm1fd2FzbUluZGlyZWN0Q2FsbEVudHJ5UG9pbnRzW21fZnVuY3Rpb25JbmRleF0gPSBlbnRyeXBv
aW50OwogCiAgICAgICAgIGF1dG8gcmVwYXRjaENhbGxzID0gWyZdIChjb25zdCBWZWN0b3I8VW5s
aW5rZWRXYXNtVG9XYXNtQ2FsbD4mIGNhbGxzaXRlcykgewogICAgICAgICAgICAgZm9yIChhdXRv
JiBjYWxsIDogY2FsbHNpdGVzKSB7CiAgICAgICAgICAgICAgICAgZGF0YUxvZ0xuSWYoV2FzbU9N
R1BsYW5JbnRlcm5hbDo6dmVyYm9zZSwgIkNvbnNpZGVyaW5nIHJlcGF0Y2hpbmcgY2FsbCBhdDog
IiwgUmF3UG9pbnRlcihjYWxsLmNhbGxMb2NhdGlvbi5kYXRhTG9jYXRpb24oKSksICIgdGhhdCB0
YXJnZXRzICIsIGNhbGwuZnVuY3Rpb25JbmRleFNwYWNlKTsKICAgICAgICAgICAgICAgICBpZiAo
Y2FsbC5mdW5jdGlvbkluZGV4U3BhY2UgPT0gZnVuY3Rpb25JbmRleFNwYWNlKSB7CiAgICAgICAg
ICAgICAgICAgICAgIGRhdGFMb2dMbklmKFdhc21PTUdQbGFuSW50ZXJuYWw6OnZlcmJvc2UsICJS
ZXBhdGNoaW5nIGNhbGwgYXQ6ICIsIFJhd1BvaW50ZXIoY2FsbC5jYWxsTG9jYXRpb24uZGF0YUxv
Y2F0aW9uKCkpLCAiIHRvICIsIFJhd1BvaW50ZXIoZW50cnlwb2ludC5leGVjdXRhYmxlQWRkcmVz
cygpKSk7Ci0gICAgICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpyZXBhdGNoTmVhckNh
bGwoY2FsbC5jYWxsTG9jYXRpb24sIENvZGVMb2NhdGlvbkxhYmVsPFdhc21FbnRyeVB0clRhZz4o
ZW50cnlwb2ludCkpOworICAgICAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6cmVwYXRj
aE5lYXJDYWxsKGNhbGwuY2FsbExvY2F0aW9uLCBzdGFnZWRDYWxscy5nZXQoY2FsbC5jYWxsTG9j
YXRpb24uZGF0YUxvY2F0aW9uKCkpKTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9
CiAgICAgICAgIH07CkBAIC0xNzUsNiArMTg3LDIwIEBAIHZvaWQgT01HUGxhbjo6d29yayhDb21w
aWxhdGlvbkVmZm9ydCkKICAgICAgICAgICAgICAgICAgICAgcmVwYXRjaENhbGxzKG9zckVudHJ5
Q2FsbGVlLT53YXNtVG9XYXNtQ2FsbHNpdGVzKCkpOwogICAgICAgICAgICAgfQogICAgICAgICB9
CisKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKEJCUUNhbGxlZSogYmJxQ2FsbGVlID0gbV9j
b2RlQmxvY2stPm1fYmJxQ2FsbGVlc1ttX2Z1bmN0aW9uSW5kZXhdLmdldCgpKSB7CisgICAgICAg
ICAgICAgICAgYXV0byBsb2NrZXIgPSBob2xkTG9jayhiYnFDYWxsZWUtPnRpZXJVcENvdW50KCkt
PmdldExvY2soKSk7CisgICAgICAgICAgICAgICAgYmJxQ2FsbGVlLT5zZXRSZXBsYWNlbWVudChj
YWxsZWUuY29weVJlZigpKTsKKyAgICAgICAgICAgICAgICBiYnFDYWxsZWUtPnRpZXJVcENvdW50
KCktPm1fY29tcGlsYXRpb25TdGF0dXNGb3JPTUcgPSBUaWVyVXBDb3VudDo6Q29tcGlsYXRpb25T
dGF0dXM6OkNvbXBpbGVkOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKG1fY29kZUJs
b2NrLT5tX2xsaW50Q2FsbGVlcykgeworICAgICAgICAgICAgICAgIExMSW50Q2FsbGVlJiBsbGlu
dENhbGxlZSA9IG1fY29kZUJsb2NrLT5tX2xsaW50Q2FsbGVlcy0+YXQobV9mdW5jdGlvbkluZGV4
KS5nZXQoKTsKKyAgICAgICAgICAgICAgICBhdXRvIGxvY2tlciA9IGhvbGRMb2NrKGxsaW50Q2Fs
bGVlLnRpZXJVcENvdW50ZXIoKS5tX2xvY2spOworICAgICAgICAgICAgICAgIGxsaW50Q2FsbGVl
LnNldFJlcGxhY2VtZW50KGNhbGxlZS5jb3B5UmVmKCkpOworICAgICAgICAgICAgICAgIGxsaW50
Q2FsbGVlLnRpZXJVcENvdW50ZXIoKS5tX2NvbXBpbGF0aW9uU3RhdHVzID0gTExJbnRUaWVyVXBD
b3VudGVyOjpDb21waWxhdGlvblN0YXR1czo6Q29tcGlsZWQ7CisgICAgICAgICAgICB9CisgICAg
ICAgIH0KICAgICB9CiAKICAgICBkYXRhTG9nTG5JZihXYXNtT01HUGxhbkludGVybmFsOjp2ZXJi
b3NlLCAiRmluaXNoZWQgT01HICIsIG1fZnVuY3Rpb25JbmRleCk7CkluZGV4OiBTb3VyY2UvV1RG
L0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL0NoYW5nZUxvZwkocmV2aXNpb24g
MjU3ODY2KQorKysgU291cmNlL1dURi9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyAr
MSwzNSBAQAorMjAyMC0wMy0xMiAgU2FhbSBCYXJhdGkgIDxzYmFyYXRpQGFwcGxlLmNvbT4KKwor
ICAgICAgICBJbXBsZW1lbnQgMUdCIG9mIGV4ZWN1dGFibGUgbWVtb3J5IG9uIGFybTY0CisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMDg0OTAKKworICAg
ICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIHd0Zi9NZXRhQWxs
b2NhdG9yLmNwcDoKKyAgICAgICAgKFdURjo6TWV0YUFsbG9jYXRvclRyYWNrZXI6Om5vdGlmeSk6
CisgICAgICAgIChXVEY6Ok1ldGFBbGxvY2F0b3JUcmFja2VyOjpyZWxlYXNlKToKKyAgICAgICAg
KFdURjo6TWV0YUFsbG9jYXRvcjo6cmVsZWFzZSk6CisgICAgICAgIChXVEY6Ok1ldGFBbGxvY2F0
b3JIYW5kbGU6Ok1ldGFBbGxvY2F0b3JIYW5kbGUpOgorICAgICAgICAoV1RGOjpNZXRhQWxsb2Nh
dG9ySGFuZGxlOjp+TWV0YUFsbG9jYXRvckhhbmRsZSk6CisgICAgICAgIChXVEY6Ok1ldGFBbGxv
Y2F0b3JIYW5kbGU6OnNocmluayk6CisgICAgICAgIChXVEY6Ok1ldGFBbGxvY2F0b3I6Ok1ldGFB
bGxvY2F0b3IpOgorICAgICAgICAoV1RGOjpNZXRhQWxsb2NhdG9yOjphbGxvY2F0ZSk6CisgICAg
ICAgIChXVEY6Ok1ldGFBbGxvY2F0b3I6OmN1cnJlbnRTdGF0aXN0aWNzKToKKyAgICAgICAgKiB3
dGYvTWV0YUFsbG9jYXRvci5oOgorICAgICAgICAoV1RGOjpNZXRhQWxsb2NhdG9yVHJhY2tlcjo6
ZmluZCk6CisgICAgICAgIChXVEY6Ok1ldGFBbGxvY2F0b3I6OmFsbG9jYXRlKToKKyAgICAgICAg
KFdURjo6TWV0YUFsbG9jYXRvcjo6Y3VycmVudFN0YXRpc3RpY3MpOgorICAgICAgICAoV1RGOjpN
ZXRhQWxsb2NhdG9yOjpnZXRMb2NrKTogRGVsZXRlZC4KKyAgICAgICAgKiB3dGYvTWV0YUFsbG9j
YXRvckhhbmRsZS5oOgorICAgICAgICAoV1RGOjpNZXRhQWxsb2NhdG9ySGFuZGxlOjphbGxvY2F0
b3IpOgorICAgICAgICAoV1RGOjpNZXRhQWxsb2NhdG9ySGFuZGxlOjppc01hbmFnZWQpOiBEZWxl
dGVkLgorICAgICAgICAoV1RGOjpNZXRhQWxsb2NhdG9ySGFuZGxlOjpvd25lclVJRCk6IERlbGV0
ZWQuCisgICAgICAgICogd3RmL1BsYXRmb3JtVXNlLmg6CisgICAgICAgICogd3RmL1JlZEJsYWNr
VHJlZS5oOgorICAgICAgICAqIHd0Zi9TdGRMaWJFeHRyYXMuaDoKKyAgICAgICAgKFdURjo6Y29u
c3RydWN0Rml4ZWRTaXplQXJyYXlXaXRoQXJndW1lbnRzSW1wbCk6CisgICAgICAgIChXVEY6OmNv
bnN0cnVjdEZpeGVkU2l6ZUFycmF5V2l0aEFyZ3VtZW50cyk6CisKIDIwMjAtMDMtMDMgIE1lZ2Fu
IEdhcmRuZXIgIDxtZWdhbl9nYXJkbmVyQGFwcGxlLmNvbT4KIAogICAgICAgICBCdWlsZCBGaXgK
SW5kZXg6IFNvdXJjZS9XVEYvd3RmL01ldGFBbGxvY2F0b3IuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XVEYvd3RmL01ldGFBbGxvY2F0b3IuY3BwCShyZXZpc2lvbiAyNTc4NjYpCisrKyBTb3Vy
Y2UvV1RGL3d0Zi9NZXRhQWxsb2NhdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTQsMjIgKzU0
LDIxIEBAIE1ldGFBbGxvY2F0b3I6On5NZXRhQWxsb2NhdG9yKCkKICNlbmRpZgogfQogCi12b2lk
IE1ldGFBbGxvY2F0b3JUcmFja2VyOjpub3RpZnkoTWV0YUFsbG9jYXRvckhhbmRsZSogaGFuZGxl
KQordm9pZCBNZXRhQWxsb2NhdG9yVHJhY2tlcjo6bm90aWZ5KE1ldGFBbGxvY2F0b3JIYW5kbGUm
IGhhbmRsZSkKIHsKLSAgICBtX2FsbG9jYXRpb25zLmluc2VydChoYW5kbGUpOworICAgIG1fYWxs
b2NhdGlvbnMuaW5zZXJ0KCZoYW5kbGUpOwogfQogCi12b2lkIE1ldGFBbGxvY2F0b3JUcmFja2Vy
OjpyZWxlYXNlKE1ldGFBbGxvY2F0b3JIYW5kbGUqIGhhbmRsZSkKK3ZvaWQgTWV0YUFsbG9jYXRv
clRyYWNrZXI6OnJlbGVhc2UoTWV0YUFsbG9jYXRvckhhbmRsZSYgaGFuZGxlKQogewotICAgIG1f
YWxsb2NhdGlvbnMucmVtb3ZlKGhhbmRsZSk7CisgICAgbV9hbGxvY2F0aW9ucy5yZW1vdmUoJmhh
bmRsZSk7CiB9CiAKLUFMV0FZU19JTkxJTkUgdm9pZCBNZXRhQWxsb2NhdG9yOjpyZWxlYXNlKE1l
dGFBbGxvY2F0b3JIYW5kbGUqIGhhbmRsZSkKK3ZvaWQgTWV0YUFsbG9jYXRvcjo6cmVsZWFzZShj
b25zdCBMb2NrSG9sZGVyJiwgTWV0YUFsbG9jYXRvckhhbmRsZSYgaGFuZGxlKQogewotICAgIExv
Y2tIb2xkZXIgbG9ja2VyKCZtX2xvY2spOwotICAgIGlmIChoYW5kbGUtPnNpemVJbkJ5dGVzKCkp
IHsKLSAgICAgICAgdm9pZCogc3RhcnQgPSBoYW5kbGUtPnN0YXJ0KCkudW50YWdnZWRQdHIoKTsK
LSAgICAgICAgc2l6ZV90IHNpemVJbkJ5dGVzID0gaGFuZGxlLT5zaXplSW5CeXRlcygpOworICAg
IGlmIChoYW5kbGUuc2l6ZUluQnl0ZXMoKSkgeworICAgICAgICB2b2lkKiBzdGFydCA9IGhhbmRs
ZS5zdGFydCgpLnVudGFnZ2VkUHRyKCk7CisgICAgICAgIHNpemVfdCBzaXplSW5CeXRlcyA9IGhh
bmRsZS5zaXplSW5CeXRlcygpOwogICAgICAgICBkZWNyZW1lbnRQYWdlT2NjdXBhbmN5KHN0YXJ0
LCBzaXplSW5CeXRlcyk7CiAgICAgICAgIGFkZEZyZWVTcGFjZUZyb21SZWxlYXNlZEhhbmRsZShG
cmVlU3BhY2VQdHIoc3RhcnQpLCBzaXplSW5CeXRlcyk7CiAgICAgfQpAQCAtNzgsMjEgKzc3LDE5
IEBAIEFMV0FZU19JTkxJTkUgdm9pZCBNZXRhQWxsb2NhdG9yOjpyZWxlYXMKICAgICAgICAgbV90
cmFja2VyLT5yZWxlYXNlKGhhbmRsZSk7CiB9CiAKLU1ldGFBbGxvY2F0b3JIYW5kbGU6Ok1ldGFB
bGxvY2F0b3JIYW5kbGUoTWV0YUFsbG9jYXRvciogYWxsb2NhdG9yLCB2b2lkKiBzdGFydCwgc2l6
ZV90IHNpemVJbkJ5dGVzLCB2b2lkKiBvd25lclVJRCkKK01ldGFBbGxvY2F0b3JIYW5kbGU6Ok1l
dGFBbGxvY2F0b3JIYW5kbGUoTWV0YUFsbG9jYXRvciYgYWxsb2NhdG9yLCB2b2lkKiBzdGFydCwg
c2l6ZV90IHNpemVJbkJ5dGVzKQogICAgIDogbV9hbGxvY2F0b3IoYWxsb2NhdG9yKQogICAgICwg
bV9zdGFydChzdGFydCkKICAgICAsIG1fZW5kKHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KHN0YXJ0
KSArIHNpemVJbkJ5dGVzKQotICAgICwgbV9vd25lclVJRChvd25lclVJRCkKIHsKLSAgICBBU1NF
UlQoYWxsb2NhdG9yKTsKICAgICBBU1NFUlQoc3RhcnQpOwogICAgIEFTU0VSVChzaXplSW5CeXRl
cyk7CiB9CiAKIE1ldGFBbGxvY2F0b3JIYW5kbGU6On5NZXRhQWxsb2NhdG9ySGFuZGxlKCkKIHsK
LSAgICBBU1NFUlQobV9hbGxvY2F0b3IpOwotICAgIG1fYWxsb2NhdG9yLT5yZWxlYXNlKHRoaXMp
OworICAgIGF1dG8gbG9ja2VyID0gaG9sZExvY2soYWxsb2NhdG9yKCkubV9sb2NrKTsKKyAgICBh
bGxvY2F0b3IoKS5yZWxlYXNlKGxvY2tlciwgKnRoaXMpOwogfQogCiB2b2lkIE1ldGFBbGxvY2F0
b3JIYW5kbGU6OnNocmluayhzaXplX3QgbmV3U2l6ZUluQnl0ZXMpCkBAIC0xMDAsOSArOTcsMTAg
QEAgdm9pZCBNZXRhQWxsb2NhdG9ySGFuZGxlOjpzaHJpbmsoc2l6ZV90IAogICAgIHNpemVfdCBz
aXplSW5CeXRlcyA9IHRoaXMtPnNpemVJbkJ5dGVzKCk7CiAgICAgQVNTRVJUKG5ld1NpemVJbkJ5
dGVzIDw9IHNpemVJbkJ5dGVzKTsKIAotICAgIExvY2tIb2xkZXIgbG9ja2VyKCZtX2FsbG9jYXRv
ci0+bV9sb2NrKTsKKyAgICBNZXRhQWxsb2NhdG9yJiBhbGxvY2F0b3IgPSB0aGlzLT5hbGxvY2F0
b3IoKTsKKyAgICBMb2NrSG9sZGVyIGxvY2tlcigmYWxsb2NhdG9yLm1fbG9jayk7CiAKLSAgICBu
ZXdTaXplSW5CeXRlcyA9IG1fYWxsb2NhdG9yLT5yb3VuZFVwKG5ld1NpemVJbkJ5dGVzKTsKKyAg
ICBuZXdTaXplSW5CeXRlcyA9IGFsbG9jYXRvci5yb3VuZFVwKG5ld1NpemVJbkJ5dGVzKTsKICAg
ICAKICAgICBBU1NFUlQobmV3U2l6ZUluQnl0ZXMgPD0gc2l6ZUluQnl0ZXMpOwogCkBAIC0xMTMs
MTEgKzExMSwxMSBAQCB2b2lkIE1ldGFBbGxvY2F0b3JIYW5kbGU6OnNocmluayhzaXplX3QgCiAg
ICAgc2l6ZV90IGZyZWVTaXplID0gc2l6ZUluQnl0ZXMgLSBuZXdTaXplSW5CeXRlczsKICAgICB1
aW50cHRyX3QgZnJlZUVuZCA9IGZyZWVTdGFydCArIGZyZWVTaXplOwogICAgIAotICAgIHVpbnRw
dHJfdCBmaXJzdENvbXBsZXRlbHlGcmVlUGFnZSA9IChmcmVlU3RhcnQgKyBtX2FsbG9jYXRvci0+
bV9wYWdlU2l6ZSAtIDEpICYgfihtX2FsbG9jYXRvci0+bV9wYWdlU2l6ZSAtIDEpOworICAgIHVp
bnRwdHJfdCBmaXJzdENvbXBsZXRlbHlGcmVlUGFnZSA9IChmcmVlU3RhcnQgKyBhbGxvY2F0b3Iu
bV9wYWdlU2l6ZSAtIDEpICYgfihhbGxvY2F0b3IubV9wYWdlU2l6ZSAtIDEpOwogICAgIGlmIChm
aXJzdENvbXBsZXRlbHlGcmVlUGFnZSA8IGZyZWVFbmQpCi0gICAgICAgIG1fYWxsb2NhdG9yLT5k
ZWNyZW1lbnRQYWdlT2NjdXBhbmN5KHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KGZpcnN0Q29tcGxl
dGVseUZyZWVQYWdlKSwgZnJlZVNpemUgLSAoZmlyc3RDb21wbGV0ZWx5RnJlZVBhZ2UgLSBmcmVl
U3RhcnQpKTsKKyAgICAgICAgYWxsb2NhdG9yLmRlY3JlbWVudFBhZ2VPY2N1cGFuY3kocmVpbnRl
cnByZXRfY2FzdDx2b2lkKj4oZmlyc3RDb21wbGV0ZWx5RnJlZVBhZ2UpLCBmcmVlU2l6ZSAtIChm
aXJzdENvbXBsZXRlbHlGcmVlUGFnZSAtIGZyZWVTdGFydCkpOwogCi0gICAgbV9hbGxvY2F0b3It
PmFkZEZyZWVTcGFjZUZyb21SZWxlYXNlZEhhbmRsZShNZXRhQWxsb2NhdG9yOjpGcmVlU3BhY2VQ
dHIoZnJlZVN0YXJ0KSwgZnJlZVNpemUpOworICAgIGFsbG9jYXRvci5hZGRGcmVlU3BhY2VGcm9t
UmVsZWFzZWRIYW5kbGUoTWV0YUFsbG9jYXRvcjo6RnJlZVNwYWNlUHRyKGZyZWVTdGFydCksIGZy
ZWVTaXplKTsKIAogICAgIG1fZW5kID0gbV9zdGFydCArIG5ld1NpemVJbkJ5dGVzOwogfQpAQCAt
MTI3LDEzICsxMjUsMTMgQEAgdm9pZCBNZXRhQWxsb2NhdG9ySGFuZGxlOjpkdW1wKFByaW50U3Ry
ZQogICAgIG91dC5wcmludChSYXdQb2ludGVyKHN0YXJ0KCkudW50YWdnZWRQdHIoKSksICIuLi4i
LCBSYXdQb2ludGVyKGVuZCgpLnVudGFnZ2VkUHRyKCkpKTsKIH0KIAotTWV0YUFsbG9jYXRvcjo6
TWV0YUFsbG9jYXRvcihzaXplX3QgYWxsb2NhdGlvbkdyYW51bGUsIHNpemVfdCBwYWdlU2l6ZSkK
K01ldGFBbGxvY2F0b3I6Ok1ldGFBbGxvY2F0b3IoTG9jayYgbG9jaywgc2l6ZV90IGFsbG9jYXRp
b25HcmFudWxlLCBzaXplX3QgcGFnZVNpemUpCiAgICAgOiBtX2FsbG9jYXRpb25HcmFudWxlKGFs
bG9jYXRpb25HcmFudWxlKQogICAgICwgbV9wYWdlU2l6ZShwYWdlU2l6ZSkKICAgICAsIG1fYnl0
ZXNBbGxvY2F0ZWQoMCkKICAgICAsIG1fYnl0ZXNSZXNlcnZlZCgwKQogICAgICwgbV9ieXRlc0Nv
bW1pdHRlZCgwKQotICAgICwgbV90cmFja2VyKDApCisgICAgLCBtX2xvY2sobG9jaykKICNpZm5k
ZWYgTkRFQlVHCiAgICAgLCBtX21hbGxvY0JhbGFuY2UoMCkKICNlbmRpZgpAQCAtMTU3LDEwICsx
NTUsOCBAQCBNZXRhQWxsb2NhdG9yOjpNZXRhQWxsb2NhdG9yKHNpemVfdCBhbGxvCiAgICAgQVNT
RVJUKHN0YXRpY19jYXN0PHNpemVfdD4oMSkgPDwgbV9sb2dBbGxvY2F0aW9uR3JhbnVsZSA9PSBt
X2FsbG9jYXRpb25HcmFudWxlKTsKIH0KIAotUmVmUHRyPE1ldGFBbGxvY2F0b3JIYW5kbGU+IE1l
dGFBbGxvY2F0b3I6OmFsbG9jYXRlKHNpemVfdCBzaXplSW5CeXRlcywgdm9pZCogb3duZXJVSUQp
CitSZWZQdHI8TWV0YUFsbG9jYXRvckhhbmRsZT4gTWV0YUFsbG9jYXRvcjo6YWxsb2NhdGUoY29u
c3QgTG9ja0hvbGRlciYsIHNpemVfdCBzaXplSW5CeXRlcykKIHsKLSAgICBMb2NrSG9sZGVyIGxv
Y2tlcigmbV9sb2NrKTsKLQogICAgIGlmICghc2l6ZUluQnl0ZXMpCiAgICAgICAgIHJldHVybiBu
dWxscHRyOwogICAgIApAQCAtMTk1LDE3ICsxOTEsMTYgQEAgUmVmUHRyPE1ldGFBbGxvY2F0b3JI
YW5kbGU+IE1ldGFBbGxvY2F0bwogICAgIG1fbnVtQWxsb2NhdGlvbnMrKzsKICNlbmRpZgogCi0g
ICAgYXV0byBoYW5kbGUgPSBhZG9wdFJlZigqbmV3IE1ldGFBbGxvY2F0b3JIYW5kbGUodGhpcywg
c3RhcnQudW50YWdnZWRQdHIoKSwgc2l6ZUluQnl0ZXMsIG93bmVyVUlEKSk7CisgICAgYXV0byBo
YW5kbGUgPSBhZG9wdFJlZigqbmV3IE1ldGFBbGxvY2F0b3JIYW5kbGUoKnRoaXMsIHN0YXJ0LnVu
dGFnZ2VkUHRyKCksIHNpemVJbkJ5dGVzKSk7CiAKICAgICBpZiAoVU5MSUtFTFkoISFtX3RyYWNr
ZXIpKQotICAgICAgICBtX3RyYWNrZXItPm5vdGlmeShoYW5kbGUucHRyKCkpOworICAgICAgICBt
X3RyYWNrZXItPm5vdGlmeSgqaGFuZGxlLnB0cigpKTsKIAogICAgIHJldHVybiBoYW5kbGU7CiB9
CiAKLU1ldGFBbGxvY2F0b3I6OlN0YXRpc3RpY3MgTWV0YUFsbG9jYXRvcjo6Y3VycmVudFN0YXRp
c3RpY3MoKQorTWV0YUFsbG9jYXRvcjo6U3RhdGlzdGljcyBNZXRhQWxsb2NhdG9yOjpjdXJyZW50
U3RhdGlzdGljcyhjb25zdCBMb2NrSG9sZGVyJikKIHsKLSAgICBMb2NrSG9sZGVyIGxvY2tlcigm
bV9sb2NrKTsKICAgICBTdGF0aXN0aWNzIHJlc3VsdDsKICAgICByZXN1bHQuYnl0ZXNBbGxvY2F0
ZWQgPSBtX2J5dGVzQWxsb2NhdGVkOwogICAgIHJlc3VsdC5ieXRlc1Jlc2VydmVkID0gbV9ieXRl
c1Jlc2VydmVkOwpJbmRleDogU291cmNlL1dURi93dGYvTWV0YUFsbG9jYXRvci5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XVEYvd3RmL01ldGFBbGxvY2F0b3IuaAkocmV2aXNpb24gMjU3ODY2KQor
KysgU291cmNlL1dURi93dGYvTWV0YUFsbG9jYXRvci5oCSh3b3JraW5nIGNvcHkpCkBAIC00NCwx
NSArNDQsMTUgQEAgbmFtZXNwYWNlIFdURiB7CiBjbGFzcyBNZXRhQWxsb2NhdG9yVHJhY2tlciB7
CiAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CiBwdWJsaWM6Ci0gICAgdm9pZCBub3RpZnko
TWV0YUFsbG9jYXRvckhhbmRsZSopOwotICAgIHZvaWQgcmVsZWFzZShNZXRhQWxsb2NhdG9ySGFu
ZGxlKik7CisgICAgdm9pZCBub3RpZnkoTWV0YUFsbG9jYXRvckhhbmRsZSYpOworICAgIHZvaWQg
cmVsZWFzZShNZXRhQWxsb2NhdG9ySGFuZGxlJik7CiAKICAgICBNZXRhQWxsb2NhdG9ySGFuZGxl
KiBmaW5kKHZvaWQqIGFkZHJlc3MpCiAgICAgewogICAgICAgICBNZXRhQWxsb2NhdG9ySGFuZGxl
KiBoYW5kbGUgPSBtX2FsbG9jYXRpb25zLmZpbmRHcmVhdGVzdExlc3NUaGFuT3JFcXVhbChhZGRy
ZXNzKTsKLSAgICAgICAgaWYgKGhhbmRsZSAmJiBhZGRyZXNzIDwgaGFuZGxlLT5lbmQoKS51bnRh
Z2dlZFB0cigpKQorICAgICAgICBpZiAoaGFuZGxlICYmIGhhbmRsZS0+c3RhcnQoKS51bnRhZ2dl
ZFB0cigpIDw9IGFkZHJlc3MgJiYgYWRkcmVzcyA8IGhhbmRsZS0+ZW5kKCkudW50YWdnZWRQdHIo
KSkKICAgICAgICAgICAgIHJldHVybiBoYW5kbGU7Ci0gICAgICAgIHJldHVybiAwOworICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKICAgICB9CiAKICAgICBSZWRCbGFja1RyZWU8TWV0YUFsbG9jYXRv
ckhhbmRsZSwgdm9pZCo+IG1fYWxsb2NhdGlvbnM7CkBAIC02NCwxNyArNjQsMjIgQEAgY2xhc3Mg
TWV0YUFsbG9jYXRvciB7CiBwdWJsaWM6CiAgICAgdXNpbmcgRnJlZVNwYWNlUHRyID0gTWV0YUFs
bG9jYXRvclB0cjxGcmVlU3BhY2VQdHJUYWc+OwogCi0gICAgV1RGX0VYUE9SVF9QUklWQVRFIE1l
dGFBbGxvY2F0b3Ioc2l6ZV90IGFsbG9jYXRpb25HcmFudWxlLCBzaXplX3QgcGFnZVNpemUgPSBX
VEY6OnBhZ2VTaXplKCkpOworICAgIFdURl9FWFBPUlRfUFJJVkFURSBNZXRhQWxsb2NhdG9yKExv
Y2smLCBzaXplX3QgYWxsb2NhdGlvbkdyYW51bGUsIHNpemVfdCBwYWdlU2l6ZSA9IFdURjo6cGFn
ZVNpemUoKSk7CiAgICAgCiAgICAgV1RGX0VYUE9SVF9QUklWQVRFIHZpcnR1YWwgfk1ldGFBbGxv
Y2F0b3IoKTsKICAgICAKLSAgICBXVEZfRVhQT1JUX1BSSVZBVEUgUmVmUHRyPE1ldGFBbGxvY2F0
b3JIYW5kbGU+IGFsbG9jYXRlKHNpemVfdCBzaXplSW5CeXRlcywgdm9pZCogb3duZXJVSUQpOwor
ICAgIFJlZlB0cjxNZXRhQWxsb2NhdG9ySGFuZGxlPiBhbGxvY2F0ZShzaXplX3Qgc2l6ZUluQnl0
ZXMpCisgICAgeworICAgICAgICBhdXRvIGxvY2tlciA9IGhvbGRMb2NrKG1fbG9jayk7CisgICAg
ICAgIHJldHVybiBhbGxvY2F0ZShsb2NrZXIsIHNpemVJbkJ5dGVzKTsKKyAgICB9CisgICAgV1RG
X0VYUE9SVF9QUklWQVRFIFJlZlB0cjxNZXRhQWxsb2NhdG9ySGFuZGxlPiBhbGxvY2F0ZShjb25z
dCBMb2NrSG9sZGVyJiwgc2l6ZV90IHNpemVJbkJ5dGVzKTsKIAogICAgIHZvaWQgdHJhY2tBbGxv
Y2F0aW9ucyhNZXRhQWxsb2NhdG9yVHJhY2tlciogdHJhY2tlcikKICAgICB7CiAgICAgICAgIG1f
dHJhY2tlciA9IHRyYWNrZXI7CiAgICAgfQotICAgIAorCiAgICAgLy8gTm9uLWF0b21pYyBtZXRo
b2RzIGZvciBnZXR0aW5nIGFsbG9jYXRvciBzdGF0aXN0aWNzLgogICAgIHNpemVfdCBieXRlc0Fs
bG9jYXRlZCgpIHsgcmV0dXJuIG1fYnl0ZXNBbGxvY2F0ZWQ7IH0KICAgICBzaXplX3QgYnl0ZXNS
ZXNlcnZlZCgpIHsgcmV0dXJuIG1fYnl0ZXNSZXNlcnZlZDsgfQpAQCAtODcsNyArOTIsMTIgQEAg
cHVibGljOgogICAgICAgICBzaXplX3QgYnl0ZXNSZXNlcnZlZDsKICAgICAgICAgc2l6ZV90IGJ5
dGVzQ29tbWl0dGVkOwogICAgIH07Ci0gICAgV1RGX0VYUE9SVF9QUklWQVRFIFN0YXRpc3RpY3Mg
Y3VycmVudFN0YXRpc3RpY3MoKTsKKyAgICBTdGF0aXN0aWNzIGN1cnJlbnRTdGF0aXN0aWNzKCkK
KyAgICB7CisgICAgICAgIGF1dG8gbG9ja2VyID0gaG9sZExvY2sobV9sb2NrKTsKKyAgICAgICAg
cmV0dXJuIGN1cnJlbnRTdGF0aXN0aWNzKGxvY2tlcik7CisgICAgfQorICAgIFdURl9FWFBPUlRf
UFJJVkFURSBTdGF0aXN0aWNzIGN1cnJlbnRTdGF0aXN0aWNzKGNvbnN0IExvY2tIb2xkZXImKTsK
IAogICAgIC8vIEFkZCBtb3JlIGZyZWUgc3BhY2UgdG8gdGhlIGFsbG9jYXRvci4gQ2FsbCB0aGlz
IGRpcmVjdGx5IGZyb20KICAgICAvLyB0aGUgY29uc3RydWN0b3IgaWYgeW91IHdpc2ggdG8gb3Bl
cmF0ZSB0aGUgYWxsb2NhdG9yIHdpdGhpbiBhCkBAIC05OCw3ICsxMDgsNiBAQCBwdWJsaWM6CiAg
ICAgLy8gYnVpbGRzLgogICAgIFdURl9FWFBPUlRfUFJJVkFURSBzaXplX3QgZGVidWdGcmVlU3Bh
Y2VTaXplKCk7CiAKLSAgICBMb2NrJiBnZXRMb2NrKCkgeyByZXR1cm4gbV9sb2NrOyB9CiAgICAg
V1RGX0VYUE9SVF9QUklWQVRFIGJvb2wgaXNJbkFsbG9jYXRlZE1lbW9yeShjb25zdCBBYnN0cmFj
dExvY2tlciYsIHZvaWQqIGFkZHJlc3MpOwogICAgIAogI2lmIEVOQUJMRShNRVRBX0FMTE9DQVRP
Ul9QUk9GSUxFKQpAQCAtMTIzLDYgKzEzMiw4IEBAIHByb3RlY3RlZDoKICAgICAvLyBkZXN0cnVj
dGlvbiwgaW4gcGFydCBiZWNhdXNlIGEgTWV0YUFsbG9jYXRvciBjYW5ub3QgZGllIHNvIGxvbmcK
ICAgICAvLyBhcyB0aGVyZSBhcmUgSGFuZGxlcyB0aGF0IHJlZmVyIHRvIGl0LgogCisgICAgLy8g
UmVsZWFzZSBhIE1ldGFBbGxvY2F0b3JIYW5kbGUuCisgICAgdmlydHVhbCB2b2lkIHJlbGVhc2Uo
Y29uc3QgTG9ja0hvbGRlciYsIE1ldGFBbGxvY2F0b3JIYW5kbGUmKTsKIHByaXZhdGU6CiAgICAg
CiAgICAgZnJpZW5kIGNsYXNzIE1ldGFBbGxvY2F0b3JIYW5kbGU7CkBAIC0xNTAsOSArMTYxLDYg
QEAgcHJpdmF0ZToKICAgICAgICAgRnJlZVNwYWNlUHRyIG1fZW5kOwogICAgIH07CiAgICAgdHlw
ZWRlZiBSZWRCbGFja1RyZWU8RnJlZVNwYWNlTm9kZSwgc2l6ZV90PiBUcmVlOwotCi0gICAgLy8g
UmVsZWFzZSBhIE1ldGFBbGxvY2F0b3JIYW5kbGUuCi0gICAgdm9pZCByZWxlYXNlKE1ldGFBbGxv
Y2F0b3JIYW5kbGUqKTsKICAgICAKICAgICAvLyBSZW1vdmUgZnJlZSBzcGFjZSBmcm9tIHRoZSBh
bGxvY2F0b3IuIFRoaXMgaXMgZWZmZWN0aXZlbHkKICAgICAvLyB0aGUgYWxsb2NhdGUoKSBmdW5j
dGlvbiwgZXhjZXB0IHRoYXQgaXQgZG9lcyBub3QgbWFyayB0aGUKQEAgLTE5Myw5ICsyMDEsOSBA
QCBwcml2YXRlOgogICAgIHNpemVfdCBtX2J5dGVzUmVzZXJ2ZWQ7CiAgICAgc2l6ZV90IG1fYnl0
ZXNDb21taXR0ZWQ7CiAgICAgCi0gICAgTG9jayBtX2xvY2s7CisgICAgTG9jayYgbV9sb2NrOwog
Ci0gICAgTWV0YUFsbG9jYXRvclRyYWNrZXIqIG1fdHJhY2tlcjsKKyAgICBNZXRhQWxsb2NhdG9y
VHJhY2tlciogbV90cmFja2VyIHsgbnVsbHB0ciB9OwogCiAjaWZuZGVmIE5ERUJVRwogICAgIHNp
emVfdCBtX21hbGxvY0JhbGFuY2U7CkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9NZXRhQWxsb2NhdG9y
SGFuZGxlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvTWV0YUFsbG9jYXRvckhhbmRs
ZS5oCShyZXZpc2lvbiAyNTc4NjYpCisrKyBTb3VyY2UvV1RGL3d0Zi9NZXRhQWxsb2NhdG9ySGFu
ZGxlLmgJKHdvcmtpbmcgY29weSkKQEAgLTQyLDcgKzQyLDcgQEAgREVDTEFSRV9BTExPQ0FUT1Jf
V0lUSF9IRUFQX0lERU5USUZJRVIoTQogY2xhc3MgTWV0YUFsbG9jYXRvckhhbmRsZSA6IHB1Ymxp
YyBUaHJlYWRTYWZlUmVmQ291bnRlZDxNZXRhQWxsb2NhdG9ySGFuZGxlPiwgcHVibGljIFJlZEJs
YWNrVHJlZTxNZXRhQWxsb2NhdG9ySGFuZGxlLCB2b2lkKj46Ok5vZGUgewogICAgIFdURl9NQUtF
X0ZBU1RfQUxMT0NBVEVEX1dJVEhfSEVBUF9JREVOVElGSUVSKE1ldGFBbGxvY2F0b3JIYW5kbGUp
OwogcHJpdmF0ZToKLSAgICBNZXRhQWxsb2NhdG9ySGFuZGxlKE1ldGFBbGxvY2F0b3IqLCB2b2lk
KiBzdGFydCwgc2l6ZV90IHNpemVJbkJ5dGVzLCB2b2lkKiBvd25lclVJRCk7CisgICAgTWV0YUFs
bG9jYXRvckhhbmRsZShNZXRhQWxsb2NhdG9yJiwgdm9pZCogc3RhcnQsIHNpemVfdCBzaXplSW5C
eXRlcyk7CiAKIHB1YmxpYzoKICAgICB1c2luZyBNZW1vcnlQdHIgPSBNZXRhQWxsb2NhdG9yUHRy
PEhhbmRsZU1lbW9yeVB0clRhZz47CkBAIC04NiwyMiArODYsMTEgQEAgcHVibGljOgogICAgICAg
ICAKICAgICBXVEZfRVhQT1JUX1BSSVZBVEUgdm9pZCBzaHJpbmsoc2l6ZV90IG5ld1NpemVJbkJ5
dGVzKTsKICAgICAKLSAgICBib29sIGlzTWFuYWdlZCgpCisgICAgTWV0YUFsbG9jYXRvciYgYWxs
b2NhdG9yKCkKICAgICB7Ci0gICAgICAgIHJldHVybiAhIW1fYWxsb2NhdG9yOwotICAgIH0KLSAg
ICAgICAgCi0gICAgTWV0YUFsbG9jYXRvciogYWxsb2NhdG9yKCkKLSAgICB7Ci0gICAgICAgIEFT
U0VSVChtX2FsbG9jYXRvcik7CiAgICAgICAgIHJldHVybiBtX2FsbG9jYXRvcjsKICAgICB9CiAK
LSAgICB2b2lkKiBvd25lclVJRCgpCi0gICAgewotICAgICAgICByZXR1cm4gbV9vd25lclVJRDsK
LSAgICB9Ci0KICAgICB2b2lkKiBrZXkoKQogICAgIHsKICAgICAgICAgcmV0dXJuIG1fc3RhcnQu
dW50YWdnZWRQdHIoKTsKQEAgLTExMiwxMCArMTAxLDkgQEAgcHVibGljOgogcHJpdmF0ZToKICAg
ICBmcmllbmQgY2xhc3MgTWV0YUFsbG9jYXRvcjsKICAgICAKLSAgICBNZXRhQWxsb2NhdG9yKiBt
X2FsbG9jYXRvcjsKKyAgICBNZXRhQWxsb2NhdG9yJiBtX2FsbG9jYXRvcjsKICAgICBNZW1vcnlQ
dHIgbV9zdGFydDsKICAgICBNZW1vcnlQdHIgbV9lbmQ7Ci0gICAgdm9pZCogbV9vd25lclVJRDsK
IH07CiAKIH0KSW5kZXg6IFNvdXJjZS9XVEYvd3RmL1BsYXRmb3JtVXNlLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dURi93dGYvUGxhdGZvcm1Vc2UuaAkocmV2aXNpb24gMjU3ODY2KQorKysgU291
cmNlL1dURi93dGYvUGxhdGZvcm1Vc2UuaAkod29ya2luZyBjb3B5KQpAQCAtMzIzLDMgKzMyMyw3
IEBACiAjaWYgUExBVEZPUk0oQ09DT0EpICYmICEoUExBVEZPUk0oTUFDKSAmJiBfX01BQ19PU19Y
X1ZFUlNJT05fTUlOX1JFUVVJUkVEIDwgMTAxNjAwKQogI2RlZmluZSBVU0VfQ1RGT05UVFJBTlNG
T1JNR0xZUEhTV0lUSExBTkdVQUdFIDEKICNlbmRpZgorCisjaWYgQ1BVKEFSTTY0KSAmJiBDUFUo
QUREUkVTUzY0KQorI2RlZmluZSBVU0VfSlVNUF9JU0xBTkRTIDEKKyNlbmRpZgpJbmRleDogU291
cmNlL1dURi93dGYvUmVkQmxhY2tUcmVlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYv
UmVkQmxhY2tUcmVlLmgJKHJldmlzaW9uIDI1Nzg2NikKKysrIFNvdXJjZS9XVEYvd3RmL1JlZEJs
YWNrVHJlZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMjQsNiArMzI0LDI2IEBAIHB1YmxpYzoKICAg
ICAgICAgfQogICAgICAgICByZXR1cm4gYmVzdDsKICAgICB9CisKKyAgICB0ZW1wbGF0ZSA8dHlw
ZW5hbWUgRnVuY3Rpb24+CisgICAgdm9pZCBpdGVyYXRlKEZ1bmN0aW9uIGZ1bmN0aW9uKQorICAg
IHsKKyAgICAgICAgaWYgKCFtX3Jvb3QpCisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAg
VmVjdG9yPE5vZGVUeXBlKiwgMTY+IHRvSXRlcmF0ZTsKKyAgICAgICAgdG9JdGVyYXRlLmFwcGVu
ZChtX3Jvb3QpOworICAgICAgICB3aGlsZSAodG9JdGVyYXRlLnNpemUoKSkgeworICAgICAgICAg
ICAgTm9kZVR5cGUmIGN1cnJlbnQgPSAqdG9JdGVyYXRlLnRha2VMYXN0KCk7CisgICAgICAgICAg
ICBib29sIGl0ZXJhdGVMZWZ0ID0gZmFsc2U7CisgICAgICAgICAgICBib29sIGl0ZXJhdGVSaWdo
dCA9IGZhbHNlOworICAgICAgICAgICAgZnVuY3Rpb24oY3VycmVudCwgaXRlcmF0ZUxlZnQsIGl0
ZXJhdGVSaWdodCk7CisgICAgICAgICAgICBpZiAoaXRlcmF0ZUxlZnQgJiYgY3VycmVudC5sZWZ0
KCkpCisgICAgICAgICAgICAgICAgdG9JdGVyYXRlLmFwcGVuZChjdXJyZW50LmxlZnQoKSk7Cisg
ICAgICAgICAgICBpZiAoaXRlcmF0ZVJpZ2h0ICYmIGN1cnJlbnQucmlnaHQoKSkKKyAgICAgICAg
ICAgICAgICB0b0l0ZXJhdGUuYXBwZW5kKGN1cnJlbnQucmlnaHQoKSk7CisgICAgICAgIH0KKyAg
ICB9CiAgICAgCiAgICAgTm9kZVR5cGUqIGZpcnN0KCkgY29uc3QKICAgICB7CkluZGV4OiBTb3Vy
Y2UvV1RGL3d0Zi9TdGRMaWJFeHRyYXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9T
dGRMaWJFeHRyYXMuaAkocmV2aXNpb24gMjU3ODY2KQorKysgU291cmNlL1dURi93dGYvU3RkTGli
RXh0cmFzLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ4OSw2ICs0ODksMTkgQEAgQUxXQVlTX0lOTElO
RSBkZWNsdHlwZShhdXRvKSBtYWtlVW5pcXVlVwogICAgIHJldHVybiBzdGQ6Om1ha2VfdW5pcXVl
PFQ+KHN0ZDo6Zm9yd2FyZDxBcmdzPihhcmdzKS4uLik7CiB9CiAKK3RlbXBsYXRlIDx0eXBlbmFt
ZSBSZXN1bHRUeXBlLCBzaXplX3QuLi4gSXMsIHR5cGVuYW1lIC4uLkFyZ3M+Citjb25zdGV4cHIg
YXV0byBjb25zdHJ1Y3RGaXhlZFNpemVBcnJheVdpdGhBcmd1bWVudHNJbXBsKHN0ZDo6aW5kZXhf
c2VxdWVuY2U8SXMuLi4+LCBBcmdzJiYuLi4gYXJncykgLT4gc3RkOjphcnJheTxSZXN1bHRUeXBl
LCBzaXplb2YuLi4oSXMpPgoreworICAgIHJldHVybiB7ICgodm9pZClJcywgUmVzdWx0VHlwZSB7
IHN0ZDo6Zm9yd2FyZDxBcmdzPihhcmdzKS4uLiB9KS4uLiB9OworfQorCisvLyBDb25zdHJ1Y3Qg
YW4gc3RkOjphcnJheSB3aXRoIE4gZWxlbWVudHMgb2YgUmVzdWx0VHlwZSwgcGFzc2luZyBBcmdz
IHRvIGVhY2ggb2YgdGhlIE4gY29uc3RydWN0b3JzLgordGVtcGxhdGU8dHlwZW5hbWUgUmVzdWx0
VHlwZSwgc2l6ZV90IE4sIHR5cGVuYW1lIC4uLkFyZ3M+Citjb25zdGV4cHIgYXV0byBjb25zdHJ1
Y3RGaXhlZFNpemVBcnJheVdpdGhBcmd1bWVudHMoQXJncyYmLi4uIGFyZ3MpIC0+IGRlY2x0eXBl
KGF1dG8pCit7CisgICAgYXV0byB0dXBsZSA9IHN0ZDo6bWFrZV9pbmRleF9zZXF1ZW5jZTxOPigp
OworICAgIHJldHVybiBjb25zdHJ1Y3RGaXhlZFNpemVBcnJheVdpdGhBcmd1bWVudHNJbXBsPFJl
c3VsdFR5cGU+KHR1cGxlLCBzdGQ6OmZvcndhcmQ8QXJncz4oYXJncykuLi4pOworfQogCiB9IC8v
IG5hbWVzcGFjZSBXVEYKIApAQCAtNTE0LDMgKzUyNyw0IEBAIHVzaW5nIFdURjo6c2FmZUNhc3Q7
CiB1c2luZyBXVEY6OnRyeUJpbmFyeVNlYXJjaDsKIHVzaW5nIFdURjo6bWFrZVVuaXF1ZTsKIHVz
aW5nIFdURjo6bWFrZVVuaXF1ZVdpdGhvdXRGYXN0TWFsbG9jQ2hlY2s7Cit1c2luZyBXVEY6OmNv
bnN0cnVjdEZpeGVkU2l6ZUFycmF5V2l0aEFyZ3VtZW50czsKSW5kZXg6IFRvb2xzL0NoYW5nZUxv
Zwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBUb29scy9DaGFuZ2VMb2cJKHJldmlzaW9uIDI1ODM1MCkKKysrIFRv
b2xzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEyIEBACisyMDIwLTAzLTEy
ICBTYWFtIEJhcmF0aSAgPHNiYXJhdGlAYXBwbGUuY29tPgorCisgICAgICAgIEltcGxlbWVudCAx
R0Igb2YgZXhlY3V0YWJsZSBtZW1vcnkgb24gYXJtNjQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIwODQ5MAorCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCisgICAgICAgICogU2NyaXB0cy9ydW4tanNjLXN0cmVzcy10ZXN0czoK
KwogMjAyMC0wMy0xMiAgV2Vuc29uIEhzaWVoICA8d2Vuc29uX2hzaWVoQGFwcGxlLmNvbT4KIAog
ICAgICAgICBydW4td2Via2l0LXRlc3RzIC0tdXNlLWdwdS1wcm9jZXNzIHNob3VsZCBlbmFibGUg
R1BVIFByb2Nlc3MgZm9yIGNhbnZhcwpJbmRleDogVG9vbHMvU2NyaXB0cy9ydW4tanNjLXN0cmVz
cy10ZXN0cwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9TY3JpcHRzL3J1bi1qc2Mtc3RyZXNzLXRlc3Rz
CShyZXZpc2lvbiAyNTc4NjYpCisrKyBUb29scy9TY3JpcHRzL3J1bi1qc2Mtc3RyZXNzLXRlc3Rz
CSh3b3JraW5nIGNvcHkpCkBAIC01MCw2ICs1MCw3IEBAIFNDUklQVFNfUEFUSCA9IFRISVNfU0NS
SVBUX1BBVEguZGlybmFtZQogV0VCS0lUX1BBVEggPSBTQ1JJUFRTX1BBVEguZGlybmFtZS5kaXJu
YW1lCiBMQVlPVVRURVNUU19QQVRIID0gV0VCS0lUX1BBVEggKyAiTGF5b3V0VGVzdHMiCiBXQVNN
VEVTVFNfUEFUSCA9IFdFQktJVF9QQVRIICsgIkpTVGVzdHMvd2FzbSIKK0pFVFNUUkVBTTJfUEFU
SCA9IFdFQktJVF9QQVRIICsgIlBlcmZvcm1hbmNlVGVzdHMvSmV0U3RyZWFtMiIKIENIQUtSQVRF
U1RTX1BBVEggPSBXRUJLSVRfUEFUSCArICJKU1Rlc3RzL0NoYWtyYUNvcmUvdGVzdCIKIHJhaXNl
IHVubGVzcyBTQ1JJUFRTX1BBVEguYmFzZW5hbWUudG9fcyA9PSAiU2NyaXB0cyIKIHJhaXNlIHVu
bGVzcyBTQ1JJUFRTX1BBVEguZGlybmFtZS5iYXNlbmFtZS50b19zID09ICJUb29scyIKQEAgLTY2
OSw3ICs2NzAsNyBAQCBkZWYgcnVuTm9DSklUVmFsaWRhdGUoKm9wdGlvbmFsVGVzdFNwZWNpCiBl
bmQKIAogZGVmIHJ1bk5vQ0pJVFZhbGlkYXRlUGhhc2VzKCpvcHRpb25hbFRlc3RTcGVjaWZpY09w
dGlvbnMpCi0gICAgcnVuKCJuby1jaml0LXZhbGlkYXRlLXBoYXNlcyIsICItLXZhbGlkYXRlQnl0
ZWNvZGU9dHJ1ZSIsICItLXZhbGlkYXRlR3JhcGhBdEVhY2hQaGFzZT10cnVlIiwgIi0tdXNlU291
cmNlUHJvdmlkZXJDYWNoZT1mYWxzZSIsICooTk9fQ0pJVF9PUFRJT05TICsgb3B0aW9uYWxUZXN0
U3BlY2lmaWNPcHRpb25zKSkKKyAgICBydW4oIm5vLWNqaXQtdmFsaWRhdGUtcGhhc2VzIiwgIi0t
dmFsaWRhdGVCeXRlY29kZT10cnVlIiwgIi0tdmFsaWRhdGVHcmFwaEF0RWFjaFBoYXNlPXRydWUi
LCAiLS11c2VTb3VyY2VQcm92aWRlckNhY2hlPWZhbHNlIiwgIi0tdXNlUmFuZG9taXppbmdFeGVj
dXRhYmxlSXNsYW5kQWxsb2NhdGlvbj10cnVlIiwgKihOT19DSklUX09QVElPTlMgKyBvcHRpb25h
bFRlc3RTcGVjaWZpY09wdGlvbnMpKQogZW5kCiAKIGRlZiBydW5Ob0NKSVRDb2xsZWN0Q29udGlu
dW91c2x5KCpvcHRpb25hbFRlc3RTcGVjaWZpY09wdGlvbnMpCkBAIC03MDYsNyArNzA3LDcgQEAg
ZGVmIHJ1bkZUTE5vQ0pJVCgqb3B0aW9uYWxUZXN0U3BlY2lmaWNPcAogZW5kCiAKIGRlZiBydW5G
VExOb0NKSVRCM08wKCpvcHRpb25hbFRlc3RTcGVjaWZpY09wdGlvbnMpCi0gICAgcnVuKCJmdGwt
bm8tY2ppdC1iM28wIiwgIi0tdXNlQXJyYXlBbGxvY2F0aW9uUHJvZmlsaW5nPWZhbHNlIiwgIi0t
Zm9yY2VQb2x5UHJvdG89dHJ1ZSIsICooRlRMX09QVElPTlMgKyBOT19DSklUX09QVElPTlMgKyBC
M08wX09QVElPTlMgKyBGT1JDRV9MTElOVF9FWElUX09QVElPTlMgKyBvcHRpb25hbFRlc3RTcGVj
aWZpY09wdGlvbnMpKQorICAgIHJ1bigiZnRsLW5vLWNqaXQtYjNvMCIsICItLXVzZUFycmF5QWxs
b2NhdGlvblByb2ZpbGluZz1mYWxzZSIsICItLWZvcmNlUG9seVByb3RvPXRydWUiLCAiLS11c2VS
YW5kb21pemluZ0V4ZWN1dGFibGVJc2xhbmRBbGxvY2F0aW9uPXRydWUiLCAqKEZUTF9PUFRJT05T
ICsgTk9fQ0pJVF9PUFRJT05TICsgQjNPMF9PUFRJT05TICsgRk9SQ0VfTExJTlRfRVhJVF9PUFRJ
T05TICsgb3B0aW9uYWxUZXN0U3BlY2lmaWNPcHRpb25zKSkKIGVuZAogCiBkZWYgcnVuRlRMTm9D
SklUVmFsaWRhdGUoKm9wdGlvbmFsVGVzdFNwZWNpZmljT3B0aW9ucykKQEAgLTczNCw3ICs3MzUs
NyBAQCBkZWYgcnVuREZHRWFnZXJOb0NKSVRWYWxpZGF0ZSgqb3B0aW9uYWxUCiBlbmQKIAogZGVm
IHJ1bkZUTEVhZ2VyKCpvcHRpb25hbFRlc3RTcGVjaWZpY09wdGlvbnMpCi0gICAgcnVuKCJmdGwt
ZWFnZXIiLCAiLS1haXJGb3JjZUJyaWdnc0FsbG9jYXRvcj10cnVlIiwgIi0tZm9yY2VQb2x5UHJv
dG89dHJ1ZSIsICooRlRMX09QVElPTlMgKyBFQUdFUl9PUFRJT05TICsgQ09MTEVDVF9DT05USU5V
T1VTTFlfT1BUSU9OUyArIG9wdGlvbmFsVGVzdFNwZWNpZmljT3B0aW9ucykpCisgICAgcnVuKCJm
dGwtZWFnZXIiLCAiLS1haXJGb3JjZUJyaWdnc0FsbG9jYXRvcj10cnVlIiwgIi0tdXNlUmFuZG9t
aXppbmdFeGVjdXRhYmxlSXNsYW5kQWxsb2NhdGlvbj10cnVlIiwgIi0tZm9yY2VQb2x5UHJvdG89
dHJ1ZSIsICooRlRMX09QVElPTlMgKyBFQUdFUl9PUFRJT05TICsgQ09MTEVDVF9DT05USU5VT1VT
TFlfT1BUSU9OUyArIG9wdGlvbmFsVGVzdFNwZWNpZmljT3B0aW9ucykpCiBlbmQKIAogZGVmIHJ1
bkZUTEVhZ2VyV2F0Y2hkb2coKm9wdGlvbmFsVGVzdFNwZWNpZmljT3B0aW9ucykKQEAgLTc3NSw3
ICs3NzYsNyBAQCBkZWYgcnVuTm9DSklUKCpvcHRpb25hbFRlc3RTcGVjaWZpY09wdGlvCiBlbmQK
IAogZGVmIHJ1bkVhZ2VySmV0dGlzb25Ob0NKSVQoKm9wdGlvbmFsVGVzdFNwZWNpZmljT3B0aW9u
cykKLSAgICBydW4oImVhZ2VyLWpldHRpc29uLW5vLWNqaXQiLCAiLS1mb3JjZUNvZGVCbG9ja1Rv
SmV0dGlzb25EdWVUb09sZEFnZT10cnVlIiwgKihOT19DSklUX09QVElPTlMgKyBvcHRpb25hbFRl
c3RTcGVjaWZpY09wdGlvbnMpKQorICAgIHJ1bigiZWFnZXItamV0dGlzb24tbm8tY2ppdCIsICIt
LXVzZVJhbmRvbWl6aW5nRXhlY3V0YWJsZUlzbGFuZEFsbG9jYXRpb249dHJ1ZSIsICItLWZvcmNl
Q29kZUJsb2NrVG9KZXR0aXNvbkR1ZVRvT2xkQWdlPXRydWUiLCAqKE5PX0NKSVRfT1BUSU9OUyAr
IG9wdGlvbmFsVGVzdFNwZWNpZmljT3B0aW9ucykpCiBlbmQKIAogZGVmIHJ1blNoYWRvd0NoaWNr
ZW4oKm9wdGlvbmFsVGVzdFNwZWNpZmljT3B0aW9ucykKQEAgLTEwODMsMTYgKzEwODQsMzcgQEAg
ZGVmIHJ1bldlYkFzc2VtYmx5CiAgICAgcnVuKCJkZWZhdWx0LXdhc20iLCAiLW0iLCAqRlRMX09Q
VElPTlMpCiAgICAgaWYgJG1vZGUgIT0gInF1aWNrIgogICAgICAgICBydW4oIndhc20tbm8tY2pp
dC15ZXMtdGxzLWNvbnRleHQiLCAiLW0iLCAiLS11c2VGYXN0VExTRm9yV2FzbUNvbnRleHQ9dHJ1
ZSIsICooRlRMX09QVElPTlMgKyBOT19DSklUX09QVElPTlMpKQotICAgICAgICBydW4oIndhc20t
ZWFnZXIiLCAiLW0iLCAqKEZUTF9PUFRJT05TICsgRUFHRVJfT1BUSU9OUykpCi0gICAgICAgIHJ1
bigid2FzbS1lYWdlci1qZXR0aXNvbiIsICItbSIsICItLWZvcmNlQ29kZUJsb2NrVG9KZXR0aXNv
bkR1ZVRvT2xkQWdlPXRydWUiLCAqRlRMX09QVElPTlMpCisgICAgICAgIHJ1bigid2FzbS1lYWdl
ciIsICItbSIsICItLXVzZVJhbmRvbWl6aW5nRXhlY3V0YWJsZUlzbGFuZEFsbG9jYXRpb249dHJ1
ZSIsICooRlRMX09QVElPTlMgKyBFQUdFUl9PUFRJT05TKSkKKyAgICAgICAgcnVuKCJ3YXNtLWVh
Z2VyLWpldHRpc29uIiwgIi1tIiwgIi0tZm9yY2VDb2RlQmxvY2tUb0pldHRpc29uRHVlVG9PbGRB
Z2U9dHJ1ZSIsICItLXVzZVJhbmRvbWl6aW5nRXhlY3V0YWJsZUlzbGFuZEFsbG9jYXRpb249dHJ1
ZSIsICpGVExfT1BUSU9OUykKICAgICAgICAgcnVuKCJ3YXNtLW5vLXRscy1jb250ZXh0IiwgIi1t
IiwgIi0tdXNlRmFzdFRMU0Zvcldhc21Db250ZXh0PWZhbHNlIiwgKkZUTF9PUFRJT05TKQogICAg
ICAgICBydW4oIndhc20tc2xvdy1tZW1vcnkiLCAiLW0iLCAiLS11c2VXZWJBc3NlbWJseUZhc3RN
ZW1vcnk9ZmFsc2UiLCAqRlRMX09QVElPTlMpCiAgICAgICAgIHJ1bigid2FzbS1iMyIsICItbSIs
ICItLXVzZVdhc21MTEludD1mYWxzZSIsICItLXdhc21CQlFVc2VzQWlyPWZhbHNlIiwgKkZUTF9P
UFRJT05TKQotICAgICAgICBydW4oIndhc20tYWlyIiwgIi1tIiwgIi0tdXNlV2FzbUxMSW50PWZh
bHNlIiwgKkZUTF9PUFRJT05TKQorICAgICAgICBydW4oIndhc20tYWlyIiwgIi1tIiwgIi0tdXNl
V2FzbUxMSW50PWZhbHNlIiwgIi0tdXNlUmFuZG9taXppbmdFeGVjdXRhYmxlSXNsYW5kQWxsb2Nh
dGlvbj10cnVlIiwgKkZUTF9PUFRJT05TKQogICAgICAgICBydW4oIndhc20tY29sbGVjdC1jb250
aW51b3VzbHkiLCAiLW0iLCAiLS1jb2xsZWN0Q29udGludW91c2x5PXRydWUiLCAqRlRMX09QVElP
TlMpIGlmIHNob3VsZENvbGxlY3RDb250aW51b3VzbHk/CiAgICAgZW5kCiBlbmQKIAorZGVmIHJ1
bldlYkFzc2VtYmx5SmV0U3RyZWFtMgorICAgIHJldHVybiBpZiAhJGppdFRlc3RzCisgICAgcmV0
dXJuIGlmICEkaXNGVExQbGF0Zm9ybQorCisgICAgcHJlcGFyZUV4dHJhQWJzb2x1dGVGaWxlcyhK
RVRTVFJFQU0yX1BBVEgsIFsiSmV0U3RyZWFtRHJpdmVyLmpzIl0pCisgICAgcHJlcGFyZUV4dHJh
UmVsYXRpdmVGaWxlc1dpdGhCYXNlRGlyZWN0b3J5KERpcltKRVRTVFJFQU0yX1BBVEggKyAid2Fz
bSIgKyAiKi5qcyJdLm1hcCB7IHxmfCAid2FzbS8iICsgRmlsZS5iYXNlbmFtZShmKSB9LCAkY29s
bGVjdGlvbi5kaXJuYW1lLCAkZXh0cmFGaWxlc0Jhc2VEaXIuZGlybmFtZSkKKyAgICBwcmVwYXJl
RXh0cmFSZWxhdGl2ZUZpbGVzV2l0aEJhc2VEaXJlY3RvcnkoRGlyW0pFVFNUUkVBTTJfUEFUSCAr
ICJ3YXNtIiArICIqLndhc20iXS5tYXAgeyB8ZnwgIndhc20vIiArIEZpbGUuYmFzZW5hbWUoZikg
fSwgJGNvbGxlY3Rpb24uZGlybmFtZSwgJGV4dHJhRmlsZXNCYXNlRGlyLmRpcm5hbWUpCisKKyAg
ICBydW4oImRlZmF1bHQtd2FzbSIsICpGVExfT1BUSU9OUykKKyAgICBpZiAkbW9kZSAhPSAicXVp
Y2siCisgICAgICAgIHJ1bigid2FzbS1uby1jaml0LXllcy10bHMtY29udGV4dCIsICItLXVzZUZh
c3RUTFNGb3JXYXNtQ29udGV4dD10cnVlIiwgKihGVExfT1BUSU9OUyArIE5PX0NKSVRfT1BUSU9O
UykpCisgICAgICAgIHJ1bigid2FzbS1lYWdlciIsICItLXVzZVJhbmRvbWl6aW5nRXhlY3V0YWJs
ZUlzbGFuZEFsbG9jYXRpb249dHJ1ZSIsICooRlRMX09QVElPTlMgKyBFQUdFUl9PUFRJT05TKSkK
KyAgICAgICAgcnVuKCJ3YXNtLWVhZ2VyLWpldHRpc29uIiwgIi0tZm9yY2VDb2RlQmxvY2tUb0pl
dHRpc29uRHVlVG9PbGRBZ2U9dHJ1ZSIsICpGVExfT1BUSU9OUykKKyAgICAgICAgcnVuKCJ3YXNt
LW5vLXRscy1jb250ZXh0IiwgIi0tdXNlRmFzdFRMU0Zvcldhc21Db250ZXh0PWZhbHNlIiwgKkZU
TF9PUFRJT05TKQorICAgICAgICBydW4oIndhc20tc2xvdy1tZW1vcnkiLCAiLS11c2VXZWJBc3Nl
bWJseUZhc3RNZW1vcnk9ZmFsc2UiLCAqRlRMX09QVElPTlMpCisgICAgICAgIHJ1bigid2FzbS1i
MyIsICItLXVzZVdhc21MTEludD1mYWxzZSIsICItLXdhc21CQlFVc2VzQWlyPWZhbHNlIiwgKkZU
TF9PUFRJT05TKQorICAgICAgICBydW4oIndhc20tYWlyIiwgIi0tdXNlV2FzbUxMSW50PWZhbHNl
IiwgIi0tdXNlUmFuZG9taXppbmdFeGVjdXRhYmxlSXNsYW5kQWxsb2NhdGlvbj10cnVlIiwgKkZU
TF9PUFRJT05TKQorICAgICAgICBydW4oIndhc20tY29sbGVjdC1jb250aW51b3VzbHkiLCAiLS1j
b2xsZWN0Q29udGludW91c2x5PXRydWUiLCAqRlRMX09QVElPTlMpIGlmIHNob3VsZENvbGxlY3RD
b250aW51b3VzbHk/CisgICAgZW5kCitlbmQKKwogZGVmIHJ1bldlYkFzc2VtYmx5U3VpdGUoKm9w
dGlvbmFsVGVzdFNwZWNpZmljT3B0aW9ucykKICAgICByZXR1cm4gaWYgISRqaXRUZXN0cwogICAg
IHJldHVybiBpZiAhJGlzRlRMUGxhdGZvcm0KQEAgLTExMDMsMTEgKzExMjUsMTEgQEAgZGVmIHJ1
bldlYkFzc2VtYmx5U3VpdGUoKm9wdGlvbmFsVGVzdFNwZQogICAgIGlmICRtb2RlICE9ICJxdWlj
ayIKICAgICAgICAgcnVuKCJ3YXNtLW5vLWNqaXQteWVzLXRscy1jb250ZXh0IiwgIi1tIiwgIi0t
dXNlRmFzdFRMU0Zvcldhc21Db250ZXh0PXRydWUiLCAqKEZUTF9PUFRJT05TICsgTk9fQ0pJVF9P
UFRJT05TICsgb3B0aW9uYWxUZXN0U3BlY2lmaWNPcHRpb25zKSkKICAgICAgICAgcnVuKCJ3YXNt
LWVhZ2VyIiwgIi1tIiwgKihGVExfT1BUSU9OUyArIEVBR0VSX09QVElPTlMgKyBvcHRpb25hbFRl
c3RTcGVjaWZpY09wdGlvbnMpKQotICAgICAgICBydW4oIndhc20tZWFnZXItamV0dGlzb24iLCAi
LW0iLCAiLS1mb3JjZUNvZGVCbG9ja1RvSmV0dGlzb25EdWVUb09sZEFnZT10cnVlIiwgKihGVExf
T1BUSU9OUyArIG9wdGlvbmFsVGVzdFNwZWNpZmljT3B0aW9ucykpCisgICAgICAgIHJ1bigid2Fz
bS1lYWdlci1qZXR0aXNvbiIsICItbSIsICItLWZvcmNlQ29kZUJsb2NrVG9KZXR0aXNvbkR1ZVRv
T2xkQWdlPXRydWUiLCAiLS11c2VSYW5kb21pemluZ0V4ZWN1dGFibGVJc2xhbmRBbGxvY2F0aW9u
PXRydWUiLCAqKEZUTF9PUFRJT05TICsgb3B0aW9uYWxUZXN0U3BlY2lmaWNPcHRpb25zKSkKICAg
ICAgICAgcnVuKCJ3YXNtLW5vLXRscy1jb250ZXh0IiwgIi1tIiwgIi0tdXNlRmFzdFRMU0Zvcldh
c21Db250ZXh0PWZhbHNlIiwgKihGVExfT1BUSU9OUyArIG9wdGlvbmFsVGVzdFNwZWNpZmljT3B0
aW9ucykpCiAgICAgICAgIHJ1bigid2FzbS1zbG93LW1lbW9yeSIsICItbSIsICItLXVzZVdlYkFz
c2VtYmx5RmFzdE1lbW9yeT1mYWxzZSIsICooRlRMX09QVElPTlMgKyBvcHRpb25hbFRlc3RTcGVj
aWZpY09wdGlvbnMpKQogICAgICAgICBydW4oIndhc20tYjMiLCAiLW0iLCAiLS11c2VXYXNtTExJ
bnQ9ZmFsc2UiLCAiLS13YXNtQkJRVXNlc0Fpcj1mYWxzZSIsICooRlRMX09QVElPTlMgKyBvcHRp
b25hbFRlc3RTcGVjaWZpY09wdGlvbnMpKQotICAgICAgICBydW4oIndhc20tYWlyIiwgIi1tIiwg
Ii0tdXNlV2FzbUxMSW50PWZhbHNlIiwgKihGVExfT1BUSU9OUyArIG9wdGlvbmFsVGVzdFNwZWNp
ZmljT3B0aW9ucykpCisgICAgICAgIHJ1bigid2FzbS1haXIiLCAiLW0iLCAiLS11c2VXYXNtTExJ
bnQ9ZmFsc2UiLCAiLS11c2VSYW5kb21pemluZ0V4ZWN1dGFibGVJc2xhbmRBbGxvY2F0aW9uPXRy
dWUiLCAqKEZUTF9PUFRJT05TICsgb3B0aW9uYWxUZXN0U3BlY2lmaWNPcHRpb25zKSkKICAgICAg
ICAgcnVuKCJ3YXNtLWNvbGxlY3QtY29udGludW91c2x5IiwgIi1tIiwgIi0tY29sbGVjdENvbnRp
bnVvdXNseT10cnVlIiwgKihGVExfT1BUSU9OUyArIG9wdGlvbmFsVGVzdFNwZWNpZmljT3B0aW9u
cykpIGlmIHNob3VsZENvbGxlY3RDb250aW51b3VzbHk/CiAgICAgZW5kCiBlbmQKQEAgLTExMzMs
MTEgKzExNTUsMTEgQEAgZGVmIHJ1bldlYkFzc2VtYmx5V2l0aEhhcm5lc3MoKm9wdGlvbmFsVAog
ICAgIGlmICRtb2RlICE9ICJxdWljayIKICAgICAgICAgcnVuSGFybmVzc1Rlc3QoIndhc20tbm8t
Y2ppdC15ZXMtdGxzLWNvbnRleHQiLCAiLS11c2VGYXN0VExTRm9yV2FzbUNvbnRleHQ9dHJ1ZSIs
ICooRlRMX09QVElPTlMgKyBOT19DSklUX09QVElPTlMgKyBvcHRpb25hbFRlc3RTcGVjaWZpY09w
dGlvbnMpKQogICAgICAgICBydW5IYXJuZXNzVGVzdCgid2FzbS1lYWdlciIsICooRlRMX09QVElP
TlMgKyBFQUdFUl9PUFRJT05TICsgb3B0aW9uYWxUZXN0U3BlY2lmaWNPcHRpb25zKSkKLSAgICAg
ICAgcnVuSGFybmVzc1Rlc3QoIndhc20tZWFnZXItamV0dGlzb24iLCAiLS1mb3JjZUNvZGVCbG9j
a1RvSmV0dGlzb25EdWVUb09sZEFnZT10cnVlIiwgKihGVExfT1BUSU9OUyArIG9wdGlvbmFsVGVz
dFNwZWNpZmljT3B0aW9ucykpCisgICAgICAgIHJ1bkhhcm5lc3NUZXN0KCJ3YXNtLWVhZ2VyLWpl
dHRpc29uIiwgIi0tZm9yY2VDb2RlQmxvY2tUb0pldHRpc29uRHVlVG9PbGRBZ2U9dHJ1ZSIsICIt
LXVzZVJhbmRvbWl6aW5nRXhlY3V0YWJsZUlzbGFuZEFsbG9jYXRpb249dHJ1ZSIsICooRlRMX09Q
VElPTlMgKyBvcHRpb25hbFRlc3RTcGVjaWZpY09wdGlvbnMpKQogICAgICAgICBydW5IYXJuZXNz
VGVzdCgid2FzbS1uby10bHMtY29udGV4dCIsICItLXVzZUZhc3RUTFNGb3JXYXNtQ29udGV4dD1m
YWxzZSIsICooRlRMX09QVElPTlMgKyBvcHRpb25hbFRlc3RTcGVjaWZpY09wdGlvbnMpKQogICAg
ICAgICBydW5IYXJuZXNzVGVzdCgid2FzbS1zbG93LW1lbW9yeSIsICItLXVzZVdlYkFzc2VtYmx5
RmFzdE1lbW9yeT1mYWxzZSIsICooRlRMX09QVElPTlMgKyBvcHRpb25hbFRlc3RTcGVjaWZpY09w
dGlvbnMpKQogICAgICAgICBydW5IYXJuZXNzVGVzdCgid2FzbS1iMyIsICItLXVzZVdhc21MTElu
dD1mYWxzZSIsICItLXdhc21CQlFVc2VzQWlyPWZhbHNlIiwgKihGVExfT1BUSU9OUyArIG9wdGlv
bmFsVGVzdFNwZWNpZmljT3B0aW9ucykpCi0gICAgICAgIHJ1bkhhcm5lc3NUZXN0KCJ3YXNtLW5v
LWFpciIsICItLXVzZVdhc21MTEludD1mYWxzZSIsICooRlRMX09QVElPTlMgKyBvcHRpb25hbFRl
c3RTcGVjaWZpY09wdGlvbnMpKQorICAgICAgICBydW5IYXJuZXNzVGVzdCgid2FzbS1uby1haXIi
LCAiLS11c2VXYXNtTExJbnQ9ZmFsc2UiLCAiLS11c2VSYW5kb21pemluZ0V4ZWN1dGFibGVJc2xh
bmRBbGxvY2F0aW9uPXRydWUiLCAqKEZUTF9PUFRJT05TICsgb3B0aW9uYWxUZXN0U3BlY2lmaWNP
cHRpb25zKSkKICAgICAgICAgcnVuSGFybmVzc1Rlc3QoIndhc20tY29sbGVjdC1jb250aW51b3Vz
bHkiLCAiLS1jb2xsZWN0Q29udGludW91c2x5PXRydWUiLCAqKEZUTF9PUFRJT05TICsgb3B0aW9u
YWxUZXN0U3BlY2lmaWNPcHRpb25zKSkgaWYgc2hvdWxkQ29sbGVjdENvbnRpbnVvdXNseT8KICAg
ICBlbmQKIGVuZApAQCAtMTE1NCwxMCArMTE3NiwxMCBAQCBkZWYgcnVuV2ViQXNzZW1ibHlFbXNj
cmlwdGVuKG1vZGUpCiAgICAgcnVuKCJkZWZhdWx0LXdhc20iLCAqRlRMX09QVElPTlMpCiAgICAg
aWYgJG1vZGUgIT0gInF1aWNrIgogICAgICAgICBydW4oIndhc20tbm8tY2ppdC15ZXMtdGxzLWNv
bnRleHQiLCAiLS11c2VGYXN0VExTRm9yV2FzbUNvbnRleHQ9dHJ1ZSIsICooRlRMX09QVElPTlMg
KyBOT19DSklUX09QVElPTlMpKQotICAgICAgICBydW4oIndhc20tZWFnZXItamV0dGlzb24iLCAi
LS1mb3JjZUNvZGVCbG9ja1RvSmV0dGlzb25EdWVUb09sZEFnZT10cnVlIiwgKkZUTF9PUFRJT05T
KQorICAgICAgICBydW4oIndhc20tZWFnZXItamV0dGlzb24iLCAiLS1mb3JjZUNvZGVCbG9ja1Rv
SmV0dGlzb25EdWVUb09sZEFnZT10cnVlIiwgIi0tdXNlUmFuZG9taXppbmdFeGVjdXRhYmxlSXNs
YW5kQWxsb2NhdGlvbj10cnVlIiwgKkZUTF9PUFRJT05TKQogICAgICAgICBydW4oIndhc20tbm8t
dGxzLWNvbnRleHQiLCAiLS11c2VGYXN0VExTRm9yV2FzbUNvbnRleHQ9ZmFsc2UiLCAqRlRMX09Q
VElPTlMpCiAgICAgICAgIHJ1bigid2FzbS1iMyIsICItLXVzZVdhc21MTEludD1mYWxzZSIsICIt
LXdhc21CQlFVc2VzQWlyPWZhbHNlIiwgKkZUTF9PUFRJT05TKQotICAgICAgICBydW4oIndhc20t
YWlyIiwgIi0tdXNlV2FzbUxMSW50PWZhbHNlIiwgKkZUTF9PUFRJT05TKQorICAgICAgICBydW4o
Indhc20tYWlyIiwgIi0tdXNlV2FzbUxMSW50PWZhbHNlIiwgIi0tdXNlUmFuZG9taXppbmdFeGVj
dXRhYmxlSXNsYW5kQWxsb2NhdGlvbj10cnVlIiwgKkZUTF9PUFRJT05TKQogICAgICAgICBydW4o
Indhc20tY29sbGVjdC1jb250aW51b3VzbHkiLCAiLS1jb2xsZWN0Q29udGludW91c2x5PXRydWUi
LCAqRlRMX09QVElPTlMpIGlmIHNob3VsZENvbGxlY3RDb250aW51b3VzbHk/CiAgICAgZW5kCiBl
bmQKQEAgLTExODAsMTAgKzEyMDIsMTAgQEAgZGVmIHJ1bldlYkFzc2VtYmx5U3BlY1Rlc3QobW9k
ZSkKICAgICBydW5XaXRoT3V0cHV0SGFuZGxlcigiZGVmYXVsdC13YXNtIiwgbm9pc3lPdXRwdXRI
YW5kbGVyLCAiLi4vc3BlYy1oYXJuZXNzLmpzIiwgKkZUTF9PUFRJT05TKQogICAgIGlmICRtb2Rl
ICE9ICJxdWljayIKICAgICAgIHJ1bldpdGhPdXRwdXRIYW5kbGVyKCJ3YXNtLW5vLWNqaXQteWVz
LXRscy1jb250ZXh0Iiwgbm9pc3lPdXRwdXRIYW5kbGVyLCAiLi4vc3BlYy1oYXJuZXNzLmpzIiwg
ICItLXVzZUZhc3RUTFNGb3JXYXNtQ29udGV4dD10cnVlIiwgKihGVExfT1BUSU9OUyArIE5PX0NK
SVRfT1BUSU9OUykpCi0gICAgICBydW5XaXRoT3V0cHV0SGFuZGxlcigid2FzbS1lYWdlci1qZXR0
aXNvbiIsIG5vaXN5T3V0cHV0SGFuZGxlciwgIi4uL3NwZWMtaGFybmVzcy5qcyIsICItLWZvcmNl
Q29kZUJsb2NrVG9KZXR0aXNvbkR1ZVRvT2xkQWdlPXRydWUiLCAqRlRMX09QVElPTlMpCisgICAg
ICBydW5XaXRoT3V0cHV0SGFuZGxlcigid2FzbS1lYWdlci1qZXR0aXNvbiIsIG5vaXN5T3V0cHV0
SGFuZGxlciwgIi4uL3NwZWMtaGFybmVzcy5qcyIsICItLWZvcmNlQ29kZUJsb2NrVG9KZXR0aXNv
bkR1ZVRvT2xkQWdlPXRydWUiLCAiLS11c2VSYW5kb21pemluZ0V4ZWN1dGFibGVJc2xhbmRBbGxv
Y2F0aW9uPXRydWUiLCAqRlRMX09QVElPTlMpCiAgICAgICBydW5XaXRoT3V0cHV0SGFuZGxlcigi
d2FzbS1uby10bHMtY29udGV4dCIsIG5vaXN5T3V0cHV0SGFuZGxlciwgIi4uL3NwZWMtaGFybmVz
cy5qcyIsICItLXVzZUZhc3RUTFNGb3JXYXNtQ29udGV4dD1mYWxzZSIsICpGVExfT1BUSU9OUykK
ICAgICAgIHJ1bldpdGhPdXRwdXRIYW5kbGVyKCJ3YXNtLWIzIiwgbm9pc3lPdXRwdXRIYW5kbGVy
LCAiLi4vc3BlYy1oYXJuZXNzLmpzIiwgIi0tdXNlV2FzbUxMSW50PWZhbHNlIiwgIi0td2FzbUJC
UVVzZXNBaXI9ZmFsc2UiLCAqRlRMX09QVElPTlMpCi0gICAgICBydW5XaXRoT3V0cHV0SGFuZGxl
cigid2FzbS1haXIiLCBub2lzeU91dHB1dEhhbmRsZXIsICIuLi9zcGVjLWhhcm5lc3MuanMiLCAi
LS11c2VXYXNtTExJbnQ9ZmFsc2UiLCAqRlRMX09QVElPTlMpCisgICAgICBydW5XaXRoT3V0cHV0
SGFuZGxlcigid2FzbS1haXIiLCBub2lzeU91dHB1dEhhbmRsZXIsICIuLi9zcGVjLWhhcm5lc3Mu
anMiLCAiLS11c2VXYXNtTExJbnQ9ZmFsc2UiLCAiLS11c2VSYW5kb21pemluZ0V4ZWN1dGFibGVJ
c2xhbmRBbGxvY2F0aW9uPXRydWUiLCAqRlRMX09QVElPTlMpCiAgICAgICBydW5XaXRoT3V0cHV0
SGFuZGxlcigid2FzbS1jb2xsZWN0LWNvbnRpbnVvdXNseSIsIG5vaXN5T3V0cHV0SGFuZGxlciwg
Ii4uL3NwZWMtaGFybmVzcy5qcyIsICItLWNvbGxlY3RDb250aW51b3VzbHk9dHJ1ZSIsICpGVExf
T1BUSU9OUykgaWYgc2hvdWxkQ29sbGVjdENvbnRpbnVvdXNseT8KICAgICBlbmQKIGVuZApAQCAt
MTM1MiwxNyArMTM3NCwyMSBAQCBkZWYgbm9Ob0xMSW50UnVuTGF5b3V0VGVzdAogICAgIGVuZAog
ZW5kCiAKLWRlZiBwcmVwYXJlRXh0cmFSZWxhdGl2ZUZpbGVzKGV4dHJhRmlsZXMsIGRlc3RpbmF0
aW9uKQorZGVmIHByZXBhcmVFeHRyYVJlbGF0aXZlRmlsZXNXaXRoQmFzZURpcmVjdG9yeShleHRy
YUZpbGVzLCBkZXN0aW5hdGlvbiwgYmFzZURpcmVjdG9yeSkKICAgICBEaXIuY2hkaXIoJG91dHB1
dERpcikgewogICAgICAgICBleHRyYUZpbGVzLmVhY2ggewogICAgICAgICAgICAgfCBmaWxlIHwK
ICAgICAgICAgICAgIGRlc3QgPSBkZXN0aW5hdGlvbiArIGZpbGUKICAgICAgICAgICAgIEZpbGVV
dGlscy5ta2Rpcl9wKGRlc3QuZGlybmFtZSkKLSAgICAgICAgICAgIEZpbGVVdGlscy5jcCAkZXh0
cmFGaWxlc0Jhc2VEaXIgKyBmaWxlLCBkZXN0CisgICAgICAgICAgICBGaWxlVXRpbHMuY3AgYmFz
ZURpcmVjdG9yeSArIGZpbGUsIGRlc3QKICAgICAgICAgfQogICAgIH0KIGVuZAogCitkZWYgcHJl
cGFyZUV4dHJhUmVsYXRpdmVGaWxlcyhleHRyYUZpbGVzLCBkZXN0aW5hdGlvbikKKyAgICBwcmVw
YXJlRXh0cmFSZWxhdGl2ZUZpbGVzV2l0aEJhc2VEaXJlY3RvcnkoZXh0cmFGaWxlcywgZGVzdGlu
YXRpb24sICRleHRyYUZpbGVzQmFzZURpcikKK2VuZAorCiBkZWYgYmFzZURpckZvckNvbGxlY3Rp
b24oY29sbGVjdGlvbk5hbWUpCiAgICAgUGF0aG5hbWUoIi50ZXN0cyIpICsgY29sbGVjdGlvbk5h
bWUKIGVuZAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>393406</attachid>
            <date>2020-03-12 13:14:46 -0700</date>
            <delta_ts>2020-03-12 14:23:14 -0700</delta_ts>
            <desc>patch</desc>
            <filename>c-backup.diff</filename>
            <type>text/plain</type>
            <size>118745</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IEpTVGVzdHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEpTVGVzdHMvQ2hhbmdlTG9n
CShyZXZpc2lvbiAyNTgzNTApCisrKyBKU1Rlc3RzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpA
QCAtMSwzICsxLDE0IEBACisyMDIwLTAzLTEyICBTYWFtIEJhcmF0aSAgPHNiYXJhdGlAYXBwbGUu
Y29tPgorCisgICAgICAgIEltcGxlbWVudCAxR0Igb2YgZXhlY3V0YWJsZSBtZW1vcnkgb24gYXJt
NjQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIwODQ5
MAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFJ1biBK
ZXRTdHJlYW0yIHdhc20gdGVzdHMuCisKKyAgICAgICAgKiB3YXNtLnlhbWw6CisKIDIwMjAtMDMt
MTEgIEtlaXRoIE1pbGxlciAgPGtlaXRoX21pbGxlckBhcHBsZS5jb20+CiAKICAgICAgICAgVGVz
dDI2Mi1ydW5uZXIgc2hvdWxkIGFsd2F5cyBjb25zaWRlciBjcmFzaGVzIGFzIG5ldyBmYWlsdXJl
cwpJbmRleDogSlNUZXN0cy93YXNtLnlhbWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSlNUZXN0cy93YXNtLnlh
bWwJKHJldmlzaW9uIDI1ODM1MCkKKysrIEpTVGVzdHMvd2FzbS55YW1sCSh3b3JraW5nIGNvcHkp
CkBAIC0yMzEsMyArMjMxLDYgQEAKIC0gcGF0aDogd2FzbS9tb2R1bGVzL3J1bi1mcm9tLXdhc20u
d2FzbQogICBjbWQ6IHJ1bldlYkFzc2VtYmx5CiAKKy0gcGF0aDogLi4vUGVyZm9ybWFuY2VUZXN0
cy9KZXRTdHJlYW0yL3dhc20tY2xpLmpzCisgIGNtZDogcnVuV2ViQXNzZW1ibHlKZXRTdHJlYW0y
IHVubGVzcyBwYXJzZVJ1bkNvbW1hbmRzCisKSW5kZXg6IFBlcmZvcm1hbmNlVGVzdHMvQ2hhbmdl
TG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFBlcmZvcm1hbmNlVGVzdHMvQ2hhbmdlTG9nCShyZXZpc2lvbiAy
NTgzNTApCisrKyBQZXJmb3JtYW5jZVRlc3RzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAt
MSwzICsxLDI0IEBACisyMDIwLTAzLTEyICBTYWFtIEJhcmF0aSAgPHNiYXJhdGlAYXBwbGUuY29t
PgorCisgICAgICAgIEltcGxlbWVudCAxR0Igb2YgZXhlY3V0YWJsZSBtZW1vcnkgb24gYXJtNjQK
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIwODQ5MAor
CisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogSmV0U3Ry
ZWFtMi9KZXRTdHJlYW1Ecml2ZXIuanM6CisgICAgICAgIChEcml2ZXIucHJvdG90eXBlLmR1bXBK
U09OUmVzdWx0c0lmTmVlZGVkKToKKyAgICAgICAgKERlZmF1bHRCZW5jaG1hcmsucHJvdG90eXBl
LnVwZGF0ZVVJQWZ0ZXJSdW4pOgorICAgICAgICAoRGVmYXVsdEJlbmNobWFyayk6CisgICAgICAg
IChXU0xCZW5jaG1hcmsucHJvdG90eXBlLnVwZGF0ZVVJQWZ0ZXJSdW4pOgorICAgICAgICAoV1NM
QmVuY2htYXJrKToKKyAgICAgICAgKFdhc21CZW5jaG1hcmsucHJvdG90eXBlLnVwZGF0ZVVJQWZ0
ZXJSdW4pOgorICAgICAgICAoV2FzbUJlbmNobWFyayk6CisgICAgICAgIChEcml2ZXIuYXN5bmMg
ZmV0Y2hSZXNvdXJjZXMuc3RhdHVzRWxlbWVudC5pbm5lckhUTUwuYS5ocmVmLnN0cmluZ19hcHBl
YXJlZF9oZXJlKToKKyAgICAgICAgKERyaXZlci5wcm90b3R5cGUuYXN5bmMgZmV0Y2hSZXNvdXJj
ZXMpOgorICAgICAgICAqIEpldFN0cmVhbTIvd2FzbS1jbGkuanM6IEFkZGVkLgorICAgICAgICAo
Y29uc29sZS5sb2cpOgorICAgICAgICAoYXN5bmMgcnVuSmV0U3RyZWFtKToKKwogMjAyMC0wMi0x
NyAgRG9uIE9sbXN0ZWFkICA8ZG9uLm9sbXN0ZWFkQHNvbnkuY29tPgogCiAgICAgICAgIFtDTWFr
ZV0gVXNlIGJ1aWx0aW4gdGFyZ2V0cwpJbmRleDogUGVyZm9ybWFuY2VUZXN0cy9KZXRTdHJlYW0y
L0pldFN0cmVhbURyaXZlci5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBQZXJmb3JtYW5jZVRlc3RzL0pldFN0
cmVhbTIvSmV0U3RyZWFtRHJpdmVyLmpzCShyZXZpc2lvbiAyNTgzNTApCisrKyBQZXJmb3JtYW5j
ZVRlc3RzL0pldFN0cmVhbTIvSmV0U3RyZWFtRHJpdmVyLmpzCSh3b3JraW5nIGNvcHkpCkBAIC00
MDksOSArNDA5LDkgQEAgY2xhc3MgRHJpdmVyIHsKICAgICBkdW1wSlNPTlJlc3VsdHNJZk5lZWRl
ZCgpCiAgICAgewogICAgICAgICBpZiAoZHVtcEpTT05SZXN1bHRzKSB7Ci0gICAgICAgICAgICBw
cmludCgiXG4iKTsKLSAgICAgICAgICAgIHByaW50KHRoaXMucmVzdWx0c0pTT04oKSk7Ci0gICAg
ICAgICAgICBwcmludCgiXG4iKTsKKyAgICAgICAgICAgIGNvbnNvbGUubG9nKCJcbiIpOworICAg
ICAgICAgICAgY29uc29sZS5sb2codGhpcy5yZXN1bHRzSlNPTigpKTsKKyAgICAgICAgICAgIGNv
bnNvbGUubG9nKCJcbiIpOwogICAgICAgICB9CiAgICAgfQogCkBAIC03MjUsMTUgKzcyNSwxNSBA
QCBjbGFzcyBEZWZhdWx0QmVuY2htYXJrIGV4dGVuZHMgQmVuY2htYXJrCiAgICAgICAgICAgICBy
ZXR1cm47CiAgICAgICAgIH0KIAotICAgICAgICBwcmludCgiICAgIFN0YXJ0dXA6IiwgdWlGcmll
bmRseU51bWJlcih0aGlzLmZpcnN0SXRlcmF0aW9uKSk7Ci0gICAgICAgIHByaW50KCIgICAgV29y
c3QgQ2FzZToiLCB1aUZyaWVuZGx5TnVtYmVyKHRoaXMud29yc3Q0KSk7Ci0gICAgICAgIHByaW50
KCIgICAgQXZlcmFnZToiLCB1aUZyaWVuZGx5TnVtYmVyKHRoaXMuYXZlcmFnZSkpOwotICAgICAg
ICBwcmludCgiICAgIFNjb3JlOiIsIHVpRnJpZW5kbHlOdW1iZXIodGhpcy5zY29yZSkpOworICAg
ICAgICBjb25zb2xlLmxvZygiICAgIFN0YXJ0dXA6IiwgdWlGcmllbmRseU51bWJlcih0aGlzLmZp
cnN0SXRlcmF0aW9uKSk7CisgICAgICAgIGNvbnNvbGUubG9nKCIgICAgV29yc3QgQ2FzZToiLCB1
aUZyaWVuZGx5TnVtYmVyKHRoaXMud29yc3Q0KSk7CisgICAgICAgIGNvbnNvbGUubG9nKCIgICAg
QXZlcmFnZToiLCB1aUZyaWVuZGx5TnVtYmVyKHRoaXMuYXZlcmFnZSkpOworICAgICAgICBjb25z
b2xlLmxvZygiICAgIFNjb3JlOiIsIHVpRnJpZW5kbHlOdW1iZXIodGhpcy5zY29yZSkpOwogICAg
ICAgICBpZiAoUkFNaWZpY2F0aW9uKSB7Ci0gICAgICAgICAgICBwcmludCgiICAgIEN1cnJlbnQg
Rm9vdHByaW50OiIsIHVpRnJpZW5kbHlOdW1iZXIodGhpcy5jdXJyZW50Rm9vdHByaW50KSk7Ci0g
ICAgICAgICAgICBwcmludCgiICAgIFBlYWsgRm9vdHByaW50OiIsIHVpRnJpZW5kbHlOdW1iZXIo
dGhpcy5wZWFrRm9vdHByaW50KSk7CisgICAgICAgICAgICBjb25zb2xlLmxvZygiICAgIEN1cnJl
bnQgRm9vdHByaW50OiIsIHVpRnJpZW5kbHlOdW1iZXIodGhpcy5jdXJyZW50Rm9vdHByaW50KSk7
CisgICAgICAgICAgICBjb25zb2xlLmxvZygiICAgIFBlYWsgRm9vdHByaW50OiIsIHVpRnJpZW5k
bHlOdW1iZXIodGhpcy5wZWFrRm9vdHByaW50KSk7CiAgICAgICAgIH0KLSAgICAgICAgcHJpbnQo
IiAgICBXYWxsIHRpbWU6IiwgdWlGcmllbmRseUR1cmF0aW9uKG5ldyBEYXRlKHRoaXMuZW5kVGlt
ZSAtIHRoaXMuc3RhcnRUaW1lKSkpOworICAgICAgICBjb25zb2xlLmxvZygiICAgIFdhbGwgdGlt
ZToiLCB1aUZyaWVuZGx5RHVyYXRpb24obmV3IERhdGUodGhpcy5lbmRUaW1lIC0gdGhpcy5zdGFy
dFRpbWUpKSk7CiAgICAgfQogfQogCkBAIC04MTksMTQgKzgxOSwxNCBAQCBjbGFzcyBXU0xCZW5j
aG1hcmsgZXh0ZW5kcyBCZW5jaG1hcmsgewogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9
CiAKLSAgICAgICAgcHJpbnQoIiAgICBTdGRsaWI6IiwgdWlGcmllbmRseU51bWJlcih0aGlzLnN0
ZGxpYikpOwotICAgICAgICBwcmludCgiICAgIFRlc3RzOiIsIHVpRnJpZW5kbHlOdW1iZXIodGhp
cy5tYWluUnVuKSk7Ci0gICAgICAgIHByaW50KCIgICAgU2NvcmU6IiwgdWlGcmllbmRseU51bWJl
cih0aGlzLnNjb3JlKSk7CisgICAgICAgIGNvbnNvbGUubG9nKCIgICAgU3RkbGliOiIsIHVpRnJp
ZW5kbHlOdW1iZXIodGhpcy5zdGRsaWIpKTsKKyAgICAgICAgY29uc29sZS5sb2coIiAgICBUZXN0
czoiLCB1aUZyaWVuZGx5TnVtYmVyKHRoaXMubWFpblJ1bikpOworICAgICAgICBjb25zb2xlLmxv
ZygiICAgIFNjb3JlOiIsIHVpRnJpZW5kbHlOdW1iZXIodGhpcy5zY29yZSkpOwogICAgICAgICBp
ZiAoUkFNaWZpY2F0aW9uKSB7Ci0gICAgICAgICAgICBwcmludCgiICAgIEN1cnJlbnQgRm9vdHBy
aW50OiIsIHVpRnJpZW5kbHlOdW1iZXIodGhpcy5jdXJyZW50Rm9vdHByaW50KSk7Ci0gICAgICAg
ICAgICBwcmludCgiICAgIFBlYWsgRm9vdHByaW50OiIsIHVpRnJpZW5kbHlOdW1iZXIodGhpcy5w
ZWFrRm9vdHByaW50KSk7CisgICAgICAgICAgICBjb25zb2xlLmxvZygiICAgIEN1cnJlbnQgRm9v
dHByaW50OiIsIHVpRnJpZW5kbHlOdW1iZXIodGhpcy5jdXJyZW50Rm9vdHByaW50KSk7CisgICAg
ICAgICAgICBjb25zb2xlLmxvZygiICAgIFBlYWsgRm9vdHByaW50OiIsIHVpRnJpZW5kbHlOdW1i
ZXIodGhpcy5wZWFrRm9vdHByaW50KSk7CiAgICAgICAgIH0KLSAgICAgICAgcHJpbnQoIiAgICBX
YWxsIHRpbWU6IiwgdWlGcmllbmRseUR1cmF0aW9uKG5ldyBEYXRlKHRoaXMuZW5kVGltZSAtIHRo
aXMuc3RhcnRUaW1lKSkpOworICAgICAgICBjb25zb2xlLmxvZygiICAgIFdhbGwgdGltZToiLCB1
aUZyaWVuZGx5RHVyYXRpb24obmV3IERhdGUodGhpcy5lbmRUaW1lIC0gdGhpcy5zdGFydFRpbWUp
KSk7CiAgICAgfQogfTsKIApAQCAtOTc1LDEzICs5NzUsMTMgQEAgY2xhc3MgV2FzbUJlbmNobWFy
ayBleHRlbmRzIEJlbmNobWFyayB7CiAgICAgICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJ
ZCh0aGlzLnNjb3JlSUQpLmlubmVySFRNTCA9IHVpRnJpZW5kbHlOdW1iZXIodGhpcy5zY29yZSk7
CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KLSAgICAgICAgcHJpbnQoIiAgICBTdGFy
dHVwOiIsIHVpRnJpZW5kbHlOdW1iZXIodGhpcy5zdGFydHVwVGltZSkpOwotICAgICAgICBwcmlu
dCgiICAgIFJ1biB0aW1lOiIsIHVpRnJpZW5kbHlOdW1iZXIodGhpcy5ydW5UaW1lKSk7CisgICAg
ICAgIGNvbnNvbGUubG9nKCIgICAgU3RhcnR1cDoiLCB1aUZyaWVuZGx5TnVtYmVyKHRoaXMuc3Rh
cnR1cFRpbWUpKTsKKyAgICAgICAgY29uc29sZS5sb2coIiAgICBSdW4gdGltZToiLCB1aUZyaWVu
ZGx5TnVtYmVyKHRoaXMucnVuVGltZSkpOwogICAgICAgICBpZiAoUkFNaWZpY2F0aW9uKSB7Ci0g
ICAgICAgICAgICBwcmludCgiICAgIEN1cnJlbnQgRm9vdHByaW50OiIsIHVpRnJpZW5kbHlOdW1i
ZXIodGhpcy5jdXJyZW50Rm9vdHByaW50KSk7Ci0gICAgICAgICAgICBwcmludCgiICAgIFBlYWsg
Rm9vdHByaW50OiIsIHVpRnJpZW5kbHlOdW1iZXIodGhpcy5wZWFrRm9vdHByaW50KSk7CisgICAg
ICAgICAgICBjb25zb2xlLmxvZygiICAgIEN1cnJlbnQgRm9vdHByaW50OiIsIHVpRnJpZW5kbHlO
dW1iZXIodGhpcy5jdXJyZW50Rm9vdHByaW50KSk7CisgICAgICAgICAgICBjb25zb2xlLmxvZygi
ICAgIFBlYWsgRm9vdHByaW50OiIsIHVpRnJpZW5kbHlOdW1iZXIodGhpcy5wZWFrRm9vdHByaW50
KSk7CiAgICAgICAgIH0KLSAgICAgICAgcHJpbnQoIiAgICBTY29yZToiLCB1aUZyaWVuZGx5TnVt
YmVyKHRoaXMuc2NvcmUpKTsKKyAgICAgICAgY29uc29sZS5sb2coIiAgICBTY29yZToiLCB1aUZy
aWVuZGx5TnVtYmVyKHRoaXMuc2NvcmUpKTsKICAgICB9CiB9OwogCkluZGV4OiBQZXJmb3JtYW5j
ZVRlc3RzL0pldFN0cmVhbTIvd2FzbS1jbGkuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gUGVyZm9ybWFuY2VU
ZXN0cy9KZXRTdHJlYW0yL3dhc20tY2xpLmpzCShub25leGlzdGVudCkKKysrIFBlcmZvcm1hbmNl
VGVzdHMvSmV0U3RyZWFtMi93YXNtLWNsaS5qcwkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQ2
IEBACisKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisg
KiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICog
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyovCisKK2NvbnN0IGlzSW5Ccm93c2VyID0gZmFsc2U7Citjb25zb2xlID0g
eworICAgIGxvZzogKCkgPT4geyB9Cit9CisKK3Rlc3RMaXN0ID0gWyJIYXNoU2V0LXdhc20iLCAi
dHNmLXdhc20iLCAicXVpY2tzb3J0LXdhc20iLCAiZ2NjLWxvb3BzLXdhc20iLCAicmljaGFyZHMt
d2FzbSJdOworCitSQU1pZmljYXRpb24gPSBmYWxzZTsKKworbG9hZCgiLi9KZXRTdHJlYW1Ecml2
ZXIuanMiKTsKKworYXN5bmMgZnVuY3Rpb24gcnVuSmV0U3RyZWFtKCkgeworICAgIHRyeSB7Cisg
ICAgICAgIGF3YWl0IEpldFN0cmVhbS5pbml0aWFsaXplKCk7CisgICAgICAgIEpldFN0cmVhbS5z
dGFydCgpOworICAgIH0gY2F0Y2ggKGUpIHsKKyAgICAgICAgdGhyb3cgZTsKKyAgICB9Cit9City
dW5KZXRTdHJlYW0oKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjU4
MzUwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpA
QCAtMSwzICsxLDEwNCBAQAorMjAyMC0wMy0xMiAgU2FhbSBCYXJhdGkgIDxzYmFyYXRpQGFwcGxl
LmNvbT4KKworICAgICAgICBJbXBsZW1lbnQgMUdCIG9mIGV4ZWN1dGFibGUgbWVtb3J5IG9uIGFy
bTY0CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMDg0
OTAKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUaGlz
IHBhdGNoIGltcGxlbWVudHMgdGhlIDFHQiBleGVjdXRhYmxlIG1lbW9yeSBzcGFjZSBvbiBhcm02
NC4gVG8gbWFrZSB0aGlzCisgICAgICAgIHdvcmssIHdlIGltcGxlbWVudCBqdW1wcyBsYXJnZXIg
dGhhbiArLy0xMjhNQiB0byB1c2UganVtcCBpc2xhbmRzLiBKdW1wIGlzbGFuZHMKKyAgICAgICAg
d29yayBieSBzcGxpdHRpbmcgdXAgdGhlIH4xR0IgcmVnaW9uIGludG8gOSAxMTJNQiBjaHVua3Mg
KDEwMDggTUIgdG90YWwpLiBFYWNoCisgICAgICAgIGNodW5rIGlzIHNwbGl0IGludG8gdHdvOiA5
Nk1CIG9mIGV4ZWN1dGFibGUgcmVnaW9uLCBhbmQgMTZNQiBvZiBqdW1wIGlzbGFuZCByZWdpb24u
CisgICAgICAgIFdpdGggdGhpcyBzcGxpdCwgYW55IGp1bXAgaW5zaWRlIGEganVtcCBpc2xhbmQg
cmVnaW9uIGNhbiBnZXQgdG8gdGhlIGFkamFjZW50CisgICAgICAgIGlzbGFuZCAoZm9yd2FyZHMg
b3IgYmFja3dhcmRzKSBpbiBhIHNpbmdsZSArLy0xMjhNQiBqdW1wLiBXaGVuIGxpbmtpbmcgYSBq
dW1wCisgICAgICAgIGZyb20gQSB0byBCLCB3aGVyZSB8QSAtIEJ8ID4gMTI4TUIsIHdlIGluc3Rl
YWQgcG9pbnQgdGhlIGp1bXAgdG8gYW4gaXNsYW5kLAorICAgICAgICB3aGVyZSB0aGlzIGlzbGFu
ZCBoYXMgYSBwb3RlbnRpYWwgc2VyaWVzIG9mIGp1bXBzIHRoYXQgZmluYWxseSBsYW5kcyBhdCBC
LgorICAgICAgICAKKyAgICAgICAgVG8gYWxsb2NhdGUgZXhlY3V0YWJsZSBtZW1vcnksIHVzZSBh
IE1ldGFBbGxvY2F0b3IgZm9yIGVhY2ggOTZNQiBjaHVuay4gVG8KKyAgICAgICAgYWxsb2NhdGUg
aXNsYW5kcywgd2UgaGF2ZSBhIGJpdCB2ZWN0b3Igd2UgdXNlIHRvIHRyYWNrIHVzZWQgYW5kIGZy
ZWVkIGlzbGFuZHMuCisgICAgICAgIFdlIG9ubHkgZ3JvdyB0aGlzIGJpdCB2ZWN0b3IgYXMgaXNs
YW5kcyBhcmUgYWxsb2NhdGVkLCBzbyBpdCBmcmVxdWVudGx5CisgICAgICAgIHJlbWFpbnMgZW1w
dHkgb3IgdmVyeSBzbWFsbC4KKyAgICAgICAgCisgICAgICAgIFRoZSBnb2FsIG9mIHRoaXMgcGF0
Y2ggaXMgdG8gaGF2ZSBtaW5pbWFsIHBlcmYgaW1wYWN0IHdoZW4gbm90IHVzaW5nIGlzbGFuZHMs
CisgICAgICAgIHNvIHRoZSBkYXRhIHN0cnVjdHVyZXMgYXJlIGRlc2lnbmVkIHRvIG9ubHkgaW5j
dXIgb3ZlcmhlYWQgd2hlbiBhY3R1YWxseSB1c2luZworICAgICAgICBpc2xhbmRzLiBXZSBleHBl
Y3QgdGhlIHVzZSBvZiBpc2xhbmRzIHRvIGJlIG1pbmltYWwuIFdlIHVzZSBhIHJlZCBibGFjayB0
cmVlCisgICAgICAgIHRvIHRyYWNrIGFsbCBpc2xhbmQgbG9jYXRpb25zLiBUaGlzIGFsbG93cyB1
cyB0byBkZWFsbG9jYXRlIGFsbCBpc2xhbmRzIHdoZW4KKyAgICAgICAgYW4gZXhlY3V0YWJsZSBt
ZW1vcnkgaGFuZGxlIGlzIGZyZWVkLiBUeXBpY2FsbHksIHRoaXMgcmVkIGJsYWNrIHRyZWUgaXMg
ZW1wdHksCisgICAgICAgIHNvIGZyZWVpbmcgYW4gZXhlY3V0YWJsZSBtZW1vcnkgaGFuZGxlIGlu
Y3VycyBubyBleHRyYSBvdmVyaGVhZC4KKyAgICAgICAgCisgICAgICAgIFRvIG1ha2UgaXNsYW5k
cyB3b3JrIGZvciBXYXNtLCB3ZSBub3cgaGF2ZSB0byBsaW5rIHRpZXIgdXAgY29kZSBpbiB0d28g
cGhhc2VzLgorICAgICAgICBQcmV2aW91c2x5LCB3ZSB3b3VsZCBqdXN0IHBhdGNoIGp1bXBzIGNv
bmN1cnJlbnRseSB0byBXYXNtIHRocmVhZHMgcnVubmluZyBhZnRlcgorICAgICAgICByZXNldHRp
bmcgdGhlIGljYWNoZSwga25vd2luZyB0aGF0IHdlIHdvdWxkIGJlIGFibGUgdG8gYXRvbWljYWxs
eSB1cGRhdGUgdGhlIGp1bXAKKyAgICAgICAgaW5zdHJ1Y3Rpb24gdG8gcG9pbnQgdG8gdGhlIG5l
dyBkZXN0aW5hdGlvbi4gSG93ZXZlciwgbm93IHdoZW4gcmVwYXRjaGluZyB0aGVzZQorICAgICAg
ICBqdW1wcyBpbiBhIHdvcmxkIHdpdGgganVtcCBpc2xhbmRzLCB3ZSBtaWdodCBuZWVkIHRvIGFs
bG9jYXRlIGlzbGFuZHMgZGVwZW5kaW5nCisgICAgICAgIG9uIHRoZSBqdW1wIGxvY2F0aW9uIGFu
ZCBpdHMgdGFyZ2V0LiBTbyB3ZSBub3cgYWxsb2NhdGUgYW5kIGNvbGxlY3QgdGhlIHNldCBvZiBp
c2xhbmRzLAorICAgICAgICB0aGVuIHJlc2V0IHRoZSBpY2FjaGUsIHRoZW4gYXRvbWljYWxseSB1
cGRhdGUgdGhlIGJyYW5jaCB0byBwb2ludCB0byB0aGUgZGVzdGluYXRpb24KKyAgICAgICAgKG9y
IGFuIGlzbGFuZCB0aGF0IGp1bXBzIHRvIHRoZSBkZXN0aW5hdGlvbikuIE9uZSBpbXBvcnRhbnQg
aW1wbGVtZW50YXRpb24gZGV0YWlsCisgICAgICAgIGhlcmUgaXMgdGhhdCBmb3Igbm9ybWFsIGlz
bGFuZCByZXBhdGNoaW5nLCBpZiB3ZSBoYXZlIGEganVtcCBmcm9tIEEgdG8gQiwgYW5kIGl0Cisg
ICAgICAgIGFsbG9jYXRlcyBhIHNldCBpZiBpc2xhbmRzIFgsIHdlIHVzdWFsbHkgY2FuIGRlYWxs
b2NhdGUgWCB3aGVuIHJlcGF0Y2hpbmcgQSB0byBnbyB0byBCJy4KKyAgICAgICAgVGhpcyBpcyBi
ZWNhdXNlIHRoZSB0eXBpY2FsIHJlcGF0Y2ggc2NlbmFyaW8gaW4gSlMgaGFwcGVucyB3aGVuIHRo
YXQgY29kZSBpcyBub3QgYmVpbmcKKyAgICAgICAgZXhlY3V0ZWQuIEZvciBXYXNtIHRob3VnaCwg
dGhvc2UgaXNsYW5kcyBYIG1pZ2h0IGJlIHJ1bm5pbmcgd2hpbGUgd2Ugd2FudCB0byByZXBhdGNo
CisgICAgICAgIEEgdG8gZ28gdG8gQicuIFNvIGluc3RlYWQgb2YgZGVhbGxvY2F0aW5nIFgsIHdl
IGp1c3QgYXBwZW5kIHRvIFggaW4gdGhpcyBzY2VuYXJpbywgYW5kCisgICAgICAgIHdlIGZyZWUg
dGhlIG5ldyBzZXQgWCcgd2hlbiB0aGUgY29kZSBpdHNlbGYgaXMgZnJlZWQuCisgICAgICAgIAor
ICAgICAgICAoVGhpcyBwYXRjaCBhbHNvIGZpeGVzIGEgYnVnIGluIHRoZSBXYXNtIExMSW50IHRv
IEJCUSB0aWVyIHVwIHRoYXQgSSBzcG90dGVkLAorICAgICAgICB3aGVyZSB3ZSB3b3VsZCBwdWJs
aXNoIGEgTExJbnQgY2FsbGVlJ3MgQkJRIHJlcGxhY2VtZW50IGJlZm9yZSB3ZSBmaW5pc2hlZAor
ICAgICAgICBsaW5raW5nIHRoZSBvdXRnb2luZyBjYWxscyBvZiB0aGUgQkJRIHJlcGxhY2VtZW50
LikKKyAgICAgICAgCisgICAgICAgIFRoaXMgcGF0Y2ggYWxzbyByZW1vdmVzIHRoZSBvbGQgIkNv
ZGVQcm9maWxpbmciIGNvZGUgdGhhdCBoYXMgYmVlbiB1bnVzZWQgZm9yCisgICAgICAgIGEgbG9u
ZyB0aW1lLgorCisgICAgICAgICogSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvajoKKyAgICAgICAgKiBTb3VyY2VzLnR4dDoKKyAgICAgICAgKiBhc3NlbWJsZXIvQVJNNjRB
c3NlbWJsZXIuaDoKKyAgICAgICAgKEpTQzo6QVJNNjRBc3NlbWJsZXI6OmIpOgorICAgICAgICAo
SlNDOjpBUk02NEFzc2VtYmxlcjo6YmwpOgorICAgICAgICAoSlNDOjpBUk02NEFzc2VtYmxlcjo6
cmVwbGFjZVdpdGhKdW1wKToKKyAgICAgICAgKEpTQzo6QVJNNjRBc3NlbWJsZXI6OnByZXBhcmVG
b3JBdG9taWNSZWxpbmtKdW1wQ29uY3VycmVudGx5KToKKyAgICAgICAgKEpTQzo6QVJNNjRBc3Nl
bWJsZXI6OnByZXBhcmVGb3JBdG9taWNSZWxpbmtDYWxsQ29uY3VycmVudGx5KToKKyAgICAgICAg
KEpTQzo6QVJNNjRBc3NlbWJsZXI6OmNvbXB1dGVKdW1wVHlwZSk6CisgICAgICAgIChKU0M6OkFS
TTY0QXNzZW1ibGVyOjpjYW5FbWl0SnVtcCk6CisgICAgICAgIChKU0M6OkFSTTY0QXNzZW1ibGVy
OjpsaW5rSnVtcE9yQ2FsbCk6CisgICAgICAgIChKU0M6OkFSTTY0QXNzZW1ibGVyOjpsaW5rQ29t
cGFyZUFuZEJyYW5jaCk6CisgICAgICAgIChKU0M6OkFSTTY0QXNzZW1ibGVyOjpsaW5rQ29uZGl0
aW9uYWxCcmFuY2gpOgorICAgICAgICAoSlNDOjpBUk02NEFzc2VtYmxlcjo6bGlua1Rlc3RBbmRC
cmFuY2gpOgorICAgICAgICAqIGFzc2VtYmxlci9BYnN0cmFjdE1hY3JvQXNzZW1ibGVyLmg6Cisg
ICAgICAgIChKU0M6OkFic3RyYWN0TWFjcm9Bc3NlbWJsZXI6OnByZXBhcmVGb3JBdG9taWNSZXBh
dGNoTmVhckNhbGxDb25jdXJyZW50bHkpOgorICAgICAgICAqIGFzc2VtYmxlci9MaW5rQnVmZmVy
LmNwcDoKKyAgICAgICAgKEpTQzo6TGlua0J1ZmZlcjo6Y29weUNvbXBhY3RBbmRMaW5rQ29kZSk6
CisgICAgICAgIChKU0M6OkxpbmtCdWZmZXI6OmxpbmtDb2RlKToKKyAgICAgICAgKEpTQzo6TGlu
a0J1ZmZlcjo6YWxsb2NhdGUpOgorICAgICAgICAqIGFzc2VtYmxlci9MaW5rQnVmZmVyLmg6Cisg
ICAgICAgIChKU0M6OkxpbmtCdWZmZXI6OkxpbmtCdWZmZXIpOgorICAgICAgICAqIGFzc2VtYmxl
ci9NYWNyb0Fzc2VtYmxlckNvZGVSZWYuaDoKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJD
b2RlUmVmOjpNYWNyb0Fzc2VtYmxlckNvZGVSZWYpOgorICAgICAgICAqIGppdC9FeGVjdXRhYmxl
QWxsb2NhdG9yLmNwcDoKKyAgICAgICAgKEpTQzo6aW5pdGlhbGl6ZUpJVFBhZ2VSZXNlcnZhdGlv
bik6CisgICAgICAgIChKU0M6OkV4ZWN1dGFibGVBbGxvY2F0b3I6OmluaXRpYWxpemVVbmRlcmx5
aW5nQWxsb2NhdG9yKToKKyAgICAgICAgKEpTQzo6RXhlY3V0YWJsZUFsbG9jYXRvcjo6aXNWYWxp
ZCBjb25zdCk6CisgICAgICAgIChKU0M6OkV4ZWN1dGFibGVBbGxvY2F0b3I6OmFsbG9jYXRlKToK
KyAgICAgICAgKEpTQzo6RXhlY3V0YWJsZUFsbG9jYXRvcjo6Z2V0SnVtcElzbGFuZFRvKToKKyAg
ICAgICAgKEpTQzo6RXhlY3V0YWJsZUFsbG9jYXRvcjo6Z2V0SnVtcElzbGFuZFRvQ29uY3VycmVu
dGx5KToKKyAgICAgICAgKEpTQzo6Rml4ZWRWTVBvb2xFeGVjdXRhYmxlQWxsb2NhdG9yOjp+Rml4
ZWRWTVBvb2xFeGVjdXRhYmxlQWxsb2NhdG9yKTogRGVsZXRlZC4KKyAgICAgICAgKiBqaXQvRXhl
Y3V0YWJsZUFsbG9jYXRvci5oOgorICAgICAgICAoSlNDOjpFeGVjdXRhYmxlQWxsb2NhdG9yQmFz
ZTo6YWxsb2NhdGUpOgorICAgICAgICAqIHJ1bnRpbWUvQ29tbW9uU2xvd1BhdGhzLmNwcDoKKyAg
ICAgICAgKiBydW50aW1lL0NvbXBsZXRpb24uY3BwOgorICAgICAgICAoSlNDOjpldmFsdWF0ZSk6
CisgICAgICAgICogcnVudGltZS9KU01vZHVsZUxvYWRlci5jcHA6CisgICAgICAgIChKU0M6Om1v
ZHVsZUxvYWRlclBhcnNlTW9kdWxlKToKKyAgICAgICAgKiBydW50aW1lL09wdGlvbnNMaXN0Lmg6
CisgICAgICAgICogdG9vbHMvQ29kZVByb2ZpbGUuY3BwOiBSZW1vdmVkLgorICAgICAgICAqIHRv
b2xzL0NvZGVQcm9maWxlLmg6IFJlbW92ZWQuCisgICAgICAgICogdG9vbHMvQ29kZVByb2ZpbGlu
Zy5jcHA6IFJlbW92ZWQuCisgICAgICAgICogdG9vbHMvQ29kZVByb2ZpbGluZy5oOiBSZW1vdmVk
LgorICAgICAgICAqIHdhc20vV2FzbUJCUVBsYW4uY3BwOgorICAgICAgICAoSlNDOjpXYXNtOjpC
QlFQbGFuOjp3b3JrKToKKyAgICAgICAgKiB3YXNtL1dhc21PTUdGb3JPU1JFbnRyeVBsYW4uY3Bw
OgorICAgICAgICAoSlNDOjpXYXNtOjpPTUdGb3JPU1JFbnRyeVBsYW46OndvcmspOgorICAgICAg
ICAqIHdhc20vV2FzbU9NR1BsYW4uY3BwOgorICAgICAgICAoSlNDOjpXYXNtOjpPTUdQbGFuOjp3
b3JrKToKKwogMjAyMC0wMy0xMiAgWXVzdWtlIFN1enVraSAgPHlzdXp1a2lAYXBwbGUuY29tPgog
CiAgICAgICAgIFtKU0NdIFVzZSBDYWNoZWFibGVJZGVudGlmaWVyIGluIEJ5VmFsSW5mbwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL1NvdXJjZXMudHh0Cj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9Tb3VyY2VzLnR4dAkocmV2aXNpb24gMjU4MzUwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL1NvdXJjZXMudHh0CSh3b3JraW5nIGNvcHkpCkBAIC05OTUsOCArOTk1
LDYgQEAgcnVudGltZS9XaWRlbmluZ051bWJlclByZWRpY3Rpb25GdXp6ZXJBZwogSlNDQnVpbHRp
bnMuY3BwCiAKIHRvb2xzL0NlbGxMaXN0LmNwcAotdG9vbHMvQ29kZVByb2ZpbGUuY3BwCi10b29s
cy9Db2RlUHJvZmlsaW5nLmNwcAogdG9vbHMvQ29tcGlsZXJUaW1pbmdTY29wZS5jcHAKIHRvb2xz
L0Z1bmN0aW9uT3ZlcnJpZGVzLmNwcAogdG9vbHMvRnVuY3Rpb25XaGl0ZWxpc3QuY3BwCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3Qu
cGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENv
cmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gMjU4MzUwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJ
KHdvcmtpbmcgY29weSkKQEAgLTQwNzEsOCArNDA3MSw2IEBACiAJCTg2MDE2MUUwMEYzQTgzQzEw
MEY4NDcxMCAvKiBNYWNyb0Fzc2VtYmxlclg4Ni5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBNYWNyb0Fzc2VtYmxlclg4Ni5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQk4NjAxNjFFMTBGM0E4M0MxMDBGODQ3MTAgLyogTWFjcm9Bc3NlbWJsZXJYODZfNjQuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTWFjcm9Bc3NlbWJsZXJYODZfNjQuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJODYwMTYxRTIwRjNBODNDMTAwRjg0NzEwIC8qIE1h
Y3JvQXNzZW1ibGVyWDg2Q29tbW9uLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IE1hY3JvQXNzZW1ibGVyWDg2Q29tbW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0J
CTg2MDNDRUYyMTRDNzU0NjQwMEFFNTlFMyAvKiBDb2RlUHJvZmlsaW5nLmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IENvZGVQcm9maWxpbmcuY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwotCQk4NjAzQ0VGMzE0Qzc1NDY0MDBBRTU5RTMgLyogQ29kZVByb2Zp
bGluZy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBDb2RlUHJvZmlsaW5nLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTg2MDRGNEYyMTQzQTZDNDQwMEIyOTVGNSAv
KiBDaGFuZ2VMb2cgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5
cGUgPSB0ZXh0OyBsaW5lRW5kaW5nID0gMDsgcGF0aCA9IENoYW5nZUxvZzsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJODYwNkRERTkxOERBNDRBQjAwQTM4M0QwIC8qIElkZW50aWZpZXJJ
bmxpbmVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IElkZW50aWZpZXJJbmxp
bmVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTg2MTJFNENCMTUyMjkxODQwMEM4
MzZCRSAvKiBNYXRjaFJlc3VsdC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBN
YXRjaFJlc3VsdC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtNDExOCw4ICs0MTE2
LDYgQEAKIAkJODZBREQxNDMwRkRERUE5ODAwMDZGRkNDIC8qIEFSTXY3UmVnaXN0ZXJzLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEFSTXY3UmVnaXN0ZXJzLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTg2QUREMTQ0MEZEREVBOTgwMDA2RUVDMiAvKiBNYWNyb0Fz
c2VtYmxlckFSTXY3LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE1hY3JvQXNz
ZW1ibGVyQVJNdjcuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJODZCNTgyMkMxNEQy
MkY1RjAwQTlDMzA2IC8qIFByb2ZpbGVUcmVlTm9kZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBQcm9maWxlVHJlZU5vZGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
LQkJODZCNTgyMkUxNEQyMzczQjAwQTlDMzA2IC8qIENvZGVQcm9maWxlLmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IENvZGVQcm9maWxlLmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKLQkJODZCNTgyMkYxNEQyMzczQjAwQTlDMzA2IC8qIENvZGVQcm9maWxl
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENvZGVQcm9maWxlLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTg2QjU4MjZBMTREMzVENTEwMEE5QzMwNiAvKiBUaWVy
ZWRNTWFwQXJyYXkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVGllcmVkTU1h
cEFycmF5Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTg2QkY2NDJBMTQ4REIyQjUw
MDRERTM2QSAvKiBJbnRyaW5zaWMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
SW50cmluc2ljLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTg2QzM2RUU5MEVFMTI4
OUQwMEIzREY1OSAvKiBNYWNyb0Fzc2VtYmxlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBNYWNyb0Fzc2VtYmxlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAt
NzY3NywxMCArNzY3Myw2IEBACiAJCQkJRkUxQkQwMUIxRTcyMDAyMTAwMTM0QkM5IC8qIENlbGxM
aXN0LmNwcCAqLywKIAkJCQlGRTFCRDAxQzFFNzIwMDIxMDAxMzRCQzkgLyogQ2VsbExpc3QuaCAq
LywKIAkJCQlGRTFCRDAyMDFFNzIwMjcwMDAxMzRCQzkgLyogQ2VsbFByb2ZpbGUuaCAqLywKLQkJ
CQk4NkI1ODIyRTE0RDIzNzNCMDBBOUMzMDYgLyogQ29kZVByb2ZpbGUuY3BwICovLAotCQkJCTg2
QjU4MjJGMTREMjM3M0IwMEE5QzMwNiAvKiBDb2RlUHJvZmlsZS5oICovLAotCQkJCTg2MDNDRUYy
MTRDNzU0NjQwMEFFNTlFMyAvKiBDb2RlUHJvZmlsaW5nLmNwcCAqLywKLQkJCQk4NjAzQ0VGMzE0
Qzc1NDY0MDBBRTU5RTMgLyogQ29kZVByb2ZpbGluZy5oICovLAogCQkJCTBGNEYxMUU3MjA5QkNE
QTEwMDcwOTY1NCAvKiBDb21waWxlclRpbWluZ1Njb3BlLmNwcCAqLywKIAkJCQkwRjRGMTFFNjIw
OUJDREExMDA3MDk2NTQgLyogQ29tcGlsZXJUaW1pbmdTY29wZS5oICovLAogCQkJCUZFNEJGRjI5
MUFENDc2RTcwMDA4OEY4NyAvKiBGdW5jdGlvbk92ZXJyaWRlcy5jcHAgKi8sCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL0FSTTY0QXNzZW1ibGVyLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9BUk02NEFzc2VtYmxlci5oCShyZXZp
c2lvbiAyNTgzNTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL0FSTTY0QXNz
ZW1ibGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTc4MywxMiArNzgzLDkgQEAgcHVibGljOgogICAg
ICAgICBpbnNuKGRhdGFQcm9jZXNzaW5nMlNvdXJjZShEQVRBU0laRSwgcm0sIERhdGFPcF9BU1JW
LCBybiwgcmQpKTsKICAgICB9CiAKLSAgICBBTFdBWVNfSU5MSU5FIHZvaWQgYihpbnQzMl90IG9m
ZnNldCA9IDApCisgICAgQUxXQVlTX0lOTElORSB2b2lkIGIoKQogICAgIHsKLSAgICAgICAgQVNT
RVJUKCEob2Zmc2V0ICYgMykpOwotICAgICAgICBvZmZzZXQgPj49IDI7Ci0gICAgICAgIEFTU0VS
VChvZmZzZXQgPT0gKG9mZnNldCA8PCA2KSA+PiA2KTsKLSAgICAgICAgaW5zbih1bmNvbmRpdGlv
bmFsQnJhbmNoSW1tZWRpYXRlKGZhbHNlLCBvZmZzZXQpKTsKKyAgICAgICAgaW5zbih1bmNvbmRp
dGlvbmFsQnJhbmNoSW1tZWRpYXRlKGZhbHNlLCAwKSk7CiAgICAgfQogCiAgICAgQUxXQVlTX0lO
TElORSB2b2lkIGJfY29uZChDb25kaXRpb24gY29uZCwgaW50MzJfdCBvZmZzZXQgPSAwKQpAQCAt
ODMxLDExICs4MjgsOSBAQCBwdWJsaWM6CiAgICAgICAgIGluc24obG9naWNhbFNoaWZ0ZWRSZWdp
c3RlcihEQVRBU0laRSwgc2V0RmxhZ3MgPyBMb2dpY2FsT3BfQU5EUyA6IExvZ2ljYWxPcF9BTkQs
IHNoaWZ0LCB0cnVlLCBybSwgYW1vdW50LCBybiwgcmQpKTsKICAgICB9CiAKLSAgICBBTFdBWVNf
SU5MSU5FIHZvaWQgYmwoaW50MzJfdCBvZmZzZXQgPSAwKQorICAgIEFMV0FZU19JTkxJTkUgdm9p
ZCBibCgpCiAgICAgewotICAgICAgICBBU1NFUlQoIShvZmZzZXQgJiAzKSk7Ci0gICAgICAgIG9m
ZnNldCA+Pj0gMjsKLSAgICAgICAgaW5zbih1bmNvbmRpdGlvbmFsQnJhbmNoSW1tZWRpYXRlKHRy
dWUsIG9mZnNldCkpOworICAgICAgICBpbnNuKHVuY29uZGl0aW9uYWxCcmFuY2hJbW1lZGlhdGUo
dHJ1ZSwgMCkpOwogICAgIH0KIAogICAgIEFMV0FZU19JTkxJTkUgdm9pZCBibHIoUmVnaXN0ZXJJ
RCBybikKQEAgLTI1ODIsNiArMjU3NywxMyBAQCBwdWJsaWM6CiAgICAgewogICAgICAgICBpbnRw
dHJfdCBvZmZzZXQgPSAocmVpbnRlcnByZXRfY2FzdDxpbnRwdHJfdD4odG8pIC0gcmVpbnRlcnBy
ZXRfY2FzdDxpbnRwdHJfdD4od2hlcmUpKSA+PiAyOwogICAgICAgICBBU1NFUlQoc3RhdGljX2Nh
c3Q8aW50PihvZmZzZXQpID09IG9mZnNldCk7CisKKyAgICAgICAgaWYgKCFpc0ludDwyNj4ob2Zm
c2V0KSkgeworICAgICAgICAgICAgdG8gPSBFeGVjdXRhYmxlQWxsb2NhdG9yOjpzaW5nbGV0b24o
KS5nZXRKdW1wSXNsYW5kVG8od2hlcmUsIHRvKTsKKyAgICAgICAgICAgIG9mZnNldCA9IChiaXR3
aXNlX2Nhc3Q8aW50cHRyX3Q+KHRvKSAtIGJpdHdpc2VfY2FzdDxpbnRwdHJfdD4od2hlcmUpKSA+
PiAyOworICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoaXNJbnQ8MjY+KG9mZnNldCkpOworICAg
ICAgICB9CisKICAgICAgICAgaW50IGluc24gPSB1bmNvbmRpdGlvbmFsQnJhbmNoSW1tZWRpYXRl
KGZhbHNlLCBzdGF0aWNfY2FzdDxpbnQ+KG9mZnNldCkpOwogICAgICAgICBSRUxFQVNFX0FTU0VS
VChyb3VuZFVwVG9NdWx0aXBsZU9mPGluc3RydWN0aW9uU2l6ZT4od2hlcmUpID09IHdoZXJlKTsK
ICAgICAgICAgcGVyZm9ybUpJVE1lbWNweSh3aGVyZSwgJmluc24sIHNpemVvZihpbnQpKTsKQEAg
LTI3NzEsNiArMjc3MywyNSBAQCBwdWJsaWM6CiAgICAgICAgIHJlbGlua0p1bXBPckNhbGw8QnJh
bmNoVHlwZV9DQUxMPihyZWludGVycHJldF9jYXN0PGludCo+KGZyb20pIC0gMSwgcmVpbnRlcnBy
ZXRfY2FzdDxjb25zdCBpbnQqPihmcm9tKSAtIDEsIHRvKTsKICAgICAgICAgY2FjaGVGbHVzaChy
ZWludGVycHJldF9jYXN0PGludCo+KGZyb20pIC0gMSwgc2l6ZW9mKGludCkpOwogICAgIH0KKwor
I2lmIFVTRShKVU1QX0lTTEFORFMpCisgICAgc3RhdGljIHZvaWQqIHByZXBhcmVGb3JBdG9taWNS
ZWxpbmtKdW1wQ29uY3VycmVudGx5KHZvaWQqIGZyb20sIHZvaWQqIHRvKQorICAgIHsKKyAgICAg
ICAgaW50cHRyX3Qgb2Zmc2V0ID0gKGJpdHdpc2VfY2FzdDxpbnRwdHJfdD4odG8pIC0gYml0d2lz
ZV9jYXN0PGludHB0cl90Pihmcm9tKSkgPj4gMjsKKyAgICAgICAgQVNTRVJUKHN0YXRpY19jYXN0
PGludD4ob2Zmc2V0KSA9PSBvZmZzZXQpOworCisgICAgICAgIGlmIChpc0ludDwyNj4ob2Zmc2V0
KSkKKyAgICAgICAgICAgIHJldHVybiB0bzsKKworICAgICAgICByZXR1cm4gRXhlY3V0YWJsZUFs
bG9jYXRvcjo6c2luZ2xldG9uKCkuZ2V0SnVtcElzbGFuZFRvQ29uY3VycmVudGx5KGZyb20sIHRv
KTsKKyAgICB9CisKKyAgICBzdGF0aWMgdm9pZCogcHJlcGFyZUZvckF0b21pY1JlbGlua0NhbGxD
b25jdXJyZW50bHkodm9pZCogZnJvbSwgdm9pZCogdG8pCisgICAgeworICAgICAgICBmcm9tID0g
c3RhdGljX2Nhc3Q8dm9pZCo+KGJpdHdpc2VfY2FzdDxpbnQqPihmcm9tKSAtIDEpOworICAgICAg
ICByZXR1cm4gcHJlcGFyZUZvckF0b21pY1JlbGlua0p1bXBDb25jdXJyZW50bHkoZnJvbSwgdG8p
OworICAgIH0KKyNlbmRpZgogICAgIAogICAgIHN0YXRpYyB2b2lkIHJlcGF0Y2hDb21wYWN0KHZv
aWQqIHdoZXJlLCBpbnQzMl90IHZhbHVlKQogICAgIHsKQEAgLTI4NzIsNyArMjg5Myw3IEBAIHB1
YmxpYzoKICAgICAgICAgICAgICAgICByZXR1cm4gTGlua0p1bXBDb25kaXRpb25EaXJlY3Q7CiAK
ICAgICAgICAgICAgIHJldHVybiBMaW5rSnVtcENvbmRpdGlvbjsKLSAgICAgICAgICAgIH0KKyAg
ICAgICAgfQogICAgICAgICBjYXNlIEp1bXBDb21wYXJlQW5kQnJhbmNoOiAgewogICAgICAgICAg
ICAgQVNTRVJUKGlzNEJ5dGVBbGlnbmVkKGZyb20pKTsKICAgICAgICAgICAgIEFTU0VSVChpczRC
eXRlQWxpZ25lZCh0bykpOwpAQCAtMjk0NSw2ICsyOTY2LDEyIEBAIHB1YmxpYzoKICAgICAgICAg
fQogICAgIH0KIAorICAgIHN0YXRpYyBBTFdBWVNfSU5MSU5FIGJvb2wgY2FuRW1pdEp1bXAodm9p
ZCogZnJvbSwgdm9pZCogdG8pCisgICAgeworICAgICAgICBpbnRwdHJfdCBkaWZmID0gKGJpdHdp
c2VfY2FzdDxpbnRwdHJfdD4oZnJvbSkgLSBiaXR3aXNlX2Nhc3Q8aW50cHRyX3Q+KHRvKSkgPj4g
MjsKKyAgICAgICAgcmV0dXJuIGlzSW50PDI2PihkaWZmKTsKKyAgICB9CisKIHByb3RlY3RlZDoK
ICAgICB0ZW1wbGF0ZTxEYXRhc2l6ZSBzaXplPgogICAgIHN0YXRpYyBib29sIGNoZWNrTW92ayhp
bnQgaW5zbiwgaW50IF9odywgUmVnaXN0ZXJJRCBfcmQpCkBAIC0yOTk0LDkgKzMwMjEsMTUgQEAg
cHJvdGVjdGVkOgogICAgICAgICBBU1NFUlQoIShyZWludGVycHJldF9jYXN0PGludHB0cl90Pih0
bykgJiAzKSk7CiAgICAgICAgIGFzc2VydElzTm90VGFnZ2VkKHRvKTsKICAgICAgICAgYXNzZXJ0
SXNOb3RUYWdnZWQoZnJvbUluc3RydWN0aW9uKTsKLSAgICAgICAgaW50cHRyX3Qgb2Zmc2V0ID0g
KHJlaW50ZXJwcmV0X2Nhc3Q8aW50cHRyX3Q+KHRvKSAtIHJlaW50ZXJwcmV0X2Nhc3Q8aW50cHRy
X3Q+KGZyb21JbnN0cnVjdGlvbikpID4+IDI7CisgICAgICAgIGludHB0cl90IG9mZnNldCA9IChi
aXR3aXNlX2Nhc3Q8aW50cHRyX3Q+KHRvKSAtIGJpdHdpc2VfY2FzdDxpbnRwdHJfdD4oZnJvbUlu
c3RydWN0aW9uKSkgPj4gMjsKICAgICAgICAgQVNTRVJUKHN0YXRpY19jYXN0PGludD4ob2Zmc2V0
KSA9PSBvZmZzZXQpOwogCisgICAgICAgIGlmICghaXNJbnQ8MjY+KG9mZnNldCkpIHsKKyAgICAg
ICAgICAgIHRvID0gRXhlY3V0YWJsZUFsbG9jYXRvcjo6c2luZ2xldG9uKCkuZ2V0SnVtcElzbGFu
ZFRvKGJpdHdpc2VfY2FzdDx2b2lkKj4oZnJvbUluc3RydWN0aW9uKSwgdG8pOworICAgICAgICAg
ICAgb2Zmc2V0ID0gKGJpdHdpc2VfY2FzdDxpbnRwdHJfdD4odG8pIC0gYml0d2lzZV9jYXN0PGlu
dHB0cl90Pihmcm9tSW5zdHJ1Y3Rpb24pKSA+PiAyOworICAgICAgICAgICAgUkVMRUFTRV9BU1NF
UlQoaXNJbnQ8MjY+KG9mZnNldCkpOworICAgICAgICB9CisKICAgICAgICAgaW50IGluc24gPSB1
bmNvbmRpdGlvbmFsQnJhbmNoSW1tZWRpYXRlKGlzQ2FsbCwgc3RhdGljX2Nhc3Q8aW50PihvZmZz
ZXQpKTsKICAgICAgICAgUkVMRUFTRV9BU1NFUlQocm91bmRVcFRvTXVsdGlwbGVPZjxpbnN0cnVj
dGlvblNpemU+KGZyb20pID09IGZyb20pOwogICAgICAgICBjb3B5KGZyb20sICZpbnNuLCBzaXpl
b2YoaW50KSk7CkBAIC0zMDA4LDEyICszMDQxLDEyIEBAIHByb3RlY3RlZDoKICAgICAgICAgQVNT
RVJUKCEocmVpbnRlcnByZXRfY2FzdDxpbnRwdHJfdD4oZnJvbSkgJiAzKSk7CiAgICAgICAgIEFT
U0VSVCghKHJlaW50ZXJwcmV0X2Nhc3Q8aW50cHRyX3Q+KHRvKSAmIDMpKTsKICAgICAgICAgaW50
cHRyX3Qgb2Zmc2V0ID0gKHJlaW50ZXJwcmV0X2Nhc3Q8aW50cHRyX3Q+KHRvKSAtIHJlaW50ZXJw
cmV0X2Nhc3Q8aW50cHRyX3Q+KGZyb21JbnN0cnVjdGlvbikpID4+IDI7Ci0gICAgICAgIEFTU0VS
VChpc0ludDwyNj4ob2Zmc2V0KSk7CiAKICAgICAgICAgYm9vbCB1c2VEaXJlY3QgPSBpc0ludDwx
OT4ob2Zmc2V0KTsKICAgICAgICAgQVNTRVJUKHR5cGUgPT0gSW5kaXJlY3RCcmFuY2ggfHwgdXNl
RGlyZWN0KTsKIAogICAgICAgICBpZiAodXNlRGlyZWN0IHx8IHR5cGUgPT0gRGlyZWN0QnJhbmNo
KSB7CisgICAgICAgICAgICBBU1NFUlQoaXNJbnQ8MTk+KG9mZnNldCkpOwogICAgICAgICAgICAg
aW50IGluc24gPSBjb21wYXJlQW5kQnJhbmNoSW1tZWRpYXRlKGlzNjRCaXQgPyBEYXRhc2l6ZV82
NCA6IERhdGFzaXplXzMyLCBjb25kaXRpb24gPT0gQ29uZGl0aW9uTkUsIHN0YXRpY19jYXN0PGlu
dD4ob2Zmc2V0KSwgcnQpOwogICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQocm91bmRVcFRvTXVs
dGlwbGVPZjxpbnN0cnVjdGlvblNpemU+KGZyb20pID09IGZyb20pOwogICAgICAgICAgICAgY29w
eShmcm9tLCAmaW5zbiwgc2l6ZW9mKGludCkpOwpAQCAtMzAzNiwxMiArMzA2OSwxMiBAQCBwcm90
ZWN0ZWQ6CiAgICAgICAgIEFTU0VSVCghKHJlaW50ZXJwcmV0X2Nhc3Q8aW50cHRyX3Q+KGZyb20p
ICYgMykpOwogICAgICAgICBBU1NFUlQoIShyZWludGVycHJldF9jYXN0PGludHB0cl90Pih0bykg
JiAzKSk7CiAgICAgICAgIGludHB0cl90IG9mZnNldCA9IChyZWludGVycHJldF9jYXN0PGludHB0
cl90Pih0bykgLSByZWludGVycHJldF9jYXN0PGludHB0cl90Pihmcm9tSW5zdHJ1Y3Rpb24pKSA+
PiAyOwotICAgICAgICBBU1NFUlQoaXNJbnQ8MjY+KG9mZnNldCkpOwogCiAgICAgICAgIGJvb2wg
dXNlRGlyZWN0ID0gaXNJbnQ8MTk+KG9mZnNldCk7CiAgICAgICAgIEFTU0VSVCh0eXBlID09IElu
ZGlyZWN0QnJhbmNoIHx8IHVzZURpcmVjdCk7CiAKICAgICAgICAgaWYgKHVzZURpcmVjdCB8fCB0
eXBlID09IERpcmVjdEJyYW5jaCkgeworICAgICAgICAgICAgQVNTRVJUKGlzSW50PDE5PihvZmZz
ZXQpKTsKICAgICAgICAgICAgIGludCBpbnNuID0gY29uZGl0aW9uYWxCcmFuY2hJbW1lZGlhdGUo
c3RhdGljX2Nhc3Q8aW50PihvZmZzZXQpLCBjb25kaXRpb24pOwogICAgICAgICAgICAgUkVMRUFT
RV9BU1NFUlQocm91bmRVcFRvTXVsdGlwbGVPZjxpbnN0cnVjdGlvblNpemU+KGZyb20pID09IGZy
b20pOwogICAgICAgICAgICAgY29weShmcm9tLCAmaW5zbiwgc2l6ZW9mKGludCkpOwpAQCAtMzA2
NSwxMiArMzA5OCwxMiBAQCBwcm90ZWN0ZWQ6CiAgICAgICAgIEFTU0VSVCghKHJlaW50ZXJwcmV0
X2Nhc3Q8aW50cHRyX3Q+KHRvKSAmIDMpKTsKICAgICAgICAgaW50cHRyX3Qgb2Zmc2V0ID0gKHJl
aW50ZXJwcmV0X2Nhc3Q8aW50cHRyX3Q+KHRvKSAtIHJlaW50ZXJwcmV0X2Nhc3Q8aW50cHRyX3Q+
KGZyb21JbnN0cnVjdGlvbikpID4+IDI7CiAgICAgICAgIEFTU0VSVChzdGF0aWNfY2FzdDxpbnQ+
KG9mZnNldCkgPT0gb2Zmc2V0KTsKLSAgICAgICAgQVNTRVJUKGlzSW50PDI2PihvZmZzZXQpKTsK
IAogICAgICAgICBib29sIHVzZURpcmVjdCA9IGlzSW50PDE0PihvZmZzZXQpOwogICAgICAgICBB
U1NFUlQodHlwZSA9PSBJbmRpcmVjdEJyYW5jaCB8fCB1c2VEaXJlY3QpOwogCiAgICAgICAgIGlm
ICh1c2VEaXJlY3QgfHwgdHlwZSA9PSBEaXJlY3RCcmFuY2gpIHsKKyAgICAgICAgICAgIEFTU0VS
VChpc0ludDwxND4ob2Zmc2V0KSk7CiAgICAgICAgICAgICBpbnQgaW5zbiA9IHRlc3RBbmRCcmFu
Y2hJbW1lZGlhdGUoY29uZGl0aW9uID09IENvbmRpdGlvbk5FLCBzdGF0aWNfY2FzdDxpbnQ+KGJp
dE51bWJlciksIHN0YXRpY19jYXN0PGludD4ob2Zmc2V0KSwgcnQpOwogICAgICAgICAgICAgUkVM
RUFTRV9BU1NFUlQocm91bmRVcFRvTXVsdGlwbGVPZjxpbnN0cnVjdGlvblNpemU+KGZyb20pID09
IGZyb20pOwogICAgICAgICAgICAgY29weShmcm9tLCAmaW5zbiwgc2l6ZW9mKGludCkpOwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9BYnN0cmFjdE1hY3JvQXNzZW1ibGVy
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9BYnN0cmFj
dE1hY3JvQXNzZW1ibGVyLmgJKHJldmlzaW9uIDI1ODM1MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9hc3NlbWJsZXIvQWJzdHJhY3RNYWNyb0Fzc2VtYmxlci5oCSh3b3JraW5nIGNvcHkpCkBA
IC05MTksNiArOTE5LDIyIEBAIHB1YmxpYzoKICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JF
QUNIRUQoKTsKICAgICB9CiAKKyAgICB0ZW1wbGF0ZTxQdHJUYWcgY2FsbFRhZywgUHRyVGFnIGRl
c3RUYWc+CisgICAgc3RhdGljIENvZGVMb2NhdGlvbkxhYmVsPGRlc3RUYWc+IHByZXBhcmVGb3JB
dG9taWNSZXBhdGNoTmVhckNhbGxDb25jdXJyZW50bHkoQ29kZUxvY2F0aW9uTmVhckNhbGw8Y2Fs
bFRhZz4gbmVhckNhbGwsIENvZGVMb2NhdGlvbkxhYmVsPGRlc3RUYWc+IGRlc3RpbmF0aW9uKQor
ICAgIHsKKyNpZiBVU0UoSlVNUF9JU0xBTkRTKQorICAgICAgICBzd2l0Y2ggKG5lYXJDYWxsLmNh
bGxNb2RlKCkpIHsKKyAgICAgICAgY2FzZSBOZWFyQ2FsbE1vZGU6OlRhaWw6CisgICAgICAgICAg
ICByZXR1cm4gQ29kZUxvY2F0aW9uTGFiZWw8ZGVzdFRhZz4odGFnQ29kZVB0cjxkZXN0VGFnPihB
c3NlbWJsZXJUeXBlOjpwcmVwYXJlRm9yQXRvbWljUmVsaW5rSnVtcENvbmN1cnJlbnRseShuZWFy
Q2FsbC5kYXRhTG9jYXRpb24oKSwgZGVzdGluYXRpb24uZGF0YUxvY2F0aW9uKCkpKSk7CisgICAg
ICAgIGNhc2UgTmVhckNhbGxNb2RlOjpSZWd1bGFyOgorICAgICAgICAgICAgcmV0dXJuIENvZGVM
b2NhdGlvbkxhYmVsPGRlc3RUYWc+KHRhZ0NvZGVQdHI8ZGVzdFRhZz4oQXNzZW1ibGVyVHlwZTo6
cHJlcGFyZUZvckF0b21pY1JlbGlua0NhbGxDb25jdXJyZW50bHkobmVhckNhbGwuZGF0YUxvY2F0
aW9uKCksIGRlc3RpbmF0aW9uLnVudGFnZ2VkRXhlY3V0YWJsZUFkZHJlc3MoKSkpKTsKKyAgICAg
ICAgfQorI2Vsc2UKKyAgICAgICAgVU5VU0VEX1BBUkFNKG5lYXJDYWxsKTsKKyAgICAgICAgcmV0
dXJuIGRlc3RpbmF0aW9uOworI2VuZGlmCisgICAgfQorCiAgICAgdGVtcGxhdGU8UHRyVGFnIHRh
Zz4KICAgICBzdGF0aWMgdm9pZCByZXBhdGNoQ29tcGFjdChDb2RlTG9jYXRpb25EYXRhTGFiZWxD
b21wYWN0PHRhZz4gZGF0YUxhYmVsQ29tcGFjdCwgaW50MzJfdCB2YWx1ZSkKICAgICB7CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL0xpbmtCdWZmZXIuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTGlua0J1ZmZlci5jcHAJKHJl
dmlzaW9uIDI1ODM1MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTGlua0J1
ZmZlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEzMSw5ICsxMzEsOSBAQCBzdGF0aWMgQUxXQVlT
X0lOTElORSB2b2lkIHJlY29yZExpbmtPZmZzCiB9CiAKIHRlbXBsYXRlIDx0eXBlbmFtZSBJbnN0
cnVjdGlvblR5cGU+Ci12b2lkIExpbmtCdWZmZXI6OmNvcHlDb21wYWN0QW5kTGlua0NvZGUoTWFj
cm9Bc3NlbWJsZXImIG1hY3JvQXNzZW1ibGVyLCB2b2lkKiBvd25lclVJRCwgSklUQ29tcGlsYXRp
b25FZmZvcnQgZWZmb3J0KQordm9pZCBMaW5rQnVmZmVyOjpjb3B5Q29tcGFjdEFuZExpbmtDb2Rl
KE1hY3JvQXNzZW1ibGVyJiBtYWNyb0Fzc2VtYmxlciwgSklUQ29tcGlsYXRpb25FZmZvcnQgZWZm
b3J0KQogewotICAgIGFsbG9jYXRlKG1hY3JvQXNzZW1ibGVyLCBvd25lclVJRCwgZWZmb3J0KTsK
KyAgICBhbGxvY2F0ZShtYWNyb0Fzc2VtYmxlciwgZWZmb3J0KTsKICAgICBjb25zdCBzaXplX3Qg
aW5pdGlhbFNpemUgPSBtYWNyb0Fzc2VtYmxlci5tX2Fzc2VtYmxlci5jb2RlU2l6ZSgpOwogICAg
IGlmIChkaWRGYWlsVG9BbGxvY2F0ZSgpKQogICAgICAgICByZXR1cm47CkBAIC0yOTUsNyArMjk1
LDcgQEAgdm9pZCBMaW5rQnVmZmVyOjpjb3B5Q29tcGFjdEFuZExpbmtDb2RlKAogI2VuZGlmIC8v
IEVOQUJMRShCUkFOQ0hfQ09NUEFDVElPTikKIAogCi12b2lkIExpbmtCdWZmZXI6OmxpbmtDb2Rl
KE1hY3JvQXNzZW1ibGVyJiBtYWNyb0Fzc2VtYmxlciwgdm9pZCogb3duZXJVSUQsIEpJVENvbXBp
bGF0aW9uRWZmb3J0IGVmZm9ydCkKK3ZvaWQgTGlua0J1ZmZlcjo6bGlua0NvZGUoTWFjcm9Bc3Nl
bWJsZXImIG1hY3JvQXNzZW1ibGVyLCBKSVRDb21waWxhdGlvbkVmZm9ydCBlZmZvcnQpCiB7CiAg
ICAgLy8gRW5zdXJlIHRoYXQgdGhlIGVuZCBvZiB0aGUgbGFzdCBpbnZhbGlkYXRpb24gcG9pbnQg
ZG9lcyBub3QgZXh0ZW5kIGJleW9uZCB0aGUgZW5kIG9mIHRoZSBidWZmZXIuCiAgICAgbWFjcm9B
c3NlbWJsZXIubGFiZWwoKTsKQEAgLTMwNCw3ICszMDQsNyBAQCB2b2lkIExpbmtCdWZmZXI6Omxp
bmtDb2RlKE1hY3JvQXNzZW1ibGVyCiAjaWYgZGVmaW5lZChBU1NFTUJMRVJfSEFTX0NPTlNUQU5U
X1BPT0wpICYmIEFTU0VNQkxFUl9IQVNfQ09OU1RBTlRfUE9PTAogICAgIG1hY3JvQXNzZW1ibGVy
Lm1fYXNzZW1ibGVyLmJ1ZmZlcigpLmZsdXNoQ29uc3RhbnRQb29sKGZhbHNlKTsKICNlbmRpZgot
ICAgIGFsbG9jYXRlKG1hY3JvQXNzZW1ibGVyLCBvd25lclVJRCwgZWZmb3J0KTsKKyAgICBhbGxv
Y2F0ZShtYWNyb0Fzc2VtYmxlciwgZWZmb3J0KTsKICAgICBpZiAoIW1fZGlkQWxsb2NhdGUpCiAg
ICAgICAgIHJldHVybjsKICAgICBBU1NFUlQobV9jb2RlKTsKQEAgLTMxOCwxNSArMzE4LDE1IEBA
IHZvaWQgTGlua0J1ZmZlcjo6bGlua0NvZGUoTWFjcm9Bc3NlbWJsZXIKICAgICBtYWNyb0Fzc2Vt
Ymxlci5tX2Fzc2VtYmxlci5yZWxvY2F0ZUp1bXBzKGJ1ZmZlci5kYXRhKCksIGNvZGUpOwogI2Vu
ZGlmCiAjZWxpZiBDUFUoQVJNX1RIVU1CMikKLSAgICBjb3B5Q29tcGFjdEFuZExpbmtDb2RlPHVp
bnQxNl90PihtYWNyb0Fzc2VtYmxlciwgb3duZXJVSUQsIGVmZm9ydCk7CisgICAgY29weUNvbXBh
Y3RBbmRMaW5rQ29kZTx1aW50MTZfdD4obWFjcm9Bc3NlbWJsZXIsIGVmZm9ydCk7CiAjZWxpZiBD
UFUoQVJNNjQpCi0gICAgY29weUNvbXBhY3RBbmRMaW5rQ29kZTx1aW50MzJfdD4obWFjcm9Bc3Nl
bWJsZXIsIG93bmVyVUlELCBlZmZvcnQpOworICAgIGNvcHlDb21wYWN0QW5kTGlua0NvZGU8dWlu
dDMyX3Q+KG1hY3JvQXNzZW1ibGVyLCBlZmZvcnQpOwogI2VuZGlmIC8vICFFTkFCTEUoQlJBTkNI
X0NPTVBBQ1RJT04pCiAKICAgICBtX2xpbmtUYXNrcyA9IFdURk1vdmUobWFjcm9Bc3NlbWJsZXIu
bV9saW5rVGFza3MpOwogfQogCi12b2lkIExpbmtCdWZmZXI6OmFsbG9jYXRlKE1hY3JvQXNzZW1i
bGVyJiBtYWNyb0Fzc2VtYmxlciwgdm9pZCogb3duZXJVSUQsIEpJVENvbXBpbGF0aW9uRWZmb3J0
IGVmZm9ydCkKK3ZvaWQgTGlua0J1ZmZlcjo6YWxsb2NhdGUoTWFjcm9Bc3NlbWJsZXImIG1hY3Jv
QXNzZW1ibGVyLCBKSVRDb21waWxhdGlvbkVmZm9ydCBlZmZvcnQpCiB7CiAgICAgc2l6ZV90IGlu
aXRpYWxTaXplID0gbWFjcm9Bc3NlbWJsZXIubV9hc3NlbWJsZXIuY29kZVNpemUoKTsKICAgICBp
ZiAobV9jb2RlKSB7CkBAIC0zNDQsNyArMzQ0LDcgQEAgdm9pZCBMaW5rQnVmZmVyOjphbGxvY2F0
ZShNYWNyb0Fzc2VtYmxlcgogICAgICAgICBpbml0aWFsU2l6ZSA9IG1hY3JvQXNzZW1ibGVyLm1f
YXNzZW1ibGVyLmNvZGVTaXplKCk7CiAgICAgfQogCi0gICAgbV9leGVjdXRhYmxlTWVtb3J5ID0g
RXhlY3V0YWJsZUFsbG9jYXRvcjo6c2luZ2xldG9uKCkuYWxsb2NhdGUoaW5pdGlhbFNpemUsIG93
bmVyVUlELCBlZmZvcnQpOworICAgIG1fZXhlY3V0YWJsZU1lbW9yeSA9IEV4ZWN1dGFibGVBbGxv
Y2F0b3I6OnNpbmdsZXRvbigpLmFsbG9jYXRlKGluaXRpYWxTaXplLCBlZmZvcnQpOwogICAgIGlm
ICghbV9leGVjdXRhYmxlTWVtb3J5KQogICAgICAgICByZXR1cm47CiAgICAgbV9jb2RlID0gTWFj
cm9Bc3NlbWJsZXJDb2RlUHRyPExpbmtCdWZmZXJQdHJUYWc+KG1fZXhlY3V0YWJsZU1lbW9yeS0+
c3RhcnQoKS5yZXRhZ2dlZFB0cjxMaW5rQnVmZmVyUHRyVGFnPigpKTsKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTGlua0J1ZmZlci5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTGlua0J1ZmZlci5oCShyZXZpc2lvbiAyNTgzNTAp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL0xpbmtCdWZmZXIuaAkod29ya2lu
ZyBjb3B5KQpAQCAtOTAsNyArOTAsOCBAQCBwdWJsaWM6CiAgICAgICAgICwgbV9jb21wbGV0ZWQo
ZmFsc2UpCiAjZW5kaWYKICAgICB7Ci0gICAgICAgIGxpbmtDb2RlKG1hY3JvQXNzZW1ibGVyLCBv
d25lclVJRCwgZWZmb3J0KTsKKyAgICAgICAgVU5VU0VEX1BBUkFNKG93bmVyVUlEKTsKKyAgICAg
ICAgbGlua0NvZGUobWFjcm9Bc3NlbWJsZXIsIGVmZm9ydCk7CiAgICAgfQogCiAgICAgdGVtcGxh
dGU8UHRyVGFnIHRhZz4KQEAgLTEwNyw3ICsxMDgsNyBAQCBwdWJsaWM6CiAjZWxzZQogICAgICAg
ICBVTlVTRURfUEFSQU0oc2hvdWxkUGVyZm9ybUJyYW5jaENvbXBhY3Rpb24pOwogI2VuZGlmCi0g
ICAgICAgIGxpbmtDb2RlKG1hY3JvQXNzZW1ibGVyLCAwLCBlZmZvcnQpOworICAgICAgICBsaW5r
Q29kZShtYWNyb0Fzc2VtYmxlciwgZWZmb3J0KTsKICAgICB9CiAKICAgICB+TGlua0J1ZmZlcigp
CkBAIC0zMjEsMTIgKzMyMiwxMiBAQCBwcml2YXRlOgogICAgICAgICByZXR1cm4gbV9jb2RlLmRh
dGFMb2NhdGlvbigpOwogICAgIH0KICAgICAKLSAgICB2b2lkIGFsbG9jYXRlKE1hY3JvQXNzZW1i
bGVyJiwgdm9pZCogb3duZXJVSUQsIEpJVENvbXBpbGF0aW9uRWZmb3J0KTsKKyAgICB2b2lkIGFs
bG9jYXRlKE1hY3JvQXNzZW1ibGVyJiwgSklUQ29tcGlsYXRpb25FZmZvcnQpOwogCi0gICAgSlNf
RVhQT1JUX1BSSVZBVEUgdm9pZCBsaW5rQ29kZShNYWNyb0Fzc2VtYmxlciYsIHZvaWQqIG93bmVy
VUlELCBKSVRDb21waWxhdGlvbkVmZm9ydCk7CisgICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBs
aW5rQ29kZShNYWNyb0Fzc2VtYmxlciYsIEpJVENvbXBpbGF0aW9uRWZmb3J0KTsKICNpZiBFTkFC
TEUoQlJBTkNIX0NPTVBBQ1RJT04pCiAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIEluc3RydWN0aW9u
VHlwZT4KLSAgICB2b2lkIGNvcHlDb21wYWN0QW5kTGlua0NvZGUoTWFjcm9Bc3NlbWJsZXImLCB2
b2lkKiBvd25lclVJRCwgSklUQ29tcGlsYXRpb25FZmZvcnQpOworICAgIHZvaWQgY29weUNvbXBh
Y3RBbmRMaW5rQ29kZShNYWNyb0Fzc2VtYmxlciYsIEpJVENvbXBpbGF0aW9uRWZmb3J0KTsKICNl
bmRpZgogCiAgICAgdm9pZCBwZXJmb3JtRmluYWxpemF0aW9uKCk7CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyQ29kZVJlZi5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJDb2RlUmVm
LmgJKHJldmlzaW9uIDI1ODM1MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIv
TWFjcm9Bc3NlbWJsZXJDb2RlUmVmLmgJKHdvcmtpbmcgY29weSkKQEAgLTQzNCw3ICs0MzQsNiBA
QCBwdWJsaWM6CiAgICAgICAgIDogbV9jb2RlUHRyKGV4ZWN1dGFibGVNZW1vcnktPnN0YXJ0KCku
cmV0YWdnZWRQdHI8dGFnPigpKQogICAgICAgICAsIG1fZXhlY3V0YWJsZU1lbW9yeShXVEZNb3Zl
KGV4ZWN1dGFibGVNZW1vcnkpKQogICAgIHsKLSAgICAgICAgQVNTRVJUKG1fZXhlY3V0YWJsZU1l
bW9yeS0+aXNNYW5hZ2VkKCkpOwogICAgICAgICBBU1NFUlQobV9leGVjdXRhYmxlTWVtb3J5LT5z
dGFydCgpKTsKICAgICAgICAgQVNTRVJUKG1fY29kZVB0cik7CiAgICAgfQpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9FeGVjdXRhYmxlQWxsb2NhdG9yLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0V4ZWN1dGFibGVBbGxvY2F0b3IuY3BwCShyZXZp
c2lvbiAyNTgzNTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0V4ZWN1dGFibGVBbGxv
Y2F0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw5ICsyOCwxMCBAQAogCiAjaWYgRU5BQkxF
KEpJVCkKIAotI2luY2x1ZGUgIkNvZGVQcm9maWxpbmcuaCIKICNpbmNsdWRlICJFeGVjdXRhYmxl
QWxsb2NhdGlvbkZ1enouaCIKKyNpbmNsdWRlICJJdGVyYXRpb25TdGF0dXMuaCIKICNpbmNsdWRl
ICJKU0NJbmxpbmVzLmgiCisjaW5jbHVkZSA8dHlwZV90cmFpdHM+CiAjaW5jbHVkZSA8d3RmL0Zp
bGVTeXN0ZW0uaD4KICNpbmNsdWRlIDx3dGYvTWV0YUFsbG9jYXRvci5oPgogI2luY2x1ZGUgPHd0
Zi9QYWdlUmVzZXJ2YXRpb24uaD4KQEAgLTk2LDkgKzk3LDIwIEBAIHN0YXRpYyBjb25zdGV4cHIg
c2l6ZV90IGZpeGVkRXhlY3V0YWJsZU0KICNlbGlmIENQVShBUk0pCiBzdGF0aWMgY29uc3RleHBy
IHNpemVfdCBmaXhlZEV4ZWN1dGFibGVNZW1vcnlQb29sU2l6ZSA9IDE2ICogMTAyNCAqIDEwMjQ7
CiAjZWxpZiBDUFUoQVJNNjQpCisjaWYgVVNFKEpVTVBfSVNMQU5EUykKK3N0YXRpYyBjb25zdGV4
cHIgc2l6ZV90IGZpeGVkRXhlY3V0YWJsZU1lbW9yeVBvb2xTaXplID0gMSAqIDEwMjQgKiAxMDI0
ICogMTAyNDsKKy8vIFRoZXNlIHNpemVzIGd1YXJhbnRlZSB0aGF0IGFueSBqdW1wIHdpdGhpbiBh
biBpc2xhbmQgY2FuIGp1bXAgZm9yd2FyZHMgb3IgYmFja3dhcmRzCisvLyB0byB0aGUgYWRqYWNl
bnQgaXNsYW5kIGluIGEgc2luZ2xlIGluc3RydWN0aW9uLgorc3RhdGljIGNvbnN0ZXhwciBzaXpl
X3QgcmVnaW9uU2l6ZSA9IDExMiAqIDEwMjQgKiAxMDI0Oworc3RhdGljIGNvbnN0ZXhwciBzaXpl
X3QgaXNsYW5kUmVnaW9uU2l6ZSA9IDE2ICogMTAyNCAqIDEwMjQ7CitzdGF0aWMgY29uc3RleHBy
IHNpemVfdCBudW1iZXJPZlJlZ2lvbnMgPSBmaXhlZEV4ZWN1dGFibGVNZW1vcnlQb29sU2l6ZSAv
IHJlZ2lvblNpemU7CitzdGF0aWMgY29uc3RleHByIHNpemVfdCBpc2xhbmRTaXplSW5CeXRlcyA9
IDQ7CitzdGF0aWMgY29uc3RleHByIHNpemVfdCBtYXhJc2xhbmRzUGVyUmVnaW9uID0gaXNsYW5k
UmVnaW9uU2l6ZSAvIGlzbGFuZFNpemVJbkJ5dGVzOworI2Vsc2UKIHN0YXRpYyBjb25zdGV4cHIg
c2l6ZV90IGZpeGVkRXhlY3V0YWJsZU1lbW9yeVBvb2xTaXplID0gMTI4ICogMTAyNCAqIDEwMjQ7
CisjZW5kaWYKICNlbGlmIENQVShYODZfNjQpCi1zdGF0aWMgY29uc3RleHByIHNpemVfdCBmaXhl
ZEV4ZWN1dGFibGVNZW1vcnlQb29sU2l6ZSA9IDEwMjQgKiAxMDI0ICogMTAyNDsKK3N0YXRpYyBj
b25zdGV4cHIgc2l6ZV90IGZpeGVkRXhlY3V0YWJsZU1lbW9yeVBvb2xTaXplID0gMSAqIDEwMjQg
KiAxMDI0ICogMTAyNDsKICNlbHNlCiBzdGF0aWMgY29uc3RleHByIHNpemVfdCBmaXhlZEV4ZWN1
dGFibGVNZW1vcnlQb29sU2l6ZSA9IDMyICogMTAyNCAqIDEwMjQ7CiAjZW5kaWYKQEAgLTMxMywx
MCArMzI1LDExIEBAIHN0YXRpYyBBTFdBWVNfSU5MSU5FIEpJVFJlc2VydmF0aW9uIGluaXQKICAg
ICBpZiAoIWlzSklURW5hYmxlZCgpKQogICAgICAgICByZXR1cm4gcmVzZXJ2YXRpb247CiAKKyAg
ICByZXNlcnZhdGlvbi5zaXplID0gZml4ZWRFeGVjdXRhYmxlTWVtb3J5UG9vbFNpemU7CisjaWYg
IVVTRShKVU1QX0lTTEFORFMpCiAgICAgaWYgKE9wdGlvbnM6OmppdE1lbW9yeVJlc2VydmF0aW9u
U2l6ZSgpKQogICAgICAgICByZXNlcnZhdGlvbi5zaXplID0gT3B0aW9uczo6aml0TWVtb3J5UmVz
ZXJ2YXRpb25TaXplKCk7Ci0gICAgZWxzZQotICAgICAgICByZXNlcnZhdGlvbi5zaXplID0gZml4
ZWRFeGVjdXRhYmxlTWVtb3J5UG9vbFNpemU7CisjZW5kaWYKICAgICByZXNlcnZhdGlvbi5zaXpl
ID0gc3RkOjptYXgocm91bmRVcFRvTXVsdGlwbGVPZihwYWdlU2l6ZSgpLCByZXNlcnZhdGlvbi5z
aXplKSwgcGFnZVNpemUoKSAqIDIpOwogCiAgICAgYXV0byB0cnlDcmVhdGVQYWdlUmVzZXJ2YXRp
b24gPSBbXSAoc2l6ZV90IHJlc2VydmF0aW9uU2l6ZSkgewpAQCAtMzYzLDUyICszNzYsNDQ3IEBA
IHN0YXRpYyBBTFdBWVNfSU5MSU5FIEpJVFJlc2VydmF0aW9uIGluaXQKICAgICByZXR1cm4gcmVz
ZXJ2YXRpb247CiB9CiAKLWNsYXNzIEZpeGVkVk1Qb29sRXhlY3V0YWJsZUFsbG9jYXRvciBmaW5h
bCA6IHB1YmxpYyBNZXRhQWxsb2NhdG9yIHsKK2NsYXNzIEZpeGVkVk1Qb29sRXhlY3V0YWJsZUFs
bG9jYXRvciBmaW5hbCB7CiAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CisKKyNpZiBVU0Uo
SlVNUF9JU0xBTkRTKQorICAgIGNsYXNzIElzbGFuZHM7CisgICAgY2xhc3MgUmVnaW9uQWxsb2Nh
dG9yOworI2VuZGlmCisKIHB1YmxpYzoKICAgICBGaXhlZFZNUG9vbEV4ZWN1dGFibGVBbGxvY2F0
b3IoKQotICAgICAgICA6IE1ldGFBbGxvY2F0b3Ioaml0QWxsb2NhdGlvbkdyYW51bGUpIC8vIHJv
dW5kIHVwIGFsbCBhbGxvY2F0aW9ucyB0byAzMiBieXRlcworI2lmIFVTRShKVU1QX0lTTEFORFMp
CisgICAgICAgIDogbV9hbGxvY2F0b3JzKGNvbnN0cnVjdEZpeGVkU2l6ZUFycmF5V2l0aEFyZ3Vt
ZW50czxSZWdpb25BbGxvY2F0b3IsIG51bWJlck9mUmVnaW9ucz4oKnRoaXMpKQorI2Vsc2UKKyAg
ICAgICAgOiBtX2FsbG9jYXRvcigqdGhpcykKKyNlbmRpZgogICAgIHsKICAgICAgICAgSklUUmVz
ZXJ2YXRpb24gcmVzZXJ2YXRpb24gPSBpbml0aWFsaXplSklUUGFnZVJlc2VydmF0aW9uKCk7CiAg
ICAgICAgIG1fcmVzZXJ2YXRpb24gPSBXVEZNb3ZlKHJlc2VydmF0aW9uLnBhZ2VSZXNlcnZhdGlv
bik7CiAgICAgICAgIGlmIChtX3Jlc2VydmF0aW9uKSB7Ci0gICAgICAgICAgICBhZGRGcmVzaEZy
ZWVTcGFjZShyZXNlcnZhdGlvbi5iYXNlLCByZXNlcnZhdGlvbi5zaXplKTsKKyNpZiBVU0UoSlVN
UF9JU0xBTkRTKQorICAgICAgICAgICAgdWludHB0cl90IHN0YXJ0ID0gYml0d2lzZV9jYXN0PHVp
bnRwdHJfdD4obV9yZXNlcnZhdGlvbi5iYXNlKCkpOworICAgICAgICAgICAgdWludHB0cl90IHJl
c2VydmF0aW9uRW5kID0gc3RhcnQgKyBtX3Jlc2VydmF0aW9uLnNpemUoKTsKKyAgICAgICAgICAg
IGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbnVtYmVyT2ZSZWdpb25zOyArK2kpIHsKKyAgICAgICAg
ICAgICAgICBSRUxFQVNFX0FTU0VSVChzdGFydCA8IHJlc2VydmF0aW9uRW5kKTsKKyAgICAgICAg
ICAgICAgICBtX2FsbG9jYXRvcnNbaV0ubV9zdGFydCA9IHRhZ0NvZGVQdHI8RXhlY3V0YWJsZU1l
bW9yeVB0clRhZz4oYml0d2lzZV9jYXN0PHZvaWQqPihzdGFydCkpOworICAgICAgICAgICAgICAg
IG1fYWxsb2NhdG9yc1tpXS5tX2VuZCA9IHRhZ0NvZGVQdHI8RXhlY3V0YWJsZU1lbW9yeVB0clRh
Zz4oYml0d2lzZV9jYXN0PHZvaWQqPihzdGFydCArIHJlZ2lvblNpemUpKTsKKyAgICAgICAgICAg
ICAgICBpZiAobV9hbGxvY2F0b3JzW2ldLmVuZCgpID4gcmVzZXJ2YXRpb25FbmQpIHsKKyAgICAg
ICAgICAgICAgICAgICAgLy8gV2UgbWF5IGhhdmUgdGFrZW4gYSBwYWdlIGZvciB0aGUgZXhlY3V0
YWJsZSBvbmx5IGNvcHkgdGh1bmsuCisgICAgICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJU
KGkgPT0gbnVtYmVyT2ZSZWdpb25zIC0gMSk7CisgICAgICAgICAgICAgICAgICAgIG1fYWxsb2Nh
dG9yc1tpXS5tX2VuZCA9IHRhZ0NvZGVQdHI8RXhlY3V0YWJsZU1lbW9yeVB0clRhZz4oYml0d2lz
ZV9jYXN0PHZvaWQqPihyZXNlcnZhdGlvbkVuZCkpOworICAgICAgICAgICAgICAgIH0KKworICAg
ICAgICAgICAgICAgIG1fYWxsb2NhdG9yc1tpXS5hZGRGcmVzaEZyZWVTcGFjZShiaXR3aXNlX2Nh
c3Q8dm9pZCo+KG1fYWxsb2NhdG9yc1tpXS5zdGFydCgpKSwgbV9hbGxvY2F0b3JzW2ldLmFsbG9j
YXRvclNpemUoKSk7CisKKyAgICAgICAgICAgICAgICBzdGFydCArPSByZWdpb25TaXplOworICAg
ICAgICAgICAgfQorI2Vsc2UKKyAgICAgICAgICAgIG1fYWxsb2NhdG9yLmFkZEZyZXNoRnJlZVNw
YWNlKHJlc2VydmF0aW9uLmJhc2UsIHJlc2VydmF0aW9uLnNpemUpOworI2VuZGlmCisKICAgICAg
ICAgICAgIEFTU0VSVChieXRlc1Jlc2VydmVkKCkgPT0gcmVzZXJ2YXRpb24uc2l6ZSk7IC8vIFNp
bmNlIG91ciBleGVjdXRhYmxlIG1lbW9yeSBpcyBmaXhlZC1zaXplZCwgYnl0ZXNSZXNlcnZlZCBp
cyBuZXZlciBjaGFuZ2VkIGFmdGVyIGluaXRpYWxpemF0aW9uLgogICAgICAgICB9CiAgICAgfQog
Ci0gICAgdmlydHVhbCB+Rml4ZWRWTVBvb2xFeGVjdXRhYmxlQWxsb2NhdG9yKCk7CisgICAgfkZp
eGVkVk1Qb29sRXhlY3V0YWJsZUFsbG9jYXRvcigpCisgICAgeworICAgICAgICBtX3Jlc2VydmF0
aW9uLmRlYWxsb2NhdGUoKTsKKyAgICB9CiAKICAgICB2b2lkKiBtZW1vcnlTdGFydCgpIHsgcmV0
dXJuIHVudGFnQ29kZVB0cjxFeGVjdXRhYmxlTWVtb3J5UHRyVGFnPihnX2pzY0NvbmZpZy5zdGFy
dEV4ZWN1dGFibGVNZW1vcnkpOyB9CiAgICAgdm9pZCogbWVtb3J5RW5kKCkgeyByZXR1cm4gdW50
YWdDb2RlUHRyPEV4ZWN1dGFibGVNZW1vcnlQdHJUYWc+KGdfanNjQ29uZmlnLmVuZEV4ZWN1dGFi
bGVNZW1vcnkpOyB9CiAgICAgYm9vbCBpc0pJVFBDKHZvaWQqIHBjKSB7IHJldHVybiBtZW1vcnlT
dGFydCgpIDw9IHBjICYmIHBjIDwgbWVtb3J5RW5kKCk7IH0KKyAgICBib29sIGlzVmFsaWQoKSB7
IHJldHVybiAhIW1fcmVzZXJ2YXRpb247IH0KIAotcHJvdGVjdGVkOgotICAgIEZyZWVTcGFjZVB0
ciBhbGxvY2F0ZU5ld1NwYWNlKHNpemVfdCYpIG92ZXJyaWRlCisgICAgUmVmUHRyPEV4ZWN1dGFi
bGVNZW1vcnlIYW5kbGU+IGFsbG9jYXRlKHNpemVfdCBzaXplSW5CeXRlcykKICAgICB7Ci0gICAg
ICAgIC8vIFdlJ3JlIG9wZXJhdGluZyBpbiBhIGZpeGVkIHBvb2wsIHNvIG5ldyBhbGxvY2F0aW9u
IGlzIGFsd2F5cyBwcm9oaWJpdGVkLgorI2lmIFVTRShKVU1QX0lTTEFORFMpCisgICAgICAgIGF1
dG8gbG9ja2VyID0gaG9sZExvY2soZ2V0TG9jaygpKTsKKworICAgICAgICB1bnNpZ25lZCBzdGFy
dCA9IDA7CisgICAgICAgIGlmIChPcHRpb25zOjp1c2VSYW5kb21pemluZ0V4ZWN1dGFibGVJc2xh
bmRBbGxvY2F0aW9uKCkpCisgICAgICAgICAgICBzdGFydCA9IGNyeXB0b2dyYXBoaWNhbGx5UmFu
ZG9tTnVtYmVyKCkgJSBtX2FsbG9jYXRvcnMuc2l6ZSgpOworCisgICAgICAgIHVuc2lnbmVkIGkg
PSBzdGFydDsKKyAgICAgICAgd2hpbGUgKHRydWUpIHsKKyAgICAgICAgICAgIFJlZ2lvbkFsbG9j
YXRvciYgYWxsb2NhdG9yID0gbV9hbGxvY2F0b3JzW2ldOworICAgICAgICAgICAgaWYgKFJlZlB0
cjxFeGVjdXRhYmxlTWVtb3J5SGFuZGxlPiByZXN1bHQgPSBhbGxvY2F0b3IuYWxsb2NhdGUobG9j
a2VyLCBzaXplSW5CeXRlcykpCisgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAg
ICAgICAgIGkgPSAoaSArIDEpICUgbV9hbGxvY2F0b3JzLnNpemUoKTsKKyAgICAgICAgICAgIGlm
IChpID09IHN0YXJ0KQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CiAgICAgICAg
IHJldHVybiBudWxscHRyOworI2Vsc2UKKyAgICAgICAgcmV0dXJuIG1fYWxsb2NhdG9yLmFsbG9j
YXRlKHNpemVJbkJ5dGVzKTsKKyNlbmRpZiAvLyBVU0UoSlVNUF9JU0xBTkRTKQorICAgIH0KKwor
ICAgIExvY2smIGdldExvY2soKSB7IHJldHVybiBtX2xvY2s7IH0KKworICAgIC8vIE5vbiBhdG9t
aWMKKyAgICBzaXplX3QgYnl0ZXNBbGxvY2F0ZWQoKSAKKyAgICB7CisgICAgICAgIHNpemVfdCBy
ZXN1bHQgPSAwOworICAgICAgICBmb3JFYWNoQWxsb2NhdG9yKFsmXSAoQWxsb2NhdG9yJiBhbGxv
Y2F0b3IpIHsKKyAgICAgICAgICAgIHJlc3VsdCArPSBhbGxvY2F0b3IuYnl0ZXNBbGxvY2F0ZWQo
KTsKKyAgICAgICAgfSk7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorICAgIHNpemVf
dCBieXRlc1Jlc2VydmVkKCkgCisgICAgeworICAgICAgICBzaXplX3QgcmVzdWx0ID0gMDsKKyAg
ICAgICAgZm9yRWFjaEFsbG9jYXRvcihbJl0gKEFsbG9jYXRvciYgYWxsb2NhdG9yKSB7CisgICAg
ICAgICAgICByZXN1bHQgKz0gYWxsb2NhdG9yLmJ5dGVzUmVzZXJ2ZWQoKTsKKyAgICAgICAgfSk7
CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorICAgIHNpemVfdCBieXRlc0NvbW1pdHRl
ZCgpCisgICAgeworICAgICAgICBzaXplX3QgcmVzdWx0ID0gMDsKKyAgICAgICAgZm9yRWFjaEFs
bG9jYXRvcihbJl0gKEFsbG9jYXRvciYgYWxsb2NhdG9yKSB7CisgICAgICAgICAgICByZXN1bHQg
Kz0gYWxsb2NhdG9yLmJ5dGVzQ29tbWl0dGVkKCk7CisgICAgICAgIH0pOworICAgICAgICByZXR1
cm4gcmVzdWx0OworICAgIH0KKworICAgIGJvb2wgaXNJbkFsbG9jYXRlZE1lbW9yeShjb25zdCBB
YnN0cmFjdExvY2tlciYgbG9ja2VyLCB2b2lkKiBhZGRyZXNzKQorICAgIHsKKyNpZiBVU0UoSlVN
UF9JU0xBTkRTKQorICAgICAgICBpZiAoUmVnaW9uQWxsb2NhdG9yKiBhbGxvY2F0b3IgPSBmaW5k
UmVnaW9uKGJpdHdpc2VfY2FzdDx1aW50cHRyX3Q+KGFkZHJlc3MpKSkKKyAgICAgICAgICAgIHJl
dHVybiBhbGxvY2F0b3ItPmlzSW5BbGxvY2F0ZWRNZW1vcnkobG9ja2VyLCBhZGRyZXNzKTsKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworI2Vsc2UKKyAgICAgICAgcmV0dXJuIG1fYWxsb2NhdG9yLmlz
SW5BbGxvY2F0ZWRNZW1vcnkobG9ja2VyLCBhZGRyZXNzKTsKKyNlbmRpZgorICAgIH0KKworI2lm
IEVOQUJMRShNRVRBX0FMTE9DQVRPUl9QUk9GSUxFKQorICAgIHZvaWQgZHVtcFByb2ZpbGUoKQor
ICAgIHsKKyAgICAgICAgZm9yRWFjaEFsbG9jYXRvcihbJl0gKEFsbG9jYXRvciYgYWxsb2NhdG9y
KSB7CisgICAgICAgICAgICBhbGxvY2F0b3IuZHVtcFByb2ZpbGUoKTsKKyAgICAgICAgfSk7Cisg
ICAgfQorI2VuZGlmCisKKyAgICBNZXRhQWxsb2NhdG9yOjpTdGF0aXN0aWNzIGN1cnJlbnRTdGF0
aXN0aWNzKCkKKyAgICB7CisgICAgICAgIGF1dG8gbG9ja2VyID0gaG9sZExvY2soZ2V0TG9jaygp
KTsKKyAgICAgICAgTWV0YUFsbG9jYXRvcjo6U3RhdGlzdGljcyByZXN1bHQgeyAwLCAwLCAwIH07
CisgICAgICAgIGZvckVhY2hBbGxvY2F0b3IoWyZdIChBbGxvY2F0b3ImIGFsbG9jYXRvcikgewor
ICAgICAgICAgICAgYXV0byBhbGxvY2F0b3JTdGF0cyA9IGFsbG9jYXRvci5jdXJyZW50U3RhdGlz
dGljcyhsb2NrZXIpOworICAgICAgICAgICAgcmVzdWx0LmJ5dGVzQWxsb2NhdGVkICs9IGFsbG9j
YXRvclN0YXRzLmJ5dGVzQWxsb2NhdGVkOworICAgICAgICAgICAgcmVzdWx0LmJ5dGVzUmVzZXJ2
ZWQgKz0gYWxsb2NhdG9yU3RhdHMuYnl0ZXNSZXNlcnZlZDsKKyAgICAgICAgICAgIHJlc3VsdC5i
eXRlc0NvbW1pdHRlZCArPSBhbGxvY2F0b3JTdGF0cy5ieXRlc0NvbW1pdHRlZDsKKyAgICAgICAg
fSk7CisgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgfQogCi0gICAgdm9pZCBub3RpZnlOZWVk
UGFnZSh2b2lkKiBwYWdlLCBzaXplX3QgY291bnQpIG92ZXJyaWRlCisjaWYgVVNFKEpVTVBfSVNM
QU5EUykKKyAgICB2b2lkIGhhbmRsZVdpbGxCZVJlbGVhc2VkKGNvbnN0IExvY2tIb2xkZXImIGxv
Y2tlciwgTWV0YUFsbG9jYXRvckhhbmRsZSYgaGFuZGxlKQogICAgIHsKLSAgICAgICAgbV9yZXNl
cnZhdGlvbi5jb21taXQocGFnZSwgcGFnZVNpemUoKSAqIGNvdW50KTsKKyAgICAgICAgaWYgKGlz
bGFuZHNGb3JKdW1wTG9jYXRpb24uaXNFbXB0eSgpKQorICAgICAgICAgICAgcmV0dXJuOworCisg
ICAgICAgIFZlY3RvcjxJc2xhbmRzKiwgMTY+IHRvUmVtb3ZlOworICAgICAgICB2b2lkKiBzdGFy
dCA9IGhhbmRsZS5zdGFydCgpLnVudGFnZ2VkUHRyKCk7CisgICAgICAgIHZvaWQqIGVuZCA9IGhh
bmRsZS5lbmQoKS51bnRhZ2dlZFB0cigpOworICAgICAgICBpc2xhbmRzRm9ySnVtcExvY2F0aW9u
Lml0ZXJhdGUoWyZdIChJc2xhbmRzJiBpc2xhbmRzLCBib29sJiB2aXNpdExlZnQsIGJvb2wmIHZp
c2l0UmlnaHQpIHsKKyAgICAgICAgICAgIGlmIChzdGFydCA8PSBpc2xhbmRzLmtleSgpICYmIGlz
bGFuZHMua2V5KCkgPCBlbmQpCisgICAgICAgICAgICAgICAgdG9SZW1vdmUuYXBwZW5kKCZpc2xh
bmRzKTsKKyAgICAgICAgICAgIGlmIChpc2xhbmRzLmtleSgpID4gc3RhcnQpCisgICAgICAgICAg
ICAgICAgdmlzaXRMZWZ0ID0gdHJ1ZTsKKyAgICAgICAgICAgIGlmIChpc2xhbmRzLmtleSgpIDwg
ZW5kKQorICAgICAgICAgICAgICAgIHZpc2l0UmlnaHQgPSB0cnVlOworICAgICAgICB9KTsKKwor
ICAgICAgICBmb3IgKElzbGFuZHMqIGlzbGFuZHMgOiB0b1JlbW92ZSkKKyAgICAgICAgICAgIGZy
ZWVJc2xhbmRzKGxvY2tlciwgaXNsYW5kcyk7CisKKyAgICAgICAgaWYgKEFTU0VSVF9FTkFCTEVE
KSB7CisgICAgICAgICAgICBpc2xhbmRzRm9ySnVtcExvY2F0aW9uLml0ZXJhdGUoWyZdIChJc2xh
bmRzJiBpc2xhbmRzLCBib29sJiB2aXNpdExlZnQsIGJvb2wmIHZpc2l0UmlnaHQpIHsKKyAgICAg
ICAgICAgICAgICBpZiAoc3RhcnQgPD0gaXNsYW5kcy5rZXkoKSAmJiBpc2xhbmRzLmtleSgpIDwg
ZW5kKSB7CisgICAgICAgICAgICAgICAgICAgIGRhdGFMb2dMbigiZGlkIG5vdCByZW1vdmUgZXZl
cnl0aGluZyEiKTsKKyAgICAgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNI
RUQoKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgdmlzaXRMZWZ0ID0gdHJ1
ZTsKKyAgICAgICAgICAgICAgICB2aXNpdFJpZ2h0ID0gdHJ1ZTsKKyAgICAgICAgICAgIH0pOwor
ICAgICAgICB9CiAgICAgfQogCi0gICAgdm9pZCBub3RpZnlQYWdlSXNGcmVlKHZvaWQqIHBhZ2Us
IHNpemVfdCBjb3VudCkgb3ZlcnJpZGUKKyAgICB2b2lkKiBtYWtlSXNsYW5kKHVpbnRwdHJfdCBq
dW1wTG9jYXRpb24sIHVpbnRwdHJfdCBuZXdUYXJnZXQsIGJvb2wgY29uY3VycmVudGx5KQogICAg
IHsKLSAgICAgICAgbV9yZXNlcnZhdGlvbi5kZWNvbW1pdChwYWdlLCBwYWdlU2l6ZSgpICogY291
bnQpOworICAgICAgICBhdXRvIGxvY2tlciA9IGhvbGRMb2NrKGdldExvY2soKSk7CisgICAgICAg
IHJldHVybiBpc2xhbmRGb3JKdW1wTG9jYXRpb24obG9ja2VyLCBqdW1wTG9jYXRpb24sIG5ld1Rh
cmdldCwgY29uY3VycmVudGx5KTsKICAgICB9CiAKIHByaXZhdGU6CisgICAgUmVnaW9uQWxsb2Nh
dG9yKiBmaW5kUmVnaW9uKHVpbnRwdHJfdCBwdHIpCisgICAgeworICAgICAgICBSZWdpb25BbGxv
Y2F0b3IqIHJlc3VsdCA9IG51bGxwdHI7CisgICAgICAgIGZvckVhY2hBbGxvY2F0b3IoWyZdIChS
ZWdpb25BbGxvY2F0b3ImIGFsbG9jYXRvcikgeworICAgICAgICAgICAgaWYgKGFsbG9jYXRvci5z
dGFydCgpIDw9IHB0ciAmJiBwdHIgPCBhbGxvY2F0b3IuZW5kKCkpIHsKKyAgICAgICAgICAgICAg
ICByZXN1bHQgPSAmYWxsb2NhdG9yOworICAgICAgICAgICAgICAgIHJldHVybiBJdGVyYXRpb25T
dGF0dXM6OkRvbmU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gSXRlcmF0aW9u
U3RhdHVzOjpDb250aW51ZTsKKyAgICAgICAgfSk7CisgICAgICAgIHJldHVybiByZXN1bHQ7Cisg
ICAgfQorCisgICAgdm9pZCBmcmVlSnVtcElzbGFuZHMoY29uc3QgTG9ja0hvbGRlciYsIElzbGFu
ZHMqIGlzbGFuZHMpCisgICAgeworICAgICAgICBmb3IgKENvZGVMb2NhdGlvbkxhYmVsPEV4ZWN1
dGFibGVNZW1vcnlQdHJUYWc+IGp1bXBJc2xhbmQgOiBpc2xhbmRzLT5qdW1wSXNsYW5kcykgewor
ICAgICAgICAgICAgdWludHB0cl90IHVudGFnZ2VkSnVtcElzbGFuZCA9IGJpdHdpc2VfY2FzdDx1
aW50cHRyX3Q+KGp1bXBJc2xhbmQuZGF0YUxvY2F0aW9uKCkpOworICAgICAgICAgICAgUmVnaW9u
QWxsb2NhdG9yKiBhbGxvY2F0b3IgPSBmaW5kUmVnaW9uKHVudGFnZ2VkSnVtcElzbGFuZCk7Cisg
ICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChhbGxvY2F0b3IpOworICAgICAgICAgICAgYWxsb2Nh
dG9yLT5mcmVlSXNsYW5kKHVudGFnZ2VkSnVtcElzbGFuZCk7CisgICAgICAgIH0KKyAgICAgICAg
aXNsYW5kcy0+anVtcElzbGFuZHMuY2xlYXIoKTsKKyAgICB9CisKKyAgICB2b2lkIGZyZWVJc2xh
bmRzKGNvbnN0IExvY2tIb2xkZXImIGxvY2tlciwgSXNsYW5kcyogaXNsYW5kcykKKyAgICB7Cisg
ICAgICAgIGZyZWVKdW1wSXNsYW5kcyhsb2NrZXIsIGlzbGFuZHMpOworICAgICAgICBpc2xhbmRz
Rm9ySnVtcExvY2F0aW9uLnJlbW92ZShpc2xhbmRzKTsKKyAgICAgICAgZGVsZXRlIGlzbGFuZHM7
CisgICAgfQorCisgICAgdm9pZCogaXNsYW5kRm9ySnVtcExvY2F0aW9uKGNvbnN0IExvY2tIb2xk
ZXImIGxvY2tlciwgdWludHB0cl90IGp1bXBMb2NhdGlvbiwgdWludHB0cl90IHRhcmdldCwgYm9v
bCBjb25jdXJyZW50bHkpCisgICAgeworICAgICAgICBJc2xhbmRzKiBpc2xhbmRzID0gaXNsYW5k
c0Zvckp1bXBMb2NhdGlvbi5maW5kRXhhY3QoYml0d2lzZV9jYXN0PHZvaWQqPihqdW1wTG9jYXRp
b24pKTsKKyAgICAgICAgaWYgKGlzbGFuZHMpIHsKKyAgICAgICAgICAgIC8vIEZJWE1FOiBXZSBj
b3VsZCBjcmVhdGUgc29tZSBtZXRob2Qgb2YgcmV1c2luZyBhbHJlYWR5IGFsbG9jYXRlZCBpc2xh
bmRzIGhlcmUsIGJ1dCBpdCdzCisgICAgICAgICAgICAvLyB1bmxpa2VseSB0byBtYXR0ZXIgaW4g
cHJhY3RpY2UuCisgICAgICAgICAgICBpZiAoIWNvbmN1cnJlbnRseSkKKyAgICAgICAgICAgICAg
ICBmcmVlSnVtcElzbGFuZHMobG9ja2VyLCBpc2xhbmRzKTsKKyAgICAgICAgfSBlbHNlIHsKKyAg
ICAgICAgICAgIGlzbGFuZHMgPSBuZXcgSXNsYW5kczsKKyAgICAgICAgICAgIGlzbGFuZHMtPnJv
b3RKdW1wTG9jYXRpb24gPSBDb2RlTG9jYXRpb25MYWJlbDxFeGVjdXRhYmxlTWVtb3J5UHRyVGFn
Pih0YWdDb2RlUHRyPEV4ZWN1dGFibGVNZW1vcnlQdHJUYWc+KGJpdHdpc2VfY2FzdDx2b2lkKj4o
anVtcExvY2F0aW9uKSkpOworICAgICAgICAgICAgaXNsYW5kc0Zvckp1bXBMb2NhdGlvbi5pbnNl
cnQoaXNsYW5kcyk7CisgICAgICAgIH0KKworICAgICAgICBSZWdpb25BbGxvY2F0b3IqIGFsbG9j
YXRvciA9IGZpbmRSZWdpb24oanVtcExvY2F0aW9uID4gdGFyZ2V0ID8ganVtcExvY2F0aW9uIC0g
cmVnaW9uU2l6ZSA6IGp1bXBMb2NhdGlvbik7CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKGFsbG9j
YXRvcik7CisgICAgICAgIHZvaWQqIHJlc3VsdCA9IGFsbG9jYXRvci0+YWxsb2NhdGVJc2xhbmQo
KTsKKyAgICAgICAgdm9pZCogY3VycmVudElzbGFuZCA9IHJlc3VsdDsKKyAgICAgICAganVtcExv
Y2F0aW9uID0gYml0d2lzZV9jYXN0PHVpbnRwdHJfdD4oY3VycmVudElzbGFuZCk7CisgICAgICAg
IHdoaWxlICh0cnVlKSB7CisgICAgICAgICAgICBpc2xhbmRzLT5qdW1wSXNsYW5kcy5hcHBlbmQo
Q29kZUxvY2F0aW9uTGFiZWw8RXhlY3V0YWJsZU1lbW9yeVB0clRhZz4odGFnQ29kZVB0cjxFeGVj
dXRhYmxlTWVtb3J5UHRyVGFnPihjdXJyZW50SXNsYW5kKSkpOworCisgICAgICAgICAgICBhdXRv
IGVtaXRKdW1wVG8gPSBbJl0gKHZvaWQqIHRhcmdldCkgeworICAgICAgICAgICAgICAgIFJFTEVB
U0VfQVNTRVJUKEFSTTY0QXNzZW1ibGVyOjpjYW5FbWl0SnVtcChiaXR3aXNlX2Nhc3Q8dm9pZCo+
KGp1bXBMb2NhdGlvbiksIHRhcmdldCkpOworCisgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJz
IGppdDsKKyAgICAgICAgICAgICAgICBhdXRvIGp1bXAgPSBqaXQuanVtcCgpOworICAgICAgICAg
ICAgICAgIExpbmtCdWZmZXIgbGlua0J1ZmZlcihqaXQsIE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxO
b1B0clRhZz4oY3VycmVudElzbGFuZCksIGlzbGFuZFNpemVJbkJ5dGVzLCBKSVRDb21waWxhdGlv
bk11c3RTdWNjZWVkLCBmYWxzZSk7CisgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQobGlu
a0J1ZmZlci5pc1ZhbGlkKCkpOworICAgICAgICAgICAgICAgIGxpbmtCdWZmZXIubGluayhqdW1w
LCBDb2RlTG9jYXRpb25MYWJlbDxOb1B0clRhZz4odGFyZ2V0KSk7CisgICAgICAgICAgICAgICAg
RklOQUxJWkVfQ09ERShsaW5rQnVmZmVyLCBOb1B0clRhZywgIkp1bXAgSXNsYW5kOiAlbHUiLCBq
dW1wTG9jYXRpb24pOworICAgICAgICAgICAgfTsKKworICAgICAgICAgICAgaWYgKEFSTTY0QXNz
ZW1ibGVyOjpjYW5FbWl0SnVtcChiaXR3aXNlX2Nhc3Q8dm9pZCo+KGp1bXBMb2NhdGlvbiksIGJp
dHdpc2VfY2FzdDx2b2lkKj4odGFyZ2V0KSkpIHsKKyAgICAgICAgICAgICAgICBlbWl0SnVtcFRv
KGJpdHdpc2VfY2FzdDx2b2lkKj4odGFyZ2V0KSk7CisgICAgICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHVpbnRwdHJfdCBuZXh0SXNsYW5kUmVnaW9uOwor
ICAgICAgICAgICAgaWYgKGp1bXBMb2NhdGlvbiA+IHRhcmdldCkKKyAgICAgICAgICAgICAgICBu
ZXh0SXNsYW5kUmVnaW9uID0ganVtcExvY2F0aW9uIC0gcmVnaW9uU2l6ZTsKKyAgICAgICAgICAg
IGVsc2UKKyAgICAgICAgICAgICAgICBuZXh0SXNsYW5kUmVnaW9uID0ganVtcExvY2F0aW9uICsg
cmVnaW9uU2l6ZTsKKworICAgICAgICAgICAgUmVnaW9uQWxsb2NhdG9yKiBhbGxvY2F0b3IgPSBm
aW5kUmVnaW9uKG5leHRJc2xhbmRSZWdpb24pOworICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQo
YWxsb2NhdG9yKTsKKyAgICAgICAgICAgIHZvaWQqIG5leHRJc2xhbmQgPSBhbGxvY2F0b3ItPmFs
bG9jYXRlSXNsYW5kKCk7CisgICAgICAgICAgICBlbWl0SnVtcFRvKG5leHRJc2xhbmQpOworICAg
ICAgICAgICAganVtcExvY2F0aW9uID0gYml0d2lzZV9jYXN0PHVpbnRwdHJfdD4obmV4dElzbGFu
ZCk7CisgICAgICAgICAgICBjdXJyZW50SXNsYW5kID0gbmV4dElzbGFuZDsKKyAgICAgICAgfQor
CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorI2VuZGlmIC8vIFVTRShKVU1QX0lTTEFO
RFMpCisKK3ByaXZhdGU6CisgICAgY2xhc3MgQWxsb2NhdG9yIDogcHVibGljIE1ldGFBbGxvY2F0
b3IgeworICAgICAgICB1c2luZyBCYXNlID0gTWV0YUFsbG9jYXRvcjsKKyAgICBwdWJsaWM6Cisg
ICAgICAgIEFsbG9jYXRvcihGaXhlZFZNUG9vbEV4ZWN1dGFibGVBbGxvY2F0b3ImIGFsbG9jYXRv
cikKKyAgICAgICAgICAgIDogQmFzZShhbGxvY2F0b3IuZ2V0TG9jaygpLCBqaXRBbGxvY2F0aW9u
R3JhbnVsZSwgcGFnZVNpemUoKSkgLy8gcm91bmQgdXAgYWxsIGFsbG9jYXRpb25zIHRvIDMyIGJ5
dGVzCisgICAgICAgICAgICAsIG1fZml4ZWRBbGxvY2F0b3IoYWxsb2NhdG9yKQorICAgICAgICB7
CisgICAgICAgIH0KKworICAgICAgICBGcmVlU3BhY2VQdHIgYWxsb2NhdGVOZXdTcGFjZShzaXpl
X3QmKSBvdmVycmlkZQorICAgICAgICB7CisgICAgICAgICAgICAvLyBXZSdyZSBvcGVyYXRpbmcg
aW4gYSBmaXhlZCBwb29sLCBzbyBuZXcgYWxsb2NhdGlvbiBpcyBhbHdheXMgcHJvaGliaXRlZC4K
KyAgICAgICAgICAgIHJldHVybiBudWxscHRyOworICAgICAgICB9CisKKyAgICAgICAgdm9pZCBu
b3RpZnlOZWVkUGFnZSh2b2lkKiBwYWdlLCBzaXplX3QgY291bnQpIG92ZXJyaWRlCisgICAgICAg
IHsKKyAgICAgICAgICAgIG1fZml4ZWRBbGxvY2F0b3IubV9yZXNlcnZhdGlvbi5jb21taXQocGFn
ZSwgcGFnZVNpemUoKSAqIGNvdW50KTsKKyAgICAgICAgfQorCisgICAgICAgIHZvaWQgbm90aWZ5
UGFnZUlzRnJlZSh2b2lkKiBwYWdlLCBzaXplX3QgY291bnQpIG92ZXJyaWRlCisgICAgICAgIHsK
KyAgICAgICAgICAgIG1fZml4ZWRBbGxvY2F0b3IubV9yZXNlcnZhdGlvbi5kZWNvbW1pdChwYWdl
LCBwYWdlU2l6ZSgpICogY291bnQpOworICAgICAgICB9CisKKyAgICAgICAgRml4ZWRWTVBvb2xF
eGVjdXRhYmxlQWxsb2NhdG9yJiBtX2ZpeGVkQWxsb2NhdG9yOworICAgIH07CisKKyNpZiBVU0Uo
SlVNUF9JU0xBTkRTKQorICAgIGNsYXNzIFJlZ2lvbkFsbG9jYXRvciBmaW5hbCA6IHB1YmxpYyBB
bGxvY2F0b3IgeworICAgICAgICB1c2luZyBCYXNlID0gQWxsb2NhdG9yOworICAgIHB1YmxpYzoK
KyAgICAgICAgUmVnaW9uQWxsb2NhdG9yKEZpeGVkVk1Qb29sRXhlY3V0YWJsZUFsbG9jYXRvciYg
YWxsb2NhdG9yKQorICAgICAgICAgICAgOiBCYXNlKGFsbG9jYXRvcikKKyAgICAgICAgeworICAg
ICAgICB9CisKKyAgICAgICAgLy8gIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LQorICAgICAgICAvLyAgfCBqaXQgYWxsb2NhdGlvbnMgLS0+ICAgPC0tIGlzbGFuZHMgfAorICAg
ICAgICAvLyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgICAgICAg
IHVpbnRwdHJfdCBzdGFydCgpIHsgcmV0dXJuIGJpdHdpc2VfY2FzdDx1aW50cHRyX3Q+KHVudGFn
Q29kZVB0cjxFeGVjdXRhYmxlTWVtb3J5UHRyVGFnPihtX3N0YXJ0KSk7IH0KKyAgICAgICAgdWlu
dHB0cl90IGVuZCgpIHsgcmV0dXJuIGJpdHdpc2VfY2FzdDx1aW50cHRyX3Q+KHVudGFnQ29kZVB0
cjxFeGVjdXRhYmxlTWVtb3J5UHRyVGFnPihtX2VuZCkpOyB9CisKKyAgICAgICAgdWludHB0cl90
IGlzbGFuZEJlZ2luKCkKKyAgICAgICAgeworICAgICAgICAgICAgLy8gW3N0YXJ0LCBhbGxvY2F0
b3JFbmQpCisgICAgICAgICAgICByZXR1cm4gZW5kKCkgLSBpc2xhbmRSZWdpb25TaXplOworICAg
ICAgICB9CisKKyAgICAgICAgdWludHB0cl90IGFsbG9jYXRvclNpemUoKQorICAgICAgICB7Cisg
ICAgICAgICAgICByZXR1cm4gaXNsYW5kQmVnaW4oKSAtIHN0YXJ0KCk7CisgICAgICAgIH0KKwor
ICAgICAgICBzaXplX3QgaXNsYW5kc1BlclBhZ2UoKQorICAgICAgICB7CisgICAgICAgICAgICBz
aXplX3QgaXNsYW5kc1BlclBhZ2UgPSBwYWdlU2l6ZSgpIC8gaXNsYW5kU2l6ZUluQnl0ZXM7Cisg
ICAgICAgICAgICBBU1NFUlQoaXNsYW5kc1BlclBhZ2UgKiBpc2xhbmRTaXplSW5CeXRlcyA9PSBw
YWdlU2l6ZSgpKTsKKyAgICAgICAgICAgIEFTU0VSVChpc1Bvd2VyT2ZUd28oaXNsYW5kc1BlclBh
Z2UpKTsKKyAgICAgICAgICAgIHJldHVybiBpc2xhbmRzUGVyUGFnZTsKKyAgICAgICAgfQorCisg
ICAgICAgIHZvaWQgcmVsZWFzZShjb25zdCBMb2NrSG9sZGVyJiBsb2NrZXIsIE1ldGFBbGxvY2F0
b3JIYW5kbGUmIGhhbmRsZSkgZmluYWwKKyAgICAgICAgeworICAgICAgICAgICAgbV9maXhlZEFs
bG9jYXRvci5oYW5kbGVXaWxsQmVSZWxlYXNlZChsb2NrZXIsIGhhbmRsZSk7CisgICAgICAgICAg
ICBCYXNlOjpyZWxlYXNlKGxvY2tlciwgaGFuZGxlKTsKKyAgICAgICAgfQorCisgICAgICAgIHZv
aWQqIGFsbG9jYXRlSXNsYW5kKCkKKyAgICAgICAgeworICAgICAgICAgICAgdWludHB0cl90IGVu
ZCA9IHRoaXMtPmVuZCgpOworICAgICAgICAgICAgYXV0byBmaW5kUmVzdWx0ID0gWyZdICgpIC0+
IHZvaWQqIHsKKyAgICAgICAgICAgICAgICBzaXplX3QgcmVzdWx0Qml0ID0gaXNsYW5kQml0cy5m
aW5kQ2xlYXJCaXQoMCk7CisgICAgICAgICAgICAgICAgaWYgKHJlc3VsdEJpdCA9PSBpc2xhbmRC
aXRzLnNpemUoKSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAg
ICAgICAgICAgaXNsYW5kQml0c1tyZXN1bHRCaXRdID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICB1
aW50cHRyX3QgcmVzdWx0ID0gZW5kIC0gKChyZXN1bHRCaXQgKyAxKSAqIGlzbGFuZFNpemVJbkJ5
dGVzKTsgCisgICAgICAgICAgICAgICAgcmV0dXJuIGJpdHdpc2VfY2FzdDx2b2lkKj4ocmVzdWx0
KTsKKyAgICAgICAgICAgIH07CisKKyAgICAgICAgICAgIGlmICh2b2lkKiByZXN1bHQgPSBmaW5k
UmVzdWx0KCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKKworICAgICAgICAgICAg
aXNsYW5kQml0cy5yZXNpemUoaXNsYW5kQml0cy5zaXplKCkgKyBpc2xhbmRzUGVyUGFnZSgpKTsK
KyAgICAgICAgICAgIGlmIChVTkxJS0VMWShpc2xhbmRCaXRzLnNpemUoKSA+IG1heElzbGFuZHNQ
ZXJSZWdpb24pKQorICAgICAgICAgICAgICAgIGNyYXNoT25KdW1wSXNsYW5kRXhoYXVzdGlvbigp
OworCisgICAgICAgICAgICB1aW50cHRyX3QgcGFnZUJlZ2luID0gZW5kIC0gKGlzbGFuZEJpdHMu
c2l6ZSgpICogaXNsYW5kU2l6ZUluQnl0ZXMpOyAvLyBbaXNsYW5kQmVnaW4sIGVuZCkKKyAgICAg
ICAgICAgIG1fZml4ZWRBbGxvY2F0b3IubV9yZXNlcnZhdGlvbi5jb21taXQoYml0d2lzZV9jYXN0
PHZvaWQqPihwYWdlQmVnaW4pLCBwYWdlU2l6ZSgpKTsKKworICAgICAgICAgICAgdm9pZCogcmVz
dWx0ID0gZmluZFJlc3VsdCgpOworICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQocmVzdWx0KTsK
KyAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgICAgIH0KKworICAgICAgICBORVZFUl9J
TkxJTkUgTk9fUkVUVVJOX0RVRV9UT19DUkFTSCB2b2lkIGNyYXNoT25KdW1wSXNsYW5kRXhoYXVz
dGlvbigpCisgICAgICAgIHsKKyAgICAgICAgICAgIENSQVNIKCk7CisgICAgICAgIH0KKworICAg
ICAgICBPcHRpb25hbDxzaXplX3Q+IGlzbGFuZEJpdCh1aW50cHRyX3QgaXNsYW5kKQorICAgICAg
ICB7CisgICAgICAgICAgICB1aW50cHRyX3QgZW5kID0gdGhpcy0+ZW5kKCk7CisgICAgICAgICAg
ICBpZiAoaXNsYW5kQmVnaW4oKSA8PSBpc2xhbmQgJiYgaXNsYW5kIDwgZW5kKQorICAgICAgICAg
ICAgICAgIHJldHVybiAoKGVuZCAtIGlzbGFuZCkgLyBpc2xhbmRTaXplSW5CeXRlcykgLSAxOwor
ICAgICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKyAgICAgICAgfQorCisgICAgICAgIHZv
aWQgZnJlZUlzbGFuZCh1aW50cHRyX3QgaXNsYW5kKQorICAgICAgICB7CisgICAgICAgICAgICBS
RUxFQVNFX0FTU0VSVChpc2xhbmRCZWdpbigpIDw9IGlzbGFuZCAmJiBpc2xhbmQgPCBlbmQoKSk7
CisgICAgICAgICAgICBzaXplX3QgYml0ID0gaXNsYW5kQml0KGlzbGFuZCkudmFsdWUoKTsKKyAg
ICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKCEhaXNsYW5kQml0c1tiaXRdKTsKKyAgICAgICAgICAg
IGlzbGFuZEJpdHNbYml0XSA9IGZhbHNlOworICAgICAgICB9CisKKyAgICAgICAgYm9vbCBpc0lu
QWxsb2NhdGVkTWVtb3J5KGNvbnN0IEFic3RyYWN0TG9ja2VyJiBsb2NrZXIsIHZvaWQqIGFkZHJl
c3MpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChCYXNlOjppc0luQWxsb2NhdGVkTWVtb3J5
KGxvY2tlciwgYWRkcmVzcykpCisgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAg
ICAgICBpZiAoT3B0aW9uYWw8c2l6ZV90PiBiaXQgPSBpc2xhbmRCaXQoYml0d2lzZV9jYXN0PHVp
bnRwdHJfdD4oYWRkcmVzcykpKSB7CisgICAgICAgICAgICAgICAgaWYgKGJpdC52YWx1ZSgpIDwg
aXNsYW5kQml0cy5zaXplKCkpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiAhIWlzbGFuZEJp
dHNbYml0LnZhbHVlKCldOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgICAgICB9CisKKyAgICAgICAgLy8gUmFuZ2U6IFtzdGFydCwgZW5kKQorICAgICAgICB2
b2lkKiBtX3N0YXJ0OworICAgICAgICB2b2lkKiBtX2VuZDsKKyAgICAgICAgRmFzdEJpdFZlY3Rv
ciBpc2xhbmRCaXRzOworICAgIH07CisjZW5kaWYgLy8gVVNFKEpVTVBfSVNMQU5EUykKKworICAg
IHRlbXBsYXRlIDx0eXBlbmFtZSBGdW5jdGlvbj4KKyAgICB2b2lkIGZvckVhY2hBbGxvY2F0b3Io
RnVuY3Rpb24gZnVuY3Rpb24pCisgICAgeworI2lmIFVTRShKVU1QX0lTTEFORFMpCisgICAgICAg
IGZvciAoUmVnaW9uQWxsb2NhdG9yJiBhbGxvY2F0b3IgOiBtX2FsbG9jYXRvcnMpIHsKKyAgICAg
ICAgICAgIHVzaW5nIEZ1bmN0aW9uUmVzdWx0VHlwZSA9IGRlY2x0eXBlKGZ1bmN0aW9uKGFsbG9j
YXRvcikpOworICAgICAgICAgICAgaWYgY29uc3RleHByIChzdGQ6OmlzX3NhbWU8SXRlcmF0aW9u
U3RhdHVzLCBGdW5jdGlvblJlc3VsdFR5cGU+Ojp2YWx1ZSkgeworICAgICAgICAgICAgICAgIGlm
IChmdW5jdGlvbihhbGxvY2F0b3IpID09IEl0ZXJhdGlvblN0YXR1czo6RG9uZSkKKyAgICAgICAg
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAg
IHN0YXRpY19hc3NlcnQoc3RkOjppc19zYW1lPHZvaWQsIEZ1bmN0aW9uUmVzdWx0VHlwZT46OnZh
bHVlKTsKKyAgICAgICAgICAgICAgICBmdW5jdGlvbihhbGxvY2F0b3IpOworICAgICAgICAgICAg
fQorICAgICAgICB9CisjZWxzZQorICAgICAgICBmdW5jdGlvbihtX2FsbG9jYXRvcik7CisjZW5k
aWYgLy8gVVNFKEpVTVBfSVNMQU5EUykKKyAgICB9CisKKyNpZiBVU0UoSlVNUF9JU0xBTkRTKQor
ICAgIGNsYXNzIElzbGFuZHMgOiBwdWJsaWMgUmVkQmxhY2tUcmVlPElzbGFuZHMsIHZvaWQqPjo6
Tm9kZSB7CisgICAgICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworICAgIHB1YmxpYzoKKyAg
ICAgICAgdm9pZCoga2V5KCkgeyByZXR1cm4gcm9vdEp1bXBMb2NhdGlvbi5kYXRhTG9jYXRpb24o
KTsgfQorICAgICAgICBDb2RlTG9jYXRpb25MYWJlbDxFeGVjdXRhYmxlTWVtb3J5UHRyVGFnPiBy
b290SnVtcExvY2F0aW9uOworICAgICAgICBWZWN0b3I8Q29kZUxvY2F0aW9uTGFiZWw8RXhlY3V0
YWJsZU1lbW9yeVB0clRhZz4+IGp1bXBJc2xhbmRzOworICAgIH07CisjZW5kaWYgLy8gVVNFKEpV
TVBfSVNMQU5EUykKKworICAgIExvY2sgbV9sb2NrOwogICAgIFBhZ2VSZXNlcnZhdGlvbiBtX3Jl
c2VydmF0aW9uOworI2lmIFVTRShKVU1QX0lTTEFORFMpCisgICAgc3RkOjphcnJheTxSZWdpb25B
bGxvY2F0b3IsIG51bWJlck9mUmVnaW9ucz4gbV9hbGxvY2F0b3JzOworICAgIFJlZEJsYWNrVHJl
ZTxJc2xhbmRzLCB2b2lkKj4gaXNsYW5kc0Zvckp1bXBMb2NhdGlvbjsKKyNlbHNlCisgICAgQWxs
b2NhdG9yIG1fYWxsb2NhdG9yOworI2VuZGlmIC8vIFVTRShKVU1QX0lTTEFORFMpCiB9OwogCi1G
aXhlZFZNUG9vbEV4ZWN1dGFibGVBbGxvY2F0b3I6On5GaXhlZFZNUG9vbEV4ZWN1dGFibGVBbGxv
Y2F0b3IoKQotewotICAgIG1fcmVzZXJ2YXRpb24uZGVhbGxvY2F0ZSgpOwotfQotCiAvLyBLZWVw
IHRoaXMgcG9pbnRlciBpbiBhIG11dGFibGUgZ2xvYmFsIHZhcmlhYmxlIHRvIGhlbHAgTGVha3Mg
ZmluZCBpdC4KIC8vIEJ1dCB3ZSBkbyBub3QgdXNlIHRoaXMgcG9pbnRlci4KIHN0YXRpYyBGaXhl
ZFZNUG9vbEV4ZWN1dGFibGVBbGxvY2F0b3IqIGdsb2JhbEZpeGVkVk1Qb29sRXhlY3V0YWJsZUFs
bG9jYXRvclRvV29ya0Fyb3VuZExlYWtzID0gbnVsbHB0cjsKQEAgLTQxNyw3ICs4MjUsNiBAQCB2
b2lkIEV4ZWN1dGFibGVBbGxvY2F0b3I6OmluaXRpYWxpemVVbmRlCiAgICAgUkVMRUFTRV9BU1NF
UlQoIWdfanNjQ29uZmlnLmZpeGVkVk1Qb29sRXhlY3V0YWJsZUFsbG9jYXRvcik7CiAgICAgZ19q
c2NDb25maWcuZml4ZWRWTVBvb2xFeGVjdXRhYmxlQWxsb2NhdG9yID0gbmV3IEZpeGVkVk1Qb29s
RXhlY3V0YWJsZUFsbG9jYXRvcigpOwogICAgIGdsb2JhbEZpeGVkVk1Qb29sRXhlY3V0YWJsZUFs
bG9jYXRvclRvV29ya0Fyb3VuZExlYWtzID0gZ19qc2NDb25maWcuZml4ZWRWTVBvb2xFeGVjdXRh
YmxlQWxsb2NhdG9yOwotICAgIENvZGVQcm9maWxpbmc6Om5vdGlmeUFsbG9jYXRvcihnX2pzY0Nv
bmZpZy5maXhlZFZNUG9vbEV4ZWN1dGFibGVBbGxvY2F0b3IpOwogfQogCiBib29sIEV4ZWN1dGFi
bGVBbGxvY2F0b3I6OmlzVmFsaWQoKSBjb25zdApAQCAtNDI1LDcgKzgzMiw3IEBAIGJvb2wgRXhl
Y3V0YWJsZUFsbG9jYXRvcjo6aXNWYWxpZCgpIGNvbnMKICAgICBGaXhlZFZNUG9vbEV4ZWN1dGFi
bGVBbGxvY2F0b3IqIGFsbG9jYXRvciA9IGdfanNjQ29uZmlnLmZpeGVkVk1Qb29sRXhlY3V0YWJs
ZUFsbG9jYXRvcjsKICAgICBpZiAoIWFsbG9jYXRvcikKICAgICAgICAgcmV0dXJuIEJhc2U6Omlz
VmFsaWQoKTsKLSAgICByZXR1cm4gISFhbGxvY2F0b3ItPmJ5dGVzUmVzZXJ2ZWQoKTsKKyAgICBy
ZXR1cm4gYWxsb2NhdG9yLT5pc1ZhbGlkKCk7CiB9CiAKIGJvb2wgRXhlY3V0YWJsZUFsbG9jYXRv
cjo6dW5kZXJNZW1vcnlQcmVzc3VyZSgpCkBAIC00NTYsMTEgKzg2MywxMSBAQCBkb3VibGUgRXhl
Y3V0YWJsZUFsbG9jYXRvcjo6bWVtb3J5UHJlc3N1CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAot
UmVmUHRyPEV4ZWN1dGFibGVNZW1vcnlIYW5kbGU+IEV4ZWN1dGFibGVBbGxvY2F0b3I6OmFsbG9j
YXRlKHNpemVfdCBzaXplSW5CeXRlcywgdm9pZCogb3duZXJVSUQsIEpJVENvbXBpbGF0aW9uRWZm
b3J0IGVmZm9ydCkKK1JlZlB0cjxFeGVjdXRhYmxlTWVtb3J5SGFuZGxlPiBFeGVjdXRhYmxlQWxs
b2NhdG9yOjphbGxvY2F0ZShzaXplX3Qgc2l6ZUluQnl0ZXMsIEpJVENvbXBpbGF0aW9uRWZmb3J0
IGVmZm9ydCkKIHsKICAgICBGaXhlZFZNUG9vbEV4ZWN1dGFibGVBbGxvY2F0b3IqIGFsbG9jYXRv
ciA9IGdfanNjQ29uZmlnLmZpeGVkVk1Qb29sRXhlY3V0YWJsZUFsbG9jYXRvcjsKICAgICBpZiAo
IWFsbG9jYXRvcikKLSAgICAgICAgcmV0dXJuIEJhc2U6OmFsbG9jYXRlKHNpemVJbkJ5dGVzLCBv
d25lclVJRCwgZWZmb3J0KTsKKyAgICAgICAgcmV0dXJuIEJhc2U6OmFsbG9jYXRlKHNpemVJbkJ5
dGVzLCBlZmZvcnQpOwogICAgIGlmIChPcHRpb25zOjpsb2dFeGVjdXRhYmxlQWxsb2NhdGlvbigp
KSB7CiAgICAgICAgIE1ldGFBbGxvY2F0b3I6OlN0YXRpc3RpY3Mgc3RhdHMgPSBhbGxvY2F0b3It
PmN1cnJlbnRTdGF0aXN0aWNzKCk7CiAgICAgICAgIGRhdGFMb2coIkFsbG9jYXRpbmcgIiwgc2l6
ZUluQnl0ZXMsICIgYnl0ZXMgb2YgZXhlY3V0YWJsZSBtZW1vcnkgd2l0aCAiLCBzdGF0cy5ieXRl
c0FsbG9jYXRlZCwgIiBieXRlcyBhbGxvY2F0ZWQsICIsIHN0YXRzLmJ5dGVzUmVzZXJ2ZWQsICIg
Ynl0ZXMgcmVzZXJ2ZWQsIGFuZCAiLCBzdGF0cy5ieXRlc0NvbW1pdHRlZCwgIiBjb21taXR0ZWQu
XG4iKTsKQEAgLTQ4Nyw3ICs4OTQsNyBAQCBSZWZQdHI8RXhlY3V0YWJsZU1lbW9yeUhhbmRsZT4g
RXhlY3V0YWJsCiAgICAgICAgIH0KICAgICB9CiAKLSAgICBSZWZQdHI8RXhlY3V0YWJsZU1lbW9y
eUhhbmRsZT4gcmVzdWx0ID0gYWxsb2NhdG9yLT5hbGxvY2F0ZShzaXplSW5CeXRlcywgb3duZXJV
SUQpOworICAgIFJlZlB0cjxFeGVjdXRhYmxlTWVtb3J5SGFuZGxlPiByZXN1bHQgPSBhbGxvY2F0
b3ItPmFsbG9jYXRlKHNpemVJbkJ5dGVzKTsKICAgICBpZiAoIXJlc3VsdCkgewogICAgICAgICBp
ZiAoZWZmb3J0ICE9IEpJVENvbXBpbGF0aW9uQ2FuRmFpbCkgewogICAgICAgICAgICAgZGF0YUxv
ZygiUmFuIG91dCBvZiBleGVjdXRhYmxlIG1lbW9yeSB3aGlsZSBhbGxvY2F0aW5nICIsIHNpemVJ
bkJ5dGVzLCAiIGJ5dGVzLlxuIik7CkBAIC01MzksNiArOTQ2LDI2IEBAIHZvaWQgRXhlY3V0YWJs
ZUFsbG9jYXRvcjo6ZHVtcFByb2ZpbGUoKQogfQogI2VuZGlmCiAKKyNpZiBVU0UoSlVNUF9JU0xB
TkRTKQordm9pZCogRXhlY3V0YWJsZUFsbG9jYXRvcjo6Z2V0SnVtcElzbGFuZFRvKHZvaWQqIGZy
b20sIHZvaWQqIG5ld0Rlc3RpbmF0aW9uKQoreworICAgIEZpeGVkVk1Qb29sRXhlY3V0YWJsZUFs
bG9jYXRvciogYWxsb2NhdG9yID0gZ19qc2NDb25maWcuZml4ZWRWTVBvb2xFeGVjdXRhYmxlQWxs
b2NhdG9yOworICAgIGlmICghYWxsb2NhdG9yKQorICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1Rf
UkVBQ0hFRCgpOworCisgICAgcmV0dXJuIGFsbG9jYXRvci0+bWFrZUlzbGFuZChiaXR3aXNlX2Nh
c3Q8dWludHB0cl90Pihmcm9tKSwgYml0d2lzZV9jYXN0PHVpbnRwdHJfdD4obmV3RGVzdGluYXRp
b24pLCBmYWxzZSk7Cit9CisKK3ZvaWQqIEV4ZWN1dGFibGVBbGxvY2F0b3I6OmdldEp1bXBJc2xh
bmRUb0NvbmN1cnJlbnRseSh2b2lkKiBmcm9tLCB2b2lkKiBuZXdEZXN0aW5hdGlvbikKK3sKKyAg
ICBGaXhlZFZNUG9vbEV4ZWN1dGFibGVBbGxvY2F0b3IqIGFsbG9jYXRvciA9IGdfanNjQ29uZmln
LmZpeGVkVk1Qb29sRXhlY3V0YWJsZUFsbG9jYXRvcjsKKyAgICBpZiAoIWFsbG9jYXRvcikKKyAg
ICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKworICAgIHJldHVybiBhbGxvY2F0
b3ItPm1ha2VJc2xhbmQoYml0d2lzZV9jYXN0PHVpbnRwdHJfdD4oZnJvbSksIGJpdHdpc2VfY2Fz
dDx1aW50cHRyX3Q+KG5ld0Rlc3RpbmF0aW9uKSwgdHJ1ZSk7Cit9CisjZW5kaWYKKwogdm9pZCog
c3RhcnRPZkZpeGVkRXhlY3V0YWJsZU1lbW9yeVBvb2xJbXBsKCkKIHsKICAgICBGaXhlZFZNUG9v
bEV4ZWN1dGFibGVBbGxvY2F0b3IqIGFsbG9jYXRvciA9IGdfanNjQ29uZmlnLmZpeGVkVk1Qb29s
RXhlY3V0YWJsZUFsbG9jYXRvcjsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvRXhl
Y3V0YWJsZUFsbG9jYXRvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvRXhlY3V0YWJsZUFsbG9jYXRvci5oCShyZXZpc2lvbiAyNTgzNTApCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L0V4ZWN1dGFibGVBbGxvY2F0b3IuaAkod29ya2luZyBjb3B5KQpAQCAt
NzEsNyArNzEsNyBAQCBwdWJsaWM6CiAKICAgICBzdGF0aWMgdm9pZCBkdW1wUHJvZmlsZSgpIHsg
fQogCi0gICAgUmVmUHRyPEV4ZWN1dGFibGVNZW1vcnlIYW5kbGU+IGFsbG9jYXRlKHNpemVfdCwg
dm9pZCosIEpJVENvbXBpbGF0aW9uRWZmb3J0KSB7IHJldHVybiBudWxscHRyOyB9CisgICAgUmVm
UHRyPEV4ZWN1dGFibGVNZW1vcnlIYW5kbGU+IGFsbG9jYXRlKHNpemVfdCwgSklUQ29tcGlsYXRp
b25FZmZvcnQpIHsgcmV0dXJuIG51bGxwdHI7IH0KIAogICAgIHN0YXRpYyB2b2lkIHNldEpJVEVu
YWJsZWQoYm9vbCkgeyB9OwogICAgIApAQCAtMTc2LDcgKzE3Niw3IEBAIHB1YmxpYzoKICAgICAK
ICAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgdm9pZCBzZXRKSVRFbmFibGVkKGJvb2wpOwog
Ci0gICAgUmVmUHRyPEV4ZWN1dGFibGVNZW1vcnlIYW5kbGU+IGFsbG9jYXRlKHNpemVfdCBzaXpl
SW5CeXRlcywgdm9pZCogb3duZXJVSUQsIEpJVENvbXBpbGF0aW9uRWZmb3J0KTsKKyAgICBSZWZQ
dHI8RXhlY3V0YWJsZU1lbW9yeUhhbmRsZT4gYWxsb2NhdGUoc2l6ZV90IHNpemVJbkJ5dGVzLCBK
SVRDb21waWxhdGlvbkVmZm9ydCk7CiAKICAgICBib29sIGlzVmFsaWRFeGVjdXRhYmxlTWVtb3J5
KGNvbnN0IEFic3RyYWN0TG9ja2VyJiwgdm9pZCogYWRkcmVzcyk7CiAKQEAgLTE4NCw2ICsxODQs
MTEgQEAgcHVibGljOgogCiAgICAgTG9jayYgZ2V0TG9jaygpIGNvbnN0OwogCisjaWYgVVNFKEpV
TVBfSVNMQU5EUykKKyAgICB2b2lkKiBnZXRKdW1wSXNsYW5kVG8odm9pZCogZnJvbSwgdm9pZCog
bmV3RGVzdGluYXRpb24pOworICAgIHZvaWQqIGdldEp1bXBJc2xhbmRUb0NvbmN1cnJlbnRseSh2
b2lkKiBmcm9tLCB2b2lkKiBuZXdEZXN0aW5hdGlvbik7CisjZW5kaWYKKwogcHJpdmF0ZToKICAg
ICBFeGVjdXRhYmxlQWxsb2NhdG9yKCkgPSBkZWZhdWx0OwogICAgIH5FeGVjdXRhYmxlQWxsb2Nh
dG9yKCkgPSBkZWZhdWx0OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29t
bW9uU2xvd1BhdGhzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9Db21tb25TbG93UGF0aHMuY3BwCShyZXZpc2lvbiAyNTgzNTApCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9Db21tb25TbG93UGF0aHMuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0zMiw3ICszMiw2IEBACiAjaW5jbHVkZSAiQnl0ZWNvZGVTdHJ1Y3RzLmgiCiAjaW5jbHVkZSAi
Q2FsbEZyYW1lLmgiCiAjaW5jbHVkZSAiQ2xvbmVkQXJndW1lbnRzLmgiCi0jaW5jbHVkZSAiQ29k
ZVByb2ZpbGluZy5oIgogI2luY2x1ZGUgIkRlZmluZVByb3BlcnR5QXR0cmlidXRlcy5oIgogI2lu
Y2x1ZGUgIkRpcmVjdEFyZ3VtZW50cy5oIgogI2luY2x1ZGUgIkVycm9yLmgiCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db21wbGV0aW9uLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db21wbGV0aW9uLmNwcAkocmV2aXNpb24gMjU4
MzUwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29tcGxldGlvbi5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTI3LDcgKzI3LDYgQEAKICNpbmNsdWRlICJDYWxsRnJhbWUuaCIKICNp
bmNsdWRlICJDYXRjaFNjb3BlLmgiCiAjaW5jbHVkZSAiQ29kZUNhY2hlLmgiCi0jaW5jbHVkZSAi
Q29kZVByb2ZpbGluZy5oIgogI2luY2x1ZGUgIkV4Y2VwdGlvbi5oIgogI2luY2x1ZGUgIklkZW50
aWZpZXJJbmxpbmVzLmgiCiAjaW5jbHVkZSAiSW50ZXJwcmV0ZXIuaCIKQEAgLTEzOCw4ICsxMzcs
NiBAQCBKU1ZhbHVlIGV2YWx1YXRlKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPCiAgICAgUkVMRUFT
RV9BU1NFUlQodm0uYXRvbVN0cmluZ1RhYmxlKCkgPT0gVGhyZWFkOjpjdXJyZW50KCkuYXRvbVN0
cmluZ1RhYmxlKCkpOwogICAgIFJFTEVBU0VfQVNTRVJUKCF2bS5pc0NvbGxlY3RvckJ1c3lPbkN1
cnJlbnRUaHJlYWQoKSk7CiAKLSAgICBDb2RlUHJvZmlsaW5nIHByb2ZpbGUoc291cmNlKTsKLQog
ICAgIGlmICghdGhpc1ZhbHVlIHx8IHRoaXNWYWx1ZS5pc1VuZGVmaW5lZE9yTnVsbCgpKQogICAg
ICAgICB0aGlzVmFsdWUgPSBnbG9iYWxPYmplY3Q7CiAgICAgSlNPYmplY3QqIHRoaXNPYmogPSBq
c0Nhc3Q8SlNPYmplY3QqPih0aGlzVmFsdWUudG9UaGlzKGdsb2JhbE9iamVjdCwgTm90U3RyaWN0
TW9kZSkpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNNb2R1bGVMb2Fk
ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTW9k
dWxlTG9hZGVyLmNwcAkocmV2aXNpb24gMjU4MzUwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSlNNb2R1bGVMb2FkZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOSw3ICsyOSw2
IEBACiAKICNpbmNsdWRlICJCdWlsdGluTmFtZXMuaCIKICNpbmNsdWRlICJDYXRjaFNjb3BlLmgi
Ci0jaW5jbHVkZSAiQ29kZVByb2ZpbGluZy5oIgogI2luY2x1ZGUgIkVycm9yLmgiCiAjaW5jbHVk
ZSAiRXhjZXB0aW9uLmgiCiAjaW5jbHVkZSAiSlNDSW5saW5lcy5oIgpAQCAtNDAwLDggKzM5OSw2
IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgbW9kdWxlTG9hZGUKICAgICAgICAgcmV0
dXJuIEpTVmFsdWU6OmVuY29kZShKU1dlYkFzc2VtYmx5OjppbnN0YW50aWF0ZShnbG9iYWxPYmpl
Y3QsIHByb21pc2UsIG1vZHVsZUtleSwganNTb3VyY2VDb2RlKSk7CiAjZW5kaWYKIAotICAgIENv
ZGVQcm9maWxpbmcgcHJvZmlsZShzb3VyY2VDb2RlKTsKLQogICAgIFBhcnNlckVycm9yIGVycm9y
OwogICAgIHN0ZDo6dW5pcXVlX3B0cjxNb2R1bGVQcm9ncmFtTm9kZT4gbW9kdWxlUHJvZ3JhbU5v
ZGUgPSBwYXJzZTxNb2R1bGVQcm9ncmFtTm9kZT4oCiAgICAgICAgIHZtLCBzb3VyY2VDb2RlLCBJ
ZGVudGlmaWVyKCksIEpTUGFyc2VyQnVpbHRpbk1vZGU6Ok5vdEJ1aWx0aW4sCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25zTGlzdC5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnNMaXN0LmgJKHJldmlzaW9uIDI1ODM1
MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnNMaXN0LmgJKHdvcmtp
bmcgY29weSkKQEAgLTUwMCw2ICs1MDAsNyBAQCBjb25zdGV4cHIgYm9vbCBlbmFibGVXZWJBc3Nl
bWJseVN0cmVhbWluCiAgICAgdihCb29sLCBmb3JjZU9TUkV4aXRUb0xMSW50LCBmYWxzZSwgTm9y
bWFsLCAiSWYgdHJ1ZSwgd2UgYWx3YXlzIGV4aXQgdG8gdGhlIExMSW50LiBJZiBmYWxzZSwgd2Ug
ZXhpdCB0byB3aGF0ZXZlciBpcyBtb3N0IGNvbnZlbmllbnQuIikgXAogICAgIHYoVW5zaWduZWQs
IGdldEJ5VmFsSUNNYXhOdW1iZXJPZklkZW50aWZpZXJzLCA0LCBOb3JtYWwsICJOdW1iZXIgb2Yg
aWRlbnRpZmllcnMgd2Ugc2VlIGluIHRoZSBMTEludCB0aGF0IGNvdWxkIGNhdXNlIHVzIHRvIGJh
aWwgb24gZ2VuZXJhdGluZyBhbiBJQyBmb3IgZ2V0X2J5X3ZhbC4iKSBcCiAgICAgdihCb29sLCB1
c2VQdWJsaWNDbGFzc0ZpZWxkcywgdHJ1ZSwgTm9ybWFsLCAiSWYgdHJ1ZSwgdGhlIHBhcnNlciB3
aWxsIHVuZGVyc3RhbmQgcHVibGljIGRhdGEgZmllbGRzIGluc2lkZSBjbGFzc2VzLiIpIFwKKyAg
ICB2KEJvb2wsIHVzZVJhbmRvbWl6aW5nRXhlY3V0YWJsZUlzbGFuZEFsbG9jYXRpb24sIGZhbHNl
LCBOb3JtYWwsICJGb3IgdGhlIGFybTY0IEV4ZWN1dGFibGVBbGxvY2F0b3IsIGlmIHRydWUsIHNl
bGVjdCB3aGljaCByZWdpb24gdG8gdXNlIHJhbmRvbWx5LiBUaGlzIGlzIHVzZWZ1bCBmb3IgdGVz
dGluZyB0aGF0IGp1bXAgaXNsYW5kcyB3b3JrLiIpIFwKIAogZW51bSBPcHRpb25FcXVpdmFsZW5j
ZSB7CiAgICAgU2FtZU9wdGlvbiwKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90b29scy9D
b2RlUHJvZmlsZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3Rvb2xz
L0NvZGVQcm9maWxlLmNwcAkocmV2aXNpb24gMjU4MzUwKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL3Rvb2xzL0NvZGVQcm9maWxlLmNwcAkobm9uZXhpc3RlbnQpCkBAIC0xLDE3MiArMCwwIEBA
Ci0vKgotICogQ29weXJpZ2h0IChDKSAyMDEyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQot
ICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0KLSNpbmNsdWRl
ICJjb25maWcuaCIKLSNpbmNsdWRlICJDb2RlUHJvZmlsZS5oIgotCi0jaW5jbHVkZSAiQ29kZUJs
b2NrLmgiCi0jaW5jbHVkZSAiQ29kZVByb2ZpbGluZy5oIgotI2luY2x1ZGUgIkxpbmtCdWZmZXIu
aCIKLSNpbmNsdWRlICJQcm9maWxlVHJlZU5vZGUuaCIKLSNpbmNsdWRlIDx3dGYvU3RhY2tUcmFj
ZS5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgotCi1uYW1lc3BhY2UgSlNDIHsK
LQotLy8gTWFwIGZyb20gQ29kZVR5cGUgZW51bSB0byBhIGNvcnJlc3BvbmRpbmcgbmFtZS4KLXN0
YXRpYyBjb25zdCBjaGFyKiBjb25zdCBzX2NvZGVUeXBlTmFtZXNbQ29kZVByb2ZpbGU6Ok51bWJl
ck9mQ29kZVR5cGVzXSA9IHsKLSAgICAiW1tFbmdpbmVDb2RlXV0iLAotICAgICJbW0dsb2JhbFRo
dW5rXV0iLAotICAgICJbW1JlZ0V4cENvZGVdXSIsCi0gICAgIltbREZHSklUXV0iLAotICAgICJb
W0Jhc2VsaW5lT25seV1dIiwKLSAgICAiW1tCYXNlbGluZVByb2ZpbGVdXSIsCi0gICAgIltbQmFz
ZWxpbmVPU1JdXSIsCi0gICAgIltbRW5naW5lRnJhbWVdXSIKLX07Ci0KLS8vIEhlbHBlciBmdW5j
dGlvbiwgdHJ1bmNhdGUgdHJhY2VzIHRvIHBydW5lIHRoZSBvdXRwdXQgJiBtYWtlIHZlcnkgdmVy
Ym9zZSBtb2RlIGEgbGl0dGxlIG1vcmUgcmVhZGFibGUuCi1zdGF0aWMgYm9vbCB0cnVuY2F0ZVRy
YWNlKGNvbnN0IGNoYXIqIHN5bWJvbE5hbWUpCi17Ci0gICAgcmV0dXJuICFzdHJjbXAoc3ltYm9s
TmFtZSwgIkpTQzo6Qnl0ZWNvZGVHZW5lcmF0b3I6OmdlbmVyYXRlKCkiKQotICAgICAgICB8fCAh
c3RyY21wKHN5bWJvbE5hbWUsICJKU0M6OlBhcnNlcjxKU0M6OkxleGVyPHVuc2lnbmVkIGNoYXI+
Pjo6cGFyc2VJbm5lcigpIikKLSAgICAgICAgfHwgIXN0cmNtcChzeW1ib2xOYW1lLCAiV1RGOjpm
YXN0TWFsbG9jKHVuc2lnbmVkIGxvbmcpIikKLSAgICAgICAgfHwgIXN0cmNtcChzeW1ib2xOYW1l
LCAiV1RGOjpjYWxjdWxhdGVVVENPZmZzZXQoKSIpCi0gICAgICAgIHx8ICFzdHJjbXAoc3ltYm9s
TmFtZSwgIkpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6cGFyc2VDb2RlQmxvY2soKSIpOwotICAg
ICAgICAKLX0KLQotLy8gRWFjaCB0cmFjZSBjb25zaXN0cyBvZiBhIHNlcXVlbmNlIG9mIHplcm8g
b3IgbW9yZSAnRW5naW5lRnJhbWUnIGVudHJpZXMsCi0vLyBmb2xsb3dlZCBieSBhIHNhbXBsZSBp
biBKSVQgY29kZSwgb3Igb25lIG9yIG1vcmUgJ0VuZ2luZUZyYW1lJyBlbnRyaWVzLAotLy8gZm9s
bG93ZWQgYnkgYSAnRW5naW5lQ29kZScgdGVybWluYXRvci4KLXZvaWQgQ29kZVByb2ZpbGU6OnNh
bXBsZSh2b2lkKiBwYywgdm9pZCoqIGZyYW1lUG9pbnRlcikKLXsKLSAgICAvLyBEaXNhbGxvdyB0
cmFjZXMgY29udGFpbmluZyBvbmx5IGEgJ0VuZ2luZUNvZGUnIHRlcm1pbmF0b3IsIHdpdGhvdXQg
YW55ICdFbmdpbmVGcmFtZScgZnJhbWVzLgotICAgIGlmICghZnJhbWVQb2ludGVyKQotICAgICAg
ICByZXR1cm47Ci0KLSAgICB3aGlsZSAoZnJhbWVQb2ludGVyKSB7Ci0gICAgICAgIENvZGVUeXBl
IHR5cGU7Ci0KLSNpZiBFTkFCTEUoSklUKQotICAgICAgICAvLyBEZXRlcm1pbmUgaWYgdGhpcyBz
YW1wbGUgZmVsbCBpbiBKSVQgY29kZSwgYW5kIGlmIHNvLCBmcm9tIHdoaWNoIEpJVCAmIHdoeS4K
LSAgICAgICAgdm9pZCogb3duZXJVSUQgPSBDb2RlUHJvZmlsaW5nOjpnZXRPd25lclVJREZvclBD
KHBjKTsKLQotICAgICAgICBpZiAoIW93bmVyVUlEKQotICAgICAgICAgICAgdHlwZSA9IEVuZ2lu
ZUZyYW1lOwotICAgICAgICBlbHNlIGlmIChvd25lclVJRCA9PSBHTE9CQUxfVEhVTktfSUQpCi0g
ICAgICAgICAgICB0eXBlID0gR2xvYmFsVGh1bms7Ci0gICAgICAgIGVsc2UgaWYgKG93bmVyVUlE
ID09IFJFR0VYUF9DT0RFX0lEKQotICAgICAgICAgICAgdHlwZSA9IFJlZ0V4cENvZGU7Ci0gICAg
ICAgIGVsc2UgewotICAgICAgICAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBzdGF0aWNfY2Fz
dDxDb2RlQmxvY2sqPihvd25lclVJRCk7Ci0gICAgICAgICAgICBpZiAoY29kZUJsb2NrLT5qaXRU
eXBlKCkgPT0gSklUVHlwZTo6REZHSklUKQotICAgICAgICAgICAgICAgIHR5cGUgPSBERkdKSVQ7
Ci0gICAgICAgICAgICBlbHNlIGlmICghY2FuQ29tcGlsZShjb2RlQmxvY2stPmNhcGFiaWxpdHlM
ZXZlbFN0YXRlKCkpKQotICAgICAgICAgICAgICAgIHR5cGUgPSBCYXNlbGluZU9ubHk7Ci0gICAg
ICAgICAgICBlbHNlIGlmIChjb2RlQmxvY2stPnJlcGxhY2VtZW50KCkpCi0gICAgICAgICAgICAg
ICAgdHlwZSA9IEJhc2VsaW5lT1NSOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAg
IHR5cGUgPSBCYXNlbGluZVByb2ZpbGU7Ci0gICAgICAgIH0KLSNlbHNlCi0gICAgICAgIHR5cGUg
PSBFbmdpbmVGcmFtZTsKLSNlbmRpZgotCi0gICAgICAgIC8vIEEgc2FtcGxlIGluIEpJVCBjb2Rl
IHRlcm1pbmF0ZXMgdGhlIHRyYWNlLgotICAgICAgICBtX3NhbXBsZXMuYXBwZW5kKENvZGVSZWNv
cmQocGMsIHR5cGUpKTsKLSAgICAgICAgaWYgKHR5cGUgIT0gRW5naW5lRnJhbWUpCi0gICAgICAg
ICAgICByZXR1cm47Ci0KLSNpZiBPUyhEQVJXSU4pICYmIENQVShYODZfNjQpCi0gICAgICAgIC8v
IFdhbGsgdXAgdGhlIHN0YWNrLgotICAgICAgICBwYyA9IGZyYW1lUG9pbnRlclsxXTsKLSAgICAg
ICAgZnJhbWVQb2ludGVyID0gcmVpbnRlcnByZXRfY2FzdDx2b2lkKio+KCpmcmFtZVBvaW50ZXIp
OwotI2VsaWYgT1MoTElOVVgpICYmIENQVShYODYpCi0gICAgICAgIC8vIERvbid0IHVud2luZCB0
aGUgc3RhY2sgYXMgc29tZSBkZXBlbmRlbnQgdGhpcmQgcGFydHkgbGlicmFyaWVzCi0gICAgICAg
IC8vIG1heSBiZSBjb21waWxlZCB3aXRoIC1mb21pdC1mcmFtZS1wb2ludGVyLgotICAgICAgICBm
cmFtZVBvaW50ZXIgPSAwOwotI2Vsc2UKLSAgICAgICAgLy8gVGhpcyBwbGF0Zm9ybSBpcyBub3Qg
eWV0IHN1cHBvcnRlZCEKLSAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSNl
bmRpZgotICAgIH0KLQotICAgIC8vIElmIHdlIGdldCBoZXJlLCB3ZSB3YWxrZWQgdGhlIGVudGly
ZSBzdGFjayB3aXRob3V0IGZpbmRpbmcgYW55IGZyYW1lcyBvZiBKSVQgY29kZS4KLSAgICBtX3Nh
bXBsZXMuYXBwZW5kKENvZGVSZWNvcmQoMCwgRW5naW5lQ29kZSkpOwotfQotCi12b2lkIENvZGVQ
cm9maWxlOjpyZXBvcnQoKQotewotICAgIGRhdGFMb2dGKCI8Q29kZVByb2ZpbGluZyAlczolZD5c
biIsIG1fZmlsZS5kYXRhKCksIG1fbGluZU51bWJlcik7Ci0KLSAgICAvLyBIb3cgbWFueSBmcmFt
ZXMgb2YgQy1jb2RlIHRvIHByaW50IC0gMCwgaWYgbm90IHZlcmJvc2UsIDEgaWYgdmVyYm9zZSwg
dXAgdG8gMTAyNCBpZiB2ZXJ5IHZlcmJvc2UuCi0gICAgdW5zaWduZWQgcmVjdXJzaW9uTGltaXQg
PSBDb2RlUHJvZmlsaW5nOjpiZVZlcnlWZXJib3NlKCkgPyAxMDI0IDogQ29kZVByb2ZpbGluZzo6
YmVWZXJib3NlKCk7Ci0KLSAgICBQcm9maWxlVHJlZU5vZGUgcHJvZmlsZTsKLQotICAgIC8vIFdh
bGsgdGhyb3VnaCB0aGUgc2FtcGxlIGJ1ZmZlci4KLSAgICBzaXplX3QgdHJhY2UgPSAwOwotICAg
IHdoaWxlICh0cmFjZSA8IG1fc2FtcGxlcy5zaXplKCkpIHsKLQotICAgICAgICAvLyBBbGwgdHJh
Y2VzIGFyZSB6ZXJvIG9yIG1vcmUgJ0VuZ2luZUZyYW1lJ3MsIGZvbGxvd2VkIGJ5IGEgbm9uLSdF
bmdpbmVGcmFtZScuCi0gICAgICAgIC8vIFNjYW4gdG8gZmluZCB0aGUgbGFzdCBzYW1wbGUgaW4g
dGhlIHRyYWNlLgotICAgICAgICBzaXplX3QgbGFzdEluVHJhY2UgPSB0cmFjZTsKLSAgICAgICAg
d2hpbGUgKG1fc2FtcGxlc1tsYXN0SW5UcmFjZV0udHlwZSA9PSBFbmdpbmVGcmFtZSkKLSAgICAg
ICAgICAgICsrbGFzdEluVHJhY2U7Ci0KLSAgICAgICAgLy8gV2UgdXNlIHRoZSBsYXN0IHNhbXBs
ZSB0eXBlIHRvIGxvb2sgdXAgYSBuYW1lICh1c2VkIGFzIGEgYnVja2V0IGluIHRoZSBwcm9maWxl
cikuCi0gICAgICAgIFByb2ZpbGVUcmVlTm9kZSogY2FsbGJhY2tzID0gcHJvZmlsZS5zYW1wbGVD
aGlsZChzX2NvZGVUeXBlTmFtZXNbbV9zYW1wbGVzW2xhc3RJblRyYWNlXS50eXBlXSk7Ci0KLSAg
ICAgICAgLy8gSWYgdGhlcmUgYXJlIGFueSBzYW1wbGVzIGluIEMtY29kZSwgYWRkIHVwIHRvIHJl
Y3Vyc2lvbkxpbWl0IG9mIHRoZW0gaW50byB0aGUgcHJvZmlsZSB0cmVlLgotICAgICAgICBzaXpl
X3QgbGFzdEVuZ2luZUZyYW1lID0gbGFzdEluVHJhY2U7Ci0gICAgICAgIGZvciAodW5zaWduZWQg
Y291bnQgPSAwOyBsYXN0RW5naW5lRnJhbWUgPiB0cmFjZSAmJiBjb3VudCA8IHJlY3Vyc2lvbkxp
bWl0OyArK2NvdW50KSB7Ci0gICAgICAgICAgICAtLWxhc3RFbmdpbmVGcmFtZTsKLSAgICAgICAg
ICAgIEFTU0VSVChtX3NhbXBsZXNbbGFzdEVuZ2luZUZyYW1lXS50eXBlID09IEVuZ2luZUZyYW1l
KTsKLSAgICAgICAgICAgIGNvbnN0IGNoYXIqIG5hbWUgPSAiPHVua25vd24+IjsKLSAgICAgICAg
ICAgIGF1dG8gZGVtYW5nbGVkID0gU3RhY2tUcmFjZTo6ZGVtYW5nbGUobV9zYW1wbGVzW2xhc3RF
bmdpbmVGcmFtZV0ucGMpOwotICAgICAgICAgICAgaWYgKGRlbWFuZ2xlZCkKLSAgICAgICAgICAg
ICAgICBuYW1lID0gZGVtYW5nbGVkLT5kZW1hbmdsZWROYW1lKCkgPyBkZW1hbmdsZWQtPmRlbWFu
Z2xlZE5hbWUoKSA6IGRlbWFuZ2xlZC0+bWFuZ2xlZE5hbWUoKTsKLSAgICAgICAgICAgIGNhbGxi
YWNrcyA9IGNhbGxiYWNrcy0+c2FtcGxlQ2hpbGQobmFtZSk7Ci0gICAgICAgICAgICBpZiAodHJ1
bmNhdGVUcmFjZShuYW1lKSkKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotCi0g
ICAgICAgIC8vIE1vdmUgb24gdG8gdGhlIG5leHQgdHJhY2UuCi0gICAgICAgIHRyYWNlID0gbGFz
dEluVHJhY2UgKyAxOwotICAgICAgICBBU1NFUlQodHJhY2UgPD0gbV9zYW1wbGVzLnNpemUoKSk7
Ci0gICAgfQotCi0gICAgLy8gT3V0cHV0IHRoZSBwcm9maWxlIHRyZWUuCi0gICAgZGF0YUxvZ0Yo
IlRvdGFsIHNhbXBsZXM6ICVsbGRcbiIsIHN0YXRpY19jYXN0PGxvbmcgbG9uZz4ocHJvZmlsZS5j
aGlsZENvdW50KCkpKTsKLSAgICBwcm9maWxlLmR1bXAoKTsKLSAgICAKLSAgICBmb3IgKHNpemVf
dCBpID0gMCA7IGkgPCBtX2NoaWxkcmVuLnNpemUoKTsgKytpKQotICAgICAgICBtX2NoaWxkcmVu
W2ldLT5yZXBvcnQoKTsKLQotICAgIGRhdGFMb2dGKCI8L0NvZGVQcm9maWxpbmcgJXM6JWQ+XG4i
LCBtX2ZpbGUuZGF0YSgpLCBtX2xpbmVOdW1iZXIpOwotfQotCi19CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvdG9vbHMvQ29kZVByb2ZpbGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvdG9vbHMvQ29kZVByb2ZpbGUuaAkocmV2aXNpb24gMjU4MzUwKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL3Rvb2xzL0NvZGVQcm9maWxlLmgJKG5vbmV4aXN0ZW50KQpAQCAt
MSw4OSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEyIEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1l
dDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICog
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICov
Ci0KLSNwcmFnbWEgb25jZQotCi0jaW5jbHVkZSAiU291cmNlQ29kZS5oIgotI2luY2x1ZGUgIlRp
ZXJlZE1NYXBBcnJheS5oIgotI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KLQotbmFtZXNw
YWNlIEpTQyB7Ci0KLWNsYXNzIENvZGVQcm9maWxlIHsKLSAgICBXVEZfTUFLRV9GQVNUX0FMTE9D
QVRFRDsKLXB1YmxpYzoKLSAgICBDb2RlUHJvZmlsZShjb25zdCBTb3VyY2VDb2RlJiBzb3VyY2Us
IENvZGVQcm9maWxlKiBwYXJlbnQpCi0gICAgICAgIDogbV9maWxlKFN0cmluZyhzb3VyY2UucHJv
dmlkZXIoKS0+dXJsKCkpLnV0ZjgoKSkKLSAgICAgICAgLCBtX2xpbmVOdW1iZXIoc291cmNlLmZp
cnN0TGluZSgpLm9uZUJhc2VkSW50KCkpCi0gICAgICAgICwgbV9wYXJlbnQocGFyZW50KQotICAg
IHsKLSAgICAgICAgaWYgKHBhcmVudCkKLSAgICAgICAgICAgIHBhcmVudC0+YWRkQ2hpbGQoc3Rk
Ojp1bmlxdWVfcHRyPENvZGVQcm9maWxlPih0aGlzKSk7Ci0gICAgfQotCi0gICAgdm9pZCBzYW1w
bGUodm9pZCogcGMsIHZvaWQqKiBmcmFtZVBvaW50ZXIpOwotICAgIHZvaWQgcmVwb3J0KCk7Ci0K
LSAgICBDb2RlUHJvZmlsZSogcGFyZW50KCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBtX3BhcmVu
dDsKLSAgICB9Ci0gICAgCi0gICAgdm9pZCBhZGRDaGlsZChzdGQ6OnVuaXF1ZV9wdHI8Q29kZVBy
b2ZpbGU+IGNoaWxkKQotICAgIHsKLSAgICAgICAgbV9jaGlsZHJlbi5hcHBlbmQoV1RGTW92ZShj
aGlsZCkpOwotICAgIH0KLQotICAgIGVudW0gQ29kZVR5cGUgewotICAgICAgICBFbmdpbmVDb2Rl
LAotICAgICAgICBHbG9iYWxUaHVuaywKLSAgICAgICAgUmVnRXhwQ29kZSwKLSAgICAgICAgREZH
SklULAotICAgICAgICBCYXNlbGluZU9ubHksCi0gICAgICAgIEJhc2VsaW5lUHJvZmlsZSwKLSAg
ICAgICAgQmFzZWxpbmVPU1IsCi0gICAgICAgIEVuZ2luZUZyYW1lLAotICAgICAgICBOdW1iZXJP
ZkNvZGVUeXBlcwotICAgIH07Ci0KLXByaXZhdGU6Ci0gICAgc3RydWN0IENvZGVSZWNvcmQgewot
ICAgICAgICBDb2RlUmVjb3JkKHZvaWQqIHBjLCBDb2RlVHlwZSB0eXBlKQotICAgICAgICAgICAg
OiBwYyhwYykKLSAgICAgICAgICAgICwgdHlwZSh0eXBlKQotICAgICAgICB7Ci0gICAgICAgIH0K
LSAgICAgICAgdm9pZCogcGM7Ci0gICAgICAgIENvZGVUeXBlIHR5cGU7Ci0gICAgfTsKLQotICAg
IENTdHJpbmcgbV9maWxlOwotICAgIHVuc2lnbmVkIG1fbGluZU51bWJlcjsKLSAgICBDb2RlUHJv
ZmlsZSogbV9wYXJlbnQ7Ci0gICAgVmVjdG9yPHN0ZDo6dW5pcXVlX3B0cjxDb2RlUHJvZmlsZT4+
IG1fY2hpbGRyZW47Ci0gICAgVGllcmVkTU1hcEFycmF5PENvZGVSZWNvcmQ+IG1fc2FtcGxlczsK
LX07Ci0KLX0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3Rv
b2xzL0NvZGVQcm9maWxpbmcuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS90b29scy9Db2RlUHJvZmlsaW5nLmNwcAkocmV2aXNpb24gMjU4MzUwKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL3Rvb2xzL0NvZGVQcm9maWxpbmcuY3BwCShub25leGlzdGVudCkKQEAgLTEs
MTY5ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTItMjAxOCBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFy
ZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IK
LSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAK
LSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiQ29kZVByb2ZpbGluZy5oIgot
Ci0jaW5jbHVkZSAiQ29kZVByb2ZpbGUuaCIKLSNpbmNsdWRlICJNYWNoaW5lQ29udGV4dC5oIgot
I2luY2x1ZGUgPHd0Zi9NZXRhQWxsb2NhdG9yLmg+Ci0KLSNpZiBIQVZFKFNJR05BTF9IKQotI2lu
Y2x1ZGUgPHNpZ25hbC5oPgotI2VuZGlmCi0KLSNpZiBIQVZFKE1BQ0hJTkVfQ09OVEVYVCkKLSNp
bmNsdWRlIDxzeXMvdGltZS5oPgotI2VuZGlmCi0KLW5hbWVzcGFjZSBKU0MgewotCi12b2xhdGls
ZSBDb2RlUHJvZmlsZSogQ29kZVByb2ZpbGluZzo6c19wcm9maWxlU3RhY2sgPSAwOwotQ29kZVBy
b2ZpbGluZzo6TW9kZSBDb2RlUHJvZmlsaW5nOjpzX21vZGUgPSBDb2RlUHJvZmlsaW5nOjpEaXNh
YmxlZDsKLVdURjo6TWV0YUFsbG9jYXRvclRyYWNrZXIqIENvZGVQcm9maWxpbmc6OnNfdHJhY2tl
ciA9IDA7Ci0KLUlHTk9SRV9XQVJOSU5HU19CRUdJTigibWlzc2luZy1ub3JldHVybiIpCi0KLSNp
ZiBIQVZFKE1BQ0hJTkVfQ09OVEVYVCkKLS8vIEhlbHBlciBmdW5jdGlvbiB0byBzdGFydCAmIHN0
b3AgdGhlIHRpbWVyLgotLy8gUHJlc2VudGx5IHdlJ3JlIHVzaW5nIHRoZSB3YWxsLWNsb2NrIHRp
bWVyLCBzaW5jZSB0aGlzIHNlZW1zIHRvIGdpdmUgdGhlIGJlc3QgcmVzdWx0cy4KLXN0YXRpYyB2
b2lkIHNldFByb2ZpbGVUaW1lcih1bnNpZ25lZCB1c2VjKQotewotICAgIGl0aW1lcnZhbCB0aW1l
cjsKLSAgICB0aW1lci5pdF92YWx1ZS50dl9zZWMgPSAwOwotICAgIHRpbWVyLml0X3ZhbHVlLnR2
X3VzZWMgPSB1c2VjOwotICAgIHRpbWVyLml0X2ludGVydmFsLnR2X3NlYyA9IDA7Ci0gICAgdGlt
ZXIuaXRfaW50ZXJ2YWwudHZfdXNlYyA9IHVzZWM7Ci0gICAgc2V0aXRpbWVyKElUSU1FUl9SRUFM
LCAmdGltZXIsIDApOwotfQotI2VuZGlmCi0KLUlHTk9SRV9XQVJOSU5HU19FTkQKLQotI2lmIEhB
VkUoTUFDSElORV9DT05URVhUKQotc3RhdGljIHZvaWQgcHJvZmlsaW5nVGltZXIoaW50LCBzaWdp
bmZvX3QqLCB2b2lkKiB1YXApCi17Ci0gICAgUGxhdGZvcm1SZWdpc3RlcnMmIHBsYXRmb3JtUmVn
aXN0ZXJzID0gV1RGOjpyZWdpc3RlcnNGcm9tVUNvbnRleHQoc3RhdGljX2Nhc3Q8dWNvbnRleHRf
dCo+KHVhcCkpOwotICAgIGlmIChhdXRvIGluc3RydWN0aW9uUG9pbnRlciA9IE1hY2hpbmVDb250
ZXh0OjppbnN0cnVjdGlvblBvaW50ZXIocGxhdGZvcm1SZWdpc3RlcnMpKSB7Ci0gICAgICAgIENv
ZGVQcm9maWxpbmc6OnNhbXBsZSgKLSAgICAgICAgICAgIGluc3RydWN0aW9uUG9pbnRlci0+dW50
YWdnZWRFeGVjdXRhYmxlQWRkcmVzcygpLAotICAgICAgICAgICAgcmVpbnRlcnByZXRfY2FzdDx2
b2lkKio+KE1hY2hpbmVDb250ZXh0OjpmcmFtZVBvaW50ZXIocGxhdGZvcm1SZWdpc3RlcnMpKSk7
Ci0gICAgfQotfQotI2VuZGlmCi0KLS8vIENhbGxiYWNrIHRyaWdnZXJlZCB3aGVuIHRoZSB0aW1l
ciBpcyBmaXJlZC4KLXZvaWQgQ29kZVByb2ZpbGluZzo6c2FtcGxlKHZvaWQqIHBjLCB2b2lkKiog
ZnJhbWVQb2ludGVyKQotewotICAgIENvZGVQcm9maWxlKiBwcm9maWxlU3RhY2sgPSBjb25zdF9j
YXN0PENvZGVQcm9maWxlKj4oc19wcm9maWxlU3RhY2spOwotICAgIGlmIChwcm9maWxlU3RhY2sp
Ci0gICAgICAgIHByb2ZpbGVTdGFjay0+c2FtcGxlKHBjLCBmcmFtZVBvaW50ZXIpOwotfQotCi12
b2lkIENvZGVQcm9maWxpbmc6Om5vdGlmeUFsbG9jYXRvcihXVEY6Ok1ldGFBbGxvY2F0b3IqIGFs
bG9jYXRvcikKLXsKLSAgICAvLyBDaGVjayBmb3IgSlNDX0NPREVfUFJPRklMSU5HLgotICAgIGNv
bnN0IGNoYXIqIGNvZGVQcm9maWxpbmdNb2RlID0gZ2V0ZW52KCJKU0NfQ09ERV9QUk9GSUxJTkci
KTsKLSAgICBpZiAoIWNvZGVQcm9maWxpbmdNb2RlKQotICAgICAgICByZXR1cm47Ci0KLSAgICAv
LyBDaGVjayBmb3IgYSB2YWxpZCBtb2RlLCBjdXJyZW50bHkgIjEiLCAiMiIsIG9yICIzIi4KLSAg
ICBpZiAoIWNvZGVQcm9maWxpbmdNb2RlWzBdIHx8IGNvZGVQcm9maWxpbmdNb2RlWzFdKQotICAg
ICAgICByZXR1cm47Ci0gICAgc3dpdGNoICgqY29kZVByb2ZpbGluZ01vZGUpIHsKLSAgICBjYXNl
ICcxJzoKLSAgICAgICAgc19tb2RlID0gRW5hYmxlZDsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2Fz
ZSAnMic6Ci0gICAgICAgIHNfbW9kZSA9IFZlcmJvc2U7Ci0gICAgICAgIGJyZWFrOwotICAgIGNh
c2UgJzMnOgotICAgICAgICBzX21vZGUgPSBWZXJ5VmVyYm9zZTsKLSAgICAgICAgYnJlYWs7Ci0g
ICAgZGVmYXVsdDoKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIEFTU0VSVChlbmFibGVk
KCkpOwotICAgIEFTU0VSVCghc190cmFja2VyKTsKLSAgICBzX3RyYWNrZXIgPSBuZXcgV1RGOjpN
ZXRhQWxsb2NhdG9yVHJhY2tlcigpOwotICAgIGFsbG9jYXRvci0+dHJhY2tBbGxvY2F0aW9ucyhz
X3RyYWNrZXIpOwotfQotCi12b2lkKiBDb2RlUHJvZmlsaW5nOjpnZXRPd25lclVJREZvclBDKHZv
aWQqIGFkZHJlc3MpCi17Ci0gICAgaWYgKCFzX3RyYWNrZXIpCi0gICAgICAgIHJldHVybiAwOwot
ICAgIFdURjo6TWV0YUFsbG9jYXRvckhhbmRsZSogaGFuZGxlID0gc190cmFja2VyLT5maW5kKGFk
ZHJlc3MpOwotICAgIGlmICghaGFuZGxlKQotICAgICAgICByZXR1cm4gMDsKLSAgICByZXR1cm4g
aGFuZGxlLT5vd25lclVJRCgpOwotfQotCi12b2lkIENvZGVQcm9maWxpbmc6OmJlZ2luKGNvbnN0
IFNvdXJjZUNvZGUmIHNvdXJjZSkKLXsKLSAgICAvLyBQdXNoIGEgbmV3IENvZGVQcm9maWxlIG9u
dG8gdGhlIHN0YWNrIGZvciBlYWNoIHNjcmlwdCBlbmNvdW50ZXJlZC4KLSAgICBDb2RlUHJvZmls
ZSogcHJvZmlsZVN0YWNrID0gY29uc3RfY2FzdDxDb2RlUHJvZmlsZSo+KHNfcHJvZmlsZVN0YWNr
KTsKLSAgICBib29sIGFscmVhZHlQcm9maWxpbmcgPSBwcm9maWxlU3RhY2s7Ci0gICAgc19wcm9m
aWxlU3RhY2sgPSBwcm9maWxlU3RhY2sgPSBuZXcgQ29kZVByb2ZpbGUoc291cmNlLCBwcm9maWxl
U3RhY2spOwotCi0gICAgLy8gSXMgdGhlIHByb2ZpbGVyIGFscmVhZHkgcnVubmluZyAtIGlmIHNv
LCB0aGUgdGltZXIgd2lsbCBhbHJlYWR5IGJlIHNldCB1cC4KLSAgICBpZiAoYWxyZWFkeVByb2Zp
bGluZykKLSAgICAgICAgcmV0dXJuOwotCi0jaWYgSEFWRShNQUNISU5FX0NPTlRFWFQpCi0gICAg
Ly8gUmVnc2l0ZXIgYSBzaWduYWwgaGFuZGxlciAmIGl0aW1lci4KLSAgICBzdHJ1Y3Qgc2lnYWN0
aW9uIGFjdGlvbjsKLSAgICBhY3Rpb24uc2Ffc2lnYWN0aW9uID0gcmVpbnRlcnByZXRfY2FzdDx2
b2lkICgqKShpbnQsIHNpZ2luZm9fdCAqLCB2b2lkICopPihwcm9maWxpbmdUaW1lcik7Ci0gICAg
c2lnZmlsbHNldCgmYWN0aW9uLnNhX21hc2spOwotICAgIGFjdGlvbi5zYV9mbGFncyA9IFNBX1NJ
R0lORk87Ci0gICAgc2lnYWN0aW9uKFNJR0FMUk0sICZhY3Rpb24sIDApOwotICAgIHNldFByb2Zp
bGVUaW1lcigxMDApOwotI2VuZGlmCi19Ci0KLXZvaWQgQ29kZVByb2ZpbGluZzo6ZW5kKCkKLXsK
LSAgICAvLyBQb3AgdGhlIGN1cnJlbnQgcHJvZmlsZXIgb2ZmIHRoZSBzdGFjay4KLSAgICBDb2Rl
UHJvZmlsZSogY3VycmVudCA9IGNvbnN0X2Nhc3Q8Q29kZVByb2ZpbGUqPihzX3Byb2ZpbGVTdGFj
ayk7Ci0gICAgQVNTRVJUKGN1cnJlbnQpOwotICAgIHNfcHJvZmlsZVN0YWNrID0gY3VycmVudC0+
cGFyZW50KCk7Ci0KLSAgICAvLyBJcyB0aGlzIHRoZSBvdXRlcm1vc3Qgc2NyaXB0IGJlaW5nIHBy
b2ZpbGVkPyAtIGlmIG5vdCwganVzdCByZXR1cm4uCi0gICAgLy8gV2UgcGVyZm9ybSBhbGwgb3V0
cHV0IG9mIHByb2ZpbGVzIHJlY3Vyc2l2ZWx5IGZyb20gdGhlIG91dGVybW9zdCBzY3JpcHQsCi0g
ICAgLy8gdG8gbWluaW1pemUgcHJvZmlsaW5nIG92ZXJoZWFkIGZyb20gc2tld2luZyByZXN1bHRz
LgotICAgIGlmIChzX3Byb2ZpbGVTdGFjaykKLSAgICAgICAgcmV0dXJuOwotCi0jaWYgSEFWRShN
QUNISU5FX0NPTlRFWFQpCi0gICAgLy8gU3RvcCBwcm9maWxpbmcKLSAgICBzZXRQcm9maWxlVGlt
ZXIoMCk7Ci0jZW5kaWYKLQotICAgIGN1cnJlbnQtPnJlcG9ydCgpOwotICAgIGRlbGV0ZSBjdXJy
ZW50OwotfQotCi19CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvdG9vbHMvQ29kZVByb2Zp
bGluZy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90b29scy9Db2RlUHJv
ZmlsaW5nLmgJKHJldmlzaW9uIDI1ODM1MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90b29s
cy9Db2RlUHJvZmlsaW5nLmgJKG5vbmV4aXN0ZW50KQpAQCAtMSw4MSArMCwwIEBACi0vKgotICog
Q29weXJpZ2h0IChDKSAyMDEyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0g
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJ
UycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0g
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0KLSNwcmFnbWEgb25jZQotCi1u
YW1lc3BhY2UgV1RGIHsKLQotY2xhc3MgTWV0YUFsbG9jYXRvcjsKLWNsYXNzIE1ldGFBbGxvY2F0
b3JUcmFja2VyOwotCi19Ci0KLW5hbWVzcGFjZSBKU0MgewotCi1jbGFzcyBDb2RlUHJvZmlsZTsK
LWNsYXNzIFNvdXJjZUNvZGU7Ci0KLWNsYXNzIENvZGVQcm9maWxpbmcgewotICAgIGVudW0gTW9k
ZSB7Ci0gICAgICAgIERpc2FibGVkLAotICAgICAgICBFbmFibGVkLAotICAgICAgICBWZXJib3Nl
LAotICAgICAgICBWZXJ5VmVyYm9zZQotICAgIH07Ci0KLXB1YmxpYzoKLSAgICBDb2RlUHJvZmls
aW5nKGNvbnN0IFNvdXJjZUNvZGUmIHNvdXJjZSkKLSAgICAgICAgOiBtX2FjdGl2ZShlbmFibGVk
KCkpCi0gICAgewotICAgICAgICBpZiAobV9hY3RpdmUpCi0gICAgICAgICAgICBiZWdpbihzb3Vy
Y2UpOwotICAgIH0KLQotICAgIH5Db2RlUHJvZmlsaW5nKCkKLSAgICB7Ci0gICAgICAgIGlmICht
X2FjdGl2ZSkKLSAgICAgICAgICAgIGVuZCgpOwotICAgIH0KLQotICAgIHN0YXRpYyBib29sIGVu
YWJsZWQoKSB7IHJldHVybiBzX21vZGUgIT0gRGlzYWJsZWQ7IH0KLSAgICBzdGF0aWMgYm9vbCBi
ZVZlcmJvc2UoKSB7IHJldHVybiBzX21vZGUgPj0gVmVyYm9zZTsgfQotICAgIHN0YXRpYyBib29s
IGJlVmVyeVZlcmJvc2UoKSB7IHJldHVybiBzX21vZGUgPj0gVmVyeVZlcmJvc2U7IH0KLQotICAg
IHN0YXRpYyB2b2lkIG5vdGlmeUFsbG9jYXRvcihXVEY6Ok1ldGFBbGxvY2F0b3IqKTsKLSAgICBz
dGF0aWMgdm9pZCogZ2V0T3duZXJVSURGb3JQQyh2b2lkKik7Ci0gICAgc3RhdGljIHZvaWQgc2Ft
cGxlKHZvaWQqIHBjLCB2b2lkKiogZnJhbWVQb2ludGVyKTsKLQotcHJpdmF0ZToKLSAgICB2b2lk
IGJlZ2luKGNvbnN0IFNvdXJjZUNvZGUmKTsKLSAgICB2b2lkIGVuZCgpOwotCi0gICAgYm9vbCBt
X2FjdGl2ZTsKLQotICAgIHN0YXRpYyBNb2RlIHNfbW9kZTsKLSAgICBzdGF0aWMgV1RGOjpNZXRh
QWxsb2NhdG9yVHJhY2tlciogc190cmFja2VyOwotICAgIHN0YXRpYyB2b2xhdGlsZSBDb2RlUHJv
ZmlsZSogc19wcm9maWxlU3RhY2s7Ci19OwotCi19IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21CQlFQbGFuLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQkJRUGxhbi5jcHAJKHJldmlzaW9uIDI1ODM1
MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21CQlFQbGFuLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMTMyLDEzICsxMzIsOSBAQCB2b2lkIEJCUVBsYW46OndvcmsoQ29tcGlsYXRp
b25FZmZvcnQgZWZmCiAgICAgICAgIC8vIHdpbGwgdXBkYXRlLiBJdCdzIGFsc28gb2sgaWYgdGhl
eSBwdWJsaXNoIHRoZWlyIGNvZGUgYmVmb3JlIHdlIHJlc2V0IHRoZSBpbnN0cnVjdGlvbiBjYWNo
ZXMgYmVjYXVzZSBhZnRlciB3ZSByZWxlYXNlCiAgICAgICAgIC8vIHRoZSBsb2NrIG91ciBjb2Rl
IGlzIHJlYWR5IHRvIGJlIHB1Ymxpc2hlZCB0b28uCiAgICAgICAgIExvY2tIb2xkZXIgaG9sZGVy
KG1fY29kZUJsb2NrLT5tX2xvY2spOworCiAgICAgICAgIG1fY29kZUJsb2NrLT5tX2JicUNhbGxl
ZXNbbV9mdW5jdGlvbkluZGV4XSA9IGNhbGxlZS5jb3B5UmVmKCk7Ci0gICAgICAgIHsKLSAgICAg
ICAgICAgIExMSW50Q2FsbGVlJiBsbGludENhbGxlZSA9IG1fY29kZUJsb2NrLT5tX2xsaW50Q2Fs
bGVlcy0+YXQobV9mdW5jdGlvbkluZGV4KS5nZXQoKTsKLSAgICAgICAgICAgIGF1dG8gbG9ja2Vy
ID0gaG9sZExvY2sobGxpbnRDYWxsZWUudGllclVwQ291bnRlcigpLm1fbG9jayk7Ci0gICAgICAg
ICAgICBsbGludENhbGxlZS5zZXRSZXBsYWNlbWVudChjYWxsZWUuY29weVJlZigpKTsKLSAgICAg
ICAgICAgIGxsaW50Q2FsbGVlLnRpZXJVcENvdW50ZXIoKS5tX2NvbXBpbGF0aW9uU3RhdHVzID0g
TExJbnRUaWVyVXBDb3VudGVyOjpDb21waWxhdGlvblN0YXR1czo6Q29tcGlsZWQ7Ci0gICAgICAg
IH0KKwogICAgICAgICBmb3IgKGF1dG8mIGNhbGwgOiBjYWxsZWUtPndhc21Ub1dhc21DYWxsc2l0
ZXMoKSkgewogICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPFdhc21FbnRyeVB0clRh
Zz4gZW50cnlwb2ludDsKICAgICAgICAgICAgIGlmIChjYWxsLmZ1bmN0aW9uSW5kZXhTcGFjZSA8
IG1fbW9kdWxlSW5mb3JtYXRpb24tPmltcG9ydEZ1bmN0aW9uQ291bnQoKSkKQEAgLTE0OCwyNCAr
MTQ0LDQ4IEBAIHZvaWQgQkJRUGxhbjo6d29yayhDb21waWxhdGlvbkVmZm9ydCBlZmYKIAogICAg
ICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OnJlcGF0Y2hOZWFyQ2FsbChjYWxsLmNhbGxMb2NhdGlv
biwgQ29kZUxvY2F0aW9uTGFiZWw8V2FzbUVudHJ5UHRyVGFnPihlbnRyeXBvaW50KSk7CiAgICAg
ICAgIH0KLSAgICB9CiAKLSAgICAvLyBJdCdzIGltcG9ydGFudCB0byBtYWtlIHN1cmUgd2UgZG8g
dGhpcyBiZWZvcmUgd2UgbWFrZSBhbnkgb2YgdGhlIGNvZGUgd2UganVzdCBjb21waWxlZCB2aXNp
YmxlLiBJZiB3ZSBkaWRuJ3QsIHdlIGNvdWxkIGVuZCB1cAotICAgIC8vIHdoZXJlIHdlIGFyZSB0
aWVyaW5nIHVwIHNvbWUgZnVuY3Rpb24gQSB0byBBJyBhbmQgd2UgcmVwYXRjaCBzb21lIGZ1bmN0
aW9uIEIgdG8gY2FsbCBBJyBpbnN0ZWFkIG9mIEEuIEFub3RoZXIgQ1BVIGNvdWxkIHNlZQotICAg
IC8vIHRoZSB1cGRhdGVzIHRvIEIgYnV0IHN0aWxsIG5vdCBoYXZlIHJlc2V0IGl0cyBjYWNoZSBv
ZiBBJywgd2hpY2ggd291bGQgbGVhZCB0byBhbGwga2luZHMgb2YgYmFkbmVzcy4KLSAgICByZXNl
dEluc3RydWN0aW9uQ2FjaGVPbkFsbFRocmVhZHMoKTsKLSAgICBXVEY6OnN0b3JlU3RvcmVGZW5j
ZSgpOyAvLyBUaGlzIHByb2JhYmx5IGlzbid0IG5lY2Vzc2FyeSBidXQgaXQncyBnb29kIHRvIGJl
IHBhcmFub2lkLgorICAgICAgICBIYXNoTWFwPHZvaWQqLCBDb2RlTG9jYXRpb25MYWJlbDxXYXNt
RW50cnlQdHJUYWc+PiBzdGFnZWRDYWxsczsKKyAgICAgICAgYXV0byBzdGFnZVJlcGF0Y2ggPSBb
Jl0gKGNvbnN0IFZlY3RvcjxVbmxpbmtlZFdhc21Ub1dhc21DYWxsPiYgY2FsbHNpdGVzKSB7Cisg
ICAgICAgICAgICBmb3IgKGF1dG8mIGNhbGwgOiBjYWxsc2l0ZXMpIHsKKyAgICAgICAgICAgICAg
ICBpZiAoY2FsbC5mdW5jdGlvbkluZGV4U3BhY2UgPT0gZnVuY3Rpb25JbmRleFNwYWNlKSB7Cisg
ICAgICAgICAgICAgICAgICAgIENvZGVMb2NhdGlvbkxhYmVsPFdhc21FbnRyeVB0clRhZz4gdGFy
Z2V0ID0gTWFjcm9Bc3NlbWJsZXI6OnByZXBhcmVGb3JBdG9taWNSZXBhdGNoTmVhckNhbGxDb25j
dXJyZW50bHkoY2FsbC5jYWxsTG9jYXRpb24sIENvZGVMb2NhdGlvbkxhYmVsPFdhc21FbnRyeVB0
clRhZz4oZW50cnlwb2ludCkpOworICAgICAgICAgICAgICAgICAgICBzdGFnZWRDYWxscy5hZGQo
Y2FsbC5jYWxsTG9jYXRpb24uZGF0YUxvY2F0aW9uKCksIHRhcmdldCk7CisgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9OwogCi0gICAgbV9jb2RlQmxvY2stPm1fd2Fz
bUluZGlyZWN0Q2FsbEVudHJ5UG9pbnRzW21fZnVuY3Rpb25JbmRleF0gPSBlbnRyeXBvaW50Owot
ICAgIHsKLSAgICAgICAgTG9ja0hvbGRlciBob2xkZXIobV9jb2RlQmxvY2stPm1fbG9jayk7Cisg
ICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX2NvZGVCbG9jay0+bV93YXNtVG9XYXNt
Q2FsbHNpdGVzLnNpemUoKTsgKytpKSB7CisgICAgICAgICAgICBzdGFnZVJlcGF0Y2gobV9jb2Rl
QmxvY2stPm1fd2FzbVRvV2FzbUNhbGxzaXRlc1tpXSk7CisgICAgICAgICAgICBpZiAobV9jb2Rl
QmxvY2stPm1fbGxpbnRDYWxsZWVzKSB7CisgICAgICAgICAgICAgICAgTExJbnRDYWxsZWUmIGxs
aW50Q2FsbGVlID0gbV9jb2RlQmxvY2stPm1fbGxpbnRDYWxsZWVzLT5hdChpKS5nZXQoKTsKKyAg
ICAgICAgICAgICAgICBpZiAoSklUQ2FsbGVlKiByZXBsYWNlbWVudENhbGxlZSA9IGxsaW50Q2Fs
bGVlLnJlcGxhY2VtZW50KCkpCisgICAgICAgICAgICAgICAgICAgIHN0YWdlUmVwYXRjaChyZXBs
YWNlbWVudENhbGxlZS0+d2FzbVRvV2FzbUNhbGxzaXRlcygpKTsKKyAgICAgICAgICAgICAgICBp
ZiAoT01HRm9yT1NSRW50cnlDYWxsZWUqIG9zckVudHJ5Q2FsbGVlID0gbGxpbnRDYWxsZWUub3Ny
RW50cnlDYWxsZWUoKSkKKyAgICAgICAgICAgICAgICAgICAgc3RhZ2VSZXBhdGNoKG9zckVudHJ5
Q2FsbGVlLT53YXNtVG9XYXNtQ2FsbHNpdGVzKCkpOworICAgICAgICAgICAgfQorICAgICAgICAg
ICAgaWYgKEJCUUNhbGxlZSogYmJxQ2FsbGVlID0gbV9jb2RlQmxvY2stPm1fYmJxQ2FsbGVlc1tp
XS5nZXQoKSkgeworICAgICAgICAgICAgICAgIGlmIChPTUdDYWxsZWUqIHJlcGxhY2VtZW50Q2Fs
bGVlID0gYmJxQ2FsbGVlLT5yZXBsYWNlbWVudCgpKQorICAgICAgICAgICAgICAgICAgICBzdGFn
ZVJlcGF0Y2gocmVwbGFjZW1lbnRDYWxsZWUtPndhc21Ub1dhc21DYWxsc2l0ZXMoKSk7CisgICAg
ICAgICAgICAgICAgaWYgKE9NR0Zvck9TUkVudHJ5Q2FsbGVlKiBvc3JFbnRyeUNhbGxlZSA9IGJi
cUNhbGxlZS0+b3NyRW50cnlDYWxsZWUoKSkKKyAgICAgICAgICAgICAgICAgICAgc3RhZ2VSZXBh
dGNoKG9zckVudHJ5Q2FsbGVlLT53YXNtVG9XYXNtQ2FsbHNpdGVzKCkpOworICAgICAgICAgICAg
fQorICAgICAgICB9CisKKyAgICAgICAgLy8gSXQncyBpbXBvcnRhbnQgdG8gbWFrZSBzdXJlIHdl
IGRvIHRoaXMgYmVmb3JlIHdlIG1ha2UgYW55IG9mIHRoZSBjb2RlIHdlIGp1c3QgY29tcGlsZWQg
dmlzaWJsZS4gSWYgd2UgZGlkbid0LCB3ZSBjb3VsZCBlbmQgdXAKKyAgICAgICAgLy8gd2hlcmUg
d2UgYXJlIHRpZXJpbmcgdXAgc29tZSBmdW5jdGlvbiBBIHRvIEEnIGFuZCB3ZSByZXBhdGNoIHNv
bWUgZnVuY3Rpb24gQiB0byBjYWxsIEEnIGluc3RlYWQgb2YgQS4gQW5vdGhlciBDUFUgY291bGQg
c2VlCisgICAgICAgIC8vIHRoZSB1cGRhdGVzIHRvIEIgYnV0IHN0aWxsIG5vdCBoYXZlIHJlc2V0
IGl0cyBjYWNoZSBvZiBBJywgd2hpY2ggd291bGQgbGVhZCB0byBhbGwga2luZHMgb2YgYmFkbmVz
cy4KKyAgICAgICAgcmVzZXRJbnN0cnVjdGlvbkNhY2hlT25BbGxUaHJlYWRzKCk7CisgICAgICAg
IFdURjo6c3RvcmVTdG9yZUZlbmNlKCk7IC8vIFRoaXMgcHJvYmFibHkgaXNuJ3QgbmVjZXNzYXJ5
IGJ1dCBpdCdzIGdvb2QgdG8gYmUgcGFyYW5vaWQuCisKKyAgICAgICAgbV9jb2RlQmxvY2stPm1f
d2FzbUluZGlyZWN0Q2FsbEVudHJ5UG9pbnRzW21fZnVuY3Rpb25JbmRleF0gPSBlbnRyeXBvaW50
OwogCiAgICAgICAgIGF1dG8gcmVwYXRjaENhbGxzID0gWyZdIChjb25zdCBWZWN0b3I8VW5saW5r
ZWRXYXNtVG9XYXNtQ2FsbD4mIGNhbGxzaXRlcykgewogICAgICAgICAgICAgZm9yIChhdXRvJiBj
YWxsIDogY2FsbHNpdGVzKSB7CiAgICAgICAgICAgICAgICAgZGF0YUxvZ0xuSWYoV2FzbUJCUVBs
YW5JbnRlcm5hbDo6dmVyYm9zZSwgIkNvbnNpZGVyaW5nIHJlcGF0Y2hpbmcgY2FsbCBhdDogIiwg
UmF3UG9pbnRlcihjYWxsLmNhbGxMb2NhdGlvbi5kYXRhTG9jYXRpb24oKSksICIgdGhhdCB0YXJn
ZXRzICIsIGNhbGwuZnVuY3Rpb25JbmRleFNwYWNlKTsKICAgICAgICAgICAgICAgICBpZiAoY2Fs
bC5mdW5jdGlvbkluZGV4U3BhY2UgPT0gZnVuY3Rpb25JbmRleFNwYWNlKSB7CiAgICAgICAgICAg
ICAgICAgICAgIGRhdGFMb2dMbklmKFdhc21CQlFQbGFuSW50ZXJuYWw6OnZlcmJvc2UsICJSZXBh
dGNoaW5nIGNhbGwgYXQ6ICIsIFJhd1BvaW50ZXIoY2FsbC5jYWxsTG9jYXRpb24uZGF0YUxvY2F0
aW9uKCkpLCAiIHRvICIsIFJhd1BvaW50ZXIoZW50cnlwb2ludC5leGVjdXRhYmxlQWRkcmVzcygp
KSk7Ci0gICAgICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpyZXBhdGNoTmVhckNhbGwo
Y2FsbC5jYWxsTG9jYXRpb24sIENvZGVMb2NhdGlvbkxhYmVsPFdhc21FbnRyeVB0clRhZz4oZW50
cnlwb2ludCkpOworICAgICAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6cmVwYXRjaE5l
YXJDYWxsKGNhbGwuY2FsbExvY2F0aW9uLCBzdGFnZWRDYWxscy5nZXQoY2FsbC5jYWxsTG9jYXRp
b24uZGF0YUxvY2F0aW9uKCkpKTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CiAg
ICAgICAgIH07CkBAIC0xODYsMTEgKzIwNiwxNyBAQCB2b2lkIEJCUVBsYW46OndvcmsoQ29tcGls
YXRpb25FZmZvcnQgZWZmCiAgICAgICAgICAgICAgICAgICAgIHJlcGF0Y2hDYWxscyhvc3JFbnRy
eUNhbGxlZS0+d2FzbVRvV2FzbUNhbGxzaXRlcygpKTsKICAgICAgICAgICAgIH0KICAgICAgICAg
fQorCisgICAgICAgIHsKKyAgICAgICAgICAgIExMSW50Q2FsbGVlJiBsbGludENhbGxlZSA9IG1f
Y29kZUJsb2NrLT5tX2xsaW50Q2FsbGVlcy0+YXQobV9mdW5jdGlvbkluZGV4KS5nZXQoKTsKKyAg
ICAgICAgICAgIGF1dG8gbG9ja2VyID0gaG9sZExvY2sobGxpbnRDYWxsZWUudGllclVwQ291bnRl
cigpLm1fbG9jayk7CisgICAgICAgICAgICBsbGludENhbGxlZS5zZXRSZXBsYWNlbWVudChjYWxs
ZWUuY29weVJlZigpKTsKKyAgICAgICAgICAgIGxsaW50Q2FsbGVlLnRpZXJVcENvdW50ZXIoKS5t
X2NvbXBpbGF0aW9uU3RhdHVzID0gTExJbnRUaWVyVXBDb3VudGVyOjpDb21waWxhdGlvblN0YXR1
czo6Q29tcGlsZWQ7CisgICAgICAgIH0KICAgICB9CiAKICAgICBkYXRhTG9nTG5JZihXYXNtQkJR
UGxhbkludGVybmFsOjp2ZXJib3NlLCAiRmluaXNoZWQgQkJRICIsIG1fZnVuY3Rpb25JbmRleCk7
CiAKLQogICAgIGF1dG8gbG9ja2VyID0gaG9sZExvY2sobV9sb2NrKTsKICAgICBtb3ZlVG9TdGF0
ZShTdGF0ZTo6Q29tcGxldGVkKTsKICAgICBydW5Db21wbGV0aW9uVGFza3MobG9ja2VyKTsKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21PTUdGb3JPU1JFbnRyeVBsYW4uY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21PTUdGb3JPU1JF
bnRyeVBsYW4uY3BwCShyZXZpc2lvbiAyNTgzNTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
d2FzbS9XYXNtT01HRm9yT1NSRW50cnlQbGFuLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTAzLDEy
ICsxMDMsMTAgQEAgdm9pZCBPTUdGb3JPU1JFbnRyeVBsYW46OndvcmsoQ29tcGlsYXRpbwogCiAg
ICAgb21nRW50cnlwb2ludC5jYWxsZWVTYXZlUmVnaXN0ZXJzID0gV1RGTW92ZShwYXJzZUFuZENv
bXBpbGVSZXN1bHQudmFsdWUoKS0+ZW50cnlwb2ludC5jYWxsZWVTYXZlUmVnaXN0ZXJzKTsKIAot
ICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxXYXNtRW50cnlQdHJUYWc+IGVudHJ5cG9pbnQ7CiAg
ICAgQVNTRVJUKG1fY29kZUJsb2NrLnB0cigpID09IG1fbW9kdWxlLT5jb2RlQmxvY2tGb3IobW9k
ZSgpKSk7CiAgICAgUmVmPE9NR0Zvck9TUkVudHJ5Q2FsbGVlPiBjYWxsZWUgPSBPTUdGb3JPU1JF
bnRyeUNhbGxlZTo6Y3JlYXRlKFdURk1vdmUob21nRW50cnlwb2ludCksIGZ1bmN0aW9uSW5kZXhT
cGFjZSwgbV9tb2R1bGVJbmZvcm1hdGlvbi0+bmFtZVNlY3Rpb24tPmdldChmdW5jdGlvbkluZGV4
U3BhY2UpLCBvc3JFbnRyeVNjcmF0Y2hCdWZmZXJTaXplLCBtX2xvb3BJbmRleCwgV1RGTW92ZSh1
bmxpbmtlZENhbGxzKSk7CiAgICAgewogICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6cmVwYXRjaFBv
aW50ZXIocGFyc2VBbmRDb21waWxlUmVzdWx0LnZhbHVlKCktPmNhbGxlZU1vdmVMb2NhdGlvbiwg
Q2FsbGVlQml0czo6Ym94V2FzbShjYWxsZWUucHRyKCkpKTsKLSAgICAgICAgZW50cnlwb2ludCA9
IGNhbGxlZS0+ZW50cnlwb2ludCgpOwogCiAgICAgICAgIGF1dG8gbG9ja2VyID0gaG9sZExvY2so
bV9jb2RlQmxvY2stPm1fbG9jayk7CiAgICAgICAgIGZvciAoYXV0byYgY2FsbCA6IGNhbGxlZS0+
d2FzbVRvV2FzbUNhbGxzaXRlcygpKSB7CkBAIC0xMjAsMTEgKzExOCwxMCBAQCB2b2lkIE9NR0Zv
ck9TUkVudHJ5UGxhbjo6d29yayhDb21waWxhdGlvCiAKICAgICAgICAgICAgIE1hY3JvQXNzZW1i
bGVyOjpyZXBhdGNoTmVhckNhbGwoY2FsbC5jYWxsTG9jYXRpb24sIENvZGVMb2NhdGlvbkxhYmVs
PFdhc21FbnRyeVB0clRhZz4oZW50cnlwb2ludCkpOwogICAgICAgICB9Ci0gICAgfQotICAgIHJl
c2V0SW5zdHJ1Y3Rpb25DYWNoZU9uQWxsVGhyZWFkcygpOwotICAgIFdURjo6c3RvcmVTdG9yZUZl
bmNlKCk7Ci0gICAgewotICAgICAgICBhdXRvIGxvY2tlciA9IGhvbGRMb2NrKG1fY29kZUJsb2Nr
LT5tX2xvY2spOworCisgICAgICAgIHJlc2V0SW5zdHJ1Y3Rpb25DYWNoZU9uQWxsVGhyZWFkcygp
OworICAgICAgICBXVEY6OnN0b3JlU3RvcmVGZW5jZSgpOworCiAgICAgICAgIHsKICAgICAgICAg
ICAgIHN3aXRjaCAobV9jYWxsZWUtPmNvbXBpbGF0aW9uTW9kZSgpKSB7CiAgICAgICAgICAgICBj
YXNlIENvbXBpbGF0aW9uTW9kZTo6TExJbnRNb2RlOiB7CkBAIC0xNDYsMTkgKzE0Myw2IEBAIHZv
aWQgT01HRm9yT1NSRW50cnlQbGFuOjp3b3JrKENvbXBpbGF0aW8KICAgICAgICAgICAgICAgICBS
RUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICAgICAgfQogICAgICAgICB9Ci0g
ICAgICAgIFdURjo6c3RvcmVTdG9yZUZlbmNlKCk7Ci0gICAgICAgIC8vIEl0IGlzIHBvc3NpYmxl
IHRoYXQgYSBuZXcgT01HIGNhbGxlZSBpcyBhZGRlZCB3aGlsZSB3ZSByZWxlYXNlIG1fY29kZUJs
b2NrLT5sb2NrLgotICAgICAgICAvLyBVbnRpbCB3ZSBhZGQgT01HRm9yT1NSRW50cnkgY2FsbGVl
IHRvIEJCUUNhbGxlZSdzIG1fb3NyRW50cnlDYWxsZWUsIHRoaXMgbmV3IE9NRyBmdW5jdGlvbiBs
aW5raW5nIGRvZXMgbm90IGhhcHBlbiBmb3IgdGhpcyBPTUdGb3JPU1JFbnRyeSBjYWxsZWUuCi0g
ICAgICAgIC8vIFdlIHJlLWxpbmsgdGhpcyBPTUdGb3JPU1JFbnRyeSBjYWxsZWUgYWdhaW4gbm90
IHRvIG1pc3MgdGhhdCBjaGFuY2UuCi0gICAgICAgIGZvciAoYXV0byYgY2FsbCA6IGNhbGxlZS0+
d2FzbVRvV2FzbUNhbGxzaXRlcygpKSB7Ci0gICAgICAgICAgICBNYWNyb0Fzc2VtYmxlckNvZGVQ
dHI8V2FzbUVudHJ5UHRyVGFnPiBlbnRyeXBvaW50OwotICAgICAgICAgICAgaWYgKGNhbGwuZnVu
Y3Rpb25JbmRleFNwYWNlIDwgbV9tb2R1bGUtPm1vZHVsZUluZm9ybWF0aW9uKCkuaW1wb3J0RnVu
Y3Rpb25Db3VudCgpKQotICAgICAgICAgICAgICAgIGVudHJ5cG9pbnQgPSBtX2NvZGVCbG9jay0+
bV93YXNtVG9XYXNtRXhpdFN0dWJzW2NhbGwuZnVuY3Rpb25JbmRleFNwYWNlXS5jb2RlKCk7Ci0g
ICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgZW50cnlwb2ludCA9IG1fY29kZUJsb2Nr
LT53YXNtRW50cnlwb2ludENhbGxlZUZyb21GdW5jdGlvbkluZGV4U3BhY2UoY2FsbC5mdW5jdGlv
bkluZGV4U3BhY2UpLmVudHJ5cG9pbnQoKS5yZXRhZ2dlZDxXYXNtRW50cnlQdHJUYWc+KCk7Ci0K
LSAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpyZXBhdGNoTmVhckNhbGwoY2FsbC5jYWxsTG9j
YXRpb24sIENvZGVMb2NhdGlvbkxhYmVsPFdhc21FbnRyeVB0clRhZz4oZW50cnlwb2ludCkpOwot
ICAgICAgICB9CiAgICAgfQogICAgIGRhdGFMb2dMbklmKFdhc21PTUdGb3JPU1JFbnRyeVBsYW5J
bnRlcm5hbDo6dmVyYm9zZSwgIkZpbmlzaGVkIE9NR0Zvck9TUkVudHJ5ICIsIG1fZnVuY3Rpb25J
bmRleCk7CiAgICAgY29tcGxldGUoaG9sZExvY2sobV9sb2NrKSk7CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvd2FzbS9XYXNtT01HUGxhbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL3dhc20vV2FzbU9NR1BsYW4uY3BwCShyZXZpc2lvbiAyNTgzNTApCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtT01HUGxhbi5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTExNCwyMCArMTE0LDkgQEAgdm9pZCBPTUdQbGFuOjp3b3JrKENvbXBpbGF0aW9uRWZmb3J0
KQogICAgICAgICAvLyB3aWxsIHVwZGF0ZS4gSXQncyBhbHNvIG9rIGlmIHRoZXkgcHVibGlzaCB0
aGVpciBjb2RlIGJlZm9yZSB3ZSByZXNldCB0aGUgaW5zdHJ1Y3Rpb24gY2FjaGVzIGJlY2F1c2Ug
YWZ0ZXIgd2UgcmVsZWFzZQogICAgICAgICAvLyB0aGUgbG9jayBvdXIgY29kZSBpcyByZWFkeSB0
byBiZSBwdWJsaXNoZWQgdG9vLgogICAgICAgICBMb2NrSG9sZGVyIGhvbGRlcihtX2NvZGVCbG9j
ay0+bV9sb2NrKTsKKwogICAgICAgICBtX2NvZGVCbG9jay0+bV9vbWdDYWxsZWVzW21fZnVuY3Rp
b25JbmRleF0gPSBjYWxsZWUuY29weVJlZigpOwotICAgICAgICB7Ci0gICAgICAgICAgICBpZiAo
QkJRQ2FsbGVlKiBiYnFDYWxsZWUgPSBtX2NvZGVCbG9jay0+bV9iYnFDYWxsZWVzW21fZnVuY3Rp
b25JbmRleF0uZ2V0KCkpIHsKLSAgICAgICAgICAgICAgICBhdXRvIGxvY2tlciA9IGhvbGRMb2Nr
KGJicUNhbGxlZS0+dGllclVwQ291bnQoKS0+Z2V0TG9jaygpKTsKLSAgICAgICAgICAgICAgICBi
YnFDYWxsZWUtPnNldFJlcGxhY2VtZW50KGNhbGxlZS5jb3B5UmVmKCkpOwotICAgICAgICAgICAg
ICAgIGJicUNhbGxlZS0+dGllclVwQ291bnQoKS0+bV9jb21waWxhdGlvblN0YXR1c0Zvck9NRyA9
IFRpZXJVcENvdW50OjpDb21waWxhdGlvblN0YXR1czo6Q29tcGlsZWQ7Ci0gICAgICAgICAgICB9
Ci0gICAgICAgICAgICBpZiAobV9jb2RlQmxvY2stPm1fbGxpbnRDYWxsZWVzKSB7Ci0gICAgICAg
ICAgICAgICAgTExJbnRDYWxsZWUmIGxsaW50Q2FsbGVlID0gbV9jb2RlQmxvY2stPm1fbGxpbnRD
YWxsZWVzLT5hdChtX2Z1bmN0aW9uSW5kZXgpLmdldCgpOwotICAgICAgICAgICAgICAgIGF1dG8g
bG9ja2VyID0gaG9sZExvY2sobGxpbnRDYWxsZWUudGllclVwQ291bnRlcigpLm1fbG9jayk7Ci0g
ICAgICAgICAgICAgICAgbGxpbnRDYWxsZWUuc2V0UmVwbGFjZW1lbnQoY2FsbGVlLmNvcHlSZWYo
KSk7Ci0gICAgICAgICAgICAgICAgbGxpbnRDYWxsZWUudGllclVwQ291bnRlcigpLm1fY29tcGls
YXRpb25TdGF0dXMgPSBMTEludFRpZXJVcENvdW50ZXI6OkNvbXBpbGF0aW9uU3RhdHVzOjpDb21w
aWxlZDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQorCiAgICAgICAgIGZvciAoYXV0byYgY2Fs
bCA6IGNhbGxlZS0+d2FzbVRvV2FzbUNhbGxzaXRlcygpKSB7CiAgICAgICAgICAgICBNYWNyb0Fz
c2VtYmxlckNvZGVQdHI8V2FzbUVudHJ5UHRyVGFnPiBlbnRyeXBvaW50OwogICAgICAgICAgICAg
aWYgKGNhbGwuZnVuY3Rpb25JbmRleFNwYWNlIDwgbV9tb2R1bGUtPm1vZHVsZUluZm9ybWF0aW9u
KCkuaW1wb3J0RnVuY3Rpb25Db3VudCgpKQpAQCAtMTM3LDI0ICsxMjYsNDcgQEAgdm9pZCBPTUdQ
bGFuOjp3b3JrKENvbXBpbGF0aW9uRWZmb3J0KQogCiAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxl
cjo6cmVwYXRjaE5lYXJDYWxsKGNhbGwuY2FsbExvY2F0aW9uLCBDb2RlTG9jYXRpb25MYWJlbDxX
YXNtRW50cnlQdHJUYWc+KGVudHJ5cG9pbnQpKTsKICAgICAgICAgfQotICAgIH0KIAotICAgIC8v
IEl0J3MgaW1wb3J0YW50IHRvIG1ha2Ugc3VyZSB3ZSBkbyB0aGlzIGJlZm9yZSB3ZSBtYWtlIGFu
eSBvZiB0aGUgY29kZSB3ZSBqdXN0IGNvbXBpbGVkIHZpc2libGUuIElmIHdlIGRpZG4ndCwgd2Ug
Y291bGQgZW5kIHVwCi0gICAgLy8gd2hlcmUgd2UgYXJlIHRpZXJpbmcgdXAgc29tZSBmdW5jdGlv
biBBIHRvIEEnIGFuZCB3ZSByZXBhdGNoIHNvbWUgZnVuY3Rpb24gQiB0byBjYWxsIEEnIGluc3Rl
YWQgb2YgQS4gQW5vdGhlciBDUFUgY291bGQgc2VlCi0gICAgLy8gdGhlIHVwZGF0ZXMgdG8gQiBi
dXQgc3RpbGwgbm90IGhhdmUgcmVzZXQgaXRzIGNhY2hlIG9mIEEnLCB3aGljaCB3b3VsZCBsZWFk
IHRvIGFsbCBraW5kcyBvZiBiYWRuZXNzLgotICAgIHJlc2V0SW5zdHJ1Y3Rpb25DYWNoZU9uQWxs
VGhyZWFkcygpOwotICAgIFdURjo6c3RvcmVTdG9yZUZlbmNlKCk7IC8vIFRoaXMgcHJvYmFibHkg
aXNuJ3QgbmVjZXNzYXJ5IGJ1dCBpdCdzIGdvb2QgdG8gYmUgcGFyYW5vaWQuCisgICAgICAgIEhh
c2hNYXA8dm9pZCosIENvZGVMb2NhdGlvbkxhYmVsPFdhc21FbnRyeVB0clRhZz4+IHN0YWdlZENh
bGxzOworICAgICAgICBhdXRvIHN0YWdlUmVwYXRjaCA9IFsmXSAoY29uc3QgVmVjdG9yPFVubGlu
a2VkV2FzbVRvV2FzbUNhbGw+JiBjYWxsc2l0ZXMpIHsKKyAgICAgICAgICAgIGZvciAoYXV0byYg
Y2FsbCA6IGNhbGxzaXRlcykgeworICAgICAgICAgICAgICAgIGlmIChjYWxsLmZ1bmN0aW9uSW5k
ZXhTcGFjZSA9PSBmdW5jdGlvbkluZGV4U3BhY2UpIHsKKyAgICAgICAgICAgICAgICAgICAgQ29k
ZUxvY2F0aW9uTGFiZWw8V2FzbUVudHJ5UHRyVGFnPiB0YXJnZXQgPSBNYWNyb0Fzc2VtYmxlcjo6
cHJlcGFyZUZvckF0b21pY1JlcGF0Y2hOZWFyQ2FsbENvbmN1cnJlbnRseShjYWxsLmNhbGxMb2Nh
dGlvbiwgQ29kZUxvY2F0aW9uTGFiZWw8V2FzbUVudHJ5UHRyVGFnPihlbnRyeXBvaW50KSk7Cisg
ICAgICAgICAgICAgICAgICAgIHN0YWdlZENhbGxzLmFkZChjYWxsLmNhbGxMb2NhdGlvbi5kYXRh
TG9jYXRpb24oKSwgdGFyZ2V0KTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9Cisg
ICAgICAgIH07CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX2NvZGVCbG9jay0+
bV93YXNtVG9XYXNtQ2FsbHNpdGVzLnNpemUoKTsgKytpKSB7CisgICAgICAgICAgICBzdGFnZVJl
cGF0Y2gobV9jb2RlQmxvY2stPm1fd2FzbVRvV2FzbUNhbGxzaXRlc1tpXSk7CisgICAgICAgICAg
ICBpZiAobV9jb2RlQmxvY2stPm1fbGxpbnRDYWxsZWVzKSB7CisgICAgICAgICAgICAgICAgTExJ
bnRDYWxsZWUmIGxsaW50Q2FsbGVlID0gbV9jb2RlQmxvY2stPm1fbGxpbnRDYWxsZWVzLT5hdChp
KS5nZXQoKTsKKyAgICAgICAgICAgICAgICBpZiAoSklUQ2FsbGVlKiByZXBsYWNlbWVudENhbGxl
ZSA9IGxsaW50Q2FsbGVlLnJlcGxhY2VtZW50KCkpCisgICAgICAgICAgICAgICAgICAgIHN0YWdl
UmVwYXRjaChyZXBsYWNlbWVudENhbGxlZS0+d2FzbVRvV2FzbUNhbGxzaXRlcygpKTsKKyAgICAg
ICAgICAgICAgICBpZiAoT01HRm9yT1NSRW50cnlDYWxsZWUqIG9zckVudHJ5Q2FsbGVlID0gbGxp
bnRDYWxsZWUub3NyRW50cnlDYWxsZWUoKSkKKyAgICAgICAgICAgICAgICAgICAgc3RhZ2VSZXBh
dGNoKG9zckVudHJ5Q2FsbGVlLT53YXNtVG9XYXNtQ2FsbHNpdGVzKCkpOworICAgICAgICAgICAg
fQorICAgICAgICAgICAgaWYgKEJCUUNhbGxlZSogYmJxQ2FsbGVlID0gbV9jb2RlQmxvY2stPm1f
YmJxQ2FsbGVlc1tpXS5nZXQoKSkgeworICAgICAgICAgICAgICAgIGlmIChPTUdDYWxsZWUqIHJl
cGxhY2VtZW50Q2FsbGVlID0gYmJxQ2FsbGVlLT5yZXBsYWNlbWVudCgpKQorICAgICAgICAgICAg
ICAgICAgICBzdGFnZVJlcGF0Y2gocmVwbGFjZW1lbnRDYWxsZWUtPndhc21Ub1dhc21DYWxsc2l0
ZXMoKSk7CisgICAgICAgICAgICAgICAgaWYgKE9NR0Zvck9TUkVudHJ5Q2FsbGVlKiBvc3JFbnRy
eUNhbGxlZSA9IGJicUNhbGxlZS0+b3NyRW50cnlDYWxsZWUoKSkKKyAgICAgICAgICAgICAgICAg
ICAgc3RhZ2VSZXBhdGNoKG9zckVudHJ5Q2FsbGVlLT53YXNtVG9XYXNtQ2FsbHNpdGVzKCkpOwor
ICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgLy8gSXQncyBpbXBvcnRhbnQgdG8g
bWFrZSBzdXJlIHdlIGRvIHRoaXMgYmVmb3JlIHdlIG1ha2UgYW55IG9mIHRoZSBjb2RlIHdlIGp1
c3QgY29tcGlsZWQgdmlzaWJsZS4gSWYgd2UgZGlkbid0LCB3ZSBjb3VsZCBlbmQgdXAKKyAgICAg
ICAgLy8gd2hlcmUgd2UgYXJlIHRpZXJpbmcgdXAgc29tZSBmdW5jdGlvbiBBIHRvIEEnIGFuZCB3
ZSByZXBhdGNoIHNvbWUgZnVuY3Rpb24gQiB0byBjYWxsIEEnIGluc3RlYWQgb2YgQS4gQW5vdGhl
ciBDUFUgY291bGQgc2VlCisgICAgICAgIC8vIHRoZSB1cGRhdGVzIHRvIEIgYnV0IHN0aWxsIG5v
dCBoYXZlIHJlc2V0IGl0cyBjYWNoZSBvZiBBJywgd2hpY2ggd291bGQgbGVhZCB0byBhbGwga2lu
ZHMgb2YgYmFkbmVzcy4KKyAgICAgICAgcmVzZXRJbnN0cnVjdGlvbkNhY2hlT25BbGxUaHJlYWRz
KCk7CisgICAgICAgIFdURjo6c3RvcmVTdG9yZUZlbmNlKCk7IC8vIFRoaXMgcHJvYmFibHkgaXNu
J3QgbmVjZXNzYXJ5IGJ1dCBpdCdzIGdvb2QgdG8gYmUgcGFyYW5vaWQuCiAKLSAgICBtX2NvZGVC
bG9jay0+bV93YXNtSW5kaXJlY3RDYWxsRW50cnlQb2ludHNbbV9mdW5jdGlvbkluZGV4XSA9IGVu
dHJ5cG9pbnQ7Ci0gICAgewotICAgICAgICBMb2NrSG9sZGVyIGhvbGRlcihtX2NvZGVCbG9jay0+
bV9sb2NrKTsKKyAgICAgICAgbV9jb2RlQmxvY2stPm1fd2FzbUluZGlyZWN0Q2FsbEVudHJ5UG9p
bnRzW21fZnVuY3Rpb25JbmRleF0gPSBlbnRyeXBvaW50OwogCiAgICAgICAgIGF1dG8gcmVwYXRj
aENhbGxzID0gWyZdIChjb25zdCBWZWN0b3I8VW5saW5rZWRXYXNtVG9XYXNtQ2FsbD4mIGNhbGxz
aXRlcykgewogICAgICAgICAgICAgZm9yIChhdXRvJiBjYWxsIDogY2FsbHNpdGVzKSB7CiAgICAg
ICAgICAgICAgICAgZGF0YUxvZ0xuSWYoV2FzbU9NR1BsYW5JbnRlcm5hbDo6dmVyYm9zZSwgIkNv
bnNpZGVyaW5nIHJlcGF0Y2hpbmcgY2FsbCBhdDogIiwgUmF3UG9pbnRlcihjYWxsLmNhbGxMb2Nh
dGlvbi5kYXRhTG9jYXRpb24oKSksICIgdGhhdCB0YXJnZXRzICIsIGNhbGwuZnVuY3Rpb25JbmRl
eFNwYWNlKTsKICAgICAgICAgICAgICAgICBpZiAoY2FsbC5mdW5jdGlvbkluZGV4U3BhY2UgPT0g
ZnVuY3Rpb25JbmRleFNwYWNlKSB7CiAgICAgICAgICAgICAgICAgICAgIGRhdGFMb2dMbklmKFdh
c21PTUdQbGFuSW50ZXJuYWw6OnZlcmJvc2UsICJSZXBhdGNoaW5nIGNhbGwgYXQ6ICIsIFJhd1Bv
aW50ZXIoY2FsbC5jYWxsTG9jYXRpb24uZGF0YUxvY2F0aW9uKCkpLCAiIHRvICIsIFJhd1BvaW50
ZXIoZW50cnlwb2ludC5leGVjdXRhYmxlQWRkcmVzcygpKSk7Ci0gICAgICAgICAgICAgICAgICAg
IE1hY3JvQXNzZW1ibGVyOjpyZXBhdGNoTmVhckNhbGwoY2FsbC5jYWxsTG9jYXRpb24sIENvZGVM
b2NhdGlvbkxhYmVsPFdhc21FbnRyeVB0clRhZz4oZW50cnlwb2ludCkpOworICAgICAgICAgICAg
ICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6cmVwYXRjaE5lYXJDYWxsKGNhbGwuY2FsbExvY2F0aW9u
LCBzdGFnZWRDYWxscy5nZXQoY2FsbC5jYWxsTG9jYXRpb24uZGF0YUxvY2F0aW9uKCkpKTsKICAg
ICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CiAgICAgICAgIH07CkBAIC0xNzUsNiArMTg3
LDIwIEBAIHZvaWQgT01HUGxhbjo6d29yayhDb21waWxhdGlvbkVmZm9ydCkKICAgICAgICAgICAg
ICAgICAgICAgcmVwYXRjaENhbGxzKG9zckVudHJ5Q2FsbGVlLT53YXNtVG9XYXNtQ2FsbHNpdGVz
KCkpOwogICAgICAgICAgICAgfQogICAgICAgICB9CisKKyAgICAgICAgeworICAgICAgICAgICAg
aWYgKEJCUUNhbGxlZSogYmJxQ2FsbGVlID0gbV9jb2RlQmxvY2stPm1fYmJxQ2FsbGVlc1ttX2Z1
bmN0aW9uSW5kZXhdLmdldCgpKSB7CisgICAgICAgICAgICAgICAgYXV0byBsb2NrZXIgPSBob2xk
TG9jayhiYnFDYWxsZWUtPnRpZXJVcENvdW50KCktPmdldExvY2soKSk7CisgICAgICAgICAgICAg
ICAgYmJxQ2FsbGVlLT5zZXRSZXBsYWNlbWVudChjYWxsZWUuY29weVJlZigpKTsKKyAgICAgICAg
ICAgICAgICBiYnFDYWxsZWUtPnRpZXJVcENvdW50KCktPm1fY29tcGlsYXRpb25TdGF0dXNGb3JP
TUcgPSBUaWVyVXBDb3VudDo6Q29tcGlsYXRpb25TdGF0dXM6OkNvbXBpbGVkOworICAgICAgICAg
ICAgfQorICAgICAgICAgICAgaWYgKG1fY29kZUJsb2NrLT5tX2xsaW50Q2FsbGVlcykgeworICAg
ICAgICAgICAgICAgIExMSW50Q2FsbGVlJiBsbGludENhbGxlZSA9IG1fY29kZUJsb2NrLT5tX2xs
aW50Q2FsbGVlcy0+YXQobV9mdW5jdGlvbkluZGV4KS5nZXQoKTsKKyAgICAgICAgICAgICAgICBh
dXRvIGxvY2tlciA9IGhvbGRMb2NrKGxsaW50Q2FsbGVlLnRpZXJVcENvdW50ZXIoKS5tX2xvY2sp
OworICAgICAgICAgICAgICAgIGxsaW50Q2FsbGVlLnNldFJlcGxhY2VtZW50KGNhbGxlZS5jb3B5
UmVmKCkpOworICAgICAgICAgICAgICAgIGxsaW50Q2FsbGVlLnRpZXJVcENvdW50ZXIoKS5tX2Nv
bXBpbGF0aW9uU3RhdHVzID0gTExJbnRUaWVyVXBDb3VudGVyOjpDb21waWxhdGlvblN0YXR1czo6
Q29tcGlsZWQ7CisgICAgICAgICAgICB9CisgICAgICAgIH0KICAgICB9CiAKICAgICBkYXRhTG9n
TG5JZihXYXNtT01HUGxhbkludGVybmFsOjp2ZXJib3NlLCAiRmluaXNoZWQgT01HICIsIG1fZnVu
Y3Rpb25JbmRleCk7CkluZGV4OiBTb3VyY2UvV1RGL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV1RGL0NoYW5nZUxvZwkocmV2aXNpb24gMjU4MzUwKQorKysgU291cmNlL1dURi9DaGFu
Z2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwzNSBAQAorMjAyMC0wMy0xMiAgU2FhbSBC
YXJhdGkgIDxzYmFyYXRpQGFwcGxlLmNvbT4KKworICAgICAgICBJbXBsZW1lbnQgMUdCIG9mIGV4
ZWN1dGFibGUgbWVtb3J5IG9uIGFybTY0CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0yMDg0OTAKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICAqIHd0Zi9NZXRhQWxsb2NhdG9yLmNwcDoKKyAgICAgICAgKFdURjo6
TWV0YUFsbG9jYXRvclRyYWNrZXI6Om5vdGlmeSk6CisgICAgICAgIChXVEY6Ok1ldGFBbGxvY2F0
b3JUcmFja2VyOjpyZWxlYXNlKToKKyAgICAgICAgKFdURjo6TWV0YUFsbG9jYXRvcjo6cmVsZWFz
ZSk6CisgICAgICAgIChXVEY6Ok1ldGFBbGxvY2F0b3JIYW5kbGU6Ok1ldGFBbGxvY2F0b3JIYW5k
bGUpOgorICAgICAgICAoV1RGOjpNZXRhQWxsb2NhdG9ySGFuZGxlOjp+TWV0YUFsbG9jYXRvckhh
bmRsZSk6CisgICAgICAgIChXVEY6Ok1ldGFBbGxvY2F0b3JIYW5kbGU6OnNocmluayk6CisgICAg
ICAgIChXVEY6Ok1ldGFBbGxvY2F0b3I6Ok1ldGFBbGxvY2F0b3IpOgorICAgICAgICAoV1RGOjpN
ZXRhQWxsb2NhdG9yOjphbGxvY2F0ZSk6CisgICAgICAgIChXVEY6Ok1ldGFBbGxvY2F0b3I6OmN1
cnJlbnRTdGF0aXN0aWNzKToKKyAgICAgICAgKiB3dGYvTWV0YUFsbG9jYXRvci5oOgorICAgICAg
ICAoV1RGOjpNZXRhQWxsb2NhdG9yVHJhY2tlcjo6ZmluZCk6CisgICAgICAgIChXVEY6Ok1ldGFB
bGxvY2F0b3I6OmFsbG9jYXRlKToKKyAgICAgICAgKFdURjo6TWV0YUFsbG9jYXRvcjo6Y3VycmVu
dFN0YXRpc3RpY3MpOgorICAgICAgICAoV1RGOjpNZXRhQWxsb2NhdG9yOjpnZXRMb2NrKTogRGVs
ZXRlZC4KKyAgICAgICAgKiB3dGYvTWV0YUFsbG9jYXRvckhhbmRsZS5oOgorICAgICAgICAoV1RG
OjpNZXRhQWxsb2NhdG9ySGFuZGxlOjphbGxvY2F0b3IpOgorICAgICAgICAoV1RGOjpNZXRhQWxs
b2NhdG9ySGFuZGxlOjppc01hbmFnZWQpOiBEZWxldGVkLgorICAgICAgICAoV1RGOjpNZXRhQWxs
b2NhdG9ySGFuZGxlOjpvd25lclVJRCk6IERlbGV0ZWQuCisgICAgICAgICogd3RmL1BsYXRmb3Jt
VXNlLmg6CisgICAgICAgICogd3RmL1JlZEJsYWNrVHJlZS5oOgorICAgICAgICAqIHd0Zi9TdGRM
aWJFeHRyYXMuaDoKKyAgICAgICAgKFdURjo6Y29uc3RydWN0Rml4ZWRTaXplQXJyYXlXaXRoQXJn
dW1lbnRzSW1wbCk6CisgICAgICAgIChXVEY6OmNvbnN0cnVjdEZpeGVkU2l6ZUFycmF5V2l0aEFy
Z3VtZW50cyk6CisKIDIwMjAtMDMtMTEgIEplciBOb2JsZSAgPGplci5ub2JsZUBhcHBsZS5jb20+
CiAKICAgICAgICAgQWRvcHQgQVZTYW1wbGVCdWZmZXJWaWRlb091dHB1dApJbmRleDogU291cmNl
L1dURi93dGYvTWV0YUFsbG9jYXRvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYv
TWV0YUFsbG9jYXRvci5jcHAJKHJldmlzaW9uIDI1ODM1MCkKKysrIFNvdXJjZS9XVEYvd3RmL01l
dGFBbGxvY2F0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01NCwyMiArNTQsMjEgQEAgTWV0YUFs
bG9jYXRvcjo6fk1ldGFBbGxvY2F0b3IoKQogI2VuZGlmCiB9CiAKLXZvaWQgTWV0YUFsbG9jYXRv
clRyYWNrZXI6Om5vdGlmeShNZXRhQWxsb2NhdG9ySGFuZGxlKiBoYW5kbGUpCit2b2lkIE1ldGFB
bGxvY2F0b3JUcmFja2VyOjpub3RpZnkoTWV0YUFsbG9jYXRvckhhbmRsZSYgaGFuZGxlKQogewot
ICAgIG1fYWxsb2NhdGlvbnMuaW5zZXJ0KGhhbmRsZSk7CisgICAgbV9hbGxvY2F0aW9ucy5pbnNl
cnQoJmhhbmRsZSk7CiB9CiAKLXZvaWQgTWV0YUFsbG9jYXRvclRyYWNrZXI6OnJlbGVhc2UoTWV0
YUFsbG9jYXRvckhhbmRsZSogaGFuZGxlKQordm9pZCBNZXRhQWxsb2NhdG9yVHJhY2tlcjo6cmVs
ZWFzZShNZXRhQWxsb2NhdG9ySGFuZGxlJiBoYW5kbGUpCiB7Ci0gICAgbV9hbGxvY2F0aW9ucy5y
ZW1vdmUoaGFuZGxlKTsKKyAgICBtX2FsbG9jYXRpb25zLnJlbW92ZSgmaGFuZGxlKTsKIH0KIAot
QUxXQVlTX0lOTElORSB2b2lkIE1ldGFBbGxvY2F0b3I6OnJlbGVhc2UoTWV0YUFsbG9jYXRvckhh
bmRsZSogaGFuZGxlKQordm9pZCBNZXRhQWxsb2NhdG9yOjpyZWxlYXNlKGNvbnN0IExvY2tIb2xk
ZXImLCBNZXRhQWxsb2NhdG9ySGFuZGxlJiBoYW5kbGUpCiB7Ci0gICAgTG9ja0hvbGRlciBsb2Nr
ZXIoJm1fbG9jayk7Ci0gICAgaWYgKGhhbmRsZS0+c2l6ZUluQnl0ZXMoKSkgewotICAgICAgICB2
b2lkKiBzdGFydCA9IGhhbmRsZS0+c3RhcnQoKS51bnRhZ2dlZFB0cigpOwotICAgICAgICBzaXpl
X3Qgc2l6ZUluQnl0ZXMgPSBoYW5kbGUtPnNpemVJbkJ5dGVzKCk7CisgICAgaWYgKGhhbmRsZS5z
aXplSW5CeXRlcygpKSB7CisgICAgICAgIHZvaWQqIHN0YXJ0ID0gaGFuZGxlLnN0YXJ0KCkudW50
YWdnZWRQdHIoKTsKKyAgICAgICAgc2l6ZV90IHNpemVJbkJ5dGVzID0gaGFuZGxlLnNpemVJbkJ5
dGVzKCk7CiAgICAgICAgIGRlY3JlbWVudFBhZ2VPY2N1cGFuY3koc3RhcnQsIHNpemVJbkJ5dGVz
KTsKICAgICAgICAgYWRkRnJlZVNwYWNlRnJvbVJlbGVhc2VkSGFuZGxlKEZyZWVTcGFjZVB0cihz
dGFydCksIHNpemVJbkJ5dGVzKTsKICAgICB9CkBAIC03OCwyMSArNzcsMTkgQEAgQUxXQVlTX0lO
TElORSB2b2lkIE1ldGFBbGxvY2F0b3I6OnJlbGVhcwogICAgICAgICBtX3RyYWNrZXItPnJlbGVh
c2UoaGFuZGxlKTsKIH0KIAotTWV0YUFsbG9jYXRvckhhbmRsZTo6TWV0YUFsbG9jYXRvckhhbmRs
ZShNZXRhQWxsb2NhdG9yKiBhbGxvY2F0b3IsIHZvaWQqIHN0YXJ0LCBzaXplX3Qgc2l6ZUluQnl0
ZXMsIHZvaWQqIG93bmVyVUlEKQorTWV0YUFsbG9jYXRvckhhbmRsZTo6TWV0YUFsbG9jYXRvckhh
bmRsZShNZXRhQWxsb2NhdG9yJiBhbGxvY2F0b3IsIHZvaWQqIHN0YXJ0LCBzaXplX3Qgc2l6ZUlu
Qnl0ZXMpCiAgICAgOiBtX2FsbG9jYXRvcihhbGxvY2F0b3IpCiAgICAgLCBtX3N0YXJ0KHN0YXJ0
KQogICAgICwgbV9lbmQocmVpbnRlcnByZXRfY2FzdDxjaGFyKj4oc3RhcnQpICsgc2l6ZUluQnl0
ZXMpCi0gICAgLCBtX293bmVyVUlEKG93bmVyVUlEKQogewotICAgIEFTU0VSVChhbGxvY2F0b3Ip
OwogICAgIEFTU0VSVChzdGFydCk7CiAgICAgQVNTRVJUKHNpemVJbkJ5dGVzKTsKIH0KIAogTWV0
YUFsbG9jYXRvckhhbmRsZTo6fk1ldGFBbGxvY2F0b3JIYW5kbGUoKQogewotICAgIEFTU0VSVCht
X2FsbG9jYXRvcik7Ci0gICAgbV9hbGxvY2F0b3ItPnJlbGVhc2UodGhpcyk7CisgICAgYXV0byBs
b2NrZXIgPSBob2xkTG9jayhhbGxvY2F0b3IoKS5tX2xvY2spOworICAgIGFsbG9jYXRvcigpLnJl
bGVhc2UobG9ja2VyLCAqdGhpcyk7CiB9CiAKIHZvaWQgTWV0YUFsbG9jYXRvckhhbmRsZTo6c2hy
aW5rKHNpemVfdCBuZXdTaXplSW5CeXRlcykKQEAgLTEwMCw5ICs5NywxMCBAQCB2b2lkIE1ldGFB
bGxvY2F0b3JIYW5kbGU6OnNocmluayhzaXplX3QgCiAgICAgc2l6ZV90IHNpemVJbkJ5dGVzID0g
dGhpcy0+c2l6ZUluQnl0ZXMoKTsKICAgICBBU1NFUlQobmV3U2l6ZUluQnl0ZXMgPD0gc2l6ZUlu
Qnl0ZXMpOwogCi0gICAgTG9ja0hvbGRlciBsb2NrZXIoJm1fYWxsb2NhdG9yLT5tX2xvY2spOwor
ICAgIE1ldGFBbGxvY2F0b3ImIGFsbG9jYXRvciA9IHRoaXMtPmFsbG9jYXRvcigpOworICAgIExv
Y2tIb2xkZXIgbG9ja2VyKCZhbGxvY2F0b3IubV9sb2NrKTsKIAotICAgIG5ld1NpemVJbkJ5dGVz
ID0gbV9hbGxvY2F0b3ItPnJvdW5kVXAobmV3U2l6ZUluQnl0ZXMpOworICAgIG5ld1NpemVJbkJ5
dGVzID0gYWxsb2NhdG9yLnJvdW5kVXAobmV3U2l6ZUluQnl0ZXMpOwogICAgIAogICAgIEFTU0VS
VChuZXdTaXplSW5CeXRlcyA8PSBzaXplSW5CeXRlcyk7CiAKQEAgLTExMywxMSArMTExLDExIEBA
IHZvaWQgTWV0YUFsbG9jYXRvckhhbmRsZTo6c2hyaW5rKHNpemVfdCAKICAgICBzaXplX3QgZnJl
ZVNpemUgPSBzaXplSW5CeXRlcyAtIG5ld1NpemVJbkJ5dGVzOwogICAgIHVpbnRwdHJfdCBmcmVl
RW5kID0gZnJlZVN0YXJ0ICsgZnJlZVNpemU7CiAgICAgCi0gICAgdWludHB0cl90IGZpcnN0Q29t
cGxldGVseUZyZWVQYWdlID0gKGZyZWVTdGFydCArIG1fYWxsb2NhdG9yLT5tX3BhZ2VTaXplIC0g
MSkgJiB+KG1fYWxsb2NhdG9yLT5tX3BhZ2VTaXplIC0gMSk7CisgICAgdWludHB0cl90IGZpcnN0
Q29tcGxldGVseUZyZWVQYWdlID0gKGZyZWVTdGFydCArIGFsbG9jYXRvci5tX3BhZ2VTaXplIC0g
MSkgJiB+KGFsbG9jYXRvci5tX3BhZ2VTaXplIC0gMSk7CiAgICAgaWYgKGZpcnN0Q29tcGxldGVs
eUZyZWVQYWdlIDwgZnJlZUVuZCkKLSAgICAgICAgbV9hbGxvY2F0b3ItPmRlY3JlbWVudFBhZ2VP
Y2N1cGFuY3kocmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oZmlyc3RDb21wbGV0ZWx5RnJlZVBhZ2Up
LCBmcmVlU2l6ZSAtIChmaXJzdENvbXBsZXRlbHlGcmVlUGFnZSAtIGZyZWVTdGFydCkpOworICAg
ICAgICBhbGxvY2F0b3IuZGVjcmVtZW50UGFnZU9jY3VwYW5jeShyZWludGVycHJldF9jYXN0PHZv
aWQqPihmaXJzdENvbXBsZXRlbHlGcmVlUGFnZSksIGZyZWVTaXplIC0gKGZpcnN0Q29tcGxldGVs
eUZyZWVQYWdlIC0gZnJlZVN0YXJ0KSk7CiAKLSAgICBtX2FsbG9jYXRvci0+YWRkRnJlZVNwYWNl
RnJvbVJlbGVhc2VkSGFuZGxlKE1ldGFBbGxvY2F0b3I6OkZyZWVTcGFjZVB0cihmcmVlU3RhcnQp
LCBmcmVlU2l6ZSk7CisgICAgYWxsb2NhdG9yLmFkZEZyZWVTcGFjZUZyb21SZWxlYXNlZEhhbmRs
ZShNZXRhQWxsb2NhdG9yOjpGcmVlU3BhY2VQdHIoZnJlZVN0YXJ0KSwgZnJlZVNpemUpOwogCiAg
ICAgbV9lbmQgPSBtX3N0YXJ0ICsgbmV3U2l6ZUluQnl0ZXM7CiB9CkBAIC0xMjcsMTMgKzEyNSwx
MyBAQCB2b2lkIE1ldGFBbGxvY2F0b3JIYW5kbGU6OmR1bXAoUHJpbnRTdHJlCiAgICAgb3V0LnBy
aW50KFJhd1BvaW50ZXIoc3RhcnQoKS51bnRhZ2dlZFB0cigpKSwgIi4uLiIsIFJhd1BvaW50ZXIo
ZW5kKCkudW50YWdnZWRQdHIoKSkpOwogfQogCi1NZXRhQWxsb2NhdG9yOjpNZXRhQWxsb2NhdG9y
KHNpemVfdCBhbGxvY2F0aW9uR3JhbnVsZSwgc2l6ZV90IHBhZ2VTaXplKQorTWV0YUFsbG9jYXRv
cjo6TWV0YUFsbG9jYXRvcihMb2NrJiBsb2NrLCBzaXplX3QgYWxsb2NhdGlvbkdyYW51bGUsIHNp
emVfdCBwYWdlU2l6ZSkKICAgICA6IG1fYWxsb2NhdGlvbkdyYW51bGUoYWxsb2NhdGlvbkdyYW51
bGUpCiAgICAgLCBtX3BhZ2VTaXplKHBhZ2VTaXplKQogICAgICwgbV9ieXRlc0FsbG9jYXRlZCgw
KQogICAgICwgbV9ieXRlc1Jlc2VydmVkKDApCiAgICAgLCBtX2J5dGVzQ29tbWl0dGVkKDApCi0g
ICAgLCBtX3RyYWNrZXIoMCkKKyAgICAsIG1fbG9jayhsb2NrKQogI2lmbmRlZiBOREVCVUcKICAg
ICAsIG1fbWFsbG9jQmFsYW5jZSgwKQogI2VuZGlmCkBAIC0xNTcsMTAgKzE1NSw4IEBAIE1ldGFB
bGxvY2F0b3I6Ok1ldGFBbGxvY2F0b3Ioc2l6ZV90IGFsbG8KICAgICBBU1NFUlQoc3RhdGljX2Nh
c3Q8c2l6ZV90PigxKSA8PCBtX2xvZ0FsbG9jYXRpb25HcmFudWxlID09IG1fYWxsb2NhdGlvbkdy
YW51bGUpOwogfQogCi1SZWZQdHI8TWV0YUFsbG9jYXRvckhhbmRsZT4gTWV0YUFsbG9jYXRvcjo6
YWxsb2NhdGUoc2l6ZV90IHNpemVJbkJ5dGVzLCB2b2lkKiBvd25lclVJRCkKK1JlZlB0cjxNZXRh
QWxsb2NhdG9ySGFuZGxlPiBNZXRhQWxsb2NhdG9yOjphbGxvY2F0ZShjb25zdCBMb2NrSG9sZGVy
Jiwgc2l6ZV90IHNpemVJbkJ5dGVzKQogewotICAgIExvY2tIb2xkZXIgbG9ja2VyKCZtX2xvY2sp
OwotCiAgICAgaWYgKCFzaXplSW5CeXRlcykKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAg
CkBAIC0xOTUsMTcgKzE5MSwxNiBAQCBSZWZQdHI8TWV0YUFsbG9jYXRvckhhbmRsZT4gTWV0YUFs
bG9jYXRvCiAgICAgbV9udW1BbGxvY2F0aW9ucysrOwogI2VuZGlmCiAKLSAgICBhdXRvIGhhbmRs
ZSA9IGFkb3B0UmVmKCpuZXcgTWV0YUFsbG9jYXRvckhhbmRsZSh0aGlzLCBzdGFydC51bnRhZ2dl
ZFB0cigpLCBzaXplSW5CeXRlcywgb3duZXJVSUQpKTsKKyAgICBhdXRvIGhhbmRsZSA9IGFkb3B0
UmVmKCpuZXcgTWV0YUFsbG9jYXRvckhhbmRsZSgqdGhpcywgc3RhcnQudW50YWdnZWRQdHIoKSwg
c2l6ZUluQnl0ZXMpKTsKIAogICAgIGlmIChVTkxJS0VMWSghIW1fdHJhY2tlcikpCi0gICAgICAg
IG1fdHJhY2tlci0+bm90aWZ5KGhhbmRsZS5wdHIoKSk7CisgICAgICAgIG1fdHJhY2tlci0+bm90
aWZ5KCpoYW5kbGUucHRyKCkpOwogCiAgICAgcmV0dXJuIGhhbmRsZTsKIH0KIAotTWV0YUFsbG9j
YXRvcjo6U3RhdGlzdGljcyBNZXRhQWxsb2NhdG9yOjpjdXJyZW50U3RhdGlzdGljcygpCitNZXRh
QWxsb2NhdG9yOjpTdGF0aXN0aWNzIE1ldGFBbGxvY2F0b3I6OmN1cnJlbnRTdGF0aXN0aWNzKGNv
bnN0IExvY2tIb2xkZXImKQogewotICAgIExvY2tIb2xkZXIgbG9ja2VyKCZtX2xvY2spOwogICAg
IFN0YXRpc3RpY3MgcmVzdWx0OwogICAgIHJlc3VsdC5ieXRlc0FsbG9jYXRlZCA9IG1fYnl0ZXNB
bGxvY2F0ZWQ7CiAgICAgcmVzdWx0LmJ5dGVzUmVzZXJ2ZWQgPSBtX2J5dGVzUmVzZXJ2ZWQ7Cklu
ZGV4OiBTb3VyY2UvV1RGL3d0Zi9NZXRhQWxsb2NhdG9yLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dURi93dGYvTWV0YUFsbG9jYXRvci5oCShyZXZpc2lvbiAyNTgzNTApCisrKyBTb3VyY2UvV1RG
L3d0Zi9NZXRhQWxsb2NhdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ0LDE1ICs0NCwxNSBAQCBu
YW1lc3BhY2UgV1RGIHsKIGNsYXNzIE1ldGFBbGxvY2F0b3JUcmFja2VyIHsKICAgICBXVEZfTUFL
RV9GQVNUX0FMTE9DQVRFRDsKIHB1YmxpYzoKLSAgICB2b2lkIG5vdGlmeShNZXRhQWxsb2NhdG9y
SGFuZGxlKik7Ci0gICAgdm9pZCByZWxlYXNlKE1ldGFBbGxvY2F0b3JIYW5kbGUqKTsKKyAgICB2
b2lkIG5vdGlmeShNZXRhQWxsb2NhdG9ySGFuZGxlJik7CisgICAgdm9pZCByZWxlYXNlKE1ldGFB
bGxvY2F0b3JIYW5kbGUmKTsKIAogICAgIE1ldGFBbGxvY2F0b3JIYW5kbGUqIGZpbmQodm9pZCog
YWRkcmVzcykKICAgICB7CiAgICAgICAgIE1ldGFBbGxvY2F0b3JIYW5kbGUqIGhhbmRsZSA9IG1f
YWxsb2NhdGlvbnMuZmluZEdyZWF0ZXN0TGVzc1RoYW5PckVxdWFsKGFkZHJlc3MpOwotICAgICAg
ICBpZiAoaGFuZGxlICYmIGFkZHJlc3MgPCBoYW5kbGUtPmVuZCgpLnVudGFnZ2VkUHRyKCkpCisg
ICAgICAgIGlmIChoYW5kbGUgJiYgaGFuZGxlLT5zdGFydCgpLnVudGFnZ2VkUHRyKCkgPD0gYWRk
cmVzcyAmJiBhZGRyZXNzIDwgaGFuZGxlLT5lbmQoKS51bnRhZ2dlZFB0cigpKQogICAgICAgICAg
ICAgcmV0dXJuIGhhbmRsZTsKLSAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIHJldHVybiBudWxs
cHRyOwogICAgIH0KIAogICAgIFJlZEJsYWNrVHJlZTxNZXRhQWxsb2NhdG9ySGFuZGxlLCB2b2lk
Kj4gbV9hbGxvY2F0aW9uczsKQEAgLTY0LDE3ICs2NCwyMiBAQCBjbGFzcyBNZXRhQWxsb2NhdG9y
IHsKIHB1YmxpYzoKICAgICB1c2luZyBGcmVlU3BhY2VQdHIgPSBNZXRhQWxsb2NhdG9yUHRyPEZy
ZWVTcGFjZVB0clRhZz47CiAKLSAgICBXVEZfRVhQT1JUX1BSSVZBVEUgTWV0YUFsbG9jYXRvcihz
aXplX3QgYWxsb2NhdGlvbkdyYW51bGUsIHNpemVfdCBwYWdlU2l6ZSA9IFdURjo6cGFnZVNpemUo
KSk7CisgICAgV1RGX0VYUE9SVF9QUklWQVRFIE1ldGFBbGxvY2F0b3IoTG9jayYsIHNpemVfdCBh
bGxvY2F0aW9uR3JhbnVsZSwgc2l6ZV90IHBhZ2VTaXplID0gV1RGOjpwYWdlU2l6ZSgpKTsKICAg
ICAKICAgICBXVEZfRVhQT1JUX1BSSVZBVEUgdmlydHVhbCB+TWV0YUFsbG9jYXRvcigpOwogICAg
IAotICAgIFdURl9FWFBPUlRfUFJJVkFURSBSZWZQdHI8TWV0YUFsbG9jYXRvckhhbmRsZT4gYWxs
b2NhdGUoc2l6ZV90IHNpemVJbkJ5dGVzLCB2b2lkKiBvd25lclVJRCk7CisgICAgUmVmUHRyPE1l
dGFBbGxvY2F0b3JIYW5kbGU+IGFsbG9jYXRlKHNpemVfdCBzaXplSW5CeXRlcykKKyAgICB7Cisg
ICAgICAgIGF1dG8gbG9ja2VyID0gaG9sZExvY2sobV9sb2NrKTsKKyAgICAgICAgcmV0dXJuIGFs
bG9jYXRlKGxvY2tlciwgc2l6ZUluQnl0ZXMpOworICAgIH0KKyAgICBXVEZfRVhQT1JUX1BSSVZB
VEUgUmVmUHRyPE1ldGFBbGxvY2F0b3JIYW5kbGU+IGFsbG9jYXRlKGNvbnN0IExvY2tIb2xkZXIm
LCBzaXplX3Qgc2l6ZUluQnl0ZXMpOwogCiAgICAgdm9pZCB0cmFja0FsbG9jYXRpb25zKE1ldGFB
bGxvY2F0b3JUcmFja2VyKiB0cmFja2VyKQogICAgIHsKICAgICAgICAgbV90cmFja2VyID0gdHJh
Y2tlcjsKICAgICB9Ci0gICAgCisKICAgICAvLyBOb24tYXRvbWljIG1ldGhvZHMgZm9yIGdldHRp
bmcgYWxsb2NhdG9yIHN0YXRpc3RpY3MuCiAgICAgc2l6ZV90IGJ5dGVzQWxsb2NhdGVkKCkgeyBy
ZXR1cm4gbV9ieXRlc0FsbG9jYXRlZDsgfQogICAgIHNpemVfdCBieXRlc1Jlc2VydmVkKCkgeyBy
ZXR1cm4gbV9ieXRlc1Jlc2VydmVkOyB9CkBAIC04Nyw3ICs5MiwxMiBAQCBwdWJsaWM6CiAgICAg
ICAgIHNpemVfdCBieXRlc1Jlc2VydmVkOwogICAgICAgICBzaXplX3QgYnl0ZXNDb21taXR0ZWQ7
CiAgICAgfTsKLSAgICBXVEZfRVhQT1JUX1BSSVZBVEUgU3RhdGlzdGljcyBjdXJyZW50U3RhdGlz
dGljcygpOworICAgIFN0YXRpc3RpY3MgY3VycmVudFN0YXRpc3RpY3MoKQorICAgIHsKKyAgICAg
ICAgYXV0byBsb2NrZXIgPSBob2xkTG9jayhtX2xvY2spOworICAgICAgICByZXR1cm4gY3VycmVu
dFN0YXRpc3RpY3MobG9ja2VyKTsKKyAgICB9CisgICAgV1RGX0VYUE9SVF9QUklWQVRFIFN0YXRp
c3RpY3MgY3VycmVudFN0YXRpc3RpY3MoY29uc3QgTG9ja0hvbGRlciYpOwogCiAgICAgLy8gQWRk
IG1vcmUgZnJlZSBzcGFjZSB0byB0aGUgYWxsb2NhdG9yLiBDYWxsIHRoaXMgZGlyZWN0bHkgZnJv
bQogICAgIC8vIHRoZSBjb25zdHJ1Y3RvciBpZiB5b3Ugd2lzaCB0byBvcGVyYXRlIHRoZSBhbGxv
Y2F0b3Igd2l0aGluIGEKQEAgLTk4LDcgKzEwOCw2IEBAIHB1YmxpYzoKICAgICAvLyBidWlsZHMu
CiAgICAgV1RGX0VYUE9SVF9QUklWQVRFIHNpemVfdCBkZWJ1Z0ZyZWVTcGFjZVNpemUoKTsKIAot
ICAgIExvY2smIGdldExvY2soKSB7IHJldHVybiBtX2xvY2s7IH0KICAgICBXVEZfRVhQT1JUX1BS
SVZBVEUgYm9vbCBpc0luQWxsb2NhdGVkTWVtb3J5KGNvbnN0IEFic3RyYWN0TG9ja2VyJiwgdm9p
ZCogYWRkcmVzcyk7CiAgICAgCiAjaWYgRU5BQkxFKE1FVEFfQUxMT0NBVE9SX1BST0ZJTEUpCkBA
IC0xMjMsNiArMTMyLDggQEAgcHJvdGVjdGVkOgogICAgIC8vIGRlc3RydWN0aW9uLCBpbiBwYXJ0
IGJlY2F1c2UgYSBNZXRhQWxsb2NhdG9yIGNhbm5vdCBkaWUgc28gbG9uZwogICAgIC8vIGFzIHRo
ZXJlIGFyZSBIYW5kbGVzIHRoYXQgcmVmZXIgdG8gaXQuCiAKKyAgICAvLyBSZWxlYXNlIGEgTWV0
YUFsbG9jYXRvckhhbmRsZS4KKyAgICB2aXJ0dWFsIHZvaWQgcmVsZWFzZShjb25zdCBMb2NrSG9s
ZGVyJiwgTWV0YUFsbG9jYXRvckhhbmRsZSYpOwogcHJpdmF0ZToKICAgICAKICAgICBmcmllbmQg
Y2xhc3MgTWV0YUFsbG9jYXRvckhhbmRsZTsKQEAgLTE1MCw5ICsxNjEsNiBAQCBwcml2YXRlOgog
ICAgICAgICBGcmVlU3BhY2VQdHIgbV9lbmQ7CiAgICAgfTsKICAgICB0eXBlZGVmIFJlZEJsYWNr
VHJlZTxGcmVlU3BhY2VOb2RlLCBzaXplX3Q+IFRyZWU7Ci0KLSAgICAvLyBSZWxlYXNlIGEgTWV0
YUFsbG9jYXRvckhhbmRsZS4KLSAgICB2b2lkIHJlbGVhc2UoTWV0YUFsbG9jYXRvckhhbmRsZSop
OwogICAgIAogICAgIC8vIFJlbW92ZSBmcmVlIHNwYWNlIGZyb20gdGhlIGFsbG9jYXRvci4gVGhp
cyBpcyBlZmZlY3RpdmVseQogICAgIC8vIHRoZSBhbGxvY2F0ZSgpIGZ1bmN0aW9uLCBleGNlcHQg
dGhhdCBpdCBkb2VzIG5vdCBtYXJrIHRoZQpAQCAtMTkzLDkgKzIwMSw5IEBAIHByaXZhdGU6CiAg
ICAgc2l6ZV90IG1fYnl0ZXNSZXNlcnZlZDsKICAgICBzaXplX3QgbV9ieXRlc0NvbW1pdHRlZDsK
ICAgICAKLSAgICBMb2NrIG1fbG9jazsKKyAgICBMb2NrJiBtX2xvY2s7CiAKLSAgICBNZXRhQWxs
b2NhdG9yVHJhY2tlciogbV90cmFja2VyOworICAgIE1ldGFBbGxvY2F0b3JUcmFja2VyKiBtX3Ry
YWNrZXIgeyBudWxscHRyIH07CiAKICNpZm5kZWYgTkRFQlVHCiAgICAgc2l6ZV90IG1fbWFsbG9j
QmFsYW5jZTsKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL01ldGFBbGxvY2F0b3JIYW5kbGUuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9NZXRhQWxsb2NhdG9ySGFuZGxlLmgJKHJldmlzaW9u
IDI1ODM1MCkKKysrIFNvdXJjZS9XVEYvd3RmL01ldGFBbGxvY2F0b3JIYW5kbGUuaAkod29ya2lu
ZyBjb3B5KQpAQCAtNDIsNyArNDIsNyBAQCBERUNMQVJFX0FMTE9DQVRPUl9XSVRIX0hFQVBfSURF
TlRJRklFUihNCiBjbGFzcyBNZXRhQWxsb2NhdG9ySGFuZGxlIDogcHVibGljIFRocmVhZFNhZmVS
ZWZDb3VudGVkPE1ldGFBbGxvY2F0b3JIYW5kbGU+LCBwdWJsaWMgUmVkQmxhY2tUcmVlPE1ldGFB
bGxvY2F0b3JIYW5kbGUsIHZvaWQqPjo6Tm9kZSB7CiAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FU
RURfV0lUSF9IRUFQX0lERU5USUZJRVIoTWV0YUFsbG9jYXRvckhhbmRsZSk7CiBwcml2YXRlOgot
ICAgIE1ldGFBbGxvY2F0b3JIYW5kbGUoTWV0YUFsbG9jYXRvciosIHZvaWQqIHN0YXJ0LCBzaXpl
X3Qgc2l6ZUluQnl0ZXMsIHZvaWQqIG93bmVyVUlEKTsKKyAgICBNZXRhQWxsb2NhdG9ySGFuZGxl
KE1ldGFBbGxvY2F0b3ImLCB2b2lkKiBzdGFydCwgc2l6ZV90IHNpemVJbkJ5dGVzKTsKIAogcHVi
bGljOgogICAgIHVzaW5nIE1lbW9yeVB0ciA9IE1ldGFBbGxvY2F0b3JQdHI8SGFuZGxlTWVtb3J5
UHRyVGFnPjsKQEAgLTg2LDIyICs4NiwxMSBAQCBwdWJsaWM6CiAgICAgICAgIAogICAgIFdURl9F
WFBPUlRfUFJJVkFURSB2b2lkIHNocmluayhzaXplX3QgbmV3U2l6ZUluQnl0ZXMpOwogICAgIAot
ICAgIGJvb2wgaXNNYW5hZ2VkKCkKKyAgICBNZXRhQWxsb2NhdG9yJiBhbGxvY2F0b3IoKQogICAg
IHsKLSAgICAgICAgcmV0dXJuICEhbV9hbGxvY2F0b3I7Ci0gICAgfQotICAgICAgICAKLSAgICBN
ZXRhQWxsb2NhdG9yKiBhbGxvY2F0b3IoKQotICAgIHsKLSAgICAgICAgQVNTRVJUKG1fYWxsb2Nh
dG9yKTsKICAgICAgICAgcmV0dXJuIG1fYWxsb2NhdG9yOwogICAgIH0KIAotICAgIHZvaWQqIG93
bmVyVUlEKCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBtX293bmVyVUlEOwotICAgIH0KLQogICAg
IHZvaWQqIGtleSgpCiAgICAgewogICAgICAgICByZXR1cm4gbV9zdGFydC51bnRhZ2dlZFB0cigp
OwpAQCAtMTEyLDEwICsxMDEsOSBAQCBwdWJsaWM6CiBwcml2YXRlOgogICAgIGZyaWVuZCBjbGFz
cyBNZXRhQWxsb2NhdG9yOwogICAgIAotICAgIE1ldGFBbGxvY2F0b3IqIG1fYWxsb2NhdG9yOwor
ICAgIE1ldGFBbGxvY2F0b3ImIG1fYWxsb2NhdG9yOwogICAgIE1lbW9yeVB0ciBtX3N0YXJ0Owog
ICAgIE1lbW9yeVB0ciBtX2VuZDsKLSAgICB2b2lkKiBtX293bmVyVUlEOwogfTsKIAogfQpJbmRl
eDogU291cmNlL1dURi93dGYvUGxhdGZvcm1Vc2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RG
L3d0Zi9QbGF0Zm9ybVVzZS5oCShyZXZpc2lvbiAyNTgzNTApCisrKyBTb3VyY2UvV1RGL3d0Zi9Q
bGF0Zm9ybVVzZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMjQsMyArMzI0LDcgQEAKICNpZiBQTEFU
Rk9STShJT1MpICYmIF9fSVBIT05FX09TX1ZFUlNJT05fTUlOX1JFUVVJUkVEID49IDE0MDAwMAog
I2RlZmluZSBVU0VfVVRUWVBFX1NXSVpaTEVSIDEKICNlbmRpZgorCisjaWYgQ1BVKEFSTTY0KSAm
JiBDUFUoQUREUkVTUzY0KQorI2RlZmluZSBVU0VfSlVNUF9JU0xBTkRTIDEKKyNlbmRpZgpJbmRl
eDogU291cmNlL1dURi93dGYvUmVkQmxhY2tUcmVlLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dU
Ri93dGYvUmVkQmxhY2tUcmVlLmgJKHJldmlzaW9uIDI1ODM1MCkKKysrIFNvdXJjZS9XVEYvd3Rm
L1JlZEJsYWNrVHJlZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMjQsNiArMzI0LDI2IEBAIHB1Ymxp
YzoKICAgICAgICAgfQogICAgICAgICByZXR1cm4gYmVzdDsKICAgICB9CisKKyAgICB0ZW1wbGF0
ZSA8dHlwZW5hbWUgRnVuY3Rpb24+CisgICAgdm9pZCBpdGVyYXRlKEZ1bmN0aW9uIGZ1bmN0aW9u
KQorICAgIHsKKyAgICAgICAgaWYgKCFtX3Jvb3QpCisgICAgICAgICAgICByZXR1cm47CisKKyAg
ICAgICAgVmVjdG9yPE5vZGVUeXBlKiwgMTY+IHRvSXRlcmF0ZTsKKyAgICAgICAgdG9JdGVyYXRl
LmFwcGVuZChtX3Jvb3QpOworICAgICAgICB3aGlsZSAodG9JdGVyYXRlLnNpemUoKSkgeworICAg
ICAgICAgICAgTm9kZVR5cGUmIGN1cnJlbnQgPSAqdG9JdGVyYXRlLnRha2VMYXN0KCk7CisgICAg
ICAgICAgICBib29sIGl0ZXJhdGVMZWZ0ID0gZmFsc2U7CisgICAgICAgICAgICBib29sIGl0ZXJh
dGVSaWdodCA9IGZhbHNlOworICAgICAgICAgICAgZnVuY3Rpb24oY3VycmVudCwgaXRlcmF0ZUxl
ZnQsIGl0ZXJhdGVSaWdodCk7CisgICAgICAgICAgICBpZiAoaXRlcmF0ZUxlZnQgJiYgY3VycmVu
dC5sZWZ0KCkpCisgICAgICAgICAgICAgICAgdG9JdGVyYXRlLmFwcGVuZChjdXJyZW50LmxlZnQo
KSk7CisgICAgICAgICAgICBpZiAoaXRlcmF0ZVJpZ2h0ICYmIGN1cnJlbnQucmlnaHQoKSkKKyAg
ICAgICAgICAgICAgICB0b0l0ZXJhdGUuYXBwZW5kKGN1cnJlbnQucmlnaHQoKSk7CisgICAgICAg
IH0KKyAgICB9CiAgICAgCiAgICAgTm9kZVR5cGUqIGZpcnN0KCkgY29uc3QKICAgICB7CkluZGV4
OiBTb3VyY2UvV1RGL3d0Zi9TdGRMaWJFeHRyYXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RG
L3d0Zi9TdGRMaWJFeHRyYXMuaAkocmV2aXNpb24gMjU4MzUwKQorKysgU291cmNlL1dURi93dGYv
U3RkTGliRXh0cmFzLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ4OSw2ICs0ODksMTkgQEAgQUxXQVlT
X0lOTElORSBkZWNsdHlwZShhdXRvKSBtYWtlVW5pcXVlVwogICAgIHJldHVybiBzdGQ6Om1ha2Vf
dW5pcXVlPFQ+KHN0ZDo6Zm9yd2FyZDxBcmdzPihhcmdzKS4uLik7CiB9CiAKK3RlbXBsYXRlIDx0
eXBlbmFtZSBSZXN1bHRUeXBlLCBzaXplX3QuLi4gSXMsIHR5cGVuYW1lIC4uLkFyZ3M+Citjb25z
dGV4cHIgYXV0byBjb25zdHJ1Y3RGaXhlZFNpemVBcnJheVdpdGhBcmd1bWVudHNJbXBsKHN0ZDo6
aW5kZXhfc2VxdWVuY2U8SXMuLi4+LCBBcmdzJiYuLi4gYXJncykgLT4gc3RkOjphcnJheTxSZXN1
bHRUeXBlLCBzaXplb2YuLi4oSXMpPgoreworICAgIHJldHVybiB7ICgodm9pZClJcywgUmVzdWx0
VHlwZSB7IHN0ZDo6Zm9yd2FyZDxBcmdzPihhcmdzKS4uLiB9KS4uLiB9OworfQorCisvLyBDb25z
dHJ1Y3QgYW4gc3RkOjphcnJheSB3aXRoIE4gZWxlbWVudHMgb2YgUmVzdWx0VHlwZSwgcGFzc2lu
ZyBBcmdzIHRvIGVhY2ggb2YgdGhlIE4gY29uc3RydWN0b3JzLgordGVtcGxhdGU8dHlwZW5hbWUg
UmVzdWx0VHlwZSwgc2l6ZV90IE4sIHR5cGVuYW1lIC4uLkFyZ3M+Citjb25zdGV4cHIgYXV0byBj
b25zdHJ1Y3RGaXhlZFNpemVBcnJheVdpdGhBcmd1bWVudHMoQXJncyYmLi4uIGFyZ3MpIC0+IGRl
Y2x0eXBlKGF1dG8pCit7CisgICAgYXV0byB0dXBsZSA9IHN0ZDo6bWFrZV9pbmRleF9zZXF1ZW5j
ZTxOPigpOworICAgIHJldHVybiBjb25zdHJ1Y3RGaXhlZFNpemVBcnJheVdpdGhBcmd1bWVudHNJ
bXBsPFJlc3VsdFR5cGU+KHR1cGxlLCBzdGQ6OmZvcndhcmQ8QXJncz4oYXJncykuLi4pOworfQog
CiB9IC8vIG5hbWVzcGFjZSBXVEYKIApAQCAtNTE0LDMgKzUyNyw0IEBAIHVzaW5nIFdURjo6c2Fm
ZUNhc3Q7CiB1c2luZyBXVEY6OnRyeUJpbmFyeVNlYXJjaDsKIHVzaW5nIFdURjo6bWFrZVVuaXF1
ZTsKIHVzaW5nIFdURjo6bWFrZVVuaXF1ZVdpdGhvdXRGYXN0TWFsbG9jQ2hlY2s7Cit1c2luZyBX
VEY6OmNvbnN0cnVjdEZpeGVkU2l6ZUFycmF5V2l0aEFyZ3VtZW50czsKSW5kZXg6IFRvb2xzL0No
YW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9DaGFuZ2VMb2cJKHJldmlzaW9uIDI1ODM1MCkK
KysrIFRvb2xzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEyIEBACisyMDIw
LTAzLTEyICBTYWFtIEJhcmF0aSAgPHNiYXJhdGlAYXBwbGUuY29tPgorCisgICAgICAgIEltcGxl
bWVudCAxR0Igb2YgZXhlY3V0YWJsZSBtZW1vcnkgb24gYXJtNjQKKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIwODQ5MAorCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogU2NyaXB0cy9ydW4tanNjLXN0cmVzcy10
ZXN0czoKKwogMjAyMC0wMy0xMiAgV2Vuc29uIEhzaWVoICA8d2Vuc29uX2hzaWVoQGFwcGxlLmNv
bT4KIAogICAgICAgICBydW4td2Via2l0LXRlc3RzIC0tdXNlLWdwdS1wcm9jZXNzIHNob3VsZCBl
bmFibGUgR1BVIFByb2Nlc3MgZm9yIGNhbnZhcwpJbmRleDogVG9vbHMvU2NyaXB0cy9ydW4tanNj
LXN0cmVzcy10ZXN0cwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9TY3JpcHRzL3J1bi1qc2Mtc3RyZXNz
LXRlc3RzCShyZXZpc2lvbiAyNTgzNTApCisrKyBUb29scy9TY3JpcHRzL3J1bi1qc2Mtc3RyZXNz
LXRlc3RzCSh3b3JraW5nIGNvcHkpCkBAIC01MCw2ICs1MCw3IEBAIFNDUklQVFNfUEFUSCA9IFRI
SVNfU0NSSVBUX1BBVEguZGlybmFtZQogV0VCS0lUX1BBVEggPSBTQ1JJUFRTX1BBVEguZGlybmFt
ZS5kaXJuYW1lCiBMQVlPVVRURVNUU19QQVRIID0gV0VCS0lUX1BBVEggKyAiTGF5b3V0VGVzdHMi
CiBXQVNNVEVTVFNfUEFUSCA9IFdFQktJVF9QQVRIICsgIkpTVGVzdHMvd2FzbSIKK0pFVFNUUkVB
TTJfUEFUSCA9IFdFQktJVF9QQVRIICsgIlBlcmZvcm1hbmNlVGVzdHMvSmV0U3RyZWFtMiIKIENI
QUtSQVRFU1RTX1BBVEggPSBXRUJLSVRfUEFUSCArICJKU1Rlc3RzL0NoYWtyYUNvcmUvdGVzdCIK
IHJhaXNlIHVubGVzcyBTQ1JJUFRTX1BBVEguYmFzZW5hbWUudG9fcyA9PSAiU2NyaXB0cyIKIHJh
aXNlIHVubGVzcyBTQ1JJUFRTX1BBVEguZGlybmFtZS5iYXNlbmFtZS50b19zID09ICJUb29scyIK
QEAgLTY2OSw3ICs2NzAsNyBAQCBkZWYgcnVuTm9DSklUVmFsaWRhdGUoKm9wdGlvbmFsVGVzdFNw
ZWNpCiBlbmQKIAogZGVmIHJ1bk5vQ0pJVFZhbGlkYXRlUGhhc2VzKCpvcHRpb25hbFRlc3RTcGVj
aWZpY09wdGlvbnMpCi0gICAgcnVuKCJuby1jaml0LXZhbGlkYXRlLXBoYXNlcyIsICItLXZhbGlk
YXRlQnl0ZWNvZGU9dHJ1ZSIsICItLXZhbGlkYXRlR3JhcGhBdEVhY2hQaGFzZT10cnVlIiwgIi0t
dXNlU291cmNlUHJvdmlkZXJDYWNoZT1mYWxzZSIsICooTk9fQ0pJVF9PUFRJT05TICsgb3B0aW9u
YWxUZXN0U3BlY2lmaWNPcHRpb25zKSkKKyAgICBydW4oIm5vLWNqaXQtdmFsaWRhdGUtcGhhc2Vz
IiwgIi0tdmFsaWRhdGVCeXRlY29kZT10cnVlIiwgIi0tdmFsaWRhdGVHcmFwaEF0RWFjaFBoYXNl
PXRydWUiLCAiLS11c2VTb3VyY2VQcm92aWRlckNhY2hlPWZhbHNlIiwgIi0tdXNlUmFuZG9taXpp
bmdFeGVjdXRhYmxlSXNsYW5kQWxsb2NhdGlvbj10cnVlIiwgKihOT19DSklUX09QVElPTlMgKyBv
cHRpb25hbFRlc3RTcGVjaWZpY09wdGlvbnMpKQogZW5kCiAKIGRlZiBydW5Ob0NKSVRDb2xsZWN0
Q29udGludW91c2x5KCpvcHRpb25hbFRlc3RTcGVjaWZpY09wdGlvbnMpCkBAIC03MDYsNyArNzA3
LDcgQEAgZGVmIHJ1bkZUTE5vQ0pJVCgqb3B0aW9uYWxUZXN0U3BlY2lmaWNPcAogZW5kCiAKIGRl
ZiBydW5GVExOb0NKSVRCM08wKCpvcHRpb25hbFRlc3RTcGVjaWZpY09wdGlvbnMpCi0gICAgcnVu
KCJmdGwtbm8tY2ppdC1iM28wIiwgIi0tdXNlQXJyYXlBbGxvY2F0aW9uUHJvZmlsaW5nPWZhbHNl
IiwgIi0tZm9yY2VQb2x5UHJvdG89dHJ1ZSIsICooRlRMX09QVElPTlMgKyBOT19DSklUX09QVElP
TlMgKyBCM08wX09QVElPTlMgKyBGT1JDRV9MTElOVF9FWElUX09QVElPTlMgKyBvcHRpb25hbFRl
c3RTcGVjaWZpY09wdGlvbnMpKQorICAgIHJ1bigiZnRsLW5vLWNqaXQtYjNvMCIsICItLXVzZUFy
cmF5QWxsb2NhdGlvblByb2ZpbGluZz1mYWxzZSIsICItLWZvcmNlUG9seVByb3RvPXRydWUiLCAi
LS11c2VSYW5kb21pemluZ0V4ZWN1dGFibGVJc2xhbmRBbGxvY2F0aW9uPXRydWUiLCAqKEZUTF9P
UFRJT05TICsgTk9fQ0pJVF9PUFRJT05TICsgQjNPMF9PUFRJT05TICsgRk9SQ0VfTExJTlRfRVhJ
VF9PUFRJT05TICsgb3B0aW9uYWxUZXN0U3BlY2lmaWNPcHRpb25zKSkKIGVuZAogCiBkZWYgcnVu
RlRMTm9DSklUVmFsaWRhdGUoKm9wdGlvbmFsVGVzdFNwZWNpZmljT3B0aW9ucykKQEAgLTczNCw3
ICs3MzUsNyBAQCBkZWYgcnVuREZHRWFnZXJOb0NKSVRWYWxpZGF0ZSgqb3B0aW9uYWxUCiBlbmQK
IAogZGVmIHJ1bkZUTEVhZ2VyKCpvcHRpb25hbFRlc3RTcGVjaWZpY09wdGlvbnMpCi0gICAgcnVu
KCJmdGwtZWFnZXIiLCAiLS1haXJGb3JjZUJyaWdnc0FsbG9jYXRvcj10cnVlIiwgIi0tZm9yY2VQ
b2x5UHJvdG89dHJ1ZSIsICooRlRMX09QVElPTlMgKyBFQUdFUl9PUFRJT05TICsgQ09MTEVDVF9D
T05USU5VT1VTTFlfT1BUSU9OUyArIG9wdGlvbmFsVGVzdFNwZWNpZmljT3B0aW9ucykpCisgICAg
cnVuKCJmdGwtZWFnZXIiLCAiLS1haXJGb3JjZUJyaWdnc0FsbG9jYXRvcj10cnVlIiwgIi0tdXNl
UmFuZG9taXppbmdFeGVjdXRhYmxlSXNsYW5kQWxsb2NhdGlvbj10cnVlIiwgIi0tZm9yY2VQb2x5
UHJvdG89dHJ1ZSIsICooRlRMX09QVElPTlMgKyBFQUdFUl9PUFRJT05TICsgQ09MTEVDVF9DT05U
SU5VT1VTTFlfT1BUSU9OUyArIG9wdGlvbmFsVGVzdFNwZWNpZmljT3B0aW9ucykpCiBlbmQKIAog
ZGVmIHJ1bkZUTEVhZ2VyV2F0Y2hkb2coKm9wdGlvbmFsVGVzdFNwZWNpZmljT3B0aW9ucykKQEAg
LTc3NSw3ICs3NzYsNyBAQCBkZWYgcnVuTm9DSklUKCpvcHRpb25hbFRlc3RTcGVjaWZpY09wdGlv
CiBlbmQKIAogZGVmIHJ1bkVhZ2VySmV0dGlzb25Ob0NKSVQoKm9wdGlvbmFsVGVzdFNwZWNpZmlj
T3B0aW9ucykKLSAgICBydW4oImVhZ2VyLWpldHRpc29uLW5vLWNqaXQiLCAiLS1mb3JjZUNvZGVC
bG9ja1RvSmV0dGlzb25EdWVUb09sZEFnZT10cnVlIiwgKihOT19DSklUX09QVElPTlMgKyBvcHRp
b25hbFRlc3RTcGVjaWZpY09wdGlvbnMpKQorICAgIHJ1bigiZWFnZXItamV0dGlzb24tbm8tY2pp
dCIsICItLXVzZVJhbmRvbWl6aW5nRXhlY3V0YWJsZUlzbGFuZEFsbG9jYXRpb249dHJ1ZSIsICIt
LWZvcmNlQ29kZUJsb2NrVG9KZXR0aXNvbkR1ZVRvT2xkQWdlPXRydWUiLCAqKE5PX0NKSVRfT1BU
SU9OUyArIG9wdGlvbmFsVGVzdFNwZWNpZmljT3B0aW9ucykpCiBlbmQKIAogZGVmIHJ1blNoYWRv
d0NoaWNrZW4oKm9wdGlvbmFsVGVzdFNwZWNpZmljT3B0aW9ucykKQEAgLTEwODMsMTYgKzEwODQs
MzcgQEAgZGVmIHJ1bldlYkFzc2VtYmx5CiAgICAgcnVuKCJkZWZhdWx0LXdhc20iLCAiLW0iLCAq
RlRMX09QVElPTlMpCiAgICAgaWYgJG1vZGUgIT0gInF1aWNrIgogICAgICAgICBydW4oIndhc20t
bm8tY2ppdC15ZXMtdGxzLWNvbnRleHQiLCAiLW0iLCAiLS11c2VGYXN0VExTRm9yV2FzbUNvbnRl
eHQ9dHJ1ZSIsICooRlRMX09QVElPTlMgKyBOT19DSklUX09QVElPTlMpKQotICAgICAgICBydW4o
Indhc20tZWFnZXIiLCAiLW0iLCAqKEZUTF9PUFRJT05TICsgRUFHRVJfT1BUSU9OUykpCi0gICAg
ICAgIHJ1bigid2FzbS1lYWdlci1qZXR0aXNvbiIsICItbSIsICItLWZvcmNlQ29kZUJsb2NrVG9K
ZXR0aXNvbkR1ZVRvT2xkQWdlPXRydWUiLCAqRlRMX09QVElPTlMpCisgICAgICAgIHJ1bigid2Fz
bS1lYWdlciIsICItbSIsICItLXVzZVJhbmRvbWl6aW5nRXhlY3V0YWJsZUlzbGFuZEFsbG9jYXRp
b249dHJ1ZSIsICooRlRMX09QVElPTlMgKyBFQUdFUl9PUFRJT05TKSkKKyAgICAgICAgcnVuKCJ3
YXNtLWVhZ2VyLWpldHRpc29uIiwgIi1tIiwgIi0tZm9yY2VDb2RlQmxvY2tUb0pldHRpc29uRHVl
VG9PbGRBZ2U9dHJ1ZSIsICItLXVzZVJhbmRvbWl6aW5nRXhlY3V0YWJsZUlzbGFuZEFsbG9jYXRp
b249dHJ1ZSIsICpGVExfT1BUSU9OUykKICAgICAgICAgcnVuKCJ3YXNtLW5vLXRscy1jb250ZXh0
IiwgIi1tIiwgIi0tdXNlRmFzdFRMU0Zvcldhc21Db250ZXh0PWZhbHNlIiwgKkZUTF9PUFRJT05T
KQogICAgICAgICBydW4oIndhc20tc2xvdy1tZW1vcnkiLCAiLW0iLCAiLS11c2VXZWJBc3NlbWJs
eUZhc3RNZW1vcnk9ZmFsc2UiLCAqRlRMX09QVElPTlMpCiAgICAgICAgIHJ1bigid2FzbS1iMyIs
ICItbSIsICItLXVzZVdhc21MTEludD1mYWxzZSIsICItLXdhc21CQlFVc2VzQWlyPWZhbHNlIiwg
KkZUTF9PUFRJT05TKQotICAgICAgICBydW4oIndhc20tYWlyIiwgIi1tIiwgIi0tdXNlV2FzbUxM
SW50PWZhbHNlIiwgKkZUTF9PUFRJT05TKQorICAgICAgICBydW4oIndhc20tYWlyIiwgIi1tIiwg
Ii0tdXNlV2FzbUxMSW50PWZhbHNlIiwgIi0tdXNlUmFuZG9taXppbmdFeGVjdXRhYmxlSXNsYW5k
QWxsb2NhdGlvbj10cnVlIiwgKkZUTF9PUFRJT05TKQogICAgICAgICBydW4oIndhc20tY29sbGVj
dC1jb250aW51b3VzbHkiLCAiLW0iLCAiLS1jb2xsZWN0Q29udGludW91c2x5PXRydWUiLCAqRlRM
X09QVElPTlMpIGlmIHNob3VsZENvbGxlY3RDb250aW51b3VzbHk/CiAgICAgZW5kCiBlbmQKIAor
ZGVmIHJ1bldlYkFzc2VtYmx5SmV0U3RyZWFtMgorICAgIHJldHVybiBpZiAhJGppdFRlc3RzCisg
ICAgcmV0dXJuIGlmICEkaXNGVExQbGF0Zm9ybQorCisgICAgcHJlcGFyZUV4dHJhQWJzb2x1dGVG
aWxlcyhKRVRTVFJFQU0yX1BBVEgsIFsiSmV0U3RyZWFtRHJpdmVyLmpzIl0pCisgICAgcHJlcGFy
ZUV4dHJhUmVsYXRpdmVGaWxlc1dpdGhCYXNlRGlyZWN0b3J5KERpcltKRVRTVFJFQU0yX1BBVEgg
KyAid2FzbSIgKyAiKi5qcyJdLm1hcCB7IHxmfCAid2FzbS8iICsgRmlsZS5iYXNlbmFtZShmKSB9
LCAkY29sbGVjdGlvbi5kaXJuYW1lLCAkZXh0cmFGaWxlc0Jhc2VEaXIuZGlybmFtZSkKKyAgICBw
cmVwYXJlRXh0cmFSZWxhdGl2ZUZpbGVzV2l0aEJhc2VEaXJlY3RvcnkoRGlyW0pFVFNUUkVBTTJf
UEFUSCArICJ3YXNtIiArICIqLndhc20iXS5tYXAgeyB8ZnwgIndhc20vIiArIEZpbGUuYmFzZW5h
bWUoZikgfSwgJGNvbGxlY3Rpb24uZGlybmFtZSwgJGV4dHJhRmlsZXNCYXNlRGlyLmRpcm5hbWUp
CisKKyAgICBydW4oImRlZmF1bHQtd2FzbSIsICpGVExfT1BUSU9OUykKKyAgICBpZiAkbW9kZSAh
PSAicXVpY2siCisgICAgICAgIHJ1bigid2FzbS1uby1jaml0LXllcy10bHMtY29udGV4dCIsICIt
LXVzZUZhc3RUTFNGb3JXYXNtQ29udGV4dD10cnVlIiwgKihGVExfT1BUSU9OUyArIE5PX0NKSVRf
T1BUSU9OUykpCisgICAgICAgIHJ1bigid2FzbS1lYWdlciIsICItLXVzZVJhbmRvbWl6aW5nRXhl
Y3V0YWJsZUlzbGFuZEFsbG9jYXRpb249dHJ1ZSIsICooRlRMX09QVElPTlMgKyBFQUdFUl9PUFRJ
T05TKSkKKyAgICAgICAgcnVuKCJ3YXNtLWVhZ2VyLWpldHRpc29uIiwgIi0tZm9yY2VDb2RlQmxv
Y2tUb0pldHRpc29uRHVlVG9PbGRBZ2U9dHJ1ZSIsICpGVExfT1BUSU9OUykKKyAgICAgICAgcnVu
KCJ3YXNtLW5vLXRscy1jb250ZXh0IiwgIi0tdXNlRmFzdFRMU0Zvcldhc21Db250ZXh0PWZhbHNl
IiwgKkZUTF9PUFRJT05TKQorICAgICAgICBydW4oIndhc20tc2xvdy1tZW1vcnkiLCAiLS11c2VX
ZWJBc3NlbWJseUZhc3RNZW1vcnk9ZmFsc2UiLCAqRlRMX09QVElPTlMpCisgICAgICAgIHJ1bigi
d2FzbS1iMyIsICItLXVzZVdhc21MTEludD1mYWxzZSIsICItLXdhc21CQlFVc2VzQWlyPWZhbHNl
IiwgKkZUTF9PUFRJT05TKQorICAgICAgICBydW4oIndhc20tYWlyIiwgIi0tdXNlV2FzbUxMSW50
PWZhbHNlIiwgIi0tdXNlUmFuZG9taXppbmdFeGVjdXRhYmxlSXNsYW5kQWxsb2NhdGlvbj10cnVl
IiwgKkZUTF9PUFRJT05TKQorICAgICAgICBydW4oIndhc20tY29sbGVjdC1jb250aW51b3VzbHki
LCAiLS1jb2xsZWN0Q29udGludW91c2x5PXRydWUiLCAqRlRMX09QVElPTlMpIGlmIHNob3VsZENv
bGxlY3RDb250aW51b3VzbHk/CisgICAgZW5kCitlbmQKKwogZGVmIHJ1bldlYkFzc2VtYmx5U3Vp
dGUoKm9wdGlvbmFsVGVzdFNwZWNpZmljT3B0aW9ucykKICAgICByZXR1cm4gaWYgISRqaXRUZXN0
cwogICAgIHJldHVybiBpZiAhJGlzRlRMUGxhdGZvcm0KQEAgLTExMDMsMTEgKzExMjUsMTEgQEAg
ZGVmIHJ1bldlYkFzc2VtYmx5U3VpdGUoKm9wdGlvbmFsVGVzdFNwZQogICAgIGlmICRtb2RlICE9
ICJxdWljayIKICAgICAgICAgcnVuKCJ3YXNtLW5vLWNqaXQteWVzLXRscy1jb250ZXh0IiwgIi1t
IiwgIi0tdXNlRmFzdFRMU0Zvcldhc21Db250ZXh0PXRydWUiLCAqKEZUTF9PUFRJT05TICsgTk9f
Q0pJVF9PUFRJT05TICsgb3B0aW9uYWxUZXN0U3BlY2lmaWNPcHRpb25zKSkKICAgICAgICAgcnVu
KCJ3YXNtLWVhZ2VyIiwgIi1tIiwgKihGVExfT1BUSU9OUyArIEVBR0VSX09QVElPTlMgKyBvcHRp
b25hbFRlc3RTcGVjaWZpY09wdGlvbnMpKQotICAgICAgICBydW4oIndhc20tZWFnZXItamV0dGlz
b24iLCAiLW0iLCAiLS1mb3JjZUNvZGVCbG9ja1RvSmV0dGlzb25EdWVUb09sZEFnZT10cnVlIiwg
KihGVExfT1BUSU9OUyArIG9wdGlvbmFsVGVzdFNwZWNpZmljT3B0aW9ucykpCisgICAgICAgIHJ1
bigid2FzbS1lYWdlci1qZXR0aXNvbiIsICItbSIsICItLWZvcmNlQ29kZUJsb2NrVG9KZXR0aXNv
bkR1ZVRvT2xkQWdlPXRydWUiLCAiLS11c2VSYW5kb21pemluZ0V4ZWN1dGFibGVJc2xhbmRBbGxv
Y2F0aW9uPXRydWUiLCAqKEZUTF9PUFRJT05TICsgb3B0aW9uYWxUZXN0U3BlY2lmaWNPcHRpb25z
KSkKICAgICAgICAgcnVuKCJ3YXNtLW5vLXRscy1jb250ZXh0IiwgIi1tIiwgIi0tdXNlRmFzdFRM
U0Zvcldhc21Db250ZXh0PWZhbHNlIiwgKihGVExfT1BUSU9OUyArIG9wdGlvbmFsVGVzdFNwZWNp
ZmljT3B0aW9ucykpCiAgICAgICAgIHJ1bigid2FzbS1zbG93LW1lbW9yeSIsICItbSIsICItLXVz
ZVdlYkFzc2VtYmx5RmFzdE1lbW9yeT1mYWxzZSIsICooRlRMX09QVElPTlMgKyBvcHRpb25hbFRl
c3RTcGVjaWZpY09wdGlvbnMpKQogICAgICAgICBydW4oIndhc20tYjMiLCAiLW0iLCAiLS11c2VX
YXNtTExJbnQ9ZmFsc2UiLCAiLS13YXNtQkJRVXNlc0Fpcj1mYWxzZSIsICooRlRMX09QVElPTlMg
KyBvcHRpb25hbFRlc3RTcGVjaWZpY09wdGlvbnMpKQotICAgICAgICBydW4oIndhc20tYWlyIiwg
Ii1tIiwgIi0tdXNlV2FzbUxMSW50PWZhbHNlIiwgKihGVExfT1BUSU9OUyArIG9wdGlvbmFsVGVz
dFNwZWNpZmljT3B0aW9ucykpCisgICAgICAgIHJ1bigid2FzbS1haXIiLCAiLW0iLCAiLS11c2VX
YXNtTExJbnQ9ZmFsc2UiLCAiLS11c2VSYW5kb21pemluZ0V4ZWN1dGFibGVJc2xhbmRBbGxvY2F0
aW9uPXRydWUiLCAqKEZUTF9PUFRJT05TICsgb3B0aW9uYWxUZXN0U3BlY2lmaWNPcHRpb25zKSkK
ICAgICAgICAgcnVuKCJ3YXNtLWNvbGxlY3QtY29udGludW91c2x5IiwgIi1tIiwgIi0tY29sbGVj
dENvbnRpbnVvdXNseT10cnVlIiwgKihGVExfT1BUSU9OUyArIG9wdGlvbmFsVGVzdFNwZWNpZmlj
T3B0aW9ucykpIGlmIHNob3VsZENvbGxlY3RDb250aW51b3VzbHk/CiAgICAgZW5kCiBlbmQKQEAg
LTExMzMsMTEgKzExNTUsMTEgQEAgZGVmIHJ1bldlYkFzc2VtYmx5V2l0aEhhcm5lc3MoKm9wdGlv
bmFsVAogICAgIGlmICRtb2RlICE9ICJxdWljayIKICAgICAgICAgcnVuSGFybmVzc1Rlc3QoIndh
c20tbm8tY2ppdC15ZXMtdGxzLWNvbnRleHQiLCAiLS11c2VGYXN0VExTRm9yV2FzbUNvbnRleHQ9
dHJ1ZSIsICooRlRMX09QVElPTlMgKyBOT19DSklUX09QVElPTlMgKyBvcHRpb25hbFRlc3RTcGVj
aWZpY09wdGlvbnMpKQogICAgICAgICBydW5IYXJuZXNzVGVzdCgid2FzbS1lYWdlciIsICooRlRM
X09QVElPTlMgKyBFQUdFUl9PUFRJT05TICsgb3B0aW9uYWxUZXN0U3BlY2lmaWNPcHRpb25zKSkK
LSAgICAgICAgcnVuSGFybmVzc1Rlc3QoIndhc20tZWFnZXItamV0dGlzb24iLCAiLS1mb3JjZUNv
ZGVCbG9ja1RvSmV0dGlzb25EdWVUb09sZEFnZT10cnVlIiwgKihGVExfT1BUSU9OUyArIG9wdGlv
bmFsVGVzdFNwZWNpZmljT3B0aW9ucykpCisgICAgICAgIHJ1bkhhcm5lc3NUZXN0KCJ3YXNtLWVh
Z2VyLWpldHRpc29uIiwgIi0tZm9yY2VDb2RlQmxvY2tUb0pldHRpc29uRHVlVG9PbGRBZ2U9dHJ1
ZSIsICItLXVzZVJhbmRvbWl6aW5nRXhlY3V0YWJsZUlzbGFuZEFsbG9jYXRpb249dHJ1ZSIsICoo
RlRMX09QVElPTlMgKyBvcHRpb25hbFRlc3RTcGVjaWZpY09wdGlvbnMpKQogICAgICAgICBydW5I
YXJuZXNzVGVzdCgid2FzbS1uby10bHMtY29udGV4dCIsICItLXVzZUZhc3RUTFNGb3JXYXNtQ29u
dGV4dD1mYWxzZSIsICooRlRMX09QVElPTlMgKyBvcHRpb25hbFRlc3RTcGVjaWZpY09wdGlvbnMp
KQogICAgICAgICBydW5IYXJuZXNzVGVzdCgid2FzbS1zbG93LW1lbW9yeSIsICItLXVzZVdlYkFz
c2VtYmx5RmFzdE1lbW9yeT1mYWxzZSIsICooRlRMX09QVElPTlMgKyBvcHRpb25hbFRlc3RTcGVj
aWZpY09wdGlvbnMpKQogICAgICAgICBydW5IYXJuZXNzVGVzdCgid2FzbS1iMyIsICItLXVzZVdh
c21MTEludD1mYWxzZSIsICItLXdhc21CQlFVc2VzQWlyPWZhbHNlIiwgKihGVExfT1BUSU9OUyAr
IG9wdGlvbmFsVGVzdFNwZWNpZmljT3B0aW9ucykpCi0gICAgICAgIHJ1bkhhcm5lc3NUZXN0KCJ3
YXNtLW5vLWFpciIsICItLXVzZVdhc21MTEludD1mYWxzZSIsICooRlRMX09QVElPTlMgKyBvcHRp
b25hbFRlc3RTcGVjaWZpY09wdGlvbnMpKQorICAgICAgICBydW5IYXJuZXNzVGVzdCgid2FzbS1u
by1haXIiLCAiLS11c2VXYXNtTExJbnQ9ZmFsc2UiLCAiLS11c2VSYW5kb21pemluZ0V4ZWN1dGFi
bGVJc2xhbmRBbGxvY2F0aW9uPXRydWUiLCAqKEZUTF9PUFRJT05TICsgb3B0aW9uYWxUZXN0U3Bl
Y2lmaWNPcHRpb25zKSkKICAgICAgICAgcnVuSGFybmVzc1Rlc3QoIndhc20tY29sbGVjdC1jb250
aW51b3VzbHkiLCAiLS1jb2xsZWN0Q29udGludW91c2x5PXRydWUiLCAqKEZUTF9PUFRJT05TICsg
b3B0aW9uYWxUZXN0U3BlY2lmaWNPcHRpb25zKSkgaWYgc2hvdWxkQ29sbGVjdENvbnRpbnVvdXNs
eT8KICAgICBlbmQKIGVuZApAQCAtMTE1NCwxMCArMTE3NiwxMCBAQCBkZWYgcnVuV2ViQXNzZW1i
bHlFbXNjcmlwdGVuKG1vZGUpCiAgICAgcnVuKCJkZWZhdWx0LXdhc20iLCAqRlRMX09QVElPTlMp
CiAgICAgaWYgJG1vZGUgIT0gInF1aWNrIgogICAgICAgICBydW4oIndhc20tbm8tY2ppdC15ZXMt
dGxzLWNvbnRleHQiLCAiLS11c2VGYXN0VExTRm9yV2FzbUNvbnRleHQ9dHJ1ZSIsICooRlRMX09Q
VElPTlMgKyBOT19DSklUX09QVElPTlMpKQotICAgICAgICBydW4oIndhc20tZWFnZXItamV0dGlz
b24iLCAiLS1mb3JjZUNvZGVCbG9ja1RvSmV0dGlzb25EdWVUb09sZEFnZT10cnVlIiwgKkZUTF9P
UFRJT05TKQorICAgICAgICBydW4oIndhc20tZWFnZXItamV0dGlzb24iLCAiLS1mb3JjZUNvZGVC
bG9ja1RvSmV0dGlzb25EdWVUb09sZEFnZT10cnVlIiwgIi0tdXNlUmFuZG9taXppbmdFeGVjdXRh
YmxlSXNsYW5kQWxsb2NhdGlvbj10cnVlIiwgKkZUTF9PUFRJT05TKQogICAgICAgICBydW4oIndh
c20tbm8tdGxzLWNvbnRleHQiLCAiLS11c2VGYXN0VExTRm9yV2FzbUNvbnRleHQ9ZmFsc2UiLCAq
RlRMX09QVElPTlMpCiAgICAgICAgIHJ1bigid2FzbS1iMyIsICItLXVzZVdhc21MTEludD1mYWxz
ZSIsICItLXdhc21CQlFVc2VzQWlyPWZhbHNlIiwgKkZUTF9PUFRJT05TKQotICAgICAgICBydW4o
Indhc20tYWlyIiwgIi0tdXNlV2FzbUxMSW50PWZhbHNlIiwgKkZUTF9PUFRJT05TKQorICAgICAg
ICBydW4oIndhc20tYWlyIiwgIi0tdXNlV2FzbUxMSW50PWZhbHNlIiwgIi0tdXNlUmFuZG9taXpp
bmdFeGVjdXRhYmxlSXNsYW5kQWxsb2NhdGlvbj10cnVlIiwgKkZUTF9PUFRJT05TKQogICAgICAg
ICBydW4oIndhc20tY29sbGVjdC1jb250aW51b3VzbHkiLCAiLS1jb2xsZWN0Q29udGludW91c2x5
PXRydWUiLCAqRlRMX09QVElPTlMpIGlmIHNob3VsZENvbGxlY3RDb250aW51b3VzbHk/CiAgICAg
ZW5kCiBlbmQKQEAgLTExODAsMTAgKzEyMDIsMTAgQEAgZGVmIHJ1bldlYkFzc2VtYmx5U3BlY1Rl
c3QobW9kZSkKICAgICBydW5XaXRoT3V0cHV0SGFuZGxlcigiZGVmYXVsdC13YXNtIiwgbm9pc3lP
dXRwdXRIYW5kbGVyLCAiLi4vc3BlYy1oYXJuZXNzLmpzIiwgKkZUTF9PUFRJT05TKQogICAgIGlm
ICRtb2RlICE9ICJxdWljayIKICAgICAgIHJ1bldpdGhPdXRwdXRIYW5kbGVyKCJ3YXNtLW5vLWNq
aXQteWVzLXRscy1jb250ZXh0Iiwgbm9pc3lPdXRwdXRIYW5kbGVyLCAiLi4vc3BlYy1oYXJuZXNz
LmpzIiwgICItLXVzZUZhc3RUTFNGb3JXYXNtQ29udGV4dD10cnVlIiwgKihGVExfT1BUSU9OUyAr
IE5PX0NKSVRfT1BUSU9OUykpCi0gICAgICBydW5XaXRoT3V0cHV0SGFuZGxlcigid2FzbS1lYWdl
ci1qZXR0aXNvbiIsIG5vaXN5T3V0cHV0SGFuZGxlciwgIi4uL3NwZWMtaGFybmVzcy5qcyIsICIt
LWZvcmNlQ29kZUJsb2NrVG9KZXR0aXNvbkR1ZVRvT2xkQWdlPXRydWUiLCAqRlRMX09QVElPTlMp
CisgICAgICBydW5XaXRoT3V0cHV0SGFuZGxlcigid2FzbS1lYWdlci1qZXR0aXNvbiIsIG5vaXN5
T3V0cHV0SGFuZGxlciwgIi4uL3NwZWMtaGFybmVzcy5qcyIsICItLWZvcmNlQ29kZUJsb2NrVG9K
ZXR0aXNvbkR1ZVRvT2xkQWdlPXRydWUiLCAiLS11c2VSYW5kb21pemluZ0V4ZWN1dGFibGVJc2xh
bmRBbGxvY2F0aW9uPXRydWUiLCAqRlRMX09QVElPTlMpCiAgICAgICBydW5XaXRoT3V0cHV0SGFu
ZGxlcigid2FzbS1uby10bHMtY29udGV4dCIsIG5vaXN5T3V0cHV0SGFuZGxlciwgIi4uL3NwZWMt
aGFybmVzcy5qcyIsICItLXVzZUZhc3RUTFNGb3JXYXNtQ29udGV4dD1mYWxzZSIsICpGVExfT1BU
SU9OUykKICAgICAgIHJ1bldpdGhPdXRwdXRIYW5kbGVyKCJ3YXNtLWIzIiwgbm9pc3lPdXRwdXRI
YW5kbGVyLCAiLi4vc3BlYy1oYXJuZXNzLmpzIiwgIi0tdXNlV2FzbUxMSW50PWZhbHNlIiwgIi0t
d2FzbUJCUVVzZXNBaXI9ZmFsc2UiLCAqRlRMX09QVElPTlMpCi0gICAgICBydW5XaXRoT3V0cHV0
SGFuZGxlcigid2FzbS1haXIiLCBub2lzeU91dHB1dEhhbmRsZXIsICIuLi9zcGVjLWhhcm5lc3Mu
anMiLCAiLS11c2VXYXNtTExJbnQ9ZmFsc2UiLCAqRlRMX09QVElPTlMpCisgICAgICBydW5XaXRo
T3V0cHV0SGFuZGxlcigid2FzbS1haXIiLCBub2lzeU91dHB1dEhhbmRsZXIsICIuLi9zcGVjLWhh
cm5lc3MuanMiLCAiLS11c2VXYXNtTExJbnQ9ZmFsc2UiLCAiLS11c2VSYW5kb21pemluZ0V4ZWN1
dGFibGVJc2xhbmRBbGxvY2F0aW9uPXRydWUiLCAqRlRMX09QVElPTlMpCiAgICAgICBydW5XaXRo
T3V0cHV0SGFuZGxlcigid2FzbS1jb2xsZWN0LWNvbnRpbnVvdXNseSIsIG5vaXN5T3V0cHV0SGFu
ZGxlciwgIi4uL3NwZWMtaGFybmVzcy5qcyIsICItLWNvbGxlY3RDb250aW51b3VzbHk9dHJ1ZSIs
ICpGVExfT1BUSU9OUykgaWYgc2hvdWxkQ29sbGVjdENvbnRpbnVvdXNseT8KICAgICBlbmQKIGVu
ZApAQCAtMTM1MiwxNyArMTM3NCwyMSBAQCBkZWYgbm9Ob0xMSW50UnVuTGF5b3V0VGVzdAogICAg
IGVuZAogZW5kCiAKLWRlZiBwcmVwYXJlRXh0cmFSZWxhdGl2ZUZpbGVzKGV4dHJhRmlsZXMsIGRl
c3RpbmF0aW9uKQorZGVmIHByZXBhcmVFeHRyYVJlbGF0aXZlRmlsZXNXaXRoQmFzZURpcmVjdG9y
eShleHRyYUZpbGVzLCBkZXN0aW5hdGlvbiwgYmFzZURpcmVjdG9yeSkKICAgICBEaXIuY2hkaXIo
JG91dHB1dERpcikgewogICAgICAgICBleHRyYUZpbGVzLmVhY2ggewogICAgICAgICAgICAgfCBm
aWxlIHwKICAgICAgICAgICAgIGRlc3QgPSBkZXN0aW5hdGlvbiArIGZpbGUKICAgICAgICAgICAg
IEZpbGVVdGlscy5ta2Rpcl9wKGRlc3QuZGlybmFtZSkKLSAgICAgICAgICAgIEZpbGVVdGlscy5j
cCAkZXh0cmFGaWxlc0Jhc2VEaXIgKyBmaWxlLCBkZXN0CisgICAgICAgICAgICBGaWxlVXRpbHMu
Y3AgYmFzZURpcmVjdG9yeSArIGZpbGUsIGRlc3QKICAgICAgICAgfQogICAgIH0KIGVuZAogCitk
ZWYgcHJlcGFyZUV4dHJhUmVsYXRpdmVGaWxlcyhleHRyYUZpbGVzLCBkZXN0aW5hdGlvbikKKyAg
ICBwcmVwYXJlRXh0cmFSZWxhdGl2ZUZpbGVzV2l0aEJhc2VEaXJlY3RvcnkoZXh0cmFGaWxlcywg
ZGVzdGluYXRpb24sICRleHRyYUZpbGVzQmFzZURpcikKK2VuZAorCiBkZWYgYmFzZURpckZvckNv
bGxlY3Rpb24oY29sbGVjdGlvbk5hbWUpCiAgICAgUGF0aG5hbWUoIi50ZXN0cyIpICsgY29sbGVj
dGlvbk5hbWUKIGVuZAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>393412</attachid>
            <date>2020-03-12 14:23:14 -0700</date>
            <delta_ts>2020-03-12 14:28:08 -0700</delta_ts>
            <desc>patch</desc>
            <filename>c-backup.diff</filename>
            <type>text/plain</type>
            <size>119518</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IEpTVGVzdHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEpTVGVzdHMvQ2hhbmdlTG9n
CShyZXZpc2lvbiAyNTgzNTApCisrKyBKU1Rlc3RzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpA
QCAtMSwzICsxLDE0IEBACisyMDIwLTAzLTEyICBTYWFtIEJhcmF0aSAgPHNiYXJhdGlAYXBwbGUu
Y29tPgorCisgICAgICAgIEltcGxlbWVudCAxR0Igb2YgZXhlY3V0YWJsZSBtZW1vcnkgb24gYXJt
NjQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIwODQ5
MAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFJ1biBK
ZXRTdHJlYW0yIHdhc20gdGVzdHMuCisKKyAgICAgICAgKiB3YXNtLnlhbWw6CisKIDIwMjAtMDMt
MTEgIEtlaXRoIE1pbGxlciAgPGtlaXRoX21pbGxlckBhcHBsZS5jb20+CiAKICAgICAgICAgVGVz
dDI2Mi1ydW5uZXIgc2hvdWxkIGFsd2F5cyBjb25zaWRlciBjcmFzaGVzIGFzIG5ldyBmYWlsdXJl
cwpJbmRleDogSlNUZXN0cy93YXNtLnlhbWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSlNUZXN0cy93YXNtLnlh
bWwJKHJldmlzaW9uIDI1ODM1MCkKKysrIEpTVGVzdHMvd2FzbS55YW1sCSh3b3JraW5nIGNvcHkp
CkBAIC0yMzEsMyArMjMxLDYgQEAKIC0gcGF0aDogd2FzbS9tb2R1bGVzL3J1bi1mcm9tLXdhc20u
d2FzbQogICBjbWQ6IHJ1bldlYkFzc2VtYmx5CiAKKy0gcGF0aDogLi4vUGVyZm9ybWFuY2VUZXN0
cy9KZXRTdHJlYW0yL3dhc20tY2xpLmpzCisgIGNtZDogcnVuV2ViQXNzZW1ibHlKZXRTdHJlYW0y
IHVubGVzcyBwYXJzZVJ1bkNvbW1hbmRzCisKSW5kZXg6IFBlcmZvcm1hbmNlVGVzdHMvQ2hhbmdl
TG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFBlcmZvcm1hbmNlVGVzdHMvQ2hhbmdlTG9nCShyZXZpc2lvbiAy
NTgzNTApCisrKyBQZXJmb3JtYW5jZVRlc3RzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAt
MSwzICsxLDI0IEBACisyMDIwLTAzLTEyICBTYWFtIEJhcmF0aSAgPHNiYXJhdGlAYXBwbGUuY29t
PgorCisgICAgICAgIEltcGxlbWVudCAxR0Igb2YgZXhlY3V0YWJsZSBtZW1vcnkgb24gYXJtNjQK
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIwODQ5MAor
CisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogSmV0U3Ry
ZWFtMi9KZXRTdHJlYW1Ecml2ZXIuanM6CisgICAgICAgIChEcml2ZXIucHJvdG90eXBlLmR1bXBK
U09OUmVzdWx0c0lmTmVlZGVkKToKKyAgICAgICAgKERlZmF1bHRCZW5jaG1hcmsucHJvdG90eXBl
LnVwZGF0ZVVJQWZ0ZXJSdW4pOgorICAgICAgICAoRGVmYXVsdEJlbmNobWFyayk6CisgICAgICAg
IChXU0xCZW5jaG1hcmsucHJvdG90eXBlLnVwZGF0ZVVJQWZ0ZXJSdW4pOgorICAgICAgICAoV1NM
QmVuY2htYXJrKToKKyAgICAgICAgKFdhc21CZW5jaG1hcmsucHJvdG90eXBlLnVwZGF0ZVVJQWZ0
ZXJSdW4pOgorICAgICAgICAoV2FzbUJlbmNobWFyayk6CisgICAgICAgIChEcml2ZXIuYXN5bmMg
ZmV0Y2hSZXNvdXJjZXMuc3RhdHVzRWxlbWVudC5pbm5lckhUTUwuYS5ocmVmLnN0cmluZ19hcHBl
YXJlZF9oZXJlKToKKyAgICAgICAgKERyaXZlci5wcm90b3R5cGUuYXN5bmMgZmV0Y2hSZXNvdXJj
ZXMpOgorICAgICAgICAqIEpldFN0cmVhbTIvd2FzbS1jbGkuanM6IEFkZGVkLgorICAgICAgICAo
Y29uc29sZS5sb2cpOgorICAgICAgICAoYXN5bmMgcnVuSmV0U3RyZWFtKToKKwogMjAyMC0wMi0x
NyAgRG9uIE9sbXN0ZWFkICA8ZG9uLm9sbXN0ZWFkQHNvbnkuY29tPgogCiAgICAgICAgIFtDTWFr
ZV0gVXNlIGJ1aWx0aW4gdGFyZ2V0cwpJbmRleDogUGVyZm9ybWFuY2VUZXN0cy9KZXRTdHJlYW0y
L0pldFN0cmVhbURyaXZlci5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBQZXJmb3JtYW5jZVRlc3RzL0pldFN0
cmVhbTIvSmV0U3RyZWFtRHJpdmVyLmpzCShyZXZpc2lvbiAyNTgzNTApCisrKyBQZXJmb3JtYW5j
ZVRlc3RzL0pldFN0cmVhbTIvSmV0U3RyZWFtRHJpdmVyLmpzCSh3b3JraW5nIGNvcHkpCkBAIC00
MDksOSArNDA5LDkgQEAgY2xhc3MgRHJpdmVyIHsKICAgICBkdW1wSlNPTlJlc3VsdHNJZk5lZWRl
ZCgpCiAgICAgewogICAgICAgICBpZiAoZHVtcEpTT05SZXN1bHRzKSB7Ci0gICAgICAgICAgICBw
cmludCgiXG4iKTsKLSAgICAgICAgICAgIHByaW50KHRoaXMucmVzdWx0c0pTT04oKSk7Ci0gICAg
ICAgICAgICBwcmludCgiXG4iKTsKKyAgICAgICAgICAgIGNvbnNvbGUubG9nKCJcbiIpOworICAg
ICAgICAgICAgY29uc29sZS5sb2codGhpcy5yZXN1bHRzSlNPTigpKTsKKyAgICAgICAgICAgIGNv
bnNvbGUubG9nKCJcbiIpOwogICAgICAgICB9CiAgICAgfQogCkBAIC03MjUsMTUgKzcyNSwxNSBA
QCBjbGFzcyBEZWZhdWx0QmVuY2htYXJrIGV4dGVuZHMgQmVuY2htYXJrCiAgICAgICAgICAgICBy
ZXR1cm47CiAgICAgICAgIH0KIAotICAgICAgICBwcmludCgiICAgIFN0YXJ0dXA6IiwgdWlGcmll
bmRseU51bWJlcih0aGlzLmZpcnN0SXRlcmF0aW9uKSk7Ci0gICAgICAgIHByaW50KCIgICAgV29y
c3QgQ2FzZToiLCB1aUZyaWVuZGx5TnVtYmVyKHRoaXMud29yc3Q0KSk7Ci0gICAgICAgIHByaW50
KCIgICAgQXZlcmFnZToiLCB1aUZyaWVuZGx5TnVtYmVyKHRoaXMuYXZlcmFnZSkpOwotICAgICAg
ICBwcmludCgiICAgIFNjb3JlOiIsIHVpRnJpZW5kbHlOdW1iZXIodGhpcy5zY29yZSkpOworICAg
ICAgICBjb25zb2xlLmxvZygiICAgIFN0YXJ0dXA6IiwgdWlGcmllbmRseU51bWJlcih0aGlzLmZp
cnN0SXRlcmF0aW9uKSk7CisgICAgICAgIGNvbnNvbGUubG9nKCIgICAgV29yc3QgQ2FzZToiLCB1
aUZyaWVuZGx5TnVtYmVyKHRoaXMud29yc3Q0KSk7CisgICAgICAgIGNvbnNvbGUubG9nKCIgICAg
QXZlcmFnZToiLCB1aUZyaWVuZGx5TnVtYmVyKHRoaXMuYXZlcmFnZSkpOworICAgICAgICBjb25z
b2xlLmxvZygiICAgIFNjb3JlOiIsIHVpRnJpZW5kbHlOdW1iZXIodGhpcy5zY29yZSkpOwogICAg
ICAgICBpZiAoUkFNaWZpY2F0aW9uKSB7Ci0gICAgICAgICAgICBwcmludCgiICAgIEN1cnJlbnQg
Rm9vdHByaW50OiIsIHVpRnJpZW5kbHlOdW1iZXIodGhpcy5jdXJyZW50Rm9vdHByaW50KSk7Ci0g
ICAgICAgICAgICBwcmludCgiICAgIFBlYWsgRm9vdHByaW50OiIsIHVpRnJpZW5kbHlOdW1iZXIo
dGhpcy5wZWFrRm9vdHByaW50KSk7CisgICAgICAgICAgICBjb25zb2xlLmxvZygiICAgIEN1cnJl
bnQgRm9vdHByaW50OiIsIHVpRnJpZW5kbHlOdW1iZXIodGhpcy5jdXJyZW50Rm9vdHByaW50KSk7
CisgICAgICAgICAgICBjb25zb2xlLmxvZygiICAgIFBlYWsgRm9vdHByaW50OiIsIHVpRnJpZW5k
bHlOdW1iZXIodGhpcy5wZWFrRm9vdHByaW50KSk7CiAgICAgICAgIH0KLSAgICAgICAgcHJpbnQo
IiAgICBXYWxsIHRpbWU6IiwgdWlGcmllbmRseUR1cmF0aW9uKG5ldyBEYXRlKHRoaXMuZW5kVGlt
ZSAtIHRoaXMuc3RhcnRUaW1lKSkpOworICAgICAgICBjb25zb2xlLmxvZygiICAgIFdhbGwgdGlt
ZToiLCB1aUZyaWVuZGx5RHVyYXRpb24obmV3IERhdGUodGhpcy5lbmRUaW1lIC0gdGhpcy5zdGFy
dFRpbWUpKSk7CiAgICAgfQogfQogCkBAIC04MTksMTQgKzgxOSwxNCBAQCBjbGFzcyBXU0xCZW5j
aG1hcmsgZXh0ZW5kcyBCZW5jaG1hcmsgewogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9
CiAKLSAgICAgICAgcHJpbnQoIiAgICBTdGRsaWI6IiwgdWlGcmllbmRseU51bWJlcih0aGlzLnN0
ZGxpYikpOwotICAgICAgICBwcmludCgiICAgIFRlc3RzOiIsIHVpRnJpZW5kbHlOdW1iZXIodGhp
cy5tYWluUnVuKSk7Ci0gICAgICAgIHByaW50KCIgICAgU2NvcmU6IiwgdWlGcmllbmRseU51bWJl
cih0aGlzLnNjb3JlKSk7CisgICAgICAgIGNvbnNvbGUubG9nKCIgICAgU3RkbGliOiIsIHVpRnJp
ZW5kbHlOdW1iZXIodGhpcy5zdGRsaWIpKTsKKyAgICAgICAgY29uc29sZS5sb2coIiAgICBUZXN0
czoiLCB1aUZyaWVuZGx5TnVtYmVyKHRoaXMubWFpblJ1bikpOworICAgICAgICBjb25zb2xlLmxv
ZygiICAgIFNjb3JlOiIsIHVpRnJpZW5kbHlOdW1iZXIodGhpcy5zY29yZSkpOwogICAgICAgICBp
ZiAoUkFNaWZpY2F0aW9uKSB7Ci0gICAgICAgICAgICBwcmludCgiICAgIEN1cnJlbnQgRm9vdHBy
aW50OiIsIHVpRnJpZW5kbHlOdW1iZXIodGhpcy5jdXJyZW50Rm9vdHByaW50KSk7Ci0gICAgICAg
ICAgICBwcmludCgiICAgIFBlYWsgRm9vdHByaW50OiIsIHVpRnJpZW5kbHlOdW1iZXIodGhpcy5w
ZWFrRm9vdHByaW50KSk7CisgICAgICAgICAgICBjb25zb2xlLmxvZygiICAgIEN1cnJlbnQgRm9v
dHByaW50OiIsIHVpRnJpZW5kbHlOdW1iZXIodGhpcy5jdXJyZW50Rm9vdHByaW50KSk7CisgICAg
ICAgICAgICBjb25zb2xlLmxvZygiICAgIFBlYWsgRm9vdHByaW50OiIsIHVpRnJpZW5kbHlOdW1i
ZXIodGhpcy5wZWFrRm9vdHByaW50KSk7CiAgICAgICAgIH0KLSAgICAgICAgcHJpbnQoIiAgICBX
YWxsIHRpbWU6IiwgdWlGcmllbmRseUR1cmF0aW9uKG5ldyBEYXRlKHRoaXMuZW5kVGltZSAtIHRo
aXMuc3RhcnRUaW1lKSkpOworICAgICAgICBjb25zb2xlLmxvZygiICAgIFdhbGwgdGltZToiLCB1
aUZyaWVuZGx5RHVyYXRpb24obmV3IERhdGUodGhpcy5lbmRUaW1lIC0gdGhpcy5zdGFydFRpbWUp
KSk7CiAgICAgfQogfTsKIApAQCAtOTc1LDEzICs5NzUsMTMgQEAgY2xhc3MgV2FzbUJlbmNobWFy
ayBleHRlbmRzIEJlbmNobWFyayB7CiAgICAgICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJ
ZCh0aGlzLnNjb3JlSUQpLmlubmVySFRNTCA9IHVpRnJpZW5kbHlOdW1iZXIodGhpcy5zY29yZSk7
CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KLSAgICAgICAgcHJpbnQoIiAgICBTdGFy
dHVwOiIsIHVpRnJpZW5kbHlOdW1iZXIodGhpcy5zdGFydHVwVGltZSkpOwotICAgICAgICBwcmlu
dCgiICAgIFJ1biB0aW1lOiIsIHVpRnJpZW5kbHlOdW1iZXIodGhpcy5ydW5UaW1lKSk7CisgICAg
ICAgIGNvbnNvbGUubG9nKCIgICAgU3RhcnR1cDoiLCB1aUZyaWVuZGx5TnVtYmVyKHRoaXMuc3Rh
cnR1cFRpbWUpKTsKKyAgICAgICAgY29uc29sZS5sb2coIiAgICBSdW4gdGltZToiLCB1aUZyaWVu
ZGx5TnVtYmVyKHRoaXMucnVuVGltZSkpOwogICAgICAgICBpZiAoUkFNaWZpY2F0aW9uKSB7Ci0g
ICAgICAgICAgICBwcmludCgiICAgIEN1cnJlbnQgRm9vdHByaW50OiIsIHVpRnJpZW5kbHlOdW1i
ZXIodGhpcy5jdXJyZW50Rm9vdHByaW50KSk7Ci0gICAgICAgICAgICBwcmludCgiICAgIFBlYWsg
Rm9vdHByaW50OiIsIHVpRnJpZW5kbHlOdW1iZXIodGhpcy5wZWFrRm9vdHByaW50KSk7CisgICAg
ICAgICAgICBjb25zb2xlLmxvZygiICAgIEN1cnJlbnQgRm9vdHByaW50OiIsIHVpRnJpZW5kbHlO
dW1iZXIodGhpcy5jdXJyZW50Rm9vdHByaW50KSk7CisgICAgICAgICAgICBjb25zb2xlLmxvZygi
ICAgIFBlYWsgRm9vdHByaW50OiIsIHVpRnJpZW5kbHlOdW1iZXIodGhpcy5wZWFrRm9vdHByaW50
KSk7CiAgICAgICAgIH0KLSAgICAgICAgcHJpbnQoIiAgICBTY29yZToiLCB1aUZyaWVuZGx5TnVt
YmVyKHRoaXMuc2NvcmUpKTsKKyAgICAgICAgY29uc29sZS5sb2coIiAgICBTY29yZToiLCB1aUZy
aWVuZGx5TnVtYmVyKHRoaXMuc2NvcmUpKTsKICAgICB9CiB9OwogCkluZGV4OiBQZXJmb3JtYW5j
ZVRlc3RzL0pldFN0cmVhbTIvd2FzbS1jbGkuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gUGVyZm9ybWFuY2VU
ZXN0cy9KZXRTdHJlYW0yL3dhc20tY2xpLmpzCShub25leGlzdGVudCkKKysrIFBlcmZvcm1hbmNl
VGVzdHMvSmV0U3RyZWFtMi93YXNtLWNsaS5qcwkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQ2
IEBACisKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisg
KiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICog
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyovCisKK2NvbnN0IGlzSW5Ccm93c2VyID0gZmFsc2U7Citjb25zb2xlID0g
eworICAgIGxvZzogKCkgPT4geyB9Cit9CisKK3Rlc3RMaXN0ID0gWyJIYXNoU2V0LXdhc20iLCAi
dHNmLXdhc20iLCAicXVpY2tzb3J0LXdhc20iLCAiZ2NjLWxvb3BzLXdhc20iLCAicmljaGFyZHMt
d2FzbSJdOworCitSQU1pZmljYXRpb24gPSBmYWxzZTsKKworbG9hZCgiLi9KZXRTdHJlYW1Ecml2
ZXIuanMiKTsKKworYXN5bmMgZnVuY3Rpb24gcnVuSmV0U3RyZWFtKCkgeworICAgIHRyeSB7Cisg
ICAgICAgIGF3YWl0IEpldFN0cmVhbS5pbml0aWFsaXplKCk7CisgICAgICAgIEpldFN0cmVhbS5z
dGFydCgpOworICAgIH0gY2F0Y2ggKGUpIHsKKyAgICAgICAgdGhyb3cgZTsKKyAgICB9Cit9City
dW5KZXRTdHJlYW0oKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjU4
MzUwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpA
QCAtMSwzICsxLDEwNCBAQAorMjAyMC0wMy0xMiAgU2FhbSBCYXJhdGkgIDxzYmFyYXRpQGFwcGxl
LmNvbT4KKworICAgICAgICBJbXBsZW1lbnQgMUdCIG9mIGV4ZWN1dGFibGUgbWVtb3J5IG9uIGFy
bTY0CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMDg0
OTAKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUaGlz
IHBhdGNoIGltcGxlbWVudHMgdGhlIDFHQiBleGVjdXRhYmxlIG1lbW9yeSBzcGFjZSBvbiBhcm02
NC4gVG8gbWFrZSB0aGlzCisgICAgICAgIHdvcmssIHdlIGltcGxlbWVudCBqdW1wcyBsYXJnZXIg
dGhhbiArLy0xMjhNQiB0byB1c2UganVtcCBpc2xhbmRzLiBKdW1wIGlzbGFuZHMKKyAgICAgICAg
d29yayBieSBzcGxpdHRpbmcgdXAgdGhlIH4xR0IgcmVnaW9uIGludG8gOSAxMTJNQiBjaHVua3Mg
KDEwMDggTUIgdG90YWwpLiBFYWNoCisgICAgICAgIGNodW5rIGlzIHNwbGl0IGludG8gdHdvOiA5
Nk1CIG9mIGV4ZWN1dGFibGUgcmVnaW9uLCBhbmQgMTZNQiBvZiBqdW1wIGlzbGFuZCByZWdpb24u
CisgICAgICAgIFdpdGggdGhpcyBzcGxpdCwgYW55IGp1bXAgaW5zaWRlIGEganVtcCBpc2xhbmQg
cmVnaW9uIGNhbiBnZXQgdG8gdGhlIGFkamFjZW50CisgICAgICAgIGlzbGFuZCAoZm9yd2FyZHMg
b3IgYmFja3dhcmRzKSBpbiBhIHNpbmdsZSArLy0xMjhNQiBqdW1wLiBXaGVuIGxpbmtpbmcgYSBq
dW1wCisgICAgICAgIGZyb20gQSB0byBCLCB3aGVyZSB8QSAtIEJ8ID4gMTI4TUIsIHdlIGluc3Rl
YWQgcG9pbnQgdGhlIGp1bXAgdG8gYW4gaXNsYW5kLAorICAgICAgICB3aGVyZSB0aGlzIGlzbGFu
ZCBoYXMgYSBwb3RlbnRpYWwgc2VyaWVzIG9mIGp1bXBzIHRoYXQgZmluYWxseSBsYW5kcyBhdCBC
LgorICAgICAgICAKKyAgICAgICAgVG8gYWxsb2NhdGUgZXhlY3V0YWJsZSBtZW1vcnksIHVzZSBh
IE1ldGFBbGxvY2F0b3IgZm9yIGVhY2ggOTZNQiBjaHVuay4gVG8KKyAgICAgICAgYWxsb2NhdGUg
aXNsYW5kcywgd2UgaGF2ZSBhIGJpdCB2ZWN0b3Igd2UgdXNlIHRvIHRyYWNrIHVzZWQgYW5kIGZy
ZWVkIGlzbGFuZHMuCisgICAgICAgIFdlIG9ubHkgZ3JvdyB0aGlzIGJpdCB2ZWN0b3IgYXMgaXNs
YW5kcyBhcmUgYWxsb2NhdGVkLCBzbyBpdCBmcmVxdWVudGx5CisgICAgICAgIHJlbWFpbnMgZW1w
dHkgb3IgdmVyeSBzbWFsbC4KKyAgICAgICAgCisgICAgICAgIFRoZSBnb2FsIG9mIHRoaXMgcGF0
Y2ggaXMgdG8gaGF2ZSBtaW5pbWFsIHBlcmYgaW1wYWN0IHdoZW4gbm90IHVzaW5nIGlzbGFuZHMs
CisgICAgICAgIHNvIHRoZSBkYXRhIHN0cnVjdHVyZXMgYXJlIGRlc2lnbmVkIHRvIG9ubHkgaW5j
dXIgb3ZlcmhlYWQgd2hlbiBhY3R1YWxseSB1c2luZworICAgICAgICBpc2xhbmRzLiBXZSBleHBl
Y3QgdGhlIHVzZSBvZiBpc2xhbmRzIHRvIGJlIG1pbmltYWwuIFdlIHVzZSBhIHJlZCBibGFjayB0
cmVlCisgICAgICAgIHRvIHRyYWNrIGFsbCBpc2xhbmQgbG9jYXRpb25zLiBUaGlzIGFsbG93cyB1
cyB0byBkZWFsbG9jYXRlIGFsbCBpc2xhbmRzIHdoZW4KKyAgICAgICAgYW4gZXhlY3V0YWJsZSBt
ZW1vcnkgaGFuZGxlIGlzIGZyZWVkLiBUeXBpY2FsbHksIHRoaXMgcmVkIGJsYWNrIHRyZWUgaXMg
ZW1wdHksCisgICAgICAgIHNvIGZyZWVpbmcgYW4gZXhlY3V0YWJsZSBtZW1vcnkgaGFuZGxlIGlu
Y3VycyBubyBleHRyYSBvdmVyaGVhZC4KKyAgICAgICAgCisgICAgICAgIFRvIG1ha2UgaXNsYW5k
cyB3b3JrIGZvciBXYXNtLCB3ZSBub3cgaGF2ZSB0byBsaW5rIHRpZXIgdXAgY29kZSBpbiB0d28g
cGhhc2VzLgorICAgICAgICBQcmV2aW91c2x5LCB3ZSB3b3VsZCBqdXN0IHBhdGNoIGp1bXBzIGNv
bmN1cnJlbnRseSB0byBXYXNtIHRocmVhZHMgcnVubmluZyBhZnRlcgorICAgICAgICByZXNldHRp
bmcgdGhlIGljYWNoZSwga25vd2luZyB0aGF0IHdlIHdvdWxkIGJlIGFibGUgdG8gYXRvbWljYWxs
eSB1cGRhdGUgdGhlIGp1bXAKKyAgICAgICAgaW5zdHJ1Y3Rpb24gdG8gcG9pbnQgdG8gdGhlIG5l
dyBkZXN0aW5hdGlvbi4gSG93ZXZlciwgbm93IHdoZW4gcmVwYXRjaGluZyB0aGVzZQorICAgICAg
ICBqdW1wcyBpbiBhIHdvcmxkIHdpdGgganVtcCBpc2xhbmRzLCB3ZSBtaWdodCBuZWVkIHRvIGFs
bG9jYXRlIGlzbGFuZHMgZGVwZW5kaW5nCisgICAgICAgIG9uIHRoZSBqdW1wIGxvY2F0aW9uIGFu
ZCBpdHMgdGFyZ2V0LiBTbyB3ZSBub3cgYWxsb2NhdGUgYW5kIGNvbGxlY3QgdGhlIHNldCBvZiBp
c2xhbmRzLAorICAgICAgICB0aGVuIHJlc2V0IHRoZSBpY2FjaGUsIHRoZW4gYXRvbWljYWxseSB1
cGRhdGUgdGhlIGJyYW5jaCB0byBwb2ludCB0byB0aGUgZGVzdGluYXRpb24KKyAgICAgICAgKG9y
IGFuIGlzbGFuZCB0aGF0IGp1bXBzIHRvIHRoZSBkZXN0aW5hdGlvbikuIE9uZSBpbXBvcnRhbnQg
aW1wbGVtZW50YXRpb24gZGV0YWlsCisgICAgICAgIGhlcmUgaXMgdGhhdCBmb3Igbm9ybWFsIGlz
bGFuZCByZXBhdGNoaW5nLCBpZiB3ZSBoYXZlIGEganVtcCBmcm9tIEEgdG8gQiwgYW5kIGl0Cisg
ICAgICAgIGFsbG9jYXRlcyBhIHNldCBpZiBpc2xhbmRzIFgsIHdlIHVzdWFsbHkgY2FuIGRlYWxs
b2NhdGUgWCB3aGVuIHJlcGF0Y2hpbmcgQSB0byBnbyB0byBCJy4KKyAgICAgICAgVGhpcyBpcyBi
ZWNhdXNlIHRoZSB0eXBpY2FsIHJlcGF0Y2ggc2NlbmFyaW8gaW4gSlMgaGFwcGVucyB3aGVuIHRo
YXQgY29kZSBpcyBub3QgYmVpbmcKKyAgICAgICAgZXhlY3V0ZWQuIEZvciBXYXNtIHRob3VnaCwg
dGhvc2UgaXNsYW5kcyBYIG1pZ2h0IGJlIHJ1bm5pbmcgd2hpbGUgd2Ugd2FudCB0byByZXBhdGNo
CisgICAgICAgIEEgdG8gZ28gdG8gQicuIFNvIGluc3RlYWQgb2YgZGVhbGxvY2F0aW5nIFgsIHdl
IGp1c3QgYXBwZW5kIHRvIFggaW4gdGhpcyBzY2VuYXJpbywgYW5kCisgICAgICAgIHdlIGZyZWUg
dGhlIG5ldyBzZXQgWCcgd2hlbiB0aGUgY29kZSBpdHNlbGYgaXMgZnJlZWQuCisgICAgICAgIAor
ICAgICAgICAoVGhpcyBwYXRjaCBhbHNvIGZpeGVzIGEgYnVnIGluIHRoZSBXYXNtIExMSW50IHRv
IEJCUSB0aWVyIHVwIHRoYXQgSSBzcG90dGVkLAorICAgICAgICB3aGVyZSB3ZSB3b3VsZCBwdWJs
aXNoIGEgTExJbnQgY2FsbGVlJ3MgQkJRIHJlcGxhY2VtZW50IGJlZm9yZSB3ZSBmaW5pc2hlZAor
ICAgICAgICBsaW5raW5nIHRoZSBvdXRnb2luZyBjYWxscyBvZiB0aGUgQkJRIHJlcGxhY2VtZW50
LikKKyAgICAgICAgCisgICAgICAgIFRoaXMgcGF0Y2ggYWxzbyByZW1vdmVzIHRoZSBvbGQgIkNv
ZGVQcm9maWxpbmciIGNvZGUgdGhhdCBoYXMgYmVlbiB1bnVzZWQgZm9yCisgICAgICAgIGEgbG9u
ZyB0aW1lLgorCisgICAgICAgICogSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvajoKKyAgICAgICAgKiBTb3VyY2VzLnR4dDoKKyAgICAgICAgKiBhc3NlbWJsZXIvQVJNNjRB
c3NlbWJsZXIuaDoKKyAgICAgICAgKEpTQzo6QVJNNjRBc3NlbWJsZXI6OmIpOgorICAgICAgICAo
SlNDOjpBUk02NEFzc2VtYmxlcjo6YmwpOgorICAgICAgICAoSlNDOjpBUk02NEFzc2VtYmxlcjo6
cmVwbGFjZVdpdGhKdW1wKToKKyAgICAgICAgKEpTQzo6QVJNNjRBc3NlbWJsZXI6OnByZXBhcmVG
b3JBdG9taWNSZWxpbmtKdW1wQ29uY3VycmVudGx5KToKKyAgICAgICAgKEpTQzo6QVJNNjRBc3Nl
bWJsZXI6OnByZXBhcmVGb3JBdG9taWNSZWxpbmtDYWxsQ29uY3VycmVudGx5KToKKyAgICAgICAg
KEpTQzo6QVJNNjRBc3NlbWJsZXI6OmNvbXB1dGVKdW1wVHlwZSk6CisgICAgICAgIChKU0M6OkFS
TTY0QXNzZW1ibGVyOjpjYW5FbWl0SnVtcCk6CisgICAgICAgIChKU0M6OkFSTTY0QXNzZW1ibGVy
OjpsaW5rSnVtcE9yQ2FsbCk6CisgICAgICAgIChKU0M6OkFSTTY0QXNzZW1ibGVyOjpsaW5rQ29t
cGFyZUFuZEJyYW5jaCk6CisgICAgICAgIChKU0M6OkFSTTY0QXNzZW1ibGVyOjpsaW5rQ29uZGl0
aW9uYWxCcmFuY2gpOgorICAgICAgICAoSlNDOjpBUk02NEFzc2VtYmxlcjo6bGlua1Rlc3RBbmRC
cmFuY2gpOgorICAgICAgICAqIGFzc2VtYmxlci9BYnN0cmFjdE1hY3JvQXNzZW1ibGVyLmg6Cisg
ICAgICAgIChKU0M6OkFic3RyYWN0TWFjcm9Bc3NlbWJsZXI6OnByZXBhcmVGb3JBdG9taWNSZXBh
dGNoTmVhckNhbGxDb25jdXJyZW50bHkpOgorICAgICAgICAqIGFzc2VtYmxlci9MaW5rQnVmZmVy
LmNwcDoKKyAgICAgICAgKEpTQzo6TGlua0J1ZmZlcjo6Y29weUNvbXBhY3RBbmRMaW5rQ29kZSk6
CisgICAgICAgIChKU0M6OkxpbmtCdWZmZXI6OmxpbmtDb2RlKToKKyAgICAgICAgKEpTQzo6TGlu
a0J1ZmZlcjo6YWxsb2NhdGUpOgorICAgICAgICAqIGFzc2VtYmxlci9MaW5rQnVmZmVyLmg6Cisg
ICAgICAgIChKU0M6OkxpbmtCdWZmZXI6OkxpbmtCdWZmZXIpOgorICAgICAgICAqIGFzc2VtYmxl
ci9NYWNyb0Fzc2VtYmxlckNvZGVSZWYuaDoKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJD
b2RlUmVmOjpNYWNyb0Fzc2VtYmxlckNvZGVSZWYpOgorICAgICAgICAqIGppdC9FeGVjdXRhYmxl
QWxsb2NhdG9yLmNwcDoKKyAgICAgICAgKEpTQzo6aW5pdGlhbGl6ZUpJVFBhZ2VSZXNlcnZhdGlv
bik6CisgICAgICAgIChKU0M6OkV4ZWN1dGFibGVBbGxvY2F0b3I6OmluaXRpYWxpemVVbmRlcmx5
aW5nQWxsb2NhdG9yKToKKyAgICAgICAgKEpTQzo6RXhlY3V0YWJsZUFsbG9jYXRvcjo6aXNWYWxp
ZCBjb25zdCk6CisgICAgICAgIChKU0M6OkV4ZWN1dGFibGVBbGxvY2F0b3I6OmFsbG9jYXRlKToK
KyAgICAgICAgKEpTQzo6RXhlY3V0YWJsZUFsbG9jYXRvcjo6Z2V0SnVtcElzbGFuZFRvKToKKyAg
ICAgICAgKEpTQzo6RXhlY3V0YWJsZUFsbG9jYXRvcjo6Z2V0SnVtcElzbGFuZFRvQ29uY3VycmVu
dGx5KToKKyAgICAgICAgKEpTQzo6Rml4ZWRWTVBvb2xFeGVjdXRhYmxlQWxsb2NhdG9yOjp+Rml4
ZWRWTVBvb2xFeGVjdXRhYmxlQWxsb2NhdG9yKTogRGVsZXRlZC4KKyAgICAgICAgKiBqaXQvRXhl
Y3V0YWJsZUFsbG9jYXRvci5oOgorICAgICAgICAoSlNDOjpFeGVjdXRhYmxlQWxsb2NhdG9yQmFz
ZTo6YWxsb2NhdGUpOgorICAgICAgICAqIHJ1bnRpbWUvQ29tbW9uU2xvd1BhdGhzLmNwcDoKKyAg
ICAgICAgKiBydW50aW1lL0NvbXBsZXRpb24uY3BwOgorICAgICAgICAoSlNDOjpldmFsdWF0ZSk6
CisgICAgICAgICogcnVudGltZS9KU01vZHVsZUxvYWRlci5jcHA6CisgICAgICAgIChKU0M6Om1v
ZHVsZUxvYWRlclBhcnNlTW9kdWxlKToKKyAgICAgICAgKiBydW50aW1lL09wdGlvbnNMaXN0Lmg6
CisgICAgICAgICogdG9vbHMvQ29kZVByb2ZpbGUuY3BwOiBSZW1vdmVkLgorICAgICAgICAqIHRv
b2xzL0NvZGVQcm9maWxlLmg6IFJlbW92ZWQuCisgICAgICAgICogdG9vbHMvQ29kZVByb2ZpbGlu
Zy5jcHA6IFJlbW92ZWQuCisgICAgICAgICogdG9vbHMvQ29kZVByb2ZpbGluZy5oOiBSZW1vdmVk
LgorICAgICAgICAqIHdhc20vV2FzbUJCUVBsYW4uY3BwOgorICAgICAgICAoSlNDOjpXYXNtOjpC
QlFQbGFuOjp3b3JrKToKKyAgICAgICAgKiB3YXNtL1dhc21PTUdGb3JPU1JFbnRyeVBsYW4uY3Bw
OgorICAgICAgICAoSlNDOjpXYXNtOjpPTUdGb3JPU1JFbnRyeVBsYW46OndvcmspOgorICAgICAg
ICAqIHdhc20vV2FzbU9NR1BsYW4uY3BwOgorICAgICAgICAoSlNDOjpXYXNtOjpPTUdQbGFuOjp3
b3JrKToKKwogMjAyMC0wMy0xMiAgWXVzdWtlIFN1enVraSAgPHlzdXp1a2lAYXBwbGUuY29tPgog
CiAgICAgICAgIFtKU0NdIFVzZSBDYWNoZWFibGVJZGVudGlmaWVyIGluIEJ5VmFsSW5mbwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL1NvdXJjZXMudHh0Cj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9Tb3VyY2VzLnR4dAkocmV2aXNpb24gMjU4MzUwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL1NvdXJjZXMudHh0CSh3b3JraW5nIGNvcHkpCkBAIC05OTUsOCArOTk1
LDYgQEAgcnVudGltZS9XaWRlbmluZ051bWJlclByZWRpY3Rpb25GdXp6ZXJBZwogSlNDQnVpbHRp
bnMuY3BwCiAKIHRvb2xzL0NlbGxMaXN0LmNwcAotdG9vbHMvQ29kZVByb2ZpbGUuY3BwCi10b29s
cy9Db2RlUHJvZmlsaW5nLmNwcAogdG9vbHMvQ29tcGlsZXJUaW1pbmdTY29wZS5jcHAKIHRvb2xz
L0Z1bmN0aW9uT3ZlcnJpZGVzLmNwcAogdG9vbHMvRnVuY3Rpb25XaGl0ZWxpc3QuY3BwCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3Qu
cGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENv
cmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gMjU4MzUwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJ
KHdvcmtpbmcgY29weSkKQEAgLTQwNzEsOCArNDA3MSw2IEBACiAJCTg2MDE2MUUwMEYzQTgzQzEw
MEY4NDcxMCAvKiBNYWNyb0Fzc2VtYmxlclg4Ni5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBNYWNyb0Fzc2VtYmxlclg4Ni5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQk4NjAxNjFFMTBGM0E4M0MxMDBGODQ3MTAgLyogTWFjcm9Bc3NlbWJsZXJYODZfNjQuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTWFjcm9Bc3NlbWJsZXJYODZfNjQuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJODYwMTYxRTIwRjNBODNDMTAwRjg0NzEwIC8qIE1h
Y3JvQXNzZW1ibGVyWDg2Q29tbW9uLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IE1hY3JvQXNzZW1ibGVyWDg2Q29tbW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0J
CTg2MDNDRUYyMTRDNzU0NjQwMEFFNTlFMyAvKiBDb2RlUHJvZmlsaW5nLmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IENvZGVQcm9maWxpbmcuY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwotCQk4NjAzQ0VGMzE0Qzc1NDY0MDBBRTU5RTMgLyogQ29kZVByb2Zp
bGluZy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBDb2RlUHJvZmlsaW5nLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTg2MDRGNEYyMTQzQTZDNDQwMEIyOTVGNSAv
KiBDaGFuZ2VMb2cgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5
cGUgPSB0ZXh0OyBsaW5lRW5kaW5nID0gMDsgcGF0aCA9IENoYW5nZUxvZzsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJODYwNkRERTkxOERBNDRBQjAwQTM4M0QwIC8qIElkZW50aWZpZXJJ
bmxpbmVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IElkZW50aWZpZXJJbmxp
bmVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTg2MTJFNENCMTUyMjkxODQwMEM4
MzZCRSAvKiBNYXRjaFJlc3VsdC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBN
YXRjaFJlc3VsdC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtNDExOCw4ICs0MTE2
LDYgQEAKIAkJODZBREQxNDMwRkRERUE5ODAwMDZGRkNDIC8qIEFSTXY3UmVnaXN0ZXJzLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEFSTXY3UmVnaXN0ZXJzLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTg2QUREMTQ0MEZEREVBOTgwMDA2RUVDMiAvKiBNYWNyb0Fz
c2VtYmxlckFSTXY3LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE1hY3JvQXNz
ZW1ibGVyQVJNdjcuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJODZCNTgyMkMxNEQy
MkY1RjAwQTlDMzA2IC8qIFByb2ZpbGVUcmVlTm9kZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBQcm9maWxlVHJlZU5vZGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
LQkJODZCNTgyMkUxNEQyMzczQjAwQTlDMzA2IC8qIENvZGVQcm9maWxlLmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IENvZGVQcm9maWxlLmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKLQkJODZCNTgyMkYxNEQyMzczQjAwQTlDMzA2IC8qIENvZGVQcm9maWxl
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENvZGVQcm9maWxlLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTg2QjU4MjZBMTREMzVENTEwMEE5QzMwNiAvKiBUaWVy
ZWRNTWFwQXJyYXkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVGllcmVkTU1h
cEFycmF5Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTg2QkY2NDJBMTQ4REIyQjUw
MDRERTM2QSAvKiBJbnRyaW5zaWMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
SW50cmluc2ljLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTg2QzM2RUU5MEVFMTI4
OUQwMEIzREY1OSAvKiBNYWNyb0Fzc2VtYmxlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBNYWNyb0Fzc2VtYmxlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAt
NzY3NywxMCArNzY3Myw2IEBACiAJCQkJRkUxQkQwMUIxRTcyMDAyMTAwMTM0QkM5IC8qIENlbGxM
aXN0LmNwcCAqLywKIAkJCQlGRTFCRDAxQzFFNzIwMDIxMDAxMzRCQzkgLyogQ2VsbExpc3QuaCAq
LywKIAkJCQlGRTFCRDAyMDFFNzIwMjcwMDAxMzRCQzkgLyogQ2VsbFByb2ZpbGUuaCAqLywKLQkJ
CQk4NkI1ODIyRTE0RDIzNzNCMDBBOUMzMDYgLyogQ29kZVByb2ZpbGUuY3BwICovLAotCQkJCTg2
QjU4MjJGMTREMjM3M0IwMEE5QzMwNiAvKiBDb2RlUHJvZmlsZS5oICovLAotCQkJCTg2MDNDRUYy
MTRDNzU0NjQwMEFFNTlFMyAvKiBDb2RlUHJvZmlsaW5nLmNwcCAqLywKLQkJCQk4NjAzQ0VGMzE0
Qzc1NDY0MDBBRTU5RTMgLyogQ29kZVByb2ZpbGluZy5oICovLAogCQkJCTBGNEYxMUU3MjA5QkNE
QTEwMDcwOTY1NCAvKiBDb21waWxlclRpbWluZ1Njb3BlLmNwcCAqLywKIAkJCQkwRjRGMTFFNjIw
OUJDREExMDA3MDk2NTQgLyogQ29tcGlsZXJUaW1pbmdTY29wZS5oICovLAogCQkJCUZFNEJGRjI5
MUFENDc2RTcwMDA4OEY4NyAvKiBGdW5jdGlvbk92ZXJyaWRlcy5jcHAgKi8sCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL0FSTTY0QXNzZW1ibGVyLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9BUk02NEFzc2VtYmxlci5oCShyZXZp
c2lvbiAyNTgzNTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL0FSTTY0QXNz
ZW1ibGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTc4MywxMiArNzgzLDkgQEAgcHVibGljOgogICAg
ICAgICBpbnNuKGRhdGFQcm9jZXNzaW5nMlNvdXJjZShEQVRBU0laRSwgcm0sIERhdGFPcF9BU1JW
LCBybiwgcmQpKTsKICAgICB9CiAKLSAgICBBTFdBWVNfSU5MSU5FIHZvaWQgYihpbnQzMl90IG9m
ZnNldCA9IDApCisgICAgQUxXQVlTX0lOTElORSB2b2lkIGIoKQogICAgIHsKLSAgICAgICAgQVNT
RVJUKCEob2Zmc2V0ICYgMykpOwotICAgICAgICBvZmZzZXQgPj49IDI7Ci0gICAgICAgIEFTU0VS
VChvZmZzZXQgPT0gKG9mZnNldCA8PCA2KSA+PiA2KTsKLSAgICAgICAgaW5zbih1bmNvbmRpdGlv
bmFsQnJhbmNoSW1tZWRpYXRlKGZhbHNlLCBvZmZzZXQpKTsKKyAgICAgICAgaW5zbih1bmNvbmRp
dGlvbmFsQnJhbmNoSW1tZWRpYXRlKGZhbHNlLCAwKSk7CiAgICAgfQogCiAgICAgQUxXQVlTX0lO
TElORSB2b2lkIGJfY29uZChDb25kaXRpb24gY29uZCwgaW50MzJfdCBvZmZzZXQgPSAwKQpAQCAt
ODMxLDExICs4MjgsOSBAQCBwdWJsaWM6CiAgICAgICAgIGluc24obG9naWNhbFNoaWZ0ZWRSZWdp
c3RlcihEQVRBU0laRSwgc2V0RmxhZ3MgPyBMb2dpY2FsT3BfQU5EUyA6IExvZ2ljYWxPcF9BTkQs
IHNoaWZ0LCB0cnVlLCBybSwgYW1vdW50LCBybiwgcmQpKTsKICAgICB9CiAKLSAgICBBTFdBWVNf
SU5MSU5FIHZvaWQgYmwoaW50MzJfdCBvZmZzZXQgPSAwKQorICAgIEFMV0FZU19JTkxJTkUgdm9p
ZCBibCgpCiAgICAgewotICAgICAgICBBU1NFUlQoIShvZmZzZXQgJiAzKSk7Ci0gICAgICAgIG9m
ZnNldCA+Pj0gMjsKLSAgICAgICAgaW5zbih1bmNvbmRpdGlvbmFsQnJhbmNoSW1tZWRpYXRlKHRy
dWUsIG9mZnNldCkpOworICAgICAgICBpbnNuKHVuY29uZGl0aW9uYWxCcmFuY2hJbW1lZGlhdGUo
dHJ1ZSwgMCkpOwogICAgIH0KIAogICAgIEFMV0FZU19JTkxJTkUgdm9pZCBibHIoUmVnaXN0ZXJJ
RCBybikKQEAgLTI1ODIsNiArMjU3NywxMyBAQCBwdWJsaWM6CiAgICAgewogICAgICAgICBpbnRw
dHJfdCBvZmZzZXQgPSAocmVpbnRlcnByZXRfY2FzdDxpbnRwdHJfdD4odG8pIC0gcmVpbnRlcnBy
ZXRfY2FzdDxpbnRwdHJfdD4od2hlcmUpKSA+PiAyOwogICAgICAgICBBU1NFUlQoc3RhdGljX2Nh
c3Q8aW50PihvZmZzZXQpID09IG9mZnNldCk7CisKKyAgICAgICAgaWYgKCFpc0ludDwyNj4ob2Zm
c2V0KSkgeworICAgICAgICAgICAgdG8gPSBFeGVjdXRhYmxlQWxsb2NhdG9yOjpzaW5nbGV0b24o
KS5nZXRKdW1wSXNsYW5kVG8od2hlcmUsIHRvKTsKKyAgICAgICAgICAgIG9mZnNldCA9IChiaXR3
aXNlX2Nhc3Q8aW50cHRyX3Q+KHRvKSAtIGJpdHdpc2VfY2FzdDxpbnRwdHJfdD4od2hlcmUpKSA+
PiAyOworICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoaXNJbnQ8MjY+KG9mZnNldCkpOworICAg
ICAgICB9CisKICAgICAgICAgaW50IGluc24gPSB1bmNvbmRpdGlvbmFsQnJhbmNoSW1tZWRpYXRl
KGZhbHNlLCBzdGF0aWNfY2FzdDxpbnQ+KG9mZnNldCkpOwogICAgICAgICBSRUxFQVNFX0FTU0VS
VChyb3VuZFVwVG9NdWx0aXBsZU9mPGluc3RydWN0aW9uU2l6ZT4od2hlcmUpID09IHdoZXJlKTsK
ICAgICAgICAgcGVyZm9ybUpJVE1lbWNweSh3aGVyZSwgJmluc24sIHNpemVvZihpbnQpKTsKQEAg
LTI3NzEsNiArMjc3MywyNSBAQCBwdWJsaWM6CiAgICAgICAgIHJlbGlua0p1bXBPckNhbGw8QnJh
bmNoVHlwZV9DQUxMPihyZWludGVycHJldF9jYXN0PGludCo+KGZyb20pIC0gMSwgcmVpbnRlcnBy
ZXRfY2FzdDxjb25zdCBpbnQqPihmcm9tKSAtIDEsIHRvKTsKICAgICAgICAgY2FjaGVGbHVzaChy
ZWludGVycHJldF9jYXN0PGludCo+KGZyb20pIC0gMSwgc2l6ZW9mKGludCkpOwogICAgIH0KKwor
I2lmIFVTRShKVU1QX0lTTEFORFMpCisgICAgc3RhdGljIHZvaWQqIHByZXBhcmVGb3JBdG9taWNS
ZWxpbmtKdW1wQ29uY3VycmVudGx5KHZvaWQqIGZyb20sIHZvaWQqIHRvKQorICAgIHsKKyAgICAg
ICAgaW50cHRyX3Qgb2Zmc2V0ID0gKGJpdHdpc2VfY2FzdDxpbnRwdHJfdD4odG8pIC0gYml0d2lz
ZV9jYXN0PGludHB0cl90Pihmcm9tKSkgPj4gMjsKKyAgICAgICAgQVNTRVJUKHN0YXRpY19jYXN0
PGludD4ob2Zmc2V0KSA9PSBvZmZzZXQpOworCisgICAgICAgIGlmIChpc0ludDwyNj4ob2Zmc2V0
KSkKKyAgICAgICAgICAgIHJldHVybiB0bzsKKworICAgICAgICByZXR1cm4gRXhlY3V0YWJsZUFs
bG9jYXRvcjo6c2luZ2xldG9uKCkuZ2V0SnVtcElzbGFuZFRvQ29uY3VycmVudGx5KGZyb20sIHRv
KTsKKyAgICB9CisKKyAgICBzdGF0aWMgdm9pZCogcHJlcGFyZUZvckF0b21pY1JlbGlua0NhbGxD
b25jdXJyZW50bHkodm9pZCogZnJvbSwgdm9pZCogdG8pCisgICAgeworICAgICAgICBmcm9tID0g
c3RhdGljX2Nhc3Q8dm9pZCo+KGJpdHdpc2VfY2FzdDxpbnQqPihmcm9tKSAtIDEpOworICAgICAg
ICByZXR1cm4gcHJlcGFyZUZvckF0b21pY1JlbGlua0p1bXBDb25jdXJyZW50bHkoZnJvbSwgdG8p
OworICAgIH0KKyNlbmRpZgogICAgIAogICAgIHN0YXRpYyB2b2lkIHJlcGF0Y2hDb21wYWN0KHZv
aWQqIHdoZXJlLCBpbnQzMl90IHZhbHVlKQogICAgIHsKQEAgLTI4NzIsNyArMjg5Myw3IEBAIHB1
YmxpYzoKICAgICAgICAgICAgICAgICByZXR1cm4gTGlua0p1bXBDb25kaXRpb25EaXJlY3Q7CiAK
ICAgICAgICAgICAgIHJldHVybiBMaW5rSnVtcENvbmRpdGlvbjsKLSAgICAgICAgICAgIH0KKyAg
ICAgICAgfQogICAgICAgICBjYXNlIEp1bXBDb21wYXJlQW5kQnJhbmNoOiAgewogICAgICAgICAg
ICAgQVNTRVJUKGlzNEJ5dGVBbGlnbmVkKGZyb20pKTsKICAgICAgICAgICAgIEFTU0VSVChpczRC
eXRlQWxpZ25lZCh0bykpOwpAQCAtMjk0NSw2ICsyOTY2LDEyIEBAIHB1YmxpYzoKICAgICAgICAg
fQogICAgIH0KIAorICAgIHN0YXRpYyBBTFdBWVNfSU5MSU5FIGJvb2wgY2FuRW1pdEp1bXAodm9p
ZCogZnJvbSwgdm9pZCogdG8pCisgICAgeworICAgICAgICBpbnRwdHJfdCBkaWZmID0gKGJpdHdp
c2VfY2FzdDxpbnRwdHJfdD4oZnJvbSkgLSBiaXR3aXNlX2Nhc3Q8aW50cHRyX3Q+KHRvKSkgPj4g
MjsKKyAgICAgICAgcmV0dXJuIGlzSW50PDI2PihkaWZmKTsKKyAgICB9CisKIHByb3RlY3RlZDoK
ICAgICB0ZW1wbGF0ZTxEYXRhc2l6ZSBzaXplPgogICAgIHN0YXRpYyBib29sIGNoZWNrTW92ayhp
bnQgaW5zbiwgaW50IF9odywgUmVnaXN0ZXJJRCBfcmQpCkBAIC0yOTk0LDkgKzMwMjEsMTUgQEAg
cHJvdGVjdGVkOgogICAgICAgICBBU1NFUlQoIShyZWludGVycHJldF9jYXN0PGludHB0cl90Pih0
bykgJiAzKSk7CiAgICAgICAgIGFzc2VydElzTm90VGFnZ2VkKHRvKTsKICAgICAgICAgYXNzZXJ0
SXNOb3RUYWdnZWQoZnJvbUluc3RydWN0aW9uKTsKLSAgICAgICAgaW50cHRyX3Qgb2Zmc2V0ID0g
KHJlaW50ZXJwcmV0X2Nhc3Q8aW50cHRyX3Q+KHRvKSAtIHJlaW50ZXJwcmV0X2Nhc3Q8aW50cHRy
X3Q+KGZyb21JbnN0cnVjdGlvbikpID4+IDI7CisgICAgICAgIGludHB0cl90IG9mZnNldCA9IChi
aXR3aXNlX2Nhc3Q8aW50cHRyX3Q+KHRvKSAtIGJpdHdpc2VfY2FzdDxpbnRwdHJfdD4oZnJvbUlu
c3RydWN0aW9uKSkgPj4gMjsKICAgICAgICAgQVNTRVJUKHN0YXRpY19jYXN0PGludD4ob2Zmc2V0
KSA9PSBvZmZzZXQpOwogCisgICAgICAgIGlmICghaXNJbnQ8MjY+KG9mZnNldCkpIHsKKyAgICAg
ICAgICAgIHRvID0gRXhlY3V0YWJsZUFsbG9jYXRvcjo6c2luZ2xldG9uKCkuZ2V0SnVtcElzbGFu
ZFRvKGJpdHdpc2VfY2FzdDx2b2lkKj4oZnJvbUluc3RydWN0aW9uKSwgdG8pOworICAgICAgICAg
ICAgb2Zmc2V0ID0gKGJpdHdpc2VfY2FzdDxpbnRwdHJfdD4odG8pIC0gYml0d2lzZV9jYXN0PGlu
dHB0cl90Pihmcm9tSW5zdHJ1Y3Rpb24pKSA+PiAyOworICAgICAgICAgICAgUkVMRUFTRV9BU1NF
UlQoaXNJbnQ8MjY+KG9mZnNldCkpOworICAgICAgICB9CisKICAgICAgICAgaW50IGluc24gPSB1
bmNvbmRpdGlvbmFsQnJhbmNoSW1tZWRpYXRlKGlzQ2FsbCwgc3RhdGljX2Nhc3Q8aW50PihvZmZz
ZXQpKTsKICAgICAgICAgUkVMRUFTRV9BU1NFUlQocm91bmRVcFRvTXVsdGlwbGVPZjxpbnN0cnVj
dGlvblNpemU+KGZyb20pID09IGZyb20pOwogICAgICAgICBjb3B5KGZyb20sICZpbnNuLCBzaXpl
b2YoaW50KSk7CkBAIC0zMDA4LDEyICszMDQxLDEyIEBAIHByb3RlY3RlZDoKICAgICAgICAgQVNT
RVJUKCEocmVpbnRlcnByZXRfY2FzdDxpbnRwdHJfdD4oZnJvbSkgJiAzKSk7CiAgICAgICAgIEFT
U0VSVCghKHJlaW50ZXJwcmV0X2Nhc3Q8aW50cHRyX3Q+KHRvKSAmIDMpKTsKICAgICAgICAgaW50
cHRyX3Qgb2Zmc2V0ID0gKHJlaW50ZXJwcmV0X2Nhc3Q8aW50cHRyX3Q+KHRvKSAtIHJlaW50ZXJw
cmV0X2Nhc3Q8aW50cHRyX3Q+KGZyb21JbnN0cnVjdGlvbikpID4+IDI7Ci0gICAgICAgIEFTU0VS
VChpc0ludDwyNj4ob2Zmc2V0KSk7CiAKICAgICAgICAgYm9vbCB1c2VEaXJlY3QgPSBpc0ludDwx
OT4ob2Zmc2V0KTsKICAgICAgICAgQVNTRVJUKHR5cGUgPT0gSW5kaXJlY3RCcmFuY2ggfHwgdXNl
RGlyZWN0KTsKIAogICAgICAgICBpZiAodXNlRGlyZWN0IHx8IHR5cGUgPT0gRGlyZWN0QnJhbmNo
KSB7CisgICAgICAgICAgICBBU1NFUlQoaXNJbnQ8MTk+KG9mZnNldCkpOwogICAgICAgICAgICAg
aW50IGluc24gPSBjb21wYXJlQW5kQnJhbmNoSW1tZWRpYXRlKGlzNjRCaXQgPyBEYXRhc2l6ZV82
NCA6IERhdGFzaXplXzMyLCBjb25kaXRpb24gPT0gQ29uZGl0aW9uTkUsIHN0YXRpY19jYXN0PGlu
dD4ob2Zmc2V0KSwgcnQpOwogICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQocm91bmRVcFRvTXVs
dGlwbGVPZjxpbnN0cnVjdGlvblNpemU+KGZyb20pID09IGZyb20pOwogICAgICAgICAgICAgY29w
eShmcm9tLCAmaW5zbiwgc2l6ZW9mKGludCkpOwpAQCAtMzAzNiwxMiArMzA2OSwxMiBAQCBwcm90
ZWN0ZWQ6CiAgICAgICAgIEFTU0VSVCghKHJlaW50ZXJwcmV0X2Nhc3Q8aW50cHRyX3Q+KGZyb20p
ICYgMykpOwogICAgICAgICBBU1NFUlQoIShyZWludGVycHJldF9jYXN0PGludHB0cl90Pih0bykg
JiAzKSk7CiAgICAgICAgIGludHB0cl90IG9mZnNldCA9IChyZWludGVycHJldF9jYXN0PGludHB0
cl90Pih0bykgLSByZWludGVycHJldF9jYXN0PGludHB0cl90Pihmcm9tSW5zdHJ1Y3Rpb24pKSA+
PiAyOwotICAgICAgICBBU1NFUlQoaXNJbnQ8MjY+KG9mZnNldCkpOwogCiAgICAgICAgIGJvb2wg
dXNlRGlyZWN0ID0gaXNJbnQ8MTk+KG9mZnNldCk7CiAgICAgICAgIEFTU0VSVCh0eXBlID09IElu
ZGlyZWN0QnJhbmNoIHx8IHVzZURpcmVjdCk7CiAKICAgICAgICAgaWYgKHVzZURpcmVjdCB8fCB0
eXBlID09IERpcmVjdEJyYW5jaCkgeworICAgICAgICAgICAgQVNTRVJUKGlzSW50PDE5PihvZmZz
ZXQpKTsKICAgICAgICAgICAgIGludCBpbnNuID0gY29uZGl0aW9uYWxCcmFuY2hJbW1lZGlhdGUo
c3RhdGljX2Nhc3Q8aW50PihvZmZzZXQpLCBjb25kaXRpb24pOwogICAgICAgICAgICAgUkVMRUFT
RV9BU1NFUlQocm91bmRVcFRvTXVsdGlwbGVPZjxpbnN0cnVjdGlvblNpemU+KGZyb20pID09IGZy
b20pOwogICAgICAgICAgICAgY29weShmcm9tLCAmaW5zbiwgc2l6ZW9mKGludCkpOwpAQCAtMzA2
NSwxMiArMzA5OCwxMiBAQCBwcm90ZWN0ZWQ6CiAgICAgICAgIEFTU0VSVCghKHJlaW50ZXJwcmV0
X2Nhc3Q8aW50cHRyX3Q+KHRvKSAmIDMpKTsKICAgICAgICAgaW50cHRyX3Qgb2Zmc2V0ID0gKHJl
aW50ZXJwcmV0X2Nhc3Q8aW50cHRyX3Q+KHRvKSAtIHJlaW50ZXJwcmV0X2Nhc3Q8aW50cHRyX3Q+
KGZyb21JbnN0cnVjdGlvbikpID4+IDI7CiAgICAgICAgIEFTU0VSVChzdGF0aWNfY2FzdDxpbnQ+
KG9mZnNldCkgPT0gb2Zmc2V0KTsKLSAgICAgICAgQVNTRVJUKGlzSW50PDI2PihvZmZzZXQpKTsK
IAogICAgICAgICBib29sIHVzZURpcmVjdCA9IGlzSW50PDE0PihvZmZzZXQpOwogICAgICAgICBB
U1NFUlQodHlwZSA9PSBJbmRpcmVjdEJyYW5jaCB8fCB1c2VEaXJlY3QpOwogCiAgICAgICAgIGlm
ICh1c2VEaXJlY3QgfHwgdHlwZSA9PSBEaXJlY3RCcmFuY2gpIHsKKyAgICAgICAgICAgIEFTU0VS
VChpc0ludDwxND4ob2Zmc2V0KSk7CiAgICAgICAgICAgICBpbnQgaW5zbiA9IHRlc3RBbmRCcmFu
Y2hJbW1lZGlhdGUoY29uZGl0aW9uID09IENvbmRpdGlvbk5FLCBzdGF0aWNfY2FzdDxpbnQ+KGJp
dE51bWJlciksIHN0YXRpY19jYXN0PGludD4ob2Zmc2V0KSwgcnQpOwogICAgICAgICAgICAgUkVM
RUFTRV9BU1NFUlQocm91bmRVcFRvTXVsdGlwbGVPZjxpbnN0cnVjdGlvblNpemU+KGZyb20pID09
IGZyb20pOwogICAgICAgICAgICAgY29weShmcm9tLCAmaW5zbiwgc2l6ZW9mKGludCkpOwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9BYnN0cmFjdE1hY3JvQXNzZW1ibGVy
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9BYnN0cmFj
dE1hY3JvQXNzZW1ibGVyLmgJKHJldmlzaW9uIDI1ODM1MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9hc3NlbWJsZXIvQWJzdHJhY3RNYWNyb0Fzc2VtYmxlci5oCSh3b3JraW5nIGNvcHkpCkBA
IC05MTksNiArOTE5LDIyIEBAIHB1YmxpYzoKICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JF
QUNIRUQoKTsKICAgICB9CiAKKyAgICB0ZW1wbGF0ZTxQdHJUYWcgY2FsbFRhZywgUHRyVGFnIGRl
c3RUYWc+CisgICAgc3RhdGljIENvZGVMb2NhdGlvbkxhYmVsPGRlc3RUYWc+IHByZXBhcmVGb3JB
dG9taWNSZXBhdGNoTmVhckNhbGxDb25jdXJyZW50bHkoQ29kZUxvY2F0aW9uTmVhckNhbGw8Y2Fs
bFRhZz4gbmVhckNhbGwsIENvZGVMb2NhdGlvbkxhYmVsPGRlc3RUYWc+IGRlc3RpbmF0aW9uKQor
ICAgIHsKKyNpZiBVU0UoSlVNUF9JU0xBTkRTKQorICAgICAgICBzd2l0Y2ggKG5lYXJDYWxsLmNh
bGxNb2RlKCkpIHsKKyAgICAgICAgY2FzZSBOZWFyQ2FsbE1vZGU6OlRhaWw6CisgICAgICAgICAg
ICByZXR1cm4gQ29kZUxvY2F0aW9uTGFiZWw8ZGVzdFRhZz4odGFnQ29kZVB0cjxkZXN0VGFnPihB
c3NlbWJsZXJUeXBlOjpwcmVwYXJlRm9yQXRvbWljUmVsaW5rSnVtcENvbmN1cnJlbnRseShuZWFy
Q2FsbC5kYXRhTG9jYXRpb24oKSwgZGVzdGluYXRpb24uZGF0YUxvY2F0aW9uKCkpKSk7CisgICAg
ICAgIGNhc2UgTmVhckNhbGxNb2RlOjpSZWd1bGFyOgorICAgICAgICAgICAgcmV0dXJuIENvZGVM
b2NhdGlvbkxhYmVsPGRlc3RUYWc+KHRhZ0NvZGVQdHI8ZGVzdFRhZz4oQXNzZW1ibGVyVHlwZTo6
cHJlcGFyZUZvckF0b21pY1JlbGlua0NhbGxDb25jdXJyZW50bHkobmVhckNhbGwuZGF0YUxvY2F0
aW9uKCksIGRlc3RpbmF0aW9uLnVudGFnZ2VkRXhlY3V0YWJsZUFkZHJlc3MoKSkpKTsKKyAgICAg
ICAgfQorI2Vsc2UKKyAgICAgICAgVU5VU0VEX1BBUkFNKG5lYXJDYWxsKTsKKyAgICAgICAgcmV0
dXJuIGRlc3RpbmF0aW9uOworI2VuZGlmCisgICAgfQorCiAgICAgdGVtcGxhdGU8UHRyVGFnIHRh
Zz4KICAgICBzdGF0aWMgdm9pZCByZXBhdGNoQ29tcGFjdChDb2RlTG9jYXRpb25EYXRhTGFiZWxD
b21wYWN0PHRhZz4gZGF0YUxhYmVsQ29tcGFjdCwgaW50MzJfdCB2YWx1ZSkKICAgICB7CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL0xpbmtCdWZmZXIuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTGlua0J1ZmZlci5jcHAJKHJl
dmlzaW9uIDI1ODM1MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTGlua0J1
ZmZlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEzMSw5ICsxMzEsOSBAQCBzdGF0aWMgQUxXQVlT
X0lOTElORSB2b2lkIHJlY29yZExpbmtPZmZzCiB9CiAKIHRlbXBsYXRlIDx0eXBlbmFtZSBJbnN0
cnVjdGlvblR5cGU+Ci12b2lkIExpbmtCdWZmZXI6OmNvcHlDb21wYWN0QW5kTGlua0NvZGUoTWFj
cm9Bc3NlbWJsZXImIG1hY3JvQXNzZW1ibGVyLCB2b2lkKiBvd25lclVJRCwgSklUQ29tcGlsYXRp
b25FZmZvcnQgZWZmb3J0KQordm9pZCBMaW5rQnVmZmVyOjpjb3B5Q29tcGFjdEFuZExpbmtDb2Rl
KE1hY3JvQXNzZW1ibGVyJiBtYWNyb0Fzc2VtYmxlciwgSklUQ29tcGlsYXRpb25FZmZvcnQgZWZm
b3J0KQogewotICAgIGFsbG9jYXRlKG1hY3JvQXNzZW1ibGVyLCBvd25lclVJRCwgZWZmb3J0KTsK
KyAgICBhbGxvY2F0ZShtYWNyb0Fzc2VtYmxlciwgZWZmb3J0KTsKICAgICBjb25zdCBzaXplX3Qg
aW5pdGlhbFNpemUgPSBtYWNyb0Fzc2VtYmxlci5tX2Fzc2VtYmxlci5jb2RlU2l6ZSgpOwogICAg
IGlmIChkaWRGYWlsVG9BbGxvY2F0ZSgpKQogICAgICAgICByZXR1cm47CkBAIC0yOTUsNyArMjk1
LDcgQEAgdm9pZCBMaW5rQnVmZmVyOjpjb3B5Q29tcGFjdEFuZExpbmtDb2RlKAogI2VuZGlmIC8v
IEVOQUJMRShCUkFOQ0hfQ09NUEFDVElPTikKIAogCi12b2lkIExpbmtCdWZmZXI6OmxpbmtDb2Rl
KE1hY3JvQXNzZW1ibGVyJiBtYWNyb0Fzc2VtYmxlciwgdm9pZCogb3duZXJVSUQsIEpJVENvbXBp
bGF0aW9uRWZmb3J0IGVmZm9ydCkKK3ZvaWQgTGlua0J1ZmZlcjo6bGlua0NvZGUoTWFjcm9Bc3Nl
bWJsZXImIG1hY3JvQXNzZW1ibGVyLCBKSVRDb21waWxhdGlvbkVmZm9ydCBlZmZvcnQpCiB7CiAg
ICAgLy8gRW5zdXJlIHRoYXQgdGhlIGVuZCBvZiB0aGUgbGFzdCBpbnZhbGlkYXRpb24gcG9pbnQg
ZG9lcyBub3QgZXh0ZW5kIGJleW9uZCB0aGUgZW5kIG9mIHRoZSBidWZmZXIuCiAgICAgbWFjcm9B
c3NlbWJsZXIubGFiZWwoKTsKQEAgLTMwNCw3ICszMDQsNyBAQCB2b2lkIExpbmtCdWZmZXI6Omxp
bmtDb2RlKE1hY3JvQXNzZW1ibGVyCiAjaWYgZGVmaW5lZChBU1NFTUJMRVJfSEFTX0NPTlNUQU5U
X1BPT0wpICYmIEFTU0VNQkxFUl9IQVNfQ09OU1RBTlRfUE9PTAogICAgIG1hY3JvQXNzZW1ibGVy
Lm1fYXNzZW1ibGVyLmJ1ZmZlcigpLmZsdXNoQ29uc3RhbnRQb29sKGZhbHNlKTsKICNlbmRpZgot
ICAgIGFsbG9jYXRlKG1hY3JvQXNzZW1ibGVyLCBvd25lclVJRCwgZWZmb3J0KTsKKyAgICBhbGxv
Y2F0ZShtYWNyb0Fzc2VtYmxlciwgZWZmb3J0KTsKICAgICBpZiAoIW1fZGlkQWxsb2NhdGUpCiAg
ICAgICAgIHJldHVybjsKICAgICBBU1NFUlQobV9jb2RlKTsKQEAgLTMxOCwxNSArMzE4LDE1IEBA
IHZvaWQgTGlua0J1ZmZlcjo6bGlua0NvZGUoTWFjcm9Bc3NlbWJsZXIKICAgICBtYWNyb0Fzc2Vt
Ymxlci5tX2Fzc2VtYmxlci5yZWxvY2F0ZUp1bXBzKGJ1ZmZlci5kYXRhKCksIGNvZGUpOwogI2Vu
ZGlmCiAjZWxpZiBDUFUoQVJNX1RIVU1CMikKLSAgICBjb3B5Q29tcGFjdEFuZExpbmtDb2RlPHVp
bnQxNl90PihtYWNyb0Fzc2VtYmxlciwgb3duZXJVSUQsIGVmZm9ydCk7CisgICAgY29weUNvbXBh
Y3RBbmRMaW5rQ29kZTx1aW50MTZfdD4obWFjcm9Bc3NlbWJsZXIsIGVmZm9ydCk7CiAjZWxpZiBD
UFUoQVJNNjQpCi0gICAgY29weUNvbXBhY3RBbmRMaW5rQ29kZTx1aW50MzJfdD4obWFjcm9Bc3Nl
bWJsZXIsIG93bmVyVUlELCBlZmZvcnQpOworICAgIGNvcHlDb21wYWN0QW5kTGlua0NvZGU8dWlu
dDMyX3Q+KG1hY3JvQXNzZW1ibGVyLCBlZmZvcnQpOwogI2VuZGlmIC8vICFFTkFCTEUoQlJBTkNI
X0NPTVBBQ1RJT04pCiAKICAgICBtX2xpbmtUYXNrcyA9IFdURk1vdmUobWFjcm9Bc3NlbWJsZXIu
bV9saW5rVGFza3MpOwogfQogCi12b2lkIExpbmtCdWZmZXI6OmFsbG9jYXRlKE1hY3JvQXNzZW1i
bGVyJiBtYWNyb0Fzc2VtYmxlciwgdm9pZCogb3duZXJVSUQsIEpJVENvbXBpbGF0aW9uRWZmb3J0
IGVmZm9ydCkKK3ZvaWQgTGlua0J1ZmZlcjo6YWxsb2NhdGUoTWFjcm9Bc3NlbWJsZXImIG1hY3Jv
QXNzZW1ibGVyLCBKSVRDb21waWxhdGlvbkVmZm9ydCBlZmZvcnQpCiB7CiAgICAgc2l6ZV90IGlu
aXRpYWxTaXplID0gbWFjcm9Bc3NlbWJsZXIubV9hc3NlbWJsZXIuY29kZVNpemUoKTsKICAgICBp
ZiAobV9jb2RlKSB7CkBAIC0zNDQsNyArMzQ0LDcgQEAgdm9pZCBMaW5rQnVmZmVyOjphbGxvY2F0
ZShNYWNyb0Fzc2VtYmxlcgogICAgICAgICBpbml0aWFsU2l6ZSA9IG1hY3JvQXNzZW1ibGVyLm1f
YXNzZW1ibGVyLmNvZGVTaXplKCk7CiAgICAgfQogCi0gICAgbV9leGVjdXRhYmxlTWVtb3J5ID0g
RXhlY3V0YWJsZUFsbG9jYXRvcjo6c2luZ2xldG9uKCkuYWxsb2NhdGUoaW5pdGlhbFNpemUsIG93
bmVyVUlELCBlZmZvcnQpOworICAgIG1fZXhlY3V0YWJsZU1lbW9yeSA9IEV4ZWN1dGFibGVBbGxv
Y2F0b3I6OnNpbmdsZXRvbigpLmFsbG9jYXRlKGluaXRpYWxTaXplLCBlZmZvcnQpOwogICAgIGlm
ICghbV9leGVjdXRhYmxlTWVtb3J5KQogICAgICAgICByZXR1cm47CiAgICAgbV9jb2RlID0gTWFj
cm9Bc3NlbWJsZXJDb2RlUHRyPExpbmtCdWZmZXJQdHJUYWc+KG1fZXhlY3V0YWJsZU1lbW9yeS0+
c3RhcnQoKS5yZXRhZ2dlZFB0cjxMaW5rQnVmZmVyUHRyVGFnPigpKTsKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTGlua0J1ZmZlci5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTGlua0J1ZmZlci5oCShyZXZpc2lvbiAyNTgzNTAp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL0xpbmtCdWZmZXIuaAkod29ya2lu
ZyBjb3B5KQpAQCAtOTAsNyArOTAsOCBAQCBwdWJsaWM6CiAgICAgICAgICwgbV9jb21wbGV0ZWQo
ZmFsc2UpCiAjZW5kaWYKICAgICB7Ci0gICAgICAgIGxpbmtDb2RlKG1hY3JvQXNzZW1ibGVyLCBv
d25lclVJRCwgZWZmb3J0KTsKKyAgICAgICAgVU5VU0VEX1BBUkFNKG93bmVyVUlEKTsKKyAgICAg
ICAgbGlua0NvZGUobWFjcm9Bc3NlbWJsZXIsIGVmZm9ydCk7CiAgICAgfQogCiAgICAgdGVtcGxh
dGU8UHRyVGFnIHRhZz4KQEAgLTEwNyw3ICsxMDgsNyBAQCBwdWJsaWM6CiAjZWxzZQogICAgICAg
ICBVTlVTRURfUEFSQU0oc2hvdWxkUGVyZm9ybUJyYW5jaENvbXBhY3Rpb24pOwogI2VuZGlmCi0g
ICAgICAgIGxpbmtDb2RlKG1hY3JvQXNzZW1ibGVyLCAwLCBlZmZvcnQpOworICAgICAgICBsaW5r
Q29kZShtYWNyb0Fzc2VtYmxlciwgZWZmb3J0KTsKICAgICB9CiAKICAgICB+TGlua0J1ZmZlcigp
CkBAIC0zMjEsMTIgKzMyMiwxMiBAQCBwcml2YXRlOgogICAgICAgICByZXR1cm4gbV9jb2RlLmRh
dGFMb2NhdGlvbigpOwogICAgIH0KICAgICAKLSAgICB2b2lkIGFsbG9jYXRlKE1hY3JvQXNzZW1i
bGVyJiwgdm9pZCogb3duZXJVSUQsIEpJVENvbXBpbGF0aW9uRWZmb3J0KTsKKyAgICB2b2lkIGFs
bG9jYXRlKE1hY3JvQXNzZW1ibGVyJiwgSklUQ29tcGlsYXRpb25FZmZvcnQpOwogCi0gICAgSlNf
RVhQT1JUX1BSSVZBVEUgdm9pZCBsaW5rQ29kZShNYWNyb0Fzc2VtYmxlciYsIHZvaWQqIG93bmVy
VUlELCBKSVRDb21waWxhdGlvbkVmZm9ydCk7CisgICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBs
aW5rQ29kZShNYWNyb0Fzc2VtYmxlciYsIEpJVENvbXBpbGF0aW9uRWZmb3J0KTsKICNpZiBFTkFC
TEUoQlJBTkNIX0NPTVBBQ1RJT04pCiAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIEluc3RydWN0aW9u
VHlwZT4KLSAgICB2b2lkIGNvcHlDb21wYWN0QW5kTGlua0NvZGUoTWFjcm9Bc3NlbWJsZXImLCB2
b2lkKiBvd25lclVJRCwgSklUQ29tcGlsYXRpb25FZmZvcnQpOworICAgIHZvaWQgY29weUNvbXBh
Y3RBbmRMaW5rQ29kZShNYWNyb0Fzc2VtYmxlciYsIEpJVENvbXBpbGF0aW9uRWZmb3J0KTsKICNl
bmRpZgogCiAgICAgdm9pZCBwZXJmb3JtRmluYWxpemF0aW9uKCk7CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyQ29kZVJlZi5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJDb2RlUmVm
LmgJKHJldmlzaW9uIDI1ODM1MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIv
TWFjcm9Bc3NlbWJsZXJDb2RlUmVmLmgJKHdvcmtpbmcgY29weSkKQEAgLTQzNCw3ICs0MzQsNiBA
QCBwdWJsaWM6CiAgICAgICAgIDogbV9jb2RlUHRyKGV4ZWN1dGFibGVNZW1vcnktPnN0YXJ0KCku
cmV0YWdnZWRQdHI8dGFnPigpKQogICAgICAgICAsIG1fZXhlY3V0YWJsZU1lbW9yeShXVEZNb3Zl
KGV4ZWN1dGFibGVNZW1vcnkpKQogICAgIHsKLSAgICAgICAgQVNTRVJUKG1fZXhlY3V0YWJsZU1l
bW9yeS0+aXNNYW5hZ2VkKCkpOwogICAgICAgICBBU1NFUlQobV9leGVjdXRhYmxlTWVtb3J5LT5z
dGFydCgpKTsKICAgICAgICAgQVNTRVJUKG1fY29kZVB0cik7CiAgICAgfQpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9FeGVjdXRhYmxlQWxsb2NhdG9yLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0V4ZWN1dGFibGVBbGxvY2F0b3IuY3BwCShyZXZp
c2lvbiAyNTgzNTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0V4ZWN1dGFibGVBbGxv
Y2F0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw5ICsyOCwxMCBAQAogCiAjaWYgRU5BQkxF
KEpJVCkKIAotI2luY2x1ZGUgIkNvZGVQcm9maWxpbmcuaCIKICNpbmNsdWRlICJFeGVjdXRhYmxl
QWxsb2NhdGlvbkZ1enouaCIKKyNpbmNsdWRlICJJdGVyYXRpb25TdGF0dXMuaCIKICNpbmNsdWRl
ICJKU0NJbmxpbmVzLmgiCisjaW5jbHVkZSA8dHlwZV90cmFpdHM+CiAjaW5jbHVkZSA8d3RmL0Zp
bGVTeXN0ZW0uaD4KICNpbmNsdWRlIDx3dGYvTWV0YUFsbG9jYXRvci5oPgogI2luY2x1ZGUgPHd0
Zi9QYWdlUmVzZXJ2YXRpb24uaD4KQEAgLTk2LDkgKzk3LDIwIEBAIHN0YXRpYyBjb25zdGV4cHIg
c2l6ZV90IGZpeGVkRXhlY3V0YWJsZU0KICNlbGlmIENQVShBUk0pCiBzdGF0aWMgY29uc3RleHBy
IHNpemVfdCBmaXhlZEV4ZWN1dGFibGVNZW1vcnlQb29sU2l6ZSA9IDE2ICogMTAyNCAqIDEwMjQ7
CiAjZWxpZiBDUFUoQVJNNjQpCisjaWYgVVNFKEpVTVBfSVNMQU5EUykKK3N0YXRpYyBjb25zdGV4
cHIgc2l6ZV90IGZpeGVkRXhlY3V0YWJsZU1lbW9yeVBvb2xTaXplID0gMSAqIDEwMjQgKiAxMDI0
ICogMTAyNDsKKy8vIFRoZXNlIHNpemVzIGd1YXJhbnRlZSB0aGF0IGFueSBqdW1wIHdpdGhpbiBh
biBpc2xhbmQgY2FuIGp1bXAgZm9yd2FyZHMgb3IgYmFja3dhcmRzCisvLyB0byB0aGUgYWRqYWNl
bnQgaXNsYW5kIGluIGEgc2luZ2xlIGluc3RydWN0aW9uLgorc3RhdGljIGNvbnN0ZXhwciBzaXpl
X3QgcmVnaW9uU2l6ZSA9IDExMiAqIDEwMjQgKiAxMDI0Oworc3RhdGljIGNvbnN0ZXhwciBzaXpl
X3QgaXNsYW5kUmVnaW9uU2l6ZSA9IDE2ICogMTAyNCAqIDEwMjQ7CitzdGF0aWMgY29uc3RleHBy
IHNpemVfdCBudW1iZXJPZlJlZ2lvbnMgPSBmaXhlZEV4ZWN1dGFibGVNZW1vcnlQb29sU2l6ZSAv
IHJlZ2lvblNpemU7CitzdGF0aWMgY29uc3RleHByIHNpemVfdCBpc2xhbmRTaXplSW5CeXRlcyA9
IDQ7CitzdGF0aWMgY29uc3RleHByIHNpemVfdCBtYXhJc2xhbmRzUGVyUmVnaW9uID0gaXNsYW5k
UmVnaW9uU2l6ZSAvIGlzbGFuZFNpemVJbkJ5dGVzOworI2Vsc2UKIHN0YXRpYyBjb25zdGV4cHIg
c2l6ZV90IGZpeGVkRXhlY3V0YWJsZU1lbW9yeVBvb2xTaXplID0gMTI4ICogMTAyNCAqIDEwMjQ7
CisjZW5kaWYKICNlbGlmIENQVShYODZfNjQpCi1zdGF0aWMgY29uc3RleHByIHNpemVfdCBmaXhl
ZEV4ZWN1dGFibGVNZW1vcnlQb29sU2l6ZSA9IDEwMjQgKiAxMDI0ICogMTAyNDsKK3N0YXRpYyBj
b25zdGV4cHIgc2l6ZV90IGZpeGVkRXhlY3V0YWJsZU1lbW9yeVBvb2xTaXplID0gMSAqIDEwMjQg
KiAxMDI0ICogMTAyNDsKICNlbHNlCiBzdGF0aWMgY29uc3RleHByIHNpemVfdCBmaXhlZEV4ZWN1
dGFibGVNZW1vcnlQb29sU2l6ZSA9IDMyICogMTAyNCAqIDEwMjQ7CiAjZW5kaWYKQEAgLTMxMywx
MCArMzI1LDExIEBAIHN0YXRpYyBBTFdBWVNfSU5MSU5FIEpJVFJlc2VydmF0aW9uIGluaXQKICAg
ICBpZiAoIWlzSklURW5hYmxlZCgpKQogICAgICAgICByZXR1cm4gcmVzZXJ2YXRpb247CiAKKyAg
ICByZXNlcnZhdGlvbi5zaXplID0gZml4ZWRFeGVjdXRhYmxlTWVtb3J5UG9vbFNpemU7CisjaWYg
IVVTRShKVU1QX0lTTEFORFMpCiAgICAgaWYgKE9wdGlvbnM6OmppdE1lbW9yeVJlc2VydmF0aW9u
U2l6ZSgpKQogICAgICAgICByZXNlcnZhdGlvbi5zaXplID0gT3B0aW9uczo6aml0TWVtb3J5UmVz
ZXJ2YXRpb25TaXplKCk7Ci0gICAgZWxzZQotICAgICAgICByZXNlcnZhdGlvbi5zaXplID0gZml4
ZWRFeGVjdXRhYmxlTWVtb3J5UG9vbFNpemU7CisjZW5kaWYKICAgICByZXNlcnZhdGlvbi5zaXpl
ID0gc3RkOjptYXgocm91bmRVcFRvTXVsdGlwbGVPZihwYWdlU2l6ZSgpLCByZXNlcnZhdGlvbi5z
aXplKSwgcGFnZVNpemUoKSAqIDIpOwogCiAgICAgYXV0byB0cnlDcmVhdGVQYWdlUmVzZXJ2YXRp
b24gPSBbXSAoc2l6ZV90IHJlc2VydmF0aW9uU2l6ZSkgewpAQCAtMzYzLDUyICszNzYsNDQ3IEBA
IHN0YXRpYyBBTFdBWVNfSU5MSU5FIEpJVFJlc2VydmF0aW9uIGluaXQKICAgICByZXR1cm4gcmVz
ZXJ2YXRpb247CiB9CiAKLWNsYXNzIEZpeGVkVk1Qb29sRXhlY3V0YWJsZUFsbG9jYXRvciBmaW5h
bCA6IHB1YmxpYyBNZXRhQWxsb2NhdG9yIHsKK2NsYXNzIEZpeGVkVk1Qb29sRXhlY3V0YWJsZUFs
bG9jYXRvciBmaW5hbCB7CiAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CisKKyNpZiBVU0Uo
SlVNUF9JU0xBTkRTKQorICAgIGNsYXNzIElzbGFuZHM7CisgICAgY2xhc3MgUmVnaW9uQWxsb2Nh
dG9yOworI2VuZGlmCisKIHB1YmxpYzoKICAgICBGaXhlZFZNUG9vbEV4ZWN1dGFibGVBbGxvY2F0
b3IoKQotICAgICAgICA6IE1ldGFBbGxvY2F0b3Ioaml0QWxsb2NhdGlvbkdyYW51bGUpIC8vIHJv
dW5kIHVwIGFsbCBhbGxvY2F0aW9ucyB0byAzMiBieXRlcworI2lmIFVTRShKVU1QX0lTTEFORFMp
CisgICAgICAgIDogbV9hbGxvY2F0b3JzKGNvbnN0cnVjdEZpeGVkU2l6ZUFycmF5V2l0aEFyZ3Vt
ZW50czxSZWdpb25BbGxvY2F0b3IsIG51bWJlck9mUmVnaW9ucz4oKnRoaXMpKQorI2Vsc2UKKyAg
ICAgICAgOiBtX2FsbG9jYXRvcigqdGhpcykKKyNlbmRpZgogICAgIHsKICAgICAgICAgSklUUmVz
ZXJ2YXRpb24gcmVzZXJ2YXRpb24gPSBpbml0aWFsaXplSklUUGFnZVJlc2VydmF0aW9uKCk7CiAg
ICAgICAgIG1fcmVzZXJ2YXRpb24gPSBXVEZNb3ZlKHJlc2VydmF0aW9uLnBhZ2VSZXNlcnZhdGlv
bik7CiAgICAgICAgIGlmIChtX3Jlc2VydmF0aW9uKSB7Ci0gICAgICAgICAgICBhZGRGcmVzaEZy
ZWVTcGFjZShyZXNlcnZhdGlvbi5iYXNlLCByZXNlcnZhdGlvbi5zaXplKTsKKyNpZiBVU0UoSlVN
UF9JU0xBTkRTKQorICAgICAgICAgICAgdWludHB0cl90IHN0YXJ0ID0gYml0d2lzZV9jYXN0PHVp
bnRwdHJfdD4obV9yZXNlcnZhdGlvbi5iYXNlKCkpOworICAgICAgICAgICAgdWludHB0cl90IHJl
c2VydmF0aW9uRW5kID0gc3RhcnQgKyBtX3Jlc2VydmF0aW9uLnNpemUoKTsKKyAgICAgICAgICAg
IGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbnVtYmVyT2ZSZWdpb25zOyArK2kpIHsKKyAgICAgICAg
ICAgICAgICBSRUxFQVNFX0FTU0VSVChzdGFydCA8IHJlc2VydmF0aW9uRW5kKTsKKyAgICAgICAg
ICAgICAgICBtX2FsbG9jYXRvcnNbaV0ubV9zdGFydCA9IHRhZ0NvZGVQdHI8RXhlY3V0YWJsZU1l
bW9yeVB0clRhZz4oYml0d2lzZV9jYXN0PHZvaWQqPihzdGFydCkpOworICAgICAgICAgICAgICAg
IG1fYWxsb2NhdG9yc1tpXS5tX2VuZCA9IHRhZ0NvZGVQdHI8RXhlY3V0YWJsZU1lbW9yeVB0clRh
Zz4oYml0d2lzZV9jYXN0PHZvaWQqPihzdGFydCArIHJlZ2lvblNpemUpKTsKKyAgICAgICAgICAg
ICAgICBpZiAobV9hbGxvY2F0b3JzW2ldLmVuZCgpID4gcmVzZXJ2YXRpb25FbmQpIHsKKyAgICAg
ICAgICAgICAgICAgICAgLy8gV2UgbWF5IGhhdmUgdGFrZW4gYSBwYWdlIGZvciB0aGUgZXhlY3V0
YWJsZSBvbmx5IGNvcHkgdGh1bmsuCisgICAgICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJU
KGkgPT0gbnVtYmVyT2ZSZWdpb25zIC0gMSk7CisgICAgICAgICAgICAgICAgICAgIG1fYWxsb2Nh
dG9yc1tpXS5tX2VuZCA9IHRhZ0NvZGVQdHI8RXhlY3V0YWJsZU1lbW9yeVB0clRhZz4oYml0d2lz
ZV9jYXN0PHZvaWQqPihyZXNlcnZhdGlvbkVuZCkpOworICAgICAgICAgICAgICAgIH0KKworICAg
ICAgICAgICAgICAgIG1fYWxsb2NhdG9yc1tpXS5hZGRGcmVzaEZyZWVTcGFjZShiaXR3aXNlX2Nh
c3Q8dm9pZCo+KG1fYWxsb2NhdG9yc1tpXS5zdGFydCgpKSwgbV9hbGxvY2F0b3JzW2ldLmFsbG9j
YXRvclNpemUoKSk7CisKKyAgICAgICAgICAgICAgICBzdGFydCArPSByZWdpb25TaXplOworICAg
ICAgICAgICAgfQorI2Vsc2UKKyAgICAgICAgICAgIG1fYWxsb2NhdG9yLmFkZEZyZXNoRnJlZVNw
YWNlKHJlc2VydmF0aW9uLmJhc2UsIHJlc2VydmF0aW9uLnNpemUpOworI2VuZGlmCisKICAgICAg
ICAgICAgIEFTU0VSVChieXRlc1Jlc2VydmVkKCkgPT0gcmVzZXJ2YXRpb24uc2l6ZSk7IC8vIFNp
bmNlIG91ciBleGVjdXRhYmxlIG1lbW9yeSBpcyBmaXhlZC1zaXplZCwgYnl0ZXNSZXNlcnZlZCBp
cyBuZXZlciBjaGFuZ2VkIGFmdGVyIGluaXRpYWxpemF0aW9uLgogICAgICAgICB9CiAgICAgfQog
Ci0gICAgdmlydHVhbCB+Rml4ZWRWTVBvb2xFeGVjdXRhYmxlQWxsb2NhdG9yKCk7CisgICAgfkZp
eGVkVk1Qb29sRXhlY3V0YWJsZUFsbG9jYXRvcigpCisgICAgeworICAgICAgICBtX3Jlc2VydmF0
aW9uLmRlYWxsb2NhdGUoKTsKKyAgICB9CiAKICAgICB2b2lkKiBtZW1vcnlTdGFydCgpIHsgcmV0
dXJuIHVudGFnQ29kZVB0cjxFeGVjdXRhYmxlTWVtb3J5UHRyVGFnPihnX2pzY0NvbmZpZy5zdGFy
dEV4ZWN1dGFibGVNZW1vcnkpOyB9CiAgICAgdm9pZCogbWVtb3J5RW5kKCkgeyByZXR1cm4gdW50
YWdDb2RlUHRyPEV4ZWN1dGFibGVNZW1vcnlQdHJUYWc+KGdfanNjQ29uZmlnLmVuZEV4ZWN1dGFi
bGVNZW1vcnkpOyB9CiAgICAgYm9vbCBpc0pJVFBDKHZvaWQqIHBjKSB7IHJldHVybiBtZW1vcnlT
dGFydCgpIDw9IHBjICYmIHBjIDwgbWVtb3J5RW5kKCk7IH0KKyAgICBib29sIGlzVmFsaWQoKSB7
IHJldHVybiAhIW1fcmVzZXJ2YXRpb247IH0KIAotcHJvdGVjdGVkOgotICAgIEZyZWVTcGFjZVB0
ciBhbGxvY2F0ZU5ld1NwYWNlKHNpemVfdCYpIG92ZXJyaWRlCisgICAgUmVmUHRyPEV4ZWN1dGFi
bGVNZW1vcnlIYW5kbGU+IGFsbG9jYXRlKHNpemVfdCBzaXplSW5CeXRlcykKICAgICB7Ci0gICAg
ICAgIC8vIFdlJ3JlIG9wZXJhdGluZyBpbiBhIGZpeGVkIHBvb2wsIHNvIG5ldyBhbGxvY2F0aW9u
IGlzIGFsd2F5cyBwcm9oaWJpdGVkLgorI2lmIFVTRShKVU1QX0lTTEFORFMpCisgICAgICAgIGF1
dG8gbG9ja2VyID0gaG9sZExvY2soZ2V0TG9jaygpKTsKKworICAgICAgICB1bnNpZ25lZCBzdGFy
dCA9IDA7CisgICAgICAgIGlmIChPcHRpb25zOjp1c2VSYW5kb21pemluZ0V4ZWN1dGFibGVJc2xh
bmRBbGxvY2F0aW9uKCkpCisgICAgICAgICAgICBzdGFydCA9IGNyeXB0b2dyYXBoaWNhbGx5UmFu
ZG9tTnVtYmVyKCkgJSBtX2FsbG9jYXRvcnMuc2l6ZSgpOworCisgICAgICAgIHVuc2lnbmVkIGkg
PSBzdGFydDsKKyAgICAgICAgd2hpbGUgKHRydWUpIHsKKyAgICAgICAgICAgIFJlZ2lvbkFsbG9j
YXRvciYgYWxsb2NhdG9yID0gbV9hbGxvY2F0b3JzW2ldOworICAgICAgICAgICAgaWYgKFJlZlB0
cjxFeGVjdXRhYmxlTWVtb3J5SGFuZGxlPiByZXN1bHQgPSBhbGxvY2F0b3IuYWxsb2NhdGUobG9j
a2VyLCBzaXplSW5CeXRlcykpCisgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAg
ICAgICAgIGkgPSAoaSArIDEpICUgbV9hbGxvY2F0b3JzLnNpemUoKTsKKyAgICAgICAgICAgIGlm
IChpID09IHN0YXJ0KQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CiAgICAgICAg
IHJldHVybiBudWxscHRyOworI2Vsc2UKKyAgICAgICAgcmV0dXJuIG1fYWxsb2NhdG9yLmFsbG9j
YXRlKHNpemVJbkJ5dGVzKTsKKyNlbmRpZiAvLyBVU0UoSlVNUF9JU0xBTkRTKQorICAgIH0KKwor
ICAgIExvY2smIGdldExvY2soKSB7IHJldHVybiBtX2xvY2s7IH0KKworICAgIC8vIE5vbiBhdG9t
aWMKKyAgICBzaXplX3QgYnl0ZXNBbGxvY2F0ZWQoKSAKKyAgICB7CisgICAgICAgIHNpemVfdCBy
ZXN1bHQgPSAwOworICAgICAgICBmb3JFYWNoQWxsb2NhdG9yKFsmXSAoQWxsb2NhdG9yJiBhbGxv
Y2F0b3IpIHsKKyAgICAgICAgICAgIHJlc3VsdCArPSBhbGxvY2F0b3IuYnl0ZXNBbGxvY2F0ZWQo
KTsKKyAgICAgICAgfSk7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorICAgIHNpemVf
dCBieXRlc1Jlc2VydmVkKCkgCisgICAgeworICAgICAgICBzaXplX3QgcmVzdWx0ID0gMDsKKyAg
ICAgICAgZm9yRWFjaEFsbG9jYXRvcihbJl0gKEFsbG9jYXRvciYgYWxsb2NhdG9yKSB7CisgICAg
ICAgICAgICByZXN1bHQgKz0gYWxsb2NhdG9yLmJ5dGVzUmVzZXJ2ZWQoKTsKKyAgICAgICAgfSk7
CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorICAgIHNpemVfdCBieXRlc0NvbW1pdHRl
ZCgpCisgICAgeworICAgICAgICBzaXplX3QgcmVzdWx0ID0gMDsKKyAgICAgICAgZm9yRWFjaEFs
bG9jYXRvcihbJl0gKEFsbG9jYXRvciYgYWxsb2NhdG9yKSB7CisgICAgICAgICAgICByZXN1bHQg
Kz0gYWxsb2NhdG9yLmJ5dGVzQ29tbWl0dGVkKCk7CisgICAgICAgIH0pOworICAgICAgICByZXR1
cm4gcmVzdWx0OworICAgIH0KKworICAgIGJvb2wgaXNJbkFsbG9jYXRlZE1lbW9yeShjb25zdCBB
YnN0cmFjdExvY2tlciYgbG9ja2VyLCB2b2lkKiBhZGRyZXNzKQorICAgIHsKKyNpZiBVU0UoSlVN
UF9JU0xBTkRTKQorICAgICAgICBpZiAoUmVnaW9uQWxsb2NhdG9yKiBhbGxvY2F0b3IgPSBmaW5k
UmVnaW9uKGJpdHdpc2VfY2FzdDx1aW50cHRyX3Q+KGFkZHJlc3MpKSkKKyAgICAgICAgICAgIHJl
dHVybiBhbGxvY2F0b3ItPmlzSW5BbGxvY2F0ZWRNZW1vcnkobG9ja2VyLCBhZGRyZXNzKTsKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworI2Vsc2UKKyAgICAgICAgcmV0dXJuIG1fYWxsb2NhdG9yLmlz
SW5BbGxvY2F0ZWRNZW1vcnkobG9ja2VyLCBhZGRyZXNzKTsKKyNlbmRpZgorICAgIH0KKworI2lm
IEVOQUJMRShNRVRBX0FMTE9DQVRPUl9QUk9GSUxFKQorICAgIHZvaWQgZHVtcFByb2ZpbGUoKQor
ICAgIHsKKyAgICAgICAgZm9yRWFjaEFsbG9jYXRvcihbJl0gKEFsbG9jYXRvciYgYWxsb2NhdG9y
KSB7CisgICAgICAgICAgICBhbGxvY2F0b3IuZHVtcFByb2ZpbGUoKTsKKyAgICAgICAgfSk7Cisg
ICAgfQorI2VuZGlmCisKKyAgICBNZXRhQWxsb2NhdG9yOjpTdGF0aXN0aWNzIGN1cnJlbnRTdGF0
aXN0aWNzKCkKKyAgICB7CisgICAgICAgIGF1dG8gbG9ja2VyID0gaG9sZExvY2soZ2V0TG9jaygp
KTsKKyAgICAgICAgTWV0YUFsbG9jYXRvcjo6U3RhdGlzdGljcyByZXN1bHQgeyAwLCAwLCAwIH07
CisgICAgICAgIGZvckVhY2hBbGxvY2F0b3IoWyZdIChBbGxvY2F0b3ImIGFsbG9jYXRvcikgewor
ICAgICAgICAgICAgYXV0byBhbGxvY2F0b3JTdGF0cyA9IGFsbG9jYXRvci5jdXJyZW50U3RhdGlz
dGljcyhsb2NrZXIpOworICAgICAgICAgICAgcmVzdWx0LmJ5dGVzQWxsb2NhdGVkICs9IGFsbG9j
YXRvclN0YXRzLmJ5dGVzQWxsb2NhdGVkOworICAgICAgICAgICAgcmVzdWx0LmJ5dGVzUmVzZXJ2
ZWQgKz0gYWxsb2NhdG9yU3RhdHMuYnl0ZXNSZXNlcnZlZDsKKyAgICAgICAgICAgIHJlc3VsdC5i
eXRlc0NvbW1pdHRlZCArPSBhbGxvY2F0b3JTdGF0cy5ieXRlc0NvbW1pdHRlZDsKKyAgICAgICAg
fSk7CisgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgfQogCi0gICAgdm9pZCBub3RpZnlOZWVk
UGFnZSh2b2lkKiBwYWdlLCBzaXplX3QgY291bnQpIG92ZXJyaWRlCisjaWYgVVNFKEpVTVBfSVNM
QU5EUykKKyAgICB2b2lkIGhhbmRsZVdpbGxCZVJlbGVhc2VkKGNvbnN0IExvY2tIb2xkZXImIGxv
Y2tlciwgTWV0YUFsbG9jYXRvckhhbmRsZSYgaGFuZGxlKQogICAgIHsKLSAgICAgICAgbV9yZXNl
cnZhdGlvbi5jb21taXQocGFnZSwgcGFnZVNpemUoKSAqIGNvdW50KTsKKyAgICAgICAgaWYgKGlz
bGFuZHNGb3JKdW1wTG9jYXRpb24uaXNFbXB0eSgpKQorICAgICAgICAgICAgcmV0dXJuOworCisg
ICAgICAgIFZlY3RvcjxJc2xhbmRzKiwgMTY+IHRvUmVtb3ZlOworICAgICAgICB2b2lkKiBzdGFy
dCA9IGhhbmRsZS5zdGFydCgpLnVudGFnZ2VkUHRyKCk7CisgICAgICAgIHZvaWQqIGVuZCA9IGhh
bmRsZS5lbmQoKS51bnRhZ2dlZFB0cigpOworICAgICAgICBpc2xhbmRzRm9ySnVtcExvY2F0aW9u
Lml0ZXJhdGUoWyZdIChJc2xhbmRzJiBpc2xhbmRzLCBib29sJiB2aXNpdExlZnQsIGJvb2wmIHZp
c2l0UmlnaHQpIHsKKyAgICAgICAgICAgIGlmIChzdGFydCA8PSBpc2xhbmRzLmtleSgpICYmIGlz
bGFuZHMua2V5KCkgPCBlbmQpCisgICAgICAgICAgICAgICAgdG9SZW1vdmUuYXBwZW5kKCZpc2xh
bmRzKTsKKyAgICAgICAgICAgIGlmIChpc2xhbmRzLmtleSgpID4gc3RhcnQpCisgICAgICAgICAg
ICAgICAgdmlzaXRMZWZ0ID0gdHJ1ZTsKKyAgICAgICAgICAgIGlmIChpc2xhbmRzLmtleSgpIDwg
ZW5kKQorICAgICAgICAgICAgICAgIHZpc2l0UmlnaHQgPSB0cnVlOworICAgICAgICB9KTsKKwor
ICAgICAgICBmb3IgKElzbGFuZHMqIGlzbGFuZHMgOiB0b1JlbW92ZSkKKyAgICAgICAgICAgIGZy
ZWVJc2xhbmRzKGxvY2tlciwgaXNsYW5kcyk7CisKKyAgICAgICAgaWYgKEFTU0VSVF9FTkFCTEVE
KSB7CisgICAgICAgICAgICBpc2xhbmRzRm9ySnVtcExvY2F0aW9uLml0ZXJhdGUoWyZdIChJc2xh
bmRzJiBpc2xhbmRzLCBib29sJiB2aXNpdExlZnQsIGJvb2wmIHZpc2l0UmlnaHQpIHsKKyAgICAg
ICAgICAgICAgICBpZiAoc3RhcnQgPD0gaXNsYW5kcy5rZXkoKSAmJiBpc2xhbmRzLmtleSgpIDwg
ZW5kKSB7CisgICAgICAgICAgICAgICAgICAgIGRhdGFMb2dMbigiZGlkIG5vdCByZW1vdmUgZXZl
cnl0aGluZyEiKTsKKyAgICAgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNI
RUQoKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgdmlzaXRMZWZ0ID0gdHJ1
ZTsKKyAgICAgICAgICAgICAgICB2aXNpdFJpZ2h0ID0gdHJ1ZTsKKyAgICAgICAgICAgIH0pOwor
ICAgICAgICB9CiAgICAgfQogCi0gICAgdm9pZCBub3RpZnlQYWdlSXNGcmVlKHZvaWQqIHBhZ2Us
IHNpemVfdCBjb3VudCkgb3ZlcnJpZGUKKyAgICB2b2lkKiBtYWtlSXNsYW5kKHVpbnRwdHJfdCBq
dW1wTG9jYXRpb24sIHVpbnRwdHJfdCBuZXdUYXJnZXQsIGJvb2wgY29uY3VycmVudGx5KQogICAg
IHsKLSAgICAgICAgbV9yZXNlcnZhdGlvbi5kZWNvbW1pdChwYWdlLCBwYWdlU2l6ZSgpICogY291
bnQpOworICAgICAgICBhdXRvIGxvY2tlciA9IGhvbGRMb2NrKGdldExvY2soKSk7CisgICAgICAg
IHJldHVybiBpc2xhbmRGb3JKdW1wTG9jYXRpb24obG9ja2VyLCBqdW1wTG9jYXRpb24sIG5ld1Rh
cmdldCwgY29uY3VycmVudGx5KTsKICAgICB9CiAKIHByaXZhdGU6CisgICAgUmVnaW9uQWxsb2Nh
dG9yKiBmaW5kUmVnaW9uKHVpbnRwdHJfdCBwdHIpCisgICAgeworICAgICAgICBSZWdpb25BbGxv
Y2F0b3IqIHJlc3VsdCA9IG51bGxwdHI7CisgICAgICAgIGZvckVhY2hBbGxvY2F0b3IoWyZdIChS
ZWdpb25BbGxvY2F0b3ImIGFsbG9jYXRvcikgeworICAgICAgICAgICAgaWYgKGFsbG9jYXRvci5z
dGFydCgpIDw9IHB0ciAmJiBwdHIgPCBhbGxvY2F0b3IuZW5kKCkpIHsKKyAgICAgICAgICAgICAg
ICByZXN1bHQgPSAmYWxsb2NhdG9yOworICAgICAgICAgICAgICAgIHJldHVybiBJdGVyYXRpb25T
dGF0dXM6OkRvbmU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gSXRlcmF0aW9u
U3RhdHVzOjpDb250aW51ZTsKKyAgICAgICAgfSk7CisgICAgICAgIHJldHVybiByZXN1bHQ7Cisg
ICAgfQorCisgICAgdm9pZCBmcmVlSnVtcElzbGFuZHMoY29uc3QgTG9ja0hvbGRlciYsIElzbGFu
ZHMqIGlzbGFuZHMpCisgICAgeworICAgICAgICBmb3IgKENvZGVMb2NhdGlvbkxhYmVsPEV4ZWN1
dGFibGVNZW1vcnlQdHJUYWc+IGp1bXBJc2xhbmQgOiBpc2xhbmRzLT5qdW1wSXNsYW5kcykgewor
ICAgICAgICAgICAgdWludHB0cl90IHVudGFnZ2VkSnVtcElzbGFuZCA9IGJpdHdpc2VfY2FzdDx1
aW50cHRyX3Q+KGp1bXBJc2xhbmQuZGF0YUxvY2F0aW9uKCkpOworICAgICAgICAgICAgUmVnaW9u
QWxsb2NhdG9yKiBhbGxvY2F0b3IgPSBmaW5kUmVnaW9uKHVudGFnZ2VkSnVtcElzbGFuZCk7Cisg
ICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChhbGxvY2F0b3IpOworICAgICAgICAgICAgYWxsb2Nh
dG9yLT5mcmVlSXNsYW5kKHVudGFnZ2VkSnVtcElzbGFuZCk7CisgICAgICAgIH0KKyAgICAgICAg
aXNsYW5kcy0+anVtcElzbGFuZHMuY2xlYXIoKTsKKyAgICB9CisKKyAgICB2b2lkIGZyZWVJc2xh
bmRzKGNvbnN0IExvY2tIb2xkZXImIGxvY2tlciwgSXNsYW5kcyogaXNsYW5kcykKKyAgICB7Cisg
ICAgICAgIGZyZWVKdW1wSXNsYW5kcyhsb2NrZXIsIGlzbGFuZHMpOworICAgICAgICBpc2xhbmRz
Rm9ySnVtcExvY2F0aW9uLnJlbW92ZShpc2xhbmRzKTsKKyAgICAgICAgZGVsZXRlIGlzbGFuZHM7
CisgICAgfQorCisgICAgdm9pZCogaXNsYW5kRm9ySnVtcExvY2F0aW9uKGNvbnN0IExvY2tIb2xk
ZXImIGxvY2tlciwgdWludHB0cl90IGp1bXBMb2NhdGlvbiwgdWludHB0cl90IHRhcmdldCwgYm9v
bCBjb25jdXJyZW50bHkpCisgICAgeworICAgICAgICBJc2xhbmRzKiBpc2xhbmRzID0gaXNsYW5k
c0Zvckp1bXBMb2NhdGlvbi5maW5kRXhhY3QoYml0d2lzZV9jYXN0PHZvaWQqPihqdW1wTG9jYXRp
b24pKTsKKyAgICAgICAgaWYgKGlzbGFuZHMpIHsKKyAgICAgICAgICAgIC8vIEZJWE1FOiBXZSBj
b3VsZCBjcmVhdGUgc29tZSBtZXRob2Qgb2YgcmV1c2luZyBhbHJlYWR5IGFsbG9jYXRlZCBpc2xh
bmRzIGhlcmUsIGJ1dCBpdCdzCisgICAgICAgICAgICAvLyB1bmxpa2VseSB0byBtYXR0ZXIgaW4g
cHJhY3RpY2UuCisgICAgICAgICAgICBpZiAoIWNvbmN1cnJlbnRseSkKKyAgICAgICAgICAgICAg
ICBmcmVlSnVtcElzbGFuZHMobG9ja2VyLCBpc2xhbmRzKTsKKyAgICAgICAgfSBlbHNlIHsKKyAg
ICAgICAgICAgIGlzbGFuZHMgPSBuZXcgSXNsYW5kczsKKyAgICAgICAgICAgIGlzbGFuZHMtPnJv
b3RKdW1wTG9jYXRpb24gPSBDb2RlTG9jYXRpb25MYWJlbDxFeGVjdXRhYmxlTWVtb3J5UHRyVGFn
Pih0YWdDb2RlUHRyPEV4ZWN1dGFibGVNZW1vcnlQdHJUYWc+KGJpdHdpc2VfY2FzdDx2b2lkKj4o
anVtcExvY2F0aW9uKSkpOworICAgICAgICAgICAgaXNsYW5kc0Zvckp1bXBMb2NhdGlvbi5pbnNl
cnQoaXNsYW5kcyk7CisgICAgICAgIH0KKworICAgICAgICBSZWdpb25BbGxvY2F0b3IqIGFsbG9j
YXRvciA9IGZpbmRSZWdpb24oanVtcExvY2F0aW9uID4gdGFyZ2V0ID8ganVtcExvY2F0aW9uIC0g
cmVnaW9uU2l6ZSA6IGp1bXBMb2NhdGlvbik7CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKGFsbG9j
YXRvcik7CisgICAgICAgIHZvaWQqIHJlc3VsdCA9IGFsbG9jYXRvci0+YWxsb2NhdGVJc2xhbmQo
KTsKKyAgICAgICAgdm9pZCogY3VycmVudElzbGFuZCA9IHJlc3VsdDsKKyAgICAgICAganVtcExv
Y2F0aW9uID0gYml0d2lzZV9jYXN0PHVpbnRwdHJfdD4oY3VycmVudElzbGFuZCk7CisgICAgICAg
IHdoaWxlICh0cnVlKSB7CisgICAgICAgICAgICBpc2xhbmRzLT5qdW1wSXNsYW5kcy5hcHBlbmQo
Q29kZUxvY2F0aW9uTGFiZWw8RXhlY3V0YWJsZU1lbW9yeVB0clRhZz4odGFnQ29kZVB0cjxFeGVj
dXRhYmxlTWVtb3J5UHRyVGFnPihjdXJyZW50SXNsYW5kKSkpOworCisgICAgICAgICAgICBhdXRv
IGVtaXRKdW1wVG8gPSBbJl0gKHZvaWQqIHRhcmdldCkgeworICAgICAgICAgICAgICAgIFJFTEVB
U0VfQVNTRVJUKEFSTTY0QXNzZW1ibGVyOjpjYW5FbWl0SnVtcChiaXR3aXNlX2Nhc3Q8dm9pZCo+
KGp1bXBMb2NhdGlvbiksIHRhcmdldCkpOworCisgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJz
IGppdDsKKyAgICAgICAgICAgICAgICBhdXRvIGp1bXAgPSBqaXQuanVtcCgpOworICAgICAgICAg
ICAgICAgIExpbmtCdWZmZXIgbGlua0J1ZmZlcihqaXQsIE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxO
b1B0clRhZz4oY3VycmVudElzbGFuZCksIGlzbGFuZFNpemVJbkJ5dGVzLCBKSVRDb21waWxhdGlv
bk11c3RTdWNjZWVkLCBmYWxzZSk7CisgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQobGlu
a0J1ZmZlci5pc1ZhbGlkKCkpOworICAgICAgICAgICAgICAgIGxpbmtCdWZmZXIubGluayhqdW1w
LCBDb2RlTG9jYXRpb25MYWJlbDxOb1B0clRhZz4odGFyZ2V0KSk7CisgICAgICAgICAgICAgICAg
RklOQUxJWkVfQ09ERShsaW5rQnVmZmVyLCBOb1B0clRhZywgIkp1bXAgSXNsYW5kOiAlbHUiLCBq
dW1wTG9jYXRpb24pOworICAgICAgICAgICAgfTsKKworICAgICAgICAgICAgaWYgKEFSTTY0QXNz
ZW1ibGVyOjpjYW5FbWl0SnVtcChiaXR3aXNlX2Nhc3Q8dm9pZCo+KGp1bXBMb2NhdGlvbiksIGJp
dHdpc2VfY2FzdDx2b2lkKj4odGFyZ2V0KSkpIHsKKyAgICAgICAgICAgICAgICBlbWl0SnVtcFRv
KGJpdHdpc2VfY2FzdDx2b2lkKj4odGFyZ2V0KSk7CisgICAgICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHVpbnRwdHJfdCBuZXh0SXNsYW5kUmVnaW9uOwor
ICAgICAgICAgICAgaWYgKGp1bXBMb2NhdGlvbiA+IHRhcmdldCkKKyAgICAgICAgICAgICAgICBu
ZXh0SXNsYW5kUmVnaW9uID0ganVtcExvY2F0aW9uIC0gcmVnaW9uU2l6ZTsKKyAgICAgICAgICAg
IGVsc2UKKyAgICAgICAgICAgICAgICBuZXh0SXNsYW5kUmVnaW9uID0ganVtcExvY2F0aW9uICsg
cmVnaW9uU2l6ZTsKKworICAgICAgICAgICAgUmVnaW9uQWxsb2NhdG9yKiBhbGxvY2F0b3IgPSBm
aW5kUmVnaW9uKG5leHRJc2xhbmRSZWdpb24pOworICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQo
YWxsb2NhdG9yKTsKKyAgICAgICAgICAgIHZvaWQqIG5leHRJc2xhbmQgPSBhbGxvY2F0b3ItPmFs
bG9jYXRlSXNsYW5kKCk7CisgICAgICAgICAgICBlbWl0SnVtcFRvKG5leHRJc2xhbmQpOworICAg
ICAgICAgICAganVtcExvY2F0aW9uID0gYml0d2lzZV9jYXN0PHVpbnRwdHJfdD4obmV4dElzbGFu
ZCk7CisgICAgICAgICAgICBjdXJyZW50SXNsYW5kID0gbmV4dElzbGFuZDsKKyAgICAgICAgfQor
CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorI2VuZGlmIC8vIFVTRShKVU1QX0lTTEFO
RFMpCisKK3ByaXZhdGU6CisgICAgY2xhc3MgQWxsb2NhdG9yIDogcHVibGljIE1ldGFBbGxvY2F0
b3IgeworICAgICAgICB1c2luZyBCYXNlID0gTWV0YUFsbG9jYXRvcjsKKyAgICBwdWJsaWM6Cisg
ICAgICAgIEFsbG9jYXRvcihGaXhlZFZNUG9vbEV4ZWN1dGFibGVBbGxvY2F0b3ImIGFsbG9jYXRv
cikKKyAgICAgICAgICAgIDogQmFzZShhbGxvY2F0b3IuZ2V0TG9jaygpLCBqaXRBbGxvY2F0aW9u
R3JhbnVsZSwgcGFnZVNpemUoKSkgLy8gcm91bmQgdXAgYWxsIGFsbG9jYXRpb25zIHRvIDMyIGJ5
dGVzCisgICAgICAgICAgICAsIG1fZml4ZWRBbGxvY2F0b3IoYWxsb2NhdG9yKQorICAgICAgICB7
CisgICAgICAgIH0KKworICAgICAgICBGcmVlU3BhY2VQdHIgYWxsb2NhdGVOZXdTcGFjZShzaXpl
X3QmKSBvdmVycmlkZQorICAgICAgICB7CisgICAgICAgICAgICAvLyBXZSdyZSBvcGVyYXRpbmcg
aW4gYSBmaXhlZCBwb29sLCBzbyBuZXcgYWxsb2NhdGlvbiBpcyBhbHdheXMgcHJvaGliaXRlZC4K
KyAgICAgICAgICAgIHJldHVybiBudWxscHRyOworICAgICAgICB9CisKKyAgICAgICAgdm9pZCBu
b3RpZnlOZWVkUGFnZSh2b2lkKiBwYWdlLCBzaXplX3QgY291bnQpIG92ZXJyaWRlCisgICAgICAg
IHsKKyAgICAgICAgICAgIG1fZml4ZWRBbGxvY2F0b3IubV9yZXNlcnZhdGlvbi5jb21taXQocGFn
ZSwgcGFnZVNpemUoKSAqIGNvdW50KTsKKyAgICAgICAgfQorCisgICAgICAgIHZvaWQgbm90aWZ5
UGFnZUlzRnJlZSh2b2lkKiBwYWdlLCBzaXplX3QgY291bnQpIG92ZXJyaWRlCisgICAgICAgIHsK
KyAgICAgICAgICAgIG1fZml4ZWRBbGxvY2F0b3IubV9yZXNlcnZhdGlvbi5kZWNvbW1pdChwYWdl
LCBwYWdlU2l6ZSgpICogY291bnQpOworICAgICAgICB9CisKKyAgICAgICAgRml4ZWRWTVBvb2xF
eGVjdXRhYmxlQWxsb2NhdG9yJiBtX2ZpeGVkQWxsb2NhdG9yOworICAgIH07CisKKyNpZiBVU0Uo
SlVNUF9JU0xBTkRTKQorICAgIGNsYXNzIFJlZ2lvbkFsbG9jYXRvciBmaW5hbCA6IHB1YmxpYyBB
bGxvY2F0b3IgeworICAgICAgICB1c2luZyBCYXNlID0gQWxsb2NhdG9yOworICAgIHB1YmxpYzoK
KyAgICAgICAgUmVnaW9uQWxsb2NhdG9yKEZpeGVkVk1Qb29sRXhlY3V0YWJsZUFsbG9jYXRvciYg
YWxsb2NhdG9yKQorICAgICAgICAgICAgOiBCYXNlKGFsbG9jYXRvcikKKyAgICAgICAgeworICAg
ICAgICB9CisKKyAgICAgICAgLy8gIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LQorICAgICAgICAvLyAgfCBqaXQgYWxsb2NhdGlvbnMgLS0+ICAgPC0tIGlzbGFuZHMgfAorICAg
ICAgICAvLyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgICAgICAg
IHVpbnRwdHJfdCBzdGFydCgpIHsgcmV0dXJuIGJpdHdpc2VfY2FzdDx1aW50cHRyX3Q+KHVudGFn
Q29kZVB0cjxFeGVjdXRhYmxlTWVtb3J5UHRyVGFnPihtX3N0YXJ0KSk7IH0KKyAgICAgICAgdWlu
dHB0cl90IGVuZCgpIHsgcmV0dXJuIGJpdHdpc2VfY2FzdDx1aW50cHRyX3Q+KHVudGFnQ29kZVB0
cjxFeGVjdXRhYmxlTWVtb3J5UHRyVGFnPihtX2VuZCkpOyB9CisKKyAgICAgICAgdWludHB0cl90
IGlzbGFuZEJlZ2luKCkKKyAgICAgICAgeworICAgICAgICAgICAgLy8gW3N0YXJ0LCBhbGxvY2F0
b3JFbmQpCisgICAgICAgICAgICByZXR1cm4gZW5kKCkgLSBpc2xhbmRSZWdpb25TaXplOworICAg
ICAgICB9CisKKyAgICAgICAgdWludHB0cl90IGFsbG9jYXRvclNpemUoKQorICAgICAgICB7Cisg
ICAgICAgICAgICByZXR1cm4gaXNsYW5kQmVnaW4oKSAtIHN0YXJ0KCk7CisgICAgICAgIH0KKwor
ICAgICAgICBzaXplX3QgaXNsYW5kc1BlclBhZ2UoKQorICAgICAgICB7CisgICAgICAgICAgICBz
aXplX3QgaXNsYW5kc1BlclBhZ2UgPSBwYWdlU2l6ZSgpIC8gaXNsYW5kU2l6ZUluQnl0ZXM7Cisg
ICAgICAgICAgICBBU1NFUlQoaXNsYW5kc1BlclBhZ2UgKiBpc2xhbmRTaXplSW5CeXRlcyA9PSBw
YWdlU2l6ZSgpKTsKKyAgICAgICAgICAgIEFTU0VSVChpc1Bvd2VyT2ZUd28oaXNsYW5kc1BlclBh
Z2UpKTsKKyAgICAgICAgICAgIHJldHVybiBpc2xhbmRzUGVyUGFnZTsKKyAgICAgICAgfQorCisg
ICAgICAgIHZvaWQgcmVsZWFzZShjb25zdCBMb2NrSG9sZGVyJiBsb2NrZXIsIE1ldGFBbGxvY2F0
b3JIYW5kbGUmIGhhbmRsZSkgZmluYWwKKyAgICAgICAgeworICAgICAgICAgICAgbV9maXhlZEFs
bG9jYXRvci5oYW5kbGVXaWxsQmVSZWxlYXNlZChsb2NrZXIsIGhhbmRsZSk7CisgICAgICAgICAg
ICBCYXNlOjpyZWxlYXNlKGxvY2tlciwgaGFuZGxlKTsKKyAgICAgICAgfQorCisgICAgICAgIHZv
aWQqIGFsbG9jYXRlSXNsYW5kKCkKKyAgICAgICAgeworICAgICAgICAgICAgdWludHB0cl90IGVu
ZCA9IHRoaXMtPmVuZCgpOworICAgICAgICAgICAgYXV0byBmaW5kUmVzdWx0ID0gWyZdICgpIC0+
IHZvaWQqIHsKKyAgICAgICAgICAgICAgICBzaXplX3QgcmVzdWx0Qml0ID0gaXNsYW5kQml0cy5m
aW5kQ2xlYXJCaXQoMCk7CisgICAgICAgICAgICAgICAgaWYgKHJlc3VsdEJpdCA9PSBpc2xhbmRC
aXRzLnNpemUoKSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAg
ICAgICAgICAgaXNsYW5kQml0c1tyZXN1bHRCaXRdID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICB1
aW50cHRyX3QgcmVzdWx0ID0gZW5kIC0gKChyZXN1bHRCaXQgKyAxKSAqIGlzbGFuZFNpemVJbkJ5
dGVzKTsgCisgICAgICAgICAgICAgICAgcmV0dXJuIGJpdHdpc2VfY2FzdDx2b2lkKj4ocmVzdWx0
KTsKKyAgICAgICAgICAgIH07CisKKyAgICAgICAgICAgIGlmICh2b2lkKiByZXN1bHQgPSBmaW5k
UmVzdWx0KCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKKworICAgICAgICAgICAg
aXNsYW5kQml0cy5yZXNpemUoaXNsYW5kQml0cy5zaXplKCkgKyBpc2xhbmRzUGVyUGFnZSgpKTsK
KyAgICAgICAgICAgIGlmIChVTkxJS0VMWShpc2xhbmRCaXRzLnNpemUoKSA+IG1heElzbGFuZHNQ
ZXJSZWdpb24pKQorICAgICAgICAgICAgICAgIGNyYXNoT25KdW1wSXNsYW5kRXhoYXVzdGlvbigp
OworCisgICAgICAgICAgICB1aW50cHRyX3QgcGFnZUJlZ2luID0gZW5kIC0gKGlzbGFuZEJpdHMu
c2l6ZSgpICogaXNsYW5kU2l6ZUluQnl0ZXMpOyAvLyBbaXNsYW5kQmVnaW4sIGVuZCkKKyAgICAg
ICAgICAgIG1fZml4ZWRBbGxvY2F0b3IubV9yZXNlcnZhdGlvbi5jb21taXQoYml0d2lzZV9jYXN0
PHZvaWQqPihwYWdlQmVnaW4pLCBwYWdlU2l6ZSgpKTsKKworICAgICAgICAgICAgdm9pZCogcmVz
dWx0ID0gZmluZFJlc3VsdCgpOworICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQocmVzdWx0KTsK
KyAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgICAgIH0KKworICAgICAgICBORVZFUl9J
TkxJTkUgTk9fUkVUVVJOX0RVRV9UT19DUkFTSCB2b2lkIGNyYXNoT25KdW1wSXNsYW5kRXhoYXVz
dGlvbigpCisgICAgICAgIHsKKyAgICAgICAgICAgIENSQVNIKCk7CisgICAgICAgIH0KKworICAg
ICAgICBPcHRpb25hbDxzaXplX3Q+IGlzbGFuZEJpdCh1aW50cHRyX3QgaXNsYW5kKQorICAgICAg
ICB7CisgICAgICAgICAgICB1aW50cHRyX3QgZW5kID0gdGhpcy0+ZW5kKCk7CisgICAgICAgICAg
ICBpZiAoaXNsYW5kQmVnaW4oKSA8PSBpc2xhbmQgJiYgaXNsYW5kIDwgZW5kKQorICAgICAgICAg
ICAgICAgIHJldHVybiAoKGVuZCAtIGlzbGFuZCkgLyBpc2xhbmRTaXplSW5CeXRlcykgLSAxOwor
ICAgICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKyAgICAgICAgfQorCisgICAgICAgIHZv
aWQgZnJlZUlzbGFuZCh1aW50cHRyX3QgaXNsYW5kKQorICAgICAgICB7CisgICAgICAgICAgICBS
RUxFQVNFX0FTU0VSVChpc2xhbmRCZWdpbigpIDw9IGlzbGFuZCAmJiBpc2xhbmQgPCBlbmQoKSk7
CisgICAgICAgICAgICBzaXplX3QgYml0ID0gaXNsYW5kQml0KGlzbGFuZCkudmFsdWUoKTsKKyAg
ICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKCEhaXNsYW5kQml0c1tiaXRdKTsKKyAgICAgICAgICAg
IGlzbGFuZEJpdHNbYml0XSA9IGZhbHNlOworICAgICAgICB9CisKKyAgICAgICAgYm9vbCBpc0lu
QWxsb2NhdGVkTWVtb3J5KGNvbnN0IEFic3RyYWN0TG9ja2VyJiBsb2NrZXIsIHZvaWQqIGFkZHJl
c3MpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChCYXNlOjppc0luQWxsb2NhdGVkTWVtb3J5
KGxvY2tlciwgYWRkcmVzcykpCisgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAg
ICAgICBpZiAoT3B0aW9uYWw8c2l6ZV90PiBiaXQgPSBpc2xhbmRCaXQoYml0d2lzZV9jYXN0PHVp
bnRwdHJfdD4oYWRkcmVzcykpKSB7CisgICAgICAgICAgICAgICAgaWYgKGJpdC52YWx1ZSgpIDwg
aXNsYW5kQml0cy5zaXplKCkpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiAhIWlzbGFuZEJp
dHNbYml0LnZhbHVlKCldOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgICAgICB9CisKKyAgICAgICAgLy8gUmFuZ2U6IFtzdGFydCwgZW5kKQorICAgICAgICB2
b2lkKiBtX3N0YXJ0OworICAgICAgICB2b2lkKiBtX2VuZDsKKyAgICAgICAgRmFzdEJpdFZlY3Rv
ciBpc2xhbmRCaXRzOworICAgIH07CisjZW5kaWYgLy8gVVNFKEpVTVBfSVNMQU5EUykKKworICAg
IHRlbXBsYXRlIDx0eXBlbmFtZSBGdW5jdGlvbj4KKyAgICB2b2lkIGZvckVhY2hBbGxvY2F0b3Io
RnVuY3Rpb24gZnVuY3Rpb24pCisgICAgeworI2lmIFVTRShKVU1QX0lTTEFORFMpCisgICAgICAg
IGZvciAoUmVnaW9uQWxsb2NhdG9yJiBhbGxvY2F0b3IgOiBtX2FsbG9jYXRvcnMpIHsKKyAgICAg
ICAgICAgIHVzaW5nIEZ1bmN0aW9uUmVzdWx0VHlwZSA9IGRlY2x0eXBlKGZ1bmN0aW9uKGFsbG9j
YXRvcikpOworICAgICAgICAgICAgaWYgY29uc3RleHByIChzdGQ6OmlzX3NhbWU8SXRlcmF0aW9u
U3RhdHVzLCBGdW5jdGlvblJlc3VsdFR5cGU+Ojp2YWx1ZSkgeworICAgICAgICAgICAgICAgIGlm
IChmdW5jdGlvbihhbGxvY2F0b3IpID09IEl0ZXJhdGlvblN0YXR1czo6RG9uZSkKKyAgICAgICAg
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAg
IHN0YXRpY19hc3NlcnQoc3RkOjppc19zYW1lPHZvaWQsIEZ1bmN0aW9uUmVzdWx0VHlwZT46OnZh
bHVlKTsKKyAgICAgICAgICAgICAgICBmdW5jdGlvbihhbGxvY2F0b3IpOworICAgICAgICAgICAg
fQorICAgICAgICB9CisjZWxzZQorICAgICAgICBmdW5jdGlvbihtX2FsbG9jYXRvcik7CisjZW5k
aWYgLy8gVVNFKEpVTVBfSVNMQU5EUykKKyAgICB9CisKKyNpZiBVU0UoSlVNUF9JU0xBTkRTKQor
ICAgIGNsYXNzIElzbGFuZHMgOiBwdWJsaWMgUmVkQmxhY2tUcmVlPElzbGFuZHMsIHZvaWQqPjo6
Tm9kZSB7CisgICAgICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworICAgIHB1YmxpYzoKKyAg
ICAgICAgdm9pZCoga2V5KCkgeyByZXR1cm4gcm9vdEp1bXBMb2NhdGlvbi5kYXRhTG9jYXRpb24o
KTsgfQorICAgICAgICBDb2RlTG9jYXRpb25MYWJlbDxFeGVjdXRhYmxlTWVtb3J5UHRyVGFnPiBy
b290SnVtcExvY2F0aW9uOworICAgICAgICBWZWN0b3I8Q29kZUxvY2F0aW9uTGFiZWw8RXhlY3V0
YWJsZU1lbW9yeVB0clRhZz4+IGp1bXBJc2xhbmRzOworICAgIH07CisjZW5kaWYgLy8gVVNFKEpV
TVBfSVNMQU5EUykKKworICAgIExvY2sgbV9sb2NrOwogICAgIFBhZ2VSZXNlcnZhdGlvbiBtX3Jl
c2VydmF0aW9uOworI2lmIFVTRShKVU1QX0lTTEFORFMpCisgICAgc3RkOjphcnJheTxSZWdpb25B
bGxvY2F0b3IsIG51bWJlck9mUmVnaW9ucz4gbV9hbGxvY2F0b3JzOworICAgIFJlZEJsYWNrVHJl
ZTxJc2xhbmRzLCB2b2lkKj4gaXNsYW5kc0Zvckp1bXBMb2NhdGlvbjsKKyNlbHNlCisgICAgQWxs
b2NhdG9yIG1fYWxsb2NhdG9yOworI2VuZGlmIC8vIFVTRShKVU1QX0lTTEFORFMpCiB9OwogCi1G
aXhlZFZNUG9vbEV4ZWN1dGFibGVBbGxvY2F0b3I6On5GaXhlZFZNUG9vbEV4ZWN1dGFibGVBbGxv
Y2F0b3IoKQotewotICAgIG1fcmVzZXJ2YXRpb24uZGVhbGxvY2F0ZSgpOwotfQotCiAvLyBLZWVw
IHRoaXMgcG9pbnRlciBpbiBhIG11dGFibGUgZ2xvYmFsIHZhcmlhYmxlIHRvIGhlbHAgTGVha3Mg
ZmluZCBpdC4KIC8vIEJ1dCB3ZSBkbyBub3QgdXNlIHRoaXMgcG9pbnRlci4KIHN0YXRpYyBGaXhl
ZFZNUG9vbEV4ZWN1dGFibGVBbGxvY2F0b3IqIGdsb2JhbEZpeGVkVk1Qb29sRXhlY3V0YWJsZUFs
bG9jYXRvclRvV29ya0Fyb3VuZExlYWtzID0gbnVsbHB0cjsKQEAgLTQxNyw3ICs4MjUsNiBAQCB2
b2lkIEV4ZWN1dGFibGVBbGxvY2F0b3I6OmluaXRpYWxpemVVbmRlCiAgICAgUkVMRUFTRV9BU1NF
UlQoIWdfanNjQ29uZmlnLmZpeGVkVk1Qb29sRXhlY3V0YWJsZUFsbG9jYXRvcik7CiAgICAgZ19q
c2NDb25maWcuZml4ZWRWTVBvb2xFeGVjdXRhYmxlQWxsb2NhdG9yID0gbmV3IEZpeGVkVk1Qb29s
RXhlY3V0YWJsZUFsbG9jYXRvcigpOwogICAgIGdsb2JhbEZpeGVkVk1Qb29sRXhlY3V0YWJsZUFs
bG9jYXRvclRvV29ya0Fyb3VuZExlYWtzID0gZ19qc2NDb25maWcuZml4ZWRWTVBvb2xFeGVjdXRh
YmxlQWxsb2NhdG9yOwotICAgIENvZGVQcm9maWxpbmc6Om5vdGlmeUFsbG9jYXRvcihnX2pzY0Nv
bmZpZy5maXhlZFZNUG9vbEV4ZWN1dGFibGVBbGxvY2F0b3IpOwogfQogCiBib29sIEV4ZWN1dGFi
bGVBbGxvY2F0b3I6OmlzVmFsaWQoKSBjb25zdApAQCAtNDI1LDcgKzgzMiw3IEBAIGJvb2wgRXhl
Y3V0YWJsZUFsbG9jYXRvcjo6aXNWYWxpZCgpIGNvbnMKICAgICBGaXhlZFZNUG9vbEV4ZWN1dGFi
bGVBbGxvY2F0b3IqIGFsbG9jYXRvciA9IGdfanNjQ29uZmlnLmZpeGVkVk1Qb29sRXhlY3V0YWJs
ZUFsbG9jYXRvcjsKICAgICBpZiAoIWFsbG9jYXRvcikKICAgICAgICAgcmV0dXJuIEJhc2U6Omlz
VmFsaWQoKTsKLSAgICByZXR1cm4gISFhbGxvY2F0b3ItPmJ5dGVzUmVzZXJ2ZWQoKTsKKyAgICBy
ZXR1cm4gYWxsb2NhdG9yLT5pc1ZhbGlkKCk7CiB9CiAKIGJvb2wgRXhlY3V0YWJsZUFsbG9jYXRv
cjo6dW5kZXJNZW1vcnlQcmVzc3VyZSgpCkBAIC00NTYsMTEgKzg2MywxMSBAQCBkb3VibGUgRXhl
Y3V0YWJsZUFsbG9jYXRvcjo6bWVtb3J5UHJlc3N1CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAot
UmVmUHRyPEV4ZWN1dGFibGVNZW1vcnlIYW5kbGU+IEV4ZWN1dGFibGVBbGxvY2F0b3I6OmFsbG9j
YXRlKHNpemVfdCBzaXplSW5CeXRlcywgdm9pZCogb3duZXJVSUQsIEpJVENvbXBpbGF0aW9uRWZm
b3J0IGVmZm9ydCkKK1JlZlB0cjxFeGVjdXRhYmxlTWVtb3J5SGFuZGxlPiBFeGVjdXRhYmxlQWxs
b2NhdG9yOjphbGxvY2F0ZShzaXplX3Qgc2l6ZUluQnl0ZXMsIEpJVENvbXBpbGF0aW9uRWZmb3J0
IGVmZm9ydCkKIHsKICAgICBGaXhlZFZNUG9vbEV4ZWN1dGFibGVBbGxvY2F0b3IqIGFsbG9jYXRv
ciA9IGdfanNjQ29uZmlnLmZpeGVkVk1Qb29sRXhlY3V0YWJsZUFsbG9jYXRvcjsKICAgICBpZiAo
IWFsbG9jYXRvcikKLSAgICAgICAgcmV0dXJuIEJhc2U6OmFsbG9jYXRlKHNpemVJbkJ5dGVzLCBv
d25lclVJRCwgZWZmb3J0KTsKKyAgICAgICAgcmV0dXJuIEJhc2U6OmFsbG9jYXRlKHNpemVJbkJ5
dGVzLCBlZmZvcnQpOwogICAgIGlmIChPcHRpb25zOjpsb2dFeGVjdXRhYmxlQWxsb2NhdGlvbigp
KSB7CiAgICAgICAgIE1ldGFBbGxvY2F0b3I6OlN0YXRpc3RpY3Mgc3RhdHMgPSBhbGxvY2F0b3It
PmN1cnJlbnRTdGF0aXN0aWNzKCk7CiAgICAgICAgIGRhdGFMb2coIkFsbG9jYXRpbmcgIiwgc2l6
ZUluQnl0ZXMsICIgYnl0ZXMgb2YgZXhlY3V0YWJsZSBtZW1vcnkgd2l0aCAiLCBzdGF0cy5ieXRl
c0FsbG9jYXRlZCwgIiBieXRlcyBhbGxvY2F0ZWQsICIsIHN0YXRzLmJ5dGVzUmVzZXJ2ZWQsICIg
Ynl0ZXMgcmVzZXJ2ZWQsIGFuZCAiLCBzdGF0cy5ieXRlc0NvbW1pdHRlZCwgIiBjb21taXR0ZWQu
XG4iKTsKQEAgLTQ4Nyw3ICs4OTQsNyBAQCBSZWZQdHI8RXhlY3V0YWJsZU1lbW9yeUhhbmRsZT4g
RXhlY3V0YWJsCiAgICAgICAgIH0KICAgICB9CiAKLSAgICBSZWZQdHI8RXhlY3V0YWJsZU1lbW9y
eUhhbmRsZT4gcmVzdWx0ID0gYWxsb2NhdG9yLT5hbGxvY2F0ZShzaXplSW5CeXRlcywgb3duZXJV
SUQpOworICAgIFJlZlB0cjxFeGVjdXRhYmxlTWVtb3J5SGFuZGxlPiByZXN1bHQgPSBhbGxvY2F0
b3ItPmFsbG9jYXRlKHNpemVJbkJ5dGVzKTsKICAgICBpZiAoIXJlc3VsdCkgewogICAgICAgICBp
ZiAoZWZmb3J0ICE9IEpJVENvbXBpbGF0aW9uQ2FuRmFpbCkgewogICAgICAgICAgICAgZGF0YUxv
ZygiUmFuIG91dCBvZiBleGVjdXRhYmxlIG1lbW9yeSB3aGlsZSBhbGxvY2F0aW5nICIsIHNpemVJ
bkJ5dGVzLCAiIGJ5dGVzLlxuIik7CkBAIC01MzksNiArOTQ2LDI2IEBAIHZvaWQgRXhlY3V0YWJs
ZUFsbG9jYXRvcjo6ZHVtcFByb2ZpbGUoKQogfQogI2VuZGlmCiAKKyNpZiBVU0UoSlVNUF9JU0xB
TkRTKQordm9pZCogRXhlY3V0YWJsZUFsbG9jYXRvcjo6Z2V0SnVtcElzbGFuZFRvKHZvaWQqIGZy
b20sIHZvaWQqIG5ld0Rlc3RpbmF0aW9uKQoreworICAgIEZpeGVkVk1Qb29sRXhlY3V0YWJsZUFs
bG9jYXRvciogYWxsb2NhdG9yID0gZ19qc2NDb25maWcuZml4ZWRWTVBvb2xFeGVjdXRhYmxlQWxs
b2NhdG9yOworICAgIGlmICghYWxsb2NhdG9yKQorICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1Rf
UkVBQ0hFRCgpOworCisgICAgcmV0dXJuIGFsbG9jYXRvci0+bWFrZUlzbGFuZChiaXR3aXNlX2Nh
c3Q8dWludHB0cl90Pihmcm9tKSwgYml0d2lzZV9jYXN0PHVpbnRwdHJfdD4obmV3RGVzdGluYXRp
b24pLCBmYWxzZSk7Cit9CisKK3ZvaWQqIEV4ZWN1dGFibGVBbGxvY2F0b3I6OmdldEp1bXBJc2xh
bmRUb0NvbmN1cnJlbnRseSh2b2lkKiBmcm9tLCB2b2lkKiBuZXdEZXN0aW5hdGlvbikKK3sKKyAg
ICBGaXhlZFZNUG9vbEV4ZWN1dGFibGVBbGxvY2F0b3IqIGFsbG9jYXRvciA9IGdfanNjQ29uZmln
LmZpeGVkVk1Qb29sRXhlY3V0YWJsZUFsbG9jYXRvcjsKKyAgICBpZiAoIWFsbG9jYXRvcikKKyAg
ICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKworICAgIHJldHVybiBhbGxvY2F0
b3ItPm1ha2VJc2xhbmQoYml0d2lzZV9jYXN0PHVpbnRwdHJfdD4oZnJvbSksIGJpdHdpc2VfY2Fz
dDx1aW50cHRyX3Q+KG5ld0Rlc3RpbmF0aW9uKSwgdHJ1ZSk7Cit9CisjZW5kaWYKKwogdm9pZCog
c3RhcnRPZkZpeGVkRXhlY3V0YWJsZU1lbW9yeVBvb2xJbXBsKCkKIHsKICAgICBGaXhlZFZNUG9v
bEV4ZWN1dGFibGVBbGxvY2F0b3IqIGFsbG9jYXRvciA9IGdfanNjQ29uZmlnLmZpeGVkVk1Qb29s
RXhlY3V0YWJsZUFsbG9jYXRvcjsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvRXhl
Y3V0YWJsZUFsbG9jYXRvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvRXhlY3V0YWJsZUFsbG9jYXRvci5oCShyZXZpc2lvbiAyNTgzNTApCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L0V4ZWN1dGFibGVBbGxvY2F0b3IuaAkod29ya2luZyBjb3B5KQpAQCAt
NzEsNyArNzEsNyBAQCBwdWJsaWM6CiAKICAgICBzdGF0aWMgdm9pZCBkdW1wUHJvZmlsZSgpIHsg
fQogCi0gICAgUmVmUHRyPEV4ZWN1dGFibGVNZW1vcnlIYW5kbGU+IGFsbG9jYXRlKHNpemVfdCwg
dm9pZCosIEpJVENvbXBpbGF0aW9uRWZmb3J0KSB7IHJldHVybiBudWxscHRyOyB9CisgICAgUmVm
UHRyPEV4ZWN1dGFibGVNZW1vcnlIYW5kbGU+IGFsbG9jYXRlKHNpemVfdCwgSklUQ29tcGlsYXRp
b25FZmZvcnQpIHsgcmV0dXJuIG51bGxwdHI7IH0KIAogICAgIHN0YXRpYyB2b2lkIHNldEpJVEVu
YWJsZWQoYm9vbCkgeyB9OwogICAgIApAQCAtMTc2LDcgKzE3Niw3IEBAIHB1YmxpYzoKICAgICAK
ICAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgdm9pZCBzZXRKSVRFbmFibGVkKGJvb2wpOwog
Ci0gICAgUmVmUHRyPEV4ZWN1dGFibGVNZW1vcnlIYW5kbGU+IGFsbG9jYXRlKHNpemVfdCBzaXpl
SW5CeXRlcywgdm9pZCogb3duZXJVSUQsIEpJVENvbXBpbGF0aW9uRWZmb3J0KTsKKyAgICBSZWZQ
dHI8RXhlY3V0YWJsZU1lbW9yeUhhbmRsZT4gYWxsb2NhdGUoc2l6ZV90IHNpemVJbkJ5dGVzLCBK
SVRDb21waWxhdGlvbkVmZm9ydCk7CiAKICAgICBib29sIGlzVmFsaWRFeGVjdXRhYmxlTWVtb3J5
KGNvbnN0IEFic3RyYWN0TG9ja2VyJiwgdm9pZCogYWRkcmVzcyk7CiAKQEAgLTE4NCw2ICsxODQs
MTEgQEAgcHVibGljOgogCiAgICAgTG9jayYgZ2V0TG9jaygpIGNvbnN0OwogCisjaWYgVVNFKEpV
TVBfSVNMQU5EUykKKyAgICB2b2lkKiBnZXRKdW1wSXNsYW5kVG8odm9pZCogZnJvbSwgdm9pZCog
bmV3RGVzdGluYXRpb24pOworICAgIHZvaWQqIGdldEp1bXBJc2xhbmRUb0NvbmN1cnJlbnRseSh2
b2lkKiBmcm9tLCB2b2lkKiBuZXdEZXN0aW5hdGlvbik7CisjZW5kaWYKKwogcHJpdmF0ZToKICAg
ICBFeGVjdXRhYmxlQWxsb2NhdG9yKCkgPSBkZWZhdWx0OwogICAgIH5FeGVjdXRhYmxlQWxsb2Nh
dG9yKCkgPSBkZWZhdWx0OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29t
bW9uU2xvd1BhdGhzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9Db21tb25TbG93UGF0aHMuY3BwCShyZXZpc2lvbiAyNTgzNTApCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9Db21tb25TbG93UGF0aHMuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0zMiw3ICszMiw2IEBACiAjaW5jbHVkZSAiQnl0ZWNvZGVTdHJ1Y3RzLmgiCiAjaW5jbHVkZSAi
Q2FsbEZyYW1lLmgiCiAjaW5jbHVkZSAiQ2xvbmVkQXJndW1lbnRzLmgiCi0jaW5jbHVkZSAiQ29k
ZVByb2ZpbGluZy5oIgogI2luY2x1ZGUgIkRlZmluZVByb3BlcnR5QXR0cmlidXRlcy5oIgogI2lu
Y2x1ZGUgIkRpcmVjdEFyZ3VtZW50cy5oIgogI2luY2x1ZGUgIkVycm9yLmgiCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db21wbGV0aW9uLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db21wbGV0aW9uLmNwcAkocmV2aXNpb24gMjU4
MzUwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29tcGxldGlvbi5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTI3LDcgKzI3LDYgQEAKICNpbmNsdWRlICJDYWxsRnJhbWUuaCIKICNp
bmNsdWRlICJDYXRjaFNjb3BlLmgiCiAjaW5jbHVkZSAiQ29kZUNhY2hlLmgiCi0jaW5jbHVkZSAi
Q29kZVByb2ZpbGluZy5oIgogI2luY2x1ZGUgIkV4Y2VwdGlvbi5oIgogI2luY2x1ZGUgIklkZW50
aWZpZXJJbmxpbmVzLmgiCiAjaW5jbHVkZSAiSW50ZXJwcmV0ZXIuaCIKQEAgLTEzOCw4ICsxMzcs
NiBAQCBKU1ZhbHVlIGV2YWx1YXRlKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPCiAgICAgUkVMRUFT
RV9BU1NFUlQodm0uYXRvbVN0cmluZ1RhYmxlKCkgPT0gVGhyZWFkOjpjdXJyZW50KCkuYXRvbVN0
cmluZ1RhYmxlKCkpOwogICAgIFJFTEVBU0VfQVNTRVJUKCF2bS5pc0NvbGxlY3RvckJ1c3lPbkN1
cnJlbnRUaHJlYWQoKSk7CiAKLSAgICBDb2RlUHJvZmlsaW5nIHByb2ZpbGUoc291cmNlKTsKLQog
ICAgIGlmICghdGhpc1ZhbHVlIHx8IHRoaXNWYWx1ZS5pc1VuZGVmaW5lZE9yTnVsbCgpKQogICAg
ICAgICB0aGlzVmFsdWUgPSBnbG9iYWxPYmplY3Q7CiAgICAgSlNPYmplY3QqIHRoaXNPYmogPSBq
c0Nhc3Q8SlNPYmplY3QqPih0aGlzVmFsdWUudG9UaGlzKGdsb2JhbE9iamVjdCwgTm90U3RyaWN0
TW9kZSkpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNNb2R1bGVMb2Fk
ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTW9k
dWxlTG9hZGVyLmNwcAkocmV2aXNpb24gMjU4MzUwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSlNNb2R1bGVMb2FkZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOSw3ICsyOSw2
IEBACiAKICNpbmNsdWRlICJCdWlsdGluTmFtZXMuaCIKICNpbmNsdWRlICJDYXRjaFNjb3BlLmgi
Ci0jaW5jbHVkZSAiQ29kZVByb2ZpbGluZy5oIgogI2luY2x1ZGUgIkVycm9yLmgiCiAjaW5jbHVk
ZSAiRXhjZXB0aW9uLmgiCiAjaW5jbHVkZSAiSlNDSW5saW5lcy5oIgpAQCAtNDAwLDggKzM5OSw2
IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgbW9kdWxlTG9hZGUKICAgICAgICAgcmV0
dXJuIEpTVmFsdWU6OmVuY29kZShKU1dlYkFzc2VtYmx5OjppbnN0YW50aWF0ZShnbG9iYWxPYmpl
Y3QsIHByb21pc2UsIG1vZHVsZUtleSwganNTb3VyY2VDb2RlKSk7CiAjZW5kaWYKIAotICAgIENv
ZGVQcm9maWxpbmcgcHJvZmlsZShzb3VyY2VDb2RlKTsKLQogICAgIFBhcnNlckVycm9yIGVycm9y
OwogICAgIHN0ZDo6dW5pcXVlX3B0cjxNb2R1bGVQcm9ncmFtTm9kZT4gbW9kdWxlUHJvZ3JhbU5v
ZGUgPSBwYXJzZTxNb2R1bGVQcm9ncmFtTm9kZT4oCiAgICAgICAgIHZtLCBzb3VyY2VDb2RlLCBJ
ZGVudGlmaWVyKCksIEpTUGFyc2VyQnVpbHRpbk1vZGU6Ok5vdEJ1aWx0aW4sCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25zTGlzdC5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnNMaXN0LmgJKHJldmlzaW9uIDI1ODM1
MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnNMaXN0LmgJKHdvcmtp
bmcgY29weSkKQEAgLTUwMCw2ICs1MDAsNyBAQCBjb25zdGV4cHIgYm9vbCBlbmFibGVXZWJBc3Nl
bWJseVN0cmVhbWluCiAgICAgdihCb29sLCBmb3JjZU9TUkV4aXRUb0xMSW50LCBmYWxzZSwgTm9y
bWFsLCAiSWYgdHJ1ZSwgd2UgYWx3YXlzIGV4aXQgdG8gdGhlIExMSW50LiBJZiBmYWxzZSwgd2Ug
ZXhpdCB0byB3aGF0ZXZlciBpcyBtb3N0IGNvbnZlbmllbnQuIikgXAogICAgIHYoVW5zaWduZWQs
IGdldEJ5VmFsSUNNYXhOdW1iZXJPZklkZW50aWZpZXJzLCA0LCBOb3JtYWwsICJOdW1iZXIgb2Yg
aWRlbnRpZmllcnMgd2Ugc2VlIGluIHRoZSBMTEludCB0aGF0IGNvdWxkIGNhdXNlIHVzIHRvIGJh
aWwgb24gZ2VuZXJhdGluZyBhbiBJQyBmb3IgZ2V0X2J5X3ZhbC4iKSBcCiAgICAgdihCb29sLCB1
c2VQdWJsaWNDbGFzc0ZpZWxkcywgdHJ1ZSwgTm9ybWFsLCAiSWYgdHJ1ZSwgdGhlIHBhcnNlciB3
aWxsIHVuZGVyc3RhbmQgcHVibGljIGRhdGEgZmllbGRzIGluc2lkZSBjbGFzc2VzLiIpIFwKKyAg
ICB2KEJvb2wsIHVzZVJhbmRvbWl6aW5nRXhlY3V0YWJsZUlzbGFuZEFsbG9jYXRpb24sIGZhbHNl
LCBOb3JtYWwsICJGb3IgdGhlIGFybTY0IEV4ZWN1dGFibGVBbGxvY2F0b3IsIGlmIHRydWUsIHNl
bGVjdCB3aGljaCByZWdpb24gdG8gdXNlIHJhbmRvbWx5LiBUaGlzIGlzIHVzZWZ1bCBmb3IgdGVz
dGluZyB0aGF0IGp1bXAgaXNsYW5kcyB3b3JrLiIpIFwKIAogZW51bSBPcHRpb25FcXVpdmFsZW5j
ZSB7CiAgICAgU2FtZU9wdGlvbiwKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90b29scy9D
b2RlUHJvZmlsZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3Rvb2xz
L0NvZGVQcm9maWxlLmNwcAkocmV2aXNpb24gMjU4MzUwKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL3Rvb2xzL0NvZGVQcm9maWxlLmNwcAkobm9uZXhpc3RlbnQpCkBAIC0xLDE3MiArMCwwIEBA
Ci0vKgotICogQ29weXJpZ2h0IChDKSAyMDEyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQot
ICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0KLSNpbmNsdWRl
ICJjb25maWcuaCIKLSNpbmNsdWRlICJDb2RlUHJvZmlsZS5oIgotCi0jaW5jbHVkZSAiQ29kZUJs
b2NrLmgiCi0jaW5jbHVkZSAiQ29kZVByb2ZpbGluZy5oIgotI2luY2x1ZGUgIkxpbmtCdWZmZXIu
aCIKLSNpbmNsdWRlICJQcm9maWxlVHJlZU5vZGUuaCIKLSNpbmNsdWRlIDx3dGYvU3RhY2tUcmFj
ZS5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgotCi1uYW1lc3BhY2UgSlNDIHsK
LQotLy8gTWFwIGZyb20gQ29kZVR5cGUgZW51bSB0byBhIGNvcnJlc3BvbmRpbmcgbmFtZS4KLXN0
YXRpYyBjb25zdCBjaGFyKiBjb25zdCBzX2NvZGVUeXBlTmFtZXNbQ29kZVByb2ZpbGU6Ok51bWJl
ck9mQ29kZVR5cGVzXSA9IHsKLSAgICAiW1tFbmdpbmVDb2RlXV0iLAotICAgICJbW0dsb2JhbFRo
dW5rXV0iLAotICAgICJbW1JlZ0V4cENvZGVdXSIsCi0gICAgIltbREZHSklUXV0iLAotICAgICJb
W0Jhc2VsaW5lT25seV1dIiwKLSAgICAiW1tCYXNlbGluZVByb2ZpbGVdXSIsCi0gICAgIltbQmFz
ZWxpbmVPU1JdXSIsCi0gICAgIltbRW5naW5lRnJhbWVdXSIKLX07Ci0KLS8vIEhlbHBlciBmdW5j
dGlvbiwgdHJ1bmNhdGUgdHJhY2VzIHRvIHBydW5lIHRoZSBvdXRwdXQgJiBtYWtlIHZlcnkgdmVy
Ym9zZSBtb2RlIGEgbGl0dGxlIG1vcmUgcmVhZGFibGUuCi1zdGF0aWMgYm9vbCB0cnVuY2F0ZVRy
YWNlKGNvbnN0IGNoYXIqIHN5bWJvbE5hbWUpCi17Ci0gICAgcmV0dXJuICFzdHJjbXAoc3ltYm9s
TmFtZSwgIkpTQzo6Qnl0ZWNvZGVHZW5lcmF0b3I6OmdlbmVyYXRlKCkiKQotICAgICAgICB8fCAh
c3RyY21wKHN5bWJvbE5hbWUsICJKU0M6OlBhcnNlcjxKU0M6OkxleGVyPHVuc2lnbmVkIGNoYXI+
Pjo6cGFyc2VJbm5lcigpIikKLSAgICAgICAgfHwgIXN0cmNtcChzeW1ib2xOYW1lLCAiV1RGOjpm
YXN0TWFsbG9jKHVuc2lnbmVkIGxvbmcpIikKLSAgICAgICAgfHwgIXN0cmNtcChzeW1ib2xOYW1l
LCAiV1RGOjpjYWxjdWxhdGVVVENPZmZzZXQoKSIpCi0gICAgICAgIHx8ICFzdHJjbXAoc3ltYm9s
TmFtZSwgIkpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6cGFyc2VDb2RlQmxvY2soKSIpOwotICAg
ICAgICAKLX0KLQotLy8gRWFjaCB0cmFjZSBjb25zaXN0cyBvZiBhIHNlcXVlbmNlIG9mIHplcm8g
b3IgbW9yZSAnRW5naW5lRnJhbWUnIGVudHJpZXMsCi0vLyBmb2xsb3dlZCBieSBhIHNhbXBsZSBp
biBKSVQgY29kZSwgb3Igb25lIG9yIG1vcmUgJ0VuZ2luZUZyYW1lJyBlbnRyaWVzLAotLy8gZm9s
bG93ZWQgYnkgYSAnRW5naW5lQ29kZScgdGVybWluYXRvci4KLXZvaWQgQ29kZVByb2ZpbGU6OnNh
bXBsZSh2b2lkKiBwYywgdm9pZCoqIGZyYW1lUG9pbnRlcikKLXsKLSAgICAvLyBEaXNhbGxvdyB0
cmFjZXMgY29udGFpbmluZyBvbmx5IGEgJ0VuZ2luZUNvZGUnIHRlcm1pbmF0b3IsIHdpdGhvdXQg
YW55ICdFbmdpbmVGcmFtZScgZnJhbWVzLgotICAgIGlmICghZnJhbWVQb2ludGVyKQotICAgICAg
ICByZXR1cm47Ci0KLSAgICB3aGlsZSAoZnJhbWVQb2ludGVyKSB7Ci0gICAgICAgIENvZGVUeXBl
IHR5cGU7Ci0KLSNpZiBFTkFCTEUoSklUKQotICAgICAgICAvLyBEZXRlcm1pbmUgaWYgdGhpcyBz
YW1wbGUgZmVsbCBpbiBKSVQgY29kZSwgYW5kIGlmIHNvLCBmcm9tIHdoaWNoIEpJVCAmIHdoeS4K
LSAgICAgICAgdm9pZCogb3duZXJVSUQgPSBDb2RlUHJvZmlsaW5nOjpnZXRPd25lclVJREZvclBD
KHBjKTsKLQotICAgICAgICBpZiAoIW93bmVyVUlEKQotICAgICAgICAgICAgdHlwZSA9IEVuZ2lu
ZUZyYW1lOwotICAgICAgICBlbHNlIGlmIChvd25lclVJRCA9PSBHTE9CQUxfVEhVTktfSUQpCi0g
ICAgICAgICAgICB0eXBlID0gR2xvYmFsVGh1bms7Ci0gICAgICAgIGVsc2UgaWYgKG93bmVyVUlE
ID09IFJFR0VYUF9DT0RFX0lEKQotICAgICAgICAgICAgdHlwZSA9IFJlZ0V4cENvZGU7Ci0gICAg
ICAgIGVsc2UgewotICAgICAgICAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBzdGF0aWNfY2Fz
dDxDb2RlQmxvY2sqPihvd25lclVJRCk7Ci0gICAgICAgICAgICBpZiAoY29kZUJsb2NrLT5qaXRU
eXBlKCkgPT0gSklUVHlwZTo6REZHSklUKQotICAgICAgICAgICAgICAgIHR5cGUgPSBERkdKSVQ7
Ci0gICAgICAgICAgICBlbHNlIGlmICghY2FuQ29tcGlsZShjb2RlQmxvY2stPmNhcGFiaWxpdHlM
ZXZlbFN0YXRlKCkpKQotICAgICAgICAgICAgICAgIHR5cGUgPSBCYXNlbGluZU9ubHk7Ci0gICAg
ICAgICAgICBlbHNlIGlmIChjb2RlQmxvY2stPnJlcGxhY2VtZW50KCkpCi0gICAgICAgICAgICAg
ICAgdHlwZSA9IEJhc2VsaW5lT1NSOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAg
IHR5cGUgPSBCYXNlbGluZVByb2ZpbGU7Ci0gICAgICAgIH0KLSNlbHNlCi0gICAgICAgIHR5cGUg
PSBFbmdpbmVGcmFtZTsKLSNlbmRpZgotCi0gICAgICAgIC8vIEEgc2FtcGxlIGluIEpJVCBjb2Rl
IHRlcm1pbmF0ZXMgdGhlIHRyYWNlLgotICAgICAgICBtX3NhbXBsZXMuYXBwZW5kKENvZGVSZWNv
cmQocGMsIHR5cGUpKTsKLSAgICAgICAgaWYgKHR5cGUgIT0gRW5naW5lRnJhbWUpCi0gICAgICAg
ICAgICByZXR1cm47Ci0KLSNpZiBPUyhEQVJXSU4pICYmIENQVShYODZfNjQpCi0gICAgICAgIC8v
IFdhbGsgdXAgdGhlIHN0YWNrLgotICAgICAgICBwYyA9IGZyYW1lUG9pbnRlclsxXTsKLSAgICAg
ICAgZnJhbWVQb2ludGVyID0gcmVpbnRlcnByZXRfY2FzdDx2b2lkKio+KCpmcmFtZVBvaW50ZXIp
OwotI2VsaWYgT1MoTElOVVgpICYmIENQVShYODYpCi0gICAgICAgIC8vIERvbid0IHVud2luZCB0
aGUgc3RhY2sgYXMgc29tZSBkZXBlbmRlbnQgdGhpcmQgcGFydHkgbGlicmFyaWVzCi0gICAgICAg
IC8vIG1heSBiZSBjb21waWxlZCB3aXRoIC1mb21pdC1mcmFtZS1wb2ludGVyLgotICAgICAgICBm
cmFtZVBvaW50ZXIgPSAwOwotI2Vsc2UKLSAgICAgICAgLy8gVGhpcyBwbGF0Zm9ybSBpcyBub3Qg
eWV0IHN1cHBvcnRlZCEKLSAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSNl
bmRpZgotICAgIH0KLQotICAgIC8vIElmIHdlIGdldCBoZXJlLCB3ZSB3YWxrZWQgdGhlIGVudGly
ZSBzdGFjayB3aXRob3V0IGZpbmRpbmcgYW55IGZyYW1lcyBvZiBKSVQgY29kZS4KLSAgICBtX3Nh
bXBsZXMuYXBwZW5kKENvZGVSZWNvcmQoMCwgRW5naW5lQ29kZSkpOwotfQotCi12b2lkIENvZGVQ
cm9maWxlOjpyZXBvcnQoKQotewotICAgIGRhdGFMb2dGKCI8Q29kZVByb2ZpbGluZyAlczolZD5c
biIsIG1fZmlsZS5kYXRhKCksIG1fbGluZU51bWJlcik7Ci0KLSAgICAvLyBIb3cgbWFueSBmcmFt
ZXMgb2YgQy1jb2RlIHRvIHByaW50IC0gMCwgaWYgbm90IHZlcmJvc2UsIDEgaWYgdmVyYm9zZSwg
dXAgdG8gMTAyNCBpZiB2ZXJ5IHZlcmJvc2UuCi0gICAgdW5zaWduZWQgcmVjdXJzaW9uTGltaXQg
PSBDb2RlUHJvZmlsaW5nOjpiZVZlcnlWZXJib3NlKCkgPyAxMDI0IDogQ29kZVByb2ZpbGluZzo6
YmVWZXJib3NlKCk7Ci0KLSAgICBQcm9maWxlVHJlZU5vZGUgcHJvZmlsZTsKLQotICAgIC8vIFdh
bGsgdGhyb3VnaCB0aGUgc2FtcGxlIGJ1ZmZlci4KLSAgICBzaXplX3QgdHJhY2UgPSAwOwotICAg
IHdoaWxlICh0cmFjZSA8IG1fc2FtcGxlcy5zaXplKCkpIHsKLQotICAgICAgICAvLyBBbGwgdHJh
Y2VzIGFyZSB6ZXJvIG9yIG1vcmUgJ0VuZ2luZUZyYW1lJ3MsIGZvbGxvd2VkIGJ5IGEgbm9uLSdF
bmdpbmVGcmFtZScuCi0gICAgICAgIC8vIFNjYW4gdG8gZmluZCB0aGUgbGFzdCBzYW1wbGUgaW4g
dGhlIHRyYWNlLgotICAgICAgICBzaXplX3QgbGFzdEluVHJhY2UgPSB0cmFjZTsKLSAgICAgICAg
d2hpbGUgKG1fc2FtcGxlc1tsYXN0SW5UcmFjZV0udHlwZSA9PSBFbmdpbmVGcmFtZSkKLSAgICAg
ICAgICAgICsrbGFzdEluVHJhY2U7Ci0KLSAgICAgICAgLy8gV2UgdXNlIHRoZSBsYXN0IHNhbXBs
ZSB0eXBlIHRvIGxvb2sgdXAgYSBuYW1lICh1c2VkIGFzIGEgYnVja2V0IGluIHRoZSBwcm9maWxl
cikuCi0gICAgICAgIFByb2ZpbGVUcmVlTm9kZSogY2FsbGJhY2tzID0gcHJvZmlsZS5zYW1wbGVD
aGlsZChzX2NvZGVUeXBlTmFtZXNbbV9zYW1wbGVzW2xhc3RJblRyYWNlXS50eXBlXSk7Ci0KLSAg
ICAgICAgLy8gSWYgdGhlcmUgYXJlIGFueSBzYW1wbGVzIGluIEMtY29kZSwgYWRkIHVwIHRvIHJl
Y3Vyc2lvbkxpbWl0IG9mIHRoZW0gaW50byB0aGUgcHJvZmlsZSB0cmVlLgotICAgICAgICBzaXpl
X3QgbGFzdEVuZ2luZUZyYW1lID0gbGFzdEluVHJhY2U7Ci0gICAgICAgIGZvciAodW5zaWduZWQg
Y291bnQgPSAwOyBsYXN0RW5naW5lRnJhbWUgPiB0cmFjZSAmJiBjb3VudCA8IHJlY3Vyc2lvbkxp
bWl0OyArK2NvdW50KSB7Ci0gICAgICAgICAgICAtLWxhc3RFbmdpbmVGcmFtZTsKLSAgICAgICAg
ICAgIEFTU0VSVChtX3NhbXBsZXNbbGFzdEVuZ2luZUZyYW1lXS50eXBlID09IEVuZ2luZUZyYW1l
KTsKLSAgICAgICAgICAgIGNvbnN0IGNoYXIqIG5hbWUgPSAiPHVua25vd24+IjsKLSAgICAgICAg
ICAgIGF1dG8gZGVtYW5nbGVkID0gU3RhY2tUcmFjZTo6ZGVtYW5nbGUobV9zYW1wbGVzW2xhc3RF
bmdpbmVGcmFtZV0ucGMpOwotICAgICAgICAgICAgaWYgKGRlbWFuZ2xlZCkKLSAgICAgICAgICAg
ICAgICBuYW1lID0gZGVtYW5nbGVkLT5kZW1hbmdsZWROYW1lKCkgPyBkZW1hbmdsZWQtPmRlbWFu
Z2xlZE5hbWUoKSA6IGRlbWFuZ2xlZC0+bWFuZ2xlZE5hbWUoKTsKLSAgICAgICAgICAgIGNhbGxi
YWNrcyA9IGNhbGxiYWNrcy0+c2FtcGxlQ2hpbGQobmFtZSk7Ci0gICAgICAgICAgICBpZiAodHJ1
bmNhdGVUcmFjZShuYW1lKSkKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotCi0g
ICAgICAgIC8vIE1vdmUgb24gdG8gdGhlIG5leHQgdHJhY2UuCi0gICAgICAgIHRyYWNlID0gbGFz
dEluVHJhY2UgKyAxOwotICAgICAgICBBU1NFUlQodHJhY2UgPD0gbV9zYW1wbGVzLnNpemUoKSk7
Ci0gICAgfQotCi0gICAgLy8gT3V0cHV0IHRoZSBwcm9maWxlIHRyZWUuCi0gICAgZGF0YUxvZ0Yo
IlRvdGFsIHNhbXBsZXM6ICVsbGRcbiIsIHN0YXRpY19jYXN0PGxvbmcgbG9uZz4ocHJvZmlsZS5j
aGlsZENvdW50KCkpKTsKLSAgICBwcm9maWxlLmR1bXAoKTsKLSAgICAKLSAgICBmb3IgKHNpemVf
dCBpID0gMCA7IGkgPCBtX2NoaWxkcmVuLnNpemUoKTsgKytpKQotICAgICAgICBtX2NoaWxkcmVu
W2ldLT5yZXBvcnQoKTsKLQotICAgIGRhdGFMb2dGKCI8L0NvZGVQcm9maWxpbmcgJXM6JWQ+XG4i
LCBtX2ZpbGUuZGF0YSgpLCBtX2xpbmVOdW1iZXIpOwotfQotCi19CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvdG9vbHMvQ29kZVByb2ZpbGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvdG9vbHMvQ29kZVByb2ZpbGUuaAkocmV2aXNpb24gMjU4MzUwKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL3Rvb2xzL0NvZGVQcm9maWxlLmgJKG5vbmV4aXN0ZW50KQpAQCAt
MSw4OSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEyIEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1l
dDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICog
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICov
Ci0KLSNwcmFnbWEgb25jZQotCi0jaW5jbHVkZSAiU291cmNlQ29kZS5oIgotI2luY2x1ZGUgIlRp
ZXJlZE1NYXBBcnJheS5oIgotI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KLQotbmFtZXNw
YWNlIEpTQyB7Ci0KLWNsYXNzIENvZGVQcm9maWxlIHsKLSAgICBXVEZfTUFLRV9GQVNUX0FMTE9D
QVRFRDsKLXB1YmxpYzoKLSAgICBDb2RlUHJvZmlsZShjb25zdCBTb3VyY2VDb2RlJiBzb3VyY2Us
IENvZGVQcm9maWxlKiBwYXJlbnQpCi0gICAgICAgIDogbV9maWxlKFN0cmluZyhzb3VyY2UucHJv
dmlkZXIoKS0+dXJsKCkpLnV0ZjgoKSkKLSAgICAgICAgLCBtX2xpbmVOdW1iZXIoc291cmNlLmZp
cnN0TGluZSgpLm9uZUJhc2VkSW50KCkpCi0gICAgICAgICwgbV9wYXJlbnQocGFyZW50KQotICAg
IHsKLSAgICAgICAgaWYgKHBhcmVudCkKLSAgICAgICAgICAgIHBhcmVudC0+YWRkQ2hpbGQoc3Rk
Ojp1bmlxdWVfcHRyPENvZGVQcm9maWxlPih0aGlzKSk7Ci0gICAgfQotCi0gICAgdm9pZCBzYW1w
bGUodm9pZCogcGMsIHZvaWQqKiBmcmFtZVBvaW50ZXIpOwotICAgIHZvaWQgcmVwb3J0KCk7Ci0K
LSAgICBDb2RlUHJvZmlsZSogcGFyZW50KCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBtX3BhcmVu
dDsKLSAgICB9Ci0gICAgCi0gICAgdm9pZCBhZGRDaGlsZChzdGQ6OnVuaXF1ZV9wdHI8Q29kZVBy
b2ZpbGU+IGNoaWxkKQotICAgIHsKLSAgICAgICAgbV9jaGlsZHJlbi5hcHBlbmQoV1RGTW92ZShj
aGlsZCkpOwotICAgIH0KLQotICAgIGVudW0gQ29kZVR5cGUgewotICAgICAgICBFbmdpbmVDb2Rl
LAotICAgICAgICBHbG9iYWxUaHVuaywKLSAgICAgICAgUmVnRXhwQ29kZSwKLSAgICAgICAgREZH
SklULAotICAgICAgICBCYXNlbGluZU9ubHksCi0gICAgICAgIEJhc2VsaW5lUHJvZmlsZSwKLSAg
ICAgICAgQmFzZWxpbmVPU1IsCi0gICAgICAgIEVuZ2luZUZyYW1lLAotICAgICAgICBOdW1iZXJP
ZkNvZGVUeXBlcwotICAgIH07Ci0KLXByaXZhdGU6Ci0gICAgc3RydWN0IENvZGVSZWNvcmQgewot
ICAgICAgICBDb2RlUmVjb3JkKHZvaWQqIHBjLCBDb2RlVHlwZSB0eXBlKQotICAgICAgICAgICAg
OiBwYyhwYykKLSAgICAgICAgICAgICwgdHlwZSh0eXBlKQotICAgICAgICB7Ci0gICAgICAgIH0K
LSAgICAgICAgdm9pZCogcGM7Ci0gICAgICAgIENvZGVUeXBlIHR5cGU7Ci0gICAgfTsKLQotICAg
IENTdHJpbmcgbV9maWxlOwotICAgIHVuc2lnbmVkIG1fbGluZU51bWJlcjsKLSAgICBDb2RlUHJv
ZmlsZSogbV9wYXJlbnQ7Ci0gICAgVmVjdG9yPHN0ZDo6dW5pcXVlX3B0cjxDb2RlUHJvZmlsZT4+
IG1fY2hpbGRyZW47Ci0gICAgVGllcmVkTU1hcEFycmF5PENvZGVSZWNvcmQ+IG1fc2FtcGxlczsK
LX07Ci0KLX0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3Rv
b2xzL0NvZGVQcm9maWxpbmcuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS90b29scy9Db2RlUHJvZmlsaW5nLmNwcAkocmV2aXNpb24gMjU4MzUwKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL3Rvb2xzL0NvZGVQcm9maWxpbmcuY3BwCShub25leGlzdGVudCkKQEAgLTEs
MTY5ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTItMjAxOCBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFy
ZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IK
LSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAK
LSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiQ29kZVByb2ZpbGluZy5oIgot
Ci0jaW5jbHVkZSAiQ29kZVByb2ZpbGUuaCIKLSNpbmNsdWRlICJNYWNoaW5lQ29udGV4dC5oIgot
I2luY2x1ZGUgPHd0Zi9NZXRhQWxsb2NhdG9yLmg+Ci0KLSNpZiBIQVZFKFNJR05BTF9IKQotI2lu
Y2x1ZGUgPHNpZ25hbC5oPgotI2VuZGlmCi0KLSNpZiBIQVZFKE1BQ0hJTkVfQ09OVEVYVCkKLSNp
bmNsdWRlIDxzeXMvdGltZS5oPgotI2VuZGlmCi0KLW5hbWVzcGFjZSBKU0MgewotCi12b2xhdGls
ZSBDb2RlUHJvZmlsZSogQ29kZVByb2ZpbGluZzo6c19wcm9maWxlU3RhY2sgPSAwOwotQ29kZVBy
b2ZpbGluZzo6TW9kZSBDb2RlUHJvZmlsaW5nOjpzX21vZGUgPSBDb2RlUHJvZmlsaW5nOjpEaXNh
YmxlZDsKLVdURjo6TWV0YUFsbG9jYXRvclRyYWNrZXIqIENvZGVQcm9maWxpbmc6OnNfdHJhY2tl
ciA9IDA7Ci0KLUlHTk9SRV9XQVJOSU5HU19CRUdJTigibWlzc2luZy1ub3JldHVybiIpCi0KLSNp
ZiBIQVZFKE1BQ0hJTkVfQ09OVEVYVCkKLS8vIEhlbHBlciBmdW5jdGlvbiB0byBzdGFydCAmIHN0
b3AgdGhlIHRpbWVyLgotLy8gUHJlc2VudGx5IHdlJ3JlIHVzaW5nIHRoZSB3YWxsLWNsb2NrIHRp
bWVyLCBzaW5jZSB0aGlzIHNlZW1zIHRvIGdpdmUgdGhlIGJlc3QgcmVzdWx0cy4KLXN0YXRpYyB2
b2lkIHNldFByb2ZpbGVUaW1lcih1bnNpZ25lZCB1c2VjKQotewotICAgIGl0aW1lcnZhbCB0aW1l
cjsKLSAgICB0aW1lci5pdF92YWx1ZS50dl9zZWMgPSAwOwotICAgIHRpbWVyLml0X3ZhbHVlLnR2
X3VzZWMgPSB1c2VjOwotICAgIHRpbWVyLml0X2ludGVydmFsLnR2X3NlYyA9IDA7Ci0gICAgdGlt
ZXIuaXRfaW50ZXJ2YWwudHZfdXNlYyA9IHVzZWM7Ci0gICAgc2V0aXRpbWVyKElUSU1FUl9SRUFM
LCAmdGltZXIsIDApOwotfQotI2VuZGlmCi0KLUlHTk9SRV9XQVJOSU5HU19FTkQKLQotI2lmIEhB
VkUoTUFDSElORV9DT05URVhUKQotc3RhdGljIHZvaWQgcHJvZmlsaW5nVGltZXIoaW50LCBzaWdp
bmZvX3QqLCB2b2lkKiB1YXApCi17Ci0gICAgUGxhdGZvcm1SZWdpc3RlcnMmIHBsYXRmb3JtUmVn
aXN0ZXJzID0gV1RGOjpyZWdpc3RlcnNGcm9tVUNvbnRleHQoc3RhdGljX2Nhc3Q8dWNvbnRleHRf
dCo+KHVhcCkpOwotICAgIGlmIChhdXRvIGluc3RydWN0aW9uUG9pbnRlciA9IE1hY2hpbmVDb250
ZXh0OjppbnN0cnVjdGlvblBvaW50ZXIocGxhdGZvcm1SZWdpc3RlcnMpKSB7Ci0gICAgICAgIENv
ZGVQcm9maWxpbmc6OnNhbXBsZSgKLSAgICAgICAgICAgIGluc3RydWN0aW9uUG9pbnRlci0+dW50
YWdnZWRFeGVjdXRhYmxlQWRkcmVzcygpLAotICAgICAgICAgICAgcmVpbnRlcnByZXRfY2FzdDx2
b2lkKio+KE1hY2hpbmVDb250ZXh0OjpmcmFtZVBvaW50ZXIocGxhdGZvcm1SZWdpc3RlcnMpKSk7
Ci0gICAgfQotfQotI2VuZGlmCi0KLS8vIENhbGxiYWNrIHRyaWdnZXJlZCB3aGVuIHRoZSB0aW1l
ciBpcyBmaXJlZC4KLXZvaWQgQ29kZVByb2ZpbGluZzo6c2FtcGxlKHZvaWQqIHBjLCB2b2lkKiog
ZnJhbWVQb2ludGVyKQotewotICAgIENvZGVQcm9maWxlKiBwcm9maWxlU3RhY2sgPSBjb25zdF9j
YXN0PENvZGVQcm9maWxlKj4oc19wcm9maWxlU3RhY2spOwotICAgIGlmIChwcm9maWxlU3RhY2sp
Ci0gICAgICAgIHByb2ZpbGVTdGFjay0+c2FtcGxlKHBjLCBmcmFtZVBvaW50ZXIpOwotfQotCi12
b2lkIENvZGVQcm9maWxpbmc6Om5vdGlmeUFsbG9jYXRvcihXVEY6Ok1ldGFBbGxvY2F0b3IqIGFs
bG9jYXRvcikKLXsKLSAgICAvLyBDaGVjayBmb3IgSlNDX0NPREVfUFJPRklMSU5HLgotICAgIGNv
bnN0IGNoYXIqIGNvZGVQcm9maWxpbmdNb2RlID0gZ2V0ZW52KCJKU0NfQ09ERV9QUk9GSUxJTkci
KTsKLSAgICBpZiAoIWNvZGVQcm9maWxpbmdNb2RlKQotICAgICAgICByZXR1cm47Ci0KLSAgICAv
LyBDaGVjayBmb3IgYSB2YWxpZCBtb2RlLCBjdXJyZW50bHkgIjEiLCAiMiIsIG9yICIzIi4KLSAg
ICBpZiAoIWNvZGVQcm9maWxpbmdNb2RlWzBdIHx8IGNvZGVQcm9maWxpbmdNb2RlWzFdKQotICAg
ICAgICByZXR1cm47Ci0gICAgc3dpdGNoICgqY29kZVByb2ZpbGluZ01vZGUpIHsKLSAgICBjYXNl
ICcxJzoKLSAgICAgICAgc19tb2RlID0gRW5hYmxlZDsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2Fz
ZSAnMic6Ci0gICAgICAgIHNfbW9kZSA9IFZlcmJvc2U7Ci0gICAgICAgIGJyZWFrOwotICAgIGNh
c2UgJzMnOgotICAgICAgICBzX21vZGUgPSBWZXJ5VmVyYm9zZTsKLSAgICAgICAgYnJlYWs7Ci0g
ICAgZGVmYXVsdDoKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIEFTU0VSVChlbmFibGVk
KCkpOwotICAgIEFTU0VSVCghc190cmFja2VyKTsKLSAgICBzX3RyYWNrZXIgPSBuZXcgV1RGOjpN
ZXRhQWxsb2NhdG9yVHJhY2tlcigpOwotICAgIGFsbG9jYXRvci0+dHJhY2tBbGxvY2F0aW9ucyhz
X3RyYWNrZXIpOwotfQotCi12b2lkKiBDb2RlUHJvZmlsaW5nOjpnZXRPd25lclVJREZvclBDKHZv
aWQqIGFkZHJlc3MpCi17Ci0gICAgaWYgKCFzX3RyYWNrZXIpCi0gICAgICAgIHJldHVybiAwOwot
ICAgIFdURjo6TWV0YUFsbG9jYXRvckhhbmRsZSogaGFuZGxlID0gc190cmFja2VyLT5maW5kKGFk
ZHJlc3MpOwotICAgIGlmICghaGFuZGxlKQotICAgICAgICByZXR1cm4gMDsKLSAgICByZXR1cm4g
aGFuZGxlLT5vd25lclVJRCgpOwotfQotCi12b2lkIENvZGVQcm9maWxpbmc6OmJlZ2luKGNvbnN0
IFNvdXJjZUNvZGUmIHNvdXJjZSkKLXsKLSAgICAvLyBQdXNoIGEgbmV3IENvZGVQcm9maWxlIG9u
dG8gdGhlIHN0YWNrIGZvciBlYWNoIHNjcmlwdCBlbmNvdW50ZXJlZC4KLSAgICBDb2RlUHJvZmls
ZSogcHJvZmlsZVN0YWNrID0gY29uc3RfY2FzdDxDb2RlUHJvZmlsZSo+KHNfcHJvZmlsZVN0YWNr
KTsKLSAgICBib29sIGFscmVhZHlQcm9maWxpbmcgPSBwcm9maWxlU3RhY2s7Ci0gICAgc19wcm9m
aWxlU3RhY2sgPSBwcm9maWxlU3RhY2sgPSBuZXcgQ29kZVByb2ZpbGUoc291cmNlLCBwcm9maWxl
U3RhY2spOwotCi0gICAgLy8gSXMgdGhlIHByb2ZpbGVyIGFscmVhZHkgcnVubmluZyAtIGlmIHNv
LCB0aGUgdGltZXIgd2lsbCBhbHJlYWR5IGJlIHNldCB1cC4KLSAgICBpZiAoYWxyZWFkeVByb2Zp
bGluZykKLSAgICAgICAgcmV0dXJuOwotCi0jaWYgSEFWRShNQUNISU5FX0NPTlRFWFQpCi0gICAg
Ly8gUmVnc2l0ZXIgYSBzaWduYWwgaGFuZGxlciAmIGl0aW1lci4KLSAgICBzdHJ1Y3Qgc2lnYWN0
aW9uIGFjdGlvbjsKLSAgICBhY3Rpb24uc2Ffc2lnYWN0aW9uID0gcmVpbnRlcnByZXRfY2FzdDx2
b2lkICgqKShpbnQsIHNpZ2luZm9fdCAqLCB2b2lkICopPihwcm9maWxpbmdUaW1lcik7Ci0gICAg
c2lnZmlsbHNldCgmYWN0aW9uLnNhX21hc2spOwotICAgIGFjdGlvbi5zYV9mbGFncyA9IFNBX1NJ
R0lORk87Ci0gICAgc2lnYWN0aW9uKFNJR0FMUk0sICZhY3Rpb24sIDApOwotICAgIHNldFByb2Zp
bGVUaW1lcigxMDApOwotI2VuZGlmCi19Ci0KLXZvaWQgQ29kZVByb2ZpbGluZzo6ZW5kKCkKLXsK
LSAgICAvLyBQb3AgdGhlIGN1cnJlbnQgcHJvZmlsZXIgb2ZmIHRoZSBzdGFjay4KLSAgICBDb2Rl
UHJvZmlsZSogY3VycmVudCA9IGNvbnN0X2Nhc3Q8Q29kZVByb2ZpbGUqPihzX3Byb2ZpbGVTdGFj
ayk7Ci0gICAgQVNTRVJUKGN1cnJlbnQpOwotICAgIHNfcHJvZmlsZVN0YWNrID0gY3VycmVudC0+
cGFyZW50KCk7Ci0KLSAgICAvLyBJcyB0aGlzIHRoZSBvdXRlcm1vc3Qgc2NyaXB0IGJlaW5nIHBy
b2ZpbGVkPyAtIGlmIG5vdCwganVzdCByZXR1cm4uCi0gICAgLy8gV2UgcGVyZm9ybSBhbGwgb3V0
cHV0IG9mIHByb2ZpbGVzIHJlY3Vyc2l2ZWx5IGZyb20gdGhlIG91dGVybW9zdCBzY3JpcHQsCi0g
ICAgLy8gdG8gbWluaW1pemUgcHJvZmlsaW5nIG92ZXJoZWFkIGZyb20gc2tld2luZyByZXN1bHRz
LgotICAgIGlmIChzX3Byb2ZpbGVTdGFjaykKLSAgICAgICAgcmV0dXJuOwotCi0jaWYgSEFWRShN
QUNISU5FX0NPTlRFWFQpCi0gICAgLy8gU3RvcCBwcm9maWxpbmcKLSAgICBzZXRQcm9maWxlVGlt
ZXIoMCk7Ci0jZW5kaWYKLQotICAgIGN1cnJlbnQtPnJlcG9ydCgpOwotICAgIGRlbGV0ZSBjdXJy
ZW50OwotfQotCi19CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvdG9vbHMvQ29kZVByb2Zp
bGluZy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90b29scy9Db2RlUHJv
ZmlsaW5nLmgJKHJldmlzaW9uIDI1ODM1MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90b29s
cy9Db2RlUHJvZmlsaW5nLmgJKG5vbmV4aXN0ZW50KQpAQCAtMSw4MSArMCwwIEBACi0vKgotICog
Q29weXJpZ2h0IChDKSAyMDEyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0g
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJ
UycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0g
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0KLSNwcmFnbWEgb25jZQotCi1u
YW1lc3BhY2UgV1RGIHsKLQotY2xhc3MgTWV0YUFsbG9jYXRvcjsKLWNsYXNzIE1ldGFBbGxvY2F0
b3JUcmFja2VyOwotCi19Ci0KLW5hbWVzcGFjZSBKU0MgewotCi1jbGFzcyBDb2RlUHJvZmlsZTsK
LWNsYXNzIFNvdXJjZUNvZGU7Ci0KLWNsYXNzIENvZGVQcm9maWxpbmcgewotICAgIGVudW0gTW9k
ZSB7Ci0gICAgICAgIERpc2FibGVkLAotICAgICAgICBFbmFibGVkLAotICAgICAgICBWZXJib3Nl
LAotICAgICAgICBWZXJ5VmVyYm9zZQotICAgIH07Ci0KLXB1YmxpYzoKLSAgICBDb2RlUHJvZmls
aW5nKGNvbnN0IFNvdXJjZUNvZGUmIHNvdXJjZSkKLSAgICAgICAgOiBtX2FjdGl2ZShlbmFibGVk
KCkpCi0gICAgewotICAgICAgICBpZiAobV9hY3RpdmUpCi0gICAgICAgICAgICBiZWdpbihzb3Vy
Y2UpOwotICAgIH0KLQotICAgIH5Db2RlUHJvZmlsaW5nKCkKLSAgICB7Ci0gICAgICAgIGlmICht
X2FjdGl2ZSkKLSAgICAgICAgICAgIGVuZCgpOwotICAgIH0KLQotICAgIHN0YXRpYyBib29sIGVu
YWJsZWQoKSB7IHJldHVybiBzX21vZGUgIT0gRGlzYWJsZWQ7IH0KLSAgICBzdGF0aWMgYm9vbCBi
ZVZlcmJvc2UoKSB7IHJldHVybiBzX21vZGUgPj0gVmVyYm9zZTsgfQotICAgIHN0YXRpYyBib29s
IGJlVmVyeVZlcmJvc2UoKSB7IHJldHVybiBzX21vZGUgPj0gVmVyeVZlcmJvc2U7IH0KLQotICAg
IHN0YXRpYyB2b2lkIG5vdGlmeUFsbG9jYXRvcihXVEY6Ok1ldGFBbGxvY2F0b3IqKTsKLSAgICBz
dGF0aWMgdm9pZCogZ2V0T3duZXJVSURGb3JQQyh2b2lkKik7Ci0gICAgc3RhdGljIHZvaWQgc2Ft
cGxlKHZvaWQqIHBjLCB2b2lkKiogZnJhbWVQb2ludGVyKTsKLQotcHJpdmF0ZToKLSAgICB2b2lk
IGJlZ2luKGNvbnN0IFNvdXJjZUNvZGUmKTsKLSAgICB2b2lkIGVuZCgpOwotCi0gICAgYm9vbCBt
X2FjdGl2ZTsKLQotICAgIHN0YXRpYyBNb2RlIHNfbW9kZTsKLSAgICBzdGF0aWMgV1RGOjpNZXRh
QWxsb2NhdG9yVHJhY2tlciogc190cmFja2VyOwotICAgIHN0YXRpYyB2b2xhdGlsZSBDb2RlUHJv
ZmlsZSogc19wcm9maWxlU3RhY2s7Ci19OwotCi19IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21CQlFQbGFuLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQkJRUGxhbi5jcHAJKHJldmlzaW9uIDI1ODM1
MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21CQlFQbGFuLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMTMyLDEzICsxMzIsOSBAQCB2b2lkIEJCUVBsYW46OndvcmsoQ29tcGlsYXRp
b25FZmZvcnQgZWZmCiAgICAgICAgIC8vIHdpbGwgdXBkYXRlLiBJdCdzIGFsc28gb2sgaWYgdGhl
eSBwdWJsaXNoIHRoZWlyIGNvZGUgYmVmb3JlIHdlIHJlc2V0IHRoZSBpbnN0cnVjdGlvbiBjYWNo
ZXMgYmVjYXVzZSBhZnRlciB3ZSByZWxlYXNlCiAgICAgICAgIC8vIHRoZSBsb2NrIG91ciBjb2Rl
IGlzIHJlYWR5IHRvIGJlIHB1Ymxpc2hlZCB0b28uCiAgICAgICAgIExvY2tIb2xkZXIgaG9sZGVy
KG1fY29kZUJsb2NrLT5tX2xvY2spOworCiAgICAgICAgIG1fY29kZUJsb2NrLT5tX2JicUNhbGxl
ZXNbbV9mdW5jdGlvbkluZGV4XSA9IGNhbGxlZS5jb3B5UmVmKCk7Ci0gICAgICAgIHsKLSAgICAg
ICAgICAgIExMSW50Q2FsbGVlJiBsbGludENhbGxlZSA9IG1fY29kZUJsb2NrLT5tX2xsaW50Q2Fs
bGVlcy0+YXQobV9mdW5jdGlvbkluZGV4KS5nZXQoKTsKLSAgICAgICAgICAgIGF1dG8gbG9ja2Vy
ID0gaG9sZExvY2sobGxpbnRDYWxsZWUudGllclVwQ291bnRlcigpLm1fbG9jayk7Ci0gICAgICAg
ICAgICBsbGludENhbGxlZS5zZXRSZXBsYWNlbWVudChjYWxsZWUuY29weVJlZigpKTsKLSAgICAg
ICAgICAgIGxsaW50Q2FsbGVlLnRpZXJVcENvdW50ZXIoKS5tX2NvbXBpbGF0aW9uU3RhdHVzID0g
TExJbnRUaWVyVXBDb3VudGVyOjpDb21waWxhdGlvblN0YXR1czo6Q29tcGlsZWQ7Ci0gICAgICAg
IH0KKwogICAgICAgICBmb3IgKGF1dG8mIGNhbGwgOiBjYWxsZWUtPndhc21Ub1dhc21DYWxsc2l0
ZXMoKSkgewogICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPFdhc21FbnRyeVB0clRh
Zz4gZW50cnlwb2ludDsKICAgICAgICAgICAgIGlmIChjYWxsLmZ1bmN0aW9uSW5kZXhTcGFjZSA8
IG1fbW9kdWxlSW5mb3JtYXRpb24tPmltcG9ydEZ1bmN0aW9uQ291bnQoKSkKQEAgLTE0OCwyNCAr
MTQ0LDQ4IEBAIHZvaWQgQkJRUGxhbjo6d29yayhDb21waWxhdGlvbkVmZm9ydCBlZmYKIAogICAg
ICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OnJlcGF0Y2hOZWFyQ2FsbChjYWxsLmNhbGxMb2NhdGlv
biwgQ29kZUxvY2F0aW9uTGFiZWw8V2FzbUVudHJ5UHRyVGFnPihlbnRyeXBvaW50KSk7CiAgICAg
ICAgIH0KLSAgICB9CiAKLSAgICAvLyBJdCdzIGltcG9ydGFudCB0byBtYWtlIHN1cmUgd2UgZG8g
dGhpcyBiZWZvcmUgd2UgbWFrZSBhbnkgb2YgdGhlIGNvZGUgd2UganVzdCBjb21waWxlZCB2aXNp
YmxlLiBJZiB3ZSBkaWRuJ3QsIHdlIGNvdWxkIGVuZCB1cAotICAgIC8vIHdoZXJlIHdlIGFyZSB0
aWVyaW5nIHVwIHNvbWUgZnVuY3Rpb24gQSB0byBBJyBhbmQgd2UgcmVwYXRjaCBzb21lIGZ1bmN0
aW9uIEIgdG8gY2FsbCBBJyBpbnN0ZWFkIG9mIEEuIEFub3RoZXIgQ1BVIGNvdWxkIHNlZQotICAg
IC8vIHRoZSB1cGRhdGVzIHRvIEIgYnV0IHN0aWxsIG5vdCBoYXZlIHJlc2V0IGl0cyBjYWNoZSBv
ZiBBJywgd2hpY2ggd291bGQgbGVhZCB0byBhbGwga2luZHMgb2YgYmFkbmVzcy4KLSAgICByZXNl
dEluc3RydWN0aW9uQ2FjaGVPbkFsbFRocmVhZHMoKTsKLSAgICBXVEY6OnN0b3JlU3RvcmVGZW5j
ZSgpOyAvLyBUaGlzIHByb2JhYmx5IGlzbid0IG5lY2Vzc2FyeSBidXQgaXQncyBnb29kIHRvIGJl
IHBhcmFub2lkLgorICAgICAgICBIYXNoTWFwPHZvaWQqLCBDb2RlTG9jYXRpb25MYWJlbDxXYXNt
RW50cnlQdHJUYWc+PiBzdGFnZWRDYWxsczsKKyAgICAgICAgYXV0byBzdGFnZVJlcGF0Y2ggPSBb
Jl0gKGNvbnN0IFZlY3RvcjxVbmxpbmtlZFdhc21Ub1dhc21DYWxsPiYgY2FsbHNpdGVzKSB7Cisg
ICAgICAgICAgICBmb3IgKGF1dG8mIGNhbGwgOiBjYWxsc2l0ZXMpIHsKKyAgICAgICAgICAgICAg
ICBpZiAoY2FsbC5mdW5jdGlvbkluZGV4U3BhY2UgPT0gZnVuY3Rpb25JbmRleFNwYWNlKSB7Cisg
ICAgICAgICAgICAgICAgICAgIENvZGVMb2NhdGlvbkxhYmVsPFdhc21FbnRyeVB0clRhZz4gdGFy
Z2V0ID0gTWFjcm9Bc3NlbWJsZXI6OnByZXBhcmVGb3JBdG9taWNSZXBhdGNoTmVhckNhbGxDb25j
dXJyZW50bHkoY2FsbC5jYWxsTG9jYXRpb24sIENvZGVMb2NhdGlvbkxhYmVsPFdhc21FbnRyeVB0
clRhZz4oZW50cnlwb2ludCkpOworICAgICAgICAgICAgICAgICAgICBzdGFnZWRDYWxscy5hZGQo
Y2FsbC5jYWxsTG9jYXRpb24uZGF0YUxvY2F0aW9uKCksIHRhcmdldCk7CisgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9OwogCi0gICAgbV9jb2RlQmxvY2stPm1fd2Fz
bUluZGlyZWN0Q2FsbEVudHJ5UG9pbnRzW21fZnVuY3Rpb25JbmRleF0gPSBlbnRyeXBvaW50Owot
ICAgIHsKLSAgICAgICAgTG9ja0hvbGRlciBob2xkZXIobV9jb2RlQmxvY2stPm1fbG9jayk7Cisg
ICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX2NvZGVCbG9jay0+bV93YXNtVG9XYXNt
Q2FsbHNpdGVzLnNpemUoKTsgKytpKSB7CisgICAgICAgICAgICBzdGFnZVJlcGF0Y2gobV9jb2Rl
QmxvY2stPm1fd2FzbVRvV2FzbUNhbGxzaXRlc1tpXSk7CisgICAgICAgICAgICBpZiAobV9jb2Rl
QmxvY2stPm1fbGxpbnRDYWxsZWVzKSB7CisgICAgICAgICAgICAgICAgTExJbnRDYWxsZWUmIGxs
aW50Q2FsbGVlID0gbV9jb2RlQmxvY2stPm1fbGxpbnRDYWxsZWVzLT5hdChpKS5nZXQoKTsKKyAg
ICAgICAgICAgICAgICBpZiAoSklUQ2FsbGVlKiByZXBsYWNlbWVudENhbGxlZSA9IGxsaW50Q2Fs
bGVlLnJlcGxhY2VtZW50KCkpCisgICAgICAgICAgICAgICAgICAgIHN0YWdlUmVwYXRjaChyZXBs
YWNlbWVudENhbGxlZS0+d2FzbVRvV2FzbUNhbGxzaXRlcygpKTsKKyAgICAgICAgICAgICAgICBp
ZiAoT01HRm9yT1NSRW50cnlDYWxsZWUqIG9zckVudHJ5Q2FsbGVlID0gbGxpbnRDYWxsZWUub3Ny
RW50cnlDYWxsZWUoKSkKKyAgICAgICAgICAgICAgICAgICAgc3RhZ2VSZXBhdGNoKG9zckVudHJ5
Q2FsbGVlLT53YXNtVG9XYXNtQ2FsbHNpdGVzKCkpOworICAgICAgICAgICAgfQorICAgICAgICAg
ICAgaWYgKEJCUUNhbGxlZSogYmJxQ2FsbGVlID0gbV9jb2RlQmxvY2stPm1fYmJxQ2FsbGVlc1tp
XS5nZXQoKSkgeworICAgICAgICAgICAgICAgIGlmIChPTUdDYWxsZWUqIHJlcGxhY2VtZW50Q2Fs
bGVlID0gYmJxQ2FsbGVlLT5yZXBsYWNlbWVudCgpKQorICAgICAgICAgICAgICAgICAgICBzdGFn
ZVJlcGF0Y2gocmVwbGFjZW1lbnRDYWxsZWUtPndhc21Ub1dhc21DYWxsc2l0ZXMoKSk7CisgICAg
ICAgICAgICAgICAgaWYgKE9NR0Zvck9TUkVudHJ5Q2FsbGVlKiBvc3JFbnRyeUNhbGxlZSA9IGJi
cUNhbGxlZS0+b3NyRW50cnlDYWxsZWUoKSkKKyAgICAgICAgICAgICAgICAgICAgc3RhZ2VSZXBh
dGNoKG9zckVudHJ5Q2FsbGVlLT53YXNtVG9XYXNtQ2FsbHNpdGVzKCkpOworICAgICAgICAgICAg
fQorICAgICAgICB9CisKKyAgICAgICAgLy8gSXQncyBpbXBvcnRhbnQgdG8gbWFrZSBzdXJlIHdl
IGRvIHRoaXMgYmVmb3JlIHdlIG1ha2UgYW55IG9mIHRoZSBjb2RlIHdlIGp1c3QgY29tcGlsZWQg
dmlzaWJsZS4gSWYgd2UgZGlkbid0LCB3ZSBjb3VsZCBlbmQgdXAKKyAgICAgICAgLy8gd2hlcmUg
d2UgYXJlIHRpZXJpbmcgdXAgc29tZSBmdW5jdGlvbiBBIHRvIEEnIGFuZCB3ZSByZXBhdGNoIHNv
bWUgZnVuY3Rpb24gQiB0byBjYWxsIEEnIGluc3RlYWQgb2YgQS4gQW5vdGhlciBDUFUgY291bGQg
c2VlCisgICAgICAgIC8vIHRoZSB1cGRhdGVzIHRvIEIgYnV0IHN0aWxsIG5vdCBoYXZlIHJlc2V0
IGl0cyBjYWNoZSBvZiBBJywgd2hpY2ggd291bGQgbGVhZCB0byBhbGwga2luZHMgb2YgYmFkbmVz
cy4KKyAgICAgICAgcmVzZXRJbnN0cnVjdGlvbkNhY2hlT25BbGxUaHJlYWRzKCk7CisgICAgICAg
IFdURjo6c3RvcmVTdG9yZUZlbmNlKCk7IC8vIFRoaXMgcHJvYmFibHkgaXNuJ3QgbmVjZXNzYXJ5
IGJ1dCBpdCdzIGdvb2QgdG8gYmUgcGFyYW5vaWQuCisKKyAgICAgICAgbV9jb2RlQmxvY2stPm1f
d2FzbUluZGlyZWN0Q2FsbEVudHJ5UG9pbnRzW21fZnVuY3Rpb25JbmRleF0gPSBlbnRyeXBvaW50
OwogCiAgICAgICAgIGF1dG8gcmVwYXRjaENhbGxzID0gWyZdIChjb25zdCBWZWN0b3I8VW5saW5r
ZWRXYXNtVG9XYXNtQ2FsbD4mIGNhbGxzaXRlcykgewogICAgICAgICAgICAgZm9yIChhdXRvJiBj
YWxsIDogY2FsbHNpdGVzKSB7CiAgICAgICAgICAgICAgICAgZGF0YUxvZ0xuSWYoV2FzbUJCUVBs
YW5JbnRlcm5hbDo6dmVyYm9zZSwgIkNvbnNpZGVyaW5nIHJlcGF0Y2hpbmcgY2FsbCBhdDogIiwg
UmF3UG9pbnRlcihjYWxsLmNhbGxMb2NhdGlvbi5kYXRhTG9jYXRpb24oKSksICIgdGhhdCB0YXJn
ZXRzICIsIGNhbGwuZnVuY3Rpb25JbmRleFNwYWNlKTsKICAgICAgICAgICAgICAgICBpZiAoY2Fs
bC5mdW5jdGlvbkluZGV4U3BhY2UgPT0gZnVuY3Rpb25JbmRleFNwYWNlKSB7CiAgICAgICAgICAg
ICAgICAgICAgIGRhdGFMb2dMbklmKFdhc21CQlFQbGFuSW50ZXJuYWw6OnZlcmJvc2UsICJSZXBh
dGNoaW5nIGNhbGwgYXQ6ICIsIFJhd1BvaW50ZXIoY2FsbC5jYWxsTG9jYXRpb24uZGF0YUxvY2F0
aW9uKCkpLCAiIHRvICIsIFJhd1BvaW50ZXIoZW50cnlwb2ludC5leGVjdXRhYmxlQWRkcmVzcygp
KSk7Ci0gICAgICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpyZXBhdGNoTmVhckNhbGwo
Y2FsbC5jYWxsTG9jYXRpb24sIENvZGVMb2NhdGlvbkxhYmVsPFdhc21FbnRyeVB0clRhZz4oZW50
cnlwb2ludCkpOworICAgICAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6cmVwYXRjaE5l
YXJDYWxsKGNhbGwuY2FsbExvY2F0aW9uLCBzdGFnZWRDYWxscy5nZXQoY2FsbC5jYWxsTG9jYXRp
b24uZGF0YUxvY2F0aW9uKCkpKTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CiAg
ICAgICAgIH07CkBAIC0xODYsMTEgKzIwNiwxNyBAQCB2b2lkIEJCUVBsYW46OndvcmsoQ29tcGls
YXRpb25FZmZvcnQgZWZmCiAgICAgICAgICAgICAgICAgICAgIHJlcGF0Y2hDYWxscyhvc3JFbnRy
eUNhbGxlZS0+d2FzbVRvV2FzbUNhbGxzaXRlcygpKTsKICAgICAgICAgICAgIH0KICAgICAgICAg
fQorCisgICAgICAgIHsKKyAgICAgICAgICAgIExMSW50Q2FsbGVlJiBsbGludENhbGxlZSA9IG1f
Y29kZUJsb2NrLT5tX2xsaW50Q2FsbGVlcy0+YXQobV9mdW5jdGlvbkluZGV4KS5nZXQoKTsKKyAg
ICAgICAgICAgIGF1dG8gbG9ja2VyID0gaG9sZExvY2sobGxpbnRDYWxsZWUudGllclVwQ291bnRl
cigpLm1fbG9jayk7CisgICAgICAgICAgICBsbGludENhbGxlZS5zZXRSZXBsYWNlbWVudChjYWxs
ZWUuY29weVJlZigpKTsKKyAgICAgICAgICAgIGxsaW50Q2FsbGVlLnRpZXJVcENvdW50ZXIoKS5t
X2NvbXBpbGF0aW9uU3RhdHVzID0gTExJbnRUaWVyVXBDb3VudGVyOjpDb21waWxhdGlvblN0YXR1
czo6Q29tcGlsZWQ7CisgICAgICAgIH0KICAgICB9CiAKICAgICBkYXRhTG9nTG5JZihXYXNtQkJR
UGxhbkludGVybmFsOjp2ZXJib3NlLCAiRmluaXNoZWQgQkJRICIsIG1fZnVuY3Rpb25JbmRleCk7
CiAKLQogICAgIGF1dG8gbG9ja2VyID0gaG9sZExvY2sobV9sb2NrKTsKICAgICBtb3ZlVG9TdGF0
ZShTdGF0ZTo6Q29tcGxldGVkKTsKICAgICBydW5Db21wbGV0aW9uVGFza3MobG9ja2VyKTsKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21PTUdGb3JPU1JFbnRyeVBsYW4uY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21PTUdGb3JPU1JF
bnRyeVBsYW4uY3BwCShyZXZpc2lvbiAyNTgzNTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
d2FzbS9XYXNtT01HRm9yT1NSRW50cnlQbGFuLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTAzLDEy
ICsxMDMsMTAgQEAgdm9pZCBPTUdGb3JPU1JFbnRyeVBsYW46OndvcmsoQ29tcGlsYXRpbwogCiAg
ICAgb21nRW50cnlwb2ludC5jYWxsZWVTYXZlUmVnaXN0ZXJzID0gV1RGTW92ZShwYXJzZUFuZENv
bXBpbGVSZXN1bHQudmFsdWUoKS0+ZW50cnlwb2ludC5jYWxsZWVTYXZlUmVnaXN0ZXJzKTsKIAot
ICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxXYXNtRW50cnlQdHJUYWc+IGVudHJ5cG9pbnQ7CiAg
ICAgQVNTRVJUKG1fY29kZUJsb2NrLnB0cigpID09IG1fbW9kdWxlLT5jb2RlQmxvY2tGb3IobW9k
ZSgpKSk7CiAgICAgUmVmPE9NR0Zvck9TUkVudHJ5Q2FsbGVlPiBjYWxsZWUgPSBPTUdGb3JPU1JF
bnRyeUNhbGxlZTo6Y3JlYXRlKFdURk1vdmUob21nRW50cnlwb2ludCksIGZ1bmN0aW9uSW5kZXhT
cGFjZSwgbV9tb2R1bGVJbmZvcm1hdGlvbi0+bmFtZVNlY3Rpb24tPmdldChmdW5jdGlvbkluZGV4
U3BhY2UpLCBvc3JFbnRyeVNjcmF0Y2hCdWZmZXJTaXplLCBtX2xvb3BJbmRleCwgV1RGTW92ZSh1
bmxpbmtlZENhbGxzKSk7CiAgICAgewogICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6cmVwYXRjaFBv
aW50ZXIocGFyc2VBbmRDb21waWxlUmVzdWx0LnZhbHVlKCktPmNhbGxlZU1vdmVMb2NhdGlvbiwg
Q2FsbGVlQml0czo6Ym94V2FzbShjYWxsZWUucHRyKCkpKTsKLSAgICAgICAgZW50cnlwb2ludCA9
IGNhbGxlZS0+ZW50cnlwb2ludCgpOwogCiAgICAgICAgIGF1dG8gbG9ja2VyID0gaG9sZExvY2so
bV9jb2RlQmxvY2stPm1fbG9jayk7CiAgICAgICAgIGZvciAoYXV0byYgY2FsbCA6IGNhbGxlZS0+
d2FzbVRvV2FzbUNhbGxzaXRlcygpKSB7CkBAIC0xMjAsMTEgKzExOCwxMCBAQCB2b2lkIE9NR0Zv
ck9TUkVudHJ5UGxhbjo6d29yayhDb21waWxhdGlvCiAKICAgICAgICAgICAgIE1hY3JvQXNzZW1i
bGVyOjpyZXBhdGNoTmVhckNhbGwoY2FsbC5jYWxsTG9jYXRpb24sIENvZGVMb2NhdGlvbkxhYmVs
PFdhc21FbnRyeVB0clRhZz4oZW50cnlwb2ludCkpOwogICAgICAgICB9Ci0gICAgfQotICAgIHJl
c2V0SW5zdHJ1Y3Rpb25DYWNoZU9uQWxsVGhyZWFkcygpOwotICAgIFdURjo6c3RvcmVTdG9yZUZl
bmNlKCk7Ci0gICAgewotICAgICAgICBhdXRvIGxvY2tlciA9IGhvbGRMb2NrKG1fY29kZUJsb2Nr
LT5tX2xvY2spOworCisgICAgICAgIHJlc2V0SW5zdHJ1Y3Rpb25DYWNoZU9uQWxsVGhyZWFkcygp
OworICAgICAgICBXVEY6OnN0b3JlU3RvcmVGZW5jZSgpOworCiAgICAgICAgIHsKICAgICAgICAg
ICAgIHN3aXRjaCAobV9jYWxsZWUtPmNvbXBpbGF0aW9uTW9kZSgpKSB7CiAgICAgICAgICAgICBj
YXNlIENvbXBpbGF0aW9uTW9kZTo6TExJbnRNb2RlOiB7CkBAIC0xNDYsMTkgKzE0Myw2IEBAIHZv
aWQgT01HRm9yT1NSRW50cnlQbGFuOjp3b3JrKENvbXBpbGF0aW8KICAgICAgICAgICAgICAgICBS
RUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICAgICAgfQogICAgICAgICB9Ci0g
ICAgICAgIFdURjo6c3RvcmVTdG9yZUZlbmNlKCk7Ci0gICAgICAgIC8vIEl0IGlzIHBvc3NpYmxl
IHRoYXQgYSBuZXcgT01HIGNhbGxlZSBpcyBhZGRlZCB3aGlsZSB3ZSByZWxlYXNlIG1fY29kZUJs
b2NrLT5sb2NrLgotICAgICAgICAvLyBVbnRpbCB3ZSBhZGQgT01HRm9yT1NSRW50cnkgY2FsbGVl
IHRvIEJCUUNhbGxlZSdzIG1fb3NyRW50cnlDYWxsZWUsIHRoaXMgbmV3IE9NRyBmdW5jdGlvbiBs
aW5raW5nIGRvZXMgbm90IGhhcHBlbiBmb3IgdGhpcyBPTUdGb3JPU1JFbnRyeSBjYWxsZWUuCi0g
ICAgICAgIC8vIFdlIHJlLWxpbmsgdGhpcyBPTUdGb3JPU1JFbnRyeSBjYWxsZWUgYWdhaW4gbm90
IHRvIG1pc3MgdGhhdCBjaGFuY2UuCi0gICAgICAgIGZvciAoYXV0byYgY2FsbCA6IGNhbGxlZS0+
d2FzbVRvV2FzbUNhbGxzaXRlcygpKSB7Ci0gICAgICAgICAgICBNYWNyb0Fzc2VtYmxlckNvZGVQ
dHI8V2FzbUVudHJ5UHRyVGFnPiBlbnRyeXBvaW50OwotICAgICAgICAgICAgaWYgKGNhbGwuZnVu
Y3Rpb25JbmRleFNwYWNlIDwgbV9tb2R1bGUtPm1vZHVsZUluZm9ybWF0aW9uKCkuaW1wb3J0RnVu
Y3Rpb25Db3VudCgpKQotICAgICAgICAgICAgICAgIGVudHJ5cG9pbnQgPSBtX2NvZGVCbG9jay0+
bV93YXNtVG9XYXNtRXhpdFN0dWJzW2NhbGwuZnVuY3Rpb25JbmRleFNwYWNlXS5jb2RlKCk7Ci0g
ICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgZW50cnlwb2ludCA9IG1fY29kZUJsb2Nr
LT53YXNtRW50cnlwb2ludENhbGxlZUZyb21GdW5jdGlvbkluZGV4U3BhY2UoY2FsbC5mdW5jdGlv
bkluZGV4U3BhY2UpLmVudHJ5cG9pbnQoKS5yZXRhZ2dlZDxXYXNtRW50cnlQdHJUYWc+KCk7Ci0K
LSAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpyZXBhdGNoTmVhckNhbGwoY2FsbC5jYWxsTG9j
YXRpb24sIENvZGVMb2NhdGlvbkxhYmVsPFdhc21FbnRyeVB0clRhZz4oZW50cnlwb2ludCkpOwot
ICAgICAgICB9CiAgICAgfQogICAgIGRhdGFMb2dMbklmKFdhc21PTUdGb3JPU1JFbnRyeVBsYW5J
bnRlcm5hbDo6dmVyYm9zZSwgIkZpbmlzaGVkIE9NR0Zvck9TUkVudHJ5ICIsIG1fZnVuY3Rpb25J
bmRleCk7CiAgICAgY29tcGxldGUoaG9sZExvY2sobV9sb2NrKSk7CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvd2FzbS9XYXNtT01HUGxhbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL3dhc20vV2FzbU9NR1BsYW4uY3BwCShyZXZpc2lvbiAyNTgzNTApCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtT01HUGxhbi5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTExNCwyMCArMTE0LDkgQEAgdm9pZCBPTUdQbGFuOjp3b3JrKENvbXBpbGF0aW9uRWZmb3J0
KQogICAgICAgICAvLyB3aWxsIHVwZGF0ZS4gSXQncyBhbHNvIG9rIGlmIHRoZXkgcHVibGlzaCB0
aGVpciBjb2RlIGJlZm9yZSB3ZSByZXNldCB0aGUgaW5zdHJ1Y3Rpb24gY2FjaGVzIGJlY2F1c2Ug
YWZ0ZXIgd2UgcmVsZWFzZQogICAgICAgICAvLyB0aGUgbG9jayBvdXIgY29kZSBpcyByZWFkeSB0
byBiZSBwdWJsaXNoZWQgdG9vLgogICAgICAgICBMb2NrSG9sZGVyIGhvbGRlcihtX2NvZGVCbG9j
ay0+bV9sb2NrKTsKKwogICAgICAgICBtX2NvZGVCbG9jay0+bV9vbWdDYWxsZWVzW21fZnVuY3Rp
b25JbmRleF0gPSBjYWxsZWUuY29weVJlZigpOwotICAgICAgICB7Ci0gICAgICAgICAgICBpZiAo
QkJRQ2FsbGVlKiBiYnFDYWxsZWUgPSBtX2NvZGVCbG9jay0+bV9iYnFDYWxsZWVzW21fZnVuY3Rp
b25JbmRleF0uZ2V0KCkpIHsKLSAgICAgICAgICAgICAgICBhdXRvIGxvY2tlciA9IGhvbGRMb2Nr
KGJicUNhbGxlZS0+dGllclVwQ291bnQoKS0+Z2V0TG9jaygpKTsKLSAgICAgICAgICAgICAgICBi
YnFDYWxsZWUtPnNldFJlcGxhY2VtZW50KGNhbGxlZS5jb3B5UmVmKCkpOwotICAgICAgICAgICAg
ICAgIGJicUNhbGxlZS0+dGllclVwQ291bnQoKS0+bV9jb21waWxhdGlvblN0YXR1c0Zvck9NRyA9
IFRpZXJVcENvdW50OjpDb21waWxhdGlvblN0YXR1czo6Q29tcGlsZWQ7Ci0gICAgICAgICAgICB9
Ci0gICAgICAgICAgICBpZiAobV9jb2RlQmxvY2stPm1fbGxpbnRDYWxsZWVzKSB7Ci0gICAgICAg
ICAgICAgICAgTExJbnRDYWxsZWUmIGxsaW50Q2FsbGVlID0gbV9jb2RlQmxvY2stPm1fbGxpbnRD
YWxsZWVzLT5hdChtX2Z1bmN0aW9uSW5kZXgpLmdldCgpOwotICAgICAgICAgICAgICAgIGF1dG8g
bG9ja2VyID0gaG9sZExvY2sobGxpbnRDYWxsZWUudGllclVwQ291bnRlcigpLm1fbG9jayk7Ci0g
ICAgICAgICAgICAgICAgbGxpbnRDYWxsZWUuc2V0UmVwbGFjZW1lbnQoY2FsbGVlLmNvcHlSZWYo
KSk7Ci0gICAgICAgICAgICAgICAgbGxpbnRDYWxsZWUudGllclVwQ291bnRlcigpLm1fY29tcGls
YXRpb25TdGF0dXMgPSBMTEludFRpZXJVcENvdW50ZXI6OkNvbXBpbGF0aW9uU3RhdHVzOjpDb21w
aWxlZDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQorCiAgICAgICAgIGZvciAoYXV0byYgY2Fs
bCA6IGNhbGxlZS0+d2FzbVRvV2FzbUNhbGxzaXRlcygpKSB7CiAgICAgICAgICAgICBNYWNyb0Fz
c2VtYmxlckNvZGVQdHI8V2FzbUVudHJ5UHRyVGFnPiBlbnRyeXBvaW50OwogICAgICAgICAgICAg
aWYgKGNhbGwuZnVuY3Rpb25JbmRleFNwYWNlIDwgbV9tb2R1bGUtPm1vZHVsZUluZm9ybWF0aW9u
KCkuaW1wb3J0RnVuY3Rpb25Db3VudCgpKQpAQCAtMTM3LDI0ICsxMjYsNDcgQEAgdm9pZCBPTUdQ
bGFuOjp3b3JrKENvbXBpbGF0aW9uRWZmb3J0KQogCiAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxl
cjo6cmVwYXRjaE5lYXJDYWxsKGNhbGwuY2FsbExvY2F0aW9uLCBDb2RlTG9jYXRpb25MYWJlbDxX
YXNtRW50cnlQdHJUYWc+KGVudHJ5cG9pbnQpKTsKICAgICAgICAgfQotICAgIH0KIAotICAgIC8v
IEl0J3MgaW1wb3J0YW50IHRvIG1ha2Ugc3VyZSB3ZSBkbyB0aGlzIGJlZm9yZSB3ZSBtYWtlIGFu
eSBvZiB0aGUgY29kZSB3ZSBqdXN0IGNvbXBpbGVkIHZpc2libGUuIElmIHdlIGRpZG4ndCwgd2Ug
Y291bGQgZW5kIHVwCi0gICAgLy8gd2hlcmUgd2UgYXJlIHRpZXJpbmcgdXAgc29tZSBmdW5jdGlv
biBBIHRvIEEnIGFuZCB3ZSByZXBhdGNoIHNvbWUgZnVuY3Rpb24gQiB0byBjYWxsIEEnIGluc3Rl
YWQgb2YgQS4gQW5vdGhlciBDUFUgY291bGQgc2VlCi0gICAgLy8gdGhlIHVwZGF0ZXMgdG8gQiBi
dXQgc3RpbGwgbm90IGhhdmUgcmVzZXQgaXRzIGNhY2hlIG9mIEEnLCB3aGljaCB3b3VsZCBsZWFk
IHRvIGFsbCBraW5kcyBvZiBiYWRuZXNzLgotICAgIHJlc2V0SW5zdHJ1Y3Rpb25DYWNoZU9uQWxs
VGhyZWFkcygpOwotICAgIFdURjo6c3RvcmVTdG9yZUZlbmNlKCk7IC8vIFRoaXMgcHJvYmFibHkg
aXNuJ3QgbmVjZXNzYXJ5IGJ1dCBpdCdzIGdvb2QgdG8gYmUgcGFyYW5vaWQuCisgICAgICAgIEhh
c2hNYXA8dm9pZCosIENvZGVMb2NhdGlvbkxhYmVsPFdhc21FbnRyeVB0clRhZz4+IHN0YWdlZENh
bGxzOworICAgICAgICBhdXRvIHN0YWdlUmVwYXRjaCA9IFsmXSAoY29uc3QgVmVjdG9yPFVubGlu
a2VkV2FzbVRvV2FzbUNhbGw+JiBjYWxsc2l0ZXMpIHsKKyAgICAgICAgICAgIGZvciAoYXV0byYg
Y2FsbCA6IGNhbGxzaXRlcykgeworICAgICAgICAgICAgICAgIGlmIChjYWxsLmZ1bmN0aW9uSW5k
ZXhTcGFjZSA9PSBmdW5jdGlvbkluZGV4U3BhY2UpIHsKKyAgICAgICAgICAgICAgICAgICAgQ29k
ZUxvY2F0aW9uTGFiZWw8V2FzbUVudHJ5UHRyVGFnPiB0YXJnZXQgPSBNYWNyb0Fzc2VtYmxlcjo6
cHJlcGFyZUZvckF0b21pY1JlcGF0Y2hOZWFyQ2FsbENvbmN1cnJlbnRseShjYWxsLmNhbGxMb2Nh
dGlvbiwgQ29kZUxvY2F0aW9uTGFiZWw8V2FzbUVudHJ5UHRyVGFnPihlbnRyeXBvaW50KSk7Cisg
ICAgICAgICAgICAgICAgICAgIHN0YWdlZENhbGxzLmFkZChjYWxsLmNhbGxMb2NhdGlvbi5kYXRh
TG9jYXRpb24oKSwgdGFyZ2V0KTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9Cisg
ICAgICAgIH07CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX2NvZGVCbG9jay0+
bV93YXNtVG9XYXNtQ2FsbHNpdGVzLnNpemUoKTsgKytpKSB7CisgICAgICAgICAgICBzdGFnZVJl
cGF0Y2gobV9jb2RlQmxvY2stPm1fd2FzbVRvV2FzbUNhbGxzaXRlc1tpXSk7CisgICAgICAgICAg
ICBpZiAobV9jb2RlQmxvY2stPm1fbGxpbnRDYWxsZWVzKSB7CisgICAgICAgICAgICAgICAgTExJ
bnRDYWxsZWUmIGxsaW50Q2FsbGVlID0gbV9jb2RlQmxvY2stPm1fbGxpbnRDYWxsZWVzLT5hdChp
KS5nZXQoKTsKKyAgICAgICAgICAgICAgICBpZiAoSklUQ2FsbGVlKiByZXBsYWNlbWVudENhbGxl
ZSA9IGxsaW50Q2FsbGVlLnJlcGxhY2VtZW50KCkpCisgICAgICAgICAgICAgICAgICAgIHN0YWdl
UmVwYXRjaChyZXBsYWNlbWVudENhbGxlZS0+d2FzbVRvV2FzbUNhbGxzaXRlcygpKTsKKyAgICAg
ICAgICAgICAgICBpZiAoT01HRm9yT1NSRW50cnlDYWxsZWUqIG9zckVudHJ5Q2FsbGVlID0gbGxp
bnRDYWxsZWUub3NyRW50cnlDYWxsZWUoKSkKKyAgICAgICAgICAgICAgICAgICAgc3RhZ2VSZXBh
dGNoKG9zckVudHJ5Q2FsbGVlLT53YXNtVG9XYXNtQ2FsbHNpdGVzKCkpOworICAgICAgICAgICAg
fQorICAgICAgICAgICAgaWYgKEJCUUNhbGxlZSogYmJxQ2FsbGVlID0gbV9jb2RlQmxvY2stPm1f
YmJxQ2FsbGVlc1tpXS5nZXQoKSkgeworICAgICAgICAgICAgICAgIGlmIChPTUdDYWxsZWUqIHJl
cGxhY2VtZW50Q2FsbGVlID0gYmJxQ2FsbGVlLT5yZXBsYWNlbWVudCgpKQorICAgICAgICAgICAg
ICAgICAgICBzdGFnZVJlcGF0Y2gocmVwbGFjZW1lbnRDYWxsZWUtPndhc21Ub1dhc21DYWxsc2l0
ZXMoKSk7CisgICAgICAgICAgICAgICAgaWYgKE9NR0Zvck9TUkVudHJ5Q2FsbGVlKiBvc3JFbnRy
eUNhbGxlZSA9IGJicUNhbGxlZS0+b3NyRW50cnlDYWxsZWUoKSkKKyAgICAgICAgICAgICAgICAg
ICAgc3RhZ2VSZXBhdGNoKG9zckVudHJ5Q2FsbGVlLT53YXNtVG9XYXNtQ2FsbHNpdGVzKCkpOwor
ICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgLy8gSXQncyBpbXBvcnRhbnQgdG8g
bWFrZSBzdXJlIHdlIGRvIHRoaXMgYmVmb3JlIHdlIG1ha2UgYW55IG9mIHRoZSBjb2RlIHdlIGp1
c3QgY29tcGlsZWQgdmlzaWJsZS4gSWYgd2UgZGlkbid0LCB3ZSBjb3VsZCBlbmQgdXAKKyAgICAg
ICAgLy8gd2hlcmUgd2UgYXJlIHRpZXJpbmcgdXAgc29tZSBmdW5jdGlvbiBBIHRvIEEnIGFuZCB3
ZSByZXBhdGNoIHNvbWUgZnVuY3Rpb24gQiB0byBjYWxsIEEnIGluc3RlYWQgb2YgQS4gQW5vdGhl
ciBDUFUgY291bGQgc2VlCisgICAgICAgIC8vIHRoZSB1cGRhdGVzIHRvIEIgYnV0IHN0aWxsIG5v
dCBoYXZlIHJlc2V0IGl0cyBjYWNoZSBvZiBBJywgd2hpY2ggd291bGQgbGVhZCB0byBhbGwga2lu
ZHMgb2YgYmFkbmVzcy4KKyAgICAgICAgcmVzZXRJbnN0cnVjdGlvbkNhY2hlT25BbGxUaHJlYWRz
KCk7CisgICAgICAgIFdURjo6c3RvcmVTdG9yZUZlbmNlKCk7IC8vIFRoaXMgcHJvYmFibHkgaXNu
J3QgbmVjZXNzYXJ5IGJ1dCBpdCdzIGdvb2QgdG8gYmUgcGFyYW5vaWQuCiAKLSAgICBtX2NvZGVC
bG9jay0+bV93YXNtSW5kaXJlY3RDYWxsRW50cnlQb2ludHNbbV9mdW5jdGlvbkluZGV4XSA9IGVu
dHJ5cG9pbnQ7Ci0gICAgewotICAgICAgICBMb2NrSG9sZGVyIGhvbGRlcihtX2NvZGVCbG9jay0+
bV9sb2NrKTsKKyAgICAgICAgbV9jb2RlQmxvY2stPm1fd2FzbUluZGlyZWN0Q2FsbEVudHJ5UG9p
bnRzW21fZnVuY3Rpb25JbmRleF0gPSBlbnRyeXBvaW50OwogCiAgICAgICAgIGF1dG8gcmVwYXRj
aENhbGxzID0gWyZdIChjb25zdCBWZWN0b3I8VW5saW5rZWRXYXNtVG9XYXNtQ2FsbD4mIGNhbGxz
aXRlcykgewogICAgICAgICAgICAgZm9yIChhdXRvJiBjYWxsIDogY2FsbHNpdGVzKSB7CiAgICAg
ICAgICAgICAgICAgZGF0YUxvZ0xuSWYoV2FzbU9NR1BsYW5JbnRlcm5hbDo6dmVyYm9zZSwgIkNv
bnNpZGVyaW5nIHJlcGF0Y2hpbmcgY2FsbCBhdDogIiwgUmF3UG9pbnRlcihjYWxsLmNhbGxMb2Nh
dGlvbi5kYXRhTG9jYXRpb24oKSksICIgdGhhdCB0YXJnZXRzICIsIGNhbGwuZnVuY3Rpb25JbmRl
eFNwYWNlKTsKICAgICAgICAgICAgICAgICBpZiAoY2FsbC5mdW5jdGlvbkluZGV4U3BhY2UgPT0g
ZnVuY3Rpb25JbmRleFNwYWNlKSB7CiAgICAgICAgICAgICAgICAgICAgIGRhdGFMb2dMbklmKFdh
c21PTUdQbGFuSW50ZXJuYWw6OnZlcmJvc2UsICJSZXBhdGNoaW5nIGNhbGwgYXQ6ICIsIFJhd1Bv
aW50ZXIoY2FsbC5jYWxsTG9jYXRpb24uZGF0YUxvY2F0aW9uKCkpLCAiIHRvICIsIFJhd1BvaW50
ZXIoZW50cnlwb2ludC5leGVjdXRhYmxlQWRkcmVzcygpKSk7Ci0gICAgICAgICAgICAgICAgICAg
IE1hY3JvQXNzZW1ibGVyOjpyZXBhdGNoTmVhckNhbGwoY2FsbC5jYWxsTG9jYXRpb24sIENvZGVM
b2NhdGlvbkxhYmVsPFdhc21FbnRyeVB0clRhZz4oZW50cnlwb2ludCkpOworICAgICAgICAgICAg
ICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6cmVwYXRjaE5lYXJDYWxsKGNhbGwuY2FsbExvY2F0aW9u
LCBzdGFnZWRDYWxscy5nZXQoY2FsbC5jYWxsTG9jYXRpb24uZGF0YUxvY2F0aW9uKCkpKTsKICAg
ICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CiAgICAgICAgIH07CkBAIC0xNzUsNiArMTg3
LDIwIEBAIHZvaWQgT01HUGxhbjo6d29yayhDb21waWxhdGlvbkVmZm9ydCkKICAgICAgICAgICAg
ICAgICAgICAgcmVwYXRjaENhbGxzKG9zckVudHJ5Q2FsbGVlLT53YXNtVG9XYXNtQ2FsbHNpdGVz
KCkpOwogICAgICAgICAgICAgfQogICAgICAgICB9CisKKyAgICAgICAgeworICAgICAgICAgICAg
aWYgKEJCUUNhbGxlZSogYmJxQ2FsbGVlID0gbV9jb2RlQmxvY2stPm1fYmJxQ2FsbGVlc1ttX2Z1
bmN0aW9uSW5kZXhdLmdldCgpKSB7CisgICAgICAgICAgICAgICAgYXV0byBsb2NrZXIgPSBob2xk
TG9jayhiYnFDYWxsZWUtPnRpZXJVcENvdW50KCktPmdldExvY2soKSk7CisgICAgICAgICAgICAg
ICAgYmJxQ2FsbGVlLT5zZXRSZXBsYWNlbWVudChjYWxsZWUuY29weVJlZigpKTsKKyAgICAgICAg
ICAgICAgICBiYnFDYWxsZWUtPnRpZXJVcENvdW50KCktPm1fY29tcGlsYXRpb25TdGF0dXNGb3JP
TUcgPSBUaWVyVXBDb3VudDo6Q29tcGlsYXRpb25TdGF0dXM6OkNvbXBpbGVkOworICAgICAgICAg
ICAgfQorICAgICAgICAgICAgaWYgKG1fY29kZUJsb2NrLT5tX2xsaW50Q2FsbGVlcykgeworICAg
ICAgICAgICAgICAgIExMSW50Q2FsbGVlJiBsbGludENhbGxlZSA9IG1fY29kZUJsb2NrLT5tX2xs
aW50Q2FsbGVlcy0+YXQobV9mdW5jdGlvbkluZGV4KS5nZXQoKTsKKyAgICAgICAgICAgICAgICBh
dXRvIGxvY2tlciA9IGhvbGRMb2NrKGxsaW50Q2FsbGVlLnRpZXJVcENvdW50ZXIoKS5tX2xvY2sp
OworICAgICAgICAgICAgICAgIGxsaW50Q2FsbGVlLnNldFJlcGxhY2VtZW50KGNhbGxlZS5jb3B5
UmVmKCkpOworICAgICAgICAgICAgICAgIGxsaW50Q2FsbGVlLnRpZXJVcENvdW50ZXIoKS5tX2Nv
bXBpbGF0aW9uU3RhdHVzID0gTExJbnRUaWVyVXBDb3VudGVyOjpDb21waWxhdGlvblN0YXR1czo6
Q29tcGlsZWQ7CisgICAgICAgICAgICB9CisgICAgICAgIH0KICAgICB9CiAKICAgICBkYXRhTG9n
TG5JZihXYXNtT01HUGxhbkludGVybmFsOjp2ZXJib3NlLCAiRmluaXNoZWQgT01HICIsIG1fZnVu
Y3Rpb25JbmRleCk7CkluZGV4OiBTb3VyY2UvV1RGL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV1RGL0NoYW5nZUxvZwkocmV2aXNpb24gMjU4MzUwKQorKysgU291cmNlL1dURi9DaGFu
Z2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwzNSBAQAorMjAyMC0wMy0xMiAgU2FhbSBC
YXJhdGkgIDxzYmFyYXRpQGFwcGxlLmNvbT4KKworICAgICAgICBJbXBsZW1lbnQgMUdCIG9mIGV4
ZWN1dGFibGUgbWVtb3J5IG9uIGFybTY0CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0yMDg0OTAKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICAqIHd0Zi9NZXRhQWxsb2NhdG9yLmNwcDoKKyAgICAgICAgKFdURjo6
TWV0YUFsbG9jYXRvclRyYWNrZXI6Om5vdGlmeSk6CisgICAgICAgIChXVEY6Ok1ldGFBbGxvY2F0
b3JUcmFja2VyOjpyZWxlYXNlKToKKyAgICAgICAgKFdURjo6TWV0YUFsbG9jYXRvcjo6cmVsZWFz
ZSk6CisgICAgICAgIChXVEY6Ok1ldGFBbGxvY2F0b3JIYW5kbGU6Ok1ldGFBbGxvY2F0b3JIYW5k
bGUpOgorICAgICAgICAoV1RGOjpNZXRhQWxsb2NhdG9ySGFuZGxlOjp+TWV0YUFsbG9jYXRvckhh
bmRsZSk6CisgICAgICAgIChXVEY6Ok1ldGFBbGxvY2F0b3JIYW5kbGU6OnNocmluayk6CisgICAg
ICAgIChXVEY6Ok1ldGFBbGxvY2F0b3I6Ok1ldGFBbGxvY2F0b3IpOgorICAgICAgICAoV1RGOjpN
ZXRhQWxsb2NhdG9yOjphbGxvY2F0ZSk6CisgICAgICAgIChXVEY6Ok1ldGFBbGxvY2F0b3I6OmN1
cnJlbnRTdGF0aXN0aWNzKToKKyAgICAgICAgKiB3dGYvTWV0YUFsbG9jYXRvci5oOgorICAgICAg
ICAoV1RGOjpNZXRhQWxsb2NhdG9yVHJhY2tlcjo6ZmluZCk6CisgICAgICAgIChXVEY6Ok1ldGFB
bGxvY2F0b3I6OmFsbG9jYXRlKToKKyAgICAgICAgKFdURjo6TWV0YUFsbG9jYXRvcjo6Y3VycmVu
dFN0YXRpc3RpY3MpOgorICAgICAgICAoV1RGOjpNZXRhQWxsb2NhdG9yOjpnZXRMb2NrKTogRGVs
ZXRlZC4KKyAgICAgICAgKiB3dGYvTWV0YUFsbG9jYXRvckhhbmRsZS5oOgorICAgICAgICAoV1RG
OjpNZXRhQWxsb2NhdG9ySGFuZGxlOjphbGxvY2F0b3IpOgorICAgICAgICAoV1RGOjpNZXRhQWxs
b2NhdG9ySGFuZGxlOjppc01hbmFnZWQpOiBEZWxldGVkLgorICAgICAgICAoV1RGOjpNZXRhQWxs
b2NhdG9ySGFuZGxlOjpvd25lclVJRCk6IERlbGV0ZWQuCisgICAgICAgICogd3RmL1BsYXRmb3Jt
VXNlLmg6CisgICAgICAgICogd3RmL1JlZEJsYWNrVHJlZS5oOgorICAgICAgICAqIHd0Zi9TdGRM
aWJFeHRyYXMuaDoKKyAgICAgICAgKFdURjo6Y29uc3RydWN0Rml4ZWRTaXplQXJyYXlXaXRoQXJn
dW1lbnRzSW1wbCk6CisgICAgICAgIChXVEY6OmNvbnN0cnVjdEZpeGVkU2l6ZUFycmF5V2l0aEFy
Z3VtZW50cyk6CisKIDIwMjAtMDMtMTEgIEplciBOb2JsZSAgPGplci5ub2JsZUBhcHBsZS5jb20+
CiAKICAgICAgICAgQWRvcHQgQVZTYW1wbGVCdWZmZXJWaWRlb091dHB1dApJbmRleDogU291cmNl
L1dURi93dGYvTWV0YUFsbG9jYXRvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYv
TWV0YUFsbG9jYXRvci5jcHAJKHJldmlzaW9uIDI1ODM1MCkKKysrIFNvdXJjZS9XVEYvd3RmL01l
dGFBbGxvY2F0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01NCwyMiArNTQsMjEgQEAgTWV0YUFs
bG9jYXRvcjo6fk1ldGFBbGxvY2F0b3IoKQogI2VuZGlmCiB9CiAKLXZvaWQgTWV0YUFsbG9jYXRv
clRyYWNrZXI6Om5vdGlmeShNZXRhQWxsb2NhdG9ySGFuZGxlKiBoYW5kbGUpCit2b2lkIE1ldGFB
bGxvY2F0b3JUcmFja2VyOjpub3RpZnkoTWV0YUFsbG9jYXRvckhhbmRsZSYgaGFuZGxlKQogewot
ICAgIG1fYWxsb2NhdGlvbnMuaW5zZXJ0KGhhbmRsZSk7CisgICAgbV9hbGxvY2F0aW9ucy5pbnNl
cnQoJmhhbmRsZSk7CiB9CiAKLXZvaWQgTWV0YUFsbG9jYXRvclRyYWNrZXI6OnJlbGVhc2UoTWV0
YUFsbG9jYXRvckhhbmRsZSogaGFuZGxlKQordm9pZCBNZXRhQWxsb2NhdG9yVHJhY2tlcjo6cmVs
ZWFzZShNZXRhQWxsb2NhdG9ySGFuZGxlJiBoYW5kbGUpCiB7Ci0gICAgbV9hbGxvY2F0aW9ucy5y
ZW1vdmUoaGFuZGxlKTsKKyAgICBtX2FsbG9jYXRpb25zLnJlbW92ZSgmaGFuZGxlKTsKIH0KIAot
QUxXQVlTX0lOTElORSB2b2lkIE1ldGFBbGxvY2F0b3I6OnJlbGVhc2UoTWV0YUFsbG9jYXRvckhh
bmRsZSogaGFuZGxlKQordm9pZCBNZXRhQWxsb2NhdG9yOjpyZWxlYXNlKGNvbnN0IExvY2tIb2xk
ZXImLCBNZXRhQWxsb2NhdG9ySGFuZGxlJiBoYW5kbGUpCiB7Ci0gICAgTG9ja0hvbGRlciBsb2Nr
ZXIoJm1fbG9jayk7Ci0gICAgaWYgKGhhbmRsZS0+c2l6ZUluQnl0ZXMoKSkgewotICAgICAgICB2
b2lkKiBzdGFydCA9IGhhbmRsZS0+c3RhcnQoKS51bnRhZ2dlZFB0cigpOwotICAgICAgICBzaXpl
X3Qgc2l6ZUluQnl0ZXMgPSBoYW5kbGUtPnNpemVJbkJ5dGVzKCk7CisgICAgaWYgKGhhbmRsZS5z
aXplSW5CeXRlcygpKSB7CisgICAgICAgIHZvaWQqIHN0YXJ0ID0gaGFuZGxlLnN0YXJ0KCkudW50
YWdnZWRQdHIoKTsKKyAgICAgICAgc2l6ZV90IHNpemVJbkJ5dGVzID0gaGFuZGxlLnNpemVJbkJ5
dGVzKCk7CiAgICAgICAgIGRlY3JlbWVudFBhZ2VPY2N1cGFuY3koc3RhcnQsIHNpemVJbkJ5dGVz
KTsKICAgICAgICAgYWRkRnJlZVNwYWNlRnJvbVJlbGVhc2VkSGFuZGxlKEZyZWVTcGFjZVB0cihz
dGFydCksIHNpemVJbkJ5dGVzKTsKICAgICB9CkBAIC03OCwyMSArNzcsMTkgQEAgQUxXQVlTX0lO
TElORSB2b2lkIE1ldGFBbGxvY2F0b3I6OnJlbGVhcwogICAgICAgICBtX3RyYWNrZXItPnJlbGVh
c2UoaGFuZGxlKTsKIH0KIAotTWV0YUFsbG9jYXRvckhhbmRsZTo6TWV0YUFsbG9jYXRvckhhbmRs
ZShNZXRhQWxsb2NhdG9yKiBhbGxvY2F0b3IsIHZvaWQqIHN0YXJ0LCBzaXplX3Qgc2l6ZUluQnl0
ZXMsIHZvaWQqIG93bmVyVUlEKQorTWV0YUFsbG9jYXRvckhhbmRsZTo6TWV0YUFsbG9jYXRvckhh
bmRsZShNZXRhQWxsb2NhdG9yJiBhbGxvY2F0b3IsIHZvaWQqIHN0YXJ0LCBzaXplX3Qgc2l6ZUlu
Qnl0ZXMpCiAgICAgOiBtX2FsbG9jYXRvcihhbGxvY2F0b3IpCiAgICAgLCBtX3N0YXJ0KHN0YXJ0
KQogICAgICwgbV9lbmQocmVpbnRlcnByZXRfY2FzdDxjaGFyKj4oc3RhcnQpICsgc2l6ZUluQnl0
ZXMpCi0gICAgLCBtX293bmVyVUlEKG93bmVyVUlEKQogewotICAgIEFTU0VSVChhbGxvY2F0b3Ip
OwogICAgIEFTU0VSVChzdGFydCk7CiAgICAgQVNTRVJUKHNpemVJbkJ5dGVzKTsKIH0KIAogTWV0
YUFsbG9jYXRvckhhbmRsZTo6fk1ldGFBbGxvY2F0b3JIYW5kbGUoKQogewotICAgIEFTU0VSVCht
X2FsbG9jYXRvcik7Ci0gICAgbV9hbGxvY2F0b3ItPnJlbGVhc2UodGhpcyk7CisgICAgYXV0byBs
b2NrZXIgPSBob2xkTG9jayhhbGxvY2F0b3IoKS5tX2xvY2spOworICAgIGFsbG9jYXRvcigpLnJl
bGVhc2UobG9ja2VyLCAqdGhpcyk7CiB9CiAKIHZvaWQgTWV0YUFsbG9jYXRvckhhbmRsZTo6c2hy
aW5rKHNpemVfdCBuZXdTaXplSW5CeXRlcykKQEAgLTEwMCw5ICs5NywxMCBAQCB2b2lkIE1ldGFB
bGxvY2F0b3JIYW5kbGU6OnNocmluayhzaXplX3QgCiAgICAgc2l6ZV90IHNpemVJbkJ5dGVzID0g
dGhpcy0+c2l6ZUluQnl0ZXMoKTsKICAgICBBU1NFUlQobmV3U2l6ZUluQnl0ZXMgPD0gc2l6ZUlu
Qnl0ZXMpOwogCi0gICAgTG9ja0hvbGRlciBsb2NrZXIoJm1fYWxsb2NhdG9yLT5tX2xvY2spOwor
ICAgIE1ldGFBbGxvY2F0b3ImIGFsbG9jYXRvciA9IHRoaXMtPmFsbG9jYXRvcigpOworICAgIExv
Y2tIb2xkZXIgbG9ja2VyKCZhbGxvY2F0b3IubV9sb2NrKTsKIAotICAgIG5ld1NpemVJbkJ5dGVz
ID0gbV9hbGxvY2F0b3ItPnJvdW5kVXAobmV3U2l6ZUluQnl0ZXMpOworICAgIG5ld1NpemVJbkJ5
dGVzID0gYWxsb2NhdG9yLnJvdW5kVXAobmV3U2l6ZUluQnl0ZXMpOwogICAgIAogICAgIEFTU0VS
VChuZXdTaXplSW5CeXRlcyA8PSBzaXplSW5CeXRlcyk7CiAKQEAgLTExMywxMSArMTExLDExIEBA
IHZvaWQgTWV0YUFsbG9jYXRvckhhbmRsZTo6c2hyaW5rKHNpemVfdCAKICAgICBzaXplX3QgZnJl
ZVNpemUgPSBzaXplSW5CeXRlcyAtIG5ld1NpemVJbkJ5dGVzOwogICAgIHVpbnRwdHJfdCBmcmVl
RW5kID0gZnJlZVN0YXJ0ICsgZnJlZVNpemU7CiAgICAgCi0gICAgdWludHB0cl90IGZpcnN0Q29t
cGxldGVseUZyZWVQYWdlID0gKGZyZWVTdGFydCArIG1fYWxsb2NhdG9yLT5tX3BhZ2VTaXplIC0g
MSkgJiB+KG1fYWxsb2NhdG9yLT5tX3BhZ2VTaXplIC0gMSk7CisgICAgdWludHB0cl90IGZpcnN0
Q29tcGxldGVseUZyZWVQYWdlID0gKGZyZWVTdGFydCArIGFsbG9jYXRvci5tX3BhZ2VTaXplIC0g
MSkgJiB+KGFsbG9jYXRvci5tX3BhZ2VTaXplIC0gMSk7CiAgICAgaWYgKGZpcnN0Q29tcGxldGVs
eUZyZWVQYWdlIDwgZnJlZUVuZCkKLSAgICAgICAgbV9hbGxvY2F0b3ItPmRlY3JlbWVudFBhZ2VP
Y2N1cGFuY3kocmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oZmlyc3RDb21wbGV0ZWx5RnJlZVBhZ2Up
LCBmcmVlU2l6ZSAtIChmaXJzdENvbXBsZXRlbHlGcmVlUGFnZSAtIGZyZWVTdGFydCkpOworICAg
ICAgICBhbGxvY2F0b3IuZGVjcmVtZW50UGFnZU9jY3VwYW5jeShyZWludGVycHJldF9jYXN0PHZv
aWQqPihmaXJzdENvbXBsZXRlbHlGcmVlUGFnZSksIGZyZWVTaXplIC0gKGZpcnN0Q29tcGxldGVs
eUZyZWVQYWdlIC0gZnJlZVN0YXJ0KSk7CiAKLSAgICBtX2FsbG9jYXRvci0+YWRkRnJlZVNwYWNl
RnJvbVJlbGVhc2VkSGFuZGxlKE1ldGFBbGxvY2F0b3I6OkZyZWVTcGFjZVB0cihmcmVlU3RhcnQp
LCBmcmVlU2l6ZSk7CisgICAgYWxsb2NhdG9yLmFkZEZyZWVTcGFjZUZyb21SZWxlYXNlZEhhbmRs
ZShNZXRhQWxsb2NhdG9yOjpGcmVlU3BhY2VQdHIoZnJlZVN0YXJ0KSwgZnJlZVNpemUpOwogCiAg
ICAgbV9lbmQgPSBtX3N0YXJ0ICsgbmV3U2l6ZUluQnl0ZXM7CiB9CkBAIC0xMjcsMTMgKzEyNSwx
MyBAQCB2b2lkIE1ldGFBbGxvY2F0b3JIYW5kbGU6OmR1bXAoUHJpbnRTdHJlCiAgICAgb3V0LnBy
aW50KFJhd1BvaW50ZXIoc3RhcnQoKS51bnRhZ2dlZFB0cigpKSwgIi4uLiIsIFJhd1BvaW50ZXIo
ZW5kKCkudW50YWdnZWRQdHIoKSkpOwogfQogCi1NZXRhQWxsb2NhdG9yOjpNZXRhQWxsb2NhdG9y
KHNpemVfdCBhbGxvY2F0aW9uR3JhbnVsZSwgc2l6ZV90IHBhZ2VTaXplKQorTWV0YUFsbG9jYXRv
cjo6TWV0YUFsbG9jYXRvcihMb2NrJiBsb2NrLCBzaXplX3QgYWxsb2NhdGlvbkdyYW51bGUsIHNp
emVfdCBwYWdlU2l6ZSkKICAgICA6IG1fYWxsb2NhdGlvbkdyYW51bGUoYWxsb2NhdGlvbkdyYW51
bGUpCiAgICAgLCBtX3BhZ2VTaXplKHBhZ2VTaXplKQogICAgICwgbV9ieXRlc0FsbG9jYXRlZCgw
KQogICAgICwgbV9ieXRlc1Jlc2VydmVkKDApCiAgICAgLCBtX2J5dGVzQ29tbWl0dGVkKDApCi0g
ICAgLCBtX3RyYWNrZXIoMCkKKyAgICAsIG1fbG9jayhsb2NrKQogI2lmbmRlZiBOREVCVUcKICAg
ICAsIG1fbWFsbG9jQmFsYW5jZSgwKQogI2VuZGlmCkBAIC0xNTcsMTAgKzE1NSw4IEBAIE1ldGFB
bGxvY2F0b3I6Ok1ldGFBbGxvY2F0b3Ioc2l6ZV90IGFsbG8KICAgICBBU1NFUlQoc3RhdGljX2Nh
c3Q8c2l6ZV90PigxKSA8PCBtX2xvZ0FsbG9jYXRpb25HcmFudWxlID09IG1fYWxsb2NhdGlvbkdy
YW51bGUpOwogfQogCi1SZWZQdHI8TWV0YUFsbG9jYXRvckhhbmRsZT4gTWV0YUFsbG9jYXRvcjo6
YWxsb2NhdGUoc2l6ZV90IHNpemVJbkJ5dGVzLCB2b2lkKiBvd25lclVJRCkKK1JlZlB0cjxNZXRh
QWxsb2NhdG9ySGFuZGxlPiBNZXRhQWxsb2NhdG9yOjphbGxvY2F0ZShjb25zdCBMb2NrSG9sZGVy
Jiwgc2l6ZV90IHNpemVJbkJ5dGVzKQogewotICAgIExvY2tIb2xkZXIgbG9ja2VyKCZtX2xvY2sp
OwotCiAgICAgaWYgKCFzaXplSW5CeXRlcykKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAg
CkBAIC0xOTUsMTcgKzE5MSwxNiBAQCBSZWZQdHI8TWV0YUFsbG9jYXRvckhhbmRsZT4gTWV0YUFs
bG9jYXRvCiAgICAgbV9udW1BbGxvY2F0aW9ucysrOwogI2VuZGlmCiAKLSAgICBhdXRvIGhhbmRs
ZSA9IGFkb3B0UmVmKCpuZXcgTWV0YUFsbG9jYXRvckhhbmRsZSh0aGlzLCBzdGFydC51bnRhZ2dl
ZFB0cigpLCBzaXplSW5CeXRlcywgb3duZXJVSUQpKTsKKyAgICBhdXRvIGhhbmRsZSA9IGFkb3B0
UmVmKCpuZXcgTWV0YUFsbG9jYXRvckhhbmRsZSgqdGhpcywgc3RhcnQudW50YWdnZWRQdHIoKSwg
c2l6ZUluQnl0ZXMpKTsKIAogICAgIGlmIChVTkxJS0VMWSghIW1fdHJhY2tlcikpCi0gICAgICAg
IG1fdHJhY2tlci0+bm90aWZ5KGhhbmRsZS5wdHIoKSk7CisgICAgICAgIG1fdHJhY2tlci0+bm90
aWZ5KCpoYW5kbGUucHRyKCkpOwogCiAgICAgcmV0dXJuIGhhbmRsZTsKIH0KIAotTWV0YUFsbG9j
YXRvcjo6U3RhdGlzdGljcyBNZXRhQWxsb2NhdG9yOjpjdXJyZW50U3RhdGlzdGljcygpCitNZXRh
QWxsb2NhdG9yOjpTdGF0aXN0aWNzIE1ldGFBbGxvY2F0b3I6OmN1cnJlbnRTdGF0aXN0aWNzKGNv
bnN0IExvY2tIb2xkZXImKQogewotICAgIExvY2tIb2xkZXIgbG9ja2VyKCZtX2xvY2spOwogICAg
IFN0YXRpc3RpY3MgcmVzdWx0OwogICAgIHJlc3VsdC5ieXRlc0FsbG9jYXRlZCA9IG1fYnl0ZXNB
bGxvY2F0ZWQ7CiAgICAgcmVzdWx0LmJ5dGVzUmVzZXJ2ZWQgPSBtX2J5dGVzUmVzZXJ2ZWQ7Cklu
ZGV4OiBTb3VyY2UvV1RGL3d0Zi9NZXRhQWxsb2NhdG9yLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dURi93dGYvTWV0YUFsbG9jYXRvci5oCShyZXZpc2lvbiAyNTgzNTApCisrKyBTb3VyY2UvV1RG
L3d0Zi9NZXRhQWxsb2NhdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ0LDE1ICs0NCwxNSBAQCBu
YW1lc3BhY2UgV1RGIHsKIGNsYXNzIE1ldGFBbGxvY2F0b3JUcmFja2VyIHsKICAgICBXVEZfTUFL
RV9GQVNUX0FMTE9DQVRFRDsKIHB1YmxpYzoKLSAgICB2b2lkIG5vdGlmeShNZXRhQWxsb2NhdG9y
SGFuZGxlKik7Ci0gICAgdm9pZCByZWxlYXNlKE1ldGFBbGxvY2F0b3JIYW5kbGUqKTsKKyAgICB2
b2lkIG5vdGlmeShNZXRhQWxsb2NhdG9ySGFuZGxlJik7CisgICAgdm9pZCByZWxlYXNlKE1ldGFB
bGxvY2F0b3JIYW5kbGUmKTsKIAogICAgIE1ldGFBbGxvY2F0b3JIYW5kbGUqIGZpbmQodm9pZCog
YWRkcmVzcykKICAgICB7CiAgICAgICAgIE1ldGFBbGxvY2F0b3JIYW5kbGUqIGhhbmRsZSA9IG1f
YWxsb2NhdGlvbnMuZmluZEdyZWF0ZXN0TGVzc1RoYW5PckVxdWFsKGFkZHJlc3MpOwotICAgICAg
ICBpZiAoaGFuZGxlICYmIGFkZHJlc3MgPCBoYW5kbGUtPmVuZCgpLnVudGFnZ2VkUHRyKCkpCisg
ICAgICAgIGlmIChoYW5kbGUgJiYgaGFuZGxlLT5zdGFydCgpLnVudGFnZ2VkUHRyKCkgPD0gYWRk
cmVzcyAmJiBhZGRyZXNzIDwgaGFuZGxlLT5lbmQoKS51bnRhZ2dlZFB0cigpKQogICAgICAgICAg
ICAgcmV0dXJuIGhhbmRsZTsKLSAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIHJldHVybiBudWxs
cHRyOwogICAgIH0KIAogICAgIFJlZEJsYWNrVHJlZTxNZXRhQWxsb2NhdG9ySGFuZGxlLCB2b2lk
Kj4gbV9hbGxvY2F0aW9uczsKQEAgLTY0LDE3ICs2NCwyMiBAQCBjbGFzcyBNZXRhQWxsb2NhdG9y
IHsKIHB1YmxpYzoKICAgICB1c2luZyBGcmVlU3BhY2VQdHIgPSBNZXRhQWxsb2NhdG9yUHRyPEZy
ZWVTcGFjZVB0clRhZz47CiAKLSAgICBXVEZfRVhQT1JUX1BSSVZBVEUgTWV0YUFsbG9jYXRvcihz
aXplX3QgYWxsb2NhdGlvbkdyYW51bGUsIHNpemVfdCBwYWdlU2l6ZSA9IFdURjo6cGFnZVNpemUo
KSk7CisgICAgV1RGX0VYUE9SVF9QUklWQVRFIE1ldGFBbGxvY2F0b3IoTG9jayYsIHNpemVfdCBh
bGxvY2F0aW9uR3JhbnVsZSwgc2l6ZV90IHBhZ2VTaXplID0gV1RGOjpwYWdlU2l6ZSgpKTsKICAg
ICAKICAgICBXVEZfRVhQT1JUX1BSSVZBVEUgdmlydHVhbCB+TWV0YUFsbG9jYXRvcigpOwogICAg
IAotICAgIFdURl9FWFBPUlRfUFJJVkFURSBSZWZQdHI8TWV0YUFsbG9jYXRvckhhbmRsZT4gYWxs
b2NhdGUoc2l6ZV90IHNpemVJbkJ5dGVzLCB2b2lkKiBvd25lclVJRCk7CisgICAgUmVmUHRyPE1l
dGFBbGxvY2F0b3JIYW5kbGU+IGFsbG9jYXRlKHNpemVfdCBzaXplSW5CeXRlcykKKyAgICB7Cisg
ICAgICAgIGF1dG8gbG9ja2VyID0gaG9sZExvY2sobV9sb2NrKTsKKyAgICAgICAgcmV0dXJuIGFs
bG9jYXRlKGxvY2tlciwgc2l6ZUluQnl0ZXMpOworICAgIH0KKyAgICBXVEZfRVhQT1JUX1BSSVZB
VEUgUmVmUHRyPE1ldGFBbGxvY2F0b3JIYW5kbGU+IGFsbG9jYXRlKGNvbnN0IExvY2tIb2xkZXIm
LCBzaXplX3Qgc2l6ZUluQnl0ZXMpOwogCiAgICAgdm9pZCB0cmFja0FsbG9jYXRpb25zKE1ldGFB
bGxvY2F0b3JUcmFja2VyKiB0cmFja2VyKQogICAgIHsKICAgICAgICAgbV90cmFja2VyID0gdHJh
Y2tlcjsKICAgICB9Ci0gICAgCisKICAgICAvLyBOb24tYXRvbWljIG1ldGhvZHMgZm9yIGdldHRp
bmcgYWxsb2NhdG9yIHN0YXRpc3RpY3MuCiAgICAgc2l6ZV90IGJ5dGVzQWxsb2NhdGVkKCkgeyBy
ZXR1cm4gbV9ieXRlc0FsbG9jYXRlZDsgfQogICAgIHNpemVfdCBieXRlc1Jlc2VydmVkKCkgeyBy
ZXR1cm4gbV9ieXRlc1Jlc2VydmVkOyB9CkBAIC04Nyw3ICs5MiwxMiBAQCBwdWJsaWM6CiAgICAg
ICAgIHNpemVfdCBieXRlc1Jlc2VydmVkOwogICAgICAgICBzaXplX3QgYnl0ZXNDb21taXR0ZWQ7
CiAgICAgfTsKLSAgICBXVEZfRVhQT1JUX1BSSVZBVEUgU3RhdGlzdGljcyBjdXJyZW50U3RhdGlz
dGljcygpOworICAgIFN0YXRpc3RpY3MgY3VycmVudFN0YXRpc3RpY3MoKQorICAgIHsKKyAgICAg
ICAgYXV0byBsb2NrZXIgPSBob2xkTG9jayhtX2xvY2spOworICAgICAgICByZXR1cm4gY3VycmVu
dFN0YXRpc3RpY3MobG9ja2VyKTsKKyAgICB9CisgICAgV1RGX0VYUE9SVF9QUklWQVRFIFN0YXRp
c3RpY3MgY3VycmVudFN0YXRpc3RpY3MoY29uc3QgTG9ja0hvbGRlciYpOwogCiAgICAgLy8gQWRk
IG1vcmUgZnJlZSBzcGFjZSB0byB0aGUgYWxsb2NhdG9yLiBDYWxsIHRoaXMgZGlyZWN0bHkgZnJv
bQogICAgIC8vIHRoZSBjb25zdHJ1Y3RvciBpZiB5b3Ugd2lzaCB0byBvcGVyYXRlIHRoZSBhbGxv
Y2F0b3Igd2l0aGluIGEKQEAgLTk4LDcgKzEwOCw2IEBAIHB1YmxpYzoKICAgICAvLyBidWlsZHMu
CiAgICAgV1RGX0VYUE9SVF9QUklWQVRFIHNpemVfdCBkZWJ1Z0ZyZWVTcGFjZVNpemUoKTsKIAot
ICAgIExvY2smIGdldExvY2soKSB7IHJldHVybiBtX2xvY2s7IH0KICAgICBXVEZfRVhQT1JUX1BS
SVZBVEUgYm9vbCBpc0luQWxsb2NhdGVkTWVtb3J5KGNvbnN0IEFic3RyYWN0TG9ja2VyJiwgdm9p
ZCogYWRkcmVzcyk7CiAgICAgCiAjaWYgRU5BQkxFKE1FVEFfQUxMT0NBVE9SX1BST0ZJTEUpCkBA
IC0xMjMsNiArMTMyLDggQEAgcHJvdGVjdGVkOgogICAgIC8vIGRlc3RydWN0aW9uLCBpbiBwYXJ0
IGJlY2F1c2UgYSBNZXRhQWxsb2NhdG9yIGNhbm5vdCBkaWUgc28gbG9uZwogICAgIC8vIGFzIHRo
ZXJlIGFyZSBIYW5kbGVzIHRoYXQgcmVmZXIgdG8gaXQuCiAKKyAgICAvLyBSZWxlYXNlIGEgTWV0
YUFsbG9jYXRvckhhbmRsZS4KKyAgICB2aXJ0dWFsIHZvaWQgcmVsZWFzZShjb25zdCBMb2NrSG9s
ZGVyJiwgTWV0YUFsbG9jYXRvckhhbmRsZSYpOwogcHJpdmF0ZToKICAgICAKICAgICBmcmllbmQg
Y2xhc3MgTWV0YUFsbG9jYXRvckhhbmRsZTsKQEAgLTE1MCw5ICsxNjEsNiBAQCBwcml2YXRlOgog
ICAgICAgICBGcmVlU3BhY2VQdHIgbV9lbmQ7CiAgICAgfTsKICAgICB0eXBlZGVmIFJlZEJsYWNr
VHJlZTxGcmVlU3BhY2VOb2RlLCBzaXplX3Q+IFRyZWU7Ci0KLSAgICAvLyBSZWxlYXNlIGEgTWV0
YUFsbG9jYXRvckhhbmRsZS4KLSAgICB2b2lkIHJlbGVhc2UoTWV0YUFsbG9jYXRvckhhbmRsZSop
OwogICAgIAogICAgIC8vIFJlbW92ZSBmcmVlIHNwYWNlIGZyb20gdGhlIGFsbG9jYXRvci4gVGhp
cyBpcyBlZmZlY3RpdmVseQogICAgIC8vIHRoZSBhbGxvY2F0ZSgpIGZ1bmN0aW9uLCBleGNlcHQg
dGhhdCBpdCBkb2VzIG5vdCBtYXJrIHRoZQpAQCAtMTkzLDkgKzIwMSw5IEBAIHByaXZhdGU6CiAg
ICAgc2l6ZV90IG1fYnl0ZXNSZXNlcnZlZDsKICAgICBzaXplX3QgbV9ieXRlc0NvbW1pdHRlZDsK
ICAgICAKLSAgICBMb2NrIG1fbG9jazsKKyAgICBMb2NrJiBtX2xvY2s7CiAKLSAgICBNZXRhQWxs
b2NhdG9yVHJhY2tlciogbV90cmFja2VyOworICAgIE1ldGFBbGxvY2F0b3JUcmFja2VyKiBtX3Ry
YWNrZXIgeyBudWxscHRyIH07CiAKICNpZm5kZWYgTkRFQlVHCiAgICAgc2l6ZV90IG1fbWFsbG9j
QmFsYW5jZTsKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL01ldGFBbGxvY2F0b3JIYW5kbGUuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9NZXRhQWxsb2NhdG9ySGFuZGxlLmgJKHJldmlzaW9u
IDI1ODM1MCkKKysrIFNvdXJjZS9XVEYvd3RmL01ldGFBbGxvY2F0b3JIYW5kbGUuaAkod29ya2lu
ZyBjb3B5KQpAQCAtNDIsNyArNDIsNyBAQCBERUNMQVJFX0FMTE9DQVRPUl9XSVRIX0hFQVBfSURF
TlRJRklFUihNCiBjbGFzcyBNZXRhQWxsb2NhdG9ySGFuZGxlIDogcHVibGljIFRocmVhZFNhZmVS
ZWZDb3VudGVkPE1ldGFBbGxvY2F0b3JIYW5kbGU+LCBwdWJsaWMgUmVkQmxhY2tUcmVlPE1ldGFB
bGxvY2F0b3JIYW5kbGUsIHZvaWQqPjo6Tm9kZSB7CiAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FU
RURfV0lUSF9IRUFQX0lERU5USUZJRVIoTWV0YUFsbG9jYXRvckhhbmRsZSk7CiBwcml2YXRlOgot
ICAgIE1ldGFBbGxvY2F0b3JIYW5kbGUoTWV0YUFsbG9jYXRvciosIHZvaWQqIHN0YXJ0LCBzaXpl
X3Qgc2l6ZUluQnl0ZXMsIHZvaWQqIG93bmVyVUlEKTsKKyAgICBNZXRhQWxsb2NhdG9ySGFuZGxl
KE1ldGFBbGxvY2F0b3ImLCB2b2lkKiBzdGFydCwgc2l6ZV90IHNpemVJbkJ5dGVzKTsKIAogcHVi
bGljOgogICAgIHVzaW5nIE1lbW9yeVB0ciA9IE1ldGFBbGxvY2F0b3JQdHI8SGFuZGxlTWVtb3J5
UHRyVGFnPjsKQEAgLTg2LDIyICs4NiwxMSBAQCBwdWJsaWM6CiAgICAgICAgIAogICAgIFdURl9F
WFBPUlRfUFJJVkFURSB2b2lkIHNocmluayhzaXplX3QgbmV3U2l6ZUluQnl0ZXMpOwogICAgIAot
ICAgIGJvb2wgaXNNYW5hZ2VkKCkKKyAgICBNZXRhQWxsb2NhdG9yJiBhbGxvY2F0b3IoKQogICAg
IHsKLSAgICAgICAgcmV0dXJuICEhbV9hbGxvY2F0b3I7Ci0gICAgfQotICAgICAgICAKLSAgICBN
ZXRhQWxsb2NhdG9yKiBhbGxvY2F0b3IoKQotICAgIHsKLSAgICAgICAgQVNTRVJUKG1fYWxsb2Nh
dG9yKTsKICAgICAgICAgcmV0dXJuIG1fYWxsb2NhdG9yOwogICAgIH0KIAotICAgIHZvaWQqIG93
bmVyVUlEKCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBtX293bmVyVUlEOwotICAgIH0KLQogICAg
IHZvaWQqIGtleSgpCiAgICAgewogICAgICAgICByZXR1cm4gbV9zdGFydC51bnRhZ2dlZFB0cigp
OwpAQCAtMTEyLDEwICsxMDEsOSBAQCBwdWJsaWM6CiBwcml2YXRlOgogICAgIGZyaWVuZCBjbGFz
cyBNZXRhQWxsb2NhdG9yOwogICAgIAotICAgIE1ldGFBbGxvY2F0b3IqIG1fYWxsb2NhdG9yOwor
ICAgIE1ldGFBbGxvY2F0b3ImIG1fYWxsb2NhdG9yOwogICAgIE1lbW9yeVB0ciBtX3N0YXJ0Owog
ICAgIE1lbW9yeVB0ciBtX2VuZDsKLSAgICB2b2lkKiBtX293bmVyVUlEOwogfTsKIAogfQpJbmRl
eDogU291cmNlL1dURi93dGYvUGxhdGZvcm1Vc2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RG
L3d0Zi9QbGF0Zm9ybVVzZS5oCShyZXZpc2lvbiAyNTgzNTApCisrKyBTb3VyY2UvV1RGL3d0Zi9Q
bGF0Zm9ybVVzZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMjQsMyArMzI0LDcgQEAKICNpZiBQTEFU
Rk9STShJT1MpICYmIF9fSVBIT05FX09TX1ZFUlNJT05fTUlOX1JFUVVJUkVEID49IDE0MDAwMAog
I2RlZmluZSBVU0VfVVRUWVBFX1NXSVpaTEVSIDEKICNlbmRpZgorCisjaWYgQ1BVKEFSTTY0KSAm
JiBDUFUoQUREUkVTUzY0KQorI2RlZmluZSBVU0VfSlVNUF9JU0xBTkRTIDEKKyNlbmRpZgpJbmRl
eDogU291cmNlL1dURi93dGYvUmVkQmxhY2tUcmVlLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dU
Ri93dGYvUmVkQmxhY2tUcmVlLmgJKHJldmlzaW9uIDI1ODM1MCkKKysrIFNvdXJjZS9XVEYvd3Rm
L1JlZEJsYWNrVHJlZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMjQsNiArMzI0LDI2IEBAIHB1Ymxp
YzoKICAgICAgICAgfQogICAgICAgICByZXR1cm4gYmVzdDsKICAgICB9CisKKyAgICB0ZW1wbGF0
ZSA8dHlwZW5hbWUgRnVuY3Rpb24+CisgICAgdm9pZCBpdGVyYXRlKEZ1bmN0aW9uIGZ1bmN0aW9u
KQorICAgIHsKKyAgICAgICAgaWYgKCFtX3Jvb3QpCisgICAgICAgICAgICByZXR1cm47CisKKyAg
ICAgICAgVmVjdG9yPE5vZGVUeXBlKiwgMTY+IHRvSXRlcmF0ZTsKKyAgICAgICAgdG9JdGVyYXRl
LmFwcGVuZChtX3Jvb3QpOworICAgICAgICB3aGlsZSAodG9JdGVyYXRlLnNpemUoKSkgeworICAg
ICAgICAgICAgTm9kZVR5cGUmIGN1cnJlbnQgPSAqdG9JdGVyYXRlLnRha2VMYXN0KCk7CisgICAg
ICAgICAgICBib29sIGl0ZXJhdGVMZWZ0ID0gZmFsc2U7CisgICAgICAgICAgICBib29sIGl0ZXJh
dGVSaWdodCA9IGZhbHNlOworICAgICAgICAgICAgZnVuY3Rpb24oY3VycmVudCwgaXRlcmF0ZUxl
ZnQsIGl0ZXJhdGVSaWdodCk7CisgICAgICAgICAgICBpZiAoaXRlcmF0ZUxlZnQgJiYgY3VycmVu
dC5sZWZ0KCkpCisgICAgICAgICAgICAgICAgdG9JdGVyYXRlLmFwcGVuZChjdXJyZW50LmxlZnQo
KSk7CisgICAgICAgICAgICBpZiAoaXRlcmF0ZVJpZ2h0ICYmIGN1cnJlbnQucmlnaHQoKSkKKyAg
ICAgICAgICAgICAgICB0b0l0ZXJhdGUuYXBwZW5kKGN1cnJlbnQucmlnaHQoKSk7CisgICAgICAg
IH0KKyAgICB9CiAgICAgCiAgICAgTm9kZVR5cGUqIGZpcnN0KCkgY29uc3QKICAgICB7CkluZGV4
OiBTb3VyY2UvV1RGL3d0Zi9TdGRMaWJFeHRyYXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RG
L3d0Zi9TdGRMaWJFeHRyYXMuaAkocmV2aXNpb24gMjU4MzUwKQorKysgU291cmNlL1dURi93dGYv
U3RkTGliRXh0cmFzLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ4OSw2ICs0ODksMTkgQEAgQUxXQVlT
X0lOTElORSBkZWNsdHlwZShhdXRvKSBtYWtlVW5pcXVlVwogICAgIHJldHVybiBzdGQ6Om1ha2Vf
dW5pcXVlPFQ+KHN0ZDo6Zm9yd2FyZDxBcmdzPihhcmdzKS4uLik7CiB9CiAKK3RlbXBsYXRlIDx0
eXBlbmFtZSBSZXN1bHRUeXBlLCBzaXplX3QuLi4gSXMsIHR5cGVuYW1lIC4uLkFyZ3M+Citjb25z
dGV4cHIgYXV0byBjb25zdHJ1Y3RGaXhlZFNpemVBcnJheVdpdGhBcmd1bWVudHNJbXBsKHN0ZDo6
aW5kZXhfc2VxdWVuY2U8SXMuLi4+LCBBcmdzJiYuLi4gYXJncykgLT4gc3RkOjphcnJheTxSZXN1
bHRUeXBlLCBzaXplb2YuLi4oSXMpPgoreworICAgIHJldHVybiB7ICgodm9pZClJcywgUmVzdWx0
VHlwZSB7IHN0ZDo6Zm9yd2FyZDxBcmdzPihhcmdzKS4uLiB9KS4uLiB9OworfQorCisvLyBDb25z
dHJ1Y3QgYW4gc3RkOjphcnJheSB3aXRoIE4gZWxlbWVudHMgb2YgUmVzdWx0VHlwZSwgcGFzc2lu
ZyBBcmdzIHRvIGVhY2ggb2YgdGhlIE4gY29uc3RydWN0b3JzLgordGVtcGxhdGU8dHlwZW5hbWUg
UmVzdWx0VHlwZSwgc2l6ZV90IE4sIHR5cGVuYW1lIC4uLkFyZ3M+Citjb25zdGV4cHIgYXV0byBj
b25zdHJ1Y3RGaXhlZFNpemVBcnJheVdpdGhBcmd1bWVudHMoQXJncyYmLi4uIGFyZ3MpIC0+IGRl
Y2x0eXBlKGF1dG8pCit7CisgICAgYXV0byB0dXBsZSA9IHN0ZDo6bWFrZV9pbmRleF9zZXF1ZW5j
ZTxOPigpOworICAgIHJldHVybiBjb25zdHJ1Y3RGaXhlZFNpemVBcnJheVdpdGhBcmd1bWVudHNJ
bXBsPFJlc3VsdFR5cGU+KHR1cGxlLCBzdGQ6OmZvcndhcmQ8QXJncz4oYXJncykuLi4pOworfQog
CiB9IC8vIG5hbWVzcGFjZSBXVEYKIApAQCAtNTE0LDMgKzUyNyw0IEBAIHVzaW5nIFdURjo6c2Fm
ZUNhc3Q7CiB1c2luZyBXVEY6OnRyeUJpbmFyeVNlYXJjaDsKIHVzaW5nIFdURjo6bWFrZVVuaXF1
ZTsKIHVzaW5nIFdURjo6bWFrZVVuaXF1ZVdpdGhvdXRGYXN0TWFsbG9jQ2hlY2s7Cit1c2luZyBX
VEY6OmNvbnN0cnVjdEZpeGVkU2l6ZUFycmF5V2l0aEFyZ3VtZW50czsKSW5kZXg6IFRvb2xzL0No
YW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9DaGFuZ2VMb2cJKHJldmlzaW9uIDI1ODM1MCkK
KysrIFRvb2xzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEyIEBACisyMDIw
LTAzLTEyICBTYWFtIEJhcmF0aSAgPHNiYXJhdGlAYXBwbGUuY29tPgorCisgICAgICAgIEltcGxl
bWVudCAxR0Igb2YgZXhlY3V0YWJsZSBtZW1vcnkgb24gYXJtNjQKKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIwODQ5MAorCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogU2NyaXB0cy9ydW4tanNjLXN0cmVzcy10
ZXN0czoKKwogMjAyMC0wMy0xMiAgV2Vuc29uIEhzaWVoICA8d2Vuc29uX2hzaWVoQGFwcGxlLmNv
bT4KIAogICAgICAgICBydW4td2Via2l0LXRlc3RzIC0tdXNlLWdwdS1wcm9jZXNzIHNob3VsZCBl
bmFibGUgR1BVIFByb2Nlc3MgZm9yIGNhbnZhcwpJbmRleDogVG9vbHMvU2NyaXB0cy9ydW4tanNj
LXN0cmVzcy10ZXN0cwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9TY3JpcHRzL3J1bi1qc2Mtc3RyZXNz
LXRlc3RzCShyZXZpc2lvbiAyNTgzNTApCisrKyBUb29scy9TY3JpcHRzL3J1bi1qc2Mtc3RyZXNz
LXRlc3RzCSh3b3JraW5nIGNvcHkpCkBAIC01MCw2ICs1MCw3IEBAIFNDUklQVFNfUEFUSCA9IFRI
SVNfU0NSSVBUX1BBVEguZGlybmFtZQogV0VCS0lUX1BBVEggPSBTQ1JJUFRTX1BBVEguZGlybmFt
ZS5kaXJuYW1lCiBMQVlPVVRURVNUU19QQVRIID0gV0VCS0lUX1BBVEggKyAiTGF5b3V0VGVzdHMi
CiBXQVNNVEVTVFNfUEFUSCA9IFdFQktJVF9QQVRIICsgIkpTVGVzdHMvd2FzbSIKK0pFVFNUUkVB
TTJfUEFUSCA9IFdFQktJVF9QQVRIICsgIlBlcmZvcm1hbmNlVGVzdHMvSmV0U3RyZWFtMiIKIENI
QUtSQVRFU1RTX1BBVEggPSBXRUJLSVRfUEFUSCArICJKU1Rlc3RzL0NoYWtyYUNvcmUvdGVzdCIK
IHJhaXNlIHVubGVzcyBTQ1JJUFRTX1BBVEguYmFzZW5hbWUudG9fcyA9PSAiU2NyaXB0cyIKIHJh
aXNlIHVubGVzcyBTQ1JJUFRTX1BBVEguZGlybmFtZS5iYXNlbmFtZS50b19zID09ICJUb29scyIK
QEAgLTY2OSw3ICs2NzAsNyBAQCBkZWYgcnVuTm9DSklUVmFsaWRhdGUoKm9wdGlvbmFsVGVzdFNw
ZWNpCiBlbmQKIAogZGVmIHJ1bk5vQ0pJVFZhbGlkYXRlUGhhc2VzKCpvcHRpb25hbFRlc3RTcGVj
aWZpY09wdGlvbnMpCi0gICAgcnVuKCJuby1jaml0LXZhbGlkYXRlLXBoYXNlcyIsICItLXZhbGlk
YXRlQnl0ZWNvZGU9dHJ1ZSIsICItLXZhbGlkYXRlR3JhcGhBdEVhY2hQaGFzZT10cnVlIiwgIi0t
dXNlU291cmNlUHJvdmlkZXJDYWNoZT1mYWxzZSIsICooTk9fQ0pJVF9PUFRJT05TICsgb3B0aW9u
YWxUZXN0U3BlY2lmaWNPcHRpb25zKSkKKyAgICBydW4oIm5vLWNqaXQtdmFsaWRhdGUtcGhhc2Vz
IiwgIi0tdmFsaWRhdGVCeXRlY29kZT10cnVlIiwgIi0tdmFsaWRhdGVHcmFwaEF0RWFjaFBoYXNl
PXRydWUiLCAiLS11c2VTb3VyY2VQcm92aWRlckNhY2hlPWZhbHNlIiwgIi0tdXNlUmFuZG9taXpp
bmdFeGVjdXRhYmxlSXNsYW5kQWxsb2NhdGlvbj10cnVlIiwgKihOT19DSklUX09QVElPTlMgKyBv
cHRpb25hbFRlc3RTcGVjaWZpY09wdGlvbnMpKQogZW5kCiAKIGRlZiBydW5Ob0NKSVRDb2xsZWN0
Q29udGludW91c2x5KCpvcHRpb25hbFRlc3RTcGVjaWZpY09wdGlvbnMpCkBAIC03MDYsNyArNzA3
LDcgQEAgZGVmIHJ1bkZUTE5vQ0pJVCgqb3B0aW9uYWxUZXN0U3BlY2lmaWNPcAogZW5kCiAKIGRl
ZiBydW5GVExOb0NKSVRCM08wKCpvcHRpb25hbFRlc3RTcGVjaWZpY09wdGlvbnMpCi0gICAgcnVu
KCJmdGwtbm8tY2ppdC1iM28wIiwgIi0tdXNlQXJyYXlBbGxvY2F0aW9uUHJvZmlsaW5nPWZhbHNl
IiwgIi0tZm9yY2VQb2x5UHJvdG89dHJ1ZSIsICooRlRMX09QVElPTlMgKyBOT19DSklUX09QVElP
TlMgKyBCM08wX09QVElPTlMgKyBGT1JDRV9MTElOVF9FWElUX09QVElPTlMgKyBvcHRpb25hbFRl
c3RTcGVjaWZpY09wdGlvbnMpKQorICAgIHJ1bigiZnRsLW5vLWNqaXQtYjNvMCIsICItLXVzZUFy
cmF5QWxsb2NhdGlvblByb2ZpbGluZz1mYWxzZSIsICItLWZvcmNlUG9seVByb3RvPXRydWUiLCAi
LS11c2VSYW5kb21pemluZ0V4ZWN1dGFibGVJc2xhbmRBbGxvY2F0aW9uPXRydWUiLCAqKEZUTF9P
UFRJT05TICsgTk9fQ0pJVF9PUFRJT05TICsgQjNPMF9PUFRJT05TICsgRk9SQ0VfTExJTlRfRVhJ
VF9PUFRJT05TICsgb3B0aW9uYWxUZXN0U3BlY2lmaWNPcHRpb25zKSkKIGVuZAogCiBkZWYgcnVu
RlRMTm9DSklUVmFsaWRhdGUoKm9wdGlvbmFsVGVzdFNwZWNpZmljT3B0aW9ucykKQEAgLTczNCw3
ICs3MzUsNyBAQCBkZWYgcnVuREZHRWFnZXJOb0NKSVRWYWxpZGF0ZSgqb3B0aW9uYWxUCiBlbmQK
IAogZGVmIHJ1bkZUTEVhZ2VyKCpvcHRpb25hbFRlc3RTcGVjaWZpY09wdGlvbnMpCi0gICAgcnVu
KCJmdGwtZWFnZXIiLCAiLS1haXJGb3JjZUJyaWdnc0FsbG9jYXRvcj10cnVlIiwgIi0tZm9yY2VQ
b2x5UHJvdG89dHJ1ZSIsICooRlRMX09QVElPTlMgKyBFQUdFUl9PUFRJT05TICsgQ09MTEVDVF9D
T05USU5VT1VTTFlfT1BUSU9OUyArIG9wdGlvbmFsVGVzdFNwZWNpZmljT3B0aW9ucykpCisgICAg
cnVuKCJmdGwtZWFnZXIiLCAiLS1haXJGb3JjZUJyaWdnc0FsbG9jYXRvcj10cnVlIiwgIi0tdXNl
UmFuZG9taXppbmdFeGVjdXRhYmxlSXNsYW5kQWxsb2NhdGlvbj10cnVlIiwgIi0tZm9yY2VQb2x5
UHJvdG89dHJ1ZSIsICooRlRMX09QVElPTlMgKyBFQUdFUl9PUFRJT05TICsgQ09MTEVDVF9DT05U
SU5VT1VTTFlfT1BUSU9OUyArIG9wdGlvbmFsVGVzdFNwZWNpZmljT3B0aW9ucykpCiBlbmQKIAog
ZGVmIHJ1bkZUTEVhZ2VyV2F0Y2hkb2coKm9wdGlvbmFsVGVzdFNwZWNpZmljT3B0aW9ucykKQEAg
LTc3NSw3ICs3NzYsNyBAQCBkZWYgcnVuTm9DSklUKCpvcHRpb25hbFRlc3RTcGVjaWZpY09wdGlv
CiBlbmQKIAogZGVmIHJ1bkVhZ2VySmV0dGlzb25Ob0NKSVQoKm9wdGlvbmFsVGVzdFNwZWNpZmlj
T3B0aW9ucykKLSAgICBydW4oImVhZ2VyLWpldHRpc29uLW5vLWNqaXQiLCAiLS1mb3JjZUNvZGVC
bG9ja1RvSmV0dGlzb25EdWVUb09sZEFnZT10cnVlIiwgKihOT19DSklUX09QVElPTlMgKyBvcHRp
b25hbFRlc3RTcGVjaWZpY09wdGlvbnMpKQorICAgIHJ1bigiZWFnZXItamV0dGlzb24tbm8tY2pp
dCIsICItLXVzZVJhbmRvbWl6aW5nRXhlY3V0YWJsZUlzbGFuZEFsbG9jYXRpb249dHJ1ZSIsICIt
LWZvcmNlQ29kZUJsb2NrVG9KZXR0aXNvbkR1ZVRvT2xkQWdlPXRydWUiLCAqKE5PX0NKSVRfT1BU
SU9OUyArIG9wdGlvbmFsVGVzdFNwZWNpZmljT3B0aW9ucykpCiBlbmQKIAogZGVmIHJ1blNoYWRv
d0NoaWNrZW4oKm9wdGlvbmFsVGVzdFNwZWNpZmljT3B0aW9ucykKQEAgLTEwODMsMTYgKzEwODQs
MzcgQEAgZGVmIHJ1bldlYkFzc2VtYmx5CiAgICAgcnVuKCJkZWZhdWx0LXdhc20iLCAiLW0iLCAq
RlRMX09QVElPTlMpCiAgICAgaWYgJG1vZGUgIT0gInF1aWNrIgogICAgICAgICBydW4oIndhc20t
bm8tY2ppdC15ZXMtdGxzLWNvbnRleHQiLCAiLW0iLCAiLS11c2VGYXN0VExTRm9yV2FzbUNvbnRl
eHQ9dHJ1ZSIsICooRlRMX09QVElPTlMgKyBOT19DSklUX09QVElPTlMpKQotICAgICAgICBydW4o
Indhc20tZWFnZXIiLCAiLW0iLCAqKEZUTF9PUFRJT05TICsgRUFHRVJfT1BUSU9OUykpCi0gICAg
ICAgIHJ1bigid2FzbS1lYWdlci1qZXR0aXNvbiIsICItbSIsICItLWZvcmNlQ29kZUJsb2NrVG9K
ZXR0aXNvbkR1ZVRvT2xkQWdlPXRydWUiLCAqRlRMX09QVElPTlMpCisgICAgICAgIHJ1bigid2Fz
bS1lYWdlciIsICItbSIsICItLXVzZVJhbmRvbWl6aW5nRXhlY3V0YWJsZUlzbGFuZEFsbG9jYXRp
b249dHJ1ZSIsICooRlRMX09QVElPTlMgKyBFQUdFUl9PUFRJT05TKSkKKyAgICAgICAgcnVuKCJ3
YXNtLWVhZ2VyLWpldHRpc29uIiwgIi1tIiwgIi0tZm9yY2VDb2RlQmxvY2tUb0pldHRpc29uRHVl
VG9PbGRBZ2U9dHJ1ZSIsICItLXVzZVJhbmRvbWl6aW5nRXhlY3V0YWJsZUlzbGFuZEFsbG9jYXRp
b249dHJ1ZSIsICpGVExfT1BUSU9OUykKICAgICAgICAgcnVuKCJ3YXNtLW5vLXRscy1jb250ZXh0
IiwgIi1tIiwgIi0tdXNlRmFzdFRMU0Zvcldhc21Db250ZXh0PWZhbHNlIiwgKkZUTF9PUFRJT05T
KQogICAgICAgICBydW4oIndhc20tc2xvdy1tZW1vcnkiLCAiLW0iLCAiLS11c2VXZWJBc3NlbWJs
eUZhc3RNZW1vcnk9ZmFsc2UiLCAqRlRMX09QVElPTlMpCiAgICAgICAgIHJ1bigid2FzbS1iMyIs
ICItbSIsICItLXVzZVdhc21MTEludD1mYWxzZSIsICItLXdhc21CQlFVc2VzQWlyPWZhbHNlIiwg
KkZUTF9PUFRJT05TKQotICAgICAgICBydW4oIndhc20tYWlyIiwgIi1tIiwgIi0tdXNlV2FzbUxM
SW50PWZhbHNlIiwgKkZUTF9PUFRJT05TKQorICAgICAgICBydW4oIndhc20tYWlyIiwgIi1tIiwg
Ii0tdXNlV2FzbUxMSW50PWZhbHNlIiwgIi0tdXNlUmFuZG9taXppbmdFeGVjdXRhYmxlSXNsYW5k
QWxsb2NhdGlvbj10cnVlIiwgKkZUTF9PUFRJT05TKQogICAgICAgICBydW4oIndhc20tY29sbGVj
dC1jb250aW51b3VzbHkiLCAiLW0iLCAiLS1jb2xsZWN0Q29udGludW91c2x5PXRydWUiLCAqRlRM
X09QVElPTlMpIGlmIHNob3VsZENvbGxlY3RDb250aW51b3VzbHk/CiAgICAgZW5kCiBlbmQKIAor
ZGVmIHJ1bldlYkFzc2VtYmx5SmV0U3RyZWFtMgorICAgIHJldHVybiBpZiAhJGppdFRlc3RzCisg
ICAgcmV0dXJuIGlmICEkaXNGVExQbGF0Zm9ybQorCisgICAgcHJlcGFyZUV4dHJhQWJzb2x1dGVG
aWxlcyhKRVRTVFJFQU0yX1BBVEgsIFsiSmV0U3RyZWFtRHJpdmVyLmpzIl0pCisgICAgcHJlcGFy
ZUV4dHJhUmVsYXRpdmVGaWxlc1dpdGhCYXNlRGlyZWN0b3J5KERpcltKRVRTVFJFQU0yX1BBVEgg
KyAid2FzbSIgKyAiKi5qcyJdLm1hcCB7IHxmfCAid2FzbS8iICsgRmlsZS5iYXNlbmFtZShmKSB9
LCAkY29sbGVjdGlvbi5kaXJuYW1lLCAkZXh0cmFGaWxlc0Jhc2VEaXIuZGlybmFtZSkKKyAgICBw
cmVwYXJlRXh0cmFSZWxhdGl2ZUZpbGVzV2l0aEJhc2VEaXJlY3RvcnkoRGlyW0pFVFNUUkVBTTJf
UEFUSCArICJ3YXNtIiArICIqLndhc20iXS5tYXAgeyB8ZnwgIndhc20vIiArIEZpbGUuYmFzZW5h
bWUoZikgfSwgJGNvbGxlY3Rpb24uZGlybmFtZSwgJGV4dHJhRmlsZXNCYXNlRGlyLmRpcm5hbWUp
CisKKyAgICBydW4oImRlZmF1bHQtd2FzbSIsICpGVExfT1BUSU9OUykKKyAgICBpZiAkbW9kZSAh
PSAicXVpY2siCisgICAgICAgIHJ1bigid2FzbS1uby1jaml0LXllcy10bHMtY29udGV4dCIsICIt
LXVzZUZhc3RUTFNGb3JXYXNtQ29udGV4dD10cnVlIiwgKihGVExfT1BUSU9OUyArIE5PX0NKSVRf
T1BUSU9OUykpCisgICAgICAgIHJ1bigid2FzbS1lYWdlciIsICItLXVzZVJhbmRvbWl6aW5nRXhl
Y3V0YWJsZUlzbGFuZEFsbG9jYXRpb249dHJ1ZSIsICooRlRMX09QVElPTlMgKyBFQUdFUl9PUFRJ
T05TKSkKKyAgICAgICAgcnVuKCJ3YXNtLWVhZ2VyLWpldHRpc29uIiwgIi0tZm9yY2VDb2RlQmxv
Y2tUb0pldHRpc29uRHVlVG9PbGRBZ2U9dHJ1ZSIsICpGVExfT1BUSU9OUykKKyAgICAgICAgcnVu
KCJ3YXNtLW5vLXRscy1jb250ZXh0IiwgIi0tdXNlRmFzdFRMU0Zvcldhc21Db250ZXh0PWZhbHNl
IiwgKkZUTF9PUFRJT05TKQorICAgICAgICBydW4oIndhc20tc2xvdy1tZW1vcnkiLCAiLS11c2VX
ZWJBc3NlbWJseUZhc3RNZW1vcnk9ZmFsc2UiLCAqRlRMX09QVElPTlMpCisgICAgICAgIHJ1bigi
d2FzbS1iMyIsICItLXVzZVdhc21MTEludD1mYWxzZSIsICItLXdhc21CQlFVc2VzQWlyPWZhbHNl
IiwgKkZUTF9PUFRJT05TKQorICAgICAgICBydW4oIndhc20tYWlyIiwgIi0tdXNlV2FzbUxMSW50
PWZhbHNlIiwgIi0tdXNlUmFuZG9taXppbmdFeGVjdXRhYmxlSXNsYW5kQWxsb2NhdGlvbj10cnVl
IiwgKkZUTF9PUFRJT05TKQorICAgICAgICBydW4oIndhc20tY29sbGVjdC1jb250aW51b3VzbHki
LCAiLS1jb2xsZWN0Q29udGludW91c2x5PXRydWUiLCAqRlRMX09QVElPTlMpIGlmIHNob3VsZENv
bGxlY3RDb250aW51b3VzbHk/CisgICAgZW5kCitlbmQKKwogZGVmIHJ1bldlYkFzc2VtYmx5U3Vp
dGUoKm9wdGlvbmFsVGVzdFNwZWNpZmljT3B0aW9ucykKICAgICByZXR1cm4gaWYgISRqaXRUZXN0
cwogICAgIHJldHVybiBpZiAhJGlzRlRMUGxhdGZvcm0KQEAgLTExMDMsMTEgKzExMjUsMTEgQEAg
ZGVmIHJ1bldlYkFzc2VtYmx5U3VpdGUoKm9wdGlvbmFsVGVzdFNwZQogICAgIGlmICRtb2RlICE9
ICJxdWljayIKICAgICAgICAgcnVuKCJ3YXNtLW5vLWNqaXQteWVzLXRscy1jb250ZXh0IiwgIi1t
IiwgIi0tdXNlRmFzdFRMU0Zvcldhc21Db250ZXh0PXRydWUiLCAqKEZUTF9PUFRJT05TICsgTk9f
Q0pJVF9PUFRJT05TICsgb3B0aW9uYWxUZXN0U3BlY2lmaWNPcHRpb25zKSkKICAgICAgICAgcnVu
KCJ3YXNtLWVhZ2VyIiwgIi1tIiwgKihGVExfT1BUSU9OUyArIEVBR0VSX09QVElPTlMgKyBvcHRp
b25hbFRlc3RTcGVjaWZpY09wdGlvbnMpKQotICAgICAgICBydW4oIndhc20tZWFnZXItamV0dGlz
b24iLCAiLW0iLCAiLS1mb3JjZUNvZGVCbG9ja1RvSmV0dGlzb25EdWVUb09sZEFnZT10cnVlIiwg
KihGVExfT1BUSU9OUyArIG9wdGlvbmFsVGVzdFNwZWNpZmljT3B0aW9ucykpCisgICAgICAgIHJ1
bigid2FzbS1lYWdlci1qZXR0aXNvbiIsICItbSIsICItLWZvcmNlQ29kZUJsb2NrVG9KZXR0aXNv
bkR1ZVRvT2xkQWdlPXRydWUiLCAiLS11c2VSYW5kb21pemluZ0V4ZWN1dGFibGVJc2xhbmRBbGxv
Y2F0aW9uPXRydWUiLCAqKEZUTF9PUFRJT05TICsgb3B0aW9uYWxUZXN0U3BlY2lmaWNPcHRpb25z
KSkKICAgICAgICAgcnVuKCJ3YXNtLW5vLXRscy1jb250ZXh0IiwgIi1tIiwgIi0tdXNlRmFzdFRM
U0Zvcldhc21Db250ZXh0PWZhbHNlIiwgKihGVExfT1BUSU9OUyArIG9wdGlvbmFsVGVzdFNwZWNp
ZmljT3B0aW9ucykpCiAgICAgICAgIHJ1bigid2FzbS1zbG93LW1lbW9yeSIsICItbSIsICItLXVz
ZVdlYkFzc2VtYmx5RmFzdE1lbW9yeT1mYWxzZSIsICooRlRMX09QVElPTlMgKyBvcHRpb25hbFRl
c3RTcGVjaWZpY09wdGlvbnMpKQogICAgICAgICBydW4oIndhc20tYjMiLCAiLW0iLCAiLS11c2VX
YXNtTExJbnQ9ZmFsc2UiLCAiLS13YXNtQkJRVXNlc0Fpcj1mYWxzZSIsICooRlRMX09QVElPTlMg
KyBvcHRpb25hbFRlc3RTcGVjaWZpY09wdGlvbnMpKQotICAgICAgICBydW4oIndhc20tYWlyIiwg
Ii1tIiwgIi0tdXNlV2FzbUxMSW50PWZhbHNlIiwgKihGVExfT1BUSU9OUyArIG9wdGlvbmFsVGVz
dFNwZWNpZmljT3B0aW9ucykpCisgICAgICAgIHJ1bigid2FzbS1haXIiLCAiLW0iLCAiLS11c2VX
YXNtTExJbnQ9ZmFsc2UiLCAiLS11c2VSYW5kb21pemluZ0V4ZWN1dGFibGVJc2xhbmRBbGxvY2F0
aW9uPXRydWUiLCAqKEZUTF9PUFRJT05TICsgb3B0aW9uYWxUZXN0U3BlY2lmaWNPcHRpb25zKSkK
ICAgICAgICAgcnVuKCJ3YXNtLWNvbGxlY3QtY29udGludW91c2x5IiwgIi1tIiwgIi0tY29sbGVj
dENvbnRpbnVvdXNseT10cnVlIiwgKihGVExfT1BUSU9OUyArIG9wdGlvbmFsVGVzdFNwZWNpZmlj
T3B0aW9ucykpIGlmIHNob3VsZENvbGxlY3RDb250aW51b3VzbHk/CiAgICAgZW5kCiBlbmQKQEAg
LTExMzMsMTEgKzExNTUsMTEgQEAgZGVmIHJ1bldlYkFzc2VtYmx5V2l0aEhhcm5lc3MoKm9wdGlv
bmFsVAogICAgIGlmICRtb2RlICE9ICJxdWljayIKICAgICAgICAgcnVuSGFybmVzc1Rlc3QoIndh
c20tbm8tY2ppdC15ZXMtdGxzLWNvbnRleHQiLCAiLS11c2VGYXN0VExTRm9yV2FzbUNvbnRleHQ9
dHJ1ZSIsICooRlRMX09QVElPTlMgKyBOT19DSklUX09QVElPTlMgKyBvcHRpb25hbFRlc3RTcGVj
aWZpY09wdGlvbnMpKQogICAgICAgICBydW5IYXJuZXNzVGVzdCgid2FzbS1lYWdlciIsICooRlRM
X09QVElPTlMgKyBFQUdFUl9PUFRJT05TICsgb3B0aW9uYWxUZXN0U3BlY2lmaWNPcHRpb25zKSkK
LSAgICAgICAgcnVuSGFybmVzc1Rlc3QoIndhc20tZWFnZXItamV0dGlzb24iLCAiLS1mb3JjZUNv
ZGVCbG9ja1RvSmV0dGlzb25EdWVUb09sZEFnZT10cnVlIiwgKihGVExfT1BUSU9OUyArIG9wdGlv
bmFsVGVzdFNwZWNpZmljT3B0aW9ucykpCisgICAgICAgIHJ1bkhhcm5lc3NUZXN0KCJ3YXNtLWVh
Z2VyLWpldHRpc29uIiwgIi0tZm9yY2VDb2RlQmxvY2tUb0pldHRpc29uRHVlVG9PbGRBZ2U9dHJ1
ZSIsICItLXVzZVJhbmRvbWl6aW5nRXhlY3V0YWJsZUlzbGFuZEFsbG9jYXRpb249dHJ1ZSIsICoo
RlRMX09QVElPTlMgKyBvcHRpb25hbFRlc3RTcGVjaWZpY09wdGlvbnMpKQogICAgICAgICBydW5I
YXJuZXNzVGVzdCgid2FzbS1uby10bHMtY29udGV4dCIsICItLXVzZUZhc3RUTFNGb3JXYXNtQ29u
dGV4dD1mYWxzZSIsICooRlRMX09QVElPTlMgKyBvcHRpb25hbFRlc3RTcGVjaWZpY09wdGlvbnMp
KQogICAgICAgICBydW5IYXJuZXNzVGVzdCgid2FzbS1zbG93LW1lbW9yeSIsICItLXVzZVdlYkFz
c2VtYmx5RmFzdE1lbW9yeT1mYWxzZSIsICooRlRMX09QVElPTlMgKyBvcHRpb25hbFRlc3RTcGVj
aWZpY09wdGlvbnMpKQogICAgICAgICBydW5IYXJuZXNzVGVzdCgid2FzbS1iMyIsICItLXVzZVdh
c21MTEludD1mYWxzZSIsICItLXdhc21CQlFVc2VzQWlyPWZhbHNlIiwgKihGVExfT1BUSU9OUyAr
IG9wdGlvbmFsVGVzdFNwZWNpZmljT3B0aW9ucykpCi0gICAgICAgIHJ1bkhhcm5lc3NUZXN0KCJ3
YXNtLW5vLWFpciIsICItLXVzZVdhc21MTEludD1mYWxzZSIsICooRlRMX09QVElPTlMgKyBvcHRp
b25hbFRlc3RTcGVjaWZpY09wdGlvbnMpKQorICAgICAgICBydW5IYXJuZXNzVGVzdCgid2FzbS1u
by1haXIiLCAiLS11c2VXYXNtTExJbnQ9ZmFsc2UiLCAiLS11c2VSYW5kb21pemluZ0V4ZWN1dGFi
bGVJc2xhbmRBbGxvY2F0aW9uPXRydWUiLCAqKEZUTF9PUFRJT05TICsgb3B0aW9uYWxUZXN0U3Bl
Y2lmaWNPcHRpb25zKSkKICAgICAgICAgcnVuSGFybmVzc1Rlc3QoIndhc20tY29sbGVjdC1jb250
aW51b3VzbHkiLCAiLS1jb2xsZWN0Q29udGludW91c2x5PXRydWUiLCAqKEZUTF9PUFRJT05TICsg
b3B0aW9uYWxUZXN0U3BlY2lmaWNPcHRpb25zKSkgaWYgc2hvdWxkQ29sbGVjdENvbnRpbnVvdXNs
eT8KICAgICBlbmQKIGVuZApAQCAtMTE1NCwxMCArMTE3NiwxMCBAQCBkZWYgcnVuV2ViQXNzZW1i
bHlFbXNjcmlwdGVuKG1vZGUpCiAgICAgcnVuKCJkZWZhdWx0LXdhc20iLCAqRlRMX09QVElPTlMp
CiAgICAgaWYgJG1vZGUgIT0gInF1aWNrIgogICAgICAgICBydW4oIndhc20tbm8tY2ppdC15ZXMt
dGxzLWNvbnRleHQiLCAiLS11c2VGYXN0VExTRm9yV2FzbUNvbnRleHQ9dHJ1ZSIsICooRlRMX09Q
VElPTlMgKyBOT19DSklUX09QVElPTlMpKQotICAgICAgICBydW4oIndhc20tZWFnZXItamV0dGlz
b24iLCAiLS1mb3JjZUNvZGVCbG9ja1RvSmV0dGlzb25EdWVUb09sZEFnZT10cnVlIiwgKkZUTF9P
UFRJT05TKQorICAgICAgICBydW4oIndhc20tZWFnZXItamV0dGlzb24iLCAiLS1mb3JjZUNvZGVC
bG9ja1RvSmV0dGlzb25EdWVUb09sZEFnZT10cnVlIiwgIi0tdXNlUmFuZG9taXppbmdFeGVjdXRh
YmxlSXNsYW5kQWxsb2NhdGlvbj10cnVlIiwgKkZUTF9PUFRJT05TKQogICAgICAgICBydW4oIndh
c20tbm8tdGxzLWNvbnRleHQiLCAiLS11c2VGYXN0VExTRm9yV2FzbUNvbnRleHQ9ZmFsc2UiLCAq
RlRMX09QVElPTlMpCiAgICAgICAgIHJ1bigid2FzbS1iMyIsICItLXVzZVdhc21MTEludD1mYWxz
ZSIsICItLXdhc21CQlFVc2VzQWlyPWZhbHNlIiwgKkZUTF9PUFRJT05TKQotICAgICAgICBydW4o
Indhc20tYWlyIiwgIi0tdXNlV2FzbUxMSW50PWZhbHNlIiwgKkZUTF9PUFRJT05TKQorICAgICAg
ICBydW4oIndhc20tYWlyIiwgIi0tdXNlV2FzbUxMSW50PWZhbHNlIiwgIi0tdXNlUmFuZG9taXpp
bmdFeGVjdXRhYmxlSXNsYW5kQWxsb2NhdGlvbj10cnVlIiwgKkZUTF9PUFRJT05TKQogICAgICAg
ICBydW4oIndhc20tY29sbGVjdC1jb250aW51b3VzbHkiLCAiLS1jb2xsZWN0Q29udGludW91c2x5
PXRydWUiLCAqRlRMX09QVElPTlMpIGlmIHNob3VsZENvbGxlY3RDb250aW51b3VzbHk/CiAgICAg
ZW5kCiBlbmQKQEAgLTExODAsMTAgKzEyMDIsMTAgQEAgZGVmIHJ1bldlYkFzc2VtYmx5U3BlY1Rl
c3QobW9kZSkKICAgICBydW5XaXRoT3V0cHV0SGFuZGxlcigiZGVmYXVsdC13YXNtIiwgbm9pc3lP
dXRwdXRIYW5kbGVyLCAiLi4vc3BlYy1oYXJuZXNzLmpzIiwgKkZUTF9PUFRJT05TKQogICAgIGlm
ICRtb2RlICE9ICJxdWljayIKICAgICAgIHJ1bldpdGhPdXRwdXRIYW5kbGVyKCJ3YXNtLW5vLWNq
aXQteWVzLXRscy1jb250ZXh0Iiwgbm9pc3lPdXRwdXRIYW5kbGVyLCAiLi4vc3BlYy1oYXJuZXNz
LmpzIiwgICItLXVzZUZhc3RUTFNGb3JXYXNtQ29udGV4dD10cnVlIiwgKihGVExfT1BUSU9OUyAr
IE5PX0NKSVRfT1BUSU9OUykpCi0gICAgICBydW5XaXRoT3V0cHV0SGFuZGxlcigid2FzbS1lYWdl
ci1qZXR0aXNvbiIsIG5vaXN5T3V0cHV0SGFuZGxlciwgIi4uL3NwZWMtaGFybmVzcy5qcyIsICIt
LWZvcmNlQ29kZUJsb2NrVG9KZXR0aXNvbkR1ZVRvT2xkQWdlPXRydWUiLCAqRlRMX09QVElPTlMp
CisgICAgICBydW5XaXRoT3V0cHV0SGFuZGxlcigid2FzbS1lYWdlci1qZXR0aXNvbiIsIG5vaXN5
T3V0cHV0SGFuZGxlciwgIi4uL3NwZWMtaGFybmVzcy5qcyIsICItLWZvcmNlQ29kZUJsb2NrVG9K
ZXR0aXNvbkR1ZVRvT2xkQWdlPXRydWUiLCAiLS11c2VSYW5kb21pemluZ0V4ZWN1dGFibGVJc2xh
bmRBbGxvY2F0aW9uPXRydWUiLCAqRlRMX09QVElPTlMpCiAgICAgICBydW5XaXRoT3V0cHV0SGFu
ZGxlcigid2FzbS1uby10bHMtY29udGV4dCIsIG5vaXN5T3V0cHV0SGFuZGxlciwgIi4uL3NwZWMt
aGFybmVzcy5qcyIsICItLXVzZUZhc3RUTFNGb3JXYXNtQ29udGV4dD1mYWxzZSIsICpGVExfT1BU
SU9OUykKICAgICAgIHJ1bldpdGhPdXRwdXRIYW5kbGVyKCJ3YXNtLWIzIiwgbm9pc3lPdXRwdXRI
YW5kbGVyLCAiLi4vc3BlYy1oYXJuZXNzLmpzIiwgIi0tdXNlV2FzbUxMSW50PWZhbHNlIiwgIi0t
d2FzbUJCUVVzZXNBaXI9ZmFsc2UiLCAqRlRMX09QVElPTlMpCi0gICAgICBydW5XaXRoT3V0cHV0
SGFuZGxlcigid2FzbS1haXIiLCBub2lzeU91dHB1dEhhbmRsZXIsICIuLi9zcGVjLWhhcm5lc3Mu
anMiLCAiLS11c2VXYXNtTExJbnQ9ZmFsc2UiLCAqRlRMX09QVElPTlMpCisgICAgICBydW5XaXRo
T3V0cHV0SGFuZGxlcigid2FzbS1haXIiLCBub2lzeU91dHB1dEhhbmRsZXIsICIuLi9zcGVjLWhh
cm5lc3MuanMiLCAiLS11c2VXYXNtTExJbnQ9ZmFsc2UiLCAiLS11c2VSYW5kb21pemluZ0V4ZWN1
dGFibGVJc2xhbmRBbGxvY2F0aW9uPXRydWUiLCAqRlRMX09QVElPTlMpCiAgICAgICBydW5XaXRo
T3V0cHV0SGFuZGxlcigid2FzbS1jb2xsZWN0LWNvbnRpbnVvdXNseSIsIG5vaXN5T3V0cHV0SGFu
ZGxlciwgIi4uL3NwZWMtaGFybmVzcy5qcyIsICItLWNvbGxlY3RDb250aW51b3VzbHk9dHJ1ZSIs
ICpGVExfT1BUSU9OUykgaWYgc2hvdWxkQ29sbGVjdENvbnRpbnVvdXNseT8KICAgICBlbmQKIGVu
ZApAQCAtMTM1MiwxNyArMTM3NCwyMSBAQCBkZWYgbm9Ob0xMSW50UnVuTGF5b3V0VGVzdAogICAg
IGVuZAogZW5kCiAKLWRlZiBwcmVwYXJlRXh0cmFSZWxhdGl2ZUZpbGVzKGV4dHJhRmlsZXMsIGRl
c3RpbmF0aW9uKQorZGVmIHByZXBhcmVFeHRyYVJlbGF0aXZlRmlsZXNXaXRoQmFzZURpcmVjdG9y
eShleHRyYUZpbGVzLCBkZXN0aW5hdGlvbiwgYmFzZURpcmVjdG9yeSkKICAgICBEaXIuY2hkaXIo
JG91dHB1dERpcikgewogICAgICAgICBleHRyYUZpbGVzLmVhY2ggewogICAgICAgICAgICAgfCBm
aWxlIHwKICAgICAgICAgICAgIGRlc3QgPSBkZXN0aW5hdGlvbiArIGZpbGUKICAgICAgICAgICAg
IEZpbGVVdGlscy5ta2Rpcl9wKGRlc3QuZGlybmFtZSkKLSAgICAgICAgICAgIEZpbGVVdGlscy5j
cCAkZXh0cmFGaWxlc0Jhc2VEaXIgKyBmaWxlLCBkZXN0CisgICAgICAgICAgICBGaWxlVXRpbHMu
Y3AgYmFzZURpcmVjdG9yeSArIGZpbGUsIGRlc3QKICAgICAgICAgfQogICAgIH0KIGVuZAogCitk
ZWYgcHJlcGFyZUV4dHJhUmVsYXRpdmVGaWxlcyhleHRyYUZpbGVzLCBkZXN0aW5hdGlvbikKKyAg
ICBwcmVwYXJlRXh0cmFSZWxhdGl2ZUZpbGVzV2l0aEJhc2VEaXJlY3RvcnkoZXh0cmFGaWxlcywg
ZGVzdGluYXRpb24sICRleHRyYUZpbGVzQmFzZURpcikKK2VuZAorCiBkZWYgYmFzZURpckZvckNv
bGxlY3Rpb24oY29sbGVjdGlvbk5hbWUpCiAgICAgUGF0aG5hbWUoIi50ZXN0cyIpICsgY29sbGVj
dGlvbk5hbWUKIGVuZApJbmRleDogVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XVEYvTWV0YUFs
bG9jYXRvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XVEYv
TWV0YUFsbG9jYXRvci5jcHAJKHJldmlzaW9uIDI1ODM1MCkKKysrIFRvb2xzL1Rlc3RXZWJLaXRB
UEkvVGVzdHMvV1RGL01ldGFBbGxvY2F0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01Miw3ICs1
Miw3IEBAIHB1YmxpYzoKICAgICBjbGFzcyBTaW1wbGVUZXN0QWxsb2NhdG9yOiBwdWJsaWMgTWV0
YUFsbG9jYXRvciB7CiAgICAgcHVibGljOgogICAgICAgICBTaW1wbGVUZXN0QWxsb2NhdG9yKE1l
dGFBbGxvY2F0b3JUZXN0KiBwYXJlbnQpCi0gICAgICAgICAgICA6IE1ldGFBbGxvY2F0b3IoMzIp
CisgICAgICAgICAgICA6IE1ldGFBbGxvY2F0b3IoMzIsIG1fbG9jaykKICAgICAgICAgICAgICwg
bV9wYXJlbnQocGFyZW50KQogICAgICAgICB7CiAgICAgICAgICAgICBhZGRGcmVzaEZyZWVTcGFj
ZShyZWludGVycHJldF9jYXN0PHZvaWQqPihiYXNlUGFnZSAqIHBhZ2VTaXplKCkpLCBkZWZhdWx0
UGFnZXNJbkhlYXAgKiBwYWdlU2l6ZSgpKTsKQEAgLTEyOSw2ICsxMjksNyBAQCBwdWJsaWM6CiAg
ICAgICAgIH0KICAgICAgICAgCiAgICAgcHJpdmF0ZToKKyAgICAgICAgTG9jayBtX2xvY2s7CiAg
ICAgICAgIE1ldGFBbGxvY2F0b3JUZXN0KiBtX3BhcmVudDsKICAgICB9OwogCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>393413</attachid>
            <date>2020-03-12 14:28:08 -0700</date>
            <delta_ts>2020-03-12 14:37:34 -0700</delta_ts>
            <desc>patch</desc>
            <filename>c-backup.diff</filename>
            <type>text/plain</type>
            <size>119643</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IEpTVGVzdHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEpTVGVzdHMvQ2hhbmdlTG9n
CShyZXZpc2lvbiAyNTgzNTApCisrKyBKU1Rlc3RzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpA
QCAtMSwzICsxLDE0IEBACisyMDIwLTAzLTEyICBTYWFtIEJhcmF0aSAgPHNiYXJhdGlAYXBwbGUu
Y29tPgorCisgICAgICAgIEltcGxlbWVudCAxR0Igb2YgZXhlY3V0YWJsZSBtZW1vcnkgb24gYXJt
NjQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIwODQ5
MAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFJ1biBK
ZXRTdHJlYW0yIHdhc20gdGVzdHMuCisKKyAgICAgICAgKiB3YXNtLnlhbWw6CisKIDIwMjAtMDMt
MTEgIEtlaXRoIE1pbGxlciAgPGtlaXRoX21pbGxlckBhcHBsZS5jb20+CiAKICAgICAgICAgVGVz
dDI2Mi1ydW5uZXIgc2hvdWxkIGFsd2F5cyBjb25zaWRlciBjcmFzaGVzIGFzIG5ldyBmYWlsdXJl
cwpJbmRleDogSlNUZXN0cy93YXNtLnlhbWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSlNUZXN0cy93YXNtLnlh
bWwJKHJldmlzaW9uIDI1ODM1MCkKKysrIEpTVGVzdHMvd2FzbS55YW1sCSh3b3JraW5nIGNvcHkp
CkBAIC0yMzEsMyArMjMxLDYgQEAKIC0gcGF0aDogd2FzbS9tb2R1bGVzL3J1bi1mcm9tLXdhc20u
d2FzbQogICBjbWQ6IHJ1bldlYkFzc2VtYmx5CiAKKy0gcGF0aDogLi4vUGVyZm9ybWFuY2VUZXN0
cy9KZXRTdHJlYW0yL3dhc20tY2xpLmpzCisgIGNtZDogcnVuV2ViQXNzZW1ibHlKZXRTdHJlYW0y
IHVubGVzcyBwYXJzZVJ1bkNvbW1hbmRzCisKSW5kZXg6IFBlcmZvcm1hbmNlVGVzdHMvQ2hhbmdl
TG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFBlcmZvcm1hbmNlVGVzdHMvQ2hhbmdlTG9nCShyZXZpc2lvbiAy
NTgzNTApCisrKyBQZXJmb3JtYW5jZVRlc3RzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAt
MSwzICsxLDI0IEBACisyMDIwLTAzLTEyICBTYWFtIEJhcmF0aSAgPHNiYXJhdGlAYXBwbGUuY29t
PgorCisgICAgICAgIEltcGxlbWVudCAxR0Igb2YgZXhlY3V0YWJsZSBtZW1vcnkgb24gYXJtNjQK
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIwODQ5MAor
CisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogSmV0U3Ry
ZWFtMi9KZXRTdHJlYW1Ecml2ZXIuanM6CisgICAgICAgIChEcml2ZXIucHJvdG90eXBlLmR1bXBK
U09OUmVzdWx0c0lmTmVlZGVkKToKKyAgICAgICAgKERlZmF1bHRCZW5jaG1hcmsucHJvdG90eXBl
LnVwZGF0ZVVJQWZ0ZXJSdW4pOgorICAgICAgICAoRGVmYXVsdEJlbmNobWFyayk6CisgICAgICAg
IChXU0xCZW5jaG1hcmsucHJvdG90eXBlLnVwZGF0ZVVJQWZ0ZXJSdW4pOgorICAgICAgICAoV1NM
QmVuY2htYXJrKToKKyAgICAgICAgKFdhc21CZW5jaG1hcmsucHJvdG90eXBlLnVwZGF0ZVVJQWZ0
ZXJSdW4pOgorICAgICAgICAoV2FzbUJlbmNobWFyayk6CisgICAgICAgIChEcml2ZXIuYXN5bmMg
ZmV0Y2hSZXNvdXJjZXMuc3RhdHVzRWxlbWVudC5pbm5lckhUTUwuYS5ocmVmLnN0cmluZ19hcHBl
YXJlZF9oZXJlKToKKyAgICAgICAgKERyaXZlci5wcm90b3R5cGUuYXN5bmMgZmV0Y2hSZXNvdXJj
ZXMpOgorICAgICAgICAqIEpldFN0cmVhbTIvd2FzbS1jbGkuanM6IEFkZGVkLgorICAgICAgICAo
Y29uc29sZS5sb2cpOgorICAgICAgICAoYXN5bmMgcnVuSmV0U3RyZWFtKToKKwogMjAyMC0wMi0x
NyAgRG9uIE9sbXN0ZWFkICA8ZG9uLm9sbXN0ZWFkQHNvbnkuY29tPgogCiAgICAgICAgIFtDTWFr
ZV0gVXNlIGJ1aWx0aW4gdGFyZ2V0cwpJbmRleDogUGVyZm9ybWFuY2VUZXN0cy9KZXRTdHJlYW0y
L0pldFN0cmVhbURyaXZlci5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBQZXJmb3JtYW5jZVRlc3RzL0pldFN0
cmVhbTIvSmV0U3RyZWFtRHJpdmVyLmpzCShyZXZpc2lvbiAyNTgzNTApCisrKyBQZXJmb3JtYW5j
ZVRlc3RzL0pldFN0cmVhbTIvSmV0U3RyZWFtRHJpdmVyLmpzCSh3b3JraW5nIGNvcHkpCkBAIC00
MDksOSArNDA5LDkgQEAgY2xhc3MgRHJpdmVyIHsKICAgICBkdW1wSlNPTlJlc3VsdHNJZk5lZWRl
ZCgpCiAgICAgewogICAgICAgICBpZiAoZHVtcEpTT05SZXN1bHRzKSB7Ci0gICAgICAgICAgICBw
cmludCgiXG4iKTsKLSAgICAgICAgICAgIHByaW50KHRoaXMucmVzdWx0c0pTT04oKSk7Ci0gICAg
ICAgICAgICBwcmludCgiXG4iKTsKKyAgICAgICAgICAgIGNvbnNvbGUubG9nKCJcbiIpOworICAg
ICAgICAgICAgY29uc29sZS5sb2codGhpcy5yZXN1bHRzSlNPTigpKTsKKyAgICAgICAgICAgIGNv
bnNvbGUubG9nKCJcbiIpOwogICAgICAgICB9CiAgICAgfQogCkBAIC03MjUsMTUgKzcyNSwxNSBA
QCBjbGFzcyBEZWZhdWx0QmVuY2htYXJrIGV4dGVuZHMgQmVuY2htYXJrCiAgICAgICAgICAgICBy
ZXR1cm47CiAgICAgICAgIH0KIAotICAgICAgICBwcmludCgiICAgIFN0YXJ0dXA6IiwgdWlGcmll
bmRseU51bWJlcih0aGlzLmZpcnN0SXRlcmF0aW9uKSk7Ci0gICAgICAgIHByaW50KCIgICAgV29y
c3QgQ2FzZToiLCB1aUZyaWVuZGx5TnVtYmVyKHRoaXMud29yc3Q0KSk7Ci0gICAgICAgIHByaW50
KCIgICAgQXZlcmFnZToiLCB1aUZyaWVuZGx5TnVtYmVyKHRoaXMuYXZlcmFnZSkpOwotICAgICAg
ICBwcmludCgiICAgIFNjb3JlOiIsIHVpRnJpZW5kbHlOdW1iZXIodGhpcy5zY29yZSkpOworICAg
ICAgICBjb25zb2xlLmxvZygiICAgIFN0YXJ0dXA6IiwgdWlGcmllbmRseU51bWJlcih0aGlzLmZp
cnN0SXRlcmF0aW9uKSk7CisgICAgICAgIGNvbnNvbGUubG9nKCIgICAgV29yc3QgQ2FzZToiLCB1
aUZyaWVuZGx5TnVtYmVyKHRoaXMud29yc3Q0KSk7CisgICAgICAgIGNvbnNvbGUubG9nKCIgICAg
QXZlcmFnZToiLCB1aUZyaWVuZGx5TnVtYmVyKHRoaXMuYXZlcmFnZSkpOworICAgICAgICBjb25z
b2xlLmxvZygiICAgIFNjb3JlOiIsIHVpRnJpZW5kbHlOdW1iZXIodGhpcy5zY29yZSkpOwogICAg
ICAgICBpZiAoUkFNaWZpY2F0aW9uKSB7Ci0gICAgICAgICAgICBwcmludCgiICAgIEN1cnJlbnQg
Rm9vdHByaW50OiIsIHVpRnJpZW5kbHlOdW1iZXIodGhpcy5jdXJyZW50Rm9vdHByaW50KSk7Ci0g
ICAgICAgICAgICBwcmludCgiICAgIFBlYWsgRm9vdHByaW50OiIsIHVpRnJpZW5kbHlOdW1iZXIo
dGhpcy5wZWFrRm9vdHByaW50KSk7CisgICAgICAgICAgICBjb25zb2xlLmxvZygiICAgIEN1cnJl
bnQgRm9vdHByaW50OiIsIHVpRnJpZW5kbHlOdW1iZXIodGhpcy5jdXJyZW50Rm9vdHByaW50KSk7
CisgICAgICAgICAgICBjb25zb2xlLmxvZygiICAgIFBlYWsgRm9vdHByaW50OiIsIHVpRnJpZW5k
bHlOdW1iZXIodGhpcy5wZWFrRm9vdHByaW50KSk7CiAgICAgICAgIH0KLSAgICAgICAgcHJpbnQo
IiAgICBXYWxsIHRpbWU6IiwgdWlGcmllbmRseUR1cmF0aW9uKG5ldyBEYXRlKHRoaXMuZW5kVGlt
ZSAtIHRoaXMuc3RhcnRUaW1lKSkpOworICAgICAgICBjb25zb2xlLmxvZygiICAgIFdhbGwgdGlt
ZToiLCB1aUZyaWVuZGx5RHVyYXRpb24obmV3IERhdGUodGhpcy5lbmRUaW1lIC0gdGhpcy5zdGFy
dFRpbWUpKSk7CiAgICAgfQogfQogCkBAIC04MTksMTQgKzgxOSwxNCBAQCBjbGFzcyBXU0xCZW5j
aG1hcmsgZXh0ZW5kcyBCZW5jaG1hcmsgewogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9
CiAKLSAgICAgICAgcHJpbnQoIiAgICBTdGRsaWI6IiwgdWlGcmllbmRseU51bWJlcih0aGlzLnN0
ZGxpYikpOwotICAgICAgICBwcmludCgiICAgIFRlc3RzOiIsIHVpRnJpZW5kbHlOdW1iZXIodGhp
cy5tYWluUnVuKSk7Ci0gICAgICAgIHByaW50KCIgICAgU2NvcmU6IiwgdWlGcmllbmRseU51bWJl
cih0aGlzLnNjb3JlKSk7CisgICAgICAgIGNvbnNvbGUubG9nKCIgICAgU3RkbGliOiIsIHVpRnJp
ZW5kbHlOdW1iZXIodGhpcy5zdGRsaWIpKTsKKyAgICAgICAgY29uc29sZS5sb2coIiAgICBUZXN0
czoiLCB1aUZyaWVuZGx5TnVtYmVyKHRoaXMubWFpblJ1bikpOworICAgICAgICBjb25zb2xlLmxv
ZygiICAgIFNjb3JlOiIsIHVpRnJpZW5kbHlOdW1iZXIodGhpcy5zY29yZSkpOwogICAgICAgICBp
ZiAoUkFNaWZpY2F0aW9uKSB7Ci0gICAgICAgICAgICBwcmludCgiICAgIEN1cnJlbnQgRm9vdHBy
aW50OiIsIHVpRnJpZW5kbHlOdW1iZXIodGhpcy5jdXJyZW50Rm9vdHByaW50KSk7Ci0gICAgICAg
ICAgICBwcmludCgiICAgIFBlYWsgRm9vdHByaW50OiIsIHVpRnJpZW5kbHlOdW1iZXIodGhpcy5w
ZWFrRm9vdHByaW50KSk7CisgICAgICAgICAgICBjb25zb2xlLmxvZygiICAgIEN1cnJlbnQgRm9v
dHByaW50OiIsIHVpRnJpZW5kbHlOdW1iZXIodGhpcy5jdXJyZW50Rm9vdHByaW50KSk7CisgICAg
ICAgICAgICBjb25zb2xlLmxvZygiICAgIFBlYWsgRm9vdHByaW50OiIsIHVpRnJpZW5kbHlOdW1i
ZXIodGhpcy5wZWFrRm9vdHByaW50KSk7CiAgICAgICAgIH0KLSAgICAgICAgcHJpbnQoIiAgICBX
YWxsIHRpbWU6IiwgdWlGcmllbmRseUR1cmF0aW9uKG5ldyBEYXRlKHRoaXMuZW5kVGltZSAtIHRo
aXMuc3RhcnRUaW1lKSkpOworICAgICAgICBjb25zb2xlLmxvZygiICAgIFdhbGwgdGltZToiLCB1
aUZyaWVuZGx5RHVyYXRpb24obmV3IERhdGUodGhpcy5lbmRUaW1lIC0gdGhpcy5zdGFydFRpbWUp
KSk7CiAgICAgfQogfTsKIApAQCAtOTc1LDEzICs5NzUsMTMgQEAgY2xhc3MgV2FzbUJlbmNobWFy
ayBleHRlbmRzIEJlbmNobWFyayB7CiAgICAgICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJ
ZCh0aGlzLnNjb3JlSUQpLmlubmVySFRNTCA9IHVpRnJpZW5kbHlOdW1iZXIodGhpcy5zY29yZSk7
CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KLSAgICAgICAgcHJpbnQoIiAgICBTdGFy
dHVwOiIsIHVpRnJpZW5kbHlOdW1iZXIodGhpcy5zdGFydHVwVGltZSkpOwotICAgICAgICBwcmlu
dCgiICAgIFJ1biB0aW1lOiIsIHVpRnJpZW5kbHlOdW1iZXIodGhpcy5ydW5UaW1lKSk7CisgICAg
ICAgIGNvbnNvbGUubG9nKCIgICAgU3RhcnR1cDoiLCB1aUZyaWVuZGx5TnVtYmVyKHRoaXMuc3Rh
cnR1cFRpbWUpKTsKKyAgICAgICAgY29uc29sZS5sb2coIiAgICBSdW4gdGltZToiLCB1aUZyaWVu
ZGx5TnVtYmVyKHRoaXMucnVuVGltZSkpOwogICAgICAgICBpZiAoUkFNaWZpY2F0aW9uKSB7Ci0g
ICAgICAgICAgICBwcmludCgiICAgIEN1cnJlbnQgRm9vdHByaW50OiIsIHVpRnJpZW5kbHlOdW1i
ZXIodGhpcy5jdXJyZW50Rm9vdHByaW50KSk7Ci0gICAgICAgICAgICBwcmludCgiICAgIFBlYWsg
Rm9vdHByaW50OiIsIHVpRnJpZW5kbHlOdW1iZXIodGhpcy5wZWFrRm9vdHByaW50KSk7CisgICAg
ICAgICAgICBjb25zb2xlLmxvZygiICAgIEN1cnJlbnQgRm9vdHByaW50OiIsIHVpRnJpZW5kbHlO
dW1iZXIodGhpcy5jdXJyZW50Rm9vdHByaW50KSk7CisgICAgICAgICAgICBjb25zb2xlLmxvZygi
ICAgIFBlYWsgRm9vdHByaW50OiIsIHVpRnJpZW5kbHlOdW1iZXIodGhpcy5wZWFrRm9vdHByaW50
KSk7CiAgICAgICAgIH0KLSAgICAgICAgcHJpbnQoIiAgICBTY29yZToiLCB1aUZyaWVuZGx5TnVt
YmVyKHRoaXMuc2NvcmUpKTsKKyAgICAgICAgY29uc29sZS5sb2coIiAgICBTY29yZToiLCB1aUZy
aWVuZGx5TnVtYmVyKHRoaXMuc2NvcmUpKTsKICAgICB9CiB9OwogCkluZGV4OiBQZXJmb3JtYW5j
ZVRlc3RzL0pldFN0cmVhbTIvd2FzbS1jbGkuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gUGVyZm9ybWFuY2VU
ZXN0cy9KZXRTdHJlYW0yL3dhc20tY2xpLmpzCShub25leGlzdGVudCkKKysrIFBlcmZvcm1hbmNl
VGVzdHMvSmV0U3RyZWFtMi93YXNtLWNsaS5qcwkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQ2
IEBACisKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisg
KiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICog
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyovCisKK2NvbnN0IGlzSW5Ccm93c2VyID0gZmFsc2U7Citjb25zb2xlID0g
eworICAgIGxvZzogKCkgPT4geyB9Cit9CisKK3Rlc3RMaXN0ID0gWyJIYXNoU2V0LXdhc20iLCAi
dHNmLXdhc20iLCAicXVpY2tzb3J0LXdhc20iLCAiZ2NjLWxvb3BzLXdhc20iLCAicmljaGFyZHMt
d2FzbSJdOworCitSQU1pZmljYXRpb24gPSBmYWxzZTsKKworbG9hZCgiLi9KZXRTdHJlYW1Ecml2
ZXIuanMiKTsKKworYXN5bmMgZnVuY3Rpb24gcnVuSmV0U3RyZWFtKCkgeworICAgIHRyeSB7Cisg
ICAgICAgIGF3YWl0IEpldFN0cmVhbS5pbml0aWFsaXplKCk7CisgICAgICAgIEpldFN0cmVhbS5z
dGFydCgpOworICAgIH0gY2F0Y2ggKGUpIHsKKyAgICAgICAgdGhyb3cgZTsKKyAgICB9Cit9City
dW5KZXRTdHJlYW0oKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjU4
MzUwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpA
QCAtMSwzICsxLDEwNCBAQAorMjAyMC0wMy0xMiAgU2FhbSBCYXJhdGkgIDxzYmFyYXRpQGFwcGxl
LmNvbT4KKworICAgICAgICBJbXBsZW1lbnQgMUdCIG9mIGV4ZWN1dGFibGUgbWVtb3J5IG9uIGFy
bTY0CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMDg0
OTAKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUaGlz
IHBhdGNoIGltcGxlbWVudHMgdGhlIDFHQiBleGVjdXRhYmxlIG1lbW9yeSBzcGFjZSBvbiBhcm02
NC4gVG8gbWFrZSB0aGlzCisgICAgICAgIHdvcmssIHdlIGltcGxlbWVudCBqdW1wcyBsYXJnZXIg
dGhhbiArLy0xMjhNQiB0byB1c2UganVtcCBpc2xhbmRzLiBKdW1wIGlzbGFuZHMKKyAgICAgICAg
d29yayBieSBzcGxpdHRpbmcgdXAgdGhlIH4xR0IgcmVnaW9uIGludG8gOSAxMTJNQiBjaHVua3Mg
KDEwMDggTUIgdG90YWwpLiBFYWNoCisgICAgICAgIGNodW5rIGlzIHNwbGl0IGludG8gdHdvOiA5
Nk1CIG9mIGV4ZWN1dGFibGUgcmVnaW9uLCBhbmQgMTZNQiBvZiBqdW1wIGlzbGFuZCByZWdpb24u
CisgICAgICAgIFdpdGggdGhpcyBzcGxpdCwgYW55IGp1bXAgaW5zaWRlIGEganVtcCBpc2xhbmQg
cmVnaW9uIGNhbiBnZXQgdG8gdGhlIGFkamFjZW50CisgICAgICAgIGlzbGFuZCAoZm9yd2FyZHMg
b3IgYmFja3dhcmRzKSBpbiBhIHNpbmdsZSArLy0xMjhNQiBqdW1wLiBXaGVuIGxpbmtpbmcgYSBq
dW1wCisgICAgICAgIGZyb20gQSB0byBCLCB3aGVyZSB8QSAtIEJ8ID4gMTI4TUIsIHdlIGluc3Rl
YWQgcG9pbnQgdGhlIGp1bXAgdG8gYW4gaXNsYW5kLAorICAgICAgICB3aGVyZSB0aGlzIGlzbGFu
ZCBoYXMgYSBwb3RlbnRpYWwgc2VyaWVzIG9mIGp1bXBzIHRoYXQgZmluYWxseSBsYW5kcyBhdCBC
LgorICAgICAgICAKKyAgICAgICAgVG8gYWxsb2NhdGUgZXhlY3V0YWJsZSBtZW1vcnksIHVzZSBh
IE1ldGFBbGxvY2F0b3IgZm9yIGVhY2ggOTZNQiBjaHVuay4gVG8KKyAgICAgICAgYWxsb2NhdGUg
aXNsYW5kcywgd2UgaGF2ZSBhIGJpdCB2ZWN0b3Igd2UgdXNlIHRvIHRyYWNrIHVzZWQgYW5kIGZy
ZWVkIGlzbGFuZHMuCisgICAgICAgIFdlIG9ubHkgZ3JvdyB0aGlzIGJpdCB2ZWN0b3IgYXMgaXNs
YW5kcyBhcmUgYWxsb2NhdGVkLCBzbyBpdCBmcmVxdWVudGx5CisgICAgICAgIHJlbWFpbnMgZW1w
dHkgb3IgdmVyeSBzbWFsbC4KKyAgICAgICAgCisgICAgICAgIFRoZSBnb2FsIG9mIHRoaXMgcGF0
Y2ggaXMgdG8gaGF2ZSBtaW5pbWFsIHBlcmYgaW1wYWN0IHdoZW4gbm90IHVzaW5nIGlzbGFuZHMs
CisgICAgICAgIHNvIHRoZSBkYXRhIHN0cnVjdHVyZXMgYXJlIGRlc2lnbmVkIHRvIG9ubHkgaW5j
dXIgb3ZlcmhlYWQgd2hlbiBhY3R1YWxseSB1c2luZworICAgICAgICBpc2xhbmRzLiBXZSBleHBl
Y3QgdGhlIHVzZSBvZiBpc2xhbmRzIHRvIGJlIG1pbmltYWwuIFdlIHVzZSBhIHJlZCBibGFjayB0
cmVlCisgICAgICAgIHRvIHRyYWNrIGFsbCBpc2xhbmQgbG9jYXRpb25zLiBUaGlzIGFsbG93cyB1
cyB0byBkZWFsbG9jYXRlIGFsbCBpc2xhbmRzIHdoZW4KKyAgICAgICAgYW4gZXhlY3V0YWJsZSBt
ZW1vcnkgaGFuZGxlIGlzIGZyZWVkLiBUeXBpY2FsbHksIHRoaXMgcmVkIGJsYWNrIHRyZWUgaXMg
ZW1wdHksCisgICAgICAgIHNvIGZyZWVpbmcgYW4gZXhlY3V0YWJsZSBtZW1vcnkgaGFuZGxlIGlu
Y3VycyBubyBleHRyYSBvdmVyaGVhZC4KKyAgICAgICAgCisgICAgICAgIFRvIG1ha2UgaXNsYW5k
cyB3b3JrIGZvciBXYXNtLCB3ZSBub3cgaGF2ZSB0byBsaW5rIHRpZXIgdXAgY29kZSBpbiB0d28g
cGhhc2VzLgorICAgICAgICBQcmV2aW91c2x5LCB3ZSB3b3VsZCBqdXN0IHBhdGNoIGp1bXBzIGNv
bmN1cnJlbnRseSB0byBXYXNtIHRocmVhZHMgcnVubmluZyBhZnRlcgorICAgICAgICByZXNldHRp
bmcgdGhlIGljYWNoZSwga25vd2luZyB0aGF0IHdlIHdvdWxkIGJlIGFibGUgdG8gYXRvbWljYWxs
eSB1cGRhdGUgdGhlIGp1bXAKKyAgICAgICAgaW5zdHJ1Y3Rpb24gdG8gcG9pbnQgdG8gdGhlIG5l
dyBkZXN0aW5hdGlvbi4gSG93ZXZlciwgbm93IHdoZW4gcmVwYXRjaGluZyB0aGVzZQorICAgICAg
ICBqdW1wcyBpbiBhIHdvcmxkIHdpdGgganVtcCBpc2xhbmRzLCB3ZSBtaWdodCBuZWVkIHRvIGFs
bG9jYXRlIGlzbGFuZHMgZGVwZW5kaW5nCisgICAgICAgIG9uIHRoZSBqdW1wIGxvY2F0aW9uIGFu
ZCBpdHMgdGFyZ2V0LiBTbyB3ZSBub3cgYWxsb2NhdGUgYW5kIGNvbGxlY3QgdGhlIHNldCBvZiBp
c2xhbmRzLAorICAgICAgICB0aGVuIHJlc2V0IHRoZSBpY2FjaGUsIHRoZW4gYXRvbWljYWxseSB1
cGRhdGUgdGhlIGJyYW5jaCB0byBwb2ludCB0byB0aGUgZGVzdGluYXRpb24KKyAgICAgICAgKG9y
IGFuIGlzbGFuZCB0aGF0IGp1bXBzIHRvIHRoZSBkZXN0aW5hdGlvbikuIE9uZSBpbXBvcnRhbnQg
aW1wbGVtZW50YXRpb24gZGV0YWlsCisgICAgICAgIGhlcmUgaXMgdGhhdCBmb3Igbm9ybWFsIGlz
bGFuZCByZXBhdGNoaW5nLCBpZiB3ZSBoYXZlIGEganVtcCBmcm9tIEEgdG8gQiwgYW5kIGl0Cisg
ICAgICAgIGFsbG9jYXRlcyBhIHNldCBpZiBpc2xhbmRzIFgsIHdlIHVzdWFsbHkgY2FuIGRlYWxs
b2NhdGUgWCB3aGVuIHJlcGF0Y2hpbmcgQSB0byBnbyB0byBCJy4KKyAgICAgICAgVGhpcyBpcyBi
ZWNhdXNlIHRoZSB0eXBpY2FsIHJlcGF0Y2ggc2NlbmFyaW8gaW4gSlMgaGFwcGVucyB3aGVuIHRo
YXQgY29kZSBpcyBub3QgYmVpbmcKKyAgICAgICAgZXhlY3V0ZWQuIEZvciBXYXNtIHRob3VnaCwg
dGhvc2UgaXNsYW5kcyBYIG1pZ2h0IGJlIHJ1bm5pbmcgd2hpbGUgd2Ugd2FudCB0byByZXBhdGNo
CisgICAgICAgIEEgdG8gZ28gdG8gQicuIFNvIGluc3RlYWQgb2YgZGVhbGxvY2F0aW5nIFgsIHdl
IGp1c3QgYXBwZW5kIHRvIFggaW4gdGhpcyBzY2VuYXJpbywgYW5kCisgICAgICAgIHdlIGZyZWUg
dGhlIG5ldyBzZXQgWCcgd2hlbiB0aGUgY29kZSBpdHNlbGYgaXMgZnJlZWQuCisgICAgICAgIAor
ICAgICAgICAoVGhpcyBwYXRjaCBhbHNvIGZpeGVzIGEgYnVnIGluIHRoZSBXYXNtIExMSW50IHRv
IEJCUSB0aWVyIHVwIHRoYXQgSSBzcG90dGVkLAorICAgICAgICB3aGVyZSB3ZSB3b3VsZCBwdWJs
aXNoIGEgTExJbnQgY2FsbGVlJ3MgQkJRIHJlcGxhY2VtZW50IGJlZm9yZSB3ZSBmaW5pc2hlZAor
ICAgICAgICBsaW5raW5nIHRoZSBvdXRnb2luZyBjYWxscyBvZiB0aGUgQkJRIHJlcGxhY2VtZW50
LikKKyAgICAgICAgCisgICAgICAgIFRoaXMgcGF0Y2ggYWxzbyByZW1vdmVzIHRoZSBvbGQgIkNv
ZGVQcm9maWxpbmciIGNvZGUgdGhhdCBoYXMgYmVlbiB1bnVzZWQgZm9yCisgICAgICAgIGEgbG9u
ZyB0aW1lLgorCisgICAgICAgICogSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvajoKKyAgICAgICAgKiBTb3VyY2VzLnR4dDoKKyAgICAgICAgKiBhc3NlbWJsZXIvQVJNNjRB
c3NlbWJsZXIuaDoKKyAgICAgICAgKEpTQzo6QVJNNjRBc3NlbWJsZXI6OmIpOgorICAgICAgICAo
SlNDOjpBUk02NEFzc2VtYmxlcjo6YmwpOgorICAgICAgICAoSlNDOjpBUk02NEFzc2VtYmxlcjo6
cmVwbGFjZVdpdGhKdW1wKToKKyAgICAgICAgKEpTQzo6QVJNNjRBc3NlbWJsZXI6OnByZXBhcmVG
b3JBdG9taWNSZWxpbmtKdW1wQ29uY3VycmVudGx5KToKKyAgICAgICAgKEpTQzo6QVJNNjRBc3Nl
bWJsZXI6OnByZXBhcmVGb3JBdG9taWNSZWxpbmtDYWxsQ29uY3VycmVudGx5KToKKyAgICAgICAg
KEpTQzo6QVJNNjRBc3NlbWJsZXI6OmNvbXB1dGVKdW1wVHlwZSk6CisgICAgICAgIChKU0M6OkFS
TTY0QXNzZW1ibGVyOjpjYW5FbWl0SnVtcCk6CisgICAgICAgIChKU0M6OkFSTTY0QXNzZW1ibGVy
OjpsaW5rSnVtcE9yQ2FsbCk6CisgICAgICAgIChKU0M6OkFSTTY0QXNzZW1ibGVyOjpsaW5rQ29t
cGFyZUFuZEJyYW5jaCk6CisgICAgICAgIChKU0M6OkFSTTY0QXNzZW1ibGVyOjpsaW5rQ29uZGl0
aW9uYWxCcmFuY2gpOgorICAgICAgICAoSlNDOjpBUk02NEFzc2VtYmxlcjo6bGlua1Rlc3RBbmRC
cmFuY2gpOgorICAgICAgICAqIGFzc2VtYmxlci9BYnN0cmFjdE1hY3JvQXNzZW1ibGVyLmg6Cisg
ICAgICAgIChKU0M6OkFic3RyYWN0TWFjcm9Bc3NlbWJsZXI6OnByZXBhcmVGb3JBdG9taWNSZXBh
dGNoTmVhckNhbGxDb25jdXJyZW50bHkpOgorICAgICAgICAqIGFzc2VtYmxlci9MaW5rQnVmZmVy
LmNwcDoKKyAgICAgICAgKEpTQzo6TGlua0J1ZmZlcjo6Y29weUNvbXBhY3RBbmRMaW5rQ29kZSk6
CisgICAgICAgIChKU0M6OkxpbmtCdWZmZXI6OmxpbmtDb2RlKToKKyAgICAgICAgKEpTQzo6TGlu
a0J1ZmZlcjo6YWxsb2NhdGUpOgorICAgICAgICAqIGFzc2VtYmxlci9MaW5rQnVmZmVyLmg6Cisg
ICAgICAgIChKU0M6OkxpbmtCdWZmZXI6OkxpbmtCdWZmZXIpOgorICAgICAgICAqIGFzc2VtYmxl
ci9NYWNyb0Fzc2VtYmxlckNvZGVSZWYuaDoKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJD
b2RlUmVmOjpNYWNyb0Fzc2VtYmxlckNvZGVSZWYpOgorICAgICAgICAqIGppdC9FeGVjdXRhYmxl
QWxsb2NhdG9yLmNwcDoKKyAgICAgICAgKEpTQzo6aW5pdGlhbGl6ZUpJVFBhZ2VSZXNlcnZhdGlv
bik6CisgICAgICAgIChKU0M6OkV4ZWN1dGFibGVBbGxvY2F0b3I6OmluaXRpYWxpemVVbmRlcmx5
aW5nQWxsb2NhdG9yKToKKyAgICAgICAgKEpTQzo6RXhlY3V0YWJsZUFsbG9jYXRvcjo6aXNWYWxp
ZCBjb25zdCk6CisgICAgICAgIChKU0M6OkV4ZWN1dGFibGVBbGxvY2F0b3I6OmFsbG9jYXRlKToK
KyAgICAgICAgKEpTQzo6RXhlY3V0YWJsZUFsbG9jYXRvcjo6Z2V0SnVtcElzbGFuZFRvKToKKyAg
ICAgICAgKEpTQzo6RXhlY3V0YWJsZUFsbG9jYXRvcjo6Z2V0SnVtcElzbGFuZFRvQ29uY3VycmVu
dGx5KToKKyAgICAgICAgKEpTQzo6Rml4ZWRWTVBvb2xFeGVjdXRhYmxlQWxsb2NhdG9yOjp+Rml4
ZWRWTVBvb2xFeGVjdXRhYmxlQWxsb2NhdG9yKTogRGVsZXRlZC4KKyAgICAgICAgKiBqaXQvRXhl
Y3V0YWJsZUFsbG9jYXRvci5oOgorICAgICAgICAoSlNDOjpFeGVjdXRhYmxlQWxsb2NhdG9yQmFz
ZTo6YWxsb2NhdGUpOgorICAgICAgICAqIHJ1bnRpbWUvQ29tbW9uU2xvd1BhdGhzLmNwcDoKKyAg
ICAgICAgKiBydW50aW1lL0NvbXBsZXRpb24uY3BwOgorICAgICAgICAoSlNDOjpldmFsdWF0ZSk6
CisgICAgICAgICogcnVudGltZS9KU01vZHVsZUxvYWRlci5jcHA6CisgICAgICAgIChKU0M6Om1v
ZHVsZUxvYWRlclBhcnNlTW9kdWxlKToKKyAgICAgICAgKiBydW50aW1lL09wdGlvbnNMaXN0Lmg6
CisgICAgICAgICogdG9vbHMvQ29kZVByb2ZpbGUuY3BwOiBSZW1vdmVkLgorICAgICAgICAqIHRv
b2xzL0NvZGVQcm9maWxlLmg6IFJlbW92ZWQuCisgICAgICAgICogdG9vbHMvQ29kZVByb2ZpbGlu
Zy5jcHA6IFJlbW92ZWQuCisgICAgICAgICogdG9vbHMvQ29kZVByb2ZpbGluZy5oOiBSZW1vdmVk
LgorICAgICAgICAqIHdhc20vV2FzbUJCUVBsYW4uY3BwOgorICAgICAgICAoSlNDOjpXYXNtOjpC
QlFQbGFuOjp3b3JrKToKKyAgICAgICAgKiB3YXNtL1dhc21PTUdGb3JPU1JFbnRyeVBsYW4uY3Bw
OgorICAgICAgICAoSlNDOjpXYXNtOjpPTUdGb3JPU1JFbnRyeVBsYW46OndvcmspOgorICAgICAg
ICAqIHdhc20vV2FzbU9NR1BsYW4uY3BwOgorICAgICAgICAoSlNDOjpXYXNtOjpPTUdQbGFuOjp3
b3JrKToKKwogMjAyMC0wMy0xMiAgWXVzdWtlIFN1enVraSAgPHlzdXp1a2lAYXBwbGUuY29tPgog
CiAgICAgICAgIFtKU0NdIFVzZSBDYWNoZWFibGVJZGVudGlmaWVyIGluIEJ5VmFsSW5mbwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL1NvdXJjZXMudHh0Cj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9Tb3VyY2VzLnR4dAkocmV2aXNpb24gMjU4MzUwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL1NvdXJjZXMudHh0CSh3b3JraW5nIGNvcHkpCkBAIC05OTUsOCArOTk1
LDYgQEAgcnVudGltZS9XaWRlbmluZ051bWJlclByZWRpY3Rpb25GdXp6ZXJBZwogSlNDQnVpbHRp
bnMuY3BwCiAKIHRvb2xzL0NlbGxMaXN0LmNwcAotdG9vbHMvQ29kZVByb2ZpbGUuY3BwCi10b29s
cy9Db2RlUHJvZmlsaW5nLmNwcAogdG9vbHMvQ29tcGlsZXJUaW1pbmdTY29wZS5jcHAKIHRvb2xz
L0Z1bmN0aW9uT3ZlcnJpZGVzLmNwcAogdG9vbHMvRnVuY3Rpb25XaGl0ZWxpc3QuY3BwCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3Qu
cGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENv
cmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gMjU4MzUwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJ
KHdvcmtpbmcgY29weSkKQEAgLTQwNzEsOCArNDA3MSw2IEBACiAJCTg2MDE2MUUwMEYzQTgzQzEw
MEY4NDcxMCAvKiBNYWNyb0Fzc2VtYmxlclg4Ni5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBNYWNyb0Fzc2VtYmxlclg4Ni5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQk4NjAxNjFFMTBGM0E4M0MxMDBGODQ3MTAgLyogTWFjcm9Bc3NlbWJsZXJYODZfNjQuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTWFjcm9Bc3NlbWJsZXJYODZfNjQuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJODYwMTYxRTIwRjNBODNDMTAwRjg0NzEwIC8qIE1h
Y3JvQXNzZW1ibGVyWDg2Q29tbW9uLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IE1hY3JvQXNzZW1ibGVyWDg2Q29tbW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0J
CTg2MDNDRUYyMTRDNzU0NjQwMEFFNTlFMyAvKiBDb2RlUHJvZmlsaW5nLmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IENvZGVQcm9maWxpbmcuY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwotCQk4NjAzQ0VGMzE0Qzc1NDY0MDBBRTU5RTMgLyogQ29kZVByb2Zp
bGluZy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBDb2RlUHJvZmlsaW5nLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTg2MDRGNEYyMTQzQTZDNDQwMEIyOTVGNSAv
KiBDaGFuZ2VMb2cgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5
cGUgPSB0ZXh0OyBsaW5lRW5kaW5nID0gMDsgcGF0aCA9IENoYW5nZUxvZzsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJODYwNkRERTkxOERBNDRBQjAwQTM4M0QwIC8qIElkZW50aWZpZXJJ
bmxpbmVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IElkZW50aWZpZXJJbmxp
bmVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTg2MTJFNENCMTUyMjkxODQwMEM4
MzZCRSAvKiBNYXRjaFJlc3VsdC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBN
YXRjaFJlc3VsdC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtNDExOCw4ICs0MTE2
LDYgQEAKIAkJODZBREQxNDMwRkRERUE5ODAwMDZGRkNDIC8qIEFSTXY3UmVnaXN0ZXJzLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEFSTXY3UmVnaXN0ZXJzLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTg2QUREMTQ0MEZEREVBOTgwMDA2RUVDMiAvKiBNYWNyb0Fz
c2VtYmxlckFSTXY3LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE1hY3JvQXNz
ZW1ibGVyQVJNdjcuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJODZCNTgyMkMxNEQy
MkY1RjAwQTlDMzA2IC8qIFByb2ZpbGVUcmVlTm9kZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBQcm9maWxlVHJlZU5vZGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
LQkJODZCNTgyMkUxNEQyMzczQjAwQTlDMzA2IC8qIENvZGVQcm9maWxlLmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IENvZGVQcm9maWxlLmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKLQkJODZCNTgyMkYxNEQyMzczQjAwQTlDMzA2IC8qIENvZGVQcm9maWxl
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENvZGVQcm9maWxlLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTg2QjU4MjZBMTREMzVENTEwMEE5QzMwNiAvKiBUaWVy
ZWRNTWFwQXJyYXkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVGllcmVkTU1h
cEFycmF5Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTg2QkY2NDJBMTQ4REIyQjUw
MDRERTM2QSAvKiBJbnRyaW5zaWMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
SW50cmluc2ljLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTg2QzM2RUU5MEVFMTI4
OUQwMEIzREY1OSAvKiBNYWNyb0Fzc2VtYmxlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBNYWNyb0Fzc2VtYmxlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAt
NzY3NywxMCArNzY3Myw2IEBACiAJCQkJRkUxQkQwMUIxRTcyMDAyMTAwMTM0QkM5IC8qIENlbGxM
aXN0LmNwcCAqLywKIAkJCQlGRTFCRDAxQzFFNzIwMDIxMDAxMzRCQzkgLyogQ2VsbExpc3QuaCAq
LywKIAkJCQlGRTFCRDAyMDFFNzIwMjcwMDAxMzRCQzkgLyogQ2VsbFByb2ZpbGUuaCAqLywKLQkJ
CQk4NkI1ODIyRTE0RDIzNzNCMDBBOUMzMDYgLyogQ29kZVByb2ZpbGUuY3BwICovLAotCQkJCTg2
QjU4MjJGMTREMjM3M0IwMEE5QzMwNiAvKiBDb2RlUHJvZmlsZS5oICovLAotCQkJCTg2MDNDRUYy
MTRDNzU0NjQwMEFFNTlFMyAvKiBDb2RlUHJvZmlsaW5nLmNwcCAqLywKLQkJCQk4NjAzQ0VGMzE0
Qzc1NDY0MDBBRTU5RTMgLyogQ29kZVByb2ZpbGluZy5oICovLAogCQkJCTBGNEYxMUU3MjA5QkNE
QTEwMDcwOTY1NCAvKiBDb21waWxlclRpbWluZ1Njb3BlLmNwcCAqLywKIAkJCQkwRjRGMTFFNjIw
OUJDREExMDA3MDk2NTQgLyogQ29tcGlsZXJUaW1pbmdTY29wZS5oICovLAogCQkJCUZFNEJGRjI5
MUFENDc2RTcwMDA4OEY4NyAvKiBGdW5jdGlvbk92ZXJyaWRlcy5jcHAgKi8sCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL0FSTTY0QXNzZW1ibGVyLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9BUk02NEFzc2VtYmxlci5oCShyZXZp
c2lvbiAyNTgzNTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL0FSTTY0QXNz
ZW1ibGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTc4MywxMiArNzgzLDkgQEAgcHVibGljOgogICAg
ICAgICBpbnNuKGRhdGFQcm9jZXNzaW5nMlNvdXJjZShEQVRBU0laRSwgcm0sIERhdGFPcF9BU1JW
LCBybiwgcmQpKTsKICAgICB9CiAKLSAgICBBTFdBWVNfSU5MSU5FIHZvaWQgYihpbnQzMl90IG9m
ZnNldCA9IDApCisgICAgQUxXQVlTX0lOTElORSB2b2lkIGIoKQogICAgIHsKLSAgICAgICAgQVNT
RVJUKCEob2Zmc2V0ICYgMykpOwotICAgICAgICBvZmZzZXQgPj49IDI7Ci0gICAgICAgIEFTU0VS
VChvZmZzZXQgPT0gKG9mZnNldCA8PCA2KSA+PiA2KTsKLSAgICAgICAgaW5zbih1bmNvbmRpdGlv
bmFsQnJhbmNoSW1tZWRpYXRlKGZhbHNlLCBvZmZzZXQpKTsKKyAgICAgICAgaW5zbih1bmNvbmRp
dGlvbmFsQnJhbmNoSW1tZWRpYXRlKGZhbHNlLCAwKSk7CiAgICAgfQogCiAgICAgQUxXQVlTX0lO
TElORSB2b2lkIGJfY29uZChDb25kaXRpb24gY29uZCwgaW50MzJfdCBvZmZzZXQgPSAwKQpAQCAt
ODMxLDExICs4MjgsOSBAQCBwdWJsaWM6CiAgICAgICAgIGluc24obG9naWNhbFNoaWZ0ZWRSZWdp
c3RlcihEQVRBU0laRSwgc2V0RmxhZ3MgPyBMb2dpY2FsT3BfQU5EUyA6IExvZ2ljYWxPcF9BTkQs
IHNoaWZ0LCB0cnVlLCBybSwgYW1vdW50LCBybiwgcmQpKTsKICAgICB9CiAKLSAgICBBTFdBWVNf
SU5MSU5FIHZvaWQgYmwoaW50MzJfdCBvZmZzZXQgPSAwKQorICAgIEFMV0FZU19JTkxJTkUgdm9p
ZCBibCgpCiAgICAgewotICAgICAgICBBU1NFUlQoIShvZmZzZXQgJiAzKSk7Ci0gICAgICAgIG9m
ZnNldCA+Pj0gMjsKLSAgICAgICAgaW5zbih1bmNvbmRpdGlvbmFsQnJhbmNoSW1tZWRpYXRlKHRy
dWUsIG9mZnNldCkpOworICAgICAgICBpbnNuKHVuY29uZGl0aW9uYWxCcmFuY2hJbW1lZGlhdGUo
dHJ1ZSwgMCkpOwogICAgIH0KIAogICAgIEFMV0FZU19JTkxJTkUgdm9pZCBibHIoUmVnaXN0ZXJJ
RCBybikKQEAgLTI1ODIsNiArMjU3NywxMyBAQCBwdWJsaWM6CiAgICAgewogICAgICAgICBpbnRw
dHJfdCBvZmZzZXQgPSAocmVpbnRlcnByZXRfY2FzdDxpbnRwdHJfdD4odG8pIC0gcmVpbnRlcnBy
ZXRfY2FzdDxpbnRwdHJfdD4od2hlcmUpKSA+PiAyOwogICAgICAgICBBU1NFUlQoc3RhdGljX2Nh
c3Q8aW50PihvZmZzZXQpID09IG9mZnNldCk7CisKKyAgICAgICAgaWYgKCFpc0ludDwyNj4ob2Zm
c2V0KSkgeworICAgICAgICAgICAgdG8gPSBFeGVjdXRhYmxlQWxsb2NhdG9yOjpzaW5nbGV0b24o
KS5nZXRKdW1wSXNsYW5kVG8od2hlcmUsIHRvKTsKKyAgICAgICAgICAgIG9mZnNldCA9IChiaXR3
aXNlX2Nhc3Q8aW50cHRyX3Q+KHRvKSAtIGJpdHdpc2VfY2FzdDxpbnRwdHJfdD4od2hlcmUpKSA+
PiAyOworICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoaXNJbnQ8MjY+KG9mZnNldCkpOworICAg
ICAgICB9CisKICAgICAgICAgaW50IGluc24gPSB1bmNvbmRpdGlvbmFsQnJhbmNoSW1tZWRpYXRl
KGZhbHNlLCBzdGF0aWNfY2FzdDxpbnQ+KG9mZnNldCkpOwogICAgICAgICBSRUxFQVNFX0FTU0VS
VChyb3VuZFVwVG9NdWx0aXBsZU9mPGluc3RydWN0aW9uU2l6ZT4od2hlcmUpID09IHdoZXJlKTsK
ICAgICAgICAgcGVyZm9ybUpJVE1lbWNweSh3aGVyZSwgJmluc24sIHNpemVvZihpbnQpKTsKQEAg
LTI3NzEsNiArMjc3MywyNSBAQCBwdWJsaWM6CiAgICAgICAgIHJlbGlua0p1bXBPckNhbGw8QnJh
bmNoVHlwZV9DQUxMPihyZWludGVycHJldF9jYXN0PGludCo+KGZyb20pIC0gMSwgcmVpbnRlcnBy
ZXRfY2FzdDxjb25zdCBpbnQqPihmcm9tKSAtIDEsIHRvKTsKICAgICAgICAgY2FjaGVGbHVzaChy
ZWludGVycHJldF9jYXN0PGludCo+KGZyb20pIC0gMSwgc2l6ZW9mKGludCkpOwogICAgIH0KKwor
I2lmIFVTRShKVU1QX0lTTEFORFMpCisgICAgc3RhdGljIHZvaWQqIHByZXBhcmVGb3JBdG9taWNS
ZWxpbmtKdW1wQ29uY3VycmVudGx5KHZvaWQqIGZyb20sIHZvaWQqIHRvKQorICAgIHsKKyAgICAg
ICAgaW50cHRyX3Qgb2Zmc2V0ID0gKGJpdHdpc2VfY2FzdDxpbnRwdHJfdD4odG8pIC0gYml0d2lz
ZV9jYXN0PGludHB0cl90Pihmcm9tKSkgPj4gMjsKKyAgICAgICAgQVNTRVJUKHN0YXRpY19jYXN0
PGludD4ob2Zmc2V0KSA9PSBvZmZzZXQpOworCisgICAgICAgIGlmIChpc0ludDwyNj4ob2Zmc2V0
KSkKKyAgICAgICAgICAgIHJldHVybiB0bzsKKworICAgICAgICByZXR1cm4gRXhlY3V0YWJsZUFs
bG9jYXRvcjo6c2luZ2xldG9uKCkuZ2V0SnVtcElzbGFuZFRvQ29uY3VycmVudGx5KGZyb20sIHRv
KTsKKyAgICB9CisKKyAgICBzdGF0aWMgdm9pZCogcHJlcGFyZUZvckF0b21pY1JlbGlua0NhbGxD
b25jdXJyZW50bHkodm9pZCogZnJvbSwgdm9pZCogdG8pCisgICAgeworICAgICAgICBmcm9tID0g
c3RhdGljX2Nhc3Q8dm9pZCo+KGJpdHdpc2VfY2FzdDxpbnQqPihmcm9tKSAtIDEpOworICAgICAg
ICByZXR1cm4gcHJlcGFyZUZvckF0b21pY1JlbGlua0p1bXBDb25jdXJyZW50bHkoZnJvbSwgdG8p
OworICAgIH0KKyNlbmRpZgogICAgIAogICAgIHN0YXRpYyB2b2lkIHJlcGF0Y2hDb21wYWN0KHZv
aWQqIHdoZXJlLCBpbnQzMl90IHZhbHVlKQogICAgIHsKQEAgLTI4NzIsNyArMjg5Myw3IEBAIHB1
YmxpYzoKICAgICAgICAgICAgICAgICByZXR1cm4gTGlua0p1bXBDb25kaXRpb25EaXJlY3Q7CiAK
ICAgICAgICAgICAgIHJldHVybiBMaW5rSnVtcENvbmRpdGlvbjsKLSAgICAgICAgICAgIH0KKyAg
ICAgICAgfQogICAgICAgICBjYXNlIEp1bXBDb21wYXJlQW5kQnJhbmNoOiAgewogICAgICAgICAg
ICAgQVNTRVJUKGlzNEJ5dGVBbGlnbmVkKGZyb20pKTsKICAgICAgICAgICAgIEFTU0VSVChpczRC
eXRlQWxpZ25lZCh0bykpOwpAQCAtMjk0NSw2ICsyOTY2LDEyIEBAIHB1YmxpYzoKICAgICAgICAg
fQogICAgIH0KIAorICAgIHN0YXRpYyBBTFdBWVNfSU5MSU5FIGJvb2wgY2FuRW1pdEp1bXAodm9p
ZCogZnJvbSwgdm9pZCogdG8pCisgICAgeworICAgICAgICBpbnRwdHJfdCBkaWZmID0gKGJpdHdp
c2VfY2FzdDxpbnRwdHJfdD4oZnJvbSkgLSBiaXR3aXNlX2Nhc3Q8aW50cHRyX3Q+KHRvKSkgPj4g
MjsKKyAgICAgICAgcmV0dXJuIGlzSW50PDI2PihkaWZmKTsKKyAgICB9CisKIHByb3RlY3RlZDoK
ICAgICB0ZW1wbGF0ZTxEYXRhc2l6ZSBzaXplPgogICAgIHN0YXRpYyBib29sIGNoZWNrTW92ayhp
bnQgaW5zbiwgaW50IF9odywgUmVnaXN0ZXJJRCBfcmQpCkBAIC0yOTk0LDkgKzMwMjEsMTUgQEAg
cHJvdGVjdGVkOgogICAgICAgICBBU1NFUlQoIShyZWludGVycHJldF9jYXN0PGludHB0cl90Pih0
bykgJiAzKSk7CiAgICAgICAgIGFzc2VydElzTm90VGFnZ2VkKHRvKTsKICAgICAgICAgYXNzZXJ0
SXNOb3RUYWdnZWQoZnJvbUluc3RydWN0aW9uKTsKLSAgICAgICAgaW50cHRyX3Qgb2Zmc2V0ID0g
KHJlaW50ZXJwcmV0X2Nhc3Q8aW50cHRyX3Q+KHRvKSAtIHJlaW50ZXJwcmV0X2Nhc3Q8aW50cHRy
X3Q+KGZyb21JbnN0cnVjdGlvbikpID4+IDI7CisgICAgICAgIGludHB0cl90IG9mZnNldCA9IChi
aXR3aXNlX2Nhc3Q8aW50cHRyX3Q+KHRvKSAtIGJpdHdpc2VfY2FzdDxpbnRwdHJfdD4oZnJvbUlu
c3RydWN0aW9uKSkgPj4gMjsKICAgICAgICAgQVNTRVJUKHN0YXRpY19jYXN0PGludD4ob2Zmc2V0
KSA9PSBvZmZzZXQpOwogCisgICAgICAgIGlmICghaXNJbnQ8MjY+KG9mZnNldCkpIHsKKyAgICAg
ICAgICAgIHRvID0gRXhlY3V0YWJsZUFsbG9jYXRvcjo6c2luZ2xldG9uKCkuZ2V0SnVtcElzbGFu
ZFRvKGJpdHdpc2VfY2FzdDx2b2lkKj4oZnJvbUluc3RydWN0aW9uKSwgdG8pOworICAgICAgICAg
ICAgb2Zmc2V0ID0gKGJpdHdpc2VfY2FzdDxpbnRwdHJfdD4odG8pIC0gYml0d2lzZV9jYXN0PGlu
dHB0cl90Pihmcm9tSW5zdHJ1Y3Rpb24pKSA+PiAyOworICAgICAgICAgICAgUkVMRUFTRV9BU1NF
UlQoaXNJbnQ8MjY+KG9mZnNldCkpOworICAgICAgICB9CisKICAgICAgICAgaW50IGluc24gPSB1
bmNvbmRpdGlvbmFsQnJhbmNoSW1tZWRpYXRlKGlzQ2FsbCwgc3RhdGljX2Nhc3Q8aW50PihvZmZz
ZXQpKTsKICAgICAgICAgUkVMRUFTRV9BU1NFUlQocm91bmRVcFRvTXVsdGlwbGVPZjxpbnN0cnVj
dGlvblNpemU+KGZyb20pID09IGZyb20pOwogICAgICAgICBjb3B5KGZyb20sICZpbnNuLCBzaXpl
b2YoaW50KSk7CkBAIC0zMDA4LDEyICszMDQxLDEyIEBAIHByb3RlY3RlZDoKICAgICAgICAgQVNT
RVJUKCEocmVpbnRlcnByZXRfY2FzdDxpbnRwdHJfdD4oZnJvbSkgJiAzKSk7CiAgICAgICAgIEFT
U0VSVCghKHJlaW50ZXJwcmV0X2Nhc3Q8aW50cHRyX3Q+KHRvKSAmIDMpKTsKICAgICAgICAgaW50
cHRyX3Qgb2Zmc2V0ID0gKHJlaW50ZXJwcmV0X2Nhc3Q8aW50cHRyX3Q+KHRvKSAtIHJlaW50ZXJw
cmV0X2Nhc3Q8aW50cHRyX3Q+KGZyb21JbnN0cnVjdGlvbikpID4+IDI7Ci0gICAgICAgIEFTU0VS
VChpc0ludDwyNj4ob2Zmc2V0KSk7CiAKICAgICAgICAgYm9vbCB1c2VEaXJlY3QgPSBpc0ludDwx
OT4ob2Zmc2V0KTsKICAgICAgICAgQVNTRVJUKHR5cGUgPT0gSW5kaXJlY3RCcmFuY2ggfHwgdXNl
RGlyZWN0KTsKIAogICAgICAgICBpZiAodXNlRGlyZWN0IHx8IHR5cGUgPT0gRGlyZWN0QnJhbmNo
KSB7CisgICAgICAgICAgICBBU1NFUlQoaXNJbnQ8MTk+KG9mZnNldCkpOwogICAgICAgICAgICAg
aW50IGluc24gPSBjb21wYXJlQW5kQnJhbmNoSW1tZWRpYXRlKGlzNjRCaXQgPyBEYXRhc2l6ZV82
NCA6IERhdGFzaXplXzMyLCBjb25kaXRpb24gPT0gQ29uZGl0aW9uTkUsIHN0YXRpY19jYXN0PGlu
dD4ob2Zmc2V0KSwgcnQpOwogICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQocm91bmRVcFRvTXVs
dGlwbGVPZjxpbnN0cnVjdGlvblNpemU+KGZyb20pID09IGZyb20pOwogICAgICAgICAgICAgY29w
eShmcm9tLCAmaW5zbiwgc2l6ZW9mKGludCkpOwpAQCAtMzAzNiwxMiArMzA2OSwxMiBAQCBwcm90
ZWN0ZWQ6CiAgICAgICAgIEFTU0VSVCghKHJlaW50ZXJwcmV0X2Nhc3Q8aW50cHRyX3Q+KGZyb20p
ICYgMykpOwogICAgICAgICBBU1NFUlQoIShyZWludGVycHJldF9jYXN0PGludHB0cl90Pih0bykg
JiAzKSk7CiAgICAgICAgIGludHB0cl90IG9mZnNldCA9IChyZWludGVycHJldF9jYXN0PGludHB0
cl90Pih0bykgLSByZWludGVycHJldF9jYXN0PGludHB0cl90Pihmcm9tSW5zdHJ1Y3Rpb24pKSA+
PiAyOwotICAgICAgICBBU1NFUlQoaXNJbnQ8MjY+KG9mZnNldCkpOwogCiAgICAgICAgIGJvb2wg
dXNlRGlyZWN0ID0gaXNJbnQ8MTk+KG9mZnNldCk7CiAgICAgICAgIEFTU0VSVCh0eXBlID09IElu
ZGlyZWN0QnJhbmNoIHx8IHVzZURpcmVjdCk7CiAKICAgICAgICAgaWYgKHVzZURpcmVjdCB8fCB0
eXBlID09IERpcmVjdEJyYW5jaCkgeworICAgICAgICAgICAgQVNTRVJUKGlzSW50PDE5PihvZmZz
ZXQpKTsKICAgICAgICAgICAgIGludCBpbnNuID0gY29uZGl0aW9uYWxCcmFuY2hJbW1lZGlhdGUo
c3RhdGljX2Nhc3Q8aW50PihvZmZzZXQpLCBjb25kaXRpb24pOwogICAgICAgICAgICAgUkVMRUFT
RV9BU1NFUlQocm91bmRVcFRvTXVsdGlwbGVPZjxpbnN0cnVjdGlvblNpemU+KGZyb20pID09IGZy
b20pOwogICAgICAgICAgICAgY29weShmcm9tLCAmaW5zbiwgc2l6ZW9mKGludCkpOwpAQCAtMzA2
NSwxMiArMzA5OCwxMiBAQCBwcm90ZWN0ZWQ6CiAgICAgICAgIEFTU0VSVCghKHJlaW50ZXJwcmV0
X2Nhc3Q8aW50cHRyX3Q+KHRvKSAmIDMpKTsKICAgICAgICAgaW50cHRyX3Qgb2Zmc2V0ID0gKHJl
aW50ZXJwcmV0X2Nhc3Q8aW50cHRyX3Q+KHRvKSAtIHJlaW50ZXJwcmV0X2Nhc3Q8aW50cHRyX3Q+
KGZyb21JbnN0cnVjdGlvbikpID4+IDI7CiAgICAgICAgIEFTU0VSVChzdGF0aWNfY2FzdDxpbnQ+
KG9mZnNldCkgPT0gb2Zmc2V0KTsKLSAgICAgICAgQVNTRVJUKGlzSW50PDI2PihvZmZzZXQpKTsK
IAogICAgICAgICBib29sIHVzZURpcmVjdCA9IGlzSW50PDE0PihvZmZzZXQpOwogICAgICAgICBB
U1NFUlQodHlwZSA9PSBJbmRpcmVjdEJyYW5jaCB8fCB1c2VEaXJlY3QpOwogCiAgICAgICAgIGlm
ICh1c2VEaXJlY3QgfHwgdHlwZSA9PSBEaXJlY3RCcmFuY2gpIHsKKyAgICAgICAgICAgIEFTU0VS
VChpc0ludDwxND4ob2Zmc2V0KSk7CiAgICAgICAgICAgICBpbnQgaW5zbiA9IHRlc3RBbmRCcmFu
Y2hJbW1lZGlhdGUoY29uZGl0aW9uID09IENvbmRpdGlvbk5FLCBzdGF0aWNfY2FzdDxpbnQ+KGJp
dE51bWJlciksIHN0YXRpY19jYXN0PGludD4ob2Zmc2V0KSwgcnQpOwogICAgICAgICAgICAgUkVM
RUFTRV9BU1NFUlQocm91bmRVcFRvTXVsdGlwbGVPZjxpbnN0cnVjdGlvblNpemU+KGZyb20pID09
IGZyb20pOwogICAgICAgICAgICAgY29weShmcm9tLCAmaW5zbiwgc2l6ZW9mKGludCkpOwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9BYnN0cmFjdE1hY3JvQXNzZW1ibGVy
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9BYnN0cmFj
dE1hY3JvQXNzZW1ibGVyLmgJKHJldmlzaW9uIDI1ODM1MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9hc3NlbWJsZXIvQWJzdHJhY3RNYWNyb0Fzc2VtYmxlci5oCSh3b3JraW5nIGNvcHkpCkBA
IC05MTksNiArOTE5LDIyIEBAIHB1YmxpYzoKICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JF
QUNIRUQoKTsKICAgICB9CiAKKyAgICB0ZW1wbGF0ZTxQdHJUYWcgY2FsbFRhZywgUHRyVGFnIGRl
c3RUYWc+CisgICAgc3RhdGljIENvZGVMb2NhdGlvbkxhYmVsPGRlc3RUYWc+IHByZXBhcmVGb3JB
dG9taWNSZXBhdGNoTmVhckNhbGxDb25jdXJyZW50bHkoQ29kZUxvY2F0aW9uTmVhckNhbGw8Y2Fs
bFRhZz4gbmVhckNhbGwsIENvZGVMb2NhdGlvbkxhYmVsPGRlc3RUYWc+IGRlc3RpbmF0aW9uKQor
ICAgIHsKKyNpZiBVU0UoSlVNUF9JU0xBTkRTKQorICAgICAgICBzd2l0Y2ggKG5lYXJDYWxsLmNh
bGxNb2RlKCkpIHsKKyAgICAgICAgY2FzZSBOZWFyQ2FsbE1vZGU6OlRhaWw6CisgICAgICAgICAg
ICByZXR1cm4gQ29kZUxvY2F0aW9uTGFiZWw8ZGVzdFRhZz4odGFnQ29kZVB0cjxkZXN0VGFnPihB
c3NlbWJsZXJUeXBlOjpwcmVwYXJlRm9yQXRvbWljUmVsaW5rSnVtcENvbmN1cnJlbnRseShuZWFy
Q2FsbC5kYXRhTG9jYXRpb24oKSwgZGVzdGluYXRpb24uZGF0YUxvY2F0aW9uKCkpKSk7CisgICAg
ICAgIGNhc2UgTmVhckNhbGxNb2RlOjpSZWd1bGFyOgorICAgICAgICAgICAgcmV0dXJuIENvZGVM
b2NhdGlvbkxhYmVsPGRlc3RUYWc+KHRhZ0NvZGVQdHI8ZGVzdFRhZz4oQXNzZW1ibGVyVHlwZTo6
cHJlcGFyZUZvckF0b21pY1JlbGlua0NhbGxDb25jdXJyZW50bHkobmVhckNhbGwuZGF0YUxvY2F0
aW9uKCksIGRlc3RpbmF0aW9uLnVudGFnZ2VkRXhlY3V0YWJsZUFkZHJlc3MoKSkpKTsKKyAgICAg
ICAgfQorI2Vsc2UKKyAgICAgICAgVU5VU0VEX1BBUkFNKG5lYXJDYWxsKTsKKyAgICAgICAgcmV0
dXJuIGRlc3RpbmF0aW9uOworI2VuZGlmCisgICAgfQorCiAgICAgdGVtcGxhdGU8UHRyVGFnIHRh
Zz4KICAgICBzdGF0aWMgdm9pZCByZXBhdGNoQ29tcGFjdChDb2RlTG9jYXRpb25EYXRhTGFiZWxD
b21wYWN0PHRhZz4gZGF0YUxhYmVsQ29tcGFjdCwgaW50MzJfdCB2YWx1ZSkKICAgICB7CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL0xpbmtCdWZmZXIuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTGlua0J1ZmZlci5jcHAJKHJl
dmlzaW9uIDI1ODM1MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTGlua0J1
ZmZlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEzMSw5ICsxMzEsOSBAQCBzdGF0aWMgQUxXQVlT
X0lOTElORSB2b2lkIHJlY29yZExpbmtPZmZzCiB9CiAKIHRlbXBsYXRlIDx0eXBlbmFtZSBJbnN0
cnVjdGlvblR5cGU+Ci12b2lkIExpbmtCdWZmZXI6OmNvcHlDb21wYWN0QW5kTGlua0NvZGUoTWFj
cm9Bc3NlbWJsZXImIG1hY3JvQXNzZW1ibGVyLCB2b2lkKiBvd25lclVJRCwgSklUQ29tcGlsYXRp
b25FZmZvcnQgZWZmb3J0KQordm9pZCBMaW5rQnVmZmVyOjpjb3B5Q29tcGFjdEFuZExpbmtDb2Rl
KE1hY3JvQXNzZW1ibGVyJiBtYWNyb0Fzc2VtYmxlciwgSklUQ29tcGlsYXRpb25FZmZvcnQgZWZm
b3J0KQogewotICAgIGFsbG9jYXRlKG1hY3JvQXNzZW1ibGVyLCBvd25lclVJRCwgZWZmb3J0KTsK
KyAgICBhbGxvY2F0ZShtYWNyb0Fzc2VtYmxlciwgZWZmb3J0KTsKICAgICBjb25zdCBzaXplX3Qg
aW5pdGlhbFNpemUgPSBtYWNyb0Fzc2VtYmxlci5tX2Fzc2VtYmxlci5jb2RlU2l6ZSgpOwogICAg
IGlmIChkaWRGYWlsVG9BbGxvY2F0ZSgpKQogICAgICAgICByZXR1cm47CkBAIC0yOTUsNyArMjk1
LDcgQEAgdm9pZCBMaW5rQnVmZmVyOjpjb3B5Q29tcGFjdEFuZExpbmtDb2RlKAogI2VuZGlmIC8v
IEVOQUJMRShCUkFOQ0hfQ09NUEFDVElPTikKIAogCi12b2lkIExpbmtCdWZmZXI6OmxpbmtDb2Rl
KE1hY3JvQXNzZW1ibGVyJiBtYWNyb0Fzc2VtYmxlciwgdm9pZCogb3duZXJVSUQsIEpJVENvbXBp
bGF0aW9uRWZmb3J0IGVmZm9ydCkKK3ZvaWQgTGlua0J1ZmZlcjo6bGlua0NvZGUoTWFjcm9Bc3Nl
bWJsZXImIG1hY3JvQXNzZW1ibGVyLCBKSVRDb21waWxhdGlvbkVmZm9ydCBlZmZvcnQpCiB7CiAg
ICAgLy8gRW5zdXJlIHRoYXQgdGhlIGVuZCBvZiB0aGUgbGFzdCBpbnZhbGlkYXRpb24gcG9pbnQg
ZG9lcyBub3QgZXh0ZW5kIGJleW9uZCB0aGUgZW5kIG9mIHRoZSBidWZmZXIuCiAgICAgbWFjcm9B
c3NlbWJsZXIubGFiZWwoKTsKQEAgLTMwNCw3ICszMDQsNyBAQCB2b2lkIExpbmtCdWZmZXI6Omxp
bmtDb2RlKE1hY3JvQXNzZW1ibGVyCiAjaWYgZGVmaW5lZChBU1NFTUJMRVJfSEFTX0NPTlNUQU5U
X1BPT0wpICYmIEFTU0VNQkxFUl9IQVNfQ09OU1RBTlRfUE9PTAogICAgIG1hY3JvQXNzZW1ibGVy
Lm1fYXNzZW1ibGVyLmJ1ZmZlcigpLmZsdXNoQ29uc3RhbnRQb29sKGZhbHNlKTsKICNlbmRpZgot
ICAgIGFsbG9jYXRlKG1hY3JvQXNzZW1ibGVyLCBvd25lclVJRCwgZWZmb3J0KTsKKyAgICBhbGxv
Y2F0ZShtYWNyb0Fzc2VtYmxlciwgZWZmb3J0KTsKICAgICBpZiAoIW1fZGlkQWxsb2NhdGUpCiAg
ICAgICAgIHJldHVybjsKICAgICBBU1NFUlQobV9jb2RlKTsKQEAgLTMxOCwxNSArMzE4LDE1IEBA
IHZvaWQgTGlua0J1ZmZlcjo6bGlua0NvZGUoTWFjcm9Bc3NlbWJsZXIKICAgICBtYWNyb0Fzc2Vt
Ymxlci5tX2Fzc2VtYmxlci5yZWxvY2F0ZUp1bXBzKGJ1ZmZlci5kYXRhKCksIGNvZGUpOwogI2Vu
ZGlmCiAjZWxpZiBDUFUoQVJNX1RIVU1CMikKLSAgICBjb3B5Q29tcGFjdEFuZExpbmtDb2RlPHVp
bnQxNl90PihtYWNyb0Fzc2VtYmxlciwgb3duZXJVSUQsIGVmZm9ydCk7CisgICAgY29weUNvbXBh
Y3RBbmRMaW5rQ29kZTx1aW50MTZfdD4obWFjcm9Bc3NlbWJsZXIsIGVmZm9ydCk7CiAjZWxpZiBD
UFUoQVJNNjQpCi0gICAgY29weUNvbXBhY3RBbmRMaW5rQ29kZTx1aW50MzJfdD4obWFjcm9Bc3Nl
bWJsZXIsIG93bmVyVUlELCBlZmZvcnQpOworICAgIGNvcHlDb21wYWN0QW5kTGlua0NvZGU8dWlu
dDMyX3Q+KG1hY3JvQXNzZW1ibGVyLCBlZmZvcnQpOwogI2VuZGlmIC8vICFFTkFCTEUoQlJBTkNI
X0NPTVBBQ1RJT04pCiAKICAgICBtX2xpbmtUYXNrcyA9IFdURk1vdmUobWFjcm9Bc3NlbWJsZXIu
bV9saW5rVGFza3MpOwogfQogCi12b2lkIExpbmtCdWZmZXI6OmFsbG9jYXRlKE1hY3JvQXNzZW1i
bGVyJiBtYWNyb0Fzc2VtYmxlciwgdm9pZCogb3duZXJVSUQsIEpJVENvbXBpbGF0aW9uRWZmb3J0
IGVmZm9ydCkKK3ZvaWQgTGlua0J1ZmZlcjo6YWxsb2NhdGUoTWFjcm9Bc3NlbWJsZXImIG1hY3Jv
QXNzZW1ibGVyLCBKSVRDb21waWxhdGlvbkVmZm9ydCBlZmZvcnQpCiB7CiAgICAgc2l6ZV90IGlu
aXRpYWxTaXplID0gbWFjcm9Bc3NlbWJsZXIubV9hc3NlbWJsZXIuY29kZVNpemUoKTsKICAgICBp
ZiAobV9jb2RlKSB7CkBAIC0zNDQsNyArMzQ0LDcgQEAgdm9pZCBMaW5rQnVmZmVyOjphbGxvY2F0
ZShNYWNyb0Fzc2VtYmxlcgogICAgICAgICBpbml0aWFsU2l6ZSA9IG1hY3JvQXNzZW1ibGVyLm1f
YXNzZW1ibGVyLmNvZGVTaXplKCk7CiAgICAgfQogCi0gICAgbV9leGVjdXRhYmxlTWVtb3J5ID0g
RXhlY3V0YWJsZUFsbG9jYXRvcjo6c2luZ2xldG9uKCkuYWxsb2NhdGUoaW5pdGlhbFNpemUsIG93
bmVyVUlELCBlZmZvcnQpOworICAgIG1fZXhlY3V0YWJsZU1lbW9yeSA9IEV4ZWN1dGFibGVBbGxv
Y2F0b3I6OnNpbmdsZXRvbigpLmFsbG9jYXRlKGluaXRpYWxTaXplLCBlZmZvcnQpOwogICAgIGlm
ICghbV9leGVjdXRhYmxlTWVtb3J5KQogICAgICAgICByZXR1cm47CiAgICAgbV9jb2RlID0gTWFj
cm9Bc3NlbWJsZXJDb2RlUHRyPExpbmtCdWZmZXJQdHJUYWc+KG1fZXhlY3V0YWJsZU1lbW9yeS0+
c3RhcnQoKS5yZXRhZ2dlZFB0cjxMaW5rQnVmZmVyUHRyVGFnPigpKTsKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTGlua0J1ZmZlci5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTGlua0J1ZmZlci5oCShyZXZpc2lvbiAyNTgzNTAp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL0xpbmtCdWZmZXIuaAkod29ya2lu
ZyBjb3B5KQpAQCAtOTAsNyArOTAsOCBAQCBwdWJsaWM6CiAgICAgICAgICwgbV9jb21wbGV0ZWQo
ZmFsc2UpCiAjZW5kaWYKICAgICB7Ci0gICAgICAgIGxpbmtDb2RlKG1hY3JvQXNzZW1ibGVyLCBv
d25lclVJRCwgZWZmb3J0KTsKKyAgICAgICAgVU5VU0VEX1BBUkFNKG93bmVyVUlEKTsKKyAgICAg
ICAgbGlua0NvZGUobWFjcm9Bc3NlbWJsZXIsIGVmZm9ydCk7CiAgICAgfQogCiAgICAgdGVtcGxh
dGU8UHRyVGFnIHRhZz4KQEAgLTEwNyw3ICsxMDgsNyBAQCBwdWJsaWM6CiAjZWxzZQogICAgICAg
ICBVTlVTRURfUEFSQU0oc2hvdWxkUGVyZm9ybUJyYW5jaENvbXBhY3Rpb24pOwogI2VuZGlmCi0g
ICAgICAgIGxpbmtDb2RlKG1hY3JvQXNzZW1ibGVyLCAwLCBlZmZvcnQpOworICAgICAgICBsaW5r
Q29kZShtYWNyb0Fzc2VtYmxlciwgZWZmb3J0KTsKICAgICB9CiAKICAgICB+TGlua0J1ZmZlcigp
CkBAIC0zMjEsMTIgKzMyMiwxMiBAQCBwcml2YXRlOgogICAgICAgICByZXR1cm4gbV9jb2RlLmRh
dGFMb2NhdGlvbigpOwogICAgIH0KICAgICAKLSAgICB2b2lkIGFsbG9jYXRlKE1hY3JvQXNzZW1i
bGVyJiwgdm9pZCogb3duZXJVSUQsIEpJVENvbXBpbGF0aW9uRWZmb3J0KTsKKyAgICB2b2lkIGFs
bG9jYXRlKE1hY3JvQXNzZW1ibGVyJiwgSklUQ29tcGlsYXRpb25FZmZvcnQpOwogCi0gICAgSlNf
RVhQT1JUX1BSSVZBVEUgdm9pZCBsaW5rQ29kZShNYWNyb0Fzc2VtYmxlciYsIHZvaWQqIG93bmVy
VUlELCBKSVRDb21waWxhdGlvbkVmZm9ydCk7CisgICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBs
aW5rQ29kZShNYWNyb0Fzc2VtYmxlciYsIEpJVENvbXBpbGF0aW9uRWZmb3J0KTsKICNpZiBFTkFC
TEUoQlJBTkNIX0NPTVBBQ1RJT04pCiAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIEluc3RydWN0aW9u
VHlwZT4KLSAgICB2b2lkIGNvcHlDb21wYWN0QW5kTGlua0NvZGUoTWFjcm9Bc3NlbWJsZXImLCB2
b2lkKiBvd25lclVJRCwgSklUQ29tcGlsYXRpb25FZmZvcnQpOworICAgIHZvaWQgY29weUNvbXBh
Y3RBbmRMaW5rQ29kZShNYWNyb0Fzc2VtYmxlciYsIEpJVENvbXBpbGF0aW9uRWZmb3J0KTsKICNl
bmRpZgogCiAgICAgdm9pZCBwZXJmb3JtRmluYWxpemF0aW9uKCk7CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyQ29kZVJlZi5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJDb2RlUmVm
LmgJKHJldmlzaW9uIDI1ODM1MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIv
TWFjcm9Bc3NlbWJsZXJDb2RlUmVmLmgJKHdvcmtpbmcgY29weSkKQEAgLTQzNCw3ICs0MzQsNiBA
QCBwdWJsaWM6CiAgICAgICAgIDogbV9jb2RlUHRyKGV4ZWN1dGFibGVNZW1vcnktPnN0YXJ0KCku
cmV0YWdnZWRQdHI8dGFnPigpKQogICAgICAgICAsIG1fZXhlY3V0YWJsZU1lbW9yeShXVEZNb3Zl
KGV4ZWN1dGFibGVNZW1vcnkpKQogICAgIHsKLSAgICAgICAgQVNTRVJUKG1fZXhlY3V0YWJsZU1l
bW9yeS0+aXNNYW5hZ2VkKCkpOwogICAgICAgICBBU1NFUlQobV9leGVjdXRhYmxlTWVtb3J5LT5z
dGFydCgpKTsKICAgICAgICAgQVNTRVJUKG1fY29kZVB0cik7CiAgICAgfQpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9FeGVjdXRhYmxlQWxsb2NhdG9yLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0V4ZWN1dGFibGVBbGxvY2F0b3IuY3BwCShyZXZp
c2lvbiAyNTgzNTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0V4ZWN1dGFibGVBbGxv
Y2F0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw5ICsyOCwxMCBAQAogCiAjaWYgRU5BQkxF
KEpJVCkKIAotI2luY2x1ZGUgIkNvZGVQcm9maWxpbmcuaCIKICNpbmNsdWRlICJFeGVjdXRhYmxl
QWxsb2NhdGlvbkZ1enouaCIKKyNpbmNsdWRlICJJdGVyYXRpb25TdGF0dXMuaCIKICNpbmNsdWRl
ICJKU0NJbmxpbmVzLmgiCisjaW5jbHVkZSA8dHlwZV90cmFpdHM+CiAjaW5jbHVkZSA8d3RmL0Zp
bGVTeXN0ZW0uaD4KICNpbmNsdWRlIDx3dGYvTWV0YUFsbG9jYXRvci5oPgogI2luY2x1ZGUgPHd0
Zi9QYWdlUmVzZXJ2YXRpb24uaD4KQEAgLTk2LDkgKzk3LDIwIEBAIHN0YXRpYyBjb25zdGV4cHIg
c2l6ZV90IGZpeGVkRXhlY3V0YWJsZU0KICNlbGlmIENQVShBUk0pCiBzdGF0aWMgY29uc3RleHBy
IHNpemVfdCBmaXhlZEV4ZWN1dGFibGVNZW1vcnlQb29sU2l6ZSA9IDE2ICogMTAyNCAqIDEwMjQ7
CiAjZWxpZiBDUFUoQVJNNjQpCisjaWYgVVNFKEpVTVBfSVNMQU5EUykKK3N0YXRpYyBjb25zdGV4
cHIgc2l6ZV90IGZpeGVkRXhlY3V0YWJsZU1lbW9yeVBvb2xTaXplID0gMSAqIDEwMjQgKiAxMDI0
ICogMTAyNDsKKy8vIFRoZXNlIHNpemVzIGd1YXJhbnRlZSB0aGF0IGFueSBqdW1wIHdpdGhpbiBh
biBpc2xhbmQgY2FuIGp1bXAgZm9yd2FyZHMgb3IgYmFja3dhcmRzCisvLyB0byB0aGUgYWRqYWNl
bnQgaXNsYW5kIGluIGEgc2luZ2xlIGluc3RydWN0aW9uLgorc3RhdGljIGNvbnN0ZXhwciBzaXpl
X3QgcmVnaW9uU2l6ZSA9IDExMiAqIDEwMjQgKiAxMDI0Oworc3RhdGljIGNvbnN0ZXhwciBzaXpl
X3QgaXNsYW5kUmVnaW9uU2l6ZSA9IDE2ICogMTAyNCAqIDEwMjQ7CitzdGF0aWMgY29uc3RleHBy
IHNpemVfdCBudW1iZXJPZlJlZ2lvbnMgPSBmaXhlZEV4ZWN1dGFibGVNZW1vcnlQb29sU2l6ZSAv
IHJlZ2lvblNpemU7CitzdGF0aWMgY29uc3RleHByIHNpemVfdCBpc2xhbmRTaXplSW5CeXRlcyA9
IDQ7CitzdGF0aWMgY29uc3RleHByIHNpemVfdCBtYXhJc2xhbmRzUGVyUmVnaW9uID0gaXNsYW5k
UmVnaW9uU2l6ZSAvIGlzbGFuZFNpemVJbkJ5dGVzOworI2Vsc2UKIHN0YXRpYyBjb25zdGV4cHIg
c2l6ZV90IGZpeGVkRXhlY3V0YWJsZU1lbW9yeVBvb2xTaXplID0gMTI4ICogMTAyNCAqIDEwMjQ7
CisjZW5kaWYKICNlbGlmIENQVShYODZfNjQpCi1zdGF0aWMgY29uc3RleHByIHNpemVfdCBmaXhl
ZEV4ZWN1dGFibGVNZW1vcnlQb29sU2l6ZSA9IDEwMjQgKiAxMDI0ICogMTAyNDsKK3N0YXRpYyBj
b25zdGV4cHIgc2l6ZV90IGZpeGVkRXhlY3V0YWJsZU1lbW9yeVBvb2xTaXplID0gMSAqIDEwMjQg
KiAxMDI0ICogMTAyNDsKICNlbHNlCiBzdGF0aWMgY29uc3RleHByIHNpemVfdCBmaXhlZEV4ZWN1
dGFibGVNZW1vcnlQb29sU2l6ZSA9IDMyICogMTAyNCAqIDEwMjQ7CiAjZW5kaWYKQEAgLTMxMywx
MCArMzI1LDExIEBAIHN0YXRpYyBBTFdBWVNfSU5MSU5FIEpJVFJlc2VydmF0aW9uIGluaXQKICAg
ICBpZiAoIWlzSklURW5hYmxlZCgpKQogICAgICAgICByZXR1cm4gcmVzZXJ2YXRpb247CiAKKyAg
ICByZXNlcnZhdGlvbi5zaXplID0gZml4ZWRFeGVjdXRhYmxlTWVtb3J5UG9vbFNpemU7CisjaWYg
IVVTRShKVU1QX0lTTEFORFMpCiAgICAgaWYgKE9wdGlvbnM6OmppdE1lbW9yeVJlc2VydmF0aW9u
U2l6ZSgpKQogICAgICAgICByZXNlcnZhdGlvbi5zaXplID0gT3B0aW9uczo6aml0TWVtb3J5UmVz
ZXJ2YXRpb25TaXplKCk7Ci0gICAgZWxzZQotICAgICAgICByZXNlcnZhdGlvbi5zaXplID0gZml4
ZWRFeGVjdXRhYmxlTWVtb3J5UG9vbFNpemU7CisjZW5kaWYKICAgICByZXNlcnZhdGlvbi5zaXpl
ID0gc3RkOjptYXgocm91bmRVcFRvTXVsdGlwbGVPZihwYWdlU2l6ZSgpLCByZXNlcnZhdGlvbi5z
aXplKSwgcGFnZVNpemUoKSAqIDIpOwogCiAgICAgYXV0byB0cnlDcmVhdGVQYWdlUmVzZXJ2YXRp
b24gPSBbXSAoc2l6ZV90IHJlc2VydmF0aW9uU2l6ZSkgewpAQCAtMzYzLDUyICszNzYsNDQ3IEBA
IHN0YXRpYyBBTFdBWVNfSU5MSU5FIEpJVFJlc2VydmF0aW9uIGluaXQKICAgICByZXR1cm4gcmVz
ZXJ2YXRpb247CiB9CiAKLWNsYXNzIEZpeGVkVk1Qb29sRXhlY3V0YWJsZUFsbG9jYXRvciBmaW5h
bCA6IHB1YmxpYyBNZXRhQWxsb2NhdG9yIHsKK2NsYXNzIEZpeGVkVk1Qb29sRXhlY3V0YWJsZUFs
bG9jYXRvciBmaW5hbCB7CiAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CisKKyNpZiBVU0Uo
SlVNUF9JU0xBTkRTKQorICAgIGNsYXNzIElzbGFuZHM7CisgICAgY2xhc3MgUmVnaW9uQWxsb2Nh
dG9yOworI2VuZGlmCisKIHB1YmxpYzoKICAgICBGaXhlZFZNUG9vbEV4ZWN1dGFibGVBbGxvY2F0
b3IoKQotICAgICAgICA6IE1ldGFBbGxvY2F0b3Ioaml0QWxsb2NhdGlvbkdyYW51bGUpIC8vIHJv
dW5kIHVwIGFsbCBhbGxvY2F0aW9ucyB0byAzMiBieXRlcworI2lmIFVTRShKVU1QX0lTTEFORFMp
CisgICAgICAgIDogbV9hbGxvY2F0b3JzKGNvbnN0cnVjdEZpeGVkU2l6ZUFycmF5V2l0aEFyZ3Vt
ZW50czxSZWdpb25BbGxvY2F0b3IsIG51bWJlck9mUmVnaW9ucz4oKnRoaXMpKQorI2Vsc2UKKyAg
ICAgICAgOiBtX2FsbG9jYXRvcigqdGhpcykKKyNlbmRpZgogICAgIHsKICAgICAgICAgSklUUmVz
ZXJ2YXRpb24gcmVzZXJ2YXRpb24gPSBpbml0aWFsaXplSklUUGFnZVJlc2VydmF0aW9uKCk7CiAg
ICAgICAgIG1fcmVzZXJ2YXRpb24gPSBXVEZNb3ZlKHJlc2VydmF0aW9uLnBhZ2VSZXNlcnZhdGlv
bik7CiAgICAgICAgIGlmIChtX3Jlc2VydmF0aW9uKSB7Ci0gICAgICAgICAgICBhZGRGcmVzaEZy
ZWVTcGFjZShyZXNlcnZhdGlvbi5iYXNlLCByZXNlcnZhdGlvbi5zaXplKTsKKyNpZiBVU0UoSlVN
UF9JU0xBTkRTKQorICAgICAgICAgICAgdWludHB0cl90IHN0YXJ0ID0gYml0d2lzZV9jYXN0PHVp
bnRwdHJfdD4obV9yZXNlcnZhdGlvbi5iYXNlKCkpOworICAgICAgICAgICAgdWludHB0cl90IHJl
c2VydmF0aW9uRW5kID0gc3RhcnQgKyBtX3Jlc2VydmF0aW9uLnNpemUoKTsKKyAgICAgICAgICAg
IGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbnVtYmVyT2ZSZWdpb25zOyArK2kpIHsKKyAgICAgICAg
ICAgICAgICBSRUxFQVNFX0FTU0VSVChzdGFydCA8IHJlc2VydmF0aW9uRW5kKTsKKyAgICAgICAg
ICAgICAgICBtX2FsbG9jYXRvcnNbaV0ubV9zdGFydCA9IHRhZ0NvZGVQdHI8RXhlY3V0YWJsZU1l
bW9yeVB0clRhZz4oYml0d2lzZV9jYXN0PHZvaWQqPihzdGFydCkpOworICAgICAgICAgICAgICAg
IG1fYWxsb2NhdG9yc1tpXS5tX2VuZCA9IHRhZ0NvZGVQdHI8RXhlY3V0YWJsZU1lbW9yeVB0clRh
Zz4oYml0d2lzZV9jYXN0PHZvaWQqPihzdGFydCArIHJlZ2lvblNpemUpKTsKKyAgICAgICAgICAg
ICAgICBpZiAobV9hbGxvY2F0b3JzW2ldLmVuZCgpID4gcmVzZXJ2YXRpb25FbmQpIHsKKyAgICAg
ICAgICAgICAgICAgICAgLy8gV2UgbWF5IGhhdmUgdGFrZW4gYSBwYWdlIGZvciB0aGUgZXhlY3V0
YWJsZSBvbmx5IGNvcHkgdGh1bmsuCisgICAgICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJU
KGkgPT0gbnVtYmVyT2ZSZWdpb25zIC0gMSk7CisgICAgICAgICAgICAgICAgICAgIG1fYWxsb2Nh
dG9yc1tpXS5tX2VuZCA9IHRhZ0NvZGVQdHI8RXhlY3V0YWJsZU1lbW9yeVB0clRhZz4oYml0d2lz
ZV9jYXN0PHZvaWQqPihyZXNlcnZhdGlvbkVuZCkpOworICAgICAgICAgICAgICAgIH0KKworICAg
ICAgICAgICAgICAgIG1fYWxsb2NhdG9yc1tpXS5hZGRGcmVzaEZyZWVTcGFjZShiaXR3aXNlX2Nh
c3Q8dm9pZCo+KG1fYWxsb2NhdG9yc1tpXS5zdGFydCgpKSwgbV9hbGxvY2F0b3JzW2ldLmFsbG9j
YXRvclNpemUoKSk7CisKKyAgICAgICAgICAgICAgICBzdGFydCArPSByZWdpb25TaXplOworICAg
ICAgICAgICAgfQorI2Vsc2UKKyAgICAgICAgICAgIG1fYWxsb2NhdG9yLmFkZEZyZXNoRnJlZVNw
YWNlKHJlc2VydmF0aW9uLmJhc2UsIHJlc2VydmF0aW9uLnNpemUpOworI2VuZGlmCisKICAgICAg
ICAgICAgIEFTU0VSVChieXRlc1Jlc2VydmVkKCkgPT0gcmVzZXJ2YXRpb24uc2l6ZSk7IC8vIFNp
bmNlIG91ciBleGVjdXRhYmxlIG1lbW9yeSBpcyBmaXhlZC1zaXplZCwgYnl0ZXNSZXNlcnZlZCBp
cyBuZXZlciBjaGFuZ2VkIGFmdGVyIGluaXRpYWxpemF0aW9uLgogICAgICAgICB9CiAgICAgfQog
Ci0gICAgdmlydHVhbCB+Rml4ZWRWTVBvb2xFeGVjdXRhYmxlQWxsb2NhdG9yKCk7CisgICAgfkZp
eGVkVk1Qb29sRXhlY3V0YWJsZUFsbG9jYXRvcigpCisgICAgeworICAgICAgICBtX3Jlc2VydmF0
aW9uLmRlYWxsb2NhdGUoKTsKKyAgICB9CiAKICAgICB2b2lkKiBtZW1vcnlTdGFydCgpIHsgcmV0
dXJuIHVudGFnQ29kZVB0cjxFeGVjdXRhYmxlTWVtb3J5UHRyVGFnPihnX2pzY0NvbmZpZy5zdGFy
dEV4ZWN1dGFibGVNZW1vcnkpOyB9CiAgICAgdm9pZCogbWVtb3J5RW5kKCkgeyByZXR1cm4gdW50
YWdDb2RlUHRyPEV4ZWN1dGFibGVNZW1vcnlQdHJUYWc+KGdfanNjQ29uZmlnLmVuZEV4ZWN1dGFi
bGVNZW1vcnkpOyB9CiAgICAgYm9vbCBpc0pJVFBDKHZvaWQqIHBjKSB7IHJldHVybiBtZW1vcnlT
dGFydCgpIDw9IHBjICYmIHBjIDwgbWVtb3J5RW5kKCk7IH0KKyAgICBib29sIGlzVmFsaWQoKSB7
IHJldHVybiAhIW1fcmVzZXJ2YXRpb247IH0KIAotcHJvdGVjdGVkOgotICAgIEZyZWVTcGFjZVB0
ciBhbGxvY2F0ZU5ld1NwYWNlKHNpemVfdCYpIG92ZXJyaWRlCisgICAgUmVmUHRyPEV4ZWN1dGFi
bGVNZW1vcnlIYW5kbGU+IGFsbG9jYXRlKHNpemVfdCBzaXplSW5CeXRlcykKICAgICB7Ci0gICAg
ICAgIC8vIFdlJ3JlIG9wZXJhdGluZyBpbiBhIGZpeGVkIHBvb2wsIHNvIG5ldyBhbGxvY2F0aW9u
IGlzIGFsd2F5cyBwcm9oaWJpdGVkLgorI2lmIFVTRShKVU1QX0lTTEFORFMpCisgICAgICAgIGF1
dG8gbG9ja2VyID0gaG9sZExvY2soZ2V0TG9jaygpKTsKKworICAgICAgICB1bnNpZ25lZCBzdGFy
dCA9IDA7CisgICAgICAgIGlmIChPcHRpb25zOjp1c2VSYW5kb21pemluZ0V4ZWN1dGFibGVJc2xh
bmRBbGxvY2F0aW9uKCkpCisgICAgICAgICAgICBzdGFydCA9IGNyeXB0b2dyYXBoaWNhbGx5UmFu
ZG9tTnVtYmVyKCkgJSBtX2FsbG9jYXRvcnMuc2l6ZSgpOworCisgICAgICAgIHVuc2lnbmVkIGkg
PSBzdGFydDsKKyAgICAgICAgd2hpbGUgKHRydWUpIHsKKyAgICAgICAgICAgIFJlZ2lvbkFsbG9j
YXRvciYgYWxsb2NhdG9yID0gbV9hbGxvY2F0b3JzW2ldOworICAgICAgICAgICAgaWYgKFJlZlB0
cjxFeGVjdXRhYmxlTWVtb3J5SGFuZGxlPiByZXN1bHQgPSBhbGxvY2F0b3IuYWxsb2NhdGUobG9j
a2VyLCBzaXplSW5CeXRlcykpCisgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAg
ICAgICAgIGkgPSAoaSArIDEpICUgbV9hbGxvY2F0b3JzLnNpemUoKTsKKyAgICAgICAgICAgIGlm
IChpID09IHN0YXJ0KQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CiAgICAgICAg
IHJldHVybiBudWxscHRyOworI2Vsc2UKKyAgICAgICAgcmV0dXJuIG1fYWxsb2NhdG9yLmFsbG9j
YXRlKHNpemVJbkJ5dGVzKTsKKyNlbmRpZiAvLyBVU0UoSlVNUF9JU0xBTkRTKQorICAgIH0KKwor
ICAgIExvY2smIGdldExvY2soKSB7IHJldHVybiBtX2xvY2s7IH0KKworICAgIC8vIE5vbiBhdG9t
aWMKKyAgICBzaXplX3QgYnl0ZXNBbGxvY2F0ZWQoKSAKKyAgICB7CisgICAgICAgIHNpemVfdCBy
ZXN1bHQgPSAwOworICAgICAgICBmb3JFYWNoQWxsb2NhdG9yKFsmXSAoQWxsb2NhdG9yJiBhbGxv
Y2F0b3IpIHsKKyAgICAgICAgICAgIHJlc3VsdCArPSBhbGxvY2F0b3IuYnl0ZXNBbGxvY2F0ZWQo
KTsKKyAgICAgICAgfSk7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorICAgIHNpemVf
dCBieXRlc1Jlc2VydmVkKCkgCisgICAgeworICAgICAgICBzaXplX3QgcmVzdWx0ID0gMDsKKyAg
ICAgICAgZm9yRWFjaEFsbG9jYXRvcihbJl0gKEFsbG9jYXRvciYgYWxsb2NhdG9yKSB7CisgICAg
ICAgICAgICByZXN1bHQgKz0gYWxsb2NhdG9yLmJ5dGVzUmVzZXJ2ZWQoKTsKKyAgICAgICAgfSk7
CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorICAgIHNpemVfdCBieXRlc0NvbW1pdHRl
ZCgpCisgICAgeworICAgICAgICBzaXplX3QgcmVzdWx0ID0gMDsKKyAgICAgICAgZm9yRWFjaEFs
bG9jYXRvcihbJl0gKEFsbG9jYXRvciYgYWxsb2NhdG9yKSB7CisgICAgICAgICAgICByZXN1bHQg
Kz0gYWxsb2NhdG9yLmJ5dGVzQ29tbWl0dGVkKCk7CisgICAgICAgIH0pOworICAgICAgICByZXR1
cm4gcmVzdWx0OworICAgIH0KKworICAgIGJvb2wgaXNJbkFsbG9jYXRlZE1lbW9yeShjb25zdCBB
YnN0cmFjdExvY2tlciYgbG9ja2VyLCB2b2lkKiBhZGRyZXNzKQorICAgIHsKKyNpZiBVU0UoSlVN
UF9JU0xBTkRTKQorICAgICAgICBpZiAoUmVnaW9uQWxsb2NhdG9yKiBhbGxvY2F0b3IgPSBmaW5k
UmVnaW9uKGJpdHdpc2VfY2FzdDx1aW50cHRyX3Q+KGFkZHJlc3MpKSkKKyAgICAgICAgICAgIHJl
dHVybiBhbGxvY2F0b3ItPmlzSW5BbGxvY2F0ZWRNZW1vcnkobG9ja2VyLCBhZGRyZXNzKTsKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworI2Vsc2UKKyAgICAgICAgcmV0dXJuIG1fYWxsb2NhdG9yLmlz
SW5BbGxvY2F0ZWRNZW1vcnkobG9ja2VyLCBhZGRyZXNzKTsKKyNlbmRpZgorICAgIH0KKworI2lm
IEVOQUJMRShNRVRBX0FMTE9DQVRPUl9QUk9GSUxFKQorICAgIHZvaWQgZHVtcFByb2ZpbGUoKQor
ICAgIHsKKyAgICAgICAgZm9yRWFjaEFsbG9jYXRvcihbJl0gKEFsbG9jYXRvciYgYWxsb2NhdG9y
KSB7CisgICAgICAgICAgICBhbGxvY2F0b3IuZHVtcFByb2ZpbGUoKTsKKyAgICAgICAgfSk7Cisg
ICAgfQorI2VuZGlmCisKKyAgICBNZXRhQWxsb2NhdG9yOjpTdGF0aXN0aWNzIGN1cnJlbnRTdGF0
aXN0aWNzKCkKKyAgICB7CisgICAgICAgIGF1dG8gbG9ja2VyID0gaG9sZExvY2soZ2V0TG9jaygp
KTsKKyAgICAgICAgTWV0YUFsbG9jYXRvcjo6U3RhdGlzdGljcyByZXN1bHQgeyAwLCAwLCAwIH07
CisgICAgICAgIGZvckVhY2hBbGxvY2F0b3IoWyZdIChBbGxvY2F0b3ImIGFsbG9jYXRvcikgewor
ICAgICAgICAgICAgYXV0byBhbGxvY2F0b3JTdGF0cyA9IGFsbG9jYXRvci5jdXJyZW50U3RhdGlz
dGljcyhsb2NrZXIpOworICAgICAgICAgICAgcmVzdWx0LmJ5dGVzQWxsb2NhdGVkICs9IGFsbG9j
YXRvclN0YXRzLmJ5dGVzQWxsb2NhdGVkOworICAgICAgICAgICAgcmVzdWx0LmJ5dGVzUmVzZXJ2
ZWQgKz0gYWxsb2NhdG9yU3RhdHMuYnl0ZXNSZXNlcnZlZDsKKyAgICAgICAgICAgIHJlc3VsdC5i
eXRlc0NvbW1pdHRlZCArPSBhbGxvY2F0b3JTdGF0cy5ieXRlc0NvbW1pdHRlZDsKKyAgICAgICAg
fSk7CisgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgfQogCi0gICAgdm9pZCBub3RpZnlOZWVk
UGFnZSh2b2lkKiBwYWdlLCBzaXplX3QgY291bnQpIG92ZXJyaWRlCisjaWYgVVNFKEpVTVBfSVNM
QU5EUykKKyAgICB2b2lkIGhhbmRsZVdpbGxCZVJlbGVhc2VkKGNvbnN0IExvY2tIb2xkZXImIGxv
Y2tlciwgTWV0YUFsbG9jYXRvckhhbmRsZSYgaGFuZGxlKQogICAgIHsKLSAgICAgICAgbV9yZXNl
cnZhdGlvbi5jb21taXQocGFnZSwgcGFnZVNpemUoKSAqIGNvdW50KTsKKyAgICAgICAgaWYgKGlz
bGFuZHNGb3JKdW1wTG9jYXRpb24uaXNFbXB0eSgpKQorICAgICAgICAgICAgcmV0dXJuOworCisg
ICAgICAgIFZlY3RvcjxJc2xhbmRzKiwgMTY+IHRvUmVtb3ZlOworICAgICAgICB2b2lkKiBzdGFy
dCA9IGhhbmRsZS5zdGFydCgpLnVudGFnZ2VkUHRyKCk7CisgICAgICAgIHZvaWQqIGVuZCA9IGhh
bmRsZS5lbmQoKS51bnRhZ2dlZFB0cigpOworICAgICAgICBpc2xhbmRzRm9ySnVtcExvY2F0aW9u
Lml0ZXJhdGUoWyZdIChJc2xhbmRzJiBpc2xhbmRzLCBib29sJiB2aXNpdExlZnQsIGJvb2wmIHZp
c2l0UmlnaHQpIHsKKyAgICAgICAgICAgIGlmIChzdGFydCA8PSBpc2xhbmRzLmtleSgpICYmIGlz
bGFuZHMua2V5KCkgPCBlbmQpCisgICAgICAgICAgICAgICAgdG9SZW1vdmUuYXBwZW5kKCZpc2xh
bmRzKTsKKyAgICAgICAgICAgIGlmIChpc2xhbmRzLmtleSgpID4gc3RhcnQpCisgICAgICAgICAg
ICAgICAgdmlzaXRMZWZ0ID0gdHJ1ZTsKKyAgICAgICAgICAgIGlmIChpc2xhbmRzLmtleSgpIDwg
ZW5kKQorICAgICAgICAgICAgICAgIHZpc2l0UmlnaHQgPSB0cnVlOworICAgICAgICB9KTsKKwor
ICAgICAgICBmb3IgKElzbGFuZHMqIGlzbGFuZHMgOiB0b1JlbW92ZSkKKyAgICAgICAgICAgIGZy
ZWVJc2xhbmRzKGxvY2tlciwgaXNsYW5kcyk7CisKKyAgICAgICAgaWYgKEFTU0VSVF9FTkFCTEVE
KSB7CisgICAgICAgICAgICBpc2xhbmRzRm9ySnVtcExvY2F0aW9uLml0ZXJhdGUoWyZdIChJc2xh
bmRzJiBpc2xhbmRzLCBib29sJiB2aXNpdExlZnQsIGJvb2wmIHZpc2l0UmlnaHQpIHsKKyAgICAg
ICAgICAgICAgICBpZiAoc3RhcnQgPD0gaXNsYW5kcy5rZXkoKSAmJiBpc2xhbmRzLmtleSgpIDwg
ZW5kKSB7CisgICAgICAgICAgICAgICAgICAgIGRhdGFMb2dMbigiZGlkIG5vdCByZW1vdmUgZXZl
cnl0aGluZyEiKTsKKyAgICAgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNI
RUQoKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgdmlzaXRMZWZ0ID0gdHJ1
ZTsKKyAgICAgICAgICAgICAgICB2aXNpdFJpZ2h0ID0gdHJ1ZTsKKyAgICAgICAgICAgIH0pOwor
ICAgICAgICB9CiAgICAgfQogCi0gICAgdm9pZCBub3RpZnlQYWdlSXNGcmVlKHZvaWQqIHBhZ2Us
IHNpemVfdCBjb3VudCkgb3ZlcnJpZGUKKyAgICB2b2lkKiBtYWtlSXNsYW5kKHVpbnRwdHJfdCBq
dW1wTG9jYXRpb24sIHVpbnRwdHJfdCBuZXdUYXJnZXQsIGJvb2wgY29uY3VycmVudGx5KQogICAg
IHsKLSAgICAgICAgbV9yZXNlcnZhdGlvbi5kZWNvbW1pdChwYWdlLCBwYWdlU2l6ZSgpICogY291
bnQpOworICAgICAgICBhdXRvIGxvY2tlciA9IGhvbGRMb2NrKGdldExvY2soKSk7CisgICAgICAg
IHJldHVybiBpc2xhbmRGb3JKdW1wTG9jYXRpb24obG9ja2VyLCBqdW1wTG9jYXRpb24sIG5ld1Rh
cmdldCwgY29uY3VycmVudGx5KTsKICAgICB9CiAKIHByaXZhdGU6CisgICAgUmVnaW9uQWxsb2Nh
dG9yKiBmaW5kUmVnaW9uKHVpbnRwdHJfdCBwdHIpCisgICAgeworICAgICAgICBSZWdpb25BbGxv
Y2F0b3IqIHJlc3VsdCA9IG51bGxwdHI7CisgICAgICAgIGZvckVhY2hBbGxvY2F0b3IoWyZdIChS
ZWdpb25BbGxvY2F0b3ImIGFsbG9jYXRvcikgeworICAgICAgICAgICAgaWYgKGFsbG9jYXRvci5z
dGFydCgpIDw9IHB0ciAmJiBwdHIgPCBhbGxvY2F0b3IuZW5kKCkpIHsKKyAgICAgICAgICAgICAg
ICByZXN1bHQgPSAmYWxsb2NhdG9yOworICAgICAgICAgICAgICAgIHJldHVybiBJdGVyYXRpb25T
dGF0dXM6OkRvbmU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gSXRlcmF0aW9u
U3RhdHVzOjpDb250aW51ZTsKKyAgICAgICAgfSk7CisgICAgICAgIHJldHVybiByZXN1bHQ7Cisg
ICAgfQorCisgICAgdm9pZCBmcmVlSnVtcElzbGFuZHMoY29uc3QgTG9ja0hvbGRlciYsIElzbGFu
ZHMqIGlzbGFuZHMpCisgICAgeworICAgICAgICBmb3IgKENvZGVMb2NhdGlvbkxhYmVsPEV4ZWN1
dGFibGVNZW1vcnlQdHJUYWc+IGp1bXBJc2xhbmQgOiBpc2xhbmRzLT5qdW1wSXNsYW5kcykgewor
ICAgICAgICAgICAgdWludHB0cl90IHVudGFnZ2VkSnVtcElzbGFuZCA9IGJpdHdpc2VfY2FzdDx1
aW50cHRyX3Q+KGp1bXBJc2xhbmQuZGF0YUxvY2F0aW9uKCkpOworICAgICAgICAgICAgUmVnaW9u
QWxsb2NhdG9yKiBhbGxvY2F0b3IgPSBmaW5kUmVnaW9uKHVudGFnZ2VkSnVtcElzbGFuZCk7Cisg
ICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChhbGxvY2F0b3IpOworICAgICAgICAgICAgYWxsb2Nh
dG9yLT5mcmVlSXNsYW5kKHVudGFnZ2VkSnVtcElzbGFuZCk7CisgICAgICAgIH0KKyAgICAgICAg
aXNsYW5kcy0+anVtcElzbGFuZHMuY2xlYXIoKTsKKyAgICB9CisKKyAgICB2b2lkIGZyZWVJc2xh
bmRzKGNvbnN0IExvY2tIb2xkZXImIGxvY2tlciwgSXNsYW5kcyogaXNsYW5kcykKKyAgICB7Cisg
ICAgICAgIGZyZWVKdW1wSXNsYW5kcyhsb2NrZXIsIGlzbGFuZHMpOworICAgICAgICBpc2xhbmRz
Rm9ySnVtcExvY2F0aW9uLnJlbW92ZShpc2xhbmRzKTsKKyAgICAgICAgZGVsZXRlIGlzbGFuZHM7
CisgICAgfQorCisgICAgdm9pZCogaXNsYW5kRm9ySnVtcExvY2F0aW9uKGNvbnN0IExvY2tIb2xk
ZXImIGxvY2tlciwgdWludHB0cl90IGp1bXBMb2NhdGlvbiwgdWludHB0cl90IHRhcmdldCwgYm9v
bCBjb25jdXJyZW50bHkpCisgICAgeworICAgICAgICBJc2xhbmRzKiBpc2xhbmRzID0gaXNsYW5k
c0Zvckp1bXBMb2NhdGlvbi5maW5kRXhhY3QoYml0d2lzZV9jYXN0PHZvaWQqPihqdW1wTG9jYXRp
b24pKTsKKyAgICAgICAgaWYgKGlzbGFuZHMpIHsKKyAgICAgICAgICAgIC8vIEZJWE1FOiBXZSBj
b3VsZCBjcmVhdGUgc29tZSBtZXRob2Qgb2YgcmV1c2luZyBhbHJlYWR5IGFsbG9jYXRlZCBpc2xh
bmRzIGhlcmUsIGJ1dCBpdCdzCisgICAgICAgICAgICAvLyB1bmxpa2VseSB0byBtYXR0ZXIgaW4g
cHJhY3RpY2UuCisgICAgICAgICAgICBpZiAoIWNvbmN1cnJlbnRseSkKKyAgICAgICAgICAgICAg
ICBmcmVlSnVtcElzbGFuZHMobG9ja2VyLCBpc2xhbmRzKTsKKyAgICAgICAgfSBlbHNlIHsKKyAg
ICAgICAgICAgIGlzbGFuZHMgPSBuZXcgSXNsYW5kczsKKyAgICAgICAgICAgIGlzbGFuZHMtPnJv
b3RKdW1wTG9jYXRpb24gPSBDb2RlTG9jYXRpb25MYWJlbDxFeGVjdXRhYmxlTWVtb3J5UHRyVGFn
Pih0YWdDb2RlUHRyPEV4ZWN1dGFibGVNZW1vcnlQdHJUYWc+KGJpdHdpc2VfY2FzdDx2b2lkKj4o
anVtcExvY2F0aW9uKSkpOworICAgICAgICAgICAgaXNsYW5kc0Zvckp1bXBMb2NhdGlvbi5pbnNl
cnQoaXNsYW5kcyk7CisgICAgICAgIH0KKworICAgICAgICBSZWdpb25BbGxvY2F0b3IqIGFsbG9j
YXRvciA9IGZpbmRSZWdpb24oanVtcExvY2F0aW9uID4gdGFyZ2V0ID8ganVtcExvY2F0aW9uIC0g
cmVnaW9uU2l6ZSA6IGp1bXBMb2NhdGlvbik7CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKGFsbG9j
YXRvcik7CisgICAgICAgIHZvaWQqIHJlc3VsdCA9IGFsbG9jYXRvci0+YWxsb2NhdGVJc2xhbmQo
KTsKKyAgICAgICAgdm9pZCogY3VycmVudElzbGFuZCA9IHJlc3VsdDsKKyAgICAgICAganVtcExv
Y2F0aW9uID0gYml0d2lzZV9jYXN0PHVpbnRwdHJfdD4oY3VycmVudElzbGFuZCk7CisgICAgICAg
IHdoaWxlICh0cnVlKSB7CisgICAgICAgICAgICBpc2xhbmRzLT5qdW1wSXNsYW5kcy5hcHBlbmQo
Q29kZUxvY2F0aW9uTGFiZWw8RXhlY3V0YWJsZU1lbW9yeVB0clRhZz4odGFnQ29kZVB0cjxFeGVj
dXRhYmxlTWVtb3J5UHRyVGFnPihjdXJyZW50SXNsYW5kKSkpOworCisgICAgICAgICAgICBhdXRv
IGVtaXRKdW1wVG8gPSBbJl0gKHZvaWQqIHRhcmdldCkgeworICAgICAgICAgICAgICAgIFJFTEVB
U0VfQVNTRVJUKEFSTTY0QXNzZW1ibGVyOjpjYW5FbWl0SnVtcChiaXR3aXNlX2Nhc3Q8dm9pZCo+
KGp1bXBMb2NhdGlvbiksIHRhcmdldCkpOworCisgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJz
IGppdDsKKyAgICAgICAgICAgICAgICBhdXRvIGp1bXAgPSBqaXQuanVtcCgpOworICAgICAgICAg
ICAgICAgIExpbmtCdWZmZXIgbGlua0J1ZmZlcihqaXQsIE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxO
b1B0clRhZz4oY3VycmVudElzbGFuZCksIGlzbGFuZFNpemVJbkJ5dGVzLCBKSVRDb21waWxhdGlv
bk11c3RTdWNjZWVkLCBmYWxzZSk7CisgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQobGlu
a0J1ZmZlci5pc1ZhbGlkKCkpOworICAgICAgICAgICAgICAgIGxpbmtCdWZmZXIubGluayhqdW1w
LCBDb2RlTG9jYXRpb25MYWJlbDxOb1B0clRhZz4odGFyZ2V0KSk7CisgICAgICAgICAgICAgICAg
RklOQUxJWkVfQ09ERShsaW5rQnVmZmVyLCBOb1B0clRhZywgIkp1bXAgSXNsYW5kOiAlbHUiLCBq
dW1wTG9jYXRpb24pOworICAgICAgICAgICAgfTsKKworICAgICAgICAgICAgaWYgKEFSTTY0QXNz
ZW1ibGVyOjpjYW5FbWl0SnVtcChiaXR3aXNlX2Nhc3Q8dm9pZCo+KGp1bXBMb2NhdGlvbiksIGJp
dHdpc2VfY2FzdDx2b2lkKj4odGFyZ2V0KSkpIHsKKyAgICAgICAgICAgICAgICBlbWl0SnVtcFRv
KGJpdHdpc2VfY2FzdDx2b2lkKj4odGFyZ2V0KSk7CisgICAgICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHVpbnRwdHJfdCBuZXh0SXNsYW5kUmVnaW9uOwor
ICAgICAgICAgICAgaWYgKGp1bXBMb2NhdGlvbiA+IHRhcmdldCkKKyAgICAgICAgICAgICAgICBu
ZXh0SXNsYW5kUmVnaW9uID0ganVtcExvY2F0aW9uIC0gcmVnaW9uU2l6ZTsKKyAgICAgICAgICAg
IGVsc2UKKyAgICAgICAgICAgICAgICBuZXh0SXNsYW5kUmVnaW9uID0ganVtcExvY2F0aW9uICsg
cmVnaW9uU2l6ZTsKKworICAgICAgICAgICAgUmVnaW9uQWxsb2NhdG9yKiBhbGxvY2F0b3IgPSBm
aW5kUmVnaW9uKG5leHRJc2xhbmRSZWdpb24pOworICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQo
YWxsb2NhdG9yKTsKKyAgICAgICAgICAgIHZvaWQqIG5leHRJc2xhbmQgPSBhbGxvY2F0b3ItPmFs
bG9jYXRlSXNsYW5kKCk7CisgICAgICAgICAgICBlbWl0SnVtcFRvKG5leHRJc2xhbmQpOworICAg
ICAgICAgICAganVtcExvY2F0aW9uID0gYml0d2lzZV9jYXN0PHVpbnRwdHJfdD4obmV4dElzbGFu
ZCk7CisgICAgICAgICAgICBjdXJyZW50SXNsYW5kID0gbmV4dElzbGFuZDsKKyAgICAgICAgfQor
CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorI2VuZGlmIC8vIFVTRShKVU1QX0lTTEFO
RFMpCisKK3ByaXZhdGU6CisgICAgY2xhc3MgQWxsb2NhdG9yIDogcHVibGljIE1ldGFBbGxvY2F0
b3IgeworICAgICAgICB1c2luZyBCYXNlID0gTWV0YUFsbG9jYXRvcjsKKyAgICBwdWJsaWM6Cisg
ICAgICAgIEFsbG9jYXRvcihGaXhlZFZNUG9vbEV4ZWN1dGFibGVBbGxvY2F0b3ImIGFsbG9jYXRv
cikKKyAgICAgICAgICAgIDogQmFzZShhbGxvY2F0b3IuZ2V0TG9jaygpLCBqaXRBbGxvY2F0aW9u
R3JhbnVsZSwgcGFnZVNpemUoKSkgLy8gcm91bmQgdXAgYWxsIGFsbG9jYXRpb25zIHRvIDMyIGJ5
dGVzCisgICAgICAgICAgICAsIG1fZml4ZWRBbGxvY2F0b3IoYWxsb2NhdG9yKQorICAgICAgICB7
CisgICAgICAgIH0KKworICAgICAgICBGcmVlU3BhY2VQdHIgYWxsb2NhdGVOZXdTcGFjZShzaXpl
X3QmKSBvdmVycmlkZQorICAgICAgICB7CisgICAgICAgICAgICAvLyBXZSdyZSBvcGVyYXRpbmcg
aW4gYSBmaXhlZCBwb29sLCBzbyBuZXcgYWxsb2NhdGlvbiBpcyBhbHdheXMgcHJvaGliaXRlZC4K
KyAgICAgICAgICAgIHJldHVybiBudWxscHRyOworICAgICAgICB9CisKKyAgICAgICAgdm9pZCBu
b3RpZnlOZWVkUGFnZSh2b2lkKiBwYWdlLCBzaXplX3QgY291bnQpIG92ZXJyaWRlCisgICAgICAg
IHsKKyAgICAgICAgICAgIG1fZml4ZWRBbGxvY2F0b3IubV9yZXNlcnZhdGlvbi5jb21taXQocGFn
ZSwgcGFnZVNpemUoKSAqIGNvdW50KTsKKyAgICAgICAgfQorCisgICAgICAgIHZvaWQgbm90aWZ5
UGFnZUlzRnJlZSh2b2lkKiBwYWdlLCBzaXplX3QgY291bnQpIG92ZXJyaWRlCisgICAgICAgIHsK
KyAgICAgICAgICAgIG1fZml4ZWRBbGxvY2F0b3IubV9yZXNlcnZhdGlvbi5kZWNvbW1pdChwYWdl
LCBwYWdlU2l6ZSgpICogY291bnQpOworICAgICAgICB9CisKKyAgICAgICAgRml4ZWRWTVBvb2xF
eGVjdXRhYmxlQWxsb2NhdG9yJiBtX2ZpeGVkQWxsb2NhdG9yOworICAgIH07CisKKyNpZiBVU0Uo
SlVNUF9JU0xBTkRTKQorICAgIGNsYXNzIFJlZ2lvbkFsbG9jYXRvciBmaW5hbCA6IHB1YmxpYyBB
bGxvY2F0b3IgeworICAgICAgICB1c2luZyBCYXNlID0gQWxsb2NhdG9yOworICAgIHB1YmxpYzoK
KyAgICAgICAgUmVnaW9uQWxsb2NhdG9yKEZpeGVkVk1Qb29sRXhlY3V0YWJsZUFsbG9jYXRvciYg
YWxsb2NhdG9yKQorICAgICAgICAgICAgOiBCYXNlKGFsbG9jYXRvcikKKyAgICAgICAgeworICAg
ICAgICB9CisKKyAgICAgICAgLy8gIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LQorICAgICAgICAvLyAgfCBqaXQgYWxsb2NhdGlvbnMgLS0+ICAgPC0tIGlzbGFuZHMgfAorICAg
ICAgICAvLyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgICAgICAg
IHVpbnRwdHJfdCBzdGFydCgpIHsgcmV0dXJuIGJpdHdpc2VfY2FzdDx1aW50cHRyX3Q+KHVudGFn
Q29kZVB0cjxFeGVjdXRhYmxlTWVtb3J5UHRyVGFnPihtX3N0YXJ0KSk7IH0KKyAgICAgICAgdWlu
dHB0cl90IGVuZCgpIHsgcmV0dXJuIGJpdHdpc2VfY2FzdDx1aW50cHRyX3Q+KHVudGFnQ29kZVB0
cjxFeGVjdXRhYmxlTWVtb3J5UHRyVGFnPihtX2VuZCkpOyB9CisKKyAgICAgICAgdWludHB0cl90
IGlzbGFuZEJlZ2luKCkKKyAgICAgICAgeworICAgICAgICAgICAgLy8gW3N0YXJ0LCBhbGxvY2F0
b3JFbmQpCisgICAgICAgICAgICByZXR1cm4gZW5kKCkgLSBpc2xhbmRSZWdpb25TaXplOworICAg
ICAgICB9CisKKyAgICAgICAgdWludHB0cl90IGFsbG9jYXRvclNpemUoKQorICAgICAgICB7Cisg
ICAgICAgICAgICByZXR1cm4gaXNsYW5kQmVnaW4oKSAtIHN0YXJ0KCk7CisgICAgICAgIH0KKwor
ICAgICAgICBzaXplX3QgaXNsYW5kc1BlclBhZ2UoKQorICAgICAgICB7CisgICAgICAgICAgICBz
aXplX3QgaXNsYW5kc1BlclBhZ2UgPSBwYWdlU2l6ZSgpIC8gaXNsYW5kU2l6ZUluQnl0ZXM7Cisg
ICAgICAgICAgICBBU1NFUlQoaXNsYW5kc1BlclBhZ2UgKiBpc2xhbmRTaXplSW5CeXRlcyA9PSBw
YWdlU2l6ZSgpKTsKKyAgICAgICAgICAgIEFTU0VSVChpc1Bvd2VyT2ZUd28oaXNsYW5kc1BlclBh
Z2UpKTsKKyAgICAgICAgICAgIHJldHVybiBpc2xhbmRzUGVyUGFnZTsKKyAgICAgICAgfQorCisg
ICAgICAgIHZvaWQgcmVsZWFzZShjb25zdCBMb2NrSG9sZGVyJiBsb2NrZXIsIE1ldGFBbGxvY2F0
b3JIYW5kbGUmIGhhbmRsZSkgZmluYWwKKyAgICAgICAgeworICAgICAgICAgICAgbV9maXhlZEFs
bG9jYXRvci5oYW5kbGVXaWxsQmVSZWxlYXNlZChsb2NrZXIsIGhhbmRsZSk7CisgICAgICAgICAg
ICBCYXNlOjpyZWxlYXNlKGxvY2tlciwgaGFuZGxlKTsKKyAgICAgICAgfQorCisgICAgICAgIHZv
aWQqIGFsbG9jYXRlSXNsYW5kKCkKKyAgICAgICAgeworICAgICAgICAgICAgdWludHB0cl90IGVu
ZCA9IHRoaXMtPmVuZCgpOworICAgICAgICAgICAgYXV0byBmaW5kUmVzdWx0ID0gWyZdICgpIC0+
IHZvaWQqIHsKKyAgICAgICAgICAgICAgICBzaXplX3QgcmVzdWx0Qml0ID0gaXNsYW5kQml0cy5m
aW5kQ2xlYXJCaXQoMCk7CisgICAgICAgICAgICAgICAgaWYgKHJlc3VsdEJpdCA9PSBpc2xhbmRC
aXRzLnNpemUoKSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAg
ICAgICAgICAgaXNsYW5kQml0c1tyZXN1bHRCaXRdID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICB1
aW50cHRyX3QgcmVzdWx0ID0gZW5kIC0gKChyZXN1bHRCaXQgKyAxKSAqIGlzbGFuZFNpemVJbkJ5
dGVzKTsgCisgICAgICAgICAgICAgICAgcmV0dXJuIGJpdHdpc2VfY2FzdDx2b2lkKj4ocmVzdWx0
KTsKKyAgICAgICAgICAgIH07CisKKyAgICAgICAgICAgIGlmICh2b2lkKiByZXN1bHQgPSBmaW5k
UmVzdWx0KCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKKworICAgICAgICAgICAg
aXNsYW5kQml0cy5yZXNpemUoaXNsYW5kQml0cy5zaXplKCkgKyBpc2xhbmRzUGVyUGFnZSgpKTsK
KyAgICAgICAgICAgIGlmIChVTkxJS0VMWShpc2xhbmRCaXRzLnNpemUoKSA+IG1heElzbGFuZHNQ
ZXJSZWdpb24pKQorICAgICAgICAgICAgICAgIGNyYXNoT25KdW1wSXNsYW5kRXhoYXVzdGlvbigp
OworCisgICAgICAgICAgICB1aW50cHRyX3QgcGFnZUJlZ2luID0gZW5kIC0gKGlzbGFuZEJpdHMu
c2l6ZSgpICogaXNsYW5kU2l6ZUluQnl0ZXMpOyAvLyBbaXNsYW5kQmVnaW4sIGVuZCkKKyAgICAg
ICAgICAgIG1fZml4ZWRBbGxvY2F0b3IubV9yZXNlcnZhdGlvbi5jb21taXQoYml0d2lzZV9jYXN0
PHZvaWQqPihwYWdlQmVnaW4pLCBwYWdlU2l6ZSgpKTsKKworICAgICAgICAgICAgdm9pZCogcmVz
dWx0ID0gZmluZFJlc3VsdCgpOworICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQocmVzdWx0KTsK
KyAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgICAgIH0KKworICAgICAgICBORVZFUl9J
TkxJTkUgTk9fUkVUVVJOX0RVRV9UT19DUkFTSCB2b2lkIGNyYXNoT25KdW1wSXNsYW5kRXhoYXVz
dGlvbigpCisgICAgICAgIHsKKyAgICAgICAgICAgIENSQVNIKCk7CisgICAgICAgIH0KKworICAg
ICAgICBPcHRpb25hbDxzaXplX3Q+IGlzbGFuZEJpdCh1aW50cHRyX3QgaXNsYW5kKQorICAgICAg
ICB7CisgICAgICAgICAgICB1aW50cHRyX3QgZW5kID0gdGhpcy0+ZW5kKCk7CisgICAgICAgICAg
ICBpZiAoaXNsYW5kQmVnaW4oKSA8PSBpc2xhbmQgJiYgaXNsYW5kIDwgZW5kKQorICAgICAgICAg
ICAgICAgIHJldHVybiAoKGVuZCAtIGlzbGFuZCkgLyBpc2xhbmRTaXplSW5CeXRlcykgLSAxOwor
ICAgICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKyAgICAgICAgfQorCisgICAgICAgIHZv
aWQgZnJlZUlzbGFuZCh1aW50cHRyX3QgaXNsYW5kKQorICAgICAgICB7CisgICAgICAgICAgICBS
RUxFQVNFX0FTU0VSVChpc2xhbmRCZWdpbigpIDw9IGlzbGFuZCAmJiBpc2xhbmQgPCBlbmQoKSk7
CisgICAgICAgICAgICBzaXplX3QgYml0ID0gaXNsYW5kQml0KGlzbGFuZCkudmFsdWUoKTsKKyAg
ICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKCEhaXNsYW5kQml0c1tiaXRdKTsKKyAgICAgICAgICAg
IGlzbGFuZEJpdHNbYml0XSA9IGZhbHNlOworICAgICAgICB9CisKKyAgICAgICAgYm9vbCBpc0lu
QWxsb2NhdGVkTWVtb3J5KGNvbnN0IEFic3RyYWN0TG9ja2VyJiBsb2NrZXIsIHZvaWQqIGFkZHJl
c3MpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChCYXNlOjppc0luQWxsb2NhdGVkTWVtb3J5
KGxvY2tlciwgYWRkcmVzcykpCisgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAg
ICAgICBpZiAoT3B0aW9uYWw8c2l6ZV90PiBiaXQgPSBpc2xhbmRCaXQoYml0d2lzZV9jYXN0PHVp
bnRwdHJfdD4oYWRkcmVzcykpKSB7CisgICAgICAgICAgICAgICAgaWYgKGJpdC52YWx1ZSgpIDwg
aXNsYW5kQml0cy5zaXplKCkpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiAhIWlzbGFuZEJp
dHNbYml0LnZhbHVlKCldOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgICAgICB9CisKKyAgICAgICAgLy8gUmFuZ2U6IFtzdGFydCwgZW5kKQorICAgICAgICB2
b2lkKiBtX3N0YXJ0OworICAgICAgICB2b2lkKiBtX2VuZDsKKyAgICAgICAgRmFzdEJpdFZlY3Rv
ciBpc2xhbmRCaXRzOworICAgIH07CisjZW5kaWYgLy8gVVNFKEpVTVBfSVNMQU5EUykKKworICAg
IHRlbXBsYXRlIDx0eXBlbmFtZSBGdW5jdGlvbj4KKyAgICB2b2lkIGZvckVhY2hBbGxvY2F0b3Io
RnVuY3Rpb24gZnVuY3Rpb24pCisgICAgeworI2lmIFVTRShKVU1QX0lTTEFORFMpCisgICAgICAg
IGZvciAoUmVnaW9uQWxsb2NhdG9yJiBhbGxvY2F0b3IgOiBtX2FsbG9jYXRvcnMpIHsKKyAgICAg
ICAgICAgIHVzaW5nIEZ1bmN0aW9uUmVzdWx0VHlwZSA9IGRlY2x0eXBlKGZ1bmN0aW9uKGFsbG9j
YXRvcikpOworICAgICAgICAgICAgaWYgY29uc3RleHByIChzdGQ6OmlzX3NhbWU8SXRlcmF0aW9u
U3RhdHVzLCBGdW5jdGlvblJlc3VsdFR5cGU+Ojp2YWx1ZSkgeworICAgICAgICAgICAgICAgIGlm
IChmdW5jdGlvbihhbGxvY2F0b3IpID09IEl0ZXJhdGlvblN0YXR1czo6RG9uZSkKKyAgICAgICAg
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAg
IHN0YXRpY19hc3NlcnQoc3RkOjppc19zYW1lPHZvaWQsIEZ1bmN0aW9uUmVzdWx0VHlwZT46OnZh
bHVlKTsKKyAgICAgICAgICAgICAgICBmdW5jdGlvbihhbGxvY2F0b3IpOworICAgICAgICAgICAg
fQorICAgICAgICB9CisjZWxzZQorICAgICAgICBmdW5jdGlvbihtX2FsbG9jYXRvcik7CisjZW5k
aWYgLy8gVVNFKEpVTVBfSVNMQU5EUykKKyAgICB9CisKKyNpZiBVU0UoSlVNUF9JU0xBTkRTKQor
ICAgIGNsYXNzIElzbGFuZHMgOiBwdWJsaWMgUmVkQmxhY2tUcmVlPElzbGFuZHMsIHZvaWQqPjo6
Tm9kZSB7CisgICAgICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworICAgIHB1YmxpYzoKKyAg
ICAgICAgdm9pZCoga2V5KCkgeyByZXR1cm4gcm9vdEp1bXBMb2NhdGlvbi5kYXRhTG9jYXRpb24o
KTsgfQorICAgICAgICBDb2RlTG9jYXRpb25MYWJlbDxFeGVjdXRhYmxlTWVtb3J5UHRyVGFnPiBy
b290SnVtcExvY2F0aW9uOworICAgICAgICBWZWN0b3I8Q29kZUxvY2F0aW9uTGFiZWw8RXhlY3V0
YWJsZU1lbW9yeVB0clRhZz4+IGp1bXBJc2xhbmRzOworICAgIH07CisjZW5kaWYgLy8gVVNFKEpV
TVBfSVNMQU5EUykKKworICAgIExvY2sgbV9sb2NrOwogICAgIFBhZ2VSZXNlcnZhdGlvbiBtX3Jl
c2VydmF0aW9uOworI2lmIFVTRShKVU1QX0lTTEFORFMpCisgICAgc3RkOjphcnJheTxSZWdpb25B
bGxvY2F0b3IsIG51bWJlck9mUmVnaW9ucz4gbV9hbGxvY2F0b3JzOworICAgIFJlZEJsYWNrVHJl
ZTxJc2xhbmRzLCB2b2lkKj4gaXNsYW5kc0Zvckp1bXBMb2NhdGlvbjsKKyNlbHNlCisgICAgQWxs
b2NhdG9yIG1fYWxsb2NhdG9yOworI2VuZGlmIC8vIFVTRShKVU1QX0lTTEFORFMpCiB9OwogCi1G
aXhlZFZNUG9vbEV4ZWN1dGFibGVBbGxvY2F0b3I6On5GaXhlZFZNUG9vbEV4ZWN1dGFibGVBbGxv
Y2F0b3IoKQotewotICAgIG1fcmVzZXJ2YXRpb24uZGVhbGxvY2F0ZSgpOwotfQotCiAvLyBLZWVw
IHRoaXMgcG9pbnRlciBpbiBhIG11dGFibGUgZ2xvYmFsIHZhcmlhYmxlIHRvIGhlbHAgTGVha3Mg
ZmluZCBpdC4KIC8vIEJ1dCB3ZSBkbyBub3QgdXNlIHRoaXMgcG9pbnRlci4KIHN0YXRpYyBGaXhl
ZFZNUG9vbEV4ZWN1dGFibGVBbGxvY2F0b3IqIGdsb2JhbEZpeGVkVk1Qb29sRXhlY3V0YWJsZUFs
bG9jYXRvclRvV29ya0Fyb3VuZExlYWtzID0gbnVsbHB0cjsKQEAgLTQxNyw3ICs4MjUsNiBAQCB2
b2lkIEV4ZWN1dGFibGVBbGxvY2F0b3I6OmluaXRpYWxpemVVbmRlCiAgICAgUkVMRUFTRV9BU1NF
UlQoIWdfanNjQ29uZmlnLmZpeGVkVk1Qb29sRXhlY3V0YWJsZUFsbG9jYXRvcik7CiAgICAgZ19q
c2NDb25maWcuZml4ZWRWTVBvb2xFeGVjdXRhYmxlQWxsb2NhdG9yID0gbmV3IEZpeGVkVk1Qb29s
RXhlY3V0YWJsZUFsbG9jYXRvcigpOwogICAgIGdsb2JhbEZpeGVkVk1Qb29sRXhlY3V0YWJsZUFs
bG9jYXRvclRvV29ya0Fyb3VuZExlYWtzID0gZ19qc2NDb25maWcuZml4ZWRWTVBvb2xFeGVjdXRh
YmxlQWxsb2NhdG9yOwotICAgIENvZGVQcm9maWxpbmc6Om5vdGlmeUFsbG9jYXRvcihnX2pzY0Nv
bmZpZy5maXhlZFZNUG9vbEV4ZWN1dGFibGVBbGxvY2F0b3IpOwogfQogCiBib29sIEV4ZWN1dGFi
bGVBbGxvY2F0b3I6OmlzVmFsaWQoKSBjb25zdApAQCAtNDI1LDcgKzgzMiw3IEBAIGJvb2wgRXhl
Y3V0YWJsZUFsbG9jYXRvcjo6aXNWYWxpZCgpIGNvbnMKICAgICBGaXhlZFZNUG9vbEV4ZWN1dGFi
bGVBbGxvY2F0b3IqIGFsbG9jYXRvciA9IGdfanNjQ29uZmlnLmZpeGVkVk1Qb29sRXhlY3V0YWJs
ZUFsbG9jYXRvcjsKICAgICBpZiAoIWFsbG9jYXRvcikKICAgICAgICAgcmV0dXJuIEJhc2U6Omlz
VmFsaWQoKTsKLSAgICByZXR1cm4gISFhbGxvY2F0b3ItPmJ5dGVzUmVzZXJ2ZWQoKTsKKyAgICBy
ZXR1cm4gYWxsb2NhdG9yLT5pc1ZhbGlkKCk7CiB9CiAKIGJvb2wgRXhlY3V0YWJsZUFsbG9jYXRv
cjo6dW5kZXJNZW1vcnlQcmVzc3VyZSgpCkBAIC00NTYsMTEgKzg2MywxMSBAQCBkb3VibGUgRXhl
Y3V0YWJsZUFsbG9jYXRvcjo6bWVtb3J5UHJlc3N1CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAot
UmVmUHRyPEV4ZWN1dGFibGVNZW1vcnlIYW5kbGU+IEV4ZWN1dGFibGVBbGxvY2F0b3I6OmFsbG9j
YXRlKHNpemVfdCBzaXplSW5CeXRlcywgdm9pZCogb3duZXJVSUQsIEpJVENvbXBpbGF0aW9uRWZm
b3J0IGVmZm9ydCkKK1JlZlB0cjxFeGVjdXRhYmxlTWVtb3J5SGFuZGxlPiBFeGVjdXRhYmxlQWxs
b2NhdG9yOjphbGxvY2F0ZShzaXplX3Qgc2l6ZUluQnl0ZXMsIEpJVENvbXBpbGF0aW9uRWZmb3J0
IGVmZm9ydCkKIHsKICAgICBGaXhlZFZNUG9vbEV4ZWN1dGFibGVBbGxvY2F0b3IqIGFsbG9jYXRv
ciA9IGdfanNjQ29uZmlnLmZpeGVkVk1Qb29sRXhlY3V0YWJsZUFsbG9jYXRvcjsKICAgICBpZiAo
IWFsbG9jYXRvcikKLSAgICAgICAgcmV0dXJuIEJhc2U6OmFsbG9jYXRlKHNpemVJbkJ5dGVzLCBv
d25lclVJRCwgZWZmb3J0KTsKKyAgICAgICAgcmV0dXJuIEJhc2U6OmFsbG9jYXRlKHNpemVJbkJ5
dGVzLCBlZmZvcnQpOwogICAgIGlmIChPcHRpb25zOjpsb2dFeGVjdXRhYmxlQWxsb2NhdGlvbigp
KSB7CiAgICAgICAgIE1ldGFBbGxvY2F0b3I6OlN0YXRpc3RpY3Mgc3RhdHMgPSBhbGxvY2F0b3It
PmN1cnJlbnRTdGF0aXN0aWNzKCk7CiAgICAgICAgIGRhdGFMb2coIkFsbG9jYXRpbmcgIiwgc2l6
ZUluQnl0ZXMsICIgYnl0ZXMgb2YgZXhlY3V0YWJsZSBtZW1vcnkgd2l0aCAiLCBzdGF0cy5ieXRl
c0FsbG9jYXRlZCwgIiBieXRlcyBhbGxvY2F0ZWQsICIsIHN0YXRzLmJ5dGVzUmVzZXJ2ZWQsICIg
Ynl0ZXMgcmVzZXJ2ZWQsIGFuZCAiLCBzdGF0cy5ieXRlc0NvbW1pdHRlZCwgIiBjb21taXR0ZWQu
XG4iKTsKQEAgLTQ4Nyw3ICs4OTQsNyBAQCBSZWZQdHI8RXhlY3V0YWJsZU1lbW9yeUhhbmRsZT4g
RXhlY3V0YWJsCiAgICAgICAgIH0KICAgICB9CiAKLSAgICBSZWZQdHI8RXhlY3V0YWJsZU1lbW9y
eUhhbmRsZT4gcmVzdWx0ID0gYWxsb2NhdG9yLT5hbGxvY2F0ZShzaXplSW5CeXRlcywgb3duZXJV
SUQpOworICAgIFJlZlB0cjxFeGVjdXRhYmxlTWVtb3J5SGFuZGxlPiByZXN1bHQgPSBhbGxvY2F0
b3ItPmFsbG9jYXRlKHNpemVJbkJ5dGVzKTsKICAgICBpZiAoIXJlc3VsdCkgewogICAgICAgICBp
ZiAoZWZmb3J0ICE9IEpJVENvbXBpbGF0aW9uQ2FuRmFpbCkgewogICAgICAgICAgICAgZGF0YUxv
ZygiUmFuIG91dCBvZiBleGVjdXRhYmxlIG1lbW9yeSB3aGlsZSBhbGxvY2F0aW5nICIsIHNpemVJ
bkJ5dGVzLCAiIGJ5dGVzLlxuIik7CkBAIC01MzksNiArOTQ2LDI2IEBAIHZvaWQgRXhlY3V0YWJs
ZUFsbG9jYXRvcjo6ZHVtcFByb2ZpbGUoKQogfQogI2VuZGlmCiAKKyNpZiBVU0UoSlVNUF9JU0xB
TkRTKQordm9pZCogRXhlY3V0YWJsZUFsbG9jYXRvcjo6Z2V0SnVtcElzbGFuZFRvKHZvaWQqIGZy
b20sIHZvaWQqIG5ld0Rlc3RpbmF0aW9uKQoreworICAgIEZpeGVkVk1Qb29sRXhlY3V0YWJsZUFs
bG9jYXRvciogYWxsb2NhdG9yID0gZ19qc2NDb25maWcuZml4ZWRWTVBvb2xFeGVjdXRhYmxlQWxs
b2NhdG9yOworICAgIGlmICghYWxsb2NhdG9yKQorICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1Rf
UkVBQ0hFRCgpOworCisgICAgcmV0dXJuIGFsbG9jYXRvci0+bWFrZUlzbGFuZChiaXR3aXNlX2Nh
c3Q8dWludHB0cl90Pihmcm9tKSwgYml0d2lzZV9jYXN0PHVpbnRwdHJfdD4obmV3RGVzdGluYXRp
b24pLCBmYWxzZSk7Cit9CisKK3ZvaWQqIEV4ZWN1dGFibGVBbGxvY2F0b3I6OmdldEp1bXBJc2xh
bmRUb0NvbmN1cnJlbnRseSh2b2lkKiBmcm9tLCB2b2lkKiBuZXdEZXN0aW5hdGlvbikKK3sKKyAg
ICBGaXhlZFZNUG9vbEV4ZWN1dGFibGVBbGxvY2F0b3IqIGFsbG9jYXRvciA9IGdfanNjQ29uZmln
LmZpeGVkVk1Qb29sRXhlY3V0YWJsZUFsbG9jYXRvcjsKKyAgICBpZiAoIWFsbG9jYXRvcikKKyAg
ICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKworICAgIHJldHVybiBhbGxvY2F0
b3ItPm1ha2VJc2xhbmQoYml0d2lzZV9jYXN0PHVpbnRwdHJfdD4oZnJvbSksIGJpdHdpc2VfY2Fz
dDx1aW50cHRyX3Q+KG5ld0Rlc3RpbmF0aW9uKSwgdHJ1ZSk7Cit9CisjZW5kaWYKKwogdm9pZCog
c3RhcnRPZkZpeGVkRXhlY3V0YWJsZU1lbW9yeVBvb2xJbXBsKCkKIHsKICAgICBGaXhlZFZNUG9v
bEV4ZWN1dGFibGVBbGxvY2F0b3IqIGFsbG9jYXRvciA9IGdfanNjQ29uZmlnLmZpeGVkVk1Qb29s
RXhlY3V0YWJsZUFsbG9jYXRvcjsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvRXhl
Y3V0YWJsZUFsbG9jYXRvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvRXhlY3V0YWJsZUFsbG9jYXRvci5oCShyZXZpc2lvbiAyNTgzNTApCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L0V4ZWN1dGFibGVBbGxvY2F0b3IuaAkod29ya2luZyBjb3B5KQpAQCAt
NzEsNyArNzEsNyBAQCBwdWJsaWM6CiAKICAgICBzdGF0aWMgdm9pZCBkdW1wUHJvZmlsZSgpIHsg
fQogCi0gICAgUmVmUHRyPEV4ZWN1dGFibGVNZW1vcnlIYW5kbGU+IGFsbG9jYXRlKHNpemVfdCwg
dm9pZCosIEpJVENvbXBpbGF0aW9uRWZmb3J0KSB7IHJldHVybiBudWxscHRyOyB9CisgICAgUmVm
UHRyPEV4ZWN1dGFibGVNZW1vcnlIYW5kbGU+IGFsbG9jYXRlKHNpemVfdCwgSklUQ29tcGlsYXRp
b25FZmZvcnQpIHsgcmV0dXJuIG51bGxwdHI7IH0KIAogICAgIHN0YXRpYyB2b2lkIHNldEpJVEVu
YWJsZWQoYm9vbCkgeyB9OwogICAgIApAQCAtMTc2LDcgKzE3Niw3IEBAIHB1YmxpYzoKICAgICAK
ICAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgdm9pZCBzZXRKSVRFbmFibGVkKGJvb2wpOwog
Ci0gICAgUmVmUHRyPEV4ZWN1dGFibGVNZW1vcnlIYW5kbGU+IGFsbG9jYXRlKHNpemVfdCBzaXpl
SW5CeXRlcywgdm9pZCogb3duZXJVSUQsIEpJVENvbXBpbGF0aW9uRWZmb3J0KTsKKyAgICBSZWZQ
dHI8RXhlY3V0YWJsZU1lbW9yeUhhbmRsZT4gYWxsb2NhdGUoc2l6ZV90IHNpemVJbkJ5dGVzLCBK
SVRDb21waWxhdGlvbkVmZm9ydCk7CiAKICAgICBib29sIGlzVmFsaWRFeGVjdXRhYmxlTWVtb3J5
KGNvbnN0IEFic3RyYWN0TG9ja2VyJiwgdm9pZCogYWRkcmVzcyk7CiAKQEAgLTE4NCw2ICsxODQs
MTEgQEAgcHVibGljOgogCiAgICAgTG9jayYgZ2V0TG9jaygpIGNvbnN0OwogCisjaWYgVVNFKEpV
TVBfSVNMQU5EUykKKyAgICB2b2lkKiBnZXRKdW1wSXNsYW5kVG8odm9pZCogZnJvbSwgdm9pZCog
bmV3RGVzdGluYXRpb24pOworICAgIHZvaWQqIGdldEp1bXBJc2xhbmRUb0NvbmN1cnJlbnRseSh2
b2lkKiBmcm9tLCB2b2lkKiBuZXdEZXN0aW5hdGlvbik7CisjZW5kaWYKKwogcHJpdmF0ZToKICAg
ICBFeGVjdXRhYmxlQWxsb2NhdG9yKCkgPSBkZWZhdWx0OwogICAgIH5FeGVjdXRhYmxlQWxsb2Nh
dG9yKCkgPSBkZWZhdWx0OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29t
bW9uU2xvd1BhdGhzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9Db21tb25TbG93UGF0aHMuY3BwCShyZXZpc2lvbiAyNTgzNTApCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9Db21tb25TbG93UGF0aHMuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0zMiw3ICszMiw2IEBACiAjaW5jbHVkZSAiQnl0ZWNvZGVTdHJ1Y3RzLmgiCiAjaW5jbHVkZSAi
Q2FsbEZyYW1lLmgiCiAjaW5jbHVkZSAiQ2xvbmVkQXJndW1lbnRzLmgiCi0jaW5jbHVkZSAiQ29k
ZVByb2ZpbGluZy5oIgogI2luY2x1ZGUgIkRlZmluZVByb3BlcnR5QXR0cmlidXRlcy5oIgogI2lu
Y2x1ZGUgIkRpcmVjdEFyZ3VtZW50cy5oIgogI2luY2x1ZGUgIkVycm9yLmgiCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db21wbGV0aW9uLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db21wbGV0aW9uLmNwcAkocmV2aXNpb24gMjU4
MzUwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29tcGxldGlvbi5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTI3LDcgKzI3LDYgQEAKICNpbmNsdWRlICJDYWxsRnJhbWUuaCIKICNp
bmNsdWRlICJDYXRjaFNjb3BlLmgiCiAjaW5jbHVkZSAiQ29kZUNhY2hlLmgiCi0jaW5jbHVkZSAi
Q29kZVByb2ZpbGluZy5oIgogI2luY2x1ZGUgIkV4Y2VwdGlvbi5oIgogI2luY2x1ZGUgIklkZW50
aWZpZXJJbmxpbmVzLmgiCiAjaW5jbHVkZSAiSW50ZXJwcmV0ZXIuaCIKQEAgLTEzOCw4ICsxMzcs
NiBAQCBKU1ZhbHVlIGV2YWx1YXRlKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPCiAgICAgUkVMRUFT
RV9BU1NFUlQodm0uYXRvbVN0cmluZ1RhYmxlKCkgPT0gVGhyZWFkOjpjdXJyZW50KCkuYXRvbVN0
cmluZ1RhYmxlKCkpOwogICAgIFJFTEVBU0VfQVNTRVJUKCF2bS5pc0NvbGxlY3RvckJ1c3lPbkN1
cnJlbnRUaHJlYWQoKSk7CiAKLSAgICBDb2RlUHJvZmlsaW5nIHByb2ZpbGUoc291cmNlKTsKLQog
ICAgIGlmICghdGhpc1ZhbHVlIHx8IHRoaXNWYWx1ZS5pc1VuZGVmaW5lZE9yTnVsbCgpKQogICAg
ICAgICB0aGlzVmFsdWUgPSBnbG9iYWxPYmplY3Q7CiAgICAgSlNPYmplY3QqIHRoaXNPYmogPSBq
c0Nhc3Q8SlNPYmplY3QqPih0aGlzVmFsdWUudG9UaGlzKGdsb2JhbE9iamVjdCwgTm90U3RyaWN0
TW9kZSkpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNNb2R1bGVMb2Fk
ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTW9k
dWxlTG9hZGVyLmNwcAkocmV2aXNpb24gMjU4MzUwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSlNNb2R1bGVMb2FkZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOSw3ICsyOSw2
IEBACiAKICNpbmNsdWRlICJCdWlsdGluTmFtZXMuaCIKICNpbmNsdWRlICJDYXRjaFNjb3BlLmgi
Ci0jaW5jbHVkZSAiQ29kZVByb2ZpbGluZy5oIgogI2luY2x1ZGUgIkVycm9yLmgiCiAjaW5jbHVk
ZSAiRXhjZXB0aW9uLmgiCiAjaW5jbHVkZSAiSlNDSW5saW5lcy5oIgpAQCAtNDAwLDggKzM5OSw2
IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgbW9kdWxlTG9hZGUKICAgICAgICAgcmV0
dXJuIEpTVmFsdWU6OmVuY29kZShKU1dlYkFzc2VtYmx5OjppbnN0YW50aWF0ZShnbG9iYWxPYmpl
Y3QsIHByb21pc2UsIG1vZHVsZUtleSwganNTb3VyY2VDb2RlKSk7CiAjZW5kaWYKIAotICAgIENv
ZGVQcm9maWxpbmcgcHJvZmlsZShzb3VyY2VDb2RlKTsKLQogICAgIFBhcnNlckVycm9yIGVycm9y
OwogICAgIHN0ZDo6dW5pcXVlX3B0cjxNb2R1bGVQcm9ncmFtTm9kZT4gbW9kdWxlUHJvZ3JhbU5v
ZGUgPSBwYXJzZTxNb2R1bGVQcm9ncmFtTm9kZT4oCiAgICAgICAgIHZtLCBzb3VyY2VDb2RlLCBJ
ZGVudGlmaWVyKCksIEpTUGFyc2VyQnVpbHRpbk1vZGU6Ok5vdEJ1aWx0aW4sCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25zTGlzdC5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnNMaXN0LmgJKHJldmlzaW9uIDI1ODM1
MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnNMaXN0LmgJKHdvcmtp
bmcgY29weSkKQEAgLTUwMCw2ICs1MDAsNyBAQCBjb25zdGV4cHIgYm9vbCBlbmFibGVXZWJBc3Nl
bWJseVN0cmVhbWluCiAgICAgdihCb29sLCBmb3JjZU9TUkV4aXRUb0xMSW50LCBmYWxzZSwgTm9y
bWFsLCAiSWYgdHJ1ZSwgd2UgYWx3YXlzIGV4aXQgdG8gdGhlIExMSW50LiBJZiBmYWxzZSwgd2Ug
ZXhpdCB0byB3aGF0ZXZlciBpcyBtb3N0IGNvbnZlbmllbnQuIikgXAogICAgIHYoVW5zaWduZWQs
IGdldEJ5VmFsSUNNYXhOdW1iZXJPZklkZW50aWZpZXJzLCA0LCBOb3JtYWwsICJOdW1iZXIgb2Yg
aWRlbnRpZmllcnMgd2Ugc2VlIGluIHRoZSBMTEludCB0aGF0IGNvdWxkIGNhdXNlIHVzIHRvIGJh
aWwgb24gZ2VuZXJhdGluZyBhbiBJQyBmb3IgZ2V0X2J5X3ZhbC4iKSBcCiAgICAgdihCb29sLCB1
c2VQdWJsaWNDbGFzc0ZpZWxkcywgdHJ1ZSwgTm9ybWFsLCAiSWYgdHJ1ZSwgdGhlIHBhcnNlciB3
aWxsIHVuZGVyc3RhbmQgcHVibGljIGRhdGEgZmllbGRzIGluc2lkZSBjbGFzc2VzLiIpIFwKKyAg
ICB2KEJvb2wsIHVzZVJhbmRvbWl6aW5nRXhlY3V0YWJsZUlzbGFuZEFsbG9jYXRpb24sIGZhbHNl
LCBOb3JtYWwsICJGb3IgdGhlIGFybTY0IEV4ZWN1dGFibGVBbGxvY2F0b3IsIGlmIHRydWUsIHNl
bGVjdCB3aGljaCByZWdpb24gdG8gdXNlIHJhbmRvbWx5LiBUaGlzIGlzIHVzZWZ1bCBmb3IgdGVz
dGluZyB0aGF0IGp1bXAgaXNsYW5kcyB3b3JrLiIpIFwKIAogZW51bSBPcHRpb25FcXVpdmFsZW5j
ZSB7CiAgICAgU2FtZU9wdGlvbiwKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90b29scy9D
b2RlUHJvZmlsZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3Rvb2xz
L0NvZGVQcm9maWxlLmNwcAkocmV2aXNpb24gMjU4MzUwKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL3Rvb2xzL0NvZGVQcm9maWxlLmNwcAkobm9uZXhpc3RlbnQpCkBAIC0xLDE3MiArMCwwIEBA
Ci0vKgotICogQ29weXJpZ2h0IChDKSAyMDEyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQot
ICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0KLSNpbmNsdWRl
ICJjb25maWcuaCIKLSNpbmNsdWRlICJDb2RlUHJvZmlsZS5oIgotCi0jaW5jbHVkZSAiQ29kZUJs
b2NrLmgiCi0jaW5jbHVkZSAiQ29kZVByb2ZpbGluZy5oIgotI2luY2x1ZGUgIkxpbmtCdWZmZXIu
aCIKLSNpbmNsdWRlICJQcm9maWxlVHJlZU5vZGUuaCIKLSNpbmNsdWRlIDx3dGYvU3RhY2tUcmFj
ZS5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgotCi1uYW1lc3BhY2UgSlNDIHsK
LQotLy8gTWFwIGZyb20gQ29kZVR5cGUgZW51bSB0byBhIGNvcnJlc3BvbmRpbmcgbmFtZS4KLXN0
YXRpYyBjb25zdCBjaGFyKiBjb25zdCBzX2NvZGVUeXBlTmFtZXNbQ29kZVByb2ZpbGU6Ok51bWJl
ck9mQ29kZVR5cGVzXSA9IHsKLSAgICAiW1tFbmdpbmVDb2RlXV0iLAotICAgICJbW0dsb2JhbFRo
dW5rXV0iLAotICAgICJbW1JlZ0V4cENvZGVdXSIsCi0gICAgIltbREZHSklUXV0iLAotICAgICJb
W0Jhc2VsaW5lT25seV1dIiwKLSAgICAiW1tCYXNlbGluZVByb2ZpbGVdXSIsCi0gICAgIltbQmFz
ZWxpbmVPU1JdXSIsCi0gICAgIltbRW5naW5lRnJhbWVdXSIKLX07Ci0KLS8vIEhlbHBlciBmdW5j
dGlvbiwgdHJ1bmNhdGUgdHJhY2VzIHRvIHBydW5lIHRoZSBvdXRwdXQgJiBtYWtlIHZlcnkgdmVy
Ym9zZSBtb2RlIGEgbGl0dGxlIG1vcmUgcmVhZGFibGUuCi1zdGF0aWMgYm9vbCB0cnVuY2F0ZVRy
YWNlKGNvbnN0IGNoYXIqIHN5bWJvbE5hbWUpCi17Ci0gICAgcmV0dXJuICFzdHJjbXAoc3ltYm9s
TmFtZSwgIkpTQzo6Qnl0ZWNvZGVHZW5lcmF0b3I6OmdlbmVyYXRlKCkiKQotICAgICAgICB8fCAh
c3RyY21wKHN5bWJvbE5hbWUsICJKU0M6OlBhcnNlcjxKU0M6OkxleGVyPHVuc2lnbmVkIGNoYXI+
Pjo6cGFyc2VJbm5lcigpIikKLSAgICAgICAgfHwgIXN0cmNtcChzeW1ib2xOYW1lLCAiV1RGOjpm
YXN0TWFsbG9jKHVuc2lnbmVkIGxvbmcpIikKLSAgICAgICAgfHwgIXN0cmNtcChzeW1ib2xOYW1l
LCAiV1RGOjpjYWxjdWxhdGVVVENPZmZzZXQoKSIpCi0gICAgICAgIHx8ICFzdHJjbXAoc3ltYm9s
TmFtZSwgIkpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6cGFyc2VDb2RlQmxvY2soKSIpOwotICAg
ICAgICAKLX0KLQotLy8gRWFjaCB0cmFjZSBjb25zaXN0cyBvZiBhIHNlcXVlbmNlIG9mIHplcm8g
b3IgbW9yZSAnRW5naW5lRnJhbWUnIGVudHJpZXMsCi0vLyBmb2xsb3dlZCBieSBhIHNhbXBsZSBp
biBKSVQgY29kZSwgb3Igb25lIG9yIG1vcmUgJ0VuZ2luZUZyYW1lJyBlbnRyaWVzLAotLy8gZm9s
bG93ZWQgYnkgYSAnRW5naW5lQ29kZScgdGVybWluYXRvci4KLXZvaWQgQ29kZVByb2ZpbGU6OnNh
bXBsZSh2b2lkKiBwYywgdm9pZCoqIGZyYW1lUG9pbnRlcikKLXsKLSAgICAvLyBEaXNhbGxvdyB0
cmFjZXMgY29udGFpbmluZyBvbmx5IGEgJ0VuZ2luZUNvZGUnIHRlcm1pbmF0b3IsIHdpdGhvdXQg
YW55ICdFbmdpbmVGcmFtZScgZnJhbWVzLgotICAgIGlmICghZnJhbWVQb2ludGVyKQotICAgICAg
ICByZXR1cm47Ci0KLSAgICB3aGlsZSAoZnJhbWVQb2ludGVyKSB7Ci0gICAgICAgIENvZGVUeXBl
IHR5cGU7Ci0KLSNpZiBFTkFCTEUoSklUKQotICAgICAgICAvLyBEZXRlcm1pbmUgaWYgdGhpcyBz
YW1wbGUgZmVsbCBpbiBKSVQgY29kZSwgYW5kIGlmIHNvLCBmcm9tIHdoaWNoIEpJVCAmIHdoeS4K
LSAgICAgICAgdm9pZCogb3duZXJVSUQgPSBDb2RlUHJvZmlsaW5nOjpnZXRPd25lclVJREZvclBD
KHBjKTsKLQotICAgICAgICBpZiAoIW93bmVyVUlEKQotICAgICAgICAgICAgdHlwZSA9IEVuZ2lu
ZUZyYW1lOwotICAgICAgICBlbHNlIGlmIChvd25lclVJRCA9PSBHTE9CQUxfVEhVTktfSUQpCi0g
ICAgICAgICAgICB0eXBlID0gR2xvYmFsVGh1bms7Ci0gICAgICAgIGVsc2UgaWYgKG93bmVyVUlE
ID09IFJFR0VYUF9DT0RFX0lEKQotICAgICAgICAgICAgdHlwZSA9IFJlZ0V4cENvZGU7Ci0gICAg
ICAgIGVsc2UgewotICAgICAgICAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBzdGF0aWNfY2Fz
dDxDb2RlQmxvY2sqPihvd25lclVJRCk7Ci0gICAgICAgICAgICBpZiAoY29kZUJsb2NrLT5qaXRU
eXBlKCkgPT0gSklUVHlwZTo6REZHSklUKQotICAgICAgICAgICAgICAgIHR5cGUgPSBERkdKSVQ7
Ci0gICAgICAgICAgICBlbHNlIGlmICghY2FuQ29tcGlsZShjb2RlQmxvY2stPmNhcGFiaWxpdHlM
ZXZlbFN0YXRlKCkpKQotICAgICAgICAgICAgICAgIHR5cGUgPSBCYXNlbGluZU9ubHk7Ci0gICAg
ICAgICAgICBlbHNlIGlmIChjb2RlQmxvY2stPnJlcGxhY2VtZW50KCkpCi0gICAgICAgICAgICAg
ICAgdHlwZSA9IEJhc2VsaW5lT1NSOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAg
IHR5cGUgPSBCYXNlbGluZVByb2ZpbGU7Ci0gICAgICAgIH0KLSNlbHNlCi0gICAgICAgIHR5cGUg
PSBFbmdpbmVGcmFtZTsKLSNlbmRpZgotCi0gICAgICAgIC8vIEEgc2FtcGxlIGluIEpJVCBjb2Rl
IHRlcm1pbmF0ZXMgdGhlIHRyYWNlLgotICAgICAgICBtX3NhbXBsZXMuYXBwZW5kKENvZGVSZWNv
cmQocGMsIHR5cGUpKTsKLSAgICAgICAgaWYgKHR5cGUgIT0gRW5naW5lRnJhbWUpCi0gICAgICAg
ICAgICByZXR1cm47Ci0KLSNpZiBPUyhEQVJXSU4pICYmIENQVShYODZfNjQpCi0gICAgICAgIC8v
IFdhbGsgdXAgdGhlIHN0YWNrLgotICAgICAgICBwYyA9IGZyYW1lUG9pbnRlclsxXTsKLSAgICAg
ICAgZnJhbWVQb2ludGVyID0gcmVpbnRlcnByZXRfY2FzdDx2b2lkKio+KCpmcmFtZVBvaW50ZXIp
OwotI2VsaWYgT1MoTElOVVgpICYmIENQVShYODYpCi0gICAgICAgIC8vIERvbid0IHVud2luZCB0
aGUgc3RhY2sgYXMgc29tZSBkZXBlbmRlbnQgdGhpcmQgcGFydHkgbGlicmFyaWVzCi0gICAgICAg
IC8vIG1heSBiZSBjb21waWxlZCB3aXRoIC1mb21pdC1mcmFtZS1wb2ludGVyLgotICAgICAgICBm
cmFtZVBvaW50ZXIgPSAwOwotI2Vsc2UKLSAgICAgICAgLy8gVGhpcyBwbGF0Zm9ybSBpcyBub3Qg
eWV0IHN1cHBvcnRlZCEKLSAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSNl
bmRpZgotICAgIH0KLQotICAgIC8vIElmIHdlIGdldCBoZXJlLCB3ZSB3YWxrZWQgdGhlIGVudGly
ZSBzdGFjayB3aXRob3V0IGZpbmRpbmcgYW55IGZyYW1lcyBvZiBKSVQgY29kZS4KLSAgICBtX3Nh
bXBsZXMuYXBwZW5kKENvZGVSZWNvcmQoMCwgRW5naW5lQ29kZSkpOwotfQotCi12b2lkIENvZGVQ
cm9maWxlOjpyZXBvcnQoKQotewotICAgIGRhdGFMb2dGKCI8Q29kZVByb2ZpbGluZyAlczolZD5c
biIsIG1fZmlsZS5kYXRhKCksIG1fbGluZU51bWJlcik7Ci0KLSAgICAvLyBIb3cgbWFueSBmcmFt
ZXMgb2YgQy1jb2RlIHRvIHByaW50IC0gMCwgaWYgbm90IHZlcmJvc2UsIDEgaWYgdmVyYm9zZSwg
dXAgdG8gMTAyNCBpZiB2ZXJ5IHZlcmJvc2UuCi0gICAgdW5zaWduZWQgcmVjdXJzaW9uTGltaXQg
PSBDb2RlUHJvZmlsaW5nOjpiZVZlcnlWZXJib3NlKCkgPyAxMDI0IDogQ29kZVByb2ZpbGluZzo6
YmVWZXJib3NlKCk7Ci0KLSAgICBQcm9maWxlVHJlZU5vZGUgcHJvZmlsZTsKLQotICAgIC8vIFdh
bGsgdGhyb3VnaCB0aGUgc2FtcGxlIGJ1ZmZlci4KLSAgICBzaXplX3QgdHJhY2UgPSAwOwotICAg
IHdoaWxlICh0cmFjZSA8IG1fc2FtcGxlcy5zaXplKCkpIHsKLQotICAgICAgICAvLyBBbGwgdHJh
Y2VzIGFyZSB6ZXJvIG9yIG1vcmUgJ0VuZ2luZUZyYW1lJ3MsIGZvbGxvd2VkIGJ5IGEgbm9uLSdF
bmdpbmVGcmFtZScuCi0gICAgICAgIC8vIFNjYW4gdG8gZmluZCB0aGUgbGFzdCBzYW1wbGUgaW4g
dGhlIHRyYWNlLgotICAgICAgICBzaXplX3QgbGFzdEluVHJhY2UgPSB0cmFjZTsKLSAgICAgICAg
d2hpbGUgKG1fc2FtcGxlc1tsYXN0SW5UcmFjZV0udHlwZSA9PSBFbmdpbmVGcmFtZSkKLSAgICAg
ICAgICAgICsrbGFzdEluVHJhY2U7Ci0KLSAgICAgICAgLy8gV2UgdXNlIHRoZSBsYXN0IHNhbXBs
ZSB0eXBlIHRvIGxvb2sgdXAgYSBuYW1lICh1c2VkIGFzIGEgYnVja2V0IGluIHRoZSBwcm9maWxl
cikuCi0gICAgICAgIFByb2ZpbGVUcmVlTm9kZSogY2FsbGJhY2tzID0gcHJvZmlsZS5zYW1wbGVD
aGlsZChzX2NvZGVUeXBlTmFtZXNbbV9zYW1wbGVzW2xhc3RJblRyYWNlXS50eXBlXSk7Ci0KLSAg
ICAgICAgLy8gSWYgdGhlcmUgYXJlIGFueSBzYW1wbGVzIGluIEMtY29kZSwgYWRkIHVwIHRvIHJl
Y3Vyc2lvbkxpbWl0IG9mIHRoZW0gaW50byB0aGUgcHJvZmlsZSB0cmVlLgotICAgICAgICBzaXpl
X3QgbGFzdEVuZ2luZUZyYW1lID0gbGFzdEluVHJhY2U7Ci0gICAgICAgIGZvciAodW5zaWduZWQg
Y291bnQgPSAwOyBsYXN0RW5naW5lRnJhbWUgPiB0cmFjZSAmJiBjb3VudCA8IHJlY3Vyc2lvbkxp
bWl0OyArK2NvdW50KSB7Ci0gICAgICAgICAgICAtLWxhc3RFbmdpbmVGcmFtZTsKLSAgICAgICAg
ICAgIEFTU0VSVChtX3NhbXBsZXNbbGFzdEVuZ2luZUZyYW1lXS50eXBlID09IEVuZ2luZUZyYW1l
KTsKLSAgICAgICAgICAgIGNvbnN0IGNoYXIqIG5hbWUgPSAiPHVua25vd24+IjsKLSAgICAgICAg
ICAgIGF1dG8gZGVtYW5nbGVkID0gU3RhY2tUcmFjZTo6ZGVtYW5nbGUobV9zYW1wbGVzW2xhc3RF
bmdpbmVGcmFtZV0ucGMpOwotICAgICAgICAgICAgaWYgKGRlbWFuZ2xlZCkKLSAgICAgICAgICAg
ICAgICBuYW1lID0gZGVtYW5nbGVkLT5kZW1hbmdsZWROYW1lKCkgPyBkZW1hbmdsZWQtPmRlbWFu
Z2xlZE5hbWUoKSA6IGRlbWFuZ2xlZC0+bWFuZ2xlZE5hbWUoKTsKLSAgICAgICAgICAgIGNhbGxi
YWNrcyA9IGNhbGxiYWNrcy0+c2FtcGxlQ2hpbGQobmFtZSk7Ci0gICAgICAgICAgICBpZiAodHJ1
bmNhdGVUcmFjZShuYW1lKSkKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotCi0g
ICAgICAgIC8vIE1vdmUgb24gdG8gdGhlIG5leHQgdHJhY2UuCi0gICAgICAgIHRyYWNlID0gbGFz
dEluVHJhY2UgKyAxOwotICAgICAgICBBU1NFUlQodHJhY2UgPD0gbV9zYW1wbGVzLnNpemUoKSk7
Ci0gICAgfQotCi0gICAgLy8gT3V0cHV0IHRoZSBwcm9maWxlIHRyZWUuCi0gICAgZGF0YUxvZ0Yo
IlRvdGFsIHNhbXBsZXM6ICVsbGRcbiIsIHN0YXRpY19jYXN0PGxvbmcgbG9uZz4ocHJvZmlsZS5j
aGlsZENvdW50KCkpKTsKLSAgICBwcm9maWxlLmR1bXAoKTsKLSAgICAKLSAgICBmb3IgKHNpemVf
dCBpID0gMCA7IGkgPCBtX2NoaWxkcmVuLnNpemUoKTsgKytpKQotICAgICAgICBtX2NoaWxkcmVu
W2ldLT5yZXBvcnQoKTsKLQotICAgIGRhdGFMb2dGKCI8L0NvZGVQcm9maWxpbmcgJXM6JWQ+XG4i
LCBtX2ZpbGUuZGF0YSgpLCBtX2xpbmVOdW1iZXIpOwotfQotCi19CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvdG9vbHMvQ29kZVByb2ZpbGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvdG9vbHMvQ29kZVByb2ZpbGUuaAkocmV2aXNpb24gMjU4MzUwKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL3Rvb2xzL0NvZGVQcm9maWxlLmgJKG5vbmV4aXN0ZW50KQpAQCAt
MSw4OSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEyIEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1l
dDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICog
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICov
Ci0KLSNwcmFnbWEgb25jZQotCi0jaW5jbHVkZSAiU291cmNlQ29kZS5oIgotI2luY2x1ZGUgIlRp
ZXJlZE1NYXBBcnJheS5oIgotI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KLQotbmFtZXNw
YWNlIEpTQyB7Ci0KLWNsYXNzIENvZGVQcm9maWxlIHsKLSAgICBXVEZfTUFLRV9GQVNUX0FMTE9D
QVRFRDsKLXB1YmxpYzoKLSAgICBDb2RlUHJvZmlsZShjb25zdCBTb3VyY2VDb2RlJiBzb3VyY2Us
IENvZGVQcm9maWxlKiBwYXJlbnQpCi0gICAgICAgIDogbV9maWxlKFN0cmluZyhzb3VyY2UucHJv
dmlkZXIoKS0+dXJsKCkpLnV0ZjgoKSkKLSAgICAgICAgLCBtX2xpbmVOdW1iZXIoc291cmNlLmZp
cnN0TGluZSgpLm9uZUJhc2VkSW50KCkpCi0gICAgICAgICwgbV9wYXJlbnQocGFyZW50KQotICAg
IHsKLSAgICAgICAgaWYgKHBhcmVudCkKLSAgICAgICAgICAgIHBhcmVudC0+YWRkQ2hpbGQoc3Rk
Ojp1bmlxdWVfcHRyPENvZGVQcm9maWxlPih0aGlzKSk7Ci0gICAgfQotCi0gICAgdm9pZCBzYW1w
bGUodm9pZCogcGMsIHZvaWQqKiBmcmFtZVBvaW50ZXIpOwotICAgIHZvaWQgcmVwb3J0KCk7Ci0K
LSAgICBDb2RlUHJvZmlsZSogcGFyZW50KCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBtX3BhcmVu
dDsKLSAgICB9Ci0gICAgCi0gICAgdm9pZCBhZGRDaGlsZChzdGQ6OnVuaXF1ZV9wdHI8Q29kZVBy
b2ZpbGU+IGNoaWxkKQotICAgIHsKLSAgICAgICAgbV9jaGlsZHJlbi5hcHBlbmQoV1RGTW92ZShj
aGlsZCkpOwotICAgIH0KLQotICAgIGVudW0gQ29kZVR5cGUgewotICAgICAgICBFbmdpbmVDb2Rl
LAotICAgICAgICBHbG9iYWxUaHVuaywKLSAgICAgICAgUmVnRXhwQ29kZSwKLSAgICAgICAgREZH
SklULAotICAgICAgICBCYXNlbGluZU9ubHksCi0gICAgICAgIEJhc2VsaW5lUHJvZmlsZSwKLSAg
ICAgICAgQmFzZWxpbmVPU1IsCi0gICAgICAgIEVuZ2luZUZyYW1lLAotICAgICAgICBOdW1iZXJP
ZkNvZGVUeXBlcwotICAgIH07Ci0KLXByaXZhdGU6Ci0gICAgc3RydWN0IENvZGVSZWNvcmQgewot
ICAgICAgICBDb2RlUmVjb3JkKHZvaWQqIHBjLCBDb2RlVHlwZSB0eXBlKQotICAgICAgICAgICAg
OiBwYyhwYykKLSAgICAgICAgICAgICwgdHlwZSh0eXBlKQotICAgICAgICB7Ci0gICAgICAgIH0K
LSAgICAgICAgdm9pZCogcGM7Ci0gICAgICAgIENvZGVUeXBlIHR5cGU7Ci0gICAgfTsKLQotICAg
IENTdHJpbmcgbV9maWxlOwotICAgIHVuc2lnbmVkIG1fbGluZU51bWJlcjsKLSAgICBDb2RlUHJv
ZmlsZSogbV9wYXJlbnQ7Ci0gICAgVmVjdG9yPHN0ZDo6dW5pcXVlX3B0cjxDb2RlUHJvZmlsZT4+
IG1fY2hpbGRyZW47Ci0gICAgVGllcmVkTU1hcEFycmF5PENvZGVSZWNvcmQ+IG1fc2FtcGxlczsK
LX07Ci0KLX0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3Rv
b2xzL0NvZGVQcm9maWxpbmcuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS90b29scy9Db2RlUHJvZmlsaW5nLmNwcAkocmV2aXNpb24gMjU4MzUwKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL3Rvb2xzL0NvZGVQcm9maWxpbmcuY3BwCShub25leGlzdGVudCkKQEAgLTEs
MTY5ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTItMjAxOCBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFy
ZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IK
LSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAK
LSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiQ29kZVByb2ZpbGluZy5oIgot
Ci0jaW5jbHVkZSAiQ29kZVByb2ZpbGUuaCIKLSNpbmNsdWRlICJNYWNoaW5lQ29udGV4dC5oIgot
I2luY2x1ZGUgPHd0Zi9NZXRhQWxsb2NhdG9yLmg+Ci0KLSNpZiBIQVZFKFNJR05BTF9IKQotI2lu
Y2x1ZGUgPHNpZ25hbC5oPgotI2VuZGlmCi0KLSNpZiBIQVZFKE1BQ0hJTkVfQ09OVEVYVCkKLSNp
bmNsdWRlIDxzeXMvdGltZS5oPgotI2VuZGlmCi0KLW5hbWVzcGFjZSBKU0MgewotCi12b2xhdGls
ZSBDb2RlUHJvZmlsZSogQ29kZVByb2ZpbGluZzo6c19wcm9maWxlU3RhY2sgPSAwOwotQ29kZVBy
b2ZpbGluZzo6TW9kZSBDb2RlUHJvZmlsaW5nOjpzX21vZGUgPSBDb2RlUHJvZmlsaW5nOjpEaXNh
YmxlZDsKLVdURjo6TWV0YUFsbG9jYXRvclRyYWNrZXIqIENvZGVQcm9maWxpbmc6OnNfdHJhY2tl
ciA9IDA7Ci0KLUlHTk9SRV9XQVJOSU5HU19CRUdJTigibWlzc2luZy1ub3JldHVybiIpCi0KLSNp
ZiBIQVZFKE1BQ0hJTkVfQ09OVEVYVCkKLS8vIEhlbHBlciBmdW5jdGlvbiB0byBzdGFydCAmIHN0
b3AgdGhlIHRpbWVyLgotLy8gUHJlc2VudGx5IHdlJ3JlIHVzaW5nIHRoZSB3YWxsLWNsb2NrIHRp
bWVyLCBzaW5jZSB0aGlzIHNlZW1zIHRvIGdpdmUgdGhlIGJlc3QgcmVzdWx0cy4KLXN0YXRpYyB2
b2lkIHNldFByb2ZpbGVUaW1lcih1bnNpZ25lZCB1c2VjKQotewotICAgIGl0aW1lcnZhbCB0aW1l
cjsKLSAgICB0aW1lci5pdF92YWx1ZS50dl9zZWMgPSAwOwotICAgIHRpbWVyLml0X3ZhbHVlLnR2
X3VzZWMgPSB1c2VjOwotICAgIHRpbWVyLml0X2ludGVydmFsLnR2X3NlYyA9IDA7Ci0gICAgdGlt
ZXIuaXRfaW50ZXJ2YWwudHZfdXNlYyA9IHVzZWM7Ci0gICAgc2V0aXRpbWVyKElUSU1FUl9SRUFM
LCAmdGltZXIsIDApOwotfQotI2VuZGlmCi0KLUlHTk9SRV9XQVJOSU5HU19FTkQKLQotI2lmIEhB
VkUoTUFDSElORV9DT05URVhUKQotc3RhdGljIHZvaWQgcHJvZmlsaW5nVGltZXIoaW50LCBzaWdp
bmZvX3QqLCB2b2lkKiB1YXApCi17Ci0gICAgUGxhdGZvcm1SZWdpc3RlcnMmIHBsYXRmb3JtUmVn
aXN0ZXJzID0gV1RGOjpyZWdpc3RlcnNGcm9tVUNvbnRleHQoc3RhdGljX2Nhc3Q8dWNvbnRleHRf
dCo+KHVhcCkpOwotICAgIGlmIChhdXRvIGluc3RydWN0aW9uUG9pbnRlciA9IE1hY2hpbmVDb250
ZXh0OjppbnN0cnVjdGlvblBvaW50ZXIocGxhdGZvcm1SZWdpc3RlcnMpKSB7Ci0gICAgICAgIENv
ZGVQcm9maWxpbmc6OnNhbXBsZSgKLSAgICAgICAgICAgIGluc3RydWN0aW9uUG9pbnRlci0+dW50
YWdnZWRFeGVjdXRhYmxlQWRkcmVzcygpLAotICAgICAgICAgICAgcmVpbnRlcnByZXRfY2FzdDx2
b2lkKio+KE1hY2hpbmVDb250ZXh0OjpmcmFtZVBvaW50ZXIocGxhdGZvcm1SZWdpc3RlcnMpKSk7
Ci0gICAgfQotfQotI2VuZGlmCi0KLS8vIENhbGxiYWNrIHRyaWdnZXJlZCB3aGVuIHRoZSB0aW1l
ciBpcyBmaXJlZC4KLXZvaWQgQ29kZVByb2ZpbGluZzo6c2FtcGxlKHZvaWQqIHBjLCB2b2lkKiog
ZnJhbWVQb2ludGVyKQotewotICAgIENvZGVQcm9maWxlKiBwcm9maWxlU3RhY2sgPSBjb25zdF9j
YXN0PENvZGVQcm9maWxlKj4oc19wcm9maWxlU3RhY2spOwotICAgIGlmIChwcm9maWxlU3RhY2sp
Ci0gICAgICAgIHByb2ZpbGVTdGFjay0+c2FtcGxlKHBjLCBmcmFtZVBvaW50ZXIpOwotfQotCi12
b2lkIENvZGVQcm9maWxpbmc6Om5vdGlmeUFsbG9jYXRvcihXVEY6Ok1ldGFBbGxvY2F0b3IqIGFs
bG9jYXRvcikKLXsKLSAgICAvLyBDaGVjayBmb3IgSlNDX0NPREVfUFJPRklMSU5HLgotICAgIGNv
bnN0IGNoYXIqIGNvZGVQcm9maWxpbmdNb2RlID0gZ2V0ZW52KCJKU0NfQ09ERV9QUk9GSUxJTkci
KTsKLSAgICBpZiAoIWNvZGVQcm9maWxpbmdNb2RlKQotICAgICAgICByZXR1cm47Ci0KLSAgICAv
LyBDaGVjayBmb3IgYSB2YWxpZCBtb2RlLCBjdXJyZW50bHkgIjEiLCAiMiIsIG9yICIzIi4KLSAg
ICBpZiAoIWNvZGVQcm9maWxpbmdNb2RlWzBdIHx8IGNvZGVQcm9maWxpbmdNb2RlWzFdKQotICAg
ICAgICByZXR1cm47Ci0gICAgc3dpdGNoICgqY29kZVByb2ZpbGluZ01vZGUpIHsKLSAgICBjYXNl
ICcxJzoKLSAgICAgICAgc19tb2RlID0gRW5hYmxlZDsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2Fz
ZSAnMic6Ci0gICAgICAgIHNfbW9kZSA9IFZlcmJvc2U7Ci0gICAgICAgIGJyZWFrOwotICAgIGNh
c2UgJzMnOgotICAgICAgICBzX21vZGUgPSBWZXJ5VmVyYm9zZTsKLSAgICAgICAgYnJlYWs7Ci0g
ICAgZGVmYXVsdDoKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIEFTU0VSVChlbmFibGVk
KCkpOwotICAgIEFTU0VSVCghc190cmFja2VyKTsKLSAgICBzX3RyYWNrZXIgPSBuZXcgV1RGOjpN
ZXRhQWxsb2NhdG9yVHJhY2tlcigpOwotICAgIGFsbG9jYXRvci0+dHJhY2tBbGxvY2F0aW9ucyhz
X3RyYWNrZXIpOwotfQotCi12b2lkKiBDb2RlUHJvZmlsaW5nOjpnZXRPd25lclVJREZvclBDKHZv
aWQqIGFkZHJlc3MpCi17Ci0gICAgaWYgKCFzX3RyYWNrZXIpCi0gICAgICAgIHJldHVybiAwOwot
ICAgIFdURjo6TWV0YUFsbG9jYXRvckhhbmRsZSogaGFuZGxlID0gc190cmFja2VyLT5maW5kKGFk
ZHJlc3MpOwotICAgIGlmICghaGFuZGxlKQotICAgICAgICByZXR1cm4gMDsKLSAgICByZXR1cm4g
aGFuZGxlLT5vd25lclVJRCgpOwotfQotCi12b2lkIENvZGVQcm9maWxpbmc6OmJlZ2luKGNvbnN0
IFNvdXJjZUNvZGUmIHNvdXJjZSkKLXsKLSAgICAvLyBQdXNoIGEgbmV3IENvZGVQcm9maWxlIG9u
dG8gdGhlIHN0YWNrIGZvciBlYWNoIHNjcmlwdCBlbmNvdW50ZXJlZC4KLSAgICBDb2RlUHJvZmls
ZSogcHJvZmlsZVN0YWNrID0gY29uc3RfY2FzdDxDb2RlUHJvZmlsZSo+KHNfcHJvZmlsZVN0YWNr
KTsKLSAgICBib29sIGFscmVhZHlQcm9maWxpbmcgPSBwcm9maWxlU3RhY2s7Ci0gICAgc19wcm9m
aWxlU3RhY2sgPSBwcm9maWxlU3RhY2sgPSBuZXcgQ29kZVByb2ZpbGUoc291cmNlLCBwcm9maWxl
U3RhY2spOwotCi0gICAgLy8gSXMgdGhlIHByb2ZpbGVyIGFscmVhZHkgcnVubmluZyAtIGlmIHNv
LCB0aGUgdGltZXIgd2lsbCBhbHJlYWR5IGJlIHNldCB1cC4KLSAgICBpZiAoYWxyZWFkeVByb2Zp
bGluZykKLSAgICAgICAgcmV0dXJuOwotCi0jaWYgSEFWRShNQUNISU5FX0NPTlRFWFQpCi0gICAg
Ly8gUmVnc2l0ZXIgYSBzaWduYWwgaGFuZGxlciAmIGl0aW1lci4KLSAgICBzdHJ1Y3Qgc2lnYWN0
aW9uIGFjdGlvbjsKLSAgICBhY3Rpb24uc2Ffc2lnYWN0aW9uID0gcmVpbnRlcnByZXRfY2FzdDx2
b2lkICgqKShpbnQsIHNpZ2luZm9fdCAqLCB2b2lkICopPihwcm9maWxpbmdUaW1lcik7Ci0gICAg
c2lnZmlsbHNldCgmYWN0aW9uLnNhX21hc2spOwotICAgIGFjdGlvbi5zYV9mbGFncyA9IFNBX1NJ
R0lORk87Ci0gICAgc2lnYWN0aW9uKFNJR0FMUk0sICZhY3Rpb24sIDApOwotICAgIHNldFByb2Zp
bGVUaW1lcigxMDApOwotI2VuZGlmCi19Ci0KLXZvaWQgQ29kZVByb2ZpbGluZzo6ZW5kKCkKLXsK
LSAgICAvLyBQb3AgdGhlIGN1cnJlbnQgcHJvZmlsZXIgb2ZmIHRoZSBzdGFjay4KLSAgICBDb2Rl
UHJvZmlsZSogY3VycmVudCA9IGNvbnN0X2Nhc3Q8Q29kZVByb2ZpbGUqPihzX3Byb2ZpbGVTdGFj
ayk7Ci0gICAgQVNTRVJUKGN1cnJlbnQpOwotICAgIHNfcHJvZmlsZVN0YWNrID0gY3VycmVudC0+
cGFyZW50KCk7Ci0KLSAgICAvLyBJcyB0aGlzIHRoZSBvdXRlcm1vc3Qgc2NyaXB0IGJlaW5nIHBy
b2ZpbGVkPyAtIGlmIG5vdCwganVzdCByZXR1cm4uCi0gICAgLy8gV2UgcGVyZm9ybSBhbGwgb3V0
cHV0IG9mIHByb2ZpbGVzIHJlY3Vyc2l2ZWx5IGZyb20gdGhlIG91dGVybW9zdCBzY3JpcHQsCi0g
ICAgLy8gdG8gbWluaW1pemUgcHJvZmlsaW5nIG92ZXJoZWFkIGZyb20gc2tld2luZyByZXN1bHRz
LgotICAgIGlmIChzX3Byb2ZpbGVTdGFjaykKLSAgICAgICAgcmV0dXJuOwotCi0jaWYgSEFWRShN
QUNISU5FX0NPTlRFWFQpCi0gICAgLy8gU3RvcCBwcm9maWxpbmcKLSAgICBzZXRQcm9maWxlVGlt
ZXIoMCk7Ci0jZW5kaWYKLQotICAgIGN1cnJlbnQtPnJlcG9ydCgpOwotICAgIGRlbGV0ZSBjdXJy
ZW50OwotfQotCi19CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvdG9vbHMvQ29kZVByb2Zp
bGluZy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90b29scy9Db2RlUHJv
ZmlsaW5nLmgJKHJldmlzaW9uIDI1ODM1MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90b29s
cy9Db2RlUHJvZmlsaW5nLmgJKG5vbmV4aXN0ZW50KQpAQCAtMSw4MSArMCwwIEBACi0vKgotICog
Q29weXJpZ2h0IChDKSAyMDEyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0g
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJ
UycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0g
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0KLSNwcmFnbWEgb25jZQotCi1u
YW1lc3BhY2UgV1RGIHsKLQotY2xhc3MgTWV0YUFsbG9jYXRvcjsKLWNsYXNzIE1ldGFBbGxvY2F0
b3JUcmFja2VyOwotCi19Ci0KLW5hbWVzcGFjZSBKU0MgewotCi1jbGFzcyBDb2RlUHJvZmlsZTsK
LWNsYXNzIFNvdXJjZUNvZGU7Ci0KLWNsYXNzIENvZGVQcm9maWxpbmcgewotICAgIGVudW0gTW9k
ZSB7Ci0gICAgICAgIERpc2FibGVkLAotICAgICAgICBFbmFibGVkLAotICAgICAgICBWZXJib3Nl
LAotICAgICAgICBWZXJ5VmVyYm9zZQotICAgIH07Ci0KLXB1YmxpYzoKLSAgICBDb2RlUHJvZmls
aW5nKGNvbnN0IFNvdXJjZUNvZGUmIHNvdXJjZSkKLSAgICAgICAgOiBtX2FjdGl2ZShlbmFibGVk
KCkpCi0gICAgewotICAgICAgICBpZiAobV9hY3RpdmUpCi0gICAgICAgICAgICBiZWdpbihzb3Vy
Y2UpOwotICAgIH0KLQotICAgIH5Db2RlUHJvZmlsaW5nKCkKLSAgICB7Ci0gICAgICAgIGlmICht
X2FjdGl2ZSkKLSAgICAgICAgICAgIGVuZCgpOwotICAgIH0KLQotICAgIHN0YXRpYyBib29sIGVu
YWJsZWQoKSB7IHJldHVybiBzX21vZGUgIT0gRGlzYWJsZWQ7IH0KLSAgICBzdGF0aWMgYm9vbCBi
ZVZlcmJvc2UoKSB7IHJldHVybiBzX21vZGUgPj0gVmVyYm9zZTsgfQotICAgIHN0YXRpYyBib29s
IGJlVmVyeVZlcmJvc2UoKSB7IHJldHVybiBzX21vZGUgPj0gVmVyeVZlcmJvc2U7IH0KLQotICAg
IHN0YXRpYyB2b2lkIG5vdGlmeUFsbG9jYXRvcihXVEY6Ok1ldGFBbGxvY2F0b3IqKTsKLSAgICBz
dGF0aWMgdm9pZCogZ2V0T3duZXJVSURGb3JQQyh2b2lkKik7Ci0gICAgc3RhdGljIHZvaWQgc2Ft
cGxlKHZvaWQqIHBjLCB2b2lkKiogZnJhbWVQb2ludGVyKTsKLQotcHJpdmF0ZToKLSAgICB2b2lk
IGJlZ2luKGNvbnN0IFNvdXJjZUNvZGUmKTsKLSAgICB2b2lkIGVuZCgpOwotCi0gICAgYm9vbCBt
X2FjdGl2ZTsKLQotICAgIHN0YXRpYyBNb2RlIHNfbW9kZTsKLSAgICBzdGF0aWMgV1RGOjpNZXRh
QWxsb2NhdG9yVHJhY2tlciogc190cmFja2VyOwotICAgIHN0YXRpYyB2b2xhdGlsZSBDb2RlUHJv
ZmlsZSogc19wcm9maWxlU3RhY2s7Ci19OwotCi19IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21CQlFQbGFuLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQkJRUGxhbi5jcHAJKHJldmlzaW9uIDI1ODM1
MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21CQlFQbGFuLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMTMyLDEzICsxMzIsOSBAQCB2b2lkIEJCUVBsYW46OndvcmsoQ29tcGlsYXRp
b25FZmZvcnQgZWZmCiAgICAgICAgIC8vIHdpbGwgdXBkYXRlLiBJdCdzIGFsc28gb2sgaWYgdGhl
eSBwdWJsaXNoIHRoZWlyIGNvZGUgYmVmb3JlIHdlIHJlc2V0IHRoZSBpbnN0cnVjdGlvbiBjYWNo
ZXMgYmVjYXVzZSBhZnRlciB3ZSByZWxlYXNlCiAgICAgICAgIC8vIHRoZSBsb2NrIG91ciBjb2Rl
IGlzIHJlYWR5IHRvIGJlIHB1Ymxpc2hlZCB0b28uCiAgICAgICAgIExvY2tIb2xkZXIgaG9sZGVy
KG1fY29kZUJsb2NrLT5tX2xvY2spOworCiAgICAgICAgIG1fY29kZUJsb2NrLT5tX2JicUNhbGxl
ZXNbbV9mdW5jdGlvbkluZGV4XSA9IGNhbGxlZS5jb3B5UmVmKCk7Ci0gICAgICAgIHsKLSAgICAg
ICAgICAgIExMSW50Q2FsbGVlJiBsbGludENhbGxlZSA9IG1fY29kZUJsb2NrLT5tX2xsaW50Q2Fs
bGVlcy0+YXQobV9mdW5jdGlvbkluZGV4KS5nZXQoKTsKLSAgICAgICAgICAgIGF1dG8gbG9ja2Vy
ID0gaG9sZExvY2sobGxpbnRDYWxsZWUudGllclVwQ291bnRlcigpLm1fbG9jayk7Ci0gICAgICAg
ICAgICBsbGludENhbGxlZS5zZXRSZXBsYWNlbWVudChjYWxsZWUuY29weVJlZigpKTsKLSAgICAg
ICAgICAgIGxsaW50Q2FsbGVlLnRpZXJVcENvdW50ZXIoKS5tX2NvbXBpbGF0aW9uU3RhdHVzID0g
TExJbnRUaWVyVXBDb3VudGVyOjpDb21waWxhdGlvblN0YXR1czo6Q29tcGlsZWQ7Ci0gICAgICAg
IH0KKwogICAgICAgICBmb3IgKGF1dG8mIGNhbGwgOiBjYWxsZWUtPndhc21Ub1dhc21DYWxsc2l0
ZXMoKSkgewogICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPFdhc21FbnRyeVB0clRh
Zz4gZW50cnlwb2ludDsKICAgICAgICAgICAgIGlmIChjYWxsLmZ1bmN0aW9uSW5kZXhTcGFjZSA8
IG1fbW9kdWxlSW5mb3JtYXRpb24tPmltcG9ydEZ1bmN0aW9uQ291bnQoKSkKQEAgLTE0OCwyNCAr
MTQ0LDQ4IEBAIHZvaWQgQkJRUGxhbjo6d29yayhDb21waWxhdGlvbkVmZm9ydCBlZmYKIAogICAg
ICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OnJlcGF0Y2hOZWFyQ2FsbChjYWxsLmNhbGxMb2NhdGlv
biwgQ29kZUxvY2F0aW9uTGFiZWw8V2FzbUVudHJ5UHRyVGFnPihlbnRyeXBvaW50KSk7CiAgICAg
ICAgIH0KLSAgICB9CiAKLSAgICAvLyBJdCdzIGltcG9ydGFudCB0byBtYWtlIHN1cmUgd2UgZG8g
dGhpcyBiZWZvcmUgd2UgbWFrZSBhbnkgb2YgdGhlIGNvZGUgd2UganVzdCBjb21waWxlZCB2aXNp
YmxlLiBJZiB3ZSBkaWRuJ3QsIHdlIGNvdWxkIGVuZCB1cAotICAgIC8vIHdoZXJlIHdlIGFyZSB0
aWVyaW5nIHVwIHNvbWUgZnVuY3Rpb24gQSB0byBBJyBhbmQgd2UgcmVwYXRjaCBzb21lIGZ1bmN0
aW9uIEIgdG8gY2FsbCBBJyBpbnN0ZWFkIG9mIEEuIEFub3RoZXIgQ1BVIGNvdWxkIHNlZQotICAg
IC8vIHRoZSB1cGRhdGVzIHRvIEIgYnV0IHN0aWxsIG5vdCBoYXZlIHJlc2V0IGl0cyBjYWNoZSBv
ZiBBJywgd2hpY2ggd291bGQgbGVhZCB0byBhbGwga2luZHMgb2YgYmFkbmVzcy4KLSAgICByZXNl
dEluc3RydWN0aW9uQ2FjaGVPbkFsbFRocmVhZHMoKTsKLSAgICBXVEY6OnN0b3JlU3RvcmVGZW5j
ZSgpOyAvLyBUaGlzIHByb2JhYmx5IGlzbid0IG5lY2Vzc2FyeSBidXQgaXQncyBnb29kIHRvIGJl
IHBhcmFub2lkLgorICAgICAgICBIYXNoTWFwPHZvaWQqLCBDb2RlTG9jYXRpb25MYWJlbDxXYXNt
RW50cnlQdHJUYWc+PiBzdGFnZWRDYWxsczsKKyAgICAgICAgYXV0byBzdGFnZVJlcGF0Y2ggPSBb
Jl0gKGNvbnN0IFZlY3RvcjxVbmxpbmtlZFdhc21Ub1dhc21DYWxsPiYgY2FsbHNpdGVzKSB7Cisg
ICAgICAgICAgICBmb3IgKGF1dG8mIGNhbGwgOiBjYWxsc2l0ZXMpIHsKKyAgICAgICAgICAgICAg
ICBpZiAoY2FsbC5mdW5jdGlvbkluZGV4U3BhY2UgPT0gZnVuY3Rpb25JbmRleFNwYWNlKSB7Cisg
ICAgICAgICAgICAgICAgICAgIENvZGVMb2NhdGlvbkxhYmVsPFdhc21FbnRyeVB0clRhZz4gdGFy
Z2V0ID0gTWFjcm9Bc3NlbWJsZXI6OnByZXBhcmVGb3JBdG9taWNSZXBhdGNoTmVhckNhbGxDb25j
dXJyZW50bHkoY2FsbC5jYWxsTG9jYXRpb24sIENvZGVMb2NhdGlvbkxhYmVsPFdhc21FbnRyeVB0
clRhZz4oZW50cnlwb2ludCkpOworICAgICAgICAgICAgICAgICAgICBzdGFnZWRDYWxscy5hZGQo
Y2FsbC5jYWxsTG9jYXRpb24uZGF0YUxvY2F0aW9uKCksIHRhcmdldCk7CisgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9OwogCi0gICAgbV9jb2RlQmxvY2stPm1fd2Fz
bUluZGlyZWN0Q2FsbEVudHJ5UG9pbnRzW21fZnVuY3Rpb25JbmRleF0gPSBlbnRyeXBvaW50Owot
ICAgIHsKLSAgICAgICAgTG9ja0hvbGRlciBob2xkZXIobV9jb2RlQmxvY2stPm1fbG9jayk7Cisg
ICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX2NvZGVCbG9jay0+bV93YXNtVG9XYXNt
Q2FsbHNpdGVzLnNpemUoKTsgKytpKSB7CisgICAgICAgICAgICBzdGFnZVJlcGF0Y2gobV9jb2Rl
QmxvY2stPm1fd2FzbVRvV2FzbUNhbGxzaXRlc1tpXSk7CisgICAgICAgICAgICBpZiAobV9jb2Rl
QmxvY2stPm1fbGxpbnRDYWxsZWVzKSB7CisgICAgICAgICAgICAgICAgTExJbnRDYWxsZWUmIGxs
aW50Q2FsbGVlID0gbV9jb2RlQmxvY2stPm1fbGxpbnRDYWxsZWVzLT5hdChpKS5nZXQoKTsKKyAg
ICAgICAgICAgICAgICBpZiAoSklUQ2FsbGVlKiByZXBsYWNlbWVudENhbGxlZSA9IGxsaW50Q2Fs
bGVlLnJlcGxhY2VtZW50KCkpCisgICAgICAgICAgICAgICAgICAgIHN0YWdlUmVwYXRjaChyZXBs
YWNlbWVudENhbGxlZS0+d2FzbVRvV2FzbUNhbGxzaXRlcygpKTsKKyAgICAgICAgICAgICAgICBp
ZiAoT01HRm9yT1NSRW50cnlDYWxsZWUqIG9zckVudHJ5Q2FsbGVlID0gbGxpbnRDYWxsZWUub3Ny
RW50cnlDYWxsZWUoKSkKKyAgICAgICAgICAgICAgICAgICAgc3RhZ2VSZXBhdGNoKG9zckVudHJ5
Q2FsbGVlLT53YXNtVG9XYXNtQ2FsbHNpdGVzKCkpOworICAgICAgICAgICAgfQorICAgICAgICAg
ICAgaWYgKEJCUUNhbGxlZSogYmJxQ2FsbGVlID0gbV9jb2RlQmxvY2stPm1fYmJxQ2FsbGVlc1tp
XS5nZXQoKSkgeworICAgICAgICAgICAgICAgIGlmIChPTUdDYWxsZWUqIHJlcGxhY2VtZW50Q2Fs
bGVlID0gYmJxQ2FsbGVlLT5yZXBsYWNlbWVudCgpKQorICAgICAgICAgICAgICAgICAgICBzdGFn
ZVJlcGF0Y2gocmVwbGFjZW1lbnRDYWxsZWUtPndhc21Ub1dhc21DYWxsc2l0ZXMoKSk7CisgICAg
ICAgICAgICAgICAgaWYgKE9NR0Zvck9TUkVudHJ5Q2FsbGVlKiBvc3JFbnRyeUNhbGxlZSA9IGJi
cUNhbGxlZS0+b3NyRW50cnlDYWxsZWUoKSkKKyAgICAgICAgICAgICAgICAgICAgc3RhZ2VSZXBh
dGNoKG9zckVudHJ5Q2FsbGVlLT53YXNtVG9XYXNtQ2FsbHNpdGVzKCkpOworICAgICAgICAgICAg
fQorICAgICAgICB9CisKKyAgICAgICAgLy8gSXQncyBpbXBvcnRhbnQgdG8gbWFrZSBzdXJlIHdl
IGRvIHRoaXMgYmVmb3JlIHdlIG1ha2UgYW55IG9mIHRoZSBjb2RlIHdlIGp1c3QgY29tcGlsZWQg
dmlzaWJsZS4gSWYgd2UgZGlkbid0LCB3ZSBjb3VsZCBlbmQgdXAKKyAgICAgICAgLy8gd2hlcmUg
d2UgYXJlIHRpZXJpbmcgdXAgc29tZSBmdW5jdGlvbiBBIHRvIEEnIGFuZCB3ZSByZXBhdGNoIHNv
bWUgZnVuY3Rpb24gQiB0byBjYWxsIEEnIGluc3RlYWQgb2YgQS4gQW5vdGhlciBDUFUgY291bGQg
c2VlCisgICAgICAgIC8vIHRoZSB1cGRhdGVzIHRvIEIgYnV0IHN0aWxsIG5vdCBoYXZlIHJlc2V0
IGl0cyBjYWNoZSBvZiBBJywgd2hpY2ggd291bGQgbGVhZCB0byBhbGwga2luZHMgb2YgYmFkbmVz
cy4KKyAgICAgICAgcmVzZXRJbnN0cnVjdGlvbkNhY2hlT25BbGxUaHJlYWRzKCk7CisgICAgICAg
IFdURjo6c3RvcmVTdG9yZUZlbmNlKCk7IC8vIFRoaXMgcHJvYmFibHkgaXNuJ3QgbmVjZXNzYXJ5
IGJ1dCBpdCdzIGdvb2QgdG8gYmUgcGFyYW5vaWQuCisKKyAgICAgICAgbV9jb2RlQmxvY2stPm1f
d2FzbUluZGlyZWN0Q2FsbEVudHJ5UG9pbnRzW21fZnVuY3Rpb25JbmRleF0gPSBlbnRyeXBvaW50
OwogCiAgICAgICAgIGF1dG8gcmVwYXRjaENhbGxzID0gWyZdIChjb25zdCBWZWN0b3I8VW5saW5r
ZWRXYXNtVG9XYXNtQ2FsbD4mIGNhbGxzaXRlcykgewogICAgICAgICAgICAgZm9yIChhdXRvJiBj
YWxsIDogY2FsbHNpdGVzKSB7CiAgICAgICAgICAgICAgICAgZGF0YUxvZ0xuSWYoV2FzbUJCUVBs
YW5JbnRlcm5hbDo6dmVyYm9zZSwgIkNvbnNpZGVyaW5nIHJlcGF0Y2hpbmcgY2FsbCBhdDogIiwg
UmF3UG9pbnRlcihjYWxsLmNhbGxMb2NhdGlvbi5kYXRhTG9jYXRpb24oKSksICIgdGhhdCB0YXJn
ZXRzICIsIGNhbGwuZnVuY3Rpb25JbmRleFNwYWNlKTsKICAgICAgICAgICAgICAgICBpZiAoY2Fs
bC5mdW5jdGlvbkluZGV4U3BhY2UgPT0gZnVuY3Rpb25JbmRleFNwYWNlKSB7CiAgICAgICAgICAg
ICAgICAgICAgIGRhdGFMb2dMbklmKFdhc21CQlFQbGFuSW50ZXJuYWw6OnZlcmJvc2UsICJSZXBh
dGNoaW5nIGNhbGwgYXQ6ICIsIFJhd1BvaW50ZXIoY2FsbC5jYWxsTG9jYXRpb24uZGF0YUxvY2F0
aW9uKCkpLCAiIHRvICIsIFJhd1BvaW50ZXIoZW50cnlwb2ludC5leGVjdXRhYmxlQWRkcmVzcygp
KSk7Ci0gICAgICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpyZXBhdGNoTmVhckNhbGwo
Y2FsbC5jYWxsTG9jYXRpb24sIENvZGVMb2NhdGlvbkxhYmVsPFdhc21FbnRyeVB0clRhZz4oZW50
cnlwb2ludCkpOworICAgICAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6cmVwYXRjaE5l
YXJDYWxsKGNhbGwuY2FsbExvY2F0aW9uLCBzdGFnZWRDYWxscy5nZXQoY2FsbC5jYWxsTG9jYXRp
b24uZGF0YUxvY2F0aW9uKCkpKTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CiAg
ICAgICAgIH07CkBAIC0xODYsMTEgKzIwNiwxNyBAQCB2b2lkIEJCUVBsYW46OndvcmsoQ29tcGls
YXRpb25FZmZvcnQgZWZmCiAgICAgICAgICAgICAgICAgICAgIHJlcGF0Y2hDYWxscyhvc3JFbnRy
eUNhbGxlZS0+d2FzbVRvV2FzbUNhbGxzaXRlcygpKTsKICAgICAgICAgICAgIH0KICAgICAgICAg
fQorCisgICAgICAgIHsKKyAgICAgICAgICAgIExMSW50Q2FsbGVlJiBsbGludENhbGxlZSA9IG1f
Y29kZUJsb2NrLT5tX2xsaW50Q2FsbGVlcy0+YXQobV9mdW5jdGlvbkluZGV4KS5nZXQoKTsKKyAg
ICAgICAgICAgIGF1dG8gbG9ja2VyID0gaG9sZExvY2sobGxpbnRDYWxsZWUudGllclVwQ291bnRl
cigpLm1fbG9jayk7CisgICAgICAgICAgICBsbGludENhbGxlZS5zZXRSZXBsYWNlbWVudChjYWxs
ZWUuY29weVJlZigpKTsKKyAgICAgICAgICAgIGxsaW50Q2FsbGVlLnRpZXJVcENvdW50ZXIoKS5t
X2NvbXBpbGF0aW9uU3RhdHVzID0gTExJbnRUaWVyVXBDb3VudGVyOjpDb21waWxhdGlvblN0YXR1
czo6Q29tcGlsZWQ7CisgICAgICAgIH0KICAgICB9CiAKICAgICBkYXRhTG9nTG5JZihXYXNtQkJR
UGxhbkludGVybmFsOjp2ZXJib3NlLCAiRmluaXNoZWQgQkJRICIsIG1fZnVuY3Rpb25JbmRleCk7
CiAKLQogICAgIGF1dG8gbG9ja2VyID0gaG9sZExvY2sobV9sb2NrKTsKICAgICBtb3ZlVG9TdGF0
ZShTdGF0ZTo6Q29tcGxldGVkKTsKICAgICBydW5Db21wbGV0aW9uVGFza3MobG9ja2VyKTsKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21PTUdGb3JPU1JFbnRyeVBsYW4uY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21PTUdGb3JPU1JF
bnRyeVBsYW4uY3BwCShyZXZpc2lvbiAyNTgzNTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
d2FzbS9XYXNtT01HRm9yT1NSRW50cnlQbGFuLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTAzLDEy
ICsxMDMsMTAgQEAgdm9pZCBPTUdGb3JPU1JFbnRyeVBsYW46OndvcmsoQ29tcGlsYXRpbwogCiAg
ICAgb21nRW50cnlwb2ludC5jYWxsZWVTYXZlUmVnaXN0ZXJzID0gV1RGTW92ZShwYXJzZUFuZENv
bXBpbGVSZXN1bHQudmFsdWUoKS0+ZW50cnlwb2ludC5jYWxsZWVTYXZlUmVnaXN0ZXJzKTsKIAot
ICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxXYXNtRW50cnlQdHJUYWc+IGVudHJ5cG9pbnQ7CiAg
ICAgQVNTRVJUKG1fY29kZUJsb2NrLnB0cigpID09IG1fbW9kdWxlLT5jb2RlQmxvY2tGb3IobW9k
ZSgpKSk7CiAgICAgUmVmPE9NR0Zvck9TUkVudHJ5Q2FsbGVlPiBjYWxsZWUgPSBPTUdGb3JPU1JF
bnRyeUNhbGxlZTo6Y3JlYXRlKFdURk1vdmUob21nRW50cnlwb2ludCksIGZ1bmN0aW9uSW5kZXhT
cGFjZSwgbV9tb2R1bGVJbmZvcm1hdGlvbi0+bmFtZVNlY3Rpb24tPmdldChmdW5jdGlvbkluZGV4
U3BhY2UpLCBvc3JFbnRyeVNjcmF0Y2hCdWZmZXJTaXplLCBtX2xvb3BJbmRleCwgV1RGTW92ZSh1
bmxpbmtlZENhbGxzKSk7CiAgICAgewogICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6cmVwYXRjaFBv
aW50ZXIocGFyc2VBbmRDb21waWxlUmVzdWx0LnZhbHVlKCktPmNhbGxlZU1vdmVMb2NhdGlvbiwg
Q2FsbGVlQml0czo6Ym94V2FzbShjYWxsZWUucHRyKCkpKTsKLSAgICAgICAgZW50cnlwb2ludCA9
IGNhbGxlZS0+ZW50cnlwb2ludCgpOwogCiAgICAgICAgIGF1dG8gbG9ja2VyID0gaG9sZExvY2so
bV9jb2RlQmxvY2stPm1fbG9jayk7CiAgICAgICAgIGZvciAoYXV0byYgY2FsbCA6IGNhbGxlZS0+
d2FzbVRvV2FzbUNhbGxzaXRlcygpKSB7CkBAIC0xMjAsMTEgKzExOCwxMCBAQCB2b2lkIE9NR0Zv
ck9TUkVudHJ5UGxhbjo6d29yayhDb21waWxhdGlvCiAKICAgICAgICAgICAgIE1hY3JvQXNzZW1i
bGVyOjpyZXBhdGNoTmVhckNhbGwoY2FsbC5jYWxsTG9jYXRpb24sIENvZGVMb2NhdGlvbkxhYmVs
PFdhc21FbnRyeVB0clRhZz4oZW50cnlwb2ludCkpOwogICAgICAgICB9Ci0gICAgfQotICAgIHJl
c2V0SW5zdHJ1Y3Rpb25DYWNoZU9uQWxsVGhyZWFkcygpOwotICAgIFdURjo6c3RvcmVTdG9yZUZl
bmNlKCk7Ci0gICAgewotICAgICAgICBhdXRvIGxvY2tlciA9IGhvbGRMb2NrKG1fY29kZUJsb2Nr
LT5tX2xvY2spOworCisgICAgICAgIHJlc2V0SW5zdHJ1Y3Rpb25DYWNoZU9uQWxsVGhyZWFkcygp
OworICAgICAgICBXVEY6OnN0b3JlU3RvcmVGZW5jZSgpOworCiAgICAgICAgIHsKICAgICAgICAg
ICAgIHN3aXRjaCAobV9jYWxsZWUtPmNvbXBpbGF0aW9uTW9kZSgpKSB7CiAgICAgICAgICAgICBj
YXNlIENvbXBpbGF0aW9uTW9kZTo6TExJbnRNb2RlOiB7CkBAIC0xNDYsMTkgKzE0Myw2IEBAIHZv
aWQgT01HRm9yT1NSRW50cnlQbGFuOjp3b3JrKENvbXBpbGF0aW8KICAgICAgICAgICAgICAgICBS
RUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICAgICAgfQogICAgICAgICB9Ci0g
ICAgICAgIFdURjo6c3RvcmVTdG9yZUZlbmNlKCk7Ci0gICAgICAgIC8vIEl0IGlzIHBvc3NpYmxl
IHRoYXQgYSBuZXcgT01HIGNhbGxlZSBpcyBhZGRlZCB3aGlsZSB3ZSByZWxlYXNlIG1fY29kZUJs
b2NrLT5sb2NrLgotICAgICAgICAvLyBVbnRpbCB3ZSBhZGQgT01HRm9yT1NSRW50cnkgY2FsbGVl
IHRvIEJCUUNhbGxlZSdzIG1fb3NyRW50cnlDYWxsZWUsIHRoaXMgbmV3IE9NRyBmdW5jdGlvbiBs
aW5raW5nIGRvZXMgbm90IGhhcHBlbiBmb3IgdGhpcyBPTUdGb3JPU1JFbnRyeSBjYWxsZWUuCi0g
ICAgICAgIC8vIFdlIHJlLWxpbmsgdGhpcyBPTUdGb3JPU1JFbnRyeSBjYWxsZWUgYWdhaW4gbm90
IHRvIG1pc3MgdGhhdCBjaGFuY2UuCi0gICAgICAgIGZvciAoYXV0byYgY2FsbCA6IGNhbGxlZS0+
d2FzbVRvV2FzbUNhbGxzaXRlcygpKSB7Ci0gICAgICAgICAgICBNYWNyb0Fzc2VtYmxlckNvZGVQ
dHI8V2FzbUVudHJ5UHRyVGFnPiBlbnRyeXBvaW50OwotICAgICAgICAgICAgaWYgKGNhbGwuZnVu
Y3Rpb25JbmRleFNwYWNlIDwgbV9tb2R1bGUtPm1vZHVsZUluZm9ybWF0aW9uKCkuaW1wb3J0RnVu
Y3Rpb25Db3VudCgpKQotICAgICAgICAgICAgICAgIGVudHJ5cG9pbnQgPSBtX2NvZGVCbG9jay0+
bV93YXNtVG9XYXNtRXhpdFN0dWJzW2NhbGwuZnVuY3Rpb25JbmRleFNwYWNlXS5jb2RlKCk7Ci0g
ICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgZW50cnlwb2ludCA9IG1fY29kZUJsb2Nr
LT53YXNtRW50cnlwb2ludENhbGxlZUZyb21GdW5jdGlvbkluZGV4U3BhY2UoY2FsbC5mdW5jdGlv
bkluZGV4U3BhY2UpLmVudHJ5cG9pbnQoKS5yZXRhZ2dlZDxXYXNtRW50cnlQdHJUYWc+KCk7Ci0K
LSAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpyZXBhdGNoTmVhckNhbGwoY2FsbC5jYWxsTG9j
YXRpb24sIENvZGVMb2NhdGlvbkxhYmVsPFdhc21FbnRyeVB0clRhZz4oZW50cnlwb2ludCkpOwot
ICAgICAgICB9CiAgICAgfQogICAgIGRhdGFMb2dMbklmKFdhc21PTUdGb3JPU1JFbnRyeVBsYW5J
bnRlcm5hbDo6dmVyYm9zZSwgIkZpbmlzaGVkIE9NR0Zvck9TUkVudHJ5ICIsIG1fZnVuY3Rpb25J
bmRleCk7CiAgICAgY29tcGxldGUoaG9sZExvY2sobV9sb2NrKSk7CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvd2FzbS9XYXNtT01HUGxhbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL3dhc20vV2FzbU9NR1BsYW4uY3BwCShyZXZpc2lvbiAyNTgzNTApCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtT01HUGxhbi5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTExNCwyMCArMTE0LDkgQEAgdm9pZCBPTUdQbGFuOjp3b3JrKENvbXBpbGF0aW9uRWZmb3J0
KQogICAgICAgICAvLyB3aWxsIHVwZGF0ZS4gSXQncyBhbHNvIG9rIGlmIHRoZXkgcHVibGlzaCB0
aGVpciBjb2RlIGJlZm9yZSB3ZSByZXNldCB0aGUgaW5zdHJ1Y3Rpb24gY2FjaGVzIGJlY2F1c2Ug
YWZ0ZXIgd2UgcmVsZWFzZQogICAgICAgICAvLyB0aGUgbG9jayBvdXIgY29kZSBpcyByZWFkeSB0
byBiZSBwdWJsaXNoZWQgdG9vLgogICAgICAgICBMb2NrSG9sZGVyIGhvbGRlcihtX2NvZGVCbG9j
ay0+bV9sb2NrKTsKKwogICAgICAgICBtX2NvZGVCbG9jay0+bV9vbWdDYWxsZWVzW21fZnVuY3Rp
b25JbmRleF0gPSBjYWxsZWUuY29weVJlZigpOwotICAgICAgICB7Ci0gICAgICAgICAgICBpZiAo
QkJRQ2FsbGVlKiBiYnFDYWxsZWUgPSBtX2NvZGVCbG9jay0+bV9iYnFDYWxsZWVzW21fZnVuY3Rp
b25JbmRleF0uZ2V0KCkpIHsKLSAgICAgICAgICAgICAgICBhdXRvIGxvY2tlciA9IGhvbGRMb2Nr
KGJicUNhbGxlZS0+dGllclVwQ291bnQoKS0+Z2V0TG9jaygpKTsKLSAgICAgICAgICAgICAgICBi
YnFDYWxsZWUtPnNldFJlcGxhY2VtZW50KGNhbGxlZS5jb3B5UmVmKCkpOwotICAgICAgICAgICAg
ICAgIGJicUNhbGxlZS0+dGllclVwQ291bnQoKS0+bV9jb21waWxhdGlvblN0YXR1c0Zvck9NRyA9
IFRpZXJVcENvdW50OjpDb21waWxhdGlvblN0YXR1czo6Q29tcGlsZWQ7Ci0gICAgICAgICAgICB9
Ci0gICAgICAgICAgICBpZiAobV9jb2RlQmxvY2stPm1fbGxpbnRDYWxsZWVzKSB7Ci0gICAgICAg
ICAgICAgICAgTExJbnRDYWxsZWUmIGxsaW50Q2FsbGVlID0gbV9jb2RlQmxvY2stPm1fbGxpbnRD
YWxsZWVzLT5hdChtX2Z1bmN0aW9uSW5kZXgpLmdldCgpOwotICAgICAgICAgICAgICAgIGF1dG8g
bG9ja2VyID0gaG9sZExvY2sobGxpbnRDYWxsZWUudGllclVwQ291bnRlcigpLm1fbG9jayk7Ci0g
ICAgICAgICAgICAgICAgbGxpbnRDYWxsZWUuc2V0UmVwbGFjZW1lbnQoY2FsbGVlLmNvcHlSZWYo
KSk7Ci0gICAgICAgICAgICAgICAgbGxpbnRDYWxsZWUudGllclVwQ291bnRlcigpLm1fY29tcGls
YXRpb25TdGF0dXMgPSBMTEludFRpZXJVcENvdW50ZXI6OkNvbXBpbGF0aW9uU3RhdHVzOjpDb21w
aWxlZDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQorCiAgICAgICAgIGZvciAoYXV0byYgY2Fs
bCA6IGNhbGxlZS0+d2FzbVRvV2FzbUNhbGxzaXRlcygpKSB7CiAgICAgICAgICAgICBNYWNyb0Fz
c2VtYmxlckNvZGVQdHI8V2FzbUVudHJ5UHRyVGFnPiBlbnRyeXBvaW50OwogICAgICAgICAgICAg
aWYgKGNhbGwuZnVuY3Rpb25JbmRleFNwYWNlIDwgbV9tb2R1bGUtPm1vZHVsZUluZm9ybWF0aW9u
KCkuaW1wb3J0RnVuY3Rpb25Db3VudCgpKQpAQCAtMTM3LDI0ICsxMjYsNDcgQEAgdm9pZCBPTUdQ
bGFuOjp3b3JrKENvbXBpbGF0aW9uRWZmb3J0KQogCiAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxl
cjo6cmVwYXRjaE5lYXJDYWxsKGNhbGwuY2FsbExvY2F0aW9uLCBDb2RlTG9jYXRpb25MYWJlbDxX
YXNtRW50cnlQdHJUYWc+KGVudHJ5cG9pbnQpKTsKICAgICAgICAgfQotICAgIH0KIAotICAgIC8v
IEl0J3MgaW1wb3J0YW50IHRvIG1ha2Ugc3VyZSB3ZSBkbyB0aGlzIGJlZm9yZSB3ZSBtYWtlIGFu
eSBvZiB0aGUgY29kZSB3ZSBqdXN0IGNvbXBpbGVkIHZpc2libGUuIElmIHdlIGRpZG4ndCwgd2Ug
Y291bGQgZW5kIHVwCi0gICAgLy8gd2hlcmUgd2UgYXJlIHRpZXJpbmcgdXAgc29tZSBmdW5jdGlv
biBBIHRvIEEnIGFuZCB3ZSByZXBhdGNoIHNvbWUgZnVuY3Rpb24gQiB0byBjYWxsIEEnIGluc3Rl
YWQgb2YgQS4gQW5vdGhlciBDUFUgY291bGQgc2VlCi0gICAgLy8gdGhlIHVwZGF0ZXMgdG8gQiBi
dXQgc3RpbGwgbm90IGhhdmUgcmVzZXQgaXRzIGNhY2hlIG9mIEEnLCB3aGljaCB3b3VsZCBsZWFk
IHRvIGFsbCBraW5kcyBvZiBiYWRuZXNzLgotICAgIHJlc2V0SW5zdHJ1Y3Rpb25DYWNoZU9uQWxs
VGhyZWFkcygpOwotICAgIFdURjo6c3RvcmVTdG9yZUZlbmNlKCk7IC8vIFRoaXMgcHJvYmFibHkg
aXNuJ3QgbmVjZXNzYXJ5IGJ1dCBpdCdzIGdvb2QgdG8gYmUgcGFyYW5vaWQuCisgICAgICAgIEhh
c2hNYXA8dm9pZCosIENvZGVMb2NhdGlvbkxhYmVsPFdhc21FbnRyeVB0clRhZz4+IHN0YWdlZENh
bGxzOworICAgICAgICBhdXRvIHN0YWdlUmVwYXRjaCA9IFsmXSAoY29uc3QgVmVjdG9yPFVubGlu
a2VkV2FzbVRvV2FzbUNhbGw+JiBjYWxsc2l0ZXMpIHsKKyAgICAgICAgICAgIGZvciAoYXV0byYg
Y2FsbCA6IGNhbGxzaXRlcykgeworICAgICAgICAgICAgICAgIGlmIChjYWxsLmZ1bmN0aW9uSW5k
ZXhTcGFjZSA9PSBmdW5jdGlvbkluZGV4U3BhY2UpIHsKKyAgICAgICAgICAgICAgICAgICAgQ29k
ZUxvY2F0aW9uTGFiZWw8V2FzbUVudHJ5UHRyVGFnPiB0YXJnZXQgPSBNYWNyb0Fzc2VtYmxlcjo6
cHJlcGFyZUZvckF0b21pY1JlcGF0Y2hOZWFyQ2FsbENvbmN1cnJlbnRseShjYWxsLmNhbGxMb2Nh
dGlvbiwgQ29kZUxvY2F0aW9uTGFiZWw8V2FzbUVudHJ5UHRyVGFnPihlbnRyeXBvaW50KSk7Cisg
ICAgICAgICAgICAgICAgICAgIHN0YWdlZENhbGxzLmFkZChjYWxsLmNhbGxMb2NhdGlvbi5kYXRh
TG9jYXRpb24oKSwgdGFyZ2V0KTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9Cisg
ICAgICAgIH07CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX2NvZGVCbG9jay0+
bV93YXNtVG9XYXNtQ2FsbHNpdGVzLnNpemUoKTsgKytpKSB7CisgICAgICAgICAgICBzdGFnZVJl
cGF0Y2gobV9jb2RlQmxvY2stPm1fd2FzbVRvV2FzbUNhbGxzaXRlc1tpXSk7CisgICAgICAgICAg
ICBpZiAobV9jb2RlQmxvY2stPm1fbGxpbnRDYWxsZWVzKSB7CisgICAgICAgICAgICAgICAgTExJ
bnRDYWxsZWUmIGxsaW50Q2FsbGVlID0gbV9jb2RlQmxvY2stPm1fbGxpbnRDYWxsZWVzLT5hdChp
KS5nZXQoKTsKKyAgICAgICAgICAgICAgICBpZiAoSklUQ2FsbGVlKiByZXBsYWNlbWVudENhbGxl
ZSA9IGxsaW50Q2FsbGVlLnJlcGxhY2VtZW50KCkpCisgICAgICAgICAgICAgICAgICAgIHN0YWdl
UmVwYXRjaChyZXBsYWNlbWVudENhbGxlZS0+d2FzbVRvV2FzbUNhbGxzaXRlcygpKTsKKyAgICAg
ICAgICAgICAgICBpZiAoT01HRm9yT1NSRW50cnlDYWxsZWUqIG9zckVudHJ5Q2FsbGVlID0gbGxp
bnRDYWxsZWUub3NyRW50cnlDYWxsZWUoKSkKKyAgICAgICAgICAgICAgICAgICAgc3RhZ2VSZXBh
dGNoKG9zckVudHJ5Q2FsbGVlLT53YXNtVG9XYXNtQ2FsbHNpdGVzKCkpOworICAgICAgICAgICAg
fQorICAgICAgICAgICAgaWYgKEJCUUNhbGxlZSogYmJxQ2FsbGVlID0gbV9jb2RlQmxvY2stPm1f
YmJxQ2FsbGVlc1tpXS5nZXQoKSkgeworICAgICAgICAgICAgICAgIGlmIChPTUdDYWxsZWUqIHJl
cGxhY2VtZW50Q2FsbGVlID0gYmJxQ2FsbGVlLT5yZXBsYWNlbWVudCgpKQorICAgICAgICAgICAg
ICAgICAgICBzdGFnZVJlcGF0Y2gocmVwbGFjZW1lbnRDYWxsZWUtPndhc21Ub1dhc21DYWxsc2l0
ZXMoKSk7CisgICAgICAgICAgICAgICAgaWYgKE9NR0Zvck9TUkVudHJ5Q2FsbGVlKiBvc3JFbnRy
eUNhbGxlZSA9IGJicUNhbGxlZS0+b3NyRW50cnlDYWxsZWUoKSkKKyAgICAgICAgICAgICAgICAg
ICAgc3RhZ2VSZXBhdGNoKG9zckVudHJ5Q2FsbGVlLT53YXNtVG9XYXNtQ2FsbHNpdGVzKCkpOwor
ICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgLy8gSXQncyBpbXBvcnRhbnQgdG8g
bWFrZSBzdXJlIHdlIGRvIHRoaXMgYmVmb3JlIHdlIG1ha2UgYW55IG9mIHRoZSBjb2RlIHdlIGp1
c3QgY29tcGlsZWQgdmlzaWJsZS4gSWYgd2UgZGlkbid0LCB3ZSBjb3VsZCBlbmQgdXAKKyAgICAg
ICAgLy8gd2hlcmUgd2UgYXJlIHRpZXJpbmcgdXAgc29tZSBmdW5jdGlvbiBBIHRvIEEnIGFuZCB3
ZSByZXBhdGNoIHNvbWUgZnVuY3Rpb24gQiB0byBjYWxsIEEnIGluc3RlYWQgb2YgQS4gQW5vdGhl
ciBDUFUgY291bGQgc2VlCisgICAgICAgIC8vIHRoZSB1cGRhdGVzIHRvIEIgYnV0IHN0aWxsIG5v
dCBoYXZlIHJlc2V0IGl0cyBjYWNoZSBvZiBBJywgd2hpY2ggd291bGQgbGVhZCB0byBhbGwga2lu
ZHMgb2YgYmFkbmVzcy4KKyAgICAgICAgcmVzZXRJbnN0cnVjdGlvbkNhY2hlT25BbGxUaHJlYWRz
KCk7CisgICAgICAgIFdURjo6c3RvcmVTdG9yZUZlbmNlKCk7IC8vIFRoaXMgcHJvYmFibHkgaXNu
J3QgbmVjZXNzYXJ5IGJ1dCBpdCdzIGdvb2QgdG8gYmUgcGFyYW5vaWQuCiAKLSAgICBtX2NvZGVC
bG9jay0+bV93YXNtSW5kaXJlY3RDYWxsRW50cnlQb2ludHNbbV9mdW5jdGlvbkluZGV4XSA9IGVu
dHJ5cG9pbnQ7Ci0gICAgewotICAgICAgICBMb2NrSG9sZGVyIGhvbGRlcihtX2NvZGVCbG9jay0+
bV9sb2NrKTsKKyAgICAgICAgbV9jb2RlQmxvY2stPm1fd2FzbUluZGlyZWN0Q2FsbEVudHJ5UG9p
bnRzW21fZnVuY3Rpb25JbmRleF0gPSBlbnRyeXBvaW50OwogCiAgICAgICAgIGF1dG8gcmVwYXRj
aENhbGxzID0gWyZdIChjb25zdCBWZWN0b3I8VW5saW5rZWRXYXNtVG9XYXNtQ2FsbD4mIGNhbGxz
aXRlcykgewogICAgICAgICAgICAgZm9yIChhdXRvJiBjYWxsIDogY2FsbHNpdGVzKSB7CiAgICAg
ICAgICAgICAgICAgZGF0YUxvZ0xuSWYoV2FzbU9NR1BsYW5JbnRlcm5hbDo6dmVyYm9zZSwgIkNv
bnNpZGVyaW5nIHJlcGF0Y2hpbmcgY2FsbCBhdDogIiwgUmF3UG9pbnRlcihjYWxsLmNhbGxMb2Nh
dGlvbi5kYXRhTG9jYXRpb24oKSksICIgdGhhdCB0YXJnZXRzICIsIGNhbGwuZnVuY3Rpb25JbmRl
eFNwYWNlKTsKICAgICAgICAgICAgICAgICBpZiAoY2FsbC5mdW5jdGlvbkluZGV4U3BhY2UgPT0g
ZnVuY3Rpb25JbmRleFNwYWNlKSB7CiAgICAgICAgICAgICAgICAgICAgIGRhdGFMb2dMbklmKFdh
c21PTUdQbGFuSW50ZXJuYWw6OnZlcmJvc2UsICJSZXBhdGNoaW5nIGNhbGwgYXQ6ICIsIFJhd1Bv
aW50ZXIoY2FsbC5jYWxsTG9jYXRpb24uZGF0YUxvY2F0aW9uKCkpLCAiIHRvICIsIFJhd1BvaW50
ZXIoZW50cnlwb2ludC5leGVjdXRhYmxlQWRkcmVzcygpKSk7Ci0gICAgICAgICAgICAgICAgICAg
IE1hY3JvQXNzZW1ibGVyOjpyZXBhdGNoTmVhckNhbGwoY2FsbC5jYWxsTG9jYXRpb24sIENvZGVM
b2NhdGlvbkxhYmVsPFdhc21FbnRyeVB0clRhZz4oZW50cnlwb2ludCkpOworICAgICAgICAgICAg
ICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6cmVwYXRjaE5lYXJDYWxsKGNhbGwuY2FsbExvY2F0aW9u
LCBzdGFnZWRDYWxscy5nZXQoY2FsbC5jYWxsTG9jYXRpb24uZGF0YUxvY2F0aW9uKCkpKTsKICAg
ICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CiAgICAgICAgIH07CkBAIC0xNzUsNiArMTg3
LDIwIEBAIHZvaWQgT01HUGxhbjo6d29yayhDb21waWxhdGlvbkVmZm9ydCkKICAgICAgICAgICAg
ICAgICAgICAgcmVwYXRjaENhbGxzKG9zckVudHJ5Q2FsbGVlLT53YXNtVG9XYXNtQ2FsbHNpdGVz
KCkpOwogICAgICAgICAgICAgfQogICAgICAgICB9CisKKyAgICAgICAgeworICAgICAgICAgICAg
aWYgKEJCUUNhbGxlZSogYmJxQ2FsbGVlID0gbV9jb2RlQmxvY2stPm1fYmJxQ2FsbGVlc1ttX2Z1
bmN0aW9uSW5kZXhdLmdldCgpKSB7CisgICAgICAgICAgICAgICAgYXV0byBsb2NrZXIgPSBob2xk
TG9jayhiYnFDYWxsZWUtPnRpZXJVcENvdW50KCktPmdldExvY2soKSk7CisgICAgICAgICAgICAg
ICAgYmJxQ2FsbGVlLT5zZXRSZXBsYWNlbWVudChjYWxsZWUuY29weVJlZigpKTsKKyAgICAgICAg
ICAgICAgICBiYnFDYWxsZWUtPnRpZXJVcENvdW50KCktPm1fY29tcGlsYXRpb25TdGF0dXNGb3JP
TUcgPSBUaWVyVXBDb3VudDo6Q29tcGlsYXRpb25TdGF0dXM6OkNvbXBpbGVkOworICAgICAgICAg
ICAgfQorICAgICAgICAgICAgaWYgKG1fY29kZUJsb2NrLT5tX2xsaW50Q2FsbGVlcykgeworICAg
ICAgICAgICAgICAgIExMSW50Q2FsbGVlJiBsbGludENhbGxlZSA9IG1fY29kZUJsb2NrLT5tX2xs
aW50Q2FsbGVlcy0+YXQobV9mdW5jdGlvbkluZGV4KS5nZXQoKTsKKyAgICAgICAgICAgICAgICBh
dXRvIGxvY2tlciA9IGhvbGRMb2NrKGxsaW50Q2FsbGVlLnRpZXJVcENvdW50ZXIoKS5tX2xvY2sp
OworICAgICAgICAgICAgICAgIGxsaW50Q2FsbGVlLnNldFJlcGxhY2VtZW50KGNhbGxlZS5jb3B5
UmVmKCkpOworICAgICAgICAgICAgICAgIGxsaW50Q2FsbGVlLnRpZXJVcENvdW50ZXIoKS5tX2Nv
bXBpbGF0aW9uU3RhdHVzID0gTExJbnRUaWVyVXBDb3VudGVyOjpDb21waWxhdGlvblN0YXR1czo6
Q29tcGlsZWQ7CisgICAgICAgICAgICB9CisgICAgICAgIH0KICAgICB9CiAKICAgICBkYXRhTG9n
TG5JZihXYXNtT01HUGxhbkludGVybmFsOjp2ZXJib3NlLCAiRmluaXNoZWQgT01HICIsIG1fZnVu
Y3Rpb25JbmRleCk7CkluZGV4OiBTb3VyY2UvV1RGL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV1RGL0NoYW5nZUxvZwkocmV2aXNpb24gMjU4MzUwKQorKysgU291cmNlL1dURi9DaGFu
Z2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwzNSBAQAorMjAyMC0wMy0xMiAgU2FhbSBC
YXJhdGkgIDxzYmFyYXRpQGFwcGxlLmNvbT4KKworICAgICAgICBJbXBsZW1lbnQgMUdCIG9mIGV4
ZWN1dGFibGUgbWVtb3J5IG9uIGFybTY0CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0yMDg0OTAKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICAqIHd0Zi9NZXRhQWxsb2NhdG9yLmNwcDoKKyAgICAgICAgKFdURjo6
TWV0YUFsbG9jYXRvclRyYWNrZXI6Om5vdGlmeSk6CisgICAgICAgIChXVEY6Ok1ldGFBbGxvY2F0
b3JUcmFja2VyOjpyZWxlYXNlKToKKyAgICAgICAgKFdURjo6TWV0YUFsbG9jYXRvcjo6cmVsZWFz
ZSk6CisgICAgICAgIChXVEY6Ok1ldGFBbGxvY2F0b3JIYW5kbGU6Ok1ldGFBbGxvY2F0b3JIYW5k
bGUpOgorICAgICAgICAoV1RGOjpNZXRhQWxsb2NhdG9ySGFuZGxlOjp+TWV0YUFsbG9jYXRvckhh
bmRsZSk6CisgICAgICAgIChXVEY6Ok1ldGFBbGxvY2F0b3JIYW5kbGU6OnNocmluayk6CisgICAg
ICAgIChXVEY6Ok1ldGFBbGxvY2F0b3I6Ok1ldGFBbGxvY2F0b3IpOgorICAgICAgICAoV1RGOjpN
ZXRhQWxsb2NhdG9yOjphbGxvY2F0ZSk6CisgICAgICAgIChXVEY6Ok1ldGFBbGxvY2F0b3I6OmN1
cnJlbnRTdGF0aXN0aWNzKToKKyAgICAgICAgKiB3dGYvTWV0YUFsbG9jYXRvci5oOgorICAgICAg
ICAoV1RGOjpNZXRhQWxsb2NhdG9yVHJhY2tlcjo6ZmluZCk6CisgICAgICAgIChXVEY6Ok1ldGFB
bGxvY2F0b3I6OmFsbG9jYXRlKToKKyAgICAgICAgKFdURjo6TWV0YUFsbG9jYXRvcjo6Y3VycmVu
dFN0YXRpc3RpY3MpOgorICAgICAgICAoV1RGOjpNZXRhQWxsb2NhdG9yOjpnZXRMb2NrKTogRGVs
ZXRlZC4KKyAgICAgICAgKiB3dGYvTWV0YUFsbG9jYXRvckhhbmRsZS5oOgorICAgICAgICAoV1RG
OjpNZXRhQWxsb2NhdG9ySGFuZGxlOjphbGxvY2F0b3IpOgorICAgICAgICAoV1RGOjpNZXRhQWxs
b2NhdG9ySGFuZGxlOjppc01hbmFnZWQpOiBEZWxldGVkLgorICAgICAgICAoV1RGOjpNZXRhQWxs
b2NhdG9ySGFuZGxlOjpvd25lclVJRCk6IERlbGV0ZWQuCisgICAgICAgICogd3RmL1BsYXRmb3Jt
VXNlLmg6CisgICAgICAgICogd3RmL1JlZEJsYWNrVHJlZS5oOgorICAgICAgICAqIHd0Zi9TdGRM
aWJFeHRyYXMuaDoKKyAgICAgICAgKFdURjo6Y29uc3RydWN0Rml4ZWRTaXplQXJyYXlXaXRoQXJn
dW1lbnRzSW1wbCk6CisgICAgICAgIChXVEY6OmNvbnN0cnVjdEZpeGVkU2l6ZUFycmF5V2l0aEFy
Z3VtZW50cyk6CisKIDIwMjAtMDMtMTEgIEplciBOb2JsZSAgPGplci5ub2JsZUBhcHBsZS5jb20+
CiAKICAgICAgICAgQWRvcHQgQVZTYW1wbGVCdWZmZXJWaWRlb091dHB1dApJbmRleDogU291cmNl
L1dURi93dGYvTWV0YUFsbG9jYXRvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYv
TWV0YUFsbG9jYXRvci5jcHAJKHJldmlzaW9uIDI1ODM1MCkKKysrIFNvdXJjZS9XVEYvd3RmL01l
dGFBbGxvY2F0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01NCwyMiArNTQsMjEgQEAgTWV0YUFs
bG9jYXRvcjo6fk1ldGFBbGxvY2F0b3IoKQogI2VuZGlmCiB9CiAKLXZvaWQgTWV0YUFsbG9jYXRv
clRyYWNrZXI6Om5vdGlmeShNZXRhQWxsb2NhdG9ySGFuZGxlKiBoYW5kbGUpCit2b2lkIE1ldGFB
bGxvY2F0b3JUcmFja2VyOjpub3RpZnkoTWV0YUFsbG9jYXRvckhhbmRsZSYgaGFuZGxlKQogewot
ICAgIG1fYWxsb2NhdGlvbnMuaW5zZXJ0KGhhbmRsZSk7CisgICAgbV9hbGxvY2F0aW9ucy5pbnNl
cnQoJmhhbmRsZSk7CiB9CiAKLXZvaWQgTWV0YUFsbG9jYXRvclRyYWNrZXI6OnJlbGVhc2UoTWV0
YUFsbG9jYXRvckhhbmRsZSogaGFuZGxlKQordm9pZCBNZXRhQWxsb2NhdG9yVHJhY2tlcjo6cmVs
ZWFzZShNZXRhQWxsb2NhdG9ySGFuZGxlJiBoYW5kbGUpCiB7Ci0gICAgbV9hbGxvY2F0aW9ucy5y
ZW1vdmUoaGFuZGxlKTsKKyAgICBtX2FsbG9jYXRpb25zLnJlbW92ZSgmaGFuZGxlKTsKIH0KIAot
QUxXQVlTX0lOTElORSB2b2lkIE1ldGFBbGxvY2F0b3I6OnJlbGVhc2UoTWV0YUFsbG9jYXRvckhh
bmRsZSogaGFuZGxlKQordm9pZCBNZXRhQWxsb2NhdG9yOjpyZWxlYXNlKGNvbnN0IExvY2tIb2xk
ZXImLCBNZXRhQWxsb2NhdG9ySGFuZGxlJiBoYW5kbGUpCiB7Ci0gICAgTG9ja0hvbGRlciBsb2Nr
ZXIoJm1fbG9jayk7Ci0gICAgaWYgKGhhbmRsZS0+c2l6ZUluQnl0ZXMoKSkgewotICAgICAgICB2
b2lkKiBzdGFydCA9IGhhbmRsZS0+c3RhcnQoKS51bnRhZ2dlZFB0cigpOwotICAgICAgICBzaXpl
X3Qgc2l6ZUluQnl0ZXMgPSBoYW5kbGUtPnNpemVJbkJ5dGVzKCk7CisgICAgaWYgKGhhbmRsZS5z
aXplSW5CeXRlcygpKSB7CisgICAgICAgIHZvaWQqIHN0YXJ0ID0gaGFuZGxlLnN0YXJ0KCkudW50
YWdnZWRQdHIoKTsKKyAgICAgICAgc2l6ZV90IHNpemVJbkJ5dGVzID0gaGFuZGxlLnNpemVJbkJ5
dGVzKCk7CiAgICAgICAgIGRlY3JlbWVudFBhZ2VPY2N1cGFuY3koc3RhcnQsIHNpemVJbkJ5dGVz
KTsKICAgICAgICAgYWRkRnJlZVNwYWNlRnJvbVJlbGVhc2VkSGFuZGxlKEZyZWVTcGFjZVB0cihz
dGFydCksIHNpemVJbkJ5dGVzKTsKICAgICB9CkBAIC03OCwyMSArNzcsMTkgQEAgQUxXQVlTX0lO
TElORSB2b2lkIE1ldGFBbGxvY2F0b3I6OnJlbGVhcwogICAgICAgICBtX3RyYWNrZXItPnJlbGVh
c2UoaGFuZGxlKTsKIH0KIAotTWV0YUFsbG9jYXRvckhhbmRsZTo6TWV0YUFsbG9jYXRvckhhbmRs
ZShNZXRhQWxsb2NhdG9yKiBhbGxvY2F0b3IsIHZvaWQqIHN0YXJ0LCBzaXplX3Qgc2l6ZUluQnl0
ZXMsIHZvaWQqIG93bmVyVUlEKQorTWV0YUFsbG9jYXRvckhhbmRsZTo6TWV0YUFsbG9jYXRvckhh
bmRsZShNZXRhQWxsb2NhdG9yJiBhbGxvY2F0b3IsIHZvaWQqIHN0YXJ0LCBzaXplX3Qgc2l6ZUlu
Qnl0ZXMpCiAgICAgOiBtX2FsbG9jYXRvcihhbGxvY2F0b3IpCiAgICAgLCBtX3N0YXJ0KHN0YXJ0
KQogICAgICwgbV9lbmQocmVpbnRlcnByZXRfY2FzdDxjaGFyKj4oc3RhcnQpICsgc2l6ZUluQnl0
ZXMpCi0gICAgLCBtX293bmVyVUlEKG93bmVyVUlEKQogewotICAgIEFTU0VSVChhbGxvY2F0b3Ip
OwogICAgIEFTU0VSVChzdGFydCk7CiAgICAgQVNTRVJUKHNpemVJbkJ5dGVzKTsKIH0KIAogTWV0
YUFsbG9jYXRvckhhbmRsZTo6fk1ldGFBbGxvY2F0b3JIYW5kbGUoKQogewotICAgIEFTU0VSVCht
X2FsbG9jYXRvcik7Ci0gICAgbV9hbGxvY2F0b3ItPnJlbGVhc2UodGhpcyk7CisgICAgYXV0byBs
b2NrZXIgPSBob2xkTG9jayhhbGxvY2F0b3IoKS5tX2xvY2spOworICAgIGFsbG9jYXRvcigpLnJl
bGVhc2UobG9ja2VyLCAqdGhpcyk7CiB9CiAKIHZvaWQgTWV0YUFsbG9jYXRvckhhbmRsZTo6c2hy
aW5rKHNpemVfdCBuZXdTaXplSW5CeXRlcykKQEAgLTEwMCw5ICs5NywxMCBAQCB2b2lkIE1ldGFB
bGxvY2F0b3JIYW5kbGU6OnNocmluayhzaXplX3QgCiAgICAgc2l6ZV90IHNpemVJbkJ5dGVzID0g
dGhpcy0+c2l6ZUluQnl0ZXMoKTsKICAgICBBU1NFUlQobmV3U2l6ZUluQnl0ZXMgPD0gc2l6ZUlu
Qnl0ZXMpOwogCi0gICAgTG9ja0hvbGRlciBsb2NrZXIoJm1fYWxsb2NhdG9yLT5tX2xvY2spOwor
ICAgIE1ldGFBbGxvY2F0b3ImIGFsbG9jYXRvciA9IHRoaXMtPmFsbG9jYXRvcigpOworICAgIExv
Y2tIb2xkZXIgbG9ja2VyKCZhbGxvY2F0b3IubV9sb2NrKTsKIAotICAgIG5ld1NpemVJbkJ5dGVz
ID0gbV9hbGxvY2F0b3ItPnJvdW5kVXAobmV3U2l6ZUluQnl0ZXMpOworICAgIG5ld1NpemVJbkJ5
dGVzID0gYWxsb2NhdG9yLnJvdW5kVXAobmV3U2l6ZUluQnl0ZXMpOwogICAgIAogICAgIEFTU0VS
VChuZXdTaXplSW5CeXRlcyA8PSBzaXplSW5CeXRlcyk7CiAKQEAgLTExMywxMSArMTExLDExIEBA
IHZvaWQgTWV0YUFsbG9jYXRvckhhbmRsZTo6c2hyaW5rKHNpemVfdCAKICAgICBzaXplX3QgZnJl
ZVNpemUgPSBzaXplSW5CeXRlcyAtIG5ld1NpemVJbkJ5dGVzOwogICAgIHVpbnRwdHJfdCBmcmVl
RW5kID0gZnJlZVN0YXJ0ICsgZnJlZVNpemU7CiAgICAgCi0gICAgdWludHB0cl90IGZpcnN0Q29t
cGxldGVseUZyZWVQYWdlID0gKGZyZWVTdGFydCArIG1fYWxsb2NhdG9yLT5tX3BhZ2VTaXplIC0g
MSkgJiB+KG1fYWxsb2NhdG9yLT5tX3BhZ2VTaXplIC0gMSk7CisgICAgdWludHB0cl90IGZpcnN0
Q29tcGxldGVseUZyZWVQYWdlID0gKGZyZWVTdGFydCArIGFsbG9jYXRvci5tX3BhZ2VTaXplIC0g
MSkgJiB+KGFsbG9jYXRvci5tX3BhZ2VTaXplIC0gMSk7CiAgICAgaWYgKGZpcnN0Q29tcGxldGVs
eUZyZWVQYWdlIDwgZnJlZUVuZCkKLSAgICAgICAgbV9hbGxvY2F0b3ItPmRlY3JlbWVudFBhZ2VP
Y2N1cGFuY3kocmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oZmlyc3RDb21wbGV0ZWx5RnJlZVBhZ2Up
LCBmcmVlU2l6ZSAtIChmaXJzdENvbXBsZXRlbHlGcmVlUGFnZSAtIGZyZWVTdGFydCkpOworICAg
ICAgICBhbGxvY2F0b3IuZGVjcmVtZW50UGFnZU9jY3VwYW5jeShyZWludGVycHJldF9jYXN0PHZv
aWQqPihmaXJzdENvbXBsZXRlbHlGcmVlUGFnZSksIGZyZWVTaXplIC0gKGZpcnN0Q29tcGxldGVs
eUZyZWVQYWdlIC0gZnJlZVN0YXJ0KSk7CiAKLSAgICBtX2FsbG9jYXRvci0+YWRkRnJlZVNwYWNl
RnJvbVJlbGVhc2VkSGFuZGxlKE1ldGFBbGxvY2F0b3I6OkZyZWVTcGFjZVB0cihmcmVlU3RhcnQp
LCBmcmVlU2l6ZSk7CisgICAgYWxsb2NhdG9yLmFkZEZyZWVTcGFjZUZyb21SZWxlYXNlZEhhbmRs
ZShNZXRhQWxsb2NhdG9yOjpGcmVlU3BhY2VQdHIoZnJlZVN0YXJ0KSwgZnJlZVNpemUpOwogCiAg
ICAgbV9lbmQgPSBtX3N0YXJ0ICsgbmV3U2l6ZUluQnl0ZXM7CiB9CkBAIC0xMjcsMTMgKzEyNSwx
MyBAQCB2b2lkIE1ldGFBbGxvY2F0b3JIYW5kbGU6OmR1bXAoUHJpbnRTdHJlCiAgICAgb3V0LnBy
aW50KFJhd1BvaW50ZXIoc3RhcnQoKS51bnRhZ2dlZFB0cigpKSwgIi4uLiIsIFJhd1BvaW50ZXIo
ZW5kKCkudW50YWdnZWRQdHIoKSkpOwogfQogCi1NZXRhQWxsb2NhdG9yOjpNZXRhQWxsb2NhdG9y
KHNpemVfdCBhbGxvY2F0aW9uR3JhbnVsZSwgc2l6ZV90IHBhZ2VTaXplKQorTWV0YUFsbG9jYXRv
cjo6TWV0YUFsbG9jYXRvcihMb2NrJiBsb2NrLCBzaXplX3QgYWxsb2NhdGlvbkdyYW51bGUsIHNp
emVfdCBwYWdlU2l6ZSkKICAgICA6IG1fYWxsb2NhdGlvbkdyYW51bGUoYWxsb2NhdGlvbkdyYW51
bGUpCiAgICAgLCBtX3BhZ2VTaXplKHBhZ2VTaXplKQogICAgICwgbV9ieXRlc0FsbG9jYXRlZCgw
KQogICAgICwgbV9ieXRlc1Jlc2VydmVkKDApCiAgICAgLCBtX2J5dGVzQ29tbWl0dGVkKDApCi0g
ICAgLCBtX3RyYWNrZXIoMCkKKyAgICAsIG1fbG9jayhsb2NrKQogI2lmbmRlZiBOREVCVUcKICAg
ICAsIG1fbWFsbG9jQmFsYW5jZSgwKQogI2VuZGlmCkBAIC0xNTcsMTAgKzE1NSw4IEBAIE1ldGFB
bGxvY2F0b3I6Ok1ldGFBbGxvY2F0b3Ioc2l6ZV90IGFsbG8KICAgICBBU1NFUlQoc3RhdGljX2Nh
c3Q8c2l6ZV90PigxKSA8PCBtX2xvZ0FsbG9jYXRpb25HcmFudWxlID09IG1fYWxsb2NhdGlvbkdy
YW51bGUpOwogfQogCi1SZWZQdHI8TWV0YUFsbG9jYXRvckhhbmRsZT4gTWV0YUFsbG9jYXRvcjo6
YWxsb2NhdGUoc2l6ZV90IHNpemVJbkJ5dGVzLCB2b2lkKiBvd25lclVJRCkKK1JlZlB0cjxNZXRh
QWxsb2NhdG9ySGFuZGxlPiBNZXRhQWxsb2NhdG9yOjphbGxvY2F0ZShjb25zdCBMb2NrSG9sZGVy
Jiwgc2l6ZV90IHNpemVJbkJ5dGVzKQogewotICAgIExvY2tIb2xkZXIgbG9ja2VyKCZtX2xvY2sp
OwotCiAgICAgaWYgKCFzaXplSW5CeXRlcykKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAg
CkBAIC0xOTUsMTcgKzE5MSwxNiBAQCBSZWZQdHI8TWV0YUFsbG9jYXRvckhhbmRsZT4gTWV0YUFs
bG9jYXRvCiAgICAgbV9udW1BbGxvY2F0aW9ucysrOwogI2VuZGlmCiAKLSAgICBhdXRvIGhhbmRs
ZSA9IGFkb3B0UmVmKCpuZXcgTWV0YUFsbG9jYXRvckhhbmRsZSh0aGlzLCBzdGFydC51bnRhZ2dl
ZFB0cigpLCBzaXplSW5CeXRlcywgb3duZXJVSUQpKTsKKyAgICBhdXRvIGhhbmRsZSA9IGFkb3B0
UmVmKCpuZXcgTWV0YUFsbG9jYXRvckhhbmRsZSgqdGhpcywgc3RhcnQudW50YWdnZWRQdHIoKSwg
c2l6ZUluQnl0ZXMpKTsKIAogICAgIGlmIChVTkxJS0VMWSghIW1fdHJhY2tlcikpCi0gICAgICAg
IG1fdHJhY2tlci0+bm90aWZ5KGhhbmRsZS5wdHIoKSk7CisgICAgICAgIG1fdHJhY2tlci0+bm90
aWZ5KCpoYW5kbGUucHRyKCkpOwogCiAgICAgcmV0dXJuIGhhbmRsZTsKIH0KIAotTWV0YUFsbG9j
YXRvcjo6U3RhdGlzdGljcyBNZXRhQWxsb2NhdG9yOjpjdXJyZW50U3RhdGlzdGljcygpCitNZXRh
QWxsb2NhdG9yOjpTdGF0aXN0aWNzIE1ldGFBbGxvY2F0b3I6OmN1cnJlbnRTdGF0aXN0aWNzKGNv
bnN0IExvY2tIb2xkZXImKQogewotICAgIExvY2tIb2xkZXIgbG9ja2VyKCZtX2xvY2spOwogICAg
IFN0YXRpc3RpY3MgcmVzdWx0OwogICAgIHJlc3VsdC5ieXRlc0FsbG9jYXRlZCA9IG1fYnl0ZXNB
bGxvY2F0ZWQ7CiAgICAgcmVzdWx0LmJ5dGVzUmVzZXJ2ZWQgPSBtX2J5dGVzUmVzZXJ2ZWQ7Cklu
ZGV4OiBTb3VyY2UvV1RGL3d0Zi9NZXRhQWxsb2NhdG9yLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dURi93dGYvTWV0YUFsbG9jYXRvci5oCShyZXZpc2lvbiAyNTgzNTApCisrKyBTb3VyY2UvV1RG
L3d0Zi9NZXRhQWxsb2NhdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ0LDE1ICs0NCwxNSBAQCBu
YW1lc3BhY2UgV1RGIHsKIGNsYXNzIE1ldGFBbGxvY2F0b3JUcmFja2VyIHsKICAgICBXVEZfTUFL
RV9GQVNUX0FMTE9DQVRFRDsKIHB1YmxpYzoKLSAgICB2b2lkIG5vdGlmeShNZXRhQWxsb2NhdG9y
SGFuZGxlKik7Ci0gICAgdm9pZCByZWxlYXNlKE1ldGFBbGxvY2F0b3JIYW5kbGUqKTsKKyAgICB2
b2lkIG5vdGlmeShNZXRhQWxsb2NhdG9ySGFuZGxlJik7CisgICAgdm9pZCByZWxlYXNlKE1ldGFB
bGxvY2F0b3JIYW5kbGUmKTsKIAogICAgIE1ldGFBbGxvY2F0b3JIYW5kbGUqIGZpbmQodm9pZCog
YWRkcmVzcykKICAgICB7CiAgICAgICAgIE1ldGFBbGxvY2F0b3JIYW5kbGUqIGhhbmRsZSA9IG1f
YWxsb2NhdGlvbnMuZmluZEdyZWF0ZXN0TGVzc1RoYW5PckVxdWFsKGFkZHJlc3MpOwotICAgICAg
ICBpZiAoaGFuZGxlICYmIGFkZHJlc3MgPCBoYW5kbGUtPmVuZCgpLnVudGFnZ2VkUHRyKCkpCisg
ICAgICAgIGlmIChoYW5kbGUgJiYgaGFuZGxlLT5zdGFydCgpLnVudGFnZ2VkUHRyKCkgPD0gYWRk
cmVzcyAmJiBhZGRyZXNzIDwgaGFuZGxlLT5lbmQoKS51bnRhZ2dlZFB0cigpKQogICAgICAgICAg
ICAgcmV0dXJuIGhhbmRsZTsKLSAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIHJldHVybiBudWxs
cHRyOwogICAgIH0KIAogICAgIFJlZEJsYWNrVHJlZTxNZXRhQWxsb2NhdG9ySGFuZGxlLCB2b2lk
Kj4gbV9hbGxvY2F0aW9uczsKQEAgLTY0LDE3ICs2NCwyMiBAQCBjbGFzcyBNZXRhQWxsb2NhdG9y
IHsKIHB1YmxpYzoKICAgICB1c2luZyBGcmVlU3BhY2VQdHIgPSBNZXRhQWxsb2NhdG9yUHRyPEZy
ZWVTcGFjZVB0clRhZz47CiAKLSAgICBXVEZfRVhQT1JUX1BSSVZBVEUgTWV0YUFsbG9jYXRvcihz
aXplX3QgYWxsb2NhdGlvbkdyYW51bGUsIHNpemVfdCBwYWdlU2l6ZSA9IFdURjo6cGFnZVNpemUo
KSk7CisgICAgV1RGX0VYUE9SVF9QUklWQVRFIE1ldGFBbGxvY2F0b3IoTG9jayYsIHNpemVfdCBh
bGxvY2F0aW9uR3JhbnVsZSwgc2l6ZV90IHBhZ2VTaXplID0gV1RGOjpwYWdlU2l6ZSgpKTsKICAg
ICAKICAgICBXVEZfRVhQT1JUX1BSSVZBVEUgdmlydHVhbCB+TWV0YUFsbG9jYXRvcigpOwogICAg
IAotICAgIFdURl9FWFBPUlRfUFJJVkFURSBSZWZQdHI8TWV0YUFsbG9jYXRvckhhbmRsZT4gYWxs
b2NhdGUoc2l6ZV90IHNpemVJbkJ5dGVzLCB2b2lkKiBvd25lclVJRCk7CisgICAgUmVmUHRyPE1l
dGFBbGxvY2F0b3JIYW5kbGU+IGFsbG9jYXRlKHNpemVfdCBzaXplSW5CeXRlcykKKyAgICB7Cisg
ICAgICAgIGF1dG8gbG9ja2VyID0gaG9sZExvY2sobV9sb2NrKTsKKyAgICAgICAgcmV0dXJuIGFs
bG9jYXRlKGxvY2tlciwgc2l6ZUluQnl0ZXMpOworICAgIH0KKyAgICBXVEZfRVhQT1JUX1BSSVZB
VEUgUmVmUHRyPE1ldGFBbGxvY2F0b3JIYW5kbGU+IGFsbG9jYXRlKGNvbnN0IExvY2tIb2xkZXIm
LCBzaXplX3Qgc2l6ZUluQnl0ZXMpOwogCiAgICAgdm9pZCB0cmFja0FsbG9jYXRpb25zKE1ldGFB
bGxvY2F0b3JUcmFja2VyKiB0cmFja2VyKQogICAgIHsKICAgICAgICAgbV90cmFja2VyID0gdHJh
Y2tlcjsKICAgICB9Ci0gICAgCisKICAgICAvLyBOb24tYXRvbWljIG1ldGhvZHMgZm9yIGdldHRp
bmcgYWxsb2NhdG9yIHN0YXRpc3RpY3MuCiAgICAgc2l6ZV90IGJ5dGVzQWxsb2NhdGVkKCkgeyBy
ZXR1cm4gbV9ieXRlc0FsbG9jYXRlZDsgfQogICAgIHNpemVfdCBieXRlc1Jlc2VydmVkKCkgeyBy
ZXR1cm4gbV9ieXRlc1Jlc2VydmVkOyB9CkBAIC04Nyw3ICs5MiwxMiBAQCBwdWJsaWM6CiAgICAg
ICAgIHNpemVfdCBieXRlc1Jlc2VydmVkOwogICAgICAgICBzaXplX3QgYnl0ZXNDb21taXR0ZWQ7
CiAgICAgfTsKLSAgICBXVEZfRVhQT1JUX1BSSVZBVEUgU3RhdGlzdGljcyBjdXJyZW50U3RhdGlz
dGljcygpOworICAgIFN0YXRpc3RpY3MgY3VycmVudFN0YXRpc3RpY3MoKQorICAgIHsKKyAgICAg
ICAgYXV0byBsb2NrZXIgPSBob2xkTG9jayhtX2xvY2spOworICAgICAgICByZXR1cm4gY3VycmVu
dFN0YXRpc3RpY3MobG9ja2VyKTsKKyAgICB9CisgICAgV1RGX0VYUE9SVF9QUklWQVRFIFN0YXRp
c3RpY3MgY3VycmVudFN0YXRpc3RpY3MoY29uc3QgTG9ja0hvbGRlciYpOwogCiAgICAgLy8gQWRk
IG1vcmUgZnJlZSBzcGFjZSB0byB0aGUgYWxsb2NhdG9yLiBDYWxsIHRoaXMgZGlyZWN0bHkgZnJv
bQogICAgIC8vIHRoZSBjb25zdHJ1Y3RvciBpZiB5b3Ugd2lzaCB0byBvcGVyYXRlIHRoZSBhbGxv
Y2F0b3Igd2l0aGluIGEKQEAgLTk4LDcgKzEwOCw2IEBAIHB1YmxpYzoKICAgICAvLyBidWlsZHMu
CiAgICAgV1RGX0VYUE9SVF9QUklWQVRFIHNpemVfdCBkZWJ1Z0ZyZWVTcGFjZVNpemUoKTsKIAot
ICAgIExvY2smIGdldExvY2soKSB7IHJldHVybiBtX2xvY2s7IH0KICAgICBXVEZfRVhQT1JUX1BS
SVZBVEUgYm9vbCBpc0luQWxsb2NhdGVkTWVtb3J5KGNvbnN0IEFic3RyYWN0TG9ja2VyJiwgdm9p
ZCogYWRkcmVzcyk7CiAgICAgCiAjaWYgRU5BQkxFKE1FVEFfQUxMT0NBVE9SX1BST0ZJTEUpCkBA
IC0xMjMsNiArMTMyLDggQEAgcHJvdGVjdGVkOgogICAgIC8vIGRlc3RydWN0aW9uLCBpbiBwYXJ0
IGJlY2F1c2UgYSBNZXRhQWxsb2NhdG9yIGNhbm5vdCBkaWUgc28gbG9uZwogICAgIC8vIGFzIHRo
ZXJlIGFyZSBIYW5kbGVzIHRoYXQgcmVmZXIgdG8gaXQuCiAKKyAgICAvLyBSZWxlYXNlIGEgTWV0
YUFsbG9jYXRvckhhbmRsZS4KKyAgICB2aXJ0dWFsIHZvaWQgcmVsZWFzZShjb25zdCBMb2NrSG9s
ZGVyJiwgTWV0YUFsbG9jYXRvckhhbmRsZSYpOwogcHJpdmF0ZToKICAgICAKICAgICBmcmllbmQg
Y2xhc3MgTWV0YUFsbG9jYXRvckhhbmRsZTsKQEAgLTE1MCw5ICsxNjEsNiBAQCBwcml2YXRlOgog
ICAgICAgICBGcmVlU3BhY2VQdHIgbV9lbmQ7CiAgICAgfTsKICAgICB0eXBlZGVmIFJlZEJsYWNr
VHJlZTxGcmVlU3BhY2VOb2RlLCBzaXplX3Q+IFRyZWU7Ci0KLSAgICAvLyBSZWxlYXNlIGEgTWV0
YUFsbG9jYXRvckhhbmRsZS4KLSAgICB2b2lkIHJlbGVhc2UoTWV0YUFsbG9jYXRvckhhbmRsZSop
OwogICAgIAogICAgIC8vIFJlbW92ZSBmcmVlIHNwYWNlIGZyb20gdGhlIGFsbG9jYXRvci4gVGhp
cyBpcyBlZmZlY3RpdmVseQogICAgIC8vIHRoZSBhbGxvY2F0ZSgpIGZ1bmN0aW9uLCBleGNlcHQg
dGhhdCBpdCBkb2VzIG5vdCBtYXJrIHRoZQpAQCAtMTkzLDkgKzIwMSw5IEBAIHByaXZhdGU6CiAg
ICAgc2l6ZV90IG1fYnl0ZXNSZXNlcnZlZDsKICAgICBzaXplX3QgbV9ieXRlc0NvbW1pdHRlZDsK
ICAgICAKLSAgICBMb2NrIG1fbG9jazsKKyAgICBMb2NrJiBtX2xvY2s7CiAKLSAgICBNZXRhQWxs
b2NhdG9yVHJhY2tlciogbV90cmFja2VyOworICAgIE1ldGFBbGxvY2F0b3JUcmFja2VyKiBtX3Ry
YWNrZXIgeyBudWxscHRyIH07CiAKICNpZm5kZWYgTkRFQlVHCiAgICAgc2l6ZV90IG1fbWFsbG9j
QmFsYW5jZTsKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL01ldGFBbGxvY2F0b3JIYW5kbGUuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9NZXRhQWxsb2NhdG9ySGFuZGxlLmgJKHJldmlzaW9u
IDI1ODM1MCkKKysrIFNvdXJjZS9XVEYvd3RmL01ldGFBbGxvY2F0b3JIYW5kbGUuaAkod29ya2lu
ZyBjb3B5KQpAQCAtNDIsNyArNDIsNyBAQCBERUNMQVJFX0FMTE9DQVRPUl9XSVRIX0hFQVBfSURF
TlRJRklFUihNCiBjbGFzcyBNZXRhQWxsb2NhdG9ySGFuZGxlIDogcHVibGljIFRocmVhZFNhZmVS
ZWZDb3VudGVkPE1ldGFBbGxvY2F0b3JIYW5kbGU+LCBwdWJsaWMgUmVkQmxhY2tUcmVlPE1ldGFB
bGxvY2F0b3JIYW5kbGUsIHZvaWQqPjo6Tm9kZSB7CiAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FU
RURfV0lUSF9IRUFQX0lERU5USUZJRVIoTWV0YUFsbG9jYXRvckhhbmRsZSk7CiBwcml2YXRlOgot
ICAgIE1ldGFBbGxvY2F0b3JIYW5kbGUoTWV0YUFsbG9jYXRvciosIHZvaWQqIHN0YXJ0LCBzaXpl
X3Qgc2l6ZUluQnl0ZXMsIHZvaWQqIG93bmVyVUlEKTsKKyAgICBNZXRhQWxsb2NhdG9ySGFuZGxl
KE1ldGFBbGxvY2F0b3ImLCB2b2lkKiBzdGFydCwgc2l6ZV90IHNpemVJbkJ5dGVzKTsKIAogcHVi
bGljOgogICAgIHVzaW5nIE1lbW9yeVB0ciA9IE1ldGFBbGxvY2F0b3JQdHI8SGFuZGxlTWVtb3J5
UHRyVGFnPjsKQEAgLTg2LDIyICs4NiwxMSBAQCBwdWJsaWM6CiAgICAgICAgIAogICAgIFdURl9F
WFBPUlRfUFJJVkFURSB2b2lkIHNocmluayhzaXplX3QgbmV3U2l6ZUluQnl0ZXMpOwogICAgIAot
ICAgIGJvb2wgaXNNYW5hZ2VkKCkKKyAgICBNZXRhQWxsb2NhdG9yJiBhbGxvY2F0b3IoKQogICAg
IHsKLSAgICAgICAgcmV0dXJuICEhbV9hbGxvY2F0b3I7Ci0gICAgfQotICAgICAgICAKLSAgICBN
ZXRhQWxsb2NhdG9yKiBhbGxvY2F0b3IoKQotICAgIHsKLSAgICAgICAgQVNTRVJUKG1fYWxsb2Nh
dG9yKTsKICAgICAgICAgcmV0dXJuIG1fYWxsb2NhdG9yOwogICAgIH0KIAotICAgIHZvaWQqIG93
bmVyVUlEKCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBtX293bmVyVUlEOwotICAgIH0KLQogICAg
IHZvaWQqIGtleSgpCiAgICAgewogICAgICAgICByZXR1cm4gbV9zdGFydC51bnRhZ2dlZFB0cigp
OwpAQCAtMTEyLDEwICsxMDEsOSBAQCBwdWJsaWM6CiBwcml2YXRlOgogICAgIGZyaWVuZCBjbGFz
cyBNZXRhQWxsb2NhdG9yOwogICAgIAotICAgIE1ldGFBbGxvY2F0b3IqIG1fYWxsb2NhdG9yOwor
ICAgIE1ldGFBbGxvY2F0b3ImIG1fYWxsb2NhdG9yOwogICAgIE1lbW9yeVB0ciBtX3N0YXJ0Owog
ICAgIE1lbW9yeVB0ciBtX2VuZDsKLSAgICB2b2lkKiBtX293bmVyVUlEOwogfTsKIAogfQpJbmRl
eDogU291cmNlL1dURi93dGYvUGxhdGZvcm1Vc2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RG
L3d0Zi9QbGF0Zm9ybVVzZS5oCShyZXZpc2lvbiAyNTgzNTApCisrKyBTb3VyY2UvV1RGL3d0Zi9Q
bGF0Zm9ybVVzZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMjQsMyArMzI0LDcgQEAKICNpZiBQTEFU
Rk9STShJT1MpICYmIF9fSVBIT05FX09TX1ZFUlNJT05fTUlOX1JFUVVJUkVEID49IDE0MDAwMAog
I2RlZmluZSBVU0VfVVRUWVBFX1NXSVpaTEVSIDEKICNlbmRpZgorCisjaWYgQ1BVKEFSTTY0KSAm
JiBDUFUoQUREUkVTUzY0KQorI2RlZmluZSBVU0VfSlVNUF9JU0xBTkRTIDEKKyNlbmRpZgpJbmRl
eDogU291cmNlL1dURi93dGYvUmVkQmxhY2tUcmVlLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dU
Ri93dGYvUmVkQmxhY2tUcmVlLmgJKHJldmlzaW9uIDI1ODM1MCkKKysrIFNvdXJjZS9XVEYvd3Rm
L1JlZEJsYWNrVHJlZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMCw2ICszMCw3IEBACiAKICNpbmNs
dWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgogI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgorI2lu
Y2x1ZGUgPHd0Zi9WZWN0b3IuaD4KIAogbmFtZXNwYWNlIFdURiB7CiAKQEAgLTMyNCw2ICszMjUs
MjYgQEAgcHVibGljOgogICAgICAgICB9CiAgICAgICAgIHJldHVybiBiZXN0OwogICAgIH0KKwor
ICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBGdW5jdGlvbj4KKyAgICB2b2lkIGl0ZXJhdGUoRnVuY3Rp
b24gZnVuY3Rpb24pCisgICAgeworICAgICAgICBpZiAoIW1fcm9vdCkKKyAgICAgICAgICAgIHJl
dHVybjsKKworICAgICAgICBWZWN0b3I8Tm9kZVR5cGUqLCAxNj4gdG9JdGVyYXRlOworICAgICAg
ICB0b0l0ZXJhdGUuYXBwZW5kKG1fcm9vdCk7CisgICAgICAgIHdoaWxlICh0b0l0ZXJhdGUuc2l6
ZSgpKSB7CisgICAgICAgICAgICBOb2RlVHlwZSYgY3VycmVudCA9ICp0b0l0ZXJhdGUudGFrZUxh
c3QoKTsKKyAgICAgICAgICAgIGJvb2wgaXRlcmF0ZUxlZnQgPSBmYWxzZTsKKyAgICAgICAgICAg
IGJvb2wgaXRlcmF0ZVJpZ2h0ID0gZmFsc2U7CisgICAgICAgICAgICBmdW5jdGlvbihjdXJyZW50
LCBpdGVyYXRlTGVmdCwgaXRlcmF0ZVJpZ2h0KTsKKyAgICAgICAgICAgIGlmIChpdGVyYXRlTGVm
dCAmJiBjdXJyZW50LmxlZnQoKSkKKyAgICAgICAgICAgICAgICB0b0l0ZXJhdGUuYXBwZW5kKGN1
cnJlbnQubGVmdCgpKTsKKyAgICAgICAgICAgIGlmIChpdGVyYXRlUmlnaHQgJiYgY3VycmVudC5y
aWdodCgpKQorICAgICAgICAgICAgICAgIHRvSXRlcmF0ZS5hcHBlbmQoY3VycmVudC5yaWdodCgp
KTsKKyAgICAgICAgfQorICAgIH0KICAgICAKICAgICBOb2RlVHlwZSogZmlyc3QoKSBjb25zdAog
ICAgIHsKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL1N0ZExpYkV4dHJhcy5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XVEYvd3RmL1N0ZExpYkV4dHJhcy5oCShyZXZpc2lvbiAyNTgzNTApCisrKyBTb3Vy
Y2UvV1RGL3d0Zi9TdGRMaWJFeHRyYXMuaAkod29ya2luZyBjb3B5KQpAQCAtNDg5LDYgKzQ4OSwx
OSBAQCBBTFdBWVNfSU5MSU5FIGRlY2x0eXBlKGF1dG8pIG1ha2VVbmlxdWVXCiAgICAgcmV0dXJu
IHN0ZDo6bWFrZV91bmlxdWU8VD4oc3RkOjpmb3J3YXJkPEFyZ3M+KGFyZ3MpLi4uKTsKIH0KIAor
dGVtcGxhdGUgPHR5cGVuYW1lIFJlc3VsdFR5cGUsIHNpemVfdC4uLiBJcywgdHlwZW5hbWUgLi4u
QXJncz4KK2NvbnN0ZXhwciBhdXRvIGNvbnN0cnVjdEZpeGVkU2l6ZUFycmF5V2l0aEFyZ3VtZW50
c0ltcGwoc3RkOjppbmRleF9zZXF1ZW5jZTxJcy4uLj4sIEFyZ3MmJi4uLiBhcmdzKSAtPiBzdGQ6
OmFycmF5PFJlc3VsdFR5cGUsIHNpemVvZi4uLihJcyk+Cit7CisgICAgcmV0dXJuIHsgKCh2b2lk
KUlzLCBSZXN1bHRUeXBlIHsgc3RkOjpmb3J3YXJkPEFyZ3M+KGFyZ3MpLi4uIH0pLi4uIH07Cit9
CisKKy8vIENvbnN0cnVjdCBhbiBzdGQ6OmFycmF5IHdpdGggTiBlbGVtZW50cyBvZiBSZXN1bHRU
eXBlLCBwYXNzaW5nIEFyZ3MgdG8gZWFjaCBvZiB0aGUgTiBjb25zdHJ1Y3RvcnMuCit0ZW1wbGF0
ZTx0eXBlbmFtZSBSZXN1bHRUeXBlLCBzaXplX3QgTiwgdHlwZW5hbWUgLi4uQXJncz4KK2NvbnN0
ZXhwciBhdXRvIGNvbnN0cnVjdEZpeGVkU2l6ZUFycmF5V2l0aEFyZ3VtZW50cyhBcmdzJiYuLi4g
YXJncykgLT4gZGVjbHR5cGUoYXV0bykKK3sKKyAgICBhdXRvIHR1cGxlID0gc3RkOjptYWtlX2lu
ZGV4X3NlcXVlbmNlPE4+KCk7CisgICAgcmV0dXJuIGNvbnN0cnVjdEZpeGVkU2l6ZUFycmF5V2l0
aEFyZ3VtZW50c0ltcGw8UmVzdWx0VHlwZT4odHVwbGUsIHN0ZDo6Zm9yd2FyZDxBcmdzPihhcmdz
KS4uLik7Cit9CiAKIH0gLy8gbmFtZXNwYWNlIFdURgogCkBAIC01MTQsMyArNTI3LDQgQEAgdXNp
bmcgV1RGOjpzYWZlQ2FzdDsKIHVzaW5nIFdURjo6dHJ5QmluYXJ5U2VhcmNoOwogdXNpbmcgV1RG
OjptYWtlVW5pcXVlOwogdXNpbmcgV1RGOjptYWtlVW5pcXVlV2l0aG91dEZhc3RNYWxsb2NDaGVj
azsKK3VzaW5nIFdURjo6Y29uc3RydWN0Rml4ZWRTaXplQXJyYXlXaXRoQXJndW1lbnRzOwpJbmRl
eDogVG9vbHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL0NoYW5nZUxvZwkocmV2aXNp
b24gMjU4MzUwKQorKysgVG9vbHMvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEs
MTIgQEAKKzIwMjAtMDMtMTIgIFNhYW0gQmFyYXRpICA8c2JhcmF0aUBhcHBsZS5jb20+CisKKyAg
ICAgICAgSW1wbGVtZW50IDFHQiBvZiBleGVjdXRhYmxlIG1lbW9yeSBvbiBhcm02NAorICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjA4NDkwCisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBTY3JpcHRzL3J1bi1q
c2Mtc3RyZXNzLXRlc3RzOgorCiAyMDIwLTAzLTEyICBXZW5zb24gSHNpZWggIDx3ZW5zb25faHNp
ZWhAYXBwbGUuY29tPgogCiAgICAgICAgIHJ1bi13ZWJraXQtdGVzdHMgLS11c2UtZ3B1LXByb2Nl
c3Mgc2hvdWxkIGVuYWJsZSBHUFUgUHJvY2VzcyBmb3IgY2FudmFzCkluZGV4OiBUb29scy9TY3Jp
cHRzL3J1bi1qc2Mtc3RyZXNzLXRlc3RzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1NjcmlwdHMvcnVu
LWpzYy1zdHJlc3MtdGVzdHMJKHJldmlzaW9uIDI1ODM1MCkKKysrIFRvb2xzL1NjcmlwdHMvcnVu
LWpzYy1zdHJlc3MtdGVzdHMJKHdvcmtpbmcgY29weSkKQEAgLTUwLDYgKzUwLDcgQEAgU0NSSVBU
U19QQVRIID0gVEhJU19TQ1JJUFRfUEFUSC5kaXJuYW1lCiBXRUJLSVRfUEFUSCA9IFNDUklQVFNf
UEFUSC5kaXJuYW1lLmRpcm5hbWUKIExBWU9VVFRFU1RTX1BBVEggPSBXRUJLSVRfUEFUSCArICJM
YXlvdXRUZXN0cyIKIFdBU01URVNUU19QQVRIID0gV0VCS0lUX1BBVEggKyAiSlNUZXN0cy93YXNt
IgorSkVUU1RSRUFNMl9QQVRIID0gV0VCS0lUX1BBVEggKyAiUGVyZm9ybWFuY2VUZXN0cy9KZXRT
dHJlYW0yIgogQ0hBS1JBVEVTVFNfUEFUSCA9IFdFQktJVF9QQVRIICsgIkpTVGVzdHMvQ2hha3Jh
Q29yZS90ZXN0IgogcmFpc2UgdW5sZXNzIFNDUklQVFNfUEFUSC5iYXNlbmFtZS50b19zID09ICJT
Y3JpcHRzIgogcmFpc2UgdW5sZXNzIFNDUklQVFNfUEFUSC5kaXJuYW1lLmJhc2VuYW1lLnRvX3Mg
PT0gIlRvb2xzIgpAQCAtNjY5LDcgKzY3MCw3IEBAIGRlZiBydW5Ob0NKSVRWYWxpZGF0ZSgqb3B0
aW9uYWxUZXN0U3BlY2kKIGVuZAogCiBkZWYgcnVuTm9DSklUVmFsaWRhdGVQaGFzZXMoKm9wdGlv
bmFsVGVzdFNwZWNpZmljT3B0aW9ucykKLSAgICBydW4oIm5vLWNqaXQtdmFsaWRhdGUtcGhhc2Vz
IiwgIi0tdmFsaWRhdGVCeXRlY29kZT10cnVlIiwgIi0tdmFsaWRhdGVHcmFwaEF0RWFjaFBoYXNl
PXRydWUiLCAiLS11c2VTb3VyY2VQcm92aWRlckNhY2hlPWZhbHNlIiwgKihOT19DSklUX09QVElP
TlMgKyBvcHRpb25hbFRlc3RTcGVjaWZpY09wdGlvbnMpKQorICAgIHJ1bigibm8tY2ppdC12YWxp
ZGF0ZS1waGFzZXMiLCAiLS12YWxpZGF0ZUJ5dGVjb2RlPXRydWUiLCAiLS12YWxpZGF0ZUdyYXBo
QXRFYWNoUGhhc2U9dHJ1ZSIsICItLXVzZVNvdXJjZVByb3ZpZGVyQ2FjaGU9ZmFsc2UiLCAiLS11
c2VSYW5kb21pemluZ0V4ZWN1dGFibGVJc2xhbmRBbGxvY2F0aW9uPXRydWUiLCAqKE5PX0NKSVRf
T1BUSU9OUyArIG9wdGlvbmFsVGVzdFNwZWNpZmljT3B0aW9ucykpCiBlbmQKIAogZGVmIHJ1bk5v
Q0pJVENvbGxlY3RDb250aW51b3VzbHkoKm9wdGlvbmFsVGVzdFNwZWNpZmljT3B0aW9ucykKQEAg
LTcwNiw3ICs3MDcsNyBAQCBkZWYgcnVuRlRMTm9DSklUKCpvcHRpb25hbFRlc3RTcGVjaWZpY09w
CiBlbmQKIAogZGVmIHJ1bkZUTE5vQ0pJVEIzTzAoKm9wdGlvbmFsVGVzdFNwZWNpZmljT3B0aW9u
cykKLSAgICBydW4oImZ0bC1uby1jaml0LWIzbzAiLCAiLS11c2VBcnJheUFsbG9jYXRpb25Qcm9m
aWxpbmc9ZmFsc2UiLCAiLS1mb3JjZVBvbHlQcm90bz10cnVlIiwgKihGVExfT1BUSU9OUyArIE5P
X0NKSVRfT1BUSU9OUyArIEIzTzBfT1BUSU9OUyArIEZPUkNFX0xMSU5UX0VYSVRfT1BUSU9OUyAr
IG9wdGlvbmFsVGVzdFNwZWNpZmljT3B0aW9ucykpCisgICAgcnVuKCJmdGwtbm8tY2ppdC1iM28w
IiwgIi0tdXNlQXJyYXlBbGxvY2F0aW9uUHJvZmlsaW5nPWZhbHNlIiwgIi0tZm9yY2VQb2x5UHJv
dG89dHJ1ZSIsICItLXVzZVJhbmRvbWl6aW5nRXhlY3V0YWJsZUlzbGFuZEFsbG9jYXRpb249dHJ1
ZSIsICooRlRMX09QVElPTlMgKyBOT19DSklUX09QVElPTlMgKyBCM08wX09QVElPTlMgKyBGT1JD
RV9MTElOVF9FWElUX09QVElPTlMgKyBvcHRpb25hbFRlc3RTcGVjaWZpY09wdGlvbnMpKQogZW5k
CiAKIGRlZiBydW5GVExOb0NKSVRWYWxpZGF0ZSgqb3B0aW9uYWxUZXN0U3BlY2lmaWNPcHRpb25z
KQpAQCAtNzM0LDcgKzczNSw3IEBAIGRlZiBydW5ERkdFYWdlck5vQ0pJVFZhbGlkYXRlKCpvcHRp
b25hbFQKIGVuZAogCiBkZWYgcnVuRlRMRWFnZXIoKm9wdGlvbmFsVGVzdFNwZWNpZmljT3B0aW9u
cykKLSAgICBydW4oImZ0bC1lYWdlciIsICItLWFpckZvcmNlQnJpZ2dzQWxsb2NhdG9yPXRydWUi
LCAiLS1mb3JjZVBvbHlQcm90bz10cnVlIiwgKihGVExfT1BUSU9OUyArIEVBR0VSX09QVElPTlMg
KyBDT0xMRUNUX0NPTlRJTlVPVVNMWV9PUFRJT05TICsgb3B0aW9uYWxUZXN0U3BlY2lmaWNPcHRp
b25zKSkKKyAgICBydW4oImZ0bC1lYWdlciIsICItLWFpckZvcmNlQnJpZ2dzQWxsb2NhdG9yPXRy
dWUiLCAiLS11c2VSYW5kb21pemluZ0V4ZWN1dGFibGVJc2xhbmRBbGxvY2F0aW9uPXRydWUiLCAi
LS1mb3JjZVBvbHlQcm90bz10cnVlIiwgKihGVExfT1BUSU9OUyArIEVBR0VSX09QVElPTlMgKyBD
T0xMRUNUX0NPTlRJTlVPVVNMWV9PUFRJT05TICsgb3B0aW9uYWxUZXN0U3BlY2lmaWNPcHRpb25z
KSkKIGVuZAogCiBkZWYgcnVuRlRMRWFnZXJXYXRjaGRvZygqb3B0aW9uYWxUZXN0U3BlY2lmaWNP
cHRpb25zKQpAQCAtNzc1LDcgKzc3Niw3IEBAIGRlZiBydW5Ob0NKSVQoKm9wdGlvbmFsVGVzdFNw
ZWNpZmljT3B0aW8KIGVuZAogCiBkZWYgcnVuRWFnZXJKZXR0aXNvbk5vQ0pJVCgqb3B0aW9uYWxU
ZXN0U3BlY2lmaWNPcHRpb25zKQotICAgIHJ1bigiZWFnZXItamV0dGlzb24tbm8tY2ppdCIsICIt
LWZvcmNlQ29kZUJsb2NrVG9KZXR0aXNvbkR1ZVRvT2xkQWdlPXRydWUiLCAqKE5PX0NKSVRfT1BU
SU9OUyArIG9wdGlvbmFsVGVzdFNwZWNpZmljT3B0aW9ucykpCisgICAgcnVuKCJlYWdlci1qZXR0
aXNvbi1uby1jaml0IiwgIi0tdXNlUmFuZG9taXppbmdFeGVjdXRhYmxlSXNsYW5kQWxsb2NhdGlv
bj10cnVlIiwgIi0tZm9yY2VDb2RlQmxvY2tUb0pldHRpc29uRHVlVG9PbGRBZ2U9dHJ1ZSIsICoo
Tk9fQ0pJVF9PUFRJT05TICsgb3B0aW9uYWxUZXN0U3BlY2lmaWNPcHRpb25zKSkKIGVuZAogCiBk
ZWYgcnVuU2hhZG93Q2hpY2tlbigqb3B0aW9uYWxUZXN0U3BlY2lmaWNPcHRpb25zKQpAQCAtMTA4
MywxNiArMTA4NCwzNyBAQCBkZWYgcnVuV2ViQXNzZW1ibHkKICAgICBydW4oImRlZmF1bHQtd2Fz
bSIsICItbSIsICpGVExfT1BUSU9OUykKICAgICBpZiAkbW9kZSAhPSAicXVpY2siCiAgICAgICAg
IHJ1bigid2FzbS1uby1jaml0LXllcy10bHMtY29udGV4dCIsICItbSIsICItLXVzZUZhc3RUTFNG
b3JXYXNtQ29udGV4dD10cnVlIiwgKihGVExfT1BUSU9OUyArIE5PX0NKSVRfT1BUSU9OUykpCi0g
ICAgICAgIHJ1bigid2FzbS1lYWdlciIsICItbSIsICooRlRMX09QVElPTlMgKyBFQUdFUl9PUFRJ
T05TKSkKLSAgICAgICAgcnVuKCJ3YXNtLWVhZ2VyLWpldHRpc29uIiwgIi1tIiwgIi0tZm9yY2VD
b2RlQmxvY2tUb0pldHRpc29uRHVlVG9PbGRBZ2U9dHJ1ZSIsICpGVExfT1BUSU9OUykKKyAgICAg
ICAgcnVuKCJ3YXNtLWVhZ2VyIiwgIi1tIiwgIi0tdXNlUmFuZG9taXppbmdFeGVjdXRhYmxlSXNs
YW5kQWxsb2NhdGlvbj10cnVlIiwgKihGVExfT1BUSU9OUyArIEVBR0VSX09QVElPTlMpKQorICAg
ICAgICBydW4oIndhc20tZWFnZXItamV0dGlzb24iLCAiLW0iLCAiLS1mb3JjZUNvZGVCbG9ja1Rv
SmV0dGlzb25EdWVUb09sZEFnZT10cnVlIiwgIi0tdXNlUmFuZG9taXppbmdFeGVjdXRhYmxlSXNs
YW5kQWxsb2NhdGlvbj10cnVlIiwgKkZUTF9PUFRJT05TKQogICAgICAgICBydW4oIndhc20tbm8t
dGxzLWNvbnRleHQiLCAiLW0iLCAiLS11c2VGYXN0VExTRm9yV2FzbUNvbnRleHQ9ZmFsc2UiLCAq
RlRMX09QVElPTlMpCiAgICAgICAgIHJ1bigid2FzbS1zbG93LW1lbW9yeSIsICItbSIsICItLXVz
ZVdlYkFzc2VtYmx5RmFzdE1lbW9yeT1mYWxzZSIsICpGVExfT1BUSU9OUykKICAgICAgICAgcnVu
KCJ3YXNtLWIzIiwgIi1tIiwgIi0tdXNlV2FzbUxMSW50PWZhbHNlIiwgIi0td2FzbUJCUVVzZXNB
aXI9ZmFsc2UiLCAqRlRMX09QVElPTlMpCi0gICAgICAgIHJ1bigid2FzbS1haXIiLCAiLW0iLCAi
LS11c2VXYXNtTExJbnQ9ZmFsc2UiLCAqRlRMX09QVElPTlMpCisgICAgICAgIHJ1bigid2FzbS1h
aXIiLCAiLW0iLCAiLS11c2VXYXNtTExJbnQ9ZmFsc2UiLCAiLS11c2VSYW5kb21pemluZ0V4ZWN1
dGFibGVJc2xhbmRBbGxvY2F0aW9uPXRydWUiLCAqRlRMX09QVElPTlMpCiAgICAgICAgIHJ1bigi
d2FzbS1jb2xsZWN0LWNvbnRpbnVvdXNseSIsICItbSIsICItLWNvbGxlY3RDb250aW51b3VzbHk9
dHJ1ZSIsICpGVExfT1BUSU9OUykgaWYgc2hvdWxkQ29sbGVjdENvbnRpbnVvdXNseT8KICAgICBl
bmQKIGVuZAogCitkZWYgcnVuV2ViQXNzZW1ibHlKZXRTdHJlYW0yCisgICAgcmV0dXJuIGlmICEk
aml0VGVzdHMKKyAgICByZXR1cm4gaWYgISRpc0ZUTFBsYXRmb3JtCisKKyAgICBwcmVwYXJlRXh0
cmFBYnNvbHV0ZUZpbGVzKEpFVFNUUkVBTTJfUEFUSCwgWyJKZXRTdHJlYW1Ecml2ZXIuanMiXSkK
KyAgICBwcmVwYXJlRXh0cmFSZWxhdGl2ZUZpbGVzV2l0aEJhc2VEaXJlY3RvcnkoRGlyW0pFVFNU
UkVBTTJfUEFUSCArICJ3YXNtIiArICIqLmpzIl0ubWFwIHsgfGZ8ICJ3YXNtLyIgKyBGaWxlLmJh
c2VuYW1lKGYpIH0sICRjb2xsZWN0aW9uLmRpcm5hbWUsICRleHRyYUZpbGVzQmFzZURpci5kaXJu
YW1lKQorICAgIHByZXBhcmVFeHRyYVJlbGF0aXZlRmlsZXNXaXRoQmFzZURpcmVjdG9yeShEaXJb
SkVUU1RSRUFNMl9QQVRIICsgIndhc20iICsgIioud2FzbSJdLm1hcCB7IHxmfCAid2FzbS8iICsg
RmlsZS5iYXNlbmFtZShmKSB9LCAkY29sbGVjdGlvbi5kaXJuYW1lLCAkZXh0cmFGaWxlc0Jhc2VE
aXIuZGlybmFtZSkKKworICAgIHJ1bigiZGVmYXVsdC13YXNtIiwgKkZUTF9PUFRJT05TKQorICAg
IGlmICRtb2RlICE9ICJxdWljayIKKyAgICAgICAgcnVuKCJ3YXNtLW5vLWNqaXQteWVzLXRscy1j
b250ZXh0IiwgIi0tdXNlRmFzdFRMU0Zvcldhc21Db250ZXh0PXRydWUiLCAqKEZUTF9PUFRJT05T
ICsgTk9fQ0pJVF9PUFRJT05TKSkKKyAgICAgICAgcnVuKCJ3YXNtLWVhZ2VyIiwgIi0tdXNlUmFu
ZG9taXppbmdFeGVjdXRhYmxlSXNsYW5kQWxsb2NhdGlvbj10cnVlIiwgKihGVExfT1BUSU9OUyAr
IEVBR0VSX09QVElPTlMpKQorICAgICAgICBydW4oIndhc20tZWFnZXItamV0dGlzb24iLCAiLS1m
b3JjZUNvZGVCbG9ja1RvSmV0dGlzb25EdWVUb09sZEFnZT10cnVlIiwgKkZUTF9PUFRJT05TKQor
ICAgICAgICBydW4oIndhc20tbm8tdGxzLWNvbnRleHQiLCAiLS11c2VGYXN0VExTRm9yV2FzbUNv
bnRleHQ9ZmFsc2UiLCAqRlRMX09QVElPTlMpCisgICAgICAgIHJ1bigid2FzbS1zbG93LW1lbW9y
eSIsICItLXVzZVdlYkFzc2VtYmx5RmFzdE1lbW9yeT1mYWxzZSIsICpGVExfT1BUSU9OUykKKyAg
ICAgICAgcnVuKCJ3YXNtLWIzIiwgIi0tdXNlV2FzbUxMSW50PWZhbHNlIiwgIi0td2FzbUJCUVVz
ZXNBaXI9ZmFsc2UiLCAqRlRMX09QVElPTlMpCisgICAgICAgIHJ1bigid2FzbS1haXIiLCAiLS11
c2VXYXNtTExJbnQ9ZmFsc2UiLCAiLS11c2VSYW5kb21pemluZ0V4ZWN1dGFibGVJc2xhbmRBbGxv
Y2F0aW9uPXRydWUiLCAqRlRMX09QVElPTlMpCisgICAgICAgIHJ1bigid2FzbS1jb2xsZWN0LWNv
bnRpbnVvdXNseSIsICItLWNvbGxlY3RDb250aW51b3VzbHk9dHJ1ZSIsICpGVExfT1BUSU9OUykg
aWYgc2hvdWxkQ29sbGVjdENvbnRpbnVvdXNseT8KKyAgICBlbmQKK2VuZAorCiBkZWYgcnVuV2Vi
QXNzZW1ibHlTdWl0ZSgqb3B0aW9uYWxUZXN0U3BlY2lmaWNPcHRpb25zKQogICAgIHJldHVybiBp
ZiAhJGppdFRlc3RzCiAgICAgcmV0dXJuIGlmICEkaXNGVExQbGF0Zm9ybQpAQCAtMTEwMywxMSAr
MTEyNSwxMSBAQCBkZWYgcnVuV2ViQXNzZW1ibHlTdWl0ZSgqb3B0aW9uYWxUZXN0U3BlCiAgICAg
aWYgJG1vZGUgIT0gInF1aWNrIgogICAgICAgICBydW4oIndhc20tbm8tY2ppdC15ZXMtdGxzLWNv
bnRleHQiLCAiLW0iLCAiLS11c2VGYXN0VExTRm9yV2FzbUNvbnRleHQ9dHJ1ZSIsICooRlRMX09Q
VElPTlMgKyBOT19DSklUX09QVElPTlMgKyBvcHRpb25hbFRlc3RTcGVjaWZpY09wdGlvbnMpKQog
ICAgICAgICBydW4oIndhc20tZWFnZXIiLCAiLW0iLCAqKEZUTF9PUFRJT05TICsgRUFHRVJfT1BU
SU9OUyArIG9wdGlvbmFsVGVzdFNwZWNpZmljT3B0aW9ucykpCi0gICAgICAgIHJ1bigid2FzbS1l
YWdlci1qZXR0aXNvbiIsICItbSIsICItLWZvcmNlQ29kZUJsb2NrVG9KZXR0aXNvbkR1ZVRvT2xk
QWdlPXRydWUiLCAqKEZUTF9PUFRJT05TICsgb3B0aW9uYWxUZXN0U3BlY2lmaWNPcHRpb25zKSkK
KyAgICAgICAgcnVuKCJ3YXNtLWVhZ2VyLWpldHRpc29uIiwgIi1tIiwgIi0tZm9yY2VDb2RlQmxv
Y2tUb0pldHRpc29uRHVlVG9PbGRBZ2U9dHJ1ZSIsICItLXVzZVJhbmRvbWl6aW5nRXhlY3V0YWJs
ZUlzbGFuZEFsbG9jYXRpb249dHJ1ZSIsICooRlRMX09QVElPTlMgKyBvcHRpb25hbFRlc3RTcGVj
aWZpY09wdGlvbnMpKQogICAgICAgICBydW4oIndhc20tbm8tdGxzLWNvbnRleHQiLCAiLW0iLCAi
LS11c2VGYXN0VExTRm9yV2FzbUNvbnRleHQ9ZmFsc2UiLCAqKEZUTF9PUFRJT05TICsgb3B0aW9u
YWxUZXN0U3BlY2lmaWNPcHRpb25zKSkKICAgICAgICAgcnVuKCJ3YXNtLXNsb3ctbWVtb3J5Iiwg
Ii1tIiwgIi0tdXNlV2ViQXNzZW1ibHlGYXN0TWVtb3J5PWZhbHNlIiwgKihGVExfT1BUSU9OUyAr
IG9wdGlvbmFsVGVzdFNwZWNpZmljT3B0aW9ucykpCiAgICAgICAgIHJ1bigid2FzbS1iMyIsICIt
bSIsICItLXVzZVdhc21MTEludD1mYWxzZSIsICItLXdhc21CQlFVc2VzQWlyPWZhbHNlIiwgKihG
VExfT1BUSU9OUyArIG9wdGlvbmFsVGVzdFNwZWNpZmljT3B0aW9ucykpCi0gICAgICAgIHJ1bigi
d2FzbS1haXIiLCAiLW0iLCAiLS11c2VXYXNtTExJbnQ9ZmFsc2UiLCAqKEZUTF9PUFRJT05TICsg
b3B0aW9uYWxUZXN0U3BlY2lmaWNPcHRpb25zKSkKKyAgICAgICAgcnVuKCJ3YXNtLWFpciIsICIt
bSIsICItLXVzZVdhc21MTEludD1mYWxzZSIsICItLXVzZVJhbmRvbWl6aW5nRXhlY3V0YWJsZUlz
bGFuZEFsbG9jYXRpb249dHJ1ZSIsICooRlRMX09QVElPTlMgKyBvcHRpb25hbFRlc3RTcGVjaWZp
Y09wdGlvbnMpKQogICAgICAgICBydW4oIndhc20tY29sbGVjdC1jb250aW51b3VzbHkiLCAiLW0i
LCAiLS1jb2xsZWN0Q29udGludW91c2x5PXRydWUiLCAqKEZUTF9PUFRJT05TICsgb3B0aW9uYWxU
ZXN0U3BlY2lmaWNPcHRpb25zKSkgaWYgc2hvdWxkQ29sbGVjdENvbnRpbnVvdXNseT8KICAgICBl
bmQKIGVuZApAQCAtMTEzMywxMSArMTE1NSwxMSBAQCBkZWYgcnVuV2ViQXNzZW1ibHlXaXRoSGFy
bmVzcygqb3B0aW9uYWxUCiAgICAgaWYgJG1vZGUgIT0gInF1aWNrIgogICAgICAgICBydW5IYXJu
ZXNzVGVzdCgid2FzbS1uby1jaml0LXllcy10bHMtY29udGV4dCIsICItLXVzZUZhc3RUTFNGb3JX
YXNtQ29udGV4dD10cnVlIiwgKihGVExfT1BUSU9OUyArIE5PX0NKSVRfT1BUSU9OUyArIG9wdGlv
bmFsVGVzdFNwZWNpZmljT3B0aW9ucykpCiAgICAgICAgIHJ1bkhhcm5lc3NUZXN0KCJ3YXNtLWVh
Z2VyIiwgKihGVExfT1BUSU9OUyArIEVBR0VSX09QVElPTlMgKyBvcHRpb25hbFRlc3RTcGVjaWZp
Y09wdGlvbnMpKQotICAgICAgICBydW5IYXJuZXNzVGVzdCgid2FzbS1lYWdlci1qZXR0aXNvbiIs
ICItLWZvcmNlQ29kZUJsb2NrVG9KZXR0aXNvbkR1ZVRvT2xkQWdlPXRydWUiLCAqKEZUTF9PUFRJ
T05TICsgb3B0aW9uYWxUZXN0U3BlY2lmaWNPcHRpb25zKSkKKyAgICAgICAgcnVuSGFybmVzc1Rl
c3QoIndhc20tZWFnZXItamV0dGlzb24iLCAiLS1mb3JjZUNvZGVCbG9ja1RvSmV0dGlzb25EdWVU
b09sZEFnZT10cnVlIiwgIi0tdXNlUmFuZG9taXppbmdFeGVjdXRhYmxlSXNsYW5kQWxsb2NhdGlv
bj10cnVlIiwgKihGVExfT1BUSU9OUyArIG9wdGlvbmFsVGVzdFNwZWNpZmljT3B0aW9ucykpCiAg
ICAgICAgIHJ1bkhhcm5lc3NUZXN0KCJ3YXNtLW5vLXRscy1jb250ZXh0IiwgIi0tdXNlRmFzdFRM
U0Zvcldhc21Db250ZXh0PWZhbHNlIiwgKihGVExfT1BUSU9OUyArIG9wdGlvbmFsVGVzdFNwZWNp
ZmljT3B0aW9ucykpCiAgICAgICAgIHJ1bkhhcm5lc3NUZXN0KCJ3YXNtLXNsb3ctbWVtb3J5Iiwg
Ii0tdXNlV2ViQXNzZW1ibHlGYXN0TWVtb3J5PWZhbHNlIiwgKihGVExfT1BUSU9OUyArIG9wdGlv
bmFsVGVzdFNwZWNpZmljT3B0aW9ucykpCiAgICAgICAgIHJ1bkhhcm5lc3NUZXN0KCJ3YXNtLWIz
IiwgIi0tdXNlV2FzbUxMSW50PWZhbHNlIiwgIi0td2FzbUJCUVVzZXNBaXI9ZmFsc2UiLCAqKEZU
TF9PUFRJT05TICsgb3B0aW9uYWxUZXN0U3BlY2lmaWNPcHRpb25zKSkKLSAgICAgICAgcnVuSGFy
bmVzc1Rlc3QoIndhc20tbm8tYWlyIiwgIi0tdXNlV2FzbUxMSW50PWZhbHNlIiwgKihGVExfT1BU
SU9OUyArIG9wdGlvbmFsVGVzdFNwZWNpZmljT3B0aW9ucykpCisgICAgICAgIHJ1bkhhcm5lc3NU
ZXN0KCJ3YXNtLW5vLWFpciIsICItLXVzZVdhc21MTEludD1mYWxzZSIsICItLXVzZVJhbmRvbWl6
aW5nRXhlY3V0YWJsZUlzbGFuZEFsbG9jYXRpb249dHJ1ZSIsICooRlRMX09QVElPTlMgKyBvcHRp
b25hbFRlc3RTcGVjaWZpY09wdGlvbnMpKQogICAgICAgICBydW5IYXJuZXNzVGVzdCgid2FzbS1j
b2xsZWN0LWNvbnRpbnVvdXNseSIsICItLWNvbGxlY3RDb250aW51b3VzbHk9dHJ1ZSIsICooRlRM
X09QVElPTlMgKyBvcHRpb25hbFRlc3RTcGVjaWZpY09wdGlvbnMpKSBpZiBzaG91bGRDb2xsZWN0
Q29udGludW91c2x5PwogICAgIGVuZAogZW5kCkBAIC0xMTU0LDEwICsxMTc2LDEwIEBAIGRlZiBy
dW5XZWJBc3NlbWJseUVtc2NyaXB0ZW4obW9kZSkKICAgICBydW4oImRlZmF1bHQtd2FzbSIsICpG
VExfT1BUSU9OUykKICAgICBpZiAkbW9kZSAhPSAicXVpY2siCiAgICAgICAgIHJ1bigid2FzbS1u
by1jaml0LXllcy10bHMtY29udGV4dCIsICItLXVzZUZhc3RUTFNGb3JXYXNtQ29udGV4dD10cnVl
IiwgKihGVExfT1BUSU9OUyArIE5PX0NKSVRfT1BUSU9OUykpCi0gICAgICAgIHJ1bigid2FzbS1l
YWdlci1qZXR0aXNvbiIsICItLWZvcmNlQ29kZUJsb2NrVG9KZXR0aXNvbkR1ZVRvT2xkQWdlPXRy
dWUiLCAqRlRMX09QVElPTlMpCisgICAgICAgIHJ1bigid2FzbS1lYWdlci1qZXR0aXNvbiIsICIt
LWZvcmNlQ29kZUJsb2NrVG9KZXR0aXNvbkR1ZVRvT2xkQWdlPXRydWUiLCAiLS11c2VSYW5kb21p
emluZ0V4ZWN1dGFibGVJc2xhbmRBbGxvY2F0aW9uPXRydWUiLCAqRlRMX09QVElPTlMpCiAgICAg
ICAgIHJ1bigid2FzbS1uby10bHMtY29udGV4dCIsICItLXVzZUZhc3RUTFNGb3JXYXNtQ29udGV4
dD1mYWxzZSIsICpGVExfT1BUSU9OUykKICAgICAgICAgcnVuKCJ3YXNtLWIzIiwgIi0tdXNlV2Fz
bUxMSW50PWZhbHNlIiwgIi0td2FzbUJCUVVzZXNBaXI9ZmFsc2UiLCAqRlRMX09QVElPTlMpCi0g
ICAgICAgIHJ1bigid2FzbS1haXIiLCAiLS11c2VXYXNtTExJbnQ9ZmFsc2UiLCAqRlRMX09QVElP
TlMpCisgICAgICAgIHJ1bigid2FzbS1haXIiLCAiLS11c2VXYXNtTExJbnQ9ZmFsc2UiLCAiLS11
c2VSYW5kb21pemluZ0V4ZWN1dGFibGVJc2xhbmRBbGxvY2F0aW9uPXRydWUiLCAqRlRMX09QVElP
TlMpCiAgICAgICAgIHJ1bigid2FzbS1jb2xsZWN0LWNvbnRpbnVvdXNseSIsICItLWNvbGxlY3RD
b250aW51b3VzbHk9dHJ1ZSIsICpGVExfT1BUSU9OUykgaWYgc2hvdWxkQ29sbGVjdENvbnRpbnVv
dXNseT8KICAgICBlbmQKIGVuZApAQCAtMTE4MCwxMCArMTIwMiwxMCBAQCBkZWYgcnVuV2ViQXNz
ZW1ibHlTcGVjVGVzdChtb2RlKQogICAgIHJ1bldpdGhPdXRwdXRIYW5kbGVyKCJkZWZhdWx0LXdh
c20iLCBub2lzeU91dHB1dEhhbmRsZXIsICIuLi9zcGVjLWhhcm5lc3MuanMiLCAqRlRMX09QVElP
TlMpCiAgICAgaWYgJG1vZGUgIT0gInF1aWNrIgogICAgICAgcnVuV2l0aE91dHB1dEhhbmRsZXIo
Indhc20tbm8tY2ppdC15ZXMtdGxzLWNvbnRleHQiLCBub2lzeU91dHB1dEhhbmRsZXIsICIuLi9z
cGVjLWhhcm5lc3MuanMiLCAgIi0tdXNlRmFzdFRMU0Zvcldhc21Db250ZXh0PXRydWUiLCAqKEZU
TF9PUFRJT05TICsgTk9fQ0pJVF9PUFRJT05TKSkKLSAgICAgIHJ1bldpdGhPdXRwdXRIYW5kbGVy
KCJ3YXNtLWVhZ2VyLWpldHRpc29uIiwgbm9pc3lPdXRwdXRIYW5kbGVyLCAiLi4vc3BlYy1oYXJu
ZXNzLmpzIiwgIi0tZm9yY2VDb2RlQmxvY2tUb0pldHRpc29uRHVlVG9PbGRBZ2U9dHJ1ZSIsICpG
VExfT1BUSU9OUykKKyAgICAgIHJ1bldpdGhPdXRwdXRIYW5kbGVyKCJ3YXNtLWVhZ2VyLWpldHRp
c29uIiwgbm9pc3lPdXRwdXRIYW5kbGVyLCAiLi4vc3BlYy1oYXJuZXNzLmpzIiwgIi0tZm9yY2VD
b2RlQmxvY2tUb0pldHRpc29uRHVlVG9PbGRBZ2U9dHJ1ZSIsICItLXVzZVJhbmRvbWl6aW5nRXhl
Y3V0YWJsZUlzbGFuZEFsbG9jYXRpb249dHJ1ZSIsICpGVExfT1BUSU9OUykKICAgICAgIHJ1bldp
dGhPdXRwdXRIYW5kbGVyKCJ3YXNtLW5vLXRscy1jb250ZXh0Iiwgbm9pc3lPdXRwdXRIYW5kbGVy
LCAiLi4vc3BlYy1oYXJuZXNzLmpzIiwgIi0tdXNlRmFzdFRMU0Zvcldhc21Db250ZXh0PWZhbHNl
IiwgKkZUTF9PUFRJT05TKQogICAgICAgcnVuV2l0aE91dHB1dEhhbmRsZXIoIndhc20tYjMiLCBu
b2lzeU91dHB1dEhhbmRsZXIsICIuLi9zcGVjLWhhcm5lc3MuanMiLCAiLS11c2VXYXNtTExJbnQ9
ZmFsc2UiLCAiLS13YXNtQkJRVXNlc0Fpcj1mYWxzZSIsICpGVExfT1BUSU9OUykKLSAgICAgIHJ1
bldpdGhPdXRwdXRIYW5kbGVyKCJ3YXNtLWFpciIsIG5vaXN5T3V0cHV0SGFuZGxlciwgIi4uL3Nw
ZWMtaGFybmVzcy5qcyIsICItLXVzZVdhc21MTEludD1mYWxzZSIsICpGVExfT1BUSU9OUykKKyAg
ICAgIHJ1bldpdGhPdXRwdXRIYW5kbGVyKCJ3YXNtLWFpciIsIG5vaXN5T3V0cHV0SGFuZGxlciwg
Ii4uL3NwZWMtaGFybmVzcy5qcyIsICItLXVzZVdhc21MTEludD1mYWxzZSIsICItLXVzZVJhbmRv
bWl6aW5nRXhlY3V0YWJsZUlzbGFuZEFsbG9jYXRpb249dHJ1ZSIsICpGVExfT1BUSU9OUykKICAg
ICAgIHJ1bldpdGhPdXRwdXRIYW5kbGVyKCJ3YXNtLWNvbGxlY3QtY29udGludW91c2x5Iiwgbm9p
c3lPdXRwdXRIYW5kbGVyLCAiLi4vc3BlYy1oYXJuZXNzLmpzIiwgIi0tY29sbGVjdENvbnRpbnVv
dXNseT10cnVlIiwgKkZUTF9PUFRJT05TKSBpZiBzaG91bGRDb2xsZWN0Q29udGludW91c2x5Pwog
ICAgIGVuZAogZW5kCkBAIC0xMzUyLDE3ICsxMzc0LDIxIEBAIGRlZiBub05vTExJbnRSdW5MYXlv
dXRUZXN0CiAgICAgZW5kCiBlbmQKIAotZGVmIHByZXBhcmVFeHRyYVJlbGF0aXZlRmlsZXMoZXh0
cmFGaWxlcywgZGVzdGluYXRpb24pCitkZWYgcHJlcGFyZUV4dHJhUmVsYXRpdmVGaWxlc1dpdGhC
YXNlRGlyZWN0b3J5KGV4dHJhRmlsZXMsIGRlc3RpbmF0aW9uLCBiYXNlRGlyZWN0b3J5KQogICAg
IERpci5jaGRpcigkb3V0cHV0RGlyKSB7CiAgICAgICAgIGV4dHJhRmlsZXMuZWFjaCB7CiAgICAg
ICAgICAgICB8IGZpbGUgfAogICAgICAgICAgICAgZGVzdCA9IGRlc3RpbmF0aW9uICsgZmlsZQog
ICAgICAgICAgICAgRmlsZVV0aWxzLm1rZGlyX3AoZGVzdC5kaXJuYW1lKQotICAgICAgICAgICAg
RmlsZVV0aWxzLmNwICRleHRyYUZpbGVzQmFzZURpciArIGZpbGUsIGRlc3QKKyAgICAgICAgICAg
IEZpbGVVdGlscy5jcCBiYXNlRGlyZWN0b3J5ICsgZmlsZSwgZGVzdAogICAgICAgICB9CiAgICAg
fQogZW5kCiAKK2RlZiBwcmVwYXJlRXh0cmFSZWxhdGl2ZUZpbGVzKGV4dHJhRmlsZXMsIGRlc3Rp
bmF0aW9uKQorICAgIHByZXBhcmVFeHRyYVJlbGF0aXZlRmlsZXNXaXRoQmFzZURpcmVjdG9yeShl
eHRyYUZpbGVzLCBkZXN0aW5hdGlvbiwgJGV4dHJhRmlsZXNCYXNlRGlyKQorZW5kCisKIGRlZiBi
YXNlRGlyRm9yQ29sbGVjdGlvbihjb2xsZWN0aW9uTmFtZSkKICAgICBQYXRobmFtZSgiLnRlc3Rz
IikgKyBjb2xsZWN0aW9uTmFtZQogZW5kCkluZGV4OiBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3Rz
L1dURi9NZXRhQWxsb2NhdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9UZXN0V2ViS2l0QVBJ
L1Rlc3RzL1dURi9NZXRhQWxsb2NhdG9yLmNwcAkocmV2aXNpb24gMjU4MzUwKQorKysgVG9vbHMv
VGVzdFdlYktpdEFQSS9UZXN0cy9XVEYvTWV0YUFsbG9jYXRvci5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTUyLDcgKzUyLDcgQEAgcHVibGljOgogICAgIGNsYXNzIFNpbXBsZVRlc3RBbGxvY2F0b3I6
IHB1YmxpYyBNZXRhQWxsb2NhdG9yIHsKICAgICBwdWJsaWM6CiAgICAgICAgIFNpbXBsZVRlc3RB
bGxvY2F0b3IoTWV0YUFsbG9jYXRvclRlc3QqIHBhcmVudCkKLSAgICAgICAgICAgIDogTWV0YUFs
bG9jYXRvcigzMikKKyAgICAgICAgICAgIDogTWV0YUFsbG9jYXRvcigzMiwgbV9sb2NrKQogICAg
ICAgICAgICAgLCBtX3BhcmVudChwYXJlbnQpCiAgICAgICAgIHsKICAgICAgICAgICAgIGFkZEZy
ZXNoRnJlZVNwYWNlKHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KGJhc2VQYWdlICogcGFnZVNpemUo
KSksIGRlZmF1bHRQYWdlc0luSGVhcCAqIHBhZ2VTaXplKCkpOwpAQCAtMTI5LDYgKzEyOSw3IEBA
IHB1YmxpYzoKICAgICAgICAgfQogICAgICAgICAKICAgICBwcml2YXRlOgorICAgICAgICBMb2Nr
IG1fbG9jazsKICAgICAgICAgTWV0YUFsbG9jYXRvclRlc3QqIG1fcGFyZW50OwogICAgIH07CiAK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>393415</attachid>
            <date>2020-03-12 14:37:34 -0700</date>
            <delta_ts>2020-03-12 19:06:22 -0700</delta_ts>
            <desc>patch</desc>
            <filename>c-backup.diff</filename>
            <type>text/plain</type>
            <size>123480</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IEpTVGVzdHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEpTVGVzdHMvQ2hhbmdlTG9n
CShyZXZpc2lvbiAyNTgzNTApCisrKyBKU1Rlc3RzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpA
QCAtMSwzICsxLDE0IEBACisyMDIwLTAzLTEyICBTYWFtIEJhcmF0aSAgPHNiYXJhdGlAYXBwbGUu
Y29tPgorCisgICAgICAgIEltcGxlbWVudCAxR0Igb2YgZXhlY3V0YWJsZSBtZW1vcnkgb24gYXJt
NjQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIwODQ5
MAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFJ1biBK
ZXRTdHJlYW0yIHdhc20gdGVzdHMuCisKKyAgICAgICAgKiB3YXNtLnlhbWw6CisKIDIwMjAtMDMt
MTEgIEtlaXRoIE1pbGxlciAgPGtlaXRoX21pbGxlckBhcHBsZS5jb20+CiAKICAgICAgICAgVGVz
dDI2Mi1ydW5uZXIgc2hvdWxkIGFsd2F5cyBjb25zaWRlciBjcmFzaGVzIGFzIG5ldyBmYWlsdXJl
cwpJbmRleDogSlNUZXN0cy93YXNtLnlhbWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSlNUZXN0cy93YXNtLnlh
bWwJKHJldmlzaW9uIDI1ODM1MCkKKysrIEpTVGVzdHMvd2FzbS55YW1sCSh3b3JraW5nIGNvcHkp
CkBAIC0yMzEsMyArMjMxLDYgQEAKIC0gcGF0aDogd2FzbS9tb2R1bGVzL3J1bi1mcm9tLXdhc20u
d2FzbQogICBjbWQ6IHJ1bldlYkFzc2VtYmx5CiAKKy0gcGF0aDogLi4vUGVyZm9ybWFuY2VUZXN0
cy9KZXRTdHJlYW0yL3dhc20tY2xpLmpzCisgIGNtZDogcnVuV2ViQXNzZW1ibHlKZXRTdHJlYW0y
IHVubGVzcyBwYXJzZVJ1bkNvbW1hbmRzCisKSW5kZXg6IFBlcmZvcm1hbmNlVGVzdHMvQ2hhbmdl
TG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFBlcmZvcm1hbmNlVGVzdHMvQ2hhbmdlTG9nCShyZXZpc2lvbiAy
NTgzNTApCisrKyBQZXJmb3JtYW5jZVRlc3RzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAt
MSwzICsxLDI0IEBACisyMDIwLTAzLTEyICBTYWFtIEJhcmF0aSAgPHNiYXJhdGlAYXBwbGUuY29t
PgorCisgICAgICAgIEltcGxlbWVudCAxR0Igb2YgZXhlY3V0YWJsZSBtZW1vcnkgb24gYXJtNjQK
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIwODQ5MAor
CisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogSmV0U3Ry
ZWFtMi9KZXRTdHJlYW1Ecml2ZXIuanM6CisgICAgICAgIChEcml2ZXIucHJvdG90eXBlLmR1bXBK
U09OUmVzdWx0c0lmTmVlZGVkKToKKyAgICAgICAgKERlZmF1bHRCZW5jaG1hcmsucHJvdG90eXBl
LnVwZGF0ZVVJQWZ0ZXJSdW4pOgorICAgICAgICAoRGVmYXVsdEJlbmNobWFyayk6CisgICAgICAg
IChXU0xCZW5jaG1hcmsucHJvdG90eXBlLnVwZGF0ZVVJQWZ0ZXJSdW4pOgorICAgICAgICAoV1NM
QmVuY2htYXJrKToKKyAgICAgICAgKFdhc21CZW5jaG1hcmsucHJvdG90eXBlLnVwZGF0ZVVJQWZ0
ZXJSdW4pOgorICAgICAgICAoV2FzbUJlbmNobWFyayk6CisgICAgICAgIChEcml2ZXIuYXN5bmMg
ZmV0Y2hSZXNvdXJjZXMuc3RhdHVzRWxlbWVudC5pbm5lckhUTUwuYS5ocmVmLnN0cmluZ19hcHBl
YXJlZF9oZXJlKToKKyAgICAgICAgKERyaXZlci5wcm90b3R5cGUuYXN5bmMgZmV0Y2hSZXNvdXJj
ZXMpOgorICAgICAgICAqIEpldFN0cmVhbTIvd2FzbS1jbGkuanM6IEFkZGVkLgorICAgICAgICAo
Y29uc29sZS5sb2cpOgorICAgICAgICAoYXN5bmMgcnVuSmV0U3RyZWFtKToKKwogMjAyMC0wMi0x
NyAgRG9uIE9sbXN0ZWFkICA8ZG9uLm9sbXN0ZWFkQHNvbnkuY29tPgogCiAgICAgICAgIFtDTWFr
ZV0gVXNlIGJ1aWx0aW4gdGFyZ2V0cwpJbmRleDogUGVyZm9ybWFuY2VUZXN0cy9KZXRTdHJlYW0y
L0pldFN0cmVhbURyaXZlci5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBQZXJmb3JtYW5jZVRlc3RzL0pldFN0
cmVhbTIvSmV0U3RyZWFtRHJpdmVyLmpzCShyZXZpc2lvbiAyNTgzNTApCisrKyBQZXJmb3JtYW5j
ZVRlc3RzL0pldFN0cmVhbTIvSmV0U3RyZWFtRHJpdmVyLmpzCSh3b3JraW5nIGNvcHkpCkBAIC00
MDksOSArNDA5LDkgQEAgY2xhc3MgRHJpdmVyIHsKICAgICBkdW1wSlNPTlJlc3VsdHNJZk5lZWRl
ZCgpCiAgICAgewogICAgICAgICBpZiAoZHVtcEpTT05SZXN1bHRzKSB7Ci0gICAgICAgICAgICBw
cmludCgiXG4iKTsKLSAgICAgICAgICAgIHByaW50KHRoaXMucmVzdWx0c0pTT04oKSk7Ci0gICAg
ICAgICAgICBwcmludCgiXG4iKTsKKyAgICAgICAgICAgIGNvbnNvbGUubG9nKCJcbiIpOworICAg
ICAgICAgICAgY29uc29sZS5sb2codGhpcy5yZXN1bHRzSlNPTigpKTsKKyAgICAgICAgICAgIGNv
bnNvbGUubG9nKCJcbiIpOwogICAgICAgICB9CiAgICAgfQogCkBAIC03MjUsMTUgKzcyNSwxNSBA
QCBjbGFzcyBEZWZhdWx0QmVuY2htYXJrIGV4dGVuZHMgQmVuY2htYXJrCiAgICAgICAgICAgICBy
ZXR1cm47CiAgICAgICAgIH0KIAotICAgICAgICBwcmludCgiICAgIFN0YXJ0dXA6IiwgdWlGcmll
bmRseU51bWJlcih0aGlzLmZpcnN0SXRlcmF0aW9uKSk7Ci0gICAgICAgIHByaW50KCIgICAgV29y
c3QgQ2FzZToiLCB1aUZyaWVuZGx5TnVtYmVyKHRoaXMud29yc3Q0KSk7Ci0gICAgICAgIHByaW50
KCIgICAgQXZlcmFnZToiLCB1aUZyaWVuZGx5TnVtYmVyKHRoaXMuYXZlcmFnZSkpOwotICAgICAg
ICBwcmludCgiICAgIFNjb3JlOiIsIHVpRnJpZW5kbHlOdW1iZXIodGhpcy5zY29yZSkpOworICAg
ICAgICBjb25zb2xlLmxvZygiICAgIFN0YXJ0dXA6IiwgdWlGcmllbmRseU51bWJlcih0aGlzLmZp
cnN0SXRlcmF0aW9uKSk7CisgICAgICAgIGNvbnNvbGUubG9nKCIgICAgV29yc3QgQ2FzZToiLCB1
aUZyaWVuZGx5TnVtYmVyKHRoaXMud29yc3Q0KSk7CisgICAgICAgIGNvbnNvbGUubG9nKCIgICAg
QXZlcmFnZToiLCB1aUZyaWVuZGx5TnVtYmVyKHRoaXMuYXZlcmFnZSkpOworICAgICAgICBjb25z
b2xlLmxvZygiICAgIFNjb3JlOiIsIHVpRnJpZW5kbHlOdW1iZXIodGhpcy5zY29yZSkpOwogICAg
ICAgICBpZiAoUkFNaWZpY2F0aW9uKSB7Ci0gICAgICAgICAgICBwcmludCgiICAgIEN1cnJlbnQg
Rm9vdHByaW50OiIsIHVpRnJpZW5kbHlOdW1iZXIodGhpcy5jdXJyZW50Rm9vdHByaW50KSk7Ci0g
ICAgICAgICAgICBwcmludCgiICAgIFBlYWsgRm9vdHByaW50OiIsIHVpRnJpZW5kbHlOdW1iZXIo
dGhpcy5wZWFrRm9vdHByaW50KSk7CisgICAgICAgICAgICBjb25zb2xlLmxvZygiICAgIEN1cnJl
bnQgRm9vdHByaW50OiIsIHVpRnJpZW5kbHlOdW1iZXIodGhpcy5jdXJyZW50Rm9vdHByaW50KSk7
CisgICAgICAgICAgICBjb25zb2xlLmxvZygiICAgIFBlYWsgRm9vdHByaW50OiIsIHVpRnJpZW5k
bHlOdW1iZXIodGhpcy5wZWFrRm9vdHByaW50KSk7CiAgICAgICAgIH0KLSAgICAgICAgcHJpbnQo
IiAgICBXYWxsIHRpbWU6IiwgdWlGcmllbmRseUR1cmF0aW9uKG5ldyBEYXRlKHRoaXMuZW5kVGlt
ZSAtIHRoaXMuc3RhcnRUaW1lKSkpOworICAgICAgICBjb25zb2xlLmxvZygiICAgIFdhbGwgdGlt
ZToiLCB1aUZyaWVuZGx5RHVyYXRpb24obmV3IERhdGUodGhpcy5lbmRUaW1lIC0gdGhpcy5zdGFy
dFRpbWUpKSk7CiAgICAgfQogfQogCkBAIC04MTksMTQgKzgxOSwxNCBAQCBjbGFzcyBXU0xCZW5j
aG1hcmsgZXh0ZW5kcyBCZW5jaG1hcmsgewogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9
CiAKLSAgICAgICAgcHJpbnQoIiAgICBTdGRsaWI6IiwgdWlGcmllbmRseU51bWJlcih0aGlzLnN0
ZGxpYikpOwotICAgICAgICBwcmludCgiICAgIFRlc3RzOiIsIHVpRnJpZW5kbHlOdW1iZXIodGhp
cy5tYWluUnVuKSk7Ci0gICAgICAgIHByaW50KCIgICAgU2NvcmU6IiwgdWlGcmllbmRseU51bWJl
cih0aGlzLnNjb3JlKSk7CisgICAgICAgIGNvbnNvbGUubG9nKCIgICAgU3RkbGliOiIsIHVpRnJp
ZW5kbHlOdW1iZXIodGhpcy5zdGRsaWIpKTsKKyAgICAgICAgY29uc29sZS5sb2coIiAgICBUZXN0
czoiLCB1aUZyaWVuZGx5TnVtYmVyKHRoaXMubWFpblJ1bikpOworICAgICAgICBjb25zb2xlLmxv
ZygiICAgIFNjb3JlOiIsIHVpRnJpZW5kbHlOdW1iZXIodGhpcy5zY29yZSkpOwogICAgICAgICBp
ZiAoUkFNaWZpY2F0aW9uKSB7Ci0gICAgICAgICAgICBwcmludCgiICAgIEN1cnJlbnQgRm9vdHBy
aW50OiIsIHVpRnJpZW5kbHlOdW1iZXIodGhpcy5jdXJyZW50Rm9vdHByaW50KSk7Ci0gICAgICAg
ICAgICBwcmludCgiICAgIFBlYWsgRm9vdHByaW50OiIsIHVpRnJpZW5kbHlOdW1iZXIodGhpcy5w
ZWFrRm9vdHByaW50KSk7CisgICAgICAgICAgICBjb25zb2xlLmxvZygiICAgIEN1cnJlbnQgRm9v
dHByaW50OiIsIHVpRnJpZW5kbHlOdW1iZXIodGhpcy5jdXJyZW50Rm9vdHByaW50KSk7CisgICAg
ICAgICAgICBjb25zb2xlLmxvZygiICAgIFBlYWsgRm9vdHByaW50OiIsIHVpRnJpZW5kbHlOdW1i
ZXIodGhpcy5wZWFrRm9vdHByaW50KSk7CiAgICAgICAgIH0KLSAgICAgICAgcHJpbnQoIiAgICBX
YWxsIHRpbWU6IiwgdWlGcmllbmRseUR1cmF0aW9uKG5ldyBEYXRlKHRoaXMuZW5kVGltZSAtIHRo
aXMuc3RhcnRUaW1lKSkpOworICAgICAgICBjb25zb2xlLmxvZygiICAgIFdhbGwgdGltZToiLCB1
aUZyaWVuZGx5RHVyYXRpb24obmV3IERhdGUodGhpcy5lbmRUaW1lIC0gdGhpcy5zdGFydFRpbWUp
KSk7CiAgICAgfQogfTsKIApAQCAtOTc1LDEzICs5NzUsMTMgQEAgY2xhc3MgV2FzbUJlbmNobWFy
ayBleHRlbmRzIEJlbmNobWFyayB7CiAgICAgICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJ
ZCh0aGlzLnNjb3JlSUQpLmlubmVySFRNTCA9IHVpRnJpZW5kbHlOdW1iZXIodGhpcy5zY29yZSk7
CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KLSAgICAgICAgcHJpbnQoIiAgICBTdGFy
dHVwOiIsIHVpRnJpZW5kbHlOdW1iZXIodGhpcy5zdGFydHVwVGltZSkpOwotICAgICAgICBwcmlu
dCgiICAgIFJ1biB0aW1lOiIsIHVpRnJpZW5kbHlOdW1iZXIodGhpcy5ydW5UaW1lKSk7CisgICAg
ICAgIGNvbnNvbGUubG9nKCIgICAgU3RhcnR1cDoiLCB1aUZyaWVuZGx5TnVtYmVyKHRoaXMuc3Rh
cnR1cFRpbWUpKTsKKyAgICAgICAgY29uc29sZS5sb2coIiAgICBSdW4gdGltZToiLCB1aUZyaWVu
ZGx5TnVtYmVyKHRoaXMucnVuVGltZSkpOwogICAgICAgICBpZiAoUkFNaWZpY2F0aW9uKSB7Ci0g
ICAgICAgICAgICBwcmludCgiICAgIEN1cnJlbnQgRm9vdHByaW50OiIsIHVpRnJpZW5kbHlOdW1i
ZXIodGhpcy5jdXJyZW50Rm9vdHByaW50KSk7Ci0gICAgICAgICAgICBwcmludCgiICAgIFBlYWsg
Rm9vdHByaW50OiIsIHVpRnJpZW5kbHlOdW1iZXIodGhpcy5wZWFrRm9vdHByaW50KSk7CisgICAg
ICAgICAgICBjb25zb2xlLmxvZygiICAgIEN1cnJlbnQgRm9vdHByaW50OiIsIHVpRnJpZW5kbHlO
dW1iZXIodGhpcy5jdXJyZW50Rm9vdHByaW50KSk7CisgICAgICAgICAgICBjb25zb2xlLmxvZygi
ICAgIFBlYWsgRm9vdHByaW50OiIsIHVpRnJpZW5kbHlOdW1iZXIodGhpcy5wZWFrRm9vdHByaW50
KSk7CiAgICAgICAgIH0KLSAgICAgICAgcHJpbnQoIiAgICBTY29yZToiLCB1aUZyaWVuZGx5TnVt
YmVyKHRoaXMuc2NvcmUpKTsKKyAgICAgICAgY29uc29sZS5sb2coIiAgICBTY29yZToiLCB1aUZy
aWVuZGx5TnVtYmVyKHRoaXMuc2NvcmUpKTsKICAgICB9CiB9OwogCkluZGV4OiBQZXJmb3JtYW5j
ZVRlc3RzL0pldFN0cmVhbTIvd2FzbS1jbGkuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gUGVyZm9ybWFuY2VU
ZXN0cy9KZXRTdHJlYW0yL3dhc20tY2xpLmpzCShub25leGlzdGVudCkKKysrIFBlcmZvcm1hbmNl
VGVzdHMvSmV0U3RyZWFtMi93YXNtLWNsaS5qcwkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQ2
IEBACisKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisg
KiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICog
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyovCisKK2NvbnN0IGlzSW5Ccm93c2VyID0gZmFsc2U7Citjb25zb2xlID0g
eworICAgIGxvZzogKCkgPT4geyB9Cit9CisKK3Rlc3RMaXN0ID0gWyJIYXNoU2V0LXdhc20iLCAi
dHNmLXdhc20iLCAicXVpY2tzb3J0LXdhc20iLCAiZ2NjLWxvb3BzLXdhc20iLCAicmljaGFyZHMt
d2FzbSJdOworCitSQU1pZmljYXRpb24gPSBmYWxzZTsKKworbG9hZCgiLi9KZXRTdHJlYW1Ecml2
ZXIuanMiKTsKKworYXN5bmMgZnVuY3Rpb24gcnVuSmV0U3RyZWFtKCkgeworICAgIHRyeSB7Cisg
ICAgICAgIGF3YWl0IEpldFN0cmVhbS5pbml0aWFsaXplKCk7CisgICAgICAgIEpldFN0cmVhbS5z
dGFydCgpOworICAgIH0gY2F0Y2ggKGUpIHsKKyAgICAgICAgdGhyb3cgZTsKKyAgICB9Cit9City
dW5KZXRTdHJlYW0oKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjU4
MzUwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpA
QCAtMSwzICsxLDEwNCBAQAorMjAyMC0wMy0xMiAgU2FhbSBCYXJhdGkgIDxzYmFyYXRpQGFwcGxl
LmNvbT4KKworICAgICAgICBJbXBsZW1lbnQgMUdCIG9mIGV4ZWN1dGFibGUgbWVtb3J5IG9uIGFy
bTY0CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMDg0
OTAKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUaGlz
IHBhdGNoIGltcGxlbWVudHMgdGhlIDFHQiBleGVjdXRhYmxlIG1lbW9yeSBzcGFjZSBvbiBhcm02
NC4gVG8gbWFrZSB0aGlzCisgICAgICAgIHdvcmssIHdlIGltcGxlbWVudCBqdW1wcyBsYXJnZXIg
dGhhbiArLy0xMjhNQiB0byB1c2UganVtcCBpc2xhbmRzLiBKdW1wIGlzbGFuZHMKKyAgICAgICAg
d29yayBieSBzcGxpdHRpbmcgdXAgdGhlIH4xR0IgcmVnaW9uIGludG8gOSAxMTJNQiBjaHVua3Mg
KDEwMDggTUIgdG90YWwpLiBFYWNoCisgICAgICAgIGNodW5rIGlzIHNwbGl0IGludG8gdHdvOiA5
Nk1CIG9mIGV4ZWN1dGFibGUgcmVnaW9uLCBhbmQgMTZNQiBvZiBqdW1wIGlzbGFuZCByZWdpb24u
CisgICAgICAgIFdpdGggdGhpcyBzcGxpdCwgYW55IGp1bXAgaW5zaWRlIGEganVtcCBpc2xhbmQg
cmVnaW9uIGNhbiBnZXQgdG8gdGhlIGFkamFjZW50CisgICAgICAgIGlzbGFuZCAoZm9yd2FyZHMg
b3IgYmFja3dhcmRzKSBpbiBhIHNpbmdsZSArLy0xMjhNQiBqdW1wLiBXaGVuIGxpbmtpbmcgYSBq
dW1wCisgICAgICAgIGZyb20gQSB0byBCLCB3aGVyZSB8QSAtIEJ8ID4gMTI4TUIsIHdlIGluc3Rl
YWQgcG9pbnQgdGhlIGp1bXAgdG8gYW4gaXNsYW5kLAorICAgICAgICB3aGVyZSB0aGlzIGlzbGFu
ZCBoYXMgYSBwb3RlbnRpYWwgc2VyaWVzIG9mIGp1bXBzIHRoYXQgZmluYWxseSBsYW5kcyBhdCBC
LgorICAgICAgICAKKyAgICAgICAgVG8gYWxsb2NhdGUgZXhlY3V0YWJsZSBtZW1vcnksIHVzZSBh
IE1ldGFBbGxvY2F0b3IgZm9yIGVhY2ggOTZNQiBjaHVuay4gVG8KKyAgICAgICAgYWxsb2NhdGUg
aXNsYW5kcywgd2UgaGF2ZSBhIGJpdCB2ZWN0b3Igd2UgdXNlIHRvIHRyYWNrIHVzZWQgYW5kIGZy
ZWVkIGlzbGFuZHMuCisgICAgICAgIFdlIG9ubHkgZ3JvdyB0aGlzIGJpdCB2ZWN0b3IgYXMgaXNs
YW5kcyBhcmUgYWxsb2NhdGVkLCBzbyBpdCBmcmVxdWVudGx5CisgICAgICAgIHJlbWFpbnMgZW1w
dHkgb3IgdmVyeSBzbWFsbC4KKyAgICAgICAgCisgICAgICAgIFRoZSBnb2FsIG9mIHRoaXMgcGF0
Y2ggaXMgdG8gaGF2ZSBtaW5pbWFsIHBlcmYgaW1wYWN0IHdoZW4gbm90IHVzaW5nIGlzbGFuZHMs
CisgICAgICAgIHNvIHRoZSBkYXRhIHN0cnVjdHVyZXMgYXJlIGRlc2lnbmVkIHRvIG9ubHkgaW5j
dXIgb3ZlcmhlYWQgd2hlbiBhY3R1YWxseSB1c2luZworICAgICAgICBpc2xhbmRzLiBXZSBleHBl
Y3QgdGhlIHVzZSBvZiBpc2xhbmRzIHRvIGJlIG1pbmltYWwuIFdlIHVzZSBhIHJlZCBibGFjayB0
cmVlCisgICAgICAgIHRvIHRyYWNrIGFsbCBpc2xhbmQgbG9jYXRpb25zLiBUaGlzIGFsbG93cyB1
cyB0byBkZWFsbG9jYXRlIGFsbCBpc2xhbmRzIHdoZW4KKyAgICAgICAgYW4gZXhlY3V0YWJsZSBt
ZW1vcnkgaGFuZGxlIGlzIGZyZWVkLiBUeXBpY2FsbHksIHRoaXMgcmVkIGJsYWNrIHRyZWUgaXMg
ZW1wdHksCisgICAgICAgIHNvIGZyZWVpbmcgYW4gZXhlY3V0YWJsZSBtZW1vcnkgaGFuZGxlIGlu
Y3VycyBubyBleHRyYSBvdmVyaGVhZC4KKyAgICAgICAgCisgICAgICAgIFRvIG1ha2UgaXNsYW5k
cyB3b3JrIGZvciBXYXNtLCB3ZSBub3cgaGF2ZSB0byBsaW5rIHRpZXIgdXAgY29kZSBpbiB0d28g
cGhhc2VzLgorICAgICAgICBQcmV2aW91c2x5LCB3ZSB3b3VsZCBqdXN0IHBhdGNoIGp1bXBzIGNv
bmN1cnJlbnRseSB0byBXYXNtIHRocmVhZHMgcnVubmluZyBhZnRlcgorICAgICAgICByZXNldHRp
bmcgdGhlIGljYWNoZSwga25vd2luZyB0aGF0IHdlIHdvdWxkIGJlIGFibGUgdG8gYXRvbWljYWxs
eSB1cGRhdGUgdGhlIGp1bXAKKyAgICAgICAgaW5zdHJ1Y3Rpb24gdG8gcG9pbnQgdG8gdGhlIG5l
dyBkZXN0aW5hdGlvbi4gSG93ZXZlciwgbm93IHdoZW4gcmVwYXRjaGluZyB0aGVzZQorICAgICAg
ICBqdW1wcyBpbiBhIHdvcmxkIHdpdGgganVtcCBpc2xhbmRzLCB3ZSBtaWdodCBuZWVkIHRvIGFs
bG9jYXRlIGlzbGFuZHMgZGVwZW5kaW5nCisgICAgICAgIG9uIHRoZSBqdW1wIGxvY2F0aW9uIGFu
ZCBpdHMgdGFyZ2V0LiBTbyB3ZSBub3cgYWxsb2NhdGUgYW5kIGNvbGxlY3QgdGhlIHNldCBvZiBp
c2xhbmRzLAorICAgICAgICB0aGVuIHJlc2V0IHRoZSBpY2FjaGUsIHRoZW4gYXRvbWljYWxseSB1
cGRhdGUgdGhlIGJyYW5jaCB0byBwb2ludCB0byB0aGUgZGVzdGluYXRpb24KKyAgICAgICAgKG9y
IGFuIGlzbGFuZCB0aGF0IGp1bXBzIHRvIHRoZSBkZXN0aW5hdGlvbikuIE9uZSBpbXBvcnRhbnQg
aW1wbGVtZW50YXRpb24gZGV0YWlsCisgICAgICAgIGhlcmUgaXMgdGhhdCBmb3Igbm9ybWFsIGlz
bGFuZCByZXBhdGNoaW5nLCBpZiB3ZSBoYXZlIGEganVtcCBmcm9tIEEgdG8gQiwgYW5kIGl0Cisg
ICAgICAgIGFsbG9jYXRlcyBhIHNldCBpZiBpc2xhbmRzIFgsIHdlIHVzdWFsbHkgY2FuIGRlYWxs
b2NhdGUgWCB3aGVuIHJlcGF0Y2hpbmcgQSB0byBnbyB0byBCJy4KKyAgICAgICAgVGhpcyBpcyBi
ZWNhdXNlIHRoZSB0eXBpY2FsIHJlcGF0Y2ggc2NlbmFyaW8gaW4gSlMgaGFwcGVucyB3aGVuIHRo
YXQgY29kZSBpcyBub3QgYmVpbmcKKyAgICAgICAgZXhlY3V0ZWQuIEZvciBXYXNtIHRob3VnaCwg
dGhvc2UgaXNsYW5kcyBYIG1pZ2h0IGJlIHJ1bm5pbmcgd2hpbGUgd2Ugd2FudCB0byByZXBhdGNo
CisgICAgICAgIEEgdG8gZ28gdG8gQicuIFNvIGluc3RlYWQgb2YgZGVhbGxvY2F0aW5nIFgsIHdl
IGp1c3QgYXBwZW5kIHRvIFggaW4gdGhpcyBzY2VuYXJpbywgYW5kCisgICAgICAgIHdlIGZyZWUg
dGhlIG5ldyBzZXQgWCcgd2hlbiB0aGUgY29kZSBpdHNlbGYgaXMgZnJlZWQuCisgICAgICAgIAor
ICAgICAgICAoVGhpcyBwYXRjaCBhbHNvIGZpeGVzIGEgYnVnIGluIHRoZSBXYXNtIExMSW50IHRv
IEJCUSB0aWVyIHVwIHRoYXQgSSBzcG90dGVkLAorICAgICAgICB3aGVyZSB3ZSB3b3VsZCBwdWJs
aXNoIGEgTExJbnQgY2FsbGVlJ3MgQkJRIHJlcGxhY2VtZW50IGJlZm9yZSB3ZSBmaW5pc2hlZAor
ICAgICAgICBsaW5raW5nIHRoZSBvdXRnb2luZyBjYWxscyBvZiB0aGUgQkJRIHJlcGxhY2VtZW50
LikKKyAgICAgICAgCisgICAgICAgIFRoaXMgcGF0Y2ggYWxzbyByZW1vdmVzIHRoZSBvbGQgIkNv
ZGVQcm9maWxpbmciIGNvZGUgdGhhdCBoYXMgYmVlbiB1bnVzZWQgZm9yCisgICAgICAgIGEgbG9u
ZyB0aW1lLgorCisgICAgICAgICogSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvajoKKyAgICAgICAgKiBTb3VyY2VzLnR4dDoKKyAgICAgICAgKiBhc3NlbWJsZXIvQVJNNjRB
c3NlbWJsZXIuaDoKKyAgICAgICAgKEpTQzo6QVJNNjRBc3NlbWJsZXI6OmIpOgorICAgICAgICAo
SlNDOjpBUk02NEFzc2VtYmxlcjo6YmwpOgorICAgICAgICAoSlNDOjpBUk02NEFzc2VtYmxlcjo6
cmVwbGFjZVdpdGhKdW1wKToKKyAgICAgICAgKEpTQzo6QVJNNjRBc3NlbWJsZXI6OnByZXBhcmVG
b3JBdG9taWNSZWxpbmtKdW1wQ29uY3VycmVudGx5KToKKyAgICAgICAgKEpTQzo6QVJNNjRBc3Nl
bWJsZXI6OnByZXBhcmVGb3JBdG9taWNSZWxpbmtDYWxsQ29uY3VycmVudGx5KToKKyAgICAgICAg
KEpTQzo6QVJNNjRBc3NlbWJsZXI6OmNvbXB1dGVKdW1wVHlwZSk6CisgICAgICAgIChKU0M6OkFS
TTY0QXNzZW1ibGVyOjpjYW5FbWl0SnVtcCk6CisgICAgICAgIChKU0M6OkFSTTY0QXNzZW1ibGVy
OjpsaW5rSnVtcE9yQ2FsbCk6CisgICAgICAgIChKU0M6OkFSTTY0QXNzZW1ibGVyOjpsaW5rQ29t
cGFyZUFuZEJyYW5jaCk6CisgICAgICAgIChKU0M6OkFSTTY0QXNzZW1ibGVyOjpsaW5rQ29uZGl0
aW9uYWxCcmFuY2gpOgorICAgICAgICAoSlNDOjpBUk02NEFzc2VtYmxlcjo6bGlua1Rlc3RBbmRC
cmFuY2gpOgorICAgICAgICAqIGFzc2VtYmxlci9BYnN0cmFjdE1hY3JvQXNzZW1ibGVyLmg6Cisg
ICAgICAgIChKU0M6OkFic3RyYWN0TWFjcm9Bc3NlbWJsZXI6OnByZXBhcmVGb3JBdG9taWNSZXBh
dGNoTmVhckNhbGxDb25jdXJyZW50bHkpOgorICAgICAgICAqIGFzc2VtYmxlci9MaW5rQnVmZmVy
LmNwcDoKKyAgICAgICAgKEpTQzo6TGlua0J1ZmZlcjo6Y29weUNvbXBhY3RBbmRMaW5rQ29kZSk6
CisgICAgICAgIChKU0M6OkxpbmtCdWZmZXI6OmxpbmtDb2RlKToKKyAgICAgICAgKEpTQzo6TGlu
a0J1ZmZlcjo6YWxsb2NhdGUpOgorICAgICAgICAqIGFzc2VtYmxlci9MaW5rQnVmZmVyLmg6Cisg
ICAgICAgIChKU0M6OkxpbmtCdWZmZXI6OkxpbmtCdWZmZXIpOgorICAgICAgICAqIGFzc2VtYmxl
ci9NYWNyb0Fzc2VtYmxlckNvZGVSZWYuaDoKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJD
b2RlUmVmOjpNYWNyb0Fzc2VtYmxlckNvZGVSZWYpOgorICAgICAgICAqIGppdC9FeGVjdXRhYmxl
QWxsb2NhdG9yLmNwcDoKKyAgICAgICAgKEpTQzo6aW5pdGlhbGl6ZUpJVFBhZ2VSZXNlcnZhdGlv
bik6CisgICAgICAgIChKU0M6OkV4ZWN1dGFibGVBbGxvY2F0b3I6OmluaXRpYWxpemVVbmRlcmx5
aW5nQWxsb2NhdG9yKToKKyAgICAgICAgKEpTQzo6RXhlY3V0YWJsZUFsbG9jYXRvcjo6aXNWYWxp
ZCBjb25zdCk6CisgICAgICAgIChKU0M6OkV4ZWN1dGFibGVBbGxvY2F0b3I6OmFsbG9jYXRlKToK
KyAgICAgICAgKEpTQzo6RXhlY3V0YWJsZUFsbG9jYXRvcjo6Z2V0SnVtcElzbGFuZFRvKToKKyAg
ICAgICAgKEpTQzo6RXhlY3V0YWJsZUFsbG9jYXRvcjo6Z2V0SnVtcElzbGFuZFRvQ29uY3VycmVu
dGx5KToKKyAgICAgICAgKEpTQzo6Rml4ZWRWTVBvb2xFeGVjdXRhYmxlQWxsb2NhdG9yOjp+Rml4
ZWRWTVBvb2xFeGVjdXRhYmxlQWxsb2NhdG9yKTogRGVsZXRlZC4KKyAgICAgICAgKiBqaXQvRXhl
Y3V0YWJsZUFsbG9jYXRvci5oOgorICAgICAgICAoSlNDOjpFeGVjdXRhYmxlQWxsb2NhdG9yQmFz
ZTo6YWxsb2NhdGUpOgorICAgICAgICAqIHJ1bnRpbWUvQ29tbW9uU2xvd1BhdGhzLmNwcDoKKyAg
ICAgICAgKiBydW50aW1lL0NvbXBsZXRpb24uY3BwOgorICAgICAgICAoSlNDOjpldmFsdWF0ZSk6
CisgICAgICAgICogcnVudGltZS9KU01vZHVsZUxvYWRlci5jcHA6CisgICAgICAgIChKU0M6Om1v
ZHVsZUxvYWRlclBhcnNlTW9kdWxlKToKKyAgICAgICAgKiBydW50aW1lL09wdGlvbnNMaXN0Lmg6
CisgICAgICAgICogdG9vbHMvQ29kZVByb2ZpbGUuY3BwOiBSZW1vdmVkLgorICAgICAgICAqIHRv
b2xzL0NvZGVQcm9maWxlLmg6IFJlbW92ZWQuCisgICAgICAgICogdG9vbHMvQ29kZVByb2ZpbGlu
Zy5jcHA6IFJlbW92ZWQuCisgICAgICAgICogdG9vbHMvQ29kZVByb2ZpbGluZy5oOiBSZW1vdmVk
LgorICAgICAgICAqIHdhc20vV2FzbUJCUVBsYW4uY3BwOgorICAgICAgICAoSlNDOjpXYXNtOjpC
QlFQbGFuOjp3b3JrKToKKyAgICAgICAgKiB3YXNtL1dhc21PTUdGb3JPU1JFbnRyeVBsYW4uY3Bw
OgorICAgICAgICAoSlNDOjpXYXNtOjpPTUdGb3JPU1JFbnRyeVBsYW46OndvcmspOgorICAgICAg
ICAqIHdhc20vV2FzbU9NR1BsYW4uY3BwOgorICAgICAgICAoSlNDOjpXYXNtOjpPTUdQbGFuOjp3
b3JrKToKKwogMjAyMC0wMy0xMiAgWXVzdWtlIFN1enVraSAgPHlzdXp1a2lAYXBwbGUuY29tPgog
CiAgICAgICAgIFtKU0NdIFVzZSBDYWNoZWFibGVJZGVudGlmaWVyIGluIEJ5VmFsSW5mbwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL1NvdXJjZXMudHh0Cj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9Tb3VyY2VzLnR4dAkocmV2aXNpb24gMjU4MzUwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL1NvdXJjZXMudHh0CSh3b3JraW5nIGNvcHkpCkBAIC05OTUsOCArOTk1
LDYgQEAgcnVudGltZS9XaWRlbmluZ051bWJlclByZWRpY3Rpb25GdXp6ZXJBZwogSlNDQnVpbHRp
bnMuY3BwCiAKIHRvb2xzL0NlbGxMaXN0LmNwcAotdG9vbHMvQ29kZVByb2ZpbGUuY3BwCi10b29s
cy9Db2RlUHJvZmlsaW5nLmNwcAogdG9vbHMvQ29tcGlsZXJUaW1pbmdTY29wZS5jcHAKIHRvb2xz
L0Z1bmN0aW9uT3ZlcnJpZGVzLmNwcAogdG9vbHMvRnVuY3Rpb25XaGl0ZWxpc3QuY3BwCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3Qu
cGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENv
cmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gMjU4MzUwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJ
KHdvcmtpbmcgY29weSkKQEAgLTQwNzEsOCArNDA3MSw2IEBACiAJCTg2MDE2MUUwMEYzQTgzQzEw
MEY4NDcxMCAvKiBNYWNyb0Fzc2VtYmxlclg4Ni5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBNYWNyb0Fzc2VtYmxlclg4Ni5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQk4NjAxNjFFMTBGM0E4M0MxMDBGODQ3MTAgLyogTWFjcm9Bc3NlbWJsZXJYODZfNjQuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTWFjcm9Bc3NlbWJsZXJYODZfNjQuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJODYwMTYxRTIwRjNBODNDMTAwRjg0NzEwIC8qIE1h
Y3JvQXNzZW1ibGVyWDg2Q29tbW9uLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IE1hY3JvQXNzZW1ibGVyWDg2Q29tbW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0J
CTg2MDNDRUYyMTRDNzU0NjQwMEFFNTlFMyAvKiBDb2RlUHJvZmlsaW5nLmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IENvZGVQcm9maWxpbmcuY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwotCQk4NjAzQ0VGMzE0Qzc1NDY0MDBBRTU5RTMgLyogQ29kZVByb2Zp
bGluZy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBDb2RlUHJvZmlsaW5nLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTg2MDRGNEYyMTQzQTZDNDQwMEIyOTVGNSAv
KiBDaGFuZ2VMb2cgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5
cGUgPSB0ZXh0OyBsaW5lRW5kaW5nID0gMDsgcGF0aCA9IENoYW5nZUxvZzsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJODYwNkRERTkxOERBNDRBQjAwQTM4M0QwIC8qIElkZW50aWZpZXJJ
bmxpbmVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IElkZW50aWZpZXJJbmxp
bmVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTg2MTJFNENCMTUyMjkxODQwMEM4
MzZCRSAvKiBNYXRjaFJlc3VsdC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBN
YXRjaFJlc3VsdC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtNDExOCw4ICs0MTE2
LDYgQEAKIAkJODZBREQxNDMwRkRERUE5ODAwMDZGRkNDIC8qIEFSTXY3UmVnaXN0ZXJzLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEFSTXY3UmVnaXN0ZXJzLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTg2QUREMTQ0MEZEREVBOTgwMDA2RUVDMiAvKiBNYWNyb0Fz
c2VtYmxlckFSTXY3LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE1hY3JvQXNz
ZW1ibGVyQVJNdjcuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJODZCNTgyMkMxNEQy
MkY1RjAwQTlDMzA2IC8qIFByb2ZpbGVUcmVlTm9kZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBQcm9maWxlVHJlZU5vZGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
LQkJODZCNTgyMkUxNEQyMzczQjAwQTlDMzA2IC8qIENvZGVQcm9maWxlLmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IENvZGVQcm9maWxlLmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKLQkJODZCNTgyMkYxNEQyMzczQjAwQTlDMzA2IC8qIENvZGVQcm9maWxl
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENvZGVQcm9maWxlLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTg2QjU4MjZBMTREMzVENTEwMEE5QzMwNiAvKiBUaWVy
ZWRNTWFwQXJyYXkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVGllcmVkTU1h
cEFycmF5Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTg2QkY2NDJBMTQ4REIyQjUw
MDRERTM2QSAvKiBJbnRyaW5zaWMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
SW50cmluc2ljLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTg2QzM2RUU5MEVFMTI4
OUQwMEIzREY1OSAvKiBNYWNyb0Fzc2VtYmxlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBNYWNyb0Fzc2VtYmxlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAt
NzY3NywxMCArNzY3Myw2IEBACiAJCQkJRkUxQkQwMUIxRTcyMDAyMTAwMTM0QkM5IC8qIENlbGxM
aXN0LmNwcCAqLywKIAkJCQlGRTFCRDAxQzFFNzIwMDIxMDAxMzRCQzkgLyogQ2VsbExpc3QuaCAq
LywKIAkJCQlGRTFCRDAyMDFFNzIwMjcwMDAxMzRCQzkgLyogQ2VsbFByb2ZpbGUuaCAqLywKLQkJ
CQk4NkI1ODIyRTE0RDIzNzNCMDBBOUMzMDYgLyogQ29kZVByb2ZpbGUuY3BwICovLAotCQkJCTg2
QjU4MjJGMTREMjM3M0IwMEE5QzMwNiAvKiBDb2RlUHJvZmlsZS5oICovLAotCQkJCTg2MDNDRUYy
MTRDNzU0NjQwMEFFNTlFMyAvKiBDb2RlUHJvZmlsaW5nLmNwcCAqLywKLQkJCQk4NjAzQ0VGMzE0
Qzc1NDY0MDBBRTU5RTMgLyogQ29kZVByb2ZpbGluZy5oICovLAogCQkJCTBGNEYxMUU3MjA5QkNE
QTEwMDcwOTY1NCAvKiBDb21waWxlclRpbWluZ1Njb3BlLmNwcCAqLywKIAkJCQkwRjRGMTFFNjIw
OUJDREExMDA3MDk2NTQgLyogQ29tcGlsZXJUaW1pbmdTY29wZS5oICovLAogCQkJCUZFNEJGRjI5
MUFENDc2RTcwMDA4OEY4NyAvKiBGdW5jdGlvbk92ZXJyaWRlcy5jcHAgKi8sCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL0FSTTY0QXNzZW1ibGVyLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9BUk02NEFzc2VtYmxlci5oCShyZXZp
c2lvbiAyNTgzNTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL0FSTTY0QXNz
ZW1ibGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTc4MywxMiArNzgzLDkgQEAgcHVibGljOgogICAg
ICAgICBpbnNuKGRhdGFQcm9jZXNzaW5nMlNvdXJjZShEQVRBU0laRSwgcm0sIERhdGFPcF9BU1JW
LCBybiwgcmQpKTsKICAgICB9CiAKLSAgICBBTFdBWVNfSU5MSU5FIHZvaWQgYihpbnQzMl90IG9m
ZnNldCA9IDApCisgICAgQUxXQVlTX0lOTElORSB2b2lkIGIoKQogICAgIHsKLSAgICAgICAgQVNT
RVJUKCEob2Zmc2V0ICYgMykpOwotICAgICAgICBvZmZzZXQgPj49IDI7Ci0gICAgICAgIEFTU0VS
VChvZmZzZXQgPT0gKG9mZnNldCA8PCA2KSA+PiA2KTsKLSAgICAgICAgaW5zbih1bmNvbmRpdGlv
bmFsQnJhbmNoSW1tZWRpYXRlKGZhbHNlLCBvZmZzZXQpKTsKKyAgICAgICAgaW5zbih1bmNvbmRp
dGlvbmFsQnJhbmNoSW1tZWRpYXRlKGZhbHNlLCAwKSk7CiAgICAgfQogCiAgICAgQUxXQVlTX0lO
TElORSB2b2lkIGJfY29uZChDb25kaXRpb24gY29uZCwgaW50MzJfdCBvZmZzZXQgPSAwKQpAQCAt
ODMxLDExICs4MjgsOSBAQCBwdWJsaWM6CiAgICAgICAgIGluc24obG9naWNhbFNoaWZ0ZWRSZWdp
c3RlcihEQVRBU0laRSwgc2V0RmxhZ3MgPyBMb2dpY2FsT3BfQU5EUyA6IExvZ2ljYWxPcF9BTkQs
IHNoaWZ0LCB0cnVlLCBybSwgYW1vdW50LCBybiwgcmQpKTsKICAgICB9CiAKLSAgICBBTFdBWVNf
SU5MSU5FIHZvaWQgYmwoaW50MzJfdCBvZmZzZXQgPSAwKQorICAgIEFMV0FZU19JTkxJTkUgdm9p
ZCBibCgpCiAgICAgewotICAgICAgICBBU1NFUlQoIShvZmZzZXQgJiAzKSk7Ci0gICAgICAgIG9m
ZnNldCA+Pj0gMjsKLSAgICAgICAgaW5zbih1bmNvbmRpdGlvbmFsQnJhbmNoSW1tZWRpYXRlKHRy
dWUsIG9mZnNldCkpOworICAgICAgICBpbnNuKHVuY29uZGl0aW9uYWxCcmFuY2hJbW1lZGlhdGUo
dHJ1ZSwgMCkpOwogICAgIH0KIAogICAgIEFMV0FZU19JTkxJTkUgdm9pZCBibHIoUmVnaXN0ZXJJ
RCBybikKQEAgLTI1ODIsNiArMjU3NywxMyBAQCBwdWJsaWM6CiAgICAgewogICAgICAgICBpbnRw
dHJfdCBvZmZzZXQgPSAocmVpbnRlcnByZXRfY2FzdDxpbnRwdHJfdD4odG8pIC0gcmVpbnRlcnBy
ZXRfY2FzdDxpbnRwdHJfdD4od2hlcmUpKSA+PiAyOwogICAgICAgICBBU1NFUlQoc3RhdGljX2Nh
c3Q8aW50PihvZmZzZXQpID09IG9mZnNldCk7CisKKyAgICAgICAgaWYgKCFpc0ludDwyNj4ob2Zm
c2V0KSkgeworICAgICAgICAgICAgdG8gPSBFeGVjdXRhYmxlQWxsb2NhdG9yOjpzaW5nbGV0b24o
KS5nZXRKdW1wSXNsYW5kVG8od2hlcmUsIHRvKTsKKyAgICAgICAgICAgIG9mZnNldCA9IChiaXR3
aXNlX2Nhc3Q8aW50cHRyX3Q+KHRvKSAtIGJpdHdpc2VfY2FzdDxpbnRwdHJfdD4od2hlcmUpKSA+
PiAyOworICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoaXNJbnQ8MjY+KG9mZnNldCkpOworICAg
ICAgICB9CisKICAgICAgICAgaW50IGluc24gPSB1bmNvbmRpdGlvbmFsQnJhbmNoSW1tZWRpYXRl
KGZhbHNlLCBzdGF0aWNfY2FzdDxpbnQ+KG9mZnNldCkpOwogICAgICAgICBSRUxFQVNFX0FTU0VS
VChyb3VuZFVwVG9NdWx0aXBsZU9mPGluc3RydWN0aW9uU2l6ZT4od2hlcmUpID09IHdoZXJlKTsK
ICAgICAgICAgcGVyZm9ybUpJVE1lbWNweSh3aGVyZSwgJmluc24sIHNpemVvZihpbnQpKTsKQEAg
LTI3NzEsNiArMjc3MywyNSBAQCBwdWJsaWM6CiAgICAgICAgIHJlbGlua0p1bXBPckNhbGw8QnJh
bmNoVHlwZV9DQUxMPihyZWludGVycHJldF9jYXN0PGludCo+KGZyb20pIC0gMSwgcmVpbnRlcnBy
ZXRfY2FzdDxjb25zdCBpbnQqPihmcm9tKSAtIDEsIHRvKTsKICAgICAgICAgY2FjaGVGbHVzaChy
ZWludGVycHJldF9jYXN0PGludCo+KGZyb20pIC0gMSwgc2l6ZW9mKGludCkpOwogICAgIH0KKwor
I2lmIFVTRShKVU1QX0lTTEFORFMpCisgICAgc3RhdGljIHZvaWQqIHByZXBhcmVGb3JBdG9taWNS
ZWxpbmtKdW1wQ29uY3VycmVudGx5KHZvaWQqIGZyb20sIHZvaWQqIHRvKQorICAgIHsKKyAgICAg
ICAgaW50cHRyX3Qgb2Zmc2V0ID0gKGJpdHdpc2VfY2FzdDxpbnRwdHJfdD4odG8pIC0gYml0d2lz
ZV9jYXN0PGludHB0cl90Pihmcm9tKSkgPj4gMjsKKyAgICAgICAgQVNTRVJUKHN0YXRpY19jYXN0
PGludD4ob2Zmc2V0KSA9PSBvZmZzZXQpOworCisgICAgICAgIGlmIChpc0ludDwyNj4ob2Zmc2V0
KSkKKyAgICAgICAgICAgIHJldHVybiB0bzsKKworICAgICAgICByZXR1cm4gRXhlY3V0YWJsZUFs
bG9jYXRvcjo6c2luZ2xldG9uKCkuZ2V0SnVtcElzbGFuZFRvQ29uY3VycmVudGx5KGZyb20sIHRv
KTsKKyAgICB9CisKKyAgICBzdGF0aWMgdm9pZCogcHJlcGFyZUZvckF0b21pY1JlbGlua0NhbGxD
b25jdXJyZW50bHkodm9pZCogZnJvbSwgdm9pZCogdG8pCisgICAgeworICAgICAgICBmcm9tID0g
c3RhdGljX2Nhc3Q8dm9pZCo+KGJpdHdpc2VfY2FzdDxpbnQqPihmcm9tKSAtIDEpOworICAgICAg
ICByZXR1cm4gcHJlcGFyZUZvckF0b21pY1JlbGlua0p1bXBDb25jdXJyZW50bHkoZnJvbSwgdG8p
OworICAgIH0KKyNlbmRpZgogICAgIAogICAgIHN0YXRpYyB2b2lkIHJlcGF0Y2hDb21wYWN0KHZv
aWQqIHdoZXJlLCBpbnQzMl90IHZhbHVlKQogICAgIHsKQEAgLTI4NzIsNyArMjg5Myw3IEBAIHB1
YmxpYzoKICAgICAgICAgICAgICAgICByZXR1cm4gTGlua0p1bXBDb25kaXRpb25EaXJlY3Q7CiAK
ICAgICAgICAgICAgIHJldHVybiBMaW5rSnVtcENvbmRpdGlvbjsKLSAgICAgICAgICAgIH0KKyAg
ICAgICAgfQogICAgICAgICBjYXNlIEp1bXBDb21wYXJlQW5kQnJhbmNoOiAgewogICAgICAgICAg
ICAgQVNTRVJUKGlzNEJ5dGVBbGlnbmVkKGZyb20pKTsKICAgICAgICAgICAgIEFTU0VSVChpczRC
eXRlQWxpZ25lZCh0bykpOwpAQCAtMjk0NSw2ICsyOTY2LDEyIEBAIHB1YmxpYzoKICAgICAgICAg
fQogICAgIH0KIAorICAgIHN0YXRpYyBBTFdBWVNfSU5MSU5FIGJvb2wgY2FuRW1pdEp1bXAodm9p
ZCogZnJvbSwgdm9pZCogdG8pCisgICAgeworICAgICAgICBpbnRwdHJfdCBkaWZmID0gKGJpdHdp
c2VfY2FzdDxpbnRwdHJfdD4oZnJvbSkgLSBiaXR3aXNlX2Nhc3Q8aW50cHRyX3Q+KHRvKSkgPj4g
MjsKKyAgICAgICAgcmV0dXJuIGlzSW50PDI2PihkaWZmKTsKKyAgICB9CisKIHByb3RlY3RlZDoK
ICAgICB0ZW1wbGF0ZTxEYXRhc2l6ZSBzaXplPgogICAgIHN0YXRpYyBib29sIGNoZWNrTW92ayhp
bnQgaW5zbiwgaW50IF9odywgUmVnaXN0ZXJJRCBfcmQpCkBAIC0yOTk0LDkgKzMwMjEsMTUgQEAg
cHJvdGVjdGVkOgogICAgICAgICBBU1NFUlQoIShyZWludGVycHJldF9jYXN0PGludHB0cl90Pih0
bykgJiAzKSk7CiAgICAgICAgIGFzc2VydElzTm90VGFnZ2VkKHRvKTsKICAgICAgICAgYXNzZXJ0
SXNOb3RUYWdnZWQoZnJvbUluc3RydWN0aW9uKTsKLSAgICAgICAgaW50cHRyX3Qgb2Zmc2V0ID0g
KHJlaW50ZXJwcmV0X2Nhc3Q8aW50cHRyX3Q+KHRvKSAtIHJlaW50ZXJwcmV0X2Nhc3Q8aW50cHRy
X3Q+KGZyb21JbnN0cnVjdGlvbikpID4+IDI7CisgICAgICAgIGludHB0cl90IG9mZnNldCA9IChi
aXR3aXNlX2Nhc3Q8aW50cHRyX3Q+KHRvKSAtIGJpdHdpc2VfY2FzdDxpbnRwdHJfdD4oZnJvbUlu
c3RydWN0aW9uKSkgPj4gMjsKICAgICAgICAgQVNTRVJUKHN0YXRpY19jYXN0PGludD4ob2Zmc2V0
KSA9PSBvZmZzZXQpOwogCisgICAgICAgIGlmICghaXNJbnQ8MjY+KG9mZnNldCkpIHsKKyAgICAg
ICAgICAgIHRvID0gRXhlY3V0YWJsZUFsbG9jYXRvcjo6c2luZ2xldG9uKCkuZ2V0SnVtcElzbGFu
ZFRvKGJpdHdpc2VfY2FzdDx2b2lkKj4oZnJvbUluc3RydWN0aW9uKSwgdG8pOworICAgICAgICAg
ICAgb2Zmc2V0ID0gKGJpdHdpc2VfY2FzdDxpbnRwdHJfdD4odG8pIC0gYml0d2lzZV9jYXN0PGlu
dHB0cl90Pihmcm9tSW5zdHJ1Y3Rpb24pKSA+PiAyOworICAgICAgICAgICAgUkVMRUFTRV9BU1NF
UlQoaXNJbnQ8MjY+KG9mZnNldCkpOworICAgICAgICB9CisKICAgICAgICAgaW50IGluc24gPSB1
bmNvbmRpdGlvbmFsQnJhbmNoSW1tZWRpYXRlKGlzQ2FsbCwgc3RhdGljX2Nhc3Q8aW50PihvZmZz
ZXQpKTsKICAgICAgICAgUkVMRUFTRV9BU1NFUlQocm91bmRVcFRvTXVsdGlwbGVPZjxpbnN0cnVj
dGlvblNpemU+KGZyb20pID09IGZyb20pOwogICAgICAgICBjb3B5KGZyb20sICZpbnNuLCBzaXpl
b2YoaW50KSk7CkBAIC0zMDA4LDEyICszMDQxLDEyIEBAIHByb3RlY3RlZDoKICAgICAgICAgQVNT
RVJUKCEocmVpbnRlcnByZXRfY2FzdDxpbnRwdHJfdD4oZnJvbSkgJiAzKSk7CiAgICAgICAgIEFT
U0VSVCghKHJlaW50ZXJwcmV0X2Nhc3Q8aW50cHRyX3Q+KHRvKSAmIDMpKTsKICAgICAgICAgaW50
cHRyX3Qgb2Zmc2V0ID0gKHJlaW50ZXJwcmV0X2Nhc3Q8aW50cHRyX3Q+KHRvKSAtIHJlaW50ZXJw
cmV0X2Nhc3Q8aW50cHRyX3Q+KGZyb21JbnN0cnVjdGlvbikpID4+IDI7Ci0gICAgICAgIEFTU0VS
VChpc0ludDwyNj4ob2Zmc2V0KSk7CiAKICAgICAgICAgYm9vbCB1c2VEaXJlY3QgPSBpc0ludDwx
OT4ob2Zmc2V0KTsKICAgICAgICAgQVNTRVJUKHR5cGUgPT0gSW5kaXJlY3RCcmFuY2ggfHwgdXNl
RGlyZWN0KTsKIAogICAgICAgICBpZiAodXNlRGlyZWN0IHx8IHR5cGUgPT0gRGlyZWN0QnJhbmNo
KSB7CisgICAgICAgICAgICBBU1NFUlQoaXNJbnQ8MTk+KG9mZnNldCkpOwogICAgICAgICAgICAg
aW50IGluc24gPSBjb21wYXJlQW5kQnJhbmNoSW1tZWRpYXRlKGlzNjRCaXQgPyBEYXRhc2l6ZV82
NCA6IERhdGFzaXplXzMyLCBjb25kaXRpb24gPT0gQ29uZGl0aW9uTkUsIHN0YXRpY19jYXN0PGlu
dD4ob2Zmc2V0KSwgcnQpOwogICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQocm91bmRVcFRvTXVs
dGlwbGVPZjxpbnN0cnVjdGlvblNpemU+KGZyb20pID09IGZyb20pOwogICAgICAgICAgICAgY29w
eShmcm9tLCAmaW5zbiwgc2l6ZW9mKGludCkpOwpAQCAtMzAzNiwxMiArMzA2OSwxMiBAQCBwcm90
ZWN0ZWQ6CiAgICAgICAgIEFTU0VSVCghKHJlaW50ZXJwcmV0X2Nhc3Q8aW50cHRyX3Q+KGZyb20p
ICYgMykpOwogICAgICAgICBBU1NFUlQoIShyZWludGVycHJldF9jYXN0PGludHB0cl90Pih0bykg
JiAzKSk7CiAgICAgICAgIGludHB0cl90IG9mZnNldCA9IChyZWludGVycHJldF9jYXN0PGludHB0
cl90Pih0bykgLSByZWludGVycHJldF9jYXN0PGludHB0cl90Pihmcm9tSW5zdHJ1Y3Rpb24pKSA+
PiAyOwotICAgICAgICBBU1NFUlQoaXNJbnQ8MjY+KG9mZnNldCkpOwogCiAgICAgICAgIGJvb2wg
dXNlRGlyZWN0ID0gaXNJbnQ8MTk+KG9mZnNldCk7CiAgICAgICAgIEFTU0VSVCh0eXBlID09IElu
ZGlyZWN0QnJhbmNoIHx8IHVzZURpcmVjdCk7CiAKICAgICAgICAgaWYgKHVzZURpcmVjdCB8fCB0
eXBlID09IERpcmVjdEJyYW5jaCkgeworICAgICAgICAgICAgQVNTRVJUKGlzSW50PDE5PihvZmZz
ZXQpKTsKICAgICAgICAgICAgIGludCBpbnNuID0gY29uZGl0aW9uYWxCcmFuY2hJbW1lZGlhdGUo
c3RhdGljX2Nhc3Q8aW50PihvZmZzZXQpLCBjb25kaXRpb24pOwogICAgICAgICAgICAgUkVMRUFT
RV9BU1NFUlQocm91bmRVcFRvTXVsdGlwbGVPZjxpbnN0cnVjdGlvblNpemU+KGZyb20pID09IGZy
b20pOwogICAgICAgICAgICAgY29weShmcm9tLCAmaW5zbiwgc2l6ZW9mKGludCkpOwpAQCAtMzA2
NSwxMiArMzA5OCwxMiBAQCBwcm90ZWN0ZWQ6CiAgICAgICAgIEFTU0VSVCghKHJlaW50ZXJwcmV0
X2Nhc3Q8aW50cHRyX3Q+KHRvKSAmIDMpKTsKICAgICAgICAgaW50cHRyX3Qgb2Zmc2V0ID0gKHJl
aW50ZXJwcmV0X2Nhc3Q8aW50cHRyX3Q+KHRvKSAtIHJlaW50ZXJwcmV0X2Nhc3Q8aW50cHRyX3Q+
KGZyb21JbnN0cnVjdGlvbikpID4+IDI7CiAgICAgICAgIEFTU0VSVChzdGF0aWNfY2FzdDxpbnQ+
KG9mZnNldCkgPT0gb2Zmc2V0KTsKLSAgICAgICAgQVNTRVJUKGlzSW50PDI2PihvZmZzZXQpKTsK
IAogICAgICAgICBib29sIHVzZURpcmVjdCA9IGlzSW50PDE0PihvZmZzZXQpOwogICAgICAgICBB
U1NFUlQodHlwZSA9PSBJbmRpcmVjdEJyYW5jaCB8fCB1c2VEaXJlY3QpOwogCiAgICAgICAgIGlm
ICh1c2VEaXJlY3QgfHwgdHlwZSA9PSBEaXJlY3RCcmFuY2gpIHsKKyAgICAgICAgICAgIEFTU0VS
VChpc0ludDwxND4ob2Zmc2V0KSk7CiAgICAgICAgICAgICBpbnQgaW5zbiA9IHRlc3RBbmRCcmFu
Y2hJbW1lZGlhdGUoY29uZGl0aW9uID09IENvbmRpdGlvbk5FLCBzdGF0aWNfY2FzdDxpbnQ+KGJp
dE51bWJlciksIHN0YXRpY19jYXN0PGludD4ob2Zmc2V0KSwgcnQpOwogICAgICAgICAgICAgUkVM
RUFTRV9BU1NFUlQocm91bmRVcFRvTXVsdGlwbGVPZjxpbnN0cnVjdGlvblNpemU+KGZyb20pID09
IGZyb20pOwogICAgICAgICAgICAgY29weShmcm9tLCAmaW5zbiwgc2l6ZW9mKGludCkpOwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9BYnN0cmFjdE1hY3JvQXNzZW1ibGVy
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9BYnN0cmFj
dE1hY3JvQXNzZW1ibGVyLmgJKHJldmlzaW9uIDI1ODM1MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9hc3NlbWJsZXIvQWJzdHJhY3RNYWNyb0Fzc2VtYmxlci5oCSh3b3JraW5nIGNvcHkpCkBA
IC05MTksNiArOTE5LDIyIEBAIHB1YmxpYzoKICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JF
QUNIRUQoKTsKICAgICB9CiAKKyAgICB0ZW1wbGF0ZTxQdHJUYWcgY2FsbFRhZywgUHRyVGFnIGRl
c3RUYWc+CisgICAgc3RhdGljIENvZGVMb2NhdGlvbkxhYmVsPGRlc3RUYWc+IHByZXBhcmVGb3JB
dG9taWNSZXBhdGNoTmVhckNhbGxDb25jdXJyZW50bHkoQ29kZUxvY2F0aW9uTmVhckNhbGw8Y2Fs
bFRhZz4gbmVhckNhbGwsIENvZGVMb2NhdGlvbkxhYmVsPGRlc3RUYWc+IGRlc3RpbmF0aW9uKQor
ICAgIHsKKyNpZiBVU0UoSlVNUF9JU0xBTkRTKQorICAgICAgICBzd2l0Y2ggKG5lYXJDYWxsLmNh
bGxNb2RlKCkpIHsKKyAgICAgICAgY2FzZSBOZWFyQ2FsbE1vZGU6OlRhaWw6CisgICAgICAgICAg
ICByZXR1cm4gQ29kZUxvY2F0aW9uTGFiZWw8ZGVzdFRhZz4odGFnQ29kZVB0cjxkZXN0VGFnPihB
c3NlbWJsZXJUeXBlOjpwcmVwYXJlRm9yQXRvbWljUmVsaW5rSnVtcENvbmN1cnJlbnRseShuZWFy
Q2FsbC5kYXRhTG9jYXRpb24oKSwgZGVzdGluYXRpb24uZGF0YUxvY2F0aW9uKCkpKSk7CisgICAg
ICAgIGNhc2UgTmVhckNhbGxNb2RlOjpSZWd1bGFyOgorICAgICAgICAgICAgcmV0dXJuIENvZGVM
b2NhdGlvbkxhYmVsPGRlc3RUYWc+KHRhZ0NvZGVQdHI8ZGVzdFRhZz4oQXNzZW1ibGVyVHlwZTo6
cHJlcGFyZUZvckF0b21pY1JlbGlua0NhbGxDb25jdXJyZW50bHkobmVhckNhbGwuZGF0YUxvY2F0
aW9uKCksIGRlc3RpbmF0aW9uLnVudGFnZ2VkRXhlY3V0YWJsZUFkZHJlc3MoKSkpKTsKKyAgICAg
ICAgfQorI2Vsc2UKKyAgICAgICAgVU5VU0VEX1BBUkFNKG5lYXJDYWxsKTsKKyAgICAgICAgcmV0
dXJuIGRlc3RpbmF0aW9uOworI2VuZGlmCisgICAgfQorCiAgICAgdGVtcGxhdGU8UHRyVGFnIHRh
Zz4KICAgICBzdGF0aWMgdm9pZCByZXBhdGNoQ29tcGFjdChDb2RlTG9jYXRpb25EYXRhTGFiZWxD
b21wYWN0PHRhZz4gZGF0YUxhYmVsQ29tcGFjdCwgaW50MzJfdCB2YWx1ZSkKICAgICB7CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL0xpbmtCdWZmZXIuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTGlua0J1ZmZlci5jcHAJKHJl
dmlzaW9uIDI1ODM1MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTGlua0J1
ZmZlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEzMSw5ICsxMzEsOSBAQCBzdGF0aWMgQUxXQVlT
X0lOTElORSB2b2lkIHJlY29yZExpbmtPZmZzCiB9CiAKIHRlbXBsYXRlIDx0eXBlbmFtZSBJbnN0
cnVjdGlvblR5cGU+Ci12b2lkIExpbmtCdWZmZXI6OmNvcHlDb21wYWN0QW5kTGlua0NvZGUoTWFj
cm9Bc3NlbWJsZXImIG1hY3JvQXNzZW1ibGVyLCB2b2lkKiBvd25lclVJRCwgSklUQ29tcGlsYXRp
b25FZmZvcnQgZWZmb3J0KQordm9pZCBMaW5rQnVmZmVyOjpjb3B5Q29tcGFjdEFuZExpbmtDb2Rl
KE1hY3JvQXNzZW1ibGVyJiBtYWNyb0Fzc2VtYmxlciwgSklUQ29tcGlsYXRpb25FZmZvcnQgZWZm
b3J0KQogewotICAgIGFsbG9jYXRlKG1hY3JvQXNzZW1ibGVyLCBvd25lclVJRCwgZWZmb3J0KTsK
KyAgICBhbGxvY2F0ZShtYWNyb0Fzc2VtYmxlciwgZWZmb3J0KTsKICAgICBjb25zdCBzaXplX3Qg
aW5pdGlhbFNpemUgPSBtYWNyb0Fzc2VtYmxlci5tX2Fzc2VtYmxlci5jb2RlU2l6ZSgpOwogICAg
IGlmIChkaWRGYWlsVG9BbGxvY2F0ZSgpKQogICAgICAgICByZXR1cm47CkBAIC0yOTUsNyArMjk1
LDcgQEAgdm9pZCBMaW5rQnVmZmVyOjpjb3B5Q29tcGFjdEFuZExpbmtDb2RlKAogI2VuZGlmIC8v
IEVOQUJMRShCUkFOQ0hfQ09NUEFDVElPTikKIAogCi12b2lkIExpbmtCdWZmZXI6OmxpbmtDb2Rl
KE1hY3JvQXNzZW1ibGVyJiBtYWNyb0Fzc2VtYmxlciwgdm9pZCogb3duZXJVSUQsIEpJVENvbXBp
bGF0aW9uRWZmb3J0IGVmZm9ydCkKK3ZvaWQgTGlua0J1ZmZlcjo6bGlua0NvZGUoTWFjcm9Bc3Nl
bWJsZXImIG1hY3JvQXNzZW1ibGVyLCBKSVRDb21waWxhdGlvbkVmZm9ydCBlZmZvcnQpCiB7CiAg
ICAgLy8gRW5zdXJlIHRoYXQgdGhlIGVuZCBvZiB0aGUgbGFzdCBpbnZhbGlkYXRpb24gcG9pbnQg
ZG9lcyBub3QgZXh0ZW5kIGJleW9uZCB0aGUgZW5kIG9mIHRoZSBidWZmZXIuCiAgICAgbWFjcm9B
c3NlbWJsZXIubGFiZWwoKTsKQEAgLTMwNCw3ICszMDQsNyBAQCB2b2lkIExpbmtCdWZmZXI6Omxp
bmtDb2RlKE1hY3JvQXNzZW1ibGVyCiAjaWYgZGVmaW5lZChBU1NFTUJMRVJfSEFTX0NPTlNUQU5U
X1BPT0wpICYmIEFTU0VNQkxFUl9IQVNfQ09OU1RBTlRfUE9PTAogICAgIG1hY3JvQXNzZW1ibGVy
Lm1fYXNzZW1ibGVyLmJ1ZmZlcigpLmZsdXNoQ29uc3RhbnRQb29sKGZhbHNlKTsKICNlbmRpZgot
ICAgIGFsbG9jYXRlKG1hY3JvQXNzZW1ibGVyLCBvd25lclVJRCwgZWZmb3J0KTsKKyAgICBhbGxv
Y2F0ZShtYWNyb0Fzc2VtYmxlciwgZWZmb3J0KTsKICAgICBpZiAoIW1fZGlkQWxsb2NhdGUpCiAg
ICAgICAgIHJldHVybjsKICAgICBBU1NFUlQobV9jb2RlKTsKQEAgLTMxOCwxNSArMzE4LDE1IEBA
IHZvaWQgTGlua0J1ZmZlcjo6bGlua0NvZGUoTWFjcm9Bc3NlbWJsZXIKICAgICBtYWNyb0Fzc2Vt
Ymxlci5tX2Fzc2VtYmxlci5yZWxvY2F0ZUp1bXBzKGJ1ZmZlci5kYXRhKCksIGNvZGUpOwogI2Vu
ZGlmCiAjZWxpZiBDUFUoQVJNX1RIVU1CMikKLSAgICBjb3B5Q29tcGFjdEFuZExpbmtDb2RlPHVp
bnQxNl90PihtYWNyb0Fzc2VtYmxlciwgb3duZXJVSUQsIGVmZm9ydCk7CisgICAgY29weUNvbXBh
Y3RBbmRMaW5rQ29kZTx1aW50MTZfdD4obWFjcm9Bc3NlbWJsZXIsIGVmZm9ydCk7CiAjZWxpZiBD
UFUoQVJNNjQpCi0gICAgY29weUNvbXBhY3RBbmRMaW5rQ29kZTx1aW50MzJfdD4obWFjcm9Bc3Nl
bWJsZXIsIG93bmVyVUlELCBlZmZvcnQpOworICAgIGNvcHlDb21wYWN0QW5kTGlua0NvZGU8dWlu
dDMyX3Q+KG1hY3JvQXNzZW1ibGVyLCBlZmZvcnQpOwogI2VuZGlmIC8vICFFTkFCTEUoQlJBTkNI
X0NPTVBBQ1RJT04pCiAKICAgICBtX2xpbmtUYXNrcyA9IFdURk1vdmUobWFjcm9Bc3NlbWJsZXIu
bV9saW5rVGFza3MpOwogfQogCi12b2lkIExpbmtCdWZmZXI6OmFsbG9jYXRlKE1hY3JvQXNzZW1i
bGVyJiBtYWNyb0Fzc2VtYmxlciwgdm9pZCogb3duZXJVSUQsIEpJVENvbXBpbGF0aW9uRWZmb3J0
IGVmZm9ydCkKK3ZvaWQgTGlua0J1ZmZlcjo6YWxsb2NhdGUoTWFjcm9Bc3NlbWJsZXImIG1hY3Jv
QXNzZW1ibGVyLCBKSVRDb21waWxhdGlvbkVmZm9ydCBlZmZvcnQpCiB7CiAgICAgc2l6ZV90IGlu
aXRpYWxTaXplID0gbWFjcm9Bc3NlbWJsZXIubV9hc3NlbWJsZXIuY29kZVNpemUoKTsKICAgICBp
ZiAobV9jb2RlKSB7CkBAIC0zNDQsNyArMzQ0LDcgQEAgdm9pZCBMaW5rQnVmZmVyOjphbGxvY2F0
ZShNYWNyb0Fzc2VtYmxlcgogICAgICAgICBpbml0aWFsU2l6ZSA9IG1hY3JvQXNzZW1ibGVyLm1f
YXNzZW1ibGVyLmNvZGVTaXplKCk7CiAgICAgfQogCi0gICAgbV9leGVjdXRhYmxlTWVtb3J5ID0g
RXhlY3V0YWJsZUFsbG9jYXRvcjo6c2luZ2xldG9uKCkuYWxsb2NhdGUoaW5pdGlhbFNpemUsIG93
bmVyVUlELCBlZmZvcnQpOworICAgIG1fZXhlY3V0YWJsZU1lbW9yeSA9IEV4ZWN1dGFibGVBbGxv
Y2F0b3I6OnNpbmdsZXRvbigpLmFsbG9jYXRlKGluaXRpYWxTaXplLCBlZmZvcnQpOwogICAgIGlm
ICghbV9leGVjdXRhYmxlTWVtb3J5KQogICAgICAgICByZXR1cm47CiAgICAgbV9jb2RlID0gTWFj
cm9Bc3NlbWJsZXJDb2RlUHRyPExpbmtCdWZmZXJQdHJUYWc+KG1fZXhlY3V0YWJsZU1lbW9yeS0+
c3RhcnQoKS5yZXRhZ2dlZFB0cjxMaW5rQnVmZmVyUHRyVGFnPigpKTsKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTGlua0J1ZmZlci5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTGlua0J1ZmZlci5oCShyZXZpc2lvbiAyNTgzNTAp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL0xpbmtCdWZmZXIuaAkod29ya2lu
ZyBjb3B5KQpAQCAtOTAsNyArOTAsOCBAQCBwdWJsaWM6CiAgICAgICAgICwgbV9jb21wbGV0ZWQo
ZmFsc2UpCiAjZW5kaWYKICAgICB7Ci0gICAgICAgIGxpbmtDb2RlKG1hY3JvQXNzZW1ibGVyLCBv
d25lclVJRCwgZWZmb3J0KTsKKyAgICAgICAgVU5VU0VEX1BBUkFNKG93bmVyVUlEKTsKKyAgICAg
ICAgbGlua0NvZGUobWFjcm9Bc3NlbWJsZXIsIGVmZm9ydCk7CiAgICAgfQogCiAgICAgdGVtcGxh
dGU8UHRyVGFnIHRhZz4KQEAgLTEwNyw3ICsxMDgsNyBAQCBwdWJsaWM6CiAjZWxzZQogICAgICAg
ICBVTlVTRURfUEFSQU0oc2hvdWxkUGVyZm9ybUJyYW5jaENvbXBhY3Rpb24pOwogI2VuZGlmCi0g
ICAgICAgIGxpbmtDb2RlKG1hY3JvQXNzZW1ibGVyLCAwLCBlZmZvcnQpOworICAgICAgICBsaW5r
Q29kZShtYWNyb0Fzc2VtYmxlciwgZWZmb3J0KTsKICAgICB9CiAKICAgICB+TGlua0J1ZmZlcigp
CkBAIC0zMjEsMTIgKzMyMiwxMiBAQCBwcml2YXRlOgogICAgICAgICByZXR1cm4gbV9jb2RlLmRh
dGFMb2NhdGlvbigpOwogICAgIH0KICAgICAKLSAgICB2b2lkIGFsbG9jYXRlKE1hY3JvQXNzZW1i
bGVyJiwgdm9pZCogb3duZXJVSUQsIEpJVENvbXBpbGF0aW9uRWZmb3J0KTsKKyAgICB2b2lkIGFs
bG9jYXRlKE1hY3JvQXNzZW1ibGVyJiwgSklUQ29tcGlsYXRpb25FZmZvcnQpOwogCi0gICAgSlNf
RVhQT1JUX1BSSVZBVEUgdm9pZCBsaW5rQ29kZShNYWNyb0Fzc2VtYmxlciYsIHZvaWQqIG93bmVy
VUlELCBKSVRDb21waWxhdGlvbkVmZm9ydCk7CisgICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBs
aW5rQ29kZShNYWNyb0Fzc2VtYmxlciYsIEpJVENvbXBpbGF0aW9uRWZmb3J0KTsKICNpZiBFTkFC
TEUoQlJBTkNIX0NPTVBBQ1RJT04pCiAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIEluc3RydWN0aW9u
VHlwZT4KLSAgICB2b2lkIGNvcHlDb21wYWN0QW5kTGlua0NvZGUoTWFjcm9Bc3NlbWJsZXImLCB2
b2lkKiBvd25lclVJRCwgSklUQ29tcGlsYXRpb25FZmZvcnQpOworICAgIHZvaWQgY29weUNvbXBh
Y3RBbmRMaW5rQ29kZShNYWNyb0Fzc2VtYmxlciYsIEpJVENvbXBpbGF0aW9uRWZmb3J0KTsKICNl
bmRpZgogCiAgICAgdm9pZCBwZXJmb3JtRmluYWxpemF0aW9uKCk7CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyQ29kZVJlZi5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJDb2RlUmVm
LmgJKHJldmlzaW9uIDI1ODM1MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIv
TWFjcm9Bc3NlbWJsZXJDb2RlUmVmLmgJKHdvcmtpbmcgY29weSkKQEAgLTQzNCw3ICs0MzQsNiBA
QCBwdWJsaWM6CiAgICAgICAgIDogbV9jb2RlUHRyKGV4ZWN1dGFibGVNZW1vcnktPnN0YXJ0KCku
cmV0YWdnZWRQdHI8dGFnPigpKQogICAgICAgICAsIG1fZXhlY3V0YWJsZU1lbW9yeShXVEZNb3Zl
KGV4ZWN1dGFibGVNZW1vcnkpKQogICAgIHsKLSAgICAgICAgQVNTRVJUKG1fZXhlY3V0YWJsZU1l
bW9yeS0+aXNNYW5hZ2VkKCkpOwogICAgICAgICBBU1NFUlQobV9leGVjdXRhYmxlTWVtb3J5LT5z
dGFydCgpKTsKICAgICAgICAgQVNTRVJUKG1fY29kZVB0cik7CiAgICAgfQpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9FeGVjdXRhYmxlQWxsb2NhdG9yLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0V4ZWN1dGFibGVBbGxvY2F0b3IuY3BwCShyZXZp
c2lvbiAyNTgzNTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0V4ZWN1dGFibGVBbGxv
Y2F0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw5ICsyOCwxMCBAQAogCiAjaWYgRU5BQkxF
KEpJVCkKIAotI2luY2x1ZGUgIkNvZGVQcm9maWxpbmcuaCIKICNpbmNsdWRlICJFeGVjdXRhYmxl
QWxsb2NhdGlvbkZ1enouaCIKKyNpbmNsdWRlICJJdGVyYXRpb25TdGF0dXMuaCIKICNpbmNsdWRl
ICJKU0NJbmxpbmVzLmgiCisjaW5jbHVkZSA8dHlwZV90cmFpdHM+CiAjaW5jbHVkZSA8d3RmL0Zp
bGVTeXN0ZW0uaD4KICNpbmNsdWRlIDx3dGYvTWV0YUFsbG9jYXRvci5oPgogI2luY2x1ZGUgPHd0
Zi9QYWdlUmVzZXJ2YXRpb24uaD4KQEAgLTk2LDkgKzk3LDIwIEBAIHN0YXRpYyBjb25zdGV4cHIg
c2l6ZV90IGZpeGVkRXhlY3V0YWJsZU0KICNlbGlmIENQVShBUk0pCiBzdGF0aWMgY29uc3RleHBy
IHNpemVfdCBmaXhlZEV4ZWN1dGFibGVNZW1vcnlQb29sU2l6ZSA9IDE2ICogMTAyNCAqIDEwMjQ7
CiAjZWxpZiBDUFUoQVJNNjQpCisjaWYgVVNFKEpVTVBfSVNMQU5EUykKK3N0YXRpYyBjb25zdGV4
cHIgc2l6ZV90IGZpeGVkRXhlY3V0YWJsZU1lbW9yeVBvb2xTaXplID0gMSAqIDEwMjQgKiAxMDI0
ICogMTAyNDsKKy8vIFRoZXNlIHNpemVzIGd1YXJhbnRlZSB0aGF0IGFueSBqdW1wIHdpdGhpbiBh
biBpc2xhbmQgY2FuIGp1bXAgZm9yd2FyZHMgb3IgYmFja3dhcmRzCisvLyB0byB0aGUgYWRqYWNl
bnQgaXNsYW5kIGluIGEgc2luZ2xlIGluc3RydWN0aW9uLgorc3RhdGljIGNvbnN0ZXhwciBzaXpl
X3QgcmVnaW9uU2l6ZSA9IDExMiAqIDEwMjQgKiAxMDI0Oworc3RhdGljIGNvbnN0ZXhwciBzaXpl
X3QgaXNsYW5kUmVnaW9uU2l6ZSA9IDE2ICogMTAyNCAqIDEwMjQ7CitzdGF0aWMgY29uc3RleHBy
IHNpemVfdCBudW1iZXJPZlJlZ2lvbnMgPSBmaXhlZEV4ZWN1dGFibGVNZW1vcnlQb29sU2l6ZSAv
IHJlZ2lvblNpemU7CitzdGF0aWMgY29uc3RleHByIHNpemVfdCBpc2xhbmRTaXplSW5CeXRlcyA9
IDQ7CitzdGF0aWMgY29uc3RleHByIHNpemVfdCBtYXhJc2xhbmRzUGVyUmVnaW9uID0gaXNsYW5k
UmVnaW9uU2l6ZSAvIGlzbGFuZFNpemVJbkJ5dGVzOworI2Vsc2UKIHN0YXRpYyBjb25zdGV4cHIg
c2l6ZV90IGZpeGVkRXhlY3V0YWJsZU1lbW9yeVBvb2xTaXplID0gMTI4ICogMTAyNCAqIDEwMjQ7
CisjZW5kaWYKICNlbGlmIENQVShYODZfNjQpCi1zdGF0aWMgY29uc3RleHByIHNpemVfdCBmaXhl
ZEV4ZWN1dGFibGVNZW1vcnlQb29sU2l6ZSA9IDEwMjQgKiAxMDI0ICogMTAyNDsKK3N0YXRpYyBj
b25zdGV4cHIgc2l6ZV90IGZpeGVkRXhlY3V0YWJsZU1lbW9yeVBvb2xTaXplID0gMSAqIDEwMjQg
KiAxMDI0ICogMTAyNDsKICNlbHNlCiBzdGF0aWMgY29uc3RleHByIHNpemVfdCBmaXhlZEV4ZWN1
dGFibGVNZW1vcnlQb29sU2l6ZSA9IDMyICogMTAyNCAqIDEwMjQ7CiAjZW5kaWYKQEAgLTMxMywx
MCArMzI1LDExIEBAIHN0YXRpYyBBTFdBWVNfSU5MSU5FIEpJVFJlc2VydmF0aW9uIGluaXQKICAg
ICBpZiAoIWlzSklURW5hYmxlZCgpKQogICAgICAgICByZXR1cm4gcmVzZXJ2YXRpb247CiAKKyAg
ICByZXNlcnZhdGlvbi5zaXplID0gZml4ZWRFeGVjdXRhYmxlTWVtb3J5UG9vbFNpemU7CisjaWYg
IVVTRShKVU1QX0lTTEFORFMpCiAgICAgaWYgKE9wdGlvbnM6OmppdE1lbW9yeVJlc2VydmF0aW9u
U2l6ZSgpKQogICAgICAgICByZXNlcnZhdGlvbi5zaXplID0gT3B0aW9uczo6aml0TWVtb3J5UmVz
ZXJ2YXRpb25TaXplKCk7Ci0gICAgZWxzZQotICAgICAgICByZXNlcnZhdGlvbi5zaXplID0gZml4
ZWRFeGVjdXRhYmxlTWVtb3J5UG9vbFNpemU7CisjZW5kaWYKICAgICByZXNlcnZhdGlvbi5zaXpl
ID0gc3RkOjptYXgocm91bmRVcFRvTXVsdGlwbGVPZihwYWdlU2l6ZSgpLCByZXNlcnZhdGlvbi5z
aXplKSwgcGFnZVNpemUoKSAqIDIpOwogCiAgICAgYXV0byB0cnlDcmVhdGVQYWdlUmVzZXJ2YXRp
b24gPSBbXSAoc2l6ZV90IHJlc2VydmF0aW9uU2l6ZSkgewpAQCAtMzYzLDUyICszNzYsNDQ3IEBA
IHN0YXRpYyBBTFdBWVNfSU5MSU5FIEpJVFJlc2VydmF0aW9uIGluaXQKICAgICByZXR1cm4gcmVz
ZXJ2YXRpb247CiB9CiAKLWNsYXNzIEZpeGVkVk1Qb29sRXhlY3V0YWJsZUFsbG9jYXRvciBmaW5h
bCA6IHB1YmxpYyBNZXRhQWxsb2NhdG9yIHsKK2NsYXNzIEZpeGVkVk1Qb29sRXhlY3V0YWJsZUFs
bG9jYXRvciBmaW5hbCB7CiAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CisKKyNpZiBVU0Uo
SlVNUF9JU0xBTkRTKQorICAgIGNsYXNzIElzbGFuZHM7CisgICAgY2xhc3MgUmVnaW9uQWxsb2Nh
dG9yOworI2VuZGlmCisKIHB1YmxpYzoKICAgICBGaXhlZFZNUG9vbEV4ZWN1dGFibGVBbGxvY2F0
b3IoKQotICAgICAgICA6IE1ldGFBbGxvY2F0b3Ioaml0QWxsb2NhdGlvbkdyYW51bGUpIC8vIHJv
dW5kIHVwIGFsbCBhbGxvY2F0aW9ucyB0byAzMiBieXRlcworI2lmIFVTRShKVU1QX0lTTEFORFMp
CisgICAgICAgIDogbV9hbGxvY2F0b3JzKGNvbnN0cnVjdEZpeGVkU2l6ZUFycmF5V2l0aEFyZ3Vt
ZW50czxSZWdpb25BbGxvY2F0b3IsIG51bWJlck9mUmVnaW9ucz4oKnRoaXMpKQorI2Vsc2UKKyAg
ICAgICAgOiBtX2FsbG9jYXRvcigqdGhpcykKKyNlbmRpZgogICAgIHsKICAgICAgICAgSklUUmVz
ZXJ2YXRpb24gcmVzZXJ2YXRpb24gPSBpbml0aWFsaXplSklUUGFnZVJlc2VydmF0aW9uKCk7CiAg
ICAgICAgIG1fcmVzZXJ2YXRpb24gPSBXVEZNb3ZlKHJlc2VydmF0aW9uLnBhZ2VSZXNlcnZhdGlv
bik7CiAgICAgICAgIGlmIChtX3Jlc2VydmF0aW9uKSB7Ci0gICAgICAgICAgICBhZGRGcmVzaEZy
ZWVTcGFjZShyZXNlcnZhdGlvbi5iYXNlLCByZXNlcnZhdGlvbi5zaXplKTsKKyNpZiBVU0UoSlVN
UF9JU0xBTkRTKQorICAgICAgICAgICAgdWludHB0cl90IHN0YXJ0ID0gYml0d2lzZV9jYXN0PHVp
bnRwdHJfdD4obV9yZXNlcnZhdGlvbi5iYXNlKCkpOworICAgICAgICAgICAgdWludHB0cl90IHJl
c2VydmF0aW9uRW5kID0gc3RhcnQgKyBtX3Jlc2VydmF0aW9uLnNpemUoKTsKKyAgICAgICAgICAg
IGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbnVtYmVyT2ZSZWdpb25zOyArK2kpIHsKKyAgICAgICAg
ICAgICAgICBSRUxFQVNFX0FTU0VSVChzdGFydCA8IHJlc2VydmF0aW9uRW5kKTsKKyAgICAgICAg
ICAgICAgICBtX2FsbG9jYXRvcnNbaV0ubV9zdGFydCA9IHRhZ0NvZGVQdHI8RXhlY3V0YWJsZU1l
bW9yeVB0clRhZz4oYml0d2lzZV9jYXN0PHZvaWQqPihzdGFydCkpOworICAgICAgICAgICAgICAg
IG1fYWxsb2NhdG9yc1tpXS5tX2VuZCA9IHRhZ0NvZGVQdHI8RXhlY3V0YWJsZU1lbW9yeVB0clRh
Zz4oYml0d2lzZV9jYXN0PHZvaWQqPihzdGFydCArIHJlZ2lvblNpemUpKTsKKyAgICAgICAgICAg
ICAgICBpZiAobV9hbGxvY2F0b3JzW2ldLmVuZCgpID4gcmVzZXJ2YXRpb25FbmQpIHsKKyAgICAg
ICAgICAgICAgICAgICAgLy8gV2UgbWF5IGhhdmUgdGFrZW4gYSBwYWdlIGZvciB0aGUgZXhlY3V0
YWJsZSBvbmx5IGNvcHkgdGh1bmsuCisgICAgICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJU
KGkgPT0gbnVtYmVyT2ZSZWdpb25zIC0gMSk7CisgICAgICAgICAgICAgICAgICAgIG1fYWxsb2Nh
dG9yc1tpXS5tX2VuZCA9IHRhZ0NvZGVQdHI8RXhlY3V0YWJsZU1lbW9yeVB0clRhZz4oYml0d2lz
ZV9jYXN0PHZvaWQqPihyZXNlcnZhdGlvbkVuZCkpOworICAgICAgICAgICAgICAgIH0KKworICAg
ICAgICAgICAgICAgIG1fYWxsb2NhdG9yc1tpXS5hZGRGcmVzaEZyZWVTcGFjZShiaXR3aXNlX2Nh
c3Q8dm9pZCo+KG1fYWxsb2NhdG9yc1tpXS5zdGFydCgpKSwgbV9hbGxvY2F0b3JzW2ldLmFsbG9j
YXRvclNpemUoKSk7CisKKyAgICAgICAgICAgICAgICBzdGFydCArPSByZWdpb25TaXplOworICAg
ICAgICAgICAgfQorI2Vsc2UKKyAgICAgICAgICAgIG1fYWxsb2NhdG9yLmFkZEZyZXNoRnJlZVNw
YWNlKHJlc2VydmF0aW9uLmJhc2UsIHJlc2VydmF0aW9uLnNpemUpOworI2VuZGlmCisKICAgICAg
ICAgICAgIEFTU0VSVChieXRlc1Jlc2VydmVkKCkgPT0gcmVzZXJ2YXRpb24uc2l6ZSk7IC8vIFNp
bmNlIG91ciBleGVjdXRhYmxlIG1lbW9yeSBpcyBmaXhlZC1zaXplZCwgYnl0ZXNSZXNlcnZlZCBp
cyBuZXZlciBjaGFuZ2VkIGFmdGVyIGluaXRpYWxpemF0aW9uLgogICAgICAgICB9CiAgICAgfQog
Ci0gICAgdmlydHVhbCB+Rml4ZWRWTVBvb2xFeGVjdXRhYmxlQWxsb2NhdG9yKCk7CisgICAgfkZp
eGVkVk1Qb29sRXhlY3V0YWJsZUFsbG9jYXRvcigpCisgICAgeworICAgICAgICBtX3Jlc2VydmF0
aW9uLmRlYWxsb2NhdGUoKTsKKyAgICB9CiAKICAgICB2b2lkKiBtZW1vcnlTdGFydCgpIHsgcmV0
dXJuIHVudGFnQ29kZVB0cjxFeGVjdXRhYmxlTWVtb3J5UHRyVGFnPihnX2pzY0NvbmZpZy5zdGFy
dEV4ZWN1dGFibGVNZW1vcnkpOyB9CiAgICAgdm9pZCogbWVtb3J5RW5kKCkgeyByZXR1cm4gdW50
YWdDb2RlUHRyPEV4ZWN1dGFibGVNZW1vcnlQdHJUYWc+KGdfanNjQ29uZmlnLmVuZEV4ZWN1dGFi
bGVNZW1vcnkpOyB9CiAgICAgYm9vbCBpc0pJVFBDKHZvaWQqIHBjKSB7IHJldHVybiBtZW1vcnlT
dGFydCgpIDw9IHBjICYmIHBjIDwgbWVtb3J5RW5kKCk7IH0KKyAgICBib29sIGlzVmFsaWQoKSB7
IHJldHVybiAhIW1fcmVzZXJ2YXRpb247IH0KIAotcHJvdGVjdGVkOgotICAgIEZyZWVTcGFjZVB0
ciBhbGxvY2F0ZU5ld1NwYWNlKHNpemVfdCYpIG92ZXJyaWRlCisgICAgUmVmUHRyPEV4ZWN1dGFi
bGVNZW1vcnlIYW5kbGU+IGFsbG9jYXRlKHNpemVfdCBzaXplSW5CeXRlcykKICAgICB7Ci0gICAg
ICAgIC8vIFdlJ3JlIG9wZXJhdGluZyBpbiBhIGZpeGVkIHBvb2wsIHNvIG5ldyBhbGxvY2F0aW9u
IGlzIGFsd2F5cyBwcm9oaWJpdGVkLgorI2lmIFVTRShKVU1QX0lTTEFORFMpCisgICAgICAgIGF1
dG8gbG9ja2VyID0gaG9sZExvY2soZ2V0TG9jaygpKTsKKworICAgICAgICB1bnNpZ25lZCBzdGFy
dCA9IDA7CisgICAgICAgIGlmIChPcHRpb25zOjp1c2VSYW5kb21pemluZ0V4ZWN1dGFibGVJc2xh
bmRBbGxvY2F0aW9uKCkpCisgICAgICAgICAgICBzdGFydCA9IGNyeXB0b2dyYXBoaWNhbGx5UmFu
ZG9tTnVtYmVyKCkgJSBtX2FsbG9jYXRvcnMuc2l6ZSgpOworCisgICAgICAgIHVuc2lnbmVkIGkg
PSBzdGFydDsKKyAgICAgICAgd2hpbGUgKHRydWUpIHsKKyAgICAgICAgICAgIFJlZ2lvbkFsbG9j
YXRvciYgYWxsb2NhdG9yID0gbV9hbGxvY2F0b3JzW2ldOworICAgICAgICAgICAgaWYgKFJlZlB0
cjxFeGVjdXRhYmxlTWVtb3J5SGFuZGxlPiByZXN1bHQgPSBhbGxvY2F0b3IuYWxsb2NhdGUobG9j
a2VyLCBzaXplSW5CeXRlcykpCisgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAg
ICAgICAgIGkgPSAoaSArIDEpICUgbV9hbGxvY2F0b3JzLnNpemUoKTsKKyAgICAgICAgICAgIGlm
IChpID09IHN0YXJ0KQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CiAgICAgICAg
IHJldHVybiBudWxscHRyOworI2Vsc2UKKyAgICAgICAgcmV0dXJuIG1fYWxsb2NhdG9yLmFsbG9j
YXRlKHNpemVJbkJ5dGVzKTsKKyNlbmRpZiAvLyBVU0UoSlVNUF9JU0xBTkRTKQorICAgIH0KKwor
ICAgIExvY2smIGdldExvY2soKSB7IHJldHVybiBtX2xvY2s7IH0KKworICAgIC8vIE5vbiBhdG9t
aWMKKyAgICBzaXplX3QgYnl0ZXNBbGxvY2F0ZWQoKSAKKyAgICB7CisgICAgICAgIHNpemVfdCBy
ZXN1bHQgPSAwOworICAgICAgICBmb3JFYWNoQWxsb2NhdG9yKFsmXSAoQWxsb2NhdG9yJiBhbGxv
Y2F0b3IpIHsKKyAgICAgICAgICAgIHJlc3VsdCArPSBhbGxvY2F0b3IuYnl0ZXNBbGxvY2F0ZWQo
KTsKKyAgICAgICAgfSk7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorICAgIHNpemVf
dCBieXRlc1Jlc2VydmVkKCkgCisgICAgeworICAgICAgICBzaXplX3QgcmVzdWx0ID0gMDsKKyAg
ICAgICAgZm9yRWFjaEFsbG9jYXRvcihbJl0gKEFsbG9jYXRvciYgYWxsb2NhdG9yKSB7CisgICAg
ICAgICAgICByZXN1bHQgKz0gYWxsb2NhdG9yLmJ5dGVzUmVzZXJ2ZWQoKTsKKyAgICAgICAgfSk7
CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorICAgIHNpemVfdCBieXRlc0NvbW1pdHRl
ZCgpCisgICAgeworICAgICAgICBzaXplX3QgcmVzdWx0ID0gMDsKKyAgICAgICAgZm9yRWFjaEFs
bG9jYXRvcihbJl0gKEFsbG9jYXRvciYgYWxsb2NhdG9yKSB7CisgICAgICAgICAgICByZXN1bHQg
Kz0gYWxsb2NhdG9yLmJ5dGVzQ29tbWl0dGVkKCk7CisgICAgICAgIH0pOworICAgICAgICByZXR1
cm4gcmVzdWx0OworICAgIH0KKworICAgIGJvb2wgaXNJbkFsbG9jYXRlZE1lbW9yeShjb25zdCBB
YnN0cmFjdExvY2tlciYgbG9ja2VyLCB2b2lkKiBhZGRyZXNzKQorICAgIHsKKyNpZiBVU0UoSlVN
UF9JU0xBTkRTKQorICAgICAgICBpZiAoUmVnaW9uQWxsb2NhdG9yKiBhbGxvY2F0b3IgPSBmaW5k
UmVnaW9uKGJpdHdpc2VfY2FzdDx1aW50cHRyX3Q+KGFkZHJlc3MpKSkKKyAgICAgICAgICAgIHJl
dHVybiBhbGxvY2F0b3ItPmlzSW5BbGxvY2F0ZWRNZW1vcnkobG9ja2VyLCBhZGRyZXNzKTsKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworI2Vsc2UKKyAgICAgICAgcmV0dXJuIG1fYWxsb2NhdG9yLmlz
SW5BbGxvY2F0ZWRNZW1vcnkobG9ja2VyLCBhZGRyZXNzKTsKKyNlbmRpZgorICAgIH0KKworI2lm
IEVOQUJMRShNRVRBX0FMTE9DQVRPUl9QUk9GSUxFKQorICAgIHZvaWQgZHVtcFByb2ZpbGUoKQor
ICAgIHsKKyAgICAgICAgZm9yRWFjaEFsbG9jYXRvcihbJl0gKEFsbG9jYXRvciYgYWxsb2NhdG9y
KSB7CisgICAgICAgICAgICBhbGxvY2F0b3IuZHVtcFByb2ZpbGUoKTsKKyAgICAgICAgfSk7Cisg
ICAgfQorI2VuZGlmCisKKyAgICBNZXRhQWxsb2NhdG9yOjpTdGF0aXN0aWNzIGN1cnJlbnRTdGF0
aXN0aWNzKCkKKyAgICB7CisgICAgICAgIGF1dG8gbG9ja2VyID0gaG9sZExvY2soZ2V0TG9jaygp
KTsKKyAgICAgICAgTWV0YUFsbG9jYXRvcjo6U3RhdGlzdGljcyByZXN1bHQgeyAwLCAwLCAwIH07
CisgICAgICAgIGZvckVhY2hBbGxvY2F0b3IoWyZdIChBbGxvY2F0b3ImIGFsbG9jYXRvcikgewor
ICAgICAgICAgICAgYXV0byBhbGxvY2F0b3JTdGF0cyA9IGFsbG9jYXRvci5jdXJyZW50U3RhdGlz
dGljcyhsb2NrZXIpOworICAgICAgICAgICAgcmVzdWx0LmJ5dGVzQWxsb2NhdGVkICs9IGFsbG9j
YXRvclN0YXRzLmJ5dGVzQWxsb2NhdGVkOworICAgICAgICAgICAgcmVzdWx0LmJ5dGVzUmVzZXJ2
ZWQgKz0gYWxsb2NhdG9yU3RhdHMuYnl0ZXNSZXNlcnZlZDsKKyAgICAgICAgICAgIHJlc3VsdC5i
eXRlc0NvbW1pdHRlZCArPSBhbGxvY2F0b3JTdGF0cy5ieXRlc0NvbW1pdHRlZDsKKyAgICAgICAg
fSk7CisgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgfQogCi0gICAgdm9pZCBub3RpZnlOZWVk
UGFnZSh2b2lkKiBwYWdlLCBzaXplX3QgY291bnQpIG92ZXJyaWRlCisjaWYgVVNFKEpVTVBfSVNM
QU5EUykKKyAgICB2b2lkIGhhbmRsZVdpbGxCZVJlbGVhc2VkKGNvbnN0IExvY2tIb2xkZXImIGxv
Y2tlciwgTWV0YUFsbG9jYXRvckhhbmRsZSYgaGFuZGxlKQogICAgIHsKLSAgICAgICAgbV9yZXNl
cnZhdGlvbi5jb21taXQocGFnZSwgcGFnZVNpemUoKSAqIGNvdW50KTsKKyAgICAgICAgaWYgKGlz
bGFuZHNGb3JKdW1wTG9jYXRpb24uaXNFbXB0eSgpKQorICAgICAgICAgICAgcmV0dXJuOworCisg
ICAgICAgIFZlY3RvcjxJc2xhbmRzKiwgMTY+IHRvUmVtb3ZlOworICAgICAgICB2b2lkKiBzdGFy
dCA9IGhhbmRsZS5zdGFydCgpLnVudGFnZ2VkUHRyKCk7CisgICAgICAgIHZvaWQqIGVuZCA9IGhh
bmRsZS5lbmQoKS51bnRhZ2dlZFB0cigpOworICAgICAgICBpc2xhbmRzRm9ySnVtcExvY2F0aW9u
Lml0ZXJhdGUoWyZdIChJc2xhbmRzJiBpc2xhbmRzLCBib29sJiB2aXNpdExlZnQsIGJvb2wmIHZp
c2l0UmlnaHQpIHsKKyAgICAgICAgICAgIGlmIChzdGFydCA8PSBpc2xhbmRzLmtleSgpICYmIGlz
bGFuZHMua2V5KCkgPCBlbmQpCisgICAgICAgICAgICAgICAgdG9SZW1vdmUuYXBwZW5kKCZpc2xh
bmRzKTsKKyAgICAgICAgICAgIGlmIChpc2xhbmRzLmtleSgpID4gc3RhcnQpCisgICAgICAgICAg
ICAgICAgdmlzaXRMZWZ0ID0gdHJ1ZTsKKyAgICAgICAgICAgIGlmIChpc2xhbmRzLmtleSgpIDwg
ZW5kKQorICAgICAgICAgICAgICAgIHZpc2l0UmlnaHQgPSB0cnVlOworICAgICAgICB9KTsKKwor
ICAgICAgICBmb3IgKElzbGFuZHMqIGlzbGFuZHMgOiB0b1JlbW92ZSkKKyAgICAgICAgICAgIGZy
ZWVJc2xhbmRzKGxvY2tlciwgaXNsYW5kcyk7CisKKyAgICAgICAgaWYgKEFTU0VSVF9FTkFCTEVE
KSB7CisgICAgICAgICAgICBpc2xhbmRzRm9ySnVtcExvY2F0aW9uLml0ZXJhdGUoWyZdIChJc2xh
bmRzJiBpc2xhbmRzLCBib29sJiB2aXNpdExlZnQsIGJvb2wmIHZpc2l0UmlnaHQpIHsKKyAgICAg
ICAgICAgICAgICBpZiAoc3RhcnQgPD0gaXNsYW5kcy5rZXkoKSAmJiBpc2xhbmRzLmtleSgpIDwg
ZW5kKSB7CisgICAgICAgICAgICAgICAgICAgIGRhdGFMb2dMbigiZGlkIG5vdCByZW1vdmUgZXZl
cnl0aGluZyEiKTsKKyAgICAgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNI
RUQoKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgdmlzaXRMZWZ0ID0gdHJ1
ZTsKKyAgICAgICAgICAgICAgICB2aXNpdFJpZ2h0ID0gdHJ1ZTsKKyAgICAgICAgICAgIH0pOwor
ICAgICAgICB9CiAgICAgfQogCi0gICAgdm9pZCBub3RpZnlQYWdlSXNGcmVlKHZvaWQqIHBhZ2Us
IHNpemVfdCBjb3VudCkgb3ZlcnJpZGUKKyAgICB2b2lkKiBtYWtlSXNsYW5kKHVpbnRwdHJfdCBq
dW1wTG9jYXRpb24sIHVpbnRwdHJfdCBuZXdUYXJnZXQsIGJvb2wgY29uY3VycmVudGx5KQogICAg
IHsKLSAgICAgICAgbV9yZXNlcnZhdGlvbi5kZWNvbW1pdChwYWdlLCBwYWdlU2l6ZSgpICogY291
bnQpOworICAgICAgICBhdXRvIGxvY2tlciA9IGhvbGRMb2NrKGdldExvY2soKSk7CisgICAgICAg
IHJldHVybiBpc2xhbmRGb3JKdW1wTG9jYXRpb24obG9ja2VyLCBqdW1wTG9jYXRpb24sIG5ld1Rh
cmdldCwgY29uY3VycmVudGx5KTsKICAgICB9CiAKIHByaXZhdGU6CisgICAgUmVnaW9uQWxsb2Nh
dG9yKiBmaW5kUmVnaW9uKHVpbnRwdHJfdCBwdHIpCisgICAgeworICAgICAgICBSZWdpb25BbGxv
Y2F0b3IqIHJlc3VsdCA9IG51bGxwdHI7CisgICAgICAgIGZvckVhY2hBbGxvY2F0b3IoWyZdIChS
ZWdpb25BbGxvY2F0b3ImIGFsbG9jYXRvcikgeworICAgICAgICAgICAgaWYgKGFsbG9jYXRvci5z
dGFydCgpIDw9IHB0ciAmJiBwdHIgPCBhbGxvY2F0b3IuZW5kKCkpIHsKKyAgICAgICAgICAgICAg
ICByZXN1bHQgPSAmYWxsb2NhdG9yOworICAgICAgICAgICAgICAgIHJldHVybiBJdGVyYXRpb25T
dGF0dXM6OkRvbmU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gSXRlcmF0aW9u
U3RhdHVzOjpDb250aW51ZTsKKyAgICAgICAgfSk7CisgICAgICAgIHJldHVybiByZXN1bHQ7Cisg
ICAgfQorCisgICAgdm9pZCBmcmVlSnVtcElzbGFuZHMoY29uc3QgTG9ja0hvbGRlciYsIElzbGFu
ZHMqIGlzbGFuZHMpCisgICAgeworICAgICAgICBmb3IgKENvZGVMb2NhdGlvbkxhYmVsPEV4ZWN1
dGFibGVNZW1vcnlQdHJUYWc+IGp1bXBJc2xhbmQgOiBpc2xhbmRzLT5qdW1wSXNsYW5kcykgewor
ICAgICAgICAgICAgdWludHB0cl90IHVudGFnZ2VkSnVtcElzbGFuZCA9IGJpdHdpc2VfY2FzdDx1
aW50cHRyX3Q+KGp1bXBJc2xhbmQuZGF0YUxvY2F0aW9uKCkpOworICAgICAgICAgICAgUmVnaW9u
QWxsb2NhdG9yKiBhbGxvY2F0b3IgPSBmaW5kUmVnaW9uKHVudGFnZ2VkSnVtcElzbGFuZCk7Cisg
ICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChhbGxvY2F0b3IpOworICAgICAgICAgICAgYWxsb2Nh
dG9yLT5mcmVlSXNsYW5kKHVudGFnZ2VkSnVtcElzbGFuZCk7CisgICAgICAgIH0KKyAgICAgICAg
aXNsYW5kcy0+anVtcElzbGFuZHMuY2xlYXIoKTsKKyAgICB9CisKKyAgICB2b2lkIGZyZWVJc2xh
bmRzKGNvbnN0IExvY2tIb2xkZXImIGxvY2tlciwgSXNsYW5kcyogaXNsYW5kcykKKyAgICB7Cisg
ICAgICAgIGZyZWVKdW1wSXNsYW5kcyhsb2NrZXIsIGlzbGFuZHMpOworICAgICAgICBpc2xhbmRz
Rm9ySnVtcExvY2F0aW9uLnJlbW92ZShpc2xhbmRzKTsKKyAgICAgICAgZGVsZXRlIGlzbGFuZHM7
CisgICAgfQorCisgICAgdm9pZCogaXNsYW5kRm9ySnVtcExvY2F0aW9uKGNvbnN0IExvY2tIb2xk
ZXImIGxvY2tlciwgdWludHB0cl90IGp1bXBMb2NhdGlvbiwgdWludHB0cl90IHRhcmdldCwgYm9v
bCBjb25jdXJyZW50bHkpCisgICAgeworICAgICAgICBJc2xhbmRzKiBpc2xhbmRzID0gaXNsYW5k
c0Zvckp1bXBMb2NhdGlvbi5maW5kRXhhY3QoYml0d2lzZV9jYXN0PHZvaWQqPihqdW1wTG9jYXRp
b24pKTsKKyAgICAgICAgaWYgKGlzbGFuZHMpIHsKKyAgICAgICAgICAgIC8vIEZJWE1FOiBXZSBj
b3VsZCBjcmVhdGUgc29tZSBtZXRob2Qgb2YgcmV1c2luZyBhbHJlYWR5IGFsbG9jYXRlZCBpc2xh
bmRzIGhlcmUsIGJ1dCBpdCdzCisgICAgICAgICAgICAvLyB1bmxpa2VseSB0byBtYXR0ZXIgaW4g
cHJhY3RpY2UuCisgICAgICAgICAgICBpZiAoIWNvbmN1cnJlbnRseSkKKyAgICAgICAgICAgICAg
ICBmcmVlSnVtcElzbGFuZHMobG9ja2VyLCBpc2xhbmRzKTsKKyAgICAgICAgfSBlbHNlIHsKKyAg
ICAgICAgICAgIGlzbGFuZHMgPSBuZXcgSXNsYW5kczsKKyAgICAgICAgICAgIGlzbGFuZHMtPnJv
b3RKdW1wTG9jYXRpb24gPSBDb2RlTG9jYXRpb25MYWJlbDxFeGVjdXRhYmxlTWVtb3J5UHRyVGFn
Pih0YWdDb2RlUHRyPEV4ZWN1dGFibGVNZW1vcnlQdHJUYWc+KGJpdHdpc2VfY2FzdDx2b2lkKj4o
anVtcExvY2F0aW9uKSkpOworICAgICAgICAgICAgaXNsYW5kc0Zvckp1bXBMb2NhdGlvbi5pbnNl
cnQoaXNsYW5kcyk7CisgICAgICAgIH0KKworICAgICAgICBSZWdpb25BbGxvY2F0b3IqIGFsbG9j
YXRvciA9IGZpbmRSZWdpb24oanVtcExvY2F0aW9uID4gdGFyZ2V0ID8ganVtcExvY2F0aW9uIC0g
cmVnaW9uU2l6ZSA6IGp1bXBMb2NhdGlvbik7CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKGFsbG9j
YXRvcik7CisgICAgICAgIHZvaWQqIHJlc3VsdCA9IGFsbG9jYXRvci0+YWxsb2NhdGVJc2xhbmQo
KTsKKyAgICAgICAgdm9pZCogY3VycmVudElzbGFuZCA9IHJlc3VsdDsKKyAgICAgICAganVtcExv
Y2F0aW9uID0gYml0d2lzZV9jYXN0PHVpbnRwdHJfdD4oY3VycmVudElzbGFuZCk7CisgICAgICAg
IHdoaWxlICh0cnVlKSB7CisgICAgICAgICAgICBpc2xhbmRzLT5qdW1wSXNsYW5kcy5hcHBlbmQo
Q29kZUxvY2F0aW9uTGFiZWw8RXhlY3V0YWJsZU1lbW9yeVB0clRhZz4odGFnQ29kZVB0cjxFeGVj
dXRhYmxlTWVtb3J5UHRyVGFnPihjdXJyZW50SXNsYW5kKSkpOworCisgICAgICAgICAgICBhdXRv
IGVtaXRKdW1wVG8gPSBbJl0gKHZvaWQqIHRhcmdldCkgeworICAgICAgICAgICAgICAgIFJFTEVB
U0VfQVNTRVJUKEFSTTY0QXNzZW1ibGVyOjpjYW5FbWl0SnVtcChiaXR3aXNlX2Nhc3Q8dm9pZCo+
KGp1bXBMb2NhdGlvbiksIHRhcmdldCkpOworCisgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJz
IGppdDsKKyAgICAgICAgICAgICAgICBhdXRvIGp1bXAgPSBqaXQuanVtcCgpOworICAgICAgICAg
ICAgICAgIExpbmtCdWZmZXIgbGlua0J1ZmZlcihqaXQsIE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxO
b1B0clRhZz4oY3VycmVudElzbGFuZCksIGlzbGFuZFNpemVJbkJ5dGVzLCBKSVRDb21waWxhdGlv
bk11c3RTdWNjZWVkLCBmYWxzZSk7CisgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQobGlu
a0J1ZmZlci5pc1ZhbGlkKCkpOworICAgICAgICAgICAgICAgIGxpbmtCdWZmZXIubGluayhqdW1w
LCBDb2RlTG9jYXRpb25MYWJlbDxOb1B0clRhZz4odGFyZ2V0KSk7CisgICAgICAgICAgICAgICAg
RklOQUxJWkVfQ09ERShsaW5rQnVmZmVyLCBOb1B0clRhZywgIkp1bXAgSXNsYW5kOiAlbHUiLCBq
dW1wTG9jYXRpb24pOworICAgICAgICAgICAgfTsKKworICAgICAgICAgICAgaWYgKEFSTTY0QXNz
ZW1ibGVyOjpjYW5FbWl0SnVtcChiaXR3aXNlX2Nhc3Q8dm9pZCo+KGp1bXBMb2NhdGlvbiksIGJp
dHdpc2VfY2FzdDx2b2lkKj4odGFyZ2V0KSkpIHsKKyAgICAgICAgICAgICAgICBlbWl0SnVtcFRv
KGJpdHdpc2VfY2FzdDx2b2lkKj4odGFyZ2V0KSk7CisgICAgICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHVpbnRwdHJfdCBuZXh0SXNsYW5kUmVnaW9uOwor
ICAgICAgICAgICAgaWYgKGp1bXBMb2NhdGlvbiA+IHRhcmdldCkKKyAgICAgICAgICAgICAgICBu
ZXh0SXNsYW5kUmVnaW9uID0ganVtcExvY2F0aW9uIC0gcmVnaW9uU2l6ZTsKKyAgICAgICAgICAg
IGVsc2UKKyAgICAgICAgICAgICAgICBuZXh0SXNsYW5kUmVnaW9uID0ganVtcExvY2F0aW9uICsg
cmVnaW9uU2l6ZTsKKworICAgICAgICAgICAgUmVnaW9uQWxsb2NhdG9yKiBhbGxvY2F0b3IgPSBm
aW5kUmVnaW9uKG5leHRJc2xhbmRSZWdpb24pOworICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQo
YWxsb2NhdG9yKTsKKyAgICAgICAgICAgIHZvaWQqIG5leHRJc2xhbmQgPSBhbGxvY2F0b3ItPmFs
bG9jYXRlSXNsYW5kKCk7CisgICAgICAgICAgICBlbWl0SnVtcFRvKG5leHRJc2xhbmQpOworICAg
ICAgICAgICAganVtcExvY2F0aW9uID0gYml0d2lzZV9jYXN0PHVpbnRwdHJfdD4obmV4dElzbGFu
ZCk7CisgICAgICAgICAgICBjdXJyZW50SXNsYW5kID0gbmV4dElzbGFuZDsKKyAgICAgICAgfQor
CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorI2VuZGlmIC8vIFVTRShKVU1QX0lTTEFO
RFMpCisKK3ByaXZhdGU6CisgICAgY2xhc3MgQWxsb2NhdG9yIDogcHVibGljIE1ldGFBbGxvY2F0
b3IgeworICAgICAgICB1c2luZyBCYXNlID0gTWV0YUFsbG9jYXRvcjsKKyAgICBwdWJsaWM6Cisg
ICAgICAgIEFsbG9jYXRvcihGaXhlZFZNUG9vbEV4ZWN1dGFibGVBbGxvY2F0b3ImIGFsbG9jYXRv
cikKKyAgICAgICAgICAgIDogQmFzZShhbGxvY2F0b3IuZ2V0TG9jaygpLCBqaXRBbGxvY2F0aW9u
R3JhbnVsZSwgcGFnZVNpemUoKSkgLy8gcm91bmQgdXAgYWxsIGFsbG9jYXRpb25zIHRvIDMyIGJ5
dGVzCisgICAgICAgICAgICAsIG1fZml4ZWRBbGxvY2F0b3IoYWxsb2NhdG9yKQorICAgICAgICB7
CisgICAgICAgIH0KKworICAgICAgICBGcmVlU3BhY2VQdHIgYWxsb2NhdGVOZXdTcGFjZShzaXpl
X3QmKSBvdmVycmlkZQorICAgICAgICB7CisgICAgICAgICAgICAvLyBXZSdyZSBvcGVyYXRpbmcg
aW4gYSBmaXhlZCBwb29sLCBzbyBuZXcgYWxsb2NhdGlvbiBpcyBhbHdheXMgcHJvaGliaXRlZC4K
KyAgICAgICAgICAgIHJldHVybiBudWxscHRyOworICAgICAgICB9CisKKyAgICAgICAgdm9pZCBu
b3RpZnlOZWVkUGFnZSh2b2lkKiBwYWdlLCBzaXplX3QgY291bnQpIG92ZXJyaWRlCisgICAgICAg
IHsKKyAgICAgICAgICAgIG1fZml4ZWRBbGxvY2F0b3IubV9yZXNlcnZhdGlvbi5jb21taXQocGFn
ZSwgcGFnZVNpemUoKSAqIGNvdW50KTsKKyAgICAgICAgfQorCisgICAgICAgIHZvaWQgbm90aWZ5
UGFnZUlzRnJlZSh2b2lkKiBwYWdlLCBzaXplX3QgY291bnQpIG92ZXJyaWRlCisgICAgICAgIHsK
KyAgICAgICAgICAgIG1fZml4ZWRBbGxvY2F0b3IubV9yZXNlcnZhdGlvbi5kZWNvbW1pdChwYWdl
LCBwYWdlU2l6ZSgpICogY291bnQpOworICAgICAgICB9CisKKyAgICAgICAgRml4ZWRWTVBvb2xF
eGVjdXRhYmxlQWxsb2NhdG9yJiBtX2ZpeGVkQWxsb2NhdG9yOworICAgIH07CisKKyNpZiBVU0Uo
SlVNUF9JU0xBTkRTKQorICAgIGNsYXNzIFJlZ2lvbkFsbG9jYXRvciBmaW5hbCA6IHB1YmxpYyBB
bGxvY2F0b3IgeworICAgICAgICB1c2luZyBCYXNlID0gQWxsb2NhdG9yOworICAgIHB1YmxpYzoK
KyAgICAgICAgUmVnaW9uQWxsb2NhdG9yKEZpeGVkVk1Qb29sRXhlY3V0YWJsZUFsbG9jYXRvciYg
YWxsb2NhdG9yKQorICAgICAgICAgICAgOiBCYXNlKGFsbG9jYXRvcikKKyAgICAgICAgeworICAg
ICAgICB9CisKKyAgICAgICAgLy8gIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LQorICAgICAgICAvLyAgfCBqaXQgYWxsb2NhdGlvbnMgLS0+ICAgPC0tIGlzbGFuZHMgfAorICAg
ICAgICAvLyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgICAgICAg
IHVpbnRwdHJfdCBzdGFydCgpIHsgcmV0dXJuIGJpdHdpc2VfY2FzdDx1aW50cHRyX3Q+KHVudGFn
Q29kZVB0cjxFeGVjdXRhYmxlTWVtb3J5UHRyVGFnPihtX3N0YXJ0KSk7IH0KKyAgICAgICAgdWlu
dHB0cl90IGVuZCgpIHsgcmV0dXJuIGJpdHdpc2VfY2FzdDx1aW50cHRyX3Q+KHVudGFnQ29kZVB0
cjxFeGVjdXRhYmxlTWVtb3J5UHRyVGFnPihtX2VuZCkpOyB9CisKKyAgICAgICAgdWludHB0cl90
IGlzbGFuZEJlZ2luKCkKKyAgICAgICAgeworICAgICAgICAgICAgLy8gW3N0YXJ0LCBhbGxvY2F0
b3JFbmQpCisgICAgICAgICAgICByZXR1cm4gZW5kKCkgLSBpc2xhbmRSZWdpb25TaXplOworICAg
ICAgICB9CisKKyAgICAgICAgdWludHB0cl90IGFsbG9jYXRvclNpemUoKQorICAgICAgICB7Cisg
ICAgICAgICAgICByZXR1cm4gaXNsYW5kQmVnaW4oKSAtIHN0YXJ0KCk7CisgICAgICAgIH0KKwor
ICAgICAgICBzaXplX3QgaXNsYW5kc1BlclBhZ2UoKQorICAgICAgICB7CisgICAgICAgICAgICBz
aXplX3QgaXNsYW5kc1BlclBhZ2UgPSBwYWdlU2l6ZSgpIC8gaXNsYW5kU2l6ZUluQnl0ZXM7Cisg
ICAgICAgICAgICBBU1NFUlQoaXNsYW5kc1BlclBhZ2UgKiBpc2xhbmRTaXplSW5CeXRlcyA9PSBw
YWdlU2l6ZSgpKTsKKyAgICAgICAgICAgIEFTU0VSVChpc1Bvd2VyT2ZUd28oaXNsYW5kc1BlclBh
Z2UpKTsKKyAgICAgICAgICAgIHJldHVybiBpc2xhbmRzUGVyUGFnZTsKKyAgICAgICAgfQorCisg
ICAgICAgIHZvaWQgcmVsZWFzZShjb25zdCBMb2NrSG9sZGVyJiBsb2NrZXIsIE1ldGFBbGxvY2F0
b3JIYW5kbGUmIGhhbmRsZSkgZmluYWwKKyAgICAgICAgeworICAgICAgICAgICAgbV9maXhlZEFs
bG9jYXRvci5oYW5kbGVXaWxsQmVSZWxlYXNlZChsb2NrZXIsIGhhbmRsZSk7CisgICAgICAgICAg
ICBCYXNlOjpyZWxlYXNlKGxvY2tlciwgaGFuZGxlKTsKKyAgICAgICAgfQorCisgICAgICAgIHZv
aWQqIGFsbG9jYXRlSXNsYW5kKCkKKyAgICAgICAgeworICAgICAgICAgICAgdWludHB0cl90IGVu
ZCA9IHRoaXMtPmVuZCgpOworICAgICAgICAgICAgYXV0byBmaW5kUmVzdWx0ID0gWyZdICgpIC0+
IHZvaWQqIHsKKyAgICAgICAgICAgICAgICBzaXplX3QgcmVzdWx0Qml0ID0gaXNsYW5kQml0cy5m
aW5kQ2xlYXJCaXQoMCk7CisgICAgICAgICAgICAgICAgaWYgKHJlc3VsdEJpdCA9PSBpc2xhbmRC
aXRzLnNpemUoKSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAg
ICAgICAgICAgaXNsYW5kQml0c1tyZXN1bHRCaXRdID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICB1
aW50cHRyX3QgcmVzdWx0ID0gZW5kIC0gKChyZXN1bHRCaXQgKyAxKSAqIGlzbGFuZFNpemVJbkJ5
dGVzKTsgCisgICAgICAgICAgICAgICAgcmV0dXJuIGJpdHdpc2VfY2FzdDx2b2lkKj4ocmVzdWx0
KTsKKyAgICAgICAgICAgIH07CisKKyAgICAgICAgICAgIGlmICh2b2lkKiByZXN1bHQgPSBmaW5k
UmVzdWx0KCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKKworICAgICAgICAgICAg
aXNsYW5kQml0cy5yZXNpemUoaXNsYW5kQml0cy5zaXplKCkgKyBpc2xhbmRzUGVyUGFnZSgpKTsK
KyAgICAgICAgICAgIGlmIChVTkxJS0VMWShpc2xhbmRCaXRzLnNpemUoKSA+IG1heElzbGFuZHNQ
ZXJSZWdpb24pKQorICAgICAgICAgICAgICAgIGNyYXNoT25KdW1wSXNsYW5kRXhoYXVzdGlvbigp
OworCisgICAgICAgICAgICB1aW50cHRyX3QgcGFnZUJlZ2luID0gZW5kIC0gKGlzbGFuZEJpdHMu
c2l6ZSgpICogaXNsYW5kU2l6ZUluQnl0ZXMpOyAvLyBbaXNsYW5kQmVnaW4sIGVuZCkKKyAgICAg
ICAgICAgIG1fZml4ZWRBbGxvY2F0b3IubV9yZXNlcnZhdGlvbi5jb21taXQoYml0d2lzZV9jYXN0
PHZvaWQqPihwYWdlQmVnaW4pLCBwYWdlU2l6ZSgpKTsKKworICAgICAgICAgICAgdm9pZCogcmVz
dWx0ID0gZmluZFJlc3VsdCgpOworICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQocmVzdWx0KTsK
KyAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgICAgIH0KKworICAgICAgICBORVZFUl9J
TkxJTkUgTk9fUkVUVVJOX0RVRV9UT19DUkFTSCB2b2lkIGNyYXNoT25KdW1wSXNsYW5kRXhoYXVz
dGlvbigpCisgICAgICAgIHsKKyAgICAgICAgICAgIENSQVNIKCk7CisgICAgICAgIH0KKworICAg
ICAgICBPcHRpb25hbDxzaXplX3Q+IGlzbGFuZEJpdCh1aW50cHRyX3QgaXNsYW5kKQorICAgICAg
ICB7CisgICAgICAgICAgICB1aW50cHRyX3QgZW5kID0gdGhpcy0+ZW5kKCk7CisgICAgICAgICAg
ICBpZiAoaXNsYW5kQmVnaW4oKSA8PSBpc2xhbmQgJiYgaXNsYW5kIDwgZW5kKQorICAgICAgICAg
ICAgICAgIHJldHVybiAoKGVuZCAtIGlzbGFuZCkgLyBpc2xhbmRTaXplSW5CeXRlcykgLSAxOwor
ICAgICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKyAgICAgICAgfQorCisgICAgICAgIHZv
aWQgZnJlZUlzbGFuZCh1aW50cHRyX3QgaXNsYW5kKQorICAgICAgICB7CisgICAgICAgICAgICBS
RUxFQVNFX0FTU0VSVChpc2xhbmRCZWdpbigpIDw9IGlzbGFuZCAmJiBpc2xhbmQgPCBlbmQoKSk7
CisgICAgICAgICAgICBzaXplX3QgYml0ID0gaXNsYW5kQml0KGlzbGFuZCkudmFsdWUoKTsKKyAg
ICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKCEhaXNsYW5kQml0c1tiaXRdKTsKKyAgICAgICAgICAg
IGlzbGFuZEJpdHNbYml0XSA9IGZhbHNlOworICAgICAgICB9CisKKyAgICAgICAgYm9vbCBpc0lu
QWxsb2NhdGVkTWVtb3J5KGNvbnN0IEFic3RyYWN0TG9ja2VyJiBsb2NrZXIsIHZvaWQqIGFkZHJl
c3MpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChCYXNlOjppc0luQWxsb2NhdGVkTWVtb3J5
KGxvY2tlciwgYWRkcmVzcykpCisgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAg
ICAgICBpZiAoT3B0aW9uYWw8c2l6ZV90PiBiaXQgPSBpc2xhbmRCaXQoYml0d2lzZV9jYXN0PHVp
bnRwdHJfdD4oYWRkcmVzcykpKSB7CisgICAgICAgICAgICAgICAgaWYgKGJpdC52YWx1ZSgpIDwg
aXNsYW5kQml0cy5zaXplKCkpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiAhIWlzbGFuZEJp
dHNbYml0LnZhbHVlKCldOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgICAgICB9CisKKyAgICAgICAgLy8gUmFuZ2U6IFtzdGFydCwgZW5kKQorICAgICAgICB2
b2lkKiBtX3N0YXJ0OworICAgICAgICB2b2lkKiBtX2VuZDsKKyAgICAgICAgRmFzdEJpdFZlY3Rv
ciBpc2xhbmRCaXRzOworICAgIH07CisjZW5kaWYgLy8gVVNFKEpVTVBfSVNMQU5EUykKKworICAg
IHRlbXBsYXRlIDx0eXBlbmFtZSBGdW5jdGlvbj4KKyAgICB2b2lkIGZvckVhY2hBbGxvY2F0b3Io
RnVuY3Rpb24gZnVuY3Rpb24pCisgICAgeworI2lmIFVTRShKVU1QX0lTTEFORFMpCisgICAgICAg
IGZvciAoUmVnaW9uQWxsb2NhdG9yJiBhbGxvY2F0b3IgOiBtX2FsbG9jYXRvcnMpIHsKKyAgICAg
ICAgICAgIHVzaW5nIEZ1bmN0aW9uUmVzdWx0VHlwZSA9IGRlY2x0eXBlKGZ1bmN0aW9uKGFsbG9j
YXRvcikpOworICAgICAgICAgICAgaWYgY29uc3RleHByIChzdGQ6OmlzX3NhbWU8SXRlcmF0aW9u
U3RhdHVzLCBGdW5jdGlvblJlc3VsdFR5cGU+Ojp2YWx1ZSkgeworICAgICAgICAgICAgICAgIGlm
IChmdW5jdGlvbihhbGxvY2F0b3IpID09IEl0ZXJhdGlvblN0YXR1czo6RG9uZSkKKyAgICAgICAg
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAg
IHN0YXRpY19hc3NlcnQoc3RkOjppc19zYW1lPHZvaWQsIEZ1bmN0aW9uUmVzdWx0VHlwZT46OnZh
bHVlKTsKKyAgICAgICAgICAgICAgICBmdW5jdGlvbihhbGxvY2F0b3IpOworICAgICAgICAgICAg
fQorICAgICAgICB9CisjZWxzZQorICAgICAgICBmdW5jdGlvbihtX2FsbG9jYXRvcik7CisjZW5k
aWYgLy8gVVNFKEpVTVBfSVNMQU5EUykKKyAgICB9CisKKyNpZiBVU0UoSlVNUF9JU0xBTkRTKQor
ICAgIGNsYXNzIElzbGFuZHMgOiBwdWJsaWMgUmVkQmxhY2tUcmVlPElzbGFuZHMsIHZvaWQqPjo6
Tm9kZSB7CisgICAgICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworICAgIHB1YmxpYzoKKyAg
ICAgICAgdm9pZCoga2V5KCkgeyByZXR1cm4gcm9vdEp1bXBMb2NhdGlvbi5kYXRhTG9jYXRpb24o
KTsgfQorICAgICAgICBDb2RlTG9jYXRpb25MYWJlbDxFeGVjdXRhYmxlTWVtb3J5UHRyVGFnPiBy
b290SnVtcExvY2F0aW9uOworICAgICAgICBWZWN0b3I8Q29kZUxvY2F0aW9uTGFiZWw8RXhlY3V0
YWJsZU1lbW9yeVB0clRhZz4+IGp1bXBJc2xhbmRzOworICAgIH07CisjZW5kaWYgLy8gVVNFKEpV
TVBfSVNMQU5EUykKKworICAgIExvY2sgbV9sb2NrOwogICAgIFBhZ2VSZXNlcnZhdGlvbiBtX3Jl
c2VydmF0aW9uOworI2lmIFVTRShKVU1QX0lTTEFORFMpCisgICAgc3RkOjphcnJheTxSZWdpb25B
bGxvY2F0b3IsIG51bWJlck9mUmVnaW9ucz4gbV9hbGxvY2F0b3JzOworICAgIFJlZEJsYWNrVHJl
ZTxJc2xhbmRzLCB2b2lkKj4gaXNsYW5kc0Zvckp1bXBMb2NhdGlvbjsKKyNlbHNlCisgICAgQWxs
b2NhdG9yIG1fYWxsb2NhdG9yOworI2VuZGlmIC8vIFVTRShKVU1QX0lTTEFORFMpCiB9OwogCi1G
aXhlZFZNUG9vbEV4ZWN1dGFibGVBbGxvY2F0b3I6On5GaXhlZFZNUG9vbEV4ZWN1dGFibGVBbGxv
Y2F0b3IoKQotewotICAgIG1fcmVzZXJ2YXRpb24uZGVhbGxvY2F0ZSgpOwotfQotCiAvLyBLZWVw
IHRoaXMgcG9pbnRlciBpbiBhIG11dGFibGUgZ2xvYmFsIHZhcmlhYmxlIHRvIGhlbHAgTGVha3Mg
ZmluZCBpdC4KIC8vIEJ1dCB3ZSBkbyBub3QgdXNlIHRoaXMgcG9pbnRlci4KIHN0YXRpYyBGaXhl
ZFZNUG9vbEV4ZWN1dGFibGVBbGxvY2F0b3IqIGdsb2JhbEZpeGVkVk1Qb29sRXhlY3V0YWJsZUFs
bG9jYXRvclRvV29ya0Fyb3VuZExlYWtzID0gbnVsbHB0cjsKQEAgLTQxNyw3ICs4MjUsNiBAQCB2
b2lkIEV4ZWN1dGFibGVBbGxvY2F0b3I6OmluaXRpYWxpemVVbmRlCiAgICAgUkVMRUFTRV9BU1NF
UlQoIWdfanNjQ29uZmlnLmZpeGVkVk1Qb29sRXhlY3V0YWJsZUFsbG9jYXRvcik7CiAgICAgZ19q
c2NDb25maWcuZml4ZWRWTVBvb2xFeGVjdXRhYmxlQWxsb2NhdG9yID0gbmV3IEZpeGVkVk1Qb29s
RXhlY3V0YWJsZUFsbG9jYXRvcigpOwogICAgIGdsb2JhbEZpeGVkVk1Qb29sRXhlY3V0YWJsZUFs
bG9jYXRvclRvV29ya0Fyb3VuZExlYWtzID0gZ19qc2NDb25maWcuZml4ZWRWTVBvb2xFeGVjdXRh
YmxlQWxsb2NhdG9yOwotICAgIENvZGVQcm9maWxpbmc6Om5vdGlmeUFsbG9jYXRvcihnX2pzY0Nv
bmZpZy5maXhlZFZNUG9vbEV4ZWN1dGFibGVBbGxvY2F0b3IpOwogfQogCiBib29sIEV4ZWN1dGFi
bGVBbGxvY2F0b3I6OmlzVmFsaWQoKSBjb25zdApAQCAtNDI1LDcgKzgzMiw3IEBAIGJvb2wgRXhl
Y3V0YWJsZUFsbG9jYXRvcjo6aXNWYWxpZCgpIGNvbnMKICAgICBGaXhlZFZNUG9vbEV4ZWN1dGFi
bGVBbGxvY2F0b3IqIGFsbG9jYXRvciA9IGdfanNjQ29uZmlnLmZpeGVkVk1Qb29sRXhlY3V0YWJs
ZUFsbG9jYXRvcjsKICAgICBpZiAoIWFsbG9jYXRvcikKICAgICAgICAgcmV0dXJuIEJhc2U6Omlz
VmFsaWQoKTsKLSAgICByZXR1cm4gISFhbGxvY2F0b3ItPmJ5dGVzUmVzZXJ2ZWQoKTsKKyAgICBy
ZXR1cm4gYWxsb2NhdG9yLT5pc1ZhbGlkKCk7CiB9CiAKIGJvb2wgRXhlY3V0YWJsZUFsbG9jYXRv
cjo6dW5kZXJNZW1vcnlQcmVzc3VyZSgpCkBAIC00NTYsMTEgKzg2MywxMSBAQCBkb3VibGUgRXhl
Y3V0YWJsZUFsbG9jYXRvcjo6bWVtb3J5UHJlc3N1CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAot
UmVmUHRyPEV4ZWN1dGFibGVNZW1vcnlIYW5kbGU+IEV4ZWN1dGFibGVBbGxvY2F0b3I6OmFsbG9j
YXRlKHNpemVfdCBzaXplSW5CeXRlcywgdm9pZCogb3duZXJVSUQsIEpJVENvbXBpbGF0aW9uRWZm
b3J0IGVmZm9ydCkKK1JlZlB0cjxFeGVjdXRhYmxlTWVtb3J5SGFuZGxlPiBFeGVjdXRhYmxlQWxs
b2NhdG9yOjphbGxvY2F0ZShzaXplX3Qgc2l6ZUluQnl0ZXMsIEpJVENvbXBpbGF0aW9uRWZmb3J0
IGVmZm9ydCkKIHsKICAgICBGaXhlZFZNUG9vbEV4ZWN1dGFibGVBbGxvY2F0b3IqIGFsbG9jYXRv
ciA9IGdfanNjQ29uZmlnLmZpeGVkVk1Qb29sRXhlY3V0YWJsZUFsbG9jYXRvcjsKICAgICBpZiAo
IWFsbG9jYXRvcikKLSAgICAgICAgcmV0dXJuIEJhc2U6OmFsbG9jYXRlKHNpemVJbkJ5dGVzLCBv
d25lclVJRCwgZWZmb3J0KTsKKyAgICAgICAgcmV0dXJuIEJhc2U6OmFsbG9jYXRlKHNpemVJbkJ5
dGVzLCBlZmZvcnQpOwogICAgIGlmIChPcHRpb25zOjpsb2dFeGVjdXRhYmxlQWxsb2NhdGlvbigp
KSB7CiAgICAgICAgIE1ldGFBbGxvY2F0b3I6OlN0YXRpc3RpY3Mgc3RhdHMgPSBhbGxvY2F0b3It
PmN1cnJlbnRTdGF0aXN0aWNzKCk7CiAgICAgICAgIGRhdGFMb2coIkFsbG9jYXRpbmcgIiwgc2l6
ZUluQnl0ZXMsICIgYnl0ZXMgb2YgZXhlY3V0YWJsZSBtZW1vcnkgd2l0aCAiLCBzdGF0cy5ieXRl
c0FsbG9jYXRlZCwgIiBieXRlcyBhbGxvY2F0ZWQsICIsIHN0YXRzLmJ5dGVzUmVzZXJ2ZWQsICIg
Ynl0ZXMgcmVzZXJ2ZWQsIGFuZCAiLCBzdGF0cy5ieXRlc0NvbW1pdHRlZCwgIiBjb21taXR0ZWQu
XG4iKTsKQEAgLTQ4Nyw3ICs4OTQsNyBAQCBSZWZQdHI8RXhlY3V0YWJsZU1lbW9yeUhhbmRsZT4g
RXhlY3V0YWJsCiAgICAgICAgIH0KICAgICB9CiAKLSAgICBSZWZQdHI8RXhlY3V0YWJsZU1lbW9y
eUhhbmRsZT4gcmVzdWx0ID0gYWxsb2NhdG9yLT5hbGxvY2F0ZShzaXplSW5CeXRlcywgb3duZXJV
SUQpOworICAgIFJlZlB0cjxFeGVjdXRhYmxlTWVtb3J5SGFuZGxlPiByZXN1bHQgPSBhbGxvY2F0
b3ItPmFsbG9jYXRlKHNpemVJbkJ5dGVzKTsKICAgICBpZiAoIXJlc3VsdCkgewogICAgICAgICBp
ZiAoZWZmb3J0ICE9IEpJVENvbXBpbGF0aW9uQ2FuRmFpbCkgewogICAgICAgICAgICAgZGF0YUxv
ZygiUmFuIG91dCBvZiBleGVjdXRhYmxlIG1lbW9yeSB3aGlsZSBhbGxvY2F0aW5nICIsIHNpemVJ
bkJ5dGVzLCAiIGJ5dGVzLlxuIik7CkBAIC01MzksNiArOTQ2LDI2IEBAIHZvaWQgRXhlY3V0YWJs
ZUFsbG9jYXRvcjo6ZHVtcFByb2ZpbGUoKQogfQogI2VuZGlmCiAKKyNpZiBVU0UoSlVNUF9JU0xB
TkRTKQordm9pZCogRXhlY3V0YWJsZUFsbG9jYXRvcjo6Z2V0SnVtcElzbGFuZFRvKHZvaWQqIGZy
b20sIHZvaWQqIG5ld0Rlc3RpbmF0aW9uKQoreworICAgIEZpeGVkVk1Qb29sRXhlY3V0YWJsZUFs
bG9jYXRvciogYWxsb2NhdG9yID0gZ19qc2NDb25maWcuZml4ZWRWTVBvb2xFeGVjdXRhYmxlQWxs
b2NhdG9yOworICAgIGlmICghYWxsb2NhdG9yKQorICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1Rf
UkVBQ0hFRCgpOworCisgICAgcmV0dXJuIGFsbG9jYXRvci0+bWFrZUlzbGFuZChiaXR3aXNlX2Nh
c3Q8dWludHB0cl90Pihmcm9tKSwgYml0d2lzZV9jYXN0PHVpbnRwdHJfdD4obmV3RGVzdGluYXRp
b24pLCBmYWxzZSk7Cit9CisKK3ZvaWQqIEV4ZWN1dGFibGVBbGxvY2F0b3I6OmdldEp1bXBJc2xh
bmRUb0NvbmN1cnJlbnRseSh2b2lkKiBmcm9tLCB2b2lkKiBuZXdEZXN0aW5hdGlvbikKK3sKKyAg
ICBGaXhlZFZNUG9vbEV4ZWN1dGFibGVBbGxvY2F0b3IqIGFsbG9jYXRvciA9IGdfanNjQ29uZmln
LmZpeGVkVk1Qb29sRXhlY3V0YWJsZUFsbG9jYXRvcjsKKyAgICBpZiAoIWFsbG9jYXRvcikKKyAg
ICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKworICAgIHJldHVybiBhbGxvY2F0
b3ItPm1ha2VJc2xhbmQoYml0d2lzZV9jYXN0PHVpbnRwdHJfdD4oZnJvbSksIGJpdHdpc2VfY2Fz
dDx1aW50cHRyX3Q+KG5ld0Rlc3RpbmF0aW9uKSwgdHJ1ZSk7Cit9CisjZW5kaWYKKwogdm9pZCog
c3RhcnRPZkZpeGVkRXhlY3V0YWJsZU1lbW9yeVBvb2xJbXBsKCkKIHsKICAgICBGaXhlZFZNUG9v
bEV4ZWN1dGFibGVBbGxvY2F0b3IqIGFsbG9jYXRvciA9IGdfanNjQ29uZmlnLmZpeGVkVk1Qb29s
RXhlY3V0YWJsZUFsbG9jYXRvcjsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvRXhl
Y3V0YWJsZUFsbG9jYXRvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvRXhlY3V0YWJsZUFsbG9jYXRvci5oCShyZXZpc2lvbiAyNTgzNTApCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L0V4ZWN1dGFibGVBbGxvY2F0b3IuaAkod29ya2luZyBjb3B5KQpAQCAt
NzEsNyArNzEsNyBAQCBwdWJsaWM6CiAKICAgICBzdGF0aWMgdm9pZCBkdW1wUHJvZmlsZSgpIHsg
fQogCi0gICAgUmVmUHRyPEV4ZWN1dGFibGVNZW1vcnlIYW5kbGU+IGFsbG9jYXRlKHNpemVfdCwg
dm9pZCosIEpJVENvbXBpbGF0aW9uRWZmb3J0KSB7IHJldHVybiBudWxscHRyOyB9CisgICAgUmVm
UHRyPEV4ZWN1dGFibGVNZW1vcnlIYW5kbGU+IGFsbG9jYXRlKHNpemVfdCwgSklUQ29tcGlsYXRp
b25FZmZvcnQpIHsgcmV0dXJuIG51bGxwdHI7IH0KIAogICAgIHN0YXRpYyB2b2lkIHNldEpJVEVu
YWJsZWQoYm9vbCkgeyB9OwogICAgIApAQCAtMTc2LDcgKzE3Niw3IEBAIHB1YmxpYzoKICAgICAK
ICAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgdm9pZCBzZXRKSVRFbmFibGVkKGJvb2wpOwog
Ci0gICAgUmVmUHRyPEV4ZWN1dGFibGVNZW1vcnlIYW5kbGU+IGFsbG9jYXRlKHNpemVfdCBzaXpl
SW5CeXRlcywgdm9pZCogb3duZXJVSUQsIEpJVENvbXBpbGF0aW9uRWZmb3J0KTsKKyAgICBSZWZQ
dHI8RXhlY3V0YWJsZU1lbW9yeUhhbmRsZT4gYWxsb2NhdGUoc2l6ZV90IHNpemVJbkJ5dGVzLCBK
SVRDb21waWxhdGlvbkVmZm9ydCk7CiAKICAgICBib29sIGlzVmFsaWRFeGVjdXRhYmxlTWVtb3J5
KGNvbnN0IEFic3RyYWN0TG9ja2VyJiwgdm9pZCogYWRkcmVzcyk7CiAKQEAgLTE4NCw2ICsxODQs
MTEgQEAgcHVibGljOgogCiAgICAgTG9jayYgZ2V0TG9jaygpIGNvbnN0OwogCisjaWYgVVNFKEpV
TVBfSVNMQU5EUykKKyAgICB2b2lkKiBnZXRKdW1wSXNsYW5kVG8odm9pZCogZnJvbSwgdm9pZCog
bmV3RGVzdGluYXRpb24pOworICAgIHZvaWQqIGdldEp1bXBJc2xhbmRUb0NvbmN1cnJlbnRseSh2
b2lkKiBmcm9tLCB2b2lkKiBuZXdEZXN0aW5hdGlvbik7CisjZW5kaWYKKwogcHJpdmF0ZToKICAg
ICBFeGVjdXRhYmxlQWxsb2NhdG9yKCkgPSBkZWZhdWx0OwogICAgIH5FeGVjdXRhYmxlQWxsb2Nh
dG9yKCkgPSBkZWZhdWx0OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29t
bW9uU2xvd1BhdGhzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9Db21tb25TbG93UGF0aHMuY3BwCShyZXZpc2lvbiAyNTgzNTApCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9Db21tb25TbG93UGF0aHMuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0zMiw3ICszMiw2IEBACiAjaW5jbHVkZSAiQnl0ZWNvZGVTdHJ1Y3RzLmgiCiAjaW5jbHVkZSAi
Q2FsbEZyYW1lLmgiCiAjaW5jbHVkZSAiQ2xvbmVkQXJndW1lbnRzLmgiCi0jaW5jbHVkZSAiQ29k
ZVByb2ZpbGluZy5oIgogI2luY2x1ZGUgIkRlZmluZVByb3BlcnR5QXR0cmlidXRlcy5oIgogI2lu
Y2x1ZGUgIkRpcmVjdEFyZ3VtZW50cy5oIgogI2luY2x1ZGUgIkVycm9yLmgiCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db21wbGV0aW9uLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db21wbGV0aW9uLmNwcAkocmV2aXNpb24gMjU4
MzUwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29tcGxldGlvbi5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTI3LDcgKzI3LDYgQEAKICNpbmNsdWRlICJDYWxsRnJhbWUuaCIKICNp
bmNsdWRlICJDYXRjaFNjb3BlLmgiCiAjaW5jbHVkZSAiQ29kZUNhY2hlLmgiCi0jaW5jbHVkZSAi
Q29kZVByb2ZpbGluZy5oIgogI2luY2x1ZGUgIkV4Y2VwdGlvbi5oIgogI2luY2x1ZGUgIklkZW50
aWZpZXJJbmxpbmVzLmgiCiAjaW5jbHVkZSAiSW50ZXJwcmV0ZXIuaCIKQEAgLTEzOCw4ICsxMzcs
NiBAQCBKU1ZhbHVlIGV2YWx1YXRlKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPCiAgICAgUkVMRUFT
RV9BU1NFUlQodm0uYXRvbVN0cmluZ1RhYmxlKCkgPT0gVGhyZWFkOjpjdXJyZW50KCkuYXRvbVN0
cmluZ1RhYmxlKCkpOwogICAgIFJFTEVBU0VfQVNTRVJUKCF2bS5pc0NvbGxlY3RvckJ1c3lPbkN1
cnJlbnRUaHJlYWQoKSk7CiAKLSAgICBDb2RlUHJvZmlsaW5nIHByb2ZpbGUoc291cmNlKTsKLQog
ICAgIGlmICghdGhpc1ZhbHVlIHx8IHRoaXNWYWx1ZS5pc1VuZGVmaW5lZE9yTnVsbCgpKQogICAg
ICAgICB0aGlzVmFsdWUgPSBnbG9iYWxPYmplY3Q7CiAgICAgSlNPYmplY3QqIHRoaXNPYmogPSBq
c0Nhc3Q8SlNPYmplY3QqPih0aGlzVmFsdWUudG9UaGlzKGdsb2JhbE9iamVjdCwgTm90U3RyaWN0
TW9kZSkpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNNb2R1bGVMb2Fk
ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTW9k
dWxlTG9hZGVyLmNwcAkocmV2aXNpb24gMjU4MzUwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSlNNb2R1bGVMb2FkZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOSw3ICsyOSw2
IEBACiAKICNpbmNsdWRlICJCdWlsdGluTmFtZXMuaCIKICNpbmNsdWRlICJDYXRjaFNjb3BlLmgi
Ci0jaW5jbHVkZSAiQ29kZVByb2ZpbGluZy5oIgogI2luY2x1ZGUgIkVycm9yLmgiCiAjaW5jbHVk
ZSAiRXhjZXB0aW9uLmgiCiAjaW5jbHVkZSAiSlNDSW5saW5lcy5oIgpAQCAtNDAwLDggKzM5OSw2
IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgbW9kdWxlTG9hZGUKICAgICAgICAgcmV0
dXJuIEpTVmFsdWU6OmVuY29kZShKU1dlYkFzc2VtYmx5OjppbnN0YW50aWF0ZShnbG9iYWxPYmpl
Y3QsIHByb21pc2UsIG1vZHVsZUtleSwganNTb3VyY2VDb2RlKSk7CiAjZW5kaWYKIAotICAgIENv
ZGVQcm9maWxpbmcgcHJvZmlsZShzb3VyY2VDb2RlKTsKLQogICAgIFBhcnNlckVycm9yIGVycm9y
OwogICAgIHN0ZDo6dW5pcXVlX3B0cjxNb2R1bGVQcm9ncmFtTm9kZT4gbW9kdWxlUHJvZ3JhbU5v
ZGUgPSBwYXJzZTxNb2R1bGVQcm9ncmFtTm9kZT4oCiAgICAgICAgIHZtLCBzb3VyY2VDb2RlLCBJ
ZGVudGlmaWVyKCksIEpTUGFyc2VyQnVpbHRpbk1vZGU6Ok5vdEJ1aWx0aW4sCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25zTGlzdC5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnNMaXN0LmgJKHJldmlzaW9uIDI1ODM1
MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnNMaXN0LmgJKHdvcmtp
bmcgY29weSkKQEAgLTUwMCw2ICs1MDAsNyBAQCBjb25zdGV4cHIgYm9vbCBlbmFibGVXZWJBc3Nl
bWJseVN0cmVhbWluCiAgICAgdihCb29sLCBmb3JjZU9TUkV4aXRUb0xMSW50LCBmYWxzZSwgTm9y
bWFsLCAiSWYgdHJ1ZSwgd2UgYWx3YXlzIGV4aXQgdG8gdGhlIExMSW50LiBJZiBmYWxzZSwgd2Ug
ZXhpdCB0byB3aGF0ZXZlciBpcyBtb3N0IGNvbnZlbmllbnQuIikgXAogICAgIHYoVW5zaWduZWQs
IGdldEJ5VmFsSUNNYXhOdW1iZXJPZklkZW50aWZpZXJzLCA0LCBOb3JtYWwsICJOdW1iZXIgb2Yg
aWRlbnRpZmllcnMgd2Ugc2VlIGluIHRoZSBMTEludCB0aGF0IGNvdWxkIGNhdXNlIHVzIHRvIGJh
aWwgb24gZ2VuZXJhdGluZyBhbiBJQyBmb3IgZ2V0X2J5X3ZhbC4iKSBcCiAgICAgdihCb29sLCB1
c2VQdWJsaWNDbGFzc0ZpZWxkcywgdHJ1ZSwgTm9ybWFsLCAiSWYgdHJ1ZSwgdGhlIHBhcnNlciB3
aWxsIHVuZGVyc3RhbmQgcHVibGljIGRhdGEgZmllbGRzIGluc2lkZSBjbGFzc2VzLiIpIFwKKyAg
ICB2KEJvb2wsIHVzZVJhbmRvbWl6aW5nRXhlY3V0YWJsZUlzbGFuZEFsbG9jYXRpb24sIGZhbHNl
LCBOb3JtYWwsICJGb3IgdGhlIGFybTY0IEV4ZWN1dGFibGVBbGxvY2F0b3IsIGlmIHRydWUsIHNl
bGVjdCB3aGljaCByZWdpb24gdG8gdXNlIHJhbmRvbWx5LiBUaGlzIGlzIHVzZWZ1bCBmb3IgdGVz
dGluZyB0aGF0IGp1bXAgaXNsYW5kcyB3b3JrLiIpIFwKIAogZW51bSBPcHRpb25FcXVpdmFsZW5j
ZSB7CiAgICAgU2FtZU9wdGlvbiwKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90b29scy9D
b2RlUHJvZmlsZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3Rvb2xz
L0NvZGVQcm9maWxlLmNwcAkocmV2aXNpb24gMjU4MzUwKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL3Rvb2xzL0NvZGVQcm9maWxlLmNwcAkobm9uZXhpc3RlbnQpCkBAIC0xLDE3MiArMCwwIEBA
Ci0vKgotICogQ29weXJpZ2h0IChDKSAyMDEyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQot
ICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0KLSNpbmNsdWRl
ICJjb25maWcuaCIKLSNpbmNsdWRlICJDb2RlUHJvZmlsZS5oIgotCi0jaW5jbHVkZSAiQ29kZUJs
b2NrLmgiCi0jaW5jbHVkZSAiQ29kZVByb2ZpbGluZy5oIgotI2luY2x1ZGUgIkxpbmtCdWZmZXIu
aCIKLSNpbmNsdWRlICJQcm9maWxlVHJlZU5vZGUuaCIKLSNpbmNsdWRlIDx3dGYvU3RhY2tUcmFj
ZS5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgotCi1uYW1lc3BhY2UgSlNDIHsK
LQotLy8gTWFwIGZyb20gQ29kZVR5cGUgZW51bSB0byBhIGNvcnJlc3BvbmRpbmcgbmFtZS4KLXN0
YXRpYyBjb25zdCBjaGFyKiBjb25zdCBzX2NvZGVUeXBlTmFtZXNbQ29kZVByb2ZpbGU6Ok51bWJl
ck9mQ29kZVR5cGVzXSA9IHsKLSAgICAiW1tFbmdpbmVDb2RlXV0iLAotICAgICJbW0dsb2JhbFRo
dW5rXV0iLAotICAgICJbW1JlZ0V4cENvZGVdXSIsCi0gICAgIltbREZHSklUXV0iLAotICAgICJb
W0Jhc2VsaW5lT25seV1dIiwKLSAgICAiW1tCYXNlbGluZVByb2ZpbGVdXSIsCi0gICAgIltbQmFz
ZWxpbmVPU1JdXSIsCi0gICAgIltbRW5naW5lRnJhbWVdXSIKLX07Ci0KLS8vIEhlbHBlciBmdW5j
dGlvbiwgdHJ1bmNhdGUgdHJhY2VzIHRvIHBydW5lIHRoZSBvdXRwdXQgJiBtYWtlIHZlcnkgdmVy
Ym9zZSBtb2RlIGEgbGl0dGxlIG1vcmUgcmVhZGFibGUuCi1zdGF0aWMgYm9vbCB0cnVuY2F0ZVRy
YWNlKGNvbnN0IGNoYXIqIHN5bWJvbE5hbWUpCi17Ci0gICAgcmV0dXJuICFzdHJjbXAoc3ltYm9s
TmFtZSwgIkpTQzo6Qnl0ZWNvZGVHZW5lcmF0b3I6OmdlbmVyYXRlKCkiKQotICAgICAgICB8fCAh
c3RyY21wKHN5bWJvbE5hbWUsICJKU0M6OlBhcnNlcjxKU0M6OkxleGVyPHVuc2lnbmVkIGNoYXI+
Pjo6cGFyc2VJbm5lcigpIikKLSAgICAgICAgfHwgIXN0cmNtcChzeW1ib2xOYW1lLCAiV1RGOjpm
YXN0TWFsbG9jKHVuc2lnbmVkIGxvbmcpIikKLSAgICAgICAgfHwgIXN0cmNtcChzeW1ib2xOYW1l
LCAiV1RGOjpjYWxjdWxhdGVVVENPZmZzZXQoKSIpCi0gICAgICAgIHx8ICFzdHJjbXAoc3ltYm9s
TmFtZSwgIkpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6cGFyc2VDb2RlQmxvY2soKSIpOwotICAg
ICAgICAKLX0KLQotLy8gRWFjaCB0cmFjZSBjb25zaXN0cyBvZiBhIHNlcXVlbmNlIG9mIHplcm8g
b3IgbW9yZSAnRW5naW5lRnJhbWUnIGVudHJpZXMsCi0vLyBmb2xsb3dlZCBieSBhIHNhbXBsZSBp
biBKSVQgY29kZSwgb3Igb25lIG9yIG1vcmUgJ0VuZ2luZUZyYW1lJyBlbnRyaWVzLAotLy8gZm9s
bG93ZWQgYnkgYSAnRW5naW5lQ29kZScgdGVybWluYXRvci4KLXZvaWQgQ29kZVByb2ZpbGU6OnNh
bXBsZSh2b2lkKiBwYywgdm9pZCoqIGZyYW1lUG9pbnRlcikKLXsKLSAgICAvLyBEaXNhbGxvdyB0
cmFjZXMgY29udGFpbmluZyBvbmx5IGEgJ0VuZ2luZUNvZGUnIHRlcm1pbmF0b3IsIHdpdGhvdXQg
YW55ICdFbmdpbmVGcmFtZScgZnJhbWVzLgotICAgIGlmICghZnJhbWVQb2ludGVyKQotICAgICAg
ICByZXR1cm47Ci0KLSAgICB3aGlsZSAoZnJhbWVQb2ludGVyKSB7Ci0gICAgICAgIENvZGVUeXBl
IHR5cGU7Ci0KLSNpZiBFTkFCTEUoSklUKQotICAgICAgICAvLyBEZXRlcm1pbmUgaWYgdGhpcyBz
YW1wbGUgZmVsbCBpbiBKSVQgY29kZSwgYW5kIGlmIHNvLCBmcm9tIHdoaWNoIEpJVCAmIHdoeS4K
LSAgICAgICAgdm9pZCogb3duZXJVSUQgPSBDb2RlUHJvZmlsaW5nOjpnZXRPd25lclVJREZvclBD
KHBjKTsKLQotICAgICAgICBpZiAoIW93bmVyVUlEKQotICAgICAgICAgICAgdHlwZSA9IEVuZ2lu
ZUZyYW1lOwotICAgICAgICBlbHNlIGlmIChvd25lclVJRCA9PSBHTE9CQUxfVEhVTktfSUQpCi0g
ICAgICAgICAgICB0eXBlID0gR2xvYmFsVGh1bms7Ci0gICAgICAgIGVsc2UgaWYgKG93bmVyVUlE
ID09IFJFR0VYUF9DT0RFX0lEKQotICAgICAgICAgICAgdHlwZSA9IFJlZ0V4cENvZGU7Ci0gICAg
ICAgIGVsc2UgewotICAgICAgICAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBzdGF0aWNfY2Fz
dDxDb2RlQmxvY2sqPihvd25lclVJRCk7Ci0gICAgICAgICAgICBpZiAoY29kZUJsb2NrLT5qaXRU
eXBlKCkgPT0gSklUVHlwZTo6REZHSklUKQotICAgICAgICAgICAgICAgIHR5cGUgPSBERkdKSVQ7
Ci0gICAgICAgICAgICBlbHNlIGlmICghY2FuQ29tcGlsZShjb2RlQmxvY2stPmNhcGFiaWxpdHlM
ZXZlbFN0YXRlKCkpKQotICAgICAgICAgICAgICAgIHR5cGUgPSBCYXNlbGluZU9ubHk7Ci0gICAg
ICAgICAgICBlbHNlIGlmIChjb2RlQmxvY2stPnJlcGxhY2VtZW50KCkpCi0gICAgICAgICAgICAg
ICAgdHlwZSA9IEJhc2VsaW5lT1NSOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAg
IHR5cGUgPSBCYXNlbGluZVByb2ZpbGU7Ci0gICAgICAgIH0KLSNlbHNlCi0gICAgICAgIHR5cGUg
PSBFbmdpbmVGcmFtZTsKLSNlbmRpZgotCi0gICAgICAgIC8vIEEgc2FtcGxlIGluIEpJVCBjb2Rl
IHRlcm1pbmF0ZXMgdGhlIHRyYWNlLgotICAgICAgICBtX3NhbXBsZXMuYXBwZW5kKENvZGVSZWNv
cmQocGMsIHR5cGUpKTsKLSAgICAgICAgaWYgKHR5cGUgIT0gRW5naW5lRnJhbWUpCi0gICAgICAg
ICAgICByZXR1cm47Ci0KLSNpZiBPUyhEQVJXSU4pICYmIENQVShYODZfNjQpCi0gICAgICAgIC8v
IFdhbGsgdXAgdGhlIHN0YWNrLgotICAgICAgICBwYyA9IGZyYW1lUG9pbnRlclsxXTsKLSAgICAg
ICAgZnJhbWVQb2ludGVyID0gcmVpbnRlcnByZXRfY2FzdDx2b2lkKio+KCpmcmFtZVBvaW50ZXIp
OwotI2VsaWYgT1MoTElOVVgpICYmIENQVShYODYpCi0gICAgICAgIC8vIERvbid0IHVud2luZCB0
aGUgc3RhY2sgYXMgc29tZSBkZXBlbmRlbnQgdGhpcmQgcGFydHkgbGlicmFyaWVzCi0gICAgICAg
IC8vIG1heSBiZSBjb21waWxlZCB3aXRoIC1mb21pdC1mcmFtZS1wb2ludGVyLgotICAgICAgICBm
cmFtZVBvaW50ZXIgPSAwOwotI2Vsc2UKLSAgICAgICAgLy8gVGhpcyBwbGF0Zm9ybSBpcyBub3Qg
eWV0IHN1cHBvcnRlZCEKLSAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSNl
bmRpZgotICAgIH0KLQotICAgIC8vIElmIHdlIGdldCBoZXJlLCB3ZSB3YWxrZWQgdGhlIGVudGly
ZSBzdGFjayB3aXRob3V0IGZpbmRpbmcgYW55IGZyYW1lcyBvZiBKSVQgY29kZS4KLSAgICBtX3Nh
bXBsZXMuYXBwZW5kKENvZGVSZWNvcmQoMCwgRW5naW5lQ29kZSkpOwotfQotCi12b2lkIENvZGVQ
cm9maWxlOjpyZXBvcnQoKQotewotICAgIGRhdGFMb2dGKCI8Q29kZVByb2ZpbGluZyAlczolZD5c
biIsIG1fZmlsZS5kYXRhKCksIG1fbGluZU51bWJlcik7Ci0KLSAgICAvLyBIb3cgbWFueSBmcmFt
ZXMgb2YgQy1jb2RlIHRvIHByaW50IC0gMCwgaWYgbm90IHZlcmJvc2UsIDEgaWYgdmVyYm9zZSwg
dXAgdG8gMTAyNCBpZiB2ZXJ5IHZlcmJvc2UuCi0gICAgdW5zaWduZWQgcmVjdXJzaW9uTGltaXQg
PSBDb2RlUHJvZmlsaW5nOjpiZVZlcnlWZXJib3NlKCkgPyAxMDI0IDogQ29kZVByb2ZpbGluZzo6
YmVWZXJib3NlKCk7Ci0KLSAgICBQcm9maWxlVHJlZU5vZGUgcHJvZmlsZTsKLQotICAgIC8vIFdh
bGsgdGhyb3VnaCB0aGUgc2FtcGxlIGJ1ZmZlci4KLSAgICBzaXplX3QgdHJhY2UgPSAwOwotICAg
IHdoaWxlICh0cmFjZSA8IG1fc2FtcGxlcy5zaXplKCkpIHsKLQotICAgICAgICAvLyBBbGwgdHJh
Y2VzIGFyZSB6ZXJvIG9yIG1vcmUgJ0VuZ2luZUZyYW1lJ3MsIGZvbGxvd2VkIGJ5IGEgbm9uLSdF
bmdpbmVGcmFtZScuCi0gICAgICAgIC8vIFNjYW4gdG8gZmluZCB0aGUgbGFzdCBzYW1wbGUgaW4g
dGhlIHRyYWNlLgotICAgICAgICBzaXplX3QgbGFzdEluVHJhY2UgPSB0cmFjZTsKLSAgICAgICAg
d2hpbGUgKG1fc2FtcGxlc1tsYXN0SW5UcmFjZV0udHlwZSA9PSBFbmdpbmVGcmFtZSkKLSAgICAg
ICAgICAgICsrbGFzdEluVHJhY2U7Ci0KLSAgICAgICAgLy8gV2UgdXNlIHRoZSBsYXN0IHNhbXBs
ZSB0eXBlIHRvIGxvb2sgdXAgYSBuYW1lICh1c2VkIGFzIGEgYnVja2V0IGluIHRoZSBwcm9maWxl
cikuCi0gICAgICAgIFByb2ZpbGVUcmVlTm9kZSogY2FsbGJhY2tzID0gcHJvZmlsZS5zYW1wbGVD
aGlsZChzX2NvZGVUeXBlTmFtZXNbbV9zYW1wbGVzW2xhc3RJblRyYWNlXS50eXBlXSk7Ci0KLSAg
ICAgICAgLy8gSWYgdGhlcmUgYXJlIGFueSBzYW1wbGVzIGluIEMtY29kZSwgYWRkIHVwIHRvIHJl
Y3Vyc2lvbkxpbWl0IG9mIHRoZW0gaW50byB0aGUgcHJvZmlsZSB0cmVlLgotICAgICAgICBzaXpl
X3QgbGFzdEVuZ2luZUZyYW1lID0gbGFzdEluVHJhY2U7Ci0gICAgICAgIGZvciAodW5zaWduZWQg
Y291bnQgPSAwOyBsYXN0RW5naW5lRnJhbWUgPiB0cmFjZSAmJiBjb3VudCA8IHJlY3Vyc2lvbkxp
bWl0OyArK2NvdW50KSB7Ci0gICAgICAgICAgICAtLWxhc3RFbmdpbmVGcmFtZTsKLSAgICAgICAg
ICAgIEFTU0VSVChtX3NhbXBsZXNbbGFzdEVuZ2luZUZyYW1lXS50eXBlID09IEVuZ2luZUZyYW1l
KTsKLSAgICAgICAgICAgIGNvbnN0IGNoYXIqIG5hbWUgPSAiPHVua25vd24+IjsKLSAgICAgICAg
ICAgIGF1dG8gZGVtYW5nbGVkID0gU3RhY2tUcmFjZTo6ZGVtYW5nbGUobV9zYW1wbGVzW2xhc3RF
bmdpbmVGcmFtZV0ucGMpOwotICAgICAgICAgICAgaWYgKGRlbWFuZ2xlZCkKLSAgICAgICAgICAg
ICAgICBuYW1lID0gZGVtYW5nbGVkLT5kZW1hbmdsZWROYW1lKCkgPyBkZW1hbmdsZWQtPmRlbWFu
Z2xlZE5hbWUoKSA6IGRlbWFuZ2xlZC0+bWFuZ2xlZE5hbWUoKTsKLSAgICAgICAgICAgIGNhbGxi
YWNrcyA9IGNhbGxiYWNrcy0+c2FtcGxlQ2hpbGQobmFtZSk7Ci0gICAgICAgICAgICBpZiAodHJ1
bmNhdGVUcmFjZShuYW1lKSkKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotCi0g
ICAgICAgIC8vIE1vdmUgb24gdG8gdGhlIG5leHQgdHJhY2UuCi0gICAgICAgIHRyYWNlID0gbGFz
dEluVHJhY2UgKyAxOwotICAgICAgICBBU1NFUlQodHJhY2UgPD0gbV9zYW1wbGVzLnNpemUoKSk7
Ci0gICAgfQotCi0gICAgLy8gT3V0cHV0IHRoZSBwcm9maWxlIHRyZWUuCi0gICAgZGF0YUxvZ0Yo
IlRvdGFsIHNhbXBsZXM6ICVsbGRcbiIsIHN0YXRpY19jYXN0PGxvbmcgbG9uZz4ocHJvZmlsZS5j
aGlsZENvdW50KCkpKTsKLSAgICBwcm9maWxlLmR1bXAoKTsKLSAgICAKLSAgICBmb3IgKHNpemVf
dCBpID0gMCA7IGkgPCBtX2NoaWxkcmVuLnNpemUoKTsgKytpKQotICAgICAgICBtX2NoaWxkcmVu
W2ldLT5yZXBvcnQoKTsKLQotICAgIGRhdGFMb2dGKCI8L0NvZGVQcm9maWxpbmcgJXM6JWQ+XG4i
LCBtX2ZpbGUuZGF0YSgpLCBtX2xpbmVOdW1iZXIpOwotfQotCi19CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvdG9vbHMvQ29kZVByb2ZpbGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvdG9vbHMvQ29kZVByb2ZpbGUuaAkocmV2aXNpb24gMjU4MzUwKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL3Rvb2xzL0NvZGVQcm9maWxlLmgJKG5vbmV4aXN0ZW50KQpAQCAt
MSw4OSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEyIEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1l
dDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICog
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICov
Ci0KLSNwcmFnbWEgb25jZQotCi0jaW5jbHVkZSAiU291cmNlQ29kZS5oIgotI2luY2x1ZGUgIlRp
ZXJlZE1NYXBBcnJheS5oIgotI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KLQotbmFtZXNw
YWNlIEpTQyB7Ci0KLWNsYXNzIENvZGVQcm9maWxlIHsKLSAgICBXVEZfTUFLRV9GQVNUX0FMTE9D
QVRFRDsKLXB1YmxpYzoKLSAgICBDb2RlUHJvZmlsZShjb25zdCBTb3VyY2VDb2RlJiBzb3VyY2Us
IENvZGVQcm9maWxlKiBwYXJlbnQpCi0gICAgICAgIDogbV9maWxlKFN0cmluZyhzb3VyY2UucHJv
dmlkZXIoKS0+dXJsKCkpLnV0ZjgoKSkKLSAgICAgICAgLCBtX2xpbmVOdW1iZXIoc291cmNlLmZp
cnN0TGluZSgpLm9uZUJhc2VkSW50KCkpCi0gICAgICAgICwgbV9wYXJlbnQocGFyZW50KQotICAg
IHsKLSAgICAgICAgaWYgKHBhcmVudCkKLSAgICAgICAgICAgIHBhcmVudC0+YWRkQ2hpbGQoc3Rk
Ojp1bmlxdWVfcHRyPENvZGVQcm9maWxlPih0aGlzKSk7Ci0gICAgfQotCi0gICAgdm9pZCBzYW1w
bGUodm9pZCogcGMsIHZvaWQqKiBmcmFtZVBvaW50ZXIpOwotICAgIHZvaWQgcmVwb3J0KCk7Ci0K
LSAgICBDb2RlUHJvZmlsZSogcGFyZW50KCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBtX3BhcmVu
dDsKLSAgICB9Ci0gICAgCi0gICAgdm9pZCBhZGRDaGlsZChzdGQ6OnVuaXF1ZV9wdHI8Q29kZVBy
b2ZpbGU+IGNoaWxkKQotICAgIHsKLSAgICAgICAgbV9jaGlsZHJlbi5hcHBlbmQoV1RGTW92ZShj
aGlsZCkpOwotICAgIH0KLQotICAgIGVudW0gQ29kZVR5cGUgewotICAgICAgICBFbmdpbmVDb2Rl
LAotICAgICAgICBHbG9iYWxUaHVuaywKLSAgICAgICAgUmVnRXhwQ29kZSwKLSAgICAgICAgREZH
SklULAotICAgICAgICBCYXNlbGluZU9ubHksCi0gICAgICAgIEJhc2VsaW5lUHJvZmlsZSwKLSAg
ICAgICAgQmFzZWxpbmVPU1IsCi0gICAgICAgIEVuZ2luZUZyYW1lLAotICAgICAgICBOdW1iZXJP
ZkNvZGVUeXBlcwotICAgIH07Ci0KLXByaXZhdGU6Ci0gICAgc3RydWN0IENvZGVSZWNvcmQgewot
ICAgICAgICBDb2RlUmVjb3JkKHZvaWQqIHBjLCBDb2RlVHlwZSB0eXBlKQotICAgICAgICAgICAg
OiBwYyhwYykKLSAgICAgICAgICAgICwgdHlwZSh0eXBlKQotICAgICAgICB7Ci0gICAgICAgIH0K
LSAgICAgICAgdm9pZCogcGM7Ci0gICAgICAgIENvZGVUeXBlIHR5cGU7Ci0gICAgfTsKLQotICAg
IENTdHJpbmcgbV9maWxlOwotICAgIHVuc2lnbmVkIG1fbGluZU51bWJlcjsKLSAgICBDb2RlUHJv
ZmlsZSogbV9wYXJlbnQ7Ci0gICAgVmVjdG9yPHN0ZDo6dW5pcXVlX3B0cjxDb2RlUHJvZmlsZT4+
IG1fY2hpbGRyZW47Ci0gICAgVGllcmVkTU1hcEFycmF5PENvZGVSZWNvcmQ+IG1fc2FtcGxlczsK
LX07Ci0KLX0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3Rv
b2xzL0NvZGVQcm9maWxpbmcuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS90b29scy9Db2RlUHJvZmlsaW5nLmNwcAkocmV2aXNpb24gMjU4MzUwKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL3Rvb2xzL0NvZGVQcm9maWxpbmcuY3BwCShub25leGlzdGVudCkKQEAgLTEs
MTY5ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTItMjAxOCBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFy
ZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IK
LSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAK
LSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiQ29kZVByb2ZpbGluZy5oIgot
Ci0jaW5jbHVkZSAiQ29kZVByb2ZpbGUuaCIKLSNpbmNsdWRlICJNYWNoaW5lQ29udGV4dC5oIgot
I2luY2x1ZGUgPHd0Zi9NZXRhQWxsb2NhdG9yLmg+Ci0KLSNpZiBIQVZFKFNJR05BTF9IKQotI2lu
Y2x1ZGUgPHNpZ25hbC5oPgotI2VuZGlmCi0KLSNpZiBIQVZFKE1BQ0hJTkVfQ09OVEVYVCkKLSNp
bmNsdWRlIDxzeXMvdGltZS5oPgotI2VuZGlmCi0KLW5hbWVzcGFjZSBKU0MgewotCi12b2xhdGls
ZSBDb2RlUHJvZmlsZSogQ29kZVByb2ZpbGluZzo6c19wcm9maWxlU3RhY2sgPSAwOwotQ29kZVBy
b2ZpbGluZzo6TW9kZSBDb2RlUHJvZmlsaW5nOjpzX21vZGUgPSBDb2RlUHJvZmlsaW5nOjpEaXNh
YmxlZDsKLVdURjo6TWV0YUFsbG9jYXRvclRyYWNrZXIqIENvZGVQcm9maWxpbmc6OnNfdHJhY2tl
ciA9IDA7Ci0KLUlHTk9SRV9XQVJOSU5HU19CRUdJTigibWlzc2luZy1ub3JldHVybiIpCi0KLSNp
ZiBIQVZFKE1BQ0hJTkVfQ09OVEVYVCkKLS8vIEhlbHBlciBmdW5jdGlvbiB0byBzdGFydCAmIHN0
b3AgdGhlIHRpbWVyLgotLy8gUHJlc2VudGx5IHdlJ3JlIHVzaW5nIHRoZSB3YWxsLWNsb2NrIHRp
bWVyLCBzaW5jZSB0aGlzIHNlZW1zIHRvIGdpdmUgdGhlIGJlc3QgcmVzdWx0cy4KLXN0YXRpYyB2
b2lkIHNldFByb2ZpbGVUaW1lcih1bnNpZ25lZCB1c2VjKQotewotICAgIGl0aW1lcnZhbCB0aW1l
cjsKLSAgICB0aW1lci5pdF92YWx1ZS50dl9zZWMgPSAwOwotICAgIHRpbWVyLml0X3ZhbHVlLnR2
X3VzZWMgPSB1c2VjOwotICAgIHRpbWVyLml0X2ludGVydmFsLnR2X3NlYyA9IDA7Ci0gICAgdGlt
ZXIuaXRfaW50ZXJ2YWwudHZfdXNlYyA9IHVzZWM7Ci0gICAgc2V0aXRpbWVyKElUSU1FUl9SRUFM
LCAmdGltZXIsIDApOwotfQotI2VuZGlmCi0KLUlHTk9SRV9XQVJOSU5HU19FTkQKLQotI2lmIEhB
VkUoTUFDSElORV9DT05URVhUKQotc3RhdGljIHZvaWQgcHJvZmlsaW5nVGltZXIoaW50LCBzaWdp
bmZvX3QqLCB2b2lkKiB1YXApCi17Ci0gICAgUGxhdGZvcm1SZWdpc3RlcnMmIHBsYXRmb3JtUmVn
aXN0ZXJzID0gV1RGOjpyZWdpc3RlcnNGcm9tVUNvbnRleHQoc3RhdGljX2Nhc3Q8dWNvbnRleHRf
dCo+KHVhcCkpOwotICAgIGlmIChhdXRvIGluc3RydWN0aW9uUG9pbnRlciA9IE1hY2hpbmVDb250
ZXh0OjppbnN0cnVjdGlvblBvaW50ZXIocGxhdGZvcm1SZWdpc3RlcnMpKSB7Ci0gICAgICAgIENv
ZGVQcm9maWxpbmc6OnNhbXBsZSgKLSAgICAgICAgICAgIGluc3RydWN0aW9uUG9pbnRlci0+dW50
YWdnZWRFeGVjdXRhYmxlQWRkcmVzcygpLAotICAgICAgICAgICAgcmVpbnRlcnByZXRfY2FzdDx2
b2lkKio+KE1hY2hpbmVDb250ZXh0OjpmcmFtZVBvaW50ZXIocGxhdGZvcm1SZWdpc3RlcnMpKSk7
Ci0gICAgfQotfQotI2VuZGlmCi0KLS8vIENhbGxiYWNrIHRyaWdnZXJlZCB3aGVuIHRoZSB0aW1l
ciBpcyBmaXJlZC4KLXZvaWQgQ29kZVByb2ZpbGluZzo6c2FtcGxlKHZvaWQqIHBjLCB2b2lkKiog
ZnJhbWVQb2ludGVyKQotewotICAgIENvZGVQcm9maWxlKiBwcm9maWxlU3RhY2sgPSBjb25zdF9j
YXN0PENvZGVQcm9maWxlKj4oc19wcm9maWxlU3RhY2spOwotICAgIGlmIChwcm9maWxlU3RhY2sp
Ci0gICAgICAgIHByb2ZpbGVTdGFjay0+c2FtcGxlKHBjLCBmcmFtZVBvaW50ZXIpOwotfQotCi12
b2lkIENvZGVQcm9maWxpbmc6Om5vdGlmeUFsbG9jYXRvcihXVEY6Ok1ldGFBbGxvY2F0b3IqIGFs
bG9jYXRvcikKLXsKLSAgICAvLyBDaGVjayBmb3IgSlNDX0NPREVfUFJPRklMSU5HLgotICAgIGNv
bnN0IGNoYXIqIGNvZGVQcm9maWxpbmdNb2RlID0gZ2V0ZW52KCJKU0NfQ09ERV9QUk9GSUxJTkci
KTsKLSAgICBpZiAoIWNvZGVQcm9maWxpbmdNb2RlKQotICAgICAgICByZXR1cm47Ci0KLSAgICAv
LyBDaGVjayBmb3IgYSB2YWxpZCBtb2RlLCBjdXJyZW50bHkgIjEiLCAiMiIsIG9yICIzIi4KLSAg
ICBpZiAoIWNvZGVQcm9maWxpbmdNb2RlWzBdIHx8IGNvZGVQcm9maWxpbmdNb2RlWzFdKQotICAg
ICAgICByZXR1cm47Ci0gICAgc3dpdGNoICgqY29kZVByb2ZpbGluZ01vZGUpIHsKLSAgICBjYXNl
ICcxJzoKLSAgICAgICAgc19tb2RlID0gRW5hYmxlZDsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2Fz
ZSAnMic6Ci0gICAgICAgIHNfbW9kZSA9IFZlcmJvc2U7Ci0gICAgICAgIGJyZWFrOwotICAgIGNh
c2UgJzMnOgotICAgICAgICBzX21vZGUgPSBWZXJ5VmVyYm9zZTsKLSAgICAgICAgYnJlYWs7Ci0g
ICAgZGVmYXVsdDoKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIEFTU0VSVChlbmFibGVk
KCkpOwotICAgIEFTU0VSVCghc190cmFja2VyKTsKLSAgICBzX3RyYWNrZXIgPSBuZXcgV1RGOjpN
ZXRhQWxsb2NhdG9yVHJhY2tlcigpOwotICAgIGFsbG9jYXRvci0+dHJhY2tBbGxvY2F0aW9ucyhz
X3RyYWNrZXIpOwotfQotCi12b2lkKiBDb2RlUHJvZmlsaW5nOjpnZXRPd25lclVJREZvclBDKHZv
aWQqIGFkZHJlc3MpCi17Ci0gICAgaWYgKCFzX3RyYWNrZXIpCi0gICAgICAgIHJldHVybiAwOwot
ICAgIFdURjo6TWV0YUFsbG9jYXRvckhhbmRsZSogaGFuZGxlID0gc190cmFja2VyLT5maW5kKGFk
ZHJlc3MpOwotICAgIGlmICghaGFuZGxlKQotICAgICAgICByZXR1cm4gMDsKLSAgICByZXR1cm4g
aGFuZGxlLT5vd25lclVJRCgpOwotfQotCi12b2lkIENvZGVQcm9maWxpbmc6OmJlZ2luKGNvbnN0
IFNvdXJjZUNvZGUmIHNvdXJjZSkKLXsKLSAgICAvLyBQdXNoIGEgbmV3IENvZGVQcm9maWxlIG9u
dG8gdGhlIHN0YWNrIGZvciBlYWNoIHNjcmlwdCBlbmNvdW50ZXJlZC4KLSAgICBDb2RlUHJvZmls
ZSogcHJvZmlsZVN0YWNrID0gY29uc3RfY2FzdDxDb2RlUHJvZmlsZSo+KHNfcHJvZmlsZVN0YWNr
KTsKLSAgICBib29sIGFscmVhZHlQcm9maWxpbmcgPSBwcm9maWxlU3RhY2s7Ci0gICAgc19wcm9m
aWxlU3RhY2sgPSBwcm9maWxlU3RhY2sgPSBuZXcgQ29kZVByb2ZpbGUoc291cmNlLCBwcm9maWxl
U3RhY2spOwotCi0gICAgLy8gSXMgdGhlIHByb2ZpbGVyIGFscmVhZHkgcnVubmluZyAtIGlmIHNv
LCB0aGUgdGltZXIgd2lsbCBhbHJlYWR5IGJlIHNldCB1cC4KLSAgICBpZiAoYWxyZWFkeVByb2Zp
bGluZykKLSAgICAgICAgcmV0dXJuOwotCi0jaWYgSEFWRShNQUNISU5FX0NPTlRFWFQpCi0gICAg
Ly8gUmVnc2l0ZXIgYSBzaWduYWwgaGFuZGxlciAmIGl0aW1lci4KLSAgICBzdHJ1Y3Qgc2lnYWN0
aW9uIGFjdGlvbjsKLSAgICBhY3Rpb24uc2Ffc2lnYWN0aW9uID0gcmVpbnRlcnByZXRfY2FzdDx2
b2lkICgqKShpbnQsIHNpZ2luZm9fdCAqLCB2b2lkICopPihwcm9maWxpbmdUaW1lcik7Ci0gICAg
c2lnZmlsbHNldCgmYWN0aW9uLnNhX21hc2spOwotICAgIGFjdGlvbi5zYV9mbGFncyA9IFNBX1NJ
R0lORk87Ci0gICAgc2lnYWN0aW9uKFNJR0FMUk0sICZhY3Rpb24sIDApOwotICAgIHNldFByb2Zp
bGVUaW1lcigxMDApOwotI2VuZGlmCi19Ci0KLXZvaWQgQ29kZVByb2ZpbGluZzo6ZW5kKCkKLXsK
LSAgICAvLyBQb3AgdGhlIGN1cnJlbnQgcHJvZmlsZXIgb2ZmIHRoZSBzdGFjay4KLSAgICBDb2Rl
UHJvZmlsZSogY3VycmVudCA9IGNvbnN0X2Nhc3Q8Q29kZVByb2ZpbGUqPihzX3Byb2ZpbGVTdGFj
ayk7Ci0gICAgQVNTRVJUKGN1cnJlbnQpOwotICAgIHNfcHJvZmlsZVN0YWNrID0gY3VycmVudC0+
cGFyZW50KCk7Ci0KLSAgICAvLyBJcyB0aGlzIHRoZSBvdXRlcm1vc3Qgc2NyaXB0IGJlaW5nIHBy
b2ZpbGVkPyAtIGlmIG5vdCwganVzdCByZXR1cm4uCi0gICAgLy8gV2UgcGVyZm9ybSBhbGwgb3V0
cHV0IG9mIHByb2ZpbGVzIHJlY3Vyc2l2ZWx5IGZyb20gdGhlIG91dGVybW9zdCBzY3JpcHQsCi0g
ICAgLy8gdG8gbWluaW1pemUgcHJvZmlsaW5nIG92ZXJoZWFkIGZyb20gc2tld2luZyByZXN1bHRz
LgotICAgIGlmIChzX3Byb2ZpbGVTdGFjaykKLSAgICAgICAgcmV0dXJuOwotCi0jaWYgSEFWRShN
QUNISU5FX0NPTlRFWFQpCi0gICAgLy8gU3RvcCBwcm9maWxpbmcKLSAgICBzZXRQcm9maWxlVGlt
ZXIoMCk7Ci0jZW5kaWYKLQotICAgIGN1cnJlbnQtPnJlcG9ydCgpOwotICAgIGRlbGV0ZSBjdXJy
ZW50OwotfQotCi19CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvdG9vbHMvQ29kZVByb2Zp
bGluZy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90b29scy9Db2RlUHJv
ZmlsaW5nLmgJKHJldmlzaW9uIDI1ODM1MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90b29s
cy9Db2RlUHJvZmlsaW5nLmgJKG5vbmV4aXN0ZW50KQpAQCAtMSw4MSArMCwwIEBACi0vKgotICog
Q29weXJpZ2h0IChDKSAyMDEyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0g
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJ
UycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0g
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0KLSNwcmFnbWEgb25jZQotCi1u
YW1lc3BhY2UgV1RGIHsKLQotY2xhc3MgTWV0YUFsbG9jYXRvcjsKLWNsYXNzIE1ldGFBbGxvY2F0
b3JUcmFja2VyOwotCi19Ci0KLW5hbWVzcGFjZSBKU0MgewotCi1jbGFzcyBDb2RlUHJvZmlsZTsK
LWNsYXNzIFNvdXJjZUNvZGU7Ci0KLWNsYXNzIENvZGVQcm9maWxpbmcgewotICAgIGVudW0gTW9k
ZSB7Ci0gICAgICAgIERpc2FibGVkLAotICAgICAgICBFbmFibGVkLAotICAgICAgICBWZXJib3Nl
LAotICAgICAgICBWZXJ5VmVyYm9zZQotICAgIH07Ci0KLXB1YmxpYzoKLSAgICBDb2RlUHJvZmls
aW5nKGNvbnN0IFNvdXJjZUNvZGUmIHNvdXJjZSkKLSAgICAgICAgOiBtX2FjdGl2ZShlbmFibGVk
KCkpCi0gICAgewotICAgICAgICBpZiAobV9hY3RpdmUpCi0gICAgICAgICAgICBiZWdpbihzb3Vy
Y2UpOwotICAgIH0KLQotICAgIH5Db2RlUHJvZmlsaW5nKCkKLSAgICB7Ci0gICAgICAgIGlmICht
X2FjdGl2ZSkKLSAgICAgICAgICAgIGVuZCgpOwotICAgIH0KLQotICAgIHN0YXRpYyBib29sIGVu
YWJsZWQoKSB7IHJldHVybiBzX21vZGUgIT0gRGlzYWJsZWQ7IH0KLSAgICBzdGF0aWMgYm9vbCBi
ZVZlcmJvc2UoKSB7IHJldHVybiBzX21vZGUgPj0gVmVyYm9zZTsgfQotICAgIHN0YXRpYyBib29s
IGJlVmVyeVZlcmJvc2UoKSB7IHJldHVybiBzX21vZGUgPj0gVmVyeVZlcmJvc2U7IH0KLQotICAg
IHN0YXRpYyB2b2lkIG5vdGlmeUFsbG9jYXRvcihXVEY6Ok1ldGFBbGxvY2F0b3IqKTsKLSAgICBz
dGF0aWMgdm9pZCogZ2V0T3duZXJVSURGb3JQQyh2b2lkKik7Ci0gICAgc3RhdGljIHZvaWQgc2Ft
cGxlKHZvaWQqIHBjLCB2b2lkKiogZnJhbWVQb2ludGVyKTsKLQotcHJpdmF0ZToKLSAgICB2b2lk
IGJlZ2luKGNvbnN0IFNvdXJjZUNvZGUmKTsKLSAgICB2b2lkIGVuZCgpOwotCi0gICAgYm9vbCBt
X2FjdGl2ZTsKLQotICAgIHN0YXRpYyBNb2RlIHNfbW9kZTsKLSAgICBzdGF0aWMgV1RGOjpNZXRh
QWxsb2NhdG9yVHJhY2tlciogc190cmFja2VyOwotICAgIHN0YXRpYyB2b2xhdGlsZSBDb2RlUHJv
ZmlsZSogc19wcm9maWxlU3RhY2s7Ci19OwotCi19IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21CQlFQbGFuLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQkJRUGxhbi5jcHAJKHJldmlzaW9uIDI1ODM1
MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21CQlFQbGFuLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMTMyLDEzICsxMzIsOSBAQCB2b2lkIEJCUVBsYW46OndvcmsoQ29tcGlsYXRp
b25FZmZvcnQgZWZmCiAgICAgICAgIC8vIHdpbGwgdXBkYXRlLiBJdCdzIGFsc28gb2sgaWYgdGhl
eSBwdWJsaXNoIHRoZWlyIGNvZGUgYmVmb3JlIHdlIHJlc2V0IHRoZSBpbnN0cnVjdGlvbiBjYWNo
ZXMgYmVjYXVzZSBhZnRlciB3ZSByZWxlYXNlCiAgICAgICAgIC8vIHRoZSBsb2NrIG91ciBjb2Rl
IGlzIHJlYWR5IHRvIGJlIHB1Ymxpc2hlZCB0b28uCiAgICAgICAgIExvY2tIb2xkZXIgaG9sZGVy
KG1fY29kZUJsb2NrLT5tX2xvY2spOworCiAgICAgICAgIG1fY29kZUJsb2NrLT5tX2JicUNhbGxl
ZXNbbV9mdW5jdGlvbkluZGV4XSA9IGNhbGxlZS5jb3B5UmVmKCk7Ci0gICAgICAgIHsKLSAgICAg
ICAgICAgIExMSW50Q2FsbGVlJiBsbGludENhbGxlZSA9IG1fY29kZUJsb2NrLT5tX2xsaW50Q2Fs
bGVlcy0+YXQobV9mdW5jdGlvbkluZGV4KS5nZXQoKTsKLSAgICAgICAgICAgIGF1dG8gbG9ja2Vy
ID0gaG9sZExvY2sobGxpbnRDYWxsZWUudGllclVwQ291bnRlcigpLm1fbG9jayk7Ci0gICAgICAg
ICAgICBsbGludENhbGxlZS5zZXRSZXBsYWNlbWVudChjYWxsZWUuY29weVJlZigpKTsKLSAgICAg
ICAgICAgIGxsaW50Q2FsbGVlLnRpZXJVcENvdW50ZXIoKS5tX2NvbXBpbGF0aW9uU3RhdHVzID0g
TExJbnRUaWVyVXBDb3VudGVyOjpDb21waWxhdGlvblN0YXR1czo6Q29tcGlsZWQ7Ci0gICAgICAg
IH0KKwogICAgICAgICBmb3IgKGF1dG8mIGNhbGwgOiBjYWxsZWUtPndhc21Ub1dhc21DYWxsc2l0
ZXMoKSkgewogICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPFdhc21FbnRyeVB0clRh
Zz4gZW50cnlwb2ludDsKICAgICAgICAgICAgIGlmIChjYWxsLmZ1bmN0aW9uSW5kZXhTcGFjZSA8
IG1fbW9kdWxlSW5mb3JtYXRpb24tPmltcG9ydEZ1bmN0aW9uQ291bnQoKSkKQEAgLTE0OCwyNCAr
MTQ0LDQ4IEBAIHZvaWQgQkJRUGxhbjo6d29yayhDb21waWxhdGlvbkVmZm9ydCBlZmYKIAogICAg
ICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OnJlcGF0Y2hOZWFyQ2FsbChjYWxsLmNhbGxMb2NhdGlv
biwgQ29kZUxvY2F0aW9uTGFiZWw8V2FzbUVudHJ5UHRyVGFnPihlbnRyeXBvaW50KSk7CiAgICAg
ICAgIH0KLSAgICB9CiAKLSAgICAvLyBJdCdzIGltcG9ydGFudCB0byBtYWtlIHN1cmUgd2UgZG8g
dGhpcyBiZWZvcmUgd2UgbWFrZSBhbnkgb2YgdGhlIGNvZGUgd2UganVzdCBjb21waWxlZCB2aXNp
YmxlLiBJZiB3ZSBkaWRuJ3QsIHdlIGNvdWxkIGVuZCB1cAotICAgIC8vIHdoZXJlIHdlIGFyZSB0
aWVyaW5nIHVwIHNvbWUgZnVuY3Rpb24gQSB0byBBJyBhbmQgd2UgcmVwYXRjaCBzb21lIGZ1bmN0
aW9uIEIgdG8gY2FsbCBBJyBpbnN0ZWFkIG9mIEEuIEFub3RoZXIgQ1BVIGNvdWxkIHNlZQotICAg
IC8vIHRoZSB1cGRhdGVzIHRvIEIgYnV0IHN0aWxsIG5vdCBoYXZlIHJlc2V0IGl0cyBjYWNoZSBv
ZiBBJywgd2hpY2ggd291bGQgbGVhZCB0byBhbGwga2luZHMgb2YgYmFkbmVzcy4KLSAgICByZXNl
dEluc3RydWN0aW9uQ2FjaGVPbkFsbFRocmVhZHMoKTsKLSAgICBXVEY6OnN0b3JlU3RvcmVGZW5j
ZSgpOyAvLyBUaGlzIHByb2JhYmx5IGlzbid0IG5lY2Vzc2FyeSBidXQgaXQncyBnb29kIHRvIGJl
IHBhcmFub2lkLgorICAgICAgICBIYXNoTWFwPHZvaWQqLCBDb2RlTG9jYXRpb25MYWJlbDxXYXNt
RW50cnlQdHJUYWc+PiBzdGFnZWRDYWxsczsKKyAgICAgICAgYXV0byBzdGFnZVJlcGF0Y2ggPSBb
Jl0gKGNvbnN0IFZlY3RvcjxVbmxpbmtlZFdhc21Ub1dhc21DYWxsPiYgY2FsbHNpdGVzKSB7Cisg
ICAgICAgICAgICBmb3IgKGF1dG8mIGNhbGwgOiBjYWxsc2l0ZXMpIHsKKyAgICAgICAgICAgICAg
ICBpZiAoY2FsbC5mdW5jdGlvbkluZGV4U3BhY2UgPT0gZnVuY3Rpb25JbmRleFNwYWNlKSB7Cisg
ICAgICAgICAgICAgICAgICAgIENvZGVMb2NhdGlvbkxhYmVsPFdhc21FbnRyeVB0clRhZz4gdGFy
Z2V0ID0gTWFjcm9Bc3NlbWJsZXI6OnByZXBhcmVGb3JBdG9taWNSZXBhdGNoTmVhckNhbGxDb25j
dXJyZW50bHkoY2FsbC5jYWxsTG9jYXRpb24sIENvZGVMb2NhdGlvbkxhYmVsPFdhc21FbnRyeVB0
clRhZz4oZW50cnlwb2ludCkpOworICAgICAgICAgICAgICAgICAgICBzdGFnZWRDYWxscy5hZGQo
Y2FsbC5jYWxsTG9jYXRpb24uZGF0YUxvY2F0aW9uKCksIHRhcmdldCk7CisgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9OwogCi0gICAgbV9jb2RlQmxvY2stPm1fd2Fz
bUluZGlyZWN0Q2FsbEVudHJ5UG9pbnRzW21fZnVuY3Rpb25JbmRleF0gPSBlbnRyeXBvaW50Owot
ICAgIHsKLSAgICAgICAgTG9ja0hvbGRlciBob2xkZXIobV9jb2RlQmxvY2stPm1fbG9jayk7Cisg
ICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX2NvZGVCbG9jay0+bV93YXNtVG9XYXNt
Q2FsbHNpdGVzLnNpemUoKTsgKytpKSB7CisgICAgICAgICAgICBzdGFnZVJlcGF0Y2gobV9jb2Rl
QmxvY2stPm1fd2FzbVRvV2FzbUNhbGxzaXRlc1tpXSk7CisgICAgICAgICAgICBpZiAobV9jb2Rl
QmxvY2stPm1fbGxpbnRDYWxsZWVzKSB7CisgICAgICAgICAgICAgICAgTExJbnRDYWxsZWUmIGxs
aW50Q2FsbGVlID0gbV9jb2RlQmxvY2stPm1fbGxpbnRDYWxsZWVzLT5hdChpKS5nZXQoKTsKKyAg
ICAgICAgICAgICAgICBpZiAoSklUQ2FsbGVlKiByZXBsYWNlbWVudENhbGxlZSA9IGxsaW50Q2Fs
bGVlLnJlcGxhY2VtZW50KCkpCisgICAgICAgICAgICAgICAgICAgIHN0YWdlUmVwYXRjaChyZXBs
YWNlbWVudENhbGxlZS0+d2FzbVRvV2FzbUNhbGxzaXRlcygpKTsKKyAgICAgICAgICAgICAgICBp
ZiAoT01HRm9yT1NSRW50cnlDYWxsZWUqIG9zckVudHJ5Q2FsbGVlID0gbGxpbnRDYWxsZWUub3Ny
RW50cnlDYWxsZWUoKSkKKyAgICAgICAgICAgICAgICAgICAgc3RhZ2VSZXBhdGNoKG9zckVudHJ5
Q2FsbGVlLT53YXNtVG9XYXNtQ2FsbHNpdGVzKCkpOworICAgICAgICAgICAgfQorICAgICAgICAg
ICAgaWYgKEJCUUNhbGxlZSogYmJxQ2FsbGVlID0gbV9jb2RlQmxvY2stPm1fYmJxQ2FsbGVlc1tp
XS5nZXQoKSkgeworICAgICAgICAgICAgICAgIGlmIChPTUdDYWxsZWUqIHJlcGxhY2VtZW50Q2Fs
bGVlID0gYmJxQ2FsbGVlLT5yZXBsYWNlbWVudCgpKQorICAgICAgICAgICAgICAgICAgICBzdGFn
ZVJlcGF0Y2gocmVwbGFjZW1lbnRDYWxsZWUtPndhc21Ub1dhc21DYWxsc2l0ZXMoKSk7CisgICAg
ICAgICAgICAgICAgaWYgKE9NR0Zvck9TUkVudHJ5Q2FsbGVlKiBvc3JFbnRyeUNhbGxlZSA9IGJi
cUNhbGxlZS0+b3NyRW50cnlDYWxsZWUoKSkKKyAgICAgICAgICAgICAgICAgICAgc3RhZ2VSZXBh
dGNoKG9zckVudHJ5Q2FsbGVlLT53YXNtVG9XYXNtQ2FsbHNpdGVzKCkpOworICAgICAgICAgICAg
fQorICAgICAgICB9CisKKyAgICAgICAgLy8gSXQncyBpbXBvcnRhbnQgdG8gbWFrZSBzdXJlIHdl
IGRvIHRoaXMgYmVmb3JlIHdlIG1ha2UgYW55IG9mIHRoZSBjb2RlIHdlIGp1c3QgY29tcGlsZWQg
dmlzaWJsZS4gSWYgd2UgZGlkbid0LCB3ZSBjb3VsZCBlbmQgdXAKKyAgICAgICAgLy8gd2hlcmUg
d2UgYXJlIHRpZXJpbmcgdXAgc29tZSBmdW5jdGlvbiBBIHRvIEEnIGFuZCB3ZSByZXBhdGNoIHNv
bWUgZnVuY3Rpb24gQiB0byBjYWxsIEEnIGluc3RlYWQgb2YgQS4gQW5vdGhlciBDUFUgY291bGQg
c2VlCisgICAgICAgIC8vIHRoZSB1cGRhdGVzIHRvIEIgYnV0IHN0aWxsIG5vdCBoYXZlIHJlc2V0
IGl0cyBjYWNoZSBvZiBBJywgd2hpY2ggd291bGQgbGVhZCB0byBhbGwga2luZHMgb2YgYmFkbmVz
cy4KKyAgICAgICAgcmVzZXRJbnN0cnVjdGlvbkNhY2hlT25BbGxUaHJlYWRzKCk7CisgICAgICAg
IFdURjo6c3RvcmVTdG9yZUZlbmNlKCk7IC8vIFRoaXMgcHJvYmFibHkgaXNuJ3QgbmVjZXNzYXJ5
IGJ1dCBpdCdzIGdvb2QgdG8gYmUgcGFyYW5vaWQuCisKKyAgICAgICAgbV9jb2RlQmxvY2stPm1f
d2FzbUluZGlyZWN0Q2FsbEVudHJ5UG9pbnRzW21fZnVuY3Rpb25JbmRleF0gPSBlbnRyeXBvaW50
OwogCiAgICAgICAgIGF1dG8gcmVwYXRjaENhbGxzID0gWyZdIChjb25zdCBWZWN0b3I8VW5saW5r
ZWRXYXNtVG9XYXNtQ2FsbD4mIGNhbGxzaXRlcykgewogICAgICAgICAgICAgZm9yIChhdXRvJiBj
YWxsIDogY2FsbHNpdGVzKSB7CiAgICAgICAgICAgICAgICAgZGF0YUxvZ0xuSWYoV2FzbUJCUVBs
YW5JbnRlcm5hbDo6dmVyYm9zZSwgIkNvbnNpZGVyaW5nIHJlcGF0Y2hpbmcgY2FsbCBhdDogIiwg
UmF3UG9pbnRlcihjYWxsLmNhbGxMb2NhdGlvbi5kYXRhTG9jYXRpb24oKSksICIgdGhhdCB0YXJn
ZXRzICIsIGNhbGwuZnVuY3Rpb25JbmRleFNwYWNlKTsKICAgICAgICAgICAgICAgICBpZiAoY2Fs
bC5mdW5jdGlvbkluZGV4U3BhY2UgPT0gZnVuY3Rpb25JbmRleFNwYWNlKSB7CiAgICAgICAgICAg
ICAgICAgICAgIGRhdGFMb2dMbklmKFdhc21CQlFQbGFuSW50ZXJuYWw6OnZlcmJvc2UsICJSZXBh
dGNoaW5nIGNhbGwgYXQ6ICIsIFJhd1BvaW50ZXIoY2FsbC5jYWxsTG9jYXRpb24uZGF0YUxvY2F0
aW9uKCkpLCAiIHRvICIsIFJhd1BvaW50ZXIoZW50cnlwb2ludC5leGVjdXRhYmxlQWRkcmVzcygp
KSk7Ci0gICAgICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpyZXBhdGNoTmVhckNhbGwo
Y2FsbC5jYWxsTG9jYXRpb24sIENvZGVMb2NhdGlvbkxhYmVsPFdhc21FbnRyeVB0clRhZz4oZW50
cnlwb2ludCkpOworICAgICAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6cmVwYXRjaE5l
YXJDYWxsKGNhbGwuY2FsbExvY2F0aW9uLCBzdGFnZWRDYWxscy5nZXQoY2FsbC5jYWxsTG9jYXRp
b24uZGF0YUxvY2F0aW9uKCkpKTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CiAg
ICAgICAgIH07CkBAIC0xODYsMTEgKzIwNiwxNyBAQCB2b2lkIEJCUVBsYW46OndvcmsoQ29tcGls
YXRpb25FZmZvcnQgZWZmCiAgICAgICAgICAgICAgICAgICAgIHJlcGF0Y2hDYWxscyhvc3JFbnRy
eUNhbGxlZS0+d2FzbVRvV2FzbUNhbGxzaXRlcygpKTsKICAgICAgICAgICAgIH0KICAgICAgICAg
fQorCisgICAgICAgIHsKKyAgICAgICAgICAgIExMSW50Q2FsbGVlJiBsbGludENhbGxlZSA9IG1f
Y29kZUJsb2NrLT5tX2xsaW50Q2FsbGVlcy0+YXQobV9mdW5jdGlvbkluZGV4KS5nZXQoKTsKKyAg
ICAgICAgICAgIGF1dG8gbG9ja2VyID0gaG9sZExvY2sobGxpbnRDYWxsZWUudGllclVwQ291bnRl
cigpLm1fbG9jayk7CisgICAgICAgICAgICBsbGludENhbGxlZS5zZXRSZXBsYWNlbWVudChjYWxs
ZWUuY29weVJlZigpKTsKKyAgICAgICAgICAgIGxsaW50Q2FsbGVlLnRpZXJVcENvdW50ZXIoKS5t
X2NvbXBpbGF0aW9uU3RhdHVzID0gTExJbnRUaWVyVXBDb3VudGVyOjpDb21waWxhdGlvblN0YXR1
czo6Q29tcGlsZWQ7CisgICAgICAgIH0KICAgICB9CiAKICAgICBkYXRhTG9nTG5JZihXYXNtQkJR
UGxhbkludGVybmFsOjp2ZXJib3NlLCAiRmluaXNoZWQgQkJRICIsIG1fZnVuY3Rpb25JbmRleCk7
CiAKLQogICAgIGF1dG8gbG9ja2VyID0gaG9sZExvY2sobV9sb2NrKTsKICAgICBtb3ZlVG9TdGF0
ZShTdGF0ZTo6Q29tcGxldGVkKTsKICAgICBydW5Db21wbGV0aW9uVGFza3MobG9ja2VyKTsKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21PTUdGb3JPU1JFbnRyeVBsYW4uY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21PTUdGb3JPU1JF
bnRyeVBsYW4uY3BwCShyZXZpc2lvbiAyNTgzNTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
d2FzbS9XYXNtT01HRm9yT1NSRW50cnlQbGFuLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTAzLDEy
ICsxMDMsMTAgQEAgdm9pZCBPTUdGb3JPU1JFbnRyeVBsYW46OndvcmsoQ29tcGlsYXRpbwogCiAg
ICAgb21nRW50cnlwb2ludC5jYWxsZWVTYXZlUmVnaXN0ZXJzID0gV1RGTW92ZShwYXJzZUFuZENv
bXBpbGVSZXN1bHQudmFsdWUoKS0+ZW50cnlwb2ludC5jYWxsZWVTYXZlUmVnaXN0ZXJzKTsKIAot
ICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxXYXNtRW50cnlQdHJUYWc+IGVudHJ5cG9pbnQ7CiAg
ICAgQVNTRVJUKG1fY29kZUJsb2NrLnB0cigpID09IG1fbW9kdWxlLT5jb2RlQmxvY2tGb3IobW9k
ZSgpKSk7CiAgICAgUmVmPE9NR0Zvck9TUkVudHJ5Q2FsbGVlPiBjYWxsZWUgPSBPTUdGb3JPU1JF
bnRyeUNhbGxlZTo6Y3JlYXRlKFdURk1vdmUob21nRW50cnlwb2ludCksIGZ1bmN0aW9uSW5kZXhT
cGFjZSwgbV9tb2R1bGVJbmZvcm1hdGlvbi0+bmFtZVNlY3Rpb24tPmdldChmdW5jdGlvbkluZGV4
U3BhY2UpLCBvc3JFbnRyeVNjcmF0Y2hCdWZmZXJTaXplLCBtX2xvb3BJbmRleCwgV1RGTW92ZSh1
bmxpbmtlZENhbGxzKSk7CiAgICAgewogICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6cmVwYXRjaFBv
aW50ZXIocGFyc2VBbmRDb21waWxlUmVzdWx0LnZhbHVlKCktPmNhbGxlZU1vdmVMb2NhdGlvbiwg
Q2FsbGVlQml0czo6Ym94V2FzbShjYWxsZWUucHRyKCkpKTsKLSAgICAgICAgZW50cnlwb2ludCA9
IGNhbGxlZS0+ZW50cnlwb2ludCgpOwogCiAgICAgICAgIGF1dG8gbG9ja2VyID0gaG9sZExvY2so
bV9jb2RlQmxvY2stPm1fbG9jayk7CiAgICAgICAgIGZvciAoYXV0byYgY2FsbCA6IGNhbGxlZS0+
d2FzbVRvV2FzbUNhbGxzaXRlcygpKSB7CkBAIC0xMjAsMTEgKzExOCwxMCBAQCB2b2lkIE9NR0Zv
ck9TUkVudHJ5UGxhbjo6d29yayhDb21waWxhdGlvCiAKICAgICAgICAgICAgIE1hY3JvQXNzZW1i
bGVyOjpyZXBhdGNoTmVhckNhbGwoY2FsbC5jYWxsTG9jYXRpb24sIENvZGVMb2NhdGlvbkxhYmVs
PFdhc21FbnRyeVB0clRhZz4oZW50cnlwb2ludCkpOwogICAgICAgICB9Ci0gICAgfQotICAgIHJl
c2V0SW5zdHJ1Y3Rpb25DYWNoZU9uQWxsVGhyZWFkcygpOwotICAgIFdURjo6c3RvcmVTdG9yZUZl
bmNlKCk7Ci0gICAgewotICAgICAgICBhdXRvIGxvY2tlciA9IGhvbGRMb2NrKG1fY29kZUJsb2Nr
LT5tX2xvY2spOworCisgICAgICAgIHJlc2V0SW5zdHJ1Y3Rpb25DYWNoZU9uQWxsVGhyZWFkcygp
OworICAgICAgICBXVEY6OnN0b3JlU3RvcmVGZW5jZSgpOworCiAgICAgICAgIHsKICAgICAgICAg
ICAgIHN3aXRjaCAobV9jYWxsZWUtPmNvbXBpbGF0aW9uTW9kZSgpKSB7CiAgICAgICAgICAgICBj
YXNlIENvbXBpbGF0aW9uTW9kZTo6TExJbnRNb2RlOiB7CkBAIC0xNDYsMTkgKzE0Myw2IEBAIHZv
aWQgT01HRm9yT1NSRW50cnlQbGFuOjp3b3JrKENvbXBpbGF0aW8KICAgICAgICAgICAgICAgICBS
RUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICAgICAgfQogICAgICAgICB9Ci0g
ICAgICAgIFdURjo6c3RvcmVTdG9yZUZlbmNlKCk7Ci0gICAgICAgIC8vIEl0IGlzIHBvc3NpYmxl
IHRoYXQgYSBuZXcgT01HIGNhbGxlZSBpcyBhZGRlZCB3aGlsZSB3ZSByZWxlYXNlIG1fY29kZUJs
b2NrLT5sb2NrLgotICAgICAgICAvLyBVbnRpbCB3ZSBhZGQgT01HRm9yT1NSRW50cnkgY2FsbGVl
IHRvIEJCUUNhbGxlZSdzIG1fb3NyRW50cnlDYWxsZWUsIHRoaXMgbmV3IE9NRyBmdW5jdGlvbiBs
aW5raW5nIGRvZXMgbm90IGhhcHBlbiBmb3IgdGhpcyBPTUdGb3JPU1JFbnRyeSBjYWxsZWUuCi0g
ICAgICAgIC8vIFdlIHJlLWxpbmsgdGhpcyBPTUdGb3JPU1JFbnRyeSBjYWxsZWUgYWdhaW4gbm90
IHRvIG1pc3MgdGhhdCBjaGFuY2UuCi0gICAgICAgIGZvciAoYXV0byYgY2FsbCA6IGNhbGxlZS0+
d2FzbVRvV2FzbUNhbGxzaXRlcygpKSB7Ci0gICAgICAgICAgICBNYWNyb0Fzc2VtYmxlckNvZGVQ
dHI8V2FzbUVudHJ5UHRyVGFnPiBlbnRyeXBvaW50OwotICAgICAgICAgICAgaWYgKGNhbGwuZnVu
Y3Rpb25JbmRleFNwYWNlIDwgbV9tb2R1bGUtPm1vZHVsZUluZm9ybWF0aW9uKCkuaW1wb3J0RnVu
Y3Rpb25Db3VudCgpKQotICAgICAgICAgICAgICAgIGVudHJ5cG9pbnQgPSBtX2NvZGVCbG9jay0+
bV93YXNtVG9XYXNtRXhpdFN0dWJzW2NhbGwuZnVuY3Rpb25JbmRleFNwYWNlXS5jb2RlKCk7Ci0g
ICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgZW50cnlwb2ludCA9IG1fY29kZUJsb2Nr
LT53YXNtRW50cnlwb2ludENhbGxlZUZyb21GdW5jdGlvbkluZGV4U3BhY2UoY2FsbC5mdW5jdGlv
bkluZGV4U3BhY2UpLmVudHJ5cG9pbnQoKS5yZXRhZ2dlZDxXYXNtRW50cnlQdHJUYWc+KCk7Ci0K
LSAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpyZXBhdGNoTmVhckNhbGwoY2FsbC5jYWxsTG9j
YXRpb24sIENvZGVMb2NhdGlvbkxhYmVsPFdhc21FbnRyeVB0clRhZz4oZW50cnlwb2ludCkpOwot
ICAgICAgICB9CiAgICAgfQogICAgIGRhdGFMb2dMbklmKFdhc21PTUdGb3JPU1JFbnRyeVBsYW5J
bnRlcm5hbDo6dmVyYm9zZSwgIkZpbmlzaGVkIE9NR0Zvck9TUkVudHJ5ICIsIG1fZnVuY3Rpb25J
bmRleCk7CiAgICAgY29tcGxldGUoaG9sZExvY2sobV9sb2NrKSk7CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvd2FzbS9XYXNtT01HUGxhbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL3dhc20vV2FzbU9NR1BsYW4uY3BwCShyZXZpc2lvbiAyNTgzNTApCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtT01HUGxhbi5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTExNCwyMCArMTE0LDkgQEAgdm9pZCBPTUdQbGFuOjp3b3JrKENvbXBpbGF0aW9uRWZmb3J0
KQogICAgICAgICAvLyB3aWxsIHVwZGF0ZS4gSXQncyBhbHNvIG9rIGlmIHRoZXkgcHVibGlzaCB0
aGVpciBjb2RlIGJlZm9yZSB3ZSByZXNldCB0aGUgaW5zdHJ1Y3Rpb24gY2FjaGVzIGJlY2F1c2Ug
YWZ0ZXIgd2UgcmVsZWFzZQogICAgICAgICAvLyB0aGUgbG9jayBvdXIgY29kZSBpcyByZWFkeSB0
byBiZSBwdWJsaXNoZWQgdG9vLgogICAgICAgICBMb2NrSG9sZGVyIGhvbGRlcihtX2NvZGVCbG9j
ay0+bV9sb2NrKTsKKwogICAgICAgICBtX2NvZGVCbG9jay0+bV9vbWdDYWxsZWVzW21fZnVuY3Rp
b25JbmRleF0gPSBjYWxsZWUuY29weVJlZigpOwotICAgICAgICB7Ci0gICAgICAgICAgICBpZiAo
QkJRQ2FsbGVlKiBiYnFDYWxsZWUgPSBtX2NvZGVCbG9jay0+bV9iYnFDYWxsZWVzW21fZnVuY3Rp
b25JbmRleF0uZ2V0KCkpIHsKLSAgICAgICAgICAgICAgICBhdXRvIGxvY2tlciA9IGhvbGRMb2Nr
KGJicUNhbGxlZS0+dGllclVwQ291bnQoKS0+Z2V0TG9jaygpKTsKLSAgICAgICAgICAgICAgICBi
YnFDYWxsZWUtPnNldFJlcGxhY2VtZW50KGNhbGxlZS5jb3B5UmVmKCkpOwotICAgICAgICAgICAg
ICAgIGJicUNhbGxlZS0+dGllclVwQ291bnQoKS0+bV9jb21waWxhdGlvblN0YXR1c0Zvck9NRyA9
IFRpZXJVcENvdW50OjpDb21waWxhdGlvblN0YXR1czo6Q29tcGlsZWQ7Ci0gICAgICAgICAgICB9
Ci0gICAgICAgICAgICBpZiAobV9jb2RlQmxvY2stPm1fbGxpbnRDYWxsZWVzKSB7Ci0gICAgICAg
ICAgICAgICAgTExJbnRDYWxsZWUmIGxsaW50Q2FsbGVlID0gbV9jb2RlQmxvY2stPm1fbGxpbnRD
YWxsZWVzLT5hdChtX2Z1bmN0aW9uSW5kZXgpLmdldCgpOwotICAgICAgICAgICAgICAgIGF1dG8g
bG9ja2VyID0gaG9sZExvY2sobGxpbnRDYWxsZWUudGllclVwQ291bnRlcigpLm1fbG9jayk7Ci0g
ICAgICAgICAgICAgICAgbGxpbnRDYWxsZWUuc2V0UmVwbGFjZW1lbnQoY2FsbGVlLmNvcHlSZWYo
KSk7Ci0gICAgICAgICAgICAgICAgbGxpbnRDYWxsZWUudGllclVwQ291bnRlcigpLm1fY29tcGls
YXRpb25TdGF0dXMgPSBMTEludFRpZXJVcENvdW50ZXI6OkNvbXBpbGF0aW9uU3RhdHVzOjpDb21w
aWxlZDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQorCiAgICAgICAgIGZvciAoYXV0byYgY2Fs
bCA6IGNhbGxlZS0+d2FzbVRvV2FzbUNhbGxzaXRlcygpKSB7CiAgICAgICAgICAgICBNYWNyb0Fz
c2VtYmxlckNvZGVQdHI8V2FzbUVudHJ5UHRyVGFnPiBlbnRyeXBvaW50OwogICAgICAgICAgICAg
aWYgKGNhbGwuZnVuY3Rpb25JbmRleFNwYWNlIDwgbV9tb2R1bGUtPm1vZHVsZUluZm9ybWF0aW9u
KCkuaW1wb3J0RnVuY3Rpb25Db3VudCgpKQpAQCAtMTM3LDI0ICsxMjYsNDcgQEAgdm9pZCBPTUdQ
bGFuOjp3b3JrKENvbXBpbGF0aW9uRWZmb3J0KQogCiAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxl
cjo6cmVwYXRjaE5lYXJDYWxsKGNhbGwuY2FsbExvY2F0aW9uLCBDb2RlTG9jYXRpb25MYWJlbDxX
YXNtRW50cnlQdHJUYWc+KGVudHJ5cG9pbnQpKTsKICAgICAgICAgfQotICAgIH0KIAotICAgIC8v
IEl0J3MgaW1wb3J0YW50IHRvIG1ha2Ugc3VyZSB3ZSBkbyB0aGlzIGJlZm9yZSB3ZSBtYWtlIGFu
eSBvZiB0aGUgY29kZSB3ZSBqdXN0IGNvbXBpbGVkIHZpc2libGUuIElmIHdlIGRpZG4ndCwgd2Ug
Y291bGQgZW5kIHVwCi0gICAgLy8gd2hlcmUgd2UgYXJlIHRpZXJpbmcgdXAgc29tZSBmdW5jdGlv
biBBIHRvIEEnIGFuZCB3ZSByZXBhdGNoIHNvbWUgZnVuY3Rpb24gQiB0byBjYWxsIEEnIGluc3Rl
YWQgb2YgQS4gQW5vdGhlciBDUFUgY291bGQgc2VlCi0gICAgLy8gdGhlIHVwZGF0ZXMgdG8gQiBi
dXQgc3RpbGwgbm90IGhhdmUgcmVzZXQgaXRzIGNhY2hlIG9mIEEnLCB3aGljaCB3b3VsZCBsZWFk
IHRvIGFsbCBraW5kcyBvZiBiYWRuZXNzLgotICAgIHJlc2V0SW5zdHJ1Y3Rpb25DYWNoZU9uQWxs
VGhyZWFkcygpOwotICAgIFdURjo6c3RvcmVTdG9yZUZlbmNlKCk7IC8vIFRoaXMgcHJvYmFibHkg
aXNuJ3QgbmVjZXNzYXJ5IGJ1dCBpdCdzIGdvb2QgdG8gYmUgcGFyYW5vaWQuCisgICAgICAgIEhh
c2hNYXA8dm9pZCosIENvZGVMb2NhdGlvbkxhYmVsPFdhc21FbnRyeVB0clRhZz4+IHN0YWdlZENh
bGxzOworICAgICAgICBhdXRvIHN0YWdlUmVwYXRjaCA9IFsmXSAoY29uc3QgVmVjdG9yPFVubGlu
a2VkV2FzbVRvV2FzbUNhbGw+JiBjYWxsc2l0ZXMpIHsKKyAgICAgICAgICAgIGZvciAoYXV0byYg
Y2FsbCA6IGNhbGxzaXRlcykgeworICAgICAgICAgICAgICAgIGlmIChjYWxsLmZ1bmN0aW9uSW5k
ZXhTcGFjZSA9PSBmdW5jdGlvbkluZGV4U3BhY2UpIHsKKyAgICAgICAgICAgICAgICAgICAgQ29k
ZUxvY2F0aW9uTGFiZWw8V2FzbUVudHJ5UHRyVGFnPiB0YXJnZXQgPSBNYWNyb0Fzc2VtYmxlcjo6
cHJlcGFyZUZvckF0b21pY1JlcGF0Y2hOZWFyQ2FsbENvbmN1cnJlbnRseShjYWxsLmNhbGxMb2Nh
dGlvbiwgQ29kZUxvY2F0aW9uTGFiZWw8V2FzbUVudHJ5UHRyVGFnPihlbnRyeXBvaW50KSk7Cisg
ICAgICAgICAgICAgICAgICAgIHN0YWdlZENhbGxzLmFkZChjYWxsLmNhbGxMb2NhdGlvbi5kYXRh
TG9jYXRpb24oKSwgdGFyZ2V0KTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9Cisg
ICAgICAgIH07CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX2NvZGVCbG9jay0+
bV93YXNtVG9XYXNtQ2FsbHNpdGVzLnNpemUoKTsgKytpKSB7CisgICAgICAgICAgICBzdGFnZVJl
cGF0Y2gobV9jb2RlQmxvY2stPm1fd2FzbVRvV2FzbUNhbGxzaXRlc1tpXSk7CisgICAgICAgICAg
ICBpZiAobV9jb2RlQmxvY2stPm1fbGxpbnRDYWxsZWVzKSB7CisgICAgICAgICAgICAgICAgTExJ
bnRDYWxsZWUmIGxsaW50Q2FsbGVlID0gbV9jb2RlQmxvY2stPm1fbGxpbnRDYWxsZWVzLT5hdChp
KS5nZXQoKTsKKyAgICAgICAgICAgICAgICBpZiAoSklUQ2FsbGVlKiByZXBsYWNlbWVudENhbGxl
ZSA9IGxsaW50Q2FsbGVlLnJlcGxhY2VtZW50KCkpCisgICAgICAgICAgICAgICAgICAgIHN0YWdl
UmVwYXRjaChyZXBsYWNlbWVudENhbGxlZS0+d2FzbVRvV2FzbUNhbGxzaXRlcygpKTsKKyAgICAg
ICAgICAgICAgICBpZiAoT01HRm9yT1NSRW50cnlDYWxsZWUqIG9zckVudHJ5Q2FsbGVlID0gbGxp
bnRDYWxsZWUub3NyRW50cnlDYWxsZWUoKSkKKyAgICAgICAgICAgICAgICAgICAgc3RhZ2VSZXBh
dGNoKG9zckVudHJ5Q2FsbGVlLT53YXNtVG9XYXNtQ2FsbHNpdGVzKCkpOworICAgICAgICAgICAg
fQorICAgICAgICAgICAgaWYgKEJCUUNhbGxlZSogYmJxQ2FsbGVlID0gbV9jb2RlQmxvY2stPm1f
YmJxQ2FsbGVlc1tpXS5nZXQoKSkgeworICAgICAgICAgICAgICAgIGlmIChPTUdDYWxsZWUqIHJl
cGxhY2VtZW50Q2FsbGVlID0gYmJxQ2FsbGVlLT5yZXBsYWNlbWVudCgpKQorICAgICAgICAgICAg
ICAgICAgICBzdGFnZVJlcGF0Y2gocmVwbGFjZW1lbnRDYWxsZWUtPndhc21Ub1dhc21DYWxsc2l0
ZXMoKSk7CisgICAgICAgICAgICAgICAgaWYgKE9NR0Zvck9TUkVudHJ5Q2FsbGVlKiBvc3JFbnRy
eUNhbGxlZSA9IGJicUNhbGxlZS0+b3NyRW50cnlDYWxsZWUoKSkKKyAgICAgICAgICAgICAgICAg
ICAgc3RhZ2VSZXBhdGNoKG9zckVudHJ5Q2FsbGVlLT53YXNtVG9XYXNtQ2FsbHNpdGVzKCkpOwor
ICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgLy8gSXQncyBpbXBvcnRhbnQgdG8g
bWFrZSBzdXJlIHdlIGRvIHRoaXMgYmVmb3JlIHdlIG1ha2UgYW55IG9mIHRoZSBjb2RlIHdlIGp1
c3QgY29tcGlsZWQgdmlzaWJsZS4gSWYgd2UgZGlkbid0LCB3ZSBjb3VsZCBlbmQgdXAKKyAgICAg
ICAgLy8gd2hlcmUgd2UgYXJlIHRpZXJpbmcgdXAgc29tZSBmdW5jdGlvbiBBIHRvIEEnIGFuZCB3
ZSByZXBhdGNoIHNvbWUgZnVuY3Rpb24gQiB0byBjYWxsIEEnIGluc3RlYWQgb2YgQS4gQW5vdGhl
ciBDUFUgY291bGQgc2VlCisgICAgICAgIC8vIHRoZSB1cGRhdGVzIHRvIEIgYnV0IHN0aWxsIG5v
dCBoYXZlIHJlc2V0IGl0cyBjYWNoZSBvZiBBJywgd2hpY2ggd291bGQgbGVhZCB0byBhbGwga2lu
ZHMgb2YgYmFkbmVzcy4KKyAgICAgICAgcmVzZXRJbnN0cnVjdGlvbkNhY2hlT25BbGxUaHJlYWRz
KCk7CisgICAgICAgIFdURjo6c3RvcmVTdG9yZUZlbmNlKCk7IC8vIFRoaXMgcHJvYmFibHkgaXNu
J3QgbmVjZXNzYXJ5IGJ1dCBpdCdzIGdvb2QgdG8gYmUgcGFyYW5vaWQuCiAKLSAgICBtX2NvZGVC
bG9jay0+bV93YXNtSW5kaXJlY3RDYWxsRW50cnlQb2ludHNbbV9mdW5jdGlvbkluZGV4XSA9IGVu
dHJ5cG9pbnQ7Ci0gICAgewotICAgICAgICBMb2NrSG9sZGVyIGhvbGRlcihtX2NvZGVCbG9jay0+
bV9sb2NrKTsKKyAgICAgICAgbV9jb2RlQmxvY2stPm1fd2FzbUluZGlyZWN0Q2FsbEVudHJ5UG9p
bnRzW21fZnVuY3Rpb25JbmRleF0gPSBlbnRyeXBvaW50OwogCiAgICAgICAgIGF1dG8gcmVwYXRj
aENhbGxzID0gWyZdIChjb25zdCBWZWN0b3I8VW5saW5rZWRXYXNtVG9XYXNtQ2FsbD4mIGNhbGxz
aXRlcykgewogICAgICAgICAgICAgZm9yIChhdXRvJiBjYWxsIDogY2FsbHNpdGVzKSB7CiAgICAg
ICAgICAgICAgICAgZGF0YUxvZ0xuSWYoV2FzbU9NR1BsYW5JbnRlcm5hbDo6dmVyYm9zZSwgIkNv
bnNpZGVyaW5nIHJlcGF0Y2hpbmcgY2FsbCBhdDogIiwgUmF3UG9pbnRlcihjYWxsLmNhbGxMb2Nh
dGlvbi5kYXRhTG9jYXRpb24oKSksICIgdGhhdCB0YXJnZXRzICIsIGNhbGwuZnVuY3Rpb25JbmRl
eFNwYWNlKTsKICAgICAgICAgICAgICAgICBpZiAoY2FsbC5mdW5jdGlvbkluZGV4U3BhY2UgPT0g
ZnVuY3Rpb25JbmRleFNwYWNlKSB7CiAgICAgICAgICAgICAgICAgICAgIGRhdGFMb2dMbklmKFdh
c21PTUdQbGFuSW50ZXJuYWw6OnZlcmJvc2UsICJSZXBhdGNoaW5nIGNhbGwgYXQ6ICIsIFJhd1Bv
aW50ZXIoY2FsbC5jYWxsTG9jYXRpb24uZGF0YUxvY2F0aW9uKCkpLCAiIHRvICIsIFJhd1BvaW50
ZXIoZW50cnlwb2ludC5leGVjdXRhYmxlQWRkcmVzcygpKSk7Ci0gICAgICAgICAgICAgICAgICAg
IE1hY3JvQXNzZW1ibGVyOjpyZXBhdGNoTmVhckNhbGwoY2FsbC5jYWxsTG9jYXRpb24sIENvZGVM
b2NhdGlvbkxhYmVsPFdhc21FbnRyeVB0clRhZz4oZW50cnlwb2ludCkpOworICAgICAgICAgICAg
ICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6cmVwYXRjaE5lYXJDYWxsKGNhbGwuY2FsbExvY2F0aW9u
LCBzdGFnZWRDYWxscy5nZXQoY2FsbC5jYWxsTG9jYXRpb24uZGF0YUxvY2F0aW9uKCkpKTsKICAg
ICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CiAgICAgICAgIH07CkBAIC0xNzUsNiArMTg3
LDIwIEBAIHZvaWQgT01HUGxhbjo6d29yayhDb21waWxhdGlvbkVmZm9ydCkKICAgICAgICAgICAg
ICAgICAgICAgcmVwYXRjaENhbGxzKG9zckVudHJ5Q2FsbGVlLT53YXNtVG9XYXNtQ2FsbHNpdGVz
KCkpOwogICAgICAgICAgICAgfQogICAgICAgICB9CisKKyAgICAgICAgeworICAgICAgICAgICAg
aWYgKEJCUUNhbGxlZSogYmJxQ2FsbGVlID0gbV9jb2RlQmxvY2stPm1fYmJxQ2FsbGVlc1ttX2Z1
bmN0aW9uSW5kZXhdLmdldCgpKSB7CisgICAgICAgICAgICAgICAgYXV0byBsb2NrZXIgPSBob2xk
TG9jayhiYnFDYWxsZWUtPnRpZXJVcENvdW50KCktPmdldExvY2soKSk7CisgICAgICAgICAgICAg
ICAgYmJxQ2FsbGVlLT5zZXRSZXBsYWNlbWVudChjYWxsZWUuY29weVJlZigpKTsKKyAgICAgICAg
ICAgICAgICBiYnFDYWxsZWUtPnRpZXJVcENvdW50KCktPm1fY29tcGlsYXRpb25TdGF0dXNGb3JP
TUcgPSBUaWVyVXBDb3VudDo6Q29tcGlsYXRpb25TdGF0dXM6OkNvbXBpbGVkOworICAgICAgICAg
ICAgfQorICAgICAgICAgICAgaWYgKG1fY29kZUJsb2NrLT5tX2xsaW50Q2FsbGVlcykgeworICAg
ICAgICAgICAgICAgIExMSW50Q2FsbGVlJiBsbGludENhbGxlZSA9IG1fY29kZUJsb2NrLT5tX2xs
aW50Q2FsbGVlcy0+YXQobV9mdW5jdGlvbkluZGV4KS5nZXQoKTsKKyAgICAgICAgICAgICAgICBh
dXRvIGxvY2tlciA9IGhvbGRMb2NrKGxsaW50Q2FsbGVlLnRpZXJVcENvdW50ZXIoKS5tX2xvY2sp
OworICAgICAgICAgICAgICAgIGxsaW50Q2FsbGVlLnNldFJlcGxhY2VtZW50KGNhbGxlZS5jb3B5
UmVmKCkpOworICAgICAgICAgICAgICAgIGxsaW50Q2FsbGVlLnRpZXJVcENvdW50ZXIoKS5tX2Nv
bXBpbGF0aW9uU3RhdHVzID0gTExJbnRUaWVyVXBDb3VudGVyOjpDb21waWxhdGlvblN0YXR1czo6
Q29tcGlsZWQ7CisgICAgICAgICAgICB9CisgICAgICAgIH0KICAgICB9CiAKICAgICBkYXRhTG9n
TG5JZihXYXNtT01HUGxhbkludGVybmFsOjp2ZXJib3NlLCAiRmluaXNoZWQgT01HICIsIG1fZnVu
Y3Rpb25JbmRleCk7CkluZGV4OiBTb3VyY2UvV1RGL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV1RGL0NoYW5nZUxvZwkocmV2aXNpb24gMjU4MzUwKQorKysgU291cmNlL1dURi9DaGFu
Z2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwzNSBAQAorMjAyMC0wMy0xMiAgU2FhbSBC
YXJhdGkgIDxzYmFyYXRpQGFwcGxlLmNvbT4KKworICAgICAgICBJbXBsZW1lbnQgMUdCIG9mIGV4
ZWN1dGFibGUgbWVtb3J5IG9uIGFybTY0CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0yMDg0OTAKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICAqIHd0Zi9NZXRhQWxsb2NhdG9yLmNwcDoKKyAgICAgICAgKFdURjo6
TWV0YUFsbG9jYXRvclRyYWNrZXI6Om5vdGlmeSk6CisgICAgICAgIChXVEY6Ok1ldGFBbGxvY2F0
b3JUcmFja2VyOjpyZWxlYXNlKToKKyAgICAgICAgKFdURjo6TWV0YUFsbG9jYXRvcjo6cmVsZWFz
ZSk6CisgICAgICAgIChXVEY6Ok1ldGFBbGxvY2F0b3JIYW5kbGU6Ok1ldGFBbGxvY2F0b3JIYW5k
bGUpOgorICAgICAgICAoV1RGOjpNZXRhQWxsb2NhdG9ySGFuZGxlOjp+TWV0YUFsbG9jYXRvckhh
bmRsZSk6CisgICAgICAgIChXVEY6Ok1ldGFBbGxvY2F0b3JIYW5kbGU6OnNocmluayk6CisgICAg
ICAgIChXVEY6Ok1ldGFBbGxvY2F0b3I6Ok1ldGFBbGxvY2F0b3IpOgorICAgICAgICAoV1RGOjpN
ZXRhQWxsb2NhdG9yOjphbGxvY2F0ZSk6CisgICAgICAgIChXVEY6Ok1ldGFBbGxvY2F0b3I6OmN1
cnJlbnRTdGF0aXN0aWNzKToKKyAgICAgICAgKiB3dGYvTWV0YUFsbG9jYXRvci5oOgorICAgICAg
ICAoV1RGOjpNZXRhQWxsb2NhdG9yVHJhY2tlcjo6ZmluZCk6CisgICAgICAgIChXVEY6Ok1ldGFB
bGxvY2F0b3I6OmFsbG9jYXRlKToKKyAgICAgICAgKFdURjo6TWV0YUFsbG9jYXRvcjo6Y3VycmVu
dFN0YXRpc3RpY3MpOgorICAgICAgICAoV1RGOjpNZXRhQWxsb2NhdG9yOjpnZXRMb2NrKTogRGVs
ZXRlZC4KKyAgICAgICAgKiB3dGYvTWV0YUFsbG9jYXRvckhhbmRsZS5oOgorICAgICAgICAoV1RG
OjpNZXRhQWxsb2NhdG9ySGFuZGxlOjphbGxvY2F0b3IpOgorICAgICAgICAoV1RGOjpNZXRhQWxs
b2NhdG9ySGFuZGxlOjppc01hbmFnZWQpOiBEZWxldGVkLgorICAgICAgICAoV1RGOjpNZXRhQWxs
b2NhdG9ySGFuZGxlOjpvd25lclVJRCk6IERlbGV0ZWQuCisgICAgICAgICogd3RmL1BsYXRmb3Jt
VXNlLmg6CisgICAgICAgICogd3RmL1JlZEJsYWNrVHJlZS5oOgorICAgICAgICAqIHd0Zi9TdGRM
aWJFeHRyYXMuaDoKKyAgICAgICAgKFdURjo6Y29uc3RydWN0Rml4ZWRTaXplQXJyYXlXaXRoQXJn
dW1lbnRzSW1wbCk6CisgICAgICAgIChXVEY6OmNvbnN0cnVjdEZpeGVkU2l6ZUFycmF5V2l0aEFy
Z3VtZW50cyk6CisKIDIwMjAtMDMtMTEgIEplciBOb2JsZSAgPGplci5ub2JsZUBhcHBsZS5jb20+
CiAKICAgICAgICAgQWRvcHQgQVZTYW1wbGVCdWZmZXJWaWRlb091dHB1dApJbmRleDogU291cmNl
L1dURi93dGYvTWV0YUFsbG9jYXRvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYv
TWV0YUFsbG9jYXRvci5jcHAJKHJldmlzaW9uIDI1ODM1MCkKKysrIFNvdXJjZS9XVEYvd3RmL01l
dGFBbGxvY2F0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01NCwyMiArNTQsMjEgQEAgTWV0YUFs
bG9jYXRvcjo6fk1ldGFBbGxvY2F0b3IoKQogI2VuZGlmCiB9CiAKLXZvaWQgTWV0YUFsbG9jYXRv
clRyYWNrZXI6Om5vdGlmeShNZXRhQWxsb2NhdG9ySGFuZGxlKiBoYW5kbGUpCit2b2lkIE1ldGFB
bGxvY2F0b3JUcmFja2VyOjpub3RpZnkoTWV0YUFsbG9jYXRvckhhbmRsZSYgaGFuZGxlKQogewot
ICAgIG1fYWxsb2NhdGlvbnMuaW5zZXJ0KGhhbmRsZSk7CisgICAgbV9hbGxvY2F0aW9ucy5pbnNl
cnQoJmhhbmRsZSk7CiB9CiAKLXZvaWQgTWV0YUFsbG9jYXRvclRyYWNrZXI6OnJlbGVhc2UoTWV0
YUFsbG9jYXRvckhhbmRsZSogaGFuZGxlKQordm9pZCBNZXRhQWxsb2NhdG9yVHJhY2tlcjo6cmVs
ZWFzZShNZXRhQWxsb2NhdG9ySGFuZGxlJiBoYW5kbGUpCiB7Ci0gICAgbV9hbGxvY2F0aW9ucy5y
ZW1vdmUoaGFuZGxlKTsKKyAgICBtX2FsbG9jYXRpb25zLnJlbW92ZSgmaGFuZGxlKTsKIH0KIAot
QUxXQVlTX0lOTElORSB2b2lkIE1ldGFBbGxvY2F0b3I6OnJlbGVhc2UoTWV0YUFsbG9jYXRvckhh
bmRsZSogaGFuZGxlKQordm9pZCBNZXRhQWxsb2NhdG9yOjpyZWxlYXNlKGNvbnN0IExvY2tIb2xk
ZXImLCBNZXRhQWxsb2NhdG9ySGFuZGxlJiBoYW5kbGUpCiB7Ci0gICAgTG9ja0hvbGRlciBsb2Nr
ZXIoJm1fbG9jayk7Ci0gICAgaWYgKGhhbmRsZS0+c2l6ZUluQnl0ZXMoKSkgewotICAgICAgICB2
b2lkKiBzdGFydCA9IGhhbmRsZS0+c3RhcnQoKS51bnRhZ2dlZFB0cigpOwotICAgICAgICBzaXpl
X3Qgc2l6ZUluQnl0ZXMgPSBoYW5kbGUtPnNpemVJbkJ5dGVzKCk7CisgICAgaWYgKGhhbmRsZS5z
aXplSW5CeXRlcygpKSB7CisgICAgICAgIHZvaWQqIHN0YXJ0ID0gaGFuZGxlLnN0YXJ0KCkudW50
YWdnZWRQdHIoKTsKKyAgICAgICAgc2l6ZV90IHNpemVJbkJ5dGVzID0gaGFuZGxlLnNpemVJbkJ5
dGVzKCk7CiAgICAgICAgIGRlY3JlbWVudFBhZ2VPY2N1cGFuY3koc3RhcnQsIHNpemVJbkJ5dGVz
KTsKICAgICAgICAgYWRkRnJlZVNwYWNlRnJvbVJlbGVhc2VkSGFuZGxlKEZyZWVTcGFjZVB0cihz
dGFydCksIHNpemVJbkJ5dGVzKTsKICAgICB9CkBAIC03OCwyMSArNzcsMTkgQEAgQUxXQVlTX0lO
TElORSB2b2lkIE1ldGFBbGxvY2F0b3I6OnJlbGVhcwogICAgICAgICBtX3RyYWNrZXItPnJlbGVh
c2UoaGFuZGxlKTsKIH0KIAotTWV0YUFsbG9jYXRvckhhbmRsZTo6TWV0YUFsbG9jYXRvckhhbmRs
ZShNZXRhQWxsb2NhdG9yKiBhbGxvY2F0b3IsIHZvaWQqIHN0YXJ0LCBzaXplX3Qgc2l6ZUluQnl0
ZXMsIHZvaWQqIG93bmVyVUlEKQorTWV0YUFsbG9jYXRvckhhbmRsZTo6TWV0YUFsbG9jYXRvckhh
bmRsZShNZXRhQWxsb2NhdG9yJiBhbGxvY2F0b3IsIHZvaWQqIHN0YXJ0LCBzaXplX3Qgc2l6ZUlu
Qnl0ZXMpCiAgICAgOiBtX2FsbG9jYXRvcihhbGxvY2F0b3IpCiAgICAgLCBtX3N0YXJ0KHN0YXJ0
KQogICAgICwgbV9lbmQocmVpbnRlcnByZXRfY2FzdDxjaGFyKj4oc3RhcnQpICsgc2l6ZUluQnl0
ZXMpCi0gICAgLCBtX293bmVyVUlEKG93bmVyVUlEKQogewotICAgIEFTU0VSVChhbGxvY2F0b3Ip
OwogICAgIEFTU0VSVChzdGFydCk7CiAgICAgQVNTRVJUKHNpemVJbkJ5dGVzKTsKIH0KIAogTWV0
YUFsbG9jYXRvckhhbmRsZTo6fk1ldGFBbGxvY2F0b3JIYW5kbGUoKQogewotICAgIEFTU0VSVCht
X2FsbG9jYXRvcik7Ci0gICAgbV9hbGxvY2F0b3ItPnJlbGVhc2UodGhpcyk7CisgICAgYXV0byBs
b2NrZXIgPSBob2xkTG9jayhhbGxvY2F0b3IoKS5tX2xvY2spOworICAgIGFsbG9jYXRvcigpLnJl
bGVhc2UobG9ja2VyLCAqdGhpcyk7CiB9CiAKIHZvaWQgTWV0YUFsbG9jYXRvckhhbmRsZTo6c2hy
aW5rKHNpemVfdCBuZXdTaXplSW5CeXRlcykKQEAgLTEwMCw5ICs5NywxMCBAQCB2b2lkIE1ldGFB
bGxvY2F0b3JIYW5kbGU6OnNocmluayhzaXplX3QgCiAgICAgc2l6ZV90IHNpemVJbkJ5dGVzID0g
dGhpcy0+c2l6ZUluQnl0ZXMoKTsKICAgICBBU1NFUlQobmV3U2l6ZUluQnl0ZXMgPD0gc2l6ZUlu
Qnl0ZXMpOwogCi0gICAgTG9ja0hvbGRlciBsb2NrZXIoJm1fYWxsb2NhdG9yLT5tX2xvY2spOwor
ICAgIE1ldGFBbGxvY2F0b3ImIGFsbG9jYXRvciA9IHRoaXMtPmFsbG9jYXRvcigpOworICAgIExv
Y2tIb2xkZXIgbG9ja2VyKCZhbGxvY2F0b3IubV9sb2NrKTsKIAotICAgIG5ld1NpemVJbkJ5dGVz
ID0gbV9hbGxvY2F0b3ItPnJvdW5kVXAobmV3U2l6ZUluQnl0ZXMpOworICAgIG5ld1NpemVJbkJ5
dGVzID0gYWxsb2NhdG9yLnJvdW5kVXAobmV3U2l6ZUluQnl0ZXMpOwogICAgIAogICAgIEFTU0VS
VChuZXdTaXplSW5CeXRlcyA8PSBzaXplSW5CeXRlcyk7CiAKQEAgLTExMywxMSArMTExLDExIEBA
IHZvaWQgTWV0YUFsbG9jYXRvckhhbmRsZTo6c2hyaW5rKHNpemVfdCAKICAgICBzaXplX3QgZnJl
ZVNpemUgPSBzaXplSW5CeXRlcyAtIG5ld1NpemVJbkJ5dGVzOwogICAgIHVpbnRwdHJfdCBmcmVl
RW5kID0gZnJlZVN0YXJ0ICsgZnJlZVNpemU7CiAgICAgCi0gICAgdWludHB0cl90IGZpcnN0Q29t
cGxldGVseUZyZWVQYWdlID0gKGZyZWVTdGFydCArIG1fYWxsb2NhdG9yLT5tX3BhZ2VTaXplIC0g
MSkgJiB+KG1fYWxsb2NhdG9yLT5tX3BhZ2VTaXplIC0gMSk7CisgICAgdWludHB0cl90IGZpcnN0
Q29tcGxldGVseUZyZWVQYWdlID0gKGZyZWVTdGFydCArIGFsbG9jYXRvci5tX3BhZ2VTaXplIC0g
MSkgJiB+KGFsbG9jYXRvci5tX3BhZ2VTaXplIC0gMSk7CiAgICAgaWYgKGZpcnN0Q29tcGxldGVs
eUZyZWVQYWdlIDwgZnJlZUVuZCkKLSAgICAgICAgbV9hbGxvY2F0b3ItPmRlY3JlbWVudFBhZ2VP
Y2N1cGFuY3kocmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oZmlyc3RDb21wbGV0ZWx5RnJlZVBhZ2Up
LCBmcmVlU2l6ZSAtIChmaXJzdENvbXBsZXRlbHlGcmVlUGFnZSAtIGZyZWVTdGFydCkpOworICAg
ICAgICBhbGxvY2F0b3IuZGVjcmVtZW50UGFnZU9jY3VwYW5jeShyZWludGVycHJldF9jYXN0PHZv
aWQqPihmaXJzdENvbXBsZXRlbHlGcmVlUGFnZSksIGZyZWVTaXplIC0gKGZpcnN0Q29tcGxldGVs
eUZyZWVQYWdlIC0gZnJlZVN0YXJ0KSk7CiAKLSAgICBtX2FsbG9jYXRvci0+YWRkRnJlZVNwYWNl
RnJvbVJlbGVhc2VkSGFuZGxlKE1ldGFBbGxvY2F0b3I6OkZyZWVTcGFjZVB0cihmcmVlU3RhcnQp
LCBmcmVlU2l6ZSk7CisgICAgYWxsb2NhdG9yLmFkZEZyZWVTcGFjZUZyb21SZWxlYXNlZEhhbmRs
ZShNZXRhQWxsb2NhdG9yOjpGcmVlU3BhY2VQdHIoZnJlZVN0YXJ0KSwgZnJlZVNpemUpOwogCiAg
ICAgbV9lbmQgPSBtX3N0YXJ0ICsgbmV3U2l6ZUluQnl0ZXM7CiB9CkBAIC0xMjcsMTMgKzEyNSwx
MyBAQCB2b2lkIE1ldGFBbGxvY2F0b3JIYW5kbGU6OmR1bXAoUHJpbnRTdHJlCiAgICAgb3V0LnBy
aW50KFJhd1BvaW50ZXIoc3RhcnQoKS51bnRhZ2dlZFB0cigpKSwgIi4uLiIsIFJhd1BvaW50ZXIo
ZW5kKCkudW50YWdnZWRQdHIoKSkpOwogfQogCi1NZXRhQWxsb2NhdG9yOjpNZXRhQWxsb2NhdG9y
KHNpemVfdCBhbGxvY2F0aW9uR3JhbnVsZSwgc2l6ZV90IHBhZ2VTaXplKQorTWV0YUFsbG9jYXRv
cjo6TWV0YUFsbG9jYXRvcihMb2NrJiBsb2NrLCBzaXplX3QgYWxsb2NhdGlvbkdyYW51bGUsIHNp
emVfdCBwYWdlU2l6ZSkKICAgICA6IG1fYWxsb2NhdGlvbkdyYW51bGUoYWxsb2NhdGlvbkdyYW51
bGUpCiAgICAgLCBtX3BhZ2VTaXplKHBhZ2VTaXplKQogICAgICwgbV9ieXRlc0FsbG9jYXRlZCgw
KQogICAgICwgbV9ieXRlc1Jlc2VydmVkKDApCiAgICAgLCBtX2J5dGVzQ29tbWl0dGVkKDApCi0g
ICAgLCBtX3RyYWNrZXIoMCkKKyAgICAsIG1fbG9jayhsb2NrKQogI2lmbmRlZiBOREVCVUcKICAg
ICAsIG1fbWFsbG9jQmFsYW5jZSgwKQogI2VuZGlmCkBAIC0xNTcsMTAgKzE1NSw4IEBAIE1ldGFB
bGxvY2F0b3I6Ok1ldGFBbGxvY2F0b3Ioc2l6ZV90IGFsbG8KICAgICBBU1NFUlQoc3RhdGljX2Nh
c3Q8c2l6ZV90PigxKSA8PCBtX2xvZ0FsbG9jYXRpb25HcmFudWxlID09IG1fYWxsb2NhdGlvbkdy
YW51bGUpOwogfQogCi1SZWZQdHI8TWV0YUFsbG9jYXRvckhhbmRsZT4gTWV0YUFsbG9jYXRvcjo6
YWxsb2NhdGUoc2l6ZV90IHNpemVJbkJ5dGVzLCB2b2lkKiBvd25lclVJRCkKK1JlZlB0cjxNZXRh
QWxsb2NhdG9ySGFuZGxlPiBNZXRhQWxsb2NhdG9yOjphbGxvY2F0ZShjb25zdCBMb2NrSG9sZGVy
Jiwgc2l6ZV90IHNpemVJbkJ5dGVzKQogewotICAgIExvY2tIb2xkZXIgbG9ja2VyKCZtX2xvY2sp
OwotCiAgICAgaWYgKCFzaXplSW5CeXRlcykKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAg
CkBAIC0xOTUsMTcgKzE5MSwxNiBAQCBSZWZQdHI8TWV0YUFsbG9jYXRvckhhbmRsZT4gTWV0YUFs
bG9jYXRvCiAgICAgbV9udW1BbGxvY2F0aW9ucysrOwogI2VuZGlmCiAKLSAgICBhdXRvIGhhbmRs
ZSA9IGFkb3B0UmVmKCpuZXcgTWV0YUFsbG9jYXRvckhhbmRsZSh0aGlzLCBzdGFydC51bnRhZ2dl
ZFB0cigpLCBzaXplSW5CeXRlcywgb3duZXJVSUQpKTsKKyAgICBhdXRvIGhhbmRsZSA9IGFkb3B0
UmVmKCpuZXcgTWV0YUFsbG9jYXRvckhhbmRsZSgqdGhpcywgc3RhcnQudW50YWdnZWRQdHIoKSwg
c2l6ZUluQnl0ZXMpKTsKIAogICAgIGlmIChVTkxJS0VMWSghIW1fdHJhY2tlcikpCi0gICAgICAg
IG1fdHJhY2tlci0+bm90aWZ5KGhhbmRsZS5wdHIoKSk7CisgICAgICAgIG1fdHJhY2tlci0+bm90
aWZ5KCpoYW5kbGUucHRyKCkpOwogCiAgICAgcmV0dXJuIGhhbmRsZTsKIH0KIAotTWV0YUFsbG9j
YXRvcjo6U3RhdGlzdGljcyBNZXRhQWxsb2NhdG9yOjpjdXJyZW50U3RhdGlzdGljcygpCitNZXRh
QWxsb2NhdG9yOjpTdGF0aXN0aWNzIE1ldGFBbGxvY2F0b3I6OmN1cnJlbnRTdGF0aXN0aWNzKGNv
bnN0IExvY2tIb2xkZXImKQogewotICAgIExvY2tIb2xkZXIgbG9ja2VyKCZtX2xvY2spOwogICAg
IFN0YXRpc3RpY3MgcmVzdWx0OwogICAgIHJlc3VsdC5ieXRlc0FsbG9jYXRlZCA9IG1fYnl0ZXNB
bGxvY2F0ZWQ7CiAgICAgcmVzdWx0LmJ5dGVzUmVzZXJ2ZWQgPSBtX2J5dGVzUmVzZXJ2ZWQ7Cklu
ZGV4OiBTb3VyY2UvV1RGL3d0Zi9NZXRhQWxsb2NhdG9yLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dURi93dGYvTWV0YUFsbG9jYXRvci5oCShyZXZpc2lvbiAyNTgzNTApCisrKyBTb3VyY2UvV1RG
L3d0Zi9NZXRhQWxsb2NhdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ0LDE1ICs0NCwxNSBAQCBu
YW1lc3BhY2UgV1RGIHsKIGNsYXNzIE1ldGFBbGxvY2F0b3JUcmFja2VyIHsKICAgICBXVEZfTUFL
RV9GQVNUX0FMTE9DQVRFRDsKIHB1YmxpYzoKLSAgICB2b2lkIG5vdGlmeShNZXRhQWxsb2NhdG9y
SGFuZGxlKik7Ci0gICAgdm9pZCByZWxlYXNlKE1ldGFBbGxvY2F0b3JIYW5kbGUqKTsKKyAgICB2
b2lkIG5vdGlmeShNZXRhQWxsb2NhdG9ySGFuZGxlJik7CisgICAgdm9pZCByZWxlYXNlKE1ldGFB
bGxvY2F0b3JIYW5kbGUmKTsKIAogICAgIE1ldGFBbGxvY2F0b3JIYW5kbGUqIGZpbmQodm9pZCog
YWRkcmVzcykKICAgICB7CiAgICAgICAgIE1ldGFBbGxvY2F0b3JIYW5kbGUqIGhhbmRsZSA9IG1f
YWxsb2NhdGlvbnMuZmluZEdyZWF0ZXN0TGVzc1RoYW5PckVxdWFsKGFkZHJlc3MpOwotICAgICAg
ICBpZiAoaGFuZGxlICYmIGFkZHJlc3MgPCBoYW5kbGUtPmVuZCgpLnVudGFnZ2VkUHRyKCkpCisg
ICAgICAgIGlmIChoYW5kbGUgJiYgaGFuZGxlLT5zdGFydCgpLnVudGFnZ2VkUHRyKCkgPD0gYWRk
cmVzcyAmJiBhZGRyZXNzIDwgaGFuZGxlLT5lbmQoKS51bnRhZ2dlZFB0cigpKQogICAgICAgICAg
ICAgcmV0dXJuIGhhbmRsZTsKLSAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIHJldHVybiBudWxs
cHRyOwogICAgIH0KIAogICAgIFJlZEJsYWNrVHJlZTxNZXRhQWxsb2NhdG9ySGFuZGxlLCB2b2lk
Kj4gbV9hbGxvY2F0aW9uczsKQEAgLTY0LDE3ICs2NCwyMiBAQCBjbGFzcyBNZXRhQWxsb2NhdG9y
IHsKIHB1YmxpYzoKICAgICB1c2luZyBGcmVlU3BhY2VQdHIgPSBNZXRhQWxsb2NhdG9yUHRyPEZy
ZWVTcGFjZVB0clRhZz47CiAKLSAgICBXVEZfRVhQT1JUX1BSSVZBVEUgTWV0YUFsbG9jYXRvcihz
aXplX3QgYWxsb2NhdGlvbkdyYW51bGUsIHNpemVfdCBwYWdlU2l6ZSA9IFdURjo6cGFnZVNpemUo
KSk7CisgICAgV1RGX0VYUE9SVF9QUklWQVRFIE1ldGFBbGxvY2F0b3IoTG9jayYsIHNpemVfdCBh
bGxvY2F0aW9uR3JhbnVsZSwgc2l6ZV90IHBhZ2VTaXplID0gV1RGOjpwYWdlU2l6ZSgpKTsKICAg
ICAKICAgICBXVEZfRVhQT1JUX1BSSVZBVEUgdmlydHVhbCB+TWV0YUFsbG9jYXRvcigpOwogICAg
IAotICAgIFdURl9FWFBPUlRfUFJJVkFURSBSZWZQdHI8TWV0YUFsbG9jYXRvckhhbmRsZT4gYWxs
b2NhdGUoc2l6ZV90IHNpemVJbkJ5dGVzLCB2b2lkKiBvd25lclVJRCk7CisgICAgQUxXQVlTX0lO
TElORSBSZWZQdHI8TWV0YUFsbG9jYXRvckhhbmRsZT4gYWxsb2NhdGUoc2l6ZV90IHNpemVJbkJ5
dGVzKQorICAgIHsKKyAgICAgICAgYXV0byBsb2NrZXIgPSBob2xkTG9jayhtX2xvY2spOworICAg
ICAgICByZXR1cm4gYWxsb2NhdGUobG9ja2VyLCBzaXplSW5CeXRlcyk7CisgICAgfQorICAgIFdU
Rl9FWFBPUlRfUFJJVkFURSBSZWZQdHI8TWV0YUFsbG9jYXRvckhhbmRsZT4gYWxsb2NhdGUoY29u
c3QgTG9ja0hvbGRlciYsIHNpemVfdCBzaXplSW5CeXRlcyk7CiAKICAgICB2b2lkIHRyYWNrQWxs
b2NhdGlvbnMoTWV0YUFsbG9jYXRvclRyYWNrZXIqIHRyYWNrZXIpCiAgICAgewogICAgICAgICBt
X3RyYWNrZXIgPSB0cmFja2VyOwogICAgIH0KLSAgICAKKwogICAgIC8vIE5vbi1hdG9taWMgbWV0
aG9kcyBmb3IgZ2V0dGluZyBhbGxvY2F0b3Igc3RhdGlzdGljcy4KICAgICBzaXplX3QgYnl0ZXNB
bGxvY2F0ZWQoKSB7IHJldHVybiBtX2J5dGVzQWxsb2NhdGVkOyB9CiAgICAgc2l6ZV90IGJ5dGVz
UmVzZXJ2ZWQoKSB7IHJldHVybiBtX2J5dGVzUmVzZXJ2ZWQ7IH0KQEAgLTg3LDcgKzkyLDEyIEBA
IHB1YmxpYzoKICAgICAgICAgc2l6ZV90IGJ5dGVzUmVzZXJ2ZWQ7CiAgICAgICAgIHNpemVfdCBi
eXRlc0NvbW1pdHRlZDsKICAgICB9OwotICAgIFdURl9FWFBPUlRfUFJJVkFURSBTdGF0aXN0aWNz
IGN1cnJlbnRTdGF0aXN0aWNzKCk7CisgICAgU3RhdGlzdGljcyBjdXJyZW50U3RhdGlzdGljcygp
CisgICAgeworICAgICAgICBhdXRvIGxvY2tlciA9IGhvbGRMb2NrKG1fbG9jayk7CisgICAgICAg
IHJldHVybiBjdXJyZW50U3RhdGlzdGljcyhsb2NrZXIpOworICAgIH0KKyAgICBXVEZfRVhQT1JU
X1BSSVZBVEUgU3RhdGlzdGljcyBjdXJyZW50U3RhdGlzdGljcyhjb25zdCBMb2NrSG9sZGVyJik7
CiAKICAgICAvLyBBZGQgbW9yZSBmcmVlIHNwYWNlIHRvIHRoZSBhbGxvY2F0b3IuIENhbGwgdGhp
cyBkaXJlY3RseSBmcm9tCiAgICAgLy8gdGhlIGNvbnN0cnVjdG9yIGlmIHlvdSB3aXNoIHRvIG9w
ZXJhdGUgdGhlIGFsbG9jYXRvciB3aXRoaW4gYQpAQCAtOTgsNyArMTA4LDYgQEAgcHVibGljOgog
ICAgIC8vIGJ1aWxkcy4KICAgICBXVEZfRVhQT1JUX1BSSVZBVEUgc2l6ZV90IGRlYnVnRnJlZVNw
YWNlU2l6ZSgpOwogCi0gICAgTG9jayYgZ2V0TG9jaygpIHsgcmV0dXJuIG1fbG9jazsgfQogICAg
IFdURl9FWFBPUlRfUFJJVkFURSBib29sIGlzSW5BbGxvY2F0ZWRNZW1vcnkoY29uc3QgQWJzdHJh
Y3RMb2NrZXImLCB2b2lkKiBhZGRyZXNzKTsKICAgICAKICNpZiBFTkFCTEUoTUVUQV9BTExPQ0FU
T1JfUFJPRklMRSkKQEAgLTEyMyw2ICsxMzIsOCBAQCBwcm90ZWN0ZWQ6CiAgICAgLy8gZGVzdHJ1
Y3Rpb24sIGluIHBhcnQgYmVjYXVzZSBhIE1ldGFBbGxvY2F0b3IgY2Fubm90IGRpZSBzbyBsb25n
CiAgICAgLy8gYXMgdGhlcmUgYXJlIEhhbmRsZXMgdGhhdCByZWZlciB0byBpdC4KIAorICAgIC8v
IFJlbGVhc2UgYSBNZXRhQWxsb2NhdG9ySGFuZGxlLgorICAgIHZpcnR1YWwgdm9pZCByZWxlYXNl
KGNvbnN0IExvY2tIb2xkZXImLCBNZXRhQWxsb2NhdG9ySGFuZGxlJik7CiBwcml2YXRlOgogICAg
IAogICAgIGZyaWVuZCBjbGFzcyBNZXRhQWxsb2NhdG9ySGFuZGxlOwpAQCAtMTUwLDkgKzE2MSw2
IEBAIHByaXZhdGU6CiAgICAgICAgIEZyZWVTcGFjZVB0ciBtX2VuZDsKICAgICB9OwogICAgIHR5
cGVkZWYgUmVkQmxhY2tUcmVlPEZyZWVTcGFjZU5vZGUsIHNpemVfdD4gVHJlZTsKLQotICAgIC8v
IFJlbGVhc2UgYSBNZXRhQWxsb2NhdG9ySGFuZGxlLgotICAgIHZvaWQgcmVsZWFzZShNZXRhQWxs
b2NhdG9ySGFuZGxlKik7CiAgICAgCiAgICAgLy8gUmVtb3ZlIGZyZWUgc3BhY2UgZnJvbSB0aGUg
YWxsb2NhdG9yLiBUaGlzIGlzIGVmZmVjdGl2ZWx5CiAgICAgLy8gdGhlIGFsbG9jYXRlKCkgZnVu
Y3Rpb24sIGV4Y2VwdCB0aGF0IGl0IGRvZXMgbm90IG1hcmsgdGhlCkBAIC0xOTMsOSArMjAxLDkg
QEAgcHJpdmF0ZToKICAgICBzaXplX3QgbV9ieXRlc1Jlc2VydmVkOwogICAgIHNpemVfdCBtX2J5
dGVzQ29tbWl0dGVkOwogICAgIAotICAgIExvY2sgbV9sb2NrOworICAgIExvY2smIG1fbG9jazsK
IAotICAgIE1ldGFBbGxvY2F0b3JUcmFja2VyKiBtX3RyYWNrZXI7CisgICAgTWV0YUFsbG9jYXRv
clRyYWNrZXIqIG1fdHJhY2tlciB7IG51bGxwdHIgfTsKIAogI2lmbmRlZiBOREVCVUcKICAgICBz
aXplX3QgbV9tYWxsb2NCYWxhbmNlOwpJbmRleDogU291cmNlL1dURi93dGYvTWV0YUFsbG9jYXRv
ckhhbmRsZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL01ldGFBbGxvY2F0b3JIYW5k
bGUuaAkocmV2aXNpb24gMjU4MzUwKQorKysgU291cmNlL1dURi93dGYvTWV0YUFsbG9jYXRvckhh
bmRsZS5oCSh3b3JraW5nIGNvcHkpCkBAIC00Miw3ICs0Miw3IEBAIERFQ0xBUkVfQUxMT0NBVE9S
X1dJVEhfSEVBUF9JREVOVElGSUVSKE0KIGNsYXNzIE1ldGFBbGxvY2F0b3JIYW5kbGUgOiBwdWJs
aWMgVGhyZWFkU2FmZVJlZkNvdW50ZWQ8TWV0YUFsbG9jYXRvckhhbmRsZT4sIHB1YmxpYyBSZWRC
bGFja1RyZWU8TWV0YUFsbG9jYXRvckhhbmRsZSwgdm9pZCo+OjpOb2RlIHsKICAgICBXVEZfTUFL
RV9GQVNUX0FMTE9DQVRFRF9XSVRIX0hFQVBfSURFTlRJRklFUihNZXRhQWxsb2NhdG9ySGFuZGxl
KTsKIHByaXZhdGU6Ci0gICAgTWV0YUFsbG9jYXRvckhhbmRsZShNZXRhQWxsb2NhdG9yKiwgdm9p
ZCogc3RhcnQsIHNpemVfdCBzaXplSW5CeXRlcywgdm9pZCogb3duZXJVSUQpOworICAgIE1ldGFB
bGxvY2F0b3JIYW5kbGUoTWV0YUFsbG9jYXRvciYsIHZvaWQqIHN0YXJ0LCBzaXplX3Qgc2l6ZUlu
Qnl0ZXMpOwogCiBwdWJsaWM6CiAgICAgdXNpbmcgTWVtb3J5UHRyID0gTWV0YUFsbG9jYXRvclB0
cjxIYW5kbGVNZW1vcnlQdHJUYWc+OwpAQCAtODYsMjIgKzg2LDExIEBAIHB1YmxpYzoKICAgICAg
ICAgCiAgICAgV1RGX0VYUE9SVF9QUklWQVRFIHZvaWQgc2hyaW5rKHNpemVfdCBuZXdTaXplSW5C
eXRlcyk7CiAgICAgCi0gICAgYm9vbCBpc01hbmFnZWQoKQorICAgIE1ldGFBbGxvY2F0b3ImIGFs
bG9jYXRvcigpCiAgICAgewotICAgICAgICByZXR1cm4gISFtX2FsbG9jYXRvcjsKLSAgICB9Ci0g
ICAgICAgIAotICAgIE1ldGFBbGxvY2F0b3IqIGFsbG9jYXRvcigpCi0gICAgewotICAgICAgICBB
U1NFUlQobV9hbGxvY2F0b3IpOwogICAgICAgICByZXR1cm4gbV9hbGxvY2F0b3I7CiAgICAgfQog
Ci0gICAgdm9pZCogb3duZXJVSUQoKQotICAgIHsKLSAgICAgICAgcmV0dXJuIG1fb3duZXJVSUQ7
Ci0gICAgfQotCiAgICAgdm9pZCoga2V5KCkKICAgICB7CiAgICAgICAgIHJldHVybiBtX3N0YXJ0
LnVudGFnZ2VkUHRyKCk7CkBAIC0xMTIsMTAgKzEwMSw5IEBAIHB1YmxpYzoKIHByaXZhdGU6CiAg
ICAgZnJpZW5kIGNsYXNzIE1ldGFBbGxvY2F0b3I7CiAgICAgCi0gICAgTWV0YUFsbG9jYXRvciog
bV9hbGxvY2F0b3I7CisgICAgTWV0YUFsbG9jYXRvciYgbV9hbGxvY2F0b3I7CiAgICAgTWVtb3J5
UHRyIG1fc3RhcnQ7CiAgICAgTWVtb3J5UHRyIG1fZW5kOwotICAgIHZvaWQqIG1fb3duZXJVSUQ7
CiB9OwogCiB9CkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9QbGF0Zm9ybVVzZS5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XVEYvd3RmL1BsYXRmb3JtVXNlLmgJKHJldmlzaW9uIDI1ODM1MCkKKysrIFNv
dXJjZS9XVEYvd3RmL1BsYXRmb3JtVXNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTMyNCwzICszMjQs
NyBAQAogI2lmIFBMQVRGT1JNKElPUykgJiYgX19JUEhPTkVfT1NfVkVSU0lPTl9NSU5fUkVRVUlS
RUQgPj0gMTQwMDAwCiAjZGVmaW5lIFVTRV9VVFRZUEVfU1dJWlpMRVIgMQogI2VuZGlmCisKKyNp
ZiBDUFUoQVJNNjQpICYmIENQVShBRERSRVNTNjQpCisjZGVmaW5lIFVTRV9KVU1QX0lTTEFORFMg
MQorI2VuZGlmCkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9SZWRCbGFja1RyZWUuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV1RGL3d0Zi9SZWRCbGFja1RyZWUuaAkocmV2aXNpb24gMjU4MzUwKQorKysg
U291cmNlL1dURi93dGYvUmVkQmxhY2tUcmVlLmgJKHdvcmtpbmcgY29weSkKQEAgLTMwLDYgKzMw
LDcgQEAKIAogI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+CiAjaW5jbHVkZSA8d3RmL05vbmNv
cHlhYmxlLmg+CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogCiBuYW1lc3BhY2UgV1RGIHsKIApA
QCAtMzI0LDYgKzMyNSwyNiBAQCBwdWJsaWM6CiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuIGJl
c3Q7CiAgICAgfQorCisgICAgdGVtcGxhdGUgPHR5cGVuYW1lIEZ1bmN0aW9uPgorICAgIHZvaWQg
aXRlcmF0ZShGdW5jdGlvbiBmdW5jdGlvbikKKyAgICB7CisgICAgICAgIGlmICghbV9yb290KQor
ICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIFZlY3RvcjxOb2RlVHlwZSosIDE2PiB0b0l0
ZXJhdGU7CisgICAgICAgIHRvSXRlcmF0ZS5hcHBlbmQobV9yb290KTsKKyAgICAgICAgd2hpbGUg
KHRvSXRlcmF0ZS5zaXplKCkpIHsKKyAgICAgICAgICAgIE5vZGVUeXBlJiBjdXJyZW50ID0gKnRv
SXRlcmF0ZS50YWtlTGFzdCgpOworICAgICAgICAgICAgYm9vbCBpdGVyYXRlTGVmdCA9IGZhbHNl
OworICAgICAgICAgICAgYm9vbCBpdGVyYXRlUmlnaHQgPSBmYWxzZTsKKyAgICAgICAgICAgIGZ1
bmN0aW9uKGN1cnJlbnQsIGl0ZXJhdGVMZWZ0LCBpdGVyYXRlUmlnaHQpOworICAgICAgICAgICAg
aWYgKGl0ZXJhdGVMZWZ0ICYmIGN1cnJlbnQubGVmdCgpKQorICAgICAgICAgICAgICAgIHRvSXRl
cmF0ZS5hcHBlbmQoY3VycmVudC5sZWZ0KCkpOworICAgICAgICAgICAgaWYgKGl0ZXJhdGVSaWdo
dCAmJiBjdXJyZW50LnJpZ2h0KCkpCisgICAgICAgICAgICAgICAgdG9JdGVyYXRlLmFwcGVuZChj
dXJyZW50LnJpZ2h0KCkpOworICAgICAgICB9CisgICAgfQogICAgIAogICAgIE5vZGVUeXBlKiBm
aXJzdCgpIGNvbnN0CiAgICAgewpJbmRleDogU291cmNlL1dURi93dGYvU3RkTGliRXh0cmFzLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvU3RkTGliRXh0cmFzLmgJKHJldmlzaW9uIDI1
ODM1MCkKKysrIFNvdXJjZS9XVEYvd3RmL1N0ZExpYkV4dHJhcy5oCSh3b3JraW5nIGNvcHkpCkBA
IC00ODksNiArNDg5LDE5IEBAIEFMV0FZU19JTkxJTkUgZGVjbHR5cGUoYXV0bykgbWFrZVVuaXF1
ZVcKICAgICByZXR1cm4gc3RkOjptYWtlX3VuaXF1ZTxUPihzdGQ6OmZvcndhcmQ8QXJncz4oYXJn
cykuLi4pOwogfQogCit0ZW1wbGF0ZSA8dHlwZW5hbWUgUmVzdWx0VHlwZSwgc2l6ZV90Li4uIElz
LCB0eXBlbmFtZSAuLi5BcmdzPgorY29uc3RleHByIGF1dG8gY29uc3RydWN0Rml4ZWRTaXplQXJy
YXlXaXRoQXJndW1lbnRzSW1wbChzdGQ6OmluZGV4X3NlcXVlbmNlPElzLi4uPiwgQXJncyYmLi4u
IGFyZ3MpIC0+IHN0ZDo6YXJyYXk8UmVzdWx0VHlwZSwgc2l6ZW9mLi4uKElzKT4KK3sKKyAgICBy
ZXR1cm4geyAoKHZvaWQpSXMsIFJlc3VsdFR5cGUgeyBzdGQ6OmZvcndhcmQ8QXJncz4oYXJncyku
Li4gfSkuLi4gfTsKK30KKworLy8gQ29uc3RydWN0IGFuIHN0ZDo6YXJyYXkgd2l0aCBOIGVsZW1l
bnRzIG9mIFJlc3VsdFR5cGUsIHBhc3NpbmcgQXJncyB0byBlYWNoIG9mIHRoZSBOIGNvbnN0cnVj
dG9ycy4KK3RlbXBsYXRlPHR5cGVuYW1lIFJlc3VsdFR5cGUsIHNpemVfdCBOLCB0eXBlbmFtZSAu
Li5BcmdzPgorY29uc3RleHByIGF1dG8gY29uc3RydWN0Rml4ZWRTaXplQXJyYXlXaXRoQXJndW1l
bnRzKEFyZ3MmJi4uLiBhcmdzKSAtPiBkZWNsdHlwZShhdXRvKQoreworICAgIGF1dG8gdHVwbGUg
PSBzdGQ6Om1ha2VfaW5kZXhfc2VxdWVuY2U8Tj4oKTsKKyAgICByZXR1cm4gY29uc3RydWN0Rml4
ZWRTaXplQXJyYXlXaXRoQXJndW1lbnRzSW1wbDxSZXN1bHRUeXBlPih0dXBsZSwgc3RkOjpmb3J3
YXJkPEFyZ3M+KGFyZ3MpLi4uKTsKK30KIAogfSAvLyBuYW1lc3BhY2UgV1RGCiAKQEAgLTUxNCwz
ICs1MjcsNCBAQCB1c2luZyBXVEY6OnNhZmVDYXN0OwogdXNpbmcgV1RGOjp0cnlCaW5hcnlTZWFy
Y2g7CiB1c2luZyBXVEY6Om1ha2VVbmlxdWU7CiB1c2luZyBXVEY6Om1ha2VVbmlxdWVXaXRob3V0
RmFzdE1hbGxvY0NoZWNrOwordXNpbmcgV1RGOjpjb25zdHJ1Y3RGaXhlZFNpemVBcnJheVdpdGhB
cmd1bWVudHM7CkluZGV4OiBUb29scy9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvQ2hh
bmdlTG9nCShyZXZpc2lvbiAyNTgzNTApCisrKyBUb29scy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29w
eSkKQEAgLTEsMyArMSwxMiBAQAorMjAyMC0wMy0xMiAgU2FhbSBCYXJhdGkgIDxzYmFyYXRpQGFw
cGxlLmNvbT4KKworICAgICAgICBJbXBsZW1lbnQgMUdCIG9mIGV4ZWN1dGFibGUgbWVtb3J5IG9u
IGFybTY0CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0y
MDg0OTAKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAq
IFNjcmlwdHMvcnVuLWpzYy1zdHJlc3MtdGVzdHM6CisKIDIwMjAtMDMtMTIgIFdlbnNvbiBIc2ll
aCAgPHdlbnNvbl9oc2llaEBhcHBsZS5jb20+CiAKICAgICAgICAgcnVuLXdlYmtpdC10ZXN0cyAt
LXVzZS1ncHUtcHJvY2VzcyBzaG91bGQgZW5hYmxlIEdQVSBQcm9jZXNzIGZvciBjYW52YXMKSW5k
ZXg6IFRvb2xzL1NjcmlwdHMvcnVuLWpzYy1zdHJlc3MtdGVzdHMKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9v
bHMvU2NyaXB0cy9ydW4tanNjLXN0cmVzcy10ZXN0cwkocmV2aXNpb24gMjU4MzUwKQorKysgVG9v
bHMvU2NyaXB0cy9ydW4tanNjLXN0cmVzcy10ZXN0cwkod29ya2luZyBjb3B5KQpAQCAtNTAsNiAr
NTAsNyBAQCBTQ1JJUFRTX1BBVEggPSBUSElTX1NDUklQVF9QQVRILmRpcm5hbWUKIFdFQktJVF9Q
QVRIID0gU0NSSVBUU19QQVRILmRpcm5hbWUuZGlybmFtZQogTEFZT1VUVEVTVFNfUEFUSCA9IFdF
QktJVF9QQVRIICsgIkxheW91dFRlc3RzIgogV0FTTVRFU1RTX1BBVEggPSBXRUJLSVRfUEFUSCAr
ICJKU1Rlc3RzL3dhc20iCitKRVRTVFJFQU0yX1BBVEggPSBXRUJLSVRfUEFUSCArICJQZXJmb3Jt
YW5jZVRlc3RzL0pldFN0cmVhbTIiCiBDSEFLUkFURVNUU19QQVRIID0gV0VCS0lUX1BBVEggKyAi
SlNUZXN0cy9DaGFrcmFDb3JlL3Rlc3QiCiByYWlzZSB1bmxlc3MgU0NSSVBUU19QQVRILmJhc2Vu
YW1lLnRvX3MgPT0gIlNjcmlwdHMiCiByYWlzZSB1bmxlc3MgU0NSSVBUU19QQVRILmRpcm5hbWUu
YmFzZW5hbWUudG9fcyA9PSAiVG9vbHMiCkBAIC02NjksNyArNjcwLDcgQEAgZGVmIHJ1bk5vQ0pJ
VFZhbGlkYXRlKCpvcHRpb25hbFRlc3RTcGVjaQogZW5kCiAKIGRlZiBydW5Ob0NKSVRWYWxpZGF0
ZVBoYXNlcygqb3B0aW9uYWxUZXN0U3BlY2lmaWNPcHRpb25zKQotICAgIHJ1bigibm8tY2ppdC12
YWxpZGF0ZS1waGFzZXMiLCAiLS12YWxpZGF0ZUJ5dGVjb2RlPXRydWUiLCAiLS12YWxpZGF0ZUdy
YXBoQXRFYWNoUGhhc2U9dHJ1ZSIsICItLXVzZVNvdXJjZVByb3ZpZGVyQ2FjaGU9ZmFsc2UiLCAq
KE5PX0NKSVRfT1BUSU9OUyArIG9wdGlvbmFsVGVzdFNwZWNpZmljT3B0aW9ucykpCisgICAgcnVu
KCJuby1jaml0LXZhbGlkYXRlLXBoYXNlcyIsICItLXZhbGlkYXRlQnl0ZWNvZGU9dHJ1ZSIsICIt
LXZhbGlkYXRlR3JhcGhBdEVhY2hQaGFzZT10cnVlIiwgIi0tdXNlU291cmNlUHJvdmlkZXJDYWNo
ZT1mYWxzZSIsICItLXVzZVJhbmRvbWl6aW5nRXhlY3V0YWJsZUlzbGFuZEFsbG9jYXRpb249dHJ1
ZSIsICooTk9fQ0pJVF9PUFRJT05TICsgb3B0aW9uYWxUZXN0U3BlY2lmaWNPcHRpb25zKSkKIGVu
ZAogCiBkZWYgcnVuTm9DSklUQ29sbGVjdENvbnRpbnVvdXNseSgqb3B0aW9uYWxUZXN0U3BlY2lm
aWNPcHRpb25zKQpAQCAtNzA2LDcgKzcwNyw3IEBAIGRlZiBydW5GVExOb0NKSVQoKm9wdGlvbmFs
VGVzdFNwZWNpZmljT3AKIGVuZAogCiBkZWYgcnVuRlRMTm9DSklUQjNPMCgqb3B0aW9uYWxUZXN0
U3BlY2lmaWNPcHRpb25zKQotICAgIHJ1bigiZnRsLW5vLWNqaXQtYjNvMCIsICItLXVzZUFycmF5
QWxsb2NhdGlvblByb2ZpbGluZz1mYWxzZSIsICItLWZvcmNlUG9seVByb3RvPXRydWUiLCAqKEZU
TF9PUFRJT05TICsgTk9fQ0pJVF9PUFRJT05TICsgQjNPMF9PUFRJT05TICsgRk9SQ0VfTExJTlRf
RVhJVF9PUFRJT05TICsgb3B0aW9uYWxUZXN0U3BlY2lmaWNPcHRpb25zKSkKKyAgICBydW4oImZ0
bC1uby1jaml0LWIzbzAiLCAiLS11c2VBcnJheUFsbG9jYXRpb25Qcm9maWxpbmc9ZmFsc2UiLCAi
LS1mb3JjZVBvbHlQcm90bz10cnVlIiwgIi0tdXNlUmFuZG9taXppbmdFeGVjdXRhYmxlSXNsYW5k
QWxsb2NhdGlvbj10cnVlIiwgKihGVExfT1BUSU9OUyArIE5PX0NKSVRfT1BUSU9OUyArIEIzTzBf
T1BUSU9OUyArIEZPUkNFX0xMSU5UX0VYSVRfT1BUSU9OUyArIG9wdGlvbmFsVGVzdFNwZWNpZmlj
T3B0aW9ucykpCiBlbmQKIAogZGVmIHJ1bkZUTE5vQ0pJVFZhbGlkYXRlKCpvcHRpb25hbFRlc3RT
cGVjaWZpY09wdGlvbnMpCkBAIC03MzQsNyArNzM1LDcgQEAgZGVmIHJ1bkRGR0VhZ2VyTm9DSklU
VmFsaWRhdGUoKm9wdGlvbmFsVAogZW5kCiAKIGRlZiBydW5GVExFYWdlcigqb3B0aW9uYWxUZXN0
U3BlY2lmaWNPcHRpb25zKQotICAgIHJ1bigiZnRsLWVhZ2VyIiwgIi0tYWlyRm9yY2VCcmlnZ3NB
bGxvY2F0b3I9dHJ1ZSIsICItLWZvcmNlUG9seVByb3RvPXRydWUiLCAqKEZUTF9PUFRJT05TICsg
RUFHRVJfT1BUSU9OUyArIENPTExFQ1RfQ09OVElOVU9VU0xZX09QVElPTlMgKyBvcHRpb25hbFRl
c3RTcGVjaWZpY09wdGlvbnMpKQorICAgIHJ1bigiZnRsLWVhZ2VyIiwgIi0tYWlyRm9yY2VCcmln
Z3NBbGxvY2F0b3I9dHJ1ZSIsICItLXVzZVJhbmRvbWl6aW5nRXhlY3V0YWJsZUlzbGFuZEFsbG9j
YXRpb249dHJ1ZSIsICItLWZvcmNlUG9seVByb3RvPXRydWUiLCAqKEZUTF9PUFRJT05TICsgRUFH
RVJfT1BUSU9OUyArIENPTExFQ1RfQ09OVElOVU9VU0xZX09QVElPTlMgKyBvcHRpb25hbFRlc3RT
cGVjaWZpY09wdGlvbnMpKQogZW5kCiAKIGRlZiBydW5GVExFYWdlcldhdGNoZG9nKCpvcHRpb25h
bFRlc3RTcGVjaWZpY09wdGlvbnMpCkBAIC03NzUsNyArNzc2LDcgQEAgZGVmIHJ1bk5vQ0pJVCgq
b3B0aW9uYWxUZXN0U3BlY2lmaWNPcHRpbwogZW5kCiAKIGRlZiBydW5FYWdlckpldHRpc29uTm9D
SklUKCpvcHRpb25hbFRlc3RTcGVjaWZpY09wdGlvbnMpCi0gICAgcnVuKCJlYWdlci1qZXR0aXNv
bi1uby1jaml0IiwgIi0tZm9yY2VDb2RlQmxvY2tUb0pldHRpc29uRHVlVG9PbGRBZ2U9dHJ1ZSIs
ICooTk9fQ0pJVF9PUFRJT05TICsgb3B0aW9uYWxUZXN0U3BlY2lmaWNPcHRpb25zKSkKKyAgICBy
dW4oImVhZ2VyLWpldHRpc29uLW5vLWNqaXQiLCAiLS11c2VSYW5kb21pemluZ0V4ZWN1dGFibGVJ
c2xhbmRBbGxvY2F0aW9uPXRydWUiLCAiLS1mb3JjZUNvZGVCbG9ja1RvSmV0dGlzb25EdWVUb09s
ZEFnZT10cnVlIiwgKihOT19DSklUX09QVElPTlMgKyBvcHRpb25hbFRlc3RTcGVjaWZpY09wdGlv
bnMpKQogZW5kCiAKIGRlZiBydW5TaGFkb3dDaGlja2VuKCpvcHRpb25hbFRlc3RTcGVjaWZpY09w
dGlvbnMpCkBAIC0xMDgzLDE2ICsxMDg0LDM3IEBAIGRlZiBydW5XZWJBc3NlbWJseQogICAgIHJ1
bigiZGVmYXVsdC13YXNtIiwgIi1tIiwgKkZUTF9PUFRJT05TKQogICAgIGlmICRtb2RlICE9ICJx
dWljayIKICAgICAgICAgcnVuKCJ3YXNtLW5vLWNqaXQteWVzLXRscy1jb250ZXh0IiwgIi1tIiwg
Ii0tdXNlRmFzdFRMU0Zvcldhc21Db250ZXh0PXRydWUiLCAqKEZUTF9PUFRJT05TICsgTk9fQ0pJ
VF9PUFRJT05TKSkKLSAgICAgICAgcnVuKCJ3YXNtLWVhZ2VyIiwgIi1tIiwgKihGVExfT1BUSU9O
UyArIEVBR0VSX09QVElPTlMpKQotICAgICAgICBydW4oIndhc20tZWFnZXItamV0dGlzb24iLCAi
LW0iLCAiLS1mb3JjZUNvZGVCbG9ja1RvSmV0dGlzb25EdWVUb09sZEFnZT10cnVlIiwgKkZUTF9P
UFRJT05TKQorICAgICAgICBydW4oIndhc20tZWFnZXIiLCAiLW0iLCAiLS11c2VSYW5kb21pemlu
Z0V4ZWN1dGFibGVJc2xhbmRBbGxvY2F0aW9uPXRydWUiLCAqKEZUTF9PUFRJT05TICsgRUFHRVJf
T1BUSU9OUykpCisgICAgICAgIHJ1bigid2FzbS1lYWdlci1qZXR0aXNvbiIsICItbSIsICItLWZv
cmNlQ29kZUJsb2NrVG9KZXR0aXNvbkR1ZVRvT2xkQWdlPXRydWUiLCAiLS11c2VSYW5kb21pemlu
Z0V4ZWN1dGFibGVJc2xhbmRBbGxvY2F0aW9uPXRydWUiLCAqRlRMX09QVElPTlMpCiAgICAgICAg
IHJ1bigid2FzbS1uby10bHMtY29udGV4dCIsICItbSIsICItLXVzZUZhc3RUTFNGb3JXYXNtQ29u
dGV4dD1mYWxzZSIsICpGVExfT1BUSU9OUykKICAgICAgICAgcnVuKCJ3YXNtLXNsb3ctbWVtb3J5
IiwgIi1tIiwgIi0tdXNlV2ViQXNzZW1ibHlGYXN0TWVtb3J5PWZhbHNlIiwgKkZUTF9PUFRJT05T
KQogICAgICAgICBydW4oIndhc20tYjMiLCAiLW0iLCAiLS11c2VXYXNtTExJbnQ9ZmFsc2UiLCAi
LS13YXNtQkJRVXNlc0Fpcj1mYWxzZSIsICpGVExfT1BUSU9OUykKLSAgICAgICAgcnVuKCJ3YXNt
LWFpciIsICItbSIsICItLXVzZVdhc21MTEludD1mYWxzZSIsICpGVExfT1BUSU9OUykKKyAgICAg
ICAgcnVuKCJ3YXNtLWFpciIsICItbSIsICItLXVzZVdhc21MTEludD1mYWxzZSIsICItLXVzZVJh
bmRvbWl6aW5nRXhlY3V0YWJsZUlzbGFuZEFsbG9jYXRpb249dHJ1ZSIsICpGVExfT1BUSU9OUykK
ICAgICAgICAgcnVuKCJ3YXNtLWNvbGxlY3QtY29udGludW91c2x5IiwgIi1tIiwgIi0tY29sbGVj
dENvbnRpbnVvdXNseT10cnVlIiwgKkZUTF9PUFRJT05TKSBpZiBzaG91bGRDb2xsZWN0Q29udGlu
dW91c2x5PwogICAgIGVuZAogZW5kCiAKK2RlZiBydW5XZWJBc3NlbWJseUpldFN0cmVhbTIKKyAg
ICByZXR1cm4gaWYgISRqaXRUZXN0cworICAgIHJldHVybiBpZiAhJGlzRlRMUGxhdGZvcm0KKwor
ICAgIHByZXBhcmVFeHRyYUFic29sdXRlRmlsZXMoSkVUU1RSRUFNMl9QQVRILCBbIkpldFN0cmVh
bURyaXZlci5qcyJdKQorICAgIHByZXBhcmVFeHRyYVJlbGF0aXZlRmlsZXNXaXRoQmFzZURpcmVj
dG9yeShEaXJbSkVUU1RSRUFNMl9QQVRIICsgIndhc20iICsgIiouanMiXS5tYXAgeyB8ZnwgIndh
c20vIiArIEZpbGUuYmFzZW5hbWUoZikgfSwgJGNvbGxlY3Rpb24uZGlybmFtZSwgJGV4dHJhRmls
ZXNCYXNlRGlyLmRpcm5hbWUpCisgICAgcHJlcGFyZUV4dHJhUmVsYXRpdmVGaWxlc1dpdGhCYXNl
RGlyZWN0b3J5KERpcltKRVRTVFJFQU0yX1BBVEggKyAid2FzbSIgKyAiKi53YXNtIl0ubWFwIHsg
fGZ8ICJ3YXNtLyIgKyBGaWxlLmJhc2VuYW1lKGYpIH0sICRjb2xsZWN0aW9uLmRpcm5hbWUsICRl
eHRyYUZpbGVzQmFzZURpci5kaXJuYW1lKQorCisgICAgcnVuKCJkZWZhdWx0LXdhc20iLCAqRlRM
X09QVElPTlMpCisgICAgaWYgJG1vZGUgIT0gInF1aWNrIgorICAgICAgICBydW4oIndhc20tbm8t
Y2ppdC15ZXMtdGxzLWNvbnRleHQiLCAiLS11c2VGYXN0VExTRm9yV2FzbUNvbnRleHQ9dHJ1ZSIs
ICooRlRMX09QVElPTlMgKyBOT19DSklUX09QVElPTlMpKQorICAgICAgICBydW4oIndhc20tZWFn
ZXIiLCAiLS11c2VSYW5kb21pemluZ0V4ZWN1dGFibGVJc2xhbmRBbGxvY2F0aW9uPXRydWUiLCAq
KEZUTF9PUFRJT05TICsgRUFHRVJfT1BUSU9OUykpCisgICAgICAgIHJ1bigid2FzbS1lYWdlci1q
ZXR0aXNvbiIsICItLWZvcmNlQ29kZUJsb2NrVG9KZXR0aXNvbkR1ZVRvT2xkQWdlPXRydWUiLCAq
RlRMX09QVElPTlMpCisgICAgICAgIHJ1bigid2FzbS1uby10bHMtY29udGV4dCIsICItLXVzZUZh
c3RUTFNGb3JXYXNtQ29udGV4dD1mYWxzZSIsICpGVExfT1BUSU9OUykKKyAgICAgICAgcnVuKCJ3
YXNtLXNsb3ctbWVtb3J5IiwgIi0tdXNlV2ViQXNzZW1ibHlGYXN0TWVtb3J5PWZhbHNlIiwgKkZU
TF9PUFRJT05TKQorICAgICAgICBydW4oIndhc20tYjMiLCAiLS11c2VXYXNtTExJbnQ9ZmFsc2Ui
LCAiLS13YXNtQkJRVXNlc0Fpcj1mYWxzZSIsICpGVExfT1BUSU9OUykKKyAgICAgICAgcnVuKCJ3
YXNtLWFpciIsICItLXVzZVdhc21MTEludD1mYWxzZSIsICItLXVzZVJhbmRvbWl6aW5nRXhlY3V0
YWJsZUlzbGFuZEFsbG9jYXRpb249dHJ1ZSIsICpGVExfT1BUSU9OUykKKyAgICAgICAgcnVuKCJ3
YXNtLWNvbGxlY3QtY29udGludW91c2x5IiwgIi0tY29sbGVjdENvbnRpbnVvdXNseT10cnVlIiwg
KkZUTF9PUFRJT05TKSBpZiBzaG91bGRDb2xsZWN0Q29udGludW91c2x5PworICAgIGVuZAorZW5k
CisKIGRlZiBydW5XZWJBc3NlbWJseVN1aXRlKCpvcHRpb25hbFRlc3RTcGVjaWZpY09wdGlvbnMp
CiAgICAgcmV0dXJuIGlmICEkaml0VGVzdHMKICAgICByZXR1cm4gaWYgISRpc0ZUTFBsYXRmb3Jt
CkBAIC0xMTAzLDExICsxMTI1LDExIEBAIGRlZiBydW5XZWJBc3NlbWJseVN1aXRlKCpvcHRpb25h
bFRlc3RTcGUKICAgICBpZiAkbW9kZSAhPSAicXVpY2siCiAgICAgICAgIHJ1bigid2FzbS1uby1j
aml0LXllcy10bHMtY29udGV4dCIsICItbSIsICItLXVzZUZhc3RUTFNGb3JXYXNtQ29udGV4dD10
cnVlIiwgKihGVExfT1BUSU9OUyArIE5PX0NKSVRfT1BUSU9OUyArIG9wdGlvbmFsVGVzdFNwZWNp
ZmljT3B0aW9ucykpCiAgICAgICAgIHJ1bigid2FzbS1lYWdlciIsICItbSIsICooRlRMX09QVElP
TlMgKyBFQUdFUl9PUFRJT05TICsgb3B0aW9uYWxUZXN0U3BlY2lmaWNPcHRpb25zKSkKLSAgICAg
ICAgcnVuKCJ3YXNtLWVhZ2VyLWpldHRpc29uIiwgIi1tIiwgIi0tZm9yY2VDb2RlQmxvY2tUb0pl
dHRpc29uRHVlVG9PbGRBZ2U9dHJ1ZSIsICooRlRMX09QVElPTlMgKyBvcHRpb25hbFRlc3RTcGVj
aWZpY09wdGlvbnMpKQorICAgICAgICBydW4oIndhc20tZWFnZXItamV0dGlzb24iLCAiLW0iLCAi
LS1mb3JjZUNvZGVCbG9ja1RvSmV0dGlzb25EdWVUb09sZEFnZT10cnVlIiwgIi0tdXNlUmFuZG9t
aXppbmdFeGVjdXRhYmxlSXNsYW5kQWxsb2NhdGlvbj10cnVlIiwgKihGVExfT1BUSU9OUyArIG9w
dGlvbmFsVGVzdFNwZWNpZmljT3B0aW9ucykpCiAgICAgICAgIHJ1bigid2FzbS1uby10bHMtY29u
dGV4dCIsICItbSIsICItLXVzZUZhc3RUTFNGb3JXYXNtQ29udGV4dD1mYWxzZSIsICooRlRMX09Q
VElPTlMgKyBvcHRpb25hbFRlc3RTcGVjaWZpY09wdGlvbnMpKQogICAgICAgICBydW4oIndhc20t
c2xvdy1tZW1vcnkiLCAiLW0iLCAiLS11c2VXZWJBc3NlbWJseUZhc3RNZW1vcnk9ZmFsc2UiLCAq
KEZUTF9PUFRJT05TICsgb3B0aW9uYWxUZXN0U3BlY2lmaWNPcHRpb25zKSkKICAgICAgICAgcnVu
KCJ3YXNtLWIzIiwgIi1tIiwgIi0tdXNlV2FzbUxMSW50PWZhbHNlIiwgIi0td2FzbUJCUVVzZXNB
aXI9ZmFsc2UiLCAqKEZUTF9PUFRJT05TICsgb3B0aW9uYWxUZXN0U3BlY2lmaWNPcHRpb25zKSkK
LSAgICAgICAgcnVuKCJ3YXNtLWFpciIsICItbSIsICItLXVzZVdhc21MTEludD1mYWxzZSIsICoo
RlRMX09QVElPTlMgKyBvcHRpb25hbFRlc3RTcGVjaWZpY09wdGlvbnMpKQorICAgICAgICBydW4o
Indhc20tYWlyIiwgIi1tIiwgIi0tdXNlV2FzbUxMSW50PWZhbHNlIiwgIi0tdXNlUmFuZG9taXpp
bmdFeGVjdXRhYmxlSXNsYW5kQWxsb2NhdGlvbj10cnVlIiwgKihGVExfT1BUSU9OUyArIG9wdGlv
bmFsVGVzdFNwZWNpZmljT3B0aW9ucykpCiAgICAgICAgIHJ1bigid2FzbS1jb2xsZWN0LWNvbnRp
bnVvdXNseSIsICItbSIsICItLWNvbGxlY3RDb250aW51b3VzbHk9dHJ1ZSIsICooRlRMX09QVElP
TlMgKyBvcHRpb25hbFRlc3RTcGVjaWZpY09wdGlvbnMpKSBpZiBzaG91bGRDb2xsZWN0Q29udGlu
dW91c2x5PwogICAgIGVuZAogZW5kCkBAIC0xMTMzLDExICsxMTU1LDExIEBAIGRlZiBydW5XZWJB
c3NlbWJseVdpdGhIYXJuZXNzKCpvcHRpb25hbFQKICAgICBpZiAkbW9kZSAhPSAicXVpY2siCiAg
ICAgICAgIHJ1bkhhcm5lc3NUZXN0KCJ3YXNtLW5vLWNqaXQteWVzLXRscy1jb250ZXh0IiwgIi0t
dXNlRmFzdFRMU0Zvcldhc21Db250ZXh0PXRydWUiLCAqKEZUTF9PUFRJT05TICsgTk9fQ0pJVF9P
UFRJT05TICsgb3B0aW9uYWxUZXN0U3BlY2lmaWNPcHRpb25zKSkKICAgICAgICAgcnVuSGFybmVz
c1Rlc3QoIndhc20tZWFnZXIiLCAqKEZUTF9PUFRJT05TICsgRUFHRVJfT1BUSU9OUyArIG9wdGlv
bmFsVGVzdFNwZWNpZmljT3B0aW9ucykpCi0gICAgICAgIHJ1bkhhcm5lc3NUZXN0KCJ3YXNtLWVh
Z2VyLWpldHRpc29uIiwgIi0tZm9yY2VDb2RlQmxvY2tUb0pldHRpc29uRHVlVG9PbGRBZ2U9dHJ1
ZSIsICooRlRMX09QVElPTlMgKyBvcHRpb25hbFRlc3RTcGVjaWZpY09wdGlvbnMpKQorICAgICAg
ICBydW5IYXJuZXNzVGVzdCgid2FzbS1lYWdlci1qZXR0aXNvbiIsICItLWZvcmNlQ29kZUJsb2Nr
VG9KZXR0aXNvbkR1ZVRvT2xkQWdlPXRydWUiLCAiLS11c2VSYW5kb21pemluZ0V4ZWN1dGFibGVJ
c2xhbmRBbGxvY2F0aW9uPXRydWUiLCAqKEZUTF9PUFRJT05TICsgb3B0aW9uYWxUZXN0U3BlY2lm
aWNPcHRpb25zKSkKICAgICAgICAgcnVuSGFybmVzc1Rlc3QoIndhc20tbm8tdGxzLWNvbnRleHQi
LCAiLS11c2VGYXN0VExTRm9yV2FzbUNvbnRleHQ9ZmFsc2UiLCAqKEZUTF9PUFRJT05TICsgb3B0
aW9uYWxUZXN0U3BlY2lmaWNPcHRpb25zKSkKICAgICAgICAgcnVuSGFybmVzc1Rlc3QoIndhc20t
c2xvdy1tZW1vcnkiLCAiLS11c2VXZWJBc3NlbWJseUZhc3RNZW1vcnk9ZmFsc2UiLCAqKEZUTF9P
UFRJT05TICsgb3B0aW9uYWxUZXN0U3BlY2lmaWNPcHRpb25zKSkKICAgICAgICAgcnVuSGFybmVz
c1Rlc3QoIndhc20tYjMiLCAiLS11c2VXYXNtTExJbnQ9ZmFsc2UiLCAiLS13YXNtQkJRVXNlc0Fp
cj1mYWxzZSIsICooRlRMX09QVElPTlMgKyBvcHRpb25hbFRlc3RTcGVjaWZpY09wdGlvbnMpKQot
ICAgICAgICBydW5IYXJuZXNzVGVzdCgid2FzbS1uby1haXIiLCAiLS11c2VXYXNtTExJbnQ9ZmFs
c2UiLCAqKEZUTF9PUFRJT05TICsgb3B0aW9uYWxUZXN0U3BlY2lmaWNPcHRpb25zKSkKKyAgICAg
ICAgcnVuSGFybmVzc1Rlc3QoIndhc20tbm8tYWlyIiwgIi0tdXNlV2FzbUxMSW50PWZhbHNlIiwg
Ii0tdXNlUmFuZG9taXppbmdFeGVjdXRhYmxlSXNsYW5kQWxsb2NhdGlvbj10cnVlIiwgKihGVExf
T1BUSU9OUyArIG9wdGlvbmFsVGVzdFNwZWNpZmljT3B0aW9ucykpCiAgICAgICAgIHJ1bkhhcm5l
c3NUZXN0KCJ3YXNtLWNvbGxlY3QtY29udGludW91c2x5IiwgIi0tY29sbGVjdENvbnRpbnVvdXNs
eT10cnVlIiwgKihGVExfT1BUSU9OUyArIG9wdGlvbmFsVGVzdFNwZWNpZmljT3B0aW9ucykpIGlm
IHNob3VsZENvbGxlY3RDb250aW51b3VzbHk/CiAgICAgZW5kCiBlbmQKQEAgLTExNTQsMTAgKzEx
NzYsMTAgQEAgZGVmIHJ1bldlYkFzc2VtYmx5RW1zY3JpcHRlbihtb2RlKQogICAgIHJ1bigiZGVm
YXVsdC13YXNtIiwgKkZUTF9PUFRJT05TKQogICAgIGlmICRtb2RlICE9ICJxdWljayIKICAgICAg
ICAgcnVuKCJ3YXNtLW5vLWNqaXQteWVzLXRscy1jb250ZXh0IiwgIi0tdXNlRmFzdFRMU0Zvcldh
c21Db250ZXh0PXRydWUiLCAqKEZUTF9PUFRJT05TICsgTk9fQ0pJVF9PUFRJT05TKSkKLSAgICAg
ICAgcnVuKCJ3YXNtLWVhZ2VyLWpldHRpc29uIiwgIi0tZm9yY2VDb2RlQmxvY2tUb0pldHRpc29u
RHVlVG9PbGRBZ2U9dHJ1ZSIsICpGVExfT1BUSU9OUykKKyAgICAgICAgcnVuKCJ3YXNtLWVhZ2Vy
LWpldHRpc29uIiwgIi0tZm9yY2VDb2RlQmxvY2tUb0pldHRpc29uRHVlVG9PbGRBZ2U9dHJ1ZSIs
ICItLXVzZVJhbmRvbWl6aW5nRXhlY3V0YWJsZUlzbGFuZEFsbG9jYXRpb249dHJ1ZSIsICpGVExf
T1BUSU9OUykKICAgICAgICAgcnVuKCJ3YXNtLW5vLXRscy1jb250ZXh0IiwgIi0tdXNlRmFzdFRM
U0Zvcldhc21Db250ZXh0PWZhbHNlIiwgKkZUTF9PUFRJT05TKQogICAgICAgICBydW4oIndhc20t
YjMiLCAiLS11c2VXYXNtTExJbnQ9ZmFsc2UiLCAiLS13YXNtQkJRVXNlc0Fpcj1mYWxzZSIsICpG
VExfT1BUSU9OUykKLSAgICAgICAgcnVuKCJ3YXNtLWFpciIsICItLXVzZVdhc21MTEludD1mYWxz
ZSIsICpGVExfT1BUSU9OUykKKyAgICAgICAgcnVuKCJ3YXNtLWFpciIsICItLXVzZVdhc21MTElu
dD1mYWxzZSIsICItLXVzZVJhbmRvbWl6aW5nRXhlY3V0YWJsZUlzbGFuZEFsbG9jYXRpb249dHJ1
ZSIsICpGVExfT1BUSU9OUykKICAgICAgICAgcnVuKCJ3YXNtLWNvbGxlY3QtY29udGludW91c2x5
IiwgIi0tY29sbGVjdENvbnRpbnVvdXNseT10cnVlIiwgKkZUTF9PUFRJT05TKSBpZiBzaG91bGRD
b2xsZWN0Q29udGludW91c2x5PwogICAgIGVuZAogZW5kCkBAIC0xMTgwLDEwICsxMjAyLDEwIEBA
IGRlZiBydW5XZWJBc3NlbWJseVNwZWNUZXN0KG1vZGUpCiAgICAgcnVuV2l0aE91dHB1dEhhbmRs
ZXIoImRlZmF1bHQtd2FzbSIsIG5vaXN5T3V0cHV0SGFuZGxlciwgIi4uL3NwZWMtaGFybmVzcy5q
cyIsICpGVExfT1BUSU9OUykKICAgICBpZiAkbW9kZSAhPSAicXVpY2siCiAgICAgICBydW5XaXRo
T3V0cHV0SGFuZGxlcigid2FzbS1uby1jaml0LXllcy10bHMtY29udGV4dCIsIG5vaXN5T3V0cHV0
SGFuZGxlciwgIi4uL3NwZWMtaGFybmVzcy5qcyIsICAiLS11c2VGYXN0VExTRm9yV2FzbUNvbnRl
eHQ9dHJ1ZSIsICooRlRMX09QVElPTlMgKyBOT19DSklUX09QVElPTlMpKQotICAgICAgcnVuV2l0
aE91dHB1dEhhbmRsZXIoIndhc20tZWFnZXItamV0dGlzb24iLCBub2lzeU91dHB1dEhhbmRsZXIs
ICIuLi9zcGVjLWhhcm5lc3MuanMiLCAiLS1mb3JjZUNvZGVCbG9ja1RvSmV0dGlzb25EdWVUb09s
ZEFnZT10cnVlIiwgKkZUTF9PUFRJT05TKQorICAgICAgcnVuV2l0aE91dHB1dEhhbmRsZXIoIndh
c20tZWFnZXItamV0dGlzb24iLCBub2lzeU91dHB1dEhhbmRsZXIsICIuLi9zcGVjLWhhcm5lc3Mu
anMiLCAiLS1mb3JjZUNvZGVCbG9ja1RvSmV0dGlzb25EdWVUb09sZEFnZT10cnVlIiwgIi0tdXNl
UmFuZG9taXppbmdFeGVjdXRhYmxlSXNsYW5kQWxsb2NhdGlvbj10cnVlIiwgKkZUTF9PUFRJT05T
KQogICAgICAgcnVuV2l0aE91dHB1dEhhbmRsZXIoIndhc20tbm8tdGxzLWNvbnRleHQiLCBub2lz
eU91dHB1dEhhbmRsZXIsICIuLi9zcGVjLWhhcm5lc3MuanMiLCAiLS11c2VGYXN0VExTRm9yV2Fz
bUNvbnRleHQ9ZmFsc2UiLCAqRlRMX09QVElPTlMpCiAgICAgICBydW5XaXRoT3V0cHV0SGFuZGxl
cigid2FzbS1iMyIsIG5vaXN5T3V0cHV0SGFuZGxlciwgIi4uL3NwZWMtaGFybmVzcy5qcyIsICIt
LXVzZVdhc21MTEludD1mYWxzZSIsICItLXdhc21CQlFVc2VzQWlyPWZhbHNlIiwgKkZUTF9PUFRJ
T05TKQotICAgICAgcnVuV2l0aE91dHB1dEhhbmRsZXIoIndhc20tYWlyIiwgbm9pc3lPdXRwdXRI
YW5kbGVyLCAiLi4vc3BlYy1oYXJuZXNzLmpzIiwgIi0tdXNlV2FzbUxMSW50PWZhbHNlIiwgKkZU
TF9PUFRJT05TKQorICAgICAgcnVuV2l0aE91dHB1dEhhbmRsZXIoIndhc20tYWlyIiwgbm9pc3lP
dXRwdXRIYW5kbGVyLCAiLi4vc3BlYy1oYXJuZXNzLmpzIiwgIi0tdXNlV2FzbUxMSW50PWZhbHNl
IiwgIi0tdXNlUmFuZG9taXppbmdFeGVjdXRhYmxlSXNsYW5kQWxsb2NhdGlvbj10cnVlIiwgKkZU
TF9PUFRJT05TKQogICAgICAgcnVuV2l0aE91dHB1dEhhbmRsZXIoIndhc20tY29sbGVjdC1jb250
aW51b3VzbHkiLCBub2lzeU91dHB1dEhhbmRsZXIsICIuLi9zcGVjLWhhcm5lc3MuanMiLCAiLS1j
b2xsZWN0Q29udGludW91c2x5PXRydWUiLCAqRlRMX09QVElPTlMpIGlmIHNob3VsZENvbGxlY3RD
b250aW51b3VzbHk/CiAgICAgZW5kCiBlbmQKQEAgLTEzNTIsMTcgKzEzNzQsMjEgQEAgZGVmIG5v
Tm9MTEludFJ1bkxheW91dFRlc3QKICAgICBlbmQKIGVuZAogCi1kZWYgcHJlcGFyZUV4dHJhUmVs
YXRpdmVGaWxlcyhleHRyYUZpbGVzLCBkZXN0aW5hdGlvbikKK2RlZiBwcmVwYXJlRXh0cmFSZWxh
dGl2ZUZpbGVzV2l0aEJhc2VEaXJlY3RvcnkoZXh0cmFGaWxlcywgZGVzdGluYXRpb24sIGJhc2VE
aXJlY3RvcnkpCiAgICAgRGlyLmNoZGlyKCRvdXRwdXREaXIpIHsKICAgICAgICAgZXh0cmFGaWxl
cy5lYWNoIHsKICAgICAgICAgICAgIHwgZmlsZSB8CiAgICAgICAgICAgICBkZXN0ID0gZGVzdGlu
YXRpb24gKyBmaWxlCiAgICAgICAgICAgICBGaWxlVXRpbHMubWtkaXJfcChkZXN0LmRpcm5hbWUp
Ci0gICAgICAgICAgICBGaWxlVXRpbHMuY3AgJGV4dHJhRmlsZXNCYXNlRGlyICsgZmlsZSwgZGVz
dAorICAgICAgICAgICAgRmlsZVV0aWxzLmNwIGJhc2VEaXJlY3RvcnkgKyBmaWxlLCBkZXN0CiAg
ICAgICAgIH0KICAgICB9CiBlbmQKIAorZGVmIHByZXBhcmVFeHRyYVJlbGF0aXZlRmlsZXMoZXh0
cmFGaWxlcywgZGVzdGluYXRpb24pCisgICAgcHJlcGFyZUV4dHJhUmVsYXRpdmVGaWxlc1dpdGhC
YXNlRGlyZWN0b3J5KGV4dHJhRmlsZXMsIGRlc3RpbmF0aW9uLCAkZXh0cmFGaWxlc0Jhc2VEaXIp
CitlbmQKKwogZGVmIGJhc2VEaXJGb3JDb2xsZWN0aW9uKGNvbGxlY3Rpb25OYW1lKQogICAgIFBh
dGhuYW1lKCIudGVzdHMiKSArIGNvbGxlY3Rpb25OYW1lCiBlbmQKSW5kZXg6IFRvb2xzL1Rlc3RX
ZWJLaXRBUEkvVGVzdHMvV1RGL01ldGFBbGxvY2F0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xz
L1Rlc3RXZWJLaXRBUEkvVGVzdHMvV1RGL01ldGFBbGxvY2F0b3IuY3BwCShyZXZpc2lvbiAyNTgz
NTApCisrKyBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dURi9NZXRhQWxsb2NhdG9yLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtNTIsNyArNTIsNyBAQCBwdWJsaWM6CiAgICAgY2xhc3MgU2ltcGxl
VGVzdEFsbG9jYXRvcjogcHVibGljIE1ldGFBbGxvY2F0b3IgewogICAgIHB1YmxpYzoKICAgICAg
ICAgU2ltcGxlVGVzdEFsbG9jYXRvcihNZXRhQWxsb2NhdG9yVGVzdCogcGFyZW50KQotICAgICAg
ICAgICAgOiBNZXRhQWxsb2NhdG9yKDMyKQorICAgICAgICAgICAgOiBNZXRhQWxsb2NhdG9yKG1f
bG9jaywgMzIpCiAgICAgICAgICAgICAsIG1fcGFyZW50KHBhcmVudCkKICAgICAgICAgewogICAg
ICAgICAgICAgYWRkRnJlc2hGcmVlU3BhY2UocmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oYmFzZVBh
Z2UgKiBwYWdlU2l6ZSgpKSwgZGVmYXVsdFBhZ2VzSW5IZWFwICogcGFnZVNpemUoKSk7CkBAIC0x
MjksNiArMTI5LDcgQEAgcHVibGljOgogICAgICAgICB9CiAgICAgICAgIAogICAgIHByaXZhdGU6
CisgICAgICAgIExvY2sgbV9sb2NrOwogICAgICAgICBNZXRhQWxsb2NhdG9yVGVzdCogbV9wYXJl
bnQ7CiAgICAgfTsKIApAQCAtMTkwLDcgKzE5MSw3IEBAIHB1YmxpYzoKICAgICAKICAgICBNZXRh
QWxsb2NhdG9ySGFuZGxlKiBhbGxvY2F0ZShzaXplX3Qgc2l6ZUluQnl0ZXMsIFNhbml0eUNoZWNr
TW9kZSBzYW5pdHlDaGVja01vZGUgPSBSdW5TYW5pdHlDaGVjaykKICAgICB7Ci0gICAgICAgIE1l
dGFBbGxvY2F0b3JIYW5kbGUqIGhhbmRsZSA9IGFsbG9jYXRvci0+YWxsb2NhdGUoc2l6ZUluQnl0
ZXMsIDApLmxlYWtSZWYoKTsKKyAgICAgICAgTWV0YUFsbG9jYXRvckhhbmRsZSogaGFuZGxlID0g
YWxsb2NhdG9yLT5hbGxvY2F0ZShzaXplSW5CeXRlcykubGVha1JlZigpOwogICAgICAgICBFWFBF
Q1RfVFJVRShoYW5kbGUpOwogICAgICAgICBFWFBFQ1RfRVEoaGFuZGxlLT5zaXplSW5CeXRlcygp
LCBzaXplSW5CeXRlcyk7CiAgICAgICAgIApAQCAtNDcyLDcgKzQ3Myw3IEBAIHB1YmxpYzoKICAg
ICAgICAgCiAgICAgICAgIHNhbml0eUNoZWNrKCk7CiAgICAgICAgIAotICAgICAgICBFWFBFQ1Rf
VFJVRSghYWxsb2NhdG9yLT5hbGxvY2F0ZShzaXplSW5CeXRlcywgMCkpOworICAgICAgICBFWFBF
Q1RfVFJVRSghYWxsb2NhdG9yLT5hbGxvY2F0ZShzaXplSW5CeXRlcykpOwogICAgICAgICAKICAg
ICAgICAgZm9yIChzaXplX3QgaW5kZXggPSAwOyBpbmRleCA8IG51bUFsbG9jYXRpb25zOyArK2lu
ZGV4KQogICAgICAgICAgICAgZnJlZShoYW5kbGVzLmF0KGluZGV4KSwgRG9udFJ1blNhbml0eUNo
ZWNrKTsKQEAgLTU3OSw3ICs1ODAsNyBAQCBwdWJsaWM6CiAgICAgICAgIHNhbml0eUNoZWNrKCk7
CiAgICAgICAgIAogICAgICAgICAvLyBBc3NlcnQgdGhhdCB0aGUgaGVhcCBpcyBub3QgZW1wdHku
Ci0gICAgICAgIEVYUEVDVF9UUlVFKCFhbGxvY2F0b3ItPmFsbG9jYXRlKGRlZmF1bHRQYWdlc0lu
SGVhcCAqIHBhZ2VTaXplKCksIDApKTsKKyAgICAgICAgRVhQRUNUX1RSVUUoIWFsbG9jYXRvci0+
YWxsb2NhdGUoZGVmYXVsdFBhZ2VzSW5IZWFwICogcGFnZVNpemUoKSkpOwogICAgICAgICAKICAg
ICAgICAgLy8gQWxsb2NhdGUgdGhlIHJlbWFpbmRlciBvZiB0aGUgaGVhcC4KICAgICAgICAgTWV0
YUFsbG9jYXRvckhhbmRsZSogcmVtYWluZGVyID0gYWxsb2NhdGUoZGVmYXVsdFBhZ2VzSW5IZWFw
ICogcGFnZVNpemUoKSAtIHNlY29uZFNpemUpOwpAQCAtNTk3LDEyICs1OTgsMTIgQEAgcHVibGlj
OgogICAgIAogICAgIHZvaWQgdGVzdERlbWFuZEFsbG9jQ29hbGVzY2Uoc2l6ZV90IGZpcnN0U2l6
ZSwgc2l6ZV90IG51bVBhZ2VzLCBzaXplX3Qgc2Vjb25kU2l6ZSkKICAgICB7Ci0gICAgICAgIEVY
UEVDVF9UUlVFKCFhbGxvY2F0b3ItPmFsbG9jYXRlKChkZWZhdWx0UGFnZXNJbkhlYXAgKyBudW1Q
YWdlcykgKiBwYWdlU2l6ZSgpLCAwKSk7CisgICAgICAgIEVYUEVDVF9UUlVFKCFhbGxvY2F0b3It
PmFsbG9jYXRlKChkZWZhdWx0UGFnZXNJbkhlYXAgKyBudW1QYWdlcykgKiBwYWdlU2l6ZSgpKSk7
CiAgICAgICAgIAogICAgICAgICBNZXRhQWxsb2NhdG9ySGFuZGxlKiBmaXJzdEhhbmRsZSA9IGFs
bG9jYXRlKGZpcnN0U2l6ZSk7CiAgICAgICAgIAotICAgICAgICBFWFBFQ1RfVFJVRSghYWxsb2Nh
dG9yLT5hbGxvY2F0ZShzZWNvbmRTaXplLCAwKSk7Ci0gICAgICAgIEVYUEVDVF9UUlVFKCFhbGxv
Y2F0b3ItPmFsbG9jYXRlKChkZWZhdWx0UGFnZXNJbkhlYXAgKyBudW1QYWdlcykgKiBwYWdlU2l6
ZSgpLCAwKSk7CisgICAgICAgIEVYUEVDVF9UUlVFKCFhbGxvY2F0b3ItPmFsbG9jYXRlKHNlY29u
ZFNpemUpKTsKKyAgICAgICAgRVhQRUNUX1RSVUUoIWFsbG9jYXRvci0+YWxsb2NhdGUoKGRlZmF1
bHRQYWdlc0luSGVhcCArIG51bVBhZ2VzKSAqIHBhZ2VTaXplKCkpKTsKICAgICAgICAgCiAgICAg
ICAgIGN1cnJlbnRIZWFwR3Jvd3RoTW9kZSA9IEZvclRlc3REZW1hbmRBbGxvY0NvYWxlc2NlOwog
ICAgICAgICBhbGxvd0FsbG9jYXRlUGFnZXMgPSBudW1QYWdlczsKQEAgLTYyNiwxMiArNjI3LDEy
IEBAIHB1YmxpYzoKICAgICB7CiAgICAgICAgIGZyZWUoYWxsb2NhdGUoZmlyc3RTaXplKSk7CiAg
ICAgICAgIGZyZWUoYWxsb2NhdGUoZGVmYXVsdFBhZ2VzSW5IZWFwICogcGFnZVNpemUoKSkpOwot
ICAgICAgICBFWFBFQ1RfVFJVRSghYWxsb2NhdG9yLT5hbGxvY2F0ZSgoZGVmYXVsdFBhZ2VzSW5I
ZWFwICsgbnVtUGFnZXMpICogcGFnZVNpemUoKSwgMCkpOworICAgICAgICBFWFBFQ1RfVFJVRSgh
YWxsb2NhdG9yLT5hbGxvY2F0ZSgoZGVmYXVsdFBhZ2VzSW5IZWFwICsgbnVtUGFnZXMpICogcGFn
ZVNpemUoKSkpOwogICAgICAgICAKICAgICAgICAgTWV0YUFsbG9jYXRvckhhbmRsZSogZmlyc3RI
YW5kbGUgPSBhbGxvY2F0ZShmaXJzdFNpemUpOwogICAgICAgICAKLSAgICAgICAgRVhQRUNUX1RS
VUUoIWFsbG9jYXRvci0+YWxsb2NhdGUoc2Vjb25kU2l6ZSwgMCkpOwotICAgICAgICBFWFBFQ1Rf
VFJVRSghYWxsb2NhdG9yLT5hbGxvY2F0ZSgoZGVmYXVsdFBhZ2VzSW5IZWFwICsgbnVtUGFnZXMp
ICogcGFnZVNpemUoKSwgMCkpOworICAgICAgICBFWFBFQ1RfVFJVRSghYWxsb2NhdG9yLT5hbGxv
Y2F0ZShzZWNvbmRTaXplKSk7CisgICAgICAgIEVYUEVDVF9UUlVFKCFhbGxvY2F0b3ItPmFsbG9j
YXRlKChkZWZhdWx0UGFnZXNJbkhlYXAgKyBudW1QYWdlcykgKiBwYWdlU2l6ZSgpKSk7CiAgICAg
ICAgIAogICAgICAgICBjdXJyZW50SGVhcEdyb3d0aE1vZGUgPSBGb3JUZXN0RGVtYW5kQWxsb2NE
b250Q29hbGVzY2U7CiAgICAgICAgIGFsbG93QWxsb2NhdGVQYWdlcyA9IG51bVBhZ2VzOwpAQCAt
NjQ1LDEyICs2NDYsMTIgQEAgcHVibGljOgogICAgICAgICAKICAgICAgICAgcmVxdWVzdGVkTnVt
UGFnZXMgPSAwOwogICAgICAgICAKLSAgICAgICAgRVhQRUNUX1RSVUUoIWFsbG9jYXRvci0+YWxs
b2NhdGUoKGRlZmF1bHRQYWdlc0luSGVhcCArIG51bVBhZ2VzKSAqIHBhZ2VTaXplKCksIDApKTsK
KyAgICAgICAgRVhQRUNUX1RSVUUoIWFsbG9jYXRvci0+YWxsb2NhdGUoKGRlZmF1bHRQYWdlc0lu
SGVhcCArIG51bVBhZ2VzKSAqIHBhZ2VTaXplKCkpKTsKIAogICAgICAgICBmcmVlKGZpcnN0SGFu
ZGxlKTsKICAgICAgICAgZnJlZShzZWNvbmRIYW5kbGUpOwogICAgICAgICAKLSAgICAgICAgRVhQ
RUNUX1RSVUUoIWFsbG9jYXRvci0+YWxsb2NhdGUoKGRlZmF1bHRQYWdlc0luSGVhcCArIG51bVBh
Z2VzKSAqIHBhZ2VTaXplKCksIDApKTsKKyAgICAgICAgRVhQRUNUX1RSVUUoIWFsbG9jYXRvci0+
YWxsb2NhdGUoKGRlZmF1bHRQYWdlc0luSGVhcCArIG51bVBhZ2VzKSAqIHBhZ2VTaXplKCkpKTsK
ICAgICAgICAgCiAgICAgICAgIGZpcnN0SGFuZGxlID0gYWxsb2NhdGUoZmlyc3RTaXplKTsKICAg
ICAgICAgc2Vjb25kSGFuZGxlID0gYWxsb2NhdGUoc2Vjb25kU2l6ZSk7CkBAIC02NzEsNyArNjcy
LDcgQEAgVEVTVF9GKE1ldGFBbGxvY2F0b3JUZXN0LCBBbGxvY1plcm8pICAgIAogICAgIC8vIFRl
c3RzIHRoYXQgYWxsb2NhdGluZyBhIHplcm8tbGVuZ3RoIGJsb2NrIHJldHVybnMgMCBhbmQKICAg
ICAvLyBkb2VzIG5vdCBjaGFuZ2UgYW55dGhpbmcgaW4gbWVtb3J5LgogICAgIAotICAgIEFTU0VS
VCghYWxsb2NhdG9yLT5hbGxvY2F0ZSgwLCAwKSk7CisgICAgQVNTRVJUKCFhbGxvY2F0b3ItPmFs
bG9jYXRlKDApKTsKICAgICAKICAgICBNZXRhQWxsb2NhdG9ySGFuZGxlKiBmaW5hbCA9IGFsbG9j
YXRlKGRlZmF1bHRQYWdlc0luSGVhcCAqIHBhZ2VTaXplKCkpOwogICAgIEVYUEVDVF9FUShmaW5h
bC0+c3RhcnQoKS51bnRhZ2dlZFB0cigpLCByZWludGVycHJldF9jYXN0PHZvaWQqPihiYXNlUGFn
ZSAqIHBhZ2VTaXplKCkpKTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>393440</attachid>
            <date>2020-03-12 19:06:22 -0700</date>
            <delta_ts>2020-03-12 19:34:00 -0700</delta_ts>
            <desc>patch</desc>
            <filename>c-backup.diff</filename>
            <type>text/plain</type>
            <size>125171</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IEpTVGVzdHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEpTVGVzdHMvQ2hhbmdlTG9n
CShyZXZpc2lvbiAyNTgzNTApCisrKyBKU1Rlc3RzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpA
QCAtMSwzICsxLDE0IEBACisyMDIwLTAzLTEyICBTYWFtIEJhcmF0aSAgPHNiYXJhdGlAYXBwbGUu
Y29tPgorCisgICAgICAgIEltcGxlbWVudCAxR0Igb2YgZXhlY3V0YWJsZSBtZW1vcnkgb24gYXJt
NjQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIwODQ5
MAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFJ1biBK
ZXRTdHJlYW0yIHdhc20gdGVzdHMuCisKKyAgICAgICAgKiB3YXNtLnlhbWw6CisKIDIwMjAtMDMt
MTEgIEtlaXRoIE1pbGxlciAgPGtlaXRoX21pbGxlckBhcHBsZS5jb20+CiAKICAgICAgICAgVGVz
dDI2Mi1ydW5uZXIgc2hvdWxkIGFsd2F5cyBjb25zaWRlciBjcmFzaGVzIGFzIG5ldyBmYWlsdXJl
cwpJbmRleDogSlNUZXN0cy93YXNtLnlhbWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSlNUZXN0cy93YXNtLnlh
bWwJKHJldmlzaW9uIDI1ODM1MCkKKysrIEpTVGVzdHMvd2FzbS55YW1sCSh3b3JraW5nIGNvcHkp
CkBAIC0yMzEsMyArMjMxLDYgQEAKIC0gcGF0aDogd2FzbS9tb2R1bGVzL3J1bi1mcm9tLXdhc20u
d2FzbQogICBjbWQ6IHJ1bldlYkFzc2VtYmx5CiAKKy0gcGF0aDogLi4vUGVyZm9ybWFuY2VUZXN0
cy9KZXRTdHJlYW0yL3dhc20tY2xpLmpzCisgIGNtZDogcnVuV2ViQXNzZW1ibHlKZXRTdHJlYW0y
IHVubGVzcyBwYXJzZVJ1bkNvbW1hbmRzCisKSW5kZXg6IFBlcmZvcm1hbmNlVGVzdHMvQ2hhbmdl
TG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFBlcmZvcm1hbmNlVGVzdHMvQ2hhbmdlTG9nCShyZXZpc2lvbiAy
NTgzNTApCisrKyBQZXJmb3JtYW5jZVRlc3RzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAt
MSwzICsxLDI0IEBACisyMDIwLTAzLTEyICBTYWFtIEJhcmF0aSAgPHNiYXJhdGlAYXBwbGUuY29t
PgorCisgICAgICAgIEltcGxlbWVudCAxR0Igb2YgZXhlY3V0YWJsZSBtZW1vcnkgb24gYXJtNjQK
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIwODQ5MAor
CisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogSmV0U3Ry
ZWFtMi9KZXRTdHJlYW1Ecml2ZXIuanM6CisgICAgICAgIChEcml2ZXIucHJvdG90eXBlLmR1bXBK
U09OUmVzdWx0c0lmTmVlZGVkKToKKyAgICAgICAgKERlZmF1bHRCZW5jaG1hcmsucHJvdG90eXBl
LnVwZGF0ZVVJQWZ0ZXJSdW4pOgorICAgICAgICAoRGVmYXVsdEJlbmNobWFyayk6CisgICAgICAg
IChXU0xCZW5jaG1hcmsucHJvdG90eXBlLnVwZGF0ZVVJQWZ0ZXJSdW4pOgorICAgICAgICAoV1NM
QmVuY2htYXJrKToKKyAgICAgICAgKFdhc21CZW5jaG1hcmsucHJvdG90eXBlLnVwZGF0ZVVJQWZ0
ZXJSdW4pOgorICAgICAgICAoV2FzbUJlbmNobWFyayk6CisgICAgICAgIChEcml2ZXIuYXN5bmMg
ZmV0Y2hSZXNvdXJjZXMuc3RhdHVzRWxlbWVudC5pbm5lckhUTUwuYS5ocmVmLnN0cmluZ19hcHBl
YXJlZF9oZXJlKToKKyAgICAgICAgKERyaXZlci5wcm90b3R5cGUuYXN5bmMgZmV0Y2hSZXNvdXJj
ZXMpOgorICAgICAgICAqIEpldFN0cmVhbTIvd2FzbS1jbGkuanM6IEFkZGVkLgorICAgICAgICAo
Y29uc29sZS5sb2cpOgorICAgICAgICAoYXN5bmMgcnVuSmV0U3RyZWFtKToKKwogMjAyMC0wMi0x
NyAgRG9uIE9sbXN0ZWFkICA8ZG9uLm9sbXN0ZWFkQHNvbnkuY29tPgogCiAgICAgICAgIFtDTWFr
ZV0gVXNlIGJ1aWx0aW4gdGFyZ2V0cwpJbmRleDogUGVyZm9ybWFuY2VUZXN0cy9KZXRTdHJlYW0y
L0pldFN0cmVhbURyaXZlci5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBQZXJmb3JtYW5jZVRlc3RzL0pldFN0
cmVhbTIvSmV0U3RyZWFtRHJpdmVyLmpzCShyZXZpc2lvbiAyNTgzNTApCisrKyBQZXJmb3JtYW5j
ZVRlc3RzL0pldFN0cmVhbTIvSmV0U3RyZWFtRHJpdmVyLmpzCSh3b3JraW5nIGNvcHkpCkBAIC00
MDksOSArNDA5LDkgQEAgY2xhc3MgRHJpdmVyIHsKICAgICBkdW1wSlNPTlJlc3VsdHNJZk5lZWRl
ZCgpCiAgICAgewogICAgICAgICBpZiAoZHVtcEpTT05SZXN1bHRzKSB7Ci0gICAgICAgICAgICBw
cmludCgiXG4iKTsKLSAgICAgICAgICAgIHByaW50KHRoaXMucmVzdWx0c0pTT04oKSk7Ci0gICAg
ICAgICAgICBwcmludCgiXG4iKTsKKyAgICAgICAgICAgIGNvbnNvbGUubG9nKCJcbiIpOworICAg
ICAgICAgICAgY29uc29sZS5sb2codGhpcy5yZXN1bHRzSlNPTigpKTsKKyAgICAgICAgICAgIGNv
bnNvbGUubG9nKCJcbiIpOwogICAgICAgICB9CiAgICAgfQogCkBAIC03MjUsMTUgKzcyNSwxNSBA
QCBjbGFzcyBEZWZhdWx0QmVuY2htYXJrIGV4dGVuZHMgQmVuY2htYXJrCiAgICAgICAgICAgICBy
ZXR1cm47CiAgICAgICAgIH0KIAotICAgICAgICBwcmludCgiICAgIFN0YXJ0dXA6IiwgdWlGcmll
bmRseU51bWJlcih0aGlzLmZpcnN0SXRlcmF0aW9uKSk7Ci0gICAgICAgIHByaW50KCIgICAgV29y
c3QgQ2FzZToiLCB1aUZyaWVuZGx5TnVtYmVyKHRoaXMud29yc3Q0KSk7Ci0gICAgICAgIHByaW50
KCIgICAgQXZlcmFnZToiLCB1aUZyaWVuZGx5TnVtYmVyKHRoaXMuYXZlcmFnZSkpOwotICAgICAg
ICBwcmludCgiICAgIFNjb3JlOiIsIHVpRnJpZW5kbHlOdW1iZXIodGhpcy5zY29yZSkpOworICAg
ICAgICBjb25zb2xlLmxvZygiICAgIFN0YXJ0dXA6IiwgdWlGcmllbmRseU51bWJlcih0aGlzLmZp
cnN0SXRlcmF0aW9uKSk7CisgICAgICAgIGNvbnNvbGUubG9nKCIgICAgV29yc3QgQ2FzZToiLCB1
aUZyaWVuZGx5TnVtYmVyKHRoaXMud29yc3Q0KSk7CisgICAgICAgIGNvbnNvbGUubG9nKCIgICAg
QXZlcmFnZToiLCB1aUZyaWVuZGx5TnVtYmVyKHRoaXMuYXZlcmFnZSkpOworICAgICAgICBjb25z
b2xlLmxvZygiICAgIFNjb3JlOiIsIHVpRnJpZW5kbHlOdW1iZXIodGhpcy5zY29yZSkpOwogICAg
ICAgICBpZiAoUkFNaWZpY2F0aW9uKSB7Ci0gICAgICAgICAgICBwcmludCgiICAgIEN1cnJlbnQg
Rm9vdHByaW50OiIsIHVpRnJpZW5kbHlOdW1iZXIodGhpcy5jdXJyZW50Rm9vdHByaW50KSk7Ci0g
ICAgICAgICAgICBwcmludCgiICAgIFBlYWsgRm9vdHByaW50OiIsIHVpRnJpZW5kbHlOdW1iZXIo
dGhpcy5wZWFrRm9vdHByaW50KSk7CisgICAgICAgICAgICBjb25zb2xlLmxvZygiICAgIEN1cnJl
bnQgRm9vdHByaW50OiIsIHVpRnJpZW5kbHlOdW1iZXIodGhpcy5jdXJyZW50Rm9vdHByaW50KSk7
CisgICAgICAgICAgICBjb25zb2xlLmxvZygiICAgIFBlYWsgRm9vdHByaW50OiIsIHVpRnJpZW5k
bHlOdW1iZXIodGhpcy5wZWFrRm9vdHByaW50KSk7CiAgICAgICAgIH0KLSAgICAgICAgcHJpbnQo
IiAgICBXYWxsIHRpbWU6IiwgdWlGcmllbmRseUR1cmF0aW9uKG5ldyBEYXRlKHRoaXMuZW5kVGlt
ZSAtIHRoaXMuc3RhcnRUaW1lKSkpOworICAgICAgICBjb25zb2xlLmxvZygiICAgIFdhbGwgdGlt
ZToiLCB1aUZyaWVuZGx5RHVyYXRpb24obmV3IERhdGUodGhpcy5lbmRUaW1lIC0gdGhpcy5zdGFy
dFRpbWUpKSk7CiAgICAgfQogfQogCkBAIC04MTksMTQgKzgxOSwxNCBAQCBjbGFzcyBXU0xCZW5j
aG1hcmsgZXh0ZW5kcyBCZW5jaG1hcmsgewogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9
CiAKLSAgICAgICAgcHJpbnQoIiAgICBTdGRsaWI6IiwgdWlGcmllbmRseU51bWJlcih0aGlzLnN0
ZGxpYikpOwotICAgICAgICBwcmludCgiICAgIFRlc3RzOiIsIHVpRnJpZW5kbHlOdW1iZXIodGhp
cy5tYWluUnVuKSk7Ci0gICAgICAgIHByaW50KCIgICAgU2NvcmU6IiwgdWlGcmllbmRseU51bWJl
cih0aGlzLnNjb3JlKSk7CisgICAgICAgIGNvbnNvbGUubG9nKCIgICAgU3RkbGliOiIsIHVpRnJp
ZW5kbHlOdW1iZXIodGhpcy5zdGRsaWIpKTsKKyAgICAgICAgY29uc29sZS5sb2coIiAgICBUZXN0
czoiLCB1aUZyaWVuZGx5TnVtYmVyKHRoaXMubWFpblJ1bikpOworICAgICAgICBjb25zb2xlLmxv
ZygiICAgIFNjb3JlOiIsIHVpRnJpZW5kbHlOdW1iZXIodGhpcy5zY29yZSkpOwogICAgICAgICBp
ZiAoUkFNaWZpY2F0aW9uKSB7Ci0gICAgICAgICAgICBwcmludCgiICAgIEN1cnJlbnQgRm9vdHBy
aW50OiIsIHVpRnJpZW5kbHlOdW1iZXIodGhpcy5jdXJyZW50Rm9vdHByaW50KSk7Ci0gICAgICAg
ICAgICBwcmludCgiICAgIFBlYWsgRm9vdHByaW50OiIsIHVpRnJpZW5kbHlOdW1iZXIodGhpcy5w
ZWFrRm9vdHByaW50KSk7CisgICAgICAgICAgICBjb25zb2xlLmxvZygiICAgIEN1cnJlbnQgRm9v
dHByaW50OiIsIHVpRnJpZW5kbHlOdW1iZXIodGhpcy5jdXJyZW50Rm9vdHByaW50KSk7CisgICAg
ICAgICAgICBjb25zb2xlLmxvZygiICAgIFBlYWsgRm9vdHByaW50OiIsIHVpRnJpZW5kbHlOdW1i
ZXIodGhpcy5wZWFrRm9vdHByaW50KSk7CiAgICAgICAgIH0KLSAgICAgICAgcHJpbnQoIiAgICBX
YWxsIHRpbWU6IiwgdWlGcmllbmRseUR1cmF0aW9uKG5ldyBEYXRlKHRoaXMuZW5kVGltZSAtIHRo
aXMuc3RhcnRUaW1lKSkpOworICAgICAgICBjb25zb2xlLmxvZygiICAgIFdhbGwgdGltZToiLCB1
aUZyaWVuZGx5RHVyYXRpb24obmV3IERhdGUodGhpcy5lbmRUaW1lIC0gdGhpcy5zdGFydFRpbWUp
KSk7CiAgICAgfQogfTsKIApAQCAtOTc1LDEzICs5NzUsMTMgQEAgY2xhc3MgV2FzbUJlbmNobWFy
ayBleHRlbmRzIEJlbmNobWFyayB7CiAgICAgICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJ
ZCh0aGlzLnNjb3JlSUQpLmlubmVySFRNTCA9IHVpRnJpZW5kbHlOdW1iZXIodGhpcy5zY29yZSk7
CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KLSAgICAgICAgcHJpbnQoIiAgICBTdGFy
dHVwOiIsIHVpRnJpZW5kbHlOdW1iZXIodGhpcy5zdGFydHVwVGltZSkpOwotICAgICAgICBwcmlu
dCgiICAgIFJ1biB0aW1lOiIsIHVpRnJpZW5kbHlOdW1iZXIodGhpcy5ydW5UaW1lKSk7CisgICAg
ICAgIGNvbnNvbGUubG9nKCIgICAgU3RhcnR1cDoiLCB1aUZyaWVuZGx5TnVtYmVyKHRoaXMuc3Rh
cnR1cFRpbWUpKTsKKyAgICAgICAgY29uc29sZS5sb2coIiAgICBSdW4gdGltZToiLCB1aUZyaWVu
ZGx5TnVtYmVyKHRoaXMucnVuVGltZSkpOwogICAgICAgICBpZiAoUkFNaWZpY2F0aW9uKSB7Ci0g
ICAgICAgICAgICBwcmludCgiICAgIEN1cnJlbnQgRm9vdHByaW50OiIsIHVpRnJpZW5kbHlOdW1i
ZXIodGhpcy5jdXJyZW50Rm9vdHByaW50KSk7Ci0gICAgICAgICAgICBwcmludCgiICAgIFBlYWsg
Rm9vdHByaW50OiIsIHVpRnJpZW5kbHlOdW1iZXIodGhpcy5wZWFrRm9vdHByaW50KSk7CisgICAg
ICAgICAgICBjb25zb2xlLmxvZygiICAgIEN1cnJlbnQgRm9vdHByaW50OiIsIHVpRnJpZW5kbHlO
dW1iZXIodGhpcy5jdXJyZW50Rm9vdHByaW50KSk7CisgICAgICAgICAgICBjb25zb2xlLmxvZygi
ICAgIFBlYWsgRm9vdHByaW50OiIsIHVpRnJpZW5kbHlOdW1iZXIodGhpcy5wZWFrRm9vdHByaW50
KSk7CiAgICAgICAgIH0KLSAgICAgICAgcHJpbnQoIiAgICBTY29yZToiLCB1aUZyaWVuZGx5TnVt
YmVyKHRoaXMuc2NvcmUpKTsKKyAgICAgICAgY29uc29sZS5sb2coIiAgICBTY29yZToiLCB1aUZy
aWVuZGx5TnVtYmVyKHRoaXMuc2NvcmUpKTsKICAgICB9CiB9OwogCkluZGV4OiBQZXJmb3JtYW5j
ZVRlc3RzL0pldFN0cmVhbTIvd2FzbS1jbGkuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gUGVyZm9ybWFuY2VU
ZXN0cy9KZXRTdHJlYW0yL3dhc20tY2xpLmpzCShub25leGlzdGVudCkKKysrIFBlcmZvcm1hbmNl
VGVzdHMvSmV0U3RyZWFtMi93YXNtLWNsaS5qcwkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQ2
IEBACisKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisg
KiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICog
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyovCisKK2NvbnN0IGlzSW5Ccm93c2VyID0gZmFsc2U7Citjb25zb2xlID0g
eworICAgIGxvZzogKCkgPT4geyB9Cit9CisKK3Rlc3RMaXN0ID0gWyJIYXNoU2V0LXdhc20iLCAi
dHNmLXdhc20iLCAicXVpY2tzb3J0LXdhc20iLCAiZ2NjLWxvb3BzLXdhc20iLCAicmljaGFyZHMt
d2FzbSJdOworCitSQU1pZmljYXRpb24gPSBmYWxzZTsKKworbG9hZCgiLi9KZXRTdHJlYW1Ecml2
ZXIuanMiKTsKKworYXN5bmMgZnVuY3Rpb24gcnVuSmV0U3RyZWFtKCkgeworICAgIHRyeSB7Cisg
ICAgICAgIGF3YWl0IEpldFN0cmVhbS5pbml0aWFsaXplKCk7CisgICAgICAgIEpldFN0cmVhbS5z
dGFydCgpOworICAgIH0gY2F0Y2ggKGUpIHsKKyAgICAgICAgdGhyb3cgZTsKKyAgICB9Cit9City
dW5KZXRTdHJlYW0oKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjU4
MzUwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpA
QCAtMSwzICsxLDEwNCBAQAorMjAyMC0wMy0xMiAgU2FhbSBCYXJhdGkgIDxzYmFyYXRpQGFwcGxl
LmNvbT4KKworICAgICAgICBJbXBsZW1lbnQgMUdCIG9mIGV4ZWN1dGFibGUgbWVtb3J5IG9uIGFy
bTY0CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMDg0
OTAKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUaGlz
IHBhdGNoIGltcGxlbWVudHMgdGhlIDFHQiBleGVjdXRhYmxlIG1lbW9yeSBzcGFjZSBvbiBhcm02
NC4gVG8gbWFrZSB0aGlzCisgICAgICAgIHdvcmssIHdlIGltcGxlbWVudCBqdW1wcyBsYXJnZXIg
dGhhbiArLy0xMjhNQiB0byB1c2UganVtcCBpc2xhbmRzLiBKdW1wIGlzbGFuZHMKKyAgICAgICAg
d29yayBieSBzcGxpdHRpbmcgdXAgdGhlIH4xR0IgcmVnaW9uIGludG8gOSAxMTJNQiBjaHVua3Mg
KDEwMDggTUIgdG90YWwpLiBFYWNoCisgICAgICAgIGNodW5rIGlzIHNwbGl0IGludG8gdHdvOiA5
Nk1CIG9mIGV4ZWN1dGFibGUgcmVnaW9uLCBhbmQgMTZNQiBvZiBqdW1wIGlzbGFuZCByZWdpb24u
CisgICAgICAgIFdpdGggdGhpcyBzcGxpdCwgYW55IGp1bXAgaW5zaWRlIGEganVtcCBpc2xhbmQg
cmVnaW9uIGNhbiBnZXQgdG8gdGhlIGFkamFjZW50CisgICAgICAgIGlzbGFuZCAoZm9yd2FyZHMg
b3IgYmFja3dhcmRzKSBpbiBhIHNpbmdsZSArLy0xMjhNQiBqdW1wLiBXaGVuIGxpbmtpbmcgYSBq
dW1wCisgICAgICAgIGZyb20gQSB0byBCLCB3aGVyZSB8QSAtIEJ8ID4gMTI4TUIsIHdlIGluc3Rl
YWQgcG9pbnQgdGhlIGp1bXAgdG8gYW4gaXNsYW5kLAorICAgICAgICB3aGVyZSB0aGlzIGlzbGFu
ZCBoYXMgYSBwb3RlbnRpYWwgc2VyaWVzIG9mIGp1bXBzIHRoYXQgZmluYWxseSBsYW5kcyBhdCBC
LgorICAgICAgICAKKyAgICAgICAgVG8gYWxsb2NhdGUgZXhlY3V0YWJsZSBtZW1vcnksIHVzZSBh
IE1ldGFBbGxvY2F0b3IgZm9yIGVhY2ggOTZNQiBjaHVuay4gVG8KKyAgICAgICAgYWxsb2NhdGUg
aXNsYW5kcywgd2UgaGF2ZSBhIGJpdCB2ZWN0b3Igd2UgdXNlIHRvIHRyYWNrIHVzZWQgYW5kIGZy
ZWVkIGlzbGFuZHMuCisgICAgICAgIFdlIG9ubHkgZ3JvdyB0aGlzIGJpdCB2ZWN0b3IgYXMgaXNs
YW5kcyBhcmUgYWxsb2NhdGVkLCBzbyBpdCBmcmVxdWVudGx5CisgICAgICAgIHJlbWFpbnMgZW1w
dHkgb3IgdmVyeSBzbWFsbC4KKyAgICAgICAgCisgICAgICAgIFRoZSBnb2FsIG9mIHRoaXMgcGF0
Y2ggaXMgdG8gaGF2ZSBtaW5pbWFsIHBlcmYgaW1wYWN0IHdoZW4gbm90IHVzaW5nIGlzbGFuZHMs
CisgICAgICAgIHNvIHRoZSBkYXRhIHN0cnVjdHVyZXMgYXJlIGRlc2lnbmVkIHRvIG9ubHkgaW5j
dXIgb3ZlcmhlYWQgd2hlbiBhY3R1YWxseSB1c2luZworICAgICAgICBpc2xhbmRzLiBXZSBleHBl
Y3QgdGhlIHVzZSBvZiBpc2xhbmRzIHRvIGJlIG1pbmltYWwuIFdlIHVzZSBhIHJlZCBibGFjayB0
cmVlCisgICAgICAgIHRvIHRyYWNrIGFsbCBpc2xhbmQgbG9jYXRpb25zLiBUaGlzIGFsbG93cyB1
cyB0byBkZWFsbG9jYXRlIGFsbCBpc2xhbmRzIHdoZW4KKyAgICAgICAgYW4gZXhlY3V0YWJsZSBt
ZW1vcnkgaGFuZGxlIGlzIGZyZWVkLiBUeXBpY2FsbHksIHRoaXMgcmVkIGJsYWNrIHRyZWUgaXMg
ZW1wdHksCisgICAgICAgIHNvIGZyZWVpbmcgYW4gZXhlY3V0YWJsZSBtZW1vcnkgaGFuZGxlIGlu
Y3VycyBubyBleHRyYSBvdmVyaGVhZC4KKyAgICAgICAgCisgICAgICAgIFRvIG1ha2UgaXNsYW5k
cyB3b3JrIGZvciBXYXNtLCB3ZSBub3cgaGF2ZSB0byBsaW5rIHRpZXIgdXAgY29kZSBpbiB0d28g
cGhhc2VzLgorICAgICAgICBQcmV2aW91c2x5LCB3ZSB3b3VsZCBqdXN0IHBhdGNoIGp1bXBzIGNv
bmN1cnJlbnRseSB0byBXYXNtIHRocmVhZHMgcnVubmluZyBhZnRlcgorICAgICAgICByZXNldHRp
bmcgdGhlIGljYWNoZSwga25vd2luZyB0aGF0IHdlIHdvdWxkIGJlIGFibGUgdG8gYXRvbWljYWxs
eSB1cGRhdGUgdGhlIGp1bXAKKyAgICAgICAgaW5zdHJ1Y3Rpb24gdG8gcG9pbnQgdG8gdGhlIG5l
dyBkZXN0aW5hdGlvbi4gSG93ZXZlciwgbm93IHdoZW4gcmVwYXRjaGluZyB0aGVzZQorICAgICAg
ICBqdW1wcyBpbiBhIHdvcmxkIHdpdGgganVtcCBpc2xhbmRzLCB3ZSBtaWdodCBuZWVkIHRvIGFs
bG9jYXRlIGlzbGFuZHMgZGVwZW5kaW5nCisgICAgICAgIG9uIHRoZSBqdW1wIGxvY2F0aW9uIGFu
ZCBpdHMgdGFyZ2V0LiBTbyB3ZSBub3cgYWxsb2NhdGUgYW5kIGNvbGxlY3QgdGhlIHNldCBvZiBp
c2xhbmRzLAorICAgICAgICB0aGVuIHJlc2V0IHRoZSBpY2FjaGUsIHRoZW4gYXRvbWljYWxseSB1
cGRhdGUgdGhlIGJyYW5jaCB0byBwb2ludCB0byB0aGUgZGVzdGluYXRpb24KKyAgICAgICAgKG9y
IGFuIGlzbGFuZCB0aGF0IGp1bXBzIHRvIHRoZSBkZXN0aW5hdGlvbikuIE9uZSBpbXBvcnRhbnQg
aW1wbGVtZW50YXRpb24gZGV0YWlsCisgICAgICAgIGhlcmUgaXMgdGhhdCBmb3Igbm9ybWFsIGlz
bGFuZCByZXBhdGNoaW5nLCBpZiB3ZSBoYXZlIGEganVtcCBmcm9tIEEgdG8gQiwgYW5kIGl0Cisg
ICAgICAgIGFsbG9jYXRlcyBhIHNldCBpZiBpc2xhbmRzIFgsIHdlIHVzdWFsbHkgY2FuIGRlYWxs
b2NhdGUgWCB3aGVuIHJlcGF0Y2hpbmcgQSB0byBnbyB0byBCJy4KKyAgICAgICAgVGhpcyBpcyBi
ZWNhdXNlIHRoZSB0eXBpY2FsIHJlcGF0Y2ggc2NlbmFyaW8gaW4gSlMgaGFwcGVucyB3aGVuIHRo
YXQgY29kZSBpcyBub3QgYmVpbmcKKyAgICAgICAgZXhlY3V0ZWQuIEZvciBXYXNtIHRob3VnaCwg
dGhvc2UgaXNsYW5kcyBYIG1pZ2h0IGJlIHJ1bm5pbmcgd2hpbGUgd2Ugd2FudCB0byByZXBhdGNo
CisgICAgICAgIEEgdG8gZ28gdG8gQicuIFNvIGluc3RlYWQgb2YgZGVhbGxvY2F0aW5nIFgsIHdl
IGp1c3QgYXBwZW5kIHRvIFggaW4gdGhpcyBzY2VuYXJpbywgYW5kCisgICAgICAgIHdlIGZyZWUg
dGhlIG5ldyBzZXQgWCcgd2hlbiB0aGUgY29kZSBpdHNlbGYgaXMgZnJlZWQuCisgICAgICAgIAor
ICAgICAgICAoVGhpcyBwYXRjaCBhbHNvIGZpeGVzIGEgYnVnIGluIHRoZSBXYXNtIExMSW50IHRv
IEJCUSB0aWVyIHVwIHRoYXQgSSBzcG90dGVkLAorICAgICAgICB3aGVyZSB3ZSB3b3VsZCBwdWJs
aXNoIGEgTExJbnQgY2FsbGVlJ3MgQkJRIHJlcGxhY2VtZW50IGJlZm9yZSB3ZSBmaW5pc2hlZAor
ICAgICAgICBsaW5raW5nIHRoZSBvdXRnb2luZyBjYWxscyBvZiB0aGUgQkJRIHJlcGxhY2VtZW50
LikKKyAgICAgICAgCisgICAgICAgIFRoaXMgcGF0Y2ggYWxzbyByZW1vdmVzIHRoZSBvbGQgIkNv
ZGVQcm9maWxpbmciIGNvZGUgdGhhdCBoYXMgYmVlbiB1bnVzZWQgZm9yCisgICAgICAgIGEgbG9u
ZyB0aW1lLgorCisgICAgICAgICogSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvajoKKyAgICAgICAgKiBTb3VyY2VzLnR4dDoKKyAgICAgICAgKiBhc3NlbWJsZXIvQVJNNjRB
c3NlbWJsZXIuaDoKKyAgICAgICAgKEpTQzo6QVJNNjRBc3NlbWJsZXI6OmIpOgorICAgICAgICAo
SlNDOjpBUk02NEFzc2VtYmxlcjo6YmwpOgorICAgICAgICAoSlNDOjpBUk02NEFzc2VtYmxlcjo6
cmVwbGFjZVdpdGhKdW1wKToKKyAgICAgICAgKEpTQzo6QVJNNjRBc3NlbWJsZXI6OnByZXBhcmVG
b3JBdG9taWNSZWxpbmtKdW1wQ29uY3VycmVudGx5KToKKyAgICAgICAgKEpTQzo6QVJNNjRBc3Nl
bWJsZXI6OnByZXBhcmVGb3JBdG9taWNSZWxpbmtDYWxsQ29uY3VycmVudGx5KToKKyAgICAgICAg
KEpTQzo6QVJNNjRBc3NlbWJsZXI6OmNvbXB1dGVKdW1wVHlwZSk6CisgICAgICAgIChKU0M6OkFS
TTY0QXNzZW1ibGVyOjpjYW5FbWl0SnVtcCk6CisgICAgICAgIChKU0M6OkFSTTY0QXNzZW1ibGVy
OjpsaW5rSnVtcE9yQ2FsbCk6CisgICAgICAgIChKU0M6OkFSTTY0QXNzZW1ibGVyOjpsaW5rQ29t
cGFyZUFuZEJyYW5jaCk6CisgICAgICAgIChKU0M6OkFSTTY0QXNzZW1ibGVyOjpsaW5rQ29uZGl0
aW9uYWxCcmFuY2gpOgorICAgICAgICAoSlNDOjpBUk02NEFzc2VtYmxlcjo6bGlua1Rlc3RBbmRC
cmFuY2gpOgorICAgICAgICAqIGFzc2VtYmxlci9BYnN0cmFjdE1hY3JvQXNzZW1ibGVyLmg6Cisg
ICAgICAgIChKU0M6OkFic3RyYWN0TWFjcm9Bc3NlbWJsZXI6OnByZXBhcmVGb3JBdG9taWNSZXBh
dGNoTmVhckNhbGxDb25jdXJyZW50bHkpOgorICAgICAgICAqIGFzc2VtYmxlci9MaW5rQnVmZmVy
LmNwcDoKKyAgICAgICAgKEpTQzo6TGlua0J1ZmZlcjo6Y29weUNvbXBhY3RBbmRMaW5rQ29kZSk6
CisgICAgICAgIChKU0M6OkxpbmtCdWZmZXI6OmxpbmtDb2RlKToKKyAgICAgICAgKEpTQzo6TGlu
a0J1ZmZlcjo6YWxsb2NhdGUpOgorICAgICAgICAqIGFzc2VtYmxlci9MaW5rQnVmZmVyLmg6Cisg
ICAgICAgIChKU0M6OkxpbmtCdWZmZXI6OkxpbmtCdWZmZXIpOgorICAgICAgICAqIGFzc2VtYmxl
ci9NYWNyb0Fzc2VtYmxlckNvZGVSZWYuaDoKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJD
b2RlUmVmOjpNYWNyb0Fzc2VtYmxlckNvZGVSZWYpOgorICAgICAgICAqIGppdC9FeGVjdXRhYmxl
QWxsb2NhdG9yLmNwcDoKKyAgICAgICAgKEpTQzo6aW5pdGlhbGl6ZUpJVFBhZ2VSZXNlcnZhdGlv
bik6CisgICAgICAgIChKU0M6OkV4ZWN1dGFibGVBbGxvY2F0b3I6OmluaXRpYWxpemVVbmRlcmx5
aW5nQWxsb2NhdG9yKToKKyAgICAgICAgKEpTQzo6RXhlY3V0YWJsZUFsbG9jYXRvcjo6aXNWYWxp
ZCBjb25zdCk6CisgICAgICAgIChKU0M6OkV4ZWN1dGFibGVBbGxvY2F0b3I6OmFsbG9jYXRlKToK
KyAgICAgICAgKEpTQzo6RXhlY3V0YWJsZUFsbG9jYXRvcjo6Z2V0SnVtcElzbGFuZFRvKToKKyAg
ICAgICAgKEpTQzo6RXhlY3V0YWJsZUFsbG9jYXRvcjo6Z2V0SnVtcElzbGFuZFRvQ29uY3VycmVu
dGx5KToKKyAgICAgICAgKEpTQzo6Rml4ZWRWTVBvb2xFeGVjdXRhYmxlQWxsb2NhdG9yOjp+Rml4
ZWRWTVBvb2xFeGVjdXRhYmxlQWxsb2NhdG9yKTogRGVsZXRlZC4KKyAgICAgICAgKiBqaXQvRXhl
Y3V0YWJsZUFsbG9jYXRvci5oOgorICAgICAgICAoSlNDOjpFeGVjdXRhYmxlQWxsb2NhdG9yQmFz
ZTo6YWxsb2NhdGUpOgorICAgICAgICAqIHJ1bnRpbWUvQ29tbW9uU2xvd1BhdGhzLmNwcDoKKyAg
ICAgICAgKiBydW50aW1lL0NvbXBsZXRpb24uY3BwOgorICAgICAgICAoSlNDOjpldmFsdWF0ZSk6
CisgICAgICAgICogcnVudGltZS9KU01vZHVsZUxvYWRlci5jcHA6CisgICAgICAgIChKU0M6Om1v
ZHVsZUxvYWRlclBhcnNlTW9kdWxlKToKKyAgICAgICAgKiBydW50aW1lL09wdGlvbnNMaXN0Lmg6
CisgICAgICAgICogdG9vbHMvQ29kZVByb2ZpbGUuY3BwOiBSZW1vdmVkLgorICAgICAgICAqIHRv
b2xzL0NvZGVQcm9maWxlLmg6IFJlbW92ZWQuCisgICAgICAgICogdG9vbHMvQ29kZVByb2ZpbGlu
Zy5jcHA6IFJlbW92ZWQuCisgICAgICAgICogdG9vbHMvQ29kZVByb2ZpbGluZy5oOiBSZW1vdmVk
LgorICAgICAgICAqIHdhc20vV2FzbUJCUVBsYW4uY3BwOgorICAgICAgICAoSlNDOjpXYXNtOjpC
QlFQbGFuOjp3b3JrKToKKyAgICAgICAgKiB3YXNtL1dhc21PTUdGb3JPU1JFbnRyeVBsYW4uY3Bw
OgorICAgICAgICAoSlNDOjpXYXNtOjpPTUdGb3JPU1JFbnRyeVBsYW46OndvcmspOgorICAgICAg
ICAqIHdhc20vV2FzbU9NR1BsYW4uY3BwOgorICAgICAgICAoSlNDOjpXYXNtOjpPTUdQbGFuOjp3
b3JrKToKKwogMjAyMC0wMy0xMiAgWXVzdWtlIFN1enVraSAgPHlzdXp1a2lAYXBwbGUuY29tPgog
CiAgICAgICAgIFtKU0NdIFVzZSBDYWNoZWFibGVJZGVudGlmaWVyIGluIEJ5VmFsSW5mbwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL1NvdXJjZXMudHh0Cj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9Tb3VyY2VzLnR4dAkocmV2aXNpb24gMjU4MzUwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL1NvdXJjZXMudHh0CSh3b3JraW5nIGNvcHkpCkBAIC05OTUsOCArOTk1
LDYgQEAgcnVudGltZS9XaWRlbmluZ051bWJlclByZWRpY3Rpb25GdXp6ZXJBZwogSlNDQnVpbHRp
bnMuY3BwCiAKIHRvb2xzL0NlbGxMaXN0LmNwcAotdG9vbHMvQ29kZVByb2ZpbGUuY3BwCi10b29s
cy9Db2RlUHJvZmlsaW5nLmNwcAogdG9vbHMvQ29tcGlsZXJUaW1pbmdTY29wZS5jcHAKIHRvb2xz
L0Z1bmN0aW9uT3ZlcnJpZGVzLmNwcAogdG9vbHMvRnVuY3Rpb25XaGl0ZWxpc3QuY3BwCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3Qu
cGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENv
cmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gMjU4MzUwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJ
KHdvcmtpbmcgY29weSkKQEAgLTQwNzEsOCArNDA3MSw2IEBACiAJCTg2MDE2MUUwMEYzQTgzQzEw
MEY4NDcxMCAvKiBNYWNyb0Fzc2VtYmxlclg4Ni5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBNYWNyb0Fzc2VtYmxlclg4Ni5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQk4NjAxNjFFMTBGM0E4M0MxMDBGODQ3MTAgLyogTWFjcm9Bc3NlbWJsZXJYODZfNjQuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTWFjcm9Bc3NlbWJsZXJYODZfNjQuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJODYwMTYxRTIwRjNBODNDMTAwRjg0NzEwIC8qIE1h
Y3JvQXNzZW1ibGVyWDg2Q29tbW9uLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IE1hY3JvQXNzZW1ibGVyWDg2Q29tbW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0J
CTg2MDNDRUYyMTRDNzU0NjQwMEFFNTlFMyAvKiBDb2RlUHJvZmlsaW5nLmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IENvZGVQcm9maWxpbmcuY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwotCQk4NjAzQ0VGMzE0Qzc1NDY0MDBBRTU5RTMgLyogQ29kZVByb2Zp
bGluZy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBDb2RlUHJvZmlsaW5nLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTg2MDRGNEYyMTQzQTZDNDQwMEIyOTVGNSAv
KiBDaGFuZ2VMb2cgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5
cGUgPSB0ZXh0OyBsaW5lRW5kaW5nID0gMDsgcGF0aCA9IENoYW5nZUxvZzsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJODYwNkRERTkxOERBNDRBQjAwQTM4M0QwIC8qIElkZW50aWZpZXJJ
bmxpbmVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IElkZW50aWZpZXJJbmxp
bmVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTg2MTJFNENCMTUyMjkxODQwMEM4
MzZCRSAvKiBNYXRjaFJlc3VsdC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBN
YXRjaFJlc3VsdC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtNDExOCw4ICs0MTE2
LDYgQEAKIAkJODZBREQxNDMwRkRERUE5ODAwMDZGRkNDIC8qIEFSTXY3UmVnaXN0ZXJzLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEFSTXY3UmVnaXN0ZXJzLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTg2QUREMTQ0MEZEREVBOTgwMDA2RUVDMiAvKiBNYWNyb0Fz
c2VtYmxlckFSTXY3LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE1hY3JvQXNz
ZW1ibGVyQVJNdjcuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJODZCNTgyMkMxNEQy
MkY1RjAwQTlDMzA2IC8qIFByb2ZpbGVUcmVlTm9kZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBQcm9maWxlVHJlZU5vZGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
LQkJODZCNTgyMkUxNEQyMzczQjAwQTlDMzA2IC8qIENvZGVQcm9maWxlLmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IENvZGVQcm9maWxlLmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKLQkJODZCNTgyMkYxNEQyMzczQjAwQTlDMzA2IC8qIENvZGVQcm9maWxl
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENvZGVQcm9maWxlLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTg2QjU4MjZBMTREMzVENTEwMEE5QzMwNiAvKiBUaWVy
ZWRNTWFwQXJyYXkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVGllcmVkTU1h
cEFycmF5Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTg2QkY2NDJBMTQ4REIyQjUw
MDRERTM2QSAvKiBJbnRyaW5zaWMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
SW50cmluc2ljLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTg2QzM2RUU5MEVFMTI4
OUQwMEIzREY1OSAvKiBNYWNyb0Fzc2VtYmxlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBNYWNyb0Fzc2VtYmxlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAt
NzY3NywxMCArNzY3Myw2IEBACiAJCQkJRkUxQkQwMUIxRTcyMDAyMTAwMTM0QkM5IC8qIENlbGxM
aXN0LmNwcCAqLywKIAkJCQlGRTFCRDAxQzFFNzIwMDIxMDAxMzRCQzkgLyogQ2VsbExpc3QuaCAq
LywKIAkJCQlGRTFCRDAyMDFFNzIwMjcwMDAxMzRCQzkgLyogQ2VsbFByb2ZpbGUuaCAqLywKLQkJ
CQk4NkI1ODIyRTE0RDIzNzNCMDBBOUMzMDYgLyogQ29kZVByb2ZpbGUuY3BwICovLAotCQkJCTg2
QjU4MjJGMTREMjM3M0IwMEE5QzMwNiAvKiBDb2RlUHJvZmlsZS5oICovLAotCQkJCTg2MDNDRUYy
MTRDNzU0NjQwMEFFNTlFMyAvKiBDb2RlUHJvZmlsaW5nLmNwcCAqLywKLQkJCQk4NjAzQ0VGMzE0
Qzc1NDY0MDBBRTU5RTMgLyogQ29kZVByb2ZpbGluZy5oICovLAogCQkJCTBGNEYxMUU3MjA5QkNE
QTEwMDcwOTY1NCAvKiBDb21waWxlclRpbWluZ1Njb3BlLmNwcCAqLywKIAkJCQkwRjRGMTFFNjIw
OUJDREExMDA3MDk2NTQgLyogQ29tcGlsZXJUaW1pbmdTY29wZS5oICovLAogCQkJCUZFNEJGRjI5
MUFENDc2RTcwMDA4OEY4NyAvKiBGdW5jdGlvbk92ZXJyaWRlcy5jcHAgKi8sCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL0FSTTY0QXNzZW1ibGVyLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9BUk02NEFzc2VtYmxlci5oCShyZXZp
c2lvbiAyNTgzNTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL0FSTTY0QXNz
ZW1ibGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTc4MywxMiArNzgzLDkgQEAgcHVibGljOgogICAg
ICAgICBpbnNuKGRhdGFQcm9jZXNzaW5nMlNvdXJjZShEQVRBU0laRSwgcm0sIERhdGFPcF9BU1JW
LCBybiwgcmQpKTsKICAgICB9CiAKLSAgICBBTFdBWVNfSU5MSU5FIHZvaWQgYihpbnQzMl90IG9m
ZnNldCA9IDApCisgICAgQUxXQVlTX0lOTElORSB2b2lkIGIoKQogICAgIHsKLSAgICAgICAgQVNT
RVJUKCEob2Zmc2V0ICYgMykpOwotICAgICAgICBvZmZzZXQgPj49IDI7Ci0gICAgICAgIEFTU0VS
VChvZmZzZXQgPT0gKG9mZnNldCA8PCA2KSA+PiA2KTsKLSAgICAgICAgaW5zbih1bmNvbmRpdGlv
bmFsQnJhbmNoSW1tZWRpYXRlKGZhbHNlLCBvZmZzZXQpKTsKKyAgICAgICAgaW5zbih1bmNvbmRp
dGlvbmFsQnJhbmNoSW1tZWRpYXRlKGZhbHNlLCAwKSk7CiAgICAgfQogCiAgICAgQUxXQVlTX0lO
TElORSB2b2lkIGJfY29uZChDb25kaXRpb24gY29uZCwgaW50MzJfdCBvZmZzZXQgPSAwKQpAQCAt
ODMxLDExICs4MjgsOSBAQCBwdWJsaWM6CiAgICAgICAgIGluc24obG9naWNhbFNoaWZ0ZWRSZWdp
c3RlcihEQVRBU0laRSwgc2V0RmxhZ3MgPyBMb2dpY2FsT3BfQU5EUyA6IExvZ2ljYWxPcF9BTkQs
IHNoaWZ0LCB0cnVlLCBybSwgYW1vdW50LCBybiwgcmQpKTsKICAgICB9CiAKLSAgICBBTFdBWVNf
SU5MSU5FIHZvaWQgYmwoaW50MzJfdCBvZmZzZXQgPSAwKQorICAgIEFMV0FZU19JTkxJTkUgdm9p
ZCBibCgpCiAgICAgewotICAgICAgICBBU1NFUlQoIShvZmZzZXQgJiAzKSk7Ci0gICAgICAgIG9m
ZnNldCA+Pj0gMjsKLSAgICAgICAgaW5zbih1bmNvbmRpdGlvbmFsQnJhbmNoSW1tZWRpYXRlKHRy
dWUsIG9mZnNldCkpOworICAgICAgICBpbnNuKHVuY29uZGl0aW9uYWxCcmFuY2hJbW1lZGlhdGUo
dHJ1ZSwgMCkpOwogICAgIH0KIAogICAgIEFMV0FZU19JTkxJTkUgdm9pZCBibHIoUmVnaXN0ZXJJ
RCBybikKQEAgLTI1ODIsNiArMjU3NywxMyBAQCBwdWJsaWM6CiAgICAgewogICAgICAgICBpbnRw
dHJfdCBvZmZzZXQgPSAocmVpbnRlcnByZXRfY2FzdDxpbnRwdHJfdD4odG8pIC0gcmVpbnRlcnBy
ZXRfY2FzdDxpbnRwdHJfdD4od2hlcmUpKSA+PiAyOwogICAgICAgICBBU1NFUlQoc3RhdGljX2Nh
c3Q8aW50PihvZmZzZXQpID09IG9mZnNldCk7CisKKyAgICAgICAgaWYgKCFpc0ludDwyNj4ob2Zm
c2V0KSkgeworICAgICAgICAgICAgdG8gPSBFeGVjdXRhYmxlQWxsb2NhdG9yOjpzaW5nbGV0b24o
KS5nZXRKdW1wSXNsYW5kVG8od2hlcmUsIHRvKTsKKyAgICAgICAgICAgIG9mZnNldCA9IChiaXR3
aXNlX2Nhc3Q8aW50cHRyX3Q+KHRvKSAtIGJpdHdpc2VfY2FzdDxpbnRwdHJfdD4od2hlcmUpKSA+
PiAyOworICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoaXNJbnQ8MjY+KG9mZnNldCkpOworICAg
ICAgICB9CisKICAgICAgICAgaW50IGluc24gPSB1bmNvbmRpdGlvbmFsQnJhbmNoSW1tZWRpYXRl
KGZhbHNlLCBzdGF0aWNfY2FzdDxpbnQ+KG9mZnNldCkpOwogICAgICAgICBSRUxFQVNFX0FTU0VS
VChyb3VuZFVwVG9NdWx0aXBsZU9mPGluc3RydWN0aW9uU2l6ZT4od2hlcmUpID09IHdoZXJlKTsK
ICAgICAgICAgcGVyZm9ybUpJVE1lbWNweSh3aGVyZSwgJmluc24sIHNpemVvZihpbnQpKTsKQEAg
LTI3NzEsNiArMjc3MywyNSBAQCBwdWJsaWM6CiAgICAgICAgIHJlbGlua0p1bXBPckNhbGw8QnJh
bmNoVHlwZV9DQUxMPihyZWludGVycHJldF9jYXN0PGludCo+KGZyb20pIC0gMSwgcmVpbnRlcnBy
ZXRfY2FzdDxjb25zdCBpbnQqPihmcm9tKSAtIDEsIHRvKTsKICAgICAgICAgY2FjaGVGbHVzaChy
ZWludGVycHJldF9jYXN0PGludCo+KGZyb20pIC0gMSwgc2l6ZW9mKGludCkpOwogICAgIH0KKwor
I2lmIFVTRShKVU1QX0lTTEFORFMpCisgICAgc3RhdGljIHZvaWQqIHByZXBhcmVGb3JBdG9taWNS
ZWxpbmtKdW1wQ29uY3VycmVudGx5KHZvaWQqIGZyb20sIHZvaWQqIHRvKQorICAgIHsKKyAgICAg
ICAgaW50cHRyX3Qgb2Zmc2V0ID0gKGJpdHdpc2VfY2FzdDxpbnRwdHJfdD4odG8pIC0gYml0d2lz
ZV9jYXN0PGludHB0cl90Pihmcm9tKSkgPj4gMjsKKyAgICAgICAgQVNTRVJUKHN0YXRpY19jYXN0
PGludD4ob2Zmc2V0KSA9PSBvZmZzZXQpOworCisgICAgICAgIGlmIChpc0ludDwyNj4ob2Zmc2V0
KSkKKyAgICAgICAgICAgIHJldHVybiB0bzsKKworICAgICAgICByZXR1cm4gRXhlY3V0YWJsZUFs
bG9jYXRvcjo6c2luZ2xldG9uKCkuZ2V0SnVtcElzbGFuZFRvQ29uY3VycmVudGx5KGZyb20sIHRv
KTsKKyAgICB9CisKKyAgICBzdGF0aWMgdm9pZCogcHJlcGFyZUZvckF0b21pY1JlbGlua0NhbGxD
b25jdXJyZW50bHkodm9pZCogZnJvbSwgdm9pZCogdG8pCisgICAgeworICAgICAgICBmcm9tID0g
c3RhdGljX2Nhc3Q8dm9pZCo+KGJpdHdpc2VfY2FzdDxpbnQqPihmcm9tKSAtIDEpOworICAgICAg
ICByZXR1cm4gcHJlcGFyZUZvckF0b21pY1JlbGlua0p1bXBDb25jdXJyZW50bHkoZnJvbSwgdG8p
OworICAgIH0KKyNlbmRpZgogICAgIAogICAgIHN0YXRpYyB2b2lkIHJlcGF0Y2hDb21wYWN0KHZv
aWQqIHdoZXJlLCBpbnQzMl90IHZhbHVlKQogICAgIHsKQEAgLTI4NzIsNyArMjg5Myw3IEBAIHB1
YmxpYzoKICAgICAgICAgICAgICAgICByZXR1cm4gTGlua0p1bXBDb25kaXRpb25EaXJlY3Q7CiAK
ICAgICAgICAgICAgIHJldHVybiBMaW5rSnVtcENvbmRpdGlvbjsKLSAgICAgICAgICAgIH0KKyAg
ICAgICAgfQogICAgICAgICBjYXNlIEp1bXBDb21wYXJlQW5kQnJhbmNoOiAgewogICAgICAgICAg
ICAgQVNTRVJUKGlzNEJ5dGVBbGlnbmVkKGZyb20pKTsKICAgICAgICAgICAgIEFTU0VSVChpczRC
eXRlQWxpZ25lZCh0bykpOwpAQCAtMjk0NSw2ICsyOTY2LDEyIEBAIHB1YmxpYzoKICAgICAgICAg
fQogICAgIH0KIAorICAgIHN0YXRpYyBBTFdBWVNfSU5MSU5FIGJvb2wgY2FuRW1pdEp1bXAodm9p
ZCogZnJvbSwgdm9pZCogdG8pCisgICAgeworICAgICAgICBpbnRwdHJfdCBkaWZmID0gKGJpdHdp
c2VfY2FzdDxpbnRwdHJfdD4oZnJvbSkgLSBiaXR3aXNlX2Nhc3Q8aW50cHRyX3Q+KHRvKSkgPj4g
MjsKKyAgICAgICAgcmV0dXJuIGlzSW50PDI2PihkaWZmKTsKKyAgICB9CisKIHByb3RlY3RlZDoK
ICAgICB0ZW1wbGF0ZTxEYXRhc2l6ZSBzaXplPgogICAgIHN0YXRpYyBib29sIGNoZWNrTW92ayhp
bnQgaW5zbiwgaW50IF9odywgUmVnaXN0ZXJJRCBfcmQpCkBAIC0yOTk0LDkgKzMwMjEsMTUgQEAg
cHJvdGVjdGVkOgogICAgICAgICBBU1NFUlQoIShyZWludGVycHJldF9jYXN0PGludHB0cl90Pih0
bykgJiAzKSk7CiAgICAgICAgIGFzc2VydElzTm90VGFnZ2VkKHRvKTsKICAgICAgICAgYXNzZXJ0
SXNOb3RUYWdnZWQoZnJvbUluc3RydWN0aW9uKTsKLSAgICAgICAgaW50cHRyX3Qgb2Zmc2V0ID0g
KHJlaW50ZXJwcmV0X2Nhc3Q8aW50cHRyX3Q+KHRvKSAtIHJlaW50ZXJwcmV0X2Nhc3Q8aW50cHRy
X3Q+KGZyb21JbnN0cnVjdGlvbikpID4+IDI7CisgICAgICAgIGludHB0cl90IG9mZnNldCA9IChi
aXR3aXNlX2Nhc3Q8aW50cHRyX3Q+KHRvKSAtIGJpdHdpc2VfY2FzdDxpbnRwdHJfdD4oZnJvbUlu
c3RydWN0aW9uKSkgPj4gMjsKICAgICAgICAgQVNTRVJUKHN0YXRpY19jYXN0PGludD4ob2Zmc2V0
KSA9PSBvZmZzZXQpOwogCisgICAgICAgIGlmICghaXNJbnQ8MjY+KG9mZnNldCkpIHsKKyAgICAg
ICAgICAgIHRvID0gRXhlY3V0YWJsZUFsbG9jYXRvcjo6c2luZ2xldG9uKCkuZ2V0SnVtcElzbGFu
ZFRvKGJpdHdpc2VfY2FzdDx2b2lkKj4oZnJvbUluc3RydWN0aW9uKSwgdG8pOworICAgICAgICAg
ICAgb2Zmc2V0ID0gKGJpdHdpc2VfY2FzdDxpbnRwdHJfdD4odG8pIC0gYml0d2lzZV9jYXN0PGlu
dHB0cl90Pihmcm9tSW5zdHJ1Y3Rpb24pKSA+PiAyOworICAgICAgICAgICAgUkVMRUFTRV9BU1NF
UlQoaXNJbnQ8MjY+KG9mZnNldCkpOworICAgICAgICB9CisKICAgICAgICAgaW50IGluc24gPSB1
bmNvbmRpdGlvbmFsQnJhbmNoSW1tZWRpYXRlKGlzQ2FsbCwgc3RhdGljX2Nhc3Q8aW50PihvZmZz
ZXQpKTsKICAgICAgICAgUkVMRUFTRV9BU1NFUlQocm91bmRVcFRvTXVsdGlwbGVPZjxpbnN0cnVj
dGlvblNpemU+KGZyb20pID09IGZyb20pOwogICAgICAgICBjb3B5KGZyb20sICZpbnNuLCBzaXpl
b2YoaW50KSk7CkBAIC0zMDA4LDEyICszMDQxLDEyIEBAIHByb3RlY3RlZDoKICAgICAgICAgQVNT
RVJUKCEocmVpbnRlcnByZXRfY2FzdDxpbnRwdHJfdD4oZnJvbSkgJiAzKSk7CiAgICAgICAgIEFT
U0VSVCghKHJlaW50ZXJwcmV0X2Nhc3Q8aW50cHRyX3Q+KHRvKSAmIDMpKTsKICAgICAgICAgaW50
cHRyX3Qgb2Zmc2V0ID0gKHJlaW50ZXJwcmV0X2Nhc3Q8aW50cHRyX3Q+KHRvKSAtIHJlaW50ZXJw
cmV0X2Nhc3Q8aW50cHRyX3Q+KGZyb21JbnN0cnVjdGlvbikpID4+IDI7Ci0gICAgICAgIEFTU0VS
VChpc0ludDwyNj4ob2Zmc2V0KSk7CiAKICAgICAgICAgYm9vbCB1c2VEaXJlY3QgPSBpc0ludDwx
OT4ob2Zmc2V0KTsKICAgICAgICAgQVNTRVJUKHR5cGUgPT0gSW5kaXJlY3RCcmFuY2ggfHwgdXNl
RGlyZWN0KTsKIAogICAgICAgICBpZiAodXNlRGlyZWN0IHx8IHR5cGUgPT0gRGlyZWN0QnJhbmNo
KSB7CisgICAgICAgICAgICBBU1NFUlQoaXNJbnQ8MTk+KG9mZnNldCkpOwogICAgICAgICAgICAg
aW50IGluc24gPSBjb21wYXJlQW5kQnJhbmNoSW1tZWRpYXRlKGlzNjRCaXQgPyBEYXRhc2l6ZV82
NCA6IERhdGFzaXplXzMyLCBjb25kaXRpb24gPT0gQ29uZGl0aW9uTkUsIHN0YXRpY19jYXN0PGlu
dD4ob2Zmc2V0KSwgcnQpOwogICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQocm91bmRVcFRvTXVs
dGlwbGVPZjxpbnN0cnVjdGlvblNpemU+KGZyb20pID09IGZyb20pOwogICAgICAgICAgICAgY29w
eShmcm9tLCAmaW5zbiwgc2l6ZW9mKGludCkpOwpAQCAtMzAzNiwxMiArMzA2OSwxMiBAQCBwcm90
ZWN0ZWQ6CiAgICAgICAgIEFTU0VSVCghKHJlaW50ZXJwcmV0X2Nhc3Q8aW50cHRyX3Q+KGZyb20p
ICYgMykpOwogICAgICAgICBBU1NFUlQoIShyZWludGVycHJldF9jYXN0PGludHB0cl90Pih0bykg
JiAzKSk7CiAgICAgICAgIGludHB0cl90IG9mZnNldCA9IChyZWludGVycHJldF9jYXN0PGludHB0
cl90Pih0bykgLSByZWludGVycHJldF9jYXN0PGludHB0cl90Pihmcm9tSW5zdHJ1Y3Rpb24pKSA+
PiAyOwotICAgICAgICBBU1NFUlQoaXNJbnQ8MjY+KG9mZnNldCkpOwogCiAgICAgICAgIGJvb2wg
dXNlRGlyZWN0ID0gaXNJbnQ8MTk+KG9mZnNldCk7CiAgICAgICAgIEFTU0VSVCh0eXBlID09IElu
ZGlyZWN0QnJhbmNoIHx8IHVzZURpcmVjdCk7CiAKICAgICAgICAgaWYgKHVzZURpcmVjdCB8fCB0
eXBlID09IERpcmVjdEJyYW5jaCkgeworICAgICAgICAgICAgQVNTRVJUKGlzSW50PDE5PihvZmZz
ZXQpKTsKICAgICAgICAgICAgIGludCBpbnNuID0gY29uZGl0aW9uYWxCcmFuY2hJbW1lZGlhdGUo
c3RhdGljX2Nhc3Q8aW50PihvZmZzZXQpLCBjb25kaXRpb24pOwogICAgICAgICAgICAgUkVMRUFT
RV9BU1NFUlQocm91bmRVcFRvTXVsdGlwbGVPZjxpbnN0cnVjdGlvblNpemU+KGZyb20pID09IGZy
b20pOwogICAgICAgICAgICAgY29weShmcm9tLCAmaW5zbiwgc2l6ZW9mKGludCkpOwpAQCAtMzA2
NSwxMiArMzA5OCwxMiBAQCBwcm90ZWN0ZWQ6CiAgICAgICAgIEFTU0VSVCghKHJlaW50ZXJwcmV0
X2Nhc3Q8aW50cHRyX3Q+KHRvKSAmIDMpKTsKICAgICAgICAgaW50cHRyX3Qgb2Zmc2V0ID0gKHJl
aW50ZXJwcmV0X2Nhc3Q8aW50cHRyX3Q+KHRvKSAtIHJlaW50ZXJwcmV0X2Nhc3Q8aW50cHRyX3Q+
KGZyb21JbnN0cnVjdGlvbikpID4+IDI7CiAgICAgICAgIEFTU0VSVChzdGF0aWNfY2FzdDxpbnQ+
KG9mZnNldCkgPT0gb2Zmc2V0KTsKLSAgICAgICAgQVNTRVJUKGlzSW50PDI2PihvZmZzZXQpKTsK
IAogICAgICAgICBib29sIHVzZURpcmVjdCA9IGlzSW50PDE0PihvZmZzZXQpOwogICAgICAgICBB
U1NFUlQodHlwZSA9PSBJbmRpcmVjdEJyYW5jaCB8fCB1c2VEaXJlY3QpOwogCiAgICAgICAgIGlm
ICh1c2VEaXJlY3QgfHwgdHlwZSA9PSBEaXJlY3RCcmFuY2gpIHsKKyAgICAgICAgICAgIEFTU0VS
VChpc0ludDwxND4ob2Zmc2V0KSk7CiAgICAgICAgICAgICBpbnQgaW5zbiA9IHRlc3RBbmRCcmFu
Y2hJbW1lZGlhdGUoY29uZGl0aW9uID09IENvbmRpdGlvbk5FLCBzdGF0aWNfY2FzdDxpbnQ+KGJp
dE51bWJlciksIHN0YXRpY19jYXN0PGludD4ob2Zmc2V0KSwgcnQpOwogICAgICAgICAgICAgUkVM
RUFTRV9BU1NFUlQocm91bmRVcFRvTXVsdGlwbGVPZjxpbnN0cnVjdGlvblNpemU+KGZyb20pID09
IGZyb20pOwogICAgICAgICAgICAgY29weShmcm9tLCAmaW5zbiwgc2l6ZW9mKGludCkpOwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9BYnN0cmFjdE1hY3JvQXNzZW1ibGVy
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9BYnN0cmFj
dE1hY3JvQXNzZW1ibGVyLmgJKHJldmlzaW9uIDI1ODM1MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9hc3NlbWJsZXIvQWJzdHJhY3RNYWNyb0Fzc2VtYmxlci5oCSh3b3JraW5nIGNvcHkpCkBA
IC05MTksNiArOTE5LDIyIEBAIHB1YmxpYzoKICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JF
QUNIRUQoKTsKICAgICB9CiAKKyAgICB0ZW1wbGF0ZTxQdHJUYWcgY2FsbFRhZywgUHRyVGFnIGRl
c3RUYWc+CisgICAgc3RhdGljIENvZGVMb2NhdGlvbkxhYmVsPGRlc3RUYWc+IHByZXBhcmVGb3JB
dG9taWNSZXBhdGNoTmVhckNhbGxDb25jdXJyZW50bHkoQ29kZUxvY2F0aW9uTmVhckNhbGw8Y2Fs
bFRhZz4gbmVhckNhbGwsIENvZGVMb2NhdGlvbkxhYmVsPGRlc3RUYWc+IGRlc3RpbmF0aW9uKQor
ICAgIHsKKyNpZiBVU0UoSlVNUF9JU0xBTkRTKQorICAgICAgICBzd2l0Y2ggKG5lYXJDYWxsLmNh
bGxNb2RlKCkpIHsKKyAgICAgICAgY2FzZSBOZWFyQ2FsbE1vZGU6OlRhaWw6CisgICAgICAgICAg
ICByZXR1cm4gQ29kZUxvY2F0aW9uTGFiZWw8ZGVzdFRhZz4odGFnQ29kZVB0cjxkZXN0VGFnPihB
c3NlbWJsZXJUeXBlOjpwcmVwYXJlRm9yQXRvbWljUmVsaW5rSnVtcENvbmN1cnJlbnRseShuZWFy
Q2FsbC5kYXRhTG9jYXRpb24oKSwgZGVzdGluYXRpb24uZGF0YUxvY2F0aW9uKCkpKSk7CisgICAg
ICAgIGNhc2UgTmVhckNhbGxNb2RlOjpSZWd1bGFyOgorICAgICAgICAgICAgcmV0dXJuIENvZGVM
b2NhdGlvbkxhYmVsPGRlc3RUYWc+KHRhZ0NvZGVQdHI8ZGVzdFRhZz4oQXNzZW1ibGVyVHlwZTo6
cHJlcGFyZUZvckF0b21pY1JlbGlua0NhbGxDb25jdXJyZW50bHkobmVhckNhbGwuZGF0YUxvY2F0
aW9uKCksIGRlc3RpbmF0aW9uLnVudGFnZ2VkRXhlY3V0YWJsZUFkZHJlc3MoKSkpKTsKKyAgICAg
ICAgfQorI2Vsc2UKKyAgICAgICAgVU5VU0VEX1BBUkFNKG5lYXJDYWxsKTsKKyAgICAgICAgcmV0
dXJuIGRlc3RpbmF0aW9uOworI2VuZGlmCisgICAgfQorCiAgICAgdGVtcGxhdGU8UHRyVGFnIHRh
Zz4KICAgICBzdGF0aWMgdm9pZCByZXBhdGNoQ29tcGFjdChDb2RlTG9jYXRpb25EYXRhTGFiZWxD
b21wYWN0PHRhZz4gZGF0YUxhYmVsQ29tcGFjdCwgaW50MzJfdCB2YWx1ZSkKICAgICB7CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL0xpbmtCdWZmZXIuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTGlua0J1ZmZlci5jcHAJKHJl
dmlzaW9uIDI1ODM1MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTGlua0J1
ZmZlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEzMSw5ICsxMzEsOSBAQCBzdGF0aWMgQUxXQVlT
X0lOTElORSB2b2lkIHJlY29yZExpbmtPZmZzCiB9CiAKIHRlbXBsYXRlIDx0eXBlbmFtZSBJbnN0
cnVjdGlvblR5cGU+Ci12b2lkIExpbmtCdWZmZXI6OmNvcHlDb21wYWN0QW5kTGlua0NvZGUoTWFj
cm9Bc3NlbWJsZXImIG1hY3JvQXNzZW1ibGVyLCB2b2lkKiBvd25lclVJRCwgSklUQ29tcGlsYXRp
b25FZmZvcnQgZWZmb3J0KQordm9pZCBMaW5rQnVmZmVyOjpjb3B5Q29tcGFjdEFuZExpbmtDb2Rl
KE1hY3JvQXNzZW1ibGVyJiBtYWNyb0Fzc2VtYmxlciwgSklUQ29tcGlsYXRpb25FZmZvcnQgZWZm
b3J0KQogewotICAgIGFsbG9jYXRlKG1hY3JvQXNzZW1ibGVyLCBvd25lclVJRCwgZWZmb3J0KTsK
KyAgICBhbGxvY2F0ZShtYWNyb0Fzc2VtYmxlciwgZWZmb3J0KTsKICAgICBjb25zdCBzaXplX3Qg
aW5pdGlhbFNpemUgPSBtYWNyb0Fzc2VtYmxlci5tX2Fzc2VtYmxlci5jb2RlU2l6ZSgpOwogICAg
IGlmIChkaWRGYWlsVG9BbGxvY2F0ZSgpKQogICAgICAgICByZXR1cm47CkBAIC0yOTUsNyArMjk1
LDcgQEAgdm9pZCBMaW5rQnVmZmVyOjpjb3B5Q29tcGFjdEFuZExpbmtDb2RlKAogI2VuZGlmIC8v
IEVOQUJMRShCUkFOQ0hfQ09NUEFDVElPTikKIAogCi12b2lkIExpbmtCdWZmZXI6OmxpbmtDb2Rl
KE1hY3JvQXNzZW1ibGVyJiBtYWNyb0Fzc2VtYmxlciwgdm9pZCogb3duZXJVSUQsIEpJVENvbXBp
bGF0aW9uRWZmb3J0IGVmZm9ydCkKK3ZvaWQgTGlua0J1ZmZlcjo6bGlua0NvZGUoTWFjcm9Bc3Nl
bWJsZXImIG1hY3JvQXNzZW1ibGVyLCBKSVRDb21waWxhdGlvbkVmZm9ydCBlZmZvcnQpCiB7CiAg
ICAgLy8gRW5zdXJlIHRoYXQgdGhlIGVuZCBvZiB0aGUgbGFzdCBpbnZhbGlkYXRpb24gcG9pbnQg
ZG9lcyBub3QgZXh0ZW5kIGJleW9uZCB0aGUgZW5kIG9mIHRoZSBidWZmZXIuCiAgICAgbWFjcm9B
c3NlbWJsZXIubGFiZWwoKTsKQEAgLTMwNCw3ICszMDQsNyBAQCB2b2lkIExpbmtCdWZmZXI6Omxp
bmtDb2RlKE1hY3JvQXNzZW1ibGVyCiAjaWYgZGVmaW5lZChBU1NFTUJMRVJfSEFTX0NPTlNUQU5U
X1BPT0wpICYmIEFTU0VNQkxFUl9IQVNfQ09OU1RBTlRfUE9PTAogICAgIG1hY3JvQXNzZW1ibGVy
Lm1fYXNzZW1ibGVyLmJ1ZmZlcigpLmZsdXNoQ29uc3RhbnRQb29sKGZhbHNlKTsKICNlbmRpZgot
ICAgIGFsbG9jYXRlKG1hY3JvQXNzZW1ibGVyLCBvd25lclVJRCwgZWZmb3J0KTsKKyAgICBhbGxv
Y2F0ZShtYWNyb0Fzc2VtYmxlciwgZWZmb3J0KTsKICAgICBpZiAoIW1fZGlkQWxsb2NhdGUpCiAg
ICAgICAgIHJldHVybjsKICAgICBBU1NFUlQobV9jb2RlKTsKQEAgLTMxOCwxNSArMzE4LDE1IEBA
IHZvaWQgTGlua0J1ZmZlcjo6bGlua0NvZGUoTWFjcm9Bc3NlbWJsZXIKICAgICBtYWNyb0Fzc2Vt
Ymxlci5tX2Fzc2VtYmxlci5yZWxvY2F0ZUp1bXBzKGJ1ZmZlci5kYXRhKCksIGNvZGUpOwogI2Vu
ZGlmCiAjZWxpZiBDUFUoQVJNX1RIVU1CMikKLSAgICBjb3B5Q29tcGFjdEFuZExpbmtDb2RlPHVp
bnQxNl90PihtYWNyb0Fzc2VtYmxlciwgb3duZXJVSUQsIGVmZm9ydCk7CisgICAgY29weUNvbXBh
Y3RBbmRMaW5rQ29kZTx1aW50MTZfdD4obWFjcm9Bc3NlbWJsZXIsIGVmZm9ydCk7CiAjZWxpZiBD
UFUoQVJNNjQpCi0gICAgY29weUNvbXBhY3RBbmRMaW5rQ29kZTx1aW50MzJfdD4obWFjcm9Bc3Nl
bWJsZXIsIG93bmVyVUlELCBlZmZvcnQpOworICAgIGNvcHlDb21wYWN0QW5kTGlua0NvZGU8dWlu
dDMyX3Q+KG1hY3JvQXNzZW1ibGVyLCBlZmZvcnQpOwogI2VuZGlmIC8vICFFTkFCTEUoQlJBTkNI
X0NPTVBBQ1RJT04pCiAKICAgICBtX2xpbmtUYXNrcyA9IFdURk1vdmUobWFjcm9Bc3NlbWJsZXIu
bV9saW5rVGFza3MpOwogfQogCi12b2lkIExpbmtCdWZmZXI6OmFsbG9jYXRlKE1hY3JvQXNzZW1i
bGVyJiBtYWNyb0Fzc2VtYmxlciwgdm9pZCogb3duZXJVSUQsIEpJVENvbXBpbGF0aW9uRWZmb3J0
IGVmZm9ydCkKK3ZvaWQgTGlua0J1ZmZlcjo6YWxsb2NhdGUoTWFjcm9Bc3NlbWJsZXImIG1hY3Jv
QXNzZW1ibGVyLCBKSVRDb21waWxhdGlvbkVmZm9ydCBlZmZvcnQpCiB7CiAgICAgc2l6ZV90IGlu
aXRpYWxTaXplID0gbWFjcm9Bc3NlbWJsZXIubV9hc3NlbWJsZXIuY29kZVNpemUoKTsKICAgICBp
ZiAobV9jb2RlKSB7CkBAIC0zNDQsNyArMzQ0LDcgQEAgdm9pZCBMaW5rQnVmZmVyOjphbGxvY2F0
ZShNYWNyb0Fzc2VtYmxlcgogICAgICAgICBpbml0aWFsU2l6ZSA9IG1hY3JvQXNzZW1ibGVyLm1f
YXNzZW1ibGVyLmNvZGVTaXplKCk7CiAgICAgfQogCi0gICAgbV9leGVjdXRhYmxlTWVtb3J5ID0g
RXhlY3V0YWJsZUFsbG9jYXRvcjo6c2luZ2xldG9uKCkuYWxsb2NhdGUoaW5pdGlhbFNpemUsIG93
bmVyVUlELCBlZmZvcnQpOworICAgIG1fZXhlY3V0YWJsZU1lbW9yeSA9IEV4ZWN1dGFibGVBbGxv
Y2F0b3I6OnNpbmdsZXRvbigpLmFsbG9jYXRlKGluaXRpYWxTaXplLCBlZmZvcnQpOwogICAgIGlm
ICghbV9leGVjdXRhYmxlTWVtb3J5KQogICAgICAgICByZXR1cm47CiAgICAgbV9jb2RlID0gTWFj
cm9Bc3NlbWJsZXJDb2RlUHRyPExpbmtCdWZmZXJQdHJUYWc+KG1fZXhlY3V0YWJsZU1lbW9yeS0+
c3RhcnQoKS5yZXRhZ2dlZFB0cjxMaW5rQnVmZmVyUHRyVGFnPigpKTsKQEAgLTM1OCw3ICszNTgs
NyBAQCB2b2lkIExpbmtCdWZmZXI6OnBlcmZvcm1GaW5hbGl6YXRpb24oKQogICAgICAgICB0YXNr
LT5ydW4oKnRoaXMpOwogCiAjaWZuZGVmIE5ERUJVRwotICAgIEFTU0VSVCghaXNDb21waWxhdGlv
blRocmVhZCgpKTsKKyAgICBBU1NFUlQobV9pc0p1bXBJc2xhbmQgfHwgIWlzQ29tcGlsYXRpb25U
aHJlYWQoKSk7CiAgICAgQVNTRVJUKCFtX2NvbXBsZXRlZCk7CiAgICAgQVNTRVJUKGlzVmFsaWQo
KSk7CiAgICAgbV9jb21wbGV0ZWQgPSB0cnVlOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2Fzc2VtYmxlci9MaW5rQnVmZmVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2Fzc2VtYmxlci9MaW5rQnVmZmVyLmgJKHJldmlzaW9uIDI1ODM1MCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTGlua0J1ZmZlci5oCSh3b3JraW5nIGNvcHkpCkBAIC05
MCw3ICs5MCw4IEBAIHB1YmxpYzoKICAgICAgICAgLCBtX2NvbXBsZXRlZChmYWxzZSkKICNlbmRp
ZgogICAgIHsKLSAgICAgICAgbGlua0NvZGUobWFjcm9Bc3NlbWJsZXIsIG93bmVyVUlELCBlZmZv
cnQpOworICAgICAgICBVTlVTRURfUEFSQU0ob3duZXJVSUQpOworICAgICAgICBsaW5rQ29kZSht
YWNyb0Fzc2VtYmxlciwgZWZmb3J0KTsKICAgICB9CiAKICAgICB0ZW1wbGF0ZTxQdHJUYWcgdGFn
PgpAQCAtMTA3LDcgKzEwOCw3IEBAIHB1YmxpYzoKICNlbHNlCiAgICAgICAgIFVOVVNFRF9QQVJB
TShzaG91bGRQZXJmb3JtQnJhbmNoQ29tcGFjdGlvbik7CiAjZW5kaWYKLSAgICAgICAgbGlua0Nv
ZGUobWFjcm9Bc3NlbWJsZXIsIDAsIGVmZm9ydCk7CisgICAgICAgIGxpbmtDb2RlKG1hY3JvQXNz
ZW1ibGVyLCBlZmZvcnQpOwogICAgIH0KIAogICAgIH5MaW5rQnVmZmVyKCkKQEAgLTEyMyw2ICsx
MjQsMTMgQEAgcHVibGljOgogICAgIHsKICAgICAgICAgcmV0dXJuICFkaWRGYWlsVG9BbGxvY2F0
ZSgpOwogICAgIH0KKworICAgIHZvaWQgc2V0SXNKdW1wSXNsYW5kKCkKKyAgICB7CisjaWYgQVNT
RVJUX0VOQUJMRUQKKyAgICAgICAgbV9pc0p1bXBJc2xhbmQgPSB0cnVlOworI2VuZGlmCisgICAg
fQogICAgIAogICAgIC8vIFRoZXNlIG1ldGhvZHMgYXJlIHVzZWQgdG8gbGluayBvciBzZXQgdmFs
dWVzIGF0IGNvZGUgZ2VuZXJhdGlvbiB0aW1lLgogCkBAIC0zMjEsMTIgKzMyOSwxMiBAQCBwcml2
YXRlOgogICAgICAgICByZXR1cm4gbV9jb2RlLmRhdGFMb2NhdGlvbigpOwogICAgIH0KICAgICAK
LSAgICB2b2lkIGFsbG9jYXRlKE1hY3JvQXNzZW1ibGVyJiwgdm9pZCogb3duZXJVSUQsIEpJVENv
bXBpbGF0aW9uRWZmb3J0KTsKKyAgICB2b2lkIGFsbG9jYXRlKE1hY3JvQXNzZW1ibGVyJiwgSklU
Q29tcGlsYXRpb25FZmZvcnQpOwogCi0gICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBsaW5rQ29k
ZShNYWNyb0Fzc2VtYmxlciYsIHZvaWQqIG93bmVyVUlELCBKSVRDb21waWxhdGlvbkVmZm9ydCk7
CisgICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBsaW5rQ29kZShNYWNyb0Fzc2VtYmxlciYsIEpJ
VENvbXBpbGF0aW9uRWZmb3J0KTsKICNpZiBFTkFCTEUoQlJBTkNIX0NPTVBBQ1RJT04pCiAgICAg
dGVtcGxhdGUgPHR5cGVuYW1lIEluc3RydWN0aW9uVHlwZT4KLSAgICB2b2lkIGNvcHlDb21wYWN0
QW5kTGlua0NvZGUoTWFjcm9Bc3NlbWJsZXImLCB2b2lkKiBvd25lclVJRCwgSklUQ29tcGlsYXRp
b25FZmZvcnQpOworICAgIHZvaWQgY29weUNvbXBhY3RBbmRMaW5rQ29kZShNYWNyb0Fzc2VtYmxl
ciYsIEpJVENvbXBpbGF0aW9uRWZmb3J0KTsKICNlbmRpZgogCiAgICAgdm9pZCBwZXJmb3JtRmlu
YWxpemF0aW9uKCk7CkBAIC0zNDksNiArMzU3LDkgQEAgcHJpdmF0ZToKICNpZm5kZWYgTkRFQlVH
CiAgICAgYm9vbCBtX2NvbXBsZXRlZDsKICNlbmRpZgorI2lmIEFTU0VSVF9FTkFCTEVECisgICAg
Ym9vbCBtX2lzSnVtcElzbGFuZCB7IGZhbHNlIH07CisjZW5kaWYKICAgICBib29sIG1fYWxyZWFk
eURpc2Fzc2VtYmxlZCB7IGZhbHNlIH07CiAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPExpbmtC
dWZmZXJQdHJUYWc+IG1fY29kZTsKICAgICBWZWN0b3I8UmVmUHRyPFNoYXJlZFRhc2s8dm9pZChM
aW5rQnVmZmVyJik+Pj4gbV9saW5rVGFza3M7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
YXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyQ29kZVJlZi5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJDb2RlUmVmLmgJKHJldmlzaW9u
IDI1ODM1MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJs
ZXJDb2RlUmVmLmgJKHdvcmtpbmcgY29weSkKQEAgLTQzNCw3ICs0MzQsNiBAQCBwdWJsaWM6CiAg
ICAgICAgIDogbV9jb2RlUHRyKGV4ZWN1dGFibGVNZW1vcnktPnN0YXJ0KCkucmV0YWdnZWRQdHI8
dGFnPigpKQogICAgICAgICAsIG1fZXhlY3V0YWJsZU1lbW9yeShXVEZNb3ZlKGV4ZWN1dGFibGVN
ZW1vcnkpKQogICAgIHsKLSAgICAgICAgQVNTRVJUKG1fZXhlY3V0YWJsZU1lbW9yeS0+aXNNYW5h
Z2VkKCkpOwogICAgICAgICBBU1NFUlQobV9leGVjdXRhYmxlTWVtb3J5LT5zdGFydCgpKTsKICAg
ICAgICAgQVNTRVJUKG1fY29kZVB0cik7CiAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9FeGVjdXRhYmxlQWxsb2NhdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L0V4ZWN1dGFibGVBbGxvY2F0b3IuY3BwCShyZXZpc2lvbiAyNTgzNTAp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0V4ZWN1dGFibGVBbGxvY2F0b3IuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0yOCw5ICsyOCwxMCBAQAogCiAjaWYgRU5BQkxFKEpJVCkKIAotI2lu
Y2x1ZGUgIkNvZGVQcm9maWxpbmcuaCIKICNpbmNsdWRlICJFeGVjdXRhYmxlQWxsb2NhdGlvbkZ1
enouaCIKKyNpbmNsdWRlICJJdGVyYXRpb25TdGF0dXMuaCIKICNpbmNsdWRlICJKU0NJbmxpbmVz
LmgiCisjaW5jbHVkZSA8dHlwZV90cmFpdHM+CiAjaW5jbHVkZSA8d3RmL0ZpbGVTeXN0ZW0uaD4K
ICNpbmNsdWRlIDx3dGYvTWV0YUFsbG9jYXRvci5oPgogI2luY2x1ZGUgPHd0Zi9QYWdlUmVzZXJ2
YXRpb24uaD4KQEAgLTk2LDkgKzk3LDIwIEBAIHN0YXRpYyBjb25zdGV4cHIgc2l6ZV90IGZpeGVk
RXhlY3V0YWJsZU0KICNlbGlmIENQVShBUk0pCiBzdGF0aWMgY29uc3RleHByIHNpemVfdCBmaXhl
ZEV4ZWN1dGFibGVNZW1vcnlQb29sU2l6ZSA9IDE2ICogMTAyNCAqIDEwMjQ7CiAjZWxpZiBDUFUo
QVJNNjQpCisjaWYgVVNFKEpVTVBfSVNMQU5EUykKK3N0YXRpYyBjb25zdGV4cHIgc2l6ZV90IGZp
eGVkRXhlY3V0YWJsZU1lbW9yeVBvb2xTaXplID0gMSAqIDEwMjQgKiAxMDI0ICogMTAyNDsKKy8v
IFRoZXNlIHNpemVzIGd1YXJhbnRlZSB0aGF0IGFueSBqdW1wIHdpdGhpbiBhbiBpc2xhbmQgY2Fu
IGp1bXAgZm9yd2FyZHMgb3IgYmFja3dhcmRzCisvLyB0byB0aGUgYWRqYWNlbnQgaXNsYW5kIGlu
IGEgc2luZ2xlIGluc3RydWN0aW9uLgorc3RhdGljIGNvbnN0ZXhwciBzaXplX3QgcmVnaW9uU2l6
ZSA9IDExMiAqIDEwMjQgKiAxMDI0Oworc3RhdGljIGNvbnN0ZXhwciBzaXplX3QgaXNsYW5kUmVn
aW9uU2l6ZSA9IDE2ICogMTAyNCAqIDEwMjQ7CitzdGF0aWMgY29uc3RleHByIHNpemVfdCBudW1i
ZXJPZlJlZ2lvbnMgPSBmaXhlZEV4ZWN1dGFibGVNZW1vcnlQb29sU2l6ZSAvIHJlZ2lvblNpemU7
CitzdGF0aWMgY29uc3RleHByIHNpemVfdCBpc2xhbmRTaXplSW5CeXRlcyA9IDQ7CitzdGF0aWMg
Y29uc3RleHByIHNpemVfdCBtYXhJc2xhbmRzUGVyUmVnaW9uID0gaXNsYW5kUmVnaW9uU2l6ZSAv
IGlzbGFuZFNpemVJbkJ5dGVzOworI2Vsc2UKIHN0YXRpYyBjb25zdGV4cHIgc2l6ZV90IGZpeGVk
RXhlY3V0YWJsZU1lbW9yeVBvb2xTaXplID0gMTI4ICogMTAyNCAqIDEwMjQ7CisjZW5kaWYKICNl
bGlmIENQVShYODZfNjQpCi1zdGF0aWMgY29uc3RleHByIHNpemVfdCBmaXhlZEV4ZWN1dGFibGVN
ZW1vcnlQb29sU2l6ZSA9IDEwMjQgKiAxMDI0ICogMTAyNDsKK3N0YXRpYyBjb25zdGV4cHIgc2l6
ZV90IGZpeGVkRXhlY3V0YWJsZU1lbW9yeVBvb2xTaXplID0gMSAqIDEwMjQgKiAxMDI0ICogMTAy
NDsKICNlbHNlCiBzdGF0aWMgY29uc3RleHByIHNpemVfdCBmaXhlZEV4ZWN1dGFibGVNZW1vcnlQ
b29sU2l6ZSA9IDMyICogMTAyNCAqIDEwMjQ7CiAjZW5kaWYKQEAgLTMxMywxMCArMzI1LDExIEBA
IHN0YXRpYyBBTFdBWVNfSU5MSU5FIEpJVFJlc2VydmF0aW9uIGluaXQKICAgICBpZiAoIWlzSklU
RW5hYmxlZCgpKQogICAgICAgICByZXR1cm4gcmVzZXJ2YXRpb247CiAKKyAgICByZXNlcnZhdGlv
bi5zaXplID0gZml4ZWRFeGVjdXRhYmxlTWVtb3J5UG9vbFNpemU7CisjaWYgIVVTRShKVU1QX0lT
TEFORFMpCiAgICAgaWYgKE9wdGlvbnM6OmppdE1lbW9yeVJlc2VydmF0aW9uU2l6ZSgpKQogICAg
ICAgICByZXNlcnZhdGlvbi5zaXplID0gT3B0aW9uczo6aml0TWVtb3J5UmVzZXJ2YXRpb25TaXpl
KCk7Ci0gICAgZWxzZQotICAgICAgICByZXNlcnZhdGlvbi5zaXplID0gZml4ZWRFeGVjdXRhYmxl
TWVtb3J5UG9vbFNpemU7CisjZW5kaWYKICAgICByZXNlcnZhdGlvbi5zaXplID0gc3RkOjptYXgo
cm91bmRVcFRvTXVsdGlwbGVPZihwYWdlU2l6ZSgpLCByZXNlcnZhdGlvbi5zaXplKSwgcGFnZVNp
emUoKSAqIDIpOwogCiAgICAgYXV0byB0cnlDcmVhdGVQYWdlUmVzZXJ2YXRpb24gPSBbXSAoc2l6
ZV90IHJlc2VydmF0aW9uU2l6ZSkgewpAQCAtMzYzLDUyICszNzYsNDU1IEBAIHN0YXRpYyBBTFdB
WVNfSU5MSU5FIEpJVFJlc2VydmF0aW9uIGluaXQKICAgICByZXR1cm4gcmVzZXJ2YXRpb247CiB9
CiAKLWNsYXNzIEZpeGVkVk1Qb29sRXhlY3V0YWJsZUFsbG9jYXRvciBmaW5hbCA6IHB1YmxpYyBN
ZXRhQWxsb2NhdG9yIHsKK2NsYXNzIEZpeGVkVk1Qb29sRXhlY3V0YWJsZUFsbG9jYXRvciBmaW5h
bCB7CiAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CisKKyNpZiBVU0UoSlVNUF9JU0xBTkRT
KQorICAgIGNsYXNzIElzbGFuZHM7CisgICAgY2xhc3MgUmVnaW9uQWxsb2NhdG9yOworI2VuZGlm
CisKIHB1YmxpYzoKICAgICBGaXhlZFZNUG9vbEV4ZWN1dGFibGVBbGxvY2F0b3IoKQotICAgICAg
ICA6IE1ldGFBbGxvY2F0b3Ioaml0QWxsb2NhdGlvbkdyYW51bGUpIC8vIHJvdW5kIHVwIGFsbCBh
bGxvY2F0aW9ucyB0byAzMiBieXRlcworI2lmIFVTRShKVU1QX0lTTEFORFMpCisgICAgICAgIDog
bV9hbGxvY2F0b3JzKGNvbnN0cnVjdEZpeGVkU2l6ZUFycmF5V2l0aEFyZ3VtZW50czxSZWdpb25B
bGxvY2F0b3IsIG51bWJlck9mUmVnaW9ucz4oKnRoaXMpKQorI2Vsc2UKKyAgICAgICAgOiBtX2Fs
bG9jYXRvcigqdGhpcykKKyNlbmRpZgogICAgIHsKICAgICAgICAgSklUUmVzZXJ2YXRpb24gcmVz
ZXJ2YXRpb24gPSBpbml0aWFsaXplSklUUGFnZVJlc2VydmF0aW9uKCk7CiAgICAgICAgIG1fcmVz
ZXJ2YXRpb24gPSBXVEZNb3ZlKHJlc2VydmF0aW9uLnBhZ2VSZXNlcnZhdGlvbik7CiAgICAgICAg
IGlmIChtX3Jlc2VydmF0aW9uKSB7Ci0gICAgICAgICAgICBhZGRGcmVzaEZyZWVTcGFjZShyZXNl
cnZhdGlvbi5iYXNlLCByZXNlcnZhdGlvbi5zaXplKTsKKyNpZiBVU0UoSlVNUF9JU0xBTkRTKQor
ICAgICAgICAgICAgdWludHB0cl90IHN0YXJ0ID0gYml0d2lzZV9jYXN0PHVpbnRwdHJfdD4obV9y
ZXNlcnZhdGlvbi5iYXNlKCkpOworICAgICAgICAgICAgdWludHB0cl90IHJlc2VydmF0aW9uRW5k
ID0gc3RhcnQgKyBtX3Jlc2VydmF0aW9uLnNpemUoKTsKKyAgICAgICAgICAgIGZvciAoc2l6ZV90
IGkgPSAwOyBpIDwgbnVtYmVyT2ZSZWdpb25zOyArK2kpIHsKKyAgICAgICAgICAgICAgICBSRUxF
QVNFX0FTU0VSVChzdGFydCA8IHJlc2VydmF0aW9uRW5kKTsKKyAgICAgICAgICAgICAgICBtX2Fs
bG9jYXRvcnNbaV0ubV9zdGFydCA9IHRhZ0NvZGVQdHI8RXhlY3V0YWJsZU1lbW9yeVB0clRhZz4o
Yml0d2lzZV9jYXN0PHZvaWQqPihzdGFydCkpOworICAgICAgICAgICAgICAgIG1fYWxsb2NhdG9y
c1tpXS5tX2VuZCA9IHRhZ0NvZGVQdHI8RXhlY3V0YWJsZU1lbW9yeVB0clRhZz4oYml0d2lzZV9j
YXN0PHZvaWQqPihzdGFydCArIHJlZ2lvblNpemUpKTsKKyAgICAgICAgICAgICAgICBpZiAobV9h
bGxvY2F0b3JzW2ldLmVuZCgpID4gcmVzZXJ2YXRpb25FbmQpIHsKKyAgICAgICAgICAgICAgICAg
ICAgLy8gV2UgbWF5IGhhdmUgdGFrZW4gYSBwYWdlIGZvciB0aGUgZXhlY3V0YWJsZSBvbmx5IGNv
cHkgdGh1bmsuCisgICAgICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKGkgPT0gbnVtYmVy
T2ZSZWdpb25zIC0gMSk7CisgICAgICAgICAgICAgICAgICAgIG1fYWxsb2NhdG9yc1tpXS5tX2Vu
ZCA9IHRhZ0NvZGVQdHI8RXhlY3V0YWJsZU1lbW9yeVB0clRhZz4oYml0d2lzZV9jYXN0PHZvaWQq
PihyZXNlcnZhdGlvbkVuZCkpOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAg
IG1fYWxsb2NhdG9yc1tpXS5hZGRGcmVzaEZyZWVTcGFjZShiaXR3aXNlX2Nhc3Q8dm9pZCo+KG1f
YWxsb2NhdG9yc1tpXS5zdGFydCgpKSwgbV9hbGxvY2F0b3JzW2ldLmFsbG9jYXRvclNpemUoKSk7
CisKKyAgICAgICAgICAgICAgICBzdGFydCArPSByZWdpb25TaXplOworICAgICAgICAgICAgfQor
I2Vsc2UKKyAgICAgICAgICAgIG1fYWxsb2NhdG9yLmFkZEZyZXNoRnJlZVNwYWNlKHJlc2VydmF0
aW9uLmJhc2UsIHJlc2VydmF0aW9uLnNpemUpOwogICAgICAgICAgICAgQVNTRVJUKGJ5dGVzUmVz
ZXJ2ZWQoKSA9PSByZXNlcnZhdGlvbi5zaXplKTsgLy8gU2luY2Ugb3VyIGV4ZWN1dGFibGUgbWVt
b3J5IGlzIGZpeGVkLXNpemVkLCBieXRlc1Jlc2VydmVkIGlzIG5ldmVyIGNoYW5nZWQgYWZ0ZXIg
aW5pdGlhbGl6YXRpb24uCisjZW5kaWYKICAgICAgICAgfQogICAgIH0KIAotICAgIHZpcnR1YWwg
fkZpeGVkVk1Qb29sRXhlY3V0YWJsZUFsbG9jYXRvcigpOworICAgIH5GaXhlZFZNUG9vbEV4ZWN1
dGFibGVBbGxvY2F0b3IoKQorICAgIHsKKyAgICAgICAgbV9yZXNlcnZhdGlvbi5kZWFsbG9jYXRl
KCk7CisgICAgfQogCiAgICAgdm9pZCogbWVtb3J5U3RhcnQoKSB7IHJldHVybiB1bnRhZ0NvZGVQ
dHI8RXhlY3V0YWJsZU1lbW9yeVB0clRhZz4oZ19qc2NDb25maWcuc3RhcnRFeGVjdXRhYmxlTWVt
b3J5KTsgfQogICAgIHZvaWQqIG1lbW9yeUVuZCgpIHsgcmV0dXJuIHVudGFnQ29kZVB0cjxFeGVj
dXRhYmxlTWVtb3J5UHRyVGFnPihnX2pzY0NvbmZpZy5lbmRFeGVjdXRhYmxlTWVtb3J5KTsgfQog
ICAgIGJvb2wgaXNKSVRQQyh2b2lkKiBwYykgeyByZXR1cm4gbWVtb3J5U3RhcnQoKSA8PSBwYyAm
JiBwYyA8IG1lbW9yeUVuZCgpOyB9CisgICAgYm9vbCBpc1ZhbGlkKCkgeyByZXR1cm4gISFtX3Jl
c2VydmF0aW9uOyB9CiAKLXByb3RlY3RlZDoKLSAgICBGcmVlU3BhY2VQdHIgYWxsb2NhdGVOZXdT
cGFjZShzaXplX3QmKSBvdmVycmlkZQorICAgIFJlZlB0cjxFeGVjdXRhYmxlTWVtb3J5SGFuZGxl
PiBhbGxvY2F0ZShzaXplX3Qgc2l6ZUluQnl0ZXMpCiAgICAgewotICAgICAgICAvLyBXZSdyZSBv
cGVyYXRpbmcgaW4gYSBmaXhlZCBwb29sLCBzbyBuZXcgYWxsb2NhdGlvbiBpcyBhbHdheXMgcHJv
aGliaXRlZC4KKyNpZiBVU0UoSlVNUF9JU0xBTkRTKQorICAgICAgICBhdXRvIGxvY2tlciA9IGhv
bGRMb2NrKGdldExvY2soKSk7CisKKyAgICAgICAgdW5zaWduZWQgc3RhcnQgPSAwOworICAgICAg
ICBpZiAoT3B0aW9uczo6dXNlUmFuZG9taXppbmdFeGVjdXRhYmxlSXNsYW5kQWxsb2NhdGlvbigp
KQorICAgICAgICAgICAgc3RhcnQgPSBjcnlwdG9ncmFwaGljYWxseVJhbmRvbU51bWJlcigpICUg
bV9hbGxvY2F0b3JzLnNpemUoKTsKKworICAgICAgICB1bnNpZ25lZCBpID0gc3RhcnQ7CisgICAg
ICAgIHdoaWxlICh0cnVlKSB7CisgICAgICAgICAgICBSZWdpb25BbGxvY2F0b3ImIGFsbG9jYXRv
ciA9IG1fYWxsb2NhdG9yc1tpXTsKKyAgICAgICAgICAgIGlmIChSZWZQdHI8RXhlY3V0YWJsZU1l
bW9yeUhhbmRsZT4gcmVzdWx0ID0gYWxsb2NhdG9yLmFsbG9jYXRlKGxvY2tlciwgc2l6ZUluQnl0
ZXMpKQorICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgICAgICAgICBpID0gKGkg
KyAxKSAlIG1fYWxsb2NhdG9ycy5zaXplKCk7CisgICAgICAgICAgICBpZiAoaSA9PSBzdGFydCkK
KyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQogICAgICAgICByZXR1cm4gbnVsbHB0
cjsKKyNlbHNlCisgICAgICAgIHJldHVybiBtX2FsbG9jYXRvci5hbGxvY2F0ZShzaXplSW5CeXRl
cyk7CisjZW5kaWYgLy8gVVNFKEpVTVBfSVNMQU5EUykKKyAgICB9CisKKyAgICBMb2NrJiBnZXRM
b2NrKCkgeyByZXR1cm4gbV9sb2NrOyB9CisKKyAgICAvLyBOb24gYXRvbWljCisgICAgc2l6ZV90
IGJ5dGVzQWxsb2NhdGVkKCkgCisgICAgeworICAgICAgICBzaXplX3QgcmVzdWx0ID0gMDsKKyAg
ICAgICAgZm9yRWFjaEFsbG9jYXRvcihbJl0gKEFsbG9jYXRvciYgYWxsb2NhdG9yKSB7CisgICAg
ICAgICAgICByZXN1bHQgKz0gYWxsb2NhdG9yLmJ5dGVzQWxsb2NhdGVkKCk7CisgICAgICAgIH0p
OworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKyAgICBzaXplX3QgYnl0ZXNSZXNlcnZl
ZCgpIAorICAgIHsKKyAgICAgICAgc2l6ZV90IHJlc3VsdCA9IDA7CisgICAgICAgIGZvckVhY2hB
bGxvY2F0b3IoWyZdIChBbGxvY2F0b3ImIGFsbG9jYXRvcikgeworICAgICAgICAgICAgcmVzdWx0
ICs9IGFsbG9jYXRvci5ieXRlc1Jlc2VydmVkKCk7CisgICAgICAgIH0pOworICAgICAgICByZXR1
cm4gcmVzdWx0OworICAgIH0KKyAgICBzaXplX3QgYnl0ZXNDb21taXR0ZWQoKQorICAgIHsKKyAg
ICAgICAgc2l6ZV90IHJlc3VsdCA9IDA7CisgICAgICAgIGZvckVhY2hBbGxvY2F0b3IoWyZdIChB
bGxvY2F0b3ImIGFsbG9jYXRvcikgeworICAgICAgICAgICAgcmVzdWx0ICs9IGFsbG9jYXRvci5i
eXRlc0NvbW1pdHRlZCgpOworICAgICAgICB9KTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAg
ICB9CisKKyAgICBib29sIGlzSW5BbGxvY2F0ZWRNZW1vcnkoY29uc3QgQWJzdHJhY3RMb2NrZXIm
IGxvY2tlciwgdm9pZCogYWRkcmVzcykKKyAgICB7CisjaWYgVVNFKEpVTVBfSVNMQU5EUykKKyAg
ICAgICAgaWYgKFJlZ2lvbkFsbG9jYXRvciogYWxsb2NhdG9yID0gZmluZFJlZ2lvbihiaXR3aXNl
X2Nhc3Q8dWludHB0cl90PihhZGRyZXNzKSkpCisgICAgICAgICAgICByZXR1cm4gYWxsb2NhdG9y
LT5pc0luQWxsb2NhdGVkTWVtb3J5KGxvY2tlciwgYWRkcmVzcyk7CisgICAgICAgIHJldHVybiBm
YWxzZTsKKyNlbHNlCisgICAgICAgIHJldHVybiBtX2FsbG9jYXRvci5pc0luQWxsb2NhdGVkTWVt
b3J5KGxvY2tlciwgYWRkcmVzcyk7CisjZW5kaWYKKyAgICB9CisKKyNpZiBFTkFCTEUoTUVUQV9B
TExPQ0FUT1JfUFJPRklMRSkKKyAgICB2b2lkIGR1bXBQcm9maWxlKCkKKyAgICB7CisgICAgICAg
IGZvckVhY2hBbGxvY2F0b3IoWyZdIChBbGxvY2F0b3ImIGFsbG9jYXRvcikgeworICAgICAgICAg
ICAgYWxsb2NhdG9yLmR1bXBQcm9maWxlKCk7CisgICAgICAgIH0pOworICAgIH0KKyNlbmRpZgor
CisgICAgTWV0YUFsbG9jYXRvcjo6U3RhdGlzdGljcyBjdXJyZW50U3RhdGlzdGljcygpCisgICAg
eworICAgICAgICBhdXRvIGxvY2tlciA9IGhvbGRMb2NrKGdldExvY2soKSk7CisgICAgICAgIE1l
dGFBbGxvY2F0b3I6OlN0YXRpc3RpY3MgcmVzdWx0IHsgMCwgMCwgMCB9OworICAgICAgICBmb3JF
YWNoQWxsb2NhdG9yKFsmXSAoQWxsb2NhdG9yJiBhbGxvY2F0b3IpIHsKKyAgICAgICAgICAgIGF1
dG8gYWxsb2NhdG9yU3RhdHMgPSBhbGxvY2F0b3IuY3VycmVudFN0YXRpc3RpY3MobG9ja2VyKTsK
KyAgICAgICAgICAgIHJlc3VsdC5ieXRlc0FsbG9jYXRlZCArPSBhbGxvY2F0b3JTdGF0cy5ieXRl
c0FsbG9jYXRlZDsKKyAgICAgICAgICAgIHJlc3VsdC5ieXRlc1Jlc2VydmVkICs9IGFsbG9jYXRv
clN0YXRzLmJ5dGVzUmVzZXJ2ZWQ7CisgICAgICAgICAgICByZXN1bHQuYnl0ZXNDb21taXR0ZWQg
Kz0gYWxsb2NhdG9yU3RhdHMuYnl0ZXNDb21taXR0ZWQ7CisgICAgICAgIH0pOworICAgICAgICBy
ZXR1cm4gcmVzdWx0OworICAgIH0KKworI2lmIFVTRShKVU1QX0lTTEFORFMpCisgICAgdm9pZCBo
YW5kbGVXaWxsQmVSZWxlYXNlZChjb25zdCBMb2NrSG9sZGVyJiBsb2NrZXIsIE1ldGFBbGxvY2F0
b3JIYW5kbGUmIGhhbmRsZSkKKyAgICB7CisgICAgICAgIGlmIChpc2xhbmRzRm9ySnVtcExvY2F0
aW9uLmlzRW1wdHkoKSkKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICBWZWN0b3I8SXNs
YW5kcyosIDE2PiB0b1JlbW92ZTsKKyAgICAgICAgdm9pZCogc3RhcnQgPSBoYW5kbGUuc3RhcnQo
KS51bnRhZ2dlZFB0cigpOworICAgICAgICB2b2lkKiBlbmQgPSBoYW5kbGUuZW5kKCkudW50YWdn
ZWRQdHIoKTsKKyAgICAgICAgaXNsYW5kc0Zvckp1bXBMb2NhdGlvbi5pdGVyYXRlKFsmXSAoSXNs
YW5kcyYgaXNsYW5kcywgYm9vbCYgdmlzaXRMZWZ0LCBib29sJiB2aXNpdFJpZ2h0KSB7CisgICAg
ICAgICAgICBpZiAoc3RhcnQgPD0gaXNsYW5kcy5rZXkoKSAmJiBpc2xhbmRzLmtleSgpIDwgZW5k
KQorICAgICAgICAgICAgICAgIHRvUmVtb3ZlLmFwcGVuZCgmaXNsYW5kcyk7CisgICAgICAgICAg
ICBpZiAoaXNsYW5kcy5rZXkoKSA+IHN0YXJ0KQorICAgICAgICAgICAgICAgIHZpc2l0TGVmdCA9
IHRydWU7CisgICAgICAgICAgICBpZiAoaXNsYW5kcy5rZXkoKSA8IGVuZCkKKyAgICAgICAgICAg
ICAgICB2aXNpdFJpZ2h0ID0gdHJ1ZTsKKyAgICAgICAgfSk7CisKKyAgICAgICAgZm9yIChJc2xh
bmRzKiBpc2xhbmRzIDogdG9SZW1vdmUpCisgICAgICAgICAgICBmcmVlSXNsYW5kcyhsb2NrZXIs
IGlzbGFuZHMpOworCisgICAgICAgIGlmIChBU1NFUlRfRU5BQkxFRCkgeworICAgICAgICAgICAg
aXNsYW5kc0Zvckp1bXBMb2NhdGlvbi5pdGVyYXRlKFsmXSAoSXNsYW5kcyYgaXNsYW5kcywgYm9v
bCYgdmlzaXRMZWZ0LCBib29sJiB2aXNpdFJpZ2h0KSB7CisgICAgICAgICAgICAgICAgaWYgKHN0
YXJ0IDw9IGlzbGFuZHMua2V5KCkgJiYgaXNsYW5kcy5rZXkoKSA8IGVuZCkgeworICAgICAgICAg
ICAgICAgICAgICBkYXRhTG9nTG4oImRpZCBub3QgcmVtb3ZlIGV2ZXJ5dGhpbmchIik7CisgICAg
ICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgICAgIHZpc2l0TGVmdCA9IHRydWU7CisgICAgICAgICAgICAg
ICAgdmlzaXRSaWdodCA9IHRydWU7CisgICAgICAgICAgICB9KTsKKyAgICAgICAgfQorICAgIH0K
KworICAgIHZvaWQqIG1ha2VJc2xhbmQodWludHB0cl90IGp1bXBMb2NhdGlvbiwgdWludHB0cl90
IG5ld1RhcmdldCwgYm9vbCBjb25jdXJyZW50bHkpCisgICAgeworICAgICAgICBhdXRvIGxvY2tl
ciA9IGhvbGRMb2NrKGdldExvY2soKSk7CisgICAgICAgIHJldHVybiBpc2xhbmRGb3JKdW1wTG9j
YXRpb24obG9ja2VyLCBqdW1wTG9jYXRpb24sIG5ld1RhcmdldCwgY29uY3VycmVudGx5KTsKKyAg
ICB9CisKK3ByaXZhdGU6CisgICAgUmVnaW9uQWxsb2NhdG9yKiBmaW5kUmVnaW9uKHVpbnRwdHJf
dCBwdHIpCisgICAgeworICAgICAgICBSZWdpb25BbGxvY2F0b3IqIHJlc3VsdCA9IG51bGxwdHI7
CisgICAgICAgIGZvckVhY2hBbGxvY2F0b3IoWyZdIChSZWdpb25BbGxvY2F0b3ImIGFsbG9jYXRv
cikgeworICAgICAgICAgICAgaWYgKGFsbG9jYXRvci5zdGFydCgpIDw9IHB0ciAmJiBwdHIgPCBh
bGxvY2F0b3IuZW5kKCkpIHsKKyAgICAgICAgICAgICAgICByZXN1bHQgPSAmYWxsb2NhdG9yOwor
ICAgICAgICAgICAgICAgIHJldHVybiBJdGVyYXRpb25TdGF0dXM6OkRvbmU7CisgICAgICAgICAg
ICB9CisgICAgICAgICAgICByZXR1cm4gSXRlcmF0aW9uU3RhdHVzOjpDb250aW51ZTsKKyAgICAg
ICAgfSk7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorCisgICAgdm9pZCBmcmVlSnVt
cElzbGFuZHMoY29uc3QgTG9ja0hvbGRlciYsIElzbGFuZHMqIGlzbGFuZHMpCisgICAgeworICAg
ICAgICBmb3IgKENvZGVMb2NhdGlvbkxhYmVsPEV4ZWN1dGFibGVNZW1vcnlQdHJUYWc+IGp1bXBJ
c2xhbmQgOiBpc2xhbmRzLT5qdW1wSXNsYW5kcykgeworICAgICAgICAgICAgdWludHB0cl90IHVu
dGFnZ2VkSnVtcElzbGFuZCA9IGJpdHdpc2VfY2FzdDx1aW50cHRyX3Q+KGp1bXBJc2xhbmQuZGF0
YUxvY2F0aW9uKCkpOworICAgICAgICAgICAgUmVnaW9uQWxsb2NhdG9yKiBhbGxvY2F0b3IgPSBm
aW5kUmVnaW9uKHVudGFnZ2VkSnVtcElzbGFuZCk7CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VS
VChhbGxvY2F0b3IpOworICAgICAgICAgICAgYWxsb2NhdG9yLT5mcmVlSXNsYW5kKHVudGFnZ2Vk
SnVtcElzbGFuZCk7CisgICAgICAgIH0KKyAgICAgICAgaXNsYW5kcy0+anVtcElzbGFuZHMuY2xl
YXIoKTsKICAgICB9CiAKLSAgICB2b2lkIG5vdGlmeU5lZWRQYWdlKHZvaWQqIHBhZ2UsIHNpemVf
dCBjb3VudCkgb3ZlcnJpZGUKKyAgICB2b2lkIGZyZWVJc2xhbmRzKGNvbnN0IExvY2tIb2xkZXIm
IGxvY2tlciwgSXNsYW5kcyogaXNsYW5kcykKICAgICB7Ci0gICAgICAgIG1fcmVzZXJ2YXRpb24u
Y29tbWl0KHBhZ2UsIHBhZ2VTaXplKCkgKiBjb3VudCk7CisgICAgICAgIGZyZWVKdW1wSXNsYW5k
cyhsb2NrZXIsIGlzbGFuZHMpOworICAgICAgICBpc2xhbmRzRm9ySnVtcExvY2F0aW9uLnJlbW92
ZShpc2xhbmRzKTsKKyAgICAgICAgZGVsZXRlIGlzbGFuZHM7CiAgICAgfQogCi0gICAgdm9pZCBu
b3RpZnlQYWdlSXNGcmVlKHZvaWQqIHBhZ2UsIHNpemVfdCBjb3VudCkgb3ZlcnJpZGUKKyAgICB2
b2lkKiBpc2xhbmRGb3JKdW1wTG9jYXRpb24oY29uc3QgTG9ja0hvbGRlciYgbG9ja2VyLCB1aW50
cHRyX3QganVtcExvY2F0aW9uLCB1aW50cHRyX3QgdGFyZ2V0LCBib29sIGNvbmN1cnJlbnRseSkK
ICAgICB7Ci0gICAgICAgIG1fcmVzZXJ2YXRpb24uZGVjb21taXQocGFnZSwgcGFnZVNpemUoKSAq
IGNvdW50KTsKKyAgICAgICAgSXNsYW5kcyogaXNsYW5kcyA9IGlzbGFuZHNGb3JKdW1wTG9jYXRp
b24uZmluZEV4YWN0KGJpdHdpc2VfY2FzdDx2b2lkKj4oanVtcExvY2F0aW9uKSk7CisgICAgICAg
IGlmIChpc2xhbmRzKSB7CisgICAgICAgICAgICAvLyBGSVhNRTogV2UgY291bGQgY3JlYXRlIHNv
bWUgbWV0aG9kIG9mIHJldXNpbmcgYWxyZWFkeSBhbGxvY2F0ZWQgaXNsYW5kcyBoZXJlLCBidXQg
aXQncworICAgICAgICAgICAgLy8gdW5saWtlbHkgdG8gbWF0dGVyIGluIHByYWN0aWNlLgorICAg
ICAgICAgICAgaWYgKCFjb25jdXJyZW50bHkpCisgICAgICAgICAgICAgICAgZnJlZUp1bXBJc2xh
bmRzKGxvY2tlciwgaXNsYW5kcyk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBpc2xh
bmRzID0gbmV3IElzbGFuZHM7CisgICAgICAgICAgICBpc2xhbmRzLT5yb290SnVtcExvY2F0aW9u
ID0gQ29kZUxvY2F0aW9uTGFiZWw8RXhlY3V0YWJsZU1lbW9yeVB0clRhZz4odGFnQ29kZVB0cjxF
eGVjdXRhYmxlTWVtb3J5UHRyVGFnPihiaXR3aXNlX2Nhc3Q8dm9pZCo+KGp1bXBMb2NhdGlvbikp
KTsKKyAgICAgICAgICAgIGlzbGFuZHNGb3JKdW1wTG9jYXRpb24uaW5zZXJ0KGlzbGFuZHMpOwor
ICAgICAgICB9CisKKyAgICAgICAgUmVnaW9uQWxsb2NhdG9yKiBhbGxvY2F0b3IgPSBmaW5kUmVn
aW9uKGp1bXBMb2NhdGlvbiA+IHRhcmdldCA/IGp1bXBMb2NhdGlvbiAtIHJlZ2lvblNpemUgOiBq
dW1wTG9jYXRpb24pOworICAgICAgICBSRUxFQVNFX0FTU0VSVChhbGxvY2F0b3IpOworICAgICAg
ICB2b2lkKiByZXN1bHQgPSBhbGxvY2F0b3ItPmFsbG9jYXRlSXNsYW5kKCk7CisgICAgICAgIHZv
aWQqIGN1cnJlbnRJc2xhbmQgPSByZXN1bHQ7CisgICAgICAgIGp1bXBMb2NhdGlvbiA9IGJpdHdp
c2VfY2FzdDx1aW50cHRyX3Q+KGN1cnJlbnRJc2xhbmQpOworICAgICAgICB3aGlsZSAodHJ1ZSkg
eworICAgICAgICAgICAgaXNsYW5kcy0+anVtcElzbGFuZHMuYXBwZW5kKENvZGVMb2NhdGlvbkxh
YmVsPEV4ZWN1dGFibGVNZW1vcnlQdHJUYWc+KHRhZ0NvZGVQdHI8RXhlY3V0YWJsZU1lbW9yeVB0
clRhZz4oY3VycmVudElzbGFuZCkpKTsKKworICAgICAgICAgICAgYXV0byBlbWl0SnVtcFRvID0g
WyZdICh2b2lkKiB0YXJnZXQpIHsKKyAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChBUk02
NEFzc2VtYmxlcjo6Y2FuRW1pdEp1bXAoYml0d2lzZV9jYXN0PHZvaWQqPihqdW1wTG9jYXRpb24p
LCB0YXJnZXQpKTsKKworICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyIGppdDsKKyAgICAg
ICAgICAgICAgICBhdXRvIGp1bXAgPSBqaXQuanVtcCgpOworICAgICAgICAgICAgICAgIExpbmtC
dWZmZXIgbGlua0J1ZmZlcihqaXQsIE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxOb1B0clRhZz4oY3Vy
cmVudElzbGFuZCksIGlzbGFuZFNpemVJbkJ5dGVzLCBKSVRDb21waWxhdGlvbk11c3RTdWNjZWVk
LCBmYWxzZSk7CisgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQobGlua0J1ZmZlci5pc1Zh
bGlkKCkpOworCisgICAgICAgICAgICAgICAgLy8gV2UgdXNlIHRoaXMgdG8gYXBwZWFzZSB0aGUg
YXNzZXJ0aW9uIHRoYXQgd2UncmUgbm90IGZpbmFsaXppbmcgb24gYSBjb21waWxlciB0aHJlYWQu
IEluIHRoaXMgc2l0dWF0aW9uLCBpdCdzCisgICAgICAgICAgICAgICAgLy8gb2sgdG8gZG8gdGhp
cyBvbiBhIGNvbXBpbGVyIHRocmVhZCwgc2luY2UgdGhlIGNvbXBpbGVyIHRocmVhZCBpcyBsaW5r
aW5nIGEganVtcCB0byB0aGlzIGNvZGUgKGFuZCBubyBvdGhlciBsaXZlCisgICAgICAgICAgICAg
ICAgLy8gY29kZSBjYW4ganVtcCB0byB0aGVzZSBpc2xhbmRzKS4gSXQncyBvayBiZWNhdXNlIHRo
ZSBDUFUgcHJvdG9jb2wgZm9yIGV4cG9zaW5nIGNvZGUgdG8gb3RoZXIgQ1BVcyBpczoKKyAgICAg
ICAgICAgICAgICAvLyAtIFNlbGYgbW9kaWZ5aW5nIGNvZGUgZmVuY2UgKHdoYXQgRklOQUxJWkVf
Q09ERSBkb2VzIGJlbG93KS4gVGhpcyBkb2VzIHZhcmlvdXMgbWVtb3J5IGZsdXNoZXMgKyBpbnN0
cnVjdGlvbiBzeW5jIGJhcnJpZXIgKGlzYikuCisgICAgICAgICAgICAgICAgLy8gLSBBbnkgQ1BV
IHRoYXQgd2lsbCBydW4gdGhlIGNvZGUgbXVzdCBydW4gYSBjcm9zc01vZGlmeWluZ0NvZGVGZW5j
ZSAoaXNiKSBiZWZvcmUgcnVubmluZyBpdC4gU2luY2UgdGhlIGNvZGUgdGhhdAorICAgICAgICAg
ICAgICAgIC8vIGhhcyBhIGp1bXAgbGlua2VkIHRvIHRoaXMgaXNsYW5kIGhhc24ndCBmaW5hbGl6
ZWQgeWV0LCB0aGV5J3JlIGd1YXJhbnRlZWQgdG8gZmluYWxpemUgdGhlcmUgY29kZSBhbmQgcnVu
IGFuIGlzYi4KKyAgICAgICAgICAgICAgICBsaW5rQnVmZmVyLnNldElzSnVtcElzbGFuZCgpOwor
CisgICAgICAgICAgICAgICAgbGlua0J1ZmZlci5saW5rKGp1bXAsIENvZGVMb2NhdGlvbkxhYmVs
PE5vUHRyVGFnPih0YXJnZXQpKTsKKyAgICAgICAgICAgICAgICBGSU5BTElaRV9DT0RFKGxpbmtC
dWZmZXIsIE5vUHRyVGFnLCAiSnVtcCBJc2xhbmQ6ICVsdSIsIGp1bXBMb2NhdGlvbik7CisgICAg
ICAgICAgICB9OworCisgICAgICAgICAgICBpZiAoQVJNNjRBc3NlbWJsZXI6OmNhbkVtaXRKdW1w
KGJpdHdpc2VfY2FzdDx2b2lkKj4oanVtcExvY2F0aW9uKSwgYml0d2lzZV9jYXN0PHZvaWQqPih0
YXJnZXQpKSkgeworICAgICAgICAgICAgICAgIGVtaXRKdW1wVG8oYml0d2lzZV9jYXN0PHZvaWQq
Pih0YXJnZXQpKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKworICAg
ICAgICAgICAgdWludHB0cl90IG5leHRJc2xhbmRSZWdpb247CisgICAgICAgICAgICBpZiAoanVt
cExvY2F0aW9uID4gdGFyZ2V0KQorICAgICAgICAgICAgICAgIG5leHRJc2xhbmRSZWdpb24gPSBq
dW1wTG9jYXRpb24gLSByZWdpb25TaXplOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAg
ICAgIG5leHRJc2xhbmRSZWdpb24gPSBqdW1wTG9jYXRpb24gKyByZWdpb25TaXplOworCisgICAg
ICAgICAgICBSZWdpb25BbGxvY2F0b3IqIGFsbG9jYXRvciA9IGZpbmRSZWdpb24obmV4dElzbGFu
ZFJlZ2lvbik7CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChhbGxvY2F0b3IpOworICAgICAg
ICAgICAgdm9pZCogbmV4dElzbGFuZCA9IGFsbG9jYXRvci0+YWxsb2NhdGVJc2xhbmQoKTsKKyAg
ICAgICAgICAgIGVtaXRKdW1wVG8obmV4dElzbGFuZCk7CisgICAgICAgICAgICBqdW1wTG9jYXRp
b24gPSBiaXR3aXNlX2Nhc3Q8dWludHB0cl90PihuZXh0SXNsYW5kKTsKKyAgICAgICAgICAgIGN1
cnJlbnRJc2xhbmQgPSBuZXh0SXNsYW5kOworICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIHJl
c3VsdDsKICAgICB9CisjZW5kaWYgLy8gVVNFKEpVTVBfSVNMQU5EUykKIAogcHJpdmF0ZToKKyAg
ICBjbGFzcyBBbGxvY2F0b3IgOiBwdWJsaWMgTWV0YUFsbG9jYXRvciB7CisgICAgICAgIHVzaW5n
IEJhc2UgPSBNZXRhQWxsb2NhdG9yOworICAgIHB1YmxpYzoKKyAgICAgICAgQWxsb2NhdG9yKEZp
eGVkVk1Qb29sRXhlY3V0YWJsZUFsbG9jYXRvciYgYWxsb2NhdG9yKQorICAgICAgICAgICAgOiBC
YXNlKGFsbG9jYXRvci5nZXRMb2NrKCksIGppdEFsbG9jYXRpb25HcmFudWxlLCBwYWdlU2l6ZSgp
KSAvLyByb3VuZCB1cCBhbGwgYWxsb2NhdGlvbnMgdG8gMzIgYnl0ZXMKKyAgICAgICAgICAgICwg
bV9maXhlZEFsbG9jYXRvcihhbGxvY2F0b3IpCisgICAgICAgIHsKKyAgICAgICAgfQorCisgICAg
ICAgIEZyZWVTcGFjZVB0ciBhbGxvY2F0ZU5ld1NwYWNlKHNpemVfdCYpIG92ZXJyaWRlCisgICAg
ICAgIHsKKyAgICAgICAgICAgIC8vIFdlJ3JlIG9wZXJhdGluZyBpbiBhIGZpeGVkIHBvb2wsIHNv
IG5ldyBhbGxvY2F0aW9uIGlzIGFsd2F5cyBwcm9oaWJpdGVkLgorICAgICAgICAgICAgcmV0dXJu
IG51bGxwdHI7CisgICAgICAgIH0KKworICAgICAgICB2b2lkIG5vdGlmeU5lZWRQYWdlKHZvaWQq
IHBhZ2UsIHNpemVfdCBjb3VudCkgb3ZlcnJpZGUKKyAgICAgICAgeworICAgICAgICAgICAgbV9m
aXhlZEFsbG9jYXRvci5tX3Jlc2VydmF0aW9uLmNvbW1pdChwYWdlLCBwYWdlU2l6ZSgpICogY291
bnQpOworICAgICAgICB9CisKKyAgICAgICAgdm9pZCBub3RpZnlQYWdlSXNGcmVlKHZvaWQqIHBh
Z2UsIHNpemVfdCBjb3VudCkgb3ZlcnJpZGUKKyAgICAgICAgeworICAgICAgICAgICAgbV9maXhl
ZEFsbG9jYXRvci5tX3Jlc2VydmF0aW9uLmRlY29tbWl0KHBhZ2UsIHBhZ2VTaXplKCkgKiBjb3Vu
dCk7CisgICAgICAgIH0KKworICAgICAgICBGaXhlZFZNUG9vbEV4ZWN1dGFibGVBbGxvY2F0b3Im
IG1fZml4ZWRBbGxvY2F0b3I7CisgICAgfTsKKworI2lmIFVTRShKVU1QX0lTTEFORFMpCisgICAg
Y2xhc3MgUmVnaW9uQWxsb2NhdG9yIGZpbmFsIDogcHVibGljIEFsbG9jYXRvciB7CisgICAgICAg
IHVzaW5nIEJhc2UgPSBBbGxvY2F0b3I7CisgICAgcHVibGljOgorICAgICAgICBSZWdpb25BbGxv
Y2F0b3IoRml4ZWRWTVBvb2xFeGVjdXRhYmxlQWxsb2NhdG9yJiBhbGxvY2F0b3IpCisgICAgICAg
ICAgICA6IEJhc2UoYWxsb2NhdG9yKQorICAgICAgICB7CisgICAgICAgIH0KKworICAgICAgICAv
LyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICAgIC8vICB8IGpp
dCBhbGxvY2F0aW9ucyAtLT4gICA8LS0gaXNsYW5kcyB8CisgICAgICAgIC8vICAtLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAgICAgICAgdWludHB0cl90IHN0YXJ0KCkg
eyByZXR1cm4gYml0d2lzZV9jYXN0PHVpbnRwdHJfdD4odW50YWdDb2RlUHRyPEV4ZWN1dGFibGVN
ZW1vcnlQdHJUYWc+KG1fc3RhcnQpKTsgfQorICAgICAgICB1aW50cHRyX3QgZW5kKCkgeyByZXR1
cm4gYml0d2lzZV9jYXN0PHVpbnRwdHJfdD4odW50YWdDb2RlUHRyPEV4ZWN1dGFibGVNZW1vcnlQ
dHJUYWc+KG1fZW5kKSk7IH0KKworICAgICAgICB1aW50cHRyX3QgaXNsYW5kQmVnaW4oKQorICAg
ICAgICB7CisgICAgICAgICAgICAvLyBbc3RhcnQsIGFsbG9jYXRvckVuZCkKKyAgICAgICAgICAg
IHJldHVybiBlbmQoKSAtIGlzbGFuZFJlZ2lvblNpemU7CisgICAgICAgIH0KKworICAgICAgICB1
aW50cHRyX3QgYWxsb2NhdG9yU2l6ZSgpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBp
c2xhbmRCZWdpbigpIC0gc3RhcnQoKTsKKyAgICAgICAgfQorCisgICAgICAgIHNpemVfdCBpc2xh
bmRzUGVyUGFnZSgpCisgICAgICAgIHsKKyAgICAgICAgICAgIHNpemVfdCBpc2xhbmRzUGVyUGFn
ZSA9IHBhZ2VTaXplKCkgLyBpc2xhbmRTaXplSW5CeXRlczsKKyAgICAgICAgICAgIEFTU0VSVChp
c2xhbmRzUGVyUGFnZSAqIGlzbGFuZFNpemVJbkJ5dGVzID09IHBhZ2VTaXplKCkpOworICAgICAg
ICAgICAgQVNTRVJUKGlzUG93ZXJPZlR3byhpc2xhbmRzUGVyUGFnZSkpOworICAgICAgICAgICAg
cmV0dXJuIGlzbGFuZHNQZXJQYWdlOworICAgICAgICB9CisKKyAgICAgICAgdm9pZCByZWxlYXNl
KGNvbnN0IExvY2tIb2xkZXImIGxvY2tlciwgTWV0YUFsbG9jYXRvckhhbmRsZSYgaGFuZGxlKSBm
aW5hbAorICAgICAgICB7CisgICAgICAgICAgICBtX2ZpeGVkQWxsb2NhdG9yLmhhbmRsZVdpbGxC
ZVJlbGVhc2VkKGxvY2tlciwgaGFuZGxlKTsKKyAgICAgICAgICAgIEJhc2U6OnJlbGVhc2UobG9j
a2VyLCBoYW5kbGUpOworICAgICAgICB9CisKKyAgICAgICAgdm9pZCogYWxsb2NhdGVJc2xhbmQo
KQorICAgICAgICB7CisgICAgICAgICAgICB1aW50cHRyX3QgZW5kID0gdGhpcy0+ZW5kKCk7Cisg
ICAgICAgICAgICBhdXRvIGZpbmRSZXN1bHQgPSBbJl0gKCkgLT4gdm9pZCogeworICAgICAgICAg
ICAgICAgIHNpemVfdCByZXN1bHRCaXQgPSBpc2xhbmRCaXRzLmZpbmRDbGVhckJpdCgwKTsKKyAg
ICAgICAgICAgICAgICBpZiAocmVzdWx0Qml0ID09IGlzbGFuZEJpdHMuc2l6ZSgpKQorICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgICAgICAgICBpc2xhbmRCaXRz
W3Jlc3VsdEJpdF0gPSB0cnVlOworICAgICAgICAgICAgICAgIHVpbnRwdHJfdCByZXN1bHQgPSBl
bmQgLSAoKHJlc3VsdEJpdCArIDEpICogaXNsYW5kU2l6ZUluQnl0ZXMpOyAKKyAgICAgICAgICAg
ICAgICByZXR1cm4gYml0d2lzZV9jYXN0PHZvaWQqPihyZXN1bHQpOworICAgICAgICAgICAgfTsK
KworICAgICAgICAgICAgaWYgKHZvaWQqIHJlc3VsdCA9IGZpbmRSZXN1bHQoKSkKKyAgICAgICAg
ICAgICAgICByZXR1cm4gcmVzdWx0OworCisgICAgICAgICAgICBpc2xhbmRCaXRzLnJlc2l6ZShp
c2xhbmRCaXRzLnNpemUoKSArIGlzbGFuZHNQZXJQYWdlKCkpOworICAgICAgICAgICAgaWYgKFVO
TElLRUxZKGlzbGFuZEJpdHMuc2l6ZSgpID4gbWF4SXNsYW5kc1BlclJlZ2lvbikpCisgICAgICAg
ICAgICAgICAgY3Jhc2hPbkp1bXBJc2xhbmRFeGhhdXN0aW9uKCk7CisKKyAgICAgICAgICAgIHVp
bnRwdHJfdCBwYWdlQmVnaW4gPSBlbmQgLSAoaXNsYW5kQml0cy5zaXplKCkgKiBpc2xhbmRTaXpl
SW5CeXRlcyk7IC8vIFtpc2xhbmRCZWdpbiwgZW5kKQorICAgICAgICAgICAgbV9maXhlZEFsbG9j
YXRvci5tX3Jlc2VydmF0aW9uLmNvbW1pdChiaXR3aXNlX2Nhc3Q8dm9pZCo+KHBhZ2VCZWdpbiks
IHBhZ2VTaXplKCkpOworCisgICAgICAgICAgICB2b2lkKiByZXN1bHQgPSBmaW5kUmVzdWx0KCk7
CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChyZXN1bHQpOworICAgICAgICAgICAgcmV0dXJu
IHJlc3VsdDsKKyAgICAgICAgfQorCisgICAgICAgIE5FVkVSX0lOTElORSBOT19SRVRVUk5fRFVF
X1RPX0NSQVNIIHZvaWQgY3Jhc2hPbkp1bXBJc2xhbmRFeGhhdXN0aW9uKCkKKyAgICAgICAgewor
ICAgICAgICAgICAgQ1JBU0goKTsKKyAgICAgICAgfQorCisgICAgICAgIE9wdGlvbmFsPHNpemVf
dD4gaXNsYW5kQml0KHVpbnRwdHJfdCBpc2xhbmQpCisgICAgICAgIHsKKyAgICAgICAgICAgIHVp
bnRwdHJfdCBlbmQgPSB0aGlzLT5lbmQoKTsKKyAgICAgICAgICAgIGlmIChpc2xhbmRCZWdpbigp
IDw9IGlzbGFuZCAmJiBpc2xhbmQgPCBlbmQpCisgICAgICAgICAgICAgICAgcmV0dXJuICgoZW5k
IC0gaXNsYW5kKSAvIGlzbGFuZFNpemVJbkJ5dGVzKSAtIDE7CisgICAgICAgICAgICByZXR1cm4g
V1RGOjpudWxsb3B0OworICAgICAgICB9CisKKyAgICAgICAgdm9pZCBmcmVlSXNsYW5kKHVpbnRw
dHJfdCBpc2xhbmQpCisgICAgICAgIHsKKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKGlzbGFu
ZEJlZ2luKCkgPD0gaXNsYW5kICYmIGlzbGFuZCA8IGVuZCgpKTsKKyAgICAgICAgICAgIHNpemVf
dCBiaXQgPSBpc2xhbmRCaXQoaXNsYW5kKS52YWx1ZSgpOworICAgICAgICAgICAgUkVMRUFTRV9B
U1NFUlQoISFpc2xhbmRCaXRzW2JpdF0pOworICAgICAgICAgICAgaXNsYW5kQml0c1tiaXRdID0g
ZmFsc2U7CisgICAgICAgIH0KKworICAgICAgICBib29sIGlzSW5BbGxvY2F0ZWRNZW1vcnkoY29u
c3QgQWJzdHJhY3RMb2NrZXImIGxvY2tlciwgdm9pZCogYWRkcmVzcykKKyAgICAgICAgeworICAg
ICAgICAgICAgaWYgKEJhc2U6OmlzSW5BbGxvY2F0ZWRNZW1vcnkobG9ja2VyLCBhZGRyZXNzKSkK
KyAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgIGlmIChPcHRpb25hbDxz
aXplX3Q+IGJpdCA9IGlzbGFuZEJpdChiaXR3aXNlX2Nhc3Q8dWludHB0cl90PihhZGRyZXNzKSkp
IHsKKyAgICAgICAgICAgICAgICBpZiAoYml0LnZhbHVlKCkgPCBpc2xhbmRCaXRzLnNpemUoKSkK
KyAgICAgICAgICAgICAgICAgICAgcmV0dXJuICEhaXNsYW5kQml0c1tiaXQudmFsdWUoKV07Cisg
ICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKworICAg
ICAgICAvLyBSYW5nZTogW3N0YXJ0LCBlbmQpCisgICAgICAgIHZvaWQqIG1fc3RhcnQ7CisgICAg
ICAgIHZvaWQqIG1fZW5kOworICAgICAgICBGYXN0Qml0VmVjdG9yIGlzbGFuZEJpdHM7CisgICAg
fTsKKyNlbmRpZiAvLyBVU0UoSlVNUF9JU0xBTkRTKQorCisgICAgdGVtcGxhdGUgPHR5cGVuYW1l
IEZ1bmN0aW9uPgorICAgIHZvaWQgZm9yRWFjaEFsbG9jYXRvcihGdW5jdGlvbiBmdW5jdGlvbikK
KyAgICB7CisjaWYgVVNFKEpVTVBfSVNMQU5EUykKKyAgICAgICAgZm9yIChSZWdpb25BbGxvY2F0
b3ImIGFsbG9jYXRvciA6IG1fYWxsb2NhdG9ycykgeworICAgICAgICAgICAgdXNpbmcgRnVuY3Rp
b25SZXN1bHRUeXBlID0gZGVjbHR5cGUoZnVuY3Rpb24oYWxsb2NhdG9yKSk7CisgICAgICAgICAg
ICBpZiBjb25zdGV4cHIgKHN0ZDo6aXNfc2FtZTxJdGVyYXRpb25TdGF0dXMsIEZ1bmN0aW9uUmVz
dWx0VHlwZT46OnZhbHVlKSB7CisgICAgICAgICAgICAgICAgaWYgKGZ1bmN0aW9uKGFsbG9jYXRv
cikgPT0gSXRlcmF0aW9uU3RhdHVzOjpEb25lKQorICAgICAgICAgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgc3RhdGljX2Fzc2VydChzdGQ6
OmlzX3NhbWU8dm9pZCwgRnVuY3Rpb25SZXN1bHRUeXBlPjo6dmFsdWUpOworICAgICAgICAgICAg
ICAgIGZ1bmN0aW9uKGFsbG9jYXRvcik7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyNlbHNl
CisgICAgICAgIGZ1bmN0aW9uKG1fYWxsb2NhdG9yKTsKKyNlbmRpZiAvLyBVU0UoSlVNUF9JU0xB
TkRTKQorICAgIH0KKworI2lmIFVTRShKVU1QX0lTTEFORFMpCisgICAgY2xhc3MgSXNsYW5kcyA6
IHB1YmxpYyBSZWRCbGFja1RyZWU8SXNsYW5kcywgdm9pZCo+OjpOb2RlIHsKKyAgICAgICAgV1RG
X01BS0VfRkFTVF9BTExPQ0FURUQ7CisgICAgcHVibGljOgorICAgICAgICB2b2lkKiBrZXkoKSB7
IHJldHVybiByb290SnVtcExvY2F0aW9uLmRhdGFMb2NhdGlvbigpOyB9CisgICAgICAgIENvZGVM
b2NhdGlvbkxhYmVsPEV4ZWN1dGFibGVNZW1vcnlQdHJUYWc+IHJvb3RKdW1wTG9jYXRpb247Cisg
ICAgICAgIFZlY3RvcjxDb2RlTG9jYXRpb25MYWJlbDxFeGVjdXRhYmxlTWVtb3J5UHRyVGFnPj4g
anVtcElzbGFuZHM7CisgICAgfTsKKyNlbmRpZiAvLyBVU0UoSlVNUF9JU0xBTkRTKQorCisgICAg
TG9jayBtX2xvY2s7CiAgICAgUGFnZVJlc2VydmF0aW9uIG1fcmVzZXJ2YXRpb247CisjaWYgVVNF
KEpVTVBfSVNMQU5EUykKKyAgICBzdGQ6OmFycmF5PFJlZ2lvbkFsbG9jYXRvciwgbnVtYmVyT2ZS
ZWdpb25zPiBtX2FsbG9jYXRvcnM7CisgICAgUmVkQmxhY2tUcmVlPElzbGFuZHMsIHZvaWQqPiBp
c2xhbmRzRm9ySnVtcExvY2F0aW9uOworI2Vsc2UKKyAgICBBbGxvY2F0b3IgbV9hbGxvY2F0b3I7
CisjZW5kaWYgLy8gVVNFKEpVTVBfSVNMQU5EUykKIH07CiAKLUZpeGVkVk1Qb29sRXhlY3V0YWJs
ZUFsbG9jYXRvcjo6fkZpeGVkVk1Qb29sRXhlY3V0YWJsZUFsbG9jYXRvcigpCi17Ci0gICAgbV9y
ZXNlcnZhdGlvbi5kZWFsbG9jYXRlKCk7Ci19Ci0KIC8vIEtlZXAgdGhpcyBwb2ludGVyIGluIGEg
bXV0YWJsZSBnbG9iYWwgdmFyaWFibGUgdG8gaGVscCBMZWFrcyBmaW5kIGl0LgogLy8gQnV0IHdl
IGRvIG5vdCB1c2UgdGhpcyBwb2ludGVyLgogc3RhdGljIEZpeGVkVk1Qb29sRXhlY3V0YWJsZUFs
bG9jYXRvciogZ2xvYmFsRml4ZWRWTVBvb2xFeGVjdXRhYmxlQWxsb2NhdG9yVG9Xb3JrQXJvdW5k
TGVha3MgPSBudWxscHRyOwpAQCAtNDE3LDcgKzgzMyw2IEBAIHZvaWQgRXhlY3V0YWJsZUFsbG9j
YXRvcjo6aW5pdGlhbGl6ZVVuZGUKICAgICBSRUxFQVNFX0FTU0VSVCghZ19qc2NDb25maWcuZml4
ZWRWTVBvb2xFeGVjdXRhYmxlQWxsb2NhdG9yKTsKICAgICBnX2pzY0NvbmZpZy5maXhlZFZNUG9v
bEV4ZWN1dGFibGVBbGxvY2F0b3IgPSBuZXcgRml4ZWRWTVBvb2xFeGVjdXRhYmxlQWxsb2NhdG9y
KCk7CiAgICAgZ2xvYmFsRml4ZWRWTVBvb2xFeGVjdXRhYmxlQWxsb2NhdG9yVG9Xb3JrQXJvdW5k
TGVha3MgPSBnX2pzY0NvbmZpZy5maXhlZFZNUG9vbEV4ZWN1dGFibGVBbGxvY2F0b3I7Ci0gICAg
Q29kZVByb2ZpbGluZzo6bm90aWZ5QWxsb2NhdG9yKGdfanNjQ29uZmlnLmZpeGVkVk1Qb29sRXhl
Y3V0YWJsZUFsbG9jYXRvcik7CiB9CiAKIGJvb2wgRXhlY3V0YWJsZUFsbG9jYXRvcjo6aXNWYWxp
ZCgpIGNvbnN0CkBAIC00MjUsNyArODQwLDcgQEAgYm9vbCBFeGVjdXRhYmxlQWxsb2NhdG9yOjpp
c1ZhbGlkKCkgY29ucwogICAgIEZpeGVkVk1Qb29sRXhlY3V0YWJsZUFsbG9jYXRvciogYWxsb2Nh
dG9yID0gZ19qc2NDb25maWcuZml4ZWRWTVBvb2xFeGVjdXRhYmxlQWxsb2NhdG9yOwogICAgIGlm
ICghYWxsb2NhdG9yKQogICAgICAgICByZXR1cm4gQmFzZTo6aXNWYWxpZCgpOwotICAgIHJldHVy
biAhIWFsbG9jYXRvci0+Ynl0ZXNSZXNlcnZlZCgpOworICAgIHJldHVybiBhbGxvY2F0b3ItPmlz
VmFsaWQoKTsKIH0KIAogYm9vbCBFeGVjdXRhYmxlQWxsb2NhdG9yOjp1bmRlck1lbW9yeVByZXNz
dXJlKCkKQEAgLTQ1NiwxMSArODcxLDExIEBAIGRvdWJsZSBFeGVjdXRhYmxlQWxsb2NhdG9yOjpt
ZW1vcnlQcmVzc3UKICAgICByZXR1cm4gcmVzdWx0OwogfQogCi1SZWZQdHI8RXhlY3V0YWJsZU1l
bW9yeUhhbmRsZT4gRXhlY3V0YWJsZUFsbG9jYXRvcjo6YWxsb2NhdGUoc2l6ZV90IHNpemVJbkJ5
dGVzLCB2b2lkKiBvd25lclVJRCwgSklUQ29tcGlsYXRpb25FZmZvcnQgZWZmb3J0KQorUmVmUHRy
PEV4ZWN1dGFibGVNZW1vcnlIYW5kbGU+IEV4ZWN1dGFibGVBbGxvY2F0b3I6OmFsbG9jYXRlKHNp
emVfdCBzaXplSW5CeXRlcywgSklUQ29tcGlsYXRpb25FZmZvcnQgZWZmb3J0KQogewogICAgIEZp
eGVkVk1Qb29sRXhlY3V0YWJsZUFsbG9jYXRvciogYWxsb2NhdG9yID0gZ19qc2NDb25maWcuZml4
ZWRWTVBvb2xFeGVjdXRhYmxlQWxsb2NhdG9yOwogICAgIGlmICghYWxsb2NhdG9yKQotICAgICAg
ICByZXR1cm4gQmFzZTo6YWxsb2NhdGUoc2l6ZUluQnl0ZXMsIG93bmVyVUlELCBlZmZvcnQpOwor
ICAgICAgICByZXR1cm4gQmFzZTo6YWxsb2NhdGUoc2l6ZUluQnl0ZXMsIGVmZm9ydCk7CiAgICAg
aWYgKE9wdGlvbnM6OmxvZ0V4ZWN1dGFibGVBbGxvY2F0aW9uKCkpIHsKICAgICAgICAgTWV0YUFs
bG9jYXRvcjo6U3RhdGlzdGljcyBzdGF0cyA9IGFsbG9jYXRvci0+Y3VycmVudFN0YXRpc3RpY3Mo
KTsKICAgICAgICAgZGF0YUxvZygiQWxsb2NhdGluZyAiLCBzaXplSW5CeXRlcywgIiBieXRlcyBv
ZiBleGVjdXRhYmxlIG1lbW9yeSB3aXRoICIsIHN0YXRzLmJ5dGVzQWxsb2NhdGVkLCAiIGJ5dGVz
IGFsbG9jYXRlZCwgIiwgc3RhdHMuYnl0ZXNSZXNlcnZlZCwgIiBieXRlcyByZXNlcnZlZCwgYW5k
ICIsIHN0YXRzLmJ5dGVzQ29tbWl0dGVkLCAiIGNvbW1pdHRlZC5cbiIpOwpAQCAtNDg3LDcgKzkw
Miw3IEBAIFJlZlB0cjxFeGVjdXRhYmxlTWVtb3J5SGFuZGxlPiBFeGVjdXRhYmwKICAgICAgICAg
fQogICAgIH0KIAotICAgIFJlZlB0cjxFeGVjdXRhYmxlTWVtb3J5SGFuZGxlPiByZXN1bHQgPSBh
bGxvY2F0b3ItPmFsbG9jYXRlKHNpemVJbkJ5dGVzLCBvd25lclVJRCk7CisgICAgUmVmUHRyPEV4
ZWN1dGFibGVNZW1vcnlIYW5kbGU+IHJlc3VsdCA9IGFsbG9jYXRvci0+YWxsb2NhdGUoc2l6ZUlu
Qnl0ZXMpOwogICAgIGlmICghcmVzdWx0KSB7CiAgICAgICAgIGlmIChlZmZvcnQgIT0gSklUQ29t
cGlsYXRpb25DYW5GYWlsKSB7CiAgICAgICAgICAgICBkYXRhTG9nKCJSYW4gb3V0IG9mIGV4ZWN1
dGFibGUgbWVtb3J5IHdoaWxlIGFsbG9jYXRpbmcgIiwgc2l6ZUluQnl0ZXMsICIgYnl0ZXMuXG4i
KTsKQEAgLTUzOSw2ICs5NTQsMjYgQEAgdm9pZCBFeGVjdXRhYmxlQWxsb2NhdG9yOjpkdW1wUHJv
ZmlsZSgpCiB9CiAjZW5kaWYKIAorI2lmIFVTRShKVU1QX0lTTEFORFMpCit2b2lkKiBFeGVjdXRh
YmxlQWxsb2NhdG9yOjpnZXRKdW1wSXNsYW5kVG8odm9pZCogZnJvbSwgdm9pZCogbmV3RGVzdGlu
YXRpb24pCit7CisgICAgRml4ZWRWTVBvb2xFeGVjdXRhYmxlQWxsb2NhdG9yKiBhbGxvY2F0b3Ig
PSBnX2pzY0NvbmZpZy5maXhlZFZNUG9vbEV4ZWN1dGFibGVBbGxvY2F0b3I7CisgICAgaWYgKCFh
bGxvY2F0b3IpCisgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisKKyAgICBy
ZXR1cm4gYWxsb2NhdG9yLT5tYWtlSXNsYW5kKGJpdHdpc2VfY2FzdDx1aW50cHRyX3Q+KGZyb20p
LCBiaXR3aXNlX2Nhc3Q8dWludHB0cl90PihuZXdEZXN0aW5hdGlvbiksIGZhbHNlKTsKK30KKwor
dm9pZCogRXhlY3V0YWJsZUFsbG9jYXRvcjo6Z2V0SnVtcElzbGFuZFRvQ29uY3VycmVudGx5KHZv
aWQqIGZyb20sIHZvaWQqIG5ld0Rlc3RpbmF0aW9uKQoreworICAgIEZpeGVkVk1Qb29sRXhlY3V0
YWJsZUFsbG9jYXRvciogYWxsb2NhdG9yID0gZ19qc2NDb25maWcuZml4ZWRWTVBvb2xFeGVjdXRh
YmxlQWxsb2NhdG9yOworICAgIGlmICghYWxsb2NhdG9yKQorICAgICAgICBSRUxFQVNFX0FTU0VS
VF9OT1RfUkVBQ0hFRCgpOworCisgICAgcmV0dXJuIGFsbG9jYXRvci0+bWFrZUlzbGFuZChiaXR3
aXNlX2Nhc3Q8dWludHB0cl90Pihmcm9tKSwgYml0d2lzZV9jYXN0PHVpbnRwdHJfdD4obmV3RGVz
dGluYXRpb24pLCB0cnVlKTsKK30KKyNlbmRpZgorCiB2b2lkKiBzdGFydE9mRml4ZWRFeGVjdXRh
YmxlTWVtb3J5UG9vbEltcGwoKQogewogICAgIEZpeGVkVk1Qb29sRXhlY3V0YWJsZUFsbG9jYXRv
ciogYWxsb2NhdG9yID0gZ19qc2NDb25maWcuZml4ZWRWTVBvb2xFeGVjdXRhYmxlQWxsb2NhdG9y
OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9FeGVjdXRhYmxlQWxsb2NhdG9yLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9FeGVjdXRhYmxlQWxsb2Nh
dG9yLmgJKHJldmlzaW9uIDI1ODM1MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvRXhl
Y3V0YWJsZUFsbG9jYXRvci5oCSh3b3JraW5nIGNvcHkpCkBAIC03MSw3ICs3MSw3IEBAIHB1Ymxp
YzoKIAogICAgIHN0YXRpYyB2b2lkIGR1bXBQcm9maWxlKCkgeyB9CiAKLSAgICBSZWZQdHI8RXhl
Y3V0YWJsZU1lbW9yeUhhbmRsZT4gYWxsb2NhdGUoc2l6ZV90LCB2b2lkKiwgSklUQ29tcGlsYXRp
b25FZmZvcnQpIHsgcmV0dXJuIG51bGxwdHI7IH0KKyAgICBSZWZQdHI8RXhlY3V0YWJsZU1lbW9y
eUhhbmRsZT4gYWxsb2NhdGUoc2l6ZV90LCBKSVRDb21waWxhdGlvbkVmZm9ydCkgeyByZXR1cm4g
bnVsbHB0cjsgfQogCiAgICAgc3RhdGljIHZvaWQgc2V0SklURW5hYmxlZChib29sKSB7IH07CiAg
ICAgCkBAIC0xNzYsNyArMTc2LDcgQEAgcHVibGljOgogICAgIAogICAgIEpTX0VYUE9SVF9QUklW
QVRFIHN0YXRpYyB2b2lkIHNldEpJVEVuYWJsZWQoYm9vbCk7CiAKLSAgICBSZWZQdHI8RXhlY3V0
YWJsZU1lbW9yeUhhbmRsZT4gYWxsb2NhdGUoc2l6ZV90IHNpemVJbkJ5dGVzLCB2b2lkKiBvd25l
clVJRCwgSklUQ29tcGlsYXRpb25FZmZvcnQpOworICAgIFJlZlB0cjxFeGVjdXRhYmxlTWVtb3J5
SGFuZGxlPiBhbGxvY2F0ZShzaXplX3Qgc2l6ZUluQnl0ZXMsIEpJVENvbXBpbGF0aW9uRWZmb3J0
KTsKIAogICAgIGJvb2wgaXNWYWxpZEV4ZWN1dGFibGVNZW1vcnkoY29uc3QgQWJzdHJhY3RMb2Nr
ZXImLCB2b2lkKiBhZGRyZXNzKTsKIApAQCAtMTg0LDYgKzE4NCwxMSBAQCBwdWJsaWM6CiAKICAg
ICBMb2NrJiBnZXRMb2NrKCkgY29uc3Q7CiAKKyNpZiBVU0UoSlVNUF9JU0xBTkRTKQorICAgIHZv
aWQqIGdldEp1bXBJc2xhbmRUbyh2b2lkKiBmcm9tLCB2b2lkKiBuZXdEZXN0aW5hdGlvbik7Cisg
ICAgdm9pZCogZ2V0SnVtcElzbGFuZFRvQ29uY3VycmVudGx5KHZvaWQqIGZyb20sIHZvaWQqIG5l
d0Rlc3RpbmF0aW9uKTsKKyNlbmRpZgorCiBwcml2YXRlOgogICAgIEV4ZWN1dGFibGVBbGxvY2F0
b3IoKSA9IGRlZmF1bHQ7CiAgICAgfkV4ZWN1dGFibGVBbGxvY2F0b3IoKSA9IGRlZmF1bHQ7Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db21tb25TbG93UGF0aHMuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbW1vblNsb3dQYXRo
cy5jcHAJKHJldmlzaW9uIDI1ODM1MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0NvbW1vblNsb3dQYXRocy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMyLDcgKzMyLDYgQEAKICNp
bmNsdWRlICJCeXRlY29kZVN0cnVjdHMuaCIKICNpbmNsdWRlICJDYWxsRnJhbWUuaCIKICNpbmNs
dWRlICJDbG9uZWRBcmd1bWVudHMuaCIKLSNpbmNsdWRlICJDb2RlUHJvZmlsaW5nLmgiCiAjaW5j
bHVkZSAiRGVmaW5lUHJvcGVydHlBdHRyaWJ1dGVzLmgiCiAjaW5jbHVkZSAiRGlyZWN0QXJndW1l
bnRzLmgiCiAjaW5jbHVkZSAiRXJyb3IuaCIKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0NvbXBsZXRpb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0NvbXBsZXRpb24uY3BwCShyZXZpc2lvbiAyNTgzNTApCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9Db21wbGV0aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjcs
NyArMjcsNiBAQAogI2luY2x1ZGUgIkNhbGxGcmFtZS5oIgogI2luY2x1ZGUgIkNhdGNoU2NvcGUu
aCIKICNpbmNsdWRlICJDb2RlQ2FjaGUuaCIKLSNpbmNsdWRlICJDb2RlUHJvZmlsaW5nLmgiCiAj
aW5jbHVkZSAiRXhjZXB0aW9uLmgiCiAjaW5jbHVkZSAiSWRlbnRpZmllcklubGluZXMuaCIKICNp
bmNsdWRlICJJbnRlcnByZXRlci5oIgpAQCAtMTM4LDggKzEzNyw2IEBAIEpTVmFsdWUgZXZhbHVh
dGUoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE8KICAgICBSRUxFQVNFX0FTU0VSVCh2bS5hdG9tU3Ry
aW5nVGFibGUoKSA9PSBUaHJlYWQ6OmN1cnJlbnQoKS5hdG9tU3RyaW5nVGFibGUoKSk7CiAgICAg
UkVMRUFTRV9BU1NFUlQoIXZtLmlzQ29sbGVjdG9yQnVzeU9uQ3VycmVudFRocmVhZCgpKTsKIAot
ICAgIENvZGVQcm9maWxpbmcgcHJvZmlsZShzb3VyY2UpOwotCiAgICAgaWYgKCF0aGlzVmFsdWUg
fHwgdGhpc1ZhbHVlLmlzVW5kZWZpbmVkT3JOdWxsKCkpCiAgICAgICAgIHRoaXNWYWx1ZSA9IGds
b2JhbE9iamVjdDsKICAgICBKU09iamVjdCogdGhpc09iaiA9IGpzQ2FzdDxKU09iamVjdCo+KHRo
aXNWYWx1ZS50b1RoaXMoZ2xvYmFsT2JqZWN0LCBOb3RTdHJpY3RNb2RlKSk7CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU01vZHVsZUxvYWRlci5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNNb2R1bGVMb2FkZXIuY3BwCShyZXZp
c2lvbiAyNTgzNTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU01vZHVsZUxv
YWRlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI5LDcgKzI5LDYgQEAKIAogI2luY2x1ZGUgIkJ1
aWx0aW5OYW1lcy5oIgogI2luY2x1ZGUgIkNhdGNoU2NvcGUuaCIKLSNpbmNsdWRlICJDb2RlUHJv
ZmlsaW5nLmgiCiAjaW5jbHVkZSAiRXJyb3IuaCIKICNpbmNsdWRlICJFeGNlcHRpb24uaCIKICNp
bmNsdWRlICJKU0NJbmxpbmVzLmgiCkBAIC00MDAsOCArMzk5LDYgQEAgRW5jb2RlZEpTVmFsdWUg
SlNDX0hPU1RfQ0FMTCBtb2R1bGVMb2FkZQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2Rl
KEpTV2ViQXNzZW1ibHk6Omluc3RhbnRpYXRlKGdsb2JhbE9iamVjdCwgcHJvbWlzZSwgbW9kdWxl
S2V5LCBqc1NvdXJjZUNvZGUpKTsKICNlbmRpZgogCi0gICAgQ29kZVByb2ZpbGluZyBwcm9maWxl
KHNvdXJjZUNvZGUpOwotCiAgICAgUGFyc2VyRXJyb3IgZXJyb3I7CiAgICAgc3RkOjp1bmlxdWVf
cHRyPE1vZHVsZVByb2dyYW1Ob2RlPiBtb2R1bGVQcm9ncmFtTm9kZSA9IHBhcnNlPE1vZHVsZVBy
b2dyYW1Ob2RlPigKICAgICAgICAgdm0sIHNvdXJjZUNvZGUsIElkZW50aWZpZXIoKSwgSlNQYXJz
ZXJCdWlsdGluTW9kZTo6Tm90QnVpbHRpbiwKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL09wdGlvbnNMaXN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvT3B0aW9uc0xpc3QuaAkocmV2aXNpb24gMjU4MzUwKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9uc0xpc3QuaAkod29ya2luZyBjb3B5KQpAQCAtNTAwLDYg
KzUwMCw3IEBAIGNvbnN0ZXhwciBib29sIGVuYWJsZVdlYkFzc2VtYmx5U3RyZWFtaW4KICAgICB2
KEJvb2wsIGZvcmNlT1NSRXhpdFRvTExJbnQsIGZhbHNlLCBOb3JtYWwsICJJZiB0cnVlLCB3ZSBh
bHdheXMgZXhpdCB0byB0aGUgTExJbnQuIElmIGZhbHNlLCB3ZSBleGl0IHRvIHdoYXRldmVyIGlz
IG1vc3QgY29udmVuaWVudC4iKSBcCiAgICAgdihVbnNpZ25lZCwgZ2V0QnlWYWxJQ01heE51bWJl
ck9mSWRlbnRpZmllcnMsIDQsIE5vcm1hbCwgIk51bWJlciBvZiBpZGVudGlmaWVycyB3ZSBzZWUg
aW4gdGhlIExMSW50IHRoYXQgY291bGQgY2F1c2UgdXMgdG8gYmFpbCBvbiBnZW5lcmF0aW5nIGFu
IElDIGZvciBnZXRfYnlfdmFsLiIpIFwKICAgICB2KEJvb2wsIHVzZVB1YmxpY0NsYXNzRmllbGRz
LCB0cnVlLCBOb3JtYWwsICJJZiB0cnVlLCB0aGUgcGFyc2VyIHdpbGwgdW5kZXJzdGFuZCBwdWJs
aWMgZGF0YSBmaWVsZHMgaW5zaWRlIGNsYXNzZXMuIikgXAorICAgIHYoQm9vbCwgdXNlUmFuZG9t
aXppbmdFeGVjdXRhYmxlSXNsYW5kQWxsb2NhdGlvbiwgZmFsc2UsIE5vcm1hbCwgIkZvciB0aGUg
YXJtNjQgRXhlY3V0YWJsZUFsbG9jYXRvciwgaWYgdHJ1ZSwgc2VsZWN0IHdoaWNoIHJlZ2lvbiB0
byB1c2UgcmFuZG9tbHkuIFRoaXMgaXMgdXNlZnVsIGZvciB0ZXN0aW5nIHRoYXQganVtcCBpc2xh
bmRzIHdvcmsuIikgXAogCiBlbnVtIE9wdGlvbkVxdWl2YWxlbmNlIHsKICAgICBTYW1lT3B0aW9u
LApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3Rvb2xzL0NvZGVQcm9maWxlLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvdG9vbHMvQ29kZVByb2ZpbGUuY3BwCShy
ZXZpc2lvbiAyNTgzNTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvdG9vbHMvQ29kZVByb2Zp
bGUuY3BwCShub25leGlzdGVudCkKQEAgLTEsMTcyICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFO
WQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1
ZGUgIkNvZGVQcm9maWxlLmgiCi0KLSNpbmNsdWRlICJDb2RlQmxvY2suaCIKLSNpbmNsdWRlICJD
b2RlUHJvZmlsaW5nLmgiCi0jaW5jbHVkZSAiTGlua0J1ZmZlci5oIgotI2luY2x1ZGUgIlByb2Zp
bGVUcmVlTm9kZS5oIgotI2luY2x1ZGUgPHd0Zi9TdGFja1RyYWNlLmg+Ci0jaW5jbHVkZSA8d3Rm
L3RleHQvV1RGU3RyaW5nLmg+Ci0KLW5hbWVzcGFjZSBKU0MgewotCi0vLyBNYXAgZnJvbSBDb2Rl
VHlwZSBlbnVtIHRvIGEgY29ycmVzcG9uZGluZyBuYW1lLgotc3RhdGljIGNvbnN0IGNoYXIqIGNv
bnN0IHNfY29kZVR5cGVOYW1lc1tDb2RlUHJvZmlsZTo6TnVtYmVyT2ZDb2RlVHlwZXNdID0gewot
ICAgICJbW0VuZ2luZUNvZGVdXSIsCi0gICAgIltbR2xvYmFsVGh1bmtdXSIsCi0gICAgIltbUmVn
RXhwQ29kZV1dIiwKLSAgICAiW1tERkdKSVRdXSIsCi0gICAgIltbQmFzZWxpbmVPbmx5XV0iLAot
ICAgICJbW0Jhc2VsaW5lUHJvZmlsZV1dIiwKLSAgICAiW1tCYXNlbGluZU9TUl1dIiwKLSAgICAi
W1tFbmdpbmVGcmFtZV1dIgotfTsKLQotLy8gSGVscGVyIGZ1bmN0aW9uLCB0cnVuY2F0ZSB0cmFj
ZXMgdG8gcHJ1bmUgdGhlIG91dHB1dCAmIG1ha2UgdmVyeSB2ZXJib3NlIG1vZGUgYSBsaXR0bGUg
bW9yZSByZWFkYWJsZS4KLXN0YXRpYyBib29sIHRydW5jYXRlVHJhY2UoY29uc3QgY2hhciogc3lt
Ym9sTmFtZSkKLXsKLSAgICByZXR1cm4gIXN0cmNtcChzeW1ib2xOYW1lLCAiSlNDOjpCeXRlY29k
ZUdlbmVyYXRvcjo6Z2VuZXJhdGUoKSIpCi0gICAgICAgIHx8ICFzdHJjbXAoc3ltYm9sTmFtZSwg
IkpTQzo6UGFyc2VyPEpTQzo6TGV4ZXI8dW5zaWduZWQgY2hhcj4+OjpwYXJzZUlubmVyKCkiKQot
ICAgICAgICB8fCAhc3RyY21wKHN5bWJvbE5hbWUsICJXVEY6OmZhc3RNYWxsb2ModW5zaWduZWQg
bG9uZykiKQotICAgICAgICB8fCAhc3RyY21wKHN5bWJvbE5hbWUsICJXVEY6OmNhbGN1bGF0ZVVU
Q09mZnNldCgpIikKLSAgICAgICAgfHwgIXN0cmNtcChzeW1ib2xOYW1lLCAiSlNDOjpERkc6OkJ5
dGVDb2RlUGFyc2VyOjpwYXJzZUNvZGVCbG9jaygpIik7Ci0gICAgICAgIAotfQotCi0vLyBFYWNo
IHRyYWNlIGNvbnNpc3RzIG9mIGEgc2VxdWVuY2Ugb2YgemVybyBvciBtb3JlICdFbmdpbmVGcmFt
ZScgZW50cmllcywKLS8vIGZvbGxvd2VkIGJ5IGEgc2FtcGxlIGluIEpJVCBjb2RlLCBvciBvbmUg
b3IgbW9yZSAnRW5naW5lRnJhbWUnIGVudHJpZXMsCi0vLyBmb2xsb3dlZCBieSBhICdFbmdpbmVD
b2RlJyB0ZXJtaW5hdG9yLgotdm9pZCBDb2RlUHJvZmlsZTo6c2FtcGxlKHZvaWQqIHBjLCB2b2lk
KiogZnJhbWVQb2ludGVyKQotewotICAgIC8vIERpc2FsbG93IHRyYWNlcyBjb250YWluaW5nIG9u
bHkgYSAnRW5naW5lQ29kZScgdGVybWluYXRvciwgd2l0aG91dCBhbnkgJ0VuZ2luZUZyYW1lJyBm
cmFtZXMuCi0gICAgaWYgKCFmcmFtZVBvaW50ZXIpCi0gICAgICAgIHJldHVybjsKLQotICAgIHdo
aWxlIChmcmFtZVBvaW50ZXIpIHsKLSAgICAgICAgQ29kZVR5cGUgdHlwZTsKLQotI2lmIEVOQUJM
RShKSVQpCi0gICAgICAgIC8vIERldGVybWluZSBpZiB0aGlzIHNhbXBsZSBmZWxsIGluIEpJVCBj
b2RlLCBhbmQgaWYgc28sIGZyb20gd2hpY2ggSklUICYgd2h5LgotICAgICAgICB2b2lkKiBvd25l
clVJRCA9IENvZGVQcm9maWxpbmc6OmdldE93bmVyVUlERm9yUEMocGMpOwotCi0gICAgICAgIGlm
ICghb3duZXJVSUQpCi0gICAgICAgICAgICB0eXBlID0gRW5naW5lRnJhbWU7Ci0gICAgICAgIGVs
c2UgaWYgKG93bmVyVUlEID09IEdMT0JBTF9USFVOS19JRCkKLSAgICAgICAgICAgIHR5cGUgPSBH
bG9iYWxUaHVuazsKLSAgICAgICAgZWxzZSBpZiAob3duZXJVSUQgPT0gUkVHRVhQX0NPREVfSUQp
Ci0gICAgICAgICAgICB0eXBlID0gUmVnRXhwQ29kZTsKLSAgICAgICAgZWxzZSB7Ci0gICAgICAg
ICAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9IHN0YXRpY19jYXN0PENvZGVCbG9jayo+KG93bmVy
VUlEKTsKLSAgICAgICAgICAgIGlmIChjb2RlQmxvY2stPmppdFR5cGUoKSA9PSBKSVRUeXBlOjpE
RkdKSVQpCi0gICAgICAgICAgICAgICAgdHlwZSA9IERGR0pJVDsKLSAgICAgICAgICAgIGVsc2Ug
aWYgKCFjYW5Db21waWxlKGNvZGVCbG9jay0+Y2FwYWJpbGl0eUxldmVsU3RhdGUoKSkpCi0gICAg
ICAgICAgICAgICAgdHlwZSA9IEJhc2VsaW5lT25seTsKLSAgICAgICAgICAgIGVsc2UgaWYgKGNv
ZGVCbG9jay0+cmVwbGFjZW1lbnQoKSkKLSAgICAgICAgICAgICAgICB0eXBlID0gQmFzZWxpbmVP
U1I7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgdHlwZSA9IEJhc2VsaW5lUHJv
ZmlsZTsKLSAgICAgICAgfQotI2Vsc2UKLSAgICAgICAgdHlwZSA9IEVuZ2luZUZyYW1lOwotI2Vu
ZGlmCi0KLSAgICAgICAgLy8gQSBzYW1wbGUgaW4gSklUIGNvZGUgdGVybWluYXRlcyB0aGUgdHJh
Y2UuCi0gICAgICAgIG1fc2FtcGxlcy5hcHBlbmQoQ29kZVJlY29yZChwYywgdHlwZSkpOwotICAg
ICAgICBpZiAodHlwZSAhPSBFbmdpbmVGcmFtZSkKLSAgICAgICAgICAgIHJldHVybjsKLQotI2lm
IE9TKERBUldJTikgJiYgQ1BVKFg4Nl82NCkKLSAgICAgICAgLy8gV2FsayB1cCB0aGUgc3RhY2su
Ci0gICAgICAgIHBjID0gZnJhbWVQb2ludGVyWzFdOwotICAgICAgICBmcmFtZVBvaW50ZXIgPSBy
ZWludGVycHJldF9jYXN0PHZvaWQqKj4oKmZyYW1lUG9pbnRlcik7Ci0jZWxpZiBPUyhMSU5VWCkg
JiYgQ1BVKFg4NikKLSAgICAgICAgLy8gRG9uJ3QgdW53aW5kIHRoZSBzdGFjayBhcyBzb21lIGRl
cGVuZGVudCB0aGlyZCBwYXJ0eSBsaWJyYXJpZXMKLSAgICAgICAgLy8gbWF5IGJlIGNvbXBpbGVk
IHdpdGggLWZvbWl0LWZyYW1lLXBvaW50ZXIuCi0gICAgICAgIGZyYW1lUG9pbnRlciA9IDA7Ci0j
ZWxzZQotICAgICAgICAvLyBUaGlzIHBsYXRmb3JtIGlzIG5vdCB5ZXQgc3VwcG9ydGVkIQotICAg
ICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwotI2VuZGlmCi0gICAgfQotCi0gICAg
Ly8gSWYgd2UgZ2V0IGhlcmUsIHdlIHdhbGtlZCB0aGUgZW50aXJlIHN0YWNrIHdpdGhvdXQgZmlu
ZGluZyBhbnkgZnJhbWVzIG9mIEpJVCBjb2RlLgotICAgIG1fc2FtcGxlcy5hcHBlbmQoQ29kZVJl
Y29yZCgwLCBFbmdpbmVDb2RlKSk7Ci19Ci0KLXZvaWQgQ29kZVByb2ZpbGU6OnJlcG9ydCgpCi17
Ci0gICAgZGF0YUxvZ0YoIjxDb2RlUHJvZmlsaW5nICVzOiVkPlxuIiwgbV9maWxlLmRhdGEoKSwg
bV9saW5lTnVtYmVyKTsKLQotICAgIC8vIEhvdyBtYW55IGZyYW1lcyBvZiBDLWNvZGUgdG8gcHJp
bnQgLSAwLCBpZiBub3QgdmVyYm9zZSwgMSBpZiB2ZXJib3NlLCB1cCB0byAxMDI0IGlmIHZlcnkg
dmVyYm9zZS4KLSAgICB1bnNpZ25lZCByZWN1cnNpb25MaW1pdCA9IENvZGVQcm9maWxpbmc6OmJl
VmVyeVZlcmJvc2UoKSA/IDEwMjQgOiBDb2RlUHJvZmlsaW5nOjpiZVZlcmJvc2UoKTsKLQotICAg
IFByb2ZpbGVUcmVlTm9kZSBwcm9maWxlOwotCi0gICAgLy8gV2FsayB0aHJvdWdoIHRoZSBzYW1w
bGUgYnVmZmVyLgotICAgIHNpemVfdCB0cmFjZSA9IDA7Ci0gICAgd2hpbGUgKHRyYWNlIDwgbV9z
YW1wbGVzLnNpemUoKSkgewotCi0gICAgICAgIC8vIEFsbCB0cmFjZXMgYXJlIHplcm8gb3IgbW9y
ZSAnRW5naW5lRnJhbWUncywgZm9sbG93ZWQgYnkgYSBub24tJ0VuZ2luZUZyYW1lJy4KLSAgICAg
ICAgLy8gU2NhbiB0byBmaW5kIHRoZSBsYXN0IHNhbXBsZSBpbiB0aGUgdHJhY2UuCi0gICAgICAg
IHNpemVfdCBsYXN0SW5UcmFjZSA9IHRyYWNlOwotICAgICAgICB3aGlsZSAobV9zYW1wbGVzW2xh
c3RJblRyYWNlXS50eXBlID09IEVuZ2luZUZyYW1lKQotICAgICAgICAgICAgKytsYXN0SW5UcmFj
ZTsKLQotICAgICAgICAvLyBXZSB1c2UgdGhlIGxhc3Qgc2FtcGxlIHR5cGUgdG8gbG9vayB1cCBh
IG5hbWUgKHVzZWQgYXMgYSBidWNrZXQgaW4gdGhlIHByb2ZpbGVyKS4KLSAgICAgICAgUHJvZmls
ZVRyZWVOb2RlKiBjYWxsYmFja3MgPSBwcm9maWxlLnNhbXBsZUNoaWxkKHNfY29kZVR5cGVOYW1l
c1ttX3NhbXBsZXNbbGFzdEluVHJhY2VdLnR5cGVdKTsKLQotICAgICAgICAvLyBJZiB0aGVyZSBh
cmUgYW55IHNhbXBsZXMgaW4gQy1jb2RlLCBhZGQgdXAgdG8gcmVjdXJzaW9uTGltaXQgb2YgdGhl
bSBpbnRvIHRoZSBwcm9maWxlIHRyZWUuCi0gICAgICAgIHNpemVfdCBsYXN0RW5naW5lRnJhbWUg
PSBsYXN0SW5UcmFjZTsKLSAgICAgICAgZm9yICh1bnNpZ25lZCBjb3VudCA9IDA7IGxhc3RFbmdp
bmVGcmFtZSA+IHRyYWNlICYmIGNvdW50IDwgcmVjdXJzaW9uTGltaXQ7ICsrY291bnQpIHsKLSAg
ICAgICAgICAgIC0tbGFzdEVuZ2luZUZyYW1lOwotICAgICAgICAgICAgQVNTRVJUKG1fc2FtcGxl
c1tsYXN0RW5naW5lRnJhbWVdLnR5cGUgPT0gRW5naW5lRnJhbWUpOwotICAgICAgICAgICAgY29u
c3QgY2hhciogbmFtZSA9ICI8dW5rbm93bj4iOwotICAgICAgICAgICAgYXV0byBkZW1hbmdsZWQg
PSBTdGFja1RyYWNlOjpkZW1hbmdsZShtX3NhbXBsZXNbbGFzdEVuZ2luZUZyYW1lXS5wYyk7Ci0g
ICAgICAgICAgICBpZiAoZGVtYW5nbGVkKQotICAgICAgICAgICAgICAgIG5hbWUgPSBkZW1hbmds
ZWQtPmRlbWFuZ2xlZE5hbWUoKSA/IGRlbWFuZ2xlZC0+ZGVtYW5nbGVkTmFtZSgpIDogZGVtYW5n
bGVkLT5tYW5nbGVkTmFtZSgpOwotICAgICAgICAgICAgY2FsbGJhY2tzID0gY2FsbGJhY2tzLT5z
YW1wbGVDaGlsZChuYW1lKTsKLSAgICAgICAgICAgIGlmICh0cnVuY2F0ZVRyYWNlKG5hbWUpKQot
ICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8gTW92ZSBvbiB0
byB0aGUgbmV4dCB0cmFjZS4KLSAgICAgICAgdHJhY2UgPSBsYXN0SW5UcmFjZSArIDE7Ci0gICAg
ICAgIEFTU0VSVCh0cmFjZSA8PSBtX3NhbXBsZXMuc2l6ZSgpKTsKLSAgICB9Ci0KLSAgICAvLyBP
dXRwdXQgdGhlIHByb2ZpbGUgdHJlZS4KLSAgICBkYXRhTG9nRigiVG90YWwgc2FtcGxlczogJWxs
ZFxuIiwgc3RhdGljX2Nhc3Q8bG9uZyBsb25nPihwcm9maWxlLmNoaWxkQ291bnQoKSkpOwotICAg
IHByb2ZpbGUuZHVtcCgpOwotICAgIAotICAgIGZvciAoc2l6ZV90IGkgPSAwIDsgaSA8IG1fY2hp
bGRyZW4uc2l6ZSgpOyArK2kpCi0gICAgICAgIG1fY2hpbGRyZW5baV0tPnJlcG9ydCgpOwotCi0g
ICAgZGF0YUxvZ0YoIjwvQ29kZVByb2ZpbGluZyAlczolZD5cbiIsIG1fZmlsZS5kYXRhKCksIG1f
bGluZU51bWJlcik7Ci19Ci0KLX0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90b29scy9D
b2RlUHJvZmlsZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90b29scy9D
b2RlUHJvZmlsZS5oCShyZXZpc2lvbiAyNTgzNTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
dG9vbHMvQ29kZVByb2ZpbGUuaAkobm9uZXhpc3RlbnQpCkBAIC0xLDg5ICswLDAgQEAKLS8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoK
LSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFT
IElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
LSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQotI3ByYWdtYSBvbmNlCi0K
LSNpbmNsdWRlICJTb3VyY2VDb2RlLmgiCi0jaW5jbHVkZSAiVGllcmVkTU1hcEFycmF5LmgiCi0j
aW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgotCi1uYW1lc3BhY2UgSlNDIHsKLQotY2xhc3Mg
Q29kZVByb2ZpbGUgewotICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwotcHVibGljOgotICAg
IENvZGVQcm9maWxlKGNvbnN0IFNvdXJjZUNvZGUmIHNvdXJjZSwgQ29kZVByb2ZpbGUqIHBhcmVu
dCkKLSAgICAgICAgOiBtX2ZpbGUoU3RyaW5nKHNvdXJjZS5wcm92aWRlcigpLT51cmwoKSkudXRm
OCgpKQotICAgICAgICAsIG1fbGluZU51bWJlcihzb3VyY2UuZmlyc3RMaW5lKCkub25lQmFzZWRJ
bnQoKSkKLSAgICAgICAgLCBtX3BhcmVudChwYXJlbnQpCi0gICAgewotICAgICAgICBpZiAocGFy
ZW50KQotICAgICAgICAgICAgcGFyZW50LT5hZGRDaGlsZChzdGQ6OnVuaXF1ZV9wdHI8Q29kZVBy
b2ZpbGU+KHRoaXMpKTsKLSAgICB9Ci0KLSAgICB2b2lkIHNhbXBsZSh2b2lkKiBwYywgdm9pZCoq
IGZyYW1lUG9pbnRlcik7Ci0gICAgdm9pZCByZXBvcnQoKTsKLQotICAgIENvZGVQcm9maWxlKiBw
YXJlbnQoKQotICAgIHsKLSAgICAgICAgcmV0dXJuIG1fcGFyZW50OwotICAgIH0KLSAgICAKLSAg
ICB2b2lkIGFkZENoaWxkKHN0ZDo6dW5pcXVlX3B0cjxDb2RlUHJvZmlsZT4gY2hpbGQpCi0gICAg
ewotICAgICAgICBtX2NoaWxkcmVuLmFwcGVuZChXVEZNb3ZlKGNoaWxkKSk7Ci0gICAgfQotCi0g
ICAgZW51bSBDb2RlVHlwZSB7Ci0gICAgICAgIEVuZ2luZUNvZGUsCi0gICAgICAgIEdsb2JhbFRo
dW5rLAotICAgICAgICBSZWdFeHBDb2RlLAotICAgICAgICBERkdKSVQsCi0gICAgICAgIEJhc2Vs
aW5lT25seSwKLSAgICAgICAgQmFzZWxpbmVQcm9maWxlLAotICAgICAgICBCYXNlbGluZU9TUiwK
LSAgICAgICAgRW5naW5lRnJhbWUsCi0gICAgICAgIE51bWJlck9mQ29kZVR5cGVzCi0gICAgfTsK
LQotcHJpdmF0ZToKLSAgICBzdHJ1Y3QgQ29kZVJlY29yZCB7Ci0gICAgICAgIENvZGVSZWNvcmQo
dm9pZCogcGMsIENvZGVUeXBlIHR5cGUpCi0gICAgICAgICAgICA6IHBjKHBjKQotICAgICAgICAg
ICAgLCB0eXBlKHR5cGUpCi0gICAgICAgIHsKLSAgICAgICAgfQotICAgICAgICB2b2lkKiBwYzsK
LSAgICAgICAgQ29kZVR5cGUgdHlwZTsKLSAgICB9OwotCi0gICAgQ1N0cmluZyBtX2ZpbGU7Ci0g
ICAgdW5zaWduZWQgbV9saW5lTnVtYmVyOwotICAgIENvZGVQcm9maWxlKiBtX3BhcmVudDsKLSAg
ICBWZWN0b3I8c3RkOjp1bmlxdWVfcHRyPENvZGVQcm9maWxlPj4gbV9jaGlsZHJlbjsKLSAgICBU
aWVyZWRNTWFwQXJyYXk8Q29kZVJlY29yZD4gbV9zYW1wbGVzOwotfTsKLQotfSAvLyBuYW1lc3Bh
Y2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvdG9vbHMvQ29kZVByb2ZpbGluZy5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3Rvb2xzL0NvZGVQcm9maWxp
bmcuY3BwCShyZXZpc2lvbiAyNTgzNTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvdG9vbHMv
Q29kZVByb2ZpbGluZy5jcHAJKG5vbmV4aXN0ZW50KQpAQCAtMSwxNjkgKzAsMCBAQAotLyoKLSAq
IENvcHlyaWdodCAoQykgMjAxMi0yMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
YGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICog
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0KLSNpbmNsdWRlICJj
b25maWcuaCIKLSNpbmNsdWRlICJDb2RlUHJvZmlsaW5nLmgiCi0KLSNpbmNsdWRlICJDb2RlUHJv
ZmlsZS5oIgotI2luY2x1ZGUgIk1hY2hpbmVDb250ZXh0LmgiCi0jaW5jbHVkZSA8d3RmL01ldGFB
bGxvY2F0b3IuaD4KLQotI2lmIEhBVkUoU0lHTkFMX0gpCi0jaW5jbHVkZSA8c2lnbmFsLmg+Ci0j
ZW5kaWYKLQotI2lmIEhBVkUoTUFDSElORV9DT05URVhUKQotI2luY2x1ZGUgPHN5cy90aW1lLmg+
Ci0jZW5kaWYKLQotbmFtZXNwYWNlIEpTQyB7Ci0KLXZvbGF0aWxlIENvZGVQcm9maWxlKiBDb2Rl
UHJvZmlsaW5nOjpzX3Byb2ZpbGVTdGFjayA9IDA7Ci1Db2RlUHJvZmlsaW5nOjpNb2RlIENvZGVQ
cm9maWxpbmc6OnNfbW9kZSA9IENvZGVQcm9maWxpbmc6OkRpc2FibGVkOwotV1RGOjpNZXRhQWxs
b2NhdG9yVHJhY2tlciogQ29kZVByb2ZpbGluZzo6c190cmFja2VyID0gMDsKLQotSUdOT1JFX1dB
Uk5JTkdTX0JFR0lOKCJtaXNzaW5nLW5vcmV0dXJuIikKLQotI2lmIEhBVkUoTUFDSElORV9DT05U
RVhUKQotLy8gSGVscGVyIGZ1bmN0aW9uIHRvIHN0YXJ0ICYgc3RvcCB0aGUgdGltZXIuCi0vLyBQ
cmVzZW50bHkgd2UncmUgdXNpbmcgdGhlIHdhbGwtY2xvY2sgdGltZXIsIHNpbmNlIHRoaXMgc2Vl
bXMgdG8gZ2l2ZSB0aGUgYmVzdCByZXN1bHRzLgotc3RhdGljIHZvaWQgc2V0UHJvZmlsZVRpbWVy
KHVuc2lnbmVkIHVzZWMpCi17Ci0gICAgaXRpbWVydmFsIHRpbWVyOwotICAgIHRpbWVyLml0X3Zh
bHVlLnR2X3NlYyA9IDA7Ci0gICAgdGltZXIuaXRfdmFsdWUudHZfdXNlYyA9IHVzZWM7Ci0gICAg
dGltZXIuaXRfaW50ZXJ2YWwudHZfc2VjID0gMDsKLSAgICB0aW1lci5pdF9pbnRlcnZhbC50dl91
c2VjID0gdXNlYzsKLSAgICBzZXRpdGltZXIoSVRJTUVSX1JFQUwsICZ0aW1lciwgMCk7Ci19Ci0j
ZW5kaWYKLQotSUdOT1JFX1dBUk5JTkdTX0VORAotCi0jaWYgSEFWRShNQUNISU5FX0NPTlRFWFQp
Ci1zdGF0aWMgdm9pZCBwcm9maWxpbmdUaW1lcihpbnQsIHNpZ2luZm9fdCosIHZvaWQqIHVhcCkK
LXsKLSAgICBQbGF0Zm9ybVJlZ2lzdGVycyYgcGxhdGZvcm1SZWdpc3RlcnMgPSBXVEY6OnJlZ2lz
dGVyc0Zyb21VQ29udGV4dChzdGF0aWNfY2FzdDx1Y29udGV4dF90Kj4odWFwKSk7Ci0gICAgaWYg
KGF1dG8gaW5zdHJ1Y3Rpb25Qb2ludGVyID0gTWFjaGluZUNvbnRleHQ6Omluc3RydWN0aW9uUG9p
bnRlcihwbGF0Zm9ybVJlZ2lzdGVycykpIHsKLSAgICAgICAgQ29kZVByb2ZpbGluZzo6c2FtcGxl
KAotICAgICAgICAgICAgaW5zdHJ1Y3Rpb25Qb2ludGVyLT51bnRhZ2dlZEV4ZWN1dGFibGVBZGRy
ZXNzKCksCi0gICAgICAgICAgICByZWludGVycHJldF9jYXN0PHZvaWQqKj4oTWFjaGluZUNvbnRl
eHQ6OmZyYW1lUG9pbnRlcihwbGF0Zm9ybVJlZ2lzdGVycykpKTsKLSAgICB9Ci19Ci0jZW5kaWYK
LQotLy8gQ2FsbGJhY2sgdHJpZ2dlcmVkIHdoZW4gdGhlIHRpbWVyIGlzIGZpcmVkLgotdm9pZCBD
b2RlUHJvZmlsaW5nOjpzYW1wbGUodm9pZCogcGMsIHZvaWQqKiBmcmFtZVBvaW50ZXIpCi17Ci0g
ICAgQ29kZVByb2ZpbGUqIHByb2ZpbGVTdGFjayA9IGNvbnN0X2Nhc3Q8Q29kZVByb2ZpbGUqPihz
X3Byb2ZpbGVTdGFjayk7Ci0gICAgaWYgKHByb2ZpbGVTdGFjaykKLSAgICAgICAgcHJvZmlsZVN0
YWNrLT5zYW1wbGUocGMsIGZyYW1lUG9pbnRlcik7Ci19Ci0KLXZvaWQgQ29kZVByb2ZpbGluZzo6
bm90aWZ5QWxsb2NhdG9yKFdURjo6TWV0YUFsbG9jYXRvciogYWxsb2NhdG9yKQotewotICAgIC8v
IENoZWNrIGZvciBKU0NfQ09ERV9QUk9GSUxJTkcuCi0gICAgY29uc3QgY2hhciogY29kZVByb2Zp
bGluZ01vZGUgPSBnZXRlbnYoIkpTQ19DT0RFX1BST0ZJTElORyIpOwotICAgIGlmICghY29kZVBy
b2ZpbGluZ01vZGUpCi0gICAgICAgIHJldHVybjsKLQotICAgIC8vIENoZWNrIGZvciBhIHZhbGlk
IG1vZGUsIGN1cnJlbnRseSAiMSIsICIyIiwgb3IgIjMiLgotICAgIGlmICghY29kZVByb2ZpbGlu
Z01vZGVbMF0gfHwgY29kZVByb2ZpbGluZ01vZGVbMV0pCi0gICAgICAgIHJldHVybjsKLSAgICBz
d2l0Y2ggKCpjb2RlUHJvZmlsaW5nTW9kZSkgewotICAgIGNhc2UgJzEnOgotICAgICAgICBzX21v
ZGUgPSBFbmFibGVkOwotICAgICAgICBicmVhazsKLSAgICBjYXNlICcyJzoKLSAgICAgICAgc19t
b2RlID0gVmVyYm9zZTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSAnMyc6Ci0gICAgICAgIHNf
bW9kZSA9IFZlcnlWZXJib3NlOwotICAgICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAg
ICByZXR1cm47Ci0gICAgfQotCi0gICAgQVNTRVJUKGVuYWJsZWQoKSk7Ci0gICAgQVNTRVJUKCFz
X3RyYWNrZXIpOwotICAgIHNfdHJhY2tlciA9IG5ldyBXVEY6Ok1ldGFBbGxvY2F0b3JUcmFja2Vy
KCk7Ci0gICAgYWxsb2NhdG9yLT50cmFja0FsbG9jYXRpb25zKHNfdHJhY2tlcik7Ci19Ci0KLXZv
aWQqIENvZGVQcm9maWxpbmc6OmdldE93bmVyVUlERm9yUEModm9pZCogYWRkcmVzcykKLXsKLSAg
ICBpZiAoIXNfdHJhY2tlcikKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgV1RGOjpNZXRhQWxsb2Nh
dG9ySGFuZGxlKiBoYW5kbGUgPSBzX3RyYWNrZXItPmZpbmQoYWRkcmVzcyk7Ci0gICAgaWYgKCFo
YW5kbGUpCi0gICAgICAgIHJldHVybiAwOwotICAgIHJldHVybiBoYW5kbGUtPm93bmVyVUlEKCk7
Ci19Ci0KLXZvaWQgQ29kZVByb2ZpbGluZzo6YmVnaW4oY29uc3QgU291cmNlQ29kZSYgc291cmNl
KQotewotICAgIC8vIFB1c2ggYSBuZXcgQ29kZVByb2ZpbGUgb250byB0aGUgc3RhY2sgZm9yIGVh
Y2ggc2NyaXB0IGVuY291bnRlcmVkLgotICAgIENvZGVQcm9maWxlKiBwcm9maWxlU3RhY2sgPSBj
b25zdF9jYXN0PENvZGVQcm9maWxlKj4oc19wcm9maWxlU3RhY2spOwotICAgIGJvb2wgYWxyZWFk
eVByb2ZpbGluZyA9IHByb2ZpbGVTdGFjazsKLSAgICBzX3Byb2ZpbGVTdGFjayA9IHByb2ZpbGVT
dGFjayA9IG5ldyBDb2RlUHJvZmlsZShzb3VyY2UsIHByb2ZpbGVTdGFjayk7Ci0KLSAgICAvLyBJ
cyB0aGUgcHJvZmlsZXIgYWxyZWFkeSBydW5uaW5nIC0gaWYgc28sIHRoZSB0aW1lciB3aWxsIGFs
cmVhZHkgYmUgc2V0IHVwLgotICAgIGlmIChhbHJlYWR5UHJvZmlsaW5nKQotICAgICAgICByZXR1
cm47Ci0KLSNpZiBIQVZFKE1BQ0hJTkVfQ09OVEVYVCkKLSAgICAvLyBSZWdzaXRlciBhIHNpZ25h
bCBoYW5kbGVyICYgaXRpbWVyLgotICAgIHN0cnVjdCBzaWdhY3Rpb24gYWN0aW9uOwotICAgIGFj
dGlvbi5zYV9zaWdhY3Rpb24gPSByZWludGVycHJldF9jYXN0PHZvaWQgKCopKGludCwgc2lnaW5m
b190ICosIHZvaWQgKik+KHByb2ZpbGluZ1RpbWVyKTsKLSAgICBzaWdmaWxsc2V0KCZhY3Rpb24u
c2FfbWFzayk7Ci0gICAgYWN0aW9uLnNhX2ZsYWdzID0gU0FfU0lHSU5GTzsKLSAgICBzaWdhY3Rp
b24oU0lHQUxSTSwgJmFjdGlvbiwgMCk7Ci0gICAgc2V0UHJvZmlsZVRpbWVyKDEwMCk7Ci0jZW5k
aWYKLX0KLQotdm9pZCBDb2RlUHJvZmlsaW5nOjplbmQoKQotewotICAgIC8vIFBvcCB0aGUgY3Vy
cmVudCBwcm9maWxlciBvZmYgdGhlIHN0YWNrLgotICAgIENvZGVQcm9maWxlKiBjdXJyZW50ID0g
Y29uc3RfY2FzdDxDb2RlUHJvZmlsZSo+KHNfcHJvZmlsZVN0YWNrKTsKLSAgICBBU1NFUlQoY3Vy
cmVudCk7Ci0gICAgc19wcm9maWxlU3RhY2sgPSBjdXJyZW50LT5wYXJlbnQoKTsKLQotICAgIC8v
IElzIHRoaXMgdGhlIG91dGVybW9zdCBzY3JpcHQgYmVpbmcgcHJvZmlsZWQ/IC0gaWYgbm90LCBq
dXN0IHJldHVybi4KLSAgICAvLyBXZSBwZXJmb3JtIGFsbCBvdXRwdXQgb2YgcHJvZmlsZXMgcmVj
dXJzaXZlbHkgZnJvbSB0aGUgb3V0ZXJtb3N0IHNjcmlwdCwKLSAgICAvLyB0byBtaW5pbWl6ZSBw
cm9maWxpbmcgb3ZlcmhlYWQgZnJvbSBza2V3aW5nIHJlc3VsdHMuCi0gICAgaWYgKHNfcHJvZmls
ZVN0YWNrKQotICAgICAgICByZXR1cm47Ci0KLSNpZiBIQVZFKE1BQ0hJTkVfQ09OVEVYVCkKLSAg
ICAvLyBTdG9wIHByb2ZpbGluZwotICAgIHNldFByb2ZpbGVUaW1lcigwKTsKLSNlbmRpZgotCi0g
ICAgY3VycmVudC0+cmVwb3J0KCk7Ci0gICAgZGVsZXRlIGN1cnJlbnQ7Ci19Ci0KLX0KSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90b29scy9Db2RlUHJvZmlsaW5nLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3Rvb2xzL0NvZGVQcm9maWxpbmcuaAkocmV2aXNpb24g
MjU4MzUwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3Rvb2xzL0NvZGVQcm9maWxpbmcuaAko
bm9uZXhpc3RlbnQpCkBAIC0xLDgxICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAot
ICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4gCi0gKi8KLQotI3ByYWdtYSBvbmNlCi0KLW5hbWVzcGFjZSBXVEYgewotCi1j
bGFzcyBNZXRhQWxsb2NhdG9yOwotY2xhc3MgTWV0YUFsbG9jYXRvclRyYWNrZXI7Ci0KLX0KLQot
bmFtZXNwYWNlIEpTQyB7Ci0KLWNsYXNzIENvZGVQcm9maWxlOwotY2xhc3MgU291cmNlQ29kZTsK
LQotY2xhc3MgQ29kZVByb2ZpbGluZyB7Ci0gICAgZW51bSBNb2RlIHsKLSAgICAgICAgRGlzYWJs
ZWQsCi0gICAgICAgIEVuYWJsZWQsCi0gICAgICAgIFZlcmJvc2UsCi0gICAgICAgIFZlcnlWZXJi
b3NlCi0gICAgfTsKLQotcHVibGljOgotICAgIENvZGVQcm9maWxpbmcoY29uc3QgU291cmNlQ29k
ZSYgc291cmNlKQotICAgICAgICA6IG1fYWN0aXZlKGVuYWJsZWQoKSkKLSAgICB7Ci0gICAgICAg
IGlmIChtX2FjdGl2ZSkKLSAgICAgICAgICAgIGJlZ2luKHNvdXJjZSk7Ci0gICAgfQotCi0gICAg
fkNvZGVQcm9maWxpbmcoKQotICAgIHsKLSAgICAgICAgaWYgKG1fYWN0aXZlKQotICAgICAgICAg
ICAgZW5kKCk7Ci0gICAgfQotCi0gICAgc3RhdGljIGJvb2wgZW5hYmxlZCgpIHsgcmV0dXJuIHNf
bW9kZSAhPSBEaXNhYmxlZDsgfQotICAgIHN0YXRpYyBib29sIGJlVmVyYm9zZSgpIHsgcmV0dXJu
IHNfbW9kZSA+PSBWZXJib3NlOyB9Ci0gICAgc3RhdGljIGJvb2wgYmVWZXJ5VmVyYm9zZSgpIHsg
cmV0dXJuIHNfbW9kZSA+PSBWZXJ5VmVyYm9zZTsgfQotCi0gICAgc3RhdGljIHZvaWQgbm90aWZ5
QWxsb2NhdG9yKFdURjo6TWV0YUFsbG9jYXRvciopOwotICAgIHN0YXRpYyB2b2lkKiBnZXRPd25l
clVJREZvclBDKHZvaWQqKTsKLSAgICBzdGF0aWMgdm9pZCBzYW1wbGUodm9pZCogcGMsIHZvaWQq
KiBmcmFtZVBvaW50ZXIpOwotCi1wcml2YXRlOgotICAgIHZvaWQgYmVnaW4oY29uc3QgU291cmNl
Q29kZSYpOwotICAgIHZvaWQgZW5kKCk7Ci0KLSAgICBib29sIG1fYWN0aXZlOwotCi0gICAgc3Rh
dGljIE1vZGUgc19tb2RlOwotICAgIHN0YXRpYyBXVEY6Ok1ldGFBbGxvY2F0b3JUcmFja2VyKiBz
X3RyYWNrZXI7Ci0gICAgc3RhdGljIHZvbGF0aWxlIENvZGVQcm9maWxlKiBzX3Byb2ZpbGVTdGFj
azsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L3dhc20vV2FzbUJCUVBsYW4uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS93YXNtL1dhc21CQlFQbGFuLmNwcAkocmV2aXNpb24gMjU4MzUwKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL3dhc20vV2FzbUJCUVBsYW4uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMzIsMTMg
KzEzMiw5IEBAIHZvaWQgQkJRUGxhbjo6d29yayhDb21waWxhdGlvbkVmZm9ydCBlZmYKICAgICAg
ICAgLy8gd2lsbCB1cGRhdGUuIEl0J3MgYWxzbyBvayBpZiB0aGV5IHB1Ymxpc2ggdGhlaXIgY29k
ZSBiZWZvcmUgd2UgcmVzZXQgdGhlIGluc3RydWN0aW9uIGNhY2hlcyBiZWNhdXNlIGFmdGVyIHdl
IHJlbGVhc2UKICAgICAgICAgLy8gdGhlIGxvY2sgb3VyIGNvZGUgaXMgcmVhZHkgdG8gYmUgcHVi
bGlzaGVkIHRvby4KICAgICAgICAgTG9ja0hvbGRlciBob2xkZXIobV9jb2RlQmxvY2stPm1fbG9j
ayk7CisKICAgICAgICAgbV9jb2RlQmxvY2stPm1fYmJxQ2FsbGVlc1ttX2Z1bmN0aW9uSW5kZXhd
ID0gY2FsbGVlLmNvcHlSZWYoKTsKLSAgICAgICAgewotICAgICAgICAgICAgTExJbnRDYWxsZWUm
IGxsaW50Q2FsbGVlID0gbV9jb2RlQmxvY2stPm1fbGxpbnRDYWxsZWVzLT5hdChtX2Z1bmN0aW9u
SW5kZXgpLmdldCgpOwotICAgICAgICAgICAgYXV0byBsb2NrZXIgPSBob2xkTG9jayhsbGludENh
bGxlZS50aWVyVXBDb3VudGVyKCkubV9sb2NrKTsKLSAgICAgICAgICAgIGxsaW50Q2FsbGVlLnNl
dFJlcGxhY2VtZW50KGNhbGxlZS5jb3B5UmVmKCkpOwotICAgICAgICAgICAgbGxpbnRDYWxsZWUu
dGllclVwQ291bnRlcigpLm1fY29tcGlsYXRpb25TdGF0dXMgPSBMTEludFRpZXJVcENvdW50ZXI6
OkNvbXBpbGF0aW9uU3RhdHVzOjpDb21waWxlZDsKLSAgICAgICAgfQorCiAgICAgICAgIGZvciAo
YXV0byYgY2FsbCA6IGNhbGxlZS0+d2FzbVRvV2FzbUNhbGxzaXRlcygpKSB7CiAgICAgICAgICAg
ICBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8V2FzbUVudHJ5UHRyVGFnPiBlbnRyeXBvaW50OwogICAg
ICAgICAgICAgaWYgKGNhbGwuZnVuY3Rpb25JbmRleFNwYWNlIDwgbV9tb2R1bGVJbmZvcm1hdGlv
bi0+aW1wb3J0RnVuY3Rpb25Db3VudCgpKQpAQCAtMTQ4LDI0ICsxNDQsNDggQEAgdm9pZCBCQlFQ
bGFuOjp3b3JrKENvbXBpbGF0aW9uRWZmb3J0IGVmZgogCiAgICAgICAgICAgICBNYWNyb0Fzc2Vt
Ymxlcjo6cmVwYXRjaE5lYXJDYWxsKGNhbGwuY2FsbExvY2F0aW9uLCBDb2RlTG9jYXRpb25MYWJl
bDxXYXNtRW50cnlQdHJUYWc+KGVudHJ5cG9pbnQpKTsKICAgICAgICAgfQotICAgIH0KIAotICAg
IC8vIEl0J3MgaW1wb3J0YW50IHRvIG1ha2Ugc3VyZSB3ZSBkbyB0aGlzIGJlZm9yZSB3ZSBtYWtl
IGFueSBvZiB0aGUgY29kZSB3ZSBqdXN0IGNvbXBpbGVkIHZpc2libGUuIElmIHdlIGRpZG4ndCwg
d2UgY291bGQgZW5kIHVwCi0gICAgLy8gd2hlcmUgd2UgYXJlIHRpZXJpbmcgdXAgc29tZSBmdW5j
dGlvbiBBIHRvIEEnIGFuZCB3ZSByZXBhdGNoIHNvbWUgZnVuY3Rpb24gQiB0byBjYWxsIEEnIGlu
c3RlYWQgb2YgQS4gQW5vdGhlciBDUFUgY291bGQgc2VlCi0gICAgLy8gdGhlIHVwZGF0ZXMgdG8g
QiBidXQgc3RpbGwgbm90IGhhdmUgcmVzZXQgaXRzIGNhY2hlIG9mIEEnLCB3aGljaCB3b3VsZCBs
ZWFkIHRvIGFsbCBraW5kcyBvZiBiYWRuZXNzLgotICAgIHJlc2V0SW5zdHJ1Y3Rpb25DYWNoZU9u
QWxsVGhyZWFkcygpOwotICAgIFdURjo6c3RvcmVTdG9yZUZlbmNlKCk7IC8vIFRoaXMgcHJvYmFi
bHkgaXNuJ3QgbmVjZXNzYXJ5IGJ1dCBpdCdzIGdvb2QgdG8gYmUgcGFyYW5vaWQuCisgICAgICAg
IEhhc2hNYXA8dm9pZCosIENvZGVMb2NhdGlvbkxhYmVsPFdhc21FbnRyeVB0clRhZz4+IHN0YWdl
ZENhbGxzOworICAgICAgICBhdXRvIHN0YWdlUmVwYXRjaCA9IFsmXSAoY29uc3QgVmVjdG9yPFVu
bGlua2VkV2FzbVRvV2FzbUNhbGw+JiBjYWxsc2l0ZXMpIHsKKyAgICAgICAgICAgIGZvciAoYXV0
byYgY2FsbCA6IGNhbGxzaXRlcykgeworICAgICAgICAgICAgICAgIGlmIChjYWxsLmZ1bmN0aW9u
SW5kZXhTcGFjZSA9PSBmdW5jdGlvbkluZGV4U3BhY2UpIHsKKyAgICAgICAgICAgICAgICAgICAg
Q29kZUxvY2F0aW9uTGFiZWw8V2FzbUVudHJ5UHRyVGFnPiB0YXJnZXQgPSBNYWNyb0Fzc2VtYmxl
cjo6cHJlcGFyZUZvckF0b21pY1JlcGF0Y2hOZWFyQ2FsbENvbmN1cnJlbnRseShjYWxsLmNhbGxM
b2NhdGlvbiwgQ29kZUxvY2F0aW9uTGFiZWw8V2FzbUVudHJ5UHRyVGFnPihlbnRyeXBvaW50KSk7
CisgICAgICAgICAgICAgICAgICAgIHN0YWdlZENhbGxzLmFkZChjYWxsLmNhbGxMb2NhdGlvbi5k
YXRhTG9jYXRpb24oKSwgdGFyZ2V0KTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9
CisgICAgICAgIH07CiAKLSAgICBtX2NvZGVCbG9jay0+bV93YXNtSW5kaXJlY3RDYWxsRW50cnlQ
b2ludHNbbV9mdW5jdGlvbkluZGV4XSA9IGVudHJ5cG9pbnQ7Ci0gICAgewotICAgICAgICBMb2Nr
SG9sZGVyIGhvbGRlcihtX2NvZGVCbG9jay0+bV9sb2NrKTsKKyAgICAgICAgZm9yICh1bnNpZ25l
ZCBpID0gMDsgaSA8IG1fY29kZUJsb2NrLT5tX3dhc21Ub1dhc21DYWxsc2l0ZXMuc2l6ZSgpOyAr
K2kpIHsKKyAgICAgICAgICAgIHN0YWdlUmVwYXRjaChtX2NvZGVCbG9jay0+bV93YXNtVG9XYXNt
Q2FsbHNpdGVzW2ldKTsKKyAgICAgICAgICAgIGlmIChtX2NvZGVCbG9jay0+bV9sbGludENhbGxl
ZXMpIHsKKyAgICAgICAgICAgICAgICBMTEludENhbGxlZSYgbGxpbnRDYWxsZWUgPSBtX2NvZGVC
bG9jay0+bV9sbGludENhbGxlZXMtPmF0KGkpLmdldCgpOworICAgICAgICAgICAgICAgIGlmIChK
SVRDYWxsZWUqIHJlcGxhY2VtZW50Q2FsbGVlID0gbGxpbnRDYWxsZWUucmVwbGFjZW1lbnQoKSkK
KyAgICAgICAgICAgICAgICAgICAgc3RhZ2VSZXBhdGNoKHJlcGxhY2VtZW50Q2FsbGVlLT53YXNt
VG9XYXNtQ2FsbHNpdGVzKCkpOworICAgICAgICAgICAgICAgIGlmIChPTUdGb3JPU1JFbnRyeUNh
bGxlZSogb3NyRW50cnlDYWxsZWUgPSBsbGludENhbGxlZS5vc3JFbnRyeUNhbGxlZSgpKQorICAg
ICAgICAgICAgICAgICAgICBzdGFnZVJlcGF0Y2gob3NyRW50cnlDYWxsZWUtPndhc21Ub1dhc21D
YWxsc2l0ZXMoKSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoQkJRQ2FsbGVlKiBi
YnFDYWxsZWUgPSBtX2NvZGVCbG9jay0+bV9iYnFDYWxsZWVzW2ldLmdldCgpKSB7CisgICAgICAg
ICAgICAgICAgaWYgKE9NR0NhbGxlZSogcmVwbGFjZW1lbnRDYWxsZWUgPSBiYnFDYWxsZWUtPnJl
cGxhY2VtZW50KCkpCisgICAgICAgICAgICAgICAgICAgIHN0YWdlUmVwYXRjaChyZXBsYWNlbWVu
dENhbGxlZS0+d2FzbVRvV2FzbUNhbGxzaXRlcygpKTsKKyAgICAgICAgICAgICAgICBpZiAoT01H
Rm9yT1NSRW50cnlDYWxsZWUqIG9zckVudHJ5Q2FsbGVlID0gYmJxQ2FsbGVlLT5vc3JFbnRyeUNh
bGxlZSgpKQorICAgICAgICAgICAgICAgICAgICBzdGFnZVJlcGF0Y2gob3NyRW50cnlDYWxsZWUt
Pndhc21Ub1dhc21DYWxsc2l0ZXMoKSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAg
ICAgICAvLyBJdCdzIGltcG9ydGFudCB0byBtYWtlIHN1cmUgd2UgZG8gdGhpcyBiZWZvcmUgd2Ug
bWFrZSBhbnkgb2YgdGhlIGNvZGUgd2UganVzdCBjb21waWxlZCB2aXNpYmxlLiBJZiB3ZSBkaWRu
J3QsIHdlIGNvdWxkIGVuZCB1cAorICAgICAgICAvLyB3aGVyZSB3ZSBhcmUgdGllcmluZyB1cCBz
b21lIGZ1bmN0aW9uIEEgdG8gQScgYW5kIHdlIHJlcGF0Y2ggc29tZSBmdW5jdGlvbiBCIHRvIGNh
bGwgQScgaW5zdGVhZCBvZiBBLiBBbm90aGVyIENQVSBjb3VsZCBzZWUKKyAgICAgICAgLy8gdGhl
IHVwZGF0ZXMgdG8gQiBidXQgc3RpbGwgbm90IGhhdmUgcmVzZXQgaXRzIGNhY2hlIG9mIEEnLCB3
aGljaCB3b3VsZCBsZWFkIHRvIGFsbCBraW5kcyBvZiBiYWRuZXNzLgorICAgICAgICByZXNldElu
c3RydWN0aW9uQ2FjaGVPbkFsbFRocmVhZHMoKTsKKyAgICAgICAgV1RGOjpzdG9yZVN0b3JlRmVu
Y2UoKTsgLy8gVGhpcyBwcm9iYWJseSBpc24ndCBuZWNlc3NhcnkgYnV0IGl0J3MgZ29vZCB0byBi
ZSBwYXJhbm9pZC4KKworICAgICAgICBtX2NvZGVCbG9jay0+bV93YXNtSW5kaXJlY3RDYWxsRW50
cnlQb2ludHNbbV9mdW5jdGlvbkluZGV4XSA9IGVudHJ5cG9pbnQ7CiAKICAgICAgICAgYXV0byBy
ZXBhdGNoQ2FsbHMgPSBbJl0gKGNvbnN0IFZlY3RvcjxVbmxpbmtlZFdhc21Ub1dhc21DYWxsPiYg
Y2FsbHNpdGVzKSB7CiAgICAgICAgICAgICBmb3IgKGF1dG8mIGNhbGwgOiBjYWxsc2l0ZXMpIHsK
ICAgICAgICAgICAgICAgICBkYXRhTG9nTG5JZihXYXNtQkJRUGxhbkludGVybmFsOjp2ZXJib3Nl
LCAiQ29uc2lkZXJpbmcgcmVwYXRjaGluZyBjYWxsIGF0OiAiLCBSYXdQb2ludGVyKGNhbGwuY2Fs
bExvY2F0aW9uLmRhdGFMb2NhdGlvbigpKSwgIiB0aGF0IHRhcmdldHMgIiwgY2FsbC5mdW5jdGlv
bkluZGV4U3BhY2UpOwogICAgICAgICAgICAgICAgIGlmIChjYWxsLmZ1bmN0aW9uSW5kZXhTcGFj
ZSA9PSBmdW5jdGlvbkluZGV4U3BhY2UpIHsKICAgICAgICAgICAgICAgICAgICAgZGF0YUxvZ0xu
SWYoV2FzbUJCUVBsYW5JbnRlcm5hbDo6dmVyYm9zZSwgIlJlcGF0Y2hpbmcgY2FsbCBhdDogIiwg
UmF3UG9pbnRlcihjYWxsLmNhbGxMb2NhdGlvbi5kYXRhTG9jYXRpb24oKSksICIgdG8gIiwgUmF3
UG9pbnRlcihlbnRyeXBvaW50LmV4ZWN1dGFibGVBZGRyZXNzKCkpKTsKLSAgICAgICAgICAgICAg
ICAgICAgTWFjcm9Bc3NlbWJsZXI6OnJlcGF0Y2hOZWFyQ2FsbChjYWxsLmNhbGxMb2NhdGlvbiwg
Q29kZUxvY2F0aW9uTGFiZWw8V2FzbUVudHJ5UHRyVGFnPihlbnRyeXBvaW50KSk7CisgICAgICAg
ICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpyZXBhdGNoTmVhckNhbGwoY2FsbC5jYWxsTG9j
YXRpb24sIHN0YWdlZENhbGxzLmdldChjYWxsLmNhbGxMb2NhdGlvbi5kYXRhTG9jYXRpb24oKSkp
OwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KICAgICAgICAgfTsKQEAgLTE4Niwx
MSArMjA2LDE3IEBAIHZvaWQgQkJRUGxhbjo6d29yayhDb21waWxhdGlvbkVmZm9ydCBlZmYKICAg
ICAgICAgICAgICAgICAgICAgcmVwYXRjaENhbGxzKG9zckVudHJ5Q2FsbGVlLT53YXNtVG9XYXNt
Q2FsbHNpdGVzKCkpOwogICAgICAgICAgICAgfQogICAgICAgICB9CisKKyAgICAgICAgeworICAg
ICAgICAgICAgTExJbnRDYWxsZWUmIGxsaW50Q2FsbGVlID0gbV9jb2RlQmxvY2stPm1fbGxpbnRD
YWxsZWVzLT5hdChtX2Z1bmN0aW9uSW5kZXgpLmdldCgpOworICAgICAgICAgICAgYXV0byBsb2Nr
ZXIgPSBob2xkTG9jayhsbGludENhbGxlZS50aWVyVXBDb3VudGVyKCkubV9sb2NrKTsKKyAgICAg
ICAgICAgIGxsaW50Q2FsbGVlLnNldFJlcGxhY2VtZW50KGNhbGxlZS5jb3B5UmVmKCkpOworICAg
ICAgICAgICAgbGxpbnRDYWxsZWUudGllclVwQ291bnRlcigpLm1fY29tcGlsYXRpb25TdGF0dXMg
PSBMTEludFRpZXJVcENvdW50ZXI6OkNvbXBpbGF0aW9uU3RhdHVzOjpDb21waWxlZDsKKyAgICAg
ICAgfQogICAgIH0KIAogICAgIGRhdGFMb2dMbklmKFdhc21CQlFQbGFuSW50ZXJuYWw6OnZlcmJv
c2UsICJGaW5pc2hlZCBCQlEgIiwgbV9mdW5jdGlvbkluZGV4KTsKIAotCiAgICAgYXV0byBsb2Nr
ZXIgPSBob2xkTG9jayhtX2xvY2spOwogICAgIG1vdmVUb1N0YXRlKFN0YXRlOjpDb21wbGV0ZWQp
OwogICAgIHJ1bkNvbXBsZXRpb25UYXNrcyhsb2NrZXIpOwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL3dhc20vV2FzbU9NR0Zvck9TUkVudHJ5UGxhbi5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU9NR0Zvck9TUkVudHJ5UGxhbi5jcHAJKHJldmlz
aW9uIDI1ODM1MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21PTUdGb3JPU1JF
bnRyeVBsYW4uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDMsMTIgKzEwMywxMCBAQCB2b2lkIE9N
R0Zvck9TUkVudHJ5UGxhbjo6d29yayhDb21waWxhdGlvCiAKICAgICBvbWdFbnRyeXBvaW50LmNh
bGxlZVNhdmVSZWdpc3RlcnMgPSBXVEZNb3ZlKHBhcnNlQW5kQ29tcGlsZVJlc3VsdC52YWx1ZSgp
LT5lbnRyeXBvaW50LmNhbGxlZVNhdmVSZWdpc3RlcnMpOwogCi0gICAgTWFjcm9Bc3NlbWJsZXJD
b2RlUHRyPFdhc21FbnRyeVB0clRhZz4gZW50cnlwb2ludDsKICAgICBBU1NFUlQobV9jb2RlQmxv
Y2sucHRyKCkgPT0gbV9tb2R1bGUtPmNvZGVCbG9ja0Zvcihtb2RlKCkpKTsKICAgICBSZWY8T01H
Rm9yT1NSRW50cnlDYWxsZWU+IGNhbGxlZSA9IE9NR0Zvck9TUkVudHJ5Q2FsbGVlOjpjcmVhdGUo
V1RGTW92ZShvbWdFbnRyeXBvaW50KSwgZnVuY3Rpb25JbmRleFNwYWNlLCBtX21vZHVsZUluZm9y
bWF0aW9uLT5uYW1lU2VjdGlvbi0+Z2V0KGZ1bmN0aW9uSW5kZXhTcGFjZSksIG9zckVudHJ5U2Ny
YXRjaEJ1ZmZlclNpemUsIG1fbG9vcEluZGV4LCBXVEZNb3ZlKHVubGlua2VkQ2FsbHMpKTsKICAg
ICB7CiAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpyZXBhdGNoUG9pbnRlcihwYXJzZUFuZENvbXBp
bGVSZXN1bHQudmFsdWUoKS0+Y2FsbGVlTW92ZUxvY2F0aW9uLCBDYWxsZWVCaXRzOjpib3hXYXNt
KGNhbGxlZS5wdHIoKSkpOwotICAgICAgICBlbnRyeXBvaW50ID0gY2FsbGVlLT5lbnRyeXBvaW50
KCk7CiAKICAgICAgICAgYXV0byBsb2NrZXIgPSBob2xkTG9jayhtX2NvZGVCbG9jay0+bV9sb2Nr
KTsKICAgICAgICAgZm9yIChhdXRvJiBjYWxsIDogY2FsbGVlLT53YXNtVG9XYXNtQ2FsbHNpdGVz
KCkpIHsKQEAgLTEyMCwxMSArMTE4LDEwIEBAIHZvaWQgT01HRm9yT1NSRW50cnlQbGFuOjp3b3Jr
KENvbXBpbGF0aW8KIAogICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OnJlcGF0Y2hOZWFyQ2Fs
bChjYWxsLmNhbGxMb2NhdGlvbiwgQ29kZUxvY2F0aW9uTGFiZWw8V2FzbUVudHJ5UHRyVGFnPihl
bnRyeXBvaW50KSk7CiAgICAgICAgIH0KLSAgICB9Ci0gICAgcmVzZXRJbnN0cnVjdGlvbkNhY2hl
T25BbGxUaHJlYWRzKCk7Ci0gICAgV1RGOjpzdG9yZVN0b3JlRmVuY2UoKTsKLSAgICB7Ci0gICAg
ICAgIGF1dG8gbG9ja2VyID0gaG9sZExvY2sobV9jb2RlQmxvY2stPm1fbG9jayk7CisKKyAgICAg
ICAgcmVzZXRJbnN0cnVjdGlvbkNhY2hlT25BbGxUaHJlYWRzKCk7CisgICAgICAgIFdURjo6c3Rv
cmVTdG9yZUZlbmNlKCk7CisKICAgICAgICAgewogICAgICAgICAgICAgc3dpdGNoIChtX2NhbGxl
ZS0+Y29tcGlsYXRpb25Nb2RlKCkpIHsKICAgICAgICAgICAgIGNhc2UgQ29tcGlsYXRpb25Nb2Rl
OjpMTEludE1vZGU6IHsKQEAgLTE0NiwxOSArMTQzLDYgQEAgdm9pZCBPTUdGb3JPU1JFbnRyeVBs
YW46OndvcmsoQ29tcGlsYXRpbwogICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9S
RUFDSEVEKCk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KLSAgICAgICAgV1RGOjpzdG9yZVN0
b3JlRmVuY2UoKTsKLSAgICAgICAgLy8gSXQgaXMgcG9zc2libGUgdGhhdCBhIG5ldyBPTUcgY2Fs
bGVlIGlzIGFkZGVkIHdoaWxlIHdlIHJlbGVhc2UgbV9jb2RlQmxvY2stPmxvY2suCi0gICAgICAg
IC8vIFVudGlsIHdlIGFkZCBPTUdGb3JPU1JFbnRyeSBjYWxsZWUgdG8gQkJRQ2FsbGVlJ3MgbV9v
c3JFbnRyeUNhbGxlZSwgdGhpcyBuZXcgT01HIGZ1bmN0aW9uIGxpbmtpbmcgZG9lcyBub3QgaGFw
cGVuIGZvciB0aGlzIE9NR0Zvck9TUkVudHJ5IGNhbGxlZS4KLSAgICAgICAgLy8gV2UgcmUtbGlu
ayB0aGlzIE9NR0Zvck9TUkVudHJ5IGNhbGxlZSBhZ2FpbiBub3QgdG8gbWlzcyB0aGF0IGNoYW5j
ZS4KLSAgICAgICAgZm9yIChhdXRvJiBjYWxsIDogY2FsbGVlLT53YXNtVG9XYXNtQ2FsbHNpdGVz
KCkpIHsKLSAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxXYXNtRW50cnlQdHJUYWc+
IGVudHJ5cG9pbnQ7Ci0gICAgICAgICAgICBpZiAoY2FsbC5mdW5jdGlvbkluZGV4U3BhY2UgPCBt
X21vZHVsZS0+bW9kdWxlSW5mb3JtYXRpb24oKS5pbXBvcnRGdW5jdGlvbkNvdW50KCkpCi0gICAg
ICAgICAgICAgICAgZW50cnlwb2ludCA9IG1fY29kZUJsb2NrLT5tX3dhc21Ub1dhc21FeGl0U3R1
YnNbY2FsbC5mdW5jdGlvbkluZGV4U3BhY2VdLmNvZGUoKTsKLSAgICAgICAgICAgIGVsc2UKLSAg
ICAgICAgICAgICAgICBlbnRyeXBvaW50ID0gbV9jb2RlQmxvY2stPndhc21FbnRyeXBvaW50Q2Fs
bGVlRnJvbUZ1bmN0aW9uSW5kZXhTcGFjZShjYWxsLmZ1bmN0aW9uSW5kZXhTcGFjZSkuZW50cnlw
b2ludCgpLnJldGFnZ2VkPFdhc21FbnRyeVB0clRhZz4oKTsKLQotICAgICAgICAgICAgTWFjcm9B
c3NlbWJsZXI6OnJlcGF0Y2hOZWFyQ2FsbChjYWxsLmNhbGxMb2NhdGlvbiwgQ29kZUxvY2F0aW9u
TGFiZWw8V2FzbUVudHJ5UHRyVGFnPihlbnRyeXBvaW50KSk7Ci0gICAgICAgIH0KICAgICB9CiAg
ICAgZGF0YUxvZ0xuSWYoV2FzbU9NR0Zvck9TUkVudHJ5UGxhbkludGVybmFsOjp2ZXJib3NlLCAi
RmluaXNoZWQgT01HRm9yT1NSRW50cnkgIiwgbV9mdW5jdGlvbkluZGV4KTsKICAgICBjb21wbGV0
ZShob2xkTG9jayhtX2xvY2spKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dh
c21PTUdQbGFuLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9X
YXNtT01HUGxhbi5jcHAJKHJldmlzaW9uIDI1ODM1MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS93YXNtL1dhc21PTUdQbGFuLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTE0LDIwICsxMTQsOSBA
QCB2b2lkIE9NR1BsYW46OndvcmsoQ29tcGlsYXRpb25FZmZvcnQpCiAgICAgICAgIC8vIHdpbGwg
dXBkYXRlLiBJdCdzIGFsc28gb2sgaWYgdGhleSBwdWJsaXNoIHRoZWlyIGNvZGUgYmVmb3JlIHdl
IHJlc2V0IHRoZSBpbnN0cnVjdGlvbiBjYWNoZXMgYmVjYXVzZSBhZnRlciB3ZSByZWxlYXNlCiAg
ICAgICAgIC8vIHRoZSBsb2NrIG91ciBjb2RlIGlzIHJlYWR5IHRvIGJlIHB1Ymxpc2hlZCB0b28u
CiAgICAgICAgIExvY2tIb2xkZXIgaG9sZGVyKG1fY29kZUJsb2NrLT5tX2xvY2spOworCiAgICAg
ICAgIG1fY29kZUJsb2NrLT5tX29tZ0NhbGxlZXNbbV9mdW5jdGlvbkluZGV4XSA9IGNhbGxlZS5j
b3B5UmVmKCk7Ci0gICAgICAgIHsKLSAgICAgICAgICAgIGlmIChCQlFDYWxsZWUqIGJicUNhbGxl
ZSA9IG1fY29kZUJsb2NrLT5tX2JicUNhbGxlZXNbbV9mdW5jdGlvbkluZGV4XS5nZXQoKSkgewot
ICAgICAgICAgICAgICAgIGF1dG8gbG9ja2VyID0gaG9sZExvY2soYmJxQ2FsbGVlLT50aWVyVXBD
b3VudCgpLT5nZXRMb2NrKCkpOwotICAgICAgICAgICAgICAgIGJicUNhbGxlZS0+c2V0UmVwbGFj
ZW1lbnQoY2FsbGVlLmNvcHlSZWYoKSk7Ci0gICAgICAgICAgICAgICAgYmJxQ2FsbGVlLT50aWVy
VXBDb3VudCgpLT5tX2NvbXBpbGF0aW9uU3RhdHVzRm9yT01HID0gVGllclVwQ291bnQ6OkNvbXBp
bGF0aW9uU3RhdHVzOjpDb21waWxlZDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmICht
X2NvZGVCbG9jay0+bV9sbGludENhbGxlZXMpIHsKLSAgICAgICAgICAgICAgICBMTEludENhbGxl
ZSYgbGxpbnRDYWxsZWUgPSBtX2NvZGVCbG9jay0+bV9sbGludENhbGxlZXMtPmF0KG1fZnVuY3Rp
b25JbmRleCkuZ2V0KCk7Ci0gICAgICAgICAgICAgICAgYXV0byBsb2NrZXIgPSBob2xkTG9jayhs
bGludENhbGxlZS50aWVyVXBDb3VudGVyKCkubV9sb2NrKTsKLSAgICAgICAgICAgICAgICBsbGlu
dENhbGxlZS5zZXRSZXBsYWNlbWVudChjYWxsZWUuY29weVJlZigpKTsKLSAgICAgICAgICAgICAg
ICBsbGludENhbGxlZS50aWVyVXBDb3VudGVyKCkubV9jb21waWxhdGlvblN0YXR1cyA9IExMSW50
VGllclVwQ291bnRlcjo6Q29tcGlsYXRpb25TdGF0dXM6OkNvbXBpbGVkOwotICAgICAgICAgICAg
fQotICAgICAgICB9CisKICAgICAgICAgZm9yIChhdXRvJiBjYWxsIDogY2FsbGVlLT53YXNtVG9X
YXNtQ2FsbHNpdGVzKCkpIHsKICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxXYXNt
RW50cnlQdHJUYWc+IGVudHJ5cG9pbnQ7CiAgICAgICAgICAgICBpZiAoY2FsbC5mdW5jdGlvbklu
ZGV4U3BhY2UgPCBtX21vZHVsZS0+bW9kdWxlSW5mb3JtYXRpb24oKS5pbXBvcnRGdW5jdGlvbkNv
dW50KCkpCkBAIC0xMzcsMjQgKzEyNiw0NyBAQCB2b2lkIE9NR1BsYW46OndvcmsoQ29tcGlsYXRp
b25FZmZvcnQpCiAKICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpyZXBhdGNoTmVhckNhbGwo
Y2FsbC5jYWxsTG9jYXRpb24sIENvZGVMb2NhdGlvbkxhYmVsPFdhc21FbnRyeVB0clRhZz4oZW50
cnlwb2ludCkpOwogICAgICAgICB9Ci0gICAgfQogCi0gICAgLy8gSXQncyBpbXBvcnRhbnQgdG8g
bWFrZSBzdXJlIHdlIGRvIHRoaXMgYmVmb3JlIHdlIG1ha2UgYW55IG9mIHRoZSBjb2RlIHdlIGp1
c3QgY29tcGlsZWQgdmlzaWJsZS4gSWYgd2UgZGlkbid0LCB3ZSBjb3VsZCBlbmQgdXAKLSAgICAv
LyB3aGVyZSB3ZSBhcmUgdGllcmluZyB1cCBzb21lIGZ1bmN0aW9uIEEgdG8gQScgYW5kIHdlIHJl
cGF0Y2ggc29tZSBmdW5jdGlvbiBCIHRvIGNhbGwgQScgaW5zdGVhZCBvZiBBLiBBbm90aGVyIENQ
VSBjb3VsZCBzZWUKLSAgICAvLyB0aGUgdXBkYXRlcyB0byBCIGJ1dCBzdGlsbCBub3QgaGF2ZSBy
ZXNldCBpdHMgY2FjaGUgb2YgQScsIHdoaWNoIHdvdWxkIGxlYWQgdG8gYWxsIGtpbmRzIG9mIGJh
ZG5lc3MuCi0gICAgcmVzZXRJbnN0cnVjdGlvbkNhY2hlT25BbGxUaHJlYWRzKCk7Ci0gICAgV1RG
OjpzdG9yZVN0b3JlRmVuY2UoKTsgLy8gVGhpcyBwcm9iYWJseSBpc24ndCBuZWNlc3NhcnkgYnV0
IGl0J3MgZ29vZCB0byBiZSBwYXJhbm9pZC4KKyAgICAgICAgSGFzaE1hcDx2b2lkKiwgQ29kZUxv
Y2F0aW9uTGFiZWw8V2FzbUVudHJ5UHRyVGFnPj4gc3RhZ2VkQ2FsbHM7CisgICAgICAgIGF1dG8g
c3RhZ2VSZXBhdGNoID0gWyZdIChjb25zdCBWZWN0b3I8VW5saW5rZWRXYXNtVG9XYXNtQ2FsbD4m
IGNhbGxzaXRlcykgeworICAgICAgICAgICAgZm9yIChhdXRvJiBjYWxsIDogY2FsbHNpdGVzKSB7
CisgICAgICAgICAgICAgICAgaWYgKGNhbGwuZnVuY3Rpb25JbmRleFNwYWNlID09IGZ1bmN0aW9u
SW5kZXhTcGFjZSkgeworICAgICAgICAgICAgICAgICAgICBDb2RlTG9jYXRpb25MYWJlbDxXYXNt
RW50cnlQdHJUYWc+IHRhcmdldCA9IE1hY3JvQXNzZW1ibGVyOjpwcmVwYXJlRm9yQXRvbWljUmVw
YXRjaE5lYXJDYWxsQ29uY3VycmVudGx5KGNhbGwuY2FsbExvY2F0aW9uLCBDb2RlTG9jYXRpb25M
YWJlbDxXYXNtRW50cnlQdHJUYWc+KGVudHJ5cG9pbnQpKTsKKyAgICAgICAgICAgICAgICAgICAg
c3RhZ2VkQ2FsbHMuYWRkKGNhbGwuY2FsbExvY2F0aW9uLmRhdGFMb2NhdGlvbigpLCB0YXJnZXQp
OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfTsKKyAgICAgICAg
Zm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fY29kZUJsb2NrLT5tX3dhc21Ub1dhc21DYWxsc2l0
ZXMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgICAgIHN0YWdlUmVwYXRjaChtX2NvZGVCbG9jay0+
bV93YXNtVG9XYXNtQ2FsbHNpdGVzW2ldKTsKKyAgICAgICAgICAgIGlmIChtX2NvZGVCbG9jay0+
bV9sbGludENhbGxlZXMpIHsKKyAgICAgICAgICAgICAgICBMTEludENhbGxlZSYgbGxpbnRDYWxs
ZWUgPSBtX2NvZGVCbG9jay0+bV9sbGludENhbGxlZXMtPmF0KGkpLmdldCgpOworICAgICAgICAg
ICAgICAgIGlmIChKSVRDYWxsZWUqIHJlcGxhY2VtZW50Q2FsbGVlID0gbGxpbnRDYWxsZWUucmVw
bGFjZW1lbnQoKSkKKyAgICAgICAgICAgICAgICAgICAgc3RhZ2VSZXBhdGNoKHJlcGxhY2VtZW50
Q2FsbGVlLT53YXNtVG9XYXNtQ2FsbHNpdGVzKCkpOworICAgICAgICAgICAgICAgIGlmIChPTUdG
b3JPU1JFbnRyeUNhbGxlZSogb3NyRW50cnlDYWxsZWUgPSBsbGludENhbGxlZS5vc3JFbnRyeUNh
bGxlZSgpKQorICAgICAgICAgICAgICAgICAgICBzdGFnZVJlcGF0Y2gob3NyRW50cnlDYWxsZWUt
Pndhc21Ub1dhc21DYWxsc2l0ZXMoKSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAo
QkJRQ2FsbGVlKiBiYnFDYWxsZWUgPSBtX2NvZGVCbG9jay0+bV9iYnFDYWxsZWVzW2ldLmdldCgp
KSB7CisgICAgICAgICAgICAgICAgaWYgKE9NR0NhbGxlZSogcmVwbGFjZW1lbnRDYWxsZWUgPSBi
YnFDYWxsZWUtPnJlcGxhY2VtZW50KCkpCisgICAgICAgICAgICAgICAgICAgIHN0YWdlUmVwYXRj
aChyZXBsYWNlbWVudENhbGxlZS0+d2FzbVRvV2FzbUNhbGxzaXRlcygpKTsKKyAgICAgICAgICAg
ICAgICBpZiAoT01HRm9yT1NSRW50cnlDYWxsZWUqIG9zckVudHJ5Q2FsbGVlID0gYmJxQ2FsbGVl
LT5vc3JFbnRyeUNhbGxlZSgpKQorICAgICAgICAgICAgICAgICAgICBzdGFnZVJlcGF0Y2gob3Ny
RW50cnlDYWxsZWUtPndhc21Ub1dhc21DYWxsc2l0ZXMoKSk7CisgICAgICAgICAgICB9CisgICAg
ICAgIH0KKworICAgICAgICAvLyBJdCdzIGltcG9ydGFudCB0byBtYWtlIHN1cmUgd2UgZG8gdGhp
cyBiZWZvcmUgd2UgbWFrZSBhbnkgb2YgdGhlIGNvZGUgd2UganVzdCBjb21waWxlZCB2aXNpYmxl
LiBJZiB3ZSBkaWRuJ3QsIHdlIGNvdWxkIGVuZCB1cAorICAgICAgICAvLyB3aGVyZSB3ZSBhcmUg
dGllcmluZyB1cCBzb21lIGZ1bmN0aW9uIEEgdG8gQScgYW5kIHdlIHJlcGF0Y2ggc29tZSBmdW5j
dGlvbiBCIHRvIGNhbGwgQScgaW5zdGVhZCBvZiBBLiBBbm90aGVyIENQVSBjb3VsZCBzZWUKKyAg
ICAgICAgLy8gdGhlIHVwZGF0ZXMgdG8gQiBidXQgc3RpbGwgbm90IGhhdmUgcmVzZXQgaXRzIGNh
Y2hlIG9mIEEnLCB3aGljaCB3b3VsZCBsZWFkIHRvIGFsbCBraW5kcyBvZiBiYWRuZXNzLgorICAg
ICAgICByZXNldEluc3RydWN0aW9uQ2FjaGVPbkFsbFRocmVhZHMoKTsKKyAgICAgICAgV1RGOjpz
dG9yZVN0b3JlRmVuY2UoKTsgLy8gVGhpcyBwcm9iYWJseSBpc24ndCBuZWNlc3NhcnkgYnV0IGl0
J3MgZ29vZCB0byBiZSBwYXJhbm9pZC4KIAotICAgIG1fY29kZUJsb2NrLT5tX3dhc21JbmRpcmVj
dENhbGxFbnRyeVBvaW50c1ttX2Z1bmN0aW9uSW5kZXhdID0gZW50cnlwb2ludDsKLSAgICB7Ci0g
ICAgICAgIExvY2tIb2xkZXIgaG9sZGVyKG1fY29kZUJsb2NrLT5tX2xvY2spOworICAgICAgICBt
X2NvZGVCbG9jay0+bV93YXNtSW5kaXJlY3RDYWxsRW50cnlQb2ludHNbbV9mdW5jdGlvbkluZGV4
XSA9IGVudHJ5cG9pbnQ7CiAKICAgICAgICAgYXV0byByZXBhdGNoQ2FsbHMgPSBbJl0gKGNvbnN0
IFZlY3RvcjxVbmxpbmtlZFdhc21Ub1dhc21DYWxsPiYgY2FsbHNpdGVzKSB7CiAgICAgICAgICAg
ICBmb3IgKGF1dG8mIGNhbGwgOiBjYWxsc2l0ZXMpIHsKICAgICAgICAgICAgICAgICBkYXRhTG9n
TG5JZihXYXNtT01HUGxhbkludGVybmFsOjp2ZXJib3NlLCAiQ29uc2lkZXJpbmcgcmVwYXRjaGlu
ZyBjYWxsIGF0OiAiLCBSYXdQb2ludGVyKGNhbGwuY2FsbExvY2F0aW9uLmRhdGFMb2NhdGlvbigp
KSwgIiB0aGF0IHRhcmdldHMgIiwgY2FsbC5mdW5jdGlvbkluZGV4U3BhY2UpOwogICAgICAgICAg
ICAgICAgIGlmIChjYWxsLmZ1bmN0aW9uSW5kZXhTcGFjZSA9PSBmdW5jdGlvbkluZGV4U3BhY2Up
IHsKICAgICAgICAgICAgICAgICAgICAgZGF0YUxvZ0xuSWYoV2FzbU9NR1BsYW5JbnRlcm5hbDo6
dmVyYm9zZSwgIlJlcGF0Y2hpbmcgY2FsbCBhdDogIiwgUmF3UG9pbnRlcihjYWxsLmNhbGxMb2Nh
dGlvbi5kYXRhTG9jYXRpb24oKSksICIgdG8gIiwgUmF3UG9pbnRlcihlbnRyeXBvaW50LmV4ZWN1
dGFibGVBZGRyZXNzKCkpKTsKLSAgICAgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OnJl
cGF0Y2hOZWFyQ2FsbChjYWxsLmNhbGxMb2NhdGlvbiwgQ29kZUxvY2F0aW9uTGFiZWw8V2FzbUVu
dHJ5UHRyVGFnPihlbnRyeXBvaW50KSk7CisgICAgICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1i
bGVyOjpyZXBhdGNoTmVhckNhbGwoY2FsbC5jYWxsTG9jYXRpb24sIHN0YWdlZENhbGxzLmdldChj
YWxsLmNhbGxMb2NhdGlvbi5kYXRhTG9jYXRpb24oKSkpOwogICAgICAgICAgICAgICAgIH0KICAg
ICAgICAgICAgIH0KICAgICAgICAgfTsKQEAgLTE3NSw2ICsxODcsMjAgQEAgdm9pZCBPTUdQbGFu
Ojp3b3JrKENvbXBpbGF0aW9uRWZmb3J0KQogICAgICAgICAgICAgICAgICAgICByZXBhdGNoQ2Fs
bHMob3NyRW50cnlDYWxsZWUtPndhc21Ub1dhc21DYWxsc2l0ZXMoKSk7CiAgICAgICAgICAgICB9
CiAgICAgICAgIH0KKworICAgICAgICB7CisgICAgICAgICAgICBpZiAoQkJRQ2FsbGVlKiBiYnFD
YWxsZWUgPSBtX2NvZGVCbG9jay0+bV9iYnFDYWxsZWVzW21fZnVuY3Rpb25JbmRleF0uZ2V0KCkp
IHsKKyAgICAgICAgICAgICAgICBhdXRvIGxvY2tlciA9IGhvbGRMb2NrKGJicUNhbGxlZS0+dGll
clVwQ291bnQoKS0+Z2V0TG9jaygpKTsKKyAgICAgICAgICAgICAgICBiYnFDYWxsZWUtPnNldFJl
cGxhY2VtZW50KGNhbGxlZS5jb3B5UmVmKCkpOworICAgICAgICAgICAgICAgIGJicUNhbGxlZS0+
dGllclVwQ291bnQoKS0+bV9jb21waWxhdGlvblN0YXR1c0Zvck9NRyA9IFRpZXJVcENvdW50OjpD
b21waWxhdGlvblN0YXR1czo6Q29tcGlsZWQ7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBp
ZiAobV9jb2RlQmxvY2stPm1fbGxpbnRDYWxsZWVzKSB7CisgICAgICAgICAgICAgICAgTExJbnRD
YWxsZWUmIGxsaW50Q2FsbGVlID0gbV9jb2RlQmxvY2stPm1fbGxpbnRDYWxsZWVzLT5hdChtX2Z1
bmN0aW9uSW5kZXgpLmdldCgpOworICAgICAgICAgICAgICAgIGF1dG8gbG9ja2VyID0gaG9sZExv
Y2sobGxpbnRDYWxsZWUudGllclVwQ291bnRlcigpLm1fbG9jayk7CisgICAgICAgICAgICAgICAg
bGxpbnRDYWxsZWUuc2V0UmVwbGFjZW1lbnQoY2FsbGVlLmNvcHlSZWYoKSk7CisgICAgICAgICAg
ICAgICAgbGxpbnRDYWxsZWUudGllclVwQ291bnRlcigpLm1fY29tcGlsYXRpb25TdGF0dXMgPSBM
TEludFRpZXJVcENvdW50ZXI6OkNvbXBpbGF0aW9uU3RhdHVzOjpDb21waWxlZDsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgfQogICAgIH0KIAogICAgIGRhdGFMb2dMbklmKFdhc21PTUdQbGFuSW50
ZXJuYWw6OnZlcmJvc2UsICJGaW5pc2hlZCBPTUcgIiwgbV9mdW5jdGlvbkluZGV4KTsKSW5kZXg6
IFNvdXJjZS9XVEYvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvQ2hhbmdlTG9n
CShyZXZpc2lvbiAyNTgzNTApCisrKyBTb3VyY2UvV1RGL0NoYW5nZUxvZwkod29ya2luZyBjb3B5
KQpAQCAtMSwzICsxLDM1IEBACisyMDIwLTAzLTEyICBTYWFtIEJhcmF0aSAgPHNiYXJhdGlAYXBw
bGUuY29tPgorCisgICAgICAgIEltcGxlbWVudCAxR0Igb2YgZXhlY3V0YWJsZSBtZW1vcnkgb24g
YXJtNjQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIw
ODQ5MAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICog
d3RmL01ldGFBbGxvY2F0b3IuY3BwOgorICAgICAgICAoV1RGOjpNZXRhQWxsb2NhdG9yVHJhY2tl
cjo6bm90aWZ5KToKKyAgICAgICAgKFdURjo6TWV0YUFsbG9jYXRvclRyYWNrZXI6OnJlbGVhc2Up
OgorICAgICAgICAoV1RGOjpNZXRhQWxsb2NhdG9yOjpyZWxlYXNlKToKKyAgICAgICAgKFdURjo6
TWV0YUFsbG9jYXRvckhhbmRsZTo6TWV0YUFsbG9jYXRvckhhbmRsZSk6CisgICAgICAgIChXVEY6
Ok1ldGFBbGxvY2F0b3JIYW5kbGU6On5NZXRhQWxsb2NhdG9ySGFuZGxlKToKKyAgICAgICAgKFdU
Rjo6TWV0YUFsbG9jYXRvckhhbmRsZTo6c2hyaW5rKToKKyAgICAgICAgKFdURjo6TWV0YUFsbG9j
YXRvcjo6TWV0YUFsbG9jYXRvcik6CisgICAgICAgIChXVEY6Ok1ldGFBbGxvY2F0b3I6OmFsbG9j
YXRlKToKKyAgICAgICAgKFdURjo6TWV0YUFsbG9jYXRvcjo6Y3VycmVudFN0YXRpc3RpY3MpOgor
ICAgICAgICAqIHd0Zi9NZXRhQWxsb2NhdG9yLmg6CisgICAgICAgIChXVEY6Ok1ldGFBbGxvY2F0
b3JUcmFja2VyOjpmaW5kKToKKyAgICAgICAgKFdURjo6TWV0YUFsbG9jYXRvcjo6YWxsb2NhdGUp
OgorICAgICAgICAoV1RGOjpNZXRhQWxsb2NhdG9yOjpjdXJyZW50U3RhdGlzdGljcyk6CisgICAg
ICAgIChXVEY6Ok1ldGFBbGxvY2F0b3I6OmdldExvY2spOiBEZWxldGVkLgorICAgICAgICAqIHd0
Zi9NZXRhQWxsb2NhdG9ySGFuZGxlLmg6CisgICAgICAgIChXVEY6Ok1ldGFBbGxvY2F0b3JIYW5k
bGU6OmFsbG9jYXRvcik6CisgICAgICAgIChXVEY6Ok1ldGFBbGxvY2F0b3JIYW5kbGU6OmlzTWFu
YWdlZCk6IERlbGV0ZWQuCisgICAgICAgIChXVEY6Ok1ldGFBbGxvY2F0b3JIYW5kbGU6Om93bmVy
VUlEKTogRGVsZXRlZC4KKyAgICAgICAgKiB3dGYvUGxhdGZvcm1Vc2UuaDoKKyAgICAgICAgKiB3
dGYvUmVkQmxhY2tUcmVlLmg6CisgICAgICAgICogd3RmL1N0ZExpYkV4dHJhcy5oOgorICAgICAg
ICAoV1RGOjpjb25zdHJ1Y3RGaXhlZFNpemVBcnJheVdpdGhBcmd1bWVudHNJbXBsKToKKyAgICAg
ICAgKFdURjo6Y29uc3RydWN0Rml4ZWRTaXplQXJyYXlXaXRoQXJndW1lbnRzKToKKwogMjAyMC0w
My0xMSAgSmVyIE5vYmxlICA8amVyLm5vYmxlQGFwcGxlLmNvbT4KIAogICAgICAgICBBZG9wdCBB
VlNhbXBsZUJ1ZmZlclZpZGVvT3V0cHV0CkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9NZXRhQWxsb2Nh
dG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9NZXRhQWxsb2NhdG9yLmNwcAko
cmV2aXNpb24gMjU4MzUwKQorKysgU291cmNlL1dURi93dGYvTWV0YUFsbG9jYXRvci5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTU0LDIyICs1NCwyMSBAQCBNZXRhQWxsb2NhdG9yOjp+TWV0YUFsbG9j
YXRvcigpCiAjZW5kaWYKIH0KIAotdm9pZCBNZXRhQWxsb2NhdG9yVHJhY2tlcjo6bm90aWZ5KE1l
dGFBbGxvY2F0b3JIYW5kbGUqIGhhbmRsZSkKK3ZvaWQgTWV0YUFsbG9jYXRvclRyYWNrZXI6Om5v
dGlmeShNZXRhQWxsb2NhdG9ySGFuZGxlJiBoYW5kbGUpCiB7Ci0gICAgbV9hbGxvY2F0aW9ucy5p
bnNlcnQoaGFuZGxlKTsKKyAgICBtX2FsbG9jYXRpb25zLmluc2VydCgmaGFuZGxlKTsKIH0KIAot
dm9pZCBNZXRhQWxsb2NhdG9yVHJhY2tlcjo6cmVsZWFzZShNZXRhQWxsb2NhdG9ySGFuZGxlKiBo
YW5kbGUpCit2b2lkIE1ldGFBbGxvY2F0b3JUcmFja2VyOjpyZWxlYXNlKE1ldGFBbGxvY2F0b3JI
YW5kbGUmIGhhbmRsZSkKIHsKLSAgICBtX2FsbG9jYXRpb25zLnJlbW92ZShoYW5kbGUpOworICAg
IG1fYWxsb2NhdGlvbnMucmVtb3ZlKCZoYW5kbGUpOwogfQogCi1BTFdBWVNfSU5MSU5FIHZvaWQg
TWV0YUFsbG9jYXRvcjo6cmVsZWFzZShNZXRhQWxsb2NhdG9ySGFuZGxlKiBoYW5kbGUpCit2b2lk
IE1ldGFBbGxvY2F0b3I6OnJlbGVhc2UoY29uc3QgTG9ja0hvbGRlciYsIE1ldGFBbGxvY2F0b3JI
YW5kbGUmIGhhbmRsZSkKIHsKLSAgICBMb2NrSG9sZGVyIGxvY2tlcigmbV9sb2NrKTsKLSAgICBp
ZiAoaGFuZGxlLT5zaXplSW5CeXRlcygpKSB7Ci0gICAgICAgIHZvaWQqIHN0YXJ0ID0gaGFuZGxl
LT5zdGFydCgpLnVudGFnZ2VkUHRyKCk7Ci0gICAgICAgIHNpemVfdCBzaXplSW5CeXRlcyA9IGhh
bmRsZS0+c2l6ZUluQnl0ZXMoKTsKKyAgICBpZiAoaGFuZGxlLnNpemVJbkJ5dGVzKCkpIHsKKyAg
ICAgICAgdm9pZCogc3RhcnQgPSBoYW5kbGUuc3RhcnQoKS51bnRhZ2dlZFB0cigpOworICAgICAg
ICBzaXplX3Qgc2l6ZUluQnl0ZXMgPSBoYW5kbGUuc2l6ZUluQnl0ZXMoKTsKICAgICAgICAgZGVj
cmVtZW50UGFnZU9jY3VwYW5jeShzdGFydCwgc2l6ZUluQnl0ZXMpOwogICAgICAgICBhZGRGcmVl
U3BhY2VGcm9tUmVsZWFzZWRIYW5kbGUoRnJlZVNwYWNlUHRyKHN0YXJ0KSwgc2l6ZUluQnl0ZXMp
OwogICAgIH0KQEAgLTc4LDIxICs3NywxOSBAQCBBTFdBWVNfSU5MSU5FIHZvaWQgTWV0YUFsbG9j
YXRvcjo6cmVsZWFzCiAgICAgICAgIG1fdHJhY2tlci0+cmVsZWFzZShoYW5kbGUpOwogfQogCi1N
ZXRhQWxsb2NhdG9ySGFuZGxlOjpNZXRhQWxsb2NhdG9ySGFuZGxlKE1ldGFBbGxvY2F0b3IqIGFs
bG9jYXRvciwgdm9pZCogc3RhcnQsIHNpemVfdCBzaXplSW5CeXRlcywgdm9pZCogb3duZXJVSUQp
CitNZXRhQWxsb2NhdG9ySGFuZGxlOjpNZXRhQWxsb2NhdG9ySGFuZGxlKE1ldGFBbGxvY2F0b3Im
IGFsbG9jYXRvciwgdm9pZCogc3RhcnQsIHNpemVfdCBzaXplSW5CeXRlcykKICAgICA6IG1fYWxs
b2NhdG9yKGFsbG9jYXRvcikKICAgICAsIG1fc3RhcnQoc3RhcnQpCiAgICAgLCBtX2VuZChyZWlu
dGVycHJldF9jYXN0PGNoYXIqPihzdGFydCkgKyBzaXplSW5CeXRlcykKLSAgICAsIG1fb3duZXJV
SUQob3duZXJVSUQpCiB7Ci0gICAgQVNTRVJUKGFsbG9jYXRvcik7CiAgICAgQVNTRVJUKHN0YXJ0
KTsKICAgICBBU1NFUlQoc2l6ZUluQnl0ZXMpOwogfQogCiBNZXRhQWxsb2NhdG9ySGFuZGxlOjp+
TWV0YUFsbG9jYXRvckhhbmRsZSgpCiB7Ci0gICAgQVNTRVJUKG1fYWxsb2NhdG9yKTsKLSAgICBt
X2FsbG9jYXRvci0+cmVsZWFzZSh0aGlzKTsKKyAgICBhdXRvIGxvY2tlciA9IGhvbGRMb2NrKGFs
bG9jYXRvcigpLm1fbG9jayk7CisgICAgYWxsb2NhdG9yKCkucmVsZWFzZShsb2NrZXIsICp0aGlz
KTsKIH0KIAogdm9pZCBNZXRhQWxsb2NhdG9ySGFuZGxlOjpzaHJpbmsoc2l6ZV90IG5ld1NpemVJ
bkJ5dGVzKQpAQCAtMTAwLDkgKzk3LDEwIEBAIHZvaWQgTWV0YUFsbG9jYXRvckhhbmRsZTo6c2hy
aW5rKHNpemVfdCAKICAgICBzaXplX3Qgc2l6ZUluQnl0ZXMgPSB0aGlzLT5zaXplSW5CeXRlcygp
OwogICAgIEFTU0VSVChuZXdTaXplSW5CeXRlcyA8PSBzaXplSW5CeXRlcyk7CiAKLSAgICBMb2Nr
SG9sZGVyIGxvY2tlcigmbV9hbGxvY2F0b3ItPm1fbG9jayk7CisgICAgTWV0YUFsbG9jYXRvciYg
YWxsb2NhdG9yID0gdGhpcy0+YWxsb2NhdG9yKCk7CisgICAgTG9ja0hvbGRlciBsb2NrZXIoJmFs
bG9jYXRvci5tX2xvY2spOwogCi0gICAgbmV3U2l6ZUluQnl0ZXMgPSBtX2FsbG9jYXRvci0+cm91
bmRVcChuZXdTaXplSW5CeXRlcyk7CisgICAgbmV3U2l6ZUluQnl0ZXMgPSBhbGxvY2F0b3Iucm91
bmRVcChuZXdTaXplSW5CeXRlcyk7CiAgICAgCiAgICAgQVNTRVJUKG5ld1NpemVJbkJ5dGVzIDw9
IHNpemVJbkJ5dGVzKTsKIApAQCAtMTEzLDExICsxMTEsMTEgQEAgdm9pZCBNZXRhQWxsb2NhdG9y
SGFuZGxlOjpzaHJpbmsoc2l6ZV90IAogICAgIHNpemVfdCBmcmVlU2l6ZSA9IHNpemVJbkJ5dGVz
IC0gbmV3U2l6ZUluQnl0ZXM7CiAgICAgdWludHB0cl90IGZyZWVFbmQgPSBmcmVlU3RhcnQgKyBm
cmVlU2l6ZTsKICAgICAKLSAgICB1aW50cHRyX3QgZmlyc3RDb21wbGV0ZWx5RnJlZVBhZ2UgPSAo
ZnJlZVN0YXJ0ICsgbV9hbGxvY2F0b3ItPm1fcGFnZVNpemUgLSAxKSAmIH4obV9hbGxvY2F0b3It
Pm1fcGFnZVNpemUgLSAxKTsKKyAgICB1aW50cHRyX3QgZmlyc3RDb21wbGV0ZWx5RnJlZVBhZ2Ug
PSAoZnJlZVN0YXJ0ICsgYWxsb2NhdG9yLm1fcGFnZVNpemUgLSAxKSAmIH4oYWxsb2NhdG9yLm1f
cGFnZVNpemUgLSAxKTsKICAgICBpZiAoZmlyc3RDb21wbGV0ZWx5RnJlZVBhZ2UgPCBmcmVlRW5k
KQotICAgICAgICBtX2FsbG9jYXRvci0+ZGVjcmVtZW50UGFnZU9jY3VwYW5jeShyZWludGVycHJl
dF9jYXN0PHZvaWQqPihmaXJzdENvbXBsZXRlbHlGcmVlUGFnZSksIGZyZWVTaXplIC0gKGZpcnN0
Q29tcGxldGVseUZyZWVQYWdlIC0gZnJlZVN0YXJ0KSk7CisgICAgICAgIGFsbG9jYXRvci5kZWNy
ZW1lbnRQYWdlT2NjdXBhbmN5KHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KGZpcnN0Q29tcGxldGVs
eUZyZWVQYWdlKSwgZnJlZVNpemUgLSAoZmlyc3RDb21wbGV0ZWx5RnJlZVBhZ2UgLSBmcmVlU3Rh
cnQpKTsKIAotICAgIG1fYWxsb2NhdG9yLT5hZGRGcmVlU3BhY2VGcm9tUmVsZWFzZWRIYW5kbGUo
TWV0YUFsbG9jYXRvcjo6RnJlZVNwYWNlUHRyKGZyZWVTdGFydCksIGZyZWVTaXplKTsKKyAgICBh
bGxvY2F0b3IuYWRkRnJlZVNwYWNlRnJvbVJlbGVhc2VkSGFuZGxlKE1ldGFBbGxvY2F0b3I6OkZy
ZWVTcGFjZVB0cihmcmVlU3RhcnQpLCBmcmVlU2l6ZSk7CiAKICAgICBtX2VuZCA9IG1fc3RhcnQg
KyBuZXdTaXplSW5CeXRlczsKIH0KQEAgLTEyNywxMyArMTI1LDEzIEBAIHZvaWQgTWV0YUFsbG9j
YXRvckhhbmRsZTo6ZHVtcChQcmludFN0cmUKICAgICBvdXQucHJpbnQoUmF3UG9pbnRlcihzdGFy
dCgpLnVudGFnZ2VkUHRyKCkpLCAiLi4uIiwgUmF3UG9pbnRlcihlbmQoKS51bnRhZ2dlZFB0cigp
KSk7CiB9CiAKLU1ldGFBbGxvY2F0b3I6Ok1ldGFBbGxvY2F0b3Ioc2l6ZV90IGFsbG9jYXRpb25H
cmFudWxlLCBzaXplX3QgcGFnZVNpemUpCitNZXRhQWxsb2NhdG9yOjpNZXRhQWxsb2NhdG9yKExv
Y2smIGxvY2ssIHNpemVfdCBhbGxvY2F0aW9uR3JhbnVsZSwgc2l6ZV90IHBhZ2VTaXplKQogICAg
IDogbV9hbGxvY2F0aW9uR3JhbnVsZShhbGxvY2F0aW9uR3JhbnVsZSkKICAgICAsIG1fcGFnZVNp
emUocGFnZVNpemUpCiAgICAgLCBtX2J5dGVzQWxsb2NhdGVkKDApCiAgICAgLCBtX2J5dGVzUmVz
ZXJ2ZWQoMCkKICAgICAsIG1fYnl0ZXNDb21taXR0ZWQoMCkKLSAgICAsIG1fdHJhY2tlcigwKQor
ICAgICwgbV9sb2NrKGxvY2spCiAjaWZuZGVmIE5ERUJVRwogICAgICwgbV9tYWxsb2NCYWxhbmNl
KDApCiAjZW5kaWYKQEAgLTE1NywxMCArMTU1LDggQEAgTWV0YUFsbG9jYXRvcjo6TWV0YUFsbG9j
YXRvcihzaXplX3QgYWxsbwogICAgIEFTU0VSVChzdGF0aWNfY2FzdDxzaXplX3Q+KDEpIDw8IG1f
bG9nQWxsb2NhdGlvbkdyYW51bGUgPT0gbV9hbGxvY2F0aW9uR3JhbnVsZSk7CiB9CiAKLVJlZlB0
cjxNZXRhQWxsb2NhdG9ySGFuZGxlPiBNZXRhQWxsb2NhdG9yOjphbGxvY2F0ZShzaXplX3Qgc2l6
ZUluQnl0ZXMsIHZvaWQqIG93bmVyVUlEKQorUmVmUHRyPE1ldGFBbGxvY2F0b3JIYW5kbGU+IE1l
dGFBbGxvY2F0b3I6OmFsbG9jYXRlKGNvbnN0IExvY2tIb2xkZXImLCBzaXplX3Qgc2l6ZUluQnl0
ZXMpCiB7Ci0gICAgTG9ja0hvbGRlciBsb2NrZXIoJm1fbG9jayk7Ci0KICAgICBpZiAoIXNpemVJ
bkJ5dGVzKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICAKQEAgLTE5NSwxNyArMTkxLDE2
IEBAIFJlZlB0cjxNZXRhQWxsb2NhdG9ySGFuZGxlPiBNZXRhQWxsb2NhdG8KICAgICBtX251bUFs
bG9jYXRpb25zKys7CiAjZW5kaWYKIAotICAgIGF1dG8gaGFuZGxlID0gYWRvcHRSZWYoKm5ldyBN
ZXRhQWxsb2NhdG9ySGFuZGxlKHRoaXMsIHN0YXJ0LnVudGFnZ2VkUHRyKCksIHNpemVJbkJ5dGVz
LCBvd25lclVJRCkpOworICAgIGF1dG8gaGFuZGxlID0gYWRvcHRSZWYoKm5ldyBNZXRhQWxsb2Nh
dG9ySGFuZGxlKCp0aGlzLCBzdGFydC51bnRhZ2dlZFB0cigpLCBzaXplSW5CeXRlcykpOwogCiAg
ICAgaWYgKFVOTElLRUxZKCEhbV90cmFja2VyKSkKLSAgICAgICAgbV90cmFja2VyLT5ub3RpZnko
aGFuZGxlLnB0cigpKTsKKyAgICAgICAgbV90cmFja2VyLT5ub3RpZnkoKmhhbmRsZS5wdHIoKSk7
CiAKICAgICByZXR1cm4gaGFuZGxlOwogfQogCi1NZXRhQWxsb2NhdG9yOjpTdGF0aXN0aWNzIE1l
dGFBbGxvY2F0b3I6OmN1cnJlbnRTdGF0aXN0aWNzKCkKK01ldGFBbGxvY2F0b3I6OlN0YXRpc3Rp
Y3MgTWV0YUFsbG9jYXRvcjo6Y3VycmVudFN0YXRpc3RpY3MoY29uc3QgTG9ja0hvbGRlciYpCiB7
Ci0gICAgTG9ja0hvbGRlciBsb2NrZXIoJm1fbG9jayk7CiAgICAgU3RhdGlzdGljcyByZXN1bHQ7
CiAgICAgcmVzdWx0LmJ5dGVzQWxsb2NhdGVkID0gbV9ieXRlc0FsbG9jYXRlZDsKICAgICByZXN1
bHQuYnl0ZXNSZXNlcnZlZCA9IG1fYnl0ZXNSZXNlcnZlZDsKSW5kZXg6IFNvdXJjZS9XVEYvd3Rm
L01ldGFBbGxvY2F0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9NZXRhQWxsb2Nh
dG9yLmgJKHJldmlzaW9uIDI1ODM1MCkKKysrIFNvdXJjZS9XVEYvd3RmL01ldGFBbGxvY2F0b3Iu
aAkod29ya2luZyBjb3B5KQpAQCAtNDQsMTUgKzQ0LDE1IEBAIG5hbWVzcGFjZSBXVEYgewogY2xh
c3MgTWV0YUFsbG9jYXRvclRyYWNrZXIgewogICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwog
cHVibGljOgotICAgIHZvaWQgbm90aWZ5KE1ldGFBbGxvY2F0b3JIYW5kbGUqKTsKLSAgICB2b2lk
IHJlbGVhc2UoTWV0YUFsbG9jYXRvckhhbmRsZSopOworICAgIHZvaWQgbm90aWZ5KE1ldGFBbGxv
Y2F0b3JIYW5kbGUmKTsKKyAgICB2b2lkIHJlbGVhc2UoTWV0YUFsbG9jYXRvckhhbmRsZSYpOwog
CiAgICAgTWV0YUFsbG9jYXRvckhhbmRsZSogZmluZCh2b2lkKiBhZGRyZXNzKQogICAgIHsKICAg
ICAgICAgTWV0YUFsbG9jYXRvckhhbmRsZSogaGFuZGxlID0gbV9hbGxvY2F0aW9ucy5maW5kR3Jl
YXRlc3RMZXNzVGhhbk9yRXF1YWwoYWRkcmVzcyk7Ci0gICAgICAgIGlmIChoYW5kbGUgJiYgYWRk
cmVzcyA8IGhhbmRsZS0+ZW5kKCkudW50YWdnZWRQdHIoKSkKKyAgICAgICAgaWYgKGhhbmRsZSAm
JiBoYW5kbGUtPnN0YXJ0KCkudW50YWdnZWRQdHIoKSA8PSBhZGRyZXNzICYmIGFkZHJlc3MgPCBo
YW5kbGUtPmVuZCgpLnVudGFnZ2VkUHRyKCkpCiAgICAgICAgICAgICByZXR1cm4gaGFuZGxlOwot
ICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgfQogCiAgICAg
UmVkQmxhY2tUcmVlPE1ldGFBbGxvY2F0b3JIYW5kbGUsIHZvaWQqPiBtX2FsbG9jYXRpb25zOwpA
QCAtNjQsMTcgKzY0LDIyIEBAIGNsYXNzIE1ldGFBbGxvY2F0b3IgewogcHVibGljOgogICAgIHVz
aW5nIEZyZWVTcGFjZVB0ciA9IE1ldGFBbGxvY2F0b3JQdHI8RnJlZVNwYWNlUHRyVGFnPjsKIAot
ICAgIFdURl9FWFBPUlRfUFJJVkFURSBNZXRhQWxsb2NhdG9yKHNpemVfdCBhbGxvY2F0aW9uR3Jh
bnVsZSwgc2l6ZV90IHBhZ2VTaXplID0gV1RGOjpwYWdlU2l6ZSgpKTsKKyAgICBXVEZfRVhQT1JU
X1BSSVZBVEUgTWV0YUFsbG9jYXRvcihMb2NrJiwgc2l6ZV90IGFsbG9jYXRpb25HcmFudWxlLCBz
aXplX3QgcGFnZVNpemUgPSBXVEY6OnBhZ2VTaXplKCkpOwogICAgIAogICAgIFdURl9FWFBPUlRf
UFJJVkFURSB2aXJ0dWFsIH5NZXRhQWxsb2NhdG9yKCk7CiAgICAgCi0gICAgV1RGX0VYUE9SVF9Q
UklWQVRFIFJlZlB0cjxNZXRhQWxsb2NhdG9ySGFuZGxlPiBhbGxvY2F0ZShzaXplX3Qgc2l6ZUlu
Qnl0ZXMsIHZvaWQqIG93bmVyVUlEKTsKKyAgICBBTFdBWVNfSU5MSU5FIFJlZlB0cjxNZXRhQWxs
b2NhdG9ySGFuZGxlPiBhbGxvY2F0ZShzaXplX3Qgc2l6ZUluQnl0ZXMpCisgICAgeworICAgICAg
ICBhdXRvIGxvY2tlciA9IGhvbGRMb2NrKG1fbG9jayk7CisgICAgICAgIHJldHVybiBhbGxvY2F0
ZShsb2NrZXIsIHNpemVJbkJ5dGVzKTsKKyAgICB9CisgICAgV1RGX0VYUE9SVF9QUklWQVRFIFJl
ZlB0cjxNZXRhQWxsb2NhdG9ySGFuZGxlPiBhbGxvY2F0ZShjb25zdCBMb2NrSG9sZGVyJiwgc2l6
ZV90IHNpemVJbkJ5dGVzKTsKIAogICAgIHZvaWQgdHJhY2tBbGxvY2F0aW9ucyhNZXRhQWxsb2Nh
dG9yVHJhY2tlciogdHJhY2tlcikKICAgICB7CiAgICAgICAgIG1fdHJhY2tlciA9IHRyYWNrZXI7
CiAgICAgfQotICAgIAorCiAgICAgLy8gTm9uLWF0b21pYyBtZXRob2RzIGZvciBnZXR0aW5nIGFs
bG9jYXRvciBzdGF0aXN0aWNzLgogICAgIHNpemVfdCBieXRlc0FsbG9jYXRlZCgpIHsgcmV0dXJu
IG1fYnl0ZXNBbGxvY2F0ZWQ7IH0KICAgICBzaXplX3QgYnl0ZXNSZXNlcnZlZCgpIHsgcmV0dXJu
IG1fYnl0ZXNSZXNlcnZlZDsgfQpAQCAtODcsNyArOTIsMTIgQEAgcHVibGljOgogICAgICAgICBz
aXplX3QgYnl0ZXNSZXNlcnZlZDsKICAgICAgICAgc2l6ZV90IGJ5dGVzQ29tbWl0dGVkOwogICAg
IH07Ci0gICAgV1RGX0VYUE9SVF9QUklWQVRFIFN0YXRpc3RpY3MgY3VycmVudFN0YXRpc3RpY3Mo
KTsKKyAgICBTdGF0aXN0aWNzIGN1cnJlbnRTdGF0aXN0aWNzKCkKKyAgICB7CisgICAgICAgIGF1
dG8gbG9ja2VyID0gaG9sZExvY2sobV9sb2NrKTsKKyAgICAgICAgcmV0dXJuIGN1cnJlbnRTdGF0
aXN0aWNzKGxvY2tlcik7CisgICAgfQorICAgIFdURl9FWFBPUlRfUFJJVkFURSBTdGF0aXN0aWNz
IGN1cnJlbnRTdGF0aXN0aWNzKGNvbnN0IExvY2tIb2xkZXImKTsKIAogICAgIC8vIEFkZCBtb3Jl
IGZyZWUgc3BhY2UgdG8gdGhlIGFsbG9jYXRvci4gQ2FsbCB0aGlzIGRpcmVjdGx5IGZyb20KICAg
ICAvLyB0aGUgY29uc3RydWN0b3IgaWYgeW91IHdpc2ggdG8gb3BlcmF0ZSB0aGUgYWxsb2NhdG9y
IHdpdGhpbiBhCkBAIC05OCw3ICsxMDgsNiBAQCBwdWJsaWM6CiAgICAgLy8gYnVpbGRzLgogICAg
IFdURl9FWFBPUlRfUFJJVkFURSBzaXplX3QgZGVidWdGcmVlU3BhY2VTaXplKCk7CiAKLSAgICBM
b2NrJiBnZXRMb2NrKCkgeyByZXR1cm4gbV9sb2NrOyB9CiAgICAgV1RGX0VYUE9SVF9QUklWQVRF
IGJvb2wgaXNJbkFsbG9jYXRlZE1lbW9yeShjb25zdCBBYnN0cmFjdExvY2tlciYsIHZvaWQqIGFk
ZHJlc3MpOwogICAgIAogI2lmIEVOQUJMRShNRVRBX0FMTE9DQVRPUl9QUk9GSUxFKQpAQCAtMTIz
LDYgKzEzMiw4IEBAIHByb3RlY3RlZDoKICAgICAvLyBkZXN0cnVjdGlvbiwgaW4gcGFydCBiZWNh
dXNlIGEgTWV0YUFsbG9jYXRvciBjYW5ub3QgZGllIHNvIGxvbmcKICAgICAvLyBhcyB0aGVyZSBh
cmUgSGFuZGxlcyB0aGF0IHJlZmVyIHRvIGl0LgogCisgICAgLy8gUmVsZWFzZSBhIE1ldGFBbGxv
Y2F0b3JIYW5kbGUuCisgICAgdmlydHVhbCB2b2lkIHJlbGVhc2UoY29uc3QgTG9ja0hvbGRlciYs
IE1ldGFBbGxvY2F0b3JIYW5kbGUmKTsKIHByaXZhdGU6CiAgICAgCiAgICAgZnJpZW5kIGNsYXNz
IE1ldGFBbGxvY2F0b3JIYW5kbGU7CkBAIC0xNTAsOSArMTYxLDYgQEAgcHJpdmF0ZToKICAgICAg
ICAgRnJlZVNwYWNlUHRyIG1fZW5kOwogICAgIH07CiAgICAgdHlwZWRlZiBSZWRCbGFja1RyZWU8
RnJlZVNwYWNlTm9kZSwgc2l6ZV90PiBUcmVlOwotCi0gICAgLy8gUmVsZWFzZSBhIE1ldGFBbGxv
Y2F0b3JIYW5kbGUuCi0gICAgdm9pZCByZWxlYXNlKE1ldGFBbGxvY2F0b3JIYW5kbGUqKTsKICAg
ICAKICAgICAvLyBSZW1vdmUgZnJlZSBzcGFjZSBmcm9tIHRoZSBhbGxvY2F0b3IuIFRoaXMgaXMg
ZWZmZWN0aXZlbHkKICAgICAvLyB0aGUgYWxsb2NhdGUoKSBmdW5jdGlvbiwgZXhjZXB0IHRoYXQg
aXQgZG9lcyBub3QgbWFyayB0aGUKQEAgLTE5Myw5ICsyMDEsOSBAQCBwcml2YXRlOgogICAgIHNp
emVfdCBtX2J5dGVzUmVzZXJ2ZWQ7CiAgICAgc2l6ZV90IG1fYnl0ZXNDb21taXR0ZWQ7CiAgICAg
Ci0gICAgTG9jayBtX2xvY2s7CisgICAgTG9jayYgbV9sb2NrOwogCi0gICAgTWV0YUFsbG9jYXRv
clRyYWNrZXIqIG1fdHJhY2tlcjsKKyAgICBNZXRhQWxsb2NhdG9yVHJhY2tlciogbV90cmFja2Vy
IHsgbnVsbHB0ciB9OwogCiAjaWZuZGVmIE5ERUJVRwogICAgIHNpemVfdCBtX21hbGxvY0JhbGFu
Y2U7CkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9NZXRhQWxsb2NhdG9ySGFuZGxlLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dURi93dGYvTWV0YUFsbG9jYXRvckhhbmRsZS5oCShyZXZpc2lvbiAyNTgz
NTApCisrKyBTb3VyY2UvV1RGL3d0Zi9NZXRhQWxsb2NhdG9ySGFuZGxlLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTQyLDcgKzQyLDcgQEAgREVDTEFSRV9BTExPQ0FUT1JfV0lUSF9IRUFQX0lERU5USUZJ
RVIoTQogY2xhc3MgTWV0YUFsbG9jYXRvckhhbmRsZSA6IHB1YmxpYyBUaHJlYWRTYWZlUmVmQ291
bnRlZDxNZXRhQWxsb2NhdG9ySGFuZGxlPiwgcHVibGljIFJlZEJsYWNrVHJlZTxNZXRhQWxsb2Nh
dG9ySGFuZGxlLCB2b2lkKj46Ok5vZGUgewogICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEX1dJ
VEhfSEVBUF9JREVOVElGSUVSKE1ldGFBbGxvY2F0b3JIYW5kbGUpOwogcHJpdmF0ZToKLSAgICBN
ZXRhQWxsb2NhdG9ySGFuZGxlKE1ldGFBbGxvY2F0b3IqLCB2b2lkKiBzdGFydCwgc2l6ZV90IHNp
emVJbkJ5dGVzLCB2b2lkKiBvd25lclVJRCk7CisgICAgTWV0YUFsbG9jYXRvckhhbmRsZShNZXRh
QWxsb2NhdG9yJiwgdm9pZCogc3RhcnQsIHNpemVfdCBzaXplSW5CeXRlcyk7CiAKIHB1YmxpYzoK
ICAgICB1c2luZyBNZW1vcnlQdHIgPSBNZXRhQWxsb2NhdG9yUHRyPEhhbmRsZU1lbW9yeVB0clRh
Zz47CkBAIC04NiwyMiArODYsMTEgQEAgcHVibGljOgogICAgICAgICAKICAgICBXVEZfRVhQT1JU
X1BSSVZBVEUgdm9pZCBzaHJpbmsoc2l6ZV90IG5ld1NpemVJbkJ5dGVzKTsKICAgICAKLSAgICBi
b29sIGlzTWFuYWdlZCgpCisgICAgTWV0YUFsbG9jYXRvciYgYWxsb2NhdG9yKCkKICAgICB7Ci0g
ICAgICAgIHJldHVybiAhIW1fYWxsb2NhdG9yOwotICAgIH0KLSAgICAgICAgCi0gICAgTWV0YUFs
bG9jYXRvciogYWxsb2NhdG9yKCkKLSAgICB7Ci0gICAgICAgIEFTU0VSVChtX2FsbG9jYXRvcik7
CiAgICAgICAgIHJldHVybiBtX2FsbG9jYXRvcjsKICAgICB9CiAKLSAgICB2b2lkKiBvd25lclVJ
RCgpCi0gICAgewotICAgICAgICByZXR1cm4gbV9vd25lclVJRDsKLSAgICB9Ci0KICAgICB2b2lk
KiBrZXkoKQogICAgIHsKICAgICAgICAgcmV0dXJuIG1fc3RhcnQudW50YWdnZWRQdHIoKTsKQEAg
LTExMiwxMCArMTAxLDkgQEAgcHVibGljOgogcHJpdmF0ZToKICAgICBmcmllbmQgY2xhc3MgTWV0
YUFsbG9jYXRvcjsKICAgICAKLSAgICBNZXRhQWxsb2NhdG9yKiBtX2FsbG9jYXRvcjsKKyAgICBN
ZXRhQWxsb2NhdG9yJiBtX2FsbG9jYXRvcjsKICAgICBNZW1vcnlQdHIgbV9zdGFydDsKICAgICBN
ZW1vcnlQdHIgbV9lbmQ7Ci0gICAgdm9pZCogbV9vd25lclVJRDsKIH07CiAKIH0KSW5kZXg6IFNv
dXJjZS9XVEYvd3RmL1BsYXRmb3JtVXNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYv
UGxhdGZvcm1Vc2UuaAkocmV2aXNpb24gMjU4MzUwKQorKysgU291cmNlL1dURi93dGYvUGxhdGZv
cm1Vc2UuaAkod29ya2luZyBjb3B5KQpAQCAtMzI0LDMgKzMyNCw3IEBACiAjaWYgUExBVEZPUk0o
SU9TKSAmJiBfX0lQSE9ORV9PU19WRVJTSU9OX01JTl9SRVFVSVJFRCA+PSAxNDAwMDAKICNkZWZp
bmUgVVNFX1VUVFlQRV9TV0laWkxFUiAxCiAjZW5kaWYKKworI2lmIENQVShBUk02NCkgJiYgQ1BV
KEFERFJFU1M2NCkKKyNkZWZpbmUgVVNFX0pVTVBfSVNMQU5EUyAxCisjZW5kaWYKSW5kZXg6IFNv
dXJjZS9XVEYvd3RmL1JlZEJsYWNrVHJlZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3Rm
L1JlZEJsYWNrVHJlZS5oCShyZXZpc2lvbiAyNTgzNTApCisrKyBTb3VyY2UvV1RGL3d0Zi9SZWRC
bGFja1RyZWUuaAkod29ya2luZyBjb3B5KQpAQCAtMzAsNiArMzAsNyBAQAogCiAjaW5jbHVkZSA8
d3RmL0Fzc2VydGlvbnMuaD4KICNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4KKyNpbmNsdWRl
IDx3dGYvVmVjdG9yLmg+CiAKIG5hbWVzcGFjZSBXVEYgewogCkBAIC0zMjQsNiArMzI1LDI2IEBA
IHB1YmxpYzoKICAgICAgICAgfQogICAgICAgICByZXR1cm4gYmVzdDsKICAgICB9CisKKyAgICB0
ZW1wbGF0ZSA8dHlwZW5hbWUgRnVuY3Rpb24+CisgICAgdm9pZCBpdGVyYXRlKEZ1bmN0aW9uIGZ1
bmN0aW9uKQorICAgIHsKKyAgICAgICAgaWYgKCFtX3Jvb3QpCisgICAgICAgICAgICByZXR1cm47
CisKKyAgICAgICAgVmVjdG9yPE5vZGVUeXBlKiwgMTY+IHRvSXRlcmF0ZTsKKyAgICAgICAgdG9J
dGVyYXRlLmFwcGVuZChtX3Jvb3QpOworICAgICAgICB3aGlsZSAodG9JdGVyYXRlLnNpemUoKSkg
eworICAgICAgICAgICAgTm9kZVR5cGUmIGN1cnJlbnQgPSAqdG9JdGVyYXRlLnRha2VMYXN0KCk7
CisgICAgICAgICAgICBib29sIGl0ZXJhdGVMZWZ0ID0gZmFsc2U7CisgICAgICAgICAgICBib29s
IGl0ZXJhdGVSaWdodCA9IGZhbHNlOworICAgICAgICAgICAgZnVuY3Rpb24oY3VycmVudCwgaXRl
cmF0ZUxlZnQsIGl0ZXJhdGVSaWdodCk7CisgICAgICAgICAgICBpZiAoaXRlcmF0ZUxlZnQgJiYg
Y3VycmVudC5sZWZ0KCkpCisgICAgICAgICAgICAgICAgdG9JdGVyYXRlLmFwcGVuZChjdXJyZW50
LmxlZnQoKSk7CisgICAgICAgICAgICBpZiAoaXRlcmF0ZVJpZ2h0ICYmIGN1cnJlbnQucmlnaHQo
KSkKKyAgICAgICAgICAgICAgICB0b0l0ZXJhdGUuYXBwZW5kKGN1cnJlbnQucmlnaHQoKSk7Cisg
ICAgICAgIH0KKyAgICB9CiAgICAgCiAgICAgTm9kZVR5cGUqIGZpcnN0KCkgY29uc3QKICAgICB7
CkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9TdGRMaWJFeHRyYXMuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV1RGL3d0Zi9TdGRMaWJFeHRyYXMuaAkocmV2aXNpb24gMjU4MzUwKQorKysgU291cmNlL1dU
Ri93dGYvU3RkTGliRXh0cmFzLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ4OSw2ICs0ODksMTkgQEAg
QUxXQVlTX0lOTElORSBkZWNsdHlwZShhdXRvKSBtYWtlVW5pcXVlVwogICAgIHJldHVybiBzdGQ6
Om1ha2VfdW5pcXVlPFQ+KHN0ZDo6Zm9yd2FyZDxBcmdzPihhcmdzKS4uLik7CiB9CiAKK3RlbXBs
YXRlIDx0eXBlbmFtZSBSZXN1bHRUeXBlLCBzaXplX3QuLi4gSXMsIHR5cGVuYW1lIC4uLkFyZ3M+
Citjb25zdGV4cHIgYXV0byBjb25zdHJ1Y3RGaXhlZFNpemVBcnJheVdpdGhBcmd1bWVudHNJbXBs
KHN0ZDo6aW5kZXhfc2VxdWVuY2U8SXMuLi4+LCBBcmdzJiYuLi4gYXJncykgLT4gc3RkOjphcnJh
eTxSZXN1bHRUeXBlLCBzaXplb2YuLi4oSXMpPgoreworICAgIHJldHVybiB7ICgodm9pZClJcywg
UmVzdWx0VHlwZSB7IHN0ZDo6Zm9yd2FyZDxBcmdzPihhcmdzKS4uLiB9KS4uLiB9OworfQorCisv
LyBDb25zdHJ1Y3QgYW4gc3RkOjphcnJheSB3aXRoIE4gZWxlbWVudHMgb2YgUmVzdWx0VHlwZSwg
cGFzc2luZyBBcmdzIHRvIGVhY2ggb2YgdGhlIE4gY29uc3RydWN0b3JzLgordGVtcGxhdGU8dHlw
ZW5hbWUgUmVzdWx0VHlwZSwgc2l6ZV90IE4sIHR5cGVuYW1lIC4uLkFyZ3M+Citjb25zdGV4cHIg
YXV0byBjb25zdHJ1Y3RGaXhlZFNpemVBcnJheVdpdGhBcmd1bWVudHMoQXJncyYmLi4uIGFyZ3Mp
IC0+IGRlY2x0eXBlKGF1dG8pCit7CisgICAgYXV0byB0dXBsZSA9IHN0ZDo6bWFrZV9pbmRleF9z
ZXF1ZW5jZTxOPigpOworICAgIHJldHVybiBjb25zdHJ1Y3RGaXhlZFNpemVBcnJheVdpdGhBcmd1
bWVudHNJbXBsPFJlc3VsdFR5cGU+KHR1cGxlLCBzdGQ6OmZvcndhcmQ8QXJncz4oYXJncykuLi4p
OworfQogCiB9IC8vIG5hbWVzcGFjZSBXVEYKIApAQCAtNTE0LDMgKzUyNyw0IEBAIHVzaW5nIFdU
Rjo6c2FmZUNhc3Q7CiB1c2luZyBXVEY6OnRyeUJpbmFyeVNlYXJjaDsKIHVzaW5nIFdURjo6bWFr
ZVVuaXF1ZTsKIHVzaW5nIFdURjo6bWFrZVVuaXF1ZVdpdGhvdXRGYXN0TWFsbG9jQ2hlY2s7Cit1
c2luZyBXVEY6OmNvbnN0cnVjdEZpeGVkU2l6ZUFycmF5V2l0aEFyZ3VtZW50czsKSW5kZXg6IFRv
b2xzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9DaGFuZ2VMb2cJKHJldmlzaW9uIDI1
ODM1MCkKKysrIFRvb2xzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEyIEBA
CisyMDIwLTAzLTEyICBTYWFtIEJhcmF0aSAgPHNiYXJhdGlAYXBwbGUuY29tPgorCisgICAgICAg
IEltcGxlbWVudCAxR0Igb2YgZXhlY3V0YWJsZSBtZW1vcnkgb24gYXJtNjQKKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIwODQ5MAorCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogU2NyaXB0cy9ydW4tanNjLXN0
cmVzcy10ZXN0czoKKwogMjAyMC0wMy0xMiAgV2Vuc29uIEhzaWVoICA8d2Vuc29uX2hzaWVoQGFw
cGxlLmNvbT4KIAogICAgICAgICBydW4td2Via2l0LXRlc3RzIC0tdXNlLWdwdS1wcm9jZXNzIHNo
b3VsZCBlbmFibGUgR1BVIFByb2Nlc3MgZm9yIGNhbnZhcwpJbmRleDogVG9vbHMvU2NyaXB0cy9y
dW4tanNjLXN0cmVzcy10ZXN0cwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9TY3JpcHRzL3J1bi1qc2Mt
c3RyZXNzLXRlc3RzCShyZXZpc2lvbiAyNTgzNTApCisrKyBUb29scy9TY3JpcHRzL3J1bi1qc2Mt
c3RyZXNzLXRlc3RzCSh3b3JraW5nIGNvcHkpCkBAIC01MCw2ICs1MCw3IEBAIFNDUklQVFNfUEFU
SCA9IFRISVNfU0NSSVBUX1BBVEguZGlybmFtZQogV0VCS0lUX1BBVEggPSBTQ1JJUFRTX1BBVEgu
ZGlybmFtZS5kaXJuYW1lCiBMQVlPVVRURVNUU19QQVRIID0gV0VCS0lUX1BBVEggKyAiTGF5b3V0
VGVzdHMiCiBXQVNNVEVTVFNfUEFUSCA9IFdFQktJVF9QQVRIICsgIkpTVGVzdHMvd2FzbSIKK0pF
VFNUUkVBTTJfUEFUSCA9IFdFQktJVF9QQVRIICsgIlBlcmZvcm1hbmNlVGVzdHMvSmV0U3RyZWFt
MiIKIENIQUtSQVRFU1RTX1BBVEggPSBXRUJLSVRfUEFUSCArICJKU1Rlc3RzL0NoYWtyYUNvcmUv
dGVzdCIKIHJhaXNlIHVubGVzcyBTQ1JJUFRTX1BBVEguYmFzZW5hbWUudG9fcyA9PSAiU2NyaXB0
cyIKIHJhaXNlIHVubGVzcyBTQ1JJUFRTX1BBVEguZGlybmFtZS5iYXNlbmFtZS50b19zID09ICJU
b29scyIKQEAgLTY2OSw3ICs2NzAsNyBAQCBkZWYgcnVuTm9DSklUVmFsaWRhdGUoKm9wdGlvbmFs
VGVzdFNwZWNpCiBlbmQKIAogZGVmIHJ1bk5vQ0pJVFZhbGlkYXRlUGhhc2VzKCpvcHRpb25hbFRl
c3RTcGVjaWZpY09wdGlvbnMpCi0gICAgcnVuKCJuby1jaml0LXZhbGlkYXRlLXBoYXNlcyIsICIt
LXZhbGlkYXRlQnl0ZWNvZGU9dHJ1ZSIsICItLXZhbGlkYXRlR3JhcGhBdEVhY2hQaGFzZT10cnVl
IiwgIi0tdXNlU291cmNlUHJvdmlkZXJDYWNoZT1mYWxzZSIsICooTk9fQ0pJVF9PUFRJT05TICsg
b3B0aW9uYWxUZXN0U3BlY2lmaWNPcHRpb25zKSkKKyAgICBydW4oIm5vLWNqaXQtdmFsaWRhdGUt
cGhhc2VzIiwgIi0tdmFsaWRhdGVCeXRlY29kZT10cnVlIiwgIi0tdmFsaWRhdGVHcmFwaEF0RWFj
aFBoYXNlPXRydWUiLCAiLS11c2VTb3VyY2VQcm92aWRlckNhY2hlPWZhbHNlIiwgIi0tdXNlUmFu
ZG9taXppbmdFeGVjdXRhYmxlSXNsYW5kQWxsb2NhdGlvbj10cnVlIiwgKihOT19DSklUX09QVElP
TlMgKyBvcHRpb25hbFRlc3RTcGVjaWZpY09wdGlvbnMpKQogZW5kCiAKIGRlZiBydW5Ob0NKSVRD
b2xsZWN0Q29udGludW91c2x5KCpvcHRpb25hbFRlc3RTcGVjaWZpY09wdGlvbnMpCkBAIC03MDYs
NyArNzA3LDcgQEAgZGVmIHJ1bkZUTE5vQ0pJVCgqb3B0aW9uYWxUZXN0U3BlY2lmaWNPcAogZW5k
CiAKIGRlZiBydW5GVExOb0NKSVRCM08wKCpvcHRpb25hbFRlc3RTcGVjaWZpY09wdGlvbnMpCi0g
ICAgcnVuKCJmdGwtbm8tY2ppdC1iM28wIiwgIi0tdXNlQXJyYXlBbGxvY2F0aW9uUHJvZmlsaW5n
PWZhbHNlIiwgIi0tZm9yY2VQb2x5UHJvdG89dHJ1ZSIsICooRlRMX09QVElPTlMgKyBOT19DSklU
X09QVElPTlMgKyBCM08wX09QVElPTlMgKyBGT1JDRV9MTElOVF9FWElUX09QVElPTlMgKyBvcHRp
b25hbFRlc3RTcGVjaWZpY09wdGlvbnMpKQorICAgIHJ1bigiZnRsLW5vLWNqaXQtYjNvMCIsICIt
LXVzZUFycmF5QWxsb2NhdGlvblByb2ZpbGluZz1mYWxzZSIsICItLWZvcmNlUG9seVByb3RvPXRy
dWUiLCAiLS11c2VSYW5kb21pemluZ0V4ZWN1dGFibGVJc2xhbmRBbGxvY2F0aW9uPXRydWUiLCAq
KEZUTF9PUFRJT05TICsgTk9fQ0pJVF9PUFRJT05TICsgQjNPMF9PUFRJT05TICsgRk9SQ0VfTExJ
TlRfRVhJVF9PUFRJT05TICsgb3B0aW9uYWxUZXN0U3BlY2lmaWNPcHRpb25zKSkKIGVuZAogCiBk
ZWYgcnVuRlRMTm9DSklUVmFsaWRhdGUoKm9wdGlvbmFsVGVzdFNwZWNpZmljT3B0aW9ucykKQEAg
LTczNCw3ICs3MzUsNyBAQCBkZWYgcnVuREZHRWFnZXJOb0NKSVRWYWxpZGF0ZSgqb3B0aW9uYWxU
CiBlbmQKIAogZGVmIHJ1bkZUTEVhZ2VyKCpvcHRpb25hbFRlc3RTcGVjaWZpY09wdGlvbnMpCi0g
ICAgcnVuKCJmdGwtZWFnZXIiLCAiLS1haXJGb3JjZUJyaWdnc0FsbG9jYXRvcj10cnVlIiwgIi0t
Zm9yY2VQb2x5UHJvdG89dHJ1ZSIsICooRlRMX09QVElPTlMgKyBFQUdFUl9PUFRJT05TICsgQ09M
TEVDVF9DT05USU5VT1VTTFlfT1BUSU9OUyArIG9wdGlvbmFsVGVzdFNwZWNpZmljT3B0aW9ucykp
CisgICAgcnVuKCJmdGwtZWFnZXIiLCAiLS1haXJGb3JjZUJyaWdnc0FsbG9jYXRvcj10cnVlIiwg
Ii0tdXNlUmFuZG9taXppbmdFeGVjdXRhYmxlSXNsYW5kQWxsb2NhdGlvbj10cnVlIiwgIi0tZm9y
Y2VQb2x5UHJvdG89dHJ1ZSIsICooRlRMX09QVElPTlMgKyBFQUdFUl9PUFRJT05TICsgQ09MTEVD
VF9DT05USU5VT1VTTFlfT1BUSU9OUyArIG9wdGlvbmFsVGVzdFNwZWNpZmljT3B0aW9ucykpCiBl
bmQKIAogZGVmIHJ1bkZUTEVhZ2VyV2F0Y2hkb2coKm9wdGlvbmFsVGVzdFNwZWNpZmljT3B0aW9u
cykKQEAgLTc3NSw3ICs3NzYsNyBAQCBkZWYgcnVuTm9DSklUKCpvcHRpb25hbFRlc3RTcGVjaWZp
Y09wdGlvCiBlbmQKIAogZGVmIHJ1bkVhZ2VySmV0dGlzb25Ob0NKSVQoKm9wdGlvbmFsVGVzdFNw
ZWNpZmljT3B0aW9ucykKLSAgICBydW4oImVhZ2VyLWpldHRpc29uLW5vLWNqaXQiLCAiLS1mb3Jj
ZUNvZGVCbG9ja1RvSmV0dGlzb25EdWVUb09sZEFnZT10cnVlIiwgKihOT19DSklUX09QVElPTlMg
KyBvcHRpb25hbFRlc3RTcGVjaWZpY09wdGlvbnMpKQorICAgIHJ1bigiZWFnZXItamV0dGlzb24t
bm8tY2ppdCIsICItLXVzZVJhbmRvbWl6aW5nRXhlY3V0YWJsZUlzbGFuZEFsbG9jYXRpb249dHJ1
ZSIsICItLWZvcmNlQ29kZUJsb2NrVG9KZXR0aXNvbkR1ZVRvT2xkQWdlPXRydWUiLCAqKE5PX0NK
SVRfT1BUSU9OUyArIG9wdGlvbmFsVGVzdFNwZWNpZmljT3B0aW9ucykpCiBlbmQKIAogZGVmIHJ1
blNoYWRvd0NoaWNrZW4oKm9wdGlvbmFsVGVzdFNwZWNpZmljT3B0aW9ucykKQEAgLTEwODMsMTYg
KzEwODQsMzcgQEAgZGVmIHJ1bldlYkFzc2VtYmx5CiAgICAgcnVuKCJkZWZhdWx0LXdhc20iLCAi
LW0iLCAqRlRMX09QVElPTlMpCiAgICAgaWYgJG1vZGUgIT0gInF1aWNrIgogICAgICAgICBydW4o
Indhc20tbm8tY2ppdC15ZXMtdGxzLWNvbnRleHQiLCAiLW0iLCAiLS11c2VGYXN0VExTRm9yV2Fz
bUNvbnRleHQ9dHJ1ZSIsICooRlRMX09QVElPTlMgKyBOT19DSklUX09QVElPTlMpKQotICAgICAg
ICBydW4oIndhc20tZWFnZXIiLCAiLW0iLCAqKEZUTF9PUFRJT05TICsgRUFHRVJfT1BUSU9OUykp
Ci0gICAgICAgIHJ1bigid2FzbS1lYWdlci1qZXR0aXNvbiIsICItbSIsICItLWZvcmNlQ29kZUJs
b2NrVG9KZXR0aXNvbkR1ZVRvT2xkQWdlPXRydWUiLCAqRlRMX09QVElPTlMpCisgICAgICAgIHJ1
bigid2FzbS1lYWdlciIsICItbSIsICItLXVzZVJhbmRvbWl6aW5nRXhlY3V0YWJsZUlzbGFuZEFs
bG9jYXRpb249dHJ1ZSIsICooRlRMX09QVElPTlMgKyBFQUdFUl9PUFRJT05TKSkKKyAgICAgICAg
cnVuKCJ3YXNtLWVhZ2VyLWpldHRpc29uIiwgIi1tIiwgIi0tZm9yY2VDb2RlQmxvY2tUb0pldHRp
c29uRHVlVG9PbGRBZ2U9dHJ1ZSIsICItLXVzZVJhbmRvbWl6aW5nRXhlY3V0YWJsZUlzbGFuZEFs
bG9jYXRpb249dHJ1ZSIsICpGVExfT1BUSU9OUykKICAgICAgICAgcnVuKCJ3YXNtLW5vLXRscy1j
b250ZXh0IiwgIi1tIiwgIi0tdXNlRmFzdFRMU0Zvcldhc21Db250ZXh0PWZhbHNlIiwgKkZUTF9P
UFRJT05TKQogICAgICAgICBydW4oIndhc20tc2xvdy1tZW1vcnkiLCAiLW0iLCAiLS11c2VXZWJB
c3NlbWJseUZhc3RNZW1vcnk9ZmFsc2UiLCAqRlRMX09QVElPTlMpCiAgICAgICAgIHJ1bigid2Fz
bS1iMyIsICItbSIsICItLXVzZVdhc21MTEludD1mYWxzZSIsICItLXdhc21CQlFVc2VzQWlyPWZh
bHNlIiwgKkZUTF9PUFRJT05TKQotICAgICAgICBydW4oIndhc20tYWlyIiwgIi1tIiwgIi0tdXNl
V2FzbUxMSW50PWZhbHNlIiwgKkZUTF9PUFRJT05TKQorICAgICAgICBydW4oIndhc20tYWlyIiwg
Ii1tIiwgIi0tdXNlV2FzbUxMSW50PWZhbHNlIiwgIi0tdXNlUmFuZG9taXppbmdFeGVjdXRhYmxl
SXNsYW5kQWxsb2NhdGlvbj10cnVlIiwgKkZUTF9PUFRJT05TKQogICAgICAgICBydW4oIndhc20t
Y29sbGVjdC1jb250aW51b3VzbHkiLCAiLW0iLCAiLS1jb2xsZWN0Q29udGludW91c2x5PXRydWUi
LCAqRlRMX09QVElPTlMpIGlmIHNob3VsZENvbGxlY3RDb250aW51b3VzbHk/CiAgICAgZW5kCiBl
bmQKIAorZGVmIHJ1bldlYkFzc2VtYmx5SmV0U3RyZWFtMgorICAgIHJldHVybiBpZiAhJGppdFRl
c3RzCisgICAgcmV0dXJuIGlmICEkaXNGVExQbGF0Zm9ybQorCisgICAgcHJlcGFyZUV4dHJhQWJz
b2x1dGVGaWxlcyhKRVRTVFJFQU0yX1BBVEgsIFsiSmV0U3RyZWFtRHJpdmVyLmpzIl0pCisgICAg
cHJlcGFyZUV4dHJhUmVsYXRpdmVGaWxlc1dpdGhCYXNlRGlyZWN0b3J5KERpcltKRVRTVFJFQU0y
X1BBVEggKyAid2FzbSIgKyAiKi5qcyJdLm1hcCB7IHxmfCAid2FzbS8iICsgRmlsZS5iYXNlbmFt
ZShmKSB9LCAkY29sbGVjdGlvbi5kaXJuYW1lLCAkZXh0cmFGaWxlc0Jhc2VEaXIuZGlybmFtZSkK
KyAgICBwcmVwYXJlRXh0cmFSZWxhdGl2ZUZpbGVzV2l0aEJhc2VEaXJlY3RvcnkoRGlyW0pFVFNU
UkVBTTJfUEFUSCArICJ3YXNtIiArICIqLndhc20iXS5tYXAgeyB8ZnwgIndhc20vIiArIEZpbGUu
YmFzZW5hbWUoZikgfSwgJGNvbGxlY3Rpb24uZGlybmFtZSwgJGV4dHJhRmlsZXNCYXNlRGlyLmRp
cm5hbWUpCisKKyAgICBydW4oImRlZmF1bHQtd2FzbSIsICpGVExfT1BUSU9OUykKKyAgICBpZiAk
bW9kZSAhPSAicXVpY2siCisgICAgICAgIHJ1bigid2FzbS1uby1jaml0LXllcy10bHMtY29udGV4
dCIsICItLXVzZUZhc3RUTFNGb3JXYXNtQ29udGV4dD10cnVlIiwgKihGVExfT1BUSU9OUyArIE5P
X0NKSVRfT1BUSU9OUykpCisgICAgICAgIHJ1bigid2FzbS1lYWdlciIsICItLXVzZVJhbmRvbWl6
aW5nRXhlY3V0YWJsZUlzbGFuZEFsbG9jYXRpb249dHJ1ZSIsICooRlRMX09QVElPTlMgKyBFQUdF
Ul9PUFRJT05TKSkKKyAgICAgICAgcnVuKCJ3YXNtLWVhZ2VyLWpldHRpc29uIiwgIi0tZm9yY2VD
b2RlQmxvY2tUb0pldHRpc29uRHVlVG9PbGRBZ2U9dHJ1ZSIsICpGVExfT1BUSU9OUykKKyAgICAg
ICAgcnVuKCJ3YXNtLW5vLXRscy1jb250ZXh0IiwgIi0tdXNlRmFzdFRMU0Zvcldhc21Db250ZXh0
PWZhbHNlIiwgKkZUTF9PUFRJT05TKQorICAgICAgICBydW4oIndhc20tc2xvdy1tZW1vcnkiLCAi
LS11c2VXZWJBc3NlbWJseUZhc3RNZW1vcnk9ZmFsc2UiLCAqRlRMX09QVElPTlMpCisgICAgICAg
IHJ1bigid2FzbS1iMyIsICItLXVzZVdhc21MTEludD1mYWxzZSIsICItLXdhc21CQlFVc2VzQWly
PWZhbHNlIiwgKkZUTF9PUFRJT05TKQorICAgICAgICBydW4oIndhc20tYWlyIiwgIi0tdXNlV2Fz
bUxMSW50PWZhbHNlIiwgIi0tdXNlUmFuZG9taXppbmdFeGVjdXRhYmxlSXNsYW5kQWxsb2NhdGlv
bj10cnVlIiwgKkZUTF9PUFRJT05TKQorICAgICAgICBydW4oIndhc20tY29sbGVjdC1jb250aW51
b3VzbHkiLCAiLS1jb2xsZWN0Q29udGludW91c2x5PXRydWUiLCAqRlRMX09QVElPTlMpIGlmIHNo
b3VsZENvbGxlY3RDb250aW51b3VzbHk/CisgICAgZW5kCitlbmQKKwogZGVmIHJ1bldlYkFzc2Vt
Ymx5U3VpdGUoKm9wdGlvbmFsVGVzdFNwZWNpZmljT3B0aW9ucykKICAgICByZXR1cm4gaWYgISRq
aXRUZXN0cwogICAgIHJldHVybiBpZiAhJGlzRlRMUGxhdGZvcm0KQEAgLTExMDMsMTEgKzExMjUs
MTEgQEAgZGVmIHJ1bldlYkFzc2VtYmx5U3VpdGUoKm9wdGlvbmFsVGVzdFNwZQogICAgIGlmICRt
b2RlICE9ICJxdWljayIKICAgICAgICAgcnVuKCJ3YXNtLW5vLWNqaXQteWVzLXRscy1jb250ZXh0
IiwgIi1tIiwgIi0tdXNlRmFzdFRMU0Zvcldhc21Db250ZXh0PXRydWUiLCAqKEZUTF9PUFRJT05T
ICsgTk9fQ0pJVF9PUFRJT05TICsgb3B0aW9uYWxUZXN0U3BlY2lmaWNPcHRpb25zKSkKICAgICAg
ICAgcnVuKCJ3YXNtLWVhZ2VyIiwgIi1tIiwgKihGVExfT1BUSU9OUyArIEVBR0VSX09QVElPTlMg
KyBvcHRpb25hbFRlc3RTcGVjaWZpY09wdGlvbnMpKQotICAgICAgICBydW4oIndhc20tZWFnZXIt
amV0dGlzb24iLCAiLW0iLCAiLS1mb3JjZUNvZGVCbG9ja1RvSmV0dGlzb25EdWVUb09sZEFnZT10
cnVlIiwgKihGVExfT1BUSU9OUyArIG9wdGlvbmFsVGVzdFNwZWNpZmljT3B0aW9ucykpCisgICAg
ICAgIHJ1bigid2FzbS1lYWdlci1qZXR0aXNvbiIsICItbSIsICItLWZvcmNlQ29kZUJsb2NrVG9K
ZXR0aXNvbkR1ZVRvT2xkQWdlPXRydWUiLCAiLS11c2VSYW5kb21pemluZ0V4ZWN1dGFibGVJc2xh
bmRBbGxvY2F0aW9uPXRydWUiLCAqKEZUTF9PUFRJT05TICsgb3B0aW9uYWxUZXN0U3BlY2lmaWNP
cHRpb25zKSkKICAgICAgICAgcnVuKCJ3YXNtLW5vLXRscy1jb250ZXh0IiwgIi1tIiwgIi0tdXNl
RmFzdFRMU0Zvcldhc21Db250ZXh0PWZhbHNlIiwgKihGVExfT1BUSU9OUyArIG9wdGlvbmFsVGVz
dFNwZWNpZmljT3B0aW9ucykpCiAgICAgICAgIHJ1bigid2FzbS1zbG93LW1lbW9yeSIsICItbSIs
ICItLXVzZVdlYkFzc2VtYmx5RmFzdE1lbW9yeT1mYWxzZSIsICooRlRMX09QVElPTlMgKyBvcHRp
b25hbFRlc3RTcGVjaWZpY09wdGlvbnMpKQogICAgICAgICBydW4oIndhc20tYjMiLCAiLW0iLCAi
LS11c2VXYXNtTExJbnQ9ZmFsc2UiLCAiLS13YXNtQkJRVXNlc0Fpcj1mYWxzZSIsICooRlRMX09Q
VElPTlMgKyBvcHRpb25hbFRlc3RTcGVjaWZpY09wdGlvbnMpKQotICAgICAgICBydW4oIndhc20t
YWlyIiwgIi1tIiwgIi0tdXNlV2FzbUxMSW50PWZhbHNlIiwgKihGVExfT1BUSU9OUyArIG9wdGlv
bmFsVGVzdFNwZWNpZmljT3B0aW9ucykpCisgICAgICAgIHJ1bigid2FzbS1haXIiLCAiLW0iLCAi
LS11c2VXYXNtTExJbnQ9ZmFsc2UiLCAiLS11c2VSYW5kb21pemluZ0V4ZWN1dGFibGVJc2xhbmRB
bGxvY2F0aW9uPXRydWUiLCAqKEZUTF9PUFRJT05TICsgb3B0aW9uYWxUZXN0U3BlY2lmaWNPcHRp
b25zKSkKICAgICAgICAgcnVuKCJ3YXNtLWNvbGxlY3QtY29udGludW91c2x5IiwgIi1tIiwgIi0t
Y29sbGVjdENvbnRpbnVvdXNseT10cnVlIiwgKihGVExfT1BUSU9OUyArIG9wdGlvbmFsVGVzdFNw
ZWNpZmljT3B0aW9ucykpIGlmIHNob3VsZENvbGxlY3RDb250aW51b3VzbHk/CiAgICAgZW5kCiBl
bmQKQEAgLTExMzMsMTEgKzExNTUsMTEgQEAgZGVmIHJ1bldlYkFzc2VtYmx5V2l0aEhhcm5lc3Mo
Km9wdGlvbmFsVAogICAgIGlmICRtb2RlICE9ICJxdWljayIKICAgICAgICAgcnVuSGFybmVzc1Rl
c3QoIndhc20tbm8tY2ppdC15ZXMtdGxzLWNvbnRleHQiLCAiLS11c2VGYXN0VExTRm9yV2FzbUNv
bnRleHQ9dHJ1ZSIsICooRlRMX09QVElPTlMgKyBOT19DSklUX09QVElPTlMgKyBvcHRpb25hbFRl
c3RTcGVjaWZpY09wdGlvbnMpKQogICAgICAgICBydW5IYXJuZXNzVGVzdCgid2FzbS1lYWdlciIs
ICooRlRMX09QVElPTlMgKyBFQUdFUl9PUFRJT05TICsgb3B0aW9uYWxUZXN0U3BlY2lmaWNPcHRp
b25zKSkKLSAgICAgICAgcnVuSGFybmVzc1Rlc3QoIndhc20tZWFnZXItamV0dGlzb24iLCAiLS1m
b3JjZUNvZGVCbG9ja1RvSmV0dGlzb25EdWVUb09sZEFnZT10cnVlIiwgKihGVExfT1BUSU9OUyAr
IG9wdGlvbmFsVGVzdFNwZWNpZmljT3B0aW9ucykpCisgICAgICAgIHJ1bkhhcm5lc3NUZXN0KCJ3
YXNtLWVhZ2VyLWpldHRpc29uIiwgIi0tZm9yY2VDb2RlQmxvY2tUb0pldHRpc29uRHVlVG9PbGRB
Z2U9dHJ1ZSIsICItLXVzZVJhbmRvbWl6aW5nRXhlY3V0YWJsZUlzbGFuZEFsbG9jYXRpb249dHJ1
ZSIsICooRlRMX09QVElPTlMgKyBvcHRpb25hbFRlc3RTcGVjaWZpY09wdGlvbnMpKQogICAgICAg
ICBydW5IYXJuZXNzVGVzdCgid2FzbS1uby10bHMtY29udGV4dCIsICItLXVzZUZhc3RUTFNGb3JX
YXNtQ29udGV4dD1mYWxzZSIsICooRlRMX09QVElPTlMgKyBvcHRpb25hbFRlc3RTcGVjaWZpY09w
dGlvbnMpKQogICAgICAgICBydW5IYXJuZXNzVGVzdCgid2FzbS1zbG93LW1lbW9yeSIsICItLXVz
ZVdlYkFzc2VtYmx5RmFzdE1lbW9yeT1mYWxzZSIsICooRlRMX09QVElPTlMgKyBvcHRpb25hbFRl
c3RTcGVjaWZpY09wdGlvbnMpKQogICAgICAgICBydW5IYXJuZXNzVGVzdCgid2FzbS1iMyIsICIt
LXVzZVdhc21MTEludD1mYWxzZSIsICItLXdhc21CQlFVc2VzQWlyPWZhbHNlIiwgKihGVExfT1BU
SU9OUyArIG9wdGlvbmFsVGVzdFNwZWNpZmljT3B0aW9ucykpCi0gICAgICAgIHJ1bkhhcm5lc3NU
ZXN0KCJ3YXNtLW5vLWFpciIsICItLXVzZVdhc21MTEludD1mYWxzZSIsICooRlRMX09QVElPTlMg
KyBvcHRpb25hbFRlc3RTcGVjaWZpY09wdGlvbnMpKQorICAgICAgICBydW5IYXJuZXNzVGVzdCgi
d2FzbS1uby1haXIiLCAiLS11c2VXYXNtTExJbnQ9ZmFsc2UiLCAiLS11c2VSYW5kb21pemluZ0V4
ZWN1dGFibGVJc2xhbmRBbGxvY2F0aW9uPXRydWUiLCAqKEZUTF9PUFRJT05TICsgb3B0aW9uYWxU
ZXN0U3BlY2lmaWNPcHRpb25zKSkKICAgICAgICAgcnVuSGFybmVzc1Rlc3QoIndhc20tY29sbGVj
dC1jb250aW51b3VzbHkiLCAiLS1jb2xsZWN0Q29udGludW91c2x5PXRydWUiLCAqKEZUTF9PUFRJ
T05TICsgb3B0aW9uYWxUZXN0U3BlY2lmaWNPcHRpb25zKSkgaWYgc2hvdWxkQ29sbGVjdENvbnRp
bnVvdXNseT8KICAgICBlbmQKIGVuZApAQCAtMTE1NCwxMCArMTE3NiwxMCBAQCBkZWYgcnVuV2Vi
QXNzZW1ibHlFbXNjcmlwdGVuKG1vZGUpCiAgICAgcnVuKCJkZWZhdWx0LXdhc20iLCAqRlRMX09Q
VElPTlMpCiAgICAgaWYgJG1vZGUgIT0gInF1aWNrIgogICAgICAgICBydW4oIndhc20tbm8tY2pp
dC15ZXMtdGxzLWNvbnRleHQiLCAiLS11c2VGYXN0VExTRm9yV2FzbUNvbnRleHQ9dHJ1ZSIsICoo
RlRMX09QVElPTlMgKyBOT19DSklUX09QVElPTlMpKQotICAgICAgICBydW4oIndhc20tZWFnZXIt
amV0dGlzb24iLCAiLS1mb3JjZUNvZGVCbG9ja1RvSmV0dGlzb25EdWVUb09sZEFnZT10cnVlIiwg
KkZUTF9PUFRJT05TKQorICAgICAgICBydW4oIndhc20tZWFnZXItamV0dGlzb24iLCAiLS1mb3Jj
ZUNvZGVCbG9ja1RvSmV0dGlzb25EdWVUb09sZEFnZT10cnVlIiwgIi0tdXNlUmFuZG9taXppbmdF
eGVjdXRhYmxlSXNsYW5kQWxsb2NhdGlvbj10cnVlIiwgKkZUTF9PUFRJT05TKQogICAgICAgICBy
dW4oIndhc20tbm8tdGxzLWNvbnRleHQiLCAiLS11c2VGYXN0VExTRm9yV2FzbUNvbnRleHQ9ZmFs
c2UiLCAqRlRMX09QVElPTlMpCiAgICAgICAgIHJ1bigid2FzbS1iMyIsICItLXVzZVdhc21MTElu
dD1mYWxzZSIsICItLXdhc21CQlFVc2VzQWlyPWZhbHNlIiwgKkZUTF9PUFRJT05TKQotICAgICAg
ICBydW4oIndhc20tYWlyIiwgIi0tdXNlV2FzbUxMSW50PWZhbHNlIiwgKkZUTF9PUFRJT05TKQor
ICAgICAgICBydW4oIndhc20tYWlyIiwgIi0tdXNlV2FzbUxMSW50PWZhbHNlIiwgIi0tdXNlUmFu
ZG9taXppbmdFeGVjdXRhYmxlSXNsYW5kQWxsb2NhdGlvbj10cnVlIiwgKkZUTF9PUFRJT05TKQog
ICAgICAgICBydW4oIndhc20tY29sbGVjdC1jb250aW51b3VzbHkiLCAiLS1jb2xsZWN0Q29udGlu
dW91c2x5PXRydWUiLCAqRlRMX09QVElPTlMpIGlmIHNob3VsZENvbGxlY3RDb250aW51b3VzbHk/
CiAgICAgZW5kCiBlbmQKQEAgLTExODAsMTAgKzEyMDIsMTAgQEAgZGVmIHJ1bldlYkFzc2VtYmx5
U3BlY1Rlc3QobW9kZSkKICAgICBydW5XaXRoT3V0cHV0SGFuZGxlcigiZGVmYXVsdC13YXNtIiwg
bm9pc3lPdXRwdXRIYW5kbGVyLCAiLi4vc3BlYy1oYXJuZXNzLmpzIiwgKkZUTF9PUFRJT05TKQog
ICAgIGlmICRtb2RlICE9ICJxdWljayIKICAgICAgIHJ1bldpdGhPdXRwdXRIYW5kbGVyKCJ3YXNt
LW5vLWNqaXQteWVzLXRscy1jb250ZXh0Iiwgbm9pc3lPdXRwdXRIYW5kbGVyLCAiLi4vc3BlYy1o
YXJuZXNzLmpzIiwgICItLXVzZUZhc3RUTFNGb3JXYXNtQ29udGV4dD10cnVlIiwgKihGVExfT1BU
SU9OUyArIE5PX0NKSVRfT1BUSU9OUykpCi0gICAgICBydW5XaXRoT3V0cHV0SGFuZGxlcigid2Fz
bS1lYWdlci1qZXR0aXNvbiIsIG5vaXN5T3V0cHV0SGFuZGxlciwgIi4uL3NwZWMtaGFybmVzcy5q
cyIsICItLWZvcmNlQ29kZUJsb2NrVG9KZXR0aXNvbkR1ZVRvT2xkQWdlPXRydWUiLCAqRlRMX09Q
VElPTlMpCisgICAgICBydW5XaXRoT3V0cHV0SGFuZGxlcigid2FzbS1lYWdlci1qZXR0aXNvbiIs
IG5vaXN5T3V0cHV0SGFuZGxlciwgIi4uL3NwZWMtaGFybmVzcy5qcyIsICItLWZvcmNlQ29kZUJs
b2NrVG9KZXR0aXNvbkR1ZVRvT2xkQWdlPXRydWUiLCAiLS11c2VSYW5kb21pemluZ0V4ZWN1dGFi
bGVJc2xhbmRBbGxvY2F0aW9uPXRydWUiLCAqRlRMX09QVElPTlMpCiAgICAgICBydW5XaXRoT3V0
cHV0SGFuZGxlcigid2FzbS1uby10bHMtY29udGV4dCIsIG5vaXN5T3V0cHV0SGFuZGxlciwgIi4u
L3NwZWMtaGFybmVzcy5qcyIsICItLXVzZUZhc3RUTFNGb3JXYXNtQ29udGV4dD1mYWxzZSIsICpG
VExfT1BUSU9OUykKICAgICAgIHJ1bldpdGhPdXRwdXRIYW5kbGVyKCJ3YXNtLWIzIiwgbm9pc3lP
dXRwdXRIYW5kbGVyLCAiLi4vc3BlYy1oYXJuZXNzLmpzIiwgIi0tdXNlV2FzbUxMSW50PWZhbHNl
IiwgIi0td2FzbUJCUVVzZXNBaXI9ZmFsc2UiLCAqRlRMX09QVElPTlMpCi0gICAgICBydW5XaXRo
T3V0cHV0SGFuZGxlcigid2FzbS1haXIiLCBub2lzeU91dHB1dEhhbmRsZXIsICIuLi9zcGVjLWhh
cm5lc3MuanMiLCAiLS11c2VXYXNtTExJbnQ9ZmFsc2UiLCAqRlRMX09QVElPTlMpCisgICAgICBy
dW5XaXRoT3V0cHV0SGFuZGxlcigid2FzbS1haXIiLCBub2lzeU91dHB1dEhhbmRsZXIsICIuLi9z
cGVjLWhhcm5lc3MuanMiLCAiLS11c2VXYXNtTExJbnQ9ZmFsc2UiLCAiLS11c2VSYW5kb21pemlu
Z0V4ZWN1dGFibGVJc2xhbmRBbGxvY2F0aW9uPXRydWUiLCAqRlRMX09QVElPTlMpCiAgICAgICBy
dW5XaXRoT3V0cHV0SGFuZGxlcigid2FzbS1jb2xsZWN0LWNvbnRpbnVvdXNseSIsIG5vaXN5T3V0
cHV0SGFuZGxlciwgIi4uL3NwZWMtaGFybmVzcy5qcyIsICItLWNvbGxlY3RDb250aW51b3VzbHk9
dHJ1ZSIsICpGVExfT1BUSU9OUykgaWYgc2hvdWxkQ29sbGVjdENvbnRpbnVvdXNseT8KICAgICBl
bmQKIGVuZApAQCAtMTM1MiwxNyArMTM3NCwyMSBAQCBkZWYgbm9Ob0xMSW50UnVuTGF5b3V0VGVz
dAogICAgIGVuZAogZW5kCiAKLWRlZiBwcmVwYXJlRXh0cmFSZWxhdGl2ZUZpbGVzKGV4dHJhRmls
ZXMsIGRlc3RpbmF0aW9uKQorZGVmIHByZXBhcmVFeHRyYVJlbGF0aXZlRmlsZXNXaXRoQmFzZURp
cmVjdG9yeShleHRyYUZpbGVzLCBkZXN0aW5hdGlvbiwgYmFzZURpcmVjdG9yeSkKICAgICBEaXIu
Y2hkaXIoJG91dHB1dERpcikgewogICAgICAgICBleHRyYUZpbGVzLmVhY2ggewogICAgICAgICAg
ICAgfCBmaWxlIHwKICAgICAgICAgICAgIGRlc3QgPSBkZXN0aW5hdGlvbiArIGZpbGUKICAgICAg
ICAgICAgIEZpbGVVdGlscy5ta2Rpcl9wKGRlc3QuZGlybmFtZSkKLSAgICAgICAgICAgIEZpbGVV
dGlscy5jcCAkZXh0cmFGaWxlc0Jhc2VEaXIgKyBmaWxlLCBkZXN0CisgICAgICAgICAgICBGaWxl
VXRpbHMuY3AgYmFzZURpcmVjdG9yeSArIGZpbGUsIGRlc3QKICAgICAgICAgfQogICAgIH0KIGVu
ZAogCitkZWYgcHJlcGFyZUV4dHJhUmVsYXRpdmVGaWxlcyhleHRyYUZpbGVzLCBkZXN0aW5hdGlv
bikKKyAgICBwcmVwYXJlRXh0cmFSZWxhdGl2ZUZpbGVzV2l0aEJhc2VEaXJlY3RvcnkoZXh0cmFG
aWxlcywgZGVzdGluYXRpb24sICRleHRyYUZpbGVzQmFzZURpcikKK2VuZAorCiBkZWYgYmFzZURp
ckZvckNvbGxlY3Rpb24oY29sbGVjdGlvbk5hbWUpCiAgICAgUGF0aG5hbWUoIi50ZXN0cyIpICsg
Y29sbGVjdGlvbk5hbWUKIGVuZApJbmRleDogVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XVEYv
TWV0YUFsbG9jYXRvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0
cy9XVEYvTWV0YUFsbG9jYXRvci5jcHAJKHJldmlzaW9uIDI1ODM1MCkKKysrIFRvb2xzL1Rlc3RX
ZWJLaXRBUEkvVGVzdHMvV1RGL01ldGFBbGxvY2F0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01
Miw3ICs1Miw3IEBAIHB1YmxpYzoKICAgICBjbGFzcyBTaW1wbGVUZXN0QWxsb2NhdG9yOiBwdWJs
aWMgTWV0YUFsbG9jYXRvciB7CiAgICAgcHVibGljOgogICAgICAgICBTaW1wbGVUZXN0QWxsb2Nh
dG9yKE1ldGFBbGxvY2F0b3JUZXN0KiBwYXJlbnQpCi0gICAgICAgICAgICA6IE1ldGFBbGxvY2F0
b3IoMzIpCisgICAgICAgICAgICA6IE1ldGFBbGxvY2F0b3IobV9sb2NrLCAzMikKICAgICAgICAg
ICAgICwgbV9wYXJlbnQocGFyZW50KQogICAgICAgICB7CiAgICAgICAgICAgICBhZGRGcmVzaEZy
ZWVTcGFjZShyZWludGVycHJldF9jYXN0PHZvaWQqPihiYXNlUGFnZSAqIHBhZ2VTaXplKCkpLCBk
ZWZhdWx0UGFnZXNJbkhlYXAgKiBwYWdlU2l6ZSgpKTsKQEAgLTEyOSw2ICsxMjksNyBAQCBwdWJs
aWM6CiAgICAgICAgIH0KICAgICAgICAgCiAgICAgcHJpdmF0ZToKKyAgICAgICAgTG9jayBtX2xv
Y2s7CiAgICAgICAgIE1ldGFBbGxvY2F0b3JUZXN0KiBtX3BhcmVudDsKICAgICB9OwogCkBAIC0x
OTAsNyArMTkxLDcgQEAgcHVibGljOgogICAgIAogICAgIE1ldGFBbGxvY2F0b3JIYW5kbGUqIGFs
bG9jYXRlKHNpemVfdCBzaXplSW5CeXRlcywgU2FuaXR5Q2hlY2tNb2RlIHNhbml0eUNoZWNrTW9k
ZSA9IFJ1blNhbml0eUNoZWNrKQogICAgIHsKLSAgICAgICAgTWV0YUFsbG9jYXRvckhhbmRsZSog
aGFuZGxlID0gYWxsb2NhdG9yLT5hbGxvY2F0ZShzaXplSW5CeXRlcywgMCkubGVha1JlZigpOwor
ICAgICAgICBNZXRhQWxsb2NhdG9ySGFuZGxlKiBoYW5kbGUgPSBhbGxvY2F0b3ItPmFsbG9jYXRl
KHNpemVJbkJ5dGVzKS5sZWFrUmVmKCk7CiAgICAgICAgIEVYUEVDVF9UUlVFKGhhbmRsZSk7CiAg
ICAgICAgIEVYUEVDVF9FUShoYW5kbGUtPnNpemVJbkJ5dGVzKCksIHNpemVJbkJ5dGVzKTsKICAg
ICAgICAgCkBAIC00NzIsNyArNDczLDcgQEAgcHVibGljOgogICAgICAgICAKICAgICAgICAgc2Fu
aXR5Q2hlY2soKTsKICAgICAgICAgCi0gICAgICAgIEVYUEVDVF9UUlVFKCFhbGxvY2F0b3ItPmFs
bG9jYXRlKHNpemVJbkJ5dGVzLCAwKSk7CisgICAgICAgIEVYUEVDVF9UUlVFKCFhbGxvY2F0b3It
PmFsbG9jYXRlKHNpemVJbkJ5dGVzKSk7CiAgICAgICAgIAogICAgICAgICBmb3IgKHNpemVfdCBp
bmRleCA9IDA7IGluZGV4IDwgbnVtQWxsb2NhdGlvbnM7ICsraW5kZXgpCiAgICAgICAgICAgICBm
cmVlKGhhbmRsZXMuYXQoaW5kZXgpLCBEb250UnVuU2FuaXR5Q2hlY2spOwpAQCAtNTc5LDcgKzU4
MCw3IEBAIHB1YmxpYzoKICAgICAgICAgc2FuaXR5Q2hlY2soKTsKICAgICAgICAgCiAgICAgICAg
IC8vIEFzc2VydCB0aGF0IHRoZSBoZWFwIGlzIG5vdCBlbXB0eS4KLSAgICAgICAgRVhQRUNUX1RS
VUUoIWFsbG9jYXRvci0+YWxsb2NhdGUoZGVmYXVsdFBhZ2VzSW5IZWFwICogcGFnZVNpemUoKSwg
MCkpOworICAgICAgICBFWFBFQ1RfVFJVRSghYWxsb2NhdG9yLT5hbGxvY2F0ZShkZWZhdWx0UGFn
ZXNJbkhlYXAgKiBwYWdlU2l6ZSgpKSk7CiAgICAgICAgIAogICAgICAgICAvLyBBbGxvY2F0ZSB0
aGUgcmVtYWluZGVyIG9mIHRoZSBoZWFwLgogICAgICAgICBNZXRhQWxsb2NhdG9ySGFuZGxlKiBy
ZW1haW5kZXIgPSBhbGxvY2F0ZShkZWZhdWx0UGFnZXNJbkhlYXAgKiBwYWdlU2l6ZSgpIC0gc2Vj
b25kU2l6ZSk7CkBAIC01OTcsMTIgKzU5OCwxMiBAQCBwdWJsaWM6CiAgICAgCiAgICAgdm9pZCB0
ZXN0RGVtYW5kQWxsb2NDb2FsZXNjZShzaXplX3QgZmlyc3RTaXplLCBzaXplX3QgbnVtUGFnZXMs
IHNpemVfdCBzZWNvbmRTaXplKQogICAgIHsKLSAgICAgICAgRVhQRUNUX1RSVUUoIWFsbG9jYXRv
ci0+YWxsb2NhdGUoKGRlZmF1bHRQYWdlc0luSGVhcCArIG51bVBhZ2VzKSAqIHBhZ2VTaXplKCks
IDApKTsKKyAgICAgICAgRVhQRUNUX1RSVUUoIWFsbG9jYXRvci0+YWxsb2NhdGUoKGRlZmF1bHRQ
YWdlc0luSGVhcCArIG51bVBhZ2VzKSAqIHBhZ2VTaXplKCkpKTsKICAgICAgICAgCiAgICAgICAg
IE1ldGFBbGxvY2F0b3JIYW5kbGUqIGZpcnN0SGFuZGxlID0gYWxsb2NhdGUoZmlyc3RTaXplKTsK
ICAgICAgICAgCi0gICAgICAgIEVYUEVDVF9UUlVFKCFhbGxvY2F0b3ItPmFsbG9jYXRlKHNlY29u
ZFNpemUsIDApKTsKLSAgICAgICAgRVhQRUNUX1RSVUUoIWFsbG9jYXRvci0+YWxsb2NhdGUoKGRl
ZmF1bHRQYWdlc0luSGVhcCArIG51bVBhZ2VzKSAqIHBhZ2VTaXplKCksIDApKTsKKyAgICAgICAg
RVhQRUNUX1RSVUUoIWFsbG9jYXRvci0+YWxsb2NhdGUoc2Vjb25kU2l6ZSkpOworICAgICAgICBF
WFBFQ1RfVFJVRSghYWxsb2NhdG9yLT5hbGxvY2F0ZSgoZGVmYXVsdFBhZ2VzSW5IZWFwICsgbnVt
UGFnZXMpICogcGFnZVNpemUoKSkpOwogICAgICAgICAKICAgICAgICAgY3VycmVudEhlYXBHcm93
dGhNb2RlID0gRm9yVGVzdERlbWFuZEFsbG9jQ29hbGVzY2U7CiAgICAgICAgIGFsbG93QWxsb2Nh
dGVQYWdlcyA9IG51bVBhZ2VzOwpAQCAtNjI2LDEyICs2MjcsMTIgQEAgcHVibGljOgogICAgIHsK
ICAgICAgICAgZnJlZShhbGxvY2F0ZShmaXJzdFNpemUpKTsKICAgICAgICAgZnJlZShhbGxvY2F0
ZShkZWZhdWx0UGFnZXNJbkhlYXAgKiBwYWdlU2l6ZSgpKSk7Ci0gICAgICAgIEVYUEVDVF9UUlVF
KCFhbGxvY2F0b3ItPmFsbG9jYXRlKChkZWZhdWx0UGFnZXNJbkhlYXAgKyBudW1QYWdlcykgKiBw
YWdlU2l6ZSgpLCAwKSk7CisgICAgICAgIEVYUEVDVF9UUlVFKCFhbGxvY2F0b3ItPmFsbG9jYXRl
KChkZWZhdWx0UGFnZXNJbkhlYXAgKyBudW1QYWdlcykgKiBwYWdlU2l6ZSgpKSk7CiAgICAgICAg
IAogICAgICAgICBNZXRhQWxsb2NhdG9ySGFuZGxlKiBmaXJzdEhhbmRsZSA9IGFsbG9jYXRlKGZp
cnN0U2l6ZSk7CiAgICAgICAgIAotICAgICAgICBFWFBFQ1RfVFJVRSghYWxsb2NhdG9yLT5hbGxv
Y2F0ZShzZWNvbmRTaXplLCAwKSk7Ci0gICAgICAgIEVYUEVDVF9UUlVFKCFhbGxvY2F0b3ItPmFs
bG9jYXRlKChkZWZhdWx0UGFnZXNJbkhlYXAgKyBudW1QYWdlcykgKiBwYWdlU2l6ZSgpLCAwKSk7
CisgICAgICAgIEVYUEVDVF9UUlVFKCFhbGxvY2F0b3ItPmFsbG9jYXRlKHNlY29uZFNpemUpKTsK
KyAgICAgICAgRVhQRUNUX1RSVUUoIWFsbG9jYXRvci0+YWxsb2NhdGUoKGRlZmF1bHRQYWdlc0lu
SGVhcCArIG51bVBhZ2VzKSAqIHBhZ2VTaXplKCkpKTsKICAgICAgICAgCiAgICAgICAgIGN1cnJl
bnRIZWFwR3Jvd3RoTW9kZSA9IEZvclRlc3REZW1hbmRBbGxvY0RvbnRDb2FsZXNjZTsKICAgICAg
ICAgYWxsb3dBbGxvY2F0ZVBhZ2VzID0gbnVtUGFnZXM7CkBAIC02NDUsMTIgKzY0NiwxMiBAQCBw
dWJsaWM6CiAgICAgICAgIAogICAgICAgICByZXF1ZXN0ZWROdW1QYWdlcyA9IDA7CiAgICAgICAg
IAotICAgICAgICBFWFBFQ1RfVFJVRSghYWxsb2NhdG9yLT5hbGxvY2F0ZSgoZGVmYXVsdFBhZ2Vz
SW5IZWFwICsgbnVtUGFnZXMpICogcGFnZVNpemUoKSwgMCkpOworICAgICAgICBFWFBFQ1RfVFJV
RSghYWxsb2NhdG9yLT5hbGxvY2F0ZSgoZGVmYXVsdFBhZ2VzSW5IZWFwICsgbnVtUGFnZXMpICog
cGFnZVNpemUoKSkpOwogCiAgICAgICAgIGZyZWUoZmlyc3RIYW5kbGUpOwogICAgICAgICBmcmVl
KHNlY29uZEhhbmRsZSk7CiAgICAgICAgIAotICAgICAgICBFWFBFQ1RfVFJVRSghYWxsb2NhdG9y
LT5hbGxvY2F0ZSgoZGVmYXVsdFBhZ2VzSW5IZWFwICsgbnVtUGFnZXMpICogcGFnZVNpemUoKSwg
MCkpOworICAgICAgICBFWFBFQ1RfVFJVRSghYWxsb2NhdG9yLT5hbGxvY2F0ZSgoZGVmYXVsdFBh
Z2VzSW5IZWFwICsgbnVtUGFnZXMpICogcGFnZVNpemUoKSkpOwogICAgICAgICAKICAgICAgICAg
Zmlyc3RIYW5kbGUgPSBhbGxvY2F0ZShmaXJzdFNpemUpOwogICAgICAgICBzZWNvbmRIYW5kbGUg
PSBhbGxvY2F0ZShzZWNvbmRTaXplKTsKQEAgLTY3MSw3ICs2NzIsNyBAQCBURVNUX0YoTWV0YUFs
bG9jYXRvclRlc3QsIEFsbG9jWmVybykgICAgCiAgICAgLy8gVGVzdHMgdGhhdCBhbGxvY2F0aW5n
IGEgemVyby1sZW5ndGggYmxvY2sgcmV0dXJucyAwIGFuZAogICAgIC8vIGRvZXMgbm90IGNoYW5n
ZSBhbnl0aGluZyBpbiBtZW1vcnkuCiAgICAgCi0gICAgQVNTRVJUKCFhbGxvY2F0b3ItPmFsbG9j
YXRlKDAsIDApKTsKKyAgICBBU1NFUlQoIWFsbG9jYXRvci0+YWxsb2NhdGUoMCkpOwogICAgIAog
ICAgIE1ldGFBbGxvY2F0b3JIYW5kbGUqIGZpbmFsID0gYWxsb2NhdGUoZGVmYXVsdFBhZ2VzSW5I
ZWFwICogcGFnZVNpemUoKSk7CiAgICAgRVhQRUNUX0VRKGZpbmFsLT5zdGFydCgpLnVudGFnZ2Vk
UHRyKCksIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KGJhc2VQYWdlICogcGFnZVNpemUoKSkpOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>393444</attachid>
            <date>2020-03-12 19:34:00 -0700</date>
            <delta_ts>2020-03-12 20:50:13 -0700</delta_ts>
            <desc>patch</desc>
            <filename>c-backup.diff</filename>
            <type>text/plain</type>
            <size>125515</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IEpTVGVzdHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEpTVGVzdHMvQ2hhbmdlTG9n
CShyZXZpc2lvbiAyNTgzNTApCisrKyBKU1Rlc3RzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpA
QCAtMSwzICsxLDE0IEBACisyMDIwLTAzLTEyICBTYWFtIEJhcmF0aSAgPHNiYXJhdGlAYXBwbGUu
Y29tPgorCisgICAgICAgIEltcGxlbWVudCAxR0Igb2YgZXhlY3V0YWJsZSBtZW1vcnkgb24gYXJt
NjQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIwODQ5
MAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFJ1biBK
ZXRTdHJlYW0yIHdhc20gdGVzdHMuCisKKyAgICAgICAgKiB3YXNtLnlhbWw6CisKIDIwMjAtMDMt
MTEgIEtlaXRoIE1pbGxlciAgPGtlaXRoX21pbGxlckBhcHBsZS5jb20+CiAKICAgICAgICAgVGVz
dDI2Mi1ydW5uZXIgc2hvdWxkIGFsd2F5cyBjb25zaWRlciBjcmFzaGVzIGFzIG5ldyBmYWlsdXJl
cwpJbmRleDogSlNUZXN0cy93YXNtLnlhbWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSlNUZXN0cy93YXNtLnlh
bWwJKHJldmlzaW9uIDI1ODM1MCkKKysrIEpTVGVzdHMvd2FzbS55YW1sCSh3b3JraW5nIGNvcHkp
CkBAIC0yMzEsMyArMjMxLDYgQEAKIC0gcGF0aDogd2FzbS9tb2R1bGVzL3J1bi1mcm9tLXdhc20u
d2FzbQogICBjbWQ6IHJ1bldlYkFzc2VtYmx5CiAKKy0gcGF0aDogLi4vUGVyZm9ybWFuY2VUZXN0
cy9KZXRTdHJlYW0yL3dhc20tY2xpLmpzCisgIGNtZDogcnVuV2ViQXNzZW1ibHlKZXRTdHJlYW0y
IHVubGVzcyBwYXJzZVJ1bkNvbW1hbmRzCisKSW5kZXg6IFBlcmZvcm1hbmNlVGVzdHMvQ2hhbmdl
TG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFBlcmZvcm1hbmNlVGVzdHMvQ2hhbmdlTG9nCShyZXZpc2lvbiAy
NTgzNTApCisrKyBQZXJmb3JtYW5jZVRlc3RzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAt
MSwzICsxLDI0IEBACisyMDIwLTAzLTEyICBTYWFtIEJhcmF0aSAgPHNiYXJhdGlAYXBwbGUuY29t
PgorCisgICAgICAgIEltcGxlbWVudCAxR0Igb2YgZXhlY3V0YWJsZSBtZW1vcnkgb24gYXJtNjQK
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIwODQ5MAor
CisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogSmV0U3Ry
ZWFtMi9KZXRTdHJlYW1Ecml2ZXIuanM6CisgICAgICAgIChEcml2ZXIucHJvdG90eXBlLmR1bXBK
U09OUmVzdWx0c0lmTmVlZGVkKToKKyAgICAgICAgKERlZmF1bHRCZW5jaG1hcmsucHJvdG90eXBl
LnVwZGF0ZVVJQWZ0ZXJSdW4pOgorICAgICAgICAoRGVmYXVsdEJlbmNobWFyayk6CisgICAgICAg
IChXU0xCZW5jaG1hcmsucHJvdG90eXBlLnVwZGF0ZVVJQWZ0ZXJSdW4pOgorICAgICAgICAoV1NM
QmVuY2htYXJrKToKKyAgICAgICAgKFdhc21CZW5jaG1hcmsucHJvdG90eXBlLnVwZGF0ZVVJQWZ0
ZXJSdW4pOgorICAgICAgICAoV2FzbUJlbmNobWFyayk6CisgICAgICAgIChEcml2ZXIuYXN5bmMg
ZmV0Y2hSZXNvdXJjZXMuc3RhdHVzRWxlbWVudC5pbm5lckhUTUwuYS5ocmVmLnN0cmluZ19hcHBl
YXJlZF9oZXJlKToKKyAgICAgICAgKERyaXZlci5wcm90b3R5cGUuYXN5bmMgZmV0Y2hSZXNvdXJj
ZXMpOgorICAgICAgICAqIEpldFN0cmVhbTIvd2FzbS1jbGkuanM6IEFkZGVkLgorICAgICAgICAo
Y29uc29sZS5sb2cpOgorICAgICAgICAoYXN5bmMgcnVuSmV0U3RyZWFtKToKKwogMjAyMC0wMi0x
NyAgRG9uIE9sbXN0ZWFkICA8ZG9uLm9sbXN0ZWFkQHNvbnkuY29tPgogCiAgICAgICAgIFtDTWFr
ZV0gVXNlIGJ1aWx0aW4gdGFyZ2V0cwpJbmRleDogUGVyZm9ybWFuY2VUZXN0cy9KZXRTdHJlYW0y
L0pldFN0cmVhbURyaXZlci5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBQZXJmb3JtYW5jZVRlc3RzL0pldFN0
cmVhbTIvSmV0U3RyZWFtRHJpdmVyLmpzCShyZXZpc2lvbiAyNTgzNTApCisrKyBQZXJmb3JtYW5j
ZVRlc3RzL0pldFN0cmVhbTIvSmV0U3RyZWFtRHJpdmVyLmpzCSh3b3JraW5nIGNvcHkpCkBAIC00
MDksOSArNDA5LDkgQEAgY2xhc3MgRHJpdmVyIHsKICAgICBkdW1wSlNPTlJlc3VsdHNJZk5lZWRl
ZCgpCiAgICAgewogICAgICAgICBpZiAoZHVtcEpTT05SZXN1bHRzKSB7Ci0gICAgICAgICAgICBw
cmludCgiXG4iKTsKLSAgICAgICAgICAgIHByaW50KHRoaXMucmVzdWx0c0pTT04oKSk7Ci0gICAg
ICAgICAgICBwcmludCgiXG4iKTsKKyAgICAgICAgICAgIGNvbnNvbGUubG9nKCJcbiIpOworICAg
ICAgICAgICAgY29uc29sZS5sb2codGhpcy5yZXN1bHRzSlNPTigpKTsKKyAgICAgICAgICAgIGNv
bnNvbGUubG9nKCJcbiIpOwogICAgICAgICB9CiAgICAgfQogCkBAIC03MjUsMTUgKzcyNSwxNSBA
QCBjbGFzcyBEZWZhdWx0QmVuY2htYXJrIGV4dGVuZHMgQmVuY2htYXJrCiAgICAgICAgICAgICBy
ZXR1cm47CiAgICAgICAgIH0KIAotICAgICAgICBwcmludCgiICAgIFN0YXJ0dXA6IiwgdWlGcmll
bmRseU51bWJlcih0aGlzLmZpcnN0SXRlcmF0aW9uKSk7Ci0gICAgICAgIHByaW50KCIgICAgV29y
c3QgQ2FzZToiLCB1aUZyaWVuZGx5TnVtYmVyKHRoaXMud29yc3Q0KSk7Ci0gICAgICAgIHByaW50
KCIgICAgQXZlcmFnZToiLCB1aUZyaWVuZGx5TnVtYmVyKHRoaXMuYXZlcmFnZSkpOwotICAgICAg
ICBwcmludCgiICAgIFNjb3JlOiIsIHVpRnJpZW5kbHlOdW1iZXIodGhpcy5zY29yZSkpOworICAg
ICAgICBjb25zb2xlLmxvZygiICAgIFN0YXJ0dXA6IiwgdWlGcmllbmRseU51bWJlcih0aGlzLmZp
cnN0SXRlcmF0aW9uKSk7CisgICAgICAgIGNvbnNvbGUubG9nKCIgICAgV29yc3QgQ2FzZToiLCB1
aUZyaWVuZGx5TnVtYmVyKHRoaXMud29yc3Q0KSk7CisgICAgICAgIGNvbnNvbGUubG9nKCIgICAg
QXZlcmFnZToiLCB1aUZyaWVuZGx5TnVtYmVyKHRoaXMuYXZlcmFnZSkpOworICAgICAgICBjb25z
b2xlLmxvZygiICAgIFNjb3JlOiIsIHVpRnJpZW5kbHlOdW1iZXIodGhpcy5zY29yZSkpOwogICAg
ICAgICBpZiAoUkFNaWZpY2F0aW9uKSB7Ci0gICAgICAgICAgICBwcmludCgiICAgIEN1cnJlbnQg
Rm9vdHByaW50OiIsIHVpRnJpZW5kbHlOdW1iZXIodGhpcy5jdXJyZW50Rm9vdHByaW50KSk7Ci0g
ICAgICAgICAgICBwcmludCgiICAgIFBlYWsgRm9vdHByaW50OiIsIHVpRnJpZW5kbHlOdW1iZXIo
dGhpcy5wZWFrRm9vdHByaW50KSk7CisgICAgICAgICAgICBjb25zb2xlLmxvZygiICAgIEN1cnJl
bnQgRm9vdHByaW50OiIsIHVpRnJpZW5kbHlOdW1iZXIodGhpcy5jdXJyZW50Rm9vdHByaW50KSk7
CisgICAgICAgICAgICBjb25zb2xlLmxvZygiICAgIFBlYWsgRm9vdHByaW50OiIsIHVpRnJpZW5k
bHlOdW1iZXIodGhpcy5wZWFrRm9vdHByaW50KSk7CiAgICAgICAgIH0KLSAgICAgICAgcHJpbnQo
IiAgICBXYWxsIHRpbWU6IiwgdWlGcmllbmRseUR1cmF0aW9uKG5ldyBEYXRlKHRoaXMuZW5kVGlt
ZSAtIHRoaXMuc3RhcnRUaW1lKSkpOworICAgICAgICBjb25zb2xlLmxvZygiICAgIFdhbGwgdGlt
ZToiLCB1aUZyaWVuZGx5RHVyYXRpb24obmV3IERhdGUodGhpcy5lbmRUaW1lIC0gdGhpcy5zdGFy
dFRpbWUpKSk7CiAgICAgfQogfQogCkBAIC04MTksMTQgKzgxOSwxNCBAQCBjbGFzcyBXU0xCZW5j
aG1hcmsgZXh0ZW5kcyBCZW5jaG1hcmsgewogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9
CiAKLSAgICAgICAgcHJpbnQoIiAgICBTdGRsaWI6IiwgdWlGcmllbmRseU51bWJlcih0aGlzLnN0
ZGxpYikpOwotICAgICAgICBwcmludCgiICAgIFRlc3RzOiIsIHVpRnJpZW5kbHlOdW1iZXIodGhp
cy5tYWluUnVuKSk7Ci0gICAgICAgIHByaW50KCIgICAgU2NvcmU6IiwgdWlGcmllbmRseU51bWJl
cih0aGlzLnNjb3JlKSk7CisgICAgICAgIGNvbnNvbGUubG9nKCIgICAgU3RkbGliOiIsIHVpRnJp
ZW5kbHlOdW1iZXIodGhpcy5zdGRsaWIpKTsKKyAgICAgICAgY29uc29sZS5sb2coIiAgICBUZXN0
czoiLCB1aUZyaWVuZGx5TnVtYmVyKHRoaXMubWFpblJ1bikpOworICAgICAgICBjb25zb2xlLmxv
ZygiICAgIFNjb3JlOiIsIHVpRnJpZW5kbHlOdW1iZXIodGhpcy5zY29yZSkpOwogICAgICAgICBp
ZiAoUkFNaWZpY2F0aW9uKSB7Ci0gICAgICAgICAgICBwcmludCgiICAgIEN1cnJlbnQgRm9vdHBy
aW50OiIsIHVpRnJpZW5kbHlOdW1iZXIodGhpcy5jdXJyZW50Rm9vdHByaW50KSk7Ci0gICAgICAg
ICAgICBwcmludCgiICAgIFBlYWsgRm9vdHByaW50OiIsIHVpRnJpZW5kbHlOdW1iZXIodGhpcy5w
ZWFrRm9vdHByaW50KSk7CisgICAgICAgICAgICBjb25zb2xlLmxvZygiICAgIEN1cnJlbnQgRm9v
dHByaW50OiIsIHVpRnJpZW5kbHlOdW1iZXIodGhpcy5jdXJyZW50Rm9vdHByaW50KSk7CisgICAg
ICAgICAgICBjb25zb2xlLmxvZygiICAgIFBlYWsgRm9vdHByaW50OiIsIHVpRnJpZW5kbHlOdW1i
ZXIodGhpcy5wZWFrRm9vdHByaW50KSk7CiAgICAgICAgIH0KLSAgICAgICAgcHJpbnQoIiAgICBX
YWxsIHRpbWU6IiwgdWlGcmllbmRseUR1cmF0aW9uKG5ldyBEYXRlKHRoaXMuZW5kVGltZSAtIHRo
aXMuc3RhcnRUaW1lKSkpOworICAgICAgICBjb25zb2xlLmxvZygiICAgIFdhbGwgdGltZToiLCB1
aUZyaWVuZGx5RHVyYXRpb24obmV3IERhdGUodGhpcy5lbmRUaW1lIC0gdGhpcy5zdGFydFRpbWUp
KSk7CiAgICAgfQogfTsKIApAQCAtOTc1LDEzICs5NzUsMTMgQEAgY2xhc3MgV2FzbUJlbmNobWFy
ayBleHRlbmRzIEJlbmNobWFyayB7CiAgICAgICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJ
ZCh0aGlzLnNjb3JlSUQpLmlubmVySFRNTCA9IHVpRnJpZW5kbHlOdW1iZXIodGhpcy5zY29yZSk7
CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KLSAgICAgICAgcHJpbnQoIiAgICBTdGFy
dHVwOiIsIHVpRnJpZW5kbHlOdW1iZXIodGhpcy5zdGFydHVwVGltZSkpOwotICAgICAgICBwcmlu
dCgiICAgIFJ1biB0aW1lOiIsIHVpRnJpZW5kbHlOdW1iZXIodGhpcy5ydW5UaW1lKSk7CisgICAg
ICAgIGNvbnNvbGUubG9nKCIgICAgU3RhcnR1cDoiLCB1aUZyaWVuZGx5TnVtYmVyKHRoaXMuc3Rh
cnR1cFRpbWUpKTsKKyAgICAgICAgY29uc29sZS5sb2coIiAgICBSdW4gdGltZToiLCB1aUZyaWVu
ZGx5TnVtYmVyKHRoaXMucnVuVGltZSkpOwogICAgICAgICBpZiAoUkFNaWZpY2F0aW9uKSB7Ci0g
ICAgICAgICAgICBwcmludCgiICAgIEN1cnJlbnQgRm9vdHByaW50OiIsIHVpRnJpZW5kbHlOdW1i
ZXIodGhpcy5jdXJyZW50Rm9vdHByaW50KSk7Ci0gICAgICAgICAgICBwcmludCgiICAgIFBlYWsg
Rm9vdHByaW50OiIsIHVpRnJpZW5kbHlOdW1iZXIodGhpcy5wZWFrRm9vdHByaW50KSk7CisgICAg
ICAgICAgICBjb25zb2xlLmxvZygiICAgIEN1cnJlbnQgRm9vdHByaW50OiIsIHVpRnJpZW5kbHlO
dW1iZXIodGhpcy5jdXJyZW50Rm9vdHByaW50KSk7CisgICAgICAgICAgICBjb25zb2xlLmxvZygi
ICAgIFBlYWsgRm9vdHByaW50OiIsIHVpRnJpZW5kbHlOdW1iZXIodGhpcy5wZWFrRm9vdHByaW50
KSk7CiAgICAgICAgIH0KLSAgICAgICAgcHJpbnQoIiAgICBTY29yZToiLCB1aUZyaWVuZGx5TnVt
YmVyKHRoaXMuc2NvcmUpKTsKKyAgICAgICAgY29uc29sZS5sb2coIiAgICBTY29yZToiLCB1aUZy
aWVuZGx5TnVtYmVyKHRoaXMuc2NvcmUpKTsKICAgICB9CiB9OwogCkluZGV4OiBQZXJmb3JtYW5j
ZVRlc3RzL0pldFN0cmVhbTIvd2FzbS1jbGkuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gUGVyZm9ybWFuY2VU
ZXN0cy9KZXRTdHJlYW0yL3dhc20tY2xpLmpzCShub25leGlzdGVudCkKKysrIFBlcmZvcm1hbmNl
VGVzdHMvSmV0U3RyZWFtMi93YXNtLWNsaS5qcwkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQ2
IEBACisKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisg
KiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICog
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyovCisKK2NvbnN0IGlzSW5Ccm93c2VyID0gZmFsc2U7Citjb25zb2xlID0g
eworICAgIGxvZzogKCkgPT4geyB9Cit9CisKK3Rlc3RMaXN0ID0gWyJIYXNoU2V0LXdhc20iLCAi
dHNmLXdhc20iLCAicXVpY2tzb3J0LXdhc20iLCAiZ2NjLWxvb3BzLXdhc20iLCAicmljaGFyZHMt
d2FzbSJdOworCitSQU1pZmljYXRpb24gPSBmYWxzZTsKKworbG9hZCgiLi9KZXRTdHJlYW1Ecml2
ZXIuanMiKTsKKworYXN5bmMgZnVuY3Rpb24gcnVuSmV0U3RyZWFtKCkgeworICAgIHRyeSB7Cisg
ICAgICAgIGF3YWl0IEpldFN0cmVhbS5pbml0aWFsaXplKCk7CisgICAgICAgIEpldFN0cmVhbS5z
dGFydCgpOworICAgIH0gY2F0Y2ggKGUpIHsKKyAgICAgICAgdGhyb3cgZTsKKyAgICB9Cit9City
dW5KZXRTdHJlYW0oKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjU4
MzUwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpA
QCAtMSwzICsxLDEwNCBAQAorMjAyMC0wMy0xMiAgU2FhbSBCYXJhdGkgIDxzYmFyYXRpQGFwcGxl
LmNvbT4KKworICAgICAgICBJbXBsZW1lbnQgMUdCIG9mIGV4ZWN1dGFibGUgbWVtb3J5IG9uIGFy
bTY0CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMDg0
OTAKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUaGlz
IHBhdGNoIGltcGxlbWVudHMgdGhlIDFHQiBleGVjdXRhYmxlIG1lbW9yeSBzcGFjZSBvbiBhcm02
NC4gVG8gbWFrZSB0aGlzCisgICAgICAgIHdvcmssIHdlIGltcGxlbWVudCBqdW1wcyBsYXJnZXIg
dGhhbiArLy0xMjhNQiB0byB1c2UganVtcCBpc2xhbmRzLiBKdW1wIGlzbGFuZHMKKyAgICAgICAg
d29yayBieSBzcGxpdHRpbmcgdXAgdGhlIH4xR0IgcmVnaW9uIGludG8gOSAxMTJNQiBjaHVua3Mg
KDEwMDggTUIgdG90YWwpLiBFYWNoCisgICAgICAgIGNodW5rIGlzIHNwbGl0IGludG8gdHdvOiA5
Nk1CIG9mIGV4ZWN1dGFibGUgcmVnaW9uLCBhbmQgMTZNQiBvZiBqdW1wIGlzbGFuZCByZWdpb24u
CisgICAgICAgIFdpdGggdGhpcyBzcGxpdCwgYW55IGp1bXAgaW5zaWRlIGEganVtcCBpc2xhbmQg
cmVnaW9uIGNhbiBnZXQgdG8gdGhlIGFkamFjZW50CisgICAgICAgIGlzbGFuZCAoZm9yd2FyZHMg
b3IgYmFja3dhcmRzKSBpbiBhIHNpbmdsZSArLy0xMjhNQiBqdW1wLiBXaGVuIGxpbmtpbmcgYSBq
dW1wCisgICAgICAgIGZyb20gQSB0byBCLCB3aGVyZSB8QSAtIEJ8ID4gMTI4TUIsIHdlIGluc3Rl
YWQgcG9pbnQgdGhlIGp1bXAgdG8gYW4gaXNsYW5kLAorICAgICAgICB3aGVyZSB0aGlzIGlzbGFu
ZCBoYXMgYSBwb3RlbnRpYWwgc2VyaWVzIG9mIGp1bXBzIHRoYXQgZmluYWxseSBsYW5kcyBhdCBC
LgorICAgICAgICAKKyAgICAgICAgVG8gYWxsb2NhdGUgZXhlY3V0YWJsZSBtZW1vcnksIHVzZSBh
IE1ldGFBbGxvY2F0b3IgZm9yIGVhY2ggOTZNQiBjaHVuay4gVG8KKyAgICAgICAgYWxsb2NhdGUg
aXNsYW5kcywgd2UgaGF2ZSBhIGJpdCB2ZWN0b3Igd2UgdXNlIHRvIHRyYWNrIHVzZWQgYW5kIGZy
ZWVkIGlzbGFuZHMuCisgICAgICAgIFdlIG9ubHkgZ3JvdyB0aGlzIGJpdCB2ZWN0b3IgYXMgaXNs
YW5kcyBhcmUgYWxsb2NhdGVkLCBzbyBpdCBmcmVxdWVudGx5CisgICAgICAgIHJlbWFpbnMgZW1w
dHkgb3IgdmVyeSBzbWFsbC4KKyAgICAgICAgCisgICAgICAgIFRoZSBnb2FsIG9mIHRoaXMgcGF0
Y2ggaXMgdG8gaGF2ZSBtaW5pbWFsIHBlcmYgaW1wYWN0IHdoZW4gbm90IHVzaW5nIGlzbGFuZHMs
CisgICAgICAgIHNvIHRoZSBkYXRhIHN0cnVjdHVyZXMgYXJlIGRlc2lnbmVkIHRvIG9ubHkgaW5j
dXIgb3ZlcmhlYWQgd2hlbiBhY3R1YWxseSB1c2luZworICAgICAgICBpc2xhbmRzLiBXZSBleHBl
Y3QgdGhlIHVzZSBvZiBpc2xhbmRzIHRvIGJlIG1pbmltYWwuIFdlIHVzZSBhIHJlZCBibGFjayB0
cmVlCisgICAgICAgIHRvIHRyYWNrIGFsbCBpc2xhbmQgbG9jYXRpb25zLiBUaGlzIGFsbG93cyB1
cyB0byBkZWFsbG9jYXRlIGFsbCBpc2xhbmRzIHdoZW4KKyAgICAgICAgYW4gZXhlY3V0YWJsZSBt
ZW1vcnkgaGFuZGxlIGlzIGZyZWVkLiBUeXBpY2FsbHksIHRoaXMgcmVkIGJsYWNrIHRyZWUgaXMg
ZW1wdHksCisgICAgICAgIHNvIGZyZWVpbmcgYW4gZXhlY3V0YWJsZSBtZW1vcnkgaGFuZGxlIGlu
Y3VycyBubyBleHRyYSBvdmVyaGVhZC4KKyAgICAgICAgCisgICAgICAgIFRvIG1ha2UgaXNsYW5k
cyB3b3JrIGZvciBXYXNtLCB3ZSBub3cgaGF2ZSB0byBsaW5rIHRpZXIgdXAgY29kZSBpbiB0d28g
cGhhc2VzLgorICAgICAgICBQcmV2aW91c2x5LCB3ZSB3b3VsZCBqdXN0IHBhdGNoIGp1bXBzIGNv
bmN1cnJlbnRseSB0byBXYXNtIHRocmVhZHMgcnVubmluZyBhZnRlcgorICAgICAgICByZXNldHRp
bmcgdGhlIGljYWNoZSwga25vd2luZyB0aGF0IHdlIHdvdWxkIGJlIGFibGUgdG8gYXRvbWljYWxs
eSB1cGRhdGUgdGhlIGp1bXAKKyAgICAgICAgaW5zdHJ1Y3Rpb24gdG8gcG9pbnQgdG8gdGhlIG5l
dyBkZXN0aW5hdGlvbi4gSG93ZXZlciwgbm93IHdoZW4gcmVwYXRjaGluZyB0aGVzZQorICAgICAg
ICBqdW1wcyBpbiBhIHdvcmxkIHdpdGgganVtcCBpc2xhbmRzLCB3ZSBtaWdodCBuZWVkIHRvIGFs
bG9jYXRlIGlzbGFuZHMgZGVwZW5kaW5nCisgICAgICAgIG9uIHRoZSBqdW1wIGxvY2F0aW9uIGFu
ZCBpdHMgdGFyZ2V0LiBTbyB3ZSBub3cgYWxsb2NhdGUgYW5kIGNvbGxlY3QgdGhlIHNldCBvZiBp
c2xhbmRzLAorICAgICAgICB0aGVuIHJlc2V0IHRoZSBpY2FjaGUsIHRoZW4gYXRvbWljYWxseSB1
cGRhdGUgdGhlIGJyYW5jaCB0byBwb2ludCB0byB0aGUgZGVzdGluYXRpb24KKyAgICAgICAgKG9y
IGFuIGlzbGFuZCB0aGF0IGp1bXBzIHRvIHRoZSBkZXN0aW5hdGlvbikuIE9uZSBpbXBvcnRhbnQg
aW1wbGVtZW50YXRpb24gZGV0YWlsCisgICAgICAgIGhlcmUgaXMgdGhhdCBmb3Igbm9ybWFsIGlz
bGFuZCByZXBhdGNoaW5nLCBpZiB3ZSBoYXZlIGEganVtcCBmcm9tIEEgdG8gQiwgYW5kIGl0Cisg
ICAgICAgIGFsbG9jYXRlcyBhIHNldCBpZiBpc2xhbmRzIFgsIHdlIHVzdWFsbHkgY2FuIGRlYWxs
b2NhdGUgWCB3aGVuIHJlcGF0Y2hpbmcgQSB0byBnbyB0byBCJy4KKyAgICAgICAgVGhpcyBpcyBi
ZWNhdXNlIHRoZSB0eXBpY2FsIHJlcGF0Y2ggc2NlbmFyaW8gaW4gSlMgaGFwcGVucyB3aGVuIHRo
YXQgY29kZSBpcyBub3QgYmVpbmcKKyAgICAgICAgZXhlY3V0ZWQuIEZvciBXYXNtIHRob3VnaCwg
dGhvc2UgaXNsYW5kcyBYIG1pZ2h0IGJlIHJ1bm5pbmcgd2hpbGUgd2Ugd2FudCB0byByZXBhdGNo
CisgICAgICAgIEEgdG8gZ28gdG8gQicuIFNvIGluc3RlYWQgb2YgZGVhbGxvY2F0aW5nIFgsIHdl
IGp1c3QgYXBwZW5kIHRvIFggaW4gdGhpcyBzY2VuYXJpbywgYW5kCisgICAgICAgIHdlIGZyZWUg
dGhlIG5ldyBzZXQgWCcgd2hlbiB0aGUgY29kZSBpdHNlbGYgaXMgZnJlZWQuCisgICAgICAgIAor
ICAgICAgICAoVGhpcyBwYXRjaCBhbHNvIGZpeGVzIGEgYnVnIGluIHRoZSBXYXNtIExMSW50IHRv
IEJCUSB0aWVyIHVwIHRoYXQgSSBzcG90dGVkLAorICAgICAgICB3aGVyZSB3ZSB3b3VsZCBwdWJs
aXNoIGEgTExJbnQgY2FsbGVlJ3MgQkJRIHJlcGxhY2VtZW50IGJlZm9yZSB3ZSBmaW5pc2hlZAor
ICAgICAgICBsaW5raW5nIHRoZSBvdXRnb2luZyBjYWxscyBvZiB0aGUgQkJRIHJlcGxhY2VtZW50
LikKKyAgICAgICAgCisgICAgICAgIFRoaXMgcGF0Y2ggYWxzbyByZW1vdmVzIHRoZSBvbGQgIkNv
ZGVQcm9maWxpbmciIGNvZGUgdGhhdCBoYXMgYmVlbiB1bnVzZWQgZm9yCisgICAgICAgIGEgbG9u
ZyB0aW1lLgorCisgICAgICAgICogSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvajoKKyAgICAgICAgKiBTb3VyY2VzLnR4dDoKKyAgICAgICAgKiBhc3NlbWJsZXIvQVJNNjRB
c3NlbWJsZXIuaDoKKyAgICAgICAgKEpTQzo6QVJNNjRBc3NlbWJsZXI6OmIpOgorICAgICAgICAo
SlNDOjpBUk02NEFzc2VtYmxlcjo6YmwpOgorICAgICAgICAoSlNDOjpBUk02NEFzc2VtYmxlcjo6
cmVwbGFjZVdpdGhKdW1wKToKKyAgICAgICAgKEpTQzo6QVJNNjRBc3NlbWJsZXI6OnByZXBhcmVG
b3JBdG9taWNSZWxpbmtKdW1wQ29uY3VycmVudGx5KToKKyAgICAgICAgKEpTQzo6QVJNNjRBc3Nl
bWJsZXI6OnByZXBhcmVGb3JBdG9taWNSZWxpbmtDYWxsQ29uY3VycmVudGx5KToKKyAgICAgICAg
KEpTQzo6QVJNNjRBc3NlbWJsZXI6OmNvbXB1dGVKdW1wVHlwZSk6CisgICAgICAgIChKU0M6OkFS
TTY0QXNzZW1ibGVyOjpjYW5FbWl0SnVtcCk6CisgICAgICAgIChKU0M6OkFSTTY0QXNzZW1ibGVy
OjpsaW5rSnVtcE9yQ2FsbCk6CisgICAgICAgIChKU0M6OkFSTTY0QXNzZW1ibGVyOjpsaW5rQ29t
cGFyZUFuZEJyYW5jaCk6CisgICAgICAgIChKU0M6OkFSTTY0QXNzZW1ibGVyOjpsaW5rQ29uZGl0
aW9uYWxCcmFuY2gpOgorICAgICAgICAoSlNDOjpBUk02NEFzc2VtYmxlcjo6bGlua1Rlc3RBbmRC
cmFuY2gpOgorICAgICAgICAqIGFzc2VtYmxlci9BYnN0cmFjdE1hY3JvQXNzZW1ibGVyLmg6Cisg
ICAgICAgIChKU0M6OkFic3RyYWN0TWFjcm9Bc3NlbWJsZXI6OnByZXBhcmVGb3JBdG9taWNSZXBh
dGNoTmVhckNhbGxDb25jdXJyZW50bHkpOgorICAgICAgICAqIGFzc2VtYmxlci9MaW5rQnVmZmVy
LmNwcDoKKyAgICAgICAgKEpTQzo6TGlua0J1ZmZlcjo6Y29weUNvbXBhY3RBbmRMaW5rQ29kZSk6
CisgICAgICAgIChKU0M6OkxpbmtCdWZmZXI6OmxpbmtDb2RlKToKKyAgICAgICAgKEpTQzo6TGlu
a0J1ZmZlcjo6YWxsb2NhdGUpOgorICAgICAgICAqIGFzc2VtYmxlci9MaW5rQnVmZmVyLmg6Cisg
ICAgICAgIChKU0M6OkxpbmtCdWZmZXI6OkxpbmtCdWZmZXIpOgorICAgICAgICAqIGFzc2VtYmxl
ci9NYWNyb0Fzc2VtYmxlckNvZGVSZWYuaDoKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJD
b2RlUmVmOjpNYWNyb0Fzc2VtYmxlckNvZGVSZWYpOgorICAgICAgICAqIGppdC9FeGVjdXRhYmxl
QWxsb2NhdG9yLmNwcDoKKyAgICAgICAgKEpTQzo6aW5pdGlhbGl6ZUpJVFBhZ2VSZXNlcnZhdGlv
bik6CisgICAgICAgIChKU0M6OkV4ZWN1dGFibGVBbGxvY2F0b3I6OmluaXRpYWxpemVVbmRlcmx5
aW5nQWxsb2NhdG9yKToKKyAgICAgICAgKEpTQzo6RXhlY3V0YWJsZUFsbG9jYXRvcjo6aXNWYWxp
ZCBjb25zdCk6CisgICAgICAgIChKU0M6OkV4ZWN1dGFibGVBbGxvY2F0b3I6OmFsbG9jYXRlKToK
KyAgICAgICAgKEpTQzo6RXhlY3V0YWJsZUFsbG9jYXRvcjo6Z2V0SnVtcElzbGFuZFRvKToKKyAg
ICAgICAgKEpTQzo6RXhlY3V0YWJsZUFsbG9jYXRvcjo6Z2V0SnVtcElzbGFuZFRvQ29uY3VycmVu
dGx5KToKKyAgICAgICAgKEpTQzo6Rml4ZWRWTVBvb2xFeGVjdXRhYmxlQWxsb2NhdG9yOjp+Rml4
ZWRWTVBvb2xFeGVjdXRhYmxlQWxsb2NhdG9yKTogRGVsZXRlZC4KKyAgICAgICAgKiBqaXQvRXhl
Y3V0YWJsZUFsbG9jYXRvci5oOgorICAgICAgICAoSlNDOjpFeGVjdXRhYmxlQWxsb2NhdG9yQmFz
ZTo6YWxsb2NhdGUpOgorICAgICAgICAqIHJ1bnRpbWUvQ29tbW9uU2xvd1BhdGhzLmNwcDoKKyAg
ICAgICAgKiBydW50aW1lL0NvbXBsZXRpb24uY3BwOgorICAgICAgICAoSlNDOjpldmFsdWF0ZSk6
CisgICAgICAgICogcnVudGltZS9KU01vZHVsZUxvYWRlci5jcHA6CisgICAgICAgIChKU0M6Om1v
ZHVsZUxvYWRlclBhcnNlTW9kdWxlKToKKyAgICAgICAgKiBydW50aW1lL09wdGlvbnNMaXN0Lmg6
CisgICAgICAgICogdG9vbHMvQ29kZVByb2ZpbGUuY3BwOiBSZW1vdmVkLgorICAgICAgICAqIHRv
b2xzL0NvZGVQcm9maWxlLmg6IFJlbW92ZWQuCisgICAgICAgICogdG9vbHMvQ29kZVByb2ZpbGlu
Zy5jcHA6IFJlbW92ZWQuCisgICAgICAgICogdG9vbHMvQ29kZVByb2ZpbGluZy5oOiBSZW1vdmVk
LgorICAgICAgICAqIHdhc20vV2FzbUJCUVBsYW4uY3BwOgorICAgICAgICAoSlNDOjpXYXNtOjpC
QlFQbGFuOjp3b3JrKToKKyAgICAgICAgKiB3YXNtL1dhc21PTUdGb3JPU1JFbnRyeVBsYW4uY3Bw
OgorICAgICAgICAoSlNDOjpXYXNtOjpPTUdGb3JPU1JFbnRyeVBsYW46OndvcmspOgorICAgICAg
ICAqIHdhc20vV2FzbU9NR1BsYW4uY3BwOgorICAgICAgICAoSlNDOjpXYXNtOjpPTUdQbGFuOjp3
b3JrKToKKwogMjAyMC0wMy0xMiAgWXVzdWtlIFN1enVraSAgPHlzdXp1a2lAYXBwbGUuY29tPgog
CiAgICAgICAgIFtKU0NdIFVzZSBDYWNoZWFibGVJZGVudGlmaWVyIGluIEJ5VmFsSW5mbwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL1NvdXJjZXMudHh0Cj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9Tb3VyY2VzLnR4dAkocmV2aXNpb24gMjU4MzUwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL1NvdXJjZXMudHh0CSh3b3JraW5nIGNvcHkpCkBAIC05OTUsOCArOTk1
LDYgQEAgcnVudGltZS9XaWRlbmluZ051bWJlclByZWRpY3Rpb25GdXp6ZXJBZwogSlNDQnVpbHRp
bnMuY3BwCiAKIHRvb2xzL0NlbGxMaXN0LmNwcAotdG9vbHMvQ29kZVByb2ZpbGUuY3BwCi10b29s
cy9Db2RlUHJvZmlsaW5nLmNwcAogdG9vbHMvQ29tcGlsZXJUaW1pbmdTY29wZS5jcHAKIHRvb2xz
L0Z1bmN0aW9uT3ZlcnJpZGVzLmNwcAogdG9vbHMvRnVuY3Rpb25XaGl0ZWxpc3QuY3BwCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3Qu
cGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENv
cmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gMjU4MzUwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJ
KHdvcmtpbmcgY29weSkKQEAgLTQwNzEsOCArNDA3MSw2IEBACiAJCTg2MDE2MUUwMEYzQTgzQzEw
MEY4NDcxMCAvKiBNYWNyb0Fzc2VtYmxlclg4Ni5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBNYWNyb0Fzc2VtYmxlclg4Ni5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQk4NjAxNjFFMTBGM0E4M0MxMDBGODQ3MTAgLyogTWFjcm9Bc3NlbWJsZXJYODZfNjQuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTWFjcm9Bc3NlbWJsZXJYODZfNjQuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJODYwMTYxRTIwRjNBODNDMTAwRjg0NzEwIC8qIE1h
Y3JvQXNzZW1ibGVyWDg2Q29tbW9uLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IE1hY3JvQXNzZW1ibGVyWDg2Q29tbW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0J
CTg2MDNDRUYyMTRDNzU0NjQwMEFFNTlFMyAvKiBDb2RlUHJvZmlsaW5nLmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IENvZGVQcm9maWxpbmcuY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwotCQk4NjAzQ0VGMzE0Qzc1NDY0MDBBRTU5RTMgLyogQ29kZVByb2Zp
bGluZy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBDb2RlUHJvZmlsaW5nLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTg2MDRGNEYyMTQzQTZDNDQwMEIyOTVGNSAv
KiBDaGFuZ2VMb2cgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5
cGUgPSB0ZXh0OyBsaW5lRW5kaW5nID0gMDsgcGF0aCA9IENoYW5nZUxvZzsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJODYwNkRERTkxOERBNDRBQjAwQTM4M0QwIC8qIElkZW50aWZpZXJJ
bmxpbmVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IElkZW50aWZpZXJJbmxp
bmVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTg2MTJFNENCMTUyMjkxODQwMEM4
MzZCRSAvKiBNYXRjaFJlc3VsdC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBN
YXRjaFJlc3VsdC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtNDExOCw4ICs0MTE2
LDYgQEAKIAkJODZBREQxNDMwRkRERUE5ODAwMDZGRkNDIC8qIEFSTXY3UmVnaXN0ZXJzLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEFSTXY3UmVnaXN0ZXJzLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTg2QUREMTQ0MEZEREVBOTgwMDA2RUVDMiAvKiBNYWNyb0Fz
c2VtYmxlckFSTXY3LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE1hY3JvQXNz
ZW1ibGVyQVJNdjcuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJODZCNTgyMkMxNEQy
MkY1RjAwQTlDMzA2IC8qIFByb2ZpbGVUcmVlTm9kZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBQcm9maWxlVHJlZU5vZGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
LQkJODZCNTgyMkUxNEQyMzczQjAwQTlDMzA2IC8qIENvZGVQcm9maWxlLmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IENvZGVQcm9maWxlLmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKLQkJODZCNTgyMkYxNEQyMzczQjAwQTlDMzA2IC8qIENvZGVQcm9maWxl
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENvZGVQcm9maWxlLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTg2QjU4MjZBMTREMzVENTEwMEE5QzMwNiAvKiBUaWVy
ZWRNTWFwQXJyYXkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVGllcmVkTU1h
cEFycmF5Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTg2QkY2NDJBMTQ4REIyQjUw
MDRERTM2QSAvKiBJbnRyaW5zaWMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
SW50cmluc2ljLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTg2QzM2RUU5MEVFMTI4
OUQwMEIzREY1OSAvKiBNYWNyb0Fzc2VtYmxlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBNYWNyb0Fzc2VtYmxlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAt
NzY3NywxMCArNzY3Myw2IEBACiAJCQkJRkUxQkQwMUIxRTcyMDAyMTAwMTM0QkM5IC8qIENlbGxM
aXN0LmNwcCAqLywKIAkJCQlGRTFCRDAxQzFFNzIwMDIxMDAxMzRCQzkgLyogQ2VsbExpc3QuaCAq
LywKIAkJCQlGRTFCRDAyMDFFNzIwMjcwMDAxMzRCQzkgLyogQ2VsbFByb2ZpbGUuaCAqLywKLQkJ
CQk4NkI1ODIyRTE0RDIzNzNCMDBBOUMzMDYgLyogQ29kZVByb2ZpbGUuY3BwICovLAotCQkJCTg2
QjU4MjJGMTREMjM3M0IwMEE5QzMwNiAvKiBDb2RlUHJvZmlsZS5oICovLAotCQkJCTg2MDNDRUYy
MTRDNzU0NjQwMEFFNTlFMyAvKiBDb2RlUHJvZmlsaW5nLmNwcCAqLywKLQkJCQk4NjAzQ0VGMzE0
Qzc1NDY0MDBBRTU5RTMgLyogQ29kZVByb2ZpbGluZy5oICovLAogCQkJCTBGNEYxMUU3MjA5QkNE
QTEwMDcwOTY1NCAvKiBDb21waWxlclRpbWluZ1Njb3BlLmNwcCAqLywKIAkJCQkwRjRGMTFFNjIw
OUJDREExMDA3MDk2NTQgLyogQ29tcGlsZXJUaW1pbmdTY29wZS5oICovLAogCQkJCUZFNEJGRjI5
MUFENDc2RTcwMDA4OEY4NyAvKiBGdW5jdGlvbk92ZXJyaWRlcy5jcHAgKi8sCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL0FSTTY0QXNzZW1ibGVyLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9BUk02NEFzc2VtYmxlci5oCShyZXZp
c2lvbiAyNTgzNTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL0FSTTY0QXNz
ZW1ibGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTc4MywxMiArNzgzLDkgQEAgcHVibGljOgogICAg
ICAgICBpbnNuKGRhdGFQcm9jZXNzaW5nMlNvdXJjZShEQVRBU0laRSwgcm0sIERhdGFPcF9BU1JW
LCBybiwgcmQpKTsKICAgICB9CiAKLSAgICBBTFdBWVNfSU5MSU5FIHZvaWQgYihpbnQzMl90IG9m
ZnNldCA9IDApCisgICAgQUxXQVlTX0lOTElORSB2b2lkIGIoKQogICAgIHsKLSAgICAgICAgQVNT
RVJUKCEob2Zmc2V0ICYgMykpOwotICAgICAgICBvZmZzZXQgPj49IDI7Ci0gICAgICAgIEFTU0VS
VChvZmZzZXQgPT0gKG9mZnNldCA8PCA2KSA+PiA2KTsKLSAgICAgICAgaW5zbih1bmNvbmRpdGlv
bmFsQnJhbmNoSW1tZWRpYXRlKGZhbHNlLCBvZmZzZXQpKTsKKyAgICAgICAgaW5zbih1bmNvbmRp
dGlvbmFsQnJhbmNoSW1tZWRpYXRlKGZhbHNlLCAwKSk7CiAgICAgfQogCiAgICAgQUxXQVlTX0lO
TElORSB2b2lkIGJfY29uZChDb25kaXRpb24gY29uZCwgaW50MzJfdCBvZmZzZXQgPSAwKQpAQCAt
ODMxLDExICs4MjgsOSBAQCBwdWJsaWM6CiAgICAgICAgIGluc24obG9naWNhbFNoaWZ0ZWRSZWdp
c3RlcihEQVRBU0laRSwgc2V0RmxhZ3MgPyBMb2dpY2FsT3BfQU5EUyA6IExvZ2ljYWxPcF9BTkQs
IHNoaWZ0LCB0cnVlLCBybSwgYW1vdW50LCBybiwgcmQpKTsKICAgICB9CiAKLSAgICBBTFdBWVNf
SU5MSU5FIHZvaWQgYmwoaW50MzJfdCBvZmZzZXQgPSAwKQorICAgIEFMV0FZU19JTkxJTkUgdm9p
ZCBibCgpCiAgICAgewotICAgICAgICBBU1NFUlQoIShvZmZzZXQgJiAzKSk7Ci0gICAgICAgIG9m
ZnNldCA+Pj0gMjsKLSAgICAgICAgaW5zbih1bmNvbmRpdGlvbmFsQnJhbmNoSW1tZWRpYXRlKHRy
dWUsIG9mZnNldCkpOworICAgICAgICBpbnNuKHVuY29uZGl0aW9uYWxCcmFuY2hJbW1lZGlhdGUo
dHJ1ZSwgMCkpOwogICAgIH0KIAogICAgIEFMV0FZU19JTkxJTkUgdm9pZCBibHIoUmVnaXN0ZXJJ
RCBybikKQEAgLTI1ODIsNiArMjU3NywxMyBAQCBwdWJsaWM6CiAgICAgewogICAgICAgICBpbnRw
dHJfdCBvZmZzZXQgPSAocmVpbnRlcnByZXRfY2FzdDxpbnRwdHJfdD4odG8pIC0gcmVpbnRlcnBy
ZXRfY2FzdDxpbnRwdHJfdD4od2hlcmUpKSA+PiAyOwogICAgICAgICBBU1NFUlQoc3RhdGljX2Nh
c3Q8aW50PihvZmZzZXQpID09IG9mZnNldCk7CisKKyAgICAgICAgaWYgKCFpc0ludDwyNj4ob2Zm
c2V0KSkgeworICAgICAgICAgICAgdG8gPSBFeGVjdXRhYmxlQWxsb2NhdG9yOjpzaW5nbGV0b24o
KS5nZXRKdW1wSXNsYW5kVG8od2hlcmUsIHRvKTsKKyAgICAgICAgICAgIG9mZnNldCA9IChiaXR3
aXNlX2Nhc3Q8aW50cHRyX3Q+KHRvKSAtIGJpdHdpc2VfY2FzdDxpbnRwdHJfdD4od2hlcmUpKSA+
PiAyOworICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoaXNJbnQ8MjY+KG9mZnNldCkpOworICAg
ICAgICB9CisKICAgICAgICAgaW50IGluc24gPSB1bmNvbmRpdGlvbmFsQnJhbmNoSW1tZWRpYXRl
KGZhbHNlLCBzdGF0aWNfY2FzdDxpbnQ+KG9mZnNldCkpOwogICAgICAgICBSRUxFQVNFX0FTU0VS
VChyb3VuZFVwVG9NdWx0aXBsZU9mPGluc3RydWN0aW9uU2l6ZT4od2hlcmUpID09IHdoZXJlKTsK
ICAgICAgICAgcGVyZm9ybUpJVE1lbWNweSh3aGVyZSwgJmluc24sIHNpemVvZihpbnQpKTsKQEAg
LTI3NzEsNiArMjc3MywyNSBAQCBwdWJsaWM6CiAgICAgICAgIHJlbGlua0p1bXBPckNhbGw8QnJh
bmNoVHlwZV9DQUxMPihyZWludGVycHJldF9jYXN0PGludCo+KGZyb20pIC0gMSwgcmVpbnRlcnBy
ZXRfY2FzdDxjb25zdCBpbnQqPihmcm9tKSAtIDEsIHRvKTsKICAgICAgICAgY2FjaGVGbHVzaChy
ZWludGVycHJldF9jYXN0PGludCo+KGZyb20pIC0gMSwgc2l6ZW9mKGludCkpOwogICAgIH0KKwor
I2lmIFVTRShKVU1QX0lTTEFORFMpCisgICAgc3RhdGljIHZvaWQqIHByZXBhcmVGb3JBdG9taWNS
ZWxpbmtKdW1wQ29uY3VycmVudGx5KHZvaWQqIGZyb20sIHZvaWQqIHRvKQorICAgIHsKKyAgICAg
ICAgaW50cHRyX3Qgb2Zmc2V0ID0gKGJpdHdpc2VfY2FzdDxpbnRwdHJfdD4odG8pIC0gYml0d2lz
ZV9jYXN0PGludHB0cl90Pihmcm9tKSkgPj4gMjsKKyAgICAgICAgQVNTRVJUKHN0YXRpY19jYXN0
PGludD4ob2Zmc2V0KSA9PSBvZmZzZXQpOworCisgICAgICAgIGlmIChpc0ludDwyNj4ob2Zmc2V0
KSkKKyAgICAgICAgICAgIHJldHVybiB0bzsKKworICAgICAgICByZXR1cm4gRXhlY3V0YWJsZUFs
bG9jYXRvcjo6c2luZ2xldG9uKCkuZ2V0SnVtcElzbGFuZFRvQ29uY3VycmVudGx5KGZyb20sIHRv
KTsKKyAgICB9CisKKyAgICBzdGF0aWMgdm9pZCogcHJlcGFyZUZvckF0b21pY1JlbGlua0NhbGxD
b25jdXJyZW50bHkodm9pZCogZnJvbSwgdm9pZCogdG8pCisgICAgeworICAgICAgICBmcm9tID0g
c3RhdGljX2Nhc3Q8dm9pZCo+KGJpdHdpc2VfY2FzdDxpbnQqPihmcm9tKSAtIDEpOworICAgICAg
ICByZXR1cm4gcHJlcGFyZUZvckF0b21pY1JlbGlua0p1bXBDb25jdXJyZW50bHkoZnJvbSwgdG8p
OworICAgIH0KKyNlbmRpZgogICAgIAogICAgIHN0YXRpYyB2b2lkIHJlcGF0Y2hDb21wYWN0KHZv
aWQqIHdoZXJlLCBpbnQzMl90IHZhbHVlKQogICAgIHsKQEAgLTI4NzIsNyArMjg5Myw3IEBAIHB1
YmxpYzoKICAgICAgICAgICAgICAgICByZXR1cm4gTGlua0p1bXBDb25kaXRpb25EaXJlY3Q7CiAK
ICAgICAgICAgICAgIHJldHVybiBMaW5rSnVtcENvbmRpdGlvbjsKLSAgICAgICAgICAgIH0KKyAg
ICAgICAgfQogICAgICAgICBjYXNlIEp1bXBDb21wYXJlQW5kQnJhbmNoOiAgewogICAgICAgICAg
ICAgQVNTRVJUKGlzNEJ5dGVBbGlnbmVkKGZyb20pKTsKICAgICAgICAgICAgIEFTU0VSVChpczRC
eXRlQWxpZ25lZCh0bykpOwpAQCAtMjk0NSw2ICsyOTY2LDEyIEBAIHB1YmxpYzoKICAgICAgICAg
fQogICAgIH0KIAorICAgIHN0YXRpYyBBTFdBWVNfSU5MSU5FIGJvb2wgY2FuRW1pdEp1bXAodm9p
ZCogZnJvbSwgdm9pZCogdG8pCisgICAgeworICAgICAgICBpbnRwdHJfdCBkaWZmID0gKGJpdHdp
c2VfY2FzdDxpbnRwdHJfdD4oZnJvbSkgLSBiaXR3aXNlX2Nhc3Q8aW50cHRyX3Q+KHRvKSkgPj4g
MjsKKyAgICAgICAgcmV0dXJuIGlzSW50PDI2PihkaWZmKTsKKyAgICB9CisKIHByb3RlY3RlZDoK
ICAgICB0ZW1wbGF0ZTxEYXRhc2l6ZSBzaXplPgogICAgIHN0YXRpYyBib29sIGNoZWNrTW92ayhp
bnQgaW5zbiwgaW50IF9odywgUmVnaXN0ZXJJRCBfcmQpCkBAIC0yOTk0LDkgKzMwMjEsMTUgQEAg
cHJvdGVjdGVkOgogICAgICAgICBBU1NFUlQoIShyZWludGVycHJldF9jYXN0PGludHB0cl90Pih0
bykgJiAzKSk7CiAgICAgICAgIGFzc2VydElzTm90VGFnZ2VkKHRvKTsKICAgICAgICAgYXNzZXJ0
SXNOb3RUYWdnZWQoZnJvbUluc3RydWN0aW9uKTsKLSAgICAgICAgaW50cHRyX3Qgb2Zmc2V0ID0g
KHJlaW50ZXJwcmV0X2Nhc3Q8aW50cHRyX3Q+KHRvKSAtIHJlaW50ZXJwcmV0X2Nhc3Q8aW50cHRy
X3Q+KGZyb21JbnN0cnVjdGlvbikpID4+IDI7CisgICAgICAgIGludHB0cl90IG9mZnNldCA9IChi
aXR3aXNlX2Nhc3Q8aW50cHRyX3Q+KHRvKSAtIGJpdHdpc2VfY2FzdDxpbnRwdHJfdD4oZnJvbUlu
c3RydWN0aW9uKSkgPj4gMjsKICAgICAgICAgQVNTRVJUKHN0YXRpY19jYXN0PGludD4ob2Zmc2V0
KSA9PSBvZmZzZXQpOwogCisgICAgICAgIGlmICghaXNJbnQ8MjY+KG9mZnNldCkpIHsKKyAgICAg
ICAgICAgIHRvID0gRXhlY3V0YWJsZUFsbG9jYXRvcjo6c2luZ2xldG9uKCkuZ2V0SnVtcElzbGFu
ZFRvKGJpdHdpc2VfY2FzdDx2b2lkKj4oZnJvbUluc3RydWN0aW9uKSwgdG8pOworICAgICAgICAg
ICAgb2Zmc2V0ID0gKGJpdHdpc2VfY2FzdDxpbnRwdHJfdD4odG8pIC0gYml0d2lzZV9jYXN0PGlu
dHB0cl90Pihmcm9tSW5zdHJ1Y3Rpb24pKSA+PiAyOworICAgICAgICAgICAgUkVMRUFTRV9BU1NF
UlQoaXNJbnQ8MjY+KG9mZnNldCkpOworICAgICAgICB9CisKICAgICAgICAgaW50IGluc24gPSB1
bmNvbmRpdGlvbmFsQnJhbmNoSW1tZWRpYXRlKGlzQ2FsbCwgc3RhdGljX2Nhc3Q8aW50PihvZmZz
ZXQpKTsKICAgICAgICAgUkVMRUFTRV9BU1NFUlQocm91bmRVcFRvTXVsdGlwbGVPZjxpbnN0cnVj
dGlvblNpemU+KGZyb20pID09IGZyb20pOwogICAgICAgICBjb3B5KGZyb20sICZpbnNuLCBzaXpl
b2YoaW50KSk7CkBAIC0zMDA4LDEyICszMDQxLDEyIEBAIHByb3RlY3RlZDoKICAgICAgICAgQVNT
RVJUKCEocmVpbnRlcnByZXRfY2FzdDxpbnRwdHJfdD4oZnJvbSkgJiAzKSk7CiAgICAgICAgIEFT
U0VSVCghKHJlaW50ZXJwcmV0X2Nhc3Q8aW50cHRyX3Q+KHRvKSAmIDMpKTsKICAgICAgICAgaW50
cHRyX3Qgb2Zmc2V0ID0gKHJlaW50ZXJwcmV0X2Nhc3Q8aW50cHRyX3Q+KHRvKSAtIHJlaW50ZXJw
cmV0X2Nhc3Q8aW50cHRyX3Q+KGZyb21JbnN0cnVjdGlvbikpID4+IDI7Ci0gICAgICAgIEFTU0VS
VChpc0ludDwyNj4ob2Zmc2V0KSk7CiAKICAgICAgICAgYm9vbCB1c2VEaXJlY3QgPSBpc0ludDwx
OT4ob2Zmc2V0KTsKICAgICAgICAgQVNTRVJUKHR5cGUgPT0gSW5kaXJlY3RCcmFuY2ggfHwgdXNl
RGlyZWN0KTsKIAogICAgICAgICBpZiAodXNlRGlyZWN0IHx8IHR5cGUgPT0gRGlyZWN0QnJhbmNo
KSB7CisgICAgICAgICAgICBBU1NFUlQoaXNJbnQ8MTk+KG9mZnNldCkpOwogICAgICAgICAgICAg
aW50IGluc24gPSBjb21wYXJlQW5kQnJhbmNoSW1tZWRpYXRlKGlzNjRCaXQgPyBEYXRhc2l6ZV82
NCA6IERhdGFzaXplXzMyLCBjb25kaXRpb24gPT0gQ29uZGl0aW9uTkUsIHN0YXRpY19jYXN0PGlu
dD4ob2Zmc2V0KSwgcnQpOwogICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQocm91bmRVcFRvTXVs
dGlwbGVPZjxpbnN0cnVjdGlvblNpemU+KGZyb20pID09IGZyb20pOwogICAgICAgICAgICAgY29w
eShmcm9tLCAmaW5zbiwgc2l6ZW9mKGludCkpOwpAQCAtMzAzNiwxMiArMzA2OSwxMiBAQCBwcm90
ZWN0ZWQ6CiAgICAgICAgIEFTU0VSVCghKHJlaW50ZXJwcmV0X2Nhc3Q8aW50cHRyX3Q+KGZyb20p
ICYgMykpOwogICAgICAgICBBU1NFUlQoIShyZWludGVycHJldF9jYXN0PGludHB0cl90Pih0bykg
JiAzKSk7CiAgICAgICAgIGludHB0cl90IG9mZnNldCA9IChyZWludGVycHJldF9jYXN0PGludHB0
cl90Pih0bykgLSByZWludGVycHJldF9jYXN0PGludHB0cl90Pihmcm9tSW5zdHJ1Y3Rpb24pKSA+
PiAyOwotICAgICAgICBBU1NFUlQoaXNJbnQ8MjY+KG9mZnNldCkpOwogCiAgICAgICAgIGJvb2wg
dXNlRGlyZWN0ID0gaXNJbnQ8MTk+KG9mZnNldCk7CiAgICAgICAgIEFTU0VSVCh0eXBlID09IElu
ZGlyZWN0QnJhbmNoIHx8IHVzZURpcmVjdCk7CiAKICAgICAgICAgaWYgKHVzZURpcmVjdCB8fCB0
eXBlID09IERpcmVjdEJyYW5jaCkgeworICAgICAgICAgICAgQVNTRVJUKGlzSW50PDE5PihvZmZz
ZXQpKTsKICAgICAgICAgICAgIGludCBpbnNuID0gY29uZGl0aW9uYWxCcmFuY2hJbW1lZGlhdGUo
c3RhdGljX2Nhc3Q8aW50PihvZmZzZXQpLCBjb25kaXRpb24pOwogICAgICAgICAgICAgUkVMRUFT
RV9BU1NFUlQocm91bmRVcFRvTXVsdGlwbGVPZjxpbnN0cnVjdGlvblNpemU+KGZyb20pID09IGZy
b20pOwogICAgICAgICAgICAgY29weShmcm9tLCAmaW5zbiwgc2l6ZW9mKGludCkpOwpAQCAtMzA2
NSwxMiArMzA5OCwxMiBAQCBwcm90ZWN0ZWQ6CiAgICAgICAgIEFTU0VSVCghKHJlaW50ZXJwcmV0
X2Nhc3Q8aW50cHRyX3Q+KHRvKSAmIDMpKTsKICAgICAgICAgaW50cHRyX3Qgb2Zmc2V0ID0gKHJl
aW50ZXJwcmV0X2Nhc3Q8aW50cHRyX3Q+KHRvKSAtIHJlaW50ZXJwcmV0X2Nhc3Q8aW50cHRyX3Q+
KGZyb21JbnN0cnVjdGlvbikpID4+IDI7CiAgICAgICAgIEFTU0VSVChzdGF0aWNfY2FzdDxpbnQ+
KG9mZnNldCkgPT0gb2Zmc2V0KTsKLSAgICAgICAgQVNTRVJUKGlzSW50PDI2PihvZmZzZXQpKTsK
IAogICAgICAgICBib29sIHVzZURpcmVjdCA9IGlzSW50PDE0PihvZmZzZXQpOwogICAgICAgICBB
U1NFUlQodHlwZSA9PSBJbmRpcmVjdEJyYW5jaCB8fCB1c2VEaXJlY3QpOwogCiAgICAgICAgIGlm
ICh1c2VEaXJlY3QgfHwgdHlwZSA9PSBEaXJlY3RCcmFuY2gpIHsKKyAgICAgICAgICAgIEFTU0VS
VChpc0ludDwxND4ob2Zmc2V0KSk7CiAgICAgICAgICAgICBpbnQgaW5zbiA9IHRlc3RBbmRCcmFu
Y2hJbW1lZGlhdGUoY29uZGl0aW9uID09IENvbmRpdGlvbk5FLCBzdGF0aWNfY2FzdDxpbnQ+KGJp
dE51bWJlciksIHN0YXRpY19jYXN0PGludD4ob2Zmc2V0KSwgcnQpOwogICAgICAgICAgICAgUkVM
RUFTRV9BU1NFUlQocm91bmRVcFRvTXVsdGlwbGVPZjxpbnN0cnVjdGlvblNpemU+KGZyb20pID09
IGZyb20pOwogICAgICAgICAgICAgY29weShmcm9tLCAmaW5zbiwgc2l6ZW9mKGludCkpOwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9BYnN0cmFjdE1hY3JvQXNzZW1ibGVy
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9BYnN0cmFj
dE1hY3JvQXNzZW1ibGVyLmgJKHJldmlzaW9uIDI1ODM1MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9hc3NlbWJsZXIvQWJzdHJhY3RNYWNyb0Fzc2VtYmxlci5oCSh3b3JraW5nIGNvcHkpCkBA
IC05MTksNiArOTE5LDIyIEBAIHB1YmxpYzoKICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JF
QUNIRUQoKTsKICAgICB9CiAKKyAgICB0ZW1wbGF0ZTxQdHJUYWcgY2FsbFRhZywgUHRyVGFnIGRl
c3RUYWc+CisgICAgc3RhdGljIENvZGVMb2NhdGlvbkxhYmVsPGRlc3RUYWc+IHByZXBhcmVGb3JB
dG9taWNSZXBhdGNoTmVhckNhbGxDb25jdXJyZW50bHkoQ29kZUxvY2F0aW9uTmVhckNhbGw8Y2Fs
bFRhZz4gbmVhckNhbGwsIENvZGVMb2NhdGlvbkxhYmVsPGRlc3RUYWc+IGRlc3RpbmF0aW9uKQor
ICAgIHsKKyNpZiBVU0UoSlVNUF9JU0xBTkRTKQorICAgICAgICBzd2l0Y2ggKG5lYXJDYWxsLmNh
bGxNb2RlKCkpIHsKKyAgICAgICAgY2FzZSBOZWFyQ2FsbE1vZGU6OlRhaWw6CisgICAgICAgICAg
ICByZXR1cm4gQ29kZUxvY2F0aW9uTGFiZWw8ZGVzdFRhZz4odGFnQ29kZVB0cjxkZXN0VGFnPihB
c3NlbWJsZXJUeXBlOjpwcmVwYXJlRm9yQXRvbWljUmVsaW5rSnVtcENvbmN1cnJlbnRseShuZWFy
Q2FsbC5kYXRhTG9jYXRpb24oKSwgZGVzdGluYXRpb24uZGF0YUxvY2F0aW9uKCkpKSk7CisgICAg
ICAgIGNhc2UgTmVhckNhbGxNb2RlOjpSZWd1bGFyOgorICAgICAgICAgICAgcmV0dXJuIENvZGVM
b2NhdGlvbkxhYmVsPGRlc3RUYWc+KHRhZ0NvZGVQdHI8ZGVzdFRhZz4oQXNzZW1ibGVyVHlwZTo6
cHJlcGFyZUZvckF0b21pY1JlbGlua0NhbGxDb25jdXJyZW50bHkobmVhckNhbGwuZGF0YUxvY2F0
aW9uKCksIGRlc3RpbmF0aW9uLnVudGFnZ2VkRXhlY3V0YWJsZUFkZHJlc3MoKSkpKTsKKyAgICAg
ICAgfQorI2Vsc2UKKyAgICAgICAgVU5VU0VEX1BBUkFNKG5lYXJDYWxsKTsKKyAgICAgICAgcmV0
dXJuIGRlc3RpbmF0aW9uOworI2VuZGlmCisgICAgfQorCiAgICAgdGVtcGxhdGU8UHRyVGFnIHRh
Zz4KICAgICBzdGF0aWMgdm9pZCByZXBhdGNoQ29tcGFjdChDb2RlTG9jYXRpb25EYXRhTGFiZWxD
b21wYWN0PHRhZz4gZGF0YUxhYmVsQ29tcGFjdCwgaW50MzJfdCB2YWx1ZSkKICAgICB7CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL0xpbmtCdWZmZXIuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTGlua0J1ZmZlci5jcHAJKHJl
dmlzaW9uIDI1ODM1MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTGlua0J1
ZmZlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEzMSw5ICsxMzEsOSBAQCBzdGF0aWMgQUxXQVlT
X0lOTElORSB2b2lkIHJlY29yZExpbmtPZmZzCiB9CiAKIHRlbXBsYXRlIDx0eXBlbmFtZSBJbnN0
cnVjdGlvblR5cGU+Ci12b2lkIExpbmtCdWZmZXI6OmNvcHlDb21wYWN0QW5kTGlua0NvZGUoTWFj
cm9Bc3NlbWJsZXImIG1hY3JvQXNzZW1ibGVyLCB2b2lkKiBvd25lclVJRCwgSklUQ29tcGlsYXRp
b25FZmZvcnQgZWZmb3J0KQordm9pZCBMaW5rQnVmZmVyOjpjb3B5Q29tcGFjdEFuZExpbmtDb2Rl
KE1hY3JvQXNzZW1ibGVyJiBtYWNyb0Fzc2VtYmxlciwgSklUQ29tcGlsYXRpb25FZmZvcnQgZWZm
b3J0KQogewotICAgIGFsbG9jYXRlKG1hY3JvQXNzZW1ibGVyLCBvd25lclVJRCwgZWZmb3J0KTsK
KyAgICBhbGxvY2F0ZShtYWNyb0Fzc2VtYmxlciwgZWZmb3J0KTsKICAgICBjb25zdCBzaXplX3Qg
aW5pdGlhbFNpemUgPSBtYWNyb0Fzc2VtYmxlci5tX2Fzc2VtYmxlci5jb2RlU2l6ZSgpOwogICAg
IGlmIChkaWRGYWlsVG9BbGxvY2F0ZSgpKQogICAgICAgICByZXR1cm47CkBAIC0yOTUsNyArMjk1
LDcgQEAgdm9pZCBMaW5rQnVmZmVyOjpjb3B5Q29tcGFjdEFuZExpbmtDb2RlKAogI2VuZGlmIC8v
IEVOQUJMRShCUkFOQ0hfQ09NUEFDVElPTikKIAogCi12b2lkIExpbmtCdWZmZXI6OmxpbmtDb2Rl
KE1hY3JvQXNzZW1ibGVyJiBtYWNyb0Fzc2VtYmxlciwgdm9pZCogb3duZXJVSUQsIEpJVENvbXBp
bGF0aW9uRWZmb3J0IGVmZm9ydCkKK3ZvaWQgTGlua0J1ZmZlcjo6bGlua0NvZGUoTWFjcm9Bc3Nl
bWJsZXImIG1hY3JvQXNzZW1ibGVyLCBKSVRDb21waWxhdGlvbkVmZm9ydCBlZmZvcnQpCiB7CiAg
ICAgLy8gRW5zdXJlIHRoYXQgdGhlIGVuZCBvZiB0aGUgbGFzdCBpbnZhbGlkYXRpb24gcG9pbnQg
ZG9lcyBub3QgZXh0ZW5kIGJleW9uZCB0aGUgZW5kIG9mIHRoZSBidWZmZXIuCiAgICAgbWFjcm9B
c3NlbWJsZXIubGFiZWwoKTsKQEAgLTMwNCw3ICszMDQsNyBAQCB2b2lkIExpbmtCdWZmZXI6Omxp
bmtDb2RlKE1hY3JvQXNzZW1ibGVyCiAjaWYgZGVmaW5lZChBU1NFTUJMRVJfSEFTX0NPTlNUQU5U
X1BPT0wpICYmIEFTU0VNQkxFUl9IQVNfQ09OU1RBTlRfUE9PTAogICAgIG1hY3JvQXNzZW1ibGVy
Lm1fYXNzZW1ibGVyLmJ1ZmZlcigpLmZsdXNoQ29uc3RhbnRQb29sKGZhbHNlKTsKICNlbmRpZgot
ICAgIGFsbG9jYXRlKG1hY3JvQXNzZW1ibGVyLCBvd25lclVJRCwgZWZmb3J0KTsKKyAgICBhbGxv
Y2F0ZShtYWNyb0Fzc2VtYmxlciwgZWZmb3J0KTsKICAgICBpZiAoIW1fZGlkQWxsb2NhdGUpCiAg
ICAgICAgIHJldHVybjsKICAgICBBU1NFUlQobV9jb2RlKTsKQEAgLTMxOCwxNSArMzE4LDE1IEBA
IHZvaWQgTGlua0J1ZmZlcjo6bGlua0NvZGUoTWFjcm9Bc3NlbWJsZXIKICAgICBtYWNyb0Fzc2Vt
Ymxlci5tX2Fzc2VtYmxlci5yZWxvY2F0ZUp1bXBzKGJ1ZmZlci5kYXRhKCksIGNvZGUpOwogI2Vu
ZGlmCiAjZWxpZiBDUFUoQVJNX1RIVU1CMikKLSAgICBjb3B5Q29tcGFjdEFuZExpbmtDb2RlPHVp
bnQxNl90PihtYWNyb0Fzc2VtYmxlciwgb3duZXJVSUQsIGVmZm9ydCk7CisgICAgY29weUNvbXBh
Y3RBbmRMaW5rQ29kZTx1aW50MTZfdD4obWFjcm9Bc3NlbWJsZXIsIGVmZm9ydCk7CiAjZWxpZiBD
UFUoQVJNNjQpCi0gICAgY29weUNvbXBhY3RBbmRMaW5rQ29kZTx1aW50MzJfdD4obWFjcm9Bc3Nl
bWJsZXIsIG93bmVyVUlELCBlZmZvcnQpOworICAgIGNvcHlDb21wYWN0QW5kTGlua0NvZGU8dWlu
dDMyX3Q+KG1hY3JvQXNzZW1ibGVyLCBlZmZvcnQpOwogI2VuZGlmIC8vICFFTkFCTEUoQlJBTkNI
X0NPTVBBQ1RJT04pCiAKICAgICBtX2xpbmtUYXNrcyA9IFdURk1vdmUobWFjcm9Bc3NlbWJsZXIu
bV9saW5rVGFza3MpOwogfQogCi12b2lkIExpbmtCdWZmZXI6OmFsbG9jYXRlKE1hY3JvQXNzZW1i
bGVyJiBtYWNyb0Fzc2VtYmxlciwgdm9pZCogb3duZXJVSUQsIEpJVENvbXBpbGF0aW9uRWZmb3J0
IGVmZm9ydCkKK3ZvaWQgTGlua0J1ZmZlcjo6YWxsb2NhdGUoTWFjcm9Bc3NlbWJsZXImIG1hY3Jv
QXNzZW1ibGVyLCBKSVRDb21waWxhdGlvbkVmZm9ydCBlZmZvcnQpCiB7CiAgICAgc2l6ZV90IGlu
aXRpYWxTaXplID0gbWFjcm9Bc3NlbWJsZXIubV9hc3NlbWJsZXIuY29kZVNpemUoKTsKICAgICBp
ZiAobV9jb2RlKSB7CkBAIC0zNDQsNyArMzQ0LDcgQEAgdm9pZCBMaW5rQnVmZmVyOjphbGxvY2F0
ZShNYWNyb0Fzc2VtYmxlcgogICAgICAgICBpbml0aWFsU2l6ZSA9IG1hY3JvQXNzZW1ibGVyLm1f
YXNzZW1ibGVyLmNvZGVTaXplKCk7CiAgICAgfQogCi0gICAgbV9leGVjdXRhYmxlTWVtb3J5ID0g
RXhlY3V0YWJsZUFsbG9jYXRvcjo6c2luZ2xldG9uKCkuYWxsb2NhdGUoaW5pdGlhbFNpemUsIG93
bmVyVUlELCBlZmZvcnQpOworICAgIG1fZXhlY3V0YWJsZU1lbW9yeSA9IEV4ZWN1dGFibGVBbGxv
Y2F0b3I6OnNpbmdsZXRvbigpLmFsbG9jYXRlKGluaXRpYWxTaXplLCBlZmZvcnQpOwogICAgIGlm
ICghbV9leGVjdXRhYmxlTWVtb3J5KQogICAgICAgICByZXR1cm47CiAgICAgbV9jb2RlID0gTWFj
cm9Bc3NlbWJsZXJDb2RlUHRyPExpbmtCdWZmZXJQdHJUYWc+KG1fZXhlY3V0YWJsZU1lbW9yeS0+
c3RhcnQoKS5yZXRhZ2dlZFB0cjxMaW5rQnVmZmVyUHRyVGFnPigpKTsKQEAgLTM1OCw3ICszNTgs
NyBAQCB2b2lkIExpbmtCdWZmZXI6OnBlcmZvcm1GaW5hbGl6YXRpb24oKQogICAgICAgICB0YXNr
LT5ydW4oKnRoaXMpOwogCiAjaWZuZGVmIE5ERUJVRwotICAgIEFTU0VSVCghaXNDb21waWxhdGlv
blRocmVhZCgpKTsKKyAgICBBU1NFUlQobV9pc0p1bXBJc2xhbmQgfHwgIWlzQ29tcGlsYXRpb25U
aHJlYWQoKSk7CiAgICAgQVNTRVJUKCFtX2NvbXBsZXRlZCk7CiAgICAgQVNTRVJUKGlzVmFsaWQo
KSk7CiAgICAgbV9jb21wbGV0ZWQgPSB0cnVlOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2Fzc2VtYmxlci9MaW5rQnVmZmVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2Fzc2VtYmxlci9MaW5rQnVmZmVyLmgJKHJldmlzaW9uIDI1ODM1MCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTGlua0J1ZmZlci5oCSh3b3JraW5nIGNvcHkpCkBAIC05
MCw3ICs5MCw4IEBAIHB1YmxpYzoKICAgICAgICAgLCBtX2NvbXBsZXRlZChmYWxzZSkKICNlbmRp
ZgogICAgIHsKLSAgICAgICAgbGlua0NvZGUobWFjcm9Bc3NlbWJsZXIsIG93bmVyVUlELCBlZmZv
cnQpOworICAgICAgICBVTlVTRURfUEFSQU0ob3duZXJVSUQpOworICAgICAgICBsaW5rQ29kZSht
YWNyb0Fzc2VtYmxlciwgZWZmb3J0KTsKICAgICB9CiAKICAgICB0ZW1wbGF0ZTxQdHJUYWcgdGFn
PgpAQCAtMTA3LDcgKzEwOCw3IEBAIHB1YmxpYzoKICNlbHNlCiAgICAgICAgIFVOVVNFRF9QQVJB
TShzaG91bGRQZXJmb3JtQnJhbmNoQ29tcGFjdGlvbik7CiAjZW5kaWYKLSAgICAgICAgbGlua0Nv
ZGUobWFjcm9Bc3NlbWJsZXIsIDAsIGVmZm9ydCk7CisgICAgICAgIGxpbmtDb2RlKG1hY3JvQXNz
ZW1ibGVyLCBlZmZvcnQpOwogICAgIH0KIAogICAgIH5MaW5rQnVmZmVyKCkKQEAgLTEyMyw2ICsx
MjQsMTMgQEAgcHVibGljOgogICAgIHsKICAgICAgICAgcmV0dXJuICFkaWRGYWlsVG9BbGxvY2F0
ZSgpOwogICAgIH0KKworICAgIHZvaWQgc2V0SXNKdW1wSXNsYW5kKCkKKyAgICB7CisjaWYgQVNT
RVJUX0VOQUJMRUQKKyAgICAgICAgbV9pc0p1bXBJc2xhbmQgPSB0cnVlOworI2VuZGlmCisgICAg
fQogICAgIAogICAgIC8vIFRoZXNlIG1ldGhvZHMgYXJlIHVzZWQgdG8gbGluayBvciBzZXQgdmFs
dWVzIGF0IGNvZGUgZ2VuZXJhdGlvbiB0aW1lLgogCkBAIC0zMjEsMTIgKzMyOSwxMiBAQCBwcml2
YXRlOgogICAgICAgICByZXR1cm4gbV9jb2RlLmRhdGFMb2NhdGlvbigpOwogICAgIH0KICAgICAK
LSAgICB2b2lkIGFsbG9jYXRlKE1hY3JvQXNzZW1ibGVyJiwgdm9pZCogb3duZXJVSUQsIEpJVENv
bXBpbGF0aW9uRWZmb3J0KTsKKyAgICB2b2lkIGFsbG9jYXRlKE1hY3JvQXNzZW1ibGVyJiwgSklU
Q29tcGlsYXRpb25FZmZvcnQpOwogCi0gICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBsaW5rQ29k
ZShNYWNyb0Fzc2VtYmxlciYsIHZvaWQqIG93bmVyVUlELCBKSVRDb21waWxhdGlvbkVmZm9ydCk7
CisgICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBsaW5rQ29kZShNYWNyb0Fzc2VtYmxlciYsIEpJ
VENvbXBpbGF0aW9uRWZmb3J0KTsKICNpZiBFTkFCTEUoQlJBTkNIX0NPTVBBQ1RJT04pCiAgICAg
dGVtcGxhdGUgPHR5cGVuYW1lIEluc3RydWN0aW9uVHlwZT4KLSAgICB2b2lkIGNvcHlDb21wYWN0
QW5kTGlua0NvZGUoTWFjcm9Bc3NlbWJsZXImLCB2b2lkKiBvd25lclVJRCwgSklUQ29tcGlsYXRp
b25FZmZvcnQpOworICAgIHZvaWQgY29weUNvbXBhY3RBbmRMaW5rQ29kZShNYWNyb0Fzc2VtYmxl
ciYsIEpJVENvbXBpbGF0aW9uRWZmb3J0KTsKICNlbmRpZgogCiAgICAgdm9pZCBwZXJmb3JtRmlu
YWxpemF0aW9uKCk7CkBAIC0zNDksNiArMzU3LDkgQEAgcHJpdmF0ZToKICNpZm5kZWYgTkRFQlVH
CiAgICAgYm9vbCBtX2NvbXBsZXRlZDsKICNlbmRpZgorI2lmIEFTU0VSVF9FTkFCTEVECisgICAg
Ym9vbCBtX2lzSnVtcElzbGFuZCB7IGZhbHNlIH07CisjZW5kaWYKICAgICBib29sIG1fYWxyZWFk
eURpc2Fzc2VtYmxlZCB7IGZhbHNlIH07CiAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPExpbmtC
dWZmZXJQdHJUYWc+IG1fY29kZTsKICAgICBWZWN0b3I8UmVmUHRyPFNoYXJlZFRhc2s8dm9pZChM
aW5rQnVmZmVyJik+Pj4gbV9saW5rVGFza3M7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
YXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyQ29kZVJlZi5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJDb2RlUmVmLmgJKHJldmlzaW9u
IDI1ODM1MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJs
ZXJDb2RlUmVmLmgJKHdvcmtpbmcgY29weSkKQEAgLTQzNCw3ICs0MzQsNiBAQCBwdWJsaWM6CiAg
ICAgICAgIDogbV9jb2RlUHRyKGV4ZWN1dGFibGVNZW1vcnktPnN0YXJ0KCkucmV0YWdnZWRQdHI8
dGFnPigpKQogICAgICAgICAsIG1fZXhlY3V0YWJsZU1lbW9yeShXVEZNb3ZlKGV4ZWN1dGFibGVN
ZW1vcnkpKQogICAgIHsKLSAgICAgICAgQVNTRVJUKG1fZXhlY3V0YWJsZU1lbW9yeS0+aXNNYW5h
Z2VkKCkpOwogICAgICAgICBBU1NFUlQobV9leGVjdXRhYmxlTWVtb3J5LT5zdGFydCgpKTsKICAg
ICAgICAgQVNTRVJUKG1fY29kZVB0cik7CiAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9FeGVjdXRhYmxlQWxsb2NhdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L0V4ZWN1dGFibGVBbGxvY2F0b3IuY3BwCShyZXZpc2lvbiAyNTgzNTAp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0V4ZWN1dGFibGVBbGxvY2F0b3IuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0yOCw5ICsyOCwxMCBAQAogCiAjaWYgRU5BQkxFKEpJVCkKIAotI2lu
Y2x1ZGUgIkNvZGVQcm9maWxpbmcuaCIKICNpbmNsdWRlICJFeGVjdXRhYmxlQWxsb2NhdGlvbkZ1
enouaCIKKyNpbmNsdWRlICJJdGVyYXRpb25TdGF0dXMuaCIKICNpbmNsdWRlICJKU0NJbmxpbmVz
LmgiCisjaW5jbHVkZSA8dHlwZV90cmFpdHM+CiAjaW5jbHVkZSA8d3RmL0ZpbGVTeXN0ZW0uaD4K
ICNpbmNsdWRlIDx3dGYvTWV0YUFsbG9jYXRvci5oPgogI2luY2x1ZGUgPHd0Zi9QYWdlUmVzZXJ2
YXRpb24uaD4KQEAgLTk2LDkgKzk3LDIwIEBAIHN0YXRpYyBjb25zdGV4cHIgc2l6ZV90IGZpeGVk
RXhlY3V0YWJsZU0KICNlbGlmIENQVShBUk0pCiBzdGF0aWMgY29uc3RleHByIHNpemVfdCBmaXhl
ZEV4ZWN1dGFibGVNZW1vcnlQb29sU2l6ZSA9IDE2ICogMTAyNCAqIDEwMjQ7CiAjZWxpZiBDUFUo
QVJNNjQpCisjaWYgVVNFKEpVTVBfSVNMQU5EUykKK3N0YXRpYyBjb25zdGV4cHIgc2l6ZV90IGZp
eGVkRXhlY3V0YWJsZU1lbW9yeVBvb2xTaXplID0gMSAqIDEwMjQgKiAxMDI0ICogMTAyNDsKKy8v
IFRoZXNlIHNpemVzIGd1YXJhbnRlZSB0aGF0IGFueSBqdW1wIHdpdGhpbiBhbiBpc2xhbmQgY2Fu
IGp1bXAgZm9yd2FyZHMgb3IgYmFja3dhcmRzCisvLyB0byB0aGUgYWRqYWNlbnQgaXNsYW5kIGlu
IGEgc2luZ2xlIGluc3RydWN0aW9uLgorc3RhdGljIGNvbnN0ZXhwciBzaXplX3QgcmVnaW9uU2l6
ZSA9IDExMiAqIDEwMjQgKiAxMDI0Oworc3RhdGljIGNvbnN0ZXhwciBzaXplX3QgaXNsYW5kUmVn
aW9uU2l6ZSA9IDE2ICogMTAyNCAqIDEwMjQ7CitzdGF0aWMgY29uc3RleHByIHNpemVfdCBudW1i
ZXJPZlJlZ2lvbnMgPSBmaXhlZEV4ZWN1dGFibGVNZW1vcnlQb29sU2l6ZSAvIHJlZ2lvblNpemU7
CitzdGF0aWMgY29uc3RleHByIHNpemVfdCBpc2xhbmRTaXplSW5CeXRlcyA9IDQ7CitzdGF0aWMg
Y29uc3RleHByIHNpemVfdCBtYXhJc2xhbmRzUGVyUmVnaW9uID0gaXNsYW5kUmVnaW9uU2l6ZSAv
IGlzbGFuZFNpemVJbkJ5dGVzOworI2Vsc2UKIHN0YXRpYyBjb25zdGV4cHIgc2l6ZV90IGZpeGVk
RXhlY3V0YWJsZU1lbW9yeVBvb2xTaXplID0gMTI4ICogMTAyNCAqIDEwMjQ7CisjZW5kaWYKICNl
bGlmIENQVShYODZfNjQpCi1zdGF0aWMgY29uc3RleHByIHNpemVfdCBmaXhlZEV4ZWN1dGFibGVN
ZW1vcnlQb29sU2l6ZSA9IDEwMjQgKiAxMDI0ICogMTAyNDsKK3N0YXRpYyBjb25zdGV4cHIgc2l6
ZV90IGZpeGVkRXhlY3V0YWJsZU1lbW9yeVBvb2xTaXplID0gMSAqIDEwMjQgKiAxMDI0ICogMTAy
NDsKICNlbHNlCiBzdGF0aWMgY29uc3RleHByIHNpemVfdCBmaXhlZEV4ZWN1dGFibGVNZW1vcnlQ
b29sU2l6ZSA9IDMyICogMTAyNCAqIDEwMjQ7CiAjZW5kaWYKQEAgLTMxMywxMCArMzI1LDExIEBA
IHN0YXRpYyBBTFdBWVNfSU5MSU5FIEpJVFJlc2VydmF0aW9uIGluaXQKICAgICBpZiAoIWlzSklU
RW5hYmxlZCgpKQogICAgICAgICByZXR1cm4gcmVzZXJ2YXRpb247CiAKKyAgICByZXNlcnZhdGlv
bi5zaXplID0gZml4ZWRFeGVjdXRhYmxlTWVtb3J5UG9vbFNpemU7CisjaWYgIVVTRShKVU1QX0lT
TEFORFMpCiAgICAgaWYgKE9wdGlvbnM6OmppdE1lbW9yeVJlc2VydmF0aW9uU2l6ZSgpKQogICAg
ICAgICByZXNlcnZhdGlvbi5zaXplID0gT3B0aW9uczo6aml0TWVtb3J5UmVzZXJ2YXRpb25TaXpl
KCk7Ci0gICAgZWxzZQotICAgICAgICByZXNlcnZhdGlvbi5zaXplID0gZml4ZWRFeGVjdXRhYmxl
TWVtb3J5UG9vbFNpemU7CisjZW5kaWYKICAgICByZXNlcnZhdGlvbi5zaXplID0gc3RkOjptYXgo
cm91bmRVcFRvTXVsdGlwbGVPZihwYWdlU2l6ZSgpLCByZXNlcnZhdGlvbi5zaXplKSwgcGFnZVNp
emUoKSAqIDIpOwogCiAgICAgYXV0byB0cnlDcmVhdGVQYWdlUmVzZXJ2YXRpb24gPSBbXSAoc2l6
ZV90IHJlc2VydmF0aW9uU2l6ZSkgewpAQCAtMzYzLDUyICszNzYsNDU1IEBAIHN0YXRpYyBBTFdB
WVNfSU5MSU5FIEpJVFJlc2VydmF0aW9uIGluaXQKICAgICByZXR1cm4gcmVzZXJ2YXRpb247CiB9
CiAKLWNsYXNzIEZpeGVkVk1Qb29sRXhlY3V0YWJsZUFsbG9jYXRvciBmaW5hbCA6IHB1YmxpYyBN
ZXRhQWxsb2NhdG9yIHsKK2NsYXNzIEZpeGVkVk1Qb29sRXhlY3V0YWJsZUFsbG9jYXRvciBmaW5h
bCB7CiAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CisKKyNpZiBVU0UoSlVNUF9JU0xBTkRT
KQorICAgIGNsYXNzIElzbGFuZHM7CisgICAgY2xhc3MgUmVnaW9uQWxsb2NhdG9yOworI2VuZGlm
CisKIHB1YmxpYzoKICAgICBGaXhlZFZNUG9vbEV4ZWN1dGFibGVBbGxvY2F0b3IoKQotICAgICAg
ICA6IE1ldGFBbGxvY2F0b3Ioaml0QWxsb2NhdGlvbkdyYW51bGUpIC8vIHJvdW5kIHVwIGFsbCBh
bGxvY2F0aW9ucyB0byAzMiBieXRlcworI2lmIFVTRShKVU1QX0lTTEFORFMpCisgICAgICAgIDog
bV9hbGxvY2F0b3JzKGNvbnN0cnVjdEZpeGVkU2l6ZUFycmF5V2l0aEFyZ3VtZW50czxSZWdpb25B
bGxvY2F0b3IsIG51bWJlck9mUmVnaW9ucz4oKnRoaXMpKQorI2Vsc2UKKyAgICAgICAgOiBtX2Fs
bG9jYXRvcigqdGhpcykKKyNlbmRpZgogICAgIHsKICAgICAgICAgSklUUmVzZXJ2YXRpb24gcmVz
ZXJ2YXRpb24gPSBpbml0aWFsaXplSklUUGFnZVJlc2VydmF0aW9uKCk7CiAgICAgICAgIG1fcmVz
ZXJ2YXRpb24gPSBXVEZNb3ZlKHJlc2VydmF0aW9uLnBhZ2VSZXNlcnZhdGlvbik7CiAgICAgICAg
IGlmIChtX3Jlc2VydmF0aW9uKSB7Ci0gICAgICAgICAgICBhZGRGcmVzaEZyZWVTcGFjZShyZXNl
cnZhdGlvbi5iYXNlLCByZXNlcnZhdGlvbi5zaXplKTsKKyNpZiBVU0UoSlVNUF9JU0xBTkRTKQor
ICAgICAgICAgICAgdWludHB0cl90IHN0YXJ0ID0gYml0d2lzZV9jYXN0PHVpbnRwdHJfdD4obV9y
ZXNlcnZhdGlvbi5iYXNlKCkpOworICAgICAgICAgICAgdWludHB0cl90IHJlc2VydmF0aW9uRW5k
ID0gc3RhcnQgKyBtX3Jlc2VydmF0aW9uLnNpemUoKTsKKyAgICAgICAgICAgIGZvciAoc2l6ZV90
IGkgPSAwOyBpIDwgbnVtYmVyT2ZSZWdpb25zOyArK2kpIHsKKyAgICAgICAgICAgICAgICBSRUxF
QVNFX0FTU0VSVChzdGFydCA8IHJlc2VydmF0aW9uRW5kKTsKKyAgICAgICAgICAgICAgICBtX2Fs
bG9jYXRvcnNbaV0ubV9zdGFydCA9IHRhZ0NvZGVQdHI8RXhlY3V0YWJsZU1lbW9yeVB0clRhZz4o
Yml0d2lzZV9jYXN0PHZvaWQqPihzdGFydCkpOworICAgICAgICAgICAgICAgIG1fYWxsb2NhdG9y
c1tpXS5tX2VuZCA9IHRhZ0NvZGVQdHI8RXhlY3V0YWJsZU1lbW9yeVB0clRhZz4oYml0d2lzZV9j
YXN0PHZvaWQqPihzdGFydCArIHJlZ2lvblNpemUpKTsKKyAgICAgICAgICAgICAgICBpZiAobV9h
bGxvY2F0b3JzW2ldLmVuZCgpID4gcmVzZXJ2YXRpb25FbmQpIHsKKyAgICAgICAgICAgICAgICAg
ICAgLy8gV2UgbWF5IGhhdmUgdGFrZW4gYSBwYWdlIGZvciB0aGUgZXhlY3V0YWJsZSBvbmx5IGNv
cHkgdGh1bmsuCisgICAgICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKGkgPT0gbnVtYmVy
T2ZSZWdpb25zIC0gMSk7CisgICAgICAgICAgICAgICAgICAgIG1fYWxsb2NhdG9yc1tpXS5tX2Vu
ZCA9IHRhZ0NvZGVQdHI8RXhlY3V0YWJsZU1lbW9yeVB0clRhZz4oYml0d2lzZV9jYXN0PHZvaWQq
PihyZXNlcnZhdGlvbkVuZCkpOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAg
IG1fYWxsb2NhdG9yc1tpXS5hZGRGcmVzaEZyZWVTcGFjZShiaXR3aXNlX2Nhc3Q8dm9pZCo+KG1f
YWxsb2NhdG9yc1tpXS5zdGFydCgpKSwgbV9hbGxvY2F0b3JzW2ldLmFsbG9jYXRvclNpemUoKSk7
CisKKyAgICAgICAgICAgICAgICBzdGFydCArPSByZWdpb25TaXplOworICAgICAgICAgICAgfQor
I2Vsc2UKKyAgICAgICAgICAgIG1fYWxsb2NhdG9yLmFkZEZyZXNoRnJlZVNwYWNlKHJlc2VydmF0
aW9uLmJhc2UsIHJlc2VydmF0aW9uLnNpemUpOwogICAgICAgICAgICAgQVNTRVJUKGJ5dGVzUmVz
ZXJ2ZWQoKSA9PSByZXNlcnZhdGlvbi5zaXplKTsgLy8gU2luY2Ugb3VyIGV4ZWN1dGFibGUgbWVt
b3J5IGlzIGZpeGVkLXNpemVkLCBieXRlc1Jlc2VydmVkIGlzIG5ldmVyIGNoYW5nZWQgYWZ0ZXIg
aW5pdGlhbGl6YXRpb24uCisjZW5kaWYKICAgICAgICAgfQogICAgIH0KIAotICAgIHZpcnR1YWwg
fkZpeGVkVk1Qb29sRXhlY3V0YWJsZUFsbG9jYXRvcigpOworICAgIH5GaXhlZFZNUG9vbEV4ZWN1
dGFibGVBbGxvY2F0b3IoKQorICAgIHsKKyAgICAgICAgbV9yZXNlcnZhdGlvbi5kZWFsbG9jYXRl
KCk7CisgICAgfQogCiAgICAgdm9pZCogbWVtb3J5U3RhcnQoKSB7IHJldHVybiB1bnRhZ0NvZGVQ
dHI8RXhlY3V0YWJsZU1lbW9yeVB0clRhZz4oZ19qc2NDb25maWcuc3RhcnRFeGVjdXRhYmxlTWVt
b3J5KTsgfQogICAgIHZvaWQqIG1lbW9yeUVuZCgpIHsgcmV0dXJuIHVudGFnQ29kZVB0cjxFeGVj
dXRhYmxlTWVtb3J5UHRyVGFnPihnX2pzY0NvbmZpZy5lbmRFeGVjdXRhYmxlTWVtb3J5KTsgfQog
ICAgIGJvb2wgaXNKSVRQQyh2b2lkKiBwYykgeyByZXR1cm4gbWVtb3J5U3RhcnQoKSA8PSBwYyAm
JiBwYyA8IG1lbW9yeUVuZCgpOyB9CisgICAgYm9vbCBpc1ZhbGlkKCkgeyByZXR1cm4gISFtX3Jl
c2VydmF0aW9uOyB9CiAKLXByb3RlY3RlZDoKLSAgICBGcmVlU3BhY2VQdHIgYWxsb2NhdGVOZXdT
cGFjZShzaXplX3QmKSBvdmVycmlkZQorICAgIFJlZlB0cjxFeGVjdXRhYmxlTWVtb3J5SGFuZGxl
PiBhbGxvY2F0ZShzaXplX3Qgc2l6ZUluQnl0ZXMpCiAgICAgewotICAgICAgICAvLyBXZSdyZSBv
cGVyYXRpbmcgaW4gYSBmaXhlZCBwb29sLCBzbyBuZXcgYWxsb2NhdGlvbiBpcyBhbHdheXMgcHJv
aGliaXRlZC4KKyNpZiBVU0UoSlVNUF9JU0xBTkRTKQorICAgICAgICBhdXRvIGxvY2tlciA9IGhv
bGRMb2NrKGdldExvY2soKSk7CisKKyAgICAgICAgdW5zaWduZWQgc3RhcnQgPSAwOworICAgICAg
ICBpZiAoT3B0aW9uczo6dXNlUmFuZG9taXppbmdFeGVjdXRhYmxlSXNsYW5kQWxsb2NhdGlvbigp
KQorICAgICAgICAgICAgc3RhcnQgPSBjcnlwdG9ncmFwaGljYWxseVJhbmRvbU51bWJlcigpICUg
bV9hbGxvY2F0b3JzLnNpemUoKTsKKworICAgICAgICB1bnNpZ25lZCBpID0gc3RhcnQ7CisgICAg
ICAgIHdoaWxlICh0cnVlKSB7CisgICAgICAgICAgICBSZWdpb25BbGxvY2F0b3ImIGFsbG9jYXRv
ciA9IG1fYWxsb2NhdG9yc1tpXTsKKyAgICAgICAgICAgIGlmIChSZWZQdHI8RXhlY3V0YWJsZU1l
bW9yeUhhbmRsZT4gcmVzdWx0ID0gYWxsb2NhdG9yLmFsbG9jYXRlKGxvY2tlciwgc2l6ZUluQnl0
ZXMpKQorICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgICAgICAgICBpID0gKGkg
KyAxKSAlIG1fYWxsb2NhdG9ycy5zaXplKCk7CisgICAgICAgICAgICBpZiAoaSA9PSBzdGFydCkK
KyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQogICAgICAgICByZXR1cm4gbnVsbHB0
cjsKKyNlbHNlCisgICAgICAgIHJldHVybiBtX2FsbG9jYXRvci5hbGxvY2F0ZShzaXplSW5CeXRl
cyk7CisjZW5kaWYgLy8gVVNFKEpVTVBfSVNMQU5EUykKKyAgICB9CisKKyAgICBMb2NrJiBnZXRM
b2NrKCkgeyByZXR1cm4gbV9sb2NrOyB9CisKKyAgICAvLyBOb24gYXRvbWljCisgICAgc2l6ZV90
IGJ5dGVzQWxsb2NhdGVkKCkgCisgICAgeworICAgICAgICBzaXplX3QgcmVzdWx0ID0gMDsKKyAg
ICAgICAgZm9yRWFjaEFsbG9jYXRvcihbJl0gKEFsbG9jYXRvciYgYWxsb2NhdG9yKSB7CisgICAg
ICAgICAgICByZXN1bHQgKz0gYWxsb2NhdG9yLmJ5dGVzQWxsb2NhdGVkKCk7CisgICAgICAgIH0p
OworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKyAgICBzaXplX3QgYnl0ZXNSZXNlcnZl
ZCgpIAorICAgIHsKKyAgICAgICAgc2l6ZV90IHJlc3VsdCA9IDA7CisgICAgICAgIGZvckVhY2hB
bGxvY2F0b3IoWyZdIChBbGxvY2F0b3ImIGFsbG9jYXRvcikgeworICAgICAgICAgICAgcmVzdWx0
ICs9IGFsbG9jYXRvci5ieXRlc1Jlc2VydmVkKCk7CisgICAgICAgIH0pOworICAgICAgICByZXR1
cm4gcmVzdWx0OworICAgIH0KKyAgICBzaXplX3QgYnl0ZXNDb21taXR0ZWQoKQorICAgIHsKKyAg
ICAgICAgc2l6ZV90IHJlc3VsdCA9IDA7CisgICAgICAgIGZvckVhY2hBbGxvY2F0b3IoWyZdIChB
bGxvY2F0b3ImIGFsbG9jYXRvcikgeworICAgICAgICAgICAgcmVzdWx0ICs9IGFsbG9jYXRvci5i
eXRlc0NvbW1pdHRlZCgpOworICAgICAgICB9KTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAg
ICB9CisKKyAgICBib29sIGlzSW5BbGxvY2F0ZWRNZW1vcnkoY29uc3QgQWJzdHJhY3RMb2NrZXIm
IGxvY2tlciwgdm9pZCogYWRkcmVzcykKKyAgICB7CisjaWYgVVNFKEpVTVBfSVNMQU5EUykKKyAg
ICAgICAgaWYgKFJlZ2lvbkFsbG9jYXRvciogYWxsb2NhdG9yID0gZmluZFJlZ2lvbihiaXR3aXNl
X2Nhc3Q8dWludHB0cl90PihhZGRyZXNzKSkpCisgICAgICAgICAgICByZXR1cm4gYWxsb2NhdG9y
LT5pc0luQWxsb2NhdGVkTWVtb3J5KGxvY2tlciwgYWRkcmVzcyk7CisgICAgICAgIHJldHVybiBm
YWxzZTsKKyNlbHNlCisgICAgICAgIHJldHVybiBtX2FsbG9jYXRvci5pc0luQWxsb2NhdGVkTWVt
b3J5KGxvY2tlciwgYWRkcmVzcyk7CisjZW5kaWYKKyAgICB9CisKKyNpZiBFTkFCTEUoTUVUQV9B
TExPQ0FUT1JfUFJPRklMRSkKKyAgICB2b2lkIGR1bXBQcm9maWxlKCkKKyAgICB7CisgICAgICAg
IGZvckVhY2hBbGxvY2F0b3IoWyZdIChBbGxvY2F0b3ImIGFsbG9jYXRvcikgeworICAgICAgICAg
ICAgYWxsb2NhdG9yLmR1bXBQcm9maWxlKCk7CisgICAgICAgIH0pOworICAgIH0KKyNlbmRpZgor
CisgICAgTWV0YUFsbG9jYXRvcjo6U3RhdGlzdGljcyBjdXJyZW50U3RhdGlzdGljcygpCisgICAg
eworICAgICAgICBhdXRvIGxvY2tlciA9IGhvbGRMb2NrKGdldExvY2soKSk7CisgICAgICAgIE1l
dGFBbGxvY2F0b3I6OlN0YXRpc3RpY3MgcmVzdWx0IHsgMCwgMCwgMCB9OworICAgICAgICBmb3JF
YWNoQWxsb2NhdG9yKFsmXSAoQWxsb2NhdG9yJiBhbGxvY2F0b3IpIHsKKyAgICAgICAgICAgIGF1
dG8gYWxsb2NhdG9yU3RhdHMgPSBhbGxvY2F0b3IuY3VycmVudFN0YXRpc3RpY3MobG9ja2VyKTsK
KyAgICAgICAgICAgIHJlc3VsdC5ieXRlc0FsbG9jYXRlZCArPSBhbGxvY2F0b3JTdGF0cy5ieXRl
c0FsbG9jYXRlZDsKKyAgICAgICAgICAgIHJlc3VsdC5ieXRlc1Jlc2VydmVkICs9IGFsbG9jYXRv
clN0YXRzLmJ5dGVzUmVzZXJ2ZWQ7CisgICAgICAgICAgICByZXN1bHQuYnl0ZXNDb21taXR0ZWQg
Kz0gYWxsb2NhdG9yU3RhdHMuYnl0ZXNDb21taXR0ZWQ7CisgICAgICAgIH0pOworICAgICAgICBy
ZXR1cm4gcmVzdWx0OworICAgIH0KKworI2lmIFVTRShKVU1QX0lTTEFORFMpCisgICAgdm9pZCBo
YW5kbGVXaWxsQmVSZWxlYXNlZChjb25zdCBMb2NrSG9sZGVyJiBsb2NrZXIsIE1ldGFBbGxvY2F0
b3JIYW5kbGUmIGhhbmRsZSkKKyAgICB7CisgICAgICAgIGlmIChpc2xhbmRzRm9ySnVtcExvY2F0
aW9uLmlzRW1wdHkoKSkKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICBWZWN0b3I8SXNs
YW5kcyosIDE2PiB0b1JlbW92ZTsKKyAgICAgICAgdm9pZCogc3RhcnQgPSBoYW5kbGUuc3RhcnQo
KS51bnRhZ2dlZFB0cigpOworICAgICAgICB2b2lkKiBlbmQgPSBoYW5kbGUuZW5kKCkudW50YWdn
ZWRQdHIoKTsKKyAgICAgICAgaXNsYW5kc0Zvckp1bXBMb2NhdGlvbi5pdGVyYXRlKFsmXSAoSXNs
YW5kcyYgaXNsYW5kcywgYm9vbCYgdmlzaXRMZWZ0LCBib29sJiB2aXNpdFJpZ2h0KSB7CisgICAg
ICAgICAgICBpZiAoc3RhcnQgPD0gaXNsYW5kcy5rZXkoKSAmJiBpc2xhbmRzLmtleSgpIDwgZW5k
KQorICAgICAgICAgICAgICAgIHRvUmVtb3ZlLmFwcGVuZCgmaXNsYW5kcyk7CisgICAgICAgICAg
ICBpZiAoaXNsYW5kcy5rZXkoKSA+IHN0YXJ0KQorICAgICAgICAgICAgICAgIHZpc2l0TGVmdCA9
IHRydWU7CisgICAgICAgICAgICBpZiAoaXNsYW5kcy5rZXkoKSA8IGVuZCkKKyAgICAgICAgICAg
ICAgICB2aXNpdFJpZ2h0ID0gdHJ1ZTsKKyAgICAgICAgfSk7CisKKyAgICAgICAgZm9yIChJc2xh
bmRzKiBpc2xhbmRzIDogdG9SZW1vdmUpCisgICAgICAgICAgICBmcmVlSXNsYW5kcyhsb2NrZXIs
IGlzbGFuZHMpOworCisgICAgICAgIGlmIChBU1NFUlRfRU5BQkxFRCkgeworICAgICAgICAgICAg
aXNsYW5kc0Zvckp1bXBMb2NhdGlvbi5pdGVyYXRlKFsmXSAoSXNsYW5kcyYgaXNsYW5kcywgYm9v
bCYgdmlzaXRMZWZ0LCBib29sJiB2aXNpdFJpZ2h0KSB7CisgICAgICAgICAgICAgICAgaWYgKHN0
YXJ0IDw9IGlzbGFuZHMua2V5KCkgJiYgaXNsYW5kcy5rZXkoKSA8IGVuZCkgeworICAgICAgICAg
ICAgICAgICAgICBkYXRhTG9nTG4oImRpZCBub3QgcmVtb3ZlIGV2ZXJ5dGhpbmchIik7CisgICAg
ICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgICAgIHZpc2l0TGVmdCA9IHRydWU7CisgICAgICAgICAgICAg
ICAgdmlzaXRSaWdodCA9IHRydWU7CisgICAgICAgICAgICB9KTsKKyAgICAgICAgfQorICAgIH0K
KworICAgIHZvaWQqIG1ha2VJc2xhbmQodWludHB0cl90IGp1bXBMb2NhdGlvbiwgdWludHB0cl90
IG5ld1RhcmdldCwgYm9vbCBjb25jdXJyZW50bHkpCisgICAgeworICAgICAgICBhdXRvIGxvY2tl
ciA9IGhvbGRMb2NrKGdldExvY2soKSk7CisgICAgICAgIHJldHVybiBpc2xhbmRGb3JKdW1wTG9j
YXRpb24obG9ja2VyLCBqdW1wTG9jYXRpb24sIG5ld1RhcmdldCwgY29uY3VycmVudGx5KTsKKyAg
ICB9CisKK3ByaXZhdGU6CisgICAgUmVnaW9uQWxsb2NhdG9yKiBmaW5kUmVnaW9uKHVpbnRwdHJf
dCBwdHIpCisgICAgeworICAgICAgICBSZWdpb25BbGxvY2F0b3IqIHJlc3VsdCA9IG51bGxwdHI7
CisgICAgICAgIGZvckVhY2hBbGxvY2F0b3IoWyZdIChSZWdpb25BbGxvY2F0b3ImIGFsbG9jYXRv
cikgeworICAgICAgICAgICAgaWYgKGFsbG9jYXRvci5zdGFydCgpIDw9IHB0ciAmJiBwdHIgPCBh
bGxvY2F0b3IuZW5kKCkpIHsKKyAgICAgICAgICAgICAgICByZXN1bHQgPSAmYWxsb2NhdG9yOwor
ICAgICAgICAgICAgICAgIHJldHVybiBJdGVyYXRpb25TdGF0dXM6OkRvbmU7CisgICAgICAgICAg
ICB9CisgICAgICAgICAgICByZXR1cm4gSXRlcmF0aW9uU3RhdHVzOjpDb250aW51ZTsKKyAgICAg
ICAgfSk7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorCisgICAgdm9pZCBmcmVlSnVt
cElzbGFuZHMoY29uc3QgTG9ja0hvbGRlciYsIElzbGFuZHMqIGlzbGFuZHMpCisgICAgeworICAg
ICAgICBmb3IgKENvZGVMb2NhdGlvbkxhYmVsPEV4ZWN1dGFibGVNZW1vcnlQdHJUYWc+IGp1bXBJ
c2xhbmQgOiBpc2xhbmRzLT5qdW1wSXNsYW5kcykgeworICAgICAgICAgICAgdWludHB0cl90IHVu
dGFnZ2VkSnVtcElzbGFuZCA9IGJpdHdpc2VfY2FzdDx1aW50cHRyX3Q+KGp1bXBJc2xhbmQuZGF0
YUxvY2F0aW9uKCkpOworICAgICAgICAgICAgUmVnaW9uQWxsb2NhdG9yKiBhbGxvY2F0b3IgPSBm
aW5kUmVnaW9uKHVudGFnZ2VkSnVtcElzbGFuZCk7CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VS
VChhbGxvY2F0b3IpOworICAgICAgICAgICAgYWxsb2NhdG9yLT5mcmVlSXNsYW5kKHVudGFnZ2Vk
SnVtcElzbGFuZCk7CisgICAgICAgIH0KKyAgICAgICAgaXNsYW5kcy0+anVtcElzbGFuZHMuY2xl
YXIoKTsKICAgICB9CiAKLSAgICB2b2lkIG5vdGlmeU5lZWRQYWdlKHZvaWQqIHBhZ2UsIHNpemVf
dCBjb3VudCkgb3ZlcnJpZGUKKyAgICB2b2lkIGZyZWVJc2xhbmRzKGNvbnN0IExvY2tIb2xkZXIm
IGxvY2tlciwgSXNsYW5kcyogaXNsYW5kcykKICAgICB7Ci0gICAgICAgIG1fcmVzZXJ2YXRpb24u
Y29tbWl0KHBhZ2UsIHBhZ2VTaXplKCkgKiBjb3VudCk7CisgICAgICAgIGZyZWVKdW1wSXNsYW5k
cyhsb2NrZXIsIGlzbGFuZHMpOworICAgICAgICBpc2xhbmRzRm9ySnVtcExvY2F0aW9uLnJlbW92
ZShpc2xhbmRzKTsKKyAgICAgICAgZGVsZXRlIGlzbGFuZHM7CiAgICAgfQogCi0gICAgdm9pZCBu
b3RpZnlQYWdlSXNGcmVlKHZvaWQqIHBhZ2UsIHNpemVfdCBjb3VudCkgb3ZlcnJpZGUKKyAgICB2
b2lkKiBpc2xhbmRGb3JKdW1wTG9jYXRpb24oY29uc3QgTG9ja0hvbGRlciYgbG9ja2VyLCB1aW50
cHRyX3QganVtcExvY2F0aW9uLCB1aW50cHRyX3QgdGFyZ2V0LCBib29sIGNvbmN1cnJlbnRseSkK
ICAgICB7Ci0gICAgICAgIG1fcmVzZXJ2YXRpb24uZGVjb21taXQocGFnZSwgcGFnZVNpemUoKSAq
IGNvdW50KTsKKyAgICAgICAgSXNsYW5kcyogaXNsYW5kcyA9IGlzbGFuZHNGb3JKdW1wTG9jYXRp
b24uZmluZEV4YWN0KGJpdHdpc2VfY2FzdDx2b2lkKj4oanVtcExvY2F0aW9uKSk7CisgICAgICAg
IGlmIChpc2xhbmRzKSB7CisgICAgICAgICAgICAvLyBGSVhNRTogV2UgY291bGQgY3JlYXRlIHNv
bWUgbWV0aG9kIG9mIHJldXNpbmcgYWxyZWFkeSBhbGxvY2F0ZWQgaXNsYW5kcyBoZXJlLCBidXQg
aXQncworICAgICAgICAgICAgLy8gdW5saWtlbHkgdG8gbWF0dGVyIGluIHByYWN0aWNlLgorICAg
ICAgICAgICAgaWYgKCFjb25jdXJyZW50bHkpCisgICAgICAgICAgICAgICAgZnJlZUp1bXBJc2xh
bmRzKGxvY2tlciwgaXNsYW5kcyk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBpc2xh
bmRzID0gbmV3IElzbGFuZHM7CisgICAgICAgICAgICBpc2xhbmRzLT5yb290SnVtcExvY2F0aW9u
ID0gQ29kZUxvY2F0aW9uTGFiZWw8RXhlY3V0YWJsZU1lbW9yeVB0clRhZz4odGFnQ29kZVB0cjxF
eGVjdXRhYmxlTWVtb3J5UHRyVGFnPihiaXR3aXNlX2Nhc3Q8dm9pZCo+KGp1bXBMb2NhdGlvbikp
KTsKKyAgICAgICAgICAgIGlzbGFuZHNGb3JKdW1wTG9jYXRpb24uaW5zZXJ0KGlzbGFuZHMpOwor
ICAgICAgICB9CisKKyAgICAgICAgUmVnaW9uQWxsb2NhdG9yKiBhbGxvY2F0b3IgPSBmaW5kUmVn
aW9uKGp1bXBMb2NhdGlvbiA+IHRhcmdldCA/IGp1bXBMb2NhdGlvbiAtIHJlZ2lvblNpemUgOiBq
dW1wTG9jYXRpb24pOworICAgICAgICBSRUxFQVNFX0FTU0VSVChhbGxvY2F0b3IpOworICAgICAg
ICB2b2lkKiByZXN1bHQgPSBhbGxvY2F0b3ItPmFsbG9jYXRlSXNsYW5kKCk7CisgICAgICAgIHZv
aWQqIGN1cnJlbnRJc2xhbmQgPSByZXN1bHQ7CisgICAgICAgIGp1bXBMb2NhdGlvbiA9IGJpdHdp
c2VfY2FzdDx1aW50cHRyX3Q+KGN1cnJlbnRJc2xhbmQpOworICAgICAgICB3aGlsZSAodHJ1ZSkg
eworICAgICAgICAgICAgaXNsYW5kcy0+anVtcElzbGFuZHMuYXBwZW5kKENvZGVMb2NhdGlvbkxh
YmVsPEV4ZWN1dGFibGVNZW1vcnlQdHJUYWc+KHRhZ0NvZGVQdHI8RXhlY3V0YWJsZU1lbW9yeVB0
clRhZz4oY3VycmVudElzbGFuZCkpKTsKKworICAgICAgICAgICAgYXV0byBlbWl0SnVtcFRvID0g
WyZdICh2b2lkKiB0YXJnZXQpIHsKKyAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChBUk02
NEFzc2VtYmxlcjo6Y2FuRW1pdEp1bXAoYml0d2lzZV9jYXN0PHZvaWQqPihqdW1wTG9jYXRpb24p
LCB0YXJnZXQpKTsKKworICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyIGppdDsKKyAgICAg
ICAgICAgICAgICBhdXRvIGp1bXAgPSBqaXQuanVtcCgpOworICAgICAgICAgICAgICAgIExpbmtC
dWZmZXIgbGlua0J1ZmZlcihqaXQsIE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxOb1B0clRhZz4oY3Vy
cmVudElzbGFuZCksIGlzbGFuZFNpemVJbkJ5dGVzLCBKSVRDb21waWxhdGlvbk11c3RTdWNjZWVk
LCBmYWxzZSk7CisgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQobGlua0J1ZmZlci5pc1Zh
bGlkKCkpOworCisgICAgICAgICAgICAgICAgLy8gV2UgdXNlIHRoaXMgdG8gYXBwZWFzZSB0aGUg
YXNzZXJ0aW9uIHRoYXQgd2UncmUgbm90IGZpbmFsaXppbmcgb24gYSBjb21waWxlciB0aHJlYWQu
IEluIHRoaXMgc2l0dWF0aW9uLCBpdCdzCisgICAgICAgICAgICAgICAgLy8gb2sgdG8gZG8gdGhp
cyBvbiBhIGNvbXBpbGVyIHRocmVhZCwgc2luY2UgdGhlIGNvbXBpbGVyIHRocmVhZCBpcyBsaW5r
aW5nIGEganVtcCB0byB0aGlzIGNvZGUgKGFuZCBubyBvdGhlciBsaXZlCisgICAgICAgICAgICAg
ICAgLy8gY29kZSBjYW4ganVtcCB0byB0aGVzZSBpc2xhbmRzKS4gSXQncyBvayBiZWNhdXNlIHRo
ZSBDUFUgcHJvdG9jb2wgZm9yIGV4cG9zaW5nIGNvZGUgdG8gb3RoZXIgQ1BVcyBpczoKKyAgICAg
ICAgICAgICAgICAvLyAtIFNlbGYgbW9kaWZ5aW5nIGNvZGUgZmVuY2UgKHdoYXQgRklOQUxJWkVf
Q09ERSBkb2VzIGJlbG93KS4gVGhpcyBkb2VzIHZhcmlvdXMgbWVtb3J5IGZsdXNoZXMgKyBpbnN0
cnVjdGlvbiBzeW5jIGJhcnJpZXIgKGlzYikuCisgICAgICAgICAgICAgICAgLy8gLSBBbnkgQ1BV
IHRoYXQgd2lsbCBydW4gdGhlIGNvZGUgbXVzdCBydW4gYSBjcm9zc01vZGlmeWluZ0NvZGVGZW5j
ZSAoaXNiKSBiZWZvcmUgcnVubmluZyBpdC4gU2luY2UgdGhlIGNvZGUgdGhhdAorICAgICAgICAg
ICAgICAgIC8vIGhhcyBhIGp1bXAgbGlua2VkIHRvIHRoaXMgaXNsYW5kIGhhc24ndCBmaW5hbGl6
ZWQgeWV0LCB0aGV5J3JlIGd1YXJhbnRlZWQgdG8gZmluYWxpemUgdGhlcmUgY29kZSBhbmQgcnVu
IGFuIGlzYi4KKyAgICAgICAgICAgICAgICBsaW5rQnVmZmVyLnNldElzSnVtcElzbGFuZCgpOwor
CisgICAgICAgICAgICAgICAgbGlua0J1ZmZlci5saW5rKGp1bXAsIENvZGVMb2NhdGlvbkxhYmVs
PE5vUHRyVGFnPih0YXJnZXQpKTsKKyAgICAgICAgICAgICAgICBGSU5BTElaRV9DT0RFKGxpbmtC
dWZmZXIsIE5vUHRyVGFnLCAiSnVtcCBJc2xhbmQ6ICVsdSIsIGp1bXBMb2NhdGlvbik7CisgICAg
ICAgICAgICB9OworCisgICAgICAgICAgICBpZiAoQVJNNjRBc3NlbWJsZXI6OmNhbkVtaXRKdW1w
KGJpdHdpc2VfY2FzdDx2b2lkKj4oanVtcExvY2F0aW9uKSwgYml0d2lzZV9jYXN0PHZvaWQqPih0
YXJnZXQpKSkgeworICAgICAgICAgICAgICAgIGVtaXRKdW1wVG8oYml0d2lzZV9jYXN0PHZvaWQq
Pih0YXJnZXQpKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKworICAg
ICAgICAgICAgdWludHB0cl90IG5leHRJc2xhbmRSZWdpb247CisgICAgICAgICAgICBpZiAoanVt
cExvY2F0aW9uID4gdGFyZ2V0KQorICAgICAgICAgICAgICAgIG5leHRJc2xhbmRSZWdpb24gPSBq
dW1wTG9jYXRpb24gLSByZWdpb25TaXplOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAg
ICAgIG5leHRJc2xhbmRSZWdpb24gPSBqdW1wTG9jYXRpb24gKyByZWdpb25TaXplOworCisgICAg
ICAgICAgICBSZWdpb25BbGxvY2F0b3IqIGFsbG9jYXRvciA9IGZpbmRSZWdpb24obmV4dElzbGFu
ZFJlZ2lvbik7CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChhbGxvY2F0b3IpOworICAgICAg
ICAgICAgdm9pZCogbmV4dElzbGFuZCA9IGFsbG9jYXRvci0+YWxsb2NhdGVJc2xhbmQoKTsKKyAg
ICAgICAgICAgIGVtaXRKdW1wVG8obmV4dElzbGFuZCk7CisgICAgICAgICAgICBqdW1wTG9jYXRp
b24gPSBiaXR3aXNlX2Nhc3Q8dWludHB0cl90PihuZXh0SXNsYW5kKTsKKyAgICAgICAgICAgIGN1
cnJlbnRJc2xhbmQgPSBuZXh0SXNsYW5kOworICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIHJl
c3VsdDsKICAgICB9CisjZW5kaWYgLy8gVVNFKEpVTVBfSVNMQU5EUykKIAogcHJpdmF0ZToKKyAg
ICBjbGFzcyBBbGxvY2F0b3IgOiBwdWJsaWMgTWV0YUFsbG9jYXRvciB7CisgICAgICAgIHVzaW5n
IEJhc2UgPSBNZXRhQWxsb2NhdG9yOworICAgIHB1YmxpYzoKKyAgICAgICAgQWxsb2NhdG9yKEZp
eGVkVk1Qb29sRXhlY3V0YWJsZUFsbG9jYXRvciYgYWxsb2NhdG9yKQorICAgICAgICAgICAgOiBC
YXNlKGFsbG9jYXRvci5nZXRMb2NrKCksIGppdEFsbG9jYXRpb25HcmFudWxlLCBwYWdlU2l6ZSgp
KSAvLyByb3VuZCB1cCBhbGwgYWxsb2NhdGlvbnMgdG8gMzIgYnl0ZXMKKyAgICAgICAgICAgICwg
bV9maXhlZEFsbG9jYXRvcihhbGxvY2F0b3IpCisgICAgICAgIHsKKyAgICAgICAgfQorCisgICAg
ICAgIEZyZWVTcGFjZVB0ciBhbGxvY2F0ZU5ld1NwYWNlKHNpemVfdCYpIG92ZXJyaWRlCisgICAg
ICAgIHsKKyAgICAgICAgICAgIC8vIFdlJ3JlIG9wZXJhdGluZyBpbiBhIGZpeGVkIHBvb2wsIHNv
IG5ldyBhbGxvY2F0aW9uIGlzIGFsd2F5cyBwcm9oaWJpdGVkLgorICAgICAgICAgICAgcmV0dXJu
IG51bGxwdHI7CisgICAgICAgIH0KKworICAgICAgICB2b2lkIG5vdGlmeU5lZWRQYWdlKHZvaWQq
IHBhZ2UsIHNpemVfdCBjb3VudCkgb3ZlcnJpZGUKKyAgICAgICAgeworICAgICAgICAgICAgbV9m
aXhlZEFsbG9jYXRvci5tX3Jlc2VydmF0aW9uLmNvbW1pdChwYWdlLCBwYWdlU2l6ZSgpICogY291
bnQpOworICAgICAgICB9CisKKyAgICAgICAgdm9pZCBub3RpZnlQYWdlSXNGcmVlKHZvaWQqIHBh
Z2UsIHNpemVfdCBjb3VudCkgb3ZlcnJpZGUKKyAgICAgICAgeworICAgICAgICAgICAgbV9maXhl
ZEFsbG9jYXRvci5tX3Jlc2VydmF0aW9uLmRlY29tbWl0KHBhZ2UsIHBhZ2VTaXplKCkgKiBjb3Vu
dCk7CisgICAgICAgIH0KKworICAgICAgICBGaXhlZFZNUG9vbEV4ZWN1dGFibGVBbGxvY2F0b3Im
IG1fZml4ZWRBbGxvY2F0b3I7CisgICAgfTsKKworI2lmIFVTRShKVU1QX0lTTEFORFMpCisgICAg
Y2xhc3MgUmVnaW9uQWxsb2NhdG9yIGZpbmFsIDogcHVibGljIEFsbG9jYXRvciB7CisgICAgICAg
IHVzaW5nIEJhc2UgPSBBbGxvY2F0b3I7CisgICAgcHVibGljOgorICAgICAgICBSZWdpb25BbGxv
Y2F0b3IoRml4ZWRWTVBvb2xFeGVjdXRhYmxlQWxsb2NhdG9yJiBhbGxvY2F0b3IpCisgICAgICAg
ICAgICA6IEJhc2UoYWxsb2NhdG9yKQorICAgICAgICB7CisgICAgICAgIH0KKworICAgICAgICAv
LyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICAgIC8vICB8IGpp
dCBhbGxvY2F0aW9ucyAtLT4gICA8LS0gaXNsYW5kcyB8CisgICAgICAgIC8vICAtLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAgICAgICAgdWludHB0cl90IHN0YXJ0KCkg
eyByZXR1cm4gYml0d2lzZV9jYXN0PHVpbnRwdHJfdD4odW50YWdDb2RlUHRyPEV4ZWN1dGFibGVN
ZW1vcnlQdHJUYWc+KG1fc3RhcnQpKTsgfQorICAgICAgICB1aW50cHRyX3QgZW5kKCkgeyByZXR1
cm4gYml0d2lzZV9jYXN0PHVpbnRwdHJfdD4odW50YWdDb2RlUHRyPEV4ZWN1dGFibGVNZW1vcnlQ
dHJUYWc+KG1fZW5kKSk7IH0KKworICAgICAgICB1aW50cHRyX3QgaXNsYW5kQmVnaW4oKQorICAg
ICAgICB7CisgICAgICAgICAgICAvLyBbc3RhcnQsIGFsbG9jYXRvckVuZCkKKyAgICAgICAgICAg
IHJldHVybiBlbmQoKSAtIGlzbGFuZFJlZ2lvblNpemU7CisgICAgICAgIH0KKworICAgICAgICB1
aW50cHRyX3QgYWxsb2NhdG9yU2l6ZSgpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBp
c2xhbmRCZWdpbigpIC0gc3RhcnQoKTsKKyAgICAgICAgfQorCisgICAgICAgIHNpemVfdCBpc2xh
bmRzUGVyUGFnZSgpCisgICAgICAgIHsKKyAgICAgICAgICAgIHNpemVfdCBpc2xhbmRzUGVyUGFn
ZSA9IHBhZ2VTaXplKCkgLyBpc2xhbmRTaXplSW5CeXRlczsKKyAgICAgICAgICAgIEFTU0VSVChp
c2xhbmRzUGVyUGFnZSAqIGlzbGFuZFNpemVJbkJ5dGVzID09IHBhZ2VTaXplKCkpOworICAgICAg
ICAgICAgQVNTRVJUKGlzUG93ZXJPZlR3byhpc2xhbmRzUGVyUGFnZSkpOworICAgICAgICAgICAg
cmV0dXJuIGlzbGFuZHNQZXJQYWdlOworICAgICAgICB9CisKKyAgICAgICAgdm9pZCByZWxlYXNl
KGNvbnN0IExvY2tIb2xkZXImIGxvY2tlciwgTWV0YUFsbG9jYXRvckhhbmRsZSYgaGFuZGxlKSBm
aW5hbAorICAgICAgICB7CisgICAgICAgICAgICBtX2ZpeGVkQWxsb2NhdG9yLmhhbmRsZVdpbGxC
ZVJlbGVhc2VkKGxvY2tlciwgaGFuZGxlKTsKKyAgICAgICAgICAgIEJhc2U6OnJlbGVhc2UobG9j
a2VyLCBoYW5kbGUpOworICAgICAgICB9CisKKyAgICAgICAgdm9pZCogYWxsb2NhdGVJc2xhbmQo
KQorICAgICAgICB7CisgICAgICAgICAgICB1aW50cHRyX3QgZW5kID0gdGhpcy0+ZW5kKCk7Cisg
ICAgICAgICAgICBhdXRvIGZpbmRSZXN1bHQgPSBbJl0gKCkgLT4gdm9pZCogeworICAgICAgICAg
ICAgICAgIHNpemVfdCByZXN1bHRCaXQgPSBpc2xhbmRCaXRzLmZpbmRDbGVhckJpdCgwKTsKKyAg
ICAgICAgICAgICAgICBpZiAocmVzdWx0Qml0ID09IGlzbGFuZEJpdHMuc2l6ZSgpKQorICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgICAgICAgICBpc2xhbmRCaXRz
W3Jlc3VsdEJpdF0gPSB0cnVlOworICAgICAgICAgICAgICAgIHVpbnRwdHJfdCByZXN1bHQgPSBl
bmQgLSAoKHJlc3VsdEJpdCArIDEpICogaXNsYW5kU2l6ZUluQnl0ZXMpOyAKKyAgICAgICAgICAg
ICAgICByZXR1cm4gYml0d2lzZV9jYXN0PHZvaWQqPihyZXN1bHQpOworICAgICAgICAgICAgfTsK
KworICAgICAgICAgICAgaWYgKHZvaWQqIHJlc3VsdCA9IGZpbmRSZXN1bHQoKSkKKyAgICAgICAg
ICAgICAgICByZXR1cm4gcmVzdWx0OworCisgICAgICAgICAgICBpc2xhbmRCaXRzLnJlc2l6ZShp
c2xhbmRCaXRzLnNpemUoKSArIGlzbGFuZHNQZXJQYWdlKCkpOworICAgICAgICAgICAgaWYgKFVO
TElLRUxZKGlzbGFuZEJpdHMuc2l6ZSgpID4gbWF4SXNsYW5kc1BlclJlZ2lvbikpCisgICAgICAg
ICAgICAgICAgY3Jhc2hPbkp1bXBJc2xhbmRFeGhhdXN0aW9uKCk7CisKKyAgICAgICAgICAgIHVp
bnRwdHJfdCBwYWdlQmVnaW4gPSBlbmQgLSAoaXNsYW5kQml0cy5zaXplKCkgKiBpc2xhbmRTaXpl
SW5CeXRlcyk7IC8vIFtpc2xhbmRCZWdpbiwgZW5kKQorICAgICAgICAgICAgbV9maXhlZEFsbG9j
YXRvci5tX3Jlc2VydmF0aW9uLmNvbW1pdChiaXR3aXNlX2Nhc3Q8dm9pZCo+KHBhZ2VCZWdpbiks
IHBhZ2VTaXplKCkpOworCisgICAgICAgICAgICB2b2lkKiByZXN1bHQgPSBmaW5kUmVzdWx0KCk7
CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChyZXN1bHQpOworICAgICAgICAgICAgcmV0dXJu
IHJlc3VsdDsKKyAgICAgICAgfQorCisgICAgICAgIE5FVkVSX0lOTElORSBOT19SRVRVUk5fRFVF
X1RPX0NSQVNIIHZvaWQgY3Jhc2hPbkp1bXBJc2xhbmRFeGhhdXN0aW9uKCkKKyAgICAgICAgewor
ICAgICAgICAgICAgQ1JBU0goKTsKKyAgICAgICAgfQorCisgICAgICAgIE9wdGlvbmFsPHNpemVf
dD4gaXNsYW5kQml0KHVpbnRwdHJfdCBpc2xhbmQpCisgICAgICAgIHsKKyAgICAgICAgICAgIHVp
bnRwdHJfdCBlbmQgPSB0aGlzLT5lbmQoKTsKKyAgICAgICAgICAgIGlmIChpc2xhbmRCZWdpbigp
IDw9IGlzbGFuZCAmJiBpc2xhbmQgPCBlbmQpCisgICAgICAgICAgICAgICAgcmV0dXJuICgoZW5k
IC0gaXNsYW5kKSAvIGlzbGFuZFNpemVJbkJ5dGVzKSAtIDE7CisgICAgICAgICAgICByZXR1cm4g
V1RGOjpudWxsb3B0OworICAgICAgICB9CisKKyAgICAgICAgdm9pZCBmcmVlSXNsYW5kKHVpbnRw
dHJfdCBpc2xhbmQpCisgICAgICAgIHsKKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKGlzbGFu
ZEJlZ2luKCkgPD0gaXNsYW5kICYmIGlzbGFuZCA8IGVuZCgpKTsKKyAgICAgICAgICAgIHNpemVf
dCBiaXQgPSBpc2xhbmRCaXQoaXNsYW5kKS52YWx1ZSgpOworICAgICAgICAgICAgUkVMRUFTRV9B
U1NFUlQoISFpc2xhbmRCaXRzW2JpdF0pOworICAgICAgICAgICAgaXNsYW5kQml0c1tiaXRdID0g
ZmFsc2U7CisgICAgICAgIH0KKworICAgICAgICBib29sIGlzSW5BbGxvY2F0ZWRNZW1vcnkoY29u
c3QgQWJzdHJhY3RMb2NrZXImIGxvY2tlciwgdm9pZCogYWRkcmVzcykKKyAgICAgICAgeworICAg
ICAgICAgICAgaWYgKEJhc2U6OmlzSW5BbGxvY2F0ZWRNZW1vcnkobG9ja2VyLCBhZGRyZXNzKSkK
KyAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgIGlmIChPcHRpb25hbDxz
aXplX3Q+IGJpdCA9IGlzbGFuZEJpdChiaXR3aXNlX2Nhc3Q8dWludHB0cl90PihhZGRyZXNzKSkp
IHsKKyAgICAgICAgICAgICAgICBpZiAoYml0LnZhbHVlKCkgPCBpc2xhbmRCaXRzLnNpemUoKSkK
KyAgICAgICAgICAgICAgICAgICAgcmV0dXJuICEhaXNsYW5kQml0c1tiaXQudmFsdWUoKV07Cisg
ICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKworICAg
ICAgICAvLyBSYW5nZTogW3N0YXJ0LCBlbmQpCisgICAgICAgIHZvaWQqIG1fc3RhcnQ7CisgICAg
ICAgIHZvaWQqIG1fZW5kOworICAgICAgICBGYXN0Qml0VmVjdG9yIGlzbGFuZEJpdHM7CisgICAg
fTsKKyNlbmRpZiAvLyBVU0UoSlVNUF9JU0xBTkRTKQorCisgICAgdGVtcGxhdGUgPHR5cGVuYW1l
IEZ1bmN0aW9uPgorICAgIHZvaWQgZm9yRWFjaEFsbG9jYXRvcihGdW5jdGlvbiBmdW5jdGlvbikK
KyAgICB7CisjaWYgVVNFKEpVTVBfSVNMQU5EUykKKyAgICAgICAgZm9yIChSZWdpb25BbGxvY2F0
b3ImIGFsbG9jYXRvciA6IG1fYWxsb2NhdG9ycykgeworICAgICAgICAgICAgdXNpbmcgRnVuY3Rp
b25SZXN1bHRUeXBlID0gZGVjbHR5cGUoZnVuY3Rpb24oYWxsb2NhdG9yKSk7CisgICAgICAgICAg
ICBpZiBjb25zdGV4cHIgKHN0ZDo6aXNfc2FtZTxJdGVyYXRpb25TdGF0dXMsIEZ1bmN0aW9uUmVz
dWx0VHlwZT46OnZhbHVlKSB7CisgICAgICAgICAgICAgICAgaWYgKGZ1bmN0aW9uKGFsbG9jYXRv
cikgPT0gSXRlcmF0aW9uU3RhdHVzOjpEb25lKQorICAgICAgICAgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgc3RhdGljX2Fzc2VydChzdGQ6
OmlzX3NhbWU8dm9pZCwgRnVuY3Rpb25SZXN1bHRUeXBlPjo6dmFsdWUpOworICAgICAgICAgICAg
ICAgIGZ1bmN0aW9uKGFsbG9jYXRvcik7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyNlbHNl
CisgICAgICAgIGZ1bmN0aW9uKG1fYWxsb2NhdG9yKTsKKyNlbmRpZiAvLyBVU0UoSlVNUF9JU0xB
TkRTKQorICAgIH0KKworI2lmIFVTRShKVU1QX0lTTEFORFMpCisgICAgY2xhc3MgSXNsYW5kcyA6
IHB1YmxpYyBSZWRCbGFja1RyZWU8SXNsYW5kcywgdm9pZCo+OjpOb2RlIHsKKyAgICAgICAgV1RG
X01BS0VfRkFTVF9BTExPQ0FURUQ7CisgICAgcHVibGljOgorICAgICAgICB2b2lkKiBrZXkoKSB7
IHJldHVybiByb290SnVtcExvY2F0aW9uLmRhdGFMb2NhdGlvbigpOyB9CisgICAgICAgIENvZGVM
b2NhdGlvbkxhYmVsPEV4ZWN1dGFibGVNZW1vcnlQdHJUYWc+IHJvb3RKdW1wTG9jYXRpb247Cisg
ICAgICAgIFZlY3RvcjxDb2RlTG9jYXRpb25MYWJlbDxFeGVjdXRhYmxlTWVtb3J5UHRyVGFnPj4g
anVtcElzbGFuZHM7CisgICAgfTsKKyNlbmRpZiAvLyBVU0UoSlVNUF9JU0xBTkRTKQorCisgICAg
TG9jayBtX2xvY2s7CiAgICAgUGFnZVJlc2VydmF0aW9uIG1fcmVzZXJ2YXRpb247CisjaWYgVVNF
KEpVTVBfSVNMQU5EUykKKyAgICBzdGQ6OmFycmF5PFJlZ2lvbkFsbG9jYXRvciwgbnVtYmVyT2ZS
ZWdpb25zPiBtX2FsbG9jYXRvcnM7CisgICAgUmVkQmxhY2tUcmVlPElzbGFuZHMsIHZvaWQqPiBp
c2xhbmRzRm9ySnVtcExvY2F0aW9uOworI2Vsc2UKKyAgICBBbGxvY2F0b3IgbV9hbGxvY2F0b3I7
CisjZW5kaWYgLy8gVVNFKEpVTVBfSVNMQU5EUykKIH07CiAKLUZpeGVkVk1Qb29sRXhlY3V0YWJs
ZUFsbG9jYXRvcjo6fkZpeGVkVk1Qb29sRXhlY3V0YWJsZUFsbG9jYXRvcigpCi17Ci0gICAgbV9y
ZXNlcnZhdGlvbi5kZWFsbG9jYXRlKCk7Ci19Ci0KIC8vIEtlZXAgdGhpcyBwb2ludGVyIGluIGEg
bXV0YWJsZSBnbG9iYWwgdmFyaWFibGUgdG8gaGVscCBMZWFrcyBmaW5kIGl0LgogLy8gQnV0IHdl
IGRvIG5vdCB1c2UgdGhpcyBwb2ludGVyLgogc3RhdGljIEZpeGVkVk1Qb29sRXhlY3V0YWJsZUFs
bG9jYXRvciogZ2xvYmFsRml4ZWRWTVBvb2xFeGVjdXRhYmxlQWxsb2NhdG9yVG9Xb3JrQXJvdW5k
TGVha3MgPSBudWxscHRyOwpAQCAtNDE3LDcgKzgzMyw2IEBAIHZvaWQgRXhlY3V0YWJsZUFsbG9j
YXRvcjo6aW5pdGlhbGl6ZVVuZGUKICAgICBSRUxFQVNFX0FTU0VSVCghZ19qc2NDb25maWcuZml4
ZWRWTVBvb2xFeGVjdXRhYmxlQWxsb2NhdG9yKTsKICAgICBnX2pzY0NvbmZpZy5maXhlZFZNUG9v
bEV4ZWN1dGFibGVBbGxvY2F0b3IgPSBuZXcgRml4ZWRWTVBvb2xFeGVjdXRhYmxlQWxsb2NhdG9y
KCk7CiAgICAgZ2xvYmFsRml4ZWRWTVBvb2xFeGVjdXRhYmxlQWxsb2NhdG9yVG9Xb3JrQXJvdW5k
TGVha3MgPSBnX2pzY0NvbmZpZy5maXhlZFZNUG9vbEV4ZWN1dGFibGVBbGxvY2F0b3I7Ci0gICAg
Q29kZVByb2ZpbGluZzo6bm90aWZ5QWxsb2NhdG9yKGdfanNjQ29uZmlnLmZpeGVkVk1Qb29sRXhl
Y3V0YWJsZUFsbG9jYXRvcik7CiB9CiAKIGJvb2wgRXhlY3V0YWJsZUFsbG9jYXRvcjo6aXNWYWxp
ZCgpIGNvbnN0CkBAIC00MjUsNyArODQwLDcgQEAgYm9vbCBFeGVjdXRhYmxlQWxsb2NhdG9yOjpp
c1ZhbGlkKCkgY29ucwogICAgIEZpeGVkVk1Qb29sRXhlY3V0YWJsZUFsbG9jYXRvciogYWxsb2Nh
dG9yID0gZ19qc2NDb25maWcuZml4ZWRWTVBvb2xFeGVjdXRhYmxlQWxsb2NhdG9yOwogICAgIGlm
ICghYWxsb2NhdG9yKQogICAgICAgICByZXR1cm4gQmFzZTo6aXNWYWxpZCgpOwotICAgIHJldHVy
biAhIWFsbG9jYXRvci0+Ynl0ZXNSZXNlcnZlZCgpOworICAgIHJldHVybiBhbGxvY2F0b3ItPmlz
VmFsaWQoKTsKIH0KIAogYm9vbCBFeGVjdXRhYmxlQWxsb2NhdG9yOjp1bmRlck1lbW9yeVByZXNz
dXJlKCkKQEAgLTQ1NiwxMSArODcxLDExIEBAIGRvdWJsZSBFeGVjdXRhYmxlQWxsb2NhdG9yOjpt
ZW1vcnlQcmVzc3UKICAgICByZXR1cm4gcmVzdWx0OwogfQogCi1SZWZQdHI8RXhlY3V0YWJsZU1l
bW9yeUhhbmRsZT4gRXhlY3V0YWJsZUFsbG9jYXRvcjo6YWxsb2NhdGUoc2l6ZV90IHNpemVJbkJ5
dGVzLCB2b2lkKiBvd25lclVJRCwgSklUQ29tcGlsYXRpb25FZmZvcnQgZWZmb3J0KQorUmVmUHRy
PEV4ZWN1dGFibGVNZW1vcnlIYW5kbGU+IEV4ZWN1dGFibGVBbGxvY2F0b3I6OmFsbG9jYXRlKHNp
emVfdCBzaXplSW5CeXRlcywgSklUQ29tcGlsYXRpb25FZmZvcnQgZWZmb3J0KQogewogICAgIEZp
eGVkVk1Qb29sRXhlY3V0YWJsZUFsbG9jYXRvciogYWxsb2NhdG9yID0gZ19qc2NDb25maWcuZml4
ZWRWTVBvb2xFeGVjdXRhYmxlQWxsb2NhdG9yOwogICAgIGlmICghYWxsb2NhdG9yKQotICAgICAg
ICByZXR1cm4gQmFzZTo6YWxsb2NhdGUoc2l6ZUluQnl0ZXMsIG93bmVyVUlELCBlZmZvcnQpOwor
ICAgICAgICByZXR1cm4gQmFzZTo6YWxsb2NhdGUoc2l6ZUluQnl0ZXMsIGVmZm9ydCk7CiAgICAg
aWYgKE9wdGlvbnM6OmxvZ0V4ZWN1dGFibGVBbGxvY2F0aW9uKCkpIHsKICAgICAgICAgTWV0YUFs
bG9jYXRvcjo6U3RhdGlzdGljcyBzdGF0cyA9IGFsbG9jYXRvci0+Y3VycmVudFN0YXRpc3RpY3Mo
KTsKICAgICAgICAgZGF0YUxvZygiQWxsb2NhdGluZyAiLCBzaXplSW5CeXRlcywgIiBieXRlcyBv
ZiBleGVjdXRhYmxlIG1lbW9yeSB3aXRoICIsIHN0YXRzLmJ5dGVzQWxsb2NhdGVkLCAiIGJ5dGVz
IGFsbG9jYXRlZCwgIiwgc3RhdHMuYnl0ZXNSZXNlcnZlZCwgIiBieXRlcyByZXNlcnZlZCwgYW5k
ICIsIHN0YXRzLmJ5dGVzQ29tbWl0dGVkLCAiIGNvbW1pdHRlZC5cbiIpOwpAQCAtNDg3LDcgKzkw
Miw3IEBAIFJlZlB0cjxFeGVjdXRhYmxlTWVtb3J5SGFuZGxlPiBFeGVjdXRhYmwKICAgICAgICAg
fQogICAgIH0KIAotICAgIFJlZlB0cjxFeGVjdXRhYmxlTWVtb3J5SGFuZGxlPiByZXN1bHQgPSBh
bGxvY2F0b3ItPmFsbG9jYXRlKHNpemVJbkJ5dGVzLCBvd25lclVJRCk7CisgICAgUmVmUHRyPEV4
ZWN1dGFibGVNZW1vcnlIYW5kbGU+IHJlc3VsdCA9IGFsbG9jYXRvci0+YWxsb2NhdGUoc2l6ZUlu
Qnl0ZXMpOwogICAgIGlmICghcmVzdWx0KSB7CiAgICAgICAgIGlmIChlZmZvcnQgIT0gSklUQ29t
cGlsYXRpb25DYW5GYWlsKSB7CiAgICAgICAgICAgICBkYXRhTG9nKCJSYW4gb3V0IG9mIGV4ZWN1
dGFibGUgbWVtb3J5IHdoaWxlIGFsbG9jYXRpbmcgIiwgc2l6ZUluQnl0ZXMsICIgYnl0ZXMuXG4i
KTsKQEAgLTUzOSw2ICs5NTQsMjYgQEAgdm9pZCBFeGVjdXRhYmxlQWxsb2NhdG9yOjpkdW1wUHJv
ZmlsZSgpCiB9CiAjZW5kaWYKIAorI2lmIFVTRShKVU1QX0lTTEFORFMpCit2b2lkKiBFeGVjdXRh
YmxlQWxsb2NhdG9yOjpnZXRKdW1wSXNsYW5kVG8odm9pZCogZnJvbSwgdm9pZCogbmV3RGVzdGlu
YXRpb24pCit7CisgICAgRml4ZWRWTVBvb2xFeGVjdXRhYmxlQWxsb2NhdG9yKiBhbGxvY2F0b3Ig
PSBnX2pzY0NvbmZpZy5maXhlZFZNUG9vbEV4ZWN1dGFibGVBbGxvY2F0b3I7CisgICAgaWYgKCFh
bGxvY2F0b3IpCisgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisKKyAgICBy
ZXR1cm4gYWxsb2NhdG9yLT5tYWtlSXNsYW5kKGJpdHdpc2VfY2FzdDx1aW50cHRyX3Q+KGZyb20p
LCBiaXR3aXNlX2Nhc3Q8dWludHB0cl90PihuZXdEZXN0aW5hdGlvbiksIGZhbHNlKTsKK30KKwor
dm9pZCogRXhlY3V0YWJsZUFsbG9jYXRvcjo6Z2V0SnVtcElzbGFuZFRvQ29uY3VycmVudGx5KHZv
aWQqIGZyb20sIHZvaWQqIG5ld0Rlc3RpbmF0aW9uKQoreworICAgIEZpeGVkVk1Qb29sRXhlY3V0
YWJsZUFsbG9jYXRvciogYWxsb2NhdG9yID0gZ19qc2NDb25maWcuZml4ZWRWTVBvb2xFeGVjdXRh
YmxlQWxsb2NhdG9yOworICAgIGlmICghYWxsb2NhdG9yKQorICAgICAgICBSRUxFQVNFX0FTU0VS
VF9OT1RfUkVBQ0hFRCgpOworCisgICAgcmV0dXJuIGFsbG9jYXRvci0+bWFrZUlzbGFuZChiaXR3
aXNlX2Nhc3Q8dWludHB0cl90Pihmcm9tKSwgYml0d2lzZV9jYXN0PHVpbnRwdHJfdD4obmV3RGVz
dGluYXRpb24pLCB0cnVlKTsKK30KKyNlbmRpZgorCiB2b2lkKiBzdGFydE9mRml4ZWRFeGVjdXRh
YmxlTWVtb3J5UG9vbEltcGwoKQogewogICAgIEZpeGVkVk1Qb29sRXhlY3V0YWJsZUFsbG9jYXRv
ciogYWxsb2NhdG9yID0gZ19qc2NDb25maWcuZml4ZWRWTVBvb2xFeGVjdXRhYmxlQWxsb2NhdG9y
OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9FeGVjdXRhYmxlQWxsb2NhdG9yLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9FeGVjdXRhYmxlQWxsb2Nh
dG9yLmgJKHJldmlzaW9uIDI1ODM1MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvRXhl
Y3V0YWJsZUFsbG9jYXRvci5oCSh3b3JraW5nIGNvcHkpCkBAIC03MSw3ICs3MSw3IEBAIHB1Ymxp
YzoKIAogICAgIHN0YXRpYyB2b2lkIGR1bXBQcm9maWxlKCkgeyB9CiAKLSAgICBSZWZQdHI8RXhl
Y3V0YWJsZU1lbW9yeUhhbmRsZT4gYWxsb2NhdGUoc2l6ZV90LCB2b2lkKiwgSklUQ29tcGlsYXRp
b25FZmZvcnQpIHsgcmV0dXJuIG51bGxwdHI7IH0KKyAgICBSZWZQdHI8RXhlY3V0YWJsZU1lbW9y
eUhhbmRsZT4gYWxsb2NhdGUoc2l6ZV90LCBKSVRDb21waWxhdGlvbkVmZm9ydCkgeyByZXR1cm4g
bnVsbHB0cjsgfQogCiAgICAgc3RhdGljIHZvaWQgc2V0SklURW5hYmxlZChib29sKSB7IH07CiAg
ICAgCkBAIC0xNTgsNyArMTU4LDcgQEAgY2xhc3MgRXhlY3V0YWJsZUFsbG9jYXRvciA6IHByaXZh
dGUgRXhlYwogcHVibGljOgogICAgIHVzaW5nIEJhc2UgPSBFeGVjdXRhYmxlQWxsb2NhdG9yQmFz
ZTsKIAotICAgIHN0YXRpYyBFeGVjdXRhYmxlQWxsb2NhdG9yJiBzaW5nbGV0b24oKTsKKyAgICBK
U19FWFBPUlRfUFJJVkFURSBzdGF0aWMgRXhlY3V0YWJsZUFsbG9jYXRvciYgc2luZ2xldG9uKCk7
CiAgICAgc3RhdGljIHZvaWQgaW5pdGlhbGl6ZSgpOwogICAgIHN0YXRpYyB2b2lkIGluaXRpYWxp
emVVbmRlcmx5aW5nQWxsb2NhdG9yKCk7CiAKQEAgLTE3Niw3ICsxNzYsNyBAQCBwdWJsaWM6CiAg
ICAgCiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIHZvaWQgc2V0SklURW5hYmxlZChib29s
KTsKIAotICAgIFJlZlB0cjxFeGVjdXRhYmxlTWVtb3J5SGFuZGxlPiBhbGxvY2F0ZShzaXplX3Qg
c2l6ZUluQnl0ZXMsIHZvaWQqIG93bmVyVUlELCBKSVRDb21waWxhdGlvbkVmZm9ydCk7CisgICAg
UmVmUHRyPEV4ZWN1dGFibGVNZW1vcnlIYW5kbGU+IGFsbG9jYXRlKHNpemVfdCBzaXplSW5CeXRl
cywgSklUQ29tcGlsYXRpb25FZmZvcnQpOwogCiAgICAgYm9vbCBpc1ZhbGlkRXhlY3V0YWJsZU1l
bW9yeShjb25zdCBBYnN0cmFjdExvY2tlciYsIHZvaWQqIGFkZHJlc3MpOwogCkBAIC0xODQsNiAr
MTg0LDExIEBAIHB1YmxpYzoKIAogICAgIExvY2smIGdldExvY2soKSBjb25zdDsKIAorI2lmIFVT
RShKVU1QX0lTTEFORFMpCisgICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCogZ2V0SnVtcElzbGFu
ZFRvKHZvaWQqIGZyb20sIHZvaWQqIG5ld0Rlc3RpbmF0aW9uKTsKKyAgICBKU19FWFBPUlRfUFJJ
VkFURSB2b2lkKiBnZXRKdW1wSXNsYW5kVG9Db25jdXJyZW50bHkodm9pZCogZnJvbSwgdm9pZCog
bmV3RGVzdGluYXRpb24pOworI2VuZGlmCisKIHByaXZhdGU6CiAgICAgRXhlY3V0YWJsZUFsbG9j
YXRvcigpID0gZGVmYXVsdDsKICAgICB+RXhlY3V0YWJsZUFsbG9jYXRvcigpID0gZGVmYXVsdDsK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbW1vblNsb3dQYXRocy5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29tbW9uU2xvd1Bh
dGhzLmNwcAkocmV2aXNpb24gMjU4MzUwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvQ29tbW9uU2xvd1BhdGhzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzIsNyArMzIsNiBAQAog
I2luY2x1ZGUgIkJ5dGVjb2RlU3RydWN0cy5oIgogI2luY2x1ZGUgIkNhbGxGcmFtZS5oIgogI2lu
Y2x1ZGUgIkNsb25lZEFyZ3VtZW50cy5oIgotI2luY2x1ZGUgIkNvZGVQcm9maWxpbmcuaCIKICNp
bmNsdWRlICJEZWZpbmVQcm9wZXJ0eUF0dHJpYnV0ZXMuaCIKICNpbmNsdWRlICJEaXJlY3RBcmd1
bWVudHMuaCIKICNpbmNsdWRlICJFcnJvci5oIgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvQ29tcGxldGlvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvQ29tcGxldGlvbi5jcHAJKHJldmlzaW9uIDI1ODM1MCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbXBsZXRpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0y
Nyw3ICsyNyw2IEBACiAjaW5jbHVkZSAiQ2FsbEZyYW1lLmgiCiAjaW5jbHVkZSAiQ2F0Y2hTY29w
ZS5oIgogI2luY2x1ZGUgIkNvZGVDYWNoZS5oIgotI2luY2x1ZGUgIkNvZGVQcm9maWxpbmcuaCIK
ICNpbmNsdWRlICJFeGNlcHRpb24uaCIKICNpbmNsdWRlICJJZGVudGlmaWVySW5saW5lcy5oIgog
I2luY2x1ZGUgIkludGVycHJldGVyLmgiCkBAIC0xMzgsOCArMTM3LDYgQEAgSlNWYWx1ZSBldmFs
dWF0ZShKU0dsb2JhbE9iamVjdCogZ2xvYmFsTwogICAgIFJFTEVBU0VfQVNTRVJUKHZtLmF0b21T
dHJpbmdUYWJsZSgpID09IFRocmVhZDo6Y3VycmVudCgpLmF0b21TdHJpbmdUYWJsZSgpKTsKICAg
ICBSRUxFQVNFX0FTU0VSVCghdm0uaXNDb2xsZWN0b3JCdXN5T25DdXJyZW50VGhyZWFkKCkpOwog
Ci0gICAgQ29kZVByb2ZpbGluZyBwcm9maWxlKHNvdXJjZSk7Ci0KICAgICBpZiAoIXRoaXNWYWx1
ZSB8fCB0aGlzVmFsdWUuaXNVbmRlZmluZWRPck51bGwoKSkKICAgICAgICAgdGhpc1ZhbHVlID0g
Z2xvYmFsT2JqZWN0OwogICAgIEpTT2JqZWN0KiB0aGlzT2JqID0ganNDYXN0PEpTT2JqZWN0Kj4o
dGhpc1ZhbHVlLnRvVGhpcyhnbG9iYWxPYmplY3QsIE5vdFN0cmljdE1vZGUpKTsKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTW9kdWxlTG9hZGVyLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU01vZHVsZUxvYWRlci5jcHAJKHJl
dmlzaW9uIDI1ODM1MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTW9kdWxl
TG9hZGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjksNyArMjksNiBAQAogCiAjaW5jbHVkZSAi
QnVpbHRpbk5hbWVzLmgiCiAjaW5jbHVkZSAiQ2F0Y2hTY29wZS5oIgotI2luY2x1ZGUgIkNvZGVQ
cm9maWxpbmcuaCIKICNpbmNsdWRlICJFcnJvci5oIgogI2luY2x1ZGUgIkV4Y2VwdGlvbi5oIgog
I2luY2x1ZGUgIkpTQ0lubGluZXMuaCIKQEAgLTQwMCw4ICszOTksNiBAQCBFbmNvZGVkSlNWYWx1
ZSBKU0NfSE9TVF9DQUxMIG1vZHVsZUxvYWRlCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNv
ZGUoSlNXZWJBc3NlbWJseTo6aW5zdGFudGlhdGUoZ2xvYmFsT2JqZWN0LCBwcm9taXNlLCBtb2R1
bGVLZXksIGpzU291cmNlQ29kZSkpOwogI2VuZGlmCiAKLSAgICBDb2RlUHJvZmlsaW5nIHByb2Zp
bGUoc291cmNlQ29kZSk7Ci0KICAgICBQYXJzZXJFcnJvciBlcnJvcjsKICAgICBzdGQ6OnVuaXF1
ZV9wdHI8TW9kdWxlUHJvZ3JhbU5vZGU+IG1vZHVsZVByb2dyYW1Ob2RlID0gcGFyc2U8TW9kdWxl
UHJvZ3JhbU5vZGU+KAogICAgICAgICB2bSwgc291cmNlQ29kZSwgSWRlbnRpZmllcigpLCBKU1Bh
cnNlckJ1aWx0aW5Nb2RlOjpOb3RCdWlsdGluLApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvT3B0aW9uc0xpc3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9PcHRpb25zTGlzdC5oCShyZXZpc2lvbiAyNTgzNTApCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25zTGlzdC5oCSh3b3JraW5nIGNvcHkpCkBAIC01MDAs
NiArNTAwLDcgQEAgY29uc3RleHByIGJvb2wgZW5hYmxlV2ViQXNzZW1ibHlTdHJlYW1pbgogICAg
IHYoQm9vbCwgZm9yY2VPU1JFeGl0VG9MTEludCwgZmFsc2UsIE5vcm1hbCwgIklmIHRydWUsIHdl
IGFsd2F5cyBleGl0IHRvIHRoZSBMTEludC4gSWYgZmFsc2UsIHdlIGV4aXQgdG8gd2hhdGV2ZXIg
aXMgbW9zdCBjb252ZW5pZW50LiIpIFwKICAgICB2KFVuc2lnbmVkLCBnZXRCeVZhbElDTWF4TnVt
YmVyT2ZJZGVudGlmaWVycywgNCwgTm9ybWFsLCAiTnVtYmVyIG9mIGlkZW50aWZpZXJzIHdlIHNl
ZSBpbiB0aGUgTExJbnQgdGhhdCBjb3VsZCBjYXVzZSB1cyB0byBiYWlsIG9uIGdlbmVyYXRpbmcg
YW4gSUMgZm9yIGdldF9ieV92YWwuIikgXAogICAgIHYoQm9vbCwgdXNlUHVibGljQ2xhc3NGaWVs
ZHMsIHRydWUsIE5vcm1hbCwgIklmIHRydWUsIHRoZSBwYXJzZXIgd2lsbCB1bmRlcnN0YW5kIHB1
YmxpYyBkYXRhIGZpZWxkcyBpbnNpZGUgY2xhc3Nlcy4iKSBcCisgICAgdihCb29sLCB1c2VSYW5k
b21pemluZ0V4ZWN1dGFibGVJc2xhbmRBbGxvY2F0aW9uLCBmYWxzZSwgTm9ybWFsLCAiRm9yIHRo
ZSBhcm02NCBFeGVjdXRhYmxlQWxsb2NhdG9yLCBpZiB0cnVlLCBzZWxlY3Qgd2hpY2ggcmVnaW9u
IHRvIHVzZSByYW5kb21seS4gVGhpcyBpcyB1c2VmdWwgZm9yIHRlc3RpbmcgdGhhdCBqdW1wIGlz
bGFuZHMgd29yay4iKSBcCiAKIGVudW0gT3B0aW9uRXF1aXZhbGVuY2UgewogICAgIFNhbWVPcHRp
b24sCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvdG9vbHMvQ29kZVByb2ZpbGUuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90b29scy9Db2RlUHJvZmlsZS5jcHAJ
KHJldmlzaW9uIDI1ODM1MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90b29scy9Db2RlUHJv
ZmlsZS5jcHAJKG5vbmV4aXN0ZW50KQpAQCAtMSwxNzIgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAxMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgot
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgot
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQg
QU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5j
bHVkZSAiQ29kZVByb2ZpbGUuaCIKLQotI2luY2x1ZGUgIkNvZGVCbG9jay5oIgotI2luY2x1ZGUg
IkNvZGVQcm9maWxpbmcuaCIKLSNpbmNsdWRlICJMaW5rQnVmZmVyLmgiCi0jaW5jbHVkZSAiUHJv
ZmlsZVRyZWVOb2RlLmgiCi0jaW5jbHVkZSA8d3RmL1N0YWNrVHJhY2UuaD4KLSNpbmNsdWRlIDx3
dGYvdGV4dC9XVEZTdHJpbmcuaD4KLQotbmFtZXNwYWNlIEpTQyB7Ci0KLS8vIE1hcCBmcm9tIENv
ZGVUeXBlIGVudW0gdG8gYSBjb3JyZXNwb25kaW5nIG5hbWUuCi1zdGF0aWMgY29uc3QgY2hhciog
Y29uc3Qgc19jb2RlVHlwZU5hbWVzW0NvZGVQcm9maWxlOjpOdW1iZXJPZkNvZGVUeXBlc10gPSB7
Ci0gICAgIltbRW5naW5lQ29kZV1dIiwKLSAgICAiW1tHbG9iYWxUaHVua11dIiwKLSAgICAiW1tS
ZWdFeHBDb2RlXV0iLAotICAgICJbW0RGR0pJVF1dIiwKLSAgICAiW1tCYXNlbGluZU9ubHldXSIs
Ci0gICAgIltbQmFzZWxpbmVQcm9maWxlXV0iLAotICAgICJbW0Jhc2VsaW5lT1NSXV0iLAotICAg
ICJbW0VuZ2luZUZyYW1lXV0iCi19OwotCi0vLyBIZWxwZXIgZnVuY3Rpb24sIHRydW5jYXRlIHRy
YWNlcyB0byBwcnVuZSB0aGUgb3V0cHV0ICYgbWFrZSB2ZXJ5IHZlcmJvc2UgbW9kZSBhIGxpdHRs
ZSBtb3JlIHJlYWRhYmxlLgotc3RhdGljIGJvb2wgdHJ1bmNhdGVUcmFjZShjb25zdCBjaGFyKiBz
eW1ib2xOYW1lKQotewotICAgIHJldHVybiAhc3RyY21wKHN5bWJvbE5hbWUsICJKU0M6OkJ5dGVj
b2RlR2VuZXJhdG9yOjpnZW5lcmF0ZSgpIikKLSAgICAgICAgfHwgIXN0cmNtcChzeW1ib2xOYW1l
LCAiSlNDOjpQYXJzZXI8SlNDOjpMZXhlcjx1bnNpZ25lZCBjaGFyPj46OnBhcnNlSW5uZXIoKSIp
Ci0gICAgICAgIHx8ICFzdHJjbXAoc3ltYm9sTmFtZSwgIldURjo6ZmFzdE1hbGxvYyh1bnNpZ25l
ZCBsb25nKSIpCi0gICAgICAgIHx8ICFzdHJjbXAoc3ltYm9sTmFtZSwgIldURjo6Y2FsY3VsYXRl
VVRDT2Zmc2V0KCkiKQotICAgICAgICB8fCAhc3RyY21wKHN5bWJvbE5hbWUsICJKU0M6OkRGRzo6
Qnl0ZUNvZGVQYXJzZXI6OnBhcnNlQ29kZUJsb2NrKCkiKTsKLSAgICAgICAgCi19Ci0KLS8vIEVh
Y2ggdHJhY2UgY29uc2lzdHMgb2YgYSBzZXF1ZW5jZSBvZiB6ZXJvIG9yIG1vcmUgJ0VuZ2luZUZy
YW1lJyBlbnRyaWVzLAotLy8gZm9sbG93ZWQgYnkgYSBzYW1wbGUgaW4gSklUIGNvZGUsIG9yIG9u
ZSBvciBtb3JlICdFbmdpbmVGcmFtZScgZW50cmllcywKLS8vIGZvbGxvd2VkIGJ5IGEgJ0VuZ2lu
ZUNvZGUnIHRlcm1pbmF0b3IuCi12b2lkIENvZGVQcm9maWxlOjpzYW1wbGUodm9pZCogcGMsIHZv
aWQqKiBmcmFtZVBvaW50ZXIpCi17Ci0gICAgLy8gRGlzYWxsb3cgdHJhY2VzIGNvbnRhaW5pbmcg
b25seSBhICdFbmdpbmVDb2RlJyB0ZXJtaW5hdG9yLCB3aXRob3V0IGFueSAnRW5naW5lRnJhbWUn
IGZyYW1lcy4KLSAgICBpZiAoIWZyYW1lUG9pbnRlcikKLSAgICAgICAgcmV0dXJuOwotCi0gICAg
d2hpbGUgKGZyYW1lUG9pbnRlcikgewotICAgICAgICBDb2RlVHlwZSB0eXBlOwotCi0jaWYgRU5B
QkxFKEpJVCkKLSAgICAgICAgLy8gRGV0ZXJtaW5lIGlmIHRoaXMgc2FtcGxlIGZlbGwgaW4gSklU
IGNvZGUsIGFuZCBpZiBzbywgZnJvbSB3aGljaCBKSVQgJiB3aHkuCi0gICAgICAgIHZvaWQqIG93
bmVyVUlEID0gQ29kZVByb2ZpbGluZzo6Z2V0T3duZXJVSURGb3JQQyhwYyk7Ci0KLSAgICAgICAg
aWYgKCFvd25lclVJRCkKLSAgICAgICAgICAgIHR5cGUgPSBFbmdpbmVGcmFtZTsKLSAgICAgICAg
ZWxzZSBpZiAob3duZXJVSUQgPT0gR0xPQkFMX1RIVU5LX0lEKQotICAgICAgICAgICAgdHlwZSA9
IEdsb2JhbFRodW5rOwotICAgICAgICBlbHNlIGlmIChvd25lclVJRCA9PSBSRUdFWFBfQ09ERV9J
RCkKLSAgICAgICAgICAgIHR5cGUgPSBSZWdFeHBDb2RlOwotICAgICAgICBlbHNlIHsKLSAgICAg
ICAgICAgIENvZGVCbG9jayogY29kZUJsb2NrID0gc3RhdGljX2Nhc3Q8Q29kZUJsb2NrKj4ob3du
ZXJVSUQpOwotICAgICAgICAgICAgaWYgKGNvZGVCbG9jay0+aml0VHlwZSgpID09IEpJVFR5cGU6
OkRGR0pJVCkKLSAgICAgICAgICAgICAgICB0eXBlID0gREZHSklUOwotICAgICAgICAgICAgZWxz
ZSBpZiAoIWNhbkNvbXBpbGUoY29kZUJsb2NrLT5jYXBhYmlsaXR5TGV2ZWxTdGF0ZSgpKSkKLSAg
ICAgICAgICAgICAgICB0eXBlID0gQmFzZWxpbmVPbmx5OwotICAgICAgICAgICAgZWxzZSBpZiAo
Y29kZUJsb2NrLT5yZXBsYWNlbWVudCgpKQotICAgICAgICAgICAgICAgIHR5cGUgPSBCYXNlbGlu
ZU9TUjsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICB0eXBlID0gQmFzZWxpbmVQ
cm9maWxlOwotICAgICAgICB9Ci0jZWxzZQotICAgICAgICB0eXBlID0gRW5naW5lRnJhbWU7Ci0j
ZW5kaWYKLQotICAgICAgICAvLyBBIHNhbXBsZSBpbiBKSVQgY29kZSB0ZXJtaW5hdGVzIHRoZSB0
cmFjZS4KLSAgICAgICAgbV9zYW1wbGVzLmFwcGVuZChDb2RlUmVjb3JkKHBjLCB0eXBlKSk7Ci0g
ICAgICAgIGlmICh0eXBlICE9IEVuZ2luZUZyYW1lKQotICAgICAgICAgICAgcmV0dXJuOwotCi0j
aWYgT1MoREFSV0lOKSAmJiBDUFUoWDg2XzY0KQotICAgICAgICAvLyBXYWxrIHVwIHRoZSBzdGFj
ay4KLSAgICAgICAgcGMgPSBmcmFtZVBvaW50ZXJbMV07Ci0gICAgICAgIGZyYW1lUG9pbnRlciA9
IHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCoqPigqZnJhbWVQb2ludGVyKTsKLSNlbGlmIE9TKExJTlVY
KSAmJiBDUFUoWDg2KQotICAgICAgICAvLyBEb24ndCB1bndpbmQgdGhlIHN0YWNrIGFzIHNvbWUg
ZGVwZW5kZW50IHRoaXJkIHBhcnR5IGxpYnJhcmllcwotICAgICAgICAvLyBtYXkgYmUgY29tcGls
ZWQgd2l0aCAtZm9taXQtZnJhbWUtcG9pbnRlci4KLSAgICAgICAgZnJhbWVQb2ludGVyID0gMDsK
LSNlbHNlCi0gICAgICAgIC8vIFRoaXMgcGxhdGZvcm0gaXMgbm90IHlldCBzdXBwb3J0ZWQhCi0g
ICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0jZW5kaWYKLSAgICB9Ci0KLSAg
ICAvLyBJZiB3ZSBnZXQgaGVyZSwgd2Ugd2Fsa2VkIHRoZSBlbnRpcmUgc3RhY2sgd2l0aG91dCBm
aW5kaW5nIGFueSBmcmFtZXMgb2YgSklUIGNvZGUuCi0gICAgbV9zYW1wbGVzLmFwcGVuZChDb2Rl
UmVjb3JkKDAsIEVuZ2luZUNvZGUpKTsKLX0KLQotdm9pZCBDb2RlUHJvZmlsZTo6cmVwb3J0KCkK
LXsKLSAgICBkYXRhTG9nRigiPENvZGVQcm9maWxpbmcgJXM6JWQ+XG4iLCBtX2ZpbGUuZGF0YSgp
LCBtX2xpbmVOdW1iZXIpOwotCi0gICAgLy8gSG93IG1hbnkgZnJhbWVzIG9mIEMtY29kZSB0byBw
cmludCAtIDAsIGlmIG5vdCB2ZXJib3NlLCAxIGlmIHZlcmJvc2UsIHVwIHRvIDEwMjQgaWYgdmVy
eSB2ZXJib3NlLgotICAgIHVuc2lnbmVkIHJlY3Vyc2lvbkxpbWl0ID0gQ29kZVByb2ZpbGluZzo6
YmVWZXJ5VmVyYm9zZSgpID8gMTAyNCA6IENvZGVQcm9maWxpbmc6OmJlVmVyYm9zZSgpOwotCi0g
ICAgUHJvZmlsZVRyZWVOb2RlIHByb2ZpbGU7Ci0KLSAgICAvLyBXYWxrIHRocm91Z2ggdGhlIHNh
bXBsZSBidWZmZXIuCi0gICAgc2l6ZV90IHRyYWNlID0gMDsKLSAgICB3aGlsZSAodHJhY2UgPCBt
X3NhbXBsZXMuc2l6ZSgpKSB7Ci0KLSAgICAgICAgLy8gQWxsIHRyYWNlcyBhcmUgemVybyBvciBt
b3JlICdFbmdpbmVGcmFtZSdzLCBmb2xsb3dlZCBieSBhIG5vbi0nRW5naW5lRnJhbWUnLgotICAg
ICAgICAvLyBTY2FuIHRvIGZpbmQgdGhlIGxhc3Qgc2FtcGxlIGluIHRoZSB0cmFjZS4KLSAgICAg
ICAgc2l6ZV90IGxhc3RJblRyYWNlID0gdHJhY2U7Ci0gICAgICAgIHdoaWxlIChtX3NhbXBsZXNb
bGFzdEluVHJhY2VdLnR5cGUgPT0gRW5naW5lRnJhbWUpCi0gICAgICAgICAgICArK2xhc3RJblRy
YWNlOwotCi0gICAgICAgIC8vIFdlIHVzZSB0aGUgbGFzdCBzYW1wbGUgdHlwZSB0byBsb29rIHVw
IGEgbmFtZSAodXNlZCBhcyBhIGJ1Y2tldCBpbiB0aGUgcHJvZmlsZXIpLgotICAgICAgICBQcm9m
aWxlVHJlZU5vZGUqIGNhbGxiYWNrcyA9IHByb2ZpbGUuc2FtcGxlQ2hpbGQoc19jb2RlVHlwZU5h
bWVzW21fc2FtcGxlc1tsYXN0SW5UcmFjZV0udHlwZV0pOwotCi0gICAgICAgIC8vIElmIHRoZXJl
IGFyZSBhbnkgc2FtcGxlcyBpbiBDLWNvZGUsIGFkZCB1cCB0byByZWN1cnNpb25MaW1pdCBvZiB0
aGVtIGludG8gdGhlIHByb2ZpbGUgdHJlZS4KLSAgICAgICAgc2l6ZV90IGxhc3RFbmdpbmVGcmFt
ZSA9IGxhc3RJblRyYWNlOwotICAgICAgICBmb3IgKHVuc2lnbmVkIGNvdW50ID0gMDsgbGFzdEVu
Z2luZUZyYW1lID4gdHJhY2UgJiYgY291bnQgPCByZWN1cnNpb25MaW1pdDsgKytjb3VudCkgewot
ICAgICAgICAgICAgLS1sYXN0RW5naW5lRnJhbWU7Ci0gICAgICAgICAgICBBU1NFUlQobV9zYW1w
bGVzW2xhc3RFbmdpbmVGcmFtZV0udHlwZSA9PSBFbmdpbmVGcmFtZSk7Ci0gICAgICAgICAgICBj
b25zdCBjaGFyKiBuYW1lID0gIjx1bmtub3duPiI7Ci0gICAgICAgICAgICBhdXRvIGRlbWFuZ2xl
ZCA9IFN0YWNrVHJhY2U6OmRlbWFuZ2xlKG1fc2FtcGxlc1tsYXN0RW5naW5lRnJhbWVdLnBjKTsK
LSAgICAgICAgICAgIGlmIChkZW1hbmdsZWQpCi0gICAgICAgICAgICAgICAgbmFtZSA9IGRlbWFu
Z2xlZC0+ZGVtYW5nbGVkTmFtZSgpID8gZGVtYW5nbGVkLT5kZW1hbmdsZWROYW1lKCkgOiBkZW1h
bmdsZWQtPm1hbmdsZWROYW1lKCk7Ci0gICAgICAgICAgICBjYWxsYmFja3MgPSBjYWxsYmFja3Mt
PnNhbXBsZUNoaWxkKG5hbWUpOwotICAgICAgICAgICAgaWYgKHRydW5jYXRlVHJhY2UobmFtZSkp
Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBNb3ZlIG9u
IHRvIHRoZSBuZXh0IHRyYWNlLgotICAgICAgICB0cmFjZSA9IGxhc3RJblRyYWNlICsgMTsKLSAg
ICAgICAgQVNTRVJUKHRyYWNlIDw9IG1fc2FtcGxlcy5zaXplKCkpOwotICAgIH0KLQotICAgIC8v
IE91dHB1dCB0aGUgcHJvZmlsZSB0cmVlLgotICAgIGRhdGFMb2dGKCJUb3RhbCBzYW1wbGVzOiAl
bGxkXG4iLCBzdGF0aWNfY2FzdDxsb25nIGxvbmc+KHByb2ZpbGUuY2hpbGRDb3VudCgpKSk7Ci0g
ICAgcHJvZmlsZS5kdW1wKCk7Ci0gICAgCi0gICAgZm9yIChzaXplX3QgaSA9IDAgOyBpIDwgbV9j
aGlsZHJlbi5zaXplKCk7ICsraSkKLSAgICAgICAgbV9jaGlsZHJlbltpXS0+cmVwb3J0KCk7Ci0K
LSAgICBkYXRhTG9nRigiPC9Db2RlUHJvZmlsaW5nICVzOiVkPlxuIiwgbV9maWxlLmRhdGEoKSwg
bV9saW5lTnVtYmVyKTsKLX0KLQotfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3Rvb2xz
L0NvZGVQcm9maWxlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3Rvb2xz
L0NvZGVQcm9maWxlLmgJKHJldmlzaW9uIDI1ODM1MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS90b29scy9Db2RlUHJvZmlsZS5oCShub25leGlzdGVudCkKQEAgLTEsODkgKzAsMCBAQAotLyoK
LSAqIENvcHlyaWdodCAoQykgMjAxMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0g
KgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBg
QVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotCi0jcHJhZ21hIG9uY2UK
LQotI2luY2x1ZGUgIlNvdXJjZUNvZGUuaCIKLSNpbmNsdWRlICJUaWVyZWRNTWFwQXJyYXkuaCIK
LSNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+Ci0KLW5hbWVzcGFjZSBKU0MgewotCi1jbGFz
cyBDb2RlUHJvZmlsZSB7Ci0gICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7Ci1wdWJsaWM6Ci0g
ICAgQ29kZVByb2ZpbGUoY29uc3QgU291cmNlQ29kZSYgc291cmNlLCBDb2RlUHJvZmlsZSogcGFy
ZW50KQotICAgICAgICA6IG1fZmlsZShTdHJpbmcoc291cmNlLnByb3ZpZGVyKCktPnVybCgpKS51
dGY4KCkpCi0gICAgICAgICwgbV9saW5lTnVtYmVyKHNvdXJjZS5maXJzdExpbmUoKS5vbmVCYXNl
ZEludCgpKQotICAgICAgICAsIG1fcGFyZW50KHBhcmVudCkKLSAgICB7Ci0gICAgICAgIGlmIChw
YXJlbnQpCi0gICAgICAgICAgICBwYXJlbnQtPmFkZENoaWxkKHN0ZDo6dW5pcXVlX3B0cjxDb2Rl
UHJvZmlsZT4odGhpcykpOwotICAgIH0KLQotICAgIHZvaWQgc2FtcGxlKHZvaWQqIHBjLCB2b2lk
KiogZnJhbWVQb2ludGVyKTsKLSAgICB2b2lkIHJlcG9ydCgpOwotCi0gICAgQ29kZVByb2ZpbGUq
IHBhcmVudCgpCi0gICAgewotICAgICAgICByZXR1cm4gbV9wYXJlbnQ7Ci0gICAgfQotICAgIAot
ICAgIHZvaWQgYWRkQ2hpbGQoc3RkOjp1bmlxdWVfcHRyPENvZGVQcm9maWxlPiBjaGlsZCkKLSAg
ICB7Ci0gICAgICAgIG1fY2hpbGRyZW4uYXBwZW5kKFdURk1vdmUoY2hpbGQpKTsKLSAgICB9Ci0K
LSAgICBlbnVtIENvZGVUeXBlIHsKLSAgICAgICAgRW5naW5lQ29kZSwKLSAgICAgICAgR2xvYmFs
VGh1bmssCi0gICAgICAgIFJlZ0V4cENvZGUsCi0gICAgICAgIERGR0pJVCwKLSAgICAgICAgQmFz
ZWxpbmVPbmx5LAotICAgICAgICBCYXNlbGluZVByb2ZpbGUsCi0gICAgICAgIEJhc2VsaW5lT1NS
LAotICAgICAgICBFbmdpbmVGcmFtZSwKLSAgICAgICAgTnVtYmVyT2ZDb2RlVHlwZXMKLSAgICB9
OwotCi1wcml2YXRlOgotICAgIHN0cnVjdCBDb2RlUmVjb3JkIHsKLSAgICAgICAgQ29kZVJlY29y
ZCh2b2lkKiBwYywgQ29kZVR5cGUgdHlwZSkKLSAgICAgICAgICAgIDogcGMocGMpCi0gICAgICAg
ICAgICAsIHR5cGUodHlwZSkKLSAgICAgICAgewotICAgICAgICB9Ci0gICAgICAgIHZvaWQqIHBj
OwotICAgICAgICBDb2RlVHlwZSB0eXBlOwotICAgIH07Ci0KLSAgICBDU3RyaW5nIG1fZmlsZTsK
LSAgICB1bnNpZ25lZCBtX2xpbmVOdW1iZXI7Ci0gICAgQ29kZVByb2ZpbGUqIG1fcGFyZW50Owot
ICAgIFZlY3RvcjxzdGQ6OnVuaXF1ZV9wdHI8Q29kZVByb2ZpbGU+PiBtX2NoaWxkcmVuOwotICAg
IFRpZXJlZE1NYXBBcnJheTxDb2RlUmVjb3JkPiBtX3NhbXBsZXM7Ci19OwotCi19IC8vIG5hbWVz
cGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90b29scy9Db2RlUHJvZmlsaW5n
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvdG9vbHMvQ29kZVByb2Zp
bGluZy5jcHAJKHJldmlzaW9uIDI1ODM1MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90b29s
cy9Db2RlUHJvZmlsaW5nLmNwcAkobm9uZXhpc3RlbnQpCkBAIC0xLDE2OSArMCwwIEBACi0vKgot
ICogQ29weXJpZ2h0IChDKSAyMDEyLTIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0g
KiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQotI2luY2x1ZGUg
ImNvbmZpZy5oIgotI2luY2x1ZGUgIkNvZGVQcm9maWxpbmcuaCIKLQotI2luY2x1ZGUgIkNvZGVQ
cm9maWxlLmgiCi0jaW5jbHVkZSAiTWFjaGluZUNvbnRleHQuaCIKLSNpbmNsdWRlIDx3dGYvTWV0
YUFsbG9jYXRvci5oPgotCi0jaWYgSEFWRShTSUdOQUxfSCkKLSNpbmNsdWRlIDxzaWduYWwuaD4K
LSNlbmRpZgotCi0jaWYgSEFWRShNQUNISU5FX0NPTlRFWFQpCi0jaW5jbHVkZSA8c3lzL3RpbWUu
aD4KLSNlbmRpZgotCi1uYW1lc3BhY2UgSlNDIHsKLQotdm9sYXRpbGUgQ29kZVByb2ZpbGUqIENv
ZGVQcm9maWxpbmc6OnNfcHJvZmlsZVN0YWNrID0gMDsKLUNvZGVQcm9maWxpbmc6Ok1vZGUgQ29k
ZVByb2ZpbGluZzo6c19tb2RlID0gQ29kZVByb2ZpbGluZzo6RGlzYWJsZWQ7Ci1XVEY6Ok1ldGFB
bGxvY2F0b3JUcmFja2VyKiBDb2RlUHJvZmlsaW5nOjpzX3RyYWNrZXIgPSAwOwotCi1JR05PUkVf
V0FSTklOR1NfQkVHSU4oIm1pc3Npbmctbm9yZXR1cm4iKQotCi0jaWYgSEFWRShNQUNISU5FX0NP
TlRFWFQpCi0vLyBIZWxwZXIgZnVuY3Rpb24gdG8gc3RhcnQgJiBzdG9wIHRoZSB0aW1lci4KLS8v
IFByZXNlbnRseSB3ZSdyZSB1c2luZyB0aGUgd2FsbC1jbG9jayB0aW1lciwgc2luY2UgdGhpcyBz
ZWVtcyB0byBnaXZlIHRoZSBiZXN0IHJlc3VsdHMuCi1zdGF0aWMgdm9pZCBzZXRQcm9maWxlVGlt
ZXIodW5zaWduZWQgdXNlYykKLXsKLSAgICBpdGltZXJ2YWwgdGltZXI7Ci0gICAgdGltZXIuaXRf
dmFsdWUudHZfc2VjID0gMDsKLSAgICB0aW1lci5pdF92YWx1ZS50dl91c2VjID0gdXNlYzsKLSAg
ICB0aW1lci5pdF9pbnRlcnZhbC50dl9zZWMgPSAwOwotICAgIHRpbWVyLml0X2ludGVydmFsLnR2
X3VzZWMgPSB1c2VjOwotICAgIHNldGl0aW1lcihJVElNRVJfUkVBTCwgJnRpbWVyLCAwKTsKLX0K
LSNlbmRpZgotCi1JR05PUkVfV0FSTklOR1NfRU5ECi0KLSNpZiBIQVZFKE1BQ0hJTkVfQ09OVEVY
VCkKLXN0YXRpYyB2b2lkIHByb2ZpbGluZ1RpbWVyKGludCwgc2lnaW5mb190Kiwgdm9pZCogdWFw
KQotewotICAgIFBsYXRmb3JtUmVnaXN0ZXJzJiBwbGF0Zm9ybVJlZ2lzdGVycyA9IFdURjo6cmVn
aXN0ZXJzRnJvbVVDb250ZXh0KHN0YXRpY19jYXN0PHVjb250ZXh0X3QqPih1YXApKTsKLSAgICBp
ZiAoYXV0byBpbnN0cnVjdGlvblBvaW50ZXIgPSBNYWNoaW5lQ29udGV4dDo6aW5zdHJ1Y3Rpb25Q
b2ludGVyKHBsYXRmb3JtUmVnaXN0ZXJzKSkgewotICAgICAgICBDb2RlUHJvZmlsaW5nOjpzYW1w
bGUoCi0gICAgICAgICAgICBpbnN0cnVjdGlvblBvaW50ZXItPnVudGFnZ2VkRXhlY3V0YWJsZUFk
ZHJlc3MoKSwKLSAgICAgICAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCoqPihNYWNoaW5lQ29u
dGV4dDo6ZnJhbWVQb2ludGVyKHBsYXRmb3JtUmVnaXN0ZXJzKSkpOwotICAgIH0KLX0KLSNlbmRp
ZgotCi0vLyBDYWxsYmFjayB0cmlnZ2VyZWQgd2hlbiB0aGUgdGltZXIgaXMgZmlyZWQuCi12b2lk
IENvZGVQcm9maWxpbmc6OnNhbXBsZSh2b2lkKiBwYywgdm9pZCoqIGZyYW1lUG9pbnRlcikKLXsK
LSAgICBDb2RlUHJvZmlsZSogcHJvZmlsZVN0YWNrID0gY29uc3RfY2FzdDxDb2RlUHJvZmlsZSo+
KHNfcHJvZmlsZVN0YWNrKTsKLSAgICBpZiAocHJvZmlsZVN0YWNrKQotICAgICAgICBwcm9maWxl
U3RhY2stPnNhbXBsZShwYywgZnJhbWVQb2ludGVyKTsKLX0KLQotdm9pZCBDb2RlUHJvZmlsaW5n
Ojpub3RpZnlBbGxvY2F0b3IoV1RGOjpNZXRhQWxsb2NhdG9yKiBhbGxvY2F0b3IpCi17Ci0gICAg
Ly8gQ2hlY2sgZm9yIEpTQ19DT0RFX1BST0ZJTElORy4KLSAgICBjb25zdCBjaGFyKiBjb2RlUHJv
ZmlsaW5nTW9kZSA9IGdldGVudigiSlNDX0NPREVfUFJPRklMSU5HIik7Ci0gICAgaWYgKCFjb2Rl
UHJvZmlsaW5nTW9kZSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgLy8gQ2hlY2sgZm9yIGEgdmFs
aWQgbW9kZSwgY3VycmVudGx5ICIxIiwgIjIiLCBvciAiMyIuCi0gICAgaWYgKCFjb2RlUHJvZmls
aW5nTW9kZVswXSB8fCBjb2RlUHJvZmlsaW5nTW9kZVsxXSkKLSAgICAgICAgcmV0dXJuOwotICAg
IHN3aXRjaCAoKmNvZGVQcm9maWxpbmdNb2RlKSB7Ci0gICAgY2FzZSAnMSc6Ci0gICAgICAgIHNf
bW9kZSA9IEVuYWJsZWQ7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgJzInOgotICAgICAgICBz
X21vZGUgPSBWZXJib3NlOwotICAgICAgICBicmVhazsKLSAgICBjYXNlICczJzoKLSAgICAgICAg
c19tb2RlID0gVmVyeVZlcmJvc2U7Ci0gICAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAg
ICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBBU1NFUlQoZW5hYmxlZCgpKTsKLSAgICBBU1NFUlQo
IXNfdHJhY2tlcik7Ci0gICAgc190cmFja2VyID0gbmV3IFdURjo6TWV0YUFsbG9jYXRvclRyYWNr
ZXIoKTsKLSAgICBhbGxvY2F0b3ItPnRyYWNrQWxsb2NhdGlvbnMoc190cmFja2VyKTsKLX0KLQot
dm9pZCogQ29kZVByb2ZpbGluZzo6Z2V0T3duZXJVSURGb3JQQyh2b2lkKiBhZGRyZXNzKQotewot
ICAgIGlmICghc190cmFja2VyKQotICAgICAgICByZXR1cm4gMDsKLSAgICBXVEY6Ok1ldGFBbGxv
Y2F0b3JIYW5kbGUqIGhhbmRsZSA9IHNfdHJhY2tlci0+ZmluZChhZGRyZXNzKTsKLSAgICBpZiAo
IWhhbmRsZSkKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgcmV0dXJuIGhhbmRsZS0+b3duZXJVSUQo
KTsKLX0KLQotdm9pZCBDb2RlUHJvZmlsaW5nOjpiZWdpbihjb25zdCBTb3VyY2VDb2RlJiBzb3Vy
Y2UpCi17Ci0gICAgLy8gUHVzaCBhIG5ldyBDb2RlUHJvZmlsZSBvbnRvIHRoZSBzdGFjayBmb3Ig
ZWFjaCBzY3JpcHQgZW5jb3VudGVyZWQuCi0gICAgQ29kZVByb2ZpbGUqIHByb2ZpbGVTdGFjayA9
IGNvbnN0X2Nhc3Q8Q29kZVByb2ZpbGUqPihzX3Byb2ZpbGVTdGFjayk7Ci0gICAgYm9vbCBhbHJl
YWR5UHJvZmlsaW5nID0gcHJvZmlsZVN0YWNrOwotICAgIHNfcHJvZmlsZVN0YWNrID0gcHJvZmls
ZVN0YWNrID0gbmV3IENvZGVQcm9maWxlKHNvdXJjZSwgcHJvZmlsZVN0YWNrKTsKLQotICAgIC8v
IElzIHRoZSBwcm9maWxlciBhbHJlYWR5IHJ1bm5pbmcgLSBpZiBzbywgdGhlIHRpbWVyIHdpbGwg
YWxyZWFkeSBiZSBzZXQgdXAuCi0gICAgaWYgKGFscmVhZHlQcm9maWxpbmcpCi0gICAgICAgIHJl
dHVybjsKLQotI2lmIEhBVkUoTUFDSElORV9DT05URVhUKQotICAgIC8vIFJlZ3NpdGVyIGEgc2ln
bmFsIGhhbmRsZXIgJiBpdGltZXIuCi0gICAgc3RydWN0IHNpZ2FjdGlvbiBhY3Rpb247Ci0gICAg
YWN0aW9uLnNhX3NpZ2FjdGlvbiA9IHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCAoKikoaW50LCBzaWdp
bmZvX3QgKiwgdm9pZCAqKT4ocHJvZmlsaW5nVGltZXIpOwotICAgIHNpZ2ZpbGxzZXQoJmFjdGlv
bi5zYV9tYXNrKTsKLSAgICBhY3Rpb24uc2FfZmxhZ3MgPSBTQV9TSUdJTkZPOwotICAgIHNpZ2Fj
dGlvbihTSUdBTFJNLCAmYWN0aW9uLCAwKTsKLSAgICBzZXRQcm9maWxlVGltZXIoMTAwKTsKLSNl
bmRpZgotfQotCi12b2lkIENvZGVQcm9maWxpbmc6OmVuZCgpCi17Ci0gICAgLy8gUG9wIHRoZSBj
dXJyZW50IHByb2ZpbGVyIG9mZiB0aGUgc3RhY2suCi0gICAgQ29kZVByb2ZpbGUqIGN1cnJlbnQg
PSBjb25zdF9jYXN0PENvZGVQcm9maWxlKj4oc19wcm9maWxlU3RhY2spOwotICAgIEFTU0VSVChj
dXJyZW50KTsKLSAgICBzX3Byb2ZpbGVTdGFjayA9IGN1cnJlbnQtPnBhcmVudCgpOwotCi0gICAg
Ly8gSXMgdGhpcyB0aGUgb3V0ZXJtb3N0IHNjcmlwdCBiZWluZyBwcm9maWxlZD8gLSBpZiBub3Qs
IGp1c3QgcmV0dXJuLgotICAgIC8vIFdlIHBlcmZvcm0gYWxsIG91dHB1dCBvZiBwcm9maWxlcyBy
ZWN1cnNpdmVseSBmcm9tIHRoZSBvdXRlcm1vc3Qgc2NyaXB0LAotICAgIC8vIHRvIG1pbmltaXpl
IHByb2ZpbGluZyBvdmVyaGVhZCBmcm9tIHNrZXdpbmcgcmVzdWx0cy4KLSAgICBpZiAoc19wcm9m
aWxlU3RhY2spCi0gICAgICAgIHJldHVybjsKLQotI2lmIEhBVkUoTUFDSElORV9DT05URVhUKQot
ICAgIC8vIFN0b3AgcHJvZmlsaW5nCi0gICAgc2V0UHJvZmlsZVRpbWVyKDApOwotI2VuZGlmCi0K
LSAgICBjdXJyZW50LT5yZXBvcnQoKTsKLSAgICBkZWxldGUgY3VycmVudDsKLX0KLQotfQpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL3Rvb2xzL0NvZGVQcm9maWxpbmcuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvdG9vbHMvQ29kZVByb2ZpbGluZy5oCShyZXZpc2lv
biAyNTgzNTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvdG9vbHMvQ29kZVByb2ZpbGluZy5o
CShub25leGlzdGVudCkKQEAgLTEsODEgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAx
MiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
Ci0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0g
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLiAKLSAqLwotCi0jcHJhZ21hIG9uY2UKLQotbmFtZXNwYWNlIFdURiB7Ci0K
LWNsYXNzIE1ldGFBbGxvY2F0b3I7Ci1jbGFzcyBNZXRhQWxsb2NhdG9yVHJhY2tlcjsKLQotfQot
Ci1uYW1lc3BhY2UgSlNDIHsKLQotY2xhc3MgQ29kZVByb2ZpbGU7Ci1jbGFzcyBTb3VyY2VDb2Rl
OwotCi1jbGFzcyBDb2RlUHJvZmlsaW5nIHsKLSAgICBlbnVtIE1vZGUgewotICAgICAgICBEaXNh
YmxlZCwKLSAgICAgICAgRW5hYmxlZCwKLSAgICAgICAgVmVyYm9zZSwKLSAgICAgICAgVmVyeVZl
cmJvc2UKLSAgICB9OwotCi1wdWJsaWM6Ci0gICAgQ29kZVByb2ZpbGluZyhjb25zdCBTb3VyY2VD
b2RlJiBzb3VyY2UpCi0gICAgICAgIDogbV9hY3RpdmUoZW5hYmxlZCgpKQotICAgIHsKLSAgICAg
ICAgaWYgKG1fYWN0aXZlKQotICAgICAgICAgICAgYmVnaW4oc291cmNlKTsKLSAgICB9Ci0KLSAg
ICB+Q29kZVByb2ZpbGluZygpCi0gICAgewotICAgICAgICBpZiAobV9hY3RpdmUpCi0gICAgICAg
ICAgICBlbmQoKTsKLSAgICB9Ci0KLSAgICBzdGF0aWMgYm9vbCBlbmFibGVkKCkgeyByZXR1cm4g
c19tb2RlICE9IERpc2FibGVkOyB9Ci0gICAgc3RhdGljIGJvb2wgYmVWZXJib3NlKCkgeyByZXR1
cm4gc19tb2RlID49IFZlcmJvc2U7IH0KLSAgICBzdGF0aWMgYm9vbCBiZVZlcnlWZXJib3NlKCkg
eyByZXR1cm4gc19tb2RlID49IFZlcnlWZXJib3NlOyB9Ci0KLSAgICBzdGF0aWMgdm9pZCBub3Rp
ZnlBbGxvY2F0b3IoV1RGOjpNZXRhQWxsb2NhdG9yKik7Ci0gICAgc3RhdGljIHZvaWQqIGdldE93
bmVyVUlERm9yUEModm9pZCopOwotICAgIHN0YXRpYyB2b2lkIHNhbXBsZSh2b2lkKiBwYywgdm9p
ZCoqIGZyYW1lUG9pbnRlcik7Ci0KLXByaXZhdGU6Ci0gICAgdm9pZCBiZWdpbihjb25zdCBTb3Vy
Y2VDb2RlJik7Ci0gICAgdm9pZCBlbmQoKTsKLQotICAgIGJvb2wgbV9hY3RpdmU7Ci0KLSAgICBz
dGF0aWMgTW9kZSBzX21vZGU7Ci0gICAgc3RhdGljIFdURjo6TWV0YUFsbG9jYXRvclRyYWNrZXIq
IHNfdHJhY2tlcjsKLSAgICBzdGF0aWMgdm9sYXRpbGUgQ29kZVByb2ZpbGUqIHNfcHJvZmlsZVN0
YWNrOwotfTsKLQotfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvd2FzbS9XYXNtQkJRUGxhbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL3dhc20vV2FzbUJCUVBsYW4uY3BwCShyZXZpc2lvbiAyNTgzNTApCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvd2FzbS9XYXNtQkJRUGxhbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEzMiwx
MyArMTMyLDkgQEAgdm9pZCBCQlFQbGFuOjp3b3JrKENvbXBpbGF0aW9uRWZmb3J0IGVmZgogICAg
ICAgICAvLyB3aWxsIHVwZGF0ZS4gSXQncyBhbHNvIG9rIGlmIHRoZXkgcHVibGlzaCB0aGVpciBj
b2RlIGJlZm9yZSB3ZSByZXNldCB0aGUgaW5zdHJ1Y3Rpb24gY2FjaGVzIGJlY2F1c2UgYWZ0ZXIg
d2UgcmVsZWFzZQogICAgICAgICAvLyB0aGUgbG9jayBvdXIgY29kZSBpcyByZWFkeSB0byBiZSBw
dWJsaXNoZWQgdG9vLgogICAgICAgICBMb2NrSG9sZGVyIGhvbGRlcihtX2NvZGVCbG9jay0+bV9s
b2NrKTsKKwogICAgICAgICBtX2NvZGVCbG9jay0+bV9iYnFDYWxsZWVzW21fZnVuY3Rpb25JbmRl
eF0gPSBjYWxsZWUuY29weVJlZigpOwotICAgICAgICB7Ci0gICAgICAgICAgICBMTEludENhbGxl
ZSYgbGxpbnRDYWxsZWUgPSBtX2NvZGVCbG9jay0+bV9sbGludENhbGxlZXMtPmF0KG1fZnVuY3Rp
b25JbmRleCkuZ2V0KCk7Ci0gICAgICAgICAgICBhdXRvIGxvY2tlciA9IGhvbGRMb2NrKGxsaW50
Q2FsbGVlLnRpZXJVcENvdW50ZXIoKS5tX2xvY2spOwotICAgICAgICAgICAgbGxpbnRDYWxsZWUu
c2V0UmVwbGFjZW1lbnQoY2FsbGVlLmNvcHlSZWYoKSk7Ci0gICAgICAgICAgICBsbGludENhbGxl
ZS50aWVyVXBDb3VudGVyKCkubV9jb21waWxhdGlvblN0YXR1cyA9IExMSW50VGllclVwQ291bnRl
cjo6Q29tcGlsYXRpb25TdGF0dXM6OkNvbXBpbGVkOwotICAgICAgICB9CisKICAgICAgICAgZm9y
IChhdXRvJiBjYWxsIDogY2FsbGVlLT53YXNtVG9XYXNtQ2FsbHNpdGVzKCkpIHsKICAgICAgICAg
ICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxXYXNtRW50cnlQdHJUYWc+IGVudHJ5cG9pbnQ7CiAg
ICAgICAgICAgICBpZiAoY2FsbC5mdW5jdGlvbkluZGV4U3BhY2UgPCBtX21vZHVsZUluZm9ybWF0
aW9uLT5pbXBvcnRGdW5jdGlvbkNvdW50KCkpCkBAIC0xNDgsMjQgKzE0NCw0OCBAQCB2b2lkIEJC
UVBsYW46OndvcmsoQ29tcGlsYXRpb25FZmZvcnQgZWZmCiAKICAgICAgICAgICAgIE1hY3JvQXNz
ZW1ibGVyOjpyZXBhdGNoTmVhckNhbGwoY2FsbC5jYWxsTG9jYXRpb24sIENvZGVMb2NhdGlvbkxh
YmVsPFdhc21FbnRyeVB0clRhZz4oZW50cnlwb2ludCkpOwogICAgICAgICB9Ci0gICAgfQogCi0g
ICAgLy8gSXQncyBpbXBvcnRhbnQgdG8gbWFrZSBzdXJlIHdlIGRvIHRoaXMgYmVmb3JlIHdlIG1h
a2UgYW55IG9mIHRoZSBjb2RlIHdlIGp1c3QgY29tcGlsZWQgdmlzaWJsZS4gSWYgd2UgZGlkbid0
LCB3ZSBjb3VsZCBlbmQgdXAKLSAgICAvLyB3aGVyZSB3ZSBhcmUgdGllcmluZyB1cCBzb21lIGZ1
bmN0aW9uIEEgdG8gQScgYW5kIHdlIHJlcGF0Y2ggc29tZSBmdW5jdGlvbiBCIHRvIGNhbGwgQScg
aW5zdGVhZCBvZiBBLiBBbm90aGVyIENQVSBjb3VsZCBzZWUKLSAgICAvLyB0aGUgdXBkYXRlcyB0
byBCIGJ1dCBzdGlsbCBub3QgaGF2ZSByZXNldCBpdHMgY2FjaGUgb2YgQScsIHdoaWNoIHdvdWxk
IGxlYWQgdG8gYWxsIGtpbmRzIG9mIGJhZG5lc3MuCi0gICAgcmVzZXRJbnN0cnVjdGlvbkNhY2hl
T25BbGxUaHJlYWRzKCk7Ci0gICAgV1RGOjpzdG9yZVN0b3JlRmVuY2UoKTsgLy8gVGhpcyBwcm9i
YWJseSBpc24ndCBuZWNlc3NhcnkgYnV0IGl0J3MgZ29vZCB0byBiZSBwYXJhbm9pZC4KKyAgICAg
ICAgSGFzaE1hcDx2b2lkKiwgQ29kZUxvY2F0aW9uTGFiZWw8V2FzbUVudHJ5UHRyVGFnPj4gc3Rh
Z2VkQ2FsbHM7CisgICAgICAgIGF1dG8gc3RhZ2VSZXBhdGNoID0gWyZdIChjb25zdCBWZWN0b3I8
VW5saW5rZWRXYXNtVG9XYXNtQ2FsbD4mIGNhbGxzaXRlcykgeworICAgICAgICAgICAgZm9yIChh
dXRvJiBjYWxsIDogY2FsbHNpdGVzKSB7CisgICAgICAgICAgICAgICAgaWYgKGNhbGwuZnVuY3Rp
b25JbmRleFNwYWNlID09IGZ1bmN0aW9uSW5kZXhTcGFjZSkgeworICAgICAgICAgICAgICAgICAg
ICBDb2RlTG9jYXRpb25MYWJlbDxXYXNtRW50cnlQdHJUYWc+IHRhcmdldCA9IE1hY3JvQXNzZW1i
bGVyOjpwcmVwYXJlRm9yQXRvbWljUmVwYXRjaE5lYXJDYWxsQ29uY3VycmVudGx5KGNhbGwuY2Fs
bExvY2F0aW9uLCBDb2RlTG9jYXRpb25MYWJlbDxXYXNtRW50cnlQdHJUYWc+KGVudHJ5cG9pbnQp
KTsKKyAgICAgICAgICAgICAgICAgICAgc3RhZ2VkQ2FsbHMuYWRkKGNhbGwuY2FsbExvY2F0aW9u
LmRhdGFMb2NhdGlvbigpLCB0YXJnZXQpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IH0KKyAgICAgICAgfTsKIAotICAgIG1fY29kZUJsb2NrLT5tX3dhc21JbmRpcmVjdENhbGxFbnRy
eVBvaW50c1ttX2Z1bmN0aW9uSW5kZXhdID0gZW50cnlwb2ludDsKLSAgICB7Ci0gICAgICAgIExv
Y2tIb2xkZXIgaG9sZGVyKG1fY29kZUJsb2NrLT5tX2xvY2spOworICAgICAgICBmb3IgKHVuc2ln
bmVkIGkgPSAwOyBpIDwgbV9jb2RlQmxvY2stPm1fd2FzbVRvV2FzbUNhbGxzaXRlcy5zaXplKCk7
ICsraSkgeworICAgICAgICAgICAgc3RhZ2VSZXBhdGNoKG1fY29kZUJsb2NrLT5tX3dhc21Ub1dh
c21DYWxsc2l0ZXNbaV0pOworICAgICAgICAgICAgaWYgKG1fY29kZUJsb2NrLT5tX2xsaW50Q2Fs
bGVlcykgeworICAgICAgICAgICAgICAgIExMSW50Q2FsbGVlJiBsbGludENhbGxlZSA9IG1fY29k
ZUJsb2NrLT5tX2xsaW50Q2FsbGVlcy0+YXQoaSkuZ2V0KCk7CisgICAgICAgICAgICAgICAgaWYg
KEpJVENhbGxlZSogcmVwbGFjZW1lbnRDYWxsZWUgPSBsbGludENhbGxlZS5yZXBsYWNlbWVudCgp
KQorICAgICAgICAgICAgICAgICAgICBzdGFnZVJlcGF0Y2gocmVwbGFjZW1lbnRDYWxsZWUtPndh
c21Ub1dhc21DYWxsc2l0ZXMoKSk7CisgICAgICAgICAgICAgICAgaWYgKE9NR0Zvck9TUkVudHJ5
Q2FsbGVlKiBvc3JFbnRyeUNhbGxlZSA9IGxsaW50Q2FsbGVlLm9zckVudHJ5Q2FsbGVlKCkpCisg
ICAgICAgICAgICAgICAgICAgIHN0YWdlUmVwYXRjaChvc3JFbnRyeUNhbGxlZS0+d2FzbVRvV2Fz
bUNhbGxzaXRlcygpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChCQlFDYWxsZWUq
IGJicUNhbGxlZSA9IG1fY29kZUJsb2NrLT5tX2JicUNhbGxlZXNbaV0uZ2V0KCkpIHsKKyAgICAg
ICAgICAgICAgICBpZiAoT01HQ2FsbGVlKiByZXBsYWNlbWVudENhbGxlZSA9IGJicUNhbGxlZS0+
cmVwbGFjZW1lbnQoKSkKKyAgICAgICAgICAgICAgICAgICAgc3RhZ2VSZXBhdGNoKHJlcGxhY2Vt
ZW50Q2FsbGVlLT53YXNtVG9XYXNtQ2FsbHNpdGVzKCkpOworICAgICAgICAgICAgICAgIGlmIChP
TUdGb3JPU1JFbnRyeUNhbGxlZSogb3NyRW50cnlDYWxsZWUgPSBiYnFDYWxsZWUtPm9zckVudHJ5
Q2FsbGVlKCkpCisgICAgICAgICAgICAgICAgICAgIHN0YWdlUmVwYXRjaChvc3JFbnRyeUNhbGxl
ZS0+d2FzbVRvV2FzbUNhbGxzaXRlcygpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisg
ICAgICAgIC8vIEl0J3MgaW1wb3J0YW50IHRvIG1ha2Ugc3VyZSB3ZSBkbyB0aGlzIGJlZm9yZSB3
ZSBtYWtlIGFueSBvZiB0aGUgY29kZSB3ZSBqdXN0IGNvbXBpbGVkIHZpc2libGUuIElmIHdlIGRp
ZG4ndCwgd2UgY291bGQgZW5kIHVwCisgICAgICAgIC8vIHdoZXJlIHdlIGFyZSB0aWVyaW5nIHVw
IHNvbWUgZnVuY3Rpb24gQSB0byBBJyBhbmQgd2UgcmVwYXRjaCBzb21lIGZ1bmN0aW9uIEIgdG8g
Y2FsbCBBJyBpbnN0ZWFkIG9mIEEuIEFub3RoZXIgQ1BVIGNvdWxkIHNlZQorICAgICAgICAvLyB0
aGUgdXBkYXRlcyB0byBCIGJ1dCBzdGlsbCBub3QgaGF2ZSByZXNldCBpdHMgY2FjaGUgb2YgQScs
IHdoaWNoIHdvdWxkIGxlYWQgdG8gYWxsIGtpbmRzIG9mIGJhZG5lc3MuCisgICAgICAgIHJlc2V0
SW5zdHJ1Y3Rpb25DYWNoZU9uQWxsVGhyZWFkcygpOworICAgICAgICBXVEY6OnN0b3JlU3RvcmVG
ZW5jZSgpOyAvLyBUaGlzIHByb2JhYmx5IGlzbid0IG5lY2Vzc2FyeSBidXQgaXQncyBnb29kIHRv
IGJlIHBhcmFub2lkLgorCisgICAgICAgIG1fY29kZUJsb2NrLT5tX3dhc21JbmRpcmVjdENhbGxF
bnRyeVBvaW50c1ttX2Z1bmN0aW9uSW5kZXhdID0gZW50cnlwb2ludDsKIAogICAgICAgICBhdXRv
IHJlcGF0Y2hDYWxscyA9IFsmXSAoY29uc3QgVmVjdG9yPFVubGlua2VkV2FzbVRvV2FzbUNhbGw+
JiBjYWxsc2l0ZXMpIHsKICAgICAgICAgICAgIGZvciAoYXV0byYgY2FsbCA6IGNhbGxzaXRlcykg
ewogICAgICAgICAgICAgICAgIGRhdGFMb2dMbklmKFdhc21CQlFQbGFuSW50ZXJuYWw6OnZlcmJv
c2UsICJDb25zaWRlcmluZyByZXBhdGNoaW5nIGNhbGwgYXQ6ICIsIFJhd1BvaW50ZXIoY2FsbC5j
YWxsTG9jYXRpb24uZGF0YUxvY2F0aW9uKCkpLCAiIHRoYXQgdGFyZ2V0cyAiLCBjYWxsLmZ1bmN0
aW9uSW5kZXhTcGFjZSk7CiAgICAgICAgICAgICAgICAgaWYgKGNhbGwuZnVuY3Rpb25JbmRleFNw
YWNlID09IGZ1bmN0aW9uSW5kZXhTcGFjZSkgewogICAgICAgICAgICAgICAgICAgICBkYXRhTG9n
TG5JZihXYXNtQkJRUGxhbkludGVybmFsOjp2ZXJib3NlLCAiUmVwYXRjaGluZyBjYWxsIGF0OiAi
LCBSYXdQb2ludGVyKGNhbGwuY2FsbExvY2F0aW9uLmRhdGFMb2NhdGlvbigpKSwgIiB0byAiLCBS
YXdQb2ludGVyKGVudHJ5cG9pbnQuZXhlY3V0YWJsZUFkZHJlc3MoKSkpOwotICAgICAgICAgICAg
ICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6cmVwYXRjaE5lYXJDYWxsKGNhbGwuY2FsbExvY2F0aW9u
LCBDb2RlTG9jYXRpb25MYWJlbDxXYXNtRW50cnlQdHJUYWc+KGVudHJ5cG9pbnQpKTsKKyAgICAg
ICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OnJlcGF0Y2hOZWFyQ2FsbChjYWxsLmNhbGxM
b2NhdGlvbiwgc3RhZ2VkQ2FsbHMuZ2V0KGNhbGwuY2FsbExvY2F0aW9uLmRhdGFMb2NhdGlvbigp
KSk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQogICAgICAgICB9OwpAQCAtMTg2
LDExICsyMDYsMTcgQEAgdm9pZCBCQlFQbGFuOjp3b3JrKENvbXBpbGF0aW9uRWZmb3J0IGVmZgog
ICAgICAgICAgICAgICAgICAgICByZXBhdGNoQ2FsbHMob3NyRW50cnlDYWxsZWUtPndhc21Ub1dh
c21DYWxsc2l0ZXMoKSk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KKworICAgICAgICB7Cisg
ICAgICAgICAgICBMTEludENhbGxlZSYgbGxpbnRDYWxsZWUgPSBtX2NvZGVCbG9jay0+bV9sbGlu
dENhbGxlZXMtPmF0KG1fZnVuY3Rpb25JbmRleCkuZ2V0KCk7CisgICAgICAgICAgICBhdXRvIGxv
Y2tlciA9IGhvbGRMb2NrKGxsaW50Q2FsbGVlLnRpZXJVcENvdW50ZXIoKS5tX2xvY2spOworICAg
ICAgICAgICAgbGxpbnRDYWxsZWUuc2V0UmVwbGFjZW1lbnQoY2FsbGVlLmNvcHlSZWYoKSk7Cisg
ICAgICAgICAgICBsbGludENhbGxlZS50aWVyVXBDb3VudGVyKCkubV9jb21waWxhdGlvblN0YXR1
cyA9IExMSW50VGllclVwQ291bnRlcjo6Q29tcGlsYXRpb25TdGF0dXM6OkNvbXBpbGVkOworICAg
ICAgICB9CiAgICAgfQogCiAgICAgZGF0YUxvZ0xuSWYoV2FzbUJCUVBsYW5JbnRlcm5hbDo6dmVy
Ym9zZSwgIkZpbmlzaGVkIEJCUSAiLCBtX2Z1bmN0aW9uSW5kZXgpOwogCi0KICAgICBhdXRvIGxv
Y2tlciA9IGhvbGRMb2NrKG1fbG9jayk7CiAgICAgbW92ZVRvU3RhdGUoU3RhdGU6OkNvbXBsZXRl
ZCk7CiAgICAgcnVuQ29tcGxldGlvblRhc2tzKGxvY2tlcik7CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvd2FzbS9XYXNtT01HRm9yT1NSRW50cnlQbGFuLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtT01HRm9yT1NSRW50cnlQbGFuLmNwcAkocmV2
aXNpb24gMjU4MzUwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU9NR0Zvck9T
UkVudHJ5UGxhbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEwMywxMiArMTAzLDEwIEBAIHZvaWQg
T01HRm9yT1NSRW50cnlQbGFuOjp3b3JrKENvbXBpbGF0aW8KIAogICAgIG9tZ0VudHJ5cG9pbnQu
Y2FsbGVlU2F2ZVJlZ2lzdGVycyA9IFdURk1vdmUocGFyc2VBbmRDb21waWxlUmVzdWx0LnZhbHVl
KCktPmVudHJ5cG9pbnQuY2FsbGVlU2F2ZVJlZ2lzdGVycyk7CiAKLSAgICBNYWNyb0Fzc2VtYmxl
ckNvZGVQdHI8V2FzbUVudHJ5UHRyVGFnPiBlbnRyeXBvaW50OwogICAgIEFTU0VSVChtX2NvZGVC
bG9jay5wdHIoKSA9PSBtX21vZHVsZS0+Y29kZUJsb2NrRm9yKG1vZGUoKSkpOwogICAgIFJlZjxP
TUdGb3JPU1JFbnRyeUNhbGxlZT4gY2FsbGVlID0gT01HRm9yT1NSRW50cnlDYWxsZWU6OmNyZWF0
ZShXVEZNb3ZlKG9tZ0VudHJ5cG9pbnQpLCBmdW5jdGlvbkluZGV4U3BhY2UsIG1fbW9kdWxlSW5m
b3JtYXRpb24tPm5hbWVTZWN0aW9uLT5nZXQoZnVuY3Rpb25JbmRleFNwYWNlKSwgb3NyRW50cnlT
Y3JhdGNoQnVmZmVyU2l6ZSwgbV9sb29wSW5kZXgsIFdURk1vdmUodW5saW5rZWRDYWxscykpOwog
ICAgIHsKICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OnJlcGF0Y2hQb2ludGVyKHBhcnNlQW5kQ29t
cGlsZVJlc3VsdC52YWx1ZSgpLT5jYWxsZWVNb3ZlTG9jYXRpb24sIENhbGxlZUJpdHM6OmJveFdh
c20oY2FsbGVlLnB0cigpKSk7Ci0gICAgICAgIGVudHJ5cG9pbnQgPSBjYWxsZWUtPmVudHJ5cG9p
bnQoKTsKIAogICAgICAgICBhdXRvIGxvY2tlciA9IGhvbGRMb2NrKG1fY29kZUJsb2NrLT5tX2xv
Y2spOwogICAgICAgICBmb3IgKGF1dG8mIGNhbGwgOiBjYWxsZWUtPndhc21Ub1dhc21DYWxsc2l0
ZXMoKSkgewpAQCAtMTIwLDExICsxMTgsMTAgQEAgdm9pZCBPTUdGb3JPU1JFbnRyeVBsYW46Ondv
cmsoQ29tcGlsYXRpbwogCiAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6cmVwYXRjaE5lYXJD
YWxsKGNhbGwuY2FsbExvY2F0aW9uLCBDb2RlTG9jYXRpb25MYWJlbDxXYXNtRW50cnlQdHJUYWc+
KGVudHJ5cG9pbnQpKTsKICAgICAgICAgfQotICAgIH0KLSAgICByZXNldEluc3RydWN0aW9uQ2Fj
aGVPbkFsbFRocmVhZHMoKTsKLSAgICBXVEY6OnN0b3JlU3RvcmVGZW5jZSgpOwotICAgIHsKLSAg
ICAgICAgYXV0byBsb2NrZXIgPSBob2xkTG9jayhtX2NvZGVCbG9jay0+bV9sb2NrKTsKKworICAg
ICAgICByZXNldEluc3RydWN0aW9uQ2FjaGVPbkFsbFRocmVhZHMoKTsKKyAgICAgICAgV1RGOjpz
dG9yZVN0b3JlRmVuY2UoKTsKKwogICAgICAgICB7CiAgICAgICAgICAgICBzd2l0Y2ggKG1fY2Fs
bGVlLT5jb21waWxhdGlvbk1vZGUoKSkgewogICAgICAgICAgICAgY2FzZSBDb21waWxhdGlvbk1v
ZGU6OkxMSW50TW9kZTogewpAQCAtMTQ2LDE5ICsxNDMsNiBAQCB2b2lkIE9NR0Zvck9TUkVudHJ5
UGxhbjo6d29yayhDb21waWxhdGlvCiAgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9U
X1JFQUNIRUQoKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQotICAgICAgICBXVEY6OnN0b3Jl
U3RvcmVGZW5jZSgpOwotICAgICAgICAvLyBJdCBpcyBwb3NzaWJsZSB0aGF0IGEgbmV3IE9NRyBj
YWxsZWUgaXMgYWRkZWQgd2hpbGUgd2UgcmVsZWFzZSBtX2NvZGVCbG9jay0+bG9jay4KLSAgICAg
ICAgLy8gVW50aWwgd2UgYWRkIE9NR0Zvck9TUkVudHJ5IGNhbGxlZSB0byBCQlFDYWxsZWUncyBt
X29zckVudHJ5Q2FsbGVlLCB0aGlzIG5ldyBPTUcgZnVuY3Rpb24gbGlua2luZyBkb2VzIG5vdCBo
YXBwZW4gZm9yIHRoaXMgT01HRm9yT1NSRW50cnkgY2FsbGVlLgotICAgICAgICAvLyBXZSByZS1s
aW5rIHRoaXMgT01HRm9yT1NSRW50cnkgY2FsbGVlIGFnYWluIG5vdCB0byBtaXNzIHRoYXQgY2hh
bmNlLgotICAgICAgICBmb3IgKGF1dG8mIGNhbGwgOiBjYWxsZWUtPndhc21Ub1dhc21DYWxsc2l0
ZXMoKSkgewotICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPFdhc21FbnRyeVB0clRh
Zz4gZW50cnlwb2ludDsKLSAgICAgICAgICAgIGlmIChjYWxsLmZ1bmN0aW9uSW5kZXhTcGFjZSA8
IG1fbW9kdWxlLT5tb2R1bGVJbmZvcm1hdGlvbigpLmltcG9ydEZ1bmN0aW9uQ291bnQoKSkKLSAg
ICAgICAgICAgICAgICBlbnRyeXBvaW50ID0gbV9jb2RlQmxvY2stPm1fd2FzbVRvV2FzbUV4aXRT
dHVic1tjYWxsLmZ1bmN0aW9uSW5kZXhTcGFjZV0uY29kZSgpOwotICAgICAgICAgICAgZWxzZQot
ICAgICAgICAgICAgICAgIGVudHJ5cG9pbnQgPSBtX2NvZGVCbG9jay0+d2FzbUVudHJ5cG9pbnRD
YWxsZWVGcm9tRnVuY3Rpb25JbmRleFNwYWNlKGNhbGwuZnVuY3Rpb25JbmRleFNwYWNlKS5lbnRy
eXBvaW50KCkucmV0YWdnZWQ8V2FzbUVudHJ5UHRyVGFnPigpOwotCi0gICAgICAgICAgICBNYWNy
b0Fzc2VtYmxlcjo6cmVwYXRjaE5lYXJDYWxsKGNhbGwuY2FsbExvY2F0aW9uLCBDb2RlTG9jYXRp
b25MYWJlbDxXYXNtRW50cnlQdHJUYWc+KGVudHJ5cG9pbnQpKTsKLSAgICAgICAgfQogICAgIH0K
ICAgICBkYXRhTG9nTG5JZihXYXNtT01HRm9yT1NSRW50cnlQbGFuSW50ZXJuYWw6OnZlcmJvc2Us
ICJGaW5pc2hlZCBPTUdGb3JPU1JFbnRyeSAiLCBtX2Z1bmN0aW9uSW5kZXgpOwogICAgIGNvbXBs
ZXRlKGhvbGRMb2NrKG1fbG9jaykpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20v
V2FzbU9NR1BsYW4uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNt
L1dhc21PTUdQbGFuLmNwcAkocmV2aXNpb24gMjU4MzUwKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL3dhc20vV2FzbU9NR1BsYW4uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMTQsMjAgKzExNCw5
IEBAIHZvaWQgT01HUGxhbjo6d29yayhDb21waWxhdGlvbkVmZm9ydCkKICAgICAgICAgLy8gd2ls
bCB1cGRhdGUuIEl0J3MgYWxzbyBvayBpZiB0aGV5IHB1Ymxpc2ggdGhlaXIgY29kZSBiZWZvcmUg
d2UgcmVzZXQgdGhlIGluc3RydWN0aW9uIGNhY2hlcyBiZWNhdXNlIGFmdGVyIHdlIHJlbGVhc2UK
ICAgICAgICAgLy8gdGhlIGxvY2sgb3VyIGNvZGUgaXMgcmVhZHkgdG8gYmUgcHVibGlzaGVkIHRv
by4KICAgICAgICAgTG9ja0hvbGRlciBob2xkZXIobV9jb2RlQmxvY2stPm1fbG9jayk7CisKICAg
ICAgICAgbV9jb2RlQmxvY2stPm1fb21nQ2FsbGVlc1ttX2Z1bmN0aW9uSW5kZXhdID0gY2FsbGVl
LmNvcHlSZWYoKTsKLSAgICAgICAgewotICAgICAgICAgICAgaWYgKEJCUUNhbGxlZSogYmJxQ2Fs
bGVlID0gbV9jb2RlQmxvY2stPm1fYmJxQ2FsbGVlc1ttX2Z1bmN0aW9uSW5kZXhdLmdldCgpKSB7
Ci0gICAgICAgICAgICAgICAgYXV0byBsb2NrZXIgPSBob2xkTG9jayhiYnFDYWxsZWUtPnRpZXJV
cENvdW50KCktPmdldExvY2soKSk7Ci0gICAgICAgICAgICAgICAgYmJxQ2FsbGVlLT5zZXRSZXBs
YWNlbWVudChjYWxsZWUuY29weVJlZigpKTsKLSAgICAgICAgICAgICAgICBiYnFDYWxsZWUtPnRp
ZXJVcENvdW50KCktPm1fY29tcGlsYXRpb25TdGF0dXNGb3JPTUcgPSBUaWVyVXBDb3VudDo6Q29t
cGlsYXRpb25TdGF0dXM6OkNvbXBpbGVkOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYg
KG1fY29kZUJsb2NrLT5tX2xsaW50Q2FsbGVlcykgewotICAgICAgICAgICAgICAgIExMSW50Q2Fs
bGVlJiBsbGludENhbGxlZSA9IG1fY29kZUJsb2NrLT5tX2xsaW50Q2FsbGVlcy0+YXQobV9mdW5j
dGlvbkluZGV4KS5nZXQoKTsKLSAgICAgICAgICAgICAgICBhdXRvIGxvY2tlciA9IGhvbGRMb2Nr
KGxsaW50Q2FsbGVlLnRpZXJVcENvdW50ZXIoKS5tX2xvY2spOwotICAgICAgICAgICAgICAgIGxs
aW50Q2FsbGVlLnNldFJlcGxhY2VtZW50KGNhbGxlZS5jb3B5UmVmKCkpOwotICAgICAgICAgICAg
ICAgIGxsaW50Q2FsbGVlLnRpZXJVcENvdW50ZXIoKS5tX2NvbXBpbGF0aW9uU3RhdHVzID0gTExJ
bnRUaWVyVXBDb3VudGVyOjpDb21waWxhdGlvblN0YXR1czo6Q29tcGlsZWQ7Ci0gICAgICAgICAg
ICB9Ci0gICAgICAgIH0KKwogICAgICAgICBmb3IgKGF1dG8mIGNhbGwgOiBjYWxsZWUtPndhc21U
b1dhc21DYWxsc2l0ZXMoKSkgewogICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPFdh
c21FbnRyeVB0clRhZz4gZW50cnlwb2ludDsKICAgICAgICAgICAgIGlmIChjYWxsLmZ1bmN0aW9u
SW5kZXhTcGFjZSA8IG1fbW9kdWxlLT5tb2R1bGVJbmZvcm1hdGlvbigpLmltcG9ydEZ1bmN0aW9u
Q291bnQoKSkKQEAgLTEzNywyNCArMTI2LDQ3IEBAIHZvaWQgT01HUGxhbjo6d29yayhDb21waWxh
dGlvbkVmZm9ydCkKIAogICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OnJlcGF0Y2hOZWFyQ2Fs
bChjYWxsLmNhbGxMb2NhdGlvbiwgQ29kZUxvY2F0aW9uTGFiZWw8V2FzbUVudHJ5UHRyVGFnPihl
bnRyeXBvaW50KSk7CiAgICAgICAgIH0KLSAgICB9CiAKLSAgICAvLyBJdCdzIGltcG9ydGFudCB0
byBtYWtlIHN1cmUgd2UgZG8gdGhpcyBiZWZvcmUgd2UgbWFrZSBhbnkgb2YgdGhlIGNvZGUgd2Ug
anVzdCBjb21waWxlZCB2aXNpYmxlLiBJZiB3ZSBkaWRuJ3QsIHdlIGNvdWxkIGVuZCB1cAotICAg
IC8vIHdoZXJlIHdlIGFyZSB0aWVyaW5nIHVwIHNvbWUgZnVuY3Rpb24gQSB0byBBJyBhbmQgd2Ug
cmVwYXRjaCBzb21lIGZ1bmN0aW9uIEIgdG8gY2FsbCBBJyBpbnN0ZWFkIG9mIEEuIEFub3RoZXIg
Q1BVIGNvdWxkIHNlZQotICAgIC8vIHRoZSB1cGRhdGVzIHRvIEIgYnV0IHN0aWxsIG5vdCBoYXZl
IHJlc2V0IGl0cyBjYWNoZSBvZiBBJywgd2hpY2ggd291bGQgbGVhZCB0byBhbGwga2luZHMgb2Yg
YmFkbmVzcy4KLSAgICByZXNldEluc3RydWN0aW9uQ2FjaGVPbkFsbFRocmVhZHMoKTsKLSAgICBX
VEY6OnN0b3JlU3RvcmVGZW5jZSgpOyAvLyBUaGlzIHByb2JhYmx5IGlzbid0IG5lY2Vzc2FyeSBi
dXQgaXQncyBnb29kIHRvIGJlIHBhcmFub2lkLgorICAgICAgICBIYXNoTWFwPHZvaWQqLCBDb2Rl
TG9jYXRpb25MYWJlbDxXYXNtRW50cnlQdHJUYWc+PiBzdGFnZWRDYWxsczsKKyAgICAgICAgYXV0
byBzdGFnZVJlcGF0Y2ggPSBbJl0gKGNvbnN0IFZlY3RvcjxVbmxpbmtlZFdhc21Ub1dhc21DYWxs
PiYgY2FsbHNpdGVzKSB7CisgICAgICAgICAgICBmb3IgKGF1dG8mIGNhbGwgOiBjYWxsc2l0ZXMp
IHsKKyAgICAgICAgICAgICAgICBpZiAoY2FsbC5mdW5jdGlvbkluZGV4U3BhY2UgPT0gZnVuY3Rp
b25JbmRleFNwYWNlKSB7CisgICAgICAgICAgICAgICAgICAgIENvZGVMb2NhdGlvbkxhYmVsPFdh
c21FbnRyeVB0clRhZz4gdGFyZ2V0ID0gTWFjcm9Bc3NlbWJsZXI6OnByZXBhcmVGb3JBdG9taWNS
ZXBhdGNoTmVhckNhbGxDb25jdXJyZW50bHkoY2FsbC5jYWxsTG9jYXRpb24sIENvZGVMb2NhdGlv
bkxhYmVsPFdhc21FbnRyeVB0clRhZz4oZW50cnlwb2ludCkpOworICAgICAgICAgICAgICAgICAg
ICBzdGFnZWRDYWxscy5hZGQoY2FsbC5jYWxsTG9jYXRpb24uZGF0YUxvY2F0aW9uKCksIHRhcmdl
dCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9OworICAgICAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9jb2RlQmxvY2stPm1fd2FzbVRvV2FzbUNhbGxz
aXRlcy5zaXplKCk7ICsraSkgeworICAgICAgICAgICAgc3RhZ2VSZXBhdGNoKG1fY29kZUJsb2Nr
LT5tX3dhc21Ub1dhc21DYWxsc2l0ZXNbaV0pOworICAgICAgICAgICAgaWYgKG1fY29kZUJsb2Nr
LT5tX2xsaW50Q2FsbGVlcykgeworICAgICAgICAgICAgICAgIExMSW50Q2FsbGVlJiBsbGludENh
bGxlZSA9IG1fY29kZUJsb2NrLT5tX2xsaW50Q2FsbGVlcy0+YXQoaSkuZ2V0KCk7CisgICAgICAg
ICAgICAgICAgaWYgKEpJVENhbGxlZSogcmVwbGFjZW1lbnRDYWxsZWUgPSBsbGludENhbGxlZS5y
ZXBsYWNlbWVudCgpKQorICAgICAgICAgICAgICAgICAgICBzdGFnZVJlcGF0Y2gocmVwbGFjZW1l
bnRDYWxsZWUtPndhc21Ub1dhc21DYWxsc2l0ZXMoKSk7CisgICAgICAgICAgICAgICAgaWYgKE9N
R0Zvck9TUkVudHJ5Q2FsbGVlKiBvc3JFbnRyeUNhbGxlZSA9IGxsaW50Q2FsbGVlLm9zckVudHJ5
Q2FsbGVlKCkpCisgICAgICAgICAgICAgICAgICAgIHN0YWdlUmVwYXRjaChvc3JFbnRyeUNhbGxl
ZS0+d2FzbVRvV2FzbUNhbGxzaXRlcygpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlm
IChCQlFDYWxsZWUqIGJicUNhbGxlZSA9IG1fY29kZUJsb2NrLT5tX2JicUNhbGxlZXNbaV0uZ2V0
KCkpIHsKKyAgICAgICAgICAgICAgICBpZiAoT01HQ2FsbGVlKiByZXBsYWNlbWVudENhbGxlZSA9
IGJicUNhbGxlZS0+cmVwbGFjZW1lbnQoKSkKKyAgICAgICAgICAgICAgICAgICAgc3RhZ2VSZXBh
dGNoKHJlcGxhY2VtZW50Q2FsbGVlLT53YXNtVG9XYXNtQ2FsbHNpdGVzKCkpOworICAgICAgICAg
ICAgICAgIGlmIChPTUdGb3JPU1JFbnRyeUNhbGxlZSogb3NyRW50cnlDYWxsZWUgPSBiYnFDYWxs
ZWUtPm9zckVudHJ5Q2FsbGVlKCkpCisgICAgICAgICAgICAgICAgICAgIHN0YWdlUmVwYXRjaChv
c3JFbnRyeUNhbGxlZS0+d2FzbVRvV2FzbUNhbGxzaXRlcygpKTsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgfQorCisgICAgICAgIC8vIEl0J3MgaW1wb3J0YW50IHRvIG1ha2Ugc3VyZSB3ZSBkbyB0
aGlzIGJlZm9yZSB3ZSBtYWtlIGFueSBvZiB0aGUgY29kZSB3ZSBqdXN0IGNvbXBpbGVkIHZpc2li
bGUuIElmIHdlIGRpZG4ndCwgd2UgY291bGQgZW5kIHVwCisgICAgICAgIC8vIHdoZXJlIHdlIGFy
ZSB0aWVyaW5nIHVwIHNvbWUgZnVuY3Rpb24gQSB0byBBJyBhbmQgd2UgcmVwYXRjaCBzb21lIGZ1
bmN0aW9uIEIgdG8gY2FsbCBBJyBpbnN0ZWFkIG9mIEEuIEFub3RoZXIgQ1BVIGNvdWxkIHNlZQor
ICAgICAgICAvLyB0aGUgdXBkYXRlcyB0byBCIGJ1dCBzdGlsbCBub3QgaGF2ZSByZXNldCBpdHMg
Y2FjaGUgb2YgQScsIHdoaWNoIHdvdWxkIGxlYWQgdG8gYWxsIGtpbmRzIG9mIGJhZG5lc3MuCisg
ICAgICAgIHJlc2V0SW5zdHJ1Y3Rpb25DYWNoZU9uQWxsVGhyZWFkcygpOworICAgICAgICBXVEY6
OnN0b3JlU3RvcmVGZW5jZSgpOyAvLyBUaGlzIHByb2JhYmx5IGlzbid0IG5lY2Vzc2FyeSBidXQg
aXQncyBnb29kIHRvIGJlIHBhcmFub2lkLgogCi0gICAgbV9jb2RlQmxvY2stPm1fd2FzbUluZGly
ZWN0Q2FsbEVudHJ5UG9pbnRzW21fZnVuY3Rpb25JbmRleF0gPSBlbnRyeXBvaW50OwotICAgIHsK
LSAgICAgICAgTG9ja0hvbGRlciBob2xkZXIobV9jb2RlQmxvY2stPm1fbG9jayk7CisgICAgICAg
IG1fY29kZUJsb2NrLT5tX3dhc21JbmRpcmVjdENhbGxFbnRyeVBvaW50c1ttX2Z1bmN0aW9uSW5k
ZXhdID0gZW50cnlwb2ludDsKIAogICAgICAgICBhdXRvIHJlcGF0Y2hDYWxscyA9IFsmXSAoY29u
c3QgVmVjdG9yPFVubGlua2VkV2FzbVRvV2FzbUNhbGw+JiBjYWxsc2l0ZXMpIHsKICAgICAgICAg
ICAgIGZvciAoYXV0byYgY2FsbCA6IGNhbGxzaXRlcykgewogICAgICAgICAgICAgICAgIGRhdGFM
b2dMbklmKFdhc21PTUdQbGFuSW50ZXJuYWw6OnZlcmJvc2UsICJDb25zaWRlcmluZyByZXBhdGNo
aW5nIGNhbGwgYXQ6ICIsIFJhd1BvaW50ZXIoY2FsbC5jYWxsTG9jYXRpb24uZGF0YUxvY2F0aW9u
KCkpLCAiIHRoYXQgdGFyZ2V0cyAiLCBjYWxsLmZ1bmN0aW9uSW5kZXhTcGFjZSk7CiAgICAgICAg
ICAgICAgICAgaWYgKGNhbGwuZnVuY3Rpb25JbmRleFNwYWNlID09IGZ1bmN0aW9uSW5kZXhTcGFj
ZSkgewogICAgICAgICAgICAgICAgICAgICBkYXRhTG9nTG5JZihXYXNtT01HUGxhbkludGVybmFs
Ojp2ZXJib3NlLCAiUmVwYXRjaGluZyBjYWxsIGF0OiAiLCBSYXdQb2ludGVyKGNhbGwuY2FsbExv
Y2F0aW9uLmRhdGFMb2NhdGlvbigpKSwgIiB0byAiLCBSYXdQb2ludGVyKGVudHJ5cG9pbnQuZXhl
Y3V0YWJsZUFkZHJlc3MoKSkpOwotICAgICAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6
cmVwYXRjaE5lYXJDYWxsKGNhbGwuY2FsbExvY2F0aW9uLCBDb2RlTG9jYXRpb25MYWJlbDxXYXNt
RW50cnlQdHJUYWc+KGVudHJ5cG9pbnQpKTsKKyAgICAgICAgICAgICAgICAgICAgTWFjcm9Bc3Nl
bWJsZXI6OnJlcGF0Y2hOZWFyQ2FsbChjYWxsLmNhbGxMb2NhdGlvbiwgc3RhZ2VkQ2FsbHMuZ2V0
KGNhbGwuY2FsbExvY2F0aW9uLmRhdGFMb2NhdGlvbigpKSk7CiAgICAgICAgICAgICAgICAgfQog
ICAgICAgICAgICAgfQogICAgICAgICB9OwpAQCAtMTc1LDYgKzE4NywyMCBAQCB2b2lkIE9NR1Bs
YW46OndvcmsoQ29tcGlsYXRpb25FZmZvcnQpCiAgICAgICAgICAgICAgICAgICAgIHJlcGF0Y2hD
YWxscyhvc3JFbnRyeUNhbGxlZS0+d2FzbVRvV2FzbUNhbGxzaXRlcygpKTsKICAgICAgICAgICAg
IH0KICAgICAgICAgfQorCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChCQlFDYWxsZWUqIGJi
cUNhbGxlZSA9IG1fY29kZUJsb2NrLT5tX2JicUNhbGxlZXNbbV9mdW5jdGlvbkluZGV4XS5nZXQo
KSkgeworICAgICAgICAgICAgICAgIGF1dG8gbG9ja2VyID0gaG9sZExvY2soYmJxQ2FsbGVlLT50
aWVyVXBDb3VudCgpLT5nZXRMb2NrKCkpOworICAgICAgICAgICAgICAgIGJicUNhbGxlZS0+c2V0
UmVwbGFjZW1lbnQoY2FsbGVlLmNvcHlSZWYoKSk7CisgICAgICAgICAgICAgICAgYmJxQ2FsbGVl
LT50aWVyVXBDb3VudCgpLT5tX2NvbXBpbGF0aW9uU3RhdHVzRm9yT01HID0gVGllclVwQ291bnQ6
OkNvbXBpbGF0aW9uU3RhdHVzOjpDb21waWxlZDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IGlmIChtX2NvZGVCbG9jay0+bV9sbGludENhbGxlZXMpIHsKKyAgICAgICAgICAgICAgICBMTElu
dENhbGxlZSYgbGxpbnRDYWxsZWUgPSBtX2NvZGVCbG9jay0+bV9sbGludENhbGxlZXMtPmF0KG1f
ZnVuY3Rpb25JbmRleCkuZ2V0KCk7CisgICAgICAgICAgICAgICAgYXV0byBsb2NrZXIgPSBob2xk
TG9jayhsbGludENhbGxlZS50aWVyVXBDb3VudGVyKCkubV9sb2NrKTsKKyAgICAgICAgICAgICAg
ICBsbGludENhbGxlZS5zZXRSZXBsYWNlbWVudChjYWxsZWUuY29weVJlZigpKTsKKyAgICAgICAg
ICAgICAgICBsbGludENhbGxlZS50aWVyVXBDb3VudGVyKCkubV9jb21waWxhdGlvblN0YXR1cyA9
IExMSW50VGllclVwQ291bnRlcjo6Q29tcGlsYXRpb25TdGF0dXM6OkNvbXBpbGVkOworICAgICAg
ICAgICAgfQorICAgICAgICB9CiAgICAgfQogCiAgICAgZGF0YUxvZ0xuSWYoV2FzbU9NR1BsYW5J
bnRlcm5hbDo6dmVyYm9zZSwgIkZpbmlzaGVkIE9NRyAiLCBtX2Z1bmN0aW9uSW5kZXgpOwpJbmRl
eDogU291cmNlL1dURi9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi9DaGFuZ2VM
b2cJKHJldmlzaW9uIDI1ODM1MCkKKysrIFNvdXJjZS9XVEYvQ2hhbmdlTG9nCSh3b3JraW5nIGNv
cHkpCkBAIC0xLDMgKzEsMzUgQEAKKzIwMjAtMDMtMTIgIFNhYW0gQmFyYXRpICA8c2JhcmF0aUBh
cHBsZS5jb20+CisKKyAgICAgICAgSW1wbGVtZW50IDFHQiBvZiBleGVjdXRhYmxlIG1lbW9yeSBv
biBhcm02NAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MjA4NDkwCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAg
KiB3dGYvTWV0YUFsbG9jYXRvci5jcHA6CisgICAgICAgIChXVEY6Ok1ldGFBbGxvY2F0b3JUcmFj
a2VyOjpub3RpZnkpOgorICAgICAgICAoV1RGOjpNZXRhQWxsb2NhdG9yVHJhY2tlcjo6cmVsZWFz
ZSk6CisgICAgICAgIChXVEY6Ok1ldGFBbGxvY2F0b3I6OnJlbGVhc2UpOgorICAgICAgICAoV1RG
OjpNZXRhQWxsb2NhdG9ySGFuZGxlOjpNZXRhQWxsb2NhdG9ySGFuZGxlKToKKyAgICAgICAgKFdU
Rjo6TWV0YUFsbG9jYXRvckhhbmRsZTo6fk1ldGFBbGxvY2F0b3JIYW5kbGUpOgorICAgICAgICAo
V1RGOjpNZXRhQWxsb2NhdG9ySGFuZGxlOjpzaHJpbmspOgorICAgICAgICAoV1RGOjpNZXRhQWxs
b2NhdG9yOjpNZXRhQWxsb2NhdG9yKToKKyAgICAgICAgKFdURjo6TWV0YUFsbG9jYXRvcjo6YWxs
b2NhdGUpOgorICAgICAgICAoV1RGOjpNZXRhQWxsb2NhdG9yOjpjdXJyZW50U3RhdGlzdGljcyk6
CisgICAgICAgICogd3RmL01ldGFBbGxvY2F0b3IuaDoKKyAgICAgICAgKFdURjo6TWV0YUFsbG9j
YXRvclRyYWNrZXI6OmZpbmQpOgorICAgICAgICAoV1RGOjpNZXRhQWxsb2NhdG9yOjphbGxvY2F0
ZSk6CisgICAgICAgIChXVEY6Ok1ldGFBbGxvY2F0b3I6OmN1cnJlbnRTdGF0aXN0aWNzKToKKyAg
ICAgICAgKFdURjo6TWV0YUFsbG9jYXRvcjo6Z2V0TG9jayk6IERlbGV0ZWQuCisgICAgICAgICog
d3RmL01ldGFBbGxvY2F0b3JIYW5kbGUuaDoKKyAgICAgICAgKFdURjo6TWV0YUFsbG9jYXRvckhh
bmRsZTo6YWxsb2NhdG9yKToKKyAgICAgICAgKFdURjo6TWV0YUFsbG9jYXRvckhhbmRsZTo6aXNN
YW5hZ2VkKTogRGVsZXRlZC4KKyAgICAgICAgKFdURjo6TWV0YUFsbG9jYXRvckhhbmRsZTo6b3du
ZXJVSUQpOiBEZWxldGVkLgorICAgICAgICAqIHd0Zi9QbGF0Zm9ybVVzZS5oOgorICAgICAgICAq
IHd0Zi9SZWRCbGFja1RyZWUuaDoKKyAgICAgICAgKiB3dGYvU3RkTGliRXh0cmFzLmg6CisgICAg
ICAgIChXVEY6OmNvbnN0cnVjdEZpeGVkU2l6ZUFycmF5V2l0aEFyZ3VtZW50c0ltcGwpOgorICAg
ICAgICAoV1RGOjpjb25zdHJ1Y3RGaXhlZFNpemVBcnJheVdpdGhBcmd1bWVudHMpOgorCiAyMDIw
LTAzLTExICBKZXIgTm9ibGUgIDxqZXIubm9ibGVAYXBwbGUuY29tPgogCiAgICAgICAgIEFkb3B0
IEFWU2FtcGxlQnVmZmVyVmlkZW9PdXRwdXQKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL01ldGFBbGxv
Y2F0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL01ldGFBbGxvY2F0b3IuY3Bw
CShyZXZpc2lvbiAyNTgzNTApCisrKyBTb3VyY2UvV1RGL3d0Zi9NZXRhQWxsb2NhdG9yLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtNTQsMjIgKzU0LDIxIEBAIE1ldGFBbGxvY2F0b3I6On5NZXRhQWxs
b2NhdG9yKCkKICNlbmRpZgogfQogCi12b2lkIE1ldGFBbGxvY2F0b3JUcmFja2VyOjpub3RpZnko
TWV0YUFsbG9jYXRvckhhbmRsZSogaGFuZGxlKQordm9pZCBNZXRhQWxsb2NhdG9yVHJhY2tlcjo6
bm90aWZ5KE1ldGFBbGxvY2F0b3JIYW5kbGUmIGhhbmRsZSkKIHsKLSAgICBtX2FsbG9jYXRpb25z
Lmluc2VydChoYW5kbGUpOworICAgIG1fYWxsb2NhdGlvbnMuaW5zZXJ0KCZoYW5kbGUpOwogfQog
Ci12b2lkIE1ldGFBbGxvY2F0b3JUcmFja2VyOjpyZWxlYXNlKE1ldGFBbGxvY2F0b3JIYW5kbGUq
IGhhbmRsZSkKK3ZvaWQgTWV0YUFsbG9jYXRvclRyYWNrZXI6OnJlbGVhc2UoTWV0YUFsbG9jYXRv
ckhhbmRsZSYgaGFuZGxlKQogewotICAgIG1fYWxsb2NhdGlvbnMucmVtb3ZlKGhhbmRsZSk7Cisg
ICAgbV9hbGxvY2F0aW9ucy5yZW1vdmUoJmhhbmRsZSk7CiB9CiAKLUFMV0FZU19JTkxJTkUgdm9p
ZCBNZXRhQWxsb2NhdG9yOjpyZWxlYXNlKE1ldGFBbGxvY2F0b3JIYW5kbGUqIGhhbmRsZSkKK3Zv
aWQgTWV0YUFsbG9jYXRvcjo6cmVsZWFzZShjb25zdCBMb2NrSG9sZGVyJiwgTWV0YUFsbG9jYXRv
ckhhbmRsZSYgaGFuZGxlKQogewotICAgIExvY2tIb2xkZXIgbG9ja2VyKCZtX2xvY2spOwotICAg
IGlmIChoYW5kbGUtPnNpemVJbkJ5dGVzKCkpIHsKLSAgICAgICAgdm9pZCogc3RhcnQgPSBoYW5k
bGUtPnN0YXJ0KCkudW50YWdnZWRQdHIoKTsKLSAgICAgICAgc2l6ZV90IHNpemVJbkJ5dGVzID0g
aGFuZGxlLT5zaXplSW5CeXRlcygpOworICAgIGlmIChoYW5kbGUuc2l6ZUluQnl0ZXMoKSkgewor
ICAgICAgICB2b2lkKiBzdGFydCA9IGhhbmRsZS5zdGFydCgpLnVudGFnZ2VkUHRyKCk7CisgICAg
ICAgIHNpemVfdCBzaXplSW5CeXRlcyA9IGhhbmRsZS5zaXplSW5CeXRlcygpOwogICAgICAgICBk
ZWNyZW1lbnRQYWdlT2NjdXBhbmN5KHN0YXJ0LCBzaXplSW5CeXRlcyk7CiAgICAgICAgIGFkZEZy
ZWVTcGFjZUZyb21SZWxlYXNlZEhhbmRsZShGcmVlU3BhY2VQdHIoc3RhcnQpLCBzaXplSW5CeXRl
cyk7CiAgICAgfQpAQCAtNzgsMjEgKzc3LDE5IEBAIEFMV0FZU19JTkxJTkUgdm9pZCBNZXRhQWxs
b2NhdG9yOjpyZWxlYXMKICAgICAgICAgbV90cmFja2VyLT5yZWxlYXNlKGhhbmRsZSk7CiB9CiAK
LU1ldGFBbGxvY2F0b3JIYW5kbGU6Ok1ldGFBbGxvY2F0b3JIYW5kbGUoTWV0YUFsbG9jYXRvciog
YWxsb2NhdG9yLCB2b2lkKiBzdGFydCwgc2l6ZV90IHNpemVJbkJ5dGVzLCB2b2lkKiBvd25lclVJ
RCkKK01ldGFBbGxvY2F0b3JIYW5kbGU6Ok1ldGFBbGxvY2F0b3JIYW5kbGUoTWV0YUFsbG9jYXRv
ciYgYWxsb2NhdG9yLCB2b2lkKiBzdGFydCwgc2l6ZV90IHNpemVJbkJ5dGVzKQogICAgIDogbV9h
bGxvY2F0b3IoYWxsb2NhdG9yKQogICAgICwgbV9zdGFydChzdGFydCkKICAgICAsIG1fZW5kKHJl
aW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KHN0YXJ0KSArIHNpemVJbkJ5dGVzKQotICAgICwgbV9vd25l
clVJRChvd25lclVJRCkKIHsKLSAgICBBU1NFUlQoYWxsb2NhdG9yKTsKICAgICBBU1NFUlQoc3Rh
cnQpOwogICAgIEFTU0VSVChzaXplSW5CeXRlcyk7CiB9CiAKIE1ldGFBbGxvY2F0b3JIYW5kbGU6
On5NZXRhQWxsb2NhdG9ySGFuZGxlKCkKIHsKLSAgICBBU1NFUlQobV9hbGxvY2F0b3IpOwotICAg
IG1fYWxsb2NhdG9yLT5yZWxlYXNlKHRoaXMpOworICAgIGF1dG8gbG9ja2VyID0gaG9sZExvY2so
YWxsb2NhdG9yKCkubV9sb2NrKTsKKyAgICBhbGxvY2F0b3IoKS5yZWxlYXNlKGxvY2tlciwgKnRo
aXMpOwogfQogCiB2b2lkIE1ldGFBbGxvY2F0b3JIYW5kbGU6OnNocmluayhzaXplX3QgbmV3U2l6
ZUluQnl0ZXMpCkBAIC0xMDAsOSArOTcsMTAgQEAgdm9pZCBNZXRhQWxsb2NhdG9ySGFuZGxlOjpz
aHJpbmsoc2l6ZV90IAogICAgIHNpemVfdCBzaXplSW5CeXRlcyA9IHRoaXMtPnNpemVJbkJ5dGVz
KCk7CiAgICAgQVNTRVJUKG5ld1NpemVJbkJ5dGVzIDw9IHNpemVJbkJ5dGVzKTsKIAotICAgIExv
Y2tIb2xkZXIgbG9ja2VyKCZtX2FsbG9jYXRvci0+bV9sb2NrKTsKKyAgICBNZXRhQWxsb2NhdG9y
JiBhbGxvY2F0b3IgPSB0aGlzLT5hbGxvY2F0b3IoKTsKKyAgICBMb2NrSG9sZGVyIGxvY2tlcigm
YWxsb2NhdG9yLm1fbG9jayk7CiAKLSAgICBuZXdTaXplSW5CeXRlcyA9IG1fYWxsb2NhdG9yLT5y
b3VuZFVwKG5ld1NpemVJbkJ5dGVzKTsKKyAgICBuZXdTaXplSW5CeXRlcyA9IGFsbG9jYXRvci5y
b3VuZFVwKG5ld1NpemVJbkJ5dGVzKTsKICAgICAKICAgICBBU1NFUlQobmV3U2l6ZUluQnl0ZXMg
PD0gc2l6ZUluQnl0ZXMpOwogCkBAIC0xMTMsMTEgKzExMSwxMSBAQCB2b2lkIE1ldGFBbGxvY2F0
b3JIYW5kbGU6OnNocmluayhzaXplX3QgCiAgICAgc2l6ZV90IGZyZWVTaXplID0gc2l6ZUluQnl0
ZXMgLSBuZXdTaXplSW5CeXRlczsKICAgICB1aW50cHRyX3QgZnJlZUVuZCA9IGZyZWVTdGFydCAr
IGZyZWVTaXplOwogICAgIAotICAgIHVpbnRwdHJfdCBmaXJzdENvbXBsZXRlbHlGcmVlUGFnZSA9
IChmcmVlU3RhcnQgKyBtX2FsbG9jYXRvci0+bV9wYWdlU2l6ZSAtIDEpICYgfihtX2FsbG9jYXRv
ci0+bV9wYWdlU2l6ZSAtIDEpOworICAgIHVpbnRwdHJfdCBmaXJzdENvbXBsZXRlbHlGcmVlUGFn
ZSA9IChmcmVlU3RhcnQgKyBhbGxvY2F0b3IubV9wYWdlU2l6ZSAtIDEpICYgfihhbGxvY2F0b3Iu
bV9wYWdlU2l6ZSAtIDEpOwogICAgIGlmIChmaXJzdENvbXBsZXRlbHlGcmVlUGFnZSA8IGZyZWVF
bmQpCi0gICAgICAgIG1fYWxsb2NhdG9yLT5kZWNyZW1lbnRQYWdlT2NjdXBhbmN5KHJlaW50ZXJw
cmV0X2Nhc3Q8dm9pZCo+KGZpcnN0Q29tcGxldGVseUZyZWVQYWdlKSwgZnJlZVNpemUgLSAoZmly
c3RDb21wbGV0ZWx5RnJlZVBhZ2UgLSBmcmVlU3RhcnQpKTsKKyAgICAgICAgYWxsb2NhdG9yLmRl
Y3JlbWVudFBhZ2VPY2N1cGFuY3kocmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oZmlyc3RDb21wbGV0
ZWx5RnJlZVBhZ2UpLCBmcmVlU2l6ZSAtIChmaXJzdENvbXBsZXRlbHlGcmVlUGFnZSAtIGZyZWVT
dGFydCkpOwogCi0gICAgbV9hbGxvY2F0b3ItPmFkZEZyZWVTcGFjZUZyb21SZWxlYXNlZEhhbmRs
ZShNZXRhQWxsb2NhdG9yOjpGcmVlU3BhY2VQdHIoZnJlZVN0YXJ0KSwgZnJlZVNpemUpOworICAg
IGFsbG9jYXRvci5hZGRGcmVlU3BhY2VGcm9tUmVsZWFzZWRIYW5kbGUoTWV0YUFsbG9jYXRvcjo6
RnJlZVNwYWNlUHRyKGZyZWVTdGFydCksIGZyZWVTaXplKTsKIAogICAgIG1fZW5kID0gbV9zdGFy
dCArIG5ld1NpemVJbkJ5dGVzOwogfQpAQCAtMTI3LDEzICsxMjUsMTMgQEAgdm9pZCBNZXRhQWxs
b2NhdG9ySGFuZGxlOjpkdW1wKFByaW50U3RyZQogICAgIG91dC5wcmludChSYXdQb2ludGVyKHN0
YXJ0KCkudW50YWdnZWRQdHIoKSksICIuLi4iLCBSYXdQb2ludGVyKGVuZCgpLnVudGFnZ2VkUHRy
KCkpKTsKIH0KIAotTWV0YUFsbG9jYXRvcjo6TWV0YUFsbG9jYXRvcihzaXplX3QgYWxsb2NhdGlv
bkdyYW51bGUsIHNpemVfdCBwYWdlU2l6ZSkKK01ldGFBbGxvY2F0b3I6Ok1ldGFBbGxvY2F0b3Io
TG9jayYgbG9jaywgc2l6ZV90IGFsbG9jYXRpb25HcmFudWxlLCBzaXplX3QgcGFnZVNpemUpCiAg
ICAgOiBtX2FsbG9jYXRpb25HcmFudWxlKGFsbG9jYXRpb25HcmFudWxlKQogICAgICwgbV9wYWdl
U2l6ZShwYWdlU2l6ZSkKICAgICAsIG1fYnl0ZXNBbGxvY2F0ZWQoMCkKICAgICAsIG1fYnl0ZXNS
ZXNlcnZlZCgwKQogICAgICwgbV9ieXRlc0NvbW1pdHRlZCgwKQotICAgICwgbV90cmFja2VyKDAp
CisgICAgLCBtX2xvY2sobG9jaykKICNpZm5kZWYgTkRFQlVHCiAgICAgLCBtX21hbGxvY0JhbGFu
Y2UoMCkKICNlbmRpZgpAQCAtMTU3LDEwICsxNTUsOCBAQCBNZXRhQWxsb2NhdG9yOjpNZXRhQWxs
b2NhdG9yKHNpemVfdCBhbGxvCiAgICAgQVNTRVJUKHN0YXRpY19jYXN0PHNpemVfdD4oMSkgPDwg
bV9sb2dBbGxvY2F0aW9uR3JhbnVsZSA9PSBtX2FsbG9jYXRpb25HcmFudWxlKTsKIH0KIAotUmVm
UHRyPE1ldGFBbGxvY2F0b3JIYW5kbGU+IE1ldGFBbGxvY2F0b3I6OmFsbG9jYXRlKHNpemVfdCBz
aXplSW5CeXRlcywgdm9pZCogb3duZXJVSUQpCitSZWZQdHI8TWV0YUFsbG9jYXRvckhhbmRsZT4g
TWV0YUFsbG9jYXRvcjo6YWxsb2NhdGUoY29uc3QgTG9ja0hvbGRlciYsIHNpemVfdCBzaXplSW5C
eXRlcykKIHsKLSAgICBMb2NrSG9sZGVyIGxvY2tlcigmbV9sb2NrKTsKLQogICAgIGlmICghc2l6
ZUluQnl0ZXMpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIApAQCAtMTk1LDE3ICsxOTEs
MTYgQEAgUmVmUHRyPE1ldGFBbGxvY2F0b3JIYW5kbGU+IE1ldGFBbGxvY2F0bwogICAgIG1fbnVt
QWxsb2NhdGlvbnMrKzsKICNlbmRpZgogCi0gICAgYXV0byBoYW5kbGUgPSBhZG9wdFJlZigqbmV3
IE1ldGFBbGxvY2F0b3JIYW5kbGUodGhpcywgc3RhcnQudW50YWdnZWRQdHIoKSwgc2l6ZUluQnl0
ZXMsIG93bmVyVUlEKSk7CisgICAgYXV0byBoYW5kbGUgPSBhZG9wdFJlZigqbmV3IE1ldGFBbGxv
Y2F0b3JIYW5kbGUoKnRoaXMsIHN0YXJ0LnVudGFnZ2VkUHRyKCksIHNpemVJbkJ5dGVzKSk7CiAK
ICAgICBpZiAoVU5MSUtFTFkoISFtX3RyYWNrZXIpKQotICAgICAgICBtX3RyYWNrZXItPm5vdGlm
eShoYW5kbGUucHRyKCkpOworICAgICAgICBtX3RyYWNrZXItPm5vdGlmeSgqaGFuZGxlLnB0cigp
KTsKIAogICAgIHJldHVybiBoYW5kbGU7CiB9CiAKLU1ldGFBbGxvY2F0b3I6OlN0YXRpc3RpY3Mg
TWV0YUFsbG9jYXRvcjo6Y3VycmVudFN0YXRpc3RpY3MoKQorTWV0YUFsbG9jYXRvcjo6U3RhdGlz
dGljcyBNZXRhQWxsb2NhdG9yOjpjdXJyZW50U3RhdGlzdGljcyhjb25zdCBMb2NrSG9sZGVyJikK
IHsKLSAgICBMb2NrSG9sZGVyIGxvY2tlcigmbV9sb2NrKTsKICAgICBTdGF0aXN0aWNzIHJlc3Vs
dDsKICAgICByZXN1bHQuYnl0ZXNBbGxvY2F0ZWQgPSBtX2J5dGVzQWxsb2NhdGVkOwogICAgIHJl
c3VsdC5ieXRlc1Jlc2VydmVkID0gbV9ieXRlc1Jlc2VydmVkOwpJbmRleDogU291cmNlL1dURi93
dGYvTWV0YUFsbG9jYXRvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL01ldGFBbGxv
Y2F0b3IuaAkocmV2aXNpb24gMjU4MzUwKQorKysgU291cmNlL1dURi93dGYvTWV0YUFsbG9jYXRv
ci5oCSh3b3JraW5nIGNvcHkpCkBAIC00NCwxNSArNDQsMTUgQEAgbmFtZXNwYWNlIFdURiB7CiBj
bGFzcyBNZXRhQWxsb2NhdG9yVHJhY2tlciB7CiAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7
CiBwdWJsaWM6Ci0gICAgdm9pZCBub3RpZnkoTWV0YUFsbG9jYXRvckhhbmRsZSopOwotICAgIHZv
aWQgcmVsZWFzZShNZXRhQWxsb2NhdG9ySGFuZGxlKik7CisgICAgdm9pZCBub3RpZnkoTWV0YUFs
bG9jYXRvckhhbmRsZSYpOworICAgIHZvaWQgcmVsZWFzZShNZXRhQWxsb2NhdG9ySGFuZGxlJik7
CiAKICAgICBNZXRhQWxsb2NhdG9ySGFuZGxlKiBmaW5kKHZvaWQqIGFkZHJlc3MpCiAgICAgewog
ICAgICAgICBNZXRhQWxsb2NhdG9ySGFuZGxlKiBoYW5kbGUgPSBtX2FsbG9jYXRpb25zLmZpbmRH
cmVhdGVzdExlc3NUaGFuT3JFcXVhbChhZGRyZXNzKTsKLSAgICAgICAgaWYgKGhhbmRsZSAmJiBh
ZGRyZXNzIDwgaGFuZGxlLT5lbmQoKS51bnRhZ2dlZFB0cigpKQorICAgICAgICBpZiAoaGFuZGxl
ICYmIGhhbmRsZS0+c3RhcnQoKS51bnRhZ2dlZFB0cigpIDw9IGFkZHJlc3MgJiYgYWRkcmVzcyA8
IGhhbmRsZS0+ZW5kKCkudW50YWdnZWRQdHIoKSkKICAgICAgICAgICAgIHJldHVybiBoYW5kbGU7
Ci0gICAgICAgIHJldHVybiAwOworICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICB9CiAKICAg
ICBSZWRCbGFja1RyZWU8TWV0YUFsbG9jYXRvckhhbmRsZSwgdm9pZCo+IG1fYWxsb2NhdGlvbnM7
CkBAIC02NCwxNyArNjQsMjIgQEAgY2xhc3MgTWV0YUFsbG9jYXRvciB7CiBwdWJsaWM6CiAgICAg
dXNpbmcgRnJlZVNwYWNlUHRyID0gTWV0YUFsbG9jYXRvclB0cjxGcmVlU3BhY2VQdHJUYWc+Owog
Ci0gICAgV1RGX0VYUE9SVF9QUklWQVRFIE1ldGFBbGxvY2F0b3Ioc2l6ZV90IGFsbG9jYXRpb25H
cmFudWxlLCBzaXplX3QgcGFnZVNpemUgPSBXVEY6OnBhZ2VTaXplKCkpOworICAgIFdURl9FWFBP
UlRfUFJJVkFURSBNZXRhQWxsb2NhdG9yKExvY2smLCBzaXplX3QgYWxsb2NhdGlvbkdyYW51bGUs
IHNpemVfdCBwYWdlU2l6ZSA9IFdURjo6cGFnZVNpemUoKSk7CiAgICAgCiAgICAgV1RGX0VYUE9S
VF9QUklWQVRFIHZpcnR1YWwgfk1ldGFBbGxvY2F0b3IoKTsKICAgICAKLSAgICBXVEZfRVhQT1JU
X1BSSVZBVEUgUmVmUHRyPE1ldGFBbGxvY2F0b3JIYW5kbGU+IGFsbG9jYXRlKHNpemVfdCBzaXpl
SW5CeXRlcywgdm9pZCogb3duZXJVSUQpOworICAgIEFMV0FZU19JTkxJTkUgUmVmUHRyPE1ldGFB
bGxvY2F0b3JIYW5kbGU+IGFsbG9jYXRlKHNpemVfdCBzaXplSW5CeXRlcykKKyAgICB7CisgICAg
ICAgIGF1dG8gbG9ja2VyID0gaG9sZExvY2sobV9sb2NrKTsKKyAgICAgICAgcmV0dXJuIGFsbG9j
YXRlKGxvY2tlciwgc2l6ZUluQnl0ZXMpOworICAgIH0KKyAgICBXVEZfRVhQT1JUX1BSSVZBVEUg
UmVmUHRyPE1ldGFBbGxvY2F0b3JIYW5kbGU+IGFsbG9jYXRlKGNvbnN0IExvY2tIb2xkZXImLCBz
aXplX3Qgc2l6ZUluQnl0ZXMpOwogCiAgICAgdm9pZCB0cmFja0FsbG9jYXRpb25zKE1ldGFBbGxv
Y2F0b3JUcmFja2VyKiB0cmFja2VyKQogICAgIHsKICAgICAgICAgbV90cmFja2VyID0gdHJhY2tl
cjsKICAgICB9Ci0gICAgCisKICAgICAvLyBOb24tYXRvbWljIG1ldGhvZHMgZm9yIGdldHRpbmcg
YWxsb2NhdG9yIHN0YXRpc3RpY3MuCiAgICAgc2l6ZV90IGJ5dGVzQWxsb2NhdGVkKCkgeyByZXR1
cm4gbV9ieXRlc0FsbG9jYXRlZDsgfQogICAgIHNpemVfdCBieXRlc1Jlc2VydmVkKCkgeyByZXR1
cm4gbV9ieXRlc1Jlc2VydmVkOyB9CkBAIC04Nyw3ICs5MiwxMiBAQCBwdWJsaWM6CiAgICAgICAg
IHNpemVfdCBieXRlc1Jlc2VydmVkOwogICAgICAgICBzaXplX3QgYnl0ZXNDb21taXR0ZWQ7CiAg
ICAgfTsKLSAgICBXVEZfRVhQT1JUX1BSSVZBVEUgU3RhdGlzdGljcyBjdXJyZW50U3RhdGlzdGlj
cygpOworICAgIFN0YXRpc3RpY3MgY3VycmVudFN0YXRpc3RpY3MoKQorICAgIHsKKyAgICAgICAg
YXV0byBsb2NrZXIgPSBob2xkTG9jayhtX2xvY2spOworICAgICAgICByZXR1cm4gY3VycmVudFN0
YXRpc3RpY3MobG9ja2VyKTsKKyAgICB9CisgICAgV1RGX0VYUE9SVF9QUklWQVRFIFN0YXRpc3Rp
Y3MgY3VycmVudFN0YXRpc3RpY3MoY29uc3QgTG9ja0hvbGRlciYpOwogCiAgICAgLy8gQWRkIG1v
cmUgZnJlZSBzcGFjZSB0byB0aGUgYWxsb2NhdG9yLiBDYWxsIHRoaXMgZGlyZWN0bHkgZnJvbQog
ICAgIC8vIHRoZSBjb25zdHJ1Y3RvciBpZiB5b3Ugd2lzaCB0byBvcGVyYXRlIHRoZSBhbGxvY2F0
b3Igd2l0aGluIGEKQEAgLTk4LDcgKzEwOCw2IEBAIHB1YmxpYzoKICAgICAvLyBidWlsZHMuCiAg
ICAgV1RGX0VYUE9SVF9QUklWQVRFIHNpemVfdCBkZWJ1Z0ZyZWVTcGFjZVNpemUoKTsKIAotICAg
IExvY2smIGdldExvY2soKSB7IHJldHVybiBtX2xvY2s7IH0KICAgICBXVEZfRVhQT1JUX1BSSVZB
VEUgYm9vbCBpc0luQWxsb2NhdGVkTWVtb3J5KGNvbnN0IEFic3RyYWN0TG9ja2VyJiwgdm9pZCog
YWRkcmVzcyk7CiAgICAgCiAjaWYgRU5BQkxFKE1FVEFfQUxMT0NBVE9SX1BST0ZJTEUpCkBAIC0x
MjMsNiArMTMyLDggQEAgcHJvdGVjdGVkOgogICAgIC8vIGRlc3RydWN0aW9uLCBpbiBwYXJ0IGJl
Y2F1c2UgYSBNZXRhQWxsb2NhdG9yIGNhbm5vdCBkaWUgc28gbG9uZwogICAgIC8vIGFzIHRoZXJl
IGFyZSBIYW5kbGVzIHRoYXQgcmVmZXIgdG8gaXQuCiAKKyAgICAvLyBSZWxlYXNlIGEgTWV0YUFs
bG9jYXRvckhhbmRsZS4KKyAgICB2aXJ0dWFsIHZvaWQgcmVsZWFzZShjb25zdCBMb2NrSG9sZGVy
JiwgTWV0YUFsbG9jYXRvckhhbmRsZSYpOwogcHJpdmF0ZToKICAgICAKICAgICBmcmllbmQgY2xh
c3MgTWV0YUFsbG9jYXRvckhhbmRsZTsKQEAgLTE1MCw5ICsxNjEsNiBAQCBwcml2YXRlOgogICAg
ICAgICBGcmVlU3BhY2VQdHIgbV9lbmQ7CiAgICAgfTsKICAgICB0eXBlZGVmIFJlZEJsYWNrVHJl
ZTxGcmVlU3BhY2VOb2RlLCBzaXplX3Q+IFRyZWU7Ci0KLSAgICAvLyBSZWxlYXNlIGEgTWV0YUFs
bG9jYXRvckhhbmRsZS4KLSAgICB2b2lkIHJlbGVhc2UoTWV0YUFsbG9jYXRvckhhbmRsZSopOwog
ICAgIAogICAgIC8vIFJlbW92ZSBmcmVlIHNwYWNlIGZyb20gdGhlIGFsbG9jYXRvci4gVGhpcyBp
cyBlZmZlY3RpdmVseQogICAgIC8vIHRoZSBhbGxvY2F0ZSgpIGZ1bmN0aW9uLCBleGNlcHQgdGhh
dCBpdCBkb2VzIG5vdCBtYXJrIHRoZQpAQCAtMTkzLDkgKzIwMSw5IEBAIHByaXZhdGU6CiAgICAg
c2l6ZV90IG1fYnl0ZXNSZXNlcnZlZDsKICAgICBzaXplX3QgbV9ieXRlc0NvbW1pdHRlZDsKICAg
ICAKLSAgICBMb2NrIG1fbG9jazsKKyAgICBMb2NrJiBtX2xvY2s7CiAKLSAgICBNZXRhQWxsb2Nh
dG9yVHJhY2tlciogbV90cmFja2VyOworICAgIE1ldGFBbGxvY2F0b3JUcmFja2VyKiBtX3RyYWNr
ZXIgeyBudWxscHRyIH07CiAKICNpZm5kZWYgTkRFQlVHCiAgICAgc2l6ZV90IG1fbWFsbG9jQmFs
YW5jZTsKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL01ldGFBbGxvY2F0b3JIYW5kbGUuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9NZXRhQWxsb2NhdG9ySGFuZGxlLmgJKHJldmlzaW9uIDI1
ODM1MCkKKysrIFNvdXJjZS9XVEYvd3RmL01ldGFBbGxvY2F0b3JIYW5kbGUuaAkod29ya2luZyBj
b3B5KQpAQCAtNDIsNyArNDIsNyBAQCBERUNMQVJFX0FMTE9DQVRPUl9XSVRIX0hFQVBfSURFTlRJ
RklFUihNCiBjbGFzcyBNZXRhQWxsb2NhdG9ySGFuZGxlIDogcHVibGljIFRocmVhZFNhZmVSZWZD
b3VudGVkPE1ldGFBbGxvY2F0b3JIYW5kbGU+LCBwdWJsaWMgUmVkQmxhY2tUcmVlPE1ldGFBbGxv
Y2F0b3JIYW5kbGUsIHZvaWQqPjo6Tm9kZSB7CiAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURURf
V0lUSF9IRUFQX0lERU5USUZJRVIoTWV0YUFsbG9jYXRvckhhbmRsZSk7CiBwcml2YXRlOgotICAg
IE1ldGFBbGxvY2F0b3JIYW5kbGUoTWV0YUFsbG9jYXRvciosIHZvaWQqIHN0YXJ0LCBzaXplX3Qg
c2l6ZUluQnl0ZXMsIHZvaWQqIG93bmVyVUlEKTsKKyAgICBNZXRhQWxsb2NhdG9ySGFuZGxlKE1l
dGFBbGxvY2F0b3ImLCB2b2lkKiBzdGFydCwgc2l6ZV90IHNpemVJbkJ5dGVzKTsKIAogcHVibGlj
OgogICAgIHVzaW5nIE1lbW9yeVB0ciA9IE1ldGFBbGxvY2F0b3JQdHI8SGFuZGxlTWVtb3J5UHRy
VGFnPjsKQEAgLTg2LDIyICs4NiwxMSBAQCBwdWJsaWM6CiAgICAgICAgIAogICAgIFdURl9FWFBP
UlRfUFJJVkFURSB2b2lkIHNocmluayhzaXplX3QgbmV3U2l6ZUluQnl0ZXMpOwogICAgIAotICAg
IGJvb2wgaXNNYW5hZ2VkKCkKKyAgICBNZXRhQWxsb2NhdG9yJiBhbGxvY2F0b3IoKQogICAgIHsK
LSAgICAgICAgcmV0dXJuICEhbV9hbGxvY2F0b3I7Ci0gICAgfQotICAgICAgICAKLSAgICBNZXRh
QWxsb2NhdG9yKiBhbGxvY2F0b3IoKQotICAgIHsKLSAgICAgICAgQVNTRVJUKG1fYWxsb2NhdG9y
KTsKICAgICAgICAgcmV0dXJuIG1fYWxsb2NhdG9yOwogICAgIH0KIAotICAgIHZvaWQqIG93bmVy
VUlEKCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBtX293bmVyVUlEOwotICAgIH0KLQogICAgIHZv
aWQqIGtleSgpCiAgICAgewogICAgICAgICByZXR1cm4gbV9zdGFydC51bnRhZ2dlZFB0cigpOwpA
QCAtMTEyLDEwICsxMDEsOSBAQCBwdWJsaWM6CiBwcml2YXRlOgogICAgIGZyaWVuZCBjbGFzcyBN
ZXRhQWxsb2NhdG9yOwogICAgIAotICAgIE1ldGFBbGxvY2F0b3IqIG1fYWxsb2NhdG9yOworICAg
IE1ldGFBbGxvY2F0b3ImIG1fYWxsb2NhdG9yOwogICAgIE1lbW9yeVB0ciBtX3N0YXJ0OwogICAg
IE1lbW9yeVB0ciBtX2VuZDsKLSAgICB2b2lkKiBtX293bmVyVUlEOwogfTsKIAogfQpJbmRleDog
U291cmNlL1dURi93dGYvUGxhdGZvcm1Vc2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0
Zi9QbGF0Zm9ybVVzZS5oCShyZXZpc2lvbiAyNTgzNTApCisrKyBTb3VyY2UvV1RGL3d0Zi9QbGF0
Zm9ybVVzZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMjQsMyArMzI0LDcgQEAKICNpZiBQTEFURk9S
TShJT1MpICYmIF9fSVBIT05FX09TX1ZFUlNJT05fTUlOX1JFUVVJUkVEID49IDE0MDAwMAogI2Rl
ZmluZSBVU0VfVVRUWVBFX1NXSVpaTEVSIDEKICNlbmRpZgorCisjaWYgQ1BVKEFSTTY0KSAmJiBD
UFUoQUREUkVTUzY0KQorI2RlZmluZSBVU0VfSlVNUF9JU0xBTkRTIDEKKyNlbmRpZgpJbmRleDog
U291cmNlL1dURi93dGYvUmVkQmxhY2tUcmVlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93
dGYvUmVkQmxhY2tUcmVlLmgJKHJldmlzaW9uIDI1ODM1MCkKKysrIFNvdXJjZS9XVEYvd3RmL1Jl
ZEJsYWNrVHJlZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMCw2ICszMCw3IEBACiAKICNpbmNsdWRl
IDx3dGYvQXNzZXJ0aW9ucy5oPgogI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgorI2luY2x1
ZGUgPHd0Zi9WZWN0b3IuaD4KIAogbmFtZXNwYWNlIFdURiB7CiAKQEAgLTMyNCw2ICszMjUsMjYg
QEAgcHVibGljOgogICAgICAgICB9CiAgICAgICAgIHJldHVybiBiZXN0OwogICAgIH0KKworICAg
IHRlbXBsYXRlIDx0eXBlbmFtZSBGdW5jdGlvbj4KKyAgICB2b2lkIGl0ZXJhdGUoRnVuY3Rpb24g
ZnVuY3Rpb24pCisgICAgeworICAgICAgICBpZiAoIW1fcm9vdCkKKyAgICAgICAgICAgIHJldHVy
bjsKKworICAgICAgICBWZWN0b3I8Tm9kZVR5cGUqLCAxNj4gdG9JdGVyYXRlOworICAgICAgICB0
b0l0ZXJhdGUuYXBwZW5kKG1fcm9vdCk7CisgICAgICAgIHdoaWxlICh0b0l0ZXJhdGUuc2l6ZSgp
KSB7CisgICAgICAgICAgICBOb2RlVHlwZSYgY3VycmVudCA9ICp0b0l0ZXJhdGUudGFrZUxhc3Qo
KTsKKyAgICAgICAgICAgIGJvb2wgaXRlcmF0ZUxlZnQgPSBmYWxzZTsKKyAgICAgICAgICAgIGJv
b2wgaXRlcmF0ZVJpZ2h0ID0gZmFsc2U7CisgICAgICAgICAgICBmdW5jdGlvbihjdXJyZW50LCBp
dGVyYXRlTGVmdCwgaXRlcmF0ZVJpZ2h0KTsKKyAgICAgICAgICAgIGlmIChpdGVyYXRlTGVmdCAm
JiBjdXJyZW50LmxlZnQoKSkKKyAgICAgICAgICAgICAgICB0b0l0ZXJhdGUuYXBwZW5kKGN1cnJl
bnQubGVmdCgpKTsKKyAgICAgICAgICAgIGlmIChpdGVyYXRlUmlnaHQgJiYgY3VycmVudC5yaWdo
dCgpKQorICAgICAgICAgICAgICAgIHRvSXRlcmF0ZS5hcHBlbmQoY3VycmVudC5yaWdodCgpKTsK
KyAgICAgICAgfQorICAgIH0KICAgICAKICAgICBOb2RlVHlwZSogZmlyc3QoKSBjb25zdAogICAg
IHsKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL1N0ZExpYkV4dHJhcy5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XVEYvd3RmL1N0ZExpYkV4dHJhcy5oCShyZXZpc2lvbiAyNTgzNTApCisrKyBTb3VyY2Uv
V1RGL3d0Zi9TdGRMaWJFeHRyYXMuaAkod29ya2luZyBjb3B5KQpAQCAtNDg5LDYgKzQ4OSwxOSBA
QCBBTFdBWVNfSU5MSU5FIGRlY2x0eXBlKGF1dG8pIG1ha2VVbmlxdWVXCiAgICAgcmV0dXJuIHN0
ZDo6bWFrZV91bmlxdWU8VD4oc3RkOjpmb3J3YXJkPEFyZ3M+KGFyZ3MpLi4uKTsKIH0KIAordGVt
cGxhdGUgPHR5cGVuYW1lIFJlc3VsdFR5cGUsIHNpemVfdC4uLiBJcywgdHlwZW5hbWUgLi4uQXJn
cz4KK2NvbnN0ZXhwciBhdXRvIGNvbnN0cnVjdEZpeGVkU2l6ZUFycmF5V2l0aEFyZ3VtZW50c0lt
cGwoc3RkOjppbmRleF9zZXF1ZW5jZTxJcy4uLj4sIEFyZ3MmJi4uLiBhcmdzKSAtPiBzdGQ6OmFy
cmF5PFJlc3VsdFR5cGUsIHNpemVvZi4uLihJcyk+Cit7CisgICAgcmV0dXJuIHsgKCh2b2lkKUlz
LCBSZXN1bHRUeXBlIHsgc3RkOjpmb3J3YXJkPEFyZ3M+KGFyZ3MpLi4uIH0pLi4uIH07Cit9CisK
Ky8vIENvbnN0cnVjdCBhbiBzdGQ6OmFycmF5IHdpdGggTiBlbGVtZW50cyBvZiBSZXN1bHRUeXBl
LCBwYXNzaW5nIEFyZ3MgdG8gZWFjaCBvZiB0aGUgTiBjb25zdHJ1Y3RvcnMuCit0ZW1wbGF0ZTx0
eXBlbmFtZSBSZXN1bHRUeXBlLCBzaXplX3QgTiwgdHlwZW5hbWUgLi4uQXJncz4KK2NvbnN0ZXhw
ciBhdXRvIGNvbnN0cnVjdEZpeGVkU2l6ZUFycmF5V2l0aEFyZ3VtZW50cyhBcmdzJiYuLi4gYXJn
cykgLT4gZGVjbHR5cGUoYXV0bykKK3sKKyAgICBhdXRvIHR1cGxlID0gc3RkOjptYWtlX2luZGV4
X3NlcXVlbmNlPE4+KCk7CisgICAgcmV0dXJuIGNvbnN0cnVjdEZpeGVkU2l6ZUFycmF5V2l0aEFy
Z3VtZW50c0ltcGw8UmVzdWx0VHlwZT4odHVwbGUsIHN0ZDo6Zm9yd2FyZDxBcmdzPihhcmdzKS4u
Lik7Cit9CiAKIH0gLy8gbmFtZXNwYWNlIFdURgogCkBAIC01MTQsMyArNTI3LDQgQEAgdXNpbmcg
V1RGOjpzYWZlQ2FzdDsKIHVzaW5nIFdURjo6dHJ5QmluYXJ5U2VhcmNoOwogdXNpbmcgV1RGOjpt
YWtlVW5pcXVlOwogdXNpbmcgV1RGOjptYWtlVW5pcXVlV2l0aG91dEZhc3RNYWxsb2NDaGVjazsK
K3VzaW5nIFdURjo6Y29uc3RydWN0Rml4ZWRTaXplQXJyYXlXaXRoQXJndW1lbnRzOwpJbmRleDog
VG9vbHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL0NoYW5nZUxvZwkocmV2aXNpb24g
MjU4MzUwKQorKysgVG9vbHMvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTIg
QEAKKzIwMjAtMDMtMTIgIFNhYW0gQmFyYXRpICA8c2JhcmF0aUBhcHBsZS5jb20+CisKKyAgICAg
ICAgSW1wbGVtZW50IDFHQiBvZiBleGVjdXRhYmxlIG1lbW9yeSBvbiBhcm02NAorICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjA4NDkwCisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBTY3JpcHRzL3J1bi1qc2Mt
c3RyZXNzLXRlc3RzOgorCiAyMDIwLTAzLTEyICBXZW5zb24gSHNpZWggIDx3ZW5zb25faHNpZWhA
YXBwbGUuY29tPgogCiAgICAgICAgIHJ1bi13ZWJraXQtdGVzdHMgLS11c2UtZ3B1LXByb2Nlc3Mg
c2hvdWxkIGVuYWJsZSBHUFUgUHJvY2VzcyBmb3IgY2FudmFzCkluZGV4OiBUb29scy9TY3JpcHRz
L3J1bi1qc2Mtc3RyZXNzLXRlc3RzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1NjcmlwdHMvcnVuLWpz
Yy1zdHJlc3MtdGVzdHMJKHJldmlzaW9uIDI1ODM1MCkKKysrIFRvb2xzL1NjcmlwdHMvcnVuLWpz
Yy1zdHJlc3MtdGVzdHMJKHdvcmtpbmcgY29weSkKQEAgLTUwLDYgKzUwLDcgQEAgU0NSSVBUU19Q
QVRIID0gVEhJU19TQ1JJUFRfUEFUSC5kaXJuYW1lCiBXRUJLSVRfUEFUSCA9IFNDUklQVFNfUEFU
SC5kaXJuYW1lLmRpcm5hbWUKIExBWU9VVFRFU1RTX1BBVEggPSBXRUJLSVRfUEFUSCArICJMYXlv
dXRUZXN0cyIKIFdBU01URVNUU19QQVRIID0gV0VCS0lUX1BBVEggKyAiSlNUZXN0cy93YXNtIgor
SkVUU1RSRUFNMl9QQVRIID0gV0VCS0lUX1BBVEggKyAiUGVyZm9ybWFuY2VUZXN0cy9KZXRTdHJl
YW0yIgogQ0hBS1JBVEVTVFNfUEFUSCA9IFdFQktJVF9QQVRIICsgIkpTVGVzdHMvQ2hha3JhQ29y
ZS90ZXN0IgogcmFpc2UgdW5sZXNzIFNDUklQVFNfUEFUSC5iYXNlbmFtZS50b19zID09ICJTY3Jp
cHRzIgogcmFpc2UgdW5sZXNzIFNDUklQVFNfUEFUSC5kaXJuYW1lLmJhc2VuYW1lLnRvX3MgPT0g
IlRvb2xzIgpAQCAtNjY5LDcgKzY3MCw3IEBAIGRlZiBydW5Ob0NKSVRWYWxpZGF0ZSgqb3B0aW9u
YWxUZXN0U3BlY2kKIGVuZAogCiBkZWYgcnVuTm9DSklUVmFsaWRhdGVQaGFzZXMoKm9wdGlvbmFs
VGVzdFNwZWNpZmljT3B0aW9ucykKLSAgICBydW4oIm5vLWNqaXQtdmFsaWRhdGUtcGhhc2VzIiwg
Ii0tdmFsaWRhdGVCeXRlY29kZT10cnVlIiwgIi0tdmFsaWRhdGVHcmFwaEF0RWFjaFBoYXNlPXRy
dWUiLCAiLS11c2VTb3VyY2VQcm92aWRlckNhY2hlPWZhbHNlIiwgKihOT19DSklUX09QVElPTlMg
KyBvcHRpb25hbFRlc3RTcGVjaWZpY09wdGlvbnMpKQorICAgIHJ1bigibm8tY2ppdC12YWxpZGF0
ZS1waGFzZXMiLCAiLS12YWxpZGF0ZUJ5dGVjb2RlPXRydWUiLCAiLS12YWxpZGF0ZUdyYXBoQXRF
YWNoUGhhc2U9dHJ1ZSIsICItLXVzZVNvdXJjZVByb3ZpZGVyQ2FjaGU9ZmFsc2UiLCAiLS11c2VS
YW5kb21pemluZ0V4ZWN1dGFibGVJc2xhbmRBbGxvY2F0aW9uPXRydWUiLCAqKE5PX0NKSVRfT1BU
SU9OUyArIG9wdGlvbmFsVGVzdFNwZWNpZmljT3B0aW9ucykpCiBlbmQKIAogZGVmIHJ1bk5vQ0pJ
VENvbGxlY3RDb250aW51b3VzbHkoKm9wdGlvbmFsVGVzdFNwZWNpZmljT3B0aW9ucykKQEAgLTcw
Niw3ICs3MDcsNyBAQCBkZWYgcnVuRlRMTm9DSklUKCpvcHRpb25hbFRlc3RTcGVjaWZpY09wCiBl
bmQKIAogZGVmIHJ1bkZUTE5vQ0pJVEIzTzAoKm9wdGlvbmFsVGVzdFNwZWNpZmljT3B0aW9ucykK
LSAgICBydW4oImZ0bC1uby1jaml0LWIzbzAiLCAiLS11c2VBcnJheUFsbG9jYXRpb25Qcm9maWxp
bmc9ZmFsc2UiLCAiLS1mb3JjZVBvbHlQcm90bz10cnVlIiwgKihGVExfT1BUSU9OUyArIE5PX0NK
SVRfT1BUSU9OUyArIEIzTzBfT1BUSU9OUyArIEZPUkNFX0xMSU5UX0VYSVRfT1BUSU9OUyArIG9w
dGlvbmFsVGVzdFNwZWNpZmljT3B0aW9ucykpCisgICAgcnVuKCJmdGwtbm8tY2ppdC1iM28wIiwg
Ii0tdXNlQXJyYXlBbGxvY2F0aW9uUHJvZmlsaW5nPWZhbHNlIiwgIi0tZm9yY2VQb2x5UHJvdG89
dHJ1ZSIsICItLXVzZVJhbmRvbWl6aW5nRXhlY3V0YWJsZUlzbGFuZEFsbG9jYXRpb249dHJ1ZSIs
ICooRlRMX09QVElPTlMgKyBOT19DSklUX09QVElPTlMgKyBCM08wX09QVElPTlMgKyBGT1JDRV9M
TElOVF9FWElUX09QVElPTlMgKyBvcHRpb25hbFRlc3RTcGVjaWZpY09wdGlvbnMpKQogZW5kCiAK
IGRlZiBydW5GVExOb0NKSVRWYWxpZGF0ZSgqb3B0aW9uYWxUZXN0U3BlY2lmaWNPcHRpb25zKQpA
QCAtNzM0LDcgKzczNSw3IEBAIGRlZiBydW5ERkdFYWdlck5vQ0pJVFZhbGlkYXRlKCpvcHRpb25h
bFQKIGVuZAogCiBkZWYgcnVuRlRMRWFnZXIoKm9wdGlvbmFsVGVzdFNwZWNpZmljT3B0aW9ucykK
LSAgICBydW4oImZ0bC1lYWdlciIsICItLWFpckZvcmNlQnJpZ2dzQWxsb2NhdG9yPXRydWUiLCAi
LS1mb3JjZVBvbHlQcm90bz10cnVlIiwgKihGVExfT1BUSU9OUyArIEVBR0VSX09QVElPTlMgKyBD
T0xMRUNUX0NPTlRJTlVPVVNMWV9PUFRJT05TICsgb3B0aW9uYWxUZXN0U3BlY2lmaWNPcHRpb25z
KSkKKyAgICBydW4oImZ0bC1lYWdlciIsICItLWFpckZvcmNlQnJpZ2dzQWxsb2NhdG9yPXRydWUi
LCAiLS11c2VSYW5kb21pemluZ0V4ZWN1dGFibGVJc2xhbmRBbGxvY2F0aW9uPXRydWUiLCAiLS1m
b3JjZVBvbHlQcm90bz10cnVlIiwgKihGVExfT1BUSU9OUyArIEVBR0VSX09QVElPTlMgKyBDT0xM
RUNUX0NPTlRJTlVPVVNMWV9PUFRJT05TICsgb3B0aW9uYWxUZXN0U3BlY2lmaWNPcHRpb25zKSkK
IGVuZAogCiBkZWYgcnVuRlRMRWFnZXJXYXRjaGRvZygqb3B0aW9uYWxUZXN0U3BlY2lmaWNPcHRp
b25zKQpAQCAtNzc1LDcgKzc3Niw3IEBAIGRlZiBydW5Ob0NKSVQoKm9wdGlvbmFsVGVzdFNwZWNp
ZmljT3B0aW8KIGVuZAogCiBkZWYgcnVuRWFnZXJKZXR0aXNvbk5vQ0pJVCgqb3B0aW9uYWxUZXN0
U3BlY2lmaWNPcHRpb25zKQotICAgIHJ1bigiZWFnZXItamV0dGlzb24tbm8tY2ppdCIsICItLWZv
cmNlQ29kZUJsb2NrVG9KZXR0aXNvbkR1ZVRvT2xkQWdlPXRydWUiLCAqKE5PX0NKSVRfT1BUSU9O
UyArIG9wdGlvbmFsVGVzdFNwZWNpZmljT3B0aW9ucykpCisgICAgcnVuKCJlYWdlci1qZXR0aXNv
bi1uby1jaml0IiwgIi0tdXNlUmFuZG9taXppbmdFeGVjdXRhYmxlSXNsYW5kQWxsb2NhdGlvbj10
cnVlIiwgIi0tZm9yY2VDb2RlQmxvY2tUb0pldHRpc29uRHVlVG9PbGRBZ2U9dHJ1ZSIsICooTk9f
Q0pJVF9PUFRJT05TICsgb3B0aW9uYWxUZXN0U3BlY2lmaWNPcHRpb25zKSkKIGVuZAogCiBkZWYg
cnVuU2hhZG93Q2hpY2tlbigqb3B0aW9uYWxUZXN0U3BlY2lmaWNPcHRpb25zKQpAQCAtMTA4Mywx
NiArMTA4NCwzNyBAQCBkZWYgcnVuV2ViQXNzZW1ibHkKICAgICBydW4oImRlZmF1bHQtd2FzbSIs
ICItbSIsICpGVExfT1BUSU9OUykKICAgICBpZiAkbW9kZSAhPSAicXVpY2siCiAgICAgICAgIHJ1
bigid2FzbS1uby1jaml0LXllcy10bHMtY29udGV4dCIsICItbSIsICItLXVzZUZhc3RUTFNGb3JX
YXNtQ29udGV4dD10cnVlIiwgKihGVExfT1BUSU9OUyArIE5PX0NKSVRfT1BUSU9OUykpCi0gICAg
ICAgIHJ1bigid2FzbS1lYWdlciIsICItbSIsICooRlRMX09QVElPTlMgKyBFQUdFUl9PUFRJT05T
KSkKLSAgICAgICAgcnVuKCJ3YXNtLWVhZ2VyLWpldHRpc29uIiwgIi1tIiwgIi0tZm9yY2VDb2Rl
QmxvY2tUb0pldHRpc29uRHVlVG9PbGRBZ2U9dHJ1ZSIsICpGVExfT1BUSU9OUykKKyAgICAgICAg
cnVuKCJ3YXNtLWVhZ2VyIiwgIi1tIiwgIi0tdXNlUmFuZG9taXppbmdFeGVjdXRhYmxlSXNsYW5k
QWxsb2NhdGlvbj10cnVlIiwgKihGVExfT1BUSU9OUyArIEVBR0VSX09QVElPTlMpKQorICAgICAg
ICBydW4oIndhc20tZWFnZXItamV0dGlzb24iLCAiLW0iLCAiLS1mb3JjZUNvZGVCbG9ja1RvSmV0
dGlzb25EdWVUb09sZEFnZT10cnVlIiwgIi0tdXNlUmFuZG9taXppbmdFeGVjdXRhYmxlSXNsYW5k
QWxsb2NhdGlvbj10cnVlIiwgKkZUTF9PUFRJT05TKQogICAgICAgICBydW4oIndhc20tbm8tdGxz
LWNvbnRleHQiLCAiLW0iLCAiLS11c2VGYXN0VExTRm9yV2FzbUNvbnRleHQ9ZmFsc2UiLCAqRlRM
X09QVElPTlMpCiAgICAgICAgIHJ1bigid2FzbS1zbG93LW1lbW9yeSIsICItbSIsICItLXVzZVdl
YkFzc2VtYmx5RmFzdE1lbW9yeT1mYWxzZSIsICpGVExfT1BUSU9OUykKICAgICAgICAgcnVuKCJ3
YXNtLWIzIiwgIi1tIiwgIi0tdXNlV2FzbUxMSW50PWZhbHNlIiwgIi0td2FzbUJCUVVzZXNBaXI9
ZmFsc2UiLCAqRlRMX09QVElPTlMpCi0gICAgICAgIHJ1bigid2FzbS1haXIiLCAiLW0iLCAiLS11
c2VXYXNtTExJbnQ9ZmFsc2UiLCAqRlRMX09QVElPTlMpCisgICAgICAgIHJ1bigid2FzbS1haXIi
LCAiLW0iLCAiLS11c2VXYXNtTExJbnQ9ZmFsc2UiLCAiLS11c2VSYW5kb21pemluZ0V4ZWN1dGFi
bGVJc2xhbmRBbGxvY2F0aW9uPXRydWUiLCAqRlRMX09QVElPTlMpCiAgICAgICAgIHJ1bigid2Fz
bS1jb2xsZWN0LWNvbnRpbnVvdXNseSIsICItbSIsICItLWNvbGxlY3RDb250aW51b3VzbHk9dHJ1
ZSIsICpGVExfT1BUSU9OUykgaWYgc2hvdWxkQ29sbGVjdENvbnRpbnVvdXNseT8KICAgICBlbmQK
IGVuZAogCitkZWYgcnVuV2ViQXNzZW1ibHlKZXRTdHJlYW0yCisgICAgcmV0dXJuIGlmICEkaml0
VGVzdHMKKyAgICByZXR1cm4gaWYgISRpc0ZUTFBsYXRmb3JtCisKKyAgICBwcmVwYXJlRXh0cmFB
YnNvbHV0ZUZpbGVzKEpFVFNUUkVBTTJfUEFUSCwgWyJKZXRTdHJlYW1Ecml2ZXIuanMiXSkKKyAg
ICBwcmVwYXJlRXh0cmFSZWxhdGl2ZUZpbGVzV2l0aEJhc2VEaXJlY3RvcnkoRGlyW0pFVFNUUkVB
TTJfUEFUSCArICJ3YXNtIiArICIqLmpzIl0ubWFwIHsgfGZ8ICJ3YXNtLyIgKyBGaWxlLmJhc2Vu
YW1lKGYpIH0sICRjb2xsZWN0aW9uLmRpcm5hbWUsICRleHRyYUZpbGVzQmFzZURpci5kaXJuYW1l
KQorICAgIHByZXBhcmVFeHRyYVJlbGF0aXZlRmlsZXNXaXRoQmFzZURpcmVjdG9yeShEaXJbSkVU
U1RSRUFNMl9QQVRIICsgIndhc20iICsgIioud2FzbSJdLm1hcCB7IHxmfCAid2FzbS8iICsgRmls
ZS5iYXNlbmFtZShmKSB9LCAkY29sbGVjdGlvbi5kaXJuYW1lLCAkZXh0cmFGaWxlc0Jhc2VEaXIu
ZGlybmFtZSkKKworICAgIHJ1bigiZGVmYXVsdC13YXNtIiwgKkZUTF9PUFRJT05TKQorICAgIGlm
ICRtb2RlICE9ICJxdWljayIKKyAgICAgICAgcnVuKCJ3YXNtLW5vLWNqaXQteWVzLXRscy1jb250
ZXh0IiwgIi0tdXNlRmFzdFRMU0Zvcldhc21Db250ZXh0PXRydWUiLCAqKEZUTF9PUFRJT05TICsg
Tk9fQ0pJVF9PUFRJT05TKSkKKyAgICAgICAgcnVuKCJ3YXNtLWVhZ2VyIiwgIi0tdXNlUmFuZG9t
aXppbmdFeGVjdXRhYmxlSXNsYW5kQWxsb2NhdGlvbj10cnVlIiwgKihGVExfT1BUSU9OUyArIEVB
R0VSX09QVElPTlMpKQorICAgICAgICBydW4oIndhc20tZWFnZXItamV0dGlzb24iLCAiLS1mb3Jj
ZUNvZGVCbG9ja1RvSmV0dGlzb25EdWVUb09sZEFnZT10cnVlIiwgKkZUTF9PUFRJT05TKQorICAg
ICAgICBydW4oIndhc20tbm8tdGxzLWNvbnRleHQiLCAiLS11c2VGYXN0VExTRm9yV2FzbUNvbnRl
eHQ9ZmFsc2UiLCAqRlRMX09QVElPTlMpCisgICAgICAgIHJ1bigid2FzbS1zbG93LW1lbW9yeSIs
ICItLXVzZVdlYkFzc2VtYmx5RmFzdE1lbW9yeT1mYWxzZSIsICpGVExfT1BUSU9OUykKKyAgICAg
ICAgcnVuKCJ3YXNtLWIzIiwgIi0tdXNlV2FzbUxMSW50PWZhbHNlIiwgIi0td2FzbUJCUVVzZXNB
aXI9ZmFsc2UiLCAqRlRMX09QVElPTlMpCisgICAgICAgIHJ1bigid2FzbS1haXIiLCAiLS11c2VX
YXNtTExJbnQ9ZmFsc2UiLCAiLS11c2VSYW5kb21pemluZ0V4ZWN1dGFibGVJc2xhbmRBbGxvY2F0
aW9uPXRydWUiLCAqRlRMX09QVElPTlMpCisgICAgICAgIHJ1bigid2FzbS1jb2xsZWN0LWNvbnRp
bnVvdXNseSIsICItLWNvbGxlY3RDb250aW51b3VzbHk9dHJ1ZSIsICpGVExfT1BUSU9OUykgaWYg
c2hvdWxkQ29sbGVjdENvbnRpbnVvdXNseT8KKyAgICBlbmQKK2VuZAorCiBkZWYgcnVuV2ViQXNz
ZW1ibHlTdWl0ZSgqb3B0aW9uYWxUZXN0U3BlY2lmaWNPcHRpb25zKQogICAgIHJldHVybiBpZiAh
JGppdFRlc3RzCiAgICAgcmV0dXJuIGlmICEkaXNGVExQbGF0Zm9ybQpAQCAtMTEwMywxMSArMTEy
NSwxMSBAQCBkZWYgcnVuV2ViQXNzZW1ibHlTdWl0ZSgqb3B0aW9uYWxUZXN0U3BlCiAgICAgaWYg
JG1vZGUgIT0gInF1aWNrIgogICAgICAgICBydW4oIndhc20tbm8tY2ppdC15ZXMtdGxzLWNvbnRl
eHQiLCAiLW0iLCAiLS11c2VGYXN0VExTRm9yV2FzbUNvbnRleHQ9dHJ1ZSIsICooRlRMX09QVElP
TlMgKyBOT19DSklUX09QVElPTlMgKyBvcHRpb25hbFRlc3RTcGVjaWZpY09wdGlvbnMpKQogICAg
ICAgICBydW4oIndhc20tZWFnZXIiLCAiLW0iLCAqKEZUTF9PUFRJT05TICsgRUFHRVJfT1BUSU9O
UyArIG9wdGlvbmFsVGVzdFNwZWNpZmljT3B0aW9ucykpCi0gICAgICAgIHJ1bigid2FzbS1lYWdl
ci1qZXR0aXNvbiIsICItbSIsICItLWZvcmNlQ29kZUJsb2NrVG9KZXR0aXNvbkR1ZVRvT2xkQWdl
PXRydWUiLCAqKEZUTF9PUFRJT05TICsgb3B0aW9uYWxUZXN0U3BlY2lmaWNPcHRpb25zKSkKKyAg
ICAgICAgcnVuKCJ3YXNtLWVhZ2VyLWpldHRpc29uIiwgIi1tIiwgIi0tZm9yY2VDb2RlQmxvY2tU
b0pldHRpc29uRHVlVG9PbGRBZ2U9dHJ1ZSIsICItLXVzZVJhbmRvbWl6aW5nRXhlY3V0YWJsZUlz
bGFuZEFsbG9jYXRpb249dHJ1ZSIsICooRlRMX09QVElPTlMgKyBvcHRpb25hbFRlc3RTcGVjaWZp
Y09wdGlvbnMpKQogICAgICAgICBydW4oIndhc20tbm8tdGxzLWNvbnRleHQiLCAiLW0iLCAiLS11
c2VGYXN0VExTRm9yV2FzbUNvbnRleHQ9ZmFsc2UiLCAqKEZUTF9PUFRJT05TICsgb3B0aW9uYWxU
ZXN0U3BlY2lmaWNPcHRpb25zKSkKICAgICAgICAgcnVuKCJ3YXNtLXNsb3ctbWVtb3J5IiwgIi1t
IiwgIi0tdXNlV2ViQXNzZW1ibHlGYXN0TWVtb3J5PWZhbHNlIiwgKihGVExfT1BUSU9OUyArIG9w
dGlvbmFsVGVzdFNwZWNpZmljT3B0aW9ucykpCiAgICAgICAgIHJ1bigid2FzbS1iMyIsICItbSIs
ICItLXVzZVdhc21MTEludD1mYWxzZSIsICItLXdhc21CQlFVc2VzQWlyPWZhbHNlIiwgKihGVExf
T1BUSU9OUyArIG9wdGlvbmFsVGVzdFNwZWNpZmljT3B0aW9ucykpCi0gICAgICAgIHJ1bigid2Fz
bS1haXIiLCAiLW0iLCAiLS11c2VXYXNtTExJbnQ9ZmFsc2UiLCAqKEZUTF9PUFRJT05TICsgb3B0
aW9uYWxUZXN0U3BlY2lmaWNPcHRpb25zKSkKKyAgICAgICAgcnVuKCJ3YXNtLWFpciIsICItbSIs
ICItLXVzZVdhc21MTEludD1mYWxzZSIsICItLXVzZVJhbmRvbWl6aW5nRXhlY3V0YWJsZUlzbGFu
ZEFsbG9jYXRpb249dHJ1ZSIsICooRlRMX09QVElPTlMgKyBvcHRpb25hbFRlc3RTcGVjaWZpY09w
dGlvbnMpKQogICAgICAgICBydW4oIndhc20tY29sbGVjdC1jb250aW51b3VzbHkiLCAiLW0iLCAi
LS1jb2xsZWN0Q29udGludW91c2x5PXRydWUiLCAqKEZUTF9PUFRJT05TICsgb3B0aW9uYWxUZXN0
U3BlY2lmaWNPcHRpb25zKSkgaWYgc2hvdWxkQ29sbGVjdENvbnRpbnVvdXNseT8KICAgICBlbmQK
IGVuZApAQCAtMTEzMywxMSArMTE1NSwxMSBAQCBkZWYgcnVuV2ViQXNzZW1ibHlXaXRoSGFybmVz
cygqb3B0aW9uYWxUCiAgICAgaWYgJG1vZGUgIT0gInF1aWNrIgogICAgICAgICBydW5IYXJuZXNz
VGVzdCgid2FzbS1uby1jaml0LXllcy10bHMtY29udGV4dCIsICItLXVzZUZhc3RUTFNGb3JXYXNt
Q29udGV4dD10cnVlIiwgKihGVExfT1BUSU9OUyArIE5PX0NKSVRfT1BUSU9OUyArIG9wdGlvbmFs
VGVzdFNwZWNpZmljT3B0aW9ucykpCiAgICAgICAgIHJ1bkhhcm5lc3NUZXN0KCJ3YXNtLWVhZ2Vy
IiwgKihGVExfT1BUSU9OUyArIEVBR0VSX09QVElPTlMgKyBvcHRpb25hbFRlc3RTcGVjaWZpY09w
dGlvbnMpKQotICAgICAgICBydW5IYXJuZXNzVGVzdCgid2FzbS1lYWdlci1qZXR0aXNvbiIsICIt
LWZvcmNlQ29kZUJsb2NrVG9KZXR0aXNvbkR1ZVRvT2xkQWdlPXRydWUiLCAqKEZUTF9PUFRJT05T
ICsgb3B0aW9uYWxUZXN0U3BlY2lmaWNPcHRpb25zKSkKKyAgICAgICAgcnVuSGFybmVzc1Rlc3Qo
Indhc20tZWFnZXItamV0dGlzb24iLCAiLS1mb3JjZUNvZGVCbG9ja1RvSmV0dGlzb25EdWVUb09s
ZEFnZT10cnVlIiwgIi0tdXNlUmFuZG9taXppbmdFeGVjdXRhYmxlSXNsYW5kQWxsb2NhdGlvbj10
cnVlIiwgKihGVExfT1BUSU9OUyArIG9wdGlvbmFsVGVzdFNwZWNpZmljT3B0aW9ucykpCiAgICAg
ICAgIHJ1bkhhcm5lc3NUZXN0KCJ3YXNtLW5vLXRscy1jb250ZXh0IiwgIi0tdXNlRmFzdFRMU0Zv
cldhc21Db250ZXh0PWZhbHNlIiwgKihGVExfT1BUSU9OUyArIG9wdGlvbmFsVGVzdFNwZWNpZmlj
T3B0aW9ucykpCiAgICAgICAgIHJ1bkhhcm5lc3NUZXN0KCJ3YXNtLXNsb3ctbWVtb3J5IiwgIi0t
dXNlV2ViQXNzZW1ibHlGYXN0TWVtb3J5PWZhbHNlIiwgKihGVExfT1BUSU9OUyArIG9wdGlvbmFs
VGVzdFNwZWNpZmljT3B0aW9ucykpCiAgICAgICAgIHJ1bkhhcm5lc3NUZXN0KCJ3YXNtLWIzIiwg
Ii0tdXNlV2FzbUxMSW50PWZhbHNlIiwgIi0td2FzbUJCUVVzZXNBaXI9ZmFsc2UiLCAqKEZUTF9P
UFRJT05TICsgb3B0aW9uYWxUZXN0U3BlY2lmaWNPcHRpb25zKSkKLSAgICAgICAgcnVuSGFybmVz
c1Rlc3QoIndhc20tbm8tYWlyIiwgIi0tdXNlV2FzbUxMSW50PWZhbHNlIiwgKihGVExfT1BUSU9O
UyArIG9wdGlvbmFsVGVzdFNwZWNpZmljT3B0aW9ucykpCisgICAgICAgIHJ1bkhhcm5lc3NUZXN0
KCJ3YXNtLW5vLWFpciIsICItLXVzZVdhc21MTEludD1mYWxzZSIsICItLXVzZVJhbmRvbWl6aW5n
RXhlY3V0YWJsZUlzbGFuZEFsbG9jYXRpb249dHJ1ZSIsICooRlRMX09QVElPTlMgKyBvcHRpb25h
bFRlc3RTcGVjaWZpY09wdGlvbnMpKQogICAgICAgICBydW5IYXJuZXNzVGVzdCgid2FzbS1jb2xs
ZWN0LWNvbnRpbnVvdXNseSIsICItLWNvbGxlY3RDb250aW51b3VzbHk9dHJ1ZSIsICooRlRMX09Q
VElPTlMgKyBvcHRpb25hbFRlc3RTcGVjaWZpY09wdGlvbnMpKSBpZiBzaG91bGRDb2xsZWN0Q29u
dGludW91c2x5PwogICAgIGVuZAogZW5kCkBAIC0xMTU0LDEwICsxMTc2LDEwIEBAIGRlZiBydW5X
ZWJBc3NlbWJseUVtc2NyaXB0ZW4obW9kZSkKICAgICBydW4oImRlZmF1bHQtd2FzbSIsICpGVExf
T1BUSU9OUykKICAgICBpZiAkbW9kZSAhPSAicXVpY2siCiAgICAgICAgIHJ1bigid2FzbS1uby1j
aml0LXllcy10bHMtY29udGV4dCIsICItLXVzZUZhc3RUTFNGb3JXYXNtQ29udGV4dD10cnVlIiwg
KihGVExfT1BUSU9OUyArIE5PX0NKSVRfT1BUSU9OUykpCi0gICAgICAgIHJ1bigid2FzbS1lYWdl
ci1qZXR0aXNvbiIsICItLWZvcmNlQ29kZUJsb2NrVG9KZXR0aXNvbkR1ZVRvT2xkQWdlPXRydWUi
LCAqRlRMX09QVElPTlMpCisgICAgICAgIHJ1bigid2FzbS1lYWdlci1qZXR0aXNvbiIsICItLWZv
cmNlQ29kZUJsb2NrVG9KZXR0aXNvbkR1ZVRvT2xkQWdlPXRydWUiLCAiLS11c2VSYW5kb21pemlu
Z0V4ZWN1dGFibGVJc2xhbmRBbGxvY2F0aW9uPXRydWUiLCAqRlRMX09QVElPTlMpCiAgICAgICAg
IHJ1bigid2FzbS1uby10bHMtY29udGV4dCIsICItLXVzZUZhc3RUTFNGb3JXYXNtQ29udGV4dD1m
YWxzZSIsICpGVExfT1BUSU9OUykKICAgICAgICAgcnVuKCJ3YXNtLWIzIiwgIi0tdXNlV2FzbUxM
SW50PWZhbHNlIiwgIi0td2FzbUJCUVVzZXNBaXI9ZmFsc2UiLCAqRlRMX09QVElPTlMpCi0gICAg
ICAgIHJ1bigid2FzbS1haXIiLCAiLS11c2VXYXNtTExJbnQ9ZmFsc2UiLCAqRlRMX09QVElPTlMp
CisgICAgICAgIHJ1bigid2FzbS1haXIiLCAiLS11c2VXYXNtTExJbnQ9ZmFsc2UiLCAiLS11c2VS
YW5kb21pemluZ0V4ZWN1dGFibGVJc2xhbmRBbGxvY2F0aW9uPXRydWUiLCAqRlRMX09QVElPTlMp
CiAgICAgICAgIHJ1bigid2FzbS1jb2xsZWN0LWNvbnRpbnVvdXNseSIsICItLWNvbGxlY3RDb250
aW51b3VzbHk9dHJ1ZSIsICpGVExfT1BUSU9OUykgaWYgc2hvdWxkQ29sbGVjdENvbnRpbnVvdXNs
eT8KICAgICBlbmQKIGVuZApAQCAtMTE4MCwxMCArMTIwMiwxMCBAQCBkZWYgcnVuV2ViQXNzZW1i
bHlTcGVjVGVzdChtb2RlKQogICAgIHJ1bldpdGhPdXRwdXRIYW5kbGVyKCJkZWZhdWx0LXdhc20i
LCBub2lzeU91dHB1dEhhbmRsZXIsICIuLi9zcGVjLWhhcm5lc3MuanMiLCAqRlRMX09QVElPTlMp
CiAgICAgaWYgJG1vZGUgIT0gInF1aWNrIgogICAgICAgcnVuV2l0aE91dHB1dEhhbmRsZXIoIndh
c20tbm8tY2ppdC15ZXMtdGxzLWNvbnRleHQiLCBub2lzeU91dHB1dEhhbmRsZXIsICIuLi9zcGVj
LWhhcm5lc3MuanMiLCAgIi0tdXNlRmFzdFRMU0Zvcldhc21Db250ZXh0PXRydWUiLCAqKEZUTF9P
UFRJT05TICsgTk9fQ0pJVF9PUFRJT05TKSkKLSAgICAgIHJ1bldpdGhPdXRwdXRIYW5kbGVyKCJ3
YXNtLWVhZ2VyLWpldHRpc29uIiwgbm9pc3lPdXRwdXRIYW5kbGVyLCAiLi4vc3BlYy1oYXJuZXNz
LmpzIiwgIi0tZm9yY2VDb2RlQmxvY2tUb0pldHRpc29uRHVlVG9PbGRBZ2U9dHJ1ZSIsICpGVExf
T1BUSU9OUykKKyAgICAgIHJ1bldpdGhPdXRwdXRIYW5kbGVyKCJ3YXNtLWVhZ2VyLWpldHRpc29u
Iiwgbm9pc3lPdXRwdXRIYW5kbGVyLCAiLi4vc3BlYy1oYXJuZXNzLmpzIiwgIi0tZm9yY2VDb2Rl
QmxvY2tUb0pldHRpc29uRHVlVG9PbGRBZ2U9dHJ1ZSIsICItLXVzZVJhbmRvbWl6aW5nRXhlY3V0
YWJsZUlzbGFuZEFsbG9jYXRpb249dHJ1ZSIsICpGVExfT1BUSU9OUykKICAgICAgIHJ1bldpdGhP
dXRwdXRIYW5kbGVyKCJ3YXNtLW5vLXRscy1jb250ZXh0Iiwgbm9pc3lPdXRwdXRIYW5kbGVyLCAi
Li4vc3BlYy1oYXJuZXNzLmpzIiwgIi0tdXNlRmFzdFRMU0Zvcldhc21Db250ZXh0PWZhbHNlIiwg
KkZUTF9PUFRJT05TKQogICAgICAgcnVuV2l0aE91dHB1dEhhbmRsZXIoIndhc20tYjMiLCBub2lz
eU91dHB1dEhhbmRsZXIsICIuLi9zcGVjLWhhcm5lc3MuanMiLCAiLS11c2VXYXNtTExJbnQ9ZmFs
c2UiLCAiLS13YXNtQkJRVXNlc0Fpcj1mYWxzZSIsICpGVExfT1BUSU9OUykKLSAgICAgIHJ1bldp
dGhPdXRwdXRIYW5kbGVyKCJ3YXNtLWFpciIsIG5vaXN5T3V0cHV0SGFuZGxlciwgIi4uL3NwZWMt
aGFybmVzcy5qcyIsICItLXVzZVdhc21MTEludD1mYWxzZSIsICpGVExfT1BUSU9OUykKKyAgICAg
IHJ1bldpdGhPdXRwdXRIYW5kbGVyKCJ3YXNtLWFpciIsIG5vaXN5T3V0cHV0SGFuZGxlciwgIi4u
L3NwZWMtaGFybmVzcy5qcyIsICItLXVzZVdhc21MTEludD1mYWxzZSIsICItLXVzZVJhbmRvbWl6
aW5nRXhlY3V0YWJsZUlzbGFuZEFsbG9jYXRpb249dHJ1ZSIsICpGVExfT1BUSU9OUykKICAgICAg
IHJ1bldpdGhPdXRwdXRIYW5kbGVyKCJ3YXNtLWNvbGxlY3QtY29udGludW91c2x5Iiwgbm9pc3lP
dXRwdXRIYW5kbGVyLCAiLi4vc3BlYy1oYXJuZXNzLmpzIiwgIi0tY29sbGVjdENvbnRpbnVvdXNs
eT10cnVlIiwgKkZUTF9PUFRJT05TKSBpZiBzaG91bGRDb2xsZWN0Q29udGludW91c2x5PwogICAg
IGVuZAogZW5kCkBAIC0xMzUyLDE3ICsxMzc0LDIxIEBAIGRlZiBub05vTExJbnRSdW5MYXlvdXRU
ZXN0CiAgICAgZW5kCiBlbmQKIAotZGVmIHByZXBhcmVFeHRyYVJlbGF0aXZlRmlsZXMoZXh0cmFG
aWxlcywgZGVzdGluYXRpb24pCitkZWYgcHJlcGFyZUV4dHJhUmVsYXRpdmVGaWxlc1dpdGhCYXNl
RGlyZWN0b3J5KGV4dHJhRmlsZXMsIGRlc3RpbmF0aW9uLCBiYXNlRGlyZWN0b3J5KQogICAgIERp
ci5jaGRpcigkb3V0cHV0RGlyKSB7CiAgICAgICAgIGV4dHJhRmlsZXMuZWFjaCB7CiAgICAgICAg
ICAgICB8IGZpbGUgfAogICAgICAgICAgICAgZGVzdCA9IGRlc3RpbmF0aW9uICsgZmlsZQogICAg
ICAgICAgICAgRmlsZVV0aWxzLm1rZGlyX3AoZGVzdC5kaXJuYW1lKQotICAgICAgICAgICAgRmls
ZVV0aWxzLmNwICRleHRyYUZpbGVzQmFzZURpciArIGZpbGUsIGRlc3QKKyAgICAgICAgICAgIEZp
bGVVdGlscy5jcCBiYXNlRGlyZWN0b3J5ICsgZmlsZSwgZGVzdAogICAgICAgICB9CiAgICAgfQog
ZW5kCiAKK2RlZiBwcmVwYXJlRXh0cmFSZWxhdGl2ZUZpbGVzKGV4dHJhRmlsZXMsIGRlc3RpbmF0
aW9uKQorICAgIHByZXBhcmVFeHRyYVJlbGF0aXZlRmlsZXNXaXRoQmFzZURpcmVjdG9yeShleHRy
YUZpbGVzLCBkZXN0aW5hdGlvbiwgJGV4dHJhRmlsZXNCYXNlRGlyKQorZW5kCisKIGRlZiBiYXNl
RGlyRm9yQ29sbGVjdGlvbihjb2xsZWN0aW9uTmFtZSkKICAgICBQYXRobmFtZSgiLnRlc3RzIikg
KyBjb2xsZWN0aW9uTmFtZQogZW5kCkluZGV4OiBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dU
Ri9NZXRhQWxsb2NhdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9UZXN0V2ViS2l0QVBJL1Rl
c3RzL1dURi9NZXRhQWxsb2NhdG9yLmNwcAkocmV2aXNpb24gMjU4MzUwKQorKysgVG9vbHMvVGVz
dFdlYktpdEFQSS9UZXN0cy9XVEYvTWV0YUFsbG9jYXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTUyLDcgKzUyLDcgQEAgcHVibGljOgogICAgIGNsYXNzIFNpbXBsZVRlc3RBbGxvY2F0b3I6IHB1
YmxpYyBNZXRhQWxsb2NhdG9yIHsKICAgICBwdWJsaWM6CiAgICAgICAgIFNpbXBsZVRlc3RBbGxv
Y2F0b3IoTWV0YUFsbG9jYXRvclRlc3QqIHBhcmVudCkKLSAgICAgICAgICAgIDogTWV0YUFsbG9j
YXRvcigzMikKKyAgICAgICAgICAgIDogTWV0YUFsbG9jYXRvcihtX2xvY2ssIDMyKQogICAgICAg
ICAgICAgLCBtX3BhcmVudChwYXJlbnQpCiAgICAgICAgIHsKICAgICAgICAgICAgIGFkZEZyZXNo
RnJlZVNwYWNlKHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KGJhc2VQYWdlICogcGFnZVNpemUoKSks
IGRlZmF1bHRQYWdlc0luSGVhcCAqIHBhZ2VTaXplKCkpOwpAQCAtMTI5LDYgKzEyOSw3IEBAIHB1
YmxpYzoKICAgICAgICAgfQogICAgICAgICAKICAgICBwcml2YXRlOgorICAgICAgICBMb2NrIG1f
bG9jazsKICAgICAgICAgTWV0YUFsbG9jYXRvclRlc3QqIG1fcGFyZW50OwogICAgIH07CiAKQEAg
LTE5MCw3ICsxOTEsNyBAQCBwdWJsaWM6CiAgICAgCiAgICAgTWV0YUFsbG9jYXRvckhhbmRsZSog
YWxsb2NhdGUoc2l6ZV90IHNpemVJbkJ5dGVzLCBTYW5pdHlDaGVja01vZGUgc2FuaXR5Q2hlY2tN
b2RlID0gUnVuU2FuaXR5Q2hlY2spCiAgICAgewotICAgICAgICBNZXRhQWxsb2NhdG9ySGFuZGxl
KiBoYW5kbGUgPSBhbGxvY2F0b3ItPmFsbG9jYXRlKHNpemVJbkJ5dGVzLCAwKS5sZWFrUmVmKCk7
CisgICAgICAgIE1ldGFBbGxvY2F0b3JIYW5kbGUqIGhhbmRsZSA9IGFsbG9jYXRvci0+YWxsb2Nh
dGUoc2l6ZUluQnl0ZXMpLmxlYWtSZWYoKTsKICAgICAgICAgRVhQRUNUX1RSVUUoaGFuZGxlKTsK
ICAgICAgICAgRVhQRUNUX0VRKGhhbmRsZS0+c2l6ZUluQnl0ZXMoKSwgc2l6ZUluQnl0ZXMpOwog
ICAgICAgICAKQEAgLTQ3Miw3ICs0NzMsNyBAQCBwdWJsaWM6CiAgICAgICAgIAogICAgICAgICBz
YW5pdHlDaGVjaygpOwogICAgICAgICAKLSAgICAgICAgRVhQRUNUX1RSVUUoIWFsbG9jYXRvci0+
YWxsb2NhdGUoc2l6ZUluQnl0ZXMsIDApKTsKKyAgICAgICAgRVhQRUNUX1RSVUUoIWFsbG9jYXRv
ci0+YWxsb2NhdGUoc2l6ZUluQnl0ZXMpKTsKICAgICAgICAgCiAgICAgICAgIGZvciAoc2l6ZV90
IGluZGV4ID0gMDsgaW5kZXggPCBudW1BbGxvY2F0aW9uczsgKytpbmRleCkKICAgICAgICAgICAg
IGZyZWUoaGFuZGxlcy5hdChpbmRleCksIERvbnRSdW5TYW5pdHlDaGVjayk7CkBAIC01NzksNyAr
NTgwLDcgQEAgcHVibGljOgogICAgICAgICBzYW5pdHlDaGVjaygpOwogICAgICAgICAKICAgICAg
ICAgLy8gQXNzZXJ0IHRoYXQgdGhlIGhlYXAgaXMgbm90IGVtcHR5LgotICAgICAgICBFWFBFQ1Rf
VFJVRSghYWxsb2NhdG9yLT5hbGxvY2F0ZShkZWZhdWx0UGFnZXNJbkhlYXAgKiBwYWdlU2l6ZSgp
LCAwKSk7CisgICAgICAgIEVYUEVDVF9UUlVFKCFhbGxvY2F0b3ItPmFsbG9jYXRlKGRlZmF1bHRQ
YWdlc0luSGVhcCAqIHBhZ2VTaXplKCkpKTsKICAgICAgICAgCiAgICAgICAgIC8vIEFsbG9jYXRl
IHRoZSByZW1haW5kZXIgb2YgdGhlIGhlYXAuCiAgICAgICAgIE1ldGFBbGxvY2F0b3JIYW5kbGUq
IHJlbWFpbmRlciA9IGFsbG9jYXRlKGRlZmF1bHRQYWdlc0luSGVhcCAqIHBhZ2VTaXplKCkgLSBz
ZWNvbmRTaXplKTsKQEAgLTU5NywxMiArNTk4LDEyIEBAIHB1YmxpYzoKICAgICAKICAgICB2b2lk
IHRlc3REZW1hbmRBbGxvY0NvYWxlc2NlKHNpemVfdCBmaXJzdFNpemUsIHNpemVfdCBudW1QYWdl
cywgc2l6ZV90IHNlY29uZFNpemUpCiAgICAgewotICAgICAgICBFWFBFQ1RfVFJVRSghYWxsb2Nh
dG9yLT5hbGxvY2F0ZSgoZGVmYXVsdFBhZ2VzSW5IZWFwICsgbnVtUGFnZXMpICogcGFnZVNpemUo
KSwgMCkpOworICAgICAgICBFWFBFQ1RfVFJVRSghYWxsb2NhdG9yLT5hbGxvY2F0ZSgoZGVmYXVs
dFBhZ2VzSW5IZWFwICsgbnVtUGFnZXMpICogcGFnZVNpemUoKSkpOwogICAgICAgICAKICAgICAg
ICAgTWV0YUFsbG9jYXRvckhhbmRsZSogZmlyc3RIYW5kbGUgPSBhbGxvY2F0ZShmaXJzdFNpemUp
OwogICAgICAgICAKLSAgICAgICAgRVhQRUNUX1RSVUUoIWFsbG9jYXRvci0+YWxsb2NhdGUoc2Vj
b25kU2l6ZSwgMCkpOwotICAgICAgICBFWFBFQ1RfVFJVRSghYWxsb2NhdG9yLT5hbGxvY2F0ZSgo
ZGVmYXVsdFBhZ2VzSW5IZWFwICsgbnVtUGFnZXMpICogcGFnZVNpemUoKSwgMCkpOworICAgICAg
ICBFWFBFQ1RfVFJVRSghYWxsb2NhdG9yLT5hbGxvY2F0ZShzZWNvbmRTaXplKSk7CisgICAgICAg
IEVYUEVDVF9UUlVFKCFhbGxvY2F0b3ItPmFsbG9jYXRlKChkZWZhdWx0UGFnZXNJbkhlYXAgKyBu
dW1QYWdlcykgKiBwYWdlU2l6ZSgpKSk7CiAgICAgICAgIAogICAgICAgICBjdXJyZW50SGVhcEdy
b3d0aE1vZGUgPSBGb3JUZXN0RGVtYW5kQWxsb2NDb2FsZXNjZTsKICAgICAgICAgYWxsb3dBbGxv
Y2F0ZVBhZ2VzID0gbnVtUGFnZXM7CkBAIC02MjYsMTIgKzYyNywxMiBAQCBwdWJsaWM6CiAgICAg
ewogICAgICAgICBmcmVlKGFsbG9jYXRlKGZpcnN0U2l6ZSkpOwogICAgICAgICBmcmVlKGFsbG9j
YXRlKGRlZmF1bHRQYWdlc0luSGVhcCAqIHBhZ2VTaXplKCkpKTsKLSAgICAgICAgRVhQRUNUX1RS
VUUoIWFsbG9jYXRvci0+YWxsb2NhdGUoKGRlZmF1bHRQYWdlc0luSGVhcCArIG51bVBhZ2VzKSAq
IHBhZ2VTaXplKCksIDApKTsKKyAgICAgICAgRVhQRUNUX1RSVUUoIWFsbG9jYXRvci0+YWxsb2Nh
dGUoKGRlZmF1bHRQYWdlc0luSGVhcCArIG51bVBhZ2VzKSAqIHBhZ2VTaXplKCkpKTsKICAgICAg
ICAgCiAgICAgICAgIE1ldGFBbGxvY2F0b3JIYW5kbGUqIGZpcnN0SGFuZGxlID0gYWxsb2NhdGUo
Zmlyc3RTaXplKTsKICAgICAgICAgCi0gICAgICAgIEVYUEVDVF9UUlVFKCFhbGxvY2F0b3ItPmFs
bG9jYXRlKHNlY29uZFNpemUsIDApKTsKLSAgICAgICAgRVhQRUNUX1RSVUUoIWFsbG9jYXRvci0+
YWxsb2NhdGUoKGRlZmF1bHRQYWdlc0luSGVhcCArIG51bVBhZ2VzKSAqIHBhZ2VTaXplKCksIDAp
KTsKKyAgICAgICAgRVhQRUNUX1RSVUUoIWFsbG9jYXRvci0+YWxsb2NhdGUoc2Vjb25kU2l6ZSkp
OworICAgICAgICBFWFBFQ1RfVFJVRSghYWxsb2NhdG9yLT5hbGxvY2F0ZSgoZGVmYXVsdFBhZ2Vz
SW5IZWFwICsgbnVtUGFnZXMpICogcGFnZVNpemUoKSkpOwogICAgICAgICAKICAgICAgICAgY3Vy
cmVudEhlYXBHcm93dGhNb2RlID0gRm9yVGVzdERlbWFuZEFsbG9jRG9udENvYWxlc2NlOwogICAg
ICAgICBhbGxvd0FsbG9jYXRlUGFnZXMgPSBudW1QYWdlczsKQEAgLTY0NSwxMiArNjQ2LDEyIEBA
IHB1YmxpYzoKICAgICAgICAgCiAgICAgICAgIHJlcXVlc3RlZE51bVBhZ2VzID0gMDsKICAgICAg
ICAgCi0gICAgICAgIEVYUEVDVF9UUlVFKCFhbGxvY2F0b3ItPmFsbG9jYXRlKChkZWZhdWx0UGFn
ZXNJbkhlYXAgKyBudW1QYWdlcykgKiBwYWdlU2l6ZSgpLCAwKSk7CisgICAgICAgIEVYUEVDVF9U
UlVFKCFhbGxvY2F0b3ItPmFsbG9jYXRlKChkZWZhdWx0UGFnZXNJbkhlYXAgKyBudW1QYWdlcykg
KiBwYWdlU2l6ZSgpKSk7CiAKICAgICAgICAgZnJlZShmaXJzdEhhbmRsZSk7CiAgICAgICAgIGZy
ZWUoc2Vjb25kSGFuZGxlKTsKICAgICAgICAgCi0gICAgICAgIEVYUEVDVF9UUlVFKCFhbGxvY2F0
b3ItPmFsbG9jYXRlKChkZWZhdWx0UGFnZXNJbkhlYXAgKyBudW1QYWdlcykgKiBwYWdlU2l6ZSgp
LCAwKSk7CisgICAgICAgIEVYUEVDVF9UUlVFKCFhbGxvY2F0b3ItPmFsbG9jYXRlKChkZWZhdWx0
UGFnZXNJbkhlYXAgKyBudW1QYWdlcykgKiBwYWdlU2l6ZSgpKSk7CiAgICAgICAgIAogICAgICAg
ICBmaXJzdEhhbmRsZSA9IGFsbG9jYXRlKGZpcnN0U2l6ZSk7CiAgICAgICAgIHNlY29uZEhhbmRs
ZSA9IGFsbG9jYXRlKHNlY29uZFNpemUpOwpAQCAtNjcxLDcgKzY3Miw3IEBAIFRFU1RfRihNZXRh
QWxsb2NhdG9yVGVzdCwgQWxsb2NaZXJvKSAgICAKICAgICAvLyBUZXN0cyB0aGF0IGFsbG9jYXRp
bmcgYSB6ZXJvLWxlbmd0aCBibG9jayByZXR1cm5zIDAgYW5kCiAgICAgLy8gZG9lcyBub3QgY2hh
bmdlIGFueXRoaW5nIGluIG1lbW9yeS4KICAgICAKLSAgICBBU1NFUlQoIWFsbG9jYXRvci0+YWxs
b2NhdGUoMCwgMCkpOworICAgIEFTU0VSVCghYWxsb2NhdG9yLT5hbGxvY2F0ZSgwKSk7CiAgICAg
CiAgICAgTWV0YUFsbG9jYXRvckhhbmRsZSogZmluYWwgPSBhbGxvY2F0ZShkZWZhdWx0UGFnZXNJ
bkhlYXAgKiBwYWdlU2l6ZSgpKTsKICAgICBFWFBFQ1RfRVEoZmluYWwtPnN0YXJ0KCkudW50YWdn
ZWRQdHIoKSwgcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oYmFzZVBhZ2UgKiBwYWdlU2l6ZSgpKSk7
Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>393449</attachid>
            <date>2020-03-12 20:50:13 -0700</date>
            <delta_ts>2020-03-25 13:18:17 -0700</delta_ts>
            <desc>patch</desc>
            <filename>c-backup.diff</filename>
            <type>text/plain</type>
            <size>126218</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IEpTVGVzdHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEpTVGVzdHMvQ2hhbmdlTG9n
CShyZXZpc2lvbiAyNTgzNTApCisrKyBKU1Rlc3RzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpA
QCAtMSwzICsxLDE0IEBACisyMDIwLTAzLTEyICBTYWFtIEJhcmF0aSAgPHNiYXJhdGlAYXBwbGUu
Y29tPgorCisgICAgICAgIEltcGxlbWVudCAxR0Igb2YgZXhlY3V0YWJsZSBtZW1vcnkgb24gYXJt
NjQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIwODQ5
MAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFJ1biBK
ZXRTdHJlYW0yIHdhc20gdGVzdHMuCisKKyAgICAgICAgKiB3YXNtLnlhbWw6CisKIDIwMjAtMDMt
MTEgIEtlaXRoIE1pbGxlciAgPGtlaXRoX21pbGxlckBhcHBsZS5jb20+CiAKICAgICAgICAgVGVz
dDI2Mi1ydW5uZXIgc2hvdWxkIGFsd2F5cyBjb25zaWRlciBjcmFzaGVzIGFzIG5ldyBmYWlsdXJl
cwpJbmRleDogSlNUZXN0cy93YXNtLnlhbWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSlNUZXN0cy93YXNtLnlh
bWwJKHJldmlzaW9uIDI1ODM1MCkKKysrIEpTVGVzdHMvd2FzbS55YW1sCSh3b3JraW5nIGNvcHkp
CkBAIC0yMzEsMyArMjMxLDYgQEAKIC0gcGF0aDogd2FzbS9tb2R1bGVzL3J1bi1mcm9tLXdhc20u
d2FzbQogICBjbWQ6IHJ1bldlYkFzc2VtYmx5CiAKKy0gcGF0aDogLi4vUGVyZm9ybWFuY2VUZXN0
cy9KZXRTdHJlYW0yL3dhc20tY2xpLmpzCisgIGNtZDogcnVuV2ViQXNzZW1ibHlKZXRTdHJlYW0y
IHVubGVzcyBwYXJzZVJ1bkNvbW1hbmRzCisKSW5kZXg6IEpTVGVzdHMvd2FzbS9sb3dFeGVjdXRh
YmxlTWVtb3J5L2V4ZWN1dGFibGUtbWVtb3J5LW9vbS5qcwo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKU1Rlc3Rz
L3dhc20vbG93RXhlY3V0YWJsZU1lbW9yeS9leGVjdXRhYmxlLW1lbW9yeS1vb20uanMJKHJldmlz
aW9uIDI1ODM1MCkKKysrIEpTVGVzdHMvd2FzbS9sb3dFeGVjdXRhYmxlTWVtb3J5L2V4ZWN1dGFi
bGUtbWVtb3J5LW9vbS5qcwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDcgQEAKKy8vIEZJWE1F
OiBDb25zaWRlciBtYWtpbmcganVtcCBpc2xhbmRzIHdvcmsgd2l0aCBPcHRpb25zOjpqaXRNZW1v
cnlSZXNlcnZhdGlvblNpemUKKy8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0yMDkwMzcKKy8vQCBza2lwIGlmICRhcmNoaXRlY3R1cmUgPT0gImFybTY0IgorCiBpbXBv
cnQgKiBhcyBhc3NlcnQgZnJvbSAnLi4vYXNzZXJ0LmpzJwogaW1wb3J0IEJ1aWxkZXIgZnJvbSAn
Li4vQnVpbGRlci5qcycKIApJbmRleDogUGVyZm9ybWFuY2VUZXN0cy9DaGFuZ2VMb2cKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gUGVyZm9ybWFuY2VUZXN0cy9DaGFuZ2VMb2cJKHJldmlzaW9uIDI1ODM1MCkKKysr
IFBlcmZvcm1hbmNlVGVzdHMvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMjQg
QEAKKzIwMjAtMDMtMTIgIFNhYW0gQmFyYXRpICA8c2JhcmF0aUBhcHBsZS5jb20+CisKKyAgICAg
ICAgSW1wbGVtZW50IDFHQiBvZiBleGVjdXRhYmxlIG1lbW9yeSBvbiBhcm02NAorICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjA4NDkwCisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBKZXRTdHJlYW0yL0pldFN0
cmVhbURyaXZlci5qczoKKyAgICAgICAgKERyaXZlci5wcm90b3R5cGUuZHVtcEpTT05SZXN1bHRz
SWZOZWVkZWQpOgorICAgICAgICAoRGVmYXVsdEJlbmNobWFyay5wcm90b3R5cGUudXBkYXRlVUlB
ZnRlclJ1bik6CisgICAgICAgIChEZWZhdWx0QmVuY2htYXJrKToKKyAgICAgICAgKFdTTEJlbmNo
bWFyay5wcm90b3R5cGUudXBkYXRlVUlBZnRlclJ1bik6CisgICAgICAgIChXU0xCZW5jaG1hcmsp
OgorICAgICAgICAoV2FzbUJlbmNobWFyay5wcm90b3R5cGUudXBkYXRlVUlBZnRlclJ1bik6Cisg
ICAgICAgIChXYXNtQmVuY2htYXJrKToKKyAgICAgICAgKERyaXZlci5hc3luYyBmZXRjaFJlc291
cmNlcy5zdGF0dXNFbGVtZW50LmlubmVySFRNTC5hLmhyZWYuc3RyaW5nX2FwcGVhcmVkX2hlcmUp
OgorICAgICAgICAoRHJpdmVyLnByb3RvdHlwZS5hc3luYyBmZXRjaFJlc291cmNlcyk6CisgICAg
ICAgICogSmV0U3RyZWFtMi93YXNtLWNsaS5qczogQWRkZWQuCisgICAgICAgIChjb25zb2xlLmxv
Zyk6CisgICAgICAgIChhc3luYyBydW5KZXRTdHJlYW0pOgorCiAyMDIwLTAyLTE3ICBEb24gT2xt
c3RlYWQgIDxkb24ub2xtc3RlYWRAc29ueS5jb20+CiAKICAgICAgICAgW0NNYWtlXSBVc2UgYnVp
bHRpbiB0YXJnZXRzCkluZGV4OiBQZXJmb3JtYW5jZVRlc3RzL0pldFN0cmVhbTIvSmV0U3RyZWFt
RHJpdmVyLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFBlcmZvcm1hbmNlVGVzdHMvSmV0U3RyZWFtMi9KZXRT
dHJlYW1Ecml2ZXIuanMJKHJldmlzaW9uIDI1ODM1MCkKKysrIFBlcmZvcm1hbmNlVGVzdHMvSmV0
U3RyZWFtMi9KZXRTdHJlYW1Ecml2ZXIuanMJKHdvcmtpbmcgY29weSkKQEAgLTQwOSw5ICs0MDks
OSBAQCBjbGFzcyBEcml2ZXIgewogICAgIGR1bXBKU09OUmVzdWx0c0lmTmVlZGVkKCkKICAgICB7
CiAgICAgICAgIGlmIChkdW1wSlNPTlJlc3VsdHMpIHsKLSAgICAgICAgICAgIHByaW50KCJcbiIp
OwotICAgICAgICAgICAgcHJpbnQodGhpcy5yZXN1bHRzSlNPTigpKTsKLSAgICAgICAgICAgIHBy
aW50KCJcbiIpOworICAgICAgICAgICAgY29uc29sZS5sb2coIlxuIik7CisgICAgICAgICAgICBj
b25zb2xlLmxvZyh0aGlzLnJlc3VsdHNKU09OKCkpOworICAgICAgICAgICAgY29uc29sZS5sb2co
IlxuIik7CiAgICAgICAgIH0KICAgICB9CiAKQEAgLTcyNSwxNSArNzI1LDE1IEBAIGNsYXNzIERl
ZmF1bHRCZW5jaG1hcmsgZXh0ZW5kcyBCZW5jaG1hcmsKICAgICAgICAgICAgIHJldHVybjsKICAg
ICAgICAgfQogCi0gICAgICAgIHByaW50KCIgICAgU3RhcnR1cDoiLCB1aUZyaWVuZGx5TnVtYmVy
KHRoaXMuZmlyc3RJdGVyYXRpb24pKTsKLSAgICAgICAgcHJpbnQoIiAgICBXb3JzdCBDYXNlOiIs
IHVpRnJpZW5kbHlOdW1iZXIodGhpcy53b3JzdDQpKTsKLSAgICAgICAgcHJpbnQoIiAgICBBdmVy
YWdlOiIsIHVpRnJpZW5kbHlOdW1iZXIodGhpcy5hdmVyYWdlKSk7Ci0gICAgICAgIHByaW50KCIg
ICAgU2NvcmU6IiwgdWlGcmllbmRseU51bWJlcih0aGlzLnNjb3JlKSk7CisgICAgICAgIGNvbnNv
bGUubG9nKCIgICAgU3RhcnR1cDoiLCB1aUZyaWVuZGx5TnVtYmVyKHRoaXMuZmlyc3RJdGVyYXRp
b24pKTsKKyAgICAgICAgY29uc29sZS5sb2coIiAgICBXb3JzdCBDYXNlOiIsIHVpRnJpZW5kbHlO
dW1iZXIodGhpcy53b3JzdDQpKTsKKyAgICAgICAgY29uc29sZS5sb2coIiAgICBBdmVyYWdlOiIs
IHVpRnJpZW5kbHlOdW1iZXIodGhpcy5hdmVyYWdlKSk7CisgICAgICAgIGNvbnNvbGUubG9nKCIg
ICAgU2NvcmU6IiwgdWlGcmllbmRseU51bWJlcih0aGlzLnNjb3JlKSk7CiAgICAgICAgIGlmIChS
QU1pZmljYXRpb24pIHsKLSAgICAgICAgICAgIHByaW50KCIgICAgQ3VycmVudCBGb290cHJpbnQ6
IiwgdWlGcmllbmRseU51bWJlcih0aGlzLmN1cnJlbnRGb290cHJpbnQpKTsKLSAgICAgICAgICAg
IHByaW50KCIgICAgUGVhayBGb290cHJpbnQ6IiwgdWlGcmllbmRseU51bWJlcih0aGlzLnBlYWtG
b290cHJpbnQpKTsKKyAgICAgICAgICAgIGNvbnNvbGUubG9nKCIgICAgQ3VycmVudCBGb290cHJp
bnQ6IiwgdWlGcmllbmRseU51bWJlcih0aGlzLmN1cnJlbnRGb290cHJpbnQpKTsKKyAgICAgICAg
ICAgIGNvbnNvbGUubG9nKCIgICAgUGVhayBGb290cHJpbnQ6IiwgdWlGcmllbmRseU51bWJlcih0
aGlzLnBlYWtGb290cHJpbnQpKTsKICAgICAgICAgfQotICAgICAgICBwcmludCgiICAgIFdhbGwg
dGltZToiLCB1aUZyaWVuZGx5RHVyYXRpb24obmV3IERhdGUodGhpcy5lbmRUaW1lIC0gdGhpcy5z
dGFydFRpbWUpKSk7CisgICAgICAgIGNvbnNvbGUubG9nKCIgICAgV2FsbCB0aW1lOiIsIHVpRnJp
ZW5kbHlEdXJhdGlvbihuZXcgRGF0ZSh0aGlzLmVuZFRpbWUgLSB0aGlzLnN0YXJ0VGltZSkpKTsK
ICAgICB9CiB9CiAKQEAgLTgxOSwxNCArODE5LDE0IEBAIGNsYXNzIFdTTEJlbmNobWFyayBleHRl
bmRzIEJlbmNobWFyayB7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KIAotICAgICAg
ICBwcmludCgiICAgIFN0ZGxpYjoiLCB1aUZyaWVuZGx5TnVtYmVyKHRoaXMuc3RkbGliKSk7Ci0g
ICAgICAgIHByaW50KCIgICAgVGVzdHM6IiwgdWlGcmllbmRseU51bWJlcih0aGlzLm1haW5SdW4p
KTsKLSAgICAgICAgcHJpbnQoIiAgICBTY29yZToiLCB1aUZyaWVuZGx5TnVtYmVyKHRoaXMuc2Nv
cmUpKTsKKyAgICAgICAgY29uc29sZS5sb2coIiAgICBTdGRsaWI6IiwgdWlGcmllbmRseU51bWJl
cih0aGlzLnN0ZGxpYikpOworICAgICAgICBjb25zb2xlLmxvZygiICAgIFRlc3RzOiIsIHVpRnJp
ZW5kbHlOdW1iZXIodGhpcy5tYWluUnVuKSk7CisgICAgICAgIGNvbnNvbGUubG9nKCIgICAgU2Nv
cmU6IiwgdWlGcmllbmRseU51bWJlcih0aGlzLnNjb3JlKSk7CiAgICAgICAgIGlmIChSQU1pZmlj
YXRpb24pIHsKLSAgICAgICAgICAgIHByaW50KCIgICAgQ3VycmVudCBGb290cHJpbnQ6IiwgdWlG
cmllbmRseU51bWJlcih0aGlzLmN1cnJlbnRGb290cHJpbnQpKTsKLSAgICAgICAgICAgIHByaW50
KCIgICAgUGVhayBGb290cHJpbnQ6IiwgdWlGcmllbmRseU51bWJlcih0aGlzLnBlYWtGb290cHJp
bnQpKTsKKyAgICAgICAgICAgIGNvbnNvbGUubG9nKCIgICAgQ3VycmVudCBGb290cHJpbnQ6Iiwg
dWlGcmllbmRseU51bWJlcih0aGlzLmN1cnJlbnRGb290cHJpbnQpKTsKKyAgICAgICAgICAgIGNv
bnNvbGUubG9nKCIgICAgUGVhayBGb290cHJpbnQ6IiwgdWlGcmllbmRseU51bWJlcih0aGlzLnBl
YWtGb290cHJpbnQpKTsKICAgICAgICAgfQotICAgICAgICBwcmludCgiICAgIFdhbGwgdGltZToi
LCB1aUZyaWVuZGx5RHVyYXRpb24obmV3IERhdGUodGhpcy5lbmRUaW1lIC0gdGhpcy5zdGFydFRp
bWUpKSk7CisgICAgICAgIGNvbnNvbGUubG9nKCIgICAgV2FsbCB0aW1lOiIsIHVpRnJpZW5kbHlE
dXJhdGlvbihuZXcgRGF0ZSh0aGlzLmVuZFRpbWUgLSB0aGlzLnN0YXJ0VGltZSkpKTsKICAgICB9
CiB9OwogCkBAIC05NzUsMTMgKzk3NSwxMyBAQCBjbGFzcyBXYXNtQmVuY2htYXJrIGV4dGVuZHMg
QmVuY2htYXJrIHsKICAgICAgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKHRoaXMuc2Nv
cmVJRCkuaW5uZXJIVE1MID0gdWlGcmllbmRseU51bWJlcih0aGlzLnNjb3JlKTsKICAgICAgICAg
ICAgIHJldHVybjsKICAgICAgICAgfQotICAgICAgICBwcmludCgiICAgIFN0YXJ0dXA6IiwgdWlG
cmllbmRseU51bWJlcih0aGlzLnN0YXJ0dXBUaW1lKSk7Ci0gICAgICAgIHByaW50KCIgICAgUnVu
IHRpbWU6IiwgdWlGcmllbmRseU51bWJlcih0aGlzLnJ1blRpbWUpKTsKKyAgICAgICAgY29uc29s
ZS5sb2coIiAgICBTdGFydHVwOiIsIHVpRnJpZW5kbHlOdW1iZXIodGhpcy5zdGFydHVwVGltZSkp
OworICAgICAgICBjb25zb2xlLmxvZygiICAgIFJ1biB0aW1lOiIsIHVpRnJpZW5kbHlOdW1iZXIo
dGhpcy5ydW5UaW1lKSk7CiAgICAgICAgIGlmIChSQU1pZmljYXRpb24pIHsKLSAgICAgICAgICAg
IHByaW50KCIgICAgQ3VycmVudCBGb290cHJpbnQ6IiwgdWlGcmllbmRseU51bWJlcih0aGlzLmN1
cnJlbnRGb290cHJpbnQpKTsKLSAgICAgICAgICAgIHByaW50KCIgICAgUGVhayBGb290cHJpbnQ6
IiwgdWlGcmllbmRseU51bWJlcih0aGlzLnBlYWtGb290cHJpbnQpKTsKKyAgICAgICAgICAgIGNv
bnNvbGUubG9nKCIgICAgQ3VycmVudCBGb290cHJpbnQ6IiwgdWlGcmllbmRseU51bWJlcih0aGlz
LmN1cnJlbnRGb290cHJpbnQpKTsKKyAgICAgICAgICAgIGNvbnNvbGUubG9nKCIgICAgUGVhayBG
b290cHJpbnQ6IiwgdWlGcmllbmRseU51bWJlcih0aGlzLnBlYWtGb290cHJpbnQpKTsKICAgICAg
ICAgfQotICAgICAgICBwcmludCgiICAgIFNjb3JlOiIsIHVpRnJpZW5kbHlOdW1iZXIodGhpcy5z
Y29yZSkpOworICAgICAgICBjb25zb2xlLmxvZygiICAgIFNjb3JlOiIsIHVpRnJpZW5kbHlOdW1i
ZXIodGhpcy5zY29yZSkpOwogICAgIH0KIH07CiAKSW5kZXg6IFBlcmZvcm1hbmNlVGVzdHMvSmV0
U3RyZWFtMi93YXNtLWNsaS5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBQZXJmb3JtYW5jZVRlc3RzL0pldFN0
cmVhbTIvd2FzbS1jbGkuanMJKG5vbmV4aXN0ZW50KQorKysgUGVyZm9ybWFuY2VUZXN0cy9KZXRT
dHJlYW0yL3dhc20tY2xpLmpzCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDYgQEAKKworLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFO
RCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorKi8KKworY29uc3QgaXNJbkJyb3dzZXIgPSBmYWxzZTsKK2NvbnNvbGUgPSB7CisgICAgbG9n
OiAoKSA9PiB7IH0KK30KKwordGVzdExpc3QgPSBbIkhhc2hTZXQtd2FzbSIsICJ0c2Ytd2FzbSIs
ICJxdWlja3NvcnQtd2FzbSIsICJnY2MtbG9vcHMtd2FzbSIsICJyaWNoYXJkcy13YXNtIl07CisK
K1JBTWlmaWNhdGlvbiA9IGZhbHNlOworCitsb2FkKCIuL0pldFN0cmVhbURyaXZlci5qcyIpOwor
Cithc3luYyBmdW5jdGlvbiBydW5KZXRTdHJlYW0oKSB7CisgICAgdHJ5IHsKKyAgICAgICAgYXdh
aXQgSmV0U3RyZWFtLmluaXRpYWxpemUoKTsKKyAgICAgICAgSmV0U3RyZWFtLnN0YXJ0KCk7Cisg
ICAgfSBjYXRjaCAoZSkgeworICAgICAgICB0aHJvdyBlOworICAgIH0KK30KK3J1bkpldFN0cmVh
bSgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCShyZXZpc2lvbiAyNTgzNTApCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEs
MTA0IEBACisyMDIwLTAzLTEyICBTYWFtIEJhcmF0aSAgPHNiYXJhdGlAYXBwbGUuY29tPgorCisg
ICAgICAgIEltcGxlbWVudCAxR0Igb2YgZXhlY3V0YWJsZSBtZW1vcnkgb24gYXJtNjQKKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIwODQ5MAorCisgICAg
ICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRoaXMgcGF0Y2ggaW1w
bGVtZW50cyB0aGUgMUdCIGV4ZWN1dGFibGUgbWVtb3J5IHNwYWNlIG9uIGFybTY0LiBUbyBtYWtl
IHRoaXMKKyAgICAgICAgd29yaywgd2UgaW1wbGVtZW50IGp1bXBzIGxhcmdlciB0aGFuICsvLTEy
OE1CIHRvIHVzZSBqdW1wIGlzbGFuZHMuIEp1bXAgaXNsYW5kcworICAgICAgICB3b3JrIGJ5IHNw
bGl0dGluZyB1cCB0aGUgfjFHQiByZWdpb24gaW50byA5IDExMk1CIGNodW5rcyAoMTAwOCBNQiB0
b3RhbCkuIEVhY2gKKyAgICAgICAgY2h1bmsgaXMgc3BsaXQgaW50byB0d286IDk2TUIgb2YgZXhl
Y3V0YWJsZSByZWdpb24sIGFuZCAxNk1CIG9mIGp1bXAgaXNsYW5kIHJlZ2lvbi4KKyAgICAgICAg
V2l0aCB0aGlzIHNwbGl0LCBhbnkganVtcCBpbnNpZGUgYSBqdW1wIGlzbGFuZCByZWdpb24gY2Fu
IGdldCB0byB0aGUgYWRqYWNlbnQKKyAgICAgICAgaXNsYW5kIChmb3J3YXJkcyBvciBiYWNrd2Fy
ZHMpIGluIGEgc2luZ2xlICsvLTEyOE1CIGp1bXAuIFdoZW4gbGlua2luZyBhIGp1bXAKKyAgICAg
ICAgZnJvbSBBIHRvIEIsIHdoZXJlIHxBIC0gQnwgPiAxMjhNQiwgd2UgaW5zdGVhZCBwb2ludCB0
aGUganVtcCB0byBhbiBpc2xhbmQsCisgICAgICAgIHdoZXJlIHRoaXMgaXNsYW5kIGhhcyBhIHBv
dGVudGlhbCBzZXJpZXMgb2YganVtcHMgdGhhdCBmaW5hbGx5IGxhbmRzIGF0IEIuCisgICAgICAg
IAorICAgICAgICBUbyBhbGxvY2F0ZSBleGVjdXRhYmxlIG1lbW9yeSwgdXNlIGEgTWV0YUFsbG9j
YXRvciBmb3IgZWFjaCA5Nk1CIGNodW5rLiBUbworICAgICAgICBhbGxvY2F0ZSBpc2xhbmRzLCB3
ZSBoYXZlIGEgYml0IHZlY3RvciB3ZSB1c2UgdG8gdHJhY2sgdXNlZCBhbmQgZnJlZWQgaXNsYW5k
cy4KKyAgICAgICAgV2Ugb25seSBncm93IHRoaXMgYml0IHZlY3RvciBhcyBpc2xhbmRzIGFyZSBh
bGxvY2F0ZWQsIHNvIGl0IGZyZXF1ZW50bHkKKyAgICAgICAgcmVtYWlucyBlbXB0eSBvciB2ZXJ5
IHNtYWxsLgorICAgICAgICAKKyAgICAgICAgVGhlIGdvYWwgb2YgdGhpcyBwYXRjaCBpcyB0byBo
YXZlIG1pbmltYWwgcGVyZiBpbXBhY3Qgd2hlbiBub3QgdXNpbmcgaXNsYW5kcywKKyAgICAgICAg
c28gdGhlIGRhdGEgc3RydWN0dXJlcyBhcmUgZGVzaWduZWQgdG8gb25seSBpbmN1ciBvdmVyaGVh
ZCB3aGVuIGFjdHVhbGx5IHVzaW5nCisgICAgICAgIGlzbGFuZHMuIFdlIGV4cGVjdCB0aGUgdXNl
IG9mIGlzbGFuZHMgdG8gYmUgbWluaW1hbC4gV2UgdXNlIGEgcmVkIGJsYWNrIHRyZWUKKyAgICAg
ICAgdG8gdHJhY2sgYWxsIGlzbGFuZCBsb2NhdGlvbnMuIFRoaXMgYWxsb3dzIHVzIHRvIGRlYWxs
b2NhdGUgYWxsIGlzbGFuZHMgd2hlbgorICAgICAgICBhbiBleGVjdXRhYmxlIG1lbW9yeSBoYW5k
bGUgaXMgZnJlZWQuIFR5cGljYWxseSwgdGhpcyByZWQgYmxhY2sgdHJlZSBpcyBlbXB0eSwKKyAg
ICAgICAgc28gZnJlZWluZyBhbiBleGVjdXRhYmxlIG1lbW9yeSBoYW5kbGUgaW5jdXJzIG5vIGV4
dHJhIG92ZXJoZWFkLgorICAgICAgICAKKyAgICAgICAgVG8gbWFrZSBpc2xhbmRzIHdvcmsgZm9y
IFdhc20sIHdlIG5vdyBoYXZlIHRvIGxpbmsgdGllciB1cCBjb2RlIGluIHR3byBwaGFzZXMuCisg
ICAgICAgIFByZXZpb3VzbHksIHdlIHdvdWxkIGp1c3QgcGF0Y2gganVtcHMgY29uY3VycmVudGx5
IHRvIFdhc20gdGhyZWFkcyBydW5uaW5nIGFmdGVyCisgICAgICAgIHJlc2V0dGluZyB0aGUgaWNh
Y2hlLCBrbm93aW5nIHRoYXQgd2Ugd291bGQgYmUgYWJsZSB0byBhdG9taWNhbGx5IHVwZGF0ZSB0
aGUganVtcAorICAgICAgICBpbnN0cnVjdGlvbiB0byBwb2ludCB0byB0aGUgbmV3IGRlc3RpbmF0
aW9uLiBIb3dldmVyLCBub3cgd2hlbiByZXBhdGNoaW5nIHRoZXNlCisgICAgICAgIGp1bXBzIGlu
IGEgd29ybGQgd2l0aCBqdW1wIGlzbGFuZHMsIHdlIG1pZ2h0IG5lZWQgdG8gYWxsb2NhdGUgaXNs
YW5kcyBkZXBlbmRpbmcKKyAgICAgICAgb24gdGhlIGp1bXAgbG9jYXRpb24gYW5kIGl0cyB0YXJn
ZXQuIFNvIHdlIG5vdyBhbGxvY2F0ZSBhbmQgY29sbGVjdCB0aGUgc2V0IG9mIGlzbGFuZHMsCisg
ICAgICAgIHRoZW4gcmVzZXQgdGhlIGljYWNoZSwgdGhlbiBhdG9taWNhbGx5IHVwZGF0ZSB0aGUg
YnJhbmNoIHRvIHBvaW50IHRvIHRoZSBkZXN0aW5hdGlvbgorICAgICAgICAob3IgYW4gaXNsYW5k
IHRoYXQganVtcHMgdG8gdGhlIGRlc3RpbmF0aW9uKS4gT25lIGltcG9ydGFudCBpbXBsZW1lbnRh
dGlvbiBkZXRhaWwKKyAgICAgICAgaGVyZSBpcyB0aGF0IGZvciBub3JtYWwgaXNsYW5kIHJlcGF0
Y2hpbmcsIGlmIHdlIGhhdmUgYSBqdW1wIGZyb20gQSB0byBCLCBhbmQgaXQKKyAgICAgICAgYWxs
b2NhdGVzIGEgc2V0IGlmIGlzbGFuZHMgWCwgd2UgdXN1YWxseSBjYW4gZGVhbGxvY2F0ZSBYIHdo
ZW4gcmVwYXRjaGluZyBBIHRvIGdvIHRvIEInLgorICAgICAgICBUaGlzIGlzIGJlY2F1c2UgdGhl
IHR5cGljYWwgcmVwYXRjaCBzY2VuYXJpbyBpbiBKUyBoYXBwZW5zIHdoZW4gdGhhdCBjb2RlIGlz
IG5vdCBiZWluZworICAgICAgICBleGVjdXRlZC4gRm9yIFdhc20gdGhvdWdoLCB0aG9zZSBpc2xh
bmRzIFggbWlnaHQgYmUgcnVubmluZyB3aGlsZSB3ZSB3YW50IHRvIHJlcGF0Y2gKKyAgICAgICAg
QSB0byBnbyB0byBCJy4gU28gaW5zdGVhZCBvZiBkZWFsbG9jYXRpbmcgWCwgd2UganVzdCBhcHBl
bmQgdG8gWCBpbiB0aGlzIHNjZW5hcmlvLCBhbmQKKyAgICAgICAgd2UgZnJlZSB0aGUgbmV3IHNl
dCBYJyB3aGVuIHRoZSBjb2RlIGl0c2VsZiBpcyBmcmVlZC4KKyAgICAgICAgCisgICAgICAgIChU
aGlzIHBhdGNoIGFsc28gZml4ZXMgYSBidWcgaW4gdGhlIFdhc20gTExJbnQgdG8gQkJRIHRpZXIg
dXAgdGhhdCBJIHNwb3R0ZWQsCisgICAgICAgIHdoZXJlIHdlIHdvdWxkIHB1Ymxpc2ggYSBMTElu
dCBjYWxsZWUncyBCQlEgcmVwbGFjZW1lbnQgYmVmb3JlIHdlIGZpbmlzaGVkCisgICAgICAgIGxp
bmtpbmcgdGhlIG91dGdvaW5nIGNhbGxzIG9mIHRoZSBCQlEgcmVwbGFjZW1lbnQuKQorICAgICAg
ICAKKyAgICAgICAgVGhpcyBwYXRjaCBhbHNvIHJlbW92ZXMgdGhlIG9sZCAiQ29kZVByb2ZpbGlu
ZyIgY29kZSB0aGF0IGhhcyBiZWVuIHVudXNlZCBmb3IKKyAgICAgICAgYSBsb25nIHRpbWUuCisK
KyAgICAgICAgKiBKYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAg
ICAgICAqIFNvdXJjZXMudHh0OgorICAgICAgICAqIGFzc2VtYmxlci9BUk02NEFzc2VtYmxlci5o
OgorICAgICAgICAoSlNDOjpBUk02NEFzc2VtYmxlcjo6Yik6CisgICAgICAgIChKU0M6OkFSTTY0
QXNzZW1ibGVyOjpibCk6CisgICAgICAgIChKU0M6OkFSTTY0QXNzZW1ibGVyOjpyZXBsYWNlV2l0
aEp1bXApOgorICAgICAgICAoSlNDOjpBUk02NEFzc2VtYmxlcjo6cHJlcGFyZUZvckF0b21pY1Jl
bGlua0p1bXBDb25jdXJyZW50bHkpOgorICAgICAgICAoSlNDOjpBUk02NEFzc2VtYmxlcjo6cHJl
cGFyZUZvckF0b21pY1JlbGlua0NhbGxDb25jdXJyZW50bHkpOgorICAgICAgICAoSlNDOjpBUk02
NEFzc2VtYmxlcjo6Y29tcHV0ZUp1bXBUeXBlKToKKyAgICAgICAgKEpTQzo6QVJNNjRBc3NlbWJs
ZXI6OmNhbkVtaXRKdW1wKToKKyAgICAgICAgKEpTQzo6QVJNNjRBc3NlbWJsZXI6OmxpbmtKdW1w
T3JDYWxsKToKKyAgICAgICAgKEpTQzo6QVJNNjRBc3NlbWJsZXI6OmxpbmtDb21wYXJlQW5kQnJh
bmNoKToKKyAgICAgICAgKEpTQzo6QVJNNjRBc3NlbWJsZXI6OmxpbmtDb25kaXRpb25hbEJyYW5j
aCk6CisgICAgICAgIChKU0M6OkFSTTY0QXNzZW1ibGVyOjpsaW5rVGVzdEFuZEJyYW5jaCk6Cisg
ICAgICAgICogYXNzZW1ibGVyL0Fic3RyYWN0TWFjcm9Bc3NlbWJsZXIuaDoKKyAgICAgICAgKEpT
Qzo6QWJzdHJhY3RNYWNyb0Fzc2VtYmxlcjo6cHJlcGFyZUZvckF0b21pY1JlcGF0Y2hOZWFyQ2Fs
bENvbmN1cnJlbnRseSk6CisgICAgICAgICogYXNzZW1ibGVyL0xpbmtCdWZmZXIuY3BwOgorICAg
ICAgICAoSlNDOjpMaW5rQnVmZmVyOjpjb3B5Q29tcGFjdEFuZExpbmtDb2RlKToKKyAgICAgICAg
KEpTQzo6TGlua0J1ZmZlcjo6bGlua0NvZGUpOgorICAgICAgICAoSlNDOjpMaW5rQnVmZmVyOjph
bGxvY2F0ZSk6CisgICAgICAgICogYXNzZW1ibGVyL0xpbmtCdWZmZXIuaDoKKyAgICAgICAgKEpT
Qzo6TGlua0J1ZmZlcjo6TGlua0J1ZmZlcik6CisgICAgICAgICogYXNzZW1ibGVyL01hY3JvQXNz
ZW1ibGVyQ29kZVJlZi5oOgorICAgICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxlckNvZGVSZWY6Ok1h
Y3JvQXNzZW1ibGVyQ29kZVJlZik6CisgICAgICAgICogaml0L0V4ZWN1dGFibGVBbGxvY2F0b3Iu
Y3BwOgorICAgICAgICAoSlNDOjppbml0aWFsaXplSklUUGFnZVJlc2VydmF0aW9uKToKKyAgICAg
ICAgKEpTQzo6RXhlY3V0YWJsZUFsbG9jYXRvcjo6aW5pdGlhbGl6ZVVuZGVybHlpbmdBbGxvY2F0
b3IpOgorICAgICAgICAoSlNDOjpFeGVjdXRhYmxlQWxsb2NhdG9yOjppc1ZhbGlkIGNvbnN0KToK
KyAgICAgICAgKEpTQzo6RXhlY3V0YWJsZUFsbG9jYXRvcjo6YWxsb2NhdGUpOgorICAgICAgICAo
SlNDOjpFeGVjdXRhYmxlQWxsb2NhdG9yOjpnZXRKdW1wSXNsYW5kVG8pOgorICAgICAgICAoSlND
OjpFeGVjdXRhYmxlQWxsb2NhdG9yOjpnZXRKdW1wSXNsYW5kVG9Db25jdXJyZW50bHkpOgorICAg
ICAgICAoSlNDOjpGaXhlZFZNUG9vbEV4ZWN1dGFibGVBbGxvY2F0b3I6On5GaXhlZFZNUG9vbEV4
ZWN1dGFibGVBbGxvY2F0b3IpOiBEZWxldGVkLgorICAgICAgICAqIGppdC9FeGVjdXRhYmxlQWxs
b2NhdG9yLmg6CisgICAgICAgIChKU0M6OkV4ZWN1dGFibGVBbGxvY2F0b3JCYXNlOjphbGxvY2F0
ZSk6CisgICAgICAgICogcnVudGltZS9Db21tb25TbG93UGF0aHMuY3BwOgorICAgICAgICAqIHJ1
bnRpbWUvQ29tcGxldGlvbi5jcHA6CisgICAgICAgIChKU0M6OmV2YWx1YXRlKToKKyAgICAgICAg
KiBydW50aW1lL0pTTW9kdWxlTG9hZGVyLmNwcDoKKyAgICAgICAgKEpTQzo6bW9kdWxlTG9hZGVy
UGFyc2VNb2R1bGUpOgorICAgICAgICAqIHJ1bnRpbWUvT3B0aW9uc0xpc3QuaDoKKyAgICAgICAg
KiB0b29scy9Db2RlUHJvZmlsZS5jcHA6IFJlbW92ZWQuCisgICAgICAgICogdG9vbHMvQ29kZVBy
b2ZpbGUuaDogUmVtb3ZlZC4KKyAgICAgICAgKiB0b29scy9Db2RlUHJvZmlsaW5nLmNwcDogUmVt
b3ZlZC4KKyAgICAgICAgKiB0b29scy9Db2RlUHJvZmlsaW5nLmg6IFJlbW92ZWQuCisgICAgICAg
ICogd2FzbS9XYXNtQkJRUGxhbi5jcHA6CisgICAgICAgIChKU0M6Oldhc206OkJCUVBsYW46Ondv
cmspOgorICAgICAgICAqIHdhc20vV2FzbU9NR0Zvck9TUkVudHJ5UGxhbi5jcHA6CisgICAgICAg
IChKU0M6Oldhc206Ok9NR0Zvck9TUkVudHJ5UGxhbjo6d29yayk6CisgICAgICAgICogd2FzbS9X
YXNtT01HUGxhbi5jcHA6CisgICAgICAgIChKU0M6Oldhc206Ok9NR1BsYW46OndvcmspOgorCiAy
MDIwLTAzLTEyICBZdXN1a2UgU3V6dWtpICA8eXN1enVraUBhcHBsZS5jb20+CiAKICAgICAgICAg
W0pTQ10gVXNlIENhY2hlYWJsZUlkZW50aWZpZXIgaW4gQnlWYWxJbmZvCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvU291cmNlcy50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL1NvdXJjZXMudHh0CShyZXZpc2lvbiAyNTgzNTApCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvU291cmNlcy50eHQJKHdvcmtpbmcgY29weSkKQEAgLTk5NSw4ICs5OTUsNiBAQCBydW50
aW1lL1dpZGVuaW5nTnVtYmVyUHJlZGljdGlvbkZ1enplckFnCiBKU0NCdWlsdGlucy5jcHAKIAog
dG9vbHMvQ2VsbExpc3QuY3BwCi10b29scy9Db2RlUHJvZmlsZS5jcHAKLXRvb2xzL0NvZGVQcm9m
aWxpbmcuY3BwCiB0b29scy9Db21waWxlclRpbWluZ1Njb3BlLmNwcAogdG9vbHMvRnVuY3Rpb25P
dmVycmlkZXMuY3BwCiB0b29scy9GdW5jdGlvbldoaXRlbGlzdC5jcHAKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXBy
b2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAyNTgzNTApCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29ya2luZyBj
b3B5KQpAQCAtNDA3MSw4ICs0MDcxLDYgQEAKIAkJODYwMTYxRTAwRjNBODNDMTAwRjg0NzEwIC8q
IE1hY3JvQXNzZW1ibGVyWDg2LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE1h
Y3JvQXNzZW1ibGVyWDg2Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTg2MDE2MUUx
MEYzQTgzQzEwMEY4NDcxMCAvKiBNYWNyb0Fzc2VtYmxlclg4Nl82NC5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBNYWNyb0Fzc2VtYmxlclg4Nl82NC5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQk4NjAxNjFFMjBGM0E4M0MxMDBGODQ3MTAgLyogTWFjcm9Bc3NlbWJs
ZXJYODZDb21tb24uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTWFjcm9Bc3Nl
bWJsZXJYODZDb21tb24uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJODYwM0NFRjIx
NEM3NTQ2NDAwQUU1OUUzIC8qIENvZGVQcm9maWxpbmcuY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBwYXRoID0gQ29kZVByb2ZpbGluZy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07Ci0JCTg2MDNDRUYzMTRDNzU0NjQwMEFFNTlFMyAvKiBDb2RlUHJvZmlsaW5nLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENvZGVQcm9maWxpbmcuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJODYwNEY0RjIxNDNBNkM0NDAwQjI5NUY1IC8qIENoYW5nZUxv
ZyAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQ7
IGxpbmVFbmRpbmcgPSAwOyBwYXRoID0gQ2hhbmdlTG9nOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQk4NjA2RERFOTE4REE0NEFCMDBBMzgzRDAgLyogSWRlbnRpZmllcklubGluZXMuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSWRlbnRpZmllcklubGluZXMuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJODYxMkU0Q0IxNTIyOTE4NDAwQzgzNkJFIC8qIE1h
dGNoUmVzdWx0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE1hdGNoUmVzdWx0
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC00MTE4LDggKzQxMTYsNiBAQAogCQk4
NkFERDE0MzBGRERFQTk4MDAwNkZGQ0MgLyogQVJNdjdSZWdpc3RlcnMuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gQVJNdjdSZWdpc3RlcnMuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJODZBREQxNDQwRkRERUE5ODAwMDZFRUMyIC8qIE1hY3JvQXNzZW1ibGVyQVJN
djcuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTWFjcm9Bc3NlbWJsZXJBUk12
Ny5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk4NkI1ODIyQzE0RDIyRjVGMDBBOUMz
MDYgLyogUHJvZmlsZVRyZWVOb2RlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IFByb2ZpbGVUcmVlTm9kZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk4NkI1ODIy
RTE0RDIzNzNCMDBBOUMzMDYgLyogQ29kZVByb2ZpbGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBwYXRoID0gQ29kZVByb2ZpbGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwotCQk4NkI1ODIyRjE0RDIzNzNCMDBBOUMzMDYgLyogQ29kZVByb2ZpbGUuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ29kZVByb2ZpbGUuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJODZCNTgyNkExNEQzNUQ1MTAwQTlDMzA2IC8qIFRpZXJlZE1NYXBBcnJh
eS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBUaWVyZWRNTWFwQXJyYXkuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJODZCRjY0MkExNDhEQjJCNTAwNERFMzZBIC8q
IEludHJpbnNpYy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJbnRyaW5zaWMu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJODZDMzZFRTkwRUUxMjg5RDAwQjNERjU5
IC8qIE1hY3JvQXNzZW1ibGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE1h
Y3JvQXNzZW1ibGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC03Njc3LDEwICs3
NjczLDYgQEAKIAkJCQlGRTFCRDAxQjFFNzIwMDIxMDAxMzRCQzkgLyogQ2VsbExpc3QuY3BwICov
LAogCQkJCUZFMUJEMDFDMUU3MjAwMjEwMDEzNEJDOSAvKiBDZWxsTGlzdC5oICovLAogCQkJCUZF
MUJEMDIwMUU3MjAyNzAwMDEzNEJDOSAvKiBDZWxsUHJvZmlsZS5oICovLAotCQkJCTg2QjU4MjJF
MTREMjM3M0IwMEE5QzMwNiAvKiBDb2RlUHJvZmlsZS5jcHAgKi8sCi0JCQkJODZCNTgyMkYxNEQy
MzczQjAwQTlDMzA2IC8qIENvZGVQcm9maWxlLmggKi8sCi0JCQkJODYwM0NFRjIxNEM3NTQ2NDAw
QUU1OUUzIC8qIENvZGVQcm9maWxpbmcuY3BwICovLAotCQkJCTg2MDNDRUYzMTRDNzU0NjQwMEFF
NTlFMyAvKiBDb2RlUHJvZmlsaW5nLmggKi8sCiAJCQkJMEY0RjExRTcyMDlCQ0RBMTAwNzA5NjU0
IC8qIENvbXBpbGVyVGltaW5nU2NvcGUuY3BwICovLAogCQkJCTBGNEYxMUU2MjA5QkNEQTEwMDcw
OTY1NCAvKiBDb21waWxlclRpbWluZ1Njb3BlLmggKi8sCiAJCQkJRkU0QkZGMjkxQUQ0NzZFNzAw
MDg4Rjg3IC8qIEZ1bmN0aW9uT3ZlcnJpZGVzLmNwcCAqLywKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9hc3NlbWJsZXIvQVJNNjRBc3NlbWJsZXIuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL0FSTTY0QXNzZW1ibGVyLmgJKHJldmlzaW9uIDI1ODM1
MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvQVJNNjRBc3NlbWJsZXIuaAko
d29ya2luZyBjb3B5KQpAQCAtNzgzLDEyICs3ODMsOSBAQCBwdWJsaWM6CiAgICAgICAgIGluc24o
ZGF0YVByb2Nlc3NpbmcyU291cmNlKERBVEFTSVpFLCBybSwgRGF0YU9wX0FTUlYsIHJuLCByZCkp
OwogICAgIH0KIAotICAgIEFMV0FZU19JTkxJTkUgdm9pZCBiKGludDMyX3Qgb2Zmc2V0ID0gMCkK
KyAgICBBTFdBWVNfSU5MSU5FIHZvaWQgYigpCiAgICAgewotICAgICAgICBBU1NFUlQoIShvZmZz
ZXQgJiAzKSk7Ci0gICAgICAgIG9mZnNldCA+Pj0gMjsKLSAgICAgICAgQVNTRVJUKG9mZnNldCA9
PSAob2Zmc2V0IDw8IDYpID4+IDYpOwotICAgICAgICBpbnNuKHVuY29uZGl0aW9uYWxCcmFuY2hJ
bW1lZGlhdGUoZmFsc2UsIG9mZnNldCkpOworICAgICAgICBpbnNuKHVuY29uZGl0aW9uYWxCcmFu
Y2hJbW1lZGlhdGUoZmFsc2UsIDApKTsKICAgICB9CiAKICAgICBBTFdBWVNfSU5MSU5FIHZvaWQg
Yl9jb25kKENvbmRpdGlvbiBjb25kLCBpbnQzMl90IG9mZnNldCA9IDApCkBAIC04MzEsMTEgKzgy
OCw5IEBAIHB1YmxpYzoKICAgICAgICAgaW5zbihsb2dpY2FsU2hpZnRlZFJlZ2lzdGVyKERBVEFT
SVpFLCBzZXRGbGFncyA/IExvZ2ljYWxPcF9BTkRTIDogTG9naWNhbE9wX0FORCwgc2hpZnQsIHRy
dWUsIHJtLCBhbW91bnQsIHJuLCByZCkpOwogICAgIH0KIAotICAgIEFMV0FZU19JTkxJTkUgdm9p
ZCBibChpbnQzMl90IG9mZnNldCA9IDApCisgICAgQUxXQVlTX0lOTElORSB2b2lkIGJsKCkKICAg
ICB7Ci0gICAgICAgIEFTU0VSVCghKG9mZnNldCAmIDMpKTsKLSAgICAgICAgb2Zmc2V0ID4+PSAy
OwotICAgICAgICBpbnNuKHVuY29uZGl0aW9uYWxCcmFuY2hJbW1lZGlhdGUodHJ1ZSwgb2Zmc2V0
KSk7CisgICAgICAgIGluc24odW5jb25kaXRpb25hbEJyYW5jaEltbWVkaWF0ZSh0cnVlLCAwKSk7
CiAgICAgfQogCiAgICAgQUxXQVlTX0lOTElORSB2b2lkIGJscihSZWdpc3RlcklEIHJuKQpAQCAt
MjU4Miw2ICsyNTc3LDEzIEBAIHB1YmxpYzoKICAgICB7CiAgICAgICAgIGludHB0cl90IG9mZnNl
dCA9IChyZWludGVycHJldF9jYXN0PGludHB0cl90Pih0bykgLSByZWludGVycHJldF9jYXN0PGlu
dHB0cl90Pih3aGVyZSkpID4+IDI7CiAgICAgICAgIEFTU0VSVChzdGF0aWNfY2FzdDxpbnQ+KG9m
ZnNldCkgPT0gb2Zmc2V0KTsKKworICAgICAgICBpZiAoIWlzSW50PDI2PihvZmZzZXQpKSB7Cisg
ICAgICAgICAgICB0byA9IEV4ZWN1dGFibGVBbGxvY2F0b3I6OnNpbmdsZXRvbigpLmdldEp1bXBJ
c2xhbmRUbyh3aGVyZSwgdG8pOworICAgICAgICAgICAgb2Zmc2V0ID0gKGJpdHdpc2VfY2FzdDxp
bnRwdHJfdD4odG8pIC0gYml0d2lzZV9jYXN0PGludHB0cl90Pih3aGVyZSkpID4+IDI7CisgICAg
ICAgICAgICBSRUxFQVNFX0FTU0VSVChpc0ludDwyNj4ob2Zmc2V0KSk7CisgICAgICAgIH0KKwog
ICAgICAgICBpbnQgaW5zbiA9IHVuY29uZGl0aW9uYWxCcmFuY2hJbW1lZGlhdGUoZmFsc2UsIHN0
YXRpY19jYXN0PGludD4ob2Zmc2V0KSk7CiAgICAgICAgIFJFTEVBU0VfQVNTRVJUKHJvdW5kVXBU
b011bHRpcGxlT2Y8aW5zdHJ1Y3Rpb25TaXplPih3aGVyZSkgPT0gd2hlcmUpOwogICAgICAgICBw
ZXJmb3JtSklUTWVtY3B5KHdoZXJlLCAmaW5zbiwgc2l6ZW9mKGludCkpOwpAQCAtMjc3MSw2ICsy
NzczLDI1IEBAIHB1YmxpYzoKICAgICAgICAgcmVsaW5rSnVtcE9yQ2FsbDxCcmFuY2hUeXBlX0NB
TEw+KHJlaW50ZXJwcmV0X2Nhc3Q8aW50Kj4oZnJvbSkgLSAxLCByZWludGVycHJldF9jYXN0PGNv
bnN0IGludCo+KGZyb20pIC0gMSwgdG8pOwogICAgICAgICBjYWNoZUZsdXNoKHJlaW50ZXJwcmV0
X2Nhc3Q8aW50Kj4oZnJvbSkgLSAxLCBzaXplb2YoaW50KSk7CiAgICAgfQorCisjaWYgVVNFKEpV
TVBfSVNMQU5EUykKKyAgICBzdGF0aWMgdm9pZCogcHJlcGFyZUZvckF0b21pY1JlbGlua0p1bXBD
b25jdXJyZW50bHkodm9pZCogZnJvbSwgdm9pZCogdG8pCisgICAgeworICAgICAgICBpbnRwdHJf
dCBvZmZzZXQgPSAoYml0d2lzZV9jYXN0PGludHB0cl90Pih0bykgLSBiaXR3aXNlX2Nhc3Q8aW50
cHRyX3Q+KGZyb20pKSA+PiAyOworICAgICAgICBBU1NFUlQoc3RhdGljX2Nhc3Q8aW50PihvZmZz
ZXQpID09IG9mZnNldCk7CisKKyAgICAgICAgaWYgKGlzSW50PDI2PihvZmZzZXQpKQorICAgICAg
ICAgICAgcmV0dXJuIHRvOworCisgICAgICAgIHJldHVybiBFeGVjdXRhYmxlQWxsb2NhdG9yOjpz
aW5nbGV0b24oKS5nZXRKdW1wSXNsYW5kVG9Db25jdXJyZW50bHkoZnJvbSwgdG8pOworICAgIH0K
KworICAgIHN0YXRpYyB2b2lkKiBwcmVwYXJlRm9yQXRvbWljUmVsaW5rQ2FsbENvbmN1cnJlbnRs
eSh2b2lkKiBmcm9tLCB2b2lkKiB0bykKKyAgICB7CisgICAgICAgIGZyb20gPSBzdGF0aWNfY2Fz
dDx2b2lkKj4oYml0d2lzZV9jYXN0PGludCo+KGZyb20pIC0gMSk7CisgICAgICAgIHJldHVybiBw
cmVwYXJlRm9yQXRvbWljUmVsaW5rSnVtcENvbmN1cnJlbnRseShmcm9tLCB0byk7CisgICAgfQor
I2VuZGlmCiAgICAgCiAgICAgc3RhdGljIHZvaWQgcmVwYXRjaENvbXBhY3Qodm9pZCogd2hlcmUs
IGludDMyX3QgdmFsdWUpCiAgICAgewpAQCAtMjg3Miw3ICsyODkzLDcgQEAgcHVibGljOgogICAg
ICAgICAgICAgICAgIHJldHVybiBMaW5rSnVtcENvbmRpdGlvbkRpcmVjdDsKIAogICAgICAgICAg
ICAgcmV0dXJuIExpbmtKdW1wQ29uZGl0aW9uOwotICAgICAgICAgICAgfQorICAgICAgICB9CiAg
ICAgICAgIGNhc2UgSnVtcENvbXBhcmVBbmRCcmFuY2g6ICB7CiAgICAgICAgICAgICBBU1NFUlQo
aXM0Qnl0ZUFsaWduZWQoZnJvbSkpOwogICAgICAgICAgICAgQVNTRVJUKGlzNEJ5dGVBbGlnbmVk
KHRvKSk7CkBAIC0yOTQ1LDYgKzI5NjYsMTIgQEAgcHVibGljOgogICAgICAgICB9CiAgICAgfQog
CisgICAgc3RhdGljIEFMV0FZU19JTkxJTkUgYm9vbCBjYW5FbWl0SnVtcCh2b2lkKiBmcm9tLCB2
b2lkKiB0bykKKyAgICB7CisgICAgICAgIGludHB0cl90IGRpZmYgPSAoYml0d2lzZV9jYXN0PGlu
dHB0cl90Pihmcm9tKSAtIGJpdHdpc2VfY2FzdDxpbnRwdHJfdD4odG8pKSA+PiAyOworICAgICAg
ICByZXR1cm4gaXNJbnQ8MjY+KGRpZmYpOworICAgIH0KKwogcHJvdGVjdGVkOgogICAgIHRlbXBs
YXRlPERhdGFzaXplIHNpemU+CiAgICAgc3RhdGljIGJvb2wgY2hlY2tNb3ZrKGludCBpbnNuLCBp
bnQgX2h3LCBSZWdpc3RlcklEIF9yZCkKQEAgLTI5OTQsOSArMzAyMSwxNSBAQCBwcm90ZWN0ZWQ6
CiAgICAgICAgIEFTU0VSVCghKHJlaW50ZXJwcmV0X2Nhc3Q8aW50cHRyX3Q+KHRvKSAmIDMpKTsK
ICAgICAgICAgYXNzZXJ0SXNOb3RUYWdnZWQodG8pOwogICAgICAgICBhc3NlcnRJc05vdFRhZ2dl
ZChmcm9tSW5zdHJ1Y3Rpb24pOwotICAgICAgICBpbnRwdHJfdCBvZmZzZXQgPSAocmVpbnRlcnBy
ZXRfY2FzdDxpbnRwdHJfdD4odG8pIC0gcmVpbnRlcnByZXRfY2FzdDxpbnRwdHJfdD4oZnJvbUlu
c3RydWN0aW9uKSkgPj4gMjsKKyAgICAgICAgaW50cHRyX3Qgb2Zmc2V0ID0gKGJpdHdpc2VfY2Fz
dDxpbnRwdHJfdD4odG8pIC0gYml0d2lzZV9jYXN0PGludHB0cl90Pihmcm9tSW5zdHJ1Y3Rpb24p
KSA+PiAyOwogICAgICAgICBBU1NFUlQoc3RhdGljX2Nhc3Q8aW50PihvZmZzZXQpID09IG9mZnNl
dCk7CiAKKyAgICAgICAgaWYgKCFpc0ludDwyNj4ob2Zmc2V0KSkgeworICAgICAgICAgICAgdG8g
PSBFeGVjdXRhYmxlQWxsb2NhdG9yOjpzaW5nbGV0b24oKS5nZXRKdW1wSXNsYW5kVG8oYml0d2lz
ZV9jYXN0PHZvaWQqPihmcm9tSW5zdHJ1Y3Rpb24pLCB0byk7CisgICAgICAgICAgICBvZmZzZXQg
PSAoYml0d2lzZV9jYXN0PGludHB0cl90Pih0bykgLSBiaXR3aXNlX2Nhc3Q8aW50cHRyX3Q+KGZy
b21JbnN0cnVjdGlvbikpID4+IDI7CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChpc0ludDwy
Nj4ob2Zmc2V0KSk7CisgICAgICAgIH0KKwogICAgICAgICBpbnQgaW5zbiA9IHVuY29uZGl0aW9u
YWxCcmFuY2hJbW1lZGlhdGUoaXNDYWxsLCBzdGF0aWNfY2FzdDxpbnQ+KG9mZnNldCkpOwogICAg
ICAgICBSRUxFQVNFX0FTU0VSVChyb3VuZFVwVG9NdWx0aXBsZU9mPGluc3RydWN0aW9uU2l6ZT4o
ZnJvbSkgPT0gZnJvbSk7CiAgICAgICAgIGNvcHkoZnJvbSwgJmluc24sIHNpemVvZihpbnQpKTsK
QEAgLTMwMDgsMTIgKzMwNDEsMTIgQEAgcHJvdGVjdGVkOgogICAgICAgICBBU1NFUlQoIShyZWlu
dGVycHJldF9jYXN0PGludHB0cl90Pihmcm9tKSAmIDMpKTsKICAgICAgICAgQVNTRVJUKCEocmVp
bnRlcnByZXRfY2FzdDxpbnRwdHJfdD4odG8pICYgMykpOwogICAgICAgICBpbnRwdHJfdCBvZmZz
ZXQgPSAocmVpbnRlcnByZXRfY2FzdDxpbnRwdHJfdD4odG8pIC0gcmVpbnRlcnByZXRfY2FzdDxp
bnRwdHJfdD4oZnJvbUluc3RydWN0aW9uKSkgPj4gMjsKLSAgICAgICAgQVNTRVJUKGlzSW50PDI2
PihvZmZzZXQpKTsKIAogICAgICAgICBib29sIHVzZURpcmVjdCA9IGlzSW50PDE5PihvZmZzZXQp
OwogICAgICAgICBBU1NFUlQodHlwZSA9PSBJbmRpcmVjdEJyYW5jaCB8fCB1c2VEaXJlY3QpOwog
CiAgICAgICAgIGlmICh1c2VEaXJlY3QgfHwgdHlwZSA9PSBEaXJlY3RCcmFuY2gpIHsKKyAgICAg
ICAgICAgIEFTU0VSVChpc0ludDwxOT4ob2Zmc2V0KSk7CiAgICAgICAgICAgICBpbnQgaW5zbiA9
IGNvbXBhcmVBbmRCcmFuY2hJbW1lZGlhdGUoaXM2NEJpdCA/IERhdGFzaXplXzY0IDogRGF0YXNp
emVfMzIsIGNvbmRpdGlvbiA9PSBDb25kaXRpb25ORSwgc3RhdGljX2Nhc3Q8aW50PihvZmZzZXQp
LCBydCk7CiAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChyb3VuZFVwVG9NdWx0aXBsZU9mPGlu
c3RydWN0aW9uU2l6ZT4oZnJvbSkgPT0gZnJvbSk7CiAgICAgICAgICAgICBjb3B5KGZyb20sICZp
bnNuLCBzaXplb2YoaW50KSk7CkBAIC0zMDM2LDEyICszMDY5LDEyIEBAIHByb3RlY3RlZDoKICAg
ICAgICAgQVNTRVJUKCEocmVpbnRlcnByZXRfY2FzdDxpbnRwdHJfdD4oZnJvbSkgJiAzKSk7CiAg
ICAgICAgIEFTU0VSVCghKHJlaW50ZXJwcmV0X2Nhc3Q8aW50cHRyX3Q+KHRvKSAmIDMpKTsKICAg
ICAgICAgaW50cHRyX3Qgb2Zmc2V0ID0gKHJlaW50ZXJwcmV0X2Nhc3Q8aW50cHRyX3Q+KHRvKSAt
IHJlaW50ZXJwcmV0X2Nhc3Q8aW50cHRyX3Q+KGZyb21JbnN0cnVjdGlvbikpID4+IDI7Ci0gICAg
ICAgIEFTU0VSVChpc0ludDwyNj4ob2Zmc2V0KSk7CiAKICAgICAgICAgYm9vbCB1c2VEaXJlY3Qg
PSBpc0ludDwxOT4ob2Zmc2V0KTsKICAgICAgICAgQVNTRVJUKHR5cGUgPT0gSW5kaXJlY3RCcmFu
Y2ggfHwgdXNlRGlyZWN0KTsKIAogICAgICAgICBpZiAodXNlRGlyZWN0IHx8IHR5cGUgPT0gRGly
ZWN0QnJhbmNoKSB7CisgICAgICAgICAgICBBU1NFUlQoaXNJbnQ8MTk+KG9mZnNldCkpOwogICAg
ICAgICAgICAgaW50IGluc24gPSBjb25kaXRpb25hbEJyYW5jaEltbWVkaWF0ZShzdGF0aWNfY2Fz
dDxpbnQ+KG9mZnNldCksIGNvbmRpdGlvbik7CiAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChy
b3VuZFVwVG9NdWx0aXBsZU9mPGluc3RydWN0aW9uU2l6ZT4oZnJvbSkgPT0gZnJvbSk7CiAgICAg
ICAgICAgICBjb3B5KGZyb20sICZpbnNuLCBzaXplb2YoaW50KSk7CkBAIC0zMDY1LDEyICszMDk4
LDEyIEBAIHByb3RlY3RlZDoKICAgICAgICAgQVNTRVJUKCEocmVpbnRlcnByZXRfY2FzdDxpbnRw
dHJfdD4odG8pICYgMykpOwogICAgICAgICBpbnRwdHJfdCBvZmZzZXQgPSAocmVpbnRlcnByZXRf
Y2FzdDxpbnRwdHJfdD4odG8pIC0gcmVpbnRlcnByZXRfY2FzdDxpbnRwdHJfdD4oZnJvbUluc3Ry
dWN0aW9uKSkgPj4gMjsKICAgICAgICAgQVNTRVJUKHN0YXRpY19jYXN0PGludD4ob2Zmc2V0KSA9
PSBvZmZzZXQpOwotICAgICAgICBBU1NFUlQoaXNJbnQ8MjY+KG9mZnNldCkpOwogCiAgICAgICAg
IGJvb2wgdXNlRGlyZWN0ID0gaXNJbnQ8MTQ+KG9mZnNldCk7CiAgICAgICAgIEFTU0VSVCh0eXBl
ID09IEluZGlyZWN0QnJhbmNoIHx8IHVzZURpcmVjdCk7CiAKICAgICAgICAgaWYgKHVzZURpcmVj
dCB8fCB0eXBlID09IERpcmVjdEJyYW5jaCkgeworICAgICAgICAgICAgQVNTRVJUKGlzSW50PDE0
PihvZmZzZXQpKTsKICAgICAgICAgICAgIGludCBpbnNuID0gdGVzdEFuZEJyYW5jaEltbWVkaWF0
ZShjb25kaXRpb24gPT0gQ29uZGl0aW9uTkUsIHN0YXRpY19jYXN0PGludD4oYml0TnVtYmVyKSwg
c3RhdGljX2Nhc3Q8aW50PihvZmZzZXQpLCBydCk7CiAgICAgICAgICAgICBSRUxFQVNFX0FTU0VS
VChyb3VuZFVwVG9NdWx0aXBsZU9mPGluc3RydWN0aW9uU2l6ZT4oZnJvbSkgPT0gZnJvbSk7CiAg
ICAgICAgICAgICBjb3B5KGZyb20sICZpbnNuLCBzaXplb2YoaW50KSk7CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL0Fic3RyYWN0TWFjcm9Bc3NlbWJsZXIuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL0Fic3RyYWN0TWFjcm9Bc3Nl
bWJsZXIuaAkocmV2aXNpb24gMjU4MzUwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2Vt
Ymxlci9BYnN0cmFjdE1hY3JvQXNzZW1ibGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTkxOSw2ICs5
MTksMjIgQEAgcHVibGljOgogICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwog
ICAgIH0KIAorICAgIHRlbXBsYXRlPFB0clRhZyBjYWxsVGFnLCBQdHJUYWcgZGVzdFRhZz4KKyAg
ICBzdGF0aWMgQ29kZUxvY2F0aW9uTGFiZWw8ZGVzdFRhZz4gcHJlcGFyZUZvckF0b21pY1JlcGF0
Y2hOZWFyQ2FsbENvbmN1cnJlbnRseShDb2RlTG9jYXRpb25OZWFyQ2FsbDxjYWxsVGFnPiBuZWFy
Q2FsbCwgQ29kZUxvY2F0aW9uTGFiZWw8ZGVzdFRhZz4gZGVzdGluYXRpb24pCisgICAgeworI2lm
IFVTRShKVU1QX0lTTEFORFMpCisgICAgICAgIHN3aXRjaCAobmVhckNhbGwuY2FsbE1vZGUoKSkg
eworICAgICAgICBjYXNlIE5lYXJDYWxsTW9kZTo6VGFpbDoKKyAgICAgICAgICAgIHJldHVybiBD
b2RlTG9jYXRpb25MYWJlbDxkZXN0VGFnPih0YWdDb2RlUHRyPGRlc3RUYWc+KEFzc2VtYmxlclR5
cGU6OnByZXBhcmVGb3JBdG9taWNSZWxpbmtKdW1wQ29uY3VycmVudGx5KG5lYXJDYWxsLmRhdGFM
b2NhdGlvbigpLCBkZXN0aW5hdGlvbi5kYXRhTG9jYXRpb24oKSkpKTsKKyAgICAgICAgY2FzZSBO
ZWFyQ2FsbE1vZGU6OlJlZ3VsYXI6CisgICAgICAgICAgICByZXR1cm4gQ29kZUxvY2F0aW9uTGFi
ZWw8ZGVzdFRhZz4odGFnQ29kZVB0cjxkZXN0VGFnPihBc3NlbWJsZXJUeXBlOjpwcmVwYXJlRm9y
QXRvbWljUmVsaW5rQ2FsbENvbmN1cnJlbnRseShuZWFyQ2FsbC5kYXRhTG9jYXRpb24oKSwgZGVz
dGluYXRpb24udW50YWdnZWRFeGVjdXRhYmxlQWRkcmVzcygpKSkpOworICAgICAgICB9CisjZWxz
ZQorICAgICAgICBVTlVTRURfUEFSQU0obmVhckNhbGwpOworICAgICAgICByZXR1cm4gZGVzdGlu
YXRpb247CisjZW5kaWYKKyAgICB9CisKICAgICB0ZW1wbGF0ZTxQdHJUYWcgdGFnPgogICAgIHN0
YXRpYyB2b2lkIHJlcGF0Y2hDb21wYWN0KENvZGVMb2NhdGlvbkRhdGFMYWJlbENvbXBhY3Q8dGFn
PiBkYXRhTGFiZWxDb21wYWN0LCBpbnQzMl90IHZhbHVlKQogICAgIHsKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTGlua0J1ZmZlci5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9MaW5rQnVmZmVyLmNwcAkocmV2aXNpb24gMjU4
MzUwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9MaW5rQnVmZmVyLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMTMxLDkgKzEzMSw5IEBAIHN0YXRpYyBBTFdBWVNfSU5MSU5FIHZv
aWQgcmVjb3JkTGlua09mZnMKIH0KIAogdGVtcGxhdGUgPHR5cGVuYW1lIEluc3RydWN0aW9uVHlw
ZT4KLXZvaWQgTGlua0J1ZmZlcjo6Y29weUNvbXBhY3RBbmRMaW5rQ29kZShNYWNyb0Fzc2VtYmxl
ciYgbWFjcm9Bc3NlbWJsZXIsIHZvaWQqIG93bmVyVUlELCBKSVRDb21waWxhdGlvbkVmZm9ydCBl
ZmZvcnQpCit2b2lkIExpbmtCdWZmZXI6OmNvcHlDb21wYWN0QW5kTGlua0NvZGUoTWFjcm9Bc3Nl
bWJsZXImIG1hY3JvQXNzZW1ibGVyLCBKSVRDb21waWxhdGlvbkVmZm9ydCBlZmZvcnQpCiB7Ci0g
ICAgYWxsb2NhdGUobWFjcm9Bc3NlbWJsZXIsIG93bmVyVUlELCBlZmZvcnQpOworICAgIGFsbG9j
YXRlKG1hY3JvQXNzZW1ibGVyLCBlZmZvcnQpOwogICAgIGNvbnN0IHNpemVfdCBpbml0aWFsU2l6
ZSA9IG1hY3JvQXNzZW1ibGVyLm1fYXNzZW1ibGVyLmNvZGVTaXplKCk7CiAgICAgaWYgKGRpZEZh
aWxUb0FsbG9jYXRlKCkpCiAgICAgICAgIHJldHVybjsKQEAgLTI5NSw3ICsyOTUsNyBAQCB2b2lk
IExpbmtCdWZmZXI6OmNvcHlDb21wYWN0QW5kTGlua0NvZGUoCiAjZW5kaWYgLy8gRU5BQkxFKEJS
QU5DSF9DT01QQUNUSU9OKQogCiAKLXZvaWQgTGlua0J1ZmZlcjo6bGlua0NvZGUoTWFjcm9Bc3Nl
bWJsZXImIG1hY3JvQXNzZW1ibGVyLCB2b2lkKiBvd25lclVJRCwgSklUQ29tcGlsYXRpb25FZmZv
cnQgZWZmb3J0KQordm9pZCBMaW5rQnVmZmVyOjpsaW5rQ29kZShNYWNyb0Fzc2VtYmxlciYgbWFj
cm9Bc3NlbWJsZXIsIEpJVENvbXBpbGF0aW9uRWZmb3J0IGVmZm9ydCkKIHsKICAgICAvLyBFbnN1
cmUgdGhhdCB0aGUgZW5kIG9mIHRoZSBsYXN0IGludmFsaWRhdGlvbiBwb2ludCBkb2VzIG5vdCBl
eHRlbmQgYmV5b25kIHRoZSBlbmQgb2YgdGhlIGJ1ZmZlci4KICAgICBtYWNyb0Fzc2VtYmxlci5s
YWJlbCgpOwpAQCAtMzA0LDcgKzMwNCw3IEBAIHZvaWQgTGlua0J1ZmZlcjo6bGlua0NvZGUoTWFj
cm9Bc3NlbWJsZXIKICNpZiBkZWZpbmVkKEFTU0VNQkxFUl9IQVNfQ09OU1RBTlRfUE9PTCkgJiYg
QVNTRU1CTEVSX0hBU19DT05TVEFOVF9QT09MCiAgICAgbWFjcm9Bc3NlbWJsZXIubV9hc3NlbWJs
ZXIuYnVmZmVyKCkuZmx1c2hDb25zdGFudFBvb2woZmFsc2UpOwogI2VuZGlmCi0gICAgYWxsb2Nh
dGUobWFjcm9Bc3NlbWJsZXIsIG93bmVyVUlELCBlZmZvcnQpOworICAgIGFsbG9jYXRlKG1hY3Jv
QXNzZW1ibGVyLCBlZmZvcnQpOwogICAgIGlmICghbV9kaWRBbGxvY2F0ZSkKICAgICAgICAgcmV0
dXJuOwogICAgIEFTU0VSVChtX2NvZGUpOwpAQCAtMzE4LDE1ICszMTgsMTUgQEAgdm9pZCBMaW5r
QnVmZmVyOjpsaW5rQ29kZShNYWNyb0Fzc2VtYmxlcgogICAgIG1hY3JvQXNzZW1ibGVyLm1fYXNz
ZW1ibGVyLnJlbG9jYXRlSnVtcHMoYnVmZmVyLmRhdGEoKSwgY29kZSk7CiAjZW5kaWYKICNlbGlm
IENQVShBUk1fVEhVTUIyKQotICAgIGNvcHlDb21wYWN0QW5kTGlua0NvZGU8dWludDE2X3Q+KG1h
Y3JvQXNzZW1ibGVyLCBvd25lclVJRCwgZWZmb3J0KTsKKyAgICBjb3B5Q29tcGFjdEFuZExpbmtD
b2RlPHVpbnQxNl90PihtYWNyb0Fzc2VtYmxlciwgZWZmb3J0KTsKICNlbGlmIENQVShBUk02NCkK
LSAgICBjb3B5Q29tcGFjdEFuZExpbmtDb2RlPHVpbnQzMl90PihtYWNyb0Fzc2VtYmxlciwgb3du
ZXJVSUQsIGVmZm9ydCk7CisgICAgY29weUNvbXBhY3RBbmRMaW5rQ29kZTx1aW50MzJfdD4obWFj
cm9Bc3NlbWJsZXIsIGVmZm9ydCk7CiAjZW5kaWYgLy8gIUVOQUJMRShCUkFOQ0hfQ09NUEFDVElP
TikKIAogICAgIG1fbGlua1Rhc2tzID0gV1RGTW92ZShtYWNyb0Fzc2VtYmxlci5tX2xpbmtUYXNr
cyk7CiB9CiAKLXZvaWQgTGlua0J1ZmZlcjo6YWxsb2NhdGUoTWFjcm9Bc3NlbWJsZXImIG1hY3Jv
QXNzZW1ibGVyLCB2b2lkKiBvd25lclVJRCwgSklUQ29tcGlsYXRpb25FZmZvcnQgZWZmb3J0KQor
dm9pZCBMaW5rQnVmZmVyOjphbGxvY2F0ZShNYWNyb0Fzc2VtYmxlciYgbWFjcm9Bc3NlbWJsZXIs
IEpJVENvbXBpbGF0aW9uRWZmb3J0IGVmZm9ydCkKIHsKICAgICBzaXplX3QgaW5pdGlhbFNpemUg
PSBtYWNyb0Fzc2VtYmxlci5tX2Fzc2VtYmxlci5jb2RlU2l6ZSgpOwogICAgIGlmIChtX2NvZGUp
IHsKQEAgLTM0NCw3ICszNDQsNyBAQCB2b2lkIExpbmtCdWZmZXI6OmFsbG9jYXRlKE1hY3JvQXNz
ZW1ibGVyCiAgICAgICAgIGluaXRpYWxTaXplID0gbWFjcm9Bc3NlbWJsZXIubV9hc3NlbWJsZXIu
Y29kZVNpemUoKTsKICAgICB9CiAKLSAgICBtX2V4ZWN1dGFibGVNZW1vcnkgPSBFeGVjdXRhYmxl
QWxsb2NhdG9yOjpzaW5nbGV0b24oKS5hbGxvY2F0ZShpbml0aWFsU2l6ZSwgb3duZXJVSUQsIGVm
Zm9ydCk7CisgICAgbV9leGVjdXRhYmxlTWVtb3J5ID0gRXhlY3V0YWJsZUFsbG9jYXRvcjo6c2lu
Z2xldG9uKCkuYWxsb2NhdGUoaW5pdGlhbFNpemUsIGVmZm9ydCk7CiAgICAgaWYgKCFtX2V4ZWN1
dGFibGVNZW1vcnkpCiAgICAgICAgIHJldHVybjsKICAgICBtX2NvZGUgPSBNYWNyb0Fzc2VtYmxl
ckNvZGVQdHI8TGlua0J1ZmZlclB0clRhZz4obV9leGVjdXRhYmxlTWVtb3J5LT5zdGFydCgpLnJl
dGFnZ2VkUHRyPExpbmtCdWZmZXJQdHJUYWc+KCkpOwpAQCAtMzU4LDcgKzM1OCw3IEBAIHZvaWQg
TGlua0J1ZmZlcjo6cGVyZm9ybUZpbmFsaXphdGlvbigpCiAgICAgICAgIHRhc2stPnJ1bigqdGhp
cyk7CiAKICNpZm5kZWYgTkRFQlVHCi0gICAgQVNTRVJUKCFpc0NvbXBpbGF0aW9uVGhyZWFkKCkp
OworICAgIEFTU0VSVChtX2lzSnVtcElzbGFuZCB8fCAhaXNDb21waWxhdGlvblRocmVhZCgpKTsK
ICAgICBBU1NFUlQoIW1fY29tcGxldGVkKTsKICAgICBBU1NFUlQoaXNWYWxpZCgpKTsKICAgICBt
X2NvbXBsZXRlZCA9IHRydWU7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVy
L0xpbmtCdWZmZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1i
bGVyL0xpbmtCdWZmZXIuaAkocmV2aXNpb24gMjU4MzUwKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2Fzc2VtYmxlci9MaW5rQnVmZmVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTkwLDcgKzkwLDgg
QEAgcHVibGljOgogICAgICAgICAsIG1fY29tcGxldGVkKGZhbHNlKQogI2VuZGlmCiAgICAgewot
ICAgICAgICBsaW5rQ29kZShtYWNyb0Fzc2VtYmxlciwgb3duZXJVSUQsIGVmZm9ydCk7CisgICAg
ICAgIFVOVVNFRF9QQVJBTShvd25lclVJRCk7CisgICAgICAgIGxpbmtDb2RlKG1hY3JvQXNzZW1i
bGVyLCBlZmZvcnQpOwogICAgIH0KIAogICAgIHRlbXBsYXRlPFB0clRhZyB0YWc+CkBAIC0xMDcs
NyArMTA4LDcgQEAgcHVibGljOgogI2Vsc2UKICAgICAgICAgVU5VU0VEX1BBUkFNKHNob3VsZFBl
cmZvcm1CcmFuY2hDb21wYWN0aW9uKTsKICNlbmRpZgotICAgICAgICBsaW5rQ29kZShtYWNyb0Fz
c2VtYmxlciwgMCwgZWZmb3J0KTsKKyAgICAgICAgbGlua0NvZGUobWFjcm9Bc3NlbWJsZXIsIGVm
Zm9ydCk7CiAgICAgfQogCiAgICAgfkxpbmtCdWZmZXIoKQpAQCAtMTIzLDYgKzEyNCwxMyBAQCBw
dWJsaWM6CiAgICAgewogICAgICAgICByZXR1cm4gIWRpZEZhaWxUb0FsbG9jYXRlKCk7CiAgICAg
fQorCisgICAgdm9pZCBzZXRJc0p1bXBJc2xhbmQoKQorICAgIHsKKyNpZiBBU1NFUlRfRU5BQkxF
RAorICAgICAgICBtX2lzSnVtcElzbGFuZCA9IHRydWU7CisjZW5kaWYKKyAgICB9CiAgICAgCiAg
ICAgLy8gVGhlc2UgbWV0aG9kcyBhcmUgdXNlZCB0byBsaW5rIG9yIHNldCB2YWx1ZXMgYXQgY29k
ZSBnZW5lcmF0aW9uIHRpbWUuCiAKQEAgLTMyMSwxMiArMzI5LDEyIEBAIHByaXZhdGU6CiAgICAg
ICAgIHJldHVybiBtX2NvZGUuZGF0YUxvY2F0aW9uKCk7CiAgICAgfQogICAgIAotICAgIHZvaWQg
YWxsb2NhdGUoTWFjcm9Bc3NlbWJsZXImLCB2b2lkKiBvd25lclVJRCwgSklUQ29tcGlsYXRpb25F
ZmZvcnQpOworICAgIHZvaWQgYWxsb2NhdGUoTWFjcm9Bc3NlbWJsZXImLCBKSVRDb21waWxhdGlv
bkVmZm9ydCk7CiAKLSAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lkIGxpbmtDb2RlKE1hY3JvQXNz
ZW1ibGVyJiwgdm9pZCogb3duZXJVSUQsIEpJVENvbXBpbGF0aW9uRWZmb3J0KTsKKyAgICBKU19F
WFBPUlRfUFJJVkFURSB2b2lkIGxpbmtDb2RlKE1hY3JvQXNzZW1ibGVyJiwgSklUQ29tcGlsYXRp
b25FZmZvcnQpOwogI2lmIEVOQUJMRShCUkFOQ0hfQ09NUEFDVElPTikKICAgICB0ZW1wbGF0ZSA8
dHlwZW5hbWUgSW5zdHJ1Y3Rpb25UeXBlPgotICAgIHZvaWQgY29weUNvbXBhY3RBbmRMaW5rQ29k
ZShNYWNyb0Fzc2VtYmxlciYsIHZvaWQqIG93bmVyVUlELCBKSVRDb21waWxhdGlvbkVmZm9ydCk7
CisgICAgdm9pZCBjb3B5Q29tcGFjdEFuZExpbmtDb2RlKE1hY3JvQXNzZW1ibGVyJiwgSklUQ29t
cGlsYXRpb25FZmZvcnQpOwogI2VuZGlmCiAKICAgICB2b2lkIHBlcmZvcm1GaW5hbGl6YXRpb24o
KTsKQEAgLTM0OSw2ICszNTcsOSBAQCBwcml2YXRlOgogI2lmbmRlZiBOREVCVUcKICAgICBib29s
IG1fY29tcGxldGVkOwogI2VuZGlmCisjaWYgQVNTRVJUX0VOQUJMRUQKKyAgICBib29sIG1faXNK
dW1wSXNsYW5kIHsgZmFsc2UgfTsKKyNlbmRpZgogICAgIGJvb2wgbV9hbHJlYWR5RGlzYXNzZW1i
bGVkIHsgZmFsc2UgfTsKICAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8TGlua0J1ZmZlclB0clRh
Zz4gbV9jb2RlOwogICAgIFZlY3RvcjxSZWZQdHI8U2hhcmVkVGFzazx2b2lkKExpbmtCdWZmZXIm
KT4+PiBtX2xpbmtUYXNrczsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIv
TWFjcm9Bc3NlbWJsZXJDb2RlUmVmLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlckNvZGVSZWYuaAkocmV2aXNpb24gMjU4MzUwKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlckNvZGVSZWYu
aAkod29ya2luZyBjb3B5KQpAQCAtNDM0LDcgKzQzNCw2IEBAIHB1YmxpYzoKICAgICAgICAgOiBt
X2NvZGVQdHIoZXhlY3V0YWJsZU1lbW9yeS0+c3RhcnQoKS5yZXRhZ2dlZFB0cjx0YWc+KCkpCiAg
ICAgICAgICwgbV9leGVjdXRhYmxlTWVtb3J5KFdURk1vdmUoZXhlY3V0YWJsZU1lbW9yeSkpCiAg
ICAgewotICAgICAgICBBU1NFUlQobV9leGVjdXRhYmxlTWVtb3J5LT5pc01hbmFnZWQoKSk7CiAg
ICAgICAgIEFTU0VSVChtX2V4ZWN1dGFibGVNZW1vcnktPnN0YXJ0KCkpOwogICAgICAgICBBU1NF
UlQobV9jb2RlUHRyKTsKICAgICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0V4
ZWN1dGFibGVBbGxvY2F0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvRXhlY3V0YWJsZUFsbG9jYXRvci5jcHAJKHJldmlzaW9uIDI1ODM1MCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvRXhlY3V0YWJsZUFsbG9jYXRvci5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTI4LDkgKzI4LDEwIEBACiAKICNpZiBFTkFCTEUoSklUKQogCi0jaW5jbHVkZSAiQ29k
ZVByb2ZpbGluZy5oIgogI2luY2x1ZGUgIkV4ZWN1dGFibGVBbGxvY2F0aW9uRnV6ei5oIgorI2lu
Y2x1ZGUgIkl0ZXJhdGlvblN0YXR1cy5oIgogI2luY2x1ZGUgIkpTQ0lubGluZXMuaCIKKyNpbmNs
dWRlIDx0eXBlX3RyYWl0cz4KICNpbmNsdWRlIDx3dGYvRmlsZVN5c3RlbS5oPgogI2luY2x1ZGUg
PHd0Zi9NZXRhQWxsb2NhdG9yLmg+CiAjaW5jbHVkZSA8d3RmL1BhZ2VSZXNlcnZhdGlvbi5oPgpA
QCAtOTYsOSArOTcsMjAgQEAgc3RhdGljIGNvbnN0ZXhwciBzaXplX3QgZml4ZWRFeGVjdXRhYmxl
TQogI2VsaWYgQ1BVKEFSTSkKIHN0YXRpYyBjb25zdGV4cHIgc2l6ZV90IGZpeGVkRXhlY3V0YWJs
ZU1lbW9yeVBvb2xTaXplID0gMTYgKiAxMDI0ICogMTAyNDsKICNlbGlmIENQVShBUk02NCkKKyNp
ZiBVU0UoSlVNUF9JU0xBTkRTKQorc3RhdGljIGNvbnN0ZXhwciBzaXplX3QgZml4ZWRFeGVjdXRh
YmxlTWVtb3J5UG9vbFNpemUgPSAxICogMTAyNCAqIDEwMjQgKiAxMDI0OworLy8gVGhlc2Ugc2l6
ZXMgZ3VhcmFudGVlIHRoYXQgYW55IGp1bXAgd2l0aGluIGFuIGlzbGFuZCBjYW4ganVtcCBmb3J3
YXJkcyBvciBiYWNrd2FyZHMKKy8vIHRvIHRoZSBhZGphY2VudCBpc2xhbmQgaW4gYSBzaW5nbGUg
aW5zdHJ1Y3Rpb24uCitzdGF0aWMgY29uc3RleHByIHNpemVfdCByZWdpb25TaXplID0gMTEyICog
MTAyNCAqIDEwMjQ7CitzdGF0aWMgY29uc3RleHByIHNpemVfdCBpc2xhbmRSZWdpb25TaXplID0g
MTYgKiAxMDI0ICogMTAyNDsKK3N0YXRpYyBjb25zdGV4cHIgc2l6ZV90IG51bWJlck9mUmVnaW9u
cyA9IGZpeGVkRXhlY3V0YWJsZU1lbW9yeVBvb2xTaXplIC8gcmVnaW9uU2l6ZTsKK3N0YXRpYyBj
b25zdGV4cHIgc2l6ZV90IGlzbGFuZFNpemVJbkJ5dGVzID0gNDsKK3N0YXRpYyBjb25zdGV4cHIg
c2l6ZV90IG1heElzbGFuZHNQZXJSZWdpb24gPSBpc2xhbmRSZWdpb25TaXplIC8gaXNsYW5kU2l6
ZUluQnl0ZXM7CisjZWxzZQogc3RhdGljIGNvbnN0ZXhwciBzaXplX3QgZml4ZWRFeGVjdXRhYmxl
TWVtb3J5UG9vbFNpemUgPSAxMjggKiAxMDI0ICogMTAyNDsKKyNlbmRpZgogI2VsaWYgQ1BVKFg4
Nl82NCkKLXN0YXRpYyBjb25zdGV4cHIgc2l6ZV90IGZpeGVkRXhlY3V0YWJsZU1lbW9yeVBvb2xT
aXplID0gMTAyNCAqIDEwMjQgKiAxMDI0Oworc3RhdGljIGNvbnN0ZXhwciBzaXplX3QgZml4ZWRF
eGVjdXRhYmxlTWVtb3J5UG9vbFNpemUgPSAxICogMTAyNCAqIDEwMjQgKiAxMDI0OwogI2Vsc2UK
IHN0YXRpYyBjb25zdGV4cHIgc2l6ZV90IGZpeGVkRXhlY3V0YWJsZU1lbW9yeVBvb2xTaXplID0g
MzIgKiAxMDI0ICogMTAyNDsKICNlbmRpZgpAQCAtMzEzLDEwICszMjUsMTMgQEAgc3RhdGljIEFM
V0FZU19JTkxJTkUgSklUUmVzZXJ2YXRpb24gaW5pdAogICAgIGlmICghaXNKSVRFbmFibGVkKCkp
CiAgICAgICAgIHJldHVybiByZXNlcnZhdGlvbjsKIAorICAgIHJlc2VydmF0aW9uLnNpemUgPSBm
aXhlZEV4ZWN1dGFibGVNZW1vcnlQb29sU2l6ZTsKKyNpZiAhVVNFKEpVTVBfSVNMQU5EUykKKyAg
ICAvLyBGSVhNRTogQ29uc2lkZXIgbWFraW5nIGp1bXAgaXNsYW5kcyB3b3JrIHdpdGggT3B0aW9u
czo6aml0TWVtb3J5UmVzZXJ2YXRpb25TaXplCisgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTIwOTAzNwogICAgIGlmIChPcHRpb25zOjpqaXRNZW1vcnlSZXNl
cnZhdGlvblNpemUoKSkKICAgICAgICAgcmVzZXJ2YXRpb24uc2l6ZSA9IE9wdGlvbnM6OmppdE1l
bW9yeVJlc2VydmF0aW9uU2l6ZSgpOwotICAgIGVsc2UKLSAgICAgICAgcmVzZXJ2YXRpb24uc2l6
ZSA9IGZpeGVkRXhlY3V0YWJsZU1lbW9yeVBvb2xTaXplOworI2VuZGlmCiAgICAgcmVzZXJ2YXRp
b24uc2l6ZSA9IHN0ZDo6bWF4KHJvdW5kVXBUb011bHRpcGxlT2YocGFnZVNpemUoKSwgcmVzZXJ2
YXRpb24uc2l6ZSksIHBhZ2VTaXplKCkgKiAyKTsKIAogICAgIGF1dG8gdHJ5Q3JlYXRlUGFnZVJl
c2VydmF0aW9uID0gW10gKHNpemVfdCByZXNlcnZhdGlvblNpemUpIHsKQEAgLTM2Myw1MiArMzc4
LDQ1NSBAQCBzdGF0aWMgQUxXQVlTX0lOTElORSBKSVRSZXNlcnZhdGlvbiBpbml0CiAgICAgcmV0
dXJuIHJlc2VydmF0aW9uOwogfQogCi1jbGFzcyBGaXhlZFZNUG9vbEV4ZWN1dGFibGVBbGxvY2F0
b3IgZmluYWwgOiBwdWJsaWMgTWV0YUFsbG9jYXRvciB7CitjbGFzcyBGaXhlZFZNUG9vbEV4ZWN1
dGFibGVBbGxvY2F0b3IgZmluYWwgewogICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworCisj
aWYgVVNFKEpVTVBfSVNMQU5EUykKKyAgICBjbGFzcyBJc2xhbmRzOworICAgIGNsYXNzIFJlZ2lv
bkFsbG9jYXRvcjsKKyNlbmRpZgorCiBwdWJsaWM6CiAgICAgRml4ZWRWTVBvb2xFeGVjdXRhYmxl
QWxsb2NhdG9yKCkKLSAgICAgICAgOiBNZXRhQWxsb2NhdG9yKGppdEFsbG9jYXRpb25HcmFudWxl
KSAvLyByb3VuZCB1cCBhbGwgYWxsb2NhdGlvbnMgdG8gMzIgYnl0ZXMKKyNpZiBVU0UoSlVNUF9J
U0xBTkRTKQorICAgICAgICA6IG1fYWxsb2NhdG9ycyhjb25zdHJ1Y3RGaXhlZFNpemVBcnJheVdp
dGhBcmd1bWVudHM8UmVnaW9uQWxsb2NhdG9yLCBudW1iZXJPZlJlZ2lvbnM+KCp0aGlzKSkKKyNl
bHNlCisgICAgICAgIDogbV9hbGxvY2F0b3IoKnRoaXMpCisjZW5kaWYKICAgICB7CiAgICAgICAg
IEpJVFJlc2VydmF0aW9uIHJlc2VydmF0aW9uID0gaW5pdGlhbGl6ZUpJVFBhZ2VSZXNlcnZhdGlv
bigpOwogICAgICAgICBtX3Jlc2VydmF0aW9uID0gV1RGTW92ZShyZXNlcnZhdGlvbi5wYWdlUmVz
ZXJ2YXRpb24pOwogICAgICAgICBpZiAobV9yZXNlcnZhdGlvbikgewotICAgICAgICAgICAgYWRk
RnJlc2hGcmVlU3BhY2UocmVzZXJ2YXRpb24uYmFzZSwgcmVzZXJ2YXRpb24uc2l6ZSk7CisjaWYg
VVNFKEpVTVBfSVNMQU5EUykKKyAgICAgICAgICAgIHVpbnRwdHJfdCBzdGFydCA9IGJpdHdpc2Vf
Y2FzdDx1aW50cHRyX3Q+KG1fcmVzZXJ2YXRpb24uYmFzZSgpKTsKKyAgICAgICAgICAgIHVpbnRw
dHJfdCByZXNlcnZhdGlvbkVuZCA9IHN0YXJ0ICsgbV9yZXNlcnZhdGlvbi5zaXplKCk7CisgICAg
ICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG51bWJlck9mUmVnaW9uczsgKytpKSB7Cisg
ICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoc3RhcnQgPCByZXNlcnZhdGlvbkVuZCk7Cisg
ICAgICAgICAgICAgICAgbV9hbGxvY2F0b3JzW2ldLm1fc3RhcnQgPSB0YWdDb2RlUHRyPEV4ZWN1
dGFibGVNZW1vcnlQdHJUYWc+KGJpdHdpc2VfY2FzdDx2b2lkKj4oc3RhcnQpKTsKKyAgICAgICAg
ICAgICAgICBtX2FsbG9jYXRvcnNbaV0ubV9lbmQgPSB0YWdDb2RlUHRyPEV4ZWN1dGFibGVNZW1v
cnlQdHJUYWc+KGJpdHdpc2VfY2FzdDx2b2lkKj4oc3RhcnQgKyByZWdpb25TaXplKSk7CisgICAg
ICAgICAgICAgICAgaWYgKG1fYWxsb2NhdG9yc1tpXS5lbmQoKSA+IHJlc2VydmF0aW9uRW5kKSB7
CisgICAgICAgICAgICAgICAgICAgIC8vIFdlIG1heSBoYXZlIHRha2VuIGEgcGFnZSBmb3IgdGhl
IGV4ZWN1dGFibGUgb25seSBjb3B5IHRodW5rLgorICAgICAgICAgICAgICAgICAgICBSRUxFQVNF
X0FTU0VSVChpID09IG51bWJlck9mUmVnaW9ucyAtIDEpOworICAgICAgICAgICAgICAgICAgICBt
X2FsbG9jYXRvcnNbaV0ubV9lbmQgPSB0YWdDb2RlUHRyPEV4ZWN1dGFibGVNZW1vcnlQdHJUYWc+
KGJpdHdpc2VfY2FzdDx2b2lkKj4ocmVzZXJ2YXRpb25FbmQpKTsKKyAgICAgICAgICAgICAgICB9
CisKKyAgICAgICAgICAgICAgICBtX2FsbG9jYXRvcnNbaV0uYWRkRnJlc2hGcmVlU3BhY2UoYml0
d2lzZV9jYXN0PHZvaWQqPihtX2FsbG9jYXRvcnNbaV0uc3RhcnQoKSksIG1fYWxsb2NhdG9yc1tp
XS5hbGxvY2F0b3JTaXplKCkpOworCisgICAgICAgICAgICAgICAgc3RhcnQgKz0gcmVnaW9uU2l6
ZTsKKyAgICAgICAgICAgIH0KKyNlbHNlCisgICAgICAgICAgICBtX2FsbG9jYXRvci5hZGRGcmVz
aEZyZWVTcGFjZShyZXNlcnZhdGlvbi5iYXNlLCByZXNlcnZhdGlvbi5zaXplKTsKICAgICAgICAg
ICAgIEFTU0VSVChieXRlc1Jlc2VydmVkKCkgPT0gcmVzZXJ2YXRpb24uc2l6ZSk7IC8vIFNpbmNl
IG91ciBleGVjdXRhYmxlIG1lbW9yeSBpcyBmaXhlZC1zaXplZCwgYnl0ZXNSZXNlcnZlZCBpcyBu
ZXZlciBjaGFuZ2VkIGFmdGVyIGluaXRpYWxpemF0aW9uLgorI2VuZGlmCiAgICAgICAgIH0KICAg
ICB9CiAKLSAgICB2aXJ0dWFsIH5GaXhlZFZNUG9vbEV4ZWN1dGFibGVBbGxvY2F0b3IoKTsKKyAg
ICB+Rml4ZWRWTVBvb2xFeGVjdXRhYmxlQWxsb2NhdG9yKCkKKyAgICB7CisgICAgICAgIG1fcmVz
ZXJ2YXRpb24uZGVhbGxvY2F0ZSgpOworICAgIH0KIAogICAgIHZvaWQqIG1lbW9yeVN0YXJ0KCkg
eyByZXR1cm4gdW50YWdDb2RlUHRyPEV4ZWN1dGFibGVNZW1vcnlQdHJUYWc+KGdfanNjQ29uZmln
LnN0YXJ0RXhlY3V0YWJsZU1lbW9yeSk7IH0KICAgICB2b2lkKiBtZW1vcnlFbmQoKSB7IHJldHVy
biB1bnRhZ0NvZGVQdHI8RXhlY3V0YWJsZU1lbW9yeVB0clRhZz4oZ19qc2NDb25maWcuZW5kRXhl
Y3V0YWJsZU1lbW9yeSk7IH0KICAgICBib29sIGlzSklUUEModm9pZCogcGMpIHsgcmV0dXJuIG1l
bW9yeVN0YXJ0KCkgPD0gcGMgJiYgcGMgPCBtZW1vcnlFbmQoKTsgfQorICAgIGJvb2wgaXNWYWxp
ZCgpIHsgcmV0dXJuICEhbV9yZXNlcnZhdGlvbjsgfQogCi1wcm90ZWN0ZWQ6Ci0gICAgRnJlZVNw
YWNlUHRyIGFsbG9jYXRlTmV3U3BhY2Uoc2l6ZV90Jikgb3ZlcnJpZGUKKyAgICBSZWZQdHI8RXhl
Y3V0YWJsZU1lbW9yeUhhbmRsZT4gYWxsb2NhdGUoc2l6ZV90IHNpemVJbkJ5dGVzKQogICAgIHsK
LSAgICAgICAgLy8gV2UncmUgb3BlcmF0aW5nIGluIGEgZml4ZWQgcG9vbCwgc28gbmV3IGFsbG9j
YXRpb24gaXMgYWx3YXlzIHByb2hpYml0ZWQuCisjaWYgVVNFKEpVTVBfSVNMQU5EUykKKyAgICAg
ICAgYXV0byBsb2NrZXIgPSBob2xkTG9jayhnZXRMb2NrKCkpOworCisgICAgICAgIHVuc2lnbmVk
IHN0YXJ0ID0gMDsKKyAgICAgICAgaWYgKE9wdGlvbnM6OnVzZVJhbmRvbWl6aW5nRXhlY3V0YWJs
ZUlzbGFuZEFsbG9jYXRpb24oKSkKKyAgICAgICAgICAgIHN0YXJ0ID0gY3J5cHRvZ3JhcGhpY2Fs
bHlSYW5kb21OdW1iZXIoKSAlIG1fYWxsb2NhdG9ycy5zaXplKCk7CisKKyAgICAgICAgdW5zaWdu
ZWQgaSA9IHN0YXJ0OworICAgICAgICB3aGlsZSAodHJ1ZSkgeworICAgICAgICAgICAgUmVnaW9u
QWxsb2NhdG9yJiBhbGxvY2F0b3IgPSBtX2FsbG9jYXRvcnNbaV07CisgICAgICAgICAgICBpZiAo
UmVmUHRyPEV4ZWN1dGFibGVNZW1vcnlIYW5kbGU+IHJlc3VsdCA9IGFsbG9jYXRvci5hbGxvY2F0
ZShsb2NrZXIsIHNpemVJbkJ5dGVzKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0Owor
ICAgICAgICAgICAgaSA9IChpICsgMSkgJSBtX2FsbG9jYXRvcnMuc2l6ZSgpOworICAgICAgICAg
ICAgaWYgKGkgPT0gc3RhcnQpCisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KICAg
ICAgICAgcmV0dXJuIG51bGxwdHI7CisjZWxzZQorICAgICAgICByZXR1cm4gbV9hbGxvY2F0b3Iu
YWxsb2NhdGUoc2l6ZUluQnl0ZXMpOworI2VuZGlmIC8vIFVTRShKVU1QX0lTTEFORFMpCisgICAg
fQorCisgICAgTG9jayYgZ2V0TG9jaygpIHsgcmV0dXJuIG1fbG9jazsgfQorCisgICAgLy8gTm9u
IGF0b21pYworICAgIHNpemVfdCBieXRlc0FsbG9jYXRlZCgpIAorICAgIHsKKyAgICAgICAgc2l6
ZV90IHJlc3VsdCA9IDA7CisgICAgICAgIGZvckVhY2hBbGxvY2F0b3IoWyZdIChBbGxvY2F0b3Im
IGFsbG9jYXRvcikgeworICAgICAgICAgICAgcmVzdWx0ICs9IGFsbG9jYXRvci5ieXRlc0FsbG9j
YXRlZCgpOworICAgICAgICB9KTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisgICAg
c2l6ZV90IGJ5dGVzUmVzZXJ2ZWQoKSAKKyAgICB7CisgICAgICAgIHNpemVfdCByZXN1bHQgPSAw
OworICAgICAgICBmb3JFYWNoQWxsb2NhdG9yKFsmXSAoQWxsb2NhdG9yJiBhbGxvY2F0b3IpIHsK
KyAgICAgICAgICAgIHJlc3VsdCArPSBhbGxvY2F0b3IuYnl0ZXNSZXNlcnZlZCgpOworICAgICAg
ICB9KTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisgICAgc2l6ZV90IGJ5dGVzQ29t
bWl0dGVkKCkKKyAgICB7CisgICAgICAgIHNpemVfdCByZXN1bHQgPSAwOworICAgICAgICBmb3JF
YWNoQWxsb2NhdG9yKFsmXSAoQWxsb2NhdG9yJiBhbGxvY2F0b3IpIHsKKyAgICAgICAgICAgIHJl
c3VsdCArPSBhbGxvY2F0b3IuYnl0ZXNDb21taXR0ZWQoKTsKKyAgICAgICAgfSk7CisgICAgICAg
IHJldHVybiByZXN1bHQ7CisgICAgfQorCisgICAgYm9vbCBpc0luQWxsb2NhdGVkTWVtb3J5KGNv
bnN0IEFic3RyYWN0TG9ja2VyJiBsb2NrZXIsIHZvaWQqIGFkZHJlc3MpCisgICAgeworI2lmIFVT
RShKVU1QX0lTTEFORFMpCisgICAgICAgIGlmIChSZWdpb25BbGxvY2F0b3IqIGFsbG9jYXRvciA9
IGZpbmRSZWdpb24oYml0d2lzZV9jYXN0PHVpbnRwdHJfdD4oYWRkcmVzcykpKQorICAgICAgICAg
ICAgcmV0dXJuIGFsbG9jYXRvci0+aXNJbkFsbG9jYXRlZE1lbW9yeShsb2NrZXIsIGFkZHJlc3Mp
OworICAgICAgICByZXR1cm4gZmFsc2U7CisjZWxzZQorICAgICAgICByZXR1cm4gbV9hbGxvY2F0
b3IuaXNJbkFsbG9jYXRlZE1lbW9yeShsb2NrZXIsIGFkZHJlc3MpOworI2VuZGlmCisgICAgfQor
CisjaWYgRU5BQkxFKE1FVEFfQUxMT0NBVE9SX1BST0ZJTEUpCisgICAgdm9pZCBkdW1wUHJvZmls
ZSgpCisgICAgeworICAgICAgICBmb3JFYWNoQWxsb2NhdG9yKFsmXSAoQWxsb2NhdG9yJiBhbGxv
Y2F0b3IpIHsKKyAgICAgICAgICAgIGFsbG9jYXRvci5kdW1wUHJvZmlsZSgpOworICAgICAgICB9
KTsKKyAgICB9CisjZW5kaWYKKworICAgIE1ldGFBbGxvY2F0b3I6OlN0YXRpc3RpY3MgY3VycmVu
dFN0YXRpc3RpY3MoKQorICAgIHsKKyAgICAgICAgYXV0byBsb2NrZXIgPSBob2xkTG9jayhnZXRM
b2NrKCkpOworICAgICAgICBNZXRhQWxsb2NhdG9yOjpTdGF0aXN0aWNzIHJlc3VsdCB7IDAsIDAs
IDAgfTsKKyAgICAgICAgZm9yRWFjaEFsbG9jYXRvcihbJl0gKEFsbG9jYXRvciYgYWxsb2NhdG9y
KSB7CisgICAgICAgICAgICBhdXRvIGFsbG9jYXRvclN0YXRzID0gYWxsb2NhdG9yLmN1cnJlbnRT
dGF0aXN0aWNzKGxvY2tlcik7CisgICAgICAgICAgICByZXN1bHQuYnl0ZXNBbGxvY2F0ZWQgKz0g
YWxsb2NhdG9yU3RhdHMuYnl0ZXNBbGxvY2F0ZWQ7CisgICAgICAgICAgICByZXN1bHQuYnl0ZXNS
ZXNlcnZlZCArPSBhbGxvY2F0b3JTdGF0cy5ieXRlc1Jlc2VydmVkOworICAgICAgICAgICAgcmVz
dWx0LmJ5dGVzQ29tbWl0dGVkICs9IGFsbG9jYXRvclN0YXRzLmJ5dGVzQ29tbWl0dGVkOworICAg
ICAgICB9KTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisKKyNpZiBVU0UoSlVNUF9J
U0xBTkRTKQorICAgIHZvaWQgaGFuZGxlV2lsbEJlUmVsZWFzZWQoY29uc3QgTG9ja0hvbGRlciYg
bG9ja2VyLCBNZXRhQWxsb2NhdG9ySGFuZGxlJiBoYW5kbGUpCisgICAgeworICAgICAgICBpZiAo
aXNsYW5kc0Zvckp1bXBMb2NhdGlvbi5pc0VtcHR5KCkpCisgICAgICAgICAgICByZXR1cm47CisK
KyAgICAgICAgVmVjdG9yPElzbGFuZHMqLCAxNj4gdG9SZW1vdmU7CisgICAgICAgIHZvaWQqIHN0
YXJ0ID0gaGFuZGxlLnN0YXJ0KCkudW50YWdnZWRQdHIoKTsKKyAgICAgICAgdm9pZCogZW5kID0g
aGFuZGxlLmVuZCgpLnVudGFnZ2VkUHRyKCk7CisgICAgICAgIGlzbGFuZHNGb3JKdW1wTG9jYXRp
b24uaXRlcmF0ZShbJl0gKElzbGFuZHMmIGlzbGFuZHMsIGJvb2wmIHZpc2l0TGVmdCwgYm9vbCYg
dmlzaXRSaWdodCkgeworICAgICAgICAgICAgaWYgKHN0YXJ0IDw9IGlzbGFuZHMua2V5KCkgJiYg
aXNsYW5kcy5rZXkoKSA8IGVuZCkKKyAgICAgICAgICAgICAgICB0b1JlbW92ZS5hcHBlbmQoJmlz
bGFuZHMpOworICAgICAgICAgICAgaWYgKGlzbGFuZHMua2V5KCkgPiBzdGFydCkKKyAgICAgICAg
ICAgICAgICB2aXNpdExlZnQgPSB0cnVlOworICAgICAgICAgICAgaWYgKGlzbGFuZHMua2V5KCkg
PCBlbmQpCisgICAgICAgICAgICAgICAgdmlzaXRSaWdodCA9IHRydWU7CisgICAgICAgIH0pOwor
CisgICAgICAgIGZvciAoSXNsYW5kcyogaXNsYW5kcyA6IHRvUmVtb3ZlKQorICAgICAgICAgICAg
ZnJlZUlzbGFuZHMobG9ja2VyLCBpc2xhbmRzKTsKKworICAgICAgICBpZiAoQVNTRVJUX0VOQUJM
RUQpIHsKKyAgICAgICAgICAgIGlzbGFuZHNGb3JKdW1wTG9jYXRpb24uaXRlcmF0ZShbJl0gKElz
bGFuZHMmIGlzbGFuZHMsIGJvb2wmIHZpc2l0TGVmdCwgYm9vbCYgdmlzaXRSaWdodCkgeworICAg
ICAgICAgICAgICAgIGlmIChzdGFydCA8PSBpc2xhbmRzLmtleSgpICYmIGlzbGFuZHMua2V5KCkg
PCBlbmQpIHsKKyAgICAgICAgICAgICAgICAgICAgZGF0YUxvZ0xuKCJkaWQgbm90IHJlbW92ZSBl
dmVyeXRoaW5nISIpOworICAgICAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVB
Q0hFRCgpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB2aXNpdExlZnQgPSB0
cnVlOworICAgICAgICAgICAgICAgIHZpc2l0UmlnaHQgPSB0cnVlOworICAgICAgICAgICAgfSk7
CisgICAgICAgIH0KKyAgICB9CisKKyAgICB2b2lkKiBtYWtlSXNsYW5kKHVpbnRwdHJfdCBqdW1w
TG9jYXRpb24sIHVpbnRwdHJfdCBuZXdUYXJnZXQsIGJvb2wgY29uY3VycmVudGx5KQorICAgIHsK
KyAgICAgICAgYXV0byBsb2NrZXIgPSBob2xkTG9jayhnZXRMb2NrKCkpOworICAgICAgICByZXR1
cm4gaXNsYW5kRm9ySnVtcExvY2F0aW9uKGxvY2tlciwganVtcExvY2F0aW9uLCBuZXdUYXJnZXQs
IGNvbmN1cnJlbnRseSk7CisgICAgfQorCitwcml2YXRlOgorICAgIFJlZ2lvbkFsbG9jYXRvciog
ZmluZFJlZ2lvbih1aW50cHRyX3QgcHRyKQorICAgIHsKKyAgICAgICAgUmVnaW9uQWxsb2NhdG9y
KiByZXN1bHQgPSBudWxscHRyOworICAgICAgICBmb3JFYWNoQWxsb2NhdG9yKFsmXSAoUmVnaW9u
QWxsb2NhdG9yJiBhbGxvY2F0b3IpIHsKKyAgICAgICAgICAgIGlmIChhbGxvY2F0b3Iuc3RhcnQo
KSA8PSBwdHIgJiYgcHRyIDwgYWxsb2NhdG9yLmVuZCgpKSB7CisgICAgICAgICAgICAgICAgcmVz
dWx0ID0gJmFsbG9jYXRvcjsKKyAgICAgICAgICAgICAgICByZXR1cm4gSXRlcmF0aW9uU3RhdHVz
OjpEb25lOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIEl0ZXJhdGlvblN0YXR1
czo6Q29udGludWU7CisgICAgICAgIH0pOworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0K
KworICAgIHZvaWQgZnJlZUp1bXBJc2xhbmRzKGNvbnN0IExvY2tIb2xkZXImLCBJc2xhbmRzKiBp
c2xhbmRzKQorICAgIHsKKyAgICAgICAgZm9yIChDb2RlTG9jYXRpb25MYWJlbDxFeGVjdXRhYmxl
TWVtb3J5UHRyVGFnPiBqdW1wSXNsYW5kIDogaXNsYW5kcy0+anVtcElzbGFuZHMpIHsKKyAgICAg
ICAgICAgIHVpbnRwdHJfdCB1bnRhZ2dlZEp1bXBJc2xhbmQgPSBiaXR3aXNlX2Nhc3Q8dWludHB0
cl90PihqdW1wSXNsYW5kLmRhdGFMb2NhdGlvbigpKTsKKyAgICAgICAgICAgIFJlZ2lvbkFsbG9j
YXRvciogYWxsb2NhdG9yID0gZmluZFJlZ2lvbih1bnRhZ2dlZEp1bXBJc2xhbmQpOworICAgICAg
ICAgICAgUkVMRUFTRV9BU1NFUlQoYWxsb2NhdG9yKTsKKyAgICAgICAgICAgIGFsbG9jYXRvci0+
ZnJlZUlzbGFuZCh1bnRhZ2dlZEp1bXBJc2xhbmQpOworICAgICAgICB9CisgICAgICAgIGlzbGFu
ZHMtPmp1bXBJc2xhbmRzLmNsZWFyKCk7CiAgICAgfQogCi0gICAgdm9pZCBub3RpZnlOZWVkUGFn
ZSh2b2lkKiBwYWdlLCBzaXplX3QgY291bnQpIG92ZXJyaWRlCisgICAgdm9pZCBmcmVlSXNsYW5k
cyhjb25zdCBMb2NrSG9sZGVyJiBsb2NrZXIsIElzbGFuZHMqIGlzbGFuZHMpCiAgICAgewotICAg
ICAgICBtX3Jlc2VydmF0aW9uLmNvbW1pdChwYWdlLCBwYWdlU2l6ZSgpICogY291bnQpOworICAg
ICAgICBmcmVlSnVtcElzbGFuZHMobG9ja2VyLCBpc2xhbmRzKTsKKyAgICAgICAgaXNsYW5kc0Zv
ckp1bXBMb2NhdGlvbi5yZW1vdmUoaXNsYW5kcyk7CisgICAgICAgIGRlbGV0ZSBpc2xhbmRzOwog
ICAgIH0KIAotICAgIHZvaWQgbm90aWZ5UGFnZUlzRnJlZSh2b2lkKiBwYWdlLCBzaXplX3QgY291
bnQpIG92ZXJyaWRlCisgICAgdm9pZCogaXNsYW5kRm9ySnVtcExvY2F0aW9uKGNvbnN0IExvY2tI
b2xkZXImIGxvY2tlciwgdWludHB0cl90IGp1bXBMb2NhdGlvbiwgdWludHB0cl90IHRhcmdldCwg
Ym9vbCBjb25jdXJyZW50bHkpCiAgICAgewotICAgICAgICBtX3Jlc2VydmF0aW9uLmRlY29tbWl0
KHBhZ2UsIHBhZ2VTaXplKCkgKiBjb3VudCk7CisgICAgICAgIElzbGFuZHMqIGlzbGFuZHMgPSBp
c2xhbmRzRm9ySnVtcExvY2F0aW9uLmZpbmRFeGFjdChiaXR3aXNlX2Nhc3Q8dm9pZCo+KGp1bXBM
b2NhdGlvbikpOworICAgICAgICBpZiAoaXNsYW5kcykgeworICAgICAgICAgICAgLy8gRklYTUU6
IFdlIGNvdWxkIGNyZWF0ZSBzb21lIG1ldGhvZCBvZiByZXVzaW5nIGFscmVhZHkgYWxsb2NhdGVk
IGlzbGFuZHMgaGVyZSwgYnV0IGl0J3MKKyAgICAgICAgICAgIC8vIHVubGlrZWx5IHRvIG1hdHRl
ciBpbiBwcmFjdGljZS4KKyAgICAgICAgICAgIGlmICghY29uY3VycmVudGx5KQorICAgICAgICAg
ICAgICAgIGZyZWVKdW1wSXNsYW5kcyhsb2NrZXIsIGlzbGFuZHMpOworICAgICAgICB9IGVsc2Ug
eworICAgICAgICAgICAgaXNsYW5kcyA9IG5ldyBJc2xhbmRzOworICAgICAgICAgICAgaXNsYW5k
cy0+cm9vdEp1bXBMb2NhdGlvbiA9IENvZGVMb2NhdGlvbkxhYmVsPEV4ZWN1dGFibGVNZW1vcnlQ
dHJUYWc+KHRhZ0NvZGVQdHI8RXhlY3V0YWJsZU1lbW9yeVB0clRhZz4oYml0d2lzZV9jYXN0PHZv
aWQqPihqdW1wTG9jYXRpb24pKSk7CisgICAgICAgICAgICBpc2xhbmRzRm9ySnVtcExvY2F0aW9u
Lmluc2VydChpc2xhbmRzKTsKKyAgICAgICAgfQorCisgICAgICAgIFJlZ2lvbkFsbG9jYXRvciog
YWxsb2NhdG9yID0gZmluZFJlZ2lvbihqdW1wTG9jYXRpb24gPiB0YXJnZXQgPyBqdW1wTG9jYXRp
b24gLSByZWdpb25TaXplIDoganVtcExvY2F0aW9uKTsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQo
YWxsb2NhdG9yKTsKKyAgICAgICAgdm9pZCogcmVzdWx0ID0gYWxsb2NhdG9yLT5hbGxvY2F0ZUlz
bGFuZCgpOworICAgICAgICB2b2lkKiBjdXJyZW50SXNsYW5kID0gcmVzdWx0OworICAgICAgICBq
dW1wTG9jYXRpb24gPSBiaXR3aXNlX2Nhc3Q8dWludHB0cl90PihjdXJyZW50SXNsYW5kKTsKKyAg
ICAgICAgd2hpbGUgKHRydWUpIHsKKyAgICAgICAgICAgIGlzbGFuZHMtPmp1bXBJc2xhbmRzLmFw
cGVuZChDb2RlTG9jYXRpb25MYWJlbDxFeGVjdXRhYmxlTWVtb3J5UHRyVGFnPih0YWdDb2RlUHRy
PEV4ZWN1dGFibGVNZW1vcnlQdHJUYWc+KGN1cnJlbnRJc2xhbmQpKSk7CisKKyAgICAgICAgICAg
IGF1dG8gZW1pdEp1bXBUbyA9IFsmXSAodm9pZCogdGFyZ2V0KSB7CisgICAgICAgICAgICAgICAg
UkVMRUFTRV9BU1NFUlQoQVJNNjRBc3NlbWJsZXI6OmNhbkVtaXRKdW1wKGJpdHdpc2VfY2FzdDx2
b2lkKj4oanVtcExvY2F0aW9uKSwgdGFyZ2V0KSk7CisKKyAgICAgICAgICAgICAgICBNYWNyb0Fz
c2VtYmxlciBqaXQ7CisgICAgICAgICAgICAgICAgYXV0byBqdW1wID0gaml0Lmp1bXAoKTsKKyAg
ICAgICAgICAgICAgICBMaW5rQnVmZmVyIGxpbmtCdWZmZXIoaml0LCBNYWNyb0Fzc2VtYmxlckNv
ZGVQdHI8Tm9QdHJUYWc+KGN1cnJlbnRJc2xhbmQpLCBpc2xhbmRTaXplSW5CeXRlcywgSklUQ29t
cGlsYXRpb25NdXN0U3VjY2VlZCwgZmFsc2UpOworICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNT
RVJUKGxpbmtCdWZmZXIuaXNWYWxpZCgpKTsKKworICAgICAgICAgICAgICAgIC8vIFdlIHVzZSB0
aGlzIHRvIGFwcGVhc2UgdGhlIGFzc2VydGlvbiB0aGF0IHdlJ3JlIG5vdCBmaW5hbGl6aW5nIG9u
IGEgY29tcGlsZXIgdGhyZWFkLiBJbiB0aGlzIHNpdHVhdGlvbiwgaXQncworICAgICAgICAgICAg
ICAgIC8vIG9rIHRvIGRvIHRoaXMgb24gYSBjb21waWxlciB0aHJlYWQsIHNpbmNlIHRoZSBjb21w
aWxlciB0aHJlYWQgaXMgbGlua2luZyBhIGp1bXAgdG8gdGhpcyBjb2RlIChhbmQgbm8gb3RoZXIg
bGl2ZQorICAgICAgICAgICAgICAgIC8vIGNvZGUgY2FuIGp1bXAgdG8gdGhlc2UgaXNsYW5kcyku
IEl0J3Mgb2sgYmVjYXVzZSB0aGUgQ1BVIHByb3RvY29sIGZvciBleHBvc2luZyBjb2RlIHRvIG90
aGVyIENQVXMgaXM6CisgICAgICAgICAgICAgICAgLy8gLSBTZWxmIG1vZGlmeWluZyBjb2RlIGZl
bmNlICh3aGF0IEZJTkFMSVpFX0NPREUgZG9lcyBiZWxvdykuIFRoaXMgZG9lcyB2YXJpb3VzIG1l
bW9yeSBmbHVzaGVzICsgaW5zdHJ1Y3Rpb24gc3luYyBiYXJyaWVyIChpc2IpLgorICAgICAgICAg
ICAgICAgIC8vIC0gQW55IENQVSB0aGF0IHdpbGwgcnVuIHRoZSBjb2RlIG11c3QgcnVuIGEgY3Jv
c3NNb2RpZnlpbmdDb2RlRmVuY2UgKGlzYikgYmVmb3JlIHJ1bm5pbmcgaXQuIFNpbmNlIHRoZSBj
b2RlIHRoYXQKKyAgICAgICAgICAgICAgICAvLyBoYXMgYSBqdW1wIGxpbmtlZCB0byB0aGlzIGlz
bGFuZCBoYXNuJ3QgZmluYWxpemVkIHlldCwgdGhleSdyZSBndWFyYW50ZWVkIHRvIGZpbmFsaXpl
IHRoZXJlIGNvZGUgYW5kIHJ1biBhbiBpc2IuCisgICAgICAgICAgICAgICAgbGlua0J1ZmZlci5z
ZXRJc0p1bXBJc2xhbmQoKTsKKworICAgICAgICAgICAgICAgIGxpbmtCdWZmZXIubGluayhqdW1w
LCBDb2RlTG9jYXRpb25MYWJlbDxOb1B0clRhZz4odGFyZ2V0KSk7CisgICAgICAgICAgICAgICAg
RklOQUxJWkVfQ09ERShsaW5rQnVmZmVyLCBOb1B0clRhZywgIkp1bXAgSXNsYW5kOiAlbHUiLCBq
dW1wTG9jYXRpb24pOworICAgICAgICAgICAgfTsKKworICAgICAgICAgICAgaWYgKEFSTTY0QXNz
ZW1ibGVyOjpjYW5FbWl0SnVtcChiaXR3aXNlX2Nhc3Q8dm9pZCo+KGp1bXBMb2NhdGlvbiksIGJp
dHdpc2VfY2FzdDx2b2lkKj4odGFyZ2V0KSkpIHsKKyAgICAgICAgICAgICAgICBlbWl0SnVtcFRv
KGJpdHdpc2VfY2FzdDx2b2lkKj4odGFyZ2V0KSk7CisgICAgICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHVpbnRwdHJfdCBuZXh0SXNsYW5kUmVnaW9uOwor
ICAgICAgICAgICAgaWYgKGp1bXBMb2NhdGlvbiA+IHRhcmdldCkKKyAgICAgICAgICAgICAgICBu
ZXh0SXNsYW5kUmVnaW9uID0ganVtcExvY2F0aW9uIC0gcmVnaW9uU2l6ZTsKKyAgICAgICAgICAg
IGVsc2UKKyAgICAgICAgICAgICAgICBuZXh0SXNsYW5kUmVnaW9uID0ganVtcExvY2F0aW9uICsg
cmVnaW9uU2l6ZTsKKworICAgICAgICAgICAgUmVnaW9uQWxsb2NhdG9yKiBhbGxvY2F0b3IgPSBm
aW5kUmVnaW9uKG5leHRJc2xhbmRSZWdpb24pOworICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQo
YWxsb2NhdG9yKTsKKyAgICAgICAgICAgIHZvaWQqIG5leHRJc2xhbmQgPSBhbGxvY2F0b3ItPmFs
bG9jYXRlSXNsYW5kKCk7CisgICAgICAgICAgICBlbWl0SnVtcFRvKG5leHRJc2xhbmQpOworICAg
ICAgICAgICAganVtcExvY2F0aW9uID0gYml0d2lzZV9jYXN0PHVpbnRwdHJfdD4obmV4dElzbGFu
ZCk7CisgICAgICAgICAgICBjdXJyZW50SXNsYW5kID0gbmV4dElzbGFuZDsKKyAgICAgICAgfQor
CisgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgfQorI2VuZGlmIC8vIFVTRShKVU1QX0lTTEFO
RFMpCiAKIHByaXZhdGU6CisgICAgY2xhc3MgQWxsb2NhdG9yIDogcHVibGljIE1ldGFBbGxvY2F0
b3IgeworICAgICAgICB1c2luZyBCYXNlID0gTWV0YUFsbG9jYXRvcjsKKyAgICBwdWJsaWM6Cisg
ICAgICAgIEFsbG9jYXRvcihGaXhlZFZNUG9vbEV4ZWN1dGFibGVBbGxvY2F0b3ImIGFsbG9jYXRv
cikKKyAgICAgICAgICAgIDogQmFzZShhbGxvY2F0b3IuZ2V0TG9jaygpLCBqaXRBbGxvY2F0aW9u
R3JhbnVsZSwgcGFnZVNpemUoKSkgLy8gcm91bmQgdXAgYWxsIGFsbG9jYXRpb25zIHRvIDMyIGJ5
dGVzCisgICAgICAgICAgICAsIG1fZml4ZWRBbGxvY2F0b3IoYWxsb2NhdG9yKQorICAgICAgICB7
CisgICAgICAgIH0KKworICAgICAgICBGcmVlU3BhY2VQdHIgYWxsb2NhdGVOZXdTcGFjZShzaXpl
X3QmKSBvdmVycmlkZQorICAgICAgICB7CisgICAgICAgICAgICAvLyBXZSdyZSBvcGVyYXRpbmcg
aW4gYSBmaXhlZCBwb29sLCBzbyBuZXcgYWxsb2NhdGlvbiBpcyBhbHdheXMgcHJvaGliaXRlZC4K
KyAgICAgICAgICAgIHJldHVybiBudWxscHRyOworICAgICAgICB9CisKKyAgICAgICAgdm9pZCBu
b3RpZnlOZWVkUGFnZSh2b2lkKiBwYWdlLCBzaXplX3QgY291bnQpIG92ZXJyaWRlCisgICAgICAg
IHsKKyAgICAgICAgICAgIG1fZml4ZWRBbGxvY2F0b3IubV9yZXNlcnZhdGlvbi5jb21taXQocGFn
ZSwgcGFnZVNpemUoKSAqIGNvdW50KTsKKyAgICAgICAgfQorCisgICAgICAgIHZvaWQgbm90aWZ5
UGFnZUlzRnJlZSh2b2lkKiBwYWdlLCBzaXplX3QgY291bnQpIG92ZXJyaWRlCisgICAgICAgIHsK
KyAgICAgICAgICAgIG1fZml4ZWRBbGxvY2F0b3IubV9yZXNlcnZhdGlvbi5kZWNvbW1pdChwYWdl
LCBwYWdlU2l6ZSgpICogY291bnQpOworICAgICAgICB9CisKKyAgICAgICAgRml4ZWRWTVBvb2xF
eGVjdXRhYmxlQWxsb2NhdG9yJiBtX2ZpeGVkQWxsb2NhdG9yOworICAgIH07CisKKyNpZiBVU0Uo
SlVNUF9JU0xBTkRTKQorICAgIGNsYXNzIFJlZ2lvbkFsbG9jYXRvciBmaW5hbCA6IHB1YmxpYyBB
bGxvY2F0b3IgeworICAgICAgICB1c2luZyBCYXNlID0gQWxsb2NhdG9yOworICAgIHB1YmxpYzoK
KyAgICAgICAgUmVnaW9uQWxsb2NhdG9yKEZpeGVkVk1Qb29sRXhlY3V0YWJsZUFsbG9jYXRvciYg
YWxsb2NhdG9yKQorICAgICAgICAgICAgOiBCYXNlKGFsbG9jYXRvcikKKyAgICAgICAgeworICAg
ICAgICB9CisKKyAgICAgICAgLy8gIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LQorICAgICAgICAvLyAgfCBqaXQgYWxsb2NhdGlvbnMgLS0+ICAgPC0tIGlzbGFuZHMgfAorICAg
ICAgICAvLyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgICAgICAg
IHVpbnRwdHJfdCBzdGFydCgpIHsgcmV0dXJuIGJpdHdpc2VfY2FzdDx1aW50cHRyX3Q+KHVudGFn
Q29kZVB0cjxFeGVjdXRhYmxlTWVtb3J5UHRyVGFnPihtX3N0YXJ0KSk7IH0KKyAgICAgICAgdWlu
dHB0cl90IGVuZCgpIHsgcmV0dXJuIGJpdHdpc2VfY2FzdDx1aW50cHRyX3Q+KHVudGFnQ29kZVB0
cjxFeGVjdXRhYmxlTWVtb3J5UHRyVGFnPihtX2VuZCkpOyB9CisKKyAgICAgICAgdWludHB0cl90
IGlzbGFuZEJlZ2luKCkKKyAgICAgICAgeworICAgICAgICAgICAgLy8gW3N0YXJ0LCBhbGxvY2F0
b3JFbmQpCisgICAgICAgICAgICByZXR1cm4gZW5kKCkgLSBpc2xhbmRSZWdpb25TaXplOworICAg
ICAgICB9CisKKyAgICAgICAgdWludHB0cl90IGFsbG9jYXRvclNpemUoKQorICAgICAgICB7Cisg
ICAgICAgICAgICByZXR1cm4gaXNsYW5kQmVnaW4oKSAtIHN0YXJ0KCk7CisgICAgICAgIH0KKwor
ICAgICAgICBzaXplX3QgaXNsYW5kc1BlclBhZ2UoKQorICAgICAgICB7CisgICAgICAgICAgICBz
aXplX3QgaXNsYW5kc1BlclBhZ2UgPSBwYWdlU2l6ZSgpIC8gaXNsYW5kU2l6ZUluQnl0ZXM7Cisg
ICAgICAgICAgICBBU1NFUlQoaXNsYW5kc1BlclBhZ2UgKiBpc2xhbmRTaXplSW5CeXRlcyA9PSBw
YWdlU2l6ZSgpKTsKKyAgICAgICAgICAgIEFTU0VSVChpc1Bvd2VyT2ZUd28oaXNsYW5kc1BlclBh
Z2UpKTsKKyAgICAgICAgICAgIHJldHVybiBpc2xhbmRzUGVyUGFnZTsKKyAgICAgICAgfQorCisg
ICAgICAgIHZvaWQgcmVsZWFzZShjb25zdCBMb2NrSG9sZGVyJiBsb2NrZXIsIE1ldGFBbGxvY2F0
b3JIYW5kbGUmIGhhbmRsZSkgZmluYWwKKyAgICAgICAgeworICAgICAgICAgICAgbV9maXhlZEFs
bG9jYXRvci5oYW5kbGVXaWxsQmVSZWxlYXNlZChsb2NrZXIsIGhhbmRsZSk7CisgICAgICAgICAg
ICBCYXNlOjpyZWxlYXNlKGxvY2tlciwgaGFuZGxlKTsKKyAgICAgICAgfQorCisgICAgICAgIHZv
aWQqIGFsbG9jYXRlSXNsYW5kKCkKKyAgICAgICAgeworICAgICAgICAgICAgdWludHB0cl90IGVu
ZCA9IHRoaXMtPmVuZCgpOworICAgICAgICAgICAgYXV0byBmaW5kUmVzdWx0ID0gWyZdICgpIC0+
IHZvaWQqIHsKKyAgICAgICAgICAgICAgICBzaXplX3QgcmVzdWx0Qml0ID0gaXNsYW5kQml0cy5m
aW5kQ2xlYXJCaXQoMCk7CisgICAgICAgICAgICAgICAgaWYgKHJlc3VsdEJpdCA9PSBpc2xhbmRC
aXRzLnNpemUoKSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAg
ICAgICAgICAgaXNsYW5kQml0c1tyZXN1bHRCaXRdID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICB1
aW50cHRyX3QgcmVzdWx0ID0gZW5kIC0gKChyZXN1bHRCaXQgKyAxKSAqIGlzbGFuZFNpemVJbkJ5
dGVzKTsgCisgICAgICAgICAgICAgICAgcmV0dXJuIGJpdHdpc2VfY2FzdDx2b2lkKj4ocmVzdWx0
KTsKKyAgICAgICAgICAgIH07CisKKyAgICAgICAgICAgIGlmICh2b2lkKiByZXN1bHQgPSBmaW5k
UmVzdWx0KCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKKworICAgICAgICAgICAg
aXNsYW5kQml0cy5yZXNpemUoaXNsYW5kQml0cy5zaXplKCkgKyBpc2xhbmRzUGVyUGFnZSgpKTsK
KyAgICAgICAgICAgIGlmIChVTkxJS0VMWShpc2xhbmRCaXRzLnNpemUoKSA+IG1heElzbGFuZHNQ
ZXJSZWdpb24pKQorICAgICAgICAgICAgICAgIGNyYXNoT25KdW1wSXNsYW5kRXhoYXVzdGlvbigp
OworCisgICAgICAgICAgICB1aW50cHRyX3QgcGFnZUJlZ2luID0gZW5kIC0gKGlzbGFuZEJpdHMu
c2l6ZSgpICogaXNsYW5kU2l6ZUluQnl0ZXMpOyAvLyBbaXNsYW5kQmVnaW4sIGVuZCkKKyAgICAg
ICAgICAgIG1fZml4ZWRBbGxvY2F0b3IubV9yZXNlcnZhdGlvbi5jb21taXQoYml0d2lzZV9jYXN0
PHZvaWQqPihwYWdlQmVnaW4pLCBwYWdlU2l6ZSgpKTsKKworICAgICAgICAgICAgdm9pZCogcmVz
dWx0ID0gZmluZFJlc3VsdCgpOworICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQocmVzdWx0KTsK
KyAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgICAgIH0KKworICAgICAgICBORVZFUl9J
TkxJTkUgTk9fUkVUVVJOX0RVRV9UT19DUkFTSCB2b2lkIGNyYXNoT25KdW1wSXNsYW5kRXhoYXVz
dGlvbigpCisgICAgICAgIHsKKyAgICAgICAgICAgIENSQVNIKCk7CisgICAgICAgIH0KKworICAg
ICAgICBPcHRpb25hbDxzaXplX3Q+IGlzbGFuZEJpdCh1aW50cHRyX3QgaXNsYW5kKQorICAgICAg
ICB7CisgICAgICAgICAgICB1aW50cHRyX3QgZW5kID0gdGhpcy0+ZW5kKCk7CisgICAgICAgICAg
ICBpZiAoaXNsYW5kQmVnaW4oKSA8PSBpc2xhbmQgJiYgaXNsYW5kIDwgZW5kKQorICAgICAgICAg
ICAgICAgIHJldHVybiAoKGVuZCAtIGlzbGFuZCkgLyBpc2xhbmRTaXplSW5CeXRlcykgLSAxOwor
ICAgICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKyAgICAgICAgfQorCisgICAgICAgIHZv
aWQgZnJlZUlzbGFuZCh1aW50cHRyX3QgaXNsYW5kKQorICAgICAgICB7CisgICAgICAgICAgICBS
RUxFQVNFX0FTU0VSVChpc2xhbmRCZWdpbigpIDw9IGlzbGFuZCAmJiBpc2xhbmQgPCBlbmQoKSk7
CisgICAgICAgICAgICBzaXplX3QgYml0ID0gaXNsYW5kQml0KGlzbGFuZCkudmFsdWUoKTsKKyAg
ICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKCEhaXNsYW5kQml0c1tiaXRdKTsKKyAgICAgICAgICAg
IGlzbGFuZEJpdHNbYml0XSA9IGZhbHNlOworICAgICAgICB9CisKKyAgICAgICAgYm9vbCBpc0lu
QWxsb2NhdGVkTWVtb3J5KGNvbnN0IEFic3RyYWN0TG9ja2VyJiBsb2NrZXIsIHZvaWQqIGFkZHJl
c3MpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChCYXNlOjppc0luQWxsb2NhdGVkTWVtb3J5
KGxvY2tlciwgYWRkcmVzcykpCisgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAg
ICAgICBpZiAoT3B0aW9uYWw8c2l6ZV90PiBiaXQgPSBpc2xhbmRCaXQoYml0d2lzZV9jYXN0PHVp
bnRwdHJfdD4oYWRkcmVzcykpKSB7CisgICAgICAgICAgICAgICAgaWYgKGJpdC52YWx1ZSgpIDwg
aXNsYW5kQml0cy5zaXplKCkpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiAhIWlzbGFuZEJp
dHNbYml0LnZhbHVlKCldOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgICAgICB9CisKKyAgICAgICAgLy8gUmFuZ2U6IFtzdGFydCwgZW5kKQorICAgICAgICB2
b2lkKiBtX3N0YXJ0OworICAgICAgICB2b2lkKiBtX2VuZDsKKyAgICAgICAgRmFzdEJpdFZlY3Rv
ciBpc2xhbmRCaXRzOworICAgIH07CisjZW5kaWYgLy8gVVNFKEpVTVBfSVNMQU5EUykKKworICAg
IHRlbXBsYXRlIDx0eXBlbmFtZSBGdW5jdGlvbj4KKyAgICB2b2lkIGZvckVhY2hBbGxvY2F0b3Io
RnVuY3Rpb24gZnVuY3Rpb24pCisgICAgeworI2lmIFVTRShKVU1QX0lTTEFORFMpCisgICAgICAg
IGZvciAoUmVnaW9uQWxsb2NhdG9yJiBhbGxvY2F0b3IgOiBtX2FsbG9jYXRvcnMpIHsKKyAgICAg
ICAgICAgIHVzaW5nIEZ1bmN0aW9uUmVzdWx0VHlwZSA9IGRlY2x0eXBlKGZ1bmN0aW9uKGFsbG9j
YXRvcikpOworICAgICAgICAgICAgaWYgY29uc3RleHByIChzdGQ6OmlzX3NhbWU8SXRlcmF0aW9u
U3RhdHVzLCBGdW5jdGlvblJlc3VsdFR5cGU+Ojp2YWx1ZSkgeworICAgICAgICAgICAgICAgIGlm
IChmdW5jdGlvbihhbGxvY2F0b3IpID09IEl0ZXJhdGlvblN0YXR1czo6RG9uZSkKKyAgICAgICAg
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAg
IHN0YXRpY19hc3NlcnQoc3RkOjppc19zYW1lPHZvaWQsIEZ1bmN0aW9uUmVzdWx0VHlwZT46OnZh
bHVlKTsKKyAgICAgICAgICAgICAgICBmdW5jdGlvbihhbGxvY2F0b3IpOworICAgICAgICAgICAg
fQorICAgICAgICB9CisjZWxzZQorICAgICAgICBmdW5jdGlvbihtX2FsbG9jYXRvcik7CisjZW5k
aWYgLy8gVVNFKEpVTVBfSVNMQU5EUykKKyAgICB9CisKKyNpZiBVU0UoSlVNUF9JU0xBTkRTKQor
ICAgIGNsYXNzIElzbGFuZHMgOiBwdWJsaWMgUmVkQmxhY2tUcmVlPElzbGFuZHMsIHZvaWQqPjo6
Tm9kZSB7CisgICAgICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworICAgIHB1YmxpYzoKKyAg
ICAgICAgdm9pZCoga2V5KCkgeyByZXR1cm4gcm9vdEp1bXBMb2NhdGlvbi5kYXRhTG9jYXRpb24o
KTsgfQorICAgICAgICBDb2RlTG9jYXRpb25MYWJlbDxFeGVjdXRhYmxlTWVtb3J5UHRyVGFnPiBy
b290SnVtcExvY2F0aW9uOworICAgICAgICBWZWN0b3I8Q29kZUxvY2F0aW9uTGFiZWw8RXhlY3V0
YWJsZU1lbW9yeVB0clRhZz4+IGp1bXBJc2xhbmRzOworICAgIH07CisjZW5kaWYgLy8gVVNFKEpV
TVBfSVNMQU5EUykKKworICAgIExvY2sgbV9sb2NrOwogICAgIFBhZ2VSZXNlcnZhdGlvbiBtX3Jl
c2VydmF0aW9uOworI2lmIFVTRShKVU1QX0lTTEFORFMpCisgICAgc3RkOjphcnJheTxSZWdpb25B
bGxvY2F0b3IsIG51bWJlck9mUmVnaW9ucz4gbV9hbGxvY2F0b3JzOworICAgIFJlZEJsYWNrVHJl
ZTxJc2xhbmRzLCB2b2lkKj4gaXNsYW5kc0Zvckp1bXBMb2NhdGlvbjsKKyNlbHNlCisgICAgQWxs
b2NhdG9yIG1fYWxsb2NhdG9yOworI2VuZGlmIC8vIFVTRShKVU1QX0lTTEFORFMpCiB9OwogCi1G
aXhlZFZNUG9vbEV4ZWN1dGFibGVBbGxvY2F0b3I6On5GaXhlZFZNUG9vbEV4ZWN1dGFibGVBbGxv
Y2F0b3IoKQotewotICAgIG1fcmVzZXJ2YXRpb24uZGVhbGxvY2F0ZSgpOwotfQotCiAvLyBLZWVw
IHRoaXMgcG9pbnRlciBpbiBhIG11dGFibGUgZ2xvYmFsIHZhcmlhYmxlIHRvIGhlbHAgTGVha3Mg
ZmluZCBpdC4KIC8vIEJ1dCB3ZSBkbyBub3QgdXNlIHRoaXMgcG9pbnRlci4KIHN0YXRpYyBGaXhl
ZFZNUG9vbEV4ZWN1dGFibGVBbGxvY2F0b3IqIGdsb2JhbEZpeGVkVk1Qb29sRXhlY3V0YWJsZUFs
bG9jYXRvclRvV29ya0Fyb3VuZExlYWtzID0gbnVsbHB0cjsKQEAgLTQxNyw3ICs4MzUsNiBAQCB2
b2lkIEV4ZWN1dGFibGVBbGxvY2F0b3I6OmluaXRpYWxpemVVbmRlCiAgICAgUkVMRUFTRV9BU1NF
UlQoIWdfanNjQ29uZmlnLmZpeGVkVk1Qb29sRXhlY3V0YWJsZUFsbG9jYXRvcik7CiAgICAgZ19q
c2NDb25maWcuZml4ZWRWTVBvb2xFeGVjdXRhYmxlQWxsb2NhdG9yID0gbmV3IEZpeGVkVk1Qb29s
RXhlY3V0YWJsZUFsbG9jYXRvcigpOwogICAgIGdsb2JhbEZpeGVkVk1Qb29sRXhlY3V0YWJsZUFs
bG9jYXRvclRvV29ya0Fyb3VuZExlYWtzID0gZ19qc2NDb25maWcuZml4ZWRWTVBvb2xFeGVjdXRh
YmxlQWxsb2NhdG9yOwotICAgIENvZGVQcm9maWxpbmc6Om5vdGlmeUFsbG9jYXRvcihnX2pzY0Nv
bmZpZy5maXhlZFZNUG9vbEV4ZWN1dGFibGVBbGxvY2F0b3IpOwogfQogCiBib29sIEV4ZWN1dGFi
bGVBbGxvY2F0b3I6OmlzVmFsaWQoKSBjb25zdApAQCAtNDI1LDcgKzg0Miw3IEBAIGJvb2wgRXhl
Y3V0YWJsZUFsbG9jYXRvcjo6aXNWYWxpZCgpIGNvbnMKICAgICBGaXhlZFZNUG9vbEV4ZWN1dGFi
bGVBbGxvY2F0b3IqIGFsbG9jYXRvciA9IGdfanNjQ29uZmlnLmZpeGVkVk1Qb29sRXhlY3V0YWJs
ZUFsbG9jYXRvcjsKICAgICBpZiAoIWFsbG9jYXRvcikKICAgICAgICAgcmV0dXJuIEJhc2U6Omlz
VmFsaWQoKTsKLSAgICByZXR1cm4gISFhbGxvY2F0b3ItPmJ5dGVzUmVzZXJ2ZWQoKTsKKyAgICBy
ZXR1cm4gYWxsb2NhdG9yLT5pc1ZhbGlkKCk7CiB9CiAKIGJvb2wgRXhlY3V0YWJsZUFsbG9jYXRv
cjo6dW5kZXJNZW1vcnlQcmVzc3VyZSgpCkBAIC00NTYsMTEgKzg3MywxMSBAQCBkb3VibGUgRXhl
Y3V0YWJsZUFsbG9jYXRvcjo6bWVtb3J5UHJlc3N1CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAot
UmVmUHRyPEV4ZWN1dGFibGVNZW1vcnlIYW5kbGU+IEV4ZWN1dGFibGVBbGxvY2F0b3I6OmFsbG9j
YXRlKHNpemVfdCBzaXplSW5CeXRlcywgdm9pZCogb3duZXJVSUQsIEpJVENvbXBpbGF0aW9uRWZm
b3J0IGVmZm9ydCkKK1JlZlB0cjxFeGVjdXRhYmxlTWVtb3J5SGFuZGxlPiBFeGVjdXRhYmxlQWxs
b2NhdG9yOjphbGxvY2F0ZShzaXplX3Qgc2l6ZUluQnl0ZXMsIEpJVENvbXBpbGF0aW9uRWZmb3J0
IGVmZm9ydCkKIHsKICAgICBGaXhlZFZNUG9vbEV4ZWN1dGFibGVBbGxvY2F0b3IqIGFsbG9jYXRv
ciA9IGdfanNjQ29uZmlnLmZpeGVkVk1Qb29sRXhlY3V0YWJsZUFsbG9jYXRvcjsKICAgICBpZiAo
IWFsbG9jYXRvcikKLSAgICAgICAgcmV0dXJuIEJhc2U6OmFsbG9jYXRlKHNpemVJbkJ5dGVzLCBv
d25lclVJRCwgZWZmb3J0KTsKKyAgICAgICAgcmV0dXJuIEJhc2U6OmFsbG9jYXRlKHNpemVJbkJ5
dGVzLCBlZmZvcnQpOwogICAgIGlmIChPcHRpb25zOjpsb2dFeGVjdXRhYmxlQWxsb2NhdGlvbigp
KSB7CiAgICAgICAgIE1ldGFBbGxvY2F0b3I6OlN0YXRpc3RpY3Mgc3RhdHMgPSBhbGxvY2F0b3It
PmN1cnJlbnRTdGF0aXN0aWNzKCk7CiAgICAgICAgIGRhdGFMb2coIkFsbG9jYXRpbmcgIiwgc2l6
ZUluQnl0ZXMsICIgYnl0ZXMgb2YgZXhlY3V0YWJsZSBtZW1vcnkgd2l0aCAiLCBzdGF0cy5ieXRl
c0FsbG9jYXRlZCwgIiBieXRlcyBhbGxvY2F0ZWQsICIsIHN0YXRzLmJ5dGVzUmVzZXJ2ZWQsICIg
Ynl0ZXMgcmVzZXJ2ZWQsIGFuZCAiLCBzdGF0cy5ieXRlc0NvbW1pdHRlZCwgIiBjb21taXR0ZWQu
XG4iKTsKQEAgLTQ4Nyw3ICs5MDQsNyBAQCBSZWZQdHI8RXhlY3V0YWJsZU1lbW9yeUhhbmRsZT4g
RXhlY3V0YWJsCiAgICAgICAgIH0KICAgICB9CiAKLSAgICBSZWZQdHI8RXhlY3V0YWJsZU1lbW9y
eUhhbmRsZT4gcmVzdWx0ID0gYWxsb2NhdG9yLT5hbGxvY2F0ZShzaXplSW5CeXRlcywgb3duZXJV
SUQpOworICAgIFJlZlB0cjxFeGVjdXRhYmxlTWVtb3J5SGFuZGxlPiByZXN1bHQgPSBhbGxvY2F0
b3ItPmFsbG9jYXRlKHNpemVJbkJ5dGVzKTsKICAgICBpZiAoIXJlc3VsdCkgewogICAgICAgICBp
ZiAoZWZmb3J0ICE9IEpJVENvbXBpbGF0aW9uQ2FuRmFpbCkgewogICAgICAgICAgICAgZGF0YUxv
ZygiUmFuIG91dCBvZiBleGVjdXRhYmxlIG1lbW9yeSB3aGlsZSBhbGxvY2F0aW5nICIsIHNpemVJ
bkJ5dGVzLCAiIGJ5dGVzLlxuIik7CkBAIC01MzksNiArOTU2LDI2IEBAIHZvaWQgRXhlY3V0YWJs
ZUFsbG9jYXRvcjo6ZHVtcFByb2ZpbGUoKQogfQogI2VuZGlmCiAKKyNpZiBVU0UoSlVNUF9JU0xB
TkRTKQordm9pZCogRXhlY3V0YWJsZUFsbG9jYXRvcjo6Z2V0SnVtcElzbGFuZFRvKHZvaWQqIGZy
b20sIHZvaWQqIG5ld0Rlc3RpbmF0aW9uKQoreworICAgIEZpeGVkVk1Qb29sRXhlY3V0YWJsZUFs
bG9jYXRvciogYWxsb2NhdG9yID0gZ19qc2NDb25maWcuZml4ZWRWTVBvb2xFeGVjdXRhYmxlQWxs
b2NhdG9yOworICAgIGlmICghYWxsb2NhdG9yKQorICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1Rf
UkVBQ0hFRCgpOworCisgICAgcmV0dXJuIGFsbG9jYXRvci0+bWFrZUlzbGFuZChiaXR3aXNlX2Nh
c3Q8dWludHB0cl90Pihmcm9tKSwgYml0d2lzZV9jYXN0PHVpbnRwdHJfdD4obmV3RGVzdGluYXRp
b24pLCBmYWxzZSk7Cit9CisKK3ZvaWQqIEV4ZWN1dGFibGVBbGxvY2F0b3I6OmdldEp1bXBJc2xh
bmRUb0NvbmN1cnJlbnRseSh2b2lkKiBmcm9tLCB2b2lkKiBuZXdEZXN0aW5hdGlvbikKK3sKKyAg
ICBGaXhlZFZNUG9vbEV4ZWN1dGFibGVBbGxvY2F0b3IqIGFsbG9jYXRvciA9IGdfanNjQ29uZmln
LmZpeGVkVk1Qb29sRXhlY3V0YWJsZUFsbG9jYXRvcjsKKyAgICBpZiAoIWFsbG9jYXRvcikKKyAg
ICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKworICAgIHJldHVybiBhbGxvY2F0
b3ItPm1ha2VJc2xhbmQoYml0d2lzZV9jYXN0PHVpbnRwdHJfdD4oZnJvbSksIGJpdHdpc2VfY2Fz
dDx1aW50cHRyX3Q+KG5ld0Rlc3RpbmF0aW9uKSwgdHJ1ZSk7Cit9CisjZW5kaWYKKwogdm9pZCog
c3RhcnRPZkZpeGVkRXhlY3V0YWJsZU1lbW9yeVBvb2xJbXBsKCkKIHsKICAgICBGaXhlZFZNUG9v
bEV4ZWN1dGFibGVBbGxvY2F0b3IqIGFsbG9jYXRvciA9IGdfanNjQ29uZmlnLmZpeGVkVk1Qb29s
RXhlY3V0YWJsZUFsbG9jYXRvcjsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvRXhl
Y3V0YWJsZUFsbG9jYXRvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvRXhlY3V0YWJsZUFsbG9jYXRvci5oCShyZXZpc2lvbiAyNTgzNTApCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L0V4ZWN1dGFibGVBbGxvY2F0b3IuaAkod29ya2luZyBjb3B5KQpAQCAt
NzEsNyArNzEsNyBAQCBwdWJsaWM6CiAKICAgICBzdGF0aWMgdm9pZCBkdW1wUHJvZmlsZSgpIHsg
fQogCi0gICAgUmVmUHRyPEV4ZWN1dGFibGVNZW1vcnlIYW5kbGU+IGFsbG9jYXRlKHNpemVfdCwg
dm9pZCosIEpJVENvbXBpbGF0aW9uRWZmb3J0KSB7IHJldHVybiBudWxscHRyOyB9CisgICAgUmVm
UHRyPEV4ZWN1dGFibGVNZW1vcnlIYW5kbGU+IGFsbG9jYXRlKHNpemVfdCwgSklUQ29tcGlsYXRp
b25FZmZvcnQpIHsgcmV0dXJuIG51bGxwdHI7IH0KIAogICAgIHN0YXRpYyB2b2lkIHNldEpJVEVu
YWJsZWQoYm9vbCkgeyB9OwogICAgIApAQCAtMTU4LDcgKzE1OCw3IEBAIGNsYXNzIEV4ZWN1dGFi
bGVBbGxvY2F0b3IgOiBwcml2YXRlIEV4ZWMKIHB1YmxpYzoKICAgICB1c2luZyBCYXNlID0gRXhl
Y3V0YWJsZUFsbG9jYXRvckJhc2U7CiAKLSAgICBzdGF0aWMgRXhlY3V0YWJsZUFsbG9jYXRvciYg
c2luZ2xldG9uKCk7CisgICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIEV4ZWN1dGFibGVBbGxv
Y2F0b3ImIHNpbmdsZXRvbigpOwogICAgIHN0YXRpYyB2b2lkIGluaXRpYWxpemUoKTsKICAgICBz
dGF0aWMgdm9pZCBpbml0aWFsaXplVW5kZXJseWluZ0FsbG9jYXRvcigpOwogCkBAIC0xNzYsNyAr
MTc2LDcgQEAgcHVibGljOgogICAgIAogICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyB2b2lk
IHNldEpJVEVuYWJsZWQoYm9vbCk7CiAKLSAgICBSZWZQdHI8RXhlY3V0YWJsZU1lbW9yeUhhbmRs
ZT4gYWxsb2NhdGUoc2l6ZV90IHNpemVJbkJ5dGVzLCB2b2lkKiBvd25lclVJRCwgSklUQ29tcGls
YXRpb25FZmZvcnQpOworICAgIFJlZlB0cjxFeGVjdXRhYmxlTWVtb3J5SGFuZGxlPiBhbGxvY2F0
ZShzaXplX3Qgc2l6ZUluQnl0ZXMsIEpJVENvbXBpbGF0aW9uRWZmb3J0KTsKIAogICAgIGJvb2wg
aXNWYWxpZEV4ZWN1dGFibGVNZW1vcnkoY29uc3QgQWJzdHJhY3RMb2NrZXImLCB2b2lkKiBhZGRy
ZXNzKTsKIApAQCAtMTg0LDYgKzE4NCwxMSBAQCBwdWJsaWM6CiAKICAgICBMb2NrJiBnZXRMb2Nr
KCkgY29uc3Q7CiAKKyNpZiBVU0UoSlVNUF9JU0xBTkRTKQorICAgIEpTX0VYUE9SVF9QUklWQVRF
IHZvaWQqIGdldEp1bXBJc2xhbmRUbyh2b2lkKiBmcm9tLCB2b2lkKiBuZXdEZXN0aW5hdGlvbik7
CisgICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCogZ2V0SnVtcElzbGFuZFRvQ29uY3VycmVudGx5
KHZvaWQqIGZyb20sIHZvaWQqIG5ld0Rlc3RpbmF0aW9uKTsKKyNlbmRpZgorCiBwcml2YXRlOgog
ICAgIEV4ZWN1dGFibGVBbGxvY2F0b3IoKSA9IGRlZmF1bHQ7CiAgICAgfkV4ZWN1dGFibGVBbGxv
Y2F0b3IoKSA9IGRlZmF1bHQ7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9D
b21tb25TbG93UGF0aHMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0NvbW1vblNsb3dQYXRocy5jcHAJKHJldmlzaW9uIDI1ODM1MCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbW1vblNsb3dQYXRocy5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTMyLDcgKzMyLDYgQEAKICNpbmNsdWRlICJCeXRlY29kZVN0cnVjdHMuaCIKICNpbmNsdWRl
ICJDYWxsRnJhbWUuaCIKICNpbmNsdWRlICJDbG9uZWRBcmd1bWVudHMuaCIKLSNpbmNsdWRlICJD
b2RlUHJvZmlsaW5nLmgiCiAjaW5jbHVkZSAiRGVmaW5lUHJvcGVydHlBdHRyaWJ1dGVzLmgiCiAj
aW5jbHVkZSAiRGlyZWN0QXJndW1lbnRzLmgiCiAjaW5jbHVkZSAiRXJyb3IuaCIKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbXBsZXRpb24uY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbXBsZXRpb24uY3BwCShyZXZpc2lvbiAy
NTgzNTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db21wbGV0aW9uLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMjcsNyArMjcsNiBAQAogI2luY2x1ZGUgIkNhbGxGcmFtZS5oIgog
I2luY2x1ZGUgIkNhdGNoU2NvcGUuaCIKICNpbmNsdWRlICJDb2RlQ2FjaGUuaCIKLSNpbmNsdWRl
ICJDb2RlUHJvZmlsaW5nLmgiCiAjaW5jbHVkZSAiRXhjZXB0aW9uLmgiCiAjaW5jbHVkZSAiSWRl
bnRpZmllcklubGluZXMuaCIKICNpbmNsdWRlICJJbnRlcnByZXRlci5oIgpAQCAtMTM4LDggKzEz
Nyw2IEBAIEpTVmFsdWUgZXZhbHVhdGUoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE8KICAgICBSRUxF
QVNFX0FTU0VSVCh2bS5hdG9tU3RyaW5nVGFibGUoKSA9PSBUaHJlYWQ6OmN1cnJlbnQoKS5hdG9t
U3RyaW5nVGFibGUoKSk7CiAgICAgUkVMRUFTRV9BU1NFUlQoIXZtLmlzQ29sbGVjdG9yQnVzeU9u
Q3VycmVudFRocmVhZCgpKTsKIAotICAgIENvZGVQcm9maWxpbmcgcHJvZmlsZShzb3VyY2UpOwot
CiAgICAgaWYgKCF0aGlzVmFsdWUgfHwgdGhpc1ZhbHVlLmlzVW5kZWZpbmVkT3JOdWxsKCkpCiAg
ICAgICAgIHRoaXNWYWx1ZSA9IGdsb2JhbE9iamVjdDsKICAgICBKU09iamVjdCogdGhpc09iaiA9
IGpzQ2FzdDxKU09iamVjdCo+KHRoaXNWYWx1ZS50b1RoaXMoZ2xvYmFsT2JqZWN0LCBOb3RTdHJp
Y3RNb2RlKSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU01vZHVsZUxv
YWRlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNN
b2R1bGVMb2FkZXIuY3BwCShyZXZpc2lvbiAyNTgzNTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU01vZHVsZUxvYWRlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI5LDcgKzI5
LDYgQEAKIAogI2luY2x1ZGUgIkJ1aWx0aW5OYW1lcy5oIgogI2luY2x1ZGUgIkNhdGNoU2NvcGUu
aCIKLSNpbmNsdWRlICJDb2RlUHJvZmlsaW5nLmgiCiAjaW5jbHVkZSAiRXJyb3IuaCIKICNpbmNs
dWRlICJFeGNlcHRpb24uaCIKICNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCkBAIC00MDAsOCArMzk5
LDYgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBtb2R1bGVMb2FkZQogICAgICAgICBy
ZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKEpTV2ViQXNzZW1ibHk6Omluc3RhbnRpYXRlKGdsb2JhbE9i
amVjdCwgcHJvbWlzZSwgbW9kdWxlS2V5LCBqc1NvdXJjZUNvZGUpKTsKICNlbmRpZgogCi0gICAg
Q29kZVByb2ZpbGluZyBwcm9maWxlKHNvdXJjZUNvZGUpOwotCiAgICAgUGFyc2VyRXJyb3IgZXJy
b3I7CiAgICAgc3RkOjp1bmlxdWVfcHRyPE1vZHVsZVByb2dyYW1Ob2RlPiBtb2R1bGVQcm9ncmFt
Tm9kZSA9IHBhcnNlPE1vZHVsZVByb2dyYW1Ob2RlPigKICAgICAgICAgdm0sIHNvdXJjZUNvZGUs
IElkZW50aWZpZXIoKSwgSlNQYXJzZXJCdWlsdGluTW9kZTo6Tm90QnVpbHRpbiwKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnNMaXN0LmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9uc0xpc3QuaAkocmV2aXNpb24gMjU4
MzUwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9uc0xpc3QuaAkod29y
a2luZyBjb3B5KQpAQCAtNTAwLDYgKzUwMCw3IEBAIGNvbnN0ZXhwciBib29sIGVuYWJsZVdlYkFz
c2VtYmx5U3RyZWFtaW4KICAgICB2KEJvb2wsIGZvcmNlT1NSRXhpdFRvTExJbnQsIGZhbHNlLCBO
b3JtYWwsICJJZiB0cnVlLCB3ZSBhbHdheXMgZXhpdCB0byB0aGUgTExJbnQuIElmIGZhbHNlLCB3
ZSBleGl0IHRvIHdoYXRldmVyIGlzIG1vc3QgY29udmVuaWVudC4iKSBcCiAgICAgdihVbnNpZ25l
ZCwgZ2V0QnlWYWxJQ01heE51bWJlck9mSWRlbnRpZmllcnMsIDQsIE5vcm1hbCwgIk51bWJlciBv
ZiBpZGVudGlmaWVycyB3ZSBzZWUgaW4gdGhlIExMSW50IHRoYXQgY291bGQgY2F1c2UgdXMgdG8g
YmFpbCBvbiBnZW5lcmF0aW5nIGFuIElDIGZvciBnZXRfYnlfdmFsLiIpIFwKICAgICB2KEJvb2ws
IHVzZVB1YmxpY0NsYXNzRmllbGRzLCB0cnVlLCBOb3JtYWwsICJJZiB0cnVlLCB0aGUgcGFyc2Vy
IHdpbGwgdW5kZXJzdGFuZCBwdWJsaWMgZGF0YSBmaWVsZHMgaW5zaWRlIGNsYXNzZXMuIikgXAor
ICAgIHYoQm9vbCwgdXNlUmFuZG9taXppbmdFeGVjdXRhYmxlSXNsYW5kQWxsb2NhdGlvbiwgZmFs
c2UsIE5vcm1hbCwgIkZvciB0aGUgYXJtNjQgRXhlY3V0YWJsZUFsbG9jYXRvciwgaWYgdHJ1ZSwg
c2VsZWN0IHdoaWNoIHJlZ2lvbiB0byB1c2UgcmFuZG9tbHkuIFRoaXMgaXMgdXNlZnVsIGZvciB0
ZXN0aW5nIHRoYXQganVtcCBpc2xhbmRzIHdvcmsuIikgXAogCiBlbnVtIE9wdGlvbkVxdWl2YWxl
bmNlIHsKICAgICBTYW1lT3B0aW9uLApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3Rvb2xz
L0NvZGVQcm9maWxlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvdG9v
bHMvQ29kZVByb2ZpbGUuY3BwCShyZXZpc2lvbiAyNTgzNTApCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvdG9vbHMvQ29kZVByb2ZpbGUuY3BwCShub25leGlzdGVudCkKQEAgLTEsMTcyICswLDAg
QEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAq
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
Ci0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQotI2luY2x1
ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIkNvZGVQcm9maWxlLmgiCi0KLSNpbmNsdWRlICJDb2Rl
QmxvY2suaCIKLSNpbmNsdWRlICJDb2RlUHJvZmlsaW5nLmgiCi0jaW5jbHVkZSAiTGlua0J1ZmZl
ci5oIgotI2luY2x1ZGUgIlByb2ZpbGVUcmVlTm9kZS5oIgotI2luY2x1ZGUgPHd0Zi9TdGFja1Ry
YWNlLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+Ci0KLW5hbWVzcGFjZSBKU0Mg
ewotCi0vLyBNYXAgZnJvbSBDb2RlVHlwZSBlbnVtIHRvIGEgY29ycmVzcG9uZGluZyBuYW1lLgot
c3RhdGljIGNvbnN0IGNoYXIqIGNvbnN0IHNfY29kZVR5cGVOYW1lc1tDb2RlUHJvZmlsZTo6TnVt
YmVyT2ZDb2RlVHlwZXNdID0gewotICAgICJbW0VuZ2luZUNvZGVdXSIsCi0gICAgIltbR2xvYmFs
VGh1bmtdXSIsCi0gICAgIltbUmVnRXhwQ29kZV1dIiwKLSAgICAiW1tERkdKSVRdXSIsCi0gICAg
IltbQmFzZWxpbmVPbmx5XV0iLAotICAgICJbW0Jhc2VsaW5lUHJvZmlsZV1dIiwKLSAgICAiW1tC
YXNlbGluZU9TUl1dIiwKLSAgICAiW1tFbmdpbmVGcmFtZV1dIgotfTsKLQotLy8gSGVscGVyIGZ1
bmN0aW9uLCB0cnVuY2F0ZSB0cmFjZXMgdG8gcHJ1bmUgdGhlIG91dHB1dCAmIG1ha2UgdmVyeSB2
ZXJib3NlIG1vZGUgYSBsaXR0bGUgbW9yZSByZWFkYWJsZS4KLXN0YXRpYyBib29sIHRydW5jYXRl
VHJhY2UoY29uc3QgY2hhciogc3ltYm9sTmFtZSkKLXsKLSAgICByZXR1cm4gIXN0cmNtcChzeW1i
b2xOYW1lLCAiSlNDOjpCeXRlY29kZUdlbmVyYXRvcjo6Z2VuZXJhdGUoKSIpCi0gICAgICAgIHx8
ICFzdHJjbXAoc3ltYm9sTmFtZSwgIkpTQzo6UGFyc2VyPEpTQzo6TGV4ZXI8dW5zaWduZWQgY2hh
cj4+OjpwYXJzZUlubmVyKCkiKQotICAgICAgICB8fCAhc3RyY21wKHN5bWJvbE5hbWUsICJXVEY6
OmZhc3RNYWxsb2ModW5zaWduZWQgbG9uZykiKQotICAgICAgICB8fCAhc3RyY21wKHN5bWJvbE5h
bWUsICJXVEY6OmNhbGN1bGF0ZVVUQ09mZnNldCgpIikKLSAgICAgICAgfHwgIXN0cmNtcChzeW1i
b2xOYW1lLCAiSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpwYXJzZUNvZGVCbG9jaygpIik7Ci0g
ICAgICAgIAotfQotCi0vLyBFYWNoIHRyYWNlIGNvbnNpc3RzIG9mIGEgc2VxdWVuY2Ugb2YgemVy
byBvciBtb3JlICdFbmdpbmVGcmFtZScgZW50cmllcywKLS8vIGZvbGxvd2VkIGJ5IGEgc2FtcGxl
IGluIEpJVCBjb2RlLCBvciBvbmUgb3IgbW9yZSAnRW5naW5lRnJhbWUnIGVudHJpZXMsCi0vLyBm
b2xsb3dlZCBieSBhICdFbmdpbmVDb2RlJyB0ZXJtaW5hdG9yLgotdm9pZCBDb2RlUHJvZmlsZTo6
c2FtcGxlKHZvaWQqIHBjLCB2b2lkKiogZnJhbWVQb2ludGVyKQotewotICAgIC8vIERpc2FsbG93
IHRyYWNlcyBjb250YWluaW5nIG9ubHkgYSAnRW5naW5lQ29kZScgdGVybWluYXRvciwgd2l0aG91
dCBhbnkgJ0VuZ2luZUZyYW1lJyBmcmFtZXMuCi0gICAgaWYgKCFmcmFtZVBvaW50ZXIpCi0gICAg
ICAgIHJldHVybjsKLQotICAgIHdoaWxlIChmcmFtZVBvaW50ZXIpIHsKLSAgICAgICAgQ29kZVR5
cGUgdHlwZTsKLQotI2lmIEVOQUJMRShKSVQpCi0gICAgICAgIC8vIERldGVybWluZSBpZiB0aGlz
IHNhbXBsZSBmZWxsIGluIEpJVCBjb2RlLCBhbmQgaWYgc28sIGZyb20gd2hpY2ggSklUICYgd2h5
LgotICAgICAgICB2b2lkKiBvd25lclVJRCA9IENvZGVQcm9maWxpbmc6OmdldE93bmVyVUlERm9y
UEMocGMpOwotCi0gICAgICAgIGlmICghb3duZXJVSUQpCi0gICAgICAgICAgICB0eXBlID0gRW5n
aW5lRnJhbWU7Ci0gICAgICAgIGVsc2UgaWYgKG93bmVyVUlEID09IEdMT0JBTF9USFVOS19JRCkK
LSAgICAgICAgICAgIHR5cGUgPSBHbG9iYWxUaHVuazsKLSAgICAgICAgZWxzZSBpZiAob3duZXJV
SUQgPT0gUkVHRVhQX0NPREVfSUQpCi0gICAgICAgICAgICB0eXBlID0gUmVnRXhwQ29kZTsKLSAg
ICAgICAgZWxzZSB7Ci0gICAgICAgICAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9IHN0YXRpY19j
YXN0PENvZGVCbG9jayo+KG93bmVyVUlEKTsKLSAgICAgICAgICAgIGlmIChjb2RlQmxvY2stPmpp
dFR5cGUoKSA9PSBKSVRUeXBlOjpERkdKSVQpCi0gICAgICAgICAgICAgICAgdHlwZSA9IERGR0pJ
VDsKLSAgICAgICAgICAgIGVsc2UgaWYgKCFjYW5Db21waWxlKGNvZGVCbG9jay0+Y2FwYWJpbGl0
eUxldmVsU3RhdGUoKSkpCi0gICAgICAgICAgICAgICAgdHlwZSA9IEJhc2VsaW5lT25seTsKLSAg
ICAgICAgICAgIGVsc2UgaWYgKGNvZGVCbG9jay0+cmVwbGFjZW1lbnQoKSkKLSAgICAgICAgICAg
ICAgICB0eXBlID0gQmFzZWxpbmVPU1I7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAg
ICAgdHlwZSA9IEJhc2VsaW5lUHJvZmlsZTsKLSAgICAgICAgfQotI2Vsc2UKLSAgICAgICAgdHlw
ZSA9IEVuZ2luZUZyYW1lOwotI2VuZGlmCi0KLSAgICAgICAgLy8gQSBzYW1wbGUgaW4gSklUIGNv
ZGUgdGVybWluYXRlcyB0aGUgdHJhY2UuCi0gICAgICAgIG1fc2FtcGxlcy5hcHBlbmQoQ29kZVJl
Y29yZChwYywgdHlwZSkpOwotICAgICAgICBpZiAodHlwZSAhPSBFbmdpbmVGcmFtZSkKLSAgICAg
ICAgICAgIHJldHVybjsKLQotI2lmIE9TKERBUldJTikgJiYgQ1BVKFg4Nl82NCkKLSAgICAgICAg
Ly8gV2FsayB1cCB0aGUgc3RhY2suCi0gICAgICAgIHBjID0gZnJhbWVQb2ludGVyWzFdOwotICAg
ICAgICBmcmFtZVBvaW50ZXIgPSByZWludGVycHJldF9jYXN0PHZvaWQqKj4oKmZyYW1lUG9pbnRl
cik7Ci0jZWxpZiBPUyhMSU5VWCkgJiYgQ1BVKFg4NikKLSAgICAgICAgLy8gRG9uJ3QgdW53aW5k
IHRoZSBzdGFjayBhcyBzb21lIGRlcGVuZGVudCB0aGlyZCBwYXJ0eSBsaWJyYXJpZXMKLSAgICAg
ICAgLy8gbWF5IGJlIGNvbXBpbGVkIHdpdGggLWZvbWl0LWZyYW1lLXBvaW50ZXIuCi0gICAgICAg
IGZyYW1lUG9pbnRlciA9IDA7Ci0jZWxzZQotICAgICAgICAvLyBUaGlzIHBsYXRmb3JtIGlzIG5v
dCB5ZXQgc3VwcG9ydGVkIQotICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwot
I2VuZGlmCi0gICAgfQotCi0gICAgLy8gSWYgd2UgZ2V0IGhlcmUsIHdlIHdhbGtlZCB0aGUgZW50
aXJlIHN0YWNrIHdpdGhvdXQgZmluZGluZyBhbnkgZnJhbWVzIG9mIEpJVCBjb2RlLgotICAgIG1f
c2FtcGxlcy5hcHBlbmQoQ29kZVJlY29yZCgwLCBFbmdpbmVDb2RlKSk7Ci19Ci0KLXZvaWQgQ29k
ZVByb2ZpbGU6OnJlcG9ydCgpCi17Ci0gICAgZGF0YUxvZ0YoIjxDb2RlUHJvZmlsaW5nICVzOiVk
PlxuIiwgbV9maWxlLmRhdGEoKSwgbV9saW5lTnVtYmVyKTsKLQotICAgIC8vIEhvdyBtYW55IGZy
YW1lcyBvZiBDLWNvZGUgdG8gcHJpbnQgLSAwLCBpZiBub3QgdmVyYm9zZSwgMSBpZiB2ZXJib3Nl
LCB1cCB0byAxMDI0IGlmIHZlcnkgdmVyYm9zZS4KLSAgICB1bnNpZ25lZCByZWN1cnNpb25MaW1p
dCA9IENvZGVQcm9maWxpbmc6OmJlVmVyeVZlcmJvc2UoKSA/IDEwMjQgOiBDb2RlUHJvZmlsaW5n
OjpiZVZlcmJvc2UoKTsKLQotICAgIFByb2ZpbGVUcmVlTm9kZSBwcm9maWxlOwotCi0gICAgLy8g
V2FsayB0aHJvdWdoIHRoZSBzYW1wbGUgYnVmZmVyLgotICAgIHNpemVfdCB0cmFjZSA9IDA7Ci0g
ICAgd2hpbGUgKHRyYWNlIDwgbV9zYW1wbGVzLnNpemUoKSkgewotCi0gICAgICAgIC8vIEFsbCB0
cmFjZXMgYXJlIHplcm8gb3IgbW9yZSAnRW5naW5lRnJhbWUncywgZm9sbG93ZWQgYnkgYSBub24t
J0VuZ2luZUZyYW1lJy4KLSAgICAgICAgLy8gU2NhbiB0byBmaW5kIHRoZSBsYXN0IHNhbXBsZSBp
biB0aGUgdHJhY2UuCi0gICAgICAgIHNpemVfdCBsYXN0SW5UcmFjZSA9IHRyYWNlOwotICAgICAg
ICB3aGlsZSAobV9zYW1wbGVzW2xhc3RJblRyYWNlXS50eXBlID09IEVuZ2luZUZyYW1lKQotICAg
ICAgICAgICAgKytsYXN0SW5UcmFjZTsKLQotICAgICAgICAvLyBXZSB1c2UgdGhlIGxhc3Qgc2Ft
cGxlIHR5cGUgdG8gbG9vayB1cCBhIG5hbWUgKHVzZWQgYXMgYSBidWNrZXQgaW4gdGhlIHByb2Zp
bGVyKS4KLSAgICAgICAgUHJvZmlsZVRyZWVOb2RlKiBjYWxsYmFja3MgPSBwcm9maWxlLnNhbXBs
ZUNoaWxkKHNfY29kZVR5cGVOYW1lc1ttX3NhbXBsZXNbbGFzdEluVHJhY2VdLnR5cGVdKTsKLQot
ICAgICAgICAvLyBJZiB0aGVyZSBhcmUgYW55IHNhbXBsZXMgaW4gQy1jb2RlLCBhZGQgdXAgdG8g
cmVjdXJzaW9uTGltaXQgb2YgdGhlbSBpbnRvIHRoZSBwcm9maWxlIHRyZWUuCi0gICAgICAgIHNp
emVfdCBsYXN0RW5naW5lRnJhbWUgPSBsYXN0SW5UcmFjZTsKLSAgICAgICAgZm9yICh1bnNpZ25l
ZCBjb3VudCA9IDA7IGxhc3RFbmdpbmVGcmFtZSA+IHRyYWNlICYmIGNvdW50IDwgcmVjdXJzaW9u
TGltaXQ7ICsrY291bnQpIHsKLSAgICAgICAgICAgIC0tbGFzdEVuZ2luZUZyYW1lOwotICAgICAg
ICAgICAgQVNTRVJUKG1fc2FtcGxlc1tsYXN0RW5naW5lRnJhbWVdLnR5cGUgPT0gRW5naW5lRnJh
bWUpOwotICAgICAgICAgICAgY29uc3QgY2hhciogbmFtZSA9ICI8dW5rbm93bj4iOwotICAgICAg
ICAgICAgYXV0byBkZW1hbmdsZWQgPSBTdGFja1RyYWNlOjpkZW1hbmdsZShtX3NhbXBsZXNbbGFz
dEVuZ2luZUZyYW1lXS5wYyk7Ci0gICAgICAgICAgICBpZiAoZGVtYW5nbGVkKQotICAgICAgICAg
ICAgICAgIG5hbWUgPSBkZW1hbmdsZWQtPmRlbWFuZ2xlZE5hbWUoKSA/IGRlbWFuZ2xlZC0+ZGVt
YW5nbGVkTmFtZSgpIDogZGVtYW5nbGVkLT5tYW5nbGVkTmFtZSgpOwotICAgICAgICAgICAgY2Fs
bGJhY2tzID0gY2FsbGJhY2tzLT5zYW1wbGVDaGlsZChuYW1lKTsKLSAgICAgICAgICAgIGlmICh0
cnVuY2F0ZVRyYWNlKG5hbWUpKQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0K
LSAgICAgICAgLy8gTW92ZSBvbiB0byB0aGUgbmV4dCB0cmFjZS4KLSAgICAgICAgdHJhY2UgPSBs
YXN0SW5UcmFjZSArIDE7Ci0gICAgICAgIEFTU0VSVCh0cmFjZSA8PSBtX3NhbXBsZXMuc2l6ZSgp
KTsKLSAgICB9Ci0KLSAgICAvLyBPdXRwdXQgdGhlIHByb2ZpbGUgdHJlZS4KLSAgICBkYXRhTG9n
RigiVG90YWwgc2FtcGxlczogJWxsZFxuIiwgc3RhdGljX2Nhc3Q8bG9uZyBsb25nPihwcm9maWxl
LmNoaWxkQ291bnQoKSkpOwotICAgIHByb2ZpbGUuZHVtcCgpOwotICAgIAotICAgIGZvciAoc2l6
ZV90IGkgPSAwIDsgaSA8IG1fY2hpbGRyZW4uc2l6ZSgpOyArK2kpCi0gICAgICAgIG1fY2hpbGRy
ZW5baV0tPnJlcG9ydCgpOwotCi0gICAgZGF0YUxvZ0YoIjwvQ29kZVByb2ZpbGluZyAlczolZD5c
biIsIG1fZmlsZS5kYXRhKCksIG1fbGluZU51bWJlcik7Ci19Ci0KLX0KSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS90b29scy9Db2RlUHJvZmlsZS5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS90b29scy9Db2RlUHJvZmlsZS5oCShyZXZpc2lvbiAyNTgzNTApCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvdG9vbHMvQ29kZVByb2ZpbGUuaAkobm9uZXhpc3RlbnQpCkBA
IC0xLDg5ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUg
bWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0g
KiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0g
Ki8KLQotI3ByYWdtYSBvbmNlCi0KLSNpbmNsdWRlICJTb3VyY2VDb2RlLmgiCi0jaW5jbHVkZSAi
VGllcmVkTU1hcEFycmF5LmgiCi0jaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgotCi1uYW1l
c3BhY2UgSlNDIHsKLQotY2xhc3MgQ29kZVByb2ZpbGUgewotICAgIFdURl9NQUtFX0ZBU1RfQUxM
T0NBVEVEOwotcHVibGljOgotICAgIENvZGVQcm9maWxlKGNvbnN0IFNvdXJjZUNvZGUmIHNvdXJj
ZSwgQ29kZVByb2ZpbGUqIHBhcmVudCkKLSAgICAgICAgOiBtX2ZpbGUoU3RyaW5nKHNvdXJjZS5w
cm92aWRlcigpLT51cmwoKSkudXRmOCgpKQotICAgICAgICAsIG1fbGluZU51bWJlcihzb3VyY2Uu
Zmlyc3RMaW5lKCkub25lQmFzZWRJbnQoKSkKLSAgICAgICAgLCBtX3BhcmVudChwYXJlbnQpCi0g
ICAgewotICAgICAgICBpZiAocGFyZW50KQotICAgICAgICAgICAgcGFyZW50LT5hZGRDaGlsZChz
dGQ6OnVuaXF1ZV9wdHI8Q29kZVByb2ZpbGU+KHRoaXMpKTsKLSAgICB9Ci0KLSAgICB2b2lkIHNh
bXBsZSh2b2lkKiBwYywgdm9pZCoqIGZyYW1lUG9pbnRlcik7Ci0gICAgdm9pZCByZXBvcnQoKTsK
LQotICAgIENvZGVQcm9maWxlKiBwYXJlbnQoKQotICAgIHsKLSAgICAgICAgcmV0dXJuIG1fcGFy
ZW50OwotICAgIH0KLSAgICAKLSAgICB2b2lkIGFkZENoaWxkKHN0ZDo6dW5pcXVlX3B0cjxDb2Rl
UHJvZmlsZT4gY2hpbGQpCi0gICAgewotICAgICAgICBtX2NoaWxkcmVuLmFwcGVuZChXVEZNb3Zl
KGNoaWxkKSk7Ci0gICAgfQotCi0gICAgZW51bSBDb2RlVHlwZSB7Ci0gICAgICAgIEVuZ2luZUNv
ZGUsCi0gICAgICAgIEdsb2JhbFRodW5rLAotICAgICAgICBSZWdFeHBDb2RlLAotICAgICAgICBE
RkdKSVQsCi0gICAgICAgIEJhc2VsaW5lT25seSwKLSAgICAgICAgQmFzZWxpbmVQcm9maWxlLAot
ICAgICAgICBCYXNlbGluZU9TUiwKLSAgICAgICAgRW5naW5lRnJhbWUsCi0gICAgICAgIE51bWJl
ck9mQ29kZVR5cGVzCi0gICAgfTsKLQotcHJpdmF0ZToKLSAgICBzdHJ1Y3QgQ29kZVJlY29yZCB7
Ci0gICAgICAgIENvZGVSZWNvcmQodm9pZCogcGMsIENvZGVUeXBlIHR5cGUpCi0gICAgICAgICAg
ICA6IHBjKHBjKQotICAgICAgICAgICAgLCB0eXBlKHR5cGUpCi0gICAgICAgIHsKLSAgICAgICAg
fQotICAgICAgICB2b2lkKiBwYzsKLSAgICAgICAgQ29kZVR5cGUgdHlwZTsKLSAgICB9OwotCi0g
ICAgQ1N0cmluZyBtX2ZpbGU7Ci0gICAgdW5zaWduZWQgbV9saW5lTnVtYmVyOwotICAgIENvZGVQ
cm9maWxlKiBtX3BhcmVudDsKLSAgICBWZWN0b3I8c3RkOjp1bmlxdWVfcHRyPENvZGVQcm9maWxl
Pj4gbV9jaGlsZHJlbjsKLSAgICBUaWVyZWRNTWFwQXJyYXk8Q29kZVJlY29yZD4gbV9zYW1wbGVz
OwotfTsKLQotfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
dG9vbHMvQ29kZVByb2ZpbGluZy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL3Rvb2xzL0NvZGVQcm9maWxpbmcuY3BwCShyZXZpc2lvbiAyNTgzNTApCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvdG9vbHMvQ29kZVByb2ZpbGluZy5jcHAJKG5vbmV4aXN0ZW50KQpAQCAt
MSwxNjkgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMi0yMDE4IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICog
YXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
IAotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJDb2RlUHJvZmlsaW5nLmgi
Ci0KLSNpbmNsdWRlICJDb2RlUHJvZmlsZS5oIgotI2luY2x1ZGUgIk1hY2hpbmVDb250ZXh0Lmgi
Ci0jaW5jbHVkZSA8d3RmL01ldGFBbGxvY2F0b3IuaD4KLQotI2lmIEhBVkUoU0lHTkFMX0gpCi0j
aW5jbHVkZSA8c2lnbmFsLmg+Ci0jZW5kaWYKLQotI2lmIEhBVkUoTUFDSElORV9DT05URVhUKQot
I2luY2x1ZGUgPHN5cy90aW1lLmg+Ci0jZW5kaWYKLQotbmFtZXNwYWNlIEpTQyB7Ci0KLXZvbGF0
aWxlIENvZGVQcm9maWxlKiBDb2RlUHJvZmlsaW5nOjpzX3Byb2ZpbGVTdGFjayA9IDA7Ci1Db2Rl
UHJvZmlsaW5nOjpNb2RlIENvZGVQcm9maWxpbmc6OnNfbW9kZSA9IENvZGVQcm9maWxpbmc6OkRp
c2FibGVkOwotV1RGOjpNZXRhQWxsb2NhdG9yVHJhY2tlciogQ29kZVByb2ZpbGluZzo6c190cmFj
a2VyID0gMDsKLQotSUdOT1JFX1dBUk5JTkdTX0JFR0lOKCJtaXNzaW5nLW5vcmV0dXJuIikKLQot
I2lmIEhBVkUoTUFDSElORV9DT05URVhUKQotLy8gSGVscGVyIGZ1bmN0aW9uIHRvIHN0YXJ0ICYg
c3RvcCB0aGUgdGltZXIuCi0vLyBQcmVzZW50bHkgd2UncmUgdXNpbmcgdGhlIHdhbGwtY2xvY2sg
dGltZXIsIHNpbmNlIHRoaXMgc2VlbXMgdG8gZ2l2ZSB0aGUgYmVzdCByZXN1bHRzLgotc3RhdGlj
IHZvaWQgc2V0UHJvZmlsZVRpbWVyKHVuc2lnbmVkIHVzZWMpCi17Ci0gICAgaXRpbWVydmFsIHRp
bWVyOwotICAgIHRpbWVyLml0X3ZhbHVlLnR2X3NlYyA9IDA7Ci0gICAgdGltZXIuaXRfdmFsdWUu
dHZfdXNlYyA9IHVzZWM7Ci0gICAgdGltZXIuaXRfaW50ZXJ2YWwudHZfc2VjID0gMDsKLSAgICB0
aW1lci5pdF9pbnRlcnZhbC50dl91c2VjID0gdXNlYzsKLSAgICBzZXRpdGltZXIoSVRJTUVSX1JF
QUwsICZ0aW1lciwgMCk7Ci19Ci0jZW5kaWYKLQotSUdOT1JFX1dBUk5JTkdTX0VORAotCi0jaWYg
SEFWRShNQUNISU5FX0NPTlRFWFQpCi1zdGF0aWMgdm9pZCBwcm9maWxpbmdUaW1lcihpbnQsIHNp
Z2luZm9fdCosIHZvaWQqIHVhcCkKLXsKLSAgICBQbGF0Zm9ybVJlZ2lzdGVycyYgcGxhdGZvcm1S
ZWdpc3RlcnMgPSBXVEY6OnJlZ2lzdGVyc0Zyb21VQ29udGV4dChzdGF0aWNfY2FzdDx1Y29udGV4
dF90Kj4odWFwKSk7Ci0gICAgaWYgKGF1dG8gaW5zdHJ1Y3Rpb25Qb2ludGVyID0gTWFjaGluZUNv
bnRleHQ6Omluc3RydWN0aW9uUG9pbnRlcihwbGF0Zm9ybVJlZ2lzdGVycykpIHsKLSAgICAgICAg
Q29kZVByb2ZpbGluZzo6c2FtcGxlKAotICAgICAgICAgICAgaW5zdHJ1Y3Rpb25Qb2ludGVyLT51
bnRhZ2dlZEV4ZWN1dGFibGVBZGRyZXNzKCksCi0gICAgICAgICAgICByZWludGVycHJldF9jYXN0
PHZvaWQqKj4oTWFjaGluZUNvbnRleHQ6OmZyYW1lUG9pbnRlcihwbGF0Zm9ybVJlZ2lzdGVycykp
KTsKLSAgICB9Ci19Ci0jZW5kaWYKLQotLy8gQ2FsbGJhY2sgdHJpZ2dlcmVkIHdoZW4gdGhlIHRp
bWVyIGlzIGZpcmVkLgotdm9pZCBDb2RlUHJvZmlsaW5nOjpzYW1wbGUodm9pZCogcGMsIHZvaWQq
KiBmcmFtZVBvaW50ZXIpCi17Ci0gICAgQ29kZVByb2ZpbGUqIHByb2ZpbGVTdGFjayA9IGNvbnN0
X2Nhc3Q8Q29kZVByb2ZpbGUqPihzX3Byb2ZpbGVTdGFjayk7Ci0gICAgaWYgKHByb2ZpbGVTdGFj
aykKLSAgICAgICAgcHJvZmlsZVN0YWNrLT5zYW1wbGUocGMsIGZyYW1lUG9pbnRlcik7Ci19Ci0K
LXZvaWQgQ29kZVByb2ZpbGluZzo6bm90aWZ5QWxsb2NhdG9yKFdURjo6TWV0YUFsbG9jYXRvciog
YWxsb2NhdG9yKQotewotICAgIC8vIENoZWNrIGZvciBKU0NfQ09ERV9QUk9GSUxJTkcuCi0gICAg
Y29uc3QgY2hhciogY29kZVByb2ZpbGluZ01vZGUgPSBnZXRlbnYoIkpTQ19DT0RFX1BST0ZJTElO
RyIpOwotICAgIGlmICghY29kZVByb2ZpbGluZ01vZGUpCi0gICAgICAgIHJldHVybjsKLQotICAg
IC8vIENoZWNrIGZvciBhIHZhbGlkIG1vZGUsIGN1cnJlbnRseSAiMSIsICIyIiwgb3IgIjMiLgot
ICAgIGlmICghY29kZVByb2ZpbGluZ01vZGVbMF0gfHwgY29kZVByb2ZpbGluZ01vZGVbMV0pCi0g
ICAgICAgIHJldHVybjsKLSAgICBzd2l0Y2ggKCpjb2RlUHJvZmlsaW5nTW9kZSkgewotICAgIGNh
c2UgJzEnOgotICAgICAgICBzX21vZGUgPSBFbmFibGVkOwotICAgICAgICBicmVhazsKLSAgICBj
YXNlICcyJzoKLSAgICAgICAgc19tb2RlID0gVmVyYm9zZTsKLSAgICAgICAgYnJlYWs7Ci0gICAg
Y2FzZSAnMyc6Ci0gICAgICAgIHNfbW9kZSA9IFZlcnlWZXJib3NlOwotICAgICAgICBicmVhazsK
LSAgICBkZWZhdWx0OgotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgQVNTRVJUKGVuYWJs
ZWQoKSk7Ci0gICAgQVNTRVJUKCFzX3RyYWNrZXIpOwotICAgIHNfdHJhY2tlciA9IG5ldyBXVEY6
Ok1ldGFBbGxvY2F0b3JUcmFja2VyKCk7Ci0gICAgYWxsb2NhdG9yLT50cmFja0FsbG9jYXRpb25z
KHNfdHJhY2tlcik7Ci19Ci0KLXZvaWQqIENvZGVQcm9maWxpbmc6OmdldE93bmVyVUlERm9yUEMo
dm9pZCogYWRkcmVzcykKLXsKLSAgICBpZiAoIXNfdHJhY2tlcikKLSAgICAgICAgcmV0dXJuIDA7
Ci0gICAgV1RGOjpNZXRhQWxsb2NhdG9ySGFuZGxlKiBoYW5kbGUgPSBzX3RyYWNrZXItPmZpbmQo
YWRkcmVzcyk7Ci0gICAgaWYgKCFoYW5kbGUpCi0gICAgICAgIHJldHVybiAwOwotICAgIHJldHVy
biBoYW5kbGUtPm93bmVyVUlEKCk7Ci19Ci0KLXZvaWQgQ29kZVByb2ZpbGluZzo6YmVnaW4oY29u
c3QgU291cmNlQ29kZSYgc291cmNlKQotewotICAgIC8vIFB1c2ggYSBuZXcgQ29kZVByb2ZpbGUg
b250byB0aGUgc3RhY2sgZm9yIGVhY2ggc2NyaXB0IGVuY291bnRlcmVkLgotICAgIENvZGVQcm9m
aWxlKiBwcm9maWxlU3RhY2sgPSBjb25zdF9jYXN0PENvZGVQcm9maWxlKj4oc19wcm9maWxlU3Rh
Y2spOwotICAgIGJvb2wgYWxyZWFkeVByb2ZpbGluZyA9IHByb2ZpbGVTdGFjazsKLSAgICBzX3By
b2ZpbGVTdGFjayA9IHByb2ZpbGVTdGFjayA9IG5ldyBDb2RlUHJvZmlsZShzb3VyY2UsIHByb2Zp
bGVTdGFjayk7Ci0KLSAgICAvLyBJcyB0aGUgcHJvZmlsZXIgYWxyZWFkeSBydW5uaW5nIC0gaWYg
c28sIHRoZSB0aW1lciB3aWxsIGFscmVhZHkgYmUgc2V0IHVwLgotICAgIGlmIChhbHJlYWR5UHJv
ZmlsaW5nKQotICAgICAgICByZXR1cm47Ci0KLSNpZiBIQVZFKE1BQ0hJTkVfQ09OVEVYVCkKLSAg
ICAvLyBSZWdzaXRlciBhIHNpZ25hbCBoYW5kbGVyICYgaXRpbWVyLgotICAgIHN0cnVjdCBzaWdh
Y3Rpb24gYWN0aW9uOwotICAgIGFjdGlvbi5zYV9zaWdhY3Rpb24gPSByZWludGVycHJldF9jYXN0
PHZvaWQgKCopKGludCwgc2lnaW5mb190ICosIHZvaWQgKik+KHByb2ZpbGluZ1RpbWVyKTsKLSAg
ICBzaWdmaWxsc2V0KCZhY3Rpb24uc2FfbWFzayk7Ci0gICAgYWN0aW9uLnNhX2ZsYWdzID0gU0Ff
U0lHSU5GTzsKLSAgICBzaWdhY3Rpb24oU0lHQUxSTSwgJmFjdGlvbiwgMCk7Ci0gICAgc2V0UHJv
ZmlsZVRpbWVyKDEwMCk7Ci0jZW5kaWYKLX0KLQotdm9pZCBDb2RlUHJvZmlsaW5nOjplbmQoKQot
ewotICAgIC8vIFBvcCB0aGUgY3VycmVudCBwcm9maWxlciBvZmYgdGhlIHN0YWNrLgotICAgIENv
ZGVQcm9maWxlKiBjdXJyZW50ID0gY29uc3RfY2FzdDxDb2RlUHJvZmlsZSo+KHNfcHJvZmlsZVN0
YWNrKTsKLSAgICBBU1NFUlQoY3VycmVudCk7Ci0gICAgc19wcm9maWxlU3RhY2sgPSBjdXJyZW50
LT5wYXJlbnQoKTsKLQotICAgIC8vIElzIHRoaXMgdGhlIG91dGVybW9zdCBzY3JpcHQgYmVpbmcg
cHJvZmlsZWQ/IC0gaWYgbm90LCBqdXN0IHJldHVybi4KLSAgICAvLyBXZSBwZXJmb3JtIGFsbCBv
dXRwdXQgb2YgcHJvZmlsZXMgcmVjdXJzaXZlbHkgZnJvbSB0aGUgb3V0ZXJtb3N0IHNjcmlwdCwK
LSAgICAvLyB0byBtaW5pbWl6ZSBwcm9maWxpbmcgb3ZlcmhlYWQgZnJvbSBza2V3aW5nIHJlc3Vs
dHMuCi0gICAgaWYgKHNfcHJvZmlsZVN0YWNrKQotICAgICAgICByZXR1cm47Ci0KLSNpZiBIQVZF
KE1BQ0hJTkVfQ09OVEVYVCkKLSAgICAvLyBTdG9wIHByb2ZpbGluZwotICAgIHNldFByb2ZpbGVU
aW1lcigwKTsKLSNlbmRpZgotCi0gICAgY3VycmVudC0+cmVwb3J0KCk7Ci0gICAgZGVsZXRlIGN1
cnJlbnQ7Ci19Ci0KLX0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90b29scy9Db2RlUHJv
ZmlsaW5nLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3Rvb2xzL0NvZGVQ
cm9maWxpbmcuaAkocmV2aXNpb24gMjU4MzUwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3Rv
b2xzL0NvZGVQcm9maWxpbmcuaAkobm9uZXhpc3RlbnQpCkBAIC0xLDgxICswLDAgQEAKLS8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoK
LSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFT
IElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
LSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQotI3ByYWdtYSBvbmNlCi0K
LW5hbWVzcGFjZSBXVEYgewotCi1jbGFzcyBNZXRhQWxsb2NhdG9yOwotY2xhc3MgTWV0YUFsbG9j
YXRvclRyYWNrZXI7Ci0KLX0KLQotbmFtZXNwYWNlIEpTQyB7Ci0KLWNsYXNzIENvZGVQcm9maWxl
OwotY2xhc3MgU291cmNlQ29kZTsKLQotY2xhc3MgQ29kZVByb2ZpbGluZyB7Ci0gICAgZW51bSBN
b2RlIHsKLSAgICAgICAgRGlzYWJsZWQsCi0gICAgICAgIEVuYWJsZWQsCi0gICAgICAgIFZlcmJv
c2UsCi0gICAgICAgIFZlcnlWZXJib3NlCi0gICAgfTsKLQotcHVibGljOgotICAgIENvZGVQcm9m
aWxpbmcoY29uc3QgU291cmNlQ29kZSYgc291cmNlKQotICAgICAgICA6IG1fYWN0aXZlKGVuYWJs
ZWQoKSkKLSAgICB7Ci0gICAgICAgIGlmIChtX2FjdGl2ZSkKLSAgICAgICAgICAgIGJlZ2luKHNv
dXJjZSk7Ci0gICAgfQotCi0gICAgfkNvZGVQcm9maWxpbmcoKQotICAgIHsKLSAgICAgICAgaWYg
KG1fYWN0aXZlKQotICAgICAgICAgICAgZW5kKCk7Ci0gICAgfQotCi0gICAgc3RhdGljIGJvb2wg
ZW5hYmxlZCgpIHsgcmV0dXJuIHNfbW9kZSAhPSBEaXNhYmxlZDsgfQotICAgIHN0YXRpYyBib29s
IGJlVmVyYm9zZSgpIHsgcmV0dXJuIHNfbW9kZSA+PSBWZXJib3NlOyB9Ci0gICAgc3RhdGljIGJv
b2wgYmVWZXJ5VmVyYm9zZSgpIHsgcmV0dXJuIHNfbW9kZSA+PSBWZXJ5VmVyYm9zZTsgfQotCi0g
ICAgc3RhdGljIHZvaWQgbm90aWZ5QWxsb2NhdG9yKFdURjo6TWV0YUFsbG9jYXRvciopOwotICAg
IHN0YXRpYyB2b2lkKiBnZXRPd25lclVJREZvclBDKHZvaWQqKTsKLSAgICBzdGF0aWMgdm9pZCBz
YW1wbGUodm9pZCogcGMsIHZvaWQqKiBmcmFtZVBvaW50ZXIpOwotCi1wcml2YXRlOgotICAgIHZv
aWQgYmVnaW4oY29uc3QgU291cmNlQ29kZSYpOwotICAgIHZvaWQgZW5kKCk7Ci0KLSAgICBib29s
IG1fYWN0aXZlOwotCi0gICAgc3RhdGljIE1vZGUgc19tb2RlOwotICAgIHN0YXRpYyBXVEY6Ok1l
dGFBbGxvY2F0b3JUcmFja2VyKiBzX3RyYWNrZXI7Ci0gICAgc3RhdGljIHZvbGF0aWxlIENvZGVQ
cm9maWxlKiBzX3Byb2ZpbGVTdGFjazsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUJCUVBsYW4uY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21CQlFQbGFuLmNwcAkocmV2aXNpb24gMjU4
MzUwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUJCUVBsYW4uY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xMzIsMTMgKzEzMiw5IEBAIHZvaWQgQkJRUGxhbjo6d29yayhDb21waWxh
dGlvbkVmZm9ydCBlZmYKICAgICAgICAgLy8gd2lsbCB1cGRhdGUuIEl0J3MgYWxzbyBvayBpZiB0
aGV5IHB1Ymxpc2ggdGhlaXIgY29kZSBiZWZvcmUgd2UgcmVzZXQgdGhlIGluc3RydWN0aW9uIGNh
Y2hlcyBiZWNhdXNlIGFmdGVyIHdlIHJlbGVhc2UKICAgICAgICAgLy8gdGhlIGxvY2sgb3VyIGNv
ZGUgaXMgcmVhZHkgdG8gYmUgcHVibGlzaGVkIHRvby4KICAgICAgICAgTG9ja0hvbGRlciBob2xk
ZXIobV9jb2RlQmxvY2stPm1fbG9jayk7CisKICAgICAgICAgbV9jb2RlQmxvY2stPm1fYmJxQ2Fs
bGVlc1ttX2Z1bmN0aW9uSW5kZXhdID0gY2FsbGVlLmNvcHlSZWYoKTsKLSAgICAgICAgewotICAg
ICAgICAgICAgTExJbnRDYWxsZWUmIGxsaW50Q2FsbGVlID0gbV9jb2RlQmxvY2stPm1fbGxpbnRD
YWxsZWVzLT5hdChtX2Z1bmN0aW9uSW5kZXgpLmdldCgpOwotICAgICAgICAgICAgYXV0byBsb2Nr
ZXIgPSBob2xkTG9jayhsbGludENhbGxlZS50aWVyVXBDb3VudGVyKCkubV9sb2NrKTsKLSAgICAg
ICAgICAgIGxsaW50Q2FsbGVlLnNldFJlcGxhY2VtZW50KGNhbGxlZS5jb3B5UmVmKCkpOwotICAg
ICAgICAgICAgbGxpbnRDYWxsZWUudGllclVwQ291bnRlcigpLm1fY29tcGlsYXRpb25TdGF0dXMg
PSBMTEludFRpZXJVcENvdW50ZXI6OkNvbXBpbGF0aW9uU3RhdHVzOjpDb21waWxlZDsKLSAgICAg
ICAgfQorCiAgICAgICAgIGZvciAoYXV0byYgY2FsbCA6IGNhbGxlZS0+d2FzbVRvV2FzbUNhbGxz
aXRlcygpKSB7CiAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8V2FzbUVudHJ5UHRy
VGFnPiBlbnRyeXBvaW50OwogICAgICAgICAgICAgaWYgKGNhbGwuZnVuY3Rpb25JbmRleFNwYWNl
IDwgbV9tb2R1bGVJbmZvcm1hdGlvbi0+aW1wb3J0RnVuY3Rpb25Db3VudCgpKQpAQCAtMTQ4LDI0
ICsxNDQsNDggQEAgdm9pZCBCQlFQbGFuOjp3b3JrKENvbXBpbGF0aW9uRWZmb3J0IGVmZgogCiAg
ICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6cmVwYXRjaE5lYXJDYWxsKGNhbGwuY2FsbExvY2F0
aW9uLCBDb2RlTG9jYXRpb25MYWJlbDxXYXNtRW50cnlQdHJUYWc+KGVudHJ5cG9pbnQpKTsKICAg
ICAgICAgfQotICAgIH0KIAotICAgIC8vIEl0J3MgaW1wb3J0YW50IHRvIG1ha2Ugc3VyZSB3ZSBk
byB0aGlzIGJlZm9yZSB3ZSBtYWtlIGFueSBvZiB0aGUgY29kZSB3ZSBqdXN0IGNvbXBpbGVkIHZp
c2libGUuIElmIHdlIGRpZG4ndCwgd2UgY291bGQgZW5kIHVwCi0gICAgLy8gd2hlcmUgd2UgYXJl
IHRpZXJpbmcgdXAgc29tZSBmdW5jdGlvbiBBIHRvIEEnIGFuZCB3ZSByZXBhdGNoIHNvbWUgZnVu
Y3Rpb24gQiB0byBjYWxsIEEnIGluc3RlYWQgb2YgQS4gQW5vdGhlciBDUFUgY291bGQgc2VlCi0g
ICAgLy8gdGhlIHVwZGF0ZXMgdG8gQiBidXQgc3RpbGwgbm90IGhhdmUgcmVzZXQgaXRzIGNhY2hl
IG9mIEEnLCB3aGljaCB3b3VsZCBsZWFkIHRvIGFsbCBraW5kcyBvZiBiYWRuZXNzLgotICAgIHJl
c2V0SW5zdHJ1Y3Rpb25DYWNoZU9uQWxsVGhyZWFkcygpOwotICAgIFdURjo6c3RvcmVTdG9yZUZl
bmNlKCk7IC8vIFRoaXMgcHJvYmFibHkgaXNuJ3QgbmVjZXNzYXJ5IGJ1dCBpdCdzIGdvb2QgdG8g
YmUgcGFyYW5vaWQuCisgICAgICAgIEhhc2hNYXA8dm9pZCosIENvZGVMb2NhdGlvbkxhYmVsPFdh
c21FbnRyeVB0clRhZz4+IHN0YWdlZENhbGxzOworICAgICAgICBhdXRvIHN0YWdlUmVwYXRjaCA9
IFsmXSAoY29uc3QgVmVjdG9yPFVubGlua2VkV2FzbVRvV2FzbUNhbGw+JiBjYWxsc2l0ZXMpIHsK
KyAgICAgICAgICAgIGZvciAoYXV0byYgY2FsbCA6IGNhbGxzaXRlcykgeworICAgICAgICAgICAg
ICAgIGlmIChjYWxsLmZ1bmN0aW9uSW5kZXhTcGFjZSA9PSBmdW5jdGlvbkluZGV4U3BhY2UpIHsK
KyAgICAgICAgICAgICAgICAgICAgQ29kZUxvY2F0aW9uTGFiZWw8V2FzbUVudHJ5UHRyVGFnPiB0
YXJnZXQgPSBNYWNyb0Fzc2VtYmxlcjo6cHJlcGFyZUZvckF0b21pY1JlcGF0Y2hOZWFyQ2FsbENv
bmN1cnJlbnRseShjYWxsLmNhbGxMb2NhdGlvbiwgQ29kZUxvY2F0aW9uTGFiZWw8V2FzbUVudHJ5
UHRyVGFnPihlbnRyeXBvaW50KSk7CisgICAgICAgICAgICAgICAgICAgIHN0YWdlZENhbGxzLmFk
ZChjYWxsLmNhbGxMb2NhdGlvbi5kYXRhTG9jYXRpb24oKSwgdGFyZ2V0KTsKKyAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH07CiAKLSAgICBtX2NvZGVCbG9jay0+bV93
YXNtSW5kaXJlY3RDYWxsRW50cnlQb2ludHNbbV9mdW5jdGlvbkluZGV4XSA9IGVudHJ5cG9pbnQ7
Ci0gICAgewotICAgICAgICBMb2NrSG9sZGVyIGhvbGRlcihtX2NvZGVCbG9jay0+bV9sb2NrKTsK
KyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fY29kZUJsb2NrLT5tX3dhc21Ub1dh
c21DYWxsc2l0ZXMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgICAgIHN0YWdlUmVwYXRjaChtX2Nv
ZGVCbG9jay0+bV93YXNtVG9XYXNtQ2FsbHNpdGVzW2ldKTsKKyAgICAgICAgICAgIGlmIChtX2Nv
ZGVCbG9jay0+bV9sbGludENhbGxlZXMpIHsKKyAgICAgICAgICAgICAgICBMTEludENhbGxlZSYg
bGxpbnRDYWxsZWUgPSBtX2NvZGVCbG9jay0+bV9sbGludENhbGxlZXMtPmF0KGkpLmdldCgpOwor
ICAgICAgICAgICAgICAgIGlmIChKSVRDYWxsZWUqIHJlcGxhY2VtZW50Q2FsbGVlID0gbGxpbnRD
YWxsZWUucmVwbGFjZW1lbnQoKSkKKyAgICAgICAgICAgICAgICAgICAgc3RhZ2VSZXBhdGNoKHJl
cGxhY2VtZW50Q2FsbGVlLT53YXNtVG9XYXNtQ2FsbHNpdGVzKCkpOworICAgICAgICAgICAgICAg
IGlmIChPTUdGb3JPU1JFbnRyeUNhbGxlZSogb3NyRW50cnlDYWxsZWUgPSBsbGludENhbGxlZS5v
c3JFbnRyeUNhbGxlZSgpKQorICAgICAgICAgICAgICAgICAgICBzdGFnZVJlcGF0Y2gob3NyRW50
cnlDYWxsZWUtPndhc21Ub1dhc21DYWxsc2l0ZXMoKSk7CisgICAgICAgICAgICB9CisgICAgICAg
ICAgICBpZiAoQkJRQ2FsbGVlKiBiYnFDYWxsZWUgPSBtX2NvZGVCbG9jay0+bV9iYnFDYWxsZWVz
W2ldLmdldCgpKSB7CisgICAgICAgICAgICAgICAgaWYgKE9NR0NhbGxlZSogcmVwbGFjZW1lbnRD
YWxsZWUgPSBiYnFDYWxsZWUtPnJlcGxhY2VtZW50KCkpCisgICAgICAgICAgICAgICAgICAgIHN0
YWdlUmVwYXRjaChyZXBsYWNlbWVudENhbGxlZS0+d2FzbVRvV2FzbUNhbGxzaXRlcygpKTsKKyAg
ICAgICAgICAgICAgICBpZiAoT01HRm9yT1NSRW50cnlDYWxsZWUqIG9zckVudHJ5Q2FsbGVlID0g
YmJxQ2FsbGVlLT5vc3JFbnRyeUNhbGxlZSgpKQorICAgICAgICAgICAgICAgICAgICBzdGFnZVJl
cGF0Y2gob3NyRW50cnlDYWxsZWUtPndhc21Ub1dhc21DYWxsc2l0ZXMoKSk7CisgICAgICAgICAg
ICB9CisgICAgICAgIH0KKworICAgICAgICAvLyBJdCdzIGltcG9ydGFudCB0byBtYWtlIHN1cmUg
d2UgZG8gdGhpcyBiZWZvcmUgd2UgbWFrZSBhbnkgb2YgdGhlIGNvZGUgd2UganVzdCBjb21waWxl
ZCB2aXNpYmxlLiBJZiB3ZSBkaWRuJ3QsIHdlIGNvdWxkIGVuZCB1cAorICAgICAgICAvLyB3aGVy
ZSB3ZSBhcmUgdGllcmluZyB1cCBzb21lIGZ1bmN0aW9uIEEgdG8gQScgYW5kIHdlIHJlcGF0Y2gg
c29tZSBmdW5jdGlvbiBCIHRvIGNhbGwgQScgaW5zdGVhZCBvZiBBLiBBbm90aGVyIENQVSBjb3Vs
ZCBzZWUKKyAgICAgICAgLy8gdGhlIHVwZGF0ZXMgdG8gQiBidXQgc3RpbGwgbm90IGhhdmUgcmVz
ZXQgaXRzIGNhY2hlIG9mIEEnLCB3aGljaCB3b3VsZCBsZWFkIHRvIGFsbCBraW5kcyBvZiBiYWRu
ZXNzLgorICAgICAgICByZXNldEluc3RydWN0aW9uQ2FjaGVPbkFsbFRocmVhZHMoKTsKKyAgICAg
ICAgV1RGOjpzdG9yZVN0b3JlRmVuY2UoKTsgLy8gVGhpcyBwcm9iYWJseSBpc24ndCBuZWNlc3Nh
cnkgYnV0IGl0J3MgZ29vZCB0byBiZSBwYXJhbm9pZC4KKworICAgICAgICBtX2NvZGVCbG9jay0+
bV93YXNtSW5kaXJlY3RDYWxsRW50cnlQb2ludHNbbV9mdW5jdGlvbkluZGV4XSA9IGVudHJ5cG9p
bnQ7CiAKICAgICAgICAgYXV0byByZXBhdGNoQ2FsbHMgPSBbJl0gKGNvbnN0IFZlY3RvcjxVbmxp
bmtlZFdhc21Ub1dhc21DYWxsPiYgY2FsbHNpdGVzKSB7CiAgICAgICAgICAgICBmb3IgKGF1dG8m
IGNhbGwgOiBjYWxsc2l0ZXMpIHsKICAgICAgICAgICAgICAgICBkYXRhTG9nTG5JZihXYXNtQkJR
UGxhbkludGVybmFsOjp2ZXJib3NlLCAiQ29uc2lkZXJpbmcgcmVwYXRjaGluZyBjYWxsIGF0OiAi
LCBSYXdQb2ludGVyKGNhbGwuY2FsbExvY2F0aW9uLmRhdGFMb2NhdGlvbigpKSwgIiB0aGF0IHRh
cmdldHMgIiwgY2FsbC5mdW5jdGlvbkluZGV4U3BhY2UpOwogICAgICAgICAgICAgICAgIGlmIChj
YWxsLmZ1bmN0aW9uSW5kZXhTcGFjZSA9PSBmdW5jdGlvbkluZGV4U3BhY2UpIHsKICAgICAgICAg
ICAgICAgICAgICAgZGF0YUxvZ0xuSWYoV2FzbUJCUVBsYW5JbnRlcm5hbDo6dmVyYm9zZSwgIlJl
cGF0Y2hpbmcgY2FsbCBhdDogIiwgUmF3UG9pbnRlcihjYWxsLmNhbGxMb2NhdGlvbi5kYXRhTG9j
YXRpb24oKSksICIgdG8gIiwgUmF3UG9pbnRlcihlbnRyeXBvaW50LmV4ZWN1dGFibGVBZGRyZXNz
KCkpKTsKLSAgICAgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OnJlcGF0Y2hOZWFyQ2Fs
bChjYWxsLmNhbGxMb2NhdGlvbiwgQ29kZUxvY2F0aW9uTGFiZWw8V2FzbUVudHJ5UHRyVGFnPihl
bnRyeXBvaW50KSk7CisgICAgICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpyZXBhdGNo
TmVhckNhbGwoY2FsbC5jYWxsTG9jYXRpb24sIHN0YWdlZENhbGxzLmdldChjYWxsLmNhbGxMb2Nh
dGlvbi5kYXRhTG9jYXRpb24oKSkpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0K
ICAgICAgICAgfTsKQEAgLTE4NiwxMSArMjA2LDE3IEBAIHZvaWQgQkJRUGxhbjo6d29yayhDb21w
aWxhdGlvbkVmZm9ydCBlZmYKICAgICAgICAgICAgICAgICAgICAgcmVwYXRjaENhbGxzKG9zckVu
dHJ5Q2FsbGVlLT53YXNtVG9XYXNtQ2FsbHNpdGVzKCkpOwogICAgICAgICAgICAgfQogICAgICAg
ICB9CisKKyAgICAgICAgeworICAgICAgICAgICAgTExJbnRDYWxsZWUmIGxsaW50Q2FsbGVlID0g
bV9jb2RlQmxvY2stPm1fbGxpbnRDYWxsZWVzLT5hdChtX2Z1bmN0aW9uSW5kZXgpLmdldCgpOwor
ICAgICAgICAgICAgYXV0byBsb2NrZXIgPSBob2xkTG9jayhsbGludENhbGxlZS50aWVyVXBDb3Vu
dGVyKCkubV9sb2NrKTsKKyAgICAgICAgICAgIGxsaW50Q2FsbGVlLnNldFJlcGxhY2VtZW50KGNh
bGxlZS5jb3B5UmVmKCkpOworICAgICAgICAgICAgbGxpbnRDYWxsZWUudGllclVwQ291bnRlcigp
Lm1fY29tcGlsYXRpb25TdGF0dXMgPSBMTEludFRpZXJVcENvdW50ZXI6OkNvbXBpbGF0aW9uU3Rh
dHVzOjpDb21waWxlZDsKKyAgICAgICAgfQogICAgIH0KIAogICAgIGRhdGFMb2dMbklmKFdhc21C
QlFQbGFuSW50ZXJuYWw6OnZlcmJvc2UsICJGaW5pc2hlZCBCQlEgIiwgbV9mdW5jdGlvbkluZGV4
KTsKIAotCiAgICAgYXV0byBsb2NrZXIgPSBob2xkTG9jayhtX2xvY2spOwogICAgIG1vdmVUb1N0
YXRlKFN0YXRlOjpDb21wbGV0ZWQpOwogICAgIHJ1bkNvbXBsZXRpb25UYXNrcyhsb2NrZXIpOwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU9NR0Zvck9TUkVudHJ5UGxhbi5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU9NR0Zvck9T
UkVudHJ5UGxhbi5jcHAJKHJldmlzaW9uIDI1ODM1MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS93YXNtL1dhc21PTUdGb3JPU1JFbnRyeVBsYW4uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDMs
MTIgKzEwMywxMCBAQCB2b2lkIE9NR0Zvck9TUkVudHJ5UGxhbjo6d29yayhDb21waWxhdGlvCiAK
ICAgICBvbWdFbnRyeXBvaW50LmNhbGxlZVNhdmVSZWdpc3RlcnMgPSBXVEZNb3ZlKHBhcnNlQW5k
Q29tcGlsZVJlc3VsdC52YWx1ZSgpLT5lbnRyeXBvaW50LmNhbGxlZVNhdmVSZWdpc3RlcnMpOwog
Ci0gICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPFdhc21FbnRyeVB0clRhZz4gZW50cnlwb2ludDsK
ICAgICBBU1NFUlQobV9jb2RlQmxvY2sucHRyKCkgPT0gbV9tb2R1bGUtPmNvZGVCbG9ja0Zvciht
b2RlKCkpKTsKICAgICBSZWY8T01HRm9yT1NSRW50cnlDYWxsZWU+IGNhbGxlZSA9IE9NR0Zvck9T
UkVudHJ5Q2FsbGVlOjpjcmVhdGUoV1RGTW92ZShvbWdFbnRyeXBvaW50KSwgZnVuY3Rpb25JbmRl
eFNwYWNlLCBtX21vZHVsZUluZm9ybWF0aW9uLT5uYW1lU2VjdGlvbi0+Z2V0KGZ1bmN0aW9uSW5k
ZXhTcGFjZSksIG9zckVudHJ5U2NyYXRjaEJ1ZmZlclNpemUsIG1fbG9vcEluZGV4LCBXVEZNb3Zl
KHVubGlua2VkQ2FsbHMpKTsKICAgICB7CiAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpyZXBhdGNo
UG9pbnRlcihwYXJzZUFuZENvbXBpbGVSZXN1bHQudmFsdWUoKS0+Y2FsbGVlTW92ZUxvY2F0aW9u
LCBDYWxsZWVCaXRzOjpib3hXYXNtKGNhbGxlZS5wdHIoKSkpOwotICAgICAgICBlbnRyeXBvaW50
ID0gY2FsbGVlLT5lbnRyeXBvaW50KCk7CiAKICAgICAgICAgYXV0byBsb2NrZXIgPSBob2xkTG9j
ayhtX2NvZGVCbG9jay0+bV9sb2NrKTsKICAgICAgICAgZm9yIChhdXRvJiBjYWxsIDogY2FsbGVl
LT53YXNtVG9XYXNtQ2FsbHNpdGVzKCkpIHsKQEAgLTEyMCwxMSArMTE4LDEwIEBAIHZvaWQgT01H
Rm9yT1NSRW50cnlQbGFuOjp3b3JrKENvbXBpbGF0aW8KIAogICAgICAgICAgICAgTWFjcm9Bc3Nl
bWJsZXI6OnJlcGF0Y2hOZWFyQ2FsbChjYWxsLmNhbGxMb2NhdGlvbiwgQ29kZUxvY2F0aW9uTGFi
ZWw8V2FzbUVudHJ5UHRyVGFnPihlbnRyeXBvaW50KSk7CiAgICAgICAgIH0KLSAgICB9Ci0gICAg
cmVzZXRJbnN0cnVjdGlvbkNhY2hlT25BbGxUaHJlYWRzKCk7Ci0gICAgV1RGOjpzdG9yZVN0b3Jl
RmVuY2UoKTsKLSAgICB7Ci0gICAgICAgIGF1dG8gbG9ja2VyID0gaG9sZExvY2sobV9jb2RlQmxv
Y2stPm1fbG9jayk7CisKKyAgICAgICAgcmVzZXRJbnN0cnVjdGlvbkNhY2hlT25BbGxUaHJlYWRz
KCk7CisgICAgICAgIFdURjo6c3RvcmVTdG9yZUZlbmNlKCk7CisKICAgICAgICAgewogICAgICAg
ICAgICAgc3dpdGNoIChtX2NhbGxlZS0+Y29tcGlsYXRpb25Nb2RlKCkpIHsKICAgICAgICAgICAg
IGNhc2UgQ29tcGlsYXRpb25Nb2RlOjpMTEludE1vZGU6IHsKQEAgLTE0NiwxOSArMTQzLDYgQEAg
dm9pZCBPTUdGb3JPU1JFbnRyeVBsYW46OndvcmsoQ29tcGlsYXRpbwogICAgICAgICAgICAgICAg
IFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0K
LSAgICAgICAgV1RGOjpzdG9yZVN0b3JlRmVuY2UoKTsKLSAgICAgICAgLy8gSXQgaXMgcG9zc2li
bGUgdGhhdCBhIG5ldyBPTUcgY2FsbGVlIGlzIGFkZGVkIHdoaWxlIHdlIHJlbGVhc2UgbV9jb2Rl
QmxvY2stPmxvY2suCi0gICAgICAgIC8vIFVudGlsIHdlIGFkZCBPTUdGb3JPU1JFbnRyeSBjYWxs
ZWUgdG8gQkJRQ2FsbGVlJ3MgbV9vc3JFbnRyeUNhbGxlZSwgdGhpcyBuZXcgT01HIGZ1bmN0aW9u
IGxpbmtpbmcgZG9lcyBub3QgaGFwcGVuIGZvciB0aGlzIE9NR0Zvck9TUkVudHJ5IGNhbGxlZS4K
LSAgICAgICAgLy8gV2UgcmUtbGluayB0aGlzIE9NR0Zvck9TUkVudHJ5IGNhbGxlZSBhZ2FpbiBu
b3QgdG8gbWlzcyB0aGF0IGNoYW5jZS4KLSAgICAgICAgZm9yIChhdXRvJiBjYWxsIDogY2FsbGVl
LT53YXNtVG9XYXNtQ2FsbHNpdGVzKCkpIHsKLSAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyQ29k
ZVB0cjxXYXNtRW50cnlQdHJUYWc+IGVudHJ5cG9pbnQ7Ci0gICAgICAgICAgICBpZiAoY2FsbC5m
dW5jdGlvbkluZGV4U3BhY2UgPCBtX21vZHVsZS0+bW9kdWxlSW5mb3JtYXRpb24oKS5pbXBvcnRG
dW5jdGlvbkNvdW50KCkpCi0gICAgICAgICAgICAgICAgZW50cnlwb2ludCA9IG1fY29kZUJsb2Nr
LT5tX3dhc21Ub1dhc21FeGl0U3R1YnNbY2FsbC5mdW5jdGlvbkluZGV4U3BhY2VdLmNvZGUoKTsK
LSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBlbnRyeXBvaW50ID0gbV9jb2RlQmxv
Y2stPndhc21FbnRyeXBvaW50Q2FsbGVlRnJvbUZ1bmN0aW9uSW5kZXhTcGFjZShjYWxsLmZ1bmN0
aW9uSW5kZXhTcGFjZSkuZW50cnlwb2ludCgpLnJldGFnZ2VkPFdhc21FbnRyeVB0clRhZz4oKTsK
LQotICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OnJlcGF0Y2hOZWFyQ2FsbChjYWxsLmNhbGxM
b2NhdGlvbiwgQ29kZUxvY2F0aW9uTGFiZWw8V2FzbUVudHJ5UHRyVGFnPihlbnRyeXBvaW50KSk7
Ci0gICAgICAgIH0KICAgICB9CiAgICAgZGF0YUxvZ0xuSWYoV2FzbU9NR0Zvck9TUkVudHJ5UGxh
bkludGVybmFsOjp2ZXJib3NlLCAiRmluaXNoZWQgT01HRm9yT1NSRW50cnkgIiwgbV9mdW5jdGlv
bkluZGV4KTsKICAgICBjb21wbGV0ZShob2xkTG9jayhtX2xvY2spKTsKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS93YXNtL1dhc21PTUdQbGFuLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtT01HUGxhbi5jcHAJKHJldmlzaW9uIDI1ODM1MCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21PTUdQbGFuLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMTE0LDIwICsxMTQsOSBAQCB2b2lkIE9NR1BsYW46OndvcmsoQ29tcGlsYXRpb25FZmZv
cnQpCiAgICAgICAgIC8vIHdpbGwgdXBkYXRlLiBJdCdzIGFsc28gb2sgaWYgdGhleSBwdWJsaXNo
IHRoZWlyIGNvZGUgYmVmb3JlIHdlIHJlc2V0IHRoZSBpbnN0cnVjdGlvbiBjYWNoZXMgYmVjYXVz
ZSBhZnRlciB3ZSByZWxlYXNlCiAgICAgICAgIC8vIHRoZSBsb2NrIG91ciBjb2RlIGlzIHJlYWR5
IHRvIGJlIHB1Ymxpc2hlZCB0b28uCiAgICAgICAgIExvY2tIb2xkZXIgaG9sZGVyKG1fY29kZUJs
b2NrLT5tX2xvY2spOworCiAgICAgICAgIG1fY29kZUJsb2NrLT5tX29tZ0NhbGxlZXNbbV9mdW5j
dGlvbkluZGV4XSA9IGNhbGxlZS5jb3B5UmVmKCk7Ci0gICAgICAgIHsKLSAgICAgICAgICAgIGlm
IChCQlFDYWxsZWUqIGJicUNhbGxlZSA9IG1fY29kZUJsb2NrLT5tX2JicUNhbGxlZXNbbV9mdW5j
dGlvbkluZGV4XS5nZXQoKSkgewotICAgICAgICAgICAgICAgIGF1dG8gbG9ja2VyID0gaG9sZExv
Y2soYmJxQ2FsbGVlLT50aWVyVXBDb3VudCgpLT5nZXRMb2NrKCkpOwotICAgICAgICAgICAgICAg
IGJicUNhbGxlZS0+c2V0UmVwbGFjZW1lbnQoY2FsbGVlLmNvcHlSZWYoKSk7Ci0gICAgICAgICAg
ICAgICAgYmJxQ2FsbGVlLT50aWVyVXBDb3VudCgpLT5tX2NvbXBpbGF0aW9uU3RhdHVzRm9yT01H
ID0gVGllclVwQ291bnQ6OkNvbXBpbGF0aW9uU3RhdHVzOjpDb21waWxlZDsKLSAgICAgICAgICAg
IH0KLSAgICAgICAgICAgIGlmIChtX2NvZGVCbG9jay0+bV9sbGludENhbGxlZXMpIHsKLSAgICAg
ICAgICAgICAgICBMTEludENhbGxlZSYgbGxpbnRDYWxsZWUgPSBtX2NvZGVCbG9jay0+bV9sbGlu
dENhbGxlZXMtPmF0KG1fZnVuY3Rpb25JbmRleCkuZ2V0KCk7Ci0gICAgICAgICAgICAgICAgYXV0
byBsb2NrZXIgPSBob2xkTG9jayhsbGludENhbGxlZS50aWVyVXBDb3VudGVyKCkubV9sb2NrKTsK
LSAgICAgICAgICAgICAgICBsbGludENhbGxlZS5zZXRSZXBsYWNlbWVudChjYWxsZWUuY29weVJl
ZigpKTsKLSAgICAgICAgICAgICAgICBsbGludENhbGxlZS50aWVyVXBDb3VudGVyKCkubV9jb21w
aWxhdGlvblN0YXR1cyA9IExMSW50VGllclVwQ291bnRlcjo6Q29tcGlsYXRpb25TdGF0dXM6OkNv
bXBpbGVkOwotICAgICAgICAgICAgfQotICAgICAgICB9CisKICAgICAgICAgZm9yIChhdXRvJiBj
YWxsIDogY2FsbGVlLT53YXNtVG9XYXNtQ2FsbHNpdGVzKCkpIHsKICAgICAgICAgICAgIE1hY3Jv
QXNzZW1ibGVyQ29kZVB0cjxXYXNtRW50cnlQdHJUYWc+IGVudHJ5cG9pbnQ7CiAgICAgICAgICAg
ICBpZiAoY2FsbC5mdW5jdGlvbkluZGV4U3BhY2UgPCBtX21vZHVsZS0+bW9kdWxlSW5mb3JtYXRp
b24oKS5pbXBvcnRGdW5jdGlvbkNvdW50KCkpCkBAIC0xMzcsMjQgKzEyNiw0NyBAQCB2b2lkIE9N
R1BsYW46OndvcmsoQ29tcGlsYXRpb25FZmZvcnQpCiAKICAgICAgICAgICAgIE1hY3JvQXNzZW1i
bGVyOjpyZXBhdGNoTmVhckNhbGwoY2FsbC5jYWxsTG9jYXRpb24sIENvZGVMb2NhdGlvbkxhYmVs
PFdhc21FbnRyeVB0clRhZz4oZW50cnlwb2ludCkpOwogICAgICAgICB9Ci0gICAgfQogCi0gICAg
Ly8gSXQncyBpbXBvcnRhbnQgdG8gbWFrZSBzdXJlIHdlIGRvIHRoaXMgYmVmb3JlIHdlIG1ha2Ug
YW55IG9mIHRoZSBjb2RlIHdlIGp1c3QgY29tcGlsZWQgdmlzaWJsZS4gSWYgd2UgZGlkbid0LCB3
ZSBjb3VsZCBlbmQgdXAKLSAgICAvLyB3aGVyZSB3ZSBhcmUgdGllcmluZyB1cCBzb21lIGZ1bmN0
aW9uIEEgdG8gQScgYW5kIHdlIHJlcGF0Y2ggc29tZSBmdW5jdGlvbiBCIHRvIGNhbGwgQScgaW5z
dGVhZCBvZiBBLiBBbm90aGVyIENQVSBjb3VsZCBzZWUKLSAgICAvLyB0aGUgdXBkYXRlcyB0byBC
IGJ1dCBzdGlsbCBub3QgaGF2ZSByZXNldCBpdHMgY2FjaGUgb2YgQScsIHdoaWNoIHdvdWxkIGxl
YWQgdG8gYWxsIGtpbmRzIG9mIGJhZG5lc3MuCi0gICAgcmVzZXRJbnN0cnVjdGlvbkNhY2hlT25B
bGxUaHJlYWRzKCk7Ci0gICAgV1RGOjpzdG9yZVN0b3JlRmVuY2UoKTsgLy8gVGhpcyBwcm9iYWJs
eSBpc24ndCBuZWNlc3NhcnkgYnV0IGl0J3MgZ29vZCB0byBiZSBwYXJhbm9pZC4KKyAgICAgICAg
SGFzaE1hcDx2b2lkKiwgQ29kZUxvY2F0aW9uTGFiZWw8V2FzbUVudHJ5UHRyVGFnPj4gc3RhZ2Vk
Q2FsbHM7CisgICAgICAgIGF1dG8gc3RhZ2VSZXBhdGNoID0gWyZdIChjb25zdCBWZWN0b3I8VW5s
aW5rZWRXYXNtVG9XYXNtQ2FsbD4mIGNhbGxzaXRlcykgeworICAgICAgICAgICAgZm9yIChhdXRv
JiBjYWxsIDogY2FsbHNpdGVzKSB7CisgICAgICAgICAgICAgICAgaWYgKGNhbGwuZnVuY3Rpb25J
bmRleFNwYWNlID09IGZ1bmN0aW9uSW5kZXhTcGFjZSkgeworICAgICAgICAgICAgICAgICAgICBD
b2RlTG9jYXRpb25MYWJlbDxXYXNtRW50cnlQdHJUYWc+IHRhcmdldCA9IE1hY3JvQXNzZW1ibGVy
OjpwcmVwYXJlRm9yQXRvbWljUmVwYXRjaE5lYXJDYWxsQ29uY3VycmVudGx5KGNhbGwuY2FsbExv
Y2F0aW9uLCBDb2RlTG9jYXRpb25MYWJlbDxXYXNtRW50cnlQdHJUYWc+KGVudHJ5cG9pbnQpKTsK
KyAgICAgICAgICAgICAgICAgICAgc3RhZ2VkQ2FsbHMuYWRkKGNhbGwuY2FsbExvY2F0aW9uLmRh
dGFMb2NhdGlvbigpLCB0YXJnZXQpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0K
KyAgICAgICAgfTsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fY29kZUJsb2Nr
LT5tX3dhc21Ub1dhc21DYWxsc2l0ZXMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgICAgIHN0YWdl
UmVwYXRjaChtX2NvZGVCbG9jay0+bV93YXNtVG9XYXNtQ2FsbHNpdGVzW2ldKTsKKyAgICAgICAg
ICAgIGlmIChtX2NvZGVCbG9jay0+bV9sbGludENhbGxlZXMpIHsKKyAgICAgICAgICAgICAgICBM
TEludENhbGxlZSYgbGxpbnRDYWxsZWUgPSBtX2NvZGVCbG9jay0+bV9sbGludENhbGxlZXMtPmF0
KGkpLmdldCgpOworICAgICAgICAgICAgICAgIGlmIChKSVRDYWxsZWUqIHJlcGxhY2VtZW50Q2Fs
bGVlID0gbGxpbnRDYWxsZWUucmVwbGFjZW1lbnQoKSkKKyAgICAgICAgICAgICAgICAgICAgc3Rh
Z2VSZXBhdGNoKHJlcGxhY2VtZW50Q2FsbGVlLT53YXNtVG9XYXNtQ2FsbHNpdGVzKCkpOworICAg
ICAgICAgICAgICAgIGlmIChPTUdGb3JPU1JFbnRyeUNhbGxlZSogb3NyRW50cnlDYWxsZWUgPSBs
bGludENhbGxlZS5vc3JFbnRyeUNhbGxlZSgpKQorICAgICAgICAgICAgICAgICAgICBzdGFnZVJl
cGF0Y2gob3NyRW50cnlDYWxsZWUtPndhc21Ub1dhc21DYWxsc2l0ZXMoKSk7CisgICAgICAgICAg
ICB9CisgICAgICAgICAgICBpZiAoQkJRQ2FsbGVlKiBiYnFDYWxsZWUgPSBtX2NvZGVCbG9jay0+
bV9iYnFDYWxsZWVzW2ldLmdldCgpKSB7CisgICAgICAgICAgICAgICAgaWYgKE9NR0NhbGxlZSog
cmVwbGFjZW1lbnRDYWxsZWUgPSBiYnFDYWxsZWUtPnJlcGxhY2VtZW50KCkpCisgICAgICAgICAg
ICAgICAgICAgIHN0YWdlUmVwYXRjaChyZXBsYWNlbWVudENhbGxlZS0+d2FzbVRvV2FzbUNhbGxz
aXRlcygpKTsKKyAgICAgICAgICAgICAgICBpZiAoT01HRm9yT1NSRW50cnlDYWxsZWUqIG9zckVu
dHJ5Q2FsbGVlID0gYmJxQ2FsbGVlLT5vc3JFbnRyeUNhbGxlZSgpKQorICAgICAgICAgICAgICAg
ICAgICBzdGFnZVJlcGF0Y2gob3NyRW50cnlDYWxsZWUtPndhc21Ub1dhc21DYWxsc2l0ZXMoKSk7
CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICAvLyBJdCdzIGltcG9ydGFudCB0
byBtYWtlIHN1cmUgd2UgZG8gdGhpcyBiZWZvcmUgd2UgbWFrZSBhbnkgb2YgdGhlIGNvZGUgd2Ug
anVzdCBjb21waWxlZCB2aXNpYmxlLiBJZiB3ZSBkaWRuJ3QsIHdlIGNvdWxkIGVuZCB1cAorICAg
ICAgICAvLyB3aGVyZSB3ZSBhcmUgdGllcmluZyB1cCBzb21lIGZ1bmN0aW9uIEEgdG8gQScgYW5k
IHdlIHJlcGF0Y2ggc29tZSBmdW5jdGlvbiBCIHRvIGNhbGwgQScgaW5zdGVhZCBvZiBBLiBBbm90
aGVyIENQVSBjb3VsZCBzZWUKKyAgICAgICAgLy8gdGhlIHVwZGF0ZXMgdG8gQiBidXQgc3RpbGwg
bm90IGhhdmUgcmVzZXQgaXRzIGNhY2hlIG9mIEEnLCB3aGljaCB3b3VsZCBsZWFkIHRvIGFsbCBr
aW5kcyBvZiBiYWRuZXNzLgorICAgICAgICByZXNldEluc3RydWN0aW9uQ2FjaGVPbkFsbFRocmVh
ZHMoKTsKKyAgICAgICAgV1RGOjpzdG9yZVN0b3JlRmVuY2UoKTsgLy8gVGhpcyBwcm9iYWJseSBp
c24ndCBuZWNlc3NhcnkgYnV0IGl0J3MgZ29vZCB0byBiZSBwYXJhbm9pZC4KIAotICAgIG1fY29k
ZUJsb2NrLT5tX3dhc21JbmRpcmVjdENhbGxFbnRyeVBvaW50c1ttX2Z1bmN0aW9uSW5kZXhdID0g
ZW50cnlwb2ludDsKLSAgICB7Ci0gICAgICAgIExvY2tIb2xkZXIgaG9sZGVyKG1fY29kZUJsb2Nr
LT5tX2xvY2spOworICAgICAgICBtX2NvZGVCbG9jay0+bV93YXNtSW5kaXJlY3RDYWxsRW50cnlQ
b2ludHNbbV9mdW5jdGlvbkluZGV4XSA9IGVudHJ5cG9pbnQ7CiAKICAgICAgICAgYXV0byByZXBh
dGNoQ2FsbHMgPSBbJl0gKGNvbnN0IFZlY3RvcjxVbmxpbmtlZFdhc21Ub1dhc21DYWxsPiYgY2Fs
bHNpdGVzKSB7CiAgICAgICAgICAgICBmb3IgKGF1dG8mIGNhbGwgOiBjYWxsc2l0ZXMpIHsKICAg
ICAgICAgICAgICAgICBkYXRhTG9nTG5JZihXYXNtT01HUGxhbkludGVybmFsOjp2ZXJib3NlLCAi
Q29uc2lkZXJpbmcgcmVwYXRjaGluZyBjYWxsIGF0OiAiLCBSYXdQb2ludGVyKGNhbGwuY2FsbExv
Y2F0aW9uLmRhdGFMb2NhdGlvbigpKSwgIiB0aGF0IHRhcmdldHMgIiwgY2FsbC5mdW5jdGlvbklu
ZGV4U3BhY2UpOwogICAgICAgICAgICAgICAgIGlmIChjYWxsLmZ1bmN0aW9uSW5kZXhTcGFjZSA9
PSBmdW5jdGlvbkluZGV4U3BhY2UpIHsKICAgICAgICAgICAgICAgICAgICAgZGF0YUxvZ0xuSWYo
V2FzbU9NR1BsYW5JbnRlcm5hbDo6dmVyYm9zZSwgIlJlcGF0Y2hpbmcgY2FsbCBhdDogIiwgUmF3
UG9pbnRlcihjYWxsLmNhbGxMb2NhdGlvbi5kYXRhTG9jYXRpb24oKSksICIgdG8gIiwgUmF3UG9p
bnRlcihlbnRyeXBvaW50LmV4ZWN1dGFibGVBZGRyZXNzKCkpKTsKLSAgICAgICAgICAgICAgICAg
ICAgTWFjcm9Bc3NlbWJsZXI6OnJlcGF0Y2hOZWFyQ2FsbChjYWxsLmNhbGxMb2NhdGlvbiwgQ29k
ZUxvY2F0aW9uTGFiZWw8V2FzbUVudHJ5UHRyVGFnPihlbnRyeXBvaW50KSk7CisgICAgICAgICAg
ICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpyZXBhdGNoTmVhckNhbGwoY2FsbC5jYWxsTG9jYXRp
b24sIHN0YWdlZENhbGxzLmdldChjYWxsLmNhbGxMb2NhdGlvbi5kYXRhTG9jYXRpb24oKSkpOwog
ICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KICAgICAgICAgfTsKQEAgLTE3NSw2ICsx
ODcsMjAgQEAgdm9pZCBPTUdQbGFuOjp3b3JrKENvbXBpbGF0aW9uRWZmb3J0KQogICAgICAgICAg
ICAgICAgICAgICByZXBhdGNoQ2FsbHMob3NyRW50cnlDYWxsZWUtPndhc21Ub1dhc21DYWxsc2l0
ZXMoKSk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KKworICAgICAgICB7CisgICAgICAgICAg
ICBpZiAoQkJRQ2FsbGVlKiBiYnFDYWxsZWUgPSBtX2NvZGVCbG9jay0+bV9iYnFDYWxsZWVzW21f
ZnVuY3Rpb25JbmRleF0uZ2V0KCkpIHsKKyAgICAgICAgICAgICAgICBhdXRvIGxvY2tlciA9IGhv
bGRMb2NrKGJicUNhbGxlZS0+dGllclVwQ291bnQoKS0+Z2V0TG9jaygpKTsKKyAgICAgICAgICAg
ICAgICBiYnFDYWxsZWUtPnNldFJlcGxhY2VtZW50KGNhbGxlZS5jb3B5UmVmKCkpOworICAgICAg
ICAgICAgICAgIGJicUNhbGxlZS0+dGllclVwQ291bnQoKS0+bV9jb21waWxhdGlvblN0YXR1c0Zv
ck9NRyA9IFRpZXJVcENvdW50OjpDb21waWxhdGlvblN0YXR1czo6Q29tcGlsZWQ7CisgICAgICAg
ICAgICB9CisgICAgICAgICAgICBpZiAobV9jb2RlQmxvY2stPm1fbGxpbnRDYWxsZWVzKSB7Cisg
ICAgICAgICAgICAgICAgTExJbnRDYWxsZWUmIGxsaW50Q2FsbGVlID0gbV9jb2RlQmxvY2stPm1f
bGxpbnRDYWxsZWVzLT5hdChtX2Z1bmN0aW9uSW5kZXgpLmdldCgpOworICAgICAgICAgICAgICAg
IGF1dG8gbG9ja2VyID0gaG9sZExvY2sobGxpbnRDYWxsZWUudGllclVwQ291bnRlcigpLm1fbG9j
ayk7CisgICAgICAgICAgICAgICAgbGxpbnRDYWxsZWUuc2V0UmVwbGFjZW1lbnQoY2FsbGVlLmNv
cHlSZWYoKSk7CisgICAgICAgICAgICAgICAgbGxpbnRDYWxsZWUudGllclVwQ291bnRlcigpLm1f
Y29tcGlsYXRpb25TdGF0dXMgPSBMTEludFRpZXJVcENvdW50ZXI6OkNvbXBpbGF0aW9uU3RhdHVz
OjpDb21waWxlZDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQogICAgIH0KIAogICAgIGRhdGFM
b2dMbklmKFdhc21PTUdQbGFuSW50ZXJuYWw6OnZlcmJvc2UsICJGaW5pc2hlZCBPTUcgIiwgbV9m
dW5jdGlvbkluZGV4KTsKSW5kZXg6IFNvdXJjZS9XVEYvQ2hhbmdlTG9nCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XVEYvQ2hhbmdlTG9nCShyZXZpc2lvbiAyNTgzNTApCisrKyBTb3VyY2UvV1RGL0No
YW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDM1IEBACisyMDIwLTAzLTEyICBTYWFt
IEJhcmF0aSAgPHNiYXJhdGlAYXBwbGUuY29tPgorCisgICAgICAgIEltcGxlbWVudCAxR0Igb2Yg
ZXhlY3V0YWJsZSBtZW1vcnkgb24gYXJtNjQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTIwODQ5MAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgICogd3RmL01ldGFBbGxvY2F0b3IuY3BwOgorICAgICAgICAoV1RG
OjpNZXRhQWxsb2NhdG9yVHJhY2tlcjo6bm90aWZ5KToKKyAgICAgICAgKFdURjo6TWV0YUFsbG9j
YXRvclRyYWNrZXI6OnJlbGVhc2UpOgorICAgICAgICAoV1RGOjpNZXRhQWxsb2NhdG9yOjpyZWxl
YXNlKToKKyAgICAgICAgKFdURjo6TWV0YUFsbG9jYXRvckhhbmRsZTo6TWV0YUFsbG9jYXRvckhh
bmRsZSk6CisgICAgICAgIChXVEY6Ok1ldGFBbGxvY2F0b3JIYW5kbGU6On5NZXRhQWxsb2NhdG9y
SGFuZGxlKToKKyAgICAgICAgKFdURjo6TWV0YUFsbG9jYXRvckhhbmRsZTo6c2hyaW5rKToKKyAg
ICAgICAgKFdURjo6TWV0YUFsbG9jYXRvcjo6TWV0YUFsbG9jYXRvcik6CisgICAgICAgIChXVEY6
Ok1ldGFBbGxvY2F0b3I6OmFsbG9jYXRlKToKKyAgICAgICAgKFdURjo6TWV0YUFsbG9jYXRvcjo6
Y3VycmVudFN0YXRpc3RpY3MpOgorICAgICAgICAqIHd0Zi9NZXRhQWxsb2NhdG9yLmg6CisgICAg
ICAgIChXVEY6Ok1ldGFBbGxvY2F0b3JUcmFja2VyOjpmaW5kKToKKyAgICAgICAgKFdURjo6TWV0
YUFsbG9jYXRvcjo6YWxsb2NhdGUpOgorICAgICAgICAoV1RGOjpNZXRhQWxsb2NhdG9yOjpjdXJy
ZW50U3RhdGlzdGljcyk6CisgICAgICAgIChXVEY6Ok1ldGFBbGxvY2F0b3I6OmdldExvY2spOiBE
ZWxldGVkLgorICAgICAgICAqIHd0Zi9NZXRhQWxsb2NhdG9ySGFuZGxlLmg6CisgICAgICAgIChX
VEY6Ok1ldGFBbGxvY2F0b3JIYW5kbGU6OmFsbG9jYXRvcik6CisgICAgICAgIChXVEY6Ok1ldGFB
bGxvY2F0b3JIYW5kbGU6OmlzTWFuYWdlZCk6IERlbGV0ZWQuCisgICAgICAgIChXVEY6Ok1ldGFB
bGxvY2F0b3JIYW5kbGU6Om93bmVyVUlEKTogRGVsZXRlZC4KKyAgICAgICAgKiB3dGYvUGxhdGZv
cm1Vc2UuaDoKKyAgICAgICAgKiB3dGYvUmVkQmxhY2tUcmVlLmg6CisgICAgICAgICogd3RmL1N0
ZExpYkV4dHJhcy5oOgorICAgICAgICAoV1RGOjpjb25zdHJ1Y3RGaXhlZFNpemVBcnJheVdpdGhB
cmd1bWVudHNJbXBsKToKKyAgICAgICAgKFdURjo6Y29uc3RydWN0Rml4ZWRTaXplQXJyYXlXaXRo
QXJndW1lbnRzKToKKwogMjAyMC0wMy0xMSAgSmVyIE5vYmxlICA8amVyLm5vYmxlQGFwcGxlLmNv
bT4KIAogICAgICAgICBBZG9wdCBBVlNhbXBsZUJ1ZmZlclZpZGVvT3V0cHV0CkluZGV4OiBTb3Vy
Y2UvV1RGL3d0Zi9NZXRhQWxsb2NhdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0
Zi9NZXRhQWxsb2NhdG9yLmNwcAkocmV2aXNpb24gMjU4MzUwKQorKysgU291cmNlL1dURi93dGYv
TWV0YUFsbG9jYXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU0LDIyICs1NCwyMSBAQCBNZXRh
QWxsb2NhdG9yOjp+TWV0YUFsbG9jYXRvcigpCiAjZW5kaWYKIH0KIAotdm9pZCBNZXRhQWxsb2Nh
dG9yVHJhY2tlcjo6bm90aWZ5KE1ldGFBbGxvY2F0b3JIYW5kbGUqIGhhbmRsZSkKK3ZvaWQgTWV0
YUFsbG9jYXRvclRyYWNrZXI6Om5vdGlmeShNZXRhQWxsb2NhdG9ySGFuZGxlJiBoYW5kbGUpCiB7
Ci0gICAgbV9hbGxvY2F0aW9ucy5pbnNlcnQoaGFuZGxlKTsKKyAgICBtX2FsbG9jYXRpb25zLmlu
c2VydCgmaGFuZGxlKTsKIH0KIAotdm9pZCBNZXRhQWxsb2NhdG9yVHJhY2tlcjo6cmVsZWFzZShN
ZXRhQWxsb2NhdG9ySGFuZGxlKiBoYW5kbGUpCit2b2lkIE1ldGFBbGxvY2F0b3JUcmFja2VyOjpy
ZWxlYXNlKE1ldGFBbGxvY2F0b3JIYW5kbGUmIGhhbmRsZSkKIHsKLSAgICBtX2FsbG9jYXRpb25z
LnJlbW92ZShoYW5kbGUpOworICAgIG1fYWxsb2NhdGlvbnMucmVtb3ZlKCZoYW5kbGUpOwogfQog
Ci1BTFdBWVNfSU5MSU5FIHZvaWQgTWV0YUFsbG9jYXRvcjo6cmVsZWFzZShNZXRhQWxsb2NhdG9y
SGFuZGxlKiBoYW5kbGUpCit2b2lkIE1ldGFBbGxvY2F0b3I6OnJlbGVhc2UoY29uc3QgTG9ja0hv
bGRlciYsIE1ldGFBbGxvY2F0b3JIYW5kbGUmIGhhbmRsZSkKIHsKLSAgICBMb2NrSG9sZGVyIGxv
Y2tlcigmbV9sb2NrKTsKLSAgICBpZiAoaGFuZGxlLT5zaXplSW5CeXRlcygpKSB7Ci0gICAgICAg
IHZvaWQqIHN0YXJ0ID0gaGFuZGxlLT5zdGFydCgpLnVudGFnZ2VkUHRyKCk7Ci0gICAgICAgIHNp
emVfdCBzaXplSW5CeXRlcyA9IGhhbmRsZS0+c2l6ZUluQnl0ZXMoKTsKKyAgICBpZiAoaGFuZGxl
LnNpemVJbkJ5dGVzKCkpIHsKKyAgICAgICAgdm9pZCogc3RhcnQgPSBoYW5kbGUuc3RhcnQoKS51
bnRhZ2dlZFB0cigpOworICAgICAgICBzaXplX3Qgc2l6ZUluQnl0ZXMgPSBoYW5kbGUuc2l6ZUlu
Qnl0ZXMoKTsKICAgICAgICAgZGVjcmVtZW50UGFnZU9jY3VwYW5jeShzdGFydCwgc2l6ZUluQnl0
ZXMpOwogICAgICAgICBhZGRGcmVlU3BhY2VGcm9tUmVsZWFzZWRIYW5kbGUoRnJlZVNwYWNlUHRy
KHN0YXJ0KSwgc2l6ZUluQnl0ZXMpOwogICAgIH0KQEAgLTc4LDIxICs3NywxOSBAQCBBTFdBWVNf
SU5MSU5FIHZvaWQgTWV0YUFsbG9jYXRvcjo6cmVsZWFzCiAgICAgICAgIG1fdHJhY2tlci0+cmVs
ZWFzZShoYW5kbGUpOwogfQogCi1NZXRhQWxsb2NhdG9ySGFuZGxlOjpNZXRhQWxsb2NhdG9ySGFu
ZGxlKE1ldGFBbGxvY2F0b3IqIGFsbG9jYXRvciwgdm9pZCogc3RhcnQsIHNpemVfdCBzaXplSW5C
eXRlcywgdm9pZCogb3duZXJVSUQpCitNZXRhQWxsb2NhdG9ySGFuZGxlOjpNZXRhQWxsb2NhdG9y
SGFuZGxlKE1ldGFBbGxvY2F0b3ImIGFsbG9jYXRvciwgdm9pZCogc3RhcnQsIHNpemVfdCBzaXpl
SW5CeXRlcykKICAgICA6IG1fYWxsb2NhdG9yKGFsbG9jYXRvcikKICAgICAsIG1fc3RhcnQoc3Rh
cnQpCiAgICAgLCBtX2VuZChyZWludGVycHJldF9jYXN0PGNoYXIqPihzdGFydCkgKyBzaXplSW5C
eXRlcykKLSAgICAsIG1fb3duZXJVSUQob3duZXJVSUQpCiB7Ci0gICAgQVNTRVJUKGFsbG9jYXRv
cik7CiAgICAgQVNTRVJUKHN0YXJ0KTsKICAgICBBU1NFUlQoc2l6ZUluQnl0ZXMpOwogfQogCiBN
ZXRhQWxsb2NhdG9ySGFuZGxlOjp+TWV0YUFsbG9jYXRvckhhbmRsZSgpCiB7Ci0gICAgQVNTRVJU
KG1fYWxsb2NhdG9yKTsKLSAgICBtX2FsbG9jYXRvci0+cmVsZWFzZSh0aGlzKTsKKyAgICBhdXRv
IGxvY2tlciA9IGhvbGRMb2NrKGFsbG9jYXRvcigpLm1fbG9jayk7CisgICAgYWxsb2NhdG9yKCku
cmVsZWFzZShsb2NrZXIsICp0aGlzKTsKIH0KIAogdm9pZCBNZXRhQWxsb2NhdG9ySGFuZGxlOjpz
aHJpbmsoc2l6ZV90IG5ld1NpemVJbkJ5dGVzKQpAQCAtMTAwLDkgKzk3LDEwIEBAIHZvaWQgTWV0
YUFsbG9jYXRvckhhbmRsZTo6c2hyaW5rKHNpemVfdCAKICAgICBzaXplX3Qgc2l6ZUluQnl0ZXMg
PSB0aGlzLT5zaXplSW5CeXRlcygpOwogICAgIEFTU0VSVChuZXdTaXplSW5CeXRlcyA8PSBzaXpl
SW5CeXRlcyk7CiAKLSAgICBMb2NrSG9sZGVyIGxvY2tlcigmbV9hbGxvY2F0b3ItPm1fbG9jayk7
CisgICAgTWV0YUFsbG9jYXRvciYgYWxsb2NhdG9yID0gdGhpcy0+YWxsb2NhdG9yKCk7CisgICAg
TG9ja0hvbGRlciBsb2NrZXIoJmFsbG9jYXRvci5tX2xvY2spOwogCi0gICAgbmV3U2l6ZUluQnl0
ZXMgPSBtX2FsbG9jYXRvci0+cm91bmRVcChuZXdTaXplSW5CeXRlcyk7CisgICAgbmV3U2l6ZUlu
Qnl0ZXMgPSBhbGxvY2F0b3Iucm91bmRVcChuZXdTaXplSW5CeXRlcyk7CiAgICAgCiAgICAgQVNT
RVJUKG5ld1NpemVJbkJ5dGVzIDw9IHNpemVJbkJ5dGVzKTsKIApAQCAtMTEzLDExICsxMTEsMTEg
QEAgdm9pZCBNZXRhQWxsb2NhdG9ySGFuZGxlOjpzaHJpbmsoc2l6ZV90IAogICAgIHNpemVfdCBm
cmVlU2l6ZSA9IHNpemVJbkJ5dGVzIC0gbmV3U2l6ZUluQnl0ZXM7CiAgICAgdWludHB0cl90IGZy
ZWVFbmQgPSBmcmVlU3RhcnQgKyBmcmVlU2l6ZTsKICAgICAKLSAgICB1aW50cHRyX3QgZmlyc3RD
b21wbGV0ZWx5RnJlZVBhZ2UgPSAoZnJlZVN0YXJ0ICsgbV9hbGxvY2F0b3ItPm1fcGFnZVNpemUg
LSAxKSAmIH4obV9hbGxvY2F0b3ItPm1fcGFnZVNpemUgLSAxKTsKKyAgICB1aW50cHRyX3QgZmly
c3RDb21wbGV0ZWx5RnJlZVBhZ2UgPSAoZnJlZVN0YXJ0ICsgYWxsb2NhdG9yLm1fcGFnZVNpemUg
LSAxKSAmIH4oYWxsb2NhdG9yLm1fcGFnZVNpemUgLSAxKTsKICAgICBpZiAoZmlyc3RDb21wbGV0
ZWx5RnJlZVBhZ2UgPCBmcmVlRW5kKQotICAgICAgICBtX2FsbG9jYXRvci0+ZGVjcmVtZW50UGFn
ZU9jY3VwYW5jeShyZWludGVycHJldF9jYXN0PHZvaWQqPihmaXJzdENvbXBsZXRlbHlGcmVlUGFn
ZSksIGZyZWVTaXplIC0gKGZpcnN0Q29tcGxldGVseUZyZWVQYWdlIC0gZnJlZVN0YXJ0KSk7Cisg
ICAgICAgIGFsbG9jYXRvci5kZWNyZW1lbnRQYWdlT2NjdXBhbmN5KHJlaW50ZXJwcmV0X2Nhc3Q8
dm9pZCo+KGZpcnN0Q29tcGxldGVseUZyZWVQYWdlKSwgZnJlZVNpemUgLSAoZmlyc3RDb21wbGV0
ZWx5RnJlZVBhZ2UgLSBmcmVlU3RhcnQpKTsKIAotICAgIG1fYWxsb2NhdG9yLT5hZGRGcmVlU3Bh
Y2VGcm9tUmVsZWFzZWRIYW5kbGUoTWV0YUFsbG9jYXRvcjo6RnJlZVNwYWNlUHRyKGZyZWVTdGFy
dCksIGZyZWVTaXplKTsKKyAgICBhbGxvY2F0b3IuYWRkRnJlZVNwYWNlRnJvbVJlbGVhc2VkSGFu
ZGxlKE1ldGFBbGxvY2F0b3I6OkZyZWVTcGFjZVB0cihmcmVlU3RhcnQpLCBmcmVlU2l6ZSk7CiAK
ICAgICBtX2VuZCA9IG1fc3RhcnQgKyBuZXdTaXplSW5CeXRlczsKIH0KQEAgLTEyNywxMyArMTI1
LDEzIEBAIHZvaWQgTWV0YUFsbG9jYXRvckhhbmRsZTo6ZHVtcChQcmludFN0cmUKICAgICBvdXQu
cHJpbnQoUmF3UG9pbnRlcihzdGFydCgpLnVudGFnZ2VkUHRyKCkpLCAiLi4uIiwgUmF3UG9pbnRl
cihlbmQoKS51bnRhZ2dlZFB0cigpKSk7CiB9CiAKLU1ldGFBbGxvY2F0b3I6Ok1ldGFBbGxvY2F0
b3Ioc2l6ZV90IGFsbG9jYXRpb25HcmFudWxlLCBzaXplX3QgcGFnZVNpemUpCitNZXRhQWxsb2Nh
dG9yOjpNZXRhQWxsb2NhdG9yKExvY2smIGxvY2ssIHNpemVfdCBhbGxvY2F0aW9uR3JhbnVsZSwg
c2l6ZV90IHBhZ2VTaXplKQogICAgIDogbV9hbGxvY2F0aW9uR3JhbnVsZShhbGxvY2F0aW9uR3Jh
bnVsZSkKICAgICAsIG1fcGFnZVNpemUocGFnZVNpemUpCiAgICAgLCBtX2J5dGVzQWxsb2NhdGVk
KDApCiAgICAgLCBtX2J5dGVzUmVzZXJ2ZWQoMCkKICAgICAsIG1fYnl0ZXNDb21taXR0ZWQoMCkK
LSAgICAsIG1fdHJhY2tlcigwKQorICAgICwgbV9sb2NrKGxvY2spCiAjaWZuZGVmIE5ERUJVRwog
ICAgICwgbV9tYWxsb2NCYWxhbmNlKDApCiAjZW5kaWYKQEAgLTE1NywxMCArMTU1LDggQEAgTWV0
YUFsbG9jYXRvcjo6TWV0YUFsbG9jYXRvcihzaXplX3QgYWxsbwogICAgIEFTU0VSVChzdGF0aWNf
Y2FzdDxzaXplX3Q+KDEpIDw8IG1fbG9nQWxsb2NhdGlvbkdyYW51bGUgPT0gbV9hbGxvY2F0aW9u
R3JhbnVsZSk7CiB9CiAKLVJlZlB0cjxNZXRhQWxsb2NhdG9ySGFuZGxlPiBNZXRhQWxsb2NhdG9y
OjphbGxvY2F0ZShzaXplX3Qgc2l6ZUluQnl0ZXMsIHZvaWQqIG93bmVyVUlEKQorUmVmUHRyPE1l
dGFBbGxvY2F0b3JIYW5kbGU+IE1ldGFBbGxvY2F0b3I6OmFsbG9jYXRlKGNvbnN0IExvY2tIb2xk
ZXImLCBzaXplX3Qgc2l6ZUluQnl0ZXMpCiB7Ci0gICAgTG9ja0hvbGRlciBsb2NrZXIoJm1fbG9j
ayk7Ci0KICAgICBpZiAoIXNpemVJbkJ5dGVzKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAg
ICAKQEAgLTE5NSwxNyArMTkxLDE2IEBAIFJlZlB0cjxNZXRhQWxsb2NhdG9ySGFuZGxlPiBNZXRh
QWxsb2NhdG8KICAgICBtX251bUFsbG9jYXRpb25zKys7CiAjZW5kaWYKIAotICAgIGF1dG8gaGFu
ZGxlID0gYWRvcHRSZWYoKm5ldyBNZXRhQWxsb2NhdG9ySGFuZGxlKHRoaXMsIHN0YXJ0LnVudGFn
Z2VkUHRyKCksIHNpemVJbkJ5dGVzLCBvd25lclVJRCkpOworICAgIGF1dG8gaGFuZGxlID0gYWRv
cHRSZWYoKm5ldyBNZXRhQWxsb2NhdG9ySGFuZGxlKCp0aGlzLCBzdGFydC51bnRhZ2dlZFB0cigp
LCBzaXplSW5CeXRlcykpOwogCiAgICAgaWYgKFVOTElLRUxZKCEhbV90cmFja2VyKSkKLSAgICAg
ICAgbV90cmFja2VyLT5ub3RpZnkoaGFuZGxlLnB0cigpKTsKKyAgICAgICAgbV90cmFja2VyLT5u
b3RpZnkoKmhhbmRsZS5wdHIoKSk7CiAKICAgICByZXR1cm4gaGFuZGxlOwogfQogCi1NZXRhQWxs
b2NhdG9yOjpTdGF0aXN0aWNzIE1ldGFBbGxvY2F0b3I6OmN1cnJlbnRTdGF0aXN0aWNzKCkKK01l
dGFBbGxvY2F0b3I6OlN0YXRpc3RpY3MgTWV0YUFsbG9jYXRvcjo6Y3VycmVudFN0YXRpc3RpY3Mo
Y29uc3QgTG9ja0hvbGRlciYpCiB7Ci0gICAgTG9ja0hvbGRlciBsb2NrZXIoJm1fbG9jayk7CiAg
ICAgU3RhdGlzdGljcyByZXN1bHQ7CiAgICAgcmVzdWx0LmJ5dGVzQWxsb2NhdGVkID0gbV9ieXRl
c0FsbG9jYXRlZDsKICAgICByZXN1bHQuYnl0ZXNSZXNlcnZlZCA9IG1fYnl0ZXNSZXNlcnZlZDsK
SW5kZXg6IFNvdXJjZS9XVEYvd3RmL01ldGFBbGxvY2F0b3IuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV1RGL3d0Zi9NZXRhQWxsb2NhdG9yLmgJKHJldmlzaW9uIDI1ODM1MCkKKysrIFNvdXJjZS9X
VEYvd3RmL01ldGFBbGxvY2F0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtNDQsMTUgKzQ0LDE1IEBA
IG5hbWVzcGFjZSBXVEYgewogY2xhc3MgTWV0YUFsbG9jYXRvclRyYWNrZXIgewogICAgIFdURl9N
QUtFX0ZBU1RfQUxMT0NBVEVEOwogcHVibGljOgotICAgIHZvaWQgbm90aWZ5KE1ldGFBbGxvY2F0
b3JIYW5kbGUqKTsKLSAgICB2b2lkIHJlbGVhc2UoTWV0YUFsbG9jYXRvckhhbmRsZSopOworICAg
IHZvaWQgbm90aWZ5KE1ldGFBbGxvY2F0b3JIYW5kbGUmKTsKKyAgICB2b2lkIHJlbGVhc2UoTWV0
YUFsbG9jYXRvckhhbmRsZSYpOwogCiAgICAgTWV0YUFsbG9jYXRvckhhbmRsZSogZmluZCh2b2lk
KiBhZGRyZXNzKQogICAgIHsKICAgICAgICAgTWV0YUFsbG9jYXRvckhhbmRsZSogaGFuZGxlID0g
bV9hbGxvY2F0aW9ucy5maW5kR3JlYXRlc3RMZXNzVGhhbk9yRXF1YWwoYWRkcmVzcyk7Ci0gICAg
ICAgIGlmIChoYW5kbGUgJiYgYWRkcmVzcyA8IGhhbmRsZS0+ZW5kKCkudW50YWdnZWRQdHIoKSkK
KyAgICAgICAgaWYgKGhhbmRsZSAmJiBoYW5kbGUtPnN0YXJ0KCkudW50YWdnZWRQdHIoKSA8PSBh
ZGRyZXNzICYmIGFkZHJlc3MgPCBoYW5kbGUtPmVuZCgpLnVudGFnZ2VkUHRyKCkpCiAgICAgICAg
ICAgICByZXR1cm4gaGFuZGxlOwotICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgcmV0dXJuIG51
bGxwdHI7CiAgICAgfQogCiAgICAgUmVkQmxhY2tUcmVlPE1ldGFBbGxvY2F0b3JIYW5kbGUsIHZv
aWQqPiBtX2FsbG9jYXRpb25zOwpAQCAtNjQsMTcgKzY0LDIyIEBAIGNsYXNzIE1ldGFBbGxvY2F0
b3IgewogcHVibGljOgogICAgIHVzaW5nIEZyZWVTcGFjZVB0ciA9IE1ldGFBbGxvY2F0b3JQdHI8
RnJlZVNwYWNlUHRyVGFnPjsKIAotICAgIFdURl9FWFBPUlRfUFJJVkFURSBNZXRhQWxsb2NhdG9y
KHNpemVfdCBhbGxvY2F0aW9uR3JhbnVsZSwgc2l6ZV90IHBhZ2VTaXplID0gV1RGOjpwYWdlU2l6
ZSgpKTsKKyAgICBXVEZfRVhQT1JUX1BSSVZBVEUgTWV0YUFsbG9jYXRvcihMb2NrJiwgc2l6ZV90
IGFsbG9jYXRpb25HcmFudWxlLCBzaXplX3QgcGFnZVNpemUgPSBXVEY6OnBhZ2VTaXplKCkpOwog
ICAgIAogICAgIFdURl9FWFBPUlRfUFJJVkFURSB2aXJ0dWFsIH5NZXRhQWxsb2NhdG9yKCk7CiAg
ICAgCi0gICAgV1RGX0VYUE9SVF9QUklWQVRFIFJlZlB0cjxNZXRhQWxsb2NhdG9ySGFuZGxlPiBh
bGxvY2F0ZShzaXplX3Qgc2l6ZUluQnl0ZXMsIHZvaWQqIG93bmVyVUlEKTsKKyAgICBBTFdBWVNf
SU5MSU5FIFJlZlB0cjxNZXRhQWxsb2NhdG9ySGFuZGxlPiBhbGxvY2F0ZShzaXplX3Qgc2l6ZUlu
Qnl0ZXMpCisgICAgeworICAgICAgICBhdXRvIGxvY2tlciA9IGhvbGRMb2NrKG1fbG9jayk7Cisg
ICAgICAgIHJldHVybiBhbGxvY2F0ZShsb2NrZXIsIHNpemVJbkJ5dGVzKTsKKyAgICB9CisgICAg
V1RGX0VYUE9SVF9QUklWQVRFIFJlZlB0cjxNZXRhQWxsb2NhdG9ySGFuZGxlPiBhbGxvY2F0ZShj
b25zdCBMb2NrSG9sZGVyJiwgc2l6ZV90IHNpemVJbkJ5dGVzKTsKIAogICAgIHZvaWQgdHJhY2tB
bGxvY2F0aW9ucyhNZXRhQWxsb2NhdG9yVHJhY2tlciogdHJhY2tlcikKICAgICB7CiAgICAgICAg
IG1fdHJhY2tlciA9IHRyYWNrZXI7CiAgICAgfQotICAgIAorCiAgICAgLy8gTm9uLWF0b21pYyBt
ZXRob2RzIGZvciBnZXR0aW5nIGFsbG9jYXRvciBzdGF0aXN0aWNzLgogICAgIHNpemVfdCBieXRl
c0FsbG9jYXRlZCgpIHsgcmV0dXJuIG1fYnl0ZXNBbGxvY2F0ZWQ7IH0KICAgICBzaXplX3QgYnl0
ZXNSZXNlcnZlZCgpIHsgcmV0dXJuIG1fYnl0ZXNSZXNlcnZlZDsgfQpAQCAtODcsNyArOTIsMTIg
QEAgcHVibGljOgogICAgICAgICBzaXplX3QgYnl0ZXNSZXNlcnZlZDsKICAgICAgICAgc2l6ZV90
IGJ5dGVzQ29tbWl0dGVkOwogICAgIH07Ci0gICAgV1RGX0VYUE9SVF9QUklWQVRFIFN0YXRpc3Rp
Y3MgY3VycmVudFN0YXRpc3RpY3MoKTsKKyAgICBTdGF0aXN0aWNzIGN1cnJlbnRTdGF0aXN0aWNz
KCkKKyAgICB7CisgICAgICAgIGF1dG8gbG9ja2VyID0gaG9sZExvY2sobV9sb2NrKTsKKyAgICAg
ICAgcmV0dXJuIGN1cnJlbnRTdGF0aXN0aWNzKGxvY2tlcik7CisgICAgfQorICAgIFdURl9FWFBP
UlRfUFJJVkFURSBTdGF0aXN0aWNzIGN1cnJlbnRTdGF0aXN0aWNzKGNvbnN0IExvY2tIb2xkZXIm
KTsKIAogICAgIC8vIEFkZCBtb3JlIGZyZWUgc3BhY2UgdG8gdGhlIGFsbG9jYXRvci4gQ2FsbCB0
aGlzIGRpcmVjdGx5IGZyb20KICAgICAvLyB0aGUgY29uc3RydWN0b3IgaWYgeW91IHdpc2ggdG8g
b3BlcmF0ZSB0aGUgYWxsb2NhdG9yIHdpdGhpbiBhCkBAIC05OCw3ICsxMDgsNiBAQCBwdWJsaWM6
CiAgICAgLy8gYnVpbGRzLgogICAgIFdURl9FWFBPUlRfUFJJVkFURSBzaXplX3QgZGVidWdGcmVl
U3BhY2VTaXplKCk7CiAKLSAgICBMb2NrJiBnZXRMb2NrKCkgeyByZXR1cm4gbV9sb2NrOyB9CiAg
ICAgV1RGX0VYUE9SVF9QUklWQVRFIGJvb2wgaXNJbkFsbG9jYXRlZE1lbW9yeShjb25zdCBBYnN0
cmFjdExvY2tlciYsIHZvaWQqIGFkZHJlc3MpOwogICAgIAogI2lmIEVOQUJMRShNRVRBX0FMTE9D
QVRPUl9QUk9GSUxFKQpAQCAtMTIzLDYgKzEzMiw4IEBAIHByb3RlY3RlZDoKICAgICAvLyBkZXN0
cnVjdGlvbiwgaW4gcGFydCBiZWNhdXNlIGEgTWV0YUFsbG9jYXRvciBjYW5ub3QgZGllIHNvIGxv
bmcKICAgICAvLyBhcyB0aGVyZSBhcmUgSGFuZGxlcyB0aGF0IHJlZmVyIHRvIGl0LgogCisgICAg
Ly8gUmVsZWFzZSBhIE1ldGFBbGxvY2F0b3JIYW5kbGUuCisgICAgdmlydHVhbCB2b2lkIHJlbGVh
c2UoY29uc3QgTG9ja0hvbGRlciYsIE1ldGFBbGxvY2F0b3JIYW5kbGUmKTsKIHByaXZhdGU6CiAg
ICAgCiAgICAgZnJpZW5kIGNsYXNzIE1ldGFBbGxvY2F0b3JIYW5kbGU7CkBAIC0xNTAsOSArMTYx
LDYgQEAgcHJpdmF0ZToKICAgICAgICAgRnJlZVNwYWNlUHRyIG1fZW5kOwogICAgIH07CiAgICAg
dHlwZWRlZiBSZWRCbGFja1RyZWU8RnJlZVNwYWNlTm9kZSwgc2l6ZV90PiBUcmVlOwotCi0gICAg
Ly8gUmVsZWFzZSBhIE1ldGFBbGxvY2F0b3JIYW5kbGUuCi0gICAgdm9pZCByZWxlYXNlKE1ldGFB
bGxvY2F0b3JIYW5kbGUqKTsKICAgICAKICAgICAvLyBSZW1vdmUgZnJlZSBzcGFjZSBmcm9tIHRo
ZSBhbGxvY2F0b3IuIFRoaXMgaXMgZWZmZWN0aXZlbHkKICAgICAvLyB0aGUgYWxsb2NhdGUoKSBm
dW5jdGlvbiwgZXhjZXB0IHRoYXQgaXQgZG9lcyBub3QgbWFyayB0aGUKQEAgLTE5Myw5ICsyMDEs
OSBAQCBwcml2YXRlOgogICAgIHNpemVfdCBtX2J5dGVzUmVzZXJ2ZWQ7CiAgICAgc2l6ZV90IG1f
Ynl0ZXNDb21taXR0ZWQ7CiAgICAgCi0gICAgTG9jayBtX2xvY2s7CisgICAgTG9jayYgbV9sb2Nr
OwogCi0gICAgTWV0YUFsbG9jYXRvclRyYWNrZXIqIG1fdHJhY2tlcjsKKyAgICBNZXRhQWxsb2Nh
dG9yVHJhY2tlciogbV90cmFja2VyIHsgbnVsbHB0ciB9OwogCiAjaWZuZGVmIE5ERUJVRwogICAg
IHNpemVfdCBtX21hbGxvY0JhbGFuY2U7CkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9NZXRhQWxsb2Nh
dG9ySGFuZGxlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvTWV0YUFsbG9jYXRvckhh
bmRsZS5oCShyZXZpc2lvbiAyNTgzNTApCisrKyBTb3VyY2UvV1RGL3d0Zi9NZXRhQWxsb2NhdG9y
SGFuZGxlLmgJKHdvcmtpbmcgY29weSkKQEAgLTQyLDcgKzQyLDcgQEAgREVDTEFSRV9BTExPQ0FU
T1JfV0lUSF9IRUFQX0lERU5USUZJRVIoTQogY2xhc3MgTWV0YUFsbG9jYXRvckhhbmRsZSA6IHB1
YmxpYyBUaHJlYWRTYWZlUmVmQ291bnRlZDxNZXRhQWxsb2NhdG9ySGFuZGxlPiwgcHVibGljIFJl
ZEJsYWNrVHJlZTxNZXRhQWxsb2NhdG9ySGFuZGxlLCB2b2lkKj46Ok5vZGUgewogICAgIFdURl9N
QUtFX0ZBU1RfQUxMT0NBVEVEX1dJVEhfSEVBUF9JREVOVElGSUVSKE1ldGFBbGxvY2F0b3JIYW5k
bGUpOwogcHJpdmF0ZToKLSAgICBNZXRhQWxsb2NhdG9ySGFuZGxlKE1ldGFBbGxvY2F0b3IqLCB2
b2lkKiBzdGFydCwgc2l6ZV90IHNpemVJbkJ5dGVzLCB2b2lkKiBvd25lclVJRCk7CisgICAgTWV0
YUFsbG9jYXRvckhhbmRsZShNZXRhQWxsb2NhdG9yJiwgdm9pZCogc3RhcnQsIHNpemVfdCBzaXpl
SW5CeXRlcyk7CiAKIHB1YmxpYzoKICAgICB1c2luZyBNZW1vcnlQdHIgPSBNZXRhQWxsb2NhdG9y
UHRyPEhhbmRsZU1lbW9yeVB0clRhZz47CkBAIC04NiwyMiArODYsMTEgQEAgcHVibGljOgogICAg
ICAgICAKICAgICBXVEZfRVhQT1JUX1BSSVZBVEUgdm9pZCBzaHJpbmsoc2l6ZV90IG5ld1NpemVJ
bkJ5dGVzKTsKICAgICAKLSAgICBib29sIGlzTWFuYWdlZCgpCisgICAgTWV0YUFsbG9jYXRvciYg
YWxsb2NhdG9yKCkKICAgICB7Ci0gICAgICAgIHJldHVybiAhIW1fYWxsb2NhdG9yOwotICAgIH0K
LSAgICAgICAgCi0gICAgTWV0YUFsbG9jYXRvciogYWxsb2NhdG9yKCkKLSAgICB7Ci0gICAgICAg
IEFTU0VSVChtX2FsbG9jYXRvcik7CiAgICAgICAgIHJldHVybiBtX2FsbG9jYXRvcjsKICAgICB9
CiAKLSAgICB2b2lkKiBvd25lclVJRCgpCi0gICAgewotICAgICAgICByZXR1cm4gbV9vd25lclVJ
RDsKLSAgICB9Ci0KICAgICB2b2lkKiBrZXkoKQogICAgIHsKICAgICAgICAgcmV0dXJuIG1fc3Rh
cnQudW50YWdnZWRQdHIoKTsKQEAgLTExMiwxMCArMTAxLDkgQEAgcHVibGljOgogcHJpdmF0ZToK
ICAgICBmcmllbmQgY2xhc3MgTWV0YUFsbG9jYXRvcjsKICAgICAKLSAgICBNZXRhQWxsb2NhdG9y
KiBtX2FsbG9jYXRvcjsKKyAgICBNZXRhQWxsb2NhdG9yJiBtX2FsbG9jYXRvcjsKICAgICBNZW1v
cnlQdHIgbV9zdGFydDsKICAgICBNZW1vcnlQdHIgbV9lbmQ7Ci0gICAgdm9pZCogbV9vd25lclVJ
RDsKIH07CiAKIH0KSW5kZXg6IFNvdXJjZS9XVEYvd3RmL1BsYXRmb3JtVXNlLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dURi93dGYvUGxhdGZvcm1Vc2UuaAkocmV2aXNpb24gMjU4MzUwKQorKysg
U291cmNlL1dURi93dGYvUGxhdGZvcm1Vc2UuaAkod29ya2luZyBjb3B5KQpAQCAtMzI0LDMgKzMy
NCw3IEBACiAjaWYgUExBVEZPUk0oSU9TKSAmJiBfX0lQSE9ORV9PU19WRVJTSU9OX01JTl9SRVFV
SVJFRCA+PSAxNDAwMDAKICNkZWZpbmUgVVNFX1VUVFlQRV9TV0laWkxFUiAxCiAjZW5kaWYKKwor
I2lmIENQVShBUk02NCkgJiYgQ1BVKEFERFJFU1M2NCkKKyNkZWZpbmUgVVNFX0pVTVBfSVNMQU5E
UyAxCisjZW5kaWYKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL1JlZEJsYWNrVHJlZS5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XVEYvd3RmL1JlZEJsYWNrVHJlZS5oCShyZXZpc2lvbiAyNTgzNTApCisr
KyBTb3VyY2UvV1RGL3d0Zi9SZWRCbGFja1RyZWUuaAkod29ya2luZyBjb3B5KQpAQCAtMzAsNiAr
MzAsNyBAQAogCiAjaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KICNpbmNsdWRlIDx3dGYvTm9u
Y29weWFibGUuaD4KKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CiAKIG5hbWVzcGFjZSBXVEYgewog
CkBAIC0zMjQsNiArMzI1LDI2IEBAIHB1YmxpYzoKICAgICAgICAgfQogICAgICAgICByZXR1cm4g
YmVzdDsKICAgICB9CisKKyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgRnVuY3Rpb24+CisgICAgdm9p
ZCBpdGVyYXRlKEZ1bmN0aW9uIGZ1bmN0aW9uKQorICAgIHsKKyAgICAgICAgaWYgKCFtX3Jvb3Qp
CisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgVmVjdG9yPE5vZGVUeXBlKiwgMTY+IHRv
SXRlcmF0ZTsKKyAgICAgICAgdG9JdGVyYXRlLmFwcGVuZChtX3Jvb3QpOworICAgICAgICB3aGls
ZSAodG9JdGVyYXRlLnNpemUoKSkgeworICAgICAgICAgICAgTm9kZVR5cGUmIGN1cnJlbnQgPSAq
dG9JdGVyYXRlLnRha2VMYXN0KCk7CisgICAgICAgICAgICBib29sIGl0ZXJhdGVMZWZ0ID0gZmFs
c2U7CisgICAgICAgICAgICBib29sIGl0ZXJhdGVSaWdodCA9IGZhbHNlOworICAgICAgICAgICAg
ZnVuY3Rpb24oY3VycmVudCwgaXRlcmF0ZUxlZnQsIGl0ZXJhdGVSaWdodCk7CisgICAgICAgICAg
ICBpZiAoaXRlcmF0ZUxlZnQgJiYgY3VycmVudC5sZWZ0KCkpCisgICAgICAgICAgICAgICAgdG9J
dGVyYXRlLmFwcGVuZChjdXJyZW50LmxlZnQoKSk7CisgICAgICAgICAgICBpZiAoaXRlcmF0ZVJp
Z2h0ICYmIGN1cnJlbnQucmlnaHQoKSkKKyAgICAgICAgICAgICAgICB0b0l0ZXJhdGUuYXBwZW5k
KGN1cnJlbnQucmlnaHQoKSk7CisgICAgICAgIH0KKyAgICB9CiAgICAgCiAgICAgTm9kZVR5cGUq
IGZpcnN0KCkgY29uc3QKICAgICB7CkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9TdGRMaWJFeHRyYXMu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9TdGRMaWJFeHRyYXMuaAkocmV2aXNpb24g
MjU4MzUwKQorKysgU291cmNlL1dURi93dGYvU3RkTGliRXh0cmFzLmgJKHdvcmtpbmcgY29weSkK
QEAgLTQ4OSw2ICs0ODksMTkgQEAgQUxXQVlTX0lOTElORSBkZWNsdHlwZShhdXRvKSBtYWtlVW5p
cXVlVwogICAgIHJldHVybiBzdGQ6Om1ha2VfdW5pcXVlPFQ+KHN0ZDo6Zm9yd2FyZDxBcmdzPihh
cmdzKS4uLik7CiB9CiAKK3RlbXBsYXRlIDx0eXBlbmFtZSBSZXN1bHRUeXBlLCBzaXplX3QuLi4g
SXMsIHR5cGVuYW1lIC4uLkFyZ3M+Citjb25zdGV4cHIgYXV0byBjb25zdHJ1Y3RGaXhlZFNpemVB
cnJheVdpdGhBcmd1bWVudHNJbXBsKHN0ZDo6aW5kZXhfc2VxdWVuY2U8SXMuLi4+LCBBcmdzJiYu
Li4gYXJncykgLT4gc3RkOjphcnJheTxSZXN1bHRUeXBlLCBzaXplb2YuLi4oSXMpPgoreworICAg
IHJldHVybiB7ICgodm9pZClJcywgUmVzdWx0VHlwZSB7IHN0ZDo6Zm9yd2FyZDxBcmdzPihhcmdz
KS4uLiB9KS4uLiB9OworfQorCisvLyBDb25zdHJ1Y3QgYW4gc3RkOjphcnJheSB3aXRoIE4gZWxl
bWVudHMgb2YgUmVzdWx0VHlwZSwgcGFzc2luZyBBcmdzIHRvIGVhY2ggb2YgdGhlIE4gY29uc3Ry
dWN0b3JzLgordGVtcGxhdGU8dHlwZW5hbWUgUmVzdWx0VHlwZSwgc2l6ZV90IE4sIHR5cGVuYW1l
IC4uLkFyZ3M+Citjb25zdGV4cHIgYXV0byBjb25zdHJ1Y3RGaXhlZFNpemVBcnJheVdpdGhBcmd1
bWVudHMoQXJncyYmLi4uIGFyZ3MpIC0+IGRlY2x0eXBlKGF1dG8pCit7CisgICAgYXV0byB0dXBs
ZSA9IHN0ZDo6bWFrZV9pbmRleF9zZXF1ZW5jZTxOPigpOworICAgIHJldHVybiBjb25zdHJ1Y3RG
aXhlZFNpemVBcnJheVdpdGhBcmd1bWVudHNJbXBsPFJlc3VsdFR5cGU+KHR1cGxlLCBzdGQ6OmZv
cndhcmQ8QXJncz4oYXJncykuLi4pOworfQogCiB9IC8vIG5hbWVzcGFjZSBXVEYKIApAQCAtNTE0
LDMgKzUyNyw0IEBAIHVzaW5nIFdURjo6c2FmZUNhc3Q7CiB1c2luZyBXVEY6OnRyeUJpbmFyeVNl
YXJjaDsKIHVzaW5nIFdURjo6bWFrZVVuaXF1ZTsKIHVzaW5nIFdURjo6bWFrZVVuaXF1ZVdpdGhv
dXRGYXN0TWFsbG9jQ2hlY2s7Cit1c2luZyBXVEY6OmNvbnN0cnVjdEZpeGVkU2l6ZUFycmF5V2l0
aEFyZ3VtZW50czsKSW5kZXg6IFRvb2xzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9D
aGFuZ2VMb2cJKHJldmlzaW9uIDI1ODM1MCkKKysrIFRvb2xzL0NoYW5nZUxvZwkod29ya2luZyBj
b3B5KQpAQCAtMSwzICsxLDEyIEBACisyMDIwLTAzLTEyICBTYWFtIEJhcmF0aSAgPHNiYXJhdGlA
YXBwbGUuY29tPgorCisgICAgICAgIEltcGxlbWVudCAxR0Igb2YgZXhlY3V0YWJsZSBtZW1vcnkg
b24gYXJtNjQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTIwODQ5MAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
ICogU2NyaXB0cy9ydW4tanNjLXN0cmVzcy10ZXN0czoKKwogMjAyMC0wMy0xMiAgV2Vuc29uIEhz
aWVoICA8d2Vuc29uX2hzaWVoQGFwcGxlLmNvbT4KIAogICAgICAgICBydW4td2Via2l0LXRlc3Rz
IC0tdXNlLWdwdS1wcm9jZXNzIHNob3VsZCBlbmFibGUgR1BVIFByb2Nlc3MgZm9yIGNhbnZhcwpJ
bmRleDogVG9vbHMvU2NyaXB0cy9ydW4tanNjLXN0cmVzcy10ZXN0cwo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBU
b29scy9TY3JpcHRzL3J1bi1qc2Mtc3RyZXNzLXRlc3RzCShyZXZpc2lvbiAyNTgzNTApCisrKyBU
b29scy9TY3JpcHRzL3J1bi1qc2Mtc3RyZXNzLXRlc3RzCSh3b3JraW5nIGNvcHkpCkBAIC01MCw2
ICs1MCw3IEBAIFNDUklQVFNfUEFUSCA9IFRISVNfU0NSSVBUX1BBVEguZGlybmFtZQogV0VCS0lU
X1BBVEggPSBTQ1JJUFRTX1BBVEguZGlybmFtZS5kaXJuYW1lCiBMQVlPVVRURVNUU19QQVRIID0g
V0VCS0lUX1BBVEggKyAiTGF5b3V0VGVzdHMiCiBXQVNNVEVTVFNfUEFUSCA9IFdFQktJVF9QQVRI
ICsgIkpTVGVzdHMvd2FzbSIKK0pFVFNUUkVBTTJfUEFUSCA9IFdFQktJVF9QQVRIICsgIlBlcmZv
cm1hbmNlVGVzdHMvSmV0U3RyZWFtMiIKIENIQUtSQVRFU1RTX1BBVEggPSBXRUJLSVRfUEFUSCAr
ICJKU1Rlc3RzL0NoYWtyYUNvcmUvdGVzdCIKIHJhaXNlIHVubGVzcyBTQ1JJUFRTX1BBVEguYmFz
ZW5hbWUudG9fcyA9PSAiU2NyaXB0cyIKIHJhaXNlIHVubGVzcyBTQ1JJUFRTX1BBVEguZGlybmFt
ZS5iYXNlbmFtZS50b19zID09ICJUb29scyIKQEAgLTY2OSw3ICs2NzAsNyBAQCBkZWYgcnVuTm9D
SklUVmFsaWRhdGUoKm9wdGlvbmFsVGVzdFNwZWNpCiBlbmQKIAogZGVmIHJ1bk5vQ0pJVFZhbGlk
YXRlUGhhc2VzKCpvcHRpb25hbFRlc3RTcGVjaWZpY09wdGlvbnMpCi0gICAgcnVuKCJuby1jaml0
LXZhbGlkYXRlLXBoYXNlcyIsICItLXZhbGlkYXRlQnl0ZWNvZGU9dHJ1ZSIsICItLXZhbGlkYXRl
R3JhcGhBdEVhY2hQaGFzZT10cnVlIiwgIi0tdXNlU291cmNlUHJvdmlkZXJDYWNoZT1mYWxzZSIs
ICooTk9fQ0pJVF9PUFRJT05TICsgb3B0aW9uYWxUZXN0U3BlY2lmaWNPcHRpb25zKSkKKyAgICBy
dW4oIm5vLWNqaXQtdmFsaWRhdGUtcGhhc2VzIiwgIi0tdmFsaWRhdGVCeXRlY29kZT10cnVlIiwg
Ii0tdmFsaWRhdGVHcmFwaEF0RWFjaFBoYXNlPXRydWUiLCAiLS11c2VTb3VyY2VQcm92aWRlckNh
Y2hlPWZhbHNlIiwgIi0tdXNlUmFuZG9taXppbmdFeGVjdXRhYmxlSXNsYW5kQWxsb2NhdGlvbj10
cnVlIiwgKihOT19DSklUX09QVElPTlMgKyBvcHRpb25hbFRlc3RTcGVjaWZpY09wdGlvbnMpKQog
ZW5kCiAKIGRlZiBydW5Ob0NKSVRDb2xsZWN0Q29udGludW91c2x5KCpvcHRpb25hbFRlc3RTcGVj
aWZpY09wdGlvbnMpCkBAIC03MDYsNyArNzA3LDcgQEAgZGVmIHJ1bkZUTE5vQ0pJVCgqb3B0aW9u
YWxUZXN0U3BlY2lmaWNPcAogZW5kCiAKIGRlZiBydW5GVExOb0NKSVRCM08wKCpvcHRpb25hbFRl
c3RTcGVjaWZpY09wdGlvbnMpCi0gICAgcnVuKCJmdGwtbm8tY2ppdC1iM28wIiwgIi0tdXNlQXJy
YXlBbGxvY2F0aW9uUHJvZmlsaW5nPWZhbHNlIiwgIi0tZm9yY2VQb2x5UHJvdG89dHJ1ZSIsICoo
RlRMX09QVElPTlMgKyBOT19DSklUX09QVElPTlMgKyBCM08wX09QVElPTlMgKyBGT1JDRV9MTElO
VF9FWElUX09QVElPTlMgKyBvcHRpb25hbFRlc3RTcGVjaWZpY09wdGlvbnMpKQorICAgIHJ1bigi
ZnRsLW5vLWNqaXQtYjNvMCIsICItLXVzZUFycmF5QWxsb2NhdGlvblByb2ZpbGluZz1mYWxzZSIs
ICItLWZvcmNlUG9seVByb3RvPXRydWUiLCAiLS11c2VSYW5kb21pemluZ0V4ZWN1dGFibGVJc2xh
bmRBbGxvY2F0aW9uPXRydWUiLCAqKEZUTF9PUFRJT05TICsgTk9fQ0pJVF9PUFRJT05TICsgQjNP
MF9PUFRJT05TICsgRk9SQ0VfTExJTlRfRVhJVF9PUFRJT05TICsgb3B0aW9uYWxUZXN0U3BlY2lm
aWNPcHRpb25zKSkKIGVuZAogCiBkZWYgcnVuRlRMTm9DSklUVmFsaWRhdGUoKm9wdGlvbmFsVGVz
dFNwZWNpZmljT3B0aW9ucykKQEAgLTczNCw3ICs3MzUsNyBAQCBkZWYgcnVuREZHRWFnZXJOb0NK
SVRWYWxpZGF0ZSgqb3B0aW9uYWxUCiBlbmQKIAogZGVmIHJ1bkZUTEVhZ2VyKCpvcHRpb25hbFRl
c3RTcGVjaWZpY09wdGlvbnMpCi0gICAgcnVuKCJmdGwtZWFnZXIiLCAiLS1haXJGb3JjZUJyaWdn
c0FsbG9jYXRvcj10cnVlIiwgIi0tZm9yY2VQb2x5UHJvdG89dHJ1ZSIsICooRlRMX09QVElPTlMg
KyBFQUdFUl9PUFRJT05TICsgQ09MTEVDVF9DT05USU5VT1VTTFlfT1BUSU9OUyArIG9wdGlvbmFs
VGVzdFNwZWNpZmljT3B0aW9ucykpCisgICAgcnVuKCJmdGwtZWFnZXIiLCAiLS1haXJGb3JjZUJy
aWdnc0FsbG9jYXRvcj10cnVlIiwgIi0tdXNlUmFuZG9taXppbmdFeGVjdXRhYmxlSXNsYW5kQWxs
b2NhdGlvbj10cnVlIiwgIi0tZm9yY2VQb2x5UHJvdG89dHJ1ZSIsICooRlRMX09QVElPTlMgKyBF
QUdFUl9PUFRJT05TICsgQ09MTEVDVF9DT05USU5VT1VTTFlfT1BUSU9OUyArIG9wdGlvbmFsVGVz
dFNwZWNpZmljT3B0aW9ucykpCiBlbmQKIAogZGVmIHJ1bkZUTEVhZ2VyV2F0Y2hkb2coKm9wdGlv
bmFsVGVzdFNwZWNpZmljT3B0aW9ucykKQEAgLTc3NSw3ICs3NzYsNyBAQCBkZWYgcnVuTm9DSklU
KCpvcHRpb25hbFRlc3RTcGVjaWZpY09wdGlvCiBlbmQKIAogZGVmIHJ1bkVhZ2VySmV0dGlzb25O
b0NKSVQoKm9wdGlvbmFsVGVzdFNwZWNpZmljT3B0aW9ucykKLSAgICBydW4oImVhZ2VyLWpldHRp
c29uLW5vLWNqaXQiLCAiLS1mb3JjZUNvZGVCbG9ja1RvSmV0dGlzb25EdWVUb09sZEFnZT10cnVl
IiwgKihOT19DSklUX09QVElPTlMgKyBvcHRpb25hbFRlc3RTcGVjaWZpY09wdGlvbnMpKQorICAg
IHJ1bigiZWFnZXItamV0dGlzb24tbm8tY2ppdCIsICItLXVzZVJhbmRvbWl6aW5nRXhlY3V0YWJs
ZUlzbGFuZEFsbG9jYXRpb249dHJ1ZSIsICItLWZvcmNlQ29kZUJsb2NrVG9KZXR0aXNvbkR1ZVRv
T2xkQWdlPXRydWUiLCAqKE5PX0NKSVRfT1BUSU9OUyArIG9wdGlvbmFsVGVzdFNwZWNpZmljT3B0
aW9ucykpCiBlbmQKIAogZGVmIHJ1blNoYWRvd0NoaWNrZW4oKm9wdGlvbmFsVGVzdFNwZWNpZmlj
T3B0aW9ucykKQEAgLTEwODMsMTYgKzEwODQsMzcgQEAgZGVmIHJ1bldlYkFzc2VtYmx5CiAgICAg
cnVuKCJkZWZhdWx0LXdhc20iLCAiLW0iLCAqRlRMX09QVElPTlMpCiAgICAgaWYgJG1vZGUgIT0g
InF1aWNrIgogICAgICAgICBydW4oIndhc20tbm8tY2ppdC15ZXMtdGxzLWNvbnRleHQiLCAiLW0i
LCAiLS11c2VGYXN0VExTRm9yV2FzbUNvbnRleHQ9dHJ1ZSIsICooRlRMX09QVElPTlMgKyBOT19D
SklUX09QVElPTlMpKQotICAgICAgICBydW4oIndhc20tZWFnZXIiLCAiLW0iLCAqKEZUTF9PUFRJ
T05TICsgRUFHRVJfT1BUSU9OUykpCi0gICAgICAgIHJ1bigid2FzbS1lYWdlci1qZXR0aXNvbiIs
ICItbSIsICItLWZvcmNlQ29kZUJsb2NrVG9KZXR0aXNvbkR1ZVRvT2xkQWdlPXRydWUiLCAqRlRM
X09QVElPTlMpCisgICAgICAgIHJ1bigid2FzbS1lYWdlciIsICItbSIsICItLXVzZVJhbmRvbWl6
aW5nRXhlY3V0YWJsZUlzbGFuZEFsbG9jYXRpb249dHJ1ZSIsICooRlRMX09QVElPTlMgKyBFQUdF
Ul9PUFRJT05TKSkKKyAgICAgICAgcnVuKCJ3YXNtLWVhZ2VyLWpldHRpc29uIiwgIi1tIiwgIi0t
Zm9yY2VDb2RlQmxvY2tUb0pldHRpc29uRHVlVG9PbGRBZ2U9dHJ1ZSIsICItLXVzZVJhbmRvbWl6
aW5nRXhlY3V0YWJsZUlzbGFuZEFsbG9jYXRpb249dHJ1ZSIsICpGVExfT1BUSU9OUykKICAgICAg
ICAgcnVuKCJ3YXNtLW5vLXRscy1jb250ZXh0IiwgIi1tIiwgIi0tdXNlRmFzdFRMU0Zvcldhc21D
b250ZXh0PWZhbHNlIiwgKkZUTF9PUFRJT05TKQogICAgICAgICBydW4oIndhc20tc2xvdy1tZW1v
cnkiLCAiLW0iLCAiLS11c2VXZWJBc3NlbWJseUZhc3RNZW1vcnk9ZmFsc2UiLCAqRlRMX09QVElP
TlMpCiAgICAgICAgIHJ1bigid2FzbS1iMyIsICItbSIsICItLXVzZVdhc21MTEludD1mYWxzZSIs
ICItLXdhc21CQlFVc2VzQWlyPWZhbHNlIiwgKkZUTF9PUFRJT05TKQotICAgICAgICBydW4oIndh
c20tYWlyIiwgIi1tIiwgIi0tdXNlV2FzbUxMSW50PWZhbHNlIiwgKkZUTF9PUFRJT05TKQorICAg
ICAgICBydW4oIndhc20tYWlyIiwgIi1tIiwgIi0tdXNlV2FzbUxMSW50PWZhbHNlIiwgIi0tdXNl
UmFuZG9taXppbmdFeGVjdXRhYmxlSXNsYW5kQWxsb2NhdGlvbj10cnVlIiwgKkZUTF9PUFRJT05T
KQogICAgICAgICBydW4oIndhc20tY29sbGVjdC1jb250aW51b3VzbHkiLCAiLW0iLCAiLS1jb2xs
ZWN0Q29udGludW91c2x5PXRydWUiLCAqRlRMX09QVElPTlMpIGlmIHNob3VsZENvbGxlY3RDb250
aW51b3VzbHk/CiAgICAgZW5kCiBlbmQKIAorZGVmIHJ1bldlYkFzc2VtYmx5SmV0U3RyZWFtMgor
ICAgIHJldHVybiBpZiAhJGppdFRlc3RzCisgICAgcmV0dXJuIGlmICEkaXNGVExQbGF0Zm9ybQor
CisgICAgcHJlcGFyZUV4dHJhQWJzb2x1dGVGaWxlcyhKRVRTVFJFQU0yX1BBVEgsIFsiSmV0U3Ry
ZWFtRHJpdmVyLmpzIl0pCisgICAgcHJlcGFyZUV4dHJhUmVsYXRpdmVGaWxlc1dpdGhCYXNlRGly
ZWN0b3J5KERpcltKRVRTVFJFQU0yX1BBVEggKyAid2FzbSIgKyAiKi5qcyJdLm1hcCB7IHxmfCAi
d2FzbS8iICsgRmlsZS5iYXNlbmFtZShmKSB9LCAkY29sbGVjdGlvbi5kaXJuYW1lLCAkZXh0cmFG
aWxlc0Jhc2VEaXIuZGlybmFtZSkKKyAgICBwcmVwYXJlRXh0cmFSZWxhdGl2ZUZpbGVzV2l0aEJh
c2VEaXJlY3RvcnkoRGlyW0pFVFNUUkVBTTJfUEFUSCArICJ3YXNtIiArICIqLndhc20iXS5tYXAg
eyB8ZnwgIndhc20vIiArIEZpbGUuYmFzZW5hbWUoZikgfSwgJGNvbGxlY3Rpb24uZGlybmFtZSwg
JGV4dHJhRmlsZXNCYXNlRGlyLmRpcm5hbWUpCisKKyAgICBydW4oImRlZmF1bHQtd2FzbSIsICpG
VExfT1BUSU9OUykKKyAgICBpZiAkbW9kZSAhPSAicXVpY2siCisgICAgICAgIHJ1bigid2FzbS1u
by1jaml0LXllcy10bHMtY29udGV4dCIsICItLXVzZUZhc3RUTFNGb3JXYXNtQ29udGV4dD10cnVl
IiwgKihGVExfT1BUSU9OUyArIE5PX0NKSVRfT1BUSU9OUykpCisgICAgICAgIHJ1bigid2FzbS1l
YWdlciIsICItLXVzZVJhbmRvbWl6aW5nRXhlY3V0YWJsZUlzbGFuZEFsbG9jYXRpb249dHJ1ZSIs
ICooRlRMX09QVElPTlMgKyBFQUdFUl9PUFRJT05TKSkKKyAgICAgICAgcnVuKCJ3YXNtLWVhZ2Vy
LWpldHRpc29uIiwgIi0tZm9yY2VDb2RlQmxvY2tUb0pldHRpc29uRHVlVG9PbGRBZ2U9dHJ1ZSIs
ICpGVExfT1BUSU9OUykKKyAgICAgICAgcnVuKCJ3YXNtLW5vLXRscy1jb250ZXh0IiwgIi0tdXNl
RmFzdFRMU0Zvcldhc21Db250ZXh0PWZhbHNlIiwgKkZUTF9PUFRJT05TKQorICAgICAgICBydW4o
Indhc20tc2xvdy1tZW1vcnkiLCAiLS11c2VXZWJBc3NlbWJseUZhc3RNZW1vcnk9ZmFsc2UiLCAq
RlRMX09QVElPTlMpCisgICAgICAgIHJ1bigid2FzbS1iMyIsICItLXVzZVdhc21MTEludD1mYWxz
ZSIsICItLXdhc21CQlFVc2VzQWlyPWZhbHNlIiwgKkZUTF9PUFRJT05TKQorICAgICAgICBydW4o
Indhc20tYWlyIiwgIi0tdXNlV2FzbUxMSW50PWZhbHNlIiwgIi0tdXNlUmFuZG9taXppbmdFeGVj
dXRhYmxlSXNsYW5kQWxsb2NhdGlvbj10cnVlIiwgKkZUTF9PUFRJT05TKQorICAgICAgICBydW4o
Indhc20tY29sbGVjdC1jb250aW51b3VzbHkiLCAiLS1jb2xsZWN0Q29udGludW91c2x5PXRydWUi
LCAqRlRMX09QVElPTlMpIGlmIHNob3VsZENvbGxlY3RDb250aW51b3VzbHk/CisgICAgZW5kCitl
bmQKKwogZGVmIHJ1bldlYkFzc2VtYmx5U3VpdGUoKm9wdGlvbmFsVGVzdFNwZWNpZmljT3B0aW9u
cykKICAgICByZXR1cm4gaWYgISRqaXRUZXN0cwogICAgIHJldHVybiBpZiAhJGlzRlRMUGxhdGZv
cm0KQEAgLTExMDMsMTEgKzExMjUsMTEgQEAgZGVmIHJ1bldlYkFzc2VtYmx5U3VpdGUoKm9wdGlv
bmFsVGVzdFNwZQogICAgIGlmICRtb2RlICE9ICJxdWljayIKICAgICAgICAgcnVuKCJ3YXNtLW5v
LWNqaXQteWVzLXRscy1jb250ZXh0IiwgIi1tIiwgIi0tdXNlRmFzdFRMU0Zvcldhc21Db250ZXh0
PXRydWUiLCAqKEZUTF9PUFRJT05TICsgTk9fQ0pJVF9PUFRJT05TICsgb3B0aW9uYWxUZXN0U3Bl
Y2lmaWNPcHRpb25zKSkKICAgICAgICAgcnVuKCJ3YXNtLWVhZ2VyIiwgIi1tIiwgKihGVExfT1BU
SU9OUyArIEVBR0VSX09QVElPTlMgKyBvcHRpb25hbFRlc3RTcGVjaWZpY09wdGlvbnMpKQotICAg
ICAgICBydW4oIndhc20tZWFnZXItamV0dGlzb24iLCAiLW0iLCAiLS1mb3JjZUNvZGVCbG9ja1Rv
SmV0dGlzb25EdWVUb09sZEFnZT10cnVlIiwgKihGVExfT1BUSU9OUyArIG9wdGlvbmFsVGVzdFNw
ZWNpZmljT3B0aW9ucykpCisgICAgICAgIHJ1bigid2FzbS1lYWdlci1qZXR0aXNvbiIsICItbSIs
ICItLWZvcmNlQ29kZUJsb2NrVG9KZXR0aXNvbkR1ZVRvT2xkQWdlPXRydWUiLCAiLS11c2VSYW5k
b21pemluZ0V4ZWN1dGFibGVJc2xhbmRBbGxvY2F0aW9uPXRydWUiLCAqKEZUTF9PUFRJT05TICsg
b3B0aW9uYWxUZXN0U3BlY2lmaWNPcHRpb25zKSkKICAgICAgICAgcnVuKCJ3YXNtLW5vLXRscy1j
b250ZXh0IiwgIi1tIiwgIi0tdXNlRmFzdFRMU0Zvcldhc21Db250ZXh0PWZhbHNlIiwgKihGVExf
T1BUSU9OUyArIG9wdGlvbmFsVGVzdFNwZWNpZmljT3B0aW9ucykpCiAgICAgICAgIHJ1bigid2Fz
bS1zbG93LW1lbW9yeSIsICItbSIsICItLXVzZVdlYkFzc2VtYmx5RmFzdE1lbW9yeT1mYWxzZSIs
ICooRlRMX09QVElPTlMgKyBvcHRpb25hbFRlc3RTcGVjaWZpY09wdGlvbnMpKQogICAgICAgICBy
dW4oIndhc20tYjMiLCAiLW0iLCAiLS11c2VXYXNtTExJbnQ9ZmFsc2UiLCAiLS13YXNtQkJRVXNl
c0Fpcj1mYWxzZSIsICooRlRMX09QVElPTlMgKyBvcHRpb25hbFRlc3RTcGVjaWZpY09wdGlvbnMp
KQotICAgICAgICBydW4oIndhc20tYWlyIiwgIi1tIiwgIi0tdXNlV2FzbUxMSW50PWZhbHNlIiwg
KihGVExfT1BUSU9OUyArIG9wdGlvbmFsVGVzdFNwZWNpZmljT3B0aW9ucykpCisgICAgICAgIHJ1
bigid2FzbS1haXIiLCAiLW0iLCAiLS11c2VXYXNtTExJbnQ9ZmFsc2UiLCAiLS11c2VSYW5kb21p
emluZ0V4ZWN1dGFibGVJc2xhbmRBbGxvY2F0aW9uPXRydWUiLCAqKEZUTF9PUFRJT05TICsgb3B0
aW9uYWxUZXN0U3BlY2lmaWNPcHRpb25zKSkKICAgICAgICAgcnVuKCJ3YXNtLWNvbGxlY3QtY29u
dGludW91c2x5IiwgIi1tIiwgIi0tY29sbGVjdENvbnRpbnVvdXNseT10cnVlIiwgKihGVExfT1BU
SU9OUyArIG9wdGlvbmFsVGVzdFNwZWNpZmljT3B0aW9ucykpIGlmIHNob3VsZENvbGxlY3RDb250
aW51b3VzbHk/CiAgICAgZW5kCiBlbmQKQEAgLTExMzMsMTEgKzExNTUsMTEgQEAgZGVmIHJ1bldl
YkFzc2VtYmx5V2l0aEhhcm5lc3MoKm9wdGlvbmFsVAogICAgIGlmICRtb2RlICE9ICJxdWljayIK
ICAgICAgICAgcnVuSGFybmVzc1Rlc3QoIndhc20tbm8tY2ppdC15ZXMtdGxzLWNvbnRleHQiLCAi
LS11c2VGYXN0VExTRm9yV2FzbUNvbnRleHQ9dHJ1ZSIsICooRlRMX09QVElPTlMgKyBOT19DSklU
X09QVElPTlMgKyBvcHRpb25hbFRlc3RTcGVjaWZpY09wdGlvbnMpKQogICAgICAgICBydW5IYXJu
ZXNzVGVzdCgid2FzbS1lYWdlciIsICooRlRMX09QVElPTlMgKyBFQUdFUl9PUFRJT05TICsgb3B0
aW9uYWxUZXN0U3BlY2lmaWNPcHRpb25zKSkKLSAgICAgICAgcnVuSGFybmVzc1Rlc3QoIndhc20t
ZWFnZXItamV0dGlzb24iLCAiLS1mb3JjZUNvZGVCbG9ja1RvSmV0dGlzb25EdWVUb09sZEFnZT10
cnVlIiwgKihGVExfT1BUSU9OUyArIG9wdGlvbmFsVGVzdFNwZWNpZmljT3B0aW9ucykpCisgICAg
ICAgIHJ1bkhhcm5lc3NUZXN0KCJ3YXNtLWVhZ2VyLWpldHRpc29uIiwgIi0tZm9yY2VDb2RlQmxv
Y2tUb0pldHRpc29uRHVlVG9PbGRBZ2U9dHJ1ZSIsICItLXVzZVJhbmRvbWl6aW5nRXhlY3V0YWJs
ZUlzbGFuZEFsbG9jYXRpb249dHJ1ZSIsICooRlRMX09QVElPTlMgKyBvcHRpb25hbFRlc3RTcGVj
aWZpY09wdGlvbnMpKQogICAgICAgICBydW5IYXJuZXNzVGVzdCgid2FzbS1uby10bHMtY29udGV4
dCIsICItLXVzZUZhc3RUTFNGb3JXYXNtQ29udGV4dD1mYWxzZSIsICooRlRMX09QVElPTlMgKyBv
cHRpb25hbFRlc3RTcGVjaWZpY09wdGlvbnMpKQogICAgICAgICBydW5IYXJuZXNzVGVzdCgid2Fz
bS1zbG93LW1lbW9yeSIsICItLXVzZVdlYkFzc2VtYmx5RmFzdE1lbW9yeT1mYWxzZSIsICooRlRM
X09QVElPTlMgKyBvcHRpb25hbFRlc3RTcGVjaWZpY09wdGlvbnMpKQogICAgICAgICBydW5IYXJu
ZXNzVGVzdCgid2FzbS1iMyIsICItLXVzZVdhc21MTEludD1mYWxzZSIsICItLXdhc21CQlFVc2Vz
QWlyPWZhbHNlIiwgKihGVExfT1BUSU9OUyArIG9wdGlvbmFsVGVzdFNwZWNpZmljT3B0aW9ucykp
Ci0gICAgICAgIHJ1bkhhcm5lc3NUZXN0KCJ3YXNtLW5vLWFpciIsICItLXVzZVdhc21MTEludD1m
YWxzZSIsICooRlRMX09QVElPTlMgKyBvcHRpb25hbFRlc3RTcGVjaWZpY09wdGlvbnMpKQorICAg
ICAgICBydW5IYXJuZXNzVGVzdCgid2FzbS1uby1haXIiLCAiLS11c2VXYXNtTExJbnQ9ZmFsc2Ui
LCAiLS11c2VSYW5kb21pemluZ0V4ZWN1dGFibGVJc2xhbmRBbGxvY2F0aW9uPXRydWUiLCAqKEZU
TF9PUFRJT05TICsgb3B0aW9uYWxUZXN0U3BlY2lmaWNPcHRpb25zKSkKICAgICAgICAgcnVuSGFy
bmVzc1Rlc3QoIndhc20tY29sbGVjdC1jb250aW51b3VzbHkiLCAiLS1jb2xsZWN0Q29udGludW91
c2x5PXRydWUiLCAqKEZUTF9PUFRJT05TICsgb3B0aW9uYWxUZXN0U3BlY2lmaWNPcHRpb25zKSkg
aWYgc2hvdWxkQ29sbGVjdENvbnRpbnVvdXNseT8KICAgICBlbmQKIGVuZApAQCAtMTE1NCwxMCAr
MTE3NiwxMCBAQCBkZWYgcnVuV2ViQXNzZW1ibHlFbXNjcmlwdGVuKG1vZGUpCiAgICAgcnVuKCJk
ZWZhdWx0LXdhc20iLCAqRlRMX09QVElPTlMpCiAgICAgaWYgJG1vZGUgIT0gInF1aWNrIgogICAg
ICAgICBydW4oIndhc20tbm8tY2ppdC15ZXMtdGxzLWNvbnRleHQiLCAiLS11c2VGYXN0VExTRm9y
V2FzbUNvbnRleHQ9dHJ1ZSIsICooRlRMX09QVElPTlMgKyBOT19DSklUX09QVElPTlMpKQotICAg
ICAgICBydW4oIndhc20tZWFnZXItamV0dGlzb24iLCAiLS1mb3JjZUNvZGVCbG9ja1RvSmV0dGlz
b25EdWVUb09sZEFnZT10cnVlIiwgKkZUTF9PUFRJT05TKQorICAgICAgICBydW4oIndhc20tZWFn
ZXItamV0dGlzb24iLCAiLS1mb3JjZUNvZGVCbG9ja1RvSmV0dGlzb25EdWVUb09sZEFnZT10cnVl
IiwgIi0tdXNlUmFuZG9taXppbmdFeGVjdXRhYmxlSXNsYW5kQWxsb2NhdGlvbj10cnVlIiwgKkZU
TF9PUFRJT05TKQogICAgICAgICBydW4oIndhc20tbm8tdGxzLWNvbnRleHQiLCAiLS11c2VGYXN0
VExTRm9yV2FzbUNvbnRleHQ9ZmFsc2UiLCAqRlRMX09QVElPTlMpCiAgICAgICAgIHJ1bigid2Fz
bS1iMyIsICItLXVzZVdhc21MTEludD1mYWxzZSIsICItLXdhc21CQlFVc2VzQWlyPWZhbHNlIiwg
KkZUTF9PUFRJT05TKQotICAgICAgICBydW4oIndhc20tYWlyIiwgIi0tdXNlV2FzbUxMSW50PWZh
bHNlIiwgKkZUTF9PUFRJT05TKQorICAgICAgICBydW4oIndhc20tYWlyIiwgIi0tdXNlV2FzbUxM
SW50PWZhbHNlIiwgIi0tdXNlUmFuZG9taXppbmdFeGVjdXRhYmxlSXNsYW5kQWxsb2NhdGlvbj10
cnVlIiwgKkZUTF9PUFRJT05TKQogICAgICAgICBydW4oIndhc20tY29sbGVjdC1jb250aW51b3Vz
bHkiLCAiLS1jb2xsZWN0Q29udGludW91c2x5PXRydWUiLCAqRlRMX09QVElPTlMpIGlmIHNob3Vs
ZENvbGxlY3RDb250aW51b3VzbHk/CiAgICAgZW5kCiBlbmQKQEAgLTExODAsMTAgKzEyMDIsMTAg
QEAgZGVmIHJ1bldlYkFzc2VtYmx5U3BlY1Rlc3QobW9kZSkKICAgICBydW5XaXRoT3V0cHV0SGFu
ZGxlcigiZGVmYXVsdC13YXNtIiwgbm9pc3lPdXRwdXRIYW5kbGVyLCAiLi4vc3BlYy1oYXJuZXNz
LmpzIiwgKkZUTF9PUFRJT05TKQogICAgIGlmICRtb2RlICE9ICJxdWljayIKICAgICAgIHJ1bldp
dGhPdXRwdXRIYW5kbGVyKCJ3YXNtLW5vLWNqaXQteWVzLXRscy1jb250ZXh0Iiwgbm9pc3lPdXRw
dXRIYW5kbGVyLCAiLi4vc3BlYy1oYXJuZXNzLmpzIiwgICItLXVzZUZhc3RUTFNGb3JXYXNtQ29u
dGV4dD10cnVlIiwgKihGVExfT1BUSU9OUyArIE5PX0NKSVRfT1BUSU9OUykpCi0gICAgICBydW5X
aXRoT3V0cHV0SGFuZGxlcigid2FzbS1lYWdlci1qZXR0aXNvbiIsIG5vaXN5T3V0cHV0SGFuZGxl
ciwgIi4uL3NwZWMtaGFybmVzcy5qcyIsICItLWZvcmNlQ29kZUJsb2NrVG9KZXR0aXNvbkR1ZVRv
T2xkQWdlPXRydWUiLCAqRlRMX09QVElPTlMpCisgICAgICBydW5XaXRoT3V0cHV0SGFuZGxlcigi
d2FzbS1lYWdlci1qZXR0aXNvbiIsIG5vaXN5T3V0cHV0SGFuZGxlciwgIi4uL3NwZWMtaGFybmVz
cy5qcyIsICItLWZvcmNlQ29kZUJsb2NrVG9KZXR0aXNvbkR1ZVRvT2xkQWdlPXRydWUiLCAiLS11
c2VSYW5kb21pemluZ0V4ZWN1dGFibGVJc2xhbmRBbGxvY2F0aW9uPXRydWUiLCAqRlRMX09QVElP
TlMpCiAgICAgICBydW5XaXRoT3V0cHV0SGFuZGxlcigid2FzbS1uby10bHMtY29udGV4dCIsIG5v
aXN5T3V0cHV0SGFuZGxlciwgIi4uL3NwZWMtaGFybmVzcy5qcyIsICItLXVzZUZhc3RUTFNGb3JX
YXNtQ29udGV4dD1mYWxzZSIsICpGVExfT1BUSU9OUykKICAgICAgIHJ1bldpdGhPdXRwdXRIYW5k
bGVyKCJ3YXNtLWIzIiwgbm9pc3lPdXRwdXRIYW5kbGVyLCAiLi4vc3BlYy1oYXJuZXNzLmpzIiwg
Ii0tdXNlV2FzbUxMSW50PWZhbHNlIiwgIi0td2FzbUJCUVVzZXNBaXI9ZmFsc2UiLCAqRlRMX09Q
VElPTlMpCi0gICAgICBydW5XaXRoT3V0cHV0SGFuZGxlcigid2FzbS1haXIiLCBub2lzeU91dHB1
dEhhbmRsZXIsICIuLi9zcGVjLWhhcm5lc3MuanMiLCAiLS11c2VXYXNtTExJbnQ9ZmFsc2UiLCAq
RlRMX09QVElPTlMpCisgICAgICBydW5XaXRoT3V0cHV0SGFuZGxlcigid2FzbS1haXIiLCBub2lz
eU91dHB1dEhhbmRsZXIsICIuLi9zcGVjLWhhcm5lc3MuanMiLCAiLS11c2VXYXNtTExJbnQ9ZmFs
c2UiLCAiLS11c2VSYW5kb21pemluZ0V4ZWN1dGFibGVJc2xhbmRBbGxvY2F0aW9uPXRydWUiLCAq
RlRMX09QVElPTlMpCiAgICAgICBydW5XaXRoT3V0cHV0SGFuZGxlcigid2FzbS1jb2xsZWN0LWNv
bnRpbnVvdXNseSIsIG5vaXN5T3V0cHV0SGFuZGxlciwgIi4uL3NwZWMtaGFybmVzcy5qcyIsICIt
LWNvbGxlY3RDb250aW51b3VzbHk9dHJ1ZSIsICpGVExfT1BUSU9OUykgaWYgc2hvdWxkQ29sbGVj
dENvbnRpbnVvdXNseT8KICAgICBlbmQKIGVuZApAQCAtMTM1MiwxNyArMTM3NCwyMSBAQCBkZWYg
bm9Ob0xMSW50UnVuTGF5b3V0VGVzdAogICAgIGVuZAogZW5kCiAKLWRlZiBwcmVwYXJlRXh0cmFS
ZWxhdGl2ZUZpbGVzKGV4dHJhRmlsZXMsIGRlc3RpbmF0aW9uKQorZGVmIHByZXBhcmVFeHRyYVJl
bGF0aXZlRmlsZXNXaXRoQmFzZURpcmVjdG9yeShleHRyYUZpbGVzLCBkZXN0aW5hdGlvbiwgYmFz
ZURpcmVjdG9yeSkKICAgICBEaXIuY2hkaXIoJG91dHB1dERpcikgewogICAgICAgICBleHRyYUZp
bGVzLmVhY2ggewogICAgICAgICAgICAgfCBmaWxlIHwKICAgICAgICAgICAgIGRlc3QgPSBkZXN0
aW5hdGlvbiArIGZpbGUKICAgICAgICAgICAgIEZpbGVVdGlscy5ta2Rpcl9wKGRlc3QuZGlybmFt
ZSkKLSAgICAgICAgICAgIEZpbGVVdGlscy5jcCAkZXh0cmFGaWxlc0Jhc2VEaXIgKyBmaWxlLCBk
ZXN0CisgICAgICAgICAgICBGaWxlVXRpbHMuY3AgYmFzZURpcmVjdG9yeSArIGZpbGUsIGRlc3QK
ICAgICAgICAgfQogICAgIH0KIGVuZAogCitkZWYgcHJlcGFyZUV4dHJhUmVsYXRpdmVGaWxlcyhl
eHRyYUZpbGVzLCBkZXN0aW5hdGlvbikKKyAgICBwcmVwYXJlRXh0cmFSZWxhdGl2ZUZpbGVzV2l0
aEJhc2VEaXJlY3RvcnkoZXh0cmFGaWxlcywgZGVzdGluYXRpb24sICRleHRyYUZpbGVzQmFzZURp
cikKK2VuZAorCiBkZWYgYmFzZURpckZvckNvbGxlY3Rpb24oY29sbGVjdGlvbk5hbWUpCiAgICAg
UGF0aG5hbWUoIi50ZXN0cyIpICsgY29sbGVjdGlvbk5hbWUKIGVuZApJbmRleDogVG9vbHMvVGVz
dFdlYktpdEFQSS9UZXN0cy9XVEYvTWV0YUFsbG9jYXRvci5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9v
bHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XVEYvTWV0YUFsbG9jYXRvci5jcHAJKHJldmlzaW9uIDI1
ODM1MCkKKysrIFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV1RGL01ldGFBbGxvY2F0b3IuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC01Miw3ICs1Miw3IEBAIHB1YmxpYzoKICAgICBjbGFzcyBTaW1w
bGVUZXN0QWxsb2NhdG9yOiBwdWJsaWMgTWV0YUFsbG9jYXRvciB7CiAgICAgcHVibGljOgogICAg
ICAgICBTaW1wbGVUZXN0QWxsb2NhdG9yKE1ldGFBbGxvY2F0b3JUZXN0KiBwYXJlbnQpCi0gICAg
ICAgICAgICA6IE1ldGFBbGxvY2F0b3IoMzIpCisgICAgICAgICAgICA6IE1ldGFBbGxvY2F0b3Io
bV9sb2NrLCAzMikKICAgICAgICAgICAgICwgbV9wYXJlbnQocGFyZW50KQogICAgICAgICB7CiAg
ICAgICAgICAgICBhZGRGcmVzaEZyZWVTcGFjZShyZWludGVycHJldF9jYXN0PHZvaWQqPihiYXNl
UGFnZSAqIHBhZ2VTaXplKCkpLCBkZWZhdWx0UGFnZXNJbkhlYXAgKiBwYWdlU2l6ZSgpKTsKQEAg
LTEyOSw2ICsxMjksNyBAQCBwdWJsaWM6CiAgICAgICAgIH0KICAgICAgICAgCiAgICAgcHJpdmF0
ZToKKyAgICAgICAgTG9jayBtX2xvY2s7CiAgICAgICAgIE1ldGFBbGxvY2F0b3JUZXN0KiBtX3Bh
cmVudDsKICAgICB9OwogCkBAIC0xOTAsNyArMTkxLDcgQEAgcHVibGljOgogICAgIAogICAgIE1l
dGFBbGxvY2F0b3JIYW5kbGUqIGFsbG9jYXRlKHNpemVfdCBzaXplSW5CeXRlcywgU2FuaXR5Q2hl
Y2tNb2RlIHNhbml0eUNoZWNrTW9kZSA9IFJ1blNhbml0eUNoZWNrKQogICAgIHsKLSAgICAgICAg
TWV0YUFsbG9jYXRvckhhbmRsZSogaGFuZGxlID0gYWxsb2NhdG9yLT5hbGxvY2F0ZShzaXplSW5C
eXRlcywgMCkubGVha1JlZigpOworICAgICAgICBNZXRhQWxsb2NhdG9ySGFuZGxlKiBoYW5kbGUg
PSBhbGxvY2F0b3ItPmFsbG9jYXRlKHNpemVJbkJ5dGVzKS5sZWFrUmVmKCk7CiAgICAgICAgIEVY
UEVDVF9UUlVFKGhhbmRsZSk7CiAgICAgICAgIEVYUEVDVF9FUShoYW5kbGUtPnNpemVJbkJ5dGVz
KCksIHNpemVJbkJ5dGVzKTsKICAgICAgICAgCkBAIC00NzIsNyArNDczLDcgQEAgcHVibGljOgog
ICAgICAgICAKICAgICAgICAgc2FuaXR5Q2hlY2soKTsKICAgICAgICAgCi0gICAgICAgIEVYUEVD
VF9UUlVFKCFhbGxvY2F0b3ItPmFsbG9jYXRlKHNpemVJbkJ5dGVzLCAwKSk7CisgICAgICAgIEVY
UEVDVF9UUlVFKCFhbGxvY2F0b3ItPmFsbG9jYXRlKHNpemVJbkJ5dGVzKSk7CiAgICAgICAgIAog
ICAgICAgICBmb3IgKHNpemVfdCBpbmRleCA9IDA7IGluZGV4IDwgbnVtQWxsb2NhdGlvbnM7ICsr
aW5kZXgpCiAgICAgICAgICAgICBmcmVlKGhhbmRsZXMuYXQoaW5kZXgpLCBEb250UnVuU2FuaXR5
Q2hlY2spOwpAQCAtNTc5LDcgKzU4MCw3IEBAIHB1YmxpYzoKICAgICAgICAgc2FuaXR5Q2hlY2so
KTsKICAgICAgICAgCiAgICAgICAgIC8vIEFzc2VydCB0aGF0IHRoZSBoZWFwIGlzIG5vdCBlbXB0
eS4KLSAgICAgICAgRVhQRUNUX1RSVUUoIWFsbG9jYXRvci0+YWxsb2NhdGUoZGVmYXVsdFBhZ2Vz
SW5IZWFwICogcGFnZVNpemUoKSwgMCkpOworICAgICAgICBFWFBFQ1RfVFJVRSghYWxsb2NhdG9y
LT5hbGxvY2F0ZShkZWZhdWx0UGFnZXNJbkhlYXAgKiBwYWdlU2l6ZSgpKSk7CiAgICAgICAgIAog
ICAgICAgICAvLyBBbGxvY2F0ZSB0aGUgcmVtYWluZGVyIG9mIHRoZSBoZWFwLgogICAgICAgICBN
ZXRhQWxsb2NhdG9ySGFuZGxlKiByZW1haW5kZXIgPSBhbGxvY2F0ZShkZWZhdWx0UGFnZXNJbkhl
YXAgKiBwYWdlU2l6ZSgpIC0gc2Vjb25kU2l6ZSk7CkBAIC01OTcsMTIgKzU5OCwxMiBAQCBwdWJs
aWM6CiAgICAgCiAgICAgdm9pZCB0ZXN0RGVtYW5kQWxsb2NDb2FsZXNjZShzaXplX3QgZmlyc3RT
aXplLCBzaXplX3QgbnVtUGFnZXMsIHNpemVfdCBzZWNvbmRTaXplKQogICAgIHsKLSAgICAgICAg
RVhQRUNUX1RSVUUoIWFsbG9jYXRvci0+YWxsb2NhdGUoKGRlZmF1bHRQYWdlc0luSGVhcCArIG51
bVBhZ2VzKSAqIHBhZ2VTaXplKCksIDApKTsKKyAgICAgICAgRVhQRUNUX1RSVUUoIWFsbG9jYXRv
ci0+YWxsb2NhdGUoKGRlZmF1bHRQYWdlc0luSGVhcCArIG51bVBhZ2VzKSAqIHBhZ2VTaXplKCkp
KTsKICAgICAgICAgCiAgICAgICAgIE1ldGFBbGxvY2F0b3JIYW5kbGUqIGZpcnN0SGFuZGxlID0g
YWxsb2NhdGUoZmlyc3RTaXplKTsKICAgICAgICAgCi0gICAgICAgIEVYUEVDVF9UUlVFKCFhbGxv
Y2F0b3ItPmFsbG9jYXRlKHNlY29uZFNpemUsIDApKTsKLSAgICAgICAgRVhQRUNUX1RSVUUoIWFs
bG9jYXRvci0+YWxsb2NhdGUoKGRlZmF1bHRQYWdlc0luSGVhcCArIG51bVBhZ2VzKSAqIHBhZ2VT
aXplKCksIDApKTsKKyAgICAgICAgRVhQRUNUX1RSVUUoIWFsbG9jYXRvci0+YWxsb2NhdGUoc2Vj
b25kU2l6ZSkpOworICAgICAgICBFWFBFQ1RfVFJVRSghYWxsb2NhdG9yLT5hbGxvY2F0ZSgoZGVm
YXVsdFBhZ2VzSW5IZWFwICsgbnVtUGFnZXMpICogcGFnZVNpemUoKSkpOwogICAgICAgICAKICAg
ICAgICAgY3VycmVudEhlYXBHcm93dGhNb2RlID0gRm9yVGVzdERlbWFuZEFsbG9jQ29hbGVzY2U7
CiAgICAgICAgIGFsbG93QWxsb2NhdGVQYWdlcyA9IG51bVBhZ2VzOwpAQCAtNjI2LDEyICs2Mjcs
MTIgQEAgcHVibGljOgogICAgIHsKICAgICAgICAgZnJlZShhbGxvY2F0ZShmaXJzdFNpemUpKTsK
ICAgICAgICAgZnJlZShhbGxvY2F0ZShkZWZhdWx0UGFnZXNJbkhlYXAgKiBwYWdlU2l6ZSgpKSk7
Ci0gICAgICAgIEVYUEVDVF9UUlVFKCFhbGxvY2F0b3ItPmFsbG9jYXRlKChkZWZhdWx0UGFnZXNJ
bkhlYXAgKyBudW1QYWdlcykgKiBwYWdlU2l6ZSgpLCAwKSk7CisgICAgICAgIEVYUEVDVF9UUlVF
KCFhbGxvY2F0b3ItPmFsbG9jYXRlKChkZWZhdWx0UGFnZXNJbkhlYXAgKyBudW1QYWdlcykgKiBw
YWdlU2l6ZSgpKSk7CiAgICAgICAgIAogICAgICAgICBNZXRhQWxsb2NhdG9ySGFuZGxlKiBmaXJz
dEhhbmRsZSA9IGFsbG9jYXRlKGZpcnN0U2l6ZSk7CiAgICAgICAgIAotICAgICAgICBFWFBFQ1Rf
VFJVRSghYWxsb2NhdG9yLT5hbGxvY2F0ZShzZWNvbmRTaXplLCAwKSk7Ci0gICAgICAgIEVYUEVD
VF9UUlVFKCFhbGxvY2F0b3ItPmFsbG9jYXRlKChkZWZhdWx0UGFnZXNJbkhlYXAgKyBudW1QYWdl
cykgKiBwYWdlU2l6ZSgpLCAwKSk7CisgICAgICAgIEVYUEVDVF9UUlVFKCFhbGxvY2F0b3ItPmFs
bG9jYXRlKHNlY29uZFNpemUpKTsKKyAgICAgICAgRVhQRUNUX1RSVUUoIWFsbG9jYXRvci0+YWxs
b2NhdGUoKGRlZmF1bHRQYWdlc0luSGVhcCArIG51bVBhZ2VzKSAqIHBhZ2VTaXplKCkpKTsKICAg
ICAgICAgCiAgICAgICAgIGN1cnJlbnRIZWFwR3Jvd3RoTW9kZSA9IEZvclRlc3REZW1hbmRBbGxv
Y0RvbnRDb2FsZXNjZTsKICAgICAgICAgYWxsb3dBbGxvY2F0ZVBhZ2VzID0gbnVtUGFnZXM7CkBA
IC02NDUsMTIgKzY0NiwxMiBAQCBwdWJsaWM6CiAgICAgICAgIAogICAgICAgICByZXF1ZXN0ZWRO
dW1QYWdlcyA9IDA7CiAgICAgICAgIAotICAgICAgICBFWFBFQ1RfVFJVRSghYWxsb2NhdG9yLT5h
bGxvY2F0ZSgoZGVmYXVsdFBhZ2VzSW5IZWFwICsgbnVtUGFnZXMpICogcGFnZVNpemUoKSwgMCkp
OworICAgICAgICBFWFBFQ1RfVFJVRSghYWxsb2NhdG9yLT5hbGxvY2F0ZSgoZGVmYXVsdFBhZ2Vz
SW5IZWFwICsgbnVtUGFnZXMpICogcGFnZVNpemUoKSkpOwogCiAgICAgICAgIGZyZWUoZmlyc3RI
YW5kbGUpOwogICAgICAgICBmcmVlKHNlY29uZEhhbmRsZSk7CiAgICAgICAgIAotICAgICAgICBF
WFBFQ1RfVFJVRSghYWxsb2NhdG9yLT5hbGxvY2F0ZSgoZGVmYXVsdFBhZ2VzSW5IZWFwICsgbnVt
UGFnZXMpICogcGFnZVNpemUoKSwgMCkpOworICAgICAgICBFWFBFQ1RfVFJVRSghYWxsb2NhdG9y
LT5hbGxvY2F0ZSgoZGVmYXVsdFBhZ2VzSW5IZWFwICsgbnVtUGFnZXMpICogcGFnZVNpemUoKSkp
OwogICAgICAgICAKICAgICAgICAgZmlyc3RIYW5kbGUgPSBhbGxvY2F0ZShmaXJzdFNpemUpOwog
ICAgICAgICBzZWNvbmRIYW5kbGUgPSBhbGxvY2F0ZShzZWNvbmRTaXplKTsKQEAgLTY3MSw3ICs2
NzIsNyBAQCBURVNUX0YoTWV0YUFsbG9jYXRvclRlc3QsIEFsbG9jWmVybykgICAgCiAgICAgLy8g
VGVzdHMgdGhhdCBhbGxvY2F0aW5nIGEgemVyby1sZW5ndGggYmxvY2sgcmV0dXJucyAwIGFuZAog
ICAgIC8vIGRvZXMgbm90IGNoYW5nZSBhbnl0aGluZyBpbiBtZW1vcnkuCiAgICAgCi0gICAgQVNT
RVJUKCFhbGxvY2F0b3ItPmFsbG9jYXRlKDAsIDApKTsKKyAgICBBU1NFUlQoIWFsbG9jYXRvci0+
YWxsb2NhdGUoMCkpOwogICAgIAogICAgIE1ldGFBbGxvY2F0b3JIYW5kbGUqIGZpbmFsID0gYWxs
b2NhdGUoZGVmYXVsdFBhZ2VzSW5IZWFwICogcGFnZVNpemUoKSk7CiAgICAgRVhQRUNUX0VRKGZp
bmFsLT5zdGFydCgpLnVudGFnZ2VkUHRyKCksIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KGJhc2VQ
YWdlICogcGFnZVNpemUoKSkpOwo=
</data>
<flag name="review"
          id="408841"
          type_id="1"
          status="+"
          setter="keith_miller"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>394534</attachid>
            <date>2020-03-25 13:18:17 -0700</date>
            <delta_ts>2020-03-26 12:29:44 -0700</delta_ts>
            <desc>patch for landing</desc>
            <filename>c-backup.diff</filename>
            <type>text/plain</type>
            <size>135560</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IEpTVGVzdHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEpTVGVzdHMvQ2hhbmdlTG9n
CShyZXZpc2lvbiAyNTg5OTYpCisrKyBKU1Rlc3RzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpA
QCAtMSwzICsxLDE2IEBACisyMDIwLTAzLTI1ICBTYWFtIEJhcmF0aSAgPHNiYXJhdGlAYXBwbGUu
Y29tPgorCisgICAgICAgIEltcGxlbWVudCAxR0Igb2YgZXhlY3V0YWJsZSBtZW1vcnkgb24gYXJt
NjQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIwODQ5
MAorICAgICAgICA8cmRhcjovL3Byb2JsZW0vNjA3OTcxMjc+CisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgS2VpdGggTWlsbGVyLgorCisgICAgICAgIFJ1biBKZXRTdHJlYW0yIHdhc20gdGVzdHMuCisK
KyAgICAgICAgKiB3YXNtLnlhbWw6CisgICAgICAgICogd2FzbS9sb3dFeGVjdXRhYmxlTWVtb3J5
L2V4ZWN1dGFibGUtbWVtb3J5LW9vbS5qczoKKwogMjAyMC0wMy0yNSAgQWxleGV5IFNodmF5a2Eg
IDxzaHZhaWthbGVzaEBnbWFpbC5jb20+CiAKICAgICAgICAgXGIgZXNjYXBlcyBpbnNpZGUgY2hh
cmFjdGVyIGNsYXNzZXMgc2hvdWxkIGJlIHZhbGlkIGluIFVuaWNvZGUgcGF0dGVybnMKSW5kZXg6
IEpTVGVzdHMvd2FzbS55YW1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEpTVGVzdHMvd2FzbS55YW1sCShyZXZp
c2lvbiAyNTg5OTYpCisrKyBKU1Rlc3RzL3dhc20ueWFtbAkod29ya2luZyBjb3B5KQpAQCAtMjMx
LDMgKzIzMSw2IEBACiAtIHBhdGg6IHdhc20vbW9kdWxlcy9ydW4tZnJvbS13YXNtLndhc20KICAg
Y21kOiBydW5XZWJBc3NlbWJseQogCistIHBhdGg6IC4uL1BlcmZvcm1hbmNlVGVzdHMvSmV0U3Ry
ZWFtMi93YXNtLWNsaS5qcworICBjbWQ6IHJ1bldlYkFzc2VtYmx5SmV0U3RyZWFtMiB1bmxlc3Mg
cGFyc2VSdW5Db21tYW5kcworCkluZGV4OiBKU1Rlc3RzL3dhc20vbG93RXhlY3V0YWJsZU1lbW9y
eS9leGVjdXRhYmxlLW1lbW9yeS1vb20uanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSlNUZXN0cy93YXNtL2xv
d0V4ZWN1dGFibGVNZW1vcnkvZXhlY3V0YWJsZS1tZW1vcnktb29tLmpzCShyZXZpc2lvbiAyNTg5
OTYpCisrKyBKU1Rlc3RzL3dhc20vbG93RXhlY3V0YWJsZU1lbW9yeS9leGVjdXRhYmxlLW1lbW9y
eS1vb20uanMJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSw3IEBACisvLyBGSVhNRTogQ29uc2lk
ZXIgbWFraW5nIGp1bXAgaXNsYW5kcyB3b3JrIHdpdGggT3B0aW9uczo6aml0TWVtb3J5UmVzZXJ2
YXRpb25TaXplCisvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjA5
MDM3CisvL0Agc2tpcCBpZiAkYXJjaGl0ZWN0dXJlID09ICJhcm02NCIKKwogaW1wb3J0ICogYXMg
YXNzZXJ0IGZyb20gJy4uL2Fzc2VydC5qcycKIGltcG9ydCBCdWlsZGVyIGZyb20gJy4uL0J1aWxk
ZXIuanMnCiAKSW5kZXg6IFBlcmZvcm1hbmNlVGVzdHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFBlcmZvcm1hbmNlVGVzdHMvQ2hhbmdlTG9nCShyZXZpc2lvbiAyNTg5OTYpCisrKyBQZXJmb3Jt
YW5jZVRlc3RzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDIyIEBACisyMDIw
LTAzLTI1ICBTYWFtIEJhcmF0aSAgPHNiYXJhdGlAYXBwbGUuY29tPgorCisgICAgICAgIEltcGxl
bWVudCAxR0Igb2YgZXhlY3V0YWJsZSBtZW1vcnkgb24gYXJtNjQKKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIwODQ5MAorICAgICAgICA8cmRhcjovL3By
b2JsZW0vNjA3OTcxMjc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgS2VpdGggTWlsbGVyLgorCisg
ICAgICAgICogSmV0U3RyZWFtMi9KZXRTdHJlYW1Ecml2ZXIuanM6CisgICAgICAgIChEcml2ZXIu
cHJvdG90eXBlLmR1bXBKU09OUmVzdWx0c0lmTmVlZGVkKToKKyAgICAgICAgKERlZmF1bHRCZW5j
aG1hcmsucHJvdG90eXBlLnVwZGF0ZVVJQWZ0ZXJSdW4pOgorICAgICAgICAoRGVmYXVsdEJlbmNo
bWFyayk6CisgICAgICAgIChXU0xCZW5jaG1hcmsucHJvdG90eXBlLnVwZGF0ZVVJQWZ0ZXJSdW4p
OgorICAgICAgICAoV1NMQmVuY2htYXJrKToKKyAgICAgICAgKFdhc21CZW5jaG1hcmsucHJvdG90
eXBlLnVwZGF0ZVVJQWZ0ZXJSdW4pOgorICAgICAgICAoV2FzbUJlbmNobWFyayk6CisgICAgICAg
IChEcml2ZXIuYXN5bmMgZmV0Y2hSZXNvdXJjZXMuc3RhdHVzRWxlbWVudC5pbm5lckhUTUwuYS5o
cmVmLnN0cmluZ19hcHBlYXJlZF9oZXJlKToKKyAgICAgICAgKERyaXZlci5wcm90b3R5cGUuYXN5
bmMgZmV0Y2hSZXNvdXJjZXMpOgorCiAyMDIwLTAzLTE1ICBZdXN1a2UgU3V6dWtpICA8eXN1enVr
aUBhcHBsZS5jb20+CiAKICAgICAgICAgU2hvdWxkIG5vdCB1c2UgdmFyaWFibGUtbGVuZ3RoLWFy
cmF5IChWTEEpCkluZGV4OiBQZXJmb3JtYW5jZVRlc3RzL0pldFN0cmVhbTIvSmV0U3RyZWFtRHJp
dmVyLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFBlcmZvcm1hbmNlVGVzdHMvSmV0U3RyZWFtMi9KZXRTdHJl
YW1Ecml2ZXIuanMJKHJldmlzaW9uIDI1ODk5NikKKysrIFBlcmZvcm1hbmNlVGVzdHMvSmV0U3Ry
ZWFtMi9KZXRTdHJlYW1Ecml2ZXIuanMJKHdvcmtpbmcgY29weSkKQEAgLTQwOSw5ICs0MDksOSBA
QCBjbGFzcyBEcml2ZXIgewogICAgIGR1bXBKU09OUmVzdWx0c0lmTmVlZGVkKCkKICAgICB7CiAg
ICAgICAgIGlmIChkdW1wSlNPTlJlc3VsdHMpIHsKLSAgICAgICAgICAgIHByaW50KCJcbiIpOwot
ICAgICAgICAgICAgcHJpbnQodGhpcy5yZXN1bHRzSlNPTigpKTsKLSAgICAgICAgICAgIHByaW50
KCJcbiIpOworICAgICAgICAgICAgY29uc29sZS5sb2coIlxuIik7CisgICAgICAgICAgICBjb25z
b2xlLmxvZyh0aGlzLnJlc3VsdHNKU09OKCkpOworICAgICAgICAgICAgY29uc29sZS5sb2coIlxu
Iik7CiAgICAgICAgIH0KICAgICB9CiAKQEAgLTcyNSwxNSArNzI1LDE1IEBAIGNsYXNzIERlZmF1
bHRCZW5jaG1hcmsgZXh0ZW5kcyBCZW5jaG1hcmsKICAgICAgICAgICAgIHJldHVybjsKICAgICAg
ICAgfQogCi0gICAgICAgIHByaW50KCIgICAgU3RhcnR1cDoiLCB1aUZyaWVuZGx5TnVtYmVyKHRo
aXMuZmlyc3RJdGVyYXRpb24pKTsKLSAgICAgICAgcHJpbnQoIiAgICBXb3JzdCBDYXNlOiIsIHVp
RnJpZW5kbHlOdW1iZXIodGhpcy53b3JzdDQpKTsKLSAgICAgICAgcHJpbnQoIiAgICBBdmVyYWdl
OiIsIHVpRnJpZW5kbHlOdW1iZXIodGhpcy5hdmVyYWdlKSk7Ci0gICAgICAgIHByaW50KCIgICAg
U2NvcmU6IiwgdWlGcmllbmRseU51bWJlcih0aGlzLnNjb3JlKSk7CisgICAgICAgIGNvbnNvbGUu
bG9nKCIgICAgU3RhcnR1cDoiLCB1aUZyaWVuZGx5TnVtYmVyKHRoaXMuZmlyc3RJdGVyYXRpb24p
KTsKKyAgICAgICAgY29uc29sZS5sb2coIiAgICBXb3JzdCBDYXNlOiIsIHVpRnJpZW5kbHlOdW1i
ZXIodGhpcy53b3JzdDQpKTsKKyAgICAgICAgY29uc29sZS5sb2coIiAgICBBdmVyYWdlOiIsIHVp
RnJpZW5kbHlOdW1iZXIodGhpcy5hdmVyYWdlKSk7CisgICAgICAgIGNvbnNvbGUubG9nKCIgICAg
U2NvcmU6IiwgdWlGcmllbmRseU51bWJlcih0aGlzLnNjb3JlKSk7CiAgICAgICAgIGlmIChSQU1p
ZmljYXRpb24pIHsKLSAgICAgICAgICAgIHByaW50KCIgICAgQ3VycmVudCBGb290cHJpbnQ6Iiwg
dWlGcmllbmRseU51bWJlcih0aGlzLmN1cnJlbnRGb290cHJpbnQpKTsKLSAgICAgICAgICAgIHBy
aW50KCIgICAgUGVhayBGb290cHJpbnQ6IiwgdWlGcmllbmRseU51bWJlcih0aGlzLnBlYWtGb290
cHJpbnQpKTsKKyAgICAgICAgICAgIGNvbnNvbGUubG9nKCIgICAgQ3VycmVudCBGb290cHJpbnQ6
IiwgdWlGcmllbmRseU51bWJlcih0aGlzLmN1cnJlbnRGb290cHJpbnQpKTsKKyAgICAgICAgICAg
IGNvbnNvbGUubG9nKCIgICAgUGVhayBGb290cHJpbnQ6IiwgdWlGcmllbmRseU51bWJlcih0aGlz
LnBlYWtGb290cHJpbnQpKTsKICAgICAgICAgfQotICAgICAgICBwcmludCgiICAgIFdhbGwgdGlt
ZToiLCB1aUZyaWVuZGx5RHVyYXRpb24obmV3IERhdGUodGhpcy5lbmRUaW1lIC0gdGhpcy5zdGFy
dFRpbWUpKSk7CisgICAgICAgIGNvbnNvbGUubG9nKCIgICAgV2FsbCB0aW1lOiIsIHVpRnJpZW5k
bHlEdXJhdGlvbihuZXcgRGF0ZSh0aGlzLmVuZFRpbWUgLSB0aGlzLnN0YXJ0VGltZSkpKTsKICAg
ICB9CiB9CiAKQEAgLTgxOSwxNCArODE5LDE0IEBAIGNsYXNzIFdTTEJlbmNobWFyayBleHRlbmRz
IEJlbmNobWFyayB7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KIAotICAgICAgICBw
cmludCgiICAgIFN0ZGxpYjoiLCB1aUZyaWVuZGx5TnVtYmVyKHRoaXMuc3RkbGliKSk7Ci0gICAg
ICAgIHByaW50KCIgICAgVGVzdHM6IiwgdWlGcmllbmRseU51bWJlcih0aGlzLm1haW5SdW4pKTsK
LSAgICAgICAgcHJpbnQoIiAgICBTY29yZToiLCB1aUZyaWVuZGx5TnVtYmVyKHRoaXMuc2NvcmUp
KTsKKyAgICAgICAgY29uc29sZS5sb2coIiAgICBTdGRsaWI6IiwgdWlGcmllbmRseU51bWJlcih0
aGlzLnN0ZGxpYikpOworICAgICAgICBjb25zb2xlLmxvZygiICAgIFRlc3RzOiIsIHVpRnJpZW5k
bHlOdW1iZXIodGhpcy5tYWluUnVuKSk7CisgICAgICAgIGNvbnNvbGUubG9nKCIgICAgU2NvcmU6
IiwgdWlGcmllbmRseU51bWJlcih0aGlzLnNjb3JlKSk7CiAgICAgICAgIGlmIChSQU1pZmljYXRp
b24pIHsKLSAgICAgICAgICAgIHByaW50KCIgICAgQ3VycmVudCBGb290cHJpbnQ6IiwgdWlGcmll
bmRseU51bWJlcih0aGlzLmN1cnJlbnRGb290cHJpbnQpKTsKLSAgICAgICAgICAgIHByaW50KCIg
ICAgUGVhayBGb290cHJpbnQ6IiwgdWlGcmllbmRseU51bWJlcih0aGlzLnBlYWtGb290cHJpbnQp
KTsKKyAgICAgICAgICAgIGNvbnNvbGUubG9nKCIgICAgQ3VycmVudCBGb290cHJpbnQ6IiwgdWlG
cmllbmRseU51bWJlcih0aGlzLmN1cnJlbnRGb290cHJpbnQpKTsKKyAgICAgICAgICAgIGNvbnNv
bGUubG9nKCIgICAgUGVhayBGb290cHJpbnQ6IiwgdWlGcmllbmRseU51bWJlcih0aGlzLnBlYWtG
b290cHJpbnQpKTsKICAgICAgICAgfQotICAgICAgICBwcmludCgiICAgIFdhbGwgdGltZToiLCB1
aUZyaWVuZGx5RHVyYXRpb24obmV3IERhdGUodGhpcy5lbmRUaW1lIC0gdGhpcy5zdGFydFRpbWUp
KSk7CisgICAgICAgIGNvbnNvbGUubG9nKCIgICAgV2FsbCB0aW1lOiIsIHVpRnJpZW5kbHlEdXJh
dGlvbihuZXcgRGF0ZSh0aGlzLmVuZFRpbWUgLSB0aGlzLnN0YXJ0VGltZSkpKTsKICAgICB9CiB9
OwogCkBAIC05NzUsMTMgKzk3NSwxMyBAQCBjbGFzcyBXYXNtQmVuY2htYXJrIGV4dGVuZHMgQmVu
Y2htYXJrIHsKICAgICAgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKHRoaXMuc2NvcmVJ
RCkuaW5uZXJIVE1MID0gdWlGcmllbmRseU51bWJlcih0aGlzLnNjb3JlKTsKICAgICAgICAgICAg
IHJldHVybjsKICAgICAgICAgfQotICAgICAgICBwcmludCgiICAgIFN0YXJ0dXA6IiwgdWlGcmll
bmRseU51bWJlcih0aGlzLnN0YXJ0dXBUaW1lKSk7Ci0gICAgICAgIHByaW50KCIgICAgUnVuIHRp
bWU6IiwgdWlGcmllbmRseU51bWJlcih0aGlzLnJ1blRpbWUpKTsKKyAgICAgICAgY29uc29sZS5s
b2coIiAgICBTdGFydHVwOiIsIHVpRnJpZW5kbHlOdW1iZXIodGhpcy5zdGFydHVwVGltZSkpOwor
ICAgICAgICBjb25zb2xlLmxvZygiICAgIFJ1biB0aW1lOiIsIHVpRnJpZW5kbHlOdW1iZXIodGhp
cy5ydW5UaW1lKSk7CiAgICAgICAgIGlmIChSQU1pZmljYXRpb24pIHsKLSAgICAgICAgICAgIHBy
aW50KCIgICAgQ3VycmVudCBGb290cHJpbnQ6IiwgdWlGcmllbmRseU51bWJlcih0aGlzLmN1cnJl
bnRGb290cHJpbnQpKTsKLSAgICAgICAgICAgIHByaW50KCIgICAgUGVhayBGb290cHJpbnQ6Iiwg
dWlGcmllbmRseU51bWJlcih0aGlzLnBlYWtGb290cHJpbnQpKTsKKyAgICAgICAgICAgIGNvbnNv
bGUubG9nKCIgICAgQ3VycmVudCBGb290cHJpbnQ6IiwgdWlGcmllbmRseU51bWJlcih0aGlzLmN1
cnJlbnRGb290cHJpbnQpKTsKKyAgICAgICAgICAgIGNvbnNvbGUubG9nKCIgICAgUGVhayBGb290
cHJpbnQ6IiwgdWlGcmllbmRseU51bWJlcih0aGlzLnBlYWtGb290cHJpbnQpKTsKICAgICAgICAg
fQotICAgICAgICBwcmludCgiICAgIFNjb3JlOiIsIHVpRnJpZW5kbHlOdW1iZXIodGhpcy5zY29y
ZSkpOworICAgICAgICBjb25zb2xlLmxvZygiICAgIFNjb3JlOiIsIHVpRnJpZW5kbHlOdW1iZXIo
dGhpcy5zY29yZSkpOwogICAgIH0KIH07CiAKSW5kZXg6IFBlcmZvcm1hbmNlVGVzdHMvSmV0U3Ry
ZWFtMi93YXNtLWNsaS5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBQZXJmb3JtYW5jZVRlc3RzL0pldFN0cmVh
bTIvd2FzbS1jbGkuanMJKG5vbmV4aXN0ZW50KQorKysgUGVyZm9ybWFuY2VUZXN0cy9KZXRTdHJl
YW0yL3dhc20tY2xpLmpzCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDUgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRT
IENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgor
ICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkK
KyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyov
CisKK2NvbnN0IGlzSW5Ccm93c2VyID0gZmFsc2U7Citjb25zb2xlID0geworICAgIGxvZzogKCkg
PT4geyB9Cit9CisKK3Rlc3RMaXN0ID0gWyJIYXNoU2V0LXdhc20iLCAidHNmLXdhc20iLCAicXVp
Y2tzb3J0LXdhc20iLCAiZ2NjLWxvb3BzLXdhc20iLCAicmljaGFyZHMtd2FzbSJdOworCitSQU1p
ZmljYXRpb24gPSBmYWxzZTsKKworbG9hZCgiLi9KZXRTdHJlYW1Ecml2ZXIuanMiKTsKKworYXN5
bmMgZnVuY3Rpb24gcnVuSmV0U3RyZWFtKCkgeworICAgIHRyeSB7CisgICAgICAgIGF3YWl0IEpl
dFN0cmVhbS5pbml0aWFsaXplKCk7CisgICAgICAgIEpldFN0cmVhbS5zdGFydCgpOworICAgIH0g
Y2F0Y2ggKGUpIHsKKyAgICAgICAgdGhyb3cgZTsKKyAgICB9Cit9CitydW5KZXRTdHJlYW0oKTsK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjU4OTk2KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEzMiBA
QAorMjAyMC0wMy0yNSAgU2FhbSBCYXJhdGkgIDxzYmFyYXRpQGFwcGxlLmNvbT4KKworICAgICAg
ICBJbXBsZW1lbnQgMUdCIG9mIGV4ZWN1dGFibGUgbWVtb3J5IG9uIGFybTY0CisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMDg0OTAKKyAgICAgICAgPHJk
YXI6Ly9wcm9ibGVtLzYwNzk3MTI3PgorCisgICAgICAgIFJldmlld2VkIGJ5IEtlaXRoIE1pbGxl
ci4KKworICAgICAgICBUaGlzIHBhdGNoIGltcGxlbWVudHMgdGhlIDFHQiBleGVjdXRhYmxlIG1l
bW9yeSBzcGFjZSBvbiBhcm02NC4gVG8gbWFrZSB0aGlzCisgICAgICAgIHdvcmssIHdlIGltcGxl
bWVudCBqdW1wcyBsYXJnZXIgdGhhbiArLy0xMjhNQiB0byB1c2UganVtcCBpc2xhbmRzLiBKdW1w
IGlzbGFuZHMKKyAgICAgICAgd29yayBieSBzcGxpdHRpbmcgdXAgdGhlIH4xR0IgcmVnaW9uIGlu
dG8gOSAxMTJNQiBjaHVua3MgKDEwMDggTUIgdG90YWwpLiBFYWNoCisgICAgICAgIGNodW5rIGlz
IHNwbGl0IGludG8gdHdvOiA5Nk1CIG9mIGV4ZWN1dGFibGUgcmVnaW9uLCBhbmQgMTZNQiBvZiBq
dW1wIGlzbGFuZCByZWdpb24uCisgICAgICAgIFdpdGggdGhpcyBzcGxpdCwgYW55IGp1bXAgaW5z
aWRlIGEganVtcCBpc2xhbmQgcmVnaW9uIGNhbiBnZXQgdG8gdGhlIGFkamFjZW50CisgICAgICAg
IGlzbGFuZCAoZm9yd2FyZHMgb3IgYmFja3dhcmRzKSBpbiBhIHNpbmdsZSArLy0xMjhNQiBqdW1w
LiBXaGVuIGxpbmtpbmcgYSBqdW1wCisgICAgICAgIGZyb20gQSB0byBCLCB3aGVyZSB8QSAtIEJ8
ID4gMTI4TUIsIHdlIGluc3RlYWQgcG9pbnQgdGhlIGp1bXAgdG8gYW4gaXNsYW5kLAorICAgICAg
ICB3aGVyZSB0aGlzIGlzbGFuZCBoYXMgYSBwb3RlbnRpYWwgc2VyaWVzIG9mIGp1bXBzIHRoYXQg
ZmluYWxseSBsYW5kcyBhdCBCLgorICAgICAgICAKKyAgICAgICAgVG8gYWxsb2NhdGUgZXhlY3V0
YWJsZSBtZW1vcnksIHVzZSBhIE1ldGFBbGxvY2F0b3IgZm9yIGVhY2ggOTZNQiBjaHVuay4gVG8K
KyAgICAgICAgYWxsb2NhdGUgaXNsYW5kcywgd2UgaGF2ZSBhIGJpdCB2ZWN0b3Igd2UgdXNlIHRv
IHRyYWNrIHVzZWQgYW5kIGZyZWVkIGlzbGFuZHMuCisgICAgICAgIFdlIG9ubHkgZ3JvdyB0aGlz
IGJpdCB2ZWN0b3IgYXMgaXNsYW5kcyBhcmUgYWxsb2NhdGVkLCBzbyBpdCBmcmVxdWVudGx5Cisg
ICAgICAgIHJlbWFpbnMgZW1wdHkgb3IgdmVyeSBzbWFsbC4KKyAgICAgICAgCisgICAgICAgIFRo
ZSBnb2FsIG9mIHRoaXMgcGF0Y2ggaXMgdG8gaGF2ZSBtaW5pbWFsIHBlcmYgaW1wYWN0IHdoZW4g
bm90IHVzaW5nIGlzbGFuZHMsCisgICAgICAgIHNvIHRoZSBkYXRhIHN0cnVjdHVyZXMgYXJlIGRl
c2lnbmVkIHRvIG9ubHkgaW5jdXIgb3ZlcmhlYWQgd2hlbiBhY3R1YWxseSB1c2luZworICAgICAg
ICBpc2xhbmRzLiBXZSBleHBlY3QgdGhlIHVzZSBvZiBpc2xhbmRzIHRvIGJlIG1pbmltYWwuIFdl
IHVzZSBhIHJlZCBibGFjayB0cmVlCisgICAgICAgIHRvIHRyYWNrIGFsbCBpc2xhbmQgbG9jYXRp
b25zLiBUaGlzIGFsbG93cyB1cyB0byBkZWFsbG9jYXRlIGFsbCBpc2xhbmRzIHdoZW4KKyAgICAg
ICAgYW4gZXhlY3V0YWJsZSBtZW1vcnkgaGFuZGxlIGlzIGZyZWVkLiBUeXBpY2FsbHksIHRoaXMg
cmVkIGJsYWNrIHRyZWUgaXMgZW1wdHksCisgICAgICAgIHNvIGZyZWVpbmcgYW4gZXhlY3V0YWJs
ZSBtZW1vcnkgaGFuZGxlIGluY3VycyBubyBleHRyYSBvdmVyaGVhZC4KKyAgICAgICAgCisgICAg
ICAgIFRvIG1ha2UgaXNsYW5kcyB3b3JrIGZvciBXYXNtLCB3ZSBub3cgaGF2ZSB0byBsaW5rIHRp
ZXIgdXAgY29kZSBpbiB0d28gcGhhc2VzLgorICAgICAgICBQcmV2aW91c2x5LCB3ZSB3b3VsZCBq
dXN0IHBhdGNoIGp1bXBzIGNvbmN1cnJlbnRseSB0byBXYXNtIHRocmVhZHMgcnVubmluZyBhZnRl
cgorICAgICAgICByZXNldHRpbmcgdGhlIGljYWNoZSwga25vd2luZyB0aGF0IHdlIHdvdWxkIGJl
IGFibGUgdG8gYXRvbWljYWxseSB1cGRhdGUgdGhlIGp1bXAKKyAgICAgICAgaW5zdHJ1Y3Rpb24g
dG8gcG9pbnQgdG8gdGhlIG5ldyBkZXN0aW5hdGlvbi4gSG93ZXZlciwgbm93IHdoZW4gcmVwYXRj
aGluZyB0aGVzZQorICAgICAgICBqdW1wcyBpbiBhIHdvcmxkIHdpdGgganVtcCBpc2xhbmRzLCB3
ZSBtaWdodCBuZWVkIHRvIGFsbG9jYXRlIGlzbGFuZHMgZGVwZW5kaW5nCisgICAgICAgIG9uIHRo
ZSBqdW1wIGxvY2F0aW9uIGFuZCBpdHMgdGFyZ2V0LiBTbyB3ZSBub3cgYWxsb2NhdGUgYW5kIGNv
bGxlY3QgdGhlIHNldCBvZiBpc2xhbmRzLAorICAgICAgICB0aGVuIHJlc2V0IHRoZSBpY2FjaGUs
IHRoZW4gYXRvbWljYWxseSB1cGRhdGUgdGhlIGJyYW5jaCB0byBwb2ludCB0byB0aGUgZGVzdGlu
YXRpb24KKyAgICAgICAgKG9yIGFuIGlzbGFuZCB0aGF0IGp1bXBzIHRvIHRoZSBkZXN0aW5hdGlv
bikuIE9uZSBpbXBvcnRhbnQgaW1wbGVtZW50YXRpb24gZGV0YWlsCisgICAgICAgIGhlcmUgaXMg
dGhhdCBmb3Igbm9ybWFsIGlzbGFuZCByZXBhdGNoaW5nLCBpZiB3ZSBoYXZlIGEganVtcCBmcm9t
IEEgdG8gQiwgYW5kIGl0CisgICAgICAgIGFsbG9jYXRlcyBhIHNldCBpZiBpc2xhbmRzIFgsIHdl
IHVzdWFsbHkgY2FuIGRlYWxsb2NhdGUgWCB3aGVuIHJlcGF0Y2hpbmcgQSB0byBnbyB0byBCJy4K
KyAgICAgICAgVGhpcyBpcyBiZWNhdXNlIHRoZSB0eXBpY2FsIHJlcGF0Y2ggc2NlbmFyaW8gaW4g
SlMgaGFwcGVucyB3aGVuIHRoYXQgY29kZSBpcyBub3QgYmVpbmcKKyAgICAgICAgZXhlY3V0ZWQu
IEZvciBXYXNtIHRob3VnaCwgdGhvc2UgaXNsYW5kcyBYIG1pZ2h0IGJlIHJ1bm5pbmcgd2hpbGUg
d2Ugd2FudCB0byByZXBhdGNoCisgICAgICAgIEEgdG8gZ28gdG8gQicuIFNvIGluc3RlYWQgb2Yg
ZGVhbGxvY2F0aW5nIFgsIHdlIGp1c3QgYXBwZW5kIHRvIFggaW4gdGhpcyBzY2VuYXJpbywgYW5k
CisgICAgICAgIHdlIGZyZWUgdGhlIG5ldyBzZXQgWCcgd2hlbiB0aGUgY29kZSBpdHNlbGYgaXMg
ZnJlZWQuCisgICAgICAgIAorICAgICAgICAoVGhpcyBwYXRjaCBhbHNvIGZpeGVzIGEgYnVnIGlu
IHRoZSBXYXNtIExMSW50IHRvIEJCUSB0aWVyIHVwIHRoYXQgSSBzcG90dGVkLAorICAgICAgICB3
aGVyZSB3ZSB3b3VsZCBwdWJsaXNoIGEgTExJbnQgY2FsbGVlJ3MgQkJRIHJlcGxhY2VtZW50IGJl
Zm9yZSB3ZSBmaW5pc2hlZAorICAgICAgICBsaW5raW5nIHRoZSBvdXRnb2luZyBjYWxscyBvZiB0
aGUgQkJRIHJlcGxhY2VtZW50LikKKyAgICAgICAgCisgICAgICAgIFRoaXMgcGF0Y2ggYWxzbyBy
ZW1vdmVzIHRoZSBvbGQgIkNvZGVQcm9maWxpbmciIGNvZGUgdGhhdCBoYXMgYmVlbiB1bnVzZWQg
Zm9yCisgICAgICAgIGEgbG9uZyB0aW1lLgorCisgICAgICAgICogSmF2YVNjcmlwdENvcmUueGNv
ZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBTb3VyY2VzLnR4dDoKKyAgICAgICAg
KiBhc3NlbWJsZXIvQVJNNjRBc3NlbWJsZXIuaDoKKyAgICAgICAgKEpTQzo6QVJNNjRBc3NlbWJs
ZXI6OmIpOgorICAgICAgICAoSlNDOjpBUk02NEFzc2VtYmxlcjo6YmwpOgorICAgICAgICAoSlND
OjpBUk02NEFzc2VtYmxlcjo6cmVwbGFjZVdpdGhKdW1wKToKKyAgICAgICAgKEpTQzo6QVJNNjRB
c3NlbWJsZXI6OnByZXBhcmVGb3JBdG9taWNSZWxpbmtKdW1wQ29uY3VycmVudGx5KToKKyAgICAg
ICAgKEpTQzo6QVJNNjRBc3NlbWJsZXI6OnByZXBhcmVGb3JBdG9taWNSZWxpbmtDYWxsQ29uY3Vy
cmVudGx5KToKKyAgICAgICAgKEpTQzo6QVJNNjRBc3NlbWJsZXI6OmNvbXB1dGVKdW1wVHlwZSk6
CisgICAgICAgIChKU0M6OkFSTTY0QXNzZW1ibGVyOjpjYW5FbWl0SnVtcCk6CisgICAgICAgIChK
U0M6OkFSTTY0QXNzZW1ibGVyOjpsaW5rSnVtcE9yQ2FsbCk6CisgICAgICAgIChKU0M6OkFSTTY0
QXNzZW1ibGVyOjpsaW5rQ29tcGFyZUFuZEJyYW5jaCk6CisgICAgICAgIChKU0M6OkFSTTY0QXNz
ZW1ibGVyOjpsaW5rQ29uZGl0aW9uYWxCcmFuY2gpOgorICAgICAgICAoSlNDOjpBUk02NEFzc2Vt
Ymxlcjo6bGlua1Rlc3RBbmRCcmFuY2gpOgorICAgICAgICAqIGFzc2VtYmxlci9BYnN0cmFjdE1h
Y3JvQXNzZW1ibGVyLmg6CisgICAgICAgIChKU0M6OkFic3RyYWN0TWFjcm9Bc3NlbWJsZXI6OnBy
ZXBhcmVGb3JBdG9taWNSZXBhdGNoTmVhckNhbGxDb25jdXJyZW50bHkpOgorICAgICAgICAqIGFz
c2VtYmxlci9MaW5rQnVmZmVyLmNwcDoKKyAgICAgICAgKEpTQzo6TGlua0J1ZmZlcjo6Y29weUNv
bXBhY3RBbmRMaW5rQ29kZSk6CisgICAgICAgIChKU0M6OkxpbmtCdWZmZXI6OmxpbmtDb2RlKToK
KyAgICAgICAgKEpTQzo6TGlua0J1ZmZlcjo6YWxsb2NhdGUpOgorICAgICAgICAoSlNDOjpMaW5r
QnVmZmVyOjpwZXJmb3JtRmluYWxpemF0aW9uKToKKyAgICAgICAgKiBhc3NlbWJsZXIvTGlua0J1
ZmZlci5oOgorICAgICAgICAoSlNDOjpMaW5rQnVmZmVyOjpMaW5rQnVmZmVyKToKKyAgICAgICAg
KEpTQzo6TGlua0J1ZmZlcjo6c2V0SXNKdW1wSXNsYW5kKToKKyAgICAgICAgKiBhc3NlbWJsZXIv
TWFjcm9Bc3NlbWJsZXJDb2RlUmVmLmg6CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyQ29k
ZVJlZjo6TWFjcm9Bc3NlbWJsZXJDb2RlUmVmKToKKyAgICAgICAgKiBqaXQvRXhlY3V0YWJsZUFs
bG9jYXRvci5jcHA6CisgICAgICAgIChKU0M6OmluaXRpYWxpemVKSVRQYWdlUmVzZXJ2YXRpb24p
OgorICAgICAgICAoSlNDOjpFeGVjdXRhYmxlQWxsb2NhdG9yOjppbml0aWFsaXplVW5kZXJseWlu
Z0FsbG9jYXRvcik6CisgICAgICAgIChKU0M6OkV4ZWN1dGFibGVBbGxvY2F0b3I6OmlzVmFsaWQg
Y29uc3QpOgorICAgICAgICAoSlNDOjpFeGVjdXRhYmxlQWxsb2NhdG9yOjphbGxvY2F0ZSk6Cisg
ICAgICAgIChKU0M6OkV4ZWN1dGFibGVBbGxvY2F0b3I6OmdldEp1bXBJc2xhbmRUbyk6CisgICAg
ICAgIChKU0M6OkV4ZWN1dGFibGVBbGxvY2F0b3I6OmdldEp1bXBJc2xhbmRUb0NvbmN1cnJlbnRs
eSk6CisgICAgICAgIChKU0M6OkZpeGVkVk1Qb29sRXhlY3V0YWJsZUFsbG9jYXRvcjo6fkZpeGVk
Vk1Qb29sRXhlY3V0YWJsZUFsbG9jYXRvcik6IERlbGV0ZWQuCisgICAgICAgICogaml0L0V4ZWN1
dGFibGVBbGxvY2F0b3IuaDoKKyAgICAgICAgKEpTQzo6RXhlY3V0YWJsZUFsbG9jYXRvckJhc2U6
OmFsbG9jYXRlKToKKyAgICAgICAgKiBydW50aW1lL0NvbW1vblNsb3dQYXRocy5jcHA6CisgICAg
ICAgICogcnVudGltZS9Db21wbGV0aW9uLmNwcDoKKyAgICAgICAgKEpTQzo6ZXZhbHVhdGUpOgor
ICAgICAgICAqIHJ1bnRpbWUvSlNNb2R1bGVMb2FkZXIuY3BwOgorICAgICAgICAoSlNDOjptb2R1
bGVMb2FkZXJQYXJzZU1vZHVsZSk6CisgICAgICAgICogcnVudGltZS9PcHRpb25zTGlzdC5oOgor
ICAgICAgICAqIHRvb2xzL0NvZGVQcm9maWxlLmNwcDoKKyAgICAgICAgKEpTQzo6dHJ1bmNhdGVU
cmFjZSk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkNvZGVQcm9maWxlOjpzYW1wbGUpOiBEZWxl
dGVkLgorICAgICAgICAoSlNDOjpDb2RlUHJvZmlsZTo6cmVwb3J0KTogRGVsZXRlZC4KKyAgICAg
ICAgKiB0b29scy9Db2RlUHJvZmlsZS5oOgorICAgICAgICAoSlNDOjpDb2RlUHJvZmlsZTo6Q29k
ZVByb2ZpbGUpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpDb2RlUHJvZmlsZTo6cGFyZW50KTog
RGVsZXRlZC4KKyAgICAgICAgKEpTQzo6Q29kZVByb2ZpbGU6OmFkZENoaWxkKTogRGVsZXRlZC4K
KyAgICAgICAgKCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkNvZGVQcm9maWxlOjpDb2RlUmVj
b3JkOjpDb2RlUmVjb3JkKTogRGVsZXRlZC4KKyAgICAgICAgKiB0b29scy9Db2RlUHJvZmlsaW5n
LmNwcDoKKyAgICAgICAgKEpTQzo6c2V0UHJvZmlsZVRpbWVyKTogRGVsZXRlZC4KKyAgICAgICAg
KEpTQzo6cHJvZmlsaW5nVGltZXIpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpDb2RlUHJvZmls
aW5nOjpzYW1wbGUpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpDb2RlUHJvZmlsaW5nOjpub3Rp
ZnlBbGxvY2F0b3IpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpDb2RlUHJvZmlsaW5nOjpnZXRP
d25lclVJREZvclBDKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6Q29kZVByb2ZpbGluZzo6YmVn
aW4pOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpDb2RlUHJvZmlsaW5nOjplbmQpOiBEZWxldGVk
LgorICAgICAgICAqIHRvb2xzL0NvZGVQcm9maWxpbmcuaDoKKyAgICAgICAgKCk6IERlbGV0ZWQu
CisgICAgICAgIChKU0M6OkNvZGVQcm9maWxpbmc6OkNvZGVQcm9maWxpbmcpOiBEZWxldGVkLgor
ICAgICAgICAoSlNDOjpDb2RlUHJvZmlsaW5nOjp+Q29kZVByb2ZpbGluZyk6IERlbGV0ZWQuCisg
ICAgICAgIChKU0M6OkNvZGVQcm9maWxpbmc6OmVuYWJsZWQpOiBEZWxldGVkLgorICAgICAgICAo
SlNDOjpDb2RlUHJvZmlsaW5nOjpiZVZlcmJvc2UpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpD
b2RlUHJvZmlsaW5nOjpiZVZlcnlWZXJib3NlKTogRGVsZXRlZC4KKyAgICAgICAgKiB3YXNtL1dh
c21CQlFQbGFuLmNwcDoKKyAgICAgICAgKEpTQzo6V2FzbTo6QkJRUGxhbjo6d29yayk6CisgICAg
ICAgICogd2FzbS9XYXNtQ29kZUJsb2NrLmg6CisgICAgICAgICogd2FzbS9XYXNtT01HRm9yT1NS
RW50cnlQbGFuLmNwcDoKKyAgICAgICAgKEpTQzo6V2FzbTo6T01HRm9yT1NSRW50cnlQbGFuOjp3
b3JrKToKKyAgICAgICAgKiB3YXNtL1dhc21PTUdQbGFuLmNwcDoKKyAgICAgICAgKEpTQzo6V2Fz
bTo6T01HUGxhbjo6d29yayk6CisgICAgICAgICogd2FzbS9XYXNtUGxhbi5jcHA6CisgICAgICAg
IChKU0M6Oldhc206OlBsYW46OnVwZGF0ZUNhbGxTaXRlc1RvQ2FsbFVzKToKKyAgICAgICAgKiB3
YXNtL1dhc21QbGFuLmg6CisKIDIwMjAtMDMtMjUgIEFsZXhleSBTaHZheWthICA8c2h2YWlrYWxl
c2hAZ21haWwuY29tPgogCiAgICAgICAgIFxiIGVzY2FwZXMgaW5zaWRlIGNoYXJhY3RlciBjbGFz
c2VzIHNob3VsZCBiZSB2YWxpZCBpbiBVbmljb2RlIHBhdHRlcm5zCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvU291cmNlcy50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL1NvdXJjZXMudHh0CShyZXZpc2lvbiAyNTg5OTYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvU291cmNlcy50eHQJKHdvcmtpbmcgY29weSkKQEAgLTk5Niw4ICs5OTYsNiBAQCBydW50aW1l
L1dpZGVuaW5nTnVtYmVyUHJlZGljdGlvbkZ1enplckFnCiBKU0NCdWlsdGlucy5jcHAKIAogdG9v
bHMvQ2VsbExpc3QuY3BwCi10b29scy9Db2RlUHJvZmlsZS5jcHAKLXRvb2xzL0NvZGVQcm9maWxp
bmcuY3BwCiB0b29scy9Db21waWxlclRpbWluZ1Njb3BlLmNwcAogdG9vbHMvRnVuY3Rpb25PdmVy
cmlkZXMuY3BwCiB0b29scy9GdW5jdGlvbldoaXRlbGlzdC5jcHAKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ov
cHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAyNTg5OTYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5
KQpAQCAtNDA3Miw4ICs0MDcyLDYgQEAKIAkJODYwMTYxRTAwRjNBODNDMTAwRjg0NzEwIC8qIE1h
Y3JvQXNzZW1ibGVyWDg2LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE1hY3Jv
QXNzZW1ibGVyWDg2Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTg2MDE2MUUxMEYz
QTgzQzEwMEY4NDcxMCAvKiBNYWNyb0Fzc2VtYmxlclg4Nl82NC5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBNYWNyb0Fzc2VtYmxlclg4Nl82NC5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQk4NjAxNjFFMjBGM0E4M0MxMDBGODQ3MTAgLyogTWFjcm9Bc3NlbWJsZXJY
ODZDb21tb24uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTWFjcm9Bc3NlbWJs
ZXJYODZDb21tb24uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJODYwM0NFRjIxNEM3
NTQ2NDAwQUU1OUUzIC8qIENvZGVQcm9maWxpbmcuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBwYXRoID0gQ29kZVByb2ZpbGluZy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07Ci0JCTg2MDNDRUYzMTRDNzU0NjQwMEFFNTlFMyAvKiBDb2RlUHJvZmlsaW5nLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENvZGVQcm9maWxpbmcuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJODYwNEY0RjIxNDNBNkM0NDAwQjI5NUY1IC8qIENoYW5nZUxvZyAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQ7IGxp
bmVFbmRpbmcgPSAwOyBwYXRoID0gQ2hhbmdlTG9nOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQk4NjA2RERFOTE4REE0NEFCMDBBMzgzRDAgLyogSWRlbnRpZmllcklubGluZXMuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSWRlbnRpZmllcklubGluZXMuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJODYxMkU0Q0IxNTIyOTE4NDAwQzgzNkJFIC8qIE1hdGNo
UmVzdWx0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE1hdGNoUmVzdWx0Lmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC00MTE5LDggKzQxMTcsNiBAQAogCQk4NkFE
RDE0MzBGRERFQTk4MDAwNkZGQ0MgLyogQVJNdjdSZWdpc3RlcnMuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gQVJNdjdSZWdpc3RlcnMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJODZBREQxNDQwRkRERUE5ODAwMDZFRUMyIC8qIE1hY3JvQXNzZW1ibGVyQVJNdjcu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTWFjcm9Bc3NlbWJsZXJBUk12Ny5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk4NkI1ODIyQzE0RDIyRjVGMDBBOUMzMDYg
LyogUHJvZmlsZVRyZWVOb2RlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFBy
b2ZpbGVUcmVlTm9kZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk4NkI1ODIyRTE0
RDIzNzNCMDBBOUMzMDYgLyogQ29kZVByb2ZpbGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBwYXRoID0gQ29kZVByb2ZpbGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwotCQk4NkI1ODIyRjE0RDIzNzNCMDBBOUMzMDYgLyogQ29kZVByb2ZpbGUuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ29kZVByb2ZpbGUuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJODZCNTgyNkExNEQzNUQ1MTAwQTlDMzA2IC8qIFRpZXJlZE1NYXBBcnJheS5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBUaWVyZWRNTWFwQXJyYXkuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJODZCRjY0MkExNDhEQjJCNTAwNERFMzZBIC8qIElu
dHJpbnNpYy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJbnRyaW5zaWMuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJODZDMzZFRTkwRUUxMjg5RDAwQjNERjU5IC8q
IE1hY3JvQXNzZW1ibGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE1hY3Jv
QXNzZW1ibGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC03NjgyLDEwICs3Njc4
LDYgQEAKIAkJCQlGRTFCRDAxQjFFNzIwMDIxMDAxMzRCQzkgLyogQ2VsbExpc3QuY3BwICovLAog
CQkJCUZFMUJEMDFDMUU3MjAwMjEwMDEzNEJDOSAvKiBDZWxsTGlzdC5oICovLAogCQkJCUZFMUJE
MDIwMUU3MjAyNzAwMDEzNEJDOSAvKiBDZWxsUHJvZmlsZS5oICovLAotCQkJCTg2QjU4MjJFMTRE
MjM3M0IwMEE5QzMwNiAvKiBDb2RlUHJvZmlsZS5jcHAgKi8sCi0JCQkJODZCNTgyMkYxNEQyMzcz
QjAwQTlDMzA2IC8qIENvZGVQcm9maWxlLmggKi8sCi0JCQkJODYwM0NFRjIxNEM3NTQ2NDAwQUU1
OUUzIC8qIENvZGVQcm9maWxpbmcuY3BwICovLAotCQkJCTg2MDNDRUYzMTRDNzU0NjQwMEFFNTlF
MyAvKiBDb2RlUHJvZmlsaW5nLmggKi8sCiAJCQkJMEY0RjExRTcyMDlCQ0RBMTAwNzA5NjU0IC8q
IENvbXBpbGVyVGltaW5nU2NvcGUuY3BwICovLAogCQkJCTBGNEYxMUU2MjA5QkNEQTEwMDcwOTY1
NCAvKiBDb21waWxlclRpbWluZ1Njb3BlLmggKi8sCiAJCQkJRkU0QkZGMjkxQUQ0NzZFNzAwMDg4
Rjg3IC8qIEZ1bmN0aW9uT3ZlcnJpZGVzLmNwcCAqLywKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9hc3NlbWJsZXIvQVJNNjRBc3NlbWJsZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYXNzZW1ibGVyL0FSTTY0QXNzZW1ibGVyLmgJKHJldmlzaW9uIDI1ODk5NikK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvQVJNNjRBc3NlbWJsZXIuaAkod29y
a2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTItMjAx
OSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIt
MjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKQEAgLTc4MywxMiArNzgzLDkgQEAgcHVibGljOgogICAgICAgICBpbnNuKGRh
dGFQcm9jZXNzaW5nMlNvdXJjZShEQVRBU0laRSwgcm0sIERhdGFPcF9BU1JWLCBybiwgcmQpKTsK
ICAgICB9CiAKLSAgICBBTFdBWVNfSU5MSU5FIHZvaWQgYihpbnQzMl90IG9mZnNldCA9IDApCisg
ICAgQUxXQVlTX0lOTElORSB2b2lkIGIoKQogICAgIHsKLSAgICAgICAgQVNTRVJUKCEob2Zmc2V0
ICYgMykpOwotICAgICAgICBvZmZzZXQgPj49IDI7Ci0gICAgICAgIEFTU0VSVChvZmZzZXQgPT0g
KG9mZnNldCA8PCA2KSA+PiA2KTsKLSAgICAgICAgaW5zbih1bmNvbmRpdGlvbmFsQnJhbmNoSW1t
ZWRpYXRlKGZhbHNlLCBvZmZzZXQpKTsKKyAgICAgICAgaW5zbih1bmNvbmRpdGlvbmFsQnJhbmNo
SW1tZWRpYXRlKGZhbHNlLCAwKSk7CiAgICAgfQogCiAgICAgQUxXQVlTX0lOTElORSB2b2lkIGJf
Y29uZChDb25kaXRpb24gY29uZCwgaW50MzJfdCBvZmZzZXQgPSAwKQpAQCAtODMxLDExICs4Mjgs
OSBAQCBwdWJsaWM6CiAgICAgICAgIGluc24obG9naWNhbFNoaWZ0ZWRSZWdpc3RlcihEQVRBU0la
RSwgc2V0RmxhZ3MgPyBMb2dpY2FsT3BfQU5EUyA6IExvZ2ljYWxPcF9BTkQsIHNoaWZ0LCB0cnVl
LCBybSwgYW1vdW50LCBybiwgcmQpKTsKICAgICB9CiAKLSAgICBBTFdBWVNfSU5MSU5FIHZvaWQg
YmwoaW50MzJfdCBvZmZzZXQgPSAwKQorICAgIEFMV0FZU19JTkxJTkUgdm9pZCBibCgpCiAgICAg
ewotICAgICAgICBBU1NFUlQoIShvZmZzZXQgJiAzKSk7Ci0gICAgICAgIG9mZnNldCA+Pj0gMjsK
LSAgICAgICAgaW5zbih1bmNvbmRpdGlvbmFsQnJhbmNoSW1tZWRpYXRlKHRydWUsIG9mZnNldCkp
OworICAgICAgICBpbnNuKHVuY29uZGl0aW9uYWxCcmFuY2hJbW1lZGlhdGUodHJ1ZSwgMCkpOwog
ICAgIH0KIAogICAgIEFMV0FZU19JTkxJTkUgdm9pZCBibHIoUmVnaXN0ZXJJRCBybikKQEAgLTI1
ODIsNiArMjU3NywxNSBAQCBwdWJsaWM6CiAgICAgewogICAgICAgICBpbnRwdHJfdCBvZmZzZXQg
PSAocmVpbnRlcnByZXRfY2FzdDxpbnRwdHJfdD4odG8pIC0gcmVpbnRlcnByZXRfY2FzdDxpbnRw
dHJfdD4od2hlcmUpKSA+PiAyOwogICAgICAgICBBU1NFUlQoc3RhdGljX2Nhc3Q8aW50PihvZmZz
ZXQpID09IG9mZnNldCk7CisKKyNpZiBVU0UoSlVNUF9JU0xBTkRTKQorICAgICAgICBpZiAoIWlz
SW50PDI2PihvZmZzZXQpKSB7CisgICAgICAgICAgICB0byA9IEV4ZWN1dGFibGVBbGxvY2F0b3I6
OnNpbmdsZXRvbigpLmdldEp1bXBJc2xhbmRUbyh3aGVyZSwgdG8pOworICAgICAgICAgICAgb2Zm
c2V0ID0gKGJpdHdpc2VfY2FzdDxpbnRwdHJfdD4odG8pIC0gYml0d2lzZV9jYXN0PGludHB0cl90
Pih3aGVyZSkpID4+IDI7CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChpc0ludDwyNj4ob2Zm
c2V0KSk7CisgICAgICAgIH0KKyNlbmRpZgorCiAgICAgICAgIGludCBpbnNuID0gdW5jb25kaXRp
b25hbEJyYW5jaEltbWVkaWF0ZShmYWxzZSwgc3RhdGljX2Nhc3Q8aW50PihvZmZzZXQpKTsKICAg
ICAgICAgUkVMRUFTRV9BU1NFUlQocm91bmRVcFRvTXVsdGlwbGVPZjxpbnN0cnVjdGlvblNpemU+
KHdoZXJlKSA9PSB3aGVyZSk7CiAgICAgICAgIHBlcmZvcm1KSVRNZW1jcHkod2hlcmUsICZpbnNu
LCBzaXplb2YoaW50KSk7CkBAIC0yNzcxLDYgKzI3NzUsMjUgQEAgcHVibGljOgogICAgICAgICBy
ZWxpbmtKdW1wT3JDYWxsPEJyYW5jaFR5cGVfQ0FMTD4ocmVpbnRlcnByZXRfY2FzdDxpbnQqPihm
cm9tKSAtIDEsIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgaW50Kj4oZnJvbSkgLSAxLCB0byk7CiAg
ICAgICAgIGNhY2hlRmx1c2gocmVpbnRlcnByZXRfY2FzdDxpbnQqPihmcm9tKSAtIDEsIHNpemVv
ZihpbnQpKTsKICAgICB9CisKKyNpZiBVU0UoSlVNUF9JU0xBTkRTKQorICAgIHN0YXRpYyB2b2lk
KiBwcmVwYXJlRm9yQXRvbWljUmVsaW5rSnVtcENvbmN1cnJlbnRseSh2b2lkKiBmcm9tLCB2b2lk
KiB0bykKKyAgICB7CisgICAgICAgIGludHB0cl90IG9mZnNldCA9IChiaXR3aXNlX2Nhc3Q8aW50
cHRyX3Q+KHRvKSAtIGJpdHdpc2VfY2FzdDxpbnRwdHJfdD4oZnJvbSkpID4+IDI7CisgICAgICAg
IEFTU0VSVChzdGF0aWNfY2FzdDxpbnQ+KG9mZnNldCkgPT0gb2Zmc2V0KTsKKworICAgICAgICBp
ZiAoaXNJbnQ8MjY+KG9mZnNldCkpCisgICAgICAgICAgICByZXR1cm4gdG87CisKKyAgICAgICAg
cmV0dXJuIEV4ZWN1dGFibGVBbGxvY2F0b3I6OnNpbmdsZXRvbigpLmdldEp1bXBJc2xhbmRUb0Nv
bmN1cnJlbnRseShmcm9tLCB0byk7CisgICAgfQorCisgICAgc3RhdGljIHZvaWQqIHByZXBhcmVG
b3JBdG9taWNSZWxpbmtDYWxsQ29uY3VycmVudGx5KHZvaWQqIGZyb20sIHZvaWQqIHRvKQorICAg
IHsKKyAgICAgICAgZnJvbSA9IHN0YXRpY19jYXN0PHZvaWQqPihiaXR3aXNlX2Nhc3Q8aW50Kj4o
ZnJvbSkgLSAxKTsKKyAgICAgICAgcmV0dXJuIHByZXBhcmVGb3JBdG9taWNSZWxpbmtKdW1wQ29u
Y3VycmVudGx5KGZyb20sIHRvKTsKKyAgICB9CisjZW5kaWYKICAgICAKICAgICBzdGF0aWMgdm9p
ZCByZXBhdGNoQ29tcGFjdCh2b2lkKiB3aGVyZSwgaW50MzJfdCB2YWx1ZSkKICAgICB7CkBAIC0y
ODcyLDcgKzI4OTUsNyBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgcmV0dXJuIExpbmtKdW1w
Q29uZGl0aW9uRGlyZWN0OwogCiAgICAgICAgICAgICByZXR1cm4gTGlua0p1bXBDb25kaXRpb247
Ci0gICAgICAgICAgICB9CisgICAgICAgIH0KICAgICAgICAgY2FzZSBKdW1wQ29tcGFyZUFuZEJy
YW5jaDogIHsKICAgICAgICAgICAgIEFTU0VSVChpczRCeXRlQWxpZ25lZChmcm9tKSk7CiAgICAg
ICAgICAgICBBU1NFUlQoaXM0Qnl0ZUFsaWduZWQodG8pKTsKQEAgLTI5NDUsNiArMjk2OCwxMiBA
QCBwdWJsaWM6CiAgICAgICAgIH0KICAgICB9CiAKKyAgICBzdGF0aWMgQUxXQVlTX0lOTElORSBi
b29sIGNhbkVtaXRKdW1wKHZvaWQqIGZyb20sIHZvaWQqIHRvKQorICAgIHsKKyAgICAgICAgaW50
cHRyX3QgZGlmZiA9IChiaXR3aXNlX2Nhc3Q8aW50cHRyX3Q+KGZyb20pIC0gYml0d2lzZV9jYXN0
PGludHB0cl90Pih0bykpID4+IDI7CisgICAgICAgIHJldHVybiBpc0ludDwyNj4oZGlmZik7Cisg
ICAgfQorCiBwcm90ZWN0ZWQ6CiAgICAgdGVtcGxhdGU8RGF0YXNpemUgc2l6ZT4KICAgICBzdGF0
aWMgYm9vbCBjaGVja01vdmsoaW50IGluc24sIGludCBfaHcsIFJlZ2lzdGVySUQgX3JkKQpAQCAt
Mjk5NCw5ICszMDIzLDE3IEBAIHByb3RlY3RlZDoKICAgICAgICAgQVNTRVJUKCEocmVpbnRlcnBy
ZXRfY2FzdDxpbnRwdHJfdD4odG8pICYgMykpOwogICAgICAgICBhc3NlcnRJc05vdFRhZ2dlZCh0
byk7CiAgICAgICAgIGFzc2VydElzTm90VGFnZ2VkKGZyb21JbnN0cnVjdGlvbik7Ci0gICAgICAg
IGludHB0cl90IG9mZnNldCA9IChyZWludGVycHJldF9jYXN0PGludHB0cl90Pih0bykgLSByZWlu
dGVycHJldF9jYXN0PGludHB0cl90Pihmcm9tSW5zdHJ1Y3Rpb24pKSA+PiAyOworICAgICAgICBp
bnRwdHJfdCBvZmZzZXQgPSAoYml0d2lzZV9jYXN0PGludHB0cl90Pih0bykgLSBiaXR3aXNlX2Nh
c3Q8aW50cHRyX3Q+KGZyb21JbnN0cnVjdGlvbikpID4+IDI7CiAgICAgICAgIEFTU0VSVChzdGF0
aWNfY2FzdDxpbnQ+KG9mZnNldCkgPT0gb2Zmc2V0KTsKIAorI2lmIFVTRShKVU1QX0lTTEFORFMp
CisgICAgICAgIGlmICghaXNJbnQ8MjY+KG9mZnNldCkpIHsKKyAgICAgICAgICAgIHRvID0gRXhl
Y3V0YWJsZUFsbG9jYXRvcjo6c2luZ2xldG9uKCkuZ2V0SnVtcElzbGFuZFRvKGJpdHdpc2VfY2Fz
dDx2b2lkKj4oZnJvbUluc3RydWN0aW9uKSwgdG8pOworICAgICAgICAgICAgb2Zmc2V0ID0gKGJp
dHdpc2VfY2FzdDxpbnRwdHJfdD4odG8pIC0gYml0d2lzZV9jYXN0PGludHB0cl90Pihmcm9tSW5z
dHJ1Y3Rpb24pKSA+PiAyOworICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoaXNJbnQ8MjY+KG9m
ZnNldCkpOworICAgICAgICB9CisjZW5kaWYKKwogICAgICAgICBpbnQgaW5zbiA9IHVuY29uZGl0
aW9uYWxCcmFuY2hJbW1lZGlhdGUoaXNDYWxsLCBzdGF0aWNfY2FzdDxpbnQ+KG9mZnNldCkpOwog
ICAgICAgICBSRUxFQVNFX0FTU0VSVChyb3VuZFVwVG9NdWx0aXBsZU9mPGluc3RydWN0aW9uU2l6
ZT4oZnJvbSkgPT0gZnJvbSk7CiAgICAgICAgIGNvcHkoZnJvbSwgJmluc24sIHNpemVvZihpbnQp
KTsKQEAgLTMwMDgsMTIgKzMwNDUsMTIgQEAgcHJvdGVjdGVkOgogICAgICAgICBBU1NFUlQoIShy
ZWludGVycHJldF9jYXN0PGludHB0cl90Pihmcm9tKSAmIDMpKTsKICAgICAgICAgQVNTRVJUKCEo
cmVpbnRlcnByZXRfY2FzdDxpbnRwdHJfdD4odG8pICYgMykpOwogICAgICAgICBpbnRwdHJfdCBv
ZmZzZXQgPSAocmVpbnRlcnByZXRfY2FzdDxpbnRwdHJfdD4odG8pIC0gcmVpbnRlcnByZXRfY2Fz
dDxpbnRwdHJfdD4oZnJvbUluc3RydWN0aW9uKSkgPj4gMjsKLSAgICAgICAgQVNTRVJUKGlzSW50
PDI2PihvZmZzZXQpKTsKIAogICAgICAgICBib29sIHVzZURpcmVjdCA9IGlzSW50PDE5PihvZmZz
ZXQpOwogICAgICAgICBBU1NFUlQodHlwZSA9PSBJbmRpcmVjdEJyYW5jaCB8fCB1c2VEaXJlY3Qp
OwogCiAgICAgICAgIGlmICh1c2VEaXJlY3QgfHwgdHlwZSA9PSBEaXJlY3RCcmFuY2gpIHsKKyAg
ICAgICAgICAgIEFTU0VSVChpc0ludDwxOT4ob2Zmc2V0KSk7CiAgICAgICAgICAgICBpbnQgaW5z
biA9IGNvbXBhcmVBbmRCcmFuY2hJbW1lZGlhdGUoaXM2NEJpdCA/IERhdGFzaXplXzY0IDogRGF0
YXNpemVfMzIsIGNvbmRpdGlvbiA9PSBDb25kaXRpb25ORSwgc3RhdGljX2Nhc3Q8aW50PihvZmZz
ZXQpLCBydCk7CiAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChyb3VuZFVwVG9NdWx0aXBsZU9m
PGluc3RydWN0aW9uU2l6ZT4oZnJvbSkgPT0gZnJvbSk7CiAgICAgICAgICAgICBjb3B5KGZyb20s
ICZpbnNuLCBzaXplb2YoaW50KSk7CkBAIC0zMDM2LDEyICszMDczLDEyIEBAIHByb3RlY3RlZDoK
ICAgICAgICAgQVNTRVJUKCEocmVpbnRlcnByZXRfY2FzdDxpbnRwdHJfdD4oZnJvbSkgJiAzKSk7
CiAgICAgICAgIEFTU0VSVCghKHJlaW50ZXJwcmV0X2Nhc3Q8aW50cHRyX3Q+KHRvKSAmIDMpKTsK
ICAgICAgICAgaW50cHRyX3Qgb2Zmc2V0ID0gKHJlaW50ZXJwcmV0X2Nhc3Q8aW50cHRyX3Q+KHRv
KSAtIHJlaW50ZXJwcmV0X2Nhc3Q8aW50cHRyX3Q+KGZyb21JbnN0cnVjdGlvbikpID4+IDI7Ci0g
ICAgICAgIEFTU0VSVChpc0ludDwyNj4ob2Zmc2V0KSk7CiAKICAgICAgICAgYm9vbCB1c2VEaXJl
Y3QgPSBpc0ludDwxOT4ob2Zmc2V0KTsKICAgICAgICAgQVNTRVJUKHR5cGUgPT0gSW5kaXJlY3RC
cmFuY2ggfHwgdXNlRGlyZWN0KTsKIAogICAgICAgICBpZiAodXNlRGlyZWN0IHx8IHR5cGUgPT0g
RGlyZWN0QnJhbmNoKSB7CisgICAgICAgICAgICBBU1NFUlQoaXNJbnQ8MTk+KG9mZnNldCkpOwog
ICAgICAgICAgICAgaW50IGluc24gPSBjb25kaXRpb25hbEJyYW5jaEltbWVkaWF0ZShzdGF0aWNf
Y2FzdDxpbnQ+KG9mZnNldCksIGNvbmRpdGlvbik7CiAgICAgICAgICAgICBSRUxFQVNFX0FTU0VS
VChyb3VuZFVwVG9NdWx0aXBsZU9mPGluc3RydWN0aW9uU2l6ZT4oZnJvbSkgPT0gZnJvbSk7CiAg
ICAgICAgICAgICBjb3B5KGZyb20sICZpbnNuLCBzaXplb2YoaW50KSk7CkBAIC0zMDY1LDEyICsz
MTAyLDEyIEBAIHByb3RlY3RlZDoKICAgICAgICAgQVNTRVJUKCEocmVpbnRlcnByZXRfY2FzdDxp
bnRwdHJfdD4odG8pICYgMykpOwogICAgICAgICBpbnRwdHJfdCBvZmZzZXQgPSAocmVpbnRlcnBy
ZXRfY2FzdDxpbnRwdHJfdD4odG8pIC0gcmVpbnRlcnByZXRfY2FzdDxpbnRwdHJfdD4oZnJvbUlu
c3RydWN0aW9uKSkgPj4gMjsKICAgICAgICAgQVNTRVJUKHN0YXRpY19jYXN0PGludD4ob2Zmc2V0
KSA9PSBvZmZzZXQpOwotICAgICAgICBBU1NFUlQoaXNJbnQ8MjY+KG9mZnNldCkpOwogCiAgICAg
ICAgIGJvb2wgdXNlRGlyZWN0ID0gaXNJbnQ8MTQ+KG9mZnNldCk7CiAgICAgICAgIEFTU0VSVCh0
eXBlID09IEluZGlyZWN0QnJhbmNoIHx8IHVzZURpcmVjdCk7CiAKICAgICAgICAgaWYgKHVzZURp
cmVjdCB8fCB0eXBlID09IERpcmVjdEJyYW5jaCkgeworICAgICAgICAgICAgQVNTRVJUKGlzSW50
PDE0PihvZmZzZXQpKTsKICAgICAgICAgICAgIGludCBpbnNuID0gdGVzdEFuZEJyYW5jaEltbWVk
aWF0ZShjb25kaXRpb24gPT0gQ29uZGl0aW9uTkUsIHN0YXRpY19jYXN0PGludD4oYml0TnVtYmVy
KSwgc3RhdGljX2Nhc3Q8aW50PihvZmZzZXQpLCBydCk7CiAgICAgICAgICAgICBSRUxFQVNFX0FT
U0VSVChyb3VuZFVwVG9NdWx0aXBsZU9mPGluc3RydWN0aW9uU2l6ZT4oZnJvbSkgPT0gZnJvbSk7
CiAgICAgICAgICAgICBjb3B5KGZyb20sICZpbnNuLCBzaXplb2YoaW50KSk7CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL0Fic3RyYWN0TWFjcm9Bc3NlbWJsZXIuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL0Fic3RyYWN0TWFjcm9B
c3NlbWJsZXIuaAkocmV2aXNpb24gMjU4OTk2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Fz
c2VtYmxlci9BYnN0cmFjdE1hY3JvQXNzZW1ibGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTkxOSw2
ICs5MTksMjIgQEAgcHVibGljOgogICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgp
OwogICAgIH0KIAorICAgIHRlbXBsYXRlPFB0clRhZyBjYWxsVGFnLCBQdHJUYWcgZGVzdFRhZz4K
KyAgICBzdGF0aWMgQ29kZUxvY2F0aW9uTGFiZWw8ZGVzdFRhZz4gcHJlcGFyZUZvckF0b21pY1Jl
cGF0Y2hOZWFyQ2FsbENvbmN1cnJlbnRseShDb2RlTG9jYXRpb25OZWFyQ2FsbDxjYWxsVGFnPiBu
ZWFyQ2FsbCwgQ29kZUxvY2F0aW9uTGFiZWw8ZGVzdFRhZz4gZGVzdGluYXRpb24pCisgICAgewor
I2lmIFVTRShKVU1QX0lTTEFORFMpCisgICAgICAgIHN3aXRjaCAobmVhckNhbGwuY2FsbE1vZGUo
KSkgeworICAgICAgICBjYXNlIE5lYXJDYWxsTW9kZTo6VGFpbDoKKyAgICAgICAgICAgIHJldHVy
biBDb2RlTG9jYXRpb25MYWJlbDxkZXN0VGFnPih0YWdDb2RlUHRyPGRlc3RUYWc+KEFzc2VtYmxl
clR5cGU6OnByZXBhcmVGb3JBdG9taWNSZWxpbmtKdW1wQ29uY3VycmVudGx5KG5lYXJDYWxsLmRh
dGFMb2NhdGlvbigpLCBkZXN0aW5hdGlvbi5kYXRhTG9jYXRpb24oKSkpKTsKKyAgICAgICAgY2Fz
ZSBOZWFyQ2FsbE1vZGU6OlJlZ3VsYXI6CisgICAgICAgICAgICByZXR1cm4gQ29kZUxvY2F0aW9u
TGFiZWw8ZGVzdFRhZz4odGFnQ29kZVB0cjxkZXN0VGFnPihBc3NlbWJsZXJUeXBlOjpwcmVwYXJl
Rm9yQXRvbWljUmVsaW5rQ2FsbENvbmN1cnJlbnRseShuZWFyQ2FsbC5kYXRhTG9jYXRpb24oKSwg
ZGVzdGluYXRpb24udW50YWdnZWRFeGVjdXRhYmxlQWRkcmVzcygpKSkpOworICAgICAgICB9Cisj
ZWxzZQorICAgICAgICBVTlVTRURfUEFSQU0obmVhckNhbGwpOworICAgICAgICByZXR1cm4gZGVz
dGluYXRpb247CisjZW5kaWYKKyAgICB9CisKICAgICB0ZW1wbGF0ZTxQdHJUYWcgdGFnPgogICAg
IHN0YXRpYyB2b2lkIHJlcGF0Y2hDb21wYWN0KENvZGVMb2NhdGlvbkRhdGFMYWJlbENvbXBhY3Q8
dGFnPiBkYXRhTGFiZWxDb21wYWN0LCBpbnQzMl90IHZhbHVlKQogICAgIHsKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTGlua0J1ZmZlci5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9MaW5rQnVmZmVyLmNwcAkocmV2aXNpb24g
MjU4OTk2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9MaW5rQnVmZmVyLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMTMxLDkgKzEzMSw5IEBAIHN0YXRpYyBBTFdBWVNfSU5MSU5F
IHZvaWQgcmVjb3JkTGlua09mZnMKIH0KIAogdGVtcGxhdGUgPHR5cGVuYW1lIEluc3RydWN0aW9u
VHlwZT4KLXZvaWQgTGlua0J1ZmZlcjo6Y29weUNvbXBhY3RBbmRMaW5rQ29kZShNYWNyb0Fzc2Vt
YmxlciYgbWFjcm9Bc3NlbWJsZXIsIHZvaWQqIG93bmVyVUlELCBKSVRDb21waWxhdGlvbkVmZm9y
dCBlZmZvcnQpCit2b2lkIExpbmtCdWZmZXI6OmNvcHlDb21wYWN0QW5kTGlua0NvZGUoTWFjcm9B
c3NlbWJsZXImIG1hY3JvQXNzZW1ibGVyLCBKSVRDb21waWxhdGlvbkVmZm9ydCBlZmZvcnQpCiB7
Ci0gICAgYWxsb2NhdGUobWFjcm9Bc3NlbWJsZXIsIG93bmVyVUlELCBlZmZvcnQpOworICAgIGFs
bG9jYXRlKG1hY3JvQXNzZW1ibGVyLCBlZmZvcnQpOwogICAgIGNvbnN0IHNpemVfdCBpbml0aWFs
U2l6ZSA9IG1hY3JvQXNzZW1ibGVyLm1fYXNzZW1ibGVyLmNvZGVTaXplKCk7CiAgICAgaWYgKGRp
ZEZhaWxUb0FsbG9jYXRlKCkpCiAgICAgICAgIHJldHVybjsKQEAgLTI5NSw3ICsyOTUsNyBAQCB2
b2lkIExpbmtCdWZmZXI6OmNvcHlDb21wYWN0QW5kTGlua0NvZGUoCiAjZW5kaWYgLy8gRU5BQkxF
KEJSQU5DSF9DT01QQUNUSU9OKQogCiAKLXZvaWQgTGlua0J1ZmZlcjo6bGlua0NvZGUoTWFjcm9B
c3NlbWJsZXImIG1hY3JvQXNzZW1ibGVyLCB2b2lkKiBvd25lclVJRCwgSklUQ29tcGlsYXRpb25F
ZmZvcnQgZWZmb3J0KQordm9pZCBMaW5rQnVmZmVyOjpsaW5rQ29kZShNYWNyb0Fzc2VtYmxlciYg
bWFjcm9Bc3NlbWJsZXIsIEpJVENvbXBpbGF0aW9uRWZmb3J0IGVmZm9ydCkKIHsKICAgICAvLyBF
bnN1cmUgdGhhdCB0aGUgZW5kIG9mIHRoZSBsYXN0IGludmFsaWRhdGlvbiBwb2ludCBkb2VzIG5v
dCBleHRlbmQgYmV5b25kIHRoZSBlbmQgb2YgdGhlIGJ1ZmZlci4KICAgICBtYWNyb0Fzc2VtYmxl
ci5sYWJlbCgpOwpAQCAtMzA0LDcgKzMwNCw3IEBAIHZvaWQgTGlua0J1ZmZlcjo6bGlua0NvZGUo
TWFjcm9Bc3NlbWJsZXIKICNpZiBkZWZpbmVkKEFTU0VNQkxFUl9IQVNfQ09OU1RBTlRfUE9PTCkg
JiYgQVNTRU1CTEVSX0hBU19DT05TVEFOVF9QT09MCiAgICAgbWFjcm9Bc3NlbWJsZXIubV9hc3Nl
bWJsZXIuYnVmZmVyKCkuZmx1c2hDb25zdGFudFBvb2woZmFsc2UpOwogI2VuZGlmCi0gICAgYWxs
b2NhdGUobWFjcm9Bc3NlbWJsZXIsIG93bmVyVUlELCBlZmZvcnQpOworICAgIGFsbG9jYXRlKG1h
Y3JvQXNzZW1ibGVyLCBlZmZvcnQpOwogICAgIGlmICghbV9kaWRBbGxvY2F0ZSkKICAgICAgICAg
cmV0dXJuOwogICAgIEFTU0VSVChtX2NvZGUpOwpAQCAtMzE4LDE1ICszMTgsMTUgQEAgdm9pZCBM
aW5rQnVmZmVyOjpsaW5rQ29kZShNYWNyb0Fzc2VtYmxlcgogICAgIG1hY3JvQXNzZW1ibGVyLm1f
YXNzZW1ibGVyLnJlbG9jYXRlSnVtcHMoYnVmZmVyLmRhdGEoKSwgY29kZSk7CiAjZW5kaWYKICNl
bGlmIENQVShBUk1fVEhVTUIyKQotICAgIGNvcHlDb21wYWN0QW5kTGlua0NvZGU8dWludDE2X3Q+
KG1hY3JvQXNzZW1ibGVyLCBvd25lclVJRCwgZWZmb3J0KTsKKyAgICBjb3B5Q29tcGFjdEFuZExp
bmtDb2RlPHVpbnQxNl90PihtYWNyb0Fzc2VtYmxlciwgZWZmb3J0KTsKICNlbGlmIENQVShBUk02
NCkKLSAgICBjb3B5Q29tcGFjdEFuZExpbmtDb2RlPHVpbnQzMl90PihtYWNyb0Fzc2VtYmxlciwg
b3duZXJVSUQsIGVmZm9ydCk7CisgICAgY29weUNvbXBhY3RBbmRMaW5rQ29kZTx1aW50MzJfdD4o
bWFjcm9Bc3NlbWJsZXIsIGVmZm9ydCk7CiAjZW5kaWYgLy8gIUVOQUJMRShCUkFOQ0hfQ09NUEFD
VElPTikKIAogICAgIG1fbGlua1Rhc2tzID0gV1RGTW92ZShtYWNyb0Fzc2VtYmxlci5tX2xpbmtU
YXNrcyk7CiB9CiAKLXZvaWQgTGlua0J1ZmZlcjo6YWxsb2NhdGUoTWFjcm9Bc3NlbWJsZXImIG1h
Y3JvQXNzZW1ibGVyLCB2b2lkKiBvd25lclVJRCwgSklUQ29tcGlsYXRpb25FZmZvcnQgZWZmb3J0
KQordm9pZCBMaW5rQnVmZmVyOjphbGxvY2F0ZShNYWNyb0Fzc2VtYmxlciYgbWFjcm9Bc3NlbWJs
ZXIsIEpJVENvbXBpbGF0aW9uRWZmb3J0IGVmZm9ydCkKIHsKICAgICBzaXplX3QgaW5pdGlhbFNp
emUgPSBtYWNyb0Fzc2VtYmxlci5tX2Fzc2VtYmxlci5jb2RlU2l6ZSgpOwogICAgIGlmIChtX2Nv
ZGUpIHsKQEAgLTM0NCw3ICszNDQsNyBAQCB2b2lkIExpbmtCdWZmZXI6OmFsbG9jYXRlKE1hY3Jv
QXNzZW1ibGVyCiAgICAgICAgIGluaXRpYWxTaXplID0gbWFjcm9Bc3NlbWJsZXIubV9hc3NlbWJs
ZXIuY29kZVNpemUoKTsKICAgICB9CiAKLSAgICBtX2V4ZWN1dGFibGVNZW1vcnkgPSBFeGVjdXRh
YmxlQWxsb2NhdG9yOjpzaW5nbGV0b24oKS5hbGxvY2F0ZShpbml0aWFsU2l6ZSwgb3duZXJVSUQs
IGVmZm9ydCk7CisgICAgbV9leGVjdXRhYmxlTWVtb3J5ID0gRXhlY3V0YWJsZUFsbG9jYXRvcjo6
c2luZ2xldG9uKCkuYWxsb2NhdGUoaW5pdGlhbFNpemUsIGVmZm9ydCk7CiAgICAgaWYgKCFtX2V4
ZWN1dGFibGVNZW1vcnkpCiAgICAgICAgIHJldHVybjsKICAgICBtX2NvZGUgPSBNYWNyb0Fzc2Vt
YmxlckNvZGVQdHI8TGlua0J1ZmZlclB0clRhZz4obV9leGVjdXRhYmxlTWVtb3J5LT5zdGFydCgp
LnJldGFnZ2VkUHRyPExpbmtCdWZmZXJQdHJUYWc+KCkpOwpAQCAtMzU4LDcgKzM1OCw3IEBAIHZv
aWQgTGlua0J1ZmZlcjo6cGVyZm9ybUZpbmFsaXphdGlvbigpCiAgICAgICAgIHRhc2stPnJ1bigq
dGhpcyk7CiAKICNpZm5kZWYgTkRFQlVHCi0gICAgQVNTRVJUKCFpc0NvbXBpbGF0aW9uVGhyZWFk
KCkpOworICAgIEFTU0VSVChtX2lzSnVtcElzbGFuZCB8fCAhaXNDb21waWxhdGlvblRocmVhZCgp
KTsKICAgICBBU1NFUlQoIW1fY29tcGxldGVkKTsKICAgICBBU1NFUlQoaXNWYWxpZCgpKTsKICAg
ICBtX2NvbXBsZXRlZCA9IHRydWU7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1i
bGVyL0xpbmtCdWZmZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNz
ZW1ibGVyL0xpbmtCdWZmZXIuaAkocmV2aXNpb24gMjU4OTk2KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2Fzc2VtYmxlci9MaW5rQnVmZmVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTkwLDcgKzkw
LDggQEAgcHVibGljOgogICAgICAgICAsIG1fY29tcGxldGVkKGZhbHNlKQogI2VuZGlmCiAgICAg
ewotICAgICAgICBsaW5rQ29kZShtYWNyb0Fzc2VtYmxlciwgb3duZXJVSUQsIGVmZm9ydCk7Cisg
ICAgICAgIFVOVVNFRF9QQVJBTShvd25lclVJRCk7CisgICAgICAgIGxpbmtDb2RlKG1hY3JvQXNz
ZW1ibGVyLCBlZmZvcnQpOwogICAgIH0KIAogICAgIHRlbXBsYXRlPFB0clRhZyB0YWc+CkBAIC0x
MDcsNyArMTA4LDcgQEAgcHVibGljOgogI2Vsc2UKICAgICAgICAgVU5VU0VEX1BBUkFNKHNob3Vs
ZFBlcmZvcm1CcmFuY2hDb21wYWN0aW9uKTsKICNlbmRpZgotICAgICAgICBsaW5rQ29kZShtYWNy
b0Fzc2VtYmxlciwgMCwgZWZmb3J0KTsKKyAgICAgICAgbGlua0NvZGUobWFjcm9Bc3NlbWJsZXIs
IGVmZm9ydCk7CiAgICAgfQogCiAgICAgfkxpbmtCdWZmZXIoKQpAQCAtMTIzLDYgKzEyNCwxMyBA
QCBwdWJsaWM6CiAgICAgewogICAgICAgICByZXR1cm4gIWRpZEZhaWxUb0FsbG9jYXRlKCk7CiAg
ICAgfQorCisgICAgdm9pZCBzZXRJc0p1bXBJc2xhbmQoKQorICAgIHsKKyNpZiBBU1NFUlRfRU5B
QkxFRAorICAgICAgICBtX2lzSnVtcElzbGFuZCA9IHRydWU7CisjZW5kaWYKKyAgICB9CiAgICAg
CiAgICAgLy8gVGhlc2UgbWV0aG9kcyBhcmUgdXNlZCB0byBsaW5rIG9yIHNldCB2YWx1ZXMgYXQg
Y29kZSBnZW5lcmF0aW9uIHRpbWUuCiAKQEAgLTMyMSwxMiArMzI5LDEyIEBAIHByaXZhdGU6CiAg
ICAgICAgIHJldHVybiBtX2NvZGUuZGF0YUxvY2F0aW9uKCk7CiAgICAgfQogICAgIAotICAgIHZv
aWQgYWxsb2NhdGUoTWFjcm9Bc3NlbWJsZXImLCB2b2lkKiBvd25lclVJRCwgSklUQ29tcGlsYXRp
b25FZmZvcnQpOworICAgIHZvaWQgYWxsb2NhdGUoTWFjcm9Bc3NlbWJsZXImLCBKSVRDb21waWxh
dGlvbkVmZm9ydCk7CiAKLSAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lkIGxpbmtDb2RlKE1hY3Jv
QXNzZW1ibGVyJiwgdm9pZCogb3duZXJVSUQsIEpJVENvbXBpbGF0aW9uRWZmb3J0KTsKKyAgICBK
U19FWFBPUlRfUFJJVkFURSB2b2lkIGxpbmtDb2RlKE1hY3JvQXNzZW1ibGVyJiwgSklUQ29tcGls
YXRpb25FZmZvcnQpOwogI2lmIEVOQUJMRShCUkFOQ0hfQ09NUEFDVElPTikKICAgICB0ZW1wbGF0
ZSA8dHlwZW5hbWUgSW5zdHJ1Y3Rpb25UeXBlPgotICAgIHZvaWQgY29weUNvbXBhY3RBbmRMaW5r
Q29kZShNYWNyb0Fzc2VtYmxlciYsIHZvaWQqIG93bmVyVUlELCBKSVRDb21waWxhdGlvbkVmZm9y
dCk7CisgICAgdm9pZCBjb3B5Q29tcGFjdEFuZExpbmtDb2RlKE1hY3JvQXNzZW1ibGVyJiwgSklU
Q29tcGlsYXRpb25FZmZvcnQpOwogI2VuZGlmCiAKICAgICB2b2lkIHBlcmZvcm1GaW5hbGl6YXRp
b24oKTsKQEAgLTM0OSw2ICszNTcsOSBAQCBwcml2YXRlOgogI2lmbmRlZiBOREVCVUcKICAgICBi
b29sIG1fY29tcGxldGVkOwogI2VuZGlmCisjaWYgQVNTRVJUX0VOQUJMRUQKKyAgICBib29sIG1f
aXNKdW1wSXNsYW5kIHsgZmFsc2UgfTsKKyNlbmRpZgogICAgIGJvb2wgbV9hbHJlYWR5RGlzYXNz
ZW1ibGVkIHsgZmFsc2UgfTsKICAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8TGlua0J1ZmZlclB0
clRhZz4gbV9jb2RlOwogICAgIFZlY3RvcjxSZWZQdHI8U2hhcmVkVGFzazx2b2lkKExpbmtCdWZm
ZXImKT4+PiBtX2xpbmtUYXNrczsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJs
ZXIvTWFjcm9Bc3NlbWJsZXJDb2RlUmVmLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlckNvZGVSZWYuaAkocmV2aXNpb24gMjU4OTk2
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlckNvZGVS
ZWYuaAkod29ya2luZyBjb3B5KQpAQCAtNDM0LDcgKzQzNCw2IEBAIHB1YmxpYzoKICAgICAgICAg
OiBtX2NvZGVQdHIoZXhlY3V0YWJsZU1lbW9yeS0+c3RhcnQoKS5yZXRhZ2dlZFB0cjx0YWc+KCkp
CiAgICAgICAgICwgbV9leGVjdXRhYmxlTWVtb3J5KFdURk1vdmUoZXhlY3V0YWJsZU1lbW9yeSkp
CiAgICAgewotICAgICAgICBBU1NFUlQobV9leGVjdXRhYmxlTWVtb3J5LT5pc01hbmFnZWQoKSk7
CiAgICAgICAgIEFTU0VSVChtX2V4ZWN1dGFibGVNZW1vcnktPnN0YXJ0KCkpOwogICAgICAgICBB
U1NFUlQobV9jb2RlUHRyKTsKICAgICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L0V4ZWN1dGFibGVBbGxvY2F0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvRXhlY3V0YWJsZUFsbG9jYXRvci5jcHAJKHJldmlzaW9uIDI1ODk5NikKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvRXhlY3V0YWJsZUFsbG9jYXRvci5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA4LTIwMTkgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA4LTIwMjAg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCkBAIC0yOCw5ICsyOCwxMCBAQAogCiAjaWYgRU5BQkxFKEpJVCkKIAotI2luY2x1ZGUg
IkNvZGVQcm9maWxpbmcuaCIKICNpbmNsdWRlICJFeGVjdXRhYmxlQWxsb2NhdGlvbkZ1enouaCIK
KyNpbmNsdWRlICJJdGVyYXRpb25TdGF0dXMuaCIKICNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCisj
aW5jbHVkZSA8dHlwZV90cmFpdHM+CiAjaW5jbHVkZSA8d3RmL0ZpbGVTeXN0ZW0uaD4KICNpbmNs
dWRlIDx3dGYvTWV0YUFsbG9jYXRvci5oPgogI2luY2x1ZGUgPHd0Zi9QYWdlUmVzZXJ2YXRpb24u
aD4KQEAgLTkyLDE1ICs5MywyNiBAQCBuYW1lc3BhY2UgSlNDIHsKIHVzaW5nIG5hbWVzcGFjZSBX
VEY7CiAKICNpZiBkZWZpbmVkKEZJWEVEX0VYRUNVVEFCTEVfTUVNT1JZX1BPT0xfU0laRV9JTl9N
QikgJiYgRklYRURfRVhFQ1VUQUJMRV9NRU1PUllfUE9PTF9TSVpFX0lOX01CID4gMAotc3RhdGlj
IGNvbnN0ZXhwciBzaXplX3QgZml4ZWRFeGVjdXRhYmxlTWVtb3J5UG9vbFNpemUgPSBGSVhFRF9F
WEVDVVRBQkxFX01FTU9SWV9QT09MX1NJWkVfSU5fTUIgKiAxMDI0ICogMTAyNDsKK3N0YXRpYyBj
b25zdGV4cHIgc2l6ZV90IGZpeGVkRXhlY3V0YWJsZU1lbW9yeVBvb2xTaXplID0gRklYRURfRVhF
Q1VUQUJMRV9NRU1PUllfUE9PTF9TSVpFX0lOX01CICogTUI7CiAjZWxpZiBDUFUoQVJNKQotc3Rh
dGljIGNvbnN0ZXhwciBzaXplX3QgZml4ZWRFeGVjdXRhYmxlTWVtb3J5UG9vbFNpemUgPSAxNiAq
IDEwMjQgKiAxMDI0Oworc3RhdGljIGNvbnN0ZXhwciBzaXplX3QgZml4ZWRFeGVjdXRhYmxlTWVt
b3J5UG9vbFNpemUgPSAxNiAqIE1COwogI2VsaWYgQ1BVKEFSTTY0KQotc3RhdGljIGNvbnN0ZXhw
ciBzaXplX3QgZml4ZWRFeGVjdXRhYmxlTWVtb3J5UG9vbFNpemUgPSAxMjggKiAxMDI0ICogMTAy
NDsKKyNpZiBVU0UoSlVNUF9JU0xBTkRTKQorc3RhdGljIGNvbnN0ZXhwciBzaXplX3QgZml4ZWRF
eGVjdXRhYmxlTWVtb3J5UG9vbFNpemUgPSAxICogR0I7CisvLyBUaGVzZSBzaXplcyBndWFyYW50
ZWUgdGhhdCBhbnkganVtcCB3aXRoaW4gYW4gaXNsYW5kIGNhbiBqdW1wIGZvcndhcmRzIG9yIGJh
Y2t3YXJkcworLy8gdG8gdGhlIGFkamFjZW50IGlzbGFuZCBpbiBhIHNpbmdsZSBpbnN0cnVjdGlv
bi4KK3N0YXRpYyBjb25zdGV4cHIgc2l6ZV90IHJlZ2lvblNpemUgPSAxMTIgKiBNQjsKK3N0YXRp
YyBjb25zdGV4cHIgc2l6ZV90IGlzbGFuZFJlZ2lvblNpemUgPSAxNiAqIE1COworc3RhdGljIGNv
bnN0ZXhwciBzaXplX3QgbnVtYmVyT2ZSZWdpb25zID0gZml4ZWRFeGVjdXRhYmxlTWVtb3J5UG9v
bFNpemUgLyByZWdpb25TaXplOworc3RhdGljIGNvbnN0ZXhwciBzaXplX3QgaXNsYW5kU2l6ZUlu
Qnl0ZXMgPSA0Oworc3RhdGljIGNvbnN0ZXhwciBzaXplX3QgbWF4SXNsYW5kc1BlclJlZ2lvbiA9
IGlzbGFuZFJlZ2lvblNpemUgLyBpc2xhbmRTaXplSW5CeXRlczsKKyNlbHNlCitzdGF0aWMgY29u
c3RleHByIHNpemVfdCBmaXhlZEV4ZWN1dGFibGVNZW1vcnlQb29sU2l6ZSA9IDEyOCAqIE1COwor
I2VuZGlmCiAjZWxpZiBDUFUoWDg2XzY0KQotc3RhdGljIGNvbnN0ZXhwciBzaXplX3QgZml4ZWRF
eGVjdXRhYmxlTWVtb3J5UG9vbFNpemUgPSAxMDI0ICogMTAyNCAqIDEwMjQ7CitzdGF0aWMgY29u
c3RleHByIHNpemVfdCBmaXhlZEV4ZWN1dGFibGVNZW1vcnlQb29sU2l6ZSA9IDEgKiBHQjsKICNl
bHNlCi1zdGF0aWMgY29uc3RleHByIHNpemVfdCBmaXhlZEV4ZWN1dGFibGVNZW1vcnlQb29sU2l6
ZSA9IDMyICogMTAyNCAqIDEwMjQ7CitzdGF0aWMgY29uc3RleHByIHNpemVfdCBmaXhlZEV4ZWN1
dGFibGVNZW1vcnlQb29sU2l6ZSA9IDMyICogTUI7CiAjZW5kaWYKIAogI2lmIENQVShBUk0pCkBA
IC0zMTMsMTAgKzMyNSwxMyBAQCBzdGF0aWMgQUxXQVlTX0lOTElORSBKSVRSZXNlcnZhdGlvbiBp
bml0CiAgICAgaWYgKCFpc0pJVEVuYWJsZWQoKSkKICAgICAgICAgcmV0dXJuIHJlc2VydmF0aW9u
OwogCisgICAgcmVzZXJ2YXRpb24uc2l6ZSA9IGZpeGVkRXhlY3V0YWJsZU1lbW9yeVBvb2xTaXpl
OworI2lmICFVU0UoSlVNUF9JU0xBTkRTKQorICAgIC8vIEZJWE1FOiBDb25zaWRlciBtYWtpbmcg
anVtcCBpc2xhbmRzIHdvcmsgd2l0aCBPcHRpb25zOjpqaXRNZW1vcnlSZXNlcnZhdGlvblNpemUK
KyAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjA5MDM3CiAg
ICAgaWYgKE9wdGlvbnM6OmppdE1lbW9yeVJlc2VydmF0aW9uU2l6ZSgpKQogICAgICAgICByZXNl
cnZhdGlvbi5zaXplID0gT3B0aW9uczo6aml0TWVtb3J5UmVzZXJ2YXRpb25TaXplKCk7Ci0gICAg
ZWxzZQotICAgICAgICByZXNlcnZhdGlvbi5zaXplID0gZml4ZWRFeGVjdXRhYmxlTWVtb3J5UG9v
bFNpemU7CisjZW5kaWYKICAgICByZXNlcnZhdGlvbi5zaXplID0gc3RkOjptYXgocm91bmRVcFRv
TXVsdGlwbGVPZihwYWdlU2l6ZSgpLCByZXNlcnZhdGlvbi5zaXplKSwgcGFnZVNpemUoKSAqIDIp
OwogCiAgICAgYXV0byB0cnlDcmVhdGVQYWdlUmVzZXJ2YXRpb24gPSBbXSAoc2l6ZV90IHJlc2Vy
dmF0aW9uU2l6ZSkgewpAQCAtMzYzLDUyICszNzgsNDU5IEBAIHN0YXRpYyBBTFdBWVNfSU5MSU5F
IEpJVFJlc2VydmF0aW9uIGluaXQKICAgICByZXR1cm4gcmVzZXJ2YXRpb247CiB9CiAKLWNsYXNz
IEZpeGVkVk1Qb29sRXhlY3V0YWJsZUFsbG9jYXRvciBmaW5hbCA6IHB1YmxpYyBNZXRhQWxsb2Nh
dG9yIHsKK2NsYXNzIEZpeGVkVk1Qb29sRXhlY3V0YWJsZUFsbG9jYXRvciBmaW5hbCB7CiAgICAg
V1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CisKKyNpZiBVU0UoSlVNUF9JU0xBTkRTKQorICAgIGNs
YXNzIElzbGFuZHM7CisgICAgY2xhc3MgUmVnaW9uQWxsb2NhdG9yOworI2VuZGlmCisKIHB1Ymxp
YzoKICAgICBGaXhlZFZNUG9vbEV4ZWN1dGFibGVBbGxvY2F0b3IoKQotICAgICAgICA6IE1ldGFB
bGxvY2F0b3Ioaml0QWxsb2NhdGlvbkdyYW51bGUpIC8vIHJvdW5kIHVwIGFsbCBhbGxvY2F0aW9u
cyB0byAzMiBieXRlcworI2lmIFVTRShKVU1QX0lTTEFORFMpCisgICAgICAgIDogbV9hbGxvY2F0
b3JzKGNvbnN0cnVjdEZpeGVkU2l6ZUFycmF5V2l0aEFyZ3VtZW50czxSZWdpb25BbGxvY2F0b3Is
IG51bWJlck9mUmVnaW9ucz4oKnRoaXMpKQorI2Vsc2UKKyAgICAgICAgOiBtX2FsbG9jYXRvcigq
dGhpcykKKyNlbmRpZgogICAgIHsKICAgICAgICAgSklUUmVzZXJ2YXRpb24gcmVzZXJ2YXRpb24g
PSBpbml0aWFsaXplSklUUGFnZVJlc2VydmF0aW9uKCk7CiAgICAgICAgIG1fcmVzZXJ2YXRpb24g
PSBXVEZNb3ZlKHJlc2VydmF0aW9uLnBhZ2VSZXNlcnZhdGlvbik7CiAgICAgICAgIGlmIChtX3Jl
c2VydmF0aW9uKSB7Ci0gICAgICAgICAgICBhZGRGcmVzaEZyZWVTcGFjZShyZXNlcnZhdGlvbi5i
YXNlLCByZXNlcnZhdGlvbi5zaXplKTsKKyNpZiBVU0UoSlVNUF9JU0xBTkRTKQorICAgICAgICAg
ICAgdWludHB0cl90IHN0YXJ0ID0gYml0d2lzZV9jYXN0PHVpbnRwdHJfdD4obV9yZXNlcnZhdGlv
bi5iYXNlKCkpOworICAgICAgICAgICAgdWludHB0cl90IHJlc2VydmF0aW9uRW5kID0gc3RhcnQg
KyBtX3Jlc2VydmF0aW9uLnNpemUoKTsKKyAgICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBp
IDwgbnVtYmVyT2ZSZWdpb25zOyArK2kpIHsKKyAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VS
VChzdGFydCA8IHJlc2VydmF0aW9uRW5kKTsKKyAgICAgICAgICAgICAgICBtX2FsbG9jYXRvcnNb
aV0ubV9zdGFydCA9IHRhZ0NvZGVQdHI8RXhlY3V0YWJsZU1lbW9yeVB0clRhZz4oYml0d2lzZV9j
YXN0PHZvaWQqPihzdGFydCkpOworICAgICAgICAgICAgICAgIG1fYWxsb2NhdG9yc1tpXS5tX2Vu
ZCA9IHRhZ0NvZGVQdHI8RXhlY3V0YWJsZU1lbW9yeVB0clRhZz4oYml0d2lzZV9jYXN0PHZvaWQq
PihzdGFydCArIHJlZ2lvblNpemUpKTsKKyAgICAgICAgICAgICAgICBpZiAobV9hbGxvY2F0b3Jz
W2ldLmVuZCgpID4gcmVzZXJ2YXRpb25FbmQpIHsKKyAgICAgICAgICAgICAgICAgICAgLy8gV2Ug
bWF5IGhhdmUgdGFrZW4gYSBwYWdlIGZvciB0aGUgZXhlY3V0YWJsZSBvbmx5IGNvcHkgdGh1bmsu
CisgICAgICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKGkgPT0gbnVtYmVyT2ZSZWdpb25z
IC0gMSk7CisgICAgICAgICAgICAgICAgICAgIG1fYWxsb2NhdG9yc1tpXS5tX2VuZCA9IHRhZ0Nv
ZGVQdHI8RXhlY3V0YWJsZU1lbW9yeVB0clRhZz4oYml0d2lzZV9jYXN0PHZvaWQqPihyZXNlcnZh
dGlvbkVuZCkpOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIG1fYWxsb2Nh
dG9yc1tpXS5hZGRGcmVzaEZyZWVTcGFjZShiaXR3aXNlX2Nhc3Q8dm9pZCo+KG1fYWxsb2NhdG9y
c1tpXS5zdGFydCgpKSwgbV9hbGxvY2F0b3JzW2ldLmFsbG9jYXRvclNpemUoKSk7CisKKyAgICAg
ICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChtX2FsbG9jYXRvcnNbaV0uYWxsb2NhdG9yU2l6ZSgp
IDwgcmVnaW9uU2l6ZSk7CisgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQobV9hbGxvY2F0
b3JzW2ldLmlzbGFuZEJlZ2luKCkgPiBtX2FsbG9jYXRvcnNbaV0uc3RhcnQoKSk7CisgICAgICAg
ICAgICAgICAgUkVMRUFTRV9BU1NFUlQobV9hbGxvY2F0b3JzW2ldLmlzbGFuZEJlZ2luKCkgPCBt
X2FsbG9jYXRvcnNbaV0uZW5kKCkpOworCisgICAgICAgICAgICAgICAgc3RhcnQgKz0gcmVnaW9u
U2l6ZTsKKyAgICAgICAgICAgIH0KKyNlbHNlCisgICAgICAgICAgICBtX2FsbG9jYXRvci5hZGRG
cmVzaEZyZWVTcGFjZShyZXNlcnZhdGlvbi5iYXNlLCByZXNlcnZhdGlvbi5zaXplKTsKICAgICAg
ICAgICAgIEFTU0VSVChieXRlc1Jlc2VydmVkKCkgPT0gcmVzZXJ2YXRpb24uc2l6ZSk7IC8vIFNp
bmNlIG91ciBleGVjdXRhYmxlIG1lbW9yeSBpcyBmaXhlZC1zaXplZCwgYnl0ZXNSZXNlcnZlZCBp
cyBuZXZlciBjaGFuZ2VkIGFmdGVyIGluaXRpYWxpemF0aW9uLgorI2VuZGlmCiAgICAgICAgIH0K
ICAgICB9CiAKLSAgICB2aXJ0dWFsIH5GaXhlZFZNUG9vbEV4ZWN1dGFibGVBbGxvY2F0b3IoKTsK
KyAgICB+Rml4ZWRWTVBvb2xFeGVjdXRhYmxlQWxsb2NhdG9yKCkKKyAgICB7CisgICAgICAgIG1f
cmVzZXJ2YXRpb24uZGVhbGxvY2F0ZSgpOworICAgIH0KIAogICAgIHZvaWQqIG1lbW9yeVN0YXJ0
KCkgeyByZXR1cm4gdW50YWdDb2RlUHRyPEV4ZWN1dGFibGVNZW1vcnlQdHJUYWc+KGdfanNjQ29u
ZmlnLnN0YXJ0RXhlY3V0YWJsZU1lbW9yeSk7IH0KICAgICB2b2lkKiBtZW1vcnlFbmQoKSB7IHJl
dHVybiB1bnRhZ0NvZGVQdHI8RXhlY3V0YWJsZU1lbW9yeVB0clRhZz4oZ19qc2NDb25maWcuZW5k
RXhlY3V0YWJsZU1lbW9yeSk7IH0KICAgICBib29sIGlzSklUUEModm9pZCogcGMpIHsgcmV0dXJu
IG1lbW9yeVN0YXJ0KCkgPD0gcGMgJiYgcGMgPCBtZW1vcnlFbmQoKTsgfQorICAgIGJvb2wgaXNW
YWxpZCgpIHsgcmV0dXJuICEhbV9yZXNlcnZhdGlvbjsgfQogCi1wcm90ZWN0ZWQ6Ci0gICAgRnJl
ZVNwYWNlUHRyIGFsbG9jYXRlTmV3U3BhY2Uoc2l6ZV90Jikgb3ZlcnJpZGUKKyAgICBSZWZQdHI8
RXhlY3V0YWJsZU1lbW9yeUhhbmRsZT4gYWxsb2NhdGUoc2l6ZV90IHNpemVJbkJ5dGVzKQogICAg
IHsKLSAgICAgICAgLy8gV2UncmUgb3BlcmF0aW5nIGluIGEgZml4ZWQgcG9vbCwgc28gbmV3IGFs
bG9jYXRpb24gaXMgYWx3YXlzIHByb2hpYml0ZWQuCisjaWYgVVNFKEpVTVBfSVNMQU5EUykKKyAg
ICAgICAgYXV0byBsb2NrZXIgPSBob2xkTG9jayhnZXRMb2NrKCkpOworCisgICAgICAgIHVuc2ln
bmVkIHN0YXJ0ID0gMDsKKyAgICAgICAgaWYgKE9wdGlvbnM6OnVzZVJhbmRvbWl6aW5nRXhlY3V0
YWJsZUlzbGFuZEFsbG9jYXRpb24oKSkKKyAgICAgICAgICAgIHN0YXJ0ID0gY3J5cHRvZ3JhcGhp
Y2FsbHlSYW5kb21OdW1iZXIoKSAlIG1fYWxsb2NhdG9ycy5zaXplKCk7CisKKyAgICAgICAgdW5z
aWduZWQgaSA9IHN0YXJ0OworICAgICAgICB3aGlsZSAodHJ1ZSkgeworICAgICAgICAgICAgUmVn
aW9uQWxsb2NhdG9yJiBhbGxvY2F0b3IgPSBtX2FsbG9jYXRvcnNbaV07CisgICAgICAgICAgICBp
ZiAoUmVmUHRyPEV4ZWN1dGFibGVNZW1vcnlIYW5kbGU+IHJlc3VsdCA9IGFsbG9jYXRvci5hbGxv
Y2F0ZShsb2NrZXIsIHNpemVJbkJ5dGVzKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0
OworICAgICAgICAgICAgaSA9IChpICsgMSkgJSBtX2FsbG9jYXRvcnMuc2l6ZSgpOworICAgICAg
ICAgICAgaWYgKGkgPT0gc3RhcnQpCisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0K
ICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisjZWxzZQorICAgICAgICByZXR1cm4gbV9hbGxvY2F0
b3IuYWxsb2NhdGUoc2l6ZUluQnl0ZXMpOworI2VuZGlmIC8vIFVTRShKVU1QX0lTTEFORFMpCiAg
ICAgfQogCi0gICAgdm9pZCBub3RpZnlOZWVkUGFnZSh2b2lkKiBwYWdlLCBzaXplX3QgY291bnQp
IG92ZXJyaWRlCisgICAgTG9jayYgZ2V0TG9jaygpIHsgcmV0dXJuIG1fbG9jazsgfQorCisgICAg
Ly8gTm9uIGF0b21pYworICAgIHNpemVfdCBieXRlc0FsbG9jYXRlZCgpIAorICAgIHsKKyAgICAg
ICAgc2l6ZV90IHJlc3VsdCA9IDA7CisgICAgICAgIGZvckVhY2hBbGxvY2F0b3IoWyZdIChBbGxv
Y2F0b3ImIGFsbG9jYXRvcikgeworICAgICAgICAgICAgcmVzdWx0ICs9IGFsbG9jYXRvci5ieXRl
c0FsbG9jYXRlZCgpOworICAgICAgICB9KTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9
CisgICAgc2l6ZV90IGJ5dGVzUmVzZXJ2ZWQoKSAKKyAgICB7CisgICAgICAgIHNpemVfdCByZXN1
bHQgPSAwOworICAgICAgICBmb3JFYWNoQWxsb2NhdG9yKFsmXSAoQWxsb2NhdG9yJiBhbGxvY2F0
b3IpIHsKKyAgICAgICAgICAgIHJlc3VsdCArPSBhbGxvY2F0b3IuYnl0ZXNSZXNlcnZlZCgpOwor
ICAgICAgICB9KTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisgICAgc2l6ZV90IGJ5
dGVzQ29tbWl0dGVkKCkKKyAgICB7CisgICAgICAgIHNpemVfdCByZXN1bHQgPSAwOworICAgICAg
ICBmb3JFYWNoQWxsb2NhdG9yKFsmXSAoQWxsb2NhdG9yJiBhbGxvY2F0b3IpIHsKKyAgICAgICAg
ICAgIHJlc3VsdCArPSBhbGxvY2F0b3IuYnl0ZXNDb21taXR0ZWQoKTsKKyAgICAgICAgfSk7Cisg
ICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorCisgICAgYm9vbCBpc0luQWxsb2NhdGVkTWVt
b3J5KGNvbnN0IEFic3RyYWN0TG9ja2VyJiBsb2NrZXIsIHZvaWQqIGFkZHJlc3MpCiAgICAgewot
ICAgICAgICBtX3Jlc2VydmF0aW9uLmNvbW1pdChwYWdlLCBwYWdlU2l6ZSgpICogY291bnQpOwor
I2lmIFVTRShKVU1QX0lTTEFORFMpCisgICAgICAgIGlmIChSZWdpb25BbGxvY2F0b3IqIGFsbG9j
YXRvciA9IGZpbmRSZWdpb24oYml0d2lzZV9jYXN0PHVpbnRwdHJfdD4oYWRkcmVzcykpKQorICAg
ICAgICAgICAgcmV0dXJuIGFsbG9jYXRvci0+aXNJbkFsbG9jYXRlZE1lbW9yeShsb2NrZXIsIGFk
ZHJlc3MpOworICAgICAgICByZXR1cm4gZmFsc2U7CisjZWxzZQorICAgICAgICByZXR1cm4gbV9h
bGxvY2F0b3IuaXNJbkFsbG9jYXRlZE1lbW9yeShsb2NrZXIsIGFkZHJlc3MpOworI2VuZGlmCiAg
ICAgfQogCi0gICAgdm9pZCBub3RpZnlQYWdlSXNGcmVlKHZvaWQqIHBhZ2UsIHNpemVfdCBjb3Vu
dCkgb3ZlcnJpZGUKKyNpZiBFTkFCTEUoTUVUQV9BTExPQ0FUT1JfUFJPRklMRSkKKyAgICB2b2lk
IGR1bXBQcm9maWxlKCkKICAgICB7Ci0gICAgICAgIG1fcmVzZXJ2YXRpb24uZGVjb21taXQocGFn
ZSwgcGFnZVNpemUoKSAqIGNvdW50KTsKKyAgICAgICAgZm9yRWFjaEFsbG9jYXRvcihbJl0gKEFs
bG9jYXRvciYgYWxsb2NhdG9yKSB7CisgICAgICAgICAgICBhbGxvY2F0b3IuZHVtcFByb2ZpbGUo
KTsKKyAgICAgICAgfSk7CisgICAgfQorI2VuZGlmCisKKyAgICBNZXRhQWxsb2NhdG9yOjpTdGF0
aXN0aWNzIGN1cnJlbnRTdGF0aXN0aWNzKCkKKyAgICB7CisgICAgICAgIGF1dG8gbG9ja2VyID0g
aG9sZExvY2soZ2V0TG9jaygpKTsKKyAgICAgICAgTWV0YUFsbG9jYXRvcjo6U3RhdGlzdGljcyBy
ZXN1bHQgeyAwLCAwLCAwIH07CisgICAgICAgIGZvckVhY2hBbGxvY2F0b3IoWyZdIChBbGxvY2F0
b3ImIGFsbG9jYXRvcikgeworICAgICAgICAgICAgYXV0byBhbGxvY2F0b3JTdGF0cyA9IGFsbG9j
YXRvci5jdXJyZW50U3RhdGlzdGljcyhsb2NrZXIpOworICAgICAgICAgICAgcmVzdWx0LmJ5dGVz
QWxsb2NhdGVkICs9IGFsbG9jYXRvclN0YXRzLmJ5dGVzQWxsb2NhdGVkOworICAgICAgICAgICAg
cmVzdWx0LmJ5dGVzUmVzZXJ2ZWQgKz0gYWxsb2NhdG9yU3RhdHMuYnl0ZXNSZXNlcnZlZDsKKyAg
ICAgICAgICAgIHJlc3VsdC5ieXRlc0NvbW1pdHRlZCArPSBhbGxvY2F0b3JTdGF0cy5ieXRlc0Nv
bW1pdHRlZDsKKyAgICAgICAgfSk7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorCisj
aWYgVVNFKEpVTVBfSVNMQU5EUykKKyAgICB2b2lkIGhhbmRsZVdpbGxCZVJlbGVhc2VkKGNvbnN0
IExvY2tIb2xkZXImIGxvY2tlciwgTWV0YUFsbG9jYXRvckhhbmRsZSYgaGFuZGxlKQorICAgIHsK
KyAgICAgICAgaWYgKG1faXNsYW5kc0Zvckp1bXBTb3VyY2VMb2NhdGlvbi5pc0VtcHR5KCkpCisg
ICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgVmVjdG9yPElzbGFuZHMqLCAxNj4gdG9SZW1v
dmU7CisgICAgICAgIHZvaWQqIHN0YXJ0ID0gaGFuZGxlLnN0YXJ0KCkudW50YWdnZWRQdHIoKTsK
KyAgICAgICAgdm9pZCogZW5kID0gaGFuZGxlLmVuZCgpLnVudGFnZ2VkUHRyKCk7CisgICAgICAg
IG1faXNsYW5kc0Zvckp1bXBTb3VyY2VMb2NhdGlvbi5pdGVyYXRlKFsmXSAoSXNsYW5kcyYgaXNs
YW5kcywgYm9vbCYgdmlzaXRMZWZ0LCBib29sJiB2aXNpdFJpZ2h0KSB7CisgICAgICAgICAgICBp
ZiAoc3RhcnQgPD0gaXNsYW5kcy5rZXkoKSAmJiBpc2xhbmRzLmtleSgpIDwgZW5kKQorICAgICAg
ICAgICAgICAgIHRvUmVtb3ZlLmFwcGVuZCgmaXNsYW5kcyk7CisgICAgICAgICAgICBpZiAoaXNs
YW5kcy5rZXkoKSA+IHN0YXJ0KQorICAgICAgICAgICAgICAgIHZpc2l0TGVmdCA9IHRydWU7Cisg
ICAgICAgICAgICBpZiAoaXNsYW5kcy5rZXkoKSA8IGVuZCkKKyAgICAgICAgICAgICAgICB2aXNp
dFJpZ2h0ID0gdHJ1ZTsKKyAgICAgICAgfSk7CisKKyAgICAgICAgZm9yIChJc2xhbmRzKiBpc2xh
bmRzIDogdG9SZW1vdmUpCisgICAgICAgICAgICBmcmVlSXNsYW5kcyhsb2NrZXIsIGlzbGFuZHMp
OworCisgICAgICAgIGlmIChBU1NFUlRfRU5BQkxFRCkgeworICAgICAgICAgICAgbV9pc2xhbmRz
Rm9ySnVtcFNvdXJjZUxvY2F0aW9uLml0ZXJhdGUoWyZdIChJc2xhbmRzJiBpc2xhbmRzLCBib29s
JiB2aXNpdExlZnQsIGJvb2wmIHZpc2l0UmlnaHQpIHsKKyAgICAgICAgICAgICAgICBpZiAoc3Rh
cnQgPD0gaXNsYW5kcy5rZXkoKSAmJiBpc2xhbmRzLmtleSgpIDwgZW5kKSB7CisgICAgICAgICAg
ICAgICAgICAgIGRhdGFMb2dMbigiZGlkIG5vdCByZW1vdmUgZXZlcnl0aGluZyEiKTsKKyAgICAg
ICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICAgICAgdmlzaXRMZWZ0ID0gdHJ1ZTsKKyAgICAgICAgICAgICAg
ICB2aXNpdFJpZ2h0ID0gdHJ1ZTsKKyAgICAgICAgICAgIH0pOworICAgICAgICB9CisgICAgfQor
CisgICAgdm9pZCogbWFrZUlzbGFuZCh1aW50cHRyX3QganVtcExvY2F0aW9uLCB1aW50cHRyX3Qg
bmV3VGFyZ2V0LCBib29sIGNvbmN1cnJlbnRseSkKKyAgICB7CisgICAgICAgIGF1dG8gbG9ja2Vy
ID0gaG9sZExvY2soZ2V0TG9jaygpKTsKKyAgICAgICAgcmV0dXJuIGlzbGFuZEZvckp1bXBMb2Nh
dGlvbihsb2NrZXIsIGp1bXBMb2NhdGlvbiwgbmV3VGFyZ2V0LCBjb25jdXJyZW50bHkpOwogICAg
IH0KIAogcHJpdmF0ZToKKyAgICBSZWdpb25BbGxvY2F0b3IqIGZpbmRSZWdpb24odWludHB0cl90
IHB0cikKKyAgICB7CisgICAgICAgIFJlZ2lvbkFsbG9jYXRvciogcmVzdWx0ID0gbnVsbHB0cjsK
KyAgICAgICAgZm9yRWFjaEFsbG9jYXRvcihbJl0gKFJlZ2lvbkFsbG9jYXRvciYgYWxsb2NhdG9y
KSB7CisgICAgICAgICAgICBpZiAoYWxsb2NhdG9yLnN0YXJ0KCkgPD0gcHRyICYmIHB0ciA8IGFs
bG9jYXRvci5lbmQoKSkgeworICAgICAgICAgICAgICAgIHJlc3VsdCA9ICZhbGxvY2F0b3I7Cisg
ICAgICAgICAgICAgICAgcmV0dXJuIEl0ZXJhdGlvblN0YXR1czo6RG9uZTsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIHJldHVybiBJdGVyYXRpb25TdGF0dXM6OkNvbnRpbnVlOworICAgICAg
ICB9KTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisKKyAgICB2b2lkIGZyZWVKdW1w
SXNsYW5kcyhjb25zdCBMb2NrSG9sZGVyJiwgSXNsYW5kcyogaXNsYW5kcykKKyAgICB7CisgICAg
ICAgIGZvciAoQ29kZUxvY2F0aW9uTGFiZWw8RXhlY3V0YWJsZU1lbW9yeVB0clRhZz4ganVtcElz
bGFuZCA6IGlzbGFuZHMtPmp1bXBJc2xhbmRzKSB7CisgICAgICAgICAgICB1aW50cHRyX3QgdW50
YWdnZWRKdW1wSXNsYW5kID0gYml0d2lzZV9jYXN0PHVpbnRwdHJfdD4oanVtcElzbGFuZC5kYXRh
TG9jYXRpb24oKSk7CisgICAgICAgICAgICBSZWdpb25BbGxvY2F0b3IqIGFsbG9jYXRvciA9IGZp
bmRSZWdpb24odW50YWdnZWRKdW1wSXNsYW5kKTsKKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJU
KGFsbG9jYXRvcik7CisgICAgICAgICAgICBhbGxvY2F0b3ItPmZyZWVJc2xhbmQodW50YWdnZWRK
dW1wSXNsYW5kKTsKKyAgICAgICAgfQorICAgICAgICBpc2xhbmRzLT5qdW1wSXNsYW5kcy5jbGVh
cigpOworICAgIH0KKworICAgIHZvaWQgZnJlZUlzbGFuZHMoY29uc3QgTG9ja0hvbGRlciYgbG9j
a2VyLCBJc2xhbmRzKiBpc2xhbmRzKQorICAgIHsKKyAgICAgICAgZnJlZUp1bXBJc2xhbmRzKGxv
Y2tlciwgaXNsYW5kcyk7CisgICAgICAgIG1faXNsYW5kc0Zvckp1bXBTb3VyY2VMb2NhdGlvbi5y
ZW1vdmUoaXNsYW5kcyk7CisgICAgICAgIGRlbGV0ZSBpc2xhbmRzOworICAgIH0KKworICAgIHZv
aWQqIGlzbGFuZEZvckp1bXBMb2NhdGlvbihjb25zdCBMb2NrSG9sZGVyJiBsb2NrZXIsIHVpbnRw
dHJfdCBqdW1wTG9jYXRpb24sIHVpbnRwdHJfdCB0YXJnZXQsIGJvb2wgY29uY3VycmVudGx5KQor
ICAgIHsKKyAgICAgICAgSXNsYW5kcyogaXNsYW5kcyA9IG1faXNsYW5kc0Zvckp1bXBTb3VyY2VM
b2NhdGlvbi5maW5kRXhhY3QoYml0d2lzZV9jYXN0PHZvaWQqPihqdW1wTG9jYXRpb24pKTsKKyAg
ICAgICAgaWYgKGlzbGFuZHMpIHsKKyAgICAgICAgICAgIC8vIEZJWE1FOiBXZSBjb3VsZCBjcmVh
dGUgc29tZSBtZXRob2Qgb2YgcmV1c2luZyBhbHJlYWR5IGFsbG9jYXRlZCBpc2xhbmRzIGhlcmUs
IGJ1dCBpdCdzCisgICAgICAgICAgICAvLyB1bmxpa2VseSB0byBtYXR0ZXIgaW4gcHJhY3RpY2Uu
CisgICAgICAgICAgICBpZiAoIWNvbmN1cnJlbnRseSkKKyAgICAgICAgICAgICAgICBmcmVlSnVt
cElzbGFuZHMobG9ja2VyLCBpc2xhbmRzKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAg
IGlzbGFuZHMgPSBuZXcgSXNsYW5kczsKKyAgICAgICAgICAgIGlzbGFuZHMtPmp1bXBTb3VyY2VM
b2NhdGlvbiA9IENvZGVMb2NhdGlvbkxhYmVsPEV4ZWN1dGFibGVNZW1vcnlQdHJUYWc+KHRhZ0Nv
ZGVQdHI8RXhlY3V0YWJsZU1lbW9yeVB0clRhZz4oYml0d2lzZV9jYXN0PHZvaWQqPihqdW1wTG9j
YXRpb24pKSk7CisgICAgICAgICAgICBtX2lzbGFuZHNGb3JKdW1wU291cmNlTG9jYXRpb24uaW5z
ZXJ0KGlzbGFuZHMpOworICAgICAgICB9CisKKyAgICAgICAgUmVnaW9uQWxsb2NhdG9yKiBhbGxv
Y2F0b3IgPSBmaW5kUmVnaW9uKGp1bXBMb2NhdGlvbiA+IHRhcmdldCA/IGp1bXBMb2NhdGlvbiAt
IHJlZ2lvblNpemUgOiBqdW1wTG9jYXRpb24pOworICAgICAgICBSRUxFQVNFX0FTU0VSVChhbGxv
Y2F0b3IpOworICAgICAgICB2b2lkKiByZXN1bHQgPSBhbGxvY2F0b3ItPmFsbG9jYXRlSXNsYW5k
KCk7CisgICAgICAgIHZvaWQqIGN1cnJlbnRJc2xhbmQgPSByZXN1bHQ7CisgICAgICAgIGp1bXBM
b2NhdGlvbiA9IGJpdHdpc2VfY2FzdDx1aW50cHRyX3Q+KGN1cnJlbnRJc2xhbmQpOworICAgICAg
ICB3aGlsZSAodHJ1ZSkgeworICAgICAgICAgICAgaXNsYW5kcy0+anVtcElzbGFuZHMuYXBwZW5k
KENvZGVMb2NhdGlvbkxhYmVsPEV4ZWN1dGFibGVNZW1vcnlQdHJUYWc+KHRhZ0NvZGVQdHI8RXhl
Y3V0YWJsZU1lbW9yeVB0clRhZz4oY3VycmVudElzbGFuZCkpKTsKKworICAgICAgICAgICAgYXV0
byBlbWl0SnVtcFRvID0gWyZdICh2b2lkKiB0YXJnZXQpIHsKKyAgICAgICAgICAgICAgICBSRUxF
QVNFX0FTU0VSVChBUk02NEFzc2VtYmxlcjo6Y2FuRW1pdEp1bXAoYml0d2lzZV9jYXN0PHZvaWQq
PihqdW1wTG9jYXRpb24pLCB0YXJnZXQpKTsKKworICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1i
bGVyIGppdDsKKyAgICAgICAgICAgICAgICBhdXRvIGp1bXAgPSBqaXQuanVtcCgpOworICAgICAg
ICAgICAgICAgIExpbmtCdWZmZXIgbGlua0J1ZmZlcihqaXQsIE1hY3JvQXNzZW1ibGVyQ29kZVB0
cjxOb1B0clRhZz4oY3VycmVudElzbGFuZCksIGlzbGFuZFNpemVJbkJ5dGVzLCBKSVRDb21waWxh
dGlvbk11c3RTdWNjZWVkLCBmYWxzZSk7CisgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQo
bGlua0J1ZmZlci5pc1ZhbGlkKCkpOworCisgICAgICAgICAgICAgICAgLy8gV2UgdXNlIHRoaXMg
dG8gYXBwZWFzZSB0aGUgYXNzZXJ0aW9uIHRoYXQgd2UncmUgbm90IGZpbmFsaXppbmcgb24gYSBj
b21waWxlciB0aHJlYWQuIEluIHRoaXMgc2l0dWF0aW9uLCBpdCdzCisgICAgICAgICAgICAgICAg
Ly8gb2sgdG8gZG8gdGhpcyBvbiBhIGNvbXBpbGVyIHRocmVhZCwgc2luY2UgdGhlIGNvbXBpbGVy
IHRocmVhZCBpcyBsaW5raW5nIGEganVtcCB0byB0aGlzIGNvZGUgKGFuZCBubyBvdGhlciBsaXZl
CisgICAgICAgICAgICAgICAgLy8gY29kZSBjYW4ganVtcCB0byB0aGVzZSBpc2xhbmRzKS4gSXQn
cyBvayBiZWNhdXNlIHRoZSBDUFUgcHJvdG9jb2wgZm9yIGV4cG9zaW5nIGNvZGUgdG8gb3RoZXIg
Q1BVcyBpczoKKyAgICAgICAgICAgICAgICAvLyAtIFNlbGYgbW9kaWZ5aW5nIGNvZGUgZmVuY2Ug
KHdoYXQgRklOQUxJWkVfQ09ERSBkb2VzIGJlbG93KS4gVGhpcyBkb2VzIHZhcmlvdXMgbWVtb3J5
IGZsdXNoZXMgKyBpbnN0cnVjdGlvbiBzeW5jIGJhcnJpZXIgKGlzYikuCisgICAgICAgICAgICAg
ICAgLy8gLSBBbnkgQ1BVIHRoYXQgd2lsbCBydW4gdGhlIGNvZGUgbXVzdCBydW4gYSBjcm9zc01v
ZGlmeWluZ0NvZGVGZW5jZSAoaXNiKSBiZWZvcmUgcnVubmluZyBpdC4gU2luY2UgdGhlIGNvZGUg
dGhhdAorICAgICAgICAgICAgICAgIC8vIGhhcyBhIGp1bXAgbGlua2VkIHRvIHRoaXMgaXNsYW5k
IGhhc24ndCBmaW5hbGl6ZWQgeWV0LCB0aGV5J3JlIGd1YXJhbnRlZWQgdG8gZmluYWxpemUgdGhl
cmUgY29kZSBhbmQgcnVuIGFuIGlzYi4KKyAgICAgICAgICAgICAgICBsaW5rQnVmZmVyLnNldElz
SnVtcElzbGFuZCgpOworCisgICAgICAgICAgICAgICAgbGlua0J1ZmZlci5saW5rKGp1bXAsIENv
ZGVMb2NhdGlvbkxhYmVsPE5vUHRyVGFnPih0YXJnZXQpKTsKKyAgICAgICAgICAgICAgICBGSU5B
TElaRV9DT0RFKGxpbmtCdWZmZXIsIE5vUHRyVGFnLCAiSnVtcCBJc2xhbmQ6ICVsdSIsIGp1bXBM
b2NhdGlvbik7CisgICAgICAgICAgICB9OworCisgICAgICAgICAgICBpZiAoQVJNNjRBc3NlbWJs
ZXI6OmNhbkVtaXRKdW1wKGJpdHdpc2VfY2FzdDx2b2lkKj4oanVtcExvY2F0aW9uKSwgYml0d2lz
ZV9jYXN0PHZvaWQqPih0YXJnZXQpKSkgeworICAgICAgICAgICAgICAgIGVtaXRKdW1wVG8oYml0
d2lzZV9jYXN0PHZvaWQqPih0YXJnZXQpKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgICAgIH0KKworICAgICAgICAgICAgdWludHB0cl90IG5leHRJc2xhbmRSZWdpb247CisgICAg
ICAgICAgICBpZiAoanVtcExvY2F0aW9uID4gdGFyZ2V0KQorICAgICAgICAgICAgICAgIG5leHRJ
c2xhbmRSZWdpb24gPSBqdW1wTG9jYXRpb24gLSByZWdpb25TaXplOworICAgICAgICAgICAgZWxz
ZQorICAgICAgICAgICAgICAgIG5leHRJc2xhbmRSZWdpb24gPSBqdW1wTG9jYXRpb24gKyByZWdp
b25TaXplOworCisgICAgICAgICAgICBSZWdpb25BbGxvY2F0b3IqIGFsbG9jYXRvciA9IGZpbmRS
ZWdpb24obmV4dElzbGFuZFJlZ2lvbik7CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChhbGxv
Y2F0b3IpOworICAgICAgICAgICAgdm9pZCogbmV4dElzbGFuZCA9IGFsbG9jYXRvci0+YWxsb2Nh
dGVJc2xhbmQoKTsKKyAgICAgICAgICAgIGVtaXRKdW1wVG8obmV4dElzbGFuZCk7CisgICAgICAg
ICAgICBqdW1wTG9jYXRpb24gPSBiaXR3aXNlX2Nhc3Q8dWludHB0cl90PihuZXh0SXNsYW5kKTsK
KyAgICAgICAgICAgIGN1cnJlbnRJc2xhbmQgPSBuZXh0SXNsYW5kOworICAgICAgICB9CisKKyAg
ICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisjZW5kaWYgLy8gVVNFKEpVTVBfSVNMQU5EUykK
KworcHJpdmF0ZToKKyAgICBjbGFzcyBBbGxvY2F0b3IgOiBwdWJsaWMgTWV0YUFsbG9jYXRvciB7
CisgICAgICAgIHVzaW5nIEJhc2UgPSBNZXRhQWxsb2NhdG9yOworICAgIHB1YmxpYzoKKyAgICAg
ICAgQWxsb2NhdG9yKEZpeGVkVk1Qb29sRXhlY3V0YWJsZUFsbG9jYXRvciYgYWxsb2NhdG9yKQor
ICAgICAgICAgICAgOiBCYXNlKGFsbG9jYXRvci5nZXRMb2NrKCksIGppdEFsbG9jYXRpb25HcmFu
dWxlLCBwYWdlU2l6ZSgpKSAvLyByb3VuZCB1cCBhbGwgYWxsb2NhdGlvbnMgdG8gMzIgYnl0ZXMK
KyAgICAgICAgICAgICwgbV9maXhlZEFsbG9jYXRvcihhbGxvY2F0b3IpCisgICAgICAgIHsKKyAg
ICAgICAgfQorCisgICAgICAgIEZyZWVTcGFjZVB0ciBhbGxvY2F0ZU5ld1NwYWNlKHNpemVfdCYp
IG92ZXJyaWRlCisgICAgICAgIHsKKyAgICAgICAgICAgIC8vIFdlJ3JlIG9wZXJhdGluZyBpbiBh
IGZpeGVkIHBvb2wsIHNvIG5ldyBhbGxvY2F0aW9uIGlzIGFsd2F5cyBwcm9oaWJpdGVkLgorICAg
ICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgIH0KKworICAgICAgICB2b2lkIG5vdGlm
eU5lZWRQYWdlKHZvaWQqIHBhZ2UsIHNpemVfdCBjb3VudCkgb3ZlcnJpZGUKKyAgICAgICAgewor
ICAgICAgICAgICAgbV9maXhlZEFsbG9jYXRvci5tX3Jlc2VydmF0aW9uLmNvbW1pdChwYWdlLCBw
YWdlU2l6ZSgpICogY291bnQpOworICAgICAgICB9CisKKyAgICAgICAgdm9pZCBub3RpZnlQYWdl
SXNGcmVlKHZvaWQqIHBhZ2UsIHNpemVfdCBjb3VudCkgb3ZlcnJpZGUKKyAgICAgICAgeworICAg
ICAgICAgICAgbV9maXhlZEFsbG9jYXRvci5tX3Jlc2VydmF0aW9uLmRlY29tbWl0KHBhZ2UsIHBh
Z2VTaXplKCkgKiBjb3VudCk7CisgICAgICAgIH0KKworICAgICAgICBGaXhlZFZNUG9vbEV4ZWN1
dGFibGVBbGxvY2F0b3ImIG1fZml4ZWRBbGxvY2F0b3I7CisgICAgfTsKKworI2lmIFVTRShKVU1Q
X0lTTEFORFMpCisgICAgY2xhc3MgUmVnaW9uQWxsb2NhdG9yIGZpbmFsIDogcHVibGljIEFsbG9j
YXRvciB7CisgICAgICAgIHVzaW5nIEJhc2UgPSBBbGxvY2F0b3I7CisgICAgcHVibGljOgorICAg
ICAgICBSZWdpb25BbGxvY2F0b3IoRml4ZWRWTVBvb2xFeGVjdXRhYmxlQWxsb2NhdG9yJiBhbGxv
Y2F0b3IpCisgICAgICAgICAgICA6IEJhc2UoYWxsb2NhdG9yKQorICAgICAgICB7CisgICAgICAg
IH0KKworICAgICAgICAvLyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisg
ICAgICAgIC8vICB8IGppdCBhbGxvY2F0aW9ucyAtLT4gICA8LS0gaXNsYW5kcyB8CisgICAgICAg
IC8vICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAgICAgICAgdWlu
dHB0cl90IHN0YXJ0KCkgeyByZXR1cm4gYml0d2lzZV9jYXN0PHVpbnRwdHJfdD4odW50YWdDb2Rl
UHRyPEV4ZWN1dGFibGVNZW1vcnlQdHJUYWc+KG1fc3RhcnQpKTsgfQorICAgICAgICB1aW50cHRy
X3QgZW5kKCkgeyByZXR1cm4gYml0d2lzZV9jYXN0PHVpbnRwdHJfdD4odW50YWdDb2RlUHRyPEV4
ZWN1dGFibGVNZW1vcnlQdHJUYWc+KG1fZW5kKSk7IH0KKworICAgICAgICB1aW50cHRyX3QgaXNs
YW5kQmVnaW4oKQorICAgICAgICB7CisgICAgICAgICAgICAvLyBbc3RhcnQsIGFsbG9jYXRvckVu
ZCkKKyAgICAgICAgICAgIHJldHVybiBlbmQoKSAtIGlzbGFuZFJlZ2lvblNpemU7CisgICAgICAg
IH0KKworICAgICAgICB1aW50cHRyX3QgYWxsb2NhdG9yU2l6ZSgpCisgICAgICAgIHsKKyAgICAg
ICAgICAgIHJldHVybiBpc2xhbmRCZWdpbigpIC0gc3RhcnQoKTsKKyAgICAgICAgfQorCisgICAg
ICAgIHNpemVfdCBpc2xhbmRzUGVyUGFnZSgpCisgICAgICAgIHsKKyAgICAgICAgICAgIHNpemVf
dCBpc2xhbmRzUGVyUGFnZSA9IHBhZ2VTaXplKCkgLyBpc2xhbmRTaXplSW5CeXRlczsKKyAgICAg
ICAgICAgIEFTU0VSVChpc2xhbmRzUGVyUGFnZSAqIGlzbGFuZFNpemVJbkJ5dGVzID09IHBhZ2VT
aXplKCkpOworICAgICAgICAgICAgQVNTRVJUKGlzUG93ZXJPZlR3byhpc2xhbmRzUGVyUGFnZSkp
OworICAgICAgICAgICAgcmV0dXJuIGlzbGFuZHNQZXJQYWdlOworICAgICAgICB9CisKKyAgICAg
ICAgdm9pZCByZWxlYXNlKGNvbnN0IExvY2tIb2xkZXImIGxvY2tlciwgTWV0YUFsbG9jYXRvckhh
bmRsZSYgaGFuZGxlKSBmaW5hbAorICAgICAgICB7CisgICAgICAgICAgICBtX2ZpeGVkQWxsb2Nh
dG9yLmhhbmRsZVdpbGxCZVJlbGVhc2VkKGxvY2tlciwgaGFuZGxlKTsKKyAgICAgICAgICAgIEJh
c2U6OnJlbGVhc2UobG9ja2VyLCBoYW5kbGUpOworICAgICAgICB9CisKKyAgICAgICAgdm9pZCog
YWxsb2NhdGVJc2xhbmQoKQorICAgICAgICB7CisgICAgICAgICAgICB1aW50cHRyX3QgZW5kID0g
dGhpcy0+ZW5kKCk7CisgICAgICAgICAgICBhdXRvIGZpbmRSZXN1bHQgPSBbJl0gKCkgLT4gdm9p
ZCogeworICAgICAgICAgICAgICAgIHNpemVfdCByZXN1bHRCaXQgPSBpc2xhbmRCaXRzLmZpbmRD
bGVhckJpdCgwKTsKKyAgICAgICAgICAgICAgICBpZiAocmVzdWx0Qml0ID09IGlzbGFuZEJpdHMu
c2l6ZSgpKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgICAg
ICAgICBpc2xhbmRCaXRzW3Jlc3VsdEJpdF0gPSB0cnVlOworICAgICAgICAgICAgICAgIHVpbnRw
dHJfdCByZXN1bHQgPSBlbmQgLSAoKHJlc3VsdEJpdCArIDEpICogaXNsYW5kU2l6ZUluQnl0ZXMp
OyAKKyAgICAgICAgICAgICAgICByZXR1cm4gYml0d2lzZV9jYXN0PHZvaWQqPihyZXN1bHQpOwor
ICAgICAgICAgICAgfTsKKworICAgICAgICAgICAgaWYgKHZvaWQqIHJlc3VsdCA9IGZpbmRSZXN1
bHQoKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0OworCisgICAgICAgICAgICBpc2xh
bmRCaXRzLnJlc2l6ZShpc2xhbmRCaXRzLnNpemUoKSArIGlzbGFuZHNQZXJQYWdlKCkpOworICAg
ICAgICAgICAgaWYgKFVOTElLRUxZKGlzbGFuZEJpdHMuc2l6ZSgpID4gbWF4SXNsYW5kc1BlclJl
Z2lvbikpCisgICAgICAgICAgICAgICAgY3Jhc2hPbkp1bXBJc2xhbmRFeGhhdXN0aW9uKCk7CisK
KyAgICAgICAgICAgIHVpbnRwdHJfdCBwYWdlQmVnaW4gPSBlbmQgLSAoaXNsYW5kQml0cy5zaXpl
KCkgKiBpc2xhbmRTaXplSW5CeXRlcyk7IC8vIFtpc2xhbmRCZWdpbiwgZW5kKQorICAgICAgICAg
ICAgbV9maXhlZEFsbG9jYXRvci5tX3Jlc2VydmF0aW9uLmNvbW1pdChiaXR3aXNlX2Nhc3Q8dm9p
ZCo+KHBhZ2VCZWdpbiksIHBhZ2VTaXplKCkpOworCisgICAgICAgICAgICB2b2lkKiByZXN1bHQg
PSBmaW5kUmVzdWx0KCk7CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChyZXN1bHQpOworICAg
ICAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAgfQorCisgICAgICAgIE5FVkVSX0lOTElO
RSBOT19SRVRVUk5fRFVFX1RPX0NSQVNIIHZvaWQgY3Jhc2hPbkp1bXBJc2xhbmRFeGhhdXN0aW9u
KCkKKyAgICAgICAgeworICAgICAgICAgICAgQ1JBU0goKTsKKyAgICAgICAgfQorCisgICAgICAg
IE9wdGlvbmFsPHNpemVfdD4gaXNsYW5kQml0KHVpbnRwdHJfdCBpc2xhbmQpCisgICAgICAgIHsK
KyAgICAgICAgICAgIHVpbnRwdHJfdCBlbmQgPSB0aGlzLT5lbmQoKTsKKyAgICAgICAgICAgIGlm
IChpc2xhbmRCZWdpbigpIDw9IGlzbGFuZCAmJiBpc2xhbmQgPCBlbmQpCisgICAgICAgICAgICAg
ICAgcmV0dXJuICgoZW5kIC0gaXNsYW5kKSAvIGlzbGFuZFNpemVJbkJ5dGVzKSAtIDE7CisgICAg
ICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworICAgICAgICB9CisKKyAgICAgICAgdm9pZCBm
cmVlSXNsYW5kKHVpbnRwdHJfdCBpc2xhbmQpCisgICAgICAgIHsKKyAgICAgICAgICAgIFJFTEVB
U0VfQVNTRVJUKGlzbGFuZEJlZ2luKCkgPD0gaXNsYW5kICYmIGlzbGFuZCA8IGVuZCgpKTsKKyAg
ICAgICAgICAgIHNpemVfdCBiaXQgPSBpc2xhbmRCaXQoaXNsYW5kKS52YWx1ZSgpOworICAgICAg
ICAgICAgUkVMRUFTRV9BU1NFUlQoISFpc2xhbmRCaXRzW2JpdF0pOworICAgICAgICAgICAgaXNs
YW5kQml0c1tiaXRdID0gZmFsc2U7CisgICAgICAgIH0KKworICAgICAgICBib29sIGlzSW5BbGxv
Y2F0ZWRNZW1vcnkoY29uc3QgQWJzdHJhY3RMb2NrZXImIGxvY2tlciwgdm9pZCogYWRkcmVzcykK
KyAgICAgICAgeworICAgICAgICAgICAgaWYgKEJhc2U6OmlzSW5BbGxvY2F0ZWRNZW1vcnkobG9j
a2VyLCBhZGRyZXNzKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAg
IGlmIChPcHRpb25hbDxzaXplX3Q+IGJpdCA9IGlzbGFuZEJpdChiaXR3aXNlX2Nhc3Q8dWludHB0
cl90PihhZGRyZXNzKSkpIHsKKyAgICAgICAgICAgICAgICBpZiAoYml0LnZhbHVlKCkgPCBpc2xh
bmRCaXRzLnNpemUoKSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuICEhaXNsYW5kQml0c1ti
aXQudmFsdWUoKV07CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgICAgIH0KKworICAgICAgICAvLyBSYW5nZTogW3N0YXJ0LCBlbmQpCisgICAgICAgIHZvaWQq
IG1fc3RhcnQ7CisgICAgICAgIHZvaWQqIG1fZW5kOworICAgICAgICBGYXN0Qml0VmVjdG9yIGlz
bGFuZEJpdHM7CisgICAgfTsKKyNlbmRpZiAvLyBVU0UoSlVNUF9JU0xBTkRTKQorCisgICAgdGVt
cGxhdGUgPHR5cGVuYW1lIEZ1bmN0aW9uPgorICAgIHZvaWQgZm9yRWFjaEFsbG9jYXRvcihGdW5j
dGlvbiBmdW5jdGlvbikKKyAgICB7CisjaWYgVVNFKEpVTVBfSVNMQU5EUykKKyAgICAgICAgZm9y
IChSZWdpb25BbGxvY2F0b3ImIGFsbG9jYXRvciA6IG1fYWxsb2NhdG9ycykgeworICAgICAgICAg
ICAgdXNpbmcgRnVuY3Rpb25SZXN1bHRUeXBlID0gZGVjbHR5cGUoZnVuY3Rpb24oYWxsb2NhdG9y
KSk7CisgICAgICAgICAgICBpZiBjb25zdGV4cHIgKHN0ZDo6aXNfc2FtZTxJdGVyYXRpb25TdGF0
dXMsIEZ1bmN0aW9uUmVzdWx0VHlwZT46OnZhbHVlKSB7CisgICAgICAgICAgICAgICAgaWYgKGZ1
bmN0aW9uKGFsbG9jYXRvcikgPT0gSXRlcmF0aW9uU3RhdHVzOjpEb25lKQorICAgICAgICAgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgc3Rh
dGljX2Fzc2VydChzdGQ6OmlzX3NhbWU8dm9pZCwgRnVuY3Rpb25SZXN1bHRUeXBlPjo6dmFsdWUp
OworICAgICAgICAgICAgICAgIGZ1bmN0aW9uKGFsbG9jYXRvcik7CisgICAgICAgICAgICB9Cisg
ICAgICAgIH0KKyNlbHNlCisgICAgICAgIGZ1bmN0aW9uKG1fYWxsb2NhdG9yKTsKKyNlbmRpZiAv
LyBVU0UoSlVNUF9JU0xBTkRTKQorICAgIH0KKworI2lmIFVTRShKVU1QX0lTTEFORFMpCisgICAg
Y2xhc3MgSXNsYW5kcyA6IHB1YmxpYyBSZWRCbGFja1RyZWU8SXNsYW5kcywgdm9pZCo+OjpOb2Rl
IHsKKyAgICAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CisgICAgcHVibGljOgorICAgICAg
ICB2b2lkKiBrZXkoKSB7IHJldHVybiBqdW1wU291cmNlTG9jYXRpb24uZGF0YUxvY2F0aW9uKCk7
IH0KKyAgICAgICAgQ29kZUxvY2F0aW9uTGFiZWw8RXhlY3V0YWJsZU1lbW9yeVB0clRhZz4ganVt
cFNvdXJjZUxvY2F0aW9uOworICAgICAgICBWZWN0b3I8Q29kZUxvY2F0aW9uTGFiZWw8RXhlY3V0
YWJsZU1lbW9yeVB0clRhZz4+IGp1bXBJc2xhbmRzOworICAgIH07CisjZW5kaWYgLy8gVVNFKEpV
TVBfSVNMQU5EUykKKworICAgIExvY2sgbV9sb2NrOwogICAgIFBhZ2VSZXNlcnZhdGlvbiBtX3Jl
c2VydmF0aW9uOworI2lmIFVTRShKVU1QX0lTTEFORFMpCisgICAgc3RkOjphcnJheTxSZWdpb25B
bGxvY2F0b3IsIG51bWJlck9mUmVnaW9ucz4gbV9hbGxvY2F0b3JzOworICAgIFJlZEJsYWNrVHJl
ZTxJc2xhbmRzLCB2b2lkKj4gbV9pc2xhbmRzRm9ySnVtcFNvdXJjZUxvY2F0aW9uOworI2Vsc2UK
KyAgICBBbGxvY2F0b3IgbV9hbGxvY2F0b3I7CisjZW5kaWYgLy8gVVNFKEpVTVBfSVNMQU5EUykK
IH07CiAKLUZpeGVkVk1Qb29sRXhlY3V0YWJsZUFsbG9jYXRvcjo6fkZpeGVkVk1Qb29sRXhlY3V0
YWJsZUFsbG9jYXRvcigpCi17Ci0gICAgbV9yZXNlcnZhdGlvbi5kZWFsbG9jYXRlKCk7Ci19Ci0K
IC8vIEtlZXAgdGhpcyBwb2ludGVyIGluIGEgbXV0YWJsZSBnbG9iYWwgdmFyaWFibGUgdG8gaGVs
cCBMZWFrcyBmaW5kIGl0LgogLy8gQnV0IHdlIGRvIG5vdCB1c2UgdGhpcyBwb2ludGVyLgogc3Rh
dGljIEZpeGVkVk1Qb29sRXhlY3V0YWJsZUFsbG9jYXRvciogZ2xvYmFsRml4ZWRWTVBvb2xFeGVj
dXRhYmxlQWxsb2NhdG9yVG9Xb3JrQXJvdW5kTGVha3MgPSBudWxscHRyOwpAQCAtNDE3LDcgKzgz
OSw2IEBAIHZvaWQgRXhlY3V0YWJsZUFsbG9jYXRvcjo6aW5pdGlhbGl6ZVVuZGUKICAgICBSRUxF
QVNFX0FTU0VSVCghZ19qc2NDb25maWcuZml4ZWRWTVBvb2xFeGVjdXRhYmxlQWxsb2NhdG9yKTsK
ICAgICBnX2pzY0NvbmZpZy5maXhlZFZNUG9vbEV4ZWN1dGFibGVBbGxvY2F0b3IgPSBuZXcgRml4
ZWRWTVBvb2xFeGVjdXRhYmxlQWxsb2NhdG9yKCk7CiAgICAgZ2xvYmFsRml4ZWRWTVBvb2xFeGVj
dXRhYmxlQWxsb2NhdG9yVG9Xb3JrQXJvdW5kTGVha3MgPSBnX2pzY0NvbmZpZy5maXhlZFZNUG9v
bEV4ZWN1dGFibGVBbGxvY2F0b3I7Ci0gICAgQ29kZVByb2ZpbGluZzo6bm90aWZ5QWxsb2NhdG9y
KGdfanNjQ29uZmlnLmZpeGVkVk1Qb29sRXhlY3V0YWJsZUFsbG9jYXRvcik7CiB9CiAKIGJvb2wg
RXhlY3V0YWJsZUFsbG9jYXRvcjo6aXNWYWxpZCgpIGNvbnN0CkBAIC00MjUsNyArODQ2LDcgQEAg
Ym9vbCBFeGVjdXRhYmxlQWxsb2NhdG9yOjppc1ZhbGlkKCkgY29ucwogICAgIEZpeGVkVk1Qb29s
RXhlY3V0YWJsZUFsbG9jYXRvciogYWxsb2NhdG9yID0gZ19qc2NDb25maWcuZml4ZWRWTVBvb2xF
eGVjdXRhYmxlQWxsb2NhdG9yOwogICAgIGlmICghYWxsb2NhdG9yKQogICAgICAgICByZXR1cm4g
QmFzZTo6aXNWYWxpZCgpOwotICAgIHJldHVybiAhIWFsbG9jYXRvci0+Ynl0ZXNSZXNlcnZlZCgp
OworICAgIHJldHVybiBhbGxvY2F0b3ItPmlzVmFsaWQoKTsKIH0KIAogYm9vbCBFeGVjdXRhYmxl
QWxsb2NhdG9yOjp1bmRlck1lbW9yeVByZXNzdXJlKCkKQEAgLTQ1NiwxMSArODc3LDExIEBAIGRv
dWJsZSBFeGVjdXRhYmxlQWxsb2NhdG9yOjptZW1vcnlQcmVzc3UKICAgICByZXR1cm4gcmVzdWx0
OwogfQogCi1SZWZQdHI8RXhlY3V0YWJsZU1lbW9yeUhhbmRsZT4gRXhlY3V0YWJsZUFsbG9jYXRv
cjo6YWxsb2NhdGUoc2l6ZV90IHNpemVJbkJ5dGVzLCB2b2lkKiBvd25lclVJRCwgSklUQ29tcGls
YXRpb25FZmZvcnQgZWZmb3J0KQorUmVmUHRyPEV4ZWN1dGFibGVNZW1vcnlIYW5kbGU+IEV4ZWN1
dGFibGVBbGxvY2F0b3I6OmFsbG9jYXRlKHNpemVfdCBzaXplSW5CeXRlcywgSklUQ29tcGlsYXRp
b25FZmZvcnQgZWZmb3J0KQogewogICAgIEZpeGVkVk1Qb29sRXhlY3V0YWJsZUFsbG9jYXRvciog
YWxsb2NhdG9yID0gZ19qc2NDb25maWcuZml4ZWRWTVBvb2xFeGVjdXRhYmxlQWxsb2NhdG9yOwog
ICAgIGlmICghYWxsb2NhdG9yKQotICAgICAgICByZXR1cm4gQmFzZTo6YWxsb2NhdGUoc2l6ZUlu
Qnl0ZXMsIG93bmVyVUlELCBlZmZvcnQpOworICAgICAgICByZXR1cm4gQmFzZTo6YWxsb2NhdGUo
c2l6ZUluQnl0ZXMsIGVmZm9ydCk7CiAgICAgaWYgKE9wdGlvbnM6OmxvZ0V4ZWN1dGFibGVBbGxv
Y2F0aW9uKCkpIHsKICAgICAgICAgTWV0YUFsbG9jYXRvcjo6U3RhdGlzdGljcyBzdGF0cyA9IGFs
bG9jYXRvci0+Y3VycmVudFN0YXRpc3RpY3MoKTsKICAgICAgICAgZGF0YUxvZygiQWxsb2NhdGlu
ZyAiLCBzaXplSW5CeXRlcywgIiBieXRlcyBvZiBleGVjdXRhYmxlIG1lbW9yeSB3aXRoICIsIHN0
YXRzLmJ5dGVzQWxsb2NhdGVkLCAiIGJ5dGVzIGFsbG9jYXRlZCwgIiwgc3RhdHMuYnl0ZXNSZXNl
cnZlZCwgIiBieXRlcyByZXNlcnZlZCwgYW5kICIsIHN0YXRzLmJ5dGVzQ29tbWl0dGVkLCAiIGNv
bW1pdHRlZC5cbiIpOwpAQCAtNDg3LDcgKzkwOCw3IEBAIFJlZlB0cjxFeGVjdXRhYmxlTWVtb3J5
SGFuZGxlPiBFeGVjdXRhYmwKICAgICAgICAgfQogICAgIH0KIAotICAgIFJlZlB0cjxFeGVjdXRh
YmxlTWVtb3J5SGFuZGxlPiByZXN1bHQgPSBhbGxvY2F0b3ItPmFsbG9jYXRlKHNpemVJbkJ5dGVz
LCBvd25lclVJRCk7CisgICAgUmVmUHRyPEV4ZWN1dGFibGVNZW1vcnlIYW5kbGU+IHJlc3VsdCA9
IGFsbG9jYXRvci0+YWxsb2NhdGUoc2l6ZUluQnl0ZXMpOwogICAgIGlmICghcmVzdWx0KSB7CiAg
ICAgICAgIGlmIChlZmZvcnQgIT0gSklUQ29tcGlsYXRpb25DYW5GYWlsKSB7CiAgICAgICAgICAg
ICBkYXRhTG9nKCJSYW4gb3V0IG9mIGV4ZWN1dGFibGUgbWVtb3J5IHdoaWxlIGFsbG9jYXRpbmcg
Iiwgc2l6ZUluQnl0ZXMsICIgYnl0ZXMuXG4iKTsKQEAgLTUzOSw2ICs5NjAsMjYgQEAgdm9pZCBF
eGVjdXRhYmxlQWxsb2NhdG9yOjpkdW1wUHJvZmlsZSgpCiB9CiAjZW5kaWYKIAorI2lmIFVTRShK
VU1QX0lTTEFORFMpCit2b2lkKiBFeGVjdXRhYmxlQWxsb2NhdG9yOjpnZXRKdW1wSXNsYW5kVG8o
dm9pZCogZnJvbSwgdm9pZCogbmV3RGVzdGluYXRpb24pCit7CisgICAgRml4ZWRWTVBvb2xFeGVj
dXRhYmxlQWxsb2NhdG9yKiBhbGxvY2F0b3IgPSBnX2pzY0NvbmZpZy5maXhlZFZNUG9vbEV4ZWN1
dGFibGVBbGxvY2F0b3I7CisgICAgaWYgKCFhbGxvY2F0b3IpCisgICAgICAgIFJFTEVBU0VfQVNT
RVJUX05PVF9SRUFDSEVEKCk7CisKKyAgICByZXR1cm4gYWxsb2NhdG9yLT5tYWtlSXNsYW5kKGJp
dHdpc2VfY2FzdDx1aW50cHRyX3Q+KGZyb20pLCBiaXR3aXNlX2Nhc3Q8dWludHB0cl90PihuZXdE
ZXN0aW5hdGlvbiksIGZhbHNlKTsKK30KKwordm9pZCogRXhlY3V0YWJsZUFsbG9jYXRvcjo6Z2V0
SnVtcElzbGFuZFRvQ29uY3VycmVudGx5KHZvaWQqIGZyb20sIHZvaWQqIG5ld0Rlc3RpbmF0aW9u
KQoreworICAgIEZpeGVkVk1Qb29sRXhlY3V0YWJsZUFsbG9jYXRvciogYWxsb2NhdG9yID0gZ19q
c2NDb25maWcuZml4ZWRWTVBvb2xFeGVjdXRhYmxlQWxsb2NhdG9yOworICAgIGlmICghYWxsb2Nh
dG9yKQorICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworCisgICAgcmV0dXJu
IGFsbG9jYXRvci0+bWFrZUlzbGFuZChiaXR3aXNlX2Nhc3Q8dWludHB0cl90Pihmcm9tKSwgYml0
d2lzZV9jYXN0PHVpbnRwdHJfdD4obmV3RGVzdGluYXRpb24pLCB0cnVlKTsKK30KKyNlbmRpZgor
CiB2b2lkKiBzdGFydE9mRml4ZWRFeGVjdXRhYmxlTWVtb3J5UG9vbEltcGwoKQogewogICAgIEZp
eGVkVk1Qb29sRXhlY3V0YWJsZUFsbG9jYXRvciogYWxsb2NhdG9yID0gZ19qc2NDb25maWcuZml4
ZWRWTVBvb2xFeGVjdXRhYmxlQWxsb2NhdG9yOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9FeGVjdXRhYmxlQWxsb2NhdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9FeGVjdXRhYmxlQWxsb2NhdG9yLmgJKHJldmlzaW9uIDI1ODk5NikKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvRXhlY3V0YWJsZUFsbG9jYXRvci5oCSh3b3JraW5nIGNv
cHkpCkBAIC03MSw3ICs3MSw3IEBAIHB1YmxpYzoKIAogICAgIHN0YXRpYyB2b2lkIGR1bXBQcm9m
aWxlKCkgeyB9CiAKLSAgICBSZWZQdHI8RXhlY3V0YWJsZU1lbW9yeUhhbmRsZT4gYWxsb2NhdGUo
c2l6ZV90LCB2b2lkKiwgSklUQ29tcGlsYXRpb25FZmZvcnQpIHsgcmV0dXJuIG51bGxwdHI7IH0K
KyAgICBSZWZQdHI8RXhlY3V0YWJsZU1lbW9yeUhhbmRsZT4gYWxsb2NhdGUoc2l6ZV90LCBKSVRD
b21waWxhdGlvbkVmZm9ydCkgeyByZXR1cm4gbnVsbHB0cjsgfQogCiAgICAgc3RhdGljIHZvaWQg
c2V0SklURW5hYmxlZChib29sKSB7IH07CiAgICAgCkBAIC0xNTgsNyArMTU4LDcgQEAgY2xhc3Mg
RXhlY3V0YWJsZUFsbG9jYXRvciA6IHByaXZhdGUgRXhlYwogcHVibGljOgogICAgIHVzaW5nIEJh
c2UgPSBFeGVjdXRhYmxlQWxsb2NhdG9yQmFzZTsKIAotICAgIHN0YXRpYyBFeGVjdXRhYmxlQWxs
b2NhdG9yJiBzaW5nbGV0b24oKTsKKyAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgRXhlY3V0
YWJsZUFsbG9jYXRvciYgc2luZ2xldG9uKCk7CiAgICAgc3RhdGljIHZvaWQgaW5pdGlhbGl6ZSgp
OwogICAgIHN0YXRpYyB2b2lkIGluaXRpYWxpemVVbmRlcmx5aW5nQWxsb2NhdG9yKCk7CiAKQEAg
LTE3Niw3ICsxNzYsNyBAQCBwdWJsaWM6CiAgICAgCiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgc3Rh
dGljIHZvaWQgc2V0SklURW5hYmxlZChib29sKTsKIAotICAgIFJlZlB0cjxFeGVjdXRhYmxlTWVt
b3J5SGFuZGxlPiBhbGxvY2F0ZShzaXplX3Qgc2l6ZUluQnl0ZXMsIHZvaWQqIG93bmVyVUlELCBK
SVRDb21waWxhdGlvbkVmZm9ydCk7CisgICAgUmVmUHRyPEV4ZWN1dGFibGVNZW1vcnlIYW5kbGU+
IGFsbG9jYXRlKHNpemVfdCBzaXplSW5CeXRlcywgSklUQ29tcGlsYXRpb25FZmZvcnQpOwogCiAg
ICAgYm9vbCBpc1ZhbGlkRXhlY3V0YWJsZU1lbW9yeShjb25zdCBBYnN0cmFjdExvY2tlciYsIHZv
aWQqIGFkZHJlc3MpOwogCkBAIC0xODQsNiArMTg0LDExIEBAIHB1YmxpYzoKIAogICAgIExvY2sm
IGdldExvY2soKSBjb25zdDsKIAorI2lmIFVTRShKVU1QX0lTTEFORFMpCisgICAgSlNfRVhQT1JU
X1BSSVZBVEUgdm9pZCogZ2V0SnVtcElzbGFuZFRvKHZvaWQqIGZyb20sIHZvaWQqIG5ld0Rlc3Rp
bmF0aW9uKTsKKyAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lkKiBnZXRKdW1wSXNsYW5kVG9Db25j
dXJyZW50bHkodm9pZCogZnJvbSwgdm9pZCogbmV3RGVzdGluYXRpb24pOworI2VuZGlmCisKIHBy
aXZhdGU6CiAgICAgRXhlY3V0YWJsZUFsbG9jYXRvcigpID0gZGVmYXVsdDsKICAgICB+RXhlY3V0
YWJsZUFsbG9jYXRvcigpID0gZGVmYXVsdDsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0NvbW1vblNsb3dQYXRocy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvQ29tbW9uU2xvd1BhdGhzLmNwcAkocmV2aXNpb24gMjU4OTk2KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29tbW9uU2xvd1BhdGhzLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMzIsNyArMzIsNiBAQAogI2luY2x1ZGUgIkJ5dGVjb2RlU3RydWN0cy5oIgog
I2luY2x1ZGUgIkNhbGxGcmFtZS5oIgogI2luY2x1ZGUgIkNsb25lZEFyZ3VtZW50cy5oIgotI2lu
Y2x1ZGUgIkNvZGVQcm9maWxpbmcuaCIKICNpbmNsdWRlICJEZWZpbmVQcm9wZXJ0eUF0dHJpYnV0
ZXMuaCIKICNpbmNsdWRlICJEaXJlY3RBcmd1bWVudHMuaCIKICNpbmNsdWRlICJFcnJvci5oIgpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29tcGxldGlvbi5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29tcGxldGlvbi5jcHAJKHJl
dmlzaW9uIDI1ODk5NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbXBsZXRp
b24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNyw3ICsyNyw2IEBACiAjaW5jbHVkZSAiQ2FsbEZy
YW1lLmgiCiAjaW5jbHVkZSAiQ2F0Y2hTY29wZS5oIgogI2luY2x1ZGUgIkNvZGVDYWNoZS5oIgot
I2luY2x1ZGUgIkNvZGVQcm9maWxpbmcuaCIKICNpbmNsdWRlICJFeGNlcHRpb24uaCIKICNpbmNs
dWRlICJJZGVudGlmaWVySW5saW5lcy5oIgogI2luY2x1ZGUgIkludGVycHJldGVyLmgiCkBAIC0x
MzgsOCArMTM3LDYgQEAgSlNWYWx1ZSBldmFsdWF0ZShKU0dsb2JhbE9iamVjdCogZ2xvYmFsTwog
ICAgIFJFTEVBU0VfQVNTRVJUKHZtLmF0b21TdHJpbmdUYWJsZSgpID09IFRocmVhZDo6Y3VycmVu
dCgpLmF0b21TdHJpbmdUYWJsZSgpKTsKICAgICBSRUxFQVNFX0FTU0VSVCghdm0uaXNDb2xsZWN0
b3JCdXN5T25DdXJyZW50VGhyZWFkKCkpOwogCi0gICAgQ29kZVByb2ZpbGluZyBwcm9maWxlKHNv
dXJjZSk7Ci0KICAgICBpZiAoIXRoaXNWYWx1ZSB8fCB0aGlzVmFsdWUuaXNVbmRlZmluZWRPck51
bGwoKSkKICAgICAgICAgdGhpc1ZhbHVlID0gZ2xvYmFsT2JqZWN0OwogICAgIEpTT2JqZWN0KiB0
aGlzT2JqID0ganNDYXN0PEpTT2JqZWN0Kj4odGhpc1ZhbHVlLnRvVGhpcyhnbG9iYWxPYmplY3Qs
IE5vdFN0cmljdE1vZGUpKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pT
TW9kdWxlTG9hZGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9KU01vZHVsZUxvYWRlci5jcHAJKHJldmlzaW9uIDI1ODk5NikKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTTW9kdWxlTG9hZGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MjksNyArMjksNiBAQAogCiAjaW5jbHVkZSAiQnVpbHRpbk5hbWVzLmgiCiAjaW5jbHVkZSAiQ2F0
Y2hTY29wZS5oIgotI2luY2x1ZGUgIkNvZGVQcm9maWxpbmcuaCIKICNpbmNsdWRlICJFcnJvci5o
IgogI2luY2x1ZGUgIkV4Y2VwdGlvbi5oIgogI2luY2x1ZGUgIkpTQ0lubGluZXMuaCIKQEAgLTQw
MCw4ICszOTksNiBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG1vZHVsZUxvYWRlCiAg
ICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoSlNXZWJBc3NlbWJseTo6aW5zdGFudGlhdGUo
Z2xvYmFsT2JqZWN0LCBwcm9taXNlLCBtb2R1bGVLZXksIGpzU291cmNlQ29kZSkpOwogI2VuZGlm
CiAKLSAgICBDb2RlUHJvZmlsaW5nIHByb2ZpbGUoc291cmNlQ29kZSk7Ci0KICAgICBQYXJzZXJF
cnJvciBlcnJvcjsKICAgICBzdGQ6OnVuaXF1ZV9wdHI8TW9kdWxlUHJvZ3JhbU5vZGU+IG1vZHVs
ZVByb2dyYW1Ob2RlID0gcGFyc2U8TW9kdWxlUHJvZ3JhbU5vZGU+KAogICAgICAgICB2bSwgc291
cmNlQ29kZSwgSWRlbnRpZmllcigpLCBKU1BhcnNlckJ1aWx0aW5Nb2RlOjpOb3RCdWlsdGluLApJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9uc0xpc3QuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25zTGlzdC5oCShyZXZp
c2lvbiAyNTg5OTYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25zTGlz
dC5oCSh3b3JraW5nIGNvcHkpCkBAIC01MDAsNiArNTAwLDcgQEAgY29uc3RleHByIGJvb2wgZW5h
YmxlV2ViQXNzZW1ibHlTdHJlYW1pbgogICAgIHYoQm9vbCwgZm9yY2VPU1JFeGl0VG9MTEludCwg
ZmFsc2UsIE5vcm1hbCwgIklmIHRydWUsIHdlIGFsd2F5cyBleGl0IHRvIHRoZSBMTEludC4gSWYg
ZmFsc2UsIHdlIGV4aXQgdG8gd2hhdGV2ZXIgaXMgbW9zdCBjb252ZW5pZW50LiIpIFwKICAgICB2
KFVuc2lnbmVkLCBnZXRCeVZhbElDTWF4TnVtYmVyT2ZJZGVudGlmaWVycywgNCwgTm9ybWFsLCAi
TnVtYmVyIG9mIGlkZW50aWZpZXJzIHdlIHNlZSBpbiB0aGUgTExJbnQgdGhhdCBjb3VsZCBjYXVz
ZSB1cyB0byBiYWlsIG9uIGdlbmVyYXRpbmcgYW4gSUMgZm9yIGdldF9ieV92YWwuIikgXAogICAg
IHYoQm9vbCwgdXNlUHVibGljQ2xhc3NGaWVsZHMsIHRydWUsIE5vcm1hbCwgIklmIHRydWUsIHRo
ZSBwYXJzZXIgd2lsbCB1bmRlcnN0YW5kIHB1YmxpYyBkYXRhIGZpZWxkcyBpbnNpZGUgY2xhc3Nl
cy4iKSBcCisgICAgdihCb29sLCB1c2VSYW5kb21pemluZ0V4ZWN1dGFibGVJc2xhbmRBbGxvY2F0
aW9uLCBmYWxzZSwgTm9ybWFsLCAiRm9yIHRoZSBhcm02NCBFeGVjdXRhYmxlQWxsb2NhdG9yLCBp
ZiB0cnVlLCBzZWxlY3Qgd2hpY2ggcmVnaW9uIHRvIHVzZSByYW5kb21seS4gVGhpcyBpcyB1c2Vm
dWwgZm9yIHRlc3RpbmcgdGhhdCBqdW1wIGlzbGFuZHMgd29yay4iKSBcCiAKIGVudW0gT3B0aW9u
RXF1aXZhbGVuY2UgewogICAgIFNhbWVPcHRpb24sCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvdG9vbHMvQ29kZVByb2ZpbGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS90b29scy9Db2RlUHJvZmlsZS5jcHAJKHJldmlzaW9uIDI1ODk5NikKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS90b29scy9Db2RlUHJvZmlsZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEs
MTcyICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0
OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8K
LQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIkNvZGVQcm9maWxlLmgiCi0KLSNpbmNs
dWRlICJDb2RlQmxvY2suaCIKLSNpbmNsdWRlICJDb2RlUHJvZmlsaW5nLmgiCi0jaW5jbHVkZSAi
TGlua0J1ZmZlci5oIgotI2luY2x1ZGUgIlByb2ZpbGVUcmVlTm9kZS5oIgotI2luY2x1ZGUgPHd0
Zi9TdGFja1RyYWNlLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+Ci0KLW5hbWVz
cGFjZSBKU0MgewotCi0vLyBNYXAgZnJvbSBDb2RlVHlwZSBlbnVtIHRvIGEgY29ycmVzcG9uZGlu
ZyBuYW1lLgotc3RhdGljIGNvbnN0IGNoYXIqIGNvbnN0IHNfY29kZVR5cGVOYW1lc1tDb2RlUHJv
ZmlsZTo6TnVtYmVyT2ZDb2RlVHlwZXNdID0gewotICAgICJbW0VuZ2luZUNvZGVdXSIsCi0gICAg
IltbR2xvYmFsVGh1bmtdXSIsCi0gICAgIltbUmVnRXhwQ29kZV1dIiwKLSAgICAiW1tERkdKSVRd
XSIsCi0gICAgIltbQmFzZWxpbmVPbmx5XV0iLAotICAgICJbW0Jhc2VsaW5lUHJvZmlsZV1dIiwK
LSAgICAiW1tCYXNlbGluZU9TUl1dIiwKLSAgICAiW1tFbmdpbmVGcmFtZV1dIgotfTsKLQotLy8g
SGVscGVyIGZ1bmN0aW9uLCB0cnVuY2F0ZSB0cmFjZXMgdG8gcHJ1bmUgdGhlIG91dHB1dCAmIG1h
a2UgdmVyeSB2ZXJib3NlIG1vZGUgYSBsaXR0bGUgbW9yZSByZWFkYWJsZS4KLXN0YXRpYyBib29s
IHRydW5jYXRlVHJhY2UoY29uc3QgY2hhciogc3ltYm9sTmFtZSkKLXsKLSAgICByZXR1cm4gIXN0
cmNtcChzeW1ib2xOYW1lLCAiSlNDOjpCeXRlY29kZUdlbmVyYXRvcjo6Z2VuZXJhdGUoKSIpCi0g
ICAgICAgIHx8ICFzdHJjbXAoc3ltYm9sTmFtZSwgIkpTQzo6UGFyc2VyPEpTQzo6TGV4ZXI8dW5z
aWduZWQgY2hhcj4+OjpwYXJzZUlubmVyKCkiKQotICAgICAgICB8fCAhc3RyY21wKHN5bWJvbE5h
bWUsICJXVEY6OmZhc3RNYWxsb2ModW5zaWduZWQgbG9uZykiKQotICAgICAgICB8fCAhc3RyY21w
KHN5bWJvbE5hbWUsICJXVEY6OmNhbGN1bGF0ZVVUQ09mZnNldCgpIikKLSAgICAgICAgfHwgIXN0
cmNtcChzeW1ib2xOYW1lLCAiSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpwYXJzZUNvZGVCbG9j
aygpIik7Ci0gICAgICAgIAotfQotCi0vLyBFYWNoIHRyYWNlIGNvbnNpc3RzIG9mIGEgc2VxdWVu
Y2Ugb2YgemVybyBvciBtb3JlICdFbmdpbmVGcmFtZScgZW50cmllcywKLS8vIGZvbGxvd2VkIGJ5
IGEgc2FtcGxlIGluIEpJVCBjb2RlLCBvciBvbmUgb3IgbW9yZSAnRW5naW5lRnJhbWUnIGVudHJp
ZXMsCi0vLyBmb2xsb3dlZCBieSBhICdFbmdpbmVDb2RlJyB0ZXJtaW5hdG9yLgotdm9pZCBDb2Rl
UHJvZmlsZTo6c2FtcGxlKHZvaWQqIHBjLCB2b2lkKiogZnJhbWVQb2ludGVyKQotewotICAgIC8v
IERpc2FsbG93IHRyYWNlcyBjb250YWluaW5nIG9ubHkgYSAnRW5naW5lQ29kZScgdGVybWluYXRv
ciwgd2l0aG91dCBhbnkgJ0VuZ2luZUZyYW1lJyBmcmFtZXMuCi0gICAgaWYgKCFmcmFtZVBvaW50
ZXIpCi0gICAgICAgIHJldHVybjsKLQotICAgIHdoaWxlIChmcmFtZVBvaW50ZXIpIHsKLSAgICAg
ICAgQ29kZVR5cGUgdHlwZTsKLQotI2lmIEVOQUJMRShKSVQpCi0gICAgICAgIC8vIERldGVybWlu
ZSBpZiB0aGlzIHNhbXBsZSBmZWxsIGluIEpJVCBjb2RlLCBhbmQgaWYgc28sIGZyb20gd2hpY2gg
SklUICYgd2h5LgotICAgICAgICB2b2lkKiBvd25lclVJRCA9IENvZGVQcm9maWxpbmc6OmdldE93
bmVyVUlERm9yUEMocGMpOwotCi0gICAgICAgIGlmICghb3duZXJVSUQpCi0gICAgICAgICAgICB0
eXBlID0gRW5naW5lRnJhbWU7Ci0gICAgICAgIGVsc2UgaWYgKG93bmVyVUlEID09IEdMT0JBTF9U
SFVOS19JRCkKLSAgICAgICAgICAgIHR5cGUgPSBHbG9iYWxUaHVuazsKLSAgICAgICAgZWxzZSBp
ZiAob3duZXJVSUQgPT0gUkVHRVhQX0NPREVfSUQpCi0gICAgICAgICAgICB0eXBlID0gUmVnRXhw
Q29kZTsKLSAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9
IHN0YXRpY19jYXN0PENvZGVCbG9jayo+KG93bmVyVUlEKTsKLSAgICAgICAgICAgIGlmIChjb2Rl
QmxvY2stPmppdFR5cGUoKSA9PSBKSVRUeXBlOjpERkdKSVQpCi0gICAgICAgICAgICAgICAgdHlw
ZSA9IERGR0pJVDsKLSAgICAgICAgICAgIGVsc2UgaWYgKCFjYW5Db21waWxlKGNvZGVCbG9jay0+
Y2FwYWJpbGl0eUxldmVsU3RhdGUoKSkpCi0gICAgICAgICAgICAgICAgdHlwZSA9IEJhc2VsaW5l
T25seTsKLSAgICAgICAgICAgIGVsc2UgaWYgKGNvZGVCbG9jay0+cmVwbGFjZW1lbnQoKSkKLSAg
ICAgICAgICAgICAgICB0eXBlID0gQmFzZWxpbmVPU1I7Ci0gICAgICAgICAgICBlbHNlCi0gICAg
ICAgICAgICAgICAgdHlwZSA9IEJhc2VsaW5lUHJvZmlsZTsKLSAgICAgICAgfQotI2Vsc2UKLSAg
ICAgICAgdHlwZSA9IEVuZ2luZUZyYW1lOwotI2VuZGlmCi0KLSAgICAgICAgLy8gQSBzYW1wbGUg
aW4gSklUIGNvZGUgdGVybWluYXRlcyB0aGUgdHJhY2UuCi0gICAgICAgIG1fc2FtcGxlcy5hcHBl
bmQoQ29kZVJlY29yZChwYywgdHlwZSkpOwotICAgICAgICBpZiAodHlwZSAhPSBFbmdpbmVGcmFt
ZSkKLSAgICAgICAgICAgIHJldHVybjsKLQotI2lmIE9TKERBUldJTikgJiYgQ1BVKFg4Nl82NCkK
LSAgICAgICAgLy8gV2FsayB1cCB0aGUgc3RhY2suCi0gICAgICAgIHBjID0gZnJhbWVQb2ludGVy
WzFdOwotICAgICAgICBmcmFtZVBvaW50ZXIgPSByZWludGVycHJldF9jYXN0PHZvaWQqKj4oKmZy
YW1lUG9pbnRlcik7Ci0jZWxpZiBPUyhMSU5VWCkgJiYgQ1BVKFg4NikKLSAgICAgICAgLy8gRG9u
J3QgdW53aW5kIHRoZSBzdGFjayBhcyBzb21lIGRlcGVuZGVudCB0aGlyZCBwYXJ0eSBsaWJyYXJp
ZXMKLSAgICAgICAgLy8gbWF5IGJlIGNvbXBpbGVkIHdpdGggLWZvbWl0LWZyYW1lLXBvaW50ZXIu
Ci0gICAgICAgIGZyYW1lUG9pbnRlciA9IDA7Ci0jZWxzZQotICAgICAgICAvLyBUaGlzIHBsYXRm
b3JtIGlzIG5vdCB5ZXQgc3VwcG9ydGVkIQotICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVB
Q0hFRCgpOwotI2VuZGlmCi0gICAgfQotCi0gICAgLy8gSWYgd2UgZ2V0IGhlcmUsIHdlIHdhbGtl
ZCB0aGUgZW50aXJlIHN0YWNrIHdpdGhvdXQgZmluZGluZyBhbnkgZnJhbWVzIG9mIEpJVCBjb2Rl
LgotICAgIG1fc2FtcGxlcy5hcHBlbmQoQ29kZVJlY29yZCgwLCBFbmdpbmVDb2RlKSk7Ci19Ci0K
LXZvaWQgQ29kZVByb2ZpbGU6OnJlcG9ydCgpCi17Ci0gICAgZGF0YUxvZ0YoIjxDb2RlUHJvZmls
aW5nICVzOiVkPlxuIiwgbV9maWxlLmRhdGEoKSwgbV9saW5lTnVtYmVyKTsKLQotICAgIC8vIEhv
dyBtYW55IGZyYW1lcyBvZiBDLWNvZGUgdG8gcHJpbnQgLSAwLCBpZiBub3QgdmVyYm9zZSwgMSBp
ZiB2ZXJib3NlLCB1cCB0byAxMDI0IGlmIHZlcnkgdmVyYm9zZS4KLSAgICB1bnNpZ25lZCByZWN1
cnNpb25MaW1pdCA9IENvZGVQcm9maWxpbmc6OmJlVmVyeVZlcmJvc2UoKSA/IDEwMjQgOiBDb2Rl
UHJvZmlsaW5nOjpiZVZlcmJvc2UoKTsKLQotICAgIFByb2ZpbGVUcmVlTm9kZSBwcm9maWxlOwot
Ci0gICAgLy8gV2FsayB0aHJvdWdoIHRoZSBzYW1wbGUgYnVmZmVyLgotICAgIHNpemVfdCB0cmFj
ZSA9IDA7Ci0gICAgd2hpbGUgKHRyYWNlIDwgbV9zYW1wbGVzLnNpemUoKSkgewotCi0gICAgICAg
IC8vIEFsbCB0cmFjZXMgYXJlIHplcm8gb3IgbW9yZSAnRW5naW5lRnJhbWUncywgZm9sbG93ZWQg
YnkgYSBub24tJ0VuZ2luZUZyYW1lJy4KLSAgICAgICAgLy8gU2NhbiB0byBmaW5kIHRoZSBsYXN0
IHNhbXBsZSBpbiB0aGUgdHJhY2UuCi0gICAgICAgIHNpemVfdCBsYXN0SW5UcmFjZSA9IHRyYWNl
OwotICAgICAgICB3aGlsZSAobV9zYW1wbGVzW2xhc3RJblRyYWNlXS50eXBlID09IEVuZ2luZUZy
YW1lKQotICAgICAgICAgICAgKytsYXN0SW5UcmFjZTsKLQotICAgICAgICAvLyBXZSB1c2UgdGhl
IGxhc3Qgc2FtcGxlIHR5cGUgdG8gbG9vayB1cCBhIG5hbWUgKHVzZWQgYXMgYSBidWNrZXQgaW4g
dGhlIHByb2ZpbGVyKS4KLSAgICAgICAgUHJvZmlsZVRyZWVOb2RlKiBjYWxsYmFja3MgPSBwcm9m
aWxlLnNhbXBsZUNoaWxkKHNfY29kZVR5cGVOYW1lc1ttX3NhbXBsZXNbbGFzdEluVHJhY2VdLnR5
cGVdKTsKLQotICAgICAgICAvLyBJZiB0aGVyZSBhcmUgYW55IHNhbXBsZXMgaW4gQy1jb2RlLCBh
ZGQgdXAgdG8gcmVjdXJzaW9uTGltaXQgb2YgdGhlbSBpbnRvIHRoZSBwcm9maWxlIHRyZWUuCi0g
ICAgICAgIHNpemVfdCBsYXN0RW5naW5lRnJhbWUgPSBsYXN0SW5UcmFjZTsKLSAgICAgICAgZm9y
ICh1bnNpZ25lZCBjb3VudCA9IDA7IGxhc3RFbmdpbmVGcmFtZSA+IHRyYWNlICYmIGNvdW50IDwg
cmVjdXJzaW9uTGltaXQ7ICsrY291bnQpIHsKLSAgICAgICAgICAgIC0tbGFzdEVuZ2luZUZyYW1l
OwotICAgICAgICAgICAgQVNTRVJUKG1fc2FtcGxlc1tsYXN0RW5naW5lRnJhbWVdLnR5cGUgPT0g
RW5naW5lRnJhbWUpOwotICAgICAgICAgICAgY29uc3QgY2hhciogbmFtZSA9ICI8dW5rbm93bj4i
OwotICAgICAgICAgICAgYXV0byBkZW1hbmdsZWQgPSBTdGFja1RyYWNlOjpkZW1hbmdsZShtX3Nh
bXBsZXNbbGFzdEVuZ2luZUZyYW1lXS5wYyk7Ci0gICAgICAgICAgICBpZiAoZGVtYW5nbGVkKQot
ICAgICAgICAgICAgICAgIG5hbWUgPSBkZW1hbmdsZWQtPmRlbWFuZ2xlZE5hbWUoKSA/IGRlbWFu
Z2xlZC0+ZGVtYW5nbGVkTmFtZSgpIDogZGVtYW5nbGVkLT5tYW5nbGVkTmFtZSgpOwotICAgICAg
ICAgICAgY2FsbGJhY2tzID0gY2FsbGJhY2tzLT5zYW1wbGVDaGlsZChuYW1lKTsKLSAgICAgICAg
ICAgIGlmICh0cnVuY2F0ZVRyYWNlKG5hbWUpKQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICB9Ci0KLSAgICAgICAgLy8gTW92ZSBvbiB0byB0aGUgbmV4dCB0cmFjZS4KLSAgICAgICAg
dHJhY2UgPSBsYXN0SW5UcmFjZSArIDE7Ci0gICAgICAgIEFTU0VSVCh0cmFjZSA8PSBtX3NhbXBs
ZXMuc2l6ZSgpKTsKLSAgICB9Ci0KLSAgICAvLyBPdXRwdXQgdGhlIHByb2ZpbGUgdHJlZS4KLSAg
ICBkYXRhTG9nRigiVG90YWwgc2FtcGxlczogJWxsZFxuIiwgc3RhdGljX2Nhc3Q8bG9uZyBsb25n
Pihwcm9maWxlLmNoaWxkQ291bnQoKSkpOwotICAgIHByb2ZpbGUuZHVtcCgpOwotICAgIAotICAg
IGZvciAoc2l6ZV90IGkgPSAwIDsgaSA8IG1fY2hpbGRyZW4uc2l6ZSgpOyArK2kpCi0gICAgICAg
IG1fY2hpbGRyZW5baV0tPnJlcG9ydCgpOwotCi0gICAgZGF0YUxvZ0YoIjwvQ29kZVByb2ZpbGlu
ZyAlczolZD5cbiIsIG1fZmlsZS5kYXRhKCksIG1fbGluZU51bWJlcik7Ci19Ci0KLX0KSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90b29scy9Db2RlUHJvZmlsZS5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90b29scy9Db2RlUHJvZmlsZS5oCShyZXZpc2lvbiAyNTg5
OTYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvdG9vbHMvQ29kZVByb2ZpbGUuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMSw4OSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEyIEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
Ci0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuIAotICovCi0KLSNwcmFnbWEgb25jZQotCi0jaW5jbHVkZSAiU291cmNlQ29kZS5oIgot
I2luY2x1ZGUgIlRpZXJlZE1NYXBBcnJheS5oIgotI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcu
aD4KLQotbmFtZXNwYWNlIEpTQyB7Ci0KLWNsYXNzIENvZGVQcm9maWxlIHsKLSAgICBXVEZfTUFL
RV9GQVNUX0FMTE9DQVRFRDsKLXB1YmxpYzoKLSAgICBDb2RlUHJvZmlsZShjb25zdCBTb3VyY2VD
b2RlJiBzb3VyY2UsIENvZGVQcm9maWxlKiBwYXJlbnQpCi0gICAgICAgIDogbV9maWxlKFN0cmlu
Zyhzb3VyY2UucHJvdmlkZXIoKS0+dXJsKCkpLnV0ZjgoKSkKLSAgICAgICAgLCBtX2xpbmVOdW1i
ZXIoc291cmNlLmZpcnN0TGluZSgpLm9uZUJhc2VkSW50KCkpCi0gICAgICAgICwgbV9wYXJlbnQo
cGFyZW50KQotICAgIHsKLSAgICAgICAgaWYgKHBhcmVudCkKLSAgICAgICAgICAgIHBhcmVudC0+
YWRkQ2hpbGQoc3RkOjp1bmlxdWVfcHRyPENvZGVQcm9maWxlPih0aGlzKSk7Ci0gICAgfQotCi0g
ICAgdm9pZCBzYW1wbGUodm9pZCogcGMsIHZvaWQqKiBmcmFtZVBvaW50ZXIpOwotICAgIHZvaWQg
cmVwb3J0KCk7Ci0KLSAgICBDb2RlUHJvZmlsZSogcGFyZW50KCkKLSAgICB7Ci0gICAgICAgIHJl
dHVybiBtX3BhcmVudDsKLSAgICB9Ci0gICAgCi0gICAgdm9pZCBhZGRDaGlsZChzdGQ6OnVuaXF1
ZV9wdHI8Q29kZVByb2ZpbGU+IGNoaWxkKQotICAgIHsKLSAgICAgICAgbV9jaGlsZHJlbi5hcHBl
bmQoV1RGTW92ZShjaGlsZCkpOwotICAgIH0KLQotICAgIGVudW0gQ29kZVR5cGUgewotICAgICAg
ICBFbmdpbmVDb2RlLAotICAgICAgICBHbG9iYWxUaHVuaywKLSAgICAgICAgUmVnRXhwQ29kZSwK
LSAgICAgICAgREZHSklULAotICAgICAgICBCYXNlbGluZU9ubHksCi0gICAgICAgIEJhc2VsaW5l
UHJvZmlsZSwKLSAgICAgICAgQmFzZWxpbmVPU1IsCi0gICAgICAgIEVuZ2luZUZyYW1lLAotICAg
ICAgICBOdW1iZXJPZkNvZGVUeXBlcwotICAgIH07Ci0KLXByaXZhdGU6Ci0gICAgc3RydWN0IENv
ZGVSZWNvcmQgewotICAgICAgICBDb2RlUmVjb3JkKHZvaWQqIHBjLCBDb2RlVHlwZSB0eXBlKQot
ICAgICAgICAgICAgOiBwYyhwYykKLSAgICAgICAgICAgICwgdHlwZSh0eXBlKQotICAgICAgICB7
Ci0gICAgICAgIH0KLSAgICAgICAgdm9pZCogcGM7Ci0gICAgICAgIENvZGVUeXBlIHR5cGU7Ci0g
ICAgfTsKLQotICAgIENTdHJpbmcgbV9maWxlOwotICAgIHVuc2lnbmVkIG1fbGluZU51bWJlcjsK
LSAgICBDb2RlUHJvZmlsZSogbV9wYXJlbnQ7Ci0gICAgVmVjdG9yPHN0ZDo6dW5pcXVlX3B0cjxD
b2RlUHJvZmlsZT4+IG1fY2hpbGRyZW47Ci0gICAgVGllcmVkTU1hcEFycmF5PENvZGVSZWNvcmQ+
IG1fc2FtcGxlczsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL3Rvb2xzL0NvZGVQcm9maWxpbmcuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS90b29scy9Db2RlUHJvZmlsaW5nLmNwcAkocmV2aXNpb24gMjU4OTk2KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL3Rvb2xzL0NvZGVQcm9maWxpbmcuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xLDE2OSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEyLTIwMTgg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAot
ICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4gCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIkNvZGVQ
cm9maWxpbmcuaCIKLQotI2luY2x1ZGUgIkNvZGVQcm9maWxlLmgiCi0jaW5jbHVkZSAiTWFjaGlu
ZUNvbnRleHQuaCIKLSNpbmNsdWRlIDx3dGYvTWV0YUFsbG9jYXRvci5oPgotCi0jaWYgSEFWRShT
SUdOQUxfSCkKLSNpbmNsdWRlIDxzaWduYWwuaD4KLSNlbmRpZgotCi0jaWYgSEFWRShNQUNISU5F
X0NPTlRFWFQpCi0jaW5jbHVkZSA8c3lzL3RpbWUuaD4KLSNlbmRpZgotCi1uYW1lc3BhY2UgSlND
IHsKLQotdm9sYXRpbGUgQ29kZVByb2ZpbGUqIENvZGVQcm9maWxpbmc6OnNfcHJvZmlsZVN0YWNr
ID0gMDsKLUNvZGVQcm9maWxpbmc6Ok1vZGUgQ29kZVByb2ZpbGluZzo6c19tb2RlID0gQ29kZVBy
b2ZpbGluZzo6RGlzYWJsZWQ7Ci1XVEY6Ok1ldGFBbGxvY2F0b3JUcmFja2VyKiBDb2RlUHJvZmls
aW5nOjpzX3RyYWNrZXIgPSAwOwotCi1JR05PUkVfV0FSTklOR1NfQkVHSU4oIm1pc3Npbmctbm9y
ZXR1cm4iKQotCi0jaWYgSEFWRShNQUNISU5FX0NPTlRFWFQpCi0vLyBIZWxwZXIgZnVuY3Rpb24g
dG8gc3RhcnQgJiBzdG9wIHRoZSB0aW1lci4KLS8vIFByZXNlbnRseSB3ZSdyZSB1c2luZyB0aGUg
d2FsbC1jbG9jayB0aW1lciwgc2luY2UgdGhpcyBzZWVtcyB0byBnaXZlIHRoZSBiZXN0IHJlc3Vs
dHMuCi1zdGF0aWMgdm9pZCBzZXRQcm9maWxlVGltZXIodW5zaWduZWQgdXNlYykKLXsKLSAgICBp
dGltZXJ2YWwgdGltZXI7Ci0gICAgdGltZXIuaXRfdmFsdWUudHZfc2VjID0gMDsKLSAgICB0aW1l
ci5pdF92YWx1ZS50dl91c2VjID0gdXNlYzsKLSAgICB0aW1lci5pdF9pbnRlcnZhbC50dl9zZWMg
PSAwOwotICAgIHRpbWVyLml0X2ludGVydmFsLnR2X3VzZWMgPSB1c2VjOwotICAgIHNldGl0aW1l
cihJVElNRVJfUkVBTCwgJnRpbWVyLCAwKTsKLX0KLSNlbmRpZgotCi1JR05PUkVfV0FSTklOR1Nf
RU5ECi0KLSNpZiBIQVZFKE1BQ0hJTkVfQ09OVEVYVCkKLXN0YXRpYyB2b2lkIHByb2ZpbGluZ1Rp
bWVyKGludCwgc2lnaW5mb190Kiwgdm9pZCogdWFwKQotewotICAgIFBsYXRmb3JtUmVnaXN0ZXJz
JiBwbGF0Zm9ybVJlZ2lzdGVycyA9IFdURjo6cmVnaXN0ZXJzRnJvbVVDb250ZXh0KHN0YXRpY19j
YXN0PHVjb250ZXh0X3QqPih1YXApKTsKLSAgICBpZiAoYXV0byBpbnN0cnVjdGlvblBvaW50ZXIg
PSBNYWNoaW5lQ29udGV4dDo6aW5zdHJ1Y3Rpb25Qb2ludGVyKHBsYXRmb3JtUmVnaXN0ZXJzKSkg
ewotICAgICAgICBDb2RlUHJvZmlsaW5nOjpzYW1wbGUoCi0gICAgICAgICAgICBpbnN0cnVjdGlv
blBvaW50ZXItPnVudGFnZ2VkRXhlY3V0YWJsZUFkZHJlc3MoKSwKLSAgICAgICAgICAgIHJlaW50
ZXJwcmV0X2Nhc3Q8dm9pZCoqPihNYWNoaW5lQ29udGV4dDo6ZnJhbWVQb2ludGVyKHBsYXRmb3Jt
UmVnaXN0ZXJzKSkpOwotICAgIH0KLX0KLSNlbmRpZgotCi0vLyBDYWxsYmFjayB0cmlnZ2VyZWQg
d2hlbiB0aGUgdGltZXIgaXMgZmlyZWQuCi12b2lkIENvZGVQcm9maWxpbmc6OnNhbXBsZSh2b2lk
KiBwYywgdm9pZCoqIGZyYW1lUG9pbnRlcikKLXsKLSAgICBDb2RlUHJvZmlsZSogcHJvZmlsZVN0
YWNrID0gY29uc3RfY2FzdDxDb2RlUHJvZmlsZSo+KHNfcHJvZmlsZVN0YWNrKTsKLSAgICBpZiAo
cHJvZmlsZVN0YWNrKQotICAgICAgICBwcm9maWxlU3RhY2stPnNhbXBsZShwYywgZnJhbWVQb2lu
dGVyKTsKLX0KLQotdm9pZCBDb2RlUHJvZmlsaW5nOjpub3RpZnlBbGxvY2F0b3IoV1RGOjpNZXRh
QWxsb2NhdG9yKiBhbGxvY2F0b3IpCi17Ci0gICAgLy8gQ2hlY2sgZm9yIEpTQ19DT0RFX1BST0ZJ
TElORy4KLSAgICBjb25zdCBjaGFyKiBjb2RlUHJvZmlsaW5nTW9kZSA9IGdldGVudigiSlNDX0NP
REVfUFJPRklMSU5HIik7Ci0gICAgaWYgKCFjb2RlUHJvZmlsaW5nTW9kZSkKLSAgICAgICAgcmV0
dXJuOwotCi0gICAgLy8gQ2hlY2sgZm9yIGEgdmFsaWQgbW9kZSwgY3VycmVudGx5ICIxIiwgIjIi
LCBvciAiMyIuCi0gICAgaWYgKCFjb2RlUHJvZmlsaW5nTW9kZVswXSB8fCBjb2RlUHJvZmlsaW5n
TW9kZVsxXSkKLSAgICAgICAgcmV0dXJuOwotICAgIHN3aXRjaCAoKmNvZGVQcm9maWxpbmdNb2Rl
KSB7Ci0gICAgY2FzZSAnMSc6Ci0gICAgICAgIHNfbW9kZSA9IEVuYWJsZWQ7Ci0gICAgICAgIGJy
ZWFrOwotICAgIGNhc2UgJzInOgotICAgICAgICBzX21vZGUgPSBWZXJib3NlOwotICAgICAgICBi
cmVhazsKLSAgICBjYXNlICczJzoKLSAgICAgICAgc19tb2RlID0gVmVyeVZlcmJvc2U7Ci0gICAg
ICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBB
U1NFUlQoZW5hYmxlZCgpKTsKLSAgICBBU1NFUlQoIXNfdHJhY2tlcik7Ci0gICAgc190cmFja2Vy
ID0gbmV3IFdURjo6TWV0YUFsbG9jYXRvclRyYWNrZXIoKTsKLSAgICBhbGxvY2F0b3ItPnRyYWNr
QWxsb2NhdGlvbnMoc190cmFja2VyKTsKLX0KLQotdm9pZCogQ29kZVByb2ZpbGluZzo6Z2V0T3du
ZXJVSURGb3JQQyh2b2lkKiBhZGRyZXNzKQotewotICAgIGlmICghc190cmFja2VyKQotICAgICAg
ICByZXR1cm4gMDsKLSAgICBXVEY6Ok1ldGFBbGxvY2F0b3JIYW5kbGUqIGhhbmRsZSA9IHNfdHJh
Y2tlci0+ZmluZChhZGRyZXNzKTsKLSAgICBpZiAoIWhhbmRsZSkKLSAgICAgICAgcmV0dXJuIDA7
Ci0gICAgcmV0dXJuIGhhbmRsZS0+b3duZXJVSUQoKTsKLX0KLQotdm9pZCBDb2RlUHJvZmlsaW5n
OjpiZWdpbihjb25zdCBTb3VyY2VDb2RlJiBzb3VyY2UpCi17Ci0gICAgLy8gUHVzaCBhIG5ldyBD
b2RlUHJvZmlsZSBvbnRvIHRoZSBzdGFjayBmb3IgZWFjaCBzY3JpcHQgZW5jb3VudGVyZWQuCi0g
ICAgQ29kZVByb2ZpbGUqIHByb2ZpbGVTdGFjayA9IGNvbnN0X2Nhc3Q8Q29kZVByb2ZpbGUqPihz
X3Byb2ZpbGVTdGFjayk7Ci0gICAgYm9vbCBhbHJlYWR5UHJvZmlsaW5nID0gcHJvZmlsZVN0YWNr
OwotICAgIHNfcHJvZmlsZVN0YWNrID0gcHJvZmlsZVN0YWNrID0gbmV3IENvZGVQcm9maWxlKHNv
dXJjZSwgcHJvZmlsZVN0YWNrKTsKLQotICAgIC8vIElzIHRoZSBwcm9maWxlciBhbHJlYWR5IHJ1
bm5pbmcgLSBpZiBzbywgdGhlIHRpbWVyIHdpbGwgYWxyZWFkeSBiZSBzZXQgdXAuCi0gICAgaWYg
KGFscmVhZHlQcm9maWxpbmcpCi0gICAgICAgIHJldHVybjsKLQotI2lmIEhBVkUoTUFDSElORV9D
T05URVhUKQotICAgIC8vIFJlZ3NpdGVyIGEgc2lnbmFsIGhhbmRsZXIgJiBpdGltZXIuCi0gICAg
c3RydWN0IHNpZ2FjdGlvbiBhY3Rpb247Ci0gICAgYWN0aW9uLnNhX3NpZ2FjdGlvbiA9IHJlaW50
ZXJwcmV0X2Nhc3Q8dm9pZCAoKikoaW50LCBzaWdpbmZvX3QgKiwgdm9pZCAqKT4ocHJvZmlsaW5n
VGltZXIpOwotICAgIHNpZ2ZpbGxzZXQoJmFjdGlvbi5zYV9tYXNrKTsKLSAgICBhY3Rpb24uc2Ff
ZmxhZ3MgPSBTQV9TSUdJTkZPOwotICAgIHNpZ2FjdGlvbihTSUdBTFJNLCAmYWN0aW9uLCAwKTsK
LSAgICBzZXRQcm9maWxlVGltZXIoMTAwKTsKLSNlbmRpZgotfQotCi12b2lkIENvZGVQcm9maWxp
bmc6OmVuZCgpCi17Ci0gICAgLy8gUG9wIHRoZSBjdXJyZW50IHByb2ZpbGVyIG9mZiB0aGUgc3Rh
Y2suCi0gICAgQ29kZVByb2ZpbGUqIGN1cnJlbnQgPSBjb25zdF9jYXN0PENvZGVQcm9maWxlKj4o
c19wcm9maWxlU3RhY2spOwotICAgIEFTU0VSVChjdXJyZW50KTsKLSAgICBzX3Byb2ZpbGVTdGFj
ayA9IGN1cnJlbnQtPnBhcmVudCgpOwotCi0gICAgLy8gSXMgdGhpcyB0aGUgb3V0ZXJtb3N0IHNj
cmlwdCBiZWluZyBwcm9maWxlZD8gLSBpZiBub3QsIGp1c3QgcmV0dXJuLgotICAgIC8vIFdlIHBl
cmZvcm0gYWxsIG91dHB1dCBvZiBwcm9maWxlcyByZWN1cnNpdmVseSBmcm9tIHRoZSBvdXRlcm1v
c3Qgc2NyaXB0LAotICAgIC8vIHRvIG1pbmltaXplIHByb2ZpbGluZyBvdmVyaGVhZCBmcm9tIHNr
ZXdpbmcgcmVzdWx0cy4KLSAgICBpZiAoc19wcm9maWxlU3RhY2spCi0gICAgICAgIHJldHVybjsK
LQotI2lmIEhBVkUoTUFDSElORV9DT05URVhUKQotICAgIC8vIFN0b3AgcHJvZmlsaW5nCi0gICAg
c2V0UHJvZmlsZVRpbWVyKDApOwotI2VuZGlmCi0KLSAgICBjdXJyZW50LT5yZXBvcnQoKTsKLSAg
ICBkZWxldGUgY3VycmVudDsKLX0KLQotfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3Rv
b2xzL0NvZGVQcm9maWxpbmcuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
dG9vbHMvQ29kZVByb2ZpbGluZy5oCShyZXZpc2lvbiAyNTg5OTYpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvdG9vbHMvQ29kZVByb2ZpbGluZy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDgxICsw
LDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0g
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IK
LSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQotI3By
YWdtYSBvbmNlCi0KLW5hbWVzcGFjZSBXVEYgewotCi1jbGFzcyBNZXRhQWxsb2NhdG9yOwotY2xh
c3MgTWV0YUFsbG9jYXRvclRyYWNrZXI7Ci0KLX0KLQotbmFtZXNwYWNlIEpTQyB7Ci0KLWNsYXNz
IENvZGVQcm9maWxlOwotY2xhc3MgU291cmNlQ29kZTsKLQotY2xhc3MgQ29kZVByb2ZpbGluZyB7
Ci0gICAgZW51bSBNb2RlIHsKLSAgICAgICAgRGlzYWJsZWQsCi0gICAgICAgIEVuYWJsZWQsCi0g
ICAgICAgIFZlcmJvc2UsCi0gICAgICAgIFZlcnlWZXJib3NlCi0gICAgfTsKLQotcHVibGljOgot
ICAgIENvZGVQcm9maWxpbmcoY29uc3QgU291cmNlQ29kZSYgc291cmNlKQotICAgICAgICA6IG1f
YWN0aXZlKGVuYWJsZWQoKSkKLSAgICB7Ci0gICAgICAgIGlmIChtX2FjdGl2ZSkKLSAgICAgICAg
ICAgIGJlZ2luKHNvdXJjZSk7Ci0gICAgfQotCi0gICAgfkNvZGVQcm9maWxpbmcoKQotICAgIHsK
LSAgICAgICAgaWYgKG1fYWN0aXZlKQotICAgICAgICAgICAgZW5kKCk7Ci0gICAgfQotCi0gICAg
c3RhdGljIGJvb2wgZW5hYmxlZCgpIHsgcmV0dXJuIHNfbW9kZSAhPSBEaXNhYmxlZDsgfQotICAg
IHN0YXRpYyBib29sIGJlVmVyYm9zZSgpIHsgcmV0dXJuIHNfbW9kZSA+PSBWZXJib3NlOyB9Ci0g
ICAgc3RhdGljIGJvb2wgYmVWZXJ5VmVyYm9zZSgpIHsgcmV0dXJuIHNfbW9kZSA+PSBWZXJ5VmVy
Ym9zZTsgfQotCi0gICAgc3RhdGljIHZvaWQgbm90aWZ5QWxsb2NhdG9yKFdURjo6TWV0YUFsbG9j
YXRvciopOwotICAgIHN0YXRpYyB2b2lkKiBnZXRPd25lclVJREZvclBDKHZvaWQqKTsKLSAgICBz
dGF0aWMgdm9pZCBzYW1wbGUodm9pZCogcGMsIHZvaWQqKiBmcmFtZVBvaW50ZXIpOwotCi1wcml2
YXRlOgotICAgIHZvaWQgYmVnaW4oY29uc3QgU291cmNlQ29kZSYpOwotICAgIHZvaWQgZW5kKCk7
Ci0KLSAgICBib29sIG1fYWN0aXZlOwotCi0gICAgc3RhdGljIE1vZGUgc19tb2RlOwotICAgIHN0
YXRpYyBXVEY6Ok1ldGFBbGxvY2F0b3JUcmFja2VyKiBzX3RyYWNrZXI7Ci0gICAgc3RhdGljIHZv
bGF0aWxlIENvZGVQcm9maWxlKiBzX3Byb2ZpbGVTdGFjazsKLX07Ci0KLX0gLy8gbmFtZXNwYWNl
IEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUJCUVBsYW4uY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21CQlFQbGFuLmNwcAko
cmV2aXNpb24gMjU4OTk2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUJCUVBs
YW4uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMzIsMTMgKzEzMiw5IEBAIHZvaWQgQkJRUGxhbjo6
d29yayhDb21waWxhdGlvbkVmZm9ydCBlZmYKICAgICAgICAgLy8gd2lsbCB1cGRhdGUuIEl0J3Mg
YWxzbyBvayBpZiB0aGV5IHB1Ymxpc2ggdGhlaXIgY29kZSBiZWZvcmUgd2UgcmVzZXQgdGhlIGlu
c3RydWN0aW9uIGNhY2hlcyBiZWNhdXNlIGFmdGVyIHdlIHJlbGVhc2UKICAgICAgICAgLy8gdGhl
IGxvY2sgb3VyIGNvZGUgaXMgcmVhZHkgdG8gYmUgcHVibGlzaGVkIHRvby4KICAgICAgICAgTG9j
a0hvbGRlciBob2xkZXIobV9jb2RlQmxvY2stPm1fbG9jayk7CisKICAgICAgICAgbV9jb2RlQmxv
Y2stPm1fYmJxQ2FsbGVlc1ttX2Z1bmN0aW9uSW5kZXhdID0gY2FsbGVlLmNvcHlSZWYoKTsKLSAg
ICAgICAgewotICAgICAgICAgICAgTExJbnRDYWxsZWUmIGxsaW50Q2FsbGVlID0gbV9jb2RlQmxv
Y2stPm1fbGxpbnRDYWxsZWVzLT5hdChtX2Z1bmN0aW9uSW5kZXgpLmdldCgpOwotICAgICAgICAg
ICAgYXV0byBsb2NrZXIgPSBob2xkTG9jayhsbGludENhbGxlZS50aWVyVXBDb3VudGVyKCkubV9s
b2NrKTsKLSAgICAgICAgICAgIGxsaW50Q2FsbGVlLnNldFJlcGxhY2VtZW50KGNhbGxlZS5jb3B5
UmVmKCkpOwotICAgICAgICAgICAgbGxpbnRDYWxsZWUudGllclVwQ291bnRlcigpLm1fY29tcGls
YXRpb25TdGF0dXMgPSBMTEludFRpZXJVcENvdW50ZXI6OkNvbXBpbGF0aW9uU3RhdHVzOjpDb21w
aWxlZDsKLSAgICAgICAgfQorCiAgICAgICAgIGZvciAoYXV0byYgY2FsbCA6IGNhbGxlZS0+d2Fz
bVRvV2FzbUNhbGxzaXRlcygpKSB7CiAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8
V2FzbUVudHJ5UHRyVGFnPiBlbnRyeXBvaW50OwogICAgICAgICAgICAgaWYgKGNhbGwuZnVuY3Rp
b25JbmRleFNwYWNlIDwgbV9tb2R1bGVJbmZvcm1hdGlvbi0+aW1wb3J0RnVuY3Rpb25Db3VudCgp
KQpAQCAtMTQ4LDQ5ICsxNDQsMTkgQEAgdm9pZCBCQlFQbGFuOjp3b3JrKENvbXBpbGF0aW9uRWZm
b3J0IGVmZgogCiAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6cmVwYXRjaE5lYXJDYWxsKGNh
bGwuY2FsbExvY2F0aW9uLCBDb2RlTG9jYXRpb25MYWJlbDxXYXNtRW50cnlQdHJUYWc+KGVudHJ5
cG9pbnQpKTsKICAgICAgICAgfQotICAgIH0KIAotICAgIC8vIEl0J3MgaW1wb3J0YW50IHRvIG1h
a2Ugc3VyZSB3ZSBkbyB0aGlzIGJlZm9yZSB3ZSBtYWtlIGFueSBvZiB0aGUgY29kZSB3ZSBqdXN0
IGNvbXBpbGVkIHZpc2libGUuIElmIHdlIGRpZG4ndCwgd2UgY291bGQgZW5kIHVwCi0gICAgLy8g
d2hlcmUgd2UgYXJlIHRpZXJpbmcgdXAgc29tZSBmdW5jdGlvbiBBIHRvIEEnIGFuZCB3ZSByZXBh
dGNoIHNvbWUgZnVuY3Rpb24gQiB0byBjYWxsIEEnIGluc3RlYWQgb2YgQS4gQW5vdGhlciBDUFUg
Y291bGQgc2VlCi0gICAgLy8gdGhlIHVwZGF0ZXMgdG8gQiBidXQgc3RpbGwgbm90IGhhdmUgcmVz
ZXQgaXRzIGNhY2hlIG9mIEEnLCB3aGljaCB3b3VsZCBsZWFkIHRvIGFsbCBraW5kcyBvZiBiYWRu
ZXNzLgotICAgIHJlc2V0SW5zdHJ1Y3Rpb25DYWNoZU9uQWxsVGhyZWFkcygpOwotICAgIFdURjo6
c3RvcmVTdG9yZUZlbmNlKCk7IC8vIFRoaXMgcHJvYmFibHkgaXNuJ3QgbmVjZXNzYXJ5IGJ1dCBp
dCdzIGdvb2QgdG8gYmUgcGFyYW5vaWQuCi0KLSAgICBtX2NvZGVCbG9jay0+bV93YXNtSW5kaXJl
Y3RDYWxsRW50cnlQb2ludHNbbV9mdW5jdGlvbkluZGV4XSA9IGVudHJ5cG9pbnQ7Ci0gICAgewot
ICAgICAgICBMb2NrSG9sZGVyIGhvbGRlcihtX2NvZGVCbG9jay0+bV9sb2NrKTsKKyAgICAgICAg
UGxhbjo6dXBkYXRlQ2FsbFNpdGVzVG9DYWxsVXMoKm1fY29kZUJsb2NrLCBDb2RlTG9jYXRpb25M
YWJlbDxXYXNtRW50cnlQdHJUYWc+KGVudHJ5cG9pbnQpLCBtX2Z1bmN0aW9uSW5kZXgsIGZ1bmN0
aW9uSW5kZXhTcGFjZSk7CiAKLSAgICAgICAgYXV0byByZXBhdGNoQ2FsbHMgPSBbJl0gKGNvbnN0
IFZlY3RvcjxVbmxpbmtlZFdhc21Ub1dhc21DYWxsPiYgY2FsbHNpdGVzKSB7Ci0gICAgICAgICAg
ICBmb3IgKGF1dG8mIGNhbGwgOiBjYWxsc2l0ZXMpIHsKLSAgICAgICAgICAgICAgICBkYXRhTG9n
TG5JZihXYXNtQkJRUGxhbkludGVybmFsOjp2ZXJib3NlLCAiQ29uc2lkZXJpbmcgcmVwYXRjaGlu
ZyBjYWxsIGF0OiAiLCBSYXdQb2ludGVyKGNhbGwuY2FsbExvY2F0aW9uLmRhdGFMb2NhdGlvbigp
KSwgIiB0aGF0IHRhcmdldHMgIiwgY2FsbC5mdW5jdGlvbkluZGV4U3BhY2UpOwotICAgICAgICAg
ICAgICAgIGlmIChjYWxsLmZ1bmN0aW9uSW5kZXhTcGFjZSA9PSBmdW5jdGlvbkluZGV4U3BhY2Up
IHsKLSAgICAgICAgICAgICAgICAgICAgZGF0YUxvZ0xuSWYoV2FzbUJCUVBsYW5JbnRlcm5hbDo6
dmVyYm9zZSwgIlJlcGF0Y2hpbmcgY2FsbCBhdDogIiwgUmF3UG9pbnRlcihjYWxsLmNhbGxMb2Nh
dGlvbi5kYXRhTG9jYXRpb24oKSksICIgdG8gIiwgUmF3UG9pbnRlcihlbnRyeXBvaW50LmV4ZWN1
dGFibGVBZGRyZXNzKCkpKTsKLSAgICAgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OnJl
cGF0Y2hOZWFyQ2FsbChjYWxsLmNhbGxMb2NhdGlvbiwgQ29kZUxvY2F0aW9uTGFiZWw8V2FzbUVu
dHJ5UHRyVGFnPihlbnRyeXBvaW50KSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAg
fQotICAgICAgICB9OwotCi0gICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX2NvZGVC
bG9jay0+bV93YXNtVG9XYXNtQ2FsbHNpdGVzLnNpemUoKTsgKytpKSB7Ci0gICAgICAgICAgICBy
ZXBhdGNoQ2FsbHMobV9jb2RlQmxvY2stPm1fd2FzbVRvV2FzbUNhbGxzaXRlc1tpXSk7Ci0gICAg
ICAgICAgICBpZiAobV9jb2RlQmxvY2stPm1fbGxpbnRDYWxsZWVzKSB7Ci0gICAgICAgICAgICAg
ICAgTExJbnRDYWxsZWUmIGxsaW50Q2FsbGVlID0gbV9jb2RlQmxvY2stPm1fbGxpbnRDYWxsZWVz
LT5hdChpKS5nZXQoKTsKLSAgICAgICAgICAgICAgICBpZiAoSklUQ2FsbGVlKiByZXBsYWNlbWVu
dENhbGxlZSA9IGxsaW50Q2FsbGVlLnJlcGxhY2VtZW50KCkpCi0gICAgICAgICAgICAgICAgICAg
IHJlcGF0Y2hDYWxscyhyZXBsYWNlbWVudENhbGxlZS0+d2FzbVRvV2FzbUNhbGxzaXRlcygpKTsK
LSAgICAgICAgICAgICAgICBpZiAoT01HRm9yT1NSRW50cnlDYWxsZWUqIG9zckVudHJ5Q2FsbGVl
ID0gbGxpbnRDYWxsZWUub3NyRW50cnlDYWxsZWUoKSkKLSAgICAgICAgICAgICAgICAgICAgcmVw
YXRjaENhbGxzKG9zckVudHJ5Q2FsbGVlLT53YXNtVG9XYXNtQ2FsbHNpdGVzKCkpOwotICAgICAg
ICAgICAgfQotICAgICAgICAgICAgaWYgKEJCUUNhbGxlZSogYmJxQ2FsbGVlID0gbV9jb2RlQmxv
Y2stPm1fYmJxQ2FsbGVlc1tpXS5nZXQoKSkgewotICAgICAgICAgICAgICAgIGlmIChPTUdDYWxs
ZWUqIHJlcGxhY2VtZW50Q2FsbGVlID0gYmJxQ2FsbGVlLT5yZXBsYWNlbWVudCgpKQotICAgICAg
ICAgICAgICAgICAgICByZXBhdGNoQ2FsbHMocmVwbGFjZW1lbnRDYWxsZWUtPndhc21Ub1dhc21D
YWxsc2l0ZXMoKSk7Ci0gICAgICAgICAgICAgICAgaWYgKE9NR0Zvck9TUkVudHJ5Q2FsbGVlKiBv
c3JFbnRyeUNhbGxlZSA9IGJicUNhbGxlZS0+b3NyRW50cnlDYWxsZWUoKSkKLSAgICAgICAgICAg
ICAgICAgICAgcmVwYXRjaENhbGxzKG9zckVudHJ5Q2FsbGVlLT53YXNtVG9XYXNtQ2FsbHNpdGVz
KCkpOwotICAgICAgICAgICAgfQorICAgICAgICB7CisgICAgICAgICAgICBMTEludENhbGxlZSYg
bGxpbnRDYWxsZWUgPSBtX2NvZGVCbG9jay0+bV9sbGludENhbGxlZXMtPmF0KG1fZnVuY3Rpb25J
bmRleCkuZ2V0KCk7CisgICAgICAgICAgICBhdXRvIGxvY2tlciA9IGhvbGRMb2NrKGxsaW50Q2Fs
bGVlLnRpZXJVcENvdW50ZXIoKS5tX2xvY2spOworICAgICAgICAgICAgbGxpbnRDYWxsZWUuc2V0
UmVwbGFjZW1lbnQoY2FsbGVlLmNvcHlSZWYoKSk7CisgICAgICAgICAgICBsbGludENhbGxlZS50
aWVyVXBDb3VudGVyKCkubV9jb21waWxhdGlvblN0YXR1cyA9IExMSW50VGllclVwQ291bnRlcjo6
Q29tcGlsYXRpb25TdGF0dXM6OkNvbXBpbGVkOwogICAgICAgICB9CiAgICAgfQogCiAgICAgZGF0
YUxvZ0xuSWYoV2FzbUJCUVBsYW5JbnRlcm5hbDo6dmVyYm9zZSwgIkZpbmlzaGVkIEJCUSAiLCBt
X2Z1bmN0aW9uSW5kZXgpOwogCi0KICAgICBhdXRvIGxvY2tlciA9IGhvbGRMb2NrKG1fbG9jayk7
CiAgICAgbW92ZVRvU3RhdGUoU3RhdGU6OkNvbXBsZXRlZCk7CiAgICAgcnVuQ29tcGxldGlvblRh
c2tzKGxvY2tlcik7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQ29kZUJs
b2NrLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUNvZGVC
bG9jay5oCShyZXZpc2lvbiAyNTg5OTYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9X
YXNtQ29kZUJsb2NrLmgJKHdvcmtpbmcgY29weSkKQEAgLTEyNCw2ICsxMjQsNyBAQCBwdWJsaWM6
CiAKICAgICB+Q29kZUJsb2NrKCk7CiBwcml2YXRlOgorICAgIGZyaWVuZCBjbGFzcyBQbGFuOwog
ICAgIGZyaWVuZCBjbGFzcyBCQlFQbGFuOwogICAgIGZyaWVuZCBjbGFzcyBPTUdQbGFuOwogICAg
IGZyaWVuZCBjbGFzcyBPTUdGb3JPU1JFbnRyeVBsYW47CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvd2FzbS9XYXNtT01HRm9yT1NSRW50cnlQbGFuLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtT01HRm9yT1NSRW50cnlQbGFuLmNwcAkocmV2aXNp
b24gMjU4OTk2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU9NR0Zvck9TUkVu
dHJ5UGxhbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEwMywxMiArMTAzLDEwIEBAIHZvaWQgT01H
Rm9yT1NSRW50cnlQbGFuOjp3b3JrKENvbXBpbGF0aW8KIAogICAgIG9tZ0VudHJ5cG9pbnQuY2Fs
bGVlU2F2ZVJlZ2lzdGVycyA9IFdURk1vdmUocGFyc2VBbmRDb21waWxlUmVzdWx0LnZhbHVlKCkt
PmVudHJ5cG9pbnQuY2FsbGVlU2F2ZVJlZ2lzdGVycyk7CiAKLSAgICBNYWNyb0Fzc2VtYmxlckNv
ZGVQdHI8V2FzbUVudHJ5UHRyVGFnPiBlbnRyeXBvaW50OwogICAgIEFTU0VSVChtX2NvZGVCbG9j
ay5wdHIoKSA9PSBtX21vZHVsZS0+Y29kZUJsb2NrRm9yKG1vZGUoKSkpOwogICAgIFJlZjxPTUdG
b3JPU1JFbnRyeUNhbGxlZT4gY2FsbGVlID0gT01HRm9yT1NSRW50cnlDYWxsZWU6OmNyZWF0ZShX
VEZNb3ZlKG9tZ0VudHJ5cG9pbnQpLCBmdW5jdGlvbkluZGV4U3BhY2UsIG1fbW9kdWxlSW5mb3Jt
YXRpb24tPm5hbWVTZWN0aW9uLT5nZXQoZnVuY3Rpb25JbmRleFNwYWNlKSwgb3NyRW50cnlTY3Jh
dGNoQnVmZmVyU2l6ZSwgbV9sb29wSW5kZXgsIFdURk1vdmUodW5saW5rZWRDYWxscykpOwogICAg
IHsKICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OnJlcGF0Y2hQb2ludGVyKHBhcnNlQW5kQ29tcGls
ZVJlc3VsdC52YWx1ZSgpLT5jYWxsZWVNb3ZlTG9jYXRpb24sIENhbGxlZUJpdHM6OmJveFdhc20o
Y2FsbGVlLnB0cigpKSk7Ci0gICAgICAgIGVudHJ5cG9pbnQgPSBjYWxsZWUtPmVudHJ5cG9pbnQo
KTsKIAogICAgICAgICBhdXRvIGxvY2tlciA9IGhvbGRMb2NrKG1fY29kZUJsb2NrLT5tX2xvY2sp
OwogICAgICAgICBmb3IgKGF1dG8mIGNhbGwgOiBjYWxsZWUtPndhc21Ub1dhc21DYWxsc2l0ZXMo
KSkgewpAQCAtMTIwLDExICsxMTgsMTAgQEAgdm9pZCBPTUdGb3JPU1JFbnRyeVBsYW46Ondvcmso
Q29tcGlsYXRpbwogCiAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6cmVwYXRjaE5lYXJDYWxs
KGNhbGwuY2FsbExvY2F0aW9uLCBDb2RlTG9jYXRpb25MYWJlbDxXYXNtRW50cnlQdHJUYWc+KGVu
dHJ5cG9pbnQpKTsKICAgICAgICAgfQotICAgIH0KLSAgICByZXNldEluc3RydWN0aW9uQ2FjaGVP
bkFsbFRocmVhZHMoKTsKLSAgICBXVEY6OnN0b3JlU3RvcmVGZW5jZSgpOwotICAgIHsKLSAgICAg
ICAgYXV0byBsb2NrZXIgPSBob2xkTG9jayhtX2NvZGVCbG9jay0+bV9sb2NrKTsKKworICAgICAg
ICByZXNldEluc3RydWN0aW9uQ2FjaGVPbkFsbFRocmVhZHMoKTsKKyAgICAgICAgV1RGOjpzdG9y
ZVN0b3JlRmVuY2UoKTsKKwogICAgICAgICB7CiAgICAgICAgICAgICBzd2l0Y2ggKG1fY2FsbGVl
LT5jb21waWxhdGlvbk1vZGUoKSkgewogICAgICAgICAgICAgY2FzZSBDb21waWxhdGlvbk1vZGU6
OkxMSW50TW9kZTogewpAQCAtMTQ2LDE5ICsxNDMsNiBAQCB2b2lkIE9NR0Zvck9TUkVudHJ5UGxh
bjo6d29yayhDb21waWxhdGlvCiAgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JF
QUNIRUQoKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQotICAgICAgICBXVEY6OnN0b3JlU3Rv
cmVGZW5jZSgpOwotICAgICAgICAvLyBJdCBpcyBwb3NzaWJsZSB0aGF0IGEgbmV3IE9NRyBjYWxs
ZWUgaXMgYWRkZWQgd2hpbGUgd2UgcmVsZWFzZSBtX2NvZGVCbG9jay0+bG9jay4KLSAgICAgICAg
Ly8gVW50aWwgd2UgYWRkIE9NR0Zvck9TUkVudHJ5IGNhbGxlZSB0byBCQlFDYWxsZWUncyBtX29z
ckVudHJ5Q2FsbGVlLCB0aGlzIG5ldyBPTUcgZnVuY3Rpb24gbGlua2luZyBkb2VzIG5vdCBoYXBw
ZW4gZm9yIHRoaXMgT01HRm9yT1NSRW50cnkgY2FsbGVlLgotICAgICAgICAvLyBXZSByZS1saW5r
IHRoaXMgT01HRm9yT1NSRW50cnkgY2FsbGVlIGFnYWluIG5vdCB0byBtaXNzIHRoYXQgY2hhbmNl
LgotICAgICAgICBmb3IgKGF1dG8mIGNhbGwgOiBjYWxsZWUtPndhc21Ub1dhc21DYWxsc2l0ZXMo
KSkgewotICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPFdhc21FbnRyeVB0clRhZz4g
ZW50cnlwb2ludDsKLSAgICAgICAgICAgIGlmIChjYWxsLmZ1bmN0aW9uSW5kZXhTcGFjZSA8IG1f
bW9kdWxlLT5tb2R1bGVJbmZvcm1hdGlvbigpLmltcG9ydEZ1bmN0aW9uQ291bnQoKSkKLSAgICAg
ICAgICAgICAgICBlbnRyeXBvaW50ID0gbV9jb2RlQmxvY2stPm1fd2FzbVRvV2FzbUV4aXRTdHVi
c1tjYWxsLmZ1bmN0aW9uSW5kZXhTcGFjZV0uY29kZSgpOwotICAgICAgICAgICAgZWxzZQotICAg
ICAgICAgICAgICAgIGVudHJ5cG9pbnQgPSBtX2NvZGVCbG9jay0+d2FzbUVudHJ5cG9pbnRDYWxs
ZWVGcm9tRnVuY3Rpb25JbmRleFNwYWNlKGNhbGwuZnVuY3Rpb25JbmRleFNwYWNlKS5lbnRyeXBv
aW50KCkucmV0YWdnZWQ8V2FzbUVudHJ5UHRyVGFnPigpOwotCi0gICAgICAgICAgICBNYWNyb0Fz
c2VtYmxlcjo6cmVwYXRjaE5lYXJDYWxsKGNhbGwuY2FsbExvY2F0aW9uLCBDb2RlTG9jYXRpb25M
YWJlbDxXYXNtRW50cnlQdHJUYWc+KGVudHJ5cG9pbnQpKTsKLSAgICAgICAgfQogICAgIH0KICAg
ICBkYXRhTG9nTG5JZihXYXNtT01HRm9yT1NSRW50cnlQbGFuSW50ZXJuYWw6OnZlcmJvc2UsICJG
aW5pc2hlZCBPTUdGb3JPU1JFbnRyeSAiLCBtX2Z1bmN0aW9uSW5kZXgpOwogICAgIGNvbXBsZXRl
KGhvbGRMb2NrKG1fbG9jaykpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2Fz
bU9NR1BsYW4uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dh
c21PTUdQbGFuLmNwcAkocmV2aXNpb24gMjU4OTk2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L3dhc20vV2FzbU9NR1BsYW4uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMTQsMjAgKzExNCw5IEBA
IHZvaWQgT01HUGxhbjo6d29yayhDb21waWxhdGlvbkVmZm9ydCkKICAgICAgICAgLy8gd2lsbCB1
cGRhdGUuIEl0J3MgYWxzbyBvayBpZiB0aGV5IHB1Ymxpc2ggdGhlaXIgY29kZSBiZWZvcmUgd2Ug
cmVzZXQgdGhlIGluc3RydWN0aW9uIGNhY2hlcyBiZWNhdXNlIGFmdGVyIHdlIHJlbGVhc2UKICAg
ICAgICAgLy8gdGhlIGxvY2sgb3VyIGNvZGUgaXMgcmVhZHkgdG8gYmUgcHVibGlzaGVkIHRvby4K
ICAgICAgICAgTG9ja0hvbGRlciBob2xkZXIobV9jb2RlQmxvY2stPm1fbG9jayk7CisKICAgICAg
ICAgbV9jb2RlQmxvY2stPm1fb21nQ2FsbGVlc1ttX2Z1bmN0aW9uSW5kZXhdID0gY2FsbGVlLmNv
cHlSZWYoKTsKLSAgICAgICAgewotICAgICAgICAgICAgaWYgKEJCUUNhbGxlZSogYmJxQ2FsbGVl
ID0gbV9jb2RlQmxvY2stPm1fYmJxQ2FsbGVlc1ttX2Z1bmN0aW9uSW5kZXhdLmdldCgpKSB7Ci0g
ICAgICAgICAgICAgICAgYXV0byBsb2NrZXIgPSBob2xkTG9jayhiYnFDYWxsZWUtPnRpZXJVcENv
dW50KCktPmdldExvY2soKSk7Ci0gICAgICAgICAgICAgICAgYmJxQ2FsbGVlLT5zZXRSZXBsYWNl
bWVudChjYWxsZWUuY29weVJlZigpKTsKLSAgICAgICAgICAgICAgICBiYnFDYWxsZWUtPnRpZXJV
cENvdW50KCktPm1fY29tcGlsYXRpb25TdGF0dXNGb3JPTUcgPSBUaWVyVXBDb3VudDo6Q29tcGls
YXRpb25TdGF0dXM6OkNvbXBpbGVkOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKG1f
Y29kZUJsb2NrLT5tX2xsaW50Q2FsbGVlcykgewotICAgICAgICAgICAgICAgIExMSW50Q2FsbGVl
JiBsbGludENhbGxlZSA9IG1fY29kZUJsb2NrLT5tX2xsaW50Q2FsbGVlcy0+YXQobV9mdW5jdGlv
bkluZGV4KS5nZXQoKTsKLSAgICAgICAgICAgICAgICBhdXRvIGxvY2tlciA9IGhvbGRMb2NrKGxs
aW50Q2FsbGVlLnRpZXJVcENvdW50ZXIoKS5tX2xvY2spOwotICAgICAgICAgICAgICAgIGxsaW50
Q2FsbGVlLnNldFJlcGxhY2VtZW50KGNhbGxlZS5jb3B5UmVmKCkpOwotICAgICAgICAgICAgICAg
IGxsaW50Q2FsbGVlLnRpZXJVcENvdW50ZXIoKS5tX2NvbXBpbGF0aW9uU3RhdHVzID0gTExJbnRU
aWVyVXBDb3VudGVyOjpDb21waWxhdGlvblN0YXR1czo6Q29tcGlsZWQ7Ci0gICAgICAgICAgICB9
Ci0gICAgICAgIH0KKwogICAgICAgICBmb3IgKGF1dG8mIGNhbGwgOiBjYWxsZWUtPndhc21Ub1dh
c21DYWxsc2l0ZXMoKSkgewogICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPFdhc21F
bnRyeVB0clRhZz4gZW50cnlwb2ludDsKICAgICAgICAgICAgIGlmIChjYWxsLmZ1bmN0aW9uSW5k
ZXhTcGFjZSA8IG1fbW9kdWxlLT5tb2R1bGVJbmZvcm1hdGlvbigpLmltcG9ydEZ1bmN0aW9uQ291
bnQoKSkKQEAgLTEzNyw0MiArMTI2LDIwIEBAIHZvaWQgT01HUGxhbjo6d29yayhDb21waWxhdGlv
bkVmZm9ydCkKIAogICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OnJlcGF0Y2hOZWFyQ2FsbChj
YWxsLmNhbGxMb2NhdGlvbiwgQ29kZUxvY2F0aW9uTGFiZWw8V2FzbUVudHJ5UHRyVGFnPihlbnRy
eXBvaW50KSk7CiAgICAgICAgIH0KLSAgICB9Ci0KLSAgICAvLyBJdCdzIGltcG9ydGFudCB0byBt
YWtlIHN1cmUgd2UgZG8gdGhpcyBiZWZvcmUgd2UgbWFrZSBhbnkgb2YgdGhlIGNvZGUgd2UganVz
dCBjb21waWxlZCB2aXNpYmxlLiBJZiB3ZSBkaWRuJ3QsIHdlIGNvdWxkIGVuZCB1cAotICAgIC8v
IHdoZXJlIHdlIGFyZSB0aWVyaW5nIHVwIHNvbWUgZnVuY3Rpb24gQSB0byBBJyBhbmQgd2UgcmVw
YXRjaCBzb21lIGZ1bmN0aW9uIEIgdG8gY2FsbCBBJyBpbnN0ZWFkIG9mIEEuIEFub3RoZXIgQ1BV
IGNvdWxkIHNlZQotICAgIC8vIHRoZSB1cGRhdGVzIHRvIEIgYnV0IHN0aWxsIG5vdCBoYXZlIHJl
c2V0IGl0cyBjYWNoZSBvZiBBJywgd2hpY2ggd291bGQgbGVhZCB0byBhbGwga2luZHMgb2YgYmFk
bmVzcy4KLSAgICByZXNldEluc3RydWN0aW9uQ2FjaGVPbkFsbFRocmVhZHMoKTsKLSAgICBXVEY6
OnN0b3JlU3RvcmVGZW5jZSgpOyAvLyBUaGlzIHByb2JhYmx5IGlzbid0IG5lY2Vzc2FyeSBidXQg
aXQncyBnb29kIHRvIGJlIHBhcmFub2lkLgogCi0gICAgbV9jb2RlQmxvY2stPm1fd2FzbUluZGly
ZWN0Q2FsbEVudHJ5UG9pbnRzW21fZnVuY3Rpb25JbmRleF0gPSBlbnRyeXBvaW50OwotICAgIHsK
LSAgICAgICAgTG9ja0hvbGRlciBob2xkZXIobV9jb2RlQmxvY2stPm1fbG9jayk7CisgICAgICAg
IFBsYW46OnVwZGF0ZUNhbGxTaXRlc1RvQ2FsbFVzKG1fY29kZUJsb2NrLCBDb2RlTG9jYXRpb25M
YWJlbDxXYXNtRW50cnlQdHJUYWc+KGVudHJ5cG9pbnQpLCBtX2Z1bmN0aW9uSW5kZXgsIGZ1bmN0
aW9uSW5kZXhTcGFjZSk7CiAKLSAgICAgICAgYXV0byByZXBhdGNoQ2FsbHMgPSBbJl0gKGNvbnN0
IFZlY3RvcjxVbmxpbmtlZFdhc21Ub1dhc21DYWxsPiYgY2FsbHNpdGVzKSB7Ci0gICAgICAgICAg
ICBmb3IgKGF1dG8mIGNhbGwgOiBjYWxsc2l0ZXMpIHsKLSAgICAgICAgICAgICAgICBkYXRhTG9n
TG5JZihXYXNtT01HUGxhbkludGVybmFsOjp2ZXJib3NlLCAiQ29uc2lkZXJpbmcgcmVwYXRjaGlu
ZyBjYWxsIGF0OiAiLCBSYXdQb2ludGVyKGNhbGwuY2FsbExvY2F0aW9uLmRhdGFMb2NhdGlvbigp
KSwgIiB0aGF0IHRhcmdldHMgIiwgY2FsbC5mdW5jdGlvbkluZGV4U3BhY2UpOwotICAgICAgICAg
ICAgICAgIGlmIChjYWxsLmZ1bmN0aW9uSW5kZXhTcGFjZSA9PSBmdW5jdGlvbkluZGV4U3BhY2Up
IHsKLSAgICAgICAgICAgICAgICAgICAgZGF0YUxvZ0xuSWYoV2FzbU9NR1BsYW5JbnRlcm5hbDo6
dmVyYm9zZSwgIlJlcGF0Y2hpbmcgY2FsbCBhdDogIiwgUmF3UG9pbnRlcihjYWxsLmNhbGxMb2Nh
dGlvbi5kYXRhTG9jYXRpb24oKSksICIgdG8gIiwgUmF3UG9pbnRlcihlbnRyeXBvaW50LmV4ZWN1
dGFibGVBZGRyZXNzKCkpKTsKLSAgICAgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OnJl
cGF0Y2hOZWFyQ2FsbChjYWxsLmNhbGxMb2NhdGlvbiwgQ29kZUxvY2F0aW9uTGFiZWw8V2FzbUVu
dHJ5UHRyVGFnPihlbnRyeXBvaW50KSk7Ci0gICAgICAgICAgICAgICAgfQorICAgICAgICB7Cisg
ICAgICAgICAgICBpZiAoQkJRQ2FsbGVlKiBiYnFDYWxsZWUgPSBtX2NvZGVCbG9jay0+bV9iYnFD
YWxsZWVzW21fZnVuY3Rpb25JbmRleF0uZ2V0KCkpIHsKKyAgICAgICAgICAgICAgICBhdXRvIGxv
Y2tlciA9IGhvbGRMb2NrKGJicUNhbGxlZS0+dGllclVwQ291bnQoKS0+Z2V0TG9jaygpKTsKKyAg
ICAgICAgICAgICAgICBiYnFDYWxsZWUtPnNldFJlcGxhY2VtZW50KGNhbGxlZS5jb3B5UmVmKCkp
OworICAgICAgICAgICAgICAgIGJicUNhbGxlZS0+dGllclVwQ291bnQoKS0+bV9jb21waWxhdGlv
blN0YXR1c0Zvck9NRyA9IFRpZXJVcENvdW50OjpDb21waWxhdGlvblN0YXR1czo6Q29tcGlsZWQ7
CiAgICAgICAgICAgICB9Ci0gICAgICAgIH07Ci0KLSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0g
MDsgaSA8IG1fY29kZUJsb2NrLT5tX3dhc21Ub1dhc21DYWxsc2l0ZXMuc2l6ZSgpOyArK2kpIHsK
LSAgICAgICAgICAgIHJlcGF0Y2hDYWxscyhtX2NvZGVCbG9jay0+bV93YXNtVG9XYXNtQ2FsbHNp
dGVzW2ldKTsKICAgICAgICAgICAgIGlmIChtX2NvZGVCbG9jay0+bV9sbGludENhbGxlZXMpIHsK
LSAgICAgICAgICAgICAgICBMTEludENhbGxlZSYgbGxpbnRDYWxsZWUgPSBtX2NvZGVCbG9jay0+
bV9sbGludENhbGxlZXMtPmF0KGkpLmdldCgpOwotICAgICAgICAgICAgICAgIGlmIChKSVRDYWxs
ZWUqIHJlcGxhY2VtZW50Q2FsbGVlID0gbGxpbnRDYWxsZWUucmVwbGFjZW1lbnQoKSkKLSAgICAg
ICAgICAgICAgICAgICAgcmVwYXRjaENhbGxzKHJlcGxhY2VtZW50Q2FsbGVlLT53YXNtVG9XYXNt
Q2FsbHNpdGVzKCkpOwotICAgICAgICAgICAgICAgIGlmIChPTUdGb3JPU1JFbnRyeUNhbGxlZSog
b3NyRW50cnlDYWxsZWUgPSBsbGludENhbGxlZS5vc3JFbnRyeUNhbGxlZSgpKQotICAgICAgICAg
ICAgICAgICAgICByZXBhdGNoQ2FsbHMob3NyRW50cnlDYWxsZWUtPndhc21Ub1dhc21DYWxsc2l0
ZXMoKSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAoQkJRQ2FsbGVlKiBiYnFDYWxs
ZWUgPSBtX2NvZGVCbG9jay0+bV9iYnFDYWxsZWVzW2ldLmdldCgpKSB7Ci0gICAgICAgICAgICAg
ICAgaWYgKE9NR0NhbGxlZSogcmVwbGFjZW1lbnRDYWxsZWUgPSBiYnFDYWxsZWUtPnJlcGxhY2Vt
ZW50KCkpCi0gICAgICAgICAgICAgICAgICAgIHJlcGF0Y2hDYWxscyhyZXBsYWNlbWVudENhbGxl
ZS0+d2FzbVRvV2FzbUNhbGxzaXRlcygpKTsKLSAgICAgICAgICAgICAgICBpZiAoT01HRm9yT1NS
RW50cnlDYWxsZWUqIG9zckVudHJ5Q2FsbGVlID0gYmJxQ2FsbGVlLT5vc3JFbnRyeUNhbGxlZSgp
KQotICAgICAgICAgICAgICAgICAgICByZXBhdGNoQ2FsbHMob3NyRW50cnlDYWxsZWUtPndhc21U
b1dhc21DYWxsc2l0ZXMoKSk7CisgICAgICAgICAgICAgICAgTExJbnRDYWxsZWUmIGxsaW50Q2Fs
bGVlID0gbV9jb2RlQmxvY2stPm1fbGxpbnRDYWxsZWVzLT5hdChtX2Z1bmN0aW9uSW5kZXgpLmdl
dCgpOworICAgICAgICAgICAgICAgIGF1dG8gbG9ja2VyID0gaG9sZExvY2sobGxpbnRDYWxsZWUu
dGllclVwQ291bnRlcigpLm1fbG9jayk7CisgICAgICAgICAgICAgICAgbGxpbnRDYWxsZWUuc2V0
UmVwbGFjZW1lbnQoY2FsbGVlLmNvcHlSZWYoKSk7CisgICAgICAgICAgICAgICAgbGxpbnRDYWxs
ZWUudGllclVwQ291bnRlcigpLm1fY29tcGlsYXRpb25TdGF0dXMgPSBMTEludFRpZXJVcENvdW50
ZXI6OkNvbXBpbGF0aW9uU3RhdHVzOjpDb21waWxlZDsKICAgICAgICAgICAgIH0KICAgICAgICAg
fQogICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21QbGFuLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtUGxhbi5jcHAJKHJl
dmlzaW9uIDI1ODk5NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21QbGFuLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTYtMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTYtMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKQEAgLTEyOSw2ICsxMjksNzEgQEAgdm9pZCBQbGFuOjpmYWlsKGNv
bnN0IEFic3RyYWN0TG9ja2VyJiBsbwogICAgIGNvbXBsZXRlKGxvY2tlcik7CiB9CiAKK3ZvaWQg
UGxhbjo6dXBkYXRlQ2FsbFNpdGVzVG9DYWxsVXMoQ29kZUJsb2NrJiBjb2RlQmxvY2ssIENvZGVM
b2NhdGlvbkxhYmVsPFdhc21FbnRyeVB0clRhZz4gZW50cnlwb2ludCwgdWludDMyX3QgZnVuY3Rp
b25JbmRleCwgdWludDMyX3QgZnVuY3Rpb25JbmRleFNwYWNlKQoreworICAgIEhhc2hNYXA8dm9p
ZCosIENvZGVMb2NhdGlvbkxhYmVsPFdhc21FbnRyeVB0clRhZz4+IHN0YWdlZENhbGxzOworICAg
IGF1dG8gc3RhZ2VSZXBhdGNoID0gWyZdIChjb25zdCBWZWN0b3I8VW5saW5rZWRXYXNtVG9XYXNt
Q2FsbD4mIGNhbGxzaXRlcykgeworICAgICAgICBmb3IgKGF1dG8mIGNhbGwgOiBjYWxsc2l0ZXMp
IHsKKyAgICAgICAgICAgIGlmIChjYWxsLmZ1bmN0aW9uSW5kZXhTcGFjZSA9PSBmdW5jdGlvbklu
ZGV4U3BhY2UpIHsKKyAgICAgICAgICAgICAgICBDb2RlTG9jYXRpb25MYWJlbDxXYXNtRW50cnlQ
dHJUYWc+IHRhcmdldCA9IE1hY3JvQXNzZW1ibGVyOjpwcmVwYXJlRm9yQXRvbWljUmVwYXRjaE5l
YXJDYWxsQ29uY3VycmVudGx5KGNhbGwuY2FsbExvY2F0aW9uLCBlbnRyeXBvaW50KTsKKyAgICAg
ICAgICAgICAgICBzdGFnZWRDYWxscy5hZGQoY2FsbC5jYWxsTG9jYXRpb24uZGF0YUxvY2F0aW9u
KCksIHRhcmdldCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9OworICAgIGZvciAo
dW5zaWduZWQgaSA9IDA7IGkgPCBjb2RlQmxvY2subV93YXNtVG9XYXNtQ2FsbHNpdGVzLnNpemUo
KTsgKytpKSB7CisgICAgICAgIHN0YWdlUmVwYXRjaChjb2RlQmxvY2subV93YXNtVG9XYXNtQ2Fs
bHNpdGVzW2ldKTsKKyAgICAgICAgaWYgKGNvZGVCbG9jay5tX2xsaW50Q2FsbGVlcykgeworICAg
ICAgICAgICAgTExJbnRDYWxsZWUmIGxsaW50Q2FsbGVlID0gY29kZUJsb2NrLm1fbGxpbnRDYWxs
ZWVzLT5hdChpKS5nZXQoKTsKKyAgICAgICAgICAgIGlmIChKSVRDYWxsZWUqIHJlcGxhY2VtZW50
Q2FsbGVlID0gbGxpbnRDYWxsZWUucmVwbGFjZW1lbnQoKSkKKyAgICAgICAgICAgICAgICBzdGFn
ZVJlcGF0Y2gocmVwbGFjZW1lbnRDYWxsZWUtPndhc21Ub1dhc21DYWxsc2l0ZXMoKSk7CisgICAg
ICAgICAgICBpZiAoT01HRm9yT1NSRW50cnlDYWxsZWUqIG9zckVudHJ5Q2FsbGVlID0gbGxpbnRD
YWxsZWUub3NyRW50cnlDYWxsZWUoKSkKKyAgICAgICAgICAgICAgICBzdGFnZVJlcGF0Y2gob3Ny
RW50cnlDYWxsZWUtPndhc21Ub1dhc21DYWxsc2l0ZXMoKSk7CisgICAgICAgIH0KKyAgICAgICAg
aWYgKEJCUUNhbGxlZSogYmJxQ2FsbGVlID0gY29kZUJsb2NrLm1fYmJxQ2FsbGVlc1tpXS5nZXQo
KSkgeworICAgICAgICAgICAgaWYgKE9NR0NhbGxlZSogcmVwbGFjZW1lbnRDYWxsZWUgPSBiYnFD
YWxsZWUtPnJlcGxhY2VtZW50KCkpCisgICAgICAgICAgICAgICAgc3RhZ2VSZXBhdGNoKHJlcGxh
Y2VtZW50Q2FsbGVlLT53YXNtVG9XYXNtQ2FsbHNpdGVzKCkpOworICAgICAgICAgICAgaWYgKE9N
R0Zvck9TUkVudHJ5Q2FsbGVlKiBvc3JFbnRyeUNhbGxlZSA9IGJicUNhbGxlZS0+b3NyRW50cnlD
YWxsZWUoKSkKKyAgICAgICAgICAgICAgICBzdGFnZVJlcGF0Y2gob3NyRW50cnlDYWxsZWUtPndh
c21Ub1dhc21DYWxsc2l0ZXMoKSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvLyBJdCdzIGlt
cG9ydGFudCB0byBtYWtlIHN1cmUgd2UgZG8gdGhpcyBiZWZvcmUgd2UgbWFrZSBhbnkgb2YgdGhl
IGNvZGUgd2UganVzdCBjb21waWxlZCB2aXNpYmxlLiBJZiB3ZSBkaWRuJ3QsIHdlIGNvdWxkIGVu
ZCB1cAorICAgIC8vIHdoZXJlIHdlIGFyZSB0aWVyaW5nIHVwIHNvbWUgZnVuY3Rpb24gQSB0byBB
JyBhbmQgd2UgcmVwYXRjaCBzb21lIGZ1bmN0aW9uIEIgdG8gY2FsbCBBJyBpbnN0ZWFkIG9mIEEu
IEFub3RoZXIgQ1BVIGNvdWxkIHNlZQorICAgIC8vIHRoZSB1cGRhdGVzIHRvIEIgYnV0IHN0aWxs
IG5vdCBoYXZlIHJlc2V0IGl0cyBjYWNoZSBvZiBBJywgd2hpY2ggd291bGQgbGVhZCB0byBhbGwg
a2luZHMgb2YgYmFkbmVzcy4KKyAgICByZXNldEluc3RydWN0aW9uQ2FjaGVPbkFsbFRocmVhZHMo
KTsKKyAgICBXVEY6OnN0b3JlU3RvcmVGZW5jZSgpOyAvLyBUaGlzIHByb2JhYmx5IGlzbid0IG5l
Y2Vzc2FyeSBidXQgaXQncyBnb29kIHRvIGJlIHBhcmFub2lkLgorCisgICAgY29kZUJsb2NrLm1f
d2FzbUluZGlyZWN0Q2FsbEVudHJ5UG9pbnRzW2Z1bmN0aW9uSW5kZXhdID0gZW50cnlwb2ludDsK
KworICAgIGF1dG8gcmVwYXRjaENhbGxzID0gWyZdIChjb25zdCBWZWN0b3I8VW5saW5rZWRXYXNt
VG9XYXNtQ2FsbD4mIGNhbGxzaXRlcykgeworICAgICAgICBmb3IgKGF1dG8mIGNhbGwgOiBjYWxs
c2l0ZXMpIHsKKyAgICAgICAgICAgIGRhdGFMb2dMbklmKFdhc21QbGFuSW50ZXJuYWw6OnZlcmJv
c2UsICJDb25zaWRlcmluZyByZXBhdGNoaW5nIGNhbGwgYXQ6ICIsIFJhd1BvaW50ZXIoY2FsbC5j
YWxsTG9jYXRpb24uZGF0YUxvY2F0aW9uKCkpLCAiIHRoYXQgdGFyZ2V0cyAiLCBjYWxsLmZ1bmN0
aW9uSW5kZXhTcGFjZSk7CisgICAgICAgICAgICBpZiAoY2FsbC5mdW5jdGlvbkluZGV4U3BhY2Ug
PT0gZnVuY3Rpb25JbmRleFNwYWNlKSB7CisgICAgICAgICAgICAgICAgZGF0YUxvZ0xuSWYoV2Fz
bVBsYW5JbnRlcm5hbDo6dmVyYm9zZSwgIlJlcGF0Y2hpbmcgY2FsbCBhdDogIiwgUmF3UG9pbnRl
cihjYWxsLmNhbGxMb2NhdGlvbi5kYXRhTG9jYXRpb24oKSksICIgdG8gIiwgUmF3UG9pbnRlcihl
bnRyeXBvaW50LmV4ZWN1dGFibGVBZGRyZXNzKCkpKTsKKyAgICAgICAgICAgICAgICBNYWNyb0Fz
c2VtYmxlcjo6cmVwYXRjaE5lYXJDYWxsKGNhbGwuY2FsbExvY2F0aW9uLCBzdGFnZWRDYWxscy5n
ZXQoY2FsbC5jYWxsTG9jYXRpb24uZGF0YUxvY2F0aW9uKCkpKTsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgfQorICAgIH07CisKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgY29kZUJsb2Nr
Lm1fd2FzbVRvV2FzbUNhbGxzaXRlcy5zaXplKCk7ICsraSkgeworICAgICAgICByZXBhdGNoQ2Fs
bHMoY29kZUJsb2NrLm1fd2FzbVRvV2FzbUNhbGxzaXRlc1tpXSk7CisgICAgICAgIGlmIChjb2Rl
QmxvY2subV9sbGludENhbGxlZXMpIHsKKyAgICAgICAgICAgIExMSW50Q2FsbGVlJiBsbGludENh
bGxlZSA9IGNvZGVCbG9jay5tX2xsaW50Q2FsbGVlcy0+YXQoaSkuZ2V0KCk7CisgICAgICAgICAg
ICBpZiAoSklUQ2FsbGVlKiByZXBsYWNlbWVudENhbGxlZSA9IGxsaW50Q2FsbGVlLnJlcGxhY2Vt
ZW50KCkpCisgICAgICAgICAgICAgICAgcmVwYXRjaENhbGxzKHJlcGxhY2VtZW50Q2FsbGVlLT53
YXNtVG9XYXNtQ2FsbHNpdGVzKCkpOworICAgICAgICAgICAgaWYgKE9NR0Zvck9TUkVudHJ5Q2Fs
bGVlKiBvc3JFbnRyeUNhbGxlZSA9IGxsaW50Q2FsbGVlLm9zckVudHJ5Q2FsbGVlKCkpCisgICAg
ICAgICAgICAgICAgcmVwYXRjaENhbGxzKG9zckVudHJ5Q2FsbGVlLT53YXNtVG9XYXNtQ2FsbHNp
dGVzKCkpOworICAgICAgICB9CisgICAgICAgIGlmIChCQlFDYWxsZWUqIGJicUNhbGxlZSA9IGNv
ZGVCbG9jay5tX2JicUNhbGxlZXNbaV0uZ2V0KCkpIHsKKyAgICAgICAgICAgIGlmIChPTUdDYWxs
ZWUqIHJlcGxhY2VtZW50Q2FsbGVlID0gYmJxQ2FsbGVlLT5yZXBsYWNlbWVudCgpKQorICAgICAg
ICAgICAgICAgIHJlcGF0Y2hDYWxscyhyZXBsYWNlbWVudENhbGxlZS0+d2FzbVRvV2FzbUNhbGxz
aXRlcygpKTsKKyAgICAgICAgICAgIGlmIChPTUdGb3JPU1JFbnRyeUNhbGxlZSogb3NyRW50cnlD
YWxsZWUgPSBiYnFDYWxsZWUtPm9zckVudHJ5Q2FsbGVlKCkpCisgICAgICAgICAgICAgICAgcmVw
YXRjaENhbGxzKG9zckVudHJ5Q2FsbGVlLT53YXNtVG9XYXNtQ2FsbHNpdGVzKCkpOworICAgICAg
ICB9CisgICAgfQorCit9CisKIFBsYW46On5QbGFuKCkgeyB9CiAKIH0gfSAvLyBuYW1lc3BhY2Ug
SlNDOjpXYXNtCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtUGxhbi5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21QbGFuLmgJKHJldmlz
aW9uIDI1ODk5NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21QbGFuLmgJKHdv
cmtpbmcgY29weSkKQEAgLTgzLDYgKzgzLDggQEAgcHJvdGVjdGVkOgogICAgIHZpcnR1YWwgYm9v
bCBpc0NvbXBsZXRlKCkgY29uc3QgPSAwOwogICAgIHZpcnR1YWwgdm9pZCBjb21wbGV0ZShjb25z
dCBBYnN0cmFjdExvY2tlciYpID0gMDsKIAorICAgIHN0YXRpYyB2b2lkIHVwZGF0ZUNhbGxTaXRl
c1RvQ2FsbFVzKENvZGVCbG9jayYsIENvZGVMb2NhdGlvbkxhYmVsPFdhc21FbnRyeVB0clRhZz4g
ZW50cnlwb2ludCwgdWludDMyX3QgZnVuY3Rpb25JbmRleCwgdWludDMyX3QgZnVuY3Rpb25JbmRl
eFNwYWNlKTsKKwogICAgIFJlZjxNb2R1bGVJbmZvcm1hdGlvbj4gbV9tb2R1bGVJbmZvcm1hdGlv
bjsKIAogICAgIFZlY3RvcjxzdGQ6OnBhaXI8Q29udGV4dCosIENvbXBsZXRpb25UYXNrPiwgMT4g
bV9jb21wbGV0aW9uVGFza3M7CkluZGV4OiBTb3VyY2UvV1RGL0NoYW5nZUxvZwo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV1RGL0NoYW5nZUxvZwkocmV2aXNpb24gMjU4OTk2KQorKysgU291cmNlL1dU
Ri9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwzNiBAQAorMjAyMC0wMy0yNSAg
U2FhbSBCYXJhdGkgIDxzYmFyYXRpQGFwcGxlLmNvbT4KKworICAgICAgICBJbXBsZW1lbnQgMUdC
IG9mIGV4ZWN1dGFibGUgbWVtb3J5IG9uIGFybTY0CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMDg0OTAKKyAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzYw
Nzk3MTI3PgorCisgICAgICAgIFJldmlld2VkIGJ5IEtlaXRoIE1pbGxlci4KKworICAgICAgICAq
IHd0Zi9NZXRhQWxsb2NhdG9yLmNwcDoKKyAgICAgICAgKFdURjo6TWV0YUFsbG9jYXRvclRyYWNr
ZXI6Om5vdGlmeSk6CisgICAgICAgIChXVEY6Ok1ldGFBbGxvY2F0b3JUcmFja2VyOjpyZWxlYXNl
KToKKyAgICAgICAgKFdURjo6TWV0YUFsbG9jYXRvcjo6cmVsZWFzZSk6CisgICAgICAgIChXVEY6
Ok1ldGFBbGxvY2F0b3JIYW5kbGU6Ok1ldGFBbGxvY2F0b3JIYW5kbGUpOgorICAgICAgICAoV1RG
OjpNZXRhQWxsb2NhdG9ySGFuZGxlOjp+TWV0YUFsbG9jYXRvckhhbmRsZSk6CisgICAgICAgIChX
VEY6Ok1ldGFBbGxvY2F0b3JIYW5kbGU6OnNocmluayk6CisgICAgICAgIChXVEY6Ok1ldGFBbGxv
Y2F0b3I6Ok1ldGFBbGxvY2F0b3IpOgorICAgICAgICAoV1RGOjpNZXRhQWxsb2NhdG9yOjphbGxv
Y2F0ZSk6CisgICAgICAgIChXVEY6Ok1ldGFBbGxvY2F0b3I6OmN1cnJlbnRTdGF0aXN0aWNzKToK
KyAgICAgICAgKiB3dGYvTWV0YUFsbG9jYXRvci5oOgorICAgICAgICAoV1RGOjpNZXRhQWxsb2Nh
dG9yVHJhY2tlcjo6ZmluZCk6CisgICAgICAgIChXVEY6Ok1ldGFBbGxvY2F0b3I6OmFsbG9jYXRl
KToKKyAgICAgICAgKFdURjo6TWV0YUFsbG9jYXRvcjo6Y3VycmVudFN0YXRpc3RpY3MpOgorICAg
ICAgICAoV1RGOjpNZXRhQWxsb2NhdG9yOjpnZXRMb2NrKTogRGVsZXRlZC4KKyAgICAgICAgKiB3
dGYvTWV0YUFsbG9jYXRvckhhbmRsZS5oOgorICAgICAgICAoV1RGOjpNZXRhQWxsb2NhdG9ySGFu
ZGxlOjphbGxvY2F0b3IpOgorICAgICAgICAoV1RGOjpNZXRhQWxsb2NhdG9ySGFuZGxlOjppc01h
bmFnZWQpOiBEZWxldGVkLgorICAgICAgICAoV1RGOjpNZXRhQWxsb2NhdG9ySGFuZGxlOjpvd25l
clVJRCk6IERlbGV0ZWQuCisgICAgICAgICogd3RmL1BsYXRmb3JtRW5hYmxlLmg6CisgICAgICAg
ICogd3RmL1JlZEJsYWNrVHJlZS5oOgorICAgICAgICAqIHd0Zi9TdGRMaWJFeHRyYXMuaDoKKyAg
ICAgICAgKFdURjo6Y29uc3RydWN0Rml4ZWRTaXplQXJyYXlXaXRoQXJndW1lbnRzSW1wbCk6Cisg
ICAgICAgIChXVEY6OmNvbnN0cnVjdEZpeGVkU2l6ZUFycmF5V2l0aEFyZ3VtZW50cyk6CisKIDIw
MjAtMDMtMjQgIFBlciBBcm5lIFZvbGxhbiAgPHB2b2xsYW5AYXBwbGUuY29tPgogCiAgICAgICAg
IFtDb2NvYV0gRml4IGxhdW5jaCB0aW1lIHJlZ3Jlc3Npb24gd2l0aCBDRiBwcmVmcyBkaXJlY3Qg
bW9kZSBlbmFibGVkCkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9NZXRhQWxsb2NhdG9yLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9NZXRhQWxsb2NhdG9yLmNwcAkocmV2aXNpb24gMjU4
OTk2KQorKysgU291cmNlL1dURi93dGYvTWV0YUFsbG9jYXRvci5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDExLTIwMTggQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDExLTIwMjAgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CkBAIC01NCwyMiArNTQsMjEgQEAgTWV0YUFsbG9jYXRvcjo6fk1ldGFBbGxvY2F0b3IoKQogI2Vu
ZGlmCiB9CiAKLXZvaWQgTWV0YUFsbG9jYXRvclRyYWNrZXI6Om5vdGlmeShNZXRhQWxsb2NhdG9y
SGFuZGxlKiBoYW5kbGUpCit2b2lkIE1ldGFBbGxvY2F0b3JUcmFja2VyOjpub3RpZnkoTWV0YUFs
bG9jYXRvckhhbmRsZSYgaGFuZGxlKQogewotICAgIG1fYWxsb2NhdGlvbnMuaW5zZXJ0KGhhbmRs
ZSk7CisgICAgbV9hbGxvY2F0aW9ucy5pbnNlcnQoJmhhbmRsZSk7CiB9CiAKLXZvaWQgTWV0YUFs
bG9jYXRvclRyYWNrZXI6OnJlbGVhc2UoTWV0YUFsbG9jYXRvckhhbmRsZSogaGFuZGxlKQordm9p
ZCBNZXRhQWxsb2NhdG9yVHJhY2tlcjo6cmVsZWFzZShNZXRhQWxsb2NhdG9ySGFuZGxlJiBoYW5k
bGUpCiB7Ci0gICAgbV9hbGxvY2F0aW9ucy5yZW1vdmUoaGFuZGxlKTsKKyAgICBtX2FsbG9jYXRp
b25zLnJlbW92ZSgmaGFuZGxlKTsKIH0KIAotQUxXQVlTX0lOTElORSB2b2lkIE1ldGFBbGxvY2F0
b3I6OnJlbGVhc2UoTWV0YUFsbG9jYXRvckhhbmRsZSogaGFuZGxlKQordm9pZCBNZXRhQWxsb2Nh
dG9yOjpyZWxlYXNlKGNvbnN0IExvY2tIb2xkZXImLCBNZXRhQWxsb2NhdG9ySGFuZGxlJiBoYW5k
bGUpCiB7Ci0gICAgTG9ja0hvbGRlciBsb2NrZXIoJm1fbG9jayk7Ci0gICAgaWYgKGhhbmRsZS0+
c2l6ZUluQnl0ZXMoKSkgewotICAgICAgICB2b2lkKiBzdGFydCA9IGhhbmRsZS0+c3RhcnQoKS51
bnRhZ2dlZFB0cigpOwotICAgICAgICBzaXplX3Qgc2l6ZUluQnl0ZXMgPSBoYW5kbGUtPnNpemVJ
bkJ5dGVzKCk7CisgICAgaWYgKGhhbmRsZS5zaXplSW5CeXRlcygpKSB7CisgICAgICAgIHZvaWQq
IHN0YXJ0ID0gaGFuZGxlLnN0YXJ0KCkudW50YWdnZWRQdHIoKTsKKyAgICAgICAgc2l6ZV90IHNp
emVJbkJ5dGVzID0gaGFuZGxlLnNpemVJbkJ5dGVzKCk7CiAgICAgICAgIGRlY3JlbWVudFBhZ2VP
Y2N1cGFuY3koc3RhcnQsIHNpemVJbkJ5dGVzKTsKICAgICAgICAgYWRkRnJlZVNwYWNlRnJvbVJl
bGVhc2VkSGFuZGxlKEZyZWVTcGFjZVB0cihzdGFydCksIHNpemVJbkJ5dGVzKTsKICAgICB9CkBA
IC03OCwyMSArNzcsMTkgQEAgQUxXQVlTX0lOTElORSB2b2lkIE1ldGFBbGxvY2F0b3I6OnJlbGVh
cwogICAgICAgICBtX3RyYWNrZXItPnJlbGVhc2UoaGFuZGxlKTsKIH0KIAotTWV0YUFsbG9jYXRv
ckhhbmRsZTo6TWV0YUFsbG9jYXRvckhhbmRsZShNZXRhQWxsb2NhdG9yKiBhbGxvY2F0b3IsIHZv
aWQqIHN0YXJ0LCBzaXplX3Qgc2l6ZUluQnl0ZXMsIHZvaWQqIG93bmVyVUlEKQorTWV0YUFsbG9j
YXRvckhhbmRsZTo6TWV0YUFsbG9jYXRvckhhbmRsZShNZXRhQWxsb2NhdG9yJiBhbGxvY2F0b3Is
IHZvaWQqIHN0YXJ0LCBzaXplX3Qgc2l6ZUluQnl0ZXMpCiAgICAgOiBtX2FsbG9jYXRvcihhbGxv
Y2F0b3IpCiAgICAgLCBtX3N0YXJ0KHN0YXJ0KQogICAgICwgbV9lbmQocmVpbnRlcnByZXRfY2Fz
dDxjaGFyKj4oc3RhcnQpICsgc2l6ZUluQnl0ZXMpCi0gICAgLCBtX293bmVyVUlEKG93bmVyVUlE
KQogewotICAgIEFTU0VSVChhbGxvY2F0b3IpOwogICAgIEFTU0VSVChzdGFydCk7CiAgICAgQVNT
RVJUKHNpemVJbkJ5dGVzKTsKIH0KIAogTWV0YUFsbG9jYXRvckhhbmRsZTo6fk1ldGFBbGxvY2F0
b3JIYW5kbGUoKQogewotICAgIEFTU0VSVChtX2FsbG9jYXRvcik7Ci0gICAgbV9hbGxvY2F0b3It
PnJlbGVhc2UodGhpcyk7CisgICAgYXV0byBsb2NrZXIgPSBob2xkTG9jayhhbGxvY2F0b3IoKS5t
X2xvY2spOworICAgIGFsbG9jYXRvcigpLnJlbGVhc2UobG9ja2VyLCAqdGhpcyk7CiB9CiAKIHZv
aWQgTWV0YUFsbG9jYXRvckhhbmRsZTo6c2hyaW5rKHNpemVfdCBuZXdTaXplSW5CeXRlcykKQEAg
LTEwMCw5ICs5NywxMCBAQCB2b2lkIE1ldGFBbGxvY2F0b3JIYW5kbGU6OnNocmluayhzaXplX3Qg
CiAgICAgc2l6ZV90IHNpemVJbkJ5dGVzID0gdGhpcy0+c2l6ZUluQnl0ZXMoKTsKICAgICBBU1NF
UlQobmV3U2l6ZUluQnl0ZXMgPD0gc2l6ZUluQnl0ZXMpOwogCi0gICAgTG9ja0hvbGRlciBsb2Nr
ZXIoJm1fYWxsb2NhdG9yLT5tX2xvY2spOworICAgIE1ldGFBbGxvY2F0b3ImIGFsbG9jYXRvciA9
IHRoaXMtPmFsbG9jYXRvcigpOworICAgIExvY2tIb2xkZXIgbG9ja2VyKCZhbGxvY2F0b3IubV9s
b2NrKTsKIAotICAgIG5ld1NpemVJbkJ5dGVzID0gbV9hbGxvY2F0b3ItPnJvdW5kVXAobmV3U2l6
ZUluQnl0ZXMpOworICAgIG5ld1NpemVJbkJ5dGVzID0gYWxsb2NhdG9yLnJvdW5kVXAobmV3U2l6
ZUluQnl0ZXMpOwogICAgIAogICAgIEFTU0VSVChuZXdTaXplSW5CeXRlcyA8PSBzaXplSW5CeXRl
cyk7CiAKQEAgLTExMywxMSArMTExLDExIEBAIHZvaWQgTWV0YUFsbG9jYXRvckhhbmRsZTo6c2hy
aW5rKHNpemVfdCAKICAgICBzaXplX3QgZnJlZVNpemUgPSBzaXplSW5CeXRlcyAtIG5ld1NpemVJ
bkJ5dGVzOwogICAgIHVpbnRwdHJfdCBmcmVlRW5kID0gZnJlZVN0YXJ0ICsgZnJlZVNpemU7CiAg
ICAgCi0gICAgdWludHB0cl90IGZpcnN0Q29tcGxldGVseUZyZWVQYWdlID0gKGZyZWVTdGFydCAr
IG1fYWxsb2NhdG9yLT5tX3BhZ2VTaXplIC0gMSkgJiB+KG1fYWxsb2NhdG9yLT5tX3BhZ2VTaXpl
IC0gMSk7CisgICAgdWludHB0cl90IGZpcnN0Q29tcGxldGVseUZyZWVQYWdlID0gKGZyZWVTdGFy
dCArIGFsbG9jYXRvci5tX3BhZ2VTaXplIC0gMSkgJiB+KGFsbG9jYXRvci5tX3BhZ2VTaXplIC0g
MSk7CiAgICAgaWYgKGZpcnN0Q29tcGxldGVseUZyZWVQYWdlIDwgZnJlZUVuZCkKLSAgICAgICAg
bV9hbGxvY2F0b3ItPmRlY3JlbWVudFBhZ2VPY2N1cGFuY3kocmVpbnRlcnByZXRfY2FzdDx2b2lk
Kj4oZmlyc3RDb21wbGV0ZWx5RnJlZVBhZ2UpLCBmcmVlU2l6ZSAtIChmaXJzdENvbXBsZXRlbHlG
cmVlUGFnZSAtIGZyZWVTdGFydCkpOworICAgICAgICBhbGxvY2F0b3IuZGVjcmVtZW50UGFnZU9j
Y3VwYW5jeShyZWludGVycHJldF9jYXN0PHZvaWQqPihmaXJzdENvbXBsZXRlbHlGcmVlUGFnZSks
IGZyZWVTaXplIC0gKGZpcnN0Q29tcGxldGVseUZyZWVQYWdlIC0gZnJlZVN0YXJ0KSk7CiAKLSAg
ICBtX2FsbG9jYXRvci0+YWRkRnJlZVNwYWNlRnJvbVJlbGVhc2VkSGFuZGxlKE1ldGFBbGxvY2F0
b3I6OkZyZWVTcGFjZVB0cihmcmVlU3RhcnQpLCBmcmVlU2l6ZSk7CisgICAgYWxsb2NhdG9yLmFk
ZEZyZWVTcGFjZUZyb21SZWxlYXNlZEhhbmRsZShNZXRhQWxsb2NhdG9yOjpGcmVlU3BhY2VQdHIo
ZnJlZVN0YXJ0KSwgZnJlZVNpemUpOwogCiAgICAgbV9lbmQgPSBtX3N0YXJ0ICsgbmV3U2l6ZUlu
Qnl0ZXM7CiB9CkBAIC0xMjcsMTMgKzEyNSwxMyBAQCB2b2lkIE1ldGFBbGxvY2F0b3JIYW5kbGU6
OmR1bXAoUHJpbnRTdHJlCiAgICAgb3V0LnByaW50KFJhd1BvaW50ZXIoc3RhcnQoKS51bnRhZ2dl
ZFB0cigpKSwgIi4uLiIsIFJhd1BvaW50ZXIoZW5kKCkudW50YWdnZWRQdHIoKSkpOwogfQogCi1N
ZXRhQWxsb2NhdG9yOjpNZXRhQWxsb2NhdG9yKHNpemVfdCBhbGxvY2F0aW9uR3JhbnVsZSwgc2l6
ZV90IHBhZ2VTaXplKQorTWV0YUFsbG9jYXRvcjo6TWV0YUFsbG9jYXRvcihMb2NrJiBsb2NrLCBz
aXplX3QgYWxsb2NhdGlvbkdyYW51bGUsIHNpemVfdCBwYWdlU2l6ZSkKICAgICA6IG1fYWxsb2Nh
dGlvbkdyYW51bGUoYWxsb2NhdGlvbkdyYW51bGUpCiAgICAgLCBtX3BhZ2VTaXplKHBhZ2VTaXpl
KQogICAgICwgbV9ieXRlc0FsbG9jYXRlZCgwKQogICAgICwgbV9ieXRlc1Jlc2VydmVkKDApCiAg
ICAgLCBtX2J5dGVzQ29tbWl0dGVkKDApCi0gICAgLCBtX3RyYWNrZXIoMCkKKyAgICAsIG1fbG9j
ayhsb2NrKQogI2lmbmRlZiBOREVCVUcKICAgICAsIG1fbWFsbG9jQmFsYW5jZSgwKQogI2VuZGlm
CkBAIC0xNTcsMTAgKzE1NSw4IEBAIE1ldGFBbGxvY2F0b3I6Ok1ldGFBbGxvY2F0b3Ioc2l6ZV90
IGFsbG8KICAgICBBU1NFUlQoc3RhdGljX2Nhc3Q8c2l6ZV90PigxKSA8PCBtX2xvZ0FsbG9jYXRp
b25HcmFudWxlID09IG1fYWxsb2NhdGlvbkdyYW51bGUpOwogfQogCi1SZWZQdHI8TWV0YUFsbG9j
YXRvckhhbmRsZT4gTWV0YUFsbG9jYXRvcjo6YWxsb2NhdGUoc2l6ZV90IHNpemVJbkJ5dGVzLCB2
b2lkKiBvd25lclVJRCkKK1JlZlB0cjxNZXRhQWxsb2NhdG9ySGFuZGxlPiBNZXRhQWxsb2NhdG9y
OjphbGxvY2F0ZShjb25zdCBMb2NrSG9sZGVyJiwgc2l6ZV90IHNpemVJbkJ5dGVzKQogewotICAg
IExvY2tIb2xkZXIgbG9ja2VyKCZtX2xvY2spOwotCiAgICAgaWYgKCFzaXplSW5CeXRlcykKICAg
ICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgCkBAIC0xOTUsMTcgKzE5MSwxNiBAQCBSZWZQdHI8
TWV0YUFsbG9jYXRvckhhbmRsZT4gTWV0YUFsbG9jYXRvCiAgICAgbV9udW1BbGxvY2F0aW9ucysr
OwogI2VuZGlmCiAKLSAgICBhdXRvIGhhbmRsZSA9IGFkb3B0UmVmKCpuZXcgTWV0YUFsbG9jYXRv
ckhhbmRsZSh0aGlzLCBzdGFydC51bnRhZ2dlZFB0cigpLCBzaXplSW5CeXRlcywgb3duZXJVSUQp
KTsKKyAgICBhdXRvIGhhbmRsZSA9IGFkb3B0UmVmKCpuZXcgTWV0YUFsbG9jYXRvckhhbmRsZSgq
dGhpcywgc3RhcnQudW50YWdnZWRQdHIoKSwgc2l6ZUluQnl0ZXMpKTsKIAogICAgIGlmIChVTkxJ
S0VMWSghIW1fdHJhY2tlcikpCi0gICAgICAgIG1fdHJhY2tlci0+bm90aWZ5KGhhbmRsZS5wdHIo
KSk7CisgICAgICAgIG1fdHJhY2tlci0+bm90aWZ5KCpoYW5kbGUucHRyKCkpOwogCiAgICAgcmV0
dXJuIGhhbmRsZTsKIH0KIAotTWV0YUFsbG9jYXRvcjo6U3RhdGlzdGljcyBNZXRhQWxsb2NhdG9y
OjpjdXJyZW50U3RhdGlzdGljcygpCitNZXRhQWxsb2NhdG9yOjpTdGF0aXN0aWNzIE1ldGFBbGxv
Y2F0b3I6OmN1cnJlbnRTdGF0aXN0aWNzKGNvbnN0IExvY2tIb2xkZXImKQogewotICAgIExvY2tI
b2xkZXIgbG9ja2VyKCZtX2xvY2spOwogICAgIFN0YXRpc3RpY3MgcmVzdWx0OwogICAgIHJlc3Vs
dC5ieXRlc0FsbG9jYXRlZCA9IG1fYnl0ZXNBbGxvY2F0ZWQ7CiAgICAgcmVzdWx0LmJ5dGVzUmVz
ZXJ2ZWQgPSBtX2J5dGVzUmVzZXJ2ZWQ7CkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9NZXRhQWxsb2Nh
dG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvTWV0YUFsbG9jYXRvci5oCShyZXZp
c2lvbiAyNTg5OTYpCisrKyBTb3VyY2UvV1RGL3d0Zi9NZXRhQWxsb2NhdG9yLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTQ0LDE1ICs0NCwxNSBAQCBuYW1lc3BhY2UgV1RGIHsKIGNsYXNzIE1ldGFBbGxv
Y2F0b3JUcmFja2VyIHsKICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKIHB1YmxpYzoKLSAg
ICB2b2lkIG5vdGlmeShNZXRhQWxsb2NhdG9ySGFuZGxlKik7Ci0gICAgdm9pZCByZWxlYXNlKE1l
dGFBbGxvY2F0b3JIYW5kbGUqKTsKKyAgICB2b2lkIG5vdGlmeShNZXRhQWxsb2NhdG9ySGFuZGxl
Jik7CisgICAgdm9pZCByZWxlYXNlKE1ldGFBbGxvY2F0b3JIYW5kbGUmKTsKIAogICAgIE1ldGFB
bGxvY2F0b3JIYW5kbGUqIGZpbmQodm9pZCogYWRkcmVzcykKICAgICB7CiAgICAgICAgIE1ldGFB
bGxvY2F0b3JIYW5kbGUqIGhhbmRsZSA9IG1fYWxsb2NhdGlvbnMuZmluZEdyZWF0ZXN0TGVzc1Ro
YW5PckVxdWFsKGFkZHJlc3MpOwotICAgICAgICBpZiAoaGFuZGxlICYmIGFkZHJlc3MgPCBoYW5k
bGUtPmVuZCgpLnVudGFnZ2VkUHRyKCkpCisgICAgICAgIGlmIChoYW5kbGUgJiYgaGFuZGxlLT5z
dGFydCgpLnVudGFnZ2VkUHRyKCkgPD0gYWRkcmVzcyAmJiBhZGRyZXNzIDwgaGFuZGxlLT5lbmQo
KS51bnRhZ2dlZFB0cigpKQogICAgICAgICAgICAgcmV0dXJuIGhhbmRsZTsKLSAgICAgICAgcmV0
dXJuIDA7CisgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIH0KIAogICAgIFJlZEJsYWNrVHJl
ZTxNZXRhQWxsb2NhdG9ySGFuZGxlLCB2b2lkKj4gbV9hbGxvY2F0aW9uczsKQEAgLTY0LDE3ICs2
NCwyMiBAQCBjbGFzcyBNZXRhQWxsb2NhdG9yIHsKIHB1YmxpYzoKICAgICB1c2luZyBGcmVlU3Bh
Y2VQdHIgPSBNZXRhQWxsb2NhdG9yUHRyPEZyZWVTcGFjZVB0clRhZz47CiAKLSAgICBXVEZfRVhQ
T1JUX1BSSVZBVEUgTWV0YUFsbG9jYXRvcihzaXplX3QgYWxsb2NhdGlvbkdyYW51bGUsIHNpemVf
dCBwYWdlU2l6ZSA9IFdURjo6cGFnZVNpemUoKSk7CisgICAgV1RGX0VYUE9SVF9QUklWQVRFIE1l
dGFBbGxvY2F0b3IoTG9jayYsIHNpemVfdCBhbGxvY2F0aW9uR3JhbnVsZSwgc2l6ZV90IHBhZ2VT
aXplID0gV1RGOjpwYWdlU2l6ZSgpKTsKICAgICAKICAgICBXVEZfRVhQT1JUX1BSSVZBVEUgdmly
dHVhbCB+TWV0YUFsbG9jYXRvcigpOwogICAgIAotICAgIFdURl9FWFBPUlRfUFJJVkFURSBSZWZQ
dHI8TWV0YUFsbG9jYXRvckhhbmRsZT4gYWxsb2NhdGUoc2l6ZV90IHNpemVJbkJ5dGVzLCB2b2lk
KiBvd25lclVJRCk7CisgICAgQUxXQVlTX0lOTElORSBSZWZQdHI8TWV0YUFsbG9jYXRvckhhbmRs
ZT4gYWxsb2NhdGUoc2l6ZV90IHNpemVJbkJ5dGVzKQorICAgIHsKKyAgICAgICAgYXV0byBsb2Nr
ZXIgPSBob2xkTG9jayhtX2xvY2spOworICAgICAgICByZXR1cm4gYWxsb2NhdGUobG9ja2VyLCBz
aXplSW5CeXRlcyk7CisgICAgfQorICAgIFdURl9FWFBPUlRfUFJJVkFURSBSZWZQdHI8TWV0YUFs
bG9jYXRvckhhbmRsZT4gYWxsb2NhdGUoY29uc3QgTG9ja0hvbGRlciYsIHNpemVfdCBzaXplSW5C
eXRlcyk7CiAKICAgICB2b2lkIHRyYWNrQWxsb2NhdGlvbnMoTWV0YUFsbG9jYXRvclRyYWNrZXIq
IHRyYWNrZXIpCiAgICAgewogICAgICAgICBtX3RyYWNrZXIgPSB0cmFja2VyOwogICAgIH0KLSAg
ICAKKwogICAgIC8vIE5vbi1hdG9taWMgbWV0aG9kcyBmb3IgZ2V0dGluZyBhbGxvY2F0b3Igc3Rh
dGlzdGljcy4KICAgICBzaXplX3QgYnl0ZXNBbGxvY2F0ZWQoKSB7IHJldHVybiBtX2J5dGVzQWxs
b2NhdGVkOyB9CiAgICAgc2l6ZV90IGJ5dGVzUmVzZXJ2ZWQoKSB7IHJldHVybiBtX2J5dGVzUmVz
ZXJ2ZWQ7IH0KQEAgLTg3LDcgKzkyLDEyIEBAIHB1YmxpYzoKICAgICAgICAgc2l6ZV90IGJ5dGVz
UmVzZXJ2ZWQ7CiAgICAgICAgIHNpemVfdCBieXRlc0NvbW1pdHRlZDsKICAgICB9OwotICAgIFdU
Rl9FWFBPUlRfUFJJVkFURSBTdGF0aXN0aWNzIGN1cnJlbnRTdGF0aXN0aWNzKCk7CisgICAgU3Rh
dGlzdGljcyBjdXJyZW50U3RhdGlzdGljcygpCisgICAgeworICAgICAgICBhdXRvIGxvY2tlciA9
IGhvbGRMb2NrKG1fbG9jayk7CisgICAgICAgIHJldHVybiBjdXJyZW50U3RhdGlzdGljcyhsb2Nr
ZXIpOworICAgIH0KKyAgICBXVEZfRVhQT1JUX1BSSVZBVEUgU3RhdGlzdGljcyBjdXJyZW50U3Rh
dGlzdGljcyhjb25zdCBMb2NrSG9sZGVyJik7CiAKICAgICAvLyBBZGQgbW9yZSBmcmVlIHNwYWNl
IHRvIHRoZSBhbGxvY2F0b3IuIENhbGwgdGhpcyBkaXJlY3RseSBmcm9tCiAgICAgLy8gdGhlIGNv
bnN0cnVjdG9yIGlmIHlvdSB3aXNoIHRvIG9wZXJhdGUgdGhlIGFsbG9jYXRvciB3aXRoaW4gYQpA
QCAtOTgsNyArMTA4LDYgQEAgcHVibGljOgogICAgIC8vIGJ1aWxkcy4KICAgICBXVEZfRVhQT1JU
X1BSSVZBVEUgc2l6ZV90IGRlYnVnRnJlZVNwYWNlU2l6ZSgpOwogCi0gICAgTG9jayYgZ2V0TG9j
aygpIHsgcmV0dXJuIG1fbG9jazsgfQogICAgIFdURl9FWFBPUlRfUFJJVkFURSBib29sIGlzSW5B
bGxvY2F0ZWRNZW1vcnkoY29uc3QgQWJzdHJhY3RMb2NrZXImLCB2b2lkKiBhZGRyZXNzKTsKICAg
ICAKICNpZiBFTkFCTEUoTUVUQV9BTExPQ0FUT1JfUFJPRklMRSkKQEAgLTEyMyw2ICsxMzIsOCBA
QCBwcm90ZWN0ZWQ6CiAgICAgLy8gZGVzdHJ1Y3Rpb24sIGluIHBhcnQgYmVjYXVzZSBhIE1ldGFB
bGxvY2F0b3IgY2Fubm90IGRpZSBzbyBsb25nCiAgICAgLy8gYXMgdGhlcmUgYXJlIEhhbmRsZXMg
dGhhdCByZWZlciB0byBpdC4KIAorICAgIC8vIFJlbGVhc2UgYSBNZXRhQWxsb2NhdG9ySGFuZGxl
LgorICAgIFdURl9FWFBPUlRfUFJJVkFURSB2aXJ0dWFsIHZvaWQgcmVsZWFzZShjb25zdCBMb2Nr
SG9sZGVyJiwgTWV0YUFsbG9jYXRvckhhbmRsZSYpOwogcHJpdmF0ZToKICAgICAKICAgICBmcmll
bmQgY2xhc3MgTWV0YUFsbG9jYXRvckhhbmRsZTsKQEAgLTE1MCw5ICsxNjEsNiBAQCBwcml2YXRl
OgogICAgICAgICBGcmVlU3BhY2VQdHIgbV9lbmQ7CiAgICAgfTsKICAgICB0eXBlZGVmIFJlZEJs
YWNrVHJlZTxGcmVlU3BhY2VOb2RlLCBzaXplX3Q+IFRyZWU7Ci0KLSAgICAvLyBSZWxlYXNlIGEg
TWV0YUFsbG9jYXRvckhhbmRsZS4KLSAgICB2b2lkIHJlbGVhc2UoTWV0YUFsbG9jYXRvckhhbmRs
ZSopOwogICAgIAogICAgIC8vIFJlbW92ZSBmcmVlIHNwYWNlIGZyb20gdGhlIGFsbG9jYXRvci4g
VGhpcyBpcyBlZmZlY3RpdmVseQogICAgIC8vIHRoZSBhbGxvY2F0ZSgpIGZ1bmN0aW9uLCBleGNl
cHQgdGhhdCBpdCBkb2VzIG5vdCBtYXJrIHRoZQpAQCAtMTkzLDkgKzIwMSw5IEBAIHByaXZhdGU6
CiAgICAgc2l6ZV90IG1fYnl0ZXNSZXNlcnZlZDsKICAgICBzaXplX3QgbV9ieXRlc0NvbW1pdHRl
ZDsKICAgICAKLSAgICBMb2NrIG1fbG9jazsKKyAgICBMb2NrJiBtX2xvY2s7CiAKLSAgICBNZXRh
QWxsb2NhdG9yVHJhY2tlciogbV90cmFja2VyOworICAgIE1ldGFBbGxvY2F0b3JUcmFja2VyKiBt
X3RyYWNrZXIgeyBudWxscHRyIH07CiAKICNpZm5kZWYgTkRFQlVHCiAgICAgc2l6ZV90IG1fbWFs
bG9jQmFsYW5jZTsKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL01ldGFBbGxvY2F0b3JIYW5kbGUuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9NZXRhQWxsb2NhdG9ySGFuZGxlLmgJKHJldmlz
aW9uIDI1ODk5NikKKysrIFNvdXJjZS9XVEYvd3RmL01ldGFBbGxvY2F0b3JIYW5kbGUuaAkod29y
a2luZyBjb3B5KQpAQCAtNDIsNyArNDIsNyBAQCBERUNMQVJFX0FMTE9DQVRPUl9XSVRIX0hFQVBf
SURFTlRJRklFUihNCiBjbGFzcyBNZXRhQWxsb2NhdG9ySGFuZGxlIDogcHVibGljIFRocmVhZFNh
ZmVSZWZDb3VudGVkPE1ldGFBbGxvY2F0b3JIYW5kbGU+LCBwdWJsaWMgUmVkQmxhY2tUcmVlPE1l
dGFBbGxvY2F0b3JIYW5kbGUsIHZvaWQqPjo6Tm9kZSB7CiAgICAgV1RGX01BS0VfRkFTVF9BTExP
Q0FURURfV0lUSF9IRUFQX0lERU5USUZJRVIoTWV0YUFsbG9jYXRvckhhbmRsZSk7CiBwcml2YXRl
OgotICAgIE1ldGFBbGxvY2F0b3JIYW5kbGUoTWV0YUFsbG9jYXRvciosIHZvaWQqIHN0YXJ0LCBz
aXplX3Qgc2l6ZUluQnl0ZXMsIHZvaWQqIG93bmVyVUlEKTsKKyAgICBNZXRhQWxsb2NhdG9ySGFu
ZGxlKE1ldGFBbGxvY2F0b3ImLCB2b2lkKiBzdGFydCwgc2l6ZV90IHNpemVJbkJ5dGVzKTsKIAog
cHVibGljOgogICAgIHVzaW5nIE1lbW9yeVB0ciA9IE1ldGFBbGxvY2F0b3JQdHI8SGFuZGxlTWVt
b3J5UHRyVGFnPjsKQEAgLTg2LDIyICs4NiwxMSBAQCBwdWJsaWM6CiAgICAgICAgIAogICAgIFdU
Rl9FWFBPUlRfUFJJVkFURSB2b2lkIHNocmluayhzaXplX3QgbmV3U2l6ZUluQnl0ZXMpOwogICAg
IAotICAgIGJvb2wgaXNNYW5hZ2VkKCkKKyAgICBNZXRhQWxsb2NhdG9yJiBhbGxvY2F0b3IoKQog
ICAgIHsKLSAgICAgICAgcmV0dXJuICEhbV9hbGxvY2F0b3I7Ci0gICAgfQotICAgICAgICAKLSAg
ICBNZXRhQWxsb2NhdG9yKiBhbGxvY2F0b3IoKQotICAgIHsKLSAgICAgICAgQVNTRVJUKG1fYWxs
b2NhdG9yKTsKICAgICAgICAgcmV0dXJuIG1fYWxsb2NhdG9yOwogICAgIH0KIAotICAgIHZvaWQq
IG93bmVyVUlEKCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBtX293bmVyVUlEOwotICAgIH0KLQog
ICAgIHZvaWQqIGtleSgpCiAgICAgewogICAgICAgICByZXR1cm4gbV9zdGFydC51bnRhZ2dlZFB0
cigpOwpAQCAtMTEyLDEwICsxMDEsOSBAQCBwdWJsaWM6CiBwcml2YXRlOgogICAgIGZyaWVuZCBj
bGFzcyBNZXRhQWxsb2NhdG9yOwogICAgIAotICAgIE1ldGFBbGxvY2F0b3IqIG1fYWxsb2NhdG9y
OworICAgIE1ldGFBbGxvY2F0b3ImIG1fYWxsb2NhdG9yOwogICAgIE1lbW9yeVB0ciBtX3N0YXJ0
OwogICAgIE1lbW9yeVB0ciBtX2VuZDsKLSAgICB2b2lkKiBtX293bmVyVUlEOwogfTsKIAogfQpJ
bmRleDogU291cmNlL1dURi93dGYvUGxhdGZvcm1FbmFibGUuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV1RGL3d0Zi9QbGF0Zm9ybUVuYWJsZS5oCShyZXZpc2lvbiAyNTg5OTYpCisrKyBTb3VyY2Uv
V1RGL3d0Zi9QbGF0Zm9ybUVuYWJsZS5oCSh3b3JraW5nIGNvcHkpCkBAIC04NzMsMyArODczLDcg
QEAKICNpZiBFTkFCTEUoV0VCR0wyKSAmJiAhRU5BQkxFKFdFQkdMKQogI2Vycm9yICJFTkFCTEUo
V0VCR0wyKSByZXF1aXJlcyBFTkFCTEUoV0VCR0wpIgogI2VuZGlmCisKKyNpZiBDUFUoQVJNNjQp
ICYmIENQVShBRERSRVNTNjQpCisjZGVmaW5lIFVTRV9KVU1QX0lTTEFORFMgMQorI2VuZGlmCklu
ZGV4OiBTb3VyY2UvV1RGL3d0Zi9SZWRCbGFja1RyZWUuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V1RGL3d0Zi9SZWRCbGFja1RyZWUuaAkocmV2aXNpb24gMjU4OTk2KQorKysgU291cmNlL1dURi93
dGYvUmVkQmxhY2tUcmVlLmgJKHdvcmtpbmcgY29weSkKQEAgLTMwLDYgKzMwLDcgQEAKIAogI2lu
Y2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+CiAjaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+Cisj
aW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogCiBuYW1lc3BhY2UgV1RGIHsKIApAQCAtMzI0LDYgKzMy
NSwyNiBAQCBwdWJsaWM6CiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuIGJlc3Q7CiAgICAgfQor
CisgICAgdGVtcGxhdGUgPHR5cGVuYW1lIEZ1bmN0aW9uPgorICAgIHZvaWQgaXRlcmF0ZShGdW5j
dGlvbiBmdW5jdGlvbikKKyAgICB7CisgICAgICAgIGlmICghbV9yb290KQorICAgICAgICAgICAg
cmV0dXJuOworCisgICAgICAgIFZlY3RvcjxOb2RlVHlwZSosIDE2PiB0b0l0ZXJhdGU7CisgICAg
ICAgIHRvSXRlcmF0ZS5hcHBlbmQobV9yb290KTsKKyAgICAgICAgd2hpbGUgKHRvSXRlcmF0ZS5z
aXplKCkpIHsKKyAgICAgICAgICAgIE5vZGVUeXBlJiBjdXJyZW50ID0gKnRvSXRlcmF0ZS50YWtl
TGFzdCgpOworICAgICAgICAgICAgYm9vbCBpdGVyYXRlTGVmdCA9IGZhbHNlOworICAgICAgICAg
ICAgYm9vbCBpdGVyYXRlUmlnaHQgPSBmYWxzZTsKKyAgICAgICAgICAgIGZ1bmN0aW9uKGN1cnJl
bnQsIGl0ZXJhdGVMZWZ0LCBpdGVyYXRlUmlnaHQpOworICAgICAgICAgICAgaWYgKGl0ZXJhdGVM
ZWZ0ICYmIGN1cnJlbnQubGVmdCgpKQorICAgICAgICAgICAgICAgIHRvSXRlcmF0ZS5hcHBlbmQo
Y3VycmVudC5sZWZ0KCkpOworICAgICAgICAgICAgaWYgKGl0ZXJhdGVSaWdodCAmJiBjdXJyZW50
LnJpZ2h0KCkpCisgICAgICAgICAgICAgICAgdG9JdGVyYXRlLmFwcGVuZChjdXJyZW50LnJpZ2h0
KCkpOworICAgICAgICB9CisgICAgfQogICAgIAogICAgIE5vZGVUeXBlKiBmaXJzdCgpIGNvbnN0
CiAgICAgewpJbmRleDogU291cmNlL1dURi93dGYvU3RkTGliRXh0cmFzLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dURi93dGYvU3RkTGliRXh0cmFzLmgJKHJldmlzaW9uIDI1ODk5NikKKysrIFNv
dXJjZS9XVEYvd3RmL1N0ZExpYkV4dHJhcy5oCSh3b3JraW5nIGNvcHkpCkBAIC00ODksNiArNDg5
LDE5IEBAIEFMV0FZU19JTkxJTkUgZGVjbHR5cGUoYXV0bykgbWFrZVVuaXF1ZVcKICAgICByZXR1
cm4gc3RkOjptYWtlX3VuaXF1ZTxUPihzdGQ6OmZvcndhcmQ8QXJncz4oYXJncykuLi4pOwogfQog
Cit0ZW1wbGF0ZSA8dHlwZW5hbWUgUmVzdWx0VHlwZSwgc2l6ZV90Li4uIElzLCB0eXBlbmFtZSAu
Li5BcmdzPgorY29uc3RleHByIGF1dG8gY29uc3RydWN0Rml4ZWRTaXplQXJyYXlXaXRoQXJndW1l
bnRzSW1wbChzdGQ6OmluZGV4X3NlcXVlbmNlPElzLi4uPiwgQXJncyYmLi4uIGFyZ3MpIC0+IHN0
ZDo6YXJyYXk8UmVzdWx0VHlwZSwgc2l6ZW9mLi4uKElzKT4KK3sKKyAgICByZXR1cm4geyAoKHZv
aWQpSXMsIFJlc3VsdFR5cGUgeyBzdGQ6OmZvcndhcmQ8QXJncz4oYXJncykuLi4gfSkuLi4gfTsK
K30KKworLy8gQ29uc3RydWN0IGFuIHN0ZDo6YXJyYXkgd2l0aCBOIGVsZW1lbnRzIG9mIFJlc3Vs
dFR5cGUsIHBhc3NpbmcgQXJncyB0byBlYWNoIG9mIHRoZSBOIGNvbnN0cnVjdG9ycy4KK3RlbXBs
YXRlPHR5cGVuYW1lIFJlc3VsdFR5cGUsIHNpemVfdCBOLCB0eXBlbmFtZSAuLi5BcmdzPgorY29u
c3RleHByIGF1dG8gY29uc3RydWN0Rml4ZWRTaXplQXJyYXlXaXRoQXJndW1lbnRzKEFyZ3MmJi4u
LiBhcmdzKSAtPiBkZWNsdHlwZShhdXRvKQoreworICAgIGF1dG8gdHVwbGUgPSBzdGQ6Om1ha2Vf
aW5kZXhfc2VxdWVuY2U8Tj4oKTsKKyAgICByZXR1cm4gY29uc3RydWN0Rml4ZWRTaXplQXJyYXlX
aXRoQXJndW1lbnRzSW1wbDxSZXN1bHRUeXBlPih0dXBsZSwgc3RkOjpmb3J3YXJkPEFyZ3M+KGFy
Z3MpLi4uKTsKK30KIAogfSAvLyBuYW1lc3BhY2UgV1RGCiAKQEAgLTUxNCwzICs1MjcsNCBAQCB1
c2luZyBXVEY6OnNhZmVDYXN0OwogdXNpbmcgV1RGOjp0cnlCaW5hcnlTZWFyY2g7CiB1c2luZyBX
VEY6Om1ha2VVbmlxdWU7CiB1c2luZyBXVEY6Om1ha2VVbmlxdWVXaXRob3V0RmFzdE1hbGxvY0No
ZWNrOwordXNpbmcgV1RGOjpjb25zdHJ1Y3RGaXhlZFNpemVBcnJheVdpdGhBcmd1bWVudHM7Cklu
ZGV4OiBUb29scy9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvQ2hhbmdlTG9nCShyZXZp
c2lvbiAyNTkwMDUpCisrKyBUb29scy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyAr
MSwxNyBAQAorMjAyMC0wMy0yNSAgU2FhbSBCYXJhdGkgIDxzYmFyYXRpQGFwcGxlLmNvbT4KKwor
ICAgICAgICBJbXBsZW1lbnQgMUdCIG9mIGV4ZWN1dGFibGUgbWVtb3J5IG9uIGFybTY0CisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMDg0OTAKKyAgICAg
ICAgPHJkYXI6Ly9wcm9ibGVtLzYwNzk3MTI3PgorCisgICAgICAgIFJldmlld2VkIGJ5IEtlaXRo
IE1pbGxlci4KKworICAgICAgICAqIFNjcmlwdHMvcnVuLWpzYy1zdHJlc3MtdGVzdHM6CisgICAg
ICAgICogVGVzdFdlYktpdEFQSS9UZXN0cy9XVEYvTWV0YUFsbG9jYXRvci5jcHA6CisgICAgICAg
IChUZXN0V2ViS2l0QVBJOjpURVNUX0YpOgorICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMv
V1RGL1JlZEJsYWNrVHJlZS5jcHA6CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpURVNUX0YpOgor
CiAyMDIwLTAzLTI1ICBBYWthc2ggSmFpbiAgPGFha2FzaF9qYWluQGFwcGxlLmNvbT4KIAogICAg
ICAgICBbZXdzXSBjb21taXQtcXVldWUgc2hvdWxkIGNvbW1lbnQgb24gYnVnIGlmIGl0IGZhaWxz
IHRvIGZpbmQgYW55IG1vZGlmaWVkIENoYW5nZUxvZwpJbmRleDogVG9vbHMvU2NyaXB0cy9ydW4t
anNjLXN0cmVzcy10ZXN0cwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9TY3JpcHRzL3J1bi1qc2Mtc3Ry
ZXNzLXRlc3RzCShyZXZpc2lvbiAyNTg5OTYpCisrKyBUb29scy9TY3JpcHRzL3J1bi1qc2Mtc3Ry
ZXNzLXRlc3RzCSh3b3JraW5nIGNvcHkpCkBAIC01MCw2ICs1MCw3IEBAIFNDUklQVFNfUEFUSCA9
IFRISVNfU0NSSVBUX1BBVEguZGlybmFtZQogV0VCS0lUX1BBVEggPSBTQ1JJUFRTX1BBVEguZGly
bmFtZS5kaXJuYW1lCiBMQVlPVVRURVNUU19QQVRIID0gV0VCS0lUX1BBVEggKyAiTGF5b3V0VGVz
dHMiCiBXQVNNVEVTVFNfUEFUSCA9IFdFQktJVF9QQVRIICsgIkpTVGVzdHMvd2FzbSIKK0pFVFNU
UkVBTTJfUEFUSCA9IFdFQktJVF9QQVRIICsgIlBlcmZvcm1hbmNlVGVzdHMvSmV0U3RyZWFtMiIK
IENIQUtSQVRFU1RTX1BBVEggPSBXRUJLSVRfUEFUSCArICJKU1Rlc3RzL0NoYWtyYUNvcmUvdGVz
dCIKIHJhaXNlIHVubGVzcyBTQ1JJUFRTX1BBVEguYmFzZW5hbWUudG9fcyA9PSAiU2NyaXB0cyIK
IHJhaXNlIHVubGVzcyBTQ1JJUFRTX1BBVEguZGlybmFtZS5iYXNlbmFtZS50b19zID09ICJUb29s
cyIKQEAgLTY2OSw3ICs2NzAsNyBAQCBkZWYgcnVuTm9DSklUVmFsaWRhdGUoKm9wdGlvbmFsVGVz
dFNwZWNpCiBlbmQKIAogZGVmIHJ1bk5vQ0pJVFZhbGlkYXRlUGhhc2VzKCpvcHRpb25hbFRlc3RT
cGVjaWZpY09wdGlvbnMpCi0gICAgcnVuKCJuby1jaml0LXZhbGlkYXRlLXBoYXNlcyIsICItLXZh
bGlkYXRlQnl0ZWNvZGU9dHJ1ZSIsICItLXZhbGlkYXRlR3JhcGhBdEVhY2hQaGFzZT10cnVlIiwg
Ii0tdXNlU291cmNlUHJvdmlkZXJDYWNoZT1mYWxzZSIsICooTk9fQ0pJVF9PUFRJT05TICsgb3B0
aW9uYWxUZXN0U3BlY2lmaWNPcHRpb25zKSkKKyAgICBydW4oIm5vLWNqaXQtdmFsaWRhdGUtcGhh
c2VzIiwgIi0tdmFsaWRhdGVCeXRlY29kZT10cnVlIiwgIi0tdmFsaWRhdGVHcmFwaEF0RWFjaFBo
YXNlPXRydWUiLCAiLS11c2VTb3VyY2VQcm92aWRlckNhY2hlPWZhbHNlIiwgIi0tdXNlUmFuZG9t
aXppbmdFeGVjdXRhYmxlSXNsYW5kQWxsb2NhdGlvbj10cnVlIiwgKihOT19DSklUX09QVElPTlMg
KyBvcHRpb25hbFRlc3RTcGVjaWZpY09wdGlvbnMpKQogZW5kCiAKIGRlZiBydW5Ob0NKSVRDb2xs
ZWN0Q29udGludW91c2x5KCpvcHRpb25hbFRlc3RTcGVjaWZpY09wdGlvbnMpCkBAIC03MDYsNyAr
NzA3LDcgQEAgZGVmIHJ1bkZUTE5vQ0pJVCgqb3B0aW9uYWxUZXN0U3BlY2lmaWNPcAogZW5kCiAK
IGRlZiBydW5GVExOb0NKSVRCM08wKCpvcHRpb25hbFRlc3RTcGVjaWZpY09wdGlvbnMpCi0gICAg
cnVuKCJmdGwtbm8tY2ppdC1iM28wIiwgIi0tdXNlQXJyYXlBbGxvY2F0aW9uUHJvZmlsaW5nPWZh
bHNlIiwgIi0tZm9yY2VQb2x5UHJvdG89dHJ1ZSIsICooRlRMX09QVElPTlMgKyBOT19DSklUX09Q
VElPTlMgKyBCM08wX09QVElPTlMgKyBGT1JDRV9MTElOVF9FWElUX09QVElPTlMgKyBvcHRpb25h
bFRlc3RTcGVjaWZpY09wdGlvbnMpKQorICAgIHJ1bigiZnRsLW5vLWNqaXQtYjNvMCIsICItLXVz
ZUFycmF5QWxsb2NhdGlvblByb2ZpbGluZz1mYWxzZSIsICItLWZvcmNlUG9seVByb3RvPXRydWUi
LCAiLS11c2VSYW5kb21pemluZ0V4ZWN1dGFibGVJc2xhbmRBbGxvY2F0aW9uPXRydWUiLCAqKEZU
TF9PUFRJT05TICsgTk9fQ0pJVF9PUFRJT05TICsgQjNPMF9PUFRJT05TICsgRk9SQ0VfTExJTlRf
RVhJVF9PUFRJT05TICsgb3B0aW9uYWxUZXN0U3BlY2lmaWNPcHRpb25zKSkKIGVuZAogCiBkZWYg
cnVuRlRMTm9DSklUVmFsaWRhdGUoKm9wdGlvbmFsVGVzdFNwZWNpZmljT3B0aW9ucykKQEAgLTcz
NCw3ICs3MzUsNyBAQCBkZWYgcnVuREZHRWFnZXJOb0NKSVRWYWxpZGF0ZSgqb3B0aW9uYWxUCiBl
bmQKIAogZGVmIHJ1bkZUTEVhZ2VyKCpvcHRpb25hbFRlc3RTcGVjaWZpY09wdGlvbnMpCi0gICAg
cnVuKCJmdGwtZWFnZXIiLCAiLS1haXJGb3JjZUJyaWdnc0FsbG9jYXRvcj10cnVlIiwgIi0tZm9y
Y2VQb2x5UHJvdG89dHJ1ZSIsICooRlRMX09QVElPTlMgKyBFQUdFUl9PUFRJT05TICsgQ09MTEVD
VF9DT05USU5VT1VTTFlfT1BUSU9OUyArIG9wdGlvbmFsVGVzdFNwZWNpZmljT3B0aW9ucykpCisg
ICAgcnVuKCJmdGwtZWFnZXIiLCAiLS1haXJGb3JjZUJyaWdnc0FsbG9jYXRvcj10cnVlIiwgIi0t
dXNlUmFuZG9taXppbmdFeGVjdXRhYmxlSXNsYW5kQWxsb2NhdGlvbj10cnVlIiwgIi0tZm9yY2VQ
b2x5UHJvdG89dHJ1ZSIsICooRlRMX09QVElPTlMgKyBFQUdFUl9PUFRJT05TICsgQ09MTEVDVF9D
T05USU5VT1VTTFlfT1BUSU9OUyArIG9wdGlvbmFsVGVzdFNwZWNpZmljT3B0aW9ucykpCiBlbmQK
IAogZGVmIHJ1bkZUTEVhZ2VyV2F0Y2hkb2coKm9wdGlvbmFsVGVzdFNwZWNpZmljT3B0aW9ucykK
QEAgLTc3NSw3ICs3NzYsNyBAQCBkZWYgcnVuTm9DSklUKCpvcHRpb25hbFRlc3RTcGVjaWZpY09w
dGlvCiBlbmQKIAogZGVmIHJ1bkVhZ2VySmV0dGlzb25Ob0NKSVQoKm9wdGlvbmFsVGVzdFNwZWNp
ZmljT3B0aW9ucykKLSAgICBydW4oImVhZ2VyLWpldHRpc29uLW5vLWNqaXQiLCAiLS1mb3JjZUNv
ZGVCbG9ja1RvSmV0dGlzb25EdWVUb09sZEFnZT10cnVlIiwgKihOT19DSklUX09QVElPTlMgKyBv
cHRpb25hbFRlc3RTcGVjaWZpY09wdGlvbnMpKQorICAgIHJ1bigiZWFnZXItamV0dGlzb24tbm8t
Y2ppdCIsICItLXVzZVJhbmRvbWl6aW5nRXhlY3V0YWJsZUlzbGFuZEFsbG9jYXRpb249dHJ1ZSIs
ICItLWZvcmNlQ29kZUJsb2NrVG9KZXR0aXNvbkR1ZVRvT2xkQWdlPXRydWUiLCAqKE5PX0NKSVRf
T1BUSU9OUyArIG9wdGlvbmFsVGVzdFNwZWNpZmljT3B0aW9ucykpCiBlbmQKIAogZGVmIHJ1blNo
YWRvd0NoaWNrZW4oKm9wdGlvbmFsVGVzdFNwZWNpZmljT3B0aW9ucykKQEAgLTEwODMsMTYgKzEw
ODQsMzcgQEAgZGVmIHJ1bldlYkFzc2VtYmx5CiAgICAgcnVuKCJkZWZhdWx0LXdhc20iLCAiLW0i
LCAqRlRMX09QVElPTlMpCiAgICAgaWYgJG1vZGUgIT0gInF1aWNrIgogICAgICAgICBydW4oIndh
c20tbm8tY2ppdC15ZXMtdGxzLWNvbnRleHQiLCAiLW0iLCAiLS11c2VGYXN0VExTRm9yV2FzbUNv
bnRleHQ9dHJ1ZSIsICooRlRMX09QVElPTlMgKyBOT19DSklUX09QVElPTlMpKQotICAgICAgICBy
dW4oIndhc20tZWFnZXIiLCAiLW0iLCAqKEZUTF9PUFRJT05TICsgRUFHRVJfT1BUSU9OUykpCi0g
ICAgICAgIHJ1bigid2FzbS1lYWdlci1qZXR0aXNvbiIsICItbSIsICItLWZvcmNlQ29kZUJsb2Nr
VG9KZXR0aXNvbkR1ZVRvT2xkQWdlPXRydWUiLCAqRlRMX09QVElPTlMpCisgICAgICAgIHJ1bigi
d2FzbS1lYWdlciIsICItbSIsICItLXVzZVJhbmRvbWl6aW5nRXhlY3V0YWJsZUlzbGFuZEFsbG9j
YXRpb249dHJ1ZSIsICooRlRMX09QVElPTlMgKyBFQUdFUl9PUFRJT05TKSkKKyAgICAgICAgcnVu
KCJ3YXNtLWVhZ2VyLWpldHRpc29uIiwgIi1tIiwgIi0tZm9yY2VDb2RlQmxvY2tUb0pldHRpc29u
RHVlVG9PbGRBZ2U9dHJ1ZSIsICItLXVzZVJhbmRvbWl6aW5nRXhlY3V0YWJsZUlzbGFuZEFsbG9j
YXRpb249dHJ1ZSIsICpGVExfT1BUSU9OUykKICAgICAgICAgcnVuKCJ3YXNtLW5vLXRscy1jb250
ZXh0IiwgIi1tIiwgIi0tdXNlRmFzdFRMU0Zvcldhc21Db250ZXh0PWZhbHNlIiwgKkZUTF9PUFRJ
T05TKQogICAgICAgICBydW4oIndhc20tc2xvdy1tZW1vcnkiLCAiLW0iLCAiLS11c2VXZWJBc3Nl
bWJseUZhc3RNZW1vcnk9ZmFsc2UiLCAqRlRMX09QVElPTlMpCiAgICAgICAgIHJ1bigid2FzbS1i
MyIsICItbSIsICItLXVzZVdhc21MTEludD1mYWxzZSIsICItLXdhc21CQlFVc2VzQWlyPWZhbHNl
IiwgKkZUTF9PUFRJT05TKQotICAgICAgICBydW4oIndhc20tYWlyIiwgIi1tIiwgIi0tdXNlV2Fz
bUxMSW50PWZhbHNlIiwgKkZUTF9PUFRJT05TKQorICAgICAgICBydW4oIndhc20tYWlyIiwgIi1t
IiwgIi0tdXNlV2FzbUxMSW50PWZhbHNlIiwgIi0tdXNlUmFuZG9taXppbmdFeGVjdXRhYmxlSXNs
YW5kQWxsb2NhdGlvbj10cnVlIiwgKkZUTF9PUFRJT05TKQogICAgICAgICBydW4oIndhc20tY29s
bGVjdC1jb250aW51b3VzbHkiLCAiLW0iLCAiLS1jb2xsZWN0Q29udGludW91c2x5PXRydWUiLCAq
RlRMX09QVElPTlMpIGlmIHNob3VsZENvbGxlY3RDb250aW51b3VzbHk/CiAgICAgZW5kCiBlbmQK
IAorZGVmIHJ1bldlYkFzc2VtYmx5SmV0U3RyZWFtMgorICAgIHJldHVybiBpZiAhJGppdFRlc3Rz
CisgICAgcmV0dXJuIGlmICEkaXNGVExQbGF0Zm9ybQorCisgICAgcHJlcGFyZUV4dHJhQWJzb2x1
dGVGaWxlcyhKRVRTVFJFQU0yX1BBVEgsIFsiSmV0U3RyZWFtRHJpdmVyLmpzIl0pCisgICAgcHJl
cGFyZUV4dHJhUmVsYXRpdmVGaWxlc1dpdGhCYXNlRGlyZWN0b3J5KERpcltKRVRTVFJFQU0yX1BB
VEggKyAid2FzbSIgKyAiKi5qcyJdLm1hcCB7IHxmfCAid2FzbS8iICsgRmlsZS5iYXNlbmFtZShm
KSB9LCAkY29sbGVjdGlvbi5kaXJuYW1lLCAkZXh0cmFGaWxlc0Jhc2VEaXIuZGlybmFtZSkKKyAg
ICBwcmVwYXJlRXh0cmFSZWxhdGl2ZUZpbGVzV2l0aEJhc2VEaXJlY3RvcnkoRGlyW0pFVFNUUkVB
TTJfUEFUSCArICJ3YXNtIiArICIqLndhc20iXS5tYXAgeyB8ZnwgIndhc20vIiArIEZpbGUuYmFz
ZW5hbWUoZikgfSwgJGNvbGxlY3Rpb24uZGlybmFtZSwgJGV4dHJhRmlsZXNCYXNlRGlyLmRpcm5h
bWUpCisKKyAgICBydW4oImRlZmF1bHQtd2FzbSIsICpGVExfT1BUSU9OUykKKyAgICBpZiAkbW9k
ZSAhPSAicXVpY2siCisgICAgICAgIHJ1bigid2FzbS1uby1jaml0LXllcy10bHMtY29udGV4dCIs
ICItLXVzZUZhc3RUTFNGb3JXYXNtQ29udGV4dD10cnVlIiwgKihGVExfT1BUSU9OUyArIE5PX0NK
SVRfT1BUSU9OUykpCisgICAgICAgIHJ1bigid2FzbS1lYWdlciIsICItLXVzZVJhbmRvbWl6aW5n
RXhlY3V0YWJsZUlzbGFuZEFsbG9jYXRpb249dHJ1ZSIsICooRlRMX09QVElPTlMgKyBFQUdFUl9P
UFRJT05TKSkKKyAgICAgICAgcnVuKCJ3YXNtLWVhZ2VyLWpldHRpc29uIiwgIi0tZm9yY2VDb2Rl
QmxvY2tUb0pldHRpc29uRHVlVG9PbGRBZ2U9dHJ1ZSIsICpGVExfT1BUSU9OUykKKyAgICAgICAg
cnVuKCJ3YXNtLW5vLXRscy1jb250ZXh0IiwgIi0tdXNlRmFzdFRMU0Zvcldhc21Db250ZXh0PWZh
bHNlIiwgKkZUTF9PUFRJT05TKQorICAgICAgICBydW4oIndhc20tc2xvdy1tZW1vcnkiLCAiLS11
c2VXZWJBc3NlbWJseUZhc3RNZW1vcnk9ZmFsc2UiLCAqRlRMX09QVElPTlMpCisgICAgICAgIHJ1
bigid2FzbS1iMyIsICItLXVzZVdhc21MTEludD1mYWxzZSIsICItLXdhc21CQlFVc2VzQWlyPWZh
bHNlIiwgKkZUTF9PUFRJT05TKQorICAgICAgICBydW4oIndhc20tYWlyIiwgIi0tdXNlV2FzbUxM
SW50PWZhbHNlIiwgIi0tdXNlUmFuZG9taXppbmdFeGVjdXRhYmxlSXNsYW5kQWxsb2NhdGlvbj10
cnVlIiwgKkZUTF9PUFRJT05TKQorICAgICAgICBydW4oIndhc20tY29sbGVjdC1jb250aW51b3Vz
bHkiLCAiLS1jb2xsZWN0Q29udGludW91c2x5PXRydWUiLCAqRlRMX09QVElPTlMpIGlmIHNob3Vs
ZENvbGxlY3RDb250aW51b3VzbHk/CisgICAgZW5kCitlbmQKKwogZGVmIHJ1bldlYkFzc2VtYmx5
U3VpdGUoKm9wdGlvbmFsVGVzdFNwZWNpZmljT3B0aW9ucykKICAgICByZXR1cm4gaWYgISRqaXRU
ZXN0cwogICAgIHJldHVybiBpZiAhJGlzRlRMUGxhdGZvcm0KQEAgLTExMDMsMTEgKzExMjUsMTEg
QEAgZGVmIHJ1bldlYkFzc2VtYmx5U3VpdGUoKm9wdGlvbmFsVGVzdFNwZQogICAgIGlmICRtb2Rl
ICE9ICJxdWljayIKICAgICAgICAgcnVuKCJ3YXNtLW5vLWNqaXQteWVzLXRscy1jb250ZXh0Iiwg
Ii1tIiwgIi0tdXNlRmFzdFRMU0Zvcldhc21Db250ZXh0PXRydWUiLCAqKEZUTF9PUFRJT05TICsg
Tk9fQ0pJVF9PUFRJT05TICsgb3B0aW9uYWxUZXN0U3BlY2lmaWNPcHRpb25zKSkKICAgICAgICAg
cnVuKCJ3YXNtLWVhZ2VyIiwgIi1tIiwgKihGVExfT1BUSU9OUyArIEVBR0VSX09QVElPTlMgKyBv
cHRpb25hbFRlc3RTcGVjaWZpY09wdGlvbnMpKQotICAgICAgICBydW4oIndhc20tZWFnZXItamV0
dGlzb24iLCAiLW0iLCAiLS1mb3JjZUNvZGVCbG9ja1RvSmV0dGlzb25EdWVUb09sZEFnZT10cnVl
IiwgKihGVExfT1BUSU9OUyArIG9wdGlvbmFsVGVzdFNwZWNpZmljT3B0aW9ucykpCisgICAgICAg
IHJ1bigid2FzbS1lYWdlci1qZXR0aXNvbiIsICItbSIsICItLWZvcmNlQ29kZUJsb2NrVG9KZXR0
aXNvbkR1ZVRvT2xkQWdlPXRydWUiLCAiLS11c2VSYW5kb21pemluZ0V4ZWN1dGFibGVJc2xhbmRB
bGxvY2F0aW9uPXRydWUiLCAqKEZUTF9PUFRJT05TICsgb3B0aW9uYWxUZXN0U3BlY2lmaWNPcHRp
b25zKSkKICAgICAgICAgcnVuKCJ3YXNtLW5vLXRscy1jb250ZXh0IiwgIi1tIiwgIi0tdXNlRmFz
dFRMU0Zvcldhc21Db250ZXh0PWZhbHNlIiwgKihGVExfT1BUSU9OUyArIG9wdGlvbmFsVGVzdFNw
ZWNpZmljT3B0aW9ucykpCiAgICAgICAgIHJ1bigid2FzbS1zbG93LW1lbW9yeSIsICItbSIsICIt
LXVzZVdlYkFzc2VtYmx5RmFzdE1lbW9yeT1mYWxzZSIsICooRlRMX09QVElPTlMgKyBvcHRpb25h
bFRlc3RTcGVjaWZpY09wdGlvbnMpKQogICAgICAgICBydW4oIndhc20tYjMiLCAiLW0iLCAiLS11
c2VXYXNtTExJbnQ9ZmFsc2UiLCAiLS13YXNtQkJRVXNlc0Fpcj1mYWxzZSIsICooRlRMX09QVElP
TlMgKyBvcHRpb25hbFRlc3RTcGVjaWZpY09wdGlvbnMpKQotICAgICAgICBydW4oIndhc20tYWly
IiwgIi1tIiwgIi0tdXNlV2FzbUxMSW50PWZhbHNlIiwgKihGVExfT1BUSU9OUyArIG9wdGlvbmFs
VGVzdFNwZWNpZmljT3B0aW9ucykpCisgICAgICAgIHJ1bigid2FzbS1haXIiLCAiLW0iLCAiLS11
c2VXYXNtTExJbnQ9ZmFsc2UiLCAiLS11c2VSYW5kb21pemluZ0V4ZWN1dGFibGVJc2xhbmRBbGxv
Y2F0aW9uPXRydWUiLCAqKEZUTF9PUFRJT05TICsgb3B0aW9uYWxUZXN0U3BlY2lmaWNPcHRpb25z
KSkKICAgICAgICAgcnVuKCJ3YXNtLWNvbGxlY3QtY29udGludW91c2x5IiwgIi1tIiwgIi0tY29s
bGVjdENvbnRpbnVvdXNseT10cnVlIiwgKihGVExfT1BUSU9OUyArIG9wdGlvbmFsVGVzdFNwZWNp
ZmljT3B0aW9ucykpIGlmIHNob3VsZENvbGxlY3RDb250aW51b3VzbHk/CiAgICAgZW5kCiBlbmQK
QEAgLTExMzMsMTEgKzExNTUsMTEgQEAgZGVmIHJ1bldlYkFzc2VtYmx5V2l0aEhhcm5lc3MoKm9w
dGlvbmFsVAogICAgIGlmICRtb2RlICE9ICJxdWljayIKICAgICAgICAgcnVuSGFybmVzc1Rlc3Qo
Indhc20tbm8tY2ppdC15ZXMtdGxzLWNvbnRleHQiLCAiLS11c2VGYXN0VExTRm9yV2FzbUNvbnRl
eHQ9dHJ1ZSIsICooRlRMX09QVElPTlMgKyBOT19DSklUX09QVElPTlMgKyBvcHRpb25hbFRlc3RT
cGVjaWZpY09wdGlvbnMpKQogICAgICAgICBydW5IYXJuZXNzVGVzdCgid2FzbS1lYWdlciIsICoo
RlRMX09QVElPTlMgKyBFQUdFUl9PUFRJT05TICsgb3B0aW9uYWxUZXN0U3BlY2lmaWNPcHRpb25z
KSkKLSAgICAgICAgcnVuSGFybmVzc1Rlc3QoIndhc20tZWFnZXItamV0dGlzb24iLCAiLS1mb3Jj
ZUNvZGVCbG9ja1RvSmV0dGlzb25EdWVUb09sZEFnZT10cnVlIiwgKihGVExfT1BUSU9OUyArIG9w
dGlvbmFsVGVzdFNwZWNpZmljT3B0aW9ucykpCisgICAgICAgIHJ1bkhhcm5lc3NUZXN0KCJ3YXNt
LWVhZ2VyLWpldHRpc29uIiwgIi0tZm9yY2VDb2RlQmxvY2tUb0pldHRpc29uRHVlVG9PbGRBZ2U9
dHJ1ZSIsICItLXVzZVJhbmRvbWl6aW5nRXhlY3V0YWJsZUlzbGFuZEFsbG9jYXRpb249dHJ1ZSIs
ICooRlRMX09QVElPTlMgKyBvcHRpb25hbFRlc3RTcGVjaWZpY09wdGlvbnMpKQogICAgICAgICBy
dW5IYXJuZXNzVGVzdCgid2FzbS1uby10bHMtY29udGV4dCIsICItLXVzZUZhc3RUTFNGb3JXYXNt
Q29udGV4dD1mYWxzZSIsICooRlRMX09QVElPTlMgKyBvcHRpb25hbFRlc3RTcGVjaWZpY09wdGlv
bnMpKQogICAgICAgICBydW5IYXJuZXNzVGVzdCgid2FzbS1zbG93LW1lbW9yeSIsICItLXVzZVdl
YkFzc2VtYmx5RmFzdE1lbW9yeT1mYWxzZSIsICooRlRMX09QVElPTlMgKyBvcHRpb25hbFRlc3RT
cGVjaWZpY09wdGlvbnMpKQogICAgICAgICBydW5IYXJuZXNzVGVzdCgid2FzbS1iMyIsICItLXVz
ZVdhc21MTEludD1mYWxzZSIsICItLXdhc21CQlFVc2VzQWlyPWZhbHNlIiwgKihGVExfT1BUSU9O
UyArIG9wdGlvbmFsVGVzdFNwZWNpZmljT3B0aW9ucykpCi0gICAgICAgIHJ1bkhhcm5lc3NUZXN0
KCJ3YXNtLW5vLWFpciIsICItLXVzZVdhc21MTEludD1mYWxzZSIsICooRlRMX09QVElPTlMgKyBv
cHRpb25hbFRlc3RTcGVjaWZpY09wdGlvbnMpKQorICAgICAgICBydW5IYXJuZXNzVGVzdCgid2Fz
bS1uby1haXIiLCAiLS11c2VXYXNtTExJbnQ9ZmFsc2UiLCAiLS11c2VSYW5kb21pemluZ0V4ZWN1
dGFibGVJc2xhbmRBbGxvY2F0aW9uPXRydWUiLCAqKEZUTF9PUFRJT05TICsgb3B0aW9uYWxUZXN0
U3BlY2lmaWNPcHRpb25zKSkKICAgICAgICAgcnVuSGFybmVzc1Rlc3QoIndhc20tY29sbGVjdC1j
b250aW51b3VzbHkiLCAiLS1jb2xsZWN0Q29udGludW91c2x5PXRydWUiLCAqKEZUTF9PUFRJT05T
ICsgb3B0aW9uYWxUZXN0U3BlY2lmaWNPcHRpb25zKSkgaWYgc2hvdWxkQ29sbGVjdENvbnRpbnVv
dXNseT8KICAgICBlbmQKIGVuZApAQCAtMTE1NCwxMCArMTE3NiwxMCBAQCBkZWYgcnVuV2ViQXNz
ZW1ibHlFbXNjcmlwdGVuKG1vZGUpCiAgICAgcnVuKCJkZWZhdWx0LXdhc20iLCAqRlRMX09QVElP
TlMpCiAgICAgaWYgJG1vZGUgIT0gInF1aWNrIgogICAgICAgICBydW4oIndhc20tbm8tY2ppdC15
ZXMtdGxzLWNvbnRleHQiLCAiLS11c2VGYXN0VExTRm9yV2FzbUNvbnRleHQ9dHJ1ZSIsICooRlRM
X09QVElPTlMgKyBOT19DSklUX09QVElPTlMpKQotICAgICAgICBydW4oIndhc20tZWFnZXItamV0
dGlzb24iLCAiLS1mb3JjZUNvZGVCbG9ja1RvSmV0dGlzb25EdWVUb09sZEFnZT10cnVlIiwgKkZU
TF9PUFRJT05TKQorICAgICAgICBydW4oIndhc20tZWFnZXItamV0dGlzb24iLCAiLS1mb3JjZUNv
ZGVCbG9ja1RvSmV0dGlzb25EdWVUb09sZEFnZT10cnVlIiwgIi0tdXNlUmFuZG9taXppbmdFeGVj
dXRhYmxlSXNsYW5kQWxsb2NhdGlvbj10cnVlIiwgKkZUTF9PUFRJT05TKQogICAgICAgICBydW4o
Indhc20tbm8tdGxzLWNvbnRleHQiLCAiLS11c2VGYXN0VExTRm9yV2FzbUNvbnRleHQ9ZmFsc2Ui
LCAqRlRMX09QVElPTlMpCiAgICAgICAgIHJ1bigid2FzbS1iMyIsICItLXVzZVdhc21MTEludD1m
YWxzZSIsICItLXdhc21CQlFVc2VzQWlyPWZhbHNlIiwgKkZUTF9PUFRJT05TKQotICAgICAgICBy
dW4oIndhc20tYWlyIiwgIi0tdXNlV2FzbUxMSW50PWZhbHNlIiwgKkZUTF9PUFRJT05TKQorICAg
ICAgICBydW4oIndhc20tYWlyIiwgIi0tdXNlV2FzbUxMSW50PWZhbHNlIiwgIi0tdXNlUmFuZG9t
aXppbmdFeGVjdXRhYmxlSXNsYW5kQWxsb2NhdGlvbj10cnVlIiwgKkZUTF9PUFRJT05TKQogICAg
ICAgICBydW4oIndhc20tY29sbGVjdC1jb250aW51b3VzbHkiLCAiLS1jb2xsZWN0Q29udGludW91
c2x5PXRydWUiLCAqRlRMX09QVElPTlMpIGlmIHNob3VsZENvbGxlY3RDb250aW51b3VzbHk/CiAg
ICAgZW5kCiBlbmQKQEAgLTExODAsMTAgKzEyMDIsMTAgQEAgZGVmIHJ1bldlYkFzc2VtYmx5U3Bl
Y1Rlc3QobW9kZSkKICAgICBydW5XaXRoT3V0cHV0SGFuZGxlcigiZGVmYXVsdC13YXNtIiwgbm9p
c3lPdXRwdXRIYW5kbGVyLCAiLi4vc3BlYy1oYXJuZXNzLmpzIiwgKkZUTF9PUFRJT05TKQogICAg
IGlmICRtb2RlICE9ICJxdWljayIKICAgICAgIHJ1bldpdGhPdXRwdXRIYW5kbGVyKCJ3YXNtLW5v
LWNqaXQteWVzLXRscy1jb250ZXh0Iiwgbm9pc3lPdXRwdXRIYW5kbGVyLCAiLi4vc3BlYy1oYXJu
ZXNzLmpzIiwgICItLXVzZUZhc3RUTFNGb3JXYXNtQ29udGV4dD10cnVlIiwgKihGVExfT1BUSU9O
UyArIE5PX0NKSVRfT1BUSU9OUykpCi0gICAgICBydW5XaXRoT3V0cHV0SGFuZGxlcigid2FzbS1l
YWdlci1qZXR0aXNvbiIsIG5vaXN5T3V0cHV0SGFuZGxlciwgIi4uL3NwZWMtaGFybmVzcy5qcyIs
ICItLWZvcmNlQ29kZUJsb2NrVG9KZXR0aXNvbkR1ZVRvT2xkQWdlPXRydWUiLCAqRlRMX09QVElP
TlMpCisgICAgICBydW5XaXRoT3V0cHV0SGFuZGxlcigid2FzbS1lYWdlci1qZXR0aXNvbiIsIG5v
aXN5T3V0cHV0SGFuZGxlciwgIi4uL3NwZWMtaGFybmVzcy5qcyIsICItLWZvcmNlQ29kZUJsb2Nr
VG9KZXR0aXNvbkR1ZVRvT2xkQWdlPXRydWUiLCAiLS11c2VSYW5kb21pemluZ0V4ZWN1dGFibGVJ
c2xhbmRBbGxvY2F0aW9uPXRydWUiLCAqRlRMX09QVElPTlMpCiAgICAgICBydW5XaXRoT3V0cHV0
SGFuZGxlcigid2FzbS1uby10bHMtY29udGV4dCIsIG5vaXN5T3V0cHV0SGFuZGxlciwgIi4uL3Nw
ZWMtaGFybmVzcy5qcyIsICItLXVzZUZhc3RUTFNGb3JXYXNtQ29udGV4dD1mYWxzZSIsICpGVExf
T1BUSU9OUykKICAgICAgIHJ1bldpdGhPdXRwdXRIYW5kbGVyKCJ3YXNtLWIzIiwgbm9pc3lPdXRw
dXRIYW5kbGVyLCAiLi4vc3BlYy1oYXJuZXNzLmpzIiwgIi0tdXNlV2FzbUxMSW50PWZhbHNlIiwg
Ii0td2FzbUJCUVVzZXNBaXI9ZmFsc2UiLCAqRlRMX09QVElPTlMpCi0gICAgICBydW5XaXRoT3V0
cHV0SGFuZGxlcigid2FzbS1haXIiLCBub2lzeU91dHB1dEhhbmRsZXIsICIuLi9zcGVjLWhhcm5l
c3MuanMiLCAiLS11c2VXYXNtTExJbnQ9ZmFsc2UiLCAqRlRMX09QVElPTlMpCisgICAgICBydW5X
aXRoT3V0cHV0SGFuZGxlcigid2FzbS1haXIiLCBub2lzeU91dHB1dEhhbmRsZXIsICIuLi9zcGVj
LWhhcm5lc3MuanMiLCAiLS11c2VXYXNtTExJbnQ9ZmFsc2UiLCAiLS11c2VSYW5kb21pemluZ0V4
ZWN1dGFibGVJc2xhbmRBbGxvY2F0aW9uPXRydWUiLCAqRlRMX09QVElPTlMpCiAgICAgICBydW5X
aXRoT3V0cHV0SGFuZGxlcigid2FzbS1jb2xsZWN0LWNvbnRpbnVvdXNseSIsIG5vaXN5T3V0cHV0
SGFuZGxlciwgIi4uL3NwZWMtaGFybmVzcy5qcyIsICItLWNvbGxlY3RDb250aW51b3VzbHk9dHJ1
ZSIsICpGVExfT1BUSU9OUykgaWYgc2hvdWxkQ29sbGVjdENvbnRpbnVvdXNseT8KICAgICBlbmQK
IGVuZApAQCAtMTM1MiwxNyArMTM3NCwyMSBAQCBkZWYgbm9Ob0xMSW50UnVuTGF5b3V0VGVzdAog
ICAgIGVuZAogZW5kCiAKLWRlZiBwcmVwYXJlRXh0cmFSZWxhdGl2ZUZpbGVzKGV4dHJhRmlsZXMs
IGRlc3RpbmF0aW9uKQorZGVmIHByZXBhcmVFeHRyYVJlbGF0aXZlRmlsZXNXaXRoQmFzZURpcmVj
dG9yeShleHRyYUZpbGVzLCBkZXN0aW5hdGlvbiwgYmFzZURpcmVjdG9yeSkKICAgICBEaXIuY2hk
aXIoJG91dHB1dERpcikgewogICAgICAgICBleHRyYUZpbGVzLmVhY2ggewogICAgICAgICAgICAg
fCBmaWxlIHwKICAgICAgICAgICAgIGRlc3QgPSBkZXN0aW5hdGlvbiArIGZpbGUKICAgICAgICAg
ICAgIEZpbGVVdGlscy5ta2Rpcl9wKGRlc3QuZGlybmFtZSkKLSAgICAgICAgICAgIEZpbGVVdGls
cy5jcCAkZXh0cmFGaWxlc0Jhc2VEaXIgKyBmaWxlLCBkZXN0CisgICAgICAgICAgICBGaWxlVXRp
bHMuY3AgYmFzZURpcmVjdG9yeSArIGZpbGUsIGRlc3QKICAgICAgICAgfQogICAgIH0KIGVuZAog
CitkZWYgcHJlcGFyZUV4dHJhUmVsYXRpdmVGaWxlcyhleHRyYUZpbGVzLCBkZXN0aW5hdGlvbikK
KyAgICBwcmVwYXJlRXh0cmFSZWxhdGl2ZUZpbGVzV2l0aEJhc2VEaXJlY3RvcnkoZXh0cmFGaWxl
cywgZGVzdGluYXRpb24sICRleHRyYUZpbGVzQmFzZURpcikKK2VuZAorCiBkZWYgYmFzZURpckZv
ckNvbGxlY3Rpb24oY29sbGVjdGlvbk5hbWUpCiAgICAgUGF0aG5hbWUoIi50ZXN0cyIpICsgY29s
bGVjdGlvbk5hbWUKIGVuZApJbmRleDogVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XVEYvTWV0
YUFsbG9jYXRvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9X
VEYvTWV0YUFsbG9jYXRvci5jcHAJKHJldmlzaW9uIDI1ODk5NikKKysrIFRvb2xzL1Rlc3RXZWJL
aXRBUEkvVGVzdHMvV1RGL01ldGFBbGxvY2F0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01Miw3
ICs1Miw3IEBAIHB1YmxpYzoKICAgICBjbGFzcyBTaW1wbGVUZXN0QWxsb2NhdG9yOiBwdWJsaWMg
TWV0YUFsbG9jYXRvciB7CiAgICAgcHVibGljOgogICAgICAgICBTaW1wbGVUZXN0QWxsb2NhdG9y
KE1ldGFBbGxvY2F0b3JUZXN0KiBwYXJlbnQpCi0gICAgICAgICAgICA6IE1ldGFBbGxvY2F0b3Io
MzIpCisgICAgICAgICAgICA6IE1ldGFBbGxvY2F0b3IobV9sb2NrLCAzMikKICAgICAgICAgICAg
ICwgbV9wYXJlbnQocGFyZW50KQogICAgICAgICB7CiAgICAgICAgICAgICBhZGRGcmVzaEZyZWVT
cGFjZShyZWludGVycHJldF9jYXN0PHZvaWQqPihiYXNlUGFnZSAqIHBhZ2VTaXplKCkpLCBkZWZh
dWx0UGFnZXNJbkhlYXAgKiBwYWdlU2l6ZSgpKTsKQEAgLTEyOSw2ICsxMjksNyBAQCBwdWJsaWM6
CiAgICAgICAgIH0KICAgICAgICAgCiAgICAgcHJpdmF0ZToKKyAgICAgICAgTG9jayBtX2xvY2s7
CiAgICAgICAgIE1ldGFBbGxvY2F0b3JUZXN0KiBtX3BhcmVudDsKICAgICB9OwogCkBAIC0xOTAs
NyArMTkxLDcgQEAgcHVibGljOgogICAgIAogICAgIE1ldGFBbGxvY2F0b3JIYW5kbGUqIGFsbG9j
YXRlKHNpemVfdCBzaXplSW5CeXRlcywgU2FuaXR5Q2hlY2tNb2RlIHNhbml0eUNoZWNrTW9kZSA9
IFJ1blNhbml0eUNoZWNrKQogICAgIHsKLSAgICAgICAgTWV0YUFsbG9jYXRvckhhbmRsZSogaGFu
ZGxlID0gYWxsb2NhdG9yLT5hbGxvY2F0ZShzaXplSW5CeXRlcywgMCkubGVha1JlZigpOworICAg
ICAgICBNZXRhQWxsb2NhdG9ySGFuZGxlKiBoYW5kbGUgPSBhbGxvY2F0b3ItPmFsbG9jYXRlKHNp
emVJbkJ5dGVzKS5sZWFrUmVmKCk7CiAgICAgICAgIEVYUEVDVF9UUlVFKGhhbmRsZSk7CiAgICAg
ICAgIEVYUEVDVF9FUShoYW5kbGUtPnNpemVJbkJ5dGVzKCksIHNpemVJbkJ5dGVzKTsKICAgICAg
ICAgCkBAIC00NzIsNyArNDczLDcgQEAgcHVibGljOgogICAgICAgICAKICAgICAgICAgc2FuaXR5
Q2hlY2soKTsKICAgICAgICAgCi0gICAgICAgIEVYUEVDVF9UUlVFKCFhbGxvY2F0b3ItPmFsbG9j
YXRlKHNpemVJbkJ5dGVzLCAwKSk7CisgICAgICAgIEVYUEVDVF9UUlVFKCFhbGxvY2F0b3ItPmFs
bG9jYXRlKHNpemVJbkJ5dGVzKSk7CiAgICAgICAgIAogICAgICAgICBmb3IgKHNpemVfdCBpbmRl
eCA9IDA7IGluZGV4IDwgbnVtQWxsb2NhdGlvbnM7ICsraW5kZXgpCiAgICAgICAgICAgICBmcmVl
KGhhbmRsZXMuYXQoaW5kZXgpLCBEb250UnVuU2FuaXR5Q2hlY2spOwpAQCAtNTc5LDcgKzU4MCw3
IEBAIHB1YmxpYzoKICAgICAgICAgc2FuaXR5Q2hlY2soKTsKICAgICAgICAgCiAgICAgICAgIC8v
IEFzc2VydCB0aGF0IHRoZSBoZWFwIGlzIG5vdCBlbXB0eS4KLSAgICAgICAgRVhQRUNUX1RSVUUo
IWFsbG9jYXRvci0+YWxsb2NhdGUoZGVmYXVsdFBhZ2VzSW5IZWFwICogcGFnZVNpemUoKSwgMCkp
OworICAgICAgICBFWFBFQ1RfVFJVRSghYWxsb2NhdG9yLT5hbGxvY2F0ZShkZWZhdWx0UGFnZXNJ
bkhlYXAgKiBwYWdlU2l6ZSgpKSk7CiAgICAgICAgIAogICAgICAgICAvLyBBbGxvY2F0ZSB0aGUg
cmVtYWluZGVyIG9mIHRoZSBoZWFwLgogICAgICAgICBNZXRhQWxsb2NhdG9ySGFuZGxlKiByZW1h
aW5kZXIgPSBhbGxvY2F0ZShkZWZhdWx0UGFnZXNJbkhlYXAgKiBwYWdlU2l6ZSgpIC0gc2Vjb25k
U2l6ZSk7CkBAIC01OTcsMTIgKzU5OCwxMiBAQCBwdWJsaWM6CiAgICAgCiAgICAgdm9pZCB0ZXN0
RGVtYW5kQWxsb2NDb2FsZXNjZShzaXplX3QgZmlyc3RTaXplLCBzaXplX3QgbnVtUGFnZXMsIHNp
emVfdCBzZWNvbmRTaXplKQogICAgIHsKLSAgICAgICAgRVhQRUNUX1RSVUUoIWFsbG9jYXRvci0+
YWxsb2NhdGUoKGRlZmF1bHRQYWdlc0luSGVhcCArIG51bVBhZ2VzKSAqIHBhZ2VTaXplKCksIDAp
KTsKKyAgICAgICAgRVhQRUNUX1RSVUUoIWFsbG9jYXRvci0+YWxsb2NhdGUoKGRlZmF1bHRQYWdl
c0luSGVhcCArIG51bVBhZ2VzKSAqIHBhZ2VTaXplKCkpKTsKICAgICAgICAgCiAgICAgICAgIE1l
dGFBbGxvY2F0b3JIYW5kbGUqIGZpcnN0SGFuZGxlID0gYWxsb2NhdGUoZmlyc3RTaXplKTsKICAg
ICAgICAgCi0gICAgICAgIEVYUEVDVF9UUlVFKCFhbGxvY2F0b3ItPmFsbG9jYXRlKHNlY29uZFNp
emUsIDApKTsKLSAgICAgICAgRVhQRUNUX1RSVUUoIWFsbG9jYXRvci0+YWxsb2NhdGUoKGRlZmF1
bHRQYWdlc0luSGVhcCArIG51bVBhZ2VzKSAqIHBhZ2VTaXplKCksIDApKTsKKyAgICAgICAgRVhQ
RUNUX1RSVUUoIWFsbG9jYXRvci0+YWxsb2NhdGUoc2Vjb25kU2l6ZSkpOworICAgICAgICBFWFBF
Q1RfVFJVRSghYWxsb2NhdG9yLT5hbGxvY2F0ZSgoZGVmYXVsdFBhZ2VzSW5IZWFwICsgbnVtUGFn
ZXMpICogcGFnZVNpemUoKSkpOwogICAgICAgICAKICAgICAgICAgY3VycmVudEhlYXBHcm93dGhN
b2RlID0gRm9yVGVzdERlbWFuZEFsbG9jQ29hbGVzY2U7CiAgICAgICAgIGFsbG93QWxsb2NhdGVQ
YWdlcyA9IG51bVBhZ2VzOwpAQCAtNjI2LDEyICs2MjcsMTIgQEAgcHVibGljOgogICAgIHsKICAg
ICAgICAgZnJlZShhbGxvY2F0ZShmaXJzdFNpemUpKTsKICAgICAgICAgZnJlZShhbGxvY2F0ZShk
ZWZhdWx0UGFnZXNJbkhlYXAgKiBwYWdlU2l6ZSgpKSk7Ci0gICAgICAgIEVYUEVDVF9UUlVFKCFh
bGxvY2F0b3ItPmFsbG9jYXRlKChkZWZhdWx0UGFnZXNJbkhlYXAgKyBudW1QYWdlcykgKiBwYWdl
U2l6ZSgpLCAwKSk7CisgICAgICAgIEVYUEVDVF9UUlVFKCFhbGxvY2F0b3ItPmFsbG9jYXRlKChk
ZWZhdWx0UGFnZXNJbkhlYXAgKyBudW1QYWdlcykgKiBwYWdlU2l6ZSgpKSk7CiAgICAgICAgIAog
ICAgICAgICBNZXRhQWxsb2NhdG9ySGFuZGxlKiBmaXJzdEhhbmRsZSA9IGFsbG9jYXRlKGZpcnN0
U2l6ZSk7CiAgICAgICAgIAotICAgICAgICBFWFBFQ1RfVFJVRSghYWxsb2NhdG9yLT5hbGxvY2F0
ZShzZWNvbmRTaXplLCAwKSk7Ci0gICAgICAgIEVYUEVDVF9UUlVFKCFhbGxvY2F0b3ItPmFsbG9j
YXRlKChkZWZhdWx0UGFnZXNJbkhlYXAgKyBudW1QYWdlcykgKiBwYWdlU2l6ZSgpLCAwKSk7Cisg
ICAgICAgIEVYUEVDVF9UUlVFKCFhbGxvY2F0b3ItPmFsbG9jYXRlKHNlY29uZFNpemUpKTsKKyAg
ICAgICAgRVhQRUNUX1RSVUUoIWFsbG9jYXRvci0+YWxsb2NhdGUoKGRlZmF1bHRQYWdlc0luSGVh
cCArIG51bVBhZ2VzKSAqIHBhZ2VTaXplKCkpKTsKICAgICAgICAgCiAgICAgICAgIGN1cnJlbnRI
ZWFwR3Jvd3RoTW9kZSA9IEZvclRlc3REZW1hbmRBbGxvY0RvbnRDb2FsZXNjZTsKICAgICAgICAg
YWxsb3dBbGxvY2F0ZVBhZ2VzID0gbnVtUGFnZXM7CkBAIC02NDUsMTIgKzY0NiwxMiBAQCBwdWJs
aWM6CiAgICAgICAgIAogICAgICAgICByZXF1ZXN0ZWROdW1QYWdlcyA9IDA7CiAgICAgICAgIAot
ICAgICAgICBFWFBFQ1RfVFJVRSghYWxsb2NhdG9yLT5hbGxvY2F0ZSgoZGVmYXVsdFBhZ2VzSW5I
ZWFwICsgbnVtUGFnZXMpICogcGFnZVNpemUoKSwgMCkpOworICAgICAgICBFWFBFQ1RfVFJVRSgh
YWxsb2NhdG9yLT5hbGxvY2F0ZSgoZGVmYXVsdFBhZ2VzSW5IZWFwICsgbnVtUGFnZXMpICogcGFn
ZVNpemUoKSkpOwogCiAgICAgICAgIGZyZWUoZmlyc3RIYW5kbGUpOwogICAgICAgICBmcmVlKHNl
Y29uZEhhbmRsZSk7CiAgICAgICAgIAotICAgICAgICBFWFBFQ1RfVFJVRSghYWxsb2NhdG9yLT5h
bGxvY2F0ZSgoZGVmYXVsdFBhZ2VzSW5IZWFwICsgbnVtUGFnZXMpICogcGFnZVNpemUoKSwgMCkp
OworICAgICAgICBFWFBFQ1RfVFJVRSghYWxsb2NhdG9yLT5hbGxvY2F0ZSgoZGVmYXVsdFBhZ2Vz
SW5IZWFwICsgbnVtUGFnZXMpICogcGFnZVNpemUoKSkpOwogICAgICAgICAKICAgICAgICAgZmly
c3RIYW5kbGUgPSBhbGxvY2F0ZShmaXJzdFNpemUpOwogICAgICAgICBzZWNvbmRIYW5kbGUgPSBh
bGxvY2F0ZShzZWNvbmRTaXplKTsKQEAgLTY3MSw3ICs2NzIsNyBAQCBURVNUX0YoTWV0YUFsbG9j
YXRvclRlc3QsIEFsbG9jWmVybykgICAgCiAgICAgLy8gVGVzdHMgdGhhdCBhbGxvY2F0aW5nIGEg
emVyby1sZW5ndGggYmxvY2sgcmV0dXJucyAwIGFuZAogICAgIC8vIGRvZXMgbm90IGNoYW5nZSBh
bnl0aGluZyBpbiBtZW1vcnkuCiAgICAgCi0gICAgQVNTRVJUKCFhbGxvY2F0b3ItPmFsbG9jYXRl
KDAsIDApKTsKKyAgICBBU1NFUlQoIWFsbG9jYXRvci0+YWxsb2NhdGUoMCkpOwogICAgIAogICAg
IE1ldGFBbGxvY2F0b3JIYW5kbGUqIGZpbmFsID0gYWxsb2NhdGUoZGVmYXVsdFBhZ2VzSW5IZWFw
ICogcGFnZVNpemUoKSk7CiAgICAgRVhQRUNUX0VRKGZpbmFsLT5zdGFydCgpLnVudGFnZ2VkUHRy
KCksIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KGJhc2VQYWdlICogcGFnZVNpemUoKSkpOwpJbmRl
eDogVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XVEYvUmVkQmxhY2tUcmVlLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dURi9SZWRCbGFja1RyZWUuY3BwCShy
ZXZpc2lvbiAyNTg5OTYpCisrKyBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dURi9SZWRCbGFj
a1RyZWUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAxMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTEsIDIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yNyw2ICsyNyw3IEBACiAgKi8KIAogI2luY2x1ZGUg
ImNvbmZpZy5oIgorI2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+CiAjaW5jbHVkZSA8d3RmL1JlZEJs
YWNrVHJlZS5oPgogI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KIApAQCAtMzE5LDQgKzMyMCw4NSBA
QCBURVNUX0YoUmVkQmxhY2tUcmVlVGVzdCwgQmlnZ2VyQmVzdEZpdFNlCiAgICAgdGVzdERyaXZl
cigiK2QrZCtkK2QrZCtkK2QrZCtkK2QrZitmK2YrZitmK2YrZitoK2graStqK2srbCttK28rcCtx
K3IrekBhQGJAY0BkQGVAZkBnQGhAaUBqQGtAbEBtQG5Ab0BwQHFAckBzQHRAdUB2QHdAeEB5QHoi
KTsKIH0KIAorVEVTVF9GKFJlZEJsYWNrVHJlZVRlc3QsIEl0ZXJhdGUpCit7CisgICAgY2xhc3Mg
Tm9kZSA6IHB1YmxpYyBSZWRCbGFja1RyZWU8Tm9kZSwgdW5zaWduZWQ+OjpOb2RlIHsKKyAgICBw
dWJsaWM6CisgICAgICAgIHVuc2lnbmVkIHZhbHVlOworICAgICAgICB1bnNpZ25lZCBrZXkoKSB7
IHJldHVybiB2YWx1ZTsgfQorICAgIH07CisKKyAgICBIYXNoU2V0PHVuc2lnbmVkPiBpdGVtczsK
KyAgICBpdGVtcy5hZGQoMik7CisgICAgaXRlbXMuYWRkKDQyKTsKKyAgICBpdGVtcy5hZGQoNDgp
OworICAgIGl0ZW1zLmFkZCg1NSk7CisgICAgaXRlbXMuYWRkKDczKTsKKyAgICBpdGVtcy5hZGQo
MTA1KTsKKyAgICBpdGVtcy5hZGQoMjAwKTsKKyAgICBpdGVtcy5hZGQoMjUwKTsKKyAgICBpdGVt
cy5hZGQoMzAwKTsKKworICAgIFJlZEJsYWNrVHJlZTxOb2RlLCB1bnNpZ25lZD4gdHJlZTsKKyAg
ICBmb3IgKHVuc2lnbmVkIHZhbHVlIDogaXRlbXMpIHsKKyAgICAgICAgTm9kZSogbm9kZSA9IG5l
dyBOb2RlOworICAgICAgICBub2RlLT52YWx1ZSA9IHZhbHVlOworICAgICAgICB0cmVlLmluc2Vy
dChub2RlKTsKKyAgICB9CisKKyAgICB7CisgICAgICAgIEhhc2hTZXQ8dW5zaWduZWQ+IHRlc3RJ
dGVtczsKKyAgICAgICAgdHJlZS5pdGVyYXRlKFsmXSAoTm9kZSYgbm9kZSwgYm9vbCYgaXRlcmF0
ZUxlZnQsIGJvb2wmIGl0ZXJhdGVSaWdodCkgeworICAgICAgICAgICAgdGVzdEl0ZW1zLmFkZChu
b2RlLnZhbHVlKTsKKyAgICAgICAgICAgIGl0ZXJhdGVMZWZ0ID0gdHJ1ZTsKKyAgICAgICAgICAg
IGl0ZXJhdGVSaWdodCA9IHRydWU7CisgICAgICAgIH0pOworCisgICAgICAgIEVYUEVDVF9FUShp
dGVtcywgdGVzdEl0ZW1zKTsKKyAgICB9CisKKyAgICB7CisgICAgICAgIEhhc2hTZXQ8dW5zaWdu
ZWQ+IGxlc3NUaGFuT3JFcXVhbDczOworICAgICAgICB0cmVlLml0ZXJhdGUoWyZdIChOb2RlJiBu
b2RlLCBib29sJiBpdGVyYXRlTGVmdCwgYm9vbCYgaXRlcmF0ZVJpZ2h0KSB7CisgICAgICAgICAg
ICBpZiAobm9kZS52YWx1ZSA8IDczKSB7CisgICAgICAgICAgICAgICAgaXRlcmF0ZVJpZ2h0ID0g
dHJ1ZTsKKyAgICAgICAgICAgICAgICBpdGVyYXRlTGVmdCA9IHRydWU7CisgICAgICAgICAgICB9
IGVsc2UKKyAgICAgICAgICAgICAgICBpdGVyYXRlTGVmdCA9IHRydWU7CisKKyAgICAgICAgICAg
IGlmIChub2RlLnZhbHVlIDw9IDczKQorICAgICAgICAgICAgICAgIGxlc3NUaGFuT3JFcXVhbDcz
LmFkZChub2RlLnZhbHVlKTsKKyAgICAgICAgfSk7CisKKyAgICAgICAgRVhQRUNUX0VRKGxlc3NU
aGFuT3JFcXVhbDczLnNpemUoKSwgc3RhdGljX2Nhc3Q8c2l6ZV90Pig1KSk7CisgICAgICAgIEVY
UEVDVF9UUlVFKGxlc3NUaGFuT3JFcXVhbDczLmNvbnRhaW5zKDIpKTsKKyAgICAgICAgRVhQRUNU
X1RSVUUobGVzc1RoYW5PckVxdWFsNzMuY29udGFpbnMoNDIpKTsKKyAgICAgICAgRVhQRUNUX1RS
VUUobGVzc1RoYW5PckVxdWFsNzMuY29udGFpbnMoNDgpKTsKKyAgICAgICAgRVhQRUNUX1RSVUUo
bGVzc1RoYW5PckVxdWFsNzMuY29udGFpbnMoNTUpKTsKKyAgICAgICAgRVhQRUNUX1RSVUUobGVz
c1RoYW5PckVxdWFsNzMuY29udGFpbnMoNzMpKTsKKyAgICB9CisKKyAgICB7CisgICAgICAgIEhh
c2hTZXQ8dW5zaWduZWQ+IGdyZWF0ZXJUaGFuNTU7CisgICAgICAgIHRyZWUuaXRlcmF0ZShbJl0g
KE5vZGUmIG5vZGUsIGJvb2wmIGl0ZXJhdGVMZWZ0LCBib29sJiBpdGVyYXRlUmlnaHQpIHsKKyAg
ICAgICAgICAgIGlmIChub2RlLnZhbHVlIDw9IDU1KQorICAgICAgICAgICAgICAgIGl0ZXJhdGVS
aWdodCA9IHRydWU7CisgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICBpdGVyYXRl
TGVmdCA9IHRydWU7CisgICAgICAgICAgICAgICAgaXRlcmF0ZVJpZ2h0ID0gdHJ1ZTsKKyAgICAg
ICAgICAgIH0KKworICAgICAgICAgICAgaWYgKG5vZGUudmFsdWUgPiA1NSkKKyAgICAgICAgICAg
ICAgICBncmVhdGVyVGhhbjU1LmFkZChub2RlLnZhbHVlKTsKKyAgICAgICAgfSk7CisKKyAgICAg
ICAgRVhQRUNUX0VRKGdyZWF0ZXJUaGFuNTUuc2l6ZSgpLCBzdGF0aWNfY2FzdDxzaXplX3Q+KDUp
KTsKKyAgICAgICAgRVhQRUNUX1RSVUUoZ3JlYXRlclRoYW41NS5jb250YWlucyg3MykpOworICAg
ICAgICBFWFBFQ1RfVFJVRShncmVhdGVyVGhhbjU1LmNvbnRhaW5zKDEwNSkpOworICAgICAgICBF
WFBFQ1RfVFJVRShncmVhdGVyVGhhbjU1LmNvbnRhaW5zKDIwMCkpOworICAgICAgICBFWFBFQ1Rf
VFJVRShncmVhdGVyVGhhbjU1LmNvbnRhaW5zKDI1MCkpOworICAgICAgICBFWFBFQ1RfVFJVRShn
cmVhdGVyVGhhbjU1LmNvbnRhaW5zKDMwMCkpOworICAgIH0KK30KKwogfSAvLyBuYW1lc3BhY2Ug
VGVzdFdlYktpdEFQSQo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>394639</attachid>
            <date>2020-03-26 12:29:44 -0700</date>
            <delta_ts>2020-04-06 11:19:58 -0700</delta_ts>
            <desc>patch for landing</desc>
            <filename>c-backup.diff</filename>
            <type>text/plain</type>
            <size>135561</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IEpTVGVzdHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEpTVGVzdHMvQ2hhbmdlTG9n
CShyZXZpc2lvbiAyNTg5OTYpCisrKyBKU1Rlc3RzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpA
QCAtMSwzICsxLDE2IEBACisyMDIwLTAzLTI1ICBTYWFtIEJhcmF0aSAgPHNiYXJhdGlAYXBwbGUu
Y29tPgorCisgICAgICAgIEltcGxlbWVudCAxR0Igb2YgZXhlY3V0YWJsZSBtZW1vcnkgb24gYXJt
NjQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIwODQ5
MAorICAgICAgICA8cmRhcjovL3Byb2JsZW0vNjA3OTcxMjc+CisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgS2VpdGggTWlsbGVyLgorCisgICAgICAgIFJ1biBKZXRTdHJlYW0yIHdhc20gdGVzdHMuCisK
KyAgICAgICAgKiB3YXNtLnlhbWw6CisgICAgICAgICogd2FzbS9sb3dFeGVjdXRhYmxlTWVtb3J5
L2V4ZWN1dGFibGUtbWVtb3J5LW9vbS5qczoKKwogMjAyMC0wMy0yNSAgQWxleGV5IFNodmF5a2Eg
IDxzaHZhaWthbGVzaEBnbWFpbC5jb20+CiAKICAgICAgICAgXGIgZXNjYXBlcyBpbnNpZGUgY2hh
cmFjdGVyIGNsYXNzZXMgc2hvdWxkIGJlIHZhbGlkIGluIFVuaWNvZGUgcGF0dGVybnMKSW5kZXg6
IEpTVGVzdHMvd2FzbS55YW1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEpTVGVzdHMvd2FzbS55YW1sCShyZXZp
c2lvbiAyNTg5OTYpCisrKyBKU1Rlc3RzL3dhc20ueWFtbAkod29ya2luZyBjb3B5KQpAQCAtMjMx
LDMgKzIzMSw2IEBACiAtIHBhdGg6IHdhc20vbW9kdWxlcy9ydW4tZnJvbS13YXNtLndhc20KICAg
Y21kOiBydW5XZWJBc3NlbWJseQogCistIHBhdGg6IC4uL1BlcmZvcm1hbmNlVGVzdHMvSmV0U3Ry
ZWFtMi93YXNtLWNsaS5qcworICBjbWQ6IHJ1bldlYkFzc2VtYmx5SmV0U3RyZWFtMiB1bmxlc3Mg
cGFyc2VSdW5Db21tYW5kcworCkluZGV4OiBKU1Rlc3RzL3dhc20vbG93RXhlY3V0YWJsZU1lbW9y
eS9leGVjdXRhYmxlLW1lbW9yeS1vb20uanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSlNUZXN0cy93YXNtL2xv
d0V4ZWN1dGFibGVNZW1vcnkvZXhlY3V0YWJsZS1tZW1vcnktb29tLmpzCShyZXZpc2lvbiAyNTg5
OTYpCisrKyBKU1Rlc3RzL3dhc20vbG93RXhlY3V0YWJsZU1lbW9yeS9leGVjdXRhYmxlLW1lbW9y
eS1vb20uanMJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSw3IEBACisvLyBGSVhNRTogQ29uc2lk
ZXIgbWFraW5nIGp1bXAgaXNsYW5kcyB3b3JrIHdpdGggT3B0aW9uczo6aml0TWVtb3J5UmVzZXJ2
YXRpb25TaXplCisvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjA5
MDM3CisvL0Agc2tpcCBpZiAkYXJjaGl0ZWN0dXJlID09ICJhcm02NCIKKwogaW1wb3J0ICogYXMg
YXNzZXJ0IGZyb20gJy4uL2Fzc2VydC5qcycKIGltcG9ydCBCdWlsZGVyIGZyb20gJy4uL0J1aWxk
ZXIuanMnCiAKSW5kZXg6IFBlcmZvcm1hbmNlVGVzdHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFBlcmZvcm1hbmNlVGVzdHMvQ2hhbmdlTG9nCShyZXZpc2lvbiAyNTg5OTYpCisrKyBQZXJmb3Jt
YW5jZVRlc3RzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDIyIEBACisyMDIw
LTAzLTI1ICBTYWFtIEJhcmF0aSAgPHNiYXJhdGlAYXBwbGUuY29tPgorCisgICAgICAgIEltcGxl
bWVudCAxR0Igb2YgZXhlY3V0YWJsZSBtZW1vcnkgb24gYXJtNjQKKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIwODQ5MAorICAgICAgICA8cmRhcjovL3By
b2JsZW0vNjA3OTcxMjc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgS2VpdGggTWlsbGVyLgorCisg
ICAgICAgICogSmV0U3RyZWFtMi9KZXRTdHJlYW1Ecml2ZXIuanM6CisgICAgICAgIChEcml2ZXIu
cHJvdG90eXBlLmR1bXBKU09OUmVzdWx0c0lmTmVlZGVkKToKKyAgICAgICAgKERlZmF1bHRCZW5j
aG1hcmsucHJvdG90eXBlLnVwZGF0ZVVJQWZ0ZXJSdW4pOgorICAgICAgICAoRGVmYXVsdEJlbmNo
bWFyayk6CisgICAgICAgIChXU0xCZW5jaG1hcmsucHJvdG90eXBlLnVwZGF0ZVVJQWZ0ZXJSdW4p
OgorICAgICAgICAoV1NMQmVuY2htYXJrKToKKyAgICAgICAgKFdhc21CZW5jaG1hcmsucHJvdG90
eXBlLnVwZGF0ZVVJQWZ0ZXJSdW4pOgorICAgICAgICAoV2FzbUJlbmNobWFyayk6CisgICAgICAg
IChEcml2ZXIuYXN5bmMgZmV0Y2hSZXNvdXJjZXMuc3RhdHVzRWxlbWVudC5pbm5lckhUTUwuYS5o
cmVmLnN0cmluZ19hcHBlYXJlZF9oZXJlKToKKyAgICAgICAgKERyaXZlci5wcm90b3R5cGUuYXN5
bmMgZmV0Y2hSZXNvdXJjZXMpOgorCiAyMDIwLTAzLTE1ICBZdXN1a2UgU3V6dWtpICA8eXN1enVr
aUBhcHBsZS5jb20+CiAKICAgICAgICAgU2hvdWxkIG5vdCB1c2UgdmFyaWFibGUtbGVuZ3RoLWFy
cmF5IChWTEEpCkluZGV4OiBQZXJmb3JtYW5jZVRlc3RzL0pldFN0cmVhbTIvSmV0U3RyZWFtRHJp
dmVyLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFBlcmZvcm1hbmNlVGVzdHMvSmV0U3RyZWFtMi9KZXRTdHJl
YW1Ecml2ZXIuanMJKHJldmlzaW9uIDI1ODk5NikKKysrIFBlcmZvcm1hbmNlVGVzdHMvSmV0U3Ry
ZWFtMi9KZXRTdHJlYW1Ecml2ZXIuanMJKHdvcmtpbmcgY29weSkKQEAgLTQwOSw5ICs0MDksOSBA
QCBjbGFzcyBEcml2ZXIgewogICAgIGR1bXBKU09OUmVzdWx0c0lmTmVlZGVkKCkKICAgICB7CiAg
ICAgICAgIGlmIChkdW1wSlNPTlJlc3VsdHMpIHsKLSAgICAgICAgICAgIHByaW50KCJcbiIpOwot
ICAgICAgICAgICAgcHJpbnQodGhpcy5yZXN1bHRzSlNPTigpKTsKLSAgICAgICAgICAgIHByaW50
KCJcbiIpOworICAgICAgICAgICAgY29uc29sZS5sb2coIlxuIik7CisgICAgICAgICAgICBjb25z
b2xlLmxvZyh0aGlzLnJlc3VsdHNKU09OKCkpOworICAgICAgICAgICAgY29uc29sZS5sb2coIlxu
Iik7CiAgICAgICAgIH0KICAgICB9CiAKQEAgLTcyNSwxNSArNzI1LDE1IEBAIGNsYXNzIERlZmF1
bHRCZW5jaG1hcmsgZXh0ZW5kcyBCZW5jaG1hcmsKICAgICAgICAgICAgIHJldHVybjsKICAgICAg
ICAgfQogCi0gICAgICAgIHByaW50KCIgICAgU3RhcnR1cDoiLCB1aUZyaWVuZGx5TnVtYmVyKHRo
aXMuZmlyc3RJdGVyYXRpb24pKTsKLSAgICAgICAgcHJpbnQoIiAgICBXb3JzdCBDYXNlOiIsIHVp
RnJpZW5kbHlOdW1iZXIodGhpcy53b3JzdDQpKTsKLSAgICAgICAgcHJpbnQoIiAgICBBdmVyYWdl
OiIsIHVpRnJpZW5kbHlOdW1iZXIodGhpcy5hdmVyYWdlKSk7Ci0gICAgICAgIHByaW50KCIgICAg
U2NvcmU6IiwgdWlGcmllbmRseU51bWJlcih0aGlzLnNjb3JlKSk7CisgICAgICAgIGNvbnNvbGUu
bG9nKCIgICAgU3RhcnR1cDoiLCB1aUZyaWVuZGx5TnVtYmVyKHRoaXMuZmlyc3RJdGVyYXRpb24p
KTsKKyAgICAgICAgY29uc29sZS5sb2coIiAgICBXb3JzdCBDYXNlOiIsIHVpRnJpZW5kbHlOdW1i
ZXIodGhpcy53b3JzdDQpKTsKKyAgICAgICAgY29uc29sZS5sb2coIiAgICBBdmVyYWdlOiIsIHVp
RnJpZW5kbHlOdW1iZXIodGhpcy5hdmVyYWdlKSk7CisgICAgICAgIGNvbnNvbGUubG9nKCIgICAg
U2NvcmU6IiwgdWlGcmllbmRseU51bWJlcih0aGlzLnNjb3JlKSk7CiAgICAgICAgIGlmIChSQU1p
ZmljYXRpb24pIHsKLSAgICAgICAgICAgIHByaW50KCIgICAgQ3VycmVudCBGb290cHJpbnQ6Iiwg
dWlGcmllbmRseU51bWJlcih0aGlzLmN1cnJlbnRGb290cHJpbnQpKTsKLSAgICAgICAgICAgIHBy
aW50KCIgICAgUGVhayBGb290cHJpbnQ6IiwgdWlGcmllbmRseU51bWJlcih0aGlzLnBlYWtGb290
cHJpbnQpKTsKKyAgICAgICAgICAgIGNvbnNvbGUubG9nKCIgICAgQ3VycmVudCBGb290cHJpbnQ6
IiwgdWlGcmllbmRseU51bWJlcih0aGlzLmN1cnJlbnRGb290cHJpbnQpKTsKKyAgICAgICAgICAg
IGNvbnNvbGUubG9nKCIgICAgUGVhayBGb290cHJpbnQ6IiwgdWlGcmllbmRseU51bWJlcih0aGlz
LnBlYWtGb290cHJpbnQpKTsKICAgICAgICAgfQotICAgICAgICBwcmludCgiICAgIFdhbGwgdGlt
ZToiLCB1aUZyaWVuZGx5RHVyYXRpb24obmV3IERhdGUodGhpcy5lbmRUaW1lIC0gdGhpcy5zdGFy
dFRpbWUpKSk7CisgICAgICAgIGNvbnNvbGUubG9nKCIgICAgV2FsbCB0aW1lOiIsIHVpRnJpZW5k
bHlEdXJhdGlvbihuZXcgRGF0ZSh0aGlzLmVuZFRpbWUgLSB0aGlzLnN0YXJ0VGltZSkpKTsKICAg
ICB9CiB9CiAKQEAgLTgxOSwxNCArODE5LDE0IEBAIGNsYXNzIFdTTEJlbmNobWFyayBleHRlbmRz
IEJlbmNobWFyayB7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KIAotICAgICAgICBw
cmludCgiICAgIFN0ZGxpYjoiLCB1aUZyaWVuZGx5TnVtYmVyKHRoaXMuc3RkbGliKSk7Ci0gICAg
ICAgIHByaW50KCIgICAgVGVzdHM6IiwgdWlGcmllbmRseU51bWJlcih0aGlzLm1haW5SdW4pKTsK
LSAgICAgICAgcHJpbnQoIiAgICBTY29yZToiLCB1aUZyaWVuZGx5TnVtYmVyKHRoaXMuc2NvcmUp
KTsKKyAgICAgICAgY29uc29sZS5sb2coIiAgICBTdGRsaWI6IiwgdWlGcmllbmRseU51bWJlcih0
aGlzLnN0ZGxpYikpOworICAgICAgICBjb25zb2xlLmxvZygiICAgIFRlc3RzOiIsIHVpRnJpZW5k
bHlOdW1iZXIodGhpcy5tYWluUnVuKSk7CisgICAgICAgIGNvbnNvbGUubG9nKCIgICAgU2NvcmU6
IiwgdWlGcmllbmRseU51bWJlcih0aGlzLnNjb3JlKSk7CiAgICAgICAgIGlmIChSQU1pZmljYXRp
b24pIHsKLSAgICAgICAgICAgIHByaW50KCIgICAgQ3VycmVudCBGb290cHJpbnQ6IiwgdWlGcmll
bmRseU51bWJlcih0aGlzLmN1cnJlbnRGb290cHJpbnQpKTsKLSAgICAgICAgICAgIHByaW50KCIg
ICAgUGVhayBGb290cHJpbnQ6IiwgdWlGcmllbmRseU51bWJlcih0aGlzLnBlYWtGb290cHJpbnQp
KTsKKyAgICAgICAgICAgIGNvbnNvbGUubG9nKCIgICAgQ3VycmVudCBGb290cHJpbnQ6IiwgdWlG
cmllbmRseU51bWJlcih0aGlzLmN1cnJlbnRGb290cHJpbnQpKTsKKyAgICAgICAgICAgIGNvbnNv
bGUubG9nKCIgICAgUGVhayBGb290cHJpbnQ6IiwgdWlGcmllbmRseU51bWJlcih0aGlzLnBlYWtG
b290cHJpbnQpKTsKICAgICAgICAgfQotICAgICAgICBwcmludCgiICAgIFdhbGwgdGltZToiLCB1
aUZyaWVuZGx5RHVyYXRpb24obmV3IERhdGUodGhpcy5lbmRUaW1lIC0gdGhpcy5zdGFydFRpbWUp
KSk7CisgICAgICAgIGNvbnNvbGUubG9nKCIgICAgV2FsbCB0aW1lOiIsIHVpRnJpZW5kbHlEdXJh
dGlvbihuZXcgRGF0ZSh0aGlzLmVuZFRpbWUgLSB0aGlzLnN0YXJ0VGltZSkpKTsKICAgICB9CiB9
OwogCkBAIC05NzUsMTMgKzk3NSwxMyBAQCBjbGFzcyBXYXNtQmVuY2htYXJrIGV4dGVuZHMgQmVu
Y2htYXJrIHsKICAgICAgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKHRoaXMuc2NvcmVJ
RCkuaW5uZXJIVE1MID0gdWlGcmllbmRseU51bWJlcih0aGlzLnNjb3JlKTsKICAgICAgICAgICAg
IHJldHVybjsKICAgICAgICAgfQotICAgICAgICBwcmludCgiICAgIFN0YXJ0dXA6IiwgdWlGcmll
bmRseU51bWJlcih0aGlzLnN0YXJ0dXBUaW1lKSk7Ci0gICAgICAgIHByaW50KCIgICAgUnVuIHRp
bWU6IiwgdWlGcmllbmRseU51bWJlcih0aGlzLnJ1blRpbWUpKTsKKyAgICAgICAgY29uc29sZS5s
b2coIiAgICBTdGFydHVwOiIsIHVpRnJpZW5kbHlOdW1iZXIodGhpcy5zdGFydHVwVGltZSkpOwor
ICAgICAgICBjb25zb2xlLmxvZygiICAgIFJ1biB0aW1lOiIsIHVpRnJpZW5kbHlOdW1iZXIodGhp
cy5ydW5UaW1lKSk7CiAgICAgICAgIGlmIChSQU1pZmljYXRpb24pIHsKLSAgICAgICAgICAgIHBy
aW50KCIgICAgQ3VycmVudCBGb290cHJpbnQ6IiwgdWlGcmllbmRseU51bWJlcih0aGlzLmN1cnJl
bnRGb290cHJpbnQpKTsKLSAgICAgICAgICAgIHByaW50KCIgICAgUGVhayBGb290cHJpbnQ6Iiwg
dWlGcmllbmRseU51bWJlcih0aGlzLnBlYWtGb290cHJpbnQpKTsKKyAgICAgICAgICAgIGNvbnNv
bGUubG9nKCIgICAgQ3VycmVudCBGb290cHJpbnQ6IiwgdWlGcmllbmRseU51bWJlcih0aGlzLmN1
cnJlbnRGb290cHJpbnQpKTsKKyAgICAgICAgICAgIGNvbnNvbGUubG9nKCIgICAgUGVhayBGb290
cHJpbnQ6IiwgdWlGcmllbmRseU51bWJlcih0aGlzLnBlYWtGb290cHJpbnQpKTsKICAgICAgICAg
fQotICAgICAgICBwcmludCgiICAgIFNjb3JlOiIsIHVpRnJpZW5kbHlOdW1iZXIodGhpcy5zY29y
ZSkpOworICAgICAgICBjb25zb2xlLmxvZygiICAgIFNjb3JlOiIsIHVpRnJpZW5kbHlOdW1iZXIo
dGhpcy5zY29yZSkpOwogICAgIH0KIH07CiAKSW5kZXg6IFBlcmZvcm1hbmNlVGVzdHMvSmV0U3Ry
ZWFtMi93YXNtLWNsaS5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBQZXJmb3JtYW5jZVRlc3RzL0pldFN0cmVh
bTIvd2FzbS1jbGkuanMJKG5vbmV4aXN0ZW50KQorKysgUGVyZm9ybWFuY2VUZXN0cy9KZXRTdHJl
YW0yL3dhc20tY2xpLmpzCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDUgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRT
IENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgor
ICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkK
KyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyov
CisKK2NvbnN0IGlzSW5Ccm93c2VyID0gZmFsc2U7Citjb25zb2xlID0geworICAgIGxvZzogKCkg
PT4geyB9Cit9CisKK3Rlc3RMaXN0ID0gWyJIYXNoU2V0LXdhc20iLCAidHNmLXdhc20iLCAicXVp
Y2tzb3J0LXdhc20iLCAiZ2NjLWxvb3BzLXdhc20iLCAicmljaGFyZHMtd2FzbSJdOworCitSQU1p
ZmljYXRpb24gPSBmYWxzZTsKKworbG9hZCgiLi9KZXRTdHJlYW1Ecml2ZXIuanMiKTsKKworYXN5
bmMgZnVuY3Rpb24gcnVuSmV0U3RyZWFtKCkgeworICAgIHRyeSB7CisgICAgICAgIGF3YWl0IEpl
dFN0cmVhbS5pbml0aWFsaXplKCk7CisgICAgICAgIEpldFN0cmVhbS5zdGFydCgpOworICAgIH0g
Y2F0Y2ggKGUpIHsKKyAgICAgICAgdGhyb3cgZTsKKyAgICB9Cit9CitydW5KZXRTdHJlYW0oKTsK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjU4OTk2KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEzMiBA
QAorMjAyMC0wMy0yNSAgU2FhbSBCYXJhdGkgIDxzYmFyYXRpQGFwcGxlLmNvbT4KKworICAgICAg
ICBJbXBsZW1lbnQgMUdCIG9mIGV4ZWN1dGFibGUgbWVtb3J5IG9uIGFybTY0CisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMDg0OTAKKyAgICAgICAgPHJk
YXI6Ly9wcm9ibGVtLzYwNzk3MTI3PgorCisgICAgICAgIFJldmlld2VkIGJ5IEtlaXRoIE1pbGxl
ci4KKworICAgICAgICBUaGlzIHBhdGNoIGltcGxlbWVudHMgdGhlIDFHQiBleGVjdXRhYmxlIG1l
bW9yeSBzcGFjZSBvbiBhcm02NC4gVG8gbWFrZSB0aGlzCisgICAgICAgIHdvcmssIHdlIGltcGxl
bWVudCBqdW1wcyBsYXJnZXIgdGhhbiArLy0xMjhNQiB0byB1c2UganVtcCBpc2xhbmRzLiBKdW1w
IGlzbGFuZHMKKyAgICAgICAgd29yayBieSBzcGxpdHRpbmcgdXAgdGhlIH4xR0IgcmVnaW9uIGlu
dG8gOSAxMTJNQiBjaHVua3MgKDEwMDggTUIgdG90YWwpLiBFYWNoCisgICAgICAgIGNodW5rIGlz
IHNwbGl0IGludG8gdHdvOiA5Nk1CIG9mIGV4ZWN1dGFibGUgcmVnaW9uLCBhbmQgMTZNQiBvZiBq
dW1wIGlzbGFuZCByZWdpb24uCisgICAgICAgIFdpdGggdGhpcyBzcGxpdCwgYW55IGp1bXAgaW5z
aWRlIGEganVtcCBpc2xhbmQgcmVnaW9uIGNhbiBnZXQgdG8gdGhlIGFkamFjZW50CisgICAgICAg
IGlzbGFuZCAoZm9yd2FyZHMgb3IgYmFja3dhcmRzKSBpbiBhIHNpbmdsZSArLy0xMjhNQiBqdW1w
LiBXaGVuIGxpbmtpbmcgYSBqdW1wCisgICAgICAgIGZyb20gQSB0byBCLCB3aGVyZSB8QSAtIEJ8
ID4gMTI4TUIsIHdlIGluc3RlYWQgcG9pbnQgdGhlIGp1bXAgdG8gYW4gaXNsYW5kLAorICAgICAg
ICB3aGVyZSB0aGlzIGlzbGFuZCBoYXMgYSBwb3RlbnRpYWwgc2VyaWVzIG9mIGp1bXBzIHRoYXQg
ZmluYWxseSBsYW5kcyBhdCBCLgorICAgICAgICAKKyAgICAgICAgVG8gYWxsb2NhdGUgZXhlY3V0
YWJsZSBtZW1vcnksIHVzZSBhIE1ldGFBbGxvY2F0b3IgZm9yIGVhY2ggOTZNQiBjaHVuay4gVG8K
KyAgICAgICAgYWxsb2NhdGUgaXNsYW5kcywgd2UgaGF2ZSBhIGJpdCB2ZWN0b3Igd2UgdXNlIHRv
IHRyYWNrIHVzZWQgYW5kIGZyZWVkIGlzbGFuZHMuCisgICAgICAgIFdlIG9ubHkgZ3JvdyB0aGlz
IGJpdCB2ZWN0b3IgYXMgaXNsYW5kcyBhcmUgYWxsb2NhdGVkLCBzbyBpdCBmcmVxdWVudGx5Cisg
ICAgICAgIHJlbWFpbnMgZW1wdHkgb3IgdmVyeSBzbWFsbC4KKyAgICAgICAgCisgICAgICAgIFRo
ZSBnb2FsIG9mIHRoaXMgcGF0Y2ggaXMgdG8gaGF2ZSBtaW5pbWFsIHBlcmYgaW1wYWN0IHdoZW4g
bm90IHVzaW5nIGlzbGFuZHMsCisgICAgICAgIHNvIHRoZSBkYXRhIHN0cnVjdHVyZXMgYXJlIGRl
c2lnbmVkIHRvIG9ubHkgaW5jdXIgb3ZlcmhlYWQgd2hlbiBhY3R1YWxseSB1c2luZworICAgICAg
ICBpc2xhbmRzLiBXZSBleHBlY3QgdGhlIHVzZSBvZiBpc2xhbmRzIHRvIGJlIG1pbmltYWwuIFdl
IHVzZSBhIHJlZCBibGFjayB0cmVlCisgICAgICAgIHRvIHRyYWNrIGFsbCBpc2xhbmQgbG9jYXRp
b25zLiBUaGlzIGFsbG93cyB1cyB0byBkZWFsbG9jYXRlIGFsbCBpc2xhbmRzIHdoZW4KKyAgICAg
ICAgYW4gZXhlY3V0YWJsZSBtZW1vcnkgaGFuZGxlIGlzIGZyZWVkLiBUeXBpY2FsbHksIHRoaXMg
cmVkIGJsYWNrIHRyZWUgaXMgZW1wdHksCisgICAgICAgIHNvIGZyZWVpbmcgYW4gZXhlY3V0YWJs
ZSBtZW1vcnkgaGFuZGxlIGluY3VycyBubyBleHRyYSBvdmVyaGVhZC4KKyAgICAgICAgCisgICAg
ICAgIFRvIG1ha2UgaXNsYW5kcyB3b3JrIGZvciBXYXNtLCB3ZSBub3cgaGF2ZSB0byBsaW5rIHRp
ZXIgdXAgY29kZSBpbiB0d28gcGhhc2VzLgorICAgICAgICBQcmV2aW91c2x5LCB3ZSB3b3VsZCBq
dXN0IHBhdGNoIGp1bXBzIGNvbmN1cnJlbnRseSB0byBXYXNtIHRocmVhZHMgcnVubmluZyBhZnRl
cgorICAgICAgICByZXNldHRpbmcgdGhlIGljYWNoZSwga25vd2luZyB0aGF0IHdlIHdvdWxkIGJl
IGFibGUgdG8gYXRvbWljYWxseSB1cGRhdGUgdGhlIGp1bXAKKyAgICAgICAgaW5zdHJ1Y3Rpb24g
dG8gcG9pbnQgdG8gdGhlIG5ldyBkZXN0aW5hdGlvbi4gSG93ZXZlciwgbm93IHdoZW4gcmVwYXRj
aGluZyB0aGVzZQorICAgICAgICBqdW1wcyBpbiBhIHdvcmxkIHdpdGgganVtcCBpc2xhbmRzLCB3
ZSBtaWdodCBuZWVkIHRvIGFsbG9jYXRlIGlzbGFuZHMgZGVwZW5kaW5nCisgICAgICAgIG9uIHRo
ZSBqdW1wIGxvY2F0aW9uIGFuZCBpdHMgdGFyZ2V0LiBTbyB3ZSBub3cgYWxsb2NhdGUgYW5kIGNv
bGxlY3QgdGhlIHNldCBvZiBpc2xhbmRzLAorICAgICAgICB0aGVuIHJlc2V0IHRoZSBpY2FjaGUs
IHRoZW4gYXRvbWljYWxseSB1cGRhdGUgdGhlIGJyYW5jaCB0byBwb2ludCB0byB0aGUgZGVzdGlu
YXRpb24KKyAgICAgICAgKG9yIGFuIGlzbGFuZCB0aGF0IGp1bXBzIHRvIHRoZSBkZXN0aW5hdGlv
bikuIE9uZSBpbXBvcnRhbnQgaW1wbGVtZW50YXRpb24gZGV0YWlsCisgICAgICAgIGhlcmUgaXMg
dGhhdCBmb3Igbm9ybWFsIGlzbGFuZCByZXBhdGNoaW5nLCBpZiB3ZSBoYXZlIGEganVtcCBmcm9t
IEEgdG8gQiwgYW5kIGl0CisgICAgICAgIGFsbG9jYXRlcyBhIHNldCBpZiBpc2xhbmRzIFgsIHdl
IHVzdWFsbHkgY2FuIGRlYWxsb2NhdGUgWCB3aGVuIHJlcGF0Y2hpbmcgQSB0byBnbyB0byBCJy4K
KyAgICAgICAgVGhpcyBpcyBiZWNhdXNlIHRoZSB0eXBpY2FsIHJlcGF0Y2ggc2NlbmFyaW8gaW4g
SlMgaGFwcGVucyB3aGVuIHRoYXQgY29kZSBpcyBub3QgYmVpbmcKKyAgICAgICAgZXhlY3V0ZWQu
IEZvciBXYXNtIHRob3VnaCwgdGhvc2UgaXNsYW5kcyBYIG1pZ2h0IGJlIHJ1bm5pbmcgd2hpbGUg
d2Ugd2FudCB0byByZXBhdGNoCisgICAgICAgIEEgdG8gZ28gdG8gQicuIFNvIGluc3RlYWQgb2Yg
ZGVhbGxvY2F0aW5nIFgsIHdlIGp1c3QgYXBwZW5kIHRvIFggaW4gdGhpcyBzY2VuYXJpbywgYW5k
CisgICAgICAgIHdlIGZyZWUgdGhlIG5ldyBzZXQgWCcgd2hlbiB0aGUgY29kZSBpdHNlbGYgaXMg
ZnJlZWQuCisgICAgICAgIAorICAgICAgICAoVGhpcyBwYXRjaCBhbHNvIGZpeGVzIGEgYnVnIGlu
IHRoZSBXYXNtIExMSW50IHRvIEJCUSB0aWVyIHVwIHRoYXQgSSBzcG90dGVkLAorICAgICAgICB3
aGVyZSB3ZSB3b3VsZCBwdWJsaXNoIGEgTExJbnQgY2FsbGVlJ3MgQkJRIHJlcGxhY2VtZW50IGJl
Zm9yZSB3ZSBmaW5pc2hlZAorICAgICAgICBsaW5raW5nIHRoZSBvdXRnb2luZyBjYWxscyBvZiB0
aGUgQkJRIHJlcGxhY2VtZW50LikKKyAgICAgICAgCisgICAgICAgIFRoaXMgcGF0Y2ggYWxzbyBy
ZW1vdmVzIHRoZSBvbGQgIkNvZGVQcm9maWxpbmciIGNvZGUgdGhhdCBoYXMgYmVlbiB1bnVzZWQg
Zm9yCisgICAgICAgIGEgbG9uZyB0aW1lLgorCisgICAgICAgICogSmF2YVNjcmlwdENvcmUueGNv
ZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBTb3VyY2VzLnR4dDoKKyAgICAgICAg
KiBhc3NlbWJsZXIvQVJNNjRBc3NlbWJsZXIuaDoKKyAgICAgICAgKEpTQzo6QVJNNjRBc3NlbWJs
ZXI6OmIpOgorICAgICAgICAoSlNDOjpBUk02NEFzc2VtYmxlcjo6YmwpOgorICAgICAgICAoSlND
OjpBUk02NEFzc2VtYmxlcjo6cmVwbGFjZVdpdGhKdW1wKToKKyAgICAgICAgKEpTQzo6QVJNNjRB
c3NlbWJsZXI6OnByZXBhcmVGb3JBdG9taWNSZWxpbmtKdW1wQ29uY3VycmVudGx5KToKKyAgICAg
ICAgKEpTQzo6QVJNNjRBc3NlbWJsZXI6OnByZXBhcmVGb3JBdG9taWNSZWxpbmtDYWxsQ29uY3Vy
cmVudGx5KToKKyAgICAgICAgKEpTQzo6QVJNNjRBc3NlbWJsZXI6OmNvbXB1dGVKdW1wVHlwZSk6
CisgICAgICAgIChKU0M6OkFSTTY0QXNzZW1ibGVyOjpjYW5FbWl0SnVtcCk6CisgICAgICAgIChK
U0M6OkFSTTY0QXNzZW1ibGVyOjpsaW5rSnVtcE9yQ2FsbCk6CisgICAgICAgIChKU0M6OkFSTTY0
QXNzZW1ibGVyOjpsaW5rQ29tcGFyZUFuZEJyYW5jaCk6CisgICAgICAgIChKU0M6OkFSTTY0QXNz
ZW1ibGVyOjpsaW5rQ29uZGl0aW9uYWxCcmFuY2gpOgorICAgICAgICAoSlNDOjpBUk02NEFzc2Vt
Ymxlcjo6bGlua1Rlc3RBbmRCcmFuY2gpOgorICAgICAgICAqIGFzc2VtYmxlci9BYnN0cmFjdE1h
Y3JvQXNzZW1ibGVyLmg6CisgICAgICAgIChKU0M6OkFic3RyYWN0TWFjcm9Bc3NlbWJsZXI6OnBy
ZXBhcmVGb3JBdG9taWNSZXBhdGNoTmVhckNhbGxDb25jdXJyZW50bHkpOgorICAgICAgICAqIGFz
c2VtYmxlci9MaW5rQnVmZmVyLmNwcDoKKyAgICAgICAgKEpTQzo6TGlua0J1ZmZlcjo6Y29weUNv
bXBhY3RBbmRMaW5rQ29kZSk6CisgICAgICAgIChKU0M6OkxpbmtCdWZmZXI6OmxpbmtDb2RlKToK
KyAgICAgICAgKEpTQzo6TGlua0J1ZmZlcjo6YWxsb2NhdGUpOgorICAgICAgICAoSlNDOjpMaW5r
QnVmZmVyOjpwZXJmb3JtRmluYWxpemF0aW9uKToKKyAgICAgICAgKiBhc3NlbWJsZXIvTGlua0J1
ZmZlci5oOgorICAgICAgICAoSlNDOjpMaW5rQnVmZmVyOjpMaW5rQnVmZmVyKToKKyAgICAgICAg
KEpTQzo6TGlua0J1ZmZlcjo6c2V0SXNKdW1wSXNsYW5kKToKKyAgICAgICAgKiBhc3NlbWJsZXIv
TWFjcm9Bc3NlbWJsZXJDb2RlUmVmLmg6CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyQ29k
ZVJlZjo6TWFjcm9Bc3NlbWJsZXJDb2RlUmVmKToKKyAgICAgICAgKiBqaXQvRXhlY3V0YWJsZUFs
bG9jYXRvci5jcHA6CisgICAgICAgIChKU0M6OmluaXRpYWxpemVKSVRQYWdlUmVzZXJ2YXRpb24p
OgorICAgICAgICAoSlNDOjpFeGVjdXRhYmxlQWxsb2NhdG9yOjppbml0aWFsaXplVW5kZXJseWlu
Z0FsbG9jYXRvcik6CisgICAgICAgIChKU0M6OkV4ZWN1dGFibGVBbGxvY2F0b3I6OmlzVmFsaWQg
Y29uc3QpOgorICAgICAgICAoSlNDOjpFeGVjdXRhYmxlQWxsb2NhdG9yOjphbGxvY2F0ZSk6Cisg
ICAgICAgIChKU0M6OkV4ZWN1dGFibGVBbGxvY2F0b3I6OmdldEp1bXBJc2xhbmRUbyk6CisgICAg
ICAgIChKU0M6OkV4ZWN1dGFibGVBbGxvY2F0b3I6OmdldEp1bXBJc2xhbmRUb0NvbmN1cnJlbnRs
eSk6CisgICAgICAgIChKU0M6OkZpeGVkVk1Qb29sRXhlY3V0YWJsZUFsbG9jYXRvcjo6fkZpeGVk
Vk1Qb29sRXhlY3V0YWJsZUFsbG9jYXRvcik6IERlbGV0ZWQuCisgICAgICAgICogaml0L0V4ZWN1
dGFibGVBbGxvY2F0b3IuaDoKKyAgICAgICAgKEpTQzo6RXhlY3V0YWJsZUFsbG9jYXRvckJhc2U6
OmFsbG9jYXRlKToKKyAgICAgICAgKiBydW50aW1lL0NvbW1vblNsb3dQYXRocy5jcHA6CisgICAg
ICAgICogcnVudGltZS9Db21wbGV0aW9uLmNwcDoKKyAgICAgICAgKEpTQzo6ZXZhbHVhdGUpOgor
ICAgICAgICAqIHJ1bnRpbWUvSlNNb2R1bGVMb2FkZXIuY3BwOgorICAgICAgICAoSlNDOjptb2R1
bGVMb2FkZXJQYXJzZU1vZHVsZSk6CisgICAgICAgICogcnVudGltZS9PcHRpb25zTGlzdC5oOgor
ICAgICAgICAqIHRvb2xzL0NvZGVQcm9maWxlLmNwcDoKKyAgICAgICAgKEpTQzo6dHJ1bmNhdGVU
cmFjZSk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkNvZGVQcm9maWxlOjpzYW1wbGUpOiBEZWxl
dGVkLgorICAgICAgICAoSlNDOjpDb2RlUHJvZmlsZTo6cmVwb3J0KTogRGVsZXRlZC4KKyAgICAg
ICAgKiB0b29scy9Db2RlUHJvZmlsZS5oOgorICAgICAgICAoSlNDOjpDb2RlUHJvZmlsZTo6Q29k
ZVByb2ZpbGUpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpDb2RlUHJvZmlsZTo6cGFyZW50KTog
RGVsZXRlZC4KKyAgICAgICAgKEpTQzo6Q29kZVByb2ZpbGU6OmFkZENoaWxkKTogRGVsZXRlZC4K
KyAgICAgICAgKCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkNvZGVQcm9maWxlOjpDb2RlUmVj
b3JkOjpDb2RlUmVjb3JkKTogRGVsZXRlZC4KKyAgICAgICAgKiB0b29scy9Db2RlUHJvZmlsaW5n
LmNwcDoKKyAgICAgICAgKEpTQzo6c2V0UHJvZmlsZVRpbWVyKTogRGVsZXRlZC4KKyAgICAgICAg
KEpTQzo6cHJvZmlsaW5nVGltZXIpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpDb2RlUHJvZmls
aW5nOjpzYW1wbGUpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpDb2RlUHJvZmlsaW5nOjpub3Rp
ZnlBbGxvY2F0b3IpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpDb2RlUHJvZmlsaW5nOjpnZXRP
d25lclVJREZvclBDKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6Q29kZVByb2ZpbGluZzo6YmVn
aW4pOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpDb2RlUHJvZmlsaW5nOjplbmQpOiBEZWxldGVk
LgorICAgICAgICAqIHRvb2xzL0NvZGVQcm9maWxpbmcuaDoKKyAgICAgICAgKCk6IERlbGV0ZWQu
CisgICAgICAgIChKU0M6OkNvZGVQcm9maWxpbmc6OkNvZGVQcm9maWxpbmcpOiBEZWxldGVkLgor
ICAgICAgICAoSlNDOjpDb2RlUHJvZmlsaW5nOjp+Q29kZVByb2ZpbGluZyk6IERlbGV0ZWQuCisg
ICAgICAgIChKU0M6OkNvZGVQcm9maWxpbmc6OmVuYWJsZWQpOiBEZWxldGVkLgorICAgICAgICAo
SlNDOjpDb2RlUHJvZmlsaW5nOjpiZVZlcmJvc2UpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpD
b2RlUHJvZmlsaW5nOjpiZVZlcnlWZXJib3NlKTogRGVsZXRlZC4KKyAgICAgICAgKiB3YXNtL1dh
c21CQlFQbGFuLmNwcDoKKyAgICAgICAgKEpTQzo6V2FzbTo6QkJRUGxhbjo6d29yayk6CisgICAg
ICAgICogd2FzbS9XYXNtQ29kZUJsb2NrLmg6CisgICAgICAgICogd2FzbS9XYXNtT01HRm9yT1NS
RW50cnlQbGFuLmNwcDoKKyAgICAgICAgKEpTQzo6V2FzbTo6T01HRm9yT1NSRW50cnlQbGFuOjp3
b3JrKToKKyAgICAgICAgKiB3YXNtL1dhc21PTUdQbGFuLmNwcDoKKyAgICAgICAgKEpTQzo6V2Fz
bTo6T01HUGxhbjo6d29yayk6CisgICAgICAgICogd2FzbS9XYXNtUGxhbi5jcHA6CisgICAgICAg
IChKU0M6Oldhc206OlBsYW46OnVwZGF0ZUNhbGxTaXRlc1RvQ2FsbFVzKToKKyAgICAgICAgKiB3
YXNtL1dhc21QbGFuLmg6CisKIDIwMjAtMDMtMjUgIEFsZXhleSBTaHZheWthICA8c2h2YWlrYWxl
c2hAZ21haWwuY29tPgogCiAgICAgICAgIFxiIGVzY2FwZXMgaW5zaWRlIGNoYXJhY3RlciBjbGFz
c2VzIHNob3VsZCBiZSB2YWxpZCBpbiBVbmljb2RlIHBhdHRlcm5zCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvU291cmNlcy50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL1NvdXJjZXMudHh0CShyZXZpc2lvbiAyNTg5OTYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvU291cmNlcy50eHQJKHdvcmtpbmcgY29weSkKQEAgLTk5Niw4ICs5OTYsNiBAQCBydW50aW1l
L1dpZGVuaW5nTnVtYmVyUHJlZGljdGlvbkZ1enplckFnCiBKU0NCdWlsdGlucy5jcHAKIAogdG9v
bHMvQ2VsbExpc3QuY3BwCi10b29scy9Db2RlUHJvZmlsZS5jcHAKLXRvb2xzL0NvZGVQcm9maWxp
bmcuY3BwCiB0b29scy9Db21waWxlclRpbWluZ1Njb3BlLmNwcAogdG9vbHMvRnVuY3Rpb25PdmVy
cmlkZXMuY3BwCiB0b29scy9GdW5jdGlvbldoaXRlbGlzdC5jcHAKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ov
cHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAyNTg5OTYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5
KQpAQCAtNDA3Miw4ICs0MDcyLDYgQEAKIAkJODYwMTYxRTAwRjNBODNDMTAwRjg0NzEwIC8qIE1h
Y3JvQXNzZW1ibGVyWDg2LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE1hY3Jv
QXNzZW1ibGVyWDg2Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTg2MDE2MUUxMEYz
QTgzQzEwMEY4NDcxMCAvKiBNYWNyb0Fzc2VtYmxlclg4Nl82NC5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBNYWNyb0Fzc2VtYmxlclg4Nl82NC5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQk4NjAxNjFFMjBGM0E4M0MxMDBGODQ3MTAgLyogTWFjcm9Bc3NlbWJsZXJY
ODZDb21tb24uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTWFjcm9Bc3NlbWJs
ZXJYODZDb21tb24uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJODYwM0NFRjIxNEM3
NTQ2NDAwQUU1OUUzIC8qIENvZGVQcm9maWxpbmcuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBwYXRoID0gQ29kZVByb2ZpbGluZy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07Ci0JCTg2MDNDRUYzMTRDNzU0NjQwMEFFNTlFMyAvKiBDb2RlUHJvZmlsaW5nLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENvZGVQcm9maWxpbmcuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJODYwNEY0RjIxNDNBNkM0NDAwQjI5NUY1IC8qIENoYW5nZUxvZyAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQ7IGxp
bmVFbmRpbmcgPSAwOyBwYXRoID0gQ2hhbmdlTG9nOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQk4NjA2RERFOTE4REE0NEFCMDBBMzgzRDAgLyogSWRlbnRpZmllcklubGluZXMuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSWRlbnRpZmllcklubGluZXMuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJODYxMkU0Q0IxNTIyOTE4NDAwQzgzNkJFIC8qIE1hdGNo
UmVzdWx0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE1hdGNoUmVzdWx0Lmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC00MTE5LDggKzQxMTcsNiBAQAogCQk4NkFE
RDE0MzBGRERFQTk4MDAwNkZGQ0MgLyogQVJNdjdSZWdpc3RlcnMuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gQVJNdjdSZWdpc3RlcnMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJODZBREQxNDQwRkRERUE5ODAwMDZFRUMyIC8qIE1hY3JvQXNzZW1ibGVyQVJNdjcu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTWFjcm9Bc3NlbWJsZXJBUk12Ny5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk4NkI1ODIyQzE0RDIyRjVGMDBBOUMzMDYg
LyogUHJvZmlsZVRyZWVOb2RlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFBy
b2ZpbGVUcmVlTm9kZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk4NkI1ODIyRTE0
RDIzNzNCMDBBOUMzMDYgLyogQ29kZVByb2ZpbGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBwYXRoID0gQ29kZVByb2ZpbGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwotCQk4NkI1ODIyRjE0RDIzNzNCMDBBOUMzMDYgLyogQ29kZVByb2ZpbGUuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ29kZVByb2ZpbGUuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJODZCNTgyNkExNEQzNUQ1MTAwQTlDMzA2IC8qIFRpZXJlZE1NYXBBcnJheS5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBUaWVyZWRNTWFwQXJyYXkuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJODZCRjY0MkExNDhEQjJCNTAwNERFMzZBIC8qIElu
dHJpbnNpYy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJbnRyaW5zaWMuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJODZDMzZFRTkwRUUxMjg5RDAwQjNERjU5IC8q
IE1hY3JvQXNzZW1ibGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE1hY3Jv
QXNzZW1ibGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC03NjgyLDEwICs3Njc4
LDYgQEAKIAkJCQlGRTFCRDAxQjFFNzIwMDIxMDAxMzRCQzkgLyogQ2VsbExpc3QuY3BwICovLAog
CQkJCUZFMUJEMDFDMUU3MjAwMjEwMDEzNEJDOSAvKiBDZWxsTGlzdC5oICovLAogCQkJCUZFMUJE
MDIwMUU3MjAyNzAwMDEzNEJDOSAvKiBDZWxsUHJvZmlsZS5oICovLAotCQkJCTg2QjU4MjJFMTRE
MjM3M0IwMEE5QzMwNiAvKiBDb2RlUHJvZmlsZS5jcHAgKi8sCi0JCQkJODZCNTgyMkYxNEQyMzcz
QjAwQTlDMzA2IC8qIENvZGVQcm9maWxlLmggKi8sCi0JCQkJODYwM0NFRjIxNEM3NTQ2NDAwQUU1
OUUzIC8qIENvZGVQcm9maWxpbmcuY3BwICovLAotCQkJCTg2MDNDRUYzMTRDNzU0NjQwMEFFNTlF
MyAvKiBDb2RlUHJvZmlsaW5nLmggKi8sCiAJCQkJMEY0RjExRTcyMDlCQ0RBMTAwNzA5NjU0IC8q
IENvbXBpbGVyVGltaW5nU2NvcGUuY3BwICovLAogCQkJCTBGNEYxMUU2MjA5QkNEQTEwMDcwOTY1
NCAvKiBDb21waWxlclRpbWluZ1Njb3BlLmggKi8sCiAJCQkJRkU0QkZGMjkxQUQ0NzZFNzAwMDg4
Rjg3IC8qIEZ1bmN0aW9uT3ZlcnJpZGVzLmNwcCAqLywKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9hc3NlbWJsZXIvQVJNNjRBc3NlbWJsZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYXNzZW1ibGVyL0FSTTY0QXNzZW1ibGVyLmgJKHJldmlzaW9uIDI1ODk5NikK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvQVJNNjRBc3NlbWJsZXIuaAkod29y
a2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTItMjAx
OSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIt
MjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKQEAgLTc4MywxMiArNzgzLDkgQEAgcHVibGljOgogICAgICAgICBpbnNuKGRh
dGFQcm9jZXNzaW5nMlNvdXJjZShEQVRBU0laRSwgcm0sIERhdGFPcF9BU1JWLCBybiwgcmQpKTsK
ICAgICB9CiAKLSAgICBBTFdBWVNfSU5MSU5FIHZvaWQgYihpbnQzMl90IG9mZnNldCA9IDApCisg
ICAgQUxXQVlTX0lOTElORSB2b2lkIGIoKQogICAgIHsKLSAgICAgICAgQVNTRVJUKCEob2Zmc2V0
ICYgMykpOwotICAgICAgICBvZmZzZXQgPj49IDI7Ci0gICAgICAgIEFTU0VSVChvZmZzZXQgPT0g
KG9mZnNldCA8PCA2KSA+PiA2KTsKLSAgICAgICAgaW5zbih1bmNvbmRpdGlvbmFsQnJhbmNoSW1t
ZWRpYXRlKGZhbHNlLCBvZmZzZXQpKTsKKyAgICAgICAgaW5zbih1bmNvbmRpdGlvbmFsQnJhbmNo
SW1tZWRpYXRlKGZhbHNlLCAwKSk7CiAgICAgfQogCiAgICAgQUxXQVlTX0lOTElORSB2b2lkIGJf
Y29uZChDb25kaXRpb24gY29uZCwgaW50MzJfdCBvZmZzZXQgPSAwKQpAQCAtODMxLDExICs4Mjgs
OSBAQCBwdWJsaWM6CiAgICAgICAgIGluc24obG9naWNhbFNoaWZ0ZWRSZWdpc3RlcihEQVRBU0la
RSwgc2V0RmxhZ3MgPyBMb2dpY2FsT3BfQU5EUyA6IExvZ2ljYWxPcF9BTkQsIHNoaWZ0LCB0cnVl
LCBybSwgYW1vdW50LCBybiwgcmQpKTsKICAgICB9CiAKLSAgICBBTFdBWVNfSU5MSU5FIHZvaWQg
YmwoaW50MzJfdCBvZmZzZXQgPSAwKQorICAgIEFMV0FZU19JTkxJTkUgdm9pZCBibCgpCiAgICAg
ewotICAgICAgICBBU1NFUlQoIShvZmZzZXQgJiAzKSk7Ci0gICAgICAgIG9mZnNldCA+Pj0gMjsK
LSAgICAgICAgaW5zbih1bmNvbmRpdGlvbmFsQnJhbmNoSW1tZWRpYXRlKHRydWUsIG9mZnNldCkp
OworICAgICAgICBpbnNuKHVuY29uZGl0aW9uYWxCcmFuY2hJbW1lZGlhdGUodHJ1ZSwgMCkpOwog
ICAgIH0KIAogICAgIEFMV0FZU19JTkxJTkUgdm9pZCBibHIoUmVnaXN0ZXJJRCBybikKQEAgLTI1
ODIsNiArMjU3NywxNSBAQCBwdWJsaWM6CiAgICAgewogICAgICAgICBpbnRwdHJfdCBvZmZzZXQg
PSAocmVpbnRlcnByZXRfY2FzdDxpbnRwdHJfdD4odG8pIC0gcmVpbnRlcnByZXRfY2FzdDxpbnRw
dHJfdD4od2hlcmUpKSA+PiAyOwogICAgICAgICBBU1NFUlQoc3RhdGljX2Nhc3Q8aW50PihvZmZz
ZXQpID09IG9mZnNldCk7CisKKyNpZiBVU0UoSlVNUF9JU0xBTkRTKQorICAgICAgICBpZiAoIWlz
SW50PDI2PihvZmZzZXQpKSB7CisgICAgICAgICAgICB0byA9IEV4ZWN1dGFibGVBbGxvY2F0b3I6
OnNpbmdsZXRvbigpLmdldEp1bXBJc2xhbmRUbyh3aGVyZSwgdG8pOworICAgICAgICAgICAgb2Zm
c2V0ID0gKGJpdHdpc2VfY2FzdDxpbnRwdHJfdD4odG8pIC0gYml0d2lzZV9jYXN0PGludHB0cl90
Pih3aGVyZSkpID4+IDI7CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChpc0ludDwyNj4ob2Zm
c2V0KSk7CisgICAgICAgIH0KKyNlbmRpZgorCiAgICAgICAgIGludCBpbnNuID0gdW5jb25kaXRp
b25hbEJyYW5jaEltbWVkaWF0ZShmYWxzZSwgc3RhdGljX2Nhc3Q8aW50PihvZmZzZXQpKTsKICAg
ICAgICAgUkVMRUFTRV9BU1NFUlQocm91bmRVcFRvTXVsdGlwbGVPZjxpbnN0cnVjdGlvblNpemU+
KHdoZXJlKSA9PSB3aGVyZSk7CiAgICAgICAgIHBlcmZvcm1KSVRNZW1jcHkod2hlcmUsICZpbnNu
LCBzaXplb2YoaW50KSk7CkBAIC0yNzcxLDYgKzI3NzUsMjUgQEAgcHVibGljOgogICAgICAgICBy
ZWxpbmtKdW1wT3JDYWxsPEJyYW5jaFR5cGVfQ0FMTD4ocmVpbnRlcnByZXRfY2FzdDxpbnQqPihm
cm9tKSAtIDEsIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgaW50Kj4oZnJvbSkgLSAxLCB0byk7CiAg
ICAgICAgIGNhY2hlRmx1c2gocmVpbnRlcnByZXRfY2FzdDxpbnQqPihmcm9tKSAtIDEsIHNpemVv
ZihpbnQpKTsKICAgICB9CisKKyNpZiBVU0UoSlVNUF9JU0xBTkRTKQorICAgIHN0YXRpYyB2b2lk
KiBwcmVwYXJlRm9yQXRvbWljUmVsaW5rSnVtcENvbmN1cnJlbnRseSh2b2lkKiBmcm9tLCB2b2lk
KiB0bykKKyAgICB7CisgICAgICAgIGludHB0cl90IG9mZnNldCA9IChiaXR3aXNlX2Nhc3Q8aW50
cHRyX3Q+KHRvKSAtIGJpdHdpc2VfY2FzdDxpbnRwdHJfdD4oZnJvbSkpID4+IDI7CisgICAgICAg
IEFTU0VSVChzdGF0aWNfY2FzdDxpbnQ+KG9mZnNldCkgPT0gb2Zmc2V0KTsKKworICAgICAgICBp
ZiAoaXNJbnQ8MjY+KG9mZnNldCkpCisgICAgICAgICAgICByZXR1cm4gdG87CisKKyAgICAgICAg
cmV0dXJuIEV4ZWN1dGFibGVBbGxvY2F0b3I6OnNpbmdsZXRvbigpLmdldEp1bXBJc2xhbmRUb0Nv
bmN1cnJlbnRseShmcm9tLCB0byk7CisgICAgfQorCisgICAgc3RhdGljIHZvaWQqIHByZXBhcmVG
b3JBdG9taWNSZWxpbmtDYWxsQ29uY3VycmVudGx5KHZvaWQqIGZyb20sIHZvaWQqIHRvKQorICAg
IHsKKyAgICAgICAgZnJvbSA9IHN0YXRpY19jYXN0PHZvaWQqPihiaXR3aXNlX2Nhc3Q8aW50Kj4o
ZnJvbSkgLSAxKTsKKyAgICAgICAgcmV0dXJuIHByZXBhcmVGb3JBdG9taWNSZWxpbmtKdW1wQ29u
Y3VycmVudGx5KGZyb20sIHRvKTsKKyAgICB9CisjZW5kaWYKICAgICAKICAgICBzdGF0aWMgdm9p
ZCByZXBhdGNoQ29tcGFjdCh2b2lkKiB3aGVyZSwgaW50MzJfdCB2YWx1ZSkKICAgICB7CkBAIC0y
ODcyLDcgKzI4OTUsNyBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgcmV0dXJuIExpbmtKdW1w
Q29uZGl0aW9uRGlyZWN0OwogCiAgICAgICAgICAgICByZXR1cm4gTGlua0p1bXBDb25kaXRpb247
Ci0gICAgICAgICAgICB9CisgICAgICAgIH0KICAgICAgICAgY2FzZSBKdW1wQ29tcGFyZUFuZEJy
YW5jaDogIHsKICAgICAgICAgICAgIEFTU0VSVChpczRCeXRlQWxpZ25lZChmcm9tKSk7CiAgICAg
ICAgICAgICBBU1NFUlQoaXM0Qnl0ZUFsaWduZWQodG8pKTsKQEAgLTI5NDUsNiArMjk2OCwxMiBA
QCBwdWJsaWM6CiAgICAgICAgIH0KICAgICB9CiAKKyAgICBzdGF0aWMgQUxXQVlTX0lOTElORSBi
b29sIGNhbkVtaXRKdW1wKHZvaWQqIGZyb20sIHZvaWQqIHRvKQorICAgIHsKKyAgICAgICAgaW50
cHRyX3QgZGlmZiA9IChiaXR3aXNlX2Nhc3Q8aW50cHRyX3Q+KGZyb20pIC0gYml0d2lzZV9jYXN0
PGludHB0cl90Pih0bykpID4+IDI7CisgICAgICAgIHJldHVybiBpc0ludDwyNj4oZGlmZik7Cisg
ICAgfQorCiBwcm90ZWN0ZWQ6CiAgICAgdGVtcGxhdGU8RGF0YXNpemUgc2l6ZT4KICAgICBzdGF0
aWMgYm9vbCBjaGVja01vdmsoaW50IGluc24sIGludCBfaHcsIFJlZ2lzdGVySUQgX3JkKQpAQCAt
Mjk5NCw5ICszMDIzLDE3IEBAIHByb3RlY3RlZDoKICAgICAgICAgQVNTRVJUKCEocmVpbnRlcnBy
ZXRfY2FzdDxpbnRwdHJfdD4odG8pICYgMykpOwogICAgICAgICBhc3NlcnRJc05vdFRhZ2dlZCh0
byk7CiAgICAgICAgIGFzc2VydElzTm90VGFnZ2VkKGZyb21JbnN0cnVjdGlvbik7Ci0gICAgICAg
IGludHB0cl90IG9mZnNldCA9IChyZWludGVycHJldF9jYXN0PGludHB0cl90Pih0bykgLSByZWlu
dGVycHJldF9jYXN0PGludHB0cl90Pihmcm9tSW5zdHJ1Y3Rpb24pKSA+PiAyOworICAgICAgICBp
bnRwdHJfdCBvZmZzZXQgPSAoYml0d2lzZV9jYXN0PGludHB0cl90Pih0bykgLSBiaXR3aXNlX2Nh
c3Q8aW50cHRyX3Q+KGZyb21JbnN0cnVjdGlvbikpID4+IDI7CiAgICAgICAgIEFTU0VSVChzdGF0
aWNfY2FzdDxpbnQ+KG9mZnNldCkgPT0gb2Zmc2V0KTsKIAorI2lmIFVTRShKVU1QX0lTTEFORFMp
CisgICAgICAgIGlmICghaXNJbnQ8MjY+KG9mZnNldCkpIHsKKyAgICAgICAgICAgIHRvID0gRXhl
Y3V0YWJsZUFsbG9jYXRvcjo6c2luZ2xldG9uKCkuZ2V0SnVtcElzbGFuZFRvKGJpdHdpc2VfY2Fz
dDx2b2lkKj4oZnJvbUluc3RydWN0aW9uKSwgdG8pOworICAgICAgICAgICAgb2Zmc2V0ID0gKGJp
dHdpc2VfY2FzdDxpbnRwdHJfdD4odG8pIC0gYml0d2lzZV9jYXN0PGludHB0cl90Pihmcm9tSW5z
dHJ1Y3Rpb24pKSA+PiAyOworICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoaXNJbnQ8MjY+KG9m
ZnNldCkpOworICAgICAgICB9CisjZW5kaWYKKwogICAgICAgICBpbnQgaW5zbiA9IHVuY29uZGl0
aW9uYWxCcmFuY2hJbW1lZGlhdGUoaXNDYWxsLCBzdGF0aWNfY2FzdDxpbnQ+KG9mZnNldCkpOwog
ICAgICAgICBSRUxFQVNFX0FTU0VSVChyb3VuZFVwVG9NdWx0aXBsZU9mPGluc3RydWN0aW9uU2l6
ZT4oZnJvbSkgPT0gZnJvbSk7CiAgICAgICAgIGNvcHkoZnJvbSwgJmluc24sIHNpemVvZihpbnQp
KTsKQEAgLTMwMDgsMTIgKzMwNDUsMTIgQEAgcHJvdGVjdGVkOgogICAgICAgICBBU1NFUlQoIShy
ZWludGVycHJldF9jYXN0PGludHB0cl90Pihmcm9tKSAmIDMpKTsKICAgICAgICAgQVNTRVJUKCEo
cmVpbnRlcnByZXRfY2FzdDxpbnRwdHJfdD4odG8pICYgMykpOwogICAgICAgICBpbnRwdHJfdCBv
ZmZzZXQgPSAocmVpbnRlcnByZXRfY2FzdDxpbnRwdHJfdD4odG8pIC0gcmVpbnRlcnByZXRfY2Fz
dDxpbnRwdHJfdD4oZnJvbUluc3RydWN0aW9uKSkgPj4gMjsKLSAgICAgICAgQVNTRVJUKGlzSW50
PDI2PihvZmZzZXQpKTsKIAogICAgICAgICBib29sIHVzZURpcmVjdCA9IGlzSW50PDE5PihvZmZz
ZXQpOwogICAgICAgICBBU1NFUlQodHlwZSA9PSBJbmRpcmVjdEJyYW5jaCB8fCB1c2VEaXJlY3Qp
OwogCiAgICAgICAgIGlmICh1c2VEaXJlY3QgfHwgdHlwZSA9PSBEaXJlY3RCcmFuY2gpIHsKKyAg
ICAgICAgICAgIEFTU0VSVChpc0ludDwxOT4ob2Zmc2V0KSk7CiAgICAgICAgICAgICBpbnQgaW5z
biA9IGNvbXBhcmVBbmRCcmFuY2hJbW1lZGlhdGUoaXM2NEJpdCA/IERhdGFzaXplXzY0IDogRGF0
YXNpemVfMzIsIGNvbmRpdGlvbiA9PSBDb25kaXRpb25ORSwgc3RhdGljX2Nhc3Q8aW50PihvZmZz
ZXQpLCBydCk7CiAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChyb3VuZFVwVG9NdWx0aXBsZU9m
PGluc3RydWN0aW9uU2l6ZT4oZnJvbSkgPT0gZnJvbSk7CiAgICAgICAgICAgICBjb3B5KGZyb20s
ICZpbnNuLCBzaXplb2YoaW50KSk7CkBAIC0zMDM2LDEyICszMDczLDEyIEBAIHByb3RlY3RlZDoK
ICAgICAgICAgQVNTRVJUKCEocmVpbnRlcnByZXRfY2FzdDxpbnRwdHJfdD4oZnJvbSkgJiAzKSk7
CiAgICAgICAgIEFTU0VSVCghKHJlaW50ZXJwcmV0X2Nhc3Q8aW50cHRyX3Q+KHRvKSAmIDMpKTsK
ICAgICAgICAgaW50cHRyX3Qgb2Zmc2V0ID0gKHJlaW50ZXJwcmV0X2Nhc3Q8aW50cHRyX3Q+KHRv
KSAtIHJlaW50ZXJwcmV0X2Nhc3Q8aW50cHRyX3Q+KGZyb21JbnN0cnVjdGlvbikpID4+IDI7Ci0g
ICAgICAgIEFTU0VSVChpc0ludDwyNj4ob2Zmc2V0KSk7CiAKICAgICAgICAgYm9vbCB1c2VEaXJl
Y3QgPSBpc0ludDwxOT4ob2Zmc2V0KTsKICAgICAgICAgQVNTRVJUKHR5cGUgPT0gSW5kaXJlY3RC
cmFuY2ggfHwgdXNlRGlyZWN0KTsKIAogICAgICAgICBpZiAodXNlRGlyZWN0IHx8IHR5cGUgPT0g
RGlyZWN0QnJhbmNoKSB7CisgICAgICAgICAgICBBU1NFUlQoaXNJbnQ8MTk+KG9mZnNldCkpOwog
ICAgICAgICAgICAgaW50IGluc24gPSBjb25kaXRpb25hbEJyYW5jaEltbWVkaWF0ZShzdGF0aWNf
Y2FzdDxpbnQ+KG9mZnNldCksIGNvbmRpdGlvbik7CiAgICAgICAgICAgICBSRUxFQVNFX0FTU0VS
VChyb3VuZFVwVG9NdWx0aXBsZU9mPGluc3RydWN0aW9uU2l6ZT4oZnJvbSkgPT0gZnJvbSk7CiAg
ICAgICAgICAgICBjb3B5KGZyb20sICZpbnNuLCBzaXplb2YoaW50KSk7CkBAIC0zMDY1LDEyICsz
MTAyLDEyIEBAIHByb3RlY3RlZDoKICAgICAgICAgQVNTRVJUKCEocmVpbnRlcnByZXRfY2FzdDxp
bnRwdHJfdD4odG8pICYgMykpOwogICAgICAgICBpbnRwdHJfdCBvZmZzZXQgPSAocmVpbnRlcnBy
ZXRfY2FzdDxpbnRwdHJfdD4odG8pIC0gcmVpbnRlcnByZXRfY2FzdDxpbnRwdHJfdD4oZnJvbUlu
c3RydWN0aW9uKSkgPj4gMjsKICAgICAgICAgQVNTRVJUKHN0YXRpY19jYXN0PGludD4ob2Zmc2V0
KSA9PSBvZmZzZXQpOwotICAgICAgICBBU1NFUlQoaXNJbnQ8MjY+KG9mZnNldCkpOwogCiAgICAg
ICAgIGJvb2wgdXNlRGlyZWN0ID0gaXNJbnQ8MTQ+KG9mZnNldCk7CiAgICAgICAgIEFTU0VSVCh0
eXBlID09IEluZGlyZWN0QnJhbmNoIHx8IHVzZURpcmVjdCk7CiAKICAgICAgICAgaWYgKHVzZURp
cmVjdCB8fCB0eXBlID09IERpcmVjdEJyYW5jaCkgeworICAgICAgICAgICAgQVNTRVJUKGlzSW50
PDE0PihvZmZzZXQpKTsKICAgICAgICAgICAgIGludCBpbnNuID0gdGVzdEFuZEJyYW5jaEltbWVk
aWF0ZShjb25kaXRpb24gPT0gQ29uZGl0aW9uTkUsIHN0YXRpY19jYXN0PGludD4oYml0TnVtYmVy
KSwgc3RhdGljX2Nhc3Q8aW50PihvZmZzZXQpLCBydCk7CiAgICAgICAgICAgICBSRUxFQVNFX0FT
U0VSVChyb3VuZFVwVG9NdWx0aXBsZU9mPGluc3RydWN0aW9uU2l6ZT4oZnJvbSkgPT0gZnJvbSk7
CiAgICAgICAgICAgICBjb3B5KGZyb20sICZpbnNuLCBzaXplb2YoaW50KSk7CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL0Fic3RyYWN0TWFjcm9Bc3NlbWJsZXIuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL0Fic3RyYWN0TWFjcm9B
c3NlbWJsZXIuaAkocmV2aXNpb24gMjU4OTk2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Fz
c2VtYmxlci9BYnN0cmFjdE1hY3JvQXNzZW1ibGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTkxOSw2
ICs5MTksMjIgQEAgcHVibGljOgogICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgp
OwogICAgIH0KIAorICAgIHRlbXBsYXRlPFB0clRhZyBjYWxsVGFnLCBQdHJUYWcgZGVzdFRhZz4K
KyAgICBzdGF0aWMgQ29kZUxvY2F0aW9uTGFiZWw8ZGVzdFRhZz4gcHJlcGFyZUZvckF0b21pY1Jl
cGF0Y2hOZWFyQ2FsbENvbmN1cnJlbnRseShDb2RlTG9jYXRpb25OZWFyQ2FsbDxjYWxsVGFnPiBu
ZWFyQ2FsbCwgQ29kZUxvY2F0aW9uTGFiZWw8ZGVzdFRhZz4gZGVzdGluYXRpb24pCisgICAgewor
I2lmIFVTRShKVU1QX0lTTEFORFMpCisgICAgICAgIHN3aXRjaCAobmVhckNhbGwuY2FsbE1vZGUo
KSkgeworICAgICAgICBjYXNlIE5lYXJDYWxsTW9kZTo6VGFpbDoKKyAgICAgICAgICAgIHJldHVy
biBDb2RlTG9jYXRpb25MYWJlbDxkZXN0VGFnPih0YWdDb2RlUHRyPGRlc3RUYWc+KEFzc2VtYmxl
clR5cGU6OnByZXBhcmVGb3JBdG9taWNSZWxpbmtKdW1wQ29uY3VycmVudGx5KG5lYXJDYWxsLmRh
dGFMb2NhdGlvbigpLCBkZXN0aW5hdGlvbi5kYXRhTG9jYXRpb24oKSkpKTsKKyAgICAgICAgY2Fz
ZSBOZWFyQ2FsbE1vZGU6OlJlZ3VsYXI6CisgICAgICAgICAgICByZXR1cm4gQ29kZUxvY2F0aW9u
TGFiZWw8ZGVzdFRhZz4odGFnQ29kZVB0cjxkZXN0VGFnPihBc3NlbWJsZXJUeXBlOjpwcmVwYXJl
Rm9yQXRvbWljUmVsaW5rQ2FsbENvbmN1cnJlbnRseShuZWFyQ2FsbC5kYXRhTG9jYXRpb24oKSwg
ZGVzdGluYXRpb24udW50YWdnZWRFeGVjdXRhYmxlQWRkcmVzcygpKSkpOworICAgICAgICB9Cisj
ZWxzZQorICAgICAgICBVTlVTRURfUEFSQU0obmVhckNhbGwpOworICAgICAgICByZXR1cm4gZGVz
dGluYXRpb247CisjZW5kaWYKKyAgICB9CisKICAgICB0ZW1wbGF0ZTxQdHJUYWcgdGFnPgogICAg
IHN0YXRpYyB2b2lkIHJlcGF0Y2hDb21wYWN0KENvZGVMb2NhdGlvbkRhdGFMYWJlbENvbXBhY3Q8
dGFnPiBkYXRhTGFiZWxDb21wYWN0LCBpbnQzMl90IHZhbHVlKQogICAgIHsKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTGlua0J1ZmZlci5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9MaW5rQnVmZmVyLmNwcAkocmV2aXNpb24g
MjU4OTk2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9MaW5rQnVmZmVyLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMTMxLDkgKzEzMSw5IEBAIHN0YXRpYyBBTFdBWVNfSU5MSU5F
IHZvaWQgcmVjb3JkTGlua09mZnMKIH0KIAogdGVtcGxhdGUgPHR5cGVuYW1lIEluc3RydWN0aW9u
VHlwZT4KLXZvaWQgTGlua0J1ZmZlcjo6Y29weUNvbXBhY3RBbmRMaW5rQ29kZShNYWNyb0Fzc2Vt
YmxlciYgbWFjcm9Bc3NlbWJsZXIsIHZvaWQqIG93bmVyVUlELCBKSVRDb21waWxhdGlvbkVmZm9y
dCBlZmZvcnQpCit2b2lkIExpbmtCdWZmZXI6OmNvcHlDb21wYWN0QW5kTGlua0NvZGUoTWFjcm9B
c3NlbWJsZXImIG1hY3JvQXNzZW1ibGVyLCBKSVRDb21waWxhdGlvbkVmZm9ydCBlZmZvcnQpCiB7
Ci0gICAgYWxsb2NhdGUobWFjcm9Bc3NlbWJsZXIsIG93bmVyVUlELCBlZmZvcnQpOworICAgIGFs
bG9jYXRlKG1hY3JvQXNzZW1ibGVyLCBlZmZvcnQpOwogICAgIGNvbnN0IHNpemVfdCBpbml0aWFs
U2l6ZSA9IG1hY3JvQXNzZW1ibGVyLm1fYXNzZW1ibGVyLmNvZGVTaXplKCk7CiAgICAgaWYgKGRp
ZEZhaWxUb0FsbG9jYXRlKCkpCiAgICAgICAgIHJldHVybjsKQEAgLTI5NSw3ICsyOTUsNyBAQCB2
b2lkIExpbmtCdWZmZXI6OmNvcHlDb21wYWN0QW5kTGlua0NvZGUoCiAjZW5kaWYgLy8gRU5BQkxF
KEJSQU5DSF9DT01QQUNUSU9OKQogCiAKLXZvaWQgTGlua0J1ZmZlcjo6bGlua0NvZGUoTWFjcm9B
c3NlbWJsZXImIG1hY3JvQXNzZW1ibGVyLCB2b2lkKiBvd25lclVJRCwgSklUQ29tcGlsYXRpb25F
ZmZvcnQgZWZmb3J0KQordm9pZCBMaW5rQnVmZmVyOjpsaW5rQ29kZShNYWNyb0Fzc2VtYmxlciYg
bWFjcm9Bc3NlbWJsZXIsIEpJVENvbXBpbGF0aW9uRWZmb3J0IGVmZm9ydCkKIHsKICAgICAvLyBF
bnN1cmUgdGhhdCB0aGUgZW5kIG9mIHRoZSBsYXN0IGludmFsaWRhdGlvbiBwb2ludCBkb2VzIG5v
dCBleHRlbmQgYmV5b25kIHRoZSBlbmQgb2YgdGhlIGJ1ZmZlci4KICAgICBtYWNyb0Fzc2VtYmxl
ci5sYWJlbCgpOwpAQCAtMzA0LDcgKzMwNCw3IEBAIHZvaWQgTGlua0J1ZmZlcjo6bGlua0NvZGUo
TWFjcm9Bc3NlbWJsZXIKICNpZiBkZWZpbmVkKEFTU0VNQkxFUl9IQVNfQ09OU1RBTlRfUE9PTCkg
JiYgQVNTRU1CTEVSX0hBU19DT05TVEFOVF9QT09MCiAgICAgbWFjcm9Bc3NlbWJsZXIubV9hc3Nl
bWJsZXIuYnVmZmVyKCkuZmx1c2hDb25zdGFudFBvb2woZmFsc2UpOwogI2VuZGlmCi0gICAgYWxs
b2NhdGUobWFjcm9Bc3NlbWJsZXIsIG93bmVyVUlELCBlZmZvcnQpOworICAgIGFsbG9jYXRlKG1h
Y3JvQXNzZW1ibGVyLCBlZmZvcnQpOwogICAgIGlmICghbV9kaWRBbGxvY2F0ZSkKICAgICAgICAg
cmV0dXJuOwogICAgIEFTU0VSVChtX2NvZGUpOwpAQCAtMzE4LDE1ICszMTgsMTUgQEAgdm9pZCBM
aW5rQnVmZmVyOjpsaW5rQ29kZShNYWNyb0Fzc2VtYmxlcgogICAgIG1hY3JvQXNzZW1ibGVyLm1f
YXNzZW1ibGVyLnJlbG9jYXRlSnVtcHMoYnVmZmVyLmRhdGEoKSwgY29kZSk7CiAjZW5kaWYKICNl
bGlmIENQVShBUk1fVEhVTUIyKQotICAgIGNvcHlDb21wYWN0QW5kTGlua0NvZGU8dWludDE2X3Q+
KG1hY3JvQXNzZW1ibGVyLCBvd25lclVJRCwgZWZmb3J0KTsKKyAgICBjb3B5Q29tcGFjdEFuZExp
bmtDb2RlPHVpbnQxNl90PihtYWNyb0Fzc2VtYmxlciwgZWZmb3J0KTsKICNlbGlmIENQVShBUk02
NCkKLSAgICBjb3B5Q29tcGFjdEFuZExpbmtDb2RlPHVpbnQzMl90PihtYWNyb0Fzc2VtYmxlciwg
b3duZXJVSUQsIGVmZm9ydCk7CisgICAgY29weUNvbXBhY3RBbmRMaW5rQ29kZTx1aW50MzJfdD4o
bWFjcm9Bc3NlbWJsZXIsIGVmZm9ydCk7CiAjZW5kaWYgLy8gIUVOQUJMRShCUkFOQ0hfQ09NUEFD
VElPTikKIAogICAgIG1fbGlua1Rhc2tzID0gV1RGTW92ZShtYWNyb0Fzc2VtYmxlci5tX2xpbmtU
YXNrcyk7CiB9CiAKLXZvaWQgTGlua0J1ZmZlcjo6YWxsb2NhdGUoTWFjcm9Bc3NlbWJsZXImIG1h
Y3JvQXNzZW1ibGVyLCB2b2lkKiBvd25lclVJRCwgSklUQ29tcGlsYXRpb25FZmZvcnQgZWZmb3J0
KQordm9pZCBMaW5rQnVmZmVyOjphbGxvY2F0ZShNYWNyb0Fzc2VtYmxlciYgbWFjcm9Bc3NlbWJs
ZXIsIEpJVENvbXBpbGF0aW9uRWZmb3J0IGVmZm9ydCkKIHsKICAgICBzaXplX3QgaW5pdGlhbFNp
emUgPSBtYWNyb0Fzc2VtYmxlci5tX2Fzc2VtYmxlci5jb2RlU2l6ZSgpOwogICAgIGlmIChtX2Nv
ZGUpIHsKQEAgLTM0NCw3ICszNDQsNyBAQCB2b2lkIExpbmtCdWZmZXI6OmFsbG9jYXRlKE1hY3Jv
QXNzZW1ibGVyCiAgICAgICAgIGluaXRpYWxTaXplID0gbWFjcm9Bc3NlbWJsZXIubV9hc3NlbWJs
ZXIuY29kZVNpemUoKTsKICAgICB9CiAKLSAgICBtX2V4ZWN1dGFibGVNZW1vcnkgPSBFeGVjdXRh
YmxlQWxsb2NhdG9yOjpzaW5nbGV0b24oKS5hbGxvY2F0ZShpbml0aWFsU2l6ZSwgb3duZXJVSUQs
IGVmZm9ydCk7CisgICAgbV9leGVjdXRhYmxlTWVtb3J5ID0gRXhlY3V0YWJsZUFsbG9jYXRvcjo6
c2luZ2xldG9uKCkuYWxsb2NhdGUoaW5pdGlhbFNpemUsIGVmZm9ydCk7CiAgICAgaWYgKCFtX2V4
ZWN1dGFibGVNZW1vcnkpCiAgICAgICAgIHJldHVybjsKICAgICBtX2NvZGUgPSBNYWNyb0Fzc2Vt
YmxlckNvZGVQdHI8TGlua0J1ZmZlclB0clRhZz4obV9leGVjdXRhYmxlTWVtb3J5LT5zdGFydCgp
LnJldGFnZ2VkUHRyPExpbmtCdWZmZXJQdHJUYWc+KCkpOwpAQCAtMzU4LDcgKzM1OCw3IEBAIHZv
aWQgTGlua0J1ZmZlcjo6cGVyZm9ybUZpbmFsaXphdGlvbigpCiAgICAgICAgIHRhc2stPnJ1bigq
dGhpcyk7CiAKICNpZm5kZWYgTkRFQlVHCi0gICAgQVNTRVJUKCFpc0NvbXBpbGF0aW9uVGhyZWFk
KCkpOworICAgIEFTU0VSVChtX2lzSnVtcElzbGFuZCB8fCAhaXNDb21waWxhdGlvblRocmVhZCgp
KTsKICAgICBBU1NFUlQoIW1fY29tcGxldGVkKTsKICAgICBBU1NFUlQoaXNWYWxpZCgpKTsKICAg
ICBtX2NvbXBsZXRlZCA9IHRydWU7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1i
bGVyL0xpbmtCdWZmZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNz
ZW1ibGVyL0xpbmtCdWZmZXIuaAkocmV2aXNpb24gMjU4OTk2KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2Fzc2VtYmxlci9MaW5rQnVmZmVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTkwLDcgKzkw
LDggQEAgcHVibGljOgogICAgICAgICAsIG1fY29tcGxldGVkKGZhbHNlKQogI2VuZGlmCiAgICAg
ewotICAgICAgICBsaW5rQ29kZShtYWNyb0Fzc2VtYmxlciwgb3duZXJVSUQsIGVmZm9ydCk7Cisg
ICAgICAgIFVOVVNFRF9QQVJBTShvd25lclVJRCk7CisgICAgICAgIGxpbmtDb2RlKG1hY3JvQXNz
ZW1ibGVyLCBlZmZvcnQpOwogICAgIH0KIAogICAgIHRlbXBsYXRlPFB0clRhZyB0YWc+CkBAIC0x
MDcsNyArMTA4LDcgQEAgcHVibGljOgogI2Vsc2UKICAgICAgICAgVU5VU0VEX1BBUkFNKHNob3Vs
ZFBlcmZvcm1CcmFuY2hDb21wYWN0aW9uKTsKICNlbmRpZgotICAgICAgICBsaW5rQ29kZShtYWNy
b0Fzc2VtYmxlciwgMCwgZWZmb3J0KTsKKyAgICAgICAgbGlua0NvZGUobWFjcm9Bc3NlbWJsZXIs
IGVmZm9ydCk7CiAgICAgfQogCiAgICAgfkxpbmtCdWZmZXIoKQpAQCAtMTIzLDYgKzEyNCwxMyBA
QCBwdWJsaWM6CiAgICAgewogICAgICAgICByZXR1cm4gIWRpZEZhaWxUb0FsbG9jYXRlKCk7CiAg
ICAgfQorCisgICAgdm9pZCBzZXRJc0p1bXBJc2xhbmQoKQorICAgIHsKKyNpZiBBU1NFUlRfRU5B
QkxFRAorICAgICAgICBtX2lzSnVtcElzbGFuZCA9IHRydWU7CisjZW5kaWYKKyAgICB9CiAgICAg
CiAgICAgLy8gVGhlc2UgbWV0aG9kcyBhcmUgdXNlZCB0byBsaW5rIG9yIHNldCB2YWx1ZXMgYXQg
Y29kZSBnZW5lcmF0aW9uIHRpbWUuCiAKQEAgLTMyMSwxMiArMzI5LDEyIEBAIHByaXZhdGU6CiAg
ICAgICAgIHJldHVybiBtX2NvZGUuZGF0YUxvY2F0aW9uKCk7CiAgICAgfQogICAgIAotICAgIHZv
aWQgYWxsb2NhdGUoTWFjcm9Bc3NlbWJsZXImLCB2b2lkKiBvd25lclVJRCwgSklUQ29tcGlsYXRp
b25FZmZvcnQpOworICAgIHZvaWQgYWxsb2NhdGUoTWFjcm9Bc3NlbWJsZXImLCBKSVRDb21waWxh
dGlvbkVmZm9ydCk7CiAKLSAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lkIGxpbmtDb2RlKE1hY3Jv
QXNzZW1ibGVyJiwgdm9pZCogb3duZXJVSUQsIEpJVENvbXBpbGF0aW9uRWZmb3J0KTsKKyAgICBK
U19FWFBPUlRfUFJJVkFURSB2b2lkIGxpbmtDb2RlKE1hY3JvQXNzZW1ibGVyJiwgSklUQ29tcGls
YXRpb25FZmZvcnQpOwogI2lmIEVOQUJMRShCUkFOQ0hfQ09NUEFDVElPTikKICAgICB0ZW1wbGF0
ZSA8dHlwZW5hbWUgSW5zdHJ1Y3Rpb25UeXBlPgotICAgIHZvaWQgY29weUNvbXBhY3RBbmRMaW5r
Q29kZShNYWNyb0Fzc2VtYmxlciYsIHZvaWQqIG93bmVyVUlELCBKSVRDb21waWxhdGlvbkVmZm9y
dCk7CisgICAgdm9pZCBjb3B5Q29tcGFjdEFuZExpbmtDb2RlKE1hY3JvQXNzZW1ibGVyJiwgSklU
Q29tcGlsYXRpb25FZmZvcnQpOwogI2VuZGlmCiAKICAgICB2b2lkIHBlcmZvcm1GaW5hbGl6YXRp
b24oKTsKQEAgLTM0OSw2ICszNTcsOSBAQCBwcml2YXRlOgogI2lmbmRlZiBOREVCVUcKICAgICBi
b29sIG1fY29tcGxldGVkOwogI2VuZGlmCisjaWYgQVNTRVJUX0VOQUJMRUQKKyAgICBib29sIG1f
aXNKdW1wSXNsYW5kIHsgZmFsc2UgfTsKKyNlbmRpZgogICAgIGJvb2wgbV9hbHJlYWR5RGlzYXNz
ZW1ibGVkIHsgZmFsc2UgfTsKICAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8TGlua0J1ZmZlclB0
clRhZz4gbV9jb2RlOwogICAgIFZlY3RvcjxSZWZQdHI8U2hhcmVkVGFzazx2b2lkKExpbmtCdWZm
ZXImKT4+PiBtX2xpbmtUYXNrczsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJs
ZXIvTWFjcm9Bc3NlbWJsZXJDb2RlUmVmLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlckNvZGVSZWYuaAkocmV2aXNpb24gMjU4OTk2
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlckNvZGVS
ZWYuaAkod29ya2luZyBjb3B5KQpAQCAtNDM0LDcgKzQzNCw2IEBAIHB1YmxpYzoKICAgICAgICAg
OiBtX2NvZGVQdHIoZXhlY3V0YWJsZU1lbW9yeS0+c3RhcnQoKS5yZXRhZ2dlZFB0cjx0YWc+KCkp
CiAgICAgICAgICwgbV9leGVjdXRhYmxlTWVtb3J5KFdURk1vdmUoZXhlY3V0YWJsZU1lbW9yeSkp
CiAgICAgewotICAgICAgICBBU1NFUlQobV9leGVjdXRhYmxlTWVtb3J5LT5pc01hbmFnZWQoKSk7
CiAgICAgICAgIEFTU0VSVChtX2V4ZWN1dGFibGVNZW1vcnktPnN0YXJ0KCkpOwogICAgICAgICBB
U1NFUlQobV9jb2RlUHRyKTsKICAgICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L0V4ZWN1dGFibGVBbGxvY2F0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvRXhlY3V0YWJsZUFsbG9jYXRvci5jcHAJKHJldmlzaW9uIDI1ODk5NikKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvRXhlY3V0YWJsZUFsbG9jYXRvci5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA4LTIwMTkgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA4LTIwMjAg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCkBAIC0yOCw5ICsyOCwxMCBAQAogCiAjaWYgRU5BQkxFKEpJVCkKIAotI2luY2x1ZGUg
IkNvZGVQcm9maWxpbmcuaCIKICNpbmNsdWRlICJFeGVjdXRhYmxlQWxsb2NhdGlvbkZ1enouaCIK
KyNpbmNsdWRlICJJdGVyYXRpb25TdGF0dXMuaCIKICNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCisj
aW5jbHVkZSA8dHlwZV90cmFpdHM+CiAjaW5jbHVkZSA8d3RmL0ZpbGVTeXN0ZW0uaD4KICNpbmNs
dWRlIDx3dGYvTWV0YUFsbG9jYXRvci5oPgogI2luY2x1ZGUgPHd0Zi9QYWdlUmVzZXJ2YXRpb24u
aD4KQEAgLTkyLDE1ICs5MywyNiBAQCBuYW1lc3BhY2UgSlNDIHsKIHVzaW5nIG5hbWVzcGFjZSBX
VEY7CiAKICNpZiBkZWZpbmVkKEZJWEVEX0VYRUNVVEFCTEVfTUVNT1JZX1BPT0xfU0laRV9JTl9N
QikgJiYgRklYRURfRVhFQ1VUQUJMRV9NRU1PUllfUE9PTF9TSVpFX0lOX01CID4gMAotc3RhdGlj
IGNvbnN0ZXhwciBzaXplX3QgZml4ZWRFeGVjdXRhYmxlTWVtb3J5UG9vbFNpemUgPSBGSVhFRF9F
WEVDVVRBQkxFX01FTU9SWV9QT09MX1NJWkVfSU5fTUIgKiAxMDI0ICogMTAyNDsKK3N0YXRpYyBj
b25zdGV4cHIgc2l6ZV90IGZpeGVkRXhlY3V0YWJsZU1lbW9yeVBvb2xTaXplID0gRklYRURfRVhF
Q1VUQUJMRV9NRU1PUllfUE9PTF9TSVpFX0lOX01CICogTUI7CiAjZWxpZiBDUFUoQVJNKQotc3Rh
dGljIGNvbnN0ZXhwciBzaXplX3QgZml4ZWRFeGVjdXRhYmxlTWVtb3J5UG9vbFNpemUgPSAxNiAq
IDEwMjQgKiAxMDI0Oworc3RhdGljIGNvbnN0ZXhwciBzaXplX3QgZml4ZWRFeGVjdXRhYmxlTWVt
b3J5UG9vbFNpemUgPSAxNiAqIE1COwogI2VsaWYgQ1BVKEFSTTY0KQotc3RhdGljIGNvbnN0ZXhw
ciBzaXplX3QgZml4ZWRFeGVjdXRhYmxlTWVtb3J5UG9vbFNpemUgPSAxMjggKiAxMDI0ICogMTAy
NDsKKyNpZiBVU0UoSlVNUF9JU0xBTkRTKQorc3RhdGljIGNvbnN0ZXhwciBzaXplX3QgZml4ZWRF
eGVjdXRhYmxlTWVtb3J5UG9vbFNpemUgPSAxICogR0I7CisvLyBUaGVzZSBzaXplcyBndWFyYW50
ZWUgdGhhdCBhbnkganVtcCB3aXRoaW4gYW4gaXNsYW5kIGNhbiBqdW1wIGZvcndhcmRzIG9yIGJh
Y2t3YXJkcworLy8gdG8gdGhlIGFkamFjZW50IGlzbGFuZCBpbiBhIHNpbmdsZSBpbnN0cnVjdGlv
bi4KK3N0YXRpYyBjb25zdGV4cHIgc2l6ZV90IHJlZ2lvblNpemUgPSAxMTIgKiBNQjsKK3N0YXRp
YyBjb25zdGV4cHIgc2l6ZV90IGlzbGFuZFJlZ2lvblNpemUgPSAxNiAqIE1COworc3RhdGljIGNv
bnN0ZXhwciBzaXplX3QgbnVtYmVyT2ZSZWdpb25zID0gZml4ZWRFeGVjdXRhYmxlTWVtb3J5UG9v
bFNpemUgLyByZWdpb25TaXplOworc3RhdGljIGNvbnN0ZXhwciBzaXplX3QgaXNsYW5kU2l6ZUlu
Qnl0ZXMgPSA0Oworc3RhdGljIGNvbnN0ZXhwciBzaXplX3QgbWF4SXNsYW5kc1BlclJlZ2lvbiA9
IGlzbGFuZFJlZ2lvblNpemUgLyBpc2xhbmRTaXplSW5CeXRlczsKKyNlbHNlCitzdGF0aWMgY29u
c3RleHByIHNpemVfdCBmaXhlZEV4ZWN1dGFibGVNZW1vcnlQb29sU2l6ZSA9IDEyOCAqIE1COwor
I2VuZGlmCiAjZWxpZiBDUFUoWDg2XzY0KQotc3RhdGljIGNvbnN0ZXhwciBzaXplX3QgZml4ZWRF
eGVjdXRhYmxlTWVtb3J5UG9vbFNpemUgPSAxMDI0ICogMTAyNCAqIDEwMjQ7CitzdGF0aWMgY29u
c3RleHByIHNpemVfdCBmaXhlZEV4ZWN1dGFibGVNZW1vcnlQb29sU2l6ZSA9IDEgKiBHQjsKICNl
bHNlCi1zdGF0aWMgY29uc3RleHByIHNpemVfdCBmaXhlZEV4ZWN1dGFibGVNZW1vcnlQb29sU2l6
ZSA9IDMyICogMTAyNCAqIDEwMjQ7CitzdGF0aWMgY29uc3RleHByIHNpemVfdCBmaXhlZEV4ZWN1
dGFibGVNZW1vcnlQb29sU2l6ZSA9IDMyICogTUI7CiAjZW5kaWYKIAogI2lmIENQVShBUk0pCkBA
IC0zMTMsMTAgKzMyNSwxMyBAQCBzdGF0aWMgQUxXQVlTX0lOTElORSBKSVRSZXNlcnZhdGlvbiBp
bml0CiAgICAgaWYgKCFpc0pJVEVuYWJsZWQoKSkKICAgICAgICAgcmV0dXJuIHJlc2VydmF0aW9u
OwogCisgICAgcmVzZXJ2YXRpb24uc2l6ZSA9IGZpeGVkRXhlY3V0YWJsZU1lbW9yeVBvb2xTaXpl
OworI2lmICFVU0UoSlVNUF9JU0xBTkRTKQorICAgIC8vIEZJWE1FOiBDb25zaWRlciBtYWtpbmcg
anVtcCBpc2xhbmRzIHdvcmsgd2l0aCBPcHRpb25zOjpqaXRNZW1vcnlSZXNlcnZhdGlvblNpemUK
KyAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjA5MDM3CiAg
ICAgaWYgKE9wdGlvbnM6OmppdE1lbW9yeVJlc2VydmF0aW9uU2l6ZSgpKQogICAgICAgICByZXNl
cnZhdGlvbi5zaXplID0gT3B0aW9uczo6aml0TWVtb3J5UmVzZXJ2YXRpb25TaXplKCk7Ci0gICAg
ZWxzZQotICAgICAgICByZXNlcnZhdGlvbi5zaXplID0gZml4ZWRFeGVjdXRhYmxlTWVtb3J5UG9v
bFNpemU7CisjZW5kaWYKICAgICByZXNlcnZhdGlvbi5zaXplID0gc3RkOjptYXgocm91bmRVcFRv
TXVsdGlwbGVPZihwYWdlU2l6ZSgpLCByZXNlcnZhdGlvbi5zaXplKSwgcGFnZVNpemUoKSAqIDIp
OwogCiAgICAgYXV0byB0cnlDcmVhdGVQYWdlUmVzZXJ2YXRpb24gPSBbXSAoc2l6ZV90IHJlc2Vy
dmF0aW9uU2l6ZSkgewpAQCAtMzYzLDUyICszNzgsNDU5IEBAIHN0YXRpYyBBTFdBWVNfSU5MSU5F
IEpJVFJlc2VydmF0aW9uIGluaXQKICAgICByZXR1cm4gcmVzZXJ2YXRpb247CiB9CiAKLWNsYXNz
IEZpeGVkVk1Qb29sRXhlY3V0YWJsZUFsbG9jYXRvciBmaW5hbCA6IHB1YmxpYyBNZXRhQWxsb2Nh
dG9yIHsKK2NsYXNzIEZpeGVkVk1Qb29sRXhlY3V0YWJsZUFsbG9jYXRvciBmaW5hbCB7CiAgICAg
V1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CisKKyNpZiBVU0UoSlVNUF9JU0xBTkRTKQorICAgIGNs
YXNzIElzbGFuZHM7CisgICAgY2xhc3MgUmVnaW9uQWxsb2NhdG9yOworI2VuZGlmCisKIHB1Ymxp
YzoKICAgICBGaXhlZFZNUG9vbEV4ZWN1dGFibGVBbGxvY2F0b3IoKQotICAgICAgICA6IE1ldGFB
bGxvY2F0b3Ioaml0QWxsb2NhdGlvbkdyYW51bGUpIC8vIHJvdW5kIHVwIGFsbCBhbGxvY2F0aW9u
cyB0byAzMiBieXRlcworI2lmIFVTRShKVU1QX0lTTEFORFMpCisgICAgICAgIDogbV9hbGxvY2F0
b3JzKGNvbnN0cnVjdEZpeGVkU2l6ZUFycmF5V2l0aEFyZ3VtZW50czxSZWdpb25BbGxvY2F0b3Is
IG51bWJlck9mUmVnaW9ucz4oKnRoaXMpKQorI2Vsc2UKKyAgICAgICAgOiBtX2FsbG9jYXRvcigq
dGhpcykKKyNlbmRpZgogICAgIHsKICAgICAgICAgSklUUmVzZXJ2YXRpb24gcmVzZXJ2YXRpb24g
PSBpbml0aWFsaXplSklUUGFnZVJlc2VydmF0aW9uKCk7CiAgICAgICAgIG1fcmVzZXJ2YXRpb24g
PSBXVEZNb3ZlKHJlc2VydmF0aW9uLnBhZ2VSZXNlcnZhdGlvbik7CiAgICAgICAgIGlmIChtX3Jl
c2VydmF0aW9uKSB7Ci0gICAgICAgICAgICBhZGRGcmVzaEZyZWVTcGFjZShyZXNlcnZhdGlvbi5i
YXNlLCByZXNlcnZhdGlvbi5zaXplKTsKKyNpZiBVU0UoSlVNUF9JU0xBTkRTKQorICAgICAgICAg
ICAgdWludHB0cl90IHN0YXJ0ID0gYml0d2lzZV9jYXN0PHVpbnRwdHJfdD4obWVtb3J5U3RhcnQo
KSk7CisgICAgICAgICAgICB1aW50cHRyX3QgcmVzZXJ2YXRpb25FbmQgPSBiaXR3aXNlX2Nhc3Q8
dWludHB0cl90PihtZW1vcnlFbmQoKSk7CisgICAgICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsg
aSA8IG51bWJlck9mUmVnaW9uczsgKytpKSB7CisgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NF
UlQoc3RhcnQgPCByZXNlcnZhdGlvbkVuZCk7CisgICAgICAgICAgICAgICAgbV9hbGxvY2F0b3Jz
W2ldLm1fc3RhcnQgPSB0YWdDb2RlUHRyPEV4ZWN1dGFibGVNZW1vcnlQdHJUYWc+KGJpdHdpc2Vf
Y2FzdDx2b2lkKj4oc3RhcnQpKTsKKyAgICAgICAgICAgICAgICBtX2FsbG9jYXRvcnNbaV0ubV9l
bmQgPSB0YWdDb2RlUHRyPEV4ZWN1dGFibGVNZW1vcnlQdHJUYWc+KGJpdHdpc2VfY2FzdDx2b2lk
Kj4oc3RhcnQgKyByZWdpb25TaXplKSk7CisgICAgICAgICAgICAgICAgaWYgKG1fYWxsb2NhdG9y
c1tpXS5lbmQoKSA+IHJlc2VydmF0aW9uRW5kKSB7CisgICAgICAgICAgICAgICAgICAgIC8vIFdl
IG1heSBoYXZlIHRha2VuIGEgcGFnZSBmb3IgdGhlIGV4ZWN1dGFibGUgb25seSBjb3B5IHRodW5r
LgorICAgICAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChpID09IG51bWJlck9mUmVnaW9u
cyAtIDEpOworICAgICAgICAgICAgICAgICAgICBtX2FsbG9jYXRvcnNbaV0ubV9lbmQgPSB0YWdD
b2RlUHRyPEV4ZWN1dGFibGVNZW1vcnlQdHJUYWc+KGJpdHdpc2VfY2FzdDx2b2lkKj4ocmVzZXJ2
YXRpb25FbmQpKTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBtX2FsbG9j
YXRvcnNbaV0uYWRkRnJlc2hGcmVlU3BhY2UoYml0d2lzZV9jYXN0PHZvaWQqPihtX2FsbG9jYXRv
cnNbaV0uc3RhcnQoKSksIG1fYWxsb2NhdG9yc1tpXS5hbGxvY2F0b3JTaXplKCkpOworCisgICAg
ICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQobV9hbGxvY2F0b3JzW2ldLmFsbG9jYXRvclNpemUo
KSA8IHJlZ2lvblNpemUpOworICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKG1fYWxsb2Nh
dG9yc1tpXS5pc2xhbmRCZWdpbigpID4gbV9hbGxvY2F0b3JzW2ldLnN0YXJ0KCkpOworICAgICAg
ICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKG1fYWxsb2NhdG9yc1tpXS5pc2xhbmRCZWdpbigpIDwg
bV9hbGxvY2F0b3JzW2ldLmVuZCgpKTsKKworICAgICAgICAgICAgICAgIHN0YXJ0ICs9IHJlZ2lv
blNpemU7CisgICAgICAgICAgICB9CisjZWxzZQorICAgICAgICAgICAgbV9hbGxvY2F0b3IuYWRk
RnJlc2hGcmVlU3BhY2UocmVzZXJ2YXRpb24uYmFzZSwgcmVzZXJ2YXRpb24uc2l6ZSk7CiAgICAg
ICAgICAgICBBU1NFUlQoYnl0ZXNSZXNlcnZlZCgpID09IHJlc2VydmF0aW9uLnNpemUpOyAvLyBT
aW5jZSBvdXIgZXhlY3V0YWJsZSBtZW1vcnkgaXMgZml4ZWQtc2l6ZWQsIGJ5dGVzUmVzZXJ2ZWQg
aXMgbmV2ZXIgY2hhbmdlZCBhZnRlciBpbml0aWFsaXphdGlvbi4KKyNlbmRpZgogICAgICAgICB9
CiAgICAgfQogCi0gICAgdmlydHVhbCB+Rml4ZWRWTVBvb2xFeGVjdXRhYmxlQWxsb2NhdG9yKCk7
CisgICAgfkZpeGVkVk1Qb29sRXhlY3V0YWJsZUFsbG9jYXRvcigpCisgICAgeworICAgICAgICBt
X3Jlc2VydmF0aW9uLmRlYWxsb2NhdGUoKTsKKyAgICB9CiAKICAgICB2b2lkKiBtZW1vcnlTdGFy
dCgpIHsgcmV0dXJuIHVudGFnQ29kZVB0cjxFeGVjdXRhYmxlTWVtb3J5UHRyVGFnPihnX2pzY0Nv
bmZpZy5zdGFydEV4ZWN1dGFibGVNZW1vcnkpOyB9CiAgICAgdm9pZCogbWVtb3J5RW5kKCkgeyBy
ZXR1cm4gdW50YWdDb2RlUHRyPEV4ZWN1dGFibGVNZW1vcnlQdHJUYWc+KGdfanNjQ29uZmlnLmVu
ZEV4ZWN1dGFibGVNZW1vcnkpOyB9CiAgICAgYm9vbCBpc0pJVFBDKHZvaWQqIHBjKSB7IHJldHVy
biBtZW1vcnlTdGFydCgpIDw9IHBjICYmIHBjIDwgbWVtb3J5RW5kKCk7IH0KKyAgICBib29sIGlz
VmFsaWQoKSB7IHJldHVybiAhIW1fcmVzZXJ2YXRpb247IH0KIAotcHJvdGVjdGVkOgotICAgIEZy
ZWVTcGFjZVB0ciBhbGxvY2F0ZU5ld1NwYWNlKHNpemVfdCYpIG92ZXJyaWRlCisgICAgUmVmUHRy
PEV4ZWN1dGFibGVNZW1vcnlIYW5kbGU+IGFsbG9jYXRlKHNpemVfdCBzaXplSW5CeXRlcykKICAg
ICB7Ci0gICAgICAgIC8vIFdlJ3JlIG9wZXJhdGluZyBpbiBhIGZpeGVkIHBvb2wsIHNvIG5ldyBh
bGxvY2F0aW9uIGlzIGFsd2F5cyBwcm9oaWJpdGVkLgorI2lmIFVTRShKVU1QX0lTTEFORFMpCisg
ICAgICAgIGF1dG8gbG9ja2VyID0gaG9sZExvY2soZ2V0TG9jaygpKTsKKworICAgICAgICB1bnNp
Z25lZCBzdGFydCA9IDA7CisgICAgICAgIGlmIChPcHRpb25zOjp1c2VSYW5kb21pemluZ0V4ZWN1
dGFibGVJc2xhbmRBbGxvY2F0aW9uKCkpCisgICAgICAgICAgICBzdGFydCA9IGNyeXB0b2dyYXBo
aWNhbGx5UmFuZG9tTnVtYmVyKCkgJSBtX2FsbG9jYXRvcnMuc2l6ZSgpOworCisgICAgICAgIHVu
c2lnbmVkIGkgPSBzdGFydDsKKyAgICAgICAgd2hpbGUgKHRydWUpIHsKKyAgICAgICAgICAgIFJl
Z2lvbkFsbG9jYXRvciYgYWxsb2NhdG9yID0gbV9hbGxvY2F0b3JzW2ldOworICAgICAgICAgICAg
aWYgKFJlZlB0cjxFeGVjdXRhYmxlTWVtb3J5SGFuZGxlPiByZXN1bHQgPSBhbGxvY2F0b3IuYWxs
b2NhdGUobG9ja2VyLCBzaXplSW5CeXRlcykpCisgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3Vs
dDsKKyAgICAgICAgICAgIGkgPSAoaSArIDEpICUgbV9hbGxvY2F0b3JzLnNpemUoKTsKKyAgICAg
ICAgICAgIGlmIChpID09IHN0YXJ0KQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9
CiAgICAgICAgIHJldHVybiBudWxscHRyOworI2Vsc2UKKyAgICAgICAgcmV0dXJuIG1fYWxsb2Nh
dG9yLmFsbG9jYXRlKHNpemVJbkJ5dGVzKTsKKyNlbmRpZiAvLyBVU0UoSlVNUF9JU0xBTkRTKQog
ICAgIH0KIAotICAgIHZvaWQgbm90aWZ5TmVlZFBhZ2Uodm9pZCogcGFnZSwgc2l6ZV90IGNvdW50
KSBvdmVycmlkZQorICAgIExvY2smIGdldExvY2soKSB7IHJldHVybiBtX2xvY2s7IH0KKworICAg
IC8vIE5vbiBhdG9taWMKKyAgICBzaXplX3QgYnl0ZXNBbGxvY2F0ZWQoKSAKKyAgICB7CisgICAg
ICAgIHNpemVfdCByZXN1bHQgPSAwOworICAgICAgICBmb3JFYWNoQWxsb2NhdG9yKFsmXSAoQWxs
b2NhdG9yJiBhbGxvY2F0b3IpIHsKKyAgICAgICAgICAgIHJlc3VsdCArPSBhbGxvY2F0b3IuYnl0
ZXNBbGxvY2F0ZWQoKTsKKyAgICAgICAgfSk7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAg
fQorICAgIHNpemVfdCBieXRlc1Jlc2VydmVkKCkgCisgICAgeworICAgICAgICBzaXplX3QgcmVz
dWx0ID0gMDsKKyAgICAgICAgZm9yRWFjaEFsbG9jYXRvcihbJl0gKEFsbG9jYXRvciYgYWxsb2Nh
dG9yKSB7CisgICAgICAgICAgICByZXN1bHQgKz0gYWxsb2NhdG9yLmJ5dGVzUmVzZXJ2ZWQoKTsK
KyAgICAgICAgfSk7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorICAgIHNpemVfdCBi
eXRlc0NvbW1pdHRlZCgpCisgICAgeworICAgICAgICBzaXplX3QgcmVzdWx0ID0gMDsKKyAgICAg
ICAgZm9yRWFjaEFsbG9jYXRvcihbJl0gKEFsbG9jYXRvciYgYWxsb2NhdG9yKSB7CisgICAgICAg
ICAgICByZXN1bHQgKz0gYWxsb2NhdG9yLmJ5dGVzQ29tbWl0dGVkKCk7CisgICAgICAgIH0pOwor
ICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKworICAgIGJvb2wgaXNJbkFsbG9jYXRlZE1l
bW9yeShjb25zdCBBYnN0cmFjdExvY2tlciYgbG9ja2VyLCB2b2lkKiBhZGRyZXNzKQogICAgIHsK
LSAgICAgICAgbV9yZXNlcnZhdGlvbi5jb21taXQocGFnZSwgcGFnZVNpemUoKSAqIGNvdW50KTsK
KyNpZiBVU0UoSlVNUF9JU0xBTkRTKQorICAgICAgICBpZiAoUmVnaW9uQWxsb2NhdG9yKiBhbGxv
Y2F0b3IgPSBmaW5kUmVnaW9uKGJpdHdpc2VfY2FzdDx1aW50cHRyX3Q+KGFkZHJlc3MpKSkKKyAg
ICAgICAgICAgIHJldHVybiBhbGxvY2F0b3ItPmlzSW5BbGxvY2F0ZWRNZW1vcnkobG9ja2VyLCBh
ZGRyZXNzKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworI2Vsc2UKKyAgICAgICAgcmV0dXJuIG1f
YWxsb2NhdG9yLmlzSW5BbGxvY2F0ZWRNZW1vcnkobG9ja2VyLCBhZGRyZXNzKTsKKyNlbmRpZgog
ICAgIH0KIAotICAgIHZvaWQgbm90aWZ5UGFnZUlzRnJlZSh2b2lkKiBwYWdlLCBzaXplX3QgY291
bnQpIG92ZXJyaWRlCisjaWYgRU5BQkxFKE1FVEFfQUxMT0NBVE9SX1BST0ZJTEUpCisgICAgdm9p
ZCBkdW1wUHJvZmlsZSgpCiAgICAgewotICAgICAgICBtX3Jlc2VydmF0aW9uLmRlY29tbWl0KHBh
Z2UsIHBhZ2VTaXplKCkgKiBjb3VudCk7CisgICAgICAgIGZvckVhY2hBbGxvY2F0b3IoWyZdIChB
bGxvY2F0b3ImIGFsbG9jYXRvcikgeworICAgICAgICAgICAgYWxsb2NhdG9yLmR1bXBQcm9maWxl
KCk7CisgICAgICAgIH0pOworICAgIH0KKyNlbmRpZgorCisgICAgTWV0YUFsbG9jYXRvcjo6U3Rh
dGlzdGljcyBjdXJyZW50U3RhdGlzdGljcygpCisgICAgeworICAgICAgICBhdXRvIGxvY2tlciA9
IGhvbGRMb2NrKGdldExvY2soKSk7CisgICAgICAgIE1ldGFBbGxvY2F0b3I6OlN0YXRpc3RpY3Mg
cmVzdWx0IHsgMCwgMCwgMCB9OworICAgICAgICBmb3JFYWNoQWxsb2NhdG9yKFsmXSAoQWxsb2Nh
dG9yJiBhbGxvY2F0b3IpIHsKKyAgICAgICAgICAgIGF1dG8gYWxsb2NhdG9yU3RhdHMgPSBhbGxv
Y2F0b3IuY3VycmVudFN0YXRpc3RpY3MobG9ja2VyKTsKKyAgICAgICAgICAgIHJlc3VsdC5ieXRl
c0FsbG9jYXRlZCArPSBhbGxvY2F0b3JTdGF0cy5ieXRlc0FsbG9jYXRlZDsKKyAgICAgICAgICAg
IHJlc3VsdC5ieXRlc1Jlc2VydmVkICs9IGFsbG9jYXRvclN0YXRzLmJ5dGVzUmVzZXJ2ZWQ7Cisg
ICAgICAgICAgICByZXN1bHQuYnl0ZXNDb21taXR0ZWQgKz0gYWxsb2NhdG9yU3RhdHMuYnl0ZXND
b21taXR0ZWQ7CisgICAgICAgIH0pOworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKwor
I2lmIFVTRShKVU1QX0lTTEFORFMpCisgICAgdm9pZCBoYW5kbGVXaWxsQmVSZWxlYXNlZChjb25z
dCBMb2NrSG9sZGVyJiBsb2NrZXIsIE1ldGFBbGxvY2F0b3JIYW5kbGUmIGhhbmRsZSkKKyAgICB7
CisgICAgICAgIGlmIChtX2lzbGFuZHNGb3JKdW1wU291cmNlTG9jYXRpb24uaXNFbXB0eSgpKQor
ICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIFZlY3RvcjxJc2xhbmRzKiwgMTY+IHRvUmVt
b3ZlOworICAgICAgICB2b2lkKiBzdGFydCA9IGhhbmRsZS5zdGFydCgpLnVudGFnZ2VkUHRyKCk7
CisgICAgICAgIHZvaWQqIGVuZCA9IGhhbmRsZS5lbmQoKS51bnRhZ2dlZFB0cigpOworICAgICAg
ICBtX2lzbGFuZHNGb3JKdW1wU291cmNlTG9jYXRpb24uaXRlcmF0ZShbJl0gKElzbGFuZHMmIGlz
bGFuZHMsIGJvb2wmIHZpc2l0TGVmdCwgYm9vbCYgdmlzaXRSaWdodCkgeworICAgICAgICAgICAg
aWYgKHN0YXJ0IDw9IGlzbGFuZHMua2V5KCkgJiYgaXNsYW5kcy5rZXkoKSA8IGVuZCkKKyAgICAg
ICAgICAgICAgICB0b1JlbW92ZS5hcHBlbmQoJmlzbGFuZHMpOworICAgICAgICAgICAgaWYgKGlz
bGFuZHMua2V5KCkgPiBzdGFydCkKKyAgICAgICAgICAgICAgICB2aXNpdExlZnQgPSB0cnVlOwor
ICAgICAgICAgICAgaWYgKGlzbGFuZHMua2V5KCkgPCBlbmQpCisgICAgICAgICAgICAgICAgdmlz
aXRSaWdodCA9IHRydWU7CisgICAgICAgIH0pOworCisgICAgICAgIGZvciAoSXNsYW5kcyogaXNs
YW5kcyA6IHRvUmVtb3ZlKQorICAgICAgICAgICAgZnJlZUlzbGFuZHMobG9ja2VyLCBpc2xhbmRz
KTsKKworICAgICAgICBpZiAoQVNTRVJUX0VOQUJMRUQpIHsKKyAgICAgICAgICAgIG1faXNsYW5k
c0Zvckp1bXBTb3VyY2VMb2NhdGlvbi5pdGVyYXRlKFsmXSAoSXNsYW5kcyYgaXNsYW5kcywgYm9v
bCYgdmlzaXRMZWZ0LCBib29sJiB2aXNpdFJpZ2h0KSB7CisgICAgICAgICAgICAgICAgaWYgKHN0
YXJ0IDw9IGlzbGFuZHMua2V5KCkgJiYgaXNsYW5kcy5rZXkoKSA8IGVuZCkgeworICAgICAgICAg
ICAgICAgICAgICBkYXRhTG9nTG4oImRpZCBub3QgcmVtb3ZlIGV2ZXJ5dGhpbmchIik7CisgICAg
ICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgICAgIHZpc2l0TGVmdCA9IHRydWU7CisgICAgICAgICAgICAg
ICAgdmlzaXRSaWdodCA9IHRydWU7CisgICAgICAgICAgICB9KTsKKyAgICAgICAgfQorICAgIH0K
KworICAgIHZvaWQqIG1ha2VJc2xhbmQodWludHB0cl90IGp1bXBMb2NhdGlvbiwgdWludHB0cl90
IG5ld1RhcmdldCwgYm9vbCBjb25jdXJyZW50bHkpCisgICAgeworICAgICAgICBhdXRvIGxvY2tl
ciA9IGhvbGRMb2NrKGdldExvY2soKSk7CisgICAgICAgIHJldHVybiBpc2xhbmRGb3JKdW1wTG9j
YXRpb24obG9ja2VyLCBqdW1wTG9jYXRpb24sIG5ld1RhcmdldCwgY29uY3VycmVudGx5KTsKICAg
ICB9CiAKIHByaXZhdGU6CisgICAgUmVnaW9uQWxsb2NhdG9yKiBmaW5kUmVnaW9uKHVpbnRwdHJf
dCBwdHIpCisgICAgeworICAgICAgICBSZWdpb25BbGxvY2F0b3IqIHJlc3VsdCA9IG51bGxwdHI7
CisgICAgICAgIGZvckVhY2hBbGxvY2F0b3IoWyZdIChSZWdpb25BbGxvY2F0b3ImIGFsbG9jYXRv
cikgeworICAgICAgICAgICAgaWYgKGFsbG9jYXRvci5zdGFydCgpIDw9IHB0ciAmJiBwdHIgPCBh
bGxvY2F0b3IuZW5kKCkpIHsKKyAgICAgICAgICAgICAgICByZXN1bHQgPSAmYWxsb2NhdG9yOwor
ICAgICAgICAgICAgICAgIHJldHVybiBJdGVyYXRpb25TdGF0dXM6OkRvbmU7CisgICAgICAgICAg
ICB9CisgICAgICAgICAgICByZXR1cm4gSXRlcmF0aW9uU3RhdHVzOjpDb250aW51ZTsKKyAgICAg
ICAgfSk7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorCisgICAgdm9pZCBmcmVlSnVt
cElzbGFuZHMoY29uc3QgTG9ja0hvbGRlciYsIElzbGFuZHMqIGlzbGFuZHMpCisgICAgeworICAg
ICAgICBmb3IgKENvZGVMb2NhdGlvbkxhYmVsPEV4ZWN1dGFibGVNZW1vcnlQdHJUYWc+IGp1bXBJ
c2xhbmQgOiBpc2xhbmRzLT5qdW1wSXNsYW5kcykgeworICAgICAgICAgICAgdWludHB0cl90IHVu
dGFnZ2VkSnVtcElzbGFuZCA9IGJpdHdpc2VfY2FzdDx1aW50cHRyX3Q+KGp1bXBJc2xhbmQuZGF0
YUxvY2F0aW9uKCkpOworICAgICAgICAgICAgUmVnaW9uQWxsb2NhdG9yKiBhbGxvY2F0b3IgPSBm
aW5kUmVnaW9uKHVudGFnZ2VkSnVtcElzbGFuZCk7CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VS
VChhbGxvY2F0b3IpOworICAgICAgICAgICAgYWxsb2NhdG9yLT5mcmVlSXNsYW5kKHVudGFnZ2Vk
SnVtcElzbGFuZCk7CisgICAgICAgIH0KKyAgICAgICAgaXNsYW5kcy0+anVtcElzbGFuZHMuY2xl
YXIoKTsKKyAgICB9CisKKyAgICB2b2lkIGZyZWVJc2xhbmRzKGNvbnN0IExvY2tIb2xkZXImIGxv
Y2tlciwgSXNsYW5kcyogaXNsYW5kcykKKyAgICB7CisgICAgICAgIGZyZWVKdW1wSXNsYW5kcyhs
b2NrZXIsIGlzbGFuZHMpOworICAgICAgICBtX2lzbGFuZHNGb3JKdW1wU291cmNlTG9jYXRpb24u
cmVtb3ZlKGlzbGFuZHMpOworICAgICAgICBkZWxldGUgaXNsYW5kczsKKyAgICB9CisKKyAgICB2
b2lkKiBpc2xhbmRGb3JKdW1wTG9jYXRpb24oY29uc3QgTG9ja0hvbGRlciYgbG9ja2VyLCB1aW50
cHRyX3QganVtcExvY2F0aW9uLCB1aW50cHRyX3QgdGFyZ2V0LCBib29sIGNvbmN1cnJlbnRseSkK
KyAgICB7CisgICAgICAgIElzbGFuZHMqIGlzbGFuZHMgPSBtX2lzbGFuZHNGb3JKdW1wU291cmNl
TG9jYXRpb24uZmluZEV4YWN0KGJpdHdpc2VfY2FzdDx2b2lkKj4oanVtcExvY2F0aW9uKSk7Cisg
ICAgICAgIGlmIChpc2xhbmRzKSB7CisgICAgICAgICAgICAvLyBGSVhNRTogV2UgY291bGQgY3Jl
YXRlIHNvbWUgbWV0aG9kIG9mIHJldXNpbmcgYWxyZWFkeSBhbGxvY2F0ZWQgaXNsYW5kcyBoZXJl
LCBidXQgaXQncworICAgICAgICAgICAgLy8gdW5saWtlbHkgdG8gbWF0dGVyIGluIHByYWN0aWNl
LgorICAgICAgICAgICAgaWYgKCFjb25jdXJyZW50bHkpCisgICAgICAgICAgICAgICAgZnJlZUp1
bXBJc2xhbmRzKGxvY2tlciwgaXNsYW5kcyk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAg
ICBpc2xhbmRzID0gbmV3IElzbGFuZHM7CisgICAgICAgICAgICBpc2xhbmRzLT5qdW1wU291cmNl
TG9jYXRpb24gPSBDb2RlTG9jYXRpb25MYWJlbDxFeGVjdXRhYmxlTWVtb3J5UHRyVGFnPih0YWdD
b2RlUHRyPEV4ZWN1dGFibGVNZW1vcnlQdHJUYWc+KGJpdHdpc2VfY2FzdDx2b2lkKj4oanVtcExv
Y2F0aW9uKSkpOworICAgICAgICAgICAgbV9pc2xhbmRzRm9ySnVtcFNvdXJjZUxvY2F0aW9uLmlu
c2VydChpc2xhbmRzKTsKKyAgICAgICAgfQorCisgICAgICAgIFJlZ2lvbkFsbG9jYXRvciogYWxs
b2NhdG9yID0gZmluZFJlZ2lvbihqdW1wTG9jYXRpb24gPiB0YXJnZXQgPyBqdW1wTG9jYXRpb24g
LSByZWdpb25TaXplIDoganVtcExvY2F0aW9uKTsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQoYWxs
b2NhdG9yKTsKKyAgICAgICAgdm9pZCogcmVzdWx0ID0gYWxsb2NhdG9yLT5hbGxvY2F0ZUlzbGFu
ZCgpOworICAgICAgICB2b2lkKiBjdXJyZW50SXNsYW5kID0gcmVzdWx0OworICAgICAgICBqdW1w
TG9jYXRpb24gPSBiaXR3aXNlX2Nhc3Q8dWludHB0cl90PihjdXJyZW50SXNsYW5kKTsKKyAgICAg
ICAgd2hpbGUgKHRydWUpIHsKKyAgICAgICAgICAgIGlzbGFuZHMtPmp1bXBJc2xhbmRzLmFwcGVu
ZChDb2RlTG9jYXRpb25MYWJlbDxFeGVjdXRhYmxlTWVtb3J5UHRyVGFnPih0YWdDb2RlUHRyPEV4
ZWN1dGFibGVNZW1vcnlQdHJUYWc+KGN1cnJlbnRJc2xhbmQpKSk7CisKKyAgICAgICAgICAgIGF1
dG8gZW1pdEp1bXBUbyA9IFsmXSAodm9pZCogdGFyZ2V0KSB7CisgICAgICAgICAgICAgICAgUkVM
RUFTRV9BU1NFUlQoQVJNNjRBc3NlbWJsZXI6OmNhbkVtaXRKdW1wKGJpdHdpc2VfY2FzdDx2b2lk
Kj4oanVtcExvY2F0aW9uKSwgdGFyZ2V0KSk7CisKKyAgICAgICAgICAgICAgICBNYWNyb0Fzc2Vt
YmxlciBqaXQ7CisgICAgICAgICAgICAgICAgYXV0byBqdW1wID0gaml0Lmp1bXAoKTsKKyAgICAg
ICAgICAgICAgICBMaW5rQnVmZmVyIGxpbmtCdWZmZXIoaml0LCBNYWNyb0Fzc2VtYmxlckNvZGVQ
dHI8Tm9QdHJUYWc+KGN1cnJlbnRJc2xhbmQpLCBpc2xhbmRTaXplSW5CeXRlcywgSklUQ29tcGls
YXRpb25NdXN0U3VjY2VlZCwgZmFsc2UpOworICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJU
KGxpbmtCdWZmZXIuaXNWYWxpZCgpKTsKKworICAgICAgICAgICAgICAgIC8vIFdlIHVzZSB0aGlz
IHRvIGFwcGVhc2UgdGhlIGFzc2VydGlvbiB0aGF0IHdlJ3JlIG5vdCBmaW5hbGl6aW5nIG9uIGEg
Y29tcGlsZXIgdGhyZWFkLiBJbiB0aGlzIHNpdHVhdGlvbiwgaXQncworICAgICAgICAgICAgICAg
IC8vIG9rIHRvIGRvIHRoaXMgb24gYSBjb21waWxlciB0aHJlYWQsIHNpbmNlIHRoZSBjb21waWxl
ciB0aHJlYWQgaXMgbGlua2luZyBhIGp1bXAgdG8gdGhpcyBjb2RlIChhbmQgbm8gb3RoZXIgbGl2
ZQorICAgICAgICAgICAgICAgIC8vIGNvZGUgY2FuIGp1bXAgdG8gdGhlc2UgaXNsYW5kcykuIEl0
J3Mgb2sgYmVjYXVzZSB0aGUgQ1BVIHByb3RvY29sIGZvciBleHBvc2luZyBjb2RlIHRvIG90aGVy
IENQVXMgaXM6CisgICAgICAgICAgICAgICAgLy8gLSBTZWxmIG1vZGlmeWluZyBjb2RlIGZlbmNl
ICh3aGF0IEZJTkFMSVpFX0NPREUgZG9lcyBiZWxvdykuIFRoaXMgZG9lcyB2YXJpb3VzIG1lbW9y
eSBmbHVzaGVzICsgaW5zdHJ1Y3Rpb24gc3luYyBiYXJyaWVyIChpc2IpLgorICAgICAgICAgICAg
ICAgIC8vIC0gQW55IENQVSB0aGF0IHdpbGwgcnVuIHRoZSBjb2RlIG11c3QgcnVuIGEgY3Jvc3NN
b2RpZnlpbmdDb2RlRmVuY2UgKGlzYikgYmVmb3JlIHJ1bm5pbmcgaXQuIFNpbmNlIHRoZSBjb2Rl
IHRoYXQKKyAgICAgICAgICAgICAgICAvLyBoYXMgYSBqdW1wIGxpbmtlZCB0byB0aGlzIGlzbGFu
ZCBoYXNuJ3QgZmluYWxpemVkIHlldCwgdGhleSdyZSBndWFyYW50ZWVkIHRvIGZpbmFsaXplIHRo
ZXJlIGNvZGUgYW5kIHJ1biBhbiBpc2IuCisgICAgICAgICAgICAgICAgbGlua0J1ZmZlci5zZXRJ
c0p1bXBJc2xhbmQoKTsKKworICAgICAgICAgICAgICAgIGxpbmtCdWZmZXIubGluayhqdW1wLCBD
b2RlTG9jYXRpb25MYWJlbDxOb1B0clRhZz4odGFyZ2V0KSk7CisgICAgICAgICAgICAgICAgRklO
QUxJWkVfQ09ERShsaW5rQnVmZmVyLCBOb1B0clRhZywgIkp1bXAgSXNsYW5kOiAlbHUiLCBqdW1w
TG9jYXRpb24pOworICAgICAgICAgICAgfTsKKworICAgICAgICAgICAgaWYgKEFSTTY0QXNzZW1i
bGVyOjpjYW5FbWl0SnVtcChiaXR3aXNlX2Nhc3Q8dm9pZCo+KGp1bXBMb2NhdGlvbiksIGJpdHdp
c2VfY2FzdDx2b2lkKj4odGFyZ2V0KSkpIHsKKyAgICAgICAgICAgICAgICBlbWl0SnVtcFRvKGJp
dHdpc2VfY2FzdDx2b2lkKj4odGFyZ2V0KSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgICAgICB9CisKKyAgICAgICAgICAgIHVpbnRwdHJfdCBuZXh0SXNsYW5kUmVnaW9uOworICAg
ICAgICAgICAgaWYgKGp1bXBMb2NhdGlvbiA+IHRhcmdldCkKKyAgICAgICAgICAgICAgICBuZXh0
SXNsYW5kUmVnaW9uID0ganVtcExvY2F0aW9uIC0gcmVnaW9uU2l6ZTsKKyAgICAgICAgICAgIGVs
c2UKKyAgICAgICAgICAgICAgICBuZXh0SXNsYW5kUmVnaW9uID0ganVtcExvY2F0aW9uICsgcmVn
aW9uU2l6ZTsKKworICAgICAgICAgICAgUmVnaW9uQWxsb2NhdG9yKiBhbGxvY2F0b3IgPSBmaW5k
UmVnaW9uKG5leHRJc2xhbmRSZWdpb24pOworICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoYWxs
b2NhdG9yKTsKKyAgICAgICAgICAgIHZvaWQqIG5leHRJc2xhbmQgPSBhbGxvY2F0b3ItPmFsbG9j
YXRlSXNsYW5kKCk7CisgICAgICAgICAgICBlbWl0SnVtcFRvKG5leHRJc2xhbmQpOworICAgICAg
ICAgICAganVtcExvY2F0aW9uID0gYml0d2lzZV9jYXN0PHVpbnRwdHJfdD4obmV4dElzbGFuZCk7
CisgICAgICAgICAgICBjdXJyZW50SXNsYW5kID0gbmV4dElzbGFuZDsKKyAgICAgICAgfQorCisg
ICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorI2VuZGlmIC8vIFVTRShKVU1QX0lTTEFORFMp
CisKK3ByaXZhdGU6CisgICAgY2xhc3MgQWxsb2NhdG9yIDogcHVibGljIE1ldGFBbGxvY2F0b3Ig
eworICAgICAgICB1c2luZyBCYXNlID0gTWV0YUFsbG9jYXRvcjsKKyAgICBwdWJsaWM6CisgICAg
ICAgIEFsbG9jYXRvcihGaXhlZFZNUG9vbEV4ZWN1dGFibGVBbGxvY2F0b3ImIGFsbG9jYXRvcikK
KyAgICAgICAgICAgIDogQmFzZShhbGxvY2F0b3IuZ2V0TG9jaygpLCBqaXRBbGxvY2F0aW9uR3Jh
bnVsZSwgcGFnZVNpemUoKSkgLy8gcm91bmQgdXAgYWxsIGFsbG9jYXRpb25zIHRvIDMyIGJ5dGVz
CisgICAgICAgICAgICAsIG1fZml4ZWRBbGxvY2F0b3IoYWxsb2NhdG9yKQorICAgICAgICB7Cisg
ICAgICAgIH0KKworICAgICAgICBGcmVlU3BhY2VQdHIgYWxsb2NhdGVOZXdTcGFjZShzaXplX3Qm
KSBvdmVycmlkZQorICAgICAgICB7CisgICAgICAgICAgICAvLyBXZSdyZSBvcGVyYXRpbmcgaW4g
YSBmaXhlZCBwb29sLCBzbyBuZXcgYWxsb2NhdGlvbiBpcyBhbHdheXMgcHJvaGliaXRlZC4KKyAg
ICAgICAgICAgIHJldHVybiBudWxscHRyOworICAgICAgICB9CisKKyAgICAgICAgdm9pZCBub3Rp
ZnlOZWVkUGFnZSh2b2lkKiBwYWdlLCBzaXplX3QgY291bnQpIG92ZXJyaWRlCisgICAgICAgIHsK
KyAgICAgICAgICAgIG1fZml4ZWRBbGxvY2F0b3IubV9yZXNlcnZhdGlvbi5jb21taXQocGFnZSwg
cGFnZVNpemUoKSAqIGNvdW50KTsKKyAgICAgICAgfQorCisgICAgICAgIHZvaWQgbm90aWZ5UGFn
ZUlzRnJlZSh2b2lkKiBwYWdlLCBzaXplX3QgY291bnQpIG92ZXJyaWRlCisgICAgICAgIHsKKyAg
ICAgICAgICAgIG1fZml4ZWRBbGxvY2F0b3IubV9yZXNlcnZhdGlvbi5kZWNvbW1pdChwYWdlLCBw
YWdlU2l6ZSgpICogY291bnQpOworICAgICAgICB9CisKKyAgICAgICAgRml4ZWRWTVBvb2xFeGVj
dXRhYmxlQWxsb2NhdG9yJiBtX2ZpeGVkQWxsb2NhdG9yOworICAgIH07CisKKyNpZiBVU0UoSlVN
UF9JU0xBTkRTKQorICAgIGNsYXNzIFJlZ2lvbkFsbG9jYXRvciBmaW5hbCA6IHB1YmxpYyBBbGxv
Y2F0b3IgeworICAgICAgICB1c2luZyBCYXNlID0gQWxsb2NhdG9yOworICAgIHB1YmxpYzoKKyAg
ICAgICAgUmVnaW9uQWxsb2NhdG9yKEZpeGVkVk1Qb29sRXhlY3V0YWJsZUFsbG9jYXRvciYgYWxs
b2NhdG9yKQorICAgICAgICAgICAgOiBCYXNlKGFsbG9jYXRvcikKKyAgICAgICAgeworICAgICAg
ICB9CisKKyAgICAgICAgLy8gIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQor
ICAgICAgICAvLyAgfCBqaXQgYWxsb2NhdGlvbnMgLS0+ICAgPC0tIGlzbGFuZHMgfAorICAgICAg
ICAvLyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgICAgICAgIHVp
bnRwdHJfdCBzdGFydCgpIHsgcmV0dXJuIGJpdHdpc2VfY2FzdDx1aW50cHRyX3Q+KHVudGFnQ29k
ZVB0cjxFeGVjdXRhYmxlTWVtb3J5UHRyVGFnPihtX3N0YXJ0KSk7IH0KKyAgICAgICAgdWludHB0
cl90IGVuZCgpIHsgcmV0dXJuIGJpdHdpc2VfY2FzdDx1aW50cHRyX3Q+KHVudGFnQ29kZVB0cjxF
eGVjdXRhYmxlTWVtb3J5UHRyVGFnPihtX2VuZCkpOyB9CisKKyAgICAgICAgdWludHB0cl90IGlz
bGFuZEJlZ2luKCkKKyAgICAgICAgeworICAgICAgICAgICAgLy8gW3N0YXJ0LCBhbGxvY2F0b3JF
bmQpCisgICAgICAgICAgICByZXR1cm4gZW5kKCkgLSBpc2xhbmRSZWdpb25TaXplOworICAgICAg
ICB9CisKKyAgICAgICAgdWludHB0cl90IGFsbG9jYXRvclNpemUoKQorICAgICAgICB7CisgICAg
ICAgICAgICByZXR1cm4gaXNsYW5kQmVnaW4oKSAtIHN0YXJ0KCk7CisgICAgICAgIH0KKworICAg
ICAgICBzaXplX3QgaXNsYW5kc1BlclBhZ2UoKQorICAgICAgICB7CisgICAgICAgICAgICBzaXpl
X3QgaXNsYW5kc1BlclBhZ2UgPSBwYWdlU2l6ZSgpIC8gaXNsYW5kU2l6ZUluQnl0ZXM7CisgICAg
ICAgICAgICBBU1NFUlQoaXNsYW5kc1BlclBhZ2UgKiBpc2xhbmRTaXplSW5CeXRlcyA9PSBwYWdl
U2l6ZSgpKTsKKyAgICAgICAgICAgIEFTU0VSVChpc1Bvd2VyT2ZUd28oaXNsYW5kc1BlclBhZ2Up
KTsKKyAgICAgICAgICAgIHJldHVybiBpc2xhbmRzUGVyUGFnZTsKKyAgICAgICAgfQorCisgICAg
ICAgIHZvaWQgcmVsZWFzZShjb25zdCBMb2NrSG9sZGVyJiBsb2NrZXIsIE1ldGFBbGxvY2F0b3JI
YW5kbGUmIGhhbmRsZSkgZmluYWwKKyAgICAgICAgeworICAgICAgICAgICAgbV9maXhlZEFsbG9j
YXRvci5oYW5kbGVXaWxsQmVSZWxlYXNlZChsb2NrZXIsIGhhbmRsZSk7CisgICAgICAgICAgICBC
YXNlOjpyZWxlYXNlKGxvY2tlciwgaGFuZGxlKTsKKyAgICAgICAgfQorCisgICAgICAgIHZvaWQq
IGFsbG9jYXRlSXNsYW5kKCkKKyAgICAgICAgeworICAgICAgICAgICAgdWludHB0cl90IGVuZCA9
IHRoaXMtPmVuZCgpOworICAgICAgICAgICAgYXV0byBmaW5kUmVzdWx0ID0gWyZdICgpIC0+IHZv
aWQqIHsKKyAgICAgICAgICAgICAgICBzaXplX3QgcmVzdWx0Qml0ID0gaXNsYW5kQml0cy5maW5k
Q2xlYXJCaXQoMCk7CisgICAgICAgICAgICAgICAgaWYgKHJlc3VsdEJpdCA9PSBpc2xhbmRCaXRz
LnNpemUoKSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgICAg
ICAgICAgaXNsYW5kQml0c1tyZXN1bHRCaXRdID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICB1aW50
cHRyX3QgcmVzdWx0ID0gZW5kIC0gKChyZXN1bHRCaXQgKyAxKSAqIGlzbGFuZFNpemVJbkJ5dGVz
KTsgCisgICAgICAgICAgICAgICAgcmV0dXJuIGJpdHdpc2VfY2FzdDx2b2lkKj4ocmVzdWx0KTsK
KyAgICAgICAgICAgIH07CisKKyAgICAgICAgICAgIGlmICh2b2lkKiByZXN1bHQgPSBmaW5kUmVz
dWx0KCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKKworICAgICAgICAgICAgaXNs
YW5kQml0cy5yZXNpemUoaXNsYW5kQml0cy5zaXplKCkgKyBpc2xhbmRzUGVyUGFnZSgpKTsKKyAg
ICAgICAgICAgIGlmIChVTkxJS0VMWShpc2xhbmRCaXRzLnNpemUoKSA+IG1heElzbGFuZHNQZXJS
ZWdpb24pKQorICAgICAgICAgICAgICAgIGNyYXNoT25KdW1wSXNsYW5kRXhoYXVzdGlvbigpOwor
CisgICAgICAgICAgICB1aW50cHRyX3QgcGFnZUJlZ2luID0gZW5kIC0gKGlzbGFuZEJpdHMuc2l6
ZSgpICogaXNsYW5kU2l6ZUluQnl0ZXMpOyAvLyBbaXNsYW5kQmVnaW4sIGVuZCkKKyAgICAgICAg
ICAgIG1fZml4ZWRBbGxvY2F0b3IubV9yZXNlcnZhdGlvbi5jb21taXQoYml0d2lzZV9jYXN0PHZv
aWQqPihwYWdlQmVnaW4pLCBwYWdlU2l6ZSgpKTsKKworICAgICAgICAgICAgdm9pZCogcmVzdWx0
ID0gZmluZFJlc3VsdCgpOworICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQocmVzdWx0KTsKKyAg
ICAgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgICAgIH0KKworICAgICAgICBORVZFUl9JTkxJ
TkUgTk9fUkVUVVJOX0RVRV9UT19DUkFTSCB2b2lkIGNyYXNoT25KdW1wSXNsYW5kRXhoYXVzdGlv
bigpCisgICAgICAgIHsKKyAgICAgICAgICAgIENSQVNIKCk7CisgICAgICAgIH0KKworICAgICAg
ICBPcHRpb25hbDxzaXplX3Q+IGlzbGFuZEJpdCh1aW50cHRyX3QgaXNsYW5kKQorICAgICAgICB7
CisgICAgICAgICAgICB1aW50cHRyX3QgZW5kID0gdGhpcy0+ZW5kKCk7CisgICAgICAgICAgICBp
ZiAoaXNsYW5kQmVnaW4oKSA8PSBpc2xhbmQgJiYgaXNsYW5kIDwgZW5kKQorICAgICAgICAgICAg
ICAgIHJldHVybiAoKGVuZCAtIGlzbGFuZCkgLyBpc2xhbmRTaXplSW5CeXRlcykgLSAxOworICAg
ICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKyAgICAgICAgfQorCisgICAgICAgIHZvaWQg
ZnJlZUlzbGFuZCh1aW50cHRyX3QgaXNsYW5kKQorICAgICAgICB7CisgICAgICAgICAgICBSRUxF
QVNFX0FTU0VSVChpc2xhbmRCZWdpbigpIDw9IGlzbGFuZCAmJiBpc2xhbmQgPCBlbmQoKSk7Cisg
ICAgICAgICAgICBzaXplX3QgYml0ID0gaXNsYW5kQml0KGlzbGFuZCkudmFsdWUoKTsKKyAgICAg
ICAgICAgIFJFTEVBU0VfQVNTRVJUKCEhaXNsYW5kQml0c1tiaXRdKTsKKyAgICAgICAgICAgIGlz
bGFuZEJpdHNbYml0XSA9IGZhbHNlOworICAgICAgICB9CisKKyAgICAgICAgYm9vbCBpc0luQWxs
b2NhdGVkTWVtb3J5KGNvbnN0IEFic3RyYWN0TG9ja2VyJiBsb2NrZXIsIHZvaWQqIGFkZHJlc3Mp
CisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChCYXNlOjppc0luQWxsb2NhdGVkTWVtb3J5KGxv
Y2tlciwgYWRkcmVzcykpCisgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAg
ICBpZiAoT3B0aW9uYWw8c2l6ZV90PiBiaXQgPSBpc2xhbmRCaXQoYml0d2lzZV9jYXN0PHVpbnRw
dHJfdD4oYWRkcmVzcykpKSB7CisgICAgICAgICAgICAgICAgaWYgKGJpdC52YWx1ZSgpIDwgaXNs
YW5kQml0cy5zaXplKCkpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiAhIWlzbGFuZEJpdHNb
Yml0LnZhbHVlKCldOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgICAgICB9CisKKyAgICAgICAgLy8gUmFuZ2U6IFtzdGFydCwgZW5kKQorICAgICAgICB2b2lk
KiBtX3N0YXJ0OworICAgICAgICB2b2lkKiBtX2VuZDsKKyAgICAgICAgRmFzdEJpdFZlY3RvciBp
c2xhbmRCaXRzOworICAgIH07CisjZW5kaWYgLy8gVVNFKEpVTVBfSVNMQU5EUykKKworICAgIHRl
bXBsYXRlIDx0eXBlbmFtZSBGdW5jdGlvbj4KKyAgICB2b2lkIGZvckVhY2hBbGxvY2F0b3IoRnVu
Y3Rpb24gZnVuY3Rpb24pCisgICAgeworI2lmIFVTRShKVU1QX0lTTEFORFMpCisgICAgICAgIGZv
ciAoUmVnaW9uQWxsb2NhdG9yJiBhbGxvY2F0b3IgOiBtX2FsbG9jYXRvcnMpIHsKKyAgICAgICAg
ICAgIHVzaW5nIEZ1bmN0aW9uUmVzdWx0VHlwZSA9IGRlY2x0eXBlKGZ1bmN0aW9uKGFsbG9jYXRv
cikpOworICAgICAgICAgICAgaWYgY29uc3RleHByIChzdGQ6OmlzX3NhbWU8SXRlcmF0aW9uU3Rh
dHVzLCBGdW5jdGlvblJlc3VsdFR5cGU+Ojp2YWx1ZSkgeworICAgICAgICAgICAgICAgIGlmIChm
dW5jdGlvbihhbGxvY2F0b3IpID09IEl0ZXJhdGlvblN0YXR1czo6RG9uZSkKKyAgICAgICAgICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIHN0
YXRpY19hc3NlcnQoc3RkOjppc19zYW1lPHZvaWQsIEZ1bmN0aW9uUmVzdWx0VHlwZT46OnZhbHVl
KTsKKyAgICAgICAgICAgICAgICBmdW5jdGlvbihhbGxvY2F0b3IpOworICAgICAgICAgICAgfQor
ICAgICAgICB9CisjZWxzZQorICAgICAgICBmdW5jdGlvbihtX2FsbG9jYXRvcik7CisjZW5kaWYg
Ly8gVVNFKEpVTVBfSVNMQU5EUykKKyAgICB9CisKKyNpZiBVU0UoSlVNUF9JU0xBTkRTKQorICAg
IGNsYXNzIElzbGFuZHMgOiBwdWJsaWMgUmVkQmxhY2tUcmVlPElzbGFuZHMsIHZvaWQqPjo6Tm9k
ZSB7CisgICAgICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworICAgIHB1YmxpYzoKKyAgICAg
ICAgdm9pZCoga2V5KCkgeyByZXR1cm4ganVtcFNvdXJjZUxvY2F0aW9uLmRhdGFMb2NhdGlvbigp
OyB9CisgICAgICAgIENvZGVMb2NhdGlvbkxhYmVsPEV4ZWN1dGFibGVNZW1vcnlQdHJUYWc+IGp1
bXBTb3VyY2VMb2NhdGlvbjsKKyAgICAgICAgVmVjdG9yPENvZGVMb2NhdGlvbkxhYmVsPEV4ZWN1
dGFibGVNZW1vcnlQdHJUYWc+PiBqdW1wSXNsYW5kczsKKyAgICB9OworI2VuZGlmIC8vIFVTRShK
VU1QX0lTTEFORFMpCisKKyAgICBMb2NrIG1fbG9jazsKICAgICBQYWdlUmVzZXJ2YXRpb24gbV9y
ZXNlcnZhdGlvbjsKKyNpZiBVU0UoSlVNUF9JU0xBTkRTKQorICAgIHN0ZDo6YXJyYXk8UmVnaW9u
QWxsb2NhdG9yLCBudW1iZXJPZlJlZ2lvbnM+IG1fYWxsb2NhdG9yczsKKyAgICBSZWRCbGFja1Ry
ZWU8SXNsYW5kcywgdm9pZCo+IG1faXNsYW5kc0Zvckp1bXBTb3VyY2VMb2NhdGlvbjsKKyNlbHNl
CisgICAgQWxsb2NhdG9yIG1fYWxsb2NhdG9yOworI2VuZGlmIC8vIFVTRShKVU1QX0lTTEFORFMp
CiB9OwogCi1GaXhlZFZNUG9vbEV4ZWN1dGFibGVBbGxvY2F0b3I6On5GaXhlZFZNUG9vbEV4ZWN1
dGFibGVBbGxvY2F0b3IoKQotewotICAgIG1fcmVzZXJ2YXRpb24uZGVhbGxvY2F0ZSgpOwotfQot
CiAvLyBLZWVwIHRoaXMgcG9pbnRlciBpbiBhIG11dGFibGUgZ2xvYmFsIHZhcmlhYmxlIHRvIGhl
bHAgTGVha3MgZmluZCBpdC4KIC8vIEJ1dCB3ZSBkbyBub3QgdXNlIHRoaXMgcG9pbnRlci4KIHN0
YXRpYyBGaXhlZFZNUG9vbEV4ZWN1dGFibGVBbGxvY2F0b3IqIGdsb2JhbEZpeGVkVk1Qb29sRXhl
Y3V0YWJsZUFsbG9jYXRvclRvV29ya0Fyb3VuZExlYWtzID0gbnVsbHB0cjsKQEAgLTQxNyw3ICs4
MzksNiBAQCB2b2lkIEV4ZWN1dGFibGVBbGxvY2F0b3I6OmluaXRpYWxpemVVbmRlCiAgICAgUkVM
RUFTRV9BU1NFUlQoIWdfanNjQ29uZmlnLmZpeGVkVk1Qb29sRXhlY3V0YWJsZUFsbG9jYXRvcik7
CiAgICAgZ19qc2NDb25maWcuZml4ZWRWTVBvb2xFeGVjdXRhYmxlQWxsb2NhdG9yID0gbmV3IEZp
eGVkVk1Qb29sRXhlY3V0YWJsZUFsbG9jYXRvcigpOwogICAgIGdsb2JhbEZpeGVkVk1Qb29sRXhl
Y3V0YWJsZUFsbG9jYXRvclRvV29ya0Fyb3VuZExlYWtzID0gZ19qc2NDb25maWcuZml4ZWRWTVBv
b2xFeGVjdXRhYmxlQWxsb2NhdG9yOwotICAgIENvZGVQcm9maWxpbmc6Om5vdGlmeUFsbG9jYXRv
cihnX2pzY0NvbmZpZy5maXhlZFZNUG9vbEV4ZWN1dGFibGVBbGxvY2F0b3IpOwogfQogCiBib29s
IEV4ZWN1dGFibGVBbGxvY2F0b3I6OmlzVmFsaWQoKSBjb25zdApAQCAtNDI1LDcgKzg0Niw3IEBA
IGJvb2wgRXhlY3V0YWJsZUFsbG9jYXRvcjo6aXNWYWxpZCgpIGNvbnMKICAgICBGaXhlZFZNUG9v
bEV4ZWN1dGFibGVBbGxvY2F0b3IqIGFsbG9jYXRvciA9IGdfanNjQ29uZmlnLmZpeGVkVk1Qb29s
RXhlY3V0YWJsZUFsbG9jYXRvcjsKICAgICBpZiAoIWFsbG9jYXRvcikKICAgICAgICAgcmV0dXJu
IEJhc2U6OmlzVmFsaWQoKTsKLSAgICByZXR1cm4gISFhbGxvY2F0b3ItPmJ5dGVzUmVzZXJ2ZWQo
KTsKKyAgICByZXR1cm4gYWxsb2NhdG9yLT5pc1ZhbGlkKCk7CiB9CiAKIGJvb2wgRXhlY3V0YWJs
ZUFsbG9jYXRvcjo6dW5kZXJNZW1vcnlQcmVzc3VyZSgpCkBAIC00NTYsMTEgKzg3NywxMSBAQCBk
b3VibGUgRXhlY3V0YWJsZUFsbG9jYXRvcjo6bWVtb3J5UHJlc3N1CiAgICAgcmV0dXJuIHJlc3Vs
dDsKIH0KIAotUmVmUHRyPEV4ZWN1dGFibGVNZW1vcnlIYW5kbGU+IEV4ZWN1dGFibGVBbGxvY2F0
b3I6OmFsbG9jYXRlKHNpemVfdCBzaXplSW5CeXRlcywgdm9pZCogb3duZXJVSUQsIEpJVENvbXBp
bGF0aW9uRWZmb3J0IGVmZm9ydCkKK1JlZlB0cjxFeGVjdXRhYmxlTWVtb3J5SGFuZGxlPiBFeGVj
dXRhYmxlQWxsb2NhdG9yOjphbGxvY2F0ZShzaXplX3Qgc2l6ZUluQnl0ZXMsIEpJVENvbXBpbGF0
aW9uRWZmb3J0IGVmZm9ydCkKIHsKICAgICBGaXhlZFZNUG9vbEV4ZWN1dGFibGVBbGxvY2F0b3Iq
IGFsbG9jYXRvciA9IGdfanNjQ29uZmlnLmZpeGVkVk1Qb29sRXhlY3V0YWJsZUFsbG9jYXRvcjsK
ICAgICBpZiAoIWFsbG9jYXRvcikKLSAgICAgICAgcmV0dXJuIEJhc2U6OmFsbG9jYXRlKHNpemVJ
bkJ5dGVzLCBvd25lclVJRCwgZWZmb3J0KTsKKyAgICAgICAgcmV0dXJuIEJhc2U6OmFsbG9jYXRl
KHNpemVJbkJ5dGVzLCBlZmZvcnQpOwogICAgIGlmIChPcHRpb25zOjpsb2dFeGVjdXRhYmxlQWxs
b2NhdGlvbigpKSB7CiAgICAgICAgIE1ldGFBbGxvY2F0b3I6OlN0YXRpc3RpY3Mgc3RhdHMgPSBh
bGxvY2F0b3ItPmN1cnJlbnRTdGF0aXN0aWNzKCk7CiAgICAgICAgIGRhdGFMb2coIkFsbG9jYXRp
bmcgIiwgc2l6ZUluQnl0ZXMsICIgYnl0ZXMgb2YgZXhlY3V0YWJsZSBtZW1vcnkgd2l0aCAiLCBz
dGF0cy5ieXRlc0FsbG9jYXRlZCwgIiBieXRlcyBhbGxvY2F0ZWQsICIsIHN0YXRzLmJ5dGVzUmVz
ZXJ2ZWQsICIgYnl0ZXMgcmVzZXJ2ZWQsIGFuZCAiLCBzdGF0cy5ieXRlc0NvbW1pdHRlZCwgIiBj
b21taXR0ZWQuXG4iKTsKQEAgLTQ4Nyw3ICs5MDgsNyBAQCBSZWZQdHI8RXhlY3V0YWJsZU1lbW9y
eUhhbmRsZT4gRXhlY3V0YWJsCiAgICAgICAgIH0KICAgICB9CiAKLSAgICBSZWZQdHI8RXhlY3V0
YWJsZU1lbW9yeUhhbmRsZT4gcmVzdWx0ID0gYWxsb2NhdG9yLT5hbGxvY2F0ZShzaXplSW5CeXRl
cywgb3duZXJVSUQpOworICAgIFJlZlB0cjxFeGVjdXRhYmxlTWVtb3J5SGFuZGxlPiByZXN1bHQg
PSBhbGxvY2F0b3ItPmFsbG9jYXRlKHNpemVJbkJ5dGVzKTsKICAgICBpZiAoIXJlc3VsdCkgewog
ICAgICAgICBpZiAoZWZmb3J0ICE9IEpJVENvbXBpbGF0aW9uQ2FuRmFpbCkgewogICAgICAgICAg
ICAgZGF0YUxvZygiUmFuIG91dCBvZiBleGVjdXRhYmxlIG1lbW9yeSB3aGlsZSBhbGxvY2F0aW5n
ICIsIHNpemVJbkJ5dGVzLCAiIGJ5dGVzLlxuIik7CkBAIC01MzksNiArOTYwLDI2IEBAIHZvaWQg
RXhlY3V0YWJsZUFsbG9jYXRvcjo6ZHVtcFByb2ZpbGUoKQogfQogI2VuZGlmCiAKKyNpZiBVU0Uo
SlVNUF9JU0xBTkRTKQordm9pZCogRXhlY3V0YWJsZUFsbG9jYXRvcjo6Z2V0SnVtcElzbGFuZFRv
KHZvaWQqIGZyb20sIHZvaWQqIG5ld0Rlc3RpbmF0aW9uKQoreworICAgIEZpeGVkVk1Qb29sRXhl
Y3V0YWJsZUFsbG9jYXRvciogYWxsb2NhdG9yID0gZ19qc2NDb25maWcuZml4ZWRWTVBvb2xFeGVj
dXRhYmxlQWxsb2NhdG9yOworICAgIGlmICghYWxsb2NhdG9yKQorICAgICAgICBSRUxFQVNFX0FT
U0VSVF9OT1RfUkVBQ0hFRCgpOworCisgICAgcmV0dXJuIGFsbG9jYXRvci0+bWFrZUlzbGFuZChi
aXR3aXNlX2Nhc3Q8dWludHB0cl90Pihmcm9tKSwgYml0d2lzZV9jYXN0PHVpbnRwdHJfdD4obmV3
RGVzdGluYXRpb24pLCBmYWxzZSk7Cit9CisKK3ZvaWQqIEV4ZWN1dGFibGVBbGxvY2F0b3I6Omdl
dEp1bXBJc2xhbmRUb0NvbmN1cnJlbnRseSh2b2lkKiBmcm9tLCB2b2lkKiBuZXdEZXN0aW5hdGlv
bikKK3sKKyAgICBGaXhlZFZNUG9vbEV4ZWN1dGFibGVBbGxvY2F0b3IqIGFsbG9jYXRvciA9IGdf
anNjQ29uZmlnLmZpeGVkVk1Qb29sRXhlY3V0YWJsZUFsbG9jYXRvcjsKKyAgICBpZiAoIWFsbG9j
YXRvcikKKyAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKworICAgIHJldHVy
biBhbGxvY2F0b3ItPm1ha2VJc2xhbmQoYml0d2lzZV9jYXN0PHVpbnRwdHJfdD4oZnJvbSksIGJp
dHdpc2VfY2FzdDx1aW50cHRyX3Q+KG5ld0Rlc3RpbmF0aW9uKSwgdHJ1ZSk7Cit9CisjZW5kaWYK
Kwogdm9pZCogc3RhcnRPZkZpeGVkRXhlY3V0YWJsZU1lbW9yeVBvb2xJbXBsKCkKIHsKICAgICBG
aXhlZFZNUG9vbEV4ZWN1dGFibGVBbGxvY2F0b3IqIGFsbG9jYXRvciA9IGdfanNjQ29uZmlnLmZp
eGVkVk1Qb29sRXhlY3V0YWJsZUFsbG9jYXRvcjsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvRXhlY3V0YWJsZUFsbG9jYXRvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvRXhlY3V0YWJsZUFsbG9jYXRvci5oCShyZXZpc2lvbiAyNTg5OTYpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0V4ZWN1dGFibGVBbGxvY2F0b3IuaAkod29ya2luZyBj
b3B5KQpAQCAtNzEsNyArNzEsNyBAQCBwdWJsaWM6CiAKICAgICBzdGF0aWMgdm9pZCBkdW1wUHJv
ZmlsZSgpIHsgfQogCi0gICAgUmVmUHRyPEV4ZWN1dGFibGVNZW1vcnlIYW5kbGU+IGFsbG9jYXRl
KHNpemVfdCwgdm9pZCosIEpJVENvbXBpbGF0aW9uRWZmb3J0KSB7IHJldHVybiBudWxscHRyOyB9
CisgICAgUmVmUHRyPEV4ZWN1dGFibGVNZW1vcnlIYW5kbGU+IGFsbG9jYXRlKHNpemVfdCwgSklU
Q29tcGlsYXRpb25FZmZvcnQpIHsgcmV0dXJuIG51bGxwdHI7IH0KIAogICAgIHN0YXRpYyB2b2lk
IHNldEpJVEVuYWJsZWQoYm9vbCkgeyB9OwogICAgIApAQCAtMTU4LDcgKzE1OCw3IEBAIGNsYXNz
IEV4ZWN1dGFibGVBbGxvY2F0b3IgOiBwcml2YXRlIEV4ZWMKIHB1YmxpYzoKICAgICB1c2luZyBC
YXNlID0gRXhlY3V0YWJsZUFsbG9jYXRvckJhc2U7CiAKLSAgICBzdGF0aWMgRXhlY3V0YWJsZUFs
bG9jYXRvciYgc2luZ2xldG9uKCk7CisgICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIEV4ZWN1
dGFibGVBbGxvY2F0b3ImIHNpbmdsZXRvbigpOwogICAgIHN0YXRpYyB2b2lkIGluaXRpYWxpemUo
KTsKICAgICBzdGF0aWMgdm9pZCBpbml0aWFsaXplVW5kZXJseWluZ0FsbG9jYXRvcigpOwogCkBA
IC0xNzYsNyArMTc2LDcgQEAgcHVibGljOgogICAgIAogICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0
YXRpYyB2b2lkIHNldEpJVEVuYWJsZWQoYm9vbCk7CiAKLSAgICBSZWZQdHI8RXhlY3V0YWJsZU1l
bW9yeUhhbmRsZT4gYWxsb2NhdGUoc2l6ZV90IHNpemVJbkJ5dGVzLCB2b2lkKiBvd25lclVJRCwg
SklUQ29tcGlsYXRpb25FZmZvcnQpOworICAgIFJlZlB0cjxFeGVjdXRhYmxlTWVtb3J5SGFuZGxl
PiBhbGxvY2F0ZShzaXplX3Qgc2l6ZUluQnl0ZXMsIEpJVENvbXBpbGF0aW9uRWZmb3J0KTsKIAog
ICAgIGJvb2wgaXNWYWxpZEV4ZWN1dGFibGVNZW1vcnkoY29uc3QgQWJzdHJhY3RMb2NrZXImLCB2
b2lkKiBhZGRyZXNzKTsKIApAQCAtMTg0LDYgKzE4NCwxMSBAQCBwdWJsaWM6CiAKICAgICBMb2Nr
JiBnZXRMb2NrKCkgY29uc3Q7CiAKKyNpZiBVU0UoSlVNUF9JU0xBTkRTKQorICAgIEpTX0VYUE9S
VF9QUklWQVRFIHZvaWQqIGdldEp1bXBJc2xhbmRUbyh2b2lkKiBmcm9tLCB2b2lkKiBuZXdEZXN0
aW5hdGlvbik7CisgICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCogZ2V0SnVtcElzbGFuZFRvQ29u
Y3VycmVudGx5KHZvaWQqIGZyb20sIHZvaWQqIG5ld0Rlc3RpbmF0aW9uKTsKKyNlbmRpZgorCiBw
cml2YXRlOgogICAgIEV4ZWN1dGFibGVBbGxvY2F0b3IoKSA9IGRlZmF1bHQ7CiAgICAgfkV4ZWN1
dGFibGVBbGxvY2F0b3IoKSA9IGRlZmF1bHQ7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9Db21tb25TbG93UGF0aHMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0NvbW1vblNsb3dQYXRocy5jcHAJKHJldmlzaW9uIDI1ODk5NikKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbW1vblNsb3dQYXRocy5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTMyLDcgKzMyLDYgQEAKICNpbmNsdWRlICJCeXRlY29kZVN0cnVjdHMuaCIK
ICNpbmNsdWRlICJDYWxsRnJhbWUuaCIKICNpbmNsdWRlICJDbG9uZWRBcmd1bWVudHMuaCIKLSNp
bmNsdWRlICJDb2RlUHJvZmlsaW5nLmgiCiAjaW5jbHVkZSAiRGVmaW5lUHJvcGVydHlBdHRyaWJ1
dGVzLmgiCiAjaW5jbHVkZSAiRGlyZWN0QXJndW1lbnRzLmgiCiAjaW5jbHVkZSAiRXJyb3IuaCIK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbXBsZXRpb24uY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbXBsZXRpb24uY3BwCShy
ZXZpc2lvbiAyNTg5OTYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db21wbGV0
aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjcsNyArMjcsNiBAQAogI2luY2x1ZGUgIkNhbGxG
cmFtZS5oIgogI2luY2x1ZGUgIkNhdGNoU2NvcGUuaCIKICNpbmNsdWRlICJDb2RlQ2FjaGUuaCIK
LSNpbmNsdWRlICJDb2RlUHJvZmlsaW5nLmgiCiAjaW5jbHVkZSAiRXhjZXB0aW9uLmgiCiAjaW5j
bHVkZSAiSWRlbnRpZmllcklubGluZXMuaCIKICNpbmNsdWRlICJJbnRlcnByZXRlci5oIgpAQCAt
MTM4LDggKzEzNyw2IEBAIEpTVmFsdWUgZXZhbHVhdGUoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE8K
ICAgICBSRUxFQVNFX0FTU0VSVCh2bS5hdG9tU3RyaW5nVGFibGUoKSA9PSBUaHJlYWQ6OmN1cnJl
bnQoKS5hdG9tU3RyaW5nVGFibGUoKSk7CiAgICAgUkVMRUFTRV9BU1NFUlQoIXZtLmlzQ29sbGVj
dG9yQnVzeU9uQ3VycmVudFRocmVhZCgpKTsKIAotICAgIENvZGVQcm9maWxpbmcgcHJvZmlsZShz
b3VyY2UpOwotCiAgICAgaWYgKCF0aGlzVmFsdWUgfHwgdGhpc1ZhbHVlLmlzVW5kZWZpbmVkT3JO
dWxsKCkpCiAgICAgICAgIHRoaXNWYWx1ZSA9IGdsb2JhbE9iamVjdDsKICAgICBKU09iamVjdCog
dGhpc09iaiA9IGpzQ2FzdDxKU09iamVjdCo+KHRoaXNWYWx1ZS50b1RoaXMoZ2xvYmFsT2JqZWN0
LCBOb3RTdHJpY3RNb2RlKSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9K
U01vZHVsZUxvYWRlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSlNNb2R1bGVMb2FkZXIuY3BwCShyZXZpc2lvbiAyNTg5OTYpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9KU01vZHVsZUxvYWRlci5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTI5LDcgKzI5LDYgQEAKIAogI2luY2x1ZGUgIkJ1aWx0aW5OYW1lcy5oIgogI2luY2x1ZGUgIkNh
dGNoU2NvcGUuaCIKLSNpbmNsdWRlICJDb2RlUHJvZmlsaW5nLmgiCiAjaW5jbHVkZSAiRXJyb3Iu
aCIKICNpbmNsdWRlICJFeGNlcHRpb24uaCIKICNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCkBAIC00
MDAsOCArMzk5LDYgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBtb2R1bGVMb2FkZQog
ICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKEpTV2ViQXNzZW1ibHk6Omluc3RhbnRpYXRl
KGdsb2JhbE9iamVjdCwgcHJvbWlzZSwgbW9kdWxlS2V5LCBqc1NvdXJjZUNvZGUpKTsKICNlbmRp
ZgogCi0gICAgQ29kZVByb2ZpbGluZyBwcm9maWxlKHNvdXJjZUNvZGUpOwotCiAgICAgUGFyc2Vy
RXJyb3IgZXJyb3I7CiAgICAgc3RkOjp1bmlxdWVfcHRyPE1vZHVsZVByb2dyYW1Ob2RlPiBtb2R1
bGVQcm9ncmFtTm9kZSA9IHBhcnNlPE1vZHVsZVByb2dyYW1Ob2RlPigKICAgICAgICAgdm0sIHNv
dXJjZUNvZGUsIElkZW50aWZpZXIoKSwgSlNQYXJzZXJCdWlsdGluTW9kZTo6Tm90QnVpbHRpbiwK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnNMaXN0LmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9uc0xpc3QuaAkocmV2
aXNpb24gMjU4OTk2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9uc0xp
c3QuaAkod29ya2luZyBjb3B5KQpAQCAtNTAwLDYgKzUwMCw3IEBAIGNvbnN0ZXhwciBib29sIGVu
YWJsZVdlYkFzc2VtYmx5U3RyZWFtaW4KICAgICB2KEJvb2wsIGZvcmNlT1NSRXhpdFRvTExJbnQs
IGZhbHNlLCBOb3JtYWwsICJJZiB0cnVlLCB3ZSBhbHdheXMgZXhpdCB0byB0aGUgTExJbnQuIElm
IGZhbHNlLCB3ZSBleGl0IHRvIHdoYXRldmVyIGlzIG1vc3QgY29udmVuaWVudC4iKSBcCiAgICAg
dihVbnNpZ25lZCwgZ2V0QnlWYWxJQ01heE51bWJlck9mSWRlbnRpZmllcnMsIDQsIE5vcm1hbCwg
Ik51bWJlciBvZiBpZGVudGlmaWVycyB3ZSBzZWUgaW4gdGhlIExMSW50IHRoYXQgY291bGQgY2F1
c2UgdXMgdG8gYmFpbCBvbiBnZW5lcmF0aW5nIGFuIElDIGZvciBnZXRfYnlfdmFsLiIpIFwKICAg
ICB2KEJvb2wsIHVzZVB1YmxpY0NsYXNzRmllbGRzLCB0cnVlLCBOb3JtYWwsICJJZiB0cnVlLCB0
aGUgcGFyc2VyIHdpbGwgdW5kZXJzdGFuZCBwdWJsaWMgZGF0YSBmaWVsZHMgaW5zaWRlIGNsYXNz
ZXMuIikgXAorICAgIHYoQm9vbCwgdXNlUmFuZG9taXppbmdFeGVjdXRhYmxlSXNsYW5kQWxsb2Nh
dGlvbiwgZmFsc2UsIE5vcm1hbCwgIkZvciB0aGUgYXJtNjQgRXhlY3V0YWJsZUFsbG9jYXRvciwg
aWYgdHJ1ZSwgc2VsZWN0IHdoaWNoIHJlZ2lvbiB0byB1c2UgcmFuZG9tbHkuIFRoaXMgaXMgdXNl
ZnVsIGZvciB0ZXN0aW5nIHRoYXQganVtcCBpc2xhbmRzIHdvcmsuIikgXAogCiBlbnVtIE9wdGlv
bkVxdWl2YWxlbmNlIHsKICAgICBTYW1lT3B0aW9uLApJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL3Rvb2xzL0NvZGVQcm9maWxlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvdG9vbHMvQ29kZVByb2ZpbGUuY3BwCShyZXZpc2lvbiAyNTg5OTYpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvdG9vbHMvQ29kZVByb2ZpbGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
LDE3MiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEyIEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1l
dDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICog
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICov
Ci0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJDb2RlUHJvZmlsZS5oIgotCi0jaW5j
bHVkZSAiQ29kZUJsb2NrLmgiCi0jaW5jbHVkZSAiQ29kZVByb2ZpbGluZy5oIgotI2luY2x1ZGUg
IkxpbmtCdWZmZXIuaCIKLSNpbmNsdWRlICJQcm9maWxlVHJlZU5vZGUuaCIKLSNpbmNsdWRlIDx3
dGYvU3RhY2tUcmFjZS5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgotCi1uYW1l
c3BhY2UgSlNDIHsKLQotLy8gTWFwIGZyb20gQ29kZVR5cGUgZW51bSB0byBhIGNvcnJlc3BvbmRp
bmcgbmFtZS4KLXN0YXRpYyBjb25zdCBjaGFyKiBjb25zdCBzX2NvZGVUeXBlTmFtZXNbQ29kZVBy
b2ZpbGU6Ok51bWJlck9mQ29kZVR5cGVzXSA9IHsKLSAgICAiW1tFbmdpbmVDb2RlXV0iLAotICAg
ICJbW0dsb2JhbFRodW5rXV0iLAotICAgICJbW1JlZ0V4cENvZGVdXSIsCi0gICAgIltbREZHSklU
XV0iLAotICAgICJbW0Jhc2VsaW5lT25seV1dIiwKLSAgICAiW1tCYXNlbGluZVByb2ZpbGVdXSIs
Ci0gICAgIltbQmFzZWxpbmVPU1JdXSIsCi0gICAgIltbRW5naW5lRnJhbWVdXSIKLX07Ci0KLS8v
IEhlbHBlciBmdW5jdGlvbiwgdHJ1bmNhdGUgdHJhY2VzIHRvIHBydW5lIHRoZSBvdXRwdXQgJiBt
YWtlIHZlcnkgdmVyYm9zZSBtb2RlIGEgbGl0dGxlIG1vcmUgcmVhZGFibGUuCi1zdGF0aWMgYm9v
bCB0cnVuY2F0ZVRyYWNlKGNvbnN0IGNoYXIqIHN5bWJvbE5hbWUpCi17Ci0gICAgcmV0dXJuICFz
dHJjbXAoc3ltYm9sTmFtZSwgIkpTQzo6Qnl0ZWNvZGVHZW5lcmF0b3I6OmdlbmVyYXRlKCkiKQot
ICAgICAgICB8fCAhc3RyY21wKHN5bWJvbE5hbWUsICJKU0M6OlBhcnNlcjxKU0M6OkxleGVyPHVu
c2lnbmVkIGNoYXI+Pjo6cGFyc2VJbm5lcigpIikKLSAgICAgICAgfHwgIXN0cmNtcChzeW1ib2xO
YW1lLCAiV1RGOjpmYXN0TWFsbG9jKHVuc2lnbmVkIGxvbmcpIikKLSAgICAgICAgfHwgIXN0cmNt
cChzeW1ib2xOYW1lLCAiV1RGOjpjYWxjdWxhdGVVVENPZmZzZXQoKSIpCi0gICAgICAgIHx8ICFz
dHJjbXAoc3ltYm9sTmFtZSwgIkpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6cGFyc2VDb2RlQmxv
Y2soKSIpOwotICAgICAgICAKLX0KLQotLy8gRWFjaCB0cmFjZSBjb25zaXN0cyBvZiBhIHNlcXVl
bmNlIG9mIHplcm8gb3IgbW9yZSAnRW5naW5lRnJhbWUnIGVudHJpZXMsCi0vLyBmb2xsb3dlZCBi
eSBhIHNhbXBsZSBpbiBKSVQgY29kZSwgb3Igb25lIG9yIG1vcmUgJ0VuZ2luZUZyYW1lJyBlbnRy
aWVzLAotLy8gZm9sbG93ZWQgYnkgYSAnRW5naW5lQ29kZScgdGVybWluYXRvci4KLXZvaWQgQ29k
ZVByb2ZpbGU6OnNhbXBsZSh2b2lkKiBwYywgdm9pZCoqIGZyYW1lUG9pbnRlcikKLXsKLSAgICAv
LyBEaXNhbGxvdyB0cmFjZXMgY29udGFpbmluZyBvbmx5IGEgJ0VuZ2luZUNvZGUnIHRlcm1pbmF0
b3IsIHdpdGhvdXQgYW55ICdFbmdpbmVGcmFtZScgZnJhbWVzLgotICAgIGlmICghZnJhbWVQb2lu
dGVyKQotICAgICAgICByZXR1cm47Ci0KLSAgICB3aGlsZSAoZnJhbWVQb2ludGVyKSB7Ci0gICAg
ICAgIENvZGVUeXBlIHR5cGU7Ci0KLSNpZiBFTkFCTEUoSklUKQotICAgICAgICAvLyBEZXRlcm1p
bmUgaWYgdGhpcyBzYW1wbGUgZmVsbCBpbiBKSVQgY29kZSwgYW5kIGlmIHNvLCBmcm9tIHdoaWNo
IEpJVCAmIHdoeS4KLSAgICAgICAgdm9pZCogb3duZXJVSUQgPSBDb2RlUHJvZmlsaW5nOjpnZXRP
d25lclVJREZvclBDKHBjKTsKLQotICAgICAgICBpZiAoIW93bmVyVUlEKQotICAgICAgICAgICAg
dHlwZSA9IEVuZ2luZUZyYW1lOwotICAgICAgICBlbHNlIGlmIChvd25lclVJRCA9PSBHTE9CQUxf
VEhVTktfSUQpCi0gICAgICAgICAgICB0eXBlID0gR2xvYmFsVGh1bms7Ci0gICAgICAgIGVsc2Ug
aWYgKG93bmVyVUlEID09IFJFR0VYUF9DT0RFX0lEKQotICAgICAgICAgICAgdHlwZSA9IFJlZ0V4
cENvZGU7Ci0gICAgICAgIGVsc2UgewotICAgICAgICAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sg
PSBzdGF0aWNfY2FzdDxDb2RlQmxvY2sqPihvd25lclVJRCk7Ci0gICAgICAgICAgICBpZiAoY29k
ZUJsb2NrLT5qaXRUeXBlKCkgPT0gSklUVHlwZTo6REZHSklUKQotICAgICAgICAgICAgICAgIHR5
cGUgPSBERkdKSVQ7Ci0gICAgICAgICAgICBlbHNlIGlmICghY2FuQ29tcGlsZShjb2RlQmxvY2st
PmNhcGFiaWxpdHlMZXZlbFN0YXRlKCkpKQotICAgICAgICAgICAgICAgIHR5cGUgPSBCYXNlbGlu
ZU9ubHk7Ci0gICAgICAgICAgICBlbHNlIGlmIChjb2RlQmxvY2stPnJlcGxhY2VtZW50KCkpCi0g
ICAgICAgICAgICAgICAgdHlwZSA9IEJhc2VsaW5lT1NSOwotICAgICAgICAgICAgZWxzZQotICAg
ICAgICAgICAgICAgIHR5cGUgPSBCYXNlbGluZVByb2ZpbGU7Ci0gICAgICAgIH0KLSNlbHNlCi0g
ICAgICAgIHR5cGUgPSBFbmdpbmVGcmFtZTsKLSNlbmRpZgotCi0gICAgICAgIC8vIEEgc2FtcGxl
IGluIEpJVCBjb2RlIHRlcm1pbmF0ZXMgdGhlIHRyYWNlLgotICAgICAgICBtX3NhbXBsZXMuYXBw
ZW5kKENvZGVSZWNvcmQocGMsIHR5cGUpKTsKLSAgICAgICAgaWYgKHR5cGUgIT0gRW5naW5lRnJh
bWUpCi0gICAgICAgICAgICByZXR1cm47Ci0KLSNpZiBPUyhEQVJXSU4pICYmIENQVShYODZfNjQp
Ci0gICAgICAgIC8vIFdhbGsgdXAgdGhlIHN0YWNrLgotICAgICAgICBwYyA9IGZyYW1lUG9pbnRl
clsxXTsKLSAgICAgICAgZnJhbWVQb2ludGVyID0gcmVpbnRlcnByZXRfY2FzdDx2b2lkKio+KCpm
cmFtZVBvaW50ZXIpOwotI2VsaWYgT1MoTElOVVgpICYmIENQVShYODYpCi0gICAgICAgIC8vIERv
bid0IHVud2luZCB0aGUgc3RhY2sgYXMgc29tZSBkZXBlbmRlbnQgdGhpcmQgcGFydHkgbGlicmFy
aWVzCi0gICAgICAgIC8vIG1heSBiZSBjb21waWxlZCB3aXRoIC1mb21pdC1mcmFtZS1wb2ludGVy
LgotICAgICAgICBmcmFtZVBvaW50ZXIgPSAwOwotI2Vsc2UKLSAgICAgICAgLy8gVGhpcyBwbGF0
Zm9ybSBpcyBub3QgeWV0IHN1cHBvcnRlZCEKLSAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JF
QUNIRUQoKTsKLSNlbmRpZgotICAgIH0KLQotICAgIC8vIElmIHdlIGdldCBoZXJlLCB3ZSB3YWxr
ZWQgdGhlIGVudGlyZSBzdGFjayB3aXRob3V0IGZpbmRpbmcgYW55IGZyYW1lcyBvZiBKSVQgY29k
ZS4KLSAgICBtX3NhbXBsZXMuYXBwZW5kKENvZGVSZWNvcmQoMCwgRW5naW5lQ29kZSkpOwotfQot
Ci12b2lkIENvZGVQcm9maWxlOjpyZXBvcnQoKQotewotICAgIGRhdGFMb2dGKCI8Q29kZVByb2Zp
bGluZyAlczolZD5cbiIsIG1fZmlsZS5kYXRhKCksIG1fbGluZU51bWJlcik7Ci0KLSAgICAvLyBI
b3cgbWFueSBmcmFtZXMgb2YgQy1jb2RlIHRvIHByaW50IC0gMCwgaWYgbm90IHZlcmJvc2UsIDEg
aWYgdmVyYm9zZSwgdXAgdG8gMTAyNCBpZiB2ZXJ5IHZlcmJvc2UuCi0gICAgdW5zaWduZWQgcmVj
dXJzaW9uTGltaXQgPSBDb2RlUHJvZmlsaW5nOjpiZVZlcnlWZXJib3NlKCkgPyAxMDI0IDogQ29k
ZVByb2ZpbGluZzo6YmVWZXJib3NlKCk7Ci0KLSAgICBQcm9maWxlVHJlZU5vZGUgcHJvZmlsZTsK
LQotICAgIC8vIFdhbGsgdGhyb3VnaCB0aGUgc2FtcGxlIGJ1ZmZlci4KLSAgICBzaXplX3QgdHJh
Y2UgPSAwOwotICAgIHdoaWxlICh0cmFjZSA8IG1fc2FtcGxlcy5zaXplKCkpIHsKLQotICAgICAg
ICAvLyBBbGwgdHJhY2VzIGFyZSB6ZXJvIG9yIG1vcmUgJ0VuZ2luZUZyYW1lJ3MsIGZvbGxvd2Vk
IGJ5IGEgbm9uLSdFbmdpbmVGcmFtZScuCi0gICAgICAgIC8vIFNjYW4gdG8gZmluZCB0aGUgbGFz
dCBzYW1wbGUgaW4gdGhlIHRyYWNlLgotICAgICAgICBzaXplX3QgbGFzdEluVHJhY2UgPSB0cmFj
ZTsKLSAgICAgICAgd2hpbGUgKG1fc2FtcGxlc1tsYXN0SW5UcmFjZV0udHlwZSA9PSBFbmdpbmVG
cmFtZSkKLSAgICAgICAgICAgICsrbGFzdEluVHJhY2U7Ci0KLSAgICAgICAgLy8gV2UgdXNlIHRo
ZSBsYXN0IHNhbXBsZSB0eXBlIHRvIGxvb2sgdXAgYSBuYW1lICh1c2VkIGFzIGEgYnVja2V0IGlu
IHRoZSBwcm9maWxlcikuCi0gICAgICAgIFByb2ZpbGVUcmVlTm9kZSogY2FsbGJhY2tzID0gcHJv
ZmlsZS5zYW1wbGVDaGlsZChzX2NvZGVUeXBlTmFtZXNbbV9zYW1wbGVzW2xhc3RJblRyYWNlXS50
eXBlXSk7Ci0KLSAgICAgICAgLy8gSWYgdGhlcmUgYXJlIGFueSBzYW1wbGVzIGluIEMtY29kZSwg
YWRkIHVwIHRvIHJlY3Vyc2lvbkxpbWl0IG9mIHRoZW0gaW50byB0aGUgcHJvZmlsZSB0cmVlLgot
ICAgICAgICBzaXplX3QgbGFzdEVuZ2luZUZyYW1lID0gbGFzdEluVHJhY2U7Ci0gICAgICAgIGZv
ciAodW5zaWduZWQgY291bnQgPSAwOyBsYXN0RW5naW5lRnJhbWUgPiB0cmFjZSAmJiBjb3VudCA8
IHJlY3Vyc2lvbkxpbWl0OyArK2NvdW50KSB7Ci0gICAgICAgICAgICAtLWxhc3RFbmdpbmVGcmFt
ZTsKLSAgICAgICAgICAgIEFTU0VSVChtX3NhbXBsZXNbbGFzdEVuZ2luZUZyYW1lXS50eXBlID09
IEVuZ2luZUZyYW1lKTsKLSAgICAgICAgICAgIGNvbnN0IGNoYXIqIG5hbWUgPSAiPHVua25vd24+
IjsKLSAgICAgICAgICAgIGF1dG8gZGVtYW5nbGVkID0gU3RhY2tUcmFjZTo6ZGVtYW5nbGUobV9z
YW1wbGVzW2xhc3RFbmdpbmVGcmFtZV0ucGMpOwotICAgICAgICAgICAgaWYgKGRlbWFuZ2xlZCkK
LSAgICAgICAgICAgICAgICBuYW1lID0gZGVtYW5nbGVkLT5kZW1hbmdsZWROYW1lKCkgPyBkZW1h
bmdsZWQtPmRlbWFuZ2xlZE5hbWUoKSA6IGRlbWFuZ2xlZC0+bWFuZ2xlZE5hbWUoKTsKLSAgICAg
ICAgICAgIGNhbGxiYWNrcyA9IGNhbGxiYWNrcy0+c2FtcGxlQ2hpbGQobmFtZSk7Ci0gICAgICAg
ICAgICBpZiAodHJ1bmNhdGVUcmFjZShuYW1lKSkKLSAgICAgICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgfQotCi0gICAgICAgIC8vIE1vdmUgb24gdG8gdGhlIG5leHQgdHJhY2UuCi0gICAgICAg
IHRyYWNlID0gbGFzdEluVHJhY2UgKyAxOwotICAgICAgICBBU1NFUlQodHJhY2UgPD0gbV9zYW1w
bGVzLnNpemUoKSk7Ci0gICAgfQotCi0gICAgLy8gT3V0cHV0IHRoZSBwcm9maWxlIHRyZWUuCi0g
ICAgZGF0YUxvZ0YoIlRvdGFsIHNhbXBsZXM6ICVsbGRcbiIsIHN0YXRpY19jYXN0PGxvbmcgbG9u
Zz4ocHJvZmlsZS5jaGlsZENvdW50KCkpKTsKLSAgICBwcm9maWxlLmR1bXAoKTsKLSAgICAKLSAg
ICBmb3IgKHNpemVfdCBpID0gMCA7IGkgPCBtX2NoaWxkcmVuLnNpemUoKTsgKytpKQotICAgICAg
ICBtX2NoaWxkcmVuW2ldLT5yZXBvcnQoKTsKLQotICAgIGRhdGFMb2dGKCI8L0NvZGVQcm9maWxp
bmcgJXM6JWQ+XG4iLCBtX2ZpbGUuZGF0YSgpLCBtX2xpbmVOdW1iZXIpOwotfQotCi19CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvdG9vbHMvQ29kZVByb2ZpbGUuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvdG9vbHMvQ29kZVByb2ZpbGUuaAkocmV2aXNpb24gMjU4
OTk2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3Rvb2xzL0NvZGVQcm9maWxlLmgJKHdvcmtp
bmcgY29weSkKQEAgLTEsODkgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMiBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLiAKLSAqLwotCi0jcHJhZ21hIG9uY2UKLQotI2luY2x1ZGUgIlNvdXJjZUNvZGUuaCIK
LSNpbmNsdWRlICJUaWVyZWRNTWFwQXJyYXkuaCIKLSNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5n
Lmg+Ci0KLW5hbWVzcGFjZSBKU0MgewotCi1jbGFzcyBDb2RlUHJvZmlsZSB7Ci0gICAgV1RGX01B
S0VfRkFTVF9BTExPQ0FURUQ7Ci1wdWJsaWM6Ci0gICAgQ29kZVByb2ZpbGUoY29uc3QgU291cmNl
Q29kZSYgc291cmNlLCBDb2RlUHJvZmlsZSogcGFyZW50KQotICAgICAgICA6IG1fZmlsZShTdHJp
bmcoc291cmNlLnByb3ZpZGVyKCktPnVybCgpKS51dGY4KCkpCi0gICAgICAgICwgbV9saW5lTnVt
YmVyKHNvdXJjZS5maXJzdExpbmUoKS5vbmVCYXNlZEludCgpKQotICAgICAgICAsIG1fcGFyZW50
KHBhcmVudCkKLSAgICB7Ci0gICAgICAgIGlmIChwYXJlbnQpCi0gICAgICAgICAgICBwYXJlbnQt
PmFkZENoaWxkKHN0ZDo6dW5pcXVlX3B0cjxDb2RlUHJvZmlsZT4odGhpcykpOwotICAgIH0KLQot
ICAgIHZvaWQgc2FtcGxlKHZvaWQqIHBjLCB2b2lkKiogZnJhbWVQb2ludGVyKTsKLSAgICB2b2lk
IHJlcG9ydCgpOwotCi0gICAgQ29kZVByb2ZpbGUqIHBhcmVudCgpCi0gICAgewotICAgICAgICBy
ZXR1cm4gbV9wYXJlbnQ7Ci0gICAgfQotICAgIAotICAgIHZvaWQgYWRkQ2hpbGQoc3RkOjp1bmlx
dWVfcHRyPENvZGVQcm9maWxlPiBjaGlsZCkKLSAgICB7Ci0gICAgICAgIG1fY2hpbGRyZW4uYXBw
ZW5kKFdURk1vdmUoY2hpbGQpKTsKLSAgICB9Ci0KLSAgICBlbnVtIENvZGVUeXBlIHsKLSAgICAg
ICAgRW5naW5lQ29kZSwKLSAgICAgICAgR2xvYmFsVGh1bmssCi0gICAgICAgIFJlZ0V4cENvZGUs
Ci0gICAgICAgIERGR0pJVCwKLSAgICAgICAgQmFzZWxpbmVPbmx5LAotICAgICAgICBCYXNlbGlu
ZVByb2ZpbGUsCi0gICAgICAgIEJhc2VsaW5lT1NSLAotICAgICAgICBFbmdpbmVGcmFtZSwKLSAg
ICAgICAgTnVtYmVyT2ZDb2RlVHlwZXMKLSAgICB9OwotCi1wcml2YXRlOgotICAgIHN0cnVjdCBD
b2RlUmVjb3JkIHsKLSAgICAgICAgQ29kZVJlY29yZCh2b2lkKiBwYywgQ29kZVR5cGUgdHlwZSkK
LSAgICAgICAgICAgIDogcGMocGMpCi0gICAgICAgICAgICAsIHR5cGUodHlwZSkKLSAgICAgICAg
ewotICAgICAgICB9Ci0gICAgICAgIHZvaWQqIHBjOwotICAgICAgICBDb2RlVHlwZSB0eXBlOwot
ICAgIH07Ci0KLSAgICBDU3RyaW5nIG1fZmlsZTsKLSAgICB1bnNpZ25lZCBtX2xpbmVOdW1iZXI7
Ci0gICAgQ29kZVByb2ZpbGUqIG1fcGFyZW50OwotICAgIFZlY3RvcjxzdGQ6OnVuaXF1ZV9wdHI8
Q29kZVByb2ZpbGU+PiBtX2NoaWxkcmVuOwotICAgIFRpZXJlZE1NYXBBcnJheTxDb2RlUmVjb3Jk
PiBtX3NhbXBsZXM7Ci19OwotCi19IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS90b29scy9Db2RlUHJvZmlsaW5nLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvdG9vbHMvQ29kZVByb2ZpbGluZy5jcHAJKHJldmlzaW9uIDI1ODk5NikK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90b29scy9Db2RlUHJvZmlsaW5nLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMSwxNjkgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMi0yMDE4
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
LSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuIAotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJDb2Rl
UHJvZmlsaW5nLmgiCi0KLSNpbmNsdWRlICJDb2RlUHJvZmlsZS5oIgotI2luY2x1ZGUgIk1hY2hp
bmVDb250ZXh0LmgiCi0jaW5jbHVkZSA8d3RmL01ldGFBbGxvY2F0b3IuaD4KLQotI2lmIEhBVkUo
U0lHTkFMX0gpCi0jaW5jbHVkZSA8c2lnbmFsLmg+Ci0jZW5kaWYKLQotI2lmIEhBVkUoTUFDSElO
RV9DT05URVhUKQotI2luY2x1ZGUgPHN5cy90aW1lLmg+Ci0jZW5kaWYKLQotbmFtZXNwYWNlIEpT
QyB7Ci0KLXZvbGF0aWxlIENvZGVQcm9maWxlKiBDb2RlUHJvZmlsaW5nOjpzX3Byb2ZpbGVTdGFj
ayA9IDA7Ci1Db2RlUHJvZmlsaW5nOjpNb2RlIENvZGVQcm9maWxpbmc6OnNfbW9kZSA9IENvZGVQ
cm9maWxpbmc6OkRpc2FibGVkOwotV1RGOjpNZXRhQWxsb2NhdG9yVHJhY2tlciogQ29kZVByb2Zp
bGluZzo6c190cmFja2VyID0gMDsKLQotSUdOT1JFX1dBUk5JTkdTX0JFR0lOKCJtaXNzaW5nLW5v
cmV0dXJuIikKLQotI2lmIEhBVkUoTUFDSElORV9DT05URVhUKQotLy8gSGVscGVyIGZ1bmN0aW9u
IHRvIHN0YXJ0ICYgc3RvcCB0aGUgdGltZXIuCi0vLyBQcmVzZW50bHkgd2UncmUgdXNpbmcgdGhl
IHdhbGwtY2xvY2sgdGltZXIsIHNpbmNlIHRoaXMgc2VlbXMgdG8gZ2l2ZSB0aGUgYmVzdCByZXN1
bHRzLgotc3RhdGljIHZvaWQgc2V0UHJvZmlsZVRpbWVyKHVuc2lnbmVkIHVzZWMpCi17Ci0gICAg
aXRpbWVydmFsIHRpbWVyOwotICAgIHRpbWVyLml0X3ZhbHVlLnR2X3NlYyA9IDA7Ci0gICAgdGlt
ZXIuaXRfdmFsdWUudHZfdXNlYyA9IHVzZWM7Ci0gICAgdGltZXIuaXRfaW50ZXJ2YWwudHZfc2Vj
ID0gMDsKLSAgICB0aW1lci5pdF9pbnRlcnZhbC50dl91c2VjID0gdXNlYzsKLSAgICBzZXRpdGlt
ZXIoSVRJTUVSX1JFQUwsICZ0aW1lciwgMCk7Ci19Ci0jZW5kaWYKLQotSUdOT1JFX1dBUk5JTkdT
X0VORAotCi0jaWYgSEFWRShNQUNISU5FX0NPTlRFWFQpCi1zdGF0aWMgdm9pZCBwcm9maWxpbmdU
aW1lcihpbnQsIHNpZ2luZm9fdCosIHZvaWQqIHVhcCkKLXsKLSAgICBQbGF0Zm9ybVJlZ2lzdGVy
cyYgcGxhdGZvcm1SZWdpc3RlcnMgPSBXVEY6OnJlZ2lzdGVyc0Zyb21VQ29udGV4dChzdGF0aWNf
Y2FzdDx1Y29udGV4dF90Kj4odWFwKSk7Ci0gICAgaWYgKGF1dG8gaW5zdHJ1Y3Rpb25Qb2ludGVy
ID0gTWFjaGluZUNvbnRleHQ6Omluc3RydWN0aW9uUG9pbnRlcihwbGF0Zm9ybVJlZ2lzdGVycykp
IHsKLSAgICAgICAgQ29kZVByb2ZpbGluZzo6c2FtcGxlKAotICAgICAgICAgICAgaW5zdHJ1Y3Rp
b25Qb2ludGVyLT51bnRhZ2dlZEV4ZWN1dGFibGVBZGRyZXNzKCksCi0gICAgICAgICAgICByZWlu
dGVycHJldF9jYXN0PHZvaWQqKj4oTWFjaGluZUNvbnRleHQ6OmZyYW1lUG9pbnRlcihwbGF0Zm9y
bVJlZ2lzdGVycykpKTsKLSAgICB9Ci19Ci0jZW5kaWYKLQotLy8gQ2FsbGJhY2sgdHJpZ2dlcmVk
IHdoZW4gdGhlIHRpbWVyIGlzIGZpcmVkLgotdm9pZCBDb2RlUHJvZmlsaW5nOjpzYW1wbGUodm9p
ZCogcGMsIHZvaWQqKiBmcmFtZVBvaW50ZXIpCi17Ci0gICAgQ29kZVByb2ZpbGUqIHByb2ZpbGVT
dGFjayA9IGNvbnN0X2Nhc3Q8Q29kZVByb2ZpbGUqPihzX3Byb2ZpbGVTdGFjayk7Ci0gICAgaWYg
KHByb2ZpbGVTdGFjaykKLSAgICAgICAgcHJvZmlsZVN0YWNrLT5zYW1wbGUocGMsIGZyYW1lUG9p
bnRlcik7Ci19Ci0KLXZvaWQgQ29kZVByb2ZpbGluZzo6bm90aWZ5QWxsb2NhdG9yKFdURjo6TWV0
YUFsbG9jYXRvciogYWxsb2NhdG9yKQotewotICAgIC8vIENoZWNrIGZvciBKU0NfQ09ERV9QUk9G
SUxJTkcuCi0gICAgY29uc3QgY2hhciogY29kZVByb2ZpbGluZ01vZGUgPSBnZXRlbnYoIkpTQ19D
T0RFX1BST0ZJTElORyIpOwotICAgIGlmICghY29kZVByb2ZpbGluZ01vZGUpCi0gICAgICAgIHJl
dHVybjsKLQotICAgIC8vIENoZWNrIGZvciBhIHZhbGlkIG1vZGUsIGN1cnJlbnRseSAiMSIsICIy
Iiwgb3IgIjMiLgotICAgIGlmICghY29kZVByb2ZpbGluZ01vZGVbMF0gfHwgY29kZVByb2ZpbGlu
Z01vZGVbMV0pCi0gICAgICAgIHJldHVybjsKLSAgICBzd2l0Y2ggKCpjb2RlUHJvZmlsaW5nTW9k
ZSkgewotICAgIGNhc2UgJzEnOgotICAgICAgICBzX21vZGUgPSBFbmFibGVkOwotICAgICAgICBi
cmVhazsKLSAgICBjYXNlICcyJzoKLSAgICAgICAgc19tb2RlID0gVmVyYm9zZTsKLSAgICAgICAg
YnJlYWs7Ci0gICAgY2FzZSAnMyc6Ci0gICAgICAgIHNfbW9kZSA9IFZlcnlWZXJib3NlOwotICAg
ICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAg
QVNTRVJUKGVuYWJsZWQoKSk7Ci0gICAgQVNTRVJUKCFzX3RyYWNrZXIpOwotICAgIHNfdHJhY2tl
ciA9IG5ldyBXVEY6Ok1ldGFBbGxvY2F0b3JUcmFja2VyKCk7Ci0gICAgYWxsb2NhdG9yLT50cmFj
a0FsbG9jYXRpb25zKHNfdHJhY2tlcik7Ci19Ci0KLXZvaWQqIENvZGVQcm9maWxpbmc6OmdldE93
bmVyVUlERm9yUEModm9pZCogYWRkcmVzcykKLXsKLSAgICBpZiAoIXNfdHJhY2tlcikKLSAgICAg
ICAgcmV0dXJuIDA7Ci0gICAgV1RGOjpNZXRhQWxsb2NhdG9ySGFuZGxlKiBoYW5kbGUgPSBzX3Ry
YWNrZXItPmZpbmQoYWRkcmVzcyk7Ci0gICAgaWYgKCFoYW5kbGUpCi0gICAgICAgIHJldHVybiAw
OwotICAgIHJldHVybiBoYW5kbGUtPm93bmVyVUlEKCk7Ci19Ci0KLXZvaWQgQ29kZVByb2ZpbGlu
Zzo6YmVnaW4oY29uc3QgU291cmNlQ29kZSYgc291cmNlKQotewotICAgIC8vIFB1c2ggYSBuZXcg
Q29kZVByb2ZpbGUgb250byB0aGUgc3RhY2sgZm9yIGVhY2ggc2NyaXB0IGVuY291bnRlcmVkLgot
ICAgIENvZGVQcm9maWxlKiBwcm9maWxlU3RhY2sgPSBjb25zdF9jYXN0PENvZGVQcm9maWxlKj4o
c19wcm9maWxlU3RhY2spOwotICAgIGJvb2wgYWxyZWFkeVByb2ZpbGluZyA9IHByb2ZpbGVTdGFj
azsKLSAgICBzX3Byb2ZpbGVTdGFjayA9IHByb2ZpbGVTdGFjayA9IG5ldyBDb2RlUHJvZmlsZShz
b3VyY2UsIHByb2ZpbGVTdGFjayk7Ci0KLSAgICAvLyBJcyB0aGUgcHJvZmlsZXIgYWxyZWFkeSBy
dW5uaW5nIC0gaWYgc28sIHRoZSB0aW1lciB3aWxsIGFscmVhZHkgYmUgc2V0IHVwLgotICAgIGlm
IChhbHJlYWR5UHJvZmlsaW5nKQotICAgICAgICByZXR1cm47Ci0KLSNpZiBIQVZFKE1BQ0hJTkVf
Q09OVEVYVCkKLSAgICAvLyBSZWdzaXRlciBhIHNpZ25hbCBoYW5kbGVyICYgaXRpbWVyLgotICAg
IHN0cnVjdCBzaWdhY3Rpb24gYWN0aW9uOwotICAgIGFjdGlvbi5zYV9zaWdhY3Rpb24gPSByZWlu
dGVycHJldF9jYXN0PHZvaWQgKCopKGludCwgc2lnaW5mb190ICosIHZvaWQgKik+KHByb2ZpbGlu
Z1RpbWVyKTsKLSAgICBzaWdmaWxsc2V0KCZhY3Rpb24uc2FfbWFzayk7Ci0gICAgYWN0aW9uLnNh
X2ZsYWdzID0gU0FfU0lHSU5GTzsKLSAgICBzaWdhY3Rpb24oU0lHQUxSTSwgJmFjdGlvbiwgMCk7
Ci0gICAgc2V0UHJvZmlsZVRpbWVyKDEwMCk7Ci0jZW5kaWYKLX0KLQotdm9pZCBDb2RlUHJvZmls
aW5nOjplbmQoKQotewotICAgIC8vIFBvcCB0aGUgY3VycmVudCBwcm9maWxlciBvZmYgdGhlIHN0
YWNrLgotICAgIENvZGVQcm9maWxlKiBjdXJyZW50ID0gY29uc3RfY2FzdDxDb2RlUHJvZmlsZSo+
KHNfcHJvZmlsZVN0YWNrKTsKLSAgICBBU1NFUlQoY3VycmVudCk7Ci0gICAgc19wcm9maWxlU3Rh
Y2sgPSBjdXJyZW50LT5wYXJlbnQoKTsKLQotICAgIC8vIElzIHRoaXMgdGhlIG91dGVybW9zdCBz
Y3JpcHQgYmVpbmcgcHJvZmlsZWQ/IC0gaWYgbm90LCBqdXN0IHJldHVybi4KLSAgICAvLyBXZSBw
ZXJmb3JtIGFsbCBvdXRwdXQgb2YgcHJvZmlsZXMgcmVjdXJzaXZlbHkgZnJvbSB0aGUgb3V0ZXJt
b3N0IHNjcmlwdCwKLSAgICAvLyB0byBtaW5pbWl6ZSBwcm9maWxpbmcgb3ZlcmhlYWQgZnJvbSBz
a2V3aW5nIHJlc3VsdHMuCi0gICAgaWYgKHNfcHJvZmlsZVN0YWNrKQotICAgICAgICByZXR1cm47
Ci0KLSNpZiBIQVZFKE1BQ0hJTkVfQ09OVEVYVCkKLSAgICAvLyBTdG9wIHByb2ZpbGluZwotICAg
IHNldFByb2ZpbGVUaW1lcigwKTsKLSNlbmRpZgotCi0gICAgY3VycmVudC0+cmVwb3J0KCk7Ci0g
ICAgZGVsZXRlIGN1cnJlbnQ7Ci19Ci0KLX0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90
b29scy9Db2RlUHJvZmlsaW5nLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L3Rvb2xzL0NvZGVQcm9maWxpbmcuaAkocmV2aXNpb24gMjU4OTk2KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL3Rvb2xzL0NvZGVQcm9maWxpbmcuaAkod29ya2luZyBjb3B5KQpAQCAtMSw4MSAr
MCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQot
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
Ci0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0KLSNw
cmFnbWEgb25jZQotCi1uYW1lc3BhY2UgV1RGIHsKLQotY2xhc3MgTWV0YUFsbG9jYXRvcjsKLWNs
YXNzIE1ldGFBbGxvY2F0b3JUcmFja2VyOwotCi19Ci0KLW5hbWVzcGFjZSBKU0MgewotCi1jbGFz
cyBDb2RlUHJvZmlsZTsKLWNsYXNzIFNvdXJjZUNvZGU7Ci0KLWNsYXNzIENvZGVQcm9maWxpbmcg
ewotICAgIGVudW0gTW9kZSB7Ci0gICAgICAgIERpc2FibGVkLAotICAgICAgICBFbmFibGVkLAot
ICAgICAgICBWZXJib3NlLAotICAgICAgICBWZXJ5VmVyYm9zZQotICAgIH07Ci0KLXB1YmxpYzoK
LSAgICBDb2RlUHJvZmlsaW5nKGNvbnN0IFNvdXJjZUNvZGUmIHNvdXJjZSkKLSAgICAgICAgOiBt
X2FjdGl2ZShlbmFibGVkKCkpCi0gICAgewotICAgICAgICBpZiAobV9hY3RpdmUpCi0gICAgICAg
ICAgICBiZWdpbihzb3VyY2UpOwotICAgIH0KLQotICAgIH5Db2RlUHJvZmlsaW5nKCkKLSAgICB7
Ci0gICAgICAgIGlmIChtX2FjdGl2ZSkKLSAgICAgICAgICAgIGVuZCgpOwotICAgIH0KLQotICAg
IHN0YXRpYyBib29sIGVuYWJsZWQoKSB7IHJldHVybiBzX21vZGUgIT0gRGlzYWJsZWQ7IH0KLSAg
ICBzdGF0aWMgYm9vbCBiZVZlcmJvc2UoKSB7IHJldHVybiBzX21vZGUgPj0gVmVyYm9zZTsgfQot
ICAgIHN0YXRpYyBib29sIGJlVmVyeVZlcmJvc2UoKSB7IHJldHVybiBzX21vZGUgPj0gVmVyeVZl
cmJvc2U7IH0KLQotICAgIHN0YXRpYyB2b2lkIG5vdGlmeUFsbG9jYXRvcihXVEY6Ok1ldGFBbGxv
Y2F0b3IqKTsKLSAgICBzdGF0aWMgdm9pZCogZ2V0T3duZXJVSURGb3JQQyh2b2lkKik7Ci0gICAg
c3RhdGljIHZvaWQgc2FtcGxlKHZvaWQqIHBjLCB2b2lkKiogZnJhbWVQb2ludGVyKTsKLQotcHJp
dmF0ZToKLSAgICB2b2lkIGJlZ2luKGNvbnN0IFNvdXJjZUNvZGUmKTsKLSAgICB2b2lkIGVuZCgp
OwotCi0gICAgYm9vbCBtX2FjdGl2ZTsKLQotICAgIHN0YXRpYyBNb2RlIHNfbW9kZTsKLSAgICBz
dGF0aWMgV1RGOjpNZXRhQWxsb2NhdG9yVHJhY2tlciogc190cmFja2VyOwotICAgIHN0YXRpYyB2
b2xhdGlsZSBDb2RlUHJvZmlsZSogc19wcm9maWxlU3RhY2s7Ci19OwotCi19IC8vIG5hbWVzcGFj
ZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21CQlFQbGFuLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQkJRUGxhbi5jcHAJ
KHJldmlzaW9uIDI1ODk5NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21CQlFQ
bGFuLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTMyLDEzICsxMzIsOSBAQCB2b2lkIEJCUVBsYW46
OndvcmsoQ29tcGlsYXRpb25FZmZvcnQgZWZmCiAgICAgICAgIC8vIHdpbGwgdXBkYXRlLiBJdCdz
IGFsc28gb2sgaWYgdGhleSBwdWJsaXNoIHRoZWlyIGNvZGUgYmVmb3JlIHdlIHJlc2V0IHRoZSBp
bnN0cnVjdGlvbiBjYWNoZXMgYmVjYXVzZSBhZnRlciB3ZSByZWxlYXNlCiAgICAgICAgIC8vIHRo
ZSBsb2NrIG91ciBjb2RlIGlzIHJlYWR5IHRvIGJlIHB1Ymxpc2hlZCB0b28uCiAgICAgICAgIExv
Y2tIb2xkZXIgaG9sZGVyKG1fY29kZUJsb2NrLT5tX2xvY2spOworCiAgICAgICAgIG1fY29kZUJs
b2NrLT5tX2JicUNhbGxlZXNbbV9mdW5jdGlvbkluZGV4XSA9IGNhbGxlZS5jb3B5UmVmKCk7Ci0g
ICAgICAgIHsKLSAgICAgICAgICAgIExMSW50Q2FsbGVlJiBsbGludENhbGxlZSA9IG1fY29kZUJs
b2NrLT5tX2xsaW50Q2FsbGVlcy0+YXQobV9mdW5jdGlvbkluZGV4KS5nZXQoKTsKLSAgICAgICAg
ICAgIGF1dG8gbG9ja2VyID0gaG9sZExvY2sobGxpbnRDYWxsZWUudGllclVwQ291bnRlcigpLm1f
bG9jayk7Ci0gICAgICAgICAgICBsbGludENhbGxlZS5zZXRSZXBsYWNlbWVudChjYWxsZWUuY29w
eVJlZigpKTsKLSAgICAgICAgICAgIGxsaW50Q2FsbGVlLnRpZXJVcENvdW50ZXIoKS5tX2NvbXBp
bGF0aW9uU3RhdHVzID0gTExJbnRUaWVyVXBDb3VudGVyOjpDb21waWxhdGlvblN0YXR1czo6Q29t
cGlsZWQ7Ci0gICAgICAgIH0KKwogICAgICAgICBmb3IgKGF1dG8mIGNhbGwgOiBjYWxsZWUtPndh
c21Ub1dhc21DYWxsc2l0ZXMoKSkgewogICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRy
PFdhc21FbnRyeVB0clRhZz4gZW50cnlwb2ludDsKICAgICAgICAgICAgIGlmIChjYWxsLmZ1bmN0
aW9uSW5kZXhTcGFjZSA8IG1fbW9kdWxlSW5mb3JtYXRpb24tPmltcG9ydEZ1bmN0aW9uQ291bnQo
KSkKQEAgLTE0OCw0OSArMTQ0LDE5IEBAIHZvaWQgQkJRUGxhbjo6d29yayhDb21waWxhdGlvbkVm
Zm9ydCBlZmYKIAogICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OnJlcGF0Y2hOZWFyQ2FsbChj
YWxsLmNhbGxMb2NhdGlvbiwgQ29kZUxvY2F0aW9uTGFiZWw8V2FzbUVudHJ5UHRyVGFnPihlbnRy
eXBvaW50KSk7CiAgICAgICAgIH0KLSAgICB9CiAKLSAgICAvLyBJdCdzIGltcG9ydGFudCB0byBt
YWtlIHN1cmUgd2UgZG8gdGhpcyBiZWZvcmUgd2UgbWFrZSBhbnkgb2YgdGhlIGNvZGUgd2UganVz
dCBjb21waWxlZCB2aXNpYmxlLiBJZiB3ZSBkaWRuJ3QsIHdlIGNvdWxkIGVuZCB1cAotICAgIC8v
IHdoZXJlIHdlIGFyZSB0aWVyaW5nIHVwIHNvbWUgZnVuY3Rpb24gQSB0byBBJyBhbmQgd2UgcmVw
YXRjaCBzb21lIGZ1bmN0aW9uIEIgdG8gY2FsbCBBJyBpbnN0ZWFkIG9mIEEuIEFub3RoZXIgQ1BV
IGNvdWxkIHNlZQotICAgIC8vIHRoZSB1cGRhdGVzIHRvIEIgYnV0IHN0aWxsIG5vdCBoYXZlIHJl
c2V0IGl0cyBjYWNoZSBvZiBBJywgd2hpY2ggd291bGQgbGVhZCB0byBhbGwga2luZHMgb2YgYmFk
bmVzcy4KLSAgICByZXNldEluc3RydWN0aW9uQ2FjaGVPbkFsbFRocmVhZHMoKTsKLSAgICBXVEY6
OnN0b3JlU3RvcmVGZW5jZSgpOyAvLyBUaGlzIHByb2JhYmx5IGlzbid0IG5lY2Vzc2FyeSBidXQg
aXQncyBnb29kIHRvIGJlIHBhcmFub2lkLgotCi0gICAgbV9jb2RlQmxvY2stPm1fd2FzbUluZGly
ZWN0Q2FsbEVudHJ5UG9pbnRzW21fZnVuY3Rpb25JbmRleF0gPSBlbnRyeXBvaW50OwotICAgIHsK
LSAgICAgICAgTG9ja0hvbGRlciBob2xkZXIobV9jb2RlQmxvY2stPm1fbG9jayk7CisgICAgICAg
IFBsYW46OnVwZGF0ZUNhbGxTaXRlc1RvQ2FsbFVzKCptX2NvZGVCbG9jaywgQ29kZUxvY2F0aW9u
TGFiZWw8V2FzbUVudHJ5UHRyVGFnPihlbnRyeXBvaW50KSwgbV9mdW5jdGlvbkluZGV4LCBmdW5j
dGlvbkluZGV4U3BhY2UpOwogCi0gICAgICAgIGF1dG8gcmVwYXRjaENhbGxzID0gWyZdIChjb25z
dCBWZWN0b3I8VW5saW5rZWRXYXNtVG9XYXNtQ2FsbD4mIGNhbGxzaXRlcykgewotICAgICAgICAg
ICAgZm9yIChhdXRvJiBjYWxsIDogY2FsbHNpdGVzKSB7Ci0gICAgICAgICAgICAgICAgZGF0YUxv
Z0xuSWYoV2FzbUJCUVBsYW5JbnRlcm5hbDo6dmVyYm9zZSwgIkNvbnNpZGVyaW5nIHJlcGF0Y2hp
bmcgY2FsbCBhdDogIiwgUmF3UG9pbnRlcihjYWxsLmNhbGxMb2NhdGlvbi5kYXRhTG9jYXRpb24o
KSksICIgdGhhdCB0YXJnZXRzICIsIGNhbGwuZnVuY3Rpb25JbmRleFNwYWNlKTsKLSAgICAgICAg
ICAgICAgICBpZiAoY2FsbC5mdW5jdGlvbkluZGV4U3BhY2UgPT0gZnVuY3Rpb25JbmRleFNwYWNl
KSB7Ci0gICAgICAgICAgICAgICAgICAgIGRhdGFMb2dMbklmKFdhc21CQlFQbGFuSW50ZXJuYWw6
OnZlcmJvc2UsICJSZXBhdGNoaW5nIGNhbGwgYXQ6ICIsIFJhd1BvaW50ZXIoY2FsbC5jYWxsTG9j
YXRpb24uZGF0YUxvY2F0aW9uKCkpLCAiIHRvICIsIFJhd1BvaW50ZXIoZW50cnlwb2ludC5leGVj
dXRhYmxlQWRkcmVzcygpKSk7Ci0gICAgICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpy
ZXBhdGNoTmVhckNhbGwoY2FsbC5jYWxsTG9jYXRpb24sIENvZGVMb2NhdGlvbkxhYmVsPFdhc21F
bnRyeVB0clRhZz4oZW50cnlwb2ludCkpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAg
IH0KLSAgICAgICAgfTsKLQotICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9jb2Rl
QmxvY2stPm1fd2FzbVRvV2FzbUNhbGxzaXRlcy5zaXplKCk7ICsraSkgewotICAgICAgICAgICAg
cmVwYXRjaENhbGxzKG1fY29kZUJsb2NrLT5tX3dhc21Ub1dhc21DYWxsc2l0ZXNbaV0pOwotICAg
ICAgICAgICAgaWYgKG1fY29kZUJsb2NrLT5tX2xsaW50Q2FsbGVlcykgewotICAgICAgICAgICAg
ICAgIExMSW50Q2FsbGVlJiBsbGludENhbGxlZSA9IG1fY29kZUJsb2NrLT5tX2xsaW50Q2FsbGVl
cy0+YXQoaSkuZ2V0KCk7Ci0gICAgICAgICAgICAgICAgaWYgKEpJVENhbGxlZSogcmVwbGFjZW1l
bnRDYWxsZWUgPSBsbGludENhbGxlZS5yZXBsYWNlbWVudCgpKQotICAgICAgICAgICAgICAgICAg
ICByZXBhdGNoQ2FsbHMocmVwbGFjZW1lbnRDYWxsZWUtPndhc21Ub1dhc21DYWxsc2l0ZXMoKSk7
Ci0gICAgICAgICAgICAgICAgaWYgKE9NR0Zvck9TUkVudHJ5Q2FsbGVlKiBvc3JFbnRyeUNhbGxl
ZSA9IGxsaW50Q2FsbGVlLm9zckVudHJ5Q2FsbGVlKCkpCi0gICAgICAgICAgICAgICAgICAgIHJl
cGF0Y2hDYWxscyhvc3JFbnRyeUNhbGxlZS0+d2FzbVRvV2FzbUNhbGxzaXRlcygpKTsKLSAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgIGlmIChCQlFDYWxsZWUqIGJicUNhbGxlZSA9IG1fY29kZUJs
b2NrLT5tX2JicUNhbGxlZXNbaV0uZ2V0KCkpIHsKLSAgICAgICAgICAgICAgICBpZiAoT01HQ2Fs
bGVlKiByZXBsYWNlbWVudENhbGxlZSA9IGJicUNhbGxlZS0+cmVwbGFjZW1lbnQoKSkKLSAgICAg
ICAgICAgICAgICAgICAgcmVwYXRjaENhbGxzKHJlcGxhY2VtZW50Q2FsbGVlLT53YXNtVG9XYXNt
Q2FsbHNpdGVzKCkpOwotICAgICAgICAgICAgICAgIGlmIChPTUdGb3JPU1JFbnRyeUNhbGxlZSog
b3NyRW50cnlDYWxsZWUgPSBiYnFDYWxsZWUtPm9zckVudHJ5Q2FsbGVlKCkpCi0gICAgICAgICAg
ICAgICAgICAgIHJlcGF0Y2hDYWxscyhvc3JFbnRyeUNhbGxlZS0+d2FzbVRvV2FzbUNhbGxzaXRl
cygpKTsKLSAgICAgICAgICAgIH0KKyAgICAgICAgeworICAgICAgICAgICAgTExJbnRDYWxsZWUm
IGxsaW50Q2FsbGVlID0gbV9jb2RlQmxvY2stPm1fbGxpbnRDYWxsZWVzLT5hdChtX2Z1bmN0aW9u
SW5kZXgpLmdldCgpOworICAgICAgICAgICAgYXV0byBsb2NrZXIgPSBob2xkTG9jayhsbGludENh
bGxlZS50aWVyVXBDb3VudGVyKCkubV9sb2NrKTsKKyAgICAgICAgICAgIGxsaW50Q2FsbGVlLnNl
dFJlcGxhY2VtZW50KGNhbGxlZS5jb3B5UmVmKCkpOworICAgICAgICAgICAgbGxpbnRDYWxsZWUu
dGllclVwQ291bnRlcigpLm1fY29tcGlsYXRpb25TdGF0dXMgPSBMTEludFRpZXJVcENvdW50ZXI6
OkNvbXBpbGF0aW9uU3RhdHVzOjpDb21waWxlZDsKICAgICAgICAgfQogICAgIH0KIAogICAgIGRh
dGFMb2dMbklmKFdhc21CQlFQbGFuSW50ZXJuYWw6OnZlcmJvc2UsICJGaW5pc2hlZCBCQlEgIiwg
bV9mdW5jdGlvbkluZGV4KTsKIAotCiAgICAgYXV0byBsb2NrZXIgPSBob2xkTG9jayhtX2xvY2sp
OwogICAgIG1vdmVUb1N0YXRlKFN0YXRlOjpDb21wbGV0ZWQpOwogICAgIHJ1bkNvbXBsZXRpb25U
YXNrcyhsb2NrZXIpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUNvZGVC
bG9jay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21Db2Rl
QmxvY2suaAkocmV2aXNpb24gMjU4OTk2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20v
V2FzbUNvZGVCbG9jay5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMjQsNiArMTI0LDcgQEAgcHVibGlj
OgogCiAgICAgfkNvZGVCbG9jaygpOwogcHJpdmF0ZToKKyAgICBmcmllbmQgY2xhc3MgUGxhbjsK
ICAgICBmcmllbmQgY2xhc3MgQkJRUGxhbjsKICAgICBmcmllbmQgY2xhc3MgT01HUGxhbjsKICAg
ICBmcmllbmQgY2xhc3MgT01HRm9yT1NSRW50cnlQbGFuOwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL3dhc20vV2FzbU9NR0Zvck9TUkVudHJ5UGxhbi5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU9NR0Zvck9TUkVudHJ5UGxhbi5jcHAJKHJldmlz
aW9uIDI1ODk5NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21PTUdGb3JPU1JF
bnRyeVBsYW4uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDMsMTIgKzEwMywxMCBAQCB2b2lkIE9N
R0Zvck9TUkVudHJ5UGxhbjo6d29yayhDb21waWxhdGlvCiAKICAgICBvbWdFbnRyeXBvaW50LmNh
bGxlZVNhdmVSZWdpc3RlcnMgPSBXVEZNb3ZlKHBhcnNlQW5kQ29tcGlsZVJlc3VsdC52YWx1ZSgp
LT5lbnRyeXBvaW50LmNhbGxlZVNhdmVSZWdpc3RlcnMpOwogCi0gICAgTWFjcm9Bc3NlbWJsZXJD
b2RlUHRyPFdhc21FbnRyeVB0clRhZz4gZW50cnlwb2ludDsKICAgICBBU1NFUlQobV9jb2RlQmxv
Y2sucHRyKCkgPT0gbV9tb2R1bGUtPmNvZGVCbG9ja0Zvcihtb2RlKCkpKTsKICAgICBSZWY8T01H
Rm9yT1NSRW50cnlDYWxsZWU+IGNhbGxlZSA9IE9NR0Zvck9TUkVudHJ5Q2FsbGVlOjpjcmVhdGUo
V1RGTW92ZShvbWdFbnRyeXBvaW50KSwgZnVuY3Rpb25JbmRleFNwYWNlLCBtX21vZHVsZUluZm9y
bWF0aW9uLT5uYW1lU2VjdGlvbi0+Z2V0KGZ1bmN0aW9uSW5kZXhTcGFjZSksIG9zckVudHJ5U2Ny
YXRjaEJ1ZmZlclNpemUsIG1fbG9vcEluZGV4LCBXVEZNb3ZlKHVubGlua2VkQ2FsbHMpKTsKICAg
ICB7CiAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpyZXBhdGNoUG9pbnRlcihwYXJzZUFuZENvbXBp
bGVSZXN1bHQudmFsdWUoKS0+Y2FsbGVlTW92ZUxvY2F0aW9uLCBDYWxsZWVCaXRzOjpib3hXYXNt
KGNhbGxlZS5wdHIoKSkpOwotICAgICAgICBlbnRyeXBvaW50ID0gY2FsbGVlLT5lbnRyeXBvaW50
KCk7CiAKICAgICAgICAgYXV0byBsb2NrZXIgPSBob2xkTG9jayhtX2NvZGVCbG9jay0+bV9sb2Nr
KTsKICAgICAgICAgZm9yIChhdXRvJiBjYWxsIDogY2FsbGVlLT53YXNtVG9XYXNtQ2FsbHNpdGVz
KCkpIHsKQEAgLTEyMCwxMSArMTE4LDEwIEBAIHZvaWQgT01HRm9yT1NSRW50cnlQbGFuOjp3b3Jr
KENvbXBpbGF0aW8KIAogICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OnJlcGF0Y2hOZWFyQ2Fs
bChjYWxsLmNhbGxMb2NhdGlvbiwgQ29kZUxvY2F0aW9uTGFiZWw8V2FzbUVudHJ5UHRyVGFnPihl
bnRyeXBvaW50KSk7CiAgICAgICAgIH0KLSAgICB9Ci0gICAgcmVzZXRJbnN0cnVjdGlvbkNhY2hl
T25BbGxUaHJlYWRzKCk7Ci0gICAgV1RGOjpzdG9yZVN0b3JlRmVuY2UoKTsKLSAgICB7Ci0gICAg
ICAgIGF1dG8gbG9ja2VyID0gaG9sZExvY2sobV9jb2RlQmxvY2stPm1fbG9jayk7CisKKyAgICAg
ICAgcmVzZXRJbnN0cnVjdGlvbkNhY2hlT25BbGxUaHJlYWRzKCk7CisgICAgICAgIFdURjo6c3Rv
cmVTdG9yZUZlbmNlKCk7CisKICAgICAgICAgewogICAgICAgICAgICAgc3dpdGNoIChtX2NhbGxl
ZS0+Y29tcGlsYXRpb25Nb2RlKCkpIHsKICAgICAgICAgICAgIGNhc2UgQ29tcGlsYXRpb25Nb2Rl
OjpMTEludE1vZGU6IHsKQEAgLTE0NiwxOSArMTQzLDYgQEAgdm9pZCBPTUdGb3JPU1JFbnRyeVBs
YW46OndvcmsoQ29tcGlsYXRpbwogICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9S
RUFDSEVEKCk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KLSAgICAgICAgV1RGOjpzdG9yZVN0
b3JlRmVuY2UoKTsKLSAgICAgICAgLy8gSXQgaXMgcG9zc2libGUgdGhhdCBhIG5ldyBPTUcgY2Fs
bGVlIGlzIGFkZGVkIHdoaWxlIHdlIHJlbGVhc2UgbV9jb2RlQmxvY2stPmxvY2suCi0gICAgICAg
IC8vIFVudGlsIHdlIGFkZCBPTUdGb3JPU1JFbnRyeSBjYWxsZWUgdG8gQkJRQ2FsbGVlJ3MgbV9v
c3JFbnRyeUNhbGxlZSwgdGhpcyBuZXcgT01HIGZ1bmN0aW9uIGxpbmtpbmcgZG9lcyBub3QgaGFw
cGVuIGZvciB0aGlzIE9NR0Zvck9TUkVudHJ5IGNhbGxlZS4KLSAgICAgICAgLy8gV2UgcmUtbGlu
ayB0aGlzIE9NR0Zvck9TUkVudHJ5IGNhbGxlZSBhZ2FpbiBub3QgdG8gbWlzcyB0aGF0IGNoYW5j
ZS4KLSAgICAgICAgZm9yIChhdXRvJiBjYWxsIDogY2FsbGVlLT53YXNtVG9XYXNtQ2FsbHNpdGVz
KCkpIHsKLSAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxXYXNtRW50cnlQdHJUYWc+
IGVudHJ5cG9pbnQ7Ci0gICAgICAgICAgICBpZiAoY2FsbC5mdW5jdGlvbkluZGV4U3BhY2UgPCBt
X21vZHVsZS0+bW9kdWxlSW5mb3JtYXRpb24oKS5pbXBvcnRGdW5jdGlvbkNvdW50KCkpCi0gICAg
ICAgICAgICAgICAgZW50cnlwb2ludCA9IG1fY29kZUJsb2NrLT5tX3dhc21Ub1dhc21FeGl0U3R1
YnNbY2FsbC5mdW5jdGlvbkluZGV4U3BhY2VdLmNvZGUoKTsKLSAgICAgICAgICAgIGVsc2UKLSAg
ICAgICAgICAgICAgICBlbnRyeXBvaW50ID0gbV9jb2RlQmxvY2stPndhc21FbnRyeXBvaW50Q2Fs
bGVlRnJvbUZ1bmN0aW9uSW5kZXhTcGFjZShjYWxsLmZ1bmN0aW9uSW5kZXhTcGFjZSkuZW50cnlw
b2ludCgpLnJldGFnZ2VkPFdhc21FbnRyeVB0clRhZz4oKTsKLQotICAgICAgICAgICAgTWFjcm9B
c3NlbWJsZXI6OnJlcGF0Y2hOZWFyQ2FsbChjYWxsLmNhbGxMb2NhdGlvbiwgQ29kZUxvY2F0aW9u
TGFiZWw8V2FzbUVudHJ5UHRyVGFnPihlbnRyeXBvaW50KSk7Ci0gICAgICAgIH0KICAgICB9CiAg
ICAgZGF0YUxvZ0xuSWYoV2FzbU9NR0Zvck9TUkVudHJ5UGxhbkludGVybmFsOjp2ZXJib3NlLCAi
RmluaXNoZWQgT01HRm9yT1NSRW50cnkgIiwgbV9mdW5jdGlvbkluZGV4KTsKICAgICBjb21wbGV0
ZShob2xkTG9jayhtX2xvY2spKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dh
c21PTUdQbGFuLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9X
YXNtT01HUGxhbi5jcHAJKHJldmlzaW9uIDI1ODk5NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS93YXNtL1dhc21PTUdQbGFuLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTE0LDIwICsxMTQsOSBA
QCB2b2lkIE9NR1BsYW46OndvcmsoQ29tcGlsYXRpb25FZmZvcnQpCiAgICAgICAgIC8vIHdpbGwg
dXBkYXRlLiBJdCdzIGFsc28gb2sgaWYgdGhleSBwdWJsaXNoIHRoZWlyIGNvZGUgYmVmb3JlIHdl
IHJlc2V0IHRoZSBpbnN0cnVjdGlvbiBjYWNoZXMgYmVjYXVzZSBhZnRlciB3ZSByZWxlYXNlCiAg
ICAgICAgIC8vIHRoZSBsb2NrIG91ciBjb2RlIGlzIHJlYWR5IHRvIGJlIHB1Ymxpc2hlZCB0b28u
CiAgICAgICAgIExvY2tIb2xkZXIgaG9sZGVyKG1fY29kZUJsb2NrLT5tX2xvY2spOworCiAgICAg
ICAgIG1fY29kZUJsb2NrLT5tX29tZ0NhbGxlZXNbbV9mdW5jdGlvbkluZGV4XSA9IGNhbGxlZS5j
b3B5UmVmKCk7Ci0gICAgICAgIHsKLSAgICAgICAgICAgIGlmIChCQlFDYWxsZWUqIGJicUNhbGxl
ZSA9IG1fY29kZUJsb2NrLT5tX2JicUNhbGxlZXNbbV9mdW5jdGlvbkluZGV4XS5nZXQoKSkgewot
ICAgICAgICAgICAgICAgIGF1dG8gbG9ja2VyID0gaG9sZExvY2soYmJxQ2FsbGVlLT50aWVyVXBD
b3VudCgpLT5nZXRMb2NrKCkpOwotICAgICAgICAgICAgICAgIGJicUNhbGxlZS0+c2V0UmVwbGFj
ZW1lbnQoY2FsbGVlLmNvcHlSZWYoKSk7Ci0gICAgICAgICAgICAgICAgYmJxQ2FsbGVlLT50aWVy
VXBDb3VudCgpLT5tX2NvbXBpbGF0aW9uU3RhdHVzRm9yT01HID0gVGllclVwQ291bnQ6OkNvbXBp
bGF0aW9uU3RhdHVzOjpDb21waWxlZDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmICht
X2NvZGVCbG9jay0+bV9sbGludENhbGxlZXMpIHsKLSAgICAgICAgICAgICAgICBMTEludENhbGxl
ZSYgbGxpbnRDYWxsZWUgPSBtX2NvZGVCbG9jay0+bV9sbGludENhbGxlZXMtPmF0KG1fZnVuY3Rp
b25JbmRleCkuZ2V0KCk7Ci0gICAgICAgICAgICAgICAgYXV0byBsb2NrZXIgPSBob2xkTG9jayhs
bGludENhbGxlZS50aWVyVXBDb3VudGVyKCkubV9sb2NrKTsKLSAgICAgICAgICAgICAgICBsbGlu
dENhbGxlZS5zZXRSZXBsYWNlbWVudChjYWxsZWUuY29weVJlZigpKTsKLSAgICAgICAgICAgICAg
ICBsbGludENhbGxlZS50aWVyVXBDb3VudGVyKCkubV9jb21waWxhdGlvblN0YXR1cyA9IExMSW50
VGllclVwQ291bnRlcjo6Q29tcGlsYXRpb25TdGF0dXM6OkNvbXBpbGVkOwotICAgICAgICAgICAg
fQotICAgICAgICB9CisKICAgICAgICAgZm9yIChhdXRvJiBjYWxsIDogY2FsbGVlLT53YXNtVG9X
YXNtQ2FsbHNpdGVzKCkpIHsKICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxXYXNt
RW50cnlQdHJUYWc+IGVudHJ5cG9pbnQ7CiAgICAgICAgICAgICBpZiAoY2FsbC5mdW5jdGlvbklu
ZGV4U3BhY2UgPCBtX21vZHVsZS0+bW9kdWxlSW5mb3JtYXRpb24oKS5pbXBvcnRGdW5jdGlvbkNv
dW50KCkpCkBAIC0xMzcsNDIgKzEyNiwyMCBAQCB2b2lkIE9NR1BsYW46OndvcmsoQ29tcGlsYXRp
b25FZmZvcnQpCiAKICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpyZXBhdGNoTmVhckNhbGwo
Y2FsbC5jYWxsTG9jYXRpb24sIENvZGVMb2NhdGlvbkxhYmVsPFdhc21FbnRyeVB0clRhZz4oZW50
cnlwb2ludCkpOwogICAgICAgICB9Ci0gICAgfQotCi0gICAgLy8gSXQncyBpbXBvcnRhbnQgdG8g
bWFrZSBzdXJlIHdlIGRvIHRoaXMgYmVmb3JlIHdlIG1ha2UgYW55IG9mIHRoZSBjb2RlIHdlIGp1
c3QgY29tcGlsZWQgdmlzaWJsZS4gSWYgd2UgZGlkbid0LCB3ZSBjb3VsZCBlbmQgdXAKLSAgICAv
LyB3aGVyZSB3ZSBhcmUgdGllcmluZyB1cCBzb21lIGZ1bmN0aW9uIEEgdG8gQScgYW5kIHdlIHJl
cGF0Y2ggc29tZSBmdW5jdGlvbiBCIHRvIGNhbGwgQScgaW5zdGVhZCBvZiBBLiBBbm90aGVyIENQ
VSBjb3VsZCBzZWUKLSAgICAvLyB0aGUgdXBkYXRlcyB0byBCIGJ1dCBzdGlsbCBub3QgaGF2ZSBy
ZXNldCBpdHMgY2FjaGUgb2YgQScsIHdoaWNoIHdvdWxkIGxlYWQgdG8gYWxsIGtpbmRzIG9mIGJh
ZG5lc3MuCi0gICAgcmVzZXRJbnN0cnVjdGlvbkNhY2hlT25BbGxUaHJlYWRzKCk7Ci0gICAgV1RG
OjpzdG9yZVN0b3JlRmVuY2UoKTsgLy8gVGhpcyBwcm9iYWJseSBpc24ndCBuZWNlc3NhcnkgYnV0
IGl0J3MgZ29vZCB0byBiZSBwYXJhbm9pZC4KIAotICAgIG1fY29kZUJsb2NrLT5tX3dhc21JbmRp
cmVjdENhbGxFbnRyeVBvaW50c1ttX2Z1bmN0aW9uSW5kZXhdID0gZW50cnlwb2ludDsKLSAgICB7
Ci0gICAgICAgIExvY2tIb2xkZXIgaG9sZGVyKG1fY29kZUJsb2NrLT5tX2xvY2spOworICAgICAg
ICBQbGFuOjp1cGRhdGVDYWxsU2l0ZXNUb0NhbGxVcyhtX2NvZGVCbG9jaywgQ29kZUxvY2F0aW9u
TGFiZWw8V2FzbUVudHJ5UHRyVGFnPihlbnRyeXBvaW50KSwgbV9mdW5jdGlvbkluZGV4LCBmdW5j
dGlvbkluZGV4U3BhY2UpOwogCi0gICAgICAgIGF1dG8gcmVwYXRjaENhbGxzID0gWyZdIChjb25z
dCBWZWN0b3I8VW5saW5rZWRXYXNtVG9XYXNtQ2FsbD4mIGNhbGxzaXRlcykgewotICAgICAgICAg
ICAgZm9yIChhdXRvJiBjYWxsIDogY2FsbHNpdGVzKSB7Ci0gICAgICAgICAgICAgICAgZGF0YUxv
Z0xuSWYoV2FzbU9NR1BsYW5JbnRlcm5hbDo6dmVyYm9zZSwgIkNvbnNpZGVyaW5nIHJlcGF0Y2hp
bmcgY2FsbCBhdDogIiwgUmF3UG9pbnRlcihjYWxsLmNhbGxMb2NhdGlvbi5kYXRhTG9jYXRpb24o
KSksICIgdGhhdCB0YXJnZXRzICIsIGNhbGwuZnVuY3Rpb25JbmRleFNwYWNlKTsKLSAgICAgICAg
ICAgICAgICBpZiAoY2FsbC5mdW5jdGlvbkluZGV4U3BhY2UgPT0gZnVuY3Rpb25JbmRleFNwYWNl
KSB7Ci0gICAgICAgICAgICAgICAgICAgIGRhdGFMb2dMbklmKFdhc21PTUdQbGFuSW50ZXJuYWw6
OnZlcmJvc2UsICJSZXBhdGNoaW5nIGNhbGwgYXQ6ICIsIFJhd1BvaW50ZXIoY2FsbC5jYWxsTG9j
YXRpb24uZGF0YUxvY2F0aW9uKCkpLCAiIHRvICIsIFJhd1BvaW50ZXIoZW50cnlwb2ludC5leGVj
dXRhYmxlQWRkcmVzcygpKSk7Ci0gICAgICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpy
ZXBhdGNoTmVhckNhbGwoY2FsbC5jYWxsTG9jYXRpb24sIENvZGVMb2NhdGlvbkxhYmVsPFdhc21F
bnRyeVB0clRhZz4oZW50cnlwb2ludCkpOwotICAgICAgICAgICAgICAgIH0KKyAgICAgICAgewor
ICAgICAgICAgICAgaWYgKEJCUUNhbGxlZSogYmJxQ2FsbGVlID0gbV9jb2RlQmxvY2stPm1fYmJx
Q2FsbGVlc1ttX2Z1bmN0aW9uSW5kZXhdLmdldCgpKSB7CisgICAgICAgICAgICAgICAgYXV0byBs
b2NrZXIgPSBob2xkTG9jayhiYnFDYWxsZWUtPnRpZXJVcENvdW50KCktPmdldExvY2soKSk7Cisg
ICAgICAgICAgICAgICAgYmJxQ2FsbGVlLT5zZXRSZXBsYWNlbWVudChjYWxsZWUuY29weVJlZigp
KTsKKyAgICAgICAgICAgICAgICBiYnFDYWxsZWUtPnRpZXJVcENvdW50KCktPm1fY29tcGlsYXRp
b25TdGF0dXNGb3JPTUcgPSBUaWVyVXBDb3VudDo6Q29tcGlsYXRpb25TdGF0dXM6OkNvbXBpbGVk
OwogICAgICAgICAgICAgfQotICAgICAgICB9OwotCi0gICAgICAgIGZvciAodW5zaWduZWQgaSA9
IDA7IGkgPCBtX2NvZGVCbG9jay0+bV93YXNtVG9XYXNtQ2FsbHNpdGVzLnNpemUoKTsgKytpKSB7
Ci0gICAgICAgICAgICByZXBhdGNoQ2FsbHMobV9jb2RlQmxvY2stPm1fd2FzbVRvV2FzbUNhbGxz
aXRlc1tpXSk7CiAgICAgICAgICAgICBpZiAobV9jb2RlQmxvY2stPm1fbGxpbnRDYWxsZWVzKSB7
Ci0gICAgICAgICAgICAgICAgTExJbnRDYWxsZWUmIGxsaW50Q2FsbGVlID0gbV9jb2RlQmxvY2st
Pm1fbGxpbnRDYWxsZWVzLT5hdChpKS5nZXQoKTsKLSAgICAgICAgICAgICAgICBpZiAoSklUQ2Fs
bGVlKiByZXBsYWNlbWVudENhbGxlZSA9IGxsaW50Q2FsbGVlLnJlcGxhY2VtZW50KCkpCi0gICAg
ICAgICAgICAgICAgICAgIHJlcGF0Y2hDYWxscyhyZXBsYWNlbWVudENhbGxlZS0+d2FzbVRvV2Fz
bUNhbGxzaXRlcygpKTsKLSAgICAgICAgICAgICAgICBpZiAoT01HRm9yT1NSRW50cnlDYWxsZWUq
IG9zckVudHJ5Q2FsbGVlID0gbGxpbnRDYWxsZWUub3NyRW50cnlDYWxsZWUoKSkKLSAgICAgICAg
ICAgICAgICAgICAgcmVwYXRjaENhbGxzKG9zckVudHJ5Q2FsbGVlLT53YXNtVG9XYXNtQ2FsbHNp
dGVzKCkpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKEJCUUNhbGxlZSogYmJxQ2Fs
bGVlID0gbV9jb2RlQmxvY2stPm1fYmJxQ2FsbGVlc1tpXS5nZXQoKSkgewotICAgICAgICAgICAg
ICAgIGlmIChPTUdDYWxsZWUqIHJlcGxhY2VtZW50Q2FsbGVlID0gYmJxQ2FsbGVlLT5yZXBsYWNl
bWVudCgpKQotICAgICAgICAgICAgICAgICAgICByZXBhdGNoQ2FsbHMocmVwbGFjZW1lbnRDYWxs
ZWUtPndhc21Ub1dhc21DYWxsc2l0ZXMoKSk7Ci0gICAgICAgICAgICAgICAgaWYgKE9NR0Zvck9T
UkVudHJ5Q2FsbGVlKiBvc3JFbnRyeUNhbGxlZSA9IGJicUNhbGxlZS0+b3NyRW50cnlDYWxsZWUo
KSkKLSAgICAgICAgICAgICAgICAgICAgcmVwYXRjaENhbGxzKG9zckVudHJ5Q2FsbGVlLT53YXNt
VG9XYXNtQ2FsbHNpdGVzKCkpOworICAgICAgICAgICAgICAgIExMSW50Q2FsbGVlJiBsbGludENh
bGxlZSA9IG1fY29kZUJsb2NrLT5tX2xsaW50Q2FsbGVlcy0+YXQobV9mdW5jdGlvbkluZGV4KS5n
ZXQoKTsKKyAgICAgICAgICAgICAgICBhdXRvIGxvY2tlciA9IGhvbGRMb2NrKGxsaW50Q2FsbGVl
LnRpZXJVcENvdW50ZXIoKS5tX2xvY2spOworICAgICAgICAgICAgICAgIGxsaW50Q2FsbGVlLnNl
dFJlcGxhY2VtZW50KGNhbGxlZS5jb3B5UmVmKCkpOworICAgICAgICAgICAgICAgIGxsaW50Q2Fs
bGVlLnRpZXJVcENvdW50ZXIoKS5tX2NvbXBpbGF0aW9uU3RhdHVzID0gTExJbnRUaWVyVXBDb3Vu
dGVyOjpDb21waWxhdGlvblN0YXR1czo6Q29tcGlsZWQ7CiAgICAgICAgICAgICB9CiAgICAgICAg
IH0KICAgICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtUGxhbi5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVBsYW4uY3BwCShy
ZXZpc2lvbiAyNTg5OTYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtUGxhbi5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAy
MDE2LTIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChD
KSAyMDE2LTIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCkBAIC0xMjksNiArMTI5LDcxIEBAIHZvaWQgUGxhbjo6ZmFpbChj
b25zdCBBYnN0cmFjdExvY2tlciYgbG8KICAgICBjb21wbGV0ZShsb2NrZXIpOwogfQogCit2b2lk
IFBsYW46OnVwZGF0ZUNhbGxTaXRlc1RvQ2FsbFVzKENvZGVCbG9jayYgY29kZUJsb2NrLCBDb2Rl
TG9jYXRpb25MYWJlbDxXYXNtRW50cnlQdHJUYWc+IGVudHJ5cG9pbnQsIHVpbnQzMl90IGZ1bmN0
aW9uSW5kZXgsIHVpbnQzMl90IGZ1bmN0aW9uSW5kZXhTcGFjZSkKK3sKKyAgICBIYXNoTWFwPHZv
aWQqLCBDb2RlTG9jYXRpb25MYWJlbDxXYXNtRW50cnlQdHJUYWc+PiBzdGFnZWRDYWxsczsKKyAg
ICBhdXRvIHN0YWdlUmVwYXRjaCA9IFsmXSAoY29uc3QgVmVjdG9yPFVubGlua2VkV2FzbVRvV2Fz
bUNhbGw+JiBjYWxsc2l0ZXMpIHsKKyAgICAgICAgZm9yIChhdXRvJiBjYWxsIDogY2FsbHNpdGVz
KSB7CisgICAgICAgICAgICBpZiAoY2FsbC5mdW5jdGlvbkluZGV4U3BhY2UgPT0gZnVuY3Rpb25J
bmRleFNwYWNlKSB7CisgICAgICAgICAgICAgICAgQ29kZUxvY2F0aW9uTGFiZWw8V2FzbUVudHJ5
UHRyVGFnPiB0YXJnZXQgPSBNYWNyb0Fzc2VtYmxlcjo6cHJlcGFyZUZvckF0b21pY1JlcGF0Y2hO
ZWFyQ2FsbENvbmN1cnJlbnRseShjYWxsLmNhbGxMb2NhdGlvbiwgZW50cnlwb2ludCk7CisgICAg
ICAgICAgICAgICAgc3RhZ2VkQ2FsbHMuYWRkKGNhbGwuY2FsbExvY2F0aW9uLmRhdGFMb2NhdGlv
bigpLCB0YXJnZXQpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfTsKKyAgICBmb3Ig
KHVuc2lnbmVkIGkgPSAwOyBpIDwgY29kZUJsb2NrLm1fd2FzbVRvV2FzbUNhbGxzaXRlcy5zaXpl
KCk7ICsraSkgeworICAgICAgICBzdGFnZVJlcGF0Y2goY29kZUJsb2NrLm1fd2FzbVRvV2FzbUNh
bGxzaXRlc1tpXSk7CisgICAgICAgIGlmIChjb2RlQmxvY2subV9sbGludENhbGxlZXMpIHsKKyAg
ICAgICAgICAgIExMSW50Q2FsbGVlJiBsbGludENhbGxlZSA9IGNvZGVCbG9jay5tX2xsaW50Q2Fs
bGVlcy0+YXQoaSkuZ2V0KCk7CisgICAgICAgICAgICBpZiAoSklUQ2FsbGVlKiByZXBsYWNlbWVu
dENhbGxlZSA9IGxsaW50Q2FsbGVlLnJlcGxhY2VtZW50KCkpCisgICAgICAgICAgICAgICAgc3Rh
Z2VSZXBhdGNoKHJlcGxhY2VtZW50Q2FsbGVlLT53YXNtVG9XYXNtQ2FsbHNpdGVzKCkpOworICAg
ICAgICAgICAgaWYgKE9NR0Zvck9TUkVudHJ5Q2FsbGVlKiBvc3JFbnRyeUNhbGxlZSA9IGxsaW50
Q2FsbGVlLm9zckVudHJ5Q2FsbGVlKCkpCisgICAgICAgICAgICAgICAgc3RhZ2VSZXBhdGNoKG9z
ckVudHJ5Q2FsbGVlLT53YXNtVG9XYXNtQ2FsbHNpdGVzKCkpOworICAgICAgICB9CisgICAgICAg
IGlmIChCQlFDYWxsZWUqIGJicUNhbGxlZSA9IGNvZGVCbG9jay5tX2JicUNhbGxlZXNbaV0uZ2V0
KCkpIHsKKyAgICAgICAgICAgIGlmIChPTUdDYWxsZWUqIHJlcGxhY2VtZW50Q2FsbGVlID0gYmJx
Q2FsbGVlLT5yZXBsYWNlbWVudCgpKQorICAgICAgICAgICAgICAgIHN0YWdlUmVwYXRjaChyZXBs
YWNlbWVudENhbGxlZS0+d2FzbVRvV2FzbUNhbGxzaXRlcygpKTsKKyAgICAgICAgICAgIGlmIChP
TUdGb3JPU1JFbnRyeUNhbGxlZSogb3NyRW50cnlDYWxsZWUgPSBiYnFDYWxsZWUtPm9zckVudHJ5
Q2FsbGVlKCkpCisgICAgICAgICAgICAgICAgc3RhZ2VSZXBhdGNoKG9zckVudHJ5Q2FsbGVlLT53
YXNtVG9XYXNtQ2FsbHNpdGVzKCkpOworICAgICAgICB9CisgICAgfQorCisgICAgLy8gSXQncyBp
bXBvcnRhbnQgdG8gbWFrZSBzdXJlIHdlIGRvIHRoaXMgYmVmb3JlIHdlIG1ha2UgYW55IG9mIHRo
ZSBjb2RlIHdlIGp1c3QgY29tcGlsZWQgdmlzaWJsZS4gSWYgd2UgZGlkbid0LCB3ZSBjb3VsZCBl
bmQgdXAKKyAgICAvLyB3aGVyZSB3ZSBhcmUgdGllcmluZyB1cCBzb21lIGZ1bmN0aW9uIEEgdG8g
QScgYW5kIHdlIHJlcGF0Y2ggc29tZSBmdW5jdGlvbiBCIHRvIGNhbGwgQScgaW5zdGVhZCBvZiBB
LiBBbm90aGVyIENQVSBjb3VsZCBzZWUKKyAgICAvLyB0aGUgdXBkYXRlcyB0byBCIGJ1dCBzdGls
bCBub3QgaGF2ZSByZXNldCBpdHMgY2FjaGUgb2YgQScsIHdoaWNoIHdvdWxkIGxlYWQgdG8gYWxs
IGtpbmRzIG9mIGJhZG5lc3MuCisgICAgcmVzZXRJbnN0cnVjdGlvbkNhY2hlT25BbGxUaHJlYWRz
KCk7CisgICAgV1RGOjpzdG9yZVN0b3JlRmVuY2UoKTsgLy8gVGhpcyBwcm9iYWJseSBpc24ndCBu
ZWNlc3NhcnkgYnV0IGl0J3MgZ29vZCB0byBiZSBwYXJhbm9pZC4KKworICAgIGNvZGVCbG9jay5t
X3dhc21JbmRpcmVjdENhbGxFbnRyeVBvaW50c1tmdW5jdGlvbkluZGV4XSA9IGVudHJ5cG9pbnQ7
CisKKyAgICBhdXRvIHJlcGF0Y2hDYWxscyA9IFsmXSAoY29uc3QgVmVjdG9yPFVubGlua2VkV2Fz
bVRvV2FzbUNhbGw+JiBjYWxsc2l0ZXMpIHsKKyAgICAgICAgZm9yIChhdXRvJiBjYWxsIDogY2Fs
bHNpdGVzKSB7CisgICAgICAgICAgICBkYXRhTG9nTG5JZihXYXNtUGxhbkludGVybmFsOjp2ZXJi
b3NlLCAiQ29uc2lkZXJpbmcgcmVwYXRjaGluZyBjYWxsIGF0OiAiLCBSYXdQb2ludGVyKGNhbGwu
Y2FsbExvY2F0aW9uLmRhdGFMb2NhdGlvbigpKSwgIiB0aGF0IHRhcmdldHMgIiwgY2FsbC5mdW5j
dGlvbkluZGV4U3BhY2UpOworICAgICAgICAgICAgaWYgKGNhbGwuZnVuY3Rpb25JbmRleFNwYWNl
ID09IGZ1bmN0aW9uSW5kZXhTcGFjZSkgeworICAgICAgICAgICAgICAgIGRhdGFMb2dMbklmKFdh
c21QbGFuSW50ZXJuYWw6OnZlcmJvc2UsICJSZXBhdGNoaW5nIGNhbGwgYXQ6ICIsIFJhd1BvaW50
ZXIoY2FsbC5jYWxsTG9jYXRpb24uZGF0YUxvY2F0aW9uKCkpLCAiIHRvICIsIFJhd1BvaW50ZXIo
ZW50cnlwb2ludC5leGVjdXRhYmxlQWRkcmVzcygpKSk7CisgICAgICAgICAgICAgICAgTWFjcm9B
c3NlbWJsZXI6OnJlcGF0Y2hOZWFyQ2FsbChjYWxsLmNhbGxMb2NhdGlvbiwgc3RhZ2VkQ2FsbHMu
Z2V0KGNhbGwuY2FsbExvY2F0aW9uLmRhdGFMb2NhdGlvbigpKSk7CisgICAgICAgICAgICB9Cisg
ICAgICAgIH0KKyAgICB9OworCisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGNvZGVCbG9j
ay5tX3dhc21Ub1dhc21DYWxsc2l0ZXMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgcmVwYXRjaENh
bGxzKGNvZGVCbG9jay5tX3dhc21Ub1dhc21DYWxsc2l0ZXNbaV0pOworICAgICAgICBpZiAoY29k
ZUJsb2NrLm1fbGxpbnRDYWxsZWVzKSB7CisgICAgICAgICAgICBMTEludENhbGxlZSYgbGxpbnRD
YWxsZWUgPSBjb2RlQmxvY2subV9sbGludENhbGxlZXMtPmF0KGkpLmdldCgpOworICAgICAgICAg
ICAgaWYgKEpJVENhbGxlZSogcmVwbGFjZW1lbnRDYWxsZWUgPSBsbGludENhbGxlZS5yZXBsYWNl
bWVudCgpKQorICAgICAgICAgICAgICAgIHJlcGF0Y2hDYWxscyhyZXBsYWNlbWVudENhbGxlZS0+
d2FzbVRvV2FzbUNhbGxzaXRlcygpKTsKKyAgICAgICAgICAgIGlmIChPTUdGb3JPU1JFbnRyeUNh
bGxlZSogb3NyRW50cnlDYWxsZWUgPSBsbGludENhbGxlZS5vc3JFbnRyeUNhbGxlZSgpKQorICAg
ICAgICAgICAgICAgIHJlcGF0Y2hDYWxscyhvc3JFbnRyeUNhbGxlZS0+d2FzbVRvV2FzbUNhbGxz
aXRlcygpKTsKKyAgICAgICAgfQorICAgICAgICBpZiAoQkJRQ2FsbGVlKiBiYnFDYWxsZWUgPSBj
b2RlQmxvY2subV9iYnFDYWxsZWVzW2ldLmdldCgpKSB7CisgICAgICAgICAgICBpZiAoT01HQ2Fs
bGVlKiByZXBsYWNlbWVudENhbGxlZSA9IGJicUNhbGxlZS0+cmVwbGFjZW1lbnQoKSkKKyAgICAg
ICAgICAgICAgICByZXBhdGNoQ2FsbHMocmVwbGFjZW1lbnRDYWxsZWUtPndhc21Ub1dhc21DYWxs
c2l0ZXMoKSk7CisgICAgICAgICAgICBpZiAoT01HRm9yT1NSRW50cnlDYWxsZWUqIG9zckVudHJ5
Q2FsbGVlID0gYmJxQ2FsbGVlLT5vc3JFbnRyeUNhbGxlZSgpKQorICAgICAgICAgICAgICAgIHJl
cGF0Y2hDYWxscyhvc3JFbnRyeUNhbGxlZS0+d2FzbVRvV2FzbUNhbGxzaXRlcygpKTsKKyAgICAg
ICAgfQorICAgIH0KKworfQorCiBQbGFuOjp+UGxhbigpIHsgfQogCiB9IH0gLy8gbmFtZXNwYWNl
IEpTQzo6V2FzbQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVBsYW4uaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtUGxhbi5oCShyZXZp
c2lvbiAyNTg5OTYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtUGxhbi5oCSh3
b3JraW5nIGNvcHkpCkBAIC04Myw2ICs4Myw4IEBAIHByb3RlY3RlZDoKICAgICB2aXJ0dWFsIGJv
b2wgaXNDb21wbGV0ZSgpIGNvbnN0ID0gMDsKICAgICB2aXJ0dWFsIHZvaWQgY29tcGxldGUoY29u
c3QgQWJzdHJhY3RMb2NrZXImKSA9IDA7CiAKKyAgICBzdGF0aWMgdm9pZCB1cGRhdGVDYWxsU2l0
ZXNUb0NhbGxVcyhDb2RlQmxvY2smLCBDb2RlTG9jYXRpb25MYWJlbDxXYXNtRW50cnlQdHJUYWc+
IGVudHJ5cG9pbnQsIHVpbnQzMl90IGZ1bmN0aW9uSW5kZXgsIHVpbnQzMl90IGZ1bmN0aW9uSW5k
ZXhTcGFjZSk7CisKICAgICBSZWY8TW9kdWxlSW5mb3JtYXRpb24+IG1fbW9kdWxlSW5mb3JtYXRp
b247CiAKICAgICBWZWN0b3I8c3RkOjpwYWlyPENvbnRleHQqLCBDb21wbGV0aW9uVGFzaz4sIDE+
IG1fY29tcGxldGlvblRhc2tzOwpJbmRleDogU291cmNlL1dURi9DaGFuZ2VMb2cKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dURi9DaGFuZ2VMb2cJKHJldmlzaW9uIDI1ODk5NikKKysrIFNvdXJjZS9X
VEYvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMzYgQEAKKzIwMjAtMDMtMjUg
IFNhYW0gQmFyYXRpICA8c2JhcmF0aUBhcHBsZS5jb20+CisKKyAgICAgICAgSW1wbGVtZW50IDFH
QiBvZiBleGVjdXRhYmxlIG1lbW9yeSBvbiBhcm02NAorICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjA4NDkwCisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS82
MDc5NzEyNz4KKworICAgICAgICBSZXZpZXdlZCBieSBLZWl0aCBNaWxsZXIuCisKKyAgICAgICAg
KiB3dGYvTWV0YUFsbG9jYXRvci5jcHA6CisgICAgICAgIChXVEY6Ok1ldGFBbGxvY2F0b3JUcmFj
a2VyOjpub3RpZnkpOgorICAgICAgICAoV1RGOjpNZXRhQWxsb2NhdG9yVHJhY2tlcjo6cmVsZWFz
ZSk6CisgICAgICAgIChXVEY6Ok1ldGFBbGxvY2F0b3I6OnJlbGVhc2UpOgorICAgICAgICAoV1RG
OjpNZXRhQWxsb2NhdG9ySGFuZGxlOjpNZXRhQWxsb2NhdG9ySGFuZGxlKToKKyAgICAgICAgKFdU
Rjo6TWV0YUFsbG9jYXRvckhhbmRsZTo6fk1ldGFBbGxvY2F0b3JIYW5kbGUpOgorICAgICAgICAo
V1RGOjpNZXRhQWxsb2NhdG9ySGFuZGxlOjpzaHJpbmspOgorICAgICAgICAoV1RGOjpNZXRhQWxs
b2NhdG9yOjpNZXRhQWxsb2NhdG9yKToKKyAgICAgICAgKFdURjo6TWV0YUFsbG9jYXRvcjo6YWxs
b2NhdGUpOgorICAgICAgICAoV1RGOjpNZXRhQWxsb2NhdG9yOjpjdXJyZW50U3RhdGlzdGljcyk6
CisgICAgICAgICogd3RmL01ldGFBbGxvY2F0b3IuaDoKKyAgICAgICAgKFdURjo6TWV0YUFsbG9j
YXRvclRyYWNrZXI6OmZpbmQpOgorICAgICAgICAoV1RGOjpNZXRhQWxsb2NhdG9yOjphbGxvY2F0
ZSk6CisgICAgICAgIChXVEY6Ok1ldGFBbGxvY2F0b3I6OmN1cnJlbnRTdGF0aXN0aWNzKToKKyAg
ICAgICAgKFdURjo6TWV0YUFsbG9jYXRvcjo6Z2V0TG9jayk6IERlbGV0ZWQuCisgICAgICAgICog
d3RmL01ldGFBbGxvY2F0b3JIYW5kbGUuaDoKKyAgICAgICAgKFdURjo6TWV0YUFsbG9jYXRvckhh
bmRsZTo6YWxsb2NhdG9yKToKKyAgICAgICAgKFdURjo6TWV0YUFsbG9jYXRvckhhbmRsZTo6aXNN
YW5hZ2VkKTogRGVsZXRlZC4KKyAgICAgICAgKFdURjo6TWV0YUFsbG9jYXRvckhhbmRsZTo6b3du
ZXJVSUQpOiBEZWxldGVkLgorICAgICAgICAqIHd0Zi9QbGF0Zm9ybUVuYWJsZS5oOgorICAgICAg
ICAqIHd0Zi9SZWRCbGFja1RyZWUuaDoKKyAgICAgICAgKiB3dGYvU3RkTGliRXh0cmFzLmg6Cisg
ICAgICAgIChXVEY6OmNvbnN0cnVjdEZpeGVkU2l6ZUFycmF5V2l0aEFyZ3VtZW50c0ltcGwpOgor
ICAgICAgICAoV1RGOjpjb25zdHJ1Y3RGaXhlZFNpemVBcnJheVdpdGhBcmd1bWVudHMpOgorCiAy
MDIwLTAzLTI0ICBQZXIgQXJuZSBWb2xsYW4gIDxwdm9sbGFuQGFwcGxlLmNvbT4KIAogICAgICAg
ICBbQ29jb2FdIEZpeCBsYXVuY2ggdGltZSByZWdyZXNzaW9uIHdpdGggQ0YgcHJlZnMgZGlyZWN0
IG1vZGUgZW5hYmxlZApJbmRleDogU291cmNlL1dURi93dGYvTWV0YUFsbG9jYXRvci5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dURi93dGYvTWV0YUFsbG9jYXRvci5jcHAJKHJldmlzaW9uIDI1
ODk5NikKKysrIFNvdXJjZS9XVEYvd3RmL01ldGFBbGxvY2F0b3IuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMS0yMDE4IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMS0yMDIwIEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwpAQCAtNTQsMjIgKzU0LDIxIEBAIE1ldGFBbGxvY2F0b3I6On5NZXRhQWxsb2NhdG9yKCkKICNl
bmRpZgogfQogCi12b2lkIE1ldGFBbGxvY2F0b3JUcmFja2VyOjpub3RpZnkoTWV0YUFsbG9jYXRv
ckhhbmRsZSogaGFuZGxlKQordm9pZCBNZXRhQWxsb2NhdG9yVHJhY2tlcjo6bm90aWZ5KE1ldGFB
bGxvY2F0b3JIYW5kbGUmIGhhbmRsZSkKIHsKLSAgICBtX2FsbG9jYXRpb25zLmluc2VydChoYW5k
bGUpOworICAgIG1fYWxsb2NhdGlvbnMuaW5zZXJ0KCZoYW5kbGUpOwogfQogCi12b2lkIE1ldGFB
bGxvY2F0b3JUcmFja2VyOjpyZWxlYXNlKE1ldGFBbGxvY2F0b3JIYW5kbGUqIGhhbmRsZSkKK3Zv
aWQgTWV0YUFsbG9jYXRvclRyYWNrZXI6OnJlbGVhc2UoTWV0YUFsbG9jYXRvckhhbmRsZSYgaGFu
ZGxlKQogewotICAgIG1fYWxsb2NhdGlvbnMucmVtb3ZlKGhhbmRsZSk7CisgICAgbV9hbGxvY2F0
aW9ucy5yZW1vdmUoJmhhbmRsZSk7CiB9CiAKLUFMV0FZU19JTkxJTkUgdm9pZCBNZXRhQWxsb2Nh
dG9yOjpyZWxlYXNlKE1ldGFBbGxvY2F0b3JIYW5kbGUqIGhhbmRsZSkKK3ZvaWQgTWV0YUFsbG9j
YXRvcjo6cmVsZWFzZShjb25zdCBMb2NrSG9sZGVyJiwgTWV0YUFsbG9jYXRvckhhbmRsZSYgaGFu
ZGxlKQogewotICAgIExvY2tIb2xkZXIgbG9ja2VyKCZtX2xvY2spOwotICAgIGlmIChoYW5kbGUt
PnNpemVJbkJ5dGVzKCkpIHsKLSAgICAgICAgdm9pZCogc3RhcnQgPSBoYW5kbGUtPnN0YXJ0KCku
dW50YWdnZWRQdHIoKTsKLSAgICAgICAgc2l6ZV90IHNpemVJbkJ5dGVzID0gaGFuZGxlLT5zaXpl
SW5CeXRlcygpOworICAgIGlmIChoYW5kbGUuc2l6ZUluQnl0ZXMoKSkgeworICAgICAgICB2b2lk
KiBzdGFydCA9IGhhbmRsZS5zdGFydCgpLnVudGFnZ2VkUHRyKCk7CisgICAgICAgIHNpemVfdCBz
aXplSW5CeXRlcyA9IGhhbmRsZS5zaXplSW5CeXRlcygpOwogICAgICAgICBkZWNyZW1lbnRQYWdl
T2NjdXBhbmN5KHN0YXJ0LCBzaXplSW5CeXRlcyk7CiAgICAgICAgIGFkZEZyZWVTcGFjZUZyb21S
ZWxlYXNlZEhhbmRsZShGcmVlU3BhY2VQdHIoc3RhcnQpLCBzaXplSW5CeXRlcyk7CiAgICAgfQpA
QCAtNzgsMjEgKzc3LDE5IEBAIEFMV0FZU19JTkxJTkUgdm9pZCBNZXRhQWxsb2NhdG9yOjpyZWxl
YXMKICAgICAgICAgbV90cmFja2VyLT5yZWxlYXNlKGhhbmRsZSk7CiB9CiAKLU1ldGFBbGxvY2F0
b3JIYW5kbGU6Ok1ldGFBbGxvY2F0b3JIYW5kbGUoTWV0YUFsbG9jYXRvciogYWxsb2NhdG9yLCB2
b2lkKiBzdGFydCwgc2l6ZV90IHNpemVJbkJ5dGVzLCB2b2lkKiBvd25lclVJRCkKK01ldGFBbGxv
Y2F0b3JIYW5kbGU6Ok1ldGFBbGxvY2F0b3JIYW5kbGUoTWV0YUFsbG9jYXRvciYgYWxsb2NhdG9y
LCB2b2lkKiBzdGFydCwgc2l6ZV90IHNpemVJbkJ5dGVzKQogICAgIDogbV9hbGxvY2F0b3IoYWxs
b2NhdG9yKQogICAgICwgbV9zdGFydChzdGFydCkKICAgICAsIG1fZW5kKHJlaW50ZXJwcmV0X2Nh
c3Q8Y2hhcio+KHN0YXJ0KSArIHNpemVJbkJ5dGVzKQotICAgICwgbV9vd25lclVJRChvd25lclVJ
RCkKIHsKLSAgICBBU1NFUlQoYWxsb2NhdG9yKTsKICAgICBBU1NFUlQoc3RhcnQpOwogICAgIEFT
U0VSVChzaXplSW5CeXRlcyk7CiB9CiAKIE1ldGFBbGxvY2F0b3JIYW5kbGU6On5NZXRhQWxsb2Nh
dG9ySGFuZGxlKCkKIHsKLSAgICBBU1NFUlQobV9hbGxvY2F0b3IpOwotICAgIG1fYWxsb2NhdG9y
LT5yZWxlYXNlKHRoaXMpOworICAgIGF1dG8gbG9ja2VyID0gaG9sZExvY2soYWxsb2NhdG9yKCku
bV9sb2NrKTsKKyAgICBhbGxvY2F0b3IoKS5yZWxlYXNlKGxvY2tlciwgKnRoaXMpOwogfQogCiB2
b2lkIE1ldGFBbGxvY2F0b3JIYW5kbGU6OnNocmluayhzaXplX3QgbmV3U2l6ZUluQnl0ZXMpCkBA
IC0xMDAsOSArOTcsMTAgQEAgdm9pZCBNZXRhQWxsb2NhdG9ySGFuZGxlOjpzaHJpbmsoc2l6ZV90
IAogICAgIHNpemVfdCBzaXplSW5CeXRlcyA9IHRoaXMtPnNpemVJbkJ5dGVzKCk7CiAgICAgQVNT
RVJUKG5ld1NpemVJbkJ5dGVzIDw9IHNpemVJbkJ5dGVzKTsKIAotICAgIExvY2tIb2xkZXIgbG9j
a2VyKCZtX2FsbG9jYXRvci0+bV9sb2NrKTsKKyAgICBNZXRhQWxsb2NhdG9yJiBhbGxvY2F0b3Ig
PSB0aGlzLT5hbGxvY2F0b3IoKTsKKyAgICBMb2NrSG9sZGVyIGxvY2tlcigmYWxsb2NhdG9yLm1f
bG9jayk7CiAKLSAgICBuZXdTaXplSW5CeXRlcyA9IG1fYWxsb2NhdG9yLT5yb3VuZFVwKG5ld1Np
emVJbkJ5dGVzKTsKKyAgICBuZXdTaXplSW5CeXRlcyA9IGFsbG9jYXRvci5yb3VuZFVwKG5ld1Np
emVJbkJ5dGVzKTsKICAgICAKICAgICBBU1NFUlQobmV3U2l6ZUluQnl0ZXMgPD0gc2l6ZUluQnl0
ZXMpOwogCkBAIC0xMTMsMTEgKzExMSwxMSBAQCB2b2lkIE1ldGFBbGxvY2F0b3JIYW5kbGU6OnNo
cmluayhzaXplX3QgCiAgICAgc2l6ZV90IGZyZWVTaXplID0gc2l6ZUluQnl0ZXMgLSBuZXdTaXpl
SW5CeXRlczsKICAgICB1aW50cHRyX3QgZnJlZUVuZCA9IGZyZWVTdGFydCArIGZyZWVTaXplOwog
ICAgIAotICAgIHVpbnRwdHJfdCBmaXJzdENvbXBsZXRlbHlGcmVlUGFnZSA9IChmcmVlU3RhcnQg
KyBtX2FsbG9jYXRvci0+bV9wYWdlU2l6ZSAtIDEpICYgfihtX2FsbG9jYXRvci0+bV9wYWdlU2l6
ZSAtIDEpOworICAgIHVpbnRwdHJfdCBmaXJzdENvbXBsZXRlbHlGcmVlUGFnZSA9IChmcmVlU3Rh
cnQgKyBhbGxvY2F0b3IubV9wYWdlU2l6ZSAtIDEpICYgfihhbGxvY2F0b3IubV9wYWdlU2l6ZSAt
IDEpOwogICAgIGlmIChmaXJzdENvbXBsZXRlbHlGcmVlUGFnZSA8IGZyZWVFbmQpCi0gICAgICAg
IG1fYWxsb2NhdG9yLT5kZWNyZW1lbnRQYWdlT2NjdXBhbmN5KHJlaW50ZXJwcmV0X2Nhc3Q8dm9p
ZCo+KGZpcnN0Q29tcGxldGVseUZyZWVQYWdlKSwgZnJlZVNpemUgLSAoZmlyc3RDb21wbGV0ZWx5
RnJlZVBhZ2UgLSBmcmVlU3RhcnQpKTsKKyAgICAgICAgYWxsb2NhdG9yLmRlY3JlbWVudFBhZ2VP
Y2N1cGFuY3kocmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oZmlyc3RDb21wbGV0ZWx5RnJlZVBhZ2Up
LCBmcmVlU2l6ZSAtIChmaXJzdENvbXBsZXRlbHlGcmVlUGFnZSAtIGZyZWVTdGFydCkpOwogCi0g
ICAgbV9hbGxvY2F0b3ItPmFkZEZyZWVTcGFjZUZyb21SZWxlYXNlZEhhbmRsZShNZXRhQWxsb2Nh
dG9yOjpGcmVlU3BhY2VQdHIoZnJlZVN0YXJ0KSwgZnJlZVNpemUpOworICAgIGFsbG9jYXRvci5h
ZGRGcmVlU3BhY2VGcm9tUmVsZWFzZWRIYW5kbGUoTWV0YUFsbG9jYXRvcjo6RnJlZVNwYWNlUHRy
KGZyZWVTdGFydCksIGZyZWVTaXplKTsKIAogICAgIG1fZW5kID0gbV9zdGFydCArIG5ld1NpemVJ
bkJ5dGVzOwogfQpAQCAtMTI3LDEzICsxMjUsMTMgQEAgdm9pZCBNZXRhQWxsb2NhdG9ySGFuZGxl
OjpkdW1wKFByaW50U3RyZQogICAgIG91dC5wcmludChSYXdQb2ludGVyKHN0YXJ0KCkudW50YWdn
ZWRQdHIoKSksICIuLi4iLCBSYXdQb2ludGVyKGVuZCgpLnVudGFnZ2VkUHRyKCkpKTsKIH0KIAot
TWV0YUFsbG9jYXRvcjo6TWV0YUFsbG9jYXRvcihzaXplX3QgYWxsb2NhdGlvbkdyYW51bGUsIHNp
emVfdCBwYWdlU2l6ZSkKK01ldGFBbGxvY2F0b3I6Ok1ldGFBbGxvY2F0b3IoTG9jayYgbG9jaywg
c2l6ZV90IGFsbG9jYXRpb25HcmFudWxlLCBzaXplX3QgcGFnZVNpemUpCiAgICAgOiBtX2FsbG9j
YXRpb25HcmFudWxlKGFsbG9jYXRpb25HcmFudWxlKQogICAgICwgbV9wYWdlU2l6ZShwYWdlU2l6
ZSkKICAgICAsIG1fYnl0ZXNBbGxvY2F0ZWQoMCkKICAgICAsIG1fYnl0ZXNSZXNlcnZlZCgwKQog
ICAgICwgbV9ieXRlc0NvbW1pdHRlZCgwKQotICAgICwgbV90cmFja2VyKDApCisgICAgLCBtX2xv
Y2sobG9jaykKICNpZm5kZWYgTkRFQlVHCiAgICAgLCBtX21hbGxvY0JhbGFuY2UoMCkKICNlbmRp
ZgpAQCAtMTU3LDEwICsxNTUsOCBAQCBNZXRhQWxsb2NhdG9yOjpNZXRhQWxsb2NhdG9yKHNpemVf
dCBhbGxvCiAgICAgQVNTRVJUKHN0YXRpY19jYXN0PHNpemVfdD4oMSkgPDwgbV9sb2dBbGxvY2F0
aW9uR3JhbnVsZSA9PSBtX2FsbG9jYXRpb25HcmFudWxlKTsKIH0KIAotUmVmUHRyPE1ldGFBbGxv
Y2F0b3JIYW5kbGU+IE1ldGFBbGxvY2F0b3I6OmFsbG9jYXRlKHNpemVfdCBzaXplSW5CeXRlcywg
dm9pZCogb3duZXJVSUQpCitSZWZQdHI8TWV0YUFsbG9jYXRvckhhbmRsZT4gTWV0YUFsbG9jYXRv
cjo6YWxsb2NhdGUoY29uc3QgTG9ja0hvbGRlciYsIHNpemVfdCBzaXplSW5CeXRlcykKIHsKLSAg
ICBMb2NrSG9sZGVyIGxvY2tlcigmbV9sb2NrKTsKLQogICAgIGlmICghc2l6ZUluQnl0ZXMpCiAg
ICAgICAgIHJldHVybiBudWxscHRyOwogICAgIApAQCAtMTk1LDE3ICsxOTEsMTYgQEAgUmVmUHRy
PE1ldGFBbGxvY2F0b3JIYW5kbGU+IE1ldGFBbGxvY2F0bwogICAgIG1fbnVtQWxsb2NhdGlvbnMr
KzsKICNlbmRpZgogCi0gICAgYXV0byBoYW5kbGUgPSBhZG9wdFJlZigqbmV3IE1ldGFBbGxvY2F0
b3JIYW5kbGUodGhpcywgc3RhcnQudW50YWdnZWRQdHIoKSwgc2l6ZUluQnl0ZXMsIG93bmVyVUlE
KSk7CisgICAgYXV0byBoYW5kbGUgPSBhZG9wdFJlZigqbmV3IE1ldGFBbGxvY2F0b3JIYW5kbGUo
KnRoaXMsIHN0YXJ0LnVudGFnZ2VkUHRyKCksIHNpemVJbkJ5dGVzKSk7CiAKICAgICBpZiAoVU5M
SUtFTFkoISFtX3RyYWNrZXIpKQotICAgICAgICBtX3RyYWNrZXItPm5vdGlmeShoYW5kbGUucHRy
KCkpOworICAgICAgICBtX3RyYWNrZXItPm5vdGlmeSgqaGFuZGxlLnB0cigpKTsKIAogICAgIHJl
dHVybiBoYW5kbGU7CiB9CiAKLU1ldGFBbGxvY2F0b3I6OlN0YXRpc3RpY3MgTWV0YUFsbG9jYXRv
cjo6Y3VycmVudFN0YXRpc3RpY3MoKQorTWV0YUFsbG9jYXRvcjo6U3RhdGlzdGljcyBNZXRhQWxs
b2NhdG9yOjpjdXJyZW50U3RhdGlzdGljcyhjb25zdCBMb2NrSG9sZGVyJikKIHsKLSAgICBMb2Nr
SG9sZGVyIGxvY2tlcigmbV9sb2NrKTsKICAgICBTdGF0aXN0aWNzIHJlc3VsdDsKICAgICByZXN1
bHQuYnl0ZXNBbGxvY2F0ZWQgPSBtX2J5dGVzQWxsb2NhdGVkOwogICAgIHJlc3VsdC5ieXRlc1Jl
c2VydmVkID0gbV9ieXRlc1Jlc2VydmVkOwpJbmRleDogU291cmNlL1dURi93dGYvTWV0YUFsbG9j
YXRvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL01ldGFBbGxvY2F0b3IuaAkocmV2
aXNpb24gMjU4OTk2KQorKysgU291cmNlL1dURi93dGYvTWV0YUFsbG9jYXRvci5oCSh3b3JraW5n
IGNvcHkpCkBAIC00NCwxNSArNDQsMTUgQEAgbmFtZXNwYWNlIFdURiB7CiBjbGFzcyBNZXRhQWxs
b2NhdG9yVHJhY2tlciB7CiAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CiBwdWJsaWM6Ci0g
ICAgdm9pZCBub3RpZnkoTWV0YUFsbG9jYXRvckhhbmRsZSopOwotICAgIHZvaWQgcmVsZWFzZShN
ZXRhQWxsb2NhdG9ySGFuZGxlKik7CisgICAgdm9pZCBub3RpZnkoTWV0YUFsbG9jYXRvckhhbmRs
ZSYpOworICAgIHZvaWQgcmVsZWFzZShNZXRhQWxsb2NhdG9ySGFuZGxlJik7CiAKICAgICBNZXRh
QWxsb2NhdG9ySGFuZGxlKiBmaW5kKHZvaWQqIGFkZHJlc3MpCiAgICAgewogICAgICAgICBNZXRh
QWxsb2NhdG9ySGFuZGxlKiBoYW5kbGUgPSBtX2FsbG9jYXRpb25zLmZpbmRHcmVhdGVzdExlc3NU
aGFuT3JFcXVhbChhZGRyZXNzKTsKLSAgICAgICAgaWYgKGhhbmRsZSAmJiBhZGRyZXNzIDwgaGFu
ZGxlLT5lbmQoKS51bnRhZ2dlZFB0cigpKQorICAgICAgICBpZiAoaGFuZGxlICYmIGhhbmRsZS0+
c3RhcnQoKS51bnRhZ2dlZFB0cigpIDw9IGFkZHJlc3MgJiYgYWRkcmVzcyA8IGhhbmRsZS0+ZW5k
KCkudW50YWdnZWRQdHIoKSkKICAgICAgICAgICAgIHJldHVybiBoYW5kbGU7Ci0gICAgICAgIHJl
dHVybiAwOworICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICB9CiAKICAgICBSZWRCbGFja1Ry
ZWU8TWV0YUFsbG9jYXRvckhhbmRsZSwgdm9pZCo+IG1fYWxsb2NhdGlvbnM7CkBAIC02NCwxNyAr
NjQsMjIgQEAgY2xhc3MgTWV0YUFsbG9jYXRvciB7CiBwdWJsaWM6CiAgICAgdXNpbmcgRnJlZVNw
YWNlUHRyID0gTWV0YUFsbG9jYXRvclB0cjxGcmVlU3BhY2VQdHJUYWc+OwogCi0gICAgV1RGX0VY
UE9SVF9QUklWQVRFIE1ldGFBbGxvY2F0b3Ioc2l6ZV90IGFsbG9jYXRpb25HcmFudWxlLCBzaXpl
X3QgcGFnZVNpemUgPSBXVEY6OnBhZ2VTaXplKCkpOworICAgIFdURl9FWFBPUlRfUFJJVkFURSBN
ZXRhQWxsb2NhdG9yKExvY2smLCBzaXplX3QgYWxsb2NhdGlvbkdyYW51bGUsIHNpemVfdCBwYWdl
U2l6ZSA9IFdURjo6cGFnZVNpemUoKSk7CiAgICAgCiAgICAgV1RGX0VYUE9SVF9QUklWQVRFIHZp
cnR1YWwgfk1ldGFBbGxvY2F0b3IoKTsKICAgICAKLSAgICBXVEZfRVhQT1JUX1BSSVZBVEUgUmVm
UHRyPE1ldGFBbGxvY2F0b3JIYW5kbGU+IGFsbG9jYXRlKHNpemVfdCBzaXplSW5CeXRlcywgdm9p
ZCogb3duZXJVSUQpOworICAgIEFMV0FZU19JTkxJTkUgUmVmUHRyPE1ldGFBbGxvY2F0b3JIYW5k
bGU+IGFsbG9jYXRlKHNpemVfdCBzaXplSW5CeXRlcykKKyAgICB7CisgICAgICAgIGF1dG8gbG9j
a2VyID0gaG9sZExvY2sobV9sb2NrKTsKKyAgICAgICAgcmV0dXJuIGFsbG9jYXRlKGxvY2tlciwg
c2l6ZUluQnl0ZXMpOworICAgIH0KKyAgICBXVEZfRVhQT1JUX1BSSVZBVEUgUmVmUHRyPE1ldGFB
bGxvY2F0b3JIYW5kbGU+IGFsbG9jYXRlKGNvbnN0IExvY2tIb2xkZXImLCBzaXplX3Qgc2l6ZUlu
Qnl0ZXMpOwogCiAgICAgdm9pZCB0cmFja0FsbG9jYXRpb25zKE1ldGFBbGxvY2F0b3JUcmFja2Vy
KiB0cmFja2VyKQogICAgIHsKICAgICAgICAgbV90cmFja2VyID0gdHJhY2tlcjsKICAgICB9Ci0g
ICAgCisKICAgICAvLyBOb24tYXRvbWljIG1ldGhvZHMgZm9yIGdldHRpbmcgYWxsb2NhdG9yIHN0
YXRpc3RpY3MuCiAgICAgc2l6ZV90IGJ5dGVzQWxsb2NhdGVkKCkgeyByZXR1cm4gbV9ieXRlc0Fs
bG9jYXRlZDsgfQogICAgIHNpemVfdCBieXRlc1Jlc2VydmVkKCkgeyByZXR1cm4gbV9ieXRlc1Jl
c2VydmVkOyB9CkBAIC04Nyw3ICs5MiwxMiBAQCBwdWJsaWM6CiAgICAgICAgIHNpemVfdCBieXRl
c1Jlc2VydmVkOwogICAgICAgICBzaXplX3QgYnl0ZXNDb21taXR0ZWQ7CiAgICAgfTsKLSAgICBX
VEZfRVhQT1JUX1BSSVZBVEUgU3RhdGlzdGljcyBjdXJyZW50U3RhdGlzdGljcygpOworICAgIFN0
YXRpc3RpY3MgY3VycmVudFN0YXRpc3RpY3MoKQorICAgIHsKKyAgICAgICAgYXV0byBsb2NrZXIg
PSBob2xkTG9jayhtX2xvY2spOworICAgICAgICByZXR1cm4gY3VycmVudFN0YXRpc3RpY3MobG9j
a2VyKTsKKyAgICB9CisgICAgV1RGX0VYUE9SVF9QUklWQVRFIFN0YXRpc3RpY3MgY3VycmVudFN0
YXRpc3RpY3MoY29uc3QgTG9ja0hvbGRlciYpOwogCiAgICAgLy8gQWRkIG1vcmUgZnJlZSBzcGFj
ZSB0byB0aGUgYWxsb2NhdG9yLiBDYWxsIHRoaXMgZGlyZWN0bHkgZnJvbQogICAgIC8vIHRoZSBj
b25zdHJ1Y3RvciBpZiB5b3Ugd2lzaCB0byBvcGVyYXRlIHRoZSBhbGxvY2F0b3Igd2l0aGluIGEK
QEAgLTk4LDcgKzEwOCw2IEBAIHB1YmxpYzoKICAgICAvLyBidWlsZHMuCiAgICAgV1RGX0VYUE9S
VF9QUklWQVRFIHNpemVfdCBkZWJ1Z0ZyZWVTcGFjZVNpemUoKTsKIAotICAgIExvY2smIGdldExv
Y2soKSB7IHJldHVybiBtX2xvY2s7IH0KICAgICBXVEZfRVhQT1JUX1BSSVZBVEUgYm9vbCBpc0lu
QWxsb2NhdGVkTWVtb3J5KGNvbnN0IEFic3RyYWN0TG9ja2VyJiwgdm9pZCogYWRkcmVzcyk7CiAg
ICAgCiAjaWYgRU5BQkxFKE1FVEFfQUxMT0NBVE9SX1BST0ZJTEUpCkBAIC0xMjMsNiArMTMyLDgg
QEAgcHJvdGVjdGVkOgogICAgIC8vIGRlc3RydWN0aW9uLCBpbiBwYXJ0IGJlY2F1c2UgYSBNZXRh
QWxsb2NhdG9yIGNhbm5vdCBkaWUgc28gbG9uZwogICAgIC8vIGFzIHRoZXJlIGFyZSBIYW5kbGVz
IHRoYXQgcmVmZXIgdG8gaXQuCiAKKyAgICAvLyBSZWxlYXNlIGEgTWV0YUFsbG9jYXRvckhhbmRs
ZS4KKyAgICBXVEZfRVhQT1JUX1BSSVZBVEUgdmlydHVhbCB2b2lkIHJlbGVhc2UoY29uc3QgTG9j
a0hvbGRlciYsIE1ldGFBbGxvY2F0b3JIYW5kbGUmKTsKIHByaXZhdGU6CiAgICAgCiAgICAgZnJp
ZW5kIGNsYXNzIE1ldGFBbGxvY2F0b3JIYW5kbGU7CkBAIC0xNTAsOSArMTYxLDYgQEAgcHJpdmF0
ZToKICAgICAgICAgRnJlZVNwYWNlUHRyIG1fZW5kOwogICAgIH07CiAgICAgdHlwZWRlZiBSZWRC
bGFja1RyZWU8RnJlZVNwYWNlTm9kZSwgc2l6ZV90PiBUcmVlOwotCi0gICAgLy8gUmVsZWFzZSBh
IE1ldGFBbGxvY2F0b3JIYW5kbGUuCi0gICAgdm9pZCByZWxlYXNlKE1ldGFBbGxvY2F0b3JIYW5k
bGUqKTsKICAgICAKICAgICAvLyBSZW1vdmUgZnJlZSBzcGFjZSBmcm9tIHRoZSBhbGxvY2F0b3Iu
IFRoaXMgaXMgZWZmZWN0aXZlbHkKICAgICAvLyB0aGUgYWxsb2NhdGUoKSBmdW5jdGlvbiwgZXhj
ZXB0IHRoYXQgaXQgZG9lcyBub3QgbWFyayB0aGUKQEAgLTE5Myw5ICsyMDEsOSBAQCBwcml2YXRl
OgogICAgIHNpemVfdCBtX2J5dGVzUmVzZXJ2ZWQ7CiAgICAgc2l6ZV90IG1fYnl0ZXNDb21taXR0
ZWQ7CiAgICAgCi0gICAgTG9jayBtX2xvY2s7CisgICAgTG9jayYgbV9sb2NrOwogCi0gICAgTWV0
YUFsbG9jYXRvclRyYWNrZXIqIG1fdHJhY2tlcjsKKyAgICBNZXRhQWxsb2NhdG9yVHJhY2tlciog
bV90cmFja2VyIHsgbnVsbHB0ciB9OwogCiAjaWZuZGVmIE5ERUJVRwogICAgIHNpemVfdCBtX21h
bGxvY0JhbGFuY2U7CkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9NZXRhQWxsb2NhdG9ySGFuZGxlLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvTWV0YUFsbG9jYXRvckhhbmRsZS5oCShyZXZp
c2lvbiAyNTg5OTYpCisrKyBTb3VyY2UvV1RGL3d0Zi9NZXRhQWxsb2NhdG9ySGFuZGxlLmgJKHdv
cmtpbmcgY29weSkKQEAgLTQyLDcgKzQyLDcgQEAgREVDTEFSRV9BTExPQ0FUT1JfV0lUSF9IRUFQ
X0lERU5USUZJRVIoTQogY2xhc3MgTWV0YUFsbG9jYXRvckhhbmRsZSA6IHB1YmxpYyBUaHJlYWRT
YWZlUmVmQ291bnRlZDxNZXRhQWxsb2NhdG9ySGFuZGxlPiwgcHVibGljIFJlZEJsYWNrVHJlZTxN
ZXRhQWxsb2NhdG9ySGFuZGxlLCB2b2lkKj46Ok5vZGUgewogICAgIFdURl9NQUtFX0ZBU1RfQUxM
T0NBVEVEX1dJVEhfSEVBUF9JREVOVElGSUVSKE1ldGFBbGxvY2F0b3JIYW5kbGUpOwogcHJpdmF0
ZToKLSAgICBNZXRhQWxsb2NhdG9ySGFuZGxlKE1ldGFBbGxvY2F0b3IqLCB2b2lkKiBzdGFydCwg
c2l6ZV90IHNpemVJbkJ5dGVzLCB2b2lkKiBvd25lclVJRCk7CisgICAgTWV0YUFsbG9jYXRvckhh
bmRsZShNZXRhQWxsb2NhdG9yJiwgdm9pZCogc3RhcnQsIHNpemVfdCBzaXplSW5CeXRlcyk7CiAK
IHB1YmxpYzoKICAgICB1c2luZyBNZW1vcnlQdHIgPSBNZXRhQWxsb2NhdG9yUHRyPEhhbmRsZU1l
bW9yeVB0clRhZz47CkBAIC04NiwyMiArODYsMTEgQEAgcHVibGljOgogICAgICAgICAKICAgICBX
VEZfRVhQT1JUX1BSSVZBVEUgdm9pZCBzaHJpbmsoc2l6ZV90IG5ld1NpemVJbkJ5dGVzKTsKICAg
ICAKLSAgICBib29sIGlzTWFuYWdlZCgpCisgICAgTWV0YUFsbG9jYXRvciYgYWxsb2NhdG9yKCkK
ICAgICB7Ci0gICAgICAgIHJldHVybiAhIW1fYWxsb2NhdG9yOwotICAgIH0KLSAgICAgICAgCi0g
ICAgTWV0YUFsbG9jYXRvciogYWxsb2NhdG9yKCkKLSAgICB7Ci0gICAgICAgIEFTU0VSVChtX2Fs
bG9jYXRvcik7CiAgICAgICAgIHJldHVybiBtX2FsbG9jYXRvcjsKICAgICB9CiAKLSAgICB2b2lk
KiBvd25lclVJRCgpCi0gICAgewotICAgICAgICByZXR1cm4gbV9vd25lclVJRDsKLSAgICB9Ci0K
ICAgICB2b2lkKiBrZXkoKQogICAgIHsKICAgICAgICAgcmV0dXJuIG1fc3RhcnQudW50YWdnZWRQ
dHIoKTsKQEAgLTExMiwxMCArMTAxLDkgQEAgcHVibGljOgogcHJpdmF0ZToKICAgICBmcmllbmQg
Y2xhc3MgTWV0YUFsbG9jYXRvcjsKICAgICAKLSAgICBNZXRhQWxsb2NhdG9yKiBtX2FsbG9jYXRv
cjsKKyAgICBNZXRhQWxsb2NhdG9yJiBtX2FsbG9jYXRvcjsKICAgICBNZW1vcnlQdHIgbV9zdGFy
dDsKICAgICBNZW1vcnlQdHIgbV9lbmQ7Ci0gICAgdm9pZCogbV9vd25lclVJRDsKIH07CiAKIH0K
SW5kZXg6IFNvdXJjZS9XVEYvd3RmL1BsYXRmb3JtRW5hYmxlLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dURi93dGYvUGxhdGZvcm1FbmFibGUuaAkocmV2aXNpb24gMjU4OTk2KQorKysgU291cmNl
L1dURi93dGYvUGxhdGZvcm1FbmFibGUuaAkod29ya2luZyBjb3B5KQpAQCAtODczLDMgKzg3Myw3
IEBACiAjaWYgRU5BQkxFKFdFQkdMMikgJiYgIUVOQUJMRShXRUJHTCkKICNlcnJvciAiRU5BQkxF
KFdFQkdMMikgcmVxdWlyZXMgRU5BQkxFKFdFQkdMKSIKICNlbmRpZgorCisjaWYgQ1BVKEFSTTY0
KSAmJiBDUFUoQUREUkVTUzY0KQorI2RlZmluZSBVU0VfSlVNUF9JU0xBTkRTIDEKKyNlbmRpZgpJ
bmRleDogU291cmNlL1dURi93dGYvUmVkQmxhY2tUcmVlLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dURi93dGYvUmVkQmxhY2tUcmVlLmgJKHJldmlzaW9uIDI1ODk5NikKKysrIFNvdXJjZS9XVEYv
d3RmL1JlZEJsYWNrVHJlZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMCw2ICszMCw3IEBACiAKICNp
bmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgogI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgor
I2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KIAogbmFtZXNwYWNlIFdURiB7CiAKQEAgLTMyNCw2ICsz
MjUsMjYgQEAgcHVibGljOgogICAgICAgICB9CiAgICAgICAgIHJldHVybiBiZXN0OwogICAgIH0K
KworICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBGdW5jdGlvbj4KKyAgICB2b2lkIGl0ZXJhdGUoRnVu
Y3Rpb24gZnVuY3Rpb24pCisgICAgeworICAgICAgICBpZiAoIW1fcm9vdCkKKyAgICAgICAgICAg
IHJldHVybjsKKworICAgICAgICBWZWN0b3I8Tm9kZVR5cGUqLCAxNj4gdG9JdGVyYXRlOworICAg
ICAgICB0b0l0ZXJhdGUuYXBwZW5kKG1fcm9vdCk7CisgICAgICAgIHdoaWxlICh0b0l0ZXJhdGUu
c2l6ZSgpKSB7CisgICAgICAgICAgICBOb2RlVHlwZSYgY3VycmVudCA9ICp0b0l0ZXJhdGUudGFr
ZUxhc3QoKTsKKyAgICAgICAgICAgIGJvb2wgaXRlcmF0ZUxlZnQgPSBmYWxzZTsKKyAgICAgICAg
ICAgIGJvb2wgaXRlcmF0ZVJpZ2h0ID0gZmFsc2U7CisgICAgICAgICAgICBmdW5jdGlvbihjdXJy
ZW50LCBpdGVyYXRlTGVmdCwgaXRlcmF0ZVJpZ2h0KTsKKyAgICAgICAgICAgIGlmIChpdGVyYXRl
TGVmdCAmJiBjdXJyZW50LmxlZnQoKSkKKyAgICAgICAgICAgICAgICB0b0l0ZXJhdGUuYXBwZW5k
KGN1cnJlbnQubGVmdCgpKTsKKyAgICAgICAgICAgIGlmIChpdGVyYXRlUmlnaHQgJiYgY3VycmVu
dC5yaWdodCgpKQorICAgICAgICAgICAgICAgIHRvSXRlcmF0ZS5hcHBlbmQoY3VycmVudC5yaWdo
dCgpKTsKKyAgICAgICAgfQorICAgIH0KICAgICAKICAgICBOb2RlVHlwZSogZmlyc3QoKSBjb25z
dAogICAgIHsKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL1N0ZExpYkV4dHJhcy5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XVEYvd3RmL1N0ZExpYkV4dHJhcy5oCShyZXZpc2lvbiAyNTg5OTYpCisrKyBT
b3VyY2UvV1RGL3d0Zi9TdGRMaWJFeHRyYXMuaAkod29ya2luZyBjb3B5KQpAQCAtNDg5LDYgKzQ4
OSwxOSBAQCBBTFdBWVNfSU5MSU5FIGRlY2x0eXBlKGF1dG8pIG1ha2VVbmlxdWVXCiAgICAgcmV0
dXJuIHN0ZDo6bWFrZV91bmlxdWU8VD4oc3RkOjpmb3J3YXJkPEFyZ3M+KGFyZ3MpLi4uKTsKIH0K
IAordGVtcGxhdGUgPHR5cGVuYW1lIFJlc3VsdFR5cGUsIHNpemVfdC4uLiBJcywgdHlwZW5hbWUg
Li4uQXJncz4KK2NvbnN0ZXhwciBhdXRvIGNvbnN0cnVjdEZpeGVkU2l6ZUFycmF5V2l0aEFyZ3Vt
ZW50c0ltcGwoc3RkOjppbmRleF9zZXF1ZW5jZTxJcy4uLj4sIEFyZ3MmJi4uLiBhcmdzKSAtPiBz
dGQ6OmFycmF5PFJlc3VsdFR5cGUsIHNpemVvZi4uLihJcyk+Cit7CisgICAgcmV0dXJuIHsgKCh2
b2lkKUlzLCBSZXN1bHRUeXBlIHsgc3RkOjpmb3J3YXJkPEFyZ3M+KGFyZ3MpLi4uIH0pLi4uIH07
Cit9CisKKy8vIENvbnN0cnVjdCBhbiBzdGQ6OmFycmF5IHdpdGggTiBlbGVtZW50cyBvZiBSZXN1
bHRUeXBlLCBwYXNzaW5nIEFyZ3MgdG8gZWFjaCBvZiB0aGUgTiBjb25zdHJ1Y3RvcnMuCit0ZW1w
bGF0ZTx0eXBlbmFtZSBSZXN1bHRUeXBlLCBzaXplX3QgTiwgdHlwZW5hbWUgLi4uQXJncz4KK2Nv
bnN0ZXhwciBhdXRvIGNvbnN0cnVjdEZpeGVkU2l6ZUFycmF5V2l0aEFyZ3VtZW50cyhBcmdzJiYu
Li4gYXJncykgLT4gZGVjbHR5cGUoYXV0bykKK3sKKyAgICBhdXRvIHR1cGxlID0gc3RkOjptYWtl
X2luZGV4X3NlcXVlbmNlPE4+KCk7CisgICAgcmV0dXJuIGNvbnN0cnVjdEZpeGVkU2l6ZUFycmF5
V2l0aEFyZ3VtZW50c0ltcGw8UmVzdWx0VHlwZT4odHVwbGUsIHN0ZDo6Zm9yd2FyZDxBcmdzPihh
cmdzKS4uLik7Cit9CiAKIH0gLy8gbmFtZXNwYWNlIFdURgogCkBAIC01MTQsMyArNTI3LDQgQEAg
dXNpbmcgV1RGOjpzYWZlQ2FzdDsKIHVzaW5nIFdURjo6dHJ5QmluYXJ5U2VhcmNoOwogdXNpbmcg
V1RGOjptYWtlVW5pcXVlOwogdXNpbmcgV1RGOjptYWtlVW5pcXVlV2l0aG91dEZhc3RNYWxsb2ND
aGVjazsKK3VzaW5nIFdURjo6Y29uc3RydWN0Rml4ZWRTaXplQXJyYXlXaXRoQXJndW1lbnRzOwpJ
bmRleDogVG9vbHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL0NoYW5nZUxvZwkocmV2
aXNpb24gMjU5MDA1KQorKysgVG9vbHMvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMg
KzEsMTcgQEAKKzIwMjAtMDMtMjUgIFNhYW0gQmFyYXRpICA8c2JhcmF0aUBhcHBsZS5jb20+CisK
KyAgICAgICAgSW1wbGVtZW50IDFHQiBvZiBleGVjdXRhYmxlIG1lbW9yeSBvbiBhcm02NAorICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjA4NDkwCisgICAg
ICAgIDxyZGFyOi8vcHJvYmxlbS82MDc5NzEyNz4KKworICAgICAgICBSZXZpZXdlZCBieSBLZWl0
aCBNaWxsZXIuCisKKyAgICAgICAgKiBTY3JpcHRzL3J1bi1qc2Mtc3RyZXNzLXRlc3RzOgorICAg
ICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMvV1RGL01ldGFBbGxvY2F0b3IuY3BwOgorICAgICAg
ICAoVGVzdFdlYktpdEFQSTo6VEVTVF9GKToKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3Rz
L1dURi9SZWRCbGFja1RyZWUuY3BwOgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6VEVTVF9GKToK
KwogMjAyMC0wMy0yNSAgQWFrYXNoIEphaW4gIDxhYWthc2hfamFpbkBhcHBsZS5jb20+CiAKICAg
ICAgICAgW2V3c10gY29tbWl0LXF1ZXVlIHNob3VsZCBjb21tZW50IG9uIGJ1ZyBpZiBpdCBmYWls
cyB0byBmaW5kIGFueSBtb2RpZmllZCBDaGFuZ2VMb2cKSW5kZXg6IFRvb2xzL1NjcmlwdHMvcnVu
LWpzYy1zdHJlc3MtdGVzdHMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvU2NyaXB0cy9ydW4tanNjLXN0
cmVzcy10ZXN0cwkocmV2aXNpb24gMjU4OTk2KQorKysgVG9vbHMvU2NyaXB0cy9ydW4tanNjLXN0
cmVzcy10ZXN0cwkod29ya2luZyBjb3B5KQpAQCAtNTAsNiArNTAsNyBAQCBTQ1JJUFRTX1BBVEgg
PSBUSElTX1NDUklQVF9QQVRILmRpcm5hbWUKIFdFQktJVF9QQVRIID0gU0NSSVBUU19QQVRILmRp
cm5hbWUuZGlybmFtZQogTEFZT1VUVEVTVFNfUEFUSCA9IFdFQktJVF9QQVRIICsgIkxheW91dFRl
c3RzIgogV0FTTVRFU1RTX1BBVEggPSBXRUJLSVRfUEFUSCArICJKU1Rlc3RzL3dhc20iCitKRVRT
VFJFQU0yX1BBVEggPSBXRUJLSVRfUEFUSCArICJQZXJmb3JtYW5jZVRlc3RzL0pldFN0cmVhbTIi
CiBDSEFLUkFURVNUU19QQVRIID0gV0VCS0lUX1BBVEggKyAiSlNUZXN0cy9DaGFrcmFDb3JlL3Rl
c3QiCiByYWlzZSB1bmxlc3MgU0NSSVBUU19QQVRILmJhc2VuYW1lLnRvX3MgPT0gIlNjcmlwdHMi
CiByYWlzZSB1bmxlc3MgU0NSSVBUU19QQVRILmRpcm5hbWUuYmFzZW5hbWUudG9fcyA9PSAiVG9v
bHMiCkBAIC02NjksNyArNjcwLDcgQEAgZGVmIHJ1bk5vQ0pJVFZhbGlkYXRlKCpvcHRpb25hbFRl
c3RTcGVjaQogZW5kCiAKIGRlZiBydW5Ob0NKSVRWYWxpZGF0ZVBoYXNlcygqb3B0aW9uYWxUZXN0
U3BlY2lmaWNPcHRpb25zKQotICAgIHJ1bigibm8tY2ppdC12YWxpZGF0ZS1waGFzZXMiLCAiLS12
YWxpZGF0ZUJ5dGVjb2RlPXRydWUiLCAiLS12YWxpZGF0ZUdyYXBoQXRFYWNoUGhhc2U9dHJ1ZSIs
ICItLXVzZVNvdXJjZVByb3ZpZGVyQ2FjaGU9ZmFsc2UiLCAqKE5PX0NKSVRfT1BUSU9OUyArIG9w
dGlvbmFsVGVzdFNwZWNpZmljT3B0aW9ucykpCisgICAgcnVuKCJuby1jaml0LXZhbGlkYXRlLXBo
YXNlcyIsICItLXZhbGlkYXRlQnl0ZWNvZGU9dHJ1ZSIsICItLXZhbGlkYXRlR3JhcGhBdEVhY2hQ
aGFzZT10cnVlIiwgIi0tdXNlU291cmNlUHJvdmlkZXJDYWNoZT1mYWxzZSIsICItLXVzZVJhbmRv
bWl6aW5nRXhlY3V0YWJsZUlzbGFuZEFsbG9jYXRpb249dHJ1ZSIsICooTk9fQ0pJVF9PUFRJT05T
ICsgb3B0aW9uYWxUZXN0U3BlY2lmaWNPcHRpb25zKSkKIGVuZAogCiBkZWYgcnVuTm9DSklUQ29s
bGVjdENvbnRpbnVvdXNseSgqb3B0aW9uYWxUZXN0U3BlY2lmaWNPcHRpb25zKQpAQCAtNzA2LDcg
KzcwNyw3IEBAIGRlZiBydW5GVExOb0NKSVQoKm9wdGlvbmFsVGVzdFNwZWNpZmljT3AKIGVuZAog
CiBkZWYgcnVuRlRMTm9DSklUQjNPMCgqb3B0aW9uYWxUZXN0U3BlY2lmaWNPcHRpb25zKQotICAg
IHJ1bigiZnRsLW5vLWNqaXQtYjNvMCIsICItLXVzZUFycmF5QWxsb2NhdGlvblByb2ZpbGluZz1m
YWxzZSIsICItLWZvcmNlUG9seVByb3RvPXRydWUiLCAqKEZUTF9PUFRJT05TICsgTk9fQ0pJVF9P
UFRJT05TICsgQjNPMF9PUFRJT05TICsgRk9SQ0VfTExJTlRfRVhJVF9PUFRJT05TICsgb3B0aW9u
YWxUZXN0U3BlY2lmaWNPcHRpb25zKSkKKyAgICBydW4oImZ0bC1uby1jaml0LWIzbzAiLCAiLS11
c2VBcnJheUFsbG9jYXRpb25Qcm9maWxpbmc9ZmFsc2UiLCAiLS1mb3JjZVBvbHlQcm90bz10cnVl
IiwgIi0tdXNlUmFuZG9taXppbmdFeGVjdXRhYmxlSXNsYW5kQWxsb2NhdGlvbj10cnVlIiwgKihG
VExfT1BUSU9OUyArIE5PX0NKSVRfT1BUSU9OUyArIEIzTzBfT1BUSU9OUyArIEZPUkNFX0xMSU5U
X0VYSVRfT1BUSU9OUyArIG9wdGlvbmFsVGVzdFNwZWNpZmljT3B0aW9ucykpCiBlbmQKIAogZGVm
IHJ1bkZUTE5vQ0pJVFZhbGlkYXRlKCpvcHRpb25hbFRlc3RTcGVjaWZpY09wdGlvbnMpCkBAIC03
MzQsNyArNzM1LDcgQEAgZGVmIHJ1bkRGR0VhZ2VyTm9DSklUVmFsaWRhdGUoKm9wdGlvbmFsVAog
ZW5kCiAKIGRlZiBydW5GVExFYWdlcigqb3B0aW9uYWxUZXN0U3BlY2lmaWNPcHRpb25zKQotICAg
IHJ1bigiZnRsLWVhZ2VyIiwgIi0tYWlyRm9yY2VCcmlnZ3NBbGxvY2F0b3I9dHJ1ZSIsICItLWZv
cmNlUG9seVByb3RvPXRydWUiLCAqKEZUTF9PUFRJT05TICsgRUFHRVJfT1BUSU9OUyArIENPTExF
Q1RfQ09OVElOVU9VU0xZX09QVElPTlMgKyBvcHRpb25hbFRlc3RTcGVjaWZpY09wdGlvbnMpKQor
ICAgIHJ1bigiZnRsLWVhZ2VyIiwgIi0tYWlyRm9yY2VCcmlnZ3NBbGxvY2F0b3I9dHJ1ZSIsICIt
LXVzZVJhbmRvbWl6aW5nRXhlY3V0YWJsZUlzbGFuZEFsbG9jYXRpb249dHJ1ZSIsICItLWZvcmNl
UG9seVByb3RvPXRydWUiLCAqKEZUTF9PUFRJT05TICsgRUFHRVJfT1BUSU9OUyArIENPTExFQ1Rf
Q09OVElOVU9VU0xZX09QVElPTlMgKyBvcHRpb25hbFRlc3RTcGVjaWZpY09wdGlvbnMpKQogZW5k
CiAKIGRlZiBydW5GVExFYWdlcldhdGNoZG9nKCpvcHRpb25hbFRlc3RTcGVjaWZpY09wdGlvbnMp
CkBAIC03NzUsNyArNzc2LDcgQEAgZGVmIHJ1bk5vQ0pJVCgqb3B0aW9uYWxUZXN0U3BlY2lmaWNP
cHRpbwogZW5kCiAKIGRlZiBydW5FYWdlckpldHRpc29uTm9DSklUKCpvcHRpb25hbFRlc3RTcGVj
aWZpY09wdGlvbnMpCi0gICAgcnVuKCJlYWdlci1qZXR0aXNvbi1uby1jaml0IiwgIi0tZm9yY2VD
b2RlQmxvY2tUb0pldHRpc29uRHVlVG9PbGRBZ2U9dHJ1ZSIsICooTk9fQ0pJVF9PUFRJT05TICsg
b3B0aW9uYWxUZXN0U3BlY2lmaWNPcHRpb25zKSkKKyAgICBydW4oImVhZ2VyLWpldHRpc29uLW5v
LWNqaXQiLCAiLS11c2VSYW5kb21pemluZ0V4ZWN1dGFibGVJc2xhbmRBbGxvY2F0aW9uPXRydWUi
LCAiLS1mb3JjZUNvZGVCbG9ja1RvSmV0dGlzb25EdWVUb09sZEFnZT10cnVlIiwgKihOT19DSklU
X09QVElPTlMgKyBvcHRpb25hbFRlc3RTcGVjaWZpY09wdGlvbnMpKQogZW5kCiAKIGRlZiBydW5T
aGFkb3dDaGlja2VuKCpvcHRpb25hbFRlc3RTcGVjaWZpY09wdGlvbnMpCkBAIC0xMDgzLDE2ICsx
MDg0LDM3IEBAIGRlZiBydW5XZWJBc3NlbWJseQogICAgIHJ1bigiZGVmYXVsdC13YXNtIiwgIi1t
IiwgKkZUTF9PUFRJT05TKQogICAgIGlmICRtb2RlICE9ICJxdWljayIKICAgICAgICAgcnVuKCJ3
YXNtLW5vLWNqaXQteWVzLXRscy1jb250ZXh0IiwgIi1tIiwgIi0tdXNlRmFzdFRMU0Zvcldhc21D
b250ZXh0PXRydWUiLCAqKEZUTF9PUFRJT05TICsgTk9fQ0pJVF9PUFRJT05TKSkKLSAgICAgICAg
cnVuKCJ3YXNtLWVhZ2VyIiwgIi1tIiwgKihGVExfT1BUSU9OUyArIEVBR0VSX09QVElPTlMpKQot
ICAgICAgICBydW4oIndhc20tZWFnZXItamV0dGlzb24iLCAiLW0iLCAiLS1mb3JjZUNvZGVCbG9j
a1RvSmV0dGlzb25EdWVUb09sZEFnZT10cnVlIiwgKkZUTF9PUFRJT05TKQorICAgICAgICBydW4o
Indhc20tZWFnZXIiLCAiLW0iLCAiLS11c2VSYW5kb21pemluZ0V4ZWN1dGFibGVJc2xhbmRBbGxv
Y2F0aW9uPXRydWUiLCAqKEZUTF9PUFRJT05TICsgRUFHRVJfT1BUSU9OUykpCisgICAgICAgIHJ1
bigid2FzbS1lYWdlci1qZXR0aXNvbiIsICItbSIsICItLWZvcmNlQ29kZUJsb2NrVG9KZXR0aXNv
bkR1ZVRvT2xkQWdlPXRydWUiLCAiLS11c2VSYW5kb21pemluZ0V4ZWN1dGFibGVJc2xhbmRBbGxv
Y2F0aW9uPXRydWUiLCAqRlRMX09QVElPTlMpCiAgICAgICAgIHJ1bigid2FzbS1uby10bHMtY29u
dGV4dCIsICItbSIsICItLXVzZUZhc3RUTFNGb3JXYXNtQ29udGV4dD1mYWxzZSIsICpGVExfT1BU
SU9OUykKICAgICAgICAgcnVuKCJ3YXNtLXNsb3ctbWVtb3J5IiwgIi1tIiwgIi0tdXNlV2ViQXNz
ZW1ibHlGYXN0TWVtb3J5PWZhbHNlIiwgKkZUTF9PUFRJT05TKQogICAgICAgICBydW4oIndhc20t
YjMiLCAiLW0iLCAiLS11c2VXYXNtTExJbnQ9ZmFsc2UiLCAiLS13YXNtQkJRVXNlc0Fpcj1mYWxz
ZSIsICpGVExfT1BUSU9OUykKLSAgICAgICAgcnVuKCJ3YXNtLWFpciIsICItbSIsICItLXVzZVdh
c21MTEludD1mYWxzZSIsICpGVExfT1BUSU9OUykKKyAgICAgICAgcnVuKCJ3YXNtLWFpciIsICIt
bSIsICItLXVzZVdhc21MTEludD1mYWxzZSIsICItLXVzZVJhbmRvbWl6aW5nRXhlY3V0YWJsZUlz
bGFuZEFsbG9jYXRpb249dHJ1ZSIsICpGVExfT1BUSU9OUykKICAgICAgICAgcnVuKCJ3YXNtLWNv
bGxlY3QtY29udGludW91c2x5IiwgIi1tIiwgIi0tY29sbGVjdENvbnRpbnVvdXNseT10cnVlIiwg
KkZUTF9PUFRJT05TKSBpZiBzaG91bGRDb2xsZWN0Q29udGludW91c2x5PwogICAgIGVuZAogZW5k
CiAKK2RlZiBydW5XZWJBc3NlbWJseUpldFN0cmVhbTIKKyAgICByZXR1cm4gaWYgISRqaXRUZXN0
cworICAgIHJldHVybiBpZiAhJGlzRlRMUGxhdGZvcm0KKworICAgIHByZXBhcmVFeHRyYUFic29s
dXRlRmlsZXMoSkVUU1RSRUFNMl9QQVRILCBbIkpldFN0cmVhbURyaXZlci5qcyJdKQorICAgIHBy
ZXBhcmVFeHRyYVJlbGF0aXZlRmlsZXNXaXRoQmFzZURpcmVjdG9yeShEaXJbSkVUU1RSRUFNMl9Q
QVRIICsgIndhc20iICsgIiouanMiXS5tYXAgeyB8ZnwgIndhc20vIiArIEZpbGUuYmFzZW5hbWUo
ZikgfSwgJGNvbGxlY3Rpb24uZGlybmFtZSwgJGV4dHJhRmlsZXNCYXNlRGlyLmRpcm5hbWUpCisg
ICAgcHJlcGFyZUV4dHJhUmVsYXRpdmVGaWxlc1dpdGhCYXNlRGlyZWN0b3J5KERpcltKRVRTVFJF
QU0yX1BBVEggKyAid2FzbSIgKyAiKi53YXNtIl0ubWFwIHsgfGZ8ICJ3YXNtLyIgKyBGaWxlLmJh
c2VuYW1lKGYpIH0sICRjb2xsZWN0aW9uLmRpcm5hbWUsICRleHRyYUZpbGVzQmFzZURpci5kaXJu
YW1lKQorCisgICAgcnVuKCJkZWZhdWx0LXdhc20iLCAqRlRMX09QVElPTlMpCisgICAgaWYgJG1v
ZGUgIT0gInF1aWNrIgorICAgICAgICBydW4oIndhc20tbm8tY2ppdC15ZXMtdGxzLWNvbnRleHQi
LCAiLS11c2VGYXN0VExTRm9yV2FzbUNvbnRleHQ9dHJ1ZSIsICooRlRMX09QVElPTlMgKyBOT19D
SklUX09QVElPTlMpKQorICAgICAgICBydW4oIndhc20tZWFnZXIiLCAiLS11c2VSYW5kb21pemlu
Z0V4ZWN1dGFibGVJc2xhbmRBbGxvY2F0aW9uPXRydWUiLCAqKEZUTF9PUFRJT05TICsgRUFHRVJf
T1BUSU9OUykpCisgICAgICAgIHJ1bigid2FzbS1lYWdlci1qZXR0aXNvbiIsICItLWZvcmNlQ29k
ZUJsb2NrVG9KZXR0aXNvbkR1ZVRvT2xkQWdlPXRydWUiLCAqRlRMX09QVElPTlMpCisgICAgICAg
IHJ1bigid2FzbS1uby10bHMtY29udGV4dCIsICItLXVzZUZhc3RUTFNGb3JXYXNtQ29udGV4dD1m
YWxzZSIsICpGVExfT1BUSU9OUykKKyAgICAgICAgcnVuKCJ3YXNtLXNsb3ctbWVtb3J5IiwgIi0t
dXNlV2ViQXNzZW1ibHlGYXN0TWVtb3J5PWZhbHNlIiwgKkZUTF9PUFRJT05TKQorICAgICAgICBy
dW4oIndhc20tYjMiLCAiLS11c2VXYXNtTExJbnQ9ZmFsc2UiLCAiLS13YXNtQkJRVXNlc0Fpcj1m
YWxzZSIsICpGVExfT1BUSU9OUykKKyAgICAgICAgcnVuKCJ3YXNtLWFpciIsICItLXVzZVdhc21M
TEludD1mYWxzZSIsICItLXVzZVJhbmRvbWl6aW5nRXhlY3V0YWJsZUlzbGFuZEFsbG9jYXRpb249
dHJ1ZSIsICpGVExfT1BUSU9OUykKKyAgICAgICAgcnVuKCJ3YXNtLWNvbGxlY3QtY29udGludW91
c2x5IiwgIi0tY29sbGVjdENvbnRpbnVvdXNseT10cnVlIiwgKkZUTF9PUFRJT05TKSBpZiBzaG91
bGRDb2xsZWN0Q29udGludW91c2x5PworICAgIGVuZAorZW5kCisKIGRlZiBydW5XZWJBc3NlbWJs
eVN1aXRlKCpvcHRpb25hbFRlc3RTcGVjaWZpY09wdGlvbnMpCiAgICAgcmV0dXJuIGlmICEkaml0
VGVzdHMKICAgICByZXR1cm4gaWYgISRpc0ZUTFBsYXRmb3JtCkBAIC0xMTAzLDExICsxMTI1LDEx
IEBAIGRlZiBydW5XZWJBc3NlbWJseVN1aXRlKCpvcHRpb25hbFRlc3RTcGUKICAgICBpZiAkbW9k
ZSAhPSAicXVpY2siCiAgICAgICAgIHJ1bigid2FzbS1uby1jaml0LXllcy10bHMtY29udGV4dCIs
ICItbSIsICItLXVzZUZhc3RUTFNGb3JXYXNtQ29udGV4dD10cnVlIiwgKihGVExfT1BUSU9OUyAr
IE5PX0NKSVRfT1BUSU9OUyArIG9wdGlvbmFsVGVzdFNwZWNpZmljT3B0aW9ucykpCiAgICAgICAg
IHJ1bigid2FzbS1lYWdlciIsICItbSIsICooRlRMX09QVElPTlMgKyBFQUdFUl9PUFRJT05TICsg
b3B0aW9uYWxUZXN0U3BlY2lmaWNPcHRpb25zKSkKLSAgICAgICAgcnVuKCJ3YXNtLWVhZ2VyLWpl
dHRpc29uIiwgIi1tIiwgIi0tZm9yY2VDb2RlQmxvY2tUb0pldHRpc29uRHVlVG9PbGRBZ2U9dHJ1
ZSIsICooRlRMX09QVElPTlMgKyBvcHRpb25hbFRlc3RTcGVjaWZpY09wdGlvbnMpKQorICAgICAg
ICBydW4oIndhc20tZWFnZXItamV0dGlzb24iLCAiLW0iLCAiLS1mb3JjZUNvZGVCbG9ja1RvSmV0
dGlzb25EdWVUb09sZEFnZT10cnVlIiwgIi0tdXNlUmFuZG9taXppbmdFeGVjdXRhYmxlSXNsYW5k
QWxsb2NhdGlvbj10cnVlIiwgKihGVExfT1BUSU9OUyArIG9wdGlvbmFsVGVzdFNwZWNpZmljT3B0
aW9ucykpCiAgICAgICAgIHJ1bigid2FzbS1uby10bHMtY29udGV4dCIsICItbSIsICItLXVzZUZh
c3RUTFNGb3JXYXNtQ29udGV4dD1mYWxzZSIsICooRlRMX09QVElPTlMgKyBvcHRpb25hbFRlc3RT
cGVjaWZpY09wdGlvbnMpKQogICAgICAgICBydW4oIndhc20tc2xvdy1tZW1vcnkiLCAiLW0iLCAi
LS11c2VXZWJBc3NlbWJseUZhc3RNZW1vcnk9ZmFsc2UiLCAqKEZUTF9PUFRJT05TICsgb3B0aW9u
YWxUZXN0U3BlY2lmaWNPcHRpb25zKSkKICAgICAgICAgcnVuKCJ3YXNtLWIzIiwgIi1tIiwgIi0t
dXNlV2FzbUxMSW50PWZhbHNlIiwgIi0td2FzbUJCUVVzZXNBaXI9ZmFsc2UiLCAqKEZUTF9PUFRJ
T05TICsgb3B0aW9uYWxUZXN0U3BlY2lmaWNPcHRpb25zKSkKLSAgICAgICAgcnVuKCJ3YXNtLWFp
ciIsICItbSIsICItLXVzZVdhc21MTEludD1mYWxzZSIsICooRlRMX09QVElPTlMgKyBvcHRpb25h
bFRlc3RTcGVjaWZpY09wdGlvbnMpKQorICAgICAgICBydW4oIndhc20tYWlyIiwgIi1tIiwgIi0t
dXNlV2FzbUxMSW50PWZhbHNlIiwgIi0tdXNlUmFuZG9taXppbmdFeGVjdXRhYmxlSXNsYW5kQWxs
b2NhdGlvbj10cnVlIiwgKihGVExfT1BUSU9OUyArIG9wdGlvbmFsVGVzdFNwZWNpZmljT3B0aW9u
cykpCiAgICAgICAgIHJ1bigid2FzbS1jb2xsZWN0LWNvbnRpbnVvdXNseSIsICItbSIsICItLWNv
bGxlY3RDb250aW51b3VzbHk9dHJ1ZSIsICooRlRMX09QVElPTlMgKyBvcHRpb25hbFRlc3RTcGVj
aWZpY09wdGlvbnMpKSBpZiBzaG91bGRDb2xsZWN0Q29udGludW91c2x5PwogICAgIGVuZAogZW5k
CkBAIC0xMTMzLDExICsxMTU1LDExIEBAIGRlZiBydW5XZWJBc3NlbWJseVdpdGhIYXJuZXNzKCpv
cHRpb25hbFQKICAgICBpZiAkbW9kZSAhPSAicXVpY2siCiAgICAgICAgIHJ1bkhhcm5lc3NUZXN0
KCJ3YXNtLW5vLWNqaXQteWVzLXRscy1jb250ZXh0IiwgIi0tdXNlRmFzdFRMU0Zvcldhc21Db250
ZXh0PXRydWUiLCAqKEZUTF9PUFRJT05TICsgTk9fQ0pJVF9PUFRJT05TICsgb3B0aW9uYWxUZXN0
U3BlY2lmaWNPcHRpb25zKSkKICAgICAgICAgcnVuSGFybmVzc1Rlc3QoIndhc20tZWFnZXIiLCAq
KEZUTF9PUFRJT05TICsgRUFHRVJfT1BUSU9OUyArIG9wdGlvbmFsVGVzdFNwZWNpZmljT3B0aW9u
cykpCi0gICAgICAgIHJ1bkhhcm5lc3NUZXN0KCJ3YXNtLWVhZ2VyLWpldHRpc29uIiwgIi0tZm9y
Y2VDb2RlQmxvY2tUb0pldHRpc29uRHVlVG9PbGRBZ2U9dHJ1ZSIsICooRlRMX09QVElPTlMgKyBv
cHRpb25hbFRlc3RTcGVjaWZpY09wdGlvbnMpKQorICAgICAgICBydW5IYXJuZXNzVGVzdCgid2Fz
bS1lYWdlci1qZXR0aXNvbiIsICItLWZvcmNlQ29kZUJsb2NrVG9KZXR0aXNvbkR1ZVRvT2xkQWdl
PXRydWUiLCAiLS11c2VSYW5kb21pemluZ0V4ZWN1dGFibGVJc2xhbmRBbGxvY2F0aW9uPXRydWUi
LCAqKEZUTF9PUFRJT05TICsgb3B0aW9uYWxUZXN0U3BlY2lmaWNPcHRpb25zKSkKICAgICAgICAg
cnVuSGFybmVzc1Rlc3QoIndhc20tbm8tdGxzLWNvbnRleHQiLCAiLS11c2VGYXN0VExTRm9yV2Fz
bUNvbnRleHQ9ZmFsc2UiLCAqKEZUTF9PUFRJT05TICsgb3B0aW9uYWxUZXN0U3BlY2lmaWNPcHRp
b25zKSkKICAgICAgICAgcnVuSGFybmVzc1Rlc3QoIndhc20tc2xvdy1tZW1vcnkiLCAiLS11c2VX
ZWJBc3NlbWJseUZhc3RNZW1vcnk9ZmFsc2UiLCAqKEZUTF9PUFRJT05TICsgb3B0aW9uYWxUZXN0
U3BlY2lmaWNPcHRpb25zKSkKICAgICAgICAgcnVuSGFybmVzc1Rlc3QoIndhc20tYjMiLCAiLS11
c2VXYXNtTExJbnQ9ZmFsc2UiLCAiLS13YXNtQkJRVXNlc0Fpcj1mYWxzZSIsICooRlRMX09QVElP
TlMgKyBvcHRpb25hbFRlc3RTcGVjaWZpY09wdGlvbnMpKQotICAgICAgICBydW5IYXJuZXNzVGVz
dCgid2FzbS1uby1haXIiLCAiLS11c2VXYXNtTExJbnQ9ZmFsc2UiLCAqKEZUTF9PUFRJT05TICsg
b3B0aW9uYWxUZXN0U3BlY2lmaWNPcHRpb25zKSkKKyAgICAgICAgcnVuSGFybmVzc1Rlc3QoIndh
c20tbm8tYWlyIiwgIi0tdXNlV2FzbUxMSW50PWZhbHNlIiwgIi0tdXNlUmFuZG9taXppbmdFeGVj
dXRhYmxlSXNsYW5kQWxsb2NhdGlvbj10cnVlIiwgKihGVExfT1BUSU9OUyArIG9wdGlvbmFsVGVz
dFNwZWNpZmljT3B0aW9ucykpCiAgICAgICAgIHJ1bkhhcm5lc3NUZXN0KCJ3YXNtLWNvbGxlY3Qt
Y29udGludW91c2x5IiwgIi0tY29sbGVjdENvbnRpbnVvdXNseT10cnVlIiwgKihGVExfT1BUSU9O
UyArIG9wdGlvbmFsVGVzdFNwZWNpZmljT3B0aW9ucykpIGlmIHNob3VsZENvbGxlY3RDb250aW51
b3VzbHk/CiAgICAgZW5kCiBlbmQKQEAgLTExNTQsMTAgKzExNzYsMTAgQEAgZGVmIHJ1bldlYkFz
c2VtYmx5RW1zY3JpcHRlbihtb2RlKQogICAgIHJ1bigiZGVmYXVsdC13YXNtIiwgKkZUTF9PUFRJ
T05TKQogICAgIGlmICRtb2RlICE9ICJxdWljayIKICAgICAgICAgcnVuKCJ3YXNtLW5vLWNqaXQt
eWVzLXRscy1jb250ZXh0IiwgIi0tdXNlRmFzdFRMU0Zvcldhc21Db250ZXh0PXRydWUiLCAqKEZU
TF9PUFRJT05TICsgTk9fQ0pJVF9PUFRJT05TKSkKLSAgICAgICAgcnVuKCJ3YXNtLWVhZ2VyLWpl
dHRpc29uIiwgIi0tZm9yY2VDb2RlQmxvY2tUb0pldHRpc29uRHVlVG9PbGRBZ2U9dHJ1ZSIsICpG
VExfT1BUSU9OUykKKyAgICAgICAgcnVuKCJ3YXNtLWVhZ2VyLWpldHRpc29uIiwgIi0tZm9yY2VD
b2RlQmxvY2tUb0pldHRpc29uRHVlVG9PbGRBZ2U9dHJ1ZSIsICItLXVzZVJhbmRvbWl6aW5nRXhl
Y3V0YWJsZUlzbGFuZEFsbG9jYXRpb249dHJ1ZSIsICpGVExfT1BUSU9OUykKICAgICAgICAgcnVu
KCJ3YXNtLW5vLXRscy1jb250ZXh0IiwgIi0tdXNlRmFzdFRMU0Zvcldhc21Db250ZXh0PWZhbHNl
IiwgKkZUTF9PUFRJT05TKQogICAgICAgICBydW4oIndhc20tYjMiLCAiLS11c2VXYXNtTExJbnQ9
ZmFsc2UiLCAiLS13YXNtQkJRVXNlc0Fpcj1mYWxzZSIsICpGVExfT1BUSU9OUykKLSAgICAgICAg
cnVuKCJ3YXNtLWFpciIsICItLXVzZVdhc21MTEludD1mYWxzZSIsICpGVExfT1BUSU9OUykKKyAg
ICAgICAgcnVuKCJ3YXNtLWFpciIsICItLXVzZVdhc21MTEludD1mYWxzZSIsICItLXVzZVJhbmRv
bWl6aW5nRXhlY3V0YWJsZUlzbGFuZEFsbG9jYXRpb249dHJ1ZSIsICpGVExfT1BUSU9OUykKICAg
ICAgICAgcnVuKCJ3YXNtLWNvbGxlY3QtY29udGludW91c2x5IiwgIi0tY29sbGVjdENvbnRpbnVv
dXNseT10cnVlIiwgKkZUTF9PUFRJT05TKSBpZiBzaG91bGRDb2xsZWN0Q29udGludW91c2x5Pwog
ICAgIGVuZAogZW5kCkBAIC0xMTgwLDEwICsxMjAyLDEwIEBAIGRlZiBydW5XZWJBc3NlbWJseVNw
ZWNUZXN0KG1vZGUpCiAgICAgcnVuV2l0aE91dHB1dEhhbmRsZXIoImRlZmF1bHQtd2FzbSIsIG5v
aXN5T3V0cHV0SGFuZGxlciwgIi4uL3NwZWMtaGFybmVzcy5qcyIsICpGVExfT1BUSU9OUykKICAg
ICBpZiAkbW9kZSAhPSAicXVpY2siCiAgICAgICBydW5XaXRoT3V0cHV0SGFuZGxlcigid2FzbS1u
by1jaml0LXllcy10bHMtY29udGV4dCIsIG5vaXN5T3V0cHV0SGFuZGxlciwgIi4uL3NwZWMtaGFy
bmVzcy5qcyIsICAiLS11c2VGYXN0VExTRm9yV2FzbUNvbnRleHQ9dHJ1ZSIsICooRlRMX09QVElP
TlMgKyBOT19DSklUX09QVElPTlMpKQotICAgICAgcnVuV2l0aE91dHB1dEhhbmRsZXIoIndhc20t
ZWFnZXItamV0dGlzb24iLCBub2lzeU91dHB1dEhhbmRsZXIsICIuLi9zcGVjLWhhcm5lc3MuanMi
LCAiLS1mb3JjZUNvZGVCbG9ja1RvSmV0dGlzb25EdWVUb09sZEFnZT10cnVlIiwgKkZUTF9PUFRJ
T05TKQorICAgICAgcnVuV2l0aE91dHB1dEhhbmRsZXIoIndhc20tZWFnZXItamV0dGlzb24iLCBu
b2lzeU91dHB1dEhhbmRsZXIsICIuLi9zcGVjLWhhcm5lc3MuanMiLCAiLS1mb3JjZUNvZGVCbG9j
a1RvSmV0dGlzb25EdWVUb09sZEFnZT10cnVlIiwgIi0tdXNlUmFuZG9taXppbmdFeGVjdXRhYmxl
SXNsYW5kQWxsb2NhdGlvbj10cnVlIiwgKkZUTF9PUFRJT05TKQogICAgICAgcnVuV2l0aE91dHB1
dEhhbmRsZXIoIndhc20tbm8tdGxzLWNvbnRleHQiLCBub2lzeU91dHB1dEhhbmRsZXIsICIuLi9z
cGVjLWhhcm5lc3MuanMiLCAiLS11c2VGYXN0VExTRm9yV2FzbUNvbnRleHQ9ZmFsc2UiLCAqRlRM
X09QVElPTlMpCiAgICAgICBydW5XaXRoT3V0cHV0SGFuZGxlcigid2FzbS1iMyIsIG5vaXN5T3V0
cHV0SGFuZGxlciwgIi4uL3NwZWMtaGFybmVzcy5qcyIsICItLXVzZVdhc21MTEludD1mYWxzZSIs
ICItLXdhc21CQlFVc2VzQWlyPWZhbHNlIiwgKkZUTF9PUFRJT05TKQotICAgICAgcnVuV2l0aE91
dHB1dEhhbmRsZXIoIndhc20tYWlyIiwgbm9pc3lPdXRwdXRIYW5kbGVyLCAiLi4vc3BlYy1oYXJu
ZXNzLmpzIiwgIi0tdXNlV2FzbUxMSW50PWZhbHNlIiwgKkZUTF9PUFRJT05TKQorICAgICAgcnVu
V2l0aE91dHB1dEhhbmRsZXIoIndhc20tYWlyIiwgbm9pc3lPdXRwdXRIYW5kbGVyLCAiLi4vc3Bl
Yy1oYXJuZXNzLmpzIiwgIi0tdXNlV2FzbUxMSW50PWZhbHNlIiwgIi0tdXNlUmFuZG9taXppbmdF
eGVjdXRhYmxlSXNsYW5kQWxsb2NhdGlvbj10cnVlIiwgKkZUTF9PUFRJT05TKQogICAgICAgcnVu
V2l0aE91dHB1dEhhbmRsZXIoIndhc20tY29sbGVjdC1jb250aW51b3VzbHkiLCBub2lzeU91dHB1
dEhhbmRsZXIsICIuLi9zcGVjLWhhcm5lc3MuanMiLCAiLS1jb2xsZWN0Q29udGludW91c2x5PXRy
dWUiLCAqRlRMX09QVElPTlMpIGlmIHNob3VsZENvbGxlY3RDb250aW51b3VzbHk/CiAgICAgZW5k
CiBlbmQKQEAgLTEzNTIsMTcgKzEzNzQsMjEgQEAgZGVmIG5vTm9MTEludFJ1bkxheW91dFRlc3QK
ICAgICBlbmQKIGVuZAogCi1kZWYgcHJlcGFyZUV4dHJhUmVsYXRpdmVGaWxlcyhleHRyYUZpbGVz
LCBkZXN0aW5hdGlvbikKK2RlZiBwcmVwYXJlRXh0cmFSZWxhdGl2ZUZpbGVzV2l0aEJhc2VEaXJl
Y3RvcnkoZXh0cmFGaWxlcywgZGVzdGluYXRpb24sIGJhc2VEaXJlY3RvcnkpCiAgICAgRGlyLmNo
ZGlyKCRvdXRwdXREaXIpIHsKICAgICAgICAgZXh0cmFGaWxlcy5lYWNoIHsKICAgICAgICAgICAg
IHwgZmlsZSB8CiAgICAgICAgICAgICBkZXN0ID0gZGVzdGluYXRpb24gKyBmaWxlCiAgICAgICAg
ICAgICBGaWxlVXRpbHMubWtkaXJfcChkZXN0LmRpcm5hbWUpCi0gICAgICAgICAgICBGaWxlVXRp
bHMuY3AgJGV4dHJhRmlsZXNCYXNlRGlyICsgZmlsZSwgZGVzdAorICAgICAgICAgICAgRmlsZVV0
aWxzLmNwIGJhc2VEaXJlY3RvcnkgKyBmaWxlLCBkZXN0CiAgICAgICAgIH0KICAgICB9CiBlbmQK
IAorZGVmIHByZXBhcmVFeHRyYVJlbGF0aXZlRmlsZXMoZXh0cmFGaWxlcywgZGVzdGluYXRpb24p
CisgICAgcHJlcGFyZUV4dHJhUmVsYXRpdmVGaWxlc1dpdGhCYXNlRGlyZWN0b3J5KGV4dHJhRmls
ZXMsIGRlc3RpbmF0aW9uLCAkZXh0cmFGaWxlc0Jhc2VEaXIpCitlbmQKKwogZGVmIGJhc2VEaXJG
b3JDb2xsZWN0aW9uKGNvbGxlY3Rpb25OYW1lKQogICAgIFBhdGhuYW1lKCIudGVzdHMiKSArIGNv
bGxlY3Rpb25OYW1lCiBlbmQKSW5kZXg6IFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV1RGL01l
dGFBbGxvY2F0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMv
V1RGL01ldGFBbGxvY2F0b3IuY3BwCShyZXZpc2lvbiAyNTg5OTYpCisrKyBUb29scy9UZXN0V2Vi
S2l0QVBJL1Rlc3RzL1dURi9NZXRhQWxsb2NhdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTIs
NyArNTIsNyBAQCBwdWJsaWM6CiAgICAgY2xhc3MgU2ltcGxlVGVzdEFsbG9jYXRvcjogcHVibGlj
IE1ldGFBbGxvY2F0b3IgewogICAgIHB1YmxpYzoKICAgICAgICAgU2ltcGxlVGVzdEFsbG9jYXRv
cihNZXRhQWxsb2NhdG9yVGVzdCogcGFyZW50KQotICAgICAgICAgICAgOiBNZXRhQWxsb2NhdG9y
KDMyKQorICAgICAgICAgICAgOiBNZXRhQWxsb2NhdG9yKG1fbG9jaywgMzIpCiAgICAgICAgICAg
ICAsIG1fcGFyZW50KHBhcmVudCkKICAgICAgICAgewogICAgICAgICAgICAgYWRkRnJlc2hGcmVl
U3BhY2UocmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oYmFzZVBhZ2UgKiBwYWdlU2l6ZSgpKSwgZGVm
YXVsdFBhZ2VzSW5IZWFwICogcGFnZVNpemUoKSk7CkBAIC0xMjksNiArMTI5LDcgQEAgcHVibGlj
OgogICAgICAgICB9CiAgICAgICAgIAogICAgIHByaXZhdGU6CisgICAgICAgIExvY2sgbV9sb2Nr
OwogICAgICAgICBNZXRhQWxsb2NhdG9yVGVzdCogbV9wYXJlbnQ7CiAgICAgfTsKIApAQCAtMTkw
LDcgKzE5MSw3IEBAIHB1YmxpYzoKICAgICAKICAgICBNZXRhQWxsb2NhdG9ySGFuZGxlKiBhbGxv
Y2F0ZShzaXplX3Qgc2l6ZUluQnl0ZXMsIFNhbml0eUNoZWNrTW9kZSBzYW5pdHlDaGVja01vZGUg
PSBSdW5TYW5pdHlDaGVjaykKICAgICB7Ci0gICAgICAgIE1ldGFBbGxvY2F0b3JIYW5kbGUqIGhh
bmRsZSA9IGFsbG9jYXRvci0+YWxsb2NhdGUoc2l6ZUluQnl0ZXMsIDApLmxlYWtSZWYoKTsKKyAg
ICAgICAgTWV0YUFsbG9jYXRvckhhbmRsZSogaGFuZGxlID0gYWxsb2NhdG9yLT5hbGxvY2F0ZShz
aXplSW5CeXRlcykubGVha1JlZigpOwogICAgICAgICBFWFBFQ1RfVFJVRShoYW5kbGUpOwogICAg
ICAgICBFWFBFQ1RfRVEoaGFuZGxlLT5zaXplSW5CeXRlcygpLCBzaXplSW5CeXRlcyk7CiAgICAg
ICAgIApAQCAtNDcyLDcgKzQ3Myw3IEBAIHB1YmxpYzoKICAgICAgICAgCiAgICAgICAgIHNhbml0
eUNoZWNrKCk7CiAgICAgICAgIAotICAgICAgICBFWFBFQ1RfVFJVRSghYWxsb2NhdG9yLT5hbGxv
Y2F0ZShzaXplSW5CeXRlcywgMCkpOworICAgICAgICBFWFBFQ1RfVFJVRSghYWxsb2NhdG9yLT5h
bGxvY2F0ZShzaXplSW5CeXRlcykpOwogICAgICAgICAKICAgICAgICAgZm9yIChzaXplX3QgaW5k
ZXggPSAwOyBpbmRleCA8IG51bUFsbG9jYXRpb25zOyArK2luZGV4KQogICAgICAgICAgICAgZnJl
ZShoYW5kbGVzLmF0KGluZGV4KSwgRG9udFJ1blNhbml0eUNoZWNrKTsKQEAgLTU3OSw3ICs1ODAs
NyBAQCBwdWJsaWM6CiAgICAgICAgIHNhbml0eUNoZWNrKCk7CiAgICAgICAgIAogICAgICAgICAv
LyBBc3NlcnQgdGhhdCB0aGUgaGVhcCBpcyBub3QgZW1wdHkuCi0gICAgICAgIEVYUEVDVF9UUlVF
KCFhbGxvY2F0b3ItPmFsbG9jYXRlKGRlZmF1bHRQYWdlc0luSGVhcCAqIHBhZ2VTaXplKCksIDAp
KTsKKyAgICAgICAgRVhQRUNUX1RSVUUoIWFsbG9jYXRvci0+YWxsb2NhdGUoZGVmYXVsdFBhZ2Vz
SW5IZWFwICogcGFnZVNpemUoKSkpOwogICAgICAgICAKICAgICAgICAgLy8gQWxsb2NhdGUgdGhl
IHJlbWFpbmRlciBvZiB0aGUgaGVhcC4KICAgICAgICAgTWV0YUFsbG9jYXRvckhhbmRsZSogcmVt
YWluZGVyID0gYWxsb2NhdGUoZGVmYXVsdFBhZ2VzSW5IZWFwICogcGFnZVNpemUoKSAtIHNlY29u
ZFNpemUpOwpAQCAtNTk3LDEyICs1OTgsMTIgQEAgcHVibGljOgogICAgIAogICAgIHZvaWQgdGVz
dERlbWFuZEFsbG9jQ29hbGVzY2Uoc2l6ZV90IGZpcnN0U2l6ZSwgc2l6ZV90IG51bVBhZ2VzLCBz
aXplX3Qgc2Vjb25kU2l6ZSkKICAgICB7Ci0gICAgICAgIEVYUEVDVF9UUlVFKCFhbGxvY2F0b3It
PmFsbG9jYXRlKChkZWZhdWx0UGFnZXNJbkhlYXAgKyBudW1QYWdlcykgKiBwYWdlU2l6ZSgpLCAw
KSk7CisgICAgICAgIEVYUEVDVF9UUlVFKCFhbGxvY2F0b3ItPmFsbG9jYXRlKChkZWZhdWx0UGFn
ZXNJbkhlYXAgKyBudW1QYWdlcykgKiBwYWdlU2l6ZSgpKSk7CiAgICAgICAgIAogICAgICAgICBN
ZXRhQWxsb2NhdG9ySGFuZGxlKiBmaXJzdEhhbmRsZSA9IGFsbG9jYXRlKGZpcnN0U2l6ZSk7CiAg
ICAgICAgIAotICAgICAgICBFWFBFQ1RfVFJVRSghYWxsb2NhdG9yLT5hbGxvY2F0ZShzZWNvbmRT
aXplLCAwKSk7Ci0gICAgICAgIEVYUEVDVF9UUlVFKCFhbGxvY2F0b3ItPmFsbG9jYXRlKChkZWZh
dWx0UGFnZXNJbkhlYXAgKyBudW1QYWdlcykgKiBwYWdlU2l6ZSgpLCAwKSk7CisgICAgICAgIEVY
UEVDVF9UUlVFKCFhbGxvY2F0b3ItPmFsbG9jYXRlKHNlY29uZFNpemUpKTsKKyAgICAgICAgRVhQ
RUNUX1RSVUUoIWFsbG9jYXRvci0+YWxsb2NhdGUoKGRlZmF1bHRQYWdlc0luSGVhcCArIG51bVBh
Z2VzKSAqIHBhZ2VTaXplKCkpKTsKICAgICAgICAgCiAgICAgICAgIGN1cnJlbnRIZWFwR3Jvd3Ro
TW9kZSA9IEZvclRlc3REZW1hbmRBbGxvY0NvYWxlc2NlOwogICAgICAgICBhbGxvd0FsbG9jYXRl
UGFnZXMgPSBudW1QYWdlczsKQEAgLTYyNiwxMiArNjI3LDEyIEBAIHB1YmxpYzoKICAgICB7CiAg
ICAgICAgIGZyZWUoYWxsb2NhdGUoZmlyc3RTaXplKSk7CiAgICAgICAgIGZyZWUoYWxsb2NhdGUo
ZGVmYXVsdFBhZ2VzSW5IZWFwICogcGFnZVNpemUoKSkpOwotICAgICAgICBFWFBFQ1RfVFJVRSgh
YWxsb2NhdG9yLT5hbGxvY2F0ZSgoZGVmYXVsdFBhZ2VzSW5IZWFwICsgbnVtUGFnZXMpICogcGFn
ZVNpemUoKSwgMCkpOworICAgICAgICBFWFBFQ1RfVFJVRSghYWxsb2NhdG9yLT5hbGxvY2F0ZSgo
ZGVmYXVsdFBhZ2VzSW5IZWFwICsgbnVtUGFnZXMpICogcGFnZVNpemUoKSkpOwogICAgICAgICAK
ICAgICAgICAgTWV0YUFsbG9jYXRvckhhbmRsZSogZmlyc3RIYW5kbGUgPSBhbGxvY2F0ZShmaXJz
dFNpemUpOwogICAgICAgICAKLSAgICAgICAgRVhQRUNUX1RSVUUoIWFsbG9jYXRvci0+YWxsb2Nh
dGUoc2Vjb25kU2l6ZSwgMCkpOwotICAgICAgICBFWFBFQ1RfVFJVRSghYWxsb2NhdG9yLT5hbGxv
Y2F0ZSgoZGVmYXVsdFBhZ2VzSW5IZWFwICsgbnVtUGFnZXMpICogcGFnZVNpemUoKSwgMCkpOwor
ICAgICAgICBFWFBFQ1RfVFJVRSghYWxsb2NhdG9yLT5hbGxvY2F0ZShzZWNvbmRTaXplKSk7Cisg
ICAgICAgIEVYUEVDVF9UUlVFKCFhbGxvY2F0b3ItPmFsbG9jYXRlKChkZWZhdWx0UGFnZXNJbkhl
YXAgKyBudW1QYWdlcykgKiBwYWdlU2l6ZSgpKSk7CiAgICAgICAgIAogICAgICAgICBjdXJyZW50
SGVhcEdyb3d0aE1vZGUgPSBGb3JUZXN0RGVtYW5kQWxsb2NEb250Q29hbGVzY2U7CiAgICAgICAg
IGFsbG93QWxsb2NhdGVQYWdlcyA9IG51bVBhZ2VzOwpAQCAtNjQ1LDEyICs2NDYsMTIgQEAgcHVi
bGljOgogICAgICAgICAKICAgICAgICAgcmVxdWVzdGVkTnVtUGFnZXMgPSAwOwogICAgICAgICAK
LSAgICAgICAgRVhQRUNUX1RSVUUoIWFsbG9jYXRvci0+YWxsb2NhdGUoKGRlZmF1bHRQYWdlc0lu
SGVhcCArIG51bVBhZ2VzKSAqIHBhZ2VTaXplKCksIDApKTsKKyAgICAgICAgRVhQRUNUX1RSVUUo
IWFsbG9jYXRvci0+YWxsb2NhdGUoKGRlZmF1bHRQYWdlc0luSGVhcCArIG51bVBhZ2VzKSAqIHBh
Z2VTaXplKCkpKTsKIAogICAgICAgICBmcmVlKGZpcnN0SGFuZGxlKTsKICAgICAgICAgZnJlZShz
ZWNvbmRIYW5kbGUpOwogICAgICAgICAKLSAgICAgICAgRVhQRUNUX1RSVUUoIWFsbG9jYXRvci0+
YWxsb2NhdGUoKGRlZmF1bHRQYWdlc0luSGVhcCArIG51bVBhZ2VzKSAqIHBhZ2VTaXplKCksIDAp
KTsKKyAgICAgICAgRVhQRUNUX1RSVUUoIWFsbG9jYXRvci0+YWxsb2NhdGUoKGRlZmF1bHRQYWdl
c0luSGVhcCArIG51bVBhZ2VzKSAqIHBhZ2VTaXplKCkpKTsKICAgICAgICAgCiAgICAgICAgIGZp
cnN0SGFuZGxlID0gYWxsb2NhdGUoZmlyc3RTaXplKTsKICAgICAgICAgc2Vjb25kSGFuZGxlID0g
YWxsb2NhdGUoc2Vjb25kU2l6ZSk7CkBAIC02NzEsNyArNjcyLDcgQEAgVEVTVF9GKE1ldGFBbGxv
Y2F0b3JUZXN0LCBBbGxvY1plcm8pICAgIAogICAgIC8vIFRlc3RzIHRoYXQgYWxsb2NhdGluZyBh
IHplcm8tbGVuZ3RoIGJsb2NrIHJldHVybnMgMCBhbmQKICAgICAvLyBkb2VzIG5vdCBjaGFuZ2Ug
YW55dGhpbmcgaW4gbWVtb3J5LgogICAgIAotICAgIEFTU0VSVCghYWxsb2NhdG9yLT5hbGxvY2F0
ZSgwLCAwKSk7CisgICAgQVNTRVJUKCFhbGxvY2F0b3ItPmFsbG9jYXRlKDApKTsKICAgICAKICAg
ICBNZXRhQWxsb2NhdG9ySGFuZGxlKiBmaW5hbCA9IGFsbG9jYXRlKGRlZmF1bHRQYWdlc0luSGVh
cCAqIHBhZ2VTaXplKCkpOwogICAgIEVYUEVDVF9FUShmaW5hbC0+c3RhcnQoKS51bnRhZ2dlZFB0
cigpLCByZWludGVycHJldF9jYXN0PHZvaWQqPihiYXNlUGFnZSAqIHBhZ2VTaXplKCkpKTsKSW5k
ZXg6IFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV1RGL1JlZEJsYWNrVHJlZS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XVEYvUmVkQmxhY2tUcmVlLmNwcAko
cmV2aXNpb24gMjU4OTk2KQorKysgVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XVEYvUmVkQmxh
Y2tUcmVlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDExLCAyMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjcsNiArMjcsNyBAQAogICovCiAKICNpbmNsdWRl
ICJjb25maWcuaCIKKyNpbmNsdWRlIDx3dGYvSGFzaFNldC5oPgogI2luY2x1ZGUgPHd0Zi9SZWRC
bGFja1RyZWUuaD4KICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CiAKQEAgLTMxOSw0ICszMjAsODUg
QEAgVEVTVF9GKFJlZEJsYWNrVHJlZVRlc3QsIEJpZ2dlckJlc3RGaXRTZQogICAgIHRlc3REcml2
ZXIoIitkK2QrZCtkK2QrZCtkK2QrZCtkK2YrZitmK2YrZitmK2YraCtoK2kraitrK2wrbStvK3Ar
cStyK3pAYUBiQGNAZEBlQGZAZ0BoQGlAakBrQGxAbUBuQG9AcEBxQHJAc0B0QHVAdkB3QHhAeUB6
Iik7CiB9CiAKK1RFU1RfRihSZWRCbGFja1RyZWVUZXN0LCBJdGVyYXRlKQoreworICAgIGNsYXNz
IE5vZGUgOiBwdWJsaWMgUmVkQmxhY2tUcmVlPE5vZGUsIHVuc2lnbmVkPjo6Tm9kZSB7CisgICAg
cHVibGljOgorICAgICAgICB1bnNpZ25lZCB2YWx1ZTsKKyAgICAgICAgdW5zaWduZWQga2V5KCkg
eyByZXR1cm4gdmFsdWU7IH0KKyAgICB9OworCisgICAgSGFzaFNldDx1bnNpZ25lZD4gaXRlbXM7
CisgICAgaXRlbXMuYWRkKDIpOworICAgIGl0ZW1zLmFkZCg0Mik7CisgICAgaXRlbXMuYWRkKDQ4
KTsKKyAgICBpdGVtcy5hZGQoNTUpOworICAgIGl0ZW1zLmFkZCg3Myk7CisgICAgaXRlbXMuYWRk
KDEwNSk7CisgICAgaXRlbXMuYWRkKDIwMCk7CisgICAgaXRlbXMuYWRkKDI1MCk7CisgICAgaXRl
bXMuYWRkKDMwMCk7CisKKyAgICBSZWRCbGFja1RyZWU8Tm9kZSwgdW5zaWduZWQ+IHRyZWU7Cisg
ICAgZm9yICh1bnNpZ25lZCB2YWx1ZSA6IGl0ZW1zKSB7CisgICAgICAgIE5vZGUqIG5vZGUgPSBu
ZXcgTm9kZTsKKyAgICAgICAgbm9kZS0+dmFsdWUgPSB2YWx1ZTsKKyAgICAgICAgdHJlZS5pbnNl
cnQobm9kZSk7CisgICAgfQorCisgICAgeworICAgICAgICBIYXNoU2V0PHVuc2lnbmVkPiB0ZXN0
SXRlbXM7CisgICAgICAgIHRyZWUuaXRlcmF0ZShbJl0gKE5vZGUmIG5vZGUsIGJvb2wmIGl0ZXJh
dGVMZWZ0LCBib29sJiBpdGVyYXRlUmlnaHQpIHsKKyAgICAgICAgICAgIHRlc3RJdGVtcy5hZGQo
bm9kZS52YWx1ZSk7CisgICAgICAgICAgICBpdGVyYXRlTGVmdCA9IHRydWU7CisgICAgICAgICAg
ICBpdGVyYXRlUmlnaHQgPSB0cnVlOworICAgICAgICB9KTsKKworICAgICAgICBFWFBFQ1RfRVEo
aXRlbXMsIHRlc3RJdGVtcyk7CisgICAgfQorCisgICAgeworICAgICAgICBIYXNoU2V0PHVuc2ln
bmVkPiBsZXNzVGhhbk9yRXF1YWw3MzsKKyAgICAgICAgdHJlZS5pdGVyYXRlKFsmXSAoTm9kZSYg
bm9kZSwgYm9vbCYgaXRlcmF0ZUxlZnQsIGJvb2wmIGl0ZXJhdGVSaWdodCkgeworICAgICAgICAg
ICAgaWYgKG5vZGUudmFsdWUgPCA3MykgeworICAgICAgICAgICAgICAgIGl0ZXJhdGVSaWdodCA9
IHRydWU7CisgICAgICAgICAgICAgICAgaXRlcmF0ZUxlZnQgPSB0cnVlOworICAgICAgICAgICAg
fSBlbHNlCisgICAgICAgICAgICAgICAgaXRlcmF0ZUxlZnQgPSB0cnVlOworCisgICAgICAgICAg
ICBpZiAobm9kZS52YWx1ZSA8PSA3MykKKyAgICAgICAgICAgICAgICBsZXNzVGhhbk9yRXF1YWw3
My5hZGQobm9kZS52YWx1ZSk7CisgICAgICAgIH0pOworCisgICAgICAgIEVYUEVDVF9FUShsZXNz
VGhhbk9yRXF1YWw3My5zaXplKCksIHN0YXRpY19jYXN0PHNpemVfdD4oNSkpOworICAgICAgICBF
WFBFQ1RfVFJVRShsZXNzVGhhbk9yRXF1YWw3My5jb250YWlucygyKSk7CisgICAgICAgIEVYUEVD
VF9UUlVFKGxlc3NUaGFuT3JFcXVhbDczLmNvbnRhaW5zKDQyKSk7CisgICAgICAgIEVYUEVDVF9U
UlVFKGxlc3NUaGFuT3JFcXVhbDczLmNvbnRhaW5zKDQ4KSk7CisgICAgICAgIEVYUEVDVF9UUlVF
KGxlc3NUaGFuT3JFcXVhbDczLmNvbnRhaW5zKDU1KSk7CisgICAgICAgIEVYUEVDVF9UUlVFKGxl
c3NUaGFuT3JFcXVhbDczLmNvbnRhaW5zKDczKSk7CisgICAgfQorCisgICAgeworICAgICAgICBI
YXNoU2V0PHVuc2lnbmVkPiBncmVhdGVyVGhhbjU1OworICAgICAgICB0cmVlLml0ZXJhdGUoWyZd
IChOb2RlJiBub2RlLCBib29sJiBpdGVyYXRlTGVmdCwgYm9vbCYgaXRlcmF0ZVJpZ2h0KSB7Cisg
ICAgICAgICAgICBpZiAobm9kZS52YWx1ZSA8PSA1NSkKKyAgICAgICAgICAgICAgICBpdGVyYXRl
UmlnaHQgPSB0cnVlOworICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgaXRlcmF0
ZUxlZnQgPSB0cnVlOworICAgICAgICAgICAgICAgIGl0ZXJhdGVSaWdodCA9IHRydWU7CisgICAg
ICAgICAgICB9CisKKyAgICAgICAgICAgIGlmIChub2RlLnZhbHVlID4gNTUpCisgICAgICAgICAg
ICAgICAgZ3JlYXRlclRoYW41NS5hZGQobm9kZS52YWx1ZSk7CisgICAgICAgIH0pOworCisgICAg
ICAgIEVYUEVDVF9FUShncmVhdGVyVGhhbjU1LnNpemUoKSwgc3RhdGljX2Nhc3Q8c2l6ZV90Pig1
KSk7CisgICAgICAgIEVYUEVDVF9UUlVFKGdyZWF0ZXJUaGFuNTUuY29udGFpbnMoNzMpKTsKKyAg
ICAgICAgRVhQRUNUX1RSVUUoZ3JlYXRlclRoYW41NS5jb250YWlucygxMDUpKTsKKyAgICAgICAg
RVhQRUNUX1RSVUUoZ3JlYXRlclRoYW41NS5jb250YWlucygyMDApKTsKKyAgICAgICAgRVhQRUNU
X1RSVUUoZ3JlYXRlclRoYW41NS5jb250YWlucygyNTApKTsKKyAgICAgICAgRVhQRUNUX1RSVUUo
Z3JlYXRlclRoYW41NS5jb250YWlucygzMDApKTsKKyAgICB9Cit9CisKIH0gLy8gbmFtZXNwYWNl
IFRlc3RXZWJLaXRBUEkK
</data>

          </attachment>
      

    </bug>

</bugzilla>