<?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>196387</bug_id>
          
          <creation_ts>2019-03-28 19:30:06 -0700</creation_ts>
          <short_desc>Teach Call ICs how to call Wasm</short_desc>
          <delta_ts>2019-04-04 14:39:34 -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>196624</dependson>
          <blocked>196385</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Saam Barati">saam</reporter>
          <assigned_to name="Saam Barati">saam</assigned_to>
          <cc>benjamin</cc>
    
    <cc>commit-queue</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>fpizlo</cc>
    
    <cc>ggaren</cc>
    
    <cc>gskachkov</cc>
    
    <cc>guijemont</cc>
    
    <cc>keith_miller</cc>
    
    <cc>mark.lam</cc>
    
    <cc>msaboff</cc>
    
    <cc>rmorisset</cc>
    
    <cc>ticaiolima</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>1522333</commentid>
    <comment_count>0</comment_count>
    <who name="Saam Barati">saam</who>
    <bug_when>2019-03-28 19:30:06 -0700</bug_when>
    <thetext>...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1523124</commentid>
    <comment_count>1</comment_count>
      <attachid>366440</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2019-04-01 16:27:15 -0700</bug_when>
    <thetext>Created attachment 366440
WIP

almost 2x faster on richards-wasm

I still need to make the code correct in the common case, e.g, teach the unwinder how to unwind past these frames and read callee saves, and restore wasm context</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1523175</commentid>
    <comment_count>2</comment_count>
      <attachid>366455</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2019-04-01 19:24:55 -0700</bug_when>
    <thetext>Created attachment 366455
WIP</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1523178</commentid>
    <comment_count>3</comment_count>
      <attachid>366457</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2019-04-01 19:29:40 -0700</bug_when>
    <thetext>Created attachment 366457
WIP</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1523433</commentid>
    <comment_count>4</comment_count>
      <attachid>366532</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2019-04-02 13:42:55 -0700</bug_when>
    <thetext>Created attachment 366532
WIP

Wasm tests appear to pass</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1523434</commentid>
    <comment_count>5</comment_count>
    <who name="Saam Barati">saam</who>
    <bug_when>2019-04-02 13:43:22 -0700</bug_when>
    <thetext>I now need to make polymorphic calls work.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1523486</commentid>
    <comment_count>6</comment_count>
      <attachid>366541</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2019-04-02 14:49:30 -0700</bug_when>
    <thetext>Created attachment 366541
WIP

now with polymorphic ICs</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1523587</commentid>
    <comment_count>7</comment_count>
      <attachid>366571</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2019-04-02 20:15:42 -0700</bug_when>
    <thetext>Created attachment 366571
WIP

Almost done. Just need to clean up a few things.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1524032</commentid>
    <comment_count>8</comment_count>
      <attachid>366667</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2019-04-03 16:30:30 -0700</bug_when>
    <thetext>Created attachment 366667
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1524033</commentid>
    <comment_count>9</comment_count>
    <who name="EWS Watchlist">ews-watchlist</who>
    <bug_when>2019-04-03 16:32:22 -0700</bug_when>
    <thetext>Attachment 366667 did not pass style-queue:


ERROR: Source/JavaScriptCore/wasm/js/WebAssemblyFunctionHeapCellType.cpp:32:  Alphabetical sorting problem.  [build/include_order] [4]
Total errors found: 1 in 34 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1524045</commentid>
    <comment_count>10</comment_count>
      <attachid>366667</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2019-04-03 16:47:37 -0700</bug_when>
    <thetext>Comment on attachment 366667
patch

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

&gt; Source/JavaScriptCore/jit/Repatch.cpp:1151
&gt; -            codePtr = variant.executable()-&gt;generatedJITCodeForCall()-&gt;addressForCall(ArityCheckNotRequired);
&gt; +
&gt; +#if ENABLE(WEBASSEMBLY)
&gt; +            if (callLinkInfo.specializationKind() == CodeForCall) {
&gt; +                if (JSFunction* function = variant.function()) {
&gt; +                    if (auto* wasmFunction = jsDynamicCast&lt;WebAssemblyFunction*&gt;(vm, function))
&gt; +                        codePtr = wasmFunction-&gt;jsCallEntrypoint();
&gt; +                }
&gt; +            }
&gt; +#endif
&gt; +
&gt; +            if (!codePtr)
&gt; +                codePtr = variant.executable()-&gt;generatedJITCodeForCall()-&gt;addressForCall(ArityCheckNotRequired);

Seems like we write this code or some variant of it in multiple places.

Helper?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1524048</commentid>
    <comment_count>11</comment_count>
      <attachid>366667</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2019-04-03 16:50:46 -0700</bug_when>
    <thetext>Comment on attachment 366667
patch

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

&gt;&gt; Source/JavaScriptCore/jit/Repatch.cpp:1151
&gt;&gt; +                codePtr = variant.executable()-&gt;generatedJITCodeForCall()-&gt;addressForCall(ArityCheckNotRequired);
&gt; 
&gt; Seems like we write this code or some variant of it in multiple places.
&gt; 
&gt; Helper?

Thanks for the review. Will fix.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1524060</commentid>
    <comment_count>12</comment_count>
      <attachid>366674</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2019-04-03 17:07:48 -0700</bug_when>
    <thetext>Created attachment 366674
patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1524325</commentid>
    <comment_count>13</comment_count>
      <attachid>366730</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2019-04-04 11:14:02 -0700</bug_when>
    <thetext>Created attachment 366730
patch for landing

With windows build fix.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1524328</commentid>
    <comment_count>14</comment_count>
    <who name="Saam Barati">saam</who>
    <bug_when>2019-04-04 11:18:46 -0700</bug_when>
    <thetext>This is also a 12% speedup on https://pspdfkit.com/webassembly-benchmark/</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1524341</commentid>
    <comment_count>15</comment_count>
      <attachid>366730</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2019-04-04 11:54:22 -0700</bug_when>
    <thetext>Comment on attachment 366730
patch for landing

Clearing flags on attachment: 366730

Committed r243886: &lt;https://trac.webkit.org/changeset/243886&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1524342</commentid>
    <comment_count>16</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2019-04-04 11:54:23 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1524347</commentid>
    <comment_count>17</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2019-04-04 12:02:20 -0700</bug_when>
    <thetext>&lt;rdar://problem/49616723&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1524407</commentid>
    <comment_count>18</comment_count>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2019-04-04 13:42:19 -0700</bug_when>
    <thetext>Committed r243898: &lt;https://trac.webkit.org/changeset/243898&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1524413</commentid>
    <comment_count>19</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2019-04-04 13:50:35 -0700</bug_when>
    <thetext>Re-opened since this is blocked by bug 196624</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1524445</commentid>
    <comment_count>20</comment_count>
    <who name="Saam Barati">saam</who>
    <bug_when>2019-04-04 14:25:11 -0700</bug_when>
    <thetext>Will land cloop build fix momentarily</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1524449</commentid>
    <comment_count>21</comment_count>
    <who name="Saam Barati">saam</who>
    <bug_when>2019-04-04 14:39:34 -0700</bug_when>
    <thetext>CLoop build fix:
http://trac.webkit.org/changeset/243907/webkit</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>366440</attachid>
            <date>2019-04-01 16:27:15 -0700</date>
            <delta_ts>2019-04-01 19:24:55 -0700</delta_ts>
            <desc>WIP</desc>
            <filename>b-backup.diff</filename>
            <type>text/plain</type>
            <size>27260</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFBlcmZvcm1hbmNlVGVzdHMvSmV0U3RyZWFtMi9KZXRTdHJlYW1Ecml2ZXIuanMKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gUGVyZm9ybWFuY2VUZXN0cy9KZXRTdHJlYW0yL0pldFN0cmVhbURyaXZlci5q
cwkocmV2aXNpb24gMjQzNjM1KQorKysgUGVyZm9ybWFuY2VUZXN0cy9KZXRTdHJlYW0yL0pldFN0
cmVhbURyaXZlci5qcwkod29ya2luZyBjb3B5KQpAQCAtNzkzLDExICs3OTMsMTEgQEAgY2xhc3Mg
V2FzbUJlbmNobWFyayBleHRlbmRzIEJlbmNobWFyayB7CiAgICAgICAgICAgICAgICAgICAgIGNv
bnNvbGUubG9nKCdJbnRlcmNlcHRlZCBxdWl0L2Fib3J0Jyk7CiAgICAgICAgICAgICB9OwogCi0g
ICAgICAgICAgICBvbGRQcmludCA9IGdsb2JhbE9iamVjdC5wcmludDsKLSAgICAgICAgICAgIGds
b2JhbE9iamVjdC5wcmludCA9IGdsb2JhbE9iamVjdC5wcmludEVyciA9ICguLi5hcmdzKSA9PiB7
Ci0gICAgICAgICAgICAgICAgaWYgKHZlcmJvc2UpCi0gICAgICAgICAgICAgICAgICAgIGNvbnNv
bGUubG9nKCdJbnRlcmNlcHRlZCBwcmludDogJywgLi4uYXJncyk7Ci0gICAgICAgICAgICB9Owor
ICAgICAgICAgICAgLy9vbGRQcmludCA9IGdsb2JhbE9iamVjdC5wcmludDsKKyAgICAgICAgICAg
IC8vZ2xvYmFsT2JqZWN0LnByaW50ID0gZ2xvYmFsT2JqZWN0LnByaW50RXJyID0gKC4uLmFyZ3Mp
ID0+IHsKKyAgICAgICAgICAgIC8vICAgIGlmICh2ZXJib3NlKQorICAgICAgICAgICAgLy8gICAg
ICAgIGNvbnNvbGUubG9nKCdJbnRlcmNlcHRlZCBwcmludDogJywgLi4uYXJncyk7CisgICAgICAg
ICAgICAvL307CiAKICAgICAgICAgICAgIGxldCBNb2R1bGUgPSB7CiAgICAgICAgICAgICAgICAg
cHJlUnVuOiBbXSwKSW5kZXg6IFBlcmZvcm1hbmNlVGVzdHMvSmV0U3RyZWFtMi9jbGkuanMKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gUGVyZm9ybWFuY2VUZXN0cy9KZXRTdHJlYW0yL2NsaS5qcwkocmV2aXNpb24g
MjQzNjM1KQorKysgUGVyZm9ybWFuY2VUZXN0cy9KZXRTdHJlYW0yL2NsaS5qcwkod29ya2luZyBj
b3B5KQpAQCAtMjgsNiArMjgsOCBAQCBjb25zb2xlID0gewogICAgIGxvZzogcHJpbnQKIH0KIAor
dGVzdExpc3QgPSBbInJpY2hhcmRzLXdhc20iXTsKKwogaWYgKHR5cGVvZiB0ZXN0TGlzdCA9PT0g
InVuZGVmaW5lZCIpCiAgICAgdGVzdExpc3QgPSB1bmRlZmluZWQ7CiAKSW5kZXg6IFBlcmZvcm1h
bmNlVGVzdHMvSmV0U3RyZWFtMi93YXNtL3JpY2hhcmRzLmpzCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFBlcmZv
cm1hbmNlVGVzdHMvSmV0U3RyZWFtMi93YXNtL3JpY2hhcmRzLmpzCShyZXZpc2lvbiAyNDM2MzUp
CisrKyBQZXJmb3JtYW5jZVRlc3RzL0pldFN0cmVhbTIvd2FzbS9yaWNoYXJkcy5qcwkod29ya2lu
ZyBjb3B5KQpAQCAtOTQ2LDcgKzk0Niw4IEBAIHZhciBfbWVtc2V0ID0gTW9kdWxlWyJfbWVtc2V0
Il0gPSAoZnVuY3QKIHZhciBfc2JyayA9IE1vZHVsZVsiX3NicmsiXSA9IChmdW5jdGlvbigpIHsK
ICByZXR1cm4gTW9kdWxlWyJhc20iXVsiX3NicmsiXS5hcHBseShudWxsLCBhcmd1bWVudHMpOwog
fSk7Ci12YXIgX3NjaGVkdWxlSXRlciA9IE1vZHVsZVsiX3NjaGVkdWxlSXRlciJdID0gKGZ1bmN0
aW9uKCkgewordmFyIF9zY2hlZHVsZUl0ZXIgPSBNb2R1bGVbIl9zY2hlZHVsZUl0ZXIiXSA9IChm
dW5jdGlvbiBmb29CYXJCYXooKSB7CisgLy9yZXR1cm4gTW9kdWxlWyJhc20iXVsiX3NjaGVkdWxl
SXRlciJdKCk7CiAgcmV0dXJuIE1vZHVsZVsiYXNtIl1bIl9zY2hlZHVsZUl0ZXIiXS5hcHBseShu
dWxsLCBhcmd1bWVudHMpOwogfSk7CiB2YXIgX3NldHVwID0gTW9kdWxlWyJfc2V0dXAiXSA9IChm
dW5jdGlvbigpIHsKQEAgLTExMDYsOCArMTEwNyw5IEBAIGZ1bmN0aW9uIHJ1blJpY2hhcmRzKCkg
ewogICAgIGZvciAobGV0IGkgPSAwOyBpIDwgNDsgKytpKSB7CiAgICAgICAgIE1vZHVsZS5fc2V0
dXAoKTsKICAgICAgICAgd2hpbGUgKHNjaGVkdWxlSXRlcigpKSB7IH0KLSAgICAgICAgaWYgKE1v
ZHVsZS5fZ2V0UXBrdGNvdW50KCkgIT09IDIzMjY0MTAgfHwgTW9kdWxlLl9nZXRIb2xkY291bnQo
KSAhPT0gOTMwNTYzKQorICAgICAgICBpZiAoTW9kdWxlLl9nZXRRcGt0Y291bnQoKSAhPT0gMjMy
NjQxMCB8fCBNb2R1bGUuX2dldEhvbGRjb3VudCgpICE9PSA5MzA1NjMpIHsKKyAgICAgICAgICAg
IHByaW50KCJCYWQgcmVzdWx0OiAiLCBNb2R1bGUuX2dldFFwa3Rjb3VudCgpLCAiICIsIE1vZHVs
ZS5fZ2V0SG9sZGNvdW50KCkpOwogICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJCYWQgcmlj
aGFyZHMgcmVzdWx0ISIpOworICAgICAgICB9CiAgICAgfQogfQotCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyQ29kZVJlZi5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJDb2RlUmVm
LmgJKHJldmlzaW9uIDI0MzYzNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIv
TWFjcm9Bc3NlbWJsZXJDb2RlUmVmLmgJKHdvcmtpbmcgY29weSkKQEAgLTM4MCw2ICszODAsMTQg
QEAgcHVibGljOgogICAgICAgICBBU1NFUlQobV9leGVjdXRhYmxlTWVtb3J5LT5zdGFydCgpKTsK
ICAgICAgICAgQVNTRVJUKG1fY29kZVB0cik7CiAgICAgfQorCisgICAgdGVtcGxhdGU8UHRyVGFn
IG90aGVyVGFnPgorICAgIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiYgb3BlcmF0b3I9KGNvbnN0IE1h
Y3JvQXNzZW1ibGVyQ29kZVJlZjxvdGhlclRhZz4mIG90aGVyQ29kZVJlZikKKyAgICB7CisgICAg
ICAgIG1fY29kZVB0ciA9IE1hY3JvQXNzZW1ibGVyQ29kZVB0cjx0YWc+OjpjcmVhdGVGcm9tRXhl
Y3V0YWJsZUFkZHJlc3Mob3RoZXJDb2RlUmVmLmNvZGUoKS50ZW1wbGF0ZSByZXRhZ2dlZEV4ZWN1
dGFibGVBZGRyZXNzPHRhZz4oKSk7CisgICAgICAgIG1fZXhlY3V0YWJsZU1lbW9yeSA9IG90aGVy
Q29kZVJlZi5tX2V4ZWN1dGFibGVNZW1vcnk7CisgICAgICAgIHJldHVybiAqdGhpczsKKyAgICB9
CiAgICAgCiAgICAgLy8gVXNlIHRoaXMgb25seSB3aGVuIHlvdSBrbm93IHRoYXQgdGhlIGNvZGVQ
dHIgcmVmZXJzIHRvIGNvZGUgdGhhdCBpcwogICAgIC8vIGFscmVhZHkgYmVpbmcga2VwdCBhbGl2
ZSB0aHJvdWdoIHNvbWUgb3RoZXIgbWVhbnMuIFR5cGljYWxseSB0aGlzIG1lYW5zCkBAIC00NDMs
OSArNDUxLDkgQEAgcHVibGljOgogcHJpdmF0ZToKICAgICB0ZW1wbGF0ZTxQdHJUYWcgb3RoZXJU
YWc+CiAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmKGNvbnN0IE1hY3JvQXNzZW1ibGVyQ29kZVJl
ZjxvdGhlclRhZz4mIG90aGVyQ29kZVJlZikKLSAgICAgICAgOiBtX2NvZGVQdHIoTWFjcm9Bc3Nl
bWJsZXJDb2RlUHRyPHRhZz46OmNyZWF0ZUZyb21FeGVjdXRhYmxlQWRkcmVzcyhvdGhlckNvZGVS
ZWYuY29kZSgpLnRlbXBsYXRlIHJldGFnZ2VkRXhlY3V0YWJsZUFkZHJlc3M8dGFnPigpKSkKLSAg
ICAgICAgLCBtX2V4ZWN1dGFibGVNZW1vcnkob3RoZXJDb2RlUmVmLm1fZXhlY3V0YWJsZU1lbW9y
eSkKLSAgICB7IH0KKyAgICB7CisgICAgICAgICp0aGlzID0gb3RoZXJDb2RlUmVmOworICAgIH0K
IAogICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0cjx0YWc+IG1fY29kZVB0cjsKICAgICBSZWZQdHI8
RXhlY3V0YWJsZU1lbW9yeUhhbmRsZT4gbV9leGVjdXRhYmxlTWVtb3J5OwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHAJKHJldmlzaW9u
IDI0MzYzNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNzM2LDYgKzE3MzYsMTUgQEAgQnl0ZUNvZGVQYXJzZXI6
OkNhbGxPcHRpbWl6YXRpb25SZXN1bHQgQgogICAgICAgICB9CiAgICAgfTsKIAorICAgIC8qCisg
ICAgaWYgKE5hdGl2ZUV4ZWN1dGFibGUqIGV4ZWN1dGFibGUgPSBjYWxsZWUubmF0aXZlRXhlY3V0
YWJsZSgpKSB7CisgICAgICAgIGRhdGFMb2dMbigiTmF0aXZlIGV4ZWN1dGFibGVyIDogIiwgUmF3
UG9pbnRlcihleGVjdXRhYmxlKSk7CisgICAgICAgIGlmIChXZWJBc3NlbWJseUZ1bmN0aW9uKiBm
ID0gZXhlY3V0YWJsZS0+d2ViQXNzZW1ibHlGdW5jdGlvbigpKSB7CisgICAgICAgICAgICBkYXRh
TG9nTG4oIkhhdmUgd2FzbSBmdW5jdGlvbiE6ICIsIFJhd1BvaW50ZXIoZikpOworICAgICAgICB9
CisgICAgfQorICAgICovCisKICAgICBpZiAoSW50ZXJuYWxGdW5jdGlvbiogZnVuY3Rpb24gPSBj
YWxsZWUuaW50ZXJuYWxGdW5jdGlvbigpKSB7CiAgICAgICAgIGlmIChoYW5kbGVDb25zdGFudElu
dGVybmFsRnVuY3Rpb24oY2FsbFRhcmdldE5vZGUsIHJlc3VsdCwgZnVuY3Rpb24sIHJlZ2lzdGVy
T2Zmc2V0LCBhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcywgc3BlY2lhbGl6YXRpb25LaW5kLCBw
cmVkaWN0aW9uLCBpbnNlcnRDaGVja3NXaXRoQWNjb3VudGluZykpIHsKICAgICAgICAgICAgIGVu
ZFNwZWNpYWxDYXNlKCk7CkBAIC0xODAwLDYgKzE4MDksMTQgQEAgYm9vbCBCeXRlQ29kZVBhcnNl
cjo6aGFuZGxlVmFyYXJnc0lubGluaQogICAgICAgICBtYW5kYXRvcnlNaW5pbXVtID0gZnVuY3Rp
b25FeGVjdXRhYmxlLT5wYXJhbWV0ZXJDb3VudCgpOwogICAgIGVsc2UKICAgICAgICAgbWFuZGF0
b3J5TWluaW11bSA9IDA7CisKKyAgICAvKgorICAgIGlmIChOYXRpdmVFeGVjdXRhYmxlKiBleGVj
dXRhYmxlID0gY2FsbFZhcmlhbnQubmF0aXZlRXhlY3V0YWJsZSgpKSB7CisgICAgICAgIGlmIChX
ZWJBc3NlbWJseUZ1bmN0aW9uKiBmID0gZXhlY3V0YWJsZS0+d2ViQXNzZW1ibHlGdW5jdGlvbigp
KSB7CisgICAgICAgICAgICBkYXRhTG9nTG4oIkhhdmUgd2FzbSBmdW5jdGlvbiB2YXJhcmdzOiAi
LCBSYXdQb2ludGVyKGYpKTsKKyAgICAgICAgfQorICAgIH0KKyAgICAqLwogICAgIAogICAgIC8v
IGluY2x1ZGVzICJ0aGlzIgogICAgIHVuc2lnbmVkIG1heE51bUFyZ3VtZW50cyA9IHN0ZDo6bWF4
KGNhbGxMaW5rU3RhdHVzLm1heE51bUFyZ3VtZW50cygpLCBtYW5kYXRvcnlNaW5pbXVtICsgMSk7
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1N0cmVuZ3RoUmVkdWN0aW9uUGhh
c2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3RyZW5n
dGhSZWR1Y3Rpb25QaGFzZS5jcHAJKHJldmlzaW9uIDI0MzYzNSkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHU3RyZW5ndGhSZWR1Y3Rpb25QaGFzZS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTM5LDYgKzM5LDcgQEAKICNpbmNsdWRlICJNYXRoQ29tbW9uLmgiCiAjaW5jbHVkZSAiUmVn
RXhwT2JqZWN0LmgiCiAjaW5jbHVkZSAiU3RyaW5nUHJvdG90eXBlLmgiCisjaW5jbHVkZSAiV2Vi
QXNzZW1ibHlGdW5jdGlvbi5oIgogI2luY2x1ZGUgPGNzdGRsaWI+CiAjaW5jbHVkZSA8d3RmL3Rl
eHQvU3RyaW5nQnVpbGRlci5oPgogCkBAIC05MTYsNiArOTE3LDkgQEAgcHJpdmF0ZToKICAgICAg
ICAgICAgIEVkZ2UgY2FsbGVlID0gbV9ncmFwaC52YXJBcmdDaGlsZChtX25vZGUsIDApOwogICAg
ICAgICAgICAgQ2FsbFZhcmlhbnQgY2FsbFZhcmlhbnQ7CiAgICAgICAgICAgICBpZiAoSlNGdW5j
dGlvbiogZnVuY3Rpb24gPSBjYWxsZWUtPmR5bmFtaWNDYXN0Q29uc3RhbnQ8SlNGdW5jdGlvbio+
KHZtKCkpKSB7CisgICAgICAgICAgICAgICAgaWYgKGpzRHluYW1pY0Nhc3Q8V2ViQXNzZW1ibHlG
dW5jdGlvbkJhc2UqPih2bSgpLCBmdW5jdGlvbikpCisgICAgICAgICAgICAgICAgICAgIGRhdGFM
b2dMbigiV2FzbSBkaXJlY3QgY2FsbCEiKTsKKwogICAgICAgICAgICAgICAgIGV4ZWN1dGFibGUg
PSBmdW5jdGlvbi0+ZXhlY3V0YWJsZSgpOwogICAgICAgICAgICAgICAgIGNhbGxWYXJpYW50ID0g
Q2FsbFZhcmlhbnQoZnVuY3Rpb24pOwogICAgICAgICAgICAgfSBlbHNlIGlmIChjYWxsZWUtPmlz
RnVuY3Rpb25BbGxvY2F0aW9uKCkpIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
SklUT3BlcmF0aW9ucy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9KSVRPcGVyYXRpb25zLmNwcAkocmV2aXNpb24gMjQzNjM1KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9KSVRPcGVyYXRpb25zLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzYsNiArNzYs
NyBAQAogI2luY2x1ZGUgIlRodW5rR2VuZXJhdG9ycy5oIgogI2luY2x1ZGUgIlR5cGVQcm9maWxl
ckxvZy5oIgogI2luY2x1ZGUgIlZNSW5saW5lcy5oIgorI2luY2x1ZGUgIldlYkFzc2VtYmx5RnVu
Y3Rpb24uaCIKICNpbmNsdWRlIDx3dGYvSW5saW5lQVNNLmg+CiAKIG5hbWVzcGFjZSBKU0MgewpA
QCAtMTAzNiw5ICsxMDM3LDE3IEBAIFNsb3dQYXRoUmV0dXJuVHlwZSBKSVRfT1BFUkFUSU9OIG9w
ZXJhdGkKIAogICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxKU0VudHJ5UHRyVGFnPiBjb2RlUHRy
OwogICAgIENvZGVCbG9jayogY29kZUJsb2NrID0gbnVsbHB0cjsKLSAgICBpZiAoZXhlY3V0YWJs
ZS0+aXNIb3N0RnVuY3Rpb24oKSkKLSAgICAgICAgY29kZVB0ciA9IGV4ZWN1dGFibGUtPmVudHJ5
cG9pbnRGb3Ioa2luZCwgTXVzdENoZWNrQXJpdHkpOwotICAgIGVsc2UgeworICAgIGlmIChleGVj
dXRhYmxlLT5pc0hvc3RGdW5jdGlvbigpKSB7CisjaWYgRU5BQkxFKFdFQkFTU0VNQkxZKQorICAg
ICAgICBpZiAoYXV0byogd2FzbUZ1bmN0aW9uID0ganNEeW5hbWljQ2FzdDxXZWJBc3NlbWJseUZ1
bmN0aW9uKj4oKnZtLCBjYWxsZWUpKSB7CisgICAgICAgICAgICBjb2RlUHRyID0gd2FzbUZ1bmN0
aW9uLT5qc0NhbGxFbnRyeXBvaW50KCk7CisgICAgICAgICAgICBkYXRhTG9nTG4oIklDaW5nIHdh
c20hIik7CisgICAgICAgIH0KKyNlbmRpZgorCisgICAgICAgIGlmICghY29kZVB0cikKKyAgICAg
ICAgICAgIGNvZGVQdHIgPSBleGVjdXRhYmxlLT5lbnRyeXBvaW50Rm9yKGtpbmQsIE11c3RDaGVj
a0FyaXR5KTsKKyAgICB9IGVsc2UgewogICAgICAgICBGdW5jdGlvbkV4ZWN1dGFibGUqIGZ1bmN0
aW9uRXhlY3V0YWJsZSA9IHN0YXRpY19jYXN0PEZ1bmN0aW9uRXhlY3V0YWJsZSo+KGV4ZWN1dGFi
bGUpOwogCiAgICAgICAgIGF1dG8gaGFuZGxlVGhyb3dFeGNlcHRpb24gPSBbJl0gKCkgewpAQCAt
MTA2NCw2ICsxMDczLDcgQEAgU2xvd1BhdGhSZXR1cm5UeXBlIEpJVF9PUEVSQVRJT04gb3BlcmF0
aQogICAgICAgICAgICAgYXJpdHkgPSBBcml0eUNoZWNrTm90UmVxdWlyZWQ7CiAgICAgICAgIGNv
ZGVQdHIgPSBmdW5jdGlvbkV4ZWN1dGFibGUtPmVudHJ5cG9pbnRGb3Ioa2luZCwgYXJpdHkpOwog
ICAgIH0KKwogICAgIGlmICghY2FsbExpbmtJbmZvLT5zZWVuT25jZSgpKQogICAgICAgICBjYWxs
TGlua0luZm8tPnNldFNlZW4oKTsKICAgICBlbHNlCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9OYXRpdmVFeGVjdXRhYmxlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9OYXRpdmVFeGVjdXRhYmxlLmNwcAkocmV2aXNpb24gMjQzNjM1
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTmF0aXZlRXhlY3V0YWJsZS5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTM0LDYgKzM0LDcgQEAKICNpbmNsdWRlICJQYXJzZXIuaCIKICNp
bmNsdWRlICJUeXBlUHJvZmlsZXIuaCIKICNpbmNsdWRlICJWTUlubGluZXMuaCIKKyNpbmNsdWRl
ICJXZWJBc3NlbWJseUZ1bmN0aW9uLmgiCiAjaW5jbHVkZSA8d3RmL0NvbW1hUHJpbnRlci5oPgog
CiBuYW1lc3BhY2UgSlNDIHsKQEAgLTQyLDggKzQzLDcgQEAgY29uc3QgQ2xhc3NJbmZvIE5hdGl2
ZUV4ZWN1dGFibGU6OnNfaW5mbwogCiBOYXRpdmVFeGVjdXRhYmxlKiBOYXRpdmVFeGVjdXRhYmxl
OjpjcmVhdGUoVk0mIHZtLCBSZWY8SklUQ29kZT4mJiBjYWxsVGh1bmssIFRhZ2dlZE5hdGl2ZUZ1
bmN0aW9uIGZ1bmN0aW9uLCBSZWY8SklUQ29kZT4mJiBjb25zdHJ1Y3RUaHVuaywgVGFnZ2VkTmF0
aXZlRnVuY3Rpb24gY29uc3RydWN0b3IsIGNvbnN0IFN0cmluZyYgbmFtZSkKIHsKLSAgICBOYXRp
dmVFeGVjdXRhYmxlKiBleGVjdXRhYmxlOwotICAgIGV4ZWN1dGFibGUgPSBuZXcgKE5vdE51bGws
IGFsbG9jYXRlQ2VsbDxOYXRpdmVFeGVjdXRhYmxlPih2bS5oZWFwKSkgTmF0aXZlRXhlY3V0YWJs
ZSh2bSwgZnVuY3Rpb24sIGNvbnN0cnVjdG9yKTsKKyAgICBOYXRpdmVFeGVjdXRhYmxlKiBleGVj
dXRhYmxlID0gbmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8TmF0aXZlRXhlY3V0YWJsZT4odm0u
aGVhcCkpIE5hdGl2ZUV4ZWN1dGFibGUodm0sIGZ1bmN0aW9uLCBjb25zdHJ1Y3Rvcik7CiAgICAg
ZXhlY3V0YWJsZS0+ZmluaXNoQ3JlYXRpb24odm0sIFdURk1vdmUoY2FsbFRodW5rKSwgV1RGTW92
ZShjb25zdHJ1Y3RUaHVuayksIG5hbWUpOwogICAgIHJldHVybiBleGVjdXRhYmxlOwogfQpAQCAt
ODAsNiArODAsMTggQEAgTmF0aXZlRXhlY3V0YWJsZTo6TmF0aXZlRXhlY3V0YWJsZShWTSYgdgog
ewogfQogCit2b2lkIE5hdGl2ZUV4ZWN1dGFibGU6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxs
LCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3sKKyAgICBOYXRpdmVFeGVjdXRhYmxlKiB0aGlzT2Jq
ZWN0ID0ganNDYXN0PE5hdGl2ZUV4ZWN1dGFibGUqPihjZWxsKTsKKyAgICBBU1NFUlRfR0NfT0JK
RUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CisKKyAgICBCYXNlOjp2aXNpdENoaWxk
cmVuKHRoaXNPYmplY3QsIHZpc2l0b3IpOworCisjaWYgRU5BQkxFKFdFQkFTU0VNQkxZKQorICAg
IHZpc2l0b3IuYXBwZW5kKHRoaXNPYmplY3QtPm1fd2ViQXNzZW1ibHlGdW5jdGlvbik7CisjZW5k
aWYKK30KKwogY29uc3QgRE9NSklUOjpTaWduYXR1cmUqIE5hdGl2ZUV4ZWN1dGFibGU6OnNpZ25h
dHVyZUZvcihDb2RlU3BlY2lhbGl6YXRpb25LaW5kIGtpbmQpIGNvbnN0CiB7CiAgICAgQVNTRVJU
KGhhc0pJVENvZGVGb3Ioa2luZCkpOwpAQCAtMTAwLDQgKzExMiw2IEBAIENvZGVCbG9ja0hhc2gg
TmF0aXZlRXhlY3V0YWJsZTo6aGFzaEZvcigKICAgICByZXR1cm4gQ29kZUJsb2NrSGFzaChiaXR3
aXNlX2Nhc3Q8dWludHB0cl90PihtX2NvbnN0cnVjdG9yKSk7CiB9CiAKK3ZvaWQgTmF0aXZlRXhl
Y3V0YWJsZTo6c2V0V2ViQXNzZW1ibHlGdW5jdGlvbihWTSYgdm0sIFdlYkFzc2VtYmx5RnVuY3Rp
b24qIGZ1bmN0aW9uKSB7IG1fd2ViQXNzZW1ibHlGdW5jdGlvbi5zZXQodm0sIHRoaXMsIGZ1bmN0
aW9uKTsgfQorCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL05hdGl2ZUV4ZWN1dGFibGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9OYXRpdmVFeGVjdXRhYmxlLmgJKHJldmlzaW9uIDI0MzYzNSkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL05hdGl2ZUV4ZWN1dGFibGUuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMjksNiArMjksMTAgQEAKIAogbmFtZXNwYWNlIEpTQyB7CiAKKyNpZiBFTkFC
TEUoV0VCQVNTRU1CTFkpCitjbGFzcyBXZWJBc3NlbWJseUZ1bmN0aW9uOworI2VuZGlmCisKIGNs
YXNzIE5hdGl2ZUV4ZWN1dGFibGUgZmluYWwgOiBwdWJsaWMgRXhlY3V0YWJsZUJhc2UgewogICAg
IGZyaWVuZCBjbGFzcyBKSVQ7CiAgICAgZnJpZW5kIGNsYXNzIExMSW50T2Zmc2V0c0V4dHJhY3Rv
cjsKQEAgLTc2LDE2ICs4MCwyNyBAQCBwdWJsaWM6CiAgICAgY29uc3QgRE9NSklUOjpTaWduYXR1
cmUqIHNpZ25hdHVyZUZvcihDb2RlU3BlY2lhbGl6YXRpb25LaW5kKSBjb25zdDsKICAgICBJbnRy
aW5zaWMgaW50cmluc2ljKCkgY29uc3Q7CiAKKworI2lmIEVOQUJMRShXRUJBU1NFTUJMWSkKKyAg
ICB2b2lkIHNldFdlYkFzc2VtYmx5RnVuY3Rpb24oVk0mLCBXZWJBc3NlbWJseUZ1bmN0aW9uKik7
CisgICAgV2ViQXNzZW1ibHlGdW5jdGlvbiogd2ViQXNzZW1ibHlGdW5jdGlvbigpIHsgcmV0dXJu
IG1fd2ViQXNzZW1ibHlGdW5jdGlvbi5nZXQoKTsgfQorI2VuZGlmCisKIHByb3RlY3RlZDoKICAg
ICB2b2lkIGZpbmlzaENyZWF0aW9uKFZNJiwgUmVmPEpJVENvZGU+JiYgY2FsbFRodW5rLCBSZWY8
SklUQ29kZT4mJiBjb25zdHJ1Y3RUaHVuaywgY29uc3QgU3RyaW5nJiBuYW1lKTsKIAogcHJpdmF0
ZToKKyAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7
CisKICAgICBOYXRpdmVFeGVjdXRhYmxlKFZNJiwgVGFnZ2VkTmF0aXZlRnVuY3Rpb24sIFRhZ2dl
ZE5hdGl2ZUZ1bmN0aW9uIGNvbnN0cnVjdG9yKTsKIAogICAgIFRhZ2dlZE5hdGl2ZUZ1bmN0aW9u
IG1fZnVuY3Rpb247CiAgICAgVGFnZ2VkTmF0aXZlRnVuY3Rpb24gbV9jb25zdHJ1Y3RvcjsKIAog
ICAgIFN0cmluZyBtX25hbWU7CisjaWYgRU5BQkxFKFdFQkFTU0VNQkxZKQorICAgIFdyaXRlQmFy
cmllcjxXZWJBc3NlbWJseUZ1bmN0aW9uPiBtX3dlYkFzc2VtYmx5RnVuY3Rpb247CisjZW5kaWYK
IH07CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3dh
c20vV2FzbU9NR1BsYW4uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93
YXNtL1dhc21PTUdQbGFuLmNwcAkocmV2aXNpb24gMjQzNjM1KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL3dhc20vV2FzbU9NR1BsYW4uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMzgsNyArMTM4
LDcgQEAgdm9pZCBPTUdQbGFuOjp3b3JrKENvbXBpbGF0aW9uRWZmb3J0KQogICAgIHsKICAgICAg
ICAgTG9ja0hvbGRlciBob2xkZXIobV9jb2RlQmxvY2stPm1fbG9jayk7CiAKLSAgICAgICAgYXV0
byByZXBhdGNoQ2FsbHMgPSBbJl0gKGNvbnN0IFZlY3RvcjxVbmxpbmtlZFdhc21Ub1dhc21DYWxs
PiYgIGNhbGxzaXRlcykgeworICAgICAgICBhdXRvIHJlcGF0Y2hDYWxscyA9IFsmXSAoY29uc3Qg
VmVjdG9yPFVubGlua2VkV2FzbVRvV2FzbUNhbGw+JiBjYWxsc2l0ZXMpIHsKICAgICAgICAgICAg
IGZvciAoYXV0byYgY2FsbCA6IGNhbGxzaXRlcykgewogICAgICAgICAgICAgICAgIGRhdGFMb2dM
bklmKFdhc21PTUdQbGFuSW50ZXJuYWw6OnZlcmJvc2UsICJDb25zaWRlcmluZyByZXBhdGNoaW5n
IGNhbGwgYXQ6ICIsIFJhd1BvaW50ZXIoY2FsbC5jYWxsTG9jYXRpb24uZGF0YUxvY2F0aW9uKCkp
LCAiIHRoYXQgdGFyZ2V0cyAiLCBjYWxsLmZ1bmN0aW9uSW5kZXhTcGFjZSk7CiAgICAgICAgICAg
ICAgICAgaWYgKGNhbGwuZnVuY3Rpb25JbmRleFNwYWNlID09IGZ1bmN0aW9uSW5kZXhTcGFjZSkg
ewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlFeGVjdXRh
YmxlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9X
ZWJBc3NlbWJseUV4ZWN1dGFibGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseUZ1bmN0aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseUZ1bmN0aW9uLmNwcAkocmV2aXNp
b24gMjQzNjM1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlG
dW5jdGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM2LDE3ICszNiwyNiBAQAogI2luY2x1ZGUg
IkpTV2ViQXNzZW1ibHlNZW1vcnkuaCIKICNpbmNsdWRlICJKU1dlYkFzc2VtYmx5UnVudGltZUVy
cm9yLmgiCiAjaW5jbHVkZSAiTExJbnRUaHVua3MuaCIKKyNpbmNsdWRlICJMaW5rQnVmZmVyLmgi
CiAjaW5jbHVkZSAiUHJvdG9DYWxsRnJhbWUuaCIKICNpbmNsdWRlICJWTS5oIgogI2luY2x1ZGUg
Ildhc21DYWxsZWUuaCIKKyNpbmNsdWRlICJXYXNtQ2FsbGluZ0NvbnZlbnRpb24uaCIKICNpbmNs
dWRlICJXYXNtQ29udGV4dElubGluZXMuaCIKICNpbmNsdWRlICJXYXNtRm9ybWF0LmgiCiAjaW5j
bHVkZSAiV2FzbU1lbW9yeS5oIgorI2luY2x1ZGUgIldhc21NZW1vcnlJbmZvcm1hdGlvbi5oIgor
I2luY2x1ZGUgIldhc21Nb2R1bGVJbmZvcm1hdGlvbi5oIgogI2luY2x1ZGUgIldhc21TaWduYXR1
cmVJbmxpbmVzLmgiCiAjaW5jbHVkZSA8d3RmL0Zhc3RUTFMuaD4KICNpbmNsdWRlIDx3dGYvU3Rh
Y2tQb2ludGVyLmg+CiAjaW5jbHVkZSA8d3RmL1N5c3RlbVRyYWNpbmcuaD4KIAorI2luY2x1ZGUg
Ik1hY3JvQXNzZW1ibGVyUHJpbnRlci5oIgorI2luY2x1ZGUgIkdQUkluZm8uaCIKKyNpbmNsdWRl
ICJGUFJJbmZvLmgiCisjaW5jbHVkZSAiUmVnaXN0ZXJJRC5oIgorCiBuYW1lc3BhY2UgSlNDIHsK
IAogY29uc3QgQ2xhc3NJbmZvIFdlYkFzc2VtYmx5RnVuY3Rpb246OnNfaW5mbyA9IHsgIldlYkFz
c2VtYmx5RnVuY3Rpb24iLCAmQmFzZTo6c19pbmZvLCBudWxscHRyLCBudWxscHRyLCBDUkVBVEVf
TUVUSE9EX1RBQkxFKFdlYkFzc2VtYmx5RnVuY3Rpb24pIH07CkBAIC0xMTYsNiArMTI1LDEyIEBA
IHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNhbGwKIAogICAgIC8vIEZJWE1F
IERvIGF3YXkgd2l0aCB0aGlzIGVudGlyZSBmdW5jdGlvbiwgYW5kIG9ubHkgdXNlIHRoZSBlbnRy
eXBvaW50IGdlbmVyYXRlZCBieSBCMy4gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTE2NjQ4NgogICAgIFdhc206Okluc3RhbmNlKiBwcmV2V2FzbUluc3RhbmNlID0gdm0u
d2FzbUNvbnRleHQubG9hZCgpOworCisgICAgLy9zdGF0aWMgdWludDY0X3QgY2FsbHM7CisgICAg
Ly8rK2NhbGxzOworICAgIC8vaWYgKGNhbGxzICUgMTAwMDAgPT0gMCkKKyAgICAvLyAgICBkYXRh
TG9nTG4oIkNhbGxzOiAiLCBjYWxscyk7CisKICAgICB7CiAgICAgICAgIC8vIFdlIGRvIHRoZSBz
dGFjayBjaGVjayBoZXJlIGZvciB0aGUgd3JhcHBlciBmdW5jdGlvbiBiZWNhdXNlIHdlIGRvbid0
CiAgICAgICAgIC8vIHdhbnQgdG8gZW1pdCBhIHN0YWNrIGNoZWNrIGluc2lkZSBldmVyeSB3cmFw
cGVyIGZ1bmN0aW9uLgpAQCAtMTQ4LDExICsxNjMsMjU5IEBAIHN0YXRpYyBFbmNvZGVkSlNWYWx1
ZSBKU0NfSE9TVF9DQUxMIGNhbGwKICAgICByZXR1cm4gcmF3UmVzdWx0OwogfQogCitNYWNyb0Fz
c2VtYmxlckNvZGVQdHI8SlNFbnRyeVB0clRhZz4gV2ViQXNzZW1ibHlGdW5jdGlvbjo6anNDYWxs
RW50cnlwb2ludFNsb3coKQoreworICAgIFZNJiB2bSA9ICp0aGlzLT52bSgpOworICAgIENDYWxs
SGVscGVycyBqaXQ7CisKKyAgICBjb25zdCBhdXRvJiBzaWduYXR1cmUgPSBXYXNtOjpTaWduYXR1
cmVJbmZvcm1hdGlvbjo6Z2V0KHNpZ25hdHVyZUluZGV4KCkpOworCisgICAgYXV0byBtZW1vcnlN
b2RlID0gaW5zdGFuY2UoKS0+bWVtb3J5TW9kZSgpOworICAgIGNvbnN0IGF1dG8mIHBpbm5lZFJl
Z3MgPSBXYXNtOjpQaW5uZWRSZWdpc3RlckluZm86OmdldCgpOworICAgIFJlZ2lzdGVyU2V0IHRv
U2F2ZSA9IHBpbm5lZFJlZ3MudG9TYXZlKG1lbW9yeU1vZGUpOworICAgIFJlZ2lzdGVyQXRPZmZz
ZXRMaXN0IHJlZ2lzdGVyc1RvU3BpbGwodG9TYXZlLCBSZWdpc3RlckF0T2Zmc2V0TGlzdDo6T2Zm
c2V0QmFzZVR5cGU6OkZyYW1lUG9pbnRlckJhc2VkKTsKKworICAgIGF1dG8mIG1vZHVsZUluZm9y
bWF0aW9uID0gaW5zdGFuY2UoKS0+aW5zdGFuY2UoKS5tb2R1bGUoKS5tb2R1bGVJbmZvcm1hdGlv
bigpOworCisgICAgdW5zaWduZWQgdG90YWxGcmFtZVNpemUgPSByZWdpc3RlcnNUb1NwaWxsLnNp
emUoKSAqIHNpemVvZih2b2lkKik7CisgICAgdG90YWxGcmFtZVNpemUgKz0gV2FzbTo6V2FzbUNh
bGxpbmdDb252ZW50aW9uOjpoZWFkZXJTaXplSW5CeXRlcygpOworICAgIHRvdGFsRnJhbWVTaXpl
IC09IHNpemVvZihDYWxsZXJGcmFtZUFuZFBDKTsKKworICAgIHVuc2lnbmVkIG51bUdQUnMgPSAw
OworICAgIHVuc2lnbmVkIG51bUZQUnMgPSAwOworICAgIGJvb2wgYXJndW1lbnRzSW5jbHVkZUk2
NCA9IGZhbHNlOworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBzaWduYXR1cmUuYXJndW1l
bnRDb3VudCgpOyBpKyspIHsKKyAgICAgICAgc3dpdGNoIChzaWduYXR1cmUuYXJndW1lbnQoaSkp
IHsKKyAgICAgICAgY2FzZSBXYXNtOjpJNjQ6CisgICAgICAgICAgICBhcmd1bWVudHNJbmNsdWRl
STY0ID0gdHJ1ZTsKKyAgICAgICAgICAgIEZBTExUSFJPVUdIOworICAgICAgICBjYXNlIFdhc206
OkkzMjoKKyAgICAgICAgICAgIGlmIChudW1HUFJzID49IFdhc206Ondhc21DYWxsaW5nQ29udmVu
dGlvbigpLm1fZ3ByQXJncy5zaXplKCkpCisgICAgICAgICAgICAgICAgdG90YWxGcmFtZVNpemUg
Kz0gc2l6ZW9mKHZvaWQqKTsKKyAgICAgICAgICAgICsrbnVtR1BSczsKKyAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICBjYXNlIFdhc206OkYzMjoKKyAgICAgICAgY2FzZSBXYXNtOjpGNjQ6Cisg
ICAgICAgICAgICBpZiAobnVtRlBScyA+PSBXYXNtOjp3YXNtQ2FsbGluZ0NvbnZlbnRpb24oKS5t
X2ZwckFyZ3Muc2l6ZSgpKQorICAgICAgICAgICAgICAgIHRvdGFsRnJhbWVTaXplICs9IHNpemVv
Zih2b2lkKik7CisgICAgICAgICAgICArK251bUZQUnM7CisgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7
CisgICAgICAgIH0KKyAgICB9CisgICAgUkVMRUFTRV9BU1NFUlQoIWFyZ3VtZW50c0luY2x1ZGVJ
NjQpOyAvLyBPT1BTCisKKyAgICB0b3RhbEZyYW1lU2l6ZSA9IFdURjo6cm91bmRVcFRvTXVsdGlw
bGVPZihzdGFja0FsaWdubWVudEJ5dGVzKCksIHRvdGFsRnJhbWVTaXplKTsKKworICAgIGppdC5l
bWl0RnVuY3Rpb25Qcm9sb2d1ZSgpOworICAgIGppdC5zdWJQdHIoTWFjcm9Bc3NlbWJsZXI6OlRy
dXN0ZWRJbW0zMih0b3RhbEZyYW1lU2l6ZSksIE1hY3JvQXNzZW1ibGVyOjpzdGFja1BvaW50ZXJS
ZWdpc3Rlcik7CisgICAgaml0LnN0b3JlNjQoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tNjQoMCks
IENDYWxsSGVscGVyczo6YWRkcmVzc0ZvcihDYWxsRnJhbWVTbG90Ojpjb2RlQmxvY2spKTsKKwor
ICAgIENDYWxsSGVscGVyczo6SnVtcExpc3Qgc2xvd1BhdGg7CisKKyAgICAvLyBXZSB1c2UgfHRo
aXN8IHRvIGhvbGQgdGhlIHByZXZpb3VzIHdhc20gY29udGV4dCAoT09QUzogd2lsbCBzdG9yaW5n
IHplcm8gY2F1c2UgcHJvYmxlbXM/KQorICAgIGppdC5sb2FkUHRyKCZ2bS53YXNtQ29udGV4dC5p
bnN0YW5jZSwgR1BSSW5mbzo6cmVnVDApOworICAgIGppdC5zdG9yZVB0cihHUFJJbmZvOjpyZWdU
MCwgQ0NhbGxIZWxwZXJzOjphZGRyZXNzRm9yKENhbGxGcmFtZVNsb3Q6OnRoaXNBcmd1bWVudCkp
OworCisgICAgZm9yIChjb25zdCBSZWdpc3RlckF0T2Zmc2V0JiByZWdBdE9mZnNldCA6IHJlZ2lz
dGVyc1RvU3BpbGwpIHsKKyAgICAgICAgR1BSUmVnIHJlZyA9IHJlZ0F0T2Zmc2V0LnJlZygpLmdw
cigpOworICAgICAgICBwdHJkaWZmX3Qgb2Zmc2V0ID0gcmVnQXRPZmZzZXQub2Zmc2V0KCk7Cisg
ICAgICAgIGppdC5zdG9yZVB0cihyZWcsIENDYWxsSGVscGVyczo6QWRkcmVzcyhHUFJJbmZvOjpj
YWxsRnJhbWVSZWdpc3Rlciwgb2Zmc2V0KSk7CisgICAgfQorCisgICAgaml0Lm1vdmUoQ0NhbGxI
ZWxwZXJzOjpUcnVzdGVkSW1tUHRyKCZpbnN0YW5jZSgpLT5pbnN0YW5jZSgpKSwgR1BSSW5mbzo6
cmVnVDEpOworICAgIGlmIChXYXNtOjpDb250ZXh0Ojp1c2VGYXN0VExTKCkpIAorICAgICAgICBq
aXQuc3RvcmVXYXNtQ29udGV4dEluc3RhbmNlKEdQUkluZm86OnJlZ1QxKTsKKyAgICBlbHNlCisg
ICAgICAgIGppdC5tb3ZlKEdQUkluZm86OnJlZ1QxLCBwaW5uZWRSZWdzLndhc21Db250ZXh0SW5z
dGFuY2VQb2ludGVyKTsKKyAgICBqaXQuc3RvcmVQdHIoR1BSSW5mbzo6cmVnVDEsICZ2bS53YXNt
Q29udGV4dC5pbnN0YW5jZSk7CisKKyAgICAvLyBPT1BTOiBBcml0eSBjaGVjayBoZXJlIQorICAg
IC8vIE9PUFM6IEFzc2VydCBwaW5uZWQgcmVncyBjYW4ndCBiZSB0YWcgcmVnaXN0ZXJzLCBvciBv
cmdhbml6ZSBjb2RlIGFjY29yZGluZ2x5LgorCisgICAgLy8gRmlyc3Qgd2UgZG8gc3RhY2sgc2xv
dHMgZm9yIEZQUnMgc28gd2UgY2FuIHVzZSBGUFIgYXJndW1lbnQgcmVnaXN0ZXIgYXMgc2NyYXRj
aC4gYW5kIGFsbCBHUFJzIGJlY2F1c2Ugd2UgaGF2ZSBzY3JhdGNoIHJlZ2lzdGVycyB0byBkbyBp
dC4KKyAgICAvLyBBZnRlciB0aGF0LCB3ZSBoYW5kbGUgRlBSIGFyZ3VtZW50IHJlZ2lzdGVycy4g
CisgICAgeworICAgICAgICBDQ2FsbEhlbHBlcnM6OkFkZHJlc3MgY2FsbGVlRnJhbWUgPSBDQ2Fs
bEhlbHBlcnM6OkFkZHJlc3MoTWFjcm9Bc3NlbWJsZXI6OnN0YWNrUG9pbnRlclJlZ2lzdGVyLCAt
c3RhdGljX2Nhc3Q8cHRyZGlmZl90PihzaXplb2YoQ2FsbGVyRnJhbWVBbmRQQykpKTsKKyAgICAg
ICAgbnVtR1BScyA9IDA7CisgICAgICAgIG51bUZQUnMgPSAwOworICAgICAgICAvLyBXZSdyZSBn
b2luZyB0byBzZXQgdGhlIHBpbm5lZCByZWdpc3RlcnMgYWZ0ZXIgdGhpcy4gU28KKyAgICAgICAg
Ly8gd2UgY2FuIHVzZSB0aGlzIGFzIGEgc2NyYXRjaCBmb3Igbm93IHNpbmNlIHdlIHNhdmVkIGl0
IGFib3ZlLgorICAgICAgICBHUFJSZWcgc2NyYXRjaFJlZyA9IHBpbm5lZFJlZ3MuYmFzZU1lbW9y
eVBvaW50ZXI7CisgICAgICAgIEZQUlJlZyBzY3JhdGNoRlBSID0gV2FzbTo6d2FzbUNhbGxpbmdD
b252ZW50aW9uKCkubV9mcHJBcmdzWzBdLmZwcigpOworCisgICAgICAgIHB0cmRpZmZfdCBqc09m
ZnNldCA9IENhbGxGcmFtZVNsb3Q6OmZpcnN0QXJndW1lbnQgKiBzaXplb2YoRW5jb2RlZEpTVmFs
dWUpOworCisgICAgICAgIHB0cmRpZmZfdCB3YXNtT2Zmc2V0ID0gQ2FsbEZyYW1lOjpoZWFkZXJT
aXplSW5SZWdpc3RlcnMgKiBzaXplb2Yodm9pZCopOworICAgICAgICBmb3IgKHVuc2lnbmVkIGkg
PSAwOyBpIDwgc2lnbmF0dXJlLmFyZ3VtZW50Q291bnQoKTsgaSsrKSB7CisgICAgICAgICAgICBz
d2l0Y2ggKHNpZ25hdHVyZS5hcmd1bWVudChpKSkgeworICAgICAgICAgICAgY2FzZSBXYXNtOjpJ
NjQ6CisgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAg
ICAgICAgIGNhc2UgV2FzbTo6STMyOgorICAgICAgICAgICAgICAgIGppdC5sb2FkNjQoQ0NhbGxI
ZWxwZXJzOjpBZGRyZXNzKEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCBqc09mZnNldCksIHNj
cmF0Y2hSZWcpOworICAgICAgICAgICAgICAgIHNsb3dQYXRoLmFwcGVuZChqaXQuYnJhbmNoSWZO
b3RJbnQzMihzY3JhdGNoUmVnKSk7IC8vIE9PUFM6IGhhbmRsZSBmbG9hdD8KKyAgICAgICAgICAg
ICAgICBpZiAobnVtR1BScyA+PSBXYXNtOjp3YXNtQ2FsbGluZ0NvbnZlbnRpb24oKS5tX2dwckFy
Z3Muc2l6ZSgpKSB7CisgICAgICAgICAgICAgICAgICAgIGppdC5zdG9yZTMyKHNjcmF0Y2hSZWcs
IGNhbGxlZUZyYW1lLndpdGhPZmZzZXQod2FzbU9mZnNldCkpOworICAgICAgICAgICAgICAgICAg
ICB3YXNtT2Zmc2V0ICs9IHNpemVvZih2b2lkKik7CisgICAgICAgICAgICAgICAgfSBlbHNlIHsK
KyAgICAgICAgICAgICAgICAgICAgaml0Lnplcm9FeHRlbmQzMlRvUHRyKHNjcmF0Y2hSZWcsIFdh
c206Ondhc21DYWxsaW5nQ29udmVudGlvbigpLm1fZ3ByQXJnc1tudW1HUFJzXS5ncHIoKSk7Cisg
ICAgICAgICAgICAgICAgICAgICsrbnVtR1BSczsKKyAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIFdhc206OkYzMjoKKyAgICAgICAgICAg
IGNhc2UgV2FzbTo6RjY0OgorICAgICAgICAgICAgICAgIGlmIChudW1GUFJzID49IFdhc206Ondh
c21DYWxsaW5nQ29udmVudGlvbigpLm1fZnByQXJncy5zaXplKCkpIHsKKyAgICAgICAgICAgICAg
ICAgICAgaml0LmxvYWQ2NChDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoR1BSSW5mbzo6Y2FsbEZyYW1l
UmVnaXN0ZXIsIGpzT2Zmc2V0KSwgc2NyYXRjaFJlZyk7CisgICAgICAgICAgICAgICAgICAgIHNs
b3dQYXRoLmFwcGVuZChqaXQuYnJhbmNoSWZOb3ROdW1iZXIoc2NyYXRjaFJlZykpOworICAgICAg
ICAgICAgICAgICAgICBzbG93UGF0aC5hcHBlbmQoaml0LmJyYW5jaElmSW50MzIoc2NyYXRjaFJl
ZykpOyAvLyBPT1BTOiBIYW5kbGUgaTMyCisKKyAgICAgICAgICAgICAgICAgICAgaWYgKHNpZ25h
dHVyZS5hcmd1bWVudChpKSA9PSBXYXNtOjpGMzIpIHsKKyAgICAgICAgICAgICAgICAgICAgICAg
IGppdC51bmJveERvdWJsZShzY3JhdGNoUmVnLCBzY3JhdGNoUmVnLCBzY3JhdGNoRlBSKTsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIGppdC5jb252ZXJ0RG91YmxlVG9GbG9hdChzY3JhdGNoRlBS
LCBzY3JhdGNoRlBSKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGppdC5zdG9yZUZsb2F0KHNj
cmF0Y2hGUFIsIGNhbGxlZUZyYW1lLndpdGhPZmZzZXQod2FzbU9mZnNldCkpOworICAgICAgICAg
ICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgaml0LmFkZDY0KEdQ
UkluZm86OnRhZ1R5cGVOdW1iZXJSZWdpc3Rlciwgc2NyYXRjaFJlZywgc2NyYXRjaFJlZyk7Cisg
ICAgICAgICAgICAgICAgICAgICAgICBqaXQuc3RvcmU2NChzY3JhdGNoUmVnLCBjYWxsZWVGcmFt
ZS53aXRoT2Zmc2V0KHdhc21PZmZzZXQpKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgICAgICAgICB3YXNtT2Zmc2V0ICs9IHNpemVvZih2b2lkKik7CisgICAgICAgICAgICAg
ICAgfSBlbHNlCisgICAgICAgICAgICAgICAgICAgICsrbnVtRlBSczsKKyAgICAgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgUkVMRUFTRV9B
U1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAganNPZmZz
ZXQgKz0gc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8v
IE5vdyBoYW5kbGUgRlBSIGFyZ3VtZW50cyBpbiByZWdpc3RlcnMuCisgICAgeworICAgICAgICBu
dW1HUFJzID0gMDsKKyAgICAgICAgbnVtRlBScyA9IDA7CisgICAgICAgIC8vIFdlJ3JlIGdvaW5n
IHRvIHNldCB0aGUgcGlubmVkIHJlZ2lzdGVycyBhZnRlciB0aGlzLiBTbworICAgICAgICAvLyB3
ZSBjYW4gdXNlIHRoaXMgYXMgYSBzY3JhdGNoIGZvciBub3cgc2luY2Ugd2Ugc2F2ZWQgaXQgYWJv
dmUuCisgICAgICAgIEdQUlJlZyBzY3JhdGNoUmVnID0gcGlubmVkUmVncy5iYXNlTWVtb3J5UG9p
bnRlcjsKKworICAgICAgICBwdHJkaWZmX3QganNPZmZzZXQgPSBDYWxsRnJhbWVTbG90OjpmaXJz
dEFyZ3VtZW50ICogc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKTsKKyAgICAgICAgZm9yICh1bnNpZ25l
ZCBpID0gMDsgaSA8IHNpZ25hdHVyZS5hcmd1bWVudENvdW50KCk7IGkrKykgeworICAgICAgICAg
ICAgc3dpdGNoIChzaWduYXR1cmUuYXJndW1lbnQoaSkpIHsKKyAgICAgICAgICAgIGNhc2UgV2Fz
bTo6RjMyOgorICAgICAgICAgICAgY2FzZSBXYXNtOjpGNjQ6CisgICAgICAgICAgICAgICAgaWYg
KG51bUZQUnMgPCBXYXNtOjp3YXNtQ2FsbGluZ0NvbnZlbnRpb24oKS5tX2ZwckFyZ3Muc2l6ZSgp
KSB7CisgICAgICAgICAgICAgICAgICAgIGppdC5sb2FkNjQoQ0NhbGxIZWxwZXJzOjpBZGRyZXNz
KEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCBqc09mZnNldCksIHNjcmF0Y2hSZWcpOworICAg
ICAgICAgICAgICAgICAgICBzbG93UGF0aC5hcHBlbmQoaml0LmJyYW5jaElmTm90TnVtYmVyKHNj
cmF0Y2hSZWcpKTsKKyAgICAgICAgICAgICAgICAgICAgc2xvd1BhdGguYXBwZW5kKGppdC5icmFu
Y2hJZkludDMyKHNjcmF0Y2hSZWcpKTsgLy8gT09QUzogSGFuZGxlIGkzMgorCisgICAgICAgICAg
ICAgICAgICAgIEZQUlJlZyBhcmdGUFIgPSBXYXNtOjp3YXNtQ2FsbGluZ0NvbnZlbnRpb24oKS5t
X2ZwckFyZ3NbbnVtRlBSc10uZnByKCk7CisgICAgICAgICAgICAgICAgICAgIGppdC51bmJveERv
dWJsZShzY3JhdGNoUmVnLCBzY3JhdGNoUmVnLCBhcmdGUFIpOworCisgICAgICAgICAgICAgICAg
ICAgIGlmIChzaWduYXR1cmUuYXJndW1lbnQoaSkgPT0gV2FzbTo6RjMyKQorICAgICAgICAgICAg
ICAgICAgICAgICAgaml0LmNvbnZlcnREb3VibGVUb0Zsb2F0KGFyZ0ZQUiwgYXJnRlBSKTsKKwor
ICAgICAgICAgICAgICAgICAgICArK251bUZQUnM7CisgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAganNPZmZzZXQgKz0gc2l6ZW9mKEVu
Y29kZWRKU1ZhbHVlKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGlmICghIW1vZHVsZUluZm9y
bWF0aW9uLm1lbW9yeSkgeworICAgICAgICBHUFJSZWcgYmFzZU1lbW9yeSA9IHBpbm5lZFJlZ3Mu
YmFzZU1lbW9yeVBvaW50ZXI7CisKKyAgICAgICAgaWYgKFdhc206OkNvbnRleHQ6OnVzZUZhc3RU
TFMoKSkKKyAgICAgICAgICAgIGppdC5sb2FkV2FzbUNvbnRleHRJbnN0YW5jZShiYXNlTWVtb3J5
KTsKKworICAgICAgICBHUFJSZWcgY3VycmVudEluc3RhbmNlR1BSID0gV2FzbTo6Q29udGV4dDo6
dXNlRmFzdFRMUygpID8gYmFzZU1lbW9yeSA6IHBpbm5lZFJlZ3Mud2FzbUNvbnRleHRJbnN0YW5j
ZVBvaW50ZXI7CisgICAgICAgIGlmIChtZW1vcnlNb2RlICE9IFdhc206Ok1lbW9yeU1vZGU6OlNp
Z25hbGluZykgeworICAgICAgICAgICAgY29uc3QgYXV0byYgc2l6ZVJlZ3MgPSBwaW5uZWRSZWdz
LnNpemVSZWdpc3RlcnM7CisgICAgICAgICAgICBBU1NFUlQoc2l6ZVJlZ3Muc2l6ZSgpID49IDEp
OworICAgICAgICAgICAgQVNTRVJUKCFzaXplUmVnc1swXS5zaXplT2Zmc2V0KTsgLy8gVGhlIGZv
bGxvd2luZyBjb2RlIGFzc3VtZXMgd2Ugc3RhcnQgYXQgMCwgYW5kIGNhbGN1bGF0ZXMgc3Vic2Vx
dWVudCBzaXplIHJlZ2lzdGVycyByZWxhdGl2ZSB0byAwLgorICAgICAgICAgICAgaml0LmxvYWRQ
dHIoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKGN1cnJlbnRJbnN0YW5jZUdQUiwgV2FzbTo6SW5zdGFu
Y2U6Om9mZnNldE9mQ2FjaGVkTWVtb3J5U2l6ZSgpKSwgc2l6ZVJlZ3NbMF0uc2l6ZVJlZ2lzdGVy
KTsKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDE7IGkgPCBzaXplUmVncy5zaXplKCk7
ICsraSkKKyAgICAgICAgICAgICAgICBqaXQuYWRkNjQoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1t
MzIoLXNpemVSZWdzW2ldLnNpemVPZmZzZXQpLCBzaXplUmVnc1swXS5zaXplUmVnaXN0ZXIsIHNp
emVSZWdzW2ldLnNpemVSZWdpc3Rlcik7CisgICAgICAgIH0KKworICAgICAgICBqaXQubG9hZFB0
cihDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoY3VycmVudEluc3RhbmNlR1BSLCBXYXNtOjpJbnN0YW5j
ZTo6b2Zmc2V0T2ZDYWNoZWRNZW1vcnkoKSksIGJhc2VNZW1vcnkpOworICAgIH0KKworICAgIEdQ
UlJlZyBzY3JhdGNoR1BSID0gV2FzbTo6d2FzbUNhbGxpbmdDb252ZW50aW9uQWlyKCkucHJvbG9n
dWVTY3JhdGNoKDApOworICAgIGppdC5sb2FkUHRyKGVudHJ5cG9pbnRMb2FkTG9jYXRpb24oKSwg
c2NyYXRjaEdQUik7CisgICAgLy9qaXQucHJpbnQoImNhbGxpbmc6ICIsIHNjcmF0Y2hHUFIsICJc
biIpOworICAgIGppdC5jYWxsKHNjcmF0Y2hHUFIsIFdhc21FbnRyeVB0clRhZyk7CisKKyAgICAv
L2ppdC5wcmludCgicmVzdWx0IG9mIHdhc20gY2FsbDogIiwgK0dQUkluZm86OnJldHVyblZhbHVl
R1BSLCAiICIsICtGUFJJbmZvOjpyZXR1cm5WYWx1ZUZQUiwgIlxuIik7CisgICAgLy9qaXQucHJp
bnQoInRhZyBudW1iZXIgIiwgc3RhdGljX2Nhc3Q8TWFjcm9Bc3NlbWJsZXI6OlJlZ2lzdGVySUQ+
KCtHUFJJbmZvOjp0YWdUeXBlTnVtYmVyUmVnaXN0ZXIpLCAiXG4iKTsKKyAgICAvL2ppdC5wcmlu
dCgidGFnIG1hc2sgIiwgc3RhdGljX2Nhc3Q8TWFjcm9Bc3NlbWJsZXI6OlJlZ2lzdGVySUQ+KCtH
UFJJbmZvOjp0YWdNYXNrUmVnaXN0ZXIpLCAiXG4iKTsKKworICAgIGppdC5sb2FkUHRyKENDYWxs
SGVscGVyczo6YWRkcmVzc0ZvcihDYWxsRnJhbWVTbG90Ojp0aGlzQXJndW1lbnQpLCBHUFJJbmZv
Ojpub25QcmVzZXJ2ZWROb25SZXR1cm5HUFIpOworICAgIGppdC5zdG9yZVB0cihHUFJJbmZvOjpu
b25QcmVzZXJ2ZWROb25SZXR1cm5HUFIsICZ2bS53YXNtQ29udGV4dC5pbnN0YW5jZSk7CisKKyAg
ICBmb3IgKGNvbnN0IFJlZ2lzdGVyQXRPZmZzZXQmIHJlZ0F0T2Zmc2V0IDogcmVnaXN0ZXJzVG9T
cGlsbCkgeworICAgICAgICBHUFJSZWcgcmVnID0gcmVnQXRPZmZzZXQucmVnKCkuZ3ByKCk7Cisg
ICAgICAgIEFTU0VSVChyZWcgIT0gR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIpOworICAgICAgICBw
dHJkaWZmX3Qgb2Zmc2V0ID0gcmVnQXRPZmZzZXQub2Zmc2V0KCk7CisgICAgICAgIGppdC5sb2Fk
UHRyKENDYWxsSGVscGVyczo6QWRkcmVzcyhHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3Rlciwgb2Zm
c2V0KSwgcmVnKTsKKyAgICB9CisKKyAgICBzd2l0Y2ggKHNpZ25hdHVyZS5yZXR1cm5UeXBlKCkp
IHsKKyAgICBjYXNlIFdhc206OlZvaWQ6CisgICAgICAgIGppdC5tb3ZlVHJ1c3RlZFZhbHVlKGpz
VW5kZWZpbmVkKCksIEpTVmFsdWVSZWdzIHsgR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIgfSk7Cisg
ICAgICAgIGJyZWFrOworICAgIGNhc2UgV2FzbTo6STMyOgorICAgICAgICBqaXQuemVyb0V4dGVu
ZDMyVG9QdHIoR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIsIEdQUkluZm86OnJldHVyblZhbHVlR1BS
KTsKKyAgICAgICAgaml0LmJveEludDMyKEdQUkluZm86OnJldHVyblZhbHVlR1BSLCBKU1ZhbHVl
UmVncyB7IEdQUkluZm86OnJldHVyblZhbHVlR1BSIH0pOworICAgICAgICBicmVhazsKKyAgICBj
YXNlIFdhc206OkYzMjoKKyAgICAgICAgaml0LmNvbnZlcnRGbG9hdFRvRG91YmxlKEZQUkluZm86
OnJldHVyblZhbHVlRlBSLCBGUFJJbmZvOjpyZXR1cm5WYWx1ZUZQUik7CisgICAgICAgIEZBTExU
SFJPVUdIOworICAgIGNhc2UgV2FzbTo6RjY0OiB7CisgICAgICAgIGppdC5tb3ZlVHJ1c3RlZFZh
bHVlKGpzTnVtYmVyKHB1cmVOYU4oKSksIEpTVmFsdWVSZWdzIHsgR1BSSW5mbzo6cmV0dXJuVmFs
dWVHUFIgfSk7CisgICAgICAgIGF1dG8gaXNOYU4gPSBqaXQuYnJhbmNoSWZOYU4oRlBSSW5mbzo6
cmV0dXJuVmFsdWVGUFIpOworICAgICAgICBqaXQuYm94RG91YmxlKEZQUkluZm86OnJldHVyblZh
bHVlRlBSLCBKU1ZhbHVlUmVncyB7IEdQUkluZm86OnJldHVyblZhbHVlR1BSIH0pOworICAgICAg
ICBpc05hTi5saW5rKCZqaXQpOworICAgICAgICBicmVhazsKKyAgICB9CisgICAgY2FzZSBXYXNt
OjpJNjQ6CisgICAgY2FzZSBXYXNtOjpGdW5jOgorICAgIGNhc2UgV2FzbTo6QW55ZnVuYzoKKyAg
ICAgICAgaml0LmJyZWFrcG9pbnQoKTsKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAg
ICAgICAgYnJlYWs7CisgICAgfQorCisgICAgaml0LmVtaXRGdW5jdGlvbkVwaWxvZ3VlKCk7Cisg
ICAgaml0LnJldCgpOworCisgICAgc2xvd1BhdGgubGluaygmaml0KTsKKyAgICAvLyBPT1BTIQor
ICAgIGppdC5icmVha3BvaW50KCk7CisKKyAgICBMaW5rQnVmZmVyIGxpbmtCdWZmZXIoaml0LCBH
TE9CQUxfVEhVTktfSUQsIEpJVENvbXBpbGF0aW9uQ2FuRmFpbCk7CisgICAgaWYgKFVOTElLRUxZ
KGxpbmtCdWZmZXIuZGlkRmFpbFRvQWxsb2NhdGUoKSkpCisgICAgICAgIHJldHVybiBudWxscHRy
OworCisgICAgLy9saW5rQnVmZmVyLmxpbmsoY2FsbCwgRnVuY3Rpb25QdHI8V2FzbUVudHJ5UHRy
VGFnPigqZW50cnlwb2ludExvYWRMb2NhdGlvbigpKSk7CisKKyAgICBtX2pzQ2FsbEVudHJ5cG9p
bnQgPSBGSU5BTElaRV9DT0RFKGxpbmtCdWZmZXIsIFdhc21FbnRyeVB0clRhZywgIkpTLT5XYXNt
IElDIik7CisgICAgcmV0dXJuIG1fanNDYWxsRW50cnlwb2ludC5jb2RlKCk7Cit9CisKIFdlYkFz
c2VtYmx5RnVuY3Rpb24qIFdlYkFzc2VtYmx5RnVuY3Rpb246OmNyZWF0ZShWTSYgdm0sIEpTR2xv
YmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFN0cnVjdHVyZSogc3RydWN0dXJlLCB1bnNpZ25lZCBs
ZW5ndGgsIGNvbnN0IFN0cmluZyYgbmFtZSwgSlNXZWJBc3NlbWJseUluc3RhbmNlKiBpbnN0YW5j
ZSwgV2FzbTo6Q2FsbGVlJiBqc0VudHJ5cG9pbnQsIFdhc206Oldhc21Ub1dhc21JbXBvcnRhYmxl
RnVuY3Rpb246OkxvYWRMb2NhdGlvbiB3YXNtVG9XYXNtRW50cnlwb2ludExvYWRMb2NhdGlvbiwg
V2FzbTo6U2lnbmF0dXJlSW5kZXggc2lnbmF0dXJlSW5kZXgpCiB7CiAgICAgTmF0aXZlRXhlY3V0
YWJsZSogZXhlY3V0YWJsZSA9IHZtLmdldEhvc3RGdW5jdGlvbihjYWxsV2ViQXNzZW1ibHlGdW5j
dGlvbiwgTm9JbnRyaW5zaWMsIGNhbGxIb3N0RnVuY3Rpb25Bc0NvbnN0cnVjdG9yLCBudWxscHRy
LCBuYW1lKTsKICAgICBXZWJBc3NlbWJseUZ1bmN0aW9uKiBmdW5jdGlvbiA9IG5ldyAoTm90TnVs
bCwgYWxsb2NhdGVDZWxsPFdlYkFzc2VtYmx5RnVuY3Rpb24+KHZtLmhlYXApKSBXZWJBc3NlbWJs
eUZ1bmN0aW9uKHZtLCBnbG9iYWxPYmplY3QsIHN0cnVjdHVyZSwganNFbnRyeXBvaW50LCB3YXNt
VG9XYXNtRW50cnlwb2ludExvYWRMb2NhdGlvbiwgc2lnbmF0dXJlSW5kZXgpOwogICAgIGZ1bmN0
aW9uLT5maW5pc2hDcmVhdGlvbih2bSwgZXhlY3V0YWJsZSwgbGVuZ3RoLCBuYW1lLCBpbnN0YW5j
ZSk7CisKKyAgICAvLyBPT1BTOiBtYWtlIHRoaXMgcGFydCBvZiBjcmVhdGUoKS4KKyAgICBleGVj
dXRhYmxlLT5zZXRXZWJBc3NlbWJseUZ1bmN0aW9uKHZtLCBmdW5jdGlvbik7CisKICAgICBBU1NF
UlRfV0lUSF9NRVNTQUdFKCFmdW5jdGlvbi0+aXNMYXJnZUFsbG9jYXRpb24oKSwgIldlYkFzc2Vt
Ymx5RnVuY3Rpb24gc2hvdWxkIGJlIGFsbG9jYXRlZCBub3QgaW4gbGFyZ2UgYWxsb2NhdGlvbiBz
aW5jZSBpdCBpcyBKU0NhbGxlZS4iKTsKICAgICByZXR1cm4gZnVuY3Rpb247CiB9CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseUZ1bmN0aW9uLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlGdW5jdGlv
bi5oCShyZXZpc2lvbiAyNDM2MzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9X
ZWJBc3NlbWJseUZ1bmN0aW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTc0LDEzICs3NCwyMyBAQCBw
dWJsaWM6CiAKICAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mRW50cnlwb2ludExvYWRMb2Nh
dGlvbigpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihXZWJBc3NlbWJseUZ1bmN0aW9uLCBtX2lt
cG9ydGFibGVGdW5jdGlvbikgKyBXYXNtVG9XYXNtSW1wb3J0YWJsZUZ1bmN0aW9uOjpvZmZzZXRP
ZkVudHJ5cG9pbnRMb2FkTG9jYXRpb24oKTsgfQogCisgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRy
PEpTRW50cnlQdHJUYWc+IGpzQ2FsbEVudHJ5cG9pbnQoKQorICAgIHsKKyAgICAgICAgaWYgKG1f
anNDYWxsRW50cnlwb2ludCkKKyAgICAgICAgICAgIHJldHVybiBtX2pzQ2FsbEVudHJ5cG9pbnQu
Y29kZSgpOworICAgICAgICByZXR1cm4ganNDYWxsRW50cnlwb2ludFNsb3coKTsKKyAgICB9CisK
IHByaXZhdGU6CiAgICAgV2ViQXNzZW1ibHlGdW5jdGlvbihWTSYsIEpTR2xvYmFsT2JqZWN0Kiwg
U3RydWN0dXJlKiwgV2FzbTo6Q2FsbGVlJiBqc0VudHJ5cG9pbnQsIFdhc21Ub1dhc21JbXBvcnRh
YmxlRnVuY3Rpb246OkxvYWRMb2NhdGlvbiBlbnRyeXBvaW50TG9hZExvY2F0aW9uLCBXYXNtOjpT
aWduYXR1cmVJbmRleCk7CiAKKyAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8SlNFbnRyeVB0clRh
Zz4ganNDYWxsRW50cnlwb2ludFNsb3coKTsKKwogICAgIC8vIEl0J3Mgc2FmZSB0byBqdXN0IGhv
bGQgdGhlIHJhdyBXYXNtVG9XYXNtSW1wb3J0YWJsZUZ1bmN0aW9uL2pzRW50cnlwb2ludCBiZWNh
dXNlIHdlIGhhdmUgYSByZWZlcmVuY2UKICAgICAvLyB0byBvdXIgSW5zdGFuY2UsIHdoaWNoIHBv
aW50cyB0byB0aGUgTW9kdWxlIHRoYXQgZXhwb3J0ZWQgdXMsIHdoaWNoCiAgICAgLy8gZW5zdXJl
cyB0aGF0IHRoZSBhY3R1YWwgU2lnbmF0dXJlL2NvZGUgZG9lc24ndCBnZXQgZGVhbGxvY2F0ZWQu
CiAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPFdhc21FbnRyeVB0clRhZz4gbV9qc0VudHJ5cG9p
bnQ7CisgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpTRW50cnlQdHJUYWc+IG1fanNDYWxsRW50
cnlwb2ludDsKICAgICBXYXNtVG9XYXNtSW1wb3J0YWJsZUZ1bmN0aW9uIG1faW1wb3J0YWJsZUZ1
bmN0aW9uOwogfTsKIAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>366455</attachid>
            <date>2019-04-01 19:24:55 -0700</date>
            <delta_ts>2019-04-01 19:29:40 -0700</delta_ts>
            <desc>WIP</desc>
            <filename>b-backup.diff</filename>
            <type>text/plain</type>
            <size>36506</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFBlcmZvcm1hbmNlVGVzdHMvSmV0U3RyZWFtMi9KZXRTdHJlYW1Ecml2ZXIuanMKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gUGVyZm9ybWFuY2VUZXN0cy9KZXRTdHJlYW0yL0pldFN0cmVhbURyaXZlci5q
cwkocmV2aXNpb24gMjQzNjM1KQorKysgUGVyZm9ybWFuY2VUZXN0cy9KZXRTdHJlYW0yL0pldFN0
cmVhbURyaXZlci5qcwkod29ya2luZyBjb3B5KQpAQCAtNzkzLDExICs3OTMsMTEgQEAgY2xhc3Mg
V2FzbUJlbmNobWFyayBleHRlbmRzIEJlbmNobWFyayB7CiAgICAgICAgICAgICAgICAgICAgIGNv
bnNvbGUubG9nKCdJbnRlcmNlcHRlZCBxdWl0L2Fib3J0Jyk7CiAgICAgICAgICAgICB9OwogCi0g
ICAgICAgICAgICBvbGRQcmludCA9IGdsb2JhbE9iamVjdC5wcmludDsKLSAgICAgICAgICAgIGds
b2JhbE9iamVjdC5wcmludCA9IGdsb2JhbE9iamVjdC5wcmludEVyciA9ICguLi5hcmdzKSA9PiB7
Ci0gICAgICAgICAgICAgICAgaWYgKHZlcmJvc2UpCi0gICAgICAgICAgICAgICAgICAgIGNvbnNv
bGUubG9nKCdJbnRlcmNlcHRlZCBwcmludDogJywgLi4uYXJncyk7Ci0gICAgICAgICAgICB9Owor
ICAgICAgICAgICAgLy9vbGRQcmludCA9IGdsb2JhbE9iamVjdC5wcmludDsKKyAgICAgICAgICAg
IC8vZ2xvYmFsT2JqZWN0LnByaW50ID0gZ2xvYmFsT2JqZWN0LnByaW50RXJyID0gKC4uLmFyZ3Mp
ID0+IHsKKyAgICAgICAgICAgIC8vICAgIGlmICh2ZXJib3NlKQorICAgICAgICAgICAgLy8gICAg
ICAgIGNvbnNvbGUubG9nKCdJbnRlcmNlcHRlZCBwcmludDogJywgLi4uYXJncyk7CisgICAgICAg
ICAgICAvL307CiAKICAgICAgICAgICAgIGxldCBNb2R1bGUgPSB7CiAgICAgICAgICAgICAgICAg
cHJlUnVuOiBbXSwKSW5kZXg6IFBlcmZvcm1hbmNlVGVzdHMvSmV0U3RyZWFtMi9jbGkuanMKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gUGVyZm9ybWFuY2VUZXN0cy9KZXRTdHJlYW0yL2NsaS5qcwkocmV2aXNpb24g
MjQzNjM1KQorKysgUGVyZm9ybWFuY2VUZXN0cy9KZXRTdHJlYW0yL2NsaS5qcwkod29ya2luZyBj
b3B5KQpAQCAtMjgsNiArMjgsOCBAQCBjb25zb2xlID0gewogICAgIGxvZzogcHJpbnQKIH0KIAor
dGVzdExpc3QgPSBbInJpY2hhcmRzLXdhc20iXTsKKwogaWYgKHR5cGVvZiB0ZXN0TGlzdCA9PT0g
InVuZGVmaW5lZCIpCiAgICAgdGVzdExpc3QgPSB1bmRlZmluZWQ7CiAKSW5kZXg6IFBlcmZvcm1h
bmNlVGVzdHMvSmV0U3RyZWFtMi93YXNtL3JpY2hhcmRzLmpzCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFBlcmZv
cm1hbmNlVGVzdHMvSmV0U3RyZWFtMi93YXNtL3JpY2hhcmRzLmpzCShyZXZpc2lvbiAyNDM2MzUp
CisrKyBQZXJmb3JtYW5jZVRlc3RzL0pldFN0cmVhbTIvd2FzbS9yaWNoYXJkcy5qcwkod29ya2lu
ZyBjb3B5KQpAQCAtOTQ2LDcgKzk0Niw4IEBAIHZhciBfbWVtc2V0ID0gTW9kdWxlWyJfbWVtc2V0
Il0gPSAoZnVuY3QKIHZhciBfc2JyayA9IE1vZHVsZVsiX3NicmsiXSA9IChmdW5jdGlvbigpIHsK
ICByZXR1cm4gTW9kdWxlWyJhc20iXVsiX3NicmsiXS5hcHBseShudWxsLCBhcmd1bWVudHMpOwog
fSk7Ci12YXIgX3NjaGVkdWxlSXRlciA9IE1vZHVsZVsiX3NjaGVkdWxlSXRlciJdID0gKGZ1bmN0
aW9uKCkgewordmFyIF9zY2hlZHVsZUl0ZXIgPSBNb2R1bGVbIl9zY2hlZHVsZUl0ZXIiXSA9IChm
dW5jdGlvbiBmb29CYXJCYXooKSB7CisgLy9yZXR1cm4gTW9kdWxlWyJhc20iXVsiX3NjaGVkdWxl
SXRlciJdKCk7CiAgcmV0dXJuIE1vZHVsZVsiYXNtIl1bIl9zY2hlZHVsZUl0ZXIiXS5hcHBseShu
dWxsLCBhcmd1bWVudHMpOwogfSk7CiB2YXIgX3NldHVwID0gTW9kdWxlWyJfc2V0dXAiXSA9IChm
dW5jdGlvbigpIHsKQEAgLTExMDYsOCArMTEwNyw5IEBAIGZ1bmN0aW9uIHJ1blJpY2hhcmRzKCkg
ewogICAgIGZvciAobGV0IGkgPSAwOyBpIDwgNDsgKytpKSB7CiAgICAgICAgIE1vZHVsZS5fc2V0
dXAoKTsKICAgICAgICAgd2hpbGUgKHNjaGVkdWxlSXRlcigpKSB7IH0KLSAgICAgICAgaWYgKE1v
ZHVsZS5fZ2V0UXBrdGNvdW50KCkgIT09IDIzMjY0MTAgfHwgTW9kdWxlLl9nZXRIb2xkY291bnQo
KSAhPT0gOTMwNTYzKQorICAgICAgICBpZiAoTW9kdWxlLl9nZXRRcGt0Y291bnQoKSAhPT0gMjMy
NjQxMCB8fCBNb2R1bGUuX2dldEhvbGRjb3VudCgpICE9PSA5MzA1NjMpIHsKKyAgICAgICAgICAg
IHByaW50KCJCYWQgcmVzdWx0OiAiLCBNb2R1bGUuX2dldFFwa3Rjb3VudCgpLCAiICIsIE1vZHVs
ZS5fZ2V0SG9sZGNvdW50KCkpOwogICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJCYWQgcmlj
aGFyZHMgcmVzdWx0ISIpOworICAgICAgICB9CiAgICAgfQogfQotCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyQ29kZVJlZi5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJDb2RlUmVm
LmgJKHJldmlzaW9uIDI0MzYzNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIv
TWFjcm9Bc3NlbWJsZXJDb2RlUmVmLmgJKHdvcmtpbmcgY29weSkKQEAgLTM4MCw2ICszODAsMTQg
QEAgcHVibGljOgogICAgICAgICBBU1NFUlQobV9leGVjdXRhYmxlTWVtb3J5LT5zdGFydCgpKTsK
ICAgICAgICAgQVNTRVJUKG1fY29kZVB0cik7CiAgICAgfQorCisgICAgdGVtcGxhdGU8UHRyVGFn
IG90aGVyVGFnPgorICAgIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiYgb3BlcmF0b3I9KGNvbnN0IE1h
Y3JvQXNzZW1ibGVyQ29kZVJlZjxvdGhlclRhZz4mIG90aGVyQ29kZVJlZikKKyAgICB7CisgICAg
ICAgIG1fY29kZVB0ciA9IE1hY3JvQXNzZW1ibGVyQ29kZVB0cjx0YWc+OjpjcmVhdGVGcm9tRXhl
Y3V0YWJsZUFkZHJlc3Mob3RoZXJDb2RlUmVmLmNvZGUoKS50ZW1wbGF0ZSByZXRhZ2dlZEV4ZWN1
dGFibGVBZGRyZXNzPHRhZz4oKSk7CisgICAgICAgIG1fZXhlY3V0YWJsZU1lbW9yeSA9IG90aGVy
Q29kZVJlZi5tX2V4ZWN1dGFibGVNZW1vcnk7CisgICAgICAgIHJldHVybiAqdGhpczsKKyAgICB9
CiAgICAgCiAgICAgLy8gVXNlIHRoaXMgb25seSB3aGVuIHlvdSBrbm93IHRoYXQgdGhlIGNvZGVQ
dHIgcmVmZXJzIHRvIGNvZGUgdGhhdCBpcwogICAgIC8vIGFscmVhZHkgYmVpbmcga2VwdCBhbGl2
ZSB0aHJvdWdoIHNvbWUgb3RoZXIgbWVhbnMuIFR5cGljYWxseSB0aGlzIG1lYW5zCkBAIC00NDMs
OSArNDUxLDkgQEAgcHVibGljOgogcHJpdmF0ZToKICAgICB0ZW1wbGF0ZTxQdHJUYWcgb3RoZXJU
YWc+CiAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmKGNvbnN0IE1hY3JvQXNzZW1ibGVyQ29kZVJl
ZjxvdGhlclRhZz4mIG90aGVyQ29kZVJlZikKLSAgICAgICAgOiBtX2NvZGVQdHIoTWFjcm9Bc3Nl
bWJsZXJDb2RlUHRyPHRhZz46OmNyZWF0ZUZyb21FeGVjdXRhYmxlQWRkcmVzcyhvdGhlckNvZGVS
ZWYuY29kZSgpLnRlbXBsYXRlIHJldGFnZ2VkRXhlY3V0YWJsZUFkZHJlc3M8dGFnPigpKSkKLSAg
ICAgICAgLCBtX2V4ZWN1dGFibGVNZW1vcnkob3RoZXJDb2RlUmVmLm1fZXhlY3V0YWJsZU1lbW9y
eSkKLSAgICB7IH0KKyAgICB7CisgICAgICAgICp0aGlzID0gb3RoZXJDb2RlUmVmOworICAgIH0K
IAogICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0cjx0YWc+IG1fY29kZVB0cjsKICAgICBSZWZQdHI8
RXhlY3V0YWJsZU1lbW9yeUhhbmRsZT4gbV9leGVjdXRhYmxlTWVtb3J5OwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHAJKHJldmlzaW9u
IDI0MzYzNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNzM2LDYgKzE3MzYsMTUgQEAgQnl0ZUNvZGVQYXJzZXI6
OkNhbGxPcHRpbWl6YXRpb25SZXN1bHQgQgogICAgICAgICB9CiAgICAgfTsKIAorICAgIC8qCisg
ICAgaWYgKE5hdGl2ZUV4ZWN1dGFibGUqIGV4ZWN1dGFibGUgPSBjYWxsZWUubmF0aXZlRXhlY3V0
YWJsZSgpKSB7CisgICAgICAgIGRhdGFMb2dMbigiTmF0aXZlIGV4ZWN1dGFibGVyIDogIiwgUmF3
UG9pbnRlcihleGVjdXRhYmxlKSk7CisgICAgICAgIGlmIChXZWJBc3NlbWJseUZ1bmN0aW9uKiBm
ID0gZXhlY3V0YWJsZS0+d2ViQXNzZW1ibHlGdW5jdGlvbigpKSB7CisgICAgICAgICAgICBkYXRh
TG9nTG4oIkhhdmUgd2FzbSBmdW5jdGlvbiE6ICIsIFJhd1BvaW50ZXIoZikpOworICAgICAgICB9
CisgICAgfQorICAgICovCisKICAgICBpZiAoSW50ZXJuYWxGdW5jdGlvbiogZnVuY3Rpb24gPSBj
YWxsZWUuaW50ZXJuYWxGdW5jdGlvbigpKSB7CiAgICAgICAgIGlmIChoYW5kbGVDb25zdGFudElu
dGVybmFsRnVuY3Rpb24oY2FsbFRhcmdldE5vZGUsIHJlc3VsdCwgZnVuY3Rpb24sIHJlZ2lzdGVy
T2Zmc2V0LCBhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcywgc3BlY2lhbGl6YXRpb25LaW5kLCBw
cmVkaWN0aW9uLCBpbnNlcnRDaGVja3NXaXRoQWNjb3VudGluZykpIHsKICAgICAgICAgICAgIGVu
ZFNwZWNpYWxDYXNlKCk7CkBAIC0xODAwLDYgKzE4MDksMTQgQEAgYm9vbCBCeXRlQ29kZVBhcnNl
cjo6aGFuZGxlVmFyYXJnc0lubGluaQogICAgICAgICBtYW5kYXRvcnlNaW5pbXVtID0gZnVuY3Rp
b25FeGVjdXRhYmxlLT5wYXJhbWV0ZXJDb3VudCgpOwogICAgIGVsc2UKICAgICAgICAgbWFuZGF0
b3J5TWluaW11bSA9IDA7CisKKyAgICAvKgorICAgIGlmIChOYXRpdmVFeGVjdXRhYmxlKiBleGVj
dXRhYmxlID0gY2FsbFZhcmlhbnQubmF0aXZlRXhlY3V0YWJsZSgpKSB7CisgICAgICAgIGlmIChX
ZWJBc3NlbWJseUZ1bmN0aW9uKiBmID0gZXhlY3V0YWJsZS0+d2ViQXNzZW1ibHlGdW5jdGlvbigp
KSB7CisgICAgICAgICAgICBkYXRhTG9nTG4oIkhhdmUgd2FzbSBmdW5jdGlvbiB2YXJhcmdzOiAi
LCBSYXdQb2ludGVyKGYpKTsKKyAgICAgICAgfQorICAgIH0KKyAgICAqLwogICAgIAogICAgIC8v
IGluY2x1ZGVzICJ0aGlzIgogICAgIHVuc2lnbmVkIG1heE51bUFyZ3VtZW50cyA9IHN0ZDo6bWF4
KGNhbGxMaW5rU3RhdHVzLm1heE51bUFyZ3VtZW50cygpLCBtYW5kYXRvcnlNaW5pbXVtICsgMSk7
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1N0cmVuZ3RoUmVkdWN0aW9uUGhh
c2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3RyZW5n
dGhSZWR1Y3Rpb25QaGFzZS5jcHAJKHJldmlzaW9uIDI0MzYzNSkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHU3RyZW5ndGhSZWR1Y3Rpb25QaGFzZS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTM5LDYgKzM5LDcgQEAKICNpbmNsdWRlICJNYXRoQ29tbW9uLmgiCiAjaW5jbHVkZSAiUmVn
RXhwT2JqZWN0LmgiCiAjaW5jbHVkZSAiU3RyaW5nUHJvdG90eXBlLmgiCisjaW5jbHVkZSAiV2Vi
QXNzZW1ibHlGdW5jdGlvbi5oIgogI2luY2x1ZGUgPGNzdGRsaWI+CiAjaW5jbHVkZSA8d3RmL3Rl
eHQvU3RyaW5nQnVpbGRlci5oPgogCkBAIC05MTYsNiArOTE3LDkgQEAgcHJpdmF0ZToKICAgICAg
ICAgICAgIEVkZ2UgY2FsbGVlID0gbV9ncmFwaC52YXJBcmdDaGlsZChtX25vZGUsIDApOwogICAg
ICAgICAgICAgQ2FsbFZhcmlhbnQgY2FsbFZhcmlhbnQ7CiAgICAgICAgICAgICBpZiAoSlNGdW5j
dGlvbiogZnVuY3Rpb24gPSBjYWxsZWUtPmR5bmFtaWNDYXN0Q29uc3RhbnQ8SlNGdW5jdGlvbio+
KHZtKCkpKSB7CisgICAgICAgICAgICAgICAgaWYgKGpzRHluYW1pY0Nhc3Q8V2ViQXNzZW1ibHlG
dW5jdGlvbkJhc2UqPih2bSgpLCBmdW5jdGlvbikpCisgICAgICAgICAgICAgICAgICAgIGRhdGFM
b2dMbigiV2FzbSBkaXJlY3QgY2FsbCEiKTsKKwogICAgICAgICAgICAgICAgIGV4ZWN1dGFibGUg
PSBmdW5jdGlvbi0+ZXhlY3V0YWJsZSgpOwogICAgICAgICAgICAgICAgIGNhbGxWYXJpYW50ID0g
Q2FsbFZhcmlhbnQoZnVuY3Rpb24pOwogICAgICAgICAgICAgfSBlbHNlIGlmIChjYWxsZWUtPmlz
RnVuY3Rpb25BbGxvY2F0aW9uKCkpIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRl
cnByZXRlci9JbnRlcnByZXRlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2ludGVycHJldGVyL0ludGVycHJldGVyLmNwcAkocmV2aXNpb24gMjQzNjM1KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0ludGVycHJldGVyLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtNTQ5LDYgKzU0OSwxMSBAQCBwdWJsaWM6CiAgICAgICAgICAgICB9CiAgICAgICAg
IH0KIAorICAgICAgICBpZiAodmlzaXRvci0+Y2FsbGVlKCkuaXNDZWxsKCkpIHsKKyAgICAgICAg
ICAgIGlmIChhdXRvKiBpY0NhbGxlZSA9IGpzRHluYW1pY0Nhc3Q8SlNUb1dhc21JQ0NhbGxlZSo+
KG1fdm0sIHZpc2l0b3ItPmNhbGxlZSgpLmFzQ2VsbCgpKSkKKyAgICAgICAgICAgICAgICBtX3Zt
Lndhc21Db250ZXh0LnN0b3JlKGljQ2FsbGVlLT5mdW5jdGlvbigpLT5wcmV2aW91c0luc3RhbmNl
KG1fY2FsbEZyYW1lKSwgbV92bS5zb2Z0U3RhY2tMaW1pdCgpKTsKKyAgICAgICAgfQorCiAgICAg
ICAgIG5vdGlmeURlYnVnZ2VyT2ZVbndpbmRpbmcobV92bSwgbV9jYWxsRnJhbWUpOwogCiAgICAg
ICAgIGNvcHlDYWxsZWVTYXZlc1RvRW50cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVyKHZpc2l0b3Ip
OwpAQCAtNTY0LDcgKzU2OSw3IEBAIHByaXZhdGU6CiAgICAgdm9pZCBjb3B5Q2FsbGVlU2F2ZXNU
b0VudHJ5RnJhbWVDYWxsZWVTYXZlc0J1ZmZlcihTdGFja1Zpc2l0b3ImIHZpc2l0b3IpIGNvbnN0
CiAgICAgewogI2lmICFFTkFCTEUoQ19MT09QKSAmJiBOVU1CRVJfT0ZfQ0FMTEVFX1NBVkVTX1JF
R0lTVEVSUyA+IDAKLSAgICAgICAgY29uc3QgUmVnaXN0ZXJBdE9mZnNldExpc3QqIGN1cnJlbnRD
YWxsZWVTYXZlcyA9IHZpc2l0b3ItPmNhbGxlZVNhdmVSZWdpc3RlcnMoKTsKKyAgICAgICAgT3B0
aW9uYWw8UmVnaXN0ZXJBdE9mZnNldExpc3Q+IGN1cnJlbnRDYWxsZWVTYXZlcyA9IHZpc2l0b3It
PmNhbGxlZVNhdmVSZWdpc3RlcnNGb3JVbndpbmRpbmcoKTsKIAogICAgICAgICBpZiAoIWN1cnJl
bnRDYWxsZWVTYXZlcykKICAgICAgICAgICAgIHJldHVybjsKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9pbnRlcnByZXRlci9TdGFja1Zpc2l0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9TdGFja1Zpc2l0b3IuY3BwCShyZXZpc2lvbiAy
NDM2MzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvU3RhY2tWaXNpdG9y
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzMsNiArMzMsNyBAQAogI2luY2x1ZGUgIkpTQ0lubGlu
ZXMuaCIKICNpbmNsdWRlICJXYXNtQ2FsbGVlLmgiCiAjaW5jbHVkZSAiV2FzbUluZGV4T3JOYW1l
LmgiCisjaW5jbHVkZSAiV2ViQXNzZW1ibHlGdW5jdGlvbi5oIgogI2luY2x1ZGUgPHd0Zi90ZXh0
L1N0cmluZ0J1aWxkZXIuaD4KIAogbmFtZXNwYWNlIEpTQyB7CkBAIC0yNTIsMTAgKzI1MywxMCBA
QCBTdGFja1Zpc2l0b3I6OkZyYW1lOjpDb2RlVHlwZSBTdGFja1Zpc2l0CiAgICAgcmV0dXJuIENv
ZGVUeXBlOjpHbG9iYWw7CiB9CiAKLWNvbnN0IFJlZ2lzdGVyQXRPZmZzZXRMaXN0KiBTdGFja1Zp
c2l0b3I6OkZyYW1lOjpjYWxsZWVTYXZlUmVnaXN0ZXJzKCkKK09wdGlvbmFsPFJlZ2lzdGVyQXRP
ZmZzZXRMaXN0PiBTdGFja1Zpc2l0b3I6OkZyYW1lOjpjYWxsZWVTYXZlUmVnaXN0ZXJzRm9yVW53
aW5kaW5nKCkKIHsKICAgICBpZiAoaXNJbmxpbmVkRnJhbWUoKSkKLSAgICAgICAgcmV0dXJuIG51
bGxwdHI7CisgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAKICNpZiAhRU5BQkxFKENfTE9P
UCkgJiYgTlVNQkVSX09GX0NBTExFRV9TQVZFU19SRUdJU1RFUlMgPiAwCiAKQEAgLTI2MywxOSAr
MjY0LDI0IEBAIGNvbnN0IFJlZ2lzdGVyQXRPZmZzZXRMaXN0KiBTdGFja1Zpc2l0b3IKICAgICBp
ZiAoaXNXYXNtRnJhbWUoKSkgewogICAgICAgICBpZiAoY2FsbGVlKCkuaXNDZWxsKCkpIHsKICAg
ICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKGlzV2ViQXNzZW1ibHlUb0pTQ2FsbGVlKGNhbGxlZSgp
LmFzQ2VsbCgpKSk7Ci0gICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgICAgIHJl
dHVybiBXVEY6Om51bGxvcHQ7CiAgICAgICAgIH0KICAgICAgICAgV2FzbTo6Q2FsbGVlKiB3YXNt
Q2FsbGVlID0gY2FsbGVlKCkuYXNXYXNtQ2FsbGVlKCk7Ci0gICAgICAgIHJldHVybiB3YXNtQ2Fs
bGVlLT5jYWxsZWVTYXZlUmVnaXN0ZXJzKCk7CisgICAgICAgIHJldHVybiAqd2FzbUNhbGxlZS0+
Y2FsbGVlU2F2ZVJlZ2lzdGVycygpOworICAgIH0KKworICAgIGlmIChjYWxsZWUoKS5pc0NlbGwo
KSkgeworICAgICAgICBpZiAoYXV0byogaWNDYWxsZWUgPSBqc0R5bmFtaWNDYXN0PEpTVG9XYXNt
SUNDYWxsZWUqPigqY2FsbGVlKCkuYXNDZWxsKCktPnZtKCksIGNhbGxlZSgpLmFzQ2VsbCgpKSkK
KyAgICAgICAgICAgIHJldHVybiBpY0NhbGxlZS0+ZnVuY3Rpb24oKS0+dXNlZENhbGxlZVNhdmVS
ZWdpc3RlcnMoKTsKICAgICB9CiAjZW5kaWYgLy8gRU5BQkxFKFdFQkFTU0VNQkxZKQogCiAgICAg
aWYgKENvZGVCbG9jayogY29kZUJsb2NrID0gdGhpcy0+Y29kZUJsb2NrKCkpCi0gICAgICAgIHJl
dHVybiBjb2RlQmxvY2stPmNhbGxlZVNhdmVSZWdpc3RlcnMoKTsKKyAgICAgICAgcmV0dXJuICpj
b2RlQmxvY2stPmNhbGxlZVNhdmVSZWdpc3RlcnMoKTsKIAogI2VuZGlmIC8vICFFTkFCTEUoQ19M
T09QKSAmJiBOVU1CRVJfT0ZfQ0FMTEVFX1NBVkVTX1JFR0lTVEVSUyA+IDAKIAotICAgIHJldHVy
biBudWxscHRyOworICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiB9CiAKIFN0cmluZyBTdGFja1Zp
c2l0b3I6OkZyYW1lOjpmdW5jdGlvbk5hbWUoKSBjb25zdApJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ludGVycHJldGVyL1N0YWNrVmlzaXRvci5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9TdGFja1Zpc2l0b3IuaAkocmV2aXNpb24gMjQzNjM1
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL1N0YWNrVmlzaXRvci5oCSh3
b3JraW5nIGNvcHkpCkBAIC05NCw3ICs5NCw3IEBAIHB1YmxpYzoKICAgICAgICAgYm9vbCBoYXNM
aW5lQW5kQ29sdW1uSW5mbygpIGNvbnN0OwogICAgICAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lk
IGNvbXB1dGVMaW5lQW5kQ29sdW1uKHVuc2lnbmVkJiBsaW5lLCB1bnNpZ25lZCYgY29sdW1uKSBj
b25zdDsKIAotICAgICAgICBjb25zdCBSZWdpc3RlckF0T2Zmc2V0TGlzdCogY2FsbGVlU2F2ZVJl
Z2lzdGVycygpOworICAgICAgICBPcHRpb25hbDxSZWdpc3RlckF0T2Zmc2V0TGlzdD4gY2FsbGVl
U2F2ZVJlZ2lzdGVyc0ZvclVud2luZGluZygpOwogCiAgICAgICAgIENsb25lZEFyZ3VtZW50cyog
Y3JlYXRlQXJndW1lbnRzKCk7CiAgICAgICAgIENhbGxGcmFtZSogY2FsbEZyYW1lKCkgY29uc3Qg
eyByZXR1cm4gbV9jYWxsRnJhbWU7IH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
SklUT3BlcmF0aW9ucy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9KSVRPcGVyYXRpb25zLmNwcAkocmV2aXNpb24gMjQzNjM1KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9KSVRPcGVyYXRpb25zLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzYsNiArNzYs
NyBAQAogI2luY2x1ZGUgIlRodW5rR2VuZXJhdG9ycy5oIgogI2luY2x1ZGUgIlR5cGVQcm9maWxl
ckxvZy5oIgogI2luY2x1ZGUgIlZNSW5saW5lcy5oIgorI2luY2x1ZGUgIldlYkFzc2VtYmx5RnVu
Y3Rpb24uaCIKICNpbmNsdWRlIDx3dGYvSW5saW5lQVNNLmg+CiAKIG5hbWVzcGFjZSBKU0MgewpA
QCAtMTAzNiw5ICsxMDM3LDE3IEBAIFNsb3dQYXRoUmV0dXJuVHlwZSBKSVRfT1BFUkFUSU9OIG9w
ZXJhdGkKIAogICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxKU0VudHJ5UHRyVGFnPiBjb2RlUHRy
OwogICAgIENvZGVCbG9jayogY29kZUJsb2NrID0gbnVsbHB0cjsKLSAgICBpZiAoZXhlY3V0YWJs
ZS0+aXNIb3N0RnVuY3Rpb24oKSkKLSAgICAgICAgY29kZVB0ciA9IGV4ZWN1dGFibGUtPmVudHJ5
cG9pbnRGb3Ioa2luZCwgTXVzdENoZWNrQXJpdHkpOwotICAgIGVsc2UgeworICAgIGlmIChleGVj
dXRhYmxlLT5pc0hvc3RGdW5jdGlvbigpKSB7CisjaWYgRU5BQkxFKFdFQkFTU0VNQkxZKQorICAg
ICAgICBpZiAoYXV0byogd2FzbUZ1bmN0aW9uID0ganNEeW5hbWljQ2FzdDxXZWJBc3NlbWJseUZ1
bmN0aW9uKj4oKnZtLCBjYWxsZWUpKSB7CisgICAgICAgICAgICBjb2RlUHRyID0gd2FzbUZ1bmN0
aW9uLT5qc0NhbGxFbnRyeXBvaW50KCk7CisgICAgICAgICAgICBkYXRhTG9nTG4oIklDaW5nIHdh
c20hIik7CisgICAgICAgIH0KKyNlbmRpZgorCisgICAgICAgIGlmICghY29kZVB0cikKKyAgICAg
ICAgICAgIGNvZGVQdHIgPSBleGVjdXRhYmxlLT5lbnRyeXBvaW50Rm9yKGtpbmQsIE11c3RDaGVj
a0FyaXR5KTsKKyAgICB9IGVsc2UgewogICAgICAgICBGdW5jdGlvbkV4ZWN1dGFibGUqIGZ1bmN0
aW9uRXhlY3V0YWJsZSA9IHN0YXRpY19jYXN0PEZ1bmN0aW9uRXhlY3V0YWJsZSo+KGV4ZWN1dGFi
bGUpOwogCiAgICAgICAgIGF1dG8gaGFuZGxlVGhyb3dFeGNlcHRpb24gPSBbJl0gKCkgewpAQCAt
MTA2NCw2ICsxMDczLDcgQEAgU2xvd1BhdGhSZXR1cm5UeXBlIEpJVF9PUEVSQVRJT04gb3BlcmF0
aQogICAgICAgICAgICAgYXJpdHkgPSBBcml0eUNoZWNrTm90UmVxdWlyZWQ7CiAgICAgICAgIGNv
ZGVQdHIgPSBmdW5jdGlvbkV4ZWN1dGFibGUtPmVudHJ5cG9pbnRGb3Ioa2luZCwgYXJpdHkpOwog
ICAgIH0KKwogICAgIGlmICghY2FsbExpbmtJbmZvLT5zZWVuT25jZSgpKQogICAgICAgICBjYWxs
TGlua0luZm8tPnNldFNlZW4oKTsKICAgICBlbHNlCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9OYXRpdmVFeGVjdXRhYmxlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9OYXRpdmVFeGVjdXRhYmxlLmNwcAkocmV2aXNpb24gMjQzNjM1
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTmF0aXZlRXhlY3V0YWJsZS5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTM0LDYgKzM0LDcgQEAKICNpbmNsdWRlICJQYXJzZXIuaCIKICNp
bmNsdWRlICJUeXBlUHJvZmlsZXIuaCIKICNpbmNsdWRlICJWTUlubGluZXMuaCIKKyNpbmNsdWRl
ICJXZWJBc3NlbWJseUZ1bmN0aW9uLmgiCiAjaW5jbHVkZSA8d3RmL0NvbW1hUHJpbnRlci5oPgog
CiBuYW1lc3BhY2UgSlNDIHsKQEAgLTQyLDggKzQzLDcgQEAgY29uc3QgQ2xhc3NJbmZvIE5hdGl2
ZUV4ZWN1dGFibGU6OnNfaW5mbwogCiBOYXRpdmVFeGVjdXRhYmxlKiBOYXRpdmVFeGVjdXRhYmxl
OjpjcmVhdGUoVk0mIHZtLCBSZWY8SklUQ29kZT4mJiBjYWxsVGh1bmssIFRhZ2dlZE5hdGl2ZUZ1
bmN0aW9uIGZ1bmN0aW9uLCBSZWY8SklUQ29kZT4mJiBjb25zdHJ1Y3RUaHVuaywgVGFnZ2VkTmF0
aXZlRnVuY3Rpb24gY29uc3RydWN0b3IsIGNvbnN0IFN0cmluZyYgbmFtZSkKIHsKLSAgICBOYXRp
dmVFeGVjdXRhYmxlKiBleGVjdXRhYmxlOwotICAgIGV4ZWN1dGFibGUgPSBuZXcgKE5vdE51bGws
IGFsbG9jYXRlQ2VsbDxOYXRpdmVFeGVjdXRhYmxlPih2bS5oZWFwKSkgTmF0aXZlRXhlY3V0YWJs
ZSh2bSwgZnVuY3Rpb24sIGNvbnN0cnVjdG9yKTsKKyAgICBOYXRpdmVFeGVjdXRhYmxlKiBleGVj
dXRhYmxlID0gbmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8TmF0aXZlRXhlY3V0YWJsZT4odm0u
aGVhcCkpIE5hdGl2ZUV4ZWN1dGFibGUodm0sIGZ1bmN0aW9uLCBjb25zdHJ1Y3Rvcik7CiAgICAg
ZXhlY3V0YWJsZS0+ZmluaXNoQ3JlYXRpb24odm0sIFdURk1vdmUoY2FsbFRodW5rKSwgV1RGTW92
ZShjb25zdHJ1Y3RUaHVuayksIG5hbWUpOwogICAgIHJldHVybiBleGVjdXRhYmxlOwogfQpAQCAt
ODAsNiArODAsMTggQEAgTmF0aXZlRXhlY3V0YWJsZTo6TmF0aXZlRXhlY3V0YWJsZShWTSYgdgog
ewogfQogCit2b2lkIE5hdGl2ZUV4ZWN1dGFibGU6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxs
LCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3sKKyAgICBOYXRpdmVFeGVjdXRhYmxlKiB0aGlzT2Jq
ZWN0ID0ganNDYXN0PE5hdGl2ZUV4ZWN1dGFibGUqPihjZWxsKTsKKyAgICBBU1NFUlRfR0NfT0JK
RUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CisKKyAgICBCYXNlOjp2aXNpdENoaWxk
cmVuKHRoaXNPYmplY3QsIHZpc2l0b3IpOworCisjaWYgRU5BQkxFKFdFQkFTU0VNQkxZKQorICAg
IHZpc2l0b3IuYXBwZW5kKHRoaXNPYmplY3QtPm1fd2ViQXNzZW1ibHlGdW5jdGlvbik7CisjZW5k
aWYKK30KKwogY29uc3QgRE9NSklUOjpTaWduYXR1cmUqIE5hdGl2ZUV4ZWN1dGFibGU6OnNpZ25h
dHVyZUZvcihDb2RlU3BlY2lhbGl6YXRpb25LaW5kIGtpbmQpIGNvbnN0CiB7CiAgICAgQVNTRVJU
KGhhc0pJVENvZGVGb3Ioa2luZCkpOwpAQCAtMTAwLDQgKzExMiw2IEBAIENvZGVCbG9ja0hhc2gg
TmF0aXZlRXhlY3V0YWJsZTo6aGFzaEZvcigKICAgICByZXR1cm4gQ29kZUJsb2NrSGFzaChiaXR3
aXNlX2Nhc3Q8dWludHB0cl90PihtX2NvbnN0cnVjdG9yKSk7CiB9CiAKK3ZvaWQgTmF0aXZlRXhl
Y3V0YWJsZTo6c2V0V2ViQXNzZW1ibHlGdW5jdGlvbihWTSYgdm0sIFdlYkFzc2VtYmx5RnVuY3Rp
b24qIGZ1bmN0aW9uKSB7IG1fd2ViQXNzZW1ibHlGdW5jdGlvbi5zZXQodm0sIHRoaXMsIGZ1bmN0
aW9uKTsgfQorCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL05hdGl2ZUV4ZWN1dGFibGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9OYXRpdmVFeGVjdXRhYmxlLmgJKHJldmlzaW9uIDI0MzYzNSkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL05hdGl2ZUV4ZWN1dGFibGUuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMjksNiArMjksMTAgQEAKIAogbmFtZXNwYWNlIEpTQyB7CiAKKyNpZiBFTkFC
TEUoV0VCQVNTRU1CTFkpCitjbGFzcyBXZWJBc3NlbWJseUZ1bmN0aW9uOworI2VuZGlmCisKIGNs
YXNzIE5hdGl2ZUV4ZWN1dGFibGUgZmluYWwgOiBwdWJsaWMgRXhlY3V0YWJsZUJhc2UgewogICAg
IGZyaWVuZCBjbGFzcyBKSVQ7CiAgICAgZnJpZW5kIGNsYXNzIExMSW50T2Zmc2V0c0V4dHJhY3Rv
cjsKQEAgLTc2LDE2ICs4MCwyNyBAQCBwdWJsaWM6CiAgICAgY29uc3QgRE9NSklUOjpTaWduYXR1
cmUqIHNpZ25hdHVyZUZvcihDb2RlU3BlY2lhbGl6YXRpb25LaW5kKSBjb25zdDsKICAgICBJbnRy
aW5zaWMgaW50cmluc2ljKCkgY29uc3Q7CiAKKworI2lmIEVOQUJMRShXRUJBU1NFTUJMWSkKKyAg
ICB2b2lkIHNldFdlYkFzc2VtYmx5RnVuY3Rpb24oVk0mLCBXZWJBc3NlbWJseUZ1bmN0aW9uKik7
CisgICAgV2ViQXNzZW1ibHlGdW5jdGlvbiogd2ViQXNzZW1ibHlGdW5jdGlvbigpIHsgcmV0dXJu
IG1fd2ViQXNzZW1ibHlGdW5jdGlvbi5nZXQoKTsgfQorI2VuZGlmCisKIHByb3RlY3RlZDoKICAg
ICB2b2lkIGZpbmlzaENyZWF0aW9uKFZNJiwgUmVmPEpJVENvZGU+JiYgY2FsbFRodW5rLCBSZWY8
SklUQ29kZT4mJiBjb25zdHJ1Y3RUaHVuaywgY29uc3QgU3RyaW5nJiBuYW1lKTsKIAogcHJpdmF0
ZToKKyAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7
CisKICAgICBOYXRpdmVFeGVjdXRhYmxlKFZNJiwgVGFnZ2VkTmF0aXZlRnVuY3Rpb24sIFRhZ2dl
ZE5hdGl2ZUZ1bmN0aW9uIGNvbnN0cnVjdG9yKTsKIAogICAgIFRhZ2dlZE5hdGl2ZUZ1bmN0aW9u
IG1fZnVuY3Rpb247CiAgICAgVGFnZ2VkTmF0aXZlRnVuY3Rpb24gbV9jb25zdHJ1Y3RvcjsKIAog
ICAgIFN0cmluZyBtX25hbWU7CisjaWYgRU5BQkxFKFdFQkFTU0VNQkxZKQorICAgIFdyaXRlQmFy
cmllcjxXZWJBc3NlbWJseUZ1bmN0aW9uPiBtX3dlYkFzc2VtYmx5RnVuY3Rpb247CisjZW5kaWYK
IH07CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3dh
c20vV2FzbU9NR1BsYW4uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93
YXNtL1dhc21PTUdQbGFuLmNwcAkocmV2aXNpb24gMjQzNjM1KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL3dhc20vV2FzbU9NR1BsYW4uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMzgsNyArMTM4
LDcgQEAgdm9pZCBPTUdQbGFuOjp3b3JrKENvbXBpbGF0aW9uRWZmb3J0KQogICAgIHsKICAgICAg
ICAgTG9ja0hvbGRlciBob2xkZXIobV9jb2RlQmxvY2stPm1fbG9jayk7CiAKLSAgICAgICAgYXV0
byByZXBhdGNoQ2FsbHMgPSBbJl0gKGNvbnN0IFZlY3RvcjxVbmxpbmtlZFdhc21Ub1dhc21DYWxs
PiYgIGNhbGxzaXRlcykgeworICAgICAgICBhdXRvIHJlcGF0Y2hDYWxscyA9IFsmXSAoY29uc3Qg
VmVjdG9yPFVubGlua2VkV2FzbVRvV2FzbUNhbGw+JiBjYWxsc2l0ZXMpIHsKICAgICAgICAgICAg
IGZvciAoYXV0byYgY2FsbCA6IGNhbGxzaXRlcykgewogICAgICAgICAgICAgICAgIGRhdGFMb2dM
bklmKFdhc21PTUdQbGFuSW50ZXJuYWw6OnZlcmJvc2UsICJDb25zaWRlcmluZyByZXBhdGNoaW5n
IGNhbGwgYXQ6ICIsIFJhd1BvaW50ZXIoY2FsbC5jYWxsTG9jYXRpb24uZGF0YUxvY2F0aW9uKCkp
LCAiIHRoYXQgdGFyZ2V0cyAiLCBjYWxsLmZ1bmN0aW9uSW5kZXhTcGFjZSk7CiAgICAgICAgICAg
ICAgICAgaWYgKGNhbGwuZnVuY3Rpb25JbmRleFNwYWNlID09IGZ1bmN0aW9uSW5kZXhTcGFjZSkg
ewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlFeGVjdXRh
YmxlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9X
ZWJBc3NlbWJseUV4ZWN1dGFibGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseUZ1bmN0aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseUZ1bmN0aW9uLmNwcAkocmV2aXNp
b24gMjQzNjM1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlG
dW5jdGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM2LDIzICszNiw2MiBAQAogI2luY2x1ZGUg
IkpTV2ViQXNzZW1ibHlNZW1vcnkuaCIKICNpbmNsdWRlICJKU1dlYkFzc2VtYmx5UnVudGltZUVy
cm9yLmgiCiAjaW5jbHVkZSAiTExJbnRUaHVua3MuaCIKKyNpbmNsdWRlICJMaW5rQnVmZmVyLmgi
CiAjaW5jbHVkZSAiUHJvdG9DYWxsRnJhbWUuaCIKICNpbmNsdWRlICJWTS5oIgogI2luY2x1ZGUg
Ildhc21DYWxsZWUuaCIKKyNpbmNsdWRlICJXYXNtQ2FsbGluZ0NvbnZlbnRpb24uaCIKICNpbmNs
dWRlICJXYXNtQ29udGV4dElubGluZXMuaCIKICNpbmNsdWRlICJXYXNtRm9ybWF0LmgiCiAjaW5j
bHVkZSAiV2FzbU1lbW9yeS5oIgorI2luY2x1ZGUgIldhc21NZW1vcnlJbmZvcm1hdGlvbi5oIgor
I2luY2x1ZGUgIldhc21Nb2R1bGVJbmZvcm1hdGlvbi5oIgogI2luY2x1ZGUgIldhc21TaWduYXR1
cmVJbmxpbmVzLmgiCiAjaW5jbHVkZSA8d3RmL0Zhc3RUTFMuaD4KICNpbmNsdWRlIDx3dGYvU3Rh
Y2tQb2ludGVyLmg+CiAjaW5jbHVkZSA8d3RmL1N5c3RlbVRyYWNpbmcuaD4KIAorI2luY2x1ZGUg
Ik1hY3JvQXNzZW1ibGVyUHJpbnRlci5oIgorI2luY2x1ZGUgIkdQUkluZm8uaCIKKyNpbmNsdWRl
ICJGUFJJbmZvLmgiCisjaW5jbHVkZSAiUmVnaXN0ZXJJRC5oIgorI2luY2x1ZGUgPHd0Zi9TY29w
ZS5oPgorCiBuYW1lc3BhY2UgSlNDIHsKIAorY29uc3QgQ2xhc3NJbmZvIEpTVG9XYXNtSUNDYWxs
ZWU6OnNfaW5mbyA9IHsgIkpTVG9XYXNtSUNDYWxsZWUiLCAmQmFzZTo6c19pbmZvLCBudWxscHRy
LCBudWxscHRyLCBDUkVBVEVfTUVUSE9EX1RBQkxFKEpTVG9XYXNtSUNDYWxsZWUpIH07CisKK0pT
VG9XYXNtSUNDYWxsZWUqIEpTVG9XYXNtSUNDYWxsZWU6OmNyZWF0ZShWTSYgdm0sIEpTR2xvYmFs
T2JqZWN0KiBnbG9iYWxPYmplY3QsIFdlYkFzc2VtYmx5RnVuY3Rpb24qIGZ1bmN0aW9uKQorewor
ICAgIEpTVG9XYXNtSUNDYWxsZWUqIHJlc3VsdCA9IG5ldyAoTm90TnVsbCwgYWxsb2NhdGVDZWxs
PEpTVG9XYXNtSUNDYWxsZWU+KHZtLmhlYXApKSBKU1RvV2FzbUlDQ2FsbGVlKHZtLCBnbG9iYWxP
YmplY3QsIGNyZWF0ZVN0cnVjdHVyZSh2bSwgZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlKCkpKTsKKyAg
ICByZXN1bHQtPmZpbmlzaENyZWF0aW9uKHZtKTsKKyAgICByZXN1bHQtPm1fZnVuY3Rpb24uc2V0
KHZtLCByZXN1bHQsIGZ1bmN0aW9uKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitTdHJ1Y3R1
cmUqIEpTVG9XYXNtSUNDYWxsZWU6OmNyZWF0ZVN0cnVjdHVyZShWTSYgdm0sIEpTR2xvYmFsT2Jq
ZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgcHJvdG90eXBlKQoreworICAgIHJldHVybiBTdHJ1
Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIFR5cGVJbmZvKEpTQ2Fs
bGVlVHlwZSwgU3RydWN0dXJlRmxhZ3MpLCBpbmZvKCkpOworfQorCit2b2lkIEpTVG9XYXNtSUND
YWxsZWU6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikK
K3sKKyAgICBKU1RvV2FzbUlDQ2FsbGVlKiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTVG9XYXNtSUND
YWxsZWUqPihjZWxsKTsKKyAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3Qs
IGluZm8oKSk7CisKKyAgICBCYXNlOjp2aXNpdENoaWxkcmVuKHRoaXNPYmplY3QsIHZpc2l0b3Ip
OworICAgIHZpc2l0b3IuYXBwZW5kKHRoaXNPYmplY3QtPm1fZnVuY3Rpb24pOworfQorCiBjb25z
dCBDbGFzc0luZm8gV2ViQXNzZW1ibHlGdW5jdGlvbjo6c19pbmZvID0geyAiV2ViQXNzZW1ibHlG
dW5jdGlvbiIsICZCYXNlOjpzX2luZm8sIG51bGxwdHIsIG51bGxwdHIsIENSRUFURV9NRVRIT0Rf
VEFCTEUoV2ViQXNzZW1ibHlGdW5jdGlvbikgfTsKIAogc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpT
Q19IT1NUX0NBTEwgY2FsbFdlYkFzc2VtYmx5RnVuY3Rpb24oRXhlY1N0YXRlKiBleGVjKQogewor
ICAgIGRhdGFMb2dMbigiY2FsbFdlYkFzc2VtYmx5RnVuY3Rpb24gc3RhcnQiKTsKKyAgICBhdXRv
IG9uRXhpdCA9IG1ha2VTY29wZUV4aXQoWyZdIHsKKyAgICAgICAgZGF0YUxvZ0xuKCJjYWxsV2Vi
QXNzZW1ibHlGdW5jdGlvbiBlbmQiKTsKKyAgICB9KTsKKwogICAgIFZNJiB2bSA9IGV4ZWMtPnZt
KCk7CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgIFdlYkFz
c2VtYmx5RnVuY3Rpb24qIHdhc21GdW5jdGlvbiA9IGpzQ2FzdDxXZWJBc3NlbWJseUZ1bmN0aW9u
Kj4oZXhlYy0+anNDYWxsZWUoKSk7CkBAIC0xMTYsNiArMTU1LDEyIEBAIHN0YXRpYyBFbmNvZGVk
SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNhbGwKIAogICAgIC8vIEZJWE1FIERvIGF3YXkgd2l0aCB0
aGlzIGVudGlyZSBmdW5jdGlvbiwgYW5kIG9ubHkgdXNlIHRoZSBlbnRyeXBvaW50IGdlbmVyYXRl
ZCBieSBCMy4gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2NjQ4Ngog
ICAgIFdhc206Okluc3RhbmNlKiBwcmV2V2FzbUluc3RhbmNlID0gdm0ud2FzbUNvbnRleHQubG9h
ZCgpOworCisgICAgLy9zdGF0aWMgdWludDY0X3QgY2FsbHM7CisgICAgLy8rK2NhbGxzOworICAg
IC8vaWYgKGNhbGxzICUgMTAwMDAgPT0gMCkKKyAgICAvLyAgICBkYXRhTG9nTG4oIkNhbGxzOiAi
LCBjYWxscyk7CisKICAgICB7CiAgICAgICAgIC8vIFdlIGRvIHRoZSBzdGFjayBjaGVjayBoZXJl
IGZvciB0aGUgd3JhcHBlciBmdW5jdGlvbiBiZWNhdXNlIHdlIGRvbid0CiAgICAgICAgIC8vIHdh
bnQgdG8gZW1pdCBhIHN0YWNrIGNoZWNrIGluc2lkZSBldmVyeSB3cmFwcGVyIGZ1bmN0aW9uLgpA
QCAtMTQ4LDExICsxOTMsMzEyIEBAIHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxM
IGNhbGwKICAgICByZXR1cm4gcmF3UmVzdWx0OwogfQogCitSZWdpc3RlckF0T2Zmc2V0TGlzdCBX
ZWJBc3NlbWJseUZ1bmN0aW9uOjp1c2VkQ2FsbGVlU2F2ZVJlZ2lzdGVycygpIGNvbnN0Cit7Cisg
ICAgYXV0byBtZW1vcnlNb2RlID0gaW5zdGFuY2UoKS0+bWVtb3J5TW9kZSgpOworICAgIGNvbnN0
IGF1dG8mIHBpbm5lZFJlZ3MgPSBXYXNtOjpQaW5uZWRSZWdpc3RlckluZm86OmdldCgpOworICAg
IFJlZ2lzdGVyU2V0IHRvU2F2ZSA9IHBpbm5lZFJlZ3MudG9TYXZlKG1lbW9yeU1vZGUpOworICAg
IHJldHVybiBSZWdpc3RlckF0T2Zmc2V0TGlzdCB7IHRvU2F2ZSwgUmVnaXN0ZXJBdE9mZnNldExp
c3Q6Ok9mZnNldEJhc2VUeXBlOjpGcmFtZVBvaW50ZXJCYXNlZCB9OworfQorCitwdHJkaWZmX3Qg
V2ViQXNzZW1ibHlGdW5jdGlvbjo6cHJldmlvdXNJbnN0YW5jZU9mZnNldCgpIGNvbnN0Cit7Cisg
ICAgcHRyZGlmZl90IG1pbk9mZnNldCA9IDE7CisgICAgZm9yIChjb25zdCBSZWdpc3RlckF0T2Zm
c2V0JiByZWdBdE9mZnNldCA6IHVzZWRDYWxsZWVTYXZlUmVnaXN0ZXJzKCkpIHsKKyAgICAgICAg
cHRyZGlmZl90IG9mZnNldCA9IHJlZ0F0T2Zmc2V0Lm9mZnNldCgpOworICAgICAgICBBU1NFUlQo
b2Zmc2V0IDwgMCk7CisgICAgICAgIG1pbk9mZnNldCA9IHN0ZDo6bWluKG9mZnNldCwgbWluT2Zm
c2V0KTsKKyAgICB9CisgICAgQVNTRVJUKG1pbk9mZnNldCAhPSAxKTsKKyAgICByZXR1cm4gbWlu
T2Zmc2V0IC0gODsKK30KKworV2FzbTo6SW5zdGFuY2UqIFdlYkFzc2VtYmx5RnVuY3Rpb246OnBy
ZXZpb3VzSW5zdGFuY2UoQ2FsbEZyYW1lKiBjYWxsRnJhbWUpCit7CisgICAgQVNTRVJUKGNhbGxG
cmFtZS0+Y2FsbGVlKCkucmF3UHRyKCkgPT0gdGhpcyk7CisgICAgYXV0byogcmVzdWx0ID0gKmJp
dHdpc2VfY2FzdDxXYXNtOjpJbnN0YW5jZSoqPihiaXR3aXNlX2Nhc3Q8Y2hhcio+KGNhbGxGcmFt
ZSkgKyBwcmV2aW91c0luc3RhbmNlT2Zmc2V0KCkpOworICAgIGRhdGFMb2dMbigicHJldmlvdXNJ
bnN0YW5jZTogIiwgUmF3UG9pbnRlcihyZXN1bHQpKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQor
CitNYWNyb0Fzc2VtYmxlckNvZGVQdHI8SlNFbnRyeVB0clRhZz4gV2ViQXNzZW1ibHlGdW5jdGlv
bjo6anNDYWxsRW50cnlwb2ludFNsb3coKQoreworICAgIFZNJiB2bSA9ICp0aGlzLT52bSgpOwor
ICAgIENDYWxsSGVscGVycyBqaXQ7CisKKyAgICBjb25zdCBhdXRvJiBzaWduYXR1cmUgPSBXYXNt
OjpTaWduYXR1cmVJbmZvcm1hdGlvbjo6Z2V0KHNpZ25hdHVyZUluZGV4KCkpOworICAgIGNvbnN0
IGF1dG8mIHBpbm5lZFJlZ3MgPSBXYXNtOjpQaW5uZWRSZWdpc3RlckluZm86OmdldCgpOworICAg
IFJlZ2lzdGVyQXRPZmZzZXRMaXN0IHJlZ2lzdGVyc1RvU3BpbGwgPSB1c2VkQ2FsbGVlU2F2ZVJl
Z2lzdGVycygpOworCisgICAgYXV0byYgbW9kdWxlSW5mb3JtYXRpb24gPSBpbnN0YW5jZSgpLT5p
bnN0YW5jZSgpLm1vZHVsZSgpLm1vZHVsZUluZm9ybWF0aW9uKCk7CisKKyAgICB1bnNpZ25lZCB0
b3RhbEZyYW1lU2l6ZSA9IHJlZ2lzdGVyc1RvU3BpbGwuc2l6ZSgpICogc2l6ZW9mKHZvaWQqKTsK
KyAgICB0b3RhbEZyYW1lU2l6ZSArPSBzaXplb2Yodm9pZCopOyAvLyBQcmV2aW91cyB0b3AgbGV2
ZWwgdm0gV2FzbTo6SW5zdGFuY2UuCisgICAgdG90YWxGcmFtZVNpemUgKz0gV2FzbTo6V2FzbUNh
bGxpbmdDb252ZW50aW9uOjpoZWFkZXJTaXplSW5CeXRlcygpOworICAgIHRvdGFsRnJhbWVTaXpl
IC09IHNpemVvZihDYWxsZXJGcmFtZUFuZFBDKTsKKworICAgIHVuc2lnbmVkIG51bUdQUnMgPSAw
OworICAgIHVuc2lnbmVkIG51bUZQUnMgPSAwOworICAgIGJvb2wgYXJndW1lbnRzSW5jbHVkZUk2
NCA9IGZhbHNlOworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBzaWduYXR1cmUuYXJndW1l
bnRDb3VudCgpOyBpKyspIHsKKyAgICAgICAgc3dpdGNoIChzaWduYXR1cmUuYXJndW1lbnQoaSkp
IHsKKyAgICAgICAgY2FzZSBXYXNtOjpJNjQ6CisgICAgICAgICAgICBhcmd1bWVudHNJbmNsdWRl
STY0ID0gdHJ1ZTsKKyAgICAgICAgICAgIEZBTExUSFJPVUdIOworICAgICAgICBjYXNlIFdhc206
OkkzMjoKKyAgICAgICAgICAgIGlmIChudW1HUFJzID49IFdhc206Ondhc21DYWxsaW5nQ29udmVu
dGlvbigpLm1fZ3ByQXJncy5zaXplKCkpCisgICAgICAgICAgICAgICAgdG90YWxGcmFtZVNpemUg
Kz0gc2l6ZW9mKHZvaWQqKTsKKyAgICAgICAgICAgICsrbnVtR1BSczsKKyAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICBjYXNlIFdhc206OkYzMjoKKyAgICAgICAgY2FzZSBXYXNtOjpGNjQ6Cisg
ICAgICAgICAgICBpZiAobnVtRlBScyA+PSBXYXNtOjp3YXNtQ2FsbGluZ0NvbnZlbnRpb24oKS5t
X2ZwckFyZ3Muc2l6ZSgpKQorICAgICAgICAgICAgICAgIHRvdGFsRnJhbWVTaXplICs9IHNpemVv
Zih2b2lkKik7CisgICAgICAgICAgICArK251bUZQUnM7CisgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7
CisgICAgICAgIH0KKyAgICB9CisgICAgaWYgKGFyZ3VtZW50c0luY2x1ZGVJNjQpIHsKKyAgICAg
ICAgLy8gT09QUzogTW92ZSB0aGlzIHRvIHRoZSBzbG93IHBhdGggdG8gaGFuZGxlIQorICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKKyAgICB9CisKKyAgICB0b3RhbEZyYW1lU2l6ZSA9IFdURjo6cm91
bmRVcFRvTXVsdGlwbGVPZihzdGFja0FsaWdubWVudEJ5dGVzKCksIHRvdGFsRnJhbWVTaXplKTsK
KworICAgIGppdC5lbWl0RnVuY3Rpb25Qcm9sb2d1ZSgpOworICAgIGppdC5zdWJQdHIoTWFjcm9B
c3NlbWJsZXI6OlRydXN0ZWRJbW0zMih0b3RhbEZyYW1lU2l6ZSksIE1hY3JvQXNzZW1ibGVyOjpz
dGFja1BvaW50ZXJSZWdpc3Rlcik7CisgICAgaml0LnN0b3JlNjQoQ0NhbGxIZWxwZXJzOjpUcnVz
dGVkSW1tNjQoMCksIENDYWxsSGVscGVyczo6YWRkcmVzc0ZvcihDYWxsRnJhbWVTbG90Ojpjb2Rl
QmxvY2spKTsKKworICAgIEdQUlJlZyBuZXdXYXNtQ29udGV4dEdQUiA9IFdhc206Ondhc21DYWxs
aW5nQ29udmVudGlvbkFpcigpLnByb2xvZ3VlU2NyYXRjaCgwKTsKKyAgICBHUFJSZWcgc2NyYXRj
aEdQUiA9IFdhc206Ondhc21DYWxsaW5nQ29udmVudGlvbkFpcigpLnByb2xvZ3VlU2NyYXRjaCgx
KTsKKyAgICBqaXQubG9hZFB0cih2bS5hZGRyZXNzT2ZTb2Z0U3RhY2tMaW1pdCgpLCBzY3JhdGNo
R1BSKTsKKworICAgIENDYWxsSGVscGVyczo6SnVtcExpc3Qgc3RhY2tPdmVyZmxvdzsKKyAgICBz
dGFja092ZXJmbG93LmFwcGVuZChqaXQuYnJhbmNoUHRyKENDYWxsSGVscGVyczo6QWJvdmUsIE1h
Y3JvQXNzZW1ibGVyOjpzdGFja1BvaW50ZXJSZWdpc3RlciwgR1BSSW5mbzo6Y2FsbEZyYW1lUmVn
aXN0ZXIpKTsKKyAgICBzdGFja092ZXJmbG93LmFwcGVuZChqaXQuYnJhbmNoUHRyKENDYWxsSGVs
cGVyczo6QmVsb3csIE1hY3JvQXNzZW1ibGVyOjpzdGFja1BvaW50ZXJSZWdpc3Rlciwgc2NyYXRj
aEdQUikpOworCisgICAgaml0LmxvYWRQdHIoJnZtLndhc21Db250ZXh0Lmluc3RhbmNlLCBuZXdX
YXNtQ29udGV4dEdQUik7CisgICAgaml0LnByaW50KCJQcmlvciBXYXNtIEluc3RhbmNlOiAiLCBu
ZXdXYXNtQ29udGV4dEdQUiwgIlxuIik7CisgICAgcHRyZGlmZl90IHByZXZpb3VzSW5zdGFuY2VP
ZmZzZXQgPSB0aGlzLT5wcmV2aW91c0luc3RhbmNlT2Zmc2V0KCk7CisgICAgaml0LnN0b3JlUHRy
KG5ld1dhc21Db250ZXh0R1BSLCBDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoR1BSSW5mbzo6Y2FsbEZy
YW1lUmVnaXN0ZXIsIHByZXZpb3VzSW5zdGFuY2VPZmZzZXQpKTsKKworICAgIGZvciAoY29uc3Qg
UmVnaXN0ZXJBdE9mZnNldCYgcmVnQXRPZmZzZXQgOiByZWdpc3RlcnNUb1NwaWxsKSB7CisgICAg
ICAgIEdQUlJlZyByZWcgPSByZWdBdE9mZnNldC5yZWcoKS5ncHIoKTsKKyAgICAgICAgQVNTRVJU
KHJlZyAhPSBuZXdXYXNtQ29udGV4dEdQUik7CisgICAgICAgIHB0cmRpZmZfdCBvZmZzZXQgPSBy
ZWdBdE9mZnNldC5vZmZzZXQoKTsKKyAgICAgICAgaml0LnN0b3JlUHRyKHJlZywgQ0NhbGxIZWxw
ZXJzOjpBZGRyZXNzKEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCBvZmZzZXQpKTsKKyAgICB9
CisgICAgaml0Lm1vdmUoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKCZpbnN0YW5jZSgpLT5p
bnN0YW5jZSgpKSwgbmV3V2FzbUNvbnRleHRHUFIpOworCisgICAgaWYgKFdhc206OkNvbnRleHQ6
OnVzZUZhc3RUTFMoKSkgCisgICAgICAgIGppdC5zdG9yZVdhc21Db250ZXh0SW5zdGFuY2UobmV3
V2FzbUNvbnRleHRHUFIpOworICAgIGVsc2UKKyAgICAgICAgaml0Lm1vdmUobmV3V2FzbUNvbnRl
eHRHUFIsIHBpbm5lZFJlZ3Mud2FzbUNvbnRleHRJbnN0YW5jZVBvaW50ZXIpOworICAgIGppdC5z
dG9yZVB0cihuZXdXYXNtQ29udGV4dEdQUiwgJnZtLndhc21Db250ZXh0Lmluc3RhbmNlKTsKKyAg
ICBqaXQuc3RvcmVQdHIoc2NyYXRjaEdQUiwgQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKG5ld1dhc21D
b250ZXh0R1BSLCBXYXNtOjpJbnN0YW5jZTo6b2Zmc2V0T2ZDYWNoZWRTdGFja0xpbWl0KCkpKTsK
KworICAgIENDYWxsSGVscGVyczo6SnVtcExpc3Qgc2xvd1BhdGg7CisKKyAgICAvLyBPT1BTOiBB
cml0eSBjaGVjayBoZXJlIQorICAgIC8vIE9PUFM6IEFzc2VydCBwaW5uZWQgcmVncyBjYW4ndCBi
ZSB0YWcgcmVnaXN0ZXJzLCBvciBvcmdhbml6ZSBjb2RlIGFjY29yZGluZ2x5LgorCisgICAgLy8g
Rmlyc3Qgd2UgZG8gc3RhY2sgc2xvdHMgZm9yIEZQUnMgc28gd2UgY2FuIHVzZSBGUFIgYXJndW1l
bnQgcmVnaXN0ZXIgYXMgc2NyYXRjaC4gYW5kIGFsbCBHUFJzIGJlY2F1c2Ugd2UgaGF2ZSBzY3Jh
dGNoIHJlZ2lzdGVycyB0byBkbyBpdC4KKyAgICAvLyBBZnRlciB0aGF0LCB3ZSBoYW5kbGUgRlBS
IGFyZ3VtZW50IHJlZ2lzdGVycy4gCisgICAgeworICAgICAgICBDQ2FsbEhlbHBlcnM6OkFkZHJl
c3MgY2FsbGVlRnJhbWUgPSBDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoTWFjcm9Bc3NlbWJsZXI6OnN0
YWNrUG9pbnRlclJlZ2lzdGVyLCAtc3RhdGljX2Nhc3Q8cHRyZGlmZl90PihzaXplb2YoQ2FsbGVy
RnJhbWVBbmRQQykpKTsKKyAgICAgICAgbnVtR1BScyA9IDA7CisgICAgICAgIG51bUZQUnMgPSAw
OworICAgICAgICAvLyBXZSdyZSBnb2luZyB0byBzZXQgdGhlIHBpbm5lZCByZWdpc3RlcnMgYWZ0
ZXIgdGhpcy4gU28KKyAgICAgICAgLy8gd2UgY2FuIHVzZSB0aGlzIGFzIGEgc2NyYXRjaCBmb3Ig
bm93IHNpbmNlIHdlIHNhdmVkIGl0IGFib3ZlLgorICAgICAgICBHUFJSZWcgc2NyYXRjaFJlZyA9
IHBpbm5lZFJlZ3MuYmFzZU1lbW9yeVBvaW50ZXI7CisgICAgICAgIEZQUlJlZyBzY3JhdGNoRlBS
ID0gV2FzbTo6d2FzbUNhbGxpbmdDb252ZW50aW9uKCkubV9mcHJBcmdzWzBdLmZwcigpOworCisg
ICAgICAgIHB0cmRpZmZfdCBqc09mZnNldCA9IENhbGxGcmFtZVNsb3Q6OmZpcnN0QXJndW1lbnQg
KiBzaXplb2YoRW5jb2RlZEpTVmFsdWUpOworCisgICAgICAgIHB0cmRpZmZfdCB3YXNtT2Zmc2V0
ID0gQ2FsbEZyYW1lOjpoZWFkZXJTaXplSW5SZWdpc3RlcnMgKiBzaXplb2Yodm9pZCopOworICAg
ICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc2lnbmF0dXJlLmFyZ3VtZW50Q291bnQoKTsg
aSsrKSB7CisgICAgICAgICAgICBzd2l0Y2ggKHNpZ25hdHVyZS5hcmd1bWVudChpKSkgeworICAg
ICAgICAgICAgY2FzZSBXYXNtOjpJNjQ6CisgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgIGNhc2UgV2FzbTo6STMyOgorICAgICAgICAgICAg
ICAgIGppdC5sb2FkNjQoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKEdQUkluZm86OmNhbGxGcmFtZVJl
Z2lzdGVyLCBqc09mZnNldCksIHNjcmF0Y2hSZWcpOworICAgICAgICAgICAgICAgIHNsb3dQYXRo
LmFwcGVuZChqaXQuYnJhbmNoSWZOb3RJbnQzMihzY3JhdGNoUmVnKSk7IC8vIE9PUFM6IGhhbmRs
ZSBmbG9hdD8KKyAgICAgICAgICAgICAgICBpZiAobnVtR1BScyA+PSBXYXNtOjp3YXNtQ2FsbGlu
Z0NvbnZlbnRpb24oKS5tX2dwckFyZ3Muc2l6ZSgpKSB7CisgICAgICAgICAgICAgICAgICAgIGpp
dC5zdG9yZTMyKHNjcmF0Y2hSZWcsIGNhbGxlZUZyYW1lLndpdGhPZmZzZXQod2FzbU9mZnNldCkp
OworICAgICAgICAgICAgICAgICAgICB3YXNtT2Zmc2V0ICs9IHNpemVvZih2b2lkKik7CisgICAg
ICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgaml0Lnplcm9FeHRlbmQz
MlRvUHRyKHNjcmF0Y2hSZWcsIFdhc206Ondhc21DYWxsaW5nQ29udmVudGlvbigpLm1fZ3ByQXJn
c1tudW1HUFJzXS5ncHIoKSk7CisgICAgICAgICAgICAgICAgICAgICsrbnVtR1BSczsKKyAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIFdh
c206OkYzMjoKKyAgICAgICAgICAgIGNhc2UgV2FzbTo6RjY0OgorICAgICAgICAgICAgICAgIGlm
IChudW1GUFJzID49IFdhc206Ondhc21DYWxsaW5nQ29udmVudGlvbigpLm1fZnByQXJncy5zaXpl
KCkpIHsKKyAgICAgICAgICAgICAgICAgICAgaml0LmxvYWQ2NChDQ2FsbEhlbHBlcnM6OkFkZHJl
c3MoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIGpzT2Zmc2V0KSwgc2NyYXRjaFJlZyk7Cisg
ICAgICAgICAgICAgICAgICAgIHNsb3dQYXRoLmFwcGVuZChqaXQuYnJhbmNoSWZOb3ROdW1iZXIo
c2NyYXRjaFJlZykpOworICAgICAgICAgICAgICAgICAgICBzbG93UGF0aC5hcHBlbmQoaml0LmJy
YW5jaElmSW50MzIoc2NyYXRjaFJlZykpOyAvLyBPT1BTOiBIYW5kbGUgaTMyCisKKyAgICAgICAg
ICAgICAgICAgICAgaWYgKHNpZ25hdHVyZS5hcmd1bWVudChpKSA9PSBXYXNtOjpGMzIpIHsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIGppdC51bmJveERvdWJsZShzY3JhdGNoUmVnLCBzY3JhdGNo
UmVnLCBzY3JhdGNoRlBSKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGppdC5jb252ZXJ0RG91
YmxlVG9GbG9hdChzY3JhdGNoRlBSLCBzY3JhdGNoRlBSKTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIGppdC5zdG9yZUZsb2F0KHNjcmF0Y2hGUFIsIGNhbGxlZUZyYW1lLndpdGhPZmZzZXQod2Fz
bU9mZnNldCkpOworICAgICAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAg
ICAgICAgICAgaml0LmFkZDY0KEdQUkluZm86OnRhZ1R5cGVOdW1iZXJSZWdpc3Rlciwgc2NyYXRj
aFJlZywgc2NyYXRjaFJlZyk7CisgICAgICAgICAgICAgICAgICAgICAgICBqaXQuc3RvcmU2NChz
Y3JhdGNoUmVnLCBjYWxsZWVGcmFtZS53aXRoT2Zmc2V0KHdhc21PZmZzZXQpKTsKKyAgICAgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB3YXNtT2Zmc2V0ICs9IHNpemVvZih2
b2lkKik7CisgICAgICAgICAgICAgICAgfSBlbHNlCisgICAgICAgICAgICAgICAgICAgICsrbnVt
RlBSczsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAg
ICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgIH0K
KworICAgICAgICAgICAganNPZmZzZXQgKz0gc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKTsKKyAgICAg
ICAgfQorICAgIH0KKworICAgIC8vIE5vdyBoYW5kbGUgRlBSIGFyZ3VtZW50cyBpbiByZWdpc3Rl
cnMuCisgICAgeworICAgICAgICBudW1HUFJzID0gMDsKKyAgICAgICAgbnVtRlBScyA9IDA7Cisg
ICAgICAgIC8vIFdlJ3JlIGdvaW5nIHRvIHNldCB0aGUgcGlubmVkIHJlZ2lzdGVycyBhZnRlciB0
aGlzLiBTbworICAgICAgICAvLyB3ZSBjYW4gdXNlIHRoaXMgYXMgYSBzY3JhdGNoIGZvciBub3cg
c2luY2Ugd2Ugc2F2ZWQgaXQgYWJvdmUuCisgICAgICAgIEdQUlJlZyBzY3JhdGNoUmVnID0gcGlu
bmVkUmVncy5iYXNlTWVtb3J5UG9pbnRlcjsKKworICAgICAgICBwdHJkaWZmX3QganNPZmZzZXQg
PSBDYWxsRnJhbWVTbG90OjpmaXJzdEFyZ3VtZW50ICogc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKTsK
KyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHNpZ25hdHVyZS5hcmd1bWVudENvdW50
KCk7IGkrKykgeworICAgICAgICAgICAgc3dpdGNoIChzaWduYXR1cmUuYXJndW1lbnQoaSkpIHsK
KyAgICAgICAgICAgIGNhc2UgV2FzbTo6RjMyOgorICAgICAgICAgICAgY2FzZSBXYXNtOjpGNjQ6
CisgICAgICAgICAgICAgICAgaWYgKG51bUZQUnMgPCBXYXNtOjp3YXNtQ2FsbGluZ0NvbnZlbnRp
b24oKS5tX2ZwckFyZ3Muc2l6ZSgpKSB7CisgICAgICAgICAgICAgICAgICAgIGppdC5sb2FkNjQo
Q0NhbGxIZWxwZXJzOjpBZGRyZXNzKEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCBqc09mZnNl
dCksIHNjcmF0Y2hSZWcpOworICAgICAgICAgICAgICAgICAgICBzbG93UGF0aC5hcHBlbmQoaml0
LmJyYW5jaElmTm90TnVtYmVyKHNjcmF0Y2hSZWcpKTsKKyAgICAgICAgICAgICAgICAgICAgc2xv
d1BhdGguYXBwZW5kKGppdC5icmFuY2hJZkludDMyKHNjcmF0Y2hSZWcpKTsgLy8gT09QUzogSGFu
ZGxlIGkzMgorCisgICAgICAgICAgICAgICAgICAgIEZQUlJlZyBhcmdGUFIgPSBXYXNtOjp3YXNt
Q2FsbGluZ0NvbnZlbnRpb24oKS5tX2ZwckFyZ3NbbnVtRlBSc10uZnByKCk7CisgICAgICAgICAg
ICAgICAgICAgIGppdC51bmJveERvdWJsZShzY3JhdGNoUmVnLCBzY3JhdGNoUmVnLCBhcmdGUFIp
OworCisgICAgICAgICAgICAgICAgICAgIGlmIChzaWduYXR1cmUuYXJndW1lbnQoaSkgPT0gV2Fz
bTo6RjMyKQorICAgICAgICAgICAgICAgICAgICAgICAgaml0LmNvbnZlcnREb3VibGVUb0Zsb2F0
KGFyZ0ZQUiwgYXJnRlBSKTsKKworICAgICAgICAgICAgICAgICAgICArK251bUZQUnM7CisgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgZGVmYXVs
dDoKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAg
anNPZmZzZXQgKz0gc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKTsKKyAgICAgICAgfQorICAgIH0KKwor
ICAgIGlmICghIW1vZHVsZUluZm9ybWF0aW9uLm1lbW9yeSkgeworICAgICAgICBHUFJSZWcgYmFz
ZU1lbW9yeSA9IHBpbm5lZFJlZ3MuYmFzZU1lbW9yeVBvaW50ZXI7CisKKyAgICAgICAgaWYgKGlu
c3RhbmNlKCktPm1lbW9yeU1vZGUoKSAhPSBXYXNtOjpNZW1vcnlNb2RlOjpTaWduYWxpbmcpIHsK
KyAgICAgICAgICAgIGNvbnN0IGF1dG8mIHNpemVSZWdzID0gcGlubmVkUmVncy5zaXplUmVnaXN0
ZXJzOworICAgICAgICAgICAgQVNTRVJUKHNpemVSZWdzLnNpemUoKSA+PSAxKTsKKyAgICAgICAg
ICAgIEFTU0VSVCghc2l6ZVJlZ3NbMF0uc2l6ZU9mZnNldCk7IC8vIFRoZSBmb2xsb3dpbmcgY29k
ZSBhc3N1bWVzIHdlIHN0YXJ0IGF0IDAsIGFuZCBjYWxjdWxhdGVzIHN1YnNlcXVlbnQgc2l6ZSBy
ZWdpc3RlcnMgcmVsYXRpdmUgdG8gMC4KKyAgICAgICAgICAgIGppdC5sb2FkUHRyKENDYWxsSGVs
cGVyczo6QWRkcmVzcyhuZXdXYXNtQ29udGV4dEdQUiwgV2FzbTo6SW5zdGFuY2U6Om9mZnNldE9m
Q2FjaGVkTWVtb3J5U2l6ZSgpKSwgc2l6ZVJlZ3NbMF0uc2l6ZVJlZ2lzdGVyKTsKKyAgICAgICAg
ICAgIGZvciAodW5zaWduZWQgaSA9IDE7IGkgPCBzaXplUmVncy5zaXplKCk7ICsraSkKKyAgICAg
ICAgICAgICAgICBqaXQuYWRkNjQoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoLXNpemVSZWdz
W2ldLnNpemVPZmZzZXQpLCBzaXplUmVnc1swXS5zaXplUmVnaXN0ZXIsIHNpemVSZWdzW2ldLnNp
emVSZWdpc3Rlcik7CisgICAgICAgIH0KKworICAgICAgICBqaXQubG9hZFB0cihDQ2FsbEhlbHBl
cnM6OkFkZHJlc3MobmV3V2FzbUNvbnRleHRHUFIsIFdhc206Okluc3RhbmNlOjpvZmZzZXRPZkNh
Y2hlZE1lbW9yeSgpKSwgYmFzZU1lbW9yeSk7CisgICAgfQorCisgICAgaWYgKCFtX2pzVG9XYXNt
SUNDYWxsZWUpCisgICAgICAgIG1fanNUb1dhc21JQ0NhbGxlZS5zZXQodm0sIHRoaXMsIEpTVG9X
YXNtSUNDYWxsZWU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0KCksIHRoaXMpKTsKKyAgICBqaXQu
c3RvcmVQdHIoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKG1fanNUb1dhc21JQ0NhbGxlZS5n
ZXQoKSksIENDYWxsSGVscGVyczo6YWRkcmVzc0ZvcihDYWxsRnJhbWVTbG90OjpjYWxsZWUpKTsK
KworICAgIHsKKyAgICAgICAgaml0LmxvYWRQdHIoZW50cnlwb2ludExvYWRMb2NhdGlvbigpLCBz
Y3JhdGNoR1BSKTsKKyAgICAgICAgaml0LmNhbGwoc2NyYXRjaEdQUiwgV2FzbUVudHJ5UHRyVGFn
KTsKKyAgICB9CisKKyAgICAvL2ppdC5wcmludCgicmVzdWx0IG9mIHdhc20gY2FsbDogIiwgK0dQ
UkluZm86OnJldHVyblZhbHVlR1BSLCAiICIsICtGUFJJbmZvOjpyZXR1cm5WYWx1ZUZQUiwgIlxu
Iik7CisgICAgLy9qaXQucHJpbnQoInRhZyBudW1iZXIgIiwgc3RhdGljX2Nhc3Q8TWFjcm9Bc3Nl
bWJsZXI6OlJlZ2lzdGVySUQ+KCtHUFJJbmZvOjp0YWdUeXBlTnVtYmVyUmVnaXN0ZXIpLCAiXG4i
KTsKKyAgICAvL2ppdC5wcmludCgidGFnIG1hc2sgIiwgc3RhdGljX2Nhc3Q8TWFjcm9Bc3NlbWJs
ZXI6OlJlZ2lzdGVySUQ+KCtHUFJJbmZvOjp0YWdNYXNrUmVnaXN0ZXIpLCAiXG4iKTsKKworICAg
IGppdC5sb2FkUHRyKENDYWxsSGVscGVyczo6QWRkcmVzcyhHUFJJbmZvOjpjYWxsRnJhbWVSZWdp
c3RlciwgcHJldmlvdXNJbnN0YW5jZU9mZnNldCksIEdQUkluZm86Om5vblByZXNlcnZlZE5vblJl
dHVybkdQUik7CisgICAgaml0LnN0b3JlUHRyKEdQUkluZm86Om5vblByZXNlcnZlZE5vblJldHVy
bkdQUiwgJnZtLndhc21Db250ZXh0Lmluc3RhbmNlKTsKKworICAgIGZvciAoY29uc3QgUmVnaXN0
ZXJBdE9mZnNldCYgcmVnQXRPZmZzZXQgOiByZWdpc3RlcnNUb1NwaWxsKSB7CisgICAgICAgIEdQ
UlJlZyByZWcgPSByZWdBdE9mZnNldC5yZWcoKS5ncHIoKTsKKyAgICAgICAgQVNTRVJUKHJlZyAh
PSBHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUik7CisgICAgICAgIHB0cmRpZmZfdCBvZmZzZXQgPSBy
ZWdBdE9mZnNldC5vZmZzZXQoKTsKKyAgICAgICAgaml0LmxvYWRQdHIoQ0NhbGxIZWxwZXJzOjpB
ZGRyZXNzKEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCBvZmZzZXQpLCByZWcpOworICAgIH0K
KworICAgIHN3aXRjaCAoc2lnbmF0dXJlLnJldHVyblR5cGUoKSkgeworICAgIGNhc2UgV2FzbTo6
Vm9pZDoKKyAgICAgICAgaml0Lm1vdmVUcnVzdGVkVmFsdWUoanNVbmRlZmluZWQoKSwgSlNWYWx1
ZVJlZ3MgeyBHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUiB9KTsKKyAgICAgICAgYnJlYWs7CisgICAg
Y2FzZSBXYXNtOjpJMzI6CisgICAgICAgIGppdC56ZXJvRXh0ZW5kMzJUb1B0cihHUFJJbmZvOjpy
ZXR1cm5WYWx1ZUdQUiwgR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIpOworICAgICAgICBqaXQuYm94
SW50MzIoR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIsIEpTVmFsdWVSZWdzIHsgR1BSSW5mbzo6cmV0
dXJuVmFsdWVHUFIgfSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgV2FzbTo6RjMyOgorICAg
ICAgICBqaXQuY29udmVydEZsb2F0VG9Eb3VibGUoRlBSSW5mbzo6cmV0dXJuVmFsdWVGUFIsIEZQ
UkluZm86OnJldHVyblZhbHVlRlBSKTsKKyAgICAgICAgRkFMTFRIUk9VR0g7CisgICAgY2FzZSBX
YXNtOjpGNjQ6IHsKKyAgICAgICAgaml0Lm1vdmVUcnVzdGVkVmFsdWUoanNOdW1iZXIocHVyZU5h
TigpKSwgSlNWYWx1ZVJlZ3MgeyBHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUiB9KTsKKyAgICAgICAg
YXV0byBpc05hTiA9IGppdC5icmFuY2hJZk5hTihGUFJJbmZvOjpyZXR1cm5WYWx1ZUZQUik7Cisg
ICAgICAgIGppdC5ib3hEb3VibGUoRlBSSW5mbzo6cmV0dXJuVmFsdWVGUFIsIEpTVmFsdWVSZWdz
IHsgR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIgfSk7CisgICAgICAgIGlzTmFOLmxpbmsoJmppdCk7
CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICBjYXNlIFdhc206Okk2NDoKKyAgICAgICAgcmV0
dXJuIG51bGxwdHI7CisgICAgY2FzZSBXYXNtOjpGdW5jOgorICAgIGNhc2UgV2FzbTo6QW55ZnVu
YzoKKyAgICAgICAgaml0LmJyZWFrcG9pbnQoKTsKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVs
dDoKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgaml0LmVtaXRGdW5jdGlvbkVwaWxvZ3Vl
KCk7CisgICAgaml0LnJldCgpOworCisgICAgc2xvd1BhdGgubGluaygmaml0KTsKKyAgICBqaXQu
bG9hZFB0cihDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIs
IHByZXZpb3VzSW5zdGFuY2VPZmZzZXQpLCBHUFJJbmZvOjpub25QcmVzZXJ2ZWROb25SZXR1cm5H
UFIpOworICAgIGppdC5zdG9yZVB0cihHUFJJbmZvOjpub25QcmVzZXJ2ZWROb25SZXR1cm5HUFIs
ICZ2bS53YXNtQ29udGV4dC5pbnN0YW5jZSk7CisKKyAgICBmb3IgKGNvbnN0IFJlZ2lzdGVyQXRP
ZmZzZXQmIHJlZ0F0T2Zmc2V0IDogcmVnaXN0ZXJzVG9TcGlsbCkgeworICAgICAgICBHUFJSZWcg
cmVnID0gcmVnQXRPZmZzZXQucmVnKCkuZ3ByKCk7CisgICAgICAgIEFTU0VSVChyZWcgIT0gR1BS
SW5mbzo6cmV0dXJuVmFsdWVHUFIpOworICAgICAgICBwdHJkaWZmX3Qgb2Zmc2V0ID0gcmVnQXRP
ZmZzZXQub2Zmc2V0KCk7CisgICAgICAgIGppdC5sb2FkUHRyKENDYWxsSGVscGVyczo6QWRkcmVz
cyhHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3Rlciwgb2Zmc2V0KSwgcmVnKTsKKyAgICB9CisKKyAg
ICBzdGFja092ZXJmbG93LmxpbmsoJmppdCk7CisgICAgaml0LmVtaXRGdW5jdGlvbkVwaWxvZ3Vl
KCk7CisgICAgLy8gT09QUzogQ2FuIEkganVzdCB0YWlsIGNhbGwgdGhpcyBuYXRpdmVDYWxsR2Vu
ZXJhdG9yPworICAgIGF1dG8ganVtcFRvSG9zdENhbGwgPSBqaXQuanVtcCgpOworCisgICAgTGlu
a0J1ZmZlciBsaW5rQnVmZmVyKGppdCwgR0xPQkFMX1RIVU5LX0lELCBKSVRDb21waWxhdGlvbkNh
bkZhaWwpOworICAgIGlmIChVTkxJS0VMWShsaW5rQnVmZmVyLmRpZEZhaWxUb0FsbG9jYXRlKCkp
KQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIGxpbmtCdWZmZXIubGluayhqdW1wVG9I
b3N0Q2FsbCwgQ29kZUxvY2F0aW9uTGFiZWw8SklUVGh1bmtQdHJUYWc+KG5hdGl2ZUNhbGxHZW5l
cmF0b3IoJnZtKS5jb2RlKCkuZXhlY3V0YWJsZUFkZHJlc3MoKSkpOworCisgICAgbV9qc0NhbGxF
bnRyeXBvaW50ID0gRklOQUxJWkVfQ09ERShsaW5rQnVmZmVyLCBXYXNtRW50cnlQdHJUYWcsICJK
Uy0+V2FzbSBJQyIpOworICAgIHJldHVybiBtX2pzQ2FsbEVudHJ5cG9pbnQuY29kZSgpOworfQor
CiBXZWJBc3NlbWJseUZ1bmN0aW9uKiBXZWJBc3NlbWJseUZ1bmN0aW9uOjpjcmVhdGUoVk0mIHZt
LCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgdW5z
aWduZWQgbGVuZ3RoLCBjb25zdCBTdHJpbmcmIG5hbWUsIEpTV2ViQXNzZW1ibHlJbnN0YW5jZSog
aW5zdGFuY2UsIFdhc206OkNhbGxlZSYganNFbnRyeXBvaW50LCBXYXNtOjpXYXNtVG9XYXNtSW1w
b3J0YWJsZUZ1bmN0aW9uOjpMb2FkTG9jYXRpb24gd2FzbVRvV2FzbUVudHJ5cG9pbnRMb2FkTG9j
YXRpb24sIFdhc206OlNpZ25hdHVyZUluZGV4IHNpZ25hdHVyZUluZGV4KQogewogICAgIE5hdGl2
ZUV4ZWN1dGFibGUqIGV4ZWN1dGFibGUgPSB2bS5nZXRIb3N0RnVuY3Rpb24oY2FsbFdlYkFzc2Vt
Ymx5RnVuY3Rpb24sIE5vSW50cmluc2ljLCBjYWxsSG9zdEZ1bmN0aW9uQXNDb25zdHJ1Y3Rvciwg
bnVsbHB0ciwgbmFtZSk7CiAgICAgV2ViQXNzZW1ibHlGdW5jdGlvbiogZnVuY3Rpb24gPSBuZXcg
KE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxXZWJBc3NlbWJseUZ1bmN0aW9uPih2bS5oZWFwKSkgV2Vi
QXNzZW1ibHlGdW5jdGlvbih2bSwgZ2xvYmFsT2JqZWN0LCBzdHJ1Y3R1cmUsIGpzRW50cnlwb2lu
dCwgd2FzbVRvV2FzbUVudHJ5cG9pbnRMb2FkTG9jYXRpb24sIHNpZ25hdHVyZUluZGV4KTsKICAg
ICBmdW5jdGlvbi0+ZmluaXNoQ3JlYXRpb24odm0sIGV4ZWN1dGFibGUsIGxlbmd0aCwgbmFtZSwg
aW5zdGFuY2UpOworCisgICAgLy8gT09QUzogbWFrZSB0aGlzIHBhcnQgb2YgY3JlYXRlKCkuCisg
ICAgZXhlY3V0YWJsZS0+c2V0V2ViQXNzZW1ibHlGdW5jdGlvbih2bSwgZnVuY3Rpb24pOworCiAg
ICAgQVNTRVJUX1dJVEhfTUVTU0FHRSghZnVuY3Rpb24tPmlzTGFyZ2VBbGxvY2F0aW9uKCksICJX
ZWJBc3NlbWJseUZ1bmN0aW9uIHNob3VsZCBiZSBhbGxvY2F0ZWQgbm90IGluIGxhcmdlIGFsbG9j
YXRpb24gc2luY2UgaXQgaXMgSlNDYWxsZWUuIik7CiAgICAgcmV0dXJuIGZ1bmN0aW9uOwogfQpA
QCAtMTY5LDYgKzUxNSwxNSBAQCBXZWJBc3NlbWJseUZ1bmN0aW9uOjpXZWJBc3NlbWJseUZ1bmN0
aW9uCiAgICAgLCBtX2ltcG9ydGFibGVGdW5jdGlvbiB7IHNpZ25hdHVyZUluZGV4LCB3YXNtVG9X
YXNtRW50cnlwb2ludExvYWRMb2NhdGlvbiB9CiB7IH0KIAordm9pZCBXZWJBc3NlbWJseUZ1bmN0
aW9uOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit7
CisgICAgV2ViQXNzZW1ibHlGdW5jdGlvbiogdGhpc09iamVjdCA9IGpzQ2FzdDxXZWJBc3NlbWJs
eUZ1bmN0aW9uKj4oY2VsbCk7CisgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2Jq
ZWN0LCBpbmZvKCkpOworCisgICAgQmFzZTo6dmlzaXRDaGlsZHJlbih0aGlzT2JqZWN0LCB2aXNp
dG9yKTsKKyAgICB2aXNpdG9yLmFwcGVuZCh0aGlzT2JqZWN0LT5tX2pzVG9XYXNtSUNDYWxsZWUp
OworfQorCiB9IC8vIG5hbWVzcGFjZSBKU0MKIAogI2VuZGlmIC8vIEVOQUJMRShXRUJBU1NFTUJM
WSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5RnVuY3Rp
b24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3Nl
bWJseUZ1bmN0aW9uLmgJKHJldmlzaW9uIDI0MzYzNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS93YXNtL2pzL1dlYkFzc2VtYmx5RnVuY3Rpb24uaAkod29ya2luZyBjb3B5KQpAQCAtNDMsNiAr
NDMsMjcgQEAgbmFtZXNwYWNlIEIzIHsKIGNsYXNzIENvbXBpbGF0aW9uOwogfQogCitjbGFzcyBX
ZWJBc3NlbWJseUZ1bmN0aW9uOworCitjbGFzcyBKU1RvV2FzbUlDQ2FsbGVlIDogcHVibGljIEpT
Q2FsbGVlIHsKKyAgICB1c2luZyBCYXNlID0gSlNDYWxsZWU7CitwdWJsaWM6CisgICAgREVDTEFS
RV9JTkZPOworCisgICAgc3RhdGljIEpTVG9XYXNtSUNDYWxsZWUqIGNyZWF0ZShWTSYsIEpTR2xv
YmFsT2JqZWN0KiwgV2ViQXNzZW1ibHlGdW5jdGlvbiopOworICAgIHN0YXRpYyBTdHJ1Y3R1cmUq
IGNyZWF0ZVN0cnVjdHVyZShWTSYsIEpTR2xvYmFsT2JqZWN0KiwgSlNWYWx1ZSk7CisKKyAgICBX
ZWJBc3NlbWJseUZ1bmN0aW9uKiBmdW5jdGlvbigpIHsgcmV0dXJuIG1fZnVuY3Rpb24uZ2V0KCk7
IH0KKworcHJpdmF0ZToKKyAgICBKU1RvV2FzbUlDQ2FsbGVlKFZNJiB2bSwgSlNHbG9iYWxPYmpl
Y3QqIGdsb2JhbE9iamVjdCwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCisgICAgICAgIDogQmFzZSh2
bSwgZ2xvYmFsT2JqZWN0LCBzdHJ1Y3R1cmUpCisgICAgeyB9CisgICAgc3RhdGljIHZvaWQgdmlz
aXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOworCisgICAgV3JpdGVCYXJyaWVyPFdl
YkFzc2VtYmx5RnVuY3Rpb24+IG1fZnVuY3Rpb247Cit9OworCiBjbGFzcyBXZWJBc3NlbWJseUZ1
bmN0aW9uIGZpbmFsIDogcHVibGljIFdlYkFzc2VtYmx5RnVuY3Rpb25CYXNlIHsKIHB1YmxpYzoK
ICAgICB1c2luZyBCYXNlID0gV2ViQXNzZW1ibHlGdW5jdGlvbkJhc2U7CkBAIC03NCwxNCArOTUs
MzAgQEAgcHVibGljOgogCiAgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZkVudHJ5cG9pbnRM
b2FkTG9jYXRpb24oKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoV2ViQXNzZW1ibHlGdW5jdGlv
biwgbV9pbXBvcnRhYmxlRnVuY3Rpb24pICsgV2FzbVRvV2FzbUltcG9ydGFibGVGdW5jdGlvbjo6
b2Zmc2V0T2ZFbnRyeXBvaW50TG9hZExvY2F0aW9uKCk7IH0KIAorICAgIE1hY3JvQXNzZW1ibGVy
Q29kZVB0cjxKU0VudHJ5UHRyVGFnPiBqc0NhbGxFbnRyeXBvaW50KCkKKyAgICB7CisgICAgICAg
IGlmIChtX2pzQ2FsbEVudHJ5cG9pbnQpCisgICAgICAgICAgICByZXR1cm4gbV9qc0NhbGxFbnRy
eXBvaW50LmNvZGUoKTsKKyAgICAgICAgcmV0dXJuIGpzQ2FsbEVudHJ5cG9pbnRTbG93KCk7Cisg
ICAgfQorCisgICAgUmVnaXN0ZXJBdE9mZnNldExpc3QgdXNlZENhbGxlZVNhdmVSZWdpc3RlcnMo
KSBjb25zdDsKKyAgICBXYXNtOjpJbnN0YW5jZSogcHJldmlvdXNJbnN0YW5jZShDYWxsRnJhbWUq
KTsKKwogcHJpdmF0ZToKKyAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNs
b3RWaXNpdG9yJik7CiAgICAgV2ViQXNzZW1ibHlGdW5jdGlvbihWTSYsIEpTR2xvYmFsT2JqZWN0
KiwgU3RydWN0dXJlKiwgV2FzbTo6Q2FsbGVlJiBqc0VudHJ5cG9pbnQsIFdhc21Ub1dhc21JbXBv
cnRhYmxlRnVuY3Rpb246OkxvYWRMb2NhdGlvbiBlbnRyeXBvaW50TG9hZExvY2F0aW9uLCBXYXNt
OjpTaWduYXR1cmVJbmRleCk7CiAKKyAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8SlNFbnRyeVB0
clRhZz4ganNDYWxsRW50cnlwb2ludFNsb3coKTsKKyAgICBwdHJkaWZmX3QgcHJldmlvdXNJbnN0
YW5jZU9mZnNldCgpIGNvbnN0OworCiAgICAgLy8gSXQncyBzYWZlIHRvIGp1c3QgaG9sZCB0aGUg
cmF3IFdhc21Ub1dhc21JbXBvcnRhYmxlRnVuY3Rpb24vanNFbnRyeXBvaW50IGJlY2F1c2Ugd2Ug
aGF2ZSBhIHJlZmVyZW5jZQogICAgIC8vIHRvIG91ciBJbnN0YW5jZSwgd2hpY2ggcG9pbnRzIHRv
IHRoZSBNb2R1bGUgdGhhdCBleHBvcnRlZCB1cywgd2hpY2gKICAgICAvLyBlbnN1cmVzIHRoYXQg
dGhlIGFjdHVhbCBTaWduYXR1cmUvY29kZSBkb2Vzbid0IGdldCBkZWFsbG9jYXRlZC4KICAgICBN
YWNyb0Fzc2VtYmxlckNvZGVQdHI8V2FzbUVudHJ5UHRyVGFnPiBtX2pzRW50cnlwb2ludDsKKyAg
ICBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SlNFbnRyeVB0clRhZz4gbV9qc0NhbGxFbnRyeXBvaW50
OwogICAgIFdhc21Ub1dhc21JbXBvcnRhYmxlRnVuY3Rpb24gbV9pbXBvcnRhYmxlRnVuY3Rpb247
CisgICAgV3JpdGVCYXJyaWVyPEpTVG9XYXNtSUNDYWxsZWU+IG1fanNUb1dhc21JQ0NhbGxlZTsK
IH07CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>366457</attachid>
            <date>2019-04-01 19:29:40 -0700</date>
            <delta_ts>2019-04-02 13:42:55 -0700</delta_ts>
            <desc>WIP</desc>
            <filename>b-backup.diff</filename>
            <type>text/plain</type>
            <size>36522</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFBlcmZvcm1hbmNlVGVzdHMvSmV0U3RyZWFtMi9KZXRTdHJlYW1Ecml2ZXIuanMKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gUGVyZm9ybWFuY2VUZXN0cy9KZXRTdHJlYW0yL0pldFN0cmVhbURyaXZlci5q
cwkocmV2aXNpb24gMjQzNjM1KQorKysgUGVyZm9ybWFuY2VUZXN0cy9KZXRTdHJlYW0yL0pldFN0
cmVhbURyaXZlci5qcwkod29ya2luZyBjb3B5KQpAQCAtNzkzLDExICs3OTMsMTEgQEAgY2xhc3Mg
V2FzbUJlbmNobWFyayBleHRlbmRzIEJlbmNobWFyayB7CiAgICAgICAgICAgICAgICAgICAgIGNv
bnNvbGUubG9nKCdJbnRlcmNlcHRlZCBxdWl0L2Fib3J0Jyk7CiAgICAgICAgICAgICB9OwogCi0g
ICAgICAgICAgICBvbGRQcmludCA9IGdsb2JhbE9iamVjdC5wcmludDsKLSAgICAgICAgICAgIGds
b2JhbE9iamVjdC5wcmludCA9IGdsb2JhbE9iamVjdC5wcmludEVyciA9ICguLi5hcmdzKSA9PiB7
Ci0gICAgICAgICAgICAgICAgaWYgKHZlcmJvc2UpCi0gICAgICAgICAgICAgICAgICAgIGNvbnNv
bGUubG9nKCdJbnRlcmNlcHRlZCBwcmludDogJywgLi4uYXJncyk7Ci0gICAgICAgICAgICB9Owor
ICAgICAgICAgICAgLy9vbGRQcmludCA9IGdsb2JhbE9iamVjdC5wcmludDsKKyAgICAgICAgICAg
IC8vZ2xvYmFsT2JqZWN0LnByaW50ID0gZ2xvYmFsT2JqZWN0LnByaW50RXJyID0gKC4uLmFyZ3Mp
ID0+IHsKKyAgICAgICAgICAgIC8vICAgIGlmICh2ZXJib3NlKQorICAgICAgICAgICAgLy8gICAg
ICAgIGNvbnNvbGUubG9nKCdJbnRlcmNlcHRlZCBwcmludDogJywgLi4uYXJncyk7CisgICAgICAg
ICAgICAvL307CiAKICAgICAgICAgICAgIGxldCBNb2R1bGUgPSB7CiAgICAgICAgICAgICAgICAg
cHJlUnVuOiBbXSwKSW5kZXg6IFBlcmZvcm1hbmNlVGVzdHMvSmV0U3RyZWFtMi9jbGkuanMKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gUGVyZm9ybWFuY2VUZXN0cy9KZXRTdHJlYW0yL2NsaS5qcwkocmV2aXNpb24g
MjQzNjM1KQorKysgUGVyZm9ybWFuY2VUZXN0cy9KZXRTdHJlYW0yL2NsaS5qcwkod29ya2luZyBj
b3B5KQpAQCAtMjgsNiArMjgsOCBAQCBjb25zb2xlID0gewogICAgIGxvZzogcHJpbnQKIH0KIAor
dGVzdExpc3QgPSBbInJpY2hhcmRzLXdhc20iXTsKKwogaWYgKHR5cGVvZiB0ZXN0TGlzdCA9PT0g
InVuZGVmaW5lZCIpCiAgICAgdGVzdExpc3QgPSB1bmRlZmluZWQ7CiAKSW5kZXg6IFBlcmZvcm1h
bmNlVGVzdHMvSmV0U3RyZWFtMi93YXNtL3JpY2hhcmRzLmpzCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFBlcmZv
cm1hbmNlVGVzdHMvSmV0U3RyZWFtMi93YXNtL3JpY2hhcmRzLmpzCShyZXZpc2lvbiAyNDM2MzUp
CisrKyBQZXJmb3JtYW5jZVRlc3RzL0pldFN0cmVhbTIvd2FzbS9yaWNoYXJkcy5qcwkod29ya2lu
ZyBjb3B5KQpAQCAtOTQ2LDcgKzk0Niw4IEBAIHZhciBfbWVtc2V0ID0gTW9kdWxlWyJfbWVtc2V0
Il0gPSAoZnVuY3QKIHZhciBfc2JyayA9IE1vZHVsZVsiX3NicmsiXSA9IChmdW5jdGlvbigpIHsK
ICByZXR1cm4gTW9kdWxlWyJhc20iXVsiX3NicmsiXS5hcHBseShudWxsLCBhcmd1bWVudHMpOwog
fSk7Ci12YXIgX3NjaGVkdWxlSXRlciA9IE1vZHVsZVsiX3NjaGVkdWxlSXRlciJdID0gKGZ1bmN0
aW9uKCkgewordmFyIF9zY2hlZHVsZUl0ZXIgPSBNb2R1bGVbIl9zY2hlZHVsZUl0ZXIiXSA9IChm
dW5jdGlvbiBmb29CYXJCYXooKSB7CisgLy9yZXR1cm4gTW9kdWxlWyJhc20iXVsiX3NjaGVkdWxl
SXRlciJdKCk7CiAgcmV0dXJuIE1vZHVsZVsiYXNtIl1bIl9zY2hlZHVsZUl0ZXIiXS5hcHBseShu
dWxsLCBhcmd1bWVudHMpOwogfSk7CiB2YXIgX3NldHVwID0gTW9kdWxlWyJfc2V0dXAiXSA9IChm
dW5jdGlvbigpIHsKQEAgLTExMDYsOCArMTEwNyw5IEBAIGZ1bmN0aW9uIHJ1blJpY2hhcmRzKCkg
ewogICAgIGZvciAobGV0IGkgPSAwOyBpIDwgNDsgKytpKSB7CiAgICAgICAgIE1vZHVsZS5fc2V0
dXAoKTsKICAgICAgICAgd2hpbGUgKHNjaGVkdWxlSXRlcigpKSB7IH0KLSAgICAgICAgaWYgKE1v
ZHVsZS5fZ2V0UXBrdGNvdW50KCkgIT09IDIzMjY0MTAgfHwgTW9kdWxlLl9nZXRIb2xkY291bnQo
KSAhPT0gOTMwNTYzKQorICAgICAgICBpZiAoTW9kdWxlLl9nZXRRcGt0Y291bnQoKSAhPT0gMjMy
NjQxMCB8fCBNb2R1bGUuX2dldEhvbGRjb3VudCgpICE9PSA5MzA1NjMpIHsKKyAgICAgICAgICAg
IHByaW50KCJCYWQgcmVzdWx0OiAiLCBNb2R1bGUuX2dldFFwa3Rjb3VudCgpLCAiICIsIE1vZHVs
ZS5fZ2V0SG9sZGNvdW50KCkpOwogICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJCYWQgcmlj
aGFyZHMgcmVzdWx0ISIpOworICAgICAgICB9CiAgICAgfQogfQotCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyQ29kZVJlZi5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJDb2RlUmVm
LmgJKHJldmlzaW9uIDI0MzYzNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIv
TWFjcm9Bc3NlbWJsZXJDb2RlUmVmLmgJKHdvcmtpbmcgY29weSkKQEAgLTM4MCw2ICszODAsMTQg
QEAgcHVibGljOgogICAgICAgICBBU1NFUlQobV9leGVjdXRhYmxlTWVtb3J5LT5zdGFydCgpKTsK
ICAgICAgICAgQVNTRVJUKG1fY29kZVB0cik7CiAgICAgfQorCisgICAgdGVtcGxhdGU8UHRyVGFn
IG90aGVyVGFnPgorICAgIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiYgb3BlcmF0b3I9KGNvbnN0IE1h
Y3JvQXNzZW1ibGVyQ29kZVJlZjxvdGhlclRhZz4mIG90aGVyQ29kZVJlZikKKyAgICB7CisgICAg
ICAgIG1fY29kZVB0ciA9IE1hY3JvQXNzZW1ibGVyQ29kZVB0cjx0YWc+OjpjcmVhdGVGcm9tRXhl
Y3V0YWJsZUFkZHJlc3Mob3RoZXJDb2RlUmVmLmNvZGUoKS50ZW1wbGF0ZSByZXRhZ2dlZEV4ZWN1
dGFibGVBZGRyZXNzPHRhZz4oKSk7CisgICAgICAgIG1fZXhlY3V0YWJsZU1lbW9yeSA9IG90aGVy
Q29kZVJlZi5tX2V4ZWN1dGFibGVNZW1vcnk7CisgICAgICAgIHJldHVybiAqdGhpczsKKyAgICB9
CiAgICAgCiAgICAgLy8gVXNlIHRoaXMgb25seSB3aGVuIHlvdSBrbm93IHRoYXQgdGhlIGNvZGVQ
dHIgcmVmZXJzIHRvIGNvZGUgdGhhdCBpcwogICAgIC8vIGFscmVhZHkgYmVpbmcga2VwdCBhbGl2
ZSB0aHJvdWdoIHNvbWUgb3RoZXIgbWVhbnMuIFR5cGljYWxseSB0aGlzIG1lYW5zCkBAIC00NDMs
OSArNDUxLDkgQEAgcHVibGljOgogcHJpdmF0ZToKICAgICB0ZW1wbGF0ZTxQdHJUYWcgb3RoZXJU
YWc+CiAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmKGNvbnN0IE1hY3JvQXNzZW1ibGVyQ29kZVJl
ZjxvdGhlclRhZz4mIG90aGVyQ29kZVJlZikKLSAgICAgICAgOiBtX2NvZGVQdHIoTWFjcm9Bc3Nl
bWJsZXJDb2RlUHRyPHRhZz46OmNyZWF0ZUZyb21FeGVjdXRhYmxlQWRkcmVzcyhvdGhlckNvZGVS
ZWYuY29kZSgpLnRlbXBsYXRlIHJldGFnZ2VkRXhlY3V0YWJsZUFkZHJlc3M8dGFnPigpKSkKLSAg
ICAgICAgLCBtX2V4ZWN1dGFibGVNZW1vcnkob3RoZXJDb2RlUmVmLm1fZXhlY3V0YWJsZU1lbW9y
eSkKLSAgICB7IH0KKyAgICB7CisgICAgICAgICp0aGlzID0gb3RoZXJDb2RlUmVmOworICAgIH0K
IAogICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0cjx0YWc+IG1fY29kZVB0cjsKICAgICBSZWZQdHI8
RXhlY3V0YWJsZU1lbW9yeUhhbmRsZT4gbV9leGVjdXRhYmxlTWVtb3J5OwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHAJKHJldmlzaW9u
IDI0MzYzNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNzM2LDYgKzE3MzYsMTUgQEAgQnl0ZUNvZGVQYXJzZXI6
OkNhbGxPcHRpbWl6YXRpb25SZXN1bHQgQgogICAgICAgICB9CiAgICAgfTsKIAorICAgIC8qCisg
ICAgaWYgKE5hdGl2ZUV4ZWN1dGFibGUqIGV4ZWN1dGFibGUgPSBjYWxsZWUubmF0aXZlRXhlY3V0
YWJsZSgpKSB7CisgICAgICAgIGRhdGFMb2dMbigiTmF0aXZlIGV4ZWN1dGFibGVyIDogIiwgUmF3
UG9pbnRlcihleGVjdXRhYmxlKSk7CisgICAgICAgIGlmIChXZWJBc3NlbWJseUZ1bmN0aW9uKiBm
ID0gZXhlY3V0YWJsZS0+d2ViQXNzZW1ibHlGdW5jdGlvbigpKSB7CisgICAgICAgICAgICBkYXRh
TG9nTG4oIkhhdmUgd2FzbSBmdW5jdGlvbiE6ICIsIFJhd1BvaW50ZXIoZikpOworICAgICAgICB9
CisgICAgfQorICAgICovCisKICAgICBpZiAoSW50ZXJuYWxGdW5jdGlvbiogZnVuY3Rpb24gPSBj
YWxsZWUuaW50ZXJuYWxGdW5jdGlvbigpKSB7CiAgICAgICAgIGlmIChoYW5kbGVDb25zdGFudElu
dGVybmFsRnVuY3Rpb24oY2FsbFRhcmdldE5vZGUsIHJlc3VsdCwgZnVuY3Rpb24sIHJlZ2lzdGVy
T2Zmc2V0LCBhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcywgc3BlY2lhbGl6YXRpb25LaW5kLCBw
cmVkaWN0aW9uLCBpbnNlcnRDaGVja3NXaXRoQWNjb3VudGluZykpIHsKICAgICAgICAgICAgIGVu
ZFNwZWNpYWxDYXNlKCk7CkBAIC0xODAwLDYgKzE4MDksMTQgQEAgYm9vbCBCeXRlQ29kZVBhcnNl
cjo6aGFuZGxlVmFyYXJnc0lubGluaQogICAgICAgICBtYW5kYXRvcnlNaW5pbXVtID0gZnVuY3Rp
b25FeGVjdXRhYmxlLT5wYXJhbWV0ZXJDb3VudCgpOwogICAgIGVsc2UKICAgICAgICAgbWFuZGF0
b3J5TWluaW11bSA9IDA7CisKKyAgICAvKgorICAgIGlmIChOYXRpdmVFeGVjdXRhYmxlKiBleGVj
dXRhYmxlID0gY2FsbFZhcmlhbnQubmF0aXZlRXhlY3V0YWJsZSgpKSB7CisgICAgICAgIGlmIChX
ZWJBc3NlbWJseUZ1bmN0aW9uKiBmID0gZXhlY3V0YWJsZS0+d2ViQXNzZW1ibHlGdW5jdGlvbigp
KSB7CisgICAgICAgICAgICBkYXRhTG9nTG4oIkhhdmUgd2FzbSBmdW5jdGlvbiB2YXJhcmdzOiAi
LCBSYXdQb2ludGVyKGYpKTsKKyAgICAgICAgfQorICAgIH0KKyAgICAqLwogICAgIAogICAgIC8v
IGluY2x1ZGVzICJ0aGlzIgogICAgIHVuc2lnbmVkIG1heE51bUFyZ3VtZW50cyA9IHN0ZDo6bWF4
KGNhbGxMaW5rU3RhdHVzLm1heE51bUFyZ3VtZW50cygpLCBtYW5kYXRvcnlNaW5pbXVtICsgMSk7
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1N0cmVuZ3RoUmVkdWN0aW9uUGhh
c2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3RyZW5n
dGhSZWR1Y3Rpb25QaGFzZS5jcHAJKHJldmlzaW9uIDI0MzYzNSkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHU3RyZW5ndGhSZWR1Y3Rpb25QaGFzZS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTM5LDYgKzM5LDcgQEAKICNpbmNsdWRlICJNYXRoQ29tbW9uLmgiCiAjaW5jbHVkZSAiUmVn
RXhwT2JqZWN0LmgiCiAjaW5jbHVkZSAiU3RyaW5nUHJvdG90eXBlLmgiCisjaW5jbHVkZSAiV2Vi
QXNzZW1ibHlGdW5jdGlvbi5oIgogI2luY2x1ZGUgPGNzdGRsaWI+CiAjaW5jbHVkZSA8d3RmL3Rl
eHQvU3RyaW5nQnVpbGRlci5oPgogCkBAIC05MTYsNiArOTE3LDkgQEAgcHJpdmF0ZToKICAgICAg
ICAgICAgIEVkZ2UgY2FsbGVlID0gbV9ncmFwaC52YXJBcmdDaGlsZChtX25vZGUsIDApOwogICAg
ICAgICAgICAgQ2FsbFZhcmlhbnQgY2FsbFZhcmlhbnQ7CiAgICAgICAgICAgICBpZiAoSlNGdW5j
dGlvbiogZnVuY3Rpb24gPSBjYWxsZWUtPmR5bmFtaWNDYXN0Q29uc3RhbnQ8SlNGdW5jdGlvbio+
KHZtKCkpKSB7CisgICAgICAgICAgICAgICAgaWYgKGpzRHluYW1pY0Nhc3Q8V2ViQXNzZW1ibHlG
dW5jdGlvbkJhc2UqPih2bSgpLCBmdW5jdGlvbikpCisgICAgICAgICAgICAgICAgICAgIGRhdGFM
b2dMbigiV2FzbSBkaXJlY3QgY2FsbCEiKTsKKwogICAgICAgICAgICAgICAgIGV4ZWN1dGFibGUg
PSBmdW5jdGlvbi0+ZXhlY3V0YWJsZSgpOwogICAgICAgICAgICAgICAgIGNhbGxWYXJpYW50ID0g
Q2FsbFZhcmlhbnQoZnVuY3Rpb24pOwogICAgICAgICAgICAgfSBlbHNlIGlmIChjYWxsZWUtPmlz
RnVuY3Rpb25BbGxvY2F0aW9uKCkpIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRl
cnByZXRlci9JbnRlcnByZXRlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2ludGVycHJldGVyL0ludGVycHJldGVyLmNwcAkocmV2aXNpb24gMjQzNjM1KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0ludGVycHJldGVyLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtNTQ5LDYgKzU0OSwxMSBAQCBwdWJsaWM6CiAgICAgICAgICAgICB9CiAgICAgICAg
IH0KIAorICAgICAgICBpZiAodmlzaXRvci0+Y2FsbGVlKCkuaXNDZWxsKCkpIHsKKyAgICAgICAg
ICAgIGlmIChhdXRvKiBpY0NhbGxlZSA9IGpzRHluYW1pY0Nhc3Q8SlNUb1dhc21JQ0NhbGxlZSo+
KG1fdm0sIHZpc2l0b3ItPmNhbGxlZSgpLmFzQ2VsbCgpKSkKKyAgICAgICAgICAgICAgICBtX3Zt
Lndhc21Db250ZXh0LnN0b3JlKGljQ2FsbGVlLT5mdW5jdGlvbigpLT5wcmV2aW91c0luc3RhbmNl
KG1fY2FsbEZyYW1lKSwgbV92bS5zb2Z0U3RhY2tMaW1pdCgpKTsKKyAgICAgICAgfQorCiAgICAg
ICAgIG5vdGlmeURlYnVnZ2VyT2ZVbndpbmRpbmcobV92bSwgbV9jYWxsRnJhbWUpOwogCiAgICAg
ICAgIGNvcHlDYWxsZWVTYXZlc1RvRW50cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVyKHZpc2l0b3Ip
OwpAQCAtNTY0LDcgKzU2OSw3IEBAIHByaXZhdGU6CiAgICAgdm9pZCBjb3B5Q2FsbGVlU2F2ZXNU
b0VudHJ5RnJhbWVDYWxsZWVTYXZlc0J1ZmZlcihTdGFja1Zpc2l0b3ImIHZpc2l0b3IpIGNvbnN0
CiAgICAgewogI2lmICFFTkFCTEUoQ19MT09QKSAmJiBOVU1CRVJfT0ZfQ0FMTEVFX1NBVkVTX1JF
R0lTVEVSUyA+IDAKLSAgICAgICAgY29uc3QgUmVnaXN0ZXJBdE9mZnNldExpc3QqIGN1cnJlbnRD
YWxsZWVTYXZlcyA9IHZpc2l0b3ItPmNhbGxlZVNhdmVSZWdpc3RlcnMoKTsKKyAgICAgICAgT3B0
aW9uYWw8UmVnaXN0ZXJBdE9mZnNldExpc3Q+IGN1cnJlbnRDYWxsZWVTYXZlcyA9IHZpc2l0b3It
PmNhbGxlZVNhdmVSZWdpc3RlcnNGb3JVbndpbmRpbmcoKTsKIAogICAgICAgICBpZiAoIWN1cnJl
bnRDYWxsZWVTYXZlcykKICAgICAgICAgICAgIHJldHVybjsKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9pbnRlcnByZXRlci9TdGFja1Zpc2l0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9TdGFja1Zpc2l0b3IuY3BwCShyZXZpc2lvbiAy
NDM2MzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvU3RhY2tWaXNpdG9y
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzMsNiArMzMsNyBAQAogI2luY2x1ZGUgIkpTQ0lubGlu
ZXMuaCIKICNpbmNsdWRlICJXYXNtQ2FsbGVlLmgiCiAjaW5jbHVkZSAiV2FzbUluZGV4T3JOYW1l
LmgiCisjaW5jbHVkZSAiV2ViQXNzZW1ibHlGdW5jdGlvbi5oIgogI2luY2x1ZGUgPHd0Zi90ZXh0
L1N0cmluZ0J1aWxkZXIuaD4KIAogbmFtZXNwYWNlIEpTQyB7CkBAIC0yNTIsMTAgKzI1MywxMCBA
QCBTdGFja1Zpc2l0b3I6OkZyYW1lOjpDb2RlVHlwZSBTdGFja1Zpc2l0CiAgICAgcmV0dXJuIENv
ZGVUeXBlOjpHbG9iYWw7CiB9CiAKLWNvbnN0IFJlZ2lzdGVyQXRPZmZzZXRMaXN0KiBTdGFja1Zp
c2l0b3I6OkZyYW1lOjpjYWxsZWVTYXZlUmVnaXN0ZXJzKCkKK09wdGlvbmFsPFJlZ2lzdGVyQXRP
ZmZzZXRMaXN0PiBTdGFja1Zpc2l0b3I6OkZyYW1lOjpjYWxsZWVTYXZlUmVnaXN0ZXJzRm9yVW53
aW5kaW5nKCkKIHsKICAgICBpZiAoaXNJbmxpbmVkRnJhbWUoKSkKLSAgICAgICAgcmV0dXJuIG51
bGxwdHI7CisgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAKICNpZiAhRU5BQkxFKENfTE9P
UCkgJiYgTlVNQkVSX09GX0NBTExFRV9TQVZFU19SRUdJU1RFUlMgPiAwCiAKQEAgLTI2MywxOSAr
MjY0LDI0IEBAIGNvbnN0IFJlZ2lzdGVyQXRPZmZzZXRMaXN0KiBTdGFja1Zpc2l0b3IKICAgICBp
ZiAoaXNXYXNtRnJhbWUoKSkgewogICAgICAgICBpZiAoY2FsbGVlKCkuaXNDZWxsKCkpIHsKICAg
ICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKGlzV2ViQXNzZW1ibHlUb0pTQ2FsbGVlKGNhbGxlZSgp
LmFzQ2VsbCgpKSk7Ci0gICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgICAgIHJl
dHVybiBXVEY6Om51bGxvcHQ7CiAgICAgICAgIH0KICAgICAgICAgV2FzbTo6Q2FsbGVlKiB3YXNt
Q2FsbGVlID0gY2FsbGVlKCkuYXNXYXNtQ2FsbGVlKCk7Ci0gICAgICAgIHJldHVybiB3YXNtQ2Fs
bGVlLT5jYWxsZWVTYXZlUmVnaXN0ZXJzKCk7CisgICAgICAgIHJldHVybiAqd2FzbUNhbGxlZS0+
Y2FsbGVlU2F2ZVJlZ2lzdGVycygpOworICAgIH0KKworICAgIGlmIChjYWxsZWUoKS5pc0NlbGwo
KSkgeworICAgICAgICBpZiAoYXV0byogaWNDYWxsZWUgPSBqc0R5bmFtaWNDYXN0PEpTVG9XYXNt
SUNDYWxsZWUqPigqY2FsbGVlKCkuYXNDZWxsKCktPnZtKCksIGNhbGxlZSgpLmFzQ2VsbCgpKSkK
KyAgICAgICAgICAgIHJldHVybiBpY0NhbGxlZS0+ZnVuY3Rpb24oKS0+dXNlZENhbGxlZVNhdmVS
ZWdpc3RlcnMoKTsKICAgICB9CiAjZW5kaWYgLy8gRU5BQkxFKFdFQkFTU0VNQkxZKQogCiAgICAg
aWYgKENvZGVCbG9jayogY29kZUJsb2NrID0gdGhpcy0+Y29kZUJsb2NrKCkpCi0gICAgICAgIHJl
dHVybiBjb2RlQmxvY2stPmNhbGxlZVNhdmVSZWdpc3RlcnMoKTsKKyAgICAgICAgcmV0dXJuICpj
b2RlQmxvY2stPmNhbGxlZVNhdmVSZWdpc3RlcnMoKTsKIAogI2VuZGlmIC8vICFFTkFCTEUoQ19M
T09QKSAmJiBOVU1CRVJfT0ZfQ0FMTEVFX1NBVkVTX1JFR0lTVEVSUyA+IDAKIAotICAgIHJldHVy
biBudWxscHRyOworICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiB9CiAKIFN0cmluZyBTdGFja1Zp
c2l0b3I6OkZyYW1lOjpmdW5jdGlvbk5hbWUoKSBjb25zdApJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ludGVycHJldGVyL1N0YWNrVmlzaXRvci5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9TdGFja1Zpc2l0b3IuaAkocmV2aXNpb24gMjQzNjM1
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL1N0YWNrVmlzaXRvci5oCSh3
b3JraW5nIGNvcHkpCkBAIC05NCw3ICs5NCw3IEBAIHB1YmxpYzoKICAgICAgICAgYm9vbCBoYXNM
aW5lQW5kQ29sdW1uSW5mbygpIGNvbnN0OwogICAgICAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lk
IGNvbXB1dGVMaW5lQW5kQ29sdW1uKHVuc2lnbmVkJiBsaW5lLCB1bnNpZ25lZCYgY29sdW1uKSBj
b25zdDsKIAotICAgICAgICBjb25zdCBSZWdpc3RlckF0T2Zmc2V0TGlzdCogY2FsbGVlU2F2ZVJl
Z2lzdGVycygpOworICAgICAgICBPcHRpb25hbDxSZWdpc3RlckF0T2Zmc2V0TGlzdD4gY2FsbGVl
U2F2ZVJlZ2lzdGVyc0ZvclVud2luZGluZygpOwogCiAgICAgICAgIENsb25lZEFyZ3VtZW50cyog
Y3JlYXRlQXJndW1lbnRzKCk7CiAgICAgICAgIENhbGxGcmFtZSogY2FsbEZyYW1lKCkgY29uc3Qg
eyByZXR1cm4gbV9jYWxsRnJhbWU7IH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
SklUT3BlcmF0aW9ucy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9KSVRPcGVyYXRpb25zLmNwcAkocmV2aXNpb24gMjQzNjM1KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9KSVRPcGVyYXRpb25zLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzYsNiArNzYs
NyBAQAogI2luY2x1ZGUgIlRodW5rR2VuZXJhdG9ycy5oIgogI2luY2x1ZGUgIlR5cGVQcm9maWxl
ckxvZy5oIgogI2luY2x1ZGUgIlZNSW5saW5lcy5oIgorI2luY2x1ZGUgIldlYkFzc2VtYmx5RnVu
Y3Rpb24uaCIKICNpbmNsdWRlIDx3dGYvSW5saW5lQVNNLmg+CiAKIG5hbWVzcGFjZSBKU0MgewpA
QCAtMTAzNiw5ICsxMDM3LDE3IEBAIFNsb3dQYXRoUmV0dXJuVHlwZSBKSVRfT1BFUkFUSU9OIG9w
ZXJhdGkKIAogICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxKU0VudHJ5UHRyVGFnPiBjb2RlUHRy
OwogICAgIENvZGVCbG9jayogY29kZUJsb2NrID0gbnVsbHB0cjsKLSAgICBpZiAoZXhlY3V0YWJs
ZS0+aXNIb3N0RnVuY3Rpb24oKSkKLSAgICAgICAgY29kZVB0ciA9IGV4ZWN1dGFibGUtPmVudHJ5
cG9pbnRGb3Ioa2luZCwgTXVzdENoZWNrQXJpdHkpOwotICAgIGVsc2UgeworICAgIGlmIChleGVj
dXRhYmxlLT5pc0hvc3RGdW5jdGlvbigpKSB7CisjaWYgRU5BQkxFKFdFQkFTU0VNQkxZKQorICAg
ICAgICBpZiAoYXV0byogd2FzbUZ1bmN0aW9uID0ganNEeW5hbWljQ2FzdDxXZWJBc3NlbWJseUZ1
bmN0aW9uKj4oKnZtLCBjYWxsZWUpKSB7CisgICAgICAgICAgICBjb2RlUHRyID0gd2FzbUZ1bmN0
aW9uLT5qc0NhbGxFbnRyeXBvaW50KCk7CisgICAgICAgICAgICAvL2RhdGFMb2dMbigiSUNpbmcg
d2FzbSEiKTsKKyAgICAgICAgfQorI2VuZGlmCisKKyAgICAgICAgaWYgKCFjb2RlUHRyKQorICAg
ICAgICAgICAgY29kZVB0ciA9IGV4ZWN1dGFibGUtPmVudHJ5cG9pbnRGb3Ioa2luZCwgTXVzdENo
ZWNrQXJpdHkpOworICAgIH0gZWxzZSB7CiAgICAgICAgIEZ1bmN0aW9uRXhlY3V0YWJsZSogZnVu
Y3Rpb25FeGVjdXRhYmxlID0gc3RhdGljX2Nhc3Q8RnVuY3Rpb25FeGVjdXRhYmxlKj4oZXhlY3V0
YWJsZSk7CiAKICAgICAgICAgYXV0byBoYW5kbGVUaHJvd0V4Y2VwdGlvbiA9IFsmXSAoKSB7CkBA
IC0xMDY0LDYgKzEwNzMsNyBAQCBTbG93UGF0aFJldHVyblR5cGUgSklUX09QRVJBVElPTiBvcGVy
YXRpCiAgICAgICAgICAgICBhcml0eSA9IEFyaXR5Q2hlY2tOb3RSZXF1aXJlZDsKICAgICAgICAg
Y29kZVB0ciA9IGZ1bmN0aW9uRXhlY3V0YWJsZS0+ZW50cnlwb2ludEZvcihraW5kLCBhcml0eSk7
CiAgICAgfQorCiAgICAgaWYgKCFjYWxsTGlua0luZm8tPnNlZW5PbmNlKCkpCiAgICAgICAgIGNh
bGxMaW5rSW5mby0+c2V0U2VlbigpOwogICAgIGVsc2UKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL05hdGl2ZUV4ZWN1dGFibGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL05hdGl2ZUV4ZWN1dGFibGUuY3BwCShyZXZpc2lvbiAyNDM2
MzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9OYXRpdmVFeGVjdXRhYmxlLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMzQsNiArMzQsNyBAQAogI2luY2x1ZGUgIlBhcnNlci5oIgog
I2luY2x1ZGUgIlR5cGVQcm9maWxlci5oIgogI2luY2x1ZGUgIlZNSW5saW5lcy5oIgorI2luY2x1
ZGUgIldlYkFzc2VtYmx5RnVuY3Rpb24uaCIKICNpbmNsdWRlIDx3dGYvQ29tbWFQcmludGVyLmg+
CiAKIG5hbWVzcGFjZSBKU0MgewpAQCAtNDIsOCArNDMsNyBAQCBjb25zdCBDbGFzc0luZm8gTmF0
aXZlRXhlY3V0YWJsZTo6c19pbmZvCiAKIE5hdGl2ZUV4ZWN1dGFibGUqIE5hdGl2ZUV4ZWN1dGFi
bGU6OmNyZWF0ZShWTSYgdm0sIFJlZjxKSVRDb2RlPiYmIGNhbGxUaHVuaywgVGFnZ2VkTmF0aXZl
RnVuY3Rpb24gZnVuY3Rpb24sIFJlZjxKSVRDb2RlPiYmIGNvbnN0cnVjdFRodW5rLCBUYWdnZWRO
YXRpdmVGdW5jdGlvbiBjb25zdHJ1Y3RvciwgY29uc3QgU3RyaW5nJiBuYW1lKQogewotICAgIE5h
dGl2ZUV4ZWN1dGFibGUqIGV4ZWN1dGFibGU7Ci0gICAgZXhlY3V0YWJsZSA9IG5ldyAoTm90TnVs
bCwgYWxsb2NhdGVDZWxsPE5hdGl2ZUV4ZWN1dGFibGU+KHZtLmhlYXApKSBOYXRpdmVFeGVjdXRh
YmxlKHZtLCBmdW5jdGlvbiwgY29uc3RydWN0b3IpOworICAgIE5hdGl2ZUV4ZWN1dGFibGUqIGV4
ZWN1dGFibGUgPSBuZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxOYXRpdmVFeGVjdXRhYmxlPih2
bS5oZWFwKSkgTmF0aXZlRXhlY3V0YWJsZSh2bSwgZnVuY3Rpb24sIGNvbnN0cnVjdG9yKTsKICAg
ICBleGVjdXRhYmxlLT5maW5pc2hDcmVhdGlvbih2bSwgV1RGTW92ZShjYWxsVGh1bmspLCBXVEZN
b3ZlKGNvbnN0cnVjdFRodW5rKSwgbmFtZSk7CiAgICAgcmV0dXJuIGV4ZWN1dGFibGU7CiB9CkBA
IC04MCw2ICs4MCwxOCBAQCBOYXRpdmVFeGVjdXRhYmxlOjpOYXRpdmVFeGVjdXRhYmxlKFZNJiB2
CiB7CiB9CiAKK3ZvaWQgTmF0aXZlRXhlY3V0YWJsZTo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNl
bGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQoreworICAgIE5hdGl2ZUV4ZWN1dGFibGUqIHRoaXNP
YmplY3QgPSBqc0Nhc3Q8TmF0aXZlRXhlY3V0YWJsZSo+KGNlbGwpOworICAgIEFTU0VSVF9HQ19P
QkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKKworICAgIEJhc2U6OnZpc2l0Q2hp
bGRyZW4odGhpc09iamVjdCwgdmlzaXRvcik7CisKKyNpZiBFTkFCTEUoV0VCQVNTRU1CTFkpCisg
ICAgdmlzaXRvci5hcHBlbmQodGhpc09iamVjdC0+bV93ZWJBc3NlbWJseUZ1bmN0aW9uKTsKKyNl
bmRpZgorfQorCiBjb25zdCBET01KSVQ6OlNpZ25hdHVyZSogTmF0aXZlRXhlY3V0YWJsZTo6c2ln
bmF0dXJlRm9yKENvZGVTcGVjaWFsaXphdGlvbktpbmQga2luZCkgY29uc3QKIHsKICAgICBBU1NF
UlQoaGFzSklUQ29kZUZvcihraW5kKSk7CkBAIC0xMDAsNCArMTEyLDYgQEAgQ29kZUJsb2NrSGFz
aCBOYXRpdmVFeGVjdXRhYmxlOjpoYXNoRm9yKAogICAgIHJldHVybiBDb2RlQmxvY2tIYXNoKGJp
dHdpc2VfY2FzdDx1aW50cHRyX3Q+KG1fY29uc3RydWN0b3IpKTsKIH0KIAordm9pZCBOYXRpdmVF
eGVjdXRhYmxlOjpzZXRXZWJBc3NlbWJseUZ1bmN0aW9uKFZNJiB2bSwgV2ViQXNzZW1ibHlGdW5j
dGlvbiogZnVuY3Rpb24pIHsgbV93ZWJBc3NlbWJseUZ1bmN0aW9uLnNldCh2bSwgdGhpcywgZnVu
Y3Rpb24pOyB9CisKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvTmF0aXZlRXhlY3V0YWJsZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL05hdGl2ZUV4ZWN1dGFibGUuaAkocmV2aXNpb24gMjQzNjM1KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTmF0aXZlRXhlY3V0YWJsZS5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yOSw2ICsyOSwxMCBAQAogCiBuYW1lc3BhY2UgSlNDIHsKIAorI2lmIEVO
QUJMRShXRUJBU1NFTUJMWSkKK2NsYXNzIFdlYkFzc2VtYmx5RnVuY3Rpb247CisjZW5kaWYKKwog
Y2xhc3MgTmF0aXZlRXhlY3V0YWJsZSBmaW5hbCA6IHB1YmxpYyBFeGVjdXRhYmxlQmFzZSB7CiAg
ICAgZnJpZW5kIGNsYXNzIEpJVDsKICAgICBmcmllbmQgY2xhc3MgTExJbnRPZmZzZXRzRXh0cmFj
dG9yOwpAQCAtNzYsMTYgKzgwLDI3IEBAIHB1YmxpYzoKICAgICBjb25zdCBET01KSVQ6OlNpZ25h
dHVyZSogc2lnbmF0dXJlRm9yKENvZGVTcGVjaWFsaXphdGlvbktpbmQpIGNvbnN0OwogICAgIElu
dHJpbnNpYyBpbnRyaW5zaWMoKSBjb25zdDsKIAorCisjaWYgRU5BQkxFKFdFQkFTU0VNQkxZKQor
ICAgIHZvaWQgc2V0V2ViQXNzZW1ibHlGdW5jdGlvbihWTSYsIFdlYkFzc2VtYmx5RnVuY3Rpb24q
KTsKKyAgICBXZWJBc3NlbWJseUZ1bmN0aW9uKiB3ZWJBc3NlbWJseUZ1bmN0aW9uKCkgeyByZXR1
cm4gbV93ZWJBc3NlbWJseUZ1bmN0aW9uLmdldCgpOyB9CisjZW5kaWYKKwogcHJvdGVjdGVkOgog
ICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oVk0mLCBSZWY8SklUQ29kZT4mJiBjYWxsVGh1bmssIFJl
ZjxKSVRDb2RlPiYmIGNvbnN0cnVjdFRodW5rLCBjb25zdCBTdHJpbmcmIG5hbWUpOwogCiBwcml2
YXRlOgorICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3Im
KTsKKwogICAgIE5hdGl2ZUV4ZWN1dGFibGUoVk0mLCBUYWdnZWROYXRpdmVGdW5jdGlvbiwgVGFn
Z2VkTmF0aXZlRnVuY3Rpb24gY29uc3RydWN0b3IpOwogCiAgICAgVGFnZ2VkTmF0aXZlRnVuY3Rp
b24gbV9mdW5jdGlvbjsKICAgICBUYWdnZWROYXRpdmVGdW5jdGlvbiBtX2NvbnN0cnVjdG9yOwog
CiAgICAgU3RyaW5nIG1fbmFtZTsKKyNpZiBFTkFCTEUoV0VCQVNTRU1CTFkpCisgICAgV3JpdGVC
YXJyaWVyPFdlYkFzc2VtYmx5RnVuY3Rpb24+IG1fd2ViQXNzZW1ibHlGdW5jdGlvbjsKKyNlbmRp
ZgogfTsKIAogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
d2FzbS9XYXNtT01HUGxhbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L3dhc20vV2FzbU9NR1BsYW4uY3BwCShyZXZpc2lvbiAyNDM2MzUpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvd2FzbS9XYXNtT01HUGxhbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEzOCw3ICsx
MzgsNyBAQCB2b2lkIE9NR1BsYW46OndvcmsoQ29tcGlsYXRpb25FZmZvcnQpCiAgICAgewogICAg
ICAgICBMb2NrSG9sZGVyIGhvbGRlcihtX2NvZGVCbG9jay0+bV9sb2NrKTsKIAotICAgICAgICBh
dXRvIHJlcGF0Y2hDYWxscyA9IFsmXSAoY29uc3QgVmVjdG9yPFVubGlua2VkV2FzbVRvV2FzbUNh
bGw+JiAgY2FsbHNpdGVzKSB7CisgICAgICAgIGF1dG8gcmVwYXRjaENhbGxzID0gWyZdIChjb25z
dCBWZWN0b3I8VW5saW5rZWRXYXNtVG9XYXNtQ2FsbD4mIGNhbGxzaXRlcykgewogICAgICAgICAg
ICAgZm9yIChhdXRvJiBjYWxsIDogY2FsbHNpdGVzKSB7CiAgICAgICAgICAgICAgICAgZGF0YUxv
Z0xuSWYoV2FzbU9NR1BsYW5JbnRlcm5hbDo6dmVyYm9zZSwgIkNvbnNpZGVyaW5nIHJlcGF0Y2hp
bmcgY2FsbCBhdDogIiwgUmF3UG9pbnRlcihjYWxsLmNhbGxMb2NhdGlvbi5kYXRhTG9jYXRpb24o
KSksICIgdGhhdCB0YXJnZXRzICIsIGNhbGwuZnVuY3Rpb25JbmRleFNwYWNlKTsKICAgICAgICAg
ICAgICAgICBpZiAoY2FsbC5mdW5jdGlvbkluZGV4U3BhY2UgPT0gZnVuY3Rpb25JbmRleFNwYWNl
KSB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseUV4ZWN1
dGFibGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pz
L1dlYkFzc2VtYmx5RXhlY3V0YWJsZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5RnVuY3Rpb24uY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5RnVuY3Rpb24uY3BwCShyZXZp
c2lvbiAyNDM2MzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJs
eUZ1bmN0aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzYsMjMgKzM2LDYzIEBACiAjaW5jbHVk
ZSAiSlNXZWJBc3NlbWJseU1lbW9yeS5oIgogI2luY2x1ZGUgIkpTV2ViQXNzZW1ibHlSdW50aW1l
RXJyb3IuaCIKICNpbmNsdWRlICJMTEludFRodW5rcy5oIgorI2luY2x1ZGUgIkxpbmtCdWZmZXIu
aCIKICNpbmNsdWRlICJQcm90b0NhbGxGcmFtZS5oIgogI2luY2x1ZGUgIlZNLmgiCiAjaW5jbHVk
ZSAiV2FzbUNhbGxlZS5oIgorI2luY2x1ZGUgIldhc21DYWxsaW5nQ29udmVudGlvbi5oIgogI2lu
Y2x1ZGUgIldhc21Db250ZXh0SW5saW5lcy5oIgogI2luY2x1ZGUgIldhc21Gb3JtYXQuaCIKICNp
bmNsdWRlICJXYXNtTWVtb3J5LmgiCisjaW5jbHVkZSAiV2FzbU1lbW9yeUluZm9ybWF0aW9uLmgi
CisjaW5jbHVkZSAiV2FzbU1vZHVsZUluZm9ybWF0aW9uLmgiCiAjaW5jbHVkZSAiV2FzbVNpZ25h
dHVyZUlubGluZXMuaCIKICNpbmNsdWRlIDx3dGYvRmFzdFRMUy5oPgogI2luY2x1ZGUgPHd0Zi9T
dGFja1BvaW50ZXIuaD4KICNpbmNsdWRlIDx3dGYvU3lzdGVtVHJhY2luZy5oPgogCisjaW5jbHVk
ZSAiTWFjcm9Bc3NlbWJsZXJQcmludGVyLmgiCisjaW5jbHVkZSAiR1BSSW5mby5oIgorI2luY2x1
ZGUgIkZQUkluZm8uaCIKKyNpbmNsdWRlICJSZWdpc3RlcklELmgiCisjaW5jbHVkZSA8d3RmL1Nj
b3BlLmg+CisKIG5hbWVzcGFjZSBKU0MgewogCitjb25zdCBDbGFzc0luZm8gSlNUb1dhc21JQ0Nh
bGxlZTo6c19pbmZvID0geyAiSlNUb1dhc21JQ0NhbGxlZSIsICZCYXNlOjpzX2luZm8sIG51bGxw
dHIsIG51bGxwdHIsIENSRUFURV9NRVRIT0RfVEFCTEUoSlNUb1dhc21JQ0NhbGxlZSkgfTsKKwor
SlNUb1dhc21JQ0NhbGxlZSogSlNUb1dhc21JQ0NhbGxlZTo6Y3JlYXRlKFZNJiB2bSwgSlNHbG9i
YWxPYmplY3QqIGdsb2JhbE9iamVjdCwgV2ViQXNzZW1ibHlGdW5jdGlvbiogZnVuY3Rpb24pCit7
CisgICAgSlNUb1dhc21JQ0NhbGxlZSogcmVzdWx0ID0gbmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNl
bGw8SlNUb1dhc21JQ0NhbGxlZT4odm0uaGVhcCkpIEpTVG9XYXNtSUNDYWxsZWUodm0sIGdsb2Jh
bE9iamVjdCwgY3JlYXRlU3RydWN0dXJlKHZtLCBnbG9iYWxPYmplY3QsIEpTVmFsdWUoKSkpOwor
ICAgIHJlc3VsdC0+ZmluaXNoQ3JlYXRpb24odm0pOworICAgIHJlc3VsdC0+bV9mdW5jdGlvbi5z
ZXQodm0sIHJlc3VsdCwgZnVuY3Rpb24pOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK1N0cnVj
dHVyZSogSlNUb1dhc21JQ0NhbGxlZTo6Y3JlYXRlU3RydWN0dXJlKFZNJiB2bSwgSlNHbG9iYWxP
YmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBwcm90b3R5cGUpCit7CisgICAgcmV0dXJuIFN0
cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgVHlwZUluZm8oSlND
YWxsZWVUeXBlLCBTdHJ1Y3R1cmVGbGFncyksIGluZm8oKSk7Cit9CisKK3ZvaWQgSlNUb1dhc21J
Q0NhbGxlZTo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9y
KQoreworICAgIEpTVG9XYXNtSUNDYWxsZWUqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNUb1dhc21J
Q0NhbGxlZSo+KGNlbGwpOworICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVj
dCwgaW5mbygpKTsKKworICAgIEJhc2U6OnZpc2l0Q2hpbGRyZW4odGhpc09iamVjdCwgdmlzaXRv
cik7CisgICAgdmlzaXRvci5hcHBlbmQodGhpc09iamVjdC0+bV9mdW5jdGlvbik7Cit9CisKIGNv
bnN0IENsYXNzSW5mbyBXZWJBc3NlbWJseUZ1bmN0aW9uOjpzX2luZm8gPSB7ICJXZWJBc3NlbWJs
eUZ1bmN0aW9uIiwgJkJhc2U6OnNfaW5mbywgbnVsbHB0ciwgbnVsbHB0ciwgQ1JFQVRFX01FVEhP
RF9UQUJMRShXZWJBc3NlbWJseUZ1bmN0aW9uKSB9OwogCiBzdGF0aWMgRW5jb2RlZEpTVmFsdWUg
SlNDX0hPU1RfQ0FMTCBjYWxsV2ViQXNzZW1ibHlGdW5jdGlvbihFeGVjU3RhdGUqIGV4ZWMpCiB7
CisKKyAgICAvL2RhdGFMb2dMbigiY2FsbFdlYkFzc2VtYmx5RnVuY3Rpb24gc3RhcnQiKTsKKyAg
ICAvL2F1dG8gb25FeGl0ID0gbWFrZVNjb3BlRXhpdChbJl0geworICAgIC8vICAgIGRhdGFMb2dM
bigiY2FsbFdlYkFzc2VtYmx5RnVuY3Rpb24gZW5kIik7CisgICAgLy99KTsKKwogICAgIFZNJiB2
bSA9IGV4ZWMtPnZtKCk7CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0p
OwogICAgIFdlYkFzc2VtYmx5RnVuY3Rpb24qIHdhc21GdW5jdGlvbiA9IGpzQ2FzdDxXZWJBc3Nl
bWJseUZ1bmN0aW9uKj4oZXhlYy0+anNDYWxsZWUoKSk7CkBAIC0xMTYsNiArMTU2LDEyIEBAIHN0
YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNhbGwKIAogICAgIC8vIEZJWE1FIERv
IGF3YXkgd2l0aCB0aGlzIGVudGlyZSBmdW5jdGlvbiwgYW5kIG9ubHkgdXNlIHRoZSBlbnRyeXBv
aW50IGdlbmVyYXRlZCBieSBCMy4gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTE2NjQ4NgogICAgIFdhc206Okluc3RhbmNlKiBwcmV2V2FzbUluc3RhbmNlID0gdm0ud2Fz
bUNvbnRleHQubG9hZCgpOworCisgICAgLy9zdGF0aWMgdWludDY0X3QgY2FsbHM7CisgICAgLy8r
K2NhbGxzOworICAgIC8vaWYgKGNhbGxzICUgMTAwMDAgPT0gMCkKKyAgICAvLyAgICBkYXRhTG9n
TG4oIkNhbGxzOiAiLCBjYWxscyk7CisKICAgICB7CiAgICAgICAgIC8vIFdlIGRvIHRoZSBzdGFj
ayBjaGVjayBoZXJlIGZvciB0aGUgd3JhcHBlciBmdW5jdGlvbiBiZWNhdXNlIHdlIGRvbid0CiAg
ICAgICAgIC8vIHdhbnQgdG8gZW1pdCBhIHN0YWNrIGNoZWNrIGluc2lkZSBldmVyeSB3cmFwcGVy
IGZ1bmN0aW9uLgpAQCAtMTQ4LDExICsxOTQsMzEyIEBAIHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBK
U0NfSE9TVF9DQUxMIGNhbGwKICAgICByZXR1cm4gcmF3UmVzdWx0OwogfQogCitSZWdpc3RlckF0
T2Zmc2V0TGlzdCBXZWJBc3NlbWJseUZ1bmN0aW9uOjp1c2VkQ2FsbGVlU2F2ZVJlZ2lzdGVycygp
IGNvbnN0Cit7CisgICAgYXV0byBtZW1vcnlNb2RlID0gaW5zdGFuY2UoKS0+bWVtb3J5TW9kZSgp
OworICAgIGNvbnN0IGF1dG8mIHBpbm5lZFJlZ3MgPSBXYXNtOjpQaW5uZWRSZWdpc3RlckluZm86
OmdldCgpOworICAgIFJlZ2lzdGVyU2V0IHRvU2F2ZSA9IHBpbm5lZFJlZ3MudG9TYXZlKG1lbW9y
eU1vZGUpOworICAgIHJldHVybiBSZWdpc3RlckF0T2Zmc2V0TGlzdCB7IHRvU2F2ZSwgUmVnaXN0
ZXJBdE9mZnNldExpc3Q6Ok9mZnNldEJhc2VUeXBlOjpGcmFtZVBvaW50ZXJCYXNlZCB9OworfQor
CitwdHJkaWZmX3QgV2ViQXNzZW1ibHlGdW5jdGlvbjo6cHJldmlvdXNJbnN0YW5jZU9mZnNldCgp
IGNvbnN0Cit7CisgICAgcHRyZGlmZl90IG1pbk9mZnNldCA9IDE7CisgICAgZm9yIChjb25zdCBS
ZWdpc3RlckF0T2Zmc2V0JiByZWdBdE9mZnNldCA6IHVzZWRDYWxsZWVTYXZlUmVnaXN0ZXJzKCkp
IHsKKyAgICAgICAgcHRyZGlmZl90IG9mZnNldCA9IHJlZ0F0T2Zmc2V0Lm9mZnNldCgpOworICAg
ICAgICBBU1NFUlQob2Zmc2V0IDwgMCk7CisgICAgICAgIG1pbk9mZnNldCA9IHN0ZDo6bWluKG9m
ZnNldCwgbWluT2Zmc2V0KTsKKyAgICB9CisgICAgQVNTRVJUKG1pbk9mZnNldCAhPSAxKTsKKyAg
ICByZXR1cm4gbWluT2Zmc2V0IC0gODsKK30KKworV2FzbTo6SW5zdGFuY2UqIFdlYkFzc2VtYmx5
RnVuY3Rpb246OnByZXZpb3VzSW5zdGFuY2UoQ2FsbEZyYW1lKiBjYWxsRnJhbWUpCit7CisgICAg
QVNTRVJUKGNhbGxGcmFtZS0+Y2FsbGVlKCkucmF3UHRyKCkgPT0gdGhpcyk7CisgICAgYXV0byog
cmVzdWx0ID0gKmJpdHdpc2VfY2FzdDxXYXNtOjpJbnN0YW5jZSoqPihiaXR3aXNlX2Nhc3Q8Y2hh
cio+KGNhbGxGcmFtZSkgKyBwcmV2aW91c0luc3RhbmNlT2Zmc2V0KCkpOworICAgIC8vZGF0YUxv
Z0xuKCJwcmV2aW91c0luc3RhbmNlOiAiLCBSYXdQb2ludGVyKHJlc3VsdCkpOworICAgIHJldHVy
biByZXN1bHQ7Cit9CisKK01hY3JvQXNzZW1ibGVyQ29kZVB0cjxKU0VudHJ5UHRyVGFnPiBXZWJB
c3NlbWJseUZ1bmN0aW9uOjpqc0NhbGxFbnRyeXBvaW50U2xvdygpCit7CisgICAgVk0mIHZtID0g
KnRoaXMtPnZtKCk7CisgICAgQ0NhbGxIZWxwZXJzIGppdDsKKworICAgIGNvbnN0IGF1dG8mIHNp
Z25hdHVyZSA9IFdhc206OlNpZ25hdHVyZUluZm9ybWF0aW9uOjpnZXQoc2lnbmF0dXJlSW5kZXgo
KSk7CisgICAgY29uc3QgYXV0byYgcGlubmVkUmVncyA9IFdhc206OlBpbm5lZFJlZ2lzdGVySW5m
bzo6Z2V0KCk7CisgICAgUmVnaXN0ZXJBdE9mZnNldExpc3QgcmVnaXN0ZXJzVG9TcGlsbCA9IHVz
ZWRDYWxsZWVTYXZlUmVnaXN0ZXJzKCk7CisKKyAgICBhdXRvJiBtb2R1bGVJbmZvcm1hdGlvbiA9
IGluc3RhbmNlKCktPmluc3RhbmNlKCkubW9kdWxlKCkubW9kdWxlSW5mb3JtYXRpb24oKTsKKwor
ICAgIHVuc2lnbmVkIHRvdGFsRnJhbWVTaXplID0gcmVnaXN0ZXJzVG9TcGlsbC5zaXplKCkgKiBz
aXplb2Yodm9pZCopOworICAgIHRvdGFsRnJhbWVTaXplICs9IHNpemVvZih2b2lkKik7IC8vIFBy
ZXZpb3VzIHRvcCBsZXZlbCB2bSBXYXNtOjpJbnN0YW5jZS4KKyAgICB0b3RhbEZyYW1lU2l6ZSAr
PSBXYXNtOjpXYXNtQ2FsbGluZ0NvbnZlbnRpb246OmhlYWRlclNpemVJbkJ5dGVzKCk7CisgICAg
dG90YWxGcmFtZVNpemUgLT0gc2l6ZW9mKENhbGxlckZyYW1lQW5kUEMpOworCisgICAgdW5zaWdu
ZWQgbnVtR1BScyA9IDA7CisgICAgdW5zaWduZWQgbnVtRlBScyA9IDA7CisgICAgYm9vbCBhcmd1
bWVudHNJbmNsdWRlSTY0ID0gZmFsc2U7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHNp
Z25hdHVyZS5hcmd1bWVudENvdW50KCk7IGkrKykgeworICAgICAgICBzd2l0Y2ggKHNpZ25hdHVy
ZS5hcmd1bWVudChpKSkgeworICAgICAgICBjYXNlIFdhc206Okk2NDoKKyAgICAgICAgICAgIGFy
Z3VtZW50c0luY2x1ZGVJNjQgPSB0cnVlOworICAgICAgICAgICAgRkFMTFRIUk9VR0g7CisgICAg
ICAgIGNhc2UgV2FzbTo6STMyOgorICAgICAgICAgICAgaWYgKG51bUdQUnMgPj0gV2FzbTo6d2Fz
bUNhbGxpbmdDb252ZW50aW9uKCkubV9ncHJBcmdzLnNpemUoKSkKKyAgICAgICAgICAgICAgICB0
b3RhbEZyYW1lU2l6ZSArPSBzaXplb2Yodm9pZCopOworICAgICAgICAgICAgKytudW1HUFJzOwor
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgV2FzbTo6RjMyOgorICAgICAgICBjYXNl
IFdhc206OkY2NDoKKyAgICAgICAgICAgIGlmIChudW1GUFJzID49IFdhc206Ondhc21DYWxsaW5n
Q29udmVudGlvbigpLm1fZnByQXJncy5zaXplKCkpCisgICAgICAgICAgICAgICAgdG90YWxGcmFt
ZVNpemUgKz0gc2l6ZW9mKHZvaWQqKTsKKyAgICAgICAgICAgICsrbnVtRlBSczsKKyAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKKyAgICAgICAgfQorICAgIH0KKyAgICBpZiAoYXJndW1lbnRzSW5jbHVk
ZUk2NCkgeworICAgICAgICAvLyBPT1BTOiBNb3ZlIHRoaXMgdG8gdGhlIHNsb3cgcGF0aCB0byBo
YW5kbGUhCisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIH0KKworICAgIHRvdGFsRnJhbWVT
aXplID0gV1RGOjpyb3VuZFVwVG9NdWx0aXBsZU9mKHN0YWNrQWxpZ25tZW50Qnl0ZXMoKSwgdG90
YWxGcmFtZVNpemUpOworCisgICAgaml0LmVtaXRGdW5jdGlvblByb2xvZ3VlKCk7CisgICAgaml0
LnN1YlB0cihNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKHRvdGFsRnJhbWVTaXplKSwgTWFj
cm9Bc3NlbWJsZXI6OnN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKKyAgICBqaXQuc3RvcmU2NChDQ2Fs
bEhlbHBlcnM6OlRydXN0ZWRJbW02NCgwKSwgQ0NhbGxIZWxwZXJzOjphZGRyZXNzRm9yKENhbGxG
cmFtZVNsb3Q6OmNvZGVCbG9jaykpOworCisgICAgR1BSUmVnIG5ld1dhc21Db250ZXh0R1BSID0g
V2FzbTo6d2FzbUNhbGxpbmdDb252ZW50aW9uQWlyKCkucHJvbG9ndWVTY3JhdGNoKDApOworICAg
IEdQUlJlZyBzY3JhdGNoR1BSID0gV2FzbTo6d2FzbUNhbGxpbmdDb252ZW50aW9uQWlyKCkucHJv
bG9ndWVTY3JhdGNoKDEpOworICAgIGppdC5sb2FkUHRyKHZtLmFkZHJlc3NPZlNvZnRTdGFja0xp
bWl0KCksIHNjcmF0Y2hHUFIpOworCisgICAgQ0NhbGxIZWxwZXJzOjpKdW1wTGlzdCBzdGFja092
ZXJmbG93OworICAgIHN0YWNrT3ZlcmZsb3cuYXBwZW5kKGppdC5icmFuY2hQdHIoQ0NhbGxIZWxw
ZXJzOjpBYm92ZSwgTWFjcm9Bc3NlbWJsZXI6OnN0YWNrUG9pbnRlclJlZ2lzdGVyLCBHUFJJbmZv
OjpjYWxsRnJhbWVSZWdpc3RlcikpOworICAgIHN0YWNrT3ZlcmZsb3cuYXBwZW5kKGppdC5icmFu
Y2hQdHIoQ0NhbGxIZWxwZXJzOjpCZWxvdywgTWFjcm9Bc3NlbWJsZXI6OnN0YWNrUG9pbnRlclJl
Z2lzdGVyLCBzY3JhdGNoR1BSKSk7CisKKyAgICBqaXQubG9hZFB0cigmdm0ud2FzbUNvbnRleHQu
aW5zdGFuY2UsIG5ld1dhc21Db250ZXh0R1BSKTsKKyAgICAvL2ppdC5wcmludCgiUHJpb3IgV2Fz
bSBJbnN0YW5jZTogIiwgbmV3V2FzbUNvbnRleHRHUFIsICJcbiIpOworICAgIHB0cmRpZmZfdCBw
cmV2aW91c0luc3RhbmNlT2Zmc2V0ID0gdGhpcy0+cHJldmlvdXNJbnN0YW5jZU9mZnNldCgpOwor
ICAgIGppdC5zdG9yZVB0cihuZXdXYXNtQ29udGV4dEdQUiwgQ0NhbGxIZWxwZXJzOjpBZGRyZXNz
KEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCBwcmV2aW91c0luc3RhbmNlT2Zmc2V0KSk7CisK
KyAgICBmb3IgKGNvbnN0IFJlZ2lzdGVyQXRPZmZzZXQmIHJlZ0F0T2Zmc2V0IDogcmVnaXN0ZXJz
VG9TcGlsbCkgeworICAgICAgICBHUFJSZWcgcmVnID0gcmVnQXRPZmZzZXQucmVnKCkuZ3ByKCk7
CisgICAgICAgIEFTU0VSVChyZWcgIT0gbmV3V2FzbUNvbnRleHRHUFIpOworICAgICAgICBwdHJk
aWZmX3Qgb2Zmc2V0ID0gcmVnQXRPZmZzZXQub2Zmc2V0KCk7CisgICAgICAgIGppdC5zdG9yZVB0
cihyZWcsIENDYWxsSGVscGVyczo6QWRkcmVzcyhHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3Rlciwg
b2Zmc2V0KSk7CisgICAgfQorICAgIGppdC5tb3ZlKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0
cigmaW5zdGFuY2UoKS0+aW5zdGFuY2UoKSksIG5ld1dhc21Db250ZXh0R1BSKTsKKworICAgIGlm
IChXYXNtOjpDb250ZXh0Ojp1c2VGYXN0VExTKCkpIAorICAgICAgICBqaXQuc3RvcmVXYXNtQ29u
dGV4dEluc3RhbmNlKG5ld1dhc21Db250ZXh0R1BSKTsKKyAgICBlbHNlCisgICAgICAgIGppdC5t
b3ZlKG5ld1dhc21Db250ZXh0R1BSLCBwaW5uZWRSZWdzLndhc21Db250ZXh0SW5zdGFuY2VQb2lu
dGVyKTsKKyAgICBqaXQuc3RvcmVQdHIobmV3V2FzbUNvbnRleHRHUFIsICZ2bS53YXNtQ29udGV4
dC5pbnN0YW5jZSk7CisgICAgaml0LnN0b3JlUHRyKHNjcmF0Y2hHUFIsIENDYWxsSGVscGVyczo6
QWRkcmVzcyhuZXdXYXNtQ29udGV4dEdQUiwgV2FzbTo6SW5zdGFuY2U6Om9mZnNldE9mQ2FjaGVk
U3RhY2tMaW1pdCgpKSk7CisKKyAgICBDQ2FsbEhlbHBlcnM6Okp1bXBMaXN0IHNsb3dQYXRoOwor
CisgICAgLy8gT09QUzogQXJpdHkgY2hlY2sgaGVyZSEKKyAgICAvLyBPT1BTOiBBc3NlcnQgcGlu
bmVkIHJlZ3MgY2FuJ3QgYmUgdGFnIHJlZ2lzdGVycywgb3Igb3JnYW5pemUgY29kZSBhY2NvcmRp
bmdseS4KKworICAgIC8vIEZpcnN0IHdlIGRvIHN0YWNrIHNsb3RzIGZvciBGUFJzIHNvIHdlIGNh
biB1c2UgRlBSIGFyZ3VtZW50IHJlZ2lzdGVyIGFzIHNjcmF0Y2guIGFuZCBhbGwgR1BScyBiZWNh
dXNlIHdlIGhhdmUgc2NyYXRjaCByZWdpc3RlcnMgdG8gZG8gaXQuCisgICAgLy8gQWZ0ZXIgdGhh
dCwgd2UgaGFuZGxlIEZQUiBhcmd1bWVudCByZWdpc3RlcnMuIAorICAgIHsKKyAgICAgICAgQ0Nh
bGxIZWxwZXJzOjpBZGRyZXNzIGNhbGxlZUZyYW1lID0gQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKE1h
Y3JvQXNzZW1ibGVyOjpzdGFja1BvaW50ZXJSZWdpc3RlciwgLXN0YXRpY19jYXN0PHB0cmRpZmZf
dD4oc2l6ZW9mKENhbGxlckZyYW1lQW5kUEMpKSk7CisgICAgICAgIG51bUdQUnMgPSAwOworICAg
ICAgICBudW1GUFJzID0gMDsKKyAgICAgICAgLy8gV2UncmUgZ29pbmcgdG8gc2V0IHRoZSBwaW5u
ZWQgcmVnaXN0ZXJzIGFmdGVyIHRoaXMuIFNvCisgICAgICAgIC8vIHdlIGNhbiB1c2UgdGhpcyBh
cyBhIHNjcmF0Y2ggZm9yIG5vdyBzaW5jZSB3ZSBzYXZlZCBpdCBhYm92ZS4KKyAgICAgICAgR1BS
UmVnIHNjcmF0Y2hSZWcgPSBwaW5uZWRSZWdzLmJhc2VNZW1vcnlQb2ludGVyOworICAgICAgICBG
UFJSZWcgc2NyYXRjaEZQUiA9IFdhc206Ondhc21DYWxsaW5nQ29udmVudGlvbigpLm1fZnByQXJn
c1swXS5mcHIoKTsKKworICAgICAgICBwdHJkaWZmX3QganNPZmZzZXQgPSBDYWxsRnJhbWVTbG90
OjpmaXJzdEFyZ3VtZW50ICogc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKTsKKworICAgICAgICBwdHJk
aWZmX3Qgd2FzbU9mZnNldCA9IENhbGxGcmFtZTo6aGVhZGVyU2l6ZUluUmVnaXN0ZXJzICogc2l6
ZW9mKHZvaWQqKTsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHNpZ25hdHVyZS5h
cmd1bWVudENvdW50KCk7IGkrKykgeworICAgICAgICAgICAgc3dpdGNoIChzaWduYXR1cmUuYXJn
dW1lbnQoaSkpIHsKKyAgICAgICAgICAgIGNhc2UgV2FzbTo6STY0OgorICAgICAgICAgICAgICAg
IFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICBjYXNlIFdhc206Okkz
MjoKKyAgICAgICAgICAgICAgICBqaXQubG9hZDY0KENDYWxsSGVscGVyczo6QWRkcmVzcyhHUFJJ
bmZvOjpjYWxsRnJhbWVSZWdpc3RlciwganNPZmZzZXQpLCBzY3JhdGNoUmVnKTsKKyAgICAgICAg
ICAgICAgICBzbG93UGF0aC5hcHBlbmQoaml0LmJyYW5jaElmTm90SW50MzIoc2NyYXRjaFJlZykp
OyAvLyBPT1BTOiBoYW5kbGUgZmxvYXQ/CisgICAgICAgICAgICAgICAgaWYgKG51bUdQUnMgPj0g
V2FzbTo6d2FzbUNhbGxpbmdDb252ZW50aW9uKCkubV9ncHJBcmdzLnNpemUoKSkgeworICAgICAg
ICAgICAgICAgICAgICBqaXQuc3RvcmUzMihzY3JhdGNoUmVnLCBjYWxsZWVGcmFtZS53aXRoT2Zm
c2V0KHdhc21PZmZzZXQpKTsKKyAgICAgICAgICAgICAgICAgICAgd2FzbU9mZnNldCArPSBzaXpl
b2Yodm9pZCopOworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAg
IGppdC56ZXJvRXh0ZW5kMzJUb1B0cihzY3JhdGNoUmVnLCBXYXNtOjp3YXNtQ2FsbGluZ0NvbnZl
bnRpb24oKS5tX2dwckFyZ3NbbnVtR1BSc10uZ3ByKCkpOworICAgICAgICAgICAgICAgICAgICAr
K251bUdQUnM7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICAgICAgY2FzZSBXYXNtOjpGMzI6CisgICAgICAgICAgICBjYXNlIFdhc206OkY2NDoKKyAg
ICAgICAgICAgICAgICBpZiAobnVtRlBScyA+PSBXYXNtOjp3YXNtQ2FsbGluZ0NvbnZlbnRpb24o
KS5tX2ZwckFyZ3Muc2l6ZSgpKSB7CisgICAgICAgICAgICAgICAgICAgIGppdC5sb2FkNjQoQ0Nh
bGxIZWxwZXJzOjpBZGRyZXNzKEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCBqc09mZnNldCks
IHNjcmF0Y2hSZWcpOworICAgICAgICAgICAgICAgICAgICBzbG93UGF0aC5hcHBlbmQoaml0LmJy
YW5jaElmTm90TnVtYmVyKHNjcmF0Y2hSZWcpKTsKKyAgICAgICAgICAgICAgICAgICAgc2xvd1Bh
dGguYXBwZW5kKGppdC5icmFuY2hJZkludDMyKHNjcmF0Y2hSZWcpKTsgLy8gT09QUzogSGFuZGxl
IGkzMgorCisgICAgICAgICAgICAgICAgICAgIGlmIChzaWduYXR1cmUuYXJndW1lbnQoaSkgPT0g
V2FzbTo6RjMyKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBqaXQudW5ib3hEb3VibGUoc2Ny
YXRjaFJlZywgc2NyYXRjaFJlZywgc2NyYXRjaEZQUik7CisgICAgICAgICAgICAgICAgICAgICAg
ICBqaXQuY29udmVydERvdWJsZVRvRmxvYXQoc2NyYXRjaEZQUiwgc2NyYXRjaEZQUik7CisgICAg
ICAgICAgICAgICAgICAgICAgICBqaXQuc3RvcmVGbG9hdChzY3JhdGNoRlBSLCBjYWxsZWVGcmFt
ZS53aXRoT2Zmc2V0KHdhc21PZmZzZXQpKTsKKyAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsK
KyAgICAgICAgICAgICAgICAgICAgICAgIGppdC5hZGQ2NChHUFJJbmZvOjp0YWdUeXBlTnVtYmVy
UmVnaXN0ZXIsIHNjcmF0Y2hSZWcsIHNjcmF0Y2hSZWcpOworICAgICAgICAgICAgICAgICAgICAg
ICAgaml0LnN0b3JlNjQoc2NyYXRjaFJlZywgY2FsbGVlRnJhbWUud2l0aE9mZnNldCh3YXNtT2Zm
c2V0KSk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgd2FzbU9m
ZnNldCArPSBzaXplb2Yodm9pZCopOworICAgICAgICAgICAgICAgIH0gZWxzZQorICAgICAgICAg
ICAgICAgICAgICArK251bUZQUnM7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAg
ICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7
CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGpzT2Zmc2V0ICs9IHNpemVvZihFbmNvZGVk
SlNWYWx1ZSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvLyBOb3cgaGFuZGxlIEZQUiBhcmd1
bWVudHMgaW4gcmVnaXN0ZXJzLgorICAgIHsKKyAgICAgICAgbnVtR1BScyA9IDA7CisgICAgICAg
IG51bUZQUnMgPSAwOworICAgICAgICAvLyBXZSdyZSBnb2luZyB0byBzZXQgdGhlIHBpbm5lZCBy
ZWdpc3RlcnMgYWZ0ZXIgdGhpcy4gU28KKyAgICAgICAgLy8gd2UgY2FuIHVzZSB0aGlzIGFzIGEg
c2NyYXRjaCBmb3Igbm93IHNpbmNlIHdlIHNhdmVkIGl0IGFib3ZlLgorICAgICAgICBHUFJSZWcg
c2NyYXRjaFJlZyA9IHBpbm5lZFJlZ3MuYmFzZU1lbW9yeVBvaW50ZXI7CisKKyAgICAgICAgcHRy
ZGlmZl90IGpzT2Zmc2V0ID0gQ2FsbEZyYW1lU2xvdDo6Zmlyc3RBcmd1bWVudCAqIHNpemVvZihF
bmNvZGVkSlNWYWx1ZSk7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBzaWduYXR1
cmUuYXJndW1lbnRDb3VudCgpOyBpKyspIHsKKyAgICAgICAgICAgIHN3aXRjaCAoc2lnbmF0dXJl
LmFyZ3VtZW50KGkpKSB7CisgICAgICAgICAgICBjYXNlIFdhc206OkYzMjoKKyAgICAgICAgICAg
IGNhc2UgV2FzbTo6RjY0OgorICAgICAgICAgICAgICAgIGlmIChudW1GUFJzIDwgV2FzbTo6d2Fz
bUNhbGxpbmdDb252ZW50aW9uKCkubV9mcHJBcmdzLnNpemUoKSkgeworICAgICAgICAgICAgICAg
ICAgICBqaXQubG9hZDY0KENDYWxsSGVscGVyczo6QWRkcmVzcyhHUFJJbmZvOjpjYWxsRnJhbWVS
ZWdpc3RlciwganNPZmZzZXQpLCBzY3JhdGNoUmVnKTsKKyAgICAgICAgICAgICAgICAgICAgc2xv
d1BhdGguYXBwZW5kKGppdC5icmFuY2hJZk5vdE51bWJlcihzY3JhdGNoUmVnKSk7CisgICAgICAg
ICAgICAgICAgICAgIHNsb3dQYXRoLmFwcGVuZChqaXQuYnJhbmNoSWZJbnQzMihzY3JhdGNoUmVn
KSk7IC8vIE9PUFM6IEhhbmRsZSBpMzIKKworICAgICAgICAgICAgICAgICAgICBGUFJSZWcgYXJn
RlBSID0gV2FzbTo6d2FzbUNhbGxpbmdDb252ZW50aW9uKCkubV9mcHJBcmdzW251bUZQUnNdLmZw
cigpOworICAgICAgICAgICAgICAgICAgICBqaXQudW5ib3hEb3VibGUoc2NyYXRjaFJlZywgc2Ny
YXRjaFJlZywgYXJnRlBSKTsKKworICAgICAgICAgICAgICAgICAgICBpZiAoc2lnbmF0dXJlLmFy
Z3VtZW50KGkpID09IFdhc206OkYzMikKKyAgICAgICAgICAgICAgICAgICAgICAgIGppdC5jb252
ZXJ0RG91YmxlVG9GbG9hdChhcmdGUFIsIGFyZ0ZQUik7CisKKyAgICAgICAgICAgICAgICAgICAg
KytudW1GUFJzOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9
CisKKyAgICAgICAgICAgIGpzT2Zmc2V0ICs9IHNpemVvZihFbmNvZGVkSlNWYWx1ZSk7CisgICAg
ICAgIH0KKyAgICB9CisKKyAgICBpZiAoISFtb2R1bGVJbmZvcm1hdGlvbi5tZW1vcnkpIHsKKyAg
ICAgICAgR1BSUmVnIGJhc2VNZW1vcnkgPSBwaW5uZWRSZWdzLmJhc2VNZW1vcnlQb2ludGVyOwor
CisgICAgICAgIGlmIChpbnN0YW5jZSgpLT5tZW1vcnlNb2RlKCkgIT0gV2FzbTo6TWVtb3J5TW9k
ZTo6U2lnbmFsaW5nKSB7CisgICAgICAgICAgICBjb25zdCBhdXRvJiBzaXplUmVncyA9IHBpbm5l
ZFJlZ3Muc2l6ZVJlZ2lzdGVyczsKKyAgICAgICAgICAgIEFTU0VSVChzaXplUmVncy5zaXplKCkg
Pj0gMSk7CisgICAgICAgICAgICBBU1NFUlQoIXNpemVSZWdzWzBdLnNpemVPZmZzZXQpOyAvLyBU
aGUgZm9sbG93aW5nIGNvZGUgYXNzdW1lcyB3ZSBzdGFydCBhdCAwLCBhbmQgY2FsY3VsYXRlcyBz
dWJzZXF1ZW50IHNpemUgcmVnaXN0ZXJzIHJlbGF0aXZlIHRvIDAuCisgICAgICAgICAgICBqaXQu
bG9hZFB0cihDQ2FsbEhlbHBlcnM6OkFkZHJlc3MobmV3V2FzbUNvbnRleHRHUFIsIFdhc206Oklu
c3RhbmNlOjpvZmZzZXRPZkNhY2hlZE1lbW9yeVNpemUoKSksIHNpemVSZWdzWzBdLnNpemVSZWdp
c3Rlcik7CisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAxOyBpIDwgc2l6ZVJlZ3Muc2l6
ZSgpOyArK2kpCisgICAgICAgICAgICAgICAgaml0LmFkZDY0KENDYWxsSGVscGVyczo6VHJ1c3Rl
ZEltbTMyKC1zaXplUmVnc1tpXS5zaXplT2Zmc2V0KSwgc2l6ZVJlZ3NbMF0uc2l6ZVJlZ2lzdGVy
LCBzaXplUmVnc1tpXS5zaXplUmVnaXN0ZXIpOworICAgICAgICB9CisKKyAgICAgICAgaml0Lmxv
YWRQdHIoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKG5ld1dhc21Db250ZXh0R1BSLCBXYXNtOjpJbnN0
YW5jZTo6b2Zmc2V0T2ZDYWNoZWRNZW1vcnkoKSksIGJhc2VNZW1vcnkpOworICAgIH0KKworICAg
IGlmICghbV9qc1RvV2FzbUlDQ2FsbGVlKQorICAgICAgICBtX2pzVG9XYXNtSUNDYWxsZWUuc2V0
KHZtLCB0aGlzLCBKU1RvV2FzbUlDQ2FsbGVlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCgpLCB0
aGlzKSk7CisgICAgaml0LnN0b3JlUHRyKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cihtX2pz
VG9XYXNtSUNDYWxsZWUuZ2V0KCkpLCBDQ2FsbEhlbHBlcnM6OmFkZHJlc3NGb3IoQ2FsbEZyYW1l
U2xvdDo6Y2FsbGVlKSk7CisKKyAgICB7CisgICAgICAgIGppdC5sb2FkUHRyKGVudHJ5cG9pbnRM
b2FkTG9jYXRpb24oKSwgc2NyYXRjaEdQUik7CisgICAgICAgIGppdC5jYWxsKHNjcmF0Y2hHUFIs
IFdhc21FbnRyeVB0clRhZyk7CisgICAgfQorCisgICAgLy9qaXQucHJpbnQoInJlc3VsdCBvZiB3
YXNtIGNhbGw6ICIsICtHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUiwgIiAiLCArRlBSSW5mbzo6cmV0
dXJuVmFsdWVGUFIsICJcbiIpOworICAgIC8vaml0LnByaW50KCJ0YWcgbnVtYmVyICIsIHN0YXRp
Y19jYXN0PE1hY3JvQXNzZW1ibGVyOjpSZWdpc3RlcklEPigrR1BSSW5mbzo6dGFnVHlwZU51bWJl
clJlZ2lzdGVyKSwgIlxuIik7CisgICAgLy9qaXQucHJpbnQoInRhZyBtYXNrICIsIHN0YXRpY19j
YXN0PE1hY3JvQXNzZW1ibGVyOjpSZWdpc3RlcklEPigrR1BSSW5mbzo6dGFnTWFza1JlZ2lzdGVy
KSwgIlxuIik7CisKKyAgICBqaXQubG9hZFB0cihDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoR1BSSW5m
bzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIHByZXZpb3VzSW5zdGFuY2VPZmZzZXQpLCBHUFJJbmZvOjpu
b25QcmVzZXJ2ZWROb25SZXR1cm5HUFIpOworICAgIGppdC5zdG9yZVB0cihHUFJJbmZvOjpub25Q
cmVzZXJ2ZWROb25SZXR1cm5HUFIsICZ2bS53YXNtQ29udGV4dC5pbnN0YW5jZSk7CisKKyAgICBm
b3IgKGNvbnN0IFJlZ2lzdGVyQXRPZmZzZXQmIHJlZ0F0T2Zmc2V0IDogcmVnaXN0ZXJzVG9TcGls
bCkgeworICAgICAgICBHUFJSZWcgcmVnID0gcmVnQXRPZmZzZXQucmVnKCkuZ3ByKCk7CisgICAg
ICAgIEFTU0VSVChyZWcgIT0gR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIpOworICAgICAgICBwdHJk
aWZmX3Qgb2Zmc2V0ID0gcmVnQXRPZmZzZXQub2Zmc2V0KCk7CisgICAgICAgIGppdC5sb2FkUHRy
KENDYWxsSGVscGVyczo6QWRkcmVzcyhHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3Rlciwgb2Zmc2V0
KSwgcmVnKTsKKyAgICB9CisKKyAgICBzd2l0Y2ggKHNpZ25hdHVyZS5yZXR1cm5UeXBlKCkpIHsK
KyAgICBjYXNlIFdhc206OlZvaWQ6CisgICAgICAgIGppdC5tb3ZlVHJ1c3RlZFZhbHVlKGpzVW5k
ZWZpbmVkKCksIEpTVmFsdWVSZWdzIHsgR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIgfSk7CisgICAg
ICAgIGJyZWFrOworICAgIGNhc2UgV2FzbTo6STMyOgorICAgICAgICBqaXQuemVyb0V4dGVuZDMy
VG9QdHIoR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIsIEdQUkluZm86OnJldHVyblZhbHVlR1BSKTsK
KyAgICAgICAgaml0LmJveEludDMyKEdQUkluZm86OnJldHVyblZhbHVlR1BSLCBKU1ZhbHVlUmVn
cyB7IEdQUkluZm86OnJldHVyblZhbHVlR1BSIH0pOworICAgICAgICBicmVhazsKKyAgICBjYXNl
IFdhc206OkYzMjoKKyAgICAgICAgaml0LmNvbnZlcnRGbG9hdFRvRG91YmxlKEZQUkluZm86OnJl
dHVyblZhbHVlRlBSLCBGUFJJbmZvOjpyZXR1cm5WYWx1ZUZQUik7CisgICAgICAgIEZBTExUSFJP
VUdIOworICAgIGNhc2UgV2FzbTo6RjY0OiB7CisgICAgICAgIGppdC5tb3ZlVHJ1c3RlZFZhbHVl
KGpzTnVtYmVyKHB1cmVOYU4oKSksIEpTVmFsdWVSZWdzIHsgR1BSSW5mbzo6cmV0dXJuVmFsdWVH
UFIgfSk7CisgICAgICAgIGF1dG8gaXNOYU4gPSBqaXQuYnJhbmNoSWZOYU4oRlBSSW5mbzo6cmV0
dXJuVmFsdWVGUFIpOworICAgICAgICBqaXQuYm94RG91YmxlKEZQUkluZm86OnJldHVyblZhbHVl
RlBSLCBKU1ZhbHVlUmVncyB7IEdQUkluZm86OnJldHVyblZhbHVlR1BSIH0pOworICAgICAgICBp
c05hTi5saW5rKCZqaXQpOworICAgICAgICBicmVhazsKKyAgICB9CisgICAgY2FzZSBXYXNtOjpJ
NjQ6CisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIGNhc2UgV2FzbTo6RnVuYzoKKyAgICBj
YXNlIFdhc206OkFueWZ1bmM6CisgICAgICAgIGppdC5icmVha3BvaW50KCk7CisgICAgICAgIGJy
ZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIGppdC5lbWl0
RnVuY3Rpb25FcGlsb2d1ZSgpOworICAgIGppdC5yZXQoKTsKKworICAgIHNsb3dQYXRoLmxpbmso
JmppdCk7CisgICAgaml0LmxvYWRQdHIoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKEdQUkluZm86OmNh
bGxGcmFtZVJlZ2lzdGVyLCBwcmV2aW91c0luc3RhbmNlT2Zmc2V0KSwgR1BSSW5mbzo6bm9uUHJl
c2VydmVkTm9uUmV0dXJuR1BSKTsKKyAgICBqaXQuc3RvcmVQdHIoR1BSSW5mbzo6bm9uUHJlc2Vy
dmVkTm9uUmV0dXJuR1BSLCAmdm0ud2FzbUNvbnRleHQuaW5zdGFuY2UpOworCisgICAgZm9yIChj
b25zdCBSZWdpc3RlckF0T2Zmc2V0JiByZWdBdE9mZnNldCA6IHJlZ2lzdGVyc1RvU3BpbGwpIHsK
KyAgICAgICAgR1BSUmVnIHJlZyA9IHJlZ0F0T2Zmc2V0LnJlZygpLmdwcigpOworICAgICAgICBB
U1NFUlQocmVnICE9IEdQUkluZm86OnJldHVyblZhbHVlR1BSKTsKKyAgICAgICAgcHRyZGlmZl90
IG9mZnNldCA9IHJlZ0F0T2Zmc2V0Lm9mZnNldCgpOworICAgICAgICBqaXQubG9hZFB0cihDQ2Fs
bEhlbHBlcnM6OkFkZHJlc3MoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIG9mZnNldCksIHJl
Zyk7CisgICAgfQorCisgICAgc3RhY2tPdmVyZmxvdy5saW5rKCZqaXQpOworICAgIGppdC5lbWl0
RnVuY3Rpb25FcGlsb2d1ZSgpOworICAgIC8vIE9PUFM6IENhbiBJIGp1c3QgdGFpbCBjYWxsIHRo
aXMgbmF0aXZlQ2FsbEdlbmVyYXRvcj8KKyAgICBhdXRvIGp1bXBUb0hvc3RDYWxsID0gaml0Lmp1
bXAoKTsKKworICAgIExpbmtCdWZmZXIgbGlua0J1ZmZlcihqaXQsIEdMT0JBTF9USFVOS19JRCwg
SklUQ29tcGlsYXRpb25DYW5GYWlsKTsKKyAgICBpZiAoVU5MSUtFTFkobGlua0J1ZmZlci5kaWRG
YWlsVG9BbGxvY2F0ZSgpKSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICBsaW5rQnVm
ZmVyLmxpbmsoanVtcFRvSG9zdENhbGwsIENvZGVMb2NhdGlvbkxhYmVsPEpJVFRodW5rUHRyVGFn
PihuYXRpdmVDYWxsR2VuZXJhdG9yKCZ2bSkuY29kZSgpLmV4ZWN1dGFibGVBZGRyZXNzKCkpKTsK
KworICAgIG1fanNDYWxsRW50cnlwb2ludCA9IEZJTkFMSVpFX0NPREUobGlua0J1ZmZlciwgV2Fz
bUVudHJ5UHRyVGFnLCAiSlMtPldhc20gSUMiKTsKKyAgICByZXR1cm4gbV9qc0NhbGxFbnRyeXBv
aW50LmNvZGUoKTsKK30KKwogV2ViQXNzZW1ibHlGdW5jdGlvbiogV2ViQXNzZW1ibHlGdW5jdGlv
bjo6Y3JlYXRlKFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgU3RydWN0dXJl
KiBzdHJ1Y3R1cmUsIHVuc2lnbmVkIGxlbmd0aCwgY29uc3QgU3RyaW5nJiBuYW1lLCBKU1dlYkFz
c2VtYmx5SW5zdGFuY2UqIGluc3RhbmNlLCBXYXNtOjpDYWxsZWUmIGpzRW50cnlwb2ludCwgV2Fz
bTo6V2FzbVRvV2FzbUltcG9ydGFibGVGdW5jdGlvbjo6TG9hZExvY2F0aW9uIHdhc21Ub1dhc21F
bnRyeXBvaW50TG9hZExvY2F0aW9uLCBXYXNtOjpTaWduYXR1cmVJbmRleCBzaWduYXR1cmVJbmRl
eCkKIHsKICAgICBOYXRpdmVFeGVjdXRhYmxlKiBleGVjdXRhYmxlID0gdm0uZ2V0SG9zdEZ1bmN0
aW9uKGNhbGxXZWJBc3NlbWJseUZ1bmN0aW9uLCBOb0ludHJpbnNpYywgY2FsbEhvc3RGdW5jdGlv
bkFzQ29uc3RydWN0b3IsIG51bGxwdHIsIG5hbWUpOwogICAgIFdlYkFzc2VtYmx5RnVuY3Rpb24q
IGZ1bmN0aW9uID0gbmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8V2ViQXNzZW1ibHlGdW5jdGlv
bj4odm0uaGVhcCkpIFdlYkFzc2VtYmx5RnVuY3Rpb24odm0sIGdsb2JhbE9iamVjdCwgc3RydWN0
dXJlLCBqc0VudHJ5cG9pbnQsIHdhc21Ub1dhc21FbnRyeXBvaW50TG9hZExvY2F0aW9uLCBzaWdu
YXR1cmVJbmRleCk7CiAgICAgZnVuY3Rpb24tPmZpbmlzaENyZWF0aW9uKHZtLCBleGVjdXRhYmxl
LCBsZW5ndGgsIG5hbWUsIGluc3RhbmNlKTsKKworICAgIC8vIE9PUFM6IG1ha2UgdGhpcyBwYXJ0
IG9mIGNyZWF0ZSgpLgorICAgIGV4ZWN1dGFibGUtPnNldFdlYkFzc2VtYmx5RnVuY3Rpb24odm0s
IGZ1bmN0aW9uKTsKKwogICAgIEFTU0VSVF9XSVRIX01FU1NBR0UoIWZ1bmN0aW9uLT5pc0xhcmdl
QWxsb2NhdGlvbigpLCAiV2ViQXNzZW1ibHlGdW5jdGlvbiBzaG91bGQgYmUgYWxsb2NhdGVkIG5v
dCBpbiBsYXJnZSBhbGxvY2F0aW9uIHNpbmNlIGl0IGlzIEpTQ2FsbGVlLiIpOwogICAgIHJldHVy
biBmdW5jdGlvbjsKIH0KQEAgLTE2OSw2ICs1MTYsMTUgQEAgV2ViQXNzZW1ibHlGdW5jdGlvbjo6
V2ViQXNzZW1ibHlGdW5jdGlvbgogICAgICwgbV9pbXBvcnRhYmxlRnVuY3Rpb24geyBzaWduYXR1
cmVJbmRleCwgd2FzbVRvV2FzbUVudHJ5cG9pbnRMb2FkTG9jYXRpb24gfQogeyB9CiAKK3ZvaWQg
V2ViQXNzZW1ibHlGdW5jdGlvbjo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNp
dG9yJiB2aXNpdG9yKQoreworICAgIFdlYkFzc2VtYmx5RnVuY3Rpb24qIHRoaXNPYmplY3QgPSBq
c0Nhc3Q8V2ViQXNzZW1ibHlGdW5jdGlvbio+KGNlbGwpOworICAgIEFTU0VSVF9HQ19PQkpFQ1Rf
SU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKKworICAgIEJhc2U6OnZpc2l0Q2hpbGRyZW4o
dGhpc09iamVjdCwgdmlzaXRvcik7CisgICAgdmlzaXRvci5hcHBlbmQodGhpc09iamVjdC0+bV9q
c1RvV2FzbUlDQ2FsbGVlKTsKK30KKwogfSAvLyBuYW1lc3BhY2UgSlNDCiAKICNlbmRpZiAvLyBF
TkFCTEUoV0VCQVNTRU1CTFkpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9X
ZWJBc3NlbWJseUZ1bmN0aW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L3dhc20vanMvV2ViQXNzZW1ibHlGdW5jdGlvbi5oCShyZXZpc2lvbiAyNDM2MzUpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseUZ1bmN0aW9uLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTQzLDYgKzQzLDI3IEBAIG5hbWVzcGFjZSBCMyB7CiBjbGFzcyBDb21waWxhdGlv
bjsKIH0KIAorY2xhc3MgV2ViQXNzZW1ibHlGdW5jdGlvbjsKKworY2xhc3MgSlNUb1dhc21JQ0Nh
bGxlZSA6IHB1YmxpYyBKU0NhbGxlZSB7CisgICAgdXNpbmcgQmFzZSA9IEpTQ2FsbGVlOworcHVi
bGljOgorICAgIERFQ0xBUkVfSU5GTzsKKworICAgIHN0YXRpYyBKU1RvV2FzbUlDQ2FsbGVlKiBj
cmVhdGUoVk0mLCBKU0dsb2JhbE9iamVjdCosIFdlYkFzc2VtYmx5RnVuY3Rpb24qKTsKKyAgICBz
dGF0aWMgU3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoVk0mLCBKU0dsb2JhbE9iamVjdCosIEpT
VmFsdWUpOworCisgICAgV2ViQXNzZW1ibHlGdW5jdGlvbiogZnVuY3Rpb24oKSB7IHJldHVybiBt
X2Z1bmN0aW9uLmdldCgpOyB9CisKK3ByaXZhdGU6CisgICAgSlNUb1dhc21JQ0NhbGxlZShWTSYg
dm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFN0cnVjdHVyZSogc3RydWN0dXJlKQor
ICAgICAgICA6IEJhc2Uodm0sIGdsb2JhbE9iamVjdCwgc3RydWN0dXJlKQorICAgIHsgfQorICAg
IHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKKworICAg
IFdyaXRlQmFycmllcjxXZWJBc3NlbWJseUZ1bmN0aW9uPiBtX2Z1bmN0aW9uOworfTsKKwogY2xh
c3MgV2ViQXNzZW1ibHlGdW5jdGlvbiBmaW5hbCA6IHB1YmxpYyBXZWJBc3NlbWJseUZ1bmN0aW9u
QmFzZSB7CiBwdWJsaWM6CiAgICAgdXNpbmcgQmFzZSA9IFdlYkFzc2VtYmx5RnVuY3Rpb25CYXNl
OwpAQCAtNzQsMTQgKzk1LDMwIEBAIHB1YmxpYzoKIAogICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zm
c2V0T2ZFbnRyeXBvaW50TG9hZExvY2F0aW9uKCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKFdl
YkFzc2VtYmx5RnVuY3Rpb24sIG1faW1wb3J0YWJsZUZ1bmN0aW9uKSArIFdhc21Ub1dhc21JbXBv
cnRhYmxlRnVuY3Rpb246Om9mZnNldE9mRW50cnlwb2ludExvYWRMb2NhdGlvbigpOyB9CiAKKyAg
ICBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8SlNFbnRyeVB0clRhZz4ganNDYWxsRW50cnlwb2ludCgp
CisgICAgeworICAgICAgICBpZiAobV9qc0NhbGxFbnRyeXBvaW50KQorICAgICAgICAgICAgcmV0
dXJuIG1fanNDYWxsRW50cnlwb2ludC5jb2RlKCk7CisgICAgICAgIHJldHVybiBqc0NhbGxFbnRy
eXBvaW50U2xvdygpOworICAgIH0KKworICAgIFJlZ2lzdGVyQXRPZmZzZXRMaXN0IHVzZWRDYWxs
ZWVTYXZlUmVnaXN0ZXJzKCkgY29uc3Q7CisgICAgV2FzbTo6SW5zdGFuY2UqIHByZXZpb3VzSW5z
dGFuY2UoQ2FsbEZyYW1lKik7CisKIHByaXZhdGU6CisgICAgc3RhdGljIHZvaWQgdmlzaXRDaGls
ZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOwogICAgIFdlYkFzc2VtYmx5RnVuY3Rpb24oVk0m
LCBKU0dsb2JhbE9iamVjdCosIFN0cnVjdHVyZSosIFdhc206OkNhbGxlZSYganNFbnRyeXBvaW50
LCBXYXNtVG9XYXNtSW1wb3J0YWJsZUZ1bmN0aW9uOjpMb2FkTG9jYXRpb24gZW50cnlwb2ludExv
YWRMb2NhdGlvbiwgV2FzbTo6U2lnbmF0dXJlSW5kZXgpOwogCisgICAgTWFjcm9Bc3NlbWJsZXJD
b2RlUHRyPEpTRW50cnlQdHJUYWc+IGpzQ2FsbEVudHJ5cG9pbnRTbG93KCk7CisgICAgcHRyZGlm
Zl90IHByZXZpb3VzSW5zdGFuY2VPZmZzZXQoKSBjb25zdDsKKwogICAgIC8vIEl0J3Mgc2FmZSB0
byBqdXN0IGhvbGQgdGhlIHJhdyBXYXNtVG9XYXNtSW1wb3J0YWJsZUZ1bmN0aW9uL2pzRW50cnlw
b2ludCBiZWNhdXNlIHdlIGhhdmUgYSByZWZlcmVuY2UKICAgICAvLyB0byBvdXIgSW5zdGFuY2Us
IHdoaWNoIHBvaW50cyB0byB0aGUgTW9kdWxlIHRoYXQgZXhwb3J0ZWQgdXMsIHdoaWNoCiAgICAg
Ly8gZW5zdXJlcyB0aGF0IHRoZSBhY3R1YWwgU2lnbmF0dXJlL2NvZGUgZG9lc24ndCBnZXQgZGVh
bGxvY2F0ZWQuCiAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPFdhc21FbnRyeVB0clRhZz4gbV9q
c0VudHJ5cG9pbnQ7CisgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpTRW50cnlQdHJUYWc+IG1f
anNDYWxsRW50cnlwb2ludDsKICAgICBXYXNtVG9XYXNtSW1wb3J0YWJsZUZ1bmN0aW9uIG1faW1w
b3J0YWJsZUZ1bmN0aW9uOworICAgIFdyaXRlQmFycmllcjxKU1RvV2FzbUlDQ2FsbGVlPiBtX2pz
VG9XYXNtSUNDYWxsZWU7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBKU0MK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>366532</attachid>
            <date>2019-04-02 13:42:55 -0700</date>
            <delta_ts>2019-04-02 14:49:30 -0700</delta_ts>
            <desc>WIP</desc>
            <filename>b-backup.diff</filename>
            <type>text/plain</type>
            <size>36612</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFBlcmZvcm1hbmNlVGVzdHMvSmV0U3RyZWFtMi9KZXRTdHJlYW1Ecml2ZXIuanMKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gUGVyZm9ybWFuY2VUZXN0cy9KZXRTdHJlYW0yL0pldFN0cmVhbURyaXZlci5q
cwkocmV2aXNpb24gMjQzNjM1KQorKysgUGVyZm9ybWFuY2VUZXN0cy9KZXRTdHJlYW0yL0pldFN0
cmVhbURyaXZlci5qcwkod29ya2luZyBjb3B5KQpAQCAtNzkzLDExICs3OTMsMTEgQEAgY2xhc3Mg
V2FzbUJlbmNobWFyayBleHRlbmRzIEJlbmNobWFyayB7CiAgICAgICAgICAgICAgICAgICAgIGNv
bnNvbGUubG9nKCdJbnRlcmNlcHRlZCBxdWl0L2Fib3J0Jyk7CiAgICAgICAgICAgICB9OwogCi0g
ICAgICAgICAgICBvbGRQcmludCA9IGdsb2JhbE9iamVjdC5wcmludDsKLSAgICAgICAgICAgIGds
b2JhbE9iamVjdC5wcmludCA9IGdsb2JhbE9iamVjdC5wcmludEVyciA9ICguLi5hcmdzKSA9PiB7
Ci0gICAgICAgICAgICAgICAgaWYgKHZlcmJvc2UpCi0gICAgICAgICAgICAgICAgICAgIGNvbnNv
bGUubG9nKCdJbnRlcmNlcHRlZCBwcmludDogJywgLi4uYXJncyk7Ci0gICAgICAgICAgICB9Owor
ICAgICAgICAgICAgLy9vbGRQcmludCA9IGdsb2JhbE9iamVjdC5wcmludDsKKyAgICAgICAgICAg
IC8vZ2xvYmFsT2JqZWN0LnByaW50ID0gZ2xvYmFsT2JqZWN0LnByaW50RXJyID0gKC4uLmFyZ3Mp
ID0+IHsKKyAgICAgICAgICAgIC8vICAgIGlmICh2ZXJib3NlKQorICAgICAgICAgICAgLy8gICAg
ICAgIGNvbnNvbGUubG9nKCdJbnRlcmNlcHRlZCBwcmludDogJywgLi4uYXJncyk7CisgICAgICAg
ICAgICAvL307CiAKICAgICAgICAgICAgIGxldCBNb2R1bGUgPSB7CiAgICAgICAgICAgICAgICAg
cHJlUnVuOiBbXSwKSW5kZXg6IFBlcmZvcm1hbmNlVGVzdHMvSmV0U3RyZWFtMi9jbGkuanMKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gUGVyZm9ybWFuY2VUZXN0cy9KZXRTdHJlYW0yL2NsaS5qcwkocmV2aXNpb24g
MjQzNjM1KQorKysgUGVyZm9ybWFuY2VUZXN0cy9KZXRTdHJlYW0yL2NsaS5qcwkod29ya2luZyBj
b3B5KQpAQCAtMjgsNiArMjgsOCBAQCBjb25zb2xlID0gewogICAgIGxvZzogcHJpbnQKIH0KIAor
dGVzdExpc3QgPSBbInJpY2hhcmRzLXdhc20iXTsKKwogaWYgKHR5cGVvZiB0ZXN0TGlzdCA9PT0g
InVuZGVmaW5lZCIpCiAgICAgdGVzdExpc3QgPSB1bmRlZmluZWQ7CiAKSW5kZXg6IFBlcmZvcm1h
bmNlVGVzdHMvSmV0U3RyZWFtMi93YXNtL3JpY2hhcmRzLmpzCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFBlcmZv
cm1hbmNlVGVzdHMvSmV0U3RyZWFtMi93YXNtL3JpY2hhcmRzLmpzCShyZXZpc2lvbiAyNDM2MzUp
CisrKyBQZXJmb3JtYW5jZVRlc3RzL0pldFN0cmVhbTIvd2FzbS9yaWNoYXJkcy5qcwkod29ya2lu
ZyBjb3B5KQpAQCAtOTQ2LDcgKzk0Niw4IEBAIHZhciBfbWVtc2V0ID0gTW9kdWxlWyJfbWVtc2V0
Il0gPSAoZnVuY3QKIHZhciBfc2JyayA9IE1vZHVsZVsiX3NicmsiXSA9IChmdW5jdGlvbigpIHsK
ICByZXR1cm4gTW9kdWxlWyJhc20iXVsiX3NicmsiXS5hcHBseShudWxsLCBhcmd1bWVudHMpOwog
fSk7Ci12YXIgX3NjaGVkdWxlSXRlciA9IE1vZHVsZVsiX3NjaGVkdWxlSXRlciJdID0gKGZ1bmN0
aW9uKCkgewordmFyIF9zY2hlZHVsZUl0ZXIgPSBNb2R1bGVbIl9zY2hlZHVsZUl0ZXIiXSA9IChm
dW5jdGlvbiBmb29CYXJCYXooKSB7CisgLy9yZXR1cm4gTW9kdWxlWyJhc20iXVsiX3NjaGVkdWxl
SXRlciJdKCk7CiAgcmV0dXJuIE1vZHVsZVsiYXNtIl1bIl9zY2hlZHVsZUl0ZXIiXS5hcHBseShu
dWxsLCBhcmd1bWVudHMpOwogfSk7CiB2YXIgX3NldHVwID0gTW9kdWxlWyJfc2V0dXAiXSA9IChm
dW5jdGlvbigpIHsKQEAgLTExMDYsOCArMTEwNyw5IEBAIGZ1bmN0aW9uIHJ1blJpY2hhcmRzKCkg
ewogICAgIGZvciAobGV0IGkgPSAwOyBpIDwgNDsgKytpKSB7CiAgICAgICAgIE1vZHVsZS5fc2V0
dXAoKTsKICAgICAgICAgd2hpbGUgKHNjaGVkdWxlSXRlcigpKSB7IH0KLSAgICAgICAgaWYgKE1v
ZHVsZS5fZ2V0UXBrdGNvdW50KCkgIT09IDIzMjY0MTAgfHwgTW9kdWxlLl9nZXRIb2xkY291bnQo
KSAhPT0gOTMwNTYzKQorICAgICAgICBpZiAoTW9kdWxlLl9nZXRRcGt0Y291bnQoKSAhPT0gMjMy
NjQxMCB8fCBNb2R1bGUuX2dldEhvbGRjb3VudCgpICE9PSA5MzA1NjMpIHsKKyAgICAgICAgICAg
IHByaW50KCJCYWQgcmVzdWx0OiAiLCBNb2R1bGUuX2dldFFwa3Rjb3VudCgpLCAiICIsIE1vZHVs
ZS5fZ2V0SG9sZGNvdW50KCkpOwogICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJCYWQgcmlj
aGFyZHMgcmVzdWx0ISIpOworICAgICAgICB9CiAgICAgfQogfQotCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyQ29kZVJlZi5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJDb2RlUmVm
LmgJKHJldmlzaW9uIDI0MzYzNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIv
TWFjcm9Bc3NlbWJsZXJDb2RlUmVmLmgJKHdvcmtpbmcgY29weSkKQEAgLTM4MCw2ICszODAsMTQg
QEAgcHVibGljOgogICAgICAgICBBU1NFUlQobV9leGVjdXRhYmxlTWVtb3J5LT5zdGFydCgpKTsK
ICAgICAgICAgQVNTRVJUKG1fY29kZVB0cik7CiAgICAgfQorCisgICAgdGVtcGxhdGU8UHRyVGFn
IG90aGVyVGFnPgorICAgIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiYgb3BlcmF0b3I9KGNvbnN0IE1h
Y3JvQXNzZW1ibGVyQ29kZVJlZjxvdGhlclRhZz4mIG90aGVyQ29kZVJlZikKKyAgICB7CisgICAg
ICAgIG1fY29kZVB0ciA9IE1hY3JvQXNzZW1ibGVyQ29kZVB0cjx0YWc+OjpjcmVhdGVGcm9tRXhl
Y3V0YWJsZUFkZHJlc3Mob3RoZXJDb2RlUmVmLmNvZGUoKS50ZW1wbGF0ZSByZXRhZ2dlZEV4ZWN1
dGFibGVBZGRyZXNzPHRhZz4oKSk7CisgICAgICAgIG1fZXhlY3V0YWJsZU1lbW9yeSA9IG90aGVy
Q29kZVJlZi5tX2V4ZWN1dGFibGVNZW1vcnk7CisgICAgICAgIHJldHVybiAqdGhpczsKKyAgICB9
CiAgICAgCiAgICAgLy8gVXNlIHRoaXMgb25seSB3aGVuIHlvdSBrbm93IHRoYXQgdGhlIGNvZGVQ
dHIgcmVmZXJzIHRvIGNvZGUgdGhhdCBpcwogICAgIC8vIGFscmVhZHkgYmVpbmcga2VwdCBhbGl2
ZSB0aHJvdWdoIHNvbWUgb3RoZXIgbWVhbnMuIFR5cGljYWxseSB0aGlzIG1lYW5zCkBAIC00NDMs
OSArNDUxLDkgQEAgcHVibGljOgogcHJpdmF0ZToKICAgICB0ZW1wbGF0ZTxQdHJUYWcgb3RoZXJU
YWc+CiAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmKGNvbnN0IE1hY3JvQXNzZW1ibGVyQ29kZVJl
ZjxvdGhlclRhZz4mIG90aGVyQ29kZVJlZikKLSAgICAgICAgOiBtX2NvZGVQdHIoTWFjcm9Bc3Nl
bWJsZXJDb2RlUHRyPHRhZz46OmNyZWF0ZUZyb21FeGVjdXRhYmxlQWRkcmVzcyhvdGhlckNvZGVS
ZWYuY29kZSgpLnRlbXBsYXRlIHJldGFnZ2VkRXhlY3V0YWJsZUFkZHJlc3M8dGFnPigpKSkKLSAg
ICAgICAgLCBtX2V4ZWN1dGFibGVNZW1vcnkob3RoZXJDb2RlUmVmLm1fZXhlY3V0YWJsZU1lbW9y
eSkKLSAgICB7IH0KKyAgICB7CisgICAgICAgICp0aGlzID0gb3RoZXJDb2RlUmVmOworICAgIH0K
IAogICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0cjx0YWc+IG1fY29kZVB0cjsKICAgICBSZWZQdHI8
RXhlY3V0YWJsZU1lbW9yeUhhbmRsZT4gbV9leGVjdXRhYmxlTWVtb3J5OwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHAJKHJldmlzaW9u
IDI0MzYzNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNzM2LDYgKzE3MzYsMTUgQEAgQnl0ZUNvZGVQYXJzZXI6
OkNhbGxPcHRpbWl6YXRpb25SZXN1bHQgQgogICAgICAgICB9CiAgICAgfTsKIAorICAgIC8qCisg
ICAgaWYgKE5hdGl2ZUV4ZWN1dGFibGUqIGV4ZWN1dGFibGUgPSBjYWxsZWUubmF0aXZlRXhlY3V0
YWJsZSgpKSB7CisgICAgICAgIGRhdGFMb2dMbigiTmF0aXZlIGV4ZWN1dGFibGVyIDogIiwgUmF3
UG9pbnRlcihleGVjdXRhYmxlKSk7CisgICAgICAgIGlmIChXZWJBc3NlbWJseUZ1bmN0aW9uKiBm
ID0gZXhlY3V0YWJsZS0+d2ViQXNzZW1ibHlGdW5jdGlvbigpKSB7CisgICAgICAgICAgICBkYXRh
TG9nTG4oIkhhdmUgd2FzbSBmdW5jdGlvbiE6ICIsIFJhd1BvaW50ZXIoZikpOworICAgICAgICB9
CisgICAgfQorICAgICovCisKICAgICBpZiAoSW50ZXJuYWxGdW5jdGlvbiogZnVuY3Rpb24gPSBj
YWxsZWUuaW50ZXJuYWxGdW5jdGlvbigpKSB7CiAgICAgICAgIGlmIChoYW5kbGVDb25zdGFudElu
dGVybmFsRnVuY3Rpb24oY2FsbFRhcmdldE5vZGUsIHJlc3VsdCwgZnVuY3Rpb24sIHJlZ2lzdGVy
T2Zmc2V0LCBhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcywgc3BlY2lhbGl6YXRpb25LaW5kLCBw
cmVkaWN0aW9uLCBpbnNlcnRDaGVja3NXaXRoQWNjb3VudGluZykpIHsKICAgICAgICAgICAgIGVu
ZFNwZWNpYWxDYXNlKCk7CkBAIC0xODAwLDYgKzE4MDksMTQgQEAgYm9vbCBCeXRlQ29kZVBhcnNl
cjo6aGFuZGxlVmFyYXJnc0lubGluaQogICAgICAgICBtYW5kYXRvcnlNaW5pbXVtID0gZnVuY3Rp
b25FeGVjdXRhYmxlLT5wYXJhbWV0ZXJDb3VudCgpOwogICAgIGVsc2UKICAgICAgICAgbWFuZGF0
b3J5TWluaW11bSA9IDA7CisKKyAgICAvKgorICAgIGlmIChOYXRpdmVFeGVjdXRhYmxlKiBleGVj
dXRhYmxlID0gY2FsbFZhcmlhbnQubmF0aXZlRXhlY3V0YWJsZSgpKSB7CisgICAgICAgIGlmIChX
ZWJBc3NlbWJseUZ1bmN0aW9uKiBmID0gZXhlY3V0YWJsZS0+d2ViQXNzZW1ibHlGdW5jdGlvbigp
KSB7CisgICAgICAgICAgICBkYXRhTG9nTG4oIkhhdmUgd2FzbSBmdW5jdGlvbiB2YXJhcmdzOiAi
LCBSYXdQb2ludGVyKGYpKTsKKyAgICAgICAgfQorICAgIH0KKyAgICAqLwogICAgIAogICAgIC8v
IGluY2x1ZGVzICJ0aGlzIgogICAgIHVuc2lnbmVkIG1heE51bUFyZ3VtZW50cyA9IHN0ZDo6bWF4
KGNhbGxMaW5rU3RhdHVzLm1heE51bUFyZ3VtZW50cygpLCBtYW5kYXRvcnlNaW5pbXVtICsgMSk7
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1N0cmVuZ3RoUmVkdWN0aW9uUGhh
c2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3RyZW5n
dGhSZWR1Y3Rpb25QaGFzZS5jcHAJKHJldmlzaW9uIDI0MzYzNSkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHU3RyZW5ndGhSZWR1Y3Rpb25QaGFzZS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTM5LDYgKzM5LDcgQEAKICNpbmNsdWRlICJNYXRoQ29tbW9uLmgiCiAjaW5jbHVkZSAiUmVn
RXhwT2JqZWN0LmgiCiAjaW5jbHVkZSAiU3RyaW5nUHJvdG90eXBlLmgiCisjaW5jbHVkZSAiV2Vi
QXNzZW1ibHlGdW5jdGlvbi5oIgogI2luY2x1ZGUgPGNzdGRsaWI+CiAjaW5jbHVkZSA8d3RmL3Rl
eHQvU3RyaW5nQnVpbGRlci5oPgogCkBAIC05MTYsNiArOTE3LDkgQEAgcHJpdmF0ZToKICAgICAg
ICAgICAgIEVkZ2UgY2FsbGVlID0gbV9ncmFwaC52YXJBcmdDaGlsZChtX25vZGUsIDApOwogICAg
ICAgICAgICAgQ2FsbFZhcmlhbnQgY2FsbFZhcmlhbnQ7CiAgICAgICAgICAgICBpZiAoSlNGdW5j
dGlvbiogZnVuY3Rpb24gPSBjYWxsZWUtPmR5bmFtaWNDYXN0Q29uc3RhbnQ8SlNGdW5jdGlvbio+
KHZtKCkpKSB7CisgICAgICAgICAgICAgICAgaWYgKGpzRHluYW1pY0Nhc3Q8V2ViQXNzZW1ibHlG
dW5jdGlvbkJhc2UqPih2bSgpLCBmdW5jdGlvbikpCisgICAgICAgICAgICAgICAgICAgIGRhdGFM
b2dMbigiV2FzbSBkaXJlY3QgY2FsbCEiKTsKKwogICAgICAgICAgICAgICAgIGV4ZWN1dGFibGUg
PSBmdW5jdGlvbi0+ZXhlY3V0YWJsZSgpOwogICAgICAgICAgICAgICAgIGNhbGxWYXJpYW50ID0g
Q2FsbFZhcmlhbnQoZnVuY3Rpb24pOwogICAgICAgICAgICAgfSBlbHNlIGlmIChjYWxsZWUtPmlz
RnVuY3Rpb25BbGxvY2F0aW9uKCkpIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRl
cnByZXRlci9JbnRlcnByZXRlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2ludGVycHJldGVyL0ludGVycHJldGVyLmNwcAkocmV2aXNpb24gMjQzNjM1KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0ludGVycHJldGVyLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtNTQ5LDYgKzU0OSwxMyBAQCBwdWJsaWM6CiAgICAgICAgICAgICB9CiAgICAgICAg
IH0KIAorICAgICAgICBpZiAodmlzaXRvci0+Y2FsbGVlKCkuaXNDZWxsKCkpIHsKKyAgICAgICAg
ICAgIGlmIChhdXRvKiBpY0NhbGxlZSA9IGpzRHluYW1pY0Nhc3Q8SlNUb1dhc21JQ0NhbGxlZSo+
KG1fdm0sIHZpc2l0b3ItPmNhbGxlZSgpLmFzQ2VsbCgpKSkgeworICAgICAgICAgICAgICAgIC8v
ZGF0YUxvZ0xuKCJVbndpbmRpbmcgcGFzdCBjZnI9IiwgUmF3UG9pbnRlcihtX2NhbGxGcmFtZSks
ICIgcHJpb3IgaW5zdGFuY2UgPSAiLCBSYXdQb2ludGVyKGljQ2FsbGVlLT5mdW5jdGlvbigpLT5w
cmV2aW91c0luc3RhbmNlKG1fY2FsbEZyYW1lKSkpOworICAgICAgICAgICAgICAgIG1fdm0ud2Fz
bUNvbnRleHQuc3RvcmUoaWNDYWxsZWUtPmZ1bmN0aW9uKCktPnByZXZpb3VzSW5zdGFuY2UobV9j
YWxsRnJhbWUpLCBtX3ZtLnNvZnRTdGFja0xpbWl0KCkpOworICAgICAgICAgICAgfQorICAgICAg
ICB9CisKICAgICAgICAgbm90aWZ5RGVidWdnZXJPZlVud2luZGluZyhtX3ZtLCBtX2NhbGxGcmFt
ZSk7CiAKICAgICAgICAgY29weUNhbGxlZVNhdmVzVG9FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNCdWZm
ZXIodmlzaXRvcik7CkBAIC01NjQsNyArNTcxLDcgQEAgcHJpdmF0ZToKICAgICB2b2lkIGNvcHlD
YWxsZWVTYXZlc1RvRW50cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVyKFN0YWNrVmlzaXRvciYgdmlz
aXRvcikgY29uc3QKICAgICB7CiAjaWYgIUVOQUJMRShDX0xPT1ApICYmIE5VTUJFUl9PRl9DQUxM
RUVfU0FWRVNfUkVHSVNURVJTID4gMAotICAgICAgICBjb25zdCBSZWdpc3RlckF0T2Zmc2V0TGlz
dCogY3VycmVudENhbGxlZVNhdmVzID0gdmlzaXRvci0+Y2FsbGVlU2F2ZVJlZ2lzdGVycygpOwor
ICAgICAgICBPcHRpb25hbDxSZWdpc3RlckF0T2Zmc2V0TGlzdD4gY3VycmVudENhbGxlZVNhdmVz
ID0gdmlzaXRvci0+Y2FsbGVlU2F2ZVJlZ2lzdGVyc0ZvclVud2luZGluZygpOwogCiAgICAgICAg
IGlmICghY3VycmVudENhbGxlZVNhdmVzKQogICAgICAgICAgICAgcmV0dXJuOwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL1N0YWNrVmlzaXRvci5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL1N0YWNrVmlzaXRvci5jcHAJ
KHJldmlzaW9uIDI0MzYzNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9T
dGFja1Zpc2l0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMyw2ICszMyw3IEBACiAjaW5jbHVk
ZSAiSlNDSW5saW5lcy5oIgogI2luY2x1ZGUgIldhc21DYWxsZWUuaCIKICNpbmNsdWRlICJXYXNt
SW5kZXhPck5hbWUuaCIKKyNpbmNsdWRlICJXZWJBc3NlbWJseUZ1bmN0aW9uLmgiCiAjaW5jbHVk
ZSA8d3RmL3RleHQvU3RyaW5nQnVpbGRlci5oPgogCiBuYW1lc3BhY2UgSlNDIHsKQEAgLTI1Miwx
MCArMjUzLDEwIEBAIFN0YWNrVmlzaXRvcjo6RnJhbWU6OkNvZGVUeXBlIFN0YWNrVmlzaXQKICAg
ICByZXR1cm4gQ29kZVR5cGU6Okdsb2JhbDsKIH0KIAotY29uc3QgUmVnaXN0ZXJBdE9mZnNldExp
c3QqIFN0YWNrVmlzaXRvcjo6RnJhbWU6OmNhbGxlZVNhdmVSZWdpc3RlcnMoKQorT3B0aW9uYWw8
UmVnaXN0ZXJBdE9mZnNldExpc3Q+IFN0YWNrVmlzaXRvcjo6RnJhbWU6OmNhbGxlZVNhdmVSZWdp
c3RlcnNGb3JVbndpbmRpbmcoKQogewogICAgIGlmIChpc0lubGluZWRGcmFtZSgpKQotICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIAogI2lmICFF
TkFCTEUoQ19MT09QKSAmJiBOVU1CRVJfT0ZfQ0FMTEVFX1NBVkVTX1JFR0lTVEVSUyA+IDAKIApA
QCAtMjYzLDE5ICsyNjQsMjQgQEAgY29uc3QgUmVnaXN0ZXJBdE9mZnNldExpc3QqIFN0YWNrVmlz
aXRvcgogICAgIGlmIChpc1dhc21GcmFtZSgpKSB7CiAgICAgICAgIGlmIChjYWxsZWUoKS5pc0Nl
bGwoKSkgewogICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoaXNXZWJBc3NlbWJseVRvSlNDYWxs
ZWUoY2FsbGVlKCkuYXNDZWxsKCkpKTsKLSAgICAgICAgICAgIHJldHVybiBudWxscHRyOworICAg
ICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKICAgICAgICAgfQogICAgICAgICBXYXNtOjpD
YWxsZWUqIHdhc21DYWxsZWUgPSBjYWxsZWUoKS5hc1dhc21DYWxsZWUoKTsKLSAgICAgICAgcmV0
dXJuIHdhc21DYWxsZWUtPmNhbGxlZVNhdmVSZWdpc3RlcnMoKTsKKyAgICAgICAgcmV0dXJuICp3
YXNtQ2FsbGVlLT5jYWxsZWVTYXZlUmVnaXN0ZXJzKCk7CisgICAgfQorCisgICAgaWYgKGNhbGxl
ZSgpLmlzQ2VsbCgpKSB7CisgICAgICAgIGlmIChhdXRvKiBpY0NhbGxlZSA9IGpzRHluYW1pY0Nh
c3Q8SlNUb1dhc21JQ0NhbGxlZSo+KCpjYWxsZWUoKS5hc0NlbGwoKS0+dm0oKSwgY2FsbGVlKCku
YXNDZWxsKCkpKQorICAgICAgICAgICAgcmV0dXJuIGljQ2FsbGVlLT5mdW5jdGlvbigpLT51c2Vk
Q2FsbGVlU2F2ZVJlZ2lzdGVycygpOwogICAgIH0KICNlbmRpZiAvLyBFTkFCTEUoV0VCQVNTRU1C
TFkpCiAKICAgICBpZiAoQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSB0aGlzLT5jb2RlQmxvY2soKSkK
LSAgICAgICAgcmV0dXJuIGNvZGVCbG9jay0+Y2FsbGVlU2F2ZVJlZ2lzdGVycygpOworICAgICAg
ICByZXR1cm4gKmNvZGVCbG9jay0+Y2FsbGVlU2F2ZVJlZ2lzdGVycygpOwogCiAjZW5kaWYgLy8g
IUVOQUJMRShDX0xPT1ApICYmIE5VTUJFUl9PRl9DQUxMRUVfU0FWRVNfUkVHSVNURVJTID4gMAog
Ci0gICAgcmV0dXJuIG51bGxwdHI7CisgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIH0KIAogU3Ry
aW5nIFN0YWNrVmlzaXRvcjo6RnJhbWU6OmZ1bmN0aW9uTmFtZSgpIGNvbnN0CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvU3RhY2tWaXNpdG9yLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL1N0YWNrVmlzaXRvci5oCShyZXZp
c2lvbiAyNDM2MzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvU3RhY2tW
aXNpdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTk0LDcgKzk0LDcgQEAgcHVibGljOgogICAgICAg
ICBib29sIGhhc0xpbmVBbmRDb2x1bW5JbmZvKCkgY29uc3Q7CiAgICAgICAgIEpTX0VYUE9SVF9Q
UklWQVRFIHZvaWQgY29tcHV0ZUxpbmVBbmRDb2x1bW4odW5zaWduZWQmIGxpbmUsIHVuc2lnbmVk
JiBjb2x1bW4pIGNvbnN0OwogCi0gICAgICAgIGNvbnN0IFJlZ2lzdGVyQXRPZmZzZXRMaXN0KiBj
YWxsZWVTYXZlUmVnaXN0ZXJzKCk7CisgICAgICAgIE9wdGlvbmFsPFJlZ2lzdGVyQXRPZmZzZXRM
aXN0PiBjYWxsZWVTYXZlUmVnaXN0ZXJzRm9yVW53aW5kaW5nKCk7CiAKICAgICAgICAgQ2xvbmVk
QXJndW1lbnRzKiBjcmVhdGVBcmd1bWVudHMoKTsKICAgICAgICAgQ2FsbEZyYW1lKiBjYWxsRnJh
bWUoKSBjb25zdCB7IHJldHVybiBtX2NhbGxGcmFtZTsgfQpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9KSVRPcGVyYXRpb25zLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L0pJVE9wZXJhdGlvbnMuY3BwCShyZXZpc2lvbiAyNDM2MzUpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wZXJhdGlvbnMuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC03Niw2ICs3Niw3IEBACiAjaW5jbHVkZSAiVGh1bmtHZW5lcmF0b3JzLmgiCiAjaW5jbHVkZSAi
VHlwZVByb2ZpbGVyTG9nLmgiCiAjaW5jbHVkZSAiVk1JbmxpbmVzLmgiCisjaW5jbHVkZSAiV2Vi
QXNzZW1ibHlGdW5jdGlvbi5oIgogI2luY2x1ZGUgPHd0Zi9JbmxpbmVBU00uaD4KIAogbmFtZXNw
YWNlIEpTQyB7CkBAIC0xMDM2LDkgKzEwMzcsMTkgQEAgU2xvd1BhdGhSZXR1cm5UeXBlIEpJVF9P
UEVSQVRJT04gb3BlcmF0aQogCiAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPEpTRW50cnlQdHJU
YWc+IGNvZGVQdHI7CiAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBudWxscHRyOwotICAgIGlm
IChleGVjdXRhYmxlLT5pc0hvc3RGdW5jdGlvbigpKQotICAgICAgICBjb2RlUHRyID0gZXhlY3V0
YWJsZS0+ZW50cnlwb2ludEZvcihraW5kLCBNdXN0Q2hlY2tBcml0eSk7Ci0gICAgZWxzZSB7Cisg
ICAgaWYgKGV4ZWN1dGFibGUtPmlzSG9zdEZ1bmN0aW9uKCkpIHsKKyNpZiBFTkFCTEUoV0VCQVNT
RU1CTFkpCisgICAgICAgIGlmIChraW5kID09IENvZGVGb3JDYWxsKSB7CisgICAgICAgICAgICBp
ZiAoYXV0byogd2FzbUZ1bmN0aW9uID0ganNEeW5hbWljQ2FzdDxXZWJBc3NlbWJseUZ1bmN0aW9u
Kj4oKnZtLCBjYWxsZWUpKSB7CisgICAgICAgICAgICAgICAgY29kZVB0ciA9IHdhc21GdW5jdGlv
bi0+anNDYWxsRW50cnlwb2ludCgpOworICAgICAgICAgICAgICAgIC8vZGF0YUxvZ0xuKCJJQ2lu
ZyB3YXNtISIpOworICAgICAgICAgICAgfQorICAgICAgICB9CisjZW5kaWYKKworICAgICAgICBp
ZiAoIWNvZGVQdHIpCisgICAgICAgICAgICBjb2RlUHRyID0gZXhlY3V0YWJsZS0+ZW50cnlwb2lu
dEZvcihraW5kLCBNdXN0Q2hlY2tBcml0eSk7CisgICAgfSBlbHNlIHsKICAgICAgICAgRnVuY3Rp
b25FeGVjdXRhYmxlKiBmdW5jdGlvbkV4ZWN1dGFibGUgPSBzdGF0aWNfY2FzdDxGdW5jdGlvbkV4
ZWN1dGFibGUqPihleGVjdXRhYmxlKTsKIAogICAgICAgICBhdXRvIGhhbmRsZVRocm93RXhjZXB0
aW9uID0gWyZdICgpIHsKQEAgLTEwNjQsNiArMTA3NSw3IEBAIFNsb3dQYXRoUmV0dXJuVHlwZSBK
SVRfT1BFUkFUSU9OIG9wZXJhdGkKICAgICAgICAgICAgIGFyaXR5ID0gQXJpdHlDaGVja05vdFJl
cXVpcmVkOwogICAgICAgICBjb2RlUHRyID0gZnVuY3Rpb25FeGVjdXRhYmxlLT5lbnRyeXBvaW50
Rm9yKGtpbmQsIGFyaXR5KTsKICAgICB9CisKICAgICBpZiAoIWNhbGxMaW5rSW5mby0+c2Vlbk9u
Y2UoKSkKICAgICAgICAgY2FsbExpbmtJbmZvLT5zZXRTZWVuKCk7CiAgICAgZWxzZQpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTmF0aXZlRXhlY3V0YWJsZS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTmF0aXZlRXhlY3V0YWJsZS5j
cHAJKHJldmlzaW9uIDI0MzYzNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL05h
dGl2ZUV4ZWN1dGFibGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNCw2ICszNCw3IEBACiAjaW5j
bHVkZSAiUGFyc2VyLmgiCiAjaW5jbHVkZSAiVHlwZVByb2ZpbGVyLmgiCiAjaW5jbHVkZSAiVk1J
bmxpbmVzLmgiCisjaW5jbHVkZSAiV2ViQXNzZW1ibHlGdW5jdGlvbi5oIgogI2luY2x1ZGUgPHd0
Zi9Db21tYVByaW50ZXIuaD4KIAogbmFtZXNwYWNlIEpTQyB7CkBAIC00Miw4ICs0Myw3IEBAIGNv
bnN0IENsYXNzSW5mbyBOYXRpdmVFeGVjdXRhYmxlOjpzX2luZm8KIAogTmF0aXZlRXhlY3V0YWJs
ZSogTmF0aXZlRXhlY3V0YWJsZTo6Y3JlYXRlKFZNJiB2bSwgUmVmPEpJVENvZGU+JiYgY2FsbFRo
dW5rLCBUYWdnZWROYXRpdmVGdW5jdGlvbiBmdW5jdGlvbiwgUmVmPEpJVENvZGU+JiYgY29uc3Ry
dWN0VGh1bmssIFRhZ2dlZE5hdGl2ZUZ1bmN0aW9uIGNvbnN0cnVjdG9yLCBjb25zdCBTdHJpbmcm
IG5hbWUpCiB7Ci0gICAgTmF0aXZlRXhlY3V0YWJsZSogZXhlY3V0YWJsZTsKLSAgICBleGVjdXRh
YmxlID0gbmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8TmF0aXZlRXhlY3V0YWJsZT4odm0uaGVh
cCkpIE5hdGl2ZUV4ZWN1dGFibGUodm0sIGZ1bmN0aW9uLCBjb25zdHJ1Y3Rvcik7CisgICAgTmF0
aXZlRXhlY3V0YWJsZSogZXhlY3V0YWJsZSA9IG5ldyAoTm90TnVsbCwgYWxsb2NhdGVDZWxsPE5h
dGl2ZUV4ZWN1dGFibGU+KHZtLmhlYXApKSBOYXRpdmVFeGVjdXRhYmxlKHZtLCBmdW5jdGlvbiwg
Y29uc3RydWN0b3IpOwogICAgIGV4ZWN1dGFibGUtPmZpbmlzaENyZWF0aW9uKHZtLCBXVEZNb3Zl
KGNhbGxUaHVuayksIFdURk1vdmUoY29uc3RydWN0VGh1bmspLCBuYW1lKTsKICAgICByZXR1cm4g
ZXhlY3V0YWJsZTsKIH0KQEAgLTgwLDYgKzgwLDE4IEBAIE5hdGl2ZUV4ZWN1dGFibGU6Ok5hdGl2
ZUV4ZWN1dGFibGUoVk0mIHYKIHsKIH0KIAordm9pZCBOYXRpdmVFeGVjdXRhYmxlOjp2aXNpdENo
aWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit7CisgICAgTmF0aXZl
RXhlY3V0YWJsZSogdGhpc09iamVjdCA9IGpzQ2FzdDxOYXRpdmVFeGVjdXRhYmxlKj4oY2VsbCk7
CisgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOworCisg
ICAgQmFzZTo6dmlzaXRDaGlsZHJlbih0aGlzT2JqZWN0LCB2aXNpdG9yKTsKKworI2lmIEVOQUJM
RShXRUJBU1NFTUJMWSkKKyAgICB2aXNpdG9yLmFwcGVuZCh0aGlzT2JqZWN0LT5tX3dlYkFzc2Vt
Ymx5RnVuY3Rpb24pOworI2VuZGlmCit9CisKIGNvbnN0IERPTUpJVDo6U2lnbmF0dXJlKiBOYXRp
dmVFeGVjdXRhYmxlOjpzaWduYXR1cmVGb3IoQ29kZVNwZWNpYWxpemF0aW9uS2luZCBraW5kKSBj
b25zdAogewogICAgIEFTU0VSVChoYXNKSVRDb2RlRm9yKGtpbmQpKTsKQEAgLTEwMCw0ICsxMTIs
NiBAQCBDb2RlQmxvY2tIYXNoIE5hdGl2ZUV4ZWN1dGFibGU6Omhhc2hGb3IoCiAgICAgcmV0dXJu
IENvZGVCbG9ja0hhc2goYml0d2lzZV9jYXN0PHVpbnRwdHJfdD4obV9jb25zdHJ1Y3RvcikpOwog
fQogCit2b2lkIE5hdGl2ZUV4ZWN1dGFibGU6OnNldFdlYkFzc2VtYmx5RnVuY3Rpb24oVk0mIHZt
LCBXZWJBc3NlbWJseUZ1bmN0aW9uKiBmdW5jdGlvbikgeyBtX3dlYkFzc2VtYmx5RnVuY3Rpb24u
c2V0KHZtLCB0aGlzLCBmdW5jdGlvbik7IH0KKwogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9OYXRpdmVFeGVjdXRhYmxlLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTmF0aXZlRXhlY3V0YWJsZS5oCShy
ZXZpc2lvbiAyNDM2MzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9OYXRpdmVF
eGVjdXRhYmxlLmgJKHdvcmtpbmcgY29weSkKQEAgLTI5LDYgKzI5LDEwIEBACiAKIG5hbWVzcGFj
ZSBKU0MgewogCisjaWYgRU5BQkxFKFdFQkFTU0VNQkxZKQorY2xhc3MgV2ViQXNzZW1ibHlGdW5j
dGlvbjsKKyNlbmRpZgorCiBjbGFzcyBOYXRpdmVFeGVjdXRhYmxlIGZpbmFsIDogcHVibGljIEV4
ZWN1dGFibGVCYXNlIHsKICAgICBmcmllbmQgY2xhc3MgSklUOwogICAgIGZyaWVuZCBjbGFzcyBM
TEludE9mZnNldHNFeHRyYWN0b3I7CkBAIC03NiwxNiArODAsMjcgQEAgcHVibGljOgogICAgIGNv
bnN0IERPTUpJVDo6U2lnbmF0dXJlKiBzaWduYXR1cmVGb3IoQ29kZVNwZWNpYWxpemF0aW9uS2lu
ZCkgY29uc3Q7CiAgICAgSW50cmluc2ljIGludHJpbnNpYygpIGNvbnN0OwogCisKKyNpZiBFTkFC
TEUoV0VCQVNTRU1CTFkpCisgICAgdm9pZCBzZXRXZWJBc3NlbWJseUZ1bmN0aW9uKFZNJiwgV2Vi
QXNzZW1ibHlGdW5jdGlvbiopOworICAgIFdlYkFzc2VtYmx5RnVuY3Rpb24qIHdlYkFzc2VtYmx5
RnVuY3Rpb24oKSB7IHJldHVybiBtX3dlYkFzc2VtYmx5RnVuY3Rpb24uZ2V0KCk7IH0KKyNlbmRp
ZgorCiBwcm90ZWN0ZWQ6CiAgICAgdm9pZCBmaW5pc2hDcmVhdGlvbihWTSYsIFJlZjxKSVRDb2Rl
PiYmIGNhbGxUaHVuaywgUmVmPEpJVENvZGU+JiYgY29uc3RydWN0VGh1bmssIGNvbnN0IFN0cmlu
ZyYgbmFtZSk7CiAKIHByaXZhdGU6CisgICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0Nl
bGwqLCBTbG90VmlzaXRvciYpOworCiAgICAgTmF0aXZlRXhlY3V0YWJsZShWTSYsIFRhZ2dlZE5h
dGl2ZUZ1bmN0aW9uLCBUYWdnZWROYXRpdmVGdW5jdGlvbiBjb25zdHJ1Y3Rvcik7CiAKICAgICBU
YWdnZWROYXRpdmVGdW5jdGlvbiBtX2Z1bmN0aW9uOwogICAgIFRhZ2dlZE5hdGl2ZUZ1bmN0aW9u
IG1fY29uc3RydWN0b3I7CiAKICAgICBTdHJpbmcgbV9uYW1lOworI2lmIEVOQUJMRShXRUJBU1NF
TUJMWSkKKyAgICBXcml0ZUJhcnJpZXI8V2ViQXNzZW1ibHlGdW5jdGlvbj4gbV93ZWJBc3NlbWJs
eUZ1bmN0aW9uOworI2VuZGlmCiB9OwogCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21PTUdQbGFuLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtT01HUGxhbi5jcHAJKHJldmlzaW9uIDI0MzYzNSkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21PTUdQbGFuLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMTM4LDcgKzEzOCw3IEBAIHZvaWQgT01HUGxhbjo6d29yayhDb21waWxhdGlvbkVm
Zm9ydCkKICAgICB7CiAgICAgICAgIExvY2tIb2xkZXIgaG9sZGVyKG1fY29kZUJsb2NrLT5tX2xv
Y2spOwogCi0gICAgICAgIGF1dG8gcmVwYXRjaENhbGxzID0gWyZdIChjb25zdCBWZWN0b3I8VW5s
aW5rZWRXYXNtVG9XYXNtQ2FsbD4mICBjYWxsc2l0ZXMpIHsKKyAgICAgICAgYXV0byByZXBhdGNo
Q2FsbHMgPSBbJl0gKGNvbnN0IFZlY3RvcjxVbmxpbmtlZFdhc21Ub1dhc21DYWxsPiYgY2FsbHNp
dGVzKSB7CiAgICAgICAgICAgICBmb3IgKGF1dG8mIGNhbGwgOiBjYWxsc2l0ZXMpIHsKICAgICAg
ICAgICAgICAgICBkYXRhTG9nTG5JZihXYXNtT01HUGxhbkludGVybmFsOjp2ZXJib3NlLCAiQ29u
c2lkZXJpbmcgcmVwYXRjaGluZyBjYWxsIGF0OiAiLCBSYXdQb2ludGVyKGNhbGwuY2FsbExvY2F0
aW9uLmRhdGFMb2NhdGlvbigpKSwgIiB0aGF0IHRhcmdldHMgIiwgY2FsbC5mdW5jdGlvbkluZGV4
U3BhY2UpOwogICAgICAgICAgICAgICAgIGlmIChjYWxsLmZ1bmN0aW9uSW5kZXhTcGFjZSA9PSBm
dW5jdGlvbkluZGV4U3BhY2UpIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pz
L1dlYkFzc2VtYmx5RXhlY3V0YWJsZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlFeGVjdXRhYmxlLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlGdW5jdGlvbi5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlG
dW5jdGlvbi5jcHAJKHJldmlzaW9uIDI0MzYzNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93
YXNtL2pzL1dlYkFzc2VtYmx5RnVuY3Rpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNiwyMyAr
MzYsNjQgQEAKICNpbmNsdWRlICJKU1dlYkFzc2VtYmx5TWVtb3J5LmgiCiAjaW5jbHVkZSAiSlNX
ZWJBc3NlbWJseVJ1bnRpbWVFcnJvci5oIgogI2luY2x1ZGUgIkxMSW50VGh1bmtzLmgiCisjaW5j
bHVkZSAiTGlua0J1ZmZlci5oIgogI2luY2x1ZGUgIlByb3RvQ2FsbEZyYW1lLmgiCiAjaW5jbHVk
ZSAiVk0uaCIKICNpbmNsdWRlICJXYXNtQ2FsbGVlLmgiCisjaW5jbHVkZSAiV2FzbUNhbGxpbmdD
b252ZW50aW9uLmgiCiAjaW5jbHVkZSAiV2FzbUNvbnRleHRJbmxpbmVzLmgiCiAjaW5jbHVkZSAi
V2FzbUZvcm1hdC5oIgogI2luY2x1ZGUgIldhc21NZW1vcnkuaCIKKyNpbmNsdWRlICJXYXNtTWVt
b3J5SW5mb3JtYXRpb24uaCIKKyNpbmNsdWRlICJXYXNtTW9kdWxlSW5mb3JtYXRpb24uaCIKICNp
bmNsdWRlICJXYXNtU2lnbmF0dXJlSW5saW5lcy5oIgogI2luY2x1ZGUgPHd0Zi9GYXN0VExTLmg+
CiAjaW5jbHVkZSA8d3RmL1N0YWNrUG9pbnRlci5oPgogI2luY2x1ZGUgPHd0Zi9TeXN0ZW1UcmFj
aW5nLmg+CiAKKyNpbmNsdWRlICJNYWNyb0Fzc2VtYmxlclByaW50ZXIuaCIKKyNpbmNsdWRlICJH
UFJJbmZvLmgiCisjaW5jbHVkZSAiRlBSSW5mby5oIgorI2luY2x1ZGUgIlJlZ2lzdGVySUQuaCIK
KyNpbmNsdWRlIDx3dGYvU2NvcGUuaD4KKwogbmFtZXNwYWNlIEpTQyB7CiAKK2NvbnN0IENsYXNz
SW5mbyBKU1RvV2FzbUlDQ2FsbGVlOjpzX2luZm8gPSB7ICJKU1RvV2FzbUlDQ2FsbGVlIiwgJkJh
c2U6OnNfaW5mbywgbnVsbHB0ciwgbnVsbHB0ciwgQ1JFQVRFX01FVEhPRF9UQUJMRShKU1RvV2Fz
bUlDQ2FsbGVlKSB9OworCitKU1RvV2FzbUlDQ2FsbGVlKiBKU1RvV2FzbUlDQ2FsbGVlOjpjcmVh
dGUoVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBXZWJBc3NlbWJseUZ1bmN0
aW9uKiBmdW5jdGlvbikKK3sKKyAgICBhdXRvKiBzdHJ1Y3R1cmUgPSBjcmVhdGVTdHJ1Y3R1cmUo
dm0sIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSgpKTsKKyAgICBKU1RvV2FzbUlDQ2FsbGVlKiByZXN1
bHQgPSBuZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxKU1RvV2FzbUlDQ2FsbGVlPih2bS5oZWFw
KSkgSlNUb1dhc21JQ0NhbGxlZSh2bSwgZ2xvYmFsT2JqZWN0LCBzdHJ1Y3R1cmUpOworICAgIHJl
c3VsdC0+ZmluaXNoQ3JlYXRpb24odm0pOworICAgIHJlc3VsdC0+bV9mdW5jdGlvbi5zZXQodm0s
IHJlc3VsdCwgZnVuY3Rpb24pOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK1N0cnVjdHVyZSog
SlNUb1dhc21JQ0NhbGxlZTo6Y3JlYXRlU3RydWN0dXJlKFZNJiB2bSwgSlNHbG9iYWxPYmplY3Qq
IGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBwcm90b3R5cGUpCit7CisgICAgcmV0dXJuIFN0cnVjdHVy
ZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgVHlwZUluZm8oSlNDYWxsZWVU
eXBlLCBTdHJ1Y3R1cmVGbGFncyksIGluZm8oKSk7Cit9CisKK3ZvaWQgSlNUb1dhc21JQ0NhbGxl
ZTo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQorewor
ICAgIEpTVG9XYXNtSUNDYWxsZWUqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNUb1dhc21JQ0NhbGxl
ZSo+KGNlbGwpOworICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5m
bygpKTsKKworICAgIEJhc2U6OnZpc2l0Q2hpbGRyZW4odGhpc09iamVjdCwgdmlzaXRvcik7Cisg
ICAgdmlzaXRvci5hcHBlbmQodGhpc09iamVjdC0+bV9mdW5jdGlvbik7Cit9CisKIGNvbnN0IENs
YXNzSW5mbyBXZWJBc3NlbWJseUZ1bmN0aW9uOjpzX2luZm8gPSB7ICJXZWJBc3NlbWJseUZ1bmN0
aW9uIiwgJkJhc2U6OnNfaW5mbywgbnVsbHB0ciwgbnVsbHB0ciwgQ1JFQVRFX01FVEhPRF9UQUJM
RShXZWJBc3NlbWJseUZ1bmN0aW9uKSB9OwogCiBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hP
U1RfQ0FMTCBjYWxsV2ViQXNzZW1ibHlGdW5jdGlvbihFeGVjU3RhdGUqIGV4ZWMpCiB7CisKKyAg
ICAvL2RhdGFMb2dMbigiY2FsbFdlYkFzc2VtYmx5RnVuY3Rpb24gc3RhcnQiKTsKKyAgICAvL2F1
dG8gb25FeGl0ID0gbWFrZVNjb3BlRXhpdChbJl0geworICAgIC8vICAgIGRhdGFMb2dMbigiY2Fs
bFdlYkFzc2VtYmx5RnVuY3Rpb24gZW5kIik7CisgICAgLy99KTsKKwogICAgIFZNJiB2bSA9IGV4
ZWMtPnZtKCk7CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAg
IFdlYkFzc2VtYmx5RnVuY3Rpb24qIHdhc21GdW5jdGlvbiA9IGpzQ2FzdDxXZWJBc3NlbWJseUZ1
bmN0aW9uKj4oZXhlYy0+anNDYWxsZWUoKSk7CkBAIC0xMTYsNiArMTU3LDEyIEBAIHN0YXRpYyBF
bmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNhbGwKIAogICAgIC8vIEZJWE1FIERvIGF3YXkg
d2l0aCB0aGlzIGVudGlyZSBmdW5jdGlvbiwgYW5kIG9ubHkgdXNlIHRoZSBlbnRyeXBvaW50IGdl
bmVyYXRlZCBieSBCMy4gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2
NjQ4NgogICAgIFdhc206Okluc3RhbmNlKiBwcmV2V2FzbUluc3RhbmNlID0gdm0ud2FzbUNvbnRl
eHQubG9hZCgpOworCisgICAgLy9zdGF0aWMgdWludDY0X3QgY2FsbHM7CisgICAgLy8rK2NhbGxz
OworICAgIC8vaWYgKGNhbGxzICUgMTAwMDAgPT0gMCkKKyAgICAvLyAgICBkYXRhTG9nTG4oIkNh
bGxzOiAiLCBjYWxscyk7CisKICAgICB7CiAgICAgICAgIC8vIFdlIGRvIHRoZSBzdGFjayBjaGVj
ayBoZXJlIGZvciB0aGUgd3JhcHBlciBmdW5jdGlvbiBiZWNhdXNlIHdlIGRvbid0CiAgICAgICAg
IC8vIHdhbnQgdG8gZW1pdCBhIHN0YWNrIGNoZWNrIGluc2lkZSBldmVyeSB3cmFwcGVyIGZ1bmN0
aW9uLgpAQCAtMTQ4LDExICsxOTUsMzAxIEBAIHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9T
VF9DQUxMIGNhbGwKICAgICByZXR1cm4gcmF3UmVzdWx0OwogfQogCitSZWdpc3RlckF0T2Zmc2V0
TGlzdCBXZWJBc3NlbWJseUZ1bmN0aW9uOjp1c2VkQ2FsbGVlU2F2ZVJlZ2lzdGVycygpIGNvbnN0
Cit7CisgICAgYXV0byBtZW1vcnlNb2RlID0gaW5zdGFuY2UoKS0+bWVtb3J5TW9kZSgpOworICAg
IGNvbnN0IGF1dG8mIHBpbm5lZFJlZ3MgPSBXYXNtOjpQaW5uZWRSZWdpc3RlckluZm86OmdldCgp
OworICAgIFJlZ2lzdGVyU2V0IHRvU2F2ZSA9IHBpbm5lZFJlZ3MudG9TYXZlKG1lbW9yeU1vZGUp
OworICAgIHJldHVybiBSZWdpc3RlckF0T2Zmc2V0TGlzdCB7IHRvU2F2ZSwgUmVnaXN0ZXJBdE9m
ZnNldExpc3Q6Ok9mZnNldEJhc2VUeXBlOjpGcmFtZVBvaW50ZXJCYXNlZCB9OworfQorCitwdHJk
aWZmX3QgV2ViQXNzZW1ibHlGdW5jdGlvbjo6cHJldmlvdXNJbnN0YW5jZU9mZnNldCgpIGNvbnN0
Cit7CisgICAgcHRyZGlmZl90IG1pbk9mZnNldCA9IDE7CisgICAgZm9yIChjb25zdCBSZWdpc3Rl
ckF0T2Zmc2V0JiByZWdBdE9mZnNldCA6IHVzZWRDYWxsZWVTYXZlUmVnaXN0ZXJzKCkpIHsKKyAg
ICAgICAgcHRyZGlmZl90IG9mZnNldCA9IHJlZ0F0T2Zmc2V0Lm9mZnNldCgpOworICAgICAgICBB
U1NFUlQob2Zmc2V0IDwgMCk7CisgICAgICAgIG1pbk9mZnNldCA9IHN0ZDo6bWluKG9mZnNldCwg
bWluT2Zmc2V0KTsKKyAgICB9CisgICAgQVNTRVJUKG1pbk9mZnNldCAhPSAxKTsKKyAgICByZXR1
cm4gbWluT2Zmc2V0IC0gODsKK30KKworV2FzbTo6SW5zdGFuY2UqIFdlYkFzc2VtYmx5RnVuY3Rp
b246OnByZXZpb3VzSW5zdGFuY2UoQ2FsbEZyYW1lKiBjYWxsRnJhbWUpCit7CisgICAgQVNTRVJU
KGNhbGxGcmFtZS0+Y2FsbGVlKCkucmF3UHRyKCkgPT0gdGhpcyk7CisgICAgYXV0byogcmVzdWx0
ID0gKmJpdHdpc2VfY2FzdDxXYXNtOjpJbnN0YW5jZSoqPihiaXR3aXNlX2Nhc3Q8Y2hhcio+KGNh
bGxGcmFtZSkgKyBwcmV2aW91c0luc3RhbmNlT2Zmc2V0KCkpOworICAgIC8vZGF0YUxvZ0xuKCJw
cmV2aW91c0luc3RhbmNlOiAiLCBSYXdQb2ludGVyKHJlc3VsdCkpOworICAgIHJldHVybiByZXN1
bHQ7Cit9CisKK01hY3JvQXNzZW1ibGVyQ29kZVB0cjxKU0VudHJ5UHRyVGFnPiBXZWJBc3NlbWJs
eUZ1bmN0aW9uOjpqc0NhbGxFbnRyeXBvaW50U2xvdygpCit7CisgICAgVk0mIHZtID0gKnRoaXMt
PnZtKCk7CisgICAgQ0NhbGxIZWxwZXJzIGppdDsKKworICAgIGNvbnN0IGF1dG8mIHNpZ25hdHVy
ZSA9IFdhc206OlNpZ25hdHVyZUluZm9ybWF0aW9uOjpnZXQoc2lnbmF0dXJlSW5kZXgoKSk7Cisg
ICAgY29uc3QgYXV0byYgcGlubmVkUmVncyA9IFdhc206OlBpbm5lZFJlZ2lzdGVySW5mbzo6Z2V0
KCk7CisgICAgUmVnaXN0ZXJBdE9mZnNldExpc3QgcmVnaXN0ZXJzVG9TcGlsbCA9IHVzZWRDYWxs
ZWVTYXZlUmVnaXN0ZXJzKCk7CisKKyAgICBhdXRvJiBtb2R1bGVJbmZvcm1hdGlvbiA9IGluc3Rh
bmNlKCktPmluc3RhbmNlKCkubW9kdWxlKCkubW9kdWxlSW5mb3JtYXRpb24oKTsKKworICAgIHVu
c2lnbmVkIHRvdGFsRnJhbWVTaXplID0gcmVnaXN0ZXJzVG9TcGlsbC5zaXplKCkgKiBzaXplb2Yo
dm9pZCopOworICAgIHRvdGFsRnJhbWVTaXplICs9IHNpemVvZih2b2lkKik7IC8vIFByZXZpb3Vz
IHRvcCBsZXZlbCB2bSBXYXNtOjpJbnN0YW5jZS4KKyAgICB0b3RhbEZyYW1lU2l6ZSArPSBXYXNt
OjpXYXNtQ2FsbGluZ0NvbnZlbnRpb246OmhlYWRlclNpemVJbkJ5dGVzKCk7CisgICAgdG90YWxG
cmFtZVNpemUgLT0gc2l6ZW9mKENhbGxlckZyYW1lQW5kUEMpOworCisgICAgdW5zaWduZWQgbnVt
R1BScyA9IDA7CisgICAgdW5zaWduZWQgbnVtRlBScyA9IDA7CisgICAgYm9vbCBhcmd1bWVudHNJ
bmNsdWRlSTY0ID0gZmFsc2U7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHNpZ25hdHVy
ZS5hcmd1bWVudENvdW50KCk7IGkrKykgeworICAgICAgICBzd2l0Y2ggKHNpZ25hdHVyZS5hcmd1
bWVudChpKSkgeworICAgICAgICBjYXNlIFdhc206Okk2NDoKKyAgICAgICAgICAgIGFyZ3VtZW50
c0luY2x1ZGVJNjQgPSB0cnVlOworICAgICAgICAgICAgRkFMTFRIUk9VR0g7CisgICAgICAgIGNh
c2UgV2FzbTo6STMyOgorICAgICAgICAgICAgaWYgKG51bUdQUnMgPj0gV2FzbTo6d2FzbUNhbGxp
bmdDb252ZW50aW9uKCkubV9ncHJBcmdzLnNpemUoKSkKKyAgICAgICAgICAgICAgICB0b3RhbEZy
YW1lU2l6ZSArPSBzaXplb2Yodm9pZCopOworICAgICAgICAgICAgKytudW1HUFJzOworICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgV2FzbTo6RjMyOgorICAgICAgICBjYXNlIFdhc206
OkY2NDoKKyAgICAgICAgICAgIGlmIChudW1GUFJzID49IFdhc206Ondhc21DYWxsaW5nQ29udmVu
dGlvbigpLm1fZnByQXJncy5zaXplKCkpCisgICAgICAgICAgICAgICAgdG90YWxGcmFtZVNpemUg
Kz0gc2l6ZW9mKHZvaWQqKTsKKyAgICAgICAgICAgICsrbnVtRlBSczsKKyAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JF
QUNIRUQoKTsKKyAgICAgICAgfQorICAgIH0KKyAgICBpZiAoYXJndW1lbnRzSW5jbHVkZUk2NCkg
eworICAgICAgICAvLyBPT1BTOiBNb3ZlIHRoaXMgdG8gdGhlIHNsb3cgcGF0aCB0byBoYW5kbGUh
CisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIH0KKworICAgIHRvdGFsRnJhbWVTaXplID0g
V1RGOjpyb3VuZFVwVG9NdWx0aXBsZU9mKHN0YWNrQWxpZ25tZW50Qnl0ZXMoKSwgdG90YWxGcmFt
ZVNpemUpOworCisgICAgaml0LmVtaXRGdW5jdGlvblByb2xvZ3VlKCk7CisgICAgaml0LnN1YlB0
cihNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKHRvdGFsRnJhbWVTaXplKSwgTWFjcm9Bc3Nl
bWJsZXI6OnN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKKyAgICBqaXQuc3RvcmU2NChDQ2FsbEhlbHBl
cnM6OlRydXN0ZWRJbW02NCgwKSwgQ0NhbGxIZWxwZXJzOjphZGRyZXNzRm9yKENhbGxGcmFtZVNs
b3Q6OmNvZGVCbG9jaykpOworCisgICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSBXYXNtOjp3YXNtQ2Fs
bGluZ0NvbnZlbnRpb25BaXIoKS5wcm9sb2d1ZVNjcmF0Y2goMSk7CisgICAgR1BSUmVnIHNjcmF0
Y2gyR1BSID0gV2FzbTo6d2FzbUNhbGxpbmdDb252ZW50aW9uQWlyKCkucHJvbG9ndWVTY3JhdGNo
KDApOworICAgIGppdC5sb2FkUHRyKHZtLmFkZHJlc3NPZlNvZnRTdGFja0xpbWl0KCksIHNjcmF0
Y2gyR1BSKTsKKworICAgIENDYWxsSGVscGVyczo6SnVtcExpc3Qgc2xvd1BhdGg7CisgICAgc2xv
d1BhdGguYXBwZW5kKGppdC5icmFuY2hQdHIoQ0NhbGxIZWxwZXJzOjpBYm92ZSwgTWFjcm9Bc3Nl
bWJsZXI6OnN0YWNrUG9pbnRlclJlZ2lzdGVyLCBHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3Rlcikp
OworICAgIHNsb3dQYXRoLmFwcGVuZChqaXQuYnJhbmNoUHRyKENDYWxsSGVscGVyczo6QmVsb3cs
IE1hY3JvQXNzZW1ibGVyOjpzdGFja1BvaW50ZXJSZWdpc3Rlciwgc2NyYXRjaDJHUFIpKTsKKwor
ICAgIC8vIEVuc3VyZToKKyAgICAvLyBhcmdDb3VudFBsdXNUaGlzIC0gMSA+PSBzaWduYXR1cmUu
YXJndW1lbnRDb3VudCgpCisgICAgLy8gYXJnQ291bnRQbHVzVGhpcyA+PSBzaWduYXR1cmUuYXJn
dW1lbnRDb3VudCgpICsgMQorICAgIC8vIE9PUFM6IFRoaXMganVzdCBlbmRzIHVwIGJlaW5nIHpl
cm8gZm9yIGFsbCBhcmdzLCBzbyBtYXliZSB3ZSBzaG91bGQgaGFuZGxlIGl0IG9uIHRoZSBmYXN0
IHBhdGg/CisgICAgc2xvd1BhdGguYXBwZW5kKGppdC5icmFuY2gzMihDQ2FsbEhlbHBlcnM6OkFi
b3ZlT3JFcXVhbCwKKyAgICAgICAgQ0NhbGxIZWxwZXJzOjpwYXlsb2FkRm9yKENhbGxGcmFtZVNs
b3Q6OmFyZ3VtZW50Q291bnQpLCBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihzaWduYXR1cmUu
YXJndW1lbnRDb3VudCgpICsgMSkpKTsKKworICAgIC8vIEZpcnN0IHdlIGRvIHN0YWNrIHNsb3Rz
IGZvciBGUFJzIHNvIHdlIGNhbiB1c2UgRlBSIGFyZ3VtZW50IHJlZ2lzdGVyIGFzIHNjcmF0Y2gu
IGFuZCBhbGwgR1BScyBiZWNhdXNlIHdlIGhhdmUgc2NyYXRjaCByZWdpc3RlcnMgdG8gZG8gaXQu
CisgICAgLy8gQWZ0ZXIgdGhhdCwgd2UgaGFuZGxlIEZQUiBhcmd1bWVudCByZWdpc3RlcnMuIAor
ICAgIHsKKyAgICAgICAgQ0NhbGxIZWxwZXJzOjpBZGRyZXNzIGNhbGxlZUZyYW1lID0gQ0NhbGxI
ZWxwZXJzOjpBZGRyZXNzKE1hY3JvQXNzZW1ibGVyOjpzdGFja1BvaW50ZXJSZWdpc3RlciwgLXN0
YXRpY19jYXN0PHB0cmRpZmZfdD4oc2l6ZW9mKENhbGxlckZyYW1lQW5kUEMpKSk7CisgICAgICAg
IG51bUdQUnMgPSAwOworICAgICAgICBudW1GUFJzID0gMDsKKyAgICAgICAgLy8gV2UncmUgZ29p
bmcgdG8gc2V0IHRoZSBwaW5uZWQgcmVnaXN0ZXJzIGFmdGVyIHRoaXMuIFNvCisgICAgICAgIC8v
IHdlIGNhbiB1c2UgdGhpcyBhcyBhIHNjcmF0Y2ggZm9yIG5vdyBzaW5jZSB3ZSBzYXZlZCBpdCBh
Ym92ZS4KKyAgICAgICAgRlBSUmVnIHNjcmF0Y2hGUFIgPSBXYXNtOjp3YXNtQ2FsbGluZ0NvbnZl
bnRpb24oKS5tX2ZwckFyZ3NbMF0uZnByKCk7CisKKyAgICAgICAgcHRyZGlmZl90IGpzT2Zmc2V0
ID0gQ2FsbEZyYW1lU2xvdDo6Zmlyc3RBcmd1bWVudCAqIHNpemVvZihFbmNvZGVkSlNWYWx1ZSk7
CisKKyAgICAgICAgcHRyZGlmZl90IHdhc21PZmZzZXQgPSBDYWxsRnJhbWU6OmhlYWRlclNpemVJ
blJlZ2lzdGVycyAqIHNpemVvZih2b2lkKik7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7
IGkgPCBzaWduYXR1cmUuYXJndW1lbnRDb3VudCgpOyBpKyspIHsKKyAgICAgICAgICAgIHN3aXRj
aCAoc2lnbmF0dXJlLmFyZ3VtZW50KGkpKSB7CisgICAgICAgICAgICBjYXNlIFdhc206Okk2NDoK
KyAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAg
ICAgY2FzZSBXYXNtOjpJMzI6CisgICAgICAgICAgICAgICAgaml0LmxvYWQ2NChDQ2FsbEhlbHBl
cnM6OkFkZHJlc3MoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIGpzT2Zmc2V0KSwgc2NyYXRj
aEdQUik7CisgICAgICAgICAgICAgICAgc2xvd1BhdGguYXBwZW5kKGppdC5icmFuY2hJZk5vdElu
dDMyKHNjcmF0Y2hHUFIpKTsgLy8gT09QUzogaGFuZGxlIGZsb2F0PworICAgICAgICAgICAgICAg
IGlmIChudW1HUFJzID49IFdhc206Ondhc21DYWxsaW5nQ29udmVudGlvbigpLm1fZ3ByQXJncy5z
aXplKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgaml0LnN0b3JlMzIoc2NyYXRjaEdQUiwgY2Fs
bGVlRnJhbWUud2l0aE9mZnNldCh3YXNtT2Zmc2V0KSk7CisgICAgICAgICAgICAgICAgICAgIHdh
c21PZmZzZXQgKz0gc2l6ZW9mKHZvaWQqKTsKKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAg
ICAgICAgICAgICAgICAgICBqaXQuemVyb0V4dGVuZDMyVG9QdHIoc2NyYXRjaEdQUiwgV2FzbTo6
d2FzbUNhbGxpbmdDb252ZW50aW9uKCkubV9ncHJBcmdzW251bUdQUnNdLmdwcigpKTsKKyAgICAg
ICAgICAgICAgICAgICAgKytudW1HUFJzOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgV2FzbTo6RjMyOgorICAgICAgICAgICAgY2Fz
ZSBXYXNtOjpGNjQ6CisgICAgICAgICAgICAgICAgaWYgKG51bUZQUnMgPj0gV2FzbTo6d2FzbUNh
bGxpbmdDb252ZW50aW9uKCkubV9mcHJBcmdzLnNpemUoKSkgeworICAgICAgICAgICAgICAgICAg
ICBqaXQubG9hZDY0KENDYWxsSGVscGVyczo6QWRkcmVzcyhHUFJJbmZvOjpjYWxsRnJhbWVSZWdp
c3RlciwganNPZmZzZXQpLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgICAgICAgICAgICAgc2xvd1Bh
dGguYXBwZW5kKGppdC5icmFuY2hJZk5vdE51bWJlcihzY3JhdGNoR1BSKSk7CisgICAgICAgICAg
ICAgICAgICAgIHNsb3dQYXRoLmFwcGVuZChqaXQuYnJhbmNoSWZJbnQzMihzY3JhdGNoR1BSKSk7
IC8vIE9PUFM6IEhhbmRsZSBpMzIKKworICAgICAgICAgICAgICAgICAgICBpZiAoc2lnbmF0dXJl
LmFyZ3VtZW50KGkpID09IFdhc206OkYzMikgeworICAgICAgICAgICAgICAgICAgICAgICAgaml0
LnVuYm94RG91YmxlKHNjcmF0Y2hHUFIsIHNjcmF0Y2hHUFIsIHNjcmF0Y2hGUFIpOworICAgICAg
ICAgICAgICAgICAgICAgICAgaml0LmNvbnZlcnREb3VibGVUb0Zsb2F0KHNjcmF0Y2hGUFIsIHNj
cmF0Y2hGUFIpOworICAgICAgICAgICAgICAgICAgICAgICAgaml0LnN0b3JlRmxvYXQoc2NyYXRj
aEZQUiwgY2FsbGVlRnJhbWUud2l0aE9mZnNldCh3YXNtT2Zmc2V0KSk7CisgICAgICAgICAgICAg
ICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICBqaXQuYWRkNjQoR1BSSW5m
bzo6dGFnVHlwZU51bWJlclJlZ2lzdGVyLCBzY3JhdGNoR1BSLCBzY3JhdGNoR1BSKTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIGppdC5zdG9yZTY0KHNjcmF0Y2hHUFIsIGNhbGxlZUZyYW1lLndp
dGhPZmZzZXQod2FzbU9mZnNldCkpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICAgICAgICAgIHdhc21PZmZzZXQgKz0gc2l6ZW9mKHZvaWQqKTsKKyAgICAgICAgICAgICAgICB9
IGVsc2UKKyAgICAgICAgICAgICAgICAgICAgKytudW1GUFJzOworICAgICAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VS
VF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBqc09mZnNldCAr
PSBzaXplb2YoRW5jb2RlZEpTVmFsdWUpOworICAgICAgICB9CisgICAgfQorCisgICAgLy8gTm93
IGhhbmRsZSBGUFIgYXJndW1lbnRzIGluIHJlZ2lzdGVycy4KKyAgICB7CisgICAgICAgIG51bUdQ
UnMgPSAwOworICAgICAgICBudW1GUFJzID0gMDsKKyAgICAgICAgcHRyZGlmZl90IGpzT2Zmc2V0
ID0gQ2FsbEZyYW1lU2xvdDo6Zmlyc3RBcmd1bWVudCAqIHNpemVvZihFbmNvZGVkSlNWYWx1ZSk7
CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBzaWduYXR1cmUuYXJndW1lbnRDb3Vu
dCgpOyBpKyspIHsKKyAgICAgICAgICAgIHN3aXRjaCAoc2lnbmF0dXJlLmFyZ3VtZW50KGkpKSB7
CisgICAgICAgICAgICBjYXNlIFdhc206OkYzMjoKKyAgICAgICAgICAgIGNhc2UgV2FzbTo6RjY0
OgorICAgICAgICAgICAgICAgIGlmIChudW1GUFJzIDwgV2FzbTo6d2FzbUNhbGxpbmdDb252ZW50
aW9uKCkubV9mcHJBcmdzLnNpemUoKSkgeworICAgICAgICAgICAgICAgICAgICBqaXQubG9hZDY0
KENDYWxsSGVscGVyczo6QWRkcmVzcyhHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlciwganNPZmZz
ZXQpLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgICAgICAgICAgICAgc2xvd1BhdGguYXBwZW5kKGpp
dC5icmFuY2hJZk5vdE51bWJlcihzY3JhdGNoR1BSKSk7CisgICAgICAgICAgICAgICAgICAgIHNs
b3dQYXRoLmFwcGVuZChqaXQuYnJhbmNoSWZJbnQzMihzY3JhdGNoR1BSKSk7IC8vIE9PUFM6IEhh
bmRsZSBpMzIKKworICAgICAgICAgICAgICAgICAgICBGUFJSZWcgYXJnRlBSID0gV2FzbTo6d2Fz
bUNhbGxpbmdDb252ZW50aW9uKCkubV9mcHJBcmdzW251bUZQUnNdLmZwcigpOworICAgICAgICAg
ICAgICAgICAgICBqaXQudW5ib3hEb3VibGUoc2NyYXRjaEdQUiwgc2NyYXRjaEdQUiwgYXJnRlBS
KTsKKworICAgICAgICAgICAgICAgICAgICBpZiAoc2lnbmF0dXJlLmFyZ3VtZW50KGkpID09IFdh
c206OkYzMikKKyAgICAgICAgICAgICAgICAgICAgICAgIGppdC5jb252ZXJ0RG91YmxlVG9GbG9h
dChhcmdGUFIsIGFyZ0ZQUik7CisKKyAgICAgICAgICAgICAgICAgICAgKytudW1GUFJzOworICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGRlZmF1
bHQ6CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAg
IGpzT2Zmc2V0ICs9IHNpemVvZihFbmNvZGVkSlNWYWx1ZSk7CisgICAgICAgIH0KKyAgICB9CisK
KyAgICBqaXQubG9hZFB0cigmdm0ud2FzbUNvbnRleHQuaW5zdGFuY2UsIHNjcmF0Y2hHUFIpOwor
ICAgIC8vaml0LnByaW50KCJTdG9yaW5nIHByaW9yIHdhc20gY29udGV4dCBjZnI9Iiwgc3RhdGlj
X2Nhc3Q8TWFjcm9Bc3NlbWJsZXI6OlJlZ2lzdGVySUQ+KEdQUkluZm86OmNhbGxGcmFtZVJlZ2lz
dGVyKSwgIiBjdHg9ICIsIHNjcmF0Y2hHUFIsICJcbiIpOworICAgIHB0cmRpZmZfdCBwcmV2aW91
c0luc3RhbmNlT2Zmc2V0ID0gdGhpcy0+cHJldmlvdXNJbnN0YW5jZU9mZnNldCgpOworICAgIGpp
dC5zdG9yZVB0cihzY3JhdGNoR1BSLCBDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoR1BSSW5mbzo6Y2Fs
bEZyYW1lUmVnaXN0ZXIsIHByZXZpb3VzSW5zdGFuY2VPZmZzZXQpKTsKKworICAgIGZvciAoY29u
c3QgUmVnaXN0ZXJBdE9mZnNldCYgcmVnQXRPZmZzZXQgOiByZWdpc3RlcnNUb1NwaWxsKSB7Cisg
ICAgICAgIEdQUlJlZyByZWcgPSByZWdBdE9mZnNldC5yZWcoKS5ncHIoKTsKKyAgICAgICAgQVNT
RVJUKHJlZyAhPSBzY3JhdGNoR1BSKTsKKyAgICAgICAgQVNTRVJUKHJlZyAhPSBzY3JhdGNoMkdQ
Uik7CisgICAgICAgIHB0cmRpZmZfdCBvZmZzZXQgPSByZWdBdE9mZnNldC5vZmZzZXQoKTsKKyAg
ICAgICAgaml0LnN0b3JlUHRyKHJlZywgQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKEdQUkluZm86OmNh
bGxGcmFtZVJlZ2lzdGVyLCBvZmZzZXQpKTsKKyAgICB9CisgICAgaml0Lm1vdmUoQ0NhbGxIZWxw
ZXJzOjpUcnVzdGVkSW1tUHRyKCZpbnN0YW5jZSgpLT5pbnN0YW5jZSgpKSwgc2NyYXRjaEdQUik7
CisKKyAgICBpZiAoV2FzbTo6Q29udGV4dDo6dXNlRmFzdFRMUygpKSAKKyAgICAgICAgaml0LnN0
b3JlV2FzbUNvbnRleHRJbnN0YW5jZShzY3JhdGNoR1BSKTsKKyAgICBlbHNlCisgICAgICAgIGpp
dC5tb3ZlKHNjcmF0Y2hHUFIsIHBpbm5lZFJlZ3Mud2FzbUNvbnRleHRJbnN0YW5jZVBvaW50ZXIp
OworICAgIGppdC5zdG9yZVB0cihzY3JhdGNoR1BSLCAmdm0ud2FzbUNvbnRleHQuaW5zdGFuY2Up
OworICAgIC8vIFRoaXMgY29udGFpbnMgdGhlIGNhY2hlZCBzdGFjayBsaW1pdCBzdGlsbC4KKyAg
ICBqaXQuc3RvcmVQdHIoc2NyYXRjaDJHUFIsIENDYWxsSGVscGVyczo6QWRkcmVzcyhzY3JhdGNo
R1BSLCBXYXNtOjpJbnN0YW5jZTo6b2Zmc2V0T2ZDYWNoZWRTdGFja0xpbWl0KCkpKTsKKworICAg
IGlmICghIW1vZHVsZUluZm9ybWF0aW9uLm1lbW9yeSkgeworICAgICAgICBHUFJSZWcgYmFzZU1l
bW9yeSA9IHBpbm5lZFJlZ3MuYmFzZU1lbW9yeVBvaW50ZXI7CisKKyAgICAgICAgaWYgKGluc3Rh
bmNlKCktPm1lbW9yeU1vZGUoKSAhPSBXYXNtOjpNZW1vcnlNb2RlOjpTaWduYWxpbmcpIHsKKyAg
ICAgICAgICAgIGNvbnN0IGF1dG8mIHNpemVSZWdzID0gcGlubmVkUmVncy5zaXplUmVnaXN0ZXJz
OworICAgICAgICAgICAgQVNTRVJUKHNpemVSZWdzLnNpemUoKSA+PSAxKTsKKyAgICAgICAgICAg
IEFTU0VSVCghc2l6ZVJlZ3NbMF0uc2l6ZU9mZnNldCk7IC8vIFRoZSBmb2xsb3dpbmcgY29kZSBh
c3N1bWVzIHdlIHN0YXJ0IGF0IDAsIGFuZCBjYWxjdWxhdGVzIHN1YnNlcXVlbnQgc2l6ZSByZWdp
c3RlcnMgcmVsYXRpdmUgdG8gMC4KKyAgICAgICAgICAgIEFTU0VSVChzaXplUmVnc1swXS5zaXpl
UmVnaXN0ZXIgIT0gc2NyYXRjaEdQUik7CisgICAgICAgICAgICBqaXQubG9hZFB0cihDQ2FsbEhl
bHBlcnM6OkFkZHJlc3Moc2NyYXRjaEdQUiwgV2FzbTo6SW5zdGFuY2U6Om9mZnNldE9mQ2FjaGVk
TWVtb3J5U2l6ZSgpKSwgc2l6ZVJlZ3NbMF0uc2l6ZVJlZ2lzdGVyKTsKKyAgICAgICAgICAgIGZv
ciAodW5zaWduZWQgaSA9IDE7IGkgPCBzaXplUmVncy5zaXplKCk7ICsraSkKKyAgICAgICAgICAg
ICAgICBqaXQuYWRkNjQoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoLXNpemVSZWdzW2ldLnNp
emVPZmZzZXQpLCBzaXplUmVnc1swXS5zaXplUmVnaXN0ZXIsIHNpemVSZWdzW2ldLnNpemVSZWdp
c3Rlcik7CisgICAgICAgIH0KKworICAgICAgICBqaXQubG9hZFB0cihDQ2FsbEhlbHBlcnM6OkFk
ZHJlc3Moc2NyYXRjaEdQUiwgV2FzbTo6SW5zdGFuY2U6Om9mZnNldE9mQ2FjaGVkTWVtb3J5KCkp
LCBiYXNlTWVtb3J5KTsKKyAgICB9CisKKyAgICBpZiAoIW1fanNUb1dhc21JQ0NhbGxlZSkKKyAg
ICAgICAgbV9qc1RvV2FzbUlDQ2FsbGVlLnNldCh2bSwgdGhpcywgSlNUb1dhc21JQ0NhbGxlZTo6
Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QoKSwgdGhpcykpOworICAgIGppdC5zdG9yZVB0cihDQ2Fs
bEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIobV9qc1RvV2FzbUlDQ2FsbGVlLmdldCgpKSwgQ0NhbGxI
ZWxwZXJzOjphZGRyZXNzRm9yKENhbGxGcmFtZVNsb3Q6OmNhbGxlZSkpOworCisgICAgeworICAg
ICAgICBqaXQubG9hZFB0cihlbnRyeXBvaW50TG9hZExvY2F0aW9uKCksIHNjcmF0Y2hHUFIpOwor
ICAgICAgICBqaXQuY2FsbChzY3JhdGNoR1BSLCBXYXNtRW50cnlQdHJUYWcpOworICAgIH0KKwor
ICAgIGppdC5sb2FkUHRyKENDYWxsSGVscGVyczo6QWRkcmVzcyhHUFJJbmZvOjpjYWxsRnJhbWVS
ZWdpc3RlciwgcHJldmlvdXNJbnN0YW5jZU9mZnNldCksIEdQUkluZm86Om5vblByZXNlcnZlZE5v
blJldHVybkdQUik7CisgICAgLy9qaXQucHJpbnQoIlJlc3RvcmluZyBwcmlvciB3YXNtIGNvbnRl
eHQgY2ZyPSIsIHN0YXRpY19jYXN0PE1hY3JvQXNzZW1ibGVyOjpSZWdpc3RlcklEPihHUFJJbmZv
OjpjYWxsRnJhbWVSZWdpc3RlciksICIgY3R4PSAiLCBzdGF0aWNfY2FzdDxNYWNyb0Fzc2VtYmxl
cjo6UmVnaXN0ZXJJRD4oR1BSSW5mbzo6bm9uUHJlc2VydmVkTm9uUmV0dXJuR1BSKSwgIlxuIik7
CisgICAgLy9qaXQubG9hZFB0cih2bS5hZGRyZXNzT2ZTb2Z0U3RhY2tMaW1pdCgpLCBwaW5uZWRS
ZWdzLmJhc2VNZW1vcnlQb2ludGVyKTsKKyAgICAvL2ppdC5zdG9yZVB0cihwaW5uZWRSZWdzLmJh
c2VNZW1vcnlQb2ludGVyLCBDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoR1BSSW5mbzo6bm9uUHJlc2Vy
dmVkTm9uUmV0dXJuR1BSLCBXYXNtOjpJbnN0YW5jZTo6b2Zmc2V0T2ZDYWNoZWRTdGFja0xpbWl0
KCkpKTsKKyAgICBqaXQuc3RvcmVQdHIoR1BSSW5mbzo6bm9uUHJlc2VydmVkTm9uUmV0dXJuR1BS
LCAmdm0ud2FzbUNvbnRleHQuaW5zdGFuY2UpOworCisgICAgZm9yIChjb25zdCBSZWdpc3RlckF0
T2Zmc2V0JiByZWdBdE9mZnNldCA6IHJlZ2lzdGVyc1RvU3BpbGwpIHsKKyAgICAgICAgR1BSUmVn
IHJlZyA9IHJlZ0F0T2Zmc2V0LnJlZygpLmdwcigpOworICAgICAgICBBU1NFUlQocmVnICE9IEdQ
UkluZm86OnJldHVyblZhbHVlR1BSKTsKKyAgICAgICAgcHRyZGlmZl90IG9mZnNldCA9IHJlZ0F0
T2Zmc2V0Lm9mZnNldCgpOworICAgICAgICBqaXQubG9hZFB0cihDQ2FsbEhlbHBlcnM6OkFkZHJl
c3MoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIG9mZnNldCksIHJlZyk7CisgICAgfQorCisg
ICAgc3dpdGNoIChzaWduYXR1cmUucmV0dXJuVHlwZSgpKSB7CisgICAgY2FzZSBXYXNtOjpWb2lk
OgorICAgICAgICBqaXQubW92ZVRydXN0ZWRWYWx1ZShqc1VuZGVmaW5lZCgpLCBKU1ZhbHVlUmVn
cyB7IEdQUkluZm86OnJldHVyblZhbHVlR1BSIH0pOworICAgICAgICBicmVhazsKKyAgICBjYXNl
IFdhc206OkkzMjoKKyAgICAgICAgaml0Lnplcm9FeHRlbmQzMlRvUHRyKEdQUkluZm86OnJldHVy
blZhbHVlR1BSLCBHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUik7CisgICAgICAgIGppdC5ib3hJbnQz
MihHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUiwgSlNWYWx1ZVJlZ3MgeyBHUFJJbmZvOjpyZXR1cm5W
YWx1ZUdQUiB9KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBXYXNtOjpGMzI6CisgICAgICAg
IGppdC5jb252ZXJ0RmxvYXRUb0RvdWJsZShGUFJJbmZvOjpyZXR1cm5WYWx1ZUZQUiwgRlBSSW5m
bzo6cmV0dXJuVmFsdWVGUFIpOworICAgICAgICBGQUxMVEhST1VHSDsKKyAgICBjYXNlIFdhc206
OkY2NDogeworICAgICAgICBqaXQubW92ZVRydXN0ZWRWYWx1ZShqc051bWJlcihwdXJlTmFOKCkp
LCBKU1ZhbHVlUmVncyB7IEdQUkluZm86OnJldHVyblZhbHVlR1BSIH0pOworICAgICAgICBhdXRv
IGlzTmFOID0gaml0LmJyYW5jaElmTmFOKEZQUkluZm86OnJldHVyblZhbHVlRlBSKTsKKyAgICAg
ICAgaml0LmJveERvdWJsZShGUFJJbmZvOjpyZXR1cm5WYWx1ZUZQUiwgSlNWYWx1ZVJlZ3MgeyBH
UFJJbmZvOjpyZXR1cm5WYWx1ZUdQUiB9KTsKKyAgICAgICAgaXNOYU4ubGluaygmaml0KTsKKyAg
ICAgICAgYnJlYWs7CisgICAgfQorICAgIGNhc2UgV2FzbTo6STY0OgorICAgICAgICByZXR1cm4g
bnVsbHB0cjsKKyAgICBjYXNlIFdhc206OkZ1bmM6CisgICAgY2FzZSBXYXNtOjpBbnlmdW5jOgor
ICAgICAgICBqaXQuYnJlYWtwb2ludCgpOworICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0Ogor
ICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBqaXQuZW1pdEZ1bmN0aW9uRXBpbG9ndWUoKTsK
KyAgICBqaXQucmV0KCk7CisKKyAgICBzbG93UGF0aC5saW5rKCZqaXQpOworICAgIGppdC5tb3Zl
KENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cih0aGlzKSwgR1BSSW5mbzo6cmVnVDApOworICAg
IGppdC5lbWl0RnVuY3Rpb25FcGlsb2d1ZSgpOworICAgIC8vIE9PUFM6IENhbiBJIGp1c3QgdGFp
bCBjYWxsIHRoaXMgbmF0aXZlQ2FsbEdlbmVyYXRvcj8KKyAgICBhdXRvIGp1bXBUb0hvc3RDYWxs
ID0gaml0Lmp1bXAoKTsKKworICAgIExpbmtCdWZmZXIgbGlua0J1ZmZlcihqaXQsIEdMT0JBTF9U
SFVOS19JRCwgSklUQ29tcGlsYXRpb25DYW5GYWlsKTsKKyAgICBpZiAoVU5MSUtFTFkobGlua0J1
ZmZlci5kaWRGYWlsVG9BbGxvY2F0ZSgpKSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAg
ICBsaW5rQnVmZmVyLmxpbmsoanVtcFRvSG9zdENhbGwsIENvZGVMb2NhdGlvbkxhYmVsPEpTRW50
cnlQdHJUYWc+KGV4ZWN1dGFibGUoKS0+ZW50cnlwb2ludEZvcihDb2RlRm9yQ2FsbCwgTXVzdENo
ZWNrQXJpdHkpLmV4ZWN1dGFibGVBZGRyZXNzKCkpKTsKKworICAgIG1fanNDYWxsRW50cnlwb2lu
dCA9IEZJTkFMSVpFX0NPREUobGlua0J1ZmZlciwgV2FzbUVudHJ5UHRyVGFnLCAiSlMtPldhc20g
SUMiKTsKKyAgICByZXR1cm4gbV9qc0NhbGxFbnRyeXBvaW50LmNvZGUoKTsKK30KKwogV2ViQXNz
ZW1ibHlGdW5jdGlvbiogV2ViQXNzZW1ibHlGdW5jdGlvbjo6Y3JlYXRlKFZNJiB2bSwgSlNHbG9i
YWxPYmplY3QqIGdsb2JhbE9iamVjdCwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIHVuc2lnbmVkIGxl
bmd0aCwgY29uc3QgU3RyaW5nJiBuYW1lLCBKU1dlYkFzc2VtYmx5SW5zdGFuY2UqIGluc3RhbmNl
LCBXYXNtOjpDYWxsZWUmIGpzRW50cnlwb2ludCwgV2FzbTo6V2FzbVRvV2FzbUltcG9ydGFibGVG
dW5jdGlvbjo6TG9hZExvY2F0aW9uIHdhc21Ub1dhc21FbnRyeXBvaW50TG9hZExvY2F0aW9uLCBX
YXNtOjpTaWduYXR1cmVJbmRleCBzaWduYXR1cmVJbmRleCkKIHsKICAgICBOYXRpdmVFeGVjdXRh
YmxlKiBleGVjdXRhYmxlID0gdm0uZ2V0SG9zdEZ1bmN0aW9uKGNhbGxXZWJBc3NlbWJseUZ1bmN0
aW9uLCBOb0ludHJpbnNpYywgY2FsbEhvc3RGdW5jdGlvbkFzQ29uc3RydWN0b3IsIG51bGxwdHIs
IG5hbWUpOwogICAgIFdlYkFzc2VtYmx5RnVuY3Rpb24qIGZ1bmN0aW9uID0gbmV3IChOb3ROdWxs
LCBhbGxvY2F0ZUNlbGw8V2ViQXNzZW1ibHlGdW5jdGlvbj4odm0uaGVhcCkpIFdlYkFzc2VtYmx5
RnVuY3Rpb24odm0sIGdsb2JhbE9iamVjdCwgc3RydWN0dXJlLCBqc0VudHJ5cG9pbnQsIHdhc21U
b1dhc21FbnRyeXBvaW50TG9hZExvY2F0aW9uLCBzaWduYXR1cmVJbmRleCk7CiAgICAgZnVuY3Rp
b24tPmZpbmlzaENyZWF0aW9uKHZtLCBleGVjdXRhYmxlLCBsZW5ndGgsIG5hbWUsIGluc3RhbmNl
KTsKKworICAgIC8vIE9PUFM6IG1ha2UgdGhpcyBwYXJ0IG9mIGNyZWF0ZSgpLgorICAgIGV4ZWN1
dGFibGUtPnNldFdlYkFzc2VtYmx5RnVuY3Rpb24odm0sIGZ1bmN0aW9uKTsKKwogICAgIEFTU0VS
VF9XSVRIX01FU1NBR0UoIWZ1bmN0aW9uLT5pc0xhcmdlQWxsb2NhdGlvbigpLCAiV2ViQXNzZW1i
bHlGdW5jdGlvbiBzaG91bGQgYmUgYWxsb2NhdGVkIG5vdCBpbiBsYXJnZSBhbGxvY2F0aW9uIHNp
bmNlIGl0IGlzIEpTQ2FsbGVlLiIpOwogICAgIHJldHVybiBmdW5jdGlvbjsKIH0KQEAgLTE2OSw2
ICs1MDYsMTUgQEAgV2ViQXNzZW1ibHlGdW5jdGlvbjo6V2ViQXNzZW1ibHlGdW5jdGlvbgogICAg
ICwgbV9pbXBvcnRhYmxlRnVuY3Rpb24geyBzaWduYXR1cmVJbmRleCwgd2FzbVRvV2FzbUVudHJ5
cG9pbnRMb2FkTG9jYXRpb24gfQogeyB9CiAKK3ZvaWQgV2ViQXNzZW1ibHlGdW5jdGlvbjo6dmlz
aXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQoreworICAgIFdl
YkFzc2VtYmx5RnVuY3Rpb24qIHRoaXNPYmplY3QgPSBqc0Nhc3Q8V2ViQXNzZW1ibHlGdW5jdGlv
bio+KGNlbGwpOworICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5m
bygpKTsKKworICAgIEJhc2U6OnZpc2l0Q2hpbGRyZW4odGhpc09iamVjdCwgdmlzaXRvcik7Cisg
ICAgdmlzaXRvci5hcHBlbmQodGhpc09iamVjdC0+bV9qc1RvV2FzbUlDQ2FsbGVlKTsKK30KKwog
fSAvLyBuYW1lc3BhY2UgSlNDCiAKICNlbmRpZiAvLyBFTkFCTEUoV0VCQVNTRU1CTFkpCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseUZ1bmN0aW9uLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlGdW5j
dGlvbi5oCShyZXZpc2lvbiAyNDM2MzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9q
cy9XZWJBc3NlbWJseUZ1bmN0aW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTQzLDYgKzQzLDI3IEBA
IG5hbWVzcGFjZSBCMyB7CiBjbGFzcyBDb21waWxhdGlvbjsKIH0KIAorY2xhc3MgV2ViQXNzZW1i
bHlGdW5jdGlvbjsKKworY2xhc3MgSlNUb1dhc21JQ0NhbGxlZSA6IHB1YmxpYyBKU0NhbGxlZSB7
CisgICAgdXNpbmcgQmFzZSA9IEpTQ2FsbGVlOworcHVibGljOgorICAgIERFQ0xBUkVfSU5GTzsK
KworICAgIHN0YXRpYyBKU1RvV2FzbUlDQ2FsbGVlKiBjcmVhdGUoVk0mLCBKU0dsb2JhbE9iamVj
dCosIFdlYkFzc2VtYmx5RnVuY3Rpb24qKTsKKyAgICBzdGF0aWMgU3RydWN0dXJlKiBjcmVhdGVT
dHJ1Y3R1cmUoVk0mLCBKU0dsb2JhbE9iamVjdCosIEpTVmFsdWUpOworCisgICAgV2ViQXNzZW1i
bHlGdW5jdGlvbiogZnVuY3Rpb24oKSB7IHJldHVybiBtX2Z1bmN0aW9uLmdldCgpOyB9CisKK3By
aXZhdGU6CisgICAgSlNUb1dhc21JQ0NhbGxlZShWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9i
YWxPYmplY3QsIFN0cnVjdHVyZSogc3RydWN0dXJlKQorICAgICAgICA6IEJhc2Uodm0sIGdsb2Jh
bE9iamVjdCwgc3RydWN0dXJlKQorICAgIHsgfQorICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRy
ZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKKworICAgIFdyaXRlQmFycmllcjxXZWJBc3NlbWJs
eUZ1bmN0aW9uPiBtX2Z1bmN0aW9uOworfTsKKwogY2xhc3MgV2ViQXNzZW1ibHlGdW5jdGlvbiBm
aW5hbCA6IHB1YmxpYyBXZWJBc3NlbWJseUZ1bmN0aW9uQmFzZSB7CiBwdWJsaWM6CiAgICAgdXNp
bmcgQmFzZSA9IFdlYkFzc2VtYmx5RnVuY3Rpb25CYXNlOwpAQCAtNzQsMTQgKzk1LDMwIEBAIHB1
YmxpYzoKIAogICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZFbnRyeXBvaW50TG9hZExvY2F0
aW9uKCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKFdlYkFzc2VtYmx5RnVuY3Rpb24sIG1faW1w
b3J0YWJsZUZ1bmN0aW9uKSArIFdhc21Ub1dhc21JbXBvcnRhYmxlRnVuY3Rpb246Om9mZnNldE9m
RW50cnlwb2ludExvYWRMb2NhdGlvbigpOyB9CiAKKyAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8
SlNFbnRyeVB0clRhZz4ganNDYWxsRW50cnlwb2ludCgpCisgICAgeworICAgICAgICBpZiAobV9q
c0NhbGxFbnRyeXBvaW50KQorICAgICAgICAgICAgcmV0dXJuIG1fanNDYWxsRW50cnlwb2ludC5j
b2RlKCk7CisgICAgICAgIHJldHVybiBqc0NhbGxFbnRyeXBvaW50U2xvdygpOworICAgIH0KKwor
ICAgIFJlZ2lzdGVyQXRPZmZzZXRMaXN0IHVzZWRDYWxsZWVTYXZlUmVnaXN0ZXJzKCkgY29uc3Q7
CisgICAgV2FzbTo6SW5zdGFuY2UqIHByZXZpb3VzSW5zdGFuY2UoQ2FsbEZyYW1lKik7CisKIHBy
aXZhdGU6CisgICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRv
ciYpOwogICAgIFdlYkFzc2VtYmx5RnVuY3Rpb24oVk0mLCBKU0dsb2JhbE9iamVjdCosIFN0cnVj
dHVyZSosIFdhc206OkNhbGxlZSYganNFbnRyeXBvaW50LCBXYXNtVG9XYXNtSW1wb3J0YWJsZUZ1
bmN0aW9uOjpMb2FkTG9jYXRpb24gZW50cnlwb2ludExvYWRMb2NhdGlvbiwgV2FzbTo6U2lnbmF0
dXJlSW5kZXgpOwogCisgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPEpTRW50cnlQdHJUYWc+IGpz
Q2FsbEVudHJ5cG9pbnRTbG93KCk7CisgICAgcHRyZGlmZl90IHByZXZpb3VzSW5zdGFuY2VPZmZz
ZXQoKSBjb25zdDsKKwogICAgIC8vIEl0J3Mgc2FmZSB0byBqdXN0IGhvbGQgdGhlIHJhdyBXYXNt
VG9XYXNtSW1wb3J0YWJsZUZ1bmN0aW9uL2pzRW50cnlwb2ludCBiZWNhdXNlIHdlIGhhdmUgYSBy
ZWZlcmVuY2UKICAgICAvLyB0byBvdXIgSW5zdGFuY2UsIHdoaWNoIHBvaW50cyB0byB0aGUgTW9k
dWxlIHRoYXQgZXhwb3J0ZWQgdXMsIHdoaWNoCiAgICAgLy8gZW5zdXJlcyB0aGF0IHRoZSBhY3R1
YWwgU2lnbmF0dXJlL2NvZGUgZG9lc24ndCBnZXQgZGVhbGxvY2F0ZWQuCiAgICAgTWFjcm9Bc3Nl
bWJsZXJDb2RlUHRyPFdhc21FbnRyeVB0clRhZz4gbV9qc0VudHJ5cG9pbnQ7CisgICAgTWFjcm9B
c3NlbWJsZXJDb2RlUmVmPEpTRW50cnlQdHJUYWc+IG1fanNDYWxsRW50cnlwb2ludDsKICAgICBX
YXNtVG9XYXNtSW1wb3J0YWJsZUZ1bmN0aW9uIG1faW1wb3J0YWJsZUZ1bmN0aW9uOworICAgIFdy
aXRlQmFycmllcjxKU1RvV2FzbUlDQ2FsbGVlPiBtX2pzVG9XYXNtSUNDYWxsZWU7CiB9OwogCiB9
IC8vIG5hbWVzcGFjZSBKU0MK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>366541</attachid>
            <date>2019-04-02 14:49:30 -0700</date>
            <delta_ts>2019-04-02 20:15:42 -0700</delta_ts>
            <desc>WIP</desc>
            <filename>b-backup.diff</filename>
            <type>text/plain</type>
            <size>37465</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFBlcmZvcm1hbmNlVGVzdHMvSmV0U3RyZWFtMi9KZXRTdHJlYW1Ecml2ZXIuanMKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gUGVyZm9ybWFuY2VUZXN0cy9KZXRTdHJlYW0yL0pldFN0cmVhbURyaXZlci5q
cwkocmV2aXNpb24gMjQzNzYxKQorKysgUGVyZm9ybWFuY2VUZXN0cy9KZXRTdHJlYW0yL0pldFN0
cmVhbURyaXZlci5qcwkod29ya2luZyBjb3B5KQpAQCAtNzkzLDExICs3OTMsMTEgQEAgY2xhc3Mg
V2FzbUJlbmNobWFyayBleHRlbmRzIEJlbmNobWFyayB7CiAgICAgICAgICAgICAgICAgICAgIGNv
bnNvbGUubG9nKCdJbnRlcmNlcHRlZCBxdWl0L2Fib3J0Jyk7CiAgICAgICAgICAgICB9OwogCi0g
ICAgICAgICAgICBvbGRQcmludCA9IGdsb2JhbE9iamVjdC5wcmludDsKLSAgICAgICAgICAgIGds
b2JhbE9iamVjdC5wcmludCA9IGdsb2JhbE9iamVjdC5wcmludEVyciA9ICguLi5hcmdzKSA9PiB7
Ci0gICAgICAgICAgICAgICAgaWYgKHZlcmJvc2UpCi0gICAgICAgICAgICAgICAgICAgIGNvbnNv
bGUubG9nKCdJbnRlcmNlcHRlZCBwcmludDogJywgLi4uYXJncyk7Ci0gICAgICAgICAgICB9Owor
ICAgICAgICAgICAgLy9vbGRQcmludCA9IGdsb2JhbE9iamVjdC5wcmludDsKKyAgICAgICAgICAg
IC8vZ2xvYmFsT2JqZWN0LnByaW50ID0gZ2xvYmFsT2JqZWN0LnByaW50RXJyID0gKC4uLmFyZ3Mp
ID0+IHsKKyAgICAgICAgICAgIC8vICAgIGlmICh2ZXJib3NlKQorICAgICAgICAgICAgLy8gICAg
ICAgIGNvbnNvbGUubG9nKCdJbnRlcmNlcHRlZCBwcmludDogJywgLi4uYXJncyk7CisgICAgICAg
ICAgICAvL307CiAKICAgICAgICAgICAgIGxldCBNb2R1bGUgPSB7CiAgICAgICAgICAgICAgICAg
cHJlUnVuOiBbXSwKSW5kZXg6IFBlcmZvcm1hbmNlVGVzdHMvSmV0U3RyZWFtMi9jbGkuanMKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gUGVyZm9ybWFuY2VUZXN0cy9KZXRTdHJlYW0yL2NsaS5qcwkocmV2aXNpb24g
MjQzNzYxKQorKysgUGVyZm9ybWFuY2VUZXN0cy9KZXRTdHJlYW0yL2NsaS5qcwkod29ya2luZyBj
b3B5KQpAQCAtMjgsNiArMjgsOCBAQCBjb25zb2xlID0gewogICAgIGxvZzogcHJpbnQKIH0KIAor
dGVzdExpc3QgPSBbInJpY2hhcmRzLXdhc20iXTsKKwogaWYgKHR5cGVvZiB0ZXN0TGlzdCA9PT0g
InVuZGVmaW5lZCIpCiAgICAgdGVzdExpc3QgPSB1bmRlZmluZWQ7CiAKSW5kZXg6IFBlcmZvcm1h
bmNlVGVzdHMvSmV0U3RyZWFtMi93YXNtL3JpY2hhcmRzLmpzCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFBlcmZv
cm1hbmNlVGVzdHMvSmV0U3RyZWFtMi93YXNtL3JpY2hhcmRzLmpzCShyZXZpc2lvbiAyNDM3NjEp
CisrKyBQZXJmb3JtYW5jZVRlc3RzL0pldFN0cmVhbTIvd2FzbS9yaWNoYXJkcy5qcwkod29ya2lu
ZyBjb3B5KQpAQCAtOTQ2LDcgKzk0Niw4IEBAIHZhciBfbWVtc2V0ID0gTW9kdWxlWyJfbWVtc2V0
Il0gPSAoZnVuY3QKIHZhciBfc2JyayA9IE1vZHVsZVsiX3NicmsiXSA9IChmdW5jdGlvbigpIHsK
ICByZXR1cm4gTW9kdWxlWyJhc20iXVsiX3NicmsiXS5hcHBseShudWxsLCBhcmd1bWVudHMpOwog
fSk7Ci12YXIgX3NjaGVkdWxlSXRlciA9IE1vZHVsZVsiX3NjaGVkdWxlSXRlciJdID0gKGZ1bmN0
aW9uKCkgewordmFyIF9zY2hlZHVsZUl0ZXIgPSBNb2R1bGVbIl9zY2hlZHVsZUl0ZXIiXSA9IChm
dW5jdGlvbiBmb29CYXJCYXooKSB7CisgLy9yZXR1cm4gTW9kdWxlWyJhc20iXVsiX3NjaGVkdWxl
SXRlciJdKCk7CiAgcmV0dXJuIE1vZHVsZVsiYXNtIl1bIl9zY2hlZHVsZUl0ZXIiXS5hcHBseShu
dWxsLCBhcmd1bWVudHMpOwogfSk7CiB2YXIgX3NldHVwID0gTW9kdWxlWyJfc2V0dXAiXSA9IChm
dW5jdGlvbigpIHsKQEAgLTExMDYsOCArMTEwNyw5IEBAIGZ1bmN0aW9uIHJ1blJpY2hhcmRzKCkg
ewogICAgIGZvciAobGV0IGkgPSAwOyBpIDwgNDsgKytpKSB7CiAgICAgICAgIE1vZHVsZS5fc2V0
dXAoKTsKICAgICAgICAgd2hpbGUgKHNjaGVkdWxlSXRlcigpKSB7IH0KLSAgICAgICAgaWYgKE1v
ZHVsZS5fZ2V0UXBrdGNvdW50KCkgIT09IDIzMjY0MTAgfHwgTW9kdWxlLl9nZXRIb2xkY291bnQo
KSAhPT0gOTMwNTYzKQorICAgICAgICBpZiAoTW9kdWxlLl9nZXRRcGt0Y291bnQoKSAhPT0gMjMy
NjQxMCB8fCBNb2R1bGUuX2dldEhvbGRjb3VudCgpICE9PSA5MzA1NjMpIHsKKyAgICAgICAgICAg
IHByaW50KCJCYWQgcmVzdWx0OiAiLCBNb2R1bGUuX2dldFFwa3Rjb3VudCgpLCAiICIsIE1vZHVs
ZS5fZ2V0SG9sZGNvdW50KCkpOwogICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJCYWQgcmlj
aGFyZHMgcmVzdWx0ISIpOworICAgICAgICB9CiAgICAgfQogfQotCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyQ29kZVJlZi5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJDb2RlUmVm
LmgJKHJldmlzaW9uIDI0Mzc2MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIv
TWFjcm9Bc3NlbWJsZXJDb2RlUmVmLmgJKHdvcmtpbmcgY29weSkKQEAgLTM4MCw2ICszODAsMTQg
QEAgcHVibGljOgogICAgICAgICBBU1NFUlQobV9leGVjdXRhYmxlTWVtb3J5LT5zdGFydCgpKTsK
ICAgICAgICAgQVNTRVJUKG1fY29kZVB0cik7CiAgICAgfQorCisgICAgdGVtcGxhdGU8UHRyVGFn
IG90aGVyVGFnPgorICAgIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiYgb3BlcmF0b3I9KGNvbnN0IE1h
Y3JvQXNzZW1ibGVyQ29kZVJlZjxvdGhlclRhZz4mIG90aGVyQ29kZVJlZikKKyAgICB7CisgICAg
ICAgIG1fY29kZVB0ciA9IE1hY3JvQXNzZW1ibGVyQ29kZVB0cjx0YWc+OjpjcmVhdGVGcm9tRXhl
Y3V0YWJsZUFkZHJlc3Mob3RoZXJDb2RlUmVmLmNvZGUoKS50ZW1wbGF0ZSByZXRhZ2dlZEV4ZWN1
dGFibGVBZGRyZXNzPHRhZz4oKSk7CisgICAgICAgIG1fZXhlY3V0YWJsZU1lbW9yeSA9IG90aGVy
Q29kZVJlZi5tX2V4ZWN1dGFibGVNZW1vcnk7CisgICAgICAgIHJldHVybiAqdGhpczsKKyAgICB9
CiAgICAgCiAgICAgLy8gVXNlIHRoaXMgb25seSB3aGVuIHlvdSBrbm93IHRoYXQgdGhlIGNvZGVQ
dHIgcmVmZXJzIHRvIGNvZGUgdGhhdCBpcwogICAgIC8vIGFscmVhZHkgYmVpbmcga2VwdCBhbGl2
ZSB0aHJvdWdoIHNvbWUgb3RoZXIgbWVhbnMuIFR5cGljYWxseSB0aGlzIG1lYW5zCkBAIC00NDMs
OSArNDUxLDkgQEAgcHVibGljOgogcHJpdmF0ZToKICAgICB0ZW1wbGF0ZTxQdHJUYWcgb3RoZXJU
YWc+CiAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmKGNvbnN0IE1hY3JvQXNzZW1ibGVyQ29kZVJl
ZjxvdGhlclRhZz4mIG90aGVyQ29kZVJlZikKLSAgICAgICAgOiBtX2NvZGVQdHIoTWFjcm9Bc3Nl
bWJsZXJDb2RlUHRyPHRhZz46OmNyZWF0ZUZyb21FeGVjdXRhYmxlQWRkcmVzcyhvdGhlckNvZGVS
ZWYuY29kZSgpLnRlbXBsYXRlIHJldGFnZ2VkRXhlY3V0YWJsZUFkZHJlc3M8dGFnPigpKSkKLSAg
ICAgICAgLCBtX2V4ZWN1dGFibGVNZW1vcnkob3RoZXJDb2RlUmVmLm1fZXhlY3V0YWJsZU1lbW9y
eSkKLSAgICB7IH0KKyAgICB7CisgICAgICAgICp0aGlzID0gb3RoZXJDb2RlUmVmOworICAgIH0K
IAogICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0cjx0YWc+IG1fY29kZVB0cjsKICAgICBSZWZQdHI8
RXhlY3V0YWJsZU1lbW9yeUhhbmRsZT4gbV9leGVjdXRhYmxlTWVtb3J5OwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHAJKHJldmlzaW9u
IDI0Mzc2MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNzM2LDYgKzE3MzYsMTUgQEAgQnl0ZUNvZGVQYXJzZXI6
OkNhbGxPcHRpbWl6YXRpb25SZXN1bHQgQgogICAgICAgICB9CiAgICAgfTsKIAorICAgIC8qCisg
ICAgaWYgKE5hdGl2ZUV4ZWN1dGFibGUqIGV4ZWN1dGFibGUgPSBjYWxsZWUubmF0aXZlRXhlY3V0
YWJsZSgpKSB7CisgICAgICAgIGRhdGFMb2dMbigiTmF0aXZlIGV4ZWN1dGFibGVyIDogIiwgUmF3
UG9pbnRlcihleGVjdXRhYmxlKSk7CisgICAgICAgIGlmIChXZWJBc3NlbWJseUZ1bmN0aW9uKiBm
ID0gZXhlY3V0YWJsZS0+d2ViQXNzZW1ibHlGdW5jdGlvbigpKSB7CisgICAgICAgICAgICBkYXRh
TG9nTG4oIkhhdmUgd2FzbSBmdW5jdGlvbiE6ICIsIFJhd1BvaW50ZXIoZikpOworICAgICAgICB9
CisgICAgfQorICAgICovCisKICAgICBpZiAoSW50ZXJuYWxGdW5jdGlvbiogZnVuY3Rpb24gPSBj
YWxsZWUuaW50ZXJuYWxGdW5jdGlvbigpKSB7CiAgICAgICAgIGlmIChoYW5kbGVDb25zdGFudElu
dGVybmFsRnVuY3Rpb24oY2FsbFRhcmdldE5vZGUsIHJlc3VsdCwgZnVuY3Rpb24sIHJlZ2lzdGVy
T2Zmc2V0LCBhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcywgc3BlY2lhbGl6YXRpb25LaW5kLCBw
cmVkaWN0aW9uLCBpbnNlcnRDaGVja3NXaXRoQWNjb3VudGluZykpIHsKICAgICAgICAgICAgIGVu
ZFNwZWNpYWxDYXNlKCk7CkBAIC0xODAwLDYgKzE4MDksMTQgQEAgYm9vbCBCeXRlQ29kZVBhcnNl
cjo6aGFuZGxlVmFyYXJnc0lubGluaQogICAgICAgICBtYW5kYXRvcnlNaW5pbXVtID0gZnVuY3Rp
b25FeGVjdXRhYmxlLT5wYXJhbWV0ZXJDb3VudCgpOwogICAgIGVsc2UKICAgICAgICAgbWFuZGF0
b3J5TWluaW11bSA9IDA7CisKKyAgICAvKgorICAgIGlmIChOYXRpdmVFeGVjdXRhYmxlKiBleGVj
dXRhYmxlID0gY2FsbFZhcmlhbnQubmF0aXZlRXhlY3V0YWJsZSgpKSB7CisgICAgICAgIGlmIChX
ZWJBc3NlbWJseUZ1bmN0aW9uKiBmID0gZXhlY3V0YWJsZS0+d2ViQXNzZW1ibHlGdW5jdGlvbigp
KSB7CisgICAgICAgICAgICBkYXRhTG9nTG4oIkhhdmUgd2FzbSBmdW5jdGlvbiB2YXJhcmdzOiAi
LCBSYXdQb2ludGVyKGYpKTsKKyAgICAgICAgfQorICAgIH0KKyAgICAqLwogICAgIAogICAgIC8v
IGluY2x1ZGVzICJ0aGlzIgogICAgIHVuc2lnbmVkIG1heE51bUFyZ3VtZW50cyA9IHN0ZDo6bWF4
KGNhbGxMaW5rU3RhdHVzLm1heE51bUFyZ3VtZW50cygpLCBtYW5kYXRvcnlNaW5pbXVtICsgMSk7
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvSW50ZXJwcmV0ZXIuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9JbnRlcnBy
ZXRlci5jcHAJKHJldmlzaW9uIDI0Mzc2MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRl
cnByZXRlci9JbnRlcnByZXRlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU0OSw2ICs1NDksMTMg
QEAgcHVibGljOgogICAgICAgICAgICAgfQogICAgICAgICB9CiAKKyAgICAgICAgaWYgKHZpc2l0
b3ItPmNhbGxlZSgpLmlzQ2VsbCgpKSB7CisgICAgICAgICAgICBpZiAoYXV0byogaWNDYWxsZWUg
PSBqc0R5bmFtaWNDYXN0PEpTVG9XYXNtSUNDYWxsZWUqPihtX3ZtLCB2aXNpdG9yLT5jYWxsZWUo
KS5hc0NlbGwoKSkpIHsKKyAgICAgICAgICAgICAgICAvL2RhdGFMb2dMbigiVW53aW5kaW5nIHBh
c3QgY2ZyPSIsIFJhd1BvaW50ZXIobV9jYWxsRnJhbWUpLCAiIHByaW9yIGluc3RhbmNlID0gIiwg
UmF3UG9pbnRlcihpY0NhbGxlZS0+ZnVuY3Rpb24oKS0+cHJldmlvdXNJbnN0YW5jZShtX2NhbGxG
cmFtZSkpKTsKKyAgICAgICAgICAgICAgICBtX3ZtLndhc21Db250ZXh0LnN0b3JlKGljQ2FsbGVl
LT5mdW5jdGlvbigpLT5wcmV2aW91c0luc3RhbmNlKG1fY2FsbEZyYW1lKSwgbV92bS5zb2Z0U3Rh
Y2tMaW1pdCgpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCiAgICAgICAgIG5vdGlmeURl
YnVnZ2VyT2ZVbndpbmRpbmcobV92bSwgbV9jYWxsRnJhbWUpOwogCiAgICAgICAgIGNvcHlDYWxs
ZWVTYXZlc1RvRW50cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVyKHZpc2l0b3IpOwpAQCAtNTY0LDcg
KzU3MSw3IEBAIHByaXZhdGU6CiAgICAgdm9pZCBjb3B5Q2FsbGVlU2F2ZXNUb0VudHJ5RnJhbWVD
YWxsZWVTYXZlc0J1ZmZlcihTdGFja1Zpc2l0b3ImIHZpc2l0b3IpIGNvbnN0CiAgICAgewogI2lm
ICFFTkFCTEUoQ19MT09QKSAmJiBOVU1CRVJfT0ZfQ0FMTEVFX1NBVkVTX1JFR0lTVEVSUyA+IDAK
LSAgICAgICAgY29uc3QgUmVnaXN0ZXJBdE9mZnNldExpc3QqIGN1cnJlbnRDYWxsZWVTYXZlcyA9
IHZpc2l0b3ItPmNhbGxlZVNhdmVSZWdpc3RlcnMoKTsKKyAgICAgICAgT3B0aW9uYWw8UmVnaXN0
ZXJBdE9mZnNldExpc3Q+IGN1cnJlbnRDYWxsZWVTYXZlcyA9IHZpc2l0b3ItPmNhbGxlZVNhdmVS
ZWdpc3RlcnNGb3JVbndpbmRpbmcoKTsKIAogICAgICAgICBpZiAoIWN1cnJlbnRDYWxsZWVTYXZl
cykKICAgICAgICAgICAgIHJldHVybjsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRl
cnByZXRlci9TdGFja1Zpc2l0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9pbnRlcnByZXRlci9TdGFja1Zpc2l0b3IuY3BwCShyZXZpc2lvbiAyNDM3NjEpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvU3RhY2tWaXNpdG9yLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMzMsNiArMzMsNyBAQAogI2luY2x1ZGUgIkpTQ0lubGluZXMuaCIKICNpbmNs
dWRlICJXYXNtQ2FsbGVlLmgiCiAjaW5jbHVkZSAiV2FzbUluZGV4T3JOYW1lLmgiCisjaW5jbHVk
ZSAiV2ViQXNzZW1ibHlGdW5jdGlvbi5oIgogI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0J1aWxk
ZXIuaD4KIAogbmFtZXNwYWNlIEpTQyB7CkBAIC0yNTIsMTAgKzI1MywxMCBAQCBTdGFja1Zpc2l0
b3I6OkZyYW1lOjpDb2RlVHlwZSBTdGFja1Zpc2l0CiAgICAgcmV0dXJuIENvZGVUeXBlOjpHbG9i
YWw7CiB9CiAKLWNvbnN0IFJlZ2lzdGVyQXRPZmZzZXRMaXN0KiBTdGFja1Zpc2l0b3I6OkZyYW1l
OjpjYWxsZWVTYXZlUmVnaXN0ZXJzKCkKK09wdGlvbmFsPFJlZ2lzdGVyQXRPZmZzZXRMaXN0PiBT
dGFja1Zpc2l0b3I6OkZyYW1lOjpjYWxsZWVTYXZlUmVnaXN0ZXJzRm9yVW53aW5kaW5nKCkKIHsK
ICAgICBpZiAoaXNJbmxpbmVkRnJhbWUoKSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAg
ICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAKICNpZiAhRU5BQkxFKENfTE9PUCkgJiYgTlVNQkVS
X09GX0NBTExFRV9TQVZFU19SRUdJU1RFUlMgPiAwCiAKQEAgLTI2MywxOSArMjY0LDI0IEBAIGNv
bnN0IFJlZ2lzdGVyQXRPZmZzZXRMaXN0KiBTdGFja1Zpc2l0b3IKICAgICBpZiAoaXNXYXNtRnJh
bWUoKSkgewogICAgICAgICBpZiAoY2FsbGVlKCkuaXNDZWxsKCkpIHsKICAgICAgICAgICAgIFJF
TEVBU0VfQVNTRVJUKGlzV2ViQXNzZW1ibHlUb0pTQ2FsbGVlKGNhbGxlZSgpLmFzQ2VsbCgpKSk7
Ci0gICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgICAgIHJldHVybiBXVEY6Om51
bGxvcHQ7CiAgICAgICAgIH0KICAgICAgICAgV2FzbTo6Q2FsbGVlKiB3YXNtQ2FsbGVlID0gY2Fs
bGVlKCkuYXNXYXNtQ2FsbGVlKCk7Ci0gICAgICAgIHJldHVybiB3YXNtQ2FsbGVlLT5jYWxsZWVT
YXZlUmVnaXN0ZXJzKCk7CisgICAgICAgIHJldHVybiAqd2FzbUNhbGxlZS0+Y2FsbGVlU2F2ZVJl
Z2lzdGVycygpOworICAgIH0KKworICAgIGlmIChjYWxsZWUoKS5pc0NlbGwoKSkgeworICAgICAg
ICBpZiAoYXV0byogaWNDYWxsZWUgPSBqc0R5bmFtaWNDYXN0PEpTVG9XYXNtSUNDYWxsZWUqPigq
Y2FsbGVlKCkuYXNDZWxsKCktPnZtKCksIGNhbGxlZSgpLmFzQ2VsbCgpKSkKKyAgICAgICAgICAg
IHJldHVybiBpY0NhbGxlZS0+ZnVuY3Rpb24oKS0+dXNlZENhbGxlZVNhdmVSZWdpc3RlcnMoKTsK
ICAgICB9CiAjZW5kaWYgLy8gRU5BQkxFKFdFQkFTU0VNQkxZKQogCiAgICAgaWYgKENvZGVCbG9j
ayogY29kZUJsb2NrID0gdGhpcy0+Y29kZUJsb2NrKCkpCi0gICAgICAgIHJldHVybiBjb2RlQmxv
Y2stPmNhbGxlZVNhdmVSZWdpc3RlcnMoKTsKKyAgICAgICAgcmV0dXJuICpjb2RlQmxvY2stPmNh
bGxlZVNhdmVSZWdpc3RlcnMoKTsKIAogI2VuZGlmIC8vICFFTkFCTEUoQ19MT09QKSAmJiBOVU1C
RVJfT0ZfQ0FMTEVFX1NBVkVTX1JFR0lTVEVSUyA+IDAKIAotICAgIHJldHVybiBudWxscHRyOwor
ICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiB9CiAKIFN0cmluZyBTdGFja1Zpc2l0b3I6OkZyYW1l
OjpmdW5jdGlvbk5hbWUoKSBjb25zdApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVy
cHJldGVyL1N0YWNrVmlzaXRvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pbnRlcnByZXRlci9TdGFja1Zpc2l0b3IuaAkocmV2aXNpb24gMjQzNzYxKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL1N0YWNrVmlzaXRvci5oCSh3b3JraW5nIGNvcHkp
CkBAIC05NCw3ICs5NCw3IEBAIHB1YmxpYzoKICAgICAgICAgYm9vbCBoYXNMaW5lQW5kQ29sdW1u
SW5mbygpIGNvbnN0OwogICAgICAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lkIGNvbXB1dGVMaW5l
QW5kQ29sdW1uKHVuc2lnbmVkJiBsaW5lLCB1bnNpZ25lZCYgY29sdW1uKSBjb25zdDsKIAotICAg
ICAgICBjb25zdCBSZWdpc3RlckF0T2Zmc2V0TGlzdCogY2FsbGVlU2F2ZVJlZ2lzdGVycygpOwor
ICAgICAgICBPcHRpb25hbDxSZWdpc3RlckF0T2Zmc2V0TGlzdD4gY2FsbGVlU2F2ZVJlZ2lzdGVy
c0ZvclVud2luZGluZygpOwogCiAgICAgICAgIENsb25lZEFyZ3VtZW50cyogY3JlYXRlQXJndW1l
bnRzKCk7CiAgICAgICAgIENhbGxGcmFtZSogY2FsbEZyYW1lKCkgY29uc3QgeyByZXR1cm4gbV9j
YWxsRnJhbWU7IH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0aW9u
cy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRp
b25zLmNwcAkocmV2aXNpb24gMjQzNzYxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9K
SVRPcGVyYXRpb25zLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzYsNiArNzYsNyBAQAogI2luY2x1
ZGUgIlRodW5rR2VuZXJhdG9ycy5oIgogI2luY2x1ZGUgIlR5cGVQcm9maWxlckxvZy5oIgogI2lu
Y2x1ZGUgIlZNSW5saW5lcy5oIgorI2luY2x1ZGUgIldlYkFzc2VtYmx5RnVuY3Rpb24uaCIKICNp
bmNsdWRlIDx3dGYvSW5saW5lQVNNLmg+CiAKIG5hbWVzcGFjZSBKU0MgewpAQCAtMTAzNiw5ICsx
MDM3LDE5IEBAIFNsb3dQYXRoUmV0dXJuVHlwZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGkKIAogICAg
IE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxKU0VudHJ5UHRyVGFnPiBjb2RlUHRyOwogICAgIENvZGVC
bG9jayogY29kZUJsb2NrID0gbnVsbHB0cjsKLSAgICBpZiAoZXhlY3V0YWJsZS0+aXNIb3N0RnVu
Y3Rpb24oKSkKLSAgICAgICAgY29kZVB0ciA9IGV4ZWN1dGFibGUtPmVudHJ5cG9pbnRGb3Ioa2lu
ZCwgTXVzdENoZWNrQXJpdHkpOwotICAgIGVsc2UgeworICAgIGlmIChleGVjdXRhYmxlLT5pc0hv
c3RGdW5jdGlvbigpKSB7CisjaWYgRU5BQkxFKFdFQkFTU0VNQkxZKQorICAgICAgICBpZiAoa2lu
ZCA9PSBDb2RlRm9yQ2FsbCkgeworICAgICAgICAgICAgaWYgKGF1dG8qIHdhc21GdW5jdGlvbiA9
IGpzRHluYW1pY0Nhc3Q8V2ViQXNzZW1ibHlGdW5jdGlvbio+KCp2bSwgY2FsbGVlKSkgeworICAg
ICAgICAgICAgICAgIGNvZGVQdHIgPSB3YXNtRnVuY3Rpb24tPmpzQ2FsbEVudHJ5cG9pbnQoKTsK
KyAgICAgICAgICAgICAgICBkYXRhTG9nTG4oIk1vbm9tb3JwaGljIElDaW5nIHdhc20hIik7Cisg
ICAgICAgICAgICB9CisgICAgICAgIH0KKyNlbmRpZgorCisgICAgICAgIGlmICghY29kZVB0cikK
KyAgICAgICAgICAgIGNvZGVQdHIgPSBleGVjdXRhYmxlLT5lbnRyeXBvaW50Rm9yKGtpbmQsIE11
c3RDaGVja0FyaXR5KTsKKyAgICB9IGVsc2UgewogICAgICAgICBGdW5jdGlvbkV4ZWN1dGFibGUq
IGZ1bmN0aW9uRXhlY3V0YWJsZSA9IHN0YXRpY19jYXN0PEZ1bmN0aW9uRXhlY3V0YWJsZSo+KGV4
ZWN1dGFibGUpOwogCiAgICAgICAgIGF1dG8gaGFuZGxlVGhyb3dFeGNlcHRpb24gPSBbJl0gKCkg
ewpAQCAtMTA2NCw2ICsxMDc1LDcgQEAgU2xvd1BhdGhSZXR1cm5UeXBlIEpJVF9PUEVSQVRJT04g
b3BlcmF0aQogICAgICAgICAgICAgYXJpdHkgPSBBcml0eUNoZWNrTm90UmVxdWlyZWQ7CiAgICAg
ICAgIGNvZGVQdHIgPSBmdW5jdGlvbkV4ZWN1dGFibGUtPmVudHJ5cG9pbnRGb3Ioa2luZCwgYXJp
dHkpOwogICAgIH0KKwogICAgIGlmICghY2FsbExpbmtJbmZvLT5zZWVuT25jZSgpKQogICAgICAg
ICBjYWxsTGlua0luZm8tPnNldFNlZW4oKTsKICAgICBlbHNlCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L1JlcGF0Y2guY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvUmVwYXRjaC5jcHAJKHJldmlzaW9uIDI0Mzc2MSkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvUmVwYXRjaC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTk3NSw3ICs5NzUsNyBA
QCB2b2lkIGxpbmtQb2x5bW9ycGhpY0NhbGwoCiAgICAgaWYgKFBvbHltb3JwaGljQ2FsbFN0dWJS
b3V0aW5lKiBzdHViID0gY2FsbExpbmtJbmZvLnN0dWIoKSkKICAgICAgICAgbGlzdCA9IHN0dWIt
PnZhcmlhbnRzKCk7CiAgICAgZWxzZSBpZiAoSlNPYmplY3QqIG9sZENhbGxlZSA9IGNhbGxMaW5r
SW5mby5jYWxsZWUoKSkKLSAgICAgICAgbGlzdCA9IENhbGxWYXJpYW50TGlzdHsgQ2FsbFZhcmlh
bnQob2xkQ2FsbGVlKSB9OworICAgICAgICBsaXN0ID0gQ2FsbFZhcmlhbnRMaXN0IHsgQ2FsbFZh
cmlhbnQob2xkQ2FsbGVlKSB9OwogICAgIAogICAgIGxpc3QgPSB2YXJpYW50TGlzdFdpdGhWYXJp
YW50KGxpc3QsIG5ld1ZhcmlhbnQpOwogCkBAIC0xMTM3LDcgKzExMzcsMjMgQEAgdm9pZCBsaW5r
UG9seW1vcnBoaWNDYWxsKAogICAgICAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8SlNFbnRyeVB0
clRhZz4gY29kZVB0cjsKICAgICAgICAgaWYgKHZhcmlhbnQuZXhlY3V0YWJsZSgpKSB7CiAgICAg
ICAgICAgICBBU1NFUlQodmFyaWFudC5leGVjdXRhYmxlKCktPmhhc0pJVENvZGVGb3JDYWxsKCkp
OwotICAgICAgICAgICAgY29kZVB0ciA9IHZhcmlhbnQuZXhlY3V0YWJsZSgpLT5nZW5lcmF0ZWRK
SVRDb2RlRm9yQ2FsbCgpLT5hZGRyZXNzRm9yQ2FsbChBcml0eUNoZWNrTm90UmVxdWlyZWQpOwor
CisjaWYgRU5BQkxFKFdFQkFTU0VNQkxZKQorICAgICAgICAgICAgaWYgKGNhbGxMaW5rSW5mby5z
cGVjaWFsaXphdGlvbktpbmQoKSA9PSBDb2RlRm9yQ2FsbCkgeworICAgICAgICAgICAgICAgIGlm
IChKU0Z1bmN0aW9uKiBmdW5jdGlvbiA9IHZhcmlhbnQuZnVuY3Rpb24oKSkgeworICAgICAgICAg
ICAgICAgICAgICBpZiAoYXV0byogd2FzbUZ1bmN0aW9uID0ganNEeW5hbWljQ2FzdDxXZWJBc3Nl
bWJseUZ1bmN0aW9uKj4odm0sIGZ1bmN0aW9uKSkgeworICAgICAgICAgICAgICAgICAgICAgICAg
Y29kZVB0ciA9IHdhc21GdW5jdGlvbi0+anNDYWxsRW50cnlwb2ludCgpOworICAgICAgICAgICAg
ICAgICAgICAgICAgaWYgKGNvZGVQdHIpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0
YUxvZ0xuKCJQb2x5bW9ycGhpYyBJQ2luZyB3YXNtIik7CisgICAgICAgICAgICAgICAgICAgICAg
ICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YUxvZ0xuKCJDb3VsZCBub3Qg
Z2VuZXJhdGUgd2FzbSBjb2RlIHBvbHltb3JwaGljIElDISIpOworICAgICAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorI2VuZGlmCisKKyAgICAgICAg
ICAgIGlmICghY29kZVB0cikKKyAgICAgICAgICAgICAgICBjb2RlUHRyID0gdmFyaWFudC5leGVj
dXRhYmxlKCktPmdlbmVyYXRlZEpJVENvZGVGb3JDYWxsKCktPmFkZHJlc3NGb3JDYWxsKEFyaXR5
Q2hlY2tOb3RSZXF1aXJlZCk7CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBBU1NFUlQo
dmFyaWFudC5pbnRlcm5hbEZ1bmN0aW9uKCkpOwogICAgICAgICAgICAgY29kZVB0ciA9IHZtLmdl
dENUSUludGVybmFsRnVuY3Rpb25UcmFtcG9saW5lRm9yKENvZGVGb3JDYWxsKTsKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL05hdGl2ZUV4ZWN1dGFibGUuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL05hdGl2ZUV4ZWN1dGFibGUuY3Bw
CShyZXZpc2lvbiAyNDM3NjEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9OYXRp
dmVFeGVjdXRhYmxlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzQsNiArMzQsNyBAQAogI2luY2x1
ZGUgIlBhcnNlci5oIgogI2luY2x1ZGUgIlR5cGVQcm9maWxlci5oIgogI2luY2x1ZGUgIlZNSW5s
aW5lcy5oIgorI2luY2x1ZGUgIldlYkFzc2VtYmx5RnVuY3Rpb24uaCIKICNpbmNsdWRlIDx3dGYv
Q29tbWFQcmludGVyLmg+CiAKIG5hbWVzcGFjZSBKU0MgewpAQCAtNDIsOCArNDMsNyBAQCBjb25z
dCBDbGFzc0luZm8gTmF0aXZlRXhlY3V0YWJsZTo6c19pbmZvCiAKIE5hdGl2ZUV4ZWN1dGFibGUq
IE5hdGl2ZUV4ZWN1dGFibGU6OmNyZWF0ZShWTSYgdm0sIFJlZjxKSVRDb2RlPiYmIGNhbGxUaHVu
aywgVGFnZ2VkTmF0aXZlRnVuY3Rpb24gZnVuY3Rpb24sIFJlZjxKSVRDb2RlPiYmIGNvbnN0cnVj
dFRodW5rLCBUYWdnZWROYXRpdmVGdW5jdGlvbiBjb25zdHJ1Y3RvciwgY29uc3QgU3RyaW5nJiBu
YW1lKQogewotICAgIE5hdGl2ZUV4ZWN1dGFibGUqIGV4ZWN1dGFibGU7Ci0gICAgZXhlY3V0YWJs
ZSA9IG5ldyAoTm90TnVsbCwgYWxsb2NhdGVDZWxsPE5hdGl2ZUV4ZWN1dGFibGU+KHZtLmhlYXAp
KSBOYXRpdmVFeGVjdXRhYmxlKHZtLCBmdW5jdGlvbiwgY29uc3RydWN0b3IpOworICAgIE5hdGl2
ZUV4ZWN1dGFibGUqIGV4ZWN1dGFibGUgPSBuZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxOYXRp
dmVFeGVjdXRhYmxlPih2bS5oZWFwKSkgTmF0aXZlRXhlY3V0YWJsZSh2bSwgZnVuY3Rpb24sIGNv
bnN0cnVjdG9yKTsKICAgICBleGVjdXRhYmxlLT5maW5pc2hDcmVhdGlvbih2bSwgV1RGTW92ZShj
YWxsVGh1bmspLCBXVEZNb3ZlKGNvbnN0cnVjdFRodW5rKSwgbmFtZSk7CiAgICAgcmV0dXJuIGV4
ZWN1dGFibGU7CiB9CkBAIC04MCw2ICs4MCwxOCBAQCBOYXRpdmVFeGVjdXRhYmxlOjpOYXRpdmVF
eGVjdXRhYmxlKFZNJiB2CiB7CiB9CiAKK3ZvaWQgTmF0aXZlRXhlY3V0YWJsZTo6dmlzaXRDaGls
ZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQoreworICAgIE5hdGl2ZUV4
ZWN1dGFibGUqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8TmF0aXZlRXhlY3V0YWJsZSo+KGNlbGwpOwor
ICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKKworICAg
IEJhc2U6OnZpc2l0Q2hpbGRyZW4odGhpc09iamVjdCwgdmlzaXRvcik7CisKKyNpZiBFTkFCTEUo
V0VCQVNTRU1CTFkpCisgICAgdmlzaXRvci5hcHBlbmQodGhpc09iamVjdC0+bV93ZWJBc3NlbWJs
eUZ1bmN0aW9uKTsKKyNlbmRpZgorfQorCiBjb25zdCBET01KSVQ6OlNpZ25hdHVyZSogTmF0aXZl
RXhlY3V0YWJsZTo6c2lnbmF0dXJlRm9yKENvZGVTcGVjaWFsaXphdGlvbktpbmQga2luZCkgY29u
c3QKIHsKICAgICBBU1NFUlQoaGFzSklUQ29kZUZvcihraW5kKSk7CkBAIC0xMDAsNCArMTEyLDYg
QEAgQ29kZUJsb2NrSGFzaCBOYXRpdmVFeGVjdXRhYmxlOjpoYXNoRm9yKAogICAgIHJldHVybiBD
b2RlQmxvY2tIYXNoKGJpdHdpc2VfY2FzdDx1aW50cHRyX3Q+KG1fY29uc3RydWN0b3IpKTsKIH0K
IAordm9pZCBOYXRpdmVFeGVjdXRhYmxlOjpzZXRXZWJBc3NlbWJseUZ1bmN0aW9uKFZNJiB2bSwg
V2ViQXNzZW1ibHlGdW5jdGlvbiogZnVuY3Rpb24pIHsgbV93ZWJBc3NlbWJseUZ1bmN0aW9uLnNl
dCh2bSwgdGhpcywgZnVuY3Rpb24pOyB9CisKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTmF0aXZlRXhlY3V0YWJsZS5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL05hdGl2ZUV4ZWN1dGFibGUuaAkocmV2
aXNpb24gMjQzNzYxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTmF0aXZlRXhl
Y3V0YWJsZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOSw2ICsyOSwxMCBAQAogCiBuYW1lc3BhY2Ug
SlNDIHsKIAorI2lmIEVOQUJMRShXRUJBU1NFTUJMWSkKK2NsYXNzIFdlYkFzc2VtYmx5RnVuY3Rp
b247CisjZW5kaWYKKwogY2xhc3MgTmF0aXZlRXhlY3V0YWJsZSBmaW5hbCA6IHB1YmxpYyBFeGVj
dXRhYmxlQmFzZSB7CiAgICAgZnJpZW5kIGNsYXNzIEpJVDsKICAgICBmcmllbmQgY2xhc3MgTExJ
bnRPZmZzZXRzRXh0cmFjdG9yOwpAQCAtNzYsMTYgKzgwLDI3IEBAIHB1YmxpYzoKICAgICBjb25z
dCBET01KSVQ6OlNpZ25hdHVyZSogc2lnbmF0dXJlRm9yKENvZGVTcGVjaWFsaXphdGlvbktpbmQp
IGNvbnN0OwogICAgIEludHJpbnNpYyBpbnRyaW5zaWMoKSBjb25zdDsKIAorCisjaWYgRU5BQkxF
KFdFQkFTU0VNQkxZKQorICAgIHZvaWQgc2V0V2ViQXNzZW1ibHlGdW5jdGlvbihWTSYsIFdlYkFz
c2VtYmx5RnVuY3Rpb24qKTsKKyAgICBXZWJBc3NlbWJseUZ1bmN0aW9uKiB3ZWJBc3NlbWJseUZ1
bmN0aW9uKCkgeyByZXR1cm4gbV93ZWJBc3NlbWJseUZ1bmN0aW9uLmdldCgpOyB9CisjZW5kaWYK
KwogcHJvdGVjdGVkOgogICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oVk0mLCBSZWY8SklUQ29kZT4m
JiBjYWxsVGh1bmssIFJlZjxKSVRDb2RlPiYmIGNvbnN0cnVjdFRodW5rLCBjb25zdCBTdHJpbmcm
IG5hbWUpOwogCiBwcml2YXRlOgorICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxs
KiwgU2xvdFZpc2l0b3ImKTsKKwogICAgIE5hdGl2ZUV4ZWN1dGFibGUoVk0mLCBUYWdnZWROYXRp
dmVGdW5jdGlvbiwgVGFnZ2VkTmF0aXZlRnVuY3Rpb24gY29uc3RydWN0b3IpOwogCiAgICAgVGFn
Z2VkTmF0aXZlRnVuY3Rpb24gbV9mdW5jdGlvbjsKICAgICBUYWdnZWROYXRpdmVGdW5jdGlvbiBt
X2NvbnN0cnVjdG9yOwogCiAgICAgU3RyaW5nIG1fbmFtZTsKKyNpZiBFTkFCTEUoV0VCQVNTRU1C
TFkpCisgICAgV3JpdGVCYXJyaWVyPFdlYkFzc2VtYmx5RnVuY3Rpb24+IG1fd2ViQXNzZW1ibHlG
dW5jdGlvbjsKKyNlbmRpZgogfTsKIAogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtT01HUGxhbi5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU9NR1BsYW4uY3BwCShyZXZpc2lvbiAyNDM3NjEpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtT01HUGxhbi5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTEzOCw3ICsxMzgsNyBAQCB2b2lkIE9NR1BsYW46OndvcmsoQ29tcGlsYXRpb25FZmZv
cnQpCiAgICAgewogICAgICAgICBMb2NrSG9sZGVyIGhvbGRlcihtX2NvZGVCbG9jay0+bV9sb2Nr
KTsKIAotICAgICAgICBhdXRvIHJlcGF0Y2hDYWxscyA9IFsmXSAoY29uc3QgVmVjdG9yPFVubGlu
a2VkV2FzbVRvV2FzbUNhbGw+JiAgY2FsbHNpdGVzKSB7CisgICAgICAgIGF1dG8gcmVwYXRjaENh
bGxzID0gWyZdIChjb25zdCBWZWN0b3I8VW5saW5rZWRXYXNtVG9XYXNtQ2FsbD4mIGNhbGxzaXRl
cykgewogICAgICAgICAgICAgZm9yIChhdXRvJiBjYWxsIDogY2FsbHNpdGVzKSB7CiAgICAgICAg
ICAgICAgICAgZGF0YUxvZ0xuSWYoV2FzbU9NR1BsYW5JbnRlcm5hbDo6dmVyYm9zZSwgIkNvbnNp
ZGVyaW5nIHJlcGF0Y2hpbmcgY2FsbCBhdDogIiwgUmF3UG9pbnRlcihjYWxsLmNhbGxMb2NhdGlv
bi5kYXRhTG9jYXRpb24oKSksICIgdGhhdCB0YXJnZXRzICIsIGNhbGwuZnVuY3Rpb25JbmRleFNw
YWNlKTsKICAgICAgICAgICAgICAgICBpZiAoY2FsbC5mdW5jdGlvbkluZGV4U3BhY2UgPT0gZnVu
Y3Rpb25JbmRleFNwYWNlKSB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9X
ZWJBc3NlbWJseUV4ZWN1dGFibGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5RXhlY3V0YWJsZS5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5RnVuY3Rpb24uY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5RnVu
Y3Rpb24uY3BwCShyZXZpc2lvbiAyNDM3NjEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2Fz
bS9qcy9XZWJBc3NlbWJseUZ1bmN0aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzYsMjMgKzM2
LDY0IEBACiAjaW5jbHVkZSAiSlNXZWJBc3NlbWJseU1lbW9yeS5oIgogI2luY2x1ZGUgIkpTV2Vi
QXNzZW1ibHlSdW50aW1lRXJyb3IuaCIKICNpbmNsdWRlICJMTEludFRodW5rcy5oIgorI2luY2x1
ZGUgIkxpbmtCdWZmZXIuaCIKICNpbmNsdWRlICJQcm90b0NhbGxGcmFtZS5oIgogI2luY2x1ZGUg
IlZNLmgiCiAjaW5jbHVkZSAiV2FzbUNhbGxlZS5oIgorI2luY2x1ZGUgIldhc21DYWxsaW5nQ29u
dmVudGlvbi5oIgogI2luY2x1ZGUgIldhc21Db250ZXh0SW5saW5lcy5oIgogI2luY2x1ZGUgIldh
c21Gb3JtYXQuaCIKICNpbmNsdWRlICJXYXNtTWVtb3J5LmgiCisjaW5jbHVkZSAiV2FzbU1lbW9y
eUluZm9ybWF0aW9uLmgiCisjaW5jbHVkZSAiV2FzbU1vZHVsZUluZm9ybWF0aW9uLmgiCiAjaW5j
bHVkZSAiV2FzbVNpZ25hdHVyZUlubGluZXMuaCIKICNpbmNsdWRlIDx3dGYvRmFzdFRMUy5oPgog
I2luY2x1ZGUgPHd0Zi9TdGFja1BvaW50ZXIuaD4KICNpbmNsdWRlIDx3dGYvU3lzdGVtVHJhY2lu
Zy5oPgogCisjaW5jbHVkZSAiTWFjcm9Bc3NlbWJsZXJQcmludGVyLmgiCisjaW5jbHVkZSAiR1BS
SW5mby5oIgorI2luY2x1ZGUgIkZQUkluZm8uaCIKKyNpbmNsdWRlICJSZWdpc3RlcklELmgiCisj
aW5jbHVkZSA8d3RmL1Njb3BlLmg+CisKIG5hbWVzcGFjZSBKU0MgewogCitjb25zdCBDbGFzc0lu
Zm8gSlNUb1dhc21JQ0NhbGxlZTo6c19pbmZvID0geyAiSlNUb1dhc21JQ0NhbGxlZSIsICZCYXNl
OjpzX2luZm8sIG51bGxwdHIsIG51bGxwdHIsIENSRUFURV9NRVRIT0RfVEFCTEUoSlNUb1dhc21J
Q0NhbGxlZSkgfTsKKworSlNUb1dhc21JQ0NhbGxlZSogSlNUb1dhc21JQ0NhbGxlZTo6Y3JlYXRl
KFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgV2ViQXNzZW1ibHlGdW5jdGlv
biogZnVuY3Rpb24pCit7CisgICAgYXV0byogc3RydWN0dXJlID0gY3JlYXRlU3RydWN0dXJlKHZt
LCBnbG9iYWxPYmplY3QsIEpTVmFsdWUoKSk7CisgICAgSlNUb1dhc21JQ0NhbGxlZSogcmVzdWx0
ID0gbmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8SlNUb1dhc21JQ0NhbGxlZT4odm0uaGVhcCkp
IEpTVG9XYXNtSUNDYWxsZWUodm0sIGdsb2JhbE9iamVjdCwgc3RydWN0dXJlKTsKKyAgICByZXN1
bHQtPmZpbmlzaENyZWF0aW9uKHZtKTsKKyAgICByZXN1bHQtPm1fZnVuY3Rpb24uc2V0KHZtLCBy
ZXN1bHQsIGZ1bmN0aW9uKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitTdHJ1Y3R1cmUqIEpT
VG9XYXNtSUNDYWxsZWU6OmNyZWF0ZVN0cnVjdHVyZShWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBn
bG9iYWxPYmplY3QsIEpTVmFsdWUgcHJvdG90eXBlKQoreworICAgIHJldHVybiBTdHJ1Y3R1cmU6
OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIFR5cGVJbmZvKEpTQ2FsbGVlVHlw
ZSwgU3RydWN0dXJlRmxhZ3MpLCBpbmZvKCkpOworfQorCit2b2lkIEpTVG9XYXNtSUNDYWxsZWU6
OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3sKKyAg
ICBKU1RvV2FzbUlDQ2FsbGVlKiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTVG9XYXNtSUNDYWxsZWUq
PihjZWxsKTsKKyAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8o
KSk7CisKKyAgICBCYXNlOjp2aXNpdENoaWxkcmVuKHRoaXNPYmplY3QsIHZpc2l0b3IpOworICAg
IHZpc2l0b3IuYXBwZW5kKHRoaXNPYmplY3QtPm1fZnVuY3Rpb24pOworfQorCiBjb25zdCBDbGFz
c0luZm8gV2ViQXNzZW1ibHlGdW5jdGlvbjo6c19pbmZvID0geyAiV2ViQXNzZW1ibHlGdW5jdGlv
biIsICZCYXNlOjpzX2luZm8sIG51bGxwdHIsIG51bGxwdHIsIENSRUFURV9NRVRIT0RfVEFCTEUo
V2ViQXNzZW1ibHlGdW5jdGlvbikgfTsKIAogc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NU
X0NBTEwgY2FsbFdlYkFzc2VtYmx5RnVuY3Rpb24oRXhlY1N0YXRlKiBleGVjKQogeworCisgICAg
Ly9kYXRhTG9nTG4oImNhbGxXZWJBc3NlbWJseUZ1bmN0aW9uIHN0YXJ0Iik7CisgICAgLy9hdXRv
IG9uRXhpdCA9IG1ha2VTY29wZUV4aXQoWyZdIHsKKyAgICAvLyAgICBkYXRhTG9nTG4oImNhbGxX
ZWJBc3NlbWJseUZ1bmN0aW9uIGVuZCIpOworICAgIC8vfSk7CisKICAgICBWTSYgdm0gPSBleGVj
LT52bSgpOwogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBX
ZWJBc3NlbWJseUZ1bmN0aW9uKiB3YXNtRnVuY3Rpb24gPSBqc0Nhc3Q8V2ViQXNzZW1ibHlGdW5j
dGlvbio+KGV4ZWMtPmpzQ2FsbGVlKCkpOwpAQCAtMTE2LDYgKzE1NywxMiBAQCBzdGF0aWMgRW5j
b2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBjYWxsCiAKICAgICAvLyBGSVhNRSBEbyBhd2F5IHdp
dGggdGhpcyBlbnRpcmUgZnVuY3Rpb24sIGFuZCBvbmx5IHVzZSB0aGUgZW50cnlwb2ludCBnZW5l
cmF0ZWQgYnkgQjMuIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjY0
ODYKICAgICBXYXNtOjpJbnN0YW5jZSogcHJldldhc21JbnN0YW5jZSA9IHZtLndhc21Db250ZXh0
LmxvYWQoKTsKKworICAgIC8vc3RhdGljIHVpbnQ2NF90IGNhbGxzOworICAgIC8vKytjYWxsczsK
KyAgICAvL2lmIChjYWxscyAlIDEwMDAwID09IDApCisgICAgLy8gICAgZGF0YUxvZ0xuKCJDYWxs
czogIiwgY2FsbHMpOworCiAgICAgewogICAgICAgICAvLyBXZSBkbyB0aGUgc3RhY2sgY2hlY2sg
aGVyZSBmb3IgdGhlIHdyYXBwZXIgZnVuY3Rpb24gYmVjYXVzZSB3ZSBkb24ndAogICAgICAgICAv
LyB3YW50IHRvIGVtaXQgYSBzdGFjayBjaGVjayBpbnNpZGUgZXZlcnkgd3JhcHBlciBmdW5jdGlv
bi4KQEAgLTE0OCwxMSArMTk1LDMwMSBAQCBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1Rf
Q0FMTCBjYWxsCiAgICAgcmV0dXJuIHJhd1Jlc3VsdDsKIH0KIAorUmVnaXN0ZXJBdE9mZnNldExp
c3QgV2ViQXNzZW1ibHlGdW5jdGlvbjo6dXNlZENhbGxlZVNhdmVSZWdpc3RlcnMoKSBjb25zdAor
eworICAgIGF1dG8gbWVtb3J5TW9kZSA9IGluc3RhbmNlKCktPm1lbW9yeU1vZGUoKTsKKyAgICBj
b25zdCBhdXRvJiBwaW5uZWRSZWdzID0gV2FzbTo6UGlubmVkUmVnaXN0ZXJJbmZvOjpnZXQoKTsK
KyAgICBSZWdpc3RlclNldCB0b1NhdmUgPSBwaW5uZWRSZWdzLnRvU2F2ZShtZW1vcnlNb2RlKTsK
KyAgICByZXR1cm4gUmVnaXN0ZXJBdE9mZnNldExpc3QgeyB0b1NhdmUsIFJlZ2lzdGVyQXRPZmZz
ZXRMaXN0OjpPZmZzZXRCYXNlVHlwZTo6RnJhbWVQb2ludGVyQmFzZWQgfTsKK30KKworcHRyZGlm
Zl90IFdlYkFzc2VtYmx5RnVuY3Rpb246OnByZXZpb3VzSW5zdGFuY2VPZmZzZXQoKSBjb25zdAor
eworICAgIHB0cmRpZmZfdCBtaW5PZmZzZXQgPSAxOworICAgIGZvciAoY29uc3QgUmVnaXN0ZXJB
dE9mZnNldCYgcmVnQXRPZmZzZXQgOiB1c2VkQ2FsbGVlU2F2ZVJlZ2lzdGVycygpKSB7CisgICAg
ICAgIHB0cmRpZmZfdCBvZmZzZXQgPSByZWdBdE9mZnNldC5vZmZzZXQoKTsKKyAgICAgICAgQVNT
RVJUKG9mZnNldCA8IDApOworICAgICAgICBtaW5PZmZzZXQgPSBzdGQ6Om1pbihvZmZzZXQsIG1p
bk9mZnNldCk7CisgICAgfQorICAgIEFTU0VSVChtaW5PZmZzZXQgIT0gMSk7CisgICAgcmV0dXJu
IG1pbk9mZnNldCAtIDg7Cit9CisKK1dhc206Okluc3RhbmNlKiBXZWJBc3NlbWJseUZ1bmN0aW9u
OjpwcmV2aW91c0luc3RhbmNlKENhbGxGcmFtZSogY2FsbEZyYW1lKQoreworICAgIEFTU0VSVChj
YWxsRnJhbWUtPmNhbGxlZSgpLnJhd1B0cigpID09IHRoaXMpOworICAgIGF1dG8qIHJlc3VsdCA9
ICpiaXR3aXNlX2Nhc3Q8V2FzbTo6SW5zdGFuY2UqKj4oYml0d2lzZV9jYXN0PGNoYXIqPihjYWxs
RnJhbWUpICsgcHJldmlvdXNJbnN0YW5jZU9mZnNldCgpKTsKKyAgICAvL2RhdGFMb2dMbigicHJl
dmlvdXNJbnN0YW5jZTogIiwgUmF3UG9pbnRlcihyZXN1bHQpKTsKKyAgICByZXR1cm4gcmVzdWx0
OworfQorCitNYWNyb0Fzc2VtYmxlckNvZGVQdHI8SlNFbnRyeVB0clRhZz4gV2ViQXNzZW1ibHlG
dW5jdGlvbjo6anNDYWxsRW50cnlwb2ludFNsb3coKQoreworICAgIFZNJiB2bSA9ICp0aGlzLT52
bSgpOworICAgIENDYWxsSGVscGVycyBqaXQ7CisKKyAgICBjb25zdCBhdXRvJiBzaWduYXR1cmUg
PSBXYXNtOjpTaWduYXR1cmVJbmZvcm1hdGlvbjo6Z2V0KHNpZ25hdHVyZUluZGV4KCkpOworICAg
IGNvbnN0IGF1dG8mIHBpbm5lZFJlZ3MgPSBXYXNtOjpQaW5uZWRSZWdpc3RlckluZm86OmdldCgp
OworICAgIFJlZ2lzdGVyQXRPZmZzZXRMaXN0IHJlZ2lzdGVyc1RvU3BpbGwgPSB1c2VkQ2FsbGVl
U2F2ZVJlZ2lzdGVycygpOworCisgICAgYXV0byYgbW9kdWxlSW5mb3JtYXRpb24gPSBpbnN0YW5j
ZSgpLT5pbnN0YW5jZSgpLm1vZHVsZSgpLm1vZHVsZUluZm9ybWF0aW9uKCk7CisKKyAgICB1bnNp
Z25lZCB0b3RhbEZyYW1lU2l6ZSA9IHJlZ2lzdGVyc1RvU3BpbGwuc2l6ZSgpICogc2l6ZW9mKHZv
aWQqKTsKKyAgICB0b3RhbEZyYW1lU2l6ZSArPSBzaXplb2Yodm9pZCopOyAvLyBQcmV2aW91cyB0
b3AgbGV2ZWwgdm0gV2FzbTo6SW5zdGFuY2UuCisgICAgdG90YWxGcmFtZVNpemUgKz0gV2FzbTo6
V2FzbUNhbGxpbmdDb252ZW50aW9uOjpoZWFkZXJTaXplSW5CeXRlcygpOworICAgIHRvdGFsRnJh
bWVTaXplIC09IHNpemVvZihDYWxsZXJGcmFtZUFuZFBDKTsKKworICAgIHVuc2lnbmVkIG51bUdQ
UnMgPSAwOworICAgIHVuc2lnbmVkIG51bUZQUnMgPSAwOworICAgIGJvb2wgYXJndW1lbnRzSW5j
bHVkZUk2NCA9IGZhbHNlOworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBzaWduYXR1cmUu
YXJndW1lbnRDb3VudCgpOyBpKyspIHsKKyAgICAgICAgc3dpdGNoIChzaWduYXR1cmUuYXJndW1l
bnQoaSkpIHsKKyAgICAgICAgY2FzZSBXYXNtOjpJNjQ6CisgICAgICAgICAgICBhcmd1bWVudHNJ
bmNsdWRlSTY0ID0gdHJ1ZTsKKyAgICAgICAgICAgIEZBTExUSFJPVUdIOworICAgICAgICBjYXNl
IFdhc206OkkzMjoKKyAgICAgICAgICAgIGlmIChudW1HUFJzID49IFdhc206Ondhc21DYWxsaW5n
Q29udmVudGlvbigpLm1fZ3ByQXJncy5zaXplKCkpCisgICAgICAgICAgICAgICAgdG90YWxGcmFt
ZVNpemUgKz0gc2l6ZW9mKHZvaWQqKTsKKyAgICAgICAgICAgICsrbnVtR1BSczsKKyAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICBjYXNlIFdhc206OkYzMjoKKyAgICAgICAgY2FzZSBXYXNtOjpG
NjQ6CisgICAgICAgICAgICBpZiAobnVtRlBScyA+PSBXYXNtOjp3YXNtQ2FsbGluZ0NvbnZlbnRp
b24oKS5tX2ZwckFyZ3Muc2l6ZSgpKQorICAgICAgICAgICAgICAgIHRvdGFsRnJhbWVTaXplICs9
IHNpemVvZih2b2lkKik7CisgICAgICAgICAgICArK251bUZQUnM7CisgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFD
SEVEKCk7CisgICAgICAgIH0KKyAgICB9CisgICAgaWYgKGFyZ3VtZW50c0luY2x1ZGVJNjQpIHsK
KyAgICAgICAgLy8gT09QUzogTW92ZSB0aGlzIHRvIHRoZSBzbG93IHBhdGggdG8gaGFuZGxlIQor
ICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICB9CisKKyAgICB0b3RhbEZyYW1lU2l6ZSA9IFdU
Rjo6cm91bmRVcFRvTXVsdGlwbGVPZihzdGFja0FsaWdubWVudEJ5dGVzKCksIHRvdGFsRnJhbWVT
aXplKTsKKworICAgIGppdC5lbWl0RnVuY3Rpb25Qcm9sb2d1ZSgpOworICAgIGppdC5zdWJQdHIo
TWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMih0b3RhbEZyYW1lU2l6ZSksIE1hY3JvQXNzZW1i
bGVyOjpzdGFja1BvaW50ZXJSZWdpc3Rlcik7CisgICAgaml0LnN0b3JlNjQoQ0NhbGxIZWxwZXJz
OjpUcnVzdGVkSW1tNjQoMCksIENDYWxsSGVscGVyczo6YWRkcmVzc0ZvcihDYWxsRnJhbWVTbG90
Ojpjb2RlQmxvY2spKTsKKworICAgIEdQUlJlZyBzY3JhdGNoR1BSID0gV2FzbTo6d2FzbUNhbGxp
bmdDb252ZW50aW9uQWlyKCkucHJvbG9ndWVTY3JhdGNoKDEpOworICAgIEdQUlJlZyBzY3JhdGNo
MkdQUiA9IFdhc206Ondhc21DYWxsaW5nQ29udmVudGlvbkFpcigpLnByb2xvZ3VlU2NyYXRjaCgw
KTsKKyAgICBqaXQubG9hZFB0cih2bS5hZGRyZXNzT2ZTb2Z0U3RhY2tMaW1pdCgpLCBzY3JhdGNo
MkdQUik7CisKKyAgICBDQ2FsbEhlbHBlcnM6Okp1bXBMaXN0IHNsb3dQYXRoOworICAgIHNsb3dQ
YXRoLmFwcGVuZChqaXQuYnJhbmNoUHRyKENDYWxsSGVscGVyczo6QWJvdmUsIE1hY3JvQXNzZW1i
bGVyOjpzdGFja1BvaW50ZXJSZWdpc3RlciwgR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIpKTsK
KyAgICBzbG93UGF0aC5hcHBlbmQoaml0LmJyYW5jaFB0cihDQ2FsbEhlbHBlcnM6OkJlbG93LCBN
YWNyb0Fzc2VtYmxlcjo6c3RhY2tQb2ludGVyUmVnaXN0ZXIsIHNjcmF0Y2gyR1BSKSk7CisKKyAg
ICAvLyBFbnN1cmU6CisgICAgLy8gYXJnQ291bnRQbHVzVGhpcyAtIDEgPj0gc2lnbmF0dXJlLmFy
Z3VtZW50Q291bnQoKQorICAgIC8vIGFyZ0NvdW50UGx1c1RoaXMgPj0gc2lnbmF0dXJlLmFyZ3Vt
ZW50Q291bnQoKSArIDEKKyAgICAvLyBPT1BTOiBUaGlzIGp1c3QgZW5kcyB1cCBiZWluZyB6ZXJv
IGZvciBhbGwgYXJncywgc28gbWF5YmUgd2Ugc2hvdWxkIGhhbmRsZSBpdCBvbiB0aGUgZmFzdCBw
YXRoPworICAgIHNsb3dQYXRoLmFwcGVuZChqaXQuYnJhbmNoMzIoQ0NhbGxIZWxwZXJzOjpBYm92
ZU9yRXF1YWwsCisgICAgICAgIENDYWxsSGVscGVyczo6cGF5bG9hZEZvcihDYWxsRnJhbWVTbG90
Ojphcmd1bWVudENvdW50KSwgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoc2lnbmF0dXJlLmFy
Z3VtZW50Q291bnQoKSArIDEpKSk7CisKKyAgICAvLyBGaXJzdCB3ZSBkbyBzdGFjayBzbG90cyBm
b3IgRlBScyBzbyB3ZSBjYW4gdXNlIEZQUiBhcmd1bWVudCByZWdpc3RlciBhcyBzY3JhdGNoLiBh
bmQgYWxsIEdQUnMgYmVjYXVzZSB3ZSBoYXZlIHNjcmF0Y2ggcmVnaXN0ZXJzIHRvIGRvIGl0Lgor
ICAgIC8vIEFmdGVyIHRoYXQsIHdlIGhhbmRsZSBGUFIgYXJndW1lbnQgcmVnaXN0ZXJzLiAKKyAg
ICB7CisgICAgICAgIENDYWxsSGVscGVyczo6QWRkcmVzcyBjYWxsZWVGcmFtZSA9IENDYWxsSGVs
cGVyczo6QWRkcmVzcyhNYWNyb0Fzc2VtYmxlcjo6c3RhY2tQb2ludGVyUmVnaXN0ZXIsIC1zdGF0
aWNfY2FzdDxwdHJkaWZmX3Q+KHNpemVvZihDYWxsZXJGcmFtZUFuZFBDKSkpOworICAgICAgICBu
dW1HUFJzID0gMDsKKyAgICAgICAgbnVtRlBScyA9IDA7CisgICAgICAgIC8vIFdlJ3JlIGdvaW5n
IHRvIHNldCB0aGUgcGlubmVkIHJlZ2lzdGVycyBhZnRlciB0aGlzLiBTbworICAgICAgICAvLyB3
ZSBjYW4gdXNlIHRoaXMgYXMgYSBzY3JhdGNoIGZvciBub3cgc2luY2Ugd2Ugc2F2ZWQgaXQgYWJv
dmUuCisgICAgICAgIEZQUlJlZyBzY3JhdGNoRlBSID0gV2FzbTo6d2FzbUNhbGxpbmdDb252ZW50
aW9uKCkubV9mcHJBcmdzWzBdLmZwcigpOworCisgICAgICAgIHB0cmRpZmZfdCBqc09mZnNldCA9
IENhbGxGcmFtZVNsb3Q6OmZpcnN0QXJndW1lbnQgKiBzaXplb2YoRW5jb2RlZEpTVmFsdWUpOwor
CisgICAgICAgIHB0cmRpZmZfdCB3YXNtT2Zmc2V0ID0gQ2FsbEZyYW1lOjpoZWFkZXJTaXplSW5S
ZWdpc3RlcnMgKiBzaXplb2Yodm9pZCopOworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBp
IDwgc2lnbmF0dXJlLmFyZ3VtZW50Q291bnQoKTsgaSsrKSB7CisgICAgICAgICAgICBzd2l0Y2gg
KHNpZ25hdHVyZS5hcmd1bWVudChpKSkgeworICAgICAgICAgICAgY2FzZSBXYXNtOjpJNjQ6Cisg
ICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAg
IGNhc2UgV2FzbTo6STMyOgorICAgICAgICAgICAgICAgIGppdC5sb2FkNjQoQ0NhbGxIZWxwZXJz
OjpBZGRyZXNzKEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCBqc09mZnNldCksIHNjcmF0Y2hH
UFIpOworICAgICAgICAgICAgICAgIHNsb3dQYXRoLmFwcGVuZChqaXQuYnJhbmNoSWZOb3RJbnQz
MihzY3JhdGNoR1BSKSk7IC8vIE9PUFM6IGhhbmRsZSBmbG9hdD8KKyAgICAgICAgICAgICAgICBp
ZiAobnVtR1BScyA+PSBXYXNtOjp3YXNtQ2FsbGluZ0NvbnZlbnRpb24oKS5tX2dwckFyZ3Muc2l6
ZSgpKSB7CisgICAgICAgICAgICAgICAgICAgIGppdC5zdG9yZTMyKHNjcmF0Y2hHUFIsIGNhbGxl
ZUZyYW1lLndpdGhPZmZzZXQod2FzbU9mZnNldCkpOworICAgICAgICAgICAgICAgICAgICB3YXNt
T2Zmc2V0ICs9IHNpemVvZih2b2lkKik7CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAg
ICAgICAgICAgICAgICAgaml0Lnplcm9FeHRlbmQzMlRvUHRyKHNjcmF0Y2hHUFIsIFdhc206Ondh
c21DYWxsaW5nQ29udmVudGlvbigpLm1fZ3ByQXJnc1tudW1HUFJzXS5ncHIoKSk7CisgICAgICAg
ICAgICAgICAgICAgICsrbnVtR1BSczsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIFdhc206OkYzMjoKKyAgICAgICAgICAgIGNhc2Ug
V2FzbTo6RjY0OgorICAgICAgICAgICAgICAgIGlmIChudW1GUFJzID49IFdhc206Ondhc21DYWxs
aW5nQ29udmVudGlvbigpLm1fZnByQXJncy5zaXplKCkpIHsKKyAgICAgICAgICAgICAgICAgICAg
aml0LmxvYWQ2NChDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0
ZXIsIGpzT2Zmc2V0KSwgc2NyYXRjaEdQUik7CisgICAgICAgICAgICAgICAgICAgIHNsb3dQYXRo
LmFwcGVuZChqaXQuYnJhbmNoSWZOb3ROdW1iZXIoc2NyYXRjaEdQUikpOworICAgICAgICAgICAg
ICAgICAgICBzbG93UGF0aC5hcHBlbmQoaml0LmJyYW5jaElmSW50MzIoc2NyYXRjaEdQUikpOyAv
LyBPT1BTOiBIYW5kbGUgaTMyCisKKyAgICAgICAgICAgICAgICAgICAgaWYgKHNpZ25hdHVyZS5h
cmd1bWVudChpKSA9PSBXYXNtOjpGMzIpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGppdC51
bmJveERvdWJsZShzY3JhdGNoR1BSLCBzY3JhdGNoR1BSLCBzY3JhdGNoRlBSKTsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIGppdC5jb252ZXJ0RG91YmxlVG9GbG9hdChzY3JhdGNoRlBSLCBzY3Jh
dGNoRlBSKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGppdC5zdG9yZUZsb2F0KHNjcmF0Y2hG
UFIsIGNhbGxlZUZyYW1lLndpdGhPZmZzZXQod2FzbU9mZnNldCkpOworICAgICAgICAgICAgICAg
ICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgaml0LmFkZDY0KEdQUkluZm86
OnRhZ1R5cGVOdW1iZXJSZWdpc3Rlciwgc2NyYXRjaEdQUiwgc2NyYXRjaEdQUik7CisgICAgICAg
ICAgICAgICAgICAgICAgICBqaXQuc3RvcmU2NChzY3JhdGNoR1BSLCBjYWxsZWVGcmFtZS53aXRo
T2Zmc2V0KHdhc21PZmZzZXQpKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
ICAgICAgICB3YXNtT2Zmc2V0ICs9IHNpemVvZih2b2lkKik7CisgICAgICAgICAgICAgICAgfSBl
bHNlCisgICAgICAgICAgICAgICAgICAgICsrbnVtRlBSczsKKyAgICAgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAganNPZmZzZXQgKz0g
c2l6ZW9mKEVuY29kZWRKU1ZhbHVlKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8vIE5vdyBo
YW5kbGUgRlBSIGFyZ3VtZW50cyBpbiByZWdpc3RlcnMuCisgICAgeworICAgICAgICBudW1HUFJz
ID0gMDsKKyAgICAgICAgbnVtRlBScyA9IDA7CisgICAgICAgIHB0cmRpZmZfdCBqc09mZnNldCA9
IENhbGxGcmFtZVNsb3Q6OmZpcnN0QXJndW1lbnQgKiBzaXplb2YoRW5jb2RlZEpTVmFsdWUpOwor
ICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc2lnbmF0dXJlLmFyZ3VtZW50Q291bnQo
KTsgaSsrKSB7CisgICAgICAgICAgICBzd2l0Y2ggKHNpZ25hdHVyZS5hcmd1bWVudChpKSkgewor
ICAgICAgICAgICAgY2FzZSBXYXNtOjpGMzI6CisgICAgICAgICAgICBjYXNlIFdhc206OkY2NDoK
KyAgICAgICAgICAgICAgICBpZiAobnVtRlBScyA8IFdhc206Ondhc21DYWxsaW5nQ29udmVudGlv
bigpLm1fZnByQXJncy5zaXplKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgaml0LmxvYWQ2NChD
Q2FsbEhlbHBlcnM6OkFkZHJlc3MoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIGpzT2Zmc2V0
KSwgc2NyYXRjaEdQUik7CisgICAgICAgICAgICAgICAgICAgIHNsb3dQYXRoLmFwcGVuZChqaXQu
YnJhbmNoSWZOb3ROdW1iZXIoc2NyYXRjaEdQUikpOworICAgICAgICAgICAgICAgICAgICBzbG93
UGF0aC5hcHBlbmQoaml0LmJyYW5jaElmSW50MzIoc2NyYXRjaEdQUikpOyAvLyBPT1BTOiBIYW5k
bGUgaTMyCisKKyAgICAgICAgICAgICAgICAgICAgRlBSUmVnIGFyZ0ZQUiA9IFdhc206Ondhc21D
YWxsaW5nQ29udmVudGlvbigpLm1fZnByQXJnc1tudW1GUFJzXS5mcHIoKTsKKyAgICAgICAgICAg
ICAgICAgICAgaml0LnVuYm94RG91YmxlKHNjcmF0Y2hHUFIsIHNjcmF0Y2hHUFIsIGFyZ0ZQUik7
CisKKyAgICAgICAgICAgICAgICAgICAgaWYgKHNpZ25hdHVyZS5hcmd1bWVudChpKSA9PSBXYXNt
OjpGMzIpCisgICAgICAgICAgICAgICAgICAgICAgICBqaXQuY29udmVydERvdWJsZVRvRmxvYXQo
YXJnRlBSLCBhcmdGUFIpOworCisgICAgICAgICAgICAgICAgICAgICsrbnVtRlBSczsKKyAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBkZWZhdWx0
OgorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBq
c09mZnNldCArPSBzaXplb2YoRW5jb2RlZEpTVmFsdWUpOworICAgICAgICB9CisgICAgfQorCisg
ICAgaml0LmxvYWRQdHIoJnZtLndhc21Db250ZXh0Lmluc3RhbmNlLCBzY3JhdGNoR1BSKTsKKyAg
ICAvL2ppdC5wcmludCgiU3RvcmluZyBwcmlvciB3YXNtIGNvbnRleHQgY2ZyPSIsIHN0YXRpY19j
YXN0PE1hY3JvQXNzZW1ibGVyOjpSZWdpc3RlcklEPihHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3Rl
ciksICIgY3R4PSAiLCBzY3JhdGNoR1BSLCAiXG4iKTsKKyAgICBwdHJkaWZmX3QgcHJldmlvdXNJ
bnN0YW5jZU9mZnNldCA9IHRoaXMtPnByZXZpb3VzSW5zdGFuY2VPZmZzZXQoKTsKKyAgICBqaXQu
c3RvcmVQdHIoc2NyYXRjaEdQUiwgQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKEdQUkluZm86OmNhbGxG
cmFtZVJlZ2lzdGVyLCBwcmV2aW91c0luc3RhbmNlT2Zmc2V0KSk7CisKKyAgICBmb3IgKGNvbnN0
IFJlZ2lzdGVyQXRPZmZzZXQmIHJlZ0F0T2Zmc2V0IDogcmVnaXN0ZXJzVG9TcGlsbCkgeworICAg
ICAgICBHUFJSZWcgcmVnID0gcmVnQXRPZmZzZXQucmVnKCkuZ3ByKCk7CisgICAgICAgIEFTU0VS
VChyZWcgIT0gc2NyYXRjaEdQUik7CisgICAgICAgIEFTU0VSVChyZWcgIT0gc2NyYXRjaDJHUFIp
OworICAgICAgICBwdHJkaWZmX3Qgb2Zmc2V0ID0gcmVnQXRPZmZzZXQub2Zmc2V0KCk7CisgICAg
ICAgIGppdC5zdG9yZVB0cihyZWcsIENDYWxsSGVscGVyczo6QWRkcmVzcyhHUFJJbmZvOjpjYWxs
RnJhbWVSZWdpc3Rlciwgb2Zmc2V0KSk7CisgICAgfQorICAgIGppdC5tb3ZlKENDYWxsSGVscGVy
czo6VHJ1c3RlZEltbVB0cigmaW5zdGFuY2UoKS0+aW5zdGFuY2UoKSksIHNjcmF0Y2hHUFIpOwor
CisgICAgaWYgKFdhc206OkNvbnRleHQ6OnVzZUZhc3RUTFMoKSkgCisgICAgICAgIGppdC5zdG9y
ZVdhc21Db250ZXh0SW5zdGFuY2Uoc2NyYXRjaEdQUik7CisgICAgZWxzZQorICAgICAgICBqaXQu
bW92ZShzY3JhdGNoR1BSLCBwaW5uZWRSZWdzLndhc21Db250ZXh0SW5zdGFuY2VQb2ludGVyKTsK
KyAgICBqaXQuc3RvcmVQdHIoc2NyYXRjaEdQUiwgJnZtLndhc21Db250ZXh0Lmluc3RhbmNlKTsK
KyAgICAvLyBUaGlzIGNvbnRhaW5zIHRoZSBjYWNoZWQgc3RhY2sgbGltaXQgc3RpbGwuCisgICAg
aml0LnN0b3JlUHRyKHNjcmF0Y2gyR1BSLCBDQ2FsbEhlbHBlcnM6OkFkZHJlc3Moc2NyYXRjaEdQ
UiwgV2FzbTo6SW5zdGFuY2U6Om9mZnNldE9mQ2FjaGVkU3RhY2tMaW1pdCgpKSk7CisKKyAgICBp
ZiAoISFtb2R1bGVJbmZvcm1hdGlvbi5tZW1vcnkpIHsKKyAgICAgICAgR1BSUmVnIGJhc2VNZW1v
cnkgPSBwaW5uZWRSZWdzLmJhc2VNZW1vcnlQb2ludGVyOworCisgICAgICAgIGlmIChpbnN0YW5j
ZSgpLT5tZW1vcnlNb2RlKCkgIT0gV2FzbTo6TWVtb3J5TW9kZTo6U2lnbmFsaW5nKSB7CisgICAg
ICAgICAgICBjb25zdCBhdXRvJiBzaXplUmVncyA9IHBpbm5lZFJlZ3Muc2l6ZVJlZ2lzdGVyczsK
KyAgICAgICAgICAgIEFTU0VSVChzaXplUmVncy5zaXplKCkgPj0gMSk7CisgICAgICAgICAgICBB
U1NFUlQoIXNpemVSZWdzWzBdLnNpemVPZmZzZXQpOyAvLyBUaGUgZm9sbG93aW5nIGNvZGUgYXNz
dW1lcyB3ZSBzdGFydCBhdCAwLCBhbmQgY2FsY3VsYXRlcyBzdWJzZXF1ZW50IHNpemUgcmVnaXN0
ZXJzIHJlbGF0aXZlIHRvIDAuCisgICAgICAgICAgICBBU1NFUlQoc2l6ZVJlZ3NbMF0uc2l6ZVJl
Z2lzdGVyICE9IHNjcmF0Y2hHUFIpOworICAgICAgICAgICAgaml0LmxvYWRQdHIoQ0NhbGxIZWxw
ZXJzOjpBZGRyZXNzKHNjcmF0Y2hHUFIsIFdhc206Okluc3RhbmNlOjpvZmZzZXRPZkNhY2hlZE1l
bW9yeVNpemUoKSksIHNpemVSZWdzWzBdLnNpemVSZWdpc3Rlcik7CisgICAgICAgICAgICBmb3Ig
KHVuc2lnbmVkIGkgPSAxOyBpIDwgc2l6ZVJlZ3Muc2l6ZSgpOyArK2kpCisgICAgICAgICAgICAg
ICAgaml0LmFkZDY0KENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKC1zaXplUmVnc1tpXS5zaXpl
T2Zmc2V0KSwgc2l6ZVJlZ3NbMF0uc2l6ZVJlZ2lzdGVyLCBzaXplUmVnc1tpXS5zaXplUmVnaXN0
ZXIpOworICAgICAgICB9CisKKyAgICAgICAgaml0LmxvYWRQdHIoQ0NhbGxIZWxwZXJzOjpBZGRy
ZXNzKHNjcmF0Y2hHUFIsIFdhc206Okluc3RhbmNlOjpvZmZzZXRPZkNhY2hlZE1lbW9yeSgpKSwg
YmFzZU1lbW9yeSk7CisgICAgfQorCisgICAgaWYgKCFtX2pzVG9XYXNtSUNDYWxsZWUpCisgICAg
ICAgIG1fanNUb1dhc21JQ0NhbGxlZS5zZXQodm0sIHRoaXMsIEpTVG9XYXNtSUNDYWxsZWU6OmNy
ZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0KCksIHRoaXMpKTsKKyAgICBqaXQuc3RvcmVQdHIoQ0NhbGxI
ZWxwZXJzOjpUcnVzdGVkSW1tUHRyKG1fanNUb1dhc21JQ0NhbGxlZS5nZXQoKSksIENDYWxsSGVs
cGVyczo6YWRkcmVzc0ZvcihDYWxsRnJhbWVTbG90OjpjYWxsZWUpKTsKKworICAgIHsKKyAgICAg
ICAgaml0LmxvYWRQdHIoZW50cnlwb2ludExvYWRMb2NhdGlvbigpLCBzY3JhdGNoR1BSKTsKKyAg
ICAgICAgaml0LmNhbGwoc2NyYXRjaEdQUiwgV2FzbUVudHJ5UHRyVGFnKTsKKyAgICB9CisKKyAg
ICBqaXQubG9hZFB0cihDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoR1BSSW5mbzo6Y2FsbEZyYW1lUmVn
aXN0ZXIsIHByZXZpb3VzSW5zdGFuY2VPZmZzZXQpLCBHUFJJbmZvOjpub25QcmVzZXJ2ZWROb25S
ZXR1cm5HUFIpOworICAgIC8vaml0LnByaW50KCJSZXN0b3JpbmcgcHJpb3Igd2FzbSBjb250ZXh0
IGNmcj0iLCBzdGF0aWNfY2FzdDxNYWNyb0Fzc2VtYmxlcjo6UmVnaXN0ZXJJRD4oR1BSSW5mbzo6
Y2FsbEZyYW1lUmVnaXN0ZXIpLCAiIGN0eD0gIiwgc3RhdGljX2Nhc3Q8TWFjcm9Bc3NlbWJsZXI6
OlJlZ2lzdGVySUQ+KEdQUkluZm86Om5vblByZXNlcnZlZE5vblJldHVybkdQUiksICJcbiIpOwor
ICAgIC8vaml0LmxvYWRQdHIodm0uYWRkcmVzc09mU29mdFN0YWNrTGltaXQoKSwgcGlubmVkUmVn
cy5iYXNlTWVtb3J5UG9pbnRlcik7CisgICAgLy9qaXQuc3RvcmVQdHIocGlubmVkUmVncy5iYXNl
TWVtb3J5UG9pbnRlciwgQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKEdQUkluZm86Om5vblByZXNlcnZl
ZE5vblJldHVybkdQUiwgV2FzbTo6SW5zdGFuY2U6Om9mZnNldE9mQ2FjaGVkU3RhY2tMaW1pdCgp
KSk7CisgICAgaml0LnN0b3JlUHRyKEdQUkluZm86Om5vblByZXNlcnZlZE5vblJldHVybkdQUiwg
JnZtLndhc21Db250ZXh0Lmluc3RhbmNlKTsKKworICAgIGZvciAoY29uc3QgUmVnaXN0ZXJBdE9m
ZnNldCYgcmVnQXRPZmZzZXQgOiByZWdpc3RlcnNUb1NwaWxsKSB7CisgICAgICAgIEdQUlJlZyBy
ZWcgPSByZWdBdE9mZnNldC5yZWcoKS5ncHIoKTsKKyAgICAgICAgQVNTRVJUKHJlZyAhPSBHUFJJ
bmZvOjpyZXR1cm5WYWx1ZUdQUik7CisgICAgICAgIHB0cmRpZmZfdCBvZmZzZXQgPSByZWdBdE9m
ZnNldC5vZmZzZXQoKTsKKyAgICAgICAgaml0LmxvYWRQdHIoQ0NhbGxIZWxwZXJzOjpBZGRyZXNz
KEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCBvZmZzZXQpLCByZWcpOworICAgIH0KKworICAg
IHN3aXRjaCAoc2lnbmF0dXJlLnJldHVyblR5cGUoKSkgeworICAgIGNhc2UgV2FzbTo6Vm9pZDoK
KyAgICAgICAgaml0Lm1vdmVUcnVzdGVkVmFsdWUoanNVbmRlZmluZWQoKSwgSlNWYWx1ZVJlZ3Mg
eyBHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUiB9KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBX
YXNtOjpJMzI6CisgICAgICAgIGppdC56ZXJvRXh0ZW5kMzJUb1B0cihHUFJJbmZvOjpyZXR1cm5W
YWx1ZUdQUiwgR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIpOworICAgICAgICBqaXQuYm94SW50MzIo
R1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIsIEpTVmFsdWVSZWdzIHsgR1BSSW5mbzo6cmV0dXJuVmFs
dWVHUFIgfSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgV2FzbTo6RjMyOgorICAgICAgICBq
aXQuY29udmVydEZsb2F0VG9Eb3VibGUoRlBSSW5mbzo6cmV0dXJuVmFsdWVGUFIsIEZQUkluZm86
OnJldHVyblZhbHVlRlBSKTsKKyAgICAgICAgRkFMTFRIUk9VR0g7CisgICAgY2FzZSBXYXNtOjpG
NjQ6IHsKKyAgICAgICAgaml0Lm1vdmVUcnVzdGVkVmFsdWUoanNOdW1iZXIocHVyZU5hTigpKSwg
SlNWYWx1ZVJlZ3MgeyBHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUiB9KTsKKyAgICAgICAgYXV0byBp
c05hTiA9IGppdC5icmFuY2hJZk5hTihGUFJJbmZvOjpyZXR1cm5WYWx1ZUZQUik7CisgICAgICAg
IGppdC5ib3hEb3VibGUoRlBSSW5mbzo6cmV0dXJuVmFsdWVGUFIsIEpTVmFsdWVSZWdzIHsgR1BS
SW5mbzo6cmV0dXJuVmFsdWVHUFIgfSk7CisgICAgICAgIGlzTmFOLmxpbmsoJmppdCk7CisgICAg
ICAgIGJyZWFrOworICAgIH0KKyAgICBjYXNlIFdhc206Okk2NDoKKyAgICAgICAgcmV0dXJuIG51
bGxwdHI7CisgICAgY2FzZSBXYXNtOjpGdW5jOgorICAgIGNhc2UgV2FzbTo6QW55ZnVuYzoKKyAg
ICAgICAgaml0LmJyZWFrcG9pbnQoKTsKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAg
ICAgICAgYnJlYWs7CisgICAgfQorCisgICAgaml0LmVtaXRGdW5jdGlvbkVwaWxvZ3VlKCk7Cisg
ICAgaml0LnJldCgpOworCisgICAgc2xvd1BhdGgubGluaygmaml0KTsKKyAgICBqaXQubW92ZShD
Q2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIodGhpcyksIEdQUkluZm86OnJlZ1QwKTsKKyAgICBq
aXQuZW1pdEZ1bmN0aW9uRXBpbG9ndWUoKTsKKyAgICAvLyBPT1BTOiBDYW4gSSBqdXN0IHRhaWwg
Y2FsbCB0aGlzIG5hdGl2ZUNhbGxHZW5lcmF0b3I/CisgICAgYXV0byBqdW1wVG9Ib3N0Q2FsbCA9
IGppdC5qdW1wKCk7CisKKyAgICBMaW5rQnVmZmVyIGxpbmtCdWZmZXIoaml0LCBHTE9CQUxfVEhV
TktfSUQsIEpJVENvbXBpbGF0aW9uQ2FuRmFpbCk7CisgICAgaWYgKFVOTElLRUxZKGxpbmtCdWZm
ZXIuZGlkRmFpbFRvQWxsb2NhdGUoKSkpCisgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAg
bGlua0J1ZmZlci5saW5rKGp1bXBUb0hvc3RDYWxsLCBDb2RlTG9jYXRpb25MYWJlbDxKU0VudHJ5
UHRyVGFnPihleGVjdXRhYmxlKCktPmVudHJ5cG9pbnRGb3IoQ29kZUZvckNhbGwsIE11c3RDaGVj
a0FyaXR5KS5leGVjdXRhYmxlQWRkcmVzcygpKSk7CisKKyAgICBtX2pzQ2FsbEVudHJ5cG9pbnQg
PSBGSU5BTElaRV9DT0RFKGxpbmtCdWZmZXIsIFdhc21FbnRyeVB0clRhZywgIkpTLT5XYXNtIElD
Iik7CisgICAgcmV0dXJuIG1fanNDYWxsRW50cnlwb2ludC5jb2RlKCk7Cit9CisKIFdlYkFzc2Vt
Ymx5RnVuY3Rpb24qIFdlYkFzc2VtYmx5RnVuY3Rpb246OmNyZWF0ZShWTSYgdm0sIEpTR2xvYmFs
T2JqZWN0KiBnbG9iYWxPYmplY3QsIFN0cnVjdHVyZSogc3RydWN0dXJlLCB1bnNpZ25lZCBsZW5n
dGgsIGNvbnN0IFN0cmluZyYgbmFtZSwgSlNXZWJBc3NlbWJseUluc3RhbmNlKiBpbnN0YW5jZSwg
V2FzbTo6Q2FsbGVlJiBqc0VudHJ5cG9pbnQsIFdhc206Oldhc21Ub1dhc21JbXBvcnRhYmxlRnVu
Y3Rpb246OkxvYWRMb2NhdGlvbiB3YXNtVG9XYXNtRW50cnlwb2ludExvYWRMb2NhdGlvbiwgV2Fz
bTo6U2lnbmF0dXJlSW5kZXggc2lnbmF0dXJlSW5kZXgpCiB7CiAgICAgTmF0aXZlRXhlY3V0YWJs
ZSogZXhlY3V0YWJsZSA9IHZtLmdldEhvc3RGdW5jdGlvbihjYWxsV2ViQXNzZW1ibHlGdW5jdGlv
biwgTm9JbnRyaW5zaWMsIGNhbGxIb3N0RnVuY3Rpb25Bc0NvbnN0cnVjdG9yLCBudWxscHRyLCBu
YW1lKTsKICAgICBXZWJBc3NlbWJseUZ1bmN0aW9uKiBmdW5jdGlvbiA9IG5ldyAoTm90TnVsbCwg
YWxsb2NhdGVDZWxsPFdlYkFzc2VtYmx5RnVuY3Rpb24+KHZtLmhlYXApKSBXZWJBc3NlbWJseUZ1
bmN0aW9uKHZtLCBnbG9iYWxPYmplY3QsIHN0cnVjdHVyZSwganNFbnRyeXBvaW50LCB3YXNtVG9X
YXNtRW50cnlwb2ludExvYWRMb2NhdGlvbiwgc2lnbmF0dXJlSW5kZXgpOwogICAgIGZ1bmN0aW9u
LT5maW5pc2hDcmVhdGlvbih2bSwgZXhlY3V0YWJsZSwgbGVuZ3RoLCBuYW1lLCBpbnN0YW5jZSk7
CisKKyAgICAvLyBPT1BTOiBtYWtlIHRoaXMgcGFydCBvZiBjcmVhdGUoKS4KKyAgICBleGVjdXRh
YmxlLT5zZXRXZWJBc3NlbWJseUZ1bmN0aW9uKHZtLCBmdW5jdGlvbik7CisKICAgICBBU1NFUlRf
V0lUSF9NRVNTQUdFKCFmdW5jdGlvbi0+aXNMYXJnZUFsbG9jYXRpb24oKSwgIldlYkFzc2VtYmx5
RnVuY3Rpb24gc2hvdWxkIGJlIGFsbG9jYXRlZCBub3QgaW4gbGFyZ2UgYWxsb2NhdGlvbiBzaW5j
ZSBpdCBpcyBKU0NhbGxlZS4iKTsKICAgICByZXR1cm4gZnVuY3Rpb247CiB9CkBAIC0xNjksNiAr
NTA2LDE1IEBAIFdlYkFzc2VtYmx5RnVuY3Rpb246OldlYkFzc2VtYmx5RnVuY3Rpb24KICAgICAs
IG1faW1wb3J0YWJsZUZ1bmN0aW9uIHsgc2lnbmF0dXJlSW5kZXgsIHdhc21Ub1dhc21FbnRyeXBv
aW50TG9hZExvY2F0aW9uIH0KIHsgfQogCit2b2lkIFdlYkFzc2VtYmx5RnVuY3Rpb246OnZpc2l0
Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3sKKyAgICBXZWJB
c3NlbWJseUZ1bmN0aW9uKiB0aGlzT2JqZWN0ID0ganNDYXN0PFdlYkFzc2VtYmx5RnVuY3Rpb24q
PihjZWxsKTsKKyAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8o
KSk7CisKKyAgICBCYXNlOjp2aXNpdENoaWxkcmVuKHRoaXNPYmplY3QsIHZpc2l0b3IpOworICAg
IHZpc2l0b3IuYXBwZW5kKHRoaXNPYmplY3QtPm1fanNUb1dhc21JQ0NhbGxlZSk7Cit9CisKIH0g
Ly8gbmFtZXNwYWNlIEpTQwogCiAjZW5kaWYgLy8gRU5BQkxFKFdFQkFTU0VNQkxZKQpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlGdW5jdGlvbi5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5RnVuY3Rp
b24uaAkocmV2aXNpb24gMjQzNzYxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMv
V2ViQXNzZW1ibHlGdW5jdGlvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC00Myw2ICs0MywyNyBAQCBu
YW1lc3BhY2UgQjMgewogY2xhc3MgQ29tcGlsYXRpb247CiB9CiAKK2NsYXNzIFdlYkFzc2VtYmx5
RnVuY3Rpb247CisKK2NsYXNzIEpTVG9XYXNtSUNDYWxsZWUgOiBwdWJsaWMgSlNDYWxsZWUgewor
ICAgIHVzaW5nIEJhc2UgPSBKU0NhbGxlZTsKK3B1YmxpYzoKKyAgICBERUNMQVJFX0lORk87CisK
KyAgICBzdGF0aWMgSlNUb1dhc21JQ0NhbGxlZSogY3JlYXRlKFZNJiwgSlNHbG9iYWxPYmplY3Qq
LCBXZWJBc3NlbWJseUZ1bmN0aW9uKik7CisgICAgc3RhdGljIFN0cnVjdHVyZSogY3JlYXRlU3Ry
dWN0dXJlKFZNJiwgSlNHbG9iYWxPYmplY3QqLCBKU1ZhbHVlKTsKKworICAgIFdlYkFzc2VtYmx5
RnVuY3Rpb24qIGZ1bmN0aW9uKCkgeyByZXR1cm4gbV9mdW5jdGlvbi5nZXQoKTsgfQorCitwcml2
YXRlOgorICAgIEpTVG9XYXNtSUNDYWxsZWUoVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFs
T2JqZWN0LCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKKyAgICAgICAgOiBCYXNlKHZtLCBnbG9iYWxP
YmplY3QsIHN0cnVjdHVyZSkKKyAgICB7IH0KKyAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVu
KEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CisKKyAgICBXcml0ZUJhcnJpZXI8V2ViQXNzZW1ibHlG
dW5jdGlvbj4gbV9mdW5jdGlvbjsKK307CisKIGNsYXNzIFdlYkFzc2VtYmx5RnVuY3Rpb24gZmlu
YWwgOiBwdWJsaWMgV2ViQXNzZW1ibHlGdW5jdGlvbkJhc2UgewogcHVibGljOgogICAgIHVzaW5n
IEJhc2UgPSBXZWJBc3NlbWJseUZ1bmN0aW9uQmFzZTsKQEAgLTc0LDE0ICs5NSwzMCBAQCBwdWJs
aWM6CiAKICAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mRW50cnlwb2ludExvYWRMb2NhdGlv
bigpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihXZWJBc3NlbWJseUZ1bmN0aW9uLCBtX2ltcG9y
dGFibGVGdW5jdGlvbikgKyBXYXNtVG9XYXNtSW1wb3J0YWJsZUZ1bmN0aW9uOjpvZmZzZXRPZkVu
dHJ5cG9pbnRMb2FkTG9jYXRpb24oKTsgfQogCisgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPEpT
RW50cnlQdHJUYWc+IGpzQ2FsbEVudHJ5cG9pbnQoKQorICAgIHsKKyAgICAgICAgaWYgKG1fanND
YWxsRW50cnlwb2ludCkKKyAgICAgICAgICAgIHJldHVybiBtX2pzQ2FsbEVudHJ5cG9pbnQuY29k
ZSgpOworICAgICAgICByZXR1cm4ganNDYWxsRW50cnlwb2ludFNsb3coKTsKKyAgICB9CisKKyAg
ICBSZWdpc3RlckF0T2Zmc2V0TGlzdCB1c2VkQ2FsbGVlU2F2ZVJlZ2lzdGVycygpIGNvbnN0Owor
ICAgIFdhc206Okluc3RhbmNlKiBwcmV2aW91c0luc3RhbmNlKENhbGxGcmFtZSopOworCiBwcml2
YXRlOgorICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3Im
KTsKICAgICBXZWJBc3NlbWJseUZ1bmN0aW9uKFZNJiwgSlNHbG9iYWxPYmplY3QqLCBTdHJ1Y3R1
cmUqLCBXYXNtOjpDYWxsZWUmIGpzRW50cnlwb2ludCwgV2FzbVRvV2FzbUltcG9ydGFibGVGdW5j
dGlvbjo6TG9hZExvY2F0aW9uIGVudHJ5cG9pbnRMb2FkTG9jYXRpb24sIFdhc206OlNpZ25hdHVy
ZUluZGV4KTsKIAorICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxKU0VudHJ5UHRyVGFnPiBqc0Nh
bGxFbnRyeXBvaW50U2xvdygpOworICAgIHB0cmRpZmZfdCBwcmV2aW91c0luc3RhbmNlT2Zmc2V0
KCkgY29uc3Q7CisKICAgICAvLyBJdCdzIHNhZmUgdG8ganVzdCBob2xkIHRoZSByYXcgV2FzbVRv
V2FzbUltcG9ydGFibGVGdW5jdGlvbi9qc0VudHJ5cG9pbnQgYmVjYXVzZSB3ZSBoYXZlIGEgcmVm
ZXJlbmNlCiAgICAgLy8gdG8gb3VyIEluc3RhbmNlLCB3aGljaCBwb2ludHMgdG8gdGhlIE1vZHVs
ZSB0aGF0IGV4cG9ydGVkIHVzLCB3aGljaAogICAgIC8vIGVuc3VyZXMgdGhhdCB0aGUgYWN0dWFs
IFNpZ25hdHVyZS9jb2RlIGRvZXNuJ3QgZ2V0IGRlYWxsb2NhdGVkLgogICAgIE1hY3JvQXNzZW1i
bGVyQ29kZVB0cjxXYXNtRW50cnlQdHJUYWc+IG1fanNFbnRyeXBvaW50OworICAgIE1hY3JvQXNz
ZW1ibGVyQ29kZVJlZjxKU0VudHJ5UHRyVGFnPiBtX2pzQ2FsbEVudHJ5cG9pbnQ7CiAgICAgV2Fz
bVRvV2FzbUltcG9ydGFibGVGdW5jdGlvbiBtX2ltcG9ydGFibGVGdW5jdGlvbjsKKyAgICBXcml0
ZUJhcnJpZXI8SlNUb1dhc21JQ0NhbGxlZT4gbV9qc1RvV2FzbUlDQ2FsbGVlOwogfTsKIAogfSAv
LyBuYW1lc3BhY2UgSlNDCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>366571</attachid>
            <date>2019-04-02 20:15:42 -0700</date>
            <delta_ts>2019-04-03 16:30:30 -0700</delta_ts>
            <desc>WIP</desc>
            <filename>b-backup.diff</filename>
            <type>text/plain</type>
            <size>36421</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFBlcmZvcm1hbmNlVGVzdHMvSmV0U3RyZWFtMi9KZXRTdHJlYW1Ecml2ZXIuanMKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gUGVyZm9ybWFuY2VUZXN0cy9KZXRTdHJlYW0yL0pldFN0cmVhbURyaXZlci5q
cwkocmV2aXNpb24gMjQzNzgwKQorKysgUGVyZm9ybWFuY2VUZXN0cy9KZXRTdHJlYW0yL0pldFN0
cmVhbURyaXZlci5qcwkod29ya2luZyBjb3B5KQpAQCAtNzkzLDExICs3OTMsMTEgQEAgY2xhc3Mg
V2FzbUJlbmNobWFyayBleHRlbmRzIEJlbmNobWFyayB7CiAgICAgICAgICAgICAgICAgICAgIGNv
bnNvbGUubG9nKCdJbnRlcmNlcHRlZCBxdWl0L2Fib3J0Jyk7CiAgICAgICAgICAgICB9OwogCi0g
ICAgICAgICAgICBvbGRQcmludCA9IGdsb2JhbE9iamVjdC5wcmludDsKLSAgICAgICAgICAgIGds
b2JhbE9iamVjdC5wcmludCA9IGdsb2JhbE9iamVjdC5wcmludEVyciA9ICguLi5hcmdzKSA9PiB7
Ci0gICAgICAgICAgICAgICAgaWYgKHZlcmJvc2UpCi0gICAgICAgICAgICAgICAgICAgIGNvbnNv
bGUubG9nKCdJbnRlcmNlcHRlZCBwcmludDogJywgLi4uYXJncyk7Ci0gICAgICAgICAgICB9Owor
ICAgICAgICAgICAgLy9vbGRQcmludCA9IGdsb2JhbE9iamVjdC5wcmludDsKKyAgICAgICAgICAg
IC8vZ2xvYmFsT2JqZWN0LnByaW50ID0gZ2xvYmFsT2JqZWN0LnByaW50RXJyID0gKC4uLmFyZ3Mp
ID0+IHsKKyAgICAgICAgICAgIC8vICAgIGlmICh2ZXJib3NlKQorICAgICAgICAgICAgLy8gICAg
ICAgIGNvbnNvbGUubG9nKCdJbnRlcmNlcHRlZCBwcmludDogJywgLi4uYXJncyk7CisgICAgICAg
ICAgICAvL307CiAKICAgICAgICAgICAgIGxldCBNb2R1bGUgPSB7CiAgICAgICAgICAgICAgICAg
cHJlUnVuOiBbXSwKSW5kZXg6IFBlcmZvcm1hbmNlVGVzdHMvSmV0U3RyZWFtMi9jbGkuanMKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gUGVyZm9ybWFuY2VUZXN0cy9KZXRTdHJlYW0yL2NsaS5qcwkocmV2aXNpb24g
MjQzNzgwKQorKysgUGVyZm9ybWFuY2VUZXN0cy9KZXRTdHJlYW0yL2NsaS5qcwkod29ya2luZyBj
b3B5KQpAQCAtMjgsNiArMjgsOCBAQCBjb25zb2xlID0gewogICAgIGxvZzogcHJpbnQKIH0KIAor
dGVzdExpc3QgPSBbInJpY2hhcmRzLXdhc20iXTsKKwogaWYgKHR5cGVvZiB0ZXN0TGlzdCA9PT0g
InVuZGVmaW5lZCIpCiAgICAgdGVzdExpc3QgPSB1bmRlZmluZWQ7CiAKSW5kZXg6IFBlcmZvcm1h
bmNlVGVzdHMvSmV0U3RyZWFtMi93YXNtL3JpY2hhcmRzLmpzCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFBlcmZv
cm1hbmNlVGVzdHMvSmV0U3RyZWFtMi93YXNtL3JpY2hhcmRzLmpzCShyZXZpc2lvbiAyNDM3ODAp
CisrKyBQZXJmb3JtYW5jZVRlc3RzL0pldFN0cmVhbTIvd2FzbS9yaWNoYXJkcy5qcwkod29ya2lu
ZyBjb3B5KQpAQCAtOTQ2LDcgKzk0Niw4IEBAIHZhciBfbWVtc2V0ID0gTW9kdWxlWyJfbWVtc2V0
Il0gPSAoZnVuY3QKIHZhciBfc2JyayA9IE1vZHVsZVsiX3NicmsiXSA9IChmdW5jdGlvbigpIHsK
ICByZXR1cm4gTW9kdWxlWyJhc20iXVsiX3NicmsiXS5hcHBseShudWxsLCBhcmd1bWVudHMpOwog
fSk7Ci12YXIgX3NjaGVkdWxlSXRlciA9IE1vZHVsZVsiX3NjaGVkdWxlSXRlciJdID0gKGZ1bmN0
aW9uKCkgewordmFyIF9zY2hlZHVsZUl0ZXIgPSBNb2R1bGVbIl9zY2hlZHVsZUl0ZXIiXSA9IChm
dW5jdGlvbiBmb29CYXJCYXooKSB7CisgLy9yZXR1cm4gTW9kdWxlWyJhc20iXVsiX3NjaGVkdWxl
SXRlciJdKCk7CiAgcmV0dXJuIE1vZHVsZVsiYXNtIl1bIl9zY2hlZHVsZUl0ZXIiXS5hcHBseShu
dWxsLCBhcmd1bWVudHMpOwogfSk7CiB2YXIgX3NldHVwID0gTW9kdWxlWyJfc2V0dXAiXSA9IChm
dW5jdGlvbigpIHsKQEAgLTExMDYsOCArMTEwNyw5IEBAIGZ1bmN0aW9uIHJ1blJpY2hhcmRzKCkg
ewogICAgIGZvciAobGV0IGkgPSAwOyBpIDwgNDsgKytpKSB7CiAgICAgICAgIE1vZHVsZS5fc2V0
dXAoKTsKICAgICAgICAgd2hpbGUgKHNjaGVkdWxlSXRlcigpKSB7IH0KLSAgICAgICAgaWYgKE1v
ZHVsZS5fZ2V0UXBrdGNvdW50KCkgIT09IDIzMjY0MTAgfHwgTW9kdWxlLl9nZXRIb2xkY291bnQo
KSAhPT0gOTMwNTYzKQorICAgICAgICBpZiAoTW9kdWxlLl9nZXRRcGt0Y291bnQoKSAhPT0gMjMy
NjQxMCB8fCBNb2R1bGUuX2dldEhvbGRjb3VudCgpICE9PSA5MzA1NjMpIHsKKyAgICAgICAgICAg
IHByaW50KCJCYWQgcmVzdWx0OiAiLCBNb2R1bGUuX2dldFFwa3Rjb3VudCgpLCAiICIsIE1vZHVs
ZS5fZ2V0SG9sZGNvdW50KCkpOwogICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJCYWQgcmlj
aGFyZHMgcmVzdWx0ISIpOworICAgICAgICB9CiAgICAgfQogfQotCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyQ29kZVJlZi5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJDb2RlUmVm
LmgJKHJldmlzaW9uIDI0Mzc4MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIv
TWFjcm9Bc3NlbWJsZXJDb2RlUmVmLmgJKHdvcmtpbmcgY29weSkKQEAgLTM4MCw2ICszODAsMTQg
QEAgcHVibGljOgogICAgICAgICBBU1NFUlQobV9leGVjdXRhYmxlTWVtb3J5LT5zdGFydCgpKTsK
ICAgICAgICAgQVNTRVJUKG1fY29kZVB0cik7CiAgICAgfQorCisgICAgdGVtcGxhdGU8UHRyVGFn
IG90aGVyVGFnPgorICAgIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiYgb3BlcmF0b3I9KGNvbnN0IE1h
Y3JvQXNzZW1ibGVyQ29kZVJlZjxvdGhlclRhZz4mIG90aGVyQ29kZVJlZikKKyAgICB7CisgICAg
ICAgIG1fY29kZVB0ciA9IE1hY3JvQXNzZW1ibGVyQ29kZVB0cjx0YWc+OjpjcmVhdGVGcm9tRXhl
Y3V0YWJsZUFkZHJlc3Mob3RoZXJDb2RlUmVmLmNvZGUoKS50ZW1wbGF0ZSByZXRhZ2dlZEV4ZWN1
dGFibGVBZGRyZXNzPHRhZz4oKSk7CisgICAgICAgIG1fZXhlY3V0YWJsZU1lbW9yeSA9IG90aGVy
Q29kZVJlZi5tX2V4ZWN1dGFibGVNZW1vcnk7CisgICAgICAgIHJldHVybiAqdGhpczsKKyAgICB9
CiAgICAgCiAgICAgLy8gVXNlIHRoaXMgb25seSB3aGVuIHlvdSBrbm93IHRoYXQgdGhlIGNvZGVQ
dHIgcmVmZXJzIHRvIGNvZGUgdGhhdCBpcwogICAgIC8vIGFscmVhZHkgYmVpbmcga2VwdCBhbGl2
ZSB0aHJvdWdoIHNvbWUgb3RoZXIgbWVhbnMuIFR5cGljYWxseSB0aGlzIG1lYW5zCkBAIC00NDMs
OSArNDUxLDkgQEAgcHVibGljOgogcHJpdmF0ZToKICAgICB0ZW1wbGF0ZTxQdHJUYWcgb3RoZXJU
YWc+CiAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmKGNvbnN0IE1hY3JvQXNzZW1ibGVyQ29kZVJl
ZjxvdGhlclRhZz4mIG90aGVyQ29kZVJlZikKLSAgICAgICAgOiBtX2NvZGVQdHIoTWFjcm9Bc3Nl
bWJsZXJDb2RlUHRyPHRhZz46OmNyZWF0ZUZyb21FeGVjdXRhYmxlQWRkcmVzcyhvdGhlckNvZGVS
ZWYuY29kZSgpLnRlbXBsYXRlIHJldGFnZ2VkRXhlY3V0YWJsZUFkZHJlc3M8dGFnPigpKSkKLSAg
ICAgICAgLCBtX2V4ZWN1dGFibGVNZW1vcnkob3RoZXJDb2RlUmVmLm1fZXhlY3V0YWJsZU1lbW9y
eSkKLSAgICB7IH0KKyAgICB7CisgICAgICAgICp0aGlzID0gb3RoZXJDb2RlUmVmOworICAgIH0K
IAogICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0cjx0YWc+IG1fY29kZVB0cjsKICAgICBSZWZQdHI8
RXhlY3V0YWJsZU1lbW9yeUhhbmRsZT4gbV9leGVjdXRhYmxlTWVtb3J5OwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0ludGVycHJldGVyLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvSW50ZXJwcmV0ZXIuY3BwCShyZXZp
c2lvbiAyNDM3ODApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvSW50ZXJw
cmV0ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01NDksNiArNTQ5LDEzIEBAIHB1YmxpYzoKICAg
ICAgICAgICAgIH0KICAgICAgICAgfQogCisgICAgICAgIGlmICh2aXNpdG9yLT5jYWxsZWUoKS5p
c0NlbGwoKSkgeworICAgICAgICAgICAgaWYgKGF1dG8qIGljQ2FsbGVlID0ganNEeW5hbWljQ2Fz
dDxKU1RvV2FzbUlDQ2FsbGVlKj4obV92bSwgdmlzaXRvci0+Y2FsbGVlKCkuYXNDZWxsKCkpKSB7
CisgICAgICAgICAgICAgICAgLy9kYXRhTG9nTG4oIlVud2luZGluZyBwYXN0IGNmcj0iLCBSYXdQ
b2ludGVyKG1fY2FsbEZyYW1lKSwgIiBwcmlvciBpbnN0YW5jZSA9ICIsIFJhd1BvaW50ZXIoaWND
YWxsZWUtPmZ1bmN0aW9uKCktPnByZXZpb3VzSW5zdGFuY2UobV9jYWxsRnJhbWUpKSk7CisgICAg
ICAgICAgICAgICAgbV92bS53YXNtQ29udGV4dC5zdG9yZShpY0NhbGxlZS0+ZnVuY3Rpb24oKS0+
cHJldmlvdXNJbnN0YW5jZShtX2NhbGxGcmFtZSksIG1fdm0uc29mdFN0YWNrTGltaXQoKSk7Cisg
ICAgICAgICAgICB9CisgICAgICAgIH0KKwogICAgICAgICBub3RpZnlEZWJ1Z2dlck9mVW53aW5k
aW5nKG1fdm0sIG1fY2FsbEZyYW1lKTsKIAogICAgICAgICBjb3B5Q2FsbGVlU2F2ZXNUb0VudHJ5
RnJhbWVDYWxsZWVTYXZlc0J1ZmZlcih2aXNpdG9yKTsKQEAgLTU2NCw3ICs1NzEsNyBAQCBwcml2
YXRlOgogICAgIHZvaWQgY29weUNhbGxlZVNhdmVzVG9FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNCdWZm
ZXIoU3RhY2tWaXNpdG9yJiB2aXNpdG9yKSBjb25zdAogICAgIHsKICNpZiAhRU5BQkxFKENfTE9P
UCkgJiYgTlVNQkVSX09GX0NBTExFRV9TQVZFU19SRUdJU1RFUlMgPiAwCi0gICAgICAgIGNvbnN0
IFJlZ2lzdGVyQXRPZmZzZXRMaXN0KiBjdXJyZW50Q2FsbGVlU2F2ZXMgPSB2aXNpdG9yLT5jYWxs
ZWVTYXZlUmVnaXN0ZXJzKCk7CisgICAgICAgIE9wdGlvbmFsPFJlZ2lzdGVyQXRPZmZzZXRMaXN0
PiBjdXJyZW50Q2FsbGVlU2F2ZXMgPSB2aXNpdG9yLT5jYWxsZWVTYXZlUmVnaXN0ZXJzRm9yVW53
aW5kaW5nKCk7CiAKICAgICAgICAgaWYgKCFjdXJyZW50Q2FsbGVlU2F2ZXMpCiAgICAgICAgICAg
ICByZXR1cm47CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvU3RhY2tW
aXNpdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0
ZXIvU3RhY2tWaXNpdG9yLmNwcAkocmV2aXNpb24gMjQzNzgwKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ludGVycHJldGVyL1N0YWNrVmlzaXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMz
LDYgKzMzLDcgQEAKICNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCiAjaW5jbHVkZSAiV2FzbUNhbGxl
ZS5oIgogI2luY2x1ZGUgIldhc21JbmRleE9yTmFtZS5oIgorI2luY2x1ZGUgIldlYkFzc2VtYmx5
RnVuY3Rpb24uaCIKICNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdCdWlsZGVyLmg+CiAKIG5hbWVz
cGFjZSBKU0MgewpAQCAtMjUyLDEwICsyNTMsMTAgQEAgU3RhY2tWaXNpdG9yOjpGcmFtZTo6Q29k
ZVR5cGUgU3RhY2tWaXNpdAogICAgIHJldHVybiBDb2RlVHlwZTo6R2xvYmFsOwogfQogCi1jb25z
dCBSZWdpc3RlckF0T2Zmc2V0TGlzdCogU3RhY2tWaXNpdG9yOjpGcmFtZTo6Y2FsbGVlU2F2ZVJl
Z2lzdGVycygpCitPcHRpb25hbDxSZWdpc3RlckF0T2Zmc2V0TGlzdD4gU3RhY2tWaXNpdG9yOjpG
cmFtZTo6Y2FsbGVlU2F2ZVJlZ2lzdGVyc0ZvclVud2luZGluZygpCiB7CiAgICAgaWYgKGlzSW5s
aW5lZEZyYW1lKCkpCi0gICAgICAgIHJldHVybiBudWxscHRyOworICAgICAgICByZXR1cm4gV1RG
OjpudWxsb3B0OwogCiAjaWYgIUVOQUJMRShDX0xPT1ApICYmIE5VTUJFUl9PRl9DQUxMRUVfU0FW
RVNfUkVHSVNURVJTID4gMAogCkBAIC0yNjMsMTkgKzI2NCwyNCBAQCBjb25zdCBSZWdpc3RlckF0
T2Zmc2V0TGlzdCogU3RhY2tWaXNpdG9yCiAgICAgaWYgKGlzV2FzbUZyYW1lKCkpIHsKICAgICAg
ICAgaWYgKGNhbGxlZSgpLmlzQ2VsbCgpKSB7CiAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChp
c1dlYkFzc2VtYmx5VG9KU0NhbGxlZShjYWxsZWUoKS5hc0NlbGwoKSkpOwotICAgICAgICAgICAg
cmV0dXJuIG51bGxwdHI7CisgICAgICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogICAgICAg
ICB9CiAgICAgICAgIFdhc206OkNhbGxlZSogd2FzbUNhbGxlZSA9IGNhbGxlZSgpLmFzV2FzbUNh
bGxlZSgpOwotICAgICAgICByZXR1cm4gd2FzbUNhbGxlZS0+Y2FsbGVlU2F2ZVJlZ2lzdGVycygp
OworICAgICAgICByZXR1cm4gKndhc21DYWxsZWUtPmNhbGxlZVNhdmVSZWdpc3RlcnMoKTsKKyAg
ICB9CisKKyAgICBpZiAoY2FsbGVlKCkuaXNDZWxsKCkpIHsKKyAgICAgICAgaWYgKGF1dG8qIGlj
Q2FsbGVlID0ganNEeW5hbWljQ2FzdDxKU1RvV2FzbUlDQ2FsbGVlKj4oKmNhbGxlZSgpLmFzQ2Vs
bCgpLT52bSgpLCBjYWxsZWUoKS5hc0NlbGwoKSkpCisgICAgICAgICAgICByZXR1cm4gaWNDYWxs
ZWUtPmZ1bmN0aW9uKCktPnVzZWRDYWxsZWVTYXZlUmVnaXN0ZXJzKCk7CiAgICAgfQogI2VuZGlm
IC8vIEVOQUJMRShXRUJBU1NFTUJMWSkKIAogICAgIGlmIChDb2RlQmxvY2sqIGNvZGVCbG9jayA9
IHRoaXMtPmNvZGVCbG9jaygpKQotICAgICAgICByZXR1cm4gY29kZUJsb2NrLT5jYWxsZWVTYXZl
UmVnaXN0ZXJzKCk7CisgICAgICAgIHJldHVybiAqY29kZUJsb2NrLT5jYWxsZWVTYXZlUmVnaXN0
ZXJzKCk7CiAKICNlbmRpZiAvLyAhRU5BQkxFKENfTE9PUCkgJiYgTlVNQkVSX09GX0NBTExFRV9T
QVZFU19SRUdJU1RFUlMgPiAwCiAKLSAgICByZXR1cm4gbnVsbHB0cjsKKyAgICByZXR1cm4gV1RG
OjpudWxsb3B0OwogfQogCiBTdHJpbmcgU3RhY2tWaXNpdG9yOjpGcmFtZTo6ZnVuY3Rpb25OYW1l
KCkgY29uc3QKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9TdGFja1Zp
c2l0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIv
U3RhY2tWaXNpdG9yLmgJKHJldmlzaW9uIDI0Mzc4MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pbnRlcnByZXRlci9TdGFja1Zpc2l0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtOTQsNyArOTQs
NyBAQCBwdWJsaWM6CiAgICAgICAgIGJvb2wgaGFzTGluZUFuZENvbHVtbkluZm8oKSBjb25zdDsK
ICAgICAgICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBjb21wdXRlTGluZUFuZENvbHVtbih1bnNp
Z25lZCYgbGluZSwgdW5zaWduZWQmIGNvbHVtbikgY29uc3Q7CiAKLSAgICAgICAgY29uc3QgUmVn
aXN0ZXJBdE9mZnNldExpc3QqIGNhbGxlZVNhdmVSZWdpc3RlcnMoKTsKKyAgICAgICAgT3B0aW9u
YWw8UmVnaXN0ZXJBdE9mZnNldExpc3Q+IGNhbGxlZVNhdmVSZWdpc3RlcnNGb3JVbndpbmRpbmco
KTsKIAogICAgICAgICBDbG9uZWRBcmd1bWVudHMqIGNyZWF0ZUFyZ3VtZW50cygpOwogICAgICAg
ICBDYWxsRnJhbWUqIGNhbGxGcmFtZSgpIGNvbnN0IHsgcmV0dXJuIG1fY2FsbEZyYW1lOyB9Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wZXJhdGlvbnMuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5jcHAJKHJldmlz
aW9uIDI0Mzc4MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTc2LDYgKzc2LDcgQEAKICNpbmNsdWRlICJUaHVua0dlbmVy
YXRvcnMuaCIKICNpbmNsdWRlICJUeXBlUHJvZmlsZXJMb2cuaCIKICNpbmNsdWRlICJWTUlubGlu
ZXMuaCIKKyNpbmNsdWRlICJXZWJBc3NlbWJseUZ1bmN0aW9uLmgiCiAjaW5jbHVkZSA8d3RmL0lu
bGluZUFTTS5oPgogCiBuYW1lc3BhY2UgSlNDIHsKQEAgLTEwMzYsOSArMTAzNywxOSBAQCBTbG93
UGF0aFJldHVyblR5cGUgSklUX09QRVJBVElPTiBvcGVyYXRpCiAKICAgICBNYWNyb0Fzc2VtYmxl
ckNvZGVQdHI8SlNFbnRyeVB0clRhZz4gY29kZVB0cjsKICAgICBDb2RlQmxvY2sqIGNvZGVCbG9j
ayA9IG51bGxwdHI7Ci0gICAgaWYgKGV4ZWN1dGFibGUtPmlzSG9zdEZ1bmN0aW9uKCkpCi0gICAg
ICAgIGNvZGVQdHIgPSBleGVjdXRhYmxlLT5lbnRyeXBvaW50Rm9yKGtpbmQsIE11c3RDaGVja0Fy
aXR5KTsKLSAgICBlbHNlIHsKKyAgICBpZiAoZXhlY3V0YWJsZS0+aXNIb3N0RnVuY3Rpb24oKSkg
eworI2lmIEVOQUJMRShXRUJBU1NFTUJMWSkKKyAgICAgICAgaWYgKGtpbmQgPT0gQ29kZUZvckNh
bGwpIHsKKyAgICAgICAgICAgIGlmIChhdXRvKiB3YXNtRnVuY3Rpb24gPSBqc0R5bmFtaWNDYXN0
PFdlYkFzc2VtYmx5RnVuY3Rpb24qPigqdm0sIGNhbGxlZSkpIHsKKyAgICAgICAgICAgICAgICBj
b2RlUHRyID0gd2FzbUZ1bmN0aW9uLT5qc0NhbGxFbnRyeXBvaW50KCk7CisgICAgICAgICAgICAg
ICAgLy9kYXRhTG9nTG4oIk1vbm9tb3JwaGljIElDaW5nIHdhc20hIik7CisgICAgICAgICAgICB9
CisgICAgICAgIH0KKyNlbmRpZgorCisgICAgICAgIGlmICghY29kZVB0cikKKyAgICAgICAgICAg
IGNvZGVQdHIgPSBleGVjdXRhYmxlLT5lbnRyeXBvaW50Rm9yKGtpbmQsIE11c3RDaGVja0FyaXR5
KTsKKyAgICB9IGVsc2UgewogICAgICAgICBGdW5jdGlvbkV4ZWN1dGFibGUqIGZ1bmN0aW9uRXhl
Y3V0YWJsZSA9IHN0YXRpY19jYXN0PEZ1bmN0aW9uRXhlY3V0YWJsZSo+KGV4ZWN1dGFibGUpOwog
CiAgICAgICAgIGF1dG8gaGFuZGxlVGhyb3dFeGNlcHRpb24gPSBbJl0gKCkgewpAQCAtMTA2NCw2
ICsxMDc1LDcgQEAgU2xvd1BhdGhSZXR1cm5UeXBlIEpJVF9PUEVSQVRJT04gb3BlcmF0aQogICAg
ICAgICAgICAgYXJpdHkgPSBBcml0eUNoZWNrTm90UmVxdWlyZWQ7CiAgICAgICAgIGNvZGVQdHIg
PSBmdW5jdGlvbkV4ZWN1dGFibGUtPmVudHJ5cG9pbnRGb3Ioa2luZCwgYXJpdHkpOwogICAgIH0K
KwogICAgIGlmICghY2FsbExpbmtJbmZvLT5zZWVuT25jZSgpKQogICAgICAgICBjYWxsTGlua0lu
Zm8tPnNldFNlZW4oKTsKICAgICBlbHNlCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L1JlcGF0Y2guY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUmVw
YXRjaC5jcHAJKHJldmlzaW9uIDI0Mzc4MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
UmVwYXRjaC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTk3NSw3ICs5NzUsNyBAQCB2b2lkIGxpbmtQ
b2x5bW9ycGhpY0NhbGwoCiAgICAgaWYgKFBvbHltb3JwaGljQ2FsbFN0dWJSb3V0aW5lKiBzdHVi
ID0gY2FsbExpbmtJbmZvLnN0dWIoKSkKICAgICAgICAgbGlzdCA9IHN0dWItPnZhcmlhbnRzKCk7
CiAgICAgZWxzZSBpZiAoSlNPYmplY3QqIG9sZENhbGxlZSA9IGNhbGxMaW5rSW5mby5jYWxsZWUo
KSkKLSAgICAgICAgbGlzdCA9IENhbGxWYXJpYW50TGlzdHsgQ2FsbFZhcmlhbnQob2xkQ2FsbGVl
KSB9OworICAgICAgICBsaXN0ID0gQ2FsbFZhcmlhbnRMaXN0IHsgQ2FsbFZhcmlhbnQob2xkQ2Fs
bGVlKSB9OwogICAgIAogICAgIGxpc3QgPSB2YXJpYW50TGlzdFdpdGhWYXJpYW50KGxpc3QsIG5l
d1ZhcmlhbnQpOwogCkBAIC0xMTM3LDcgKzExMzcsMjMgQEAgdm9pZCBsaW5rUG9seW1vcnBoaWND
YWxsKAogICAgICAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHI8SlNFbnRyeVB0clRhZz4gY29kZVB0
cjsKICAgICAgICAgaWYgKHZhcmlhbnQuZXhlY3V0YWJsZSgpKSB7CiAgICAgICAgICAgICBBU1NF
UlQodmFyaWFudC5leGVjdXRhYmxlKCktPmhhc0pJVENvZGVGb3JDYWxsKCkpOwotICAgICAgICAg
ICAgY29kZVB0ciA9IHZhcmlhbnQuZXhlY3V0YWJsZSgpLT5nZW5lcmF0ZWRKSVRDb2RlRm9yQ2Fs
bCgpLT5hZGRyZXNzRm9yQ2FsbChBcml0eUNoZWNrTm90UmVxdWlyZWQpOworCisjaWYgRU5BQkxF
KFdFQkFTU0VNQkxZKQorICAgICAgICAgICAgaWYgKGNhbGxMaW5rSW5mby5zcGVjaWFsaXphdGlv
bktpbmQoKSA9PSBDb2RlRm9yQ2FsbCkgeworICAgICAgICAgICAgICAgIGlmIChKU0Z1bmN0aW9u
KiBmdW5jdGlvbiA9IHZhcmlhbnQuZnVuY3Rpb24oKSkgeworICAgICAgICAgICAgICAgICAgICBp
ZiAoYXV0byogd2FzbUZ1bmN0aW9uID0ganNEeW5hbWljQ2FzdDxXZWJBc3NlbWJseUZ1bmN0aW9u
Kj4odm0sIGZ1bmN0aW9uKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgY29kZVB0ciA9IHdh
c21GdW5jdGlvbi0+anNDYWxsRW50cnlwb2ludCgpOworICAgICAgICAgICAgICAgICAgICAgICAg
Ly9pZiAoY29kZVB0cikKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgIGRhdGFMb2dMbigi
UG9seW1vcnBoaWMgSUNpbmcgd2FzbSIpOworICAgICAgICAgICAgICAgICAgICAgICAgLy9lbHNl
CisgICAgICAgICAgICAgICAgICAgICAgICAvLyAgICBkYXRhTG9nTG4oIkNvdWxkIG5vdCBnZW5l
cmF0ZSB3YXNtIGNvZGUgcG9seW1vcnBoaWMgSUMhIik7CisgICAgICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisjZW5kaWYKKworICAgICAgICAgICAg
aWYgKCFjb2RlUHRyKQorICAgICAgICAgICAgICAgIGNvZGVQdHIgPSB2YXJpYW50LmV4ZWN1dGFi
bGUoKS0+Z2VuZXJhdGVkSklUQ29kZUZvckNhbGwoKS0+YWRkcmVzc0ZvckNhbGwoQXJpdHlDaGVj
a05vdFJlcXVpcmVkKTsKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIEFTU0VSVCh2YXJp
YW50LmludGVybmFsRnVuY3Rpb24oKSk7CiAgICAgICAgICAgICBjb2RlUHRyID0gdm0uZ2V0Q1RJ
SW50ZXJuYWxGdW5jdGlvblRyYW1wb2xpbmVGb3IoQ29kZUZvckNhbGwpOwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTmF0aXZlRXhlY3V0YWJsZS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTmF0aXZlRXhlY3V0YWJsZS5jcHAJKHJl
dmlzaW9uIDI0Mzc4MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL05hdGl2ZUV4
ZWN1dGFibGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNCw2ICszNCw3IEBACiAjaW5jbHVkZSAi
UGFyc2VyLmgiCiAjaW5jbHVkZSAiVHlwZVByb2ZpbGVyLmgiCiAjaW5jbHVkZSAiVk1JbmxpbmVz
LmgiCisjaW5jbHVkZSAiV2ViQXNzZW1ibHlGdW5jdGlvbi5oIgogI2luY2x1ZGUgPHd0Zi9Db21t
YVByaW50ZXIuaD4KIAogbmFtZXNwYWNlIEpTQyB7CkBAIC00Miw4ICs0Myw3IEBAIGNvbnN0IENs
YXNzSW5mbyBOYXRpdmVFeGVjdXRhYmxlOjpzX2luZm8KIAogTmF0aXZlRXhlY3V0YWJsZSogTmF0
aXZlRXhlY3V0YWJsZTo6Y3JlYXRlKFZNJiB2bSwgUmVmPEpJVENvZGU+JiYgY2FsbFRodW5rLCBU
YWdnZWROYXRpdmVGdW5jdGlvbiBmdW5jdGlvbiwgUmVmPEpJVENvZGU+JiYgY29uc3RydWN0VGh1
bmssIFRhZ2dlZE5hdGl2ZUZ1bmN0aW9uIGNvbnN0cnVjdG9yLCBjb25zdCBTdHJpbmcmIG5hbWUp
CiB7Ci0gICAgTmF0aXZlRXhlY3V0YWJsZSogZXhlY3V0YWJsZTsKLSAgICBleGVjdXRhYmxlID0g
bmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8TmF0aXZlRXhlY3V0YWJsZT4odm0uaGVhcCkpIE5h
dGl2ZUV4ZWN1dGFibGUodm0sIGZ1bmN0aW9uLCBjb25zdHJ1Y3Rvcik7CisgICAgTmF0aXZlRXhl
Y3V0YWJsZSogZXhlY3V0YWJsZSA9IG5ldyAoTm90TnVsbCwgYWxsb2NhdGVDZWxsPE5hdGl2ZUV4
ZWN1dGFibGU+KHZtLmhlYXApKSBOYXRpdmVFeGVjdXRhYmxlKHZtLCBmdW5jdGlvbiwgY29uc3Ry
dWN0b3IpOwogICAgIGV4ZWN1dGFibGUtPmZpbmlzaENyZWF0aW9uKHZtLCBXVEZNb3ZlKGNhbGxU
aHVuayksIFdURk1vdmUoY29uc3RydWN0VGh1bmspLCBuYW1lKTsKICAgICByZXR1cm4gZXhlY3V0
YWJsZTsKIH0KQEAgLTgwLDYgKzgwLDE4IEBAIE5hdGl2ZUV4ZWN1dGFibGU6Ok5hdGl2ZUV4ZWN1
dGFibGUoVk0mIHYKIHsKIH0KIAordm9pZCBOYXRpdmVFeGVjdXRhYmxlOjp2aXNpdENoaWxkcmVu
KEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit7CisgICAgTmF0aXZlRXhlY3V0
YWJsZSogdGhpc09iamVjdCA9IGpzQ2FzdDxOYXRpdmVFeGVjdXRhYmxlKj4oY2VsbCk7CisgICAg
QVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOworCisgICAgQmFz
ZTo6dmlzaXRDaGlsZHJlbih0aGlzT2JqZWN0LCB2aXNpdG9yKTsKKworI2lmIEVOQUJMRShXRUJB
U1NFTUJMWSkKKyAgICB2aXNpdG9yLmFwcGVuZCh0aGlzT2JqZWN0LT5tX3dlYkFzc2VtYmx5RnVu
Y3Rpb24pOworI2VuZGlmCit9CisKIGNvbnN0IERPTUpJVDo6U2lnbmF0dXJlKiBOYXRpdmVFeGVj
dXRhYmxlOjpzaWduYXR1cmVGb3IoQ29kZVNwZWNpYWxpemF0aW9uS2luZCBraW5kKSBjb25zdAog
ewogICAgIEFTU0VSVChoYXNKSVRDb2RlRm9yKGtpbmQpKTsKQEAgLTEwMCw0ICsxMTIsNiBAQCBD
b2RlQmxvY2tIYXNoIE5hdGl2ZUV4ZWN1dGFibGU6Omhhc2hGb3IoCiAgICAgcmV0dXJuIENvZGVC
bG9ja0hhc2goYml0d2lzZV9jYXN0PHVpbnRwdHJfdD4obV9jb25zdHJ1Y3RvcikpOwogfQogCit2
b2lkIE5hdGl2ZUV4ZWN1dGFibGU6OnNldFdlYkFzc2VtYmx5RnVuY3Rpb24oVk0mIHZtLCBXZWJB
c3NlbWJseUZ1bmN0aW9uKiBmdW5jdGlvbikgeyBtX3dlYkFzc2VtYmx5RnVuY3Rpb24uc2V0KHZt
LCB0aGlzLCBmdW5jdGlvbik7IH0KKwogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9OYXRpdmVFeGVjdXRhYmxlLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTmF0aXZlRXhlY3V0YWJsZS5oCShyZXZpc2lv
biAyNDM3ODApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9OYXRpdmVFeGVjdXRh
YmxlLmgJKHdvcmtpbmcgY29weSkKQEAgLTI5LDYgKzI5LDEwIEBACiAKIG5hbWVzcGFjZSBKU0Mg
ewogCisjaWYgRU5BQkxFKFdFQkFTU0VNQkxZKQorY2xhc3MgV2ViQXNzZW1ibHlGdW5jdGlvbjsK
KyNlbmRpZgorCiBjbGFzcyBOYXRpdmVFeGVjdXRhYmxlIGZpbmFsIDogcHVibGljIEV4ZWN1dGFi
bGVCYXNlIHsKICAgICBmcmllbmQgY2xhc3MgSklUOwogICAgIGZyaWVuZCBjbGFzcyBMTEludE9m
ZnNldHNFeHRyYWN0b3I7CkBAIC03NiwxNiArODAsMjcgQEAgcHVibGljOgogICAgIGNvbnN0IERP
TUpJVDo6U2lnbmF0dXJlKiBzaWduYXR1cmVGb3IoQ29kZVNwZWNpYWxpemF0aW9uS2luZCkgY29u
c3Q7CiAgICAgSW50cmluc2ljIGludHJpbnNpYygpIGNvbnN0OwogCisKKyNpZiBFTkFCTEUoV0VC
QVNTRU1CTFkpCisgICAgdm9pZCBzZXRXZWJBc3NlbWJseUZ1bmN0aW9uKFZNJiwgV2ViQXNzZW1i
bHlGdW5jdGlvbiopOworICAgIFdlYkFzc2VtYmx5RnVuY3Rpb24qIHdlYkFzc2VtYmx5RnVuY3Rp
b24oKSB7IHJldHVybiBtX3dlYkFzc2VtYmx5RnVuY3Rpb24uZ2V0KCk7IH0KKyNlbmRpZgorCiBw
cm90ZWN0ZWQ6CiAgICAgdm9pZCBmaW5pc2hDcmVhdGlvbihWTSYsIFJlZjxKSVRDb2RlPiYmIGNh
bGxUaHVuaywgUmVmPEpJVENvZGU+JiYgY29uc3RydWN0VGh1bmssIGNvbnN0IFN0cmluZyYgbmFt
ZSk7CiAKIHByaXZhdGU6CisgICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBT
bG90VmlzaXRvciYpOworCiAgICAgTmF0aXZlRXhlY3V0YWJsZShWTSYsIFRhZ2dlZE5hdGl2ZUZ1
bmN0aW9uLCBUYWdnZWROYXRpdmVGdW5jdGlvbiBjb25zdHJ1Y3Rvcik7CiAKICAgICBUYWdnZWRO
YXRpdmVGdW5jdGlvbiBtX2Z1bmN0aW9uOwogICAgIFRhZ2dlZE5hdGl2ZUZ1bmN0aW9uIG1fY29u
c3RydWN0b3I7CiAKICAgICBTdHJpbmcgbV9uYW1lOworI2lmIEVOQUJMRShXRUJBU1NFTUJMWSkK
KyAgICBXcml0ZUJhcnJpZXI8V2ViQXNzZW1ibHlGdW5jdGlvbj4gbV93ZWJBc3NlbWJseUZ1bmN0
aW9uOworI2VuZGlmCiB9OwogCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS93YXNtL1dhc21PTUdQbGFuLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvd2FzbS9XYXNtT01HUGxhbi5jcHAJKHJldmlzaW9uIDI0Mzc4MCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21PTUdQbGFuLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMTM4LDcgKzEzOCw3IEBAIHZvaWQgT01HUGxhbjo6d29yayhDb21waWxhdGlvbkVmZm9ydCkK
ICAgICB7CiAgICAgICAgIExvY2tIb2xkZXIgaG9sZGVyKG1fY29kZUJsb2NrLT5tX2xvY2spOwog
Ci0gICAgICAgIGF1dG8gcmVwYXRjaENhbGxzID0gWyZdIChjb25zdCBWZWN0b3I8VW5saW5rZWRX
YXNtVG9XYXNtQ2FsbD4mICBjYWxsc2l0ZXMpIHsKKyAgICAgICAgYXV0byByZXBhdGNoQ2FsbHMg
PSBbJl0gKGNvbnN0IFZlY3RvcjxVbmxpbmtlZFdhc21Ub1dhc21DYWxsPiYgY2FsbHNpdGVzKSB7
CiAgICAgICAgICAgICBmb3IgKGF1dG8mIGNhbGwgOiBjYWxsc2l0ZXMpIHsKICAgICAgICAgICAg
ICAgICBkYXRhTG9nTG5JZihXYXNtT01HUGxhbkludGVybmFsOjp2ZXJib3NlLCAiQ29uc2lkZXJp
bmcgcmVwYXRjaGluZyBjYWxsIGF0OiAiLCBSYXdQb2ludGVyKGNhbGwuY2FsbExvY2F0aW9uLmRh
dGFMb2NhdGlvbigpKSwgIiB0aGF0IHRhcmdldHMgIiwgY2FsbC5mdW5jdGlvbkluZGV4U3BhY2Up
OwogICAgICAgICAgICAgICAgIGlmIChjYWxsLmZ1bmN0aW9uSW5kZXhTcGFjZSA9PSBmdW5jdGlv
bkluZGV4U3BhY2UpIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFz
c2VtYmx5RnVuY3Rpb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93
YXNtL2pzL1dlYkFzc2VtYmx5RnVuY3Rpb24uY3BwCShyZXZpc2lvbiAyNDM3ODApCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseUZ1bmN0aW9uLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMzYsMTkgKzM2LDU0IEBACiAjaW5jbHVkZSAiSlNXZWJBc3NlbWJseU1lbW9y
eS5oIgogI2luY2x1ZGUgIkpTV2ViQXNzZW1ibHlSdW50aW1lRXJyb3IuaCIKICNpbmNsdWRlICJM
TEludFRodW5rcy5oIgorI2luY2x1ZGUgIkxpbmtCdWZmZXIuaCIKICNpbmNsdWRlICJQcm90b0Nh
bGxGcmFtZS5oIgogI2luY2x1ZGUgIlZNLmgiCiAjaW5jbHVkZSAiV2FzbUNhbGxlZS5oIgorI2lu
Y2x1ZGUgIldhc21DYWxsaW5nQ29udmVudGlvbi5oIgogI2luY2x1ZGUgIldhc21Db250ZXh0SW5s
aW5lcy5oIgogI2luY2x1ZGUgIldhc21Gb3JtYXQuaCIKICNpbmNsdWRlICJXYXNtTWVtb3J5Lmgi
CisjaW5jbHVkZSAiV2FzbU1lbW9yeUluZm9ybWF0aW9uLmgiCisjaW5jbHVkZSAiV2FzbU1vZHVs
ZUluZm9ybWF0aW9uLmgiCiAjaW5jbHVkZSAiV2FzbVNpZ25hdHVyZUlubGluZXMuaCIKICNpbmNs
dWRlIDx3dGYvRmFzdFRMUy5oPgogI2luY2x1ZGUgPHd0Zi9TdGFja1BvaW50ZXIuaD4KICNpbmNs
dWRlIDx3dGYvU3lzdGVtVHJhY2luZy5oPgogCisjaW5jbHVkZSAiTWFjcm9Bc3NlbWJsZXJQcmlu
dGVyLmgiCisjaW5jbHVkZSAiR1BSSW5mby5oIgorI2luY2x1ZGUgIkZQUkluZm8uaCIKKyNpbmNs
dWRlICJSZWdpc3RlcklELmgiCisjaW5jbHVkZSA8d3RmL1Njb3BlLmg+CisKIG5hbWVzcGFjZSBK
U0MgewogCitjb25zdCBDbGFzc0luZm8gSlNUb1dhc21JQ0NhbGxlZTo6c19pbmZvID0geyAiSlNU
b1dhc21JQ0NhbGxlZSIsICZCYXNlOjpzX2luZm8sIG51bGxwdHIsIG51bGxwdHIsIENSRUFURV9N
RVRIT0RfVEFCTEUoSlNUb1dhc21JQ0NhbGxlZSkgfTsKKworSlNUb1dhc21JQ0NhbGxlZSogSlNU
b1dhc21JQ0NhbGxlZTo6Y3JlYXRlKFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVj
dCwgV2ViQXNzZW1ibHlGdW5jdGlvbiogZnVuY3Rpb24pCit7CisgICAgYXV0byogc3RydWN0dXJl
ID0gY3JlYXRlU3RydWN0dXJlKHZtLCBnbG9iYWxPYmplY3QsIEpTVmFsdWUoKSk7CisgICAgSlNU
b1dhc21JQ0NhbGxlZSogcmVzdWx0ID0gbmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8SlNUb1dh
c21JQ0NhbGxlZT4odm0uaGVhcCkpIEpTVG9XYXNtSUNDYWxsZWUodm0sIGdsb2JhbE9iamVjdCwg
c3RydWN0dXJlKTsKKyAgICByZXN1bHQtPmZpbmlzaENyZWF0aW9uKHZtKTsKKyAgICByZXN1bHQt
Pm1fZnVuY3Rpb24uc2V0KHZtLCByZXN1bHQsIGZ1bmN0aW9uKTsKKyAgICByZXR1cm4gcmVzdWx0
OworfQorCitTdHJ1Y3R1cmUqIEpTVG9XYXNtSUNDYWxsZWU6OmNyZWF0ZVN0cnVjdHVyZShWTSYg
dm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgcHJvdG90eXBlKQorewor
ICAgIHJldHVybiBTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUs
IFR5cGVJbmZvKEpTQ2FsbGVlVHlwZSwgU3RydWN0dXJlRmxhZ3MpLCBpbmZvKCkpOworfQorCit2
b2lkIEpTVG9XYXNtSUNDYWxsZWU6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90Vmlz
aXRvciYgdmlzaXRvcikKK3sKKyAgICBKU1RvV2FzbUlDQ2FsbGVlKiB0aGlzT2JqZWN0ID0ganND
YXN0PEpTVG9XYXNtSUNDYWxsZWUqPihjZWxsKTsKKyAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVS
SVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CisKKyAgICBCYXNlOjp2aXNpdENoaWxkcmVuKHRoaXNP
YmplY3QsIHZpc2l0b3IpOworICAgIHZpc2l0b3IuYXBwZW5kKHRoaXNPYmplY3QtPm1fZnVuY3Rp
b24pOworfQorCiBjb25zdCBDbGFzc0luZm8gV2ViQXNzZW1ibHlGdW5jdGlvbjo6c19pbmZvID0g
eyAiV2ViQXNzZW1ibHlGdW5jdGlvbiIsICZCYXNlOjpzX2luZm8sIG51bGxwdHIsIG51bGxwdHIs
IENSRUFURV9NRVRIT0RfVEFCTEUoV2ViQXNzZW1ibHlGdW5jdGlvbikgfTsKIAogc3RhdGljIEVu
Y29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY2FsbFdlYkFzc2VtYmx5RnVuY3Rpb24oRXhlY1N0
YXRlKiBleGVjKQpAQCAtMTE2LDYgKzE1MSw3IEBAIHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0Nf
SE9TVF9DQUxMIGNhbGwKIAogICAgIC8vIEZJWE1FIERvIGF3YXkgd2l0aCB0aGlzIGVudGlyZSBm
dW5jdGlvbiwgYW5kIG9ubHkgdXNlIHRoZSBlbnRyeXBvaW50IGdlbmVyYXRlZCBieSBCMy4gaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2NjQ4NgogICAgIFdhc206Oklu
c3RhbmNlKiBwcmV2V2FzbUluc3RhbmNlID0gdm0ud2FzbUNvbnRleHQubG9hZCgpOworICAgIC8v
ZGF0YUxvZ0xuKCJQcmV2aW91cyB3YXNtIGNvbnRleHQ6ICIsIFJhd1BvaW50ZXIocHJldldhc21J
bnN0YW5jZSksICIgZm9yIGNmcjogIiwgUmF3UG9pbnRlcihleGVjKSk7CiAgICAgewogICAgICAg
ICAvLyBXZSBkbyB0aGUgc3RhY2sgY2hlY2sgaGVyZSBmb3IgdGhlIHdyYXBwZXIgZnVuY3Rpb24g
YmVjYXVzZSB3ZSBkb24ndAogICAgICAgICAvLyB3YW50IHRvIGVtaXQgYSBzdGFjayBjaGVjayBp
bnNpZGUgZXZlcnkgd3JhcHBlciBmdW5jdGlvbi4KQEAgLTEyNSw2ICsxNjEsNyBAQCBzdGF0aWMg
RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBjYWxsCiAgICAgICAgIGlmIChVTkxJS0VMWSgo
c3AgPCBzdGFja1NwYWNlVXNlZCkgfHwgKChzcCAtIHN0YWNrU3BhY2VVc2VkKSA8IGJpdHdpc2Vf
Y2FzdDxpbnRwdHJfdD4odm0uc29mdFN0YWNrTGltaXQoKSkpKSkKICAgICAgICAgICAgIHJldHVy
biBKU1ZhbHVlOjplbmNvZGUodGhyb3dFeGNlcHRpb24oZXhlYywgc2NvcGUsIGNyZWF0ZVN0YWNr
T3ZlcmZsb3dFcnJvcihleGVjKSkpOwogICAgIH0KKyAgICAvL2RhdGFMb2dMbigiUmVzdG9yaW5n
IHByZXZpb3VzIHdhc20gY29udGV4dDogIiwgUmF3UG9pbnRlcihwcmV2V2FzbUluc3RhbmNlKSwg
IiBmb3IgY2ZyOiAiLCBSYXdQb2ludGVyKGV4ZWMpKTsKICAgICB2bS53YXNtQ29udGV4dC5zdG9y
ZSh3YXNtSW5zdGFuY2UsIHZtLnNvZnRTdGFja0xpbWl0KCkpOwogICAgIEFTU0VSVCh3YXNtRnVu
Y3Rpb24tPmluc3RhbmNlKCkpOwogICAgIEFTU0VSVCgmd2FzbUZ1bmN0aW9uLT5pbnN0YW5jZSgp
LT5pbnN0YW5jZSgpID09IHZtLndhc21Db250ZXh0LmxvYWQoKSk7CkBAIC0xNDgsMTEgKzE4NSwz
MTQgQEAgc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY2FsbAogICAgIHJldHVy
biByYXdSZXN1bHQ7CiB9CiAKK2Jvb2wgV2ViQXNzZW1ibHlGdW5jdGlvbjo6dXNlc1RhZ1JlZ2lz
dGVycygpIGNvbnN0Cit7CisgICAgY29uc3QgYXV0byYgc2lnbmF0dXJlID0gV2FzbTo6U2lnbmF0
dXJlSW5mb3JtYXRpb246OmdldChzaWduYXR1cmVJbmRleCgpKTsKKyAgICByZXR1cm4gc2lnbmF0
dXJlLmFyZ3VtZW50Q291bnQoKSB8fCBzaWduYXR1cmUucmV0dXJuVHlwZSgpICE9IFdhc206OlZv
aWQ7Cit9CisKK1JlZ2lzdGVyQXRPZmZzZXRMaXN0IFdlYkFzc2VtYmx5RnVuY3Rpb246OnVzZWRD
YWxsZWVTYXZlUmVnaXN0ZXJzKCkgY29uc3QKK3sKKyAgICBhdXRvIG1lbW9yeU1vZGUgPSBpbnN0
YW5jZSgpLT5tZW1vcnlNb2RlKCk7CisgICAgY29uc3QgYXV0byYgcGlubmVkUmVncyA9IFdhc206
OlBpbm5lZFJlZ2lzdGVySW5mbzo6Z2V0KCk7CisgICAgUmVnaXN0ZXJTZXQgdG9TYXZlID0gcGlu
bmVkUmVncy50b1NhdmUobWVtb3J5TW9kZSk7CisgICAgaWYgKHVzZXNUYWdSZWdpc3RlcnMoKSkg
eworICAgICAgICBSZWdpc3RlclNldCB0YWdSZWdpc3RlcnMgPSBSZWdpc3RlclNldDo6cnVudGlt
ZVJlZ2lzdGVycygpOworICAgICAgICAvLyBXZSByZWx5IG9uIHRoZXNlIGJlaW5nIGRpc2pvaW50
IHNldHMuCisjaWYgIUFTU0VSVF9ESVNBQkxFRAorICAgICAgICBmb3IgKFJlZyByZWcgOiB0YWdS
ZWdpc3RlcnMpCisgICAgICAgICAgICBBU1NFUlQoIXRvU2F2ZS5jb250YWlucyhyZWcpKTsKKyNl
bmRpZgorICAgICAgICB0b1NhdmUubWVyZ2UodGFnUmVnaXN0ZXJzKTsKKyAgICB9CisgICAgcmV0
dXJuIFJlZ2lzdGVyQXRPZmZzZXRMaXN0IHsgdG9TYXZlLCBSZWdpc3RlckF0T2Zmc2V0TGlzdDo6
T2Zmc2V0QmFzZVR5cGU6OkZyYW1lUG9pbnRlckJhc2VkIH07Cit9CisKK3B0cmRpZmZfdCBXZWJB
c3NlbWJseUZ1bmN0aW9uOjpwcmV2aW91c0luc3RhbmNlT2Zmc2V0KCkgY29uc3QKK3sKKyAgICBw
dHJkaWZmX3QgbWluT2Zmc2V0ID0gMTsKKyAgICBmb3IgKGNvbnN0IFJlZ2lzdGVyQXRPZmZzZXQm
IHJlZ0F0T2Zmc2V0IDogdXNlZENhbGxlZVNhdmVSZWdpc3RlcnMoKSkgeworICAgICAgICBwdHJk
aWZmX3Qgb2Zmc2V0ID0gcmVnQXRPZmZzZXQub2Zmc2V0KCk7CisgICAgICAgIEFTU0VSVChvZmZz
ZXQgPCAwKTsKKyAgICAgICAgbWluT2Zmc2V0ID0gc3RkOjptaW4ob2Zmc2V0LCBtaW5PZmZzZXQp
OworICAgIH0KKyAgICBBU1NFUlQobWluT2Zmc2V0ICE9IDEpOworICAgIHJldHVybiBtaW5PZmZz
ZXQgLSA4OworfQorCitXYXNtOjpJbnN0YW5jZSogV2ViQXNzZW1ibHlGdW5jdGlvbjo6cHJldmlv
dXNJbnN0YW5jZShDYWxsRnJhbWUqIGNhbGxGcmFtZSkKK3sKKyAgICBBU1NFUlQoY2FsbEZyYW1l
LT5jYWxsZWUoKS5yYXdQdHIoKSA9PSBtX2pzVG9XYXNtSUNDYWxsZWUuZ2V0KCkpOworICAgIGF1
dG8qIHJlc3VsdCA9ICpiaXR3aXNlX2Nhc3Q8V2FzbTo6SW5zdGFuY2UqKj4oYml0d2lzZV9jYXN0
PGNoYXIqPihjYWxsRnJhbWUpICsgcHJldmlvdXNJbnN0YW5jZU9mZnNldCgpKTsKKyAgICByZXR1
cm4gcmVzdWx0OworfQorCitNYWNyb0Fzc2VtYmxlckNvZGVQdHI8SlNFbnRyeVB0clRhZz4gV2Vi
QXNzZW1ibHlGdW5jdGlvbjo6anNDYWxsRW50cnlwb2ludFNsb3coKQoreworICAgIFZNJiB2bSA9
ICp0aGlzLT52bSgpOworICAgIENDYWxsSGVscGVycyBqaXQ7CisKKyAgICBjb25zdCBhdXRvJiBz
aWduYXR1cmUgPSBXYXNtOjpTaWduYXR1cmVJbmZvcm1hdGlvbjo6Z2V0KHNpZ25hdHVyZUluZGV4
KCkpOworICAgIGNvbnN0IGF1dG8mIHBpbm5lZFJlZ3MgPSBXYXNtOjpQaW5uZWRSZWdpc3Rlcklu
Zm86OmdldCgpOworICAgIFJlZ2lzdGVyQXRPZmZzZXRMaXN0IHJlZ2lzdGVyc1RvU3BpbGwgPSB1
c2VkQ2FsbGVlU2F2ZVJlZ2lzdGVycygpOworCisgICAgYXV0byYgbW9kdWxlSW5mb3JtYXRpb24g
PSBpbnN0YW5jZSgpLT5pbnN0YW5jZSgpLm1vZHVsZSgpLm1vZHVsZUluZm9ybWF0aW9uKCk7CisK
KyAgICB1bnNpZ25lZCB0b3RhbEZyYW1lU2l6ZSA9IHJlZ2lzdGVyc1RvU3BpbGwuc2l6ZSgpICog
c2l6ZW9mKENQVVJlZ2lzdGVyKTsKKyAgICB0b3RhbEZyYW1lU2l6ZSArPSBzaXplb2YoQ1BVUmVn
aXN0ZXIpOyAvLyBTbG90IGZvciB0aGUgVk0ncyBwcmV2aW91cyB3YXNtIGluc3RhbmNlLgorICAg
IHRvdGFsRnJhbWVTaXplICs9IFdhc206Oldhc21DYWxsaW5nQ29udmVudGlvbjo6aGVhZGVyU2l6
ZUluQnl0ZXMoKTsKKyAgICB0b3RhbEZyYW1lU2l6ZSAtPSBzaXplb2YoQ2FsbGVyRnJhbWVBbmRQ
Qyk7CisKKyAgICB1bnNpZ25lZCBudW1HUFJzID0gMDsKKyAgICB1bnNpZ25lZCBudW1GUFJzID0g
MDsKKyAgICBib29sIGFyZ3VtZW50c0luY2x1ZGVJNjQgPSBmYWxzZTsKKyAgICBmb3IgKHVuc2ln
bmVkIGkgPSAwOyBpIDwgc2lnbmF0dXJlLmFyZ3VtZW50Q291bnQoKTsgaSsrKSB7CisgICAgICAg
IHN3aXRjaCAoc2lnbmF0dXJlLmFyZ3VtZW50KGkpKSB7CisgICAgICAgIGNhc2UgV2FzbTo6STY0
OgorICAgICAgICAgICAgYXJndW1lbnRzSW5jbHVkZUk2NCA9IHRydWU7CisgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgY2FzZSBXYXNtOjpJMzI6CisgICAgICAgICAgICBpZiAobnVtR1BScyA+
PSBXYXNtOjp3YXNtQ2FsbGluZ0NvbnZlbnRpb24oKS5tX2dwckFyZ3Muc2l6ZSgpKQorICAgICAg
ICAgICAgICAgIHRvdGFsRnJhbWVTaXplICs9IHNpemVvZihDUFVSZWdpc3Rlcik7CisgICAgICAg
ICAgICArK251bUdQUnM7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBXYXNtOjpG
MzI6CisgICAgICAgIGNhc2UgV2FzbTo6RjY0OgorICAgICAgICAgICAgaWYgKG51bUZQUnMgPj0g
V2FzbTo6d2FzbUNhbGxpbmdDb252ZW50aW9uKCkubV9mcHJBcmdzLnNpemUoKSkKKyAgICAgICAg
ICAgICAgICB0b3RhbEZyYW1lU2l6ZSArPSBzaXplb2YoQ1BVUmVnaXN0ZXIpOworICAgICAgICAg
ICAgKytudW1GUFJzOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAg
ICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICB9CisgICAgfQor
CisgICAgaWYgKGFyZ3VtZW50c0luY2x1ZGVJNjQpCisgICAgICAgIHJldHVybiBudWxscHRyOwor
CisgICAgdG90YWxGcmFtZVNpemUgPSBXVEY6OnJvdW5kVXBUb011bHRpcGxlT2Yoc3RhY2tBbGln
bm1lbnRCeXRlcygpLCB0b3RhbEZyYW1lU2l6ZSk7CisKKyAgICBqaXQuZW1pdEZ1bmN0aW9uUHJv
bG9ndWUoKTsKKyAgICBqaXQuc3ViUHRyKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIodG90
YWxGcmFtZVNpemUpLCBNYWNyb0Fzc2VtYmxlcjo6c3RhY2tQb2ludGVyUmVnaXN0ZXIpOworICAg
IGppdC5zdG9yZTY0KENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTY0KDApLCBDQ2FsbEhlbHBlcnM6
OmFkZHJlc3NGb3IoQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2NrKSk7CisKKyAgICBmb3IgKGNvbnN0
IFJlZ2lzdGVyQXRPZmZzZXQmIHJlZ0F0T2Zmc2V0IDogcmVnaXN0ZXJzVG9TcGlsbCkgeworICAg
ICAgICBHUFJSZWcgcmVnID0gcmVnQXRPZmZzZXQucmVnKCkuZ3ByKCk7CisgICAgICAgIHB0cmRp
ZmZfdCBvZmZzZXQgPSByZWdBdE9mZnNldC5vZmZzZXQoKTsKKyAgICAgICAgaml0LnN0b3JlUHRy
KHJlZywgQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCBv
ZmZzZXQpKTsKKyAgICB9CisKKyAgICBHUFJSZWcgc2NyYXRjaEdQUiA9IFdhc206Ondhc21DYWxs
aW5nQ29udmVudGlvbkFpcigpLnByb2xvZ3VlU2NyYXRjaCgxKTsKKyAgICBHUFJSZWcgc2NyYXRj
aDJHUFIgPSBXYXNtOjp3YXNtQ2FsbGluZ0NvbnZlbnRpb25BaXIoKS5wcm9sb2d1ZVNjcmF0Y2go
MCk7CisgICAgaml0LmxvYWRQdHIodm0uYWRkcmVzc09mU29mdFN0YWNrTGltaXQoKSwgc2NyYXRj
aDJHUFIpOworCisgICAgQ0NhbGxIZWxwZXJzOjpKdW1wTGlzdCBzbG93UGF0aDsKKyAgICBzbG93
UGF0aC5hcHBlbmQoaml0LmJyYW5jaFB0cihDQ2FsbEhlbHBlcnM6OkFib3ZlLCBNYWNyb0Fzc2Vt
Ymxlcjo6c3RhY2tQb2ludGVyUmVnaXN0ZXIsIEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyKSk7
CisgICAgc2xvd1BhdGguYXBwZW5kKGppdC5icmFuY2hQdHIoQ0NhbGxIZWxwZXJzOjpCZWxvdywg
TWFjcm9Bc3NlbWJsZXI6OnN0YWNrUG9pbnRlclJlZ2lzdGVyLCBzY3JhdGNoMkdQUikpOworCisg
ICAgLy8gRW5zdXJlOgorICAgIC8vIGFyZ0NvdW50UGx1c1RoaXMgLSAxID49IHNpZ25hdHVyZS5h
cmd1bWVudENvdW50KCkKKyAgICAvLyBhcmdDb3VudFBsdXNUaGlzID49IHNpZ25hdHVyZS5hcmd1
bWVudENvdW50KCkgKyAxCisgICAgLy8gRklYTUU6IFdlIHNob3VsZCBoYW5kbGUgYXJpdHkgZml4
dXAuCisgICAgc2xvd1BhdGguYXBwZW5kKGppdC5icmFuY2gzMihDQ2FsbEhlbHBlcnM6OkJlbG93
LAorICAgICAgICBDQ2FsbEhlbHBlcnM6OnBheWxvYWRGb3IoQ2FsbEZyYW1lU2xvdDo6YXJndW1l
bnRDb3VudCksIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKHNpZ25hdHVyZS5hcmd1bWVudENv
dW50KCkgKyAxKSkpOworCisgICAgaml0LmVtaXRNYXRlcmlhbGl6ZVRhZ0NoZWNrUmVnaXN0ZXJz
KCk7CisKKyAgICAvLyBGaXJzdCB3ZSBkbyBzdGFjayBzbG90cyBmb3IgRlBScyBzbyB3ZSBjYW4g
dXNlIEZQUiBhcmd1bWVudCByZWdpc3RlciBhcyBzY3JhdGNoLiBhbmQgYWxsIEdQUnMgYmVjYXVz
ZSB3ZSBoYXZlIHNjcmF0Y2ggcmVnaXN0ZXJzIHRvIGRvIGl0LgorICAgIC8vIEFmdGVyIHRoYXQs
IHdlIGhhbmRsZSBGUFIgYXJndW1lbnQgcmVnaXN0ZXJzLiAKKyAgICB7CisgICAgICAgIENDYWxs
SGVscGVyczo6QWRkcmVzcyBjYWxsZWVGcmFtZSA9IENDYWxsSGVscGVyczo6QWRkcmVzcyhNYWNy
b0Fzc2VtYmxlcjo6c3RhY2tQb2ludGVyUmVnaXN0ZXIsIC1zdGF0aWNfY2FzdDxwdHJkaWZmX3Q+
KHNpemVvZihDYWxsZXJGcmFtZUFuZFBDKSkpOworICAgICAgICBudW1HUFJzID0gMDsKKyAgICAg
ICAgbnVtRlBScyA9IDA7CisgICAgICAgIEZQUlJlZyBzY3JhdGNoRlBSID0gV2FzbTo6d2FzbUNh
bGxpbmdDb252ZW50aW9uKCkubV9mcHJBcmdzWzBdLmZwcigpOworCisgICAgICAgIHB0cmRpZmZf
dCBqc09mZnNldCA9IENhbGxGcmFtZVNsb3Q6OmZpcnN0QXJndW1lbnQgKiBzaXplb2YoRW5jb2Rl
ZEpTVmFsdWUpOworCisgICAgICAgIHB0cmRpZmZfdCB3YXNtT2Zmc2V0ID0gQ2FsbEZyYW1lOjpo
ZWFkZXJTaXplSW5SZWdpc3RlcnMgKiBzaXplb2YoQ1BVUmVnaXN0ZXIpOworICAgICAgICBmb3Ig
KHVuc2lnbmVkIGkgPSAwOyBpIDwgc2lnbmF0dXJlLmFyZ3VtZW50Q291bnQoKTsgaSsrKSB7Cisg
ICAgICAgICAgICBzd2l0Y2ggKHNpZ25hdHVyZS5hcmd1bWVudChpKSkgeworICAgICAgICAgICAg
Y2FzZSBXYXNtOjpJNjQ6CisgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNI
RUQoKTsKKyAgICAgICAgICAgIGNhc2UgV2FzbTo6STMyOgorICAgICAgICAgICAgICAgIGppdC5s
b2FkNjQoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCBq
c09mZnNldCksIHNjcmF0Y2hHUFIpOworICAgICAgICAgICAgICAgIHNsb3dQYXRoLmFwcGVuZChq
aXQuYnJhbmNoSWZOb3RJbnQzMihzY3JhdGNoR1BSKSk7IC8vIE9PUFM6IGhhbmRsZSBmbG9hdD8K
KyAgICAgICAgICAgICAgICBpZiAobnVtR1BScyA+PSBXYXNtOjp3YXNtQ2FsbGluZ0NvbnZlbnRp
b24oKS5tX2dwckFyZ3Muc2l6ZSgpKSB7CisgICAgICAgICAgICAgICAgICAgIGppdC5zdG9yZTMy
KHNjcmF0Y2hHUFIsIGNhbGxlZUZyYW1lLndpdGhPZmZzZXQod2FzbU9mZnNldCkpOworICAgICAg
ICAgICAgICAgICAgICB3YXNtT2Zmc2V0ICs9IHNpemVvZihDUFVSZWdpc3Rlcik7CisgICAgICAg
ICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgaml0Lnplcm9FeHRlbmQzMlRv
UHRyKHNjcmF0Y2hHUFIsIFdhc206Ondhc21DYWxsaW5nQ29udmVudGlvbigpLm1fZ3ByQXJnc1tu
dW1HUFJzXS5ncHIoKSk7CisgICAgICAgICAgICAgICAgICAgICsrbnVtR1BSczsKKyAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIFdhc206
OkYzMjoKKyAgICAgICAgICAgIGNhc2UgV2FzbTo6RjY0OgorICAgICAgICAgICAgICAgIGlmIChu
dW1GUFJzID49IFdhc206Ondhc21DYWxsaW5nQ29udmVudGlvbigpLm1fZnByQXJncy5zaXplKCkp
IHsKKyAgICAgICAgICAgICAgICAgICAgaml0LmxvYWQ2NChDQ2FsbEhlbHBlcnM6OkFkZHJlc3Mo
R1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIGpzT2Zmc2V0KSwgc2NyYXRjaEdQUik7CisgICAg
ICAgICAgICAgICAgICAgIHNsb3dQYXRoLmFwcGVuZChqaXQuYnJhbmNoSWZOb3ROdW1iZXIoc2Ny
YXRjaEdQUikpOworICAgICAgICAgICAgICAgICAgICBzbG93UGF0aC5hcHBlbmQoaml0LmJyYW5j
aElmSW50MzIoc2NyYXRjaEdQUikpOyAvLyBPT1BTOiBIYW5kbGUgaTMyCisKKyAgICAgICAgICAg
ICAgICAgICAgaWYgKHNpZ25hdHVyZS5hcmd1bWVudChpKSA9PSBXYXNtOjpGMzIpIHsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIGppdC51bmJveERvdWJsZShzY3JhdGNoR1BSLCBzY3JhdGNoR1BS
LCBzY3JhdGNoRlBSKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGppdC5jb252ZXJ0RG91Ymxl
VG9GbG9hdChzY3JhdGNoRlBSLCBzY3JhdGNoRlBSKTsKKyAgICAgICAgICAgICAgICAgICAgICAg
IGppdC5zdG9yZUZsb2F0KHNjcmF0Y2hGUFIsIGNhbGxlZUZyYW1lLndpdGhPZmZzZXQod2FzbU9m
ZnNldCkpOworICAgICAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAg
ICAgICAgaml0LmFkZDY0KEdQUkluZm86OnRhZ1R5cGVOdW1iZXJSZWdpc3Rlciwgc2NyYXRjaEdQ
Uiwgc2NyYXRjaEdQUik7CisgICAgICAgICAgICAgICAgICAgICAgICBqaXQuc3RvcmU2NChzY3Jh
dGNoR1BSLCBjYWxsZWVGcmFtZS53aXRoT2Zmc2V0KHdhc21PZmZzZXQpKTsKKyAgICAgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB3YXNtT2Zmc2V0ICs9IHNpemVvZihDUFVS
ZWdpc3Rlcik7CisgICAgICAgICAgICAgICAgfSBlbHNlCisgICAgICAgICAgICAgICAgICAgICsr
bnVtRlBSczsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGRlZmF1bHQ6Cisg
ICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAg
IH0KKworICAgICAgICAgICAganNPZmZzZXQgKz0gc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKTsKKyAg
ICAgICAgfQorICAgIH0KKworICAgIC8vIE5vdyBoYW5kbGUgRlBSIGFyZ3VtZW50cyBpbiByZWdp
c3RlcnMuCisgICAgeworICAgICAgICBudW1HUFJzID0gMDsKKyAgICAgICAgbnVtRlBScyA9IDA7
CisgICAgICAgIHB0cmRpZmZfdCBqc09mZnNldCA9IENhbGxGcmFtZVNsb3Q6OmZpcnN0QXJndW1l
bnQgKiBzaXplb2YoRW5jb2RlZEpTVmFsdWUpOworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAw
OyBpIDwgc2lnbmF0dXJlLmFyZ3VtZW50Q291bnQoKTsgaSsrKSB7CisgICAgICAgICAgICBzd2l0
Y2ggKHNpZ25hdHVyZS5hcmd1bWVudChpKSkgeworICAgICAgICAgICAgY2FzZSBXYXNtOjpGMzI6
CisgICAgICAgICAgICBjYXNlIFdhc206OkY2NDoKKyAgICAgICAgICAgICAgICBpZiAobnVtRlBS
cyA8IFdhc206Ondhc21DYWxsaW5nQ29udmVudGlvbigpLm1fZnByQXJncy5zaXplKCkpIHsKKyAg
ICAgICAgICAgICAgICAgICAgaml0LmxvYWQ2NChDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoR1BSSW5m
bzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIGpzT2Zmc2V0KSwgc2NyYXRjaEdQUik7CisgICAgICAgICAg
ICAgICAgICAgIHNsb3dQYXRoLmFwcGVuZChqaXQuYnJhbmNoSWZOb3ROdW1iZXIoc2NyYXRjaEdQ
UikpOworICAgICAgICAgICAgICAgICAgICBzbG93UGF0aC5hcHBlbmQoaml0LmJyYW5jaElmSW50
MzIoc2NyYXRjaEdQUikpOyAvLyBPT1BTOiBIYW5kbGUgaTMyCisKKyAgICAgICAgICAgICAgICAg
ICAgRlBSUmVnIGFyZ0ZQUiA9IFdhc206Ondhc21DYWxsaW5nQ29udmVudGlvbigpLm1fZnByQXJn
c1tudW1GUFJzXS5mcHIoKTsKKyAgICAgICAgICAgICAgICAgICAgaml0LnVuYm94RG91YmxlKHNj
cmF0Y2hHUFIsIHNjcmF0Y2hHUFIsIGFyZ0ZQUik7CisKKyAgICAgICAgICAgICAgICAgICAgaWYg
KHNpZ25hdHVyZS5hcmd1bWVudChpKSA9PSBXYXNtOjpGMzIpCisgICAgICAgICAgICAgICAgICAg
ICAgICBqaXQuY29udmVydERvdWJsZVRvRmxvYXQoYXJnRlBSLCBhcmdGUFIpOworCisgICAgICAg
ICAgICAgICAgICAgICsrbnVtRlBSczsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICAgICAgfQorCisgICAgICAgICAgICBqc09mZnNldCArPSBzaXplb2YoRW5jb2RlZEpT
VmFsdWUpOworICAgICAgICB9CisgICAgfQorCisgICAgaml0LmxvYWRQdHIoJnZtLndhc21Db250
ZXh0Lmluc3RhbmNlLCBzY3JhdGNoR1BSKTsKKyAgICAvL2ppdC5wcmludCgiU3RvcmluZyBwcmlv
ciB3YXNtIGNvbnRleHQgY2ZyPSIsIHN0YXRpY19jYXN0PE1hY3JvQXNzZW1ibGVyOjpSZWdpc3Rl
cklEPihHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlciksICIgY3R4PSAiLCBzY3JhdGNoR1BSLCAi
XG4iKTsKKyAgICBwdHJkaWZmX3QgcHJldmlvdXNJbnN0YW5jZU9mZnNldCA9IHRoaXMtPnByZXZp
b3VzSW5zdGFuY2VPZmZzZXQoKTsKKyAgICBqaXQuc3RvcmVQdHIoc2NyYXRjaEdQUiwgQ0NhbGxI
ZWxwZXJzOjpBZGRyZXNzKEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCBwcmV2aW91c0luc3Rh
bmNlT2Zmc2V0KSk7CisgICAgLy9qaXQucHJpbnQoInN0b3JpbmcgcHJldmlvdXMgd2FzbSBpbnN0
YW5jZTogIiwgc3RhdGljX2Nhc3Q8TWFjcm9Bc3NlbWJsZXI6OlJlZ2lzdGVySUQ+KHNjcmF0Y2hH
UFIpLCAiIGNmcj0iLCBzdGF0aWNfY2FzdDxNYWNyb0Fzc2VtYmxlcjo6UmVnaXN0ZXJJRD4oR1BS
SW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIpLCAiXG4iKTsKKworICAgIGppdC5tb3ZlKENDYWxsSGVs
cGVyczo6VHJ1c3RlZEltbVB0cigmaW5zdGFuY2UoKS0+aW5zdGFuY2UoKSksIHNjcmF0Y2hHUFIp
OworCisgICAgaWYgKFdhc206OkNvbnRleHQ6OnVzZUZhc3RUTFMoKSkgCisgICAgICAgIGppdC5z
dG9yZVdhc21Db250ZXh0SW5zdGFuY2Uoc2NyYXRjaEdQUik7CisgICAgZWxzZQorICAgICAgICBq
aXQubW92ZShzY3JhdGNoR1BSLCBwaW5uZWRSZWdzLndhc21Db250ZXh0SW5zdGFuY2VQb2ludGVy
KTsKKyAgICBqaXQuc3RvcmVQdHIoc2NyYXRjaEdQUiwgJnZtLndhc21Db250ZXh0Lmluc3RhbmNl
KTsKKyAgICAvLyBUaGlzIGNvbnRhaW5zIHRoZSBjYWNoZWQgc3RhY2sgbGltaXQgc3RpbGwuCisg
ICAgaml0LnN0b3JlUHRyKHNjcmF0Y2gyR1BSLCBDQ2FsbEhlbHBlcnM6OkFkZHJlc3Moc2NyYXRj
aEdQUiwgV2FzbTo6SW5zdGFuY2U6Om9mZnNldE9mQ2FjaGVkU3RhY2tMaW1pdCgpKSk7CisKKyAg
ICBpZiAoISFtb2R1bGVJbmZvcm1hdGlvbi5tZW1vcnkpIHsKKyAgICAgICAgR1BSUmVnIGJhc2VN
ZW1vcnkgPSBwaW5uZWRSZWdzLmJhc2VNZW1vcnlQb2ludGVyOworCisgICAgICAgIGlmIChpbnN0
YW5jZSgpLT5tZW1vcnlNb2RlKCkgIT0gV2FzbTo6TWVtb3J5TW9kZTo6U2lnbmFsaW5nKSB7Cisg
ICAgICAgICAgICBjb25zdCBhdXRvJiBzaXplUmVncyA9IHBpbm5lZFJlZ3Muc2l6ZVJlZ2lzdGVy
czsKKyAgICAgICAgICAgIEFTU0VSVChzaXplUmVncy5zaXplKCkgPj0gMSk7CisgICAgICAgICAg
ICBBU1NFUlQoIXNpemVSZWdzWzBdLnNpemVPZmZzZXQpOyAvLyBUaGUgZm9sbG93aW5nIGNvZGUg
YXNzdW1lcyB3ZSBzdGFydCBhdCAwLCBhbmQgY2FsY3VsYXRlcyBzdWJzZXF1ZW50IHNpemUgcmVn
aXN0ZXJzIHJlbGF0aXZlIHRvIDAuCisgICAgICAgICAgICBBU1NFUlQoc2l6ZVJlZ3NbMF0uc2l6
ZVJlZ2lzdGVyICE9IHNjcmF0Y2hHUFIpOworICAgICAgICAgICAgaml0LmxvYWRQdHIoQ0NhbGxI
ZWxwZXJzOjpBZGRyZXNzKHNjcmF0Y2hHUFIsIFdhc206Okluc3RhbmNlOjpvZmZzZXRPZkNhY2hl
ZE1lbW9yeVNpemUoKSksIHNpemVSZWdzWzBdLnNpemVSZWdpc3Rlcik7CisgICAgICAgICAgICBB
U1NFUlQoc2l6ZVJlZ3Muc2l6ZSgpID09IDEpOworICAgICAgICB9CisKKyAgICAgICAgaml0Lmxv
YWRQdHIoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKHNjcmF0Y2hHUFIsIFdhc206Okluc3RhbmNlOjpv
ZmZzZXRPZkNhY2hlZE1lbW9yeSgpKSwgYmFzZU1lbW9yeSk7CisgICAgfQorCisgICAgaWYgKCFt
X2pzVG9XYXNtSUNDYWxsZWUpCisgICAgICAgIG1fanNUb1dhc21JQ0NhbGxlZS5zZXQodm0sIHRo
aXMsIEpTVG9XYXNtSUNDYWxsZWU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0KCksIHRoaXMpKTsK
KyAgICBqaXQuc3RvcmVQdHIoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKG1fanNUb1dhc21J
Q0NhbGxlZS5nZXQoKSksIENDYWxsSGVscGVyczo6YWRkcmVzc0ZvcihDYWxsRnJhbWVTbG90Ojpj
YWxsZWUpKTsKKworICAgIHsKKyAgICAgICAgaml0LmxvYWRQdHIoZW50cnlwb2ludExvYWRMb2Nh
dGlvbigpLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgaml0LmNhbGwoc2NyYXRjaEdQUiwgV2FzbUVu
dHJ5UHRyVGFnKTsKKyAgICB9CisKKyAgICBqaXQubG9hZFB0cihDQ2FsbEhlbHBlcnM6OkFkZHJl
c3MoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIHByZXZpb3VzSW5zdGFuY2VPZmZzZXQpLCBH
UFJJbmZvOjpub25QcmVzZXJ2ZWROb25SZXR1cm5HUFIpOworICAgIC8vaml0LnByaW50KCJyZXN0
b3Jpbmcgd2FzbSBpbnN0YW5jZTogIiwgc3RhdGljX2Nhc3Q8TWFjcm9Bc3NlbWJsZXI6OlJlZ2lz
dGVySUQ+KEdQUkluZm86Om5vblByZXNlcnZlZE5vblJldHVybkdQUiksICIgY2ZyPSIsIHN0YXRp
Y19jYXN0PE1hY3JvQXNzZW1ibGVyOjpSZWdpc3RlcklEPihHUFJJbmZvOjpjYWxsRnJhbWVSZWdp
c3RlciksICJcbiIpOworICAgIGppdC5zdG9yZVB0cihHUFJJbmZvOjpub25QcmVzZXJ2ZWROb25S
ZXR1cm5HUFIsICZ2bS53YXNtQ29udGV4dC5pbnN0YW5jZSk7CisgICAgaWYgKFdhc206OkNvbnRl
eHQ6OnVzZUZhc3RUTFMoKSkKKyAgICAgICAgaml0LnN0b3JlV2FzbUNvbnRleHRJbnN0YW5jZShH
UFJJbmZvOjpub25QcmVzZXJ2ZWROb25SZXR1cm5HUFIpOworCisgICAgc3dpdGNoIChzaWduYXR1
cmUucmV0dXJuVHlwZSgpKSB7CisgICAgY2FzZSBXYXNtOjpWb2lkOgorICAgICAgICBqaXQubW92
ZVRydXN0ZWRWYWx1ZShqc1VuZGVmaW5lZCgpLCBKU1ZhbHVlUmVncyB7IEdQUkluZm86OnJldHVy
blZhbHVlR1BSIH0pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFdhc206OkkzMjoKKyAgICAg
ICAgaml0Lnplcm9FeHRlbmQzMlRvUHRyKEdQUkluZm86OnJldHVyblZhbHVlR1BSLCBHUFJJbmZv
OjpyZXR1cm5WYWx1ZUdQUik7CisgICAgICAgIGppdC5ib3hJbnQzMihHUFJJbmZvOjpyZXR1cm5W
YWx1ZUdQUiwgSlNWYWx1ZVJlZ3MgeyBHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUiB9KTsKKyAgICAg
ICAgYnJlYWs7CisgICAgY2FzZSBXYXNtOjpGMzI6CisgICAgICAgIGppdC5jb252ZXJ0RmxvYXRU
b0RvdWJsZShGUFJJbmZvOjpyZXR1cm5WYWx1ZUZQUiwgRlBSSW5mbzo6cmV0dXJuVmFsdWVGUFIp
OworICAgICAgICBGQUxMVEhST1VHSDsKKyAgICBjYXNlIFdhc206OkY2NDogeworICAgICAgICBq
aXQubW92ZVRydXN0ZWRWYWx1ZShqc051bWJlcihwdXJlTmFOKCkpLCBKU1ZhbHVlUmVncyB7IEdQ
UkluZm86OnJldHVyblZhbHVlR1BSIH0pOworICAgICAgICBhdXRvIGlzTmFOID0gaml0LmJyYW5j
aElmTmFOKEZQUkluZm86OnJldHVyblZhbHVlRlBSKTsKKyAgICAgICAgaml0LmJveERvdWJsZShG
UFJJbmZvOjpyZXR1cm5WYWx1ZUZQUiwgSlNWYWx1ZVJlZ3MgeyBHUFJJbmZvOjpyZXR1cm5WYWx1
ZUdQUiB9KTsKKyAgICAgICAgaXNOYU4ubGluaygmaml0KTsKKyAgICAgICAgYnJlYWs7CisgICAg
fQorICAgIGNhc2UgV2FzbTo6STY0OgorICAgIGNhc2UgV2FzbTo6RnVuYzoKKyAgICBjYXNlIFdh
c206OkFueWZ1bmM6CisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIGRlZmF1bHQ6CisgICAg
ICAgIGJyZWFrOworICAgIH0KKworICAgIGF1dG8gZW1pdFJlc3RvcmVDYWxsZWVTYXZlcyA9IFsm
XSB7CisgICAgICAgIGZvciAoY29uc3QgUmVnaXN0ZXJBdE9mZnNldCYgcmVnQXRPZmZzZXQgOiBy
ZWdpc3RlcnNUb1NwaWxsKSB7CisgICAgICAgICAgICBHUFJSZWcgcmVnID0gcmVnQXRPZmZzZXQu
cmVnKCkuZ3ByKCk7CisgICAgICAgICAgICBBU1NFUlQocmVnICE9IEdQUkluZm86OnJldHVyblZh
bHVlR1BSKTsKKyAgICAgICAgICAgIHB0cmRpZmZfdCBvZmZzZXQgPSByZWdBdE9mZnNldC5vZmZz
ZXQoKTsKKyAgICAgICAgICAgIGppdC5sb2FkUHRyKENDYWxsSGVscGVyczo6QWRkcmVzcyhHUFJJ
bmZvOjpjYWxsRnJhbWVSZWdpc3Rlciwgb2Zmc2V0KSwgcmVnKTsKKyAgICAgICAgfQorICAgIH07
CisKKyAgICBlbWl0UmVzdG9yZUNhbGxlZVNhdmVzKCk7CisKKyAgICBqaXQuZW1pdEZ1bmN0aW9u
RXBpbG9ndWUoKTsKKyAgICBqaXQucmV0KCk7CisKKyAgICBzbG93UGF0aC5saW5rKCZqaXQpOwor
ICAgIGVtaXRSZXN0b3JlQ2FsbGVlU2F2ZXMoKTsKKyAgICBqaXQubW92ZShDQ2FsbEhlbHBlcnM6
OlRydXN0ZWRJbW1QdHIodGhpcyksIEdQUkluZm86OnJlZ1QwKTsKKyAgICBqaXQuZW1pdEZ1bmN0
aW9uRXBpbG9ndWUoKTsKKyAgICBhdXRvIGp1bXBUb0hvc3RDYWxsID0gaml0Lmp1bXAoKTsKKwor
ICAgIExpbmtCdWZmZXIgbGlua0J1ZmZlcihqaXQsIEdMT0JBTF9USFVOS19JRCwgSklUQ29tcGls
YXRpb25DYW5GYWlsKTsKKyAgICBpZiAoVU5MSUtFTFkobGlua0J1ZmZlci5kaWRGYWlsVG9BbGxv
Y2F0ZSgpKSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICBsaW5rQnVmZmVyLmxpbmso
anVtcFRvSG9zdENhbGwsIENvZGVMb2NhdGlvbkxhYmVsPEpTRW50cnlQdHJUYWc+KGV4ZWN1dGFi
bGUoKS0+ZW50cnlwb2ludEZvcihDb2RlRm9yQ2FsbCwgTXVzdENoZWNrQXJpdHkpLmV4ZWN1dGFi
bGVBZGRyZXNzKCkpKTsKKyAgICBtX2pzQ2FsbEVudHJ5cG9pbnQgPSBGSU5BTElaRV9DT0RFKGxp
bmtCdWZmZXIsIFdhc21FbnRyeVB0clRhZywgIkpTLT5XYXNtIElDIik7CisgICAgcmV0dXJuIG1f
anNDYWxsRW50cnlwb2ludC5jb2RlKCk7Cit9CisKIFdlYkFzc2VtYmx5RnVuY3Rpb24qIFdlYkFz
c2VtYmx5RnVuY3Rpb246OmNyZWF0ZShWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmpl
Y3QsIFN0cnVjdHVyZSogc3RydWN0dXJlLCB1bnNpZ25lZCBsZW5ndGgsIGNvbnN0IFN0cmluZyYg
bmFtZSwgSlNXZWJBc3NlbWJseUluc3RhbmNlKiBpbnN0YW5jZSwgV2FzbTo6Q2FsbGVlJiBqc0Vu
dHJ5cG9pbnQsIFdhc206Oldhc21Ub1dhc21JbXBvcnRhYmxlRnVuY3Rpb246OkxvYWRMb2NhdGlv
biB3YXNtVG9XYXNtRW50cnlwb2ludExvYWRMb2NhdGlvbiwgV2FzbTo6U2lnbmF0dXJlSW5kZXgg
c2lnbmF0dXJlSW5kZXgpCiB7CiAgICAgTmF0aXZlRXhlY3V0YWJsZSogZXhlY3V0YWJsZSA9IHZt
LmdldEhvc3RGdW5jdGlvbihjYWxsV2ViQXNzZW1ibHlGdW5jdGlvbiwgTm9JbnRyaW5zaWMsIGNh
bGxIb3N0RnVuY3Rpb25Bc0NvbnN0cnVjdG9yLCBudWxscHRyLCBuYW1lKTsKICAgICBXZWJBc3Nl
bWJseUZ1bmN0aW9uKiBmdW5jdGlvbiA9IG5ldyAoTm90TnVsbCwgYWxsb2NhdGVDZWxsPFdlYkFz
c2VtYmx5RnVuY3Rpb24+KHZtLmhlYXApKSBXZWJBc3NlbWJseUZ1bmN0aW9uKHZtLCBnbG9iYWxP
YmplY3QsIHN0cnVjdHVyZSwganNFbnRyeXBvaW50LCB3YXNtVG9XYXNtRW50cnlwb2ludExvYWRM
b2NhdGlvbiwgc2lnbmF0dXJlSW5kZXgpOwogICAgIGZ1bmN0aW9uLT5maW5pc2hDcmVhdGlvbih2
bSwgZXhlY3V0YWJsZSwgbGVuZ3RoLCBuYW1lLCBpbnN0YW5jZSk7CisKKyAgICAvLyBPT1BTOiBt
YWtlIHRoaXMgcGFydCBvZiBjcmVhdGUoKS4KKyAgICBleGVjdXRhYmxlLT5zZXRXZWJBc3NlbWJs
eUZ1bmN0aW9uKHZtLCBmdW5jdGlvbik7CisKICAgICBBU1NFUlRfV0lUSF9NRVNTQUdFKCFmdW5j
dGlvbi0+aXNMYXJnZUFsbG9jYXRpb24oKSwgIldlYkFzc2VtYmx5RnVuY3Rpb24gc2hvdWxkIGJl
IGFsbG9jYXRlZCBub3QgaW4gbGFyZ2UgYWxsb2NhdGlvbiBzaW5jZSBpdCBpcyBKU0NhbGxlZS4i
KTsKICAgICByZXR1cm4gZnVuY3Rpb247CiB9CkBAIC0xNjksNiArNTA5LDE1IEBAIFdlYkFzc2Vt
Ymx5RnVuY3Rpb246OldlYkFzc2VtYmx5RnVuY3Rpb24KICAgICAsIG1faW1wb3J0YWJsZUZ1bmN0
aW9uIHsgc2lnbmF0dXJlSW5kZXgsIHdhc21Ub1dhc21FbnRyeXBvaW50TG9hZExvY2F0aW9uIH0K
IHsgfQogCit2b2lkIFdlYkFzc2VtYmx5RnVuY3Rpb246OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBj
ZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3sKKyAgICBXZWJBc3NlbWJseUZ1bmN0aW9uKiB0
aGlzT2JqZWN0ID0ganNDYXN0PFdlYkFzc2VtYmx5RnVuY3Rpb24qPihjZWxsKTsKKyAgICBBU1NF
UlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CisKKyAgICBCYXNlOjp2
aXNpdENoaWxkcmVuKHRoaXNPYmplY3QsIHZpc2l0b3IpOworICAgIHZpc2l0b3IuYXBwZW5kKHRo
aXNPYmplY3QtPm1fanNUb1dhc21JQ0NhbGxlZSk7Cit9CisKIH0gLy8gbmFtZXNwYWNlIEpTQwog
CiAjZW5kaWYgLy8gRU5BQkxFKFdFQkFTU0VNQkxZKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL3dhc20vanMvV2ViQXNzZW1ibHlGdW5jdGlvbi5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5RnVuY3Rpb24uaAkocmV2aXNpb24gMjQz
NzgwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlGdW5jdGlv
bi5oCSh3b3JraW5nIGNvcHkpCkBAIC00MywxMiArNDMsMzQgQEAgbmFtZXNwYWNlIEIzIHsKIGNs
YXNzIENvbXBpbGF0aW9uOwogfQogCitjbGFzcyBXZWJBc3NlbWJseUZ1bmN0aW9uOworCitjbGFz
cyBKU1RvV2FzbUlDQ2FsbGVlIDogcHVibGljIEpTQ2FsbGVlIHsKKyAgICB1c2luZyBCYXNlID0g
SlNDYWxsZWU7CitwdWJsaWM6CisgICAgREVDTEFSRV9JTkZPOworCisgICAgc3RhdGljIEpTVG9X
YXNtSUNDYWxsZWUqIGNyZWF0ZShWTSYsIEpTR2xvYmFsT2JqZWN0KiwgV2ViQXNzZW1ibHlGdW5j
dGlvbiopOworICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShWTSYsIEpTR2xv
YmFsT2JqZWN0KiwgSlNWYWx1ZSk7CisKKyAgICBXZWJBc3NlbWJseUZ1bmN0aW9uKiBmdW5jdGlv
bigpIHsgcmV0dXJuIG1fZnVuY3Rpb24uZ2V0KCk7IH0KKworcHJpdmF0ZToKKyAgICBKU1RvV2Fz
bUlDQ2FsbGVlKFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgU3RydWN0dXJl
KiBzdHJ1Y3R1cmUpCisgICAgICAgIDogQmFzZSh2bSwgZ2xvYmFsT2JqZWN0LCBzdHJ1Y3R1cmUp
CisgICAgeyB9CisgICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90Vmlz
aXRvciYpOworCisgICAgV3JpdGVCYXJyaWVyPFdlYkFzc2VtYmx5RnVuY3Rpb24+IG1fZnVuY3Rp
b247Cit9OworCiBjbGFzcyBXZWJBc3NlbWJseUZ1bmN0aW9uIGZpbmFsIDogcHVibGljIFdlYkFz
c2VtYmx5RnVuY3Rpb25CYXNlIHsKIHB1YmxpYzoKICAgICB1c2luZyBCYXNlID0gV2ViQXNzZW1i
bHlGdW5jdGlvbkJhc2U7CiAKICAgICBjb25zdCBzdGF0aWMgdW5zaWduZWQgU3RydWN0dXJlRmxh
Z3MgPSBCYXNlOjpTdHJ1Y3R1cmVGbGFnczsKIAorICAgIC8vIE9PUFM6IE5lZWRzIGRlc3RydWN0
aW9uIQogICAgIHRlbXBsYXRlPHR5cGVuYW1lIENlbGxUeXBlLCBTdWJzcGFjZUFjY2VzcyBtb2Rl
PgogICAgIHN0YXRpYyBJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoVk0mIHZtKQogICAgIHsKQEAg
LTc0LDE0ICs5NiwzMiBAQCBwdWJsaWM6CiAKICAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9m
RW50cnlwb2ludExvYWRMb2NhdGlvbigpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihXZWJBc3Nl
bWJseUZ1bmN0aW9uLCBtX2ltcG9ydGFibGVGdW5jdGlvbikgKyBXYXNtVG9XYXNtSW1wb3J0YWJs
ZUZ1bmN0aW9uOjpvZmZzZXRPZkVudHJ5cG9pbnRMb2FkTG9jYXRpb24oKTsgfQogCisgICAgTWFj
cm9Bc3NlbWJsZXJDb2RlUHRyPEpTRW50cnlQdHJUYWc+IGpzQ2FsbEVudHJ5cG9pbnQoKQorICAg
IHsKKyAgICAgICAgaWYgKG1fanNDYWxsRW50cnlwb2ludCkKKyAgICAgICAgICAgIHJldHVybiBt
X2pzQ2FsbEVudHJ5cG9pbnQuY29kZSgpOworICAgICAgICByZXR1cm4ganNDYWxsRW50cnlwb2lu
dFNsb3coKTsKKyAgICB9CisKKyAgICBSZWdpc3RlckF0T2Zmc2V0TGlzdCB1c2VkQ2FsbGVlU2F2
ZVJlZ2lzdGVycygpIGNvbnN0OworICAgIFdhc206Okluc3RhbmNlKiBwcmV2aW91c0luc3RhbmNl
KENhbGxGcmFtZSopOworCiBwcml2YXRlOgorICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4o
SlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKICAgICBXZWJBc3NlbWJseUZ1bmN0aW9uKFZNJiwgSlNH
bG9iYWxPYmplY3QqLCBTdHJ1Y3R1cmUqLCBXYXNtOjpDYWxsZWUmIGpzRW50cnlwb2ludCwgV2Fz
bVRvV2FzbUltcG9ydGFibGVGdW5jdGlvbjo6TG9hZExvY2F0aW9uIGVudHJ5cG9pbnRMb2FkTG9j
YXRpb24sIFdhc206OlNpZ25hdHVyZUluZGV4KTsKIAorICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0
cjxKU0VudHJ5UHRyVGFnPiBqc0NhbGxFbnRyeXBvaW50U2xvdygpOworICAgIHB0cmRpZmZfdCBw
cmV2aW91c0luc3RhbmNlT2Zmc2V0KCkgY29uc3Q7CisgICAgYm9vbCB1c2VzVGFnUmVnaXN0ZXJz
KCkgY29uc3Q7CisKICAgICAvLyBJdCdzIHNhZmUgdG8ganVzdCBob2xkIHRoZSByYXcgV2FzbVRv
V2FzbUltcG9ydGFibGVGdW5jdGlvbi9qc0VudHJ5cG9pbnQgYmVjYXVzZSB3ZSBoYXZlIGEgcmVm
ZXJlbmNlCiAgICAgLy8gdG8gb3VyIEluc3RhbmNlLCB3aGljaCBwb2ludHMgdG8gdGhlIE1vZHVs
ZSB0aGF0IGV4cG9ydGVkIHVzLCB3aGljaAogICAgIC8vIGVuc3VyZXMgdGhhdCB0aGUgYWN0dWFs
IFNpZ25hdHVyZS9jb2RlIGRvZXNuJ3QgZ2V0IGRlYWxsb2NhdGVkLgogICAgIE1hY3JvQXNzZW1i
bGVyQ29kZVB0cjxXYXNtRW50cnlQdHJUYWc+IG1fanNFbnRyeXBvaW50OwogICAgIFdhc21Ub1dh
c21JbXBvcnRhYmxlRnVuY3Rpb24gbV9pbXBvcnRhYmxlRnVuY3Rpb247CisgICAgV3JpdGVCYXJy
aWVyPEpTVG9XYXNtSUNDYWxsZWU+IG1fanNUb1dhc21JQ0NhbGxlZTsKKyAgICAvLyBVc2VkIGZv
ciBKUyBjYWxsaW5nIGludG8gV2FzbS4KKyAgICBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SlNFbnRy
eVB0clRhZz4gbV9qc0NhbGxFbnRyeXBvaW50OwogfTsKIAogfSAvLyBuYW1lc3BhY2UgSlNDCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>366667</attachid>
            <date>2019-04-03 16:30:30 -0700</date>
            <delta_ts>2019-04-03 17:07:48 -0700</delta_ts>
            <desc>patch</desc>
            <filename>b-backup.diff</filename>
            <type>text/plain</type>
            <size>81305</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IEpTVGVzdHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEpTVGVzdHMvQ2hhbmdlTG9n
CShyZXZpc2lvbiAyNDM4MzMpCisrKyBKU1Rlc3RzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpA
QCAtMSwzICsxLDEyIEBACisyMDE5LTA0LTAzICBTYWFtIGJhcmF0aSAgPHNiYXJhdGlAYXBwbGUu
Y29tPgorCisgICAgICAgIFRlYWNoIENhbGwgSUNzIGhvdyB0byBjYWxsIFdhc20KKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE5NjM4NworCisgICAgICAg
IFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogd2FzbS9mdW5jdGlvbi10
ZXN0cy9zdGFjay10cmFjZS5qczoKKwogMjAxOS0wMy0yOSAgVGFkZXUgWmFnYWxsbyAgPHR6YWdh
bGxvQGFwcGxlLmNvbT4KIAogICAgICAgICBBc3NlcnRpb24gZmFpbGVkIGluIEpTQzo6Y3JlYXRl
RXJyb3IKSW5kZXg6IEpTVGVzdHMvd2FzbS9mdW5jdGlvbi10ZXN0cy9zdGFjay10cmFjZS5qcwo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBKU1Rlc3RzL3dhc20vZnVuY3Rpb24tdGVzdHMvc3RhY2stdHJhY2UuanMJ
KHJldmlzaW9uIDI0Mzc4MCkKKysrIEpTVGVzdHMvd2FzbS9mdW5jdGlvbi10ZXN0cy9zdGFjay10
cmFjZS5qcwkod29ya2luZyBjb3B5KQpAQCAtNDMsMTEgKzQzLDE2IEBAIGZvciAobGV0IGkgPSAw
OyBpIDwgMTAwMDA7ICsraSkgewogICAgIHN0YWNrdHJhY2UgPSBzdGFja3RyYWNlLnNwbGl0KCJc
biIpOwogICAgIGFzc2VydC50cnV0aHkoc3RhY2t0cmFjZVswXS5pbmRleE9mKCJpbXAiKSAhPT0g
LTEpOyAvLyB0aGUgYXJyb3cgZnVuY3Rpb24gaW1wb3J0IG5hbWVkICJpbXAiLgogICAgIGFzc2Vy
dC5lcShzdGFja3RyYWNlWzFdLCAid2FzbS1zdHViQFt3YXNtIGNvZGVdIik7IC8vIHRoZSB3YXNt
LT5qcyBzdHViCi0gICAgYXNzZXJ0LmVxKHN0YWNrdHJhY2VbMl0sICI8Pz4ud2FzbS1mdW5jdGlv
bls0XUBbd2FzbSBjb2RlXSIpOwotICAgIGFzc2VydC5lcShzdGFja3RyYWNlWzNdLCAiPD8+Lndh
c20tZnVuY3Rpb25bMl1AW3dhc20gY29kZV0iKTsKLSAgICBhc3NlcnQuZXEoc3RhY2t0cmFjZVs0
XSwgIjw/Pi53YXNtLWZ1bmN0aW9uWzNdQFt3YXNtIGNvZGVdIik7Ci0gICAgYXNzZXJ0LmVxKHN0
YWNrdHJhY2VbNV0sICI8Pz4ud2FzbS1mdW5jdGlvblsxXUBbd2FzbSBjb2RlXSIpOwotICAgIGFz
c2VydC5lcShzdGFja3RyYWNlWzZdLCAid2FzbS1zdHViQFt3YXNtIGNvZGVdIik7IC8vIHdhc20g
ZW50cnkKLQorICAgIGxldCBmb3VuZCA9IGZhbHNlOworICAgIGZvciAobGV0IGkgPSAwOyBpIDwg
c3RhY2t0cmFjZS5sZW5ndGg7ICsraSkgeworICAgICAgICBsZXQgc3RyID0gc3RhY2t0cmFjZVtp
XTsKKyAgICAgICAgaWYgKHN0ciAhPT0gIjw/Pi53YXNtLWZ1bmN0aW9uWzRdQFt3YXNtIGNvZGVd
IikKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICBmb3VuZCA9IHRydWU7CisgICAgICAg
IGFzc2VydC5lcShzdGFja3RyYWNlW2kgKyAxXSwgIjw/Pi53YXNtLWZ1bmN0aW9uWzJdQFt3YXNt
IGNvZGVdIik7CisgICAgICAgIGFzc2VydC5lcShzdGFja3RyYWNlW2kgKyAyXSwgIjw/Pi53YXNt
LWZ1bmN0aW9uWzNdQFt3YXNtIGNvZGVdIik7CisgICAgICAgIGFzc2VydC5lcShzdGFja3RyYWNl
W2kgKyAzXSwgIjw/Pi53YXNtLWZ1bmN0aW9uWzFdQFt3YXNtIGNvZGVdIik7CisgICAgfQorICAg
IGFzc2VydC50cnV0aHkoZm91bmQpOwogICAgIHN0YWNrdHJhY2UgPSBudWxsOwogfQpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvQ2hhbmdlTG9nCShyZXZpc2lvbiAyNDM3ODApCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTE0IEBACisyMDE5
LTA0LTAzICBTYWFtIGJhcmF0aSAgPHNiYXJhdGlAYXBwbGUuY29tPgorCisgICAgICAgIFRlYWNo
IENhbGwgSUNzIGhvdyB0byBjYWxsIFdhc20KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTE5NjM4NworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgIFRoaXMgcGF0Y2ggdGVhY2hlcyBKUyB0byBjYWxsIFdhc20gd2l0
aG91dCBnb2luZyB0aHJvdWdoIHRoZSBuYXRpdmUgdGh1bmsuCisgICAgICAgIEN1cnJlbnRseSwg
d2UgZW1pdCBhIEpJVCAiSlMiIGNhbGxlZSBzdHViIHdoaWNoIG1hcnNoYWxzIGFyZ3VtZW50cyBm
cm9tCisgICAgICAgIEpTIHRvIFdhc20uIExpa2UgdGhlIG5hdGl2ZSB2ZXJzaW9uIG9mIHRoaXMs
IHRoaXMgdGh1bmsgaXMgcmVzcG9uc2libGUKKyAgICAgICAgZm9yIHNhdmluZyBhbmQgcmVzdG9y
aW5nIHRoZSBWTSdzIGN1cnJlbnQgV2FzbSBjb250ZXh0LiBJbnN0ZWFkIG9mIGVtaXR0aW5nCisg
ICAgICAgIGFuIGV4Y2VwdGlvbiBoYW5kbGVyLCB3ZSBhbHNvIHRlYWNoIHRoZSB1bndpbmRlciBo
b3cgdG8gcmVhZCB0aGUgcHJldmlvdXMKKyAgICAgICAgd2FzbSBjb250ZXh0IHRvIHJlc3RvcmUg
aXQgYXMgaXQgdW53aW5kd3MgcGFzdCB0aGlzIGZyYW1lLgorICAgICAgICAKKyAgICAgICAgVGhp
cyBwYXRjaCBpcyBzdHJhaWdodCBmb3J3YXJkLCBhbmQgbGVhdmVzIHNvbWUgYXJlYXMgZm9yIHBl
cmYgaW1wcm92ZW1lbnQ6CisgICAgICAgIC0gV2UgY2FuIHRlYWNoIHRoZSBERkcvRlRMIHRvIGRp
cmVjdGx5IHVzZSB0aGUgV2FzbSBjYWxsaW5nIGNvbnZlbnRpb24gd2hlbgorICAgICAgICAgIGl0
IGtub3dzIGl0J3MgY2FsbGluZyBhIHNpbmdsZSBXYXNtIGZ1bmN0aW9uLiBUaGlzIHdheSB3ZSBk
b24ndCBzaHVmZmxlCisgICAgICAgICAgcmVnaXN0ZXJzIHRvIHRoZSBzdGFjayBhbmQgdGhlbiBi
YWNrIGludG8gcmVnaXN0ZXJzLgorICAgICAgICAtIFdlIGJhaWwgb3V0IHRvIHRoZSBzbG93IHBh
dGggZm9yIG1pc21hdGNoZWQgYXJpdHkuIEkgb3BlbmVkIGEgYnVnIHRvIGZpeAorICAgICAgICAg
IG9wdGltaXplIGFyaXR5IGNoZWNrIGZhaWx1cmVzOiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MTk2NTY0CisgICAgICAgIC0gV2UgYmFpbCBvdXQgdG8gdGhlIHNsb3cg
cGF0aCBEb3VibGUgSlNWYWx1ZXMgZmxvd2luZyBpbnRvIGkzMiBhcmd1bWVudHMuCisgICAgICAg
ICAgV2Ugc2hvdWxkIHRlYWNoIHRoaXMgdGh1bmsgaG93IHRvIGRvIHRoYXQgY29udmVyc2lvbiBk
aXJlY3RseS4KKyAgICAgICAgCisgICAgICAgIFRoaXMgcGF0Y2ggYWxzbyByZWZhY3RvcnMgdGhl
IGNvZGUgdG8gZXhwbGljaXRseSBoYXZlIGEgc2luZ2xlIHBpbm5lZCBzaXplIHJlZ2lzdGVyLgor
ICAgICAgICBXZSB1c2VkIHByZXRlbmQgaW4gc29tZSBwbGFjZXMgdGhhdCB3ZSBjb3VsZCBoYXZl
IG1vcmUgdGhhbiBvbmUgcGlubmVkIHNpemUgcmVnaXN0ZXIuCisgICAgICAgIEhvd2V2ZXIsIHRo
ZXJlIHdhcyBvdGhlciBjb2RlIHRoYXQganVzdCBhc3NlcnRlZCB0aGUgc2l6ZSB3YXMgb25lLiBU
aGlzIHBhdGNoIGp1c3QgcmlwcworICAgICAgICBvdXQgdGhpcyBjb2RlIHNpbmNlIHdlIG5ldmVy
IG1vdmVkIHRvIGhhdmluZyBtb3JlIHRoYW4gb25lIHBpbm5lZCBzaXplIHJlZ2lzdGVyLiBEb2lu
ZworICAgICAgICB0aGlzIHJlZmFjdG9yaW5nIGNsZWFucyB1cCB0aGUgdmFyaW91cyBwbGFjZXMg
d2hlcmUgd2Ugc2V0IHVwIHRoZSBzaXplIHJlZ2lzdGVyLgorICAgICAgICAKKyAgICAgICAgVGhp
cyBwYXRjaCBpcyBhIDUwLTYwJSBwcm9ncmVzc2lvbiBvbiBKZXRTdHJlYW0gMidzIHJpY2hhcmRz
LXdhc20uCisKKyAgICAgICAgKiBKYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhw
cm9qOgorICAgICAgICAqIFNvdXJjZXMudHh0OgorICAgICAgICAqIGFzc2VtYmxlci9NYWNyb0Fz
c2VtYmxlckNvZGVSZWYuaDoKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJDb2RlUmVmOjpv
cGVyYXRvcj0pOgorICAgICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxlckNvZGVSZWY6Ok1hY3JvQXNz
ZW1ibGVyQ29kZVJlZik6CisgICAgICAgICogaW50ZXJwcmV0ZXIvSW50ZXJwcmV0ZXIuY3BwOgor
ICAgICAgICAoSlNDOjpVbndpbmRGdW5jdG9yOjpvcGVyYXRvcigpIGNvbnN0KToKKyAgICAgICAg
KEpTQzo6VW53aW5kRnVuY3Rvcjo6Y29weUNhbGxlZVNhdmVzVG9FbnRyeUZyYW1lQ2FsbGVlU2F2
ZXNCdWZmZXIgY29uc3QpOgorICAgICAgICAqIGludGVycHJldGVyL1N0YWNrVmlzaXRvci5jcHA6
CisgICAgICAgIChKU0M6OlN0YWNrVmlzaXRvcjo6RnJhbWU6OmNhbGxlZVNhdmVSZWdpc3RlcnNG
b3JVbndpbmRpbmcpOgorICAgICAgICAoSlNDOjpTdGFja1Zpc2l0b3I6OkZyYW1lOjpjYWxsZWVT
YXZlUmVnaXN0ZXJzKTogRGVsZXRlZC4KKyAgICAgICAgKiBpbnRlcnByZXRlci9TdGFja1Zpc2l0
b3IuaDoKKyAgICAgICAgKiBqaXQvSklUT3BlcmF0aW9ucy5jcHA6CisgICAgICAgICogaml0L1Jl
Z2lzdGVyU2V0LmNwcDoKKyAgICAgICAgKEpTQzo6UmVnaXN0ZXJTZXQ6OnJ1bnRpbWVUYWdSZWdp
c3RlcnMpOgorICAgICAgICAoSlNDOjpSZWdpc3RlclNldDo6c3BlY2lhbFJlZ2lzdGVycyk6Cisg
ICAgICAgIChKU0M6OlJlZ2lzdGVyU2V0OjpydW50aW1lUmVnaXN0ZXJzKTogRGVsZXRlZC4KKyAg
ICAgICAgKiBqaXQvUmVnaXN0ZXJTZXQuaDoKKyAgICAgICAgKiBqaXQvUmVwYXRjaC5jcHA6Cisg
ICAgICAgIChKU0M6OmxpbmtQb2x5bW9ycGhpY0NhbGwpOgorICAgICAgICAqIHJ1bnRpbWUvSlNG
dW5jdGlvbi5jcHA6CisgICAgICAgIChKU0M6OmdldENhbGN1bGF0ZWREaXNwbGF5TmFtZSk6Cisg
ICAgICAgICogcnVudGltZS9KU0dsb2JhbE9iamVjdC5jcHA6CisgICAgICAgIChKU0M6OkpTR2xv
YmFsT2JqZWN0Ojppbml0KToKKyAgICAgICAgKEpTQzo6SlNHbG9iYWxPYmplY3Q6OnZpc2l0Q2hp
bGRyZW4pOgorICAgICAgICAqIHJ1bnRpbWUvSlNHbG9iYWxPYmplY3QuaDoKKyAgICAgICAgKEpT
Qzo6SlNHbG9iYWxPYmplY3Q6OmpzVG9XYXNtSUNDYWxsZWVTdHJ1Y3R1cmUgY29uc3QpOgorICAg
ICAgICAqIHJ1bnRpbWUvVk0uY3BwOgorICAgICAgICAoSlNDOjpWTTo6Vk0pOgorICAgICAgICAq
IHJ1bnRpbWUvVk0uaDoKKyAgICAgICAgKiB3YXNtL1dhc21BaXJJUkdlbmVyYXRvci5jcHA6Cisg
ICAgICAgIChKU0M6Oldhc206OkFpcklSR2VuZXJhdG9yOjpBaXJJUkdlbmVyYXRvcik6CisgICAg
ICAgIChKU0M6Oldhc206OkFpcklSR2VuZXJhdG9yOjpyZXN0b3JlV2ViQXNzZW1ibHlHbG9iYWxT
dGF0ZSk6CisgICAgICAgIChKU0M6Oldhc206OkFpcklSR2VuZXJhdG9yOjphZGRDYWxsSW5kaXJl
Y3QpOgorICAgICAgICAqIHdhc20vV2FzbUIzSVJHZW5lcmF0b3IuY3BwOgorICAgICAgICAoSlND
OjpXYXNtOjpCM0lSR2VuZXJhdG9yOjpCM0lSR2VuZXJhdG9yKToKKyAgICAgICAgKEpTQzo6V2Fz
bTo6QjNJUkdlbmVyYXRvcjo6cmVzdG9yZVdlYkFzc2VtYmx5R2xvYmFsU3RhdGUpOgorICAgICAg
ICAoSlNDOjpXYXNtOjpCM0lSR2VuZXJhdG9yOjphZGRDYWxsSW5kaXJlY3QpOgorICAgICAgICAq
IHdhc20vV2FzbUJpbmRpbmcuY3BwOgorICAgICAgICAoSlNDOjpXYXNtOjp3YXNtVG9XYXNtKToK
KyAgICAgICAgKiB3YXNtL1dhc21Db250ZXh0Lmg6CisgICAgICAgIChKU0M6Oldhc206OkNvbnRl
eHQ6OnBvaW50ZXJUb0luc3RhbmNlKToKKyAgICAgICAgKiB3YXNtL1dhc21Db250ZXh0SW5saW5l
cy5oOgorICAgICAgICAoSlNDOjpXYXNtOjpDb250ZXh0OjpzdG9yZSk6CisgICAgICAgICogd2Fz
bS9XYXNtTWVtb3J5SW5mb3JtYXRpb24uY3BwOgorICAgICAgICAoSlNDOjpXYXNtOjpnZXRQaW5u
ZWRSZWdpc3RlcnMpOgorICAgICAgICAoSlNDOjpXYXNtOjpQaW5uZWRSZWdpc3RlckluZm86Omdl
dCk6CisgICAgICAgIChKU0M6Oldhc206OlBpbm5lZFJlZ2lzdGVySW5mbzo6UGlubmVkUmVnaXN0
ZXJJbmZvKToKKyAgICAgICAgKiB3YXNtL1dhc21NZW1vcnlJbmZvcm1hdGlvbi5oOgorICAgICAg
ICAoSlNDOjpXYXNtOjpQaW5uZWRSZWdpc3RlckluZm86OnRvU2F2ZSBjb25zdCk6CisgICAgICAg
ICogd2FzbS9XYXNtT01HUGxhbi5jcHA6CisgICAgICAgIChKU0M6Oldhc206Ok9NR1BsYW46Ondv
cmspOgorICAgICAgICAqIHdhc20vanMvSlNUb1dhc20uY3BwOgorICAgICAgICAoSlNDOjpXYXNt
OjpjcmVhdGVKU1RvV2FzbVdyYXBwZXIpOgorICAgICAgICAqIHdhc20vanMvSlNUb1dhc21JQ0Nh
bGxlZS5jcHA6IEFkZGVkLgorICAgICAgICAoSlNDOjpKU1RvV2FzbUlDQ2FsbGVlOjpjcmVhdGUp
OgorICAgICAgICAoSlNDOjpKU1RvV2FzbUlDQ2FsbGVlOjpjcmVhdGVTdHJ1Y3R1cmUpOgorICAg
ICAgICAoSlNDOjpKU1RvV2FzbUlDQ2FsbGVlOjp2aXNpdENoaWxkcmVuKToKKyAgICAgICAgKiB3
YXNtL2pzL0pTVG9XYXNtSUNDYWxsZWUuaDogQWRkZWQuCisgICAgICAgIChKU0M6OkpTVG9XYXNt
SUNDYWxsZWU6OmZ1bmN0aW9uKToKKyAgICAgICAgKEpTQzo6SlNUb1dhc21JQ0NhbGxlZTo6SlNU
b1dhc21JQ0NhbGxlZSk6CisgICAgICAgICogd2FzbS9qcy9XZWJBc3NlbWJseUZ1bmN0aW9uLmNw
cDoKKyAgICAgICAgKEpTQzo6V2ViQXNzZW1ibHlGdW5jdGlvbjo6dXNlVGFnUmVnaXN0ZXJzIGNv
bnN0KToKKyAgICAgICAgKEpTQzo6V2ViQXNzZW1ibHlGdW5jdGlvbjo6Y2FsbGVlU2F2ZXMgY29u
c3QpOgorICAgICAgICAoSlNDOjpXZWJBc3NlbWJseUZ1bmN0aW9uOjp1c2VkQ2FsbGVlU2F2ZVJl
Z2lzdGVycyBjb25zdCk6CisgICAgICAgIChKU0M6OldlYkFzc2VtYmx5RnVuY3Rpb246OnByZXZp
b3VzSW5zdGFuY2VPZmZzZXQgY29uc3QpOgorICAgICAgICAoSlNDOjpXZWJBc3NlbWJseUZ1bmN0
aW9uOjpwcmV2aW91c0luc3RhbmNlKToKKyAgICAgICAgKEpTQzo6V2ViQXNzZW1ibHlGdW5jdGlv
bjo6anNDYWxsRW50cnlwb2ludFNsb3cpOgorICAgICAgICAoSlNDOjpXZWJBc3NlbWJseUZ1bmN0
aW9uOjp2aXNpdENoaWxkcmVuKToKKyAgICAgICAgKEpTQzo6V2ViQXNzZW1ibHlGdW5jdGlvbjo6
ZGVzdHJveSk6CisgICAgICAgICogd2FzbS9qcy9XZWJBc3NlbWJseUZ1bmN0aW9uLmg6CisgICAg
ICAgICogd2FzbS9qcy9XZWJBc3NlbWJseUZ1bmN0aW9uSGVhcENlbGxUeXBlLmNwcDogQWRkZWQu
CisgICAgICAgIChKU0M6OldlYkFzc2VtYmx5RnVuY3Rpb25EZXN0cm95RnVuYzo6b3BlcmF0b3Io
KSBjb25zdCk6CisgICAgICAgIChKU0M6OldlYkFzc2VtYmx5RnVuY3Rpb25IZWFwQ2VsbFR5cGU6
OldlYkFzc2VtYmx5RnVuY3Rpb25IZWFwQ2VsbFR5cGUpOgorICAgICAgICAoSlNDOjpXZWJBc3Nl
bWJseUZ1bmN0aW9uSGVhcENlbGxUeXBlOjp+V2ViQXNzZW1ibHlGdW5jdGlvbkhlYXBDZWxsVHlw
ZSk6CisgICAgICAgIChKU0M6OldlYkFzc2VtYmx5RnVuY3Rpb25IZWFwQ2VsbFR5cGU6OmZpbmlz
aFN3ZWVwKToKKyAgICAgICAgKEpTQzo6V2ViQXNzZW1ibHlGdW5jdGlvbkhlYXBDZWxsVHlwZTo6
ZGVzdHJveSk6CisgICAgICAgICogd2FzbS9qcy9XZWJBc3NlbWJseUZ1bmN0aW9uSGVhcENlbGxU
eXBlLmg6IEFkZGVkLgorICAgICAgICAqIHdhc20vanMvV2ViQXNzZW1ibHlQcm90b3R5cGUuaDoK
KwogMjAxOS0wNC0wMiAgTWljaGFlbCBTYWJvZmYgIDxtc2Fib2ZmQGFwcGxlLmNvbT4KIAogICAg
ICAgICBDcmFzaCBpbiBPcHRpb25zOjpzZXRPcHRpb25zKCkgdXNpbmcgLS1jb25maWdGaWxlIG9w
dGlvbiBhbmQgbGliZ21hbGxvYwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL1NvdXJjZXMu
dHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9Tb3VyY2VzLnR4dAkocmV2
aXNpb24gMjQzNzgwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL1NvdXJjZXMudHh0CSh3b3Jr
aW5nIGNvcHkpCkBAIC0xMDEwLDYgKzEwMTAsNyBAQCB3YXNtL1dhc21Xb3JrbGlzdC5jcHAKIAog
d2FzbS9qcy9KU1RvV2FzbS5jcHAKIHdhc20vanMvSlNUb1dhc20uaAord2FzbS9qcy9KU1RvV2Fz
bUlDQ2FsbGVlLmNwcAogd2FzbS9qcy9KU1dlYkFzc2VtYmx5LmNwcAogd2FzbS9qcy9KU1dlYkFz
c2VtYmx5Q29kZUJsb2NrLmNwcAogd2FzbS9qcy9KU1dlYkFzc2VtYmx5Q29kZUJsb2NrSGVhcENl
bGxUeXBlLmNwcApAQCAtMTAyNiw2ICsxMDI3LDcgQEAgd2FzbS9qcy9XZWJBc3NlbWJseUNvbXBp
bGVFcnJvckNvbnN0cnVjdAogd2FzbS9qcy9XZWJBc3NlbWJseUNvbXBpbGVFcnJvclByb3RvdHlw
ZS5jcHAKIHdhc20vanMvV2ViQXNzZW1ibHlGdW5jdGlvbi5jcHAKIHdhc20vanMvV2ViQXNzZW1i
bHlGdW5jdGlvbkJhc2UuY3BwCit3YXNtL2pzL1dlYkFzc2VtYmx5RnVuY3Rpb25IZWFwQ2VsbFR5
cGUuY3BwCiB3YXNtL2pzL1dlYkFzc2VtYmx5SW5zdGFuY2VDb25zdHJ1Y3Rvci5jcHAKIHdhc20v
anMvV2ViQXNzZW1ibHlJbnN0YW5jZVByb3RvdHlwZS5jcHAKIHdhc20vanMvV2ViQXNzZW1ibHlM
aW5rRXJyb3JDb25zdHJ1Y3Rvci5jcHAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZh
U2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9q
CShyZXZpc2lvbiAyNDM3ODApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENv
cmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAtODcyLDYgKzg3
Miw3IEBACiAJCTRCQUEwN0NFQjgxRjQ5QTI5NkUwMjIwMyAvKiBXYXNtU2lnbmF0dXJlSW5saW5l
cy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMzBBNUY0
MDNGMTFDNEY1OTlDRDU5NkQ1IC8qIFdhc21TaWduYXR1cmVJbmxpbmVzLmggKi87IHNldHRpbmdz
ID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNTIxMTMxRjcxRjgyQkYxNDAw
N0NDRUVFIC8qIFBvbHlQcm90b0FjY2Vzc0NoYWluLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MjExMzFGNjFGODJCRjExMDA3Q0NFRUUgLyogUG9seVBy
b3RvQWNjZXNzQ2hhaW4uaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCAp
OyB9OyB9OwogCQk1MjEzMjI0NjFFQ0JDRTgyMDBGNjU2MTUgLyogV2ViQXNzZW1ibHlGdW5jdGlv
bkJhc2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUy
MTMyMjQ0MUVDQkNFODIwMEY2NTYxNSAvKiBXZWJBc3NlbWJseUZ1bmN0aW9uQmFzZS5oICovOyB9
OworCQk1MjNGRDg4RTIyNTU2NkM5MDAzQjNEQ0MgLyogV2ViQXNzZW1ibHlGdW5jdGlvbkhlYXBD
ZWxsVHlwZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
NTIzRkQ4OEMyMjU1NjZDMzAwM0IzRENDIC8qIFdlYkFzc2VtYmx5RnVuY3Rpb25IZWFwQ2VsbFR5
cGUuaCAqLzsgfTsKIAkJNTI0RTlENzMyMjA5MkI1MjAwQTZCRUVFIC8qIEFpckFsbG9jYXRlUmVn
aXN0ZXJzQW5kU3RhY2tBbmRHZW5lcmF0ZUNvZGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUyNEU5RDcyMjIwOTJCNDYwMEE2QkVFRSAvKiBBaXJBbGxv
Y2F0ZVJlZ2lzdGVyc0FuZFN0YWNrQW5kR2VuZXJhdGVDb2RlLmggKi87IH07CiAJCTUyNTBEMkQy
MUU4REEwNUEwMDI5QTkzMiAvKiBXYXNtVGh1bmtzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MjUwRDJEMDFFOERBMDVBMDAyOUE5MzIgLyogV2FzbVRo
dW5rcy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJ
CTUyNUMwRERBMUU5MzU4NDcwMDIxODRDRCAvKiBXYXNtQ2FsbGVlLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MjVDMEREODFFOTM1ODQ3MDAyMTg0Q0Qg
LyogV2FzbUNhbGxlZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7
IH07IH07CkBAIC04NzksNiArODgwLDcgQEAKIAkJNTI2NzhGOEYxQTAzMTAwOTAwNkEzMDZEIC8q
IEJhc2ljQmxvY2tMb2NhdGlvbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gNTI2NzhGOEQxQTAzMTAwOTAwNkEzMDZEIC8qIEJhc2ljQmxvY2tMb2NhdGlv
bi5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTUy
Njc4RjkxMUEwNDE3N0MwMDZBMzA2RCAvKiBDb250cm9sRmxvd1Byb2ZpbGVyLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MjY3OEY5MDFBMDQxNzdDMDA2
QTMwNkQgLyogQ29udHJvbEZsb3dQcm9maWxlci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVT
ID0gKFByaXZhdGUsICk7IH07IH07CiAJCTUyNkFDNEI3MUU5NzdDNUQwMDM1MDBFMSAvKiBXYXNt
Q29kZUJsb2NrLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSA1MjZBQzRCNTFFOTc3QzVEMDAzNTAwRTEgLyogV2FzbUNvZGVCbG9jay5oICovOyBzZXR0aW5n
cyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTUyN0NFMzU0MjI1NTVGRTUw
MEM2RjM4MiAvKiBKU1RvV2FzbUlDQ2FsbGVlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA1MjdDRTM1MzIyNTU1RkREMDBDNkYzODIgLyogSlNUb1dhc21J
Q0NhbGxlZS5oICovOyB9OwogCQk1Mjg0N0FEQzIxRkZCODY5MDA2MUE5REIgLyogV2FzbUFpcklS
R2VuZXJhdG9yLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSA1Mjg0N0FEQTIxRkZCODYzMDA2MUE5REIgLyogV2FzbUFpcklSR2VuZXJhdG9yLmggKi87IH07
CiAJCTUyQjMxMEZCMTk3NEFFNjEwMDgwODU3QyAvKiBGdW5jdGlvbkhhc0V4ZWN1dGVkQ2FjaGUu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUyQjMxMEZB
MTk3NEFFNjEwMDgwODU3QyAvKiBGdW5jdGlvbkhhc0V4ZWN1dGVkQ2FjaGUuaCAqLzsgc2V0dGlu
Z3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk1MkIzMTEwMTE5NzVCNDY3
MDA4MDg1N0MgLyogVHlwZUxvY2F0aW9uQ2FjaGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUyQjMxMTAwMTk3NUI0NjcwMDgwODU3QyAvKiBUeXBlTG9j
YXRpb25DYWNoZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07
IH07CkBAIC0zMzcwLDYgKzMzNzIsOCBAQAogCQk1MjExMzFGNjFGODJCRjExMDA3Q0NFRUUgLyog
UG9seVByb3RvQWNjZXNzQ2hhaW4uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUG9seVByb3RvQWNjZXNzQ2hh
aW4uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTIxMzIyNDMxRUNCQ0U4MjAwRjY1
NjE1IC8qIFdlYkFzc2VtYmx5RnVuY3Rpb25CYXNlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgbmFtZSA9IFdlYkFzc2VtYmx5RnVuY3Rpb25CYXNlLmNwcDsgcGF0aCA9IGpzL1dl
YkFzc2VtYmx5RnVuY3Rpb25CYXNlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
NTIxMzIyNDQxRUNCQ0U4MjAwRjY1NjE1IC8qIFdlYkFzc2VtYmx5RnVuY3Rpb25CYXNlLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IFdlYkFzc2VtYmx5RnVuY3Rpb25CYXNlLmg7
IHBhdGggPSBqcy9XZWJBc3NlbWJseUZ1bmN0aW9uQmFzZS5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQk1MjNGRDg4QzIyNTU2NkMzMDAzQjNEQ0MgLyogV2ViQXNzZW1ibHlGdW5jdGlv
bkhlYXBDZWxsVHlwZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBXZWJBc3NlbWJseUZ1bmN0aW9uSGVhcENl
bGxUeXBlLmg7IHBhdGggPSBqcy9XZWJBc3NlbWJseUZ1bmN0aW9uSGVhcENlbGxUeXBlLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTUyM0ZEODhEMjI1NTY2QzQwMDNCM0RDQyAvKiBX
ZWJBc3NlbWJseUZ1bmN0aW9uSGVhcENlbGxUeXBlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IFdl
YkFzc2VtYmx5RnVuY3Rpb25IZWFwQ2VsbFR5cGUuY3BwOyBwYXRoID0ganMvV2ViQXNzZW1ibHlG
dW5jdGlvbkhlYXBDZWxsVHlwZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUy
NEU5RDcxMjIwOTJCNDUwMEE2QkVFRSAvKiBBaXJBbGxvY2F0ZVJlZ2lzdGVyc0FuZFN0YWNrQW5k
R2VuZXJhdGVDb2RlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEFpckFsbG9jYXRlUmVnaXN0ZXJz
QW5kU3RhY2tBbmRHZW5lcmF0ZUNvZGUuY3BwOyBwYXRoID0gYjMvYWlyL0FpckFsbG9jYXRlUmVn
aXN0ZXJzQW5kU3RhY2tBbmRHZW5lcmF0ZUNvZGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQk1MjRFOUQ3MjIyMDkyQjQ2MDBBNkJFRUUgLyogQWlyQWxsb2NhdGVSZWdpc3RlcnNB
bmRTdGFja0FuZEdlbmVyYXRlQ29kZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBBaXJBbGxvY2F0ZVJlZ2lz
dGVyc0FuZFN0YWNrQW5kR2VuZXJhdGVDb2RlLmg7IHBhdGggPSBiMy9haXIvQWlyQWxsb2NhdGVS
ZWdpc3RlcnNBbmRTdGFja0FuZEdlbmVyYXRlQ29kZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQk1MjUwRDJDRjFFOERBMDVBMDAyOUE5MzIgLyogV2FzbVRodW5rcy5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXYXNtVGh1bmtzLmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTMzODIsNiArMzM4Niw4IEBACiAJCTUyNkFDNEI0MUU5NzdD
NUQwMDM1MDBFMSAvKiBXYXNtQ29kZUJsb2NrLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgcGF0aCA9IFdhc21Db2RlQmxvY2suY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQk1MjZBQzRCNTFFOTc3QzVEMDAzNTAwRTEgLyogV2FzbUNvZGVCbG9jay5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXYXNtQ29kZUJsb2NrLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTUyNzc3M0REMUFBRjgzQUMwMEJERTdFOCAvKiBSdW50aW1lVHlwZS5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBSdW50aW1lVHlwZS5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTUyN0NFMzUyMjI1NTVGREQwMEM2RjM4MiAv
KiBKU1RvV2FzbUlDQ2FsbGVlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEpTVG9XYXNtSUNDYWxs
ZWUuY3BwOyBwYXRoID0ganMvSlNUb1dhc21JQ0NhbGxlZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCTUyN0NFMzUzMjI1NTVGREQwMEM2RjM4MiAvKiBKU1RvV2FzbUlDQ2FsbGVl
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgbmFtZSA9IEpTVG9XYXNtSUNDYWxsZWUuaDsgcGF0aCA9IGpzL0pTVG9XYXNt
SUNDYWxsZWUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTI4NDdBRDkyMUZGQjg2
MzAwNjFBOURCIC8qIFdhc21BaXJJUkdlbmVyYXRvci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBX
YXNtQWlySVJHZW5lcmF0b3IuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1Mjg0
N0FEQTIxRkZCODYzMDA2MUE5REIgLyogV2FzbUFpcklSR2VuZXJhdG9yLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IFdhc21BaXJJUkdlbmVyYXRvci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1
MkIzMTBGQTE5NzRBRTYxMDA4MDg1N0MgLyogRnVuY3Rpb25IYXNFeGVjdXRlZENhY2hlLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IEZ1bmN0aW9uSGFzRXhlY3V0ZWRDYWNoZS5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwpAQCAtODI0OSw2ICs4MjU1LDggQEAKIAkJCWNoaWxkcmVuID0gKAogCQkJCUFE
OERENkQwMUY2NzA4QTMwMDA0RUI1MiAvKiBKU1RvV2FzbS5jcHAgKi8sCiAJCQkJQUQ4REQ2Q0Yx
RjY3MDg5RjAwMDRFQjUyIC8qIEpTVG9XYXNtLmggKi8sCisJCQkJNTI3Q0UzNTIyMjU1NUZERDAw
QzZGMzgyIC8qIEpTVG9XYXNtSUNDYWxsZWUuY3BwICovLAorCQkJCTUyN0NFMzUzMjI1NTVGREQw
MEM2RjM4MiAvKiBKU1RvV2FzbUlDQ2FsbGVlLmggKi8sCiAJCQkJQUREMDlBRjIxRjYyNDgyOTAw
MTMxM0MyIC8qIEpTV2ViQXNzZW1ibHkuY3BwICovLAogCQkJCUFERDA5QUYzMUY2MjQ4MkUwMDEz
MTNDMiAvKiBKU1dlYkFzc2VtYmx5LmggKi8sCiAJCQkJNTM4M0FBMkYxRTY1RThBMTAwQTUzMkZD
IC8qIEpTV2ViQXNzZW1ibHlDb2RlQmxvY2suY3BwICovLApAQCAtODI3OCw2ICs4Mjg2LDggQEAK
IAkJCQlBRDJGQ0JCMzFEQjU4REE0MDBCM0U3MzYgLyogV2ViQXNzZW1ibHlDb21waWxlRXJyb3JQ
cm90b3R5cGUuaCAqLywKIAkJCQlBRDQ5MzdDOTFEREQyNzM0MDA3N0M4MDcgLyogV2ViQXNzZW1i
bHlGdW5jdGlvbi5jcHAgKi8sCiAJCQkJQUQ0OTM3Q0ExREREMjczNDAwNzdDODA3IC8qIFdlYkFz
c2VtYmx5RnVuY3Rpb24uaCAqLywKKwkJCQk1MjNGRDg4RDIyNTU2NkM0MDAzQjNEQ0MgLyogV2Vi
QXNzZW1ibHlGdW5jdGlvbkhlYXBDZWxsVHlwZS5jcHAgKi8sCisJCQkJNTIzRkQ4OEMyMjU1NjZD
MzAwM0IzRENDIC8qIFdlYkFzc2VtYmx5RnVuY3Rpb25IZWFwQ2VsbFR5cGUuaCAqLywKIAkJCQk1
MjEzMjI0MzFFQ0JDRTgyMDBGNjU2MTUgLyogV2ViQXNzZW1ibHlGdW5jdGlvbkJhc2UuY3BwICov
LAogCQkJCTUyMTMyMjQ0MUVDQkNFODIwMEY2NTYxNSAvKiBXZWJBc3NlbWJseUZ1bmN0aW9uQmFz
ZS5oICovLAogCQkJCUFEMkZDQkI0MURCNThEQTQwMEIzRTczNiAvKiBXZWJBc3NlbWJseUluc3Rh
bmNlQ29uc3RydWN0b3IuY3BwICovLApAQCAtODU5NSw2ICs4NjA1LDcgQEAKIAkJCQkwRjVCRjE2
NDFGMjMxNzEyMDAyOUQ5MUQgLyogQjNIb2lzdExvb3BJbnZhcmlhbnRWYWx1ZXMuaCBpbiBIZWFk
ZXJzICovLAogCQkJCURDNjlCOTlEMUQxNUY5MTQwMDJFM0MwMCAvKiBCM0luZmVyU3dpdGNoZXMu
aCBpbiBIZWFkZXJzICovLAogCQkJCTBGRUM4NUJBMUJFMTQ2MkYwMDgwRkY3NCAvKiBCM0luc2Vy
dGlvblNldC5oIGluIEhlYWRlcnMgKi8sCisJCQkJNTIzRkQ4OEUyMjU1NjZDOTAwM0IzRENDIC8q
IFdlYkFzc2VtYmx5RnVuY3Rpb25IZWFwQ2VsbFR5cGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTBG
RUM4NUJCMUJFMTQ2MkYwMDgwRkY3NCAvKiBCM0luc2VydGlvblNldElubGluZXMuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTBGREY2N0QyMUQ5QzZEMjcwMDFCOTgyNSAvKiBCM0tpbmQuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTQzNkU1NDUzMUM0NjhFNzQwMEI1QUY3MyAvKiBCM0xlZ2FsaXplTWVtb3J5
T2Zmc2V0cy5oIGluIEhlYWRlcnMgKi8sCkBAIC04Nzg3LDYgKzg3OTgsNyBAQAogCQkJCTQ3M0RB
NEE0NzY0QzQ1RkU4NzFCMDQ4NSAvKiBEZWZpbmVQcm9wZXJ0eUF0dHJpYnV0ZXMuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTBGQkI3M0JCMURFRjg2NDUwMDJDMDA5RSAvKiBEZWxldGVBbGxDb2RlRWZm
b3J0LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjk2MzAzQzFENDE5MkNEMDA1NjA5RDkgLyogRGVz
dHJ1Y3Rpb25Nb2RlLmggaW4gSGVhZGVycyAqLywKKwkJCQk1MjdDRTM1NDIyNTU1RkU1MDBDNkYz
ODIgLyogSlNUb1dhc21JQ0NhbGxlZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTc3QTQyM0UxN0Ew
QkJGRDAwQThEQjgxIC8qIERGR0Fic3RyYWN0SGVhcC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTcw
NEQ5MDMxN0EwQkFBODAwNkJBNTU0IC8qIERGR0Fic3RyYWN0SW50ZXJwcmV0ZXIuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTBGNUUwRkQ4MjA3QzcyNzMwMDk3RjBERSAvKiBERkdBYnN0cmFjdEludGVy
cHJldGVyQ2xvYmJlclN0YXRlLmggaW4gSGVhZGVycyAqLywKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJDb2RlUmVmLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlckNvZGVSZWYuaAko
cmV2aXNpb24gMjQzNzgwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNy
b0Fzc2VtYmxlckNvZGVSZWYuaAkod29ya2luZyBjb3B5KQpAQCAtMzgwLDYgKzM4MCwxNCBAQCBw
dWJsaWM6CiAgICAgICAgIEFTU0VSVChtX2V4ZWN1dGFibGVNZW1vcnktPnN0YXJ0KCkpOwogICAg
ICAgICBBU1NFUlQobV9jb2RlUHRyKTsKICAgICB9CisKKyAgICB0ZW1wbGF0ZTxQdHJUYWcgb3Ro
ZXJUYWc+CisgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmJiBvcGVyYXRvcj0oY29uc3QgTWFjcm9B
c3NlbWJsZXJDb2RlUmVmPG90aGVyVGFnPiYgb3RoZXJDb2RlUmVmKQorICAgIHsKKyAgICAgICAg
bV9jb2RlUHRyID0gTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPHRhZz46OmNyZWF0ZUZyb21FeGVjdXRh
YmxlQWRkcmVzcyhvdGhlckNvZGVSZWYuY29kZSgpLnRlbXBsYXRlIHJldGFnZ2VkRXhlY3V0YWJs
ZUFkZHJlc3M8dGFnPigpKTsKKyAgICAgICAgbV9leGVjdXRhYmxlTWVtb3J5ID0gb3RoZXJDb2Rl
UmVmLm1fZXhlY3V0YWJsZU1lbW9yeTsKKyAgICAgICAgcmV0dXJuICp0aGlzOworICAgIH0KICAg
ICAKICAgICAvLyBVc2UgdGhpcyBvbmx5IHdoZW4geW91IGtub3cgdGhhdCB0aGUgY29kZVB0ciBy
ZWZlcnMgdG8gY29kZSB0aGF0IGlzCiAgICAgLy8gYWxyZWFkeSBiZWluZyBrZXB0IGFsaXZlIHRo
cm91Z2ggc29tZSBvdGhlciBtZWFucy4gVHlwaWNhbGx5IHRoaXMgbWVhbnMKQEAgLTQ0Myw5ICs0
NTEsOSBAQCBwdWJsaWM6CiBwcml2YXRlOgogICAgIHRlbXBsYXRlPFB0clRhZyBvdGhlclRhZz4K
ICAgICBNYWNyb0Fzc2VtYmxlckNvZGVSZWYoY29uc3QgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPG90
aGVyVGFnPiYgb3RoZXJDb2RlUmVmKQotICAgICAgICA6IG1fY29kZVB0cihNYWNyb0Fzc2VtYmxl
ckNvZGVQdHI8dGFnPjo6Y3JlYXRlRnJvbUV4ZWN1dGFibGVBZGRyZXNzKG90aGVyQ29kZVJlZi5j
b2RlKCkudGVtcGxhdGUgcmV0YWdnZWRFeGVjdXRhYmxlQWRkcmVzczx0YWc+KCkpKQotICAgICAg
ICAsIG1fZXhlY3V0YWJsZU1lbW9yeShvdGhlckNvZGVSZWYubV9leGVjdXRhYmxlTWVtb3J5KQot
ICAgIHsgfQorICAgIHsKKyAgICAgICAgKnRoaXMgPSBvdGhlckNvZGVSZWY7CisgICAgfQogCiAg
ICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPHRhZz4gbV9jb2RlUHRyOwogICAgIFJlZlB0cjxFeGVj
dXRhYmxlTWVtb3J5SGFuZGxlPiBtX2V4ZWN1dGFibGVNZW1vcnk7CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvSW50ZXJwcmV0ZXIuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9JbnRlcnByZXRlci5jcHAJKHJldmlzaW9u
IDI0Mzc4MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9JbnRlcnByZXRl
ci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU0OSw2ICs1NDksMTEgQEAgcHVibGljOgogICAgICAg
ICAgICAgfQogICAgICAgICB9CiAKKyAgICAgICAgaWYgKHZpc2l0b3ItPmNhbGxlZSgpLmlzQ2Vs
bCgpKSB7CisgICAgICAgICAgICBpZiAoYXV0byoganNUb1dhc21JQ0NhbGxlZSA9IGpzRHluYW1p
Y0Nhc3Q8SlNUb1dhc21JQ0NhbGxlZSo+KG1fdm0sIHZpc2l0b3ItPmNhbGxlZSgpLmFzQ2VsbCgp
KSkKKyAgICAgICAgICAgICAgICBtX3ZtLndhc21Db250ZXh0LnN0b3JlKGpzVG9XYXNtSUNDYWxs
ZWUtPmZ1bmN0aW9uKCktPnByZXZpb3VzSW5zdGFuY2UobV9jYWxsRnJhbWUpLCBtX3ZtLnNvZnRT
dGFja0xpbWl0KCkpOworICAgICAgICB9CisKICAgICAgICAgbm90aWZ5RGVidWdnZXJPZlVud2lu
ZGluZyhtX3ZtLCBtX2NhbGxGcmFtZSk7CiAKICAgICAgICAgY29weUNhbGxlZVNhdmVzVG9FbnRy
eUZyYW1lQ2FsbGVlU2F2ZXNCdWZmZXIodmlzaXRvcik7CkBAIC01NjQsNyArNTY5LDcgQEAgcHJp
dmF0ZToKICAgICB2b2lkIGNvcHlDYWxsZWVTYXZlc1RvRW50cnlGcmFtZUNhbGxlZVNhdmVzQnVm
ZmVyKFN0YWNrVmlzaXRvciYgdmlzaXRvcikgY29uc3QKICAgICB7CiAjaWYgIUVOQUJMRShDX0xP
T1ApICYmIE5VTUJFUl9PRl9DQUxMRUVfU0FWRVNfUkVHSVNURVJTID4gMAotICAgICAgICBjb25z
dCBSZWdpc3RlckF0T2Zmc2V0TGlzdCogY3VycmVudENhbGxlZVNhdmVzID0gdmlzaXRvci0+Y2Fs
bGVlU2F2ZVJlZ2lzdGVycygpOworICAgICAgICBPcHRpb25hbDxSZWdpc3RlckF0T2Zmc2V0TGlz
dD4gY3VycmVudENhbGxlZVNhdmVzID0gdmlzaXRvci0+Y2FsbGVlU2F2ZVJlZ2lzdGVyc0ZvclVu
d2luZGluZygpOwogCiAgICAgICAgIGlmICghY3VycmVudENhbGxlZVNhdmVzKQogICAgICAgICAg
ICAgcmV0dXJuOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL1N0YWNr
VmlzaXRvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJl
dGVyL1N0YWNrVmlzaXRvci5jcHAJKHJldmlzaW9uIDI0Mzc4MCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9pbnRlcnByZXRlci9TdGFja1Zpc2l0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0z
Myw2ICszMyw3IEBACiAjaW5jbHVkZSAiSlNDSW5saW5lcy5oIgogI2luY2x1ZGUgIldhc21DYWxs
ZWUuaCIKICNpbmNsdWRlICJXYXNtSW5kZXhPck5hbWUuaCIKKyNpbmNsdWRlICJXZWJBc3NlbWJs
eUZ1bmN0aW9uLmgiCiAjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nQnVpbGRlci5oPgogCiBuYW1l
c3BhY2UgSlNDIHsKQEAgLTI1MiwxMCArMjUzLDEwIEBAIFN0YWNrVmlzaXRvcjo6RnJhbWU6OkNv
ZGVUeXBlIFN0YWNrVmlzaXQKICAgICByZXR1cm4gQ29kZVR5cGU6Okdsb2JhbDsKIH0KIAotY29u
c3QgUmVnaXN0ZXJBdE9mZnNldExpc3QqIFN0YWNrVmlzaXRvcjo6RnJhbWU6OmNhbGxlZVNhdmVS
ZWdpc3RlcnMoKQorT3B0aW9uYWw8UmVnaXN0ZXJBdE9mZnNldExpc3Q+IFN0YWNrVmlzaXRvcjo6
RnJhbWU6OmNhbGxlZVNhdmVSZWdpc3RlcnNGb3JVbndpbmRpbmcoKQogewogICAgIGlmIChpc0lu
bGluZWRGcmFtZSgpKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgcmV0dXJuIFdU
Rjo6bnVsbG9wdDsKIAogI2lmICFFTkFCTEUoQ19MT09QKSAmJiBOVU1CRVJfT0ZfQ0FMTEVFX1NB
VkVTX1JFR0lTVEVSUyA+IDAKIApAQCAtMjYzLDE5ICsyNjQsMjQgQEAgY29uc3QgUmVnaXN0ZXJB
dE9mZnNldExpc3QqIFN0YWNrVmlzaXRvcgogICAgIGlmIChpc1dhc21GcmFtZSgpKSB7CiAgICAg
ICAgIGlmIChjYWxsZWUoKS5pc0NlbGwoKSkgewogICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQo
aXNXZWJBc3NlbWJseVRvSlNDYWxsZWUoY2FsbGVlKCkuYXNDZWxsKCkpKTsKLSAgICAgICAgICAg
IHJldHVybiBudWxscHRyOworICAgICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKICAgICAg
ICAgfQogICAgICAgICBXYXNtOjpDYWxsZWUqIHdhc21DYWxsZWUgPSBjYWxsZWUoKS5hc1dhc21D
YWxsZWUoKTsKLSAgICAgICAgcmV0dXJuIHdhc21DYWxsZWUtPmNhbGxlZVNhdmVSZWdpc3RlcnMo
KTsKKyAgICAgICAgcmV0dXJuICp3YXNtQ2FsbGVlLT5jYWxsZWVTYXZlUmVnaXN0ZXJzKCk7Cisg
ICAgfQorCisgICAgaWYgKGNhbGxlZSgpLmlzQ2VsbCgpKSB7CisgICAgICAgIGlmIChhdXRvKiBq
c1RvV2FzbUlDQ2FsbGVlID0ganNEeW5hbWljQ2FzdDxKU1RvV2FzbUlDQ2FsbGVlKj4oKmNhbGxl
ZSgpLmFzQ2VsbCgpLT52bSgpLCBjYWxsZWUoKS5hc0NlbGwoKSkpCisgICAgICAgICAgICByZXR1
cm4ganNUb1dhc21JQ0NhbGxlZS0+ZnVuY3Rpb24oKS0+dXNlZENhbGxlZVNhdmVSZWdpc3RlcnMo
KTsKICAgICB9CiAjZW5kaWYgLy8gRU5BQkxFKFdFQkFTU0VNQkxZKQogCiAgICAgaWYgKENvZGVC
bG9jayogY29kZUJsb2NrID0gdGhpcy0+Y29kZUJsb2NrKCkpCi0gICAgICAgIHJldHVybiBjb2Rl
QmxvY2stPmNhbGxlZVNhdmVSZWdpc3RlcnMoKTsKKyAgICAgICAgcmV0dXJuICpjb2RlQmxvY2st
PmNhbGxlZVNhdmVSZWdpc3RlcnMoKTsKIAogI2VuZGlmIC8vICFFTkFCTEUoQ19MT09QKSAmJiBO
VU1CRVJfT0ZfQ0FMTEVFX1NBVkVTX1JFR0lTVEVSUyA+IDAKIAotICAgIHJldHVybiBudWxscHRy
OworICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiB9CiAKIFN0cmluZyBTdGFja1Zpc2l0b3I6OkZy
YW1lOjpmdW5jdGlvbk5hbWUoKSBjb25zdApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
dGVycHJldGVyL1N0YWNrVmlzaXRvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9pbnRlcnByZXRlci9TdGFja1Zpc2l0b3IuaAkocmV2aXNpb24gMjQzNzgwKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL1N0YWNrVmlzaXRvci5oCSh3b3JraW5nIGNv
cHkpCkBAIC05NCw3ICs5NCw3IEBAIHB1YmxpYzoKICAgICAgICAgYm9vbCBoYXNMaW5lQW5kQ29s
dW1uSW5mbygpIGNvbnN0OwogICAgICAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lkIGNvbXB1dGVM
aW5lQW5kQ29sdW1uKHVuc2lnbmVkJiBsaW5lLCB1bnNpZ25lZCYgY29sdW1uKSBjb25zdDsKIAot
ICAgICAgICBjb25zdCBSZWdpc3RlckF0T2Zmc2V0TGlzdCogY2FsbGVlU2F2ZVJlZ2lzdGVycygp
OworICAgICAgICBPcHRpb25hbDxSZWdpc3RlckF0T2Zmc2V0TGlzdD4gY2FsbGVlU2F2ZVJlZ2lz
dGVyc0ZvclVud2luZGluZygpOwogCiAgICAgICAgIENsb25lZEFyZ3VtZW50cyogY3JlYXRlQXJn
dW1lbnRzKCk7CiAgICAgICAgIENhbGxGcmFtZSogY2FsbEZyYW1lKCkgY29uc3QgeyByZXR1cm4g
bV9jYWxsRnJhbWU7IH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0
aW9ucy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVy
YXRpb25zLmNwcAkocmV2aXNpb24gMjQzNzgwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9KSVRPcGVyYXRpb25zLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzYsNiArNzYsNyBAQAogI2lu
Y2x1ZGUgIlRodW5rR2VuZXJhdG9ycy5oIgogI2luY2x1ZGUgIlR5cGVQcm9maWxlckxvZy5oIgog
I2luY2x1ZGUgIlZNSW5saW5lcy5oIgorI2luY2x1ZGUgIldlYkFzc2VtYmx5RnVuY3Rpb24uaCIK
ICNpbmNsdWRlIDx3dGYvSW5saW5lQVNNLmg+CiAKIG5hbWVzcGFjZSBKU0MgewpAQCAtMTAzNiw5
ICsxMDM3LDE3IEBAIFNsb3dQYXRoUmV0dXJuVHlwZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGkKIAog
ICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxKU0VudHJ5UHRyVGFnPiBjb2RlUHRyOwogICAgIENv
ZGVCbG9jayogY29kZUJsb2NrID0gbnVsbHB0cjsKLSAgICBpZiAoZXhlY3V0YWJsZS0+aXNIb3N0
RnVuY3Rpb24oKSkKLSAgICAgICAgY29kZVB0ciA9IGV4ZWN1dGFibGUtPmVudHJ5cG9pbnRGb3Io
a2luZCwgTXVzdENoZWNrQXJpdHkpOwotICAgIGVsc2UgeworICAgIGlmIChleGVjdXRhYmxlLT5p
c0hvc3RGdW5jdGlvbigpKSB7CisjaWYgRU5BQkxFKFdFQkFTU0VNQkxZKQorICAgICAgICBpZiAo
a2luZCA9PSBDb2RlRm9yQ2FsbCkgeworICAgICAgICAgICAgaWYgKGF1dG8qIHdhc21GdW5jdGlv
biA9IGpzRHluYW1pY0Nhc3Q8V2ViQXNzZW1ibHlGdW5jdGlvbio+KCp2bSwgY2FsbGVlKSkKKyAg
ICAgICAgICAgICAgICBjb2RlUHRyID0gd2FzbUZ1bmN0aW9uLT5qc0NhbGxFbnRyeXBvaW50KCk7
CisgICAgICAgIH0KKyNlbmRpZgorCisgICAgICAgIGlmICghY29kZVB0cikKKyAgICAgICAgICAg
IGNvZGVQdHIgPSBleGVjdXRhYmxlLT5lbnRyeXBvaW50Rm9yKGtpbmQsIE11c3RDaGVja0FyaXR5
KTsKKyAgICB9IGVsc2UgewogICAgICAgICBGdW5jdGlvbkV4ZWN1dGFibGUqIGZ1bmN0aW9uRXhl
Y3V0YWJsZSA9IHN0YXRpY19jYXN0PEZ1bmN0aW9uRXhlY3V0YWJsZSo+KGV4ZWN1dGFibGUpOwog
CiAgICAgICAgIGF1dG8gaGFuZGxlVGhyb3dFeGNlcHRpb24gPSBbJl0gKCkgewpAQCAtMTA2NCw2
ICsxMDczLDcgQEAgU2xvd1BhdGhSZXR1cm5UeXBlIEpJVF9PUEVSQVRJT04gb3BlcmF0aQogICAg
ICAgICAgICAgYXJpdHkgPSBBcml0eUNoZWNrTm90UmVxdWlyZWQ7CiAgICAgICAgIGNvZGVQdHIg
PSBmdW5jdGlvbkV4ZWN1dGFibGUtPmVudHJ5cG9pbnRGb3Ioa2luZCwgYXJpdHkpOwogICAgIH0K
KwogICAgIGlmICghY2FsbExpbmtJbmZvLT5zZWVuT25jZSgpKQogICAgICAgICBjYWxsTGlua0lu
Zm8tPnNldFNlZW4oKTsKICAgICBlbHNlCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L1JlZ2lzdGVyU2V0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L1JlZ2lzdGVyU2V0LmNwcAkocmV2aXNpb24gMjQzNzgwKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9SZWdpc3RlclNldC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU4LDcgKzU4LDcgQEAg
UmVnaXN0ZXJTZXQgUmVnaXN0ZXJTZXQ6OnJlc2VydmVkSGFyZHdhcgogI2VuZGlmCiB9CiAKLVJl
Z2lzdGVyU2V0IFJlZ2lzdGVyU2V0OjpydW50aW1lUmVnaXN0ZXJzKCkKK1JlZ2lzdGVyU2V0IFJl
Z2lzdGVyU2V0OjpydW50aW1lVGFnUmVnaXN0ZXJzKCkKIHsKICNpZiBVU0UoSlNWQUxVRTY0KQog
ICAgIHJldHVybiBSZWdpc3RlclNldChHUFJJbmZvOjp0YWdUeXBlTnVtYmVyUmVnaXN0ZXIsIEdQ
UkluZm86OnRhZ01hc2tSZWdpc3Rlcik7CkBAIC03MCw3ICs3MCw3IEBAIFJlZ2lzdGVyU2V0IFJl
Z2lzdGVyU2V0OjpydW50aW1lUmVnaXN0ZXIKIFJlZ2lzdGVyU2V0IFJlZ2lzdGVyU2V0OjpzcGVj
aWFsUmVnaXN0ZXJzKCkKIHsKICAgICByZXR1cm4gUmVnaXN0ZXJTZXQoCi0gICAgICAgIHN0YWNr
UmVnaXN0ZXJzKCksIHJlc2VydmVkSGFyZHdhcmVSZWdpc3RlcnMoKSwgcnVudGltZVJlZ2lzdGVy
cygpKTsKKyAgICAgICAgc3RhY2tSZWdpc3RlcnMoKSwgcmVzZXJ2ZWRIYXJkd2FyZVJlZ2lzdGVy
cygpLCBydW50aW1lVGFnUmVnaXN0ZXJzKCkpOwogfQogCiBSZWdpc3RlclNldCBSZWdpc3RlclNl
dDo6dm9sYXRpbGVSZWdpc3RlcnNGb3JKU0NhbGwoKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9SZWdpc3RlclNldC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvUmVnaXN0ZXJTZXQuaAkocmV2aXNpb24gMjQzNzgwKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9SZWdpc3RlclNldC5oCSh3b3JraW5nIGNvcHkpCkBAIC01MCw3ICs1MCw3IEBA
IHB1YmxpYzoKICAgICAKICAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgUmVnaXN0ZXJTZXQg
c3RhY2tSZWdpc3RlcnMoKTsKICAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgUmVnaXN0ZXJT
ZXQgcmVzZXJ2ZWRIYXJkd2FyZVJlZ2lzdGVycygpOwotICAgIHN0YXRpYyBSZWdpc3RlclNldCBy
dW50aW1lUmVnaXN0ZXJzKCk7CisgICAgc3RhdGljIFJlZ2lzdGVyU2V0IHJ1bnRpbWVUYWdSZWdp
c3RlcnMoKTsKICAgICBzdGF0aWMgUmVnaXN0ZXJTZXQgc3BlY2lhbFJlZ2lzdGVycygpOyAvLyBU
aGUgdW5pb24gb2Ygc3RhY2ssIHJlc2VydmVkIGhhcmR3YXJlLCBhbmQgcnVudGltZSByZWdpc3Rl
cnMuCiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIFJlZ2lzdGVyU2V0IGNhbGxlZVNhdmVS
ZWdpc3RlcnMoKTsKICAgICBzdGF0aWMgUmVnaXN0ZXJTZXQgdm1DYWxsZWVTYXZlUmVnaXN0ZXJz
KCk7IC8vIENhbGxlZSBzYXZlIHJlZ2lzdGVycyB0aGF0IG1pZ2h0IGJlIHNhdmVkIGFuZCB1c2Vk
IGJ5IGFueSB0aWVyLgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9SZXBhdGNoLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1JlcGF0Y2guY3BwCShy
ZXZpc2lvbiAyNDM3ODApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1JlcGF0Y2guY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC05NzUsNyArOTc1LDcgQEAgdm9pZCBsaW5rUG9seW1vcnBoaWND
YWxsKAogICAgIGlmIChQb2x5bW9ycGhpY0NhbGxTdHViUm91dGluZSogc3R1YiA9IGNhbGxMaW5r
SW5mby5zdHViKCkpCiAgICAgICAgIGxpc3QgPSBzdHViLT52YXJpYW50cygpOwogICAgIGVsc2Ug
aWYgKEpTT2JqZWN0KiBvbGRDYWxsZWUgPSBjYWxsTGlua0luZm8uY2FsbGVlKCkpCi0gICAgICAg
IGxpc3QgPSBDYWxsVmFyaWFudExpc3R7IENhbGxWYXJpYW50KG9sZENhbGxlZSkgfTsKKyAgICAg
ICAgbGlzdCA9IENhbGxWYXJpYW50TGlzdCB7IENhbGxWYXJpYW50KG9sZENhbGxlZSkgfTsKICAg
ICAKICAgICBsaXN0ID0gdmFyaWFudExpc3RXaXRoVmFyaWFudChsaXN0LCBuZXdWYXJpYW50KTsK
IApAQCAtMTEzNyw3ICsxMTM3LDE4IEBAIHZvaWQgbGlua1BvbHltb3JwaGljQ2FsbCgKICAgICAg
ICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPEpTRW50cnlQdHJUYWc+IGNvZGVQdHI7CiAgICAgICAg
IGlmICh2YXJpYW50LmV4ZWN1dGFibGUoKSkgewogICAgICAgICAgICAgQVNTRVJUKHZhcmlhbnQu
ZXhlY3V0YWJsZSgpLT5oYXNKSVRDb2RlRm9yQ2FsbCgpKTsKLSAgICAgICAgICAgIGNvZGVQdHIg
PSB2YXJpYW50LmV4ZWN1dGFibGUoKS0+Z2VuZXJhdGVkSklUQ29kZUZvckNhbGwoKS0+YWRkcmVz
c0ZvckNhbGwoQXJpdHlDaGVja05vdFJlcXVpcmVkKTsKKworI2lmIEVOQUJMRShXRUJBU1NFTUJM
WSkKKyAgICAgICAgICAgIGlmIChjYWxsTGlua0luZm8uc3BlY2lhbGl6YXRpb25LaW5kKCkgPT0g
Q29kZUZvckNhbGwpIHsKKyAgICAgICAgICAgICAgICBpZiAoSlNGdW5jdGlvbiogZnVuY3Rpb24g
PSB2YXJpYW50LmZ1bmN0aW9uKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGF1dG8qIHdh
c21GdW5jdGlvbiA9IGpzRHluYW1pY0Nhc3Q8V2ViQXNzZW1ibHlGdW5jdGlvbio+KHZtLCBmdW5j
dGlvbikpCisgICAgICAgICAgICAgICAgICAgICAgICBjb2RlUHRyID0gd2FzbUZ1bmN0aW9uLT5q
c0NhbGxFbnRyeXBvaW50KCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorI2Vu
ZGlmCisKKyAgICAgICAgICAgIGlmICghY29kZVB0cikKKyAgICAgICAgICAgICAgICBjb2RlUHRy
ID0gdmFyaWFudC5leGVjdXRhYmxlKCktPmdlbmVyYXRlZEpJVENvZGVGb3JDYWxsKCktPmFkZHJl
c3NGb3JDYWxsKEFyaXR5Q2hlY2tOb3RSZXF1aXJlZCk7CiAgICAgICAgIH0gZWxzZSB7CiAgICAg
ICAgICAgICBBU1NFUlQodmFyaWFudC5pbnRlcm5hbEZ1bmN0aW9uKCkpOwogICAgICAgICAgICAg
Y29kZVB0ciA9IHZtLmdldENUSUludGVybmFsRnVuY3Rpb25UcmFtcG9saW5lRm9yKENvZGVGb3JD
YWxsKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTRnVuY3Rpb24uY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTRnVuY3Rpb24u
Y3BwCShyZXZpc2lvbiAyNDM3ODApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9K
U0Z1bmN0aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDgsNiArNDgsNyBAQAogI2luY2x1ZGUg
IlBhcnNlci5oIgogI2luY2x1ZGUgIlByb3BlcnR5TmFtZUFycmF5LmgiCiAjaW5jbHVkZSAiU3Rh
Y2tWaXNpdG9yLmgiCisjaW5jbHVkZSAiV2ViQXNzZW1ibHlGdW5jdGlvbi5oIgogCiBuYW1lc3Bh
Y2UgSlNDIHsKIApAQCAtNjI3LDEwICs2MjgsMTQgQEAgQ29uc3RydWN0VHlwZSBKU0Z1bmN0aW9u
OjpnZXRDb25zdHJ1Y3REYQogCiBTdHJpbmcgZ2V0Q2FsY3VsYXRlZERpc3BsYXlOYW1lKFZNJiB2
bSwgSlNPYmplY3QqIG9iamVjdCkKIHsKKyNpZiBFTkFCTEUoV0VCQVNTRU1CTFkpCisgICAgaWYg
KGpzRHluYW1pY0Nhc3Q8SlNUb1dhc21JQ0NhbGxlZSo+KHZtLCBvYmplY3QpKQorICAgICAgICBy
ZXR1cm4gIndhc20tc3R1YiJfczsKKyNlbmRpZgorCiAgICAgaWYgKCFqc0R5bmFtaWNDYXN0PEpT
RnVuY3Rpb24qPih2bSwgb2JqZWN0KSAmJiAhanNEeW5hbWljQ2FzdDxJbnRlcm5hbEZ1bmN0aW9u
Kj4odm0sIG9iamVjdCkpCiAgICAgICAgIHJldHVybiBlbXB0eVN0cmluZygpOwogCi0KICAgICBT
dHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IG9iamVjdC0+c3RydWN0dXJlKHZtKTsKICAgICB1bnNpZ25l
ZCBhdHRyaWJ1dGVzOwogICAgIC8vIFRoaXMgZnVuY3Rpb24gbWF5IGJlIGNhbGxlZCB3aGVuIHRo
ZSBtdXRhdG9yIGlzbid0IHJ1bm5pbmcgYW5kIHdlIGFyZSBsYXppbHkgZ2VuZXJhdGluZyBhIHN0
YWNrIHRyYWNlLgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxP
YmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pT
R2xvYmFsT2JqZWN0LmNwcAkocmV2aXNpb24gMjQzNzgwKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDUzLDYg
KzEwNTMsMTAgQEAgcHV0RGlyZWN0V2l0aG91dFRyYW5zaXRpb24odm0sIHZtLnByb3BlcgogICAg
ICAgICAgICAgW10gKGNvbnN0IEluaXRpYWxpemVyPFN0cnVjdHVyZT4mIGluaXQpIHsKICAgICAg
ICAgICAgICAgICBpbml0LnNldChXZWJBc3NlbWJseUZ1bmN0aW9uOjpjcmVhdGVTdHJ1Y3R1cmUo
aW5pdC52bSwgaW5pdC5vd25lciwgaW5pdC5vd25lci0+bV9mdW5jdGlvblByb3RvdHlwZS5nZXQo
KSkpOwogICAgICAgICAgICAgfSk7CisgICAgICAgIG1fanNUb1dhc21JQ0NhbGxlZVN0cnVjdHVy
ZS5pbml0TGF0ZXIoCisgICAgICAgICAgICBbXSAoY29uc3QgSW5pdGlhbGl6ZXI8U3RydWN0dXJl
PiYgaW5pdCkgeworICAgICAgICAgICAgICAgIGluaXQuc2V0KEpTVG9XYXNtSUNDYWxsZWU6OmNy
ZWF0ZVN0cnVjdHVyZShpbml0LnZtLCBpbml0Lm93bmVyLCBKU1ZhbHVlKCkpKTsKKyAgICAgICAg
ICAgIH0pOwogICAgICAgICBtX3dlYkFzc2VtYmx5V3JhcHBlckZ1bmN0aW9uU3RydWN0dXJlLmlu
aXRMYXRlcigKICAgICAgICAgICAgIFtdIChjb25zdCBJbml0aWFsaXplcjxTdHJ1Y3R1cmU+JiBp
bml0KSB7CiAgICAgICAgICAgICAgICAgaW5pdC5zZXQoV2ViQXNzZW1ibHlXcmFwcGVyRnVuY3Rp
b246OmNyZWF0ZVN0cnVjdHVyZShpbml0LnZtLCBpbml0Lm93bmVyLCBpbml0Lm93bmVyLT5tX2Z1
bmN0aW9uUHJvdG90eXBlLmdldCgpKSk7CkBAIC0xNzUxLDYgKzE3NTUsNyBAQCB2b2lkIEpTR2xv
YmFsT2JqZWN0Ojp2aXNpdENoaWxkcmVuKEpTQ2VsCiAjaWYgRU5BQkxFKFdFQkFTU0VNQkxZKQog
ICAgIHRoaXNPYmplY3QtPm1fd2ViQXNzZW1ibHlNb2R1bGVSZWNvcmRTdHJ1Y3R1cmUudmlzaXQo
dmlzaXRvcik7CiAgICAgdGhpc09iamVjdC0+bV93ZWJBc3NlbWJseUZ1bmN0aW9uU3RydWN0dXJl
LnZpc2l0KHZpc2l0b3IpOworICAgIHRoaXNPYmplY3QtPm1fanNUb1dhc21JQ0NhbGxlZVN0cnVj
dHVyZS52aXNpdCh2aXNpdG9yKTsKICAgICB0aGlzT2JqZWN0LT5tX3dlYkFzc2VtYmx5V3JhcHBl
ckZ1bmN0aW9uU3RydWN0dXJlLnZpc2l0KHZpc2l0b3IpOwogICAgIHRoaXNPYmplY3QtPm1fd2Vi
QXNzZW1ibHlUb0pTQ2FsbGVlU3RydWN0dXJlLnZpc2l0KHZpc2l0b3IpOwogICAgIEZPUl9FQUNI
X1dFQkFTU0VNQkxZX0NPTlNUUlVDVE9SX1RZUEUoVklTSVRfTEFaWV9UWVBFKQpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3QuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVjdC5oCShyZXZpc2lv
biAyNDM3ODApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVj
dC5oCSh3b3JraW5nIGNvcHkpCkBAIC00MDAsNiArNDAwLDcgQEAgcHVibGljOgogI2lmIEVOQUJM
RShXRUJBU1NFTUJMWSkKICAgICBMYXp5UHJvcGVydHk8SlNHbG9iYWxPYmplY3QsIFN0cnVjdHVy
ZT4gbV93ZWJBc3NlbWJseU1vZHVsZVJlY29yZFN0cnVjdHVyZTsKICAgICBMYXp5UHJvcGVydHk8
SlNHbG9iYWxPYmplY3QsIFN0cnVjdHVyZT4gbV93ZWJBc3NlbWJseUZ1bmN0aW9uU3RydWN0dXJl
OworICAgIExhenlQcm9wZXJ0eTxKU0dsb2JhbE9iamVjdCwgU3RydWN0dXJlPiBtX2pzVG9XYXNt
SUNDYWxsZWVTdHJ1Y3R1cmU7CiAgICAgTGF6eVByb3BlcnR5PEpTR2xvYmFsT2JqZWN0LCBTdHJ1
Y3R1cmU+IG1fd2ViQXNzZW1ibHlXcmFwcGVyRnVuY3Rpb25TdHJ1Y3R1cmU7CiAgICAgTGF6eVBy
b3BlcnR5PEpTR2xvYmFsT2JqZWN0LCBTdHJ1Y3R1cmU+IG1fd2ViQXNzZW1ibHlUb0pTQ2FsbGVl
U3RydWN0dXJlOwogICAgIEZPUl9FQUNIX1dFQkFTU0VNQkxZX0NPTlNUUlVDVE9SX1RZUEUoREVG
SU5FX1NUT1JBR0VfRk9SX0xBWllfVFlQRSkKQEAgLTc2NCw2ICs3NjUsNyBAQCBwdWJsaWM6CiAj
aWYgRU5BQkxFKFdFQkFTU0VNQkxZKQogICAgIFN0cnVjdHVyZSogd2ViQXNzZW1ibHlNb2R1bGVS
ZWNvcmRTdHJ1Y3R1cmUoKSBjb25zdCB7IHJldHVybiBtX3dlYkFzc2VtYmx5TW9kdWxlUmVjb3Jk
U3RydWN0dXJlLmdldCh0aGlzKTsgfQogICAgIFN0cnVjdHVyZSogd2ViQXNzZW1ibHlGdW5jdGlv
blN0cnVjdHVyZSgpIGNvbnN0IHsgcmV0dXJuIG1fd2ViQXNzZW1ibHlGdW5jdGlvblN0cnVjdHVy
ZS5nZXQodGhpcyk7IH0KKyAgICBTdHJ1Y3R1cmUqIGpzVG9XYXNtSUNDYWxsZWVTdHJ1Y3R1cmUo
KSBjb25zdCB7IHJldHVybiBtX2pzVG9XYXNtSUNDYWxsZWVTdHJ1Y3R1cmUuZ2V0KHRoaXMpOyB9
CiAgICAgU3RydWN0dXJlKiB3ZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlvblN0cnVjdHVyZSgpIGNv
bnN0IHsgcmV0dXJuIG1fd2ViQXNzZW1ibHlXcmFwcGVyRnVuY3Rpb25TdHJ1Y3R1cmUuZ2V0KHRo
aXMpOyB9CiAgICAgU3RydWN0dXJlKiB3ZWJBc3NlbWJseVRvSlNDYWxsZWVTdHJ1Y3R1cmUoKSBj
b25zdCB7IHJldHVybiBtX3dlYkFzc2VtYmx5VG9KU0NhbGxlZVN0cnVjdHVyZS5nZXQodGhpcyk7
IH0KICNlbmRpZiAvLyBFTkFCTEUoV0VCQVNTRU1CTFkpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9WTS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvVk0uY3BwCShyZXZpc2lvbiAyNDM3ODApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9WTS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE0Nyw2ICsxNDcsNyBAQAogI2lu
Y2x1ZGUgIldhdGNoZG9nLmgiCiAjaW5jbHVkZSAiV2Vha0dDTWFwSW5saW5lcy5oIgogI2luY2x1
ZGUgIldlYkFzc2VtYmx5RnVuY3Rpb24uaCIKKyNpbmNsdWRlICJXZWJBc3NlbWJseUZ1bmN0aW9u
SGVhcENlbGxUeXBlLmgiCiAjaW5jbHVkZSAiV2ViQXNzZW1ibHlXcmFwcGVyRnVuY3Rpb24uaCIK
ICNpbmNsdWRlIDx3dGYvUHJvY2Vzc0lELmg+CiAjaW5jbHVkZSA8d3RmL1JlYWRXcml0ZUxvY2su
aD4KQEAgLTI3OSw2ICsyODAsNyBAQCBWTTo6Vk0oVk1UeXBlIHZtVHlwZSwgSGVhcFR5cGUgaGVh
cFR5cGUpCiAgICAgLCBkZXN0cnVjdGlibGVPYmplY3RIZWFwQ2VsbFR5cGUoc3RkOjptYWtlX3Vu
aXF1ZTxKU0Rlc3RydWN0aWJsZU9iamVjdEhlYXBDZWxsVHlwZT4oKSkKICNpZiBFTkFCTEUoV0VC
QVNTRU1CTFkpCiAgICAgLCB3ZWJBc3NlbWJseUNvZGVCbG9ja0hlYXBDZWxsVHlwZShzdGQ6Om1h
a2VfdW5pcXVlPEpTV2ViQXNzZW1ibHlDb2RlQmxvY2tIZWFwQ2VsbFR5cGU+KCkpCisgICAgLCB3
ZWJBc3NlbWJseUZ1bmN0aW9uSGVhcENlbGxUeXBlKHN0ZDo6bWFrZV91bmlxdWU8V2ViQXNzZW1i
bHlGdW5jdGlvbkhlYXBDZWxsVHlwZT4oKSkKICNlbmRpZgogICAgICwgcHJpbWl0aXZlR2lnYWNh
Z2VBdXhpbGlhcnlTcGFjZSgiUHJpbWl0aXZlIEdpZ2FjYWdlIEF1eGlsaWFyeSIsIGhlYXAsIGF1
eGlsaWFyeUhlYXBDZWxsVHlwZS5nZXQoKSwgcHJpbWl0aXZlR2lnYWNhZ2VBbGxvY2F0b3IuZ2V0
KCkpCiAgICAgLCBqc1ZhbHVlR2lnYWNhZ2VBdXhpbGlhcnlTcGFjZSgiSlNWYWx1ZSBHaWdhY2Fn
ZSBBdXhpbGlhcnkiLCBoZWFwLCBhdXhpbGlhcnlIZWFwQ2VsbFR5cGUuZ2V0KCksIGpzVmFsdWVH
aWdhY2FnZUFsbG9jYXRvci5nZXQoKSkKQEAgLTEyNjEsNyArMTI2Myw3IEBAIERZTkFNSUNfSVNP
X1NVQlNQQUNFX0RFRklORV9NRU1CRVJfU0xPVygKICNlbmRpZgogI2lmIEVOQUJMRShXRUJBU1NF
TUJMWSkKIERZTkFNSUNfSVNPX1NVQlNQQUNFX0RFRklORV9NRU1CRVJfU0xPVyh3ZWJBc3NlbWJs
eUNvZGVCbG9ja1NwYWNlLCB3ZWJBc3NlbWJseUNvZGVCbG9ja0hlYXBDZWxsVHlwZS5nZXQoKSwg
SlNXZWJBc3NlbWJseUNvZGVCbG9jaykKLURZTkFNSUNfSVNPX1NVQlNQQUNFX0RFRklORV9NRU1C
RVJfU0xPVyh3ZWJBc3NlbWJseUZ1bmN0aW9uU3BhY2UsIGNlbGxIZWFwQ2VsbFR5cGUuZ2V0KCks
IFdlYkFzc2VtYmx5RnVuY3Rpb24pCitEWU5BTUlDX0lTT19TVUJTUEFDRV9ERUZJTkVfTUVNQkVS
X1NMT1cod2ViQXNzZW1ibHlGdW5jdGlvblNwYWNlLCB3ZWJBc3NlbWJseUZ1bmN0aW9uSGVhcENl
bGxUeXBlLmdldCgpLCBXZWJBc3NlbWJseUZ1bmN0aW9uKQogRFlOQU1JQ19JU09fU1VCU1BBQ0Vf
REVGSU5FX01FTUJFUl9TTE9XKHdlYkFzc2VtYmx5V3JhcHBlckZ1bmN0aW9uU3BhY2UsIGNlbGxI
ZWFwQ2VsbFR5cGUuZ2V0KCksIFdlYkFzc2VtYmx5V3JhcHBlckZ1bmN0aW9uKQogI2VuZGlmCiAK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uaAkocmV2aXNpb24gMjQzNzgwKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uaAkod29ya2luZyBjb3B5KQpAQCAtMTU3
LDYgKzE1Nyw3IEBAIGNsYXNzIFZNRW50cnlTY29wZTsKIGNsYXNzIFdhdGNoZG9nOwogY2xhc3Mg
V2F0Y2hwb2ludDsKIGNsYXNzIFdhdGNocG9pbnRTZXQ7CitjbGFzcyBXZWJBc3NlbWJseUZ1bmN0
aW9uSGVhcENlbGxUeXBlOwogCiAjaWYgRU5BQkxFKEZUTF9KSVQpCiBuYW1lc3BhY2UgRlRMIHsK
QEAgLTMzMCw2ICszMzEsNyBAQCBwdWJsaWM6CiAgICAgc3RkOjp1bmlxdWVfcHRyPEpTRGVzdHJ1
Y3RpYmxlT2JqZWN0SGVhcENlbGxUeXBlPiBkZXN0cnVjdGlibGVPYmplY3RIZWFwQ2VsbFR5cGU7
CiAjaWYgRU5BQkxFKFdFQkFTU0VNQkxZKQogICAgIHN0ZDo6dW5pcXVlX3B0cjxKU1dlYkFzc2Vt
Ymx5Q29kZUJsb2NrSGVhcENlbGxUeXBlPiB3ZWJBc3NlbWJseUNvZGVCbG9ja0hlYXBDZWxsVHlw
ZTsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8V2ViQXNzZW1ibHlGdW5jdGlvbkhlYXBDZWxsVHlwZT4g
d2ViQXNzZW1ibHlGdW5jdGlvbkhlYXBDZWxsVHlwZTsKICNlbmRpZgogICAgIAogICAgIENvbXBs
ZXRlU3Vic3BhY2UgcHJpbWl0aXZlR2lnYWNhZ2VBdXhpbGlhcnlTcGFjZTsgLy8gVHlwZWQgYXJy
YXlzLCBzdHJpbmdzLCBiaXR2ZWN0b3JzLCBldGMgZ28gaGVyZS4KSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS93YXNtL1dhc21BaXJJUkdlbmVyYXRvci5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUFpcklSR2VuZXJhdG9yLmNwcAkocmV2aXNpb24g
MjQzNzgwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUFpcklSR2VuZXJhdG9y
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjgwLDEwICs2ODAsOCBAQCBBaXJJUkdlbmVyYXRvcjo6
QWlySVJHZW5lcmF0b3IoY29uc3QgTW9kCiAgICAgICAgIG1fY29kZS5waW5SZWdpc3RlcihtX3dh
c21Db250ZXh0SW5zdGFuY2VHUFIpOwogCiAgICAgaWYgKG1vZGUgIT0gTWVtb3J5TW9kZTo6U2ln
bmFsaW5nKSB7Ci0gICAgICAgIEFTU0VSVCghcGlubmVkUmVncy5zaXplUmVnaXN0ZXJzWzBdLnNp
emVPZmZzZXQpOwotICAgICAgICBtX21lbW9yeVNpemVHUFIgPSBwaW5uZWRSZWdzLnNpemVSZWdp
c3RlcnNbMF0uc2l6ZVJlZ2lzdGVyOwotICAgICAgICBmb3IgKGNvbnN0IFBpbm5lZFNpemVSZWdp
c3RlckluZm8mIHJlZ0luZm8gOiBwaW5uZWRSZWdzLnNpemVSZWdpc3RlcnMpCi0gICAgICAgICAg
ICBtX2NvZGUucGluUmVnaXN0ZXIocmVnSW5mby5zaXplUmVnaXN0ZXIpOworICAgICAgICBtX21l
bW9yeVNpemVHUFIgPSBwaW5uZWRSZWdzLnNpemVSZWdpc3RlcjsKKyAgICAgICAgbV9jb2RlLnBp
blJlZ2lzdGVyKG1fbWVtb3J5U2l6ZUdQUik7CiAgICAgfQogCiAgICAgaWYgKHRocm93V2FzbUV4
Y2VwdGlvbikKQEAgLTgyMyw4ICs4MjEsNyBAQCB2b2lkIEFpcklSR2VuZXJhdG9yOjpyZXN0b3Jl
V2ViQXNzZW1ibHlHCiAgICAgICAgIGNvbnN0IFBpbm5lZFJlZ2lzdGVySW5mbyogcGlubmVkUmVn
cyA9ICZQaW5uZWRSZWdpc3RlckluZm86OmdldCgpOwogICAgICAgICBSZWdpc3RlclNldCBjbG9i
YmVyczsKICAgICAgICAgY2xvYmJlcnMuc2V0KHBpbm5lZFJlZ3MtPmJhc2VNZW1vcnlQb2ludGVy
KTsKLSAgICAgICAgZm9yIChhdXRvIGluZm8gOiBwaW5uZWRSZWdzLT5zaXplUmVnaXN0ZXJzKQot
ICAgICAgICAgICAgY2xvYmJlcnMuc2V0KGluZm8uc2l6ZVJlZ2lzdGVyKTsKKyAgICAgICAgY2xv
YmJlcnMuc2V0KHBpbm5lZFJlZ3MtPnNpemVSZWdpc3Rlcik7CiAKICAgICAgICAgYXV0byogcGF0
Y2hwb2ludCA9IGFkZFBhdGNocG9pbnQoQjM6OlZvaWQpOwogICAgICAgICBCMzo6RWZmZWN0cyBl
ZmZlY3RzID0gQjM6OkVmZmVjdHM6Om5vbmUoKTsKQEAgLTgzNCwxNCArODMxLDggQEAgdm9pZCBB
aXJJUkdlbmVyYXRvcjo6cmVzdG9yZVdlYkFzc2VtYmx5RwogICAgICAgICBwYXRjaHBvaW50LT5j
bG9iYmVyKGNsb2JiZXJzKTsKIAogICAgICAgICBwYXRjaHBvaW50LT5zZXRHZW5lcmF0b3IoW3Bp
bm5lZFJlZ3NdIChDQ2FsbEhlbHBlcnMmIGppdCwgY29uc3QgQjM6OlN0YWNrbWFwR2VuZXJhdGlv
blBhcmFtcyYgcGFyYW1zKSB7Ci0gICAgICAgICAgICBHUFJSZWcgYmFzZU1lbW9yeSA9IHBpbm5l
ZFJlZ3MtPmJhc2VNZW1vcnlQb2ludGVyOwotICAgICAgICAgICAgY29uc3QgYXV0byYgc2l6ZVJl
Z3MgPSBwaW5uZWRSZWdzLT5zaXplUmVnaXN0ZXJzOwotICAgICAgICAgICAgQVNTRVJUKHNpemVS
ZWdzLnNpemUoKSA+PSAxKTsKLSAgICAgICAgICAgIEFTU0VSVCghc2l6ZVJlZ3NbMF0uc2l6ZU9m
ZnNldCk7IC8vIFRoZSBmb2xsb3dpbmcgY29kZSBhc3N1bWVzIHdlIHN0YXJ0IGF0IDAsIGFuZCBj
YWxjdWxhdGVzIHN1YnNlcXVlbnQgc2l6ZSByZWdpc3RlcnMgcmVsYXRpdmUgdG8gMC4KLSAgICAg
ICAgICAgIGppdC5sb2FkUHRyKENDYWxsSGVscGVyczo6QWRkcmVzcyhwYXJhbXNbMF0uZ3ByKCks
IEluc3RhbmNlOjpvZmZzZXRPZkNhY2hlZE1lbW9yeVNpemUoKSksIHNpemVSZWdzWzBdLnNpemVS
ZWdpc3Rlcik7Ci0gICAgICAgICAgICBqaXQubG9hZFB0cihDQ2FsbEhlbHBlcnM6OkFkZHJlc3Mo
cGFyYW1zWzBdLmdwcigpLCBJbnN0YW5jZTo6b2Zmc2V0T2ZDYWNoZWRNZW1vcnkoKSksIGJhc2VN
ZW1vcnkpOwotICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMTsgaSA8IHNpemVSZWdzLnNp
emUoKTsgKytpKQotICAgICAgICAgICAgICAgIGppdC5hZGQ2NChDQ2FsbEhlbHBlcnM6OlRydXN0
ZWRJbW0zMigtc2l6ZVJlZ3NbaV0uc2l6ZU9mZnNldCksIHNpemVSZWdzWzBdLnNpemVSZWdpc3Rl
ciwgc2l6ZVJlZ3NbaV0uc2l6ZVJlZ2lzdGVyKTsKKyAgICAgICAgICAgIGppdC5sb2FkUHRyKEND
YWxsSGVscGVyczo6QWRkcmVzcyhwYXJhbXNbMF0uZ3ByKCksIEluc3RhbmNlOjpvZmZzZXRPZkNh
Y2hlZE1lbW9yeVNpemUoKSksIHBpbm5lZFJlZ3MtPnNpemVSZWdpc3Rlcik7CisgICAgICAgICAg
ICBqaXQubG9hZFB0cihDQ2FsbEhlbHBlcnM6OkFkZHJlc3MocGFyYW1zWzBdLmdwcigpLCBJbnN0
YW5jZTo6b2Zmc2V0T2ZDYWNoZWRNZW1vcnkoKSksIHBpbm5lZFJlZ3MtPmJhc2VNZW1vcnlQb2lu
dGVyKTsKICAgICAgICAgfSk7CiAKICAgICAgICAgZW1pdFBhdGNocG9pbnQoYmxvY2ssIHBhdGNo
cG9pbnQsIFRtcCgpLCBpbnN0YW5jZSk7CkBAIC0xODU1LDE5ICsxODQ2LDE1IEBAIGF1dG8gQWly
SVJHZW5lcmF0b3I6OmFkZENhbGxJbmRpcmVjdChjb24KICAgICAgICAgICAgIEdQUlJlZyBuZXdD
b250ZXh0SW5zdGFuY2UgPSBwYXJhbXNbMF0uZ3ByKCk7CiAgICAgICAgICAgICBHUFJSZWcgb2xk
Q29udGV4dEluc3RhbmNlID0gcGFyYW1zWzFdLmdwcigpOwogICAgICAgICAgICAgY29uc3QgUGlu
bmVkUmVnaXN0ZXJJbmZvJiBwaW5uZWRSZWdzID0gUGlubmVkUmVnaXN0ZXJJbmZvOjpnZXQoKTsK
LSAgICAgICAgICAgIGNvbnN0IGF1dG8mIHNpemVSZWdzID0gcGlubmVkUmVncy5zaXplUmVnaXN0
ZXJzOwogICAgICAgICAgICAgR1BSUmVnIGJhc2VNZW1vcnkgPSBwaW5uZWRSZWdzLmJhc2VNZW1v
cnlQb2ludGVyOwogICAgICAgICAgICAgQVNTRVJUKG5ld0NvbnRleHRJbnN0YW5jZSAhPSBiYXNl
TWVtb3J5KTsKICAgICAgICAgICAgIGppdC5sb2FkUHRyKENDYWxsSGVscGVyczo6QWRkcmVzcyhv
bGRDb250ZXh0SW5zdGFuY2UsIEluc3RhbmNlOjpvZmZzZXRPZkNhY2hlZFN0YWNrTGltaXQoKSks
IGJhc2VNZW1vcnkpOwogICAgICAgICAgICAgaml0LnN0b3JlUHRyKGJhc2VNZW1vcnksIENDYWxs
SGVscGVyczo6QWRkcmVzcyhuZXdDb250ZXh0SW5zdGFuY2UsIEluc3RhbmNlOjpvZmZzZXRPZkNh
Y2hlZFN0YWNrTGltaXQoKSkpOwogICAgICAgICAgICAgaml0LnN0b3JlV2FzbUNvbnRleHRJbnN0
YW5jZShuZXdDb250ZXh0SW5zdGFuY2UpOwotICAgICAgICAgICAgQVNTRVJUKHNpemVSZWdzWzBd
LnNpemVSZWdpc3RlciAhPSBiYXNlTWVtb3J5KTsKICAgICAgICAgICAgIC8vIEZJWE1FOiBXZSBz
aG91bGQgc3VwcG9ydCBtb3JlIHRoYW4gb25lIG1lbW9yeSBzaXplIHJlZ2lzdGVyCiAgICAgICAg
ICAgICAvLyAgIHNlZTogaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2
Mjk1MgotICAgICAgICAgICAgQVNTRVJUKHNpemVSZWdzLnNpemUoKSA9PSAxKTsKLSAgICAgICAg
ICAgIEFTU0VSVChzaXplUmVnc1swXS5zaXplUmVnaXN0ZXIgIT0gbmV3Q29udGV4dEluc3RhbmNl
KTsKLSAgICAgICAgICAgIEFTU0VSVCghc2l6ZVJlZ3NbMF0uc2l6ZU9mZnNldCk7Ci0gICAgICAg
ICAgICBqaXQubG9hZFB0cihDQ2FsbEhlbHBlcnM6OkFkZHJlc3MobmV3Q29udGV4dEluc3RhbmNl
LCBJbnN0YW5jZTo6b2Zmc2V0T2ZDYWNoZWRNZW1vcnlTaXplKCkpLCBzaXplUmVnc1swXS5zaXpl
UmVnaXN0ZXIpOyAvLyBNZW1vcnkgc2l6ZS4KKyAgICAgICAgICAgIEFTU0VSVChwaW5uZWRSZWdz
LnNpemVSZWdpc3RlciAhPSBuZXdDb250ZXh0SW5zdGFuY2UpOworICAgICAgICAgICAgaml0Lmxv
YWRQdHIoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKG5ld0NvbnRleHRJbnN0YW5jZSwgSW5zdGFuY2U6
Om9mZnNldE9mQ2FjaGVkTWVtb3J5U2l6ZSgpKSwgcGlubmVkUmVncy5zaXplUmVnaXN0ZXIpOyAv
LyBNZW1vcnkgc2l6ZS4KICAgICAgICAgICAgIGppdC5sb2FkUHRyKENDYWxsSGVscGVyczo6QWRk
cmVzcyhuZXdDb250ZXh0SW5zdGFuY2UsIEluc3RhbmNlOjpvZmZzZXRPZkNhY2hlZE1lbW9yeSgp
KSwgYmFzZU1lbW9yeSk7IC8vIE1lbW9yeTo6dm9pZCouCiAgICAgICAgIH0pOwogCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQjNJUkdlbmVyYXRvci5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUIzSVJHZW5lcmF0b3IuY3BwCShy
ZXZpc2lvbiAyNDM3ODApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQjNJUkdl
bmVyYXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM0NiwxMCArMzQ2LDggQEAgQjNJUkdlbmVy
YXRvcjo6QjNJUkdlbmVyYXRvcihjb25zdCBNb2R1bAogICAgICAgICBtX3Byb2MucGluUmVnaXN0
ZXIobV93YXNtQ29udGV4dEluc3RhbmNlR1BSKTsKIAogICAgIGlmIChtb2RlICE9IE1lbW9yeU1v
ZGU6OlNpZ25hbGluZykgewotICAgICAgICBBU1NFUlQoIXBpbm5lZFJlZ3Muc2l6ZVJlZ2lzdGVy
c1swXS5zaXplT2Zmc2V0KTsKLSAgICAgICAgbV9tZW1vcnlTaXplR1BSID0gcGlubmVkUmVncy5z
aXplUmVnaXN0ZXJzWzBdLnNpemVSZWdpc3RlcjsKLSAgICAgICAgZm9yIChjb25zdCBQaW5uZWRT
aXplUmVnaXN0ZXJJbmZvJiByZWdJbmZvIDogcGlubmVkUmVncy5zaXplUmVnaXN0ZXJzKQotICAg
ICAgICAgICAgbV9wcm9jLnBpblJlZ2lzdGVyKHJlZ0luZm8uc2l6ZVJlZ2lzdGVyKTsKKyAgICAg
ICAgbV9tZW1vcnlTaXplR1BSID0gcGlubmVkUmVncy5zaXplUmVnaXN0ZXI7CisgICAgICAgIG1f
cHJvYy5waW5SZWdpc3RlcihtX21lbW9yeVNpemVHUFIpOwogICAgIH0KIAogICAgIGlmICh0aHJv
d1dhc21FeGNlcHRpb24pCkBAIC00NjksOCArNDY3LDcgQEAgdm9pZCBCM0lSR2VuZXJhdG9yOjpy
ZXN0b3JlV2ViQXNzZW1ibHlHbAogICAgICAgICBjb25zdCBQaW5uZWRSZWdpc3RlckluZm8qIHBp
bm5lZFJlZ3MgPSAmUGlubmVkUmVnaXN0ZXJJbmZvOjpnZXQoKTsKICAgICAgICAgUmVnaXN0ZXJT
ZXQgY2xvYmJlcnM7CiAgICAgICAgIGNsb2JiZXJzLnNldChwaW5uZWRSZWdzLT5iYXNlTWVtb3J5
UG9pbnRlcik7Ci0gICAgICAgIGZvciAoYXV0byBpbmZvIDogcGlubmVkUmVncy0+c2l6ZVJlZ2lz
dGVycykKLSAgICAgICAgICAgIGNsb2JiZXJzLnNldChpbmZvLnNpemVSZWdpc3Rlcik7CisgICAg
ICAgIGNsb2JiZXJzLnNldChwaW5uZWRSZWdzLT5zaXplUmVnaXN0ZXIpOwogCiAgICAgICAgIEIz
OjpQYXRjaHBvaW50VmFsdWUqIHBhdGNocG9pbnQgPSBibG9jay0+YXBwZW5kTmV3PEIzOjpQYXRj
aHBvaW50VmFsdWU+KHByb2MsIEIzOjpWb2lkLCBvcmlnaW4oKSk7CiAgICAgICAgIEVmZmVjdHMg
ZWZmZWN0cyA9IEVmZmVjdHM6Om5vbmUoKTsKQEAgLTQ4MywxMyArNDgwLDggQEAgdm9pZCBCM0lS
R2VuZXJhdG9yOjpyZXN0b3JlV2ViQXNzZW1ibHlHbAogCiAgICAgICAgIHBhdGNocG9pbnQtPnNl
dEdlbmVyYXRvcihbcGlubmVkUmVnc10gKENDYWxsSGVscGVycyYgaml0LCBjb25zdCBCMzo6U3Rh
Y2ttYXBHZW5lcmF0aW9uUGFyYW1zJiBwYXJhbXMpIHsKICAgICAgICAgICAgIEdQUlJlZyBiYXNl
TWVtb3J5ID0gcGlubmVkUmVncy0+YmFzZU1lbW9yeVBvaW50ZXI7Ci0gICAgICAgICAgICBjb25z
dCBhdXRvJiBzaXplUmVncyA9IHBpbm5lZFJlZ3MtPnNpemVSZWdpc3RlcnM7Ci0gICAgICAgICAg
ICBBU1NFUlQoc2l6ZVJlZ3Muc2l6ZSgpID49IDEpOwotICAgICAgICAgICAgQVNTRVJUKCFzaXpl
UmVnc1swXS5zaXplT2Zmc2V0KTsgLy8gVGhlIGZvbGxvd2luZyBjb2RlIGFzc3VtZXMgd2Ugc3Rh
cnQgYXQgMCwgYW5kIGNhbGN1bGF0ZXMgc3Vic2VxdWVudCBzaXplIHJlZ2lzdGVycyByZWxhdGl2
ZSB0byAwLgotICAgICAgICAgICAgaml0LmxvYWRQdHIoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKHBh
cmFtc1swXS5ncHIoKSwgSW5zdGFuY2U6Om9mZnNldE9mQ2FjaGVkTWVtb3J5U2l6ZSgpKSwgc2l6
ZVJlZ3NbMF0uc2l6ZVJlZ2lzdGVyKTsKKyAgICAgICAgICAgIGppdC5sb2FkUHRyKENDYWxsSGVs
cGVyczo6QWRkcmVzcyhwYXJhbXNbMF0uZ3ByKCksIEluc3RhbmNlOjpvZmZzZXRPZkNhY2hlZE1l
bW9yeVNpemUoKSksIHBpbm5lZFJlZ3MtPnNpemVSZWdpc3Rlcik7CiAgICAgICAgICAgICBqaXQu
bG9hZFB0cihDQ2FsbEhlbHBlcnM6OkFkZHJlc3MocGFyYW1zWzBdLmdwcigpLCBJbnN0YW5jZTo6
b2Zmc2V0T2ZDYWNoZWRNZW1vcnkoKSksIGJhc2VNZW1vcnkpOwotICAgICAgICAgICAgZm9yICh1
bnNpZ25lZCBpID0gMTsgaSA8IHNpemVSZWdzLnNpemUoKTsgKytpKQotICAgICAgICAgICAgICAg
IGppdC5hZGQ2NChDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMigtc2l6ZVJlZ3NbaV0uc2l6ZU9m
ZnNldCksIHNpemVSZWdzWzBdLnNpemVSZWdpc3Rlciwgc2l6ZVJlZ3NbaV0uc2l6ZVJlZ2lzdGVy
KTsKICAgICAgICAgfSk7CiAgICAgfQogfQpAQCAtMTI4MiwxOSArMTI3NCwxNiBAQCBhdXRvIEIz
SVJHZW5lcmF0b3I6OmFkZENhbGxJbmRpcmVjdChjb25zCiAgICAgICAgICAgICBHUFJSZWcgbmV3
Q29udGV4dEluc3RhbmNlID0gcGFyYW1zWzBdLmdwcigpOwogICAgICAgICAgICAgR1BSUmVnIG9s
ZENvbnRleHRJbnN0YW5jZSA9IHBhcmFtc1sxXS5ncHIoKTsKICAgICAgICAgICAgIGNvbnN0IFBp
bm5lZFJlZ2lzdGVySW5mbyYgcGlubmVkUmVncyA9IFBpbm5lZFJlZ2lzdGVySW5mbzo6Z2V0KCk7
Ci0gICAgICAgICAgICBjb25zdCBhdXRvJiBzaXplUmVncyA9IHBpbm5lZFJlZ3Muc2l6ZVJlZ2lz
dGVyczsKICAgICAgICAgICAgIEdQUlJlZyBiYXNlTWVtb3J5ID0gcGlubmVkUmVncy5iYXNlTWVt
b3J5UG9pbnRlcjsKICAgICAgICAgICAgIEFTU0VSVChuZXdDb250ZXh0SW5zdGFuY2UgIT0gYmFz
ZU1lbW9yeSk7CiAgICAgICAgICAgICBqaXQubG9hZFB0cihDQ2FsbEhlbHBlcnM6OkFkZHJlc3Mo
b2xkQ29udGV4dEluc3RhbmNlLCBJbnN0YW5jZTo6b2Zmc2V0T2ZDYWNoZWRTdGFja0xpbWl0KCkp
LCBiYXNlTWVtb3J5KTsKICAgICAgICAgICAgIGppdC5zdG9yZVB0cihiYXNlTWVtb3J5LCBDQ2Fs
bEhlbHBlcnM6OkFkZHJlc3MobmV3Q29udGV4dEluc3RhbmNlLCBJbnN0YW5jZTo6b2Zmc2V0T2ZD
YWNoZWRTdGFja0xpbWl0KCkpKTsKICAgICAgICAgICAgIGppdC5zdG9yZVdhc21Db250ZXh0SW5z
dGFuY2UobmV3Q29udGV4dEluc3RhbmNlKTsKLSAgICAgICAgICAgIEFTU0VSVChzaXplUmVnc1sw
XS5zaXplUmVnaXN0ZXIgIT0gYmFzZU1lbW9yeSk7CisgICAgICAgICAgICBBU1NFUlQocGlubmVk
UmVncy5zaXplUmVnaXN0ZXIgIT0gYmFzZU1lbW9yeSk7CiAgICAgICAgICAgICAvLyBGSVhNRTog
V2Ugc2hvdWxkIHN1cHBvcnQgbW9yZSB0aGFuIG9uZSBtZW1vcnkgc2l6ZSByZWdpc3RlcgogICAg
ICAgICAgICAgLy8gICBzZWU6IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0xNjI5NTIKLSAgICAgICAgICAgIEFTU0VSVChzaXplUmVncy5zaXplKCkgPT0gMSk7Ci0gICAg
ICAgICAgICBBU1NFUlQoc2l6ZVJlZ3NbMF0uc2l6ZVJlZ2lzdGVyICE9IG5ld0NvbnRleHRJbnN0
YW5jZSk7Ci0gICAgICAgICAgICBBU1NFUlQoIXNpemVSZWdzWzBdLnNpemVPZmZzZXQpOwotICAg
ICAgICAgICAgaml0LmxvYWRQdHIoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKG5ld0NvbnRleHRJbnN0
YW5jZSwgSW5zdGFuY2U6Om9mZnNldE9mQ2FjaGVkTWVtb3J5U2l6ZSgpKSwgc2l6ZVJlZ3NbMF0u
c2l6ZVJlZ2lzdGVyKTsgLy8gTWVtb3J5IHNpemUuCisgICAgICAgICAgICBBU1NFUlQocGlubmVk
UmVncy5zaXplUmVnaXN0ZXIgIT0gbmV3Q29udGV4dEluc3RhbmNlKTsKKyAgICAgICAgICAgIGpp
dC5sb2FkUHRyKENDYWxsSGVscGVyczo6QWRkcmVzcyhuZXdDb250ZXh0SW5zdGFuY2UsIEluc3Rh
bmNlOjpvZmZzZXRPZkNhY2hlZE1lbW9yeVNpemUoKSksIHBpbm5lZFJlZ3Muc2l6ZVJlZ2lzdGVy
KTsgLy8gTWVtb3J5IHNpemUuCiAgICAgICAgICAgICBqaXQubG9hZFB0cihDQ2FsbEhlbHBlcnM6
OkFkZHJlc3MobmV3Q29udGV4dEluc3RhbmNlLCBJbnN0YW5jZTo6b2Zmc2V0T2ZDYWNoZWRNZW1v
cnkoKSksIGJhc2VNZW1vcnkpOyAvLyBNZW1vcnk6OnZvaWQqLgogICAgICAgICB9KTsKICAgICAg
ICAgZG9Db250ZXh0U3dpdGNoLT5hcHBlbmROZXdDb250cm9sVmFsdWUobV9wcm9jLCBKdW1wLCBv
cmlnaW4oKSwgY29udGludWF0aW9uKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNt
L1dhc21CaW5kaW5nLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2Fz
bS9XYXNtQmluZGluZy5jcHAJKHJldmlzaW9uIDI0Mzc4MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS93YXNtL1dhc21CaW5kaW5nLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDgsMTEgKzQ4LDkg
QEAgRXhwZWN0ZWQ8TWFjcm9Bc3NlbWJsZXJDb2RlUmVmPFdhc21FbnRyeQogICAgIEdQUlJlZyBz
Y3JhdGNoID0gR1BSSW5mbzo6bm9uUHJlc2VydmVkTm9uQXJndW1lbnRHUFIwOwogICAgIEdQUlJl
ZyBiYXNlTWVtb3J5ID0gcGlubmVkUmVncy5iYXNlTWVtb3J5UG9pbnRlcjsKICAgICBBU1NFUlQo
YmFzZU1lbW9yeSAhPSBzY3JhdGNoKTsKLSAgICBjb25zdCBhdXRvJiBzaXplUmVncyA9IHBpbm5l
ZFJlZ3Muc2l6ZVJlZ2lzdGVyczsKLSAgICBBU1NFUlQoc2l6ZVJlZ3Muc2l6ZSgpID49IDEpOwot
ICAgIEFTU0VSVChzaXplUmVnc1swXS5zaXplUmVnaXN0ZXIgIT0gYmFzZU1lbW9yeSk7Ci0gICAg
QVNTRVJUKHNpemVSZWdzWzBdLnNpemVSZWdpc3RlciAhPSBzY3JhdGNoKTsKLSAgICBHUFJSZWcg
c2l6ZVJlZ0FzU2NyYXRjaCA9IHNpemVSZWdzWzBdLnNpemVSZWdpc3RlcjsKKyAgICBBU1NFUlQo
cGlubmVkUmVncy5zaXplUmVnaXN0ZXIgIT0gYmFzZU1lbW9yeSk7CisgICAgQVNTRVJUKHBpbm5l
ZFJlZ3Muc2l6ZVJlZ2lzdGVyICE9IHNjcmF0Y2gpOworICAgIEdQUlJlZyBzaXplUmVnQXNTY3Jh
dGNoID0gcGlubmVkUmVncy5zaXplUmVnaXN0ZXI7CiAKICAgICAvLyBCMydzIGNhbGwgY29kZWdl
biBlbnN1cmVzIHRoYXQgdGhlIEpTQ2VsbCBpcyBhIFdlYkFzc2VtYmx5RnVuY3Rpb24uCiAgICAg
aml0LmxvYWRXYXNtQ29udGV4dEluc3RhbmNlKHNpemVSZWdBc1NjcmF0Y2gpOyAvLyBPbGQgSW5z
dGFuY2UqCkBAIC02NywxNCArNjUsOCBAQCBFeHBlY3RlZDxNYWNyb0Fzc2VtYmxlckNvZGVSZWY8
V2FzbUVudHJ5CiAKICAgICAvLyBGSVhNRSB0aGUgZm9sbG93aW5nIGNvZGUgYXNzdW1lcyB0aGF0
IGFsbCBXYXNtOjpJbnN0YW5jZSBoYXZlIHRoZSBzYW1lIHBpbm5lZCByZWdpc3RlcnMuIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjI5NTIKICAgICAvLyBTZXQgdXAg
dGhlIGNhbGxlZSdzIGJhc2VNZW1vcnkgcmVnaXN0ZXIgYXMgd2VsbCBhcyB0aGUgbWVtb3J5IHNp
emUgcmVnaXN0ZXJzLgotICAgIEFTU0VSVCghc2l6ZVJlZ3NbMF0uc2l6ZU9mZnNldCk7IC8vIFRo
ZSBmb2xsb3dpbmcgY29kZSBhc3N1bWVzIHdlIHN0YXJ0IGF0IDAsIGFuZCBjYWxjdWxhdGVzIHN1
YnNlcXVlbnQgc2l6ZSByZWdpc3RlcnMgcmVsYXRpdmUgdG8gMC4KLSAgICBqaXQubG9hZFB0cihK
SVQ6OkFkZHJlc3MoYmFzZU1lbW9yeSwgV2FzbTo6SW5zdGFuY2U6Om9mZnNldE9mQ2FjaGVkTWVt
b3J5U2l6ZSgpKSwgc2l6ZVJlZ3NbMF0uc2l6ZVJlZ2lzdGVyKTsgLy8gTWVtb3J5IHNpemUuCisg
ICAgaml0LmxvYWRQdHIoSklUOjpBZGRyZXNzKGJhc2VNZW1vcnksIFdhc206Okluc3RhbmNlOjpv
ZmZzZXRPZkNhY2hlZE1lbW9yeVNpemUoKSksIHBpbm5lZFJlZ3Muc2l6ZVJlZ2lzdGVyKTsgLy8g
TWVtb3J5IHNpemUuCiAgICAgaml0LmxvYWRQdHIoSklUOjpBZGRyZXNzKGJhc2VNZW1vcnksIFdh
c206Okluc3RhbmNlOjpvZmZzZXRPZkNhY2hlZE1lbW9yeSgpKSwgYmFzZU1lbW9yeSk7IC8vIFdh
c206Ok1lbW9yeTo6dm9pZCouCi0gICAgZm9yICh1bnNpZ25lZCBpID0gMTsgaSA8IHNpemVSZWdz
LnNpemUoKTsgKytpKSB7Ci0gICAgICAgIEFTU0VSVChzaXplUmVnc1tpXS5zaXplUmVnaXN0ZXIg
IT0gYmFzZU1lbW9yeSk7Ci0gICAgICAgIEFTU0VSVChzaXplUmVnc1tpXS5zaXplUmVnaXN0ZXIg
IT0gc2NyYXRjaCk7Ci0gICAgICAgIGppdC5hZGQ2NChKSVQ6OlRydXN0ZWRJbW0zMigtc2l6ZVJl
Z3NbaV0uc2l6ZU9mZnNldCksIHNpemVSZWdzWzBdLnNpemVSZWdpc3Rlciwgc2l6ZVJlZ3NbaV0u
c2l6ZVJlZ2lzdGVyKTsKLSAgICB9CiAKICAgICAvLyBUYWlsIGNhbGwgaW50byB0aGUgY2FsbGVl
IFdlYkFzc2VtYmx5IGZ1bmN0aW9uLgogICAgIGppdC5sb2FkUHRyKHNjcmF0Y2gsIHNjcmF0Y2gp
OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUNvbnRleHQuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQ29udGV4dC5oCShyZXZpc2lv
biAyNDM3ODApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQ29udGV4dC5oCSh3
b3JraW5nIGNvcHkpCkBAIC0zMiwxMiArMzIsMTkgQEAgbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFj
ZSBXYXNtIHsKIGNsYXNzIEluc3RhbmNlOwogCiBzdHJ1Y3QgQ29udGV4dCB7Ci0gICAgSW5zdGFu
Y2UqIGluc3RhbmNlIHsgbnVsbHB0ciB9OwotCiAgICAgSW5zdGFuY2UqIGxvYWQoKSBjb25zdDsK
ICAgICB2b2lkIHN0b3JlKEluc3RhbmNlKiwgdm9pZCogc29mdFN0YWNrTGltaXQpOwogCiAgICAg
c3RhdGljIGJvb2wgdXNlRmFzdFRMUygpOworCisgICAgSW5zdGFuY2UqKiBwb2ludGVyVG9JbnN0
YW5jZSgpCisgICAgeworICAgICAgICBBU1NFUlQoIXVzZUZhc3RUTFMoKSk7CisgICAgICAgIHJl
dHVybiAmaW5zdGFuY2U7CisgICAgfQorCitwcml2YXRlOgorICAgIEluc3RhbmNlKiBpbnN0YW5j
ZSB7IG51bGxwdHIgfTsKIH07CiAKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpXYXNtCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQ29udGV4dElubGluZXMuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQ29udGV4dElubGluZXMuaAkocmV2
aXNpb24gMjQzNzgwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUNvbnRleHRJ
bmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTU1LDEzICs1NSwxNSBAQCBpbmxpbmUgSW5zdGFu
Y2UqIENvbnRleHQ6OmxvYWQoKSBjb25zdAogCiBpbmxpbmUgdm9pZCBDb250ZXh0OjpzdG9yZShJ
bnN0YW5jZSogaW5zdCwgdm9pZCogc29mdFN0YWNrTGltaXQpCiB7CisgICAgaWYgKGluc3QpCisg
ICAgICAgIGluc3QtPnNldENhY2hlZFN0YWNrTGltaXQoc29mdFN0YWNrTGltaXQpOworCiAjaWYg
RU5BQkxFKEZBU1RfVExTX0pJVCkKICAgICBpZiAodXNlRmFzdFRMUygpKQogICAgICAgICBfcHRo
cmVhZF9zZXRzcGVjaWZpY19kaXJlY3QoV1RGX1dBU01fQ09OVEVYVF9LRVksIGJpdHdpc2VfY2Fz
dDx2b2lkKj4oaW5zdCkpOworICAgIGVsc2UKICNlbmRpZgotICAgIGluc3RhbmNlID0gaW5zdDsK
LSAgICBpZiAoaW5zdGFuY2UpCi0gICAgICAgIGluc3RhbmNlLT5zZXRDYWNoZWRTdGFja0xpbWl0
KHNvZnRTdGFja0xpbWl0KTsKKyAgICAgICAgaW5zdGFuY2UgPSBpbnN0OwogfQogCiB9IH0gLy8g
bmFtZXNwYWNlIEpTQzo6V2FzbQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2Fz
bU1lbW9yeUluZm9ybWF0aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvd2FzbS9XYXNtTWVtb3J5SW5mb3JtYXRpb24uY3BwCShyZXZpc2lvbiAyNDM3ODApCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTWVtb3J5SW5mb3JtYXRpb24uY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC00NCw2ICs0NCwxMSBAQCBzdGF0aWMgVmVjdG9yPEdQUlJlZz4gZ2V0UGlu
bmVkUmVnaXN0ZXJzCiAgICAgICAgIEdQUlJlZyBncHIgPSByZWcuZ3ByKCk7CiAgICAgICAgIGlm
ICghcmVtYWluaW5nUGlubmVkUmVnaXN0ZXJzIHx8IFJlZ2lzdGVyU2V0OjpzdGFja1JlZ2lzdGVy
cygpLmdldChyZWcpKQogICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBpZiAoUmVnaXN0ZXJT
ZXQ6OnJ1bnRpbWVUYWdSZWdpc3RlcnMoKS5nZXQocmVnKSkgeworICAgICAgICAgICAgLy8gU2lu
Y2Ugd2UgZG9uJ3QgbmVlZCB0bywgd2UgY3VycmVudGx5IGRvbid0IHBpY2sgZnJvbSB0aGUgdGFn
IHJlZ2lzdGVycyB0byBhbGxvdworICAgICAgICAgICAgLy8gSlMtPldhc20gc3R1YnMgdG8gZnJl
ZWx5IHVzZSB0aGVzZSByZWdpc3RlcnMuCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0K
ICAgICAgICAgLS1yZW1haW5pbmdQaW5uZWRSZWdpc3RlcnM7CiAgICAgICAgIHJlZ2lzdGVycy5h
cHBlbmQoZ3ByKTsKICAgICB9KTsKQEAgLTU1LDM1ICs2MCwyNSBAQCBjb25zdCBQaW5uZWRSZWdp
c3RlckluZm8mIFBpbm5lZFJlZ2lzdGVyCiAgICAgc3RhdGljIExhenlOZXZlckRlc3Ryb3llZDxQ
aW5uZWRSZWdpc3RlckluZm8+IHN0YXRpY1Bpbm5lZFJlZ2lzdGVySW5mbzsKICAgICBzdGF0aWMg
c3RkOjpvbmNlX2ZsYWcgc3RhdGljUGlubmVkUmVnaXN0ZXJJbmZvRmxhZzsKICAgICBzdGQ6OmNh
bGxfb25jZShzdGF0aWNQaW5uZWRSZWdpc3RlckluZm9GbGFnLCBbXSAoKSB7Ci0gICAgICAgIFZl
Y3RvcjxQaW5uZWRTaXplUmVnaXN0ZXJJbmZvPiBzaXplUmVnaXN0ZXJzOwotICAgICAgICBHUFJS
ZWcgYmFzZU1lbW9yeVBvaW50ZXIgPSBJbnZhbGlkR1BSUmVnOwotICAgICAgICBHUFJSZWcgd2Fz
bUNvbnRleHRJbnN0YW5jZVBvaW50ZXIgPSBJbnZhbGlkR1BSUmVnOwotCi0gICAgICAgIC8vIEZJ
WE1FOiBXZSBzaG91bGQgc3VwcG9ydCBtb3JlIHRoYW4gb25lIG1lbW9yeSBzaXplIHJlZ2lzdGVy
LCBhbmQgd2Ugc2hvdWxkIGFsbG93IGRpZmZlcmVudAotICAgICAgICAvLyAgICAgICAgV2ViQXNz
ZW1ibHkuSW5zdGFuY2UgdG8gaGF2ZSBkaWZmZXJlbnQgcGlucy4gUmlnaHQgbm93IHdlIHRha2Ug
YSB2ZWN0b3Igd2l0aCBvbmx5IG9uZSBlbnRyeS4KLSAgICAgICAgLy8gICAgICAgIElmIHdlIGhh
dmUgbW9yZSB0aGFuIG9uZSBzaXplIHJlZ2lzdGVyLCB3ZSBjYW4gaGF2ZSBvbmUgZm9yIGVhY2gg
bG9hZCBzaXplIGNsYXNzLgotICAgICAgICAvLyAgICAgICAgc2VlOiBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTYyOTUyCi0gICAgICAgIFZlY3Rvcjx1bnNpZ25lZD4g
cGlubmVkU2l6ZXMgPSB7IDAgfTsKLSAgICAgICAgdW5zaWduZWQgbnVtYmVyT2ZQaW5uZWRSZWdp
c3RlcnMgPSBwaW5uZWRTaXplcy5zaXplKCkgKyAxOworICAgICAgICB1bnNpZ25lZCBudW1iZXJP
ZlBpbm5lZFJlZ2lzdGVycyA9IDI7CiAgICAgICAgIGlmICghQ29udGV4dDo6dXNlRmFzdFRMUygp
KQogICAgICAgICAgICAgKytudW1iZXJPZlBpbm5lZFJlZ2lzdGVyczsKICAgICAgICAgVmVjdG9y
PEdQUlJlZz4gcGlubmVkUmVncyA9IGdldFBpbm5lZFJlZ2lzdGVycyhudW1iZXJPZlBpbm5lZFJl
Z2lzdGVycyk7CiAKLSAgICAgICAgYmFzZU1lbW9yeVBvaW50ZXIgPSBwaW5uZWRSZWdzLnRha2VM
YXN0KCk7CisgICAgICAgIEdQUlJlZyBiYXNlTWVtb3J5UG9pbnRlciA9IHBpbm5lZFJlZ3MudGFr
ZUxhc3QoKTsKKyAgICAgICAgR1BSUmVnIHNpemVSZWdpc3RlciA9IHBpbm5lZFJlZ3MudGFrZUxh
c3QoKTsKKyAgICAgICAgR1BSUmVnIHdhc21Db250ZXh0SW5zdGFuY2VQb2ludGVyID0gSW52YWxp
ZEdQUlJlZzsKICAgICAgICAgaWYgKCFDb250ZXh0Ojp1c2VGYXN0VExTKCkpCiAgICAgICAgICAg
ICB3YXNtQ29udGV4dEluc3RhbmNlUG9pbnRlciA9IHBpbm5lZFJlZ3MudGFrZUxhc3QoKTsKIAot
ICAgICAgICBBU1NFUlQocGlubmVkU2l6ZXMuc2l6ZSgpID09IHBpbm5lZFJlZ3Muc2l6ZSgpKTsK
LSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHBpbm5lZFNpemVzLnNpemUoKTsgKytp
KQotICAgICAgICAgICAgc2l6ZVJlZ2lzdGVycy5hcHBlbmQoeyBwaW5uZWRSZWdzW2ldLCBwaW5u
ZWRTaXplc1tpXSB9KTsKLSAgICAgICAgc3RhdGljUGlubmVkUmVnaXN0ZXJJbmZvLmNvbnN0cnVj
dChXVEZNb3ZlKHNpemVSZWdpc3RlcnMpLCBiYXNlTWVtb3J5UG9pbnRlciwgd2FzbUNvbnRleHRJ
bnN0YW5jZVBvaW50ZXIpOworICAgICAgICBzdGF0aWNQaW5uZWRSZWdpc3RlckluZm8uY29uc3Ry
dWN0KHNpemVSZWdpc3RlciwgYmFzZU1lbW9yeVBvaW50ZXIsIHdhc21Db250ZXh0SW5zdGFuY2VQ
b2ludGVyKTsKICAgICB9KTsKIAogICAgIHJldHVybiBzdGF0aWNQaW5uZWRSZWdpc3RlckluZm8u
Z2V0KCk7CiB9CiAKLVBpbm5lZFJlZ2lzdGVySW5mbzo6UGlubmVkUmVnaXN0ZXJJbmZvKFZlY3Rv
cjxQaW5uZWRTaXplUmVnaXN0ZXJJbmZvPiYmIHNpemVSZWdpc3RlcnMsIEdQUlJlZyBiYXNlTWVt
b3J5UG9pbnRlciwgR1BSUmVnIHdhc21Db250ZXh0SW5zdGFuY2VQb2ludGVyKQotICAgIDogc2l6
ZVJlZ2lzdGVycyhXVEZNb3ZlKHNpemVSZWdpc3RlcnMpKQorUGlubmVkUmVnaXN0ZXJJbmZvOjpQ
aW5uZWRSZWdpc3RlckluZm8oR1BSUmVnIHNpemVSZWdpc3RlciwgR1BSUmVnIGJhc2VNZW1vcnlQ
b2ludGVyLCBHUFJSZWcgd2FzbUNvbnRleHRJbnN0YW5jZVBvaW50ZXIpCisgICAgOiBzaXplUmVn
aXN0ZXIoc2l6ZVJlZ2lzdGVyKQogICAgICwgYmFzZU1lbW9yeVBvaW50ZXIoYmFzZU1lbW9yeVBv
aW50ZXIpCiAgICAgLCB3YXNtQ29udGV4dEluc3RhbmNlUG9pbnRlcih3YXNtQ29udGV4dEluc3Rh
bmNlUG9pbnRlcikKIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21NZW1v
cnlJbmZvcm1hdGlvbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNt
L1dhc21NZW1vcnlJbmZvcm1hdGlvbi5oCShyZXZpc2lvbiAyNDM3ODApCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvd2FzbS9XYXNtTWVtb3J5SW5mb3JtYXRpb24uaAkod29ya2luZyBjb3B5KQpA
QCAtNDUsNyArNDUsNyBAQCBzdHJ1Y3QgUGlubmVkU2l6ZVJlZ2lzdGVySW5mbyB7CiAKIGNsYXNz
IFBpbm5lZFJlZ2lzdGVySW5mbyB7CiBwdWJsaWM6Ci0gICAgUGlubmVkUmVnaXN0ZXJJbmZvKFZl
Y3RvcjxQaW5uZWRTaXplUmVnaXN0ZXJJbmZvPiYmLCBHUFJSZWcsIEdQUlJlZyk7CisgICAgUGlu
bmVkUmVnaXN0ZXJJbmZvKEdQUlJlZywgR1BSUmVnLCBHUFJSZWcpOwogCiAgICAgc3RhdGljIGNv
bnN0IFBpbm5lZFJlZ2lzdGVySW5mbyYgZ2V0KCk7CiAKQEAgLTU1LDE0ICs1NSwxMiBAQCBwdWJs
aWM6CiAgICAgICAgIHJlc3VsdC5zZXQoYmFzZU1lbW9yeVBvaW50ZXIpOwogICAgICAgICBpZiAo
d2FzbUNvbnRleHRJbnN0YW5jZVBvaW50ZXIgIT0gSW52YWxpZEdQUlJlZykKICAgICAgICAgICAg
IHJlc3VsdC5zZXQod2FzbUNvbnRleHRJbnN0YW5jZVBvaW50ZXIpOwotICAgICAgICBpZiAobW9k
ZSAhPSBNZW1vcnlNb2RlOjpTaWduYWxpbmcpIHsKLSAgICAgICAgICAgIGZvciAoY29uc3QgYXV0
byYgaW5mbyA6IHNpemVSZWdpc3RlcnMpCi0gICAgICAgICAgICAgICAgcmVzdWx0LnNldChpbmZv
LnNpemVSZWdpc3Rlcik7Ci0gICAgICAgIH0KKyAgICAgICAgaWYgKG1vZGUgIT0gTWVtb3J5TW9k
ZTo6U2lnbmFsaW5nKQorICAgICAgICAgICAgcmVzdWx0LnNldChzaXplUmVnaXN0ZXIpOwogICAg
ICAgICByZXR1cm4gcmVzdWx0OwogICAgIH0KIAotICAgIFZlY3RvcjxQaW5uZWRTaXplUmVnaXN0
ZXJJbmZvPiBzaXplUmVnaXN0ZXJzOworICAgIEdQUlJlZyBzaXplUmVnaXN0ZXI7CiAgICAgR1BS
UmVnIGJhc2VNZW1vcnlQb2ludGVyOwogICAgIEdQUlJlZyB3YXNtQ29udGV4dEluc3RhbmNlUG9p
bnRlcjsKIH07CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtT01HUGxhbi5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU9NR1BsYW4u
Y3BwCShyZXZpc2lvbiAyNDM3ODApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNt
T01HUGxhbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEzOCw3ICsxMzgsNyBAQCB2b2lkIE9NR1Bs
YW46OndvcmsoQ29tcGlsYXRpb25FZmZvcnQpCiAgICAgewogICAgICAgICBMb2NrSG9sZGVyIGhv
bGRlcihtX2NvZGVCbG9jay0+bV9sb2NrKTsKIAotICAgICAgICBhdXRvIHJlcGF0Y2hDYWxscyA9
IFsmXSAoY29uc3QgVmVjdG9yPFVubGlua2VkV2FzbVRvV2FzbUNhbGw+JiAgY2FsbHNpdGVzKSB7
CisgICAgICAgIGF1dG8gcmVwYXRjaENhbGxzID0gWyZdIChjb25zdCBWZWN0b3I8VW5saW5rZWRX
YXNtVG9XYXNtQ2FsbD4mIGNhbGxzaXRlcykgewogICAgICAgICAgICAgZm9yIChhdXRvJiBjYWxs
IDogY2FsbHNpdGVzKSB7CiAgICAgICAgICAgICAgICAgZGF0YUxvZ0xuSWYoV2FzbU9NR1BsYW5J
bnRlcm5hbDo6dmVyYm9zZSwgIkNvbnNpZGVyaW5nIHJlcGF0Y2hpbmcgY2FsbCBhdDogIiwgUmF3
UG9pbnRlcihjYWxsLmNhbGxMb2NhdGlvbi5kYXRhTG9jYXRpb24oKSksICIgdGhhdCB0YXJnZXRz
ICIsIGNhbGwuZnVuY3Rpb25JbmRleFNwYWNlKTsKICAgICAgICAgICAgICAgICBpZiAoY2FsbC5m
dW5jdGlvbkluZGV4U3BhY2UgPT0gZnVuY3Rpb25JbmRleFNwYWNlKSB7CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1RvV2FzbS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNUb1dhc20uY3BwCShyZXZpc2lvbiAyNDM3ODApCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1RvV2FzbS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTIxMywxNCArMjEzLDggQEAgc3RkOjp1bmlxdWVfcHRyPEludGVybmFsRnVuY3Rpb24+
IGNyZWF0ZQogICAgICAgICAgICAgaml0LmxvYWRXYXNtQ29udGV4dEluc3RhbmNlKGJhc2VNZW1v
cnkpOwogCiAgICAgICAgIEdQUlJlZyBjdXJyZW50SW5zdGFuY2VHUFIgPSBDb250ZXh0Ojp1c2VG
YXN0VExTKCkgPyBiYXNlTWVtb3J5IDogd2FzbUNvbnRleHRJbnN0YW5jZUdQUjsKLSAgICAgICAg
aWYgKG1vZGUgIT0gTWVtb3J5TW9kZTo6U2lnbmFsaW5nKSB7Ci0gICAgICAgICAgICBjb25zdCBh
dXRvJiBzaXplUmVncyA9IHBpbm5lZFJlZ3Muc2l6ZVJlZ2lzdGVyczsKLSAgICAgICAgICAgIEFT
U0VSVChzaXplUmVncy5zaXplKCkgPj0gMSk7Ci0gICAgICAgICAgICBBU1NFUlQoIXNpemVSZWdz
WzBdLnNpemVPZmZzZXQpOyAvLyBUaGUgZm9sbG93aW5nIGNvZGUgYXNzdW1lcyB3ZSBzdGFydCBh
dCAwLCBhbmQgY2FsY3VsYXRlcyBzdWJzZXF1ZW50IHNpemUgcmVnaXN0ZXJzIHJlbGF0aXZlIHRv
IDAuCi0gICAgICAgICAgICBqaXQubG9hZFB0cihDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoY3VycmVu
dEluc3RhbmNlR1BSLCBXYXNtOjpJbnN0YW5jZTo6b2Zmc2V0T2ZDYWNoZWRNZW1vcnlTaXplKCkp
LCBzaXplUmVnc1swXS5zaXplUmVnaXN0ZXIpOwotICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBp
ID0gMTsgaSA8IHNpemVSZWdzLnNpemUoKTsgKytpKQotICAgICAgICAgICAgICAgIGppdC5hZGQ2
NChDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMigtc2l6ZVJlZ3NbaV0uc2l6ZU9mZnNldCksIHNp
emVSZWdzWzBdLnNpemVSZWdpc3Rlciwgc2l6ZVJlZ3NbaV0uc2l6ZVJlZ2lzdGVyKTsKLSAgICAg
ICAgfQorICAgICAgICBpZiAobW9kZSAhPSBNZW1vcnlNb2RlOjpTaWduYWxpbmcpCisgICAgICAg
ICAgICBqaXQubG9hZFB0cihDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoY3VycmVudEluc3RhbmNlR1BS
LCBXYXNtOjpJbnN0YW5jZTo6b2Zmc2V0T2ZDYWNoZWRNZW1vcnlTaXplKCkpLCBwaW5uZWRSZWdz
LnNpemVSZWdpc3Rlcik7CiAKICAgICAgICAgaml0LmxvYWRQdHIoQ0NhbGxIZWxwZXJzOjpBZGRy
ZXNzKGN1cnJlbnRJbnN0YW5jZUdQUiwgV2FzbTo6SW5zdGFuY2U6Om9mZnNldE9mQ2FjaGVkTWVt
b3J5KCkpLCBiYXNlTWVtb3J5KTsKICAgICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
d2FzbS9qcy9KU1RvV2FzbUlDQ2FsbGVlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvd2FzbS9qcy9KU1RvV2FzbUlDQ2FsbGVlLmNwcAkobm9uZXhpc3RlbnQpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1RvV2FzbUlDQ2FsbGVlLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMCwwICsxLDYyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE5IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
CisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkpTVG9XYXNtSUND
YWxsZWUuaCIKKworI2lmIEVOQUJMRShXRUJBU1NFTUJMWSkKKworI2luY2x1ZGUgIldlYkFzc2Vt
Ymx5RnVuY3Rpb24uaCIKKworbmFtZXNwYWNlIEpTQyB7CisKK2NvbnN0IENsYXNzSW5mbyBKU1Rv
V2FzbUlDQ2FsbGVlOjpzX2luZm8gPSB7ICJKU1RvV2FzbUlDQ2FsbGVlIiwgJkJhc2U6OnNfaW5m
bywgbnVsbHB0ciwgbnVsbHB0ciwgQ1JFQVRFX01FVEhPRF9UQUJMRShKU1RvV2FzbUlDQ2FsbGVl
KSB9OworCitKU1RvV2FzbUlDQ2FsbGVlKiBKU1RvV2FzbUlDQ2FsbGVlOjpjcmVhdGUoVk0mIHZt
LCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBXZWJBc3NlbWJseUZ1bmN0aW9uKiBmdW5j
dGlvbikKK3sKKyAgICBhdXRvKiBzdHJ1Y3R1cmUgPSBnbG9iYWxPYmplY3QtPmpzVG9XYXNtSUND
YWxsZWVTdHJ1Y3R1cmUoKTsKKyAgICBKU1RvV2FzbUlDQ2FsbGVlKiByZXN1bHQgPSBuZXcgKE5v
dE51bGwsIGFsbG9jYXRlQ2VsbDxKU1RvV2FzbUlDQ2FsbGVlPih2bS5oZWFwKSkgSlNUb1dhc21J
Q0NhbGxlZSh2bSwgZ2xvYmFsT2JqZWN0LCBzdHJ1Y3R1cmUpOworICAgIHJlc3VsdC0+ZmluaXNo
Q3JlYXRpb24odm0pOworICAgIHJlc3VsdC0+bV9mdW5jdGlvbi5zZXQodm0sIHJlc3VsdCwgZnVu
Y3Rpb24pOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK1N0cnVjdHVyZSogSlNUb1dhc21JQ0Nh
bGxlZTo6Y3JlYXRlU3RydWN0dXJlKFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVj
dCwgSlNWYWx1ZSBwcm90b3R5cGUpCit7CisgICAgcmV0dXJuIFN0cnVjdHVyZTo6Y3JlYXRlKHZt
LCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgVHlwZUluZm8oSlNDYWxsZWVUeXBlLCBTdHJ1Y3R1
cmVGbGFncyksIGluZm8oKSk7Cit9CisKK3ZvaWQgSlNUb1dhc21JQ0NhbGxlZTo6dmlzaXRDaGls
ZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQoreworICAgIEpTVG9XYXNt
SUNDYWxsZWUqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNUb1dhc21JQ0NhbGxlZSo+KGNlbGwpOwor
ICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKKworICAg
IEJhc2U6OnZpc2l0Q2hpbGRyZW4odGhpc09iamVjdCwgdmlzaXRvcik7CisgICAgdmlzaXRvci5h
cHBlbmQodGhpc09iamVjdC0+bV9mdW5jdGlvbik7Cit9CisKK30gLy8gbmFtZXNwYWNlIEpTQwor
CisjZW5kaWYgLy8gRU5BQkxFKFdFQkFTU0VNQkxZKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL3dhc20vanMvSlNUb1dhc21JQ0NhbGxlZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS93YXNtL2pzL0pTVG9XYXNtSUNDYWxsZWUuaAkobm9uZXhpc3RlbnQpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1RvV2FzbUlDQ2FsbGVlLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTAsMCArMSw1NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxOSBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQor
ICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiSlNDYWxsZWUuaCIKKworbmFt
ZXNwYWNlIEpTQyB7CisKKyNpZiBFTkFCTEUoV0VCQVNTRU1CTFkpCisKK2NsYXNzIFdlYkFzc2Vt
Ymx5RnVuY3Rpb247CisKK2NsYXNzIEpTVG9XYXNtSUNDYWxsZWUgOiBwdWJsaWMgSlNDYWxsZWUg
eworICAgIHVzaW5nIEJhc2UgPSBKU0NhbGxlZTsKK3B1YmxpYzoKKyAgICBERUNMQVJFX0lORk87
CisKKyAgICBzdGF0aWMgSlNUb1dhc21JQ0NhbGxlZSogY3JlYXRlKFZNJiwgSlNHbG9iYWxPYmpl
Y3QqLCBXZWJBc3NlbWJseUZ1bmN0aW9uKik7CisgICAgc3RhdGljIFN0cnVjdHVyZSogY3JlYXRl
U3RydWN0dXJlKFZNJiwgSlNHbG9iYWxPYmplY3QqLCBKU1ZhbHVlKTsKKworICAgIFdlYkFzc2Vt
Ymx5RnVuY3Rpb24qIGZ1bmN0aW9uKCkgeyByZXR1cm4gbV9mdW5jdGlvbi5nZXQoKTsgfQorCitw
cml2YXRlOgorICAgIEpTVG9XYXNtSUNDYWxsZWUoVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xv
YmFsT2JqZWN0LCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKKyAgICAgICAgOiBCYXNlKHZtLCBnbG9i
YWxPYmplY3QsIHN0cnVjdHVyZSkKKyAgICB7IH0KKyAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxk
cmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CisKKyAgICBXcml0ZUJhcnJpZXI8V2ViQXNzZW1i
bHlGdW5jdGlvbj4gbV9mdW5jdGlvbjsKK307CisKKyNlbmRpZiAvLyBFTkFCTEUoV0VCQVNTRU1C
TFkpCisKK30gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3dh
c20vanMvV2ViQXNzZW1ibHlGdW5jdGlvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlGdW5jdGlvbi5jcHAJKHJldmlzaW9uIDI0Mzc4
MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5RnVuY3Rpb24u
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNiwxMiArMzYsMTYgQEAKICNpbmNsdWRlICJKU1dlYkFz
c2VtYmx5TWVtb3J5LmgiCiAjaW5jbHVkZSAiSlNXZWJBc3NlbWJseVJ1bnRpbWVFcnJvci5oIgog
I2luY2x1ZGUgIkxMSW50VGh1bmtzLmgiCisjaW5jbHVkZSAiTGlua0J1ZmZlci5oIgogI2luY2x1
ZGUgIlByb3RvQ2FsbEZyYW1lLmgiCiAjaW5jbHVkZSAiVk0uaCIKICNpbmNsdWRlICJXYXNtQ2Fs
bGVlLmgiCisjaW5jbHVkZSAiV2FzbUNhbGxpbmdDb252ZW50aW9uLmgiCiAjaW5jbHVkZSAiV2Fz
bUNvbnRleHRJbmxpbmVzLmgiCiAjaW5jbHVkZSAiV2FzbUZvcm1hdC5oIgogI2luY2x1ZGUgIldh
c21NZW1vcnkuaCIKKyNpbmNsdWRlICJXYXNtTWVtb3J5SW5mb3JtYXRpb24uaCIKKyNpbmNsdWRl
ICJXYXNtTW9kdWxlSW5mb3JtYXRpb24uaCIKICNpbmNsdWRlICJXYXNtU2lnbmF0dXJlSW5saW5l
cy5oIgogI2luY2x1ZGUgPHd0Zi9GYXN0VExTLmg+CiAjaW5jbHVkZSA8d3RmL1N0YWNrUG9pbnRl
ci5oPgpAQCAtMTQ4LDYgKzE1MiwzMzUgQEAgc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NU
X0NBTEwgY2FsbAogICAgIHJldHVybiByYXdSZXN1bHQ7CiB9CiAKK2Jvb2wgV2ViQXNzZW1ibHlG
dW5jdGlvbjo6dXNlVGFnUmVnaXN0ZXJzKCkgY29uc3QKK3sKKyAgICBjb25zdCBhdXRvJiBzaWdu
YXR1cmUgPSBXYXNtOjpTaWduYXR1cmVJbmZvcm1hdGlvbjo6Z2V0KHNpZ25hdHVyZUluZGV4KCkp
OworICAgIHJldHVybiBzaWduYXR1cmUuYXJndW1lbnRDb3VudCgpIHx8IHNpZ25hdHVyZS5yZXR1
cm5UeXBlKCkgIT0gV2FzbTo6Vm9pZDsKK30KKworUmVnaXN0ZXJTZXQgV2ViQXNzZW1ibHlGdW5j
dGlvbjo6Y2FsbGVlU2F2ZXMoKSBjb25zdAoreworICAgIFJlZ2lzdGVyU2V0IHRvU2F2ZSA9IFdh
c206OlBpbm5lZFJlZ2lzdGVySW5mbzo6Z2V0KCkudG9TYXZlKGluc3RhbmNlKCktPm1lbW9yeU1v
ZGUoKSk7CisgICAgaWYgKHVzZVRhZ1JlZ2lzdGVycygpKSB7CisgICAgICAgIFJlZ2lzdGVyU2V0
IHRhZ1JlZ2lzdGVycyA9IFJlZ2lzdGVyU2V0OjpydW50aW1lVGFnUmVnaXN0ZXJzKCk7CisgICAg
ICAgIC8vIFdlIHJlbHkgb24gdGhlc2UgYmVpbmcgZGlzam9pbnQgc2V0cy4KKyNpZiAhQVNTRVJU
X0RJU0FCTEVECisgICAgICAgIGZvciAoUmVnIHJlZyA6IHRhZ1JlZ2lzdGVycykKKyAgICAgICAg
ICAgIEFTU0VSVCghdG9TYXZlLmNvbnRhaW5zKHJlZykpOworI2VuZGlmCisgICAgICAgIHRvU2F2
ZS5tZXJnZSh0YWdSZWdpc3RlcnMpOworICAgIH0KKyAgICByZXR1cm4gdG9TYXZlOworfQorCitS
ZWdpc3RlckF0T2Zmc2V0TGlzdCBXZWJBc3NlbWJseUZ1bmN0aW9uOjp1c2VkQ2FsbGVlU2F2ZVJl
Z2lzdGVycygpIGNvbnN0Cit7CisgICAgcmV0dXJuIFJlZ2lzdGVyQXRPZmZzZXRMaXN0IHsgY2Fs
bGVlU2F2ZXMoKSwgUmVnaXN0ZXJBdE9mZnNldExpc3Q6Ok9mZnNldEJhc2VUeXBlOjpGcmFtZVBv
aW50ZXJCYXNlZCB9OworfQorCitwdHJkaWZmX3QgV2ViQXNzZW1ibHlGdW5jdGlvbjo6cHJldmlv
dXNJbnN0YW5jZU9mZnNldCgpIGNvbnN0Cit7CisgICAgcHRyZGlmZl90IHJlc3VsdCA9IGNhbGxl
ZVNhdmVzKCkubnVtYmVyT2ZTZXRSZWdpc3RlcnMoKSAqIHNpemVvZihDUFVSZWdpc3Rlcik7Cisg
ICAgcmVzdWx0ID0gLXJlc3VsdCAtIHNpemVvZihDUFVSZWdpc3Rlcik7CisjaWYgIUFTU0VSVF9E
SVNBQkxFRAorICAgIHB0cmRpZmZfdCBtaW5PZmZzZXQgPSAxOworICAgIGZvciAoY29uc3QgUmVn
aXN0ZXJBdE9mZnNldCYgcmVnQXRPZmZzZXQgOiB1c2VkQ2FsbGVlU2F2ZVJlZ2lzdGVycygpKSB7
CisgICAgICAgIHB0cmRpZmZfdCBvZmZzZXQgPSByZWdBdE9mZnNldC5vZmZzZXQoKTsKKyAgICAg
ICAgQVNTRVJUKG9mZnNldCA8IDApOworICAgICAgICBtaW5PZmZzZXQgPSBzdGQ6Om1pbihvZmZz
ZXQsIG1pbk9mZnNldCk7CisgICAgfQorICAgIEFTU0VSVChtaW5PZmZzZXQgLSBzdGF0aWNfY2Fz
dDxwdHJkaWZmX3Q+KHNpemVvZihDUFVSZWdpc3RlcikpID09IHJlc3VsdCk7CisjZW5kaWYKKyAg
ICByZXR1cm4gcmVzdWx0OworfQorCitXYXNtOjpJbnN0YW5jZSogV2ViQXNzZW1ibHlGdW5jdGlv
bjo6cHJldmlvdXNJbnN0YW5jZShDYWxsRnJhbWUqIGNhbGxGcmFtZSkKK3sKKyAgICBBU1NFUlQo
Y2FsbEZyYW1lLT5jYWxsZWUoKS5yYXdQdHIoKSA9PSBtX2pzVG9XYXNtSUNDYWxsZWUuZ2V0KCkp
OworICAgIGF1dG8qIHJlc3VsdCA9ICpiaXR3aXNlX2Nhc3Q8V2FzbTo6SW5zdGFuY2UqKj4oYml0
d2lzZV9jYXN0PGNoYXIqPihjYWxsRnJhbWUpICsgcHJldmlvdXNJbnN0YW5jZU9mZnNldCgpKTsK
KyAgICByZXR1cm4gcmVzdWx0OworfQorCitNYWNyb0Fzc2VtYmxlckNvZGVQdHI8SlNFbnRyeVB0
clRhZz4gV2ViQXNzZW1ibHlGdW5jdGlvbjo6anNDYWxsRW50cnlwb2ludFNsb3coKQoreworICAg
IFZNJiB2bSA9ICp0aGlzLT52bSgpOworICAgIENDYWxsSGVscGVycyBqaXQ7CisKKyAgICBjb25z
dCBhdXRvJiBzaWduYXR1cmUgPSBXYXNtOjpTaWduYXR1cmVJbmZvcm1hdGlvbjo6Z2V0KHNpZ25h
dHVyZUluZGV4KCkpOworICAgIGNvbnN0IGF1dG8mIHBpbm5lZFJlZ3MgPSBXYXNtOjpQaW5uZWRS
ZWdpc3RlckluZm86OmdldCgpOworICAgIFJlZ2lzdGVyQXRPZmZzZXRMaXN0IHJlZ2lzdGVyc1Rv
U3BpbGwgPSB1c2VkQ2FsbGVlU2F2ZVJlZ2lzdGVycygpOworCisgICAgYXV0byYgbW9kdWxlSW5m
b3JtYXRpb24gPSBpbnN0YW5jZSgpLT5pbnN0YW5jZSgpLm1vZHVsZSgpLm1vZHVsZUluZm9ybWF0
aW9uKCk7CisKKyAgICB1bnNpZ25lZCB0b3RhbEZyYW1lU2l6ZSA9IHJlZ2lzdGVyc1RvU3BpbGwu
c2l6ZSgpICogc2l6ZW9mKENQVVJlZ2lzdGVyKTsKKyAgICB0b3RhbEZyYW1lU2l6ZSArPSBzaXpl
b2YoQ1BVUmVnaXN0ZXIpOyAvLyBTbG90IGZvciB0aGUgVk0ncyBwcmV2aW91cyB3YXNtIGluc3Rh
bmNlLgorICAgIHRvdGFsRnJhbWVTaXplICs9IFdhc206Oldhc21DYWxsaW5nQ29udmVudGlvbjo6
aGVhZGVyU2l6ZUluQnl0ZXMoKTsKKyAgICB0b3RhbEZyYW1lU2l6ZSAtPSBzaXplb2YoQ2FsbGVy
RnJhbWVBbmRQQyk7CisKKyAgICB1bnNpZ25lZCBudW1HUFJzID0gMDsKKyAgICB1bnNpZ25lZCBu
dW1GUFJzID0gMDsKKyAgICBib29sIGFyZ3VtZW50c0luY2x1ZGVJNjQgPSBmYWxzZTsKKyAgICBm
b3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc2lnbmF0dXJlLmFyZ3VtZW50Q291bnQoKTsgaSsrKSB7
CisgICAgICAgIHN3aXRjaCAoc2lnbmF0dXJlLmFyZ3VtZW50KGkpKSB7CisgICAgICAgIGNhc2Ug
V2FzbTo6STY0OgorICAgICAgICAgICAgYXJndW1lbnRzSW5jbHVkZUk2NCA9IHRydWU7CisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBXYXNtOjpJMzI6CisgICAgICAgICAgICBpZiAo
bnVtR1BScyA+PSBXYXNtOjp3YXNtQ2FsbGluZ0NvbnZlbnRpb24oKS5tX2dwckFyZ3Muc2l6ZSgp
KQorICAgICAgICAgICAgICAgIHRvdGFsRnJhbWVTaXplICs9IHNpemVvZihDUFVSZWdpc3Rlcik7
CisgICAgICAgICAgICArK251bUdQUnM7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2Fz
ZSBXYXNtOjpGMzI6CisgICAgICAgIGNhc2UgV2FzbTo6RjY0OgorICAgICAgICAgICAgaWYgKG51
bUZQUnMgPj0gV2FzbTo6d2FzbUNhbGxpbmdDb252ZW50aW9uKCkubV9mcHJBcmdzLnNpemUoKSkK
KyAgICAgICAgICAgICAgICB0b3RhbEZyYW1lU2l6ZSArPSBzaXplb2YoQ1BVUmVnaXN0ZXIpOwor
ICAgICAgICAgICAgKytudW1GUFJzOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1
bHQ6CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICB9
CisgICAgfQorCisgICAgaWYgKGFyZ3VtZW50c0luY2x1ZGVJNjQpCisgICAgICAgIHJldHVybiBu
dWxscHRyOworCisgICAgdG90YWxGcmFtZVNpemUgPSBXVEY6OnJvdW5kVXBUb011bHRpcGxlT2Yo
c3RhY2tBbGlnbm1lbnRCeXRlcygpLCB0b3RhbEZyYW1lU2l6ZSk7CisKKyAgICBqaXQuZW1pdEZ1
bmN0aW9uUHJvbG9ndWUoKTsKKyAgICBqaXQuc3ViUHRyKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVk
SW1tMzIodG90YWxGcmFtZVNpemUpLCBNYWNyb0Fzc2VtYmxlcjo6c3RhY2tQb2ludGVyUmVnaXN0
ZXIpOworICAgIGppdC5zdG9yZTY0KENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTY0KDApLCBDQ2Fs
bEhlbHBlcnM6OmFkZHJlc3NGb3IoQ2FsbEZyYW1lU2xvdDo6Y29kZUJsb2NrKSk7CisKKyAgICBm
b3IgKGNvbnN0IFJlZ2lzdGVyQXRPZmZzZXQmIHJlZ0F0T2Zmc2V0IDogcmVnaXN0ZXJzVG9TcGls
bCkgeworICAgICAgICBHUFJSZWcgcmVnID0gcmVnQXRPZmZzZXQucmVnKCkuZ3ByKCk7CisgICAg
ICAgIHB0cmRpZmZfdCBvZmZzZXQgPSByZWdBdE9mZnNldC5vZmZzZXQoKTsKKyAgICAgICAgaml0
LnN0b3JlUHRyKHJlZywgQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKEdQUkluZm86OmNhbGxGcmFtZVJl
Z2lzdGVyLCBvZmZzZXQpKTsKKyAgICB9CisKKyAgICBHUFJSZWcgc2NyYXRjaEdQUiA9IFdhc206
Ondhc21DYWxsaW5nQ29udmVudGlvbkFpcigpLnByb2xvZ3VlU2NyYXRjaCgxKTsKKyAgICBHUFJS
ZWcgc2NyYXRjaDJHUFIgPSBXYXNtOjp3YXNtQ2FsbGluZ0NvbnZlbnRpb25BaXIoKS5wcm9sb2d1
ZVNjcmF0Y2goMCk7CisgICAgaml0LmxvYWRQdHIodm0uYWRkcmVzc09mU29mdFN0YWNrTGltaXQo
KSwgc2NyYXRjaDJHUFIpOworCisgICAgQ0NhbGxIZWxwZXJzOjpKdW1wTGlzdCBzbG93UGF0aDsK
KyAgICBzbG93UGF0aC5hcHBlbmQoaml0LmJyYW5jaFB0cihDQ2FsbEhlbHBlcnM6OkFib3ZlLCBN
YWNyb0Fzc2VtYmxlcjo6c3RhY2tQb2ludGVyUmVnaXN0ZXIsIEdQUkluZm86OmNhbGxGcmFtZVJl
Z2lzdGVyKSk7CisgICAgc2xvd1BhdGguYXBwZW5kKGppdC5icmFuY2hQdHIoQ0NhbGxIZWxwZXJz
OjpCZWxvdywgTWFjcm9Bc3NlbWJsZXI6OnN0YWNrUG9pbnRlclJlZ2lzdGVyLCBzY3JhdGNoMkdQ
UikpOworCisgICAgLy8gRW5zdXJlOgorICAgIC8vIGFyZ0NvdW50UGx1c1RoaXMgLSAxID49IHNp
Z25hdHVyZS5hcmd1bWVudENvdW50KCkKKyAgICAvLyBhcmdDb3VudFBsdXNUaGlzID49IHNpZ25h
dHVyZS5hcmd1bWVudENvdW50KCkgKyAxCisgICAgLy8gRklYTUU6IFdlIHNob3VsZCBoYW5kbGUg
bWlzbWF0Y2hlZCBhcml0eQorICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0xOTY1NjQKKyAgICBzbG93UGF0aC5hcHBlbmQoaml0LmJyYW5jaDMyKENDYWxsSGVs
cGVyczo6QmVsb3csCisgICAgICAgIENDYWxsSGVscGVyczo6cGF5bG9hZEZvcihDYWxsRnJhbWVT
bG90Ojphcmd1bWVudENvdW50KSwgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoc2lnbmF0dXJl
LmFyZ3VtZW50Q291bnQoKSArIDEpKSk7CisKKyAgICBpZiAodXNlVGFnUmVnaXN0ZXJzKCkpCisg
ICAgICAgIGppdC5lbWl0TWF0ZXJpYWxpemVUYWdDaGVja1JlZ2lzdGVycygpOworCisgICAgLy8g
Rmlyc3Qgd2UgZG8gc3RhY2sgc2xvdHMgZm9yIEZQUnMgc28gd2UgY2FuIHVzZSBGUFIgYXJndW1l
bnQgcmVnaXN0ZXJzIGFzIHNjcmF0Y2guCisgICAgLy8gQWZ0ZXIgdGhhdCwgd2UgaGFuZGxlIEZQ
UiBhcmd1bWVudCByZWdpc3RlcnMuCisgICAgLy8gV2UgYWxzbyBoYW5kbGUgYWxsIEdQUiB0eXBl
cyBoZXJlIGFzIHdlIGhhdmUgR1BSIHNjcmF0Y2ggcmVnaXN0ZXJzLgorICAgIHsKKyAgICAgICAg
Q0NhbGxIZWxwZXJzOjpBZGRyZXNzIGNhbGxlZUZyYW1lID0gQ0NhbGxIZWxwZXJzOjpBZGRyZXNz
KE1hY3JvQXNzZW1ibGVyOjpzdGFja1BvaW50ZXJSZWdpc3RlciwgLXN0YXRpY19jYXN0PHB0cmRp
ZmZfdD4oc2l6ZW9mKENhbGxlckZyYW1lQW5kUEMpKSk7CisgICAgICAgIG51bUdQUnMgPSAwOwor
ICAgICAgICBudW1GUFJzID0gMDsKKyAgICAgICAgRlBSUmVnIHNjcmF0Y2hGUFIgPSBXYXNtOjp3
YXNtQ2FsbGluZ0NvbnZlbnRpb24oKS5tX2ZwckFyZ3NbMF0uZnByKCk7CisKKyAgICAgICAgcHRy
ZGlmZl90IGpzT2Zmc2V0ID0gQ2FsbEZyYW1lU2xvdDo6Zmlyc3RBcmd1bWVudCAqIHNpemVvZihF
bmNvZGVkSlNWYWx1ZSk7CisKKyAgICAgICAgcHRyZGlmZl90IHdhc21PZmZzZXQgPSBDYWxsRnJh
bWU6OmhlYWRlclNpemVJblJlZ2lzdGVycyAqIHNpemVvZihDUFVSZWdpc3Rlcik7CisgICAgICAg
IGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBzaWduYXR1cmUuYXJndW1lbnRDb3VudCgpOyBpKysp
IHsKKyAgICAgICAgICAgIHN3aXRjaCAoc2lnbmF0dXJlLmFyZ3VtZW50KGkpKSB7CisgICAgICAg
ICAgICBjYXNlIFdhc206OkkzMjoKKyAgICAgICAgICAgICAgICBqaXQubG9hZDY0KENDYWxsSGVs
cGVyczo6QWRkcmVzcyhHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlciwganNPZmZzZXQpLCBzY3Jh
dGNoR1BSKTsKKyAgICAgICAgICAgICAgICBzbG93UGF0aC5hcHBlbmQoaml0LmJyYW5jaElmTm90
SW50MzIoc2NyYXRjaEdQUikpOworICAgICAgICAgICAgICAgIGlmIChudW1HUFJzID49IFdhc206
Ondhc21DYWxsaW5nQ29udmVudGlvbigpLm1fZ3ByQXJncy5zaXplKCkpIHsKKyAgICAgICAgICAg
ICAgICAgICAgaml0LnN0b3JlMzIoc2NyYXRjaEdQUiwgY2FsbGVlRnJhbWUud2l0aE9mZnNldCh3
YXNtT2Zmc2V0KSk7CisgICAgICAgICAgICAgICAgICAgIHdhc21PZmZzZXQgKz0gc2l6ZW9mKENQ
VVJlZ2lzdGVyKTsKKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAg
ICBqaXQuemVyb0V4dGVuZDMyVG9QdHIoc2NyYXRjaEdQUiwgV2FzbTo6d2FzbUNhbGxpbmdDb252
ZW50aW9uKCkubV9ncHJBcmdzW251bUdQUnNdLmdwcigpKTsKKyAgICAgICAgICAgICAgICAgICAg
KytudW1HUFJzOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgICAgIGNhc2UgV2FzbTo6RjMyOgorICAgICAgICAgICAgY2FzZSBXYXNtOjpGNjQ6Cisg
ICAgICAgICAgICAgICAgaWYgKG51bUZQUnMgPj0gV2FzbTo6d2FzbUNhbGxpbmdDb252ZW50aW9u
KCkubV9mcHJBcmdzLnNpemUoKSkgeworICAgICAgICAgICAgICAgICAgICBqaXQubG9hZDY0KEND
YWxsSGVscGVyczo6QWRkcmVzcyhHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlciwganNPZmZzZXQp
LCBzY3JhdGNoR1BSKTsKKyAgICAgICAgICAgICAgICAgICAgc2xvd1BhdGguYXBwZW5kKGppdC5i
cmFuY2hJZk5vdE51bWJlcihzY3JhdGNoR1BSKSk7CisgICAgICAgICAgICAgICAgICAgIGF1dG8g
aXNJbnQzMiA9IGppdC5icmFuY2hJZkludDMyKHNjcmF0Y2hHUFIpOworICAgICAgICAgICAgICAg
ICAgICBpZiAoc2lnbmF0dXJlLmFyZ3VtZW50KGkpID09IFdhc206OkYzMikgeworICAgICAgICAg
ICAgICAgICAgICAgICAgaml0LnVuYm94RG91YmxlKHNjcmF0Y2hHUFIsIHNjcmF0Y2hHUFIsIHNj
cmF0Y2hGUFIpOworICAgICAgICAgICAgICAgICAgICAgICAgaml0LmNvbnZlcnREb3VibGVUb0Zs
b2F0KHNjcmF0Y2hGUFIsIHNjcmF0Y2hGUFIpOworICAgICAgICAgICAgICAgICAgICAgICAgaml0
LnN0b3JlRmxvYXQoc2NyYXRjaEZQUiwgY2FsbGVlRnJhbWUud2l0aE9mZnNldCh3YXNtT2Zmc2V0
KSk7CisgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAg
ICBqaXQuYWRkNjQoR1BSSW5mbzo6dGFnVHlwZU51bWJlclJlZ2lzdGVyLCBzY3JhdGNoR1BSLCBz
Y3JhdGNoR1BSKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGppdC5zdG9yZTY0KHNjcmF0Y2hH
UFIsIGNhbGxlZUZyYW1lLndpdGhPZmZzZXQod2FzbU9mZnNldCkpOworICAgICAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICAgICAgICAgIGF1dG8gZG9uZSA9IGppdC5qdW1wKCk7CisKKyAg
ICAgICAgICAgICAgICAgICAgaXNJbnQzMi5saW5rKCZqaXQpOworICAgICAgICAgICAgICAgICAg
ICBpZiAoc2lnbmF0dXJlLmFyZ3VtZW50KGkpID09IFdhc206OkYzMikgeworICAgICAgICAgICAg
ICAgICAgICAgICAgaml0LmNvbnZlcnRJbnQzMlRvRmxvYXQoc2NyYXRjaEdQUiwgc2NyYXRjaEZQ
Uik7CisgICAgICAgICAgICAgICAgICAgICAgICBqaXQuc3RvcmVGbG9hdChzY3JhdGNoRlBSLCBj
YWxsZWVGcmFtZS53aXRoT2Zmc2V0KHdhc21PZmZzZXQpKTsKKyAgICAgICAgICAgICAgICAgICAg
fSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGppdC5jb252ZXJ0SW50MzJUb0RvdWJs
ZShzY3JhdGNoR1BSLCBzY3JhdGNoRlBSKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGppdC5z
dG9yZURvdWJsZShzY3JhdGNoRlBSLCBjYWxsZWVGcmFtZS53aXRoT2Zmc2V0KHdhc21PZmZzZXQp
KTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBkb25lLmxpbmso
JmppdCk7CisKKyAgICAgICAgICAgICAgICAgICAgd2FzbU9mZnNldCArPSBzaXplb2YoQ1BVUmVn
aXN0ZXIpOworICAgICAgICAgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgICAgICAgICArK251
bUZQUnM7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBkZWZhdWx0OgorICAg
ICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICB9
CisKKyAgICAgICAgICAgIGpzT2Zmc2V0ICs9IHNpemVvZihFbmNvZGVkSlNWYWx1ZSk7CisgICAg
ICAgIH0KKyAgICB9CisKKyAgICAvLyBOb3cgaGFuZGxlIEZQUiBhcmd1bWVudHMgaW4gcmVnaXN0
ZXJzLgorICAgIHsKKyAgICAgICAgbnVtRlBScyA9IDA7CisgICAgICAgIHB0cmRpZmZfdCBqc09m
ZnNldCA9IENhbGxGcmFtZVNsb3Q6OmZpcnN0QXJndW1lbnQgKiBzaXplb2YoRW5jb2RlZEpTVmFs
dWUpOworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc2lnbmF0dXJlLmFyZ3VtZW50
Q291bnQoKTsgaSsrKSB7CisgICAgICAgICAgICBzd2l0Y2ggKHNpZ25hdHVyZS5hcmd1bWVudChp
KSkgeworICAgICAgICAgICAgY2FzZSBXYXNtOjpGMzI6CisgICAgICAgICAgICBjYXNlIFdhc206
OkY2NDoKKyAgICAgICAgICAgICAgICBpZiAobnVtRlBScyA8IFdhc206Ondhc21DYWxsaW5nQ29u
dmVudGlvbigpLm1fZnByQXJncy5zaXplKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgRlBSUmVn
IGFyZ0ZQUiA9IFdhc206Ondhc21DYWxsaW5nQ29udmVudGlvbigpLm1fZnByQXJnc1tudW1GUFJz
XS5mcHIoKTsKKyAgICAgICAgICAgICAgICAgICAgaml0LmxvYWQ2NChDQ2FsbEhlbHBlcnM6OkFk
ZHJlc3MoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIGpzT2Zmc2V0KSwgc2NyYXRjaEdQUik7
CisgICAgICAgICAgICAgICAgICAgIHNsb3dQYXRoLmFwcGVuZChqaXQuYnJhbmNoSWZOb3ROdW1i
ZXIoc2NyYXRjaEdQUikpOworICAgICAgICAgICAgICAgICAgICBhdXRvIGlzSW50MzIgPSBqaXQu
YnJhbmNoSWZJbnQzMihzY3JhdGNoR1BSKTsKKyAgICAgICAgICAgICAgICAgICAgaml0LnVuYm94
RG91YmxlKHNjcmF0Y2hHUFIsIHNjcmF0Y2hHUFIsIGFyZ0ZQUik7CisgICAgICAgICAgICAgICAg
ICAgIGlmIChzaWduYXR1cmUuYXJndW1lbnQoaSkgPT0gV2FzbTo6RjMyKQorICAgICAgICAgICAg
ICAgICAgICAgICAgaml0LmNvbnZlcnREb3VibGVUb0Zsb2F0KGFyZ0ZQUiwgYXJnRlBSKTsKKyAg
ICAgICAgICAgICAgICAgICAgYXV0byBkb25lID0gaml0Lmp1bXAoKTsKKworICAgICAgICAgICAg
ICAgICAgICBpc0ludDMyLmxpbmsoJmppdCk7CisgICAgICAgICAgICAgICAgICAgIGlmIChzaWdu
YXR1cmUuYXJndW1lbnQoaSkgPT0gV2FzbTo6RjMyKQorICAgICAgICAgICAgICAgICAgICAgICAg
aml0LmNvbnZlcnRJbnQzMlRvRmxvYXQoc2NyYXRjaEdQUiwgYXJnRlBSKTsKKyAgICAgICAgICAg
ICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgaml0LmNvbnZlcnRJbnQzMlRv
RG91YmxlKHNjcmF0Y2hHUFIsIGFyZ0ZQUik7CisKKyAgICAgICAgICAgICAgICAgICAgZG9uZS5s
aW5rKCZqaXQpOworICAgICAgICAgICAgICAgICAgICArK251bUZQUnM7CisgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAganNPZmZzZXQg
Kz0gc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8vIEF0
IHRoaXMgcG9pbnQsIHdlJ3JlIGNvbW1pdHRlZCB0byBkb2luZyBhIGZhc3QgY2FsbC4KKworICAg
IGlmIChXYXNtOjpDb250ZXh0Ojp1c2VGYXN0VExTKCkpIAorICAgICAgICBqaXQubG9hZFdhc21D
b250ZXh0SW5zdGFuY2Uoc2NyYXRjaEdQUik7CisgICAgZWxzZQorICAgICAgICBqaXQubG9hZFB0
cih2bS53YXNtQ29udGV4dC5wb2ludGVyVG9JbnN0YW5jZSgpLCBzY3JhdGNoR1BSKTsKKyAgICBw
dHJkaWZmX3QgcHJldmlvdXNJbnN0YW5jZU9mZnNldCA9IHRoaXMtPnByZXZpb3VzSW5zdGFuY2VP
ZmZzZXQoKTsKKyAgICBqaXQuc3RvcmVQdHIoc2NyYXRjaEdQUiwgQ0NhbGxIZWxwZXJzOjpBZGRy
ZXNzKEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCBwcmV2aW91c0luc3RhbmNlT2Zmc2V0KSk7
CisKKyAgICBqaXQubW92ZShDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoJmluc3RhbmNlKCkt
Pmluc3RhbmNlKCkpLCBzY3JhdGNoR1BSKTsKKyAgICBpZiAoV2FzbTo6Q29udGV4dDo6dXNlRmFz
dFRMUygpKSAKKyAgICAgICAgaml0LnN0b3JlV2FzbUNvbnRleHRJbnN0YW5jZShzY3JhdGNoR1BS
KTsKKyAgICBlbHNlIHsKKyAgICAgICAgaml0Lm1vdmUoc2NyYXRjaEdQUiwgcGlubmVkUmVncy53
YXNtQ29udGV4dEluc3RhbmNlUG9pbnRlcik7CisgICAgICAgIGppdC5zdG9yZVB0cihzY3JhdGNo
R1BSLCB2bS53YXNtQ29udGV4dC5wb2ludGVyVG9JbnN0YW5jZSgpKTsKKyAgICB9CisgICAgLy8g
VGhpcyBjb250YWlucyB0aGUgY2FjaGVkIHN0YWNrIGxpbWl0IHN0aWxsLgorICAgIGppdC5zdG9y
ZVB0cihzY3JhdGNoMkdQUiwgQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKHNjcmF0Y2hHUFIsIFdhc206
Okluc3RhbmNlOjpvZmZzZXRPZkNhY2hlZFN0YWNrTGltaXQoKSkpOworCisgICAgaWYgKCEhbW9k
dWxlSW5mb3JtYXRpb24ubWVtb3J5KSB7CisgICAgICAgIEdQUlJlZyBiYXNlTWVtb3J5ID0gcGlu
bmVkUmVncy5iYXNlTWVtb3J5UG9pbnRlcjsKKworICAgICAgICBpZiAoaW5zdGFuY2UoKS0+bWVt
b3J5TW9kZSgpICE9IFdhc206Ok1lbW9yeU1vZGU6OlNpZ25hbGluZykgeworICAgICAgICAgICAg
QVNTRVJUKHBpbm5lZFJlZ3Muc2l6ZVJlZ2lzdGVyICE9IHNjcmF0Y2hHUFIpOworICAgICAgICAg
ICAgaml0LmxvYWRQdHIoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKHNjcmF0Y2hHUFIsIFdhc206Oklu
c3RhbmNlOjpvZmZzZXRPZkNhY2hlZE1lbW9yeVNpemUoKSksIHBpbm5lZFJlZ3Muc2l6ZVJlZ2lz
dGVyKTsKKyAgICAgICAgfQorCisgICAgICAgIGppdC5sb2FkUHRyKENDYWxsSGVscGVyczo6QWRk
cmVzcyhzY3JhdGNoR1BSLCBXYXNtOjpJbnN0YW5jZTo6b2Zmc2V0T2ZDYWNoZWRNZW1vcnkoKSks
IGJhc2VNZW1vcnkpOworICAgIH0KKworICAgIC8vIFdlIHVzZSB0aGlzIGNhbGxlZSB0byBpbmRp
Y2F0ZSBob3cgdG8gdW53aW5kIHBhc3QgdGhlc2UgdHlwZXMgb2YgZnJhbWVzOgorICAgIC8vIDEu
IFdlIG5lZWQgdG8ga25vdyB3aGVyZSB0byBnZXQgY2FsbGVlIHNhdmVzLgorICAgIC8vIDIuIFdl
IG5lZWQgdG8ga25vdyB0byByZXN0b3JlIHRoZSBwcmV2aW91cyB3YXNtIGNvbnRleHQuCisgICAg
aWYgKCFtX2pzVG9XYXNtSUNDYWxsZWUpCisgICAgICAgIG1fanNUb1dhc21JQ0NhbGxlZS5zZXQo
dm0sIHRoaXMsIEpTVG9XYXNtSUNDYWxsZWU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0KCksIHRo
aXMpKTsKKyAgICBqaXQuc3RvcmVQdHIoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKG1fanNU
b1dhc21JQ0NhbGxlZS5nZXQoKSksIENDYWxsSGVscGVyczo6YWRkcmVzc0ZvcihDYWxsRnJhbWVT
bG90OjpjYWxsZWUpKTsKKworICAgIHsKKyAgICAgICAgLy8gRklYTUU6IEN1cnJlbnRseSB3ZSBq
dXN0IGRvIGFuIGluZGlyZWN0IGp1bXAuIEJ1dCB3ZSBzaG91bGQgdGVhY2ggdGhlIE1vZHVsZQor
ICAgICAgICAvLyBob3cgdG8gcmVwYXRjaCB1czoKKyAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE5NjU3MAorICAgICAgICBqaXQubG9hZFB0cihlbnRy
eXBvaW50TG9hZExvY2F0aW9uKCksIHNjcmF0Y2hHUFIpOworICAgICAgICBqaXQuY2FsbChzY3Jh
dGNoR1BSLCBXYXNtRW50cnlQdHJUYWcpOworICAgIH0KKworICAgIEFTU0VSVCghUmVnaXN0ZXJT
ZXQ6OnJ1bnRpbWVUYWdSZWdpc3RlcnMoKS5jb250YWlucyhub25QcmVzZXJ2ZWROb25SZXR1cm5H
UFIpKTsKKyAgICBqaXQubG9hZFB0cihDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoR1BSSW5mbzo6Y2Fs
bEZyYW1lUmVnaXN0ZXIsIHByZXZpb3VzSW5zdGFuY2VPZmZzZXQpLCBHUFJJbmZvOjpub25QcmVz
ZXJ2ZWROb25SZXR1cm5HUFIpOworICAgIGlmIChXYXNtOjpDb250ZXh0Ojp1c2VGYXN0VExTKCkp
CisgICAgICAgIGppdC5zdG9yZVdhc21Db250ZXh0SW5zdGFuY2UoR1BSSW5mbzo6bm9uUHJlc2Vy
dmVkTm9uUmV0dXJuR1BSKTsKKyAgICBlbHNlCisgICAgICAgIGppdC5zdG9yZVB0cihHUFJJbmZv
Ojpub25QcmVzZXJ2ZWROb25SZXR1cm5HUFIsIHZtLndhc21Db250ZXh0LnBvaW50ZXJUb0luc3Rh
bmNlKCkpOworCisgICAgc3dpdGNoIChzaWduYXR1cmUucmV0dXJuVHlwZSgpKSB7CisgICAgY2Fz
ZSBXYXNtOjpWb2lkOgorICAgICAgICBqaXQubW92ZVRydXN0ZWRWYWx1ZShqc1VuZGVmaW5lZCgp
LCBKU1ZhbHVlUmVncyB7IEdQUkluZm86OnJldHVyblZhbHVlR1BSIH0pOworICAgICAgICBicmVh
azsKKyAgICBjYXNlIFdhc206OkkzMjoKKyAgICAgICAgaml0Lnplcm9FeHRlbmQzMlRvUHRyKEdQ
UkluZm86OnJldHVyblZhbHVlR1BSLCBHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUik7CisgICAgICAg
IGppdC5ib3hJbnQzMihHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUiwgSlNWYWx1ZVJlZ3MgeyBHUFJJ
bmZvOjpyZXR1cm5WYWx1ZUdQUiB9KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBXYXNtOjpG
MzI6CisgICAgICAgIGppdC5jb252ZXJ0RmxvYXRUb0RvdWJsZShGUFJJbmZvOjpyZXR1cm5WYWx1
ZUZQUiwgRlBSSW5mbzo6cmV0dXJuVmFsdWVGUFIpOworICAgICAgICBGQUxMVEhST1VHSDsKKyAg
ICBjYXNlIFdhc206OkY2NDogeworICAgICAgICBqaXQubW92ZVRydXN0ZWRWYWx1ZShqc051bWJl
cihwdXJlTmFOKCkpLCBKU1ZhbHVlUmVncyB7IEdQUkluZm86OnJldHVyblZhbHVlR1BSIH0pOwor
ICAgICAgICBhdXRvIGlzTmFOID0gaml0LmJyYW5jaElmTmFOKEZQUkluZm86OnJldHVyblZhbHVl
RlBSKTsKKyAgICAgICAgaml0LmJveERvdWJsZShGUFJJbmZvOjpyZXR1cm5WYWx1ZUZQUiwgSlNW
YWx1ZVJlZ3MgeyBHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUiB9KTsKKyAgICAgICAgaXNOYU4ubGlu
aygmaml0KTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIGNhc2UgV2FzbTo6STY0OgorICAg
IGNhc2UgV2FzbTo6RnVuYzoKKyAgICBjYXNlIFdhc206OkFueWZ1bmM6CisgICAgICAgIHJldHVy
biBudWxscHRyOworICAgIGRlZmF1bHQ6CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIGF1
dG8gZW1pdFJlc3RvcmVDYWxsZWVTYXZlcyA9IFsmXSB7CisgICAgICAgIGZvciAoY29uc3QgUmVn
aXN0ZXJBdE9mZnNldCYgcmVnQXRPZmZzZXQgOiByZWdpc3RlcnNUb1NwaWxsKSB7CisgICAgICAg
ICAgICBHUFJSZWcgcmVnID0gcmVnQXRPZmZzZXQucmVnKCkuZ3ByKCk7CisgICAgICAgICAgICBB
U1NFUlQocmVnICE9IEdQUkluZm86OnJldHVyblZhbHVlR1BSKTsKKyAgICAgICAgICAgIHB0cmRp
ZmZfdCBvZmZzZXQgPSByZWdBdE9mZnNldC5vZmZzZXQoKTsKKyAgICAgICAgICAgIGppdC5sb2Fk
UHRyKENDYWxsSGVscGVyczo6QWRkcmVzcyhHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3Rlciwgb2Zm
c2V0KSwgcmVnKTsKKyAgICAgICAgfQorICAgIH07CisKKyAgICBlbWl0UmVzdG9yZUNhbGxlZVNh
dmVzKCk7CisKKyAgICBqaXQuZW1pdEZ1bmN0aW9uRXBpbG9ndWUoKTsKKyAgICBqaXQucmV0KCk7
CisKKyAgICBzbG93UGF0aC5saW5rKCZqaXQpOworICAgIGVtaXRSZXN0b3JlQ2FsbGVlU2F2ZXMo
KTsKKyAgICBqaXQubW92ZShDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIodGhpcyksIEdQUklu
Zm86OnJlZ1QwKTsKKyAgICBqaXQuZW1pdEZ1bmN0aW9uRXBpbG9ndWUoKTsKKyAgICBhdXRvIGp1
bXBUb0hvc3RDYWxsVGh1bmsgPSBqaXQuanVtcCgpOworCisgICAgTGlua0J1ZmZlciBsaW5rQnVm
ZmVyKGppdCwgbnVsbHB0ciwgSklUQ29tcGlsYXRpb25DYW5GYWlsKTsKKyAgICBpZiAoVU5MSUtF
TFkobGlua0J1ZmZlci5kaWRGYWlsVG9BbGxvY2F0ZSgpKSkKKyAgICAgICAgcmV0dXJuIG51bGxw
dHI7CisKKyAgICBsaW5rQnVmZmVyLmxpbmsoanVtcFRvSG9zdENhbGxUaHVuaywgQ29kZUxvY2F0
aW9uTGFiZWw8SlNFbnRyeVB0clRhZz4oZXhlY3V0YWJsZSgpLT5lbnRyeXBvaW50Rm9yKENvZGVG
b3JDYWxsLCBNdXN0Q2hlY2tBcml0eSkuZXhlY3V0YWJsZUFkZHJlc3MoKSkpOworICAgIG1fanND
YWxsRW50cnlwb2ludCA9IEZJTkFMSVpFX0NPREUobGlua0J1ZmZlciwgV2FzbUVudHJ5UHRyVGFn
LCAiSlMtPldhc20gSUMiKTsKKyAgICByZXR1cm4gbV9qc0NhbGxFbnRyeXBvaW50LmNvZGUoKTsK
K30KKwogV2ViQXNzZW1ibHlGdW5jdGlvbiogV2ViQXNzZW1ibHlGdW5jdGlvbjo6Y3JlYXRlKFZN
JiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUs
IHVuc2lnbmVkIGxlbmd0aCwgY29uc3QgU3RyaW5nJiBuYW1lLCBKU1dlYkFzc2VtYmx5SW5zdGFu
Y2UqIGluc3RhbmNlLCBXYXNtOjpDYWxsZWUmIGpzRW50cnlwb2ludCwgV2FzbTo6V2FzbVRvV2Fz
bUltcG9ydGFibGVGdW5jdGlvbjo6TG9hZExvY2F0aW9uIHdhc21Ub1dhc21FbnRyeXBvaW50TG9h
ZExvY2F0aW9uLCBXYXNtOjpTaWduYXR1cmVJbmRleCBzaWduYXR1cmVJbmRleCkKIHsKICAgICBO
YXRpdmVFeGVjdXRhYmxlKiBleGVjdXRhYmxlID0gdm0uZ2V0SG9zdEZ1bmN0aW9uKGNhbGxXZWJB
c3NlbWJseUZ1bmN0aW9uLCBOb0ludHJpbnNpYywgY2FsbEhvc3RGdW5jdGlvbkFzQ29uc3RydWN0
b3IsIG51bGxwdHIsIG5hbWUpOwpAQCAtMTY5LDYgKzUwMiwyMCBAQCBXZWJBc3NlbWJseUZ1bmN0
aW9uOjpXZWJBc3NlbWJseUZ1bmN0aW9uCiAgICAgLCBtX2ltcG9ydGFibGVGdW5jdGlvbiB7IHNp
Z25hdHVyZUluZGV4LCB3YXNtVG9XYXNtRW50cnlwb2ludExvYWRMb2NhdGlvbiB9CiB7IH0KIAor
dm9pZCBXZWJBc3NlbWJseUZ1bmN0aW9uOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xv
dFZpc2l0b3ImIHZpc2l0b3IpCit7CisgICAgV2ViQXNzZW1ibHlGdW5jdGlvbiogdGhpc09iamVj
dCA9IGpzQ2FzdDxXZWJBc3NlbWJseUZ1bmN0aW9uKj4oY2VsbCk7CisgICAgQVNTRVJUX0dDX09C
SkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOworCisgICAgQmFzZTo6dmlzaXRDaGls
ZHJlbih0aGlzT2JqZWN0LCB2aXNpdG9yKTsKKyAgICB2aXNpdG9yLmFwcGVuZCh0aGlzT2JqZWN0
LT5tX2pzVG9XYXNtSUNDYWxsZWUpOworfQorCit2b2lkIFdlYkFzc2VtYmx5RnVuY3Rpb246OmRl
c3Ryb3koSlNDZWxsKiBjZWxsKQoreworICAgIHN0YXRpY19jYXN0PFdlYkFzc2VtYmx5RnVuY3Rp
b24qPihjZWxsKS0+V2ViQXNzZW1ibHlGdW5jdGlvbjo6fldlYkFzc2VtYmx5RnVuY3Rpb24oKTsK
K30KKwogfSAvLyBuYW1lc3BhY2UgSlNDCiAKICNlbmRpZiAvLyBFTkFCTEUoV0VCQVNTRU1CTFkp
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseUZ1bmN0aW9u
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1i
bHlGdW5jdGlvbi5oCShyZXZpc2lvbiAyNDM3ODApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
d2FzbS9qcy9XZWJBc3NlbWJseUZ1bmN0aW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTI3LDYgKzI3
LDcgQEAKIAogI2lmIEVOQUJMRShXRUJBU1NFTUJMWSkKIAorI2luY2x1ZGUgIkpTVG9XYXNtSUND
YWxsZWUuaCIKICNpbmNsdWRlICJNYWNyb0Fzc2VtYmxlckNvZGVSZWYuaCIKICNpbmNsdWRlICJX
YXNtQ2FsbGVlLmgiCiAjaW5jbHVkZSAiV2ViQXNzZW1ibHlGdW5jdGlvbkJhc2UuaCIKQEAgLTQ5
LDYgKzUwLDkgQEAgcHVibGljOgogCiAgICAgY29uc3Qgc3RhdGljIHVuc2lnbmVkIFN0cnVjdHVy
ZUZsYWdzID0gQmFzZTo6U3RydWN0dXJlRmxhZ3M7CiAKKyAgICBzdGF0aWMgY29uc3QgYm9vbCBu
ZWVkc0Rlc3RydWN0aW9uID0gdHJ1ZTsKKyAgICBzdGF0aWMgdm9pZCBkZXN0cm95KEpTQ2VsbCop
OworCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2VsbFR5cGUsIFN1YnNwYWNlQWNjZXNzIG1vZGU+
CiAgICAgc3RhdGljIElzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYgdm0pCiAgICAgewpAQCAt
NzQsMTQgKzc4LDM0IEBAIHB1YmxpYzoKIAogICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZF
bnRyeXBvaW50TG9hZExvY2F0aW9uKCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKFdlYkFzc2Vt
Ymx5RnVuY3Rpb24sIG1faW1wb3J0YWJsZUZ1bmN0aW9uKSArIFdhc21Ub1dhc21JbXBvcnRhYmxl
RnVuY3Rpb246Om9mZnNldE9mRW50cnlwb2ludExvYWRMb2NhdGlvbigpOyB9CiAKKyAgICBNYWNy
b0Fzc2VtYmxlckNvZGVQdHI8SlNFbnRyeVB0clRhZz4ganNDYWxsRW50cnlwb2ludCgpCisgICAg
eworICAgICAgICBpZiAobV9qc0NhbGxFbnRyeXBvaW50KQorICAgICAgICAgICAgcmV0dXJuIG1f
anNDYWxsRW50cnlwb2ludC5jb2RlKCk7CisgICAgICAgIHJldHVybiBqc0NhbGxFbnRyeXBvaW50
U2xvdygpOworICAgIH0KKworICAgIFJlZ2lzdGVyQXRPZmZzZXRMaXN0IHVzZWRDYWxsZWVTYXZl
UmVnaXN0ZXJzKCkgY29uc3Q7CisgICAgV2FzbTo6SW5zdGFuY2UqIHByZXZpb3VzSW5zdGFuY2Uo
Q2FsbEZyYW1lKik7CisKIHByaXZhdGU6CisgICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihK
U0NlbGwqLCBTbG90VmlzaXRvciYpOwogICAgIFdlYkFzc2VtYmx5RnVuY3Rpb24oVk0mLCBKU0ds
b2JhbE9iamVjdCosIFN0cnVjdHVyZSosIFdhc206OkNhbGxlZSYganNFbnRyeXBvaW50LCBXYXNt
VG9XYXNtSW1wb3J0YWJsZUZ1bmN0aW9uOjpMb2FkTG9jYXRpb24gZW50cnlwb2ludExvYWRMb2Nh
dGlvbiwgV2FzbTo6U2lnbmF0dXJlSW5kZXgpOwogCisgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRy
PEpTRW50cnlQdHJUYWc+IGpzQ2FsbEVudHJ5cG9pbnRTbG93KCk7CisgICAgcHRyZGlmZl90IHBy
ZXZpb3VzSW5zdGFuY2VPZmZzZXQoKSBjb25zdDsKKyAgICBib29sIHVzZVRhZ1JlZ2lzdGVycygp
IGNvbnN0OworCisgICAgUmVnaXN0ZXJTZXQgY2FsbGVlU2F2ZXMoKSBjb25zdDsKKwogICAgIC8v
IEl0J3Mgc2FmZSB0byBqdXN0IGhvbGQgdGhlIHJhdyBXYXNtVG9XYXNtSW1wb3J0YWJsZUZ1bmN0
aW9uL2pzRW50cnlwb2ludCBiZWNhdXNlIHdlIGhhdmUgYSByZWZlcmVuY2UKICAgICAvLyB0byBv
dXIgSW5zdGFuY2UsIHdoaWNoIHBvaW50cyB0byB0aGUgTW9kdWxlIHRoYXQgZXhwb3J0ZWQgdXMs
IHdoaWNoCiAgICAgLy8gZW5zdXJlcyB0aGF0IHRoZSBhY3R1YWwgU2lnbmF0dXJlL2NvZGUgZG9l
c24ndCBnZXQgZGVhbGxvY2F0ZWQuCiAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPFdhc21FbnRy
eVB0clRhZz4gbV9qc0VudHJ5cG9pbnQ7CiAgICAgV2FzbVRvV2FzbUltcG9ydGFibGVGdW5jdGlv
biBtX2ltcG9ydGFibGVGdW5jdGlvbjsKKyAgICBXcml0ZUJhcnJpZXI8SlNUb1dhc21JQ0NhbGxl
ZT4gbV9qc1RvV2FzbUlDQ2FsbGVlOworICAgIC8vIFVzZWQgZm9yIEpTIGNhbGxpbmcgaW50byBX
YXNtLgorICAgIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKU0VudHJ5UHRyVGFnPiBtX2pzQ2FsbEVu
dHJ5cG9pbnQ7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5RnVuY3Rpb25IZWFwQ2VsbFR5cGUuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5RnVuY3Rp
b25IZWFwQ2VsbFR5cGUuY3BwCShub25leGlzdGVudCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS93YXNtL2pzL1dlYkFzc2VtYmx5RnVuY3Rpb25IZWFwQ2VsbFR5cGUuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0wLDAgKzEsNjYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTkgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAq
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIldlYkFzc2VtYmx5RnVu
Y3Rpb25IZWFwQ2VsbFR5cGUuaCIKKworI2lmIEVOQUJMRShXRUJBU1NFTUJMWSkKKworI2luY2x1
ZGUgIkpTQ0lubGluZXMuaCIKKyNpbmNsdWRlICJXZWJBc3NlbWJseUZ1bmN0aW9uLmgiCisjaW5j
bHVkZSAiTWFya2VkQmxvY2tJbmxpbmVzLmgiCisKK25hbWVzcGFjZSBKU0MgeworCitzdHJ1Y3Qg
V2ViQXNzZW1ibHlGdW5jdGlvbkRlc3Ryb3lGdW5jIHsKKyAgICBBTFdBWVNfSU5MSU5FIHZvaWQg
b3BlcmF0b3IoKShWTSYsIEpTQ2VsbCogY2VsbCkgY29uc3QKKyAgICB7CisgICAgICAgIHN0YXRp
Y19hc3NlcnQoc3RkOjppc19maW5hbDxXZWJBc3NlbWJseUZ1bmN0aW9uPjo6dmFsdWUsICJPdGhl
cndpc2UsIHRoaXMgY29kZSB3b3VsZCBub3QgYmUgY29ycmVjdC4iKTsKKyAgICAgICAgV2ViQXNz
ZW1ibHlGdW5jdGlvbjo6aW5mbygpLT5tZXRob2RUYWJsZS5kZXN0cm95KGNlbGwpOworICAgIH0K
K307CisKK1dlYkFzc2VtYmx5RnVuY3Rpb25IZWFwQ2VsbFR5cGU6OldlYkFzc2VtYmx5RnVuY3Rp
b25IZWFwQ2VsbFR5cGUoKQorICAgIDogSGVhcENlbGxUeXBlKENlbGxBdHRyaWJ1dGVzKE5lZWRz
RGVzdHJ1Y3Rpb24sIEhlYXBDZWxsOjpKU0NlbGwpKQoreworfQorCitXZWJBc3NlbWJseUZ1bmN0
aW9uSGVhcENlbGxUeXBlOjp+V2ViQXNzZW1ibHlGdW5jdGlvbkhlYXBDZWxsVHlwZSgpCit7Cit9
CisKK3ZvaWQgV2ViQXNzZW1ibHlGdW5jdGlvbkhlYXBDZWxsVHlwZTo6ZmluaXNoU3dlZXAoTWFy
a2VkQmxvY2s6OkhhbmRsZSYgaGFuZGxlLCBGcmVlTGlzdCogZnJlZUxpc3QpCit7CisgICAgaGFu
ZGxlLmZpbmlzaFN3ZWVwS25vd2luZ0hlYXBDZWxsVHlwZShmcmVlTGlzdCwgV2ViQXNzZW1ibHlG
dW5jdGlvbkRlc3Ryb3lGdW5jKCkpOworfQorCit2b2lkIFdlYkFzc2VtYmx5RnVuY3Rpb25IZWFw
Q2VsbFR5cGU6OmRlc3Ryb3koVk0mIHZtLCBKU0NlbGwqIGNlbGwpCit7CisgICAgV2ViQXNzZW1i
bHlGdW5jdGlvbkRlc3Ryb3lGdW5jKCkodm0sIGNlbGwpOworfQorCit9IC8vIG5hbWVzcGFjZSBK
U0MKKworI2VuZGlmIC8vIEVOQUJMRShXRUJBU1NFTUJMWSkKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5RnVuY3Rpb25IZWFwQ2VsbFR5cGUuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseUZ1bmN0aW9u
SGVhcENlbGxUeXBlLmgJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3dh
c20vanMvV2ViQXNzZW1ibHlGdW5jdGlvbkhlYXBDZWxsVHlwZS5oCSh3b3JraW5nIGNvcHkpCkBA
IC0wLDAgKzEsNDUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTkgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisg
KiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisg
Ki8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBFTkFCTEUoV0VCQVNTRU1CTFkpCisKKyNpbmNsdWRl
ICJIZWFwQ2VsbFR5cGUuaCIKKworbmFtZXNwYWNlIEpTQyB7CisKK2NsYXNzIFdlYkFzc2VtYmx5
RnVuY3Rpb25IZWFwQ2VsbFR5cGUgOiBwdWJsaWMgSGVhcENlbGxUeXBlIHsKK3B1YmxpYzoKKyAg
ICBXZWJBc3NlbWJseUZ1bmN0aW9uSGVhcENlbGxUeXBlKCk7CisgICAgdmlydHVhbCB+V2ViQXNz
ZW1ibHlGdW5jdGlvbkhlYXBDZWxsVHlwZSgpOworICAgIAorICAgIHZvaWQgZmluaXNoU3dlZXAo
TWFya2VkQmxvY2s6OkhhbmRsZSYsIEZyZWVMaXN0Kikgb3ZlcnJpZGU7CisgICAgdm9pZCBkZXN0
cm95KFZNJiwgSlNDZWxsKikgb3ZlcnJpZGU7Cit9OworCit9IC8vIG5hbWVzcGFjZSBKU0MKKwor
I2VuZGlmIC8vIEVOQUJMRShXRUJBU1NFTUJMWSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS93YXNtL2pzL1dlYkFzc2VtYmx5UHJvdG90eXBlLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlQcm90b3R5cGUuaAkocmV2aXNpb24gMjQz
NzgwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlQcm90b3R5
cGUuaAkod29ya2luZyBjb3B5KQpAQCAtMzMsNiArMzMsOCBAQAogCiBuYW1lc3BhY2UgSlNDIHsK
IAorY2xhc3MgSlNQcm9taXNlRGVmZXJyZWQ7CisKIGNsYXNzIFdlYkFzc2VtYmx5UHJvdG90eXBl
IGZpbmFsIDogcHVibGljIEpTTm9uRmluYWxPYmplY3QgewogcHVibGljOgogICAgIHR5cGVkZWYg
SlNOb25GaW5hbE9iamVjdCBCYXNlOwo=
</data>
<flag name="review"
          id="383044"
          type_id="1"
          status="+"
          setter="fpizlo"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>366674</attachid>
            <date>2019-04-03 17:07:48 -0700</date>
            <delta_ts>2019-04-04 11:14:02 -0700</delta_ts>
            <desc>patch for landing</desc>
            <filename>b-backup.diff</filename>
            <type>text/plain</type>
            <size>82161</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IEpTVGVzdHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEpTVGVzdHMvQ2hhbmdlTG9n
CShyZXZpc2lvbiAyNDM4MzMpCisrKyBKU1Rlc3RzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpA
QCAtMSwzICsxLDEyIEBACisyMDE5LTA0LTAzICBTYWFtIGJhcmF0aSAgPHNiYXJhdGlAYXBwbGUu
Y29tPgorCisgICAgICAgIFRlYWNoIENhbGwgSUNzIGhvdyB0byBjYWxsIFdhc20KKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE5NjM4NworCisgICAgICAg
IFJldmlld2VkIGJ5IEZpbGlwIFBpemxvLgorCisgICAgICAgICogd2FzbS9mdW5jdGlvbi10ZXN0
cy9zdGFjay10cmFjZS5qczoKKwogMjAxOS0wMy0yOSAgVGFkZXUgWmFnYWxsbyAgPHR6YWdhbGxv
QGFwcGxlLmNvbT4KIAogICAgICAgICBBc3NlcnRpb24gZmFpbGVkIGluIEpTQzo6Y3JlYXRlRXJy
b3IKSW5kZXg6IEpTVGVzdHMvd2FzbS9mdW5jdGlvbi10ZXN0cy9zdGFjay10cmFjZS5qcwo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBKU1Rlc3RzL3dhc20vZnVuY3Rpb24tdGVzdHMvc3RhY2stdHJhY2UuanMJKHJl
dmlzaW9uIDI0Mzc4MCkKKysrIEpTVGVzdHMvd2FzbS9mdW5jdGlvbi10ZXN0cy9zdGFjay10cmFj
ZS5qcwkod29ya2luZyBjb3B5KQpAQCAtNDMsMTEgKzQzLDE2IEBAIGZvciAobGV0IGkgPSAwOyBp
IDwgMTAwMDA7ICsraSkgewogICAgIHN0YWNrdHJhY2UgPSBzdGFja3RyYWNlLnNwbGl0KCJcbiIp
OwogICAgIGFzc2VydC50cnV0aHkoc3RhY2t0cmFjZVswXS5pbmRleE9mKCJpbXAiKSAhPT0gLTEp
OyAvLyB0aGUgYXJyb3cgZnVuY3Rpb24gaW1wb3J0IG5hbWVkICJpbXAiLgogICAgIGFzc2VydC5l
cShzdGFja3RyYWNlWzFdLCAid2FzbS1zdHViQFt3YXNtIGNvZGVdIik7IC8vIHRoZSB3YXNtLT5q
cyBzdHViCi0gICAgYXNzZXJ0LmVxKHN0YWNrdHJhY2VbMl0sICI8Pz4ud2FzbS1mdW5jdGlvbls0
XUBbd2FzbSBjb2RlXSIpOwotICAgIGFzc2VydC5lcShzdGFja3RyYWNlWzNdLCAiPD8+Lndhc20t
ZnVuY3Rpb25bMl1AW3dhc20gY29kZV0iKTsKLSAgICBhc3NlcnQuZXEoc3RhY2t0cmFjZVs0XSwg
Ijw/Pi53YXNtLWZ1bmN0aW9uWzNdQFt3YXNtIGNvZGVdIik7Ci0gICAgYXNzZXJ0LmVxKHN0YWNr
dHJhY2VbNV0sICI8Pz4ud2FzbS1mdW5jdGlvblsxXUBbd2FzbSBjb2RlXSIpOwotICAgIGFzc2Vy
dC5lcShzdGFja3RyYWNlWzZdLCAid2FzbS1zdHViQFt3YXNtIGNvZGVdIik7IC8vIHdhc20gZW50
cnkKLQorICAgIGxldCBmb3VuZCA9IGZhbHNlOworICAgIGZvciAobGV0IGkgPSAwOyBpIDwgc3Rh
Y2t0cmFjZS5sZW5ndGg7ICsraSkgeworICAgICAgICBsZXQgc3RyID0gc3RhY2t0cmFjZVtpXTsK
KyAgICAgICAgaWYgKHN0ciAhPT0gIjw/Pi53YXNtLWZ1bmN0aW9uWzRdQFt3YXNtIGNvZGVdIikK
KyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICBmb3VuZCA9IHRydWU7CisgICAgICAgIGFz
c2VydC5lcShzdGFja3RyYWNlW2kgKyAxXSwgIjw/Pi53YXNtLWZ1bmN0aW9uWzJdQFt3YXNtIGNv
ZGVdIik7CisgICAgICAgIGFzc2VydC5lcShzdGFja3RyYWNlW2kgKyAyXSwgIjw/Pi53YXNtLWZ1
bmN0aW9uWzNdQFt3YXNtIGNvZGVdIik7CisgICAgICAgIGFzc2VydC5lcShzdGFja3RyYWNlW2kg
KyAzXSwgIjw/Pi53YXNtLWZ1bmN0aW9uWzFdQFt3YXNtIGNvZGVdIik7CisgICAgfQorICAgIGFz
c2VydC50cnV0aHkoZm91bmQpOwogICAgIHN0YWNrdHJhY2UgPSBudWxsOwogfQpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvQ2hhbmdlTG9nCShyZXZpc2lvbiAyNDM3ODApCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTE0IEBACisyMDE5LTA0
LTAzICBTYWFtIGJhcmF0aSAgPHNiYXJhdGlAYXBwbGUuY29tPgorCisgICAgICAgIFRlYWNoIENh
bGwgSUNzIGhvdyB0byBjYWxsIFdhc20KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTE5NjM4NworCisgICAgICAgIFJldmlld2VkIGJ5IEZpbGlwIFBpemxv
LgorCisgICAgICAgIFRoaXMgcGF0Y2ggdGVhY2hlcyBKUyB0byBjYWxsIFdhc20gd2l0aG91dCBn
b2luZyB0aHJvdWdoIHRoZSBuYXRpdmUgdGh1bmsuCisgICAgICAgIEN1cnJlbnRseSwgd2UgZW1p
dCBhIEpJVCAiSlMiIGNhbGxlZSBzdHViIHdoaWNoIG1hcnNoYWxzIGFyZ3VtZW50cyBmcm9tCisg
ICAgICAgIEpTIHRvIFdhc20uIExpa2UgdGhlIG5hdGl2ZSB2ZXJzaW9uIG9mIHRoaXMsIHRoaXMg
dGh1bmsgaXMgcmVzcG9uc2libGUKKyAgICAgICAgZm9yIHNhdmluZyBhbmQgcmVzdG9yaW5nIHRo
ZSBWTSdzIGN1cnJlbnQgV2FzbSBjb250ZXh0LiBJbnN0ZWFkIG9mIGVtaXR0aW5nCisgICAgICAg
IGFuIGV4Y2VwdGlvbiBoYW5kbGVyLCB3ZSBhbHNvIHRlYWNoIHRoZSB1bndpbmRlciBob3cgdG8g
cmVhZCB0aGUgcHJldmlvdXMKKyAgICAgICAgd2FzbSBjb250ZXh0IHRvIHJlc3RvcmUgaXQgYXMg
aXQgdW53aW5kd3MgcGFzdCB0aGlzIGZyYW1lLgorICAgICAgICAKKyAgICAgICAgVGhpcyBwYXRj
aCBpcyBzdHJhaWdodCBmb3J3YXJkLCBhbmQgbGVhdmVzIHNvbWUgYXJlYXMgZm9yIHBlcmYgaW1w
cm92ZW1lbnQ6CisgICAgICAgIC0gV2UgY2FuIHRlYWNoIHRoZSBERkcvRlRMIHRvIGRpcmVjdGx5
IHVzZSB0aGUgV2FzbSBjYWxsaW5nIGNvbnZlbnRpb24gd2hlbgorICAgICAgICAgIGl0IGtub3dz
IGl0J3MgY2FsbGluZyBhIHNpbmdsZSBXYXNtIGZ1bmN0aW9uLiBUaGlzIHdheSB3ZSBkb24ndCBz
aHVmZmxlCisgICAgICAgICAgcmVnaXN0ZXJzIHRvIHRoZSBzdGFjayBhbmQgdGhlbiBiYWNrIGlu
dG8gcmVnaXN0ZXJzLgorICAgICAgICAtIFdlIGJhaWwgb3V0IHRvIHRoZSBzbG93IHBhdGggZm9y
IG1pc21hdGNoZWQgYXJpdHkuIEkgb3BlbmVkIGEgYnVnIHRvIGZpeAorICAgICAgICAgIG9wdGlt
aXplIGFyaXR5IGNoZWNrIGZhaWx1cmVzOiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MTk2NTY0CisgICAgICAgIC0gV2UgYmFpbCBvdXQgdG8gdGhlIHNsb3cgcGF0aCBE
b3VibGUgSlNWYWx1ZXMgZmxvd2luZyBpbnRvIGkzMiBhcmd1bWVudHMuCisgICAgICAgICAgV2Ug
c2hvdWxkIHRlYWNoIHRoaXMgdGh1bmsgaG93IHRvIGRvIHRoYXQgY29udmVyc2lvbiBkaXJlY3Rs
eS4KKyAgICAgICAgCisgICAgICAgIFRoaXMgcGF0Y2ggYWxzbyByZWZhY3RvcnMgdGhlIGNvZGUg
dG8gZXhwbGljaXRseSBoYXZlIGEgc2luZ2xlIHBpbm5lZCBzaXplIHJlZ2lzdGVyLgorICAgICAg
ICBXZSB1c2VkIHByZXRlbmQgaW4gc29tZSBwbGFjZXMgdGhhdCB3ZSBjb3VsZCBoYXZlIG1vcmUg
dGhhbiBvbmUgcGlubmVkIHNpemUgcmVnaXN0ZXIuCisgICAgICAgIEhvd2V2ZXIsIHRoZXJlIHdh
cyBvdGhlciBjb2RlIHRoYXQganVzdCBhc3NlcnRlZCB0aGUgc2l6ZSB3YXMgb25lLiBUaGlzIHBh
dGNoIGp1c3QgcmlwcworICAgICAgICBvdXQgdGhpcyBjb2RlIHNpbmNlIHdlIG5ldmVyIG1vdmVk
IHRvIGhhdmluZyBtb3JlIHRoYW4gb25lIHBpbm5lZCBzaXplIHJlZ2lzdGVyLiBEb2luZworICAg
ICAgICB0aGlzIHJlZmFjdG9yaW5nIGNsZWFucyB1cCB0aGUgdmFyaW91cyBwbGFjZXMgd2hlcmUg
d2Ugc2V0IHVwIHRoZSBzaXplIHJlZ2lzdGVyLgorICAgICAgICAKKyAgICAgICAgVGhpcyBwYXRj
aCBpcyBhIDUwLTYwJSBwcm9ncmVzc2lvbiBvbiBKZXRTdHJlYW0gMidzIHJpY2hhcmRzLXdhc20u
CisKKyAgICAgICAgKiBKYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgor
ICAgICAgICAqIFNvdXJjZXMudHh0OgorICAgICAgICAqIGFzc2VtYmxlci9NYWNyb0Fzc2VtYmxl
ckNvZGVSZWYuaDoKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJDb2RlUmVmOjpvcGVyYXRv
cj0pOgorICAgICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxlckNvZGVSZWY6Ok1hY3JvQXNzZW1ibGVy
Q29kZVJlZik6CisgICAgICAgICogaW50ZXJwcmV0ZXIvSW50ZXJwcmV0ZXIuY3BwOgorICAgICAg
ICAoSlNDOjpVbndpbmRGdW5jdG9yOjpvcGVyYXRvcigpIGNvbnN0KToKKyAgICAgICAgKEpTQzo6
VW53aW5kRnVuY3Rvcjo6Y29weUNhbGxlZVNhdmVzVG9FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNCdWZm
ZXIgY29uc3QpOgorICAgICAgICAqIGludGVycHJldGVyL1N0YWNrVmlzaXRvci5jcHA6CisgICAg
ICAgIChKU0M6OlN0YWNrVmlzaXRvcjo6RnJhbWU6OmNhbGxlZVNhdmVSZWdpc3RlcnNGb3JVbndp
bmRpbmcpOgorICAgICAgICAoSlNDOjpTdGFja1Zpc2l0b3I6OkZyYW1lOjpjYWxsZWVTYXZlUmVn
aXN0ZXJzKTogRGVsZXRlZC4KKyAgICAgICAgKiBpbnRlcnByZXRlci9TdGFja1Zpc2l0b3IuaDoK
KyAgICAgICAgKiBqaXQvSklUT3BlcmF0aW9ucy5jcHA6CisgICAgICAgICogaml0L1JlZ2lzdGVy
U2V0LmNwcDoKKyAgICAgICAgKEpTQzo6UmVnaXN0ZXJTZXQ6OnJ1bnRpbWVUYWdSZWdpc3RlcnMp
OgorICAgICAgICAoSlNDOjpSZWdpc3RlclNldDo6c3BlY2lhbFJlZ2lzdGVycyk6CisgICAgICAg
IChKU0M6OlJlZ2lzdGVyU2V0OjpydW50aW1lUmVnaXN0ZXJzKTogRGVsZXRlZC4KKyAgICAgICAg
KiBqaXQvUmVnaXN0ZXJTZXQuaDoKKyAgICAgICAgKiBqaXQvUmVwYXRjaC5jcHA6CisgICAgICAg
IChKU0M6OmxpbmtQb2x5bW9ycGhpY0NhbGwpOgorICAgICAgICAqIHJ1bnRpbWUvSlNGdW5jdGlv
bi5jcHA6CisgICAgICAgIChKU0M6OmdldENhbGN1bGF0ZWREaXNwbGF5TmFtZSk6CisgICAgICAg
ICogcnVudGltZS9KU0dsb2JhbE9iamVjdC5jcHA6CisgICAgICAgIChKU0M6OkpTR2xvYmFsT2Jq
ZWN0Ojppbml0KToKKyAgICAgICAgKEpTQzo6SlNHbG9iYWxPYmplY3Q6OnZpc2l0Q2hpbGRyZW4p
OgorICAgICAgICAqIHJ1bnRpbWUvSlNHbG9iYWxPYmplY3QuaDoKKyAgICAgICAgKEpTQzo6SlNH
bG9iYWxPYmplY3Q6OmpzVG9XYXNtSUNDYWxsZWVTdHJ1Y3R1cmUgY29uc3QpOgorICAgICAgICAq
IHJ1bnRpbWUvVk0uY3BwOgorICAgICAgICAoSlNDOjpWTTo6Vk0pOgorICAgICAgICAqIHJ1bnRp
bWUvVk0uaDoKKyAgICAgICAgKiB3YXNtL1dhc21BaXJJUkdlbmVyYXRvci5jcHA6CisgICAgICAg
IChKU0M6Oldhc206OkFpcklSR2VuZXJhdG9yOjpBaXJJUkdlbmVyYXRvcik6CisgICAgICAgIChK
U0M6Oldhc206OkFpcklSR2VuZXJhdG9yOjpyZXN0b3JlV2ViQXNzZW1ibHlHbG9iYWxTdGF0ZSk6
CisgICAgICAgIChKU0M6Oldhc206OkFpcklSR2VuZXJhdG9yOjphZGRDYWxsSW5kaXJlY3QpOgor
ICAgICAgICAqIHdhc20vV2FzbUIzSVJHZW5lcmF0b3IuY3BwOgorICAgICAgICAoSlNDOjpXYXNt
OjpCM0lSR2VuZXJhdG9yOjpCM0lSR2VuZXJhdG9yKToKKyAgICAgICAgKEpTQzo6V2FzbTo6QjNJ
UkdlbmVyYXRvcjo6cmVzdG9yZVdlYkFzc2VtYmx5R2xvYmFsU3RhdGUpOgorICAgICAgICAoSlND
OjpXYXNtOjpCM0lSR2VuZXJhdG9yOjphZGRDYWxsSW5kaXJlY3QpOgorICAgICAgICAqIHdhc20v
V2FzbUJpbmRpbmcuY3BwOgorICAgICAgICAoSlNDOjpXYXNtOjp3YXNtVG9XYXNtKToKKyAgICAg
ICAgKiB3YXNtL1dhc21Db250ZXh0Lmg6CisgICAgICAgIChKU0M6Oldhc206OkNvbnRleHQ6OnBv
aW50ZXJUb0luc3RhbmNlKToKKyAgICAgICAgKiB3YXNtL1dhc21Db250ZXh0SW5saW5lcy5oOgor
ICAgICAgICAoSlNDOjpXYXNtOjpDb250ZXh0OjpzdG9yZSk6CisgICAgICAgICogd2FzbS9XYXNt
TWVtb3J5SW5mb3JtYXRpb24uY3BwOgorICAgICAgICAoSlNDOjpXYXNtOjpnZXRQaW5uZWRSZWdp
c3RlcnMpOgorICAgICAgICAoSlNDOjpXYXNtOjpQaW5uZWRSZWdpc3RlckluZm86OmdldCk6Cisg
ICAgICAgIChKU0M6Oldhc206OlBpbm5lZFJlZ2lzdGVySW5mbzo6UGlubmVkUmVnaXN0ZXJJbmZv
KToKKyAgICAgICAgKiB3YXNtL1dhc21NZW1vcnlJbmZvcm1hdGlvbi5oOgorICAgICAgICAoSlND
OjpXYXNtOjpQaW5uZWRSZWdpc3RlckluZm86OnRvU2F2ZSBjb25zdCk6CisgICAgICAgICogd2Fz
bS9XYXNtT01HUGxhbi5jcHA6CisgICAgICAgIChKU0M6Oldhc206Ok9NR1BsYW46OndvcmspOgor
ICAgICAgICAqIHdhc20vanMvSlNUb1dhc20uY3BwOgorICAgICAgICAoSlNDOjpXYXNtOjpjcmVh
dGVKU1RvV2FzbVdyYXBwZXIpOgorICAgICAgICAqIHdhc20vanMvSlNUb1dhc21JQ0NhbGxlZS5j
cHA6IEFkZGVkLgorICAgICAgICAoSlNDOjpKU1RvV2FzbUlDQ2FsbGVlOjpjcmVhdGUpOgorICAg
ICAgICAoSlNDOjpKU1RvV2FzbUlDQ2FsbGVlOjpjcmVhdGVTdHJ1Y3R1cmUpOgorICAgICAgICAo
SlNDOjpKU1RvV2FzbUlDQ2FsbGVlOjp2aXNpdENoaWxkcmVuKToKKyAgICAgICAgKiB3YXNtL2pz
L0pTVG9XYXNtSUNDYWxsZWUuaDogQWRkZWQuCisgICAgICAgIChKU0M6OkpTVG9XYXNtSUNDYWxs
ZWU6OmZ1bmN0aW9uKToKKyAgICAgICAgKEpTQzo6SlNUb1dhc21JQ0NhbGxlZTo6SlNUb1dhc21J
Q0NhbGxlZSk6CisgICAgICAgICogd2FzbS9qcy9XZWJBc3NlbWJseUZ1bmN0aW9uLmNwcDoKKyAg
ICAgICAgKEpTQzo6V2ViQXNzZW1ibHlGdW5jdGlvbjo6dXNlVGFnUmVnaXN0ZXJzIGNvbnN0KToK
KyAgICAgICAgKEpTQzo6V2ViQXNzZW1ibHlGdW5jdGlvbjo6Y2FsbGVlU2F2ZXMgY29uc3QpOgor
ICAgICAgICAoSlNDOjpXZWJBc3NlbWJseUZ1bmN0aW9uOjp1c2VkQ2FsbGVlU2F2ZVJlZ2lzdGVy
cyBjb25zdCk6CisgICAgICAgIChKU0M6OldlYkFzc2VtYmx5RnVuY3Rpb246OnByZXZpb3VzSW5z
dGFuY2VPZmZzZXQgY29uc3QpOgorICAgICAgICAoSlNDOjpXZWJBc3NlbWJseUZ1bmN0aW9uOjpw
cmV2aW91c0luc3RhbmNlKToKKyAgICAgICAgKEpTQzo6V2ViQXNzZW1ibHlGdW5jdGlvbjo6anND
YWxsRW50cnlwb2ludFNsb3cpOgorICAgICAgICAoSlNDOjpXZWJBc3NlbWJseUZ1bmN0aW9uOjp2
aXNpdENoaWxkcmVuKToKKyAgICAgICAgKEpTQzo6V2ViQXNzZW1ibHlGdW5jdGlvbjo6ZGVzdHJv
eSk6CisgICAgICAgICogd2FzbS9qcy9XZWJBc3NlbWJseUZ1bmN0aW9uLmg6CisgICAgICAgICog
d2FzbS9qcy9XZWJBc3NlbWJseUZ1bmN0aW9uSGVhcENlbGxUeXBlLmNwcDogQWRkZWQuCisgICAg
ICAgIChKU0M6OldlYkFzc2VtYmx5RnVuY3Rpb25EZXN0cm95RnVuYzo6b3BlcmF0b3IoKSBjb25z
dCk6CisgICAgICAgIChKU0M6OldlYkFzc2VtYmx5RnVuY3Rpb25IZWFwQ2VsbFR5cGU6OldlYkFz
c2VtYmx5RnVuY3Rpb25IZWFwQ2VsbFR5cGUpOgorICAgICAgICAoSlNDOjpXZWJBc3NlbWJseUZ1
bmN0aW9uSGVhcENlbGxUeXBlOjp+V2ViQXNzZW1ibHlGdW5jdGlvbkhlYXBDZWxsVHlwZSk6Cisg
ICAgICAgIChKU0M6OldlYkFzc2VtYmx5RnVuY3Rpb25IZWFwQ2VsbFR5cGU6OmZpbmlzaFN3ZWVw
KToKKyAgICAgICAgKEpTQzo6V2ViQXNzZW1ibHlGdW5jdGlvbkhlYXBDZWxsVHlwZTo6ZGVzdHJv
eSk6CisgICAgICAgICogd2FzbS9qcy9XZWJBc3NlbWJseUZ1bmN0aW9uSGVhcENlbGxUeXBlLmg6
IEFkZGVkLgorICAgICAgICAqIHdhc20vanMvV2ViQXNzZW1ibHlQcm90b3R5cGUuaDoKKwogMjAx
OS0wNC0wMiAgTWljaGFlbCBTYWJvZmYgIDxtc2Fib2ZmQGFwcGxlLmNvbT4KIAogICAgICAgICBD
cmFzaCBpbiBPcHRpb25zOjpzZXRPcHRpb25zKCkgdXNpbmcgLS1jb25maWdGaWxlIG9wdGlvbiBh
bmQgbGliZ21hbGxvYwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL1NvdXJjZXMudHh0Cj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9Tb3VyY2VzLnR4dAkocmV2aXNpb24g
MjQzNzgwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL1NvdXJjZXMudHh0CSh3b3JraW5nIGNv
cHkpCkBAIC0xMDEwLDYgKzEwMTAsNyBAQCB3YXNtL1dhc21Xb3JrbGlzdC5jcHAKIAogd2FzbS9q
cy9KU1RvV2FzbS5jcHAKIHdhc20vanMvSlNUb1dhc20uaAord2FzbS9qcy9KU1RvV2FzbUlDQ2Fs
bGVlLmNwcAogd2FzbS9qcy9KU1dlYkFzc2VtYmx5LmNwcAogd2FzbS9qcy9KU1dlYkFzc2VtYmx5
Q29kZUJsb2NrLmNwcAogd2FzbS9qcy9KU1dlYkFzc2VtYmx5Q29kZUJsb2NrSGVhcENlbGxUeXBl
LmNwcApAQCAtMTAyNiw2ICsxMDI3LDcgQEAgd2FzbS9qcy9XZWJBc3NlbWJseUNvbXBpbGVFcnJv
ckNvbnN0cnVjdAogd2FzbS9qcy9XZWJBc3NlbWJseUNvbXBpbGVFcnJvclByb3RvdHlwZS5jcHAK
IHdhc20vanMvV2ViQXNzZW1ibHlGdW5jdGlvbi5jcHAKIHdhc20vanMvV2ViQXNzZW1ibHlGdW5j
dGlvbkJhc2UuY3BwCit3YXNtL2pzL1dlYkFzc2VtYmx5RnVuY3Rpb25IZWFwQ2VsbFR5cGUuY3Bw
CiB3YXNtL2pzL1dlYkFzc2VtYmx5SW5zdGFuY2VDb25zdHJ1Y3Rvci5jcHAKIHdhc20vanMvV2Vi
QXNzZW1ibHlJbnN0YW5jZVByb3RvdHlwZS5jcHAKIHdhc20vanMvV2ViQXNzZW1ibHlMaW5rRXJy
b3JDb25zdHJ1Y3Rvci5jcHAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0
Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZp
c2lvbiAyNDM3ODApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNv
ZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAtODcyLDYgKzg3Miw3IEBA
CiAJCTRCQUEwN0NFQjgxRjQ5QTI5NkUwMjIwMyAvKiBXYXNtU2lnbmF0dXJlSW5saW5lcy5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMzBBNUY0MDNGMTFD
NEY1OTlDRDU5NkQ1IC8qIFdhc21TaWduYXR1cmVJbmxpbmVzLmggKi87IHNldHRpbmdzID0ge0FU
VFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNTIxMTMxRjcxRjgyQkYxNDAwN0NDRUVF
IC8qIFBvbHlQcm90b0FjY2Vzc0NoYWluLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSA1MjExMzFGNjFGODJCRjExMDA3Q0NFRUUgLyogUG9seVByb3RvQWNj
ZXNzQ2hhaW4uaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9
OwogCQk1MjEzMjI0NjFFQ0JDRTgyMDBGNjU2MTUgLyogV2ViQXNzZW1ibHlGdW5jdGlvbkJhc2Uu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUyMTMyMjQ0
MUVDQkNFODIwMEY2NTYxNSAvKiBXZWJBc3NlbWJseUZ1bmN0aW9uQmFzZS5oICovOyB9OworCQk1
MjNGRDg4RTIyNTU2NkM5MDAzQjNEQ0MgLyogV2ViQXNzZW1ibHlGdW5jdGlvbkhlYXBDZWxsVHlw
ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTIzRkQ4
OEMyMjU1NjZDMzAwM0IzRENDIC8qIFdlYkFzc2VtYmx5RnVuY3Rpb25IZWFwQ2VsbFR5cGUuaCAq
LzsgfTsKIAkJNTI0RTlENzMyMjA5MkI1MjAwQTZCRUVFIC8qIEFpckFsbG9jYXRlUmVnaXN0ZXJz
QW5kU3RhY2tBbmRHZW5lcmF0ZUNvZGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDUyNEU5RDcyMjIwOTJCNDYwMEE2QkVFRSAvKiBBaXJBbGxvY2F0ZVJl
Z2lzdGVyc0FuZFN0YWNrQW5kR2VuZXJhdGVDb2RlLmggKi87IH07CiAJCTUyNTBEMkQyMUU4REEw
NUEwMDI5QTkzMiAvKiBXYXNtVGh1bmtzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSA1MjUwRDJEMDFFOERBMDVBMDAyOUE5MzIgLyogV2FzbVRodW5rcy5o
ICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTUyNUMw
RERBMUU5MzU4NDcwMDIxODRDRCAvKiBXYXNtQ2FsbGVlLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MjVDMEREODFFOTM1ODQ3MDAyMTg0Q0QgLyogV2Fz
bUNhbGxlZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07
CkBAIC04NzksNiArODgwLDcgQEAKIAkJNTI2NzhGOEYxQTAzMTAwOTAwNkEzMDZEIC8qIEJhc2lj
QmxvY2tMb2NhdGlvbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gNTI2NzhGOEQxQTAzMTAwOTAwNkEzMDZEIC8qIEJhc2ljQmxvY2tMb2NhdGlvbi5oICov
OyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTUyNjc4Rjkx
MUEwNDE3N0MwMDZBMzA2RCAvKiBDb250cm9sRmxvd1Byb2ZpbGVyLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MjY3OEY5MDFBMDQxNzdDMDA2QTMwNkQg
LyogQ29udHJvbEZsb3dQcm9maWxlci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFBy
aXZhdGUsICk7IH07IH07CiAJCTUyNkFDNEI3MUU5NzdDNUQwMDM1MDBFMSAvKiBXYXNtQ29kZUJs
b2NrLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MjZB
QzRCNTFFOTc3QzVEMDAzNTAwRTEgLyogV2FzbUNvZGVCbG9jay5oICovOyBzZXR0aW5ncyA9IHtB
VFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTUyN0NFMzU0MjI1NTVGRTUwMEM2RjM4
MiAvKiBKU1RvV2FzbUlDQ2FsbGVlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA1MjdDRTM1MzIyNTU1RkREMDBDNkYzODIgLyogSlNUb1dhc21JQ0NhbGxl
ZS5oICovOyB9OwogCQk1Mjg0N0FEQzIxRkZCODY5MDA2MUE5REIgLyogV2FzbUFpcklSR2VuZXJh
dG9yLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1Mjg0
N0FEQTIxRkZCODYzMDA2MUE5REIgLyogV2FzbUFpcklSR2VuZXJhdG9yLmggKi87IH07CiAJCTUy
QjMxMEZCMTk3NEFFNjEwMDgwODU3QyAvKiBGdW5jdGlvbkhhc0V4ZWN1dGVkQ2FjaGUuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUyQjMxMEZBMTk3NEFF
NjEwMDgwODU3QyAvKiBGdW5jdGlvbkhhc0V4ZWN1dGVkQ2FjaGUuaCAqLzsgc2V0dGluZ3MgPSB7
QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk1MkIzMTEwMTE5NzVCNDY3MDA4MDg1
N0MgLyogVHlwZUxvY2F0aW9uQ2FjaGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDUyQjMxMTAwMTk3NUI0NjcwMDgwODU3QyAvKiBUeXBlTG9jYXRpb25D
YWNoZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CkBA
IC0zMzcwLDYgKzMzNzIsOCBAQAogCQk1MjExMzFGNjFGODJCRjExMDA3Q0NFRUUgLyogUG9seVBy
b3RvQWNjZXNzQ2hhaW4uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUG9seVByb3RvQWNjZXNzQ2hhaW4uaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTIxMzIyNDMxRUNCQ0U4MjAwRjY1NjE1IC8q
IFdlYkFzc2VtYmx5RnVuY3Rpb25CYXNlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgbmFtZSA9IFdlYkFzc2VtYmx5RnVuY3Rpb25CYXNlLmNwcDsgcGF0aCA9IGpzL1dlYkFzc2Vt
Ymx5RnVuY3Rpb25CYXNlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTIxMzIy
NDQxRUNCQ0U4MjAwRjY1NjE1IC8qIFdlYkFzc2VtYmx5RnVuY3Rpb25CYXNlLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IFdlYkFzc2VtYmx5RnVuY3Rpb25CYXNlLmg7IHBhdGgg
PSBqcy9XZWJBc3NlbWJseUZ1bmN0aW9uQmFzZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OworCQk1MjNGRDg4QzIyNTU2NkMzMDAzQjNEQ0MgLyogV2ViQXNzZW1ibHlGdW5jdGlvbkhlYXBD
ZWxsVHlwZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBXZWJBc3NlbWJseUZ1bmN0aW9uSGVhcENlbGxUeXBl
Lmg7IHBhdGggPSBqcy9XZWJBc3NlbWJseUZ1bmN0aW9uSGVhcENlbGxUeXBlLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CisJCTUyM0ZEODhEMjI1NTY2QzQwMDNCM0RDQyAvKiBXZWJBc3Nl
bWJseUZ1bmN0aW9uSGVhcENlbGxUeXBlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IFdlYkFzc2Vt
Ymx5RnVuY3Rpb25IZWFwQ2VsbFR5cGUuY3BwOyBwYXRoID0ganMvV2ViQXNzZW1ibHlGdW5jdGlv
bkhlYXBDZWxsVHlwZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUyNEU5RDcx
MjIwOTJCNDUwMEE2QkVFRSAvKiBBaXJBbGxvY2F0ZVJlZ2lzdGVyc0FuZFN0YWNrQW5kR2VuZXJh
dGVDb2RlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEFpckFsbG9jYXRlUmVnaXN0ZXJzQW5kU3Rh
Y2tBbmRHZW5lcmF0ZUNvZGUuY3BwOyBwYXRoID0gYjMvYWlyL0FpckFsbG9jYXRlUmVnaXN0ZXJz
QW5kU3RhY2tBbmRHZW5lcmF0ZUNvZGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQk1MjRFOUQ3MjIyMDkyQjQ2MDBBNkJFRUUgLyogQWlyQWxsb2NhdGVSZWdpc3RlcnNBbmRTdGFj
a0FuZEdlbmVyYXRlQ29kZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBBaXJBbGxvY2F0ZVJlZ2lzdGVyc0Fu
ZFN0YWNrQW5kR2VuZXJhdGVDb2RlLmg7IHBhdGggPSBiMy9haXIvQWlyQWxsb2NhdGVSZWdpc3Rl
cnNBbmRTdGFja0FuZEdlbmVyYXRlQ29kZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQk1MjUwRDJDRjFFOERBMDVBMDAyOUE5MzIgLyogV2FzbVRodW5rcy5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXYXNtVGh1bmtzLmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKQEAgLTMzODIsNiArMzM4Niw4IEBACiAJCTUyNkFDNEI0MUU5NzdDNUQwMDM1
MDBFMSAvKiBXYXNtQ29kZUJsb2NrLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
cGF0aCA9IFdhc21Db2RlQmxvY2suY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1
MjZBQzRCNTFFOTc3QzVEMDAzNTAwRTEgLyogV2FzbUNvZGVCbG9jay5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBXYXNtQ29kZUJsb2NrLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTUyNzc3M0REMUFBRjgzQUMwMEJERTdFOCAvKiBSdW50aW1lVHlwZS5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBSdW50aW1lVHlwZS5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTUyN0NFMzUyMjI1NTVGREQwMEM2RjM4MiAvKiBKU1Rv
V2FzbUlDQ2FsbGVlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEpTVG9XYXNtSUNDYWxsZWUuY3Bw
OyBwYXRoID0ganMvSlNUb1dhc21JQ0NhbGxlZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CisJCTUyN0NFMzUzMjI1NTVGREQwMEM2RjM4MiAvKiBKU1RvV2FzbUlDQ2FsbGVlLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgbmFtZSA9IEpTVG9XYXNtSUNDYWxsZWUuaDsgcGF0aCA9IGpzL0pTVG9XYXNtSUNDYWxs
ZWUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTI4NDdBRDkyMUZGQjg2MzAwNjFB
OURCIC8qIFdhc21BaXJJUkdlbmVyYXRvci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXYXNtQWly
SVJHZW5lcmF0b3IuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1Mjg0N0FEQTIx
RkZCODYzMDA2MUE5REIgLyogV2FzbUFpcklSR2VuZXJhdG9yLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdh
c21BaXJJUkdlbmVyYXRvci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1MkIzMTBG
QTE5NzRBRTYxMDA4MDg1N0MgLyogRnVuY3Rpb25IYXNFeGVjdXRlZENhY2hlLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IEZ1bmN0aW9uSGFzRXhlY3V0ZWRDYWNoZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwpAQCAtODI0OSw2ICs4MjU1LDggQEAKIAkJCWNoaWxkcmVuID0gKAogCQkJCUFEOERENkQw
MUY2NzA4QTMwMDA0RUI1MiAvKiBKU1RvV2FzbS5jcHAgKi8sCiAJCQkJQUQ4REQ2Q0YxRjY3MDg5
RjAwMDRFQjUyIC8qIEpTVG9XYXNtLmggKi8sCisJCQkJNTI3Q0UzNTIyMjU1NUZERDAwQzZGMzgy
IC8qIEpTVG9XYXNtSUNDYWxsZWUuY3BwICovLAorCQkJCTUyN0NFMzUzMjI1NTVGREQwMEM2RjM4
MiAvKiBKU1RvV2FzbUlDQ2FsbGVlLmggKi8sCiAJCQkJQUREMDlBRjIxRjYyNDgyOTAwMTMxM0My
IC8qIEpTV2ViQXNzZW1ibHkuY3BwICovLAogCQkJCUFERDA5QUYzMUY2MjQ4MkUwMDEzMTNDMiAv
KiBKU1dlYkFzc2VtYmx5LmggKi8sCiAJCQkJNTM4M0FBMkYxRTY1RThBMTAwQTUzMkZDIC8qIEpT
V2ViQXNzZW1ibHlDb2RlQmxvY2suY3BwICovLApAQCAtODI3OCw2ICs4Mjg2LDggQEAKIAkJCQlB
RDJGQ0JCMzFEQjU4REE0MDBCM0U3MzYgLyogV2ViQXNzZW1ibHlDb21waWxlRXJyb3JQcm90b3R5
cGUuaCAqLywKIAkJCQlBRDQ5MzdDOTFEREQyNzM0MDA3N0M4MDcgLyogV2ViQXNzZW1ibHlGdW5j
dGlvbi5jcHAgKi8sCiAJCQkJQUQ0OTM3Q0ExREREMjczNDAwNzdDODA3IC8qIFdlYkFzc2VtYmx5
RnVuY3Rpb24uaCAqLywKKwkJCQk1MjNGRDg4RDIyNTU2NkM0MDAzQjNEQ0MgLyogV2ViQXNzZW1i
bHlGdW5jdGlvbkhlYXBDZWxsVHlwZS5jcHAgKi8sCisJCQkJNTIzRkQ4OEMyMjU1NjZDMzAwM0Iz
RENDIC8qIFdlYkFzc2VtYmx5RnVuY3Rpb25IZWFwQ2VsbFR5cGUuaCAqLywKIAkJCQk1MjEzMjI0
MzFFQ0JDRTgyMDBGNjU2MTUgLyogV2ViQXNzZW1ibHlGdW5jdGlvbkJhc2UuY3BwICovLAogCQkJ
CTUyMTMyMjQ0MUVDQkNFODIwMEY2NTYxNSAvKiBXZWJBc3NlbWJseUZ1bmN0aW9uQmFzZS5oICov
LAogCQkJCUFEMkZDQkI0MURCNThEQTQwMEIzRTczNiAvKiBXZWJBc3NlbWJseUluc3RhbmNlQ29u
c3RydWN0b3IuY3BwICovLApAQCAtODU5NSw2ICs4NjA1LDcgQEAKIAkJCQkwRjVCRjE2NDFGMjMx
NzEyMDAyOUQ5MUQgLyogQjNIb2lzdExvb3BJbnZhcmlhbnRWYWx1ZXMuaCBpbiBIZWFkZXJzICov
LAogCQkJCURDNjlCOTlEMUQxNUY5MTQwMDJFM0MwMCAvKiBCM0luZmVyU3dpdGNoZXMuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTBGRUM4NUJBMUJFMTQ2MkYwMDgwRkY3NCAvKiBCM0luc2VydGlvblNl
dC5oIGluIEhlYWRlcnMgKi8sCisJCQkJNTIzRkQ4OEUyMjU1NjZDOTAwM0IzRENDIC8qIFdlYkFz
c2VtYmx5RnVuY3Rpb25IZWFwQ2VsbFR5cGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGRUM4NUJC
MUJFMTQ2MkYwMDgwRkY3NCAvKiBCM0luc2VydGlvblNldElubGluZXMuaCBpbiBIZWFkZXJzICov
LAogCQkJCTBGREY2N0QyMUQ5QzZEMjcwMDFCOTgyNSAvKiBCM0tpbmQuaCBpbiBIZWFkZXJzICov
LAogCQkJCTQzNkU1NDUzMUM0NjhFNzQwMEI1QUY3MyAvKiBCM0xlZ2FsaXplTWVtb3J5T2Zmc2V0
cy5oIGluIEhlYWRlcnMgKi8sCkBAIC04Nzg3LDYgKzg3OTgsNyBAQAogCQkJCTQ3M0RBNEE0NzY0
QzQ1RkU4NzFCMDQ4NSAvKiBEZWZpbmVQcm9wZXJ0eUF0dHJpYnV0ZXMuaCBpbiBIZWFkZXJzICov
LAogCQkJCTBGQkI3M0JCMURFRjg2NDUwMDJDMDA5RSAvKiBEZWxldGVBbGxDb2RlRWZmb3J0Lmgg
aW4gSGVhZGVycyAqLywKIAkJCQkwRjk2MzAzQzFENDE5MkNEMDA1NjA5RDkgLyogRGVzdHJ1Y3Rp
b25Nb2RlLmggaW4gSGVhZGVycyAqLywKKwkJCQk1MjdDRTM1NDIyNTU1RkU1MDBDNkYzODIgLyog
SlNUb1dhc21JQ0NhbGxlZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTc3QTQyM0UxN0EwQkJGRDAw
QThEQjgxIC8qIERGR0Fic3RyYWN0SGVhcC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTcwNEQ5MDMx
N0EwQkFBODAwNkJBNTU0IC8qIERGR0Fic3RyYWN0SW50ZXJwcmV0ZXIuaCBpbiBIZWFkZXJzICov
LAogCQkJCTBGNUUwRkQ4MjA3QzcyNzMwMDk3RjBERSAvKiBERkdBYnN0cmFjdEludGVycHJldGVy
Q2xvYmJlclN0YXRlLmggaW4gSGVhZGVycyAqLywKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJDb2RlUmVmLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlckNvZGVSZWYuaAkocmV2aXNp
b24gMjQzNzgwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2Vt
YmxlckNvZGVSZWYuaAkod29ya2luZyBjb3B5KQpAQCAtMzgwLDYgKzM4MCwxNCBAQCBwdWJsaWM6
CiAgICAgICAgIEFTU0VSVChtX2V4ZWN1dGFibGVNZW1vcnktPnN0YXJ0KCkpOwogICAgICAgICBB
U1NFUlQobV9jb2RlUHRyKTsKICAgICB9CisKKyAgICB0ZW1wbGF0ZTxQdHJUYWcgb3RoZXJUYWc+
CisgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmJiBvcGVyYXRvcj0oY29uc3QgTWFjcm9Bc3NlbWJs
ZXJDb2RlUmVmPG90aGVyVGFnPiYgb3RoZXJDb2RlUmVmKQorICAgIHsKKyAgICAgICAgbV9jb2Rl
UHRyID0gTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPHRhZz46OmNyZWF0ZUZyb21FeGVjdXRhYmxlQWRk
cmVzcyhvdGhlckNvZGVSZWYuY29kZSgpLnRlbXBsYXRlIHJldGFnZ2VkRXhlY3V0YWJsZUFkZHJl
c3M8dGFnPigpKTsKKyAgICAgICAgbV9leGVjdXRhYmxlTWVtb3J5ID0gb3RoZXJDb2RlUmVmLm1f
ZXhlY3V0YWJsZU1lbW9yeTsKKyAgICAgICAgcmV0dXJuICp0aGlzOworICAgIH0KICAgICAKICAg
ICAvLyBVc2UgdGhpcyBvbmx5IHdoZW4geW91IGtub3cgdGhhdCB0aGUgY29kZVB0ciByZWZlcnMg
dG8gY29kZSB0aGF0IGlzCiAgICAgLy8gYWxyZWFkeSBiZWluZyBrZXB0IGFsaXZlIHRocm91Z2gg
c29tZSBvdGhlciBtZWFucy4gVHlwaWNhbGx5IHRoaXMgbWVhbnMKQEAgLTQ0Myw5ICs0NTEsOSBA
QCBwdWJsaWM6CiBwcml2YXRlOgogICAgIHRlbXBsYXRlPFB0clRhZyBvdGhlclRhZz4KICAgICBN
YWNyb0Fzc2VtYmxlckNvZGVSZWYoY29uc3QgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPG90aGVyVGFn
PiYgb3RoZXJDb2RlUmVmKQotICAgICAgICA6IG1fY29kZVB0cihNYWNyb0Fzc2VtYmxlckNvZGVQ
dHI8dGFnPjo6Y3JlYXRlRnJvbUV4ZWN1dGFibGVBZGRyZXNzKG90aGVyQ29kZVJlZi5jb2RlKCku
dGVtcGxhdGUgcmV0YWdnZWRFeGVjdXRhYmxlQWRkcmVzczx0YWc+KCkpKQotICAgICAgICAsIG1f
ZXhlY3V0YWJsZU1lbW9yeShvdGhlckNvZGVSZWYubV9leGVjdXRhYmxlTWVtb3J5KQotICAgIHsg
fQorICAgIHsKKyAgICAgICAgKnRoaXMgPSBvdGhlckNvZGVSZWY7CisgICAgfQogCiAgICAgTWFj
cm9Bc3NlbWJsZXJDb2RlUHRyPHRhZz4gbV9jb2RlUHRyOwogICAgIFJlZlB0cjxFeGVjdXRhYmxl
TWVtb3J5SGFuZGxlPiBtX2V4ZWN1dGFibGVNZW1vcnk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaW50ZXJwcmV0ZXIvSW50ZXJwcmV0ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9JbnRlcnByZXRlci5jcHAJKHJldmlzaW9uIDI0Mzc4
MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9JbnRlcnByZXRlci5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTU0OSw2ICs1NDksMTMgQEAgcHVibGljOgogICAgICAgICAgICAg
fQogICAgICAgICB9CiAKKyNpZiBFTkFCTEUoV0VCQVNTRU1CTFkpCisgICAgICAgIGlmICh2aXNp
dG9yLT5jYWxsZWUoKS5pc0NlbGwoKSkgeworICAgICAgICAgICAgaWYgKGF1dG8qIGpzVG9XYXNt
SUNDYWxsZWUgPSBqc0R5bmFtaWNDYXN0PEpTVG9XYXNtSUNDYWxsZWUqPihtX3ZtLCB2aXNpdG9y
LT5jYWxsZWUoKS5hc0NlbGwoKSkpCisgICAgICAgICAgICAgICAgbV92bS53YXNtQ29udGV4dC5z
dG9yZShqc1RvV2FzbUlDQ2FsbGVlLT5mdW5jdGlvbigpLT5wcmV2aW91c0luc3RhbmNlKG1fY2Fs
bEZyYW1lKSwgbV92bS5zb2Z0U3RhY2tMaW1pdCgpKTsKKyAgICAgICAgfQorI2VuZGlmCisKICAg
ICAgICAgbm90aWZ5RGVidWdnZXJPZlVud2luZGluZyhtX3ZtLCBtX2NhbGxGcmFtZSk7CiAKICAg
ICAgICAgY29weUNhbGxlZVNhdmVzVG9FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNCdWZmZXIodmlzaXRv
cik7CkBAIC01NjQsNyArNTcxLDcgQEAgcHJpdmF0ZToKICAgICB2b2lkIGNvcHlDYWxsZWVTYXZl
c1RvRW50cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVyKFN0YWNrVmlzaXRvciYgdmlzaXRvcikgY29u
c3QKICAgICB7CiAjaWYgIUVOQUJMRShDX0xPT1ApICYmIE5VTUJFUl9PRl9DQUxMRUVfU0FWRVNf
UkVHSVNURVJTID4gMAotICAgICAgICBjb25zdCBSZWdpc3RlckF0T2Zmc2V0TGlzdCogY3VycmVu
dENhbGxlZVNhdmVzID0gdmlzaXRvci0+Y2FsbGVlU2F2ZVJlZ2lzdGVycygpOworICAgICAgICBP
cHRpb25hbDxSZWdpc3RlckF0T2Zmc2V0TGlzdD4gY3VycmVudENhbGxlZVNhdmVzID0gdmlzaXRv
ci0+Y2FsbGVlU2F2ZVJlZ2lzdGVyc0ZvclVud2luZGluZygpOwogCiAgICAgICAgIGlmICghY3Vy
cmVudENhbGxlZVNhdmVzKQogICAgICAgICAgICAgcmV0dXJuOwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ludGVycHJldGVyL1N0YWNrVmlzaXRvci5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL1N0YWNrVmlzaXRvci5jcHAJKHJldmlzaW9u
IDI0Mzc4MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9TdGFja1Zpc2l0
b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMyw2ICszMyw3IEBACiAjaW5jbHVkZSAiSlNDSW5s
aW5lcy5oIgogI2luY2x1ZGUgIldhc21DYWxsZWUuaCIKICNpbmNsdWRlICJXYXNtSW5kZXhPck5h
bWUuaCIKKyNpbmNsdWRlICJXZWJBc3NlbWJseUZ1bmN0aW9uLmgiCiAjaW5jbHVkZSA8d3RmL3Rl
eHQvU3RyaW5nQnVpbGRlci5oPgogCiBuYW1lc3BhY2UgSlNDIHsKQEAgLTI1MiwxMCArMjUzLDEw
IEBAIFN0YWNrVmlzaXRvcjo6RnJhbWU6OkNvZGVUeXBlIFN0YWNrVmlzaXQKICAgICByZXR1cm4g
Q29kZVR5cGU6Okdsb2JhbDsKIH0KIAotY29uc3QgUmVnaXN0ZXJBdE9mZnNldExpc3QqIFN0YWNr
VmlzaXRvcjo6RnJhbWU6OmNhbGxlZVNhdmVSZWdpc3RlcnMoKQorT3B0aW9uYWw8UmVnaXN0ZXJB
dE9mZnNldExpc3Q+IFN0YWNrVmlzaXRvcjo6RnJhbWU6OmNhbGxlZVNhdmVSZWdpc3RlcnNGb3JV
bndpbmRpbmcoKQogewogICAgIGlmIChpc0lubGluZWRGcmFtZSgpKQotICAgICAgICByZXR1cm4g
bnVsbHB0cjsKKyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIAogI2lmICFFTkFCTEUoQ19M
T09QKSAmJiBOVU1CRVJfT0ZfQ0FMTEVFX1NBVkVTX1JFR0lTVEVSUyA+IDAKIApAQCAtMjYzLDE5
ICsyNjQsMjQgQEAgY29uc3QgUmVnaXN0ZXJBdE9mZnNldExpc3QqIFN0YWNrVmlzaXRvcgogICAg
IGlmIChpc1dhc21GcmFtZSgpKSB7CiAgICAgICAgIGlmIChjYWxsZWUoKS5pc0NlbGwoKSkgewog
ICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoaXNXZWJBc3NlbWJseVRvSlNDYWxsZWUoY2FsbGVl
KCkuYXNDZWxsKCkpKTsKLSAgICAgICAgICAgIHJldHVybiBudWxscHRyOworICAgICAgICAgICAg
cmV0dXJuIFdURjo6bnVsbG9wdDsKICAgICAgICAgfQogICAgICAgICBXYXNtOjpDYWxsZWUqIHdh
c21DYWxsZWUgPSBjYWxsZWUoKS5hc1dhc21DYWxsZWUoKTsKLSAgICAgICAgcmV0dXJuIHdhc21D
YWxsZWUtPmNhbGxlZVNhdmVSZWdpc3RlcnMoKTsKKyAgICAgICAgcmV0dXJuICp3YXNtQ2FsbGVl
LT5jYWxsZWVTYXZlUmVnaXN0ZXJzKCk7CisgICAgfQorCisgICAgaWYgKGNhbGxlZSgpLmlzQ2Vs
bCgpKSB7CisgICAgICAgIGlmIChhdXRvKiBqc1RvV2FzbUlDQ2FsbGVlID0ganNEeW5hbWljQ2Fz
dDxKU1RvV2FzbUlDQ2FsbGVlKj4oKmNhbGxlZSgpLmFzQ2VsbCgpLT52bSgpLCBjYWxsZWUoKS5h
c0NlbGwoKSkpCisgICAgICAgICAgICByZXR1cm4ganNUb1dhc21JQ0NhbGxlZS0+ZnVuY3Rpb24o
KS0+dXNlZENhbGxlZVNhdmVSZWdpc3RlcnMoKTsKICAgICB9CiAjZW5kaWYgLy8gRU5BQkxFKFdF
QkFTU0VNQkxZKQogCiAgICAgaWYgKENvZGVCbG9jayogY29kZUJsb2NrID0gdGhpcy0+Y29kZUJs
b2NrKCkpCi0gICAgICAgIHJldHVybiBjb2RlQmxvY2stPmNhbGxlZVNhdmVSZWdpc3RlcnMoKTsK
KyAgICAgICAgcmV0dXJuICpjb2RlQmxvY2stPmNhbGxlZVNhdmVSZWdpc3RlcnMoKTsKIAogI2Vu
ZGlmIC8vICFFTkFCTEUoQ19MT09QKSAmJiBOVU1CRVJfT0ZfQ0FMTEVFX1NBVkVTX1JFR0lTVEVS
UyA+IDAKIAotICAgIHJldHVybiBudWxscHRyOworICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiB9
CiAKIFN0cmluZyBTdGFja1Zpc2l0b3I6OkZyYW1lOjpmdW5jdGlvbk5hbWUoKSBjb25zdApJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL1N0YWNrVmlzaXRvci5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9TdGFja1Zpc2l0b3Iu
aAkocmV2aXNpb24gMjQzNzgwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVy
L1N0YWNrVmlzaXRvci5oCSh3b3JraW5nIGNvcHkpCkBAIC05NCw3ICs5NCw3IEBAIHB1YmxpYzoK
ICAgICAgICAgYm9vbCBoYXNMaW5lQW5kQ29sdW1uSW5mbygpIGNvbnN0OwogICAgICAgICBKU19F
WFBPUlRfUFJJVkFURSB2b2lkIGNvbXB1dGVMaW5lQW5kQ29sdW1uKHVuc2lnbmVkJiBsaW5lLCB1
bnNpZ25lZCYgY29sdW1uKSBjb25zdDsKIAotICAgICAgICBjb25zdCBSZWdpc3RlckF0T2Zmc2V0
TGlzdCogY2FsbGVlU2F2ZVJlZ2lzdGVycygpOworICAgICAgICBPcHRpb25hbDxSZWdpc3RlckF0
T2Zmc2V0TGlzdD4gY2FsbGVlU2F2ZVJlZ2lzdGVyc0ZvclVud2luZGluZygpOwogCiAgICAgICAg
IENsb25lZEFyZ3VtZW50cyogY3JlYXRlQXJndW1lbnRzKCk7CiAgICAgICAgIENhbGxGcmFtZSog
Y2FsbEZyYW1lKCkgY29uc3QgeyByZXR1cm4gbV9jYWxsRnJhbWU7IH0KSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRpb25zLmNwcAkocmV2aXNpb24gMjQzNzgwKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRpb25zLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtNzYsNiArNzYsNyBAQAogI2luY2x1ZGUgIlRodW5rR2VuZXJhdG9ycy5oIgogI2lu
Y2x1ZGUgIlR5cGVQcm9maWxlckxvZy5oIgogI2luY2x1ZGUgIlZNSW5saW5lcy5oIgorI2luY2x1
ZGUgIldlYkFzc2VtYmx5RnVuY3Rpb24uaCIKICNpbmNsdWRlIDx3dGYvSW5saW5lQVNNLmg+CiAK
IG5hbWVzcGFjZSBKU0MgewpAQCAtMTAzNiw5ICsxMDM3LDExIEBAIFNsb3dQYXRoUmV0dXJuVHlw
ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGkKIAogICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxKU0Vu
dHJ5UHRyVGFnPiBjb2RlUHRyOwogICAgIENvZGVCbG9jayogY29kZUJsb2NrID0gbnVsbHB0cjsK
LSAgICBpZiAoZXhlY3V0YWJsZS0+aXNIb3N0RnVuY3Rpb24oKSkKLSAgICAgICAgY29kZVB0ciA9
IGV4ZWN1dGFibGUtPmVudHJ5cG9pbnRGb3Ioa2luZCwgTXVzdENoZWNrQXJpdHkpOwotICAgIGVs
c2UgeworICAgIGlmIChleGVjdXRhYmxlLT5pc0hvc3RGdW5jdGlvbigpKSB7CisgICAgICAgIGNv
ZGVQdHIgPSBqc1RvV2FzbUlDQ29kZVB0cigqdm0sIGtpbmQsIGNhbGxlZSk7CisgICAgICAgIGlm
ICghY29kZVB0cikKKyAgICAgICAgICAgIGNvZGVQdHIgPSBleGVjdXRhYmxlLT5lbnRyeXBvaW50
Rm9yKGtpbmQsIE11c3RDaGVja0FyaXR5KTsKKyAgICB9IGVsc2UgewogICAgICAgICBGdW5jdGlv
bkV4ZWN1dGFibGUqIGZ1bmN0aW9uRXhlY3V0YWJsZSA9IHN0YXRpY19jYXN0PEZ1bmN0aW9uRXhl
Y3V0YWJsZSo+KGV4ZWN1dGFibGUpOwogCiAgICAgICAgIGF1dG8gaGFuZGxlVGhyb3dFeGNlcHRp
b24gPSBbJl0gKCkgewpAQCAtMTA2NCw2ICsxMDY3LDcgQEAgU2xvd1BhdGhSZXR1cm5UeXBlIEpJ
VF9PUEVSQVRJT04gb3BlcmF0aQogICAgICAgICAgICAgYXJpdHkgPSBBcml0eUNoZWNrTm90UmVx
dWlyZWQ7CiAgICAgICAgIGNvZGVQdHIgPSBmdW5jdGlvbkV4ZWN1dGFibGUtPmVudHJ5cG9pbnRG
b3Ioa2luZCwgYXJpdHkpOwogICAgIH0KKwogICAgIGlmICghY2FsbExpbmtJbmZvLT5zZWVuT25j
ZSgpKQogICAgICAgICBjYWxsTGlua0luZm8tPnNldFNlZW4oKTsKICAgICBlbHNlCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1JlZ2lzdGVyU2V0LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1JlZ2lzdGVyU2V0LmNwcAkocmV2aXNpb24gMjQzNzgw
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9SZWdpc3RlclNldC5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTU4LDcgKzU4LDcgQEAgUmVnaXN0ZXJTZXQgUmVnaXN0ZXJTZXQ6OnJlc2VydmVk
SGFyZHdhcgogI2VuZGlmCiB9CiAKLVJlZ2lzdGVyU2V0IFJlZ2lzdGVyU2V0OjpydW50aW1lUmVn
aXN0ZXJzKCkKK1JlZ2lzdGVyU2V0IFJlZ2lzdGVyU2V0OjpydW50aW1lVGFnUmVnaXN0ZXJzKCkK
IHsKICNpZiBVU0UoSlNWQUxVRTY0KQogICAgIHJldHVybiBSZWdpc3RlclNldChHUFJJbmZvOjp0
YWdUeXBlTnVtYmVyUmVnaXN0ZXIsIEdQUkluZm86OnRhZ01hc2tSZWdpc3Rlcik7CkBAIC03MCw3
ICs3MCw3IEBAIFJlZ2lzdGVyU2V0IFJlZ2lzdGVyU2V0OjpydW50aW1lUmVnaXN0ZXIKIFJlZ2lz
dGVyU2V0IFJlZ2lzdGVyU2V0OjpzcGVjaWFsUmVnaXN0ZXJzKCkKIHsKICAgICByZXR1cm4gUmVn
aXN0ZXJTZXQoCi0gICAgICAgIHN0YWNrUmVnaXN0ZXJzKCksIHJlc2VydmVkSGFyZHdhcmVSZWdp
c3RlcnMoKSwgcnVudGltZVJlZ2lzdGVycygpKTsKKyAgICAgICAgc3RhY2tSZWdpc3RlcnMoKSwg
cmVzZXJ2ZWRIYXJkd2FyZVJlZ2lzdGVycygpLCBydW50aW1lVGFnUmVnaXN0ZXJzKCkpOwogfQog
CiBSZWdpc3RlclNldCBSZWdpc3RlclNldDo6dm9sYXRpbGVSZWdpc3RlcnNGb3JKU0NhbGwoKQpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9SZWdpc3RlclNldC5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUmVnaXN0ZXJTZXQuaAkocmV2aXNpb24gMjQz
NzgwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9SZWdpc3RlclNldC5oCSh3b3JraW5n
IGNvcHkpCkBAIC01MCw3ICs1MCw3IEBAIHB1YmxpYzoKICAgICAKICAgICBKU19FWFBPUlRfUFJJ
VkFURSBzdGF0aWMgUmVnaXN0ZXJTZXQgc3RhY2tSZWdpc3RlcnMoKTsKICAgICBKU19FWFBPUlRf
UFJJVkFURSBzdGF0aWMgUmVnaXN0ZXJTZXQgcmVzZXJ2ZWRIYXJkd2FyZVJlZ2lzdGVycygpOwot
ICAgIHN0YXRpYyBSZWdpc3RlclNldCBydW50aW1lUmVnaXN0ZXJzKCk7CisgICAgc3RhdGljIFJl
Z2lzdGVyU2V0IHJ1bnRpbWVUYWdSZWdpc3RlcnMoKTsKICAgICBzdGF0aWMgUmVnaXN0ZXJTZXQg
c3BlY2lhbFJlZ2lzdGVycygpOyAvLyBUaGUgdW5pb24gb2Ygc3RhY2ssIHJlc2VydmVkIGhhcmR3
YXJlLCBhbmQgcnVudGltZSByZWdpc3RlcnMuCiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGlj
IFJlZ2lzdGVyU2V0IGNhbGxlZVNhdmVSZWdpc3RlcnMoKTsKICAgICBzdGF0aWMgUmVnaXN0ZXJT
ZXQgdm1DYWxsZWVTYXZlUmVnaXN0ZXJzKCk7IC8vIENhbGxlZSBzYXZlIHJlZ2lzdGVycyB0aGF0
IG1pZ2h0IGJlIHNhdmVkIGFuZCB1c2VkIGJ5IGFueSB0aWVyLgpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9SZXBhdGNoLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L1JlcGF0Y2guY3BwCShyZXZpc2lvbiAyNDM3ODApCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L1JlcGF0Y2guY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05NzUsNyArOTc1LDcg
QEAgdm9pZCBsaW5rUG9seW1vcnBoaWNDYWxsKAogICAgIGlmIChQb2x5bW9ycGhpY0NhbGxTdHVi
Um91dGluZSogc3R1YiA9IGNhbGxMaW5rSW5mby5zdHViKCkpCiAgICAgICAgIGxpc3QgPSBzdHVi
LT52YXJpYW50cygpOwogICAgIGVsc2UgaWYgKEpTT2JqZWN0KiBvbGRDYWxsZWUgPSBjYWxsTGlu
a0luZm8uY2FsbGVlKCkpCi0gICAgICAgIGxpc3QgPSBDYWxsVmFyaWFudExpc3R7IENhbGxWYXJp
YW50KG9sZENhbGxlZSkgfTsKKyAgICAgICAgbGlzdCA9IENhbGxWYXJpYW50TGlzdCB7IENhbGxW
YXJpYW50KG9sZENhbGxlZSkgfTsKICAgICAKICAgICBsaXN0ID0gdmFyaWFudExpc3RXaXRoVmFy
aWFudChsaXN0LCBuZXdWYXJpYW50KTsKIApAQCAtMTEzNyw3ICsxMTM3LDEwIEBAIHZvaWQgbGlu
a1BvbHltb3JwaGljQ2FsbCgKICAgICAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPEpTRW50cnlQ
dHJUYWc+IGNvZGVQdHI7CiAgICAgICAgIGlmICh2YXJpYW50LmV4ZWN1dGFibGUoKSkgewogICAg
ICAgICAgICAgQVNTRVJUKHZhcmlhbnQuZXhlY3V0YWJsZSgpLT5oYXNKSVRDb2RlRm9yQ2FsbCgp
KTsKLSAgICAgICAgICAgIGNvZGVQdHIgPSB2YXJpYW50LmV4ZWN1dGFibGUoKS0+Z2VuZXJhdGVk
SklUQ29kZUZvckNhbGwoKS0+YWRkcmVzc0ZvckNhbGwoQXJpdHlDaGVja05vdFJlcXVpcmVkKTsK
KyAgICAgICAgICAgIAorICAgICAgICAgICAgY29kZVB0ciA9IGpzVG9XYXNtSUNDb2RlUHRyKHZt
LCBjYWxsTGlua0luZm8uc3BlY2lhbGl6YXRpb25LaW5kKCksIHZhcmlhbnQuZnVuY3Rpb24oKSk7
CisgICAgICAgICAgICBpZiAoIWNvZGVQdHIpCisgICAgICAgICAgICAgICAgY29kZVB0ciA9IHZh
cmlhbnQuZXhlY3V0YWJsZSgpLT5nZW5lcmF0ZWRKSVRDb2RlRm9yQ2FsbCgpLT5hZGRyZXNzRm9y
Q2FsbChBcml0eUNoZWNrTm90UmVxdWlyZWQpOwogICAgICAgICB9IGVsc2UgewogICAgICAgICAg
ICAgQVNTRVJUKHZhcmlhbnQuaW50ZXJuYWxGdW5jdGlvbigpKTsKICAgICAgICAgICAgIGNvZGVQ
dHIgPSB2bS5nZXRDVElJbnRlcm5hbEZ1bmN0aW9uVHJhbXBvbGluZUZvcihDb2RlRm9yQ2FsbCk7
CkBAIC0xMjc3LDYgKzEyODAsMjMgQEAgdm9pZCByZXNldEluc3RhbmNlT2YoU3RydWN0dXJlU3R1
YkluZm8mIAogICAgIHJlc2V0UGF0Y2hhYmxlSnVtcChzdHViSW5mbyk7CiB9CiAKK01hY3JvQXNz
ZW1ibGVyQ29kZVB0cjxKU0VudHJ5UHRyVGFnPiBqc1RvV2FzbUlDQ29kZVB0cihWTSYgdm0sIENv
ZGVTcGVjaWFsaXphdGlvbktpbmQga2luZCwgSlNPYmplY3QqIGNhbGxlZSkKK3sKKyNpZiBFTkFC
TEUoV0VCQVNTRU1CTFkpCisgICAgaWYgKCFjYWxsZWUpCisgICAgICAgIHJldHVybiBudWxscHRy
OworICAgIGlmIChraW5kICE9IENvZGVGb3JDYWxsKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsK
KyAgICBpZiAoYXV0byogd2FzbUZ1bmN0aW9uID0ganNEeW5hbWljQ2FzdDxXZWJBc3NlbWJseUZ1
bmN0aW9uKj4odm0sIGNhbGxlZSkpCisgICAgICAgIHJldHVybiB3YXNtRnVuY3Rpb24tPmpzQ2Fs
bEVudHJ5cG9pbnQoKTsKKyNlbHNlCisgICAgVU5VU0VEX1BBUkFNKHZtKTsKKyAgICBVTlVTRURf
UEFSQU0oa2luZCk7CisgICAgVU5VU0VEX1BBUkFNKGNhbGxlZSk7CisjZW5kaWYKKyAgICByZXR1
cm4gbnVsbHB0cjsKK30KKwogfSAvLyBuYW1lc3BhY2UgSlNDCiAKICNlbmRpZgpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9SZXBhdGNoLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9SZXBhdGNoLmgJKHJldmlzaW9uIDI0Mzc4MCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvUmVwYXRjaC5oCSh3b3JraW5nIGNvcHkpCkBAIC01Nyw2ICs1Nyw4
IEBAIHZvaWQgcmVzZXRQdXRCeUlEKENvZGVCbG9jayosIFN0cnVjdHVyZVMKIHZvaWQgcmVzZXRJ
bkJ5SUQoQ29kZUJsb2NrKiwgU3RydWN0dXJlU3R1YkluZm8mKTsKIHZvaWQgcmVzZXRJbnN0YW5j
ZU9mKFN0cnVjdHVyZVN0dWJJbmZvJik7CiB2b2lkIGZ0bFRodW5rQXdhcmVSZXBhdGNoQ2FsbChD
b2RlQmxvY2sqLCBDb2RlTG9jYXRpb25DYWxsPEpTSW50ZXJuYWxQdHJUYWc+LCBGdW5jdGlvblB0
cjxDRnVuY3Rpb25QdHJUYWc+IG5ld0NhbGxlZUZ1bmN0aW9uKTsKK01hY3JvQXNzZW1ibGVyQ29k
ZVB0cjxKU0VudHJ5UHRyVGFnPiBqc1RvV2FzbUlDQ29kZVB0cihWTSYsIENvZGVTcGVjaWFsaXph
dGlvbktpbmQsIEpTT2JqZWN0KiBjYWxsZWUpOworCiAKIH0gLy8gbmFtZXNwYWNlIEpTQwogCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0Z1bmN0aW9uLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0Z1bmN0aW9uLmNwcAkocmV2
aXNpb24gMjQzNzgwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNGdW5jdGlv
bi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ4LDYgKzQ4LDcgQEAKICNpbmNsdWRlICJQYXJzZXIu
aCIKICNpbmNsdWRlICJQcm9wZXJ0eU5hbWVBcnJheS5oIgogI2luY2x1ZGUgIlN0YWNrVmlzaXRv
ci5oIgorI2luY2x1ZGUgIldlYkFzc2VtYmx5RnVuY3Rpb24uaCIKIAogbmFtZXNwYWNlIEpTQyB7
CiAKQEAgLTYyNywxMCArNjI4LDE0IEBAIENvbnN0cnVjdFR5cGUgSlNGdW5jdGlvbjo6Z2V0Q29u
c3RydWN0RGEKIAogU3RyaW5nIGdldENhbGN1bGF0ZWREaXNwbGF5TmFtZShWTSYgdm0sIEpTT2Jq
ZWN0KiBvYmplY3QpCiB7CisjaWYgRU5BQkxFKFdFQkFTU0VNQkxZKQorICAgIGlmIChqc0R5bmFt
aWNDYXN0PEpTVG9XYXNtSUNDYWxsZWUqPih2bSwgb2JqZWN0KSkKKyAgICAgICAgcmV0dXJuICJ3
YXNtLXN0dWIiX3M7CisjZW5kaWYKKwogICAgIGlmICghanNEeW5hbWljQ2FzdDxKU0Z1bmN0aW9u
Kj4odm0sIG9iamVjdCkgJiYgIWpzRHluYW1pY0Nhc3Q8SW50ZXJuYWxGdW5jdGlvbio+KHZtLCBv
YmplY3QpKQogICAgICAgICByZXR1cm4gZW1wdHlTdHJpbmcoKTsKIAotCiAgICAgU3RydWN0dXJl
KiBzdHJ1Y3R1cmUgPSBvYmplY3QtPnN0cnVjdHVyZSh2bSk7CiAgICAgdW5zaWduZWQgYXR0cmli
dXRlczsKICAgICAvLyBUaGlzIGZ1bmN0aW9uIG1heSBiZSBjYWxsZWQgd2hlbiB0aGUgbXV0YXRv
ciBpc24ndCBydW5uaW5nIGFuZCB3ZSBhcmUgbGF6aWx5IGdlbmVyYXRpbmcgYSBzdGFjayB0cmFj
ZS4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0LmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9i
amVjdC5jcHAJKHJldmlzaW9uIDI0Mzc4MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTR2xvYmFsT2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTA1Myw2ICsxMDUzLDEw
IEBAIHB1dERpcmVjdFdpdGhvdXRUcmFuc2l0aW9uKHZtLCB2bS5wcm9wZXIKICAgICAgICAgICAg
IFtdIChjb25zdCBJbml0aWFsaXplcjxTdHJ1Y3R1cmU+JiBpbml0KSB7CiAgICAgICAgICAgICAg
ICAgaW5pdC5zZXQoV2ViQXNzZW1ibHlGdW5jdGlvbjo6Y3JlYXRlU3RydWN0dXJlKGluaXQudm0s
IGluaXQub3duZXIsIGluaXQub3duZXItPm1fZnVuY3Rpb25Qcm90b3R5cGUuZ2V0KCkpKTsKICAg
ICAgICAgICAgIH0pOworICAgICAgICBtX2pzVG9XYXNtSUNDYWxsZWVTdHJ1Y3R1cmUuaW5pdExh
dGVyKAorICAgICAgICAgICAgW10gKGNvbnN0IEluaXRpYWxpemVyPFN0cnVjdHVyZT4mIGluaXQp
IHsKKyAgICAgICAgICAgICAgICBpbml0LnNldChKU1RvV2FzbUlDQ2FsbGVlOjpjcmVhdGVTdHJ1
Y3R1cmUoaW5pdC52bSwgaW5pdC5vd25lciwgSlNWYWx1ZSgpKSk7CisgICAgICAgICAgICB9KTsK
ICAgICAgICAgbV93ZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlvblN0cnVjdHVyZS5pbml0TGF0ZXIo
CiAgICAgICAgICAgICBbXSAoY29uc3QgSW5pdGlhbGl6ZXI8U3RydWN0dXJlPiYgaW5pdCkgewog
ICAgICAgICAgICAgICAgIGluaXQuc2V0KFdlYkFzc2VtYmx5V3JhcHBlckZ1bmN0aW9uOjpjcmVh
dGVTdHJ1Y3R1cmUoaW5pdC52bSwgaW5pdC5vd25lciwgaW5pdC5vd25lci0+bV9mdW5jdGlvblBy
b3RvdHlwZS5nZXQoKSkpOwpAQCAtMTc1MSw2ICsxNzU1LDcgQEAgdm9pZCBKU0dsb2JhbE9iamVj
dDo6dmlzaXRDaGlsZHJlbihKU0NlbAogI2lmIEVOQUJMRShXRUJBU1NFTUJMWSkKICAgICB0aGlz
T2JqZWN0LT5tX3dlYkFzc2VtYmx5TW9kdWxlUmVjb3JkU3RydWN0dXJlLnZpc2l0KHZpc2l0b3Ip
OwogICAgIHRoaXNPYmplY3QtPm1fd2ViQXNzZW1ibHlGdW5jdGlvblN0cnVjdHVyZS52aXNpdCh2
aXNpdG9yKTsKKyAgICB0aGlzT2JqZWN0LT5tX2pzVG9XYXNtSUNDYWxsZWVTdHJ1Y3R1cmUudmlz
aXQodmlzaXRvcik7CiAgICAgdGhpc09iamVjdC0+bV93ZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlv
blN0cnVjdHVyZS52aXNpdCh2aXNpdG9yKTsKICAgICB0aGlzT2JqZWN0LT5tX3dlYkFzc2VtYmx5
VG9KU0NhbGxlZVN0cnVjdHVyZS52aXNpdCh2aXNpdG9yKTsKICAgICBGT1JfRUFDSF9XRUJBU1NF
TUJMWV9DT05TVFJVQ1RPUl9UWVBFKFZJU0lUX0xBWllfVFlQRSkKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0LmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3QuaAkocmV2aXNpb24gMjQzNzgw
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3QuaAkod29y
a2luZyBjb3B5KQpAQCAtNDAwLDYgKzQwMCw3IEBAIHB1YmxpYzoKICNpZiBFTkFCTEUoV0VCQVNT
RU1CTFkpCiAgICAgTGF6eVByb3BlcnR5PEpTR2xvYmFsT2JqZWN0LCBTdHJ1Y3R1cmU+IG1fd2Vi
QXNzZW1ibHlNb2R1bGVSZWNvcmRTdHJ1Y3R1cmU7CiAgICAgTGF6eVByb3BlcnR5PEpTR2xvYmFs
T2JqZWN0LCBTdHJ1Y3R1cmU+IG1fd2ViQXNzZW1ibHlGdW5jdGlvblN0cnVjdHVyZTsKKyAgICBM
YXp5UHJvcGVydHk8SlNHbG9iYWxPYmplY3QsIFN0cnVjdHVyZT4gbV9qc1RvV2FzbUlDQ2FsbGVl
U3RydWN0dXJlOwogICAgIExhenlQcm9wZXJ0eTxKU0dsb2JhbE9iamVjdCwgU3RydWN0dXJlPiBt
X3dlYkFzc2VtYmx5V3JhcHBlckZ1bmN0aW9uU3RydWN0dXJlOwogICAgIExhenlQcm9wZXJ0eTxK
U0dsb2JhbE9iamVjdCwgU3RydWN0dXJlPiBtX3dlYkFzc2VtYmx5VG9KU0NhbGxlZVN0cnVjdHVy
ZTsKICAgICBGT1JfRUFDSF9XRUJBU1NFTUJMWV9DT05TVFJVQ1RPUl9UWVBFKERFRklORV9TVE9S
QUdFX0ZPUl9MQVpZX1RZUEUpCkBAIC03NjQsNiArNzY1LDcgQEAgcHVibGljOgogI2lmIEVOQUJM
RShXRUJBU1NFTUJMWSkKICAgICBTdHJ1Y3R1cmUqIHdlYkFzc2VtYmx5TW9kdWxlUmVjb3JkU3Ry
dWN0dXJlKCkgY29uc3QgeyByZXR1cm4gbV93ZWJBc3NlbWJseU1vZHVsZVJlY29yZFN0cnVjdHVy
ZS5nZXQodGhpcyk7IH0KICAgICBTdHJ1Y3R1cmUqIHdlYkFzc2VtYmx5RnVuY3Rpb25TdHJ1Y3R1
cmUoKSBjb25zdCB7IHJldHVybiBtX3dlYkFzc2VtYmx5RnVuY3Rpb25TdHJ1Y3R1cmUuZ2V0KHRo
aXMpOyB9CisgICAgU3RydWN0dXJlKiBqc1RvV2FzbUlDQ2FsbGVlU3RydWN0dXJlKCkgY29uc3Qg
eyByZXR1cm4gbV9qc1RvV2FzbUlDQ2FsbGVlU3RydWN0dXJlLmdldCh0aGlzKTsgfQogICAgIFN0
cnVjdHVyZSogd2ViQXNzZW1ibHlXcmFwcGVyRnVuY3Rpb25TdHJ1Y3R1cmUoKSBjb25zdCB7IHJl
dHVybiBtX3dlYkFzc2VtYmx5V3JhcHBlckZ1bmN0aW9uU3RydWN0dXJlLmdldCh0aGlzKTsgfQog
ICAgIFN0cnVjdHVyZSogd2ViQXNzZW1ibHlUb0pTQ2FsbGVlU3RydWN0dXJlKCkgY29uc3QgeyBy
ZXR1cm4gbV93ZWJBc3NlbWJseVRvSlNDYWxsZWVTdHJ1Y3R1cmUuZ2V0KHRoaXMpOyB9CiAjZW5k
aWYgLy8gRU5BQkxFKFdFQkFTU0VNQkxZKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvVk0uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L1ZNLmNwcAkocmV2aXNpb24gMjQzNzgwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvVk0uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNDcsNiArMTQ3LDcgQEAKICNpbmNsdWRlICJX
YXRjaGRvZy5oIgogI2luY2x1ZGUgIldlYWtHQ01hcElubGluZXMuaCIKICNpbmNsdWRlICJXZWJB
c3NlbWJseUZ1bmN0aW9uLmgiCisjaW5jbHVkZSAiV2ViQXNzZW1ibHlGdW5jdGlvbkhlYXBDZWxs
VHlwZS5oIgogI2luY2x1ZGUgIldlYkFzc2VtYmx5V3JhcHBlckZ1bmN0aW9uLmgiCiAjaW5jbHVk
ZSA8d3RmL1Byb2Nlc3NJRC5oPgogI2luY2x1ZGUgPHd0Zi9SZWFkV3JpdGVMb2NrLmg+CkBAIC0y
NzksNiArMjgwLDcgQEAgVk06OlZNKFZNVHlwZSB2bVR5cGUsIEhlYXBUeXBlIGhlYXBUeXBlKQog
ICAgICwgZGVzdHJ1Y3RpYmxlT2JqZWN0SGVhcENlbGxUeXBlKHN0ZDo6bWFrZV91bmlxdWU8SlNE
ZXN0cnVjdGlibGVPYmplY3RIZWFwQ2VsbFR5cGU+KCkpCiAjaWYgRU5BQkxFKFdFQkFTU0VNQkxZ
KQogICAgICwgd2ViQXNzZW1ibHlDb2RlQmxvY2tIZWFwQ2VsbFR5cGUoc3RkOjptYWtlX3VuaXF1
ZTxKU1dlYkFzc2VtYmx5Q29kZUJsb2NrSGVhcENlbGxUeXBlPigpKQorICAgICwgd2ViQXNzZW1i
bHlGdW5jdGlvbkhlYXBDZWxsVHlwZShzdGQ6Om1ha2VfdW5pcXVlPFdlYkFzc2VtYmx5RnVuY3Rp
b25IZWFwQ2VsbFR5cGU+KCkpCiAjZW5kaWYKICAgICAsIHByaW1pdGl2ZUdpZ2FjYWdlQXV4aWxp
YXJ5U3BhY2UoIlByaW1pdGl2ZSBHaWdhY2FnZSBBdXhpbGlhcnkiLCBoZWFwLCBhdXhpbGlhcnlI
ZWFwQ2VsbFR5cGUuZ2V0KCksIHByaW1pdGl2ZUdpZ2FjYWdlQWxsb2NhdG9yLmdldCgpKQogICAg
ICwganNWYWx1ZUdpZ2FjYWdlQXV4aWxpYXJ5U3BhY2UoIkpTVmFsdWUgR2lnYWNhZ2UgQXV4aWxp
YXJ5IiwgaGVhcCwgYXV4aWxpYXJ5SGVhcENlbGxUeXBlLmdldCgpLCBqc1ZhbHVlR2lnYWNhZ2VB
bGxvY2F0b3IuZ2V0KCkpCkBAIC0xMjYxLDcgKzEyNjMsNyBAQCBEWU5BTUlDX0lTT19TVUJTUEFD
RV9ERUZJTkVfTUVNQkVSX1NMT1coCiAjZW5kaWYKICNpZiBFTkFCTEUoV0VCQVNTRU1CTFkpCiBE
WU5BTUlDX0lTT19TVUJTUEFDRV9ERUZJTkVfTUVNQkVSX1NMT1cod2ViQXNzZW1ibHlDb2RlQmxv
Y2tTcGFjZSwgd2ViQXNzZW1ibHlDb2RlQmxvY2tIZWFwQ2VsbFR5cGUuZ2V0KCksIEpTV2ViQXNz
ZW1ibHlDb2RlQmxvY2spCi1EWU5BTUlDX0lTT19TVUJTUEFDRV9ERUZJTkVfTUVNQkVSX1NMT1co
d2ViQXNzZW1ibHlGdW5jdGlvblNwYWNlLCBjZWxsSGVhcENlbGxUeXBlLmdldCgpLCBXZWJBc3Nl
bWJseUZ1bmN0aW9uKQorRFlOQU1JQ19JU09fU1VCU1BBQ0VfREVGSU5FX01FTUJFUl9TTE9XKHdl
YkFzc2VtYmx5RnVuY3Rpb25TcGFjZSwgd2ViQXNzZW1ibHlGdW5jdGlvbkhlYXBDZWxsVHlwZS5n
ZXQoKSwgV2ViQXNzZW1ibHlGdW5jdGlvbikKIERZTkFNSUNfSVNPX1NVQlNQQUNFX0RFRklORV9N
RU1CRVJfU0xPVyh3ZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlvblNwYWNlLCBjZWxsSGVhcENlbGxU
eXBlLmdldCgpLCBXZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlvbikKICNlbmRpZgogCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmgJKHJldmlzaW9uIDI0Mzc4MCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmgJKHdvcmtpbmcgY29weSkKQEAgLTE1Nyw2ICsxNTcs
NyBAQCBjbGFzcyBWTUVudHJ5U2NvcGU7CiBjbGFzcyBXYXRjaGRvZzsKIGNsYXNzIFdhdGNocG9p
bnQ7CiBjbGFzcyBXYXRjaHBvaW50U2V0OworY2xhc3MgV2ViQXNzZW1ibHlGdW5jdGlvbkhlYXBD
ZWxsVHlwZTsKIAogI2lmIEVOQUJMRShGVExfSklUKQogbmFtZXNwYWNlIEZUTCB7CkBAIC0zMzAs
NiArMzMxLDcgQEAgcHVibGljOgogICAgIHN0ZDo6dW5pcXVlX3B0cjxKU0Rlc3RydWN0aWJsZU9i
amVjdEhlYXBDZWxsVHlwZT4gZGVzdHJ1Y3RpYmxlT2JqZWN0SGVhcENlbGxUeXBlOwogI2lmIEVO
QUJMRShXRUJBU1NFTUJMWSkKICAgICBzdGQ6OnVuaXF1ZV9wdHI8SlNXZWJBc3NlbWJseUNvZGVC
bG9ja0hlYXBDZWxsVHlwZT4gd2ViQXNzZW1ibHlDb2RlQmxvY2tIZWFwQ2VsbFR5cGU7CisgICAg
c3RkOjp1bmlxdWVfcHRyPFdlYkFzc2VtYmx5RnVuY3Rpb25IZWFwQ2VsbFR5cGU+IHdlYkFzc2Vt
Ymx5RnVuY3Rpb25IZWFwQ2VsbFR5cGU7CiAjZW5kaWYKICAgICAKICAgICBDb21wbGV0ZVN1YnNw
YWNlIHByaW1pdGl2ZUdpZ2FjYWdlQXV4aWxpYXJ5U3BhY2U7IC8vIFR5cGVkIGFycmF5cywgc3Ry
aW5ncywgYml0dmVjdG9ycywgZXRjIGdvIGhlcmUuCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvd2FzbS9XYXNtQWlySVJHZW5lcmF0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS93YXNtL1dhc21BaXJJUkdlbmVyYXRvci5jcHAJKHJldmlzaW9uIDI0Mzc4MCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21BaXJJUkdlbmVyYXRvci5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTY4MCwxMCArNjgwLDggQEAgQWlySVJHZW5lcmF0b3I6OkFpcklSR2Vu
ZXJhdG9yKGNvbnN0IE1vZAogICAgICAgICBtX2NvZGUucGluUmVnaXN0ZXIobV93YXNtQ29udGV4
dEluc3RhbmNlR1BSKTsKIAogICAgIGlmIChtb2RlICE9IE1lbW9yeU1vZGU6OlNpZ25hbGluZykg
ewotICAgICAgICBBU1NFUlQoIXBpbm5lZFJlZ3Muc2l6ZVJlZ2lzdGVyc1swXS5zaXplT2Zmc2V0
KTsKLSAgICAgICAgbV9tZW1vcnlTaXplR1BSID0gcGlubmVkUmVncy5zaXplUmVnaXN0ZXJzWzBd
LnNpemVSZWdpc3RlcjsKLSAgICAgICAgZm9yIChjb25zdCBQaW5uZWRTaXplUmVnaXN0ZXJJbmZv
JiByZWdJbmZvIDogcGlubmVkUmVncy5zaXplUmVnaXN0ZXJzKQotICAgICAgICAgICAgbV9jb2Rl
LnBpblJlZ2lzdGVyKHJlZ0luZm8uc2l6ZVJlZ2lzdGVyKTsKKyAgICAgICAgbV9tZW1vcnlTaXpl
R1BSID0gcGlubmVkUmVncy5zaXplUmVnaXN0ZXI7CisgICAgICAgIG1fY29kZS5waW5SZWdpc3Rl
cihtX21lbW9yeVNpemVHUFIpOwogICAgIH0KIAogICAgIGlmICh0aHJvd1dhc21FeGNlcHRpb24p
CkBAIC04MjMsOCArODIxLDcgQEAgdm9pZCBBaXJJUkdlbmVyYXRvcjo6cmVzdG9yZVdlYkFzc2Vt
Ymx5RwogICAgICAgICBjb25zdCBQaW5uZWRSZWdpc3RlckluZm8qIHBpbm5lZFJlZ3MgPSAmUGlu
bmVkUmVnaXN0ZXJJbmZvOjpnZXQoKTsKICAgICAgICAgUmVnaXN0ZXJTZXQgY2xvYmJlcnM7CiAg
ICAgICAgIGNsb2JiZXJzLnNldChwaW5uZWRSZWdzLT5iYXNlTWVtb3J5UG9pbnRlcik7Ci0gICAg
ICAgIGZvciAoYXV0byBpbmZvIDogcGlubmVkUmVncy0+c2l6ZVJlZ2lzdGVycykKLSAgICAgICAg
ICAgIGNsb2JiZXJzLnNldChpbmZvLnNpemVSZWdpc3Rlcik7CisgICAgICAgIGNsb2JiZXJzLnNl
dChwaW5uZWRSZWdzLT5zaXplUmVnaXN0ZXIpOwogCiAgICAgICAgIGF1dG8qIHBhdGNocG9pbnQg
PSBhZGRQYXRjaHBvaW50KEIzOjpWb2lkKTsKICAgICAgICAgQjM6OkVmZmVjdHMgZWZmZWN0cyA9
IEIzOjpFZmZlY3RzOjpub25lKCk7CkBAIC04MzQsMTQgKzgzMSw4IEBAIHZvaWQgQWlySVJHZW5l
cmF0b3I6OnJlc3RvcmVXZWJBc3NlbWJseUcKICAgICAgICAgcGF0Y2hwb2ludC0+Y2xvYmJlcihj
bG9iYmVycyk7CiAKICAgICAgICAgcGF0Y2hwb2ludC0+c2V0R2VuZXJhdG9yKFtwaW5uZWRSZWdz
XSAoQ0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0IEIzOjpTdGFja21hcEdlbmVyYXRpb25QYXJhbXMm
IHBhcmFtcykgewotICAgICAgICAgICAgR1BSUmVnIGJhc2VNZW1vcnkgPSBwaW5uZWRSZWdzLT5i
YXNlTWVtb3J5UG9pbnRlcjsKLSAgICAgICAgICAgIGNvbnN0IGF1dG8mIHNpemVSZWdzID0gcGlu
bmVkUmVncy0+c2l6ZVJlZ2lzdGVyczsKLSAgICAgICAgICAgIEFTU0VSVChzaXplUmVncy5zaXpl
KCkgPj0gMSk7Ci0gICAgICAgICAgICBBU1NFUlQoIXNpemVSZWdzWzBdLnNpemVPZmZzZXQpOyAv
LyBUaGUgZm9sbG93aW5nIGNvZGUgYXNzdW1lcyB3ZSBzdGFydCBhdCAwLCBhbmQgY2FsY3VsYXRl
cyBzdWJzZXF1ZW50IHNpemUgcmVnaXN0ZXJzIHJlbGF0aXZlIHRvIDAuCi0gICAgICAgICAgICBq
aXQubG9hZFB0cihDQ2FsbEhlbHBlcnM6OkFkZHJlc3MocGFyYW1zWzBdLmdwcigpLCBJbnN0YW5j
ZTo6b2Zmc2V0T2ZDYWNoZWRNZW1vcnlTaXplKCkpLCBzaXplUmVnc1swXS5zaXplUmVnaXN0ZXIp
OwotICAgICAgICAgICAgaml0LmxvYWRQdHIoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKHBhcmFtc1sw
XS5ncHIoKSwgSW5zdGFuY2U6Om9mZnNldE9mQ2FjaGVkTWVtb3J5KCkpLCBiYXNlTWVtb3J5KTsK
LSAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDE7IGkgPCBzaXplUmVncy5zaXplKCk7ICsr
aSkKLSAgICAgICAgICAgICAgICBqaXQuYWRkNjQoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIo
LXNpemVSZWdzW2ldLnNpemVPZmZzZXQpLCBzaXplUmVnc1swXS5zaXplUmVnaXN0ZXIsIHNpemVS
ZWdzW2ldLnNpemVSZWdpc3Rlcik7CisgICAgICAgICAgICBqaXQubG9hZFB0cihDQ2FsbEhlbHBl
cnM6OkFkZHJlc3MocGFyYW1zWzBdLmdwcigpLCBJbnN0YW5jZTo6b2Zmc2V0T2ZDYWNoZWRNZW1v
cnlTaXplKCkpLCBwaW5uZWRSZWdzLT5zaXplUmVnaXN0ZXIpOworICAgICAgICAgICAgaml0Lmxv
YWRQdHIoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKHBhcmFtc1swXS5ncHIoKSwgSW5zdGFuY2U6Om9m
ZnNldE9mQ2FjaGVkTWVtb3J5KCkpLCBwaW5uZWRSZWdzLT5iYXNlTWVtb3J5UG9pbnRlcik7CiAg
ICAgICAgIH0pOwogCiAgICAgICAgIGVtaXRQYXRjaHBvaW50KGJsb2NrLCBwYXRjaHBvaW50LCBU
bXAoKSwgaW5zdGFuY2UpOwpAQCAtMTg1NSwxOSArMTg0NiwxNSBAQCBhdXRvIEFpcklSR2VuZXJh
dG9yOjphZGRDYWxsSW5kaXJlY3QoY29uCiAgICAgICAgICAgICBHUFJSZWcgbmV3Q29udGV4dElu
c3RhbmNlID0gcGFyYW1zWzBdLmdwcigpOwogICAgICAgICAgICAgR1BSUmVnIG9sZENvbnRleHRJ
bnN0YW5jZSA9IHBhcmFtc1sxXS5ncHIoKTsKICAgICAgICAgICAgIGNvbnN0IFBpbm5lZFJlZ2lz
dGVySW5mbyYgcGlubmVkUmVncyA9IFBpbm5lZFJlZ2lzdGVySW5mbzo6Z2V0KCk7Ci0gICAgICAg
ICAgICBjb25zdCBhdXRvJiBzaXplUmVncyA9IHBpbm5lZFJlZ3Muc2l6ZVJlZ2lzdGVyczsKICAg
ICAgICAgICAgIEdQUlJlZyBiYXNlTWVtb3J5ID0gcGlubmVkUmVncy5iYXNlTWVtb3J5UG9pbnRl
cjsKICAgICAgICAgICAgIEFTU0VSVChuZXdDb250ZXh0SW5zdGFuY2UgIT0gYmFzZU1lbW9yeSk7
CiAgICAgICAgICAgICBqaXQubG9hZFB0cihDQ2FsbEhlbHBlcnM6OkFkZHJlc3Mob2xkQ29udGV4
dEluc3RhbmNlLCBJbnN0YW5jZTo6b2Zmc2V0T2ZDYWNoZWRTdGFja0xpbWl0KCkpLCBiYXNlTWVt
b3J5KTsKICAgICAgICAgICAgIGppdC5zdG9yZVB0cihiYXNlTWVtb3J5LCBDQ2FsbEhlbHBlcnM6
OkFkZHJlc3MobmV3Q29udGV4dEluc3RhbmNlLCBJbnN0YW5jZTo6b2Zmc2V0T2ZDYWNoZWRTdGFj
a0xpbWl0KCkpKTsKICAgICAgICAgICAgIGppdC5zdG9yZVdhc21Db250ZXh0SW5zdGFuY2UobmV3
Q29udGV4dEluc3RhbmNlKTsKLSAgICAgICAgICAgIEFTU0VSVChzaXplUmVnc1swXS5zaXplUmVn
aXN0ZXIgIT0gYmFzZU1lbW9yeSk7CiAgICAgICAgICAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIHN1
cHBvcnQgbW9yZSB0aGFuIG9uZSBtZW1vcnkgc2l6ZSByZWdpc3RlcgogICAgICAgICAgICAgLy8g
ICBzZWU6IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjI5NTIKLSAg
ICAgICAgICAgIEFTU0VSVChzaXplUmVncy5zaXplKCkgPT0gMSk7Ci0gICAgICAgICAgICBBU1NF
UlQoc2l6ZVJlZ3NbMF0uc2l6ZVJlZ2lzdGVyICE9IG5ld0NvbnRleHRJbnN0YW5jZSk7Ci0gICAg
ICAgICAgICBBU1NFUlQoIXNpemVSZWdzWzBdLnNpemVPZmZzZXQpOwotICAgICAgICAgICAgaml0
LmxvYWRQdHIoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKG5ld0NvbnRleHRJbnN0YW5jZSwgSW5zdGFu
Y2U6Om9mZnNldE9mQ2FjaGVkTWVtb3J5U2l6ZSgpKSwgc2l6ZVJlZ3NbMF0uc2l6ZVJlZ2lzdGVy
KTsgLy8gTWVtb3J5IHNpemUuCisgICAgICAgICAgICBBU1NFUlQocGlubmVkUmVncy5zaXplUmVn
aXN0ZXIgIT0gbmV3Q29udGV4dEluc3RhbmNlKTsKKyAgICAgICAgICAgIGppdC5sb2FkUHRyKEND
YWxsSGVscGVyczo6QWRkcmVzcyhuZXdDb250ZXh0SW5zdGFuY2UsIEluc3RhbmNlOjpvZmZzZXRP
ZkNhY2hlZE1lbW9yeVNpemUoKSksIHBpbm5lZFJlZ3Muc2l6ZVJlZ2lzdGVyKTsgLy8gTWVtb3J5
IHNpemUuCiAgICAgICAgICAgICBqaXQubG9hZFB0cihDQ2FsbEhlbHBlcnM6OkFkZHJlc3MobmV3
Q29udGV4dEluc3RhbmNlLCBJbnN0YW5jZTo6b2Zmc2V0T2ZDYWNoZWRNZW1vcnkoKSksIGJhc2VN
ZW1vcnkpOyAvLyBNZW1vcnk6OnZvaWQqLgogICAgICAgICB9KTsKIApJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL3dhc20vV2FzbUIzSVJHZW5lcmF0b3IuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21CM0lSR2VuZXJhdG9yLmNwcAkocmV2aXNpb24g
MjQzNzgwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUIzSVJHZW5lcmF0b3Iu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNDYsMTAgKzM0Niw4IEBAIEIzSVJHZW5lcmF0b3I6OkIz
SVJHZW5lcmF0b3IoY29uc3QgTW9kdWwKICAgICAgICAgbV9wcm9jLnBpblJlZ2lzdGVyKG1fd2Fz
bUNvbnRleHRJbnN0YW5jZUdQUik7CiAKICAgICBpZiAobW9kZSAhPSBNZW1vcnlNb2RlOjpTaWdu
YWxpbmcpIHsKLSAgICAgICAgQVNTRVJUKCFwaW5uZWRSZWdzLnNpemVSZWdpc3RlcnNbMF0uc2l6
ZU9mZnNldCk7Ci0gICAgICAgIG1fbWVtb3J5U2l6ZUdQUiA9IHBpbm5lZFJlZ3Muc2l6ZVJlZ2lz
dGVyc1swXS5zaXplUmVnaXN0ZXI7Ci0gICAgICAgIGZvciAoY29uc3QgUGlubmVkU2l6ZVJlZ2lz
dGVySW5mbyYgcmVnSW5mbyA6IHBpbm5lZFJlZ3Muc2l6ZVJlZ2lzdGVycykKLSAgICAgICAgICAg
IG1fcHJvYy5waW5SZWdpc3RlcihyZWdJbmZvLnNpemVSZWdpc3Rlcik7CisgICAgICAgIG1fbWVt
b3J5U2l6ZUdQUiA9IHBpbm5lZFJlZ3Muc2l6ZVJlZ2lzdGVyOworICAgICAgICBtX3Byb2MucGlu
UmVnaXN0ZXIobV9tZW1vcnlTaXplR1BSKTsKICAgICB9CiAKICAgICBpZiAodGhyb3dXYXNtRXhj
ZXB0aW9uKQpAQCAtNDY5LDggKzQ2Nyw3IEBAIHZvaWQgQjNJUkdlbmVyYXRvcjo6cmVzdG9yZVdl
YkFzc2VtYmx5R2wKICAgICAgICAgY29uc3QgUGlubmVkUmVnaXN0ZXJJbmZvKiBwaW5uZWRSZWdz
ID0gJlBpbm5lZFJlZ2lzdGVySW5mbzo6Z2V0KCk7CiAgICAgICAgIFJlZ2lzdGVyU2V0IGNsb2Ji
ZXJzOwogICAgICAgICBjbG9iYmVycy5zZXQocGlubmVkUmVncy0+YmFzZU1lbW9yeVBvaW50ZXIp
OwotICAgICAgICBmb3IgKGF1dG8gaW5mbyA6IHBpbm5lZFJlZ3MtPnNpemVSZWdpc3RlcnMpCi0g
ICAgICAgICAgICBjbG9iYmVycy5zZXQoaW5mby5zaXplUmVnaXN0ZXIpOworICAgICAgICBjbG9i
YmVycy5zZXQocGlubmVkUmVncy0+c2l6ZVJlZ2lzdGVyKTsKIAogICAgICAgICBCMzo6UGF0Y2hw
b2ludFZhbHVlKiBwYXRjaHBvaW50ID0gYmxvY2stPmFwcGVuZE5ldzxCMzo6UGF0Y2hwb2ludFZh
bHVlPihwcm9jLCBCMzo6Vm9pZCwgb3JpZ2luKCkpOwogICAgICAgICBFZmZlY3RzIGVmZmVjdHMg
PSBFZmZlY3RzOjpub25lKCk7CkBAIC00ODMsMTMgKzQ4MCw4IEBAIHZvaWQgQjNJUkdlbmVyYXRv
cjo6cmVzdG9yZVdlYkFzc2VtYmx5R2wKIAogICAgICAgICBwYXRjaHBvaW50LT5zZXRHZW5lcmF0
b3IoW3Bpbm5lZFJlZ3NdIChDQ2FsbEhlbHBlcnMmIGppdCwgY29uc3QgQjM6OlN0YWNrbWFwR2Vu
ZXJhdGlvblBhcmFtcyYgcGFyYW1zKSB7CiAgICAgICAgICAgICBHUFJSZWcgYmFzZU1lbW9yeSA9
IHBpbm5lZFJlZ3MtPmJhc2VNZW1vcnlQb2ludGVyOwotICAgICAgICAgICAgY29uc3QgYXV0byYg
c2l6ZVJlZ3MgPSBwaW5uZWRSZWdzLT5zaXplUmVnaXN0ZXJzOwotICAgICAgICAgICAgQVNTRVJU
KHNpemVSZWdzLnNpemUoKSA+PSAxKTsKLSAgICAgICAgICAgIEFTU0VSVCghc2l6ZVJlZ3NbMF0u
c2l6ZU9mZnNldCk7IC8vIFRoZSBmb2xsb3dpbmcgY29kZSBhc3N1bWVzIHdlIHN0YXJ0IGF0IDAs
IGFuZCBjYWxjdWxhdGVzIHN1YnNlcXVlbnQgc2l6ZSByZWdpc3RlcnMgcmVsYXRpdmUgdG8gMC4K
LSAgICAgICAgICAgIGppdC5sb2FkUHRyKENDYWxsSGVscGVyczo6QWRkcmVzcyhwYXJhbXNbMF0u
Z3ByKCksIEluc3RhbmNlOjpvZmZzZXRPZkNhY2hlZE1lbW9yeVNpemUoKSksIHNpemVSZWdzWzBd
LnNpemVSZWdpc3Rlcik7CisgICAgICAgICAgICBqaXQubG9hZFB0cihDQ2FsbEhlbHBlcnM6OkFk
ZHJlc3MocGFyYW1zWzBdLmdwcigpLCBJbnN0YW5jZTo6b2Zmc2V0T2ZDYWNoZWRNZW1vcnlTaXpl
KCkpLCBwaW5uZWRSZWdzLT5zaXplUmVnaXN0ZXIpOwogICAgICAgICAgICAgaml0LmxvYWRQdHIo
Q0NhbGxIZWxwZXJzOjpBZGRyZXNzKHBhcmFtc1swXS5ncHIoKSwgSW5zdGFuY2U6Om9mZnNldE9m
Q2FjaGVkTWVtb3J5KCkpLCBiYXNlTWVtb3J5KTsKLSAgICAgICAgICAgIGZvciAodW5zaWduZWQg
aSA9IDE7IGkgPCBzaXplUmVncy5zaXplKCk7ICsraSkKLSAgICAgICAgICAgICAgICBqaXQuYWRk
NjQoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoLXNpemVSZWdzW2ldLnNpemVPZmZzZXQpLCBz
aXplUmVnc1swXS5zaXplUmVnaXN0ZXIsIHNpemVSZWdzW2ldLnNpemVSZWdpc3Rlcik7CiAgICAg
ICAgIH0pOwogICAgIH0KIH0KQEAgLTEyODIsMTkgKzEyNzQsMTYgQEAgYXV0byBCM0lSR2VuZXJh
dG9yOjphZGRDYWxsSW5kaXJlY3QoY29ucwogICAgICAgICAgICAgR1BSUmVnIG5ld0NvbnRleHRJ
bnN0YW5jZSA9IHBhcmFtc1swXS5ncHIoKTsKICAgICAgICAgICAgIEdQUlJlZyBvbGRDb250ZXh0
SW5zdGFuY2UgPSBwYXJhbXNbMV0uZ3ByKCk7CiAgICAgICAgICAgICBjb25zdCBQaW5uZWRSZWdp
c3RlckluZm8mIHBpbm5lZFJlZ3MgPSBQaW5uZWRSZWdpc3RlckluZm86OmdldCgpOwotICAgICAg
ICAgICAgY29uc3QgYXV0byYgc2l6ZVJlZ3MgPSBwaW5uZWRSZWdzLnNpemVSZWdpc3RlcnM7CiAg
ICAgICAgICAgICBHUFJSZWcgYmFzZU1lbW9yeSA9IHBpbm5lZFJlZ3MuYmFzZU1lbW9yeVBvaW50
ZXI7CiAgICAgICAgICAgICBBU1NFUlQobmV3Q29udGV4dEluc3RhbmNlICE9IGJhc2VNZW1vcnkp
OwogICAgICAgICAgICAgaml0LmxvYWRQdHIoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKG9sZENvbnRl
eHRJbnN0YW5jZSwgSW5zdGFuY2U6Om9mZnNldE9mQ2FjaGVkU3RhY2tMaW1pdCgpKSwgYmFzZU1l
bW9yeSk7CiAgICAgICAgICAgICBqaXQuc3RvcmVQdHIoYmFzZU1lbW9yeSwgQ0NhbGxIZWxwZXJz
OjpBZGRyZXNzKG5ld0NvbnRleHRJbnN0YW5jZSwgSW5zdGFuY2U6Om9mZnNldE9mQ2FjaGVkU3Rh
Y2tMaW1pdCgpKSk7CiAgICAgICAgICAgICBqaXQuc3RvcmVXYXNtQ29udGV4dEluc3RhbmNlKG5l
d0NvbnRleHRJbnN0YW5jZSk7Ci0gICAgICAgICAgICBBU1NFUlQoc2l6ZVJlZ3NbMF0uc2l6ZVJl
Z2lzdGVyICE9IGJhc2VNZW1vcnkpOworICAgICAgICAgICAgQVNTRVJUKHBpbm5lZFJlZ3Muc2l6
ZVJlZ2lzdGVyICE9IGJhc2VNZW1vcnkpOwogICAgICAgICAgICAgLy8gRklYTUU6IFdlIHNob3Vs
ZCBzdXBwb3J0IG1vcmUgdGhhbiBvbmUgbWVtb3J5IHNpemUgcmVnaXN0ZXIKICAgICAgICAgICAg
IC8vICAgc2VlOiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTYyOTUy
Ci0gICAgICAgICAgICBBU1NFUlQoc2l6ZVJlZ3Muc2l6ZSgpID09IDEpOwotICAgICAgICAgICAg
QVNTRVJUKHNpemVSZWdzWzBdLnNpemVSZWdpc3RlciAhPSBuZXdDb250ZXh0SW5zdGFuY2UpOwot
ICAgICAgICAgICAgQVNTRVJUKCFzaXplUmVnc1swXS5zaXplT2Zmc2V0KTsKLSAgICAgICAgICAg
IGppdC5sb2FkUHRyKENDYWxsSGVscGVyczo6QWRkcmVzcyhuZXdDb250ZXh0SW5zdGFuY2UsIElu
c3RhbmNlOjpvZmZzZXRPZkNhY2hlZE1lbW9yeVNpemUoKSksIHNpemVSZWdzWzBdLnNpemVSZWdp
c3Rlcik7IC8vIE1lbW9yeSBzaXplLgorICAgICAgICAgICAgQVNTRVJUKHBpbm5lZFJlZ3Muc2l6
ZVJlZ2lzdGVyICE9IG5ld0NvbnRleHRJbnN0YW5jZSk7CisgICAgICAgICAgICBqaXQubG9hZFB0
cihDQ2FsbEhlbHBlcnM6OkFkZHJlc3MobmV3Q29udGV4dEluc3RhbmNlLCBJbnN0YW5jZTo6b2Zm
c2V0T2ZDYWNoZWRNZW1vcnlTaXplKCkpLCBwaW5uZWRSZWdzLnNpemVSZWdpc3Rlcik7IC8vIE1l
bW9yeSBzaXplLgogICAgICAgICAgICAgaml0LmxvYWRQdHIoQ0NhbGxIZWxwZXJzOjpBZGRyZXNz
KG5ld0NvbnRleHRJbnN0YW5jZSwgSW5zdGFuY2U6Om9mZnNldE9mQ2FjaGVkTWVtb3J5KCkpLCBi
YXNlTWVtb3J5KTsgLy8gTWVtb3J5Ojp2b2lkKi4KICAgICAgICAgfSk7CiAgICAgICAgIGRvQ29u
dGV4dFN3aXRjaC0+YXBwZW5kTmV3Q29udHJvbFZhbHVlKG1fcHJvYywgSnVtcCwgb3JpZ2luKCks
IGNvbnRpbnVhdGlvbik7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQmlu
ZGluZy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUJp
bmRpbmcuY3BwCShyZXZpc2lvbiAyNDM3ODApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2Fz
bS9XYXNtQmluZGluZy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ4LDExICs0OCw5IEBAIEV4cGVj
dGVkPE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxXYXNtRW50cnkKICAgICBHUFJSZWcgc2NyYXRjaCA9
IEdQUkluZm86Om5vblByZXNlcnZlZE5vbkFyZ3VtZW50R1BSMDsKICAgICBHUFJSZWcgYmFzZU1l
bW9yeSA9IHBpbm5lZFJlZ3MuYmFzZU1lbW9yeVBvaW50ZXI7CiAgICAgQVNTRVJUKGJhc2VNZW1v
cnkgIT0gc2NyYXRjaCk7Ci0gICAgY29uc3QgYXV0byYgc2l6ZVJlZ3MgPSBwaW5uZWRSZWdzLnNp
emVSZWdpc3RlcnM7Ci0gICAgQVNTRVJUKHNpemVSZWdzLnNpemUoKSA+PSAxKTsKLSAgICBBU1NF
UlQoc2l6ZVJlZ3NbMF0uc2l6ZVJlZ2lzdGVyICE9IGJhc2VNZW1vcnkpOwotICAgIEFTU0VSVChz
aXplUmVnc1swXS5zaXplUmVnaXN0ZXIgIT0gc2NyYXRjaCk7Ci0gICAgR1BSUmVnIHNpemVSZWdB
c1NjcmF0Y2ggPSBzaXplUmVnc1swXS5zaXplUmVnaXN0ZXI7CisgICAgQVNTRVJUKHBpbm5lZFJl
Z3Muc2l6ZVJlZ2lzdGVyICE9IGJhc2VNZW1vcnkpOworICAgIEFTU0VSVChwaW5uZWRSZWdzLnNp
emVSZWdpc3RlciAhPSBzY3JhdGNoKTsKKyAgICBHUFJSZWcgc2l6ZVJlZ0FzU2NyYXRjaCA9IHBp
bm5lZFJlZ3Muc2l6ZVJlZ2lzdGVyOwogCiAgICAgLy8gQjMncyBjYWxsIGNvZGVnZW4gZW5zdXJl
cyB0aGF0IHRoZSBKU0NlbGwgaXMgYSBXZWJBc3NlbWJseUZ1bmN0aW9uLgogICAgIGppdC5sb2Fk
V2FzbUNvbnRleHRJbnN0YW5jZShzaXplUmVnQXNTY3JhdGNoKTsgLy8gT2xkIEluc3RhbmNlKgpA
QCAtNjcsMTQgKzY1LDggQEAgRXhwZWN0ZWQ8TWFjcm9Bc3NlbWJsZXJDb2RlUmVmPFdhc21FbnRy
eQogCiAgICAgLy8gRklYTUUgdGhlIGZvbGxvd2luZyBjb2RlIGFzc3VtZXMgdGhhdCBhbGwgV2Fz
bTo6SW5zdGFuY2UgaGF2ZSB0aGUgc2FtZSBwaW5uZWQgcmVnaXN0ZXJzLiBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTYyOTUyCiAgICAgLy8gU2V0IHVwIHRoZSBjYWxs
ZWUncyBiYXNlTWVtb3J5IHJlZ2lzdGVyIGFzIHdlbGwgYXMgdGhlIG1lbW9yeSBzaXplIHJlZ2lz
dGVycy4KLSAgICBBU1NFUlQoIXNpemVSZWdzWzBdLnNpemVPZmZzZXQpOyAvLyBUaGUgZm9sbG93
aW5nIGNvZGUgYXNzdW1lcyB3ZSBzdGFydCBhdCAwLCBhbmQgY2FsY3VsYXRlcyBzdWJzZXF1ZW50
IHNpemUgcmVnaXN0ZXJzIHJlbGF0aXZlIHRvIDAuCi0gICAgaml0LmxvYWRQdHIoSklUOjpBZGRy
ZXNzKGJhc2VNZW1vcnksIFdhc206Okluc3RhbmNlOjpvZmZzZXRPZkNhY2hlZE1lbW9yeVNpemUo
KSksIHNpemVSZWdzWzBdLnNpemVSZWdpc3Rlcik7IC8vIE1lbW9yeSBzaXplLgorICAgIGppdC5s
b2FkUHRyKEpJVDo6QWRkcmVzcyhiYXNlTWVtb3J5LCBXYXNtOjpJbnN0YW5jZTo6b2Zmc2V0T2ZD
YWNoZWRNZW1vcnlTaXplKCkpLCBwaW5uZWRSZWdzLnNpemVSZWdpc3Rlcik7IC8vIE1lbW9yeSBz
aXplLgogICAgIGppdC5sb2FkUHRyKEpJVDo6QWRkcmVzcyhiYXNlTWVtb3J5LCBXYXNtOjpJbnN0
YW5jZTo6b2Zmc2V0T2ZDYWNoZWRNZW1vcnkoKSksIGJhc2VNZW1vcnkpOyAvLyBXYXNtOjpNZW1v
cnk6OnZvaWQqLgotICAgIGZvciAodW5zaWduZWQgaSA9IDE7IGkgPCBzaXplUmVncy5zaXplKCk7
ICsraSkgewotICAgICAgICBBU1NFUlQoc2l6ZVJlZ3NbaV0uc2l6ZVJlZ2lzdGVyICE9IGJhc2VN
ZW1vcnkpOwotICAgICAgICBBU1NFUlQoc2l6ZVJlZ3NbaV0uc2l6ZVJlZ2lzdGVyICE9IHNjcmF0
Y2gpOwotICAgICAgICBqaXQuYWRkNjQoSklUOjpUcnVzdGVkSW1tMzIoLXNpemVSZWdzW2ldLnNp
emVPZmZzZXQpLCBzaXplUmVnc1swXS5zaXplUmVnaXN0ZXIsIHNpemVSZWdzW2ldLnNpemVSZWdp
c3Rlcik7Ci0gICAgfQogCiAgICAgLy8gVGFpbCBjYWxsIGludG8gdGhlIGNhbGxlZSBXZWJBc3Nl
bWJseSBmdW5jdGlvbi4KICAgICBqaXQubG9hZFB0cihzY3JhdGNoLCBzY3JhdGNoKTsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21Db250ZXh0LmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUNvbnRleHQuaAkocmV2aXNpb24gMjQzNzgw
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUNvbnRleHQuaAkod29ya2luZyBj
b3B5KQpAQCAtMzIsMTIgKzMyLDE5IEBAIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgV2FzbSB7
CiBjbGFzcyBJbnN0YW5jZTsKIAogc3RydWN0IENvbnRleHQgewotICAgIEluc3RhbmNlKiBpbnN0
YW5jZSB7IG51bGxwdHIgfTsKLQogICAgIEluc3RhbmNlKiBsb2FkKCkgY29uc3Q7CiAgICAgdm9p
ZCBzdG9yZShJbnN0YW5jZSosIHZvaWQqIHNvZnRTdGFja0xpbWl0KTsKIAogICAgIHN0YXRpYyBi
b29sIHVzZUZhc3RUTFMoKTsKKworICAgIEluc3RhbmNlKiogcG9pbnRlclRvSW5zdGFuY2UoKQor
ICAgIHsKKyAgICAgICAgQVNTRVJUKCF1c2VGYXN0VExTKCkpOworICAgICAgICByZXR1cm4gJmlu
c3RhbmNlOworICAgIH0KKworcHJpdmF0ZToKKyAgICBJbnN0YW5jZSogaW5zdGFuY2UgeyBudWxs
cHRyIH07CiB9OwogCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6V2FzbQpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL3dhc20vV2FzbUNvbnRleHRJbmxpbmVzLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUNvbnRleHRJbmxpbmVzLmgJKHJldmlzaW9uIDI0
Mzc4MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21Db250ZXh0SW5saW5lcy5o
CSh3b3JraW5nIGNvcHkpCkBAIC01NSwxMyArNTUsMTUgQEAgaW5saW5lIEluc3RhbmNlKiBDb250
ZXh0Ojpsb2FkKCkgY29uc3QKIAogaW5saW5lIHZvaWQgQ29udGV4dDo6c3RvcmUoSW5zdGFuY2Uq
IGluc3QsIHZvaWQqIHNvZnRTdGFja0xpbWl0KQogeworICAgIGlmIChpbnN0KQorICAgICAgICBp
bnN0LT5zZXRDYWNoZWRTdGFja0xpbWl0KHNvZnRTdGFja0xpbWl0KTsKKwogI2lmIEVOQUJMRShG
QVNUX1RMU19KSVQpCiAgICAgaWYgKHVzZUZhc3RUTFMoKSkKICAgICAgICAgX3B0aHJlYWRfc2V0
c3BlY2lmaWNfZGlyZWN0KFdURl9XQVNNX0NPTlRFWFRfS0VZLCBiaXR3aXNlX2Nhc3Q8dm9pZCo+
KGluc3QpKTsKKyAgICBlbHNlCiAjZW5kaWYKLSAgICBpbnN0YW5jZSA9IGluc3Q7Ci0gICAgaWYg
KGluc3RhbmNlKQotICAgICAgICBpbnN0YW5jZS0+c2V0Q2FjaGVkU3RhY2tMaW1pdChzb2Z0U3Rh
Y2tMaW1pdCk7CisgICAgICAgIGluc3RhbmNlID0gaW5zdDsKIH0KIAogfSB9IC8vIG5hbWVzcGFj
ZSBKU0M6Oldhc20KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21NZW1vcnlJ
bmZvcm1hdGlvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20v
V2FzbU1lbW9yeUluZm9ybWF0aW9uLmNwcAkocmV2aXNpb24gMjQzNzgwKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL3dhc20vV2FzbU1lbW9yeUluZm9ybWF0aW9uLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtNDQsNiArNDQsMTEgQEAgc3RhdGljIFZlY3RvcjxHUFJSZWc+IGdldFBpbm5lZFJlZ2lz
dGVycwogICAgICAgICBHUFJSZWcgZ3ByID0gcmVnLmdwcigpOwogICAgICAgICBpZiAoIXJlbWFp
bmluZ1Bpbm5lZFJlZ2lzdGVycyB8fCBSZWdpc3RlclNldDo6c3RhY2tSZWdpc3RlcnMoKS5nZXQo
cmVnKSkKICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgaWYgKFJlZ2lzdGVyU2V0OjpydW50
aW1lVGFnUmVnaXN0ZXJzKCkuZ2V0KHJlZykpIHsKKyAgICAgICAgICAgIC8vIFNpbmNlIHdlIGRv
bid0IG5lZWQgdG8sIHdlIGN1cnJlbnRseSBkb24ndCBwaWNrIGZyb20gdGhlIHRhZyByZWdpc3Rl
cnMgdG8gYWxsb3cKKyAgICAgICAgICAgIC8vIEpTLT5XYXNtIHN0dWJzIHRvIGZyZWVseSB1c2Ug
dGhlc2UgcmVnaXN0ZXJzLgorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CiAgICAgICAg
IC0tcmVtYWluaW5nUGlubmVkUmVnaXN0ZXJzOwogICAgICAgICByZWdpc3RlcnMuYXBwZW5kKGdw
cik7CiAgICAgfSk7CkBAIC01NSwzNSArNjAsMjUgQEAgY29uc3QgUGlubmVkUmVnaXN0ZXJJbmZv
JiBQaW5uZWRSZWdpc3RlcgogICAgIHN0YXRpYyBMYXp5TmV2ZXJEZXN0cm95ZWQ8UGlubmVkUmVn
aXN0ZXJJbmZvPiBzdGF0aWNQaW5uZWRSZWdpc3RlckluZm87CiAgICAgc3RhdGljIHN0ZDo6b25j
ZV9mbGFnIHN0YXRpY1Bpbm5lZFJlZ2lzdGVySW5mb0ZsYWc7CiAgICAgc3RkOjpjYWxsX29uY2Uo
c3RhdGljUGlubmVkUmVnaXN0ZXJJbmZvRmxhZywgW10gKCkgewotICAgICAgICBWZWN0b3I8UGlu
bmVkU2l6ZVJlZ2lzdGVySW5mbz4gc2l6ZVJlZ2lzdGVyczsKLSAgICAgICAgR1BSUmVnIGJhc2VN
ZW1vcnlQb2ludGVyID0gSW52YWxpZEdQUlJlZzsKLSAgICAgICAgR1BSUmVnIHdhc21Db250ZXh0
SW5zdGFuY2VQb2ludGVyID0gSW52YWxpZEdQUlJlZzsKLQotICAgICAgICAvLyBGSVhNRTogV2Ug
c2hvdWxkIHN1cHBvcnQgbW9yZSB0aGFuIG9uZSBtZW1vcnkgc2l6ZSByZWdpc3RlciwgYW5kIHdl
IHNob3VsZCBhbGxvdyBkaWZmZXJlbnQKLSAgICAgICAgLy8gICAgICAgIFdlYkFzc2VtYmx5Lklu
c3RhbmNlIHRvIGhhdmUgZGlmZmVyZW50IHBpbnMuIFJpZ2h0IG5vdyB3ZSB0YWtlIGEgdmVjdG9y
IHdpdGggb25seSBvbmUgZW50cnkuCi0gICAgICAgIC8vICAgICAgICBJZiB3ZSBoYXZlIG1vcmUg
dGhhbiBvbmUgc2l6ZSByZWdpc3Rlciwgd2UgY2FuIGhhdmUgb25lIGZvciBlYWNoIGxvYWQgc2l6
ZSBjbGFzcy4KLSAgICAgICAgLy8gICAgICAgIHNlZTogaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTE2Mjk1MgotICAgICAgICBWZWN0b3I8dW5zaWduZWQ+IHBpbm5lZFNp
emVzID0geyAwIH07Ci0gICAgICAgIHVuc2lnbmVkIG51bWJlck9mUGlubmVkUmVnaXN0ZXJzID0g
cGlubmVkU2l6ZXMuc2l6ZSgpICsgMTsKKyAgICAgICAgdW5zaWduZWQgbnVtYmVyT2ZQaW5uZWRS
ZWdpc3RlcnMgPSAyOwogICAgICAgICBpZiAoIUNvbnRleHQ6OnVzZUZhc3RUTFMoKSkKICAgICAg
ICAgICAgICsrbnVtYmVyT2ZQaW5uZWRSZWdpc3RlcnM7CiAgICAgICAgIFZlY3RvcjxHUFJSZWc+
IHBpbm5lZFJlZ3MgPSBnZXRQaW5uZWRSZWdpc3RlcnMobnVtYmVyT2ZQaW5uZWRSZWdpc3RlcnMp
OwogCi0gICAgICAgIGJhc2VNZW1vcnlQb2ludGVyID0gcGlubmVkUmVncy50YWtlTGFzdCgpOwor
ICAgICAgICBHUFJSZWcgYmFzZU1lbW9yeVBvaW50ZXIgPSBwaW5uZWRSZWdzLnRha2VMYXN0KCk7
CisgICAgICAgIEdQUlJlZyBzaXplUmVnaXN0ZXIgPSBwaW5uZWRSZWdzLnRha2VMYXN0KCk7Cisg
ICAgICAgIEdQUlJlZyB3YXNtQ29udGV4dEluc3RhbmNlUG9pbnRlciA9IEludmFsaWRHUFJSZWc7
CiAgICAgICAgIGlmICghQ29udGV4dDo6dXNlRmFzdFRMUygpKQogICAgICAgICAgICAgd2FzbUNv
bnRleHRJbnN0YW5jZVBvaW50ZXIgPSBwaW5uZWRSZWdzLnRha2VMYXN0KCk7CiAKLSAgICAgICAg
QVNTRVJUKHBpbm5lZFNpemVzLnNpemUoKSA9PSBwaW5uZWRSZWdzLnNpemUoKSk7Ci0gICAgICAg
IGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBwaW5uZWRTaXplcy5zaXplKCk7ICsraSkKLSAgICAg
ICAgICAgIHNpemVSZWdpc3RlcnMuYXBwZW5kKHsgcGlubmVkUmVnc1tpXSwgcGlubmVkU2l6ZXNb
aV0gfSk7Ci0gICAgICAgIHN0YXRpY1Bpbm5lZFJlZ2lzdGVySW5mby5jb25zdHJ1Y3QoV1RGTW92
ZShzaXplUmVnaXN0ZXJzKSwgYmFzZU1lbW9yeVBvaW50ZXIsIHdhc21Db250ZXh0SW5zdGFuY2VQ
b2ludGVyKTsKKyAgICAgICAgc3RhdGljUGlubmVkUmVnaXN0ZXJJbmZvLmNvbnN0cnVjdChzaXpl
UmVnaXN0ZXIsIGJhc2VNZW1vcnlQb2ludGVyLCB3YXNtQ29udGV4dEluc3RhbmNlUG9pbnRlcik7
CiAgICAgfSk7CiAKICAgICByZXR1cm4gc3RhdGljUGlubmVkUmVnaXN0ZXJJbmZvLmdldCgpOwog
fQogCi1QaW5uZWRSZWdpc3RlckluZm86OlBpbm5lZFJlZ2lzdGVySW5mbyhWZWN0b3I8UGlubmVk
U2l6ZVJlZ2lzdGVySW5mbz4mJiBzaXplUmVnaXN0ZXJzLCBHUFJSZWcgYmFzZU1lbW9yeVBvaW50
ZXIsIEdQUlJlZyB3YXNtQ29udGV4dEluc3RhbmNlUG9pbnRlcikKLSAgICA6IHNpemVSZWdpc3Rl
cnMoV1RGTW92ZShzaXplUmVnaXN0ZXJzKSkKK1Bpbm5lZFJlZ2lzdGVySW5mbzo6UGlubmVkUmVn
aXN0ZXJJbmZvKEdQUlJlZyBzaXplUmVnaXN0ZXIsIEdQUlJlZyBiYXNlTWVtb3J5UG9pbnRlciwg
R1BSUmVnIHdhc21Db250ZXh0SW5zdGFuY2VQb2ludGVyKQorICAgIDogc2l6ZVJlZ2lzdGVyKHNp
emVSZWdpc3RlcikKICAgICAsIGJhc2VNZW1vcnlQb2ludGVyKGJhc2VNZW1vcnlQb2ludGVyKQog
ICAgICwgd2FzbUNvbnRleHRJbnN0YW5jZVBvaW50ZXIod2FzbUNvbnRleHRJbnN0YW5jZVBvaW50
ZXIpCiB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTWVtb3J5SW5mb3Jt
YXRpb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTWVt
b3J5SW5mb3JtYXRpb24uaAkocmV2aXNpb24gMjQzNzgwKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL3dhc20vV2FzbU1lbW9yeUluZm9ybWF0aW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ1LDcg
KzQ1LDcgQEAgc3RydWN0IFBpbm5lZFNpemVSZWdpc3RlckluZm8gewogCiBjbGFzcyBQaW5uZWRS
ZWdpc3RlckluZm8gewogcHVibGljOgotICAgIFBpbm5lZFJlZ2lzdGVySW5mbyhWZWN0b3I8UGlu
bmVkU2l6ZVJlZ2lzdGVySW5mbz4mJiwgR1BSUmVnLCBHUFJSZWcpOworICAgIFBpbm5lZFJlZ2lz
dGVySW5mbyhHUFJSZWcsIEdQUlJlZywgR1BSUmVnKTsKIAogICAgIHN0YXRpYyBjb25zdCBQaW5u
ZWRSZWdpc3RlckluZm8mIGdldCgpOwogCkBAIC01NSwxNCArNTUsMTIgQEAgcHVibGljOgogICAg
ICAgICByZXN1bHQuc2V0KGJhc2VNZW1vcnlQb2ludGVyKTsKICAgICAgICAgaWYgKHdhc21Db250
ZXh0SW5zdGFuY2VQb2ludGVyICE9IEludmFsaWRHUFJSZWcpCiAgICAgICAgICAgICByZXN1bHQu
c2V0KHdhc21Db250ZXh0SW5zdGFuY2VQb2ludGVyKTsKLSAgICAgICAgaWYgKG1vZGUgIT0gTWVt
b3J5TW9kZTo6U2lnbmFsaW5nKSB7Ci0gICAgICAgICAgICBmb3IgKGNvbnN0IGF1dG8mIGluZm8g
OiBzaXplUmVnaXN0ZXJzKQotICAgICAgICAgICAgICAgIHJlc3VsdC5zZXQoaW5mby5zaXplUmVn
aXN0ZXIpOwotICAgICAgICB9CisgICAgICAgIGlmIChtb2RlICE9IE1lbW9yeU1vZGU6OlNpZ25h
bGluZykKKyAgICAgICAgICAgIHJlc3VsdC5zZXQoc2l6ZVJlZ2lzdGVyKTsKICAgICAgICAgcmV0
dXJuIHJlc3VsdDsKICAgICB9CiAKLSAgICBWZWN0b3I8UGlubmVkU2l6ZVJlZ2lzdGVySW5mbz4g
c2l6ZVJlZ2lzdGVyczsKKyAgICBHUFJSZWcgc2l6ZVJlZ2lzdGVyOwogICAgIEdQUlJlZyBiYXNl
TWVtb3J5UG9pbnRlcjsKICAgICBHUFJSZWcgd2FzbUNvbnRleHRJbnN0YW5jZVBvaW50ZXI7CiB9
OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU9NR1BsYW4uY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21PTUdQbGFuLmNwcAkocmV2
aXNpb24gMjQzNzgwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU9NR1BsYW4u
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMzgsNyArMTM4LDcgQEAgdm9pZCBPTUdQbGFuOjp3b3Jr
KENvbXBpbGF0aW9uRWZmb3J0KQogICAgIHsKICAgICAgICAgTG9ja0hvbGRlciBob2xkZXIobV9j
b2RlQmxvY2stPm1fbG9jayk7CiAKLSAgICAgICAgYXV0byByZXBhdGNoQ2FsbHMgPSBbJl0gKGNv
bnN0IFZlY3RvcjxVbmxpbmtlZFdhc21Ub1dhc21DYWxsPiYgIGNhbGxzaXRlcykgeworICAgICAg
ICBhdXRvIHJlcGF0Y2hDYWxscyA9IFsmXSAoY29uc3QgVmVjdG9yPFVubGlua2VkV2FzbVRvV2Fz
bUNhbGw+JiBjYWxsc2l0ZXMpIHsKICAgICAgICAgICAgIGZvciAoYXV0byYgY2FsbCA6IGNhbGxz
aXRlcykgewogICAgICAgICAgICAgICAgIGRhdGFMb2dMbklmKFdhc21PTUdQbGFuSW50ZXJuYWw6
OnZlcmJvc2UsICJDb25zaWRlcmluZyByZXBhdGNoaW5nIGNhbGwgYXQ6ICIsIFJhd1BvaW50ZXIo
Y2FsbC5jYWxsTG9jYXRpb24uZGF0YUxvY2F0aW9uKCkpLCAiIHRoYXQgdGFyZ2V0cyAiLCBjYWxs
LmZ1bmN0aW9uSW5kZXhTcGFjZSk7CiAgICAgICAgICAgICAgICAgaWYgKGNhbGwuZnVuY3Rpb25J
bmRleFNwYWNlID09IGZ1bmN0aW9uSW5kZXhTcGFjZSkgewpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL3dhc20vanMvSlNUb1dhc20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS93YXNtL2pzL0pTVG9XYXNtLmNwcAkocmV2aXNpb24gMjQzNzgwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNUb1dhc20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0y
MTMsMTQgKzIxMyw4IEBAIHN0ZDo6dW5pcXVlX3B0cjxJbnRlcm5hbEZ1bmN0aW9uPiBjcmVhdGUK
ICAgICAgICAgICAgIGppdC5sb2FkV2FzbUNvbnRleHRJbnN0YW5jZShiYXNlTWVtb3J5KTsKIAog
ICAgICAgICBHUFJSZWcgY3VycmVudEluc3RhbmNlR1BSID0gQ29udGV4dDo6dXNlRmFzdFRMUygp
ID8gYmFzZU1lbW9yeSA6IHdhc21Db250ZXh0SW5zdGFuY2VHUFI7Ci0gICAgICAgIGlmIChtb2Rl
ICE9IE1lbW9yeU1vZGU6OlNpZ25hbGluZykgewotICAgICAgICAgICAgY29uc3QgYXV0byYgc2l6
ZVJlZ3MgPSBwaW5uZWRSZWdzLnNpemVSZWdpc3RlcnM7Ci0gICAgICAgICAgICBBU1NFUlQoc2l6
ZVJlZ3Muc2l6ZSgpID49IDEpOwotICAgICAgICAgICAgQVNTRVJUKCFzaXplUmVnc1swXS5zaXpl
T2Zmc2V0KTsgLy8gVGhlIGZvbGxvd2luZyBjb2RlIGFzc3VtZXMgd2Ugc3RhcnQgYXQgMCwgYW5k
IGNhbGN1bGF0ZXMgc3Vic2VxdWVudCBzaXplIHJlZ2lzdGVycyByZWxhdGl2ZSB0byAwLgotICAg
ICAgICAgICAgaml0LmxvYWRQdHIoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKGN1cnJlbnRJbnN0YW5j
ZUdQUiwgV2FzbTo6SW5zdGFuY2U6Om9mZnNldE9mQ2FjaGVkTWVtb3J5U2l6ZSgpKSwgc2l6ZVJl
Z3NbMF0uc2l6ZVJlZ2lzdGVyKTsKLSAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDE7IGkg
PCBzaXplUmVncy5zaXplKCk7ICsraSkKLSAgICAgICAgICAgICAgICBqaXQuYWRkNjQoQ0NhbGxI
ZWxwZXJzOjpUcnVzdGVkSW1tMzIoLXNpemVSZWdzW2ldLnNpemVPZmZzZXQpLCBzaXplUmVnc1sw
XS5zaXplUmVnaXN0ZXIsIHNpemVSZWdzW2ldLnNpemVSZWdpc3Rlcik7Ci0gICAgICAgIH0KKyAg
ICAgICAgaWYgKG1vZGUgIT0gTWVtb3J5TW9kZTo6U2lnbmFsaW5nKQorICAgICAgICAgICAgaml0
LmxvYWRQdHIoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKGN1cnJlbnRJbnN0YW5jZUdQUiwgV2FzbTo6
SW5zdGFuY2U6Om9mZnNldE9mQ2FjaGVkTWVtb3J5U2l6ZSgpKSwgcGlubmVkUmVncy5zaXplUmVn
aXN0ZXIpOwogCiAgICAgICAgIGppdC5sb2FkUHRyKENDYWxsSGVscGVyczo6QWRkcmVzcyhjdXJy
ZW50SW5zdGFuY2VHUFIsIFdhc206Okluc3RhbmNlOjpvZmZzZXRPZkNhY2hlZE1lbW9yeSgpKSwg
YmFzZU1lbW9yeSk7CiAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMv
SlNUb1dhc21JQ0NhbGxlZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L3dhc20vanMvSlNUb1dhc21JQ0NhbGxlZS5jcHAJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL3dhc20vanMvSlNUb1dhc21JQ0NhbGxlZS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTAsMCArMSw2MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxOSBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IK
KyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor
ICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJKU1RvV2FzbUlDQ2FsbGVlLmgi
CisKKyNpZiBFTkFCTEUoV0VCQVNTRU1CTFkpCisKKyNpbmNsdWRlICJXZWJBc3NlbWJseUZ1bmN0
aW9uLmgiCisKK25hbWVzcGFjZSBKU0MgeworCitjb25zdCBDbGFzc0luZm8gSlNUb1dhc21JQ0Nh
bGxlZTo6c19pbmZvID0geyAiSlNUb1dhc21JQ0NhbGxlZSIsICZCYXNlOjpzX2luZm8sIG51bGxw
dHIsIG51bGxwdHIsIENSRUFURV9NRVRIT0RfVEFCTEUoSlNUb1dhc21JQ0NhbGxlZSkgfTsKKwor
SlNUb1dhc21JQ0NhbGxlZSogSlNUb1dhc21JQ0NhbGxlZTo6Y3JlYXRlKFZNJiB2bSwgSlNHbG9i
YWxPYmplY3QqIGdsb2JhbE9iamVjdCwgV2ViQXNzZW1ibHlGdW5jdGlvbiogZnVuY3Rpb24pCit7
CisgICAgYXV0byogc3RydWN0dXJlID0gZ2xvYmFsT2JqZWN0LT5qc1RvV2FzbUlDQ2FsbGVlU3Ry
dWN0dXJlKCk7CisgICAgSlNUb1dhc21JQ0NhbGxlZSogcmVzdWx0ID0gbmV3IChOb3ROdWxsLCBh
bGxvY2F0ZUNlbGw8SlNUb1dhc21JQ0NhbGxlZT4odm0uaGVhcCkpIEpTVG9XYXNtSUNDYWxsZWUo
dm0sIGdsb2JhbE9iamVjdCwgc3RydWN0dXJlKTsKKyAgICByZXN1bHQtPmZpbmlzaENyZWF0aW9u
KHZtKTsKKyAgICByZXN1bHQtPm1fZnVuY3Rpb24uc2V0KHZtLCByZXN1bHQsIGZ1bmN0aW9uKTsK
KyAgICByZXR1cm4gcmVzdWx0OworfQorCitTdHJ1Y3R1cmUqIEpTVG9XYXNtSUNDYWxsZWU6OmNy
ZWF0ZVN0cnVjdHVyZShWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFs
dWUgcHJvdG90eXBlKQoreworICAgIHJldHVybiBTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFs
T2JqZWN0LCBwcm90b3R5cGUsIFR5cGVJbmZvKEpTQ2FsbGVlVHlwZSwgU3RydWN0dXJlRmxhZ3Mp
LCBpbmZvKCkpOworfQorCit2b2lkIEpTVG9XYXNtSUNDYWxsZWU6OnZpc2l0Q2hpbGRyZW4oSlND
ZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3sKKyAgICBKU1RvV2FzbUlDQ2FsbGVl
KiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTVG9XYXNtSUNDYWxsZWUqPihjZWxsKTsKKyAgICBBU1NF
UlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CisKKyAgICBCYXNlOjp2
aXNpdENoaWxkcmVuKHRoaXNPYmplY3QsIHZpc2l0b3IpOworICAgIHZpc2l0b3IuYXBwZW5kKHRo
aXNPYmplY3QtPm1fZnVuY3Rpb24pOworfQorCit9IC8vIG5hbWVzcGFjZSBKU0MKKworI2VuZGlm
IC8vIEVOQUJMRShXRUJBU1NFTUJMWSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNt
L2pzL0pTVG9XYXNtSUNDYWxsZWUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvd2FzbS9qcy9KU1RvV2FzbUlDQ2FsbGVlLmgJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL3dhc20vanMvSlNUb1dhc21JQ0NhbGxlZS5oCSh3b3JraW5nIGNvcHkpCkBA
IC0wLDAgKzEsNTcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTkgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisg
KiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAq
LworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIkpTQ2FsbGVlLmgiCisKK25hbWVzcGFjZSBK
U0MgeworCisjaWYgRU5BQkxFKFdFQkFTU0VNQkxZKQorCitjbGFzcyBXZWJBc3NlbWJseUZ1bmN0
aW9uOworCitjbGFzcyBKU1RvV2FzbUlDQ2FsbGVlIDogcHVibGljIEpTQ2FsbGVlIHsKKyAgICB1
c2luZyBCYXNlID0gSlNDYWxsZWU7CitwdWJsaWM6CisgICAgREVDTEFSRV9JTkZPOworCisgICAg
c3RhdGljIEpTVG9XYXNtSUNDYWxsZWUqIGNyZWF0ZShWTSYsIEpTR2xvYmFsT2JqZWN0KiwgV2Vi
QXNzZW1ibHlGdW5jdGlvbiopOworICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVy
ZShWTSYsIEpTR2xvYmFsT2JqZWN0KiwgSlNWYWx1ZSk7CisKKyAgICBXZWJBc3NlbWJseUZ1bmN0
aW9uKiBmdW5jdGlvbigpIHsgcmV0dXJuIG1fZnVuY3Rpb24uZ2V0KCk7IH0KKworcHJpdmF0ZToK
KyAgICBKU1RvV2FzbUlDQ2FsbGVlKFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVj
dCwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCisgICAgICAgIDogQmFzZSh2bSwgZ2xvYmFsT2JqZWN0
LCBzdHJ1Y3R1cmUpCisgICAgeyB9CisgICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0Nl
bGwqLCBTbG90VmlzaXRvciYpOworCisgICAgV3JpdGVCYXJyaWVyPFdlYkFzc2VtYmx5RnVuY3Rp
b24+IG1fZnVuY3Rpb247Cit9OworCisjZW5kaWYgLy8gRU5BQkxFKFdFQkFTU0VNQkxZKQorCit9
IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dl
YkFzc2VtYmx5RnVuY3Rpb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS93YXNtL2pzL1dlYkFzc2VtYmx5RnVuY3Rpb24uY3BwCShyZXZpc2lvbiAyNDM3ODApCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseUZ1bmN0aW9uLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMzYsMTIgKzM2LDE2IEBACiAjaW5jbHVkZSAiSlNXZWJBc3NlbWJseU1l
bW9yeS5oIgogI2luY2x1ZGUgIkpTV2ViQXNzZW1ibHlSdW50aW1lRXJyb3IuaCIKICNpbmNsdWRl
ICJMTEludFRodW5rcy5oIgorI2luY2x1ZGUgIkxpbmtCdWZmZXIuaCIKICNpbmNsdWRlICJQcm90
b0NhbGxGcmFtZS5oIgogI2luY2x1ZGUgIlZNLmgiCiAjaW5jbHVkZSAiV2FzbUNhbGxlZS5oIgor
I2luY2x1ZGUgIldhc21DYWxsaW5nQ29udmVudGlvbi5oIgogI2luY2x1ZGUgIldhc21Db250ZXh0
SW5saW5lcy5oIgogI2luY2x1ZGUgIldhc21Gb3JtYXQuaCIKICNpbmNsdWRlICJXYXNtTWVtb3J5
LmgiCisjaW5jbHVkZSAiV2FzbU1lbW9yeUluZm9ybWF0aW9uLmgiCisjaW5jbHVkZSAiV2FzbU1v
ZHVsZUluZm9ybWF0aW9uLmgiCiAjaW5jbHVkZSAiV2FzbVNpZ25hdHVyZUlubGluZXMuaCIKICNp
bmNsdWRlIDx3dGYvRmFzdFRMUy5oPgogI2luY2x1ZGUgPHd0Zi9TdGFja1BvaW50ZXIuaD4KQEAg
LTE0OCw2ICsxNTIsMzM1IEBAIHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNh
bGwKICAgICByZXR1cm4gcmF3UmVzdWx0OwogfQogCitib29sIFdlYkFzc2VtYmx5RnVuY3Rpb246
OnVzZVRhZ1JlZ2lzdGVycygpIGNvbnN0Cit7CisgICAgY29uc3QgYXV0byYgc2lnbmF0dXJlID0g
V2FzbTo6U2lnbmF0dXJlSW5mb3JtYXRpb246OmdldChzaWduYXR1cmVJbmRleCgpKTsKKyAgICBy
ZXR1cm4gc2lnbmF0dXJlLmFyZ3VtZW50Q291bnQoKSB8fCBzaWduYXR1cmUucmV0dXJuVHlwZSgp
ICE9IFdhc206OlZvaWQ7Cit9CisKK1JlZ2lzdGVyU2V0IFdlYkFzc2VtYmx5RnVuY3Rpb246OmNh
bGxlZVNhdmVzKCkgY29uc3QKK3sKKyAgICBSZWdpc3RlclNldCB0b1NhdmUgPSBXYXNtOjpQaW5u
ZWRSZWdpc3RlckluZm86OmdldCgpLnRvU2F2ZShpbnN0YW5jZSgpLT5tZW1vcnlNb2RlKCkpOwor
ICAgIGlmICh1c2VUYWdSZWdpc3RlcnMoKSkgeworICAgICAgICBSZWdpc3RlclNldCB0YWdSZWdp
c3RlcnMgPSBSZWdpc3RlclNldDo6cnVudGltZVRhZ1JlZ2lzdGVycygpOworICAgICAgICAvLyBX
ZSByZWx5IG9uIHRoZXNlIGJlaW5nIGRpc2pvaW50IHNldHMuCisjaWYgIUFTU0VSVF9ESVNBQkxF
RAorICAgICAgICBmb3IgKFJlZyByZWcgOiB0YWdSZWdpc3RlcnMpCisgICAgICAgICAgICBBU1NF
UlQoIXRvU2F2ZS5jb250YWlucyhyZWcpKTsKKyNlbmRpZgorICAgICAgICB0b1NhdmUubWVyZ2Uo
dGFnUmVnaXN0ZXJzKTsKKyAgICB9CisgICAgcmV0dXJuIHRvU2F2ZTsKK30KKworUmVnaXN0ZXJB
dE9mZnNldExpc3QgV2ViQXNzZW1ibHlGdW5jdGlvbjo6dXNlZENhbGxlZVNhdmVSZWdpc3RlcnMo
KSBjb25zdAoreworICAgIHJldHVybiBSZWdpc3RlckF0T2Zmc2V0TGlzdCB7IGNhbGxlZVNhdmVz
KCksIFJlZ2lzdGVyQXRPZmZzZXRMaXN0OjpPZmZzZXRCYXNlVHlwZTo6RnJhbWVQb2ludGVyQmFz
ZWQgfTsKK30KKworcHRyZGlmZl90IFdlYkFzc2VtYmx5RnVuY3Rpb246OnByZXZpb3VzSW5zdGFu
Y2VPZmZzZXQoKSBjb25zdAoreworICAgIHB0cmRpZmZfdCByZXN1bHQgPSBjYWxsZWVTYXZlcygp
Lm51bWJlck9mU2V0UmVnaXN0ZXJzKCkgKiBzaXplb2YoQ1BVUmVnaXN0ZXIpOworICAgIHJlc3Vs
dCA9IC1yZXN1bHQgLSBzaXplb2YoQ1BVUmVnaXN0ZXIpOworI2lmICFBU1NFUlRfRElTQUJMRUQK
KyAgICBwdHJkaWZmX3QgbWluT2Zmc2V0ID0gMTsKKyAgICBmb3IgKGNvbnN0IFJlZ2lzdGVyQXRP
ZmZzZXQmIHJlZ0F0T2Zmc2V0IDogdXNlZENhbGxlZVNhdmVSZWdpc3RlcnMoKSkgeworICAgICAg
ICBwdHJkaWZmX3Qgb2Zmc2V0ID0gcmVnQXRPZmZzZXQub2Zmc2V0KCk7CisgICAgICAgIEFTU0VS
VChvZmZzZXQgPCAwKTsKKyAgICAgICAgbWluT2Zmc2V0ID0gc3RkOjptaW4ob2Zmc2V0LCBtaW5P
ZmZzZXQpOworICAgIH0KKyAgICBBU1NFUlQobWluT2Zmc2V0IC0gc3RhdGljX2Nhc3Q8cHRyZGlm
Zl90PihzaXplb2YoQ1BVUmVnaXN0ZXIpKSA9PSByZXN1bHQpOworI2VuZGlmCisgICAgcmV0dXJu
IHJlc3VsdDsKK30KKworV2FzbTo6SW5zdGFuY2UqIFdlYkFzc2VtYmx5RnVuY3Rpb246OnByZXZp
b3VzSW5zdGFuY2UoQ2FsbEZyYW1lKiBjYWxsRnJhbWUpCit7CisgICAgQVNTRVJUKGNhbGxGcmFt
ZS0+Y2FsbGVlKCkucmF3UHRyKCkgPT0gbV9qc1RvV2FzbUlDQ2FsbGVlLmdldCgpKTsKKyAgICBh
dXRvKiByZXN1bHQgPSAqYml0d2lzZV9jYXN0PFdhc206Okluc3RhbmNlKio+KGJpdHdpc2VfY2Fz
dDxjaGFyKj4oY2FsbEZyYW1lKSArIHByZXZpb3VzSW5zdGFuY2VPZmZzZXQoKSk7CisgICAgcmV0
dXJuIHJlc3VsdDsKK30KKworTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPEpTRW50cnlQdHJUYWc+IFdl
YkFzc2VtYmx5RnVuY3Rpb246OmpzQ2FsbEVudHJ5cG9pbnRTbG93KCkKK3sKKyAgICBWTSYgdm0g
PSAqdGhpcy0+dm0oKTsKKyAgICBDQ2FsbEhlbHBlcnMgaml0OworCisgICAgY29uc3QgYXV0byYg
c2lnbmF0dXJlID0gV2FzbTo6U2lnbmF0dXJlSW5mb3JtYXRpb246OmdldChzaWduYXR1cmVJbmRl
eCgpKTsKKyAgICBjb25zdCBhdXRvJiBwaW5uZWRSZWdzID0gV2FzbTo6UGlubmVkUmVnaXN0ZXJJ
bmZvOjpnZXQoKTsKKyAgICBSZWdpc3RlckF0T2Zmc2V0TGlzdCByZWdpc3RlcnNUb1NwaWxsID0g
dXNlZENhbGxlZVNhdmVSZWdpc3RlcnMoKTsKKworICAgIGF1dG8mIG1vZHVsZUluZm9ybWF0aW9u
ID0gaW5zdGFuY2UoKS0+aW5zdGFuY2UoKS5tb2R1bGUoKS5tb2R1bGVJbmZvcm1hdGlvbigpOwor
CisgICAgdW5zaWduZWQgdG90YWxGcmFtZVNpemUgPSByZWdpc3RlcnNUb1NwaWxsLnNpemUoKSAq
IHNpemVvZihDUFVSZWdpc3Rlcik7CisgICAgdG90YWxGcmFtZVNpemUgKz0gc2l6ZW9mKENQVVJl
Z2lzdGVyKTsgLy8gU2xvdCBmb3IgdGhlIFZNJ3MgcHJldmlvdXMgd2FzbSBpbnN0YW5jZS4KKyAg
ICB0b3RhbEZyYW1lU2l6ZSArPSBXYXNtOjpXYXNtQ2FsbGluZ0NvbnZlbnRpb246OmhlYWRlclNp
emVJbkJ5dGVzKCk7CisgICAgdG90YWxGcmFtZVNpemUgLT0gc2l6ZW9mKENhbGxlckZyYW1lQW5k
UEMpOworCisgICAgdW5zaWduZWQgbnVtR1BScyA9IDA7CisgICAgdW5zaWduZWQgbnVtRlBScyA9
IDA7CisgICAgYm9vbCBhcmd1bWVudHNJbmNsdWRlSTY0ID0gZmFsc2U7CisgICAgZm9yICh1bnNp
Z25lZCBpID0gMDsgaSA8IHNpZ25hdHVyZS5hcmd1bWVudENvdW50KCk7IGkrKykgeworICAgICAg
ICBzd2l0Y2ggKHNpZ25hdHVyZS5hcmd1bWVudChpKSkgeworICAgICAgICBjYXNlIFdhc206Okk2
NDoKKyAgICAgICAgICAgIGFyZ3VtZW50c0luY2x1ZGVJNjQgPSB0cnVlOworICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgIGNhc2UgV2FzbTo6STMyOgorICAgICAgICAgICAgaWYgKG51bUdQUnMg
Pj0gV2FzbTo6d2FzbUNhbGxpbmdDb252ZW50aW9uKCkubV9ncHJBcmdzLnNpemUoKSkKKyAgICAg
ICAgICAgICAgICB0b3RhbEZyYW1lU2l6ZSArPSBzaXplb2YoQ1BVUmVnaXN0ZXIpOworICAgICAg
ICAgICAgKytudW1HUFJzOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgV2FzbTo6
RjMyOgorICAgICAgICBjYXNlIFdhc206OkY2NDoKKyAgICAgICAgICAgIGlmIChudW1GUFJzID49
IFdhc206Ondhc21DYWxsaW5nQ29udmVudGlvbigpLm1fZnByQXJncy5zaXplKCkpCisgICAgICAg
ICAgICAgICAgdG90YWxGcmFtZVNpemUgKz0gc2l6ZW9mKENQVVJlZ2lzdGVyKTsKKyAgICAgICAg
ICAgICsrbnVtRlBSczsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBkZWZhdWx0OgorICAg
ICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgfQorICAgIH0K
KworICAgIGlmIChhcmd1bWVudHNJbmNsdWRlSTY0KQorICAgICAgICByZXR1cm4gbnVsbHB0cjsK
KworICAgIHRvdGFsRnJhbWVTaXplID0gV1RGOjpyb3VuZFVwVG9NdWx0aXBsZU9mKHN0YWNrQWxp
Z25tZW50Qnl0ZXMoKSwgdG90YWxGcmFtZVNpemUpOworCisgICAgaml0LmVtaXRGdW5jdGlvblBy
b2xvZ3VlKCk7CisgICAgaml0LnN1YlB0cihNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKHRv
dGFsRnJhbWVTaXplKSwgTWFjcm9Bc3NlbWJsZXI6OnN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKKyAg
ICBqaXQuc3RvcmU2NChDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW02NCgwKSwgQ0NhbGxIZWxwZXJz
OjphZGRyZXNzRm9yKENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9jaykpOworCisgICAgZm9yIChjb25z
dCBSZWdpc3RlckF0T2Zmc2V0JiByZWdBdE9mZnNldCA6IHJlZ2lzdGVyc1RvU3BpbGwpIHsKKyAg
ICAgICAgR1BSUmVnIHJlZyA9IHJlZ0F0T2Zmc2V0LnJlZygpLmdwcigpOworICAgICAgICBwdHJk
aWZmX3Qgb2Zmc2V0ID0gcmVnQXRPZmZzZXQub2Zmc2V0KCk7CisgICAgICAgIGppdC5zdG9yZVB0
cihyZWcsIENDYWxsSGVscGVyczo6QWRkcmVzcyhHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3Rlciwg
b2Zmc2V0KSk7CisgICAgfQorCisgICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSBXYXNtOjp3YXNtQ2Fs
bGluZ0NvbnZlbnRpb25BaXIoKS5wcm9sb2d1ZVNjcmF0Y2goMSk7CisgICAgR1BSUmVnIHNjcmF0
Y2gyR1BSID0gV2FzbTo6d2FzbUNhbGxpbmdDb252ZW50aW9uQWlyKCkucHJvbG9ndWVTY3JhdGNo
KDApOworICAgIGppdC5sb2FkUHRyKHZtLmFkZHJlc3NPZlNvZnRTdGFja0xpbWl0KCksIHNjcmF0
Y2gyR1BSKTsKKworICAgIENDYWxsSGVscGVyczo6SnVtcExpc3Qgc2xvd1BhdGg7CisgICAgc2xv
d1BhdGguYXBwZW5kKGppdC5icmFuY2hQdHIoQ0NhbGxIZWxwZXJzOjpBYm92ZSwgTWFjcm9Bc3Nl
bWJsZXI6OnN0YWNrUG9pbnRlclJlZ2lzdGVyLCBHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3Rlcikp
OworICAgIHNsb3dQYXRoLmFwcGVuZChqaXQuYnJhbmNoUHRyKENDYWxsSGVscGVyczo6QmVsb3cs
IE1hY3JvQXNzZW1ibGVyOjpzdGFja1BvaW50ZXJSZWdpc3Rlciwgc2NyYXRjaDJHUFIpKTsKKwor
ICAgIC8vIEVuc3VyZToKKyAgICAvLyBhcmdDb3VudFBsdXNUaGlzIC0gMSA+PSBzaWduYXR1cmUu
YXJndW1lbnRDb3VudCgpCisgICAgLy8gYXJnQ291bnRQbHVzVGhpcyA+PSBzaWduYXR1cmUuYXJn
dW1lbnRDb3VudCgpICsgMQorICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgaGFuZGxlIG1pc21hdGNo
ZWQgYXJpdHkKKyAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MTk2NTY0CisgICAgc2xvd1BhdGguYXBwZW5kKGppdC5icmFuY2gzMihDQ2FsbEhlbHBlcnM6OkJl
bG93LAorICAgICAgICBDQ2FsbEhlbHBlcnM6OnBheWxvYWRGb3IoQ2FsbEZyYW1lU2xvdDo6YXJn
dW1lbnRDb3VudCksIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKHNpZ25hdHVyZS5hcmd1bWVu
dENvdW50KCkgKyAxKSkpOworCisgICAgaWYgKHVzZVRhZ1JlZ2lzdGVycygpKQorICAgICAgICBq
aXQuZW1pdE1hdGVyaWFsaXplVGFnQ2hlY2tSZWdpc3RlcnMoKTsKKworICAgIC8vIEZpcnN0IHdl
IGRvIHN0YWNrIHNsb3RzIGZvciBGUFJzIHNvIHdlIGNhbiB1c2UgRlBSIGFyZ3VtZW50IHJlZ2lz
dGVycyBhcyBzY3JhdGNoLgorICAgIC8vIEFmdGVyIHRoYXQsIHdlIGhhbmRsZSBGUFIgYXJndW1l
bnQgcmVnaXN0ZXJzLgorICAgIC8vIFdlIGFsc28gaGFuZGxlIGFsbCBHUFIgdHlwZXMgaGVyZSBh
cyB3ZSBoYXZlIEdQUiBzY3JhdGNoIHJlZ2lzdGVycy4KKyAgICB7CisgICAgICAgIENDYWxsSGVs
cGVyczo6QWRkcmVzcyBjYWxsZWVGcmFtZSA9IENDYWxsSGVscGVyczo6QWRkcmVzcyhNYWNyb0Fz
c2VtYmxlcjo6c3RhY2tQb2ludGVyUmVnaXN0ZXIsIC1zdGF0aWNfY2FzdDxwdHJkaWZmX3Q+KHNp
emVvZihDYWxsZXJGcmFtZUFuZFBDKSkpOworICAgICAgICBudW1HUFJzID0gMDsKKyAgICAgICAg
bnVtRlBScyA9IDA7CisgICAgICAgIEZQUlJlZyBzY3JhdGNoRlBSID0gV2FzbTo6d2FzbUNhbGxp
bmdDb252ZW50aW9uKCkubV9mcHJBcmdzWzBdLmZwcigpOworCisgICAgICAgIHB0cmRpZmZfdCBq
c09mZnNldCA9IENhbGxGcmFtZVNsb3Q6OmZpcnN0QXJndW1lbnQgKiBzaXplb2YoRW5jb2RlZEpT
VmFsdWUpOworCisgICAgICAgIHB0cmRpZmZfdCB3YXNtT2Zmc2V0ID0gQ2FsbEZyYW1lOjpoZWFk
ZXJTaXplSW5SZWdpc3RlcnMgKiBzaXplb2YoQ1BVUmVnaXN0ZXIpOworICAgICAgICBmb3IgKHVu
c2lnbmVkIGkgPSAwOyBpIDwgc2lnbmF0dXJlLmFyZ3VtZW50Q291bnQoKTsgaSsrKSB7CisgICAg
ICAgICAgICBzd2l0Y2ggKHNpZ25hdHVyZS5hcmd1bWVudChpKSkgeworICAgICAgICAgICAgY2Fz
ZSBXYXNtOjpJMzI6CisgICAgICAgICAgICAgICAgaml0LmxvYWQ2NChDQ2FsbEhlbHBlcnM6OkFk
ZHJlc3MoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIGpzT2Zmc2V0KSwgc2NyYXRjaEdQUik7
CisgICAgICAgICAgICAgICAgc2xvd1BhdGguYXBwZW5kKGppdC5icmFuY2hJZk5vdEludDMyKHNj
cmF0Y2hHUFIpKTsKKyAgICAgICAgICAgICAgICBpZiAobnVtR1BScyA+PSBXYXNtOjp3YXNtQ2Fs
bGluZ0NvbnZlbnRpb24oKS5tX2dwckFyZ3Muc2l6ZSgpKSB7CisgICAgICAgICAgICAgICAgICAg
IGppdC5zdG9yZTMyKHNjcmF0Y2hHUFIsIGNhbGxlZUZyYW1lLndpdGhPZmZzZXQod2FzbU9mZnNl
dCkpOworICAgICAgICAgICAgICAgICAgICB3YXNtT2Zmc2V0ICs9IHNpemVvZihDUFVSZWdpc3Rl
cik7CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgaml0Lnpl
cm9FeHRlbmQzMlRvUHRyKHNjcmF0Y2hHUFIsIFdhc206Ondhc21DYWxsaW5nQ29udmVudGlvbigp
Lm1fZ3ByQXJnc1tudW1HUFJzXS5ncHIoKSk7CisgICAgICAgICAgICAgICAgICAgICsrbnVtR1BS
czsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAg
ICBjYXNlIFdhc206OkYzMjoKKyAgICAgICAgICAgIGNhc2UgV2FzbTo6RjY0OgorICAgICAgICAg
ICAgICAgIGlmIChudW1GUFJzID49IFdhc206Ondhc21DYWxsaW5nQ29udmVudGlvbigpLm1fZnBy
QXJncy5zaXplKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgaml0LmxvYWQ2NChDQ2FsbEhlbHBl
cnM6OkFkZHJlc3MoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIGpzT2Zmc2V0KSwgc2NyYXRj
aEdQUik7CisgICAgICAgICAgICAgICAgICAgIHNsb3dQYXRoLmFwcGVuZChqaXQuYnJhbmNoSWZO
b3ROdW1iZXIoc2NyYXRjaEdQUikpOworICAgICAgICAgICAgICAgICAgICBhdXRvIGlzSW50MzIg
PSBqaXQuYnJhbmNoSWZJbnQzMihzY3JhdGNoR1BSKTsKKyAgICAgICAgICAgICAgICAgICAgaWYg
KHNpZ25hdHVyZS5hcmd1bWVudChpKSA9PSBXYXNtOjpGMzIpIHsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIGppdC51bmJveERvdWJsZShzY3JhdGNoR1BSLCBzY3JhdGNoR1BSLCBzY3JhdGNoRlBS
KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGppdC5jb252ZXJ0RG91YmxlVG9GbG9hdChzY3Jh
dGNoRlBSLCBzY3JhdGNoRlBSKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGppdC5zdG9yZUZs
b2F0KHNjcmF0Y2hGUFIsIGNhbGxlZUZyYW1lLndpdGhPZmZzZXQod2FzbU9mZnNldCkpOworICAg
ICAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgaml0LmFk
ZDY0KEdQUkluZm86OnRhZ1R5cGVOdW1iZXJSZWdpc3Rlciwgc2NyYXRjaEdQUiwgc2NyYXRjaEdQ
Uik7CisgICAgICAgICAgICAgICAgICAgICAgICBqaXQuc3RvcmU2NChzY3JhdGNoR1BSLCBjYWxs
ZWVGcmFtZS53aXRoT2Zmc2V0KHdhc21PZmZzZXQpKTsKKyAgICAgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgICAgICAgICBhdXRvIGRvbmUgPSBqaXQuanVtcCgpOworCisgICAgICAgICAg
ICAgICAgICAgIGlzSW50MzIubGluaygmaml0KTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHNp
Z25hdHVyZS5hcmd1bWVudChpKSA9PSBXYXNtOjpGMzIpIHsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIGppdC5jb252ZXJ0SW50MzJUb0Zsb2F0KHNjcmF0Y2hHUFIsIHNjcmF0Y2hGUFIpOworICAg
ICAgICAgICAgICAgICAgICAgICAgaml0LnN0b3JlRmxvYXQoc2NyYXRjaEZQUiwgY2FsbGVlRnJh
bWUud2l0aE9mZnNldCh3YXNtT2Zmc2V0KSk7CisgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7
CisgICAgICAgICAgICAgICAgICAgICAgICBqaXQuY29udmVydEludDMyVG9Eb3VibGUoc2NyYXRj
aEdQUiwgc2NyYXRjaEZQUik7CisgICAgICAgICAgICAgICAgICAgICAgICBqaXQuc3RvcmVEb3Vi
bGUoc2NyYXRjaEZQUiwgY2FsbGVlRnJhbWUud2l0aE9mZnNldCh3YXNtT2Zmc2V0KSk7CisgICAg
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgZG9uZS5saW5rKCZqaXQpOwor
CisgICAgICAgICAgICAgICAgICAgIHdhc21PZmZzZXQgKz0gc2l6ZW9mKENQVVJlZ2lzdGVyKTsK
KyAgICAgICAgICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgICAgICAgICAgKytudW1GUFJzOwor
ICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAg
ICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgfQorCisgICAg
ICAgICAgICBqc09mZnNldCArPSBzaXplb2YoRW5jb2RlZEpTVmFsdWUpOworICAgICAgICB9Cisg
ICAgfQorCisgICAgLy8gTm93IGhhbmRsZSBGUFIgYXJndW1lbnRzIGluIHJlZ2lzdGVycy4KKyAg
ICB7CisgICAgICAgIG51bUZQUnMgPSAwOworICAgICAgICBwdHJkaWZmX3QganNPZmZzZXQgPSBD
YWxsRnJhbWVTbG90OjpmaXJzdEFyZ3VtZW50ICogc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKTsKKyAg
ICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHNpZ25hdHVyZS5hcmd1bWVudENvdW50KCk7
IGkrKykgeworICAgICAgICAgICAgc3dpdGNoIChzaWduYXR1cmUuYXJndW1lbnQoaSkpIHsKKyAg
ICAgICAgICAgIGNhc2UgV2FzbTo6RjMyOgorICAgICAgICAgICAgY2FzZSBXYXNtOjpGNjQ6Cisg
ICAgICAgICAgICAgICAgaWYgKG51bUZQUnMgPCBXYXNtOjp3YXNtQ2FsbGluZ0NvbnZlbnRpb24o
KS5tX2ZwckFyZ3Muc2l6ZSgpKSB7CisgICAgICAgICAgICAgICAgICAgIEZQUlJlZyBhcmdGUFIg
PSBXYXNtOjp3YXNtQ2FsbGluZ0NvbnZlbnRpb24oKS5tX2ZwckFyZ3NbbnVtRlBSc10uZnByKCk7
CisgICAgICAgICAgICAgICAgICAgIGppdC5sb2FkNjQoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKEdQ
UkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCBqc09mZnNldCksIHNjcmF0Y2hHUFIpOworICAgICAg
ICAgICAgICAgICAgICBzbG93UGF0aC5hcHBlbmQoaml0LmJyYW5jaElmTm90TnVtYmVyKHNjcmF0
Y2hHUFIpKTsKKyAgICAgICAgICAgICAgICAgICAgYXV0byBpc0ludDMyID0gaml0LmJyYW5jaElm
SW50MzIoc2NyYXRjaEdQUik7CisgICAgICAgICAgICAgICAgICAgIGppdC51bmJveERvdWJsZShz
Y3JhdGNoR1BSLCBzY3JhdGNoR1BSLCBhcmdGUFIpOworICAgICAgICAgICAgICAgICAgICBpZiAo
c2lnbmF0dXJlLmFyZ3VtZW50KGkpID09IFdhc206OkYzMikKKyAgICAgICAgICAgICAgICAgICAg
ICAgIGppdC5jb252ZXJ0RG91YmxlVG9GbG9hdChhcmdGUFIsIGFyZ0ZQUik7CisgICAgICAgICAg
ICAgICAgICAgIGF1dG8gZG9uZSA9IGppdC5qdW1wKCk7CisKKyAgICAgICAgICAgICAgICAgICAg
aXNJbnQzMi5saW5rKCZqaXQpOworICAgICAgICAgICAgICAgICAgICBpZiAoc2lnbmF0dXJlLmFy
Z3VtZW50KGkpID09IFdhc206OkYzMikKKyAgICAgICAgICAgICAgICAgICAgICAgIGppdC5jb252
ZXJ0SW50MzJUb0Zsb2F0KHNjcmF0Y2hHUFIsIGFyZ0ZQUik7CisgICAgICAgICAgICAgICAgICAg
IGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgIGppdC5jb252ZXJ0SW50MzJUb0RvdWJsZShz
Y3JhdGNoR1BSLCBhcmdGUFIpOworCisgICAgICAgICAgICAgICAgICAgIGRvbmUubGluaygmaml0
KTsKKyAgICAgICAgICAgICAgICAgICAgKytudW1GUFJzOworICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGpzT2Zmc2V0ICs9IHNpemVv
ZihFbmNvZGVkSlNWYWx1ZSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvLyBBdCB0aGlzIHBv
aW50LCB3ZSdyZSBjb21taXR0ZWQgdG8gZG9pbmcgYSBmYXN0IGNhbGwuCisKKyAgICBpZiAoV2Fz
bTo6Q29udGV4dDo6dXNlRmFzdFRMUygpKSAKKyAgICAgICAgaml0LmxvYWRXYXNtQ29udGV4dElu
c3RhbmNlKHNjcmF0Y2hHUFIpOworICAgIGVsc2UKKyAgICAgICAgaml0LmxvYWRQdHIodm0ud2Fz
bUNvbnRleHQucG9pbnRlclRvSW5zdGFuY2UoKSwgc2NyYXRjaEdQUik7CisgICAgcHRyZGlmZl90
IHByZXZpb3VzSW5zdGFuY2VPZmZzZXQgPSB0aGlzLT5wcmV2aW91c0luc3RhbmNlT2Zmc2V0KCk7
CisgICAgaml0LnN0b3JlUHRyKHNjcmF0Y2hHUFIsIENDYWxsSGVscGVyczo6QWRkcmVzcyhHUFJJ
bmZvOjpjYWxsRnJhbWVSZWdpc3RlciwgcHJldmlvdXNJbnN0YW5jZU9mZnNldCkpOworCisgICAg
aml0Lm1vdmUoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKCZpbnN0YW5jZSgpLT5pbnN0YW5j
ZSgpKSwgc2NyYXRjaEdQUik7CisgICAgaWYgKFdhc206OkNvbnRleHQ6OnVzZUZhc3RUTFMoKSkg
CisgICAgICAgIGppdC5zdG9yZVdhc21Db250ZXh0SW5zdGFuY2Uoc2NyYXRjaEdQUik7CisgICAg
ZWxzZSB7CisgICAgICAgIGppdC5tb3ZlKHNjcmF0Y2hHUFIsIHBpbm5lZFJlZ3Mud2FzbUNvbnRl
eHRJbnN0YW5jZVBvaW50ZXIpOworICAgICAgICBqaXQuc3RvcmVQdHIoc2NyYXRjaEdQUiwgdm0u
d2FzbUNvbnRleHQucG9pbnRlclRvSW5zdGFuY2UoKSk7CisgICAgfQorICAgIC8vIFRoaXMgY29u
dGFpbnMgdGhlIGNhY2hlZCBzdGFjayBsaW1pdCBzdGlsbC4KKyAgICBqaXQuc3RvcmVQdHIoc2Ny
YXRjaDJHUFIsIENDYWxsSGVscGVyczo6QWRkcmVzcyhzY3JhdGNoR1BSLCBXYXNtOjpJbnN0YW5j
ZTo6b2Zmc2V0T2ZDYWNoZWRTdGFja0xpbWl0KCkpKTsKKworICAgIGlmICghIW1vZHVsZUluZm9y
bWF0aW9uLm1lbW9yeSkgeworICAgICAgICBHUFJSZWcgYmFzZU1lbW9yeSA9IHBpbm5lZFJlZ3Mu
YmFzZU1lbW9yeVBvaW50ZXI7CisKKyAgICAgICAgaWYgKGluc3RhbmNlKCktPm1lbW9yeU1vZGUo
KSAhPSBXYXNtOjpNZW1vcnlNb2RlOjpTaWduYWxpbmcpIHsKKyAgICAgICAgICAgIEFTU0VSVChw
aW5uZWRSZWdzLnNpemVSZWdpc3RlciAhPSBzY3JhdGNoR1BSKTsKKyAgICAgICAgICAgIGppdC5s
b2FkUHRyKENDYWxsSGVscGVyczo6QWRkcmVzcyhzY3JhdGNoR1BSLCBXYXNtOjpJbnN0YW5jZTo6
b2Zmc2V0T2ZDYWNoZWRNZW1vcnlTaXplKCkpLCBwaW5uZWRSZWdzLnNpemVSZWdpc3Rlcik7Cisg
ICAgICAgIH0KKworICAgICAgICBqaXQubG9hZFB0cihDQ2FsbEhlbHBlcnM6OkFkZHJlc3Moc2Ny
YXRjaEdQUiwgV2FzbTo6SW5zdGFuY2U6Om9mZnNldE9mQ2FjaGVkTWVtb3J5KCkpLCBiYXNlTWVt
b3J5KTsKKyAgICB9CisKKyAgICAvLyBXZSB1c2UgdGhpcyBjYWxsZWUgdG8gaW5kaWNhdGUgaG93
IHRvIHVud2luZCBwYXN0IHRoZXNlIHR5cGVzIG9mIGZyYW1lczoKKyAgICAvLyAxLiBXZSBuZWVk
IHRvIGtub3cgd2hlcmUgdG8gZ2V0IGNhbGxlZSBzYXZlcy4KKyAgICAvLyAyLiBXZSBuZWVkIHRv
IGtub3cgdG8gcmVzdG9yZSB0aGUgcHJldmlvdXMgd2FzbSBjb250ZXh0LgorICAgIGlmICghbV9q
c1RvV2FzbUlDQ2FsbGVlKQorICAgICAgICBtX2pzVG9XYXNtSUNDYWxsZWUuc2V0KHZtLCB0aGlz
LCBKU1RvV2FzbUlDQ2FsbGVlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCgpLCB0aGlzKSk7Cisg
ICAgaml0LnN0b3JlUHRyKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cihtX2pzVG9XYXNtSUND
YWxsZWUuZ2V0KCkpLCBDQ2FsbEhlbHBlcnM6OmFkZHJlc3NGb3IoQ2FsbEZyYW1lU2xvdDo6Y2Fs
bGVlKSk7CisKKyAgICB7CisgICAgICAgIC8vIEZJWE1FOiBDdXJyZW50bHkgd2UganVzdCBkbyBh
biBpbmRpcmVjdCBqdW1wLiBCdXQgd2Ugc2hvdWxkIHRlYWNoIHRoZSBNb2R1bGUKKyAgICAgICAg
Ly8gaG93IHRvIHJlcGF0Y2ggdXM6CisgICAgICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0xOTY1NzAKKyAgICAgICAgaml0LmxvYWRQdHIoZW50cnlwb2ludExv
YWRMb2NhdGlvbigpLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgaml0LmNhbGwoc2NyYXRjaEdQUiwg
V2FzbUVudHJ5UHRyVGFnKTsKKyAgICB9CisKKyAgICBBU1NFUlQoIVJlZ2lzdGVyU2V0OjpydW50
aW1lVGFnUmVnaXN0ZXJzKCkuY29udGFpbnMoR1BSSW5mbzo6bm9uUHJlc2VydmVkTm9uUmV0dXJu
R1BSKSk7CisgICAgaml0LmxvYWRQdHIoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKEdQUkluZm86OmNh
bGxGcmFtZVJlZ2lzdGVyLCBwcmV2aW91c0luc3RhbmNlT2Zmc2V0KSwgR1BSSW5mbzo6bm9uUHJl
c2VydmVkTm9uUmV0dXJuR1BSKTsKKyAgICBpZiAoV2FzbTo6Q29udGV4dDo6dXNlRmFzdFRMUygp
KQorICAgICAgICBqaXQuc3RvcmVXYXNtQ29udGV4dEluc3RhbmNlKEdQUkluZm86Om5vblByZXNl
cnZlZE5vblJldHVybkdQUik7CisgICAgZWxzZQorICAgICAgICBqaXQuc3RvcmVQdHIoR1BSSW5m
bzo6bm9uUHJlc2VydmVkTm9uUmV0dXJuR1BSLCB2bS53YXNtQ29udGV4dC5wb2ludGVyVG9JbnN0
YW5jZSgpKTsKKworICAgIHN3aXRjaCAoc2lnbmF0dXJlLnJldHVyblR5cGUoKSkgeworICAgIGNh
c2UgV2FzbTo6Vm9pZDoKKyAgICAgICAgaml0Lm1vdmVUcnVzdGVkVmFsdWUoanNVbmRlZmluZWQo
KSwgSlNWYWx1ZVJlZ3MgeyBHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUiB9KTsKKyAgICAgICAgYnJl
YWs7CisgICAgY2FzZSBXYXNtOjpJMzI6CisgICAgICAgIGppdC56ZXJvRXh0ZW5kMzJUb1B0cihH
UFJJbmZvOjpyZXR1cm5WYWx1ZUdQUiwgR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIpOworICAgICAg
ICBqaXQuYm94SW50MzIoR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIsIEpTVmFsdWVSZWdzIHsgR1BS
SW5mbzo6cmV0dXJuVmFsdWVHUFIgfSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgV2FzbTo6
RjMyOgorICAgICAgICBqaXQuY29udmVydEZsb2F0VG9Eb3VibGUoRlBSSW5mbzo6cmV0dXJuVmFs
dWVGUFIsIEZQUkluZm86OnJldHVyblZhbHVlRlBSKTsKKyAgICAgICAgRkFMTFRIUk9VR0g7Cisg
ICAgY2FzZSBXYXNtOjpGNjQ6IHsKKyAgICAgICAgaml0Lm1vdmVUcnVzdGVkVmFsdWUoanNOdW1i
ZXIocHVyZU5hTigpKSwgSlNWYWx1ZVJlZ3MgeyBHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUiB9KTsK
KyAgICAgICAgYXV0byBpc05hTiA9IGppdC5icmFuY2hJZk5hTihGUFJJbmZvOjpyZXR1cm5WYWx1
ZUZQUik7CisgICAgICAgIGppdC5ib3hEb3VibGUoRlBSSW5mbzo6cmV0dXJuVmFsdWVGUFIsIEpT
VmFsdWVSZWdzIHsgR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIgfSk7CisgICAgICAgIGlzTmFOLmxp
bmsoJmppdCk7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICBjYXNlIFdhc206Okk2NDoKKyAg
ICBjYXNlIFdhc206OkZ1bmM6CisgICAgY2FzZSBXYXNtOjpBbnlmdW5jOgorICAgICAgICByZXR1
cm4gbnVsbHB0cjsKKyAgICBkZWZhdWx0OgorICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBh
dXRvIGVtaXRSZXN0b3JlQ2FsbGVlU2F2ZXMgPSBbJl0geworICAgICAgICBmb3IgKGNvbnN0IFJl
Z2lzdGVyQXRPZmZzZXQmIHJlZ0F0T2Zmc2V0IDogcmVnaXN0ZXJzVG9TcGlsbCkgeworICAgICAg
ICAgICAgR1BSUmVnIHJlZyA9IHJlZ0F0T2Zmc2V0LnJlZygpLmdwcigpOworICAgICAgICAgICAg
QVNTRVJUKHJlZyAhPSBHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUik7CisgICAgICAgICAgICBwdHJk
aWZmX3Qgb2Zmc2V0ID0gcmVnQXRPZmZzZXQub2Zmc2V0KCk7CisgICAgICAgICAgICBqaXQubG9h
ZFB0cihDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIG9m
ZnNldCksIHJlZyk7CisgICAgICAgIH0KKyAgICB9OworCisgICAgZW1pdFJlc3RvcmVDYWxsZWVT
YXZlcygpOworCisgICAgaml0LmVtaXRGdW5jdGlvbkVwaWxvZ3VlKCk7CisgICAgaml0LnJldCgp
OworCisgICAgc2xvd1BhdGgubGluaygmaml0KTsKKyAgICBlbWl0UmVzdG9yZUNhbGxlZVNhdmVz
KCk7CisgICAgaml0Lm1vdmUoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKHRoaXMpLCBHUFJJ
bmZvOjpyZWdUMCk7CisgICAgaml0LmVtaXRGdW5jdGlvbkVwaWxvZ3VlKCk7CisgICAgYXV0byBq
dW1wVG9Ib3N0Q2FsbFRodW5rID0gaml0Lmp1bXAoKTsKKworICAgIExpbmtCdWZmZXIgbGlua0J1
ZmZlcihqaXQsIG51bGxwdHIsIEpJVENvbXBpbGF0aW9uQ2FuRmFpbCk7CisgICAgaWYgKFVOTElL
RUxZKGxpbmtCdWZmZXIuZGlkRmFpbFRvQWxsb2NhdGUoKSkpCisgICAgICAgIHJldHVybiBudWxs
cHRyOworCisgICAgbGlua0J1ZmZlci5saW5rKGp1bXBUb0hvc3RDYWxsVGh1bmssIENvZGVMb2Nh
dGlvbkxhYmVsPEpTRW50cnlQdHJUYWc+KGV4ZWN1dGFibGUoKS0+ZW50cnlwb2ludEZvcihDb2Rl
Rm9yQ2FsbCwgTXVzdENoZWNrQXJpdHkpLmV4ZWN1dGFibGVBZGRyZXNzKCkpKTsKKyAgICBtX2pz
Q2FsbEVudHJ5cG9pbnQgPSBGSU5BTElaRV9DT0RFKGxpbmtCdWZmZXIsIFdhc21FbnRyeVB0clRh
ZywgIkpTLT5XYXNtIElDIik7CisgICAgcmV0dXJuIG1fanNDYWxsRW50cnlwb2ludC5jb2RlKCk7
Cit9CisKIFdlYkFzc2VtYmx5RnVuY3Rpb24qIFdlYkFzc2VtYmx5RnVuY3Rpb246OmNyZWF0ZShW
TSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFN0cnVjdHVyZSogc3RydWN0dXJl
LCB1bnNpZ25lZCBsZW5ndGgsIGNvbnN0IFN0cmluZyYgbmFtZSwgSlNXZWJBc3NlbWJseUluc3Rh
bmNlKiBpbnN0YW5jZSwgV2FzbTo6Q2FsbGVlJiBqc0VudHJ5cG9pbnQsIFdhc206Oldhc21Ub1dh
c21JbXBvcnRhYmxlRnVuY3Rpb246OkxvYWRMb2NhdGlvbiB3YXNtVG9XYXNtRW50cnlwb2ludExv
YWRMb2NhdGlvbiwgV2FzbTo6U2lnbmF0dXJlSW5kZXggc2lnbmF0dXJlSW5kZXgpCiB7CiAgICAg
TmF0aXZlRXhlY3V0YWJsZSogZXhlY3V0YWJsZSA9IHZtLmdldEhvc3RGdW5jdGlvbihjYWxsV2Vi
QXNzZW1ibHlGdW5jdGlvbiwgTm9JbnRyaW5zaWMsIGNhbGxIb3N0RnVuY3Rpb25Bc0NvbnN0cnVj
dG9yLCBudWxscHRyLCBuYW1lKTsKQEAgLTE2OSw2ICs1MDIsMjAgQEAgV2ViQXNzZW1ibHlGdW5j
dGlvbjo6V2ViQXNzZW1ibHlGdW5jdGlvbgogICAgICwgbV9pbXBvcnRhYmxlRnVuY3Rpb24geyBz
aWduYXR1cmVJbmRleCwgd2FzbVRvV2FzbUVudHJ5cG9pbnRMb2FkTG9jYXRpb24gfQogeyB9CiAK
K3ZvaWQgV2ViQXNzZW1ibHlGdW5jdGlvbjo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNs
b3RWaXNpdG9yJiB2aXNpdG9yKQoreworICAgIFdlYkFzc2VtYmx5RnVuY3Rpb24qIHRoaXNPYmpl
Y3QgPSBqc0Nhc3Q8V2ViQXNzZW1ibHlGdW5jdGlvbio+KGNlbGwpOworICAgIEFTU0VSVF9HQ19P
QkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKKworICAgIEJhc2U6OnZpc2l0Q2hp
bGRyZW4odGhpc09iamVjdCwgdmlzaXRvcik7CisgICAgdmlzaXRvci5hcHBlbmQodGhpc09iamVj
dC0+bV9qc1RvV2FzbUlDQ2FsbGVlKTsKK30KKwordm9pZCBXZWJBc3NlbWJseUZ1bmN0aW9uOjpk
ZXN0cm95KEpTQ2VsbCogY2VsbCkKK3sKKyAgICBzdGF0aWNfY2FzdDxXZWJBc3NlbWJseUZ1bmN0
aW9uKj4oY2VsbCktPldlYkFzc2VtYmx5RnVuY3Rpb246On5XZWJBc3NlbWJseUZ1bmN0aW9uKCk7
Cit9CisKIH0gLy8gbmFtZXNwYWNlIEpTQwogCiAjZW5kaWYgLy8gRU5BQkxFKFdFQkFTU0VNQkxZ
KQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlGdW5jdGlv
bi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2Vt
Ymx5RnVuY3Rpb24uaAkocmV2aXNpb24gMjQzNzgwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L3dhc20vanMvV2ViQXNzZW1ibHlGdW5jdGlvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNyw2ICsy
Nyw3IEBACiAKICNpZiBFTkFCTEUoV0VCQVNTRU1CTFkpCiAKKyNpbmNsdWRlICJKU1RvV2FzbUlD
Q2FsbGVlLmgiCiAjaW5jbHVkZSAiTWFjcm9Bc3NlbWJsZXJDb2RlUmVmLmgiCiAjaW5jbHVkZSAi
V2FzbUNhbGxlZS5oIgogI2luY2x1ZGUgIldlYkFzc2VtYmx5RnVuY3Rpb25CYXNlLmgiCkBAIC00
OSw2ICs1MCw5IEBAIHB1YmxpYzoKIAogICAgIGNvbnN0IHN0YXRpYyB1bnNpZ25lZCBTdHJ1Y3R1
cmVGbGFncyA9IEJhc2U6OlN0cnVjdHVyZUZsYWdzOwogCisgICAgc3RhdGljIGNvbnN0IGJvb2wg
bmVlZHNEZXN0cnVjdGlvbiA9IHRydWU7CisgICAgc3RhdGljIHZvaWQgZGVzdHJveShKU0NlbGwq
KTsKKwogICAgIHRlbXBsYXRlPHR5cGVuYW1lIENlbGxUeXBlLCBTdWJzcGFjZUFjY2VzcyBtb2Rl
PgogICAgIHN0YXRpYyBJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoVk0mIHZtKQogICAgIHsKQEAg
LTc0LDE0ICs3OCwzNCBAQCBwdWJsaWM6CiAKICAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9m
RW50cnlwb2ludExvYWRMb2NhdGlvbigpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihXZWJBc3Nl
bWJseUZ1bmN0aW9uLCBtX2ltcG9ydGFibGVGdW5jdGlvbikgKyBXYXNtVG9XYXNtSW1wb3J0YWJs
ZUZ1bmN0aW9uOjpvZmZzZXRPZkVudHJ5cG9pbnRMb2FkTG9jYXRpb24oKTsgfQogCisgICAgTWFj
cm9Bc3NlbWJsZXJDb2RlUHRyPEpTRW50cnlQdHJUYWc+IGpzQ2FsbEVudHJ5cG9pbnQoKQorICAg
IHsKKyAgICAgICAgaWYgKG1fanNDYWxsRW50cnlwb2ludCkKKyAgICAgICAgICAgIHJldHVybiBt
X2pzQ2FsbEVudHJ5cG9pbnQuY29kZSgpOworICAgICAgICByZXR1cm4ganNDYWxsRW50cnlwb2lu
dFNsb3coKTsKKyAgICB9CisKKyAgICBSZWdpc3RlckF0T2Zmc2V0TGlzdCB1c2VkQ2FsbGVlU2F2
ZVJlZ2lzdGVycygpIGNvbnN0OworICAgIFdhc206Okluc3RhbmNlKiBwcmV2aW91c0luc3RhbmNl
KENhbGxGcmFtZSopOworCiBwcml2YXRlOgorICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4o
SlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKICAgICBXZWJBc3NlbWJseUZ1bmN0aW9uKFZNJiwgSlNH
bG9iYWxPYmplY3QqLCBTdHJ1Y3R1cmUqLCBXYXNtOjpDYWxsZWUmIGpzRW50cnlwb2ludCwgV2Fz
bVRvV2FzbUltcG9ydGFibGVGdW5jdGlvbjo6TG9hZExvY2F0aW9uIGVudHJ5cG9pbnRMb2FkTG9j
YXRpb24sIFdhc206OlNpZ25hdHVyZUluZGV4KTsKIAorICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0
cjxKU0VudHJ5UHRyVGFnPiBqc0NhbGxFbnRyeXBvaW50U2xvdygpOworICAgIHB0cmRpZmZfdCBw
cmV2aW91c0luc3RhbmNlT2Zmc2V0KCkgY29uc3Q7CisgICAgYm9vbCB1c2VUYWdSZWdpc3RlcnMo
KSBjb25zdDsKKworICAgIFJlZ2lzdGVyU2V0IGNhbGxlZVNhdmVzKCkgY29uc3Q7CisKICAgICAv
LyBJdCdzIHNhZmUgdG8ganVzdCBob2xkIHRoZSByYXcgV2FzbVRvV2FzbUltcG9ydGFibGVGdW5j
dGlvbi9qc0VudHJ5cG9pbnQgYmVjYXVzZSB3ZSBoYXZlIGEgcmVmZXJlbmNlCiAgICAgLy8gdG8g
b3VyIEluc3RhbmNlLCB3aGljaCBwb2ludHMgdG8gdGhlIE1vZHVsZSB0aGF0IGV4cG9ydGVkIHVz
LCB3aGljaAogICAgIC8vIGVuc3VyZXMgdGhhdCB0aGUgYWN0dWFsIFNpZ25hdHVyZS9jb2RlIGRv
ZXNuJ3QgZ2V0IGRlYWxsb2NhdGVkLgogICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxXYXNtRW50
cnlQdHJUYWc+IG1fanNFbnRyeXBvaW50OwogICAgIFdhc21Ub1dhc21JbXBvcnRhYmxlRnVuY3Rp
b24gbV9pbXBvcnRhYmxlRnVuY3Rpb247CisgICAgV3JpdGVCYXJyaWVyPEpTVG9XYXNtSUNDYWxs
ZWU+IG1fanNUb1dhc21JQ0NhbGxlZTsKKyAgICAvLyBVc2VkIGZvciBKUyBjYWxsaW5nIGludG8g
V2FzbS4KKyAgICBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SlNFbnRyeVB0clRhZz4gbV9qc0NhbGxF
bnRyeXBvaW50OwogfTsKIAogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseUZ1bmN0aW9uSGVhcENlbGxUeXBlLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseUZ1bmN0
aW9uSGVhcENlbGxUeXBlLmNwcAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvd2FzbS9qcy9XZWJBc3NlbWJseUZ1bmN0aW9uSGVhcENlbGxUeXBlLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMCwwICsxLDY2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE5IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisg
KiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJXZWJBc3NlbWJseUZ1
bmN0aW9uSGVhcENlbGxUeXBlLmgiCisKKyNpZiBFTkFCTEUoV0VCQVNTRU1CTFkpCisKKyNpbmNs
dWRlICJKU0NJbmxpbmVzLmgiCisjaW5jbHVkZSAiTWFya2VkQmxvY2tJbmxpbmVzLmgiCisjaW5j
bHVkZSAiV2ViQXNzZW1ibHlGdW5jdGlvbi5oIgorCituYW1lc3BhY2UgSlNDIHsKKworc3RydWN0
IFdlYkFzc2VtYmx5RnVuY3Rpb25EZXN0cm95RnVuYyB7CisgICAgQUxXQVlTX0lOTElORSB2b2lk
IG9wZXJhdG9yKCkoVk0mLCBKU0NlbGwqIGNlbGwpIGNvbnN0CisgICAgeworICAgICAgICBzdGF0
aWNfYXNzZXJ0KHN0ZDo6aXNfZmluYWw8V2ViQXNzZW1ibHlGdW5jdGlvbj46OnZhbHVlLCAiT3Ro
ZXJ3aXNlLCB0aGlzIGNvZGUgd291bGQgbm90IGJlIGNvcnJlY3QuIik7CisgICAgICAgIFdlYkFz
c2VtYmx5RnVuY3Rpb246OmluZm8oKS0+bWV0aG9kVGFibGUuZGVzdHJveShjZWxsKTsKKyAgICB9
Cit9OworCitXZWJBc3NlbWJseUZ1bmN0aW9uSGVhcENlbGxUeXBlOjpXZWJBc3NlbWJseUZ1bmN0
aW9uSGVhcENlbGxUeXBlKCkKKyAgICA6IEhlYXBDZWxsVHlwZShDZWxsQXR0cmlidXRlcyhOZWVk
c0Rlc3RydWN0aW9uLCBIZWFwQ2VsbDo6SlNDZWxsKSkKK3sKK30KKworV2ViQXNzZW1ibHlGdW5j
dGlvbkhlYXBDZWxsVHlwZTo6fldlYkFzc2VtYmx5RnVuY3Rpb25IZWFwQ2VsbFR5cGUoKQorewor
fQorCit2b2lkIFdlYkFzc2VtYmx5RnVuY3Rpb25IZWFwQ2VsbFR5cGU6OmZpbmlzaFN3ZWVwKE1h
cmtlZEJsb2NrOjpIYW5kbGUmIGhhbmRsZSwgRnJlZUxpc3QqIGZyZWVMaXN0KQoreworICAgIGhh
bmRsZS5maW5pc2hTd2VlcEtub3dpbmdIZWFwQ2VsbFR5cGUoZnJlZUxpc3QsIFdlYkFzc2VtYmx5
RnVuY3Rpb25EZXN0cm95RnVuYygpKTsKK30KKwordm9pZCBXZWJBc3NlbWJseUZ1bmN0aW9uSGVh
cENlbGxUeXBlOjpkZXN0cm95KFZNJiB2bSwgSlNDZWxsKiBjZWxsKQoreworICAgIFdlYkFzc2Vt
Ymx5RnVuY3Rpb25EZXN0cm95RnVuYygpKHZtLCBjZWxsKTsKK30KKworfSAvLyBuYW1lc3BhY2Ug
SlNDCisKKyNlbmRpZiAvLyBFTkFCTEUoV0VCQVNTRU1CTFkpCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseUZ1bmN0aW9uSGVhcENlbGxUeXBlLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlGdW5jdGlv
bkhlYXBDZWxsVHlwZS5oCShub25leGlzdGVudCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93
YXNtL2pzL1dlYkFzc2VtYmx5RnVuY3Rpb25IZWFwQ2VsbFR5cGUuaAkod29ya2luZyBjb3B5KQpA
QCAtMCwwICsxLDQ1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE5IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgor
ICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAor
ICovCisKKyNwcmFnbWEgb25jZQorCisjaWYgRU5BQkxFKFdFQkFTU0VNQkxZKQorCisjaW5jbHVk
ZSAiSGVhcENlbGxUeXBlLmgiCisKK25hbWVzcGFjZSBKU0MgeworCitjbGFzcyBXZWJBc3NlbWJs
eUZ1bmN0aW9uSGVhcENlbGxUeXBlIDogcHVibGljIEhlYXBDZWxsVHlwZSB7CitwdWJsaWM6Cisg
ICAgV2ViQXNzZW1ibHlGdW5jdGlvbkhlYXBDZWxsVHlwZSgpOworICAgIHZpcnR1YWwgfldlYkFz
c2VtYmx5RnVuY3Rpb25IZWFwQ2VsbFR5cGUoKTsKKyAgICAKKyAgICB2b2lkIGZpbmlzaFN3ZWVw
KE1hcmtlZEJsb2NrOjpIYW5kbGUmLCBGcmVlTGlzdCopIG92ZXJyaWRlOworICAgIHZvaWQgZGVz
dHJveShWTSYsIEpTQ2VsbCopIG92ZXJyaWRlOworfTsKKworfSAvLyBuYW1lc3BhY2UgSlNDCisK
KyNlbmRpZiAvLyBFTkFCTEUoV0VCQVNTRU1CTFkpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvd2FzbS9qcy9XZWJBc3NlbWJseVByb3RvdHlwZS5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5UHJvdG90eXBlLmgJKHJldmlzaW9uIDI0
Mzc4MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5UHJvdG90
eXBlLmgJKHdvcmtpbmcgY29weSkKQEAgLTMzLDYgKzMzLDggQEAKIAogbmFtZXNwYWNlIEpTQyB7
CiAKK2NsYXNzIEpTUHJvbWlzZURlZmVycmVkOworCiBjbGFzcyBXZWJBc3NlbWJseVByb3RvdHlw
ZSBmaW5hbCA6IHB1YmxpYyBKU05vbkZpbmFsT2JqZWN0IHsKIHB1YmxpYzoKICAgICB0eXBlZGVm
IEpTTm9uRmluYWxPYmplY3QgQmFzZTsK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>366730</attachid>
            <date>2019-04-04 11:14:02 -0700</date>
            <delta_ts>2019-04-04 11:54:22 -0700</delta_ts>
            <desc>patch for landing</desc>
            <filename>b-backup.diff</filename>
            <type>text/plain</type>
            <size>82839</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IEpTVGVzdHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEpTVGVzdHMvQ2hhbmdlTG9n
CShyZXZpc2lvbiAyNDM4MzMpCisrKyBKU1Rlc3RzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpA
QCAtMSwzICsxLDEyIEBACisyMDE5LTA0LTAzICBTYWFtIGJhcmF0aSAgPHNiYXJhdGlAYXBwbGUu
Y29tPgorCisgICAgICAgIFRlYWNoIENhbGwgSUNzIGhvdyB0byBjYWxsIFdhc20KKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE5NjM4NworCisgICAgICAg
IFJldmlld2VkIGJ5IEZpbGlwIFBpemxvLgorCisgICAgICAgICogd2FzbS9mdW5jdGlvbi10ZXN0
cy9zdGFjay10cmFjZS5qczoKKwogMjAxOS0wMy0yOSAgVGFkZXUgWmFnYWxsbyAgPHR6YWdhbGxv
QGFwcGxlLmNvbT4KIAogICAgICAgICBBc3NlcnRpb24gZmFpbGVkIGluIEpTQzo6Y3JlYXRlRXJy
b3IKSW5kZXg6IEpTVGVzdHMvd2FzbS9mdW5jdGlvbi10ZXN0cy9zdGFjay10cmFjZS5qcwo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBKU1Rlc3RzL3dhc20vZnVuY3Rpb24tdGVzdHMvc3RhY2stdHJhY2UuanMJKHJl
dmlzaW9uIDI0Mzc4MCkKKysrIEpTVGVzdHMvd2FzbS9mdW5jdGlvbi10ZXN0cy9zdGFjay10cmFj
ZS5qcwkod29ya2luZyBjb3B5KQpAQCAtNDMsMTEgKzQzLDE2IEBAIGZvciAobGV0IGkgPSAwOyBp
IDwgMTAwMDA7ICsraSkgewogICAgIHN0YWNrdHJhY2UgPSBzdGFja3RyYWNlLnNwbGl0KCJcbiIp
OwogICAgIGFzc2VydC50cnV0aHkoc3RhY2t0cmFjZVswXS5pbmRleE9mKCJpbXAiKSAhPT0gLTEp
OyAvLyB0aGUgYXJyb3cgZnVuY3Rpb24gaW1wb3J0IG5hbWVkICJpbXAiLgogICAgIGFzc2VydC5l
cShzdGFja3RyYWNlWzFdLCAid2FzbS1zdHViQFt3YXNtIGNvZGVdIik7IC8vIHRoZSB3YXNtLT5q
cyBzdHViCi0gICAgYXNzZXJ0LmVxKHN0YWNrdHJhY2VbMl0sICI8Pz4ud2FzbS1mdW5jdGlvbls0
XUBbd2FzbSBjb2RlXSIpOwotICAgIGFzc2VydC5lcShzdGFja3RyYWNlWzNdLCAiPD8+Lndhc20t
ZnVuY3Rpb25bMl1AW3dhc20gY29kZV0iKTsKLSAgICBhc3NlcnQuZXEoc3RhY2t0cmFjZVs0XSwg
Ijw/Pi53YXNtLWZ1bmN0aW9uWzNdQFt3YXNtIGNvZGVdIik7Ci0gICAgYXNzZXJ0LmVxKHN0YWNr
dHJhY2VbNV0sICI8Pz4ud2FzbS1mdW5jdGlvblsxXUBbd2FzbSBjb2RlXSIpOwotICAgIGFzc2Vy
dC5lcShzdGFja3RyYWNlWzZdLCAid2FzbS1zdHViQFt3YXNtIGNvZGVdIik7IC8vIHdhc20gZW50
cnkKLQorICAgIGxldCBmb3VuZCA9IGZhbHNlOworICAgIGZvciAobGV0IGkgPSAwOyBpIDwgc3Rh
Y2t0cmFjZS5sZW5ndGg7ICsraSkgeworICAgICAgICBsZXQgc3RyID0gc3RhY2t0cmFjZVtpXTsK
KyAgICAgICAgaWYgKHN0ciAhPT0gIjw/Pi53YXNtLWZ1bmN0aW9uWzRdQFt3YXNtIGNvZGVdIikK
KyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICBmb3VuZCA9IHRydWU7CisgICAgICAgIGFz
c2VydC5lcShzdGFja3RyYWNlW2kgKyAxXSwgIjw/Pi53YXNtLWZ1bmN0aW9uWzJdQFt3YXNtIGNv
ZGVdIik7CisgICAgICAgIGFzc2VydC5lcShzdGFja3RyYWNlW2kgKyAyXSwgIjw/Pi53YXNtLWZ1
bmN0aW9uWzNdQFt3YXNtIGNvZGVdIik7CisgICAgICAgIGFzc2VydC5lcShzdGFja3RyYWNlW2kg
KyAzXSwgIjw/Pi53YXNtLWZ1bmN0aW9uWzFdQFt3YXNtIGNvZGVdIik7CisgICAgfQorICAgIGFz
c2VydC50cnV0aHkoZm91bmQpOwogICAgIHN0YWNrdHJhY2UgPSBudWxsOwogfQpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvQ2hhbmdlTG9nCShyZXZpc2lvbiAyNDM3ODApCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTE0IEBACisyMDE5LTA0
LTAzICBTYWFtIGJhcmF0aSAgPHNiYXJhdGlAYXBwbGUuY29tPgorCisgICAgICAgIFRlYWNoIENh
bGwgSUNzIGhvdyB0byBjYWxsIFdhc20KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTE5NjM4NworCisgICAgICAgIFJldmlld2VkIGJ5IEZpbGlwIFBpemxv
LgorCisgICAgICAgIFRoaXMgcGF0Y2ggdGVhY2hlcyBKUyB0byBjYWxsIFdhc20gd2l0aG91dCBn
b2luZyB0aHJvdWdoIHRoZSBuYXRpdmUgdGh1bmsuCisgICAgICAgIEN1cnJlbnRseSwgd2UgZW1p
dCBhIEpJVCAiSlMiIGNhbGxlZSBzdHViIHdoaWNoIG1hcnNoYWxzIGFyZ3VtZW50cyBmcm9tCisg
ICAgICAgIEpTIHRvIFdhc20uIExpa2UgdGhlIG5hdGl2ZSB2ZXJzaW9uIG9mIHRoaXMsIHRoaXMg
dGh1bmsgaXMgcmVzcG9uc2libGUKKyAgICAgICAgZm9yIHNhdmluZyBhbmQgcmVzdG9yaW5nIHRo
ZSBWTSdzIGN1cnJlbnQgV2FzbSBjb250ZXh0LiBJbnN0ZWFkIG9mIGVtaXR0aW5nCisgICAgICAg
IGFuIGV4Y2VwdGlvbiBoYW5kbGVyLCB3ZSBhbHNvIHRlYWNoIHRoZSB1bndpbmRlciBob3cgdG8g
cmVhZCB0aGUgcHJldmlvdXMKKyAgICAgICAgd2FzbSBjb250ZXh0IHRvIHJlc3RvcmUgaXQgYXMg
aXQgdW53aW5kd3MgcGFzdCB0aGlzIGZyYW1lLgorICAgICAgICAKKyAgICAgICAgVGhpcyBwYXRj
aCBpcyBzdHJhaWdodCBmb3J3YXJkLCBhbmQgbGVhdmVzIHNvbWUgYXJlYXMgZm9yIHBlcmYgaW1w
cm92ZW1lbnQ6CisgICAgICAgIC0gV2UgY2FuIHRlYWNoIHRoZSBERkcvRlRMIHRvIGRpcmVjdGx5
IHVzZSB0aGUgV2FzbSBjYWxsaW5nIGNvbnZlbnRpb24gd2hlbgorICAgICAgICAgIGl0IGtub3dz
IGl0J3MgY2FsbGluZyBhIHNpbmdsZSBXYXNtIGZ1bmN0aW9uLiBUaGlzIHdheSB3ZSBkb24ndCBz
aHVmZmxlCisgICAgICAgICAgcmVnaXN0ZXJzIHRvIHRoZSBzdGFjayBhbmQgdGhlbiBiYWNrIGlu
dG8gcmVnaXN0ZXJzLgorICAgICAgICAtIFdlIGJhaWwgb3V0IHRvIHRoZSBzbG93IHBhdGggZm9y
IG1pc21hdGNoZWQgYXJpdHkuIEkgb3BlbmVkIGEgYnVnIHRvIGZpeAorICAgICAgICAgIG9wdGlt
aXplIGFyaXR5IGNoZWNrIGZhaWx1cmVzOiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MTk2NTY0CisgICAgICAgIC0gV2UgYmFpbCBvdXQgdG8gdGhlIHNsb3cgcGF0aCBE
b3VibGUgSlNWYWx1ZXMgZmxvd2luZyBpbnRvIGkzMiBhcmd1bWVudHMuCisgICAgICAgICAgV2Ug
c2hvdWxkIHRlYWNoIHRoaXMgdGh1bmsgaG93IHRvIGRvIHRoYXQgY29udmVyc2lvbiBkaXJlY3Rs
eS4KKyAgICAgICAgCisgICAgICAgIFRoaXMgcGF0Y2ggYWxzbyByZWZhY3RvcnMgdGhlIGNvZGUg
dG8gZXhwbGljaXRseSBoYXZlIGEgc2luZ2xlIHBpbm5lZCBzaXplIHJlZ2lzdGVyLgorICAgICAg
ICBXZSB1c2VkIHByZXRlbmQgaW4gc29tZSBwbGFjZXMgdGhhdCB3ZSBjb3VsZCBoYXZlIG1vcmUg
dGhhbiBvbmUgcGlubmVkIHNpemUgcmVnaXN0ZXIuCisgICAgICAgIEhvd2V2ZXIsIHRoZXJlIHdh
cyBvdGhlciBjb2RlIHRoYXQganVzdCBhc3NlcnRlZCB0aGUgc2l6ZSB3YXMgb25lLiBUaGlzIHBh
dGNoIGp1c3QgcmlwcworICAgICAgICBvdXQgdGhpcyBjb2RlIHNpbmNlIHdlIG5ldmVyIG1vdmVk
IHRvIGhhdmluZyBtb3JlIHRoYW4gb25lIHBpbm5lZCBzaXplIHJlZ2lzdGVyLiBEb2luZworICAg
ICAgICB0aGlzIHJlZmFjdG9yaW5nIGNsZWFucyB1cCB0aGUgdmFyaW91cyBwbGFjZXMgd2hlcmUg
d2Ugc2V0IHVwIHRoZSBzaXplIHJlZ2lzdGVyLgorICAgICAgICAKKyAgICAgICAgVGhpcyBwYXRj
aCBpcyBhIDUwLTYwJSBwcm9ncmVzc2lvbiBvbiBKZXRTdHJlYW0gMidzIHJpY2hhcmRzLXdhc20u
CisKKyAgICAgICAgKiBKYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgor
ICAgICAgICAqIFNvdXJjZXMudHh0OgorICAgICAgICAqIGFzc2VtYmxlci9NYWNyb0Fzc2VtYmxl
ckNvZGVSZWYuaDoKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJDb2RlUmVmOjpvcGVyYXRv
cj0pOgorICAgICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxlckNvZGVSZWY6Ok1hY3JvQXNzZW1ibGVy
Q29kZVJlZik6CisgICAgICAgICogaW50ZXJwcmV0ZXIvSW50ZXJwcmV0ZXIuY3BwOgorICAgICAg
ICAoSlNDOjpVbndpbmRGdW5jdG9yOjpvcGVyYXRvcigpIGNvbnN0KToKKyAgICAgICAgKEpTQzo6
VW53aW5kRnVuY3Rvcjo6Y29weUNhbGxlZVNhdmVzVG9FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNCdWZm
ZXIgY29uc3QpOgorICAgICAgICAqIGludGVycHJldGVyL1N0YWNrVmlzaXRvci5jcHA6CisgICAg
ICAgIChKU0M6OlN0YWNrVmlzaXRvcjo6RnJhbWU6OmNhbGxlZVNhdmVSZWdpc3RlcnNGb3JVbndp
bmRpbmcpOgorICAgICAgICAoSlNDOjpTdGFja1Zpc2l0b3I6OkZyYW1lOjpjYWxsZWVTYXZlUmVn
aXN0ZXJzKTogRGVsZXRlZC4KKyAgICAgICAgKiBpbnRlcnByZXRlci9TdGFja1Zpc2l0b3IuaDoK
KyAgICAgICAgKiBqaXQvSklUT3BlcmF0aW9ucy5jcHA6CisgICAgICAgICogaml0L1JlZ2lzdGVy
U2V0LmNwcDoKKyAgICAgICAgKEpTQzo6UmVnaXN0ZXJTZXQ6OnJ1bnRpbWVUYWdSZWdpc3RlcnMp
OgorICAgICAgICAoSlNDOjpSZWdpc3RlclNldDo6c3BlY2lhbFJlZ2lzdGVycyk6CisgICAgICAg
IChKU0M6OlJlZ2lzdGVyU2V0OjpydW50aW1lUmVnaXN0ZXJzKTogRGVsZXRlZC4KKyAgICAgICAg
KiBqaXQvUmVnaXN0ZXJTZXQuaDoKKyAgICAgICAgKiBqaXQvUmVwYXRjaC5jcHA6CisgICAgICAg
IChKU0M6OmxpbmtQb2x5bW9ycGhpY0NhbGwpOgorICAgICAgICAqIHJ1bnRpbWUvSlNGdW5jdGlv
bi5jcHA6CisgICAgICAgIChKU0M6OmdldENhbGN1bGF0ZWREaXNwbGF5TmFtZSk6CisgICAgICAg
ICogcnVudGltZS9KU0dsb2JhbE9iamVjdC5jcHA6CisgICAgICAgIChKU0M6OkpTR2xvYmFsT2Jq
ZWN0Ojppbml0KToKKyAgICAgICAgKEpTQzo6SlNHbG9iYWxPYmplY3Q6OnZpc2l0Q2hpbGRyZW4p
OgorICAgICAgICAqIHJ1bnRpbWUvSlNHbG9iYWxPYmplY3QuaDoKKyAgICAgICAgKEpTQzo6SlNH
bG9iYWxPYmplY3Q6OmpzVG9XYXNtSUNDYWxsZWVTdHJ1Y3R1cmUgY29uc3QpOgorICAgICAgICAq
IHJ1bnRpbWUvVk0uY3BwOgorICAgICAgICAoSlNDOjpWTTo6Vk0pOgorICAgICAgICAqIHJ1bnRp
bWUvVk0uaDoKKyAgICAgICAgKiB3YXNtL1dhc21BaXJJUkdlbmVyYXRvci5jcHA6CisgICAgICAg
IChKU0M6Oldhc206OkFpcklSR2VuZXJhdG9yOjpBaXJJUkdlbmVyYXRvcik6CisgICAgICAgIChK
U0M6Oldhc206OkFpcklSR2VuZXJhdG9yOjpyZXN0b3JlV2ViQXNzZW1ibHlHbG9iYWxTdGF0ZSk6
CisgICAgICAgIChKU0M6Oldhc206OkFpcklSR2VuZXJhdG9yOjphZGRDYWxsSW5kaXJlY3QpOgor
ICAgICAgICAqIHdhc20vV2FzbUIzSVJHZW5lcmF0b3IuY3BwOgorICAgICAgICAoSlNDOjpXYXNt
OjpCM0lSR2VuZXJhdG9yOjpCM0lSR2VuZXJhdG9yKToKKyAgICAgICAgKEpTQzo6V2FzbTo6QjNJ
UkdlbmVyYXRvcjo6cmVzdG9yZVdlYkFzc2VtYmx5R2xvYmFsU3RhdGUpOgorICAgICAgICAoSlND
OjpXYXNtOjpCM0lSR2VuZXJhdG9yOjphZGRDYWxsSW5kaXJlY3QpOgorICAgICAgICAqIHdhc20v
V2FzbUJpbmRpbmcuY3BwOgorICAgICAgICAoSlNDOjpXYXNtOjp3YXNtVG9XYXNtKToKKyAgICAg
ICAgKiB3YXNtL1dhc21Db250ZXh0Lmg6CisgICAgICAgIChKU0M6Oldhc206OkNvbnRleHQ6OnBv
aW50ZXJUb0luc3RhbmNlKToKKyAgICAgICAgKiB3YXNtL1dhc21Db250ZXh0SW5saW5lcy5oOgor
ICAgICAgICAoSlNDOjpXYXNtOjpDb250ZXh0OjpzdG9yZSk6CisgICAgICAgICogd2FzbS9XYXNt
TWVtb3J5SW5mb3JtYXRpb24uY3BwOgorICAgICAgICAoSlNDOjpXYXNtOjpnZXRQaW5uZWRSZWdp
c3RlcnMpOgorICAgICAgICAoSlNDOjpXYXNtOjpQaW5uZWRSZWdpc3RlckluZm86OmdldCk6Cisg
ICAgICAgIChKU0M6Oldhc206OlBpbm5lZFJlZ2lzdGVySW5mbzo6UGlubmVkUmVnaXN0ZXJJbmZv
KToKKyAgICAgICAgKiB3YXNtL1dhc21NZW1vcnlJbmZvcm1hdGlvbi5oOgorICAgICAgICAoSlND
OjpXYXNtOjpQaW5uZWRSZWdpc3RlckluZm86OnRvU2F2ZSBjb25zdCk6CisgICAgICAgICogd2Fz
bS9XYXNtT01HUGxhbi5jcHA6CisgICAgICAgIChKU0M6Oldhc206Ok9NR1BsYW46OndvcmspOgor
ICAgICAgICAqIHdhc20vanMvSlNUb1dhc20uY3BwOgorICAgICAgICAoSlNDOjpXYXNtOjpjcmVh
dGVKU1RvV2FzbVdyYXBwZXIpOgorICAgICAgICAqIHdhc20vanMvSlNUb1dhc21JQ0NhbGxlZS5j
cHA6IEFkZGVkLgorICAgICAgICAoSlNDOjpKU1RvV2FzbUlDQ2FsbGVlOjpjcmVhdGUpOgorICAg
ICAgICAoSlNDOjpKU1RvV2FzbUlDQ2FsbGVlOjpjcmVhdGVTdHJ1Y3R1cmUpOgorICAgICAgICAo
SlNDOjpKU1RvV2FzbUlDQ2FsbGVlOjp2aXNpdENoaWxkcmVuKToKKyAgICAgICAgKiB3YXNtL2pz
L0pTVG9XYXNtSUNDYWxsZWUuaDogQWRkZWQuCisgICAgICAgIChKU0M6OkpTVG9XYXNtSUNDYWxs
ZWU6OmZ1bmN0aW9uKToKKyAgICAgICAgKEpTQzo6SlNUb1dhc21JQ0NhbGxlZTo6SlNUb1dhc21J
Q0NhbGxlZSk6CisgICAgICAgICogd2FzbS9qcy9XZWJBc3NlbWJseUZ1bmN0aW9uLmNwcDoKKyAg
ICAgICAgKEpTQzo6V2ViQXNzZW1ibHlGdW5jdGlvbjo6dXNlVGFnUmVnaXN0ZXJzIGNvbnN0KToK
KyAgICAgICAgKEpTQzo6V2ViQXNzZW1ibHlGdW5jdGlvbjo6Y2FsbGVlU2F2ZXMgY29uc3QpOgor
ICAgICAgICAoSlNDOjpXZWJBc3NlbWJseUZ1bmN0aW9uOjp1c2VkQ2FsbGVlU2F2ZVJlZ2lzdGVy
cyBjb25zdCk6CisgICAgICAgIChKU0M6OldlYkFzc2VtYmx5RnVuY3Rpb246OnByZXZpb3VzSW5z
dGFuY2VPZmZzZXQgY29uc3QpOgorICAgICAgICAoSlNDOjpXZWJBc3NlbWJseUZ1bmN0aW9uOjpw
cmV2aW91c0luc3RhbmNlKToKKyAgICAgICAgKEpTQzo6V2ViQXNzZW1ibHlGdW5jdGlvbjo6anND
YWxsRW50cnlwb2ludFNsb3cpOgorICAgICAgICAoSlNDOjpXZWJBc3NlbWJseUZ1bmN0aW9uOjp2
aXNpdENoaWxkcmVuKToKKyAgICAgICAgKEpTQzo6V2ViQXNzZW1ibHlGdW5jdGlvbjo6ZGVzdHJv
eSk6CisgICAgICAgICogd2FzbS9qcy9XZWJBc3NlbWJseUZ1bmN0aW9uLmg6CisgICAgICAgICog
d2FzbS9qcy9XZWJBc3NlbWJseUZ1bmN0aW9uSGVhcENlbGxUeXBlLmNwcDogQWRkZWQuCisgICAg
ICAgIChKU0M6OldlYkFzc2VtYmx5RnVuY3Rpb25EZXN0cm95RnVuYzo6b3BlcmF0b3IoKSBjb25z
dCk6CisgICAgICAgIChKU0M6OldlYkFzc2VtYmx5RnVuY3Rpb25IZWFwQ2VsbFR5cGU6OldlYkFz
c2VtYmx5RnVuY3Rpb25IZWFwQ2VsbFR5cGUpOgorICAgICAgICAoSlNDOjpXZWJBc3NlbWJseUZ1
bmN0aW9uSGVhcENlbGxUeXBlOjp+V2ViQXNzZW1ibHlGdW5jdGlvbkhlYXBDZWxsVHlwZSk6Cisg
ICAgICAgIChKU0M6OldlYkFzc2VtYmx5RnVuY3Rpb25IZWFwQ2VsbFR5cGU6OmZpbmlzaFN3ZWVw
KToKKyAgICAgICAgKEpTQzo6V2ViQXNzZW1ibHlGdW5jdGlvbkhlYXBDZWxsVHlwZTo6ZGVzdHJv
eSk6CisgICAgICAgICogd2FzbS9qcy9XZWJBc3NlbWJseUZ1bmN0aW9uSGVhcENlbGxUeXBlLmg6
IEFkZGVkLgorICAgICAgICAqIHdhc20vanMvV2ViQXNzZW1ibHlQcm90b3R5cGUuaDoKKwogMjAx
OS0wNC0wMiAgTWljaGFlbCBTYWJvZmYgIDxtc2Fib2ZmQGFwcGxlLmNvbT4KIAogICAgICAgICBD
cmFzaCBpbiBPcHRpb25zOjpzZXRPcHRpb25zKCkgdXNpbmcgLS1jb25maWdGaWxlIG9wdGlvbiBh
bmQgbGliZ21hbGxvYwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0NNYWtlTGlzdHMudHh0
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAkocmV2
aXNpb24gMjQzNzgwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0NNYWtlTGlzdHMudHh0CSh3
b3JraW5nIGNvcHkpCkBAIC05OSw4ICs5OSwxMCBAQCBzZXQoSmF2YVNjcmlwdENvcmVfT0JKRUNU
X0xVVF9TT1VSQ0VTCiAgICAgcnVudGltZS9TeW1ib2xQcm90b3R5cGUuY3BwCiAKICAgICB3YXNt
L2pzL0pTV2ViQXNzZW1ibHkuY3BwCisgICAgd2FzbS9qcy9KU1RvV2FzbUlDQ2FsbGVlLmNwcAog
ICAgIHdhc20vanMvV2ViQXNzZW1ibHlDb21waWxlRXJyb3JDb25zdHJ1Y3Rvci5jcHAKICAgICB3
YXNtL2pzL1dlYkFzc2VtYmx5Q29tcGlsZUVycm9yUHJvdG90eXBlLmNwcAorICAgIHdhc20vanMv
V2ViQXNzZW1ibHlGdW5jdGlvbkhlYXBDZWxsVHlwZS5jcHAKICAgICB3YXNtL2pzL1dlYkFzc2Vt
Ymx5SW5zdGFuY2VDb25zdHJ1Y3Rvci5jcHAKICAgICB3YXNtL2pzL1dlYkFzc2VtYmx5SW5zdGFu
Y2VQcm90b3R5cGUuY3BwCiAgICAgd2FzbS9qcy9XZWJBc3NlbWJseUxpbmtFcnJvckNvbnN0cnVj
dG9yLmNwcApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL1NvdXJjZXMudHh0Cj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9Tb3VyY2VzLnR4dAkocmV2aXNpb24gMjQzNzgw
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL1NvdXJjZXMudHh0CSh3b3JraW5nIGNvcHkpCkBA
IC0xMDEwLDYgKzEwMTAsNyBAQCB3YXNtL1dhc21Xb3JrbGlzdC5jcHAKIAogd2FzbS9qcy9KU1Rv
V2FzbS5jcHAKIHdhc20vanMvSlNUb1dhc20uaAord2FzbS9qcy9KU1RvV2FzbUlDQ2FsbGVlLmNw
cAogd2FzbS9qcy9KU1dlYkFzc2VtYmx5LmNwcAogd2FzbS9qcy9KU1dlYkFzc2VtYmx5Q29kZUJs
b2NrLmNwcAogd2FzbS9qcy9KU1dlYkFzc2VtYmx5Q29kZUJsb2NrSGVhcENlbGxUeXBlLmNwcApA
QCAtMTAyNiw2ICsxMDI3LDcgQEAgd2FzbS9qcy9XZWJBc3NlbWJseUNvbXBpbGVFcnJvckNvbnN0
cnVjdAogd2FzbS9qcy9XZWJBc3NlbWJseUNvbXBpbGVFcnJvclByb3RvdHlwZS5jcHAKIHdhc20v
anMvV2ViQXNzZW1ibHlGdW5jdGlvbi5jcHAKIHdhc20vanMvV2ViQXNzZW1ibHlGdW5jdGlvbkJh
c2UuY3BwCit3YXNtL2pzL1dlYkFzc2VtYmx5RnVuY3Rpb25IZWFwQ2VsbFR5cGUuY3BwCiB3YXNt
L2pzL1dlYkFzc2VtYmx5SW5zdGFuY2VDb25zdHJ1Y3Rvci5jcHAKIHdhc20vanMvV2ViQXNzZW1i
bHlJbnN0YW5jZVByb3RvdHlwZS5jcHAKIHdhc20vanMvV2ViQXNzZW1ibHlMaW5rRXJyb3JDb25z
dHJ1Y3Rvci5jcHAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54
Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAy
NDM3ODApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9q
L3Byb2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAtODcyLDYgKzg3Miw3IEBACiAJCTRC
QUEwN0NFQjgxRjQ5QTI5NkUwMjIwMyAvKiBXYXNtU2lnbmF0dXJlSW5saW5lcy5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMzBBNUY0MDNGMTFDNEY1OTlD
RDU5NkQ1IC8qIFdhc21TaWduYXR1cmVJbmxpbmVzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVU
RVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNTIxMTMxRjcxRjgyQkYxNDAwN0NDRUVFIC8qIFBv
bHlQcm90b0FjY2Vzc0NoYWluLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSA1MjExMzFGNjFGODJCRjExMDA3Q0NFRUUgLyogUG9seVByb3RvQWNjZXNzQ2hh
aW4uaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk1
MjEzMjI0NjFFQ0JDRTgyMDBGNjU2MTUgLyogV2ViQXNzZW1ibHlGdW5jdGlvbkJhc2UuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUyMTMyMjQ0MUVDQkNF
ODIwMEY2NTYxNSAvKiBXZWJBc3NlbWJseUZ1bmN0aW9uQmFzZS5oICovOyB9OworCQk1MjNGRDg4
RTIyNTU2NkM5MDAzQjNEQ0MgLyogV2ViQXNzZW1ibHlGdW5jdGlvbkhlYXBDZWxsVHlwZS5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTIzRkQ4OEMyMjU1
NjZDMzAwM0IzRENDIC8qIFdlYkFzc2VtYmx5RnVuY3Rpb25IZWFwQ2VsbFR5cGUuaCAqLzsgfTsK
IAkJNTI0RTlENzMyMjA5MkI1MjAwQTZCRUVFIC8qIEFpckFsbG9jYXRlUmVnaXN0ZXJzQW5kU3Rh
Y2tBbmRHZW5lcmF0ZUNvZGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDUyNEU5RDcyMjIwOTJCNDYwMEE2QkVFRSAvKiBBaXJBbGxvY2F0ZVJlZ2lzdGVy
c0FuZFN0YWNrQW5kR2VuZXJhdGVDb2RlLmggKi87IH07CiAJCTUyNTBEMkQyMUU4REEwNUEwMDI5
QTkzMiAvKiBXYXNtVGh1bmtzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSA1MjUwRDJEMDFFOERBMDVBMDAyOUE5MzIgLyogV2FzbVRodW5rcy5oICovOyBz
ZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTUyNUMwRERBMUU5
MzU4NDcwMDIxODRDRCAvKiBXYXNtQ2FsbGVlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA1MjVDMEREODFFOTM1ODQ3MDAyMTg0Q0QgLyogV2FzbUNhbGxl
ZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CkBAIC04
NzksNiArODgwLDcgQEAKIAkJNTI2NzhGOEYxQTAzMTAwOTAwNkEzMDZEIC8qIEJhc2ljQmxvY2tM
b2NhdGlvbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
NTI2NzhGOEQxQTAzMTAwOTAwNkEzMDZEIC8qIEJhc2ljQmxvY2tMb2NhdGlvbi5oICovOyBzZXR0
aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTUyNjc4RjkxMUEwNDE3
N0MwMDZBMzA2RCAvKiBDb250cm9sRmxvd1Byb2ZpbGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MjY3OEY5MDFBMDQxNzdDMDA2QTMwNkQgLyogQ29u
dHJvbEZsb3dQcm9maWxlci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUs
ICk7IH07IH07CiAJCTUyNkFDNEI3MUU5NzdDNUQwMDM1MDBFMSAvKiBXYXNtQ29kZUJsb2NrLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MjZBQzRCNTFF
OTc3QzVEMDAzNTAwRTEgLyogV2FzbUNvZGVCbG9jay5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJV
VEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTUyN0NFMzU0MjI1NTVGRTUwMEM2RjM4MiAvKiBK
U1RvV2FzbUlDQ2FsbGVlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSA1MjdDRTM1MzIyNTU1RkREMDBDNkYzODIgLyogSlNUb1dhc21JQ0NhbGxlZS5oICov
OyB9OwogCQk1Mjg0N0FEQzIxRkZCODY5MDA2MUE5REIgLyogV2FzbUFpcklSR2VuZXJhdG9yLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1Mjg0N0FEQTIx
RkZCODYzMDA2MUE5REIgLyogV2FzbUFpcklSR2VuZXJhdG9yLmggKi87IH07CiAJCTUyQjMxMEZC
MTk3NEFFNjEwMDgwODU3QyAvKiBGdW5jdGlvbkhhc0V4ZWN1dGVkQ2FjaGUuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUyQjMxMEZBMTk3NEFFNjEwMDgw
ODU3QyAvKiBGdW5jdGlvbkhhc0V4ZWN1dGVkQ2FjaGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklC
VVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk1MkIzMTEwMTE5NzVCNDY3MDA4MDg1N0MgLyog
VHlwZUxvY2F0aW9uQ2FjaGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDUyQjMxMTAwMTk3NUI0NjcwMDgwODU3QyAvKiBUeXBlTG9jYXRpb25DYWNoZS5o
ICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CkBAIC0zMzcw
LDYgKzMzNzIsOCBAQAogCQk1MjExMzFGNjFGODJCRjExMDA3Q0NFRUUgLyogUG9seVByb3RvQWNj
ZXNzQ2hhaW4uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUG9seVByb3RvQWNjZXNzQ2hhaW4uaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTIxMzIyNDMxRUNCQ0U4MjAwRjY1NjE1IC8qIFdlYkFz
c2VtYmx5RnVuY3Rpb25CYXNlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFt
ZSA9IFdlYkFzc2VtYmx5RnVuY3Rpb25CYXNlLmNwcDsgcGF0aCA9IGpzL1dlYkFzc2VtYmx5RnVu
Y3Rpb25CYXNlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTIxMzIyNDQxRUNC
Q0U4MjAwRjY1NjE1IC8qIFdlYkFzc2VtYmx5RnVuY3Rpb25CYXNlLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgbmFtZSA9IFdlYkFzc2VtYmx5RnVuY3Rpb25CYXNlLmg7IHBhdGggPSBqcy9X
ZWJBc3NlbWJseUZ1bmN0aW9uQmFzZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk1
MjNGRDg4QzIyNTU2NkMzMDAzQjNEQ0MgLyogV2ViQXNzZW1ibHlGdW5jdGlvbkhlYXBDZWxsVHlw
ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IG5hbWUgPSBXZWJBc3NlbWJseUZ1bmN0aW9uSGVhcENlbGxUeXBlLmg7IHBh
dGggPSBqcy9XZWJBc3NlbWJseUZ1bmN0aW9uSGVhcENlbGxUeXBlLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CisJCTUyM0ZEODhEMjI1NTY2QzQwMDNCM0RDQyAvKiBXZWJBc3NlbWJseUZ1
bmN0aW9uSGVhcENlbGxUeXBlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IFdlYkFzc2VtYmx5RnVu
Y3Rpb25IZWFwQ2VsbFR5cGUuY3BwOyBwYXRoID0ganMvV2ViQXNzZW1ibHlGdW5jdGlvbkhlYXBD
ZWxsVHlwZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUyNEU5RDcxMjIwOTJC
NDUwMEE2QkVFRSAvKiBBaXJBbGxvY2F0ZVJlZ2lzdGVyc0FuZFN0YWNrQW5kR2VuZXJhdGVDb2Rl
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEFpckFsbG9jYXRlUmVnaXN0ZXJzQW5kU3RhY2tBbmRH
ZW5lcmF0ZUNvZGUuY3BwOyBwYXRoID0gYjMvYWlyL0FpckFsbG9jYXRlUmVnaXN0ZXJzQW5kU3Rh
Y2tBbmRHZW5lcmF0ZUNvZGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1MjRF
OUQ3MjIyMDkyQjQ2MDBBNkJFRUUgLyogQWlyQWxsb2NhdGVSZWdpc3RlcnNBbmRTdGFja0FuZEdl
bmVyYXRlQ29kZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBBaXJBbGxvY2F0ZVJlZ2lzdGVyc0FuZFN0YWNr
QW5kR2VuZXJhdGVDb2RlLmg7IHBhdGggPSBiMy9haXIvQWlyQWxsb2NhdGVSZWdpc3RlcnNBbmRT
dGFja0FuZEdlbmVyYXRlQ29kZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1MjUw
RDJDRjFFOERBMDVBMDAyOUE5MzIgLyogV2FzbVRodW5rcy5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IHBhdGggPSBXYXNtVGh1bmtzLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKQEAgLTMzODIsNiArMzM4Niw4IEBACiAJCTUyNkFDNEI0MUU5NzdDNUQwMDM1MDBFMSAv
KiBXYXNtQ29kZUJsb2NrLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9
IFdhc21Db2RlQmxvY2suY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1MjZBQzRC
NTFFOTc3QzVEMDAzNTAwRTEgLyogV2FzbUNvZGVCbG9jay5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBXYXNtQ29kZUJsb2NrLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTUyNzc3M0REMUFBRjgzQUMwMEJERTdFOCAvKiBSdW50aW1lVHlwZS5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBSdW50aW1lVHlwZS5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCTUyN0NFMzUyMjI1NTVGREQwMEM2RjM4MiAvKiBKU1RvV2FzbUlD
Q2FsbGVlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEpTVG9XYXNtSUNDYWxsZWUuY3BwOyBwYXRo
ID0ganMvSlNUb1dhc21JQ0NhbGxlZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJ
CTUyN0NFMzUzMjI1NTVGREQwMEM2RjM4MiAvKiBKU1RvV2FzbUlDQ2FsbGVlLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
bmFtZSA9IEpTVG9XYXNtSUNDYWxsZWUuaDsgcGF0aCA9IGpzL0pTVG9XYXNtSUNDYWxsZWUuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTI4NDdBRDkyMUZGQjg2MzAwNjFBOURCIC8q
IFdhc21BaXJJUkdlbmVyYXRvci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXYXNtQWlySVJHZW5l
cmF0b3IuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1Mjg0N0FEQTIxRkZCODYz
MDA2MUE5REIgLyogV2FzbUFpcklSR2VuZXJhdG9yLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdhc21BaXJJ
UkdlbmVyYXRvci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1MkIzMTBGQTE5NzRB
RTYxMDA4MDg1N0MgLyogRnVuY3Rpb25IYXNFeGVjdXRlZENhY2hlLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IEZ1bmN0aW9uSGFzRXhlY3V0ZWRDYWNoZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpA
QCAtODI0OSw2ICs4MjU1LDggQEAKIAkJCWNoaWxkcmVuID0gKAogCQkJCUFEOERENkQwMUY2NzA4
QTMwMDA0RUI1MiAvKiBKU1RvV2FzbS5jcHAgKi8sCiAJCQkJQUQ4REQ2Q0YxRjY3MDg5RjAwMDRF
QjUyIC8qIEpTVG9XYXNtLmggKi8sCisJCQkJNTI3Q0UzNTIyMjU1NUZERDAwQzZGMzgyIC8qIEpT
VG9XYXNtSUNDYWxsZWUuY3BwICovLAorCQkJCTUyN0NFMzUzMjI1NTVGREQwMEM2RjM4MiAvKiBK
U1RvV2FzbUlDQ2FsbGVlLmggKi8sCiAJCQkJQUREMDlBRjIxRjYyNDgyOTAwMTMxM0MyIC8qIEpT
V2ViQXNzZW1ibHkuY3BwICovLAogCQkJCUFERDA5QUYzMUY2MjQ4MkUwMDEzMTNDMiAvKiBKU1dl
YkFzc2VtYmx5LmggKi8sCiAJCQkJNTM4M0FBMkYxRTY1RThBMTAwQTUzMkZDIC8qIEpTV2ViQXNz
ZW1ibHlDb2RlQmxvY2suY3BwICovLApAQCAtODI3OCw2ICs4Mjg2LDggQEAKIAkJCQlBRDJGQ0JC
MzFEQjU4REE0MDBCM0U3MzYgLyogV2ViQXNzZW1ibHlDb21waWxlRXJyb3JQcm90b3R5cGUuaCAq
LywKIAkJCQlBRDQ5MzdDOTFEREQyNzM0MDA3N0M4MDcgLyogV2ViQXNzZW1ibHlGdW5jdGlvbi5j
cHAgKi8sCiAJCQkJQUQ0OTM3Q0ExREREMjczNDAwNzdDODA3IC8qIFdlYkFzc2VtYmx5RnVuY3Rp
b24uaCAqLywKKwkJCQk1MjNGRDg4RDIyNTU2NkM0MDAzQjNEQ0MgLyogV2ViQXNzZW1ibHlGdW5j
dGlvbkhlYXBDZWxsVHlwZS5jcHAgKi8sCisJCQkJNTIzRkQ4OEMyMjU1NjZDMzAwM0IzRENDIC8q
IFdlYkFzc2VtYmx5RnVuY3Rpb25IZWFwQ2VsbFR5cGUuaCAqLywKIAkJCQk1MjEzMjI0MzFFQ0JD
RTgyMDBGNjU2MTUgLyogV2ViQXNzZW1ibHlGdW5jdGlvbkJhc2UuY3BwICovLAogCQkJCTUyMTMy
MjQ0MUVDQkNFODIwMEY2NTYxNSAvKiBXZWJBc3NlbWJseUZ1bmN0aW9uQmFzZS5oICovLAogCQkJ
CUFEMkZDQkI0MURCNThEQTQwMEIzRTczNiAvKiBXZWJBc3NlbWJseUluc3RhbmNlQ29uc3RydWN0
b3IuY3BwICovLApAQCAtODU5NSw2ICs4NjA1LDcgQEAKIAkJCQkwRjVCRjE2NDFGMjMxNzEyMDAy
OUQ5MUQgLyogQjNIb2lzdExvb3BJbnZhcmlhbnRWYWx1ZXMuaCBpbiBIZWFkZXJzICovLAogCQkJ
CURDNjlCOTlEMUQxNUY5MTQwMDJFM0MwMCAvKiBCM0luZmVyU3dpdGNoZXMuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTBGRUM4NUJBMUJFMTQ2MkYwMDgwRkY3NCAvKiBCM0luc2VydGlvblNldC5oIGlu
IEhlYWRlcnMgKi8sCisJCQkJNTIzRkQ4OEUyMjU1NjZDOTAwM0IzRENDIC8qIFdlYkFzc2VtYmx5
RnVuY3Rpb25IZWFwQ2VsbFR5cGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGRUM4NUJCMUJFMTQ2
MkYwMDgwRkY3NCAvKiBCM0luc2VydGlvblNldElubGluZXMuaCBpbiBIZWFkZXJzICovLAogCQkJ
CTBGREY2N0QyMUQ5QzZEMjcwMDFCOTgyNSAvKiBCM0tpbmQuaCBpbiBIZWFkZXJzICovLAogCQkJ
CTQzNkU1NDUzMUM0NjhFNzQwMEI1QUY3MyAvKiBCM0xlZ2FsaXplTWVtb3J5T2Zmc2V0cy5oIGlu
IEhlYWRlcnMgKi8sCkBAIC04Nzg3LDYgKzg3OTgsNyBAQAogCQkJCTQ3M0RBNEE0NzY0QzQ1RkU4
NzFCMDQ4NSAvKiBEZWZpbmVQcm9wZXJ0eUF0dHJpYnV0ZXMuaCBpbiBIZWFkZXJzICovLAogCQkJ
CTBGQkI3M0JCMURFRjg2NDUwMDJDMDA5RSAvKiBEZWxldGVBbGxDb2RlRWZmb3J0LmggaW4gSGVh
ZGVycyAqLywKIAkJCQkwRjk2MzAzQzFENDE5MkNEMDA1NjA5RDkgLyogRGVzdHJ1Y3Rpb25Nb2Rl
LmggaW4gSGVhZGVycyAqLywKKwkJCQk1MjdDRTM1NDIyNTU1RkU1MDBDNkYzODIgLyogSlNUb1dh
c21JQ0NhbGxlZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTc3QTQyM0UxN0EwQkJGRDAwQThEQjgx
IC8qIERGR0Fic3RyYWN0SGVhcC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTcwNEQ5MDMxN0EwQkFB
ODAwNkJBNTU0IC8qIERGR0Fic3RyYWN0SW50ZXJwcmV0ZXIuaCBpbiBIZWFkZXJzICovLAogCQkJ
CTBGNUUwRkQ4MjA3QzcyNzMwMDk3RjBERSAvKiBERkdBYnN0cmFjdEludGVycHJldGVyQ2xvYmJl
clN0YXRlLmggaW4gSGVhZGVycyAqLywKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3Nl
bWJsZXIvTWFjcm9Bc3NlbWJsZXJDb2RlUmVmLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlckNvZGVSZWYuaAkocmV2aXNpb24gMjQz
NzgwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlckNv
ZGVSZWYuaAkod29ya2luZyBjb3B5KQpAQCAtMzgwLDYgKzM4MCwxNCBAQCBwdWJsaWM6CiAgICAg
ICAgIEFTU0VSVChtX2V4ZWN1dGFibGVNZW1vcnktPnN0YXJ0KCkpOwogICAgICAgICBBU1NFUlQo
bV9jb2RlUHRyKTsKICAgICB9CisKKyAgICB0ZW1wbGF0ZTxQdHJUYWcgb3RoZXJUYWc+CisgICAg
TWFjcm9Bc3NlbWJsZXJDb2RlUmVmJiBvcGVyYXRvcj0oY29uc3QgTWFjcm9Bc3NlbWJsZXJDb2Rl
UmVmPG90aGVyVGFnPiYgb3RoZXJDb2RlUmVmKQorICAgIHsKKyAgICAgICAgbV9jb2RlUHRyID0g
TWFjcm9Bc3NlbWJsZXJDb2RlUHRyPHRhZz46OmNyZWF0ZUZyb21FeGVjdXRhYmxlQWRkcmVzcyhv
dGhlckNvZGVSZWYuY29kZSgpLnRlbXBsYXRlIHJldGFnZ2VkRXhlY3V0YWJsZUFkZHJlc3M8dGFn
PigpKTsKKyAgICAgICAgbV9leGVjdXRhYmxlTWVtb3J5ID0gb3RoZXJDb2RlUmVmLm1fZXhlY3V0
YWJsZU1lbW9yeTsKKyAgICAgICAgcmV0dXJuICp0aGlzOworICAgIH0KICAgICAKICAgICAvLyBV
c2UgdGhpcyBvbmx5IHdoZW4geW91IGtub3cgdGhhdCB0aGUgY29kZVB0ciByZWZlcnMgdG8gY29k
ZSB0aGF0IGlzCiAgICAgLy8gYWxyZWFkeSBiZWluZyBrZXB0IGFsaXZlIHRocm91Z2ggc29tZSBv
dGhlciBtZWFucy4gVHlwaWNhbGx5IHRoaXMgbWVhbnMKQEAgLTQ0Myw5ICs0NTEsOSBAQCBwdWJs
aWM6CiBwcml2YXRlOgogICAgIHRlbXBsYXRlPFB0clRhZyBvdGhlclRhZz4KICAgICBNYWNyb0Fz
c2VtYmxlckNvZGVSZWYoY29uc3QgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPG90aGVyVGFnPiYgb3Ro
ZXJDb2RlUmVmKQotICAgICAgICA6IG1fY29kZVB0cihNYWNyb0Fzc2VtYmxlckNvZGVQdHI8dGFn
Pjo6Y3JlYXRlRnJvbUV4ZWN1dGFibGVBZGRyZXNzKG90aGVyQ29kZVJlZi5jb2RlKCkudGVtcGxh
dGUgcmV0YWdnZWRFeGVjdXRhYmxlQWRkcmVzczx0YWc+KCkpKQotICAgICAgICAsIG1fZXhlY3V0
YWJsZU1lbW9yeShvdGhlckNvZGVSZWYubV9leGVjdXRhYmxlTWVtb3J5KQotICAgIHsgfQorICAg
IHsKKyAgICAgICAgKnRoaXMgPSBvdGhlckNvZGVSZWY7CisgICAgfQogCiAgICAgTWFjcm9Bc3Nl
bWJsZXJDb2RlUHRyPHRhZz4gbV9jb2RlUHRyOwogICAgIFJlZlB0cjxFeGVjdXRhYmxlTWVtb3J5
SGFuZGxlPiBtX2V4ZWN1dGFibGVNZW1vcnk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW50ZXJwcmV0ZXIvSW50ZXJwcmV0ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9pbnRlcnByZXRlci9JbnRlcnByZXRlci5jcHAJKHJldmlzaW9uIDI0Mzc4MCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9JbnRlcnByZXRlci5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTU0OSw2ICs1NDksMTMgQEAgcHVibGljOgogICAgICAgICAgICAgfQogICAg
ICAgICB9CiAKKyNpZiBFTkFCTEUoV0VCQVNTRU1CTFkpCisgICAgICAgIGlmICh2aXNpdG9yLT5j
YWxsZWUoKS5pc0NlbGwoKSkgeworICAgICAgICAgICAgaWYgKGF1dG8qIGpzVG9XYXNtSUNDYWxs
ZWUgPSBqc0R5bmFtaWNDYXN0PEpTVG9XYXNtSUNDYWxsZWUqPihtX3ZtLCB2aXNpdG9yLT5jYWxs
ZWUoKS5hc0NlbGwoKSkpCisgICAgICAgICAgICAgICAgbV92bS53YXNtQ29udGV4dC5zdG9yZShq
c1RvV2FzbUlDQ2FsbGVlLT5mdW5jdGlvbigpLT5wcmV2aW91c0luc3RhbmNlKG1fY2FsbEZyYW1l
KSwgbV92bS5zb2Z0U3RhY2tMaW1pdCgpKTsKKyAgICAgICAgfQorI2VuZGlmCisKICAgICAgICAg
bm90aWZ5RGVidWdnZXJPZlVud2luZGluZyhtX3ZtLCBtX2NhbGxGcmFtZSk7CiAKICAgICAgICAg
Y29weUNhbGxlZVNhdmVzVG9FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNCdWZmZXIodmlzaXRvcik7CkBA
IC01NjQsNyArNTcxLDcgQEAgcHJpdmF0ZToKICAgICB2b2lkIGNvcHlDYWxsZWVTYXZlc1RvRW50
cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVyKFN0YWNrVmlzaXRvciYgdmlzaXRvcikgY29uc3QKICAg
ICB7CiAjaWYgIUVOQUJMRShDX0xPT1ApICYmIE5VTUJFUl9PRl9DQUxMRUVfU0FWRVNfUkVHSVNU
RVJTID4gMAotICAgICAgICBjb25zdCBSZWdpc3RlckF0T2Zmc2V0TGlzdCogY3VycmVudENhbGxl
ZVNhdmVzID0gdmlzaXRvci0+Y2FsbGVlU2F2ZVJlZ2lzdGVycygpOworICAgICAgICBPcHRpb25h
bDxSZWdpc3RlckF0T2Zmc2V0TGlzdD4gY3VycmVudENhbGxlZVNhdmVzID0gdmlzaXRvci0+Y2Fs
bGVlU2F2ZVJlZ2lzdGVyc0ZvclVud2luZGluZygpOwogCiAgICAgICAgIGlmICghY3VycmVudENh
bGxlZVNhdmVzKQogICAgICAgICAgICAgcmV0dXJuOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2ludGVycHJldGVyL1N0YWNrVmlzaXRvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ludGVycHJldGVyL1N0YWNrVmlzaXRvci5jcHAJKHJldmlzaW9uIDI0Mzc4
MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9TdGFja1Zpc2l0b3IuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0zMyw2ICszMyw3IEBACiAjaW5jbHVkZSAiSlNDSW5saW5lcy5o
IgogI2luY2x1ZGUgIldhc21DYWxsZWUuaCIKICNpbmNsdWRlICJXYXNtSW5kZXhPck5hbWUuaCIK
KyNpbmNsdWRlICJXZWJBc3NlbWJseUZ1bmN0aW9uLmgiCiAjaW5jbHVkZSA8d3RmL3RleHQvU3Ry
aW5nQnVpbGRlci5oPgogCiBuYW1lc3BhY2UgSlNDIHsKQEAgLTI1MiwxMCArMjUzLDEwIEBAIFN0
YWNrVmlzaXRvcjo6RnJhbWU6OkNvZGVUeXBlIFN0YWNrVmlzaXQKICAgICByZXR1cm4gQ29kZVR5
cGU6Okdsb2JhbDsKIH0KIAotY29uc3QgUmVnaXN0ZXJBdE9mZnNldExpc3QqIFN0YWNrVmlzaXRv
cjo6RnJhbWU6OmNhbGxlZVNhdmVSZWdpc3RlcnMoKQorT3B0aW9uYWw8UmVnaXN0ZXJBdE9mZnNl
dExpc3Q+IFN0YWNrVmlzaXRvcjo6RnJhbWU6OmNhbGxlZVNhdmVSZWdpc3RlcnNGb3JVbndpbmRp
bmcoKQogewogICAgIGlmIChpc0lubGluZWRGcmFtZSgpKQotICAgICAgICByZXR1cm4gbnVsbHB0
cjsKKyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIAogI2lmICFFTkFCTEUoQ19MT09QKSAm
JiBOVU1CRVJfT0ZfQ0FMTEVFX1NBVkVTX1JFR0lTVEVSUyA+IDAKIApAQCAtMjYzLDE5ICsyNjQs
MjQgQEAgY29uc3QgUmVnaXN0ZXJBdE9mZnNldExpc3QqIFN0YWNrVmlzaXRvcgogICAgIGlmIChp
c1dhc21GcmFtZSgpKSB7CiAgICAgICAgIGlmIChjYWxsZWUoKS5pc0NlbGwoKSkgewogICAgICAg
ICAgICAgUkVMRUFTRV9BU1NFUlQoaXNXZWJBc3NlbWJseVRvSlNDYWxsZWUoY2FsbGVlKCkuYXND
ZWxsKCkpKTsKLSAgICAgICAgICAgIHJldHVybiBudWxscHRyOworICAgICAgICAgICAgcmV0dXJu
IFdURjo6bnVsbG9wdDsKICAgICAgICAgfQogICAgICAgICBXYXNtOjpDYWxsZWUqIHdhc21DYWxs
ZWUgPSBjYWxsZWUoKS5hc1dhc21DYWxsZWUoKTsKLSAgICAgICAgcmV0dXJuIHdhc21DYWxsZWUt
PmNhbGxlZVNhdmVSZWdpc3RlcnMoKTsKKyAgICAgICAgcmV0dXJuICp3YXNtQ2FsbGVlLT5jYWxs
ZWVTYXZlUmVnaXN0ZXJzKCk7CisgICAgfQorCisgICAgaWYgKGNhbGxlZSgpLmlzQ2VsbCgpKSB7
CisgICAgICAgIGlmIChhdXRvKiBqc1RvV2FzbUlDQ2FsbGVlID0ganNEeW5hbWljQ2FzdDxKU1Rv
V2FzbUlDQ2FsbGVlKj4oKmNhbGxlZSgpLmFzQ2VsbCgpLT52bSgpLCBjYWxsZWUoKS5hc0NlbGwo
KSkpCisgICAgICAgICAgICByZXR1cm4ganNUb1dhc21JQ0NhbGxlZS0+ZnVuY3Rpb24oKS0+dXNl
ZENhbGxlZVNhdmVSZWdpc3RlcnMoKTsKICAgICB9CiAjZW5kaWYgLy8gRU5BQkxFKFdFQkFTU0VN
QkxZKQogCiAgICAgaWYgKENvZGVCbG9jayogY29kZUJsb2NrID0gdGhpcy0+Y29kZUJsb2NrKCkp
Ci0gICAgICAgIHJldHVybiBjb2RlQmxvY2stPmNhbGxlZVNhdmVSZWdpc3RlcnMoKTsKKyAgICAg
ICAgcmV0dXJuICpjb2RlQmxvY2stPmNhbGxlZVNhdmVSZWdpc3RlcnMoKTsKIAogI2VuZGlmIC8v
ICFFTkFCTEUoQ19MT09QKSAmJiBOVU1CRVJfT0ZfQ0FMTEVFX1NBVkVTX1JFR0lTVEVSUyA+IDAK
IAotICAgIHJldHVybiBudWxscHRyOworICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiB9CiAKIFN0
cmluZyBTdGFja1Zpc2l0b3I6OkZyYW1lOjpmdW5jdGlvbk5hbWUoKSBjb25zdApJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL1N0YWNrVmlzaXRvci5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9TdGFja1Zpc2l0b3IuaAkocmV2
aXNpb24gMjQzNzgwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL1N0YWNr
VmlzaXRvci5oCSh3b3JraW5nIGNvcHkpCkBAIC05NCw3ICs5NCw3IEBAIHB1YmxpYzoKICAgICAg
ICAgYm9vbCBoYXNMaW5lQW5kQ29sdW1uSW5mbygpIGNvbnN0OwogICAgICAgICBKU19FWFBPUlRf
UFJJVkFURSB2b2lkIGNvbXB1dGVMaW5lQW5kQ29sdW1uKHVuc2lnbmVkJiBsaW5lLCB1bnNpZ25l
ZCYgY29sdW1uKSBjb25zdDsKIAotICAgICAgICBjb25zdCBSZWdpc3RlckF0T2Zmc2V0TGlzdCog
Y2FsbGVlU2F2ZVJlZ2lzdGVycygpOworICAgICAgICBPcHRpb25hbDxSZWdpc3RlckF0T2Zmc2V0
TGlzdD4gY2FsbGVlU2F2ZVJlZ2lzdGVyc0ZvclVud2luZGluZygpOwogCiAgICAgICAgIENsb25l
ZEFyZ3VtZW50cyogY3JlYXRlQXJndW1lbnRzKCk7CiAgICAgICAgIENhbGxGcmFtZSogY2FsbEZy
YW1lKCkgY29uc3QgeyByZXR1cm4gbV9jYWxsRnJhbWU7IH0KSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRpb25zLmNwcAkocmV2aXNpb24gMjQzNzgwKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRpb25zLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtNzYsNiArNzYsNyBAQAogI2luY2x1ZGUgIlRodW5rR2VuZXJhdG9ycy5oIgogI2luY2x1ZGUg
IlR5cGVQcm9maWxlckxvZy5oIgogI2luY2x1ZGUgIlZNSW5saW5lcy5oIgorI2luY2x1ZGUgIldl
YkFzc2VtYmx5RnVuY3Rpb24uaCIKICNpbmNsdWRlIDx3dGYvSW5saW5lQVNNLmg+CiAKIG5hbWVz
cGFjZSBKU0MgewpAQCAtMTAzNiw5ICsxMDM3LDExIEBAIFNsb3dQYXRoUmV0dXJuVHlwZSBKSVRf
T1BFUkFUSU9OIG9wZXJhdGkKIAogICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxKU0VudHJ5UHRy
VGFnPiBjb2RlUHRyOwogICAgIENvZGVCbG9jayogY29kZUJsb2NrID0gbnVsbHB0cjsKLSAgICBp
ZiAoZXhlY3V0YWJsZS0+aXNIb3N0RnVuY3Rpb24oKSkKLSAgICAgICAgY29kZVB0ciA9IGV4ZWN1
dGFibGUtPmVudHJ5cG9pbnRGb3Ioa2luZCwgTXVzdENoZWNrQXJpdHkpOwotICAgIGVsc2Ugewor
ICAgIGlmIChleGVjdXRhYmxlLT5pc0hvc3RGdW5jdGlvbigpKSB7CisgICAgICAgIGNvZGVQdHIg
PSBqc1RvV2FzbUlDQ29kZVB0cigqdm0sIGtpbmQsIGNhbGxlZSk7CisgICAgICAgIGlmICghY29k
ZVB0cikKKyAgICAgICAgICAgIGNvZGVQdHIgPSBleGVjdXRhYmxlLT5lbnRyeXBvaW50Rm9yKGtp
bmQsIE11c3RDaGVja0FyaXR5KTsKKyAgICB9IGVsc2UgewogICAgICAgICBGdW5jdGlvbkV4ZWN1
dGFibGUqIGZ1bmN0aW9uRXhlY3V0YWJsZSA9IHN0YXRpY19jYXN0PEZ1bmN0aW9uRXhlY3V0YWJs
ZSo+KGV4ZWN1dGFibGUpOwogCiAgICAgICAgIGF1dG8gaGFuZGxlVGhyb3dFeGNlcHRpb24gPSBb
Jl0gKCkgewpAQCAtMTA2NCw2ICsxMDY3LDcgQEAgU2xvd1BhdGhSZXR1cm5UeXBlIEpJVF9PUEVS
QVRJT04gb3BlcmF0aQogICAgICAgICAgICAgYXJpdHkgPSBBcml0eUNoZWNrTm90UmVxdWlyZWQ7
CiAgICAgICAgIGNvZGVQdHIgPSBmdW5jdGlvbkV4ZWN1dGFibGUtPmVudHJ5cG9pbnRGb3Ioa2lu
ZCwgYXJpdHkpOwogICAgIH0KKwogICAgIGlmICghY2FsbExpbmtJbmZvLT5zZWVuT25jZSgpKQog
ICAgICAgICBjYWxsTGlua0luZm8tPnNldFNlZW4oKTsKICAgICBlbHNlCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L1JlZ2lzdGVyU2V0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L1JlZ2lzdGVyU2V0LmNwcAkocmV2aXNpb24gMjQzNzgwKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9SZWdpc3RlclNldC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTU4LDcgKzU4LDcgQEAgUmVnaXN0ZXJTZXQgUmVnaXN0ZXJTZXQ6OnJlc2VydmVkSGFyZHdh
cgogI2VuZGlmCiB9CiAKLVJlZ2lzdGVyU2V0IFJlZ2lzdGVyU2V0OjpydW50aW1lUmVnaXN0ZXJz
KCkKK1JlZ2lzdGVyU2V0IFJlZ2lzdGVyU2V0OjpydW50aW1lVGFnUmVnaXN0ZXJzKCkKIHsKICNp
ZiBVU0UoSlNWQUxVRTY0KQogICAgIHJldHVybiBSZWdpc3RlclNldChHUFJJbmZvOjp0YWdUeXBl
TnVtYmVyUmVnaXN0ZXIsIEdQUkluZm86OnRhZ01hc2tSZWdpc3Rlcik7CkBAIC03MCw3ICs3MCw3
IEBAIFJlZ2lzdGVyU2V0IFJlZ2lzdGVyU2V0OjpydW50aW1lUmVnaXN0ZXIKIFJlZ2lzdGVyU2V0
IFJlZ2lzdGVyU2V0OjpzcGVjaWFsUmVnaXN0ZXJzKCkKIHsKICAgICByZXR1cm4gUmVnaXN0ZXJT
ZXQoCi0gICAgICAgIHN0YWNrUmVnaXN0ZXJzKCksIHJlc2VydmVkSGFyZHdhcmVSZWdpc3RlcnMo
KSwgcnVudGltZVJlZ2lzdGVycygpKTsKKyAgICAgICAgc3RhY2tSZWdpc3RlcnMoKSwgcmVzZXJ2
ZWRIYXJkd2FyZVJlZ2lzdGVycygpLCBydW50aW1lVGFnUmVnaXN0ZXJzKCkpOwogfQogCiBSZWdp
c3RlclNldCBSZWdpc3RlclNldDo6dm9sYXRpbGVSZWdpc3RlcnNGb3JKU0NhbGwoKQpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9SZWdpc3RlclNldC5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUmVnaXN0ZXJTZXQuaAkocmV2aXNpb24gMjQzNzgwKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9SZWdpc3RlclNldC5oCSh3b3JraW5nIGNvcHkp
CkBAIC01MCw3ICs1MCw3IEBAIHB1YmxpYzoKICAgICAKICAgICBKU19FWFBPUlRfUFJJVkFURSBz
dGF0aWMgUmVnaXN0ZXJTZXQgc3RhY2tSZWdpc3RlcnMoKTsKICAgICBKU19FWFBPUlRfUFJJVkFU
RSBzdGF0aWMgUmVnaXN0ZXJTZXQgcmVzZXJ2ZWRIYXJkd2FyZVJlZ2lzdGVycygpOwotICAgIHN0
YXRpYyBSZWdpc3RlclNldCBydW50aW1lUmVnaXN0ZXJzKCk7CisgICAgc3RhdGljIFJlZ2lzdGVy
U2V0IHJ1bnRpbWVUYWdSZWdpc3RlcnMoKTsKICAgICBzdGF0aWMgUmVnaXN0ZXJTZXQgc3BlY2lh
bFJlZ2lzdGVycygpOyAvLyBUaGUgdW5pb24gb2Ygc3RhY2ssIHJlc2VydmVkIGhhcmR3YXJlLCBh
bmQgcnVudGltZSByZWdpc3RlcnMuCiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIFJlZ2lz
dGVyU2V0IGNhbGxlZVNhdmVSZWdpc3RlcnMoKTsKICAgICBzdGF0aWMgUmVnaXN0ZXJTZXQgdm1D
YWxsZWVTYXZlUmVnaXN0ZXJzKCk7IC8vIENhbGxlZSBzYXZlIHJlZ2lzdGVycyB0aGF0IG1pZ2h0
IGJlIHNhdmVkIGFuZCB1c2VkIGJ5IGFueSB0aWVyLgpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9SZXBhdGNoLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L1JlcGF0Y2guY3BwCShyZXZpc2lvbiAyNDM3ODApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L1JlcGF0Y2guY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05NzUsNyArOTc1LDcgQEAgdm9p
ZCBsaW5rUG9seW1vcnBoaWNDYWxsKAogICAgIGlmIChQb2x5bW9ycGhpY0NhbGxTdHViUm91dGlu
ZSogc3R1YiA9IGNhbGxMaW5rSW5mby5zdHViKCkpCiAgICAgICAgIGxpc3QgPSBzdHViLT52YXJp
YW50cygpOwogICAgIGVsc2UgaWYgKEpTT2JqZWN0KiBvbGRDYWxsZWUgPSBjYWxsTGlua0luZm8u
Y2FsbGVlKCkpCi0gICAgICAgIGxpc3QgPSBDYWxsVmFyaWFudExpc3R7IENhbGxWYXJpYW50KG9s
ZENhbGxlZSkgfTsKKyAgICAgICAgbGlzdCA9IENhbGxWYXJpYW50TGlzdCB7IENhbGxWYXJpYW50
KG9sZENhbGxlZSkgfTsKICAgICAKICAgICBsaXN0ID0gdmFyaWFudExpc3RXaXRoVmFyaWFudChs
aXN0LCBuZXdWYXJpYW50KTsKIApAQCAtMTEzNyw3ICsxMTM3LDEwIEBAIHZvaWQgbGlua1BvbHlt
b3JwaGljQ2FsbCgKICAgICAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPEpTRW50cnlQdHJUYWc+
IGNvZGVQdHI7CiAgICAgICAgIGlmICh2YXJpYW50LmV4ZWN1dGFibGUoKSkgewogICAgICAgICAg
ICAgQVNTRVJUKHZhcmlhbnQuZXhlY3V0YWJsZSgpLT5oYXNKSVRDb2RlRm9yQ2FsbCgpKTsKLSAg
ICAgICAgICAgIGNvZGVQdHIgPSB2YXJpYW50LmV4ZWN1dGFibGUoKS0+Z2VuZXJhdGVkSklUQ29k
ZUZvckNhbGwoKS0+YWRkcmVzc0ZvckNhbGwoQXJpdHlDaGVja05vdFJlcXVpcmVkKTsKKyAgICAg
ICAgICAgIAorICAgICAgICAgICAgY29kZVB0ciA9IGpzVG9XYXNtSUNDb2RlUHRyKHZtLCBjYWxs
TGlua0luZm8uc3BlY2lhbGl6YXRpb25LaW5kKCksIHZhcmlhbnQuZnVuY3Rpb24oKSk7CisgICAg
ICAgICAgICBpZiAoIWNvZGVQdHIpCisgICAgICAgICAgICAgICAgY29kZVB0ciA9IHZhcmlhbnQu
ZXhlY3V0YWJsZSgpLT5nZW5lcmF0ZWRKSVRDb2RlRm9yQ2FsbCgpLT5hZGRyZXNzRm9yQ2FsbChB
cml0eUNoZWNrTm90UmVxdWlyZWQpOwogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgQVNT
RVJUKHZhcmlhbnQuaW50ZXJuYWxGdW5jdGlvbigpKTsKICAgICAgICAgICAgIGNvZGVQdHIgPSB2
bS5nZXRDVElJbnRlcm5hbEZ1bmN0aW9uVHJhbXBvbGluZUZvcihDb2RlRm9yQ2FsbCk7CkBAIC0x
Mjc3LDYgKzEyODAsMjMgQEAgdm9pZCByZXNldEluc3RhbmNlT2YoU3RydWN0dXJlU3R1YkluZm8m
IAogICAgIHJlc2V0UGF0Y2hhYmxlSnVtcChzdHViSW5mbyk7CiB9CiAKK01hY3JvQXNzZW1ibGVy
Q29kZVB0cjxKU0VudHJ5UHRyVGFnPiBqc1RvV2FzbUlDQ29kZVB0cihWTSYgdm0sIENvZGVTcGVj
aWFsaXphdGlvbktpbmQga2luZCwgSlNPYmplY3QqIGNhbGxlZSkKK3sKKyNpZiBFTkFCTEUoV0VC
QVNTRU1CTFkpCisgICAgaWYgKCFjYWxsZWUpCisgICAgICAgIHJldHVybiBudWxscHRyOworICAg
IGlmIChraW5kICE9IENvZGVGb3JDYWxsKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICBp
ZiAoYXV0byogd2FzbUZ1bmN0aW9uID0ganNEeW5hbWljQ2FzdDxXZWJBc3NlbWJseUZ1bmN0aW9u
Kj4odm0sIGNhbGxlZSkpCisgICAgICAgIHJldHVybiB3YXNtRnVuY3Rpb24tPmpzQ2FsbEVudHJ5
cG9pbnQoKTsKKyNlbHNlCisgICAgVU5VU0VEX1BBUkFNKHZtKTsKKyAgICBVTlVTRURfUEFSQU0o
a2luZCk7CisgICAgVU5VU0VEX1BBUkFNKGNhbGxlZSk7CisjZW5kaWYKKyAgICByZXR1cm4gbnVs
bHB0cjsKK30KKwogfSAvLyBuYW1lc3BhY2UgSlNDCiAKICNlbmRpZgpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9SZXBhdGNoLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9SZXBhdGNoLmgJKHJldmlzaW9uIDI0Mzc4MCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvUmVwYXRjaC5oCSh3b3JraW5nIGNvcHkpCkBAIC01Nyw2ICs1Nyw4IEBAIHZv
aWQgcmVzZXRQdXRCeUlEKENvZGVCbG9jayosIFN0cnVjdHVyZVMKIHZvaWQgcmVzZXRJbkJ5SUQo
Q29kZUJsb2NrKiwgU3RydWN0dXJlU3R1YkluZm8mKTsKIHZvaWQgcmVzZXRJbnN0YW5jZU9mKFN0
cnVjdHVyZVN0dWJJbmZvJik7CiB2b2lkIGZ0bFRodW5rQXdhcmVSZXBhdGNoQ2FsbChDb2RlQmxv
Y2sqLCBDb2RlTG9jYXRpb25DYWxsPEpTSW50ZXJuYWxQdHJUYWc+LCBGdW5jdGlvblB0cjxDRnVu
Y3Rpb25QdHJUYWc+IG5ld0NhbGxlZUZ1bmN0aW9uKTsKK01hY3JvQXNzZW1ibGVyQ29kZVB0cjxK
U0VudHJ5UHRyVGFnPiBqc1RvV2FzbUlDQ29kZVB0cihWTSYsIENvZGVTcGVjaWFsaXphdGlvbktp
bmQsIEpTT2JqZWN0KiBjYWxsZWUpOworCiAKIH0gLy8gbmFtZXNwYWNlIEpTQwogCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0Z1bmN0aW9uLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0Z1bmN0aW9uLmNwcAkocmV2aXNpb24g
MjQzNzgwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNGdW5jdGlvbi5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTQ4LDYgKzQ4LDcgQEAKICNpbmNsdWRlICJQYXJzZXIuaCIKICNp
bmNsdWRlICJQcm9wZXJ0eU5hbWVBcnJheS5oIgogI2luY2x1ZGUgIlN0YWNrVmlzaXRvci5oIgor
I2luY2x1ZGUgIldlYkFzc2VtYmx5RnVuY3Rpb24uaCIKIAogbmFtZXNwYWNlIEpTQyB7CiAKQEAg
LTYyNywxMCArNjI4LDE0IEBAIENvbnN0cnVjdFR5cGUgSlNGdW5jdGlvbjo6Z2V0Q29uc3RydWN0
RGEKIAogU3RyaW5nIGdldENhbGN1bGF0ZWREaXNwbGF5TmFtZShWTSYgdm0sIEpTT2JqZWN0KiBv
YmplY3QpCiB7CisjaWYgRU5BQkxFKFdFQkFTU0VNQkxZKQorICAgIGlmIChqc0R5bmFtaWNDYXN0
PEpTVG9XYXNtSUNDYWxsZWUqPih2bSwgb2JqZWN0KSkKKyAgICAgICAgcmV0dXJuICJ3YXNtLXN0
dWIiX3M7CisjZW5kaWYKKwogICAgIGlmICghanNEeW5hbWljQ2FzdDxKU0Z1bmN0aW9uKj4odm0s
IG9iamVjdCkgJiYgIWpzRHluYW1pY0Nhc3Q8SW50ZXJuYWxGdW5jdGlvbio+KHZtLCBvYmplY3Qp
KQogICAgICAgICByZXR1cm4gZW1wdHlTdHJpbmcoKTsKIAotCiAgICAgU3RydWN0dXJlKiBzdHJ1
Y3R1cmUgPSBvYmplY3QtPnN0cnVjdHVyZSh2bSk7CiAgICAgdW5zaWduZWQgYXR0cmlidXRlczsK
ICAgICAvLyBUaGlzIGZ1bmN0aW9uIG1heSBiZSBjYWxsZWQgd2hlbiB0aGUgbXV0YXRvciBpc24n
dCBydW5uaW5nIGFuZCB3ZSBhcmUgbGF6aWx5IGdlbmVyYXRpbmcgYSBzdGFjayB0cmFjZS4KSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0LmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVjdC5j
cHAJKHJldmlzaW9uIDI0Mzc4MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pT
R2xvYmFsT2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTA1Myw2ICsxMDUzLDEwIEBAIHB1
dERpcmVjdFdpdGhvdXRUcmFuc2l0aW9uKHZtLCB2bS5wcm9wZXIKICAgICAgICAgICAgIFtdIChj
b25zdCBJbml0aWFsaXplcjxTdHJ1Y3R1cmU+JiBpbml0KSB7CiAgICAgICAgICAgICAgICAgaW5p
dC5zZXQoV2ViQXNzZW1ibHlGdW5jdGlvbjo6Y3JlYXRlU3RydWN0dXJlKGluaXQudm0sIGluaXQu
b3duZXIsIGluaXQub3duZXItPm1fZnVuY3Rpb25Qcm90b3R5cGUuZ2V0KCkpKTsKICAgICAgICAg
ICAgIH0pOworICAgICAgICBtX2pzVG9XYXNtSUNDYWxsZWVTdHJ1Y3R1cmUuaW5pdExhdGVyKAor
ICAgICAgICAgICAgW10gKGNvbnN0IEluaXRpYWxpemVyPFN0cnVjdHVyZT4mIGluaXQpIHsKKyAg
ICAgICAgICAgICAgICBpbml0LnNldChKU1RvV2FzbUlDQ2FsbGVlOjpjcmVhdGVTdHJ1Y3R1cmUo
aW5pdC52bSwgaW5pdC5vd25lciwgSlNWYWx1ZSgpKSk7CisgICAgICAgICAgICB9KTsKICAgICAg
ICAgbV93ZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlvblN0cnVjdHVyZS5pbml0TGF0ZXIoCiAgICAg
ICAgICAgICBbXSAoY29uc3QgSW5pdGlhbGl6ZXI8U3RydWN0dXJlPiYgaW5pdCkgewogICAgICAg
ICAgICAgICAgIGluaXQuc2V0KFdlYkFzc2VtYmx5V3JhcHBlckZ1bmN0aW9uOjpjcmVhdGVTdHJ1
Y3R1cmUoaW5pdC52bSwgaW5pdC5vd25lciwgaW5pdC5vd25lci0+bV9mdW5jdGlvblByb3RvdHlw
ZS5nZXQoKSkpOwpAQCAtMTc1MSw2ICsxNzU1LDcgQEAgdm9pZCBKU0dsb2JhbE9iamVjdDo6dmlz
aXRDaGlsZHJlbihKU0NlbAogI2lmIEVOQUJMRShXRUJBU1NFTUJMWSkKICAgICB0aGlzT2JqZWN0
LT5tX3dlYkFzc2VtYmx5TW9kdWxlUmVjb3JkU3RydWN0dXJlLnZpc2l0KHZpc2l0b3IpOwogICAg
IHRoaXNPYmplY3QtPm1fd2ViQXNzZW1ibHlGdW5jdGlvblN0cnVjdHVyZS52aXNpdCh2aXNpdG9y
KTsKKyAgICB0aGlzT2JqZWN0LT5tX2pzVG9XYXNtSUNDYWxsZWVTdHJ1Y3R1cmUudmlzaXQodmlz
aXRvcik7CiAgICAgdGhpc09iamVjdC0+bV93ZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlvblN0cnVj
dHVyZS52aXNpdCh2aXNpdG9yKTsKICAgICB0aGlzT2JqZWN0LT5tX3dlYkFzc2VtYmx5VG9KU0Nh
bGxlZVN0cnVjdHVyZS52aXNpdCh2aXNpdG9yKTsKICAgICBGT1JfRUFDSF9XRUJBU1NFTUJMWV9D
T05TVFJVQ1RPUl9UWVBFKFZJU0lUX0xBWllfVFlQRSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3QuaAkocmV2aXNpb24gMjQzNzgwKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3QuaAkod29ya2luZyBj
b3B5KQpAQCAtNDAwLDYgKzQwMCw3IEBAIHB1YmxpYzoKICNpZiBFTkFCTEUoV0VCQVNTRU1CTFkp
CiAgICAgTGF6eVByb3BlcnR5PEpTR2xvYmFsT2JqZWN0LCBTdHJ1Y3R1cmU+IG1fd2ViQXNzZW1i
bHlNb2R1bGVSZWNvcmRTdHJ1Y3R1cmU7CiAgICAgTGF6eVByb3BlcnR5PEpTR2xvYmFsT2JqZWN0
LCBTdHJ1Y3R1cmU+IG1fd2ViQXNzZW1ibHlGdW5jdGlvblN0cnVjdHVyZTsKKyAgICBMYXp5UHJv
cGVydHk8SlNHbG9iYWxPYmplY3QsIFN0cnVjdHVyZT4gbV9qc1RvV2FzbUlDQ2FsbGVlU3RydWN0
dXJlOwogICAgIExhenlQcm9wZXJ0eTxKU0dsb2JhbE9iamVjdCwgU3RydWN0dXJlPiBtX3dlYkFz
c2VtYmx5V3JhcHBlckZ1bmN0aW9uU3RydWN0dXJlOwogICAgIExhenlQcm9wZXJ0eTxKU0dsb2Jh
bE9iamVjdCwgU3RydWN0dXJlPiBtX3dlYkFzc2VtYmx5VG9KU0NhbGxlZVN0cnVjdHVyZTsKICAg
ICBGT1JfRUFDSF9XRUJBU1NFTUJMWV9DT05TVFJVQ1RPUl9UWVBFKERFRklORV9TVE9SQUdFX0ZP
Ul9MQVpZX1RZUEUpCkBAIC03NjQsNiArNzY1LDcgQEAgcHVibGljOgogI2lmIEVOQUJMRShXRUJB
U1NFTUJMWSkKICAgICBTdHJ1Y3R1cmUqIHdlYkFzc2VtYmx5TW9kdWxlUmVjb3JkU3RydWN0dXJl
KCkgY29uc3QgeyByZXR1cm4gbV93ZWJBc3NlbWJseU1vZHVsZVJlY29yZFN0cnVjdHVyZS5nZXQo
dGhpcyk7IH0KICAgICBTdHJ1Y3R1cmUqIHdlYkFzc2VtYmx5RnVuY3Rpb25TdHJ1Y3R1cmUoKSBj
b25zdCB7IHJldHVybiBtX3dlYkFzc2VtYmx5RnVuY3Rpb25TdHJ1Y3R1cmUuZ2V0KHRoaXMpOyB9
CisgICAgU3RydWN0dXJlKiBqc1RvV2FzbUlDQ2FsbGVlU3RydWN0dXJlKCkgY29uc3QgeyByZXR1
cm4gbV9qc1RvV2FzbUlDQ2FsbGVlU3RydWN0dXJlLmdldCh0aGlzKTsgfQogICAgIFN0cnVjdHVy
ZSogd2ViQXNzZW1ibHlXcmFwcGVyRnVuY3Rpb25TdHJ1Y3R1cmUoKSBjb25zdCB7IHJldHVybiBt
X3dlYkFzc2VtYmx5V3JhcHBlckZ1bmN0aW9uU3RydWN0dXJlLmdldCh0aGlzKTsgfQogICAgIFN0
cnVjdHVyZSogd2ViQXNzZW1ibHlUb0pTQ2FsbGVlU3RydWN0dXJlKCkgY29uc3QgeyByZXR1cm4g
bV93ZWJBc3NlbWJseVRvSlNDYWxsZWVTdHJ1Y3R1cmUuZ2V0KHRoaXMpOyB9CiAjZW5kaWYgLy8g
RU5BQkxFKFdFQkFTU0VNQkxZKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
Vk0uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmNw
cAkocmV2aXNpb24gMjQzNzgwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0u
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNDcsNiArMTQ3LDcgQEAKICNpbmNsdWRlICJXYXRjaGRv
Zy5oIgogI2luY2x1ZGUgIldlYWtHQ01hcElubGluZXMuaCIKICNpbmNsdWRlICJXZWJBc3NlbWJs
eUZ1bmN0aW9uLmgiCisjaW5jbHVkZSAiV2ViQXNzZW1ibHlGdW5jdGlvbkhlYXBDZWxsVHlwZS5o
IgogI2luY2x1ZGUgIldlYkFzc2VtYmx5V3JhcHBlckZ1bmN0aW9uLmgiCiAjaW5jbHVkZSA8d3Rm
L1Byb2Nlc3NJRC5oPgogI2luY2x1ZGUgPHd0Zi9SZWFkV3JpdGVMb2NrLmg+CkBAIC0yNzksNiAr
MjgwLDcgQEAgVk06OlZNKFZNVHlwZSB2bVR5cGUsIEhlYXBUeXBlIGhlYXBUeXBlKQogICAgICwg
ZGVzdHJ1Y3RpYmxlT2JqZWN0SGVhcENlbGxUeXBlKHN0ZDo6bWFrZV91bmlxdWU8SlNEZXN0cnVj
dGlibGVPYmplY3RIZWFwQ2VsbFR5cGU+KCkpCiAjaWYgRU5BQkxFKFdFQkFTU0VNQkxZKQogICAg
ICwgd2ViQXNzZW1ibHlDb2RlQmxvY2tIZWFwQ2VsbFR5cGUoc3RkOjptYWtlX3VuaXF1ZTxKU1dl
YkFzc2VtYmx5Q29kZUJsb2NrSGVhcENlbGxUeXBlPigpKQorICAgICwgd2ViQXNzZW1ibHlGdW5j
dGlvbkhlYXBDZWxsVHlwZShzdGQ6Om1ha2VfdW5pcXVlPFdlYkFzc2VtYmx5RnVuY3Rpb25IZWFw
Q2VsbFR5cGU+KCkpCiAjZW5kaWYKICAgICAsIHByaW1pdGl2ZUdpZ2FjYWdlQXV4aWxpYXJ5U3Bh
Y2UoIlByaW1pdGl2ZSBHaWdhY2FnZSBBdXhpbGlhcnkiLCBoZWFwLCBhdXhpbGlhcnlIZWFwQ2Vs
bFR5cGUuZ2V0KCksIHByaW1pdGl2ZUdpZ2FjYWdlQWxsb2NhdG9yLmdldCgpKQogICAgICwganNW
YWx1ZUdpZ2FjYWdlQXV4aWxpYXJ5U3BhY2UoIkpTVmFsdWUgR2lnYWNhZ2UgQXV4aWxpYXJ5Iiwg
aGVhcCwgYXV4aWxpYXJ5SGVhcENlbGxUeXBlLmdldCgpLCBqc1ZhbHVlR2lnYWNhZ2VBbGxvY2F0
b3IuZ2V0KCkpCkBAIC0xMjYxLDcgKzEyNjMsNyBAQCBEWU5BTUlDX0lTT19TVUJTUEFDRV9ERUZJ
TkVfTUVNQkVSX1NMT1coCiAjZW5kaWYKICNpZiBFTkFCTEUoV0VCQVNTRU1CTFkpCiBEWU5BTUlD
X0lTT19TVUJTUEFDRV9ERUZJTkVfTUVNQkVSX1NMT1cod2ViQXNzZW1ibHlDb2RlQmxvY2tTcGFj
ZSwgd2ViQXNzZW1ibHlDb2RlQmxvY2tIZWFwQ2VsbFR5cGUuZ2V0KCksIEpTV2ViQXNzZW1ibHlD
b2RlQmxvY2spCi1EWU5BTUlDX0lTT19TVUJTUEFDRV9ERUZJTkVfTUVNQkVSX1NMT1cod2ViQXNz
ZW1ibHlGdW5jdGlvblNwYWNlLCBjZWxsSGVhcENlbGxUeXBlLmdldCgpLCBXZWJBc3NlbWJseUZ1
bmN0aW9uKQorRFlOQU1JQ19JU09fU1VCU1BBQ0VfREVGSU5FX01FTUJFUl9TTE9XKHdlYkFzc2Vt
Ymx5RnVuY3Rpb25TcGFjZSwgd2ViQXNzZW1ibHlGdW5jdGlvbkhlYXBDZWxsVHlwZS5nZXQoKSwg
V2ViQXNzZW1ibHlGdW5jdGlvbikKIERZTkFNSUNfSVNPX1NVQlNQQUNFX0RFRklORV9NRU1CRVJf
U0xPVyh3ZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlvblNwYWNlLCBjZWxsSGVhcENlbGxUeXBlLmdl
dCgpLCBXZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlvbikKICNlbmRpZgogCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL1ZNLmgJKHJldmlzaW9uIDI0Mzc4MCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL1ZNLmgJKHdvcmtpbmcgY29weSkKQEAgLTE1Nyw2ICsxNTcsNyBAQCBj
bGFzcyBWTUVudHJ5U2NvcGU7CiBjbGFzcyBXYXRjaGRvZzsKIGNsYXNzIFdhdGNocG9pbnQ7CiBj
bGFzcyBXYXRjaHBvaW50U2V0OworY2xhc3MgV2ViQXNzZW1ibHlGdW5jdGlvbkhlYXBDZWxsVHlw
ZTsKIAogI2lmIEVOQUJMRShGVExfSklUKQogbmFtZXNwYWNlIEZUTCB7CkBAIC0zMzAsNiArMzMx
LDcgQEAgcHVibGljOgogICAgIHN0ZDo6dW5pcXVlX3B0cjxKU0Rlc3RydWN0aWJsZU9iamVjdEhl
YXBDZWxsVHlwZT4gZGVzdHJ1Y3RpYmxlT2JqZWN0SGVhcENlbGxUeXBlOwogI2lmIEVOQUJMRShX
RUJBU1NFTUJMWSkKICAgICBzdGQ6OnVuaXF1ZV9wdHI8SlNXZWJBc3NlbWJseUNvZGVCbG9ja0hl
YXBDZWxsVHlwZT4gd2ViQXNzZW1ibHlDb2RlQmxvY2tIZWFwQ2VsbFR5cGU7CisgICAgc3RkOjp1
bmlxdWVfcHRyPFdlYkFzc2VtYmx5RnVuY3Rpb25IZWFwQ2VsbFR5cGU+IHdlYkFzc2VtYmx5RnVu
Y3Rpb25IZWFwQ2VsbFR5cGU7CiAjZW5kaWYKICAgICAKICAgICBDb21wbGV0ZVN1YnNwYWNlIHBy
aW1pdGl2ZUdpZ2FjYWdlQXV4aWxpYXJ5U3BhY2U7IC8vIFR5cGVkIGFycmF5cywgc3RyaW5ncywg
Yml0dmVjdG9ycywgZXRjIGdvIGhlcmUuCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2Fz
bS9XYXNtQWlySVJHZW5lcmF0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS93YXNtL1dhc21BaXJJUkdlbmVyYXRvci5jcHAJKHJldmlzaW9uIDI0Mzc4MCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21BaXJJUkdlbmVyYXRvci5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTY4MCwxMCArNjgwLDggQEAgQWlySVJHZW5lcmF0b3I6OkFpcklSR2VuZXJhdG9y
KGNvbnN0IE1vZAogICAgICAgICBtX2NvZGUucGluUmVnaXN0ZXIobV93YXNtQ29udGV4dEluc3Rh
bmNlR1BSKTsKIAogICAgIGlmIChtb2RlICE9IE1lbW9yeU1vZGU6OlNpZ25hbGluZykgewotICAg
ICAgICBBU1NFUlQoIXBpbm5lZFJlZ3Muc2l6ZVJlZ2lzdGVyc1swXS5zaXplT2Zmc2V0KTsKLSAg
ICAgICAgbV9tZW1vcnlTaXplR1BSID0gcGlubmVkUmVncy5zaXplUmVnaXN0ZXJzWzBdLnNpemVS
ZWdpc3RlcjsKLSAgICAgICAgZm9yIChjb25zdCBQaW5uZWRTaXplUmVnaXN0ZXJJbmZvJiByZWdJ
bmZvIDogcGlubmVkUmVncy5zaXplUmVnaXN0ZXJzKQotICAgICAgICAgICAgbV9jb2RlLnBpblJl
Z2lzdGVyKHJlZ0luZm8uc2l6ZVJlZ2lzdGVyKTsKKyAgICAgICAgbV9tZW1vcnlTaXplR1BSID0g
cGlubmVkUmVncy5zaXplUmVnaXN0ZXI7CisgICAgICAgIG1fY29kZS5waW5SZWdpc3RlcihtX21l
bW9yeVNpemVHUFIpOwogICAgIH0KIAogICAgIGlmICh0aHJvd1dhc21FeGNlcHRpb24pCkBAIC04
MjMsOCArODIxLDcgQEAgdm9pZCBBaXJJUkdlbmVyYXRvcjo6cmVzdG9yZVdlYkFzc2VtYmx5Rwog
ICAgICAgICBjb25zdCBQaW5uZWRSZWdpc3RlckluZm8qIHBpbm5lZFJlZ3MgPSAmUGlubmVkUmVn
aXN0ZXJJbmZvOjpnZXQoKTsKICAgICAgICAgUmVnaXN0ZXJTZXQgY2xvYmJlcnM7CiAgICAgICAg
IGNsb2JiZXJzLnNldChwaW5uZWRSZWdzLT5iYXNlTWVtb3J5UG9pbnRlcik7Ci0gICAgICAgIGZv
ciAoYXV0byBpbmZvIDogcGlubmVkUmVncy0+c2l6ZVJlZ2lzdGVycykKLSAgICAgICAgICAgIGNs
b2JiZXJzLnNldChpbmZvLnNpemVSZWdpc3Rlcik7CisgICAgICAgIGNsb2JiZXJzLnNldChwaW5u
ZWRSZWdzLT5zaXplUmVnaXN0ZXIpOwogCiAgICAgICAgIGF1dG8qIHBhdGNocG9pbnQgPSBhZGRQ
YXRjaHBvaW50KEIzOjpWb2lkKTsKICAgICAgICAgQjM6OkVmZmVjdHMgZWZmZWN0cyA9IEIzOjpF
ZmZlY3RzOjpub25lKCk7CkBAIC04MzQsMTQgKzgzMSw4IEBAIHZvaWQgQWlySVJHZW5lcmF0b3I6
OnJlc3RvcmVXZWJBc3NlbWJseUcKICAgICAgICAgcGF0Y2hwb2ludC0+Y2xvYmJlcihjbG9iYmVy
cyk7CiAKICAgICAgICAgcGF0Y2hwb2ludC0+c2V0R2VuZXJhdG9yKFtwaW5uZWRSZWdzXSAoQ0Nh
bGxIZWxwZXJzJiBqaXQsIGNvbnN0IEIzOjpTdGFja21hcEdlbmVyYXRpb25QYXJhbXMmIHBhcmFt
cykgewotICAgICAgICAgICAgR1BSUmVnIGJhc2VNZW1vcnkgPSBwaW5uZWRSZWdzLT5iYXNlTWVt
b3J5UG9pbnRlcjsKLSAgICAgICAgICAgIGNvbnN0IGF1dG8mIHNpemVSZWdzID0gcGlubmVkUmVn
cy0+c2l6ZVJlZ2lzdGVyczsKLSAgICAgICAgICAgIEFTU0VSVChzaXplUmVncy5zaXplKCkgPj0g
MSk7Ci0gICAgICAgICAgICBBU1NFUlQoIXNpemVSZWdzWzBdLnNpemVPZmZzZXQpOyAvLyBUaGUg
Zm9sbG93aW5nIGNvZGUgYXNzdW1lcyB3ZSBzdGFydCBhdCAwLCBhbmQgY2FsY3VsYXRlcyBzdWJz
ZXF1ZW50IHNpemUgcmVnaXN0ZXJzIHJlbGF0aXZlIHRvIDAuCi0gICAgICAgICAgICBqaXQubG9h
ZFB0cihDQ2FsbEhlbHBlcnM6OkFkZHJlc3MocGFyYW1zWzBdLmdwcigpLCBJbnN0YW5jZTo6b2Zm
c2V0T2ZDYWNoZWRNZW1vcnlTaXplKCkpLCBzaXplUmVnc1swXS5zaXplUmVnaXN0ZXIpOwotICAg
ICAgICAgICAgaml0LmxvYWRQdHIoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKHBhcmFtc1swXS5ncHIo
KSwgSW5zdGFuY2U6Om9mZnNldE9mQ2FjaGVkTWVtb3J5KCkpLCBiYXNlTWVtb3J5KTsKLSAgICAg
ICAgICAgIGZvciAodW5zaWduZWQgaSA9IDE7IGkgPCBzaXplUmVncy5zaXplKCk7ICsraSkKLSAg
ICAgICAgICAgICAgICBqaXQuYWRkNjQoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoLXNpemVS
ZWdzW2ldLnNpemVPZmZzZXQpLCBzaXplUmVnc1swXS5zaXplUmVnaXN0ZXIsIHNpemVSZWdzW2ld
LnNpemVSZWdpc3Rlcik7CisgICAgICAgICAgICBqaXQubG9hZFB0cihDQ2FsbEhlbHBlcnM6OkFk
ZHJlc3MocGFyYW1zWzBdLmdwcigpLCBJbnN0YW5jZTo6b2Zmc2V0T2ZDYWNoZWRNZW1vcnlTaXpl
KCkpLCBwaW5uZWRSZWdzLT5zaXplUmVnaXN0ZXIpOworICAgICAgICAgICAgaml0LmxvYWRQdHIo
Q0NhbGxIZWxwZXJzOjpBZGRyZXNzKHBhcmFtc1swXS5ncHIoKSwgSW5zdGFuY2U6Om9mZnNldE9m
Q2FjaGVkTWVtb3J5KCkpLCBwaW5uZWRSZWdzLT5iYXNlTWVtb3J5UG9pbnRlcik7CiAgICAgICAg
IH0pOwogCiAgICAgICAgIGVtaXRQYXRjaHBvaW50KGJsb2NrLCBwYXRjaHBvaW50LCBUbXAoKSwg
aW5zdGFuY2UpOwpAQCAtMTg1NSwxOSArMTg0NiwxNSBAQCBhdXRvIEFpcklSR2VuZXJhdG9yOjph
ZGRDYWxsSW5kaXJlY3QoY29uCiAgICAgICAgICAgICBHUFJSZWcgbmV3Q29udGV4dEluc3RhbmNl
ID0gcGFyYW1zWzBdLmdwcigpOwogICAgICAgICAgICAgR1BSUmVnIG9sZENvbnRleHRJbnN0YW5j
ZSA9IHBhcmFtc1sxXS5ncHIoKTsKICAgICAgICAgICAgIGNvbnN0IFBpbm5lZFJlZ2lzdGVySW5m
byYgcGlubmVkUmVncyA9IFBpbm5lZFJlZ2lzdGVySW5mbzo6Z2V0KCk7Ci0gICAgICAgICAgICBj
b25zdCBhdXRvJiBzaXplUmVncyA9IHBpbm5lZFJlZ3Muc2l6ZVJlZ2lzdGVyczsKICAgICAgICAg
ICAgIEdQUlJlZyBiYXNlTWVtb3J5ID0gcGlubmVkUmVncy5iYXNlTWVtb3J5UG9pbnRlcjsKICAg
ICAgICAgICAgIEFTU0VSVChuZXdDb250ZXh0SW5zdGFuY2UgIT0gYmFzZU1lbW9yeSk7CiAgICAg
ICAgICAgICBqaXQubG9hZFB0cihDQ2FsbEhlbHBlcnM6OkFkZHJlc3Mob2xkQ29udGV4dEluc3Rh
bmNlLCBJbnN0YW5jZTo6b2Zmc2V0T2ZDYWNoZWRTdGFja0xpbWl0KCkpLCBiYXNlTWVtb3J5KTsK
ICAgICAgICAgICAgIGppdC5zdG9yZVB0cihiYXNlTWVtb3J5LCBDQ2FsbEhlbHBlcnM6OkFkZHJl
c3MobmV3Q29udGV4dEluc3RhbmNlLCBJbnN0YW5jZTo6b2Zmc2V0T2ZDYWNoZWRTdGFja0xpbWl0
KCkpKTsKICAgICAgICAgICAgIGppdC5zdG9yZVdhc21Db250ZXh0SW5zdGFuY2UobmV3Q29udGV4
dEluc3RhbmNlKTsKLSAgICAgICAgICAgIEFTU0VSVChzaXplUmVnc1swXS5zaXplUmVnaXN0ZXIg
IT0gYmFzZU1lbW9yeSk7CiAgICAgICAgICAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIHN1cHBvcnQg
bW9yZSB0aGFuIG9uZSBtZW1vcnkgc2l6ZSByZWdpc3RlcgogICAgICAgICAgICAgLy8gICBzZWU6
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjI5NTIKLSAgICAgICAg
ICAgIEFTU0VSVChzaXplUmVncy5zaXplKCkgPT0gMSk7Ci0gICAgICAgICAgICBBU1NFUlQoc2l6
ZVJlZ3NbMF0uc2l6ZVJlZ2lzdGVyICE9IG5ld0NvbnRleHRJbnN0YW5jZSk7Ci0gICAgICAgICAg
ICBBU1NFUlQoIXNpemVSZWdzWzBdLnNpemVPZmZzZXQpOwotICAgICAgICAgICAgaml0LmxvYWRQ
dHIoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKG5ld0NvbnRleHRJbnN0YW5jZSwgSW5zdGFuY2U6Om9m
ZnNldE9mQ2FjaGVkTWVtb3J5U2l6ZSgpKSwgc2l6ZVJlZ3NbMF0uc2l6ZVJlZ2lzdGVyKTsgLy8g
TWVtb3J5IHNpemUuCisgICAgICAgICAgICBBU1NFUlQocGlubmVkUmVncy5zaXplUmVnaXN0ZXIg
IT0gbmV3Q29udGV4dEluc3RhbmNlKTsKKyAgICAgICAgICAgIGppdC5sb2FkUHRyKENDYWxsSGVs
cGVyczo6QWRkcmVzcyhuZXdDb250ZXh0SW5zdGFuY2UsIEluc3RhbmNlOjpvZmZzZXRPZkNhY2hl
ZE1lbW9yeVNpemUoKSksIHBpbm5lZFJlZ3Muc2l6ZVJlZ2lzdGVyKTsgLy8gTWVtb3J5IHNpemUu
CiAgICAgICAgICAgICBqaXQubG9hZFB0cihDQ2FsbEhlbHBlcnM6OkFkZHJlc3MobmV3Q29udGV4
dEluc3RhbmNlLCBJbnN0YW5jZTo6b2Zmc2V0T2ZDYWNoZWRNZW1vcnkoKSksIGJhc2VNZW1vcnkp
OyAvLyBNZW1vcnk6OnZvaWQqLgogICAgICAgICB9KTsKIApJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL3dhc20vV2FzbUIzSVJHZW5lcmF0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS93YXNtL1dhc21CM0lSR2VuZXJhdG9yLmNwcAkocmV2aXNpb24gMjQzNzgw
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUIzSVJHZW5lcmF0b3IuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0zNDYsMTAgKzM0Niw4IEBAIEIzSVJHZW5lcmF0b3I6OkIzSVJHZW5l
cmF0b3IoY29uc3QgTW9kdWwKICAgICAgICAgbV9wcm9jLnBpblJlZ2lzdGVyKG1fd2FzbUNvbnRl
eHRJbnN0YW5jZUdQUik7CiAKICAgICBpZiAobW9kZSAhPSBNZW1vcnlNb2RlOjpTaWduYWxpbmcp
IHsKLSAgICAgICAgQVNTRVJUKCFwaW5uZWRSZWdzLnNpemVSZWdpc3RlcnNbMF0uc2l6ZU9mZnNl
dCk7Ci0gICAgICAgIG1fbWVtb3J5U2l6ZUdQUiA9IHBpbm5lZFJlZ3Muc2l6ZVJlZ2lzdGVyc1sw
XS5zaXplUmVnaXN0ZXI7Ci0gICAgICAgIGZvciAoY29uc3QgUGlubmVkU2l6ZVJlZ2lzdGVySW5m
byYgcmVnSW5mbyA6IHBpbm5lZFJlZ3Muc2l6ZVJlZ2lzdGVycykKLSAgICAgICAgICAgIG1fcHJv
Yy5waW5SZWdpc3RlcihyZWdJbmZvLnNpemVSZWdpc3Rlcik7CisgICAgICAgIG1fbWVtb3J5U2l6
ZUdQUiA9IHBpbm5lZFJlZ3Muc2l6ZVJlZ2lzdGVyOworICAgICAgICBtX3Byb2MucGluUmVnaXN0
ZXIobV9tZW1vcnlTaXplR1BSKTsKICAgICB9CiAKICAgICBpZiAodGhyb3dXYXNtRXhjZXB0aW9u
KQpAQCAtNDY5LDggKzQ2Nyw3IEBAIHZvaWQgQjNJUkdlbmVyYXRvcjo6cmVzdG9yZVdlYkFzc2Vt
Ymx5R2wKICAgICAgICAgY29uc3QgUGlubmVkUmVnaXN0ZXJJbmZvKiBwaW5uZWRSZWdzID0gJlBp
bm5lZFJlZ2lzdGVySW5mbzo6Z2V0KCk7CiAgICAgICAgIFJlZ2lzdGVyU2V0IGNsb2JiZXJzOwog
ICAgICAgICBjbG9iYmVycy5zZXQocGlubmVkUmVncy0+YmFzZU1lbW9yeVBvaW50ZXIpOwotICAg
ICAgICBmb3IgKGF1dG8gaW5mbyA6IHBpbm5lZFJlZ3MtPnNpemVSZWdpc3RlcnMpCi0gICAgICAg
ICAgICBjbG9iYmVycy5zZXQoaW5mby5zaXplUmVnaXN0ZXIpOworICAgICAgICBjbG9iYmVycy5z
ZXQocGlubmVkUmVncy0+c2l6ZVJlZ2lzdGVyKTsKIAogICAgICAgICBCMzo6UGF0Y2hwb2ludFZh
bHVlKiBwYXRjaHBvaW50ID0gYmxvY2stPmFwcGVuZE5ldzxCMzo6UGF0Y2hwb2ludFZhbHVlPihw
cm9jLCBCMzo6Vm9pZCwgb3JpZ2luKCkpOwogICAgICAgICBFZmZlY3RzIGVmZmVjdHMgPSBFZmZl
Y3RzOjpub25lKCk7CkBAIC00ODMsMTMgKzQ4MCw4IEBAIHZvaWQgQjNJUkdlbmVyYXRvcjo6cmVz
dG9yZVdlYkFzc2VtYmx5R2wKIAogICAgICAgICBwYXRjaHBvaW50LT5zZXRHZW5lcmF0b3IoW3Bp
bm5lZFJlZ3NdIChDQ2FsbEhlbHBlcnMmIGppdCwgY29uc3QgQjM6OlN0YWNrbWFwR2VuZXJhdGlv
blBhcmFtcyYgcGFyYW1zKSB7CiAgICAgICAgICAgICBHUFJSZWcgYmFzZU1lbW9yeSA9IHBpbm5l
ZFJlZ3MtPmJhc2VNZW1vcnlQb2ludGVyOwotICAgICAgICAgICAgY29uc3QgYXV0byYgc2l6ZVJl
Z3MgPSBwaW5uZWRSZWdzLT5zaXplUmVnaXN0ZXJzOwotICAgICAgICAgICAgQVNTRVJUKHNpemVS
ZWdzLnNpemUoKSA+PSAxKTsKLSAgICAgICAgICAgIEFTU0VSVCghc2l6ZVJlZ3NbMF0uc2l6ZU9m
ZnNldCk7IC8vIFRoZSBmb2xsb3dpbmcgY29kZSBhc3N1bWVzIHdlIHN0YXJ0IGF0IDAsIGFuZCBj
YWxjdWxhdGVzIHN1YnNlcXVlbnQgc2l6ZSByZWdpc3RlcnMgcmVsYXRpdmUgdG8gMC4KLSAgICAg
ICAgICAgIGppdC5sb2FkUHRyKENDYWxsSGVscGVyczo6QWRkcmVzcyhwYXJhbXNbMF0uZ3ByKCks
IEluc3RhbmNlOjpvZmZzZXRPZkNhY2hlZE1lbW9yeVNpemUoKSksIHNpemVSZWdzWzBdLnNpemVS
ZWdpc3Rlcik7CisgICAgICAgICAgICBqaXQubG9hZFB0cihDQ2FsbEhlbHBlcnM6OkFkZHJlc3Mo
cGFyYW1zWzBdLmdwcigpLCBJbnN0YW5jZTo6b2Zmc2V0T2ZDYWNoZWRNZW1vcnlTaXplKCkpLCBw
aW5uZWRSZWdzLT5zaXplUmVnaXN0ZXIpOwogICAgICAgICAgICAgaml0LmxvYWRQdHIoQ0NhbGxI
ZWxwZXJzOjpBZGRyZXNzKHBhcmFtc1swXS5ncHIoKSwgSW5zdGFuY2U6Om9mZnNldE9mQ2FjaGVk
TWVtb3J5KCkpLCBiYXNlTWVtb3J5KTsKLSAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDE7
IGkgPCBzaXplUmVncy5zaXplKCk7ICsraSkKLSAgICAgICAgICAgICAgICBqaXQuYWRkNjQoQ0Nh
bGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoLXNpemVSZWdzW2ldLnNpemVPZmZzZXQpLCBzaXplUmVn
c1swXS5zaXplUmVnaXN0ZXIsIHNpemVSZWdzW2ldLnNpemVSZWdpc3Rlcik7CiAgICAgICAgIH0p
OwogICAgIH0KIH0KQEAgLTEyODIsMTkgKzEyNzQsMTYgQEAgYXV0byBCM0lSR2VuZXJhdG9yOjph
ZGRDYWxsSW5kaXJlY3QoY29ucwogICAgICAgICAgICAgR1BSUmVnIG5ld0NvbnRleHRJbnN0YW5j
ZSA9IHBhcmFtc1swXS5ncHIoKTsKICAgICAgICAgICAgIEdQUlJlZyBvbGRDb250ZXh0SW5zdGFu
Y2UgPSBwYXJhbXNbMV0uZ3ByKCk7CiAgICAgICAgICAgICBjb25zdCBQaW5uZWRSZWdpc3Rlcklu
Zm8mIHBpbm5lZFJlZ3MgPSBQaW5uZWRSZWdpc3RlckluZm86OmdldCgpOwotICAgICAgICAgICAg
Y29uc3QgYXV0byYgc2l6ZVJlZ3MgPSBwaW5uZWRSZWdzLnNpemVSZWdpc3RlcnM7CiAgICAgICAg
ICAgICBHUFJSZWcgYmFzZU1lbW9yeSA9IHBpbm5lZFJlZ3MuYmFzZU1lbW9yeVBvaW50ZXI7CiAg
ICAgICAgICAgICBBU1NFUlQobmV3Q29udGV4dEluc3RhbmNlICE9IGJhc2VNZW1vcnkpOwogICAg
ICAgICAgICAgaml0LmxvYWRQdHIoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKG9sZENvbnRleHRJbnN0
YW5jZSwgSW5zdGFuY2U6Om9mZnNldE9mQ2FjaGVkU3RhY2tMaW1pdCgpKSwgYmFzZU1lbW9yeSk7
CiAgICAgICAgICAgICBqaXQuc3RvcmVQdHIoYmFzZU1lbW9yeSwgQ0NhbGxIZWxwZXJzOjpBZGRy
ZXNzKG5ld0NvbnRleHRJbnN0YW5jZSwgSW5zdGFuY2U6Om9mZnNldE9mQ2FjaGVkU3RhY2tMaW1p
dCgpKSk7CiAgICAgICAgICAgICBqaXQuc3RvcmVXYXNtQ29udGV4dEluc3RhbmNlKG5ld0NvbnRl
eHRJbnN0YW5jZSk7Ci0gICAgICAgICAgICBBU1NFUlQoc2l6ZVJlZ3NbMF0uc2l6ZVJlZ2lzdGVy
ICE9IGJhc2VNZW1vcnkpOworICAgICAgICAgICAgQVNTRVJUKHBpbm5lZFJlZ3Muc2l6ZVJlZ2lz
dGVyICE9IGJhc2VNZW1vcnkpOwogICAgICAgICAgICAgLy8gRklYTUU6IFdlIHNob3VsZCBzdXBw
b3J0IG1vcmUgdGhhbiBvbmUgbWVtb3J5IHNpemUgcmVnaXN0ZXIKICAgICAgICAgICAgIC8vICAg
c2VlOiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTYyOTUyCi0gICAg
ICAgICAgICBBU1NFUlQoc2l6ZVJlZ3Muc2l6ZSgpID09IDEpOwotICAgICAgICAgICAgQVNTRVJU
KHNpemVSZWdzWzBdLnNpemVSZWdpc3RlciAhPSBuZXdDb250ZXh0SW5zdGFuY2UpOwotICAgICAg
ICAgICAgQVNTRVJUKCFzaXplUmVnc1swXS5zaXplT2Zmc2V0KTsKLSAgICAgICAgICAgIGppdC5s
b2FkUHRyKENDYWxsSGVscGVyczo6QWRkcmVzcyhuZXdDb250ZXh0SW5zdGFuY2UsIEluc3RhbmNl
OjpvZmZzZXRPZkNhY2hlZE1lbW9yeVNpemUoKSksIHNpemVSZWdzWzBdLnNpemVSZWdpc3Rlcik7
IC8vIE1lbW9yeSBzaXplLgorICAgICAgICAgICAgQVNTRVJUKHBpbm5lZFJlZ3Muc2l6ZVJlZ2lz
dGVyICE9IG5ld0NvbnRleHRJbnN0YW5jZSk7CisgICAgICAgICAgICBqaXQubG9hZFB0cihDQ2Fs
bEhlbHBlcnM6OkFkZHJlc3MobmV3Q29udGV4dEluc3RhbmNlLCBJbnN0YW5jZTo6b2Zmc2V0T2ZD
YWNoZWRNZW1vcnlTaXplKCkpLCBwaW5uZWRSZWdzLnNpemVSZWdpc3Rlcik7IC8vIE1lbW9yeSBz
aXplLgogICAgICAgICAgICAgaml0LmxvYWRQdHIoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKG5ld0Nv
bnRleHRJbnN0YW5jZSwgSW5zdGFuY2U6Om9mZnNldE9mQ2FjaGVkTWVtb3J5KCkpLCBiYXNlTWVt
b3J5KTsgLy8gTWVtb3J5Ojp2b2lkKi4KICAgICAgICAgfSk7CiAgICAgICAgIGRvQ29udGV4dFN3
aXRjaC0+YXBwZW5kTmV3Q29udHJvbFZhbHVlKG1fcHJvYywgSnVtcCwgb3JpZ2luKCksIGNvbnRp
bnVhdGlvbik7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQmluZGluZy5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUJpbmRpbmcu
Y3BwCShyZXZpc2lvbiAyNDM3ODApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNt
QmluZGluZy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ4LDExICs0OCw5IEBAIEV4cGVjdGVkPE1h
Y3JvQXNzZW1ibGVyQ29kZVJlZjxXYXNtRW50cnkKICAgICBHUFJSZWcgc2NyYXRjaCA9IEdQUklu
Zm86Om5vblByZXNlcnZlZE5vbkFyZ3VtZW50R1BSMDsKICAgICBHUFJSZWcgYmFzZU1lbW9yeSA9
IHBpbm5lZFJlZ3MuYmFzZU1lbW9yeVBvaW50ZXI7CiAgICAgQVNTRVJUKGJhc2VNZW1vcnkgIT0g
c2NyYXRjaCk7Ci0gICAgY29uc3QgYXV0byYgc2l6ZVJlZ3MgPSBwaW5uZWRSZWdzLnNpemVSZWdp
c3RlcnM7Ci0gICAgQVNTRVJUKHNpemVSZWdzLnNpemUoKSA+PSAxKTsKLSAgICBBU1NFUlQoc2l6
ZVJlZ3NbMF0uc2l6ZVJlZ2lzdGVyICE9IGJhc2VNZW1vcnkpOwotICAgIEFTU0VSVChzaXplUmVn
c1swXS5zaXplUmVnaXN0ZXIgIT0gc2NyYXRjaCk7Ci0gICAgR1BSUmVnIHNpemVSZWdBc1NjcmF0
Y2ggPSBzaXplUmVnc1swXS5zaXplUmVnaXN0ZXI7CisgICAgQVNTRVJUKHBpbm5lZFJlZ3Muc2l6
ZVJlZ2lzdGVyICE9IGJhc2VNZW1vcnkpOworICAgIEFTU0VSVChwaW5uZWRSZWdzLnNpemVSZWdp
c3RlciAhPSBzY3JhdGNoKTsKKyAgICBHUFJSZWcgc2l6ZVJlZ0FzU2NyYXRjaCA9IHBpbm5lZFJl
Z3Muc2l6ZVJlZ2lzdGVyOwogCiAgICAgLy8gQjMncyBjYWxsIGNvZGVnZW4gZW5zdXJlcyB0aGF0
IHRoZSBKU0NlbGwgaXMgYSBXZWJBc3NlbWJseUZ1bmN0aW9uLgogICAgIGppdC5sb2FkV2FzbUNv
bnRleHRJbnN0YW5jZShzaXplUmVnQXNTY3JhdGNoKTsgLy8gT2xkIEluc3RhbmNlKgpAQCAtNjcs
MTQgKzY1LDggQEAgRXhwZWN0ZWQ8TWFjcm9Bc3NlbWJsZXJDb2RlUmVmPFdhc21FbnRyeQogCiAg
ICAgLy8gRklYTUUgdGhlIGZvbGxvd2luZyBjb2RlIGFzc3VtZXMgdGhhdCBhbGwgV2FzbTo6SW5z
dGFuY2UgaGF2ZSB0aGUgc2FtZSBwaW5uZWQgcmVnaXN0ZXJzLiBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTYyOTUyCiAgICAgLy8gU2V0IHVwIHRoZSBjYWxsZWUncyBi
YXNlTWVtb3J5IHJlZ2lzdGVyIGFzIHdlbGwgYXMgdGhlIG1lbW9yeSBzaXplIHJlZ2lzdGVycy4K
LSAgICBBU1NFUlQoIXNpemVSZWdzWzBdLnNpemVPZmZzZXQpOyAvLyBUaGUgZm9sbG93aW5nIGNv
ZGUgYXNzdW1lcyB3ZSBzdGFydCBhdCAwLCBhbmQgY2FsY3VsYXRlcyBzdWJzZXF1ZW50IHNpemUg
cmVnaXN0ZXJzIHJlbGF0aXZlIHRvIDAuCi0gICAgaml0LmxvYWRQdHIoSklUOjpBZGRyZXNzKGJh
c2VNZW1vcnksIFdhc206Okluc3RhbmNlOjpvZmZzZXRPZkNhY2hlZE1lbW9yeVNpemUoKSksIHNp
emVSZWdzWzBdLnNpemVSZWdpc3Rlcik7IC8vIE1lbW9yeSBzaXplLgorICAgIGppdC5sb2FkUHRy
KEpJVDo6QWRkcmVzcyhiYXNlTWVtb3J5LCBXYXNtOjpJbnN0YW5jZTo6b2Zmc2V0T2ZDYWNoZWRN
ZW1vcnlTaXplKCkpLCBwaW5uZWRSZWdzLnNpemVSZWdpc3Rlcik7IC8vIE1lbW9yeSBzaXplLgog
ICAgIGppdC5sb2FkUHRyKEpJVDo6QWRkcmVzcyhiYXNlTWVtb3J5LCBXYXNtOjpJbnN0YW5jZTo6
b2Zmc2V0T2ZDYWNoZWRNZW1vcnkoKSksIGJhc2VNZW1vcnkpOyAvLyBXYXNtOjpNZW1vcnk6OnZv
aWQqLgotICAgIGZvciAodW5zaWduZWQgaSA9IDE7IGkgPCBzaXplUmVncy5zaXplKCk7ICsraSkg
ewotICAgICAgICBBU1NFUlQoc2l6ZVJlZ3NbaV0uc2l6ZVJlZ2lzdGVyICE9IGJhc2VNZW1vcnkp
OwotICAgICAgICBBU1NFUlQoc2l6ZVJlZ3NbaV0uc2l6ZVJlZ2lzdGVyICE9IHNjcmF0Y2gpOwot
ICAgICAgICBqaXQuYWRkNjQoSklUOjpUcnVzdGVkSW1tMzIoLXNpemVSZWdzW2ldLnNpemVPZmZz
ZXQpLCBzaXplUmVnc1swXS5zaXplUmVnaXN0ZXIsIHNpemVSZWdzW2ldLnNpemVSZWdpc3Rlcik7
Ci0gICAgfQogCiAgICAgLy8gVGFpbCBjYWxsIGludG8gdGhlIGNhbGxlZSBXZWJBc3NlbWJseSBm
dW5jdGlvbi4KICAgICBqaXQubG9hZFB0cihzY3JhdGNoLCBzY3JhdGNoKTsKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21Db250ZXh0LmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUNvbnRleHQuaAkocmV2aXNpb24gMjQzNzgwKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUNvbnRleHQuaAkod29ya2luZyBjb3B5KQpA
QCAtMzIsMTIgKzMyLDE5IEBAIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgV2FzbSB7CiBjbGFz
cyBJbnN0YW5jZTsKIAogc3RydWN0IENvbnRleHQgewotICAgIEluc3RhbmNlKiBpbnN0YW5jZSB7
IG51bGxwdHIgfTsKLQogICAgIEluc3RhbmNlKiBsb2FkKCkgY29uc3Q7CiAgICAgdm9pZCBzdG9y
ZShJbnN0YW5jZSosIHZvaWQqIHNvZnRTdGFja0xpbWl0KTsKIAogICAgIHN0YXRpYyBib29sIHVz
ZUZhc3RUTFMoKTsKKworICAgIEluc3RhbmNlKiogcG9pbnRlclRvSW5zdGFuY2UoKQorICAgIHsK
KyAgICAgICAgQVNTRVJUKCF1c2VGYXN0VExTKCkpOworICAgICAgICByZXR1cm4gJmluc3RhbmNl
OworICAgIH0KKworcHJpdmF0ZToKKyAgICBJbnN0YW5jZSogaW5zdGFuY2UgeyBudWxscHRyIH07
CiB9OwogCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6V2FzbQpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL3dhc20vV2FzbUNvbnRleHRJbmxpbmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL3dhc20vV2FzbUNvbnRleHRJbmxpbmVzLmgJKHJldmlzaW9uIDI0Mzc4MCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21Db250ZXh0SW5saW5lcy5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC01NSwxMyArNTUsMTUgQEAgaW5saW5lIEluc3RhbmNlKiBDb250ZXh0Ojps
b2FkKCkgY29uc3QKIAogaW5saW5lIHZvaWQgQ29udGV4dDo6c3RvcmUoSW5zdGFuY2UqIGluc3Qs
IHZvaWQqIHNvZnRTdGFja0xpbWl0KQogeworICAgIGlmIChpbnN0KQorICAgICAgICBpbnN0LT5z
ZXRDYWNoZWRTdGFja0xpbWl0KHNvZnRTdGFja0xpbWl0KTsKKwogI2lmIEVOQUJMRShGQVNUX1RM
U19KSVQpCiAgICAgaWYgKHVzZUZhc3RUTFMoKSkKICAgICAgICAgX3B0aHJlYWRfc2V0c3BlY2lm
aWNfZGlyZWN0KFdURl9XQVNNX0NPTlRFWFRfS0VZLCBiaXR3aXNlX2Nhc3Q8dm9pZCo+KGluc3Qp
KTsKKyAgICBlbHNlCiAjZW5kaWYKLSAgICBpbnN0YW5jZSA9IGluc3Q7Ci0gICAgaWYgKGluc3Rh
bmNlKQotICAgICAgICBpbnN0YW5jZS0+c2V0Q2FjaGVkU3RhY2tMaW1pdChzb2Z0U3RhY2tMaW1p
dCk7CisgICAgICAgIGluc3RhbmNlID0gaW5zdDsKIH0KIAogfSB9IC8vIG5hbWVzcGFjZSBKU0M6
Oldhc20KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21NZW1vcnlJbmZvcm1h
dGlvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU1l
bW9yeUluZm9ybWF0aW9uLmNwcAkocmV2aXNpb24gMjQzNzgwKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL3dhc20vV2FzbU1lbW9yeUluZm9ybWF0aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NDQsNiArNDQsMTEgQEAgc3RhdGljIFZlY3RvcjxHUFJSZWc+IGdldFBpbm5lZFJlZ2lzdGVycwog
ICAgICAgICBHUFJSZWcgZ3ByID0gcmVnLmdwcigpOwogICAgICAgICBpZiAoIXJlbWFpbmluZ1Bp
bm5lZFJlZ2lzdGVycyB8fCBSZWdpc3RlclNldDo6c3RhY2tSZWdpc3RlcnMoKS5nZXQocmVnKSkK
ICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgaWYgKFJlZ2lzdGVyU2V0OjpydW50aW1lVGFn
UmVnaXN0ZXJzKCkuZ2V0KHJlZykpIHsKKyAgICAgICAgICAgIC8vIFNpbmNlIHdlIGRvbid0IG5l
ZWQgdG8sIHdlIGN1cnJlbnRseSBkb24ndCBwaWNrIGZyb20gdGhlIHRhZyByZWdpc3RlcnMgdG8g
YWxsb3cKKyAgICAgICAgICAgIC8vIEpTLT5XYXNtIHN0dWJzIHRvIGZyZWVseSB1c2UgdGhlc2Ug
cmVnaXN0ZXJzLgorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CiAgICAgICAgIC0tcmVt
YWluaW5nUGlubmVkUmVnaXN0ZXJzOwogICAgICAgICByZWdpc3RlcnMuYXBwZW5kKGdwcik7CiAg
ICAgfSk7CkBAIC01NSwzNSArNjAsMjUgQEAgY29uc3QgUGlubmVkUmVnaXN0ZXJJbmZvJiBQaW5u
ZWRSZWdpc3RlcgogICAgIHN0YXRpYyBMYXp5TmV2ZXJEZXN0cm95ZWQ8UGlubmVkUmVnaXN0ZXJJ
bmZvPiBzdGF0aWNQaW5uZWRSZWdpc3RlckluZm87CiAgICAgc3RhdGljIHN0ZDo6b25jZV9mbGFn
IHN0YXRpY1Bpbm5lZFJlZ2lzdGVySW5mb0ZsYWc7CiAgICAgc3RkOjpjYWxsX29uY2Uoc3RhdGlj
UGlubmVkUmVnaXN0ZXJJbmZvRmxhZywgW10gKCkgewotICAgICAgICBWZWN0b3I8UGlubmVkU2l6
ZVJlZ2lzdGVySW5mbz4gc2l6ZVJlZ2lzdGVyczsKLSAgICAgICAgR1BSUmVnIGJhc2VNZW1vcnlQ
b2ludGVyID0gSW52YWxpZEdQUlJlZzsKLSAgICAgICAgR1BSUmVnIHdhc21Db250ZXh0SW5zdGFu
Y2VQb2ludGVyID0gSW52YWxpZEdQUlJlZzsKLQotICAgICAgICAvLyBGSVhNRTogV2Ugc2hvdWxk
IHN1cHBvcnQgbW9yZSB0aGFuIG9uZSBtZW1vcnkgc2l6ZSByZWdpc3RlciwgYW5kIHdlIHNob3Vs
ZCBhbGxvdyBkaWZmZXJlbnQKLSAgICAgICAgLy8gICAgICAgIFdlYkFzc2VtYmx5Lkluc3RhbmNl
IHRvIGhhdmUgZGlmZmVyZW50IHBpbnMuIFJpZ2h0IG5vdyB3ZSB0YWtlIGEgdmVjdG9yIHdpdGgg
b25seSBvbmUgZW50cnkuCi0gICAgICAgIC8vICAgICAgICBJZiB3ZSBoYXZlIG1vcmUgdGhhbiBv
bmUgc2l6ZSByZWdpc3Rlciwgd2UgY2FuIGhhdmUgb25lIGZvciBlYWNoIGxvYWQgc2l6ZSBjbGFz
cy4KLSAgICAgICAgLy8gICAgICAgIHNlZTogaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTE2Mjk1MgotICAgICAgICBWZWN0b3I8dW5zaWduZWQ+IHBpbm5lZFNpemVzID0g
eyAwIH07Ci0gICAgICAgIHVuc2lnbmVkIG51bWJlck9mUGlubmVkUmVnaXN0ZXJzID0gcGlubmVk
U2l6ZXMuc2l6ZSgpICsgMTsKKyAgICAgICAgdW5zaWduZWQgbnVtYmVyT2ZQaW5uZWRSZWdpc3Rl
cnMgPSAyOwogICAgICAgICBpZiAoIUNvbnRleHQ6OnVzZUZhc3RUTFMoKSkKICAgICAgICAgICAg
ICsrbnVtYmVyT2ZQaW5uZWRSZWdpc3RlcnM7CiAgICAgICAgIFZlY3RvcjxHUFJSZWc+IHBpbm5l
ZFJlZ3MgPSBnZXRQaW5uZWRSZWdpc3RlcnMobnVtYmVyT2ZQaW5uZWRSZWdpc3RlcnMpOwogCi0g
ICAgICAgIGJhc2VNZW1vcnlQb2ludGVyID0gcGlubmVkUmVncy50YWtlTGFzdCgpOworICAgICAg
ICBHUFJSZWcgYmFzZU1lbW9yeVBvaW50ZXIgPSBwaW5uZWRSZWdzLnRha2VMYXN0KCk7CisgICAg
ICAgIEdQUlJlZyBzaXplUmVnaXN0ZXIgPSBwaW5uZWRSZWdzLnRha2VMYXN0KCk7CisgICAgICAg
IEdQUlJlZyB3YXNtQ29udGV4dEluc3RhbmNlUG9pbnRlciA9IEludmFsaWRHUFJSZWc7CiAgICAg
ICAgIGlmICghQ29udGV4dDo6dXNlRmFzdFRMUygpKQogICAgICAgICAgICAgd2FzbUNvbnRleHRJ
bnN0YW5jZVBvaW50ZXIgPSBwaW5uZWRSZWdzLnRha2VMYXN0KCk7CiAKLSAgICAgICAgQVNTRVJU
KHBpbm5lZFNpemVzLnNpemUoKSA9PSBwaW5uZWRSZWdzLnNpemUoKSk7Ci0gICAgICAgIGZvciAo
dW5zaWduZWQgaSA9IDA7IGkgPCBwaW5uZWRTaXplcy5zaXplKCk7ICsraSkKLSAgICAgICAgICAg
IHNpemVSZWdpc3RlcnMuYXBwZW5kKHsgcGlubmVkUmVnc1tpXSwgcGlubmVkU2l6ZXNbaV0gfSk7
Ci0gICAgICAgIHN0YXRpY1Bpbm5lZFJlZ2lzdGVySW5mby5jb25zdHJ1Y3QoV1RGTW92ZShzaXpl
UmVnaXN0ZXJzKSwgYmFzZU1lbW9yeVBvaW50ZXIsIHdhc21Db250ZXh0SW5zdGFuY2VQb2ludGVy
KTsKKyAgICAgICAgc3RhdGljUGlubmVkUmVnaXN0ZXJJbmZvLmNvbnN0cnVjdChzaXplUmVnaXN0
ZXIsIGJhc2VNZW1vcnlQb2ludGVyLCB3YXNtQ29udGV4dEluc3RhbmNlUG9pbnRlcik7CiAgICAg
fSk7CiAKICAgICByZXR1cm4gc3RhdGljUGlubmVkUmVnaXN0ZXJJbmZvLmdldCgpOwogfQogCi1Q
aW5uZWRSZWdpc3RlckluZm86OlBpbm5lZFJlZ2lzdGVySW5mbyhWZWN0b3I8UGlubmVkU2l6ZVJl
Z2lzdGVySW5mbz4mJiBzaXplUmVnaXN0ZXJzLCBHUFJSZWcgYmFzZU1lbW9yeVBvaW50ZXIsIEdQ
UlJlZyB3YXNtQ29udGV4dEluc3RhbmNlUG9pbnRlcikKLSAgICA6IHNpemVSZWdpc3RlcnMoV1RG
TW92ZShzaXplUmVnaXN0ZXJzKSkKK1Bpbm5lZFJlZ2lzdGVySW5mbzo6UGlubmVkUmVnaXN0ZXJJ
bmZvKEdQUlJlZyBzaXplUmVnaXN0ZXIsIEdQUlJlZyBiYXNlTWVtb3J5UG9pbnRlciwgR1BSUmVn
IHdhc21Db250ZXh0SW5zdGFuY2VQb2ludGVyKQorICAgIDogc2l6ZVJlZ2lzdGVyKHNpemVSZWdp
c3RlcikKICAgICAsIGJhc2VNZW1vcnlQb2ludGVyKGJhc2VNZW1vcnlQb2ludGVyKQogICAgICwg
d2FzbUNvbnRleHRJbnN0YW5jZVBvaW50ZXIod2FzbUNvbnRleHRJbnN0YW5jZVBvaW50ZXIpCiB7
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTWVtb3J5SW5mb3JtYXRpb24u
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTWVtb3J5SW5m
b3JtYXRpb24uaAkocmV2aXNpb24gMjQzNzgwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3dh
c20vV2FzbU1lbW9yeUluZm9ybWF0aW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ1LDcgKzQ1LDcg
QEAgc3RydWN0IFBpbm5lZFNpemVSZWdpc3RlckluZm8gewogCiBjbGFzcyBQaW5uZWRSZWdpc3Rl
ckluZm8gewogcHVibGljOgotICAgIFBpbm5lZFJlZ2lzdGVySW5mbyhWZWN0b3I8UGlubmVkU2l6
ZVJlZ2lzdGVySW5mbz4mJiwgR1BSUmVnLCBHUFJSZWcpOworICAgIFBpbm5lZFJlZ2lzdGVySW5m
byhHUFJSZWcsIEdQUlJlZywgR1BSUmVnKTsKIAogICAgIHN0YXRpYyBjb25zdCBQaW5uZWRSZWdp
c3RlckluZm8mIGdldCgpOwogCkBAIC01NSwxNCArNTUsMTIgQEAgcHVibGljOgogICAgICAgICBy
ZXN1bHQuc2V0KGJhc2VNZW1vcnlQb2ludGVyKTsKICAgICAgICAgaWYgKHdhc21Db250ZXh0SW5z
dGFuY2VQb2ludGVyICE9IEludmFsaWRHUFJSZWcpCiAgICAgICAgICAgICByZXN1bHQuc2V0KHdh
c21Db250ZXh0SW5zdGFuY2VQb2ludGVyKTsKLSAgICAgICAgaWYgKG1vZGUgIT0gTWVtb3J5TW9k
ZTo6U2lnbmFsaW5nKSB7Ci0gICAgICAgICAgICBmb3IgKGNvbnN0IGF1dG8mIGluZm8gOiBzaXpl
UmVnaXN0ZXJzKQotICAgICAgICAgICAgICAgIHJlc3VsdC5zZXQoaW5mby5zaXplUmVnaXN0ZXIp
OwotICAgICAgICB9CisgICAgICAgIGlmIChtb2RlICE9IE1lbW9yeU1vZGU6OlNpZ25hbGluZykK
KyAgICAgICAgICAgIHJlc3VsdC5zZXQoc2l6ZVJlZ2lzdGVyKTsKICAgICAgICAgcmV0dXJuIHJl
c3VsdDsKICAgICB9CiAKLSAgICBWZWN0b3I8UGlubmVkU2l6ZVJlZ2lzdGVySW5mbz4gc2l6ZVJl
Z2lzdGVyczsKKyAgICBHUFJSZWcgc2l6ZVJlZ2lzdGVyOwogICAgIEdQUlJlZyBiYXNlTWVtb3J5
UG9pbnRlcjsKICAgICBHUFJSZWcgd2FzbUNvbnRleHRJbnN0YW5jZVBvaW50ZXI7CiB9OwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU9NR1BsYW4uY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21PTUdQbGFuLmNwcAkocmV2aXNpb24g
MjQzNzgwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU9NR1BsYW4uY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0xMzgsNyArMTM4LDcgQEAgdm9pZCBPTUdQbGFuOjp3b3JrKENvbXBp
bGF0aW9uRWZmb3J0KQogICAgIHsKICAgICAgICAgTG9ja0hvbGRlciBob2xkZXIobV9jb2RlQmxv
Y2stPm1fbG9jayk7CiAKLSAgICAgICAgYXV0byByZXBhdGNoQ2FsbHMgPSBbJl0gKGNvbnN0IFZl
Y3RvcjxVbmxpbmtlZFdhc21Ub1dhc21DYWxsPiYgIGNhbGxzaXRlcykgeworICAgICAgICBhdXRv
IHJlcGF0Y2hDYWxscyA9IFsmXSAoY29uc3QgVmVjdG9yPFVubGlua2VkV2FzbVRvV2FzbUNhbGw+
JiBjYWxsc2l0ZXMpIHsKICAgICAgICAgICAgIGZvciAoYXV0byYgY2FsbCA6IGNhbGxzaXRlcykg
ewogICAgICAgICAgICAgICAgIGRhdGFMb2dMbklmKFdhc21PTUdQbGFuSW50ZXJuYWw6OnZlcmJv
c2UsICJDb25zaWRlcmluZyByZXBhdGNoaW5nIGNhbGwgYXQ6ICIsIFJhd1BvaW50ZXIoY2FsbC5j
YWxsTG9jYXRpb24uZGF0YUxvY2F0aW9uKCkpLCAiIHRoYXQgdGFyZ2V0cyAiLCBjYWxsLmZ1bmN0
aW9uSW5kZXhTcGFjZSk7CiAgICAgICAgICAgICAgICAgaWYgKGNhbGwuZnVuY3Rpb25JbmRleFNw
YWNlID09IGZ1bmN0aW9uSW5kZXhTcGFjZSkgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L3dhc20vanMvSlNUb1dhc20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS93YXNtL2pzL0pTVG9XYXNtLmNwcAkocmV2aXNpb24gMjQzNzgwKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL3dhc20vanMvSlNUb1dhc20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMTMsMTQg
KzIxMyw4IEBAIHN0ZDo6dW5pcXVlX3B0cjxJbnRlcm5hbEZ1bmN0aW9uPiBjcmVhdGUKICAgICAg
ICAgICAgIGppdC5sb2FkV2FzbUNvbnRleHRJbnN0YW5jZShiYXNlTWVtb3J5KTsKIAogICAgICAg
ICBHUFJSZWcgY3VycmVudEluc3RhbmNlR1BSID0gQ29udGV4dDo6dXNlRmFzdFRMUygpID8gYmFz
ZU1lbW9yeSA6IHdhc21Db250ZXh0SW5zdGFuY2VHUFI7Ci0gICAgICAgIGlmIChtb2RlICE9IE1l
bW9yeU1vZGU6OlNpZ25hbGluZykgewotICAgICAgICAgICAgY29uc3QgYXV0byYgc2l6ZVJlZ3Mg
PSBwaW5uZWRSZWdzLnNpemVSZWdpc3RlcnM7Ci0gICAgICAgICAgICBBU1NFUlQoc2l6ZVJlZ3Mu
c2l6ZSgpID49IDEpOwotICAgICAgICAgICAgQVNTRVJUKCFzaXplUmVnc1swXS5zaXplT2Zmc2V0
KTsgLy8gVGhlIGZvbGxvd2luZyBjb2RlIGFzc3VtZXMgd2Ugc3RhcnQgYXQgMCwgYW5kIGNhbGN1
bGF0ZXMgc3Vic2VxdWVudCBzaXplIHJlZ2lzdGVycyByZWxhdGl2ZSB0byAwLgotICAgICAgICAg
ICAgaml0LmxvYWRQdHIoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKGN1cnJlbnRJbnN0YW5jZUdQUiwg
V2FzbTo6SW5zdGFuY2U6Om9mZnNldE9mQ2FjaGVkTWVtb3J5U2l6ZSgpKSwgc2l6ZVJlZ3NbMF0u
c2l6ZVJlZ2lzdGVyKTsKLSAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDE7IGkgPCBzaXpl
UmVncy5zaXplKCk7ICsraSkKLSAgICAgICAgICAgICAgICBqaXQuYWRkNjQoQ0NhbGxIZWxwZXJz
OjpUcnVzdGVkSW1tMzIoLXNpemVSZWdzW2ldLnNpemVPZmZzZXQpLCBzaXplUmVnc1swXS5zaXpl
UmVnaXN0ZXIsIHNpemVSZWdzW2ldLnNpemVSZWdpc3Rlcik7Ci0gICAgICAgIH0KKyAgICAgICAg
aWYgKG1vZGUgIT0gTWVtb3J5TW9kZTo6U2lnbmFsaW5nKQorICAgICAgICAgICAgaml0LmxvYWRQ
dHIoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKGN1cnJlbnRJbnN0YW5jZUdQUiwgV2FzbTo6SW5zdGFu
Y2U6Om9mZnNldE9mQ2FjaGVkTWVtb3J5U2l6ZSgpKSwgcGlubmVkUmVncy5zaXplUmVnaXN0ZXIp
OwogCiAgICAgICAgIGppdC5sb2FkUHRyKENDYWxsSGVscGVyczo6QWRkcmVzcyhjdXJyZW50SW5z
dGFuY2VHUFIsIFdhc206Okluc3RhbmNlOjpvZmZzZXRPZkNhY2hlZE1lbW9yeSgpKSwgYmFzZU1l
bW9yeSk7CiAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNUb1dh
c21JQ0NhbGxlZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20v
anMvSlNUb1dhc21JQ0NhbGxlZS5jcHAJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL3dhc20vanMvSlNUb1dhc21JQ0NhbGxlZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAs
MCArMSw2MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisK
KyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJKU1RvV2FzbUlDQ2FsbGVlLmgiCisKKyNp
ZiBFTkFCTEUoV0VCQVNTRU1CTFkpCisKKyNpbmNsdWRlICJXZWJBc3NlbWJseUZ1bmN0aW9uLmgi
CisKK25hbWVzcGFjZSBKU0MgeworCitjb25zdCBDbGFzc0luZm8gSlNUb1dhc21JQ0NhbGxlZTo6
c19pbmZvID0geyAiSlNUb1dhc21JQ0NhbGxlZSIsICZCYXNlOjpzX2luZm8sIG51bGxwdHIsIG51
bGxwdHIsIENSRUFURV9NRVRIT0RfVEFCTEUoSlNUb1dhc21JQ0NhbGxlZSkgfTsKKworSlNUb1dh
c21JQ0NhbGxlZSogSlNUb1dhc21JQ0NhbGxlZTo6Y3JlYXRlKFZNJiB2bSwgSlNHbG9iYWxPYmpl
Y3QqIGdsb2JhbE9iamVjdCwgV2ViQXNzZW1ibHlGdW5jdGlvbiogZnVuY3Rpb24pCit7CisgICAg
YXV0byogc3RydWN0dXJlID0gZ2xvYmFsT2JqZWN0LT5qc1RvV2FzbUlDQ2FsbGVlU3RydWN0dXJl
KCk7CisgICAgSlNUb1dhc21JQ0NhbGxlZSogcmVzdWx0ID0gbmV3IChOb3ROdWxsLCBhbGxvY2F0
ZUNlbGw8SlNUb1dhc21JQ0NhbGxlZT4odm0uaGVhcCkpIEpTVG9XYXNtSUNDYWxsZWUodm0sIGds
b2JhbE9iamVjdCwgc3RydWN0dXJlKTsKKyAgICByZXN1bHQtPmZpbmlzaENyZWF0aW9uKHZtKTsK
KyAgICByZXN1bHQtPm1fZnVuY3Rpb24uc2V0KHZtLCByZXN1bHQsIGZ1bmN0aW9uKTsKKyAgICBy
ZXR1cm4gcmVzdWx0OworfQorCitTdHJ1Y3R1cmUqIEpTVG9XYXNtSUNDYWxsZWU6OmNyZWF0ZVN0
cnVjdHVyZShWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgcHJv
dG90eXBlKQoreworICAgIHJldHVybiBTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0
LCBwcm90b3R5cGUsIFR5cGVJbmZvKEpTQ2FsbGVlVHlwZSwgU3RydWN0dXJlRmxhZ3MpLCBpbmZv
KCkpOworfQorCit2b2lkIEpTVG9XYXNtSUNDYWxsZWU6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBj
ZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3sKKyAgICBKU1RvV2FzbUlDQ2FsbGVlKiB0aGlz
T2JqZWN0ID0ganNDYXN0PEpTVG9XYXNtSUNDYWxsZWUqPihjZWxsKTsKKyAgICBBU1NFUlRfR0Nf
T0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CisKKyAgICBCYXNlOjp2aXNpdENo
aWxkcmVuKHRoaXNPYmplY3QsIHZpc2l0b3IpOworICAgIHZpc2l0b3IuYXBwZW5kKHRoaXNPYmpl
Y3QtPm1fZnVuY3Rpb24pOworfQorCit9IC8vIG5hbWVzcGFjZSBKU0MKKworI2VuZGlmIC8vIEVO
QUJMRShXRUJBU1NFTUJMWSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pT
VG9XYXNtSUNDYWxsZWUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2Fz
bS9qcy9KU1RvV2FzbUlDQ2FsbGVlLmgJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL3dhc20vanMvSlNUb1dhc21JQ0NhbGxlZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAg
KzEsNTcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisj
cHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIkpTQ2FsbGVlLmgiCisKK25hbWVzcGFjZSBKU0Mgewor
CisjaWYgRU5BQkxFKFdFQkFTU0VNQkxZKQorCitjbGFzcyBXZWJBc3NlbWJseUZ1bmN0aW9uOwor
CitjbGFzcyBKU1RvV2FzbUlDQ2FsbGVlIDogcHVibGljIEpTQ2FsbGVlIHsKKyAgICB1c2luZyBC
YXNlID0gSlNDYWxsZWU7CitwdWJsaWM6CisgICAgREVDTEFSRV9JTkZPOworCisgICAgc3RhdGlj
IEpTVG9XYXNtSUNDYWxsZWUqIGNyZWF0ZShWTSYsIEpTR2xvYmFsT2JqZWN0KiwgV2ViQXNzZW1i
bHlGdW5jdGlvbiopOworICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShWTSYs
IEpTR2xvYmFsT2JqZWN0KiwgSlNWYWx1ZSk7CisKKyAgICBXZWJBc3NlbWJseUZ1bmN0aW9uKiBm
dW5jdGlvbigpIHsgcmV0dXJuIG1fZnVuY3Rpb24uZ2V0KCk7IH0KKworcHJpdmF0ZToKKyAgICBK
U1RvV2FzbUlDQ2FsbGVlKFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgU3Ry
dWN0dXJlKiBzdHJ1Y3R1cmUpCisgICAgICAgIDogQmFzZSh2bSwgZ2xvYmFsT2JqZWN0LCBzdHJ1
Y3R1cmUpCisgICAgeyB9CisgICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBT
bG90VmlzaXRvciYpOworCisgICAgV3JpdGVCYXJyaWVyPFdlYkFzc2VtYmx5RnVuY3Rpb24+IG1f
ZnVuY3Rpb247Cit9OworCisjZW5kaWYgLy8gRU5BQkxFKFdFQkFTU0VNQkxZKQorCit9IC8vIG5h
bWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2Vt
Ymx5RnVuY3Rpb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNt
L2pzL1dlYkFzc2VtYmx5RnVuY3Rpb24uY3BwCShyZXZpc2lvbiAyNDM3ODApCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseUZ1bmN0aW9uLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMzYsMTIgKzM2LDE2IEBACiAjaW5jbHVkZSAiSlNXZWJBc3NlbWJseU1lbW9yeS5o
IgogI2luY2x1ZGUgIkpTV2ViQXNzZW1ibHlSdW50aW1lRXJyb3IuaCIKICNpbmNsdWRlICJMTElu
dFRodW5rcy5oIgorI2luY2x1ZGUgIkxpbmtCdWZmZXIuaCIKICNpbmNsdWRlICJQcm90b0NhbGxG
cmFtZS5oIgogI2luY2x1ZGUgIlZNLmgiCiAjaW5jbHVkZSAiV2FzbUNhbGxlZS5oIgorI2luY2x1
ZGUgIldhc21DYWxsaW5nQ29udmVudGlvbi5oIgogI2luY2x1ZGUgIldhc21Db250ZXh0SW5saW5l
cy5oIgogI2luY2x1ZGUgIldhc21Gb3JtYXQuaCIKICNpbmNsdWRlICJXYXNtTWVtb3J5LmgiCisj
aW5jbHVkZSAiV2FzbU1lbW9yeUluZm9ybWF0aW9uLmgiCisjaW5jbHVkZSAiV2FzbU1vZHVsZUlu
Zm9ybWF0aW9uLmgiCiAjaW5jbHVkZSAiV2FzbVNpZ25hdHVyZUlubGluZXMuaCIKICNpbmNsdWRl
IDx3dGYvRmFzdFRMUy5oPgogI2luY2x1ZGUgPHd0Zi9TdGFja1BvaW50ZXIuaD4KQEAgLTE0OCw2
ICsxNTIsMzM1IEBAIHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNhbGwKICAg
ICByZXR1cm4gcmF3UmVzdWx0OwogfQogCitib29sIFdlYkFzc2VtYmx5RnVuY3Rpb246OnVzZVRh
Z1JlZ2lzdGVycygpIGNvbnN0Cit7CisgICAgY29uc3QgYXV0byYgc2lnbmF0dXJlID0gV2FzbTo6
U2lnbmF0dXJlSW5mb3JtYXRpb246OmdldChzaWduYXR1cmVJbmRleCgpKTsKKyAgICByZXR1cm4g
c2lnbmF0dXJlLmFyZ3VtZW50Q291bnQoKSB8fCBzaWduYXR1cmUucmV0dXJuVHlwZSgpICE9IFdh
c206OlZvaWQ7Cit9CisKK1JlZ2lzdGVyU2V0IFdlYkFzc2VtYmx5RnVuY3Rpb246OmNhbGxlZVNh
dmVzKCkgY29uc3QKK3sKKyAgICBSZWdpc3RlclNldCB0b1NhdmUgPSBXYXNtOjpQaW5uZWRSZWdp
c3RlckluZm86OmdldCgpLnRvU2F2ZShpbnN0YW5jZSgpLT5tZW1vcnlNb2RlKCkpOworICAgIGlm
ICh1c2VUYWdSZWdpc3RlcnMoKSkgeworICAgICAgICBSZWdpc3RlclNldCB0YWdSZWdpc3RlcnMg
PSBSZWdpc3RlclNldDo6cnVudGltZVRhZ1JlZ2lzdGVycygpOworICAgICAgICAvLyBXZSByZWx5
IG9uIHRoZXNlIGJlaW5nIGRpc2pvaW50IHNldHMuCisjaWYgIUFTU0VSVF9ESVNBQkxFRAorICAg
ICAgICBmb3IgKFJlZyByZWcgOiB0YWdSZWdpc3RlcnMpCisgICAgICAgICAgICBBU1NFUlQoIXRv
U2F2ZS5jb250YWlucyhyZWcpKTsKKyNlbmRpZgorICAgICAgICB0b1NhdmUubWVyZ2UodGFnUmVn
aXN0ZXJzKTsKKyAgICB9CisgICAgcmV0dXJuIHRvU2F2ZTsKK30KKworUmVnaXN0ZXJBdE9mZnNl
dExpc3QgV2ViQXNzZW1ibHlGdW5jdGlvbjo6dXNlZENhbGxlZVNhdmVSZWdpc3RlcnMoKSBjb25z
dAoreworICAgIHJldHVybiBSZWdpc3RlckF0T2Zmc2V0TGlzdCB7IGNhbGxlZVNhdmVzKCksIFJl
Z2lzdGVyQXRPZmZzZXRMaXN0OjpPZmZzZXRCYXNlVHlwZTo6RnJhbWVQb2ludGVyQmFzZWQgfTsK
K30KKworcHRyZGlmZl90IFdlYkFzc2VtYmx5RnVuY3Rpb246OnByZXZpb3VzSW5zdGFuY2VPZmZz
ZXQoKSBjb25zdAoreworICAgIHB0cmRpZmZfdCByZXN1bHQgPSBjYWxsZWVTYXZlcygpLm51bWJl
ck9mU2V0UmVnaXN0ZXJzKCkgKiBzaXplb2YoQ1BVUmVnaXN0ZXIpOworICAgIHJlc3VsdCA9IC1y
ZXN1bHQgLSBzaXplb2YoQ1BVUmVnaXN0ZXIpOworI2lmICFBU1NFUlRfRElTQUJMRUQKKyAgICBw
dHJkaWZmX3QgbWluT2Zmc2V0ID0gMTsKKyAgICBmb3IgKGNvbnN0IFJlZ2lzdGVyQXRPZmZzZXQm
IHJlZ0F0T2Zmc2V0IDogdXNlZENhbGxlZVNhdmVSZWdpc3RlcnMoKSkgeworICAgICAgICBwdHJk
aWZmX3Qgb2Zmc2V0ID0gcmVnQXRPZmZzZXQub2Zmc2V0KCk7CisgICAgICAgIEFTU0VSVChvZmZz
ZXQgPCAwKTsKKyAgICAgICAgbWluT2Zmc2V0ID0gc3RkOjptaW4ob2Zmc2V0LCBtaW5PZmZzZXQp
OworICAgIH0KKyAgICBBU1NFUlQobWluT2Zmc2V0IC0gc3RhdGljX2Nhc3Q8cHRyZGlmZl90Pihz
aXplb2YoQ1BVUmVnaXN0ZXIpKSA9PSByZXN1bHQpOworI2VuZGlmCisgICAgcmV0dXJuIHJlc3Vs
dDsKK30KKworV2FzbTo6SW5zdGFuY2UqIFdlYkFzc2VtYmx5RnVuY3Rpb246OnByZXZpb3VzSW5z
dGFuY2UoQ2FsbEZyYW1lKiBjYWxsRnJhbWUpCit7CisgICAgQVNTRVJUKGNhbGxGcmFtZS0+Y2Fs
bGVlKCkucmF3UHRyKCkgPT0gbV9qc1RvV2FzbUlDQ2FsbGVlLmdldCgpKTsKKyAgICBhdXRvKiBy
ZXN1bHQgPSAqYml0d2lzZV9jYXN0PFdhc206Okluc3RhbmNlKio+KGJpdHdpc2VfY2FzdDxjaGFy
Kj4oY2FsbEZyYW1lKSArIHByZXZpb3VzSW5zdGFuY2VPZmZzZXQoKSk7CisgICAgcmV0dXJuIHJl
c3VsdDsKK30KKworTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPEpTRW50cnlQdHJUYWc+IFdlYkFzc2Vt
Ymx5RnVuY3Rpb246OmpzQ2FsbEVudHJ5cG9pbnRTbG93KCkKK3sKKyAgICBWTSYgdm0gPSAqdGhp
cy0+dm0oKTsKKyAgICBDQ2FsbEhlbHBlcnMgaml0OworCisgICAgY29uc3QgYXV0byYgc2lnbmF0
dXJlID0gV2FzbTo6U2lnbmF0dXJlSW5mb3JtYXRpb246OmdldChzaWduYXR1cmVJbmRleCgpKTsK
KyAgICBjb25zdCBhdXRvJiBwaW5uZWRSZWdzID0gV2FzbTo6UGlubmVkUmVnaXN0ZXJJbmZvOjpn
ZXQoKTsKKyAgICBSZWdpc3RlckF0T2Zmc2V0TGlzdCByZWdpc3RlcnNUb1NwaWxsID0gdXNlZENh
bGxlZVNhdmVSZWdpc3RlcnMoKTsKKworICAgIGF1dG8mIG1vZHVsZUluZm9ybWF0aW9uID0gaW5z
dGFuY2UoKS0+aW5zdGFuY2UoKS5tb2R1bGUoKS5tb2R1bGVJbmZvcm1hdGlvbigpOworCisgICAg
dW5zaWduZWQgdG90YWxGcmFtZVNpemUgPSByZWdpc3RlcnNUb1NwaWxsLnNpemUoKSAqIHNpemVv
ZihDUFVSZWdpc3Rlcik7CisgICAgdG90YWxGcmFtZVNpemUgKz0gc2l6ZW9mKENQVVJlZ2lzdGVy
KTsgLy8gU2xvdCBmb3IgdGhlIFZNJ3MgcHJldmlvdXMgd2FzbSBpbnN0YW5jZS4KKyAgICB0b3Rh
bEZyYW1lU2l6ZSArPSBXYXNtOjpXYXNtQ2FsbGluZ0NvbnZlbnRpb246OmhlYWRlclNpemVJbkJ5
dGVzKCk7CisgICAgdG90YWxGcmFtZVNpemUgLT0gc2l6ZW9mKENhbGxlckZyYW1lQW5kUEMpOwor
CisgICAgdW5zaWduZWQgbnVtR1BScyA9IDA7CisgICAgdW5zaWduZWQgbnVtRlBScyA9IDA7Cisg
ICAgYm9vbCBhcmd1bWVudHNJbmNsdWRlSTY0ID0gZmFsc2U7CisgICAgZm9yICh1bnNpZ25lZCBp
ID0gMDsgaSA8IHNpZ25hdHVyZS5hcmd1bWVudENvdW50KCk7IGkrKykgeworICAgICAgICBzd2l0
Y2ggKHNpZ25hdHVyZS5hcmd1bWVudChpKSkgeworICAgICAgICBjYXNlIFdhc206Okk2NDoKKyAg
ICAgICAgICAgIGFyZ3VtZW50c0luY2x1ZGVJNjQgPSB0cnVlOworICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgIGNhc2UgV2FzbTo6STMyOgorICAgICAgICAgICAgaWYgKG51bUdQUnMgPj0gV2Fz
bTo6d2FzbUNhbGxpbmdDb252ZW50aW9uKCkubV9ncHJBcmdzLnNpemUoKSkKKyAgICAgICAgICAg
ICAgICB0b3RhbEZyYW1lU2l6ZSArPSBzaXplb2YoQ1BVUmVnaXN0ZXIpOworICAgICAgICAgICAg
KytudW1HUFJzOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgV2FzbTo6RjMyOgor
ICAgICAgICBjYXNlIFdhc206OkY2NDoKKyAgICAgICAgICAgIGlmIChudW1GUFJzID49IFdhc206
Ondhc21DYWxsaW5nQ29udmVudGlvbigpLm1fZnByQXJncy5zaXplKCkpCisgICAgICAgICAgICAg
ICAgdG90YWxGcmFtZVNpemUgKz0gc2l6ZW9mKENQVVJlZ2lzdGVyKTsKKyAgICAgICAgICAgICsr
bnVtRlBSczsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAg
ICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgfQorICAgIH0KKworICAg
IGlmIChhcmd1bWVudHNJbmNsdWRlSTY0KQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAg
IHRvdGFsRnJhbWVTaXplID0gV1RGOjpyb3VuZFVwVG9NdWx0aXBsZU9mKHN0YWNrQWxpZ25tZW50
Qnl0ZXMoKSwgdG90YWxGcmFtZVNpemUpOworCisgICAgaml0LmVtaXRGdW5jdGlvblByb2xvZ3Vl
KCk7CisgICAgaml0LnN1YlB0cihNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKHRvdGFsRnJh
bWVTaXplKSwgTWFjcm9Bc3NlbWJsZXI6OnN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKKyAgICBqaXQu
c3RvcmU2NChDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW02NCgwKSwgQ0NhbGxIZWxwZXJzOjphZGRy
ZXNzRm9yKENhbGxGcmFtZVNsb3Q6OmNvZGVCbG9jaykpOworCisgICAgZm9yIChjb25zdCBSZWdp
c3RlckF0T2Zmc2V0JiByZWdBdE9mZnNldCA6IHJlZ2lzdGVyc1RvU3BpbGwpIHsKKyAgICAgICAg
R1BSUmVnIHJlZyA9IHJlZ0F0T2Zmc2V0LnJlZygpLmdwcigpOworICAgICAgICBwdHJkaWZmX3Qg
b2Zmc2V0ID0gcmVnQXRPZmZzZXQub2Zmc2V0KCk7CisgICAgICAgIGppdC5zdG9yZVB0cihyZWcs
IENDYWxsSGVscGVyczo6QWRkcmVzcyhHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3Rlciwgb2Zmc2V0
KSk7CisgICAgfQorCisgICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSBXYXNtOjp3YXNtQ2FsbGluZ0Nv
bnZlbnRpb25BaXIoKS5wcm9sb2d1ZVNjcmF0Y2goMSk7CisgICAgR1BSUmVnIHNjcmF0Y2gyR1BS
ID0gV2FzbTo6d2FzbUNhbGxpbmdDb252ZW50aW9uQWlyKCkucHJvbG9ndWVTY3JhdGNoKDApOwor
ICAgIGppdC5sb2FkUHRyKHZtLmFkZHJlc3NPZlNvZnRTdGFja0xpbWl0KCksIHNjcmF0Y2gyR1BS
KTsKKworICAgIENDYWxsSGVscGVyczo6SnVtcExpc3Qgc2xvd1BhdGg7CisgICAgc2xvd1BhdGgu
YXBwZW5kKGppdC5icmFuY2hQdHIoQ0NhbGxIZWxwZXJzOjpBYm92ZSwgTWFjcm9Bc3NlbWJsZXI6
OnN0YWNrUG9pbnRlclJlZ2lzdGVyLCBHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlcikpOworICAg
IHNsb3dQYXRoLmFwcGVuZChqaXQuYnJhbmNoUHRyKENDYWxsSGVscGVyczo6QmVsb3csIE1hY3Jv
QXNzZW1ibGVyOjpzdGFja1BvaW50ZXJSZWdpc3Rlciwgc2NyYXRjaDJHUFIpKTsKKworICAgIC8v
IEVuc3VyZToKKyAgICAvLyBhcmdDb3VudFBsdXNUaGlzIC0gMSA+PSBzaWduYXR1cmUuYXJndW1l
bnRDb3VudCgpCisgICAgLy8gYXJnQ291bnRQbHVzVGhpcyA+PSBzaWduYXR1cmUuYXJndW1lbnRD
b3VudCgpICsgMQorICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgaGFuZGxlIG1pc21hdGNoZWQgYXJp
dHkKKyAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTk2NTY0
CisgICAgc2xvd1BhdGguYXBwZW5kKGppdC5icmFuY2gzMihDQ2FsbEhlbHBlcnM6OkJlbG93LAor
ICAgICAgICBDQ2FsbEhlbHBlcnM6OnBheWxvYWRGb3IoQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRD
b3VudCksIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKHNpZ25hdHVyZS5hcmd1bWVudENvdW50
KCkgKyAxKSkpOworCisgICAgaWYgKHVzZVRhZ1JlZ2lzdGVycygpKQorICAgICAgICBqaXQuZW1p
dE1hdGVyaWFsaXplVGFnQ2hlY2tSZWdpc3RlcnMoKTsKKworICAgIC8vIEZpcnN0IHdlIGRvIHN0
YWNrIHNsb3RzIGZvciBGUFJzIHNvIHdlIGNhbiB1c2UgRlBSIGFyZ3VtZW50IHJlZ2lzdGVycyBh
cyBzY3JhdGNoLgorICAgIC8vIEFmdGVyIHRoYXQsIHdlIGhhbmRsZSBGUFIgYXJndW1lbnQgcmVn
aXN0ZXJzLgorICAgIC8vIFdlIGFsc28gaGFuZGxlIGFsbCBHUFIgdHlwZXMgaGVyZSBhcyB3ZSBo
YXZlIEdQUiBzY3JhdGNoIHJlZ2lzdGVycy4KKyAgICB7CisgICAgICAgIENDYWxsSGVscGVyczo6
QWRkcmVzcyBjYWxsZWVGcmFtZSA9IENDYWxsSGVscGVyczo6QWRkcmVzcyhNYWNyb0Fzc2VtYmxl
cjo6c3RhY2tQb2ludGVyUmVnaXN0ZXIsIC1zdGF0aWNfY2FzdDxwdHJkaWZmX3Q+KHNpemVvZihD
YWxsZXJGcmFtZUFuZFBDKSkpOworICAgICAgICBudW1HUFJzID0gMDsKKyAgICAgICAgbnVtRlBS
cyA9IDA7CisgICAgICAgIEZQUlJlZyBzY3JhdGNoRlBSID0gV2FzbTo6d2FzbUNhbGxpbmdDb252
ZW50aW9uKCkubV9mcHJBcmdzWzBdLmZwcigpOworCisgICAgICAgIHB0cmRpZmZfdCBqc09mZnNl
dCA9IENhbGxGcmFtZVNsb3Q6OmZpcnN0QXJndW1lbnQgKiBzaXplb2YoRW5jb2RlZEpTVmFsdWUp
OworCisgICAgICAgIHB0cmRpZmZfdCB3YXNtT2Zmc2V0ID0gQ2FsbEZyYW1lOjpoZWFkZXJTaXpl
SW5SZWdpc3RlcnMgKiBzaXplb2YoQ1BVUmVnaXN0ZXIpOworICAgICAgICBmb3IgKHVuc2lnbmVk
IGkgPSAwOyBpIDwgc2lnbmF0dXJlLmFyZ3VtZW50Q291bnQoKTsgaSsrKSB7CisgICAgICAgICAg
ICBzd2l0Y2ggKHNpZ25hdHVyZS5hcmd1bWVudChpKSkgeworICAgICAgICAgICAgY2FzZSBXYXNt
OjpJMzI6CisgICAgICAgICAgICAgICAgaml0LmxvYWQ2NChDQ2FsbEhlbHBlcnM6OkFkZHJlc3Mo
R1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIGpzT2Zmc2V0KSwgc2NyYXRjaEdQUik7CisgICAg
ICAgICAgICAgICAgc2xvd1BhdGguYXBwZW5kKGppdC5icmFuY2hJZk5vdEludDMyKHNjcmF0Y2hH
UFIpKTsKKyAgICAgICAgICAgICAgICBpZiAobnVtR1BScyA+PSBXYXNtOjp3YXNtQ2FsbGluZ0Nv
bnZlbnRpb24oKS5tX2dwckFyZ3Muc2l6ZSgpKSB7CisgICAgICAgICAgICAgICAgICAgIGppdC5z
dG9yZTMyKHNjcmF0Y2hHUFIsIGNhbGxlZUZyYW1lLndpdGhPZmZzZXQod2FzbU9mZnNldCkpOwor
ICAgICAgICAgICAgICAgICAgICB3YXNtT2Zmc2V0ICs9IHNpemVvZihDUFVSZWdpc3Rlcik7Cisg
ICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgaml0Lnplcm9FeHRl
bmQzMlRvUHRyKHNjcmF0Y2hHUFIsIFdhc206Ondhc21DYWxsaW5nQ29udmVudGlvbigpLm1fZ3By
QXJnc1tudW1HUFJzXS5ncHIoKSk7CisgICAgICAgICAgICAgICAgICAgICsrbnVtR1BSczsKKyAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNl
IFdhc206OkYzMjoKKyAgICAgICAgICAgIGNhc2UgV2FzbTo6RjY0OgorICAgICAgICAgICAgICAg
IGlmIChudW1GUFJzID49IFdhc206Ondhc21DYWxsaW5nQ29udmVudGlvbigpLm1fZnByQXJncy5z
aXplKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgaml0LmxvYWQ2NChDQ2FsbEhlbHBlcnM6OkFk
ZHJlc3MoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIGpzT2Zmc2V0KSwgc2NyYXRjaEdQUik7
CisgICAgICAgICAgICAgICAgICAgIHNsb3dQYXRoLmFwcGVuZChqaXQuYnJhbmNoSWZOb3ROdW1i
ZXIoc2NyYXRjaEdQUikpOworICAgICAgICAgICAgICAgICAgICBhdXRvIGlzSW50MzIgPSBqaXQu
YnJhbmNoSWZJbnQzMihzY3JhdGNoR1BSKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHNpZ25h
dHVyZS5hcmd1bWVudChpKSA9PSBXYXNtOjpGMzIpIHsKKyAgICAgICAgICAgICAgICAgICAgICAg
IGppdC51bmJveERvdWJsZShzY3JhdGNoR1BSLCBzY3JhdGNoR1BSLCBzY3JhdGNoRlBSKTsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIGppdC5jb252ZXJ0RG91YmxlVG9GbG9hdChzY3JhdGNoRlBS
LCBzY3JhdGNoRlBSKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGppdC5zdG9yZUZsb2F0KHNj
cmF0Y2hGUFIsIGNhbGxlZUZyYW1lLndpdGhPZmZzZXQod2FzbU9mZnNldCkpOworICAgICAgICAg
ICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgaml0LmFkZDY0KEdQ
UkluZm86OnRhZ1R5cGVOdW1iZXJSZWdpc3Rlciwgc2NyYXRjaEdQUiwgc2NyYXRjaEdQUik7Cisg
ICAgICAgICAgICAgICAgICAgICAgICBqaXQuc3RvcmU2NChzY3JhdGNoR1BSLCBjYWxsZWVGcmFt
ZS53aXRoT2Zmc2V0KHdhc21PZmZzZXQpKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgICAgICAgICBhdXRvIGRvbmUgPSBqaXQuanVtcCgpOworCisgICAgICAgICAgICAgICAg
ICAgIGlzSW50MzIubGluaygmaml0KTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHNpZ25hdHVy
ZS5hcmd1bWVudChpKSA9PSBXYXNtOjpGMzIpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGpp
dC5jb252ZXJ0SW50MzJUb0Zsb2F0KHNjcmF0Y2hHUFIsIHNjcmF0Y2hGUFIpOworICAgICAgICAg
ICAgICAgICAgICAgICAgaml0LnN0b3JlRmxvYXQoc2NyYXRjaEZQUiwgY2FsbGVlRnJhbWUud2l0
aE9mZnNldCh3YXNtT2Zmc2V0KSk7CisgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAg
ICAgICAgICAgICAgICAgICAgICBqaXQuY29udmVydEludDMyVG9Eb3VibGUoc2NyYXRjaEdQUiwg
c2NyYXRjaEZQUik7CisgICAgICAgICAgICAgICAgICAgICAgICBqaXQuc3RvcmVEb3VibGUoc2Ny
YXRjaEZQUiwgY2FsbGVlRnJhbWUud2l0aE9mZnNldCh3YXNtT2Zmc2V0KSk7CisgICAgICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgZG9uZS5saW5rKCZqaXQpOworCisgICAg
ICAgICAgICAgICAgICAgIHdhc21PZmZzZXQgKz0gc2l6ZW9mKENQVVJlZ2lzdGVyKTsKKyAgICAg
ICAgICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgICAgICAgICAgKytudW1GUFJzOworICAgICAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICBS
RUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgfQorCisgICAgICAgICAg
ICBqc09mZnNldCArPSBzaXplb2YoRW5jb2RlZEpTVmFsdWUpOworICAgICAgICB9CisgICAgfQor
CisgICAgLy8gTm93IGhhbmRsZSBGUFIgYXJndW1lbnRzIGluIHJlZ2lzdGVycy4KKyAgICB7Cisg
ICAgICAgIG51bUZQUnMgPSAwOworICAgICAgICBwdHJkaWZmX3QganNPZmZzZXQgPSBDYWxsRnJh
bWVTbG90OjpmaXJzdEFyZ3VtZW50ICogc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKTsKKyAgICAgICAg
Zm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHNpZ25hdHVyZS5hcmd1bWVudENvdW50KCk7IGkrKykg
eworICAgICAgICAgICAgc3dpdGNoIChzaWduYXR1cmUuYXJndW1lbnQoaSkpIHsKKyAgICAgICAg
ICAgIGNhc2UgV2FzbTo6RjMyOgorICAgICAgICAgICAgY2FzZSBXYXNtOjpGNjQ6CisgICAgICAg
ICAgICAgICAgaWYgKG51bUZQUnMgPCBXYXNtOjp3YXNtQ2FsbGluZ0NvbnZlbnRpb24oKS5tX2Zw
ckFyZ3Muc2l6ZSgpKSB7CisgICAgICAgICAgICAgICAgICAgIEZQUlJlZyBhcmdGUFIgPSBXYXNt
Ojp3YXNtQ2FsbGluZ0NvbnZlbnRpb24oKS5tX2ZwckFyZ3NbbnVtRlBSc10uZnByKCk7CisgICAg
ICAgICAgICAgICAgICAgIGppdC5sb2FkNjQoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKEdQUkluZm86
OmNhbGxGcmFtZVJlZ2lzdGVyLCBqc09mZnNldCksIHNjcmF0Y2hHUFIpOworICAgICAgICAgICAg
ICAgICAgICBzbG93UGF0aC5hcHBlbmQoaml0LmJyYW5jaElmTm90TnVtYmVyKHNjcmF0Y2hHUFIp
KTsKKyAgICAgICAgICAgICAgICAgICAgYXV0byBpc0ludDMyID0gaml0LmJyYW5jaElmSW50MzIo
c2NyYXRjaEdQUik7CisgICAgICAgICAgICAgICAgICAgIGppdC51bmJveERvdWJsZShzY3JhdGNo
R1BSLCBzY3JhdGNoR1BSLCBhcmdGUFIpOworICAgICAgICAgICAgICAgICAgICBpZiAoc2lnbmF0
dXJlLmFyZ3VtZW50KGkpID09IFdhc206OkYzMikKKyAgICAgICAgICAgICAgICAgICAgICAgIGpp
dC5jb252ZXJ0RG91YmxlVG9GbG9hdChhcmdGUFIsIGFyZ0ZQUik7CisgICAgICAgICAgICAgICAg
ICAgIGF1dG8gZG9uZSA9IGppdC5qdW1wKCk7CisKKyAgICAgICAgICAgICAgICAgICAgaXNJbnQz
Mi5saW5rKCZqaXQpOworICAgICAgICAgICAgICAgICAgICBpZiAoc2lnbmF0dXJlLmFyZ3VtZW50
KGkpID09IFdhc206OkYzMikKKyAgICAgICAgICAgICAgICAgICAgICAgIGppdC5jb252ZXJ0SW50
MzJUb0Zsb2F0KHNjcmF0Y2hHUFIsIGFyZ0ZQUik7CisgICAgICAgICAgICAgICAgICAgIGVsc2UK
KyAgICAgICAgICAgICAgICAgICAgICAgIGppdC5jb252ZXJ0SW50MzJUb0RvdWJsZShzY3JhdGNo
R1BSLCBhcmdGUFIpOworCisgICAgICAgICAgICAgICAgICAgIGRvbmUubGluaygmaml0KTsKKyAg
ICAgICAgICAgICAgICAgICAgKytudW1GUFJzOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGpzT2Zmc2V0ICs9IHNpemVvZihFbmNv
ZGVkSlNWYWx1ZSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvLyBBdCB0aGlzIHBvaW50LCB3
ZSdyZSBjb21taXR0ZWQgdG8gZG9pbmcgYSBmYXN0IGNhbGwuCisKKyAgICBpZiAoV2FzbTo6Q29u
dGV4dDo6dXNlRmFzdFRMUygpKSAKKyAgICAgICAgaml0LmxvYWRXYXNtQ29udGV4dEluc3RhbmNl
KHNjcmF0Y2hHUFIpOworICAgIGVsc2UKKyAgICAgICAgaml0LmxvYWRQdHIodm0ud2FzbUNvbnRl
eHQucG9pbnRlclRvSW5zdGFuY2UoKSwgc2NyYXRjaEdQUik7CisgICAgcHRyZGlmZl90IHByZXZp
b3VzSW5zdGFuY2VPZmZzZXQgPSB0aGlzLT5wcmV2aW91c0luc3RhbmNlT2Zmc2V0KCk7CisgICAg
aml0LnN0b3JlUHRyKHNjcmF0Y2hHUFIsIENDYWxsSGVscGVyczo6QWRkcmVzcyhHUFJJbmZvOjpj
YWxsRnJhbWVSZWdpc3RlciwgcHJldmlvdXNJbnN0YW5jZU9mZnNldCkpOworCisgICAgaml0Lm1v
dmUoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKCZpbnN0YW5jZSgpLT5pbnN0YW5jZSgpKSwg
c2NyYXRjaEdQUik7CisgICAgaWYgKFdhc206OkNvbnRleHQ6OnVzZUZhc3RUTFMoKSkgCisgICAg
ICAgIGppdC5zdG9yZVdhc21Db250ZXh0SW5zdGFuY2Uoc2NyYXRjaEdQUik7CisgICAgZWxzZSB7
CisgICAgICAgIGppdC5tb3ZlKHNjcmF0Y2hHUFIsIHBpbm5lZFJlZ3Mud2FzbUNvbnRleHRJbnN0
YW5jZVBvaW50ZXIpOworICAgICAgICBqaXQuc3RvcmVQdHIoc2NyYXRjaEdQUiwgdm0ud2FzbUNv
bnRleHQucG9pbnRlclRvSW5zdGFuY2UoKSk7CisgICAgfQorICAgIC8vIFRoaXMgY29udGFpbnMg
dGhlIGNhY2hlZCBzdGFjayBsaW1pdCBzdGlsbC4KKyAgICBqaXQuc3RvcmVQdHIoc2NyYXRjaDJH
UFIsIENDYWxsSGVscGVyczo6QWRkcmVzcyhzY3JhdGNoR1BSLCBXYXNtOjpJbnN0YW5jZTo6b2Zm
c2V0T2ZDYWNoZWRTdGFja0xpbWl0KCkpKTsKKworICAgIGlmICghIW1vZHVsZUluZm9ybWF0aW9u
Lm1lbW9yeSkgeworICAgICAgICBHUFJSZWcgYmFzZU1lbW9yeSA9IHBpbm5lZFJlZ3MuYmFzZU1l
bW9yeVBvaW50ZXI7CisKKyAgICAgICAgaWYgKGluc3RhbmNlKCktPm1lbW9yeU1vZGUoKSAhPSBX
YXNtOjpNZW1vcnlNb2RlOjpTaWduYWxpbmcpIHsKKyAgICAgICAgICAgIEFTU0VSVChwaW5uZWRS
ZWdzLnNpemVSZWdpc3RlciAhPSBzY3JhdGNoR1BSKTsKKyAgICAgICAgICAgIGppdC5sb2FkUHRy
KENDYWxsSGVscGVyczo6QWRkcmVzcyhzY3JhdGNoR1BSLCBXYXNtOjpJbnN0YW5jZTo6b2Zmc2V0
T2ZDYWNoZWRNZW1vcnlTaXplKCkpLCBwaW5uZWRSZWdzLnNpemVSZWdpc3Rlcik7CisgICAgICAg
IH0KKworICAgICAgICBqaXQubG9hZFB0cihDQ2FsbEhlbHBlcnM6OkFkZHJlc3Moc2NyYXRjaEdQ
UiwgV2FzbTo6SW5zdGFuY2U6Om9mZnNldE9mQ2FjaGVkTWVtb3J5KCkpLCBiYXNlTWVtb3J5KTsK
KyAgICB9CisKKyAgICAvLyBXZSB1c2UgdGhpcyBjYWxsZWUgdG8gaW5kaWNhdGUgaG93IHRvIHVu
d2luZCBwYXN0IHRoZXNlIHR5cGVzIG9mIGZyYW1lczoKKyAgICAvLyAxLiBXZSBuZWVkIHRvIGtu
b3cgd2hlcmUgdG8gZ2V0IGNhbGxlZSBzYXZlcy4KKyAgICAvLyAyLiBXZSBuZWVkIHRvIGtub3cg
dG8gcmVzdG9yZSB0aGUgcHJldmlvdXMgd2FzbSBjb250ZXh0LgorICAgIGlmICghbV9qc1RvV2Fz
bUlDQ2FsbGVlKQorICAgICAgICBtX2pzVG9XYXNtSUNDYWxsZWUuc2V0KHZtLCB0aGlzLCBKU1Rv
V2FzbUlDQ2FsbGVlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCgpLCB0aGlzKSk7CisgICAgaml0
LnN0b3JlUHRyKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cihtX2pzVG9XYXNtSUNDYWxsZWUu
Z2V0KCkpLCBDQ2FsbEhlbHBlcnM6OmFkZHJlc3NGb3IoQ2FsbEZyYW1lU2xvdDo6Y2FsbGVlKSk7
CisKKyAgICB7CisgICAgICAgIC8vIEZJWE1FOiBDdXJyZW50bHkgd2UganVzdCBkbyBhbiBpbmRp
cmVjdCBqdW1wLiBCdXQgd2Ugc2hvdWxkIHRlYWNoIHRoZSBNb2R1bGUKKyAgICAgICAgLy8gaG93
IHRvIHJlcGF0Y2ggdXM6CisgICAgICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD0xOTY1NzAKKyAgICAgICAgaml0LmxvYWRQdHIoZW50cnlwb2ludExvYWRMb2Nh
dGlvbigpLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgaml0LmNhbGwoc2NyYXRjaEdQUiwgV2FzbUVu
dHJ5UHRyVGFnKTsKKyAgICB9CisKKyAgICBBU1NFUlQoIVJlZ2lzdGVyU2V0OjpydW50aW1lVGFn
UmVnaXN0ZXJzKCkuY29udGFpbnMoR1BSSW5mbzo6bm9uUHJlc2VydmVkTm9uUmV0dXJuR1BSKSk7
CisgICAgaml0LmxvYWRQdHIoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKEdQUkluZm86OmNhbGxGcmFt
ZVJlZ2lzdGVyLCBwcmV2aW91c0luc3RhbmNlT2Zmc2V0KSwgR1BSSW5mbzo6bm9uUHJlc2VydmVk
Tm9uUmV0dXJuR1BSKTsKKyAgICBpZiAoV2FzbTo6Q29udGV4dDo6dXNlRmFzdFRMUygpKQorICAg
ICAgICBqaXQuc3RvcmVXYXNtQ29udGV4dEluc3RhbmNlKEdQUkluZm86Om5vblByZXNlcnZlZE5v
blJldHVybkdQUik7CisgICAgZWxzZQorICAgICAgICBqaXQuc3RvcmVQdHIoR1BSSW5mbzo6bm9u
UHJlc2VydmVkTm9uUmV0dXJuR1BSLCB2bS53YXNtQ29udGV4dC5wb2ludGVyVG9JbnN0YW5jZSgp
KTsKKworICAgIHN3aXRjaCAoc2lnbmF0dXJlLnJldHVyblR5cGUoKSkgeworICAgIGNhc2UgV2Fz
bTo6Vm9pZDoKKyAgICAgICAgaml0Lm1vdmVUcnVzdGVkVmFsdWUoanNVbmRlZmluZWQoKSwgSlNW
YWx1ZVJlZ3MgeyBHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUiB9KTsKKyAgICAgICAgYnJlYWs7Cisg
ICAgY2FzZSBXYXNtOjpJMzI6CisgICAgICAgIGppdC56ZXJvRXh0ZW5kMzJUb1B0cihHUFJJbmZv
OjpyZXR1cm5WYWx1ZUdQUiwgR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIpOworICAgICAgICBqaXQu
Ym94SW50MzIoR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIsIEpTVmFsdWVSZWdzIHsgR1BSSW5mbzo6
cmV0dXJuVmFsdWVHUFIgfSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgV2FzbTo6RjMyOgor
ICAgICAgICBqaXQuY29udmVydEZsb2F0VG9Eb3VibGUoRlBSSW5mbzo6cmV0dXJuVmFsdWVGUFIs
IEZQUkluZm86OnJldHVyblZhbHVlRlBSKTsKKyAgICAgICAgRkFMTFRIUk9VR0g7CisgICAgY2Fz
ZSBXYXNtOjpGNjQ6IHsKKyAgICAgICAgaml0Lm1vdmVUcnVzdGVkVmFsdWUoanNOdW1iZXIocHVy
ZU5hTigpKSwgSlNWYWx1ZVJlZ3MgeyBHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUiB9KTsKKyAgICAg
ICAgYXV0byBpc05hTiA9IGppdC5icmFuY2hJZk5hTihGUFJJbmZvOjpyZXR1cm5WYWx1ZUZQUik7
CisgICAgICAgIGppdC5ib3hEb3VibGUoRlBSSW5mbzo6cmV0dXJuVmFsdWVGUFIsIEpTVmFsdWVS
ZWdzIHsgR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIgfSk7CisgICAgICAgIGlzTmFOLmxpbmsoJmpp
dCk7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICBjYXNlIFdhc206Okk2NDoKKyAgICBjYXNl
IFdhc206OkZ1bmM6CisgICAgY2FzZSBXYXNtOjpBbnlmdW5jOgorICAgICAgICByZXR1cm4gbnVs
bHB0cjsKKyAgICBkZWZhdWx0OgorICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBhdXRvIGVt
aXRSZXN0b3JlQ2FsbGVlU2F2ZXMgPSBbJl0geworICAgICAgICBmb3IgKGNvbnN0IFJlZ2lzdGVy
QXRPZmZzZXQmIHJlZ0F0T2Zmc2V0IDogcmVnaXN0ZXJzVG9TcGlsbCkgeworICAgICAgICAgICAg
R1BSUmVnIHJlZyA9IHJlZ0F0T2Zmc2V0LnJlZygpLmdwcigpOworICAgICAgICAgICAgQVNTRVJU
KHJlZyAhPSBHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUik7CisgICAgICAgICAgICBwdHJkaWZmX3Qg
b2Zmc2V0ID0gcmVnQXRPZmZzZXQub2Zmc2V0KCk7CisgICAgICAgICAgICBqaXQubG9hZFB0cihD
Q2FsbEhlbHBlcnM6OkFkZHJlc3MoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIG9mZnNldCks
IHJlZyk7CisgICAgICAgIH0KKyAgICB9OworCisgICAgZW1pdFJlc3RvcmVDYWxsZWVTYXZlcygp
OworCisgICAgaml0LmVtaXRGdW5jdGlvbkVwaWxvZ3VlKCk7CisgICAgaml0LnJldCgpOworCisg
ICAgc2xvd1BhdGgubGluaygmaml0KTsKKyAgICBlbWl0UmVzdG9yZUNhbGxlZVNhdmVzKCk7Cisg
ICAgaml0Lm1vdmUoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKHRoaXMpLCBHUFJJbmZvOjpy
ZWdUMCk7CisgICAgaml0LmVtaXRGdW5jdGlvbkVwaWxvZ3VlKCk7CisgICAgYXV0byBqdW1wVG9I
b3N0Q2FsbFRodW5rID0gaml0Lmp1bXAoKTsKKworICAgIExpbmtCdWZmZXIgbGlua0J1ZmZlcihq
aXQsIG51bGxwdHIsIEpJVENvbXBpbGF0aW9uQ2FuRmFpbCk7CisgICAgaWYgKFVOTElLRUxZKGxp
bmtCdWZmZXIuZGlkRmFpbFRvQWxsb2NhdGUoKSkpCisgICAgICAgIHJldHVybiBudWxscHRyOwor
CisgICAgbGlua0J1ZmZlci5saW5rKGp1bXBUb0hvc3RDYWxsVGh1bmssIENvZGVMb2NhdGlvbkxh
YmVsPEpTRW50cnlQdHJUYWc+KGV4ZWN1dGFibGUoKS0+ZW50cnlwb2ludEZvcihDb2RlRm9yQ2Fs
bCwgTXVzdENoZWNrQXJpdHkpLmV4ZWN1dGFibGVBZGRyZXNzKCkpKTsKKyAgICBtX2pzQ2FsbEVu
dHJ5cG9pbnQgPSBGSU5BTElaRV9DT0RFKGxpbmtCdWZmZXIsIFdhc21FbnRyeVB0clRhZywgIkpT
LT5XYXNtIElDIik7CisgICAgcmV0dXJuIG1fanNDYWxsRW50cnlwb2ludC5jb2RlKCk7Cit9CisK
IFdlYkFzc2VtYmx5RnVuY3Rpb24qIFdlYkFzc2VtYmx5RnVuY3Rpb246OmNyZWF0ZShWTSYgdm0s
IEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFN0cnVjdHVyZSogc3RydWN0dXJlLCB1bnNp
Z25lZCBsZW5ndGgsIGNvbnN0IFN0cmluZyYgbmFtZSwgSlNXZWJBc3NlbWJseUluc3RhbmNlKiBp
bnN0YW5jZSwgV2FzbTo6Q2FsbGVlJiBqc0VudHJ5cG9pbnQsIFdhc206Oldhc21Ub1dhc21JbXBv
cnRhYmxlRnVuY3Rpb246OkxvYWRMb2NhdGlvbiB3YXNtVG9XYXNtRW50cnlwb2ludExvYWRMb2Nh
dGlvbiwgV2FzbTo6U2lnbmF0dXJlSW5kZXggc2lnbmF0dXJlSW5kZXgpCiB7CiAgICAgTmF0aXZl
RXhlY3V0YWJsZSogZXhlY3V0YWJsZSA9IHZtLmdldEhvc3RGdW5jdGlvbihjYWxsV2ViQXNzZW1i
bHlGdW5jdGlvbiwgTm9JbnRyaW5zaWMsIGNhbGxIb3N0RnVuY3Rpb25Bc0NvbnN0cnVjdG9yLCBu
dWxscHRyLCBuYW1lKTsKQEAgLTE2OSw2ICs1MDIsMjAgQEAgV2ViQXNzZW1ibHlGdW5jdGlvbjo6
V2ViQXNzZW1ibHlGdW5jdGlvbgogICAgICwgbV9pbXBvcnRhYmxlRnVuY3Rpb24geyBzaWduYXR1
cmVJbmRleCwgd2FzbVRvV2FzbUVudHJ5cG9pbnRMb2FkTG9jYXRpb24gfQogeyB9CiAKK3ZvaWQg
V2ViQXNzZW1ibHlGdW5jdGlvbjo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNp
dG9yJiB2aXNpdG9yKQoreworICAgIFdlYkFzc2VtYmx5RnVuY3Rpb24qIHRoaXNPYmplY3QgPSBq
c0Nhc3Q8V2ViQXNzZW1ibHlGdW5jdGlvbio+KGNlbGwpOworICAgIEFTU0VSVF9HQ19PQkpFQ1Rf
SU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKKworICAgIEJhc2U6OnZpc2l0Q2hpbGRyZW4o
dGhpc09iamVjdCwgdmlzaXRvcik7CisgICAgdmlzaXRvci5hcHBlbmQodGhpc09iamVjdC0+bV9q
c1RvV2FzbUlDQ2FsbGVlKTsKK30KKwordm9pZCBXZWJBc3NlbWJseUZ1bmN0aW9uOjpkZXN0cm95
KEpTQ2VsbCogY2VsbCkKK3sKKyAgICBzdGF0aWNfY2FzdDxXZWJBc3NlbWJseUZ1bmN0aW9uKj4o
Y2VsbCktPldlYkFzc2VtYmx5RnVuY3Rpb246On5XZWJBc3NlbWJseUZ1bmN0aW9uKCk7Cit9CisK
IH0gLy8gbmFtZXNwYWNlIEpTQwogCiAjZW5kaWYgLy8gRU5BQkxFKFdFQkFTU0VNQkxZKQpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlGdW5jdGlvbi5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5RnVu
Y3Rpb24uaAkocmV2aXNpb24gMjQzNzgwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20v
anMvV2ViQXNzZW1ibHlGdW5jdGlvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNyw2ICsyNyw3IEBA
CiAKICNpZiBFTkFCTEUoV0VCQVNTRU1CTFkpCiAKKyNpbmNsdWRlICJKU1RvV2FzbUlDQ2FsbGVl
LmgiCiAjaW5jbHVkZSAiTWFjcm9Bc3NlbWJsZXJDb2RlUmVmLmgiCiAjaW5jbHVkZSAiV2FzbUNh
bGxlZS5oIgogI2luY2x1ZGUgIldlYkFzc2VtYmx5RnVuY3Rpb25CYXNlLmgiCkBAIC00OSw2ICs1
MCw5IEBAIHB1YmxpYzoKIAogICAgIGNvbnN0IHN0YXRpYyB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFn
cyA9IEJhc2U6OlN0cnVjdHVyZUZsYWdzOwogCisgICAgc3RhdGljIGNvbnN0IGJvb2wgbmVlZHNE
ZXN0cnVjdGlvbiA9IHRydWU7CisgICAgc3RhdGljIHZvaWQgZGVzdHJveShKU0NlbGwqKTsKKwog
ICAgIHRlbXBsYXRlPHR5cGVuYW1lIENlbGxUeXBlLCBTdWJzcGFjZUFjY2VzcyBtb2RlPgogICAg
IHN0YXRpYyBJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoVk0mIHZtKQogICAgIHsKQEAgLTc0LDE0
ICs3OCwzNCBAQCBwdWJsaWM6CiAKICAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mRW50cnlw
b2ludExvYWRMb2NhdGlvbigpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihXZWJBc3NlbWJseUZ1
bmN0aW9uLCBtX2ltcG9ydGFibGVGdW5jdGlvbikgKyBXYXNtVG9XYXNtSW1wb3J0YWJsZUZ1bmN0
aW9uOjpvZmZzZXRPZkVudHJ5cG9pbnRMb2FkTG9jYXRpb24oKTsgfQogCisgICAgTWFjcm9Bc3Nl
bWJsZXJDb2RlUHRyPEpTRW50cnlQdHJUYWc+IGpzQ2FsbEVudHJ5cG9pbnQoKQorICAgIHsKKyAg
ICAgICAgaWYgKG1fanNDYWxsRW50cnlwb2ludCkKKyAgICAgICAgICAgIHJldHVybiBtX2pzQ2Fs
bEVudHJ5cG9pbnQuY29kZSgpOworICAgICAgICByZXR1cm4ganNDYWxsRW50cnlwb2ludFNsb3co
KTsKKyAgICB9CisKKyAgICBSZWdpc3RlckF0T2Zmc2V0TGlzdCB1c2VkQ2FsbGVlU2F2ZVJlZ2lz
dGVycygpIGNvbnN0OworICAgIFdhc206Okluc3RhbmNlKiBwcmV2aW91c0luc3RhbmNlKENhbGxG
cmFtZSopOworCiBwcml2YXRlOgorICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxs
KiwgU2xvdFZpc2l0b3ImKTsKICAgICBXZWJBc3NlbWJseUZ1bmN0aW9uKFZNJiwgSlNHbG9iYWxP
YmplY3QqLCBTdHJ1Y3R1cmUqLCBXYXNtOjpDYWxsZWUmIGpzRW50cnlwb2ludCwgV2FzbVRvV2Fz
bUltcG9ydGFibGVGdW5jdGlvbjo6TG9hZExvY2F0aW9uIGVudHJ5cG9pbnRMb2FkTG9jYXRpb24s
IFdhc206OlNpZ25hdHVyZUluZGV4KTsKIAorICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxKU0Vu
dHJ5UHRyVGFnPiBqc0NhbGxFbnRyeXBvaW50U2xvdygpOworICAgIHB0cmRpZmZfdCBwcmV2aW91
c0luc3RhbmNlT2Zmc2V0KCkgY29uc3Q7CisgICAgYm9vbCB1c2VUYWdSZWdpc3RlcnMoKSBjb25z
dDsKKworICAgIFJlZ2lzdGVyU2V0IGNhbGxlZVNhdmVzKCkgY29uc3Q7CisKICAgICAvLyBJdCdz
IHNhZmUgdG8ganVzdCBob2xkIHRoZSByYXcgV2FzbVRvV2FzbUltcG9ydGFibGVGdW5jdGlvbi9q
c0VudHJ5cG9pbnQgYmVjYXVzZSB3ZSBoYXZlIGEgcmVmZXJlbmNlCiAgICAgLy8gdG8gb3VyIElu
c3RhbmNlLCB3aGljaCBwb2ludHMgdG8gdGhlIE1vZHVsZSB0aGF0IGV4cG9ydGVkIHVzLCB3aGlj
aAogICAgIC8vIGVuc3VyZXMgdGhhdCB0aGUgYWN0dWFsIFNpZ25hdHVyZS9jb2RlIGRvZXNuJ3Qg
Z2V0IGRlYWxsb2NhdGVkLgogICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxXYXNtRW50cnlQdHJU
YWc+IG1fanNFbnRyeXBvaW50OwogICAgIFdhc21Ub1dhc21JbXBvcnRhYmxlRnVuY3Rpb24gbV9p
bXBvcnRhYmxlRnVuY3Rpb247CisgICAgV3JpdGVCYXJyaWVyPEpTVG9XYXNtSUNDYWxsZWU+IG1f
anNUb1dhc21JQ0NhbGxlZTsKKyAgICAvLyBVc2VkIGZvciBKUyBjYWxsaW5nIGludG8gV2FzbS4K
KyAgICBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SlNFbnRyeVB0clRhZz4gbV9qc0NhbGxFbnRyeXBv
aW50OwogfTsKIAogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvd2FzbS9qcy9XZWJBc3NlbWJseUZ1bmN0aW9uSGVhcENlbGxUeXBlLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseUZ1bmN0aW9uSGVh
cENlbGxUeXBlLmNwcAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2Fz
bS9qcy9XZWJBc3NlbWJseUZ1bmN0aW9uSGVhcENlbGxUeXBlLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMCwwICsxLDY2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE5IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgor
ICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAor
ICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJXZWJBc3NlbWJseUZ1bmN0aW9u
SGVhcENlbGxUeXBlLmgiCisKKyNpZiBFTkFCTEUoV0VCQVNTRU1CTFkpCisKKyNpbmNsdWRlICJK
U0NJbmxpbmVzLmgiCisjaW5jbHVkZSAiTWFya2VkQmxvY2tJbmxpbmVzLmgiCisjaW5jbHVkZSAi
V2ViQXNzZW1ibHlGdW5jdGlvbi5oIgorCituYW1lc3BhY2UgSlNDIHsKKworc3RydWN0IFdlYkFz
c2VtYmx5RnVuY3Rpb25EZXN0cm95RnVuYyB7CisgICAgQUxXQVlTX0lOTElORSB2b2lkIG9wZXJh
dG9yKCkoVk0mLCBKU0NlbGwqIGNlbGwpIGNvbnN0CisgICAgeworICAgICAgICBzdGF0aWNfYXNz
ZXJ0KHN0ZDo6aXNfZmluYWw8V2ViQXNzZW1ibHlGdW5jdGlvbj46OnZhbHVlLCAiT3RoZXJ3aXNl
LCB0aGlzIGNvZGUgd291bGQgbm90IGJlIGNvcnJlY3QuIik7CisgICAgICAgIFdlYkFzc2VtYmx5
RnVuY3Rpb246OmluZm8oKS0+bWV0aG9kVGFibGUuZGVzdHJveShjZWxsKTsKKyAgICB9Cit9Owor
CitXZWJBc3NlbWJseUZ1bmN0aW9uSGVhcENlbGxUeXBlOjpXZWJBc3NlbWJseUZ1bmN0aW9uSGVh
cENlbGxUeXBlKCkKKyAgICA6IEhlYXBDZWxsVHlwZShDZWxsQXR0cmlidXRlcyhOZWVkc0Rlc3Ry
dWN0aW9uLCBIZWFwQ2VsbDo6SlNDZWxsKSkKK3sKK30KKworV2ViQXNzZW1ibHlGdW5jdGlvbkhl
YXBDZWxsVHlwZTo6fldlYkFzc2VtYmx5RnVuY3Rpb25IZWFwQ2VsbFR5cGUoKQoreworfQorCit2
b2lkIFdlYkFzc2VtYmx5RnVuY3Rpb25IZWFwQ2VsbFR5cGU6OmZpbmlzaFN3ZWVwKE1hcmtlZEJs
b2NrOjpIYW5kbGUmIGhhbmRsZSwgRnJlZUxpc3QqIGZyZWVMaXN0KQoreworICAgIGhhbmRsZS5m
aW5pc2hTd2VlcEtub3dpbmdIZWFwQ2VsbFR5cGUoZnJlZUxpc3QsIFdlYkFzc2VtYmx5RnVuY3Rp
b25EZXN0cm95RnVuYygpKTsKK30KKwordm9pZCBXZWJBc3NlbWJseUZ1bmN0aW9uSGVhcENlbGxU
eXBlOjpkZXN0cm95KFZNJiB2bSwgSlNDZWxsKiBjZWxsKQoreworICAgIFdlYkFzc2VtYmx5RnVu
Y3Rpb25EZXN0cm95RnVuYygpKHZtLCBjZWxsKTsKK30KKworfSAvLyBuYW1lc3BhY2UgSlNDCisK
KyNlbmRpZiAvLyBFTkFCTEUoV0VCQVNTRU1CTFkpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvd2FzbS9qcy9XZWJBc3NlbWJseUZ1bmN0aW9uSGVhcENlbGxUeXBlLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlGdW5jdGlvbkhlYXBD
ZWxsVHlwZS5oCShub25leGlzdGVudCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pz
L1dlYkFzc2VtYmx5RnVuY3Rpb25IZWFwQ2VsbFR5cGUuaAkod29ya2luZyBjb3B5KQpAQCAtMCww
ICsxLDQ1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisK
KyNwcmFnbWEgb25jZQorCisjaWYgRU5BQkxFKFdFQkFTU0VNQkxZKQorCisjaW5jbHVkZSAiSGVh
cENlbGxUeXBlLmgiCisKK25hbWVzcGFjZSBKU0MgeworCitjbGFzcyBXZWJBc3NlbWJseUZ1bmN0
aW9uSGVhcENlbGxUeXBlIDogcHVibGljIEhlYXBDZWxsVHlwZSB7CitwdWJsaWM6CisgICAgV2Vi
QXNzZW1ibHlGdW5jdGlvbkhlYXBDZWxsVHlwZSgpOworICAgIHZpcnR1YWwgfldlYkFzc2VtYmx5
RnVuY3Rpb25IZWFwQ2VsbFR5cGUoKTsKKyAgICAKKyAgICB2b2lkIGZpbmlzaFN3ZWVwKE1hcmtl
ZEJsb2NrOjpIYW5kbGUmLCBGcmVlTGlzdCopIG92ZXJyaWRlOworICAgIHZvaWQgZGVzdHJveShW
TSYsIEpTQ2VsbCopIG92ZXJyaWRlOworfTsKKworfSAvLyBuYW1lc3BhY2UgSlNDCisKKyNlbmRp
ZiAvLyBFTkFCTEUoV0VCQVNTRU1CTFkpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2Fz
bS9qcy9XZWJBc3NlbWJseVByb3RvdHlwZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5UHJvdG90eXBlLmgJKHJldmlzaW9uIDI0Mzc4MCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5UHJvdG90eXBlLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTMzLDYgKzMzLDggQEAKIAogbmFtZXNwYWNlIEpTQyB7CiAKK2Ns
YXNzIEpTUHJvbWlzZURlZmVycmVkOworCiBjbGFzcyBXZWJBc3NlbWJseVByb3RvdHlwZSBmaW5h
bCA6IHB1YmxpYyBKU05vbkZpbmFsT2JqZWN0IHsKIHB1YmxpYzoKICAgICB0eXBlZGVmIEpTTm9u
RmluYWxPYmplY3QgQmFzZTsK
</data>

          </attachment>
      

    </bug>

</bugzilla>