<?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>225848</bug_id>
          
          <creation_ts>2021-05-15 18:46:29 -0700</creation_ts>
          <short_desc>Make AirAllocateRegistersByGraphColoring use less memory</short_desc>
          <delta_ts>2021-05-25 23:58:33 -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>
          
          <see_also>https://bugs.webkit.org/show_bug.cgi?id=226258</see_also>
          <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>
          
          <blocked>225977</blocked>
    
    <blocked>226027</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Robin Morisset">rmorisset</reporter>
          <assigned_to name="Robin Morisset">rmorisset</assigned_to>
          <cc>annulen</cc>
    
    <cc>benjamin</cc>
    
    <cc>cdumez</cc>
    
    <cc>cmarcelo</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>fpizlo</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>keith_miller</cc>
    
    <cc>mark.lam</cc>
    
    <cc>msaboff</cc>
    
    <cc>ryuan.choi</cc>
    
    <cc>saam</cc>
    
    <cc>sergio</cc>
    
    <cc>tzagallo</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1760526</commentid>
    <comment_count>0</comment_count>
    <who name="Robin Morisset">rmorisset</who>
    <bug_when>2021-05-15 18:46:29 -0700</bug_when>
    <thetext>The main benefit would be to allow us to increase Options::maximumTmpsForGraphColoring without causing more jetsams.
It might also help our memory usage in general, and is likely to make the register allocator somewhat faster as well.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1760527</commentid>
    <comment_count>1</comment_count>
      <attachid>428760</attachid>
    <who name="Robin Morisset">rmorisset</who>
    <bug_when>2021-05-15 18:47:07 -0700</bug_when>
    <thetext>Created attachment 428760
WIP

for EWS</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1760537</commentid>
    <comment_count>2</comment_count>
      <attachid>428764</attachid>
    <who name="Robin Morisset">rmorisset</who>
    <bug_when>2021-05-15 19:16:44 -0700</bug_when>
    <thetext>Created attachment 428764
WIP

Fix unused variable (and style nits)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1760800</commentid>
    <comment_count>3</comment_count>
      <attachid>428844</attachid>
    <who name="Robin Morisset">rmorisset</who>
    <bug_when>2021-05-17 10:26:36 -0700</bug_when>
    <thetext>Created attachment 428844
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1760816</commentid>
    <comment_count>4</comment_count>
      <attachid>428849</attachid>
    <who name="Robin Morisset">rmorisset</who>
    <bug_when>2021-05-17 11:29:00 -0700</bug_when>
    <thetext>Created attachment 428849
Patch

Fixing nits in the test file.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1760819</commentid>
    <comment_count>5</comment_count>
      <attachid>428850</attachid>
    <who name="Robin Morisset">rmorisset</who>
    <bug_when>2021-05-17 11:40:22 -0700</bug_when>
    <thetext>Created attachment 428850
Patch

Trying to fix the test file again.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1760822</commentid>
    <comment_count>6</comment_count>
      <attachid>428850</attachid>
    <who name="Robin Morisset">rmorisset</who>
    <bug_when>2021-05-17 11:45:00 -0700</bug_when>
    <thetext>Comment on attachment 428850
Patch

test file still has warnings</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1760823</commentid>
    <comment_count>7</comment_count>
      <attachid>428852</attachid>
    <who name="Robin Morisset">rmorisset</who>
    <bug_when>2021-05-17 11:45:52 -0700</bug_when>
    <thetext>Created attachment 428852
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1760824</commentid>
    <comment_count>8</comment_count>
      <attachid>428853</attachid>
    <who name="Robin Morisset">rmorisset</who>
    <bug_when>2021-05-17 11:50:06 -0700</bug_when>
    <thetext>Created attachment 428853
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1760893</commentid>
    <comment_count>9</comment_count>
    <who name="Robin Morisset">rmorisset</who>
    <bug_when>2021-05-17 14:31:56 -0700</bug_when>
    <thetext>This patch is unfortunately not enough to run mruby-wasm.aotoki.dev with an increased Options::maxTmpsForGraphColoring on a phone (it still jetsams).

I&apos;ve added some instrumentation and found out why: that webpage has two functions with roughly 30k Tmps (which is OK, tsf-wasm has functions that big with no issues) and &gt;20M edges in the interference graph (which is the source of the problem, for comparison tsf-wasm only has roughly 1M edges in its largest functions).

This patch reduces the memory consumption of the interference graph for each of these functions from roughly 250MB to 85MB (assuming an average occupancy rate for the relevant HashSet / SmallSet), and saves a few more MB from the rest of the datastructures in the register allocator (e.g. UseCounts). But considering that both functions are compiled in parallel, and that we keep alive during that time both the Air code and the B3 procedure (with its roughly 450k B3::Value per function..), it is not surprising that we still jetsam.

I have some ideas for how to save some more memory in this case, but eventually we might just have to detect while building the interference graph when things are getting out of hand and aborting to the faster/cheaper register allocator.

Oh, also this pretty dense interference graph leads to a ton of spilling: after the first iteration the number of edges is down to 3M, but the number of Tmps has increased to 300k. So it is not even clear that we are gaining that much by trying to do fancy graph coloring in this case.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1760896</commentid>
    <comment_count>10</comment_count>
      <attachid>428871</attachid>
    <who name="Robin Morisset">rmorisset</who>
    <bug_when>2021-05-17 14:36:20 -0700</bug_when>
    <thetext>Created attachment 428871
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1761202</commentid>
    <comment_count>11</comment_count>
      <attachid>428871</attachid>
    <who name="Robin Morisset">rmorisset</who>
    <bug_when>2021-05-18 10:32:54 -0700</bug_when>
    <thetext>Comment on attachment 428871
Patch

Removing from review as I&apos;ve got a better version coming up.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1761360</commentid>
    <comment_count>12</comment_count>
      <attachid>428992</attachid>
    <who name="Robin Morisset">rmorisset</who>
    <bug_when>2021-05-18 16:26:14 -0700</bug_when>
    <thetext>Created attachment 428992
Patch

Now with an even better datastructure for the interference graph.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1761361</commentid>
    <comment_count>13</comment_count>
      <attachid>428993</attachid>
    <who name="Robin Morisset">rmorisset</who>
    <bug_when>2021-05-18 16:26:57 -0700</bug_when>
    <thetext>Created attachment 428993
memory use of the interference graphs in JetStream2</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1761362</commentid>
    <comment_count>14</comment_count>
      <attachid>428994</attachid>
    <who name="Robin Morisset">rmorisset</who>
    <bug_when>2021-05-18 16:27:34 -0700</bug_when>
    <thetext>Created attachment 428994
memory use of the interference graphs while visiting mruby-wasm.aotoki.dev</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1761453</commentid>
    <comment_count>15</comment_count>
      <attachid>428992</attachid>
    <who name="Robin Morisset">rmorisset</who>
    <bug_when>2021-05-18 19:58:33 -0700</bug_when>
    <thetext>Comment on attachment 428992
Patch

Thanks for the review!
I&apos;m sending this to the commit queue, but I&apos;ll post more performance numbers here when I get them.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1761457</commentid>
    <comment_count>16</comment_count>
    <who name="EWS">ews-feeder</who>
    <bug_when>2021-05-18 20:24:21 -0700</bug_when>
    <thetext>Committed r277714 (237893@main): &lt;https://commits.webkit.org/237893@main&gt;

All reviewed patches have been landed. Closing bug and clearing flags on attachment 428992.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1761458</commentid>
    <comment_count>17</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2021-05-18 20:25:17 -0700</bug_when>
    <thetext>&lt;rdar://problem/78186936&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1762115</commentid>
    <comment_count>18</comment_count>
    <who name="Robin Morisset">rmorisset</who>
    <bug_when>2021-05-20 13:46:05 -0700</bug_when>
    <thetext>I am starting to get numbers for this patch combined with the typo fix in https://bugs.webkit.org/show_bug.cgi?id=225977.

On an iPhone7, I&apos;ve got RAMification numbers. JITTests as a whole got better by 0.63% (p&lt;0.02). Per test, here are the statistically significant improvements, with the score improvement first (based on end and peak memory), and followed by the peak memory improvement:
- 3d-raytrace-SP: 1.03%, 2.51%
- Box2D: 1.85, 2.23
- OfflineAssembler: 11.21, 19.70
- UniPoker: 0.66, 0.83
- crypto: 0.76, 0.82
- crypto-aes-SP: 1.85, 3.58
- crypto-md5-SP: 5.46, 10.93
- crypto-sha1-SP: 1.01, 1.99
- date-format-tofte-SP: 0.99, 1.63
- date-formap-xparb-SP: 0.59, 0.77
- delta-blue: 0.94, 1.28
- gaussian-blur: 0.37, 0.37
- gcc-loops-wasm: 2.71, 4.83
- lebab-wtb: 4.15, 4.36
- body-SP: 0.49, 0.49
- quicksort-wasm: 4.24, 4.24
- raytrace: 2.97, 5.54
- regexp: 3.92, 7.67
- stanford-crypto-aes: 0.91, 1.62
- stanford-crypto-sha256: 0.12, 0.31
- tsf-wasm: not significant at the score level because of a massive outlier in end memory, 13.52% for peak memory
All of these are p&lt;0.02 except for UniPoker which is p&lt;0.05, and there is not one significant memory regression (there is a large one in typescript, but at p&gt;0.1 it looks like pure noise).

As expected we see that the wins are mostly on peak memory, and are largest on those subtests which have especially large interference graphs (e.g. tsf-wasm and OfflineAssembler).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1762314</commentid>
    <comment_count>19</comment_count>
    <who name="Robin Morisset">rmorisset</who>
    <bug_when>2021-05-21 00:18:56 -0700</bug_when>
    <thetext>Here are the numbers for JetStream2 on an iPhone 7. This patch (+ the typo fix) increases the total score by 1.27% (p&lt;0.02). It has a significant (p&lt;0.05) effect on the following subtests:
- FlightPlanner: regression of 3.73% !
- HashSetWasm: speedup of 7.15%
- ML: speedup of 2.80% (p&lt;0.02)
- gaussian-blur: speedup of 3.72% (p&lt;0.02)
- lelab-wtb: speedup of 1.40%
- n-body-SP: speedup of 2.51%
- tagcloud-SP: speedup of 23.27% (p&lt;0.02)
- tsf-wasm: the runtime is 17.69% faster (p&lt;0.02), but there is no significant effect on the score as a whole because of a gigantic outlier in startup time.

While I don&apos;t fully understand why some benchmarks win so much more than others, and the FlightPlanner regression is a head-scratcher, overall it looks like a very clear gain.

I don&apos;t have good numbers for other machines at this point, but it unfortunately looks like more powerful machines don&apos;t benefit as much in JetStream2, even though they get the same memory reduction.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1762779</commentid>
    <comment_count>20</comment_count>
    <who name="Robin Morisset">rmorisset</who>
    <bug_when>2021-05-21 23:49:43 -0700</bug_when>
    <thetext>Last batch of performance numbers for this patch: I&apos;ve tested Speedometer 2 on both an iPhone 7 and an M1 Mac (MacBookAir10,1).

The iPhone 7 shows a 0.53% improvement overall (p&lt;0.02), with the following significant effects on subtests:
- 1.35% better on Elm
- 0.61% better on EmberJS-Debug
- 0.81% better on Inferno
- 1.17% better on React-Redux
- 1.05% worse (!) on Vanilla-ES2015
All of these are statistically significant at p&lt;0.02, and there is no other result significant at p&lt;0.05.
I conclude that while the effect is less dramatic than on JetStream2, there is still a clear benefit to minimizing the memory pressure caused by the compiler threads in that case.

Unfortunately, the picture on the M1 Mac is different: no effect on the overall score, and the only statistically significant effects on subtests are regressions:
- 0.27% worse on EmberJS-Debug (p&lt;0.05)
- 1.58% worse on Vanilla-ES2015-Babel-WebPack (p&lt;0.02)
- 1.20% worse on Vanilla-ES2015 (p&lt;0.02)
I have no clue of what can explain these results.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>428760</attachid>
            <date>2021-05-15 18:47:07 -0700</date>
            <delta_ts>2021-05-15 19:26:54 -0700</delta_ts>
            <desc>WIP</desc>
            <filename>patchRegisterAllocator</filename>
            <type>text/plain</type>
            <size>64221</size>
            <attacher name="Robin Morisset">rmorisset</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1JlZHVjZUxvb3BTdHJlbmd0
aC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNSZWR1Y2VMb29wU3RyZW5ndGguY3Bw
CmluZGV4IGM3OTdjZDZjMjZjOC4uNGE3NDhhNzY0MzU1IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvYjMvQjNSZWR1Y2VMb29wU3RyZW5ndGguY3BwCisrKyBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9iMy9CM1JlZHVjZUxvb3BTdHJlbmd0aC5jcHAKQEAgLTM2LDcgKzM2LDcgQEAK
ICNpbmNsdWRlICJCM1BoYXNlU2NvcGUuaCIKICNpbmNsdWRlICJCM1Byb2NlZHVyZUlubGluZXMu
aCIKICNpbmNsdWRlICJCM1ZhbHVlSW5saW5lcy5oIgotI2luY2x1ZGUgPHd0Zi9TbWFsbFB0clNl
dC5oPgorI2luY2x1ZGUgPHd0Zi9TbWFsbFNldC5oPgogI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4K
IAogbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CkBAIC0xNTksNyArMTU5LDcgQEAgcHVi
bGljOgogICAgICAgICBCYXNpY0Jsb2NrKiBsb29wRm9vdCA9IG51bGxwdHI7CiAgICAgICAgIEJh
c2ljQmxvY2sqIGxvb3BQcmVoZWFkZXIgPSBudWxscHRyOwogICAgICAgICBCYXNpY0Jsb2NrKiBs
b29wUG9zdGZvb3RlciA9IG51bGxwdHI7Ci0gICAgICAgIFNtYWxsUHRyU2V0PEJhc2ljQmxvY2sq
PiBsb29wSW5uZXJCbG9ja3M7CisgICAgICAgIFNtYWxsU2V0PEJhc2ljQmxvY2sqPiBsb29wSW5u
ZXJCbG9ja3M7CiAKICAgICAgICAgewogICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsg
aSA8IGxvb3AtPnNpemUoKTsgKytpKQpAQCAtMTcxLDggKzE3MSw4IEBAIHB1YmxpYzoKICAgICAg
ICAgICAgIGlmICghbG9vcElubmVyQmxvY2tzLmNvbnRhaW5zKHN0b3JlLT5vd25lcikpCiAgICAg
ICAgICAgICAgICAgcmV0dXJuOwogCi0gICAgICAgICAgICBTbWFsbFB0clNldDxCYXNpY0Jsb2Nr
Kj4gbG9vcEVudHJhbmNlczsKLSAgICAgICAgICAgIFNtYWxsUHRyU2V0PEJhc2ljQmxvY2sqPiBs
b29wRXhpdHM7CisgICAgICAgICAgICBTbWFsbFNldDxCYXNpY0Jsb2NrKj4gbG9vcEVudHJhbmNl
czsKKyAgICAgICAgICAgIFNtYWxsU2V0PEJhc2ljQmxvY2sqPiBsb29wRXhpdHM7CiAgICAgICAg
ICAgICBmb3IgKGF1dG8qIGJsb2NrIDogbG9vcElubmVyQmxvY2tzKSB7CiAgICAgICAgICAgICAg
ICAgZm9yIChhdXRvIHN1Y2Nlc3NvciA6IGJsb2NrLT5zdWNjZXNzb3JzKCkpIHsKICAgICAgICAg
ICAgICAgICAgICAgaWYgKCFsb29wSW5uZXJCbG9ja3MuY29udGFpbnMoc3VjY2Vzc29yLmJsb2Nr
KCkpKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJBbGxvY2F0
ZVJlZ2lzdGVyc0J5R3JhcGhDb2xvcmluZy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMv
YWlyL0FpckFsbG9jYXRlUmVnaXN0ZXJzQnlHcmFwaENvbG9yaW5nLmNwcAppbmRleCBkMDE2OWFl
MDc0ZDcuLjZlYmE1MzE3MmFiOCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Iz
L2Fpci9BaXJBbGxvY2F0ZVJlZ2lzdGVyc0J5R3JhcGhDb2xvcmluZy5jcHAKKysrIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJBbGxvY2F0ZVJlZ2lzdGVyc0J5R3JhcGhDb2xvcmlu
Zy5jcHAKQEAgLTM3LDYgKzM3LDkgQEAKICNpbmNsdWRlICJBaXJQaGFzZVNjb3BlLmgiCiAjaW5j
bHVkZSAiQWlyVG1wV2lkdGhJbmxpbmVzLmgiCiAjaW5jbHVkZSAiQWlyVXNlQ291bnRzLmgiCisj
aW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4KKyNpbmNsdWRlIDx3dGYvU21hbGxTZXQuaD4KKyNpbmNs
dWRlIDx3dGYvVmVjdG9yLmg+CiAKIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeyBuYW1l
c3BhY2UgQWlyIHsKIApAQCAtNDYsMTA0ICs0OSwyMDggQEAgc3RhdGljIGNvbnN0ZXhwciBib29s
IGRlYnVnID0gZmFsc2U7CiBzdGF0aWMgY29uc3RleHByIGJvb2wgdHJhY2VEZWJ1ZyA9IGZhbHNl
Owogc3RhdGljIGNvbnN0ZXhwciBib29sIHJlcG9ydFN0YXRzID0gZmFsc2U7CiAKLS8vIEludGVy
ZmVyZW5jZSBlZGdlcyBhcmUgbm90IGRpcmVjdGVkLiBBbiBlZGdlIGJldHdlZW4gYW55IHR3byBU
bXBzIGlzIHJlcHJlc2VudGVkCi0vLyBieSB0aGUgY29uY2F0ZW5hdGVkIHZhbHVlcyBvZiB0aGUg
c21hbGxlc3QgVG1wIGZvbGxvd2VkIGJ5IHRoZSBiaWdnZXIgVG1wLgotLy8gV2UgaGF2ZSBhIHRl
bXBsYXRlZCB2ZXJzaW9uIHRvIHN1cHBvcnQgMTYgYml0IGFuZCBhIDMyIGJpdCBpbXBsZW1lbnRh
dGlvbnMKLS8vIHNpbmNlIHRoZSBudW1iZXIgb2YgZW50cmllcyBpbiBhbiBpbnRlcmZlcmVuY2Ug
dGFibGUgaXMgTyhOXjIpLgotLy8gSW4gbW9zdCBjYXNlcywgd2UgdXNlIHRoZSAxNiBiaXQgZmxh
dm9yLCB0aHVzIHNhdmluZyBoYWxmIHRoZSBtZW1vcnkKLS8vIHdpdGggYSBzaW5nbGUgaW1wbGVt
ZW50YXRpb24uCi10ZW1wbGF0ZSA8dHlwZW5hbWUgSW5kZXhJbXBsVHlwZSwgdHlwZW5hbWUgUGFp
clN0b3JhZ2VUeXBlPgotY2xhc3MgSW50ZXJmZXJlbmNlRWRnZSB7Ci0gICAgc3RhdGljX2Fzc2Vy
dChzaXplb2YoSW5kZXhJbXBsVHlwZSkgKiAyID09IHNpemVvZihQYWlyU3RvcmFnZVR5cGUpKTsK
LSAgICBjb25zdCB1bnNpZ25lZCBTaGlmdEFtb3VudCA9IHNpemVvZihJbmRleEltcGxUeXBlKSAq
IDg7Ci0gICAgY29uc3QgUGFpclN0b3JhZ2VUeXBlIEluZGV4TWFzayA9IHN0ZDo6bnVtZXJpY19s
aW1pdHM8SW5kZXhJbXBsVHlwZT46Om1heCgpOwordGVtcGxhdGUgPHR5cGVuYW1lIEluZGV4VHlw
ZT4KK2NsYXNzIEludGVyZmVyZW5jZUhhc2hTZXQgeworcHVibGljOgorICAgIGJvb2wgY29udGFp
bnMoSW5kZXhUeXBlIHUsIEluZGV4VHlwZSB2KQorICAgIHsKKyAgICAgICAgaWYgKHYgPCB1KQor
ICAgICAgICAgICAgc3RkOjpzd2FwKHUsIHYpOworICAgICAgICByZXR1cm4gbV9zZXQuY29udGFp
bnMoeyB1LCB2IH0pOworICAgIH0KIAotcHJvdGVjdGVkOgotICAgIHVzaW5nIEluZGV4VHlwZSA9
IHVuc2lnbmVkOworICAgIGJvb2wgYWRkQW5kUmV0dXJuSXNOZXdFbnRyeShJbmRleFR5cGUgdSwg
SW5kZXhUeXBlIHYpCisgICAgeworICAgICAgICBpZiAodiA8IHUpCisgICAgICAgICAgICBzdGQ6
OnN3YXAodSwgdik7CisgICAgICAgIHJldHVybiBtX3NldC5hZGQoeyB1LCB2IH0pLmlzTmV3RW50
cnk7CisgICAgfQorCisgICAgdm9pZCBjbGVhcigpCisgICAgeworICAgICAgICBtX3NldC5jbGVh
cigpOworICAgIH0KIAorICAgIHZvaWQgc2V0TWF4VG1wSW5kZXgodW5zaWduZWQgbikKKyAgICB7
CisgICAgICAgIEFTU0VSVF9VTlVTRUQobiwgbiA8IHN0ZDo6bnVtZXJpY19saW1pdHM8SW5kZXhU
eXBlPjo6bWF4KCkpOworICAgIH0KKworICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBGdW5jdG9yPgor
ICAgIHZvaWQgZm9yRWFjaChjb25zdCBGdW5jdG9yJiBmdW5jdG9yKQorICAgIHsKKyAgICAgICAg
Zm9yIChhdXRvIGVkZ2UgOiBtX3NldCkKKyAgICAgICAgICAgIGZ1bmN0b3IoZWRnZSk7CisgICAg
fQorCisgICAgdW5zaWduZWQgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fc2V0LnNpemUoKTsgfQor
Citwcml2YXRlOgorICAgIC8vIEludGVyZmVyZW5jZSBlZGdlcyBhcmUgbm90IGRpcmVjdGVkLiBB
biBlZGdlIGJldHdlZW4gYW55IHR3byBUbXBzIGlzIHJlcHJlc2VudGVkCisgICAgLy8gYnkgdGhl
IGNvbmNhdGVuYXRlZCB2YWx1ZXMgKHRocm91Z2ggVG1wTWFwcGVyKSBvZiB0aGUgc21hbGxlc3Qg
VG1wIGZvbGxvd2VkIGJ5IHRoZSBiaWdnZXIgVG1wLgorICAgIEhhc2hTZXQ8c3RkOjpwYWlyPElu
ZGV4VHlwZSwgSW5kZXhUeXBlPiA+IG1fc2V0OworfTsKKwordGVtcGxhdGUgPHR5cGVuYW1lIFQs
IHR5cGVuYW1lIEluZGV4VHlwZT4KK2NsYXNzIEludGVyZmVyZW5jZVZlY3RvciB7CiBwdWJsaWM6
Ci0gICAgc3RydWN0IEludGVyZmVyZW5jZUVkZ2VIYXNoIHsKLSAgICAgICAgc3RhdGljIHVuc2ln
bmVkIGhhc2goY29uc3QgSW50ZXJmZXJlbmNlRWRnZTxJbmRleEltcGxUeXBlLCBQYWlyU3RvcmFn
ZVR5cGU+JiBrZXkpIHsgcmV0dXJuIGtleS5oYXNoKCk7IH0KLSAgICAgICAgc3RhdGljIGJvb2wg
ZXF1YWwoY29uc3QgSW50ZXJmZXJlbmNlRWRnZTxJbmRleEltcGxUeXBlLCBQYWlyU3RvcmFnZVR5
cGU+JiBhLCBjb25zdCBJbnRlcmZlcmVuY2VFZGdlPEluZGV4SW1wbFR5cGUsIFBhaXJTdG9yYWdl
VHlwZT4mIGIpIHsgcmV0dXJuIGEgPT0gYjsgfQotICAgICAgICBzdGF0aWMgY29uc3RleHByIGJv
b2wgc2FmZVRvQ29tcGFyZVRvRW1wdHlPckRlbGV0ZWQgPSB0cnVlOwotICAgIH07Ci0gICAgdHlw
ZWRlZiBTaW1wbGVDbGFzc0hhc2hUcmFpdHM8SW50ZXJmZXJlbmNlRWRnZTxJbmRleEltcGxUeXBl
LCBQYWlyU3RvcmFnZVR5cGU+PiBJbnRlcmZlcmVuY2VFZGdlSGFzaFRyYWl0czsKKyAgICBib29s
IGNvbnRhaW5zIChJbmRleFR5cGUgdSwgSW5kZXhUeXBlIHYpCisgICAgeworICAgICAgICBpZiAo
diA8IHUpCisgICAgICAgICAgICBzdGQ6OnN3YXAodSwgdik7CisgICAgICAgIHJldHVybiBtX3Zl
Y3Rvclt1XS5jb250YWlucyh2KTsKKyAgICB9CiAKLSAgICB0eXBlZGVmIEhhc2hTZXQ8SW50ZXJm
ZXJlbmNlRWRnZTxJbmRleEltcGxUeXBlLCBQYWlyU3RvcmFnZVR5cGU+LCBJbnRlcmZlcmVuY2VF
ZGdlSGFzaCwgSW50ZXJmZXJlbmNlRWRnZUhhc2hUcmFpdHM+IEludGVyZmVyZW5jZVNldDsKKyAg
ICBib29sIGFkZEFuZFJldHVybklzTmV3RW50cnkoSW5kZXhUeXBlIHUsIEluZGV4VHlwZSB2KQor
ICAgIHsKKyAgICAgICAgaWYgKHYgPCB1KQorICAgICAgICAgICAgc3RkOjpzd2FwKHUsIHYpOwor
ICAgICAgICBib29sIGlzTmV3RW50cnkgPSBtX3ZlY3Rvclt1XS5hZGQodikuaXNOZXdFbnRyeTsK
KyAgICAgICAgbV9zaXplICs9IGlzTmV3RW50cnk7CisgICAgICAgIHJldHVybiBpc05ld0VudHJ5
OworICAgIH0KIAotICAgIEludGVyZmVyZW5jZUVkZ2UoKQorICAgIHZvaWQgY2xlYXIoKQogICAg
IHsKKyAgICAgICAgbV92ZWN0b3IuY2xlYXIoKTsKKyAgICAgICAgbV9zaXplID0gMDsKICAgICB9
CiAKLSAgICBJbnRlcmZlcmVuY2VFZGdlKEluZGV4VHlwZSBhLCBJbmRleFR5cGUgYikKKyAgICB2
b2lkIHNldE1heFRtcEluZGV4KHVuc2lnbmVkIG4pCiAgICAgewotICAgICAgICBBU1NFUlQoYSk7
Ci0gICAgICAgIEFTU0VSVChiKTsKLSAgICAgICAgQVNTRVJUKGEgPCBzdGQ6Om51bWVyaWNfbGlt
aXRzPEluZGV4SW1wbFR5cGU+OjptYXgoKSk7Ci0gICAgICAgIEFTU0VSVChiIDwgc3RkOjpudW1l
cmljX2xpbWl0czxJbmRleEltcGxUeXBlPjo6bWF4KCkpOwotICAgICAgICBBU1NFUlRfV0lUSF9N
RVNTQUdFKGEgIT0gYiwgIkEgVG1wIGNhbiBuZXZlciBpbnRlcmZlcmUgd2l0aCBpdHNlbGYuIERv
aW5nIHNvIHdvdWxkIGZvcmNlIGl0IHRvIGJlIHRoZSBzdXBlcnBvc2l0aW9uIG9mIHR3byByZWdp
c3RlcnMuIik7CisgICAgICAgIEFTU0VSVChuIDwgc3RkOjpudW1lcmljX2xpbWl0czxJbmRleFR5
cGU+OjptYXgoKSk7CisgICAgICAgIG1fdmVjdG9yLnJlc2l6ZShuKTsKKyAgICB9CiAKLSAgICAg
ICAgaWYgKGIgPCBhKQotICAgICAgICAgICAgc3RkOjpzd2FwKGEsIGIpOwotICAgICAgICBtX3Zh
bHVlID0gc3RhdGljX2Nhc3Q8UGFpclN0b3JhZ2VUeXBlPihhKSA8PCBTaGlmdEFtb3VudCB8IGI7
CisgICAgdGVtcGxhdGUgPHR5cGVuYW1lIEZ1bmN0b3I+CisgICAgdm9pZCBmb3JFYWNoKGNvbnN0
IEZ1bmN0b3ImIGZ1bmN0b3IpCisgICAgeworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBp
IDwgbV92ZWN0b3Iuc2l6ZSgpIDsgKytpKSB7CisgICAgICAgICAgICBmb3IgKEluZGV4VHlwZSBq
IDogbV92ZWN0b3JbaV0pCisgICAgICAgICAgICAgICAgZnVuY3Rvcih7IGksIGogfSk7CisgICAg
ICAgIH0KICAgICB9CiAKLSAgICBJbnRlcmZlcmVuY2VFZGdlKGNvbnN0IEludGVyZmVyZW5jZUVk
Z2U8SW5kZXhJbXBsVHlwZSwgUGFpclN0b3JhZ2VUeXBlPiYgb3RoZXIpCi0gICAgICAgIDogbV92
YWx1ZShvdGhlci5tX3ZhbHVlKQorICAgIHVuc2lnbmVkIHNpemUoKSBjb25zdCB7IHJldHVybiBt
X3NpemU7IH0KKworcHJpdmF0ZToKKyAgICBWZWN0b3I8VD4gbV92ZWN0b3I7CisgICAgdW5zaWdu
ZWQgbV9zaXplIHswfTsKK307CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBJbmRleFR5cGU+CitjbGFz
cyBJbnRlcmZlcmVuY2VCaXRWZWN0b3IgeworcHVibGljOgorICAgIGJvb2wgY29udGFpbnMgKElu
ZGV4VHlwZSB1LCBJbmRleFR5cGUgdikKICAgICB7CisgICAgICAgIHJldHVybiBtX2JpdFZlY3Rv
ci5xdWlja0dldChpbmRleCh1LCB2KSk7CiAgICAgfQogCisgICAgYm9vbCBhZGRBbmRSZXR1cm5J
c05ld0VudHJ5KEluZGV4VHlwZSB1LCBJbmRleFR5cGUgdikKKyAgICB7CisgICAgICAgIC8vIE5v
dGU6IHdlIGNvdWxkIGRvIG9ubHkgb25lIHF1aWNrU2V0LCBhdCB0aGUgY29zdCBvZiBvbmUgZXh0
cmEgYnJhbmNoIGluIGV2ZXJ5IGNvbnRhaW5zL2FkZEFuZFJldHVybklzTmV3RW50cnkgKHRvIGVu
Zm9yY2UgdSA8IHYpCisgICAgICAgIGJvb2wgYWxyZWFkeUluID0gbV9iaXRWZWN0b3IucXVpY2tT
ZXQoaW5kZXgodSwgdikpOworICAgICAgICBib29sIGFscmVhZHlJbjIgPSBtX2JpdFZlY3Rvci5x
dWlja1NldChpbmRleCh2LCB1KSk7CisgICAgICAgIEFTU0VSVF9VTlVTRUQoYWxyZWFkeUluMiwg
YWxyZWFkeUluID09IGFscmVhZHlJbjIpOworICAgICAgICBtX3NpemUgKz0gIWFscmVhZHlJbjsK
KyAgICAgICAgcmV0dXJuICFhbHJlYWR5SW47CisgICAgfQogCi0gICAgSW50ZXJmZXJlbmNlRWRn
ZShXVEY6Okhhc2hUYWJsZURlbGV0ZWRWYWx1ZVR5cGUpCi0gICAgICAgIDogbV92YWx1ZShzdGQ6
Om51bWVyaWNfbGltaXRzPFBhaXJTdG9yYWdlVHlwZT46Om1heCgpKQorICAgIHZvaWQgY2xlYXIo
KQogICAgIHsKKyAgICAgICAgbV9iaXRWZWN0b3IuY2xlYXJBbGwoKTsKKyAgICAgICAgbV9zaXpl
ID0gMDsKICAgICB9CiAKLSAgICBJbmRleFR5cGUgZmlyc3QoKSBjb25zdAorICAgIHZvaWQgc2V0
TWF4VG1wSW5kZXgodW5zaWduZWQgbikKICAgICB7Ci0gICAgICAgIHJldHVybiBtX3ZhbHVlID4+
IFNoaWZ0QW1vdW50ICYgSW5kZXhNYXNrOworICAgICAgICBBU1NFUlQobiA8IHN0ZDo6bnVtZXJp
Y19saW1pdHM8SW5kZXhUeXBlPjo6bWF4KCkpOworICAgICAgICBtX251bVRtcHMgPSBuOworICAg
ICAgICBtX2JpdFZlY3Rvci5lbnN1cmVTaXplKG4qbik7CiAgICAgfQogCi0gICAgSW5kZXhUeXBl
IHNlY29uZCgpIGNvbnN0CisgICAgdGVtcGxhdGUgPHR5cGVuYW1lIEZ1bmN0b3I+CisgICAgdm9p
ZCBmb3JFYWNoKGNvbnN0IEZ1bmN0b3ImIGZ1bmN0b3IpCiAgICAgewotICAgICAgICByZXR1cm4g
bV92YWx1ZSAmIEluZGV4TWFzazsKKyAgICAgICAgZm9yIChJbmRleFR5cGUgaSA9IDA7IGkgPCBt
X251bVRtcHM7ICsraSkgeworICAgICAgICAgICAgZm9yIChJbmRleFR5cGUgaiA9IGkgKyAxOyBq
IDwgbV9udW1UbXBzOyArK2opIHsKKyAgICAgICAgICAgICAgICBpZiAobV9iaXRWZWN0b3IucXVp
Y2tHZXQoaW5kZXgoaSwgaikpKQorICAgICAgICAgICAgICAgICAgICBmdW5jdG9yKHsgaSwgaiB9
KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIHVuc2lnbmVkIHNpemUo
KSBjb25zdCB7IHJldHVybiBtX3NpemU7IH0KKworcHJpdmF0ZToKKyAgICB1bnNpZ25lZCBpbmRl
eChJbmRleFR5cGUgaSwgSW5kZXhUeXBlIGopIHsKKyAgICAgICAgcmV0dXJuIGkgKiBtX251bVRt
cHMgKyBqOwogICAgIH0KIAotICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBJbnRlcmZlcmVuY2VF
ZGdlJiBvdGhlcikgY29uc3QKKyAgICBCaXRWZWN0b3IgbV9iaXRWZWN0b3I7CisgICAgdW5zaWdu
ZWQgbV9zaXplIHswfTsKKyAgICBJbmRleFR5cGUgbV9udW1UbXBzOworfTsKKworI2RlZmluZSBU
RVNUX0lOVEVSRkVSRU5DRV9TTUFMTF9TRVRfVkVDVE9SIDAKKyNpZiBURVNUX0lOVEVSRkVSRU5D
RV9TTUFMTF9TRVRfVkVDVE9SCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVSwgdHlw
ZW5hbWUgSW5kZXhUeXBlPgorY2xhc3MgSW5zdHJ1bWVudGVkSW50ZXJmZXJlbmNlR3JhcGggewor
cHVibGljOgorICAgIGJvb2wgY29udGFpbnMgKEluZGV4VHlwZSB1LCBJbmRleFR5cGUgdikKICAg
ICB7Ci0gICAgICAgIHJldHVybiBtX3ZhbHVlID09IG90aGVyLm1fdmFsdWU7CisgICAgICAgIGJv
b2wgY29udGFpbnNJbkEgPSBtX3NldEEuY29udGFpbnModSwgdik7CisgICAgICAgIGJvb2wgY29u
dGFpbnNJbkIgPSBtX3NldEIuY29udGFpbnModSwgdik7CisgICAgICAgIFJFTEVBU0VfQVNTRVJU
KGNvbnRhaW5zSW5BID09IGNvbnRhaW5zSW5CKTsKKyAgICAgICAgcmV0dXJuIGNvbnRhaW5zSW5B
OwogICAgIH0KIAotICAgIEludGVyZmVyZW5jZUVkZ2UmIG9wZXJhdG9yPShjb25zdCBJbnRlcmZl
cmVuY2VFZGdlJiBvdGhlcikKKyAgICBib29sIGFkZEFuZFJldHVybklzTmV3RW50cnkoSW5kZXhU
eXBlIHUsIEluZGV4VHlwZSB2KQogICAgIHsKLSAgICAgICAgbV92YWx1ZSA9IG90aGVyLm1fdmFs
dWU7Ci0gICAgICAgIHJldHVybiAqdGhpczsKKyAgICAgICAgYm9vbCBpc05ld0VudHJ5QSA9IG1f
c2V0QS5hZGRBbmRSZXR1cm5Jc05ld0VudHJ5KHUsIHYpOworICAgICAgICBib29sIGlzTmV3RW50
cnlCID0gbV9zZXRCLmFkZEFuZFJldHVybklzTmV3RW50cnkodSwgdik7CisgICAgICAgIFJFTEVB
U0VfQVNTRVJUKGlzTmV3RW50cnlBID09IGlzTmV3RW50cnlCKTsKKyAgICAgICAgcmV0dXJuIGlz
TmV3RW50cnlBOwogICAgIH0KLSAgICBib29sIGlzSGFzaFRhYmxlRGVsZXRlZFZhbHVlKCkgY29u
c3QKKworICAgIHZvaWQgY2xlYXIoKQogICAgIHsKLSAgICAgICAgcmV0dXJuICp0aGlzID09IElu
dGVyZmVyZW5jZUVkZ2UoV1RGOjpIYXNoVGFibGVEZWxldGVkVmFsdWUpOworICAgICAgICBtX3Nl
dEEuY2xlYXIoKTsKKyAgICAgICAgbV9zZXRCLmNsZWFyKCk7CiAgICAgfQogCi0gICAgdW5zaWdu
ZWQgaGFzaCgpIGNvbnN0CisgICAgdm9pZCBzZXRNYXhUbXBJbmRleCh1bnNpZ25lZCBuKQogICAg
IHsKLSAgICAgICAgcmV0dXJuIFdURjo6SW50SGFzaDxQYWlyU3RvcmFnZVR5cGU+OjpoYXNoKG1f
dmFsdWUpOworICAgICAgICBtX3NldEEuc2V0TWF4VG1wSW5kZXgobik7CisgICAgICAgIG1fc2V0
Qi5zZXRNYXhUbXBJbmRleChuKTsKICAgICB9CiAKLSAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0m
IG91dCkgY29uc3QKKyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgRnVuY3Rvcj4KKyAgICB2b2lkIGZv
ckVhY2goY29uc3QgRnVuY3RvciYgZnVuY3RvcikKICAgICB7Ci0gICAgICAgIG91dC5wcmludChm
aXJzdCgpLCAiPD0+Iiwgc2Vjb25kKCkpOworICAgICAgICBtX3NldEEuZm9yRWFjaChmdW5jdG9y
KTsKKyAgICB9CisKKyAgICB1bnNpZ25lZCBzaXplKCkgY29uc3QKKyAgICB7CisgICAgICAgIHVu
c2lnbmVkIHNpemVBID0gbV9zZXRBLnNpemUoKTsKKyAgICAgICAgdW5zaWduZWQgc2l6ZUIgPSBt
X3NldEIuc2l6ZSgpOworICAgICAgICBSRUxFQVNFX0FTU0VSVChzaXplQSA9PSBzaXplQik7Cisg
ICAgICAgIHJldHVybiBzaXplQTsKICAgICB9CiAKIHByaXZhdGU6Ci0gICAgUGFpclN0b3JhZ2VU
eXBlIG1fdmFsdWUgeyAwIH07CisgICAgVCBtX3NldEE7CisgICAgVSBtX3NldEI7CiB9OworI2Vu
ZGlmCiAKIC8vIFRoZSBBYnN0cmFjdENvbG9yaW5nQWxsb2NhdG9yIGRlZmluZXMgYWxsIHRoZSBj
b2RlIHRoYXQgaXMgaW5kZXBlbmRhbnQKIC8vIGZyb20gdGhlIGJhbmsgb3IgcmVnaXN0ZXIgYW5k
IGNhbiBiZSBzaGFyZWQgd2hlbiBhbGxvY2F0aW5nIHJlZ2lzdGVycy4KLXRlbXBsYXRlPHR5cGVu
YW1lIEluZGV4VHlwZSwgdHlwZW5hbWUgVG1wTWFwcGVyLCB0eXBlbmFtZSBJbnRlcmZlcmVuY2VF
ZGdlVHlwZT4KK3RlbXBsYXRlPHR5cGVuYW1lIEluZGV4VHlwZSwgdHlwZW5hbWUgSW50ZXJmZXJl
bmNlU2V0LCBCYW5rIGJhbms+CiBjbGFzcyBBYnN0cmFjdENvbG9yaW5nQWxsb2NhdG9yIHsKIHB1
YmxpYzoKLSAgICBBYnN0cmFjdENvbG9yaW5nQWxsb2NhdG9yKENvZGUmIGNvZGUsIGNvbnN0IFZl
Y3RvcjxSZWc+JiByZWdzSW5Qcmlvcml0eU9yZGVyLCBJbmRleFR5cGUgbGFzdFByZWNvbG9yZWRS
ZWdpc3RlckluZGV4LCB1bnNpZ25lZCB0bXBBcnJheVNpemUsIGNvbnN0IEhhc2hTZXQ8dW5zaWdu
ZWQ+JiB1bnNwaWxsYWJsZVRtcHMsIGNvbnN0IFVzZUNvdW50czxUbXA+JiB1c2VDb3VudHMpCisg
ICAgQWJzdHJhY3RDb2xvcmluZ0FsbG9jYXRvcihDb2RlJiBjb2RlLCBjb25zdCBWZWN0b3I8UmVn
PiYgcmVnc0luUHJpb3JpdHlPcmRlciwgSW5kZXhUeXBlIGxhc3RQcmVjb2xvcmVkUmVnaXN0ZXJJ
bmRleCwgdW5zaWduZWQgdG1wQXJyYXlTaXplLCBjb25zdCBCaXRWZWN0b3ImIHVuc3BpbGxhYmxl
VG1wcywgY29uc3QgVXNlQ291bnRzJiB1c2VDb3VudHMpCiAgICAgICAgIDogbV9yZWdzSW5Qcmlv
cml0eU9yZGVyKHJlZ3NJblByaW9yaXR5T3JkZXIpCiAgICAgICAgICwgbV9sYXN0UHJlY29sb3Jl
ZFJlZ2lzdGVySW5kZXgobGFzdFByZWNvbG9yZWRSZWdpc3RlckluZGV4KQogICAgICAgICAsIG1f
dW5zcGlsbGFibGVUbXBzKHVuc3BpbGxhYmxlVG1wcykKQEAgLTE2MCw2ICsyNjcsMTQgQEAgcHVi
bGljOgogICAgIH0KIAogcHJvdGVjdGVkOgorICAgIHVzaW5nIFRtcE1hcHBlciA9IEFic29sdXRl
VG1wTWFwcGVyPGJhbms+OworCisgICAgSW5kZXhUeXBlIHRtcFRvSW5kZXgoVG1wIHRtcCkgY29u
c3QKKyAgICB7CisgICAgICAgIHVuc2lnbmVkIGluZGV4ID0gVG1wTWFwcGVyOjphYnNvbHV0ZUlu
ZGV4KHRtcCk7CisgICAgICAgIEFTU0VSVChzdGQ6Om51bWVyaWNfbGltaXRzPEluZGV4VHlwZT46
Om1heCgpID4gaW5kZXgpOworICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8SW5kZXhUeXBlPihp
bmRleCk7CisgICAgfQogCiAgICAgdW5zaWduZWQgcmVnaXN0ZXJDb3VudCgpIGNvbnN0IHsgcmV0
dXJuIG1fcmVnc0luUHJpb3JpdHlPcmRlci5zaXplKCk7IH0KIApAQCAtMTgwLDcgKzI5NSw3IEBA
IHByb3RlY3RlZDoKIAogICAgIHZvaWQgYWRkVG9TcGlsbCh1bnNpZ25lZCB0b1NwaWxsKQogICAg
IHsKLSAgICAgICAgaWYgKG1fdW5zcGlsbGFibGVUbXBzLmNvbnRhaW5zKHRvU3BpbGwpKQorICAg
ICAgICBpZiAobV91bnNwaWxsYWJsZVRtcHMucXVpY2tHZXQodG9TcGlsbCkpCiAgICAgICAgICAg
ICByZXR1cm47CiAKICAgICAgICAgbV9zcGlsbFdvcmtsaXN0LmFkZCh0b1NwaWxsKTsKQEAgLTE5
OCwxNSArMzEzLDE1IEBAIHByb3RlY3RlZDoKICAgICAgICAgLy8gQWxsIHByZWNvbG9yZWQgcmVn
aXN0ZXJzIGhhdmUgIGFuICJpbmZpbml0ZSIgZGVncmVlLgogICAgICAgICB1bnNpZ25lZCBmaXJz
dE5vblJlZ0luZGV4ID0gbV9sYXN0UHJlY29sb3JlZFJlZ2lzdGVySW5kZXggKyAxOwogICAgICAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgZmlyc3ROb25SZWdJbmRleDsgKytpKQotICAgICAg
ICAgICAgbV9kZWdyZWVzW2ldID0gc3RkOjpudW1lcmljX2xpbWl0czx1bnNpZ25lZD46Om1heCgp
OworICAgICAgICAgICAgbV9kZWdyZWVzW2ldID0gc3RkOjpudW1lcmljX2xpbWl0czxJbmRleFR5
cGU+OjptYXgoKTsKIAotICAgICAgICBtZW1zZXQobV9kZWdyZWVzLmRhdGEoKSArIGZpcnN0Tm9u
UmVnSW5kZXgsIDAsICh0bXBBcnJheVNpemUgLSBmaXJzdE5vblJlZ0luZGV4KSAqIHNpemVvZih1
bnNpZ25lZCkpOworICAgICAgICBtZW1zZXQobV9kZWdyZWVzLmRhdGEoKSArIGZpcnN0Tm9uUmVn
SW5kZXgsIDAsICh0bXBBcnJheVNpemUgLSBmaXJzdE5vblJlZ0luZGV4KSAqIHNpemVvZihJbmRl
eFR5cGUpKTsKICAgICB9CiAKICAgICB2b2lkIGFkZEVkZ2VEaXN0aW5jdChJbmRleFR5cGUgYSwg
SW5kZXhUeXBlIGIpCiAgICAgewogICAgICAgICBBU1NFUlQoYSAhPSBiKTsKLSAgICAgICAgYm9v
bCBpc05ld0VkZ2UgPSBhZGRJbnRlcmZlcmVuY2VFZGdlKEludGVyZmVyZW5jZUVkZ2VUeXBlKGEs
IGIpKTsKKyAgICAgICAgYm9vbCBpc05ld0VkZ2UgPSBhZGRJbnRlcmZlcmVuY2VFZGdlKGEsIGIp
OwogICAgICAgICBpZiAoaXNOZXdFZGdlKSB7CiAgICAgICAgICAgICBpZiAoIWlzUHJlY29sb3Jl
ZChhKSkgewogICAgICAgICAgICAgICAgIEFTU0VSVCghbV9hZGphY2VuY3lMaXN0W2FdLmNvbnRh
aW5zKGIpKTsKQEAgLTIyNSw3ICszNDAsNyBAQCBwcm90ZWN0ZWQ6CiAgICAgYm9vbCBhZGRFZGdl
RGlzdGluY3RXaXRob3V0RGVncmVlQ2hhbmdlKEluZGV4VHlwZSBhLCBJbmRleFR5cGUgYikKICAg
ICB7CiAgICAgICAgIEFTU0VSVChhICE9IGIpOwotICAgICAgICBib29sIGlzTmV3RWRnZSA9IGFk
ZEludGVyZmVyZW5jZUVkZ2UoSW50ZXJmZXJlbmNlRWRnZVR5cGUoYSwgYikpOworICAgICAgICBi
b29sIGlzTmV3RWRnZSA9IGFkZEludGVyZmVyZW5jZUVkZ2UoYSwgYik7CiAgICAgICAgIGlmIChp
c05ld0VkZ2UpIHsKICAgICAgICAgICAgIGlmICghaXNQcmVjb2xvcmVkKGEpKSB7CiAgICAgICAg
ICAgICAgICAgQVNTRVJUKCFtX2FkamFjZW5jeUxpc3RbYV0uY29udGFpbnMoYikpOwpAQCAtMzQw
LDcgKzQ1NSw3IEBAIHByb3RlY3RlZDoKICAgICAgICAgICAgIGlmICghaXNQcmVjb2xvcmVkKGFk
amFjZW50VG1wSW5kZXgpCiAgICAgICAgICAgICAgICAgJiYgIWhhc0JlZW5TaW1wbGlmaWVkKGFk
amFjZW50VG1wSW5kZXgpCiAgICAgICAgICAgICAgICAgJiYgbV9kZWdyZWVzW2FkamFjZW50VG1w
SW5kZXhdID49IHJlZ2lzdGVyQ291bnQoKQotICAgICAgICAgICAgICAgICYmICFoYXNJbnRlcmZl
cmVuY2VFZGdlKEludGVyZmVyZW5jZUVkZ2VUeXBlKHUsIGFkamFjZW50VG1wSW5kZXgpKSkKKyAg
ICAgICAgICAgICAgICAmJiAhaGFzSW50ZXJmZXJlbmNlRWRnZSh1LCBhZGphY2VudFRtcEluZGV4
KSkKICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIH0KICAgICAgICAgcmV0
dXJuIHRydWU7CkBAIC0zNzUsNTIgKzQ5MCw0MSBAQCBwcm90ZWN0ZWQ6CiAgICAgICAgIGF1dG8g
aXRlcmF0b3IgPSBtX3NwaWxsV29ya2xpc3QuYmVnaW4oKTsKIAogICAgICAgICBSRUxFQVNFX0FT
U0VSVF9XSVRIX01FU1NBR0UoaXRlcmF0b3IgIT0gbV9zcGlsbFdvcmtsaXN0LmVuZCgpLCAic2Vs
ZWN0U3BpbGwoKSBjYWxsZWQgd2hlbiB0aGVyZSB3YXMgbm8gc3BpbGwuIik7Ci0gICAgICAgIFJF
TEVBU0VfQVNTRVJUX1dJVEhfTUVTU0FHRSghbV91bnNwaWxsYWJsZVRtcHMuY29udGFpbnMoKml0
ZXJhdG9yKSwgInRyeWluZyB0byBzcGlsbCB1bnNwaWxsYWJsZSB0bXAiKTsKLQotICAgICAgICAv
LyBIaWdoZXIgc2NvcmUgbWVhbnMgbW9yZSBkZXNpcmFibGUgdG8gc3BpbGwuIExvd2VyIHNjb3Jl
cyBtYXhpbWl6ZSB0aGUgbGlrZWxpaG9vZCB0aGF0IGEgdG1wCi0gICAgICAgIC8vIGdldHMgYSBy
ZWdpc3Rlci4KLSAgICAgICAgYXV0byBzY29yZSA9IFsmXSAoVG1wIHRtcCkgLT4gZG91YmxlIHsK
LSAgICAgICAgICAgIC8vIEFpciBleHBvc2VzIHRoZSBjb25jZXB0IG9mICJmYXN0IHRtcHMiLCBh
bmQgd2UgaW50ZXJwcmV0IHRoYXQgdG8gbWVhbiB0aGF0IHRoZSB0bXAKLSAgICAgICAgICAgIC8v
IHNob3VsZCBhbHdheXMgYmUgaW4gYSByZWdpc3Rlci4KLSAgICAgICAgICAgIGlmIChtX2NvZGUu
aXNGYXN0VG1wKHRtcCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgICAgICAK
LSAgICAgICAgICAgIC8vIEFsbCBlbHNlIGJlaW5nIGVxdWFsLCB0aGUgc2NvcmUgc2hvdWxkIGJl
IGRpcmVjdGx5IHJlbGF0ZWQgdG8gdGhlIGRlZ3JlZS4KLSAgICAgICAgICAgIGRvdWJsZSBkZWdy
ZWUgPSBzdGF0aWNfY2FzdDxkb3VibGU+KG1fZGVncmVlc1tUbXBNYXBwZXI6OmFic29sdXRlSW5k
ZXgodG1wKV0pOwotCi0gICAgICAgICAgICAvLyBBbGwgZWxzZSBiZWluZyBlcXVhbCwgdGhlIHNj
b3JlIHNob3VsZCBiZSBpbnZlcnNlbHkgcmVsYXRlZCB0byB0aGUgbnVtYmVyIG9mIHdhcm0gdXNl
cyBhbmQKLSAgICAgICAgICAgIC8vIGRlZnMuCi0gICAgICAgICAgICBjb25zdCBVc2VDb3VudHM8
VG1wPjo6Q291bnRzKiBjb3VudHMgPSBtX3VzZUNvdW50c1t0bXBdOwotICAgICAgICAgICAgaWYg
KCFjb3VudHMpCi0gICAgICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bnVtZXJpY19saW1pdHM8ZG91
YmxlPjo6aW5maW5pdHkoKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgZG91YmxlIHVzZXMg
PSBjb3VudHMtPm51bVdhcm1Vc2VzICsgY291bnRzLT5udW1EZWZzOworICAgICAgICBSRUxFQVNF
X0FTU0VSVF9XSVRIX01FU1NBR0UoIW1fdW5zcGlsbGFibGVUbXBzLmdldCgqaXRlcmF0b3IpLCAi
dHJ5aW5nIHRvIHNwaWxsIHVuc3BpbGxhYmxlIHRtcCIpOwogCi0gICAgICAgICAgICAvLyBJZiBp
dCdzIGEgY29uc3RhbnQsIHRoZW4gaXQncyBub3QgYXMgYmFkIHRvIHNwaWxsLiBXZSBjYW4gcmVt
YXRlcmlhbGl6ZSBpdCBpbiBtYW55Ci0gICAgICAgICAgICAvLyBjYXNlcy4KLSAgICAgICAgICAg
IGlmIChjb3VudHMtPm51bUNvbnN0RGVmcyA9PSAxICYmIGNvdW50cy0+bnVtRGVmcyA9PSAxKQot
ICAgICAgICAgICAgICAgIHVzZXMgLz0gMjsKKyAgICAgICAgSW5kZXhUeXBlIHZpY3RpbUluZGV4
ID0gKml0ZXJhdG9yOworICAgICAgICBmbG9hdCBtYXhTY29yZSA9IDA7CiAKLSAgICAgICAgICAg
IHJldHVybiBkZWdyZWUgLyB1c2VzOwotICAgICAgICB9OworICAgICAgICBmb3IgKDtpdGVyYXRv
ciAhPSBtX3NwaWxsV29ya2xpc3QuZW5kKCk7ICsraXRlcmF0b3IpIHsKKyAgICAgICAgICAgIElu
ZGV4VHlwZSBpbmRleCA9ICppdGVyYXRvcjsKKyAgICAgICAgICAgIFRtcCB0bXAgPSBUbXBNYXBw
ZXI6OnRtcEZyb21BYnNvbHV0ZUluZGV4KGluZGV4KTsKIAotICAgICAgICBhdXRvIHZpY3RpbUl0
ZXJhdG9yID0gaXRlcmF0b3I7Ci0gICAgICAgIGRvdWJsZSBtYXhTY29yZSA9IHNjb3JlKFRtcE1h
cHBlcjo6dG1wRnJvbUFic29sdXRlSW5kZXgoKml0ZXJhdG9yKSk7CisgICAgICAgICAgICBmbG9h
dCB1c2VzID0gbV91c2VDb3VudHMubnVtV2FybVVzZXNBbmREZWZzPGJhbms+KGluZGV4KTsKKyAg
ICAgICAgICAgIGlmICh1c2VzID09IDApIHsKKyAgICAgICAgICAgICAgICB2aWN0aW1JbmRleCA9
IGluZGV4OworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorCisgICAgICAg
ICAgICAvLyBIaWdoZXIgc2NvcmUgbWVhbnMgbW9yZSBkZXNpcmFibGUgdG8gc3BpbGwuIExvd2Vy
IHNjb3JlcyBtYXhpbWl6ZSB0aGUgbGlrZWxpaG9vZCB0aGF0IGEgdG1wCisgICAgICAgICAgICAv
LyBnZXRzIGEgcmVnaXN0ZXIuCisgICAgICAgICAgICBmbG9hdCBkZWdyZWUgPSBzdGF0aWNfY2Fz
dDxmbG9hdD4obV9kZWdyZWVzW2luZGV4XSk7CisgICAgICAgICAgICBmbG9hdCB0bXBTY29yZSA9
IGRlZ3JlZSAvIHVzZXM7CisKKyAgICAgICAgICAgIC8vIElmIGl0J3MgYSBjb25zdGFudCwgdGhl
biBpdCdzIG5vdCBhcyBiYWQgdG8gc3BpbGwuIFdlIGNhbiByZW1hdGVyaWFsaXplIGl0IGluIG1h
bnkKKyAgICAgICAgICAgIC8vIGNhc2VzLgorICAgICAgICAgICAgaWYgKG1fdXNlQ291bnRzLmlz
Q29uc3REZWY8YmFuaz4oaW5kZXgpKQorICAgICAgICAgICAgICAgIHRtcFNjb3JlICo9IDI7CiAK
LSAgICAgICAgKytpdGVyYXRvcjsKLSAgICAgICAgZm9yICg7aXRlcmF0b3IgIT0gbV9zcGlsbFdv
cmtsaXN0LmVuZCgpOyArK2l0ZXJhdG9yKSB7Ci0gICAgICAgICAgICBkb3VibGUgdG1wU2NvcmUg
PSBzY29yZShUbXBNYXBwZXI6OnRtcEZyb21BYnNvbHV0ZUluZGV4KCppdGVyYXRvcikpOwogICAg
ICAgICAgICAgaWYgKHRtcFNjb3JlID4gbWF4U2NvcmUpIHsKLSAgICAgICAgICAgICAgICBBU1NF
UlQoIW1fdW5zcGlsbGFibGVUbXBzLmNvbnRhaW5zKCppdGVyYXRvcikpOwotICAgICAgICAgICAg
ICAgIHZpY3RpbUl0ZXJhdG9yID0gaXRlcmF0b3I7CisgICAgICAgICAgICAgICAgdmljdGltSW5k
ZXggPSBpbmRleDsKICAgICAgICAgICAgICAgICBtYXhTY29yZSA9IHRtcFNjb3JlOwogICAgICAg
ICAgICAgfQogICAgICAgICB9CiAKLSAgICAgICAgSW5kZXhUeXBlIHZpY3RpbUluZGV4ID0gKnZp
Y3RpbUl0ZXJhdG9yOworICAgICAgICBBU1NFUlQoIW1fdW5zcGlsbGFibGVUbXBzLmdldCh2aWN0
aW1JbmRleCkpOworICAgICAgICBBU1NFUlQoIWlzUHJlY29sb3JlZCh2aWN0aW1JbmRleCkpOwog
ICAgICAgICBpZiAodHJhY2VEZWJ1ZykKICAgICAgICAgICAgIGRhdGFMb2dMbigiU2VsZWN0aW5n
IHNwaWxsICIsIHZpY3RpbUluZGV4KTsKLSAgICAgICAgQVNTRVJUKCFpc1ByZWNvbG9yZWQodmlj
dGltSW5kZXgpKTsKICAgICAgICAgcmV0dXJuIHZpY3RpbUluZGV4OwogICAgIH0KIApAQCAtNTEy
LDE0ICs2MTYsMTQgQEAgcHJvdGVjdGVkOgogICAgICAgICAgICAgbV9jb2xvcmVkVG1wLmNsZWFy
KCk7CiAgICAgfQogCi0gICAgYm9vbCBhZGRJbnRlcmZlcmVuY2VFZGdlKEludGVyZmVyZW5jZUVk
Z2VUeXBlIGVkZ2UpCisgICAgYm9vbCBhZGRJbnRlcmZlcmVuY2VFZGdlKEluZGV4VHlwZSB1LCBJ
bmRleFR5cGUgdikKICAgICB7Ci0gICAgICAgIHJldHVybiBtX2ludGVyZmVyZW5jZUVkZ2VzLmFk
ZChlZGdlKS5pc05ld0VudHJ5OworICAgICAgICByZXR1cm4gbV9pbnRlcmZlcmVuY2VFZGdlcy5h
ZGRBbmRSZXR1cm5Jc05ld0VudHJ5KHUsIHYpOwogICAgIH0KIAotICAgIGJvb2wgaGFzSW50ZXJm
ZXJlbmNlRWRnZShJbnRlcmZlcmVuY2VFZGdlVHlwZSBlZGdlKQorICAgIGJvb2wgaGFzSW50ZXJm
ZXJlbmNlRWRnZShJbmRleFR5cGUgdSwgSW5kZXhUeXBlIHYpCiAgICAgewotICAgICAgICByZXR1
cm4gbV9pbnRlcmZlcmVuY2VFZGdlcy5jb250YWlucyhlZGdlKTsKKyAgICAgICAgcmV0dXJuIG1f
aW50ZXJmZXJlbmNlRWRnZXMuY29udGFpbnModSwgdik7CiAgICAgfQogCiAgICAgdm9pZCBjbGVh
ckludGVyZmVyZW5jZUVkZ2VzKCkKQEAgLTUzMiwxMCArNjM2LDExIEBAIHByb3RlY3RlZDoKICAg
ICAgICAgb3V0LnByaW50KCJncmFwaCBJbnRlcmZlcmVuY2VHcmFwaCB7IFxuIik7CiAKICAgICAg
ICAgSGFzaFNldDxUbXA+IHRtcHNXaXRoSW50ZXJmZXJlbmNlczsKLSAgICAgICAgZm9yIChjb25z
dCBhdXRvJiBlZGdlIDogbV9pbnRlcmZlcmVuY2VFZGdlcykgewotICAgICAgICAgICAgdG1wc1dp
dGhJbnRlcmZlcmVuY2VzLmFkZChUbXBNYXBwZXI6OnRtcEZyb21BYnNvbHV0ZUluZGV4KGVkZ2Uu
Zmlyc3QoKSkpOwotICAgICAgICAgICAgdG1wc1dpdGhJbnRlcmZlcmVuY2VzLmFkZChUbXBNYXBw
ZXI6OnRtcEZyb21BYnNvbHV0ZUluZGV4KGVkZ2Uuc2Vjb25kKCkpKTsKLSAgICAgICAgfQorCisg
ICAgICAgIG1faW50ZXJmZXJlbmNlRWRnZXMuZm9yRWFjaChbJnRtcHNXaXRoSW50ZXJmZXJlbmNl
c10gKHN0ZDo6cGFpcjxJbmRleFR5cGUsIEluZGV4VHlwZT4gZWRnZSkgeworICAgICAgICAgICAg
dG1wc1dpdGhJbnRlcmZlcmVuY2VzLmFkZChUbXBNYXBwZXI6OnRtcEZyb21BYnNvbHV0ZUluZGV4
KGVkZ2UuZmlyc3QpKTsKKyAgICAgICAgICAgIHRtcHNXaXRoSW50ZXJmZXJlbmNlcy5hZGQoVG1w
TWFwcGVyOjp0bXBGcm9tQWJzb2x1dGVJbmRleChlZGdlLnNlY29uZCkpOworICAgICAgICB9KTsK
IAogICAgICAgICBmb3IgKGNvbnN0IGF1dG8mIHRtcCA6IHRtcHNXaXRoSW50ZXJmZXJlbmNlcykg
ewogICAgICAgICAgICAgdW5zaWduZWQgdG1wSW5kZXggPSBUbXBNYXBwZXI6OmFic29sdXRlSW5k
ZXgodG1wKTsKQEAgLTU0NSwyMCArNjUwLDIxIEBAIHByb3RlY3RlZDoKICAgICAgICAgICAgICAg
ICBvdXQucHJpbnQoIiAgICAiLCB0bXAuaW50ZXJuYWxWYWx1ZSgpLCAiIFtsYWJlbD1cIiIsIHRt
cCwgIlwiXTtcbiIpOwogICAgICAgICB9CiAKLSAgICAgICAgZm9yIChjb25zdCBhdXRvJiBlZGdl
IDogbV9pbnRlcmZlcmVuY2VFZGdlcykKLSAgICAgICAgICAgIG91dC5wcmludCgiICAgICIsIGVk
Z2UuZmlyc3QoKSwgIiAtLSAiLCBlZGdlLnNlY29uZCgpLCAiO1xuIik7CisgICAgICAgIG1faW50
ZXJmZXJlbmNlRWRnZXMuZm9yRWFjaChbJm91dF0gKHN0ZDo6cGFpcjxJbmRleFR5cGUsIEluZGV4
VHlwZT4gZWRnZSkgeworICAgICAgICAgICAgb3V0LnByaW50KCIgICAgIiwgZWRnZS5maXJzdCwg
IiAtLSAiLCBlZGdlLnNlY29uZCwgIjtcbiIpOworICAgICAgICB9KTsKICAgICAgICAgb3V0LnBy
aW50KCJ9XG4iKTsKICAgICB9CiAKICAgICBWZWN0b3I8UmVnPiBtX3JlZ3NJblByaW9yaXR5T3Jk
ZXI7CiAgICAgSW5kZXhUeXBlIG1fbGFzdFByZWNvbG9yZWRSZWdpc3RlckluZGV4IHsgMCB9Owog
Ci0gICAgdHlwZW5hbWUgSW50ZXJmZXJlbmNlRWRnZVR5cGU6OkludGVyZmVyZW5jZVNldCBtX2lu
dGVyZmVyZW5jZUVkZ2VzOworICAgIEludGVyZmVyZW5jZVNldCBtX2ludGVyZmVyZW5jZUVkZ2Vz
OwogCiAgICAgVmVjdG9yPFZlY3RvcjxJbmRleFR5cGUsIDAsIFVuc2FmZVZlY3Rvck92ZXJmbG93
LCA0PiwgMCwgVW5zYWZlVmVjdG9yT3ZlcmZsb3c+IG1fYWRqYWNlbmN5TGlzdDsKICAgICBWZWN0
b3I8SW5kZXhUeXBlLCAwLCBVbnNhZmVWZWN0b3JPdmVyZmxvdz4gbV9kZWdyZWVzOwogCi0gICAg
dXNpbmcgSW5kZXhUeXBlU2V0ID0gSGFzaFNldDxJbmRleFR5cGUsIERlZmF1bHRIYXNoPEluZGV4
VHlwZT4sIFdURjo6VW5zaWduZWRXaXRoWmVyb0tleUhhc2hUcmFpdHM8SW5kZXhUeXBlPj47Cisg
ICAgdXNpbmcgSW5kZXhUeXBlU2V0ID0gU21hbGxTZXQ8SW5kZXhUeXBlLCBJbnRIYXNoPEluZGV4
VHlwZT4+OwogCiAgICAgSGFzaE1hcDxJbmRleFR5cGUsIEluZGV4VHlwZVNldCwgRGVmYXVsdEhh
c2g8SW5kZXhUeXBlPiwgV1RGOjpVbnNpZ25lZFdpdGhaZXJvS2V5SGFzaFRyYWl0czxJbmRleFR5
cGU+PiBtX2JpYXNlczsKIApAQCAtNTcxLDcgKzY3Nyw3IEBAIHByb3RlY3RlZDoKICAgICBWZWN0
b3I8TW92ZU9wZXJhbmRzLCAwLCBVbnNhZmVWZWN0b3JPdmVyZmxvdz4gbV9jb2FsZXNjaW5nQ2Fu
ZGlkYXRlczsKIAogICAgIC8vIExpc3Qgb2YgZXZlcnkgbW92ZSBpbnN0cnVjdGlvbiBhc3NvY2lh
dGVkIHdpdGggYSBUbXAuCi0gICAgVmVjdG9yPEluZGV4VHlwZVNldD4gbV9tb3ZlTGlzdDsKKyAg
ICBWZWN0b3I8U21hbGxTZXQ8dW5zaWduZWQsIEludEhhc2g8SW5kZXhUeXBlPj4+IG1fbW92ZUxp
c3Q7CiAKICAgICAvLyBDb2xvcnMuCiAgICAgVmVjdG9yPFJlZywgMCwgVW5zYWZlVmVjdG9yT3Zl
cmZsb3c+IG1fY29sb3JlZFRtcDsKQEAgLTU5NSwxNyArNzAxLDE4IEBAIHByb3RlY3RlZDoKICAg
ICAvLyBUaGUgbWFwcGluZyBvZiBUbXAgdG8gdGhlaXIgYWxpYXMgZm9yIE1vdmVzIHRoYXQgYXJl
IGFsd2F5cyBjb2FsZXNjaW5nIHJlZ2FyZGxlc3Mgb2Ygc3BpbGxpbmcuCiAgICAgVmVjdG9yPElu
ZGV4VHlwZSwgMCwgVW5zYWZlVmVjdG9yT3ZlcmZsb3c+IG1fY29hbGVzY2VkVG1wc0F0U3BpbGw7
CiAKLSAgICBjb25zdCBIYXNoU2V0PHVuc2lnbmVkPiYgbV91bnNwaWxsYWJsZVRtcHM7Ci0gICAg
Y29uc3QgVXNlQ291bnRzPFRtcD4mIG1fdXNlQ291bnRzOworICAgIGNvbnN0IEJpdFZlY3RvciYg
bV91bnNwaWxsYWJsZVRtcHM7CisgICAgY29uc3QgVXNlQ291bnRzJiBtX3VzZUNvdW50czsKICAg
ICBDb2RlJiBtX2NvZGU7CiAKICAgICBWZWN0b3I8VG1wLCA0PiBtX3Bpbm5lZFJlZ3M7CiB9Owog
Ci10ZW1wbGF0ZSA8dHlwZW5hbWUgSW5kZXhUeXBlLCB0eXBlbmFtZSBUbXBNYXBwZXIsIHR5cGVu
YW1lIEludGVyZmVyZW5jZUVkZ2U+Ci1jbGFzcyBCcmlnZ3MgOiBwdWJsaWMgQWJzdHJhY3RDb2xv
cmluZ0FsbG9jYXRvcjxJbmRleFR5cGUsIFRtcE1hcHBlciwgSW50ZXJmZXJlbmNlRWRnZT4gewot
ICAgIHVzaW5nIEJhc2UgPSBBYnN0cmFjdENvbG9yaW5nQWxsb2NhdG9yPEluZGV4VHlwZSwgVG1w
TWFwcGVyLCBJbnRlcmZlcmVuY2VFZGdlPjsKK3RlbXBsYXRlIDx0eXBlbmFtZSBJbmRleFR5cGUs
IHR5cGVuYW1lIEludGVyZmVyZW5jZVNldCwgQmFuayBiYW5rPgorY2xhc3MgQnJpZ2dzIDogcHVi
bGljIEFic3RyYWN0Q29sb3JpbmdBbGxvY2F0b3I8SW5kZXhUeXBlLCBJbnRlcmZlcmVuY2VTZXQs
IGJhbms+IHsKKyAgICB1c2luZyBCYXNlID0gQWJzdHJhY3RDb2xvcmluZ0FsbG9jYXRvcjxJbmRl
eFR5cGUsIEludGVyZmVyZW5jZVNldCwgYmFuaz47CiBwcm90ZWN0ZWQ6CisgICAgdXNpbmcgVG1w
TWFwcGVyID0gdHlwZW5hbWUgQmFzZTo6VG1wTWFwcGVyOwogICAgIHVzaW5nIEJhc2U6Om1faXNP
blNlbGVjdFN0YWNrOwogICAgIHVzaW5nIEJhc2U6Om1fc2VsZWN0U3RhY2s7CiAgICAgdXNpbmcg
QmFzZTo6bV9zaW1wbGlmeVdvcmtsaXN0OwpAQCAtNjM1LDExICs3NDIsMTIgQEAgcHJvdGVjdGVk
OgogICAgIHVzaW5nIEJhc2U6Omhhc0JlZW5TaW1wbGlmaWVkOwogICAgIHVzaW5nIEJhc2U6OmFk
ZFRvU3BpbGw7CiAgICAgdXNpbmcgQmFzZTo6YWRkQmlhczsKKyAgICB1c2luZyBCYXNlOjptX2lu
dGVyZmVyZW5jZUVkZ2VzOwogICAgIHVzaW5nIEJhc2U6Om1fcGlubmVkUmVnczsKICAgICB1c2lu
ZyBCYXNlOjptX3JlZ3NJblByaW9yaXR5T3JkZXI7CiAKIHB1YmxpYzoKLSAgICBCcmlnZ3MoQ29k
ZSYgY29kZSwgY29uc3QgVmVjdG9yPFJlZz4mIHJlZ3NJblByaW9yaXR5T3JkZXIsIEluZGV4VHlw
ZSBsYXN0UHJlY29sb3JlZFJlZ2lzdGVySW5kZXgsIHVuc2lnbmVkIHRtcEFycmF5U2l6ZSwgY29u
c3QgSGFzaFNldDx1bnNpZ25lZD4mIHVuc3BpbGxhYmxlVG1wcywgY29uc3QgVXNlQ291bnRzPFRt
cD4mIHVzZUNvdW50cykKKyAgICBCcmlnZ3MoQ29kZSYgY29kZSwgY29uc3QgVmVjdG9yPFJlZz4m
IHJlZ3NJblByaW9yaXR5T3JkZXIsIEluZGV4VHlwZSBsYXN0UHJlY29sb3JlZFJlZ2lzdGVySW5k
ZXgsIHVuc2lnbmVkIHRtcEFycmF5U2l6ZSwgY29uc3QgQml0VmVjdG9yJiB1bnNwaWxsYWJsZVRt
cHMsIGNvbnN0IFVzZUNvdW50cyYgdXNlQ291bnRzKQogICAgICAgICA6IEJhc2UoY29kZSwgcmVn
c0luUHJpb3JpdHlPcmRlciwgbGFzdFByZWNvbG9yZWRSZWdpc3RlckluZGV4LCB0bXBBcnJheVNp
emUsIHVuc3BpbGxhYmxlVG1wcywgdXNlQ291bnRzKQogICAgIHsKICAgICB9CkBAIC02OTEsNyAr
Nzk5LDcgQEAgcHVibGljOgogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICB1bnNp
Z25lZCBkZWdyZWUgPSBtX2RlZ3JlZXNbaV07CiAgICAgICAgICAgICAgICAgaWYgKGRlZ3JlZSA+
PSByZWdpc3RlckNvdW50KSB7Ci0gICAgICAgICAgICAgICAgICAgIEFTU0VSVChtX3Vuc3BpbGxh
YmxlVG1wcy5jb250YWlucyhpKSB8fCBtX3NwaWxsV29ya2xpc3QuY29udGFpbnMoaSkpOworICAg
ICAgICAgICAgICAgICAgICBBU1NFUlQobV91bnNwaWxsYWJsZVRtcHMuZ2V0KGkpIHx8IG1fc3Bp
bGxXb3JrbGlzdC5jb250YWlucyhpKSk7CiAgICAgICAgICAgICAgICAgICAgIEFTU0VSVCghbV9z
aW1wbGlmeVdvcmtsaXN0LmNvbnRhaW5zKGkpKTsKICAgICAgICAgICAgICAgICAgICAgY29udGlu
dWU7CiAgICAgICAgICAgICAgICAgfQpAQCAtNzQ3LDkgKzg1NSw3IEBAIHByb3RlY3RlZDoKICAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgfQogCi0gICAgICAgIGlmIChpc1ByZWNv
bG9yZWQodikKLSAgICAgICAgICAgIHx8IGhhc0ludGVyZmVyZW5jZUVkZ2UoSW50ZXJmZXJlbmNl
RWRnZSh1LCB2KSkpIHsKLQorICAgICAgICBpZiAoaXNQcmVjb2xvcmVkKHYpIHx8IGhhc0ludGVy
ZmVyZW5jZUVkZ2UodSwgdikpIHsKICAgICAgICAgICAgIC8vIE5vIG5lZWQgdG8gZXZlciBjb25z
aWRlciB0aGlzIG1vdmUgYWdhaW4gaWYgaXQgaW50ZXJmZXJlcy4KICAgICAgICAgICAgIC8vIE5v
IGNvYWxlc2Npbmcgd2lsbCByZW1vdmUgdGhlIGludGVyZmVyZW5jZS4KICAgICAgICAgICAgIG1v
dmVJbmRleCA9IFVJTlRfTUFYOwpAQCAtNzg4LDcgKzg5NCw4IEBAIHByb3RlY3RlZDoKICAgICAg
ICAgbV9jb2FsZXNjZWRUbXBzW3ZdID0gdTsKIAogICAgICAgICBhdXRvJiB2TW92ZXMgPSBtX21v
dmVMaXN0W3ZdOwotICAgICAgICBtX21vdmVMaXN0W3VdLmFkZCh2TW92ZXMuYmVnaW4oKSwgdk1v
dmVzLmVuZCgpKTsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBtb3ZlIDogdk1vdmVzKQorICAgICAg
ICAgICAgbV9tb3ZlTGlzdFt1XS5hZGQobW92ZSk7CiAKICAgICAgICAgZm9yRWFjaEFkamFjZW50
KHYsIFt0aGlzLCB1XSAoSW5kZXhUeXBlIGFkamFjZW50VG1wSW5kZXgpIHsKICAgICAgICAgICAg
IGlmIChhZGRFZGdlRGlzdGluY3RXaXRob3V0RGVncmVlQ2hhbmdlKGFkamFjZW50VG1wSW5kZXgs
IHUpKSB7CkBAIC05MzgsNyArMTA0NSw3IEBAIHByb3RlY3RlZDoKICAgICAgICAgICAgICAgICBk
YXRhTG9nTG4oIk1vdmluZyB0bXAgIiwgdG1wSW5kZXgsICIgZnJvbSBzcGlsbCBsaXN0IHRvIHNp
bXBsaWZ5IGxpc3QgYmVjYXVzZSBpdCdzIGRlZ3JlZSBpcyBub3cgbGVzcyB0aGFuIGsiKTsKIAog
ICAgICAgICAgICAgaWYgKEFTU0VSVF9FTkFCTEVEKQotICAgICAgICAgICAgICAgIEFTU0VSVCht
X3Vuc3BpbGxhYmxlVG1wcy5jb250YWlucyh0bXBJbmRleCkgfHwgbV9zcGlsbFdvcmtsaXN0LmNv
bnRhaW5zKHRtcEluZGV4KSk7CisgICAgICAgICAgICAgICAgQVNTRVJUKG1fdW5zcGlsbGFibGVU
bXBzLmdldCh0bXBJbmRleCkgfHwgbV9zcGlsbFdvcmtsaXN0LmNvbnRhaW5zKHRtcEluZGV4KSk7
CiAgICAgICAgICAgICBtX3NwaWxsV29ya2xpc3QucXVpY2tDbGVhcih0bXBJbmRleCk7CiAKICAg
ICAgICAgICAgIEFTU0VSVCghbV9zaW1wbGlmeVdvcmtsaXN0LmNvbnRhaW5zKHRtcEluZGV4KSk7
CkBAIC05NTYsMTAgKzEwNjMsMTEgQEAgcHJvdGVjdGVkOgogICAgIE1vdmVTZXQgbV93b3JrbGlz
dE1vdmVzOwogfTsKIAotdGVtcGxhdGUgPHR5cGVuYW1lIEluZGV4VHlwZSwgdHlwZW5hbWUgVG1w
TWFwcGVyLCB0eXBlbmFtZSBJbnRlcmZlcmVuY2VFZGdlPgotY2xhc3MgSVJDIDogcHVibGljIEFi
c3RyYWN0Q29sb3JpbmdBbGxvY2F0b3I8SW5kZXhUeXBlLCBUbXBNYXBwZXIsIEludGVyZmVyZW5j
ZUVkZ2U+IHsKLSAgICB1c2luZyBCYXNlID0gQWJzdHJhY3RDb2xvcmluZ0FsbG9jYXRvcjxJbmRl
eFR5cGUsIFRtcE1hcHBlciwgSW50ZXJmZXJlbmNlRWRnZT47Cit0ZW1wbGF0ZSA8dHlwZW5hbWUg
SW5kZXhUeXBlLCB0eXBlbmFtZSBJbnRlcmZlcmVuY2VTZXQsIEJhbmsgYmFuaz4KK2NsYXNzIElS
QyA6IHB1YmxpYyBBYnN0cmFjdENvbG9yaW5nQWxsb2NhdG9yPEluZGV4VHlwZSwgSW50ZXJmZXJl
bmNlU2V0LCBiYW5rPiB7CisgICAgdXNpbmcgQmFzZSA9IEFic3RyYWN0Q29sb3JpbmdBbGxvY2F0
b3I8SW5kZXhUeXBlLCBJbnRlcmZlcmVuY2VTZXQsIGJhbms+OwogcHJvdGVjdGVkOgorICAgIHVz
aW5nIFRtcE1hcHBlciA9IHR5cGVuYW1lIEJhc2U6OlRtcE1hcHBlcjsKICAgICB1c2luZyBCYXNl
OjptX2lzT25TZWxlY3RTdGFjazsKICAgICB1c2luZyBCYXNlOjptX3NlbGVjdFN0YWNrOwogICAg
IHVzaW5nIEJhc2U6Om1fc2ltcGxpZnlXb3JrbGlzdDsKQEAgLTk5MSwxMSArMTA5OSwxMiBAQCBw
cm90ZWN0ZWQ6CiAgICAgdXNpbmcgQmFzZTo6bV9hZGphY2VuY3lMaXN0OwogICAgIHVzaW5nIEJh
c2U6OmR1bXBJbnRlcmZlcmVuY2VHcmFwaEluRG90OwogICAgIHVzaW5nIEJhc2U6OmFkZEJpYXM7
CisgICAgdXNpbmcgQmFzZTo6bV9pbnRlcmZlcmVuY2VFZGdlczsKICAgICB1c2luZyBCYXNlOjpt
X3Bpbm5lZFJlZ3M7CiAgICAgdXNpbmcgQmFzZTo6bV9yZWdzSW5Qcmlvcml0eU9yZGVyOwogCiBw
dWJsaWM6Ci0gICAgSVJDKENvZGUmIGNvZGUsIGNvbnN0IFZlY3RvcjxSZWc+JiByZWdzSW5Qcmlv
cml0eU9yZGVyLCBJbmRleFR5cGUgbGFzdFByZWNvbG9yZWRSZWdpc3RlckluZGV4LCB1bnNpZ25l
ZCB0bXBBcnJheVNpemUsIGNvbnN0IEhhc2hTZXQ8dW5zaWduZWQ+JiB1bnNwaWxsYWJsZVRtcHMs
IGNvbnN0IFVzZUNvdW50czxUbXA+JiB1c2VDb3VudHMpCisgICAgSVJDKENvZGUmIGNvZGUsIGNv
bnN0IFZlY3RvcjxSZWc+JiByZWdzSW5Qcmlvcml0eU9yZGVyLCBJbmRleFR5cGUgbGFzdFByZWNv
bG9yZWRSZWdpc3RlckluZGV4LCB1bnNpZ25lZCB0bXBBcnJheVNpemUsIGNvbnN0IEJpdFZlY3Rv
ciYgdW5zcGlsbGFibGVUbXBzLCBjb25zdCBVc2VDb3VudHMmIHVzZUNvdW50cykKICAgICAgICAg
OiBCYXNlKGNvZGUsIHJlZ3NJblByaW9yaXR5T3JkZXIsIGxhc3RQcmVjb2xvcmVkUmVnaXN0ZXJJ
bmRleCwgdG1wQXJyYXlTaXplLCB1bnNwaWxsYWJsZVRtcHMsIHVzZUNvdW50cykKICAgICB7CiAg
ICAgfQpAQCAtMTA5Myw4ICsxMjAyLDcgQEAgcHJvdGVjdGVkOgogCiAgICAgICAgICAgICBpZiAo
dHJhY2VEZWJ1ZykKICAgICAgICAgICAgICAgICBkYXRhTG9nKCIgICAgQ29hbGVzY2VkXG4iKTsK
LSAgICAgICAgfSBlbHNlIGlmIChpc1ByZWNvbG9yZWQodikKLSAgICAgICAgICAgIHx8IGhhc0lu
dGVyZmVyZW5jZUVkZ2UoSW50ZXJmZXJlbmNlRWRnZSh1LCB2KSkpIHsKKyAgICAgICAgfSBlbHNl
IGlmIChpc1ByZWNvbG9yZWQodikgfHwgaGFzSW50ZXJmZXJlbmNlRWRnZSh1LCB2KSkgewogICAg
ICAgICAgICAgYWRkV29ya0xpc3QodSk7CiAgICAgICAgICAgICBhZGRXb3JrTGlzdCh2KTsKIApA
QCAtMTEzMyw3ICsxMjQxLDggQEAgcHJvdGVjdGVkOgogICAgICAgICBtX2NvYWxlc2NlZFRtcHNb
dl0gPSB1OwogCiAgICAgICAgIGF1dG8mIHZNb3ZlcyA9IG1fbW92ZUxpc3Rbdl07Ci0gICAgICAg
IG1fbW92ZUxpc3RbdV0uYWRkKHZNb3Zlcy5iZWdpbigpLCB2TW92ZXMuZW5kKCkpOworICAgICAg
ICBmb3IgKHVuc2lnbmVkIG1vdmU6IHZNb3ZlcykKKyAgICAgICAgICAgIG1fbW92ZUxpc3RbdV0u
YWRkKG1vdmUpOwogCiAgICAgICAgIGZvckVhY2hBZGphY2VudCh2LCBbdGhpcywgdV0gKEluZGV4
VHlwZSBhZGphY2VudFRtcEluZGV4KSB7CiAgICAgICAgICAgICBpZiAoYWRkRWRnZURpc3RpbmN0
V2l0aG91dERlZ3JlZUNoYW5nZShhZGphY2VudFRtcEluZGV4LCB1KSkgewpAQCAtMTM5NywxMCAr
MTUwNiwxMSBAQCBwcm90ZWN0ZWQ6CiB9OwogCiAvLyBUaGlzIHBlcmZvcm0gYWxsIHRoZSB0YXNr
cyB0aGF0IGFyZSBzcGVjaWZpYyB0byBjZXJ0YWluIHJlZ2lzdGVyIHR5cGUuCi10ZW1wbGF0ZTxC
YW5rIGJhbmssIHRlbXBsYXRlPHR5cGVuYW1lLCB0eXBlbmFtZSwgdHlwZW5hbWU+IGNsYXNzIEFs
bG9jYXRvclR5cGUsIHR5cGVuYW1lIEludGVyZmVyZW5jZUVkZ2VUeXBlPgotY2xhc3MgQ29sb3Jp
bmdBbGxvY2F0b3IgOiBwdWJsaWMgQWxsb2NhdG9yVHlwZTx1bnNpZ25lZCwgQWJzb2x1dGVUbXBN
YXBwZXI8YmFuaz4sIEludGVyZmVyZW5jZUVkZ2VUeXBlPiB7Ci0gICAgdXNpbmcgVG1wTWFwcGVy
ID0gQWJzb2x1dGVUbXBNYXBwZXI8YmFuaz47Ci0gICAgdXNpbmcgQmFzZSA9IEFsbG9jYXRvclR5
cGU8dW5zaWduZWQsIFRtcE1hcHBlciwgSW50ZXJmZXJlbmNlRWRnZVR5cGU+OwordGVtcGxhdGU8
dHlwZW5hbWUgSW5kZXhUeXBlLCBCYW5rIGJhbmssIHRlbXBsYXRlPHR5cGVuYW1lLCB0eXBlbmFt
ZSwgQmFuaz4gY2xhc3MgQWxsb2NhdG9yVHlwZSwgdHlwZW5hbWUgSW50ZXJmZXJlbmNlU2V0Pgor
Y2xhc3MgQ29sb3JpbmdBbGxvY2F0b3IgOiBwdWJsaWMgQWxsb2NhdG9yVHlwZTxJbmRleFR5cGUs
IEludGVyZmVyZW5jZVNldCwgYmFuaz4geworICAgIHVzaW5nIEJhc2UgPSBBbGxvY2F0b3JUeXBl
PEluZGV4VHlwZSwgSW50ZXJmZXJlbmNlU2V0LCBiYW5rPjsKKyAgICB1c2luZyBUbXBNYXBwZXIg
PSB0eXBlbmFtZSBCYXNlOjpUbXBNYXBwZXI7CisgICAgdXNpbmcgQmFzZTo6dG1wVG9JbmRleDsK
ICAgICB1c2luZyBCYXNlOjptX2lzT25TZWxlY3RTdGFjazsKICAgICB1c2luZyBCYXNlOjptX3Nl
bGVjdFN0YWNrOwogICAgIHVzaW5nIEJhc2U6Om1fc2ltcGxpZnlXb3JrbGlzdDsKQEAgLTE0MjMs
MTIgKzE1MzMsMTMgQEAgY2xhc3MgQ29sb3JpbmdBbGxvY2F0b3IgOiBwdWJsaWMgQWxsb2NhdG9y
VHlwZTx1bnNpZ25lZCwgQWJzb2x1dGVUbXBNYXBwZXI8YmFuaz4KICAgICB1c2luZyBCYXNlOjpo
YXNJbnRlcmZlcmVuY2VFZGdlOwogICAgIHVzaW5nIEJhc2U6OmdldEFsaWFzOwogICAgIHVzaW5n
IEJhc2U6OmFkZEVkZ2U7CisgICAgdXNpbmcgQmFzZTo6bV9pbnRlcmZlcmVuY2VFZGdlczsKICAg
ICB1c2luZyBCYXNlOjptX3Bpbm5lZFJlZ3M7CiAgICAgdXNpbmcgQmFzZTo6bV9yZWdzSW5Qcmlv
cml0eU9yZGVyOwogCiBwdWJsaWM6CiAKLSAgICBDb2xvcmluZ0FsbG9jYXRvcihDb2RlJiBjb2Rl
LCBUbXBXaWR0aCYgdG1wV2lkdGgsIGNvbnN0IFVzZUNvdW50czxUbXA+JiB1c2VDb3VudHMsIGNv
bnN0IEhhc2hTZXQ8dW5zaWduZWQ+JiB1bnNwaWxsYWJsZVRtcCkKKyAgICBDb2xvcmluZ0FsbG9j
YXRvcihDb2RlJiBjb2RlLCBUbXBXaWR0aCYgdG1wV2lkdGgsIGNvbnN0IFVzZUNvdW50cyYgdXNl
Q291bnRzLCBjb25zdCBCaXRWZWN0b3ImIHVuc3BpbGxhYmxlVG1wKQogICAgICAgICA6IEJhc2Uo
Y29kZSwgY29kZS5yZWdzSW5Qcmlvcml0eU9yZGVyKGJhbmspLCBUbXBNYXBwZXI6Omxhc3RNYWNo
aW5lUmVnaXN0ZXJJbmRleCgpLCB0bXBBcnJheVNpemUoY29kZSksIHVuc3BpbGxhYmxlVG1wLCB1
c2VDb3VudHMpCiAgICAgICAgICwgbV90bXBXaWR0aCh0bXBXaWR0aCkKICAgICB7CkBAIC0xNDQw
LDEzICsxNTUxLDE1IEBAIHB1YmxpYzoKICAgICAgICAgICAgIH0KICAgICAgICAgfQogCisgICAg
ICAgIG1faW50ZXJmZXJlbmNlRWRnZXMuc2V0TWF4VG1wSW5kZXgoQWJzb2x1dGVUbXBNYXBwZXI8
YmFuaz46OmFic29sdXRlSW5kZXgobV9jb2RlLm51bVRtcHMoYmFuaykpKTsKKwogICAgICAgICBp
bml0aWFsaXplUHJlY29sb3JlZFRtcCgpOwogICAgICAgICBidWlsZCgpOwogICAgIH0KIAogICAg
IFRtcCBnZXRBbGlhcyhUbXAgdG1wKSBjb25zdAogICAgIHsKLSAgICAgICAgcmV0dXJuIFRtcE1h
cHBlcjo6dG1wRnJvbUFic29sdXRlSW5kZXgoZ2V0QWxpYXMoVG1wTWFwcGVyOjphYnNvbHV0ZUlu
ZGV4KHRtcCkpKTsKKyAgICAgICAgcmV0dXJuIFRtcE1hcHBlcjo6dG1wRnJvbUFic29sdXRlSW5k
ZXgoZ2V0QWxpYXModG1wVG9JbmRleCh0bXApKSk7CiAgICAgfQogCiAgICAgLy8gVGhpcyB0ZWxs
cyB5b3UgaWYgYSBNb3ZlIHdpbGwgYmUgY29hbGVzY2FibGUgaWYgdGhlIHNyYyBhbmQgZHN0IGVu
ZCB1cCBtYXRjaGluZy4gVGhpcyBtZXRob2QKQEAgLTE0NjksOCArMTU4Miw4IEBAIHB1YmxpYzoK
ICAgICAgICAgaWYgKG1fY29hbGVzY2VkVG1wc0F0U3BpbGwuaXNFbXB0eSgpKQogICAgICAgICAg
ICAgcmV0dXJuIHRtcDsKIAotICAgICAgICB1bnNpZ25lZCBhbGlhc0luZGV4ID0gVG1wTWFwcGVy
OjphYnNvbHV0ZUluZGV4KHRtcCk7Ci0gICAgICAgIHdoaWxlICh1bnNpZ25lZCBuZXh0QWxpYXNJ
bmRleCA9IG1fY29hbGVzY2VkVG1wc0F0U3BpbGxbYWxpYXNJbmRleF0pCisgICAgICAgIEluZGV4
VHlwZSBhbGlhc0luZGV4ID0gdG1wVG9JbmRleCh0bXApOworICAgICAgICB3aGlsZSAoSW5kZXhU
eXBlIG5leHRBbGlhc0luZGV4ID0gbV9jb2FsZXNjZWRUbXBzQXRTcGlsbFthbGlhc0luZGV4XSkK
ICAgICAgICAgICAgIGFsaWFzSW5kZXggPSBuZXh0QWxpYXNJbmRleDsKIAogICAgICAgICBUbXAg
YWxpYXMgPSBUbXBNYXBwZXI6OnRtcEZyb21BYnNvbHV0ZUluZGV4KGFsaWFzSW5kZXgpOwpAQCAt
MTUyNyw3ICsxNjQwLDcgQEAgcHVibGljOgogICAgICAgICBjb25zdCBDb2xsZWN0aW9uJiBtX2Nv
bGxlY3Rpb247CiAgICAgfTsKIAotICAgIEluZGV4VG9UbXBJdGVyYWJsZUFkYXB0b3I8VmVjdG9y
PHVuc2lnbmVkPj4gc3BpbGxlZFRtcHMoKSBjb25zdCB7IHJldHVybiBtX3NwaWxsZWRUbXBzOyB9
CisgICAgSW5kZXhUb1RtcEl0ZXJhYmxlQWRhcHRvcjxWZWN0b3I8SW5kZXhUeXBlPj4gc3BpbGxl
ZFRtcHMoKSBjb25zdCB7IHJldHVybiBtX3NwaWxsZWRUbXBzOyB9CiAKICAgICBib29sIHJlcXVp
cmVzU3BpbGxpbmcoKSBjb25zdCB7IHJldHVybiAhbV9zcGlsbGVkVG1wcy5pc0VtcHR5KCk7IH0K
IApAQCAtMTU4NCwxMCArMTY5NywxMCBAQCBJR05PUkVfR0NDX1dBUk5JTkdTX0VORAogICAgICAg
ICBpZiAobGVmdFRtcC5pc0dQKCkgIT0gKGJhbmsgPT0gR1ApIHx8IHJpZ2h0VG1wLmlzR1AoKSAh
PSAoYmFuayA9PSBHUCkpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICAgICAgdW5z
aWduZWQgbGVmdEluZGV4ID0gVG1wTWFwcGVyOjphYnNvbHV0ZUluZGV4KGxlZnRUbXApOwotICAg
ICAgICB1bnNpZ25lZCByaWdodEluZGV4ID0gVG1wTWFwcGVyOjphYnNvbHV0ZUluZGV4KHJpZ2h0
VG1wKTsKKyAgICAgICAgSW5kZXhUeXBlIGxlZnRJbmRleCA9IHRtcFRvSW5kZXgobGVmdFRtcCk7
CisgICAgICAgIEluZGV4VHlwZSByaWdodEluZGV4ID0gdG1wVG9JbmRleChyaWdodFRtcCk7CiAK
LSAgICAgICAgcmV0dXJuICFoYXNJbnRlcmZlcmVuY2VFZGdlKEludGVyZmVyZW5jZUVkZ2VUeXBl
KGxlZnRJbmRleCwgcmlnaHRJbmRleCkpOworICAgICAgICByZXR1cm4gIWhhc0ludGVyZmVyZW5j
ZUVkZ2UobGVmdEluZGV4LCByaWdodEluZGV4KTsKICAgICB9CiAKICAgICB2b2lkIGFkZFRvTG93
UHJpb3JpdHlDb2FsZXNjaW5nQ2FuZGlkYXRlcyhBcmcgbGVmdCwgQXJnIHJpZ2h0KQpAQCAtMTU5
Niw4ICsxNzA5LDggQEAgSUdOT1JFX0dDQ19XQVJOSU5HU19FTkQKICAgICAgICAgVG1wIGxlZnRU
bXAgPSBsZWZ0LnRtcCgpOwogICAgICAgICBUbXAgcmlnaHRUbXAgPSByaWdodC50bXAoKTsKIAot
ICAgICAgICB1bnNpZ25lZCBsZWZ0SW5kZXggPSBUbXBNYXBwZXI6OmFic29sdXRlSW5kZXgobGVm
dFRtcCk7Ci0gICAgICAgIHVuc2lnbmVkIHJpZ2h0SW5kZXggPSBUbXBNYXBwZXI6OmFic29sdXRl
SW5kZXgocmlnaHRUbXApOworICAgICAgICBJbmRleFR5cGUgbGVmdEluZGV4ID0gdG1wVG9JbmRl
eChsZWZ0VG1wKTsKKyAgICAgICAgSW5kZXhUeXBlIHJpZ2h0SW5kZXggPSB0bXBUb0luZGV4KHJp
Z2h0VG1wKTsKIAogICAgICAgICB1bnNpZ25lZCBuZXh0TW92ZUluZGV4ID0gbV9jb2FsZXNjaW5n
Q2FuZGlkYXRlcy5zaXplKCk7CiAgICAgICAgIG1fY29hbGVzY2luZ0NhbmRpZGF0ZXMuYXBwZW5k
KHsgbGVmdEluZGV4LCByaWdodEluZGV4IH0pOwpAQCAtMTY3NSw3ICsxNzg4LDcgQEAgSUdOT1JF
X0dDQ19XQVJOSU5HU19FTkQKICAgICAgICAgICAgIEFTU0VSVCh1c2VUbXApOwogCiAgICAgICAg
ICAgICB1bnNpZ25lZCBuZXh0TW92ZUluZGV4ID0gbV9jb2FsZXNjaW5nQ2FuZGlkYXRlcy5zaXpl
KCk7Ci0gICAgICAgICAgICBtX2NvYWxlc2NpbmdDYW5kaWRhdGVzLmFwcGVuZCh7IFRtcE1hcHBl
cjo6YWJzb2x1dGVJbmRleCh1c2VUbXApLCBUbXBNYXBwZXI6OmFic29sdXRlSW5kZXgoZGVmVG1w
KSB9KTsKKyAgICAgICAgICAgIG1fY29hbGVzY2luZ0NhbmRpZGF0ZXMuYXBwZW5kKHsgdG1wVG9J
bmRleCh1c2VUbXApLCB0bXBUb0luZGV4KGRlZlRtcCkgfSk7CiAgICAgICAgICAgICBpZiAodHJh
Y2VEZWJ1ZykKICAgICAgICAgICAgICAgICBkYXRhTG9nTG4oIk1vdmUgYXQgaW5kZXggIiwgbmV4
dE1vdmVJbmRleCwgIiBpczogIiwgKnByZXZJbnN0KTsKIApAQCAtMTc0MywxNCArMTg1NiwxNSBA
QCBJR05PUkVfR0NDX1dBUk5JTkdTX0VORAogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAg
ICAgIGZvciAoVG1wIGxpdmVUbXAgOiBsaXZlVG1wcykgewogICAgICAgICAgICAgICAgICAgICBB
U1NFUlQobGl2ZVRtcC5pc0dQKCkgPT0gKGJhbmsgPT0gR1ApKTsKLSAgICAgICAgICAgICAgICAg
ICAgCi0gICAgICAgICAgICAgICAgICAgIGlmICh0cmFjZURlYnVnKQotICAgICAgICAgICAgICAg
ICAgICAgICAgZGF0YUxvZygiICAgIEFkZGluZyBkZWYtbGl2ZSBlZGdlOiAiLCBhcmcsICIsICIs
IGxpdmVUbXAsICJcbiIpOworCisgICAgICAgICAgICAgICAgICAgIGRhdGFMb2dMbklmKHRyYWNl
RGVidWcsICIgICAgQWRkaW5nIGRlZi1saXZlIGVkZ2U6ICIsIGFyZywgIiwgIiwgbGl2ZVRtcCk7
CiAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICBhZGRFZGdlKGFyZywg
bGl2ZVRtcCk7CiAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGZvciAoY29uc3Qg
VG1wJiBwaW5uZWRSZWdUbXAgOiBtX3Bpbm5lZFJlZ3MpCisgICAgICAgICAgICAgICAgZm9yIChj
b25zdCBUbXAmIHBpbm5lZFJlZ1RtcCA6IG1fcGlubmVkUmVncykgeworICAgICAgICAgICAgICAg
ICAgICBkYXRhTG9nTG5JZih0cmFjZURlYnVnLCAiICAgIEFkZGluZyBkZWYtcGlubmVkIGVkZ2U6
ICIsIGFyZywgIiwgIiwgcGlubmVkUmVnVG1wKTsKICAgICAgICAgICAgICAgICAgICAgYWRkRWRn
ZShhcmcsIHBpbm5lZFJlZ1RtcCk7CisgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfSk7
CiAgICAgfQogCkBAIC0xNzU4LDcgKzE4NzIsNyBAQCBJR05PUkVfR0NDX1dBUk5JTkdTX0VORAog
ICAgIHsKICAgICAgICAgQVNTRVJUX1dJVEhfTUVTU0FHRShhLmlzR1AoKSA9PSBiLmlzR1AoKSwg
IkFuIGludGVyZmVyZW5jZSBiZXR3ZWVuIHJlZ2lzdGVycyBvZiBkaWZmZXJlbnQgdHlwZXMgZG9l
cyBub3QgbWFrZSBzZW5zZSwgaXQgY2FuIGxlYWQgdG8gbm9uLWNvbG9yYWJsZSBncmFwaHMuIik7
CiAKLSAgICAgICAgYWRkRWRnZShUbXBNYXBwZXI6OmFic29sdXRlSW5kZXgoYSksIFRtcE1hcHBl
cjo6YWJzb2x1dGVJbmRleChiKSk7CisgICAgICAgIGFkZEVkZ2UodG1wVG9JbmRleChhKSwgdG1w
VG9JbmRleChiKSk7CiAgICAgfQogCiAgICAgLy8gQ2FsbGluZyB0aGlzIHdpdGhvdXQgYSB0bXBX
aWR0aCB3aWxsIHBlcmZvcm0gYSBtb3JlIGNvbnNlcnZhdGl2ZSBjb2FsZXNjaW5nIGFuYWx5c2lz
IHRoYXQgYXNzdW1lcwpAQCAtMTgyMCw3ICsxOTM0LDcgQEAgSUdOT1JFX0dDQ19XQVJOSU5HU19F
TkQKIAogY2xhc3MgR3JhcGhDb2xvcmluZ1JlZ2lzdGVyQWxsb2NhdGlvbiB7CiBwdWJsaWM6Ci0g
ICAgR3JhcGhDb2xvcmluZ1JlZ2lzdGVyQWxsb2NhdGlvbihDb2RlJiBjb2RlLCBVc2VDb3VudHM8
VG1wPiYgdXNlQ291bnRzKQorICAgIEdyYXBoQ29sb3JpbmdSZWdpc3RlckFsbG9jYXRpb24oQ29k
ZSYgY29kZSwgVXNlQ291bnRzJiB1c2VDb3VudHMpCiAgICAgICAgIDogbV9jb2RlKGNvZGUpCiAg
ICAgICAgICwgbV91c2VDb3VudHModXNlQ291bnRzKQogICAgIHsKQEAgLTE4NDAsNyArMTk1NCw3
IEBAIHByaXZhdGU6CiAgICAgdGVtcGxhdGU8QmFuayBiYW5rPgogICAgIHZvaWQgYWxsb2NhdGVP
bkJhbmsoKQogICAgIHsKLSAgICAgICAgSGFzaFNldDx1bnNpZ25lZD4gdW5zcGlsbGFibGVUbXBz
ID0gY29tcHV0ZVVuc3BpbGxhYmxlVG1wczxiYW5rPigpOworICAgICAgICBCaXRWZWN0b3IgdW5z
cGlsbGFibGVUbXBzID0gY29tcHV0ZVVuc3BpbGxhYmxlVG1wczxiYW5rPigpOwogCiAgICAgICAg
IC8vIEZJWE1FOiBJZiBhIFRtcCBpcyB1c2VkIG9ubHkgZnJvbSBhIFNjcmF0Y2ggcm9sZSBhbmQg
dGhhdCBhcmd1bWVudCBpcyAhYWRtaXRzU3RhY2ssIHRoZW4KICAgICAgICAgLy8gd2Ugc2hvdWxk
IGFkZCB0aGUgVG1wIHRvIHVuc3BpbGxhYmxlVG1wcy4gVGhhdCB3aWxsIGhlbHAgYXZvaWQgcmVs
b29waW5nIG9ubHkgdG8gdHVybiB0aGUKQEAgLTE4NjQsMTAgKzE5NzgsOSBAQCBwcml2YXRlOgog
ICAgICAgICAgICAgLy8gY3JlYXRlZCBUbXBzIG1heSBnZXQgbmFycm93ZXIgdXNlL2RlZiB3aWR0
aHMuIE9uIHRoZSBvdGhlciBoYW5kLCB0aGUgc3BpbGxlciBhbHJlYWR5CiAgICAgICAgICAgICAv
LyBzZWxlY3RzIHdoaWNoIG1vdmUgaW5zdHJ1Y3Rpb24gdG8gdXNlIGJhc2VkIG9uIHRoZSBvcmln
aW5hbCBUbXAncyB3aWR0aHMsIHNvIGl0IG1heSBub3QKICAgICAgICAgICAgIC8vIG1hdHRlciB0
aGFuIGEgc3Vic2VxdWVudCBpdGVyYXRpb24gc2VlcyBhIGNvbnNlcnZhdGl2ZSB3aWR0aCBmb3Ig
dGhlIG5ldyBUbXBzLiBBbHNvLCB0aGUKLSAgICAgICAgICAgIC8vIHJlY29tcHV0YXRpb24gbWF5
IG5vdCBhY3R1YWxseSBiZSBhIHBlcmZvcm1hbmNlIHByb2JsZW07IGl0J3MgbGlrZWx5IHRoYXQg
YSBiZXR0ZXIgd2F5IHRvCi0gICAgICAgICAgICAvLyBpbXByb3ZlIHBlcmZvcm1hbmNlIG9mIFRt
cFdpZHRoIGlzIHRvIHJlcGxhY2UgaXRzIEhhc2hNYXAgd2l0aCBzb21ldGhpbmcgZWxzZS4gSXQn
cwotICAgICAgICAgICAgLy8gcG9zc2libGUgdGhhdCBtb3N0IG9mIHRoZSBUbXBXaWR0aCBvdmVy
aGVhZCBpcyBmcm9tIHF1ZXJpZXMgb2YgVG1wV2lkdGggcmF0aGVyIHRoYW4gdGhlCi0gICAgICAg
ICAgICAvLyByZWNvbXB1dGF0aW9uLCBpbiB3aGljaCBjYXNlIHNwZWVkaW5nIHVwIHRoZSBsb29r
dXAgd291bGQgYmUgYSBiaWdnZXIgd2luLgorICAgICAgICAgICAgLy8gcmVjb21wdXRhdGlvbiBt
YXkgbm90IGFjdHVhbGx5IGJlIGEgcGVyZm9ybWFuY2UgcHJvYmxlbTogd2Ugc3BlbmQgcm91Z2hs
eSAzIHRvIDQlIG9mIHRoZQorICAgICAgICAgICAgLy8gcmVnaXN0ZXIgYWxsb2NhdG9yIGluIG1f
dG1wV2lkdGgucmVjb21wdXRlLiBJbiBjb21wYXJpc29uIHdlIHNwZW5kIG1vcmUgdGhhbiA0MCUg
YnVpbGRpbmcKKyAgICAgICAgICAgIC8vIHRoZSBpbnRlcmZlcmVuY2UgZ3JhcGgKICAgICAgICAg
ICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTI0NzgKICAg
ICAgICAgICAgIG1fdG1wV2lkdGgucmVjb21wdXRlPGJhbms+KG1fY29kZSk7CiAKQEAgLTE4ODUs
MjAgKzE5OTgsMjYgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAg
ICAgICAgICAgICB9OwogCisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChtX2NvZGUubnVtVG1w
cyhiYW5rKSA8IHN0ZDo6bnVtZXJpY19saW1pdHM8dWludDE2X3Q+OjptYXgoKSk7CisgICAgICAg
ICAgICAvLyBUaGUgYml0IHZlY3RvciBhcHByb2FjaCB1c2VzIG4qbiBiaXRzLCBvciAya0IgZm9y
IG4gPSA0MDAuCisgICAgICAgICAgICBjb25zdGV4cHIgdW5zaWduZWQgbWF4U2l6ZUZvclNtYWxs
SW50ZXJmZXJlbmNlR3JhcGggPSA0MDA7CisgICAgICAgICAgICB1c2luZyBJbmRleFR5cGUgPSB1
aW50MTZfdDsKKyAgICAgICAgICAgIHVzaW5nIExhcmdlSW50ZXJmZXJlbmNlR3JhcGggPSBJbnRl
cmZlcmVuY2VWZWN0b3I8U21hbGxTZXQ8SW5kZXhUeXBlLCBJbnRIYXNoPEluZGV4VHlwZT4+LCBJ
bmRleFR5cGU+OworICAgICAgICAgICAgdXNpbmcgU21hbGxJbnRlcmZlcmVuY2VHcmFwaCA9IElu
dGVyZmVyZW5jZUJpdFZlY3RvcjxJbmRleFR5cGU+OwogICAgICAgICAgICAgaWYgKHVzZUlSQygp
KSB7Ci0gICAgICAgICAgICAgICAgaWYgKG1fY29kZS5udW1UbXBzKGJhbmspIDwgc3RkOjpudW1l
cmljX2xpbWl0czx1aW50MTZfdD46Om1heCgpKSB7Ci0gICAgICAgICAgICAgICAgICAgIENvbG9y
aW5nQWxsb2NhdG9yPGJhbmssIElSQywgSW50ZXJmZXJlbmNlRWRnZTx1aW50MTZfdCwgdWludDMy
X3Q+PiBhbGxvY2F0b3IobV9jb2RlLCBtX3RtcFdpZHRoLCBtX3VzZUNvdW50cywgdW5zcGlsbGFi
bGVUbXBzKTsKKyAgICAgICAgICAgICAgICBpZiAobV9jb2RlLm51bVRtcHMoYmFuaykgPCBtYXhT
aXplRm9yU21hbGxJbnRlcmZlcmVuY2VHcmFwaCkgeworICAgICAgICAgICAgICAgICAgICBDb2xv
cmluZ0FsbG9jYXRvcjxJbmRleFR5cGUsIGJhbmssIElSQywgU21hbGxJbnRlcmZlcmVuY2VHcmFw
aD4gYWxsb2NhdG9yKG1fY29kZSwgbV90bXBXaWR0aCwgbV91c2VDb3VudHMsIHVuc3BpbGxhYmxl
VG1wcyk7CiAgICAgICAgICAgICAgICAgICAgIGRvbmUgPSBkb0FsbG9jYXRpb24oYWxsb2NhdG9y
KTsKICAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICBDb2xvcmlu
Z0FsbG9jYXRvcjxiYW5rLCBJUkMsIEludGVyZmVyZW5jZUVkZ2U8dWludDMyX3QsIHVpbnQ2NF90
Pj4gYWxsb2NhdG9yKG1fY29kZSwgbV90bXBXaWR0aCwgbV91c2VDb3VudHMsIHVuc3BpbGxhYmxl
VG1wcyk7CisgICAgICAgICAgICAgICAgICAgIENvbG9yaW5nQWxsb2NhdG9yPEluZGV4VHlwZSwg
YmFuaywgSVJDLCBMYXJnZUludGVyZmVyZW5jZUdyYXBoPiBhbGxvY2F0b3IobV9jb2RlLCBtX3Rt
cFdpZHRoLCBtX3VzZUNvdW50cywgdW5zcGlsbGFibGVUbXBzKTsKICAgICAgICAgICAgICAgICAg
ICAgZG9uZSA9IGRvQWxsb2NhdGlvbihhbGxvY2F0b3IpOwogICAgICAgICAgICAgICAgIH0KICAg
ICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgaWYgKG1fY29kZS5udW1UbXBzKGJh
bmspIDwgc3RkOjpudW1lcmljX2xpbWl0czx1aW50MTZfdD46Om1heCgpKSB7Ci0gICAgICAgICAg
ICAgICAgICAgIENvbG9yaW5nQWxsb2NhdG9yPGJhbmssIEJyaWdncywgSW50ZXJmZXJlbmNlRWRn
ZTx1aW50MTZfdCwgdWludDMyX3Q+PiBhbGxvY2F0b3IobV9jb2RlLCBtX3RtcFdpZHRoLCBtX3Vz
ZUNvdW50cywgdW5zcGlsbGFibGVUbXBzKTsKKyAgICAgICAgICAgICAgICBpZiAobV9jb2RlLm51
bVRtcHMoYmFuaykgPCBtYXhTaXplRm9yU21hbGxJbnRlcmZlcmVuY2VHcmFwaCkgeworICAgICAg
ICAgICAgICAgICAgICBDb2xvcmluZ0FsbG9jYXRvcjxJbmRleFR5cGUsIGJhbmssIEJyaWdncywg
U21hbGxJbnRlcmZlcmVuY2VHcmFwaD4gYWxsb2NhdG9yKG1fY29kZSwgbV90bXBXaWR0aCwgbV91
c2VDb3VudHMsIHVuc3BpbGxhYmxlVG1wcyk7CiAgICAgICAgICAgICAgICAgICAgIGRvbmUgPSBk
b0FsbG9jYXRpb24oYWxsb2NhdG9yKTsKICAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAg
ICAgICAgICAgICAgICBDb2xvcmluZ0FsbG9jYXRvcjxiYW5rLCBCcmlnZ3MsIEludGVyZmVyZW5j
ZUVkZ2U8dWludDMyX3QsIHVpbnQ2NF90Pj4gYWxsb2NhdG9yKG1fY29kZSwgbV90bXBXaWR0aCwg
bV91c2VDb3VudHMsIHVuc3BpbGxhYmxlVG1wcyk7CisgICAgICAgICAgICAgICAgICAgIENvbG9y
aW5nQWxsb2NhdG9yPEluZGV4VHlwZSwgYmFuaywgQnJpZ2dzLCBMYXJnZUludGVyZmVyZW5jZUdy
YXBoPiBhbGxvY2F0b3IobV9jb2RlLCBtX3RtcFdpZHRoLCBtX3VzZUNvdW50cywgdW5zcGlsbGFi
bGVUbXBzKTsKICAgICAgICAgICAgICAgICAgICAgZG9uZSA9IGRvQWxsb2NhdGlvbihhbGxvY2F0
b3IpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KQEAgLTE5MDcsMTEgKzIwMjYs
OCBAQCBwcml2YXRlOgogICAgIH0KIAogICAgIHRlbXBsYXRlPEJhbmsgYmFuaz4KLSAgICBIYXNo
U2V0PHVuc2lnbmVkPiBjb21wdXRlVW5zcGlsbGFibGVUbXBzKCkKKyAgICBCaXRWZWN0b3IgY29t
cHV0ZVVuc3BpbGxhYmxlVG1wcygpCiAgICAgewotCi0gICAgICAgIEhhc2hTZXQ8dW5zaWduZWQ+
IHVuc3BpbGxhYmxlVG1wczsKLQogICAgICAgICBzdHJ1Y3QgUmFuZ2UgewogICAgICAgICAgICAg
dW5zaWduZWQgZmlyc3QgeyBzdGQ6Om51bWVyaWNfbGltaXRzPHVuc2lnbmVkPjo6bWF4KCkgfTsK
ICAgICAgICAgICAgIHVuc2lnbmVkIGxhc3QgeyAwIH07CkBAIC0xOTY0LDEyICsyMDgwLDIwIEBA
IHByaXZhdGU6CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICArK2dsb2JhbEluZGV4OwogICAg
ICAgICB9CisKKyAgICAgICAgQml0VmVjdG9yIHVuc3BpbGxhYmxlVG1wczsKKyAgICAgICAgdW5z
cGlsbGFibGVUbXBzLmVuc3VyZVNpemUoYXJyYXlTaXplKTsKICAgICAgICAgZm9yICh1bnNpZ25l
ZCBpID0gQWJzb2x1dGVUbXBNYXBwZXI8YmFuaz46Omxhc3RNYWNoaW5lUmVnaXN0ZXJJbmRleCgp
ICsgMTsgaSA8IHJhbmdlcy5zaXplKCk7ICsraSkgewogICAgICAgICAgICAgUmFuZ2UmIHJhbmdl
ID0gcmFuZ2VzW2ldOwogICAgICAgICAgICAgaWYgKHJhbmdlLmxhc3QgLSByYW5nZS5maXJzdCA8
PSAxICYmIHJhbmdlLmNvdW50ID4gcmFuZ2UuYWRtaXRTdGFja0NvdW50KQotICAgICAgICAgICAg
ICAgIHVuc3BpbGxhYmxlVG1wcy5hZGQoaSk7CisgICAgICAgICAgICAgICAgdW5zcGlsbGFibGVU
bXBzLnF1aWNrU2V0KGkpOwogICAgICAgICB9CiAKKyAgICAgICAgbV9jb2RlLmZvckVhY2hGYXN0
VG1wKFsmXShUbXAgdG1wKSB7CisgICAgICAgICAgICBpZiAodG1wLmJhbmsoKSA9PSBiYW5rKQor
ICAgICAgICAgICAgICAgIHVuc3BpbGxhYmxlVG1wcy5xdWlja1NldChBYnNvbHV0ZVRtcE1hcHBl
cjxiYW5rPjo6YWJzb2x1dGVJbmRleCh0bXApKTsKKyAgICAgICAgfSk7CisKICAgICAgICAgcmV0
dXJuIHVuc3BpbGxhYmxlVG1wczsKICAgICB9CiAKQEAgLTIwMzEsMTIgKzIxNTUsMTIgQEAgcHJp
dmF0ZToKICAgICB9CiAKICAgICB0ZW1wbGF0ZTxCYW5rIGJhbmssIHR5cGVuYW1lIEFsbG9jYXRv
clR5cGU+Ci0gICAgdm9pZCBhZGRTcGlsbEFuZEZpbGwoY29uc3QgQWxsb2NhdG9yVHlwZSYgYWxs
b2NhdG9yLCBIYXNoU2V0PHVuc2lnbmVkPiYgdW5zcGlsbGFibGVUbXBzKQorICAgIHZvaWQgYWRk
U3BpbGxBbmRGaWxsKGNvbnN0IEFsbG9jYXRvclR5cGUmIGFsbG9jYXRvciwgQml0VmVjdG9yJiB1
bnNwaWxsYWJsZVRtcHMpCiAgICAgewogICAgICAgICBIYXNoTWFwPFRtcCwgU3RhY2tTbG90Kj4g
c3RhY2tTbG90czsKICAgICAgICAgZm9yIChUbXAgdG1wIDogYWxsb2NhdG9yLnNwaWxsZWRUbXBz
KCkpIHsKICAgICAgICAgICAgIC8vIEFsbCB0aGUgc3BpbGxlZCB2YWx1ZXMgYmVjb21lIHVuc3Bp
bGxhYmxlLgotICAgICAgICAgICAgdW5zcGlsbGFibGVUbXBzLmFkZChBYnNvbHV0ZVRtcE1hcHBl
cjxiYW5rPjo6YWJzb2x1dGVJbmRleCh0bXApKTsKKyAgICAgICAgICAgIHVuc3BpbGxhYmxlVG1w
cy5zZXQoQWJzb2x1dGVUbXBNYXBwZXI8YmFuaz46OmFic29sdXRlSW5kZXgodG1wKSk7CiAKICAg
ICAgICAgICAgIC8vIEFsbG9jYXRlIHN0YWNrIHNsb3QgZm9yIGVhY2ggc3BpbGxlZCB2YWx1ZS4K
ICAgICAgICAgICAgIFN0YWNrU2xvdCogc3RhY2tTbG90ID0gbV9jb2RlLmFkZFN0YWNrU2xvdCgK
QEAgLTIxMDksMTEgKzIyMzMsOCBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgICAgICAgICAg
Ly8gdmFsdWUgcmF0aGVyIHRoYW4gbG9hZGluZyBpdCBmcm9tIHRoZSBzdGFjay4gSW4gb3JkZXIg
Zm9yIHRoYXQKICAgICAgICAgICAgICAgICAgICAgICAgIC8vIG9wdGltaXphdGlvbiB0byBraWNr
IGluLCB3ZSBuZWVkIHRvIGF2b2lkIHBsYWNpbmcgdGhlIFRtcCdzIHN0YWNrCiAgICAgICAgICAg
ICAgICAgICAgICAgICAvLyBhZGRyZXNzIGludG8gdGhlIGluc3RydWN0aW9uLgotICAgICAgICAg
ICAgICAgICAgICAgICAgaWYgKCFBcmc6OmlzQ29sZFVzZShyb2xlKSkgewotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGNvbnN0IFVzZUNvdW50czxUbXA+OjpDb3VudHMqIGNvdW50cyA9IG1f
dXNlQ291bnRzW2FyZy50bXAoKV07Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNv
dW50cyAmJiBjb3VudHMtPm51bUNvbnN0RGVmcyA9PSAxICYmIGNvdW50cy0+bnVtRGVmcyA9PSAx
KQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIUFyZzo6aXNDb2xkVXNl
KHJvbGUpICYmIG1fdXNlQ291bnRzLmlzQ29uc3REZWY8YmFuaz4oQWJzb2x1dGVUbXBNYXBwZXI8
YmFuaz46OmFic29sdXRlSW5kZXgoYXJnLnRtcCgpKSkpCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuOwogICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAg
ICAgICAgICBXaWR0aCBzcGlsbFdpZHRoID0gbV90bXBXaWR0aC5yZXF1aXJlZFdpZHRoKGFyZy50
bXAoKSk7CiAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoQXJnOjppc0FueURlZihyb2xlKSAm
JiB3aWR0aCA8IHNwaWxsV2lkdGgpIHsKQEAgLTIxNjYsNyArMjI4Nyw3IEBAIHByaXZhdGU6CiAg
ICAgICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKGluc3RCYW5rID09IGJhbmspOwogICAg
ICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgVG1wIHRtcCA9IG1fY29kZS5u
ZXdUbXAoYmFuayk7Ci0gICAgICAgICAgICAgICAgICAgIHVuc3BpbGxhYmxlVG1wcy5hZGQoQWJz
b2x1dGVUbXBNYXBwZXI8YmFuaz46OmFic29sdXRlSW5kZXgodG1wKSk7CisgICAgICAgICAgICAg
ICAgICAgIHVuc3BpbGxhYmxlVG1wcy5zZXQoQWJzb2x1dGVUbXBNYXBwZXI8YmFuaz46OmFic29s
dXRlSW5kZXgodG1wKSk7CiAgICAgICAgICAgICAgICAgICAgIGluc3QuYXJncy5hcHBlbmQodG1w
KTsKICAgICAgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoaW5zdC5hcmdzLnNpemUoKSA9
PSAzKTsKICAgICAgICAgICAgICAgICAgICAgCkBAIC0yMjExLDcgKzIzMzIsNyBAQCBwcml2YXRl
OgogICAgICAgICAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgICAgICAgICAgdG1wID0gbV9j
b2RlLm5ld1RtcChiYW5rKTsKLSAgICAgICAgICAgICAgICAgICAgdW5zcGlsbGFibGVUbXBzLmFk
ZChBYnNvbHV0ZVRtcE1hcHBlcjxiYW5rPjo6YWJzb2x1dGVJbmRleCh0bXApKTsKKyAgICAgICAg
ICAgICAgICAgICAgdW5zcGlsbGFibGVUbXBzLnNldChBYnNvbHV0ZVRtcE1hcHBlcjxiYW5rPjo6
YWJzb2x1dGVJbmRleCh0bXApKTsKICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAg
ICAgICAgIGlmIChyb2xlID09IEFyZzo6U2NyYXRjaCkKICAgICAgICAgICAgICAgICAgICAgICAg
IHJldHVybjsKQEAgLTIyMzUsNyArMjM1Niw3IEBAIHByaXZhdGU6CiAKICAgICBDb2RlJiBtX2Nv
ZGU7CiAgICAgVG1wV2lkdGggbV90bXBXaWR0aDsKLSAgICBVc2VDb3VudHM8VG1wPiYgbV91c2VD
b3VudHM7CisgICAgVXNlQ291bnRzJiBtX3VzZUNvdW50czsKIH07CiAKIH0gLy8gYW5vbnltb3Vz
IG5hbWVzcGFjZQpAQCAtMjI0Nyw3ICsyMzY4LDcgQEAgdm9pZCBhbGxvY2F0ZVJlZ2lzdGVyc0J5
R3JhcGhDb2xvcmluZyhDb2RlJiBjb2RlKQogICAgIGlmICh0cmFjZURlYnVnKQogICAgICAgICBk
YXRhTG9nKCJDb2RlIGJlZm9yZSBncmFwaCBjb2xvcmluZzpcbiIsIGNvZGUpOwogCi0gICAgVXNl
Q291bnRzPFRtcD4gdXNlQ291bnRzKGNvZGUpOworICAgIFVzZUNvdW50cyB1c2VDb3VudHMoY29k
ZSk7CiAgICAgR3JhcGhDb2xvcmluZ1JlZ2lzdGVyQWxsb2NhdGlvbiBncmFwaENvbG9yaW5nUmVn
aXN0ZXJBbGxvY2F0aW9uKGNvZGUsIHVzZUNvdW50cyk7CiAgICAgZ3JhcGhDb2xvcmluZ1JlZ2lz
dGVyQWxsb2NhdGlvbi5ydW4oKTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy9haXIvQWlyQ29kZS5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJDb2Rl
LmgKaW5kZXggYzBiZDM1MjBkMGQzLi5kOGVlNDEyN2I1NzMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQ29kZS5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy9haXIvQWlyQ29kZS5oCkBAIC00MCw2ICs0MCw3IEBACiAjaW5jbHVkZSAiU3RhY2tBbGln
bm1lbnQuaCIKICNpbmNsdWRlIDx3dGYvSGFzaFNldC5oPgogI2luY2x1ZGUgPHd0Zi9JbmRleE1h
cC5oPgorI2luY2x1ZGUgPHd0Zi9TbWFsbFNldC5oPgogI2luY2x1ZGUgPHd0Zi9XZWFrUmFuZG9t
Lmg+CiAKIG5hbWVzcGFjZSBKU0MgewpAQCAtMzExLDcgKzMxMiwxMyBAQCBwdWJsaWM6CiAgICAg
fQogCiAgICAgdm9pZCBhZGRGYXN0VG1wKFRtcCk7Ci0gICAgYm9vbCBpc0Zhc3RUbXAoVG1wIHRt
cCkgY29uc3QgeyByZXR1cm4gbV9mYXN0VG1wcy5jb250YWlucyh0bXApOyB9CisKKyAgICB0ZW1w
bGF0ZTx0eXBlbmFtZSBGdW5jdG9yPgorICAgIHZvaWQgZm9yRWFjaEZhc3RUbXAoY29uc3QgRnVu
Y3RvciYgZnVuY3RvcikgY29uc3QKKyAgICB7CisgICAgICAgIGZvciAoVG1wIHRtcCA6IG1fZmFz
dFRtcHMpCisgICAgICAgICAgICBmdW5jdG9yKHRtcCk7CisgICAgfQogICAgIAogICAgIENGRyYg
Y2ZnKCkgY29uc3QgeyByZXR1cm4gKm1fY2ZnOyB9CiAgICAgCkBAIC0zNzksNyArMzg2LDcgQEAg
cHJpdmF0ZToKICAgICBWZWN0b3I8c3RkOjp1bmlxdWVfcHRyPEJhc2ljQmxvY2s+PiBtX2Jsb2Nr
czsKICAgICBTcGFyc2VDb2xsZWN0aW9uPFNwZWNpYWw+IG1fc3BlY2lhbHM7CiAgICAgc3RkOjp1
bmlxdWVfcHRyPENGRz4gbV9jZmc7Ci0gICAgSGFzaFNldDxUbXA+IG1fZmFzdFRtcHM7CisgICAg
U21hbGxTZXQ8VG1wLCBUbXBIYXNoLCAyPiBtX2Zhc3RUbXBzOwogICAgIENDYWxsU3BlY2lhbCog
bV9jQ2FsbFNwZWNpYWwgeyBudWxscHRyIH07CiAgICAgdW5zaWduZWQgbV9udW1HUFRtcHMgeyAw
IH07CiAgICAgdW5zaWduZWQgbV9udW1GUFRtcHMgeyAwIH07CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpclVzZUNvdW50cy5oIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2IzL2Fpci9BaXJVc2VDb3VudHMuaAppbmRleCA5MGEyNjhjZDU1MjkuLjI1MWE5MTM2OGYx
ZSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJVc2VDb3VudHMu
aAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpclVzZUNvdW50cy5oCkBAIC0z
MSwzNCArMzEsMTggQEAKICNpbmNsdWRlICJBaXJCbG9ja1dvcmtsaXN0LmgiCiAjaW5jbHVkZSAi
QWlyQ29kZS5oIgogI2luY2x1ZGUgIkFpckluc3RJbmxpbmVzLmgiCi0jaW5jbHVkZSA8d3RmL0hh
c2hNYXAuaD4KLSNpbmNsdWRlIDx3dGYvTGlzdER1bXAuaD4KKyNpbmNsdWRlICJBaXJUbXBJbmxp
bmVzLmgiCisjaW5jbHVkZSA8d3RmL0NvbW1hUHJpbnRlci5oPgorI2luY2x1ZGUgPHd0Zi9WZWN0
b3IuaD4KIAogbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7IG5hbWVzcGFjZSBBaXIgewog
CiBjbGFzcyBDb2RlOwogCi0vLyBDb21wdXRlcyB0aGUgbnVtYmVyIG9mIHVzZXMgb2YgYSB2YXJp
YWJsZSBiYXNlZCBvbiBmcmVxdWVuY3kgb2YgZXhlY3V0aW9uLiBUaGUgZnJlcXVlbmN5IG9mIGJs
b2NrcworLy8gQ29tcHV0ZXMgdGhlIG51bWJlciBvZiB1c2VzIG9mIGEgdG1wIGJhc2VkIG9uIGZy
ZXF1ZW5jeSBvZiBleGVjdXRpb24uIFRoZSBmcmVxdWVuY3kgb2YgYmxvY2tzCiAvLyB0aGF0IGFy
ZSBvbmx5IHJlYWNoYWJsZSBieSByYXJlIGVkZ2VzIGlzIHNjYWxlZCBieSBPcHRpb25zOjpyYXJl
QmxvY2tQZW5hbHR5KCkuCi0KLS8vIFRoaW5nIGNhbiBiZSBlaXRoZXIgVG1wIG9yIEFyZy4KLXRl
bXBsYXRlPHR5cGVuYW1lIFRoaW5nPgogY2xhc3MgVXNlQ291bnRzIHsKIHB1YmxpYzoKLSAgICBz
dHJ1Y3QgQ291bnRzIHsKLSAgICAgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0
Ci0gICAgICAgIHsKLSAgICAgICAgICAgIG91dC5wcmludCgKLSAgICAgICAgICAgICAgICAie251
bVdhcm1Vc2VzID0gIiwgbnVtV2FybVVzZXMsICIsIG51bUNvbGRVc2VzID0gIiwgbnVtQ29sZFVz
ZXMsICIsIG51bURlZnMgPSAiLAotICAgICAgICAgICAgICAgIG51bURlZnMsICJ9Iik7Ci0gICAg
ICAgIH0KLSAgICAgICAgCi0gICAgICAgIGRvdWJsZSBudW1XYXJtVXNlcyB7IDAgfTsKLSAgICAg
ICAgZG91YmxlIG51bUNvbGRVc2VzIHsgMCB9OwotICAgICAgICBkb3VibGUgbnVtRGVmcyB7IDAg
fTsKLSAgICAgICAgZG91YmxlIG51bUNvbnN0RGVmcyB7IDAgfTsKLSAgICB9OwotICAgIAogICAg
IFVzZUNvdW50cyhDb2RlJiBjb2RlKQogICAgIHsKICAgICAgICAgLy8gRmluZCBub24tcmFyZSBi
bG9ja3MuCkBAIC03MCw0NyArNTQsNzMgQEAgcHVibGljOgogICAgICAgICAgICAgICAgICAgICBm
YXN0V29ya2xpc3QucHVzaChzdWNjZXNzb3IuYmxvY2soKSk7CiAgICAgICAgICAgICB9CiAgICAg
ICAgIH0KLSAgICAgICAgCisKKyAgICAgICAgdW5zaWduZWQgZ3BBcnJheVNpemUgPSBBYnNvbHV0
ZVRtcE1hcHBlcjxHUD46OmFic29sdXRlSW5kZXgoY29kZS5udW1UbXBzKEdQKSk7CisgICAgICAg
IG1fZ3BOdW1XYXJtVXNlc0FuZERlZnMucmVzaXplKGdwQXJyYXlTaXplKTsKKyAgICAgICAgbV9n
cENvbnN0RGVmcy5lbnN1cmVTaXplKGdwQXJyYXlTaXplKTsKKyAgICAgICAgdW5zaWduZWQgZnBB
cnJheVNpemUgPSBBYnNvbHV0ZVRtcE1hcHBlcjxGUD46OmFic29sdXRlSW5kZXgoY29kZS5udW1U
bXBzKEZQKSk7CisgICAgICAgIG1fZnBOdW1XYXJtVXNlc0FuZERlZnMucmVzaXplKGZwQXJyYXlT
aXplKTsKKyAgICAgICAgbV9mcENvbnN0RGVmcy5lbnN1cmVTaXplKGdwQXJyYXlTaXplKTsKKwog
ICAgICAgICBmb3IgKEJhc2ljQmxvY2sqIGJsb2NrIDogY29kZSkgewogICAgICAgICAgICAgZG91
YmxlIGZyZXF1ZW5jeSA9IGJsb2NrLT5mcmVxdWVuY3koKTsKICAgICAgICAgICAgIGlmICghZmFz
dFdvcmtsaXN0LnNhdyhibG9jaykpCiAgICAgICAgICAgICAgICAgZnJlcXVlbmN5ICo9IE9wdGlv
bnM6OnJhcmVCbG9ja1BlbmFsdHkoKTsKICAgICAgICAgICAgIGZvciAoSW5zdCYgaW5zdCA6ICpi
bG9jaykgewotICAgICAgICAgICAgICAgIGluc3QuZm9yRWFjaDxUaGluZz4oCi0gICAgICAgICAg
ICAgICAgICAgIFsmXSAoVGhpbmcmIGFyZywgQXJnOjpSb2xlIHJvbGUsIEJhbmssIFdpZHRoKSB7
Ci0gICAgICAgICAgICAgICAgICAgICAgICBDb3VudHMmIGNvdW50cyA9IG1fY291bnRzLmFkZChh
cmcsIENvdW50cygpKS5pdGVyYXRvci0+dmFsdWU7Ci0KLSAgICAgICAgICAgICAgICAgICAgICAg
IGlmIChBcmc6OmlzV2FybVVzZShyb2xlKSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBj
b3VudHMubnVtV2FybVVzZXMgKz0gZnJlcXVlbmN5OwotICAgICAgICAgICAgICAgICAgICAgICAg
aWYgKEFyZzo6aXNDb2xkVXNlKHJvbGUpKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNv
dW50cy5udW1Db2xkVXNlcyArPSBmcmVxdWVuY3k7Ci0gICAgICAgICAgICAgICAgICAgICAgICBp
ZiAoQXJnOjppc0FueURlZihyb2xlKSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb3Vu
dHMubnVtRGVmcyArPSBmcmVxdWVuY3k7CisgICAgICAgICAgICAgICAgaW5zdC5mb3JFYWNoPFRt
cD4oCisgICAgICAgICAgICAgICAgICAgIFsmXSAoVG1wJiB0bXAsIEFyZzo6Um9sZSByb2xlLCBC
YW5rIGJhbmssIFdpZHRoKSB7CisKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChBcmc6Omlz
V2FybVVzZShyb2xlKSB8fCBBcmc6OmlzQW55RGVmKHJvbGUpKSB7CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgaWYgKGJhbmsgPT0gR1ApCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIG1fZ3BOdW1XYXJtVXNlc0FuZERlZnNbQWJzb2x1dGVUbXBNYXBwZXI8R1A+OjphYnNvbHV0
ZUluZGV4KHRtcCldICs9IGZyZXF1ZW5jeTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBl
bHNlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fZnBOdW1XYXJtVXNlc0FuZERl
ZnNbQWJzb2x1dGVUbXBNYXBwZXI8RlA+OjphYnNvbHV0ZUluZGV4KHRtcCldICs9IGZyZXF1ZW5j
eTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgfSk7CiAK
ICAgICAgICAgICAgICAgICBpZiAoKGluc3Qua2luZC5vcGNvZGUgPT0gTW92ZSB8fCBpbnN0Lmtp
bmQub3Bjb2RlID09IE1vdmUzMikKICAgICAgICAgICAgICAgICAgICAgJiYgaW5zdC5hcmdzWzBd
LmlzU29tZUltbSgpCi0gICAgICAgICAgICAgICAgICAgICYmIGluc3QuYXJnc1sxXS5pczxUaGlu
Zz4oKSkKLSAgICAgICAgICAgICAgICAgICAgbV9jb3VudHMuYWRkKGluc3QuYXJnc1sxXS5hczxU
aGluZz4oKSwgQ291bnRzKCkpLml0ZXJhdG9yLT52YWx1ZS5udW1Db25zdERlZnMrKzsKKyAgICAg
ICAgICAgICAgICAgICAgJiYgaW5zdC5hcmdzWzFdLmlzPFRtcD4oKSkgeworICAgICAgICAgICAg
ICAgICAgICBUbXAgdG1wID0gaW5zdC5hcmdzWzFdLmFzPFRtcD4oKTsKKyAgICAgICAgICAgICAg
ICAgICAgaWYgKHRtcC5iYW5rKCkgPT0gR1ApCisgICAgICAgICAgICAgICAgICAgICAgICBtX2dw
Q29uc3REZWZzLnF1aWNrU2V0KEFic29sdXRlVG1wTWFwcGVyPEdQPjo6YWJzb2x1dGVJbmRleCh0
bXApKTsKKyAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAg
bV9mcENvbnN0RGVmcy5xdWlja1NldChBYnNvbHV0ZVRtcE1hcHBlcjxGUD46OmFic29sdXRlSW5k
ZXgodG1wKSk7CisgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQogICAgICAgICB9CiAg
ICAgfQogCi0gICAgY29uc3QgQ291bnRzKiBvcGVyYXRvcltdKGNvbnN0IFRoaW5nJiBhcmcpIGNv
bnN0CisgICAgdGVtcGxhdGU8QmFuayBiYW5rPgorICAgIGJvb2wgaXNDb25zdERlZih1bnNpZ25l
ZCBhYnNvbHV0ZUluZGV4KSBjb25zdAorICAgIHsKKyAgICAgICAgaWYgKGJhbmsgPT0gR1ApCisg
ICAgICAgICAgICByZXR1cm4gbV9ncENvbnN0RGVmcy5xdWlja0dldChhYnNvbHV0ZUluZGV4KTsK
KyAgICAgICAgcmV0dXJuIG1fZnBDb25zdERlZnMucXVpY2tHZXQoYWJzb2x1dGVJbmRleCk7Cisg
ICAgfQorCisgICAgdGVtcGxhdGU8QmFuayBiYW5rPgorICAgIGZsb2F0IG51bVdhcm1Vc2VzQW5k
RGVmcyh1bnNpZ25lZCBhYnNvbHV0ZUluZGV4KSBjb25zdAogICAgIHsKLSAgICAgICAgYXV0byBp
dGVyID0gbV9jb3VudHMuZmluZChhcmcpOwotICAgICAgICBpZiAoaXRlciA9PSBtX2NvdW50cy5l
bmQoKSkKLSAgICAgICAgICAgIHJldHVybiBudWxscHRyOwotICAgICAgICByZXR1cm4gJml0ZXIt
PnZhbHVlOworICAgICAgICBpZiAoYmFuayA9PSBHUCkKKyAgICAgICAgICAgIHJldHVybiBtX2dw
TnVtV2FybVVzZXNBbmREZWZzW2Fic29sdXRlSW5kZXhdOworICAgICAgICByZXR1cm4gbV9mcE51
bVdhcm1Vc2VzQW5kRGVmc1thYnNvbHV0ZUluZGV4XTsKICAgICB9CiAKICAgICB2b2lkIGR1bXAo
UHJpbnRTdHJlYW0mIG91dCkgY29uc3QKICAgICB7Ci0gICAgICAgIG91dC5wcmludChtYXBEdW1w
KG1fY291bnRzKSk7CisgICAgICAgIENvbW1hUHJpbnRlciBjb21tYSgiLCAiKTsKKyAgICAgICAg
Zm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fZ3BOdW1XYXJtVXNlc0FuZERlZnMuc2l6ZSgpOyAr
K2kpCisgICAgICAgICAgICBvdXQucHJpbnQoY29tbWEsIEFic29sdXRlVG1wTWFwcGVyPEdQPjo6
dG1wRnJvbUFic29sdXRlSW5kZXgoaSksICI9PiB7bnVtV2FybVVzZXNBbmREZWZzPSIsIG1fZ3BO
dW1XYXJtVXNlc0FuZERlZnNbaV0sICIsIGlzQ29uc3REZWY9IiwgbV9ncENvbnN0RGVmcy5xdWlj
a0dldChpKSwgIn0iKTsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fZnBOdW1X
YXJtVXNlc0FuZERlZnMuc2l6ZSgpOyArK2kpCisgICAgICAgICAgICBvdXQucHJpbnQoY29tbWEs
IEFic29sdXRlVG1wTWFwcGVyPEZQPjo6dG1wRnJvbUFic29sdXRlSW5kZXgoaSksICI9PiB7bnVt
V2FybVVzZXNBbmREZWZzPSIsIG1fZnBOdW1XYXJtVXNlc0FuZERlZnNbaV0sICIsIGlzQ29uc3RE
ZWY9IiwgbV9mcENvbnN0RGVmcy5xdWlja0dldChpKSwgIn0iKTsKICAgICB9CiAKIHByaXZhdGU6
Ci0gICAgSGFzaE1hcDxUaGluZywgQ291bnRzPiBtX2NvdW50czsKKyAgICBWZWN0b3I8ZmxvYXQ+
IG1fZ3BOdW1XYXJtVXNlc0FuZERlZnM7CisgICAgVmVjdG9yPGZsb2F0PiBtX2ZwTnVtV2FybVVz
ZXNBbmREZWZzOworICAgIEJpdFZlY3RvciBtX2dwQ29uc3REZWZzOworICAgIEJpdFZlY3RvciBt
X2ZwQ29uc3REZWZzOwogfTsKIAogfSB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjM6OkFpcgpkaWZm
IC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9Ob2Rlcy5oIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3BhcnNlci9Ob2Rlcy5oCmluZGV4IGVkMTczYzE3YTViYi4uNTYxMjk5YTZh
NzBmIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL05vZGVzLmgKKysr
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9Ob2Rlcy5oCkBAIC0zNiw3ICszNiw3IEBA
CiAjaW5jbHVkZSAiU3ltYm9sVGFibGUuaCIKICNpbmNsdWRlICJWYXJpYWJsZUVudmlyb25tZW50
LmgiCiAjaW5jbHVkZSA8d3RmL01hdGhFeHRyYXMuaD4KLSNpbmNsdWRlIDx3dGYvU21hbGxQdHJT
ZXQuaD4KKyNpbmNsdWRlIDx3dGYvU21hbGxTZXQuaD4KIAogbmFtZXNwYWNlIEpTQyB7CiAKQEAg
LTUzLDcgKzUzLDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgY2xhc3MgUmVnaXN0ZXJJRDsKICAg
ICBjbGFzcyBTY29wZU5vZGU7CiAKLSAgICB0eXBlZGVmIFNtYWxsUHRyU2V0PFVuaXF1ZWRTdHJp
bmdJbXBsKj4gVW5pcXVlZFN0cmluZ0ltcGxQdHJTZXQ7CisgICAgdHlwZWRlZiBTbWFsbFNldDxV
bmlxdWVkU3RyaW5nSW1wbCo+IFVuaXF1ZWRTdHJpbmdJbXBsUHRyU2V0OwogCiAgICAgZW51bSBj
bGFzcyBPcGVyYXRvciA6IHVpbnQ4X3QgewogICAgICAgICBFcXVhbCwKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XVEYvV1RGLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9Tb3VyY2UvV1RGL1dURi54
Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCmluZGV4IGIxMWUwOThjZTQ3Ny4uYWZmNTMyMWI0N2Yz
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL1dURi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisr
KyBiL1NvdXJjZS9XVEYvV1RGLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTQyLDcgKzQy
LDcgQEAKIAkJMEY5RDMzNjAxNjVEQkE3MzAwNUFEMzg3IC8qIEZpbGVQcmludFN0cmVhbS5jcHAg
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjlEMzM1QjE2
NURCQTczMDA1QUQzODcgLyogRmlsZVByaW50U3RyZWFtLmNwcCAqLzsgfTsKIAkJMEY5RDMzNjIx
NjVEQkE3MzAwNUFEMzg3IC8qIFByaW50U3RyZWFtLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGOUQzMzVEMTY1REJBNzMwMDVBRDM4NyAvKiBQcmlu
dFN0cmVhbS5jcHAgKi87IH07CiAJCTBGQTZGMzhGMjBDQzU4MEYwMEEwM0RDRCAvKiBTZWdtZW50
ZWRWZWN0b3IuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMEZBNkYzOEUyMENDNTgwRTAwQTAzRENEIC8qIFNlZ21lbnRlZFZlY3Rvci5jcHAgKi87IH07
Ci0JCTBGQTZGMzkzMjBDQzczQTMwMEEwM0RDRCAvKiBTbWFsbFB0clNldC5jcHAgaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkE2RjM5MjIwQ0M3M0EyMDBB
MDNEQ0QgLyogU21hbGxQdHJTZXQuY3BwICovOyB9OworCQkwRkE2RjM5MzIwQ0M3M0EzMDBBMDNE
Q0QgLyogU21hbGxTZXQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMEZBNkYzOTIyMENDNzNBMjAwQTAzRENEIC8qIFNtYWxsU2V0LmNwcCAqLzsgfTsK
IAkJMEZBNkYzOTUyMENDQUNFOTAwQTAzRENEIC8qIFVuaXF1ZUFycmF5LmNwcCBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGQTZGMzk0MjBDQ0FDRTkwMEEw
M0RDRCAvKiBVbmlxdWVBcnJheS5jcHAgKi87IH07CiAJCTBGRERCRkE3MTY2NkRGQTMwMEM1NUZF
RiAvKiBTdHJpbmdQcmludFN0cmVhbS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAwRkREQkZBNTE2NjZERkEzMDBDNTVGRUYgLyogU3RyaW5nUHJpbnRT
dHJlYW0uY3BwICovOyB9OwogCQkwRkUxNjQ2QTFCNkZGQzk2MDA0MDBFN0MgLyogTG9jay5jcHAg
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkUxNjQ2ODFC
NkZGQzk2MDA0MDBFN0MgLyogTG9jay5jcHAgKi87IH07CkBAIC0yNzIsNyArMjcyLDcgQEAKIAkJ
MEY5REFBMDUxRkQxQzM3QjAwNzlDNUIyIC8qIFN0YWNrU2hvdFByb2ZpbGVyLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFN0YWNrU2hvdFByb2ZpbGVyLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTBGQTZGMzhFMjBDQzU4MEUwMEEwM0RDRCAvKiBTZWdtZW50ZWRW
ZWN0b3IuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU2VnbWVudGVk
VmVjdG9yLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZBNkYzOTAyMENDNjFF
QjAwQTAzRENEIC8qIFJlZkNvdW50ZWRBcnJheS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IHBhdGggPSBSZWZDb3VudGVkQXJyYXkuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwotCQkwRkE2RjM5MjIwQ0M3M0EyMDBBMDNEQ0QgLyogU21hbGxQdHJTZXQuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU21hbGxQdHJTZXQuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQkwRkE2RjM5MjIwQ0M3M0EyMDBBMDNEQ0QgLyogU21hbGxT
ZXQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU21hbGxTZXQuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRkE2RjM5NDIwQ0NBQ0U5MDBBMDNEQ0Qg
LyogVW5pcXVlQXJyYXkuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
VW5pcXVlQXJyYXkuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRkIxNEUxODE4
MEZBMjE4MDA5QjZCNEQgLyogQmFnLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IEJhZy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRkIxNEUxQTE4MTBFMURBMDA5
QjZCNEQgLyogQmFnVG9IYXNoTWFwLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEJhZ1RvSGFzaE1hcC5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtNDQyLDcgKzQ0Miw3IEBACiAJCTcwRUNBNjBC
MUIwMjQyNjgwMDQ0OTczOSAvKiBTeW1ib2xJbXBsLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IFN5bWJvbEltcGwuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzBF
Q0E2MEMxQjAyNDI2ODAwNDQ5NzM5IC8qIFVuaXF1ZWRTdHJpbmdJbXBsLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFVuaXF1ZWRTdHJpbmdJbXBsLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTc5MDM4RTA1MjI0QjA1QTcwMDRDMDczOCAvKiBTcGFubmluZ1RyZWUu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU3Bhbm5pbmdUcmVlLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTc5MzZENkE5MUM5OUY4QUUwMDBEMUFFRCAvKiBTbWFs
bFB0clNldC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTbWFsbFB0clNldC5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3OTM2RDZBOTFDOTlGOEFFMDAwRDFBRUQg
LyogU21hbGxTZXQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU21hbGxTZXQu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzkzQkZBREQ5Q0VENDRCOEI5RkJDQTE2
IC8qIFN0ZFVub3JkZXJlZE1hcC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBT
dGRVbm9yZGVyZWRNYXAuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzk1MjEyMDIx
RjQyNTg4ODAwQkQ2NDIxIC8qIFNpbmdsZVJvb3RHcmFwaC5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBTaW5nbGVSb290R3JhcGguaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJN0EwNTA5M0QxRkI5RENDNTAwQjMzRkI4IC8qIEpTT05WYWx1ZXMuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNPTlZhbHVlcy5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwpAQCAtMTI0NCw4ICsxMjQ0LDggQEAKIAkJCQlBNzQ4NzQ0RjE3QTBCREFFMDBGQTA0
Q0IgLyogU2l4Q2hhcmFjdGVySGFzaC5jcHAgKi8sCiAJCQkJQTc0ODc0NTAxN0EwQkRBRTAwRkEw
NENCIC8qIFNpeENoYXJhY3Rlckhhc2guaCAqLywKIAkJCQlBOEE0NzMwQzE1MUE4MjVCMDA0MTIz
RkYgLyogU2l6ZUxpbWl0cy5jcHAgKi8sCi0JCQkJMEZBNkYzOTIyMENDNzNBMjAwQTAzRENEIC8q
IFNtYWxsUHRyU2V0LmNwcCAqLywKLQkJCQk3OTM2RDZBOTFDOTlGOEFFMDAwRDFBRUQgLyogU21h
bGxQdHJTZXQuaCAqLywKKwkJCQkwRkE2RjM5MjIwQ0M3M0EyMDBBMDNEQ0QgLyogU21hbGxTZXQu
Y3BwICovLAorCQkJCTc5MzZENkE5MUM5OUY4QUUwMDBEMUFFRCAvKiBTbWFsbFNldC5oICovLAog
CQkJCUEzMEQ0MTJEMUYwREUxM0YwMEI3MTk1NCAvKiBTb2Z0TGlua2luZy5oICovLAogCQkJCTkz
MTU2QzhEMjYyQzk4MjIwMEVBRTI3QiAvKiBTb3J0ZWRBcnJheU1hcC5oICovLAogCQkJCTc5MDM4
RTA1MjI0QjA1QTcwMDRDMDczOCAvKiBTcGFubmluZ1RyZWUuaCAqLywKQEAgLTE3NjAsNyArMTc2
MCw3IEBACiAJCQkJNTMxMUJENTMxRUE3MUNBRDAwNTI1MjgxIC8qIFNpZ25hbHMuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJQTc0ODc0NTIxN0EwQkRBRTAwRkEwNENCIC8qIFNpeENoYXJhY3Rlckhh
c2guY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQThBNDc0MjUxNTFBODI1QjAwNDEyM0ZGIC8qIFNp
emVMaW1pdHMuY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJMEZBNkYzOTMyMENDNzNBMzAwQTAzRENE
IC8qIFNtYWxsUHRyU2V0LmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBGQTZGMzkzMjBDQzczQTMw
MEEwM0RDRCAvKiBTbWFsbFNldC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBOEE0NzQyNzE1MUE4
MjVCMDA0MTIzRkYgLyogU3RhY2tCb3VuZHMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJRkVFQTRE
RjkyMTZEN0JFNDAwQUMwNjAyIC8qIFN0YWNrUG9pbnRlci5jcHAgaW4gU291cmNlcyAqLywKIAkJ
CQlGRURBQ0QzRDE2MzBGODNGMDBDNjk2MzQgLyogU3RhY2tTdGF0cy5jcHAgaW4gU291cmNlcyAq
LywKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL0NNYWtlTGlzdHMudHh0IGIvU291cmNlL1dU
Ri93dGYvQ01ha2VMaXN0cy50eHQKaW5kZXggZTdkYmM0ZjAyZmEwLi44MDE4ZmFiYTQ2YzcgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL0NNYWtlTGlzdHMudHh0CisrKyBiL1NvdXJjZS9XVEYv
d3RmL0NNYWtlTGlzdHMudHh0CkBAIC0yMzUsNyArMjM1LDcgQEAgc2V0KFdURl9QVUJMSUNfSEVB
REVSUwogICAgIFNpbmdseUxpbmtlZExpc3QuaAogICAgIFNpbmdseUxpbmtlZExpc3RXaXRoVGFp
bC5oCiAgICAgU2l4Q2hhcmFjdGVySGFzaC5oCi0gICAgU21hbGxQdHJTZXQuaAorICAgIFNtYWxs
U2V0LmgKICAgICBTb2Z0TGlua2luZy5oCiAgICAgU29ydGVkQXJyYXlNYXAuaAogICAgIFNwYW5u
aW5nVHJlZS5oCkBAIC00NDMsNyArNDQzLDcgQEAgc2V0KFdURl9TT1VSQ0VTCiAgICAgU2Vjb25k
cy5jcHAKICAgICBTZWdtZW50ZWRWZWN0b3IuY3BwCiAgICAgU2l4Q2hhcmFjdGVySGFzaC5jcHAK
LSAgICBTbWFsbFB0clNldC5jcHAKKyAgICBTbWFsbFNldC5jcHAKICAgICBTdGFja0JvdW5kcy5j
cHAKICAgICBTdGFja1BvaW50ZXIuY3BwCiAgICAgU3RhY2tTdGF0cy5jcHAKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XVEYvd3RmL1NtYWxsUHRyU2V0LmNwcCBiL1NvdXJjZS9XVEYvd3RmL1NtYWxsU2V0
LmNwcApzaW1pbGFyaXR5IGluZGV4IDk0JQpyZW5hbWUgZnJvbSBTb3VyY2UvV1RGL3d0Zi9TbWFs
bFB0clNldC5jcHAKcmVuYW1lIHRvIFNvdXJjZS9XVEYvd3RmL1NtYWxsU2V0LmNwcAppbmRleCA0
MjA0OGU3ZThhMjMuLjJkMmY0MTViMmM3YSAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYvU21h
bGxQdHJTZXQuY3BwCisrKyBiL1NvdXJjZS9XVEYvd3RmL1NtYWxsU2V0LmNwcApAQCAtMjQsMTIg
KzI0LDEyIEBACiAgKi8KIAogI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgPHd0Zi9TbWFs
bFB0clNldC5oPgorI2luY2x1ZGUgPHd0Zi9TbWFsbFNldC5oPgogCiAjaW5jbHVkZSA8d3RmL05l
dmVyRGVzdHJveWVkLmg+CiAKIG5hbWVzcGFjZSBXVEYgewogCi1ERUZJTkVfQUxMT0NBVE9SX1dJ
VEhfSEVBUF9JREVOVElGSUVSKFNtYWxsUHRyU2V0KTsKK0RFRklORV9BTExPQ0FUT1JfV0lUSF9I
RUFQX0lERU5USUZJRVIoU21hbGxTZXQpOwogCiB9IC8vIG5hbWVzcGFjZSBXVEYKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XVEYvd3RmL1NtYWxsUHRyU2V0LmggYi9Tb3VyY2UvV1RGL3d0Zi9TbWFsbFNl
dC5oCnNpbWlsYXJpdHkgaW5kZXggNTUlCnJlbmFtZSBmcm9tIFNvdXJjZS9XVEYvd3RmL1NtYWxs
UHRyU2V0LmgKcmVuYW1lIHRvIFNvdXJjZS9XVEYvd3RmL1NtYWxsU2V0LmgKaW5kZXggNGM2ZTQ2
MTk2ZDI5Li5lNmZmMmJiMDMyNzEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL1NtYWxsUHRy
U2V0LmgKKysrIGIvU291cmNlL1dURi93dGYvU21hbGxTZXQuaApAQCAtMzIsNjUgKzMyLDcxIEBA
CiAKIG5hbWVzcGFjZSBXVEYgewogCi1ERUNMQVJFX0FMTE9DQVRPUl9XSVRIX0hFQVBfSURFTlRJ
RklFUihTbWFsbFB0clNldCk7CitERUNMQVJFX0FMTE9DQVRPUl9XSVRIX0hFQVBfSURFTlRJRklF
UihTbWFsbFNldCk7CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFB0clR5cGUsIHVuc2lnbmVkIFNtYWxs
QXJyYXlTaXplID0gOD4KLWNsYXNzIFNtYWxsUHRyU2V0IHsKK3RlbXBsYXRlPHR5cGVuYW1lIFQs
IHR5cGVuYW1lIEhhc2ggPSBQdHJIYXNoQmFzZTxULCBmYWxzZSAvKiBpc1NtYXJ0UHRyICovPiwg
dW5zaWduZWQgU21hbGxBcnJheVNpemUgPSA4PgorY2xhc3MgU21hbGxTZXQgewogICAgIFdURl9N
QUtFX0ZBU1RfQUxMT0NBVEVEOwotICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKFNtYWxsUHRyU2V0
KTsKLSAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfdHJpdmlhbGx5X2Rlc3RydWN0aWJsZTxQdHJU
eXBlPjo6dmFsdWUsICJXZSBjdXJyZW50bHkgZG9uJ3Qgc3VwcG9ydCBub24tdHJpdmlhbGx5IGRl
c3RydWN0aWJsZSBwb2ludGVyIHR5cGVzLiIpOwotICAgIHN0YXRpY19hc3NlcnQoc2l6ZW9mKFB0
clR5cGUpID09IHNpemVvZih2b2lkKiksICJPbmx5IHN1cHBvcnQgcG9pbnRlciBzaXplZCB0aGlu
Z3MuIik7CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoU21hbGxTZXQpOworICAgIHN0YXRpY19h
c3NlcnQoc3RkOjppc190cml2aWFsbHlfZGVzdHJ1Y3RpYmxlPFQ+Ojp2YWx1ZSwgIldlIGN1cnJl
bnRseSBkb24ndCBzdXBwb3J0IG5vbi10cml2aWFsbHkgZGVzdHJ1Y3RpYmxlIHR5cGVzLiIpOwog
ICAgIHN0YXRpY19hc3NlcnQoIShTbWFsbEFycmF5U2l6ZSAmIChTbWFsbEFycmF5U2l6ZSAtIDEp
KSwgIklubGluZSBzaXplIG11c3QgYmUgYSBwb3dlciBvZiB0d28uIik7CisgICAgc3RhdGljX2Fz
c2VydChzaXplb2YoVCopIDw9IFNtYWxsQXJyYXlTaXplICogc2l6ZW9mKFQpLCAiVGhpcyBjbGFz
cyBoYXMgbm90IGJlZW4gdGVzdGVkIGZvciBtX2lubGluZS5idWZmZXIgbGFyZ2VyIHRoYW4gbV9p
bmxpbmUuc21hbGxTdG9yYWdlIik7CiAKLXB1YmxpYzogCi0gICAgU21hbGxQdHJTZXQoKQorcHVi
bGljOgorICAgIFNtYWxsU2V0KCkKKyAgICAgICAgOiBtX2lubGluZSgpCiAgICAgewogICAgICAg
ICBpbml0aWFsaXplKCk7CiAgICAgfQogCi0gICAgLy8gV2UgdGFrZSBjYXJlIHRvIGhhdmUgU21h
bGxQdHJTZXQgaGF2ZSBwYXJ0aWFsIG1vdmUgc2VtYW50aWNzIGFsbG93YWJsZSB0aHJvdWdoCisg
ICAgLy8gV2UgdGFrZSBjYXJlIHRvIGhhdmUgU21hbGxTZXQgaGF2ZSBwYXJ0aWFsIG1vdmUgc2Vt
YW50aWNzIGFsbG93YWJsZSB0aHJvdWdoCiAgICAgLy8gbWVtY3B5LiBJdCdzIHBhcnRpYWwgbW92
ZSBzZW1hbnRpY3MgYmVjYXVzZSBvdXIgZGVzdHJ1Y3RvciBzaG91bGQgbm90IGJlIGNhbGxlZAog
ICAgIC8vIG9uIHRoZSBTbWFsbFB0ck9iamVjdCBpbiB0aGUgb2xkIG1lbW9yeSB3ZSB3ZXJlIG1v
dmVkIGZyb20gKG90aGVyd2lzZSwgd2UgbWlnaHQgZnJlZSBtX2J1ZmZlciB0d2ljZSkKICAgICAv
LyB1bmxlc3MgdGhhdCBvbGQgbWVtb3J5IGlzIHJlc2V0IHRvIGJlIGlzU21hbGwoKS4gU2VlIG1v
dmUgY29uc3RydWN0b3IgYmVsb3cuCiAgICAgLy8gVG8gbWFpbnRhaW4gdGhlc2Ugc2VtYW50aWNz
LCB3ZSBkZXRlcm1pbmUgaWYgd2UncmUgc21hbGwgYnkgY2hlY2tpbmcgb3VyIHNpemUKICAgICAv
LyBhbmQgbm90IG91ciBtX2J1ZmZlciBwb2ludGVyLiBBbmQgd2hlbiB3ZSdyZSBzbWFsbCwgd2Ug
ZG9uJ3QgZG8gb3BlcmF0aW9ucyBvbgogICAgIC8vIG1fYnVmZmVyLCBpbnN0ZWFkLCB3ZSBwZXJm
b3JtIG9wZXJhdGlvbnMgb24gbV9zbWFsbFN0b3JhZ2UgZGlyZWN0bHkuIFRoZSByZWFzb24gd2Ug
d2FudAotICAgIC8vIHRoZXNlIHNlbWFudGljcyBpcyB0aGF0IGl0J3MgYmVuZWZpY2lhbCB0byBo
YXZlIGEgVmVjdG9yIHRoYXQgY29udGFpbnMgU21hbGxQdHJTZXQKLSAgICAvLyAob3IgYW4gb2Jq
ZWN0IHdpdGggU21hbGxQdHJTZXQgYXMgYSBmaWVsZCkgYmUgYWxsb3dlZCB0byB1c2UgbWVtY3B5
IGZvciBpdHMgbW92ZSBvcGVyYXRpb24uCisgICAgLy8gdGhlc2Ugc2VtYW50aWNzIGlzIHRoYXQg
aXQncyBiZW5lZmljaWFsIHRvIGhhdmUgYSBWZWN0b3IgdGhhdCBjb250YWlucyBTbWFsbFNldAor
ICAgIC8vIChvciBhbiBvYmplY3Qgd2l0aCBTbWFsbFNldCBhcyBhIGZpZWxkKSBiZSBhbGxvd2Vk
IHRvIHVzZSBtZW1jcHkgZm9yIGl0cyBtb3ZlIG9wZXJhdGlvbi4KIAotICAgIFNtYWxsUHRyU2V0
KFNtYWxsUHRyU2V0JiYgb3RoZXIpCisgICAgU21hbGxTZXQoU21hbGxTZXQmJiBvdGhlcikKICAg
ICB7Ci0gICAgICAgIG1lbWNweSh0aGlzLCAmb3RoZXIsIHNpemVvZihTbWFsbFB0clNldCkpOwor
ICAgICAgICBtZW1jcHkodGhpcywgJm90aGVyLCBzaXplb2YoU21hbGxTZXQpKTsKICAgICAgICAg
b3RoZXIuaW5pdGlhbGl6ZSgpOwogICAgIH0KIAotICAgIFNtYWxsUHRyU2V0JiBvcGVyYXRvcj0o
U21hbGxQdHJTZXQmJiBvdGhlcikKKyAgICBTbWFsbFNldCYgb3BlcmF0b3I9KFNtYWxsU2V0JiYg
b3RoZXIpCiAgICAgewotICAgICAgICB0aGlzLT5+U21hbGxQdHJTZXQoKTsKLSAgICAgICAgbmV3
ICh0aGlzKSBTbWFsbFB0clNldChXVEZNb3ZlKG90aGVyKSk7CisgICAgICAgIHRoaXMtPn5TbWFs
bFNldCgpOworICAgICAgICBuZXcgKHRoaXMpIFNtYWxsU2V0KFdURk1vdmUob3RoZXIpKTsKICAg
ICAgICAgcmV0dXJuICp0aGlzOwogICAgIH0KIAotICAgIH5TbWFsbFB0clNldCgpCisgICAgflNt
YWxsU2V0KCkKICAgICB7CiAgICAgICAgIGlmICghaXNTbWFsbCgpKQotICAgICAgICAgICAgU21h
bGxQdHJTZXRNYWxsb2M6OmZyZWUobV9idWZmZXIpOworICAgICAgICAgICAgU21hbGxTZXRNYWxs
b2M6OmZyZWUobV9pbmxpbmUuYnVmZmVyKTsKICAgICB9CiAKLSAgICBpbmxpbmUgdm9pZCBhZGQo
UHRyVHlwZSBwdHIpCisgICAgLy8gV2UgY291bGQgZWFzaWx5IGluY2x1ZGUgYW4gaXRlcmF0b3Ig
aW4gdGhpcyB0byBmdWxseSBtYXRjaCB0aGUgSGFzaFNldCBpbnRlcmZhY2UsIGJ1dCBjdXJyZW50
bHkgbm9uZSBvZiBvdXIgY2xpZW50cyByZXF1aXJlIGl0LgorICAgIHN0cnVjdCBBZGRSZXN1bHQg
eworICAgICAgICBib29sIGlzTmV3RW50cnk7CisgICAgfTsKKworICAgIGlubGluZSBBZGRSZXN1
bHQgYWRkKFQgdmFsdWUpCiAgICAgewotICAgICAgICBBU1NFUlQoaXNWYWxpZEVudHJ5KHB0cikp
OworICAgICAgICBBU1NFUlQoaXNWYWxpZEVudHJ5KHZhbHVlKSk7CiAKICAgICAgICAgaWYgKGlz
U21hbGwoKSkgewogICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fc2l6ZTsg
aSsrKSB7Ci0gICAgICAgICAgICAgICAgaWYgKG1fc21hbGxTdG9yYWdlW2ldID09IHB0cikKLSAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgIGlmIChtX2lubGluZS5z
bWFsbFN0b3JhZ2VbaV0gPT0gdmFsdWUpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiB7IGZh
bHNlIH07CiAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIGlmIChtX3NpemUgPCBTbWFsbEFy
cmF5U2l6ZSkgewotICAgICAgICAgICAgICAgIG1fc21hbGxTdG9yYWdlW21fc2l6ZV0gPSBwdHI7
CisgICAgICAgICAgICAgICAgbV9pbmxpbmUuc21hbGxTdG9yYWdlW21fc2l6ZV0gPSB2YWx1ZTsK
ICAgICAgICAgICAgICAgICArK21fc2l6ZTsKLSAgICAgICAgICAgICAgICByZXR1cm47CisgICAg
ICAgICAgICAgICAgcmV0dXJuIHsgdHJ1ZSB9OwogICAgICAgICAgICAgfQogCiAgICAgICAgICAg
ICBncm93KHN0ZDo6bWF4KDY0dSwgU21hbGxBcnJheVNpemUgKiAyKSk7CkBAIC0xMDMsMjYgKzEw
OSwyOCBAQCBwdWJsaWM6CiAgICAgICAgICAgICBBU1NFUlQoIShtX2NhcGFjaXR5ICYgKG1fY2Fw
YWNpdHkgLSAxKSkpOwogICAgICAgICB9CiAKLSAgICAgICAgdm9pZCoqIGJ1Y2tldCA9IHRoaXMt
PmJ1Y2tldChwdHIpOwotICAgICAgICBpZiAoKmJ1Y2tldCAhPSBwdHIpIHsKLSAgICAgICAgICAg
ICpidWNrZXQgPSBwdHI7CisgICAgICAgIFQqIGJ1Y2tldCA9IHRoaXMtPmJ1Y2tldCh2YWx1ZSk7
CisgICAgICAgIGlmICgqYnVja2V0ICE9IHZhbHVlKSB7CisgICAgICAgICAgICAqYnVja2V0ID0g
dmFsdWU7CiAgICAgICAgICAgICArK21fc2l6ZTsKKyAgICAgICAgICAgIHJldHVybiB7IHRydWUg
fTsKICAgICAgICAgfQorICAgICAgICByZXR1cm4geyBmYWxzZSB9OwogICAgIH0KIAotICAgIGlu
bGluZSBib29sIGNvbnRhaW5zKFB0clR5cGUgcHRyKSBjb25zdAorICAgIGlubGluZSBib29sIGNv
bnRhaW5zKFQgdmFsdWUpIGNvbnN0CiAgICAgewotICAgICAgICBBU1NFUlQoaXNWYWxpZEVudHJ5
KHB0cikpOworICAgICAgICBBU1NFUlQoaXNWYWxpZEVudHJ5KHZhbHVlKSk7CiAgICAgICAgIGlm
IChpc1NtYWxsKCkpIHsKICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX3Np
emU7IGkrKykgeyAvLyBXZSBvbmx5IG5lZWQgdG8gc2VhcmNoIHVwIHRvIG1fc2l6ZSBiZWNhdXNl
IHdlIHN0b3JlIHRoaW5ncyBsaW5lYXJseSBpbnNpZGUgbV9zbWFsbFN0b3JhZ2UuCi0gICAgICAg
ICAgICAgICAgaWYgKG1fc21hbGxTdG9yYWdlW2ldID09IHB0cikKKyAgICAgICAgICAgICAgICBp
ZiAobV9pbmxpbmUuc21hbGxTdG9yYWdlW2ldID09IHZhbHVlKQogICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gdHJ1ZTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
ICAgICAgICAgfQogCi0gICAgICAgIHZvaWQqKiBidWNrZXQgPSB0aGlzLT5idWNrZXQocHRyKTsK
LSAgICAgICAgcmV0dXJuICpidWNrZXQgPT0gcHRyOworICAgICAgICBUKiBidWNrZXQgPSB0aGlz
LT5idWNrZXQodmFsdWUpOworICAgICAgICByZXR1cm4gKmJ1Y2tldCA9PSB2YWx1ZTsKICAgICB9
CiAKICAgICBjbGFzcyBpdGVyYXRvciB7CkBAIC0xMzcsMTUgKzE0NSwxNSBAQCBwdWJsaWM6CiAg
ICAgICAgICAgICByZXR1cm4gKnRoaXM7CiAgICAgICAgIH0KICAgICAgICAgCi0gICAgICAgIFB0
clR5cGUgb3BlcmF0b3IqKCkgY29uc3QgeyBBU1NFUlQobV9pbmRleCA8IG1fY2FwYWNpdHkpOyBy
ZXR1cm4gc3RhdGljX2Nhc3Q8UHRyVHlwZT4obV9idWZmZXJbbV9pbmRleF0pOyB9CisgICAgICAg
IFQgb3BlcmF0b3IqKCkgY29uc3QgeyBBU1NFUlQobV9pbmRleCA8IG1fY2FwYWNpdHkpOyByZXR1
cm4gc3RhdGljX2Nhc3Q8VD4obV9idWZmZXJbbV9pbmRleF0pOyB9CiAgICAgICAgIGJvb2wgb3Bl
cmF0b3I9PShjb25zdCBpdGVyYXRvciYgb3RoZXIpIGNvbnN0IHsgQVNTRVJUKG1fYnVmZmVyID09
IG90aGVyLm1fYnVmZmVyKTsgcmV0dXJuIG1faW5kZXggPT0gb3RoZXIubV9pbmRleDsgfQogICAg
ICAgICBib29sIG9wZXJhdG9yIT0oY29uc3QgaXRlcmF0b3ImIG90aGVyKSBjb25zdCB7IEFTU0VS
VChtX2J1ZmZlciA9PSBvdGhlci5tX2J1ZmZlcik7IHJldHVybiAhKCp0aGlzID09IG90aGVyKTsg
fQogCiAgICAgcHJpdmF0ZToKLSAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVSwgdW5zaWduZWQg
Uz4gZnJpZW5kIGNsYXNzIFdURjo6U21hbGxQdHJTZXQ7CisgICAgICAgIHRlbXBsYXRlPHR5cGVu
YW1lIFUsIHR5cGVuYW1lIEgsIHVuc2lnbmVkIFM+IGZyaWVuZCBjbGFzcyBXVEY6OlNtYWxsU2V0
OwogICAgICAgICB1bnNpZ25lZCBtX2luZGV4OwogICAgICAgICB1bnNpZ25lZCBtX2NhcGFjaXR5
OwotICAgICAgICB2b2lkKiogbV9idWZmZXI7CisgICAgICAgIFQqIG1fYnVmZmVyOwogICAgIH07
CiAKICAgICBpdGVyYXRvciBiZWdpbigpIGNvbnN0CkBAIC0xNTQsOSArMTYyLDkgQEAgcHVibGlj
OgogICAgICAgICBpdC5tX2luZGV4ID0gc3RkOjpudW1lcmljX2xpbWl0czx1bnNpZ25lZD46Om1h
eCgpOwogICAgICAgICBpdC5tX2NhcGFjaXR5ID0gbV9jYXBhY2l0eTsKICAgICAgICAgaWYgKGlz
U21hbGwoKSkKLSAgICAgICAgICAgIGl0Lm1fYnVmZmVyID0gY29uc3RfY2FzdDx2b2lkKio+KG1f
c21hbGxTdG9yYWdlKTsKKyAgICAgICAgICAgIGl0Lm1fYnVmZmVyID0gY29uc3RfY2FzdDxUKj4o
bV9pbmxpbmUuc21hbGxTdG9yYWdlKTsKICAgICAgICAgZWxzZQotICAgICAgICAgICAgaXQubV9i
dWZmZXIgPSBtX2J1ZmZlcjsKKyAgICAgICAgICAgIGl0Lm1fYnVmZmVyID0gbV9pbmxpbmUuYnVm
ZmVyOwogCiAgICAgICAgICsraXQ7CiAKQEAgLTE2OSwyNCArMTc3LDI4IEBAIHB1YmxpYzoKICAg
ICAgICAgaXQubV9pbmRleCA9IG1fY2FwYWNpdHk7CiAgICAgICAgIGl0Lm1fY2FwYWNpdHkgPSBt
X2NhcGFjaXR5OwogICAgICAgICBpZiAoaXNTbWFsbCgpKQotICAgICAgICAgICAgaXQubV9idWZm
ZXIgPSBjb25zdF9jYXN0PHZvaWQqKj4obV9zbWFsbFN0b3JhZ2UpOworICAgICAgICAgICAgaXQu
bV9idWZmZXIgPSBjb25zdF9jYXN0PFQqPihtX2lubGluZS5zbWFsbFN0b3JhZ2UpOwogICAgICAg
ICBlbHNlCi0gICAgICAgICAgICBpdC5tX2J1ZmZlciA9IG1fYnVmZmVyOworICAgICAgICAgICAg
aXQubV9idWZmZXIgPSBtX2lubGluZS5idWZmZXI7CiAKICAgICAgICAgcmV0dXJuIGl0OwogICAg
IH0KIAogICAgIGlubGluZSB1bnNpZ25lZCBzaXplKCkgY29uc3QgeyByZXR1cm4gbV9zaXplOyB9
CiAKKyAgICBpbmxpbmUgYm9vbCBpc0VtcHR5KCkgY29uc3QgeyByZXR1cm4gIXNpemUoKTsgfQor
CiBwcml2YXRlOgotICAgIGNvbnN0ZXhwciBzdGF0aWMgdm9pZCogZW1wdHlWYWx1ZSgpCisgICAg
Y29uc3RleHByIHN0YXRpYyBUIGVtcHR5VmFsdWUoKQogICAgIHsKLSAgICAgICAgcmV0dXJuIGJp
dHdpc2VfY2FzdDx2b2lkKj4oc3RkOjpudW1lcmljX2xpbWl0czx1aW50cHRyX3Q+OjptYXgoKSk7
CisgICAgICAgIGlmIGNvbnN0ZXhwciAoc3RkOjppc19wb2ludGVyPFQ+Ojp2YWx1ZSkKKyAgICAg
ICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxUPihiaXR3aXNlX2Nhc3Q8dm9pZCo+KHN0ZDo6bnVt
ZXJpY19saW1pdHM8dWludHB0cl90Pjo6bWF4KCkpKTsKKyAgICAgICAgcmV0dXJuIHN0ZDo6bnVt
ZXJpY19saW1pdHM8VD46Om1heCgpOwogICAgIH0KIAotICAgIGJvb2wgaXNWYWxpZEVudHJ5KGNv
bnN0IFB0clR5cGUgcHRyKSBjb25zdAorICAgIGJvb2wgaXNWYWxpZEVudHJ5KGNvbnN0IFQgdmFs
dWUpIGNvbnN0CiAgICAgewotICAgICAgICByZXR1cm4gcHRyICE9IGVtcHR5VmFsdWUoKTsKKyAg
ICAgICAgcmV0dXJuIHZhbHVlICE9IGVtcHR5VmFsdWUoKTsKICAgICB9CiAKICAgICBpbmxpbmUg
Ym9vbCBpc1NtYWxsKCkgY29uc3QKQEAgLTE5Nyw0MyArMjA5LDY0IEBAIHByaXZhdGU6CiAgICAg
aW5saW5lIHZvaWQgaW5pdGlhbGl6ZSgpCiAgICAgewogICAgICAgICBtX3NpemUgPSAwOwotICAg
ICAgICBtX2J1ZmZlciA9IG51bGxwdHI7CiAgICAgICAgIG1fY2FwYWNpdHkgPSBTbWFsbEFycmF5
U2l6ZTsKLSAgICAgICAgbWVtc2V0KG1fc21hbGxTdG9yYWdlLCAtMSwgc2l6ZW9mKHZvaWQqKSAq
IFNtYWxsQXJyYXlTaXplKTsKKyAgICAgICAgbWVtc2V0KG1faW5saW5lLnNtYWxsU3RvcmFnZSwg
LTEsIHNpemVvZihUKSAqIFNtYWxsQXJyYXlTaXplKTsKICAgICAgICAgQVNTRVJUKGlzU21hbGwo
KSk7CiAgICAgfQogCiAgICAgaW5saW5lIHZvaWQgZ3Jvdyh1bnNpZ25lZCBzaXplKQogICAgIHsK
LSAgICAgICAgQVNTRVJUKHN0YXRpY19jYXN0PGludDMyX3Q+KGJpdHdpc2VfY2FzdDxpbnRwdHJf
dD4oZW1wdHlWYWx1ZSgpKSkgPT0gLTEpOworICAgICAgICAvLyBXZSBtZW1zZXQgdGhlIG5ldyBi
dWZmZXIgd2l0aCAtMSwgc28gZm9yIGNvbnNpc3RlbmN5IGVtcHR5VmFsdWUoKSBtdXN0IHJldHVy
biBzb21ldGhpbmcgd2hpY2ggaXMgYWxsIDFzLgorI2lmICFkZWZpbmVkKE5ERUJVRykKKyAgICAg
ICAgaWYgY29uc3RleHByIChzdGQ6OmlzX3BvaW50ZXI8VD46OnZhbHVlKQorICAgICAgICAgICAg
QVNTRVJUKGJpdHdpc2VfY2FzdDxpbnRwdHJfdD4oZW1wdHlWYWx1ZSgpKSA9PSAtMWxsKTsKKyAg
ICAgICAgZWxzZSBpZiBjb25zdGV4cHIgKHNpemVvZihUKSA9PSA4KQorICAgICAgICAgICAgQVNT
RVJUKGJpdHdpc2VfY2FzdDxpbnQ2NF90PihlbXB0eVZhbHVlKCkpID09IC0xbGwpOworICAgICAg
ICBlbHNlIGlmIGNvbnN0ZXhwciAoc2l6ZW9mKFQpID09IDQpCisgICAgICAgICAgICBBU1NFUlQo
Yml0d2lzZV9jYXN0PGludDMyX3Q+KGVtcHR5VmFsdWUoKSkgPT0gLTEpOworICAgICAgICBlbHNl
IGlmIGNvbnN0ZXhwciAoc2l6ZW9mKFQpID09IDIpCisgICAgICAgICAgICBBU1NFUlQoYml0d2lz
ZV9jYXN0PGludDE2X3Q+KGVtcHR5VmFsdWUoKSkgPT0gLTEpOworICAgICAgICBlbHNlIGlmIGNv
bnN0ZXhwciAoc2l6ZW9mKFQpID09IDEpCisgICAgICAgICAgICBBU1NFUlQoYml0d2lzZV9jYXN0
PGludDhfdD4oZW1wdHlWYWx1ZSgpKSA9PSAtMSk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAg
IFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisjZW5kaWYKIAotICAgICAgICBzaXplX3Qg
YWxsb2NhdGlvblNpemUgPSBzaXplb2Yodm9pZCopICogc2l6ZTsKKyAgICAgICAgc2l6ZV90IGFs
bG9jYXRpb25TaXplID0gc2l6ZW9mKFQpICogc2l6ZTsKICAgICAgICAgYm9vbCB3YXNTbWFsbCA9
IGlzU21hbGwoKTsKLSAgICAgICAgdm9pZCoqIG9sZEJ1ZmZlciA9IHdhc1NtYWxsID8gbV9zbWFs
bFN0b3JhZ2UgOiBtX2J1ZmZlcjsKKyAgICAgICAgVCogb2xkQnVmZmVyID0gd2FzU21hbGwgPyBt
X2lubGluZS5zbWFsbFN0b3JhZ2UgOiBtX2lubGluZS5idWZmZXI7CiAgICAgICAgIHVuc2lnbmVk
IG9sZENhcGFjaXR5ID0gbV9jYXBhY2l0eTsKLSAgICAgICAgbV9idWZmZXIgPSBzdGF0aWNfY2Fz
dDx2b2lkKio+KFNtYWxsUHRyU2V0TWFsbG9jOjptYWxsb2MoYWxsb2NhdGlvblNpemUpKTsKLSAg
ICAgICAgbWVtc2V0KG1fYnVmZmVyLCAtMSwgYWxsb2NhdGlvblNpemUpOworICAgICAgICBUKiBu
ZXdCdWZmZXIgPSBzdGF0aWNfY2FzdDxUKj4oU21hbGxTZXRNYWxsb2M6Om1hbGxvYyhhbGxvY2F0
aW9uU2l6ZSkpOworICAgICAgICBtZW1zZXQobmV3QnVmZmVyLCAtMSwgYWxsb2NhdGlvblNpemUp
OwogICAgICAgICBtX2NhcGFjaXR5ID0gc2l6ZTsKIAogICAgICAgICBmb3IgKHVuc2lnbmVkIGkg
PSAwOyBpIDwgb2xkQ2FwYWNpdHk7IGkrKykgewogICAgICAgICAgICAgaWYgKG9sZEJ1ZmZlcltp
XSAhPSBlbXB0eVZhbHVlKCkpIHsKLSAgICAgICAgICAgICAgICB2b2lkKiogcHRyID0gdGhpcy0+
YnVja2V0KHN0YXRpY19jYXN0PFB0clR5cGU+KG9sZEJ1ZmZlcltpXSkpOworICAgICAgICAgICAg
ICAgIFQqIHB0ciA9IGJ1Y2tldEluQnVmZmVyKG5ld0J1ZmZlciwgc3RhdGljX2Nhc3Q8VD4ob2xk
QnVmZmVyW2ldKSk7CiAgICAgICAgICAgICAgICAgKnB0ciA9IG9sZEJ1ZmZlcltpXTsKICAgICAg
ICAgICAgIH0KICAgICAgICAgfQogCiAgICAgICAgIGlmICghd2FzU21hbGwpCi0gICAgICAgICAg
ICBTbWFsbFB0clNldE1hbGxvYzo6ZnJlZShvbGRCdWZmZXIpOworICAgICAgICAgICAgU21hbGxT
ZXRNYWxsb2M6OmZyZWUob2xkQnVmZmVyKTsKKworICAgICAgICBtX2lubGluZS5idWZmZXIgPSBu
ZXdCdWZmZXI7CiAgICAgfQogCiAKLSAgICBpbmxpbmUgdm9pZCoqIGJ1Y2tldChQdHJUeXBlIHRh
cmdldCkgY29uc3QKKyAgICBpbmxpbmUgVCogYnVja2V0KFQgdGFyZ2V0KSBjb25zdAorICAgIHsK
KyAgICAgICAgQVNTRVJUKCFpc1NtYWxsKCkpOworICAgICAgICByZXR1cm4gYnVja2V0SW5CdWZm
ZXIobV9pbmxpbmUuYnVmZmVyLCB0YXJnZXQpOworICAgIH0KKworICAgIGlubGluZSBUKiBidWNr
ZXRJbkJ1ZmZlcihUKiBidWZmZXIsIFQgdGFyZ2V0KSBjb25zdAogICAgIHsKICAgICAgICAgQVNT
RVJUKCEobV9jYXBhY2l0eSAmIChtX2NhcGFjaXR5IC0gMSkpKTsKLSAgICAgICAgdW5zaWduZWQg
YnVja2V0ID0gUHRySGFzaEJhc2U8UHRyVHlwZSwgZmFsc2UgLyogaXNTbWFydFB0ciAqLz46Omhh
c2godGFyZ2V0KSAmIChtX2NhcGFjaXR5IC0gMSk7CisgICAgICAgIHVuc2lnbmVkIGJ1Y2tldCA9
IEhhc2g6Omhhc2godGFyZ2V0KSAmIChtX2NhcGFjaXR5IC0gMSk7CiAgICAgICAgIHVuc2lnbmVk
IGluZGV4ID0gMDsKICAgICAgICAgd2hpbGUgKHRydWUpIHsKLSAgICAgICAgICAgIHZvaWQqKiBw
dHIgPSBtX2J1ZmZlciArIGJ1Y2tldDsKKyAgICAgICAgICAgIFQqIHB0ciA9IGJ1ZmZlciArIGJ1
Y2tldDsKICAgICAgICAgICAgIGlmICgqcHRyID09IGVtcHR5VmFsdWUoKSkKICAgICAgICAgICAg
ICAgICByZXR1cm4gcHRyOwogICAgICAgICAgICAgaWYgKCpwdHIgPT0gdGFyZ2V0KQpAQCAtMjQ1
LDEwICsyNzgsMTMgQEAgcHJpdmF0ZToKIAogICAgIHVuc2lnbmVkIG1fc2l6ZTsKICAgICB1bnNp
Z25lZCBtX2NhcGFjaXR5OwotICAgIHZvaWQqKiBtX2J1ZmZlcjsKLSAgICB2b2lkKiBtX3NtYWxs
U3RvcmFnZVtTbWFsbEFycmF5U2l6ZV07CisgICAgdW5pb24gVSB7CisgICAgICAgIFQqIGJ1ZmZl
cjsKKyAgICAgICAgVCBzbWFsbFN0b3JhZ2VbU21hbGxBcnJheVNpemVdOworICAgICAgICBVKCkg
e307CisgICAgfSBtX2lubGluZTsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdURgogCi11c2luZyBX
VEY6OlNtYWxsUHRyU2V0OwordXNpbmcgV1RGOjpTbWFsbFNldDsK
</data>
<flag name="commit-queue"
          id="449789"
          type_id="3"
          status="-"
          setter="ews-feeder"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>428764</attachid>
            <date>2021-05-15 19:16:44 -0700</date>
            <delta_ts>2021-05-17 10:26:36 -0700</delta_ts>
            <desc>WIP</desc>
            <filename>patchRegisterAllocator</filename>
            <type>text/plain</type>
            <size>64319</size>
            <attacher name="Robin Morisset">rmorisset</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1JlZHVjZUxvb3BTdHJlbmd0
aC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNSZWR1Y2VMb29wU3RyZW5ndGguY3Bw
CmluZGV4IGM3OTdjZDZjMjZjOC4uNGE3NDhhNzY0MzU1IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvYjMvQjNSZWR1Y2VMb29wU3RyZW5ndGguY3BwCisrKyBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9iMy9CM1JlZHVjZUxvb3BTdHJlbmd0aC5jcHAKQEAgLTM2LDcgKzM2LDcgQEAK
ICNpbmNsdWRlICJCM1BoYXNlU2NvcGUuaCIKICNpbmNsdWRlICJCM1Byb2NlZHVyZUlubGluZXMu
aCIKICNpbmNsdWRlICJCM1ZhbHVlSW5saW5lcy5oIgotI2luY2x1ZGUgPHd0Zi9TbWFsbFB0clNl
dC5oPgorI2luY2x1ZGUgPHd0Zi9TbWFsbFNldC5oPgogI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4K
IAogbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CkBAIC0xNTksNyArMTU5LDcgQEAgcHVi
bGljOgogICAgICAgICBCYXNpY0Jsb2NrKiBsb29wRm9vdCA9IG51bGxwdHI7CiAgICAgICAgIEJh
c2ljQmxvY2sqIGxvb3BQcmVoZWFkZXIgPSBudWxscHRyOwogICAgICAgICBCYXNpY0Jsb2NrKiBs
b29wUG9zdGZvb3RlciA9IG51bGxwdHI7Ci0gICAgICAgIFNtYWxsUHRyU2V0PEJhc2ljQmxvY2sq
PiBsb29wSW5uZXJCbG9ja3M7CisgICAgICAgIFNtYWxsU2V0PEJhc2ljQmxvY2sqPiBsb29wSW5u
ZXJCbG9ja3M7CiAKICAgICAgICAgewogICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsg
aSA8IGxvb3AtPnNpemUoKTsgKytpKQpAQCAtMTcxLDggKzE3MSw4IEBAIHB1YmxpYzoKICAgICAg
ICAgICAgIGlmICghbG9vcElubmVyQmxvY2tzLmNvbnRhaW5zKHN0b3JlLT5vd25lcikpCiAgICAg
ICAgICAgICAgICAgcmV0dXJuOwogCi0gICAgICAgICAgICBTbWFsbFB0clNldDxCYXNpY0Jsb2Nr
Kj4gbG9vcEVudHJhbmNlczsKLSAgICAgICAgICAgIFNtYWxsUHRyU2V0PEJhc2ljQmxvY2sqPiBs
b29wRXhpdHM7CisgICAgICAgICAgICBTbWFsbFNldDxCYXNpY0Jsb2NrKj4gbG9vcEVudHJhbmNl
czsKKyAgICAgICAgICAgIFNtYWxsU2V0PEJhc2ljQmxvY2sqPiBsb29wRXhpdHM7CiAgICAgICAg
ICAgICBmb3IgKGF1dG8qIGJsb2NrIDogbG9vcElubmVyQmxvY2tzKSB7CiAgICAgICAgICAgICAg
ICAgZm9yIChhdXRvIHN1Y2Nlc3NvciA6IGJsb2NrLT5zdWNjZXNzb3JzKCkpIHsKICAgICAgICAg
ICAgICAgICAgICAgaWYgKCFsb29wSW5uZXJCbG9ja3MuY29udGFpbnMoc3VjY2Vzc29yLmJsb2Nr
KCkpKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJBbGxvY2F0
ZVJlZ2lzdGVyc0J5R3JhcGhDb2xvcmluZy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMv
YWlyL0FpckFsbG9jYXRlUmVnaXN0ZXJzQnlHcmFwaENvbG9yaW5nLmNwcAppbmRleCBkMDE2OWFl
MDc0ZDcuLmYwZDFhNjM0NGQwYyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Iz
L2Fpci9BaXJBbGxvY2F0ZVJlZ2lzdGVyc0J5R3JhcGhDb2xvcmluZy5jcHAKKysrIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJBbGxvY2F0ZVJlZ2lzdGVyc0J5R3JhcGhDb2xvcmlu
Zy5jcHAKQEAgLTM3LDYgKzM3LDkgQEAKICNpbmNsdWRlICJBaXJQaGFzZVNjb3BlLmgiCiAjaW5j
bHVkZSAiQWlyVG1wV2lkdGhJbmxpbmVzLmgiCiAjaW5jbHVkZSAiQWlyVXNlQ291bnRzLmgiCisj
aW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4KKyNpbmNsdWRlIDx3dGYvU21hbGxTZXQuaD4KKyNpbmNs
dWRlIDx3dGYvVmVjdG9yLmg+CiAKIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeyBuYW1l
c3BhY2UgQWlyIHsKIApAQCAtNDYsMTA0ICs0OSwyMDkgQEAgc3RhdGljIGNvbnN0ZXhwciBib29s
IGRlYnVnID0gZmFsc2U7CiBzdGF0aWMgY29uc3RleHByIGJvb2wgdHJhY2VEZWJ1ZyA9IGZhbHNl
Owogc3RhdGljIGNvbnN0ZXhwciBib29sIHJlcG9ydFN0YXRzID0gZmFsc2U7CiAKLS8vIEludGVy
ZmVyZW5jZSBlZGdlcyBhcmUgbm90IGRpcmVjdGVkLiBBbiBlZGdlIGJldHdlZW4gYW55IHR3byBU
bXBzIGlzIHJlcHJlc2VudGVkCi0vLyBieSB0aGUgY29uY2F0ZW5hdGVkIHZhbHVlcyBvZiB0aGUg
c21hbGxlc3QgVG1wIGZvbGxvd2VkIGJ5IHRoZSBiaWdnZXIgVG1wLgotLy8gV2UgaGF2ZSBhIHRl
bXBsYXRlZCB2ZXJzaW9uIHRvIHN1cHBvcnQgMTYgYml0IGFuZCBhIDMyIGJpdCBpbXBsZW1lbnRh
dGlvbnMKLS8vIHNpbmNlIHRoZSBudW1iZXIgb2YgZW50cmllcyBpbiBhbiBpbnRlcmZlcmVuY2Ug
dGFibGUgaXMgTyhOXjIpLgotLy8gSW4gbW9zdCBjYXNlcywgd2UgdXNlIHRoZSAxNiBiaXQgZmxh
dm9yLCB0aHVzIHNhdmluZyBoYWxmIHRoZSBtZW1vcnkKLS8vIHdpdGggYSBzaW5nbGUgaW1wbGVt
ZW50YXRpb24uCi10ZW1wbGF0ZSA8dHlwZW5hbWUgSW5kZXhJbXBsVHlwZSwgdHlwZW5hbWUgUGFp
clN0b3JhZ2VUeXBlPgotY2xhc3MgSW50ZXJmZXJlbmNlRWRnZSB7Ci0gICAgc3RhdGljX2Fzc2Vy
dChzaXplb2YoSW5kZXhJbXBsVHlwZSkgKiAyID09IHNpemVvZihQYWlyU3RvcmFnZVR5cGUpKTsK
LSAgICBjb25zdCB1bnNpZ25lZCBTaGlmdEFtb3VudCA9IHNpemVvZihJbmRleEltcGxUeXBlKSAq
IDg7Ci0gICAgY29uc3QgUGFpclN0b3JhZ2VUeXBlIEluZGV4TWFzayA9IHN0ZDo6bnVtZXJpY19s
aW1pdHM8SW5kZXhJbXBsVHlwZT46Om1heCgpOwordGVtcGxhdGUgPHR5cGVuYW1lIEluZGV4VHlw
ZT4KK2NsYXNzIEludGVyZmVyZW5jZUhhc2hTZXQgeworcHVibGljOgorICAgIGJvb2wgY29udGFp
bnMoSW5kZXhUeXBlIHUsIEluZGV4VHlwZSB2KQorICAgIHsKKyAgICAgICAgaWYgKHYgPCB1KQor
ICAgICAgICAgICAgc3RkOjpzd2FwKHUsIHYpOworICAgICAgICByZXR1cm4gbV9zZXQuY29udGFp
bnMoeyB1LCB2IH0pOworICAgIH0KIAotcHJvdGVjdGVkOgotICAgIHVzaW5nIEluZGV4VHlwZSA9
IHVuc2lnbmVkOworICAgIGJvb2wgYWRkQW5kUmV0dXJuSXNOZXdFbnRyeShJbmRleFR5cGUgdSwg
SW5kZXhUeXBlIHYpCisgICAgeworICAgICAgICBpZiAodiA8IHUpCisgICAgICAgICAgICBzdGQ6
OnN3YXAodSwgdik7CisgICAgICAgIHJldHVybiBtX3NldC5hZGQoeyB1LCB2IH0pLmlzTmV3RW50
cnk7CisgICAgfQorCisgICAgdm9pZCBjbGVhcigpCisgICAgeworICAgICAgICBtX3NldC5jbGVh
cigpOworICAgIH0KIAorICAgIHZvaWQgc2V0TWF4VG1wSW5kZXgodW5zaWduZWQgbikKKyAgICB7
CisgICAgICAgIEFTU0VSVF9VTlVTRUQobiwgbiA8IHN0ZDo6bnVtZXJpY19saW1pdHM8SW5kZXhU
eXBlPjo6bWF4KCkpOworICAgIH0KKworICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBGdW5jdG9yPgor
ICAgIHZvaWQgZm9yRWFjaChjb25zdCBGdW5jdG9yJiBmdW5jdG9yKQorICAgIHsKKyAgICAgICAg
Zm9yIChhdXRvIGVkZ2UgOiBtX3NldCkKKyAgICAgICAgICAgIGZ1bmN0b3IoZWRnZSk7CisgICAg
fQorCisgICAgdW5zaWduZWQgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fc2V0LnNpemUoKTsgfQor
Citwcml2YXRlOgorICAgIC8vIEludGVyZmVyZW5jZSBlZGdlcyBhcmUgbm90IGRpcmVjdGVkLiBB
biBlZGdlIGJldHdlZW4gYW55IHR3byBUbXBzIGlzIHJlcHJlc2VudGVkCisgICAgLy8gYnkgdGhl
IGNvbmNhdGVuYXRlZCB2YWx1ZXMgKHRocm91Z2ggVG1wTWFwcGVyKSBvZiB0aGUgc21hbGxlc3Qg
VG1wIGZvbGxvd2VkIGJ5IHRoZSBiaWdnZXIgVG1wLgorICAgIEhhc2hTZXQ8c3RkOjpwYWlyPElu
ZGV4VHlwZSwgSW5kZXhUeXBlPiA+IG1fc2V0OworfTsKKwordGVtcGxhdGUgPHR5cGVuYW1lIFQs
IHR5cGVuYW1lIEluZGV4VHlwZT4KK2NsYXNzIEludGVyZmVyZW5jZVZlY3RvciB7CiBwdWJsaWM6
Ci0gICAgc3RydWN0IEludGVyZmVyZW5jZUVkZ2VIYXNoIHsKLSAgICAgICAgc3RhdGljIHVuc2ln
bmVkIGhhc2goY29uc3QgSW50ZXJmZXJlbmNlRWRnZTxJbmRleEltcGxUeXBlLCBQYWlyU3RvcmFn
ZVR5cGU+JiBrZXkpIHsgcmV0dXJuIGtleS5oYXNoKCk7IH0KLSAgICAgICAgc3RhdGljIGJvb2wg
ZXF1YWwoY29uc3QgSW50ZXJmZXJlbmNlRWRnZTxJbmRleEltcGxUeXBlLCBQYWlyU3RvcmFnZVR5
cGU+JiBhLCBjb25zdCBJbnRlcmZlcmVuY2VFZGdlPEluZGV4SW1wbFR5cGUsIFBhaXJTdG9yYWdl
VHlwZT4mIGIpIHsgcmV0dXJuIGEgPT0gYjsgfQotICAgICAgICBzdGF0aWMgY29uc3RleHByIGJv
b2wgc2FmZVRvQ29tcGFyZVRvRW1wdHlPckRlbGV0ZWQgPSB0cnVlOwotICAgIH07Ci0gICAgdHlw
ZWRlZiBTaW1wbGVDbGFzc0hhc2hUcmFpdHM8SW50ZXJmZXJlbmNlRWRnZTxJbmRleEltcGxUeXBl
LCBQYWlyU3RvcmFnZVR5cGU+PiBJbnRlcmZlcmVuY2VFZGdlSGFzaFRyYWl0czsKKyAgICBib29s
IGNvbnRhaW5zKEluZGV4VHlwZSB1LCBJbmRleFR5cGUgdikKKyAgICB7CisgICAgICAgIGlmICh2
IDwgdSkKKyAgICAgICAgICAgIHN0ZDo6c3dhcCh1LCB2KTsKKyAgICAgICAgcmV0dXJuIG1fdmVj
dG9yW3VdLmNvbnRhaW5zKHYpOworICAgIH0KIAotICAgIHR5cGVkZWYgSGFzaFNldDxJbnRlcmZl
cmVuY2VFZGdlPEluZGV4SW1wbFR5cGUsIFBhaXJTdG9yYWdlVHlwZT4sIEludGVyZmVyZW5jZUVk
Z2VIYXNoLCBJbnRlcmZlcmVuY2VFZGdlSGFzaFRyYWl0cz4gSW50ZXJmZXJlbmNlU2V0OworICAg
IGJvb2wgYWRkQW5kUmV0dXJuSXNOZXdFbnRyeShJbmRleFR5cGUgdSwgSW5kZXhUeXBlIHYpCisg
ICAgeworICAgICAgICBpZiAodiA8IHUpCisgICAgICAgICAgICBzdGQ6OnN3YXAodSwgdik7Cisg
ICAgICAgIGJvb2wgaXNOZXdFbnRyeSA9IG1fdmVjdG9yW3VdLmFkZCh2KS5pc05ld0VudHJ5Owor
ICAgICAgICBtX3NpemUgKz0gaXNOZXdFbnRyeTsKKyAgICAgICAgcmV0dXJuIGlzTmV3RW50cnk7
CisgICAgfQorCisgICAgdm9pZCBjbGVhcigpCisgICAgeworICAgICAgICBtX3ZlY3Rvci5jbGVh
cigpOworICAgICAgICBtX3NpemUgPSAwOworICAgIH0KKworICAgIHZvaWQgc2V0TWF4VG1wSW5k
ZXgodW5zaWduZWQgbikKKyAgICB7CisgICAgICAgIEFTU0VSVChuIDwgc3RkOjpudW1lcmljX2xp
bWl0czxJbmRleFR5cGU+OjptYXgoKSk7CisgICAgICAgIG1fdmVjdG9yLnJlc2l6ZShuKTsKKyAg
ICB9CiAKLSAgICBJbnRlcmZlcmVuY2VFZGdlKCkKKyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgRnVu
Y3Rvcj4KKyAgICB2b2lkIGZvckVhY2goY29uc3QgRnVuY3RvciYgZnVuY3RvcikKICAgICB7Cisg
ICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX3ZlY3Rvci5zaXplKCkgOyArK2kpIHsK
KyAgICAgICAgICAgIGZvciAoSW5kZXhUeXBlIGogOiBtX3ZlY3RvcltpXSkKKyAgICAgICAgICAg
ICAgICBmdW5jdG9yKHsgaSwgaiB9KTsKKyAgICAgICAgfQogICAgIH0KIAotICAgIEludGVyZmVy
ZW5jZUVkZ2UoSW5kZXhUeXBlIGEsIEluZGV4VHlwZSBiKQorICAgIHVuc2lnbmVkIHNpemUoKSBj
b25zdCB7IHJldHVybiBtX3NpemU7IH0KKworcHJpdmF0ZToKKyAgICBWZWN0b3I8VD4gbV92ZWN0
b3I7CisgICAgdW5zaWduZWQgbV9zaXplIHswfTsKK307CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBJ
bmRleFR5cGU+CitjbGFzcyBJbnRlcmZlcmVuY2VCaXRWZWN0b3IgeworcHVibGljOgorICAgIGJv
b2wgY29udGFpbnMoSW5kZXhUeXBlIHUsIEluZGV4VHlwZSB2KQogICAgIHsKLSAgICAgICAgQVNT
RVJUKGEpOwotICAgICAgICBBU1NFUlQoYik7Ci0gICAgICAgIEFTU0VSVChhIDwgc3RkOjpudW1l
cmljX2xpbWl0czxJbmRleEltcGxUeXBlPjo6bWF4KCkpOwotICAgICAgICBBU1NFUlQoYiA8IHN0
ZDo6bnVtZXJpY19saW1pdHM8SW5kZXhJbXBsVHlwZT46Om1heCgpKTsKLSAgICAgICAgQVNTRVJU
X1dJVEhfTUVTU0FHRShhICE9IGIsICJBIFRtcCBjYW4gbmV2ZXIgaW50ZXJmZXJlIHdpdGggaXRz
ZWxmLiBEb2luZyBzbyB3b3VsZCBmb3JjZSBpdCB0byBiZSB0aGUgc3VwZXJwb3NpdGlvbiBvZiB0
d28gcmVnaXN0ZXJzLiIpOworICAgICAgICByZXR1cm4gbV9iaXRWZWN0b3IucXVpY2tHZXQoaW5k
ZXgodSwgdikpOworICAgIH0KIAotICAgICAgICBpZiAoYiA8IGEpCi0gICAgICAgICAgICBzdGQ6
OnN3YXAoYSwgYik7Ci0gICAgICAgIG1fdmFsdWUgPSBzdGF0aWNfY2FzdDxQYWlyU3RvcmFnZVR5
cGU+KGEpIDw8IFNoaWZ0QW1vdW50IHwgYjsKKyAgICBib29sIGFkZEFuZFJldHVybklzTmV3RW50
cnkoSW5kZXhUeXBlIHUsIEluZGV4VHlwZSB2KQorICAgIHsKKyAgICAgICAgLy8gTm90ZTogd2Ug
Y291bGQgZG8gb25seSBvbmUgcXVpY2tTZXQsIGF0IHRoZSBjb3N0IG9mIG9uZSBleHRyYSBicmFu
Y2ggaW4gZXZlcnkgY29udGFpbnMvYWRkQW5kUmV0dXJuSXNOZXdFbnRyeSAodG8gZW5mb3JjZSB1
IDwgdikKKyAgICAgICAgYm9vbCBhbHJlYWR5SW4gPSBtX2JpdFZlY3Rvci5xdWlja1NldChpbmRl
eCh1LCB2KSk7CisgICAgICAgIGJvb2wgYWxyZWFkeUluMiA9IG1fYml0VmVjdG9yLnF1aWNrU2V0
KGluZGV4KHYsIHUpKTsKKyAgICAgICAgQVNTRVJUX1VOVVNFRChhbHJlYWR5SW4yLCBhbHJlYWR5
SW4gPT0gYWxyZWFkeUluMik7CisgICAgICAgIG1fc2l6ZSArPSAhYWxyZWFkeUluOworICAgICAg
ICByZXR1cm4gIWFscmVhZHlJbjsKICAgICB9CiAKLSAgICBJbnRlcmZlcmVuY2VFZGdlKGNvbnN0
IEludGVyZmVyZW5jZUVkZ2U8SW5kZXhJbXBsVHlwZSwgUGFpclN0b3JhZ2VUeXBlPiYgb3RoZXIp
Ci0gICAgICAgIDogbV92YWx1ZShvdGhlci5tX3ZhbHVlKQorICAgIHZvaWQgY2xlYXIoKQogICAg
IHsKKyAgICAgICAgbV9iaXRWZWN0b3IuY2xlYXJBbGwoKTsKKyAgICAgICAgbV9zaXplID0gMDsK
ICAgICB9CiAKKyAgICB2b2lkIHNldE1heFRtcEluZGV4KHVuc2lnbmVkIG4pCisgICAgeworICAg
ICAgICBBU1NFUlQobiA8IHN0ZDo6bnVtZXJpY19saW1pdHM8SW5kZXhUeXBlPjo6bWF4KCkpOwor
ICAgICAgICBtX251bVRtcHMgPSBuOworICAgICAgICBtX2JpdFZlY3Rvci5lbnN1cmVTaXplKG4q
bik7CisgICAgfQogCi0gICAgSW50ZXJmZXJlbmNlRWRnZShXVEY6Okhhc2hUYWJsZURlbGV0ZWRW
YWx1ZVR5cGUpCi0gICAgICAgIDogbV92YWx1ZShzdGQ6Om51bWVyaWNfbGltaXRzPFBhaXJTdG9y
YWdlVHlwZT46Om1heCgpKQorICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBGdW5jdG9yPgorICAgIHZv
aWQgZm9yRWFjaChjb25zdCBGdW5jdG9yJiBmdW5jdG9yKQogICAgIHsKKyAgICAgICAgZm9yIChJ
bmRleFR5cGUgaSA9IDA7IGkgPCBtX251bVRtcHM7ICsraSkgeworICAgICAgICAgICAgZm9yIChJ
bmRleFR5cGUgaiA9IGkgKyAxOyBqIDwgbV9udW1UbXBzOyArK2opIHsKKyAgICAgICAgICAgICAg
ICBpZiAobV9iaXRWZWN0b3IucXVpY2tHZXQoaW5kZXgoaSwgaikpKQorICAgICAgICAgICAgICAg
ICAgICBmdW5jdG9yKHsgaSwgaiB9KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQogICAgIH0K
IAotICAgIEluZGV4VHlwZSBmaXJzdCgpIGNvbnN0CisgICAgdW5zaWduZWQgc2l6ZSgpIGNvbnN0
IHsgcmV0dXJuIG1fc2l6ZTsgfQorCitwcml2YXRlOgorICAgIHVuc2lnbmVkIGluZGV4KEluZGV4
VHlwZSBpLCBJbmRleFR5cGUgaikKICAgICB7Ci0gICAgICAgIHJldHVybiBtX3ZhbHVlID4+IFNo
aWZ0QW1vdW50ICYgSW5kZXhNYXNrOworICAgICAgICByZXR1cm4gaSAqIG1fbnVtVG1wcyArIGo7
CiAgICAgfQogCi0gICAgSW5kZXhUeXBlIHNlY29uZCgpIGNvbnN0CisgICAgQml0VmVjdG9yIG1f
Yml0VmVjdG9yOworICAgIHVuc2lnbmVkIG1fc2l6ZSB7MH07CisgICAgSW5kZXhUeXBlIG1fbnVt
VG1wczsKK307CisKKyNkZWZpbmUgVEVTVF9JTlRFUkZFUkVOQ0VfU01BTExfU0VUX1ZFQ1RPUiAw
CisjaWYgVEVTVF9JTlRFUkZFUkVOQ0VfU01BTExfU0VUX1ZFQ1RPUgordGVtcGxhdGUgPHR5cGVu
YW1lIFQsIHR5cGVuYW1lIFUsIHR5cGVuYW1lIEluZGV4VHlwZT4KK2NsYXNzIEluc3RydW1lbnRl
ZEludGVyZmVyZW5jZUdyYXBoIHsKK3B1YmxpYzoKKyAgICBib29sIGNvbnRhaW5zKEluZGV4VHlw
ZSB1LCBJbmRleFR5cGUgdikKICAgICB7Ci0gICAgICAgIHJldHVybiBtX3ZhbHVlICYgSW5kZXhN
YXNrOworICAgICAgICBib29sIGNvbnRhaW5zSW5BID0gbV9zZXRBLmNvbnRhaW5zKHUsIHYpOwor
ICAgICAgICBib29sIGNvbnRhaW5zSW5CID0gbV9zZXRCLmNvbnRhaW5zKHUsIHYpOworICAgICAg
ICBSRUxFQVNFX0FTU0VSVChjb250YWluc0luQSA9PSBjb250YWluc0luQik7CisgICAgICAgIHJl
dHVybiBjb250YWluc0luQTsKICAgICB9CiAKLSAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgSW50
ZXJmZXJlbmNlRWRnZSYgb3RoZXIpIGNvbnN0CisgICAgYm9vbCBhZGRBbmRSZXR1cm5Jc05ld0Vu
dHJ5KEluZGV4VHlwZSB1LCBJbmRleFR5cGUgdikKICAgICB7Ci0gICAgICAgIHJldHVybiBtX3Zh
bHVlID09IG90aGVyLm1fdmFsdWU7CisgICAgICAgIGJvb2wgaXNOZXdFbnRyeUEgPSBtX3NldEEu
YWRkQW5kUmV0dXJuSXNOZXdFbnRyeSh1LCB2KTsKKyAgICAgICAgYm9vbCBpc05ld0VudHJ5QiA9
IG1fc2V0Qi5hZGRBbmRSZXR1cm5Jc05ld0VudHJ5KHUsIHYpOworICAgICAgICBSRUxFQVNFX0FT
U0VSVChpc05ld0VudHJ5QSA9PSBpc05ld0VudHJ5Qik7CisgICAgICAgIHJldHVybiBpc05ld0Vu
dHJ5QTsKICAgICB9CiAKLSAgICBJbnRlcmZlcmVuY2VFZGdlJiBvcGVyYXRvcj0oY29uc3QgSW50
ZXJmZXJlbmNlRWRnZSYgb3RoZXIpCisgICAgdm9pZCBjbGVhcigpCiAgICAgewotICAgICAgICBt
X3ZhbHVlID0gb3RoZXIubV92YWx1ZTsKLSAgICAgICAgcmV0dXJuICp0aGlzOworICAgICAgICBt
X3NldEEuY2xlYXIoKTsKKyAgICAgICAgbV9zZXRCLmNsZWFyKCk7CiAgICAgfQotICAgIGJvb2wg
aXNIYXNoVGFibGVEZWxldGVkVmFsdWUoKSBjb25zdAorCisgICAgdm9pZCBzZXRNYXhUbXBJbmRl
eCh1bnNpZ25lZCBuKQogICAgIHsKLSAgICAgICAgcmV0dXJuICp0aGlzID09IEludGVyZmVyZW5j
ZUVkZ2UoV1RGOjpIYXNoVGFibGVEZWxldGVkVmFsdWUpOworICAgICAgICBtX3NldEEuc2V0TWF4
VG1wSW5kZXgobik7CisgICAgICAgIG1fc2V0Qi5zZXRNYXhUbXBJbmRleChuKTsKICAgICB9CiAK
LSAgICB1bnNpZ25lZCBoYXNoKCkgY29uc3QKKyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgRnVuY3Rv
cj4KKyAgICB2b2lkIGZvckVhY2goY29uc3QgRnVuY3RvciYgZnVuY3RvcikKICAgICB7Ci0gICAg
ICAgIHJldHVybiBXVEY6OkludEhhc2g8UGFpclN0b3JhZ2VUeXBlPjo6aGFzaChtX3ZhbHVlKTsK
KyAgICAgICAgbV9zZXRBLmZvckVhY2goZnVuY3Rvcik7CiAgICAgfQogCi0gICAgdm9pZCBkdW1w
KFByaW50U3RyZWFtJiBvdXQpIGNvbnN0CisgICAgdW5zaWduZWQgc2l6ZSgpIGNvbnN0CiAgICAg
ewotICAgICAgICBvdXQucHJpbnQoZmlyc3QoKSwgIjw9PiIsIHNlY29uZCgpKTsKKyAgICAgICAg
dW5zaWduZWQgc2l6ZUEgPSBtX3NldEEuc2l6ZSgpOworICAgICAgICB1bnNpZ25lZCBzaXplQiA9
IG1fc2V0Qi5zaXplKCk7CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKHNpemVBID09IHNpemVCKTsK
KyAgICAgICAgcmV0dXJuIHNpemVBOwogICAgIH0KIAogcHJpdmF0ZToKLSAgICBQYWlyU3RvcmFn
ZVR5cGUgbV92YWx1ZSB7IDAgfTsKKyAgICBUIG1fc2V0QTsKKyAgICBVIG1fc2V0QjsKIH07Cisj
ZW5kaWYKIAogLy8gVGhlIEFic3RyYWN0Q29sb3JpbmdBbGxvY2F0b3IgZGVmaW5lcyBhbGwgdGhl
IGNvZGUgdGhhdCBpcyBpbmRlcGVuZGFudAogLy8gZnJvbSB0aGUgYmFuayBvciByZWdpc3RlciBh
bmQgY2FuIGJlIHNoYXJlZCB3aGVuIGFsbG9jYXRpbmcgcmVnaXN0ZXJzLgotdGVtcGxhdGU8dHlw
ZW5hbWUgSW5kZXhUeXBlLCB0eXBlbmFtZSBUbXBNYXBwZXIsIHR5cGVuYW1lIEludGVyZmVyZW5j
ZUVkZ2VUeXBlPgordGVtcGxhdGU8dHlwZW5hbWUgSW5kZXhUeXBlLCB0eXBlbmFtZSBJbnRlcmZl
cmVuY2VTZXQsIEJhbmsgYmFuaz4KIGNsYXNzIEFic3RyYWN0Q29sb3JpbmdBbGxvY2F0b3Igewog
cHVibGljOgotICAgIEFic3RyYWN0Q29sb3JpbmdBbGxvY2F0b3IoQ29kZSYgY29kZSwgY29uc3Qg
VmVjdG9yPFJlZz4mIHJlZ3NJblByaW9yaXR5T3JkZXIsIEluZGV4VHlwZSBsYXN0UHJlY29sb3Jl
ZFJlZ2lzdGVySW5kZXgsIHVuc2lnbmVkIHRtcEFycmF5U2l6ZSwgY29uc3QgSGFzaFNldDx1bnNp
Z25lZD4mIHVuc3BpbGxhYmxlVG1wcywgY29uc3QgVXNlQ291bnRzPFRtcD4mIHVzZUNvdW50cykK
KyAgICBBYnN0cmFjdENvbG9yaW5nQWxsb2NhdG9yKENvZGUmIGNvZGUsIGNvbnN0IFZlY3RvcjxS
ZWc+JiByZWdzSW5Qcmlvcml0eU9yZGVyLCBJbmRleFR5cGUgbGFzdFByZWNvbG9yZWRSZWdpc3Rl
ckluZGV4LCB1bnNpZ25lZCB0bXBBcnJheVNpemUsIGNvbnN0IEJpdFZlY3RvciYgdW5zcGlsbGFi
bGVUbXBzLCBjb25zdCBVc2VDb3VudHMmIHVzZUNvdW50cykKICAgICAgICAgOiBtX3JlZ3NJblBy
aW9yaXR5T3JkZXIocmVnc0luUHJpb3JpdHlPcmRlcikKICAgICAgICAgLCBtX2xhc3RQcmVjb2xv
cmVkUmVnaXN0ZXJJbmRleChsYXN0UHJlY29sb3JlZFJlZ2lzdGVySW5kZXgpCiAgICAgICAgICwg
bV91bnNwaWxsYWJsZVRtcHModW5zcGlsbGFibGVUbXBzKQpAQCAtMTYwLDYgKzI2OCwxNCBAQCBw
dWJsaWM6CiAgICAgfQogCiBwcm90ZWN0ZWQ6CisgICAgdXNpbmcgVG1wTWFwcGVyID0gQWJzb2x1
dGVUbXBNYXBwZXI8YmFuaz47CisKKyAgICBJbmRleFR5cGUgdG1wVG9JbmRleChUbXAgdG1wKSBj
b25zdAorICAgIHsKKyAgICAgICAgdW5zaWduZWQgaW5kZXggPSBUbXBNYXBwZXI6OmFic29sdXRl
SW5kZXgodG1wKTsKKyAgICAgICAgQVNTRVJUKHN0ZDo6bnVtZXJpY19saW1pdHM8SW5kZXhUeXBl
Pjo6bWF4KCkgPiBpbmRleCk7CisgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxJbmRleFR5cGU+
KGluZGV4KTsKKyAgICB9CiAKICAgICB1bnNpZ25lZCByZWdpc3RlckNvdW50KCkgY29uc3QgeyBy
ZXR1cm4gbV9yZWdzSW5Qcmlvcml0eU9yZGVyLnNpemUoKTsgfQogCkBAIC0xODAsNyArMjk2LDcg
QEAgcHJvdGVjdGVkOgogCiAgICAgdm9pZCBhZGRUb1NwaWxsKHVuc2lnbmVkIHRvU3BpbGwpCiAg
ICAgewotICAgICAgICBpZiAobV91bnNwaWxsYWJsZVRtcHMuY29udGFpbnModG9TcGlsbCkpCisg
ICAgICAgIGlmIChtX3Vuc3BpbGxhYmxlVG1wcy5xdWlja0dldCh0b1NwaWxsKSkKICAgICAgICAg
ICAgIHJldHVybjsKIAogICAgICAgICBtX3NwaWxsV29ya2xpc3QuYWRkKHRvU3BpbGwpOwpAQCAt
MTk4LDE1ICszMTQsMTUgQEAgcHJvdGVjdGVkOgogICAgICAgICAvLyBBbGwgcHJlY29sb3JlZCBy
ZWdpc3RlcnMgaGF2ZSAgYW4gImluZmluaXRlIiBkZWdyZWUuCiAgICAgICAgIHVuc2lnbmVkIGZp
cnN0Tm9uUmVnSW5kZXggPSBtX2xhc3RQcmVjb2xvcmVkUmVnaXN0ZXJJbmRleCArIDE7CiAgICAg
ICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBmaXJzdE5vblJlZ0luZGV4OyArK2kpCi0gICAg
ICAgICAgICBtX2RlZ3JlZXNbaV0gPSBzdGQ6Om51bWVyaWNfbGltaXRzPHVuc2lnbmVkPjo6bWF4
KCk7CisgICAgICAgICAgICBtX2RlZ3JlZXNbaV0gPSBzdGQ6Om51bWVyaWNfbGltaXRzPEluZGV4
VHlwZT46Om1heCgpOwogCi0gICAgICAgIG1lbXNldChtX2RlZ3JlZXMuZGF0YSgpICsgZmlyc3RO
b25SZWdJbmRleCwgMCwgKHRtcEFycmF5U2l6ZSAtIGZpcnN0Tm9uUmVnSW5kZXgpICogc2l6ZW9m
KHVuc2lnbmVkKSk7CisgICAgICAgIG1lbXNldChtX2RlZ3JlZXMuZGF0YSgpICsgZmlyc3ROb25S
ZWdJbmRleCwgMCwgKHRtcEFycmF5U2l6ZSAtIGZpcnN0Tm9uUmVnSW5kZXgpICogc2l6ZW9mKElu
ZGV4VHlwZSkpOwogICAgIH0KIAogICAgIHZvaWQgYWRkRWRnZURpc3RpbmN0KEluZGV4VHlwZSBh
LCBJbmRleFR5cGUgYikKICAgICB7CiAgICAgICAgIEFTU0VSVChhICE9IGIpOwotICAgICAgICBi
b29sIGlzTmV3RWRnZSA9IGFkZEludGVyZmVyZW5jZUVkZ2UoSW50ZXJmZXJlbmNlRWRnZVR5cGUo
YSwgYikpOworICAgICAgICBib29sIGlzTmV3RWRnZSA9IGFkZEludGVyZmVyZW5jZUVkZ2UoYSwg
Yik7CiAgICAgICAgIGlmIChpc05ld0VkZ2UpIHsKICAgICAgICAgICAgIGlmICghaXNQcmVjb2xv
cmVkKGEpKSB7CiAgICAgICAgICAgICAgICAgQVNTRVJUKCFtX2FkamFjZW5jeUxpc3RbYV0uY29u
dGFpbnMoYikpOwpAQCAtMjI1LDcgKzM0MSw3IEBAIHByb3RlY3RlZDoKICAgICBib29sIGFkZEVk
Z2VEaXN0aW5jdFdpdGhvdXREZWdyZWVDaGFuZ2UoSW5kZXhUeXBlIGEsIEluZGV4VHlwZSBiKQog
ICAgIHsKICAgICAgICAgQVNTRVJUKGEgIT0gYik7Ci0gICAgICAgIGJvb2wgaXNOZXdFZGdlID0g
YWRkSW50ZXJmZXJlbmNlRWRnZShJbnRlcmZlcmVuY2VFZGdlVHlwZShhLCBiKSk7CisgICAgICAg
IGJvb2wgaXNOZXdFZGdlID0gYWRkSW50ZXJmZXJlbmNlRWRnZShhLCBiKTsKICAgICAgICAgaWYg
KGlzTmV3RWRnZSkgewogICAgICAgICAgICAgaWYgKCFpc1ByZWNvbG9yZWQoYSkpIHsKICAgICAg
ICAgICAgICAgICBBU1NFUlQoIW1fYWRqYWNlbmN5TGlzdFthXS5jb250YWlucyhiKSk7CkBAIC0z
NDAsNyArNDU2LDcgQEAgcHJvdGVjdGVkOgogICAgICAgICAgICAgaWYgKCFpc1ByZWNvbG9yZWQo
YWRqYWNlbnRUbXBJbmRleCkKICAgICAgICAgICAgICAgICAmJiAhaGFzQmVlblNpbXBsaWZpZWQo
YWRqYWNlbnRUbXBJbmRleCkKICAgICAgICAgICAgICAgICAmJiBtX2RlZ3JlZXNbYWRqYWNlbnRU
bXBJbmRleF0gPj0gcmVnaXN0ZXJDb3VudCgpCi0gICAgICAgICAgICAgICAgJiYgIWhhc0ludGVy
ZmVyZW5jZUVkZ2UoSW50ZXJmZXJlbmNlRWRnZVR5cGUodSwgYWRqYWNlbnRUbXBJbmRleCkpKQor
ICAgICAgICAgICAgICAgICYmICFoYXNJbnRlcmZlcmVuY2VFZGdlKHUsIGFkamFjZW50VG1wSW5k
ZXgpKQogICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgfQogICAgICAgICBy
ZXR1cm4gdHJ1ZTsKQEAgLTM3NSw1MiArNDkxLDQwIEBAIHByb3RlY3RlZDoKICAgICAgICAgYXV0
byBpdGVyYXRvciA9IG1fc3BpbGxXb3JrbGlzdC5iZWdpbigpOwogCiAgICAgICAgIFJFTEVBU0Vf
QVNTRVJUX1dJVEhfTUVTU0FHRShpdGVyYXRvciAhPSBtX3NwaWxsV29ya2xpc3QuZW5kKCksICJz
ZWxlY3RTcGlsbCgpIGNhbGxlZCB3aGVuIHRoZXJlIHdhcyBubyBzcGlsbC4iKTsKLSAgICAgICAg
UkVMRUFTRV9BU1NFUlRfV0lUSF9NRVNTQUdFKCFtX3Vuc3BpbGxhYmxlVG1wcy5jb250YWlucygq
aXRlcmF0b3IpLCAidHJ5aW5nIHRvIHNwaWxsIHVuc3BpbGxhYmxlIHRtcCIpOwotCi0gICAgICAg
IC8vIEhpZ2hlciBzY29yZSBtZWFucyBtb3JlIGRlc2lyYWJsZSB0byBzcGlsbC4gTG93ZXIgc2Nv
cmVzIG1heGltaXplIHRoZSBsaWtlbGlob29kIHRoYXQgYSB0bXAKLSAgICAgICAgLy8gZ2V0cyBh
IHJlZ2lzdGVyLgotICAgICAgICBhdXRvIHNjb3JlID0gWyZdIChUbXAgdG1wKSAtPiBkb3VibGUg
ewotICAgICAgICAgICAgLy8gQWlyIGV4cG9zZXMgdGhlIGNvbmNlcHQgb2YgImZhc3QgdG1wcyIs
IGFuZCB3ZSBpbnRlcnByZXQgdGhhdCB0byBtZWFuIHRoYXQgdGhlIHRtcAotICAgICAgICAgICAg
Ly8gc2hvdWxkIGFsd2F5cyBiZSBpbiBhIHJlZ2lzdGVyLgotICAgICAgICAgICAgaWYgKG1fY29k
ZS5pc0Zhc3RUbXAodG1wKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgICAg
IAotICAgICAgICAgICAgLy8gQWxsIGVsc2UgYmVpbmcgZXF1YWwsIHRoZSBzY29yZSBzaG91bGQg
YmUgZGlyZWN0bHkgcmVsYXRlZCB0byB0aGUgZGVncmVlLgotICAgICAgICAgICAgZG91YmxlIGRl
Z3JlZSA9IHN0YXRpY19jYXN0PGRvdWJsZT4obV9kZWdyZWVzW1RtcE1hcHBlcjo6YWJzb2x1dGVJ
bmRleCh0bXApXSk7Ci0KLSAgICAgICAgICAgIC8vIEFsbCBlbHNlIGJlaW5nIGVxdWFsLCB0aGUg
c2NvcmUgc2hvdWxkIGJlIGludmVyc2VseSByZWxhdGVkIHRvIHRoZSBudW1iZXIgb2Ygd2FybSB1
c2VzIGFuZAotICAgICAgICAgICAgLy8gZGVmcy4KLSAgICAgICAgICAgIGNvbnN0IFVzZUNvdW50
czxUbXA+OjpDb3VudHMqIGNvdW50cyA9IG1fdXNlQ291bnRzW3RtcF07Ci0gICAgICAgICAgICBp
ZiAoIWNvdW50cykKLSAgICAgICAgICAgICAgICByZXR1cm4gc3RkOjpudW1lcmljX2xpbWl0czxk
b3VibGU+OjppbmZpbml0eSgpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBkb3VibGUgdXNl
cyA9IGNvdW50cy0+bnVtV2FybVVzZXMgKyBjb3VudHMtPm51bURlZnM7CisgICAgICAgIFJFTEVB
U0VfQVNTRVJUX1dJVEhfTUVTU0FHRSghbV91bnNwaWxsYWJsZVRtcHMuZ2V0KCppdGVyYXRvciks
ICJ0cnlpbmcgdG8gc3BpbGwgdW5zcGlsbGFibGUgdG1wIik7CiAKLSAgICAgICAgICAgIC8vIElm
IGl0J3MgYSBjb25zdGFudCwgdGhlbiBpdCdzIG5vdCBhcyBiYWQgdG8gc3BpbGwuIFdlIGNhbiBy
ZW1hdGVyaWFsaXplIGl0IGluIG1hbnkKLSAgICAgICAgICAgIC8vIGNhc2VzLgotICAgICAgICAg
ICAgaWYgKGNvdW50cy0+bnVtQ29uc3REZWZzID09IDEgJiYgY291bnRzLT5udW1EZWZzID09IDEp
Ci0gICAgICAgICAgICAgICAgdXNlcyAvPSAyOworICAgICAgICBJbmRleFR5cGUgdmljdGltSW5k
ZXggPSAqaXRlcmF0b3I7CisgICAgICAgIGZsb2F0IG1heFNjb3JlID0gMDsKIAotICAgICAgICAg
ICAgcmV0dXJuIGRlZ3JlZSAvIHVzZXM7Ci0gICAgICAgIH07CisgICAgICAgIGZvciAoO2l0ZXJh
dG9yICE9IG1fc3BpbGxXb3JrbGlzdC5lbmQoKTsgKytpdGVyYXRvcikgeworICAgICAgICAgICAg
SW5kZXhUeXBlIGluZGV4ID0gKml0ZXJhdG9yOwogCi0gICAgICAgIGF1dG8gdmljdGltSXRlcmF0
b3IgPSBpdGVyYXRvcjsKLSAgICAgICAgZG91YmxlIG1heFNjb3JlID0gc2NvcmUoVG1wTWFwcGVy
Ojp0bXBGcm9tQWJzb2x1dGVJbmRleCgqaXRlcmF0b3IpKTsKKyAgICAgICAgICAgIGZsb2F0IHVz
ZXMgPSBtX3VzZUNvdW50cy5udW1XYXJtVXNlc0FuZERlZnM8YmFuaz4oaW5kZXgpOworICAgICAg
ICAgICAgaWYgKCF1c2VzKSB7CisgICAgICAgICAgICAgICAgdmljdGltSW5kZXggPSBpbmRleDsK
KyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLy8g
SGlnaGVyIHNjb3JlIG1lYW5zIG1vcmUgZGVzaXJhYmxlIHRvIHNwaWxsLiBMb3dlciBzY29yZXMg
bWF4aW1pemUgdGhlIGxpa2VsaWhvb2QgdGhhdCBhIHRtcAorICAgICAgICAgICAgLy8gZ2V0cyBh
IHJlZ2lzdGVyLgorICAgICAgICAgICAgZmxvYXQgZGVncmVlID0gc3RhdGljX2Nhc3Q8ZmxvYXQ+
KG1fZGVncmVlc1tpbmRleF0pOworICAgICAgICAgICAgZmxvYXQgdG1wU2NvcmUgPSBkZWdyZWUg
LyB1c2VzOworCisgICAgICAgICAgICAvLyBJZiBpdCdzIGEgY29uc3RhbnQsIHRoZW4gaXQncyBu
b3QgYXMgYmFkIHRvIHNwaWxsLiBXZSBjYW4gcmVtYXRlcmlhbGl6ZSBpdCBpbiBtYW55CisgICAg
ICAgICAgICAvLyBjYXNlcy4KKyAgICAgICAgICAgIGlmIChtX3VzZUNvdW50cy5pc0NvbnN0RGVm
PGJhbms+KGluZGV4KSkKKyAgICAgICAgICAgICAgICB0bXBTY29yZSAqPSAyOwogCi0gICAgICAg
ICsraXRlcmF0b3I7Ci0gICAgICAgIGZvciAoO2l0ZXJhdG9yICE9IG1fc3BpbGxXb3JrbGlzdC5l
bmQoKTsgKytpdGVyYXRvcikgewotICAgICAgICAgICAgZG91YmxlIHRtcFNjb3JlID0gc2NvcmUo
VG1wTWFwcGVyOjp0bXBGcm9tQWJzb2x1dGVJbmRleCgqaXRlcmF0b3IpKTsKICAgICAgICAgICAg
IGlmICh0bXBTY29yZSA+IG1heFNjb3JlKSB7Ci0gICAgICAgICAgICAgICAgQVNTRVJUKCFtX3Vu
c3BpbGxhYmxlVG1wcy5jb250YWlucygqaXRlcmF0b3IpKTsKLSAgICAgICAgICAgICAgICB2aWN0
aW1JdGVyYXRvciA9IGl0ZXJhdG9yOworICAgICAgICAgICAgICAgIHZpY3RpbUluZGV4ID0gaW5k
ZXg7CiAgICAgICAgICAgICAgICAgbWF4U2NvcmUgPSB0bXBTY29yZTsKICAgICAgICAgICAgIH0K
ICAgICAgICAgfQogCi0gICAgICAgIEluZGV4VHlwZSB2aWN0aW1JbmRleCA9ICp2aWN0aW1JdGVy
YXRvcjsKKyAgICAgICAgQVNTRVJUKCFtX3Vuc3BpbGxhYmxlVG1wcy5nZXQodmljdGltSW5kZXgp
KTsKKyAgICAgICAgQVNTRVJUKCFpc1ByZWNvbG9yZWQodmljdGltSW5kZXgpKTsKICAgICAgICAg
aWYgKHRyYWNlRGVidWcpCiAgICAgICAgICAgICBkYXRhTG9nTG4oIlNlbGVjdGluZyBzcGlsbCAi
LCB2aWN0aW1JbmRleCk7Ci0gICAgICAgIEFTU0VSVCghaXNQcmVjb2xvcmVkKHZpY3RpbUluZGV4
KSk7CiAgICAgICAgIHJldHVybiB2aWN0aW1JbmRleDsKICAgICB9CiAKQEAgLTUxMiwxNCArNjE2
LDE0IEBAIHByb3RlY3RlZDoKICAgICAgICAgICAgIG1fY29sb3JlZFRtcC5jbGVhcigpOwogICAg
IH0KIAotICAgIGJvb2wgYWRkSW50ZXJmZXJlbmNlRWRnZShJbnRlcmZlcmVuY2VFZGdlVHlwZSBl
ZGdlKQorICAgIGJvb2wgYWRkSW50ZXJmZXJlbmNlRWRnZShJbmRleFR5cGUgdSwgSW5kZXhUeXBl
IHYpCiAgICAgewotICAgICAgICByZXR1cm4gbV9pbnRlcmZlcmVuY2VFZGdlcy5hZGQoZWRnZSku
aXNOZXdFbnRyeTsKKyAgICAgICAgcmV0dXJuIG1faW50ZXJmZXJlbmNlRWRnZXMuYWRkQW5kUmV0
dXJuSXNOZXdFbnRyeSh1LCB2KTsKICAgICB9CiAKLSAgICBib29sIGhhc0ludGVyZmVyZW5jZUVk
Z2UoSW50ZXJmZXJlbmNlRWRnZVR5cGUgZWRnZSkKKyAgICBib29sIGhhc0ludGVyZmVyZW5jZUVk
Z2UoSW5kZXhUeXBlIHUsIEluZGV4VHlwZSB2KQogICAgIHsKLSAgICAgICAgcmV0dXJuIG1faW50
ZXJmZXJlbmNlRWRnZXMuY29udGFpbnMoZWRnZSk7CisgICAgICAgIHJldHVybiBtX2ludGVyZmVy
ZW5jZUVkZ2VzLmNvbnRhaW5zKHUsIHYpOwogICAgIH0KIAogICAgIHZvaWQgY2xlYXJJbnRlcmZl
cmVuY2VFZGdlcygpCkBAIC01MzIsMTAgKzYzNiwxMSBAQCBwcm90ZWN0ZWQ6CiAgICAgICAgIG91
dC5wcmludCgiZ3JhcGggSW50ZXJmZXJlbmNlR3JhcGggeyBcbiIpOwogCiAgICAgICAgIEhhc2hT
ZXQ8VG1wPiB0bXBzV2l0aEludGVyZmVyZW5jZXM7Ci0gICAgICAgIGZvciAoY29uc3QgYXV0byYg
ZWRnZSA6IG1faW50ZXJmZXJlbmNlRWRnZXMpIHsKLSAgICAgICAgICAgIHRtcHNXaXRoSW50ZXJm
ZXJlbmNlcy5hZGQoVG1wTWFwcGVyOjp0bXBGcm9tQWJzb2x1dGVJbmRleChlZGdlLmZpcnN0KCkp
KTsKLSAgICAgICAgICAgIHRtcHNXaXRoSW50ZXJmZXJlbmNlcy5hZGQoVG1wTWFwcGVyOjp0bXBG
cm9tQWJzb2x1dGVJbmRleChlZGdlLnNlY29uZCgpKSk7Ci0gICAgICAgIH0KKworICAgICAgICBt
X2ludGVyZmVyZW5jZUVkZ2VzLmZvckVhY2goWyZ0bXBzV2l0aEludGVyZmVyZW5jZXNdIChzdGQ6
OnBhaXI8SW5kZXhUeXBlLCBJbmRleFR5cGU+IGVkZ2UpIHsKKyAgICAgICAgICAgIHRtcHNXaXRo
SW50ZXJmZXJlbmNlcy5hZGQoVG1wTWFwcGVyOjp0bXBGcm9tQWJzb2x1dGVJbmRleChlZGdlLmZp
cnN0KSk7CisgICAgICAgICAgICB0bXBzV2l0aEludGVyZmVyZW5jZXMuYWRkKFRtcE1hcHBlcjo6
dG1wRnJvbUFic29sdXRlSW5kZXgoZWRnZS5zZWNvbmQpKTsKKyAgICAgICAgfSk7CiAKICAgICAg
ICAgZm9yIChjb25zdCBhdXRvJiB0bXAgOiB0bXBzV2l0aEludGVyZmVyZW5jZXMpIHsKICAgICAg
ICAgICAgIHVuc2lnbmVkIHRtcEluZGV4ID0gVG1wTWFwcGVyOjphYnNvbHV0ZUluZGV4KHRtcCk7
CkBAIC01NDUsMjAgKzY1MCwyMSBAQCBwcm90ZWN0ZWQ6CiAgICAgICAgICAgICAgICAgb3V0LnBy
aW50KCIgICAgIiwgdG1wLmludGVybmFsVmFsdWUoKSwgIiBbbGFiZWw9XCIiLCB0bXAsICJcIl07
XG4iKTsKICAgICAgICAgfQogCi0gICAgICAgIGZvciAoY29uc3QgYXV0byYgZWRnZSA6IG1faW50
ZXJmZXJlbmNlRWRnZXMpCi0gICAgICAgICAgICBvdXQucHJpbnQoIiAgICAiLCBlZGdlLmZpcnN0
KCksICIgLS0gIiwgZWRnZS5zZWNvbmQoKSwgIjtcbiIpOworICAgICAgICBtX2ludGVyZmVyZW5j
ZUVkZ2VzLmZvckVhY2goWyZvdXRdIChzdGQ6OnBhaXI8SW5kZXhUeXBlLCBJbmRleFR5cGU+IGVk
Z2UpIHsKKyAgICAgICAgICAgIG91dC5wcmludCgiICAgICIsIGVkZ2UuZmlyc3QsICIgLS0gIiwg
ZWRnZS5zZWNvbmQsICI7XG4iKTsKKyAgICAgICAgfSk7CiAgICAgICAgIG91dC5wcmludCgifVxu
Iik7CiAgICAgfQogCiAgICAgVmVjdG9yPFJlZz4gbV9yZWdzSW5Qcmlvcml0eU9yZGVyOwogICAg
IEluZGV4VHlwZSBtX2xhc3RQcmVjb2xvcmVkUmVnaXN0ZXJJbmRleCB7IDAgfTsKIAotICAgIHR5
cGVuYW1lIEludGVyZmVyZW5jZUVkZ2VUeXBlOjpJbnRlcmZlcmVuY2VTZXQgbV9pbnRlcmZlcmVu
Y2VFZGdlczsKKyAgICBJbnRlcmZlcmVuY2VTZXQgbV9pbnRlcmZlcmVuY2VFZGdlczsKIAogICAg
IFZlY3RvcjxWZWN0b3I8SW5kZXhUeXBlLCAwLCBVbnNhZmVWZWN0b3JPdmVyZmxvdywgND4sIDAs
IFVuc2FmZVZlY3Rvck92ZXJmbG93PiBtX2FkamFjZW5jeUxpc3Q7CiAgICAgVmVjdG9yPEluZGV4
VHlwZSwgMCwgVW5zYWZlVmVjdG9yT3ZlcmZsb3c+IG1fZGVncmVlczsKIAotICAgIHVzaW5nIElu
ZGV4VHlwZVNldCA9IEhhc2hTZXQ8SW5kZXhUeXBlLCBEZWZhdWx0SGFzaDxJbmRleFR5cGU+LCBX
VEY6OlVuc2lnbmVkV2l0aFplcm9LZXlIYXNoVHJhaXRzPEluZGV4VHlwZT4+OworICAgIHVzaW5n
IEluZGV4VHlwZVNldCA9IFNtYWxsU2V0PEluZGV4VHlwZSwgSW50SGFzaDxJbmRleFR5cGU+PjsK
IAogICAgIEhhc2hNYXA8SW5kZXhUeXBlLCBJbmRleFR5cGVTZXQsIERlZmF1bHRIYXNoPEluZGV4
VHlwZT4sIFdURjo6VW5zaWduZWRXaXRoWmVyb0tleUhhc2hUcmFpdHM8SW5kZXhUeXBlPj4gbV9i
aWFzZXM7CiAKQEAgLTU3MSw3ICs2NzcsNyBAQCBwcm90ZWN0ZWQ6CiAgICAgVmVjdG9yPE1vdmVP
cGVyYW5kcywgMCwgVW5zYWZlVmVjdG9yT3ZlcmZsb3c+IG1fY29hbGVzY2luZ0NhbmRpZGF0ZXM7
CiAKICAgICAvLyBMaXN0IG9mIGV2ZXJ5IG1vdmUgaW5zdHJ1Y3Rpb24gYXNzb2NpYXRlZCB3aXRo
IGEgVG1wLgotICAgIFZlY3RvcjxJbmRleFR5cGVTZXQ+IG1fbW92ZUxpc3Q7CisgICAgVmVjdG9y
PFNtYWxsU2V0PHVuc2lnbmVkLCBJbnRIYXNoPEluZGV4VHlwZT4+PiBtX21vdmVMaXN0OwogCiAg
ICAgLy8gQ29sb3JzLgogICAgIFZlY3RvcjxSZWcsIDAsIFVuc2FmZVZlY3Rvck92ZXJmbG93PiBt
X2NvbG9yZWRUbXA7CkBAIC01OTUsMTcgKzcwMSwxOCBAQCBwcm90ZWN0ZWQ6CiAgICAgLy8gVGhl
IG1hcHBpbmcgb2YgVG1wIHRvIHRoZWlyIGFsaWFzIGZvciBNb3ZlcyB0aGF0IGFyZSBhbHdheXMg
Y29hbGVzY2luZyByZWdhcmRsZXNzIG9mIHNwaWxsaW5nLgogICAgIFZlY3RvcjxJbmRleFR5cGUs
IDAsIFVuc2FmZVZlY3Rvck92ZXJmbG93PiBtX2NvYWxlc2NlZFRtcHNBdFNwaWxsOwogCi0gICAg
Y29uc3QgSGFzaFNldDx1bnNpZ25lZD4mIG1fdW5zcGlsbGFibGVUbXBzOwotICAgIGNvbnN0IFVz
ZUNvdW50czxUbXA+JiBtX3VzZUNvdW50czsKKyAgICBjb25zdCBCaXRWZWN0b3ImIG1fdW5zcGls
bGFibGVUbXBzOworICAgIGNvbnN0IFVzZUNvdW50cyYgbV91c2VDb3VudHM7CiAgICAgQ29kZSYg
bV9jb2RlOwogCiAgICAgVmVjdG9yPFRtcCwgND4gbV9waW5uZWRSZWdzOwogfTsKIAotdGVtcGxh
dGUgPHR5cGVuYW1lIEluZGV4VHlwZSwgdHlwZW5hbWUgVG1wTWFwcGVyLCB0eXBlbmFtZSBJbnRl
cmZlcmVuY2VFZGdlPgotY2xhc3MgQnJpZ2dzIDogcHVibGljIEFic3RyYWN0Q29sb3JpbmdBbGxv
Y2F0b3I8SW5kZXhUeXBlLCBUbXBNYXBwZXIsIEludGVyZmVyZW5jZUVkZ2U+IHsKLSAgICB1c2lu
ZyBCYXNlID0gQWJzdHJhY3RDb2xvcmluZ0FsbG9jYXRvcjxJbmRleFR5cGUsIFRtcE1hcHBlciwg
SW50ZXJmZXJlbmNlRWRnZT47Cit0ZW1wbGF0ZSA8dHlwZW5hbWUgSW5kZXhUeXBlLCB0eXBlbmFt
ZSBJbnRlcmZlcmVuY2VTZXQsIEJhbmsgYmFuaz4KK2NsYXNzIEJyaWdncyA6IHB1YmxpYyBBYnN0
cmFjdENvbG9yaW5nQWxsb2NhdG9yPEluZGV4VHlwZSwgSW50ZXJmZXJlbmNlU2V0LCBiYW5rPiB7
CisgICAgdXNpbmcgQmFzZSA9IEFic3RyYWN0Q29sb3JpbmdBbGxvY2F0b3I8SW5kZXhUeXBlLCBJ
bnRlcmZlcmVuY2VTZXQsIGJhbms+OwogcHJvdGVjdGVkOgorICAgIHVzaW5nIFRtcE1hcHBlciA9
IHR5cGVuYW1lIEJhc2U6OlRtcE1hcHBlcjsKICAgICB1c2luZyBCYXNlOjptX2lzT25TZWxlY3RT
dGFjazsKICAgICB1c2luZyBCYXNlOjptX3NlbGVjdFN0YWNrOwogICAgIHVzaW5nIEJhc2U6Om1f
c2ltcGxpZnlXb3JrbGlzdDsKQEAgLTYzNSwxMSArNzQyLDEyIEBAIHByb3RlY3RlZDoKICAgICB1
c2luZyBCYXNlOjpoYXNCZWVuU2ltcGxpZmllZDsKICAgICB1c2luZyBCYXNlOjphZGRUb1NwaWxs
OwogICAgIHVzaW5nIEJhc2U6OmFkZEJpYXM7CisgICAgdXNpbmcgQmFzZTo6bV9pbnRlcmZlcmVu
Y2VFZGdlczsKICAgICB1c2luZyBCYXNlOjptX3Bpbm5lZFJlZ3M7CiAgICAgdXNpbmcgQmFzZTo6
bV9yZWdzSW5Qcmlvcml0eU9yZGVyOwogCiBwdWJsaWM6Ci0gICAgQnJpZ2dzKENvZGUmIGNvZGUs
IGNvbnN0IFZlY3RvcjxSZWc+JiByZWdzSW5Qcmlvcml0eU9yZGVyLCBJbmRleFR5cGUgbGFzdFBy
ZWNvbG9yZWRSZWdpc3RlckluZGV4LCB1bnNpZ25lZCB0bXBBcnJheVNpemUsIGNvbnN0IEhhc2hT
ZXQ8dW5zaWduZWQ+JiB1bnNwaWxsYWJsZVRtcHMsIGNvbnN0IFVzZUNvdW50czxUbXA+JiB1c2VD
b3VudHMpCisgICAgQnJpZ2dzKENvZGUmIGNvZGUsIGNvbnN0IFZlY3RvcjxSZWc+JiByZWdzSW5Q
cmlvcml0eU9yZGVyLCBJbmRleFR5cGUgbGFzdFByZWNvbG9yZWRSZWdpc3RlckluZGV4LCB1bnNp
Z25lZCB0bXBBcnJheVNpemUsIGNvbnN0IEJpdFZlY3RvciYgdW5zcGlsbGFibGVUbXBzLCBjb25z
dCBVc2VDb3VudHMmIHVzZUNvdW50cykKICAgICAgICAgOiBCYXNlKGNvZGUsIHJlZ3NJblByaW9y
aXR5T3JkZXIsIGxhc3RQcmVjb2xvcmVkUmVnaXN0ZXJJbmRleCwgdG1wQXJyYXlTaXplLCB1bnNw
aWxsYWJsZVRtcHMsIHVzZUNvdW50cykKICAgICB7CiAgICAgfQpAQCAtNjkxLDcgKzc5OSw3IEBA
IHB1YmxpYzoKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgdW5zaWduZWQgZGVn
cmVlID0gbV9kZWdyZWVzW2ldOwogICAgICAgICAgICAgICAgIGlmIChkZWdyZWUgPj0gcmVnaXN0
ZXJDb3VudCkgewotICAgICAgICAgICAgICAgICAgICBBU1NFUlQobV91bnNwaWxsYWJsZVRtcHMu
Y29udGFpbnMoaSkgfHwgbV9zcGlsbFdvcmtsaXN0LmNvbnRhaW5zKGkpKTsKKyAgICAgICAgICAg
ICAgICAgICAgQVNTRVJUKG1fdW5zcGlsbGFibGVUbXBzLmdldChpKSB8fCBtX3NwaWxsV29ya2xp
c3QuY29udGFpbnMoaSkpOwogICAgICAgICAgICAgICAgICAgICBBU1NFUlQoIW1fc2ltcGxpZnlX
b3JrbGlzdC5jb250YWlucyhpKSk7CiAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAg
ICAgICAgICAgICAgIH0KQEAgLTc0Nyw5ICs4NTUsNyBAQCBwcm90ZWN0ZWQ6CiAgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CiAgICAgICAgIH0KIAotICAgICAgICBpZiAoaXNQcmVjb2xvcmVkKHYp
Ci0gICAgICAgICAgICB8fCBoYXNJbnRlcmZlcmVuY2VFZGdlKEludGVyZmVyZW5jZUVkZ2UodSwg
dikpKSB7Ci0KKyAgICAgICAgaWYgKGlzUHJlY29sb3JlZCh2KSB8fCBoYXNJbnRlcmZlcmVuY2VF
ZGdlKHUsIHYpKSB7CiAgICAgICAgICAgICAvLyBObyBuZWVkIHRvIGV2ZXIgY29uc2lkZXIgdGhp
cyBtb3ZlIGFnYWluIGlmIGl0IGludGVyZmVyZXMuCiAgICAgICAgICAgICAvLyBObyBjb2FsZXNj
aW5nIHdpbGwgcmVtb3ZlIHRoZSBpbnRlcmZlcmVuY2UuCiAgICAgICAgICAgICBtb3ZlSW5kZXgg
PSBVSU5UX01BWDsKQEAgLTc4OCw3ICs4OTQsOCBAQCBwcm90ZWN0ZWQ6CiAgICAgICAgIG1fY29h
bGVzY2VkVG1wc1t2XSA9IHU7CiAKICAgICAgICAgYXV0byYgdk1vdmVzID0gbV9tb3ZlTGlzdFt2
XTsKLSAgICAgICAgbV9tb3ZlTGlzdFt1XS5hZGQodk1vdmVzLmJlZ2luKCksIHZNb3Zlcy5lbmQo
KSk7CisgICAgICAgIGZvciAodW5zaWduZWQgbW92ZSA6IHZNb3ZlcykKKyAgICAgICAgICAgIG1f
bW92ZUxpc3RbdV0uYWRkKG1vdmUpOwogCiAgICAgICAgIGZvckVhY2hBZGphY2VudCh2LCBbdGhp
cywgdV0gKEluZGV4VHlwZSBhZGphY2VudFRtcEluZGV4KSB7CiAgICAgICAgICAgICBpZiAoYWRk
RWRnZURpc3RpbmN0V2l0aG91dERlZ3JlZUNoYW5nZShhZGphY2VudFRtcEluZGV4LCB1KSkgewpA
QCAtOTM4LDcgKzEwNDUsNyBAQCBwcm90ZWN0ZWQ6CiAgICAgICAgICAgICAgICAgZGF0YUxvZ0xu
KCJNb3ZpbmcgdG1wICIsIHRtcEluZGV4LCAiIGZyb20gc3BpbGwgbGlzdCB0byBzaW1wbGlmeSBs
aXN0IGJlY2F1c2UgaXQncyBkZWdyZWUgaXMgbm93IGxlc3MgdGhhbiBrIik7CiAKICAgICAgICAg
ICAgIGlmIChBU1NFUlRfRU5BQkxFRCkKLSAgICAgICAgICAgICAgICBBU1NFUlQobV91bnNwaWxs
YWJsZVRtcHMuY29udGFpbnModG1wSW5kZXgpIHx8IG1fc3BpbGxXb3JrbGlzdC5jb250YWlucyh0
bXBJbmRleCkpOworICAgICAgICAgICAgICAgIEFTU0VSVChtX3Vuc3BpbGxhYmxlVG1wcy5nZXQo
dG1wSW5kZXgpIHx8IG1fc3BpbGxXb3JrbGlzdC5jb250YWlucyh0bXBJbmRleCkpOwogICAgICAg
ICAgICAgbV9zcGlsbFdvcmtsaXN0LnF1aWNrQ2xlYXIodG1wSW5kZXgpOwogCiAgICAgICAgICAg
ICBBU1NFUlQoIW1fc2ltcGxpZnlXb3JrbGlzdC5jb250YWlucyh0bXBJbmRleCkpOwpAQCAtOTU2
LDEwICsxMDYzLDExIEBAIHByb3RlY3RlZDoKICAgICBNb3ZlU2V0IG1fd29ya2xpc3RNb3ZlczsK
IH07CiAKLXRlbXBsYXRlIDx0eXBlbmFtZSBJbmRleFR5cGUsIHR5cGVuYW1lIFRtcE1hcHBlciwg
dHlwZW5hbWUgSW50ZXJmZXJlbmNlRWRnZT4KLWNsYXNzIElSQyA6IHB1YmxpYyBBYnN0cmFjdENv
bG9yaW5nQWxsb2NhdG9yPEluZGV4VHlwZSwgVG1wTWFwcGVyLCBJbnRlcmZlcmVuY2VFZGdlPiB7
Ci0gICAgdXNpbmcgQmFzZSA9IEFic3RyYWN0Q29sb3JpbmdBbGxvY2F0b3I8SW5kZXhUeXBlLCBU
bXBNYXBwZXIsIEludGVyZmVyZW5jZUVkZ2U+OwordGVtcGxhdGUgPHR5cGVuYW1lIEluZGV4VHlw
ZSwgdHlwZW5hbWUgSW50ZXJmZXJlbmNlU2V0LCBCYW5rIGJhbms+CitjbGFzcyBJUkMgOiBwdWJs
aWMgQWJzdHJhY3RDb2xvcmluZ0FsbG9jYXRvcjxJbmRleFR5cGUsIEludGVyZmVyZW5jZVNldCwg
YmFuaz4geworICAgIHVzaW5nIEJhc2UgPSBBYnN0cmFjdENvbG9yaW5nQWxsb2NhdG9yPEluZGV4
VHlwZSwgSW50ZXJmZXJlbmNlU2V0LCBiYW5rPjsKIHByb3RlY3RlZDoKKyAgICB1c2luZyBUbXBN
YXBwZXIgPSB0eXBlbmFtZSBCYXNlOjpUbXBNYXBwZXI7CiAgICAgdXNpbmcgQmFzZTo6bV9pc09u
U2VsZWN0U3RhY2s7CiAgICAgdXNpbmcgQmFzZTo6bV9zZWxlY3RTdGFjazsKICAgICB1c2luZyBC
YXNlOjptX3NpbXBsaWZ5V29ya2xpc3Q7CkBAIC05OTEsMTEgKzEwOTksMTIgQEAgcHJvdGVjdGVk
OgogICAgIHVzaW5nIEJhc2U6Om1fYWRqYWNlbmN5TGlzdDsKICAgICB1c2luZyBCYXNlOjpkdW1w
SW50ZXJmZXJlbmNlR3JhcGhJbkRvdDsKICAgICB1c2luZyBCYXNlOjphZGRCaWFzOworICAgIHVz
aW5nIEJhc2U6Om1faW50ZXJmZXJlbmNlRWRnZXM7CiAgICAgdXNpbmcgQmFzZTo6bV9waW5uZWRS
ZWdzOwogICAgIHVzaW5nIEJhc2U6Om1fcmVnc0luUHJpb3JpdHlPcmRlcjsKIAogcHVibGljOgot
ICAgIElSQyhDb2RlJiBjb2RlLCBjb25zdCBWZWN0b3I8UmVnPiYgcmVnc0luUHJpb3JpdHlPcmRl
ciwgSW5kZXhUeXBlIGxhc3RQcmVjb2xvcmVkUmVnaXN0ZXJJbmRleCwgdW5zaWduZWQgdG1wQXJy
YXlTaXplLCBjb25zdCBIYXNoU2V0PHVuc2lnbmVkPiYgdW5zcGlsbGFibGVUbXBzLCBjb25zdCBV
c2VDb3VudHM8VG1wPiYgdXNlQ291bnRzKQorICAgIElSQyhDb2RlJiBjb2RlLCBjb25zdCBWZWN0
b3I8UmVnPiYgcmVnc0luUHJpb3JpdHlPcmRlciwgSW5kZXhUeXBlIGxhc3RQcmVjb2xvcmVkUmVn
aXN0ZXJJbmRleCwgdW5zaWduZWQgdG1wQXJyYXlTaXplLCBjb25zdCBCaXRWZWN0b3ImIHVuc3Bp
bGxhYmxlVG1wcywgY29uc3QgVXNlQ291bnRzJiB1c2VDb3VudHMpCiAgICAgICAgIDogQmFzZShj
b2RlLCByZWdzSW5Qcmlvcml0eU9yZGVyLCBsYXN0UHJlY29sb3JlZFJlZ2lzdGVySW5kZXgsIHRt
cEFycmF5U2l6ZSwgdW5zcGlsbGFibGVUbXBzLCB1c2VDb3VudHMpCiAgICAgewogICAgIH0KQEAg
LTEwOTMsOCArMTIwMiw3IEBAIHByb3RlY3RlZDoKIAogICAgICAgICAgICAgaWYgKHRyYWNlRGVi
dWcpCiAgICAgICAgICAgICAgICAgZGF0YUxvZygiICAgIENvYWxlc2NlZFxuIik7Ci0gICAgICAg
IH0gZWxzZSBpZiAoaXNQcmVjb2xvcmVkKHYpCi0gICAgICAgICAgICB8fCBoYXNJbnRlcmZlcmVu
Y2VFZGdlKEludGVyZmVyZW5jZUVkZ2UodSwgdikpKSB7CisgICAgICAgIH0gZWxzZSBpZiAoaXNQ
cmVjb2xvcmVkKHYpIHx8IGhhc0ludGVyZmVyZW5jZUVkZ2UodSwgdikpIHsKICAgICAgICAgICAg
IGFkZFdvcmtMaXN0KHUpOwogICAgICAgICAgICAgYWRkV29ya0xpc3Qodik7CiAKQEAgLTExMzMs
NyArMTI0MSw4IEBAIHByb3RlY3RlZDoKICAgICAgICAgbV9jb2FsZXNjZWRUbXBzW3ZdID0gdTsK
IAogICAgICAgICBhdXRvJiB2TW92ZXMgPSBtX21vdmVMaXN0W3ZdOwotICAgICAgICBtX21vdmVM
aXN0W3VdLmFkZCh2TW92ZXMuYmVnaW4oKSwgdk1vdmVzLmVuZCgpKTsKKyAgICAgICAgZm9yICh1
bnNpZ25lZCBtb3ZlIDogdk1vdmVzKQorICAgICAgICAgICAgbV9tb3ZlTGlzdFt1XS5hZGQobW92
ZSk7CiAKICAgICAgICAgZm9yRWFjaEFkamFjZW50KHYsIFt0aGlzLCB1XSAoSW5kZXhUeXBlIGFk
amFjZW50VG1wSW5kZXgpIHsKICAgICAgICAgICAgIGlmIChhZGRFZGdlRGlzdGluY3RXaXRob3V0
RGVncmVlQ2hhbmdlKGFkamFjZW50VG1wSW5kZXgsIHUpKSB7CkBAIC0xMzk3LDEwICsxNTA2LDEx
IEBAIHByb3RlY3RlZDoKIH07CiAKIC8vIFRoaXMgcGVyZm9ybSBhbGwgdGhlIHRhc2tzIHRoYXQg
YXJlIHNwZWNpZmljIHRvIGNlcnRhaW4gcmVnaXN0ZXIgdHlwZS4KLXRlbXBsYXRlPEJhbmsgYmFu
aywgdGVtcGxhdGU8dHlwZW5hbWUsIHR5cGVuYW1lLCB0eXBlbmFtZT4gY2xhc3MgQWxsb2NhdG9y
VHlwZSwgdHlwZW5hbWUgSW50ZXJmZXJlbmNlRWRnZVR5cGU+Ci1jbGFzcyBDb2xvcmluZ0FsbG9j
YXRvciA6IHB1YmxpYyBBbGxvY2F0b3JUeXBlPHVuc2lnbmVkLCBBYnNvbHV0ZVRtcE1hcHBlcjxi
YW5rPiwgSW50ZXJmZXJlbmNlRWRnZVR5cGU+IHsKLSAgICB1c2luZyBUbXBNYXBwZXIgPSBBYnNv
bHV0ZVRtcE1hcHBlcjxiYW5rPjsKLSAgICB1c2luZyBCYXNlID0gQWxsb2NhdG9yVHlwZTx1bnNp
Z25lZCwgVG1wTWFwcGVyLCBJbnRlcmZlcmVuY2VFZGdlVHlwZT47Cit0ZW1wbGF0ZTx0eXBlbmFt
ZSBJbmRleFR5cGUsIEJhbmsgYmFuaywgdGVtcGxhdGU8dHlwZW5hbWUsIHR5cGVuYW1lLCBCYW5r
PiBjbGFzcyBBbGxvY2F0b3JUeXBlLCB0eXBlbmFtZSBJbnRlcmZlcmVuY2VTZXQ+CitjbGFzcyBD
b2xvcmluZ0FsbG9jYXRvciA6IHB1YmxpYyBBbGxvY2F0b3JUeXBlPEluZGV4VHlwZSwgSW50ZXJm
ZXJlbmNlU2V0LCBiYW5rPiB7CisgICAgdXNpbmcgQmFzZSA9IEFsbG9jYXRvclR5cGU8SW5kZXhU
eXBlLCBJbnRlcmZlcmVuY2VTZXQsIGJhbms+OworICAgIHVzaW5nIFRtcE1hcHBlciA9IHR5cGVu
YW1lIEJhc2U6OlRtcE1hcHBlcjsKKyAgICB1c2luZyBCYXNlOjp0bXBUb0luZGV4OwogICAgIHVz
aW5nIEJhc2U6Om1faXNPblNlbGVjdFN0YWNrOwogICAgIHVzaW5nIEJhc2U6Om1fc2VsZWN0U3Rh
Y2s7CiAgICAgdXNpbmcgQmFzZTo6bV9zaW1wbGlmeVdvcmtsaXN0OwpAQCAtMTQyMywxMiArMTUz
MywxMyBAQCBjbGFzcyBDb2xvcmluZ0FsbG9jYXRvciA6IHB1YmxpYyBBbGxvY2F0b3JUeXBlPHVu
c2lnbmVkLCBBYnNvbHV0ZVRtcE1hcHBlcjxiYW5rPgogICAgIHVzaW5nIEJhc2U6Omhhc0ludGVy
ZmVyZW5jZUVkZ2U7CiAgICAgdXNpbmcgQmFzZTo6Z2V0QWxpYXM7CiAgICAgdXNpbmcgQmFzZTo6
YWRkRWRnZTsKKyAgICB1c2luZyBCYXNlOjptX2ludGVyZmVyZW5jZUVkZ2VzOwogICAgIHVzaW5n
IEJhc2U6Om1fcGlubmVkUmVnczsKICAgICB1c2luZyBCYXNlOjptX3JlZ3NJblByaW9yaXR5T3Jk
ZXI7CiAKIHB1YmxpYzoKIAotICAgIENvbG9yaW5nQWxsb2NhdG9yKENvZGUmIGNvZGUsIFRtcFdp
ZHRoJiB0bXBXaWR0aCwgY29uc3QgVXNlQ291bnRzPFRtcD4mIHVzZUNvdW50cywgY29uc3QgSGFz
aFNldDx1bnNpZ25lZD4mIHVuc3BpbGxhYmxlVG1wKQorICAgIENvbG9yaW5nQWxsb2NhdG9yKENv
ZGUmIGNvZGUsIFRtcFdpZHRoJiB0bXBXaWR0aCwgY29uc3QgVXNlQ291bnRzJiB1c2VDb3VudHMs
IGNvbnN0IEJpdFZlY3RvciYgdW5zcGlsbGFibGVUbXApCiAgICAgICAgIDogQmFzZShjb2RlLCBj
b2RlLnJlZ3NJblByaW9yaXR5T3JkZXIoYmFuayksIFRtcE1hcHBlcjo6bGFzdE1hY2hpbmVSZWdp
c3RlckluZGV4KCksIHRtcEFycmF5U2l6ZShjb2RlKSwgdW5zcGlsbGFibGVUbXAsIHVzZUNvdW50
cykKICAgICAgICAgLCBtX3RtcFdpZHRoKHRtcFdpZHRoKQogICAgIHsKQEAgLTE0NDAsMTMgKzE1
NTEsMTUgQEAgcHVibGljOgogICAgICAgICAgICAgfQogICAgICAgICB9CiAKKyAgICAgICAgbV9p
bnRlcmZlcmVuY2VFZGdlcy5zZXRNYXhUbXBJbmRleChBYnNvbHV0ZVRtcE1hcHBlcjxiYW5rPjo6
YWJzb2x1dGVJbmRleChtX2NvZGUubnVtVG1wcyhiYW5rKSkpOworCiAgICAgICAgIGluaXRpYWxp
emVQcmVjb2xvcmVkVG1wKCk7CiAgICAgICAgIGJ1aWxkKCk7CiAgICAgfQogCiAgICAgVG1wIGdl
dEFsaWFzKFRtcCB0bXApIGNvbnN0CiAgICAgewotICAgICAgICByZXR1cm4gVG1wTWFwcGVyOjp0
bXBGcm9tQWJzb2x1dGVJbmRleChnZXRBbGlhcyhUbXBNYXBwZXI6OmFic29sdXRlSW5kZXgodG1w
KSkpOworICAgICAgICByZXR1cm4gVG1wTWFwcGVyOjp0bXBGcm9tQWJzb2x1dGVJbmRleChnZXRB
bGlhcyh0bXBUb0luZGV4KHRtcCkpKTsKICAgICB9CiAKICAgICAvLyBUaGlzIHRlbGxzIHlvdSBp
ZiBhIE1vdmUgd2lsbCBiZSBjb2FsZXNjYWJsZSBpZiB0aGUgc3JjIGFuZCBkc3QgZW5kIHVwIG1h
dGNoaW5nLiBUaGlzIG1ldGhvZApAQCAtMTQ2OSw4ICsxNTgyLDggQEAgcHVibGljOgogICAgICAg
ICBpZiAobV9jb2FsZXNjZWRUbXBzQXRTcGlsbC5pc0VtcHR5KCkpCiAgICAgICAgICAgICByZXR1
cm4gdG1wOwogCi0gICAgICAgIHVuc2lnbmVkIGFsaWFzSW5kZXggPSBUbXBNYXBwZXI6OmFic29s
dXRlSW5kZXgodG1wKTsKLSAgICAgICAgd2hpbGUgKHVuc2lnbmVkIG5leHRBbGlhc0luZGV4ID0g
bV9jb2FsZXNjZWRUbXBzQXRTcGlsbFthbGlhc0luZGV4XSkKKyAgICAgICAgSW5kZXhUeXBlIGFs
aWFzSW5kZXggPSB0bXBUb0luZGV4KHRtcCk7CisgICAgICAgIHdoaWxlIChJbmRleFR5cGUgbmV4
dEFsaWFzSW5kZXggPSBtX2NvYWxlc2NlZFRtcHNBdFNwaWxsW2FsaWFzSW5kZXhdKQogICAgICAg
ICAgICAgYWxpYXNJbmRleCA9IG5leHRBbGlhc0luZGV4OwogCiAgICAgICAgIFRtcCBhbGlhcyA9
IFRtcE1hcHBlcjo6dG1wRnJvbUFic29sdXRlSW5kZXgoYWxpYXNJbmRleCk7CkBAIC0xNTI3LDcg
KzE2NDAsNyBAQCBwdWJsaWM6CiAgICAgICAgIGNvbnN0IENvbGxlY3Rpb24mIG1fY29sbGVjdGlv
bjsKICAgICB9OwogCi0gICAgSW5kZXhUb1RtcEl0ZXJhYmxlQWRhcHRvcjxWZWN0b3I8dW5zaWdu
ZWQ+PiBzcGlsbGVkVG1wcygpIGNvbnN0IHsgcmV0dXJuIG1fc3BpbGxlZFRtcHM7IH0KKyAgICBJ
bmRleFRvVG1wSXRlcmFibGVBZGFwdG9yPFZlY3RvcjxJbmRleFR5cGU+PiBzcGlsbGVkVG1wcygp
IGNvbnN0IHsgcmV0dXJuIG1fc3BpbGxlZFRtcHM7IH0KIAogICAgIGJvb2wgcmVxdWlyZXNTcGls
bGluZygpIGNvbnN0IHsgcmV0dXJuICFtX3NwaWxsZWRUbXBzLmlzRW1wdHkoKTsgfQogCkBAIC0x
NTg0LDEwICsxNjk3LDEwIEBAIElHTk9SRV9HQ0NfV0FSTklOR1NfRU5ECiAgICAgICAgIGlmIChs
ZWZ0VG1wLmlzR1AoKSAhPSAoYmFuayA9PSBHUCkgfHwgcmlnaHRUbXAuaXNHUCgpICE9IChiYW5r
ID09IEdQKSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgICAgICB1bnNpZ25lZCBs
ZWZ0SW5kZXggPSBUbXBNYXBwZXI6OmFic29sdXRlSW5kZXgobGVmdFRtcCk7Ci0gICAgICAgIHVu
c2lnbmVkIHJpZ2h0SW5kZXggPSBUbXBNYXBwZXI6OmFic29sdXRlSW5kZXgocmlnaHRUbXApOwor
ICAgICAgICBJbmRleFR5cGUgbGVmdEluZGV4ID0gdG1wVG9JbmRleChsZWZ0VG1wKTsKKyAgICAg
ICAgSW5kZXhUeXBlIHJpZ2h0SW5kZXggPSB0bXBUb0luZGV4KHJpZ2h0VG1wKTsKIAotICAgICAg
ICByZXR1cm4gIWhhc0ludGVyZmVyZW5jZUVkZ2UoSW50ZXJmZXJlbmNlRWRnZVR5cGUobGVmdElu
ZGV4LCByaWdodEluZGV4KSk7CisgICAgICAgIHJldHVybiAhaGFzSW50ZXJmZXJlbmNlRWRnZShs
ZWZ0SW5kZXgsIHJpZ2h0SW5kZXgpOwogICAgIH0KIAogICAgIHZvaWQgYWRkVG9Mb3dQcmlvcml0
eUNvYWxlc2NpbmdDYW5kaWRhdGVzKEFyZyBsZWZ0LCBBcmcgcmlnaHQpCkBAIC0xNTk2LDggKzE3
MDksOCBAQCBJR05PUkVfR0NDX1dBUk5JTkdTX0VORAogICAgICAgICBUbXAgbGVmdFRtcCA9IGxl
ZnQudG1wKCk7CiAgICAgICAgIFRtcCByaWdodFRtcCA9IHJpZ2h0LnRtcCgpOwogCi0gICAgICAg
IHVuc2lnbmVkIGxlZnRJbmRleCA9IFRtcE1hcHBlcjo6YWJzb2x1dGVJbmRleChsZWZ0VG1wKTsK
LSAgICAgICAgdW5zaWduZWQgcmlnaHRJbmRleCA9IFRtcE1hcHBlcjo6YWJzb2x1dGVJbmRleChy
aWdodFRtcCk7CisgICAgICAgIEluZGV4VHlwZSBsZWZ0SW5kZXggPSB0bXBUb0luZGV4KGxlZnRU
bXApOworICAgICAgICBJbmRleFR5cGUgcmlnaHRJbmRleCA9IHRtcFRvSW5kZXgocmlnaHRUbXAp
OwogCiAgICAgICAgIHVuc2lnbmVkIG5leHRNb3ZlSW5kZXggPSBtX2NvYWxlc2NpbmdDYW5kaWRh
dGVzLnNpemUoKTsKICAgICAgICAgbV9jb2FsZXNjaW5nQ2FuZGlkYXRlcy5hcHBlbmQoeyBsZWZ0
SW5kZXgsIHJpZ2h0SW5kZXggfSk7CkBAIC0xNjc1LDcgKzE3ODgsNyBAQCBJR05PUkVfR0NDX1dB
Uk5JTkdTX0VORAogICAgICAgICAgICAgQVNTRVJUKHVzZVRtcCk7CiAKICAgICAgICAgICAgIHVu
c2lnbmVkIG5leHRNb3ZlSW5kZXggPSBtX2NvYWxlc2NpbmdDYW5kaWRhdGVzLnNpemUoKTsKLSAg
ICAgICAgICAgIG1fY29hbGVzY2luZ0NhbmRpZGF0ZXMuYXBwZW5kKHsgVG1wTWFwcGVyOjphYnNv
bHV0ZUluZGV4KHVzZVRtcCksIFRtcE1hcHBlcjo6YWJzb2x1dGVJbmRleChkZWZUbXApIH0pOwor
ICAgICAgICAgICAgbV9jb2FsZXNjaW5nQ2FuZGlkYXRlcy5hcHBlbmQoeyB0bXBUb0luZGV4KHVz
ZVRtcCksIHRtcFRvSW5kZXgoZGVmVG1wKSB9KTsKICAgICAgICAgICAgIGlmICh0cmFjZURlYnVn
KQogICAgICAgICAgICAgICAgIGRhdGFMb2dMbigiTW92ZSBhdCBpbmRleCAiLCBuZXh0TW92ZUlu
ZGV4LCAiIGlzOiAiLCAqcHJldkluc3QpOwogCkBAIC0xNzQzLDE0ICsxODU2LDE1IEBAIElHTk9S
RV9HQ0NfV0FSTklOR1NfRU5ECiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgZm9y
IChUbXAgbGl2ZVRtcCA6IGxpdmVUbXBzKSB7CiAgICAgICAgICAgICAgICAgICAgIEFTU0VSVChs
aXZlVG1wLmlzR1AoKSA9PSAoYmFuayA9PSBHUCkpOwotICAgICAgICAgICAgICAgICAgICAKLSAg
ICAgICAgICAgICAgICAgICAgaWYgKHRyYWNlRGVidWcpCi0gICAgICAgICAgICAgICAgICAgICAg
ICBkYXRhTG9nKCIgICAgQWRkaW5nIGRlZi1saXZlIGVkZ2U6ICIsIGFyZywgIiwgIiwgbGl2ZVRt
cCwgIlxuIik7CisKKyAgICAgICAgICAgICAgICAgICAgZGF0YUxvZ0xuSWYodHJhY2VEZWJ1Zywg
IiAgICBBZGRpbmcgZGVmLWxpdmUgZWRnZTogIiwgYXJnLCAiLCAiLCBsaXZlVG1wKTsKICAgICAg
ICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgIGFkZEVkZ2UoYXJnLCBsaXZlVG1w
KTsKICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgZm9yIChjb25zdCBUbXAmIHBp
bm5lZFJlZ1RtcCA6IG1fcGlubmVkUmVncykKKyAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IFRt
cCYgcGlubmVkUmVnVG1wIDogbV9waW5uZWRSZWdzKSB7CisgICAgICAgICAgICAgICAgICAgIGRh
dGFMb2dMbklmKHRyYWNlRGVidWcsICIgICAgQWRkaW5nIGRlZi1waW5uZWQgZWRnZTogIiwgYXJn
LCAiLCAiLCBwaW5uZWRSZWdUbXApOwogICAgICAgICAgICAgICAgICAgICBhZGRFZGdlKGFyZywg
cGlubmVkUmVnVG1wKTsKKyAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9KTsKICAgICB9
CiAKQEAgLTE3NTgsNyArMTg3Miw3IEBAIElHTk9SRV9HQ0NfV0FSTklOR1NfRU5ECiAgICAgewog
ICAgICAgICBBU1NFUlRfV0lUSF9NRVNTQUdFKGEuaXNHUCgpID09IGIuaXNHUCgpLCAiQW4gaW50
ZXJmZXJlbmNlIGJldHdlZW4gcmVnaXN0ZXJzIG9mIGRpZmZlcmVudCB0eXBlcyBkb2VzIG5vdCBt
YWtlIHNlbnNlLCBpdCBjYW4gbGVhZCB0byBub24tY29sb3JhYmxlIGdyYXBocy4iKTsKIAotICAg
ICAgICBhZGRFZGdlKFRtcE1hcHBlcjo6YWJzb2x1dGVJbmRleChhKSwgVG1wTWFwcGVyOjphYnNv
bHV0ZUluZGV4KGIpKTsKKyAgICAgICAgYWRkRWRnZSh0bXBUb0luZGV4KGEpLCB0bXBUb0luZGV4
KGIpKTsKICAgICB9CiAKICAgICAvLyBDYWxsaW5nIHRoaXMgd2l0aG91dCBhIHRtcFdpZHRoIHdp
bGwgcGVyZm9ybSBhIG1vcmUgY29uc2VydmF0aXZlIGNvYWxlc2NpbmcgYW5hbHlzaXMgdGhhdCBh
c3N1bWVzCkBAIC0xODIwLDcgKzE5MzQsNyBAQCBJR05PUkVfR0NDX1dBUk5JTkdTX0VORAogCiBj
bGFzcyBHcmFwaENvbG9yaW5nUmVnaXN0ZXJBbGxvY2F0aW9uIHsKIHB1YmxpYzoKLSAgICBHcmFw
aENvbG9yaW5nUmVnaXN0ZXJBbGxvY2F0aW9uKENvZGUmIGNvZGUsIFVzZUNvdW50czxUbXA+JiB1
c2VDb3VudHMpCisgICAgR3JhcGhDb2xvcmluZ1JlZ2lzdGVyQWxsb2NhdGlvbihDb2RlJiBjb2Rl
LCBVc2VDb3VudHMmIHVzZUNvdW50cykKICAgICAgICAgOiBtX2NvZGUoY29kZSkKICAgICAgICAg
LCBtX3VzZUNvdW50cyh1c2VDb3VudHMpCiAgICAgewpAQCAtMTg0MCw3ICsxOTU0LDcgQEAgcHJp
dmF0ZToKICAgICB0ZW1wbGF0ZTxCYW5rIGJhbms+CiAgICAgdm9pZCBhbGxvY2F0ZU9uQmFuaygp
CiAgICAgewotICAgICAgICBIYXNoU2V0PHVuc2lnbmVkPiB1bnNwaWxsYWJsZVRtcHMgPSBjb21w
dXRlVW5zcGlsbGFibGVUbXBzPGJhbms+KCk7CisgICAgICAgIEJpdFZlY3RvciB1bnNwaWxsYWJs
ZVRtcHMgPSBjb21wdXRlVW5zcGlsbGFibGVUbXBzPGJhbms+KCk7CiAKICAgICAgICAgLy8gRklY
TUU6IElmIGEgVG1wIGlzIHVzZWQgb25seSBmcm9tIGEgU2NyYXRjaCByb2xlIGFuZCB0aGF0IGFy
Z3VtZW50IGlzICFhZG1pdHNTdGFjaywgdGhlbgogICAgICAgICAvLyB3ZSBzaG91bGQgYWRkIHRo
ZSBUbXAgdG8gdW5zcGlsbGFibGVUbXBzLiBUaGF0IHdpbGwgaGVscCBhdm9pZCByZWxvb3Bpbmcg
b25seSB0byB0dXJuIHRoZQpAQCAtMTg2NCwxMCArMTk3OCw5IEBAIHByaXZhdGU6CiAgICAgICAg
ICAgICAvLyBjcmVhdGVkIFRtcHMgbWF5IGdldCBuYXJyb3dlciB1c2UvZGVmIHdpZHRocy4gT24g
dGhlIG90aGVyIGhhbmQsIHRoZSBzcGlsbGVyIGFscmVhZHkKICAgICAgICAgICAgIC8vIHNlbGVj
dHMgd2hpY2ggbW92ZSBpbnN0cnVjdGlvbiB0byB1c2UgYmFzZWQgb24gdGhlIG9yaWdpbmFsIFRt
cCdzIHdpZHRocywgc28gaXQgbWF5IG5vdAogICAgICAgICAgICAgLy8gbWF0dGVyIHRoYW4gYSBz
dWJzZXF1ZW50IGl0ZXJhdGlvbiBzZWVzIGEgY29uc2VydmF0aXZlIHdpZHRoIGZvciB0aGUgbmV3
IFRtcHMuIEFsc28sIHRoZQotICAgICAgICAgICAgLy8gcmVjb21wdXRhdGlvbiBtYXkgbm90IGFj
dHVhbGx5IGJlIGEgcGVyZm9ybWFuY2UgcHJvYmxlbTsgaXQncyBsaWtlbHkgdGhhdCBhIGJldHRl
ciB3YXkgdG8KLSAgICAgICAgICAgIC8vIGltcHJvdmUgcGVyZm9ybWFuY2Ugb2YgVG1wV2lkdGgg
aXMgdG8gcmVwbGFjZSBpdHMgSGFzaE1hcCB3aXRoIHNvbWV0aGluZyBlbHNlLiBJdCdzCi0gICAg
ICAgICAgICAvLyBwb3NzaWJsZSB0aGF0IG1vc3Qgb2YgdGhlIFRtcFdpZHRoIG92ZXJoZWFkIGlz
IGZyb20gcXVlcmllcyBvZiBUbXBXaWR0aCByYXRoZXIgdGhhbiB0aGUKLSAgICAgICAgICAgIC8v
IHJlY29tcHV0YXRpb24sIGluIHdoaWNoIGNhc2Ugc3BlZWRpbmcgdXAgdGhlIGxvb2t1cCB3b3Vs
ZCBiZSBhIGJpZ2dlciB3aW4uCisgICAgICAgICAgICAvLyByZWNvbXB1dGF0aW9uIG1heSBub3Qg
YWN0dWFsbHkgYmUgYSBwZXJmb3JtYW5jZSBwcm9ibGVtOiB3ZSBzcGVuZCByb3VnaGx5IDMgdG8g
NCUgb2YgdGhlCisgICAgICAgICAgICAvLyByZWdpc3RlciBhbGxvY2F0b3IgaW4gbV90bXBXaWR0
aC5yZWNvbXB1dGUuIEluIGNvbXBhcmlzb24gd2Ugc3BlbmQgbW9yZSB0aGFuIDQwJSBidWlsZGlu
ZworICAgICAgICAgICAgLy8gdGhlIGludGVyZmVyZW5jZSBncmFwaAogICAgICAgICAgICAgLy8g
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1MjQ3OAogICAgICAgICAg
ICAgbV90bXBXaWR0aC5yZWNvbXB1dGU8YmFuaz4obV9jb2RlKTsKIApAQCAtMTg4NSwyMCArMTk5
OCwyNiBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAg
ICAgIH07CiAKKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKG1fY29kZS5udW1UbXBzKGJhbmsp
IDwgc3RkOjpudW1lcmljX2xpbWl0czx1aW50MTZfdD46Om1heCgpKTsKKyAgICAgICAgICAgIC8v
IFRoZSBiaXQgdmVjdG9yIGFwcHJvYWNoIHVzZXMgbipuIGJpdHMsIG9yIDJrQiBmb3IgbiA9IDQw
MC4KKyAgICAgICAgICAgIGNvbnN0ZXhwciB1bnNpZ25lZCBtYXhTaXplRm9yU21hbGxJbnRlcmZl
cmVuY2VHcmFwaCA9IDQwMDsKKyAgICAgICAgICAgIHVzaW5nIEluZGV4VHlwZSA9IHVpbnQxNl90
OworICAgICAgICAgICAgdXNpbmcgTGFyZ2VJbnRlcmZlcmVuY2VHcmFwaCA9IEludGVyZmVyZW5j
ZVZlY3RvcjxTbWFsbFNldDxJbmRleFR5cGUsIEludEhhc2g8SW5kZXhUeXBlPj4sIEluZGV4VHlw
ZT47CisgICAgICAgICAgICB1c2luZyBTbWFsbEludGVyZmVyZW5jZUdyYXBoID0gSW50ZXJmZXJl
bmNlQml0VmVjdG9yPEluZGV4VHlwZT47CiAgICAgICAgICAgICBpZiAodXNlSVJDKCkpIHsKLSAg
ICAgICAgICAgICAgICBpZiAobV9jb2RlLm51bVRtcHMoYmFuaykgPCBzdGQ6Om51bWVyaWNfbGlt
aXRzPHVpbnQxNl90Pjo6bWF4KCkpIHsKLSAgICAgICAgICAgICAgICAgICAgQ29sb3JpbmdBbGxv
Y2F0b3I8YmFuaywgSVJDLCBJbnRlcmZlcmVuY2VFZGdlPHVpbnQxNl90LCB1aW50MzJfdD4+IGFs
bG9jYXRvcihtX2NvZGUsIG1fdG1wV2lkdGgsIG1fdXNlQ291bnRzLCB1bnNwaWxsYWJsZVRtcHMp
OworICAgICAgICAgICAgICAgIGlmIChtX2NvZGUubnVtVG1wcyhiYW5rKSA8IG1heFNpemVGb3JT
bWFsbEludGVyZmVyZW5jZUdyYXBoKSB7CisgICAgICAgICAgICAgICAgICAgIENvbG9yaW5nQWxs
b2NhdG9yPEluZGV4VHlwZSwgYmFuaywgSVJDLCBTbWFsbEludGVyZmVyZW5jZUdyYXBoPiBhbGxv
Y2F0b3IobV9jb2RlLCBtX3RtcFdpZHRoLCBtX3VzZUNvdW50cywgdW5zcGlsbGFibGVUbXBzKTsK
ICAgICAgICAgICAgICAgICAgICAgZG9uZSA9IGRvQWxsb2NhdGlvbihhbGxvY2F0b3IpOwogICAg
ICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIENvbG9yaW5nQWxsb2Nh
dG9yPGJhbmssIElSQywgSW50ZXJmZXJlbmNlRWRnZTx1aW50MzJfdCwgdWludDY0X3Q+PiBhbGxv
Y2F0b3IobV9jb2RlLCBtX3RtcFdpZHRoLCBtX3VzZUNvdW50cywgdW5zcGlsbGFibGVUbXBzKTsK
KyAgICAgICAgICAgICAgICAgICAgQ29sb3JpbmdBbGxvY2F0b3I8SW5kZXhUeXBlLCBiYW5rLCBJ
UkMsIExhcmdlSW50ZXJmZXJlbmNlR3JhcGg+IGFsbG9jYXRvcihtX2NvZGUsIG1fdG1wV2lkdGgs
IG1fdXNlQ291bnRzLCB1bnNwaWxsYWJsZVRtcHMpOwogICAgICAgICAgICAgICAgICAgICBkb25l
ID0gZG9BbGxvY2F0aW9uKGFsbG9jYXRvcik7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAg
ICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBpZiAobV9jb2RlLm51bVRtcHMoYmFuaykgPCBz
dGQ6Om51bWVyaWNfbGltaXRzPHVpbnQxNl90Pjo6bWF4KCkpIHsKLSAgICAgICAgICAgICAgICAg
ICAgQ29sb3JpbmdBbGxvY2F0b3I8YmFuaywgQnJpZ2dzLCBJbnRlcmZlcmVuY2VFZGdlPHVpbnQx
Nl90LCB1aW50MzJfdD4+IGFsbG9jYXRvcihtX2NvZGUsIG1fdG1wV2lkdGgsIG1fdXNlQ291bnRz
LCB1bnNwaWxsYWJsZVRtcHMpOworICAgICAgICAgICAgICAgIGlmIChtX2NvZGUubnVtVG1wcyhi
YW5rKSA8IG1heFNpemVGb3JTbWFsbEludGVyZmVyZW5jZUdyYXBoKSB7CisgICAgICAgICAgICAg
ICAgICAgIENvbG9yaW5nQWxsb2NhdG9yPEluZGV4VHlwZSwgYmFuaywgQnJpZ2dzLCBTbWFsbElu
dGVyZmVyZW5jZUdyYXBoPiBhbGxvY2F0b3IobV9jb2RlLCBtX3RtcFdpZHRoLCBtX3VzZUNvdW50
cywgdW5zcGlsbGFibGVUbXBzKTsKICAgICAgICAgICAgICAgICAgICAgZG9uZSA9IGRvQWxsb2Nh
dGlvbihhbGxvY2F0b3IpOwogICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAg
ICAgICAgIENvbG9yaW5nQWxsb2NhdG9yPGJhbmssIEJyaWdncywgSW50ZXJmZXJlbmNlRWRnZTx1
aW50MzJfdCwgdWludDY0X3Q+PiBhbGxvY2F0b3IobV9jb2RlLCBtX3RtcFdpZHRoLCBtX3VzZUNv
dW50cywgdW5zcGlsbGFibGVUbXBzKTsKKyAgICAgICAgICAgICAgICAgICAgQ29sb3JpbmdBbGxv
Y2F0b3I8SW5kZXhUeXBlLCBiYW5rLCBCcmlnZ3MsIExhcmdlSW50ZXJmZXJlbmNlR3JhcGg+IGFs
bG9jYXRvcihtX2NvZGUsIG1fdG1wV2lkdGgsIG1fdXNlQ291bnRzLCB1bnNwaWxsYWJsZVRtcHMp
OwogICAgICAgICAgICAgICAgICAgICBkb25lID0gZG9BbGxvY2F0aW9uKGFsbG9jYXRvcik7CiAg
ICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQpAQCAtMTkwNywxMSArMjAyNiw4IEBAIHBy
aXZhdGU6CiAgICAgfQogCiAgICAgdGVtcGxhdGU8QmFuayBiYW5rPgotICAgIEhhc2hTZXQ8dW5z
aWduZWQ+IGNvbXB1dGVVbnNwaWxsYWJsZVRtcHMoKQorICAgIEJpdFZlY3RvciBjb21wdXRlVW5z
cGlsbGFibGVUbXBzKCkKICAgICB7Ci0KLSAgICAgICAgSGFzaFNldDx1bnNpZ25lZD4gdW5zcGls
bGFibGVUbXBzOwotCiAgICAgICAgIHN0cnVjdCBSYW5nZSB7CiAgICAgICAgICAgICB1bnNpZ25l
ZCBmaXJzdCB7IHN0ZDo6bnVtZXJpY19saW1pdHM8dW5zaWduZWQ+OjptYXgoKSB9OwogICAgICAg
ICAgICAgdW5zaWduZWQgbGFzdCB7IDAgfTsKQEAgLTE5NjQsMTIgKzIwODAsMjAgQEAgcHJpdmF0
ZToKICAgICAgICAgICAgIH0KICAgICAgICAgICAgICsrZ2xvYmFsSW5kZXg7CiAgICAgICAgIH0K
KworICAgICAgICBCaXRWZWN0b3IgdW5zcGlsbGFibGVUbXBzOworICAgICAgICB1bnNwaWxsYWJs
ZVRtcHMuZW5zdXJlU2l6ZShhcnJheVNpemUpOwogICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBB
YnNvbHV0ZVRtcE1hcHBlcjxiYW5rPjo6bGFzdE1hY2hpbmVSZWdpc3RlckluZGV4KCkgKyAxOyBp
IDwgcmFuZ2VzLnNpemUoKTsgKytpKSB7CiAgICAgICAgICAgICBSYW5nZSYgcmFuZ2UgPSByYW5n
ZXNbaV07CiAgICAgICAgICAgICBpZiAocmFuZ2UubGFzdCAtIHJhbmdlLmZpcnN0IDw9IDEgJiYg
cmFuZ2UuY291bnQgPiByYW5nZS5hZG1pdFN0YWNrQ291bnQpCi0gICAgICAgICAgICAgICAgdW5z
cGlsbGFibGVUbXBzLmFkZChpKTsKKyAgICAgICAgICAgICAgICB1bnNwaWxsYWJsZVRtcHMucXVp
Y2tTZXQoaSk7CiAgICAgICAgIH0KIAorICAgICAgICBtX2NvZGUuZm9yRWFjaEZhc3RUbXAoWyZd
KFRtcCB0bXApIHsKKyAgICAgICAgICAgIGlmICh0bXAuYmFuaygpID09IGJhbmspCisgICAgICAg
ICAgICAgICAgdW5zcGlsbGFibGVUbXBzLnF1aWNrU2V0KEFic29sdXRlVG1wTWFwcGVyPGJhbms+
OjphYnNvbHV0ZUluZGV4KHRtcCkpOworICAgICAgICB9KTsKKwogICAgICAgICByZXR1cm4gdW5z
cGlsbGFibGVUbXBzOwogICAgIH0KIApAQCAtMjAzMSwxMiArMjE1NSwxMiBAQCBwcml2YXRlOgog
ICAgIH0KIAogICAgIHRlbXBsYXRlPEJhbmsgYmFuaywgdHlwZW5hbWUgQWxsb2NhdG9yVHlwZT4K
LSAgICB2b2lkIGFkZFNwaWxsQW5kRmlsbChjb25zdCBBbGxvY2F0b3JUeXBlJiBhbGxvY2F0b3Is
IEhhc2hTZXQ8dW5zaWduZWQ+JiB1bnNwaWxsYWJsZVRtcHMpCisgICAgdm9pZCBhZGRTcGlsbEFu
ZEZpbGwoY29uc3QgQWxsb2NhdG9yVHlwZSYgYWxsb2NhdG9yLCBCaXRWZWN0b3ImIHVuc3BpbGxh
YmxlVG1wcykKICAgICB7CiAgICAgICAgIEhhc2hNYXA8VG1wLCBTdGFja1Nsb3QqPiBzdGFja1Ns
b3RzOwogICAgICAgICBmb3IgKFRtcCB0bXAgOiBhbGxvY2F0b3Iuc3BpbGxlZFRtcHMoKSkgewog
ICAgICAgICAgICAgLy8gQWxsIHRoZSBzcGlsbGVkIHZhbHVlcyBiZWNvbWUgdW5zcGlsbGFibGUu
Ci0gICAgICAgICAgICB1bnNwaWxsYWJsZVRtcHMuYWRkKEFic29sdXRlVG1wTWFwcGVyPGJhbms+
OjphYnNvbHV0ZUluZGV4KHRtcCkpOworICAgICAgICAgICAgdW5zcGlsbGFibGVUbXBzLnNldChB
YnNvbHV0ZVRtcE1hcHBlcjxiYW5rPjo6YWJzb2x1dGVJbmRleCh0bXApKTsKIAogICAgICAgICAg
ICAgLy8gQWxsb2NhdGUgc3RhY2sgc2xvdCBmb3IgZWFjaCBzcGlsbGVkIHZhbHVlLgogICAgICAg
ICAgICAgU3RhY2tTbG90KiBzdGFja1Nsb3QgPSBtX2NvZGUuYWRkU3RhY2tTbG90KApAQCAtMjEw
OSwxMSArMjIzMyw4IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgICAgICAgICAvLyB2YWx1
ZSByYXRoZXIgdGhhbiBsb2FkaW5nIGl0IGZyb20gdGhlIHN0YWNrLiBJbiBvcmRlciBmb3IgdGhh
dAogICAgICAgICAgICAgICAgICAgICAgICAgLy8gb3B0aW1pemF0aW9uIHRvIGtpY2sgaW4sIHdl
IG5lZWQgdG8gYXZvaWQgcGxhY2luZyB0aGUgVG1wJ3Mgc3RhY2sKICAgICAgICAgICAgICAgICAg
ICAgICAgIC8vIGFkZHJlc3MgaW50byB0aGUgaW5zdHJ1Y3Rpb24uCi0gICAgICAgICAgICAgICAg
ICAgICAgICBpZiAoIUFyZzo6aXNDb2xkVXNlKHJvbGUpKSB7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgY29uc3QgVXNlQ291bnRzPFRtcD46OkNvdW50cyogY291bnRzID0gbV91c2VDb3Vu
dHNbYXJnLnRtcCgpXTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoY291bnRzICYm
IGNvdW50cy0+bnVtQ29uc3REZWZzID09IDEgJiYgY291bnRzLT5udW1EZWZzID09IDEpCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICghQXJnOjppc0NvbGRVc2Uocm9sZSkg
JiYgbV91c2VDb3VudHMuaXNDb25zdERlZjxiYW5rPihBYnNvbHV0ZVRtcE1hcHBlcjxiYW5rPjo6
YWJzb2x1dGVJbmRleChhcmcudG1wKCkpKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBy
ZXR1cm47CiAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAg
IFdpZHRoIHNwaWxsV2lkdGggPSBtX3RtcFdpZHRoLnJlcXVpcmVkV2lkdGgoYXJnLnRtcCgpKTsK
ICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChBcmc6OmlzQW55RGVmKHJvbGUpICYmIHdpZHRo
IDwgc3BpbGxXaWR0aCkgewpAQCAtMjE2Niw3ICsyMjg3LDcgQEAgcHJpdmF0ZToKICAgICAgICAg
ICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoaW5zdEJhbmsgPT0gYmFuayk7CiAgICAgICAgICAg
ICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICBUbXAgdG1wID0gbV9jb2RlLm5ld1RtcChi
YW5rKTsKLSAgICAgICAgICAgICAgICAgICAgdW5zcGlsbGFibGVUbXBzLmFkZChBYnNvbHV0ZVRt
cE1hcHBlcjxiYW5rPjo6YWJzb2x1dGVJbmRleCh0bXApKTsKKyAgICAgICAgICAgICAgICAgICAg
dW5zcGlsbGFibGVUbXBzLnNldChBYnNvbHV0ZVRtcE1hcHBlcjxiYW5rPjo6YWJzb2x1dGVJbmRl
eCh0bXApKTsKICAgICAgICAgICAgICAgICAgICAgaW5zdC5hcmdzLmFwcGVuZCh0bXApOwogICAg
ICAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChpbnN0LmFyZ3Muc2l6ZSgpID09IDMpOwog
ICAgICAgICAgICAgICAgICAgICAKQEAgLTIyMTEsNyArMjMzMiw3IEBAIHByaXZhdGU6CiAgICAg
ICAgICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgICAgICAgICB0bXAgPSBtX2NvZGUubmV3
VG1wKGJhbmspOwotICAgICAgICAgICAgICAgICAgICB1bnNwaWxsYWJsZVRtcHMuYWRkKEFic29s
dXRlVG1wTWFwcGVyPGJhbms+OjphYnNvbHV0ZUluZGV4KHRtcCkpOworICAgICAgICAgICAgICAg
ICAgICB1bnNwaWxsYWJsZVRtcHMuc2V0KEFic29sdXRlVG1wTWFwcGVyPGJhbms+OjphYnNvbHV0
ZUluZGV4KHRtcCkpOwogICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAg
aWYgKHJvbGUgPT0gQXJnOjpTY3JhdGNoKQogICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJu
OwpAQCAtMjIzNSw3ICsyMzU2LDcgQEAgcHJpdmF0ZToKIAogICAgIENvZGUmIG1fY29kZTsKICAg
ICBUbXBXaWR0aCBtX3RtcFdpZHRoOwotICAgIFVzZUNvdW50czxUbXA+JiBtX3VzZUNvdW50czsK
KyAgICBVc2VDb3VudHMmIG1fdXNlQ291bnRzOwogfTsKIAogfSAvLyBhbm9ueW1vdXMgbmFtZXNw
YWNlCkBAIC0yMjQ3LDcgKzIzNjgsNyBAQCB2b2lkIGFsbG9jYXRlUmVnaXN0ZXJzQnlHcmFwaENv
bG9yaW5nKENvZGUmIGNvZGUpCiAgICAgaWYgKHRyYWNlRGVidWcpCiAgICAgICAgIGRhdGFMb2co
IkNvZGUgYmVmb3JlIGdyYXBoIGNvbG9yaW5nOlxuIiwgY29kZSk7CiAKLSAgICBVc2VDb3VudHM8
VG1wPiB1c2VDb3VudHMoY29kZSk7CisgICAgVXNlQ291bnRzIHVzZUNvdW50cyhjb2RlKTsKICAg
ICBHcmFwaENvbG9yaW5nUmVnaXN0ZXJBbGxvY2F0aW9uIGdyYXBoQ29sb3JpbmdSZWdpc3RlckFs
bG9jYXRpb24oY29kZSwgdXNlQ291bnRzKTsKICAgICBncmFwaENvbG9yaW5nUmVnaXN0ZXJBbGxv
Y2F0aW9uLnJ1bigpOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fp
ci9BaXJDb2RlLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckNvZGUuaAppbmRl
eCBjMGJkMzUyMGQwZDMuLmQ4ZWU0MTI3YjU3MyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2IzL2Fpci9BaXJDb2RlLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fp
ci9BaXJDb2RlLmgKQEAgLTQwLDYgKzQwLDcgQEAKICNpbmNsdWRlICJTdGFja0FsaWdubWVudC5o
IgogI2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+CiAjaW5jbHVkZSA8d3RmL0luZGV4TWFwLmg+Cisj
aW5jbHVkZSA8d3RmL1NtYWxsU2V0Lmg+CiAjaW5jbHVkZSA8d3RmL1dlYWtSYW5kb20uaD4KIAog
bmFtZXNwYWNlIEpTQyB7CkBAIC0zMTEsNyArMzEyLDEzIEBAIHB1YmxpYzoKICAgICB9CiAKICAg
ICB2b2lkIGFkZEZhc3RUbXAoVG1wKTsKLSAgICBib29sIGlzRmFzdFRtcChUbXAgdG1wKSBjb25z
dCB7IHJldHVybiBtX2Zhc3RUbXBzLmNvbnRhaW5zKHRtcCk7IH0KKworICAgIHRlbXBsYXRlPHR5
cGVuYW1lIEZ1bmN0b3I+CisgICAgdm9pZCBmb3JFYWNoRmFzdFRtcChjb25zdCBGdW5jdG9yJiBm
dW5jdG9yKSBjb25zdAorICAgIHsKKyAgICAgICAgZm9yIChUbXAgdG1wIDogbV9mYXN0VG1wcykK
KyAgICAgICAgICAgIGZ1bmN0b3IodG1wKTsKKyAgICB9CiAgICAgCiAgICAgQ0ZHJiBjZmcoKSBj
b25zdCB7IHJldHVybiAqbV9jZmc7IH0KICAgICAKQEAgLTM3OSw3ICszODYsNyBAQCBwcml2YXRl
OgogICAgIFZlY3RvcjxzdGQ6OnVuaXF1ZV9wdHI8QmFzaWNCbG9jaz4+IG1fYmxvY2tzOwogICAg
IFNwYXJzZUNvbGxlY3Rpb248U3BlY2lhbD4gbV9zcGVjaWFsczsKICAgICBzdGQ6OnVuaXF1ZV9w
dHI8Q0ZHPiBtX2NmZzsKLSAgICBIYXNoU2V0PFRtcD4gbV9mYXN0VG1wczsKKyAgICBTbWFsbFNl
dDxUbXAsIFRtcEhhc2gsIDI+IG1fZmFzdFRtcHM7CiAgICAgQ0NhbGxTcGVjaWFsKiBtX2NDYWxs
U3BlY2lhbCB7IG51bGxwdHIgfTsKICAgICB1bnNpZ25lZCBtX251bUdQVG1wcyB7IDAgfTsKICAg
ICB1bnNpZ25lZCBtX251bUZQVG1wcyB7IDAgfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9iMy9haXIvQWlyVXNlQ291bnRzLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMv
YWlyL0FpclVzZUNvdW50cy5oCmluZGV4IDkwYTI2OGNkNTUyOS4uMjUxYTkxMzY4ZjFlIDEwMDY0
NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpclVzZUNvdW50cy5oCisrKyBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyVXNlQ291bnRzLmgKQEAgLTMxLDM0ICsz
MSwxOCBAQAogI2luY2x1ZGUgIkFpckJsb2NrV29ya2xpc3QuaCIKICNpbmNsdWRlICJBaXJDb2Rl
LmgiCiAjaW5jbHVkZSAiQWlySW5zdElubGluZXMuaCIKLSNpbmNsdWRlIDx3dGYvSGFzaE1hcC5o
PgotI2luY2x1ZGUgPHd0Zi9MaXN0RHVtcC5oPgorI2luY2x1ZGUgIkFpclRtcElubGluZXMuaCIK
KyNpbmNsdWRlIDx3dGYvQ29tbWFQcmludGVyLmg+CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgog
CiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsgbmFtZXNwYWNlIEFpciB7CiAKIGNsYXNz
IENvZGU7CiAKLS8vIENvbXB1dGVzIHRoZSBudW1iZXIgb2YgdXNlcyBvZiBhIHZhcmlhYmxlIGJh
c2VkIG9uIGZyZXF1ZW5jeSBvZiBleGVjdXRpb24uIFRoZSBmcmVxdWVuY3kgb2YgYmxvY2tzCisv
LyBDb21wdXRlcyB0aGUgbnVtYmVyIG9mIHVzZXMgb2YgYSB0bXAgYmFzZWQgb24gZnJlcXVlbmN5
IG9mIGV4ZWN1dGlvbi4gVGhlIGZyZXF1ZW5jeSBvZiBibG9ja3MKIC8vIHRoYXQgYXJlIG9ubHkg
cmVhY2hhYmxlIGJ5IHJhcmUgZWRnZXMgaXMgc2NhbGVkIGJ5IE9wdGlvbnM6OnJhcmVCbG9ja1Bl
bmFsdHkoKS4KLQotLy8gVGhpbmcgY2FuIGJlIGVpdGhlciBUbXAgb3IgQXJnLgotdGVtcGxhdGU8
dHlwZW5hbWUgVGhpbmc+CiBjbGFzcyBVc2VDb3VudHMgewogcHVibGljOgotICAgIHN0cnVjdCBD
b3VudHMgewotICAgICAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKLSAgICAg
ICAgewotICAgICAgICAgICAgb3V0LnByaW50KAotICAgICAgICAgICAgICAgICJ7bnVtV2FybVVz
ZXMgPSAiLCBudW1XYXJtVXNlcywgIiwgbnVtQ29sZFVzZXMgPSAiLCBudW1Db2xkVXNlcywgIiwg
bnVtRGVmcyA9ICIsCi0gICAgICAgICAgICAgICAgbnVtRGVmcywgIn0iKTsKLSAgICAgICAgfQot
ICAgICAgICAKLSAgICAgICAgZG91YmxlIG51bVdhcm1Vc2VzIHsgMCB9OwotICAgICAgICBkb3Vi
bGUgbnVtQ29sZFVzZXMgeyAwIH07Ci0gICAgICAgIGRvdWJsZSBudW1EZWZzIHsgMCB9OwotICAg
ICAgICBkb3VibGUgbnVtQ29uc3REZWZzIHsgMCB9OwotICAgIH07Ci0gICAgCiAgICAgVXNlQ291
bnRzKENvZGUmIGNvZGUpCiAgICAgewogICAgICAgICAvLyBGaW5kIG5vbi1yYXJlIGJsb2Nrcy4K
QEAgLTcwLDQ3ICs1NCw3MyBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgICAgIGZhc3RXb3Jr
bGlzdC5wdXNoKHN1Y2Nlc3Nvci5ibG9jaygpKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQot
ICAgICAgICAKKworICAgICAgICB1bnNpZ25lZCBncEFycmF5U2l6ZSA9IEFic29sdXRlVG1wTWFw
cGVyPEdQPjo6YWJzb2x1dGVJbmRleChjb2RlLm51bVRtcHMoR1ApKTsKKyAgICAgICAgbV9ncE51
bVdhcm1Vc2VzQW5kRGVmcy5yZXNpemUoZ3BBcnJheVNpemUpOworICAgICAgICBtX2dwQ29uc3RE
ZWZzLmVuc3VyZVNpemUoZ3BBcnJheVNpemUpOworICAgICAgICB1bnNpZ25lZCBmcEFycmF5U2l6
ZSA9IEFic29sdXRlVG1wTWFwcGVyPEZQPjo6YWJzb2x1dGVJbmRleChjb2RlLm51bVRtcHMoRlAp
KTsKKyAgICAgICAgbV9mcE51bVdhcm1Vc2VzQW5kRGVmcy5yZXNpemUoZnBBcnJheVNpemUpOwor
ICAgICAgICBtX2ZwQ29uc3REZWZzLmVuc3VyZVNpemUoZ3BBcnJheVNpemUpOworCiAgICAgICAg
IGZvciAoQmFzaWNCbG9jayogYmxvY2sgOiBjb2RlKSB7CiAgICAgICAgICAgICBkb3VibGUgZnJl
cXVlbmN5ID0gYmxvY2stPmZyZXF1ZW5jeSgpOwogICAgICAgICAgICAgaWYgKCFmYXN0V29ya2xp
c3Quc2F3KGJsb2NrKSkKICAgICAgICAgICAgICAgICBmcmVxdWVuY3kgKj0gT3B0aW9uczo6cmFy
ZUJsb2NrUGVuYWx0eSgpOwogICAgICAgICAgICAgZm9yIChJbnN0JiBpbnN0IDogKmJsb2NrKSB7
Ci0gICAgICAgICAgICAgICAgaW5zdC5mb3JFYWNoPFRoaW5nPigKLSAgICAgICAgICAgICAgICAg
ICAgWyZdIChUaGluZyYgYXJnLCBBcmc6OlJvbGUgcm9sZSwgQmFuaywgV2lkdGgpIHsKLSAgICAg
ICAgICAgICAgICAgICAgICAgIENvdW50cyYgY291bnRzID0gbV9jb3VudHMuYWRkKGFyZywgQ291
bnRzKCkpLml0ZXJhdG9yLT52YWx1ZTsKLQotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKEFy
Zzo6aXNXYXJtVXNlKHJvbGUpKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvdW50cy5u
dW1XYXJtVXNlcyArPSBmcmVxdWVuY3k7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoQXJn
Ojppc0NvbGRVc2Uocm9sZSkpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgY291bnRzLm51
bUNvbGRVc2VzICs9IGZyZXF1ZW5jeTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChBcmc6
OmlzQW55RGVmKHJvbGUpKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvdW50cy5udW1E
ZWZzICs9IGZyZXF1ZW5jeTsKKyAgICAgICAgICAgICAgICBpbnN0LmZvckVhY2g8VG1wPigKKyAg
ICAgICAgICAgICAgICAgICAgWyZdIChUbXAmIHRtcCwgQXJnOjpSb2xlIHJvbGUsIEJhbmsgYmFu
aywgV2lkdGgpIHsKKworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKEFyZzo6aXNXYXJtVXNl
KHJvbGUpIHx8IEFyZzo6aXNBbnlEZWYocm9sZSkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBpZiAoYmFuayA9PSBHUCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9n
cE51bVdhcm1Vc2VzQW5kRGVmc1tBYnNvbHV0ZVRtcE1hcHBlcjxHUD46OmFic29sdXRlSW5kZXgo
dG1wKV0gKz0gZnJlcXVlbmN5OworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9mcE51bVdhcm1Vc2VzQW5kRGVmc1tBYnNv
bHV0ZVRtcE1hcHBlcjxGUD46OmFic29sdXRlSW5kZXgodG1wKV0gKz0gZnJlcXVlbmN5OworICAg
ICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICB9KTsKIAogICAgICAg
ICAgICAgICAgIGlmICgoaW5zdC5raW5kLm9wY29kZSA9PSBNb3ZlIHx8IGluc3Qua2luZC5vcGNv
ZGUgPT0gTW92ZTMyKQogICAgICAgICAgICAgICAgICAgICAmJiBpbnN0LmFyZ3NbMF0uaXNTb21l
SW1tKCkKLSAgICAgICAgICAgICAgICAgICAgJiYgaW5zdC5hcmdzWzFdLmlzPFRoaW5nPigpKQot
ICAgICAgICAgICAgICAgICAgICBtX2NvdW50cy5hZGQoaW5zdC5hcmdzWzFdLmFzPFRoaW5nPigp
LCBDb3VudHMoKSkuaXRlcmF0b3ItPnZhbHVlLm51bUNvbnN0RGVmcysrOworICAgICAgICAgICAg
ICAgICAgICAmJiBpbnN0LmFyZ3NbMV0uaXM8VG1wPigpKSB7CisgICAgICAgICAgICAgICAgICAg
IFRtcCB0bXAgPSBpbnN0LmFyZ3NbMV0uYXM8VG1wPigpOworICAgICAgICAgICAgICAgICAgICBp
ZiAodG1wLmJhbmsoKSA9PSBHUCkKKyAgICAgICAgICAgICAgICAgICAgICAgIG1fZ3BDb25zdERl
ZnMucXVpY2tTZXQoQWJzb2x1dGVUbXBNYXBwZXI8R1A+OjphYnNvbHV0ZUluZGV4KHRtcCkpOwor
ICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICBtX2ZwQ29u
c3REZWZzLnF1aWNrU2V0KEFic29sdXRlVG1wTWFwcGVyPEZQPjo6YWJzb2x1dGVJbmRleCh0bXAp
KTsKKyAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9CiAK
LSAgICBjb25zdCBDb3VudHMqIG9wZXJhdG9yW10oY29uc3QgVGhpbmcmIGFyZykgY29uc3QKKyAg
ICB0ZW1wbGF0ZTxCYW5rIGJhbms+CisgICAgYm9vbCBpc0NvbnN0RGVmKHVuc2lnbmVkIGFic29s
dXRlSW5kZXgpIGNvbnN0CisgICAgeworICAgICAgICBpZiAoYmFuayA9PSBHUCkKKyAgICAgICAg
ICAgIHJldHVybiBtX2dwQ29uc3REZWZzLnF1aWNrR2V0KGFic29sdXRlSW5kZXgpOworICAgICAg
ICByZXR1cm4gbV9mcENvbnN0RGVmcy5xdWlja0dldChhYnNvbHV0ZUluZGV4KTsKKyAgICB9CisK
KyAgICB0ZW1wbGF0ZTxCYW5rIGJhbms+CisgICAgZmxvYXQgbnVtV2FybVVzZXNBbmREZWZzKHVu
c2lnbmVkIGFic29sdXRlSW5kZXgpIGNvbnN0CiAgICAgewotICAgICAgICBhdXRvIGl0ZXIgPSBt
X2NvdW50cy5maW5kKGFyZyk7Ci0gICAgICAgIGlmIChpdGVyID09IG1fY291bnRzLmVuZCgpKQot
ICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgICAgIHJldHVybiAmaXRlci0+dmFsdWU7
CisgICAgICAgIGlmIChiYW5rID09IEdQKQorICAgICAgICAgICAgcmV0dXJuIG1fZ3BOdW1XYXJt
VXNlc0FuZERlZnNbYWJzb2x1dGVJbmRleF07CisgICAgICAgIHJldHVybiBtX2ZwTnVtV2FybVVz
ZXNBbmREZWZzW2Fic29sdXRlSW5kZXhdOwogICAgIH0KIAogICAgIHZvaWQgZHVtcChQcmludFN0
cmVhbSYgb3V0KSBjb25zdAogICAgIHsKLSAgICAgICAgb3V0LnByaW50KG1hcER1bXAobV9jb3Vu
dHMpKTsKKyAgICAgICAgQ29tbWFQcmludGVyIGNvbW1hKCIsICIpOworICAgICAgICBmb3IgKHVu
c2lnbmVkIGkgPSAwOyBpIDwgbV9ncE51bVdhcm1Vc2VzQW5kRGVmcy5zaXplKCk7ICsraSkKKyAg
ICAgICAgICAgIG91dC5wcmludChjb21tYSwgQWJzb2x1dGVUbXBNYXBwZXI8R1A+Ojp0bXBGcm9t
QWJzb2x1dGVJbmRleChpKSwgIj0+IHtudW1XYXJtVXNlc0FuZERlZnM9IiwgbV9ncE51bVdhcm1V
c2VzQW5kRGVmc1tpXSwgIiwgaXNDb25zdERlZj0iLCBtX2dwQ29uc3REZWZzLnF1aWNrR2V0KGkp
LCAifSIpOworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9mcE51bVdhcm1Vc2Vz
QW5kRGVmcy5zaXplKCk7ICsraSkKKyAgICAgICAgICAgIG91dC5wcmludChjb21tYSwgQWJzb2x1
dGVUbXBNYXBwZXI8RlA+Ojp0bXBGcm9tQWJzb2x1dGVJbmRleChpKSwgIj0+IHtudW1XYXJtVXNl
c0FuZERlZnM9IiwgbV9mcE51bVdhcm1Vc2VzQW5kRGVmc1tpXSwgIiwgaXNDb25zdERlZj0iLCBt
X2ZwQ29uc3REZWZzLnF1aWNrR2V0KGkpLCAifSIpOwogICAgIH0KIAogcHJpdmF0ZToKLSAgICBI
YXNoTWFwPFRoaW5nLCBDb3VudHM+IG1fY291bnRzOworICAgIFZlY3RvcjxmbG9hdD4gbV9ncE51
bVdhcm1Vc2VzQW5kRGVmczsKKyAgICBWZWN0b3I8ZmxvYXQ+IG1fZnBOdW1XYXJtVXNlc0FuZERl
ZnM7CisgICAgQml0VmVjdG9yIG1fZ3BDb25zdERlZnM7CisgICAgQml0VmVjdG9yIG1fZnBDb25z
dERlZnM7CiB9OwogCiB9IH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMzo6QWlyCmRpZmYgLS1naXQg
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL05vZGVzLmggYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvcGFyc2VyL05vZGVzLmgKaW5kZXggZWQxNzNjMTdhNWJiLi41NjEyOTlhNmE3MGYgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvTm9kZXMuaAorKysgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL05vZGVzLmgKQEAgLTM2LDcgKzM2LDcgQEAKICNpbmNs
dWRlICJTeW1ib2xUYWJsZS5oIgogI2luY2x1ZGUgIlZhcmlhYmxlRW52aXJvbm1lbnQuaCIKICNp
bmNsdWRlIDx3dGYvTWF0aEV4dHJhcy5oPgotI2luY2x1ZGUgPHd0Zi9TbWFsbFB0clNldC5oPgor
I2luY2x1ZGUgPHd0Zi9TbWFsbFNldC5oPgogCiBuYW1lc3BhY2UgSlNDIHsKIApAQCAtNTMsNyAr
NTMsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICBjbGFzcyBSZWdpc3RlcklEOwogICAgIGNsYXNz
IFNjb3BlTm9kZTsKIAotICAgIHR5cGVkZWYgU21hbGxQdHJTZXQ8VW5pcXVlZFN0cmluZ0ltcGwq
PiBVbmlxdWVkU3RyaW5nSW1wbFB0clNldDsKKyAgICB0eXBlZGVmIFNtYWxsU2V0PFVuaXF1ZWRT
dHJpbmdJbXBsKj4gVW5pcXVlZFN0cmluZ0ltcGxQdHJTZXQ7CiAKICAgICBlbnVtIGNsYXNzIE9w
ZXJhdG9yIDogdWludDhfdCB7CiAgICAgICAgIEVxdWFsLApkaWZmIC0tZ2l0IGEvU291cmNlL1dU
Ri9XVEYueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1NvdXJjZS9XVEYvV1RGLnhjb2RlcHJv
ai9wcm9qZWN0LnBieHByb2oKaW5kZXggYjExZTA5OGNlNDc3Li5hZmY1MzIxYjQ3ZjMgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XVEYvV1RGLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvU291
cmNlL1dURi9XVEYueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAtNDIsNyArNDIsNyBAQAog
CQkwRjlEMzM2MDE2NURCQTczMDA1QUQzODcgLyogRmlsZVByaW50U3RyZWFtLmNwcCBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGOUQzMzVCMTY1REJBNzMw
MDVBRDM4NyAvKiBGaWxlUHJpbnRTdHJlYW0uY3BwICovOyB9OwogCQkwRjlEMzM2MjE2NURCQTcz
MDA1QUQzODcgLyogUHJpbnRTdHJlYW0uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMEY5RDMzNUQxNjVEQkE3MzAwNUFEMzg3IC8qIFByaW50U3RyZWFt
LmNwcCAqLzsgfTsKIAkJMEZBNkYzOEYyMENDNTgwRjAwQTAzRENEIC8qIFNlZ21lbnRlZFZlY3Rv
ci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkE2
RjM4RTIwQ0M1ODBFMDBBMDNEQ0QgLyogU2VnbWVudGVkVmVjdG9yLmNwcCAqLzsgfTsKLQkJMEZB
NkYzOTMyMENDNzNBMzAwQTAzRENEIC8qIFNtYWxsUHRyU2V0LmNwcCBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGQTZGMzkyMjBDQzczQTIwMEEwM0RDRCAv
KiBTbWFsbFB0clNldC5jcHAgKi87IH07CisJCTBGQTZGMzkzMjBDQzczQTMwMEEwM0RDRCAvKiBT
bWFsbFNldC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSAwRkE2RjM5MjIwQ0M3M0EyMDBBMDNEQ0QgLyogU21hbGxTZXQuY3BwICovOyB9OwogCQkwRkE2
RjM5NTIwQ0NBQ0U5MDBBMDNEQ0QgLyogVW5pcXVlQXJyYXkuY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZBNkYzOTQyMENDQUNFOTAwQTAzRENEIC8q
IFVuaXF1ZUFycmF5LmNwcCAqLzsgfTsKIAkJMEZEREJGQTcxNjY2REZBMzAwQzU1RkVGIC8qIFN0
cmluZ1ByaW50U3RyZWFtLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDBGRERCRkE1MTY2NkRGQTMwMEM1NUZFRiAvKiBTdHJpbmdQcmludFN0cmVhbS5j
cHAgKi87IH07CiAJCTBGRTE2NDZBMUI2RkZDOTYwMDQwMEU3QyAvKiBMb2NrLmNwcCBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRTE2NDY4MUI2RkZDOTYw
MDQwMEU3QyAvKiBMb2NrLmNwcCAqLzsgfTsKQEAgLTI3Miw3ICsyNzIsNyBAQAogCQkwRjlEQUEw
NTFGRDFDMzdCMDA3OUM1QjIgLyogU3RhY2tTaG90UHJvZmlsZXIuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gU3RhY2tTaG90UHJvZmlsZXIuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJMEZBNkYzOEUyMENDNTgwRTAwQTAzRENEIC8qIFNlZ21lbnRlZFZlY3Rvci5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTZWdtZW50ZWRWZWN0b3Iu
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRkE2RjM5MDIwQ0M2MUVCMDBBMDNE
Q0QgLyogUmVmQ291bnRlZEFycmF5LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
cGF0aCA9IFJlZkNvdW50ZWRBcnJheS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0J
CTBGQTZGMzkyMjBDQzczQTIwMEEwM0RDRCAvKiBTbWFsbFB0clNldC5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTbWFsbFB0clNldC5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CisJCTBGQTZGMzkyMjBDQzczQTIwMEEwM0RDRCAvKiBTbWFsbFNldC5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTbWFsbFNldC5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGQTZGMzk0MjBDQ0FDRTkwMEEwM0RDRCAvKiBVbmlx
dWVBcnJheS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBVbmlxdWVB
cnJheS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGQjE0RTE4MTgwRkEyMTgw
MDlCNkI0RCAvKiBCYWcuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQmFnLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGQjE0RTFBMTgxMEUxREEwMDlCNkI0RCAv
KiBCYWdUb0hhc2hNYXAuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQmFnVG9IYXNoTWFwLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CkBAIC00NDIsNyArNDQyLDcgQEAKIAkJNzBFQ0E2MEIxQjAyNDI2
ODAwNDQ5NzM5IC8qIFN5bWJvbEltcGwuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gU3ltYm9sSW1wbC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3MEVDQTYwQzFC
MDI0MjY4MDA0NDk3MzkgLyogVW5pcXVlZFN0cmluZ0ltcGwuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gVW5pcXVlZFN0cmluZ0ltcGwuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJNzkwMzhFMDUyMjRCMDVBNzAwNEMwNzM4IC8qIFNwYW5uaW5nVHJlZS5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTcGFubmluZ1RyZWUuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKLQkJNzkzNkQ2QTkxQzk5RjhBRTAwMEQxQUVEIC8qIFNtYWxsUHRyU2V0
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNtYWxsUHRyU2V0Lmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTc5MzZENkE5MUM5OUY4QUUwMDBEMUFFRCAvKiBTbWFs
bFNldC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTbWFsbFNldC5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3OTNCRkFERDlDRUQ0NEI4QjlGQkNBMTYgLyogU3Rk
VW5vcmRlcmVkTWFwLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFN0ZFVub3Jk
ZXJlZE1hcC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3OTUyMTIwMjFGNDI1ODg4
MDBCRDY0MjEgLyogU2luZ2xlUm9vdEdyYXBoLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IFNpbmdsZVJvb3RHcmFwaC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3
QTA1MDkzRDFGQjlEQ0M1MDBCMzNGQjggLyogSlNPTlZhbHVlcy5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBKU09OVmFsdWVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CkBAIC0xMjQ0LDggKzEyNDQsOCBAQAogCQkJCUE3NDg3NDRGMTdBMEJEQUUwMEZBMDRDQiAvKiBT
aXhDaGFyYWN0ZXJIYXNoLmNwcCAqLywKIAkJCQlBNzQ4NzQ1MDE3QTBCREFFMDBGQTA0Q0IgLyog
U2l4Q2hhcmFjdGVySGFzaC5oICovLAogCQkJCUE4QTQ3MzBDMTUxQTgyNUIwMDQxMjNGRiAvKiBT
aXplTGltaXRzLmNwcCAqLywKLQkJCQkwRkE2RjM5MjIwQ0M3M0EyMDBBMDNEQ0QgLyogU21hbGxQ
dHJTZXQuY3BwICovLAotCQkJCTc5MzZENkE5MUM5OUY4QUUwMDBEMUFFRCAvKiBTbWFsbFB0clNl
dC5oICovLAorCQkJCTBGQTZGMzkyMjBDQzczQTIwMEEwM0RDRCAvKiBTbWFsbFNldC5jcHAgKi8s
CisJCQkJNzkzNkQ2QTkxQzk5RjhBRTAwMEQxQUVEIC8qIFNtYWxsU2V0LmggKi8sCiAJCQkJQTMw
RDQxMkQxRjBERTEzRjAwQjcxOTU0IC8qIFNvZnRMaW5raW5nLmggKi8sCiAJCQkJOTMxNTZDOEQy
NjJDOTgyMjAwRUFFMjdCIC8qIFNvcnRlZEFycmF5TWFwLmggKi8sCiAJCQkJNzkwMzhFMDUyMjRC
MDVBNzAwNEMwNzM4IC8qIFNwYW5uaW5nVHJlZS5oICovLApAQCAtMTc2MCw3ICsxNzYwLDcgQEAK
IAkJCQk1MzExQkQ1MzFFQTcxQ0FEMDA1MjUyODEgLyogU2lnbmFscy5jcHAgaW4gU291cmNlcyAq
LywKIAkJCQlBNzQ4NzQ1MjE3QTBCREFFMDBGQTA0Q0IgLyogU2l4Q2hhcmFjdGVySGFzaC5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQlBOEE0NzQyNTE1MUE4MjVCMDA0MTIzRkYgLyogU2l6ZUxpbWl0
cy5jcHAgaW4gU291cmNlcyAqLywKLQkJCQkwRkE2RjM5MzIwQ0M3M0EzMDBBMDNEQ0QgLyogU21h
bGxQdHJTZXQuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEZBNkYzOTMyMENDNzNBMzAwQTAzRENE
IC8qIFNtYWxsU2V0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE4QTQ3NDI3MTUxQTgyNUIwMDQx
MjNGRiAvKiBTdGFja0JvdW5kcy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlGRUVBNERGOTIxNkQ3
QkU0MDBBQzA2MDIgLyogU3RhY2tQb2ludGVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUZFREFD
RDNEMTYzMEY4M0YwMEM2OTYzNCAvKiBTdGFja1N0YXRzLmNwcCBpbiBTb3VyY2VzICovLApkaWZm
IC0tZ2l0IGEvU291cmNlL1dURi93dGYvQ01ha2VMaXN0cy50eHQgYi9Tb3VyY2UvV1RGL3d0Zi9D
TWFrZUxpc3RzLnR4dAppbmRleCBlN2RiYzRmMDJmYTAuLjgwMThmYWJhNDZjNyAxMDA2NDQKLS0t
IGEvU291cmNlL1dURi93dGYvQ01ha2VMaXN0cy50eHQKKysrIGIvU291cmNlL1dURi93dGYvQ01h
a2VMaXN0cy50eHQKQEAgLTIzNSw3ICsyMzUsNyBAQCBzZXQoV1RGX1BVQkxJQ19IRUFERVJTCiAg
ICAgU2luZ2x5TGlua2VkTGlzdC5oCiAgICAgU2luZ2x5TGlua2VkTGlzdFdpdGhUYWlsLmgKICAg
ICBTaXhDaGFyYWN0ZXJIYXNoLmgKLSAgICBTbWFsbFB0clNldC5oCisgICAgU21hbGxTZXQuaAog
ICAgIFNvZnRMaW5raW5nLmgKICAgICBTb3J0ZWRBcnJheU1hcC5oCiAgICAgU3Bhbm5pbmdUcmVl
LmgKQEAgLTQ0Myw3ICs0NDMsNyBAQCBzZXQoV1RGX1NPVVJDRVMKICAgICBTZWNvbmRzLmNwcAog
ICAgIFNlZ21lbnRlZFZlY3Rvci5jcHAKICAgICBTaXhDaGFyYWN0ZXJIYXNoLmNwcAotICAgIFNt
YWxsUHRyU2V0LmNwcAorICAgIFNtYWxsU2V0LmNwcAogICAgIFN0YWNrQm91bmRzLmNwcAogICAg
IFN0YWNrUG9pbnRlci5jcHAKICAgICBTdGFja1N0YXRzLmNwcApkaWZmIC0tZ2l0IGEvU291cmNl
L1dURi93dGYvU21hbGxQdHJTZXQuY3BwIGIvU291cmNlL1dURi93dGYvU21hbGxTZXQuY3BwCnNp
bWlsYXJpdHkgaW5kZXggOTQlCnJlbmFtZSBmcm9tIFNvdXJjZS9XVEYvd3RmL1NtYWxsUHRyU2V0
LmNwcApyZW5hbWUgdG8gU291cmNlL1dURi93dGYvU21hbGxTZXQuY3BwCmluZGV4IDQyMDQ4ZTdl
OGEyMy4uMmQyZjQxNWIyYzdhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi9TbWFsbFB0clNl
dC5jcHAKKysrIGIvU291cmNlL1dURi93dGYvU21hbGxTZXQuY3BwCkBAIC0yNCwxMiArMjQsMTIg
QEAKICAqLwogCiAjaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSA8d3RmL1NtYWxsUHRyU2V0
Lmg+CisjaW5jbHVkZSA8d3RmL1NtYWxsU2V0Lmg+CiAKICNpbmNsdWRlIDx3dGYvTmV2ZXJEZXN0
cm95ZWQuaD4KIAogbmFtZXNwYWNlIFdURiB7CiAKLURFRklORV9BTExPQ0FUT1JfV0lUSF9IRUFQ
X0lERU5USUZJRVIoU21hbGxQdHJTZXQpOworREVGSU5FX0FMTE9DQVRPUl9XSVRIX0hFQVBfSURF
TlRJRklFUihTbWFsbFNldCk7CiAKIH0gLy8gbmFtZXNwYWNlIFdURgpkaWZmIC0tZ2l0IGEvU291
cmNlL1dURi93dGYvU21hbGxQdHJTZXQuaCBiL1NvdXJjZS9XVEYvd3RmL1NtYWxsU2V0LmgKc2lt
aWxhcml0eSBpbmRleCA1MyUKcmVuYW1lIGZyb20gU291cmNlL1dURi93dGYvU21hbGxQdHJTZXQu
aApyZW5hbWUgdG8gU291cmNlL1dURi93dGYvU21hbGxTZXQuaAppbmRleCA0YzZlNDYxOTZkMjku
LjE1Y2Q0ZWZmNWU1NiAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYvU21hbGxQdHJTZXQuaAor
KysgYi9Tb3VyY2UvV1RGL3d0Zi9TbWFsbFNldC5oCkBAIC0zMiw2NSArMzIsNzEgQEAKIAogbmFt
ZXNwYWNlIFdURiB7CiAKLURFQ0xBUkVfQUxMT0NBVE9SX1dJVEhfSEVBUF9JREVOVElGSUVSKFNt
YWxsUHRyU2V0KTsKK0RFQ0xBUkVfQUxMT0NBVE9SX1dJVEhfSEVBUF9JREVOVElGSUVSKFNtYWxs
U2V0KTsKIAotdGVtcGxhdGU8dHlwZW5hbWUgUHRyVHlwZSwgdW5zaWduZWQgU21hbGxBcnJheVNp
emUgPSA4PgotY2xhc3MgU21hbGxQdHJTZXQgewordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5h
bWUgSGFzaCA9IFB0ckhhc2hCYXNlPFQsIGZhbHNlIC8qIGlzU21hcnRQdHIgKi8+LCB1bnNpZ25l
ZCBTbWFsbEFycmF5U2l6ZSA9IDg+CitjbGFzcyBTbWFsbFNldCB7CiAgICAgV1RGX01BS0VfRkFT
VF9BTExPQ0FURUQ7Ci0gICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoU21hbGxQdHJTZXQpOwotICAg
IHN0YXRpY19hc3NlcnQoc3RkOjppc190cml2aWFsbHlfZGVzdHJ1Y3RpYmxlPFB0clR5cGU+Ojp2
YWx1ZSwgIldlIGN1cnJlbnRseSBkb24ndCBzdXBwb3J0IG5vbi10cml2aWFsbHkgZGVzdHJ1Y3Rp
YmxlIHBvaW50ZXIgdHlwZXMuIik7Ci0gICAgc3RhdGljX2Fzc2VydChzaXplb2YoUHRyVHlwZSkg
PT0gc2l6ZW9mKHZvaWQqKSwgIk9ubHkgc3VwcG9ydCBwb2ludGVyIHNpemVkIHRoaW5ncy4iKTsK
KyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShTbWFsbFNldCk7CisgICAgc3RhdGljX2Fzc2VydChz
dGQ6OmlzX3RyaXZpYWxseV9kZXN0cnVjdGlibGU8VD46OnZhbHVlLCAiV2UgY3VycmVudGx5IGRv
bid0IHN1cHBvcnQgbm9uLXRyaXZpYWxseSBkZXN0cnVjdGlibGUgdHlwZXMuIik7CiAgICAgc3Rh
dGljX2Fzc2VydCghKFNtYWxsQXJyYXlTaXplICYgKFNtYWxsQXJyYXlTaXplIC0gMSkpLCAiSW5s
aW5lIHNpemUgbXVzdCBiZSBhIHBvd2VyIG9mIHR3by4iKTsKKyAgICBzdGF0aWNfYXNzZXJ0KHNp
emVvZihUKikgPD0gU21hbGxBcnJheVNpemUgKiBzaXplb2YoVCksICJUaGlzIGNsYXNzIGhhcyBu
b3QgYmVlbiB0ZXN0ZWQgZm9yIG1faW5saW5lLmJ1ZmZlciBsYXJnZXIgdGhhbiBtX2lubGluZS5z
bWFsbFN0b3JhZ2UiKTsKIAotcHVibGljOiAKLSAgICBTbWFsbFB0clNldCgpCitwdWJsaWM6Cisg
ICAgU21hbGxTZXQoKQorICAgICAgICA6IG1faW5saW5lKCkKICAgICB7CiAgICAgICAgIGluaXRp
YWxpemUoKTsKICAgICB9CiAKLSAgICAvLyBXZSB0YWtlIGNhcmUgdG8gaGF2ZSBTbWFsbFB0clNl
dCBoYXZlIHBhcnRpYWwgbW92ZSBzZW1hbnRpY3MgYWxsb3dhYmxlIHRocm91Z2gKKyAgICAvLyBX
ZSB0YWtlIGNhcmUgdG8gaGF2ZSBTbWFsbFNldCBoYXZlIHBhcnRpYWwgbW92ZSBzZW1hbnRpY3Mg
YWxsb3dhYmxlIHRocm91Z2gKICAgICAvLyBtZW1jcHkuIEl0J3MgcGFydGlhbCBtb3ZlIHNlbWFu
dGljcyBiZWNhdXNlIG91ciBkZXN0cnVjdG9yIHNob3VsZCBub3QgYmUgY2FsbGVkCiAgICAgLy8g
b24gdGhlIFNtYWxsUHRyT2JqZWN0IGluIHRoZSBvbGQgbWVtb3J5IHdlIHdlcmUgbW92ZWQgZnJv
bSAob3RoZXJ3aXNlLCB3ZSBtaWdodCBmcmVlIG1fYnVmZmVyIHR3aWNlKQogICAgIC8vIHVubGVz
cyB0aGF0IG9sZCBtZW1vcnkgaXMgcmVzZXQgdG8gYmUgaXNTbWFsbCgpLiBTZWUgbW92ZSBjb25z
dHJ1Y3RvciBiZWxvdy4KICAgICAvLyBUbyBtYWludGFpbiB0aGVzZSBzZW1hbnRpY3MsIHdlIGRl
dGVybWluZSBpZiB3ZSdyZSBzbWFsbCBieSBjaGVja2luZyBvdXIgc2l6ZQogICAgIC8vIGFuZCBu
b3Qgb3VyIG1fYnVmZmVyIHBvaW50ZXIuIEFuZCB3aGVuIHdlJ3JlIHNtYWxsLCB3ZSBkb24ndCBk
byBvcGVyYXRpb25zIG9uCiAgICAgLy8gbV9idWZmZXIsIGluc3RlYWQsIHdlIHBlcmZvcm0gb3Bl
cmF0aW9ucyBvbiBtX3NtYWxsU3RvcmFnZSBkaXJlY3RseS4gVGhlIHJlYXNvbiB3ZSB3YW50Ci0g
ICAgLy8gdGhlc2Ugc2VtYW50aWNzIGlzIHRoYXQgaXQncyBiZW5lZmljaWFsIHRvIGhhdmUgYSBW
ZWN0b3IgdGhhdCBjb250YWlucyBTbWFsbFB0clNldAotICAgIC8vIChvciBhbiBvYmplY3Qgd2l0
aCBTbWFsbFB0clNldCBhcyBhIGZpZWxkKSBiZSBhbGxvd2VkIHRvIHVzZSBtZW1jcHkgZm9yIGl0
cyBtb3ZlIG9wZXJhdGlvbi4KKyAgICAvLyB0aGVzZSBzZW1hbnRpY3MgaXMgdGhhdCBpdCdzIGJl
bmVmaWNpYWwgdG8gaGF2ZSBhIFZlY3RvciB0aGF0IGNvbnRhaW5zIFNtYWxsU2V0CisgICAgLy8g
KG9yIGFuIG9iamVjdCB3aXRoIFNtYWxsU2V0IGFzIGEgZmllbGQpIGJlIGFsbG93ZWQgdG8gdXNl
IG1lbWNweSBmb3IgaXRzIG1vdmUgb3BlcmF0aW9uLgogCi0gICAgU21hbGxQdHJTZXQoU21hbGxQ
dHJTZXQmJiBvdGhlcikKKyAgICBTbWFsbFNldChTbWFsbFNldCYmIG90aGVyKQogICAgIHsKLSAg
ICAgICAgbWVtY3B5KHRoaXMsICZvdGhlciwgc2l6ZW9mKFNtYWxsUHRyU2V0KSk7CisgICAgICAg
IG1lbWNweSh0aGlzLCAmb3RoZXIsIHNpemVvZihTbWFsbFNldCkpOwogICAgICAgICBvdGhlci5p
bml0aWFsaXplKCk7CiAgICAgfQogCi0gICAgU21hbGxQdHJTZXQmIG9wZXJhdG9yPShTbWFsbFB0
clNldCYmIG90aGVyKQorICAgIFNtYWxsU2V0JiBvcGVyYXRvcj0oU21hbGxTZXQmJiBvdGhlcikK
ICAgICB7Ci0gICAgICAgIHRoaXMtPn5TbWFsbFB0clNldCgpOwotICAgICAgICBuZXcgKHRoaXMp
IFNtYWxsUHRyU2V0KFdURk1vdmUob3RoZXIpKTsKKyAgICAgICAgdGhpcy0+flNtYWxsU2V0KCk7
CisgICAgICAgIG5ldyAodGhpcykgU21hbGxTZXQoV1RGTW92ZShvdGhlcikpOwogICAgICAgICBy
ZXR1cm4gKnRoaXM7CiAgICAgfQogCi0gICAgflNtYWxsUHRyU2V0KCkKKyAgICB+U21hbGxTZXQo
KQogICAgIHsKICAgICAgICAgaWYgKCFpc1NtYWxsKCkpCi0gICAgICAgICAgICBTbWFsbFB0clNl
dE1hbGxvYzo6ZnJlZShtX2J1ZmZlcik7CisgICAgICAgICAgICBTbWFsbFNldE1hbGxvYzo6ZnJl
ZShtX2lubGluZS5idWZmZXIpOwogICAgIH0KIAotICAgIGlubGluZSB2b2lkIGFkZChQdHJUeXBl
IHB0cikKKyAgICAvLyBXZSBjb3VsZCBlYXNpbHkgaW5jbHVkZSBhbiBpdGVyYXRvciBpbiB0aGlz
IHRvIGZ1bGx5IG1hdGNoIHRoZSBIYXNoU2V0IGludGVyZmFjZSwgYnV0IGN1cnJlbnRseSBub25l
IG9mIG91ciBjbGllbnRzIHJlcXVpcmUgaXQuCisgICAgc3RydWN0IEFkZFJlc3VsdCB7CisgICAg
ICAgIGJvb2wgaXNOZXdFbnRyeTsKKyAgICB9OworCisgICAgaW5saW5lIEFkZFJlc3VsdCBhZGQo
VCB2YWx1ZSkKICAgICB7Ci0gICAgICAgIEFTU0VSVChpc1ZhbGlkRW50cnkocHRyKSk7CisgICAg
ICAgIEFTU0VSVChpc1ZhbGlkRW50cnkodmFsdWUpKTsKIAogICAgICAgICBpZiAoaXNTbWFsbCgp
KSB7CiAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9zaXplOyBpKyspIHsK
LSAgICAgICAgICAgICAgICBpZiAobV9zbWFsbFN0b3JhZ2VbaV0gPT0gcHRyKQotICAgICAgICAg
ICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgaWYgKG1faW5saW5lLnNtYWxsU3Rv
cmFnZVtpXSA9PSB2YWx1ZSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHsgZmFsc2UgfTsK
ICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgaWYgKG1fc2l6ZSA8IFNtYWxsQXJyYXlTaXpl
KSB7Ci0gICAgICAgICAgICAgICAgbV9zbWFsbFN0b3JhZ2VbbV9zaXplXSA9IHB0cjsKKyAgICAg
ICAgICAgICAgICBtX2lubGluZS5zbWFsbFN0b3JhZ2VbbV9zaXplXSA9IHZhbHVlOwogICAgICAg
ICAgICAgICAgICsrbV9zaXplOwotICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAg
ICAgICByZXR1cm4geyB0cnVlIH07CiAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIGdyb3co
c3RkOjptYXgoNjR1LCBTbWFsbEFycmF5U2l6ZSAqIDIpKTsKQEAgLTEwMywyNiArMTA5LDI5IEBA
IHB1YmxpYzoKICAgICAgICAgICAgIEFTU0VSVCghKG1fY2FwYWNpdHkgJiAobV9jYXBhY2l0eSAt
IDEpKSk7CiAgICAgICAgIH0KIAotICAgICAgICB2b2lkKiogYnVja2V0ID0gdGhpcy0+YnVja2V0
KHB0cik7Ci0gICAgICAgIGlmICgqYnVja2V0ICE9IHB0cikgewotICAgICAgICAgICAgKmJ1Y2tl
dCA9IHB0cjsKKyAgICAgICAgVCogYnVja2V0ID0gdGhpcy0+YnVja2V0KHZhbHVlKTsKKyAgICAg
ICAgaWYgKCpidWNrZXQgIT0gdmFsdWUpIHsKKyAgICAgICAgICAgICpidWNrZXQgPSB2YWx1ZTsK
ICAgICAgICAgICAgICsrbV9zaXplOworICAgICAgICAgICAgcmV0dXJuIHsgdHJ1ZSB9OwogICAg
ICAgICB9CisgICAgICAgIHJldHVybiB7IGZhbHNlIH07CiAgICAgfQogCi0gICAgaW5saW5lIGJv
b2wgY29udGFpbnMoUHRyVHlwZSBwdHIpIGNvbnN0CisgICAgaW5saW5lIGJvb2wgY29udGFpbnMo
VCB2YWx1ZSkgY29uc3QKICAgICB7Ci0gICAgICAgIEFTU0VSVChpc1ZhbGlkRW50cnkocHRyKSk7
CisgICAgICAgIEFTU0VSVChpc1ZhbGlkRW50cnkodmFsdWUpKTsKICAgICAgICAgaWYgKGlzU21h
bGwoKSkgewotICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fc2l6ZTsgaSsr
KSB7IC8vIFdlIG9ubHkgbmVlZCB0byBzZWFyY2ggdXAgdG8gbV9zaXplIGJlY2F1c2Ugd2Ugc3Rv
cmUgdGhpbmdzIGxpbmVhcmx5IGluc2lkZSBtX3NtYWxsU3RvcmFnZS4KLSAgICAgICAgICAgICAg
ICBpZiAobV9zbWFsbFN0b3JhZ2VbaV0gPT0gcHRyKQorICAgICAgICAgICAgLy8gV2Ugb25seSBu
ZWVkIHRvIHNlYXJjaCB1cCB0byBtX3NpemUgYmVjYXVzZSB3ZSBzdG9yZSB0aGluZ3MgbGluZWFy
bHkgaW5zaWRlIG1fc21hbGxTdG9yYWdlLgorICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0g
MDsgaSA8IG1fc2l6ZTsgaSsrKSB7CisgICAgICAgICAgICAgICAgaWYgKG1faW5saW5lLnNtYWxs
U3RvcmFnZVtpXSA9PSB2YWx1ZSkKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAg
ICAgICAgICAgICB9CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIH0KIAotICAg
ICAgICB2b2lkKiogYnVja2V0ID0gdGhpcy0+YnVja2V0KHB0cik7Ci0gICAgICAgIHJldHVybiAq
YnVja2V0ID09IHB0cjsKKyAgICAgICAgVCogYnVja2V0ID0gdGhpcy0+YnVja2V0KHZhbHVlKTsK
KyAgICAgICAgcmV0dXJuICpidWNrZXQgPT0gdmFsdWU7CiAgICAgfQogCiAgICAgY2xhc3MgaXRl
cmF0b3IgewpAQCAtMTM3LDE1ICsxNDYsMTUgQEAgcHVibGljOgogICAgICAgICAgICAgcmV0dXJu
ICp0aGlzOwogICAgICAgICB9CiAgICAgICAgIAotICAgICAgICBQdHJUeXBlIG9wZXJhdG9yKigp
IGNvbnN0IHsgQVNTRVJUKG1faW5kZXggPCBtX2NhcGFjaXR5KTsgcmV0dXJuIHN0YXRpY19jYXN0
PFB0clR5cGU+KG1fYnVmZmVyW21faW5kZXhdKTsgfQorICAgICAgICBUIG9wZXJhdG9yKigpIGNv
bnN0IHsgQVNTRVJUKG1faW5kZXggPCBtX2NhcGFjaXR5KTsgcmV0dXJuIHN0YXRpY19jYXN0PFQ+
KG1fYnVmZmVyW21faW5kZXhdKTsgfQogICAgICAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgaXRl
cmF0b3ImIG90aGVyKSBjb25zdCB7IEFTU0VSVChtX2J1ZmZlciA9PSBvdGhlci5tX2J1ZmZlcik7
IHJldHVybiBtX2luZGV4ID09IG90aGVyLm1faW5kZXg7IH0KICAgICAgICAgYm9vbCBvcGVyYXRv
ciE9KGNvbnN0IGl0ZXJhdG9yJiBvdGhlcikgY29uc3QgeyBBU1NFUlQobV9idWZmZXIgPT0gb3Ro
ZXIubV9idWZmZXIpOyByZXR1cm4gISgqdGhpcyA9PSBvdGhlcik7IH0KIAogICAgIHByaXZhdGU6
Ci0gICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIFUsIHVuc2lnbmVkIFM+IGZyaWVuZCBjbGFzcyBX
VEY6OlNtYWxsUHRyU2V0OworICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBVLCB0eXBlbmFtZSBI
LCB1bnNpZ25lZCBTPiBmcmllbmQgY2xhc3MgV1RGOjpTbWFsbFNldDsKICAgICAgICAgdW5zaWdu
ZWQgbV9pbmRleDsKICAgICAgICAgdW5zaWduZWQgbV9jYXBhY2l0eTsKLSAgICAgICAgdm9pZCoq
IG1fYnVmZmVyOworICAgICAgICBUKiBtX2J1ZmZlcjsKICAgICB9OwogCiAgICAgaXRlcmF0b3Ig
YmVnaW4oKSBjb25zdApAQCAtMTU0LDkgKzE2Myw5IEBAIHB1YmxpYzoKICAgICAgICAgaXQubV9p
bmRleCA9IHN0ZDo6bnVtZXJpY19saW1pdHM8dW5zaWduZWQ+OjptYXgoKTsKICAgICAgICAgaXQu
bV9jYXBhY2l0eSA9IG1fY2FwYWNpdHk7CiAgICAgICAgIGlmIChpc1NtYWxsKCkpCi0gICAgICAg
ICAgICBpdC5tX2J1ZmZlciA9IGNvbnN0X2Nhc3Q8dm9pZCoqPihtX3NtYWxsU3RvcmFnZSk7Cisg
ICAgICAgICAgICBpdC5tX2J1ZmZlciA9IGNvbnN0X2Nhc3Q8VCo+KG1faW5saW5lLnNtYWxsU3Rv
cmFnZSk7CiAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIGl0Lm1fYnVmZmVyID0gbV9idWZmZXI7
CisgICAgICAgICAgICBpdC5tX2J1ZmZlciA9IG1faW5saW5lLmJ1ZmZlcjsKIAogICAgICAgICAr
K2l0OwogCkBAIC0xNjksMjQgKzE3OCwyOCBAQCBwdWJsaWM6CiAgICAgICAgIGl0Lm1faW5kZXgg
PSBtX2NhcGFjaXR5OwogICAgICAgICBpdC5tX2NhcGFjaXR5ID0gbV9jYXBhY2l0eTsKICAgICAg
ICAgaWYgKGlzU21hbGwoKSkKLSAgICAgICAgICAgIGl0Lm1fYnVmZmVyID0gY29uc3RfY2FzdDx2
b2lkKio+KG1fc21hbGxTdG9yYWdlKTsKKyAgICAgICAgICAgIGl0Lm1fYnVmZmVyID0gY29uc3Rf
Y2FzdDxUKj4obV9pbmxpbmUuc21hbGxTdG9yYWdlKTsKICAgICAgICAgZWxzZQotICAgICAgICAg
ICAgaXQubV9idWZmZXIgPSBtX2J1ZmZlcjsKKyAgICAgICAgICAgIGl0Lm1fYnVmZmVyID0gbV9p
bmxpbmUuYnVmZmVyOwogCiAgICAgICAgIHJldHVybiBpdDsKICAgICB9CiAKICAgICBpbmxpbmUg
dW5zaWduZWQgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fc2l6ZTsgfQogCisgICAgaW5saW5lIGJv
b2wgaXNFbXB0eSgpIGNvbnN0IHsgcmV0dXJuICFzaXplKCk7IH0KKwogcHJpdmF0ZToKLSAgICBj
b25zdGV4cHIgc3RhdGljIHZvaWQqIGVtcHR5VmFsdWUoKQorICAgIGNvbnN0ZXhwciBzdGF0aWMg
VCBlbXB0eVZhbHVlKCkKICAgICB7Ci0gICAgICAgIHJldHVybiBiaXR3aXNlX2Nhc3Q8dm9pZCo+
KHN0ZDo6bnVtZXJpY19saW1pdHM8dWludHB0cl90Pjo6bWF4KCkpOworICAgICAgICBpZiBjb25z
dGV4cHIgKHN0ZDo6aXNfcG9pbnRlcjxUPjo6dmFsdWUpCisgICAgICAgICAgICByZXR1cm4gc3Rh
dGljX2Nhc3Q8VD4oYml0d2lzZV9jYXN0PHZvaWQqPihzdGQ6Om51bWVyaWNfbGltaXRzPHVpbnRw
dHJfdD46Om1heCgpKSk7CisgICAgICAgIHJldHVybiBzdGQ6Om51bWVyaWNfbGltaXRzPFQ+Ojpt
YXgoKTsKICAgICB9CiAKLSAgICBib29sIGlzVmFsaWRFbnRyeShjb25zdCBQdHJUeXBlIHB0cikg
Y29uc3QKKyAgICBib29sIGlzVmFsaWRFbnRyeShjb25zdCBUIHZhbHVlKSBjb25zdAogICAgIHsK
LSAgICAgICAgcmV0dXJuIHB0ciAhPSBlbXB0eVZhbHVlKCk7CisgICAgICAgIHJldHVybiB2YWx1
ZSAhPSBlbXB0eVZhbHVlKCk7CiAgICAgfQogCiAgICAgaW5saW5lIGJvb2wgaXNTbWFsbCgpIGNv
bnN0CkBAIC0xOTcsNDMgKzIxMCw2NCBAQCBwcml2YXRlOgogICAgIGlubGluZSB2b2lkIGluaXRp
YWxpemUoKQogICAgIHsKICAgICAgICAgbV9zaXplID0gMDsKLSAgICAgICAgbV9idWZmZXIgPSBu
dWxscHRyOwogICAgICAgICBtX2NhcGFjaXR5ID0gU21hbGxBcnJheVNpemU7Ci0gICAgICAgIG1l
bXNldChtX3NtYWxsU3RvcmFnZSwgLTEsIHNpemVvZih2b2lkKikgKiBTbWFsbEFycmF5U2l6ZSk7
CisgICAgICAgIG1lbXNldChtX2lubGluZS5zbWFsbFN0b3JhZ2UsIC0xLCBzaXplb2YoVCkgKiBT
bWFsbEFycmF5U2l6ZSk7CiAgICAgICAgIEFTU0VSVChpc1NtYWxsKCkpOwogICAgIH0KIAogICAg
IGlubGluZSB2b2lkIGdyb3codW5zaWduZWQgc2l6ZSkKICAgICB7Ci0gICAgICAgIEFTU0VSVChz
dGF0aWNfY2FzdDxpbnQzMl90PihiaXR3aXNlX2Nhc3Q8aW50cHRyX3Q+KGVtcHR5VmFsdWUoKSkp
ID09IC0xKTsKKyAgICAgICAgLy8gV2UgbWVtc2V0IHRoZSBuZXcgYnVmZmVyIHdpdGggLTEsIHNv
IGZvciBjb25zaXN0ZW5jeSBlbXB0eVZhbHVlKCkgbXVzdCByZXR1cm4gc29tZXRoaW5nIHdoaWNo
IGlzIGFsbCAxcy4KKyNpZiAhZGVmaW5lZChOREVCVUcpCisgICAgICAgIGlmIGNvbnN0ZXhwciAo
c3RkOjppc19wb2ludGVyPFQ+Ojp2YWx1ZSkKKyAgICAgICAgICAgIEFTU0VSVChiaXR3aXNlX2Nh
c3Q8aW50cHRyX3Q+KGVtcHR5VmFsdWUoKSkgPT0gLTFsbCk7CisgICAgICAgIGVsc2UgaWYgY29u
c3RleHByIChzaXplb2YoVCkgPT0gOCkKKyAgICAgICAgICAgIEFTU0VSVChiaXR3aXNlX2Nhc3Q8
aW50NjRfdD4oZW1wdHlWYWx1ZSgpKSA9PSAtMWxsKTsKKyAgICAgICAgZWxzZSBpZiBjb25zdGV4
cHIgKHNpemVvZihUKSA9PSA0KQorICAgICAgICAgICAgQVNTRVJUKGJpdHdpc2VfY2FzdDxpbnQz
Ml90PihlbXB0eVZhbHVlKCkpID09IC0xKTsKKyAgICAgICAgZWxzZSBpZiBjb25zdGV4cHIgKHNp
emVvZihUKSA9PSAyKQorICAgICAgICAgICAgQVNTRVJUKGJpdHdpc2VfY2FzdDxpbnQxNl90Pihl
bXB0eVZhbHVlKCkpID09IC0xKTsKKyAgICAgICAgZWxzZSBpZiBjb25zdGV4cHIgKHNpemVvZihU
KSA9PSAxKQorICAgICAgICAgICAgQVNTRVJUKGJpdHdpc2VfY2FzdDxpbnQ4X3Q+KGVtcHR5VmFs
dWUoKSkgPT0gLTEpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9O
T1RfUkVBQ0hFRCgpOworI2VuZGlmCiAKLSAgICAgICAgc2l6ZV90IGFsbG9jYXRpb25TaXplID0g
c2l6ZW9mKHZvaWQqKSAqIHNpemU7CisgICAgICAgIHNpemVfdCBhbGxvY2F0aW9uU2l6ZSA9IHNp
emVvZihUKSAqIHNpemU7CiAgICAgICAgIGJvb2wgd2FzU21hbGwgPSBpc1NtYWxsKCk7Ci0gICAg
ICAgIHZvaWQqKiBvbGRCdWZmZXIgPSB3YXNTbWFsbCA/IG1fc21hbGxTdG9yYWdlIDogbV9idWZm
ZXI7CisgICAgICAgIFQqIG9sZEJ1ZmZlciA9IHdhc1NtYWxsID8gbV9pbmxpbmUuc21hbGxTdG9y
YWdlIDogbV9pbmxpbmUuYnVmZmVyOwogICAgICAgICB1bnNpZ25lZCBvbGRDYXBhY2l0eSA9IG1f
Y2FwYWNpdHk7Ci0gICAgICAgIG1fYnVmZmVyID0gc3RhdGljX2Nhc3Q8dm9pZCoqPihTbWFsbFB0
clNldE1hbGxvYzo6bWFsbG9jKGFsbG9jYXRpb25TaXplKSk7Ci0gICAgICAgIG1lbXNldChtX2J1
ZmZlciwgLTEsIGFsbG9jYXRpb25TaXplKTsKKyAgICAgICAgVCogbmV3QnVmZmVyID0gc3RhdGlj
X2Nhc3Q8VCo+KFNtYWxsU2V0TWFsbG9jOjptYWxsb2MoYWxsb2NhdGlvblNpemUpKTsKKyAgICAg
ICAgbWVtc2V0KG5ld0J1ZmZlciwgLTEsIGFsbG9jYXRpb25TaXplKTsKICAgICAgICAgbV9jYXBh
Y2l0eSA9IHNpemU7CiAKICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG9sZENhcGFj
aXR5OyBpKyspIHsKICAgICAgICAgICAgIGlmIChvbGRCdWZmZXJbaV0gIT0gZW1wdHlWYWx1ZSgp
KSB7Ci0gICAgICAgICAgICAgICAgdm9pZCoqIHB0ciA9IHRoaXMtPmJ1Y2tldChzdGF0aWNfY2Fz
dDxQdHJUeXBlPihvbGRCdWZmZXJbaV0pKTsKKyAgICAgICAgICAgICAgICBUKiBwdHIgPSBidWNr
ZXRJbkJ1ZmZlcihuZXdCdWZmZXIsIHN0YXRpY19jYXN0PFQ+KG9sZEJ1ZmZlcltpXSkpOwogICAg
ICAgICAgICAgICAgICpwdHIgPSBvbGRCdWZmZXJbaV07CiAgICAgICAgICAgICB9CiAgICAgICAg
IH0KIAogICAgICAgICBpZiAoIXdhc1NtYWxsKQotICAgICAgICAgICAgU21hbGxQdHJTZXRNYWxs
b2M6OmZyZWUob2xkQnVmZmVyKTsKKyAgICAgICAgICAgIFNtYWxsU2V0TWFsbG9jOjpmcmVlKG9s
ZEJ1ZmZlcik7CisKKyAgICAgICAgbV9pbmxpbmUuYnVmZmVyID0gbmV3QnVmZmVyOwogICAgIH0K
IAogCi0gICAgaW5saW5lIHZvaWQqKiBidWNrZXQoUHRyVHlwZSB0YXJnZXQpIGNvbnN0CisgICAg
aW5saW5lIFQqIGJ1Y2tldChUIHRhcmdldCkgY29uc3QKKyAgICB7CisgICAgICAgIEFTU0VSVCgh
aXNTbWFsbCgpKTsKKyAgICAgICAgcmV0dXJuIGJ1Y2tldEluQnVmZmVyKG1faW5saW5lLmJ1ZmZl
ciwgdGFyZ2V0KTsKKyAgICB9CisKKyAgICBpbmxpbmUgVCogYnVja2V0SW5CdWZmZXIoVCogYnVm
ZmVyLCBUIHRhcmdldCkgY29uc3QKICAgICB7CiAgICAgICAgIEFTU0VSVCghKG1fY2FwYWNpdHkg
JiAobV9jYXBhY2l0eSAtIDEpKSk7Ci0gICAgICAgIHVuc2lnbmVkIGJ1Y2tldCA9IFB0ckhhc2hC
YXNlPFB0clR5cGUsIGZhbHNlIC8qIGlzU21hcnRQdHIgKi8+OjpoYXNoKHRhcmdldCkgJiAobV9j
YXBhY2l0eSAtIDEpOworICAgICAgICB1bnNpZ25lZCBidWNrZXQgPSBIYXNoOjpoYXNoKHRhcmdl
dCkgJiAobV9jYXBhY2l0eSAtIDEpOwogICAgICAgICB1bnNpZ25lZCBpbmRleCA9IDA7CiAgICAg
ICAgIHdoaWxlICh0cnVlKSB7Ci0gICAgICAgICAgICB2b2lkKiogcHRyID0gbV9idWZmZXIgKyBi
dWNrZXQ7CisgICAgICAgICAgICBUKiBwdHIgPSBidWZmZXIgKyBidWNrZXQ7CiAgICAgICAgICAg
ICBpZiAoKnB0ciA9PSBlbXB0eVZhbHVlKCkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIHB0cjsK
ICAgICAgICAgICAgIGlmICgqcHRyID09IHRhcmdldCkKQEAgLTI0NSwxMCArMjc5LDEzIEBAIHBy
aXZhdGU6CiAKICAgICB1bnNpZ25lZCBtX3NpemU7CiAgICAgdW5zaWduZWQgbV9jYXBhY2l0eTsK
LSAgICB2b2lkKiogbV9idWZmZXI7Ci0gICAgdm9pZCogbV9zbWFsbFN0b3JhZ2VbU21hbGxBcnJh
eVNpemVdOworICAgIHVuaW9uIFUgeworICAgICAgICBUKiBidWZmZXI7CisgICAgICAgIFQgc21h
bGxTdG9yYWdlW1NtYWxsQXJyYXlTaXplXTsKKyAgICAgICAgVSgpIHsgfTsKKyAgICB9IG1faW5s
aW5lOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV1RGCiAKLXVzaW5nIFdURjo6U21hbGxQdHJTZXQ7
Cit1c2luZyBXVEY6OlNtYWxsU2V0Owo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>428844</attachid>
            <date>2021-05-17 10:26:36 -0700</date>
            <delta_ts>2021-05-17 11:29:00 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>patchRegisterAllocator</filename>
            <type>text/plain</type>
            <size>86195</size>
            <attacher name="Robin Morisset">rmorisset</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvQ2hhbmdlTG9nCmluZGV4IGY4MzBjYTkzZDA0OC4uNGQ4NzcyZTVhYjQxIDEw
MDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxMDEgQEAKKzIwMjEtMDUtMTcgIFJv
YmluIE1vcmlzc2V0ICA8cm1vcmlzc2V0QGFwcGxlLmNvbT4KKworICAgICAgICBNYWtlIEFpckFs
bG9jYXRlUmVnaXN0ZXJzQnlHcmFwaENvbG9yaW5nIHVzZSBsZXNzIG1lbW9yeQorICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjI1ODQ4CisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTKS4KKworICAgICAgICBXZeKAmXZlIGhhZCBzb21lIGpl
dHNhbSBwcm9ibGVtcyBjYXVzZWQgYnkgdGhlIG1haW4gQWlyIHJlZ2lzdGVyIGFsbG9jYXRvciwg
d2hpY2ggY2F1c2VkIHVzIHRvIGxvd2VyIE9wdGlvbnM6Om1heGltdW1UbXBzRm9yR3JhcGhDb2xv
cmluZy4KKyAgICAgICAgSGVuY2UgdGhpcyBwYXRjaCB0cmllcyB0byBpbXByb3ZlIHRoZSBtZW1v
cnkgdXNhZ2Ugb2YgdGhlIGFsbG9jYXRvci4gSXQgaW5jbHVkZXMgc2V2ZXJhbCBjaGFuZ2VzOgor
ICAgICAgICAtIENoYW5nZSB0aGUgZGF0YXN0cnVjdHVyZSB1c2VkIGZvciByZXByZXNlbnRpbmcg
dGhlIGludGVyZmVyZW5jZSBncmFwaC4gQmVmb3JlIGl0IHdhcyBlZmZlY3RpdmVseSBhIEhhc2hT
ZXQ8c3RkOjpwYWlyPHVpbnQxNl90LCB1aW50MTZfdD4uIE5vdywgaXQgaXMgZWl0aGVyIGEgQml0
dmVjdG9yIChmb3IgbiA8IDQwMCBmb3Igbm93LCBjYW4gYmUgdHdlYWtlZCBlYXNpbHkpLCBvciBh
IFZlY3RvcjxTbWFsbFNldDx1aW50MTZfdD4+IG90aGVyd2lzZS4gVGhpcyBuZWFybHkgaGFsdmVz
IGl0cyBtZW1vcnkgY29uc3VtcHRpb24gaW4gdGhlIGNhc2UgdGhhdCB0aGUgZ3JhcGggaXMgZGVu
c2UgKHdoaWNoIGlzIHdoZW4gdGhlIG92ZXJoZWFkIG9mIHRoZSBTbWFsbFNldHMgaXMgbWluaW1p
emVkLCBhbmQgd2hlbiB0aGUgcmVnaXN0ZXIgYWxsb2NhdG9yIHVzZXMgdGhlIG1vc3QgbWVtb3J5
KS4gSW4gb3JkZXIgdG8gZWFzaWx5IHRlc3QgdGhpcyBjaGFuZ2UsIGFuZCBhbnkgZnVydGhlciBj
aGFuZ2UgdG8gdGhpcyBkYXRhc3RydWN0dXJlLCB0aGUgb2xkIGFwcHJvYWNoIHdhcyBwcmVzZXJ2
ZWQgYXMgSW50ZXJmZXJlbmNlSGFzaFNldCwgYW5kIGEgdGVtcGxhdGUgdG8gcnVuIHR3byBzdWNo
IGRhdGFzdHJ1Y3R1cmVzIGluIHBhcmFsbGVsLCBjaGVja2luZyB0aGVpciBlcXVpdmFsZW5jZSB3
YXMgYWRkZWQ6IEluc3RydW1lbnRlZEludGVyZmVyZW5jZUdyYXBoCisgICAgICAgIC0gVGhlcmUg
d2FzIGFscmVhZHkgc29tZSB0ZW1wbGF0ZSBwYXJhbWV0ZXIgdG8gY2hhbmdlIHRoZSBzaXplIG9m
IHRoZSB0bXAgaW5kaWNlcyBmcm9tIHVuc2lnbmVkIHRvIHVpbnQxNl90Li4gYnV0IHRoZSBjb2Rl
IGZhaWxlZCB0byBjb21waWxlIHVubGVzcyBpdCB3YXMgdW5zaWduZWQuIEkgZml4ZWQgdGhpcywg
bWFkZSBtb3JlIGNvbnNpc3RlbnQgdXNlIG9mIGl0LCBhbmQgc3dpdGNoZWQgdG8gdWludDE2X3Qg
YnkgZGVmYXVsdCAoc2luY2UgT3B0aW9uczo6bWF4aW11bVRtcHNGb3JHcmFwaENvbG9yaW5nIGlz
IDI1aywgd2UgYXJlIGZhciBmcm9tIGV4aGF1c3RpbmcgdWludDE2X3QpLiBUaGlzIGhhbHZlZCB0
aGUgbWVtb3J5IHVzYWdlIG9mIHZhcmlvdXMgb3RoZXIgZGF0YXN0cnVjdHVyZXMgaW4gdGhlIHJl
Z2lzdGVyIGFsbG9jYXRvcgorICAgICAgICAtIHVuc3BpbGxhYmxlVG1wcyB3YXMgYSBIYXNoU2V0
PHVuc2lnbmVkPi4gU2luY2UgaXQgaXMgb2Z0ZW4gcXVpdGUgZGVuc2UgKG9mdGVuIGFyb3VuZCAy
MCUgb24gSmV0U3RyZWFtMiksIEkgcmVwbGFjZWQgaXQgYnkgYSBCaXR2ZWN0b3IgaW5zdGVhZAor
ICAgICAgICAtIG1fYmlhc2VzIHdhcyBhIEhhc2hNYXA8SW5kZXhUeXBlLCBIYXNoU2V0PEluZGV4
VHlwZT4+LiBTaW5jZSBpdCBpcyBleHRyZW1lbHkgcmFyZSB0aGF0IHRoZSBzZXRzIGhhdmUgbW9y
ZSB0aGFuIDggZWxlbWVudHMgKGZyb20gbG9va2luZyBhdCBzb21lIGluc3RydW1lbnRlZCBydW4g
b2YgSmV0U3RyZWFtMiksIEkgcmVwbGFjZWQgaXQgYnkgSGFzaE1hcDxJbmRleFR5cGUsIFNtYWxs
U2V0PEluZGV4VHlwZT4+LiBUaGlzIG5vdCBvbmx5IHNpZ25pZmljYW50bHkgcmVkdWNlcyBtZW1v
cnksIGJ1dCBuZWFybHkgaGFsdmVzIHRoZSB0aW1lIHNwZW50IGluIGFzc2lnbkNvbG9ycyhhcm91
bmQgODBtcyAtPiA0MG1zIGluIEpldFN0cmVhbSAyKQorICAgICAgICAtIFVzZUNvdW50cyB3YXMg
bmVlZGxlc3NseSBnZW5lcmFsOiBpdCBpcyBvbmx5IHVzZWQgYnkgdGhlIHJlZ2lzdGVyIGFsbG9j
YXRvciAoYWxsIG90aGVyIHJlZmVyZW5jZXMgdG8gVXNlQ291bnRzIHJlZmVyIHRvIHRoZSBjb21w
bGV0ZWx5IGRpZmZlcmVudCBCMzo6VXNlQ291bnRzKSwgc28gdGhlcmUgaXMgbm8gcG9pbnQgaW4g
aXQgY29tcHV0aW5nLCBhbmQgdGhlbiBzdG9yaW5nIGxvdHMgb2YgaXJyZWxldmFudCBkYXRhLiBB
IGZsb2F0IGlzIGFsc28gbW9yZSB0aGFuIGVub3VnaCBwcmVjaXNpb24gKGVzcGVjaWFsbHkgc2lu
Y2UgaXQgaXMgcHJldHR5IG11Y2ggYWx3YXlzIDEsIDEwLCAxMDAsIG9yIDEwMDAgaW4gcHJhY3Rp
Y2XigKYpLiBBbHNvLCBzaW5jZSB3ZSBvbmx5IG5lZWQgaXQgaW5kZXhlZCBieSBUbXBzLCB3ZSBj
YW4gdXNlIGEgVmVjdG9yIHdpdGggQWJzb2x1dGVUbXBNYXBwZXIgaW5zdGVhZCBvZiBpdHMgSGFz
aE1hcC4gVGhlc2UgY2hhbmdlcyBhcmUgbm90IGp1c3QgbWVtb3J5IHNhdmluZ3MsIHRoZXkgYWxz
byBtYWtlIHNlbGVjdFNwaWxsIHdheSBmYXN0ZXIgKDU3MG1zIC0+IDI1MG1zIG9uIG15IG1hY2hp
bmUgb24gSmV0U3RyZWFtMikKKyAgICAgICAgLSBXaGlsZSBJIHdhcyBhdCBpdCwgSSBkaWQgYSBj
b3VwbGUgb2Ygb3RoZXIgdHdlYWtzIHRvIHRoZSBsb2dpYyBvZiBzZWxlY3RTcGlsbC4gSW4gcGFy
dGljdWxhciwgaW5zdGVhZCBvZiBoYXZpbmcgdG8gY2hlY2sgZm9yIGlzRmFzdFRtcCBldmVyeSB0
aW1lLCBJIGp1c3QgcHV0IHRoZSBmYXN0IHRtcHMgZGlyZWN0bHkgaW4gdW5zcGlsbGFibGVUbXBz
LCB3aGljaCBwcmV2ZW50cyB0aGVtIGZyb20gZ2V0dGluZyBhZGRlZCB0byBtX3NwaWxsV29ya2xp
c3QgaW4gdGhlIGZpcnN0IHBsYWNlLiBUaGlzICsgYSBiaXQgb2YgY2xlYW4tdXAgKGZvciBleGFt
cGxlIHB1dHRpbmcgYW4gZWFybHkgZXhpdCBpbnN0ZWFkIG9mIHNldHRpbmcgc2NvcmUgdG8gaW5m
aW5pdHkgaW4gdGhlIGNhc2Ugb2YgZGVhZCB0bXBzKSByZXN1bHRlZCBpbiBhIGZ1cnRoZXIgcGVy
ZiB3aW4gKHRvIHJvdWdobHkgMjAwbXMgc3BlbnQgaW4gc2VsZWN0U3BpbGwoKSBvbiBKZXRTdHJl
YW0yKQorCisgICAgICAgIEFsbCB0b2dldGhlciwgdGhpcyBwYXRjaCByZWR1Y2VzIHRoZSB0aW1l
IHNwZW50IGluIHRoZSByZWdpc3RlciBhbGxvY2F0b3IgYnkgcm91Z2hseSAxNSB0byAyMCUgaW4g
SmV0U3RyZWFtMiAodGVzdGVkIGJvdGggd2l0aCB0aGUgQnJpZ2dzIGFuZCB0aGUgSVJDIGFsbG9j
YXRvcnMgb24gbXkgTUJQIDIwMTkpLgorCisgICAgICAgIFNvIGZhciBJIGhhdmUgcGVyZm9ybWFu
Y2UgbnVtYmVycyBmb3IgdGhpcyBwYXRjaCBvbiBib3RoIGFuIGlQaG9uZSA3IGFuZCBhbiBpUGFk
IFBybyAyIChJJ2xsIHB1dCB0aGUgbnVtYmVycyBvbiBNYWMgaW4gdGhlIGJ1Z3ppbGxhIGlzc3Vl
IG9uY2UgdGhlIHBlcmZvcm1hbmNlIGJvdCBkZWlnbnMgdG8gZ2V0IHRvIGl0KS4KKyAgICAgICAg
T24gaVBob25lIDcsIHdlIHNlZSBhIDAuOTQlIGltcHJvdmVtZW50IHRvIHRoZSBKSVQgdGVzdHMg
c2VjdGlvbiBvZiBSQU1pZmljYXRpb24gKHA8MC4wMiksIHdpdGggdGhlIGZvbGxvd2luZyBzaWdu
aWZpY2FudCBzdWItcmVzdWx0czoKKyAgICAgICAgLSAxLjgyJSBiZXR0ZXIgb24gQWlyIChwPDAu
MDIpCisgICAgICAgIC0gMS4xOCUgYmV0dGVyIG9uIEJhc2ljIChwPDAuMDIpCisgICAgICAgIC0g
MS41OSUgYmV0dGVyIG9uIEJveDJEIChwPDAuMDIpCisgICAgICAgIC0gMC40MyUgYmV0dGVyIG9u
IEhhc2hTZXQtd2FzbSAocDwwLjA1KQorICAgICAgICAtIDAuNTIlIGJldHRlciBvbiBNTCAocDww
LjA1KQorICAgICAgICAtIDkuMzklIGJldHRlciBvbiBPZmZsaW5lQXNzZW1ibGVyIChwPDAuMDIp
CisgICAgICAgIC0gMi4xMyUgYmV0dGVyIG9uIGNyeXB0by1hZXMtU1AgKHA8MC4wMikKKyAgICAg
ICAgLSA1LjI5JSBiZXR0ZXIgb24gY3J5cHRvLW1kNS1TUCAocDwwLjAyKQorICAgICAgICAtIDEu
MDAlIGJldHRlciBvbiBjcnlwdG8tc2hhMS1TUCAocDwwLjA1KQorICAgICAgICAtIDAuOTclIGJl
dHRlciBvbiBkYXRlLWZvcm1hdC10b2Z0ZS1TUCAocDwwLjAyKQorICAgICAgICAtIDAuNzglIGJl
dHRlciBvbiBkYXRlLWZvcm1hdC14cGFyYi1TUCAocDwwLjAyKQorICAgICAgICAtIDEuNTUlIGJl
dHRlciBvbiBkZWx0YS1ibHVlIChwPDAuMDIpCisgICAgICAgIC0gMC4zNyUgYmV0dGVyIG9uIGdh
dXNzaWFuLWJsdXIgKHA8MC4wMikKKyAgICAgICAgLSA0LjExJSBiZXR0ZXIgb24gZ2NjLWxvb3Bz
LXdhc20gKHA8MC4wMikKKyAgICAgICAgLSA1LjE0JSBiZXR0ZXIgb24gcXVpY2tzb3J0LXdhc20g
KHA8MC4wMikKKyAgICAgICAgLSAyLjc0JSBiZXR0ZXIgb24gcmF5dHJhY2UgKHA8MC4wMikKKyAg
ICAgICAgLSA0LjUyJSBiZXR0ZXIgb24gcmVnZXhwIChwPDAuMDIpCisgICAgICAgIC0gMS4wMiUg
YmV0dGVyIG9uIGNyeXB0by1zdGFuZm9yZC1hZXMgKHA8MC4wMikKKyAgICAgICAgLSAxMC40MCUg
YmV0dGVyIG9uIHRzZi13YXNtIChwPDAuMDUpCisgICAgICAgIEFzIGV4cGVjdGVkLCB0aGVyZSBp
cyBubyBzdGF0aXN0aWNhbGx5IHNpZ25pZmljYW50IGVmZmVjdCBvbiB0aGUgbm9uLUpJVCBzZWN0
aW9ucyBvZiBSQU1pZmljYXRpb24uCisgICAgICAgIEFub3RoZXIgbG9naWNhbCBhbmQgZXhwZWN0
ZWQgcHJvcGVydHkgb2YgdGhlc2UgcmVzdWx0cyBpcyB0aGF0IHRoZSBsYXJnZXN0IHdpbnMgYXJl
IHRvIHBlYWsgbWVtb3J5IGFuZCBub3QgdG8gZW5kIG1lbW9yeSAoZS5nLiA4LjYzJSBmb3IgcGVh
ayByZWdleHAsIDUuNDglIGZvciBwZWFrIGdjYy1sb29wcy13YXNtLCAxMC43MCUgYmV0dGVyIGZv
ciBwZWFrIGNyeXB0by1tZDUtU1AsIDE3LjgzJSBiZXR0ZXIgZm9yIHBlYWsgT2ZmbGluZUFzc2Vt
YmxlciwgZXRjLi4pCisgICAgICAgIFRoZSByZXN1bHRzIG9uIGlQYWQgUHJvIDIgYXJlIHZlcnkg
c2ltaWxhcjogMS4yMCUgYmV0dGVyIChwPDAuMDIpIG9uIHRoZSBKSVQgdGVzdHMgb2YgUkFNaWZp
Y2F0aW9uLCB3aXRoIHRoZSBmb2xsb3dpbmcgc2lnbmlmaWNhbnQgc3ViLXJlc3VsdHM6CisgICAg
ICAgIC0gMS4yJSBiZXR0ZXIgb24gM2QtY3ViZS1TUCAocDwwLjA1KQorICAgICAgICAtIDAuNjcl
IGJldHRlciBvbiBiYXNpYyAocDwwLjAyKQorICAgICAgICAtIDEuNTclIGJldHRlciBvbiBCb3gy
RCAocDwwLjAyKQorICAgICAgICAtIDExLjMlIGJldHRlciBvbiBPZmZsaW5lQXNzZW1ibGVyIChw
PDAuMDIpLCAxOS4xMSUgYmV0dGVyIG9uIHBlYWsgbWVtb3J5CisgICAgICAgIC0gcmVncmVzc2lv
biBvZiAwLjQ0JSAocDwwLjA1KSBvbiBVbmlQb2tlcgorICAgICAgICAtIDEuNzQlIGJldHRlciBv
biBjcnlwdG8tYWVzLVNQIChwPDAuMDIpCisgICAgICAgIC0gNC43OSUgYmV0dGVyIG9uIGNyeXB0
by1tZDUtU1AgKHA8MC4wMiksIDEwLjM5JSBiZXR0ZXIgb24gcGVhayBtZW1vcnkKKyAgICAgICAg
LSAxLjYzJSBiZXR0ZXIgb24gY3J5cHRvLXNoYTEtU1AgKHA8MC4wMikKKyAgICAgICAgLSAwLjg1
JSBiZXR0ZXIgb24gZGF0YS1mb3JtYXQtdG9mdGUtU1AgKHA8MC4wMikKKyAgICAgICAgLSAyLjQ4
JSBiZXR0ZXIgb24gZGVsdGEtYmx1ZSAocDwwLjAyKQorICAgICAgICAtIDAuMzglIGJldHRlciBv
biBnYXVzc2lhbi1ibHVyIChwPDAuMDIpCisgICAgICAgIC0gMy42OCUgYmV0dGVyIG9uIGdjYy1s
b29wcy13YXNtIChwPDAuMDUpCisgICAgICAgIC0gMC42MiUgYmV0dGVyIG9uIG4tYm9keS1TUCAo
cDwwLjAyKQorICAgICAgICAtIDAuMTklIGJldHRlciBvbiBvY3RhbmUtY29kZS1sb2FkIChwPDAu
MDUpCisgICAgICAgIC0gMi45MyUgYmV0dGVyIG9uIHF1aWNrc29ydC13YXNtIChwPDAuMDIpCisg
ICAgICAgIC0gMy4xMiUgYmV0dGVyIG9uIHJheXRyYWNlIChwPDAuMDIpCisgICAgICAgIC0gMy44
MCUgYmV0dGVyIG9uIHJlZ2V4cCAocDwwLjAyKSwgNy40MCUgYmV0dGVyIG9uIHBlYWsgbWVtb3J5
CisgICAgICAgIC0gMC45MyUgYmV0dGVyIG9uIGNyeXB0by1zdGFuZm9yZC1hZXMgKHA8MC4wMikK
KyAgICAgICAgLSAyNi4wMiUgYmV0dGVyIG9uIHRzZi13YXNtIChwPDAuMDIpICEKKworICAgICAg
ICBNdWNoIG1vcmUgc3VycHJpc2luZ2x5IHRvIG1lLCB0aGUgaVBob25lIDcgYWxzbyBzaG93cyBh
IHNpZ25pZmljYW50IGltcHJvdmVtZW50IHRvIEpldFN0cmVhbSAyOiAxLjI3JSBiZXR0ZXIgKHA8
MC4wNSkuCisgICAgICAgIExvb2tpbmcgYXQgdGhlIHN1Yi10ZXN0cywgd2Ugc2VlIHRoZSBmb2xs
b3dpbmcgc2lnbmlmaWNhbnQgb25lczoKKyAgICAgICAgLSAxLjYzJSBiZXR0ZXIgb24gQm94MkQg
KHA8MC4wMikKKyAgICAgICAgLSAwLjc2JSBiZXR0ZXIgb24gV1NMIChwPDAuMDIpCisgICAgICAg
IC0gYSByZWdyZXNzaW9uIG9mIDIuNzElIG9uIGNyeXB0by1zaGExLVNQIChwPDAuMDUpCisgICAg
ICAgIC0gMi43OCUgYmV0dGVyIG9uIGdhdXNzaWFuLWJsdXIgKHA8MC4wMikKKyAgICAgICAgLSAz
LjUwJSBiZXR0ZXIgb24gZ2JlbXUgKHA8MC4wNSkKKyAgICAgICAgLSAxLjY0JSBiZXR0ZXIgb24g
anNoaW50LXd0YiAocDwwLjAyKQorICAgICAgICAtIDE5LjE5JSBiZXR0ZXIgb24gdGFnY2xvdWQt
U1AgKHA8MC4wMikKKyAgICAgICAgLSAxLjYxJSBiZXR0ZXIgb24gb2N0YW5lLXpsaWIgKHA8MC4w
NSkKKyAgICAgICAgVGhlIGlQYWQgUHJvIDIgc2hvd3Mgbm8gc2lnbmlmaWNhbnQgZWZmZWN0IG9u
IEpldFN0cmVhbSAyIGFzIGEgd2hvbGUsIGJ1dCBoYXMgc2lnbmlmaWNhbnQgZWZmZWN0cyBvbiB0
aGUgZm9sbG93aW5nIHN1Yi10ZXN0czoKKyAgICAgICAgLSAyLjIxJSBiZXR0ZXIgb24gQmFzaWMg
KHA8MC4wMikKKyAgICAgICAgLSAxLjA5JSBiZXR0ZXIgb24gTUwgKHA8MC4wNSkKKyAgICAgICAg
LSAwLjY1JSBiZXR0ZXIgb24gV1NMIChwPDAuMDIpCisgICAgICAgIC0gMS4xNCUgYmV0dGVyIG9u
IGRhdGEtZm9ybWF0LXRvZnRlLVNQIChwPDAuMDUpCisgICAgICAgIC0gMS4yMCUgYmV0dGVyIG9u
IGZpcnN0LWluc3BlY3Rvci1jb2RlLWxvYWQgKHA8MC4wMikKKyAgICAgICAgLSAxLjg5JSBiZXR0
ZXIgb24gZ2F1c3NpYW4tYmx1ciAocDwwLjAyKQorICAgICAgICAtIGEgcmVncmVzc2lvbiBvZiAy
LjAyJSBvbiByZWdleHAtZG5hLVNQIChwPDAuMDIpCisgICAgICAgIC0gNC45JSBiZXR0ZXIgb24g
dGFnY2xvdWQtU1AgKHA8MC4wMikKKyAgICAgICAgSSB0aGluayB0aGVyZSBpcyB0b28gbXVjaCBv
dmVybGFwIGluIHRoZXNlIHJlc3VsdHMgZm9yIHRoZW0gdG8gYmUgZHVlIHB1cmVseSB0byBjaGFu
Y2UsIGJ1dCB0aGVyZSBpcyBjbGVhcmx5IGEgbG90IG9mIG5vaXNlLCBhbmQgSSBleHBlY3QgdGhh
dCB0aGUgaVBob25lNyByZXN1bHRzIG1pZ2h0IGJlIGV4YWdlcmF0ZWQuCisgICAgICAgIE9uZSBt
b3JlIHJlYXNvbiBJIGJlbGlldmUgdGhlcmUgaXMgYSByZWFsIGVmZmVjdCBoZXJlIGFuZCBub3Qg
anVzdCBub2lzZSwgaXMgdGhhdCB0aGUgbGFyZ2VzdCB3aW5zIHdlcmUgdXN1YWxseSBvbiB0aGUg
YHdvcnN0IGl0ZXJhdGlvbmAgcGFydCBvZiB0aGUgc2NvcmVzLCBzbyBJIHN1c3BlY3QgdGhhdCB0
aGUgbWVtb3J5IHRyYWZmaWMgb2YgdGhlIHJlZ2lzdGVyIGFsbG9jYXRvciB3YXMgc29tZXRpbWVz
IHNsb3dpbmcgZG93biB0aGUgbWFpbiB0aHJlYWQsIHBvc3NpYmx5IHRocm91Z2ggY2FjaGUgZXZp
Y3Rpb25zLgorICAgICAgICBJIGNhbid0IGV4cGxhaW4gd2h5IHRhZ2Nsb3VkLVNQIHNob3dzIGxh
cmdlIHdpbnMgb24gSmV0U3RyZWFtMiBhbmQgbm8gd2luIGluIFJBTWlmaWNhdGlvbiB3aGVyZWFz
IHRzZi13YXNtIGlzIHRoZSBvcHBvc2l0ZS4KKworICAgICAgICAqIGIzL0IzUmVkdWNlTG9vcFN0
cmVuZ3RoLmNwcDoKKyAgICAgICAgKEpTQzo6QjM6OlJlZHVjZUxvb3BTdHJlbmd0aDo6cmVkdWNl
Qnl0ZUNvcHlMb29wc1RvTWVtY3B5KToKKyAgICAgICAgKiBiMy9haXIvQWlyQWxsb2NhdGVSZWdp
c3RlcnNCeUdyYXBoQ29sb3JpbmcuY3BwOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjphbGxvY2F0
ZVJlZ2lzdGVyc0J5R3JhcGhDb2xvcmluZyk6CisgICAgICAgICogYjMvYWlyL0FpckNvZGUuaDoK
KyAgICAgICAgKEpTQzo6QjM6OkFpcjo6Q29kZTo6Zm9yRWFjaEZhc3RUbXAgY29uc3QpOgorICAg
ICAgICAqIGIzL2Fpci9BaXJVc2VDb3VudHMuaDoKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6VXNl
Q291bnRzOjpVc2VDb3VudHMpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpVc2VDb3VudHM6Omlz
Q29uc3REZWYgY29uc3QpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpVc2VDb3VudHM6Om51bVdh
cm1Vc2VzQW5kRGVmcyBjb25zdCk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OlVzZUNvdW50czo6
ZHVtcCBjb25zdCk6CisgICAgICAgICogcGFyc2VyL05vZGVzLmg6CisKIDIwMjEtMDUtMTYgIE1h
cmsgTGFtICA8bWFyay5sYW1AYXBwbGUuY29tPgogCiAgICAgICAgIEltcGxlbWVudCBiYXNlbGlu
ZSBvcF9lbnRlciwgb3BfcmV0LCBvcF9jaGVja190cmFwcywgb3BfdGhyb3cgdXNpbmcgSklUIHRo
dW5rcy4KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1JlZHVjZUxvb3BT
dHJlbmd0aC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNSZWR1Y2VMb29wU3RyZW5n
dGguY3BwCmluZGV4IGM3OTdjZDZjMjZjOC4uNGE3NDhhNzY0MzU1IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYjMvQjNSZWR1Y2VMb29wU3RyZW5ndGguY3BwCisrKyBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1JlZHVjZUxvb3BTdHJlbmd0aC5jcHAKQEAgLTM2LDcgKzM2
LDcgQEAKICNpbmNsdWRlICJCM1BoYXNlU2NvcGUuaCIKICNpbmNsdWRlICJCM1Byb2NlZHVyZUlu
bGluZXMuaCIKICNpbmNsdWRlICJCM1ZhbHVlSW5saW5lcy5oIgotI2luY2x1ZGUgPHd0Zi9TbWFs
bFB0clNldC5oPgorI2luY2x1ZGUgPHd0Zi9TbWFsbFNldC5oPgogI2luY2x1ZGUgPHd0Zi9WZWN0
b3IuaD4KIAogbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CkBAIC0xNTksNyArMTU5LDcg
QEAgcHVibGljOgogICAgICAgICBCYXNpY0Jsb2NrKiBsb29wRm9vdCA9IG51bGxwdHI7CiAgICAg
ICAgIEJhc2ljQmxvY2sqIGxvb3BQcmVoZWFkZXIgPSBudWxscHRyOwogICAgICAgICBCYXNpY0Js
b2NrKiBsb29wUG9zdGZvb3RlciA9IG51bGxwdHI7Ci0gICAgICAgIFNtYWxsUHRyU2V0PEJhc2lj
QmxvY2sqPiBsb29wSW5uZXJCbG9ja3M7CisgICAgICAgIFNtYWxsU2V0PEJhc2ljQmxvY2sqPiBs
b29wSW5uZXJCbG9ja3M7CiAKICAgICAgICAgewogICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBp
ID0gMDsgaSA8IGxvb3AtPnNpemUoKTsgKytpKQpAQCAtMTcxLDggKzE3MSw4IEBAIHB1YmxpYzoK
ICAgICAgICAgICAgIGlmICghbG9vcElubmVyQmxvY2tzLmNvbnRhaW5zKHN0b3JlLT5vd25lcikp
CiAgICAgICAgICAgICAgICAgcmV0dXJuOwogCi0gICAgICAgICAgICBTbWFsbFB0clNldDxCYXNp
Y0Jsb2NrKj4gbG9vcEVudHJhbmNlczsKLSAgICAgICAgICAgIFNtYWxsUHRyU2V0PEJhc2ljQmxv
Y2sqPiBsb29wRXhpdHM7CisgICAgICAgICAgICBTbWFsbFNldDxCYXNpY0Jsb2NrKj4gbG9vcEVu
dHJhbmNlczsKKyAgICAgICAgICAgIFNtYWxsU2V0PEJhc2ljQmxvY2sqPiBsb29wRXhpdHM7CiAg
ICAgICAgICAgICBmb3IgKGF1dG8qIGJsb2NrIDogbG9vcElubmVyQmxvY2tzKSB7CiAgICAgICAg
ICAgICAgICAgZm9yIChhdXRvIHN1Y2Nlc3NvciA6IGJsb2NrLT5zdWNjZXNzb3JzKCkpIHsKICAg
ICAgICAgICAgICAgICAgICAgaWYgKCFsb29wSW5uZXJCbG9ja3MuY29udGFpbnMoc3VjY2Vzc29y
LmJsb2NrKCkpKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJB
bGxvY2F0ZVJlZ2lzdGVyc0J5R3JhcGhDb2xvcmluZy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvYjMvYWlyL0FpckFsbG9jYXRlUmVnaXN0ZXJzQnlHcmFwaENvbG9yaW5nLmNwcAppbmRleCBk
MDE2OWFlMDc0ZDcuLjk3ZTFhNDc4ZjQ4YyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2IzL2Fpci9BaXJBbGxvY2F0ZVJlZ2lzdGVyc0J5R3JhcGhDb2xvcmluZy5jcHAKKysrIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJBbGxvY2F0ZVJlZ2lzdGVyc0J5R3JhcGhD
b2xvcmluZy5jcHAKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE1LTIw
MjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE1
LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAog
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCkBAIC0zNyw2ICszNyw5IEBACiAjaW5jbHVkZSAiQWlyUGhhc2VTY29wZS5o
IgogI2luY2x1ZGUgIkFpclRtcFdpZHRoSW5saW5lcy5oIgogI2luY2x1ZGUgIkFpclVzZUNvdW50
cy5oIgorI2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+CisjaW5jbHVkZSA8d3RmL1NtYWxsU2V0Lmg+
CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogCiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIz
IHsgbmFtZXNwYWNlIEFpciB7CiAKQEAgLTQ2LDEwNCArNDksMjA5IEBAIHN0YXRpYyBjb25zdGV4
cHIgYm9vbCBkZWJ1ZyA9IGZhbHNlOwogc3RhdGljIGNvbnN0ZXhwciBib29sIHRyYWNlRGVidWcg
PSBmYWxzZTsKIHN0YXRpYyBjb25zdGV4cHIgYm9vbCByZXBvcnRTdGF0cyA9IGZhbHNlOwogCi0v
LyBJbnRlcmZlcmVuY2UgZWRnZXMgYXJlIG5vdCBkaXJlY3RlZC4gQW4gZWRnZSBiZXR3ZWVuIGFu
eSB0d28gVG1wcyBpcyByZXByZXNlbnRlZAotLy8gYnkgdGhlIGNvbmNhdGVuYXRlZCB2YWx1ZXMg
b2YgdGhlIHNtYWxsZXN0IFRtcCBmb2xsb3dlZCBieSB0aGUgYmlnZ2VyIFRtcC4KLS8vIFdlIGhh
dmUgYSB0ZW1wbGF0ZWQgdmVyc2lvbiB0byBzdXBwb3J0IDE2IGJpdCBhbmQgYSAzMiBiaXQgaW1w
bGVtZW50YXRpb25zCi0vLyBzaW5jZSB0aGUgbnVtYmVyIG9mIGVudHJpZXMgaW4gYW4gaW50ZXJm
ZXJlbmNlIHRhYmxlIGlzIE8oTl4yKS4KLS8vIEluIG1vc3QgY2FzZXMsIHdlIHVzZSB0aGUgMTYg
Yml0IGZsYXZvciwgdGh1cyBzYXZpbmcgaGFsZiB0aGUgbWVtb3J5Ci0vLyB3aXRoIGEgc2luZ2xl
IGltcGxlbWVudGF0aW9uLgotdGVtcGxhdGUgPHR5cGVuYW1lIEluZGV4SW1wbFR5cGUsIHR5cGVu
YW1lIFBhaXJTdG9yYWdlVHlwZT4KLWNsYXNzIEludGVyZmVyZW5jZUVkZ2UgewotICAgIHN0YXRp
Y19hc3NlcnQoc2l6ZW9mKEluZGV4SW1wbFR5cGUpICogMiA9PSBzaXplb2YoUGFpclN0b3JhZ2VU
eXBlKSk7Ci0gICAgY29uc3QgdW5zaWduZWQgU2hpZnRBbW91bnQgPSBzaXplb2YoSW5kZXhJbXBs
VHlwZSkgKiA4OwotICAgIGNvbnN0IFBhaXJTdG9yYWdlVHlwZSBJbmRleE1hc2sgPSBzdGQ6Om51
bWVyaWNfbGltaXRzPEluZGV4SW1wbFR5cGU+OjptYXgoKTsKK3RlbXBsYXRlIDx0eXBlbmFtZSBJ
bmRleFR5cGU+CitjbGFzcyBJbnRlcmZlcmVuY2VIYXNoU2V0IHsKK3B1YmxpYzoKKyAgICBib29s
IGNvbnRhaW5zKEluZGV4VHlwZSB1LCBJbmRleFR5cGUgdikKKyAgICB7CisgICAgICAgIGlmICh2
IDwgdSkKKyAgICAgICAgICAgIHN0ZDo6c3dhcCh1LCB2KTsKKyAgICAgICAgcmV0dXJuIG1fc2V0
LmNvbnRhaW5zKHsgdSwgdiB9KTsKKyAgICB9CiAKLXByb3RlY3RlZDoKLSAgICB1c2luZyBJbmRl
eFR5cGUgPSB1bnNpZ25lZDsKKyAgICBib29sIGFkZEFuZFJldHVybklzTmV3RW50cnkoSW5kZXhU
eXBlIHUsIEluZGV4VHlwZSB2KQorICAgIHsKKyAgICAgICAgaWYgKHYgPCB1KQorICAgICAgICAg
ICAgc3RkOjpzd2FwKHUsIHYpOworICAgICAgICByZXR1cm4gbV9zZXQuYWRkKHsgdSwgdiB9KS5p
c05ld0VudHJ5OworICAgIH0KKworICAgIHZvaWQgY2xlYXIoKQorICAgIHsKKyAgICAgICAgbV9z
ZXQuY2xlYXIoKTsKKyAgICB9CiAKKyAgICB2b2lkIHNldE1heFRtcEluZGV4KHVuc2lnbmVkIG4p
CisgICAgeworICAgICAgICBBU1NFUlRfVU5VU0VEKG4sIG4gPCBzdGQ6Om51bWVyaWNfbGltaXRz
PEluZGV4VHlwZT46Om1heCgpKTsKKyAgICB9CisKKyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgRnVu
Y3Rvcj4KKyAgICB2b2lkIGZvckVhY2goY29uc3QgRnVuY3RvciYgZnVuY3RvcikKKyAgICB7Cisg
ICAgICAgIGZvciAoYXV0byBlZGdlIDogbV9zZXQpCisgICAgICAgICAgICBmdW5jdG9yKGVkZ2Up
OworICAgIH0KKworICAgIHVuc2lnbmVkIHNpemUoKSBjb25zdCB7IHJldHVybiBtX3NldC5zaXpl
KCk7IH0KKworcHJpdmF0ZToKKyAgICAvLyBJbnRlcmZlcmVuY2UgZWRnZXMgYXJlIG5vdCBkaXJl
Y3RlZC4gQW4gZWRnZSBiZXR3ZWVuIGFueSB0d28gVG1wcyBpcyByZXByZXNlbnRlZAorICAgIC8v
IGJ5IHRoZSBjb25jYXRlbmF0ZWQgdmFsdWVzICh0aHJvdWdoIFRtcE1hcHBlcikgb2YgdGhlIHNt
YWxsZXN0IFRtcCBmb2xsb3dlZCBieSB0aGUgYmlnZ2VyIFRtcC4KKyAgICBIYXNoU2V0PHN0ZDo6
cGFpcjxJbmRleFR5cGUsIEluZGV4VHlwZT4gPiBtX3NldDsKK307CisKK3RlbXBsYXRlIDx0eXBl
bmFtZSBULCB0eXBlbmFtZSBJbmRleFR5cGU+CitjbGFzcyBJbnRlcmZlcmVuY2VWZWN0b3Igewog
cHVibGljOgotICAgIHN0cnVjdCBJbnRlcmZlcmVuY2VFZGdlSGFzaCB7Ci0gICAgICAgIHN0YXRp
YyB1bnNpZ25lZCBoYXNoKGNvbnN0IEludGVyZmVyZW5jZUVkZ2U8SW5kZXhJbXBsVHlwZSwgUGFp
clN0b3JhZ2VUeXBlPiYga2V5KSB7IHJldHVybiBrZXkuaGFzaCgpOyB9Ci0gICAgICAgIHN0YXRp
YyBib29sIGVxdWFsKGNvbnN0IEludGVyZmVyZW5jZUVkZ2U8SW5kZXhJbXBsVHlwZSwgUGFpclN0
b3JhZ2VUeXBlPiYgYSwgY29uc3QgSW50ZXJmZXJlbmNlRWRnZTxJbmRleEltcGxUeXBlLCBQYWly
U3RvcmFnZVR5cGU+JiBiKSB7IHJldHVybiBhID09IGI7IH0KLSAgICAgICAgc3RhdGljIGNvbnN0
ZXhwciBib29sIHNhZmVUb0NvbXBhcmVUb0VtcHR5T3JEZWxldGVkID0gdHJ1ZTsKLSAgICB9Owot
ICAgIHR5cGVkZWYgU2ltcGxlQ2xhc3NIYXNoVHJhaXRzPEludGVyZmVyZW5jZUVkZ2U8SW5kZXhJ
bXBsVHlwZSwgUGFpclN0b3JhZ2VUeXBlPj4gSW50ZXJmZXJlbmNlRWRnZUhhc2hUcmFpdHM7Cisg
ICAgYm9vbCBjb250YWlucyhJbmRleFR5cGUgdSwgSW5kZXhUeXBlIHYpCisgICAgeworICAgICAg
ICBpZiAodiA8IHUpCisgICAgICAgICAgICBzdGQ6OnN3YXAodSwgdik7CisgICAgICAgIHJldHVy
biBtX3ZlY3Rvclt1XS5jb250YWlucyh2KTsKKyAgICB9CiAKLSAgICB0eXBlZGVmIEhhc2hTZXQ8
SW50ZXJmZXJlbmNlRWRnZTxJbmRleEltcGxUeXBlLCBQYWlyU3RvcmFnZVR5cGU+LCBJbnRlcmZl
cmVuY2VFZGdlSGFzaCwgSW50ZXJmZXJlbmNlRWRnZUhhc2hUcmFpdHM+IEludGVyZmVyZW5jZVNl
dDsKKyAgICBib29sIGFkZEFuZFJldHVybklzTmV3RW50cnkoSW5kZXhUeXBlIHUsIEluZGV4VHlw
ZSB2KQorICAgIHsKKyAgICAgICAgaWYgKHYgPCB1KQorICAgICAgICAgICAgc3RkOjpzd2FwKHUs
IHYpOworICAgICAgICBib29sIGlzTmV3RW50cnkgPSBtX3ZlY3Rvclt1XS5hZGQodikuaXNOZXdF
bnRyeTsKKyAgICAgICAgbV9zaXplICs9IGlzTmV3RW50cnk7CisgICAgICAgIHJldHVybiBpc05l
d0VudHJ5OworICAgIH0KKworICAgIHZvaWQgY2xlYXIoKQorICAgIHsKKyAgICAgICAgbV92ZWN0
b3IuY2xlYXIoKTsKKyAgICAgICAgbV9zaXplID0gMDsKKyAgICB9CisKKyAgICB2b2lkIHNldE1h
eFRtcEluZGV4KHVuc2lnbmVkIG4pCisgICAgeworICAgICAgICBBU1NFUlQobiA8IHN0ZDo6bnVt
ZXJpY19saW1pdHM8SW5kZXhUeXBlPjo6bWF4KCkpOworICAgICAgICBtX3ZlY3Rvci5yZXNpemUo
bik7CisgICAgfQogCi0gICAgSW50ZXJmZXJlbmNlRWRnZSgpCisgICAgdGVtcGxhdGUgPHR5cGVu
YW1lIEZ1bmN0b3I+CisgICAgdm9pZCBmb3JFYWNoKGNvbnN0IEZ1bmN0b3ImIGZ1bmN0b3IpCiAg
ICAgeworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV92ZWN0b3Iuc2l6ZSgpIDsg
KytpKSB7CisgICAgICAgICAgICBmb3IgKEluZGV4VHlwZSBqIDogbV92ZWN0b3JbaV0pCisgICAg
ICAgICAgICAgICAgZnVuY3Rvcih7IGksIGogfSk7CisgICAgICAgIH0KICAgICB9CiAKLSAgICBJ
bnRlcmZlcmVuY2VFZGdlKEluZGV4VHlwZSBhLCBJbmRleFR5cGUgYikKKyAgICB1bnNpZ25lZCBz
aXplKCkgY29uc3QgeyByZXR1cm4gbV9zaXplOyB9CisKK3ByaXZhdGU6CisgICAgVmVjdG9yPFQ+
IG1fdmVjdG9yOworICAgIHVuc2lnbmVkIG1fc2l6ZSB7MH07Cit9OworCit0ZW1wbGF0ZSA8dHlw
ZW5hbWUgSW5kZXhUeXBlPgorY2xhc3MgSW50ZXJmZXJlbmNlQml0VmVjdG9yIHsKK3B1YmxpYzoK
KyAgICBib29sIGNvbnRhaW5zKEluZGV4VHlwZSB1LCBJbmRleFR5cGUgdikKICAgICB7Ci0gICAg
ICAgIEFTU0VSVChhKTsKLSAgICAgICAgQVNTRVJUKGIpOwotICAgICAgICBBU1NFUlQoYSA8IHN0
ZDo6bnVtZXJpY19saW1pdHM8SW5kZXhJbXBsVHlwZT46Om1heCgpKTsKLSAgICAgICAgQVNTRVJU
KGIgPCBzdGQ6Om51bWVyaWNfbGltaXRzPEluZGV4SW1wbFR5cGU+OjptYXgoKSk7Ci0gICAgICAg
IEFTU0VSVF9XSVRIX01FU1NBR0UoYSAhPSBiLCAiQSBUbXAgY2FuIG5ldmVyIGludGVyZmVyZSB3
aXRoIGl0c2VsZi4gRG9pbmcgc28gd291bGQgZm9yY2UgaXQgdG8gYmUgdGhlIHN1cGVycG9zaXRp
b24gb2YgdHdvIHJlZ2lzdGVycy4iKTsKKyAgICAgICAgcmV0dXJuIG1fYml0VmVjdG9yLnF1aWNr
R2V0KGluZGV4KHUsIHYpKTsKKyAgICB9CiAKLSAgICAgICAgaWYgKGIgPCBhKQotICAgICAgICAg
ICAgc3RkOjpzd2FwKGEsIGIpOwotICAgICAgICBtX3ZhbHVlID0gc3RhdGljX2Nhc3Q8UGFpclN0
b3JhZ2VUeXBlPihhKSA8PCBTaGlmdEFtb3VudCB8IGI7CisgICAgYm9vbCBhZGRBbmRSZXR1cm5J
c05ld0VudHJ5KEluZGV4VHlwZSB1LCBJbmRleFR5cGUgdikKKyAgICB7CisgICAgICAgIC8vIE5v
dGU6IHdlIGNvdWxkIGRvIG9ubHkgb25lIHF1aWNrU2V0LCBhdCB0aGUgY29zdCBvZiBvbmUgZXh0
cmEgYnJhbmNoIGluIGV2ZXJ5IGNvbnRhaW5zL2FkZEFuZFJldHVybklzTmV3RW50cnkgKHRvIGVu
Zm9yY2UgdSA8IHYpCisgICAgICAgIGJvb2wgYWxyZWFkeUluID0gbV9iaXRWZWN0b3IucXVpY2tT
ZXQoaW5kZXgodSwgdikpOworICAgICAgICBib29sIGFscmVhZHlJbjIgPSBtX2JpdFZlY3Rvci5x
dWlja1NldChpbmRleCh2LCB1KSk7CisgICAgICAgIEFTU0VSVF9VTlVTRUQoYWxyZWFkeUluMiwg
YWxyZWFkeUluID09IGFscmVhZHlJbjIpOworICAgICAgICBtX3NpemUgKz0gIWFscmVhZHlJbjsK
KyAgICAgICAgcmV0dXJuICFhbHJlYWR5SW47CiAgICAgfQogCi0gICAgSW50ZXJmZXJlbmNlRWRn
ZShjb25zdCBJbnRlcmZlcmVuY2VFZGdlPEluZGV4SW1wbFR5cGUsIFBhaXJTdG9yYWdlVHlwZT4m
IG90aGVyKQotICAgICAgICA6IG1fdmFsdWUob3RoZXIubV92YWx1ZSkKKyAgICB2b2lkIGNsZWFy
KCkKICAgICB7CisgICAgICAgIG1fYml0VmVjdG9yLmNsZWFyQWxsKCk7CisgICAgICAgIG1fc2l6
ZSA9IDA7CiAgICAgfQogCisgICAgdm9pZCBzZXRNYXhUbXBJbmRleCh1bnNpZ25lZCBuKQorICAg
IHsKKyAgICAgICAgQVNTRVJUKG4gPCBzdGQ6Om51bWVyaWNfbGltaXRzPEluZGV4VHlwZT46Om1h
eCgpKTsKKyAgICAgICAgbV9udW1UbXBzID0gbjsKKyAgICAgICAgbV9iaXRWZWN0b3IuZW5zdXJl
U2l6ZShuKm4pOworICAgIH0KIAotICAgIEludGVyZmVyZW5jZUVkZ2UoV1RGOjpIYXNoVGFibGVE
ZWxldGVkVmFsdWVUeXBlKQotICAgICAgICA6IG1fdmFsdWUoc3RkOjpudW1lcmljX2xpbWl0czxQ
YWlyU3RvcmFnZVR5cGU+OjptYXgoKSkKKyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgRnVuY3Rvcj4K
KyAgICB2b2lkIGZvckVhY2goY29uc3QgRnVuY3RvciYgZnVuY3RvcikKICAgICB7CisgICAgICAg
IGZvciAoSW5kZXhUeXBlIGkgPSAwOyBpIDwgbV9udW1UbXBzOyArK2kpIHsKKyAgICAgICAgICAg
IGZvciAoSW5kZXhUeXBlIGogPSBpICsgMTsgaiA8IG1fbnVtVG1wczsgKytqKSB7CisgICAgICAg
ICAgICAgICAgaWYgKG1fYml0VmVjdG9yLnF1aWNrR2V0KGluZGV4KGksIGopKSkKKyAgICAgICAg
ICAgICAgICAgICAgZnVuY3Rvcih7IGksIGogfSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0K
ICAgICB9CiAKLSAgICBJbmRleFR5cGUgZmlyc3QoKSBjb25zdAorICAgIHVuc2lnbmVkIHNpemUo
KSBjb25zdCB7IHJldHVybiBtX3NpemU7IH0KKworcHJpdmF0ZToKKyAgICB1bnNpZ25lZCBpbmRl
eChJbmRleFR5cGUgaSwgSW5kZXhUeXBlIGopCiAgICAgewotICAgICAgICByZXR1cm4gbV92YWx1
ZSA+PiBTaGlmdEFtb3VudCAmIEluZGV4TWFzazsKKyAgICAgICAgcmV0dXJuIGkgKiBtX251bVRt
cHMgKyBqOwogICAgIH0KIAotICAgIEluZGV4VHlwZSBzZWNvbmQoKSBjb25zdAorICAgIEJpdFZl
Y3RvciBtX2JpdFZlY3RvcjsKKyAgICB1bnNpZ25lZCBtX3NpemUgezB9OworICAgIEluZGV4VHlw
ZSBtX251bVRtcHM7Cit9OworCisjZGVmaW5lIFRFU1RfSU5URVJGRVJFTkNFX1NNQUxMX1NFVF9W
RUNUT1IgMAorI2lmIFRFU1RfSU5URVJGRVJFTkNFX1NNQUxMX1NFVF9WRUNUT1IKK3RlbXBsYXRl
IDx0eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBJbmRleFR5cGU+CitjbGFzcyBJbnN0
cnVtZW50ZWRJbnRlcmZlcmVuY2VHcmFwaCB7CitwdWJsaWM6CisgICAgYm9vbCBjb250YWlucyhJ
bmRleFR5cGUgdSwgSW5kZXhUeXBlIHYpCiAgICAgewotICAgICAgICByZXR1cm4gbV92YWx1ZSAm
IEluZGV4TWFzazsKKyAgICAgICAgYm9vbCBjb250YWluc0luQSA9IG1fc2V0QS5jb250YWlucyh1
LCB2KTsKKyAgICAgICAgYm9vbCBjb250YWluc0luQiA9IG1fc2V0Qi5jb250YWlucyh1LCB2KTsK
KyAgICAgICAgUkVMRUFTRV9BU1NFUlQoY29udGFpbnNJbkEgPT0gY29udGFpbnNJbkIpOworICAg
ICAgICByZXR1cm4gY29udGFpbnNJbkE7CiAgICAgfQogCi0gICAgYm9vbCBvcGVyYXRvcj09KGNv
bnN0IEludGVyZmVyZW5jZUVkZ2UmIG90aGVyKSBjb25zdAorICAgIGJvb2wgYWRkQW5kUmV0dXJu
SXNOZXdFbnRyeShJbmRleFR5cGUgdSwgSW5kZXhUeXBlIHYpCiAgICAgewotICAgICAgICByZXR1
cm4gbV92YWx1ZSA9PSBvdGhlci5tX3ZhbHVlOworICAgICAgICBib29sIGlzTmV3RW50cnlBID0g
bV9zZXRBLmFkZEFuZFJldHVybklzTmV3RW50cnkodSwgdik7CisgICAgICAgIGJvb2wgaXNOZXdF
bnRyeUIgPSBtX3NldEIuYWRkQW5kUmV0dXJuSXNOZXdFbnRyeSh1LCB2KTsKKyAgICAgICAgUkVM
RUFTRV9BU1NFUlQoaXNOZXdFbnRyeUEgPT0gaXNOZXdFbnRyeUIpOworICAgICAgICByZXR1cm4g
aXNOZXdFbnRyeUE7CiAgICAgfQogCi0gICAgSW50ZXJmZXJlbmNlRWRnZSYgb3BlcmF0b3I9KGNv
bnN0IEludGVyZmVyZW5jZUVkZ2UmIG90aGVyKQorICAgIHZvaWQgY2xlYXIoKQogICAgIHsKLSAg
ICAgICAgbV92YWx1ZSA9IG90aGVyLm1fdmFsdWU7Ci0gICAgICAgIHJldHVybiAqdGhpczsKKyAg
ICAgICAgbV9zZXRBLmNsZWFyKCk7CisgICAgICAgIG1fc2V0Qi5jbGVhcigpOwogICAgIH0KLSAg
ICBib29sIGlzSGFzaFRhYmxlRGVsZXRlZFZhbHVlKCkgY29uc3QKKworICAgIHZvaWQgc2V0TWF4
VG1wSW5kZXgodW5zaWduZWQgbikKICAgICB7Ci0gICAgICAgIHJldHVybiAqdGhpcyA9PSBJbnRl
cmZlcmVuY2VFZGdlKFdURjo6SGFzaFRhYmxlRGVsZXRlZFZhbHVlKTsKKyAgICAgICAgbV9zZXRB
LnNldE1heFRtcEluZGV4KG4pOworICAgICAgICBtX3NldEIuc2V0TWF4VG1wSW5kZXgobik7CiAg
ICAgfQogCi0gICAgdW5zaWduZWQgaGFzaCgpIGNvbnN0CisgICAgdGVtcGxhdGUgPHR5cGVuYW1l
IEZ1bmN0b3I+CisgICAgdm9pZCBmb3JFYWNoKGNvbnN0IEZ1bmN0b3ImIGZ1bmN0b3IpCiAgICAg
ewotICAgICAgICByZXR1cm4gV1RGOjpJbnRIYXNoPFBhaXJTdG9yYWdlVHlwZT46Omhhc2gobV92
YWx1ZSk7CisgICAgICAgIG1fc2V0QS5mb3JFYWNoKGZ1bmN0b3IpOwogICAgIH0KIAotICAgIHZv
aWQgZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAorICAgIHVuc2lnbmVkIHNpemUoKSBjb25z
dAogICAgIHsKLSAgICAgICAgb3V0LnByaW50KGZpcnN0KCksICI8PT4iLCBzZWNvbmQoKSk7Cisg
ICAgICAgIHVuc2lnbmVkIHNpemVBID0gbV9zZXRBLnNpemUoKTsKKyAgICAgICAgdW5zaWduZWQg
c2l6ZUIgPSBtX3NldEIuc2l6ZSgpOworICAgICAgICBSRUxFQVNFX0FTU0VSVChzaXplQSA9PSBz
aXplQik7CisgICAgICAgIHJldHVybiBzaXplQTsKICAgICB9CiAKIHByaXZhdGU6Ci0gICAgUGFp
clN0b3JhZ2VUeXBlIG1fdmFsdWUgeyAwIH07CisgICAgVCBtX3NldEE7CisgICAgVSBtX3NldEI7
CiB9OworI2VuZGlmCiAKIC8vIFRoZSBBYnN0cmFjdENvbG9yaW5nQWxsb2NhdG9yIGRlZmluZXMg
YWxsIHRoZSBjb2RlIHRoYXQgaXMgaW5kZXBlbmRhbnQKIC8vIGZyb20gdGhlIGJhbmsgb3IgcmVn
aXN0ZXIgYW5kIGNhbiBiZSBzaGFyZWQgd2hlbiBhbGxvY2F0aW5nIHJlZ2lzdGVycy4KLXRlbXBs
YXRlPHR5cGVuYW1lIEluZGV4VHlwZSwgdHlwZW5hbWUgVG1wTWFwcGVyLCB0eXBlbmFtZSBJbnRl
cmZlcmVuY2VFZGdlVHlwZT4KK3RlbXBsYXRlPHR5cGVuYW1lIEluZGV4VHlwZSwgdHlwZW5hbWUg
SW50ZXJmZXJlbmNlU2V0LCBCYW5rIGJhbms+CiBjbGFzcyBBYnN0cmFjdENvbG9yaW5nQWxsb2Nh
dG9yIHsKIHB1YmxpYzoKLSAgICBBYnN0cmFjdENvbG9yaW5nQWxsb2NhdG9yKENvZGUmIGNvZGUs
IGNvbnN0IFZlY3RvcjxSZWc+JiByZWdzSW5Qcmlvcml0eU9yZGVyLCBJbmRleFR5cGUgbGFzdFBy
ZWNvbG9yZWRSZWdpc3RlckluZGV4LCB1bnNpZ25lZCB0bXBBcnJheVNpemUsIGNvbnN0IEhhc2hT
ZXQ8dW5zaWduZWQ+JiB1bnNwaWxsYWJsZVRtcHMsIGNvbnN0IFVzZUNvdW50czxUbXA+JiB1c2VD
b3VudHMpCisgICAgQWJzdHJhY3RDb2xvcmluZ0FsbG9jYXRvcihDb2RlJiBjb2RlLCBjb25zdCBW
ZWN0b3I8UmVnPiYgcmVnc0luUHJpb3JpdHlPcmRlciwgSW5kZXhUeXBlIGxhc3RQcmVjb2xvcmVk
UmVnaXN0ZXJJbmRleCwgdW5zaWduZWQgdG1wQXJyYXlTaXplLCBjb25zdCBCaXRWZWN0b3ImIHVu
c3BpbGxhYmxlVG1wcywgY29uc3QgVXNlQ291bnRzJiB1c2VDb3VudHMpCiAgICAgICAgIDogbV9y
ZWdzSW5Qcmlvcml0eU9yZGVyKHJlZ3NJblByaW9yaXR5T3JkZXIpCiAgICAgICAgICwgbV9sYXN0
UHJlY29sb3JlZFJlZ2lzdGVySW5kZXgobGFzdFByZWNvbG9yZWRSZWdpc3RlckluZGV4KQogICAg
ICAgICAsIG1fdW5zcGlsbGFibGVUbXBzKHVuc3BpbGxhYmxlVG1wcykKQEAgLTE2MCw2ICsyNjgs
MTQgQEAgcHVibGljOgogICAgIH0KIAogcHJvdGVjdGVkOgorICAgIHVzaW5nIFRtcE1hcHBlciA9
IEFic29sdXRlVG1wTWFwcGVyPGJhbms+OworCisgICAgSW5kZXhUeXBlIHRtcFRvSW5kZXgoVG1w
IHRtcCkgY29uc3QKKyAgICB7CisgICAgICAgIHVuc2lnbmVkIGluZGV4ID0gVG1wTWFwcGVyOjph
YnNvbHV0ZUluZGV4KHRtcCk7CisgICAgICAgIEFTU0VSVChzdGQ6Om51bWVyaWNfbGltaXRzPElu
ZGV4VHlwZT46Om1heCgpID4gaW5kZXgpOworICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8SW5k
ZXhUeXBlPihpbmRleCk7CisgICAgfQogCiAgICAgdW5zaWduZWQgcmVnaXN0ZXJDb3VudCgpIGNv
bnN0IHsgcmV0dXJuIG1fcmVnc0luUHJpb3JpdHlPcmRlci5zaXplKCk7IH0KIApAQCAtMTgwLDcg
KzI5Niw3IEBAIHByb3RlY3RlZDoKIAogICAgIHZvaWQgYWRkVG9TcGlsbCh1bnNpZ25lZCB0b1Nw
aWxsKQogICAgIHsKLSAgICAgICAgaWYgKG1fdW5zcGlsbGFibGVUbXBzLmNvbnRhaW5zKHRvU3Bp
bGwpKQorICAgICAgICBpZiAobV91bnNwaWxsYWJsZVRtcHMucXVpY2tHZXQodG9TcGlsbCkpCiAg
ICAgICAgICAgICByZXR1cm47CiAKICAgICAgICAgbV9zcGlsbFdvcmtsaXN0LmFkZCh0b1NwaWxs
KTsKQEAgLTE5OCwxNSArMzE0LDE1IEBAIHByb3RlY3RlZDoKICAgICAgICAgLy8gQWxsIHByZWNv
bG9yZWQgcmVnaXN0ZXJzIGhhdmUgIGFuICJpbmZpbml0ZSIgZGVncmVlLgogICAgICAgICB1bnNp
Z25lZCBmaXJzdE5vblJlZ0luZGV4ID0gbV9sYXN0UHJlY29sb3JlZFJlZ2lzdGVySW5kZXggKyAx
OwogICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgZmlyc3ROb25SZWdJbmRleDsgKytp
KQotICAgICAgICAgICAgbV9kZWdyZWVzW2ldID0gc3RkOjpudW1lcmljX2xpbWl0czx1bnNpZ25l
ZD46Om1heCgpOworICAgICAgICAgICAgbV9kZWdyZWVzW2ldID0gc3RkOjpudW1lcmljX2xpbWl0
czxJbmRleFR5cGU+OjptYXgoKTsKIAotICAgICAgICBtZW1zZXQobV9kZWdyZWVzLmRhdGEoKSAr
IGZpcnN0Tm9uUmVnSW5kZXgsIDAsICh0bXBBcnJheVNpemUgLSBmaXJzdE5vblJlZ0luZGV4KSAq
IHNpemVvZih1bnNpZ25lZCkpOworICAgICAgICBtZW1zZXQobV9kZWdyZWVzLmRhdGEoKSArIGZp
cnN0Tm9uUmVnSW5kZXgsIDAsICh0bXBBcnJheVNpemUgLSBmaXJzdE5vblJlZ0luZGV4KSAqIHNp
emVvZihJbmRleFR5cGUpKTsKICAgICB9CiAKICAgICB2b2lkIGFkZEVkZ2VEaXN0aW5jdChJbmRl
eFR5cGUgYSwgSW5kZXhUeXBlIGIpCiAgICAgewogICAgICAgICBBU1NFUlQoYSAhPSBiKTsKLSAg
ICAgICAgYm9vbCBpc05ld0VkZ2UgPSBhZGRJbnRlcmZlcmVuY2VFZGdlKEludGVyZmVyZW5jZUVk
Z2VUeXBlKGEsIGIpKTsKKyAgICAgICAgYm9vbCBpc05ld0VkZ2UgPSBhZGRJbnRlcmZlcmVuY2VF
ZGdlKGEsIGIpOwogICAgICAgICBpZiAoaXNOZXdFZGdlKSB7CiAgICAgICAgICAgICBpZiAoIWlz
UHJlY29sb3JlZChhKSkgewogICAgICAgICAgICAgICAgIEFTU0VSVCghbV9hZGphY2VuY3lMaXN0
W2FdLmNvbnRhaW5zKGIpKTsKQEAgLTIyNSw3ICszNDEsNyBAQCBwcm90ZWN0ZWQ6CiAgICAgYm9v
bCBhZGRFZGdlRGlzdGluY3RXaXRob3V0RGVncmVlQ2hhbmdlKEluZGV4VHlwZSBhLCBJbmRleFR5
cGUgYikKICAgICB7CiAgICAgICAgIEFTU0VSVChhICE9IGIpOwotICAgICAgICBib29sIGlzTmV3
RWRnZSA9IGFkZEludGVyZmVyZW5jZUVkZ2UoSW50ZXJmZXJlbmNlRWRnZVR5cGUoYSwgYikpOwor
ICAgICAgICBib29sIGlzTmV3RWRnZSA9IGFkZEludGVyZmVyZW5jZUVkZ2UoYSwgYik7CiAgICAg
ICAgIGlmIChpc05ld0VkZ2UpIHsKICAgICAgICAgICAgIGlmICghaXNQcmVjb2xvcmVkKGEpKSB7
CiAgICAgICAgICAgICAgICAgQVNTRVJUKCFtX2FkamFjZW5jeUxpc3RbYV0uY29udGFpbnMoYikp
OwpAQCAtMzQwLDcgKzQ1Niw3IEBAIHByb3RlY3RlZDoKICAgICAgICAgICAgIGlmICghaXNQcmVj
b2xvcmVkKGFkamFjZW50VG1wSW5kZXgpCiAgICAgICAgICAgICAgICAgJiYgIWhhc0JlZW5TaW1w
bGlmaWVkKGFkamFjZW50VG1wSW5kZXgpCiAgICAgICAgICAgICAgICAgJiYgbV9kZWdyZWVzW2Fk
amFjZW50VG1wSW5kZXhdID49IHJlZ2lzdGVyQ291bnQoKQotICAgICAgICAgICAgICAgICYmICFo
YXNJbnRlcmZlcmVuY2VFZGdlKEludGVyZmVyZW5jZUVkZ2VUeXBlKHUsIGFkamFjZW50VG1wSW5k
ZXgpKSkKKyAgICAgICAgICAgICAgICAmJiAhaGFzSW50ZXJmZXJlbmNlRWRnZSh1LCBhZGphY2Vu
dFRtcEluZGV4KSkKICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIH0KICAg
ICAgICAgcmV0dXJuIHRydWU7CkBAIC0zNzUsNTIgKzQ5MSw0MCBAQCBwcm90ZWN0ZWQ6CiAgICAg
ICAgIGF1dG8gaXRlcmF0b3IgPSBtX3NwaWxsV29ya2xpc3QuYmVnaW4oKTsKIAogICAgICAgICBS
RUxFQVNFX0FTU0VSVF9XSVRIX01FU1NBR0UoaXRlcmF0b3IgIT0gbV9zcGlsbFdvcmtsaXN0LmVu
ZCgpLCAic2VsZWN0U3BpbGwoKSBjYWxsZWQgd2hlbiB0aGVyZSB3YXMgbm8gc3BpbGwuIik7Ci0g
ICAgICAgIFJFTEVBU0VfQVNTRVJUX1dJVEhfTUVTU0FHRSghbV91bnNwaWxsYWJsZVRtcHMuY29u
dGFpbnMoKml0ZXJhdG9yKSwgInRyeWluZyB0byBzcGlsbCB1bnNwaWxsYWJsZSB0bXAiKTsKLQot
ICAgICAgICAvLyBIaWdoZXIgc2NvcmUgbWVhbnMgbW9yZSBkZXNpcmFibGUgdG8gc3BpbGwuIExv
d2VyIHNjb3JlcyBtYXhpbWl6ZSB0aGUgbGlrZWxpaG9vZCB0aGF0IGEgdG1wCi0gICAgICAgIC8v
IGdldHMgYSByZWdpc3Rlci4KLSAgICAgICAgYXV0byBzY29yZSA9IFsmXSAoVG1wIHRtcCkgLT4g
ZG91YmxlIHsKLSAgICAgICAgICAgIC8vIEFpciBleHBvc2VzIHRoZSBjb25jZXB0IG9mICJmYXN0
IHRtcHMiLCBhbmQgd2UgaW50ZXJwcmV0IHRoYXQgdG8gbWVhbiB0aGF0IHRoZSB0bXAKLSAgICAg
ICAgICAgIC8vIHNob3VsZCBhbHdheXMgYmUgaW4gYSByZWdpc3Rlci4KLSAgICAgICAgICAgIGlm
IChtX2NvZGUuaXNGYXN0VG1wKHRtcCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAg
ICAgICAgICAKLSAgICAgICAgICAgIC8vIEFsbCBlbHNlIGJlaW5nIGVxdWFsLCB0aGUgc2NvcmUg
c2hvdWxkIGJlIGRpcmVjdGx5IHJlbGF0ZWQgdG8gdGhlIGRlZ3JlZS4KLSAgICAgICAgICAgIGRv
dWJsZSBkZWdyZWUgPSBzdGF0aWNfY2FzdDxkb3VibGU+KG1fZGVncmVlc1tUbXBNYXBwZXI6OmFi
c29sdXRlSW5kZXgodG1wKV0pOwotCi0gICAgICAgICAgICAvLyBBbGwgZWxzZSBiZWluZyBlcXVh
bCwgdGhlIHNjb3JlIHNob3VsZCBiZSBpbnZlcnNlbHkgcmVsYXRlZCB0byB0aGUgbnVtYmVyIG9m
IHdhcm0gdXNlcyBhbmQKLSAgICAgICAgICAgIC8vIGRlZnMuCi0gICAgICAgICAgICBjb25zdCBV
c2VDb3VudHM8VG1wPjo6Q291bnRzKiBjb3VudHMgPSBtX3VzZUNvdW50c1t0bXBdOwotICAgICAg
ICAgICAgaWYgKCFjb3VudHMpCi0gICAgICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bnVtZXJpY19s
aW1pdHM8ZG91YmxlPjo6aW5maW5pdHkoKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgZG91
YmxlIHVzZXMgPSBjb3VudHMtPm51bVdhcm1Vc2VzICsgY291bnRzLT5udW1EZWZzOworICAgICAg
ICBSRUxFQVNFX0FTU0VSVF9XSVRIX01FU1NBR0UoIW1fdW5zcGlsbGFibGVUbXBzLmdldCgqaXRl
cmF0b3IpLCAidHJ5aW5nIHRvIHNwaWxsIHVuc3BpbGxhYmxlIHRtcCIpOwogCi0gICAgICAgICAg
ICAvLyBJZiBpdCdzIGEgY29uc3RhbnQsIHRoZW4gaXQncyBub3QgYXMgYmFkIHRvIHNwaWxsLiBX
ZSBjYW4gcmVtYXRlcmlhbGl6ZSBpdCBpbiBtYW55Ci0gICAgICAgICAgICAvLyBjYXNlcy4KLSAg
ICAgICAgICAgIGlmIChjb3VudHMtPm51bUNvbnN0RGVmcyA9PSAxICYmIGNvdW50cy0+bnVtRGVm
cyA9PSAxKQotICAgICAgICAgICAgICAgIHVzZXMgLz0gMjsKKyAgICAgICAgSW5kZXhUeXBlIHZp
Y3RpbUluZGV4ID0gKml0ZXJhdG9yOworICAgICAgICBmbG9hdCBtYXhTY29yZSA9IDA7CiAKLSAg
ICAgICAgICAgIHJldHVybiBkZWdyZWUgLyB1c2VzOwotICAgICAgICB9OworICAgICAgICBmb3Ig
KDtpdGVyYXRvciAhPSBtX3NwaWxsV29ya2xpc3QuZW5kKCk7ICsraXRlcmF0b3IpIHsKKyAgICAg
ICAgICAgIEluZGV4VHlwZSBpbmRleCA9ICppdGVyYXRvcjsKIAotICAgICAgICBhdXRvIHZpY3Rp
bUl0ZXJhdG9yID0gaXRlcmF0b3I7Ci0gICAgICAgIGRvdWJsZSBtYXhTY29yZSA9IHNjb3JlKFRt
cE1hcHBlcjo6dG1wRnJvbUFic29sdXRlSW5kZXgoKml0ZXJhdG9yKSk7CisgICAgICAgICAgICBm
bG9hdCB1c2VzID0gbV91c2VDb3VudHMubnVtV2FybVVzZXNBbmREZWZzPGJhbms+KGluZGV4KTsK
KyAgICAgICAgICAgIGlmICghdXNlcykgeworICAgICAgICAgICAgICAgIHZpY3RpbUluZGV4ID0g
aW5kZXg7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisKKyAgICAgICAg
ICAgIC8vIEhpZ2hlciBzY29yZSBtZWFucyBtb3JlIGRlc2lyYWJsZSB0byBzcGlsbC4gTG93ZXIg
c2NvcmVzIG1heGltaXplIHRoZSBsaWtlbGlob29kIHRoYXQgYSB0bXAKKyAgICAgICAgICAgIC8v
IGdldHMgYSByZWdpc3Rlci4KKyAgICAgICAgICAgIGZsb2F0IGRlZ3JlZSA9IHN0YXRpY19jYXN0
PGZsb2F0PihtX2RlZ3JlZXNbaW5kZXhdKTsKKyAgICAgICAgICAgIGZsb2F0IHRtcFNjb3JlID0g
ZGVncmVlIC8gdXNlczsKKworICAgICAgICAgICAgLy8gSWYgaXQncyBhIGNvbnN0YW50LCB0aGVu
IGl0J3Mgbm90IGFzIGJhZCB0byBzcGlsbC4gV2UgY2FuIHJlbWF0ZXJpYWxpemUgaXQgaW4gbWFu
eQorICAgICAgICAgICAgLy8gY2FzZXMuCisgICAgICAgICAgICBpZiAobV91c2VDb3VudHMuaXND
b25zdERlZjxiYW5rPihpbmRleCkpCisgICAgICAgICAgICAgICAgdG1wU2NvcmUgKj0gMjsKIAot
ICAgICAgICArK2l0ZXJhdG9yOwotICAgICAgICBmb3IgKDtpdGVyYXRvciAhPSBtX3NwaWxsV29y
a2xpc3QuZW5kKCk7ICsraXRlcmF0b3IpIHsKLSAgICAgICAgICAgIGRvdWJsZSB0bXBTY29yZSA9
IHNjb3JlKFRtcE1hcHBlcjo6dG1wRnJvbUFic29sdXRlSW5kZXgoKml0ZXJhdG9yKSk7CiAgICAg
ICAgICAgICBpZiAodG1wU2NvcmUgPiBtYXhTY29yZSkgewotICAgICAgICAgICAgICAgIEFTU0VS
VCghbV91bnNwaWxsYWJsZVRtcHMuY29udGFpbnMoKml0ZXJhdG9yKSk7Ci0gICAgICAgICAgICAg
ICAgdmljdGltSXRlcmF0b3IgPSBpdGVyYXRvcjsKKyAgICAgICAgICAgICAgICB2aWN0aW1JbmRl
eCA9IGluZGV4OwogICAgICAgICAgICAgICAgIG1heFNjb3JlID0gdG1wU2NvcmU7CiAgICAgICAg
ICAgICB9CiAgICAgICAgIH0KIAotICAgICAgICBJbmRleFR5cGUgdmljdGltSW5kZXggPSAqdmlj
dGltSXRlcmF0b3I7CisgICAgICAgIEFTU0VSVCghbV91bnNwaWxsYWJsZVRtcHMuZ2V0KHZpY3Rp
bUluZGV4KSk7CisgICAgICAgIEFTU0VSVCghaXNQcmVjb2xvcmVkKHZpY3RpbUluZGV4KSk7CiAg
ICAgICAgIGlmICh0cmFjZURlYnVnKQogICAgICAgICAgICAgZGF0YUxvZ0xuKCJTZWxlY3Rpbmcg
c3BpbGwgIiwgdmljdGltSW5kZXgpOwotICAgICAgICBBU1NFUlQoIWlzUHJlY29sb3JlZCh2aWN0
aW1JbmRleCkpOwogICAgICAgICByZXR1cm4gdmljdGltSW5kZXg7CiAgICAgfQogCkBAIC01MTIs
MTQgKzYxNiwxNCBAQCBwcm90ZWN0ZWQ6CiAgICAgICAgICAgICBtX2NvbG9yZWRUbXAuY2xlYXIo
KTsKICAgICB9CiAKLSAgICBib29sIGFkZEludGVyZmVyZW5jZUVkZ2UoSW50ZXJmZXJlbmNlRWRn
ZVR5cGUgZWRnZSkKKyAgICBib29sIGFkZEludGVyZmVyZW5jZUVkZ2UoSW5kZXhUeXBlIHUsIElu
ZGV4VHlwZSB2KQogICAgIHsKLSAgICAgICAgcmV0dXJuIG1faW50ZXJmZXJlbmNlRWRnZXMuYWRk
KGVkZ2UpLmlzTmV3RW50cnk7CisgICAgICAgIHJldHVybiBtX2ludGVyZmVyZW5jZUVkZ2VzLmFk
ZEFuZFJldHVybklzTmV3RW50cnkodSwgdik7CiAgICAgfQogCi0gICAgYm9vbCBoYXNJbnRlcmZl
cmVuY2VFZGdlKEludGVyZmVyZW5jZUVkZ2VUeXBlIGVkZ2UpCisgICAgYm9vbCBoYXNJbnRlcmZl
cmVuY2VFZGdlKEluZGV4VHlwZSB1LCBJbmRleFR5cGUgdikKICAgICB7Ci0gICAgICAgIHJldHVy
biBtX2ludGVyZmVyZW5jZUVkZ2VzLmNvbnRhaW5zKGVkZ2UpOworICAgICAgICByZXR1cm4gbV9p
bnRlcmZlcmVuY2VFZGdlcy5jb250YWlucyh1LCB2KTsKICAgICB9CiAKICAgICB2b2lkIGNsZWFy
SW50ZXJmZXJlbmNlRWRnZXMoKQpAQCAtNTMyLDEwICs2MzYsMTEgQEAgcHJvdGVjdGVkOgogICAg
ICAgICBvdXQucHJpbnQoImdyYXBoIEludGVyZmVyZW5jZUdyYXBoIHsgXG4iKTsKIAogICAgICAg
ICBIYXNoU2V0PFRtcD4gdG1wc1dpdGhJbnRlcmZlcmVuY2VzOwotICAgICAgICBmb3IgKGNvbnN0
IGF1dG8mIGVkZ2UgOiBtX2ludGVyZmVyZW5jZUVkZ2VzKSB7Ci0gICAgICAgICAgICB0bXBzV2l0
aEludGVyZmVyZW5jZXMuYWRkKFRtcE1hcHBlcjo6dG1wRnJvbUFic29sdXRlSW5kZXgoZWRnZS5m
aXJzdCgpKSk7Ci0gICAgICAgICAgICB0bXBzV2l0aEludGVyZmVyZW5jZXMuYWRkKFRtcE1hcHBl
cjo6dG1wRnJvbUFic29sdXRlSW5kZXgoZWRnZS5zZWNvbmQoKSkpOwotICAgICAgICB9CisKKyAg
ICAgICAgbV9pbnRlcmZlcmVuY2VFZGdlcy5mb3JFYWNoKFsmdG1wc1dpdGhJbnRlcmZlcmVuY2Vz
XSAoc3RkOjpwYWlyPEluZGV4VHlwZSwgSW5kZXhUeXBlPiBlZGdlKSB7CisgICAgICAgICAgICB0
bXBzV2l0aEludGVyZmVyZW5jZXMuYWRkKFRtcE1hcHBlcjo6dG1wRnJvbUFic29sdXRlSW5kZXgo
ZWRnZS5maXJzdCkpOworICAgICAgICAgICAgdG1wc1dpdGhJbnRlcmZlcmVuY2VzLmFkZChUbXBN
YXBwZXI6OnRtcEZyb21BYnNvbHV0ZUluZGV4KGVkZ2Uuc2Vjb25kKSk7CisgICAgICAgIH0pOwog
CiAgICAgICAgIGZvciAoY29uc3QgYXV0byYgdG1wIDogdG1wc1dpdGhJbnRlcmZlcmVuY2VzKSB7
CiAgICAgICAgICAgICB1bnNpZ25lZCB0bXBJbmRleCA9IFRtcE1hcHBlcjo6YWJzb2x1dGVJbmRl
eCh0bXApOwpAQCAtNTQ1LDIwICs2NTAsMjEgQEAgcHJvdGVjdGVkOgogICAgICAgICAgICAgICAg
IG91dC5wcmludCgiICAgICIsIHRtcC5pbnRlcm5hbFZhbHVlKCksICIgW2xhYmVsPVwiIiwgdG1w
LCAiXCJdO1xuIik7CiAgICAgICAgIH0KIAotICAgICAgICBmb3IgKGNvbnN0IGF1dG8mIGVkZ2Ug
OiBtX2ludGVyZmVyZW5jZUVkZ2VzKQotICAgICAgICAgICAgb3V0LnByaW50KCIgICAgIiwgZWRn
ZS5maXJzdCgpLCAiIC0tICIsIGVkZ2Uuc2Vjb25kKCksICI7XG4iKTsKKyAgICAgICAgbV9pbnRl
cmZlcmVuY2VFZGdlcy5mb3JFYWNoKFsmb3V0XSAoc3RkOjpwYWlyPEluZGV4VHlwZSwgSW5kZXhU
eXBlPiBlZGdlKSB7CisgICAgICAgICAgICBvdXQucHJpbnQoIiAgICAiLCBlZGdlLmZpcnN0LCAi
IC0tICIsIGVkZ2Uuc2Vjb25kLCAiO1xuIik7CisgICAgICAgIH0pOwogICAgICAgICBvdXQucHJp
bnQoIn1cbiIpOwogICAgIH0KIAogICAgIFZlY3RvcjxSZWc+IG1fcmVnc0luUHJpb3JpdHlPcmRl
cjsKICAgICBJbmRleFR5cGUgbV9sYXN0UHJlY29sb3JlZFJlZ2lzdGVySW5kZXggeyAwIH07CiAK
LSAgICB0eXBlbmFtZSBJbnRlcmZlcmVuY2VFZGdlVHlwZTo6SW50ZXJmZXJlbmNlU2V0IG1faW50
ZXJmZXJlbmNlRWRnZXM7CisgICAgSW50ZXJmZXJlbmNlU2V0IG1faW50ZXJmZXJlbmNlRWRnZXM7
CiAKICAgICBWZWN0b3I8VmVjdG9yPEluZGV4VHlwZSwgMCwgVW5zYWZlVmVjdG9yT3ZlcmZsb3cs
IDQ+LCAwLCBVbnNhZmVWZWN0b3JPdmVyZmxvdz4gbV9hZGphY2VuY3lMaXN0OwogICAgIFZlY3Rv
cjxJbmRleFR5cGUsIDAsIFVuc2FmZVZlY3Rvck92ZXJmbG93PiBtX2RlZ3JlZXM7CiAKLSAgICB1
c2luZyBJbmRleFR5cGVTZXQgPSBIYXNoU2V0PEluZGV4VHlwZSwgRGVmYXVsdEhhc2g8SW5kZXhU
eXBlPiwgV1RGOjpVbnNpZ25lZFdpdGhaZXJvS2V5SGFzaFRyYWl0czxJbmRleFR5cGU+PjsKKyAg
ICB1c2luZyBJbmRleFR5cGVTZXQgPSBTbWFsbFNldDxJbmRleFR5cGUsIEludEhhc2g8SW5kZXhU
eXBlPj47CiAKICAgICBIYXNoTWFwPEluZGV4VHlwZSwgSW5kZXhUeXBlU2V0LCBEZWZhdWx0SGFz
aDxJbmRleFR5cGU+LCBXVEY6OlVuc2lnbmVkV2l0aFplcm9LZXlIYXNoVHJhaXRzPEluZGV4VHlw
ZT4+IG1fYmlhc2VzOwogCkBAIC01NzEsNyArNjc3LDcgQEAgcHJvdGVjdGVkOgogICAgIFZlY3Rv
cjxNb3ZlT3BlcmFuZHMsIDAsIFVuc2FmZVZlY3Rvck92ZXJmbG93PiBtX2NvYWxlc2NpbmdDYW5k
aWRhdGVzOwogCiAgICAgLy8gTGlzdCBvZiBldmVyeSBtb3ZlIGluc3RydWN0aW9uIGFzc29jaWF0
ZWQgd2l0aCBhIFRtcC4KLSAgICBWZWN0b3I8SW5kZXhUeXBlU2V0PiBtX21vdmVMaXN0OworICAg
IFZlY3RvcjxTbWFsbFNldDx1bnNpZ25lZCwgSW50SGFzaDxJbmRleFR5cGU+Pj4gbV9tb3ZlTGlz
dDsKIAogICAgIC8vIENvbG9ycy4KICAgICBWZWN0b3I8UmVnLCAwLCBVbnNhZmVWZWN0b3JPdmVy
Zmxvdz4gbV9jb2xvcmVkVG1wOwpAQCAtNTk1LDE3ICs3MDEsMTggQEAgcHJvdGVjdGVkOgogICAg
IC8vIFRoZSBtYXBwaW5nIG9mIFRtcCB0byB0aGVpciBhbGlhcyBmb3IgTW92ZXMgdGhhdCBhcmUg
YWx3YXlzIGNvYWxlc2NpbmcgcmVnYXJkbGVzcyBvZiBzcGlsbGluZy4KICAgICBWZWN0b3I8SW5k
ZXhUeXBlLCAwLCBVbnNhZmVWZWN0b3JPdmVyZmxvdz4gbV9jb2FsZXNjZWRUbXBzQXRTcGlsbDsK
IAotICAgIGNvbnN0IEhhc2hTZXQ8dW5zaWduZWQ+JiBtX3Vuc3BpbGxhYmxlVG1wczsKLSAgICBj
b25zdCBVc2VDb3VudHM8VG1wPiYgbV91c2VDb3VudHM7CisgICAgY29uc3QgQml0VmVjdG9yJiBt
X3Vuc3BpbGxhYmxlVG1wczsKKyAgICBjb25zdCBVc2VDb3VudHMmIG1fdXNlQ291bnRzOwogICAg
IENvZGUmIG1fY29kZTsKIAogICAgIFZlY3RvcjxUbXAsIDQ+IG1fcGlubmVkUmVnczsKIH07CiAK
LXRlbXBsYXRlIDx0eXBlbmFtZSBJbmRleFR5cGUsIHR5cGVuYW1lIFRtcE1hcHBlciwgdHlwZW5h
bWUgSW50ZXJmZXJlbmNlRWRnZT4KLWNsYXNzIEJyaWdncyA6IHB1YmxpYyBBYnN0cmFjdENvbG9y
aW5nQWxsb2NhdG9yPEluZGV4VHlwZSwgVG1wTWFwcGVyLCBJbnRlcmZlcmVuY2VFZGdlPiB7Ci0g
ICAgdXNpbmcgQmFzZSA9IEFic3RyYWN0Q29sb3JpbmdBbGxvY2F0b3I8SW5kZXhUeXBlLCBUbXBN
YXBwZXIsIEludGVyZmVyZW5jZUVkZ2U+OwordGVtcGxhdGUgPHR5cGVuYW1lIEluZGV4VHlwZSwg
dHlwZW5hbWUgSW50ZXJmZXJlbmNlU2V0LCBCYW5rIGJhbms+CitjbGFzcyBCcmlnZ3MgOiBwdWJs
aWMgQWJzdHJhY3RDb2xvcmluZ0FsbG9jYXRvcjxJbmRleFR5cGUsIEludGVyZmVyZW5jZVNldCwg
YmFuaz4geworICAgIHVzaW5nIEJhc2UgPSBBYnN0cmFjdENvbG9yaW5nQWxsb2NhdG9yPEluZGV4
VHlwZSwgSW50ZXJmZXJlbmNlU2V0LCBiYW5rPjsKIHByb3RlY3RlZDoKKyAgICB1c2luZyBUbXBN
YXBwZXIgPSB0eXBlbmFtZSBCYXNlOjpUbXBNYXBwZXI7CiAgICAgdXNpbmcgQmFzZTo6bV9pc09u
U2VsZWN0U3RhY2s7CiAgICAgdXNpbmcgQmFzZTo6bV9zZWxlY3RTdGFjazsKICAgICB1c2luZyBC
YXNlOjptX3NpbXBsaWZ5V29ya2xpc3Q7CkBAIC02MzUsMTEgKzc0MiwxMiBAQCBwcm90ZWN0ZWQ6
CiAgICAgdXNpbmcgQmFzZTo6aGFzQmVlblNpbXBsaWZpZWQ7CiAgICAgdXNpbmcgQmFzZTo6YWRk
VG9TcGlsbDsKICAgICB1c2luZyBCYXNlOjphZGRCaWFzOworICAgIHVzaW5nIEJhc2U6Om1faW50
ZXJmZXJlbmNlRWRnZXM7CiAgICAgdXNpbmcgQmFzZTo6bV9waW5uZWRSZWdzOwogICAgIHVzaW5n
IEJhc2U6Om1fcmVnc0luUHJpb3JpdHlPcmRlcjsKIAogcHVibGljOgotICAgIEJyaWdncyhDb2Rl
JiBjb2RlLCBjb25zdCBWZWN0b3I8UmVnPiYgcmVnc0luUHJpb3JpdHlPcmRlciwgSW5kZXhUeXBl
IGxhc3RQcmVjb2xvcmVkUmVnaXN0ZXJJbmRleCwgdW5zaWduZWQgdG1wQXJyYXlTaXplLCBjb25z
dCBIYXNoU2V0PHVuc2lnbmVkPiYgdW5zcGlsbGFibGVUbXBzLCBjb25zdCBVc2VDb3VudHM8VG1w
PiYgdXNlQ291bnRzKQorICAgIEJyaWdncyhDb2RlJiBjb2RlLCBjb25zdCBWZWN0b3I8UmVnPiYg
cmVnc0luUHJpb3JpdHlPcmRlciwgSW5kZXhUeXBlIGxhc3RQcmVjb2xvcmVkUmVnaXN0ZXJJbmRl
eCwgdW5zaWduZWQgdG1wQXJyYXlTaXplLCBjb25zdCBCaXRWZWN0b3ImIHVuc3BpbGxhYmxlVG1w
cywgY29uc3QgVXNlQ291bnRzJiB1c2VDb3VudHMpCiAgICAgICAgIDogQmFzZShjb2RlLCByZWdz
SW5Qcmlvcml0eU9yZGVyLCBsYXN0UHJlY29sb3JlZFJlZ2lzdGVySW5kZXgsIHRtcEFycmF5U2l6
ZSwgdW5zcGlsbGFibGVUbXBzLCB1c2VDb3VudHMpCiAgICAgewogICAgIH0KQEAgLTY5MSw3ICs3
OTksNyBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIHVuc2ln
bmVkIGRlZ3JlZSA9IG1fZGVncmVlc1tpXTsKICAgICAgICAgICAgICAgICBpZiAoZGVncmVlID49
IHJlZ2lzdGVyQ291bnQpIHsKLSAgICAgICAgICAgICAgICAgICAgQVNTRVJUKG1fdW5zcGlsbGFi
bGVUbXBzLmNvbnRhaW5zKGkpIHx8IG1fc3BpbGxXb3JrbGlzdC5jb250YWlucyhpKSk7CisgICAg
ICAgICAgICAgICAgICAgIEFTU0VSVChtX3Vuc3BpbGxhYmxlVG1wcy5nZXQoaSkgfHwgbV9zcGls
bFdvcmtsaXN0LmNvbnRhaW5zKGkpKTsKICAgICAgICAgICAgICAgICAgICAgQVNTRVJUKCFtX3Np
bXBsaWZ5V29ya2xpc3QuY29udGFpbnMoaSkpOwogICAgICAgICAgICAgICAgICAgICBjb250aW51
ZTsKICAgICAgICAgICAgICAgICB9CkBAIC03NDcsOSArODU1LDcgQEAgcHJvdGVjdGVkOgogICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9CiAKLSAgICAgICAgaWYgKGlzUHJlY29s
b3JlZCh2KQotICAgICAgICAgICAgfHwgaGFzSW50ZXJmZXJlbmNlRWRnZShJbnRlcmZlcmVuY2VF
ZGdlKHUsIHYpKSkgewotCisgICAgICAgIGlmIChpc1ByZWNvbG9yZWQodikgfHwgaGFzSW50ZXJm
ZXJlbmNlRWRnZSh1LCB2KSkgewogICAgICAgICAgICAgLy8gTm8gbmVlZCB0byBldmVyIGNvbnNp
ZGVyIHRoaXMgbW92ZSBhZ2FpbiBpZiBpdCBpbnRlcmZlcmVzLgogICAgICAgICAgICAgLy8gTm8g
Y29hbGVzY2luZyB3aWxsIHJlbW92ZSB0aGUgaW50ZXJmZXJlbmNlLgogICAgICAgICAgICAgbW92
ZUluZGV4ID0gVUlOVF9NQVg7CkBAIC03ODgsNyArODk0LDggQEAgcHJvdGVjdGVkOgogICAgICAg
ICBtX2NvYWxlc2NlZFRtcHNbdl0gPSB1OwogCiAgICAgICAgIGF1dG8mIHZNb3ZlcyA9IG1fbW92
ZUxpc3Rbdl07Ci0gICAgICAgIG1fbW92ZUxpc3RbdV0uYWRkKHZNb3Zlcy5iZWdpbigpLCB2TW92
ZXMuZW5kKCkpOworICAgICAgICBmb3IgKHVuc2lnbmVkIG1vdmUgOiB2TW92ZXMpCisgICAgICAg
ICAgICBtX21vdmVMaXN0W3VdLmFkZChtb3ZlKTsKIAogICAgICAgICBmb3JFYWNoQWRqYWNlbnQo
diwgW3RoaXMsIHVdIChJbmRleFR5cGUgYWRqYWNlbnRUbXBJbmRleCkgewogICAgICAgICAgICAg
aWYgKGFkZEVkZ2VEaXN0aW5jdFdpdGhvdXREZWdyZWVDaGFuZ2UoYWRqYWNlbnRUbXBJbmRleCwg
dSkpIHsKQEAgLTkzOCw3ICsxMDQ1LDcgQEAgcHJvdGVjdGVkOgogICAgICAgICAgICAgICAgIGRh
dGFMb2dMbigiTW92aW5nIHRtcCAiLCB0bXBJbmRleCwgIiBmcm9tIHNwaWxsIGxpc3QgdG8gc2lt
cGxpZnkgbGlzdCBiZWNhdXNlIGl0J3MgZGVncmVlIGlzIG5vdyBsZXNzIHRoYW4gayIpOwogCiAg
ICAgICAgICAgICBpZiAoQVNTRVJUX0VOQUJMRUQpCi0gICAgICAgICAgICAgICAgQVNTRVJUKG1f
dW5zcGlsbGFibGVUbXBzLmNvbnRhaW5zKHRtcEluZGV4KSB8fCBtX3NwaWxsV29ya2xpc3QuY29u
dGFpbnModG1wSW5kZXgpKTsKKyAgICAgICAgICAgICAgICBBU1NFUlQobV91bnNwaWxsYWJsZVRt
cHMuZ2V0KHRtcEluZGV4KSB8fCBtX3NwaWxsV29ya2xpc3QuY29udGFpbnModG1wSW5kZXgpKTsK
ICAgICAgICAgICAgIG1fc3BpbGxXb3JrbGlzdC5xdWlja0NsZWFyKHRtcEluZGV4KTsKIAogICAg
ICAgICAgICAgQVNTRVJUKCFtX3NpbXBsaWZ5V29ya2xpc3QuY29udGFpbnModG1wSW5kZXgpKTsK
QEAgLTk1NiwxMCArMTA2MywxMSBAQCBwcm90ZWN0ZWQ6CiAgICAgTW92ZVNldCBtX3dvcmtsaXN0
TW92ZXM7CiB9OwogCi10ZW1wbGF0ZSA8dHlwZW5hbWUgSW5kZXhUeXBlLCB0eXBlbmFtZSBUbXBN
YXBwZXIsIHR5cGVuYW1lIEludGVyZmVyZW5jZUVkZ2U+Ci1jbGFzcyBJUkMgOiBwdWJsaWMgQWJz
dHJhY3RDb2xvcmluZ0FsbG9jYXRvcjxJbmRleFR5cGUsIFRtcE1hcHBlciwgSW50ZXJmZXJlbmNl
RWRnZT4gewotICAgIHVzaW5nIEJhc2UgPSBBYnN0cmFjdENvbG9yaW5nQWxsb2NhdG9yPEluZGV4
VHlwZSwgVG1wTWFwcGVyLCBJbnRlcmZlcmVuY2VFZGdlPjsKK3RlbXBsYXRlIDx0eXBlbmFtZSBJ
bmRleFR5cGUsIHR5cGVuYW1lIEludGVyZmVyZW5jZVNldCwgQmFuayBiYW5rPgorY2xhc3MgSVJD
IDogcHVibGljIEFic3RyYWN0Q29sb3JpbmdBbGxvY2F0b3I8SW5kZXhUeXBlLCBJbnRlcmZlcmVu
Y2VTZXQsIGJhbms+IHsKKyAgICB1c2luZyBCYXNlID0gQWJzdHJhY3RDb2xvcmluZ0FsbG9jYXRv
cjxJbmRleFR5cGUsIEludGVyZmVyZW5jZVNldCwgYmFuaz47CiBwcm90ZWN0ZWQ6CisgICAgdXNp
bmcgVG1wTWFwcGVyID0gdHlwZW5hbWUgQmFzZTo6VG1wTWFwcGVyOwogICAgIHVzaW5nIEJhc2U6
Om1faXNPblNlbGVjdFN0YWNrOwogICAgIHVzaW5nIEJhc2U6Om1fc2VsZWN0U3RhY2s7CiAgICAg
dXNpbmcgQmFzZTo6bV9zaW1wbGlmeVdvcmtsaXN0OwpAQCAtOTkxLDExICsxMDk5LDEyIEBAIHBy
b3RlY3RlZDoKICAgICB1c2luZyBCYXNlOjptX2FkamFjZW5jeUxpc3Q7CiAgICAgdXNpbmcgQmFz
ZTo6ZHVtcEludGVyZmVyZW5jZUdyYXBoSW5Eb3Q7CiAgICAgdXNpbmcgQmFzZTo6YWRkQmlhczsK
KyAgICB1c2luZyBCYXNlOjptX2ludGVyZmVyZW5jZUVkZ2VzOwogICAgIHVzaW5nIEJhc2U6Om1f
cGlubmVkUmVnczsKICAgICB1c2luZyBCYXNlOjptX3JlZ3NJblByaW9yaXR5T3JkZXI7CiAKIHB1
YmxpYzoKLSAgICBJUkMoQ29kZSYgY29kZSwgY29uc3QgVmVjdG9yPFJlZz4mIHJlZ3NJblByaW9y
aXR5T3JkZXIsIEluZGV4VHlwZSBsYXN0UHJlY29sb3JlZFJlZ2lzdGVySW5kZXgsIHVuc2lnbmVk
IHRtcEFycmF5U2l6ZSwgY29uc3QgSGFzaFNldDx1bnNpZ25lZD4mIHVuc3BpbGxhYmxlVG1wcywg
Y29uc3QgVXNlQ291bnRzPFRtcD4mIHVzZUNvdW50cykKKyAgICBJUkMoQ29kZSYgY29kZSwgY29u
c3QgVmVjdG9yPFJlZz4mIHJlZ3NJblByaW9yaXR5T3JkZXIsIEluZGV4VHlwZSBsYXN0UHJlY29s
b3JlZFJlZ2lzdGVySW5kZXgsIHVuc2lnbmVkIHRtcEFycmF5U2l6ZSwgY29uc3QgQml0VmVjdG9y
JiB1bnNwaWxsYWJsZVRtcHMsIGNvbnN0IFVzZUNvdW50cyYgdXNlQ291bnRzKQogICAgICAgICA6
IEJhc2UoY29kZSwgcmVnc0luUHJpb3JpdHlPcmRlciwgbGFzdFByZWNvbG9yZWRSZWdpc3Rlcklu
ZGV4LCB0bXBBcnJheVNpemUsIHVuc3BpbGxhYmxlVG1wcywgdXNlQ291bnRzKQogICAgIHsKICAg
ICB9CkBAIC0xMDkzLDggKzEyMDIsNyBAQCBwcm90ZWN0ZWQ6CiAKICAgICAgICAgICAgIGlmICh0
cmFjZURlYnVnKQogICAgICAgICAgICAgICAgIGRhdGFMb2coIiAgICBDb2FsZXNjZWRcbiIpOwot
ICAgICAgICB9IGVsc2UgaWYgKGlzUHJlY29sb3JlZCh2KQotICAgICAgICAgICAgfHwgaGFzSW50
ZXJmZXJlbmNlRWRnZShJbnRlcmZlcmVuY2VFZGdlKHUsIHYpKSkgeworICAgICAgICB9IGVsc2Ug
aWYgKGlzUHJlY29sb3JlZCh2KSB8fCBoYXNJbnRlcmZlcmVuY2VFZGdlKHUsIHYpKSB7CiAgICAg
ICAgICAgICBhZGRXb3JrTGlzdCh1KTsKICAgICAgICAgICAgIGFkZFdvcmtMaXN0KHYpOwogCkBA
IC0xMTMzLDcgKzEyNDEsOCBAQCBwcm90ZWN0ZWQ6CiAgICAgICAgIG1fY29hbGVzY2VkVG1wc1t2
XSA9IHU7CiAKICAgICAgICAgYXV0byYgdk1vdmVzID0gbV9tb3ZlTGlzdFt2XTsKLSAgICAgICAg
bV9tb3ZlTGlzdFt1XS5hZGQodk1vdmVzLmJlZ2luKCksIHZNb3Zlcy5lbmQoKSk7CisgICAgICAg
IGZvciAodW5zaWduZWQgbW92ZSA6IHZNb3ZlcykKKyAgICAgICAgICAgIG1fbW92ZUxpc3RbdV0u
YWRkKG1vdmUpOwogCiAgICAgICAgIGZvckVhY2hBZGphY2VudCh2LCBbdGhpcywgdV0gKEluZGV4
VHlwZSBhZGphY2VudFRtcEluZGV4KSB7CiAgICAgICAgICAgICBpZiAoYWRkRWRnZURpc3RpbmN0
V2l0aG91dERlZ3JlZUNoYW5nZShhZGphY2VudFRtcEluZGV4LCB1KSkgewpAQCAtMTM5NywxMCAr
MTUwNiwxMSBAQCBwcm90ZWN0ZWQ6CiB9OwogCiAvLyBUaGlzIHBlcmZvcm0gYWxsIHRoZSB0YXNr
cyB0aGF0IGFyZSBzcGVjaWZpYyB0byBjZXJ0YWluIHJlZ2lzdGVyIHR5cGUuCi10ZW1wbGF0ZTxC
YW5rIGJhbmssIHRlbXBsYXRlPHR5cGVuYW1lLCB0eXBlbmFtZSwgdHlwZW5hbWU+IGNsYXNzIEFs
bG9jYXRvclR5cGUsIHR5cGVuYW1lIEludGVyZmVyZW5jZUVkZ2VUeXBlPgotY2xhc3MgQ29sb3Jp
bmdBbGxvY2F0b3IgOiBwdWJsaWMgQWxsb2NhdG9yVHlwZTx1bnNpZ25lZCwgQWJzb2x1dGVUbXBN
YXBwZXI8YmFuaz4sIEludGVyZmVyZW5jZUVkZ2VUeXBlPiB7Ci0gICAgdXNpbmcgVG1wTWFwcGVy
ID0gQWJzb2x1dGVUbXBNYXBwZXI8YmFuaz47Ci0gICAgdXNpbmcgQmFzZSA9IEFsbG9jYXRvclR5
cGU8dW5zaWduZWQsIFRtcE1hcHBlciwgSW50ZXJmZXJlbmNlRWRnZVR5cGU+OwordGVtcGxhdGU8
dHlwZW5hbWUgSW5kZXhUeXBlLCBCYW5rIGJhbmssIHRlbXBsYXRlPHR5cGVuYW1lLCB0eXBlbmFt
ZSwgQmFuaz4gY2xhc3MgQWxsb2NhdG9yVHlwZSwgdHlwZW5hbWUgSW50ZXJmZXJlbmNlU2V0Pgor
Y2xhc3MgQ29sb3JpbmdBbGxvY2F0b3IgOiBwdWJsaWMgQWxsb2NhdG9yVHlwZTxJbmRleFR5cGUs
IEludGVyZmVyZW5jZVNldCwgYmFuaz4geworICAgIHVzaW5nIEJhc2UgPSBBbGxvY2F0b3JUeXBl
PEluZGV4VHlwZSwgSW50ZXJmZXJlbmNlU2V0LCBiYW5rPjsKKyAgICB1c2luZyBUbXBNYXBwZXIg
PSB0eXBlbmFtZSBCYXNlOjpUbXBNYXBwZXI7CisgICAgdXNpbmcgQmFzZTo6dG1wVG9JbmRleDsK
ICAgICB1c2luZyBCYXNlOjptX2lzT25TZWxlY3RTdGFjazsKICAgICB1c2luZyBCYXNlOjptX3Nl
bGVjdFN0YWNrOwogICAgIHVzaW5nIEJhc2U6Om1fc2ltcGxpZnlXb3JrbGlzdDsKQEAgLTE0MjMs
MTIgKzE1MzMsMTMgQEAgY2xhc3MgQ29sb3JpbmdBbGxvY2F0b3IgOiBwdWJsaWMgQWxsb2NhdG9y
VHlwZTx1bnNpZ25lZCwgQWJzb2x1dGVUbXBNYXBwZXI8YmFuaz4KICAgICB1c2luZyBCYXNlOjpo
YXNJbnRlcmZlcmVuY2VFZGdlOwogICAgIHVzaW5nIEJhc2U6OmdldEFsaWFzOwogICAgIHVzaW5n
IEJhc2U6OmFkZEVkZ2U7CisgICAgdXNpbmcgQmFzZTo6bV9pbnRlcmZlcmVuY2VFZGdlczsKICAg
ICB1c2luZyBCYXNlOjptX3Bpbm5lZFJlZ3M7CiAgICAgdXNpbmcgQmFzZTo6bV9yZWdzSW5Qcmlv
cml0eU9yZGVyOwogCiBwdWJsaWM6CiAKLSAgICBDb2xvcmluZ0FsbG9jYXRvcihDb2RlJiBjb2Rl
LCBUbXBXaWR0aCYgdG1wV2lkdGgsIGNvbnN0IFVzZUNvdW50czxUbXA+JiB1c2VDb3VudHMsIGNv
bnN0IEhhc2hTZXQ8dW5zaWduZWQ+JiB1bnNwaWxsYWJsZVRtcCkKKyAgICBDb2xvcmluZ0FsbG9j
YXRvcihDb2RlJiBjb2RlLCBUbXBXaWR0aCYgdG1wV2lkdGgsIGNvbnN0IFVzZUNvdW50cyYgdXNl
Q291bnRzLCBjb25zdCBCaXRWZWN0b3ImIHVuc3BpbGxhYmxlVG1wKQogICAgICAgICA6IEJhc2Uo
Y29kZSwgY29kZS5yZWdzSW5Qcmlvcml0eU9yZGVyKGJhbmspLCBUbXBNYXBwZXI6Omxhc3RNYWNo
aW5lUmVnaXN0ZXJJbmRleCgpLCB0bXBBcnJheVNpemUoY29kZSksIHVuc3BpbGxhYmxlVG1wLCB1
c2VDb3VudHMpCiAgICAgICAgICwgbV90bXBXaWR0aCh0bXBXaWR0aCkKICAgICB7CkBAIC0xNDQw
LDEzICsxNTUxLDE1IEBAIHB1YmxpYzoKICAgICAgICAgICAgIH0KICAgICAgICAgfQogCisgICAg
ICAgIG1faW50ZXJmZXJlbmNlRWRnZXMuc2V0TWF4VG1wSW5kZXgoQWJzb2x1dGVUbXBNYXBwZXI8
YmFuaz46OmFic29sdXRlSW5kZXgobV9jb2RlLm51bVRtcHMoYmFuaykpKTsKKwogICAgICAgICBp
bml0aWFsaXplUHJlY29sb3JlZFRtcCgpOwogICAgICAgICBidWlsZCgpOwogICAgIH0KIAogICAg
IFRtcCBnZXRBbGlhcyhUbXAgdG1wKSBjb25zdAogICAgIHsKLSAgICAgICAgcmV0dXJuIFRtcE1h
cHBlcjo6dG1wRnJvbUFic29sdXRlSW5kZXgoZ2V0QWxpYXMoVG1wTWFwcGVyOjphYnNvbHV0ZUlu
ZGV4KHRtcCkpKTsKKyAgICAgICAgcmV0dXJuIFRtcE1hcHBlcjo6dG1wRnJvbUFic29sdXRlSW5k
ZXgoZ2V0QWxpYXModG1wVG9JbmRleCh0bXApKSk7CiAgICAgfQogCiAgICAgLy8gVGhpcyB0ZWxs
cyB5b3UgaWYgYSBNb3ZlIHdpbGwgYmUgY29hbGVzY2FibGUgaWYgdGhlIHNyYyBhbmQgZHN0IGVu
ZCB1cCBtYXRjaGluZy4gVGhpcyBtZXRob2QKQEAgLTE0NjksOCArMTU4Miw4IEBAIHB1YmxpYzoK
ICAgICAgICAgaWYgKG1fY29hbGVzY2VkVG1wc0F0U3BpbGwuaXNFbXB0eSgpKQogICAgICAgICAg
ICAgcmV0dXJuIHRtcDsKIAotICAgICAgICB1bnNpZ25lZCBhbGlhc0luZGV4ID0gVG1wTWFwcGVy
OjphYnNvbHV0ZUluZGV4KHRtcCk7Ci0gICAgICAgIHdoaWxlICh1bnNpZ25lZCBuZXh0QWxpYXNJ
bmRleCA9IG1fY29hbGVzY2VkVG1wc0F0U3BpbGxbYWxpYXNJbmRleF0pCisgICAgICAgIEluZGV4
VHlwZSBhbGlhc0luZGV4ID0gdG1wVG9JbmRleCh0bXApOworICAgICAgICB3aGlsZSAoSW5kZXhU
eXBlIG5leHRBbGlhc0luZGV4ID0gbV9jb2FsZXNjZWRUbXBzQXRTcGlsbFthbGlhc0luZGV4XSkK
ICAgICAgICAgICAgIGFsaWFzSW5kZXggPSBuZXh0QWxpYXNJbmRleDsKIAogICAgICAgICBUbXAg
YWxpYXMgPSBUbXBNYXBwZXI6OnRtcEZyb21BYnNvbHV0ZUluZGV4KGFsaWFzSW5kZXgpOwpAQCAt
MTUyNyw3ICsxNjQwLDcgQEAgcHVibGljOgogICAgICAgICBjb25zdCBDb2xsZWN0aW9uJiBtX2Nv
bGxlY3Rpb247CiAgICAgfTsKIAotICAgIEluZGV4VG9UbXBJdGVyYWJsZUFkYXB0b3I8VmVjdG9y
PHVuc2lnbmVkPj4gc3BpbGxlZFRtcHMoKSBjb25zdCB7IHJldHVybiBtX3NwaWxsZWRUbXBzOyB9
CisgICAgSW5kZXhUb1RtcEl0ZXJhYmxlQWRhcHRvcjxWZWN0b3I8SW5kZXhUeXBlPj4gc3BpbGxl
ZFRtcHMoKSBjb25zdCB7IHJldHVybiBtX3NwaWxsZWRUbXBzOyB9CiAKICAgICBib29sIHJlcXVp
cmVzU3BpbGxpbmcoKSBjb25zdCB7IHJldHVybiAhbV9zcGlsbGVkVG1wcy5pc0VtcHR5KCk7IH0K
IApAQCAtMTU4NCwxMCArMTY5NywxMCBAQCBJR05PUkVfR0NDX1dBUk5JTkdTX0VORAogICAgICAg
ICBpZiAobGVmdFRtcC5pc0dQKCkgIT0gKGJhbmsgPT0gR1ApIHx8IHJpZ2h0VG1wLmlzR1AoKSAh
PSAoYmFuayA9PSBHUCkpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICAgICAgdW5z
aWduZWQgbGVmdEluZGV4ID0gVG1wTWFwcGVyOjphYnNvbHV0ZUluZGV4KGxlZnRUbXApOwotICAg
ICAgICB1bnNpZ25lZCByaWdodEluZGV4ID0gVG1wTWFwcGVyOjphYnNvbHV0ZUluZGV4KHJpZ2h0
VG1wKTsKKyAgICAgICAgSW5kZXhUeXBlIGxlZnRJbmRleCA9IHRtcFRvSW5kZXgobGVmdFRtcCk7
CisgICAgICAgIEluZGV4VHlwZSByaWdodEluZGV4ID0gdG1wVG9JbmRleChyaWdodFRtcCk7CiAK
LSAgICAgICAgcmV0dXJuICFoYXNJbnRlcmZlcmVuY2VFZGdlKEludGVyZmVyZW5jZUVkZ2VUeXBl
KGxlZnRJbmRleCwgcmlnaHRJbmRleCkpOworICAgICAgICByZXR1cm4gIWhhc0ludGVyZmVyZW5j
ZUVkZ2UobGVmdEluZGV4LCByaWdodEluZGV4KTsKICAgICB9CiAKICAgICB2b2lkIGFkZFRvTG93
UHJpb3JpdHlDb2FsZXNjaW5nQ2FuZGlkYXRlcyhBcmcgbGVmdCwgQXJnIHJpZ2h0KQpAQCAtMTU5
Niw4ICsxNzA5LDggQEAgSUdOT1JFX0dDQ19XQVJOSU5HU19FTkQKICAgICAgICAgVG1wIGxlZnRU
bXAgPSBsZWZ0LnRtcCgpOwogICAgICAgICBUbXAgcmlnaHRUbXAgPSByaWdodC50bXAoKTsKIAot
ICAgICAgICB1bnNpZ25lZCBsZWZ0SW5kZXggPSBUbXBNYXBwZXI6OmFic29sdXRlSW5kZXgobGVm
dFRtcCk7Ci0gICAgICAgIHVuc2lnbmVkIHJpZ2h0SW5kZXggPSBUbXBNYXBwZXI6OmFic29sdXRl
SW5kZXgocmlnaHRUbXApOworICAgICAgICBJbmRleFR5cGUgbGVmdEluZGV4ID0gdG1wVG9JbmRl
eChsZWZ0VG1wKTsKKyAgICAgICAgSW5kZXhUeXBlIHJpZ2h0SW5kZXggPSB0bXBUb0luZGV4KHJp
Z2h0VG1wKTsKIAogICAgICAgICB1bnNpZ25lZCBuZXh0TW92ZUluZGV4ID0gbV9jb2FsZXNjaW5n
Q2FuZGlkYXRlcy5zaXplKCk7CiAgICAgICAgIG1fY29hbGVzY2luZ0NhbmRpZGF0ZXMuYXBwZW5k
KHsgbGVmdEluZGV4LCByaWdodEluZGV4IH0pOwpAQCAtMTY3NSw3ICsxNzg4LDcgQEAgSUdOT1JF
X0dDQ19XQVJOSU5HU19FTkQKICAgICAgICAgICAgIEFTU0VSVCh1c2VUbXApOwogCiAgICAgICAg
ICAgICB1bnNpZ25lZCBuZXh0TW92ZUluZGV4ID0gbV9jb2FsZXNjaW5nQ2FuZGlkYXRlcy5zaXpl
KCk7Ci0gICAgICAgICAgICBtX2NvYWxlc2NpbmdDYW5kaWRhdGVzLmFwcGVuZCh7IFRtcE1hcHBl
cjo6YWJzb2x1dGVJbmRleCh1c2VUbXApLCBUbXBNYXBwZXI6OmFic29sdXRlSW5kZXgoZGVmVG1w
KSB9KTsKKyAgICAgICAgICAgIG1fY29hbGVzY2luZ0NhbmRpZGF0ZXMuYXBwZW5kKHsgdG1wVG9J
bmRleCh1c2VUbXApLCB0bXBUb0luZGV4KGRlZlRtcCkgfSk7CiAgICAgICAgICAgICBpZiAodHJh
Y2VEZWJ1ZykKICAgICAgICAgICAgICAgICBkYXRhTG9nTG4oIk1vdmUgYXQgaW5kZXggIiwgbmV4
dE1vdmVJbmRleCwgIiBpczogIiwgKnByZXZJbnN0KTsKIApAQCAtMTc0MywxNCArMTg1NiwxNSBA
QCBJR05PUkVfR0NDX1dBUk5JTkdTX0VORAogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAg
ICAgIGZvciAoVG1wIGxpdmVUbXAgOiBsaXZlVG1wcykgewogICAgICAgICAgICAgICAgICAgICBB
U1NFUlQobGl2ZVRtcC5pc0dQKCkgPT0gKGJhbmsgPT0gR1ApKTsKLSAgICAgICAgICAgICAgICAg
ICAgCi0gICAgICAgICAgICAgICAgICAgIGlmICh0cmFjZURlYnVnKQotICAgICAgICAgICAgICAg
ICAgICAgICAgZGF0YUxvZygiICAgIEFkZGluZyBkZWYtbGl2ZSBlZGdlOiAiLCBhcmcsICIsICIs
IGxpdmVUbXAsICJcbiIpOworCisgICAgICAgICAgICAgICAgICAgIGRhdGFMb2dMbklmKHRyYWNl
RGVidWcsICIgICAgQWRkaW5nIGRlZi1saXZlIGVkZ2U6ICIsIGFyZywgIiwgIiwgbGl2ZVRtcCk7
CiAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICBhZGRFZGdlKGFyZywg
bGl2ZVRtcCk7CiAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGZvciAoY29uc3Qg
VG1wJiBwaW5uZWRSZWdUbXAgOiBtX3Bpbm5lZFJlZ3MpCisgICAgICAgICAgICAgICAgZm9yIChj
b25zdCBUbXAmIHBpbm5lZFJlZ1RtcCA6IG1fcGlubmVkUmVncykgeworICAgICAgICAgICAgICAg
ICAgICBkYXRhTG9nTG5JZih0cmFjZURlYnVnLCAiICAgIEFkZGluZyBkZWYtcGlubmVkIGVkZ2U6
ICIsIGFyZywgIiwgIiwgcGlubmVkUmVnVG1wKTsKICAgICAgICAgICAgICAgICAgICAgYWRkRWRn
ZShhcmcsIHBpbm5lZFJlZ1RtcCk7CisgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfSk7
CiAgICAgfQogCkBAIC0xNzU4LDcgKzE4NzIsNyBAQCBJR05PUkVfR0NDX1dBUk5JTkdTX0VORAog
ICAgIHsKICAgICAgICAgQVNTRVJUX1dJVEhfTUVTU0FHRShhLmlzR1AoKSA9PSBiLmlzR1AoKSwg
IkFuIGludGVyZmVyZW5jZSBiZXR3ZWVuIHJlZ2lzdGVycyBvZiBkaWZmZXJlbnQgdHlwZXMgZG9l
cyBub3QgbWFrZSBzZW5zZSwgaXQgY2FuIGxlYWQgdG8gbm9uLWNvbG9yYWJsZSBncmFwaHMuIik7
CiAKLSAgICAgICAgYWRkRWRnZShUbXBNYXBwZXI6OmFic29sdXRlSW5kZXgoYSksIFRtcE1hcHBl
cjo6YWJzb2x1dGVJbmRleChiKSk7CisgICAgICAgIGFkZEVkZ2UodG1wVG9JbmRleChhKSwgdG1w
VG9JbmRleChiKSk7CiAgICAgfQogCiAgICAgLy8gQ2FsbGluZyB0aGlzIHdpdGhvdXQgYSB0bXBX
aWR0aCB3aWxsIHBlcmZvcm0gYSBtb3JlIGNvbnNlcnZhdGl2ZSBjb2FsZXNjaW5nIGFuYWx5c2lz
IHRoYXQgYXNzdW1lcwpAQCAtMTgyMCw3ICsxOTM0LDcgQEAgSUdOT1JFX0dDQ19XQVJOSU5HU19F
TkQKIAogY2xhc3MgR3JhcGhDb2xvcmluZ1JlZ2lzdGVyQWxsb2NhdGlvbiB7CiBwdWJsaWM6Ci0g
ICAgR3JhcGhDb2xvcmluZ1JlZ2lzdGVyQWxsb2NhdGlvbihDb2RlJiBjb2RlLCBVc2VDb3VudHM8
VG1wPiYgdXNlQ291bnRzKQorICAgIEdyYXBoQ29sb3JpbmdSZWdpc3RlckFsbG9jYXRpb24oQ29k
ZSYgY29kZSwgVXNlQ291bnRzJiB1c2VDb3VudHMpCiAgICAgICAgIDogbV9jb2RlKGNvZGUpCiAg
ICAgICAgICwgbV91c2VDb3VudHModXNlQ291bnRzKQogICAgIHsKQEAgLTE4NDAsNyArMTk1NCw3
IEBAIHByaXZhdGU6CiAgICAgdGVtcGxhdGU8QmFuayBiYW5rPgogICAgIHZvaWQgYWxsb2NhdGVP
bkJhbmsoKQogICAgIHsKLSAgICAgICAgSGFzaFNldDx1bnNpZ25lZD4gdW5zcGlsbGFibGVUbXBz
ID0gY29tcHV0ZVVuc3BpbGxhYmxlVG1wczxiYW5rPigpOworICAgICAgICBCaXRWZWN0b3IgdW5z
cGlsbGFibGVUbXBzID0gY29tcHV0ZVVuc3BpbGxhYmxlVG1wczxiYW5rPigpOwogCiAgICAgICAg
IC8vIEZJWE1FOiBJZiBhIFRtcCBpcyB1c2VkIG9ubHkgZnJvbSBhIFNjcmF0Y2ggcm9sZSBhbmQg
dGhhdCBhcmd1bWVudCBpcyAhYWRtaXRzU3RhY2ssIHRoZW4KICAgICAgICAgLy8gd2Ugc2hvdWxk
IGFkZCB0aGUgVG1wIHRvIHVuc3BpbGxhYmxlVG1wcy4gVGhhdCB3aWxsIGhlbHAgYXZvaWQgcmVs
b29waW5nIG9ubHkgdG8gdHVybiB0aGUKQEAgLTE4NjQsMTAgKzE5NzgsOSBAQCBwcml2YXRlOgog
ICAgICAgICAgICAgLy8gY3JlYXRlZCBUbXBzIG1heSBnZXQgbmFycm93ZXIgdXNlL2RlZiB3aWR0
aHMuIE9uIHRoZSBvdGhlciBoYW5kLCB0aGUgc3BpbGxlciBhbHJlYWR5CiAgICAgICAgICAgICAv
LyBzZWxlY3RzIHdoaWNoIG1vdmUgaW5zdHJ1Y3Rpb24gdG8gdXNlIGJhc2VkIG9uIHRoZSBvcmln
aW5hbCBUbXAncyB3aWR0aHMsIHNvIGl0IG1heSBub3QKICAgICAgICAgICAgIC8vIG1hdHRlciB0
aGFuIGEgc3Vic2VxdWVudCBpdGVyYXRpb24gc2VlcyBhIGNvbnNlcnZhdGl2ZSB3aWR0aCBmb3Ig
dGhlIG5ldyBUbXBzLiBBbHNvLCB0aGUKLSAgICAgICAgICAgIC8vIHJlY29tcHV0YXRpb24gbWF5
IG5vdCBhY3R1YWxseSBiZSBhIHBlcmZvcm1hbmNlIHByb2JsZW07IGl0J3MgbGlrZWx5IHRoYXQg
YSBiZXR0ZXIgd2F5IHRvCi0gICAgICAgICAgICAvLyBpbXByb3ZlIHBlcmZvcm1hbmNlIG9mIFRt
cFdpZHRoIGlzIHRvIHJlcGxhY2UgaXRzIEhhc2hNYXAgd2l0aCBzb21ldGhpbmcgZWxzZS4gSXQn
cwotICAgICAgICAgICAgLy8gcG9zc2libGUgdGhhdCBtb3N0IG9mIHRoZSBUbXBXaWR0aCBvdmVy
aGVhZCBpcyBmcm9tIHF1ZXJpZXMgb2YgVG1wV2lkdGggcmF0aGVyIHRoYW4gdGhlCi0gICAgICAg
ICAgICAvLyByZWNvbXB1dGF0aW9uLCBpbiB3aGljaCBjYXNlIHNwZWVkaW5nIHVwIHRoZSBsb29r
dXAgd291bGQgYmUgYSBiaWdnZXIgd2luLgorICAgICAgICAgICAgLy8gcmVjb21wdXRhdGlvbiBt
YXkgbm90IGFjdHVhbGx5IGJlIGEgcGVyZm9ybWFuY2UgcHJvYmxlbTogd2Ugc3BlbmQgcm91Z2hs
eSAzIHRvIDQlIG9mIHRoZQorICAgICAgICAgICAgLy8gcmVnaXN0ZXIgYWxsb2NhdG9yIGluIG1f
dG1wV2lkdGgucmVjb21wdXRlLiBJbiBjb21wYXJpc29uIHdlIHNwZW5kIG1vcmUgdGhhbiA0MCUg
YnVpbGRpbmcKKyAgICAgICAgICAgIC8vIHRoZSBpbnRlcmZlcmVuY2UgZ3JhcGgKICAgICAgICAg
ICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTI0NzgKICAg
ICAgICAgICAgIG1fdG1wV2lkdGgucmVjb21wdXRlPGJhbms+KG1fY29kZSk7CiAKQEAgLTE4ODUs
MjAgKzE5OTgsMjYgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAg
ICAgICAgICAgICB9OwogCisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChtX2NvZGUubnVtVG1w
cyhiYW5rKSA8IHN0ZDo6bnVtZXJpY19saW1pdHM8dWludDE2X3Q+OjptYXgoKSk7CisgICAgICAg
ICAgICAvLyBUaGUgYml0IHZlY3RvciBhcHByb2FjaCB1c2VzIG4qbiBiaXRzLCBvciAya0IgZm9y
IG4gPSA0MDAuCisgICAgICAgICAgICBjb25zdGV4cHIgdW5zaWduZWQgbWF4U2l6ZUZvclNtYWxs
SW50ZXJmZXJlbmNlR3JhcGggPSA0MDA7CisgICAgICAgICAgICB1c2luZyBJbmRleFR5cGUgPSB1
aW50MTZfdDsKKyAgICAgICAgICAgIHVzaW5nIExhcmdlSW50ZXJmZXJlbmNlR3JhcGggPSBJbnRl
cmZlcmVuY2VWZWN0b3I8U21hbGxTZXQ8SW5kZXhUeXBlLCBJbnRIYXNoPEluZGV4VHlwZT4+LCBJ
bmRleFR5cGU+OworICAgICAgICAgICAgdXNpbmcgU21hbGxJbnRlcmZlcmVuY2VHcmFwaCA9IElu
dGVyZmVyZW5jZUJpdFZlY3RvcjxJbmRleFR5cGU+OwogICAgICAgICAgICAgaWYgKHVzZUlSQygp
KSB7Ci0gICAgICAgICAgICAgICAgaWYgKG1fY29kZS5udW1UbXBzKGJhbmspIDwgc3RkOjpudW1l
cmljX2xpbWl0czx1aW50MTZfdD46Om1heCgpKSB7Ci0gICAgICAgICAgICAgICAgICAgIENvbG9y
aW5nQWxsb2NhdG9yPGJhbmssIElSQywgSW50ZXJmZXJlbmNlRWRnZTx1aW50MTZfdCwgdWludDMy
X3Q+PiBhbGxvY2F0b3IobV9jb2RlLCBtX3RtcFdpZHRoLCBtX3VzZUNvdW50cywgdW5zcGlsbGFi
bGVUbXBzKTsKKyAgICAgICAgICAgICAgICBpZiAobV9jb2RlLm51bVRtcHMoYmFuaykgPCBtYXhT
aXplRm9yU21hbGxJbnRlcmZlcmVuY2VHcmFwaCkgeworICAgICAgICAgICAgICAgICAgICBDb2xv
cmluZ0FsbG9jYXRvcjxJbmRleFR5cGUsIGJhbmssIElSQywgU21hbGxJbnRlcmZlcmVuY2VHcmFw
aD4gYWxsb2NhdG9yKG1fY29kZSwgbV90bXBXaWR0aCwgbV91c2VDb3VudHMsIHVuc3BpbGxhYmxl
VG1wcyk7CiAgICAgICAgICAgICAgICAgICAgIGRvbmUgPSBkb0FsbG9jYXRpb24oYWxsb2NhdG9y
KTsKICAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICBDb2xvcmlu
Z0FsbG9jYXRvcjxiYW5rLCBJUkMsIEludGVyZmVyZW5jZUVkZ2U8dWludDMyX3QsIHVpbnQ2NF90
Pj4gYWxsb2NhdG9yKG1fY29kZSwgbV90bXBXaWR0aCwgbV91c2VDb3VudHMsIHVuc3BpbGxhYmxl
VG1wcyk7CisgICAgICAgICAgICAgICAgICAgIENvbG9yaW5nQWxsb2NhdG9yPEluZGV4VHlwZSwg
YmFuaywgSVJDLCBMYXJnZUludGVyZmVyZW5jZUdyYXBoPiBhbGxvY2F0b3IobV9jb2RlLCBtX3Rt
cFdpZHRoLCBtX3VzZUNvdW50cywgdW5zcGlsbGFibGVUbXBzKTsKICAgICAgICAgICAgICAgICAg
ICAgZG9uZSA9IGRvQWxsb2NhdGlvbihhbGxvY2F0b3IpOwogICAgICAgICAgICAgICAgIH0KICAg
ICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgaWYgKG1fY29kZS5udW1UbXBzKGJh
bmspIDwgc3RkOjpudW1lcmljX2xpbWl0czx1aW50MTZfdD46Om1heCgpKSB7Ci0gICAgICAgICAg
ICAgICAgICAgIENvbG9yaW5nQWxsb2NhdG9yPGJhbmssIEJyaWdncywgSW50ZXJmZXJlbmNlRWRn
ZTx1aW50MTZfdCwgdWludDMyX3Q+PiBhbGxvY2F0b3IobV9jb2RlLCBtX3RtcFdpZHRoLCBtX3Vz
ZUNvdW50cywgdW5zcGlsbGFibGVUbXBzKTsKKyAgICAgICAgICAgICAgICBpZiAobV9jb2RlLm51
bVRtcHMoYmFuaykgPCBtYXhTaXplRm9yU21hbGxJbnRlcmZlcmVuY2VHcmFwaCkgeworICAgICAg
ICAgICAgICAgICAgICBDb2xvcmluZ0FsbG9jYXRvcjxJbmRleFR5cGUsIGJhbmssIEJyaWdncywg
U21hbGxJbnRlcmZlcmVuY2VHcmFwaD4gYWxsb2NhdG9yKG1fY29kZSwgbV90bXBXaWR0aCwgbV91
c2VDb3VudHMsIHVuc3BpbGxhYmxlVG1wcyk7CiAgICAgICAgICAgICAgICAgICAgIGRvbmUgPSBk
b0FsbG9jYXRpb24oYWxsb2NhdG9yKTsKICAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAg
ICAgICAgICAgICAgICBDb2xvcmluZ0FsbG9jYXRvcjxiYW5rLCBCcmlnZ3MsIEludGVyZmVyZW5j
ZUVkZ2U8dWludDMyX3QsIHVpbnQ2NF90Pj4gYWxsb2NhdG9yKG1fY29kZSwgbV90bXBXaWR0aCwg
bV91c2VDb3VudHMsIHVuc3BpbGxhYmxlVG1wcyk7CisgICAgICAgICAgICAgICAgICAgIENvbG9y
aW5nQWxsb2NhdG9yPEluZGV4VHlwZSwgYmFuaywgQnJpZ2dzLCBMYXJnZUludGVyZmVyZW5jZUdy
YXBoPiBhbGxvY2F0b3IobV9jb2RlLCBtX3RtcFdpZHRoLCBtX3VzZUNvdW50cywgdW5zcGlsbGFi
bGVUbXBzKTsKICAgICAgICAgICAgICAgICAgICAgZG9uZSA9IGRvQWxsb2NhdGlvbihhbGxvY2F0
b3IpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KQEAgLTE5MDcsMTEgKzIwMjYs
OCBAQCBwcml2YXRlOgogICAgIH0KIAogICAgIHRlbXBsYXRlPEJhbmsgYmFuaz4KLSAgICBIYXNo
U2V0PHVuc2lnbmVkPiBjb21wdXRlVW5zcGlsbGFibGVUbXBzKCkKKyAgICBCaXRWZWN0b3IgY29t
cHV0ZVVuc3BpbGxhYmxlVG1wcygpCiAgICAgewotCi0gICAgICAgIEhhc2hTZXQ8dW5zaWduZWQ+
IHVuc3BpbGxhYmxlVG1wczsKLQogICAgICAgICBzdHJ1Y3QgUmFuZ2UgewogICAgICAgICAgICAg
dW5zaWduZWQgZmlyc3QgeyBzdGQ6Om51bWVyaWNfbGltaXRzPHVuc2lnbmVkPjo6bWF4KCkgfTsK
ICAgICAgICAgICAgIHVuc2lnbmVkIGxhc3QgeyAwIH07CkBAIC0xOTY0LDEyICsyMDgwLDIwIEBA
IHByaXZhdGU6CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICArK2dsb2JhbEluZGV4OwogICAg
ICAgICB9CisKKyAgICAgICAgQml0VmVjdG9yIHVuc3BpbGxhYmxlVG1wczsKKyAgICAgICAgdW5z
cGlsbGFibGVUbXBzLmVuc3VyZVNpemUoYXJyYXlTaXplKTsKICAgICAgICAgZm9yICh1bnNpZ25l
ZCBpID0gQWJzb2x1dGVUbXBNYXBwZXI8YmFuaz46Omxhc3RNYWNoaW5lUmVnaXN0ZXJJbmRleCgp
ICsgMTsgaSA8IHJhbmdlcy5zaXplKCk7ICsraSkgewogICAgICAgICAgICAgUmFuZ2UmIHJhbmdl
ID0gcmFuZ2VzW2ldOwogICAgICAgICAgICAgaWYgKHJhbmdlLmxhc3QgLSByYW5nZS5maXJzdCA8
PSAxICYmIHJhbmdlLmNvdW50ID4gcmFuZ2UuYWRtaXRTdGFja0NvdW50KQotICAgICAgICAgICAg
ICAgIHVuc3BpbGxhYmxlVG1wcy5hZGQoaSk7CisgICAgICAgICAgICAgICAgdW5zcGlsbGFibGVU
bXBzLnF1aWNrU2V0KGkpOwogICAgICAgICB9CiAKKyAgICAgICAgbV9jb2RlLmZvckVhY2hGYXN0
VG1wKFsmXShUbXAgdG1wKSB7CisgICAgICAgICAgICBpZiAodG1wLmJhbmsoKSA9PSBiYW5rKQor
ICAgICAgICAgICAgICAgIHVuc3BpbGxhYmxlVG1wcy5xdWlja1NldChBYnNvbHV0ZVRtcE1hcHBl
cjxiYW5rPjo6YWJzb2x1dGVJbmRleCh0bXApKTsKKyAgICAgICAgfSk7CisKICAgICAgICAgcmV0
dXJuIHVuc3BpbGxhYmxlVG1wczsKICAgICB9CiAKQEAgLTIwMzEsMTIgKzIxNTUsMTIgQEAgcHJp
dmF0ZToKICAgICB9CiAKICAgICB0ZW1wbGF0ZTxCYW5rIGJhbmssIHR5cGVuYW1lIEFsbG9jYXRv
clR5cGU+Ci0gICAgdm9pZCBhZGRTcGlsbEFuZEZpbGwoY29uc3QgQWxsb2NhdG9yVHlwZSYgYWxs
b2NhdG9yLCBIYXNoU2V0PHVuc2lnbmVkPiYgdW5zcGlsbGFibGVUbXBzKQorICAgIHZvaWQgYWRk
U3BpbGxBbmRGaWxsKGNvbnN0IEFsbG9jYXRvclR5cGUmIGFsbG9jYXRvciwgQml0VmVjdG9yJiB1
bnNwaWxsYWJsZVRtcHMpCiAgICAgewogICAgICAgICBIYXNoTWFwPFRtcCwgU3RhY2tTbG90Kj4g
c3RhY2tTbG90czsKICAgICAgICAgZm9yIChUbXAgdG1wIDogYWxsb2NhdG9yLnNwaWxsZWRUbXBz
KCkpIHsKICAgICAgICAgICAgIC8vIEFsbCB0aGUgc3BpbGxlZCB2YWx1ZXMgYmVjb21lIHVuc3Bp
bGxhYmxlLgotICAgICAgICAgICAgdW5zcGlsbGFibGVUbXBzLmFkZChBYnNvbHV0ZVRtcE1hcHBl
cjxiYW5rPjo6YWJzb2x1dGVJbmRleCh0bXApKTsKKyAgICAgICAgICAgIHVuc3BpbGxhYmxlVG1w
cy5zZXQoQWJzb2x1dGVUbXBNYXBwZXI8YmFuaz46OmFic29sdXRlSW5kZXgodG1wKSk7CiAKICAg
ICAgICAgICAgIC8vIEFsbG9jYXRlIHN0YWNrIHNsb3QgZm9yIGVhY2ggc3BpbGxlZCB2YWx1ZS4K
ICAgICAgICAgICAgIFN0YWNrU2xvdCogc3RhY2tTbG90ID0gbV9jb2RlLmFkZFN0YWNrU2xvdCgK
QEAgLTIxMDksMTEgKzIyMzMsOCBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgICAgICAgICAg
Ly8gdmFsdWUgcmF0aGVyIHRoYW4gbG9hZGluZyBpdCBmcm9tIHRoZSBzdGFjay4gSW4gb3JkZXIg
Zm9yIHRoYXQKICAgICAgICAgICAgICAgICAgICAgICAgIC8vIG9wdGltaXphdGlvbiB0byBraWNr
IGluLCB3ZSBuZWVkIHRvIGF2b2lkIHBsYWNpbmcgdGhlIFRtcCdzIHN0YWNrCiAgICAgICAgICAg
ICAgICAgICAgICAgICAvLyBhZGRyZXNzIGludG8gdGhlIGluc3RydWN0aW9uLgotICAgICAgICAg
ICAgICAgICAgICAgICAgaWYgKCFBcmc6OmlzQ29sZFVzZShyb2xlKSkgewotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGNvbnN0IFVzZUNvdW50czxUbXA+OjpDb3VudHMqIGNvdW50cyA9IG1f
dXNlQ291bnRzW2FyZy50bXAoKV07Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNv
dW50cyAmJiBjb3VudHMtPm51bUNvbnN0RGVmcyA9PSAxICYmIGNvdW50cy0+bnVtRGVmcyA9PSAx
KQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIUFyZzo6aXNDb2xkVXNl
KHJvbGUpICYmIG1fdXNlQ291bnRzLmlzQ29uc3REZWY8YmFuaz4oQWJzb2x1dGVUbXBNYXBwZXI8
YmFuaz46OmFic29sdXRlSW5kZXgoYXJnLnRtcCgpKSkpCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuOwogICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAg
ICAgICAgICBXaWR0aCBzcGlsbFdpZHRoID0gbV90bXBXaWR0aC5yZXF1aXJlZFdpZHRoKGFyZy50
bXAoKSk7CiAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoQXJnOjppc0FueURlZihyb2xlKSAm
JiB3aWR0aCA8IHNwaWxsV2lkdGgpIHsKQEAgLTIxNjYsNyArMjI4Nyw3IEBAIHByaXZhdGU6CiAg
ICAgICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKGluc3RCYW5rID09IGJhbmspOwogICAg
ICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgVG1wIHRtcCA9IG1fY29kZS5u
ZXdUbXAoYmFuayk7Ci0gICAgICAgICAgICAgICAgICAgIHVuc3BpbGxhYmxlVG1wcy5hZGQoQWJz
b2x1dGVUbXBNYXBwZXI8YmFuaz46OmFic29sdXRlSW5kZXgodG1wKSk7CisgICAgICAgICAgICAg
ICAgICAgIHVuc3BpbGxhYmxlVG1wcy5zZXQoQWJzb2x1dGVUbXBNYXBwZXI8YmFuaz46OmFic29s
dXRlSW5kZXgodG1wKSk7CiAgICAgICAgICAgICAgICAgICAgIGluc3QuYXJncy5hcHBlbmQodG1w
KTsKICAgICAgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoaW5zdC5hcmdzLnNpemUoKSA9
PSAzKTsKICAgICAgICAgICAgICAgICAgICAgCkBAIC0yMjExLDcgKzIzMzIsNyBAQCBwcml2YXRl
OgogICAgICAgICAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgICAgICAgICAgdG1wID0gbV9j
b2RlLm5ld1RtcChiYW5rKTsKLSAgICAgICAgICAgICAgICAgICAgdW5zcGlsbGFibGVUbXBzLmFk
ZChBYnNvbHV0ZVRtcE1hcHBlcjxiYW5rPjo6YWJzb2x1dGVJbmRleCh0bXApKTsKKyAgICAgICAg
ICAgICAgICAgICAgdW5zcGlsbGFibGVUbXBzLnNldChBYnNvbHV0ZVRtcE1hcHBlcjxiYW5rPjo6
YWJzb2x1dGVJbmRleCh0bXApKTsKICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAg
ICAgICAgIGlmIChyb2xlID09IEFyZzo6U2NyYXRjaCkKICAgICAgICAgICAgICAgICAgICAgICAg
IHJldHVybjsKQEAgLTIyMzUsNyArMjM1Niw3IEBAIHByaXZhdGU6CiAKICAgICBDb2RlJiBtX2Nv
ZGU7CiAgICAgVG1wV2lkdGggbV90bXBXaWR0aDsKLSAgICBVc2VDb3VudHM8VG1wPiYgbV91c2VD
b3VudHM7CisgICAgVXNlQ291bnRzJiBtX3VzZUNvdW50czsKIH07CiAKIH0gLy8gYW5vbnltb3Vz
IG5hbWVzcGFjZQpAQCAtMjI0Nyw3ICsyMzY4LDcgQEAgdm9pZCBhbGxvY2F0ZVJlZ2lzdGVyc0J5
R3JhcGhDb2xvcmluZyhDb2RlJiBjb2RlKQogICAgIGlmICh0cmFjZURlYnVnKQogICAgICAgICBk
YXRhTG9nKCJDb2RlIGJlZm9yZSBncmFwaCBjb2xvcmluZzpcbiIsIGNvZGUpOwogCi0gICAgVXNl
Q291bnRzPFRtcD4gdXNlQ291bnRzKGNvZGUpOworICAgIFVzZUNvdW50cyB1c2VDb3VudHMoY29k
ZSk7CiAgICAgR3JhcGhDb2xvcmluZ1JlZ2lzdGVyQWxsb2NhdGlvbiBncmFwaENvbG9yaW5nUmVn
aXN0ZXJBbGxvY2F0aW9uKGNvZGUsIHVzZUNvdW50cyk7CiAgICAgZ3JhcGhDb2xvcmluZ1JlZ2lz
dGVyQWxsb2NhdGlvbi5ydW4oKTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy9haXIvQWlyQ29kZS5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJDb2Rl
LmgKaW5kZXggYzBiZDM1MjBkMGQzLi5kOGVlNDEyN2I1NzMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQ29kZS5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy9haXIvQWlyQ29kZS5oCkBAIC00MCw2ICs0MCw3IEBACiAjaW5jbHVkZSAiU3RhY2tBbGln
bm1lbnQuaCIKICNpbmNsdWRlIDx3dGYvSGFzaFNldC5oPgogI2luY2x1ZGUgPHd0Zi9JbmRleE1h
cC5oPgorI2luY2x1ZGUgPHd0Zi9TbWFsbFNldC5oPgogI2luY2x1ZGUgPHd0Zi9XZWFrUmFuZG9t
Lmg+CiAKIG5hbWVzcGFjZSBKU0MgewpAQCAtMzExLDcgKzMxMiwxMyBAQCBwdWJsaWM6CiAgICAg
fQogCiAgICAgdm9pZCBhZGRGYXN0VG1wKFRtcCk7Ci0gICAgYm9vbCBpc0Zhc3RUbXAoVG1wIHRt
cCkgY29uc3QgeyByZXR1cm4gbV9mYXN0VG1wcy5jb250YWlucyh0bXApOyB9CisKKyAgICB0ZW1w
bGF0ZTx0eXBlbmFtZSBGdW5jdG9yPgorICAgIHZvaWQgZm9yRWFjaEZhc3RUbXAoY29uc3QgRnVu
Y3RvciYgZnVuY3RvcikgY29uc3QKKyAgICB7CisgICAgICAgIGZvciAoVG1wIHRtcCA6IG1fZmFz
dFRtcHMpCisgICAgICAgICAgICBmdW5jdG9yKHRtcCk7CisgICAgfQogICAgIAogICAgIENGRyYg
Y2ZnKCkgY29uc3QgeyByZXR1cm4gKm1fY2ZnOyB9CiAgICAgCkBAIC0zNzksNyArMzg2LDcgQEAg
cHJpdmF0ZToKICAgICBWZWN0b3I8c3RkOjp1bmlxdWVfcHRyPEJhc2ljQmxvY2s+PiBtX2Jsb2Nr
czsKICAgICBTcGFyc2VDb2xsZWN0aW9uPFNwZWNpYWw+IG1fc3BlY2lhbHM7CiAgICAgc3RkOjp1
bmlxdWVfcHRyPENGRz4gbV9jZmc7Ci0gICAgSGFzaFNldDxUbXA+IG1fZmFzdFRtcHM7CisgICAg
U21hbGxTZXQ8VG1wLCBUbXBIYXNoLCAyPiBtX2Zhc3RUbXBzOwogICAgIENDYWxsU3BlY2lhbCog
bV9jQ2FsbFNwZWNpYWwgeyBudWxscHRyIH07CiAgICAgdW5zaWduZWQgbV9udW1HUFRtcHMgeyAw
IH07CiAgICAgdW5zaWduZWQgbV9udW1GUFRtcHMgeyAwIH07CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpclVzZUNvdW50cy5oIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2IzL2Fpci9BaXJVc2VDb3VudHMuaAppbmRleCA5MGEyNjhjZDU1MjkuLmUwNjYxNWM5ZTNk
MyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJVc2VDb3VudHMu
aAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpclVzZUNvdW50cy5oCkBAIC0x
LDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNS0yMDE3IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNS0yMDIxIEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAt
MzEsMzQgKzMxLDE4IEBACiAjaW5jbHVkZSAiQWlyQmxvY2tXb3JrbGlzdC5oIgogI2luY2x1ZGUg
IkFpckNvZGUuaCIKICNpbmNsdWRlICJBaXJJbnN0SW5saW5lcy5oIgotI2luY2x1ZGUgPHd0Zi9I
YXNoTWFwLmg+Ci0jaW5jbHVkZSA8d3RmL0xpc3REdW1wLmg+CisjaW5jbHVkZSAiQWlyVG1wSW5s
aW5lcy5oIgorI2luY2x1ZGUgPHd0Zi9Db21tYVByaW50ZXIuaD4KKyNpbmNsdWRlIDx3dGYvVmVj
dG9yLmg+CiAKIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeyBuYW1lc3BhY2UgQWlyIHsK
IAogY2xhc3MgQ29kZTsKIAotLy8gQ29tcHV0ZXMgdGhlIG51bWJlciBvZiB1c2VzIG9mIGEgdmFy
aWFibGUgYmFzZWQgb24gZnJlcXVlbmN5IG9mIGV4ZWN1dGlvbi4gVGhlIGZyZXF1ZW5jeSBvZiBi
bG9ja3MKKy8vIENvbXB1dGVzIHRoZSBudW1iZXIgb2YgdXNlcyBvZiBhIHRtcCBiYXNlZCBvbiBm
cmVxdWVuY3kgb2YgZXhlY3V0aW9uLiBUaGUgZnJlcXVlbmN5IG9mIGJsb2NrcwogLy8gdGhhdCBh
cmUgb25seSByZWFjaGFibGUgYnkgcmFyZSBlZGdlcyBpcyBzY2FsZWQgYnkgT3B0aW9uczo6cmFy
ZUJsb2NrUGVuYWx0eSgpLgotCi0vLyBUaGluZyBjYW4gYmUgZWl0aGVyIFRtcCBvciBBcmcuCi10
ZW1wbGF0ZTx0eXBlbmFtZSBUaGluZz4KIGNsYXNzIFVzZUNvdW50cyB7CiBwdWJsaWM6Ci0gICAg
c3RydWN0IENvdW50cyB7Ci0gICAgICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25z
dAotICAgICAgICB7Ci0gICAgICAgICAgICBvdXQucHJpbnQoCi0gICAgICAgICAgICAgICAgIntu
dW1XYXJtVXNlcyA9ICIsIG51bVdhcm1Vc2VzLCAiLCBudW1Db2xkVXNlcyA9ICIsIG51bUNvbGRV
c2VzLCAiLCBudW1EZWZzID0gIiwKLSAgICAgICAgICAgICAgICBudW1EZWZzLCAifSIpOwotICAg
ICAgICB9Ci0gICAgICAgIAotICAgICAgICBkb3VibGUgbnVtV2FybVVzZXMgeyAwIH07Ci0gICAg
ICAgIGRvdWJsZSBudW1Db2xkVXNlcyB7IDAgfTsKLSAgICAgICAgZG91YmxlIG51bURlZnMgeyAw
IH07Ci0gICAgICAgIGRvdWJsZSBudW1Db25zdERlZnMgeyAwIH07Ci0gICAgfTsKLSAgICAKICAg
ICBVc2VDb3VudHMoQ29kZSYgY29kZSkKICAgICB7CiAgICAgICAgIC8vIEZpbmQgbm9uLXJhcmUg
YmxvY2tzLgpAQCAtNzAsNDcgKzU0LDczIEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICAgICAg
ZmFzdFdvcmtsaXN0LnB1c2goc3VjY2Vzc29yLmJsb2NrKCkpOwogICAgICAgICAgICAgfQogICAg
ICAgICB9Ci0gICAgICAgIAorCisgICAgICAgIHVuc2lnbmVkIGdwQXJyYXlTaXplID0gQWJzb2x1
dGVUbXBNYXBwZXI8R1A+OjphYnNvbHV0ZUluZGV4KGNvZGUubnVtVG1wcyhHUCkpOworICAgICAg
ICBtX2dwTnVtV2FybVVzZXNBbmREZWZzLnJlc2l6ZShncEFycmF5U2l6ZSk7CisgICAgICAgIG1f
Z3BDb25zdERlZnMuZW5zdXJlU2l6ZShncEFycmF5U2l6ZSk7CisgICAgICAgIHVuc2lnbmVkIGZw
QXJyYXlTaXplID0gQWJzb2x1dGVUbXBNYXBwZXI8RlA+OjphYnNvbHV0ZUluZGV4KGNvZGUubnVt
VG1wcyhGUCkpOworICAgICAgICBtX2ZwTnVtV2FybVVzZXNBbmREZWZzLnJlc2l6ZShmcEFycmF5
U2l6ZSk7CisgICAgICAgIG1fZnBDb25zdERlZnMuZW5zdXJlU2l6ZShncEFycmF5U2l6ZSk7CisK
ICAgICAgICAgZm9yIChCYXNpY0Jsb2NrKiBibG9jayA6IGNvZGUpIHsKICAgICAgICAgICAgIGRv
dWJsZSBmcmVxdWVuY3kgPSBibG9jay0+ZnJlcXVlbmN5KCk7CiAgICAgICAgICAgICBpZiAoIWZh
c3RXb3JrbGlzdC5zYXcoYmxvY2spKQogICAgICAgICAgICAgICAgIGZyZXF1ZW5jeSAqPSBPcHRp
b25zOjpyYXJlQmxvY2tQZW5hbHR5KCk7CiAgICAgICAgICAgICBmb3IgKEluc3QmIGluc3QgOiAq
YmxvY2spIHsKLSAgICAgICAgICAgICAgICBpbnN0LmZvckVhY2g8VGhpbmc+KAotICAgICAgICAg
ICAgICAgICAgICBbJl0gKFRoaW5nJiBhcmcsIEFyZzo6Um9sZSByb2xlLCBCYW5rLCBXaWR0aCkg
ewotICAgICAgICAgICAgICAgICAgICAgICAgQ291bnRzJiBjb3VudHMgPSBtX2NvdW50cy5hZGQo
YXJnLCBDb3VudHMoKSkuaXRlcmF0b3ItPnZhbHVlOwotCi0gICAgICAgICAgICAgICAgICAgICAg
ICBpZiAoQXJnOjppc1dhcm1Vc2Uocm9sZSkpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
Y291bnRzLm51bVdhcm1Vc2VzICs9IGZyZXF1ZW5jeTsKLSAgICAgICAgICAgICAgICAgICAgICAg
IGlmIChBcmc6OmlzQ29sZFVzZShyb2xlKSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBj
b3VudHMubnVtQ29sZFVzZXMgKz0gZnJlcXVlbmN5OwotICAgICAgICAgICAgICAgICAgICAgICAg
aWYgKEFyZzo6aXNBbnlEZWYocm9sZSkpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgY291
bnRzLm51bURlZnMgKz0gZnJlcXVlbmN5OworICAgICAgICAgICAgICAgIGluc3QuZm9yRWFjaDxU
bXA+KAorICAgICAgICAgICAgICAgICAgICBbJl0gKFRtcCYgdG1wLCBBcmc6OlJvbGUgcm9sZSwg
QmFuayBiYW5rLCBXaWR0aCkgeworCisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoQXJnOjpp
c1dhcm1Vc2Uocm9sZSkgfHwgQXJnOjppc0FueURlZihyb2xlKSkgeworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGlmIChiYW5rID09IEdQKQorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBtX2dwTnVtV2FybVVzZXNBbmREZWZzW0Fic29sdXRlVG1wTWFwcGVyPEdQPjo6YWJzb2x1
dGVJbmRleCh0bXApXSArPSBmcmVxdWVuY3k7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX2ZwTnVtV2FybVVzZXNBbmRE
ZWZzW0Fic29sdXRlVG1wTWFwcGVyPEZQPjo6YWJzb2x1dGVJbmRleCh0bXApXSArPSBmcmVxdWVu
Y3k7CisgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIH0pOwog
CiAgICAgICAgICAgICAgICAgaWYgKChpbnN0LmtpbmQub3Bjb2RlID09IE1vdmUgfHwgaW5zdC5r
aW5kLm9wY29kZSA9PSBNb3ZlMzIpCiAgICAgICAgICAgICAgICAgICAgICYmIGluc3QuYXJnc1sw
XS5pc1NvbWVJbW0oKQotICAgICAgICAgICAgICAgICAgICAmJiBpbnN0LmFyZ3NbMV0uaXM8VGhp
bmc+KCkpCi0gICAgICAgICAgICAgICAgICAgIG1fY291bnRzLmFkZChpbnN0LmFyZ3NbMV0uYXM8
VGhpbmc+KCksIENvdW50cygpKS5pdGVyYXRvci0+dmFsdWUubnVtQ29uc3REZWZzKys7CisgICAg
ICAgICAgICAgICAgICAgICYmIGluc3QuYXJnc1sxXS5pczxUbXA+KCkpIHsKKyAgICAgICAgICAg
ICAgICAgICAgVG1wIHRtcCA9IGluc3QuYXJnc1sxXS5hczxUbXA+KCk7CisgICAgICAgICAgICAg
ICAgICAgIGlmICh0bXAuYmFuaygpID09IEdQKQorICAgICAgICAgICAgICAgICAgICAgICAgbV9n
cENvbnN0RGVmcy5xdWlja1NldChBYnNvbHV0ZVRtcE1hcHBlcjxHUD46OmFic29sdXRlSW5kZXgo
dG1wKSk7CisgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAg
IG1fZnBDb25zdERlZnMucXVpY2tTZXQoQWJzb2x1dGVUbXBNYXBwZXI8RlA+OjphYnNvbHV0ZUlu
ZGV4KHRtcCkpOworICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KICAgICAgICAgfQog
ICAgIH0KIAotICAgIGNvbnN0IENvdW50cyogb3BlcmF0b3JbXShjb25zdCBUaGluZyYgYXJnKSBj
b25zdAorICAgIHRlbXBsYXRlPEJhbmsgYmFuaz4KKyAgICBib29sIGlzQ29uc3REZWYodW5zaWdu
ZWQgYWJzb2x1dGVJbmRleCkgY29uc3QKKyAgICB7CisgICAgICAgIGlmIChiYW5rID09IEdQKQor
ICAgICAgICAgICAgcmV0dXJuIG1fZ3BDb25zdERlZnMucXVpY2tHZXQoYWJzb2x1dGVJbmRleCk7
CisgICAgICAgIHJldHVybiBtX2ZwQ29uc3REZWZzLnF1aWNrR2V0KGFic29sdXRlSW5kZXgpOwor
ICAgIH0KKworICAgIHRlbXBsYXRlPEJhbmsgYmFuaz4KKyAgICBmbG9hdCBudW1XYXJtVXNlc0Fu
ZERlZnModW5zaWduZWQgYWJzb2x1dGVJbmRleCkgY29uc3QKICAgICB7Ci0gICAgICAgIGF1dG8g
aXRlciA9IG1fY291bnRzLmZpbmQoYXJnKTsKLSAgICAgICAgaWYgKGl0ZXIgPT0gbV9jb3VudHMu
ZW5kKCkpCi0gICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICAgICAgcmV0dXJuICZpdGVy
LT52YWx1ZTsKKyAgICAgICAgaWYgKGJhbmsgPT0gR1ApCisgICAgICAgICAgICByZXR1cm4gbV9n
cE51bVdhcm1Vc2VzQW5kRGVmc1thYnNvbHV0ZUluZGV4XTsKKyAgICAgICAgcmV0dXJuIG1fZnBO
dW1XYXJtVXNlc0FuZERlZnNbYWJzb2x1dGVJbmRleF07CiAgICAgfQogCiAgICAgdm9pZCBkdW1w
KFByaW50U3RyZWFtJiBvdXQpIGNvbnN0CiAgICAgewotICAgICAgICBvdXQucHJpbnQobWFwRHVt
cChtX2NvdW50cykpOworICAgICAgICBDb21tYVByaW50ZXIgY29tbWEoIiwgIik7CisgICAgICAg
IGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX2dwTnVtV2FybVVzZXNBbmREZWZzLnNpemUoKTsg
KytpKQorICAgICAgICAgICAgb3V0LnByaW50KGNvbW1hLCBBYnNvbHV0ZVRtcE1hcHBlcjxHUD46
OnRtcEZyb21BYnNvbHV0ZUluZGV4KGkpLCAiPT4ge251bVdhcm1Vc2VzQW5kRGVmcz0iLCBtX2dw
TnVtV2FybVVzZXNBbmREZWZzW2ldLCAiLCBpc0NvbnN0RGVmPSIsIG1fZ3BDb25zdERlZnMucXVp
Y2tHZXQoaSksICJ9Iik7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX2ZwTnVt
V2FybVVzZXNBbmREZWZzLnNpemUoKTsgKytpKQorICAgICAgICAgICAgb3V0LnByaW50KGNvbW1h
LCBBYnNvbHV0ZVRtcE1hcHBlcjxGUD46OnRtcEZyb21BYnNvbHV0ZUluZGV4KGkpLCAiPT4ge251
bVdhcm1Vc2VzQW5kRGVmcz0iLCBtX2ZwTnVtV2FybVVzZXNBbmREZWZzW2ldLCAiLCBpc0NvbnN0
RGVmPSIsIG1fZnBDb25zdERlZnMucXVpY2tHZXQoaSksICJ9Iik7CiAgICAgfQogCiBwcml2YXRl
OgotICAgIEhhc2hNYXA8VGhpbmcsIENvdW50cz4gbV9jb3VudHM7CisgICAgVmVjdG9yPGZsb2F0
PiBtX2dwTnVtV2FybVVzZXNBbmREZWZzOworICAgIFZlY3RvcjxmbG9hdD4gbV9mcE51bVdhcm1V
c2VzQW5kRGVmczsKKyAgICBCaXRWZWN0b3IgbV9ncENvbnN0RGVmczsKKyAgICBCaXRWZWN0b3Ig
bV9mcENvbnN0RGVmczsKIH07CiAKIH0gfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzOjpBaXIKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvTm9kZXMuaCBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9wYXJzZXIvTm9kZXMuaAppbmRleCBlZDE3M2MxN2E1YmIuLjU2MTI5OWE2
YTcwZiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9Ob2Rlcy5oCisr
KyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvTm9kZXMuaApAQCAtMzYsNyArMzYsNyBA
QAogI2luY2x1ZGUgIlN5bWJvbFRhYmxlLmgiCiAjaW5jbHVkZSAiVmFyaWFibGVFbnZpcm9ubWVu
dC5oIgogI2luY2x1ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+Ci0jaW5jbHVkZSA8d3RmL1NtYWxsUHRy
U2V0Lmg+CisjaW5jbHVkZSA8d3RmL1NtYWxsU2V0Lmg+CiAKIG5hbWVzcGFjZSBKU0MgewogCkBA
IC01Myw3ICs1Myw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgIGNsYXNzIFJlZ2lzdGVySUQ7CiAg
ICAgY2xhc3MgU2NvcGVOb2RlOwogCi0gICAgdHlwZWRlZiBTbWFsbFB0clNldDxVbmlxdWVkU3Ry
aW5nSW1wbCo+IFVuaXF1ZWRTdHJpbmdJbXBsUHRyU2V0OworICAgIHR5cGVkZWYgU21hbGxTZXQ8
VW5pcXVlZFN0cmluZ0ltcGwqPiBVbmlxdWVkU3RyaW5nSW1wbFB0clNldDsKIAogICAgIGVudW0g
Y2xhc3MgT3BlcmF0b3IgOiB1aW50OF90IHsKICAgICAgICAgRXF1YWwsCmRpZmYgLS1naXQgYS9T
b3VyY2UvV1RGL0NoYW5nZUxvZyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCmluZGV4IGI5Mzk5ZmU3
NDIxZC4uNWFjNTkwMWY4MzlkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL0NoYW5nZUxvZworKysg
Yi9Tb3VyY2UvV1RGL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI0IEBACisyMDIxLTA1LTE3ICBSb2Jp
biBNb3Jpc3NldCAgPHJtb3Jpc3NldEBhcHBsZS5jb20+CisKKyAgICAgICAgTWFrZSBBaXJBbGxv
Y2F0ZVJlZ2lzdGVyc0J5R3JhcGhDb2xvcmluZyB1c2UgbGVzcyBtZW1vcnkKKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIyNTg0OAorCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWShPT1BTKS4KKworICAgICAgICBJIHJlbmFtZWQgU21hbGxQdHJTZXQg
aW50byBTbWFsbFNldCwgYXMgaXQgbm93IHN1cHBvcnRzIGludGVnZXJzIGFzIHdlbGwgYXMgcG9p
bnRlcnMuCisKKyAgICAgICAgSSB0aGVuIHJlZHVjZWQgaXRzIHNpemUgYnkgc2hhcmluZyB0aGUg
c2FtZSBzdG9yYWdlIGZvciBtX2J1ZmZlciBhbmQgZm9yIG1fc21hbGxTdG9yYWdlLgorICAgICAg
ICBUaGlzIGlzIHNhZmUgdG8gZG8sIGJlY2F1c2UgYWxsIG9wZXJhdGlvbnMgYnJhbmNoIG9uIGlz
U21hbGwoKSB3aGljaCBkZXBlbmRzIHB1cmVseSBvbiBtX2NhcGFjaXR5LgorCisgICAgICAgIEkg
YWxzbyBhZGRlZCB0cml2aWFsIHNpemUoKSBhbmQgaXNFbXB0eSgpIG1ldGhvZHMsIHRvIG1ha2Ug
ZGVidWdnaW5nIGVhc2llci4KKworICAgICAgICBGaW5hbGx5IEkgYWRkZWQgYSBjb21tZW50IGF0
IHRoZSB0b3Agb2YgdGhlIGZpbGUgZXhwbGFpbmluZyB3aGVuIHRvIHVzZSwgYW5kIChtb3JlIGlt
cG9ydGFudGx5KSBub3QgdG8gdXNlIFNtYWxsU2V0LgorCisgICAgICAgICogV1RGLnhjb2RlcHJv
ai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogd3RmL0NNYWtlTGlzdHMudHh0OgorICAgICAg
ICAqIHd0Zi9TbWFsbFNldC5jcHA6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV1RGL3d0Zi9TbWFsbFB0
clNldC5jcHAuCisgICAgICAgICogd3RmL1NtYWxsU2V0Lmg6IFJlbmFtZWQgZnJvbSBTb3VyY2Uv
V1RGL3d0Zi9TbWFsbFB0clNldC5oLgorCiAyMDIxLTA1LTE2ICBDaHJpcyBEdW1leiAgPGNkdW1l
ekBhcHBsZS5jb20+CiAKICAgICAgICAgTW9kZXJuaXplIC8gT3B0aW1pemUgU1FMaXRlU3RhdGVt
ZW50IGNyZWF0aW9uIGFuZCBwcmVwYXJhdGlvbgpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi9XVEYu
eGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1NvdXJjZS9XVEYvV1RGLnhjb2RlcHJvai9wcm9q
ZWN0LnBieHByb2oKaW5kZXggYjExZTA5OGNlNDc3Li5hZmY1MzIxYjQ3ZjMgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XVEYvV1RGLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvU291cmNlL1dU
Ri9XVEYueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAtNDIsNyArNDIsNyBAQAogCQkwRjlE
MzM2MDE2NURCQTczMDA1QUQzODcgLyogRmlsZVByaW50U3RyZWFtLmNwcCBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGOUQzMzVCMTY1REJBNzMwMDVBRDM4
NyAvKiBGaWxlUHJpbnRTdHJlYW0uY3BwICovOyB9OwogCQkwRjlEMzM2MjE2NURCQTczMDA1QUQz
ODcgLyogUHJpbnRTdHJlYW0uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMEY5RDMzNUQxNjVEQkE3MzAwNUFEMzg3IC8qIFByaW50U3RyZWFtLmNwcCAq
LzsgfTsKIAkJMEZBNkYzOEYyMENDNTgwRjAwQTAzRENEIC8qIFNlZ21lbnRlZFZlY3Rvci5jcHAg
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkE2RjM4RTIw
Q0M1ODBFMDBBMDNEQ0QgLyogU2VnbWVudGVkVmVjdG9yLmNwcCAqLzsgfTsKLQkJMEZBNkYzOTMy
MENDNzNBMzAwQTAzRENEIC8qIFNtYWxsUHRyU2V0LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGQTZGMzkyMjBDQzczQTIwMEEwM0RDRCAvKiBTbWFs
bFB0clNldC5jcHAgKi87IH07CisJCTBGQTZGMzkzMjBDQzczQTMwMEEwM0RDRCAvKiBTbWFsbFNl
dC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkE2
RjM5MjIwQ0M3M0EyMDBBMDNEQ0QgLyogU21hbGxTZXQuY3BwICovOyB9OwogCQkwRkE2RjM5NTIw
Q0NBQ0U5MDBBMDNEQ0QgLyogVW5pcXVlQXJyYXkuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZBNkYzOTQyMENDQUNFOTAwQTAzRENEIC8qIFVuaXF1
ZUFycmF5LmNwcCAqLzsgfTsKIAkJMEZEREJGQTcxNjY2REZBMzAwQzU1RkVGIC8qIFN0cmluZ1By
aW50U3RyZWFtLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDBGRERCRkE1MTY2NkRGQTMwMEM1NUZFRiAvKiBTdHJpbmdQcmludFN0cmVhbS5jcHAgKi87
IH07CiAJCTBGRTE2NDZBMUI2RkZDOTYwMDQwMEU3QyAvKiBMb2NrLmNwcCBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRTE2NDY4MUI2RkZDOTYwMDQwMEU3
QyAvKiBMb2NrLmNwcCAqLzsgfTsKQEAgLTI3Miw3ICsyNzIsNyBAQAogCQkwRjlEQUEwNTFGRDFD
MzdCMDA3OUM1QjIgLyogU3RhY2tTaG90UHJvZmlsZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gU3RhY2tTaG90UHJvZmlsZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJMEZBNkYzOEUyMENDNTgwRTAwQTAzRENEIC8qIFNlZ21lbnRlZFZlY3Rvci5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTZWdtZW50ZWRWZWN0b3IuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRkE2RjM5MDIwQ0M2MUVCMDBBMDNEQ0QgLyog
UmVmQ291bnRlZEFycmF5LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9
IFJlZkNvdW50ZWRBcnJheS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTBGQTZG
MzkyMjBDQzczQTIwMEEwM0RDRCAvKiBTbWFsbFB0clNldC5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IHBhdGggPSBTbWFsbFB0clNldC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCTBGQTZGMzkyMjBDQzczQTIwMEEwM0RDRCAvKiBTbWFsbFNldC5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTbWFsbFNldC5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTBGQTZGMzk0MjBDQ0FDRTkwMEEwM0RDRCAvKiBVbmlxdWVBcnJh
eS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBVbmlxdWVBcnJheS5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGQjE0RTE4MTgwRkEyMTgwMDlCNkI0
RCAvKiBCYWcuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQmFnLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGQjE0RTFBMTgxMEUxREEwMDlCNkI0RCAvKiBCYWdU
b0hhc2hNYXAuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQmFnVG9IYXNoTWFwLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CkBAIC00NDIsNyArNDQyLDcgQEAKIAkJNzBFQ0E2MEIxQjAyNDI2ODAwNDQ5
NzM5IC8qIFN5bWJvbEltcGwuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU3lt
Ym9sSW1wbC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3MEVDQTYwQzFCMDI0MjY4
MDA0NDk3MzkgLyogVW5pcXVlZFN0cmluZ0ltcGwuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gVW5pcXVlZFN0cmluZ0ltcGwuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJNzkwMzhFMDUyMjRCMDVBNzAwNEMwNzM4IC8qIFNwYW5uaW5nVHJlZS5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBTcGFubmluZ1RyZWUuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKLQkJNzkzNkQ2QTkxQzk5RjhBRTAwMEQxQUVEIC8qIFNtYWxsUHRyU2V0LmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNtYWxsUHRyU2V0Lmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCTc5MzZENkE5MUM5OUY4QUUwMDBEMUFFRCAvKiBTbWFsbFNldC5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTbWFsbFNldC5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQk3OTNCRkFERDlDRUQ0NEI4QjlGQkNBMTYgLyogU3RkVW5vcmRl
cmVkTWFwLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFN0ZFVub3JkZXJlZE1h
cC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3OTUyMTIwMjFGNDI1ODg4MDBCRDY0
MjEgLyogU2luZ2xlUm9vdEdyYXBoLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IFNpbmdsZVJvb3RHcmFwaC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3QTA1MDkz
RDFGQjlEQ0M1MDBCMzNGQjggLyogSlNPTlZhbHVlcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBKU09OVmFsdWVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0x
MjQ0LDggKzEyNDQsOCBAQAogCQkJCUE3NDg3NDRGMTdBMEJEQUUwMEZBMDRDQiAvKiBTaXhDaGFy
YWN0ZXJIYXNoLmNwcCAqLywKIAkJCQlBNzQ4NzQ1MDE3QTBCREFFMDBGQTA0Q0IgLyogU2l4Q2hh
cmFjdGVySGFzaC5oICovLAogCQkJCUE4QTQ3MzBDMTUxQTgyNUIwMDQxMjNGRiAvKiBTaXplTGlt
aXRzLmNwcCAqLywKLQkJCQkwRkE2RjM5MjIwQ0M3M0EyMDBBMDNEQ0QgLyogU21hbGxQdHJTZXQu
Y3BwICovLAotCQkJCTc5MzZENkE5MUM5OUY4QUUwMDBEMUFFRCAvKiBTbWFsbFB0clNldC5oICov
LAorCQkJCTBGQTZGMzkyMjBDQzczQTIwMEEwM0RDRCAvKiBTbWFsbFNldC5jcHAgKi8sCisJCQkJ
NzkzNkQ2QTkxQzk5RjhBRTAwMEQxQUVEIC8qIFNtYWxsU2V0LmggKi8sCiAJCQkJQTMwRDQxMkQx
RjBERTEzRjAwQjcxOTU0IC8qIFNvZnRMaW5raW5nLmggKi8sCiAJCQkJOTMxNTZDOEQyNjJDOTgy
MjAwRUFFMjdCIC8qIFNvcnRlZEFycmF5TWFwLmggKi8sCiAJCQkJNzkwMzhFMDUyMjRCMDVBNzAw
NEMwNzM4IC8qIFNwYW5uaW5nVHJlZS5oICovLApAQCAtMTc2MCw3ICsxNzYwLDcgQEAKIAkJCQk1
MzExQkQ1MzFFQTcxQ0FEMDA1MjUyODEgLyogU2lnbmFscy5jcHAgaW4gU291cmNlcyAqLywKIAkJ
CQlBNzQ4NzQ1MjE3QTBCREFFMDBGQTA0Q0IgLyogU2l4Q2hhcmFjdGVySGFzaC5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQlBOEE0NzQyNTE1MUE4MjVCMDA0MTIzRkYgLyogU2l6ZUxpbWl0cy5jcHAg
aW4gU291cmNlcyAqLywKLQkJCQkwRkE2RjM5MzIwQ0M3M0EzMDBBMDNEQ0QgLyogU21hbGxQdHJT
ZXQuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEZBNkYzOTMyMENDNzNBMzAwQTAzRENEIC8qIFNt
YWxsU2V0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE4QTQ3NDI3MTUxQTgyNUIwMDQxMjNGRiAv
KiBTdGFja0JvdW5kcy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlGRUVBNERGOTIxNkQ3QkU0MDBB
QzA2MDIgLyogU3RhY2tQb2ludGVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUZFREFDRDNEMTYz
MEY4M0YwMEM2OTYzNCAvKiBTdGFja1N0YXRzLmNwcCBpbiBTb3VyY2VzICovLApkaWZmIC0tZ2l0
IGEvU291cmNlL1dURi93dGYvQ01ha2VMaXN0cy50eHQgYi9Tb3VyY2UvV1RGL3d0Zi9DTWFrZUxp
c3RzLnR4dAppbmRleCBlN2RiYzRmMDJmYTAuLjgwMThmYWJhNDZjNyAxMDA2NDQKLS0tIGEvU291
cmNlL1dURi93dGYvQ01ha2VMaXN0cy50eHQKKysrIGIvU291cmNlL1dURi93dGYvQ01ha2VMaXN0
cy50eHQKQEAgLTIzNSw3ICsyMzUsNyBAQCBzZXQoV1RGX1BVQkxJQ19IRUFERVJTCiAgICAgU2lu
Z2x5TGlua2VkTGlzdC5oCiAgICAgU2luZ2x5TGlua2VkTGlzdFdpdGhUYWlsLmgKICAgICBTaXhD
aGFyYWN0ZXJIYXNoLmgKLSAgICBTbWFsbFB0clNldC5oCisgICAgU21hbGxTZXQuaAogICAgIFNv
ZnRMaW5raW5nLmgKICAgICBTb3J0ZWRBcnJheU1hcC5oCiAgICAgU3Bhbm5pbmdUcmVlLmgKQEAg
LTQ0Myw3ICs0NDMsNyBAQCBzZXQoV1RGX1NPVVJDRVMKICAgICBTZWNvbmRzLmNwcAogICAgIFNl
Z21lbnRlZFZlY3Rvci5jcHAKICAgICBTaXhDaGFyYWN0ZXJIYXNoLmNwcAotICAgIFNtYWxsUHRy
U2V0LmNwcAorICAgIFNtYWxsU2V0LmNwcAogICAgIFN0YWNrQm91bmRzLmNwcAogICAgIFN0YWNr
UG9pbnRlci5jcHAKICAgICBTdGFja1N0YXRzLmNwcApkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93
dGYvU21hbGxQdHJTZXQuY3BwIGIvU291cmNlL1dURi93dGYvU21hbGxTZXQuY3BwCnNpbWlsYXJp
dHkgaW5kZXggOTQlCnJlbmFtZSBmcm9tIFNvdXJjZS9XVEYvd3RmL1NtYWxsUHRyU2V0LmNwcApy
ZW5hbWUgdG8gU291cmNlL1dURi93dGYvU21hbGxTZXQuY3BwCmluZGV4IDQyMDQ4ZTdlOGEyMy4u
MmQyZjQxNWIyYzdhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi9TbWFsbFB0clNldC5jcHAK
KysrIGIvU291cmNlL1dURi93dGYvU21hbGxTZXQuY3BwCkBAIC0yNCwxMiArMjQsMTIgQEAKICAq
LwogCiAjaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSA8d3RmL1NtYWxsUHRyU2V0Lmg+Cisj
aW5jbHVkZSA8d3RmL1NtYWxsU2V0Lmg+CiAKICNpbmNsdWRlIDx3dGYvTmV2ZXJEZXN0cm95ZWQu
aD4KIAogbmFtZXNwYWNlIFdURiB7CiAKLURFRklORV9BTExPQ0FUT1JfV0lUSF9IRUFQX0lERU5U
SUZJRVIoU21hbGxQdHJTZXQpOworREVGSU5FX0FMTE9DQVRPUl9XSVRIX0hFQVBfSURFTlRJRklF
UihTbWFsbFNldCk7CiAKIH0gLy8gbmFtZXNwYWNlIFdURgpkaWZmIC0tZ2l0IGEvU291cmNlL1dU
Ri93dGYvU21hbGxQdHJTZXQuaCBiL1NvdXJjZS9XVEYvd3RmL1NtYWxsU2V0LmgKc2ltaWxhcml0
eSBpbmRleCA1MCUKcmVuYW1lIGZyb20gU291cmNlL1dURi93dGYvU21hbGxQdHJTZXQuaApyZW5h
bWUgdG8gU291cmNlL1dURi93dGYvU21hbGxTZXQuaAppbmRleCA0YzZlNDYxOTZkMjkuLjI0NzQx
ZjEyYzM1ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYvU21hbGxQdHJTZXQuaAorKysgYi9T
b3VyY2UvV1RGL3d0Zi9TbWFsbFNldC5oCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAxNiBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTYtMjAyMSBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgKgogICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTMyLDY1ICszMiw3NyBAQAogCiBuYW1lc3BhY2UgV1RG
IHsKIAotREVDTEFSRV9BTExPQ0FUT1JfV0lUSF9IRUFQX0lERU5USUZJRVIoU21hbGxQdHJTZXQp
OworREVDTEFSRV9BTExPQ0FUT1JfV0lUSF9IRUFQX0lERU5USUZJRVIoU21hbGxTZXQpOwogCi10
ZW1wbGF0ZTx0eXBlbmFtZSBQdHJUeXBlLCB1bnNpZ25lZCBTbWFsbEFycmF5U2l6ZSA9IDg+Ci1j
bGFzcyBTbWFsbFB0clNldCB7CisvLyBGdW5jdGlvbmFsbHksIHRoaXMgY2xhc3MgaXMgdmVyeSBz
aW1pbGFyIHRvIFZhcmlhbnQ8VmVjdG9yPFQsIFNtYWxsQXJyYXlTaXplPiwgSGFzaFNldDxUPj4K
Ky8vIEl0IGlzIG9wdGltaXplZCBwcmltYXJpbHkgZm9yIHNwYWNlLCBidXQgaXMgYWxzbyBxdWl0
ZSBmYXN0CisvLyBJdHMgbWFpbiBsaW1pdGF0aW9uIGlzIHRoYXQgaXQgaGFzIG5vIHdheSB0byBy
ZW1vdmUgZWxlbWVudHMgb25jZSB0aGV5IGhhdmUgYmVlbiBhZGRlZCB0byBpdAorLy8gQWxzbywg
aW5zdGVhZCBvZiBiZWluZyBmdWxseSBwYXJhbWV0ZXJpemVkIGJ5IGEgSGFzaFRyYWl0IHBhcmFt
ZXRlciwgaXQgYWx3YXlzIHVzZXMgLTEgKGFsbCBvbmVzKSBhcyBpdHMgZW1wdHkgdmFsdWUKKy8v
IFJlbGF0ZWRseSwgaXQgY2FuIG9ubHkgc3RvcmUgb2JqZWN0cyBvZiB1cCB0byA2NCBiaXQgc2l6
ZSAoYnV0IHRoYXQgcGFydGljdWxhciBsaW1pdGF0aW9uIHNob3VsZCBiZSBmYWlybHkgZWFzeSB0
byBsaWZ0IGlmIG5lZWRlZCkKKy8vIFVzZSBpdCB3aGVuZXZlciB5b3UgbmVlZCB0byBzdG9yZSBh
biB1bmJvdW5kZWQgYnV0IHByb2JhYmx5IHNtYWxsIG51bWJlciBvZiB1bnNpZ25lZCBpbnRlZ2Vy
cyBvciBwb2ludGVycy4KK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIEhhc2ggPSBQdHJI
YXNoQmFzZTxULCBmYWxzZSAvKiBpc1NtYXJ0UHRyICovPiwgdW5zaWduZWQgU21hbGxBcnJheVNp
emUgPSA4PgorY2xhc3MgU21hbGxTZXQgewogICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwot
ICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKFNtYWxsUHRyU2V0KTsKLSAgICBzdGF0aWNfYXNzZXJ0
KHN0ZDo6aXNfdHJpdmlhbGx5X2Rlc3RydWN0aWJsZTxQdHJUeXBlPjo6dmFsdWUsICJXZSBjdXJy
ZW50bHkgZG9uJ3Qgc3VwcG9ydCBub24tdHJpdmlhbGx5IGRlc3RydWN0aWJsZSBwb2ludGVyIHR5
cGVzLiIpOwotICAgIHN0YXRpY19hc3NlcnQoc2l6ZW9mKFB0clR5cGUpID09IHNpemVvZih2b2lk
KiksICJPbmx5IHN1cHBvcnQgcG9pbnRlciBzaXplZCB0aGluZ3MuIik7CisgICAgV1RGX01BS0Vf
Tk9OQ09QWUFCTEUoU21hbGxTZXQpOworICAgIHN0YXRpY19hc3NlcnQoc3RkOjppc190cml2aWFs
bHlfZGVzdHJ1Y3RpYmxlPFQ+Ojp2YWx1ZSwgIldlIGN1cnJlbnRseSBkb24ndCBzdXBwb3J0IG5v
bi10cml2aWFsbHkgZGVzdHJ1Y3RpYmxlIHR5cGVzLiIpOwogICAgIHN0YXRpY19hc3NlcnQoIShT
bWFsbEFycmF5U2l6ZSAmIChTbWFsbEFycmF5U2l6ZSAtIDEpKSwgIklubGluZSBzaXplIG11c3Qg
YmUgYSBwb3dlciBvZiB0d28uIik7CisgICAgc3RhdGljX2Fzc2VydChzaXplb2YoVCopIDw9IFNt
YWxsQXJyYXlTaXplICogc2l6ZW9mKFQpLCAiVGhpcyBjbGFzcyBoYXMgbm90IGJlZW4gdGVzdGVk
IGZvciBtX2lubGluZS5idWZmZXIgbGFyZ2VyIHRoYW4gbV9pbmxpbmUuc21hbGxTdG9yYWdlIik7
CiAKLXB1YmxpYzogCi0gICAgU21hbGxQdHJTZXQoKQorcHVibGljOgorICAgIFNtYWxsU2V0KCkK
KyAgICAgICAgOiBtX2lubGluZSgpCiAgICAgewogICAgICAgICBpbml0aWFsaXplKCk7CiAgICAg
fQogCi0gICAgLy8gV2UgdGFrZSBjYXJlIHRvIGhhdmUgU21hbGxQdHJTZXQgaGF2ZSBwYXJ0aWFs
IG1vdmUgc2VtYW50aWNzIGFsbG93YWJsZSB0aHJvdWdoCisgICAgLy8gV2UgdGFrZSBjYXJlIHRv
IGhhdmUgU21hbGxTZXQgaGF2ZSBwYXJ0aWFsIG1vdmUgc2VtYW50aWNzIGFsbG93YWJsZSB0aHJv
dWdoCiAgICAgLy8gbWVtY3B5LiBJdCdzIHBhcnRpYWwgbW92ZSBzZW1hbnRpY3MgYmVjYXVzZSBv
dXIgZGVzdHJ1Y3RvciBzaG91bGQgbm90IGJlIGNhbGxlZAogICAgIC8vIG9uIHRoZSBTbWFsbFB0
ck9iamVjdCBpbiB0aGUgb2xkIG1lbW9yeSB3ZSB3ZXJlIG1vdmVkIGZyb20gKG90aGVyd2lzZSwg
d2UgbWlnaHQgZnJlZSBtX2J1ZmZlciB0d2ljZSkKICAgICAvLyB1bmxlc3MgdGhhdCBvbGQgbWVt
b3J5IGlzIHJlc2V0IHRvIGJlIGlzU21hbGwoKS4gU2VlIG1vdmUgY29uc3RydWN0b3IgYmVsb3cu
CiAgICAgLy8gVG8gbWFpbnRhaW4gdGhlc2Ugc2VtYW50aWNzLCB3ZSBkZXRlcm1pbmUgaWYgd2Un
cmUgc21hbGwgYnkgY2hlY2tpbmcgb3VyIHNpemUKICAgICAvLyBhbmQgbm90IG91ciBtX2J1ZmZl
ciBwb2ludGVyLiBBbmQgd2hlbiB3ZSdyZSBzbWFsbCwgd2UgZG9uJ3QgZG8gb3BlcmF0aW9ucyBv
bgogICAgIC8vIG1fYnVmZmVyLCBpbnN0ZWFkLCB3ZSBwZXJmb3JtIG9wZXJhdGlvbnMgb24gbV9z
bWFsbFN0b3JhZ2UgZGlyZWN0bHkuIFRoZSByZWFzb24gd2Ugd2FudAotICAgIC8vIHRoZXNlIHNl
bWFudGljcyBpcyB0aGF0IGl0J3MgYmVuZWZpY2lhbCB0byBoYXZlIGEgVmVjdG9yIHRoYXQgY29u
dGFpbnMgU21hbGxQdHJTZXQKLSAgICAvLyAob3IgYW4gb2JqZWN0IHdpdGggU21hbGxQdHJTZXQg
YXMgYSBmaWVsZCkgYmUgYWxsb3dlZCB0byB1c2UgbWVtY3B5IGZvciBpdHMgbW92ZSBvcGVyYXRp
b24uCisgICAgLy8gdGhlc2Ugc2VtYW50aWNzIGlzIHRoYXQgaXQncyBiZW5lZmljaWFsIHRvIGhh
dmUgYSBWZWN0b3IgdGhhdCBjb250YWlucyBTbWFsbFNldAorICAgIC8vIChvciBhbiBvYmplY3Qg
d2l0aCBTbWFsbFNldCBhcyBhIGZpZWxkKSBiZSBhbGxvd2VkIHRvIHVzZSBtZW1jcHkgZm9yIGl0
cyBtb3ZlIG9wZXJhdGlvbi4KIAotICAgIFNtYWxsUHRyU2V0KFNtYWxsUHRyU2V0JiYgb3RoZXIp
CisgICAgU21hbGxTZXQoU21hbGxTZXQmJiBvdGhlcikKICAgICB7Ci0gICAgICAgIG1lbWNweSh0
aGlzLCAmb3RoZXIsIHNpemVvZihTbWFsbFB0clNldCkpOworICAgICAgICBtZW1jcHkodGhpcywg
Jm90aGVyLCBzaXplb2YoU21hbGxTZXQpKTsKICAgICAgICAgb3RoZXIuaW5pdGlhbGl6ZSgpOwog
ICAgIH0KIAotICAgIFNtYWxsUHRyU2V0JiBvcGVyYXRvcj0oU21hbGxQdHJTZXQmJiBvdGhlcikK
KyAgICBTbWFsbFNldCYgb3BlcmF0b3I9KFNtYWxsU2V0JiYgb3RoZXIpCiAgICAgewotICAgICAg
ICB0aGlzLT5+U21hbGxQdHJTZXQoKTsKLSAgICAgICAgbmV3ICh0aGlzKSBTbWFsbFB0clNldChX
VEZNb3ZlKG90aGVyKSk7CisgICAgICAgIHRoaXMtPn5TbWFsbFNldCgpOworICAgICAgICBuZXcg
KHRoaXMpIFNtYWxsU2V0KFdURk1vdmUob3RoZXIpKTsKICAgICAgICAgcmV0dXJuICp0aGlzOwog
ICAgIH0KIAotICAgIH5TbWFsbFB0clNldCgpCisgICAgflNtYWxsU2V0KCkKICAgICB7CiAgICAg
ICAgIGlmICghaXNTbWFsbCgpKQotICAgICAgICAgICAgU21hbGxQdHJTZXRNYWxsb2M6OmZyZWUo
bV9idWZmZXIpOworICAgICAgICAgICAgU21hbGxTZXRNYWxsb2M6OmZyZWUobV9pbmxpbmUuYnVm
ZmVyKTsKICAgICB9CiAKLSAgICBpbmxpbmUgdm9pZCBhZGQoUHRyVHlwZSBwdHIpCisgICAgLy8g
V2UgY291bGQgZWFzaWx5IGluY2x1ZGUgYW4gaXRlcmF0b3IgaW4gdGhpcyB0byBmdWxseSBtYXRj
aCB0aGUgSGFzaFNldCBpbnRlcmZhY2UsIGJ1dCBjdXJyZW50bHkgbm9uZSBvZiBvdXIgY2xpZW50
cyByZXF1aXJlIGl0LgorICAgIHN0cnVjdCBBZGRSZXN1bHQgeworICAgICAgICBib29sIGlzTmV3
RW50cnk7CisgICAgfTsKKworICAgIGlubGluZSBBZGRSZXN1bHQgYWRkKFQgdmFsdWUpCiAgICAg
ewotICAgICAgICBBU1NFUlQoaXNWYWxpZEVudHJ5KHB0cikpOworICAgICAgICBBU1NFUlQoaXNW
YWxpZEVudHJ5KHZhbHVlKSk7CiAKICAgICAgICAgaWYgKGlzU21hbGwoKSkgewogICAgICAgICAg
ICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fc2l6ZTsgaSsrKSB7Ci0gICAgICAgICAgICAg
ICAgaWYgKG1fc21hbGxTdG9yYWdlW2ldID09IHB0cikKLSAgICAgICAgICAgICAgICAgICAgcmV0
dXJuOworICAgICAgICAgICAgICAgIGlmIChtX2lubGluZS5zbWFsbFN0b3JhZ2VbaV0gPT0gdmFs
dWUpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiB7IGZhbHNlIH07CiAgICAgICAgICAgICB9
CiAKICAgICAgICAgICAgIGlmIChtX3NpemUgPCBTbWFsbEFycmF5U2l6ZSkgewotICAgICAgICAg
ICAgICAgIG1fc21hbGxTdG9yYWdlW21fc2l6ZV0gPSBwdHI7CisgICAgICAgICAgICAgICAgbV9p
bmxpbmUuc21hbGxTdG9yYWdlW21fc2l6ZV0gPSB2YWx1ZTsKICAgICAgICAgICAgICAgICArK21f
c2l6ZTsKLSAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgcmV0dXJuIHsg
dHJ1ZSB9OwogICAgICAgICAgICAgfQogCiAgICAgICAgICAgICBncm93KHN0ZDo6bWF4KDY0dSwg
U21hbGxBcnJheVNpemUgKiAyKSk7CkBAIC0xMDMsMjYgKzExNSwyOSBAQCBwdWJsaWM6CiAgICAg
ICAgICAgICBBU1NFUlQoIShtX2NhcGFjaXR5ICYgKG1fY2FwYWNpdHkgLSAxKSkpOwogICAgICAg
ICB9CiAKLSAgICAgICAgdm9pZCoqIGJ1Y2tldCA9IHRoaXMtPmJ1Y2tldChwdHIpOwotICAgICAg
ICBpZiAoKmJ1Y2tldCAhPSBwdHIpIHsKLSAgICAgICAgICAgICpidWNrZXQgPSBwdHI7CisgICAg
ICAgIFQqIGJ1Y2tldCA9IHRoaXMtPmJ1Y2tldCh2YWx1ZSk7CisgICAgICAgIGlmICgqYnVja2V0
ICE9IHZhbHVlKSB7CisgICAgICAgICAgICAqYnVja2V0ID0gdmFsdWU7CiAgICAgICAgICAgICAr
K21fc2l6ZTsKKyAgICAgICAgICAgIHJldHVybiB7IHRydWUgfTsKICAgICAgICAgfQorICAgICAg
ICByZXR1cm4geyBmYWxzZSB9OwogICAgIH0KIAotICAgIGlubGluZSBib29sIGNvbnRhaW5zKFB0
clR5cGUgcHRyKSBjb25zdAorICAgIGlubGluZSBib29sIGNvbnRhaW5zKFQgdmFsdWUpIGNvbnN0
CiAgICAgewotICAgICAgICBBU1NFUlQoaXNWYWxpZEVudHJ5KHB0cikpOworICAgICAgICBBU1NF
UlQoaXNWYWxpZEVudHJ5KHZhbHVlKSk7CiAgICAgICAgIGlmIChpc1NtYWxsKCkpIHsKLSAgICAg
ICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX3NpemU7IGkrKykgeyAvLyBXZSBvbmx5
IG5lZWQgdG8gc2VhcmNoIHVwIHRvIG1fc2l6ZSBiZWNhdXNlIHdlIHN0b3JlIHRoaW5ncyBsaW5l
YXJseSBpbnNpZGUgbV9zbWFsbFN0b3JhZ2UuCi0gICAgICAgICAgICAgICAgaWYgKG1fc21hbGxT
dG9yYWdlW2ldID09IHB0cikKKyAgICAgICAgICAgIC8vIFdlIG9ubHkgbmVlZCB0byBzZWFyY2gg
dXAgdG8gbV9zaXplIGJlY2F1c2Ugd2Ugc3RvcmUgdGhpbmdzIGxpbmVhcmx5IGluc2lkZSBtX3Nt
YWxsU3RvcmFnZS4KKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX3NpemU7
IGkrKykgeworICAgICAgICAgICAgICAgIGlmIChtX2lubGluZS5zbWFsbFN0b3JhZ2VbaV0gPT0g
dmFsdWUpCiAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICAgICAgfQog
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9CiAKLSAgICAgICAgdm9pZCoqIGJ1
Y2tldCA9IHRoaXMtPmJ1Y2tldChwdHIpOwotICAgICAgICByZXR1cm4gKmJ1Y2tldCA9PSBwdHI7
CisgICAgICAgIFQqIGJ1Y2tldCA9IHRoaXMtPmJ1Y2tldCh2YWx1ZSk7CisgICAgICAgIHJldHVy
biAqYnVja2V0ID09IHZhbHVlOwogICAgIH0KIAogICAgIGNsYXNzIGl0ZXJhdG9yIHsKQEAgLTEz
NywxNSArMTUyLDE1IEBAIHB1YmxpYzoKICAgICAgICAgICAgIHJldHVybiAqdGhpczsKICAgICAg
ICAgfQogICAgICAgICAKLSAgICAgICAgUHRyVHlwZSBvcGVyYXRvciooKSBjb25zdCB7IEFTU0VS
VChtX2luZGV4IDwgbV9jYXBhY2l0eSk7IHJldHVybiBzdGF0aWNfY2FzdDxQdHJUeXBlPihtX2J1
ZmZlclttX2luZGV4XSk7IH0KKyAgICAgICAgVCBvcGVyYXRvciooKSBjb25zdCB7IEFTU0VSVCht
X2luZGV4IDwgbV9jYXBhY2l0eSk7IHJldHVybiBzdGF0aWNfY2FzdDxUPihtX2J1ZmZlclttX2lu
ZGV4XSk7IH0KICAgICAgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IGl0ZXJhdG9yJiBvdGhlcikg
Y29uc3QgeyBBU1NFUlQobV9idWZmZXIgPT0gb3RoZXIubV9idWZmZXIpOyByZXR1cm4gbV9pbmRl
eCA9PSBvdGhlci5tX2luZGV4OyB9CiAgICAgICAgIGJvb2wgb3BlcmF0b3IhPShjb25zdCBpdGVy
YXRvciYgb3RoZXIpIGNvbnN0IHsgQVNTRVJUKG1fYnVmZmVyID09IG90aGVyLm1fYnVmZmVyKTsg
cmV0dXJuICEoKnRoaXMgPT0gb3RoZXIpOyB9CiAKICAgICBwcml2YXRlOgotICAgICAgICB0ZW1w
bGF0ZTx0eXBlbmFtZSBVLCB1bnNpZ25lZCBTPiBmcmllbmQgY2xhc3MgV1RGOjpTbWFsbFB0clNl
dDsKKyAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVSwgdHlwZW5hbWUgSCwgdW5zaWduZWQgUz4g
ZnJpZW5kIGNsYXNzIFdURjo6U21hbGxTZXQ7CiAgICAgICAgIHVuc2lnbmVkIG1faW5kZXg7CiAg
ICAgICAgIHVuc2lnbmVkIG1fY2FwYWNpdHk7Ci0gICAgICAgIHZvaWQqKiBtX2J1ZmZlcjsKKyAg
ICAgICAgVCogbV9idWZmZXI7CiAgICAgfTsKIAogICAgIGl0ZXJhdG9yIGJlZ2luKCkgY29uc3QK
QEAgLTE1NCw5ICsxNjksOSBAQCBwdWJsaWM6CiAgICAgICAgIGl0Lm1faW5kZXggPSBzdGQ6Om51
bWVyaWNfbGltaXRzPHVuc2lnbmVkPjo6bWF4KCk7CiAgICAgICAgIGl0Lm1fY2FwYWNpdHkgPSBt
X2NhcGFjaXR5OwogICAgICAgICBpZiAoaXNTbWFsbCgpKQotICAgICAgICAgICAgaXQubV9idWZm
ZXIgPSBjb25zdF9jYXN0PHZvaWQqKj4obV9zbWFsbFN0b3JhZ2UpOworICAgICAgICAgICAgaXQu
bV9idWZmZXIgPSBjb25zdF9jYXN0PFQqPihtX2lubGluZS5zbWFsbFN0b3JhZ2UpOwogICAgICAg
ICBlbHNlCi0gICAgICAgICAgICBpdC5tX2J1ZmZlciA9IG1fYnVmZmVyOworICAgICAgICAgICAg
aXQubV9idWZmZXIgPSBtX2lubGluZS5idWZmZXI7CiAKICAgICAgICAgKytpdDsKIApAQCAtMTY5
LDI0ICsxODQsMjggQEAgcHVibGljOgogICAgICAgICBpdC5tX2luZGV4ID0gbV9jYXBhY2l0eTsK
ICAgICAgICAgaXQubV9jYXBhY2l0eSA9IG1fY2FwYWNpdHk7CiAgICAgICAgIGlmIChpc1NtYWxs
KCkpCi0gICAgICAgICAgICBpdC5tX2J1ZmZlciA9IGNvbnN0X2Nhc3Q8dm9pZCoqPihtX3NtYWxs
U3RvcmFnZSk7CisgICAgICAgICAgICBpdC5tX2J1ZmZlciA9IGNvbnN0X2Nhc3Q8VCo+KG1faW5s
aW5lLnNtYWxsU3RvcmFnZSk7CiAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIGl0Lm1fYnVmZmVy
ID0gbV9idWZmZXI7CisgICAgICAgICAgICBpdC5tX2J1ZmZlciA9IG1faW5saW5lLmJ1ZmZlcjsK
IAogICAgICAgICByZXR1cm4gaXQ7CiAgICAgfQogCiAgICAgaW5saW5lIHVuc2lnbmVkIHNpemUo
KSBjb25zdCB7IHJldHVybiBtX3NpemU7IH0KIAorICAgIGlubGluZSBib29sIGlzRW1wdHkoKSBj
b25zdCB7IHJldHVybiAhc2l6ZSgpOyB9CisKIHByaXZhdGU6Ci0gICAgY29uc3RleHByIHN0YXRp
YyB2b2lkKiBlbXB0eVZhbHVlKCkKKyAgICBjb25zdGV4cHIgc3RhdGljIFQgZW1wdHlWYWx1ZSgp
CiAgICAgewotICAgICAgICByZXR1cm4gYml0d2lzZV9jYXN0PHZvaWQqPihzdGQ6Om51bWVyaWNf
bGltaXRzPHVpbnRwdHJfdD46Om1heCgpKTsKKyAgICAgICAgaWYgY29uc3RleHByIChzdGQ6Omlz
X3BvaW50ZXI8VD46OnZhbHVlKQorICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PFQ+KGJp
dHdpc2VfY2FzdDx2b2lkKj4oc3RkOjpudW1lcmljX2xpbWl0czx1aW50cHRyX3Q+OjptYXgoKSkp
OworICAgICAgICByZXR1cm4gc3RkOjpudW1lcmljX2xpbWl0czxUPjo6bWF4KCk7CiAgICAgfQog
Ci0gICAgYm9vbCBpc1ZhbGlkRW50cnkoY29uc3QgUHRyVHlwZSBwdHIpIGNvbnN0CisgICAgYm9v
bCBpc1ZhbGlkRW50cnkoY29uc3QgVCB2YWx1ZSkgY29uc3QKICAgICB7Ci0gICAgICAgIHJldHVy
biBwdHIgIT0gZW1wdHlWYWx1ZSgpOworICAgICAgICByZXR1cm4gdmFsdWUgIT0gZW1wdHlWYWx1
ZSgpOwogICAgIH0KIAogICAgIGlubGluZSBib29sIGlzU21hbGwoKSBjb25zdApAQCAtMTk3LDQz
ICsyMTYsNjQgQEAgcHJpdmF0ZToKICAgICBpbmxpbmUgdm9pZCBpbml0aWFsaXplKCkKICAgICB7
CiAgICAgICAgIG1fc2l6ZSA9IDA7Ci0gICAgICAgIG1fYnVmZmVyID0gbnVsbHB0cjsKICAgICAg
ICAgbV9jYXBhY2l0eSA9IFNtYWxsQXJyYXlTaXplOwotICAgICAgICBtZW1zZXQobV9zbWFsbFN0
b3JhZ2UsIC0xLCBzaXplb2Yodm9pZCopICogU21hbGxBcnJheVNpemUpOworICAgICAgICBtZW1z
ZXQobV9pbmxpbmUuc21hbGxTdG9yYWdlLCAtMSwgc2l6ZW9mKFQpICogU21hbGxBcnJheVNpemUp
OwogICAgICAgICBBU1NFUlQoaXNTbWFsbCgpKTsKICAgICB9CiAKICAgICBpbmxpbmUgdm9pZCBn
cm93KHVuc2lnbmVkIHNpemUpCiAgICAgewotICAgICAgICBBU1NFUlQoc3RhdGljX2Nhc3Q8aW50
MzJfdD4oYml0d2lzZV9jYXN0PGludHB0cl90PihlbXB0eVZhbHVlKCkpKSA9PSAtMSk7CisgICAg
ICAgIC8vIFdlIG1lbXNldCB0aGUgbmV3IGJ1ZmZlciB3aXRoIC0xLCBzbyBmb3IgY29uc2lzdGVu
Y3kgZW1wdHlWYWx1ZSgpIG11c3QgcmV0dXJuIHNvbWV0aGluZyB3aGljaCBpcyBhbGwgMXMuCisj
aWYgIWRlZmluZWQoTkRFQlVHKQorICAgICAgICBpZiBjb25zdGV4cHIgKHN0ZDo6aXNfcG9pbnRl
cjxUPjo6dmFsdWUpCisgICAgICAgICAgICBBU1NFUlQoYml0d2lzZV9jYXN0PGludHB0cl90Pihl
bXB0eVZhbHVlKCkpID09IC0xbGwpOworICAgICAgICBlbHNlIGlmIGNvbnN0ZXhwciAoc2l6ZW9m
KFQpID09IDgpCisgICAgICAgICAgICBBU1NFUlQoYml0d2lzZV9jYXN0PGludDY0X3Q+KGVtcHR5
VmFsdWUoKSkgPT0gLTFsbCk7CisgICAgICAgIGVsc2UgaWYgY29uc3RleHByIChzaXplb2YoVCkg
PT0gNCkKKyAgICAgICAgICAgIEFTU0VSVChiaXR3aXNlX2Nhc3Q8aW50MzJfdD4oZW1wdHlWYWx1
ZSgpKSA9PSAtMSk7CisgICAgICAgIGVsc2UgaWYgY29uc3RleHByIChzaXplb2YoVCkgPT0gMikK
KyAgICAgICAgICAgIEFTU0VSVChiaXR3aXNlX2Nhc3Q8aW50MTZfdD4oZW1wdHlWYWx1ZSgpKSA9
PSAtMSk7CisgICAgICAgIGVsc2UgaWYgY29uc3RleHByIChzaXplb2YoVCkgPT0gMSkKKyAgICAg
ICAgICAgIEFTU0VSVChiaXR3aXNlX2Nhc3Q8aW50OF90PihlbXB0eVZhbHVlKCkpID09IC0xKTsK
KyAgICAgICAgZWxzZQorICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsK
KyNlbmRpZgogCi0gICAgICAgIHNpemVfdCBhbGxvY2F0aW9uU2l6ZSA9IHNpemVvZih2b2lkKikg
KiBzaXplOworICAgICAgICBzaXplX3QgYWxsb2NhdGlvblNpemUgPSBzaXplb2YoVCkgKiBzaXpl
OwogICAgICAgICBib29sIHdhc1NtYWxsID0gaXNTbWFsbCgpOwotICAgICAgICB2b2lkKiogb2xk
QnVmZmVyID0gd2FzU21hbGwgPyBtX3NtYWxsU3RvcmFnZSA6IG1fYnVmZmVyOworICAgICAgICBU
KiBvbGRCdWZmZXIgPSB3YXNTbWFsbCA/IG1faW5saW5lLnNtYWxsU3RvcmFnZSA6IG1faW5saW5l
LmJ1ZmZlcjsKICAgICAgICAgdW5zaWduZWQgb2xkQ2FwYWNpdHkgPSBtX2NhcGFjaXR5OwotICAg
ICAgICBtX2J1ZmZlciA9IHN0YXRpY19jYXN0PHZvaWQqKj4oU21hbGxQdHJTZXRNYWxsb2M6Om1h
bGxvYyhhbGxvY2F0aW9uU2l6ZSkpOwotICAgICAgICBtZW1zZXQobV9idWZmZXIsIC0xLCBhbGxv
Y2F0aW9uU2l6ZSk7CisgICAgICAgIFQqIG5ld0J1ZmZlciA9IHN0YXRpY19jYXN0PFQqPihTbWFs
bFNldE1hbGxvYzo6bWFsbG9jKGFsbG9jYXRpb25TaXplKSk7CisgICAgICAgIG1lbXNldChuZXdC
dWZmZXIsIC0xLCBhbGxvY2F0aW9uU2l6ZSk7CiAgICAgICAgIG1fY2FwYWNpdHkgPSBzaXplOwog
CiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBvbGRDYXBhY2l0eTsgaSsrKSB7CiAg
ICAgICAgICAgICBpZiAob2xkQnVmZmVyW2ldICE9IGVtcHR5VmFsdWUoKSkgewotICAgICAgICAg
ICAgICAgIHZvaWQqKiBwdHIgPSB0aGlzLT5idWNrZXQoc3RhdGljX2Nhc3Q8UHRyVHlwZT4ob2xk
QnVmZmVyW2ldKSk7CisgICAgICAgICAgICAgICAgVCogcHRyID0gYnVja2V0SW5CdWZmZXIobmV3
QnVmZmVyLCBzdGF0aWNfY2FzdDxUPihvbGRCdWZmZXJbaV0pKTsKICAgICAgICAgICAgICAgICAq
cHRyID0gb2xkQnVmZmVyW2ldOwogICAgICAgICAgICAgfQogICAgICAgICB9CiAKICAgICAgICAg
aWYgKCF3YXNTbWFsbCkKLSAgICAgICAgICAgIFNtYWxsUHRyU2V0TWFsbG9jOjpmcmVlKG9sZEJ1
ZmZlcik7CisgICAgICAgICAgICBTbWFsbFNldE1hbGxvYzo6ZnJlZShvbGRCdWZmZXIpOworCisg
ICAgICAgIG1faW5saW5lLmJ1ZmZlciA9IG5ld0J1ZmZlcjsKICAgICB9CiAKIAotICAgIGlubGlu
ZSB2b2lkKiogYnVja2V0KFB0clR5cGUgdGFyZ2V0KSBjb25zdAorICAgIGlubGluZSBUKiBidWNr
ZXQoVCB0YXJnZXQpIGNvbnN0CisgICAgeworICAgICAgICBBU1NFUlQoIWlzU21hbGwoKSk7Cisg
ICAgICAgIHJldHVybiBidWNrZXRJbkJ1ZmZlcihtX2lubGluZS5idWZmZXIsIHRhcmdldCk7Cisg
ICAgfQorCisgICAgaW5saW5lIFQqIGJ1Y2tldEluQnVmZmVyKFQqIGJ1ZmZlciwgVCB0YXJnZXQp
IGNvbnN0CiAgICAgewogICAgICAgICBBU1NFUlQoIShtX2NhcGFjaXR5ICYgKG1fY2FwYWNpdHkg
LSAxKSkpOwotICAgICAgICB1bnNpZ25lZCBidWNrZXQgPSBQdHJIYXNoQmFzZTxQdHJUeXBlLCBm
YWxzZSAvKiBpc1NtYXJ0UHRyICovPjo6aGFzaCh0YXJnZXQpICYgKG1fY2FwYWNpdHkgLSAxKTsK
KyAgICAgICAgdW5zaWduZWQgYnVja2V0ID0gSGFzaDo6aGFzaCh0YXJnZXQpICYgKG1fY2FwYWNp
dHkgLSAxKTsKICAgICAgICAgdW5zaWduZWQgaW5kZXggPSAwOwogICAgICAgICB3aGlsZSAodHJ1
ZSkgewotICAgICAgICAgICAgdm9pZCoqIHB0ciA9IG1fYnVmZmVyICsgYnVja2V0OworICAgICAg
ICAgICAgVCogcHRyID0gYnVmZmVyICsgYnVja2V0OwogICAgICAgICAgICAgaWYgKCpwdHIgPT0g
ZW1wdHlWYWx1ZSgpKQogICAgICAgICAgICAgICAgIHJldHVybiBwdHI7CiAgICAgICAgICAgICBp
ZiAoKnB0ciA9PSB0YXJnZXQpCkBAIC0yNDUsMTAgKzI4NSwxMyBAQCBwcml2YXRlOgogCiAgICAg
dW5zaWduZWQgbV9zaXplOwogICAgIHVuc2lnbmVkIG1fY2FwYWNpdHk7Ci0gICAgdm9pZCoqIG1f
YnVmZmVyOwotICAgIHZvaWQqIG1fc21hbGxTdG9yYWdlW1NtYWxsQXJyYXlTaXplXTsKKyAgICB1
bmlvbiBVIHsKKyAgICAgICAgVCogYnVmZmVyOworICAgICAgICBUIHNtYWxsU3RvcmFnZVtTbWFs
bEFycmF5U2l6ZV07CisgICAgICAgIFUoKSB7IH07CisgICAgfSBtX2lubGluZTsKIH07CiAKIH0g
Ly8gbmFtZXNwYWNlIFdURgogCi11c2luZyBXVEY6OlNtYWxsUHRyU2V0OwordXNpbmcgV1RGOjpT
bWFsbFNldDsKZGlmZiAtLWdpdCBhL1Rvb2xzL0NoYW5nZUxvZyBiL1Rvb2xzL0NoYW5nZUxvZwpp
bmRleCAyNTBiMzI5MGJiM2QuLjE2YmU0ZDBiMGRmMiAxMDA2NDQKLS0tIGEvVG9vbHMvQ2hhbmdl
TG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE5IEBACisyMDIxLTA1LTE3ICBS
b2JpbiBNb3Jpc3NldCAgPHJtb3Jpc3NldEBhcHBsZS5jb20+CisKKyAgICAgICAgTWFrZSBBaXJB
bGxvY2F0ZVJlZ2lzdGVyc0J5R3JhcGhDb2xvcmluZyB1c2UgbGVzcyBtZW1vcnkKKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIyNTg0OAorCisgICAgICAg
IFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUykuCisKKyAgICAgICAgd3RmL1NtYWxsUHRyU2V0IChu
b3cgU21hbGxTZXQpIHdhcyBjb21wbGV0ZWx5IHVudGVzdGVkLCBzbyBJIGp1c3QgYWRkZWQgYSBm
ZXcgc2ltcGxlIHRlc3RzLgorCisgICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0V2ViS2l0QVBJ
Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0
cy9XVEYvU21hbGxTZXQuY3BwOiBBZGRlZC4KKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OnRlc3RT
bWFsbFNldE9mVW5zaWduZWQpOgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6dGVzdFNtYWxsU2V0
T2ZQb2ludGVycyk6CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjp0ZXN0VmVjdG9yc09mU21hbGxT
ZXRzT2ZVbnNpZ25lZCk6CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpURVNUKToKKwogMjAyMS0w
NS0xNSAgSmVyIE5vYmxlICA8amVyLm5vYmxlQGFwcGxlLmNvbT4KIAogICAgICAgICBNZWRpYVNl
c3Npb25Db29yZGluYXRvciBzdXJ2aXZlcyBwYWdlIHJlbG9hZC9uYXZpZ2F0aW9uCmRpZmYgLS1n
aXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RXZWJLaXRBUEkueGNvZGVwcm9qL3Byb2plY3Qu
cGJ4cHJvaiBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdFdlYktpdEFQSS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCmluZGV4IDY0NmY4NDIwN2EwZS4uMmI1Y2Q2ZTJmYjNlIDEwMDY0NAotLS0g
YS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RXZWJLaXRBUEkueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvagorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RXZWJLaXRBUEkueGNvZGVwcm9qL3By
b2plY3QucGJ4cHJvagpAQCAtMjA4LDYgKzIwOCw3IEBACiAJCTMxRTlCREEzMjQ3RjU3MjkwMDJF
NTFBMiAvKiB3ZWJnbC5odG1sIGluIENvcHkgUmVzb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDMxRTlCREEyMjQ3RjRERDAwMDJFNTFBMiAvKiB3ZWJnbC5odG1sICov
OyB9OwogCQkzMzk3NkQ4MzI0REM0NzlCMDA4MTIzMDQgLyogSW5kZXhTcGFyc2VTZXQuY3BwIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMzM5NzZEODIyNERD
NDc5QjAwODEyMzA0IC8qIEluZGV4U3BhcnNlU2V0LmNwcCAqLzsgfTsKIAkJMzNCRTVBRjkxMzdC
NUFBRTAwNzA1ODEzIC8qIE1vdXNlTW92ZUFmdGVyQ3Jhc2hfQnVuZGxlLmNwcCBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDMzQkU1QUY4MTM3QjVBQUUwMDcw
NTgxMyAvKiBNb3VzZU1vdmVBZnRlckNyYXNoX0J1bmRsZS5jcHAgKi87IH07CisJCTMzQzJDOUMx
MjY1MUY1QjkwMEU0MDdGNiAvKiBTbWFsbFNldC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzM0MyQzlDMDI2NTFGNUI5MDBFNDA3RjYgLyogU21hbGxT
ZXQuY3BwICovOyB9OwogCQkzM0RDODkxMjE0MTk1NUZFMDA3NDdFRjcgLyogc2ltcGxlLWlmcmFt
ZS5odG1sIGluIENvcHkgUmVzb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDMzREM4OTBFMTQxOTUzOTMwMDc0N0VGNyAvKiBzaW1wbGUtaWZyYW1lLmh0bWwgKi87IH07
CiAJCTMzREM4OTE0MTQxOTU3OUYwMDc0N0VGNyAvKiBMb2FkQ2FuY2VsZWROb1NlcnZlclJlZGly
ZWN0Q2FsbGJhY2tfQnVuZGxlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDMzREM4OTEzMTQxOTU3OUYwMDc0N0VGNyAvKiBMb2FkQ2FuY2VsZWROb1Nl
cnZlclJlZGlyZWN0Q2FsbGJhY2tfQnVuZGxlLmNwcCAqLzsgfTsKIAkJMzNFNzlFMDYxMzdCNUZE
OTAwRTMyRDk5IC8qIG1vdXNlLW1vdmUtbGlzdGVuZXIuaHRtbCBpbiBDb3B5IFJlc291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzM0U3OUUwNTEzN0I1RkNFMDBFMzJE
OTkgLyogbW91c2UtbW92ZS1saXN0ZW5lci5odG1sICovOyB9OwpAQCAtMTk5Miw2ICsxOTkzLDcg
QEAKIAkJMzM5NzZEODIyNERDNDc5QjAwODEyMzA0IC8qIEluZGV4U3BhcnNlU2V0LmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEluZGV4U3BhcnNlU2V0LmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMzNCRTVBRjQxMzdCNUE2QzAwNzA1ODEzIC8qIE1v
dXNlTW92ZUFmdGVyQ3Jhc2guY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRo
ID0gTW91c2VNb3ZlQWZ0ZXJDcmFzaC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTMzQkU1QUY4MTM3QjVBQUUwMDcwNTgxMyAvKiBNb3VzZU1vdmVBZnRlckNyYXNoX0J1bmRsZS5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBNb3VzZU1vdmVBZnRlckNy
YXNoX0J1bmRsZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTMzQzJDOUMwMjY1
MUY1QjkwMEU0MDdGNiAvKiBTbWFsbFNldC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTbWFsbFNl
dC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTMzREM4OTBFMTQxOTUzOTMwMDc0
N0VGNyAvKiBzaW1wbGUtaWZyYW1lLmh0bWwgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0Lmh0bWw7IHBhdGggPSAi
c2ltcGxlLWlmcmFtZS5odG1sIjsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMzNEQzg5
MTAxNDE5NTNBMzAwNzQ3RUY3IC8qIExvYWRDYW5jZWxlZE5vU2VydmVyUmVkaXJlY3RDYWxsYmFj
ay5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBMb2FkQ2FuY2VsZWRO
b1NlcnZlclJlZGlyZWN0Q2FsbGJhY2suY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQkzM0RDODkxMzE0MTk1NzlGMDA3NDdFRjcgLyogTG9hZENhbmNlbGVkTm9TZXJ2ZXJSZWRpcmVj
dENhbGxiYWNrX0J1bmRsZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGgg
PSBMb2FkQ2FuY2VsZWROb1NlcnZlclJlZGlyZWN0Q2FsbGJhY2tfQnVuZGxlLmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTQ0MjAsNiArNDQyMiw3IEBACiAJCQkJOTMzRDYzMUIx
RkNCNzYxODAwMzJFQ0Q2IC8qIEhhc2hlci5jcHAgKi8sCiAJCQkJMEJDRDgzMzQxNDg1N0NFNDAw
RUEyMDAzIC8qIEhhc2hNYXAuY3BwICovLAogCQkJCTI2QjJERkY4MTVCREU1OTkwMDRGNjkxRCAv
KiBIYXNoU2V0LmNwcCAqLywKKwkJCQkzM0MyQzlDMDI2NTFGNUI5MDBFNDA3RjYgLyogU21hbGxT
ZXQuY3BwICovLAogCQkJCTdDOEJGRjcwMjNDMDEwNjcwMEMwMDlCMyAvKiBIZXhOdW1iZXIuY3Bw
ICovLAogCQkJCTMzOTc2RDgyMjREQzQ3OUIwMDgxMjMwNCAvKiBJbmRleFNwYXJzZVNldC5jcHAg
Ki8sCiAJCQkJMjY2RkFGRDIxNUU1Nzc1MjAwRjYxRDVCIC8qIEludGVnZXJUb1N0cmluZ0NvbnZl
cnNpb24uY3BwICovLApAQCAtNTE1NSw2ICs1MTU4LDcgQEAKIAkJCWZpbGVzID0gKAogCQkJCTdD
ODNERTk5MUQwQTU5MEMwMEZFQkNGMyAvKiBBdG9tU3RyaW5nLmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCUZFMkQ5NDc0MjQ1RUIyRjQwMEU0ODEzNSAvKiBCaXRtYXAuY3BwIGluIFNvdXJjZXMgKi8s
CisJCQkJMzNDMkM5QzEyNjUxRjVCOTAwRTQwN0Y2IC8qIFNtYWxsU2V0LmNwcCBpbiBTb3VyY2Vz
ICovLAogCQkJCTFBREFEMTUwMUQ3N0E5RjYwMDIxMjU4NiAvKiBCbG9ja1B0ci5tbSBpbiBTb3Vy
Y2VzICovLAogCQkJCTdDODNERTlDMUQwQTU5MEMwMEZFQkNGMyAvKiBCbG9vbUZpbHRlci5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQk3QzgzREYxODFEMEE1OTBDMDBGRUJDRjMgLyogQm94UHRyLmNw
cCBpbiBTb3VyY2VzICovLApkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9X
VEYvU21hbGxTZXQuY3BwIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XVEYvU21hbGxTZXQu
Y3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMC4uYWM5ODlkMzFkNzFm
Ci0tLSAvZGV2L251bGwKKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XVEYvU21hbGxT
ZXQuY3BwCkBAIC0wLDAgKzEsMTUxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycn
CisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwor
ICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICog
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5o
IgorCisjaW5jbHVkZSAiVGVzdC5oIgorI2luY2x1ZGUgPHd0Zi9TbWFsbFNldC5oPgorCituYW1l
c3BhY2UgVGVzdFdlYktpdEFQSSB7CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+Cit2b2lkIHRlc3RT
bWFsbFNldE9mVW5zaWduZWQodW5zaWduZWQgbikKK3sKKyAgICBTbWFsbFNldDxULCBJbnRIYXNo
PFQ+PiBzZXQ7CisKKyAgICBFWFBFQ1RfVFJVRShzZXQuaXNFbXB0eSgpKTsKKyAgICBFWFBFQ1Rf
RVEoc2V0LnNpemUoKSwgMCk7CisKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbjsgKytp
KSB7CisgICAgICAgIGF1dG8gcmVzdWx0ID0gc2V0LmFkZChpKTsKKyAgICAgICAgRVhQRUNUX1RS
VUUocmVzdWx0LmlzTmV3RW50cnkpOworICAgIH0KKworICAgIEVYUEVDVF9GQUxTRShzZXQuaXNF
bXB0eSgpKTsKKyAgICBFWFBFQ1RfRVEoc2V0LnNpemUoKSwgbik7CisKKyAgICBmb3IgKHVuc2ln
bmVkIGkgPSAwOyBpIDwgMiAqIG47IGkgKz0gMikgeworICAgICAgICBhdXRvIHJlc3VsdCA9IHNl
dC5hZGQoaSk7CisgICAgICAgIGlmIChpIDwgbikKKyAgICAgICAgICAgIEVYUEVDVF9GQUxTRShy
ZXN1bHQuaXNOZXdFbnRyeSk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIEVYUEVDVF9UUlVF
KHJlc3VsdC5pc05ld0VudHJ5KTsKKyAgICB9CisKKyAgICBFWFBFQ1RfRVEoc2V0LnNpemUoKSwg
biArIG4vMik7CisKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgMiAqIG47ICsraSkgewor
ICAgICAgICBpZiAoaSA8IG4gfHwgIShpICUgMikpCisgICAgICAgICAgICBFWFBFQ1RfVFJVRShz
ZXQuY29udGFpbnMoaSkpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBFWFBFQ1RfRkFMU0Uo
c2V0LmNvbnRhaW5zKGkpKTsKKyAgICB9CisKKyAgICB1bnNpZ25lZCBjb3VudCA9IDA7CisgICAg
SGFzaFNldDxUPiByZWZlcmVuY2VTZXQ7CisgICAgZm9yICh1bnNpZ25lZCBpIDogc2V0KSB7Cisg
ICAgICAgIHJlZmVyZW5jZVNldC5hZGQoaSk7CisgICAgICAgICsrY291bnQ7CisgICAgfQorICAg
IEVYUEVDVF9FUShjb3VudCwgbiArIG4vMik7CisgICAgRVhQRUNUX0VRKGNvdW50LCByZWZlcmVu
Y2VTZXQuc2l6ZSgpKTsKK30KKwordm9pZCB0ZXN0U21hbGxTZXRPZlBvaW50ZXJzKCkKK3sKKyAg
ICBTbWFsbFNldDxpbnQqPiBzZXQ7CisKKyAgICBjb25zdGV4cHIgdW5zaWduZWQgYXJyYXlTaXpl
ID0gMjAwOworICAgIGludCBhcnJheVthcnJheVNpemVdOworICAgIGZvciAodW5zaWduZWQgaSA9
IDA7IGkgPCBhcnJheVNpemU7ICsraSkKKyAgICAgICAgYXJyYXlbaV0gPSBpOworCisgICAgZm9y
ICh1bnNpZ25lZCBpID0gMDsgaSA8IGFycmF5U2l6ZTsgKytpKSB7CisgICAgICAgIGludCogcHRy
ID0gJihhcnJheVtpXSk7CisgICAgICAgIEVYUEVDVF9GQUxTRShzZXQuY29udGFpbnMocHRyKSk7
CisgICAgICAgIGF1dG8gcmVzdWx0ID0gc2V0LmFkZChwdHIpOworICAgICAgICBFWFBFQ1RfVFJV
RShyZXN1bHQuaXNOZXdFbnRyeSk7CisgICAgICAgIEVYUEVDVF9UUlVFKHNldC5jb250YWlucyhw
dHIpKTsKKyAgICAgICAgcmVzdWx0ID0gc2V0LmFkZChwdHIpOworICAgICAgICBFWFBFQ1RfRkFM
U0UocmVzdWx0LmlzTmV3RW50cnkpOworICAgIH0KKworICAgIGZvciAoaW50KiBwdHIgOiBzZXQp
CisgICAgICAgICsrKCpwdHIpOworCisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGFycmF5
U2l6ZTsgKytpKQorICAgICAgICBFWFBFQ1RfRVEoYXJyYXlbaV0sIGkrMSk7Cit9CisKK3RlbXBs
YXRlPHR5cGVuYW1lIFQ+Cit2b2lkIHRlc3RWZWN0b3JzT2ZTbWFsbFNldHNPZlVuc2lnbmVkKCkK
K3sKKyAgICBWZWN0b3I8U21hbGxTZXQ8VCwgSW50SGFzaDxUPj4sIDI+IHZlY3RvcjsKKyAgICB2
ZWN0b3IuYXBwZW5kKHsgfSk7CisgICAgdmVjdG9yLmFwcGVuZCh7IH0pOworCisgICAgdmVjdG9y
WzBdLmFkZCgxMDApOworICAgIHZlY3RvclswXS5hZGQoMjAwKTsKKyAgICB2ZWN0b3JbMF0uYWRk
KDMwMCk7CisKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgMjAwOyArK2kpCisgICAgICAg
IHZlY3RvclsxXS5hZGQoaSk7CisKKyAgICAvLyBOb3cgd2UgY2F1c2UgdGhlIHZlY3RvciB0byBj
b3B5IGl0cyBjb250ZW50cyB0byBhIGxhcmdlciBidWZmZXIuCisgICAgLy8gVGhpcyBzaG91bGQg
Y29ycnVwdCBuZWl0aGVyIHRoZSBzbWFsbCBzZXQgdGhhdCB1c2VzIGlubGluZSBzdG9yYWdlICh2
ZWN0b3JbMF0pLCBub3IgdGhlIG9uZSB0aGF0IHVzZXMgYW4gb3V0LW9mLWxpbmUgYnVmZmVyICh2
ZWN0b3JbMV0pLgorICAgIHZlY3Rvci5yZXNpemUoMzAwKTsKKworICAgIEVYUEVDVF9FUSh2ZWN0
b3JbMF0uc2l6ZSgpLCAzKTsKKyAgICBFWFBFQ1RfVFJVRSh2ZWN0b3JbMF0uY29udGFpbnMoMTAw
KSk7CisgICAgRVhQRUNUX1RSVUUodmVjdG9yWzBdLmNvbnRhaW5zKDIwMCkpOworICAgIEVYUEVD
VF9UUlVFKHZlY3RvclswXS5jb250YWlucygzMDApKTsKKyAgICBFWFBFQ1RfRkFMU0UodmVjdG9y
WzBdLmNvbnRhaW5zKDQyKSk7CisKKyAgICBFWFBFQ1RfRVEodmVjdG9yWzFdLnNpemUoKSwgMTAw
KTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgMjAwOyArK2kpCisgICAgICAgIEVYUEVD
VF9UUlVFKHZlY3RvclsxXS5jb250YWlucyhpKSk7CisgICAgRVhQRUNUX0ZBTFNFKHZlY3Rvclsx
XS5jb250YWlucygzMDApKTsKK30KKworVEVTVChXVEZfU21hbGxTZXQsIFRocmVlVWludDgpIHsg
dGVzdFNtYWxsU2V0T2ZVbnNpZ25lZDx1aW50OF90PigzKTsgfQorVEVTVChXVEZfU21hbGxTZXQs
IEZvdXJVaW50OCkgeyB0ZXN0U21hbGxTZXRPZlVuc2lnbmVkPHVpbnQ4X3Q+KDQpOyB9CitURVNU
KFdURl9TbWFsbFNldCwgSHVuZHJlZFVpbnQ4KSB7IHRlc3RTbWFsbFNldE9mVW5zaWduZWQ8dWlu
dDhfdD4oMTAwKTsgfQorVEVTVChXVEZfU21hbGxTZXQsIFRocmVlVWludDE2KSB7IHRlc3RTbWFs
bFNldE9mVW5zaWduZWQ8dWludDE2X3Q+KDMpOyB9CitURVNUKFdURl9TbWFsbFNldCwgRm91clVp
bnQxNikgeyB0ZXN0U21hbGxTZXRPZlVuc2lnbmVkPHVpbnQxNl90Pig0KTsgfQorVEVTVChXVEZf
U21hbGxTZXQsIEh1bmRyZWRVaW50MTYpIHsgdGVzdFNtYWxsU2V0T2ZVbnNpZ25lZDx1aW50MTZf
dD4oMTAwKTsgfQorVEVTVChXVEZfU21hbGxTZXQsIFRocmVlVWludDMyKSB7IHRlc3RTbWFsbFNl
dE9mVW5zaWduZWQ8dWludDMyX3Q+KDMpOyB9CitURVNUKFdURl9TbWFsbFNldCwgRm91clVpbnQz
MikgeyB0ZXN0U21hbGxTZXRPZlVuc2lnbmVkPHVpbnQzMl90Pig0KTsgfQorVEVTVChXVEZfU21h
bGxTZXQsIEh1bmRyZWRVaW50MzIpIHsgdGVzdFNtYWxsU2V0T2ZVbnNpZ25lZDx1aW50MzJfdD4o
MTAwKTsgfQorVEVTVChXVEZfU21hbGxTZXQsIFRocmVlVWludDY0KSB7IHRlc3RTbWFsbFNldE9m
VW5zaWduZWQ8dWludDY0X3Q+KDMpOyB9CitURVNUKFdURl9TbWFsbFNldCwgRm91clVpbnQ2NCkg
eyB0ZXN0U21hbGxTZXRPZlVuc2lnbmVkPHVpbnQ2NF90Pig0KTsgfQorVEVTVChXVEZfU21hbGxT
ZXQsIEh1bmRyZWRVaW50NjQpIHsgdGVzdFNtYWxsU2V0T2ZVbnNpZ25lZDx1aW50NjRfdD4oMTAw
KTsgfQorCitURVNUKFdURl9TbWFsbFNldCwgUG9pbnRlcnMpIHsgdGVzdFNtYWxsU2V0T2ZQb2lu
dGVycygpOyB9CisKK1RFU1QoV1RGX1NtYWxsU2V0LCBWZWN0b3JVaW50MTYpIHsgdGVzdFZlY3Rv
cnNPZlNtYWxsU2V0c09mVW5zaWduZWQ8dWludDE2X3Q+KCk7IH0KK1RFU1QoV1RGX1NtYWxsU2V0
LCBWZWN0b3JVaW50MzIpIHsgdGVzdFZlY3RvcnNPZlNtYWxsU2V0c09mVW5zaWduZWQ8dWludDMy
X3Q+KCk7IH0KK1RFU1QoV1RGX1NtYWxsU2V0LCBWZWN0b3JVaW50NjQpIHsgdGVzdFZlY3RvcnNP
ZlNtYWxsU2V0c09mVW5zaWduZWQ8dWludDY0X3Q+KCk7IH0KKworfSAvLyBuYW1lc3BhY2UgVGVz
dFdlYktpdEFQSQo=
</data>
<flag name="commit-queue"
          id="449871"
          type_id="3"
          status="-"
          setter="ews-feeder"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>428849</attachid>
            <date>2021-05-17 11:29:00 -0700</date>
            <delta_ts>2021-05-17 11:47:58 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>patchRegisterAllocator</filename>
            <type>text/plain</type>
            <size>86194</size>
            <attacher name="Robin Morisset">rmorisset</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvQ2hhbmdlTG9nCmluZGV4IGY4MzBjYTkzZDA0OC4uNGQ4NzcyZTVhYjQxIDEw
MDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxMDEgQEAKKzIwMjEtMDUtMTcgIFJv
YmluIE1vcmlzc2V0ICA8cm1vcmlzc2V0QGFwcGxlLmNvbT4KKworICAgICAgICBNYWtlIEFpckFs
bG9jYXRlUmVnaXN0ZXJzQnlHcmFwaENvbG9yaW5nIHVzZSBsZXNzIG1lbW9yeQorICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjI1ODQ4CisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTKS4KKworICAgICAgICBXZeKAmXZlIGhhZCBzb21lIGpl
dHNhbSBwcm9ibGVtcyBjYXVzZWQgYnkgdGhlIG1haW4gQWlyIHJlZ2lzdGVyIGFsbG9jYXRvciwg
d2hpY2ggY2F1c2VkIHVzIHRvIGxvd2VyIE9wdGlvbnM6Om1heGltdW1UbXBzRm9yR3JhcGhDb2xv
cmluZy4KKyAgICAgICAgSGVuY2UgdGhpcyBwYXRjaCB0cmllcyB0byBpbXByb3ZlIHRoZSBtZW1v
cnkgdXNhZ2Ugb2YgdGhlIGFsbG9jYXRvci4gSXQgaW5jbHVkZXMgc2V2ZXJhbCBjaGFuZ2VzOgor
ICAgICAgICAtIENoYW5nZSB0aGUgZGF0YXN0cnVjdHVyZSB1c2VkIGZvciByZXByZXNlbnRpbmcg
dGhlIGludGVyZmVyZW5jZSBncmFwaC4gQmVmb3JlIGl0IHdhcyBlZmZlY3RpdmVseSBhIEhhc2hT
ZXQ8c3RkOjpwYWlyPHVpbnQxNl90LCB1aW50MTZfdD4uIE5vdywgaXQgaXMgZWl0aGVyIGEgQml0
dmVjdG9yIChmb3IgbiA8IDQwMCBmb3Igbm93LCBjYW4gYmUgdHdlYWtlZCBlYXNpbHkpLCBvciBh
IFZlY3RvcjxTbWFsbFNldDx1aW50MTZfdD4+IG90aGVyd2lzZS4gVGhpcyBuZWFybHkgaGFsdmVz
IGl0cyBtZW1vcnkgY29uc3VtcHRpb24gaW4gdGhlIGNhc2UgdGhhdCB0aGUgZ3JhcGggaXMgZGVu
c2UgKHdoaWNoIGlzIHdoZW4gdGhlIG92ZXJoZWFkIG9mIHRoZSBTbWFsbFNldHMgaXMgbWluaW1p
emVkLCBhbmQgd2hlbiB0aGUgcmVnaXN0ZXIgYWxsb2NhdG9yIHVzZXMgdGhlIG1vc3QgbWVtb3J5
KS4gSW4gb3JkZXIgdG8gZWFzaWx5IHRlc3QgdGhpcyBjaGFuZ2UsIGFuZCBhbnkgZnVydGhlciBj
aGFuZ2UgdG8gdGhpcyBkYXRhc3RydWN0dXJlLCB0aGUgb2xkIGFwcHJvYWNoIHdhcyBwcmVzZXJ2
ZWQgYXMgSW50ZXJmZXJlbmNlSGFzaFNldCwgYW5kIGEgdGVtcGxhdGUgdG8gcnVuIHR3byBzdWNo
IGRhdGFzdHJ1Y3R1cmVzIGluIHBhcmFsbGVsLCBjaGVja2luZyB0aGVpciBlcXVpdmFsZW5jZSB3
YXMgYWRkZWQ6IEluc3RydW1lbnRlZEludGVyZmVyZW5jZUdyYXBoCisgICAgICAgIC0gVGhlcmUg
d2FzIGFscmVhZHkgc29tZSB0ZW1wbGF0ZSBwYXJhbWV0ZXIgdG8gY2hhbmdlIHRoZSBzaXplIG9m
IHRoZSB0bXAgaW5kaWNlcyBmcm9tIHVuc2lnbmVkIHRvIHVpbnQxNl90Li4gYnV0IHRoZSBjb2Rl
IGZhaWxlZCB0byBjb21waWxlIHVubGVzcyBpdCB3YXMgdW5zaWduZWQuIEkgZml4ZWQgdGhpcywg
bWFkZSBtb3JlIGNvbnNpc3RlbnQgdXNlIG9mIGl0LCBhbmQgc3dpdGNoZWQgdG8gdWludDE2X3Qg
YnkgZGVmYXVsdCAoc2luY2UgT3B0aW9uczo6bWF4aW11bVRtcHNGb3JHcmFwaENvbG9yaW5nIGlz
IDI1aywgd2UgYXJlIGZhciBmcm9tIGV4aGF1c3RpbmcgdWludDE2X3QpLiBUaGlzIGhhbHZlZCB0
aGUgbWVtb3J5IHVzYWdlIG9mIHZhcmlvdXMgb3RoZXIgZGF0YXN0cnVjdHVyZXMgaW4gdGhlIHJl
Z2lzdGVyIGFsbG9jYXRvcgorICAgICAgICAtIHVuc3BpbGxhYmxlVG1wcyB3YXMgYSBIYXNoU2V0
PHVuc2lnbmVkPi4gU2luY2UgaXQgaXMgb2Z0ZW4gcXVpdGUgZGVuc2UgKG9mdGVuIGFyb3VuZCAy
MCUgb24gSmV0U3RyZWFtMiksIEkgcmVwbGFjZWQgaXQgYnkgYSBCaXR2ZWN0b3IgaW5zdGVhZAor
ICAgICAgICAtIG1fYmlhc2VzIHdhcyBhIEhhc2hNYXA8SW5kZXhUeXBlLCBIYXNoU2V0PEluZGV4
VHlwZT4+LiBTaW5jZSBpdCBpcyBleHRyZW1lbHkgcmFyZSB0aGF0IHRoZSBzZXRzIGhhdmUgbW9y
ZSB0aGFuIDggZWxlbWVudHMgKGZyb20gbG9va2luZyBhdCBzb21lIGluc3RydW1lbnRlZCBydW4g
b2YgSmV0U3RyZWFtMiksIEkgcmVwbGFjZWQgaXQgYnkgSGFzaE1hcDxJbmRleFR5cGUsIFNtYWxs
U2V0PEluZGV4VHlwZT4+LiBUaGlzIG5vdCBvbmx5IHNpZ25pZmljYW50bHkgcmVkdWNlcyBtZW1v
cnksIGJ1dCBuZWFybHkgaGFsdmVzIHRoZSB0aW1lIHNwZW50IGluIGFzc2lnbkNvbG9ycyhhcm91
bmQgODBtcyAtPiA0MG1zIGluIEpldFN0cmVhbSAyKQorICAgICAgICAtIFVzZUNvdW50cyB3YXMg
bmVlZGxlc3NseSBnZW5lcmFsOiBpdCBpcyBvbmx5IHVzZWQgYnkgdGhlIHJlZ2lzdGVyIGFsbG9j
YXRvciAoYWxsIG90aGVyIHJlZmVyZW5jZXMgdG8gVXNlQ291bnRzIHJlZmVyIHRvIHRoZSBjb21w
bGV0ZWx5IGRpZmZlcmVudCBCMzo6VXNlQ291bnRzKSwgc28gdGhlcmUgaXMgbm8gcG9pbnQgaW4g
aXQgY29tcHV0aW5nLCBhbmQgdGhlbiBzdG9yaW5nIGxvdHMgb2YgaXJyZWxldmFudCBkYXRhLiBB
IGZsb2F0IGlzIGFsc28gbW9yZSB0aGFuIGVub3VnaCBwcmVjaXNpb24gKGVzcGVjaWFsbHkgc2lu
Y2UgaXQgaXMgcHJldHR5IG11Y2ggYWx3YXlzIDEsIDEwLCAxMDAsIG9yIDEwMDAgaW4gcHJhY3Rp
Y2XigKYpLiBBbHNvLCBzaW5jZSB3ZSBvbmx5IG5lZWQgaXQgaW5kZXhlZCBieSBUbXBzLCB3ZSBj
YW4gdXNlIGEgVmVjdG9yIHdpdGggQWJzb2x1dGVUbXBNYXBwZXIgaW5zdGVhZCBvZiBpdHMgSGFz
aE1hcC4gVGhlc2UgY2hhbmdlcyBhcmUgbm90IGp1c3QgbWVtb3J5IHNhdmluZ3MsIHRoZXkgYWxz
byBtYWtlIHNlbGVjdFNwaWxsIHdheSBmYXN0ZXIgKDU3MG1zIC0+IDI1MG1zIG9uIG15IG1hY2hp
bmUgb24gSmV0U3RyZWFtMikKKyAgICAgICAgLSBXaGlsZSBJIHdhcyBhdCBpdCwgSSBkaWQgYSBj
b3VwbGUgb2Ygb3RoZXIgdHdlYWtzIHRvIHRoZSBsb2dpYyBvZiBzZWxlY3RTcGlsbC4gSW4gcGFy
dGljdWxhciwgaW5zdGVhZCBvZiBoYXZpbmcgdG8gY2hlY2sgZm9yIGlzRmFzdFRtcCBldmVyeSB0
aW1lLCBJIGp1c3QgcHV0IHRoZSBmYXN0IHRtcHMgZGlyZWN0bHkgaW4gdW5zcGlsbGFibGVUbXBz
LCB3aGljaCBwcmV2ZW50cyB0aGVtIGZyb20gZ2V0dGluZyBhZGRlZCB0byBtX3NwaWxsV29ya2xp
c3QgaW4gdGhlIGZpcnN0IHBsYWNlLiBUaGlzICsgYSBiaXQgb2YgY2xlYW4tdXAgKGZvciBleGFt
cGxlIHB1dHRpbmcgYW4gZWFybHkgZXhpdCBpbnN0ZWFkIG9mIHNldHRpbmcgc2NvcmUgdG8gaW5m
aW5pdHkgaW4gdGhlIGNhc2Ugb2YgZGVhZCB0bXBzKSByZXN1bHRlZCBpbiBhIGZ1cnRoZXIgcGVy
ZiB3aW4gKHRvIHJvdWdobHkgMjAwbXMgc3BlbnQgaW4gc2VsZWN0U3BpbGwoKSBvbiBKZXRTdHJl
YW0yKQorCisgICAgICAgIEFsbCB0b2dldGhlciwgdGhpcyBwYXRjaCByZWR1Y2VzIHRoZSB0aW1l
IHNwZW50IGluIHRoZSByZWdpc3RlciBhbGxvY2F0b3IgYnkgcm91Z2hseSAxNSB0byAyMCUgaW4g
SmV0U3RyZWFtMiAodGVzdGVkIGJvdGggd2l0aCB0aGUgQnJpZ2dzIGFuZCB0aGUgSVJDIGFsbG9j
YXRvcnMgb24gbXkgTUJQIDIwMTkpLgorCisgICAgICAgIFNvIGZhciBJIGhhdmUgcGVyZm9ybWFu
Y2UgbnVtYmVycyBmb3IgdGhpcyBwYXRjaCBvbiBib3RoIGFuIGlQaG9uZSA3IGFuZCBhbiBpUGFk
IFBybyAyIChJJ2xsIHB1dCB0aGUgbnVtYmVycyBvbiBNYWMgaW4gdGhlIGJ1Z3ppbGxhIGlzc3Vl
IG9uY2UgdGhlIHBlcmZvcm1hbmNlIGJvdCBkZWlnbnMgdG8gZ2V0IHRvIGl0KS4KKyAgICAgICAg
T24gaVBob25lIDcsIHdlIHNlZSBhIDAuOTQlIGltcHJvdmVtZW50IHRvIHRoZSBKSVQgdGVzdHMg
c2VjdGlvbiBvZiBSQU1pZmljYXRpb24gKHA8MC4wMiksIHdpdGggdGhlIGZvbGxvd2luZyBzaWdu
aWZpY2FudCBzdWItcmVzdWx0czoKKyAgICAgICAgLSAxLjgyJSBiZXR0ZXIgb24gQWlyIChwPDAu
MDIpCisgICAgICAgIC0gMS4xOCUgYmV0dGVyIG9uIEJhc2ljIChwPDAuMDIpCisgICAgICAgIC0g
MS41OSUgYmV0dGVyIG9uIEJveDJEIChwPDAuMDIpCisgICAgICAgIC0gMC40MyUgYmV0dGVyIG9u
IEhhc2hTZXQtd2FzbSAocDwwLjA1KQorICAgICAgICAtIDAuNTIlIGJldHRlciBvbiBNTCAocDww
LjA1KQorICAgICAgICAtIDkuMzklIGJldHRlciBvbiBPZmZsaW5lQXNzZW1ibGVyIChwPDAuMDIp
CisgICAgICAgIC0gMi4xMyUgYmV0dGVyIG9uIGNyeXB0by1hZXMtU1AgKHA8MC4wMikKKyAgICAg
ICAgLSA1LjI5JSBiZXR0ZXIgb24gY3J5cHRvLW1kNS1TUCAocDwwLjAyKQorICAgICAgICAtIDEu
MDAlIGJldHRlciBvbiBjcnlwdG8tc2hhMS1TUCAocDwwLjA1KQorICAgICAgICAtIDAuOTclIGJl
dHRlciBvbiBkYXRlLWZvcm1hdC10b2Z0ZS1TUCAocDwwLjAyKQorICAgICAgICAtIDAuNzglIGJl
dHRlciBvbiBkYXRlLWZvcm1hdC14cGFyYi1TUCAocDwwLjAyKQorICAgICAgICAtIDEuNTUlIGJl
dHRlciBvbiBkZWx0YS1ibHVlIChwPDAuMDIpCisgICAgICAgIC0gMC4zNyUgYmV0dGVyIG9uIGdh
dXNzaWFuLWJsdXIgKHA8MC4wMikKKyAgICAgICAgLSA0LjExJSBiZXR0ZXIgb24gZ2NjLWxvb3Bz
LXdhc20gKHA8MC4wMikKKyAgICAgICAgLSA1LjE0JSBiZXR0ZXIgb24gcXVpY2tzb3J0LXdhc20g
KHA8MC4wMikKKyAgICAgICAgLSAyLjc0JSBiZXR0ZXIgb24gcmF5dHJhY2UgKHA8MC4wMikKKyAg
ICAgICAgLSA0LjUyJSBiZXR0ZXIgb24gcmVnZXhwIChwPDAuMDIpCisgICAgICAgIC0gMS4wMiUg
YmV0dGVyIG9uIGNyeXB0by1zdGFuZm9yZC1hZXMgKHA8MC4wMikKKyAgICAgICAgLSAxMC40MCUg
YmV0dGVyIG9uIHRzZi13YXNtIChwPDAuMDUpCisgICAgICAgIEFzIGV4cGVjdGVkLCB0aGVyZSBp
cyBubyBzdGF0aXN0aWNhbGx5IHNpZ25pZmljYW50IGVmZmVjdCBvbiB0aGUgbm9uLUpJVCBzZWN0
aW9ucyBvZiBSQU1pZmljYXRpb24uCisgICAgICAgIEFub3RoZXIgbG9naWNhbCBhbmQgZXhwZWN0
ZWQgcHJvcGVydHkgb2YgdGhlc2UgcmVzdWx0cyBpcyB0aGF0IHRoZSBsYXJnZXN0IHdpbnMgYXJl
IHRvIHBlYWsgbWVtb3J5IGFuZCBub3QgdG8gZW5kIG1lbW9yeSAoZS5nLiA4LjYzJSBmb3IgcGVh
ayByZWdleHAsIDUuNDglIGZvciBwZWFrIGdjYy1sb29wcy13YXNtLCAxMC43MCUgYmV0dGVyIGZv
ciBwZWFrIGNyeXB0by1tZDUtU1AsIDE3LjgzJSBiZXR0ZXIgZm9yIHBlYWsgT2ZmbGluZUFzc2Vt
YmxlciwgZXRjLi4pCisgICAgICAgIFRoZSByZXN1bHRzIG9uIGlQYWQgUHJvIDIgYXJlIHZlcnkg
c2ltaWxhcjogMS4yMCUgYmV0dGVyIChwPDAuMDIpIG9uIHRoZSBKSVQgdGVzdHMgb2YgUkFNaWZp
Y2F0aW9uLCB3aXRoIHRoZSBmb2xsb3dpbmcgc2lnbmlmaWNhbnQgc3ViLXJlc3VsdHM6CisgICAg
ICAgIC0gMS4yJSBiZXR0ZXIgb24gM2QtY3ViZS1TUCAocDwwLjA1KQorICAgICAgICAtIDAuNjcl
IGJldHRlciBvbiBiYXNpYyAocDwwLjAyKQorICAgICAgICAtIDEuNTclIGJldHRlciBvbiBCb3gy
RCAocDwwLjAyKQorICAgICAgICAtIDExLjMlIGJldHRlciBvbiBPZmZsaW5lQXNzZW1ibGVyIChw
PDAuMDIpLCAxOS4xMSUgYmV0dGVyIG9uIHBlYWsgbWVtb3J5CisgICAgICAgIC0gcmVncmVzc2lv
biBvZiAwLjQ0JSAocDwwLjA1KSBvbiBVbmlQb2tlcgorICAgICAgICAtIDEuNzQlIGJldHRlciBv
biBjcnlwdG8tYWVzLVNQIChwPDAuMDIpCisgICAgICAgIC0gNC43OSUgYmV0dGVyIG9uIGNyeXB0
by1tZDUtU1AgKHA8MC4wMiksIDEwLjM5JSBiZXR0ZXIgb24gcGVhayBtZW1vcnkKKyAgICAgICAg
LSAxLjYzJSBiZXR0ZXIgb24gY3J5cHRvLXNoYTEtU1AgKHA8MC4wMikKKyAgICAgICAgLSAwLjg1
JSBiZXR0ZXIgb24gZGF0YS1mb3JtYXQtdG9mdGUtU1AgKHA8MC4wMikKKyAgICAgICAgLSAyLjQ4
JSBiZXR0ZXIgb24gZGVsdGEtYmx1ZSAocDwwLjAyKQorICAgICAgICAtIDAuMzglIGJldHRlciBv
biBnYXVzc2lhbi1ibHVyIChwPDAuMDIpCisgICAgICAgIC0gMy42OCUgYmV0dGVyIG9uIGdjYy1s
b29wcy13YXNtIChwPDAuMDUpCisgICAgICAgIC0gMC42MiUgYmV0dGVyIG9uIG4tYm9keS1TUCAo
cDwwLjAyKQorICAgICAgICAtIDAuMTklIGJldHRlciBvbiBvY3RhbmUtY29kZS1sb2FkIChwPDAu
MDUpCisgICAgICAgIC0gMi45MyUgYmV0dGVyIG9uIHF1aWNrc29ydC13YXNtIChwPDAuMDIpCisg
ICAgICAgIC0gMy4xMiUgYmV0dGVyIG9uIHJheXRyYWNlIChwPDAuMDIpCisgICAgICAgIC0gMy44
MCUgYmV0dGVyIG9uIHJlZ2V4cCAocDwwLjAyKSwgNy40MCUgYmV0dGVyIG9uIHBlYWsgbWVtb3J5
CisgICAgICAgIC0gMC45MyUgYmV0dGVyIG9uIGNyeXB0by1zdGFuZm9yZC1hZXMgKHA8MC4wMikK
KyAgICAgICAgLSAyNi4wMiUgYmV0dGVyIG9uIHRzZi13YXNtIChwPDAuMDIpICEKKworICAgICAg
ICBNdWNoIG1vcmUgc3VycHJpc2luZ2x5IHRvIG1lLCB0aGUgaVBob25lIDcgYWxzbyBzaG93cyBh
IHNpZ25pZmljYW50IGltcHJvdmVtZW50IHRvIEpldFN0cmVhbSAyOiAxLjI3JSBiZXR0ZXIgKHA8
MC4wNSkuCisgICAgICAgIExvb2tpbmcgYXQgdGhlIHN1Yi10ZXN0cywgd2Ugc2VlIHRoZSBmb2xs
b3dpbmcgc2lnbmlmaWNhbnQgb25lczoKKyAgICAgICAgLSAxLjYzJSBiZXR0ZXIgb24gQm94MkQg
KHA8MC4wMikKKyAgICAgICAgLSAwLjc2JSBiZXR0ZXIgb24gV1NMIChwPDAuMDIpCisgICAgICAg
IC0gYSByZWdyZXNzaW9uIG9mIDIuNzElIG9uIGNyeXB0by1zaGExLVNQIChwPDAuMDUpCisgICAg
ICAgIC0gMi43OCUgYmV0dGVyIG9uIGdhdXNzaWFuLWJsdXIgKHA8MC4wMikKKyAgICAgICAgLSAz
LjUwJSBiZXR0ZXIgb24gZ2JlbXUgKHA8MC4wNSkKKyAgICAgICAgLSAxLjY0JSBiZXR0ZXIgb24g
anNoaW50LXd0YiAocDwwLjAyKQorICAgICAgICAtIDE5LjE5JSBiZXR0ZXIgb24gdGFnY2xvdWQt
U1AgKHA8MC4wMikKKyAgICAgICAgLSAxLjYxJSBiZXR0ZXIgb24gb2N0YW5lLXpsaWIgKHA8MC4w
NSkKKyAgICAgICAgVGhlIGlQYWQgUHJvIDIgc2hvd3Mgbm8gc2lnbmlmaWNhbnQgZWZmZWN0IG9u
IEpldFN0cmVhbSAyIGFzIGEgd2hvbGUsIGJ1dCBoYXMgc2lnbmlmaWNhbnQgZWZmZWN0cyBvbiB0
aGUgZm9sbG93aW5nIHN1Yi10ZXN0czoKKyAgICAgICAgLSAyLjIxJSBiZXR0ZXIgb24gQmFzaWMg
KHA8MC4wMikKKyAgICAgICAgLSAxLjA5JSBiZXR0ZXIgb24gTUwgKHA8MC4wNSkKKyAgICAgICAg
LSAwLjY1JSBiZXR0ZXIgb24gV1NMIChwPDAuMDIpCisgICAgICAgIC0gMS4xNCUgYmV0dGVyIG9u
IGRhdGEtZm9ybWF0LXRvZnRlLVNQIChwPDAuMDUpCisgICAgICAgIC0gMS4yMCUgYmV0dGVyIG9u
IGZpcnN0LWluc3BlY3Rvci1jb2RlLWxvYWQgKHA8MC4wMikKKyAgICAgICAgLSAxLjg5JSBiZXR0
ZXIgb24gZ2F1c3NpYW4tYmx1ciAocDwwLjAyKQorICAgICAgICAtIGEgcmVncmVzc2lvbiBvZiAy
LjAyJSBvbiByZWdleHAtZG5hLVNQIChwPDAuMDIpCisgICAgICAgIC0gNC45JSBiZXR0ZXIgb24g
dGFnY2xvdWQtU1AgKHA8MC4wMikKKyAgICAgICAgSSB0aGluayB0aGVyZSBpcyB0b28gbXVjaCBv
dmVybGFwIGluIHRoZXNlIHJlc3VsdHMgZm9yIHRoZW0gdG8gYmUgZHVlIHB1cmVseSB0byBjaGFu
Y2UsIGJ1dCB0aGVyZSBpcyBjbGVhcmx5IGEgbG90IG9mIG5vaXNlLCBhbmQgSSBleHBlY3QgdGhh
dCB0aGUgaVBob25lNyByZXN1bHRzIG1pZ2h0IGJlIGV4YWdlcmF0ZWQuCisgICAgICAgIE9uZSBt
b3JlIHJlYXNvbiBJIGJlbGlldmUgdGhlcmUgaXMgYSByZWFsIGVmZmVjdCBoZXJlIGFuZCBub3Qg
anVzdCBub2lzZSwgaXMgdGhhdCB0aGUgbGFyZ2VzdCB3aW5zIHdlcmUgdXN1YWxseSBvbiB0aGUg
YHdvcnN0IGl0ZXJhdGlvbmAgcGFydCBvZiB0aGUgc2NvcmVzLCBzbyBJIHN1c3BlY3QgdGhhdCB0
aGUgbWVtb3J5IHRyYWZmaWMgb2YgdGhlIHJlZ2lzdGVyIGFsbG9jYXRvciB3YXMgc29tZXRpbWVz
IHNsb3dpbmcgZG93biB0aGUgbWFpbiB0aHJlYWQsIHBvc3NpYmx5IHRocm91Z2ggY2FjaGUgZXZp
Y3Rpb25zLgorICAgICAgICBJIGNhbid0IGV4cGxhaW4gd2h5IHRhZ2Nsb3VkLVNQIHNob3dzIGxh
cmdlIHdpbnMgb24gSmV0U3RyZWFtMiBhbmQgbm8gd2luIGluIFJBTWlmaWNhdGlvbiB3aGVyZWFz
IHRzZi13YXNtIGlzIHRoZSBvcHBvc2l0ZS4KKworICAgICAgICAqIGIzL0IzUmVkdWNlTG9vcFN0
cmVuZ3RoLmNwcDoKKyAgICAgICAgKEpTQzo6QjM6OlJlZHVjZUxvb3BTdHJlbmd0aDo6cmVkdWNl
Qnl0ZUNvcHlMb29wc1RvTWVtY3B5KToKKyAgICAgICAgKiBiMy9haXIvQWlyQWxsb2NhdGVSZWdp
c3RlcnNCeUdyYXBoQ29sb3JpbmcuY3BwOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjphbGxvY2F0
ZVJlZ2lzdGVyc0J5R3JhcGhDb2xvcmluZyk6CisgICAgICAgICogYjMvYWlyL0FpckNvZGUuaDoK
KyAgICAgICAgKEpTQzo6QjM6OkFpcjo6Q29kZTo6Zm9yRWFjaEZhc3RUbXAgY29uc3QpOgorICAg
ICAgICAqIGIzL2Fpci9BaXJVc2VDb3VudHMuaDoKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6VXNl
Q291bnRzOjpVc2VDb3VudHMpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpVc2VDb3VudHM6Omlz
Q29uc3REZWYgY29uc3QpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpVc2VDb3VudHM6Om51bVdh
cm1Vc2VzQW5kRGVmcyBjb25zdCk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OlVzZUNvdW50czo6
ZHVtcCBjb25zdCk6CisgICAgICAgICogcGFyc2VyL05vZGVzLmg6CisKIDIwMjEtMDUtMTYgIE1h
cmsgTGFtICA8bWFyay5sYW1AYXBwbGUuY29tPgogCiAgICAgICAgIEltcGxlbWVudCBiYXNlbGlu
ZSBvcF9lbnRlciwgb3BfcmV0LCBvcF9jaGVja190cmFwcywgb3BfdGhyb3cgdXNpbmcgSklUIHRo
dW5rcy4KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1JlZHVjZUxvb3BT
dHJlbmd0aC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNSZWR1Y2VMb29wU3RyZW5n
dGguY3BwCmluZGV4IGM3OTdjZDZjMjZjOC4uNGE3NDhhNzY0MzU1IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYjMvQjNSZWR1Y2VMb29wU3RyZW5ndGguY3BwCisrKyBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1JlZHVjZUxvb3BTdHJlbmd0aC5jcHAKQEAgLTM2LDcgKzM2
LDcgQEAKICNpbmNsdWRlICJCM1BoYXNlU2NvcGUuaCIKICNpbmNsdWRlICJCM1Byb2NlZHVyZUlu
bGluZXMuaCIKICNpbmNsdWRlICJCM1ZhbHVlSW5saW5lcy5oIgotI2luY2x1ZGUgPHd0Zi9TbWFs
bFB0clNldC5oPgorI2luY2x1ZGUgPHd0Zi9TbWFsbFNldC5oPgogI2luY2x1ZGUgPHd0Zi9WZWN0
b3IuaD4KIAogbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CkBAIC0xNTksNyArMTU5LDcg
QEAgcHVibGljOgogICAgICAgICBCYXNpY0Jsb2NrKiBsb29wRm9vdCA9IG51bGxwdHI7CiAgICAg
ICAgIEJhc2ljQmxvY2sqIGxvb3BQcmVoZWFkZXIgPSBudWxscHRyOwogICAgICAgICBCYXNpY0Js
b2NrKiBsb29wUG9zdGZvb3RlciA9IG51bGxwdHI7Ci0gICAgICAgIFNtYWxsUHRyU2V0PEJhc2lj
QmxvY2sqPiBsb29wSW5uZXJCbG9ja3M7CisgICAgICAgIFNtYWxsU2V0PEJhc2ljQmxvY2sqPiBs
b29wSW5uZXJCbG9ja3M7CiAKICAgICAgICAgewogICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBp
ID0gMDsgaSA8IGxvb3AtPnNpemUoKTsgKytpKQpAQCAtMTcxLDggKzE3MSw4IEBAIHB1YmxpYzoK
ICAgICAgICAgICAgIGlmICghbG9vcElubmVyQmxvY2tzLmNvbnRhaW5zKHN0b3JlLT5vd25lcikp
CiAgICAgICAgICAgICAgICAgcmV0dXJuOwogCi0gICAgICAgICAgICBTbWFsbFB0clNldDxCYXNp
Y0Jsb2NrKj4gbG9vcEVudHJhbmNlczsKLSAgICAgICAgICAgIFNtYWxsUHRyU2V0PEJhc2ljQmxv
Y2sqPiBsb29wRXhpdHM7CisgICAgICAgICAgICBTbWFsbFNldDxCYXNpY0Jsb2NrKj4gbG9vcEVu
dHJhbmNlczsKKyAgICAgICAgICAgIFNtYWxsU2V0PEJhc2ljQmxvY2sqPiBsb29wRXhpdHM7CiAg
ICAgICAgICAgICBmb3IgKGF1dG8qIGJsb2NrIDogbG9vcElubmVyQmxvY2tzKSB7CiAgICAgICAg
ICAgICAgICAgZm9yIChhdXRvIHN1Y2Nlc3NvciA6IGJsb2NrLT5zdWNjZXNzb3JzKCkpIHsKICAg
ICAgICAgICAgICAgICAgICAgaWYgKCFsb29wSW5uZXJCbG9ja3MuY29udGFpbnMoc3VjY2Vzc29y
LmJsb2NrKCkpKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJB
bGxvY2F0ZVJlZ2lzdGVyc0J5R3JhcGhDb2xvcmluZy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvYjMvYWlyL0FpckFsbG9jYXRlUmVnaXN0ZXJzQnlHcmFwaENvbG9yaW5nLmNwcAppbmRleCBk
MDE2OWFlMDc0ZDcuLjk3ZTFhNDc4ZjQ4YyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2IzL2Fpci9BaXJBbGxvY2F0ZVJlZ2lzdGVyc0J5R3JhcGhDb2xvcmluZy5jcHAKKysrIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJBbGxvY2F0ZVJlZ2lzdGVyc0J5R3JhcGhD
b2xvcmluZy5jcHAKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE1LTIw
MjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE1
LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAog
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCkBAIC0zNyw2ICszNyw5IEBACiAjaW5jbHVkZSAiQWlyUGhhc2VTY29wZS5o
IgogI2luY2x1ZGUgIkFpclRtcFdpZHRoSW5saW5lcy5oIgogI2luY2x1ZGUgIkFpclVzZUNvdW50
cy5oIgorI2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+CisjaW5jbHVkZSA8d3RmL1NtYWxsU2V0Lmg+
CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogCiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIz
IHsgbmFtZXNwYWNlIEFpciB7CiAKQEAgLTQ2LDEwNCArNDksMjA5IEBAIHN0YXRpYyBjb25zdGV4
cHIgYm9vbCBkZWJ1ZyA9IGZhbHNlOwogc3RhdGljIGNvbnN0ZXhwciBib29sIHRyYWNlRGVidWcg
PSBmYWxzZTsKIHN0YXRpYyBjb25zdGV4cHIgYm9vbCByZXBvcnRTdGF0cyA9IGZhbHNlOwogCi0v
LyBJbnRlcmZlcmVuY2UgZWRnZXMgYXJlIG5vdCBkaXJlY3RlZC4gQW4gZWRnZSBiZXR3ZWVuIGFu
eSB0d28gVG1wcyBpcyByZXByZXNlbnRlZAotLy8gYnkgdGhlIGNvbmNhdGVuYXRlZCB2YWx1ZXMg
b2YgdGhlIHNtYWxsZXN0IFRtcCBmb2xsb3dlZCBieSB0aGUgYmlnZ2VyIFRtcC4KLS8vIFdlIGhh
dmUgYSB0ZW1wbGF0ZWQgdmVyc2lvbiB0byBzdXBwb3J0IDE2IGJpdCBhbmQgYSAzMiBiaXQgaW1w
bGVtZW50YXRpb25zCi0vLyBzaW5jZSB0aGUgbnVtYmVyIG9mIGVudHJpZXMgaW4gYW4gaW50ZXJm
ZXJlbmNlIHRhYmxlIGlzIE8oTl4yKS4KLS8vIEluIG1vc3QgY2FzZXMsIHdlIHVzZSB0aGUgMTYg
Yml0IGZsYXZvciwgdGh1cyBzYXZpbmcgaGFsZiB0aGUgbWVtb3J5Ci0vLyB3aXRoIGEgc2luZ2xl
IGltcGxlbWVudGF0aW9uLgotdGVtcGxhdGUgPHR5cGVuYW1lIEluZGV4SW1wbFR5cGUsIHR5cGVu
YW1lIFBhaXJTdG9yYWdlVHlwZT4KLWNsYXNzIEludGVyZmVyZW5jZUVkZ2UgewotICAgIHN0YXRp
Y19hc3NlcnQoc2l6ZW9mKEluZGV4SW1wbFR5cGUpICogMiA9PSBzaXplb2YoUGFpclN0b3JhZ2VU
eXBlKSk7Ci0gICAgY29uc3QgdW5zaWduZWQgU2hpZnRBbW91bnQgPSBzaXplb2YoSW5kZXhJbXBs
VHlwZSkgKiA4OwotICAgIGNvbnN0IFBhaXJTdG9yYWdlVHlwZSBJbmRleE1hc2sgPSBzdGQ6Om51
bWVyaWNfbGltaXRzPEluZGV4SW1wbFR5cGU+OjptYXgoKTsKK3RlbXBsYXRlIDx0eXBlbmFtZSBJ
bmRleFR5cGU+CitjbGFzcyBJbnRlcmZlcmVuY2VIYXNoU2V0IHsKK3B1YmxpYzoKKyAgICBib29s
IGNvbnRhaW5zKEluZGV4VHlwZSB1LCBJbmRleFR5cGUgdikKKyAgICB7CisgICAgICAgIGlmICh2
IDwgdSkKKyAgICAgICAgICAgIHN0ZDo6c3dhcCh1LCB2KTsKKyAgICAgICAgcmV0dXJuIG1fc2V0
LmNvbnRhaW5zKHsgdSwgdiB9KTsKKyAgICB9CiAKLXByb3RlY3RlZDoKLSAgICB1c2luZyBJbmRl
eFR5cGUgPSB1bnNpZ25lZDsKKyAgICBib29sIGFkZEFuZFJldHVybklzTmV3RW50cnkoSW5kZXhU
eXBlIHUsIEluZGV4VHlwZSB2KQorICAgIHsKKyAgICAgICAgaWYgKHYgPCB1KQorICAgICAgICAg
ICAgc3RkOjpzd2FwKHUsIHYpOworICAgICAgICByZXR1cm4gbV9zZXQuYWRkKHsgdSwgdiB9KS5p
c05ld0VudHJ5OworICAgIH0KKworICAgIHZvaWQgY2xlYXIoKQorICAgIHsKKyAgICAgICAgbV9z
ZXQuY2xlYXIoKTsKKyAgICB9CiAKKyAgICB2b2lkIHNldE1heFRtcEluZGV4KHVuc2lnbmVkIG4p
CisgICAgeworICAgICAgICBBU1NFUlRfVU5VU0VEKG4sIG4gPCBzdGQ6Om51bWVyaWNfbGltaXRz
PEluZGV4VHlwZT46Om1heCgpKTsKKyAgICB9CisKKyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgRnVu
Y3Rvcj4KKyAgICB2b2lkIGZvckVhY2goY29uc3QgRnVuY3RvciYgZnVuY3RvcikKKyAgICB7Cisg
ICAgICAgIGZvciAoYXV0byBlZGdlIDogbV9zZXQpCisgICAgICAgICAgICBmdW5jdG9yKGVkZ2Up
OworICAgIH0KKworICAgIHVuc2lnbmVkIHNpemUoKSBjb25zdCB7IHJldHVybiBtX3NldC5zaXpl
KCk7IH0KKworcHJpdmF0ZToKKyAgICAvLyBJbnRlcmZlcmVuY2UgZWRnZXMgYXJlIG5vdCBkaXJl
Y3RlZC4gQW4gZWRnZSBiZXR3ZWVuIGFueSB0d28gVG1wcyBpcyByZXByZXNlbnRlZAorICAgIC8v
IGJ5IHRoZSBjb25jYXRlbmF0ZWQgdmFsdWVzICh0aHJvdWdoIFRtcE1hcHBlcikgb2YgdGhlIHNt
YWxsZXN0IFRtcCBmb2xsb3dlZCBieSB0aGUgYmlnZ2VyIFRtcC4KKyAgICBIYXNoU2V0PHN0ZDo6
cGFpcjxJbmRleFR5cGUsIEluZGV4VHlwZT4gPiBtX3NldDsKK307CisKK3RlbXBsYXRlIDx0eXBl
bmFtZSBULCB0eXBlbmFtZSBJbmRleFR5cGU+CitjbGFzcyBJbnRlcmZlcmVuY2VWZWN0b3Igewog
cHVibGljOgotICAgIHN0cnVjdCBJbnRlcmZlcmVuY2VFZGdlSGFzaCB7Ci0gICAgICAgIHN0YXRp
YyB1bnNpZ25lZCBoYXNoKGNvbnN0IEludGVyZmVyZW5jZUVkZ2U8SW5kZXhJbXBsVHlwZSwgUGFp
clN0b3JhZ2VUeXBlPiYga2V5KSB7IHJldHVybiBrZXkuaGFzaCgpOyB9Ci0gICAgICAgIHN0YXRp
YyBib29sIGVxdWFsKGNvbnN0IEludGVyZmVyZW5jZUVkZ2U8SW5kZXhJbXBsVHlwZSwgUGFpclN0
b3JhZ2VUeXBlPiYgYSwgY29uc3QgSW50ZXJmZXJlbmNlRWRnZTxJbmRleEltcGxUeXBlLCBQYWly
U3RvcmFnZVR5cGU+JiBiKSB7IHJldHVybiBhID09IGI7IH0KLSAgICAgICAgc3RhdGljIGNvbnN0
ZXhwciBib29sIHNhZmVUb0NvbXBhcmVUb0VtcHR5T3JEZWxldGVkID0gdHJ1ZTsKLSAgICB9Owot
ICAgIHR5cGVkZWYgU2ltcGxlQ2xhc3NIYXNoVHJhaXRzPEludGVyZmVyZW5jZUVkZ2U8SW5kZXhJ
bXBsVHlwZSwgUGFpclN0b3JhZ2VUeXBlPj4gSW50ZXJmZXJlbmNlRWRnZUhhc2hUcmFpdHM7Cisg
ICAgYm9vbCBjb250YWlucyhJbmRleFR5cGUgdSwgSW5kZXhUeXBlIHYpCisgICAgeworICAgICAg
ICBpZiAodiA8IHUpCisgICAgICAgICAgICBzdGQ6OnN3YXAodSwgdik7CisgICAgICAgIHJldHVy
biBtX3ZlY3Rvclt1XS5jb250YWlucyh2KTsKKyAgICB9CiAKLSAgICB0eXBlZGVmIEhhc2hTZXQ8
SW50ZXJmZXJlbmNlRWRnZTxJbmRleEltcGxUeXBlLCBQYWlyU3RvcmFnZVR5cGU+LCBJbnRlcmZl
cmVuY2VFZGdlSGFzaCwgSW50ZXJmZXJlbmNlRWRnZUhhc2hUcmFpdHM+IEludGVyZmVyZW5jZVNl
dDsKKyAgICBib29sIGFkZEFuZFJldHVybklzTmV3RW50cnkoSW5kZXhUeXBlIHUsIEluZGV4VHlw
ZSB2KQorICAgIHsKKyAgICAgICAgaWYgKHYgPCB1KQorICAgICAgICAgICAgc3RkOjpzd2FwKHUs
IHYpOworICAgICAgICBib29sIGlzTmV3RW50cnkgPSBtX3ZlY3Rvclt1XS5hZGQodikuaXNOZXdF
bnRyeTsKKyAgICAgICAgbV9zaXplICs9IGlzTmV3RW50cnk7CisgICAgICAgIHJldHVybiBpc05l
d0VudHJ5OworICAgIH0KKworICAgIHZvaWQgY2xlYXIoKQorICAgIHsKKyAgICAgICAgbV92ZWN0
b3IuY2xlYXIoKTsKKyAgICAgICAgbV9zaXplID0gMDsKKyAgICB9CisKKyAgICB2b2lkIHNldE1h
eFRtcEluZGV4KHVuc2lnbmVkIG4pCisgICAgeworICAgICAgICBBU1NFUlQobiA8IHN0ZDo6bnVt
ZXJpY19saW1pdHM8SW5kZXhUeXBlPjo6bWF4KCkpOworICAgICAgICBtX3ZlY3Rvci5yZXNpemUo
bik7CisgICAgfQogCi0gICAgSW50ZXJmZXJlbmNlRWRnZSgpCisgICAgdGVtcGxhdGUgPHR5cGVu
YW1lIEZ1bmN0b3I+CisgICAgdm9pZCBmb3JFYWNoKGNvbnN0IEZ1bmN0b3ImIGZ1bmN0b3IpCiAg
ICAgeworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV92ZWN0b3Iuc2l6ZSgpIDsg
KytpKSB7CisgICAgICAgICAgICBmb3IgKEluZGV4VHlwZSBqIDogbV92ZWN0b3JbaV0pCisgICAg
ICAgICAgICAgICAgZnVuY3Rvcih7IGksIGogfSk7CisgICAgICAgIH0KICAgICB9CiAKLSAgICBJ
bnRlcmZlcmVuY2VFZGdlKEluZGV4VHlwZSBhLCBJbmRleFR5cGUgYikKKyAgICB1bnNpZ25lZCBz
aXplKCkgY29uc3QgeyByZXR1cm4gbV9zaXplOyB9CisKK3ByaXZhdGU6CisgICAgVmVjdG9yPFQ+
IG1fdmVjdG9yOworICAgIHVuc2lnbmVkIG1fc2l6ZSB7MH07Cit9OworCit0ZW1wbGF0ZSA8dHlw
ZW5hbWUgSW5kZXhUeXBlPgorY2xhc3MgSW50ZXJmZXJlbmNlQml0VmVjdG9yIHsKK3B1YmxpYzoK
KyAgICBib29sIGNvbnRhaW5zKEluZGV4VHlwZSB1LCBJbmRleFR5cGUgdikKICAgICB7Ci0gICAg
ICAgIEFTU0VSVChhKTsKLSAgICAgICAgQVNTRVJUKGIpOwotICAgICAgICBBU1NFUlQoYSA8IHN0
ZDo6bnVtZXJpY19saW1pdHM8SW5kZXhJbXBsVHlwZT46Om1heCgpKTsKLSAgICAgICAgQVNTRVJU
KGIgPCBzdGQ6Om51bWVyaWNfbGltaXRzPEluZGV4SW1wbFR5cGU+OjptYXgoKSk7Ci0gICAgICAg
IEFTU0VSVF9XSVRIX01FU1NBR0UoYSAhPSBiLCAiQSBUbXAgY2FuIG5ldmVyIGludGVyZmVyZSB3
aXRoIGl0c2VsZi4gRG9pbmcgc28gd291bGQgZm9yY2UgaXQgdG8gYmUgdGhlIHN1cGVycG9zaXRp
b24gb2YgdHdvIHJlZ2lzdGVycy4iKTsKKyAgICAgICAgcmV0dXJuIG1fYml0VmVjdG9yLnF1aWNr
R2V0KGluZGV4KHUsIHYpKTsKKyAgICB9CiAKLSAgICAgICAgaWYgKGIgPCBhKQotICAgICAgICAg
ICAgc3RkOjpzd2FwKGEsIGIpOwotICAgICAgICBtX3ZhbHVlID0gc3RhdGljX2Nhc3Q8UGFpclN0
b3JhZ2VUeXBlPihhKSA8PCBTaGlmdEFtb3VudCB8IGI7CisgICAgYm9vbCBhZGRBbmRSZXR1cm5J
c05ld0VudHJ5KEluZGV4VHlwZSB1LCBJbmRleFR5cGUgdikKKyAgICB7CisgICAgICAgIC8vIE5v
dGU6IHdlIGNvdWxkIGRvIG9ubHkgb25lIHF1aWNrU2V0LCBhdCB0aGUgY29zdCBvZiBvbmUgZXh0
cmEgYnJhbmNoIGluIGV2ZXJ5IGNvbnRhaW5zL2FkZEFuZFJldHVybklzTmV3RW50cnkgKHRvIGVu
Zm9yY2UgdSA8IHYpCisgICAgICAgIGJvb2wgYWxyZWFkeUluID0gbV9iaXRWZWN0b3IucXVpY2tT
ZXQoaW5kZXgodSwgdikpOworICAgICAgICBib29sIGFscmVhZHlJbjIgPSBtX2JpdFZlY3Rvci5x
dWlja1NldChpbmRleCh2LCB1KSk7CisgICAgICAgIEFTU0VSVF9VTlVTRUQoYWxyZWFkeUluMiwg
YWxyZWFkeUluID09IGFscmVhZHlJbjIpOworICAgICAgICBtX3NpemUgKz0gIWFscmVhZHlJbjsK
KyAgICAgICAgcmV0dXJuICFhbHJlYWR5SW47CiAgICAgfQogCi0gICAgSW50ZXJmZXJlbmNlRWRn
ZShjb25zdCBJbnRlcmZlcmVuY2VFZGdlPEluZGV4SW1wbFR5cGUsIFBhaXJTdG9yYWdlVHlwZT4m
IG90aGVyKQotICAgICAgICA6IG1fdmFsdWUob3RoZXIubV92YWx1ZSkKKyAgICB2b2lkIGNsZWFy
KCkKICAgICB7CisgICAgICAgIG1fYml0VmVjdG9yLmNsZWFyQWxsKCk7CisgICAgICAgIG1fc2l6
ZSA9IDA7CiAgICAgfQogCisgICAgdm9pZCBzZXRNYXhUbXBJbmRleCh1bnNpZ25lZCBuKQorICAg
IHsKKyAgICAgICAgQVNTRVJUKG4gPCBzdGQ6Om51bWVyaWNfbGltaXRzPEluZGV4VHlwZT46Om1h
eCgpKTsKKyAgICAgICAgbV9udW1UbXBzID0gbjsKKyAgICAgICAgbV9iaXRWZWN0b3IuZW5zdXJl
U2l6ZShuKm4pOworICAgIH0KIAotICAgIEludGVyZmVyZW5jZUVkZ2UoV1RGOjpIYXNoVGFibGVE
ZWxldGVkVmFsdWVUeXBlKQotICAgICAgICA6IG1fdmFsdWUoc3RkOjpudW1lcmljX2xpbWl0czxQ
YWlyU3RvcmFnZVR5cGU+OjptYXgoKSkKKyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgRnVuY3Rvcj4K
KyAgICB2b2lkIGZvckVhY2goY29uc3QgRnVuY3RvciYgZnVuY3RvcikKICAgICB7CisgICAgICAg
IGZvciAoSW5kZXhUeXBlIGkgPSAwOyBpIDwgbV9udW1UbXBzOyArK2kpIHsKKyAgICAgICAgICAg
IGZvciAoSW5kZXhUeXBlIGogPSBpICsgMTsgaiA8IG1fbnVtVG1wczsgKytqKSB7CisgICAgICAg
ICAgICAgICAgaWYgKG1fYml0VmVjdG9yLnF1aWNrR2V0KGluZGV4KGksIGopKSkKKyAgICAgICAg
ICAgICAgICAgICAgZnVuY3Rvcih7IGksIGogfSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0K
ICAgICB9CiAKLSAgICBJbmRleFR5cGUgZmlyc3QoKSBjb25zdAorICAgIHVuc2lnbmVkIHNpemUo
KSBjb25zdCB7IHJldHVybiBtX3NpemU7IH0KKworcHJpdmF0ZToKKyAgICB1bnNpZ25lZCBpbmRl
eChJbmRleFR5cGUgaSwgSW5kZXhUeXBlIGopCiAgICAgewotICAgICAgICByZXR1cm4gbV92YWx1
ZSA+PiBTaGlmdEFtb3VudCAmIEluZGV4TWFzazsKKyAgICAgICAgcmV0dXJuIGkgKiBtX251bVRt
cHMgKyBqOwogICAgIH0KIAotICAgIEluZGV4VHlwZSBzZWNvbmQoKSBjb25zdAorICAgIEJpdFZl
Y3RvciBtX2JpdFZlY3RvcjsKKyAgICB1bnNpZ25lZCBtX3NpemUgezB9OworICAgIEluZGV4VHlw
ZSBtX251bVRtcHM7Cit9OworCisjZGVmaW5lIFRFU1RfSU5URVJGRVJFTkNFX1NNQUxMX1NFVF9W
RUNUT1IgMAorI2lmIFRFU1RfSU5URVJGRVJFTkNFX1NNQUxMX1NFVF9WRUNUT1IKK3RlbXBsYXRl
IDx0eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBJbmRleFR5cGU+CitjbGFzcyBJbnN0
cnVtZW50ZWRJbnRlcmZlcmVuY2VHcmFwaCB7CitwdWJsaWM6CisgICAgYm9vbCBjb250YWlucyhJ
bmRleFR5cGUgdSwgSW5kZXhUeXBlIHYpCiAgICAgewotICAgICAgICByZXR1cm4gbV92YWx1ZSAm
IEluZGV4TWFzazsKKyAgICAgICAgYm9vbCBjb250YWluc0luQSA9IG1fc2V0QS5jb250YWlucyh1
LCB2KTsKKyAgICAgICAgYm9vbCBjb250YWluc0luQiA9IG1fc2V0Qi5jb250YWlucyh1LCB2KTsK
KyAgICAgICAgUkVMRUFTRV9BU1NFUlQoY29udGFpbnNJbkEgPT0gY29udGFpbnNJbkIpOworICAg
ICAgICByZXR1cm4gY29udGFpbnNJbkE7CiAgICAgfQogCi0gICAgYm9vbCBvcGVyYXRvcj09KGNv
bnN0IEludGVyZmVyZW5jZUVkZ2UmIG90aGVyKSBjb25zdAorICAgIGJvb2wgYWRkQW5kUmV0dXJu
SXNOZXdFbnRyeShJbmRleFR5cGUgdSwgSW5kZXhUeXBlIHYpCiAgICAgewotICAgICAgICByZXR1
cm4gbV92YWx1ZSA9PSBvdGhlci5tX3ZhbHVlOworICAgICAgICBib29sIGlzTmV3RW50cnlBID0g
bV9zZXRBLmFkZEFuZFJldHVybklzTmV3RW50cnkodSwgdik7CisgICAgICAgIGJvb2wgaXNOZXdF
bnRyeUIgPSBtX3NldEIuYWRkQW5kUmV0dXJuSXNOZXdFbnRyeSh1LCB2KTsKKyAgICAgICAgUkVM
RUFTRV9BU1NFUlQoaXNOZXdFbnRyeUEgPT0gaXNOZXdFbnRyeUIpOworICAgICAgICByZXR1cm4g
aXNOZXdFbnRyeUE7CiAgICAgfQogCi0gICAgSW50ZXJmZXJlbmNlRWRnZSYgb3BlcmF0b3I9KGNv
bnN0IEludGVyZmVyZW5jZUVkZ2UmIG90aGVyKQorICAgIHZvaWQgY2xlYXIoKQogICAgIHsKLSAg
ICAgICAgbV92YWx1ZSA9IG90aGVyLm1fdmFsdWU7Ci0gICAgICAgIHJldHVybiAqdGhpczsKKyAg
ICAgICAgbV9zZXRBLmNsZWFyKCk7CisgICAgICAgIG1fc2V0Qi5jbGVhcigpOwogICAgIH0KLSAg
ICBib29sIGlzSGFzaFRhYmxlRGVsZXRlZFZhbHVlKCkgY29uc3QKKworICAgIHZvaWQgc2V0TWF4
VG1wSW5kZXgodW5zaWduZWQgbikKICAgICB7Ci0gICAgICAgIHJldHVybiAqdGhpcyA9PSBJbnRl
cmZlcmVuY2VFZGdlKFdURjo6SGFzaFRhYmxlRGVsZXRlZFZhbHVlKTsKKyAgICAgICAgbV9zZXRB
LnNldE1heFRtcEluZGV4KG4pOworICAgICAgICBtX3NldEIuc2V0TWF4VG1wSW5kZXgobik7CiAg
ICAgfQogCi0gICAgdW5zaWduZWQgaGFzaCgpIGNvbnN0CisgICAgdGVtcGxhdGUgPHR5cGVuYW1l
IEZ1bmN0b3I+CisgICAgdm9pZCBmb3JFYWNoKGNvbnN0IEZ1bmN0b3ImIGZ1bmN0b3IpCiAgICAg
ewotICAgICAgICByZXR1cm4gV1RGOjpJbnRIYXNoPFBhaXJTdG9yYWdlVHlwZT46Omhhc2gobV92
YWx1ZSk7CisgICAgICAgIG1fc2V0QS5mb3JFYWNoKGZ1bmN0b3IpOwogICAgIH0KIAotICAgIHZv
aWQgZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAorICAgIHVuc2lnbmVkIHNpemUoKSBjb25z
dAogICAgIHsKLSAgICAgICAgb3V0LnByaW50KGZpcnN0KCksICI8PT4iLCBzZWNvbmQoKSk7Cisg
ICAgICAgIHVuc2lnbmVkIHNpemVBID0gbV9zZXRBLnNpemUoKTsKKyAgICAgICAgdW5zaWduZWQg
c2l6ZUIgPSBtX3NldEIuc2l6ZSgpOworICAgICAgICBSRUxFQVNFX0FTU0VSVChzaXplQSA9PSBz
aXplQik7CisgICAgICAgIHJldHVybiBzaXplQTsKICAgICB9CiAKIHByaXZhdGU6Ci0gICAgUGFp
clN0b3JhZ2VUeXBlIG1fdmFsdWUgeyAwIH07CisgICAgVCBtX3NldEE7CisgICAgVSBtX3NldEI7
CiB9OworI2VuZGlmCiAKIC8vIFRoZSBBYnN0cmFjdENvbG9yaW5nQWxsb2NhdG9yIGRlZmluZXMg
YWxsIHRoZSBjb2RlIHRoYXQgaXMgaW5kZXBlbmRhbnQKIC8vIGZyb20gdGhlIGJhbmsgb3IgcmVn
aXN0ZXIgYW5kIGNhbiBiZSBzaGFyZWQgd2hlbiBhbGxvY2F0aW5nIHJlZ2lzdGVycy4KLXRlbXBs
YXRlPHR5cGVuYW1lIEluZGV4VHlwZSwgdHlwZW5hbWUgVG1wTWFwcGVyLCB0eXBlbmFtZSBJbnRl
cmZlcmVuY2VFZGdlVHlwZT4KK3RlbXBsYXRlPHR5cGVuYW1lIEluZGV4VHlwZSwgdHlwZW5hbWUg
SW50ZXJmZXJlbmNlU2V0LCBCYW5rIGJhbms+CiBjbGFzcyBBYnN0cmFjdENvbG9yaW5nQWxsb2Nh
dG9yIHsKIHB1YmxpYzoKLSAgICBBYnN0cmFjdENvbG9yaW5nQWxsb2NhdG9yKENvZGUmIGNvZGUs
IGNvbnN0IFZlY3RvcjxSZWc+JiByZWdzSW5Qcmlvcml0eU9yZGVyLCBJbmRleFR5cGUgbGFzdFBy
ZWNvbG9yZWRSZWdpc3RlckluZGV4LCB1bnNpZ25lZCB0bXBBcnJheVNpemUsIGNvbnN0IEhhc2hT
ZXQ8dW5zaWduZWQ+JiB1bnNwaWxsYWJsZVRtcHMsIGNvbnN0IFVzZUNvdW50czxUbXA+JiB1c2VD
b3VudHMpCisgICAgQWJzdHJhY3RDb2xvcmluZ0FsbG9jYXRvcihDb2RlJiBjb2RlLCBjb25zdCBW
ZWN0b3I8UmVnPiYgcmVnc0luUHJpb3JpdHlPcmRlciwgSW5kZXhUeXBlIGxhc3RQcmVjb2xvcmVk
UmVnaXN0ZXJJbmRleCwgdW5zaWduZWQgdG1wQXJyYXlTaXplLCBjb25zdCBCaXRWZWN0b3ImIHVu
c3BpbGxhYmxlVG1wcywgY29uc3QgVXNlQ291bnRzJiB1c2VDb3VudHMpCiAgICAgICAgIDogbV9y
ZWdzSW5Qcmlvcml0eU9yZGVyKHJlZ3NJblByaW9yaXR5T3JkZXIpCiAgICAgICAgICwgbV9sYXN0
UHJlY29sb3JlZFJlZ2lzdGVySW5kZXgobGFzdFByZWNvbG9yZWRSZWdpc3RlckluZGV4KQogICAg
ICAgICAsIG1fdW5zcGlsbGFibGVUbXBzKHVuc3BpbGxhYmxlVG1wcykKQEAgLTE2MCw2ICsyNjgs
MTQgQEAgcHVibGljOgogICAgIH0KIAogcHJvdGVjdGVkOgorICAgIHVzaW5nIFRtcE1hcHBlciA9
IEFic29sdXRlVG1wTWFwcGVyPGJhbms+OworCisgICAgSW5kZXhUeXBlIHRtcFRvSW5kZXgoVG1w
IHRtcCkgY29uc3QKKyAgICB7CisgICAgICAgIHVuc2lnbmVkIGluZGV4ID0gVG1wTWFwcGVyOjph
YnNvbHV0ZUluZGV4KHRtcCk7CisgICAgICAgIEFTU0VSVChzdGQ6Om51bWVyaWNfbGltaXRzPElu
ZGV4VHlwZT46Om1heCgpID4gaW5kZXgpOworICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8SW5k
ZXhUeXBlPihpbmRleCk7CisgICAgfQogCiAgICAgdW5zaWduZWQgcmVnaXN0ZXJDb3VudCgpIGNv
bnN0IHsgcmV0dXJuIG1fcmVnc0luUHJpb3JpdHlPcmRlci5zaXplKCk7IH0KIApAQCAtMTgwLDcg
KzI5Niw3IEBAIHByb3RlY3RlZDoKIAogICAgIHZvaWQgYWRkVG9TcGlsbCh1bnNpZ25lZCB0b1Nw
aWxsKQogICAgIHsKLSAgICAgICAgaWYgKG1fdW5zcGlsbGFibGVUbXBzLmNvbnRhaW5zKHRvU3Bp
bGwpKQorICAgICAgICBpZiAobV91bnNwaWxsYWJsZVRtcHMucXVpY2tHZXQodG9TcGlsbCkpCiAg
ICAgICAgICAgICByZXR1cm47CiAKICAgICAgICAgbV9zcGlsbFdvcmtsaXN0LmFkZCh0b1NwaWxs
KTsKQEAgLTE5OCwxNSArMzE0LDE1IEBAIHByb3RlY3RlZDoKICAgICAgICAgLy8gQWxsIHByZWNv
bG9yZWQgcmVnaXN0ZXJzIGhhdmUgIGFuICJpbmZpbml0ZSIgZGVncmVlLgogICAgICAgICB1bnNp
Z25lZCBmaXJzdE5vblJlZ0luZGV4ID0gbV9sYXN0UHJlY29sb3JlZFJlZ2lzdGVySW5kZXggKyAx
OwogICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgZmlyc3ROb25SZWdJbmRleDsgKytp
KQotICAgICAgICAgICAgbV9kZWdyZWVzW2ldID0gc3RkOjpudW1lcmljX2xpbWl0czx1bnNpZ25l
ZD46Om1heCgpOworICAgICAgICAgICAgbV9kZWdyZWVzW2ldID0gc3RkOjpudW1lcmljX2xpbWl0
czxJbmRleFR5cGU+OjptYXgoKTsKIAotICAgICAgICBtZW1zZXQobV9kZWdyZWVzLmRhdGEoKSAr
IGZpcnN0Tm9uUmVnSW5kZXgsIDAsICh0bXBBcnJheVNpemUgLSBmaXJzdE5vblJlZ0luZGV4KSAq
IHNpemVvZih1bnNpZ25lZCkpOworICAgICAgICBtZW1zZXQobV9kZWdyZWVzLmRhdGEoKSArIGZp
cnN0Tm9uUmVnSW5kZXgsIDAsICh0bXBBcnJheVNpemUgLSBmaXJzdE5vblJlZ0luZGV4KSAqIHNp
emVvZihJbmRleFR5cGUpKTsKICAgICB9CiAKICAgICB2b2lkIGFkZEVkZ2VEaXN0aW5jdChJbmRl
eFR5cGUgYSwgSW5kZXhUeXBlIGIpCiAgICAgewogICAgICAgICBBU1NFUlQoYSAhPSBiKTsKLSAg
ICAgICAgYm9vbCBpc05ld0VkZ2UgPSBhZGRJbnRlcmZlcmVuY2VFZGdlKEludGVyZmVyZW5jZUVk
Z2VUeXBlKGEsIGIpKTsKKyAgICAgICAgYm9vbCBpc05ld0VkZ2UgPSBhZGRJbnRlcmZlcmVuY2VF
ZGdlKGEsIGIpOwogICAgICAgICBpZiAoaXNOZXdFZGdlKSB7CiAgICAgICAgICAgICBpZiAoIWlz
UHJlY29sb3JlZChhKSkgewogICAgICAgICAgICAgICAgIEFTU0VSVCghbV9hZGphY2VuY3lMaXN0
W2FdLmNvbnRhaW5zKGIpKTsKQEAgLTIyNSw3ICszNDEsNyBAQCBwcm90ZWN0ZWQ6CiAgICAgYm9v
bCBhZGRFZGdlRGlzdGluY3RXaXRob3V0RGVncmVlQ2hhbmdlKEluZGV4VHlwZSBhLCBJbmRleFR5
cGUgYikKICAgICB7CiAgICAgICAgIEFTU0VSVChhICE9IGIpOwotICAgICAgICBib29sIGlzTmV3
RWRnZSA9IGFkZEludGVyZmVyZW5jZUVkZ2UoSW50ZXJmZXJlbmNlRWRnZVR5cGUoYSwgYikpOwor
ICAgICAgICBib29sIGlzTmV3RWRnZSA9IGFkZEludGVyZmVyZW5jZUVkZ2UoYSwgYik7CiAgICAg
ICAgIGlmIChpc05ld0VkZ2UpIHsKICAgICAgICAgICAgIGlmICghaXNQcmVjb2xvcmVkKGEpKSB7
CiAgICAgICAgICAgICAgICAgQVNTRVJUKCFtX2FkamFjZW5jeUxpc3RbYV0uY29udGFpbnMoYikp
OwpAQCAtMzQwLDcgKzQ1Niw3IEBAIHByb3RlY3RlZDoKICAgICAgICAgICAgIGlmICghaXNQcmVj
b2xvcmVkKGFkamFjZW50VG1wSW5kZXgpCiAgICAgICAgICAgICAgICAgJiYgIWhhc0JlZW5TaW1w
bGlmaWVkKGFkamFjZW50VG1wSW5kZXgpCiAgICAgICAgICAgICAgICAgJiYgbV9kZWdyZWVzW2Fk
amFjZW50VG1wSW5kZXhdID49IHJlZ2lzdGVyQ291bnQoKQotICAgICAgICAgICAgICAgICYmICFo
YXNJbnRlcmZlcmVuY2VFZGdlKEludGVyZmVyZW5jZUVkZ2VUeXBlKHUsIGFkamFjZW50VG1wSW5k
ZXgpKSkKKyAgICAgICAgICAgICAgICAmJiAhaGFzSW50ZXJmZXJlbmNlRWRnZSh1LCBhZGphY2Vu
dFRtcEluZGV4KSkKICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIH0KICAg
ICAgICAgcmV0dXJuIHRydWU7CkBAIC0zNzUsNTIgKzQ5MSw0MCBAQCBwcm90ZWN0ZWQ6CiAgICAg
ICAgIGF1dG8gaXRlcmF0b3IgPSBtX3NwaWxsV29ya2xpc3QuYmVnaW4oKTsKIAogICAgICAgICBS
RUxFQVNFX0FTU0VSVF9XSVRIX01FU1NBR0UoaXRlcmF0b3IgIT0gbV9zcGlsbFdvcmtsaXN0LmVu
ZCgpLCAic2VsZWN0U3BpbGwoKSBjYWxsZWQgd2hlbiB0aGVyZSB3YXMgbm8gc3BpbGwuIik7Ci0g
ICAgICAgIFJFTEVBU0VfQVNTRVJUX1dJVEhfTUVTU0FHRSghbV91bnNwaWxsYWJsZVRtcHMuY29u
dGFpbnMoKml0ZXJhdG9yKSwgInRyeWluZyB0byBzcGlsbCB1bnNwaWxsYWJsZSB0bXAiKTsKLQot
ICAgICAgICAvLyBIaWdoZXIgc2NvcmUgbWVhbnMgbW9yZSBkZXNpcmFibGUgdG8gc3BpbGwuIExv
d2VyIHNjb3JlcyBtYXhpbWl6ZSB0aGUgbGlrZWxpaG9vZCB0aGF0IGEgdG1wCi0gICAgICAgIC8v
IGdldHMgYSByZWdpc3Rlci4KLSAgICAgICAgYXV0byBzY29yZSA9IFsmXSAoVG1wIHRtcCkgLT4g
ZG91YmxlIHsKLSAgICAgICAgICAgIC8vIEFpciBleHBvc2VzIHRoZSBjb25jZXB0IG9mICJmYXN0
IHRtcHMiLCBhbmQgd2UgaW50ZXJwcmV0IHRoYXQgdG8gbWVhbiB0aGF0IHRoZSB0bXAKLSAgICAg
ICAgICAgIC8vIHNob3VsZCBhbHdheXMgYmUgaW4gYSByZWdpc3Rlci4KLSAgICAgICAgICAgIGlm
IChtX2NvZGUuaXNGYXN0VG1wKHRtcCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAg
ICAgICAgICAKLSAgICAgICAgICAgIC8vIEFsbCBlbHNlIGJlaW5nIGVxdWFsLCB0aGUgc2NvcmUg
c2hvdWxkIGJlIGRpcmVjdGx5IHJlbGF0ZWQgdG8gdGhlIGRlZ3JlZS4KLSAgICAgICAgICAgIGRv
dWJsZSBkZWdyZWUgPSBzdGF0aWNfY2FzdDxkb3VibGU+KG1fZGVncmVlc1tUbXBNYXBwZXI6OmFi
c29sdXRlSW5kZXgodG1wKV0pOwotCi0gICAgICAgICAgICAvLyBBbGwgZWxzZSBiZWluZyBlcXVh
bCwgdGhlIHNjb3JlIHNob3VsZCBiZSBpbnZlcnNlbHkgcmVsYXRlZCB0byB0aGUgbnVtYmVyIG9m
IHdhcm0gdXNlcyBhbmQKLSAgICAgICAgICAgIC8vIGRlZnMuCi0gICAgICAgICAgICBjb25zdCBV
c2VDb3VudHM8VG1wPjo6Q291bnRzKiBjb3VudHMgPSBtX3VzZUNvdW50c1t0bXBdOwotICAgICAg
ICAgICAgaWYgKCFjb3VudHMpCi0gICAgICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bnVtZXJpY19s
aW1pdHM8ZG91YmxlPjo6aW5maW5pdHkoKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgZG91
YmxlIHVzZXMgPSBjb3VudHMtPm51bVdhcm1Vc2VzICsgY291bnRzLT5udW1EZWZzOworICAgICAg
ICBSRUxFQVNFX0FTU0VSVF9XSVRIX01FU1NBR0UoIW1fdW5zcGlsbGFibGVUbXBzLmdldCgqaXRl
cmF0b3IpLCAidHJ5aW5nIHRvIHNwaWxsIHVuc3BpbGxhYmxlIHRtcCIpOwogCi0gICAgICAgICAg
ICAvLyBJZiBpdCdzIGEgY29uc3RhbnQsIHRoZW4gaXQncyBub3QgYXMgYmFkIHRvIHNwaWxsLiBX
ZSBjYW4gcmVtYXRlcmlhbGl6ZSBpdCBpbiBtYW55Ci0gICAgICAgICAgICAvLyBjYXNlcy4KLSAg
ICAgICAgICAgIGlmIChjb3VudHMtPm51bUNvbnN0RGVmcyA9PSAxICYmIGNvdW50cy0+bnVtRGVm
cyA9PSAxKQotICAgICAgICAgICAgICAgIHVzZXMgLz0gMjsKKyAgICAgICAgSW5kZXhUeXBlIHZp
Y3RpbUluZGV4ID0gKml0ZXJhdG9yOworICAgICAgICBmbG9hdCBtYXhTY29yZSA9IDA7CiAKLSAg
ICAgICAgICAgIHJldHVybiBkZWdyZWUgLyB1c2VzOwotICAgICAgICB9OworICAgICAgICBmb3Ig
KDtpdGVyYXRvciAhPSBtX3NwaWxsV29ya2xpc3QuZW5kKCk7ICsraXRlcmF0b3IpIHsKKyAgICAg
ICAgICAgIEluZGV4VHlwZSBpbmRleCA9ICppdGVyYXRvcjsKIAotICAgICAgICBhdXRvIHZpY3Rp
bUl0ZXJhdG9yID0gaXRlcmF0b3I7Ci0gICAgICAgIGRvdWJsZSBtYXhTY29yZSA9IHNjb3JlKFRt
cE1hcHBlcjo6dG1wRnJvbUFic29sdXRlSW5kZXgoKml0ZXJhdG9yKSk7CisgICAgICAgICAgICBm
bG9hdCB1c2VzID0gbV91c2VDb3VudHMubnVtV2FybVVzZXNBbmREZWZzPGJhbms+KGluZGV4KTsK
KyAgICAgICAgICAgIGlmICghdXNlcykgeworICAgICAgICAgICAgICAgIHZpY3RpbUluZGV4ID0g
aW5kZXg7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisKKyAgICAgICAg
ICAgIC8vIEhpZ2hlciBzY29yZSBtZWFucyBtb3JlIGRlc2lyYWJsZSB0byBzcGlsbC4gTG93ZXIg
c2NvcmVzIG1heGltaXplIHRoZSBsaWtlbGlob29kIHRoYXQgYSB0bXAKKyAgICAgICAgICAgIC8v
IGdldHMgYSByZWdpc3Rlci4KKyAgICAgICAgICAgIGZsb2F0IGRlZ3JlZSA9IHN0YXRpY19jYXN0
PGZsb2F0PihtX2RlZ3JlZXNbaW5kZXhdKTsKKyAgICAgICAgICAgIGZsb2F0IHRtcFNjb3JlID0g
ZGVncmVlIC8gdXNlczsKKworICAgICAgICAgICAgLy8gSWYgaXQncyBhIGNvbnN0YW50LCB0aGVu
IGl0J3Mgbm90IGFzIGJhZCB0byBzcGlsbC4gV2UgY2FuIHJlbWF0ZXJpYWxpemUgaXQgaW4gbWFu
eQorICAgICAgICAgICAgLy8gY2FzZXMuCisgICAgICAgICAgICBpZiAobV91c2VDb3VudHMuaXND
b25zdERlZjxiYW5rPihpbmRleCkpCisgICAgICAgICAgICAgICAgdG1wU2NvcmUgKj0gMjsKIAot
ICAgICAgICArK2l0ZXJhdG9yOwotICAgICAgICBmb3IgKDtpdGVyYXRvciAhPSBtX3NwaWxsV29y
a2xpc3QuZW5kKCk7ICsraXRlcmF0b3IpIHsKLSAgICAgICAgICAgIGRvdWJsZSB0bXBTY29yZSA9
IHNjb3JlKFRtcE1hcHBlcjo6dG1wRnJvbUFic29sdXRlSW5kZXgoKml0ZXJhdG9yKSk7CiAgICAg
ICAgICAgICBpZiAodG1wU2NvcmUgPiBtYXhTY29yZSkgewotICAgICAgICAgICAgICAgIEFTU0VS
VCghbV91bnNwaWxsYWJsZVRtcHMuY29udGFpbnMoKml0ZXJhdG9yKSk7Ci0gICAgICAgICAgICAg
ICAgdmljdGltSXRlcmF0b3IgPSBpdGVyYXRvcjsKKyAgICAgICAgICAgICAgICB2aWN0aW1JbmRl
eCA9IGluZGV4OwogICAgICAgICAgICAgICAgIG1heFNjb3JlID0gdG1wU2NvcmU7CiAgICAgICAg
ICAgICB9CiAgICAgICAgIH0KIAotICAgICAgICBJbmRleFR5cGUgdmljdGltSW5kZXggPSAqdmlj
dGltSXRlcmF0b3I7CisgICAgICAgIEFTU0VSVCghbV91bnNwaWxsYWJsZVRtcHMuZ2V0KHZpY3Rp
bUluZGV4KSk7CisgICAgICAgIEFTU0VSVCghaXNQcmVjb2xvcmVkKHZpY3RpbUluZGV4KSk7CiAg
ICAgICAgIGlmICh0cmFjZURlYnVnKQogICAgICAgICAgICAgZGF0YUxvZ0xuKCJTZWxlY3Rpbmcg
c3BpbGwgIiwgdmljdGltSW5kZXgpOwotICAgICAgICBBU1NFUlQoIWlzUHJlY29sb3JlZCh2aWN0
aW1JbmRleCkpOwogICAgICAgICByZXR1cm4gdmljdGltSW5kZXg7CiAgICAgfQogCkBAIC01MTIs
MTQgKzYxNiwxNCBAQCBwcm90ZWN0ZWQ6CiAgICAgICAgICAgICBtX2NvbG9yZWRUbXAuY2xlYXIo
KTsKICAgICB9CiAKLSAgICBib29sIGFkZEludGVyZmVyZW5jZUVkZ2UoSW50ZXJmZXJlbmNlRWRn
ZVR5cGUgZWRnZSkKKyAgICBib29sIGFkZEludGVyZmVyZW5jZUVkZ2UoSW5kZXhUeXBlIHUsIElu
ZGV4VHlwZSB2KQogICAgIHsKLSAgICAgICAgcmV0dXJuIG1faW50ZXJmZXJlbmNlRWRnZXMuYWRk
KGVkZ2UpLmlzTmV3RW50cnk7CisgICAgICAgIHJldHVybiBtX2ludGVyZmVyZW5jZUVkZ2VzLmFk
ZEFuZFJldHVybklzTmV3RW50cnkodSwgdik7CiAgICAgfQogCi0gICAgYm9vbCBoYXNJbnRlcmZl
cmVuY2VFZGdlKEludGVyZmVyZW5jZUVkZ2VUeXBlIGVkZ2UpCisgICAgYm9vbCBoYXNJbnRlcmZl
cmVuY2VFZGdlKEluZGV4VHlwZSB1LCBJbmRleFR5cGUgdikKICAgICB7Ci0gICAgICAgIHJldHVy
biBtX2ludGVyZmVyZW5jZUVkZ2VzLmNvbnRhaW5zKGVkZ2UpOworICAgICAgICByZXR1cm4gbV9p
bnRlcmZlcmVuY2VFZGdlcy5jb250YWlucyh1LCB2KTsKICAgICB9CiAKICAgICB2b2lkIGNsZWFy
SW50ZXJmZXJlbmNlRWRnZXMoKQpAQCAtNTMyLDEwICs2MzYsMTEgQEAgcHJvdGVjdGVkOgogICAg
ICAgICBvdXQucHJpbnQoImdyYXBoIEludGVyZmVyZW5jZUdyYXBoIHsgXG4iKTsKIAogICAgICAg
ICBIYXNoU2V0PFRtcD4gdG1wc1dpdGhJbnRlcmZlcmVuY2VzOwotICAgICAgICBmb3IgKGNvbnN0
IGF1dG8mIGVkZ2UgOiBtX2ludGVyZmVyZW5jZUVkZ2VzKSB7Ci0gICAgICAgICAgICB0bXBzV2l0
aEludGVyZmVyZW5jZXMuYWRkKFRtcE1hcHBlcjo6dG1wRnJvbUFic29sdXRlSW5kZXgoZWRnZS5m
aXJzdCgpKSk7Ci0gICAgICAgICAgICB0bXBzV2l0aEludGVyZmVyZW5jZXMuYWRkKFRtcE1hcHBl
cjo6dG1wRnJvbUFic29sdXRlSW5kZXgoZWRnZS5zZWNvbmQoKSkpOwotICAgICAgICB9CisKKyAg
ICAgICAgbV9pbnRlcmZlcmVuY2VFZGdlcy5mb3JFYWNoKFsmdG1wc1dpdGhJbnRlcmZlcmVuY2Vz
XSAoc3RkOjpwYWlyPEluZGV4VHlwZSwgSW5kZXhUeXBlPiBlZGdlKSB7CisgICAgICAgICAgICB0
bXBzV2l0aEludGVyZmVyZW5jZXMuYWRkKFRtcE1hcHBlcjo6dG1wRnJvbUFic29sdXRlSW5kZXgo
ZWRnZS5maXJzdCkpOworICAgICAgICAgICAgdG1wc1dpdGhJbnRlcmZlcmVuY2VzLmFkZChUbXBN
YXBwZXI6OnRtcEZyb21BYnNvbHV0ZUluZGV4KGVkZ2Uuc2Vjb25kKSk7CisgICAgICAgIH0pOwog
CiAgICAgICAgIGZvciAoY29uc3QgYXV0byYgdG1wIDogdG1wc1dpdGhJbnRlcmZlcmVuY2VzKSB7
CiAgICAgICAgICAgICB1bnNpZ25lZCB0bXBJbmRleCA9IFRtcE1hcHBlcjo6YWJzb2x1dGVJbmRl
eCh0bXApOwpAQCAtNTQ1LDIwICs2NTAsMjEgQEAgcHJvdGVjdGVkOgogICAgICAgICAgICAgICAg
IG91dC5wcmludCgiICAgICIsIHRtcC5pbnRlcm5hbFZhbHVlKCksICIgW2xhYmVsPVwiIiwgdG1w
LCAiXCJdO1xuIik7CiAgICAgICAgIH0KIAotICAgICAgICBmb3IgKGNvbnN0IGF1dG8mIGVkZ2Ug
OiBtX2ludGVyZmVyZW5jZUVkZ2VzKQotICAgICAgICAgICAgb3V0LnByaW50KCIgICAgIiwgZWRn
ZS5maXJzdCgpLCAiIC0tICIsIGVkZ2Uuc2Vjb25kKCksICI7XG4iKTsKKyAgICAgICAgbV9pbnRl
cmZlcmVuY2VFZGdlcy5mb3JFYWNoKFsmb3V0XSAoc3RkOjpwYWlyPEluZGV4VHlwZSwgSW5kZXhU
eXBlPiBlZGdlKSB7CisgICAgICAgICAgICBvdXQucHJpbnQoIiAgICAiLCBlZGdlLmZpcnN0LCAi
IC0tICIsIGVkZ2Uuc2Vjb25kLCAiO1xuIik7CisgICAgICAgIH0pOwogICAgICAgICBvdXQucHJp
bnQoIn1cbiIpOwogICAgIH0KIAogICAgIFZlY3RvcjxSZWc+IG1fcmVnc0luUHJpb3JpdHlPcmRl
cjsKICAgICBJbmRleFR5cGUgbV9sYXN0UHJlY29sb3JlZFJlZ2lzdGVySW5kZXggeyAwIH07CiAK
LSAgICB0eXBlbmFtZSBJbnRlcmZlcmVuY2VFZGdlVHlwZTo6SW50ZXJmZXJlbmNlU2V0IG1faW50
ZXJmZXJlbmNlRWRnZXM7CisgICAgSW50ZXJmZXJlbmNlU2V0IG1faW50ZXJmZXJlbmNlRWRnZXM7
CiAKICAgICBWZWN0b3I8VmVjdG9yPEluZGV4VHlwZSwgMCwgVW5zYWZlVmVjdG9yT3ZlcmZsb3cs
IDQ+LCAwLCBVbnNhZmVWZWN0b3JPdmVyZmxvdz4gbV9hZGphY2VuY3lMaXN0OwogICAgIFZlY3Rv
cjxJbmRleFR5cGUsIDAsIFVuc2FmZVZlY3Rvck92ZXJmbG93PiBtX2RlZ3JlZXM7CiAKLSAgICB1
c2luZyBJbmRleFR5cGVTZXQgPSBIYXNoU2V0PEluZGV4VHlwZSwgRGVmYXVsdEhhc2g8SW5kZXhU
eXBlPiwgV1RGOjpVbnNpZ25lZFdpdGhaZXJvS2V5SGFzaFRyYWl0czxJbmRleFR5cGU+PjsKKyAg
ICB1c2luZyBJbmRleFR5cGVTZXQgPSBTbWFsbFNldDxJbmRleFR5cGUsIEludEhhc2g8SW5kZXhU
eXBlPj47CiAKICAgICBIYXNoTWFwPEluZGV4VHlwZSwgSW5kZXhUeXBlU2V0LCBEZWZhdWx0SGFz
aDxJbmRleFR5cGU+LCBXVEY6OlVuc2lnbmVkV2l0aFplcm9LZXlIYXNoVHJhaXRzPEluZGV4VHlw
ZT4+IG1fYmlhc2VzOwogCkBAIC01NzEsNyArNjc3LDcgQEAgcHJvdGVjdGVkOgogICAgIFZlY3Rv
cjxNb3ZlT3BlcmFuZHMsIDAsIFVuc2FmZVZlY3Rvck92ZXJmbG93PiBtX2NvYWxlc2NpbmdDYW5k
aWRhdGVzOwogCiAgICAgLy8gTGlzdCBvZiBldmVyeSBtb3ZlIGluc3RydWN0aW9uIGFzc29jaWF0
ZWQgd2l0aCBhIFRtcC4KLSAgICBWZWN0b3I8SW5kZXhUeXBlU2V0PiBtX21vdmVMaXN0OworICAg
IFZlY3RvcjxTbWFsbFNldDx1bnNpZ25lZCwgSW50SGFzaDxJbmRleFR5cGU+Pj4gbV9tb3ZlTGlz
dDsKIAogICAgIC8vIENvbG9ycy4KICAgICBWZWN0b3I8UmVnLCAwLCBVbnNhZmVWZWN0b3JPdmVy
Zmxvdz4gbV9jb2xvcmVkVG1wOwpAQCAtNTk1LDE3ICs3MDEsMTggQEAgcHJvdGVjdGVkOgogICAg
IC8vIFRoZSBtYXBwaW5nIG9mIFRtcCB0byB0aGVpciBhbGlhcyBmb3IgTW92ZXMgdGhhdCBhcmUg
YWx3YXlzIGNvYWxlc2NpbmcgcmVnYXJkbGVzcyBvZiBzcGlsbGluZy4KICAgICBWZWN0b3I8SW5k
ZXhUeXBlLCAwLCBVbnNhZmVWZWN0b3JPdmVyZmxvdz4gbV9jb2FsZXNjZWRUbXBzQXRTcGlsbDsK
IAotICAgIGNvbnN0IEhhc2hTZXQ8dW5zaWduZWQ+JiBtX3Vuc3BpbGxhYmxlVG1wczsKLSAgICBj
b25zdCBVc2VDb3VudHM8VG1wPiYgbV91c2VDb3VudHM7CisgICAgY29uc3QgQml0VmVjdG9yJiBt
X3Vuc3BpbGxhYmxlVG1wczsKKyAgICBjb25zdCBVc2VDb3VudHMmIG1fdXNlQ291bnRzOwogICAg
IENvZGUmIG1fY29kZTsKIAogICAgIFZlY3RvcjxUbXAsIDQ+IG1fcGlubmVkUmVnczsKIH07CiAK
LXRlbXBsYXRlIDx0eXBlbmFtZSBJbmRleFR5cGUsIHR5cGVuYW1lIFRtcE1hcHBlciwgdHlwZW5h
bWUgSW50ZXJmZXJlbmNlRWRnZT4KLWNsYXNzIEJyaWdncyA6IHB1YmxpYyBBYnN0cmFjdENvbG9y
aW5nQWxsb2NhdG9yPEluZGV4VHlwZSwgVG1wTWFwcGVyLCBJbnRlcmZlcmVuY2VFZGdlPiB7Ci0g
ICAgdXNpbmcgQmFzZSA9IEFic3RyYWN0Q29sb3JpbmdBbGxvY2F0b3I8SW5kZXhUeXBlLCBUbXBN
YXBwZXIsIEludGVyZmVyZW5jZUVkZ2U+OwordGVtcGxhdGUgPHR5cGVuYW1lIEluZGV4VHlwZSwg
dHlwZW5hbWUgSW50ZXJmZXJlbmNlU2V0LCBCYW5rIGJhbms+CitjbGFzcyBCcmlnZ3MgOiBwdWJs
aWMgQWJzdHJhY3RDb2xvcmluZ0FsbG9jYXRvcjxJbmRleFR5cGUsIEludGVyZmVyZW5jZVNldCwg
YmFuaz4geworICAgIHVzaW5nIEJhc2UgPSBBYnN0cmFjdENvbG9yaW5nQWxsb2NhdG9yPEluZGV4
VHlwZSwgSW50ZXJmZXJlbmNlU2V0LCBiYW5rPjsKIHByb3RlY3RlZDoKKyAgICB1c2luZyBUbXBN
YXBwZXIgPSB0eXBlbmFtZSBCYXNlOjpUbXBNYXBwZXI7CiAgICAgdXNpbmcgQmFzZTo6bV9pc09u
U2VsZWN0U3RhY2s7CiAgICAgdXNpbmcgQmFzZTo6bV9zZWxlY3RTdGFjazsKICAgICB1c2luZyBC
YXNlOjptX3NpbXBsaWZ5V29ya2xpc3Q7CkBAIC02MzUsMTEgKzc0MiwxMiBAQCBwcm90ZWN0ZWQ6
CiAgICAgdXNpbmcgQmFzZTo6aGFzQmVlblNpbXBsaWZpZWQ7CiAgICAgdXNpbmcgQmFzZTo6YWRk
VG9TcGlsbDsKICAgICB1c2luZyBCYXNlOjphZGRCaWFzOworICAgIHVzaW5nIEJhc2U6Om1faW50
ZXJmZXJlbmNlRWRnZXM7CiAgICAgdXNpbmcgQmFzZTo6bV9waW5uZWRSZWdzOwogICAgIHVzaW5n
IEJhc2U6Om1fcmVnc0luUHJpb3JpdHlPcmRlcjsKIAogcHVibGljOgotICAgIEJyaWdncyhDb2Rl
JiBjb2RlLCBjb25zdCBWZWN0b3I8UmVnPiYgcmVnc0luUHJpb3JpdHlPcmRlciwgSW5kZXhUeXBl
IGxhc3RQcmVjb2xvcmVkUmVnaXN0ZXJJbmRleCwgdW5zaWduZWQgdG1wQXJyYXlTaXplLCBjb25z
dCBIYXNoU2V0PHVuc2lnbmVkPiYgdW5zcGlsbGFibGVUbXBzLCBjb25zdCBVc2VDb3VudHM8VG1w
PiYgdXNlQ291bnRzKQorICAgIEJyaWdncyhDb2RlJiBjb2RlLCBjb25zdCBWZWN0b3I8UmVnPiYg
cmVnc0luUHJpb3JpdHlPcmRlciwgSW5kZXhUeXBlIGxhc3RQcmVjb2xvcmVkUmVnaXN0ZXJJbmRl
eCwgdW5zaWduZWQgdG1wQXJyYXlTaXplLCBjb25zdCBCaXRWZWN0b3ImIHVuc3BpbGxhYmxlVG1w
cywgY29uc3QgVXNlQ291bnRzJiB1c2VDb3VudHMpCiAgICAgICAgIDogQmFzZShjb2RlLCByZWdz
SW5Qcmlvcml0eU9yZGVyLCBsYXN0UHJlY29sb3JlZFJlZ2lzdGVySW5kZXgsIHRtcEFycmF5U2l6
ZSwgdW5zcGlsbGFibGVUbXBzLCB1c2VDb3VudHMpCiAgICAgewogICAgIH0KQEAgLTY5MSw3ICs3
OTksNyBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIHVuc2ln
bmVkIGRlZ3JlZSA9IG1fZGVncmVlc1tpXTsKICAgICAgICAgICAgICAgICBpZiAoZGVncmVlID49
IHJlZ2lzdGVyQ291bnQpIHsKLSAgICAgICAgICAgICAgICAgICAgQVNTRVJUKG1fdW5zcGlsbGFi
bGVUbXBzLmNvbnRhaW5zKGkpIHx8IG1fc3BpbGxXb3JrbGlzdC5jb250YWlucyhpKSk7CisgICAg
ICAgICAgICAgICAgICAgIEFTU0VSVChtX3Vuc3BpbGxhYmxlVG1wcy5nZXQoaSkgfHwgbV9zcGls
bFdvcmtsaXN0LmNvbnRhaW5zKGkpKTsKICAgICAgICAgICAgICAgICAgICAgQVNTRVJUKCFtX3Np
bXBsaWZ5V29ya2xpc3QuY29udGFpbnMoaSkpOwogICAgICAgICAgICAgICAgICAgICBjb250aW51
ZTsKICAgICAgICAgICAgICAgICB9CkBAIC03NDcsOSArODU1LDcgQEAgcHJvdGVjdGVkOgogICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9CiAKLSAgICAgICAgaWYgKGlzUHJlY29s
b3JlZCh2KQotICAgICAgICAgICAgfHwgaGFzSW50ZXJmZXJlbmNlRWRnZShJbnRlcmZlcmVuY2VF
ZGdlKHUsIHYpKSkgewotCisgICAgICAgIGlmIChpc1ByZWNvbG9yZWQodikgfHwgaGFzSW50ZXJm
ZXJlbmNlRWRnZSh1LCB2KSkgewogICAgICAgICAgICAgLy8gTm8gbmVlZCB0byBldmVyIGNvbnNp
ZGVyIHRoaXMgbW92ZSBhZ2FpbiBpZiBpdCBpbnRlcmZlcmVzLgogICAgICAgICAgICAgLy8gTm8g
Y29hbGVzY2luZyB3aWxsIHJlbW92ZSB0aGUgaW50ZXJmZXJlbmNlLgogICAgICAgICAgICAgbW92
ZUluZGV4ID0gVUlOVF9NQVg7CkBAIC03ODgsNyArODk0LDggQEAgcHJvdGVjdGVkOgogICAgICAg
ICBtX2NvYWxlc2NlZFRtcHNbdl0gPSB1OwogCiAgICAgICAgIGF1dG8mIHZNb3ZlcyA9IG1fbW92
ZUxpc3Rbdl07Ci0gICAgICAgIG1fbW92ZUxpc3RbdV0uYWRkKHZNb3Zlcy5iZWdpbigpLCB2TW92
ZXMuZW5kKCkpOworICAgICAgICBmb3IgKHVuc2lnbmVkIG1vdmUgOiB2TW92ZXMpCisgICAgICAg
ICAgICBtX21vdmVMaXN0W3VdLmFkZChtb3ZlKTsKIAogICAgICAgICBmb3JFYWNoQWRqYWNlbnQo
diwgW3RoaXMsIHVdIChJbmRleFR5cGUgYWRqYWNlbnRUbXBJbmRleCkgewogICAgICAgICAgICAg
aWYgKGFkZEVkZ2VEaXN0aW5jdFdpdGhvdXREZWdyZWVDaGFuZ2UoYWRqYWNlbnRUbXBJbmRleCwg
dSkpIHsKQEAgLTkzOCw3ICsxMDQ1LDcgQEAgcHJvdGVjdGVkOgogICAgICAgICAgICAgICAgIGRh
dGFMb2dMbigiTW92aW5nIHRtcCAiLCB0bXBJbmRleCwgIiBmcm9tIHNwaWxsIGxpc3QgdG8gc2lt
cGxpZnkgbGlzdCBiZWNhdXNlIGl0J3MgZGVncmVlIGlzIG5vdyBsZXNzIHRoYW4gayIpOwogCiAg
ICAgICAgICAgICBpZiAoQVNTRVJUX0VOQUJMRUQpCi0gICAgICAgICAgICAgICAgQVNTRVJUKG1f
dW5zcGlsbGFibGVUbXBzLmNvbnRhaW5zKHRtcEluZGV4KSB8fCBtX3NwaWxsV29ya2xpc3QuY29u
dGFpbnModG1wSW5kZXgpKTsKKyAgICAgICAgICAgICAgICBBU1NFUlQobV91bnNwaWxsYWJsZVRt
cHMuZ2V0KHRtcEluZGV4KSB8fCBtX3NwaWxsV29ya2xpc3QuY29udGFpbnModG1wSW5kZXgpKTsK
ICAgICAgICAgICAgIG1fc3BpbGxXb3JrbGlzdC5xdWlja0NsZWFyKHRtcEluZGV4KTsKIAogICAg
ICAgICAgICAgQVNTRVJUKCFtX3NpbXBsaWZ5V29ya2xpc3QuY29udGFpbnModG1wSW5kZXgpKTsK
QEAgLTk1NiwxMCArMTA2MywxMSBAQCBwcm90ZWN0ZWQ6CiAgICAgTW92ZVNldCBtX3dvcmtsaXN0
TW92ZXM7CiB9OwogCi10ZW1wbGF0ZSA8dHlwZW5hbWUgSW5kZXhUeXBlLCB0eXBlbmFtZSBUbXBN
YXBwZXIsIHR5cGVuYW1lIEludGVyZmVyZW5jZUVkZ2U+Ci1jbGFzcyBJUkMgOiBwdWJsaWMgQWJz
dHJhY3RDb2xvcmluZ0FsbG9jYXRvcjxJbmRleFR5cGUsIFRtcE1hcHBlciwgSW50ZXJmZXJlbmNl
RWRnZT4gewotICAgIHVzaW5nIEJhc2UgPSBBYnN0cmFjdENvbG9yaW5nQWxsb2NhdG9yPEluZGV4
VHlwZSwgVG1wTWFwcGVyLCBJbnRlcmZlcmVuY2VFZGdlPjsKK3RlbXBsYXRlIDx0eXBlbmFtZSBJ
bmRleFR5cGUsIHR5cGVuYW1lIEludGVyZmVyZW5jZVNldCwgQmFuayBiYW5rPgorY2xhc3MgSVJD
IDogcHVibGljIEFic3RyYWN0Q29sb3JpbmdBbGxvY2F0b3I8SW5kZXhUeXBlLCBJbnRlcmZlcmVu
Y2VTZXQsIGJhbms+IHsKKyAgICB1c2luZyBCYXNlID0gQWJzdHJhY3RDb2xvcmluZ0FsbG9jYXRv
cjxJbmRleFR5cGUsIEludGVyZmVyZW5jZVNldCwgYmFuaz47CiBwcm90ZWN0ZWQ6CisgICAgdXNp
bmcgVG1wTWFwcGVyID0gdHlwZW5hbWUgQmFzZTo6VG1wTWFwcGVyOwogICAgIHVzaW5nIEJhc2U6
Om1faXNPblNlbGVjdFN0YWNrOwogICAgIHVzaW5nIEJhc2U6Om1fc2VsZWN0U3RhY2s7CiAgICAg
dXNpbmcgQmFzZTo6bV9zaW1wbGlmeVdvcmtsaXN0OwpAQCAtOTkxLDExICsxMDk5LDEyIEBAIHBy
b3RlY3RlZDoKICAgICB1c2luZyBCYXNlOjptX2FkamFjZW5jeUxpc3Q7CiAgICAgdXNpbmcgQmFz
ZTo6ZHVtcEludGVyZmVyZW5jZUdyYXBoSW5Eb3Q7CiAgICAgdXNpbmcgQmFzZTo6YWRkQmlhczsK
KyAgICB1c2luZyBCYXNlOjptX2ludGVyZmVyZW5jZUVkZ2VzOwogICAgIHVzaW5nIEJhc2U6Om1f
cGlubmVkUmVnczsKICAgICB1c2luZyBCYXNlOjptX3JlZ3NJblByaW9yaXR5T3JkZXI7CiAKIHB1
YmxpYzoKLSAgICBJUkMoQ29kZSYgY29kZSwgY29uc3QgVmVjdG9yPFJlZz4mIHJlZ3NJblByaW9y
aXR5T3JkZXIsIEluZGV4VHlwZSBsYXN0UHJlY29sb3JlZFJlZ2lzdGVySW5kZXgsIHVuc2lnbmVk
IHRtcEFycmF5U2l6ZSwgY29uc3QgSGFzaFNldDx1bnNpZ25lZD4mIHVuc3BpbGxhYmxlVG1wcywg
Y29uc3QgVXNlQ291bnRzPFRtcD4mIHVzZUNvdW50cykKKyAgICBJUkMoQ29kZSYgY29kZSwgY29u
c3QgVmVjdG9yPFJlZz4mIHJlZ3NJblByaW9yaXR5T3JkZXIsIEluZGV4VHlwZSBsYXN0UHJlY29s
b3JlZFJlZ2lzdGVySW5kZXgsIHVuc2lnbmVkIHRtcEFycmF5U2l6ZSwgY29uc3QgQml0VmVjdG9y
JiB1bnNwaWxsYWJsZVRtcHMsIGNvbnN0IFVzZUNvdW50cyYgdXNlQ291bnRzKQogICAgICAgICA6
IEJhc2UoY29kZSwgcmVnc0luUHJpb3JpdHlPcmRlciwgbGFzdFByZWNvbG9yZWRSZWdpc3Rlcklu
ZGV4LCB0bXBBcnJheVNpemUsIHVuc3BpbGxhYmxlVG1wcywgdXNlQ291bnRzKQogICAgIHsKICAg
ICB9CkBAIC0xMDkzLDggKzEyMDIsNyBAQCBwcm90ZWN0ZWQ6CiAKICAgICAgICAgICAgIGlmICh0
cmFjZURlYnVnKQogICAgICAgICAgICAgICAgIGRhdGFMb2coIiAgICBDb2FsZXNjZWRcbiIpOwot
ICAgICAgICB9IGVsc2UgaWYgKGlzUHJlY29sb3JlZCh2KQotICAgICAgICAgICAgfHwgaGFzSW50
ZXJmZXJlbmNlRWRnZShJbnRlcmZlcmVuY2VFZGdlKHUsIHYpKSkgeworICAgICAgICB9IGVsc2Ug
aWYgKGlzUHJlY29sb3JlZCh2KSB8fCBoYXNJbnRlcmZlcmVuY2VFZGdlKHUsIHYpKSB7CiAgICAg
ICAgICAgICBhZGRXb3JrTGlzdCh1KTsKICAgICAgICAgICAgIGFkZFdvcmtMaXN0KHYpOwogCkBA
IC0xMTMzLDcgKzEyNDEsOCBAQCBwcm90ZWN0ZWQ6CiAgICAgICAgIG1fY29hbGVzY2VkVG1wc1t2
XSA9IHU7CiAKICAgICAgICAgYXV0byYgdk1vdmVzID0gbV9tb3ZlTGlzdFt2XTsKLSAgICAgICAg
bV9tb3ZlTGlzdFt1XS5hZGQodk1vdmVzLmJlZ2luKCksIHZNb3Zlcy5lbmQoKSk7CisgICAgICAg
IGZvciAodW5zaWduZWQgbW92ZSA6IHZNb3ZlcykKKyAgICAgICAgICAgIG1fbW92ZUxpc3RbdV0u
YWRkKG1vdmUpOwogCiAgICAgICAgIGZvckVhY2hBZGphY2VudCh2LCBbdGhpcywgdV0gKEluZGV4
VHlwZSBhZGphY2VudFRtcEluZGV4KSB7CiAgICAgICAgICAgICBpZiAoYWRkRWRnZURpc3RpbmN0
V2l0aG91dERlZ3JlZUNoYW5nZShhZGphY2VudFRtcEluZGV4LCB1KSkgewpAQCAtMTM5NywxMCAr
MTUwNiwxMSBAQCBwcm90ZWN0ZWQ6CiB9OwogCiAvLyBUaGlzIHBlcmZvcm0gYWxsIHRoZSB0YXNr
cyB0aGF0IGFyZSBzcGVjaWZpYyB0byBjZXJ0YWluIHJlZ2lzdGVyIHR5cGUuCi10ZW1wbGF0ZTxC
YW5rIGJhbmssIHRlbXBsYXRlPHR5cGVuYW1lLCB0eXBlbmFtZSwgdHlwZW5hbWU+IGNsYXNzIEFs
bG9jYXRvclR5cGUsIHR5cGVuYW1lIEludGVyZmVyZW5jZUVkZ2VUeXBlPgotY2xhc3MgQ29sb3Jp
bmdBbGxvY2F0b3IgOiBwdWJsaWMgQWxsb2NhdG9yVHlwZTx1bnNpZ25lZCwgQWJzb2x1dGVUbXBN
YXBwZXI8YmFuaz4sIEludGVyZmVyZW5jZUVkZ2VUeXBlPiB7Ci0gICAgdXNpbmcgVG1wTWFwcGVy
ID0gQWJzb2x1dGVUbXBNYXBwZXI8YmFuaz47Ci0gICAgdXNpbmcgQmFzZSA9IEFsbG9jYXRvclR5
cGU8dW5zaWduZWQsIFRtcE1hcHBlciwgSW50ZXJmZXJlbmNlRWRnZVR5cGU+OwordGVtcGxhdGU8
dHlwZW5hbWUgSW5kZXhUeXBlLCBCYW5rIGJhbmssIHRlbXBsYXRlPHR5cGVuYW1lLCB0eXBlbmFt
ZSwgQmFuaz4gY2xhc3MgQWxsb2NhdG9yVHlwZSwgdHlwZW5hbWUgSW50ZXJmZXJlbmNlU2V0Pgor
Y2xhc3MgQ29sb3JpbmdBbGxvY2F0b3IgOiBwdWJsaWMgQWxsb2NhdG9yVHlwZTxJbmRleFR5cGUs
IEludGVyZmVyZW5jZVNldCwgYmFuaz4geworICAgIHVzaW5nIEJhc2UgPSBBbGxvY2F0b3JUeXBl
PEluZGV4VHlwZSwgSW50ZXJmZXJlbmNlU2V0LCBiYW5rPjsKKyAgICB1c2luZyBUbXBNYXBwZXIg
PSB0eXBlbmFtZSBCYXNlOjpUbXBNYXBwZXI7CisgICAgdXNpbmcgQmFzZTo6dG1wVG9JbmRleDsK
ICAgICB1c2luZyBCYXNlOjptX2lzT25TZWxlY3RTdGFjazsKICAgICB1c2luZyBCYXNlOjptX3Nl
bGVjdFN0YWNrOwogICAgIHVzaW5nIEJhc2U6Om1fc2ltcGxpZnlXb3JrbGlzdDsKQEAgLTE0MjMs
MTIgKzE1MzMsMTMgQEAgY2xhc3MgQ29sb3JpbmdBbGxvY2F0b3IgOiBwdWJsaWMgQWxsb2NhdG9y
VHlwZTx1bnNpZ25lZCwgQWJzb2x1dGVUbXBNYXBwZXI8YmFuaz4KICAgICB1c2luZyBCYXNlOjpo
YXNJbnRlcmZlcmVuY2VFZGdlOwogICAgIHVzaW5nIEJhc2U6OmdldEFsaWFzOwogICAgIHVzaW5n
IEJhc2U6OmFkZEVkZ2U7CisgICAgdXNpbmcgQmFzZTo6bV9pbnRlcmZlcmVuY2VFZGdlczsKICAg
ICB1c2luZyBCYXNlOjptX3Bpbm5lZFJlZ3M7CiAgICAgdXNpbmcgQmFzZTo6bV9yZWdzSW5Qcmlv
cml0eU9yZGVyOwogCiBwdWJsaWM6CiAKLSAgICBDb2xvcmluZ0FsbG9jYXRvcihDb2RlJiBjb2Rl
LCBUbXBXaWR0aCYgdG1wV2lkdGgsIGNvbnN0IFVzZUNvdW50czxUbXA+JiB1c2VDb3VudHMsIGNv
bnN0IEhhc2hTZXQ8dW5zaWduZWQ+JiB1bnNwaWxsYWJsZVRtcCkKKyAgICBDb2xvcmluZ0FsbG9j
YXRvcihDb2RlJiBjb2RlLCBUbXBXaWR0aCYgdG1wV2lkdGgsIGNvbnN0IFVzZUNvdW50cyYgdXNl
Q291bnRzLCBjb25zdCBCaXRWZWN0b3ImIHVuc3BpbGxhYmxlVG1wKQogICAgICAgICA6IEJhc2Uo
Y29kZSwgY29kZS5yZWdzSW5Qcmlvcml0eU9yZGVyKGJhbmspLCBUbXBNYXBwZXI6Omxhc3RNYWNo
aW5lUmVnaXN0ZXJJbmRleCgpLCB0bXBBcnJheVNpemUoY29kZSksIHVuc3BpbGxhYmxlVG1wLCB1
c2VDb3VudHMpCiAgICAgICAgICwgbV90bXBXaWR0aCh0bXBXaWR0aCkKICAgICB7CkBAIC0xNDQw
LDEzICsxNTUxLDE1IEBAIHB1YmxpYzoKICAgICAgICAgICAgIH0KICAgICAgICAgfQogCisgICAg
ICAgIG1faW50ZXJmZXJlbmNlRWRnZXMuc2V0TWF4VG1wSW5kZXgoQWJzb2x1dGVUbXBNYXBwZXI8
YmFuaz46OmFic29sdXRlSW5kZXgobV9jb2RlLm51bVRtcHMoYmFuaykpKTsKKwogICAgICAgICBp
bml0aWFsaXplUHJlY29sb3JlZFRtcCgpOwogICAgICAgICBidWlsZCgpOwogICAgIH0KIAogICAg
IFRtcCBnZXRBbGlhcyhUbXAgdG1wKSBjb25zdAogICAgIHsKLSAgICAgICAgcmV0dXJuIFRtcE1h
cHBlcjo6dG1wRnJvbUFic29sdXRlSW5kZXgoZ2V0QWxpYXMoVG1wTWFwcGVyOjphYnNvbHV0ZUlu
ZGV4KHRtcCkpKTsKKyAgICAgICAgcmV0dXJuIFRtcE1hcHBlcjo6dG1wRnJvbUFic29sdXRlSW5k
ZXgoZ2V0QWxpYXModG1wVG9JbmRleCh0bXApKSk7CiAgICAgfQogCiAgICAgLy8gVGhpcyB0ZWxs
cyB5b3UgaWYgYSBNb3ZlIHdpbGwgYmUgY29hbGVzY2FibGUgaWYgdGhlIHNyYyBhbmQgZHN0IGVu
ZCB1cCBtYXRjaGluZy4gVGhpcyBtZXRob2QKQEAgLTE0NjksOCArMTU4Miw4IEBAIHB1YmxpYzoK
ICAgICAgICAgaWYgKG1fY29hbGVzY2VkVG1wc0F0U3BpbGwuaXNFbXB0eSgpKQogICAgICAgICAg
ICAgcmV0dXJuIHRtcDsKIAotICAgICAgICB1bnNpZ25lZCBhbGlhc0luZGV4ID0gVG1wTWFwcGVy
OjphYnNvbHV0ZUluZGV4KHRtcCk7Ci0gICAgICAgIHdoaWxlICh1bnNpZ25lZCBuZXh0QWxpYXNJ
bmRleCA9IG1fY29hbGVzY2VkVG1wc0F0U3BpbGxbYWxpYXNJbmRleF0pCisgICAgICAgIEluZGV4
VHlwZSBhbGlhc0luZGV4ID0gdG1wVG9JbmRleCh0bXApOworICAgICAgICB3aGlsZSAoSW5kZXhU
eXBlIG5leHRBbGlhc0luZGV4ID0gbV9jb2FsZXNjZWRUbXBzQXRTcGlsbFthbGlhc0luZGV4XSkK
ICAgICAgICAgICAgIGFsaWFzSW5kZXggPSBuZXh0QWxpYXNJbmRleDsKIAogICAgICAgICBUbXAg
YWxpYXMgPSBUbXBNYXBwZXI6OnRtcEZyb21BYnNvbHV0ZUluZGV4KGFsaWFzSW5kZXgpOwpAQCAt
MTUyNyw3ICsxNjQwLDcgQEAgcHVibGljOgogICAgICAgICBjb25zdCBDb2xsZWN0aW9uJiBtX2Nv
bGxlY3Rpb247CiAgICAgfTsKIAotICAgIEluZGV4VG9UbXBJdGVyYWJsZUFkYXB0b3I8VmVjdG9y
PHVuc2lnbmVkPj4gc3BpbGxlZFRtcHMoKSBjb25zdCB7IHJldHVybiBtX3NwaWxsZWRUbXBzOyB9
CisgICAgSW5kZXhUb1RtcEl0ZXJhYmxlQWRhcHRvcjxWZWN0b3I8SW5kZXhUeXBlPj4gc3BpbGxl
ZFRtcHMoKSBjb25zdCB7IHJldHVybiBtX3NwaWxsZWRUbXBzOyB9CiAKICAgICBib29sIHJlcXVp
cmVzU3BpbGxpbmcoKSBjb25zdCB7IHJldHVybiAhbV9zcGlsbGVkVG1wcy5pc0VtcHR5KCk7IH0K
IApAQCAtMTU4NCwxMCArMTY5NywxMCBAQCBJR05PUkVfR0NDX1dBUk5JTkdTX0VORAogICAgICAg
ICBpZiAobGVmdFRtcC5pc0dQKCkgIT0gKGJhbmsgPT0gR1ApIHx8IHJpZ2h0VG1wLmlzR1AoKSAh
PSAoYmFuayA9PSBHUCkpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICAgICAgdW5z
aWduZWQgbGVmdEluZGV4ID0gVG1wTWFwcGVyOjphYnNvbHV0ZUluZGV4KGxlZnRUbXApOwotICAg
ICAgICB1bnNpZ25lZCByaWdodEluZGV4ID0gVG1wTWFwcGVyOjphYnNvbHV0ZUluZGV4KHJpZ2h0
VG1wKTsKKyAgICAgICAgSW5kZXhUeXBlIGxlZnRJbmRleCA9IHRtcFRvSW5kZXgobGVmdFRtcCk7
CisgICAgICAgIEluZGV4VHlwZSByaWdodEluZGV4ID0gdG1wVG9JbmRleChyaWdodFRtcCk7CiAK
LSAgICAgICAgcmV0dXJuICFoYXNJbnRlcmZlcmVuY2VFZGdlKEludGVyZmVyZW5jZUVkZ2VUeXBl
KGxlZnRJbmRleCwgcmlnaHRJbmRleCkpOworICAgICAgICByZXR1cm4gIWhhc0ludGVyZmVyZW5j
ZUVkZ2UobGVmdEluZGV4LCByaWdodEluZGV4KTsKICAgICB9CiAKICAgICB2b2lkIGFkZFRvTG93
UHJpb3JpdHlDb2FsZXNjaW5nQ2FuZGlkYXRlcyhBcmcgbGVmdCwgQXJnIHJpZ2h0KQpAQCAtMTU5
Niw4ICsxNzA5LDggQEAgSUdOT1JFX0dDQ19XQVJOSU5HU19FTkQKICAgICAgICAgVG1wIGxlZnRU
bXAgPSBsZWZ0LnRtcCgpOwogICAgICAgICBUbXAgcmlnaHRUbXAgPSByaWdodC50bXAoKTsKIAot
ICAgICAgICB1bnNpZ25lZCBsZWZ0SW5kZXggPSBUbXBNYXBwZXI6OmFic29sdXRlSW5kZXgobGVm
dFRtcCk7Ci0gICAgICAgIHVuc2lnbmVkIHJpZ2h0SW5kZXggPSBUbXBNYXBwZXI6OmFic29sdXRl
SW5kZXgocmlnaHRUbXApOworICAgICAgICBJbmRleFR5cGUgbGVmdEluZGV4ID0gdG1wVG9JbmRl
eChsZWZ0VG1wKTsKKyAgICAgICAgSW5kZXhUeXBlIHJpZ2h0SW5kZXggPSB0bXBUb0luZGV4KHJp
Z2h0VG1wKTsKIAogICAgICAgICB1bnNpZ25lZCBuZXh0TW92ZUluZGV4ID0gbV9jb2FsZXNjaW5n
Q2FuZGlkYXRlcy5zaXplKCk7CiAgICAgICAgIG1fY29hbGVzY2luZ0NhbmRpZGF0ZXMuYXBwZW5k
KHsgbGVmdEluZGV4LCByaWdodEluZGV4IH0pOwpAQCAtMTY3NSw3ICsxNzg4LDcgQEAgSUdOT1JF
X0dDQ19XQVJOSU5HU19FTkQKICAgICAgICAgICAgIEFTU0VSVCh1c2VUbXApOwogCiAgICAgICAg
ICAgICB1bnNpZ25lZCBuZXh0TW92ZUluZGV4ID0gbV9jb2FsZXNjaW5nQ2FuZGlkYXRlcy5zaXpl
KCk7Ci0gICAgICAgICAgICBtX2NvYWxlc2NpbmdDYW5kaWRhdGVzLmFwcGVuZCh7IFRtcE1hcHBl
cjo6YWJzb2x1dGVJbmRleCh1c2VUbXApLCBUbXBNYXBwZXI6OmFic29sdXRlSW5kZXgoZGVmVG1w
KSB9KTsKKyAgICAgICAgICAgIG1fY29hbGVzY2luZ0NhbmRpZGF0ZXMuYXBwZW5kKHsgdG1wVG9J
bmRleCh1c2VUbXApLCB0bXBUb0luZGV4KGRlZlRtcCkgfSk7CiAgICAgICAgICAgICBpZiAodHJh
Y2VEZWJ1ZykKICAgICAgICAgICAgICAgICBkYXRhTG9nTG4oIk1vdmUgYXQgaW5kZXggIiwgbmV4
dE1vdmVJbmRleCwgIiBpczogIiwgKnByZXZJbnN0KTsKIApAQCAtMTc0MywxNCArMTg1NiwxNSBA
QCBJR05PUkVfR0NDX1dBUk5JTkdTX0VORAogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAg
ICAgIGZvciAoVG1wIGxpdmVUbXAgOiBsaXZlVG1wcykgewogICAgICAgICAgICAgICAgICAgICBB
U1NFUlQobGl2ZVRtcC5pc0dQKCkgPT0gKGJhbmsgPT0gR1ApKTsKLSAgICAgICAgICAgICAgICAg
ICAgCi0gICAgICAgICAgICAgICAgICAgIGlmICh0cmFjZURlYnVnKQotICAgICAgICAgICAgICAg
ICAgICAgICAgZGF0YUxvZygiICAgIEFkZGluZyBkZWYtbGl2ZSBlZGdlOiAiLCBhcmcsICIsICIs
IGxpdmVUbXAsICJcbiIpOworCisgICAgICAgICAgICAgICAgICAgIGRhdGFMb2dMbklmKHRyYWNl
RGVidWcsICIgICAgQWRkaW5nIGRlZi1saXZlIGVkZ2U6ICIsIGFyZywgIiwgIiwgbGl2ZVRtcCk7
CiAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICBhZGRFZGdlKGFyZywg
bGl2ZVRtcCk7CiAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGZvciAoY29uc3Qg
VG1wJiBwaW5uZWRSZWdUbXAgOiBtX3Bpbm5lZFJlZ3MpCisgICAgICAgICAgICAgICAgZm9yIChj
b25zdCBUbXAmIHBpbm5lZFJlZ1RtcCA6IG1fcGlubmVkUmVncykgeworICAgICAgICAgICAgICAg
ICAgICBkYXRhTG9nTG5JZih0cmFjZURlYnVnLCAiICAgIEFkZGluZyBkZWYtcGlubmVkIGVkZ2U6
ICIsIGFyZywgIiwgIiwgcGlubmVkUmVnVG1wKTsKICAgICAgICAgICAgICAgICAgICAgYWRkRWRn
ZShhcmcsIHBpbm5lZFJlZ1RtcCk7CisgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfSk7
CiAgICAgfQogCkBAIC0xNzU4LDcgKzE4NzIsNyBAQCBJR05PUkVfR0NDX1dBUk5JTkdTX0VORAog
ICAgIHsKICAgICAgICAgQVNTRVJUX1dJVEhfTUVTU0FHRShhLmlzR1AoKSA9PSBiLmlzR1AoKSwg
IkFuIGludGVyZmVyZW5jZSBiZXR3ZWVuIHJlZ2lzdGVycyBvZiBkaWZmZXJlbnQgdHlwZXMgZG9l
cyBub3QgbWFrZSBzZW5zZSwgaXQgY2FuIGxlYWQgdG8gbm9uLWNvbG9yYWJsZSBncmFwaHMuIik7
CiAKLSAgICAgICAgYWRkRWRnZShUbXBNYXBwZXI6OmFic29sdXRlSW5kZXgoYSksIFRtcE1hcHBl
cjo6YWJzb2x1dGVJbmRleChiKSk7CisgICAgICAgIGFkZEVkZ2UodG1wVG9JbmRleChhKSwgdG1w
VG9JbmRleChiKSk7CiAgICAgfQogCiAgICAgLy8gQ2FsbGluZyB0aGlzIHdpdGhvdXQgYSB0bXBX
aWR0aCB3aWxsIHBlcmZvcm0gYSBtb3JlIGNvbnNlcnZhdGl2ZSBjb2FsZXNjaW5nIGFuYWx5c2lz
IHRoYXQgYXNzdW1lcwpAQCAtMTgyMCw3ICsxOTM0LDcgQEAgSUdOT1JFX0dDQ19XQVJOSU5HU19F
TkQKIAogY2xhc3MgR3JhcGhDb2xvcmluZ1JlZ2lzdGVyQWxsb2NhdGlvbiB7CiBwdWJsaWM6Ci0g
ICAgR3JhcGhDb2xvcmluZ1JlZ2lzdGVyQWxsb2NhdGlvbihDb2RlJiBjb2RlLCBVc2VDb3VudHM8
VG1wPiYgdXNlQ291bnRzKQorICAgIEdyYXBoQ29sb3JpbmdSZWdpc3RlckFsbG9jYXRpb24oQ29k
ZSYgY29kZSwgVXNlQ291bnRzJiB1c2VDb3VudHMpCiAgICAgICAgIDogbV9jb2RlKGNvZGUpCiAg
ICAgICAgICwgbV91c2VDb3VudHModXNlQ291bnRzKQogICAgIHsKQEAgLTE4NDAsNyArMTk1NCw3
IEBAIHByaXZhdGU6CiAgICAgdGVtcGxhdGU8QmFuayBiYW5rPgogICAgIHZvaWQgYWxsb2NhdGVP
bkJhbmsoKQogICAgIHsKLSAgICAgICAgSGFzaFNldDx1bnNpZ25lZD4gdW5zcGlsbGFibGVUbXBz
ID0gY29tcHV0ZVVuc3BpbGxhYmxlVG1wczxiYW5rPigpOworICAgICAgICBCaXRWZWN0b3IgdW5z
cGlsbGFibGVUbXBzID0gY29tcHV0ZVVuc3BpbGxhYmxlVG1wczxiYW5rPigpOwogCiAgICAgICAg
IC8vIEZJWE1FOiBJZiBhIFRtcCBpcyB1c2VkIG9ubHkgZnJvbSBhIFNjcmF0Y2ggcm9sZSBhbmQg
dGhhdCBhcmd1bWVudCBpcyAhYWRtaXRzU3RhY2ssIHRoZW4KICAgICAgICAgLy8gd2Ugc2hvdWxk
IGFkZCB0aGUgVG1wIHRvIHVuc3BpbGxhYmxlVG1wcy4gVGhhdCB3aWxsIGhlbHAgYXZvaWQgcmVs
b29waW5nIG9ubHkgdG8gdHVybiB0aGUKQEAgLTE4NjQsMTAgKzE5NzgsOSBAQCBwcml2YXRlOgog
ICAgICAgICAgICAgLy8gY3JlYXRlZCBUbXBzIG1heSBnZXQgbmFycm93ZXIgdXNlL2RlZiB3aWR0
aHMuIE9uIHRoZSBvdGhlciBoYW5kLCB0aGUgc3BpbGxlciBhbHJlYWR5CiAgICAgICAgICAgICAv
LyBzZWxlY3RzIHdoaWNoIG1vdmUgaW5zdHJ1Y3Rpb24gdG8gdXNlIGJhc2VkIG9uIHRoZSBvcmln
aW5hbCBUbXAncyB3aWR0aHMsIHNvIGl0IG1heSBub3QKICAgICAgICAgICAgIC8vIG1hdHRlciB0
aGFuIGEgc3Vic2VxdWVudCBpdGVyYXRpb24gc2VlcyBhIGNvbnNlcnZhdGl2ZSB3aWR0aCBmb3Ig
dGhlIG5ldyBUbXBzLiBBbHNvLCB0aGUKLSAgICAgICAgICAgIC8vIHJlY29tcHV0YXRpb24gbWF5
IG5vdCBhY3R1YWxseSBiZSBhIHBlcmZvcm1hbmNlIHByb2JsZW07IGl0J3MgbGlrZWx5IHRoYXQg
YSBiZXR0ZXIgd2F5IHRvCi0gICAgICAgICAgICAvLyBpbXByb3ZlIHBlcmZvcm1hbmNlIG9mIFRt
cFdpZHRoIGlzIHRvIHJlcGxhY2UgaXRzIEhhc2hNYXAgd2l0aCBzb21ldGhpbmcgZWxzZS4gSXQn
cwotICAgICAgICAgICAgLy8gcG9zc2libGUgdGhhdCBtb3N0IG9mIHRoZSBUbXBXaWR0aCBvdmVy
aGVhZCBpcyBmcm9tIHF1ZXJpZXMgb2YgVG1wV2lkdGggcmF0aGVyIHRoYW4gdGhlCi0gICAgICAg
ICAgICAvLyByZWNvbXB1dGF0aW9uLCBpbiB3aGljaCBjYXNlIHNwZWVkaW5nIHVwIHRoZSBsb29r
dXAgd291bGQgYmUgYSBiaWdnZXIgd2luLgorICAgICAgICAgICAgLy8gcmVjb21wdXRhdGlvbiBt
YXkgbm90IGFjdHVhbGx5IGJlIGEgcGVyZm9ybWFuY2UgcHJvYmxlbTogd2Ugc3BlbmQgcm91Z2hs
eSAzIHRvIDQlIG9mIHRoZQorICAgICAgICAgICAgLy8gcmVnaXN0ZXIgYWxsb2NhdG9yIGluIG1f
dG1wV2lkdGgucmVjb21wdXRlLiBJbiBjb21wYXJpc29uIHdlIHNwZW5kIG1vcmUgdGhhbiA0MCUg
YnVpbGRpbmcKKyAgICAgICAgICAgIC8vIHRoZSBpbnRlcmZlcmVuY2UgZ3JhcGgKICAgICAgICAg
ICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTI0NzgKICAg
ICAgICAgICAgIG1fdG1wV2lkdGgucmVjb21wdXRlPGJhbms+KG1fY29kZSk7CiAKQEAgLTE4ODUs
MjAgKzE5OTgsMjYgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAg
ICAgICAgICAgICB9OwogCisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChtX2NvZGUubnVtVG1w
cyhiYW5rKSA8IHN0ZDo6bnVtZXJpY19saW1pdHM8dWludDE2X3Q+OjptYXgoKSk7CisgICAgICAg
ICAgICAvLyBUaGUgYml0IHZlY3RvciBhcHByb2FjaCB1c2VzIG4qbiBiaXRzLCBvciAya0IgZm9y
IG4gPSA0MDAuCisgICAgICAgICAgICBjb25zdGV4cHIgdW5zaWduZWQgbWF4U2l6ZUZvclNtYWxs
SW50ZXJmZXJlbmNlR3JhcGggPSA0MDA7CisgICAgICAgICAgICB1c2luZyBJbmRleFR5cGUgPSB1
aW50MTZfdDsKKyAgICAgICAgICAgIHVzaW5nIExhcmdlSW50ZXJmZXJlbmNlR3JhcGggPSBJbnRl
cmZlcmVuY2VWZWN0b3I8U21hbGxTZXQ8SW5kZXhUeXBlLCBJbnRIYXNoPEluZGV4VHlwZT4+LCBJ
bmRleFR5cGU+OworICAgICAgICAgICAgdXNpbmcgU21hbGxJbnRlcmZlcmVuY2VHcmFwaCA9IElu
dGVyZmVyZW5jZUJpdFZlY3RvcjxJbmRleFR5cGU+OwogICAgICAgICAgICAgaWYgKHVzZUlSQygp
KSB7Ci0gICAgICAgICAgICAgICAgaWYgKG1fY29kZS5udW1UbXBzKGJhbmspIDwgc3RkOjpudW1l
cmljX2xpbWl0czx1aW50MTZfdD46Om1heCgpKSB7Ci0gICAgICAgICAgICAgICAgICAgIENvbG9y
aW5nQWxsb2NhdG9yPGJhbmssIElSQywgSW50ZXJmZXJlbmNlRWRnZTx1aW50MTZfdCwgdWludDMy
X3Q+PiBhbGxvY2F0b3IobV9jb2RlLCBtX3RtcFdpZHRoLCBtX3VzZUNvdW50cywgdW5zcGlsbGFi
bGVUbXBzKTsKKyAgICAgICAgICAgICAgICBpZiAobV9jb2RlLm51bVRtcHMoYmFuaykgPCBtYXhT
aXplRm9yU21hbGxJbnRlcmZlcmVuY2VHcmFwaCkgeworICAgICAgICAgICAgICAgICAgICBDb2xv
cmluZ0FsbG9jYXRvcjxJbmRleFR5cGUsIGJhbmssIElSQywgU21hbGxJbnRlcmZlcmVuY2VHcmFw
aD4gYWxsb2NhdG9yKG1fY29kZSwgbV90bXBXaWR0aCwgbV91c2VDb3VudHMsIHVuc3BpbGxhYmxl
VG1wcyk7CiAgICAgICAgICAgICAgICAgICAgIGRvbmUgPSBkb0FsbG9jYXRpb24oYWxsb2NhdG9y
KTsKICAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICBDb2xvcmlu
Z0FsbG9jYXRvcjxiYW5rLCBJUkMsIEludGVyZmVyZW5jZUVkZ2U8dWludDMyX3QsIHVpbnQ2NF90
Pj4gYWxsb2NhdG9yKG1fY29kZSwgbV90bXBXaWR0aCwgbV91c2VDb3VudHMsIHVuc3BpbGxhYmxl
VG1wcyk7CisgICAgICAgICAgICAgICAgICAgIENvbG9yaW5nQWxsb2NhdG9yPEluZGV4VHlwZSwg
YmFuaywgSVJDLCBMYXJnZUludGVyZmVyZW5jZUdyYXBoPiBhbGxvY2F0b3IobV9jb2RlLCBtX3Rt
cFdpZHRoLCBtX3VzZUNvdW50cywgdW5zcGlsbGFibGVUbXBzKTsKICAgICAgICAgICAgICAgICAg
ICAgZG9uZSA9IGRvQWxsb2NhdGlvbihhbGxvY2F0b3IpOwogICAgICAgICAgICAgICAgIH0KICAg
ICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgaWYgKG1fY29kZS5udW1UbXBzKGJh
bmspIDwgc3RkOjpudW1lcmljX2xpbWl0czx1aW50MTZfdD46Om1heCgpKSB7Ci0gICAgICAgICAg
ICAgICAgICAgIENvbG9yaW5nQWxsb2NhdG9yPGJhbmssIEJyaWdncywgSW50ZXJmZXJlbmNlRWRn
ZTx1aW50MTZfdCwgdWludDMyX3Q+PiBhbGxvY2F0b3IobV9jb2RlLCBtX3RtcFdpZHRoLCBtX3Vz
ZUNvdW50cywgdW5zcGlsbGFibGVUbXBzKTsKKyAgICAgICAgICAgICAgICBpZiAobV9jb2RlLm51
bVRtcHMoYmFuaykgPCBtYXhTaXplRm9yU21hbGxJbnRlcmZlcmVuY2VHcmFwaCkgeworICAgICAg
ICAgICAgICAgICAgICBDb2xvcmluZ0FsbG9jYXRvcjxJbmRleFR5cGUsIGJhbmssIEJyaWdncywg
U21hbGxJbnRlcmZlcmVuY2VHcmFwaD4gYWxsb2NhdG9yKG1fY29kZSwgbV90bXBXaWR0aCwgbV91
c2VDb3VudHMsIHVuc3BpbGxhYmxlVG1wcyk7CiAgICAgICAgICAgICAgICAgICAgIGRvbmUgPSBk
b0FsbG9jYXRpb24oYWxsb2NhdG9yKTsKICAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAg
ICAgICAgICAgICAgICBDb2xvcmluZ0FsbG9jYXRvcjxiYW5rLCBCcmlnZ3MsIEludGVyZmVyZW5j
ZUVkZ2U8dWludDMyX3QsIHVpbnQ2NF90Pj4gYWxsb2NhdG9yKG1fY29kZSwgbV90bXBXaWR0aCwg
bV91c2VDb3VudHMsIHVuc3BpbGxhYmxlVG1wcyk7CisgICAgICAgICAgICAgICAgICAgIENvbG9y
aW5nQWxsb2NhdG9yPEluZGV4VHlwZSwgYmFuaywgQnJpZ2dzLCBMYXJnZUludGVyZmVyZW5jZUdy
YXBoPiBhbGxvY2F0b3IobV9jb2RlLCBtX3RtcFdpZHRoLCBtX3VzZUNvdW50cywgdW5zcGlsbGFi
bGVUbXBzKTsKICAgICAgICAgICAgICAgICAgICAgZG9uZSA9IGRvQWxsb2NhdGlvbihhbGxvY2F0
b3IpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KQEAgLTE5MDcsMTEgKzIwMjYs
OCBAQCBwcml2YXRlOgogICAgIH0KIAogICAgIHRlbXBsYXRlPEJhbmsgYmFuaz4KLSAgICBIYXNo
U2V0PHVuc2lnbmVkPiBjb21wdXRlVW5zcGlsbGFibGVUbXBzKCkKKyAgICBCaXRWZWN0b3IgY29t
cHV0ZVVuc3BpbGxhYmxlVG1wcygpCiAgICAgewotCi0gICAgICAgIEhhc2hTZXQ8dW5zaWduZWQ+
IHVuc3BpbGxhYmxlVG1wczsKLQogICAgICAgICBzdHJ1Y3QgUmFuZ2UgewogICAgICAgICAgICAg
dW5zaWduZWQgZmlyc3QgeyBzdGQ6Om51bWVyaWNfbGltaXRzPHVuc2lnbmVkPjo6bWF4KCkgfTsK
ICAgICAgICAgICAgIHVuc2lnbmVkIGxhc3QgeyAwIH07CkBAIC0xOTY0LDEyICsyMDgwLDIwIEBA
IHByaXZhdGU6CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICArK2dsb2JhbEluZGV4OwogICAg
ICAgICB9CisKKyAgICAgICAgQml0VmVjdG9yIHVuc3BpbGxhYmxlVG1wczsKKyAgICAgICAgdW5z
cGlsbGFibGVUbXBzLmVuc3VyZVNpemUoYXJyYXlTaXplKTsKICAgICAgICAgZm9yICh1bnNpZ25l
ZCBpID0gQWJzb2x1dGVUbXBNYXBwZXI8YmFuaz46Omxhc3RNYWNoaW5lUmVnaXN0ZXJJbmRleCgp
ICsgMTsgaSA8IHJhbmdlcy5zaXplKCk7ICsraSkgewogICAgICAgICAgICAgUmFuZ2UmIHJhbmdl
ID0gcmFuZ2VzW2ldOwogICAgICAgICAgICAgaWYgKHJhbmdlLmxhc3QgLSByYW5nZS5maXJzdCA8
PSAxICYmIHJhbmdlLmNvdW50ID4gcmFuZ2UuYWRtaXRTdGFja0NvdW50KQotICAgICAgICAgICAg
ICAgIHVuc3BpbGxhYmxlVG1wcy5hZGQoaSk7CisgICAgICAgICAgICAgICAgdW5zcGlsbGFibGVU
bXBzLnF1aWNrU2V0KGkpOwogICAgICAgICB9CiAKKyAgICAgICAgbV9jb2RlLmZvckVhY2hGYXN0
VG1wKFsmXShUbXAgdG1wKSB7CisgICAgICAgICAgICBpZiAodG1wLmJhbmsoKSA9PSBiYW5rKQor
ICAgICAgICAgICAgICAgIHVuc3BpbGxhYmxlVG1wcy5xdWlja1NldChBYnNvbHV0ZVRtcE1hcHBl
cjxiYW5rPjo6YWJzb2x1dGVJbmRleCh0bXApKTsKKyAgICAgICAgfSk7CisKICAgICAgICAgcmV0
dXJuIHVuc3BpbGxhYmxlVG1wczsKICAgICB9CiAKQEAgLTIwMzEsMTIgKzIxNTUsMTIgQEAgcHJp
dmF0ZToKICAgICB9CiAKICAgICB0ZW1wbGF0ZTxCYW5rIGJhbmssIHR5cGVuYW1lIEFsbG9jYXRv
clR5cGU+Ci0gICAgdm9pZCBhZGRTcGlsbEFuZEZpbGwoY29uc3QgQWxsb2NhdG9yVHlwZSYgYWxs
b2NhdG9yLCBIYXNoU2V0PHVuc2lnbmVkPiYgdW5zcGlsbGFibGVUbXBzKQorICAgIHZvaWQgYWRk
U3BpbGxBbmRGaWxsKGNvbnN0IEFsbG9jYXRvclR5cGUmIGFsbG9jYXRvciwgQml0VmVjdG9yJiB1
bnNwaWxsYWJsZVRtcHMpCiAgICAgewogICAgICAgICBIYXNoTWFwPFRtcCwgU3RhY2tTbG90Kj4g
c3RhY2tTbG90czsKICAgICAgICAgZm9yIChUbXAgdG1wIDogYWxsb2NhdG9yLnNwaWxsZWRUbXBz
KCkpIHsKICAgICAgICAgICAgIC8vIEFsbCB0aGUgc3BpbGxlZCB2YWx1ZXMgYmVjb21lIHVuc3Bp
bGxhYmxlLgotICAgICAgICAgICAgdW5zcGlsbGFibGVUbXBzLmFkZChBYnNvbHV0ZVRtcE1hcHBl
cjxiYW5rPjo6YWJzb2x1dGVJbmRleCh0bXApKTsKKyAgICAgICAgICAgIHVuc3BpbGxhYmxlVG1w
cy5zZXQoQWJzb2x1dGVUbXBNYXBwZXI8YmFuaz46OmFic29sdXRlSW5kZXgodG1wKSk7CiAKICAg
ICAgICAgICAgIC8vIEFsbG9jYXRlIHN0YWNrIHNsb3QgZm9yIGVhY2ggc3BpbGxlZCB2YWx1ZS4K
ICAgICAgICAgICAgIFN0YWNrU2xvdCogc3RhY2tTbG90ID0gbV9jb2RlLmFkZFN0YWNrU2xvdCgK
QEAgLTIxMDksMTEgKzIyMzMsOCBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgICAgICAgICAg
Ly8gdmFsdWUgcmF0aGVyIHRoYW4gbG9hZGluZyBpdCBmcm9tIHRoZSBzdGFjay4gSW4gb3JkZXIg
Zm9yIHRoYXQKICAgICAgICAgICAgICAgICAgICAgICAgIC8vIG9wdGltaXphdGlvbiB0byBraWNr
IGluLCB3ZSBuZWVkIHRvIGF2b2lkIHBsYWNpbmcgdGhlIFRtcCdzIHN0YWNrCiAgICAgICAgICAg
ICAgICAgICAgICAgICAvLyBhZGRyZXNzIGludG8gdGhlIGluc3RydWN0aW9uLgotICAgICAgICAg
ICAgICAgICAgICAgICAgaWYgKCFBcmc6OmlzQ29sZFVzZShyb2xlKSkgewotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGNvbnN0IFVzZUNvdW50czxUbXA+OjpDb3VudHMqIGNvdW50cyA9IG1f
dXNlQ291bnRzW2FyZy50bXAoKV07Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNv
dW50cyAmJiBjb3VudHMtPm51bUNvbnN0RGVmcyA9PSAxICYmIGNvdW50cy0+bnVtRGVmcyA9PSAx
KQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIUFyZzo6aXNDb2xkVXNl
KHJvbGUpICYmIG1fdXNlQ291bnRzLmlzQ29uc3REZWY8YmFuaz4oQWJzb2x1dGVUbXBNYXBwZXI8
YmFuaz46OmFic29sdXRlSW5kZXgoYXJnLnRtcCgpKSkpCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuOwogICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAg
ICAgICAgICBXaWR0aCBzcGlsbFdpZHRoID0gbV90bXBXaWR0aC5yZXF1aXJlZFdpZHRoKGFyZy50
bXAoKSk7CiAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoQXJnOjppc0FueURlZihyb2xlKSAm
JiB3aWR0aCA8IHNwaWxsV2lkdGgpIHsKQEAgLTIxNjYsNyArMjI4Nyw3IEBAIHByaXZhdGU6CiAg
ICAgICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKGluc3RCYW5rID09IGJhbmspOwogICAg
ICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgVG1wIHRtcCA9IG1fY29kZS5u
ZXdUbXAoYmFuayk7Ci0gICAgICAgICAgICAgICAgICAgIHVuc3BpbGxhYmxlVG1wcy5hZGQoQWJz
b2x1dGVUbXBNYXBwZXI8YmFuaz46OmFic29sdXRlSW5kZXgodG1wKSk7CisgICAgICAgICAgICAg
ICAgICAgIHVuc3BpbGxhYmxlVG1wcy5zZXQoQWJzb2x1dGVUbXBNYXBwZXI8YmFuaz46OmFic29s
dXRlSW5kZXgodG1wKSk7CiAgICAgICAgICAgICAgICAgICAgIGluc3QuYXJncy5hcHBlbmQodG1w
KTsKICAgICAgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoaW5zdC5hcmdzLnNpemUoKSA9
PSAzKTsKICAgICAgICAgICAgICAgICAgICAgCkBAIC0yMjExLDcgKzIzMzIsNyBAQCBwcml2YXRl
OgogICAgICAgICAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgICAgICAgICAgdG1wID0gbV9j
b2RlLm5ld1RtcChiYW5rKTsKLSAgICAgICAgICAgICAgICAgICAgdW5zcGlsbGFibGVUbXBzLmFk
ZChBYnNvbHV0ZVRtcE1hcHBlcjxiYW5rPjo6YWJzb2x1dGVJbmRleCh0bXApKTsKKyAgICAgICAg
ICAgICAgICAgICAgdW5zcGlsbGFibGVUbXBzLnNldChBYnNvbHV0ZVRtcE1hcHBlcjxiYW5rPjo6
YWJzb2x1dGVJbmRleCh0bXApKTsKICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAg
ICAgICAgIGlmIChyb2xlID09IEFyZzo6U2NyYXRjaCkKICAgICAgICAgICAgICAgICAgICAgICAg
IHJldHVybjsKQEAgLTIyMzUsNyArMjM1Niw3IEBAIHByaXZhdGU6CiAKICAgICBDb2RlJiBtX2Nv
ZGU7CiAgICAgVG1wV2lkdGggbV90bXBXaWR0aDsKLSAgICBVc2VDb3VudHM8VG1wPiYgbV91c2VD
b3VudHM7CisgICAgVXNlQ291bnRzJiBtX3VzZUNvdW50czsKIH07CiAKIH0gLy8gYW5vbnltb3Vz
IG5hbWVzcGFjZQpAQCAtMjI0Nyw3ICsyMzY4LDcgQEAgdm9pZCBhbGxvY2F0ZVJlZ2lzdGVyc0J5
R3JhcGhDb2xvcmluZyhDb2RlJiBjb2RlKQogICAgIGlmICh0cmFjZURlYnVnKQogICAgICAgICBk
YXRhTG9nKCJDb2RlIGJlZm9yZSBncmFwaCBjb2xvcmluZzpcbiIsIGNvZGUpOwogCi0gICAgVXNl
Q291bnRzPFRtcD4gdXNlQ291bnRzKGNvZGUpOworICAgIFVzZUNvdW50cyB1c2VDb3VudHMoY29k
ZSk7CiAgICAgR3JhcGhDb2xvcmluZ1JlZ2lzdGVyQWxsb2NhdGlvbiBncmFwaENvbG9yaW5nUmVn
aXN0ZXJBbGxvY2F0aW9uKGNvZGUsIHVzZUNvdW50cyk7CiAgICAgZ3JhcGhDb2xvcmluZ1JlZ2lz
dGVyQWxsb2NhdGlvbi5ydW4oKTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy9haXIvQWlyQ29kZS5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJDb2Rl
LmgKaW5kZXggYzBiZDM1MjBkMGQzLi5kOGVlNDEyN2I1NzMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQ29kZS5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy9haXIvQWlyQ29kZS5oCkBAIC00MCw2ICs0MCw3IEBACiAjaW5jbHVkZSAiU3RhY2tBbGln
bm1lbnQuaCIKICNpbmNsdWRlIDx3dGYvSGFzaFNldC5oPgogI2luY2x1ZGUgPHd0Zi9JbmRleE1h
cC5oPgorI2luY2x1ZGUgPHd0Zi9TbWFsbFNldC5oPgogI2luY2x1ZGUgPHd0Zi9XZWFrUmFuZG9t
Lmg+CiAKIG5hbWVzcGFjZSBKU0MgewpAQCAtMzExLDcgKzMxMiwxMyBAQCBwdWJsaWM6CiAgICAg
fQogCiAgICAgdm9pZCBhZGRGYXN0VG1wKFRtcCk7Ci0gICAgYm9vbCBpc0Zhc3RUbXAoVG1wIHRt
cCkgY29uc3QgeyByZXR1cm4gbV9mYXN0VG1wcy5jb250YWlucyh0bXApOyB9CisKKyAgICB0ZW1w
bGF0ZTx0eXBlbmFtZSBGdW5jdG9yPgorICAgIHZvaWQgZm9yRWFjaEZhc3RUbXAoY29uc3QgRnVu
Y3RvciYgZnVuY3RvcikgY29uc3QKKyAgICB7CisgICAgICAgIGZvciAoVG1wIHRtcCA6IG1fZmFz
dFRtcHMpCisgICAgICAgICAgICBmdW5jdG9yKHRtcCk7CisgICAgfQogICAgIAogICAgIENGRyYg
Y2ZnKCkgY29uc3QgeyByZXR1cm4gKm1fY2ZnOyB9CiAgICAgCkBAIC0zNzksNyArMzg2LDcgQEAg
cHJpdmF0ZToKICAgICBWZWN0b3I8c3RkOjp1bmlxdWVfcHRyPEJhc2ljQmxvY2s+PiBtX2Jsb2Nr
czsKICAgICBTcGFyc2VDb2xsZWN0aW9uPFNwZWNpYWw+IG1fc3BlY2lhbHM7CiAgICAgc3RkOjp1
bmlxdWVfcHRyPENGRz4gbV9jZmc7Ci0gICAgSGFzaFNldDxUbXA+IG1fZmFzdFRtcHM7CisgICAg
U21hbGxTZXQ8VG1wLCBUbXBIYXNoLCAyPiBtX2Zhc3RUbXBzOwogICAgIENDYWxsU3BlY2lhbCog
bV9jQ2FsbFNwZWNpYWwgeyBudWxscHRyIH07CiAgICAgdW5zaWduZWQgbV9udW1HUFRtcHMgeyAw
IH07CiAgICAgdW5zaWduZWQgbV9udW1GUFRtcHMgeyAwIH07CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpclVzZUNvdW50cy5oIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2IzL2Fpci9BaXJVc2VDb3VudHMuaAppbmRleCA5MGEyNjhjZDU1MjkuLmUwNjYxNWM5ZTNk
MyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJVc2VDb3VudHMu
aAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpclVzZUNvdW50cy5oCkBAIC0x
LDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNS0yMDE3IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNS0yMDIxIEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAt
MzEsMzQgKzMxLDE4IEBACiAjaW5jbHVkZSAiQWlyQmxvY2tXb3JrbGlzdC5oIgogI2luY2x1ZGUg
IkFpckNvZGUuaCIKICNpbmNsdWRlICJBaXJJbnN0SW5saW5lcy5oIgotI2luY2x1ZGUgPHd0Zi9I
YXNoTWFwLmg+Ci0jaW5jbHVkZSA8d3RmL0xpc3REdW1wLmg+CisjaW5jbHVkZSAiQWlyVG1wSW5s
aW5lcy5oIgorI2luY2x1ZGUgPHd0Zi9Db21tYVByaW50ZXIuaD4KKyNpbmNsdWRlIDx3dGYvVmVj
dG9yLmg+CiAKIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeyBuYW1lc3BhY2UgQWlyIHsK
IAogY2xhc3MgQ29kZTsKIAotLy8gQ29tcHV0ZXMgdGhlIG51bWJlciBvZiB1c2VzIG9mIGEgdmFy
aWFibGUgYmFzZWQgb24gZnJlcXVlbmN5IG9mIGV4ZWN1dGlvbi4gVGhlIGZyZXF1ZW5jeSBvZiBi
bG9ja3MKKy8vIENvbXB1dGVzIHRoZSBudW1iZXIgb2YgdXNlcyBvZiBhIHRtcCBiYXNlZCBvbiBm
cmVxdWVuY3kgb2YgZXhlY3V0aW9uLiBUaGUgZnJlcXVlbmN5IG9mIGJsb2NrcwogLy8gdGhhdCBh
cmUgb25seSByZWFjaGFibGUgYnkgcmFyZSBlZGdlcyBpcyBzY2FsZWQgYnkgT3B0aW9uczo6cmFy
ZUJsb2NrUGVuYWx0eSgpLgotCi0vLyBUaGluZyBjYW4gYmUgZWl0aGVyIFRtcCBvciBBcmcuCi10
ZW1wbGF0ZTx0eXBlbmFtZSBUaGluZz4KIGNsYXNzIFVzZUNvdW50cyB7CiBwdWJsaWM6Ci0gICAg
c3RydWN0IENvdW50cyB7Ci0gICAgICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25z
dAotICAgICAgICB7Ci0gICAgICAgICAgICBvdXQucHJpbnQoCi0gICAgICAgICAgICAgICAgIntu
dW1XYXJtVXNlcyA9ICIsIG51bVdhcm1Vc2VzLCAiLCBudW1Db2xkVXNlcyA9ICIsIG51bUNvbGRV
c2VzLCAiLCBudW1EZWZzID0gIiwKLSAgICAgICAgICAgICAgICBudW1EZWZzLCAifSIpOwotICAg
ICAgICB9Ci0gICAgICAgIAotICAgICAgICBkb3VibGUgbnVtV2FybVVzZXMgeyAwIH07Ci0gICAg
ICAgIGRvdWJsZSBudW1Db2xkVXNlcyB7IDAgfTsKLSAgICAgICAgZG91YmxlIG51bURlZnMgeyAw
IH07Ci0gICAgICAgIGRvdWJsZSBudW1Db25zdERlZnMgeyAwIH07Ci0gICAgfTsKLSAgICAKICAg
ICBVc2VDb3VudHMoQ29kZSYgY29kZSkKICAgICB7CiAgICAgICAgIC8vIEZpbmQgbm9uLXJhcmUg
YmxvY2tzLgpAQCAtNzAsNDcgKzU0LDczIEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICAgICAg
ZmFzdFdvcmtsaXN0LnB1c2goc3VjY2Vzc29yLmJsb2NrKCkpOwogICAgICAgICAgICAgfQogICAg
ICAgICB9Ci0gICAgICAgIAorCisgICAgICAgIHVuc2lnbmVkIGdwQXJyYXlTaXplID0gQWJzb2x1
dGVUbXBNYXBwZXI8R1A+OjphYnNvbHV0ZUluZGV4KGNvZGUubnVtVG1wcyhHUCkpOworICAgICAg
ICBtX2dwTnVtV2FybVVzZXNBbmREZWZzLnJlc2l6ZShncEFycmF5U2l6ZSk7CisgICAgICAgIG1f
Z3BDb25zdERlZnMuZW5zdXJlU2l6ZShncEFycmF5U2l6ZSk7CisgICAgICAgIHVuc2lnbmVkIGZw
QXJyYXlTaXplID0gQWJzb2x1dGVUbXBNYXBwZXI8RlA+OjphYnNvbHV0ZUluZGV4KGNvZGUubnVt
VG1wcyhGUCkpOworICAgICAgICBtX2ZwTnVtV2FybVVzZXNBbmREZWZzLnJlc2l6ZShmcEFycmF5
U2l6ZSk7CisgICAgICAgIG1fZnBDb25zdERlZnMuZW5zdXJlU2l6ZShncEFycmF5U2l6ZSk7CisK
ICAgICAgICAgZm9yIChCYXNpY0Jsb2NrKiBibG9jayA6IGNvZGUpIHsKICAgICAgICAgICAgIGRv
dWJsZSBmcmVxdWVuY3kgPSBibG9jay0+ZnJlcXVlbmN5KCk7CiAgICAgICAgICAgICBpZiAoIWZh
c3RXb3JrbGlzdC5zYXcoYmxvY2spKQogICAgICAgICAgICAgICAgIGZyZXF1ZW5jeSAqPSBPcHRp
b25zOjpyYXJlQmxvY2tQZW5hbHR5KCk7CiAgICAgICAgICAgICBmb3IgKEluc3QmIGluc3QgOiAq
YmxvY2spIHsKLSAgICAgICAgICAgICAgICBpbnN0LmZvckVhY2g8VGhpbmc+KAotICAgICAgICAg
ICAgICAgICAgICBbJl0gKFRoaW5nJiBhcmcsIEFyZzo6Um9sZSByb2xlLCBCYW5rLCBXaWR0aCkg
ewotICAgICAgICAgICAgICAgICAgICAgICAgQ291bnRzJiBjb3VudHMgPSBtX2NvdW50cy5hZGQo
YXJnLCBDb3VudHMoKSkuaXRlcmF0b3ItPnZhbHVlOwotCi0gICAgICAgICAgICAgICAgICAgICAg
ICBpZiAoQXJnOjppc1dhcm1Vc2Uocm9sZSkpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
Y291bnRzLm51bVdhcm1Vc2VzICs9IGZyZXF1ZW5jeTsKLSAgICAgICAgICAgICAgICAgICAgICAg
IGlmIChBcmc6OmlzQ29sZFVzZShyb2xlKSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBj
b3VudHMubnVtQ29sZFVzZXMgKz0gZnJlcXVlbmN5OwotICAgICAgICAgICAgICAgICAgICAgICAg
aWYgKEFyZzo6aXNBbnlEZWYocm9sZSkpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgY291
bnRzLm51bURlZnMgKz0gZnJlcXVlbmN5OworICAgICAgICAgICAgICAgIGluc3QuZm9yRWFjaDxU
bXA+KAorICAgICAgICAgICAgICAgICAgICBbJl0gKFRtcCYgdG1wLCBBcmc6OlJvbGUgcm9sZSwg
QmFuayBiYW5rLCBXaWR0aCkgeworCisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoQXJnOjpp
c1dhcm1Vc2Uocm9sZSkgfHwgQXJnOjppc0FueURlZihyb2xlKSkgeworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGlmIChiYW5rID09IEdQKQorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBtX2dwTnVtV2FybVVzZXNBbmREZWZzW0Fic29sdXRlVG1wTWFwcGVyPEdQPjo6YWJzb2x1
dGVJbmRleCh0bXApXSArPSBmcmVxdWVuY3k7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX2ZwTnVtV2FybVVzZXNBbmRE
ZWZzW0Fic29sdXRlVG1wTWFwcGVyPEZQPjo6YWJzb2x1dGVJbmRleCh0bXApXSArPSBmcmVxdWVu
Y3k7CisgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIH0pOwog
CiAgICAgICAgICAgICAgICAgaWYgKChpbnN0LmtpbmQub3Bjb2RlID09IE1vdmUgfHwgaW5zdC5r
aW5kLm9wY29kZSA9PSBNb3ZlMzIpCiAgICAgICAgICAgICAgICAgICAgICYmIGluc3QuYXJnc1sw
XS5pc1NvbWVJbW0oKQotICAgICAgICAgICAgICAgICAgICAmJiBpbnN0LmFyZ3NbMV0uaXM8VGhp
bmc+KCkpCi0gICAgICAgICAgICAgICAgICAgIG1fY291bnRzLmFkZChpbnN0LmFyZ3NbMV0uYXM8
VGhpbmc+KCksIENvdW50cygpKS5pdGVyYXRvci0+dmFsdWUubnVtQ29uc3REZWZzKys7CisgICAg
ICAgICAgICAgICAgICAgICYmIGluc3QuYXJnc1sxXS5pczxUbXA+KCkpIHsKKyAgICAgICAgICAg
ICAgICAgICAgVG1wIHRtcCA9IGluc3QuYXJnc1sxXS5hczxUbXA+KCk7CisgICAgICAgICAgICAg
ICAgICAgIGlmICh0bXAuYmFuaygpID09IEdQKQorICAgICAgICAgICAgICAgICAgICAgICAgbV9n
cENvbnN0RGVmcy5xdWlja1NldChBYnNvbHV0ZVRtcE1hcHBlcjxHUD46OmFic29sdXRlSW5kZXgo
dG1wKSk7CisgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAg
IG1fZnBDb25zdERlZnMucXVpY2tTZXQoQWJzb2x1dGVUbXBNYXBwZXI8RlA+OjphYnNvbHV0ZUlu
ZGV4KHRtcCkpOworICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KICAgICAgICAgfQog
ICAgIH0KIAotICAgIGNvbnN0IENvdW50cyogb3BlcmF0b3JbXShjb25zdCBUaGluZyYgYXJnKSBj
b25zdAorICAgIHRlbXBsYXRlPEJhbmsgYmFuaz4KKyAgICBib29sIGlzQ29uc3REZWYodW5zaWdu
ZWQgYWJzb2x1dGVJbmRleCkgY29uc3QKKyAgICB7CisgICAgICAgIGlmIChiYW5rID09IEdQKQor
ICAgICAgICAgICAgcmV0dXJuIG1fZ3BDb25zdERlZnMucXVpY2tHZXQoYWJzb2x1dGVJbmRleCk7
CisgICAgICAgIHJldHVybiBtX2ZwQ29uc3REZWZzLnF1aWNrR2V0KGFic29sdXRlSW5kZXgpOwor
ICAgIH0KKworICAgIHRlbXBsYXRlPEJhbmsgYmFuaz4KKyAgICBmbG9hdCBudW1XYXJtVXNlc0Fu
ZERlZnModW5zaWduZWQgYWJzb2x1dGVJbmRleCkgY29uc3QKICAgICB7Ci0gICAgICAgIGF1dG8g
aXRlciA9IG1fY291bnRzLmZpbmQoYXJnKTsKLSAgICAgICAgaWYgKGl0ZXIgPT0gbV9jb3VudHMu
ZW5kKCkpCi0gICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICAgICAgcmV0dXJuICZpdGVy
LT52YWx1ZTsKKyAgICAgICAgaWYgKGJhbmsgPT0gR1ApCisgICAgICAgICAgICByZXR1cm4gbV9n
cE51bVdhcm1Vc2VzQW5kRGVmc1thYnNvbHV0ZUluZGV4XTsKKyAgICAgICAgcmV0dXJuIG1fZnBO
dW1XYXJtVXNlc0FuZERlZnNbYWJzb2x1dGVJbmRleF07CiAgICAgfQogCiAgICAgdm9pZCBkdW1w
KFByaW50U3RyZWFtJiBvdXQpIGNvbnN0CiAgICAgewotICAgICAgICBvdXQucHJpbnQobWFwRHVt
cChtX2NvdW50cykpOworICAgICAgICBDb21tYVByaW50ZXIgY29tbWEoIiwgIik7CisgICAgICAg
IGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX2dwTnVtV2FybVVzZXNBbmREZWZzLnNpemUoKTsg
KytpKQorICAgICAgICAgICAgb3V0LnByaW50KGNvbW1hLCBBYnNvbHV0ZVRtcE1hcHBlcjxHUD46
OnRtcEZyb21BYnNvbHV0ZUluZGV4KGkpLCAiPT4ge251bVdhcm1Vc2VzQW5kRGVmcz0iLCBtX2dw
TnVtV2FybVVzZXNBbmREZWZzW2ldLCAiLCBpc0NvbnN0RGVmPSIsIG1fZ3BDb25zdERlZnMucXVp
Y2tHZXQoaSksICJ9Iik7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX2ZwTnVt
V2FybVVzZXNBbmREZWZzLnNpemUoKTsgKytpKQorICAgICAgICAgICAgb3V0LnByaW50KGNvbW1h
LCBBYnNvbHV0ZVRtcE1hcHBlcjxGUD46OnRtcEZyb21BYnNvbHV0ZUluZGV4KGkpLCAiPT4ge251
bVdhcm1Vc2VzQW5kRGVmcz0iLCBtX2ZwTnVtV2FybVVzZXNBbmREZWZzW2ldLCAiLCBpc0NvbnN0
RGVmPSIsIG1fZnBDb25zdERlZnMucXVpY2tHZXQoaSksICJ9Iik7CiAgICAgfQogCiBwcml2YXRl
OgotICAgIEhhc2hNYXA8VGhpbmcsIENvdW50cz4gbV9jb3VudHM7CisgICAgVmVjdG9yPGZsb2F0
PiBtX2dwTnVtV2FybVVzZXNBbmREZWZzOworICAgIFZlY3RvcjxmbG9hdD4gbV9mcE51bVdhcm1V
c2VzQW5kRGVmczsKKyAgICBCaXRWZWN0b3IgbV9ncENvbnN0RGVmczsKKyAgICBCaXRWZWN0b3Ig
bV9mcENvbnN0RGVmczsKIH07CiAKIH0gfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzOjpBaXIKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvTm9kZXMuaCBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9wYXJzZXIvTm9kZXMuaAppbmRleCBlZDE3M2MxN2E1YmIuLjU2MTI5OWE2
YTcwZiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9Ob2Rlcy5oCisr
KyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvTm9kZXMuaApAQCAtMzYsNyArMzYsNyBA
QAogI2luY2x1ZGUgIlN5bWJvbFRhYmxlLmgiCiAjaW5jbHVkZSAiVmFyaWFibGVFbnZpcm9ubWVu
dC5oIgogI2luY2x1ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+Ci0jaW5jbHVkZSA8d3RmL1NtYWxsUHRy
U2V0Lmg+CisjaW5jbHVkZSA8d3RmL1NtYWxsU2V0Lmg+CiAKIG5hbWVzcGFjZSBKU0MgewogCkBA
IC01Myw3ICs1Myw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgIGNsYXNzIFJlZ2lzdGVySUQ7CiAg
ICAgY2xhc3MgU2NvcGVOb2RlOwogCi0gICAgdHlwZWRlZiBTbWFsbFB0clNldDxVbmlxdWVkU3Ry
aW5nSW1wbCo+IFVuaXF1ZWRTdHJpbmdJbXBsUHRyU2V0OworICAgIHR5cGVkZWYgU21hbGxTZXQ8
VW5pcXVlZFN0cmluZ0ltcGwqPiBVbmlxdWVkU3RyaW5nSW1wbFB0clNldDsKIAogICAgIGVudW0g
Y2xhc3MgT3BlcmF0b3IgOiB1aW50OF90IHsKICAgICAgICAgRXF1YWwsCmRpZmYgLS1naXQgYS9T
b3VyY2UvV1RGL0NoYW5nZUxvZyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCmluZGV4IGI5Mzk5ZmU3
NDIxZC4uNWFjNTkwMWY4MzlkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL0NoYW5nZUxvZworKysg
Yi9Tb3VyY2UvV1RGL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI0IEBACisyMDIxLTA1LTE3ICBSb2Jp
biBNb3Jpc3NldCAgPHJtb3Jpc3NldEBhcHBsZS5jb20+CisKKyAgICAgICAgTWFrZSBBaXJBbGxv
Y2F0ZVJlZ2lzdGVyc0J5R3JhcGhDb2xvcmluZyB1c2UgbGVzcyBtZW1vcnkKKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIyNTg0OAorCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWShPT1BTKS4KKworICAgICAgICBJIHJlbmFtZWQgU21hbGxQdHJTZXQg
aW50byBTbWFsbFNldCwgYXMgaXQgbm93IHN1cHBvcnRzIGludGVnZXJzIGFzIHdlbGwgYXMgcG9p
bnRlcnMuCisKKyAgICAgICAgSSB0aGVuIHJlZHVjZWQgaXRzIHNpemUgYnkgc2hhcmluZyB0aGUg
c2FtZSBzdG9yYWdlIGZvciBtX2J1ZmZlciBhbmQgZm9yIG1fc21hbGxTdG9yYWdlLgorICAgICAg
ICBUaGlzIGlzIHNhZmUgdG8gZG8sIGJlY2F1c2UgYWxsIG9wZXJhdGlvbnMgYnJhbmNoIG9uIGlz
U21hbGwoKSB3aGljaCBkZXBlbmRzIHB1cmVseSBvbiBtX2NhcGFjaXR5LgorCisgICAgICAgIEkg
YWxzbyBhZGRlZCB0cml2aWFsIHNpemUoKSBhbmQgaXNFbXB0eSgpIG1ldGhvZHMsIHRvIG1ha2Ug
ZGVidWdnaW5nIGVhc2llci4KKworICAgICAgICBGaW5hbGx5IEkgYWRkZWQgYSBjb21tZW50IGF0
IHRoZSB0b3Agb2YgdGhlIGZpbGUgZXhwbGFpbmluZyB3aGVuIHRvIHVzZSwgYW5kIChtb3JlIGlt
cG9ydGFudGx5KSBub3QgdG8gdXNlIFNtYWxsU2V0LgorCisgICAgICAgICogV1RGLnhjb2RlcHJv
ai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogd3RmL0NNYWtlTGlzdHMudHh0OgorICAgICAg
ICAqIHd0Zi9TbWFsbFNldC5jcHA6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV1RGL3d0Zi9TbWFsbFB0
clNldC5jcHAuCisgICAgICAgICogd3RmL1NtYWxsU2V0Lmg6IFJlbmFtZWQgZnJvbSBTb3VyY2Uv
V1RGL3d0Zi9TbWFsbFB0clNldC5oLgorCiAyMDIxLTA1LTE2ICBDaHJpcyBEdW1leiAgPGNkdW1l
ekBhcHBsZS5jb20+CiAKICAgICAgICAgTW9kZXJuaXplIC8gT3B0aW1pemUgU1FMaXRlU3RhdGVt
ZW50IGNyZWF0aW9uIGFuZCBwcmVwYXJhdGlvbgpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi9XVEYu
eGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1NvdXJjZS9XVEYvV1RGLnhjb2RlcHJvai9wcm9q
ZWN0LnBieHByb2oKaW5kZXggYjExZTA5OGNlNDc3Li5hZmY1MzIxYjQ3ZjMgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XVEYvV1RGLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvU291cmNlL1dU
Ri9XVEYueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAtNDIsNyArNDIsNyBAQAogCQkwRjlE
MzM2MDE2NURCQTczMDA1QUQzODcgLyogRmlsZVByaW50U3RyZWFtLmNwcCBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGOUQzMzVCMTY1REJBNzMwMDVBRDM4
NyAvKiBGaWxlUHJpbnRTdHJlYW0uY3BwICovOyB9OwogCQkwRjlEMzM2MjE2NURCQTczMDA1QUQz
ODcgLyogUHJpbnRTdHJlYW0uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMEY5RDMzNUQxNjVEQkE3MzAwNUFEMzg3IC8qIFByaW50U3RyZWFtLmNwcCAq
LzsgfTsKIAkJMEZBNkYzOEYyMENDNTgwRjAwQTAzRENEIC8qIFNlZ21lbnRlZFZlY3Rvci5jcHAg
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkE2RjM4RTIw
Q0M1ODBFMDBBMDNEQ0QgLyogU2VnbWVudGVkVmVjdG9yLmNwcCAqLzsgfTsKLQkJMEZBNkYzOTMy
MENDNzNBMzAwQTAzRENEIC8qIFNtYWxsUHRyU2V0LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGQTZGMzkyMjBDQzczQTIwMEEwM0RDRCAvKiBTbWFs
bFB0clNldC5jcHAgKi87IH07CisJCTBGQTZGMzkzMjBDQzczQTMwMEEwM0RDRCAvKiBTbWFsbFNl
dC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkE2
RjM5MjIwQ0M3M0EyMDBBMDNEQ0QgLyogU21hbGxTZXQuY3BwICovOyB9OwogCQkwRkE2RjM5NTIw
Q0NBQ0U5MDBBMDNEQ0QgLyogVW5pcXVlQXJyYXkuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZBNkYzOTQyMENDQUNFOTAwQTAzRENEIC8qIFVuaXF1
ZUFycmF5LmNwcCAqLzsgfTsKIAkJMEZEREJGQTcxNjY2REZBMzAwQzU1RkVGIC8qIFN0cmluZ1By
aW50U3RyZWFtLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDBGRERCRkE1MTY2NkRGQTMwMEM1NUZFRiAvKiBTdHJpbmdQcmludFN0cmVhbS5jcHAgKi87
IH07CiAJCTBGRTE2NDZBMUI2RkZDOTYwMDQwMEU3QyAvKiBMb2NrLmNwcCBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRTE2NDY4MUI2RkZDOTYwMDQwMEU3
QyAvKiBMb2NrLmNwcCAqLzsgfTsKQEAgLTI3Miw3ICsyNzIsNyBAQAogCQkwRjlEQUEwNTFGRDFD
MzdCMDA3OUM1QjIgLyogU3RhY2tTaG90UHJvZmlsZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gU3RhY2tTaG90UHJvZmlsZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJMEZBNkYzOEUyMENDNTgwRTAwQTAzRENEIC8qIFNlZ21lbnRlZFZlY3Rvci5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTZWdtZW50ZWRWZWN0b3IuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRkE2RjM5MDIwQ0M2MUVCMDBBMDNEQ0QgLyog
UmVmQ291bnRlZEFycmF5LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9
IFJlZkNvdW50ZWRBcnJheS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTBGQTZG
MzkyMjBDQzczQTIwMEEwM0RDRCAvKiBTbWFsbFB0clNldC5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IHBhdGggPSBTbWFsbFB0clNldC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCTBGQTZGMzkyMjBDQzczQTIwMEEwM0RDRCAvKiBTbWFsbFNldC5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTbWFsbFNldC5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTBGQTZGMzk0MjBDQ0FDRTkwMEEwM0RDRCAvKiBVbmlxdWVBcnJh
eS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBVbmlxdWVBcnJheS5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGQjE0RTE4MTgwRkEyMTgwMDlCNkI0
RCAvKiBCYWcuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQmFnLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGQjE0RTFBMTgxMEUxREEwMDlCNkI0RCAvKiBCYWdU
b0hhc2hNYXAuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQmFnVG9IYXNoTWFwLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CkBAIC00NDIsNyArNDQyLDcgQEAKIAkJNzBFQ0E2MEIxQjAyNDI2ODAwNDQ5
NzM5IC8qIFN5bWJvbEltcGwuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU3lt
Ym9sSW1wbC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3MEVDQTYwQzFCMDI0MjY4
MDA0NDk3MzkgLyogVW5pcXVlZFN0cmluZ0ltcGwuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gVW5pcXVlZFN0cmluZ0ltcGwuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJNzkwMzhFMDUyMjRCMDVBNzAwNEMwNzM4IC8qIFNwYW5uaW5nVHJlZS5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBTcGFubmluZ1RyZWUuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKLQkJNzkzNkQ2QTkxQzk5RjhBRTAwMEQxQUVEIC8qIFNtYWxsUHRyU2V0LmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNtYWxsUHRyU2V0Lmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCTc5MzZENkE5MUM5OUY4QUUwMDBEMUFFRCAvKiBTbWFsbFNldC5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTbWFsbFNldC5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQk3OTNCRkFERDlDRUQ0NEI4QjlGQkNBMTYgLyogU3RkVW5vcmRl
cmVkTWFwLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFN0ZFVub3JkZXJlZE1h
cC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3OTUyMTIwMjFGNDI1ODg4MDBCRDY0
MjEgLyogU2luZ2xlUm9vdEdyYXBoLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IFNpbmdsZVJvb3RHcmFwaC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3QTA1MDkz
RDFGQjlEQ0M1MDBCMzNGQjggLyogSlNPTlZhbHVlcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBKU09OVmFsdWVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0x
MjQ0LDggKzEyNDQsOCBAQAogCQkJCUE3NDg3NDRGMTdBMEJEQUUwMEZBMDRDQiAvKiBTaXhDaGFy
YWN0ZXJIYXNoLmNwcCAqLywKIAkJCQlBNzQ4NzQ1MDE3QTBCREFFMDBGQTA0Q0IgLyogU2l4Q2hh
cmFjdGVySGFzaC5oICovLAogCQkJCUE4QTQ3MzBDMTUxQTgyNUIwMDQxMjNGRiAvKiBTaXplTGlt
aXRzLmNwcCAqLywKLQkJCQkwRkE2RjM5MjIwQ0M3M0EyMDBBMDNEQ0QgLyogU21hbGxQdHJTZXQu
Y3BwICovLAotCQkJCTc5MzZENkE5MUM5OUY4QUUwMDBEMUFFRCAvKiBTbWFsbFB0clNldC5oICov
LAorCQkJCTBGQTZGMzkyMjBDQzczQTIwMEEwM0RDRCAvKiBTbWFsbFNldC5jcHAgKi8sCisJCQkJ
NzkzNkQ2QTkxQzk5RjhBRTAwMEQxQUVEIC8qIFNtYWxsU2V0LmggKi8sCiAJCQkJQTMwRDQxMkQx
RjBERTEzRjAwQjcxOTU0IC8qIFNvZnRMaW5raW5nLmggKi8sCiAJCQkJOTMxNTZDOEQyNjJDOTgy
MjAwRUFFMjdCIC8qIFNvcnRlZEFycmF5TWFwLmggKi8sCiAJCQkJNzkwMzhFMDUyMjRCMDVBNzAw
NEMwNzM4IC8qIFNwYW5uaW5nVHJlZS5oICovLApAQCAtMTc2MCw3ICsxNzYwLDcgQEAKIAkJCQk1
MzExQkQ1MzFFQTcxQ0FEMDA1MjUyODEgLyogU2lnbmFscy5jcHAgaW4gU291cmNlcyAqLywKIAkJ
CQlBNzQ4NzQ1MjE3QTBCREFFMDBGQTA0Q0IgLyogU2l4Q2hhcmFjdGVySGFzaC5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQlBOEE0NzQyNTE1MUE4MjVCMDA0MTIzRkYgLyogU2l6ZUxpbWl0cy5jcHAg
aW4gU291cmNlcyAqLywKLQkJCQkwRkE2RjM5MzIwQ0M3M0EzMDBBMDNEQ0QgLyogU21hbGxQdHJT
ZXQuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEZBNkYzOTMyMENDNzNBMzAwQTAzRENEIC8qIFNt
YWxsU2V0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE4QTQ3NDI3MTUxQTgyNUIwMDQxMjNGRiAv
KiBTdGFja0JvdW5kcy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlGRUVBNERGOTIxNkQ3QkU0MDBB
QzA2MDIgLyogU3RhY2tQb2ludGVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUZFREFDRDNEMTYz
MEY4M0YwMEM2OTYzNCAvKiBTdGFja1N0YXRzLmNwcCBpbiBTb3VyY2VzICovLApkaWZmIC0tZ2l0
IGEvU291cmNlL1dURi93dGYvQ01ha2VMaXN0cy50eHQgYi9Tb3VyY2UvV1RGL3d0Zi9DTWFrZUxp
c3RzLnR4dAppbmRleCBlN2RiYzRmMDJmYTAuLjgwMThmYWJhNDZjNyAxMDA2NDQKLS0tIGEvU291
cmNlL1dURi93dGYvQ01ha2VMaXN0cy50eHQKKysrIGIvU291cmNlL1dURi93dGYvQ01ha2VMaXN0
cy50eHQKQEAgLTIzNSw3ICsyMzUsNyBAQCBzZXQoV1RGX1BVQkxJQ19IRUFERVJTCiAgICAgU2lu
Z2x5TGlua2VkTGlzdC5oCiAgICAgU2luZ2x5TGlua2VkTGlzdFdpdGhUYWlsLmgKICAgICBTaXhD
aGFyYWN0ZXJIYXNoLmgKLSAgICBTbWFsbFB0clNldC5oCisgICAgU21hbGxTZXQuaAogICAgIFNv
ZnRMaW5raW5nLmgKICAgICBTb3J0ZWRBcnJheU1hcC5oCiAgICAgU3Bhbm5pbmdUcmVlLmgKQEAg
LTQ0Myw3ICs0NDMsNyBAQCBzZXQoV1RGX1NPVVJDRVMKICAgICBTZWNvbmRzLmNwcAogICAgIFNl
Z21lbnRlZFZlY3Rvci5jcHAKICAgICBTaXhDaGFyYWN0ZXJIYXNoLmNwcAotICAgIFNtYWxsUHRy
U2V0LmNwcAorICAgIFNtYWxsU2V0LmNwcAogICAgIFN0YWNrQm91bmRzLmNwcAogICAgIFN0YWNr
UG9pbnRlci5jcHAKICAgICBTdGFja1N0YXRzLmNwcApkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93
dGYvU21hbGxQdHJTZXQuY3BwIGIvU291cmNlL1dURi93dGYvU21hbGxTZXQuY3BwCnNpbWlsYXJp
dHkgaW5kZXggOTQlCnJlbmFtZSBmcm9tIFNvdXJjZS9XVEYvd3RmL1NtYWxsUHRyU2V0LmNwcApy
ZW5hbWUgdG8gU291cmNlL1dURi93dGYvU21hbGxTZXQuY3BwCmluZGV4IDQyMDQ4ZTdlOGEyMy4u
MmQyZjQxNWIyYzdhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi9TbWFsbFB0clNldC5jcHAK
KysrIGIvU291cmNlL1dURi93dGYvU21hbGxTZXQuY3BwCkBAIC0yNCwxMiArMjQsMTIgQEAKICAq
LwogCiAjaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSA8d3RmL1NtYWxsUHRyU2V0Lmg+Cisj
aW5jbHVkZSA8d3RmL1NtYWxsU2V0Lmg+CiAKICNpbmNsdWRlIDx3dGYvTmV2ZXJEZXN0cm95ZWQu
aD4KIAogbmFtZXNwYWNlIFdURiB7CiAKLURFRklORV9BTExPQ0FUT1JfV0lUSF9IRUFQX0lERU5U
SUZJRVIoU21hbGxQdHJTZXQpOworREVGSU5FX0FMTE9DQVRPUl9XSVRIX0hFQVBfSURFTlRJRklF
UihTbWFsbFNldCk7CiAKIH0gLy8gbmFtZXNwYWNlIFdURgpkaWZmIC0tZ2l0IGEvU291cmNlL1dU
Ri93dGYvU21hbGxQdHJTZXQuaCBiL1NvdXJjZS9XVEYvd3RmL1NtYWxsU2V0LmgKc2ltaWxhcml0
eSBpbmRleCA1MCUKcmVuYW1lIGZyb20gU291cmNlL1dURi93dGYvU21hbGxQdHJTZXQuaApyZW5h
bWUgdG8gU291cmNlL1dURi93dGYvU21hbGxTZXQuaAppbmRleCA0YzZlNDYxOTZkMjkuLjI0NzQx
ZjEyYzM1ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYvU21hbGxQdHJTZXQuaAorKysgYi9T
b3VyY2UvV1RGL3d0Zi9TbWFsbFNldC5oCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAxNiBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTYtMjAyMSBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgKgogICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTMyLDY1ICszMiw3NyBAQAogCiBuYW1lc3BhY2UgV1RG
IHsKIAotREVDTEFSRV9BTExPQ0FUT1JfV0lUSF9IRUFQX0lERU5USUZJRVIoU21hbGxQdHJTZXQp
OworREVDTEFSRV9BTExPQ0FUT1JfV0lUSF9IRUFQX0lERU5USUZJRVIoU21hbGxTZXQpOwogCi10
ZW1wbGF0ZTx0eXBlbmFtZSBQdHJUeXBlLCB1bnNpZ25lZCBTbWFsbEFycmF5U2l6ZSA9IDg+Ci1j
bGFzcyBTbWFsbFB0clNldCB7CisvLyBGdW5jdGlvbmFsbHksIHRoaXMgY2xhc3MgaXMgdmVyeSBz
aW1pbGFyIHRvIFZhcmlhbnQ8VmVjdG9yPFQsIFNtYWxsQXJyYXlTaXplPiwgSGFzaFNldDxUPj4K
Ky8vIEl0IGlzIG9wdGltaXplZCBwcmltYXJpbHkgZm9yIHNwYWNlLCBidXQgaXMgYWxzbyBxdWl0
ZSBmYXN0CisvLyBJdHMgbWFpbiBsaW1pdGF0aW9uIGlzIHRoYXQgaXQgaGFzIG5vIHdheSB0byBy
ZW1vdmUgZWxlbWVudHMgb25jZSB0aGV5IGhhdmUgYmVlbiBhZGRlZCB0byBpdAorLy8gQWxzbywg
aW5zdGVhZCBvZiBiZWluZyBmdWxseSBwYXJhbWV0ZXJpemVkIGJ5IGEgSGFzaFRyYWl0IHBhcmFt
ZXRlciwgaXQgYWx3YXlzIHVzZXMgLTEgKGFsbCBvbmVzKSBhcyBpdHMgZW1wdHkgdmFsdWUKKy8v
IFJlbGF0ZWRseSwgaXQgY2FuIG9ubHkgc3RvcmUgb2JqZWN0cyBvZiB1cCB0byA2NCBiaXQgc2l6
ZSAoYnV0IHRoYXQgcGFydGljdWxhciBsaW1pdGF0aW9uIHNob3VsZCBiZSBmYWlybHkgZWFzeSB0
byBsaWZ0IGlmIG5lZWRlZCkKKy8vIFVzZSBpdCB3aGVuZXZlciB5b3UgbmVlZCB0byBzdG9yZSBh
biB1bmJvdW5kZWQgYnV0IHByb2JhYmx5IHNtYWxsIG51bWJlciBvZiB1bnNpZ25lZCBpbnRlZ2Vy
cyBvciBwb2ludGVycy4KK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIEhhc2ggPSBQdHJI
YXNoQmFzZTxULCBmYWxzZSAvKiBpc1NtYXJ0UHRyICovPiwgdW5zaWduZWQgU21hbGxBcnJheVNp
emUgPSA4PgorY2xhc3MgU21hbGxTZXQgewogICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwot
ICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKFNtYWxsUHRyU2V0KTsKLSAgICBzdGF0aWNfYXNzZXJ0
KHN0ZDo6aXNfdHJpdmlhbGx5X2Rlc3RydWN0aWJsZTxQdHJUeXBlPjo6dmFsdWUsICJXZSBjdXJy
ZW50bHkgZG9uJ3Qgc3VwcG9ydCBub24tdHJpdmlhbGx5IGRlc3RydWN0aWJsZSBwb2ludGVyIHR5
cGVzLiIpOwotICAgIHN0YXRpY19hc3NlcnQoc2l6ZW9mKFB0clR5cGUpID09IHNpemVvZih2b2lk
KiksICJPbmx5IHN1cHBvcnQgcG9pbnRlciBzaXplZCB0aGluZ3MuIik7CisgICAgV1RGX01BS0Vf
Tk9OQ09QWUFCTEUoU21hbGxTZXQpOworICAgIHN0YXRpY19hc3NlcnQoc3RkOjppc190cml2aWFs
bHlfZGVzdHJ1Y3RpYmxlPFQ+Ojp2YWx1ZSwgIldlIGN1cnJlbnRseSBkb24ndCBzdXBwb3J0IG5v
bi10cml2aWFsbHkgZGVzdHJ1Y3RpYmxlIHR5cGVzLiIpOwogICAgIHN0YXRpY19hc3NlcnQoIShT
bWFsbEFycmF5U2l6ZSAmIChTbWFsbEFycmF5U2l6ZSAtIDEpKSwgIklubGluZSBzaXplIG11c3Qg
YmUgYSBwb3dlciBvZiB0d28uIik7CisgICAgc3RhdGljX2Fzc2VydChzaXplb2YoVCopIDw9IFNt
YWxsQXJyYXlTaXplICogc2l6ZW9mKFQpLCAiVGhpcyBjbGFzcyBoYXMgbm90IGJlZW4gdGVzdGVk
IGZvciBtX2lubGluZS5idWZmZXIgbGFyZ2VyIHRoYW4gbV9pbmxpbmUuc21hbGxTdG9yYWdlIik7
CiAKLXB1YmxpYzogCi0gICAgU21hbGxQdHJTZXQoKQorcHVibGljOgorICAgIFNtYWxsU2V0KCkK
KyAgICAgICAgOiBtX2lubGluZSgpCiAgICAgewogICAgICAgICBpbml0aWFsaXplKCk7CiAgICAg
fQogCi0gICAgLy8gV2UgdGFrZSBjYXJlIHRvIGhhdmUgU21hbGxQdHJTZXQgaGF2ZSBwYXJ0aWFs
IG1vdmUgc2VtYW50aWNzIGFsbG93YWJsZSB0aHJvdWdoCisgICAgLy8gV2UgdGFrZSBjYXJlIHRv
IGhhdmUgU21hbGxTZXQgaGF2ZSBwYXJ0aWFsIG1vdmUgc2VtYW50aWNzIGFsbG93YWJsZSB0aHJv
dWdoCiAgICAgLy8gbWVtY3B5LiBJdCdzIHBhcnRpYWwgbW92ZSBzZW1hbnRpY3MgYmVjYXVzZSBv
dXIgZGVzdHJ1Y3RvciBzaG91bGQgbm90IGJlIGNhbGxlZAogICAgIC8vIG9uIHRoZSBTbWFsbFB0
ck9iamVjdCBpbiB0aGUgb2xkIG1lbW9yeSB3ZSB3ZXJlIG1vdmVkIGZyb20gKG90aGVyd2lzZSwg
d2UgbWlnaHQgZnJlZSBtX2J1ZmZlciB0d2ljZSkKICAgICAvLyB1bmxlc3MgdGhhdCBvbGQgbWVt
b3J5IGlzIHJlc2V0IHRvIGJlIGlzU21hbGwoKS4gU2VlIG1vdmUgY29uc3RydWN0b3IgYmVsb3cu
CiAgICAgLy8gVG8gbWFpbnRhaW4gdGhlc2Ugc2VtYW50aWNzLCB3ZSBkZXRlcm1pbmUgaWYgd2Un
cmUgc21hbGwgYnkgY2hlY2tpbmcgb3VyIHNpemUKICAgICAvLyBhbmQgbm90IG91ciBtX2J1ZmZl
ciBwb2ludGVyLiBBbmQgd2hlbiB3ZSdyZSBzbWFsbCwgd2UgZG9uJ3QgZG8gb3BlcmF0aW9ucyBv
bgogICAgIC8vIG1fYnVmZmVyLCBpbnN0ZWFkLCB3ZSBwZXJmb3JtIG9wZXJhdGlvbnMgb24gbV9z
bWFsbFN0b3JhZ2UgZGlyZWN0bHkuIFRoZSByZWFzb24gd2Ugd2FudAotICAgIC8vIHRoZXNlIHNl
bWFudGljcyBpcyB0aGF0IGl0J3MgYmVuZWZpY2lhbCB0byBoYXZlIGEgVmVjdG9yIHRoYXQgY29u
dGFpbnMgU21hbGxQdHJTZXQKLSAgICAvLyAob3IgYW4gb2JqZWN0IHdpdGggU21hbGxQdHJTZXQg
YXMgYSBmaWVsZCkgYmUgYWxsb3dlZCB0byB1c2UgbWVtY3B5IGZvciBpdHMgbW92ZSBvcGVyYXRp
b24uCisgICAgLy8gdGhlc2Ugc2VtYW50aWNzIGlzIHRoYXQgaXQncyBiZW5lZmljaWFsIHRvIGhh
dmUgYSBWZWN0b3IgdGhhdCBjb250YWlucyBTbWFsbFNldAorICAgIC8vIChvciBhbiBvYmplY3Qg
d2l0aCBTbWFsbFNldCBhcyBhIGZpZWxkKSBiZSBhbGxvd2VkIHRvIHVzZSBtZW1jcHkgZm9yIGl0
cyBtb3ZlIG9wZXJhdGlvbi4KIAotICAgIFNtYWxsUHRyU2V0KFNtYWxsUHRyU2V0JiYgb3RoZXIp
CisgICAgU21hbGxTZXQoU21hbGxTZXQmJiBvdGhlcikKICAgICB7Ci0gICAgICAgIG1lbWNweSh0
aGlzLCAmb3RoZXIsIHNpemVvZihTbWFsbFB0clNldCkpOworICAgICAgICBtZW1jcHkodGhpcywg
Jm90aGVyLCBzaXplb2YoU21hbGxTZXQpKTsKICAgICAgICAgb3RoZXIuaW5pdGlhbGl6ZSgpOwog
ICAgIH0KIAotICAgIFNtYWxsUHRyU2V0JiBvcGVyYXRvcj0oU21hbGxQdHJTZXQmJiBvdGhlcikK
KyAgICBTbWFsbFNldCYgb3BlcmF0b3I9KFNtYWxsU2V0JiYgb3RoZXIpCiAgICAgewotICAgICAg
ICB0aGlzLT5+U21hbGxQdHJTZXQoKTsKLSAgICAgICAgbmV3ICh0aGlzKSBTbWFsbFB0clNldChX
VEZNb3ZlKG90aGVyKSk7CisgICAgICAgIHRoaXMtPn5TbWFsbFNldCgpOworICAgICAgICBuZXcg
KHRoaXMpIFNtYWxsU2V0KFdURk1vdmUob3RoZXIpKTsKICAgICAgICAgcmV0dXJuICp0aGlzOwog
ICAgIH0KIAotICAgIH5TbWFsbFB0clNldCgpCisgICAgflNtYWxsU2V0KCkKICAgICB7CiAgICAg
ICAgIGlmICghaXNTbWFsbCgpKQotICAgICAgICAgICAgU21hbGxQdHJTZXRNYWxsb2M6OmZyZWUo
bV9idWZmZXIpOworICAgICAgICAgICAgU21hbGxTZXRNYWxsb2M6OmZyZWUobV9pbmxpbmUuYnVm
ZmVyKTsKICAgICB9CiAKLSAgICBpbmxpbmUgdm9pZCBhZGQoUHRyVHlwZSBwdHIpCisgICAgLy8g
V2UgY291bGQgZWFzaWx5IGluY2x1ZGUgYW4gaXRlcmF0b3IgaW4gdGhpcyB0byBmdWxseSBtYXRj
aCB0aGUgSGFzaFNldCBpbnRlcmZhY2UsIGJ1dCBjdXJyZW50bHkgbm9uZSBvZiBvdXIgY2xpZW50
cyByZXF1aXJlIGl0LgorICAgIHN0cnVjdCBBZGRSZXN1bHQgeworICAgICAgICBib29sIGlzTmV3
RW50cnk7CisgICAgfTsKKworICAgIGlubGluZSBBZGRSZXN1bHQgYWRkKFQgdmFsdWUpCiAgICAg
ewotICAgICAgICBBU1NFUlQoaXNWYWxpZEVudHJ5KHB0cikpOworICAgICAgICBBU1NFUlQoaXNW
YWxpZEVudHJ5KHZhbHVlKSk7CiAKICAgICAgICAgaWYgKGlzU21hbGwoKSkgewogICAgICAgICAg
ICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fc2l6ZTsgaSsrKSB7Ci0gICAgICAgICAgICAg
ICAgaWYgKG1fc21hbGxTdG9yYWdlW2ldID09IHB0cikKLSAgICAgICAgICAgICAgICAgICAgcmV0
dXJuOworICAgICAgICAgICAgICAgIGlmIChtX2lubGluZS5zbWFsbFN0b3JhZ2VbaV0gPT0gdmFs
dWUpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiB7IGZhbHNlIH07CiAgICAgICAgICAgICB9
CiAKICAgICAgICAgICAgIGlmIChtX3NpemUgPCBTbWFsbEFycmF5U2l6ZSkgewotICAgICAgICAg
ICAgICAgIG1fc21hbGxTdG9yYWdlW21fc2l6ZV0gPSBwdHI7CisgICAgICAgICAgICAgICAgbV9p
bmxpbmUuc21hbGxTdG9yYWdlW21fc2l6ZV0gPSB2YWx1ZTsKICAgICAgICAgICAgICAgICArK21f
c2l6ZTsKLSAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgcmV0dXJuIHsg
dHJ1ZSB9OwogICAgICAgICAgICAgfQogCiAgICAgICAgICAgICBncm93KHN0ZDo6bWF4KDY0dSwg
U21hbGxBcnJheVNpemUgKiAyKSk7CkBAIC0xMDMsMjYgKzExNSwyOSBAQCBwdWJsaWM6CiAgICAg
ICAgICAgICBBU1NFUlQoIShtX2NhcGFjaXR5ICYgKG1fY2FwYWNpdHkgLSAxKSkpOwogICAgICAg
ICB9CiAKLSAgICAgICAgdm9pZCoqIGJ1Y2tldCA9IHRoaXMtPmJ1Y2tldChwdHIpOwotICAgICAg
ICBpZiAoKmJ1Y2tldCAhPSBwdHIpIHsKLSAgICAgICAgICAgICpidWNrZXQgPSBwdHI7CisgICAg
ICAgIFQqIGJ1Y2tldCA9IHRoaXMtPmJ1Y2tldCh2YWx1ZSk7CisgICAgICAgIGlmICgqYnVja2V0
ICE9IHZhbHVlKSB7CisgICAgICAgICAgICAqYnVja2V0ID0gdmFsdWU7CiAgICAgICAgICAgICAr
K21fc2l6ZTsKKyAgICAgICAgICAgIHJldHVybiB7IHRydWUgfTsKICAgICAgICAgfQorICAgICAg
ICByZXR1cm4geyBmYWxzZSB9OwogICAgIH0KIAotICAgIGlubGluZSBib29sIGNvbnRhaW5zKFB0
clR5cGUgcHRyKSBjb25zdAorICAgIGlubGluZSBib29sIGNvbnRhaW5zKFQgdmFsdWUpIGNvbnN0
CiAgICAgewotICAgICAgICBBU1NFUlQoaXNWYWxpZEVudHJ5KHB0cikpOworICAgICAgICBBU1NF
UlQoaXNWYWxpZEVudHJ5KHZhbHVlKSk7CiAgICAgICAgIGlmIChpc1NtYWxsKCkpIHsKLSAgICAg
ICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX3NpemU7IGkrKykgeyAvLyBXZSBvbmx5
IG5lZWQgdG8gc2VhcmNoIHVwIHRvIG1fc2l6ZSBiZWNhdXNlIHdlIHN0b3JlIHRoaW5ncyBsaW5l
YXJseSBpbnNpZGUgbV9zbWFsbFN0b3JhZ2UuCi0gICAgICAgICAgICAgICAgaWYgKG1fc21hbGxT
dG9yYWdlW2ldID09IHB0cikKKyAgICAgICAgICAgIC8vIFdlIG9ubHkgbmVlZCB0byBzZWFyY2gg
dXAgdG8gbV9zaXplIGJlY2F1c2Ugd2Ugc3RvcmUgdGhpbmdzIGxpbmVhcmx5IGluc2lkZSBtX3Nt
YWxsU3RvcmFnZS4KKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX3NpemU7
IGkrKykgeworICAgICAgICAgICAgICAgIGlmIChtX2lubGluZS5zbWFsbFN0b3JhZ2VbaV0gPT0g
dmFsdWUpCiAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICAgICAgfQog
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9CiAKLSAgICAgICAgdm9pZCoqIGJ1
Y2tldCA9IHRoaXMtPmJ1Y2tldChwdHIpOwotICAgICAgICByZXR1cm4gKmJ1Y2tldCA9PSBwdHI7
CisgICAgICAgIFQqIGJ1Y2tldCA9IHRoaXMtPmJ1Y2tldCh2YWx1ZSk7CisgICAgICAgIHJldHVy
biAqYnVja2V0ID09IHZhbHVlOwogICAgIH0KIAogICAgIGNsYXNzIGl0ZXJhdG9yIHsKQEAgLTEz
NywxNSArMTUyLDE1IEBAIHB1YmxpYzoKICAgICAgICAgICAgIHJldHVybiAqdGhpczsKICAgICAg
ICAgfQogICAgICAgICAKLSAgICAgICAgUHRyVHlwZSBvcGVyYXRvciooKSBjb25zdCB7IEFTU0VS
VChtX2luZGV4IDwgbV9jYXBhY2l0eSk7IHJldHVybiBzdGF0aWNfY2FzdDxQdHJUeXBlPihtX2J1
ZmZlclttX2luZGV4XSk7IH0KKyAgICAgICAgVCBvcGVyYXRvciooKSBjb25zdCB7IEFTU0VSVCht
X2luZGV4IDwgbV9jYXBhY2l0eSk7IHJldHVybiBzdGF0aWNfY2FzdDxUPihtX2J1ZmZlclttX2lu
ZGV4XSk7IH0KICAgICAgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IGl0ZXJhdG9yJiBvdGhlcikg
Y29uc3QgeyBBU1NFUlQobV9idWZmZXIgPT0gb3RoZXIubV9idWZmZXIpOyByZXR1cm4gbV9pbmRl
eCA9PSBvdGhlci5tX2luZGV4OyB9CiAgICAgICAgIGJvb2wgb3BlcmF0b3IhPShjb25zdCBpdGVy
YXRvciYgb3RoZXIpIGNvbnN0IHsgQVNTRVJUKG1fYnVmZmVyID09IG90aGVyLm1fYnVmZmVyKTsg
cmV0dXJuICEoKnRoaXMgPT0gb3RoZXIpOyB9CiAKICAgICBwcml2YXRlOgotICAgICAgICB0ZW1w
bGF0ZTx0eXBlbmFtZSBVLCB1bnNpZ25lZCBTPiBmcmllbmQgY2xhc3MgV1RGOjpTbWFsbFB0clNl
dDsKKyAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVSwgdHlwZW5hbWUgSCwgdW5zaWduZWQgUz4g
ZnJpZW5kIGNsYXNzIFdURjo6U21hbGxTZXQ7CiAgICAgICAgIHVuc2lnbmVkIG1faW5kZXg7CiAg
ICAgICAgIHVuc2lnbmVkIG1fY2FwYWNpdHk7Ci0gICAgICAgIHZvaWQqKiBtX2J1ZmZlcjsKKyAg
ICAgICAgVCogbV9idWZmZXI7CiAgICAgfTsKIAogICAgIGl0ZXJhdG9yIGJlZ2luKCkgY29uc3QK
QEAgLTE1NCw5ICsxNjksOSBAQCBwdWJsaWM6CiAgICAgICAgIGl0Lm1faW5kZXggPSBzdGQ6Om51
bWVyaWNfbGltaXRzPHVuc2lnbmVkPjo6bWF4KCk7CiAgICAgICAgIGl0Lm1fY2FwYWNpdHkgPSBt
X2NhcGFjaXR5OwogICAgICAgICBpZiAoaXNTbWFsbCgpKQotICAgICAgICAgICAgaXQubV9idWZm
ZXIgPSBjb25zdF9jYXN0PHZvaWQqKj4obV9zbWFsbFN0b3JhZ2UpOworICAgICAgICAgICAgaXQu
bV9idWZmZXIgPSBjb25zdF9jYXN0PFQqPihtX2lubGluZS5zbWFsbFN0b3JhZ2UpOwogICAgICAg
ICBlbHNlCi0gICAgICAgICAgICBpdC5tX2J1ZmZlciA9IG1fYnVmZmVyOworICAgICAgICAgICAg
aXQubV9idWZmZXIgPSBtX2lubGluZS5idWZmZXI7CiAKICAgICAgICAgKytpdDsKIApAQCAtMTY5
LDI0ICsxODQsMjggQEAgcHVibGljOgogICAgICAgICBpdC5tX2luZGV4ID0gbV9jYXBhY2l0eTsK
ICAgICAgICAgaXQubV9jYXBhY2l0eSA9IG1fY2FwYWNpdHk7CiAgICAgICAgIGlmIChpc1NtYWxs
KCkpCi0gICAgICAgICAgICBpdC5tX2J1ZmZlciA9IGNvbnN0X2Nhc3Q8dm9pZCoqPihtX3NtYWxs
U3RvcmFnZSk7CisgICAgICAgICAgICBpdC5tX2J1ZmZlciA9IGNvbnN0X2Nhc3Q8VCo+KG1faW5s
aW5lLnNtYWxsU3RvcmFnZSk7CiAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIGl0Lm1fYnVmZmVy
ID0gbV9idWZmZXI7CisgICAgICAgICAgICBpdC5tX2J1ZmZlciA9IG1faW5saW5lLmJ1ZmZlcjsK
IAogICAgICAgICByZXR1cm4gaXQ7CiAgICAgfQogCiAgICAgaW5saW5lIHVuc2lnbmVkIHNpemUo
KSBjb25zdCB7IHJldHVybiBtX3NpemU7IH0KIAorICAgIGlubGluZSBib29sIGlzRW1wdHkoKSBj
b25zdCB7IHJldHVybiAhc2l6ZSgpOyB9CisKIHByaXZhdGU6Ci0gICAgY29uc3RleHByIHN0YXRp
YyB2b2lkKiBlbXB0eVZhbHVlKCkKKyAgICBjb25zdGV4cHIgc3RhdGljIFQgZW1wdHlWYWx1ZSgp
CiAgICAgewotICAgICAgICByZXR1cm4gYml0d2lzZV9jYXN0PHZvaWQqPihzdGQ6Om51bWVyaWNf
bGltaXRzPHVpbnRwdHJfdD46Om1heCgpKTsKKyAgICAgICAgaWYgY29uc3RleHByIChzdGQ6Omlz
X3BvaW50ZXI8VD46OnZhbHVlKQorICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PFQ+KGJp
dHdpc2VfY2FzdDx2b2lkKj4oc3RkOjpudW1lcmljX2xpbWl0czx1aW50cHRyX3Q+OjptYXgoKSkp
OworICAgICAgICByZXR1cm4gc3RkOjpudW1lcmljX2xpbWl0czxUPjo6bWF4KCk7CiAgICAgfQog
Ci0gICAgYm9vbCBpc1ZhbGlkRW50cnkoY29uc3QgUHRyVHlwZSBwdHIpIGNvbnN0CisgICAgYm9v
bCBpc1ZhbGlkRW50cnkoY29uc3QgVCB2YWx1ZSkgY29uc3QKICAgICB7Ci0gICAgICAgIHJldHVy
biBwdHIgIT0gZW1wdHlWYWx1ZSgpOworICAgICAgICByZXR1cm4gdmFsdWUgIT0gZW1wdHlWYWx1
ZSgpOwogICAgIH0KIAogICAgIGlubGluZSBib29sIGlzU21hbGwoKSBjb25zdApAQCAtMTk3LDQz
ICsyMTYsNjQgQEAgcHJpdmF0ZToKICAgICBpbmxpbmUgdm9pZCBpbml0aWFsaXplKCkKICAgICB7
CiAgICAgICAgIG1fc2l6ZSA9IDA7Ci0gICAgICAgIG1fYnVmZmVyID0gbnVsbHB0cjsKICAgICAg
ICAgbV9jYXBhY2l0eSA9IFNtYWxsQXJyYXlTaXplOwotICAgICAgICBtZW1zZXQobV9zbWFsbFN0
b3JhZ2UsIC0xLCBzaXplb2Yodm9pZCopICogU21hbGxBcnJheVNpemUpOworICAgICAgICBtZW1z
ZXQobV9pbmxpbmUuc21hbGxTdG9yYWdlLCAtMSwgc2l6ZW9mKFQpICogU21hbGxBcnJheVNpemUp
OwogICAgICAgICBBU1NFUlQoaXNTbWFsbCgpKTsKICAgICB9CiAKICAgICBpbmxpbmUgdm9pZCBn
cm93KHVuc2lnbmVkIHNpemUpCiAgICAgewotICAgICAgICBBU1NFUlQoc3RhdGljX2Nhc3Q8aW50
MzJfdD4oYml0d2lzZV9jYXN0PGludHB0cl90PihlbXB0eVZhbHVlKCkpKSA9PSAtMSk7CisgICAg
ICAgIC8vIFdlIG1lbXNldCB0aGUgbmV3IGJ1ZmZlciB3aXRoIC0xLCBzbyBmb3IgY29uc2lzdGVu
Y3kgZW1wdHlWYWx1ZSgpIG11c3QgcmV0dXJuIHNvbWV0aGluZyB3aGljaCBpcyBhbGwgMXMuCisj
aWYgIWRlZmluZWQoTkRFQlVHKQorICAgICAgICBpZiBjb25zdGV4cHIgKHN0ZDo6aXNfcG9pbnRl
cjxUPjo6dmFsdWUpCisgICAgICAgICAgICBBU1NFUlQoYml0d2lzZV9jYXN0PGludHB0cl90Pihl
bXB0eVZhbHVlKCkpID09IC0xbGwpOworICAgICAgICBlbHNlIGlmIGNvbnN0ZXhwciAoc2l6ZW9m
KFQpID09IDgpCisgICAgICAgICAgICBBU1NFUlQoYml0d2lzZV9jYXN0PGludDY0X3Q+KGVtcHR5
VmFsdWUoKSkgPT0gLTFsbCk7CisgICAgICAgIGVsc2UgaWYgY29uc3RleHByIChzaXplb2YoVCkg
PT0gNCkKKyAgICAgICAgICAgIEFTU0VSVChiaXR3aXNlX2Nhc3Q8aW50MzJfdD4oZW1wdHlWYWx1
ZSgpKSA9PSAtMSk7CisgICAgICAgIGVsc2UgaWYgY29uc3RleHByIChzaXplb2YoVCkgPT0gMikK
KyAgICAgICAgICAgIEFTU0VSVChiaXR3aXNlX2Nhc3Q8aW50MTZfdD4oZW1wdHlWYWx1ZSgpKSA9
PSAtMSk7CisgICAgICAgIGVsc2UgaWYgY29uc3RleHByIChzaXplb2YoVCkgPT0gMSkKKyAgICAg
ICAgICAgIEFTU0VSVChiaXR3aXNlX2Nhc3Q8aW50OF90PihlbXB0eVZhbHVlKCkpID09IC0xKTsK
KyAgICAgICAgZWxzZQorICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsK
KyNlbmRpZgogCi0gICAgICAgIHNpemVfdCBhbGxvY2F0aW9uU2l6ZSA9IHNpemVvZih2b2lkKikg
KiBzaXplOworICAgICAgICBzaXplX3QgYWxsb2NhdGlvblNpemUgPSBzaXplb2YoVCkgKiBzaXpl
OwogICAgICAgICBib29sIHdhc1NtYWxsID0gaXNTbWFsbCgpOwotICAgICAgICB2b2lkKiogb2xk
QnVmZmVyID0gd2FzU21hbGwgPyBtX3NtYWxsU3RvcmFnZSA6IG1fYnVmZmVyOworICAgICAgICBU
KiBvbGRCdWZmZXIgPSB3YXNTbWFsbCA/IG1faW5saW5lLnNtYWxsU3RvcmFnZSA6IG1faW5saW5l
LmJ1ZmZlcjsKICAgICAgICAgdW5zaWduZWQgb2xkQ2FwYWNpdHkgPSBtX2NhcGFjaXR5OwotICAg
ICAgICBtX2J1ZmZlciA9IHN0YXRpY19jYXN0PHZvaWQqKj4oU21hbGxQdHJTZXRNYWxsb2M6Om1h
bGxvYyhhbGxvY2F0aW9uU2l6ZSkpOwotICAgICAgICBtZW1zZXQobV9idWZmZXIsIC0xLCBhbGxv
Y2F0aW9uU2l6ZSk7CisgICAgICAgIFQqIG5ld0J1ZmZlciA9IHN0YXRpY19jYXN0PFQqPihTbWFs
bFNldE1hbGxvYzo6bWFsbG9jKGFsbG9jYXRpb25TaXplKSk7CisgICAgICAgIG1lbXNldChuZXdC
dWZmZXIsIC0xLCBhbGxvY2F0aW9uU2l6ZSk7CiAgICAgICAgIG1fY2FwYWNpdHkgPSBzaXplOwog
CiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBvbGRDYXBhY2l0eTsgaSsrKSB7CiAg
ICAgICAgICAgICBpZiAob2xkQnVmZmVyW2ldICE9IGVtcHR5VmFsdWUoKSkgewotICAgICAgICAg
ICAgICAgIHZvaWQqKiBwdHIgPSB0aGlzLT5idWNrZXQoc3RhdGljX2Nhc3Q8UHRyVHlwZT4ob2xk
QnVmZmVyW2ldKSk7CisgICAgICAgICAgICAgICAgVCogcHRyID0gYnVja2V0SW5CdWZmZXIobmV3
QnVmZmVyLCBzdGF0aWNfY2FzdDxUPihvbGRCdWZmZXJbaV0pKTsKICAgICAgICAgICAgICAgICAq
cHRyID0gb2xkQnVmZmVyW2ldOwogICAgICAgICAgICAgfQogICAgICAgICB9CiAKICAgICAgICAg
aWYgKCF3YXNTbWFsbCkKLSAgICAgICAgICAgIFNtYWxsUHRyU2V0TWFsbG9jOjpmcmVlKG9sZEJ1
ZmZlcik7CisgICAgICAgICAgICBTbWFsbFNldE1hbGxvYzo6ZnJlZShvbGRCdWZmZXIpOworCisg
ICAgICAgIG1faW5saW5lLmJ1ZmZlciA9IG5ld0J1ZmZlcjsKICAgICB9CiAKIAotICAgIGlubGlu
ZSB2b2lkKiogYnVja2V0KFB0clR5cGUgdGFyZ2V0KSBjb25zdAorICAgIGlubGluZSBUKiBidWNr
ZXQoVCB0YXJnZXQpIGNvbnN0CisgICAgeworICAgICAgICBBU1NFUlQoIWlzU21hbGwoKSk7Cisg
ICAgICAgIHJldHVybiBidWNrZXRJbkJ1ZmZlcihtX2lubGluZS5idWZmZXIsIHRhcmdldCk7Cisg
ICAgfQorCisgICAgaW5saW5lIFQqIGJ1Y2tldEluQnVmZmVyKFQqIGJ1ZmZlciwgVCB0YXJnZXQp
IGNvbnN0CiAgICAgewogICAgICAgICBBU1NFUlQoIShtX2NhcGFjaXR5ICYgKG1fY2FwYWNpdHkg
LSAxKSkpOwotICAgICAgICB1bnNpZ25lZCBidWNrZXQgPSBQdHJIYXNoQmFzZTxQdHJUeXBlLCBm
YWxzZSAvKiBpc1NtYXJ0UHRyICovPjo6aGFzaCh0YXJnZXQpICYgKG1fY2FwYWNpdHkgLSAxKTsK
KyAgICAgICAgdW5zaWduZWQgYnVja2V0ID0gSGFzaDo6aGFzaCh0YXJnZXQpICYgKG1fY2FwYWNp
dHkgLSAxKTsKICAgICAgICAgdW5zaWduZWQgaW5kZXggPSAwOwogICAgICAgICB3aGlsZSAodHJ1
ZSkgewotICAgICAgICAgICAgdm9pZCoqIHB0ciA9IG1fYnVmZmVyICsgYnVja2V0OworICAgICAg
ICAgICAgVCogcHRyID0gYnVmZmVyICsgYnVja2V0OwogICAgICAgICAgICAgaWYgKCpwdHIgPT0g
ZW1wdHlWYWx1ZSgpKQogICAgICAgICAgICAgICAgIHJldHVybiBwdHI7CiAgICAgICAgICAgICBp
ZiAoKnB0ciA9PSB0YXJnZXQpCkBAIC0yNDUsMTAgKzI4NSwxMyBAQCBwcml2YXRlOgogCiAgICAg
dW5zaWduZWQgbV9zaXplOwogICAgIHVuc2lnbmVkIG1fY2FwYWNpdHk7Ci0gICAgdm9pZCoqIG1f
YnVmZmVyOwotICAgIHZvaWQqIG1fc21hbGxTdG9yYWdlW1NtYWxsQXJyYXlTaXplXTsKKyAgICB1
bmlvbiBVIHsKKyAgICAgICAgVCogYnVmZmVyOworICAgICAgICBUIHNtYWxsU3RvcmFnZVtTbWFs
bEFycmF5U2l6ZV07CisgICAgICAgIFUoKSB7IH07CisgICAgfSBtX2lubGluZTsKIH07CiAKIH0g
Ly8gbmFtZXNwYWNlIFdURgogCi11c2luZyBXVEY6OlNtYWxsUHRyU2V0OwordXNpbmcgV1RGOjpT
bWFsbFNldDsKZGlmZiAtLWdpdCBhL1Rvb2xzL0NoYW5nZUxvZyBiL1Rvb2xzL0NoYW5nZUxvZwpp
bmRleCAyNTBiMzI5MGJiM2QuLjE2YmU0ZDBiMGRmMiAxMDA2NDQKLS0tIGEvVG9vbHMvQ2hhbmdl
TG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE5IEBACisyMDIxLTA1LTE3ICBS
b2JpbiBNb3Jpc3NldCAgPHJtb3Jpc3NldEBhcHBsZS5jb20+CisKKyAgICAgICAgTWFrZSBBaXJB
bGxvY2F0ZVJlZ2lzdGVyc0J5R3JhcGhDb2xvcmluZyB1c2UgbGVzcyBtZW1vcnkKKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIyNTg0OAorCisgICAgICAg
IFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUykuCisKKyAgICAgICAgd3RmL1NtYWxsUHRyU2V0IChu
b3cgU21hbGxTZXQpIHdhcyBjb21wbGV0ZWx5IHVudGVzdGVkLCBzbyBJIGp1c3QgYWRkZWQgYSBm
ZXcgc2ltcGxlIHRlc3RzLgorCisgICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0V2ViS2l0QVBJ
Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0
cy9XVEYvU21hbGxTZXQuY3BwOiBBZGRlZC4KKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OnRlc3RT
bWFsbFNldE9mVW5zaWduZWQpOgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6dGVzdFNtYWxsU2V0
T2ZQb2ludGVycyk6CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjp0ZXN0VmVjdG9yc09mU21hbGxT
ZXRzT2ZVbnNpZ25lZCk6CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpURVNUKToKKwogMjAyMS0w
NS0xNSAgSmVyIE5vYmxlICA8amVyLm5vYmxlQGFwcGxlLmNvbT4KIAogICAgICAgICBNZWRpYVNl
c3Npb25Db29yZGluYXRvciBzdXJ2aXZlcyBwYWdlIHJlbG9hZC9uYXZpZ2F0aW9uCmRpZmYgLS1n
aXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RXZWJLaXRBUEkueGNvZGVwcm9qL3Byb2plY3Qu
cGJ4cHJvaiBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdFdlYktpdEFQSS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCmluZGV4IDY0NmY4NDIwN2EwZS4uMmI1Y2Q2ZTJmYjNlIDEwMDY0NAotLS0g
YS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RXZWJLaXRBUEkueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvagorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RXZWJLaXRBUEkueGNvZGVwcm9qL3By
b2plY3QucGJ4cHJvagpAQCAtMjA4LDYgKzIwOCw3IEBACiAJCTMxRTlCREEzMjQ3RjU3MjkwMDJF
NTFBMiAvKiB3ZWJnbC5odG1sIGluIENvcHkgUmVzb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDMxRTlCREEyMjQ3RjRERDAwMDJFNTFBMiAvKiB3ZWJnbC5odG1sICov
OyB9OwogCQkzMzk3NkQ4MzI0REM0NzlCMDA4MTIzMDQgLyogSW5kZXhTcGFyc2VTZXQuY3BwIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMzM5NzZEODIyNERD
NDc5QjAwODEyMzA0IC8qIEluZGV4U3BhcnNlU2V0LmNwcCAqLzsgfTsKIAkJMzNCRTVBRjkxMzdC
NUFBRTAwNzA1ODEzIC8qIE1vdXNlTW92ZUFmdGVyQ3Jhc2hfQnVuZGxlLmNwcCBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDMzQkU1QUY4MTM3QjVBQUUwMDcw
NTgxMyAvKiBNb3VzZU1vdmVBZnRlckNyYXNoX0J1bmRsZS5jcHAgKi87IH07CisJCTMzQzJDOUMx
MjY1MUY1QjkwMEU0MDdGNiAvKiBTbWFsbFNldC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzM0MyQzlDMDI2NTFGNUI5MDBFNDA3RjYgLyogU21hbGxT
ZXQuY3BwICovOyB9OwogCQkzM0RDODkxMjE0MTk1NUZFMDA3NDdFRjcgLyogc2ltcGxlLWlmcmFt
ZS5odG1sIGluIENvcHkgUmVzb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDMzREM4OTBFMTQxOTUzOTMwMDc0N0VGNyAvKiBzaW1wbGUtaWZyYW1lLmh0bWwgKi87IH07
CiAJCTMzREM4OTE0MTQxOTU3OUYwMDc0N0VGNyAvKiBMb2FkQ2FuY2VsZWROb1NlcnZlclJlZGly
ZWN0Q2FsbGJhY2tfQnVuZGxlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDMzREM4OTEzMTQxOTU3OUYwMDc0N0VGNyAvKiBMb2FkQ2FuY2VsZWROb1Nl
cnZlclJlZGlyZWN0Q2FsbGJhY2tfQnVuZGxlLmNwcCAqLzsgfTsKIAkJMzNFNzlFMDYxMzdCNUZE
OTAwRTMyRDk5IC8qIG1vdXNlLW1vdmUtbGlzdGVuZXIuaHRtbCBpbiBDb3B5IFJlc291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzM0U3OUUwNTEzN0I1RkNFMDBFMzJE
OTkgLyogbW91c2UtbW92ZS1saXN0ZW5lci5odG1sICovOyB9OwpAQCAtMTk5Miw2ICsxOTkzLDcg
QEAKIAkJMzM5NzZEODIyNERDNDc5QjAwODEyMzA0IC8qIEluZGV4U3BhcnNlU2V0LmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEluZGV4U3BhcnNlU2V0LmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMzNCRTVBRjQxMzdCNUE2QzAwNzA1ODEzIC8qIE1v
dXNlTW92ZUFmdGVyQ3Jhc2guY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRo
ID0gTW91c2VNb3ZlQWZ0ZXJDcmFzaC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTMzQkU1QUY4MTM3QjVBQUUwMDcwNTgxMyAvKiBNb3VzZU1vdmVBZnRlckNyYXNoX0J1bmRsZS5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBNb3VzZU1vdmVBZnRlckNy
YXNoX0J1bmRsZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTMzQzJDOUMwMjY1
MUY1QjkwMEU0MDdGNiAvKiBTbWFsbFNldC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTbWFsbFNl
dC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTMzREM4OTBFMTQxOTUzOTMwMDc0
N0VGNyAvKiBzaW1wbGUtaWZyYW1lLmh0bWwgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0Lmh0bWw7IHBhdGggPSAi
c2ltcGxlLWlmcmFtZS5odG1sIjsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMzNEQzg5
MTAxNDE5NTNBMzAwNzQ3RUY3IC8qIExvYWRDYW5jZWxlZE5vU2VydmVyUmVkaXJlY3RDYWxsYmFj
ay5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBMb2FkQ2FuY2VsZWRO
b1NlcnZlclJlZGlyZWN0Q2FsbGJhY2suY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQkzM0RDODkxMzE0MTk1NzlGMDA3NDdFRjcgLyogTG9hZENhbmNlbGVkTm9TZXJ2ZXJSZWRpcmVj
dENhbGxiYWNrX0J1bmRsZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGgg
PSBMb2FkQ2FuY2VsZWROb1NlcnZlclJlZGlyZWN0Q2FsbGJhY2tfQnVuZGxlLmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTQ0MjAsNiArNDQyMiw3IEBACiAJCQkJOTMzRDYzMUIx
RkNCNzYxODAwMzJFQ0Q2IC8qIEhhc2hlci5jcHAgKi8sCiAJCQkJMEJDRDgzMzQxNDg1N0NFNDAw
RUEyMDAzIC8qIEhhc2hNYXAuY3BwICovLAogCQkJCTI2QjJERkY4MTVCREU1OTkwMDRGNjkxRCAv
KiBIYXNoU2V0LmNwcCAqLywKKwkJCQkzM0MyQzlDMDI2NTFGNUI5MDBFNDA3RjYgLyogU21hbGxT
ZXQuY3BwICovLAogCQkJCTdDOEJGRjcwMjNDMDEwNjcwMEMwMDlCMyAvKiBIZXhOdW1iZXIuY3Bw
ICovLAogCQkJCTMzOTc2RDgyMjREQzQ3OUIwMDgxMjMwNCAvKiBJbmRleFNwYXJzZVNldC5jcHAg
Ki8sCiAJCQkJMjY2RkFGRDIxNUU1Nzc1MjAwRjYxRDVCIC8qIEludGVnZXJUb1N0cmluZ0NvbnZl
cnNpb24uY3BwICovLApAQCAtNTE1NSw2ICs1MTU4LDcgQEAKIAkJCWZpbGVzID0gKAogCQkJCTdD
ODNERTk5MUQwQTU5MEMwMEZFQkNGMyAvKiBBdG9tU3RyaW5nLmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCUZFMkQ5NDc0MjQ1RUIyRjQwMEU0ODEzNSAvKiBCaXRtYXAuY3BwIGluIFNvdXJjZXMgKi8s
CisJCQkJMzNDMkM5QzEyNjUxRjVCOTAwRTQwN0Y2IC8qIFNtYWxsU2V0LmNwcCBpbiBTb3VyY2Vz
ICovLAogCQkJCTFBREFEMTUwMUQ3N0E5RjYwMDIxMjU4NiAvKiBCbG9ja1B0ci5tbSBpbiBTb3Vy
Y2VzICovLAogCQkJCTdDODNERTlDMUQwQTU5MEMwMEZFQkNGMyAvKiBCbG9vbUZpbHRlci5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQk3QzgzREYxODFEMEE1OTBDMDBGRUJDRjMgLyogQm94UHRyLmNw
cCBpbiBTb3VyY2VzICovLApkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9X
VEYvU21hbGxTZXQuY3BwIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XVEYvU21hbGxTZXQu
Y3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMC4uMjZkOTg3NTExNzM3
Ci0tLSAvZGV2L251bGwKKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XVEYvU21hbGxT
ZXQuY3BwCkBAIC0wLDAgKzEsMTUxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycn
CisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwor
ICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICog
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5o
IgorCisjaW5jbHVkZSAiVGVzdC5oIgorI2luY2x1ZGUgPHd0Zi9TbWFsbFNldC5oPgorCituYW1l
c3BhY2UgVGVzdFdlYktpdEFQSSB7CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+Cit2b2lkIHRlc3RT
bWFsbFNldE9mVW5zaWduZWQodW5zaWduZWQgbikKK3sKKyAgICBTbWFsbFNldDxULCBJbnRIYXNo
PFQ+PiBzZXQ7CisKKyAgICBFWFBFQ1RfVFJVRShzZXQuaXNFbXB0eSgpKTsKKyAgICBFWFBFQ1Rf
RVEoc2V0LnNpemUoKSwgMCk7CisKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbjsgKytp
KSB7CisgICAgICAgIGF1dG8gcmVzdWx0ID0gc2V0LmFkZChpKTsKKyAgICAgICAgRVhQRUNUX1RS
VUUocmVzdWx0LmlzTmV3RW50cnkpOworICAgIH0KKworICAgIEVYUEVDVF9GQUxTRShzZXQuaXNF
bXB0eSgpKTsKKyAgICBFWFBFQ1RfRVEoc2V0LnNpemUoKSwgbik7CisKKyAgICBmb3IgKHVuc2ln
bmVkIGkgPSAwOyBpIDwgMiAqIG47IGkgKz0gMikgeworICAgICAgICBhdXRvIHJlc3VsdCA9IHNl
dC5hZGQoaSk7CisgICAgICAgIGlmIChpIDwgbikKKyAgICAgICAgICAgIEVYUEVDVF9GQUxTRShy
ZXN1bHQuaXNOZXdFbnRyeSk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIEVYUEVDVF9UUlVF
KHJlc3VsdC5pc05ld0VudHJ5KTsKKyAgICB9CisKKyAgICBFWFBFQ1RfRVEoc2V0LnNpemUoKSwg
biArIG4gLyAyKTsKKworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCAyICogbjsgKytpKSB7
CisgICAgICAgIGlmIChpIDwgbiB8fCAhKGkgJSAyKSkKKyAgICAgICAgICAgIEVYUEVDVF9UUlVF
KHNldC5jb250YWlucyhpKSk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIEVYUEVDVF9GQUxT
RShzZXQuY29udGFpbnMoaSkpOworICAgIH0KKworICAgIHVuc2lnbmVkIGNvdW50ID0gMDsKKyAg
ICBIYXNoU2V0PFQ+IHJlZmVyZW5jZVNldDsKKyAgICBmb3IgKHVuc2lnbmVkIGkgOiBzZXQpIHsK
KyAgICAgICAgcmVmZXJlbmNlU2V0LmFkZChpKTsKKyAgICAgICAgKytjb3VudDsKKyAgICB9Cisg
ICAgRVhQRUNUX0VRKGNvdW50LCBuICsgbiAvIDIpOworICAgIEVYUEVDVF9FUShjb3VudCwgcmVm
ZXJlbmNlU2V0LnNpemUoKSk7Cit9CisKK3ZvaWQgdGVzdFNtYWxsU2V0T2ZQb2ludGVycygpCit7
CisgICAgU21hbGxTZXQ8aW50Kj4gc2V0OworCisgICAgY29uc3RleHByIHVuc2lnbmVkIGFycmF5
U2l6ZSA9IDIwMDsKKyAgICBpbnQgYXJyYXlbYXJyYXlTaXplXTsKKyAgICBmb3IgKHVuc2lnbmVk
IGkgPSAwOyBpIDwgYXJyYXlTaXplOyArK2kpCisgICAgICAgIGFycmF5W2ldID0gaTsKKworICAg
IGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBhcnJheVNpemU7ICsraSkgeworICAgICAgICBpbnQq
IHB0ciA9ICYoYXJyYXlbaV0pOworICAgICAgICBFWFBFQ1RfRkFMU0Uoc2V0LmNvbnRhaW5zKHB0
cikpOworICAgICAgICBhdXRvIHJlc3VsdCA9IHNldC5hZGQocHRyKTsKKyAgICAgICAgRVhQRUNU
X1RSVUUocmVzdWx0LmlzTmV3RW50cnkpOworICAgICAgICBFWFBFQ1RfVFJVRShzZXQuY29udGFp
bnMocHRyKSk7CisgICAgICAgIHJlc3VsdCA9IHNldC5hZGQocHRyKTsKKyAgICAgICAgRVhQRUNU
X0ZBTFNFKHJlc3VsdC5pc05ld0VudHJ5KTsKKyAgICB9CisKKyAgICBmb3IgKGludCogcHRyIDog
c2V0KQorICAgICAgICArKygqcHRyKTsKKworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgYXJyYXlT
aXplOyArK2kpCisgICAgICAgIEVYUEVDVF9FUShhcnJheVtpXSwgaSsxKTsKK30KKwordGVtcGxh
dGU8dHlwZW5hbWUgVD4KK3ZvaWQgdGVzdFZlY3RvcnNPZlNtYWxsU2V0c09mVW5zaWduZWQoKQor
eworICAgIFZlY3RvcjxTbWFsbFNldDxULCBJbnRIYXNoPFQ+PiwgMj4gdmVjdG9yOworICAgIHZl
Y3Rvci5hcHBlbmQoeyB9KTsKKyAgICB2ZWN0b3IuYXBwZW5kKHsgfSk7CisKKyAgICB2ZWN0b3Jb
MF0uYWRkKDEwMCk7CisgICAgdmVjdG9yWzBdLmFkZCgyMDApOworICAgIHZlY3RvclswXS5hZGQo
MzAwKTsKKworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCAyMDA7ICsraSkKKyAgICAgICAg
dmVjdG9yWzFdLmFkZChpKTsKKworICAgIC8vIE5vdyB3ZSBjYXVzZSB0aGUgdmVjdG9yIHRvIGNv
cHkgaXRzIGNvbnRlbnRzIHRvIGEgbGFyZ2VyIGJ1ZmZlci4KKyAgICAvLyBUaGlzIHNob3VsZCBj
b3JydXB0IG5laXRoZXIgdGhlIHNtYWxsIHNldCB0aGF0IHVzZXMgaW5saW5lIHN0b3JhZ2UgKHZl
Y3RvclswXSksIG5vciB0aGUgb25lIHRoYXQgdXNlcyBhbiBvdXQtb2YtbGluZSBidWZmZXIgKHZl
Y3RvclsxXSkuCisgICAgdmVjdG9yLnJlc2l6ZSgzMDApOworCisgICAgRVhQRUNUX0VRKHZlY3Rv
clswXS5zaXplKCksIDMpOworICAgIEVYUEVDVF9UUlVFKHZlY3RvclswXS5jb250YWlucygxMDAp
KTsKKyAgICBFWFBFQ1RfVFJVRSh2ZWN0b3JbMF0uY29udGFpbnMoMjAwKSk7CisgICAgRVhQRUNU
X1RSVUUodmVjdG9yWzBdLmNvbnRhaW5zKDMwMCkpOworICAgIEVYUEVDVF9GQUxTRSh2ZWN0b3Jb
MF0uY29udGFpbnMoNDIpKTsKKworICAgIEVYUEVDVF9FUSh2ZWN0b3JbMV0uc2l6ZSgpLCAxMDAp
OworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCAyMDA7ICsraSkKKyAgICAgICAgRVhQRUNU
X1RSVUUodmVjdG9yWzFdLmNvbnRhaW5zKGkpKTsKKyAgICBFWFBFQ1RfRkFMU0UodmVjdG9yWzFd
LmNvbnRhaW5zKDMwMCkpOworfQorCitURVNUKFdURl9TbWFsbFNldCwgVGhyZWVVaW50OCkgeyB0
ZXN0U21hbGxTZXRPZlVuc2lnbmVkPHVpbnQ4X3Q+KDMpOyB9CitURVNUKFdURl9TbWFsbFNldCwg
Rm91clVpbnQ4KSB7IHRlc3RTbWFsbFNldE9mVW5zaWduZWQ8dWludDhfdD4oNCk7IH0KK1RFU1Qo
V1RGX1NtYWxsU2V0LCBIdW5kcmVkVWludDgpIHsgdGVzdFNtYWxsU2V0T2ZVbnNpZ25lZDx1aW50
OF90PigxMDApOyB9CitURVNUKFdURl9TbWFsbFNldCwgVGhyZWVVaW50MTYpIHsgdGVzdFNtYWxs
U2V0T2ZVbnNpZ25lZDx1aW50MTZfdD4oMyk7IH0KK1RFU1QoV1RGX1NtYWxsU2V0LCBGb3VyVWlu
dDE2KSB7IHRlc3RTbWFsbFNldE9mVW5zaWduZWQ8dWludDE2X3Q+KDQpOyB9CitURVNUKFdURl9T
bWFsbFNldCwgSHVuZHJlZFVpbnQxNikgeyB0ZXN0U21hbGxTZXRPZlVuc2lnbmVkPHVpbnQxNl90
PigxMDApOyB9CitURVNUKFdURl9TbWFsbFNldCwgVGhyZWVVaW50MzIpIHsgdGVzdFNtYWxsU2V0
T2ZVbnNpZ25lZDx1aW50MzJfdD4oMyk7IH0KK1RFU1QoV1RGX1NtYWxsU2V0LCBGb3VyVWludDMy
KSB7IHRlc3RTbWFsbFNldE9mVW5zaWduZWQ8dWludDMyX3Q+KDQpOyB9CitURVNUKFdURl9TbWFs
bFNldCwgSHVuZHJlZFVpbnQzMikgeyB0ZXN0U21hbGxTZXRPZlVuc2lnbmVkPHVpbnQzMl90Pigx
MDApOyB9CitURVNUKFdURl9TbWFsbFNldCwgVGhyZWVVaW50NjQpIHsgdGVzdFNtYWxsU2V0T2ZV
bnNpZ25lZDx1aW50NjRfdD4oMyk7IH0KK1RFU1QoV1RGX1NtYWxsU2V0LCBGb3VyVWludDY0KSB7
IHRlc3RTbWFsbFNldE9mVW5zaWduZWQ8dWludDY0X3Q+KDQpOyB9CitURVNUKFdURl9TbWFsbFNl
dCwgSHVuZHJlZFVpbnQ2NCkgeyB0ZXN0U21hbGxTZXRPZlVuc2lnbmVkPHVpbnQ2NF90PigxMDAp
OyB9CisKK1RFU1QoV1RGX1NtYWxsU2V0LCBQb2ludGVycykgeyB0ZXN0U21hbGxTZXRPZlBvaW50
ZXJzKCk7IH0KKworVEVTVChXVEZfU21hbGxTZXQsIFZlY3RvclVpbnQxNikgeyB0ZXN0VmVjdG9y
c09mU21hbGxTZXRzT2ZVbnNpZ25lZDx1aW50MTZfdD4oKTsgfQorVEVTVChXVEZfU21hbGxTZXQs
IFZlY3RvclVpbnQzMikgeyB0ZXN0VmVjdG9yc09mU21hbGxTZXRzT2ZVbnNpZ25lZDx1aW50MzJf
dD4oKTsgfQorVEVTVChXVEZfU21hbGxTZXQsIFZlY3RvclVpbnQ2NCkgeyB0ZXN0VmVjdG9yc09m
U21hbGxTZXRzT2ZVbnNpZ25lZDx1aW50NjRfdD4oKTsgfQorCit9IC8vIG5hbWVzcGFjZSBUZXN0
V2ViS2l0QVBJCg==
</data>
<flag name="commit-queue"
          id="449886"
          type_id="3"
          status="-"
          setter="ews-feeder"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>428850</attachid>
            <date>2021-05-17 11:40:22 -0700</date>
            <delta_ts>2021-05-17 11:59:28 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>patchRegisterAllocator</filename>
            <type>text/plain</type>
            <size>86269</size>
            <attacher name="Robin Morisset">rmorisset</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvQ2hhbmdlTG9nCmluZGV4IGY4MzBjYTkzZDA0OC4uNGQ4NzcyZTVhYjQxIDEw
MDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxMDEgQEAKKzIwMjEtMDUtMTcgIFJv
YmluIE1vcmlzc2V0ICA8cm1vcmlzc2V0QGFwcGxlLmNvbT4KKworICAgICAgICBNYWtlIEFpckFs
bG9jYXRlUmVnaXN0ZXJzQnlHcmFwaENvbG9yaW5nIHVzZSBsZXNzIG1lbW9yeQorICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjI1ODQ4CisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTKS4KKworICAgICAgICBXZeKAmXZlIGhhZCBzb21lIGpl
dHNhbSBwcm9ibGVtcyBjYXVzZWQgYnkgdGhlIG1haW4gQWlyIHJlZ2lzdGVyIGFsbG9jYXRvciwg
d2hpY2ggY2F1c2VkIHVzIHRvIGxvd2VyIE9wdGlvbnM6Om1heGltdW1UbXBzRm9yR3JhcGhDb2xv
cmluZy4KKyAgICAgICAgSGVuY2UgdGhpcyBwYXRjaCB0cmllcyB0byBpbXByb3ZlIHRoZSBtZW1v
cnkgdXNhZ2Ugb2YgdGhlIGFsbG9jYXRvci4gSXQgaW5jbHVkZXMgc2V2ZXJhbCBjaGFuZ2VzOgor
ICAgICAgICAtIENoYW5nZSB0aGUgZGF0YXN0cnVjdHVyZSB1c2VkIGZvciByZXByZXNlbnRpbmcg
dGhlIGludGVyZmVyZW5jZSBncmFwaC4gQmVmb3JlIGl0IHdhcyBlZmZlY3RpdmVseSBhIEhhc2hT
ZXQ8c3RkOjpwYWlyPHVpbnQxNl90LCB1aW50MTZfdD4uIE5vdywgaXQgaXMgZWl0aGVyIGEgQml0
dmVjdG9yIChmb3IgbiA8IDQwMCBmb3Igbm93LCBjYW4gYmUgdHdlYWtlZCBlYXNpbHkpLCBvciBh
IFZlY3RvcjxTbWFsbFNldDx1aW50MTZfdD4+IG90aGVyd2lzZS4gVGhpcyBuZWFybHkgaGFsdmVz
IGl0cyBtZW1vcnkgY29uc3VtcHRpb24gaW4gdGhlIGNhc2UgdGhhdCB0aGUgZ3JhcGggaXMgZGVu
c2UgKHdoaWNoIGlzIHdoZW4gdGhlIG92ZXJoZWFkIG9mIHRoZSBTbWFsbFNldHMgaXMgbWluaW1p
emVkLCBhbmQgd2hlbiB0aGUgcmVnaXN0ZXIgYWxsb2NhdG9yIHVzZXMgdGhlIG1vc3QgbWVtb3J5
KS4gSW4gb3JkZXIgdG8gZWFzaWx5IHRlc3QgdGhpcyBjaGFuZ2UsIGFuZCBhbnkgZnVydGhlciBj
aGFuZ2UgdG8gdGhpcyBkYXRhc3RydWN0dXJlLCB0aGUgb2xkIGFwcHJvYWNoIHdhcyBwcmVzZXJ2
ZWQgYXMgSW50ZXJmZXJlbmNlSGFzaFNldCwgYW5kIGEgdGVtcGxhdGUgdG8gcnVuIHR3byBzdWNo
IGRhdGFzdHJ1Y3R1cmVzIGluIHBhcmFsbGVsLCBjaGVja2luZyB0aGVpciBlcXVpdmFsZW5jZSB3
YXMgYWRkZWQ6IEluc3RydW1lbnRlZEludGVyZmVyZW5jZUdyYXBoCisgICAgICAgIC0gVGhlcmUg
d2FzIGFscmVhZHkgc29tZSB0ZW1wbGF0ZSBwYXJhbWV0ZXIgdG8gY2hhbmdlIHRoZSBzaXplIG9m
IHRoZSB0bXAgaW5kaWNlcyBmcm9tIHVuc2lnbmVkIHRvIHVpbnQxNl90Li4gYnV0IHRoZSBjb2Rl
IGZhaWxlZCB0byBjb21waWxlIHVubGVzcyBpdCB3YXMgdW5zaWduZWQuIEkgZml4ZWQgdGhpcywg
bWFkZSBtb3JlIGNvbnNpc3RlbnQgdXNlIG9mIGl0LCBhbmQgc3dpdGNoZWQgdG8gdWludDE2X3Qg
YnkgZGVmYXVsdCAoc2luY2UgT3B0aW9uczo6bWF4aW11bVRtcHNGb3JHcmFwaENvbG9yaW5nIGlz
IDI1aywgd2UgYXJlIGZhciBmcm9tIGV4aGF1c3RpbmcgdWludDE2X3QpLiBUaGlzIGhhbHZlZCB0
aGUgbWVtb3J5IHVzYWdlIG9mIHZhcmlvdXMgb3RoZXIgZGF0YXN0cnVjdHVyZXMgaW4gdGhlIHJl
Z2lzdGVyIGFsbG9jYXRvcgorICAgICAgICAtIHVuc3BpbGxhYmxlVG1wcyB3YXMgYSBIYXNoU2V0
PHVuc2lnbmVkPi4gU2luY2UgaXQgaXMgb2Z0ZW4gcXVpdGUgZGVuc2UgKG9mdGVuIGFyb3VuZCAy
MCUgb24gSmV0U3RyZWFtMiksIEkgcmVwbGFjZWQgaXQgYnkgYSBCaXR2ZWN0b3IgaW5zdGVhZAor
ICAgICAgICAtIG1fYmlhc2VzIHdhcyBhIEhhc2hNYXA8SW5kZXhUeXBlLCBIYXNoU2V0PEluZGV4
VHlwZT4+LiBTaW5jZSBpdCBpcyBleHRyZW1lbHkgcmFyZSB0aGF0IHRoZSBzZXRzIGhhdmUgbW9y
ZSB0aGFuIDggZWxlbWVudHMgKGZyb20gbG9va2luZyBhdCBzb21lIGluc3RydW1lbnRlZCBydW4g
b2YgSmV0U3RyZWFtMiksIEkgcmVwbGFjZWQgaXQgYnkgSGFzaE1hcDxJbmRleFR5cGUsIFNtYWxs
U2V0PEluZGV4VHlwZT4+LiBUaGlzIG5vdCBvbmx5IHNpZ25pZmljYW50bHkgcmVkdWNlcyBtZW1v
cnksIGJ1dCBuZWFybHkgaGFsdmVzIHRoZSB0aW1lIHNwZW50IGluIGFzc2lnbkNvbG9ycyhhcm91
bmQgODBtcyAtPiA0MG1zIGluIEpldFN0cmVhbSAyKQorICAgICAgICAtIFVzZUNvdW50cyB3YXMg
bmVlZGxlc3NseSBnZW5lcmFsOiBpdCBpcyBvbmx5IHVzZWQgYnkgdGhlIHJlZ2lzdGVyIGFsbG9j
YXRvciAoYWxsIG90aGVyIHJlZmVyZW5jZXMgdG8gVXNlQ291bnRzIHJlZmVyIHRvIHRoZSBjb21w
bGV0ZWx5IGRpZmZlcmVudCBCMzo6VXNlQ291bnRzKSwgc28gdGhlcmUgaXMgbm8gcG9pbnQgaW4g
aXQgY29tcHV0aW5nLCBhbmQgdGhlbiBzdG9yaW5nIGxvdHMgb2YgaXJyZWxldmFudCBkYXRhLiBB
IGZsb2F0IGlzIGFsc28gbW9yZSB0aGFuIGVub3VnaCBwcmVjaXNpb24gKGVzcGVjaWFsbHkgc2lu
Y2UgaXQgaXMgcHJldHR5IG11Y2ggYWx3YXlzIDEsIDEwLCAxMDAsIG9yIDEwMDAgaW4gcHJhY3Rp
Y2XigKYpLiBBbHNvLCBzaW5jZSB3ZSBvbmx5IG5lZWQgaXQgaW5kZXhlZCBieSBUbXBzLCB3ZSBj
YW4gdXNlIGEgVmVjdG9yIHdpdGggQWJzb2x1dGVUbXBNYXBwZXIgaW5zdGVhZCBvZiBpdHMgSGFz
aE1hcC4gVGhlc2UgY2hhbmdlcyBhcmUgbm90IGp1c3QgbWVtb3J5IHNhdmluZ3MsIHRoZXkgYWxz
byBtYWtlIHNlbGVjdFNwaWxsIHdheSBmYXN0ZXIgKDU3MG1zIC0+IDI1MG1zIG9uIG15IG1hY2hp
bmUgb24gSmV0U3RyZWFtMikKKyAgICAgICAgLSBXaGlsZSBJIHdhcyBhdCBpdCwgSSBkaWQgYSBj
b3VwbGUgb2Ygb3RoZXIgdHdlYWtzIHRvIHRoZSBsb2dpYyBvZiBzZWxlY3RTcGlsbC4gSW4gcGFy
dGljdWxhciwgaW5zdGVhZCBvZiBoYXZpbmcgdG8gY2hlY2sgZm9yIGlzRmFzdFRtcCBldmVyeSB0
aW1lLCBJIGp1c3QgcHV0IHRoZSBmYXN0IHRtcHMgZGlyZWN0bHkgaW4gdW5zcGlsbGFibGVUbXBz
LCB3aGljaCBwcmV2ZW50cyB0aGVtIGZyb20gZ2V0dGluZyBhZGRlZCB0byBtX3NwaWxsV29ya2xp
c3QgaW4gdGhlIGZpcnN0IHBsYWNlLiBUaGlzICsgYSBiaXQgb2YgY2xlYW4tdXAgKGZvciBleGFt
cGxlIHB1dHRpbmcgYW4gZWFybHkgZXhpdCBpbnN0ZWFkIG9mIHNldHRpbmcgc2NvcmUgdG8gaW5m
aW5pdHkgaW4gdGhlIGNhc2Ugb2YgZGVhZCB0bXBzKSByZXN1bHRlZCBpbiBhIGZ1cnRoZXIgcGVy
ZiB3aW4gKHRvIHJvdWdobHkgMjAwbXMgc3BlbnQgaW4gc2VsZWN0U3BpbGwoKSBvbiBKZXRTdHJl
YW0yKQorCisgICAgICAgIEFsbCB0b2dldGhlciwgdGhpcyBwYXRjaCByZWR1Y2VzIHRoZSB0aW1l
IHNwZW50IGluIHRoZSByZWdpc3RlciBhbGxvY2F0b3IgYnkgcm91Z2hseSAxNSB0byAyMCUgaW4g
SmV0U3RyZWFtMiAodGVzdGVkIGJvdGggd2l0aCB0aGUgQnJpZ2dzIGFuZCB0aGUgSVJDIGFsbG9j
YXRvcnMgb24gbXkgTUJQIDIwMTkpLgorCisgICAgICAgIFNvIGZhciBJIGhhdmUgcGVyZm9ybWFu
Y2UgbnVtYmVycyBmb3IgdGhpcyBwYXRjaCBvbiBib3RoIGFuIGlQaG9uZSA3IGFuZCBhbiBpUGFk
IFBybyAyIChJJ2xsIHB1dCB0aGUgbnVtYmVycyBvbiBNYWMgaW4gdGhlIGJ1Z3ppbGxhIGlzc3Vl
IG9uY2UgdGhlIHBlcmZvcm1hbmNlIGJvdCBkZWlnbnMgdG8gZ2V0IHRvIGl0KS4KKyAgICAgICAg
T24gaVBob25lIDcsIHdlIHNlZSBhIDAuOTQlIGltcHJvdmVtZW50IHRvIHRoZSBKSVQgdGVzdHMg
c2VjdGlvbiBvZiBSQU1pZmljYXRpb24gKHA8MC4wMiksIHdpdGggdGhlIGZvbGxvd2luZyBzaWdu
aWZpY2FudCBzdWItcmVzdWx0czoKKyAgICAgICAgLSAxLjgyJSBiZXR0ZXIgb24gQWlyIChwPDAu
MDIpCisgICAgICAgIC0gMS4xOCUgYmV0dGVyIG9uIEJhc2ljIChwPDAuMDIpCisgICAgICAgIC0g
MS41OSUgYmV0dGVyIG9uIEJveDJEIChwPDAuMDIpCisgICAgICAgIC0gMC40MyUgYmV0dGVyIG9u
IEhhc2hTZXQtd2FzbSAocDwwLjA1KQorICAgICAgICAtIDAuNTIlIGJldHRlciBvbiBNTCAocDww
LjA1KQorICAgICAgICAtIDkuMzklIGJldHRlciBvbiBPZmZsaW5lQXNzZW1ibGVyIChwPDAuMDIp
CisgICAgICAgIC0gMi4xMyUgYmV0dGVyIG9uIGNyeXB0by1hZXMtU1AgKHA8MC4wMikKKyAgICAg
ICAgLSA1LjI5JSBiZXR0ZXIgb24gY3J5cHRvLW1kNS1TUCAocDwwLjAyKQorICAgICAgICAtIDEu
MDAlIGJldHRlciBvbiBjcnlwdG8tc2hhMS1TUCAocDwwLjA1KQorICAgICAgICAtIDAuOTclIGJl
dHRlciBvbiBkYXRlLWZvcm1hdC10b2Z0ZS1TUCAocDwwLjAyKQorICAgICAgICAtIDAuNzglIGJl
dHRlciBvbiBkYXRlLWZvcm1hdC14cGFyYi1TUCAocDwwLjAyKQorICAgICAgICAtIDEuNTUlIGJl
dHRlciBvbiBkZWx0YS1ibHVlIChwPDAuMDIpCisgICAgICAgIC0gMC4zNyUgYmV0dGVyIG9uIGdh
dXNzaWFuLWJsdXIgKHA8MC4wMikKKyAgICAgICAgLSA0LjExJSBiZXR0ZXIgb24gZ2NjLWxvb3Bz
LXdhc20gKHA8MC4wMikKKyAgICAgICAgLSA1LjE0JSBiZXR0ZXIgb24gcXVpY2tzb3J0LXdhc20g
KHA8MC4wMikKKyAgICAgICAgLSAyLjc0JSBiZXR0ZXIgb24gcmF5dHJhY2UgKHA8MC4wMikKKyAg
ICAgICAgLSA0LjUyJSBiZXR0ZXIgb24gcmVnZXhwIChwPDAuMDIpCisgICAgICAgIC0gMS4wMiUg
YmV0dGVyIG9uIGNyeXB0by1zdGFuZm9yZC1hZXMgKHA8MC4wMikKKyAgICAgICAgLSAxMC40MCUg
YmV0dGVyIG9uIHRzZi13YXNtIChwPDAuMDUpCisgICAgICAgIEFzIGV4cGVjdGVkLCB0aGVyZSBp
cyBubyBzdGF0aXN0aWNhbGx5IHNpZ25pZmljYW50IGVmZmVjdCBvbiB0aGUgbm9uLUpJVCBzZWN0
aW9ucyBvZiBSQU1pZmljYXRpb24uCisgICAgICAgIEFub3RoZXIgbG9naWNhbCBhbmQgZXhwZWN0
ZWQgcHJvcGVydHkgb2YgdGhlc2UgcmVzdWx0cyBpcyB0aGF0IHRoZSBsYXJnZXN0IHdpbnMgYXJl
IHRvIHBlYWsgbWVtb3J5IGFuZCBub3QgdG8gZW5kIG1lbW9yeSAoZS5nLiA4LjYzJSBmb3IgcGVh
ayByZWdleHAsIDUuNDglIGZvciBwZWFrIGdjYy1sb29wcy13YXNtLCAxMC43MCUgYmV0dGVyIGZv
ciBwZWFrIGNyeXB0by1tZDUtU1AsIDE3LjgzJSBiZXR0ZXIgZm9yIHBlYWsgT2ZmbGluZUFzc2Vt
YmxlciwgZXRjLi4pCisgICAgICAgIFRoZSByZXN1bHRzIG9uIGlQYWQgUHJvIDIgYXJlIHZlcnkg
c2ltaWxhcjogMS4yMCUgYmV0dGVyIChwPDAuMDIpIG9uIHRoZSBKSVQgdGVzdHMgb2YgUkFNaWZp
Y2F0aW9uLCB3aXRoIHRoZSBmb2xsb3dpbmcgc2lnbmlmaWNhbnQgc3ViLXJlc3VsdHM6CisgICAg
ICAgIC0gMS4yJSBiZXR0ZXIgb24gM2QtY3ViZS1TUCAocDwwLjA1KQorICAgICAgICAtIDAuNjcl
IGJldHRlciBvbiBiYXNpYyAocDwwLjAyKQorICAgICAgICAtIDEuNTclIGJldHRlciBvbiBCb3gy
RCAocDwwLjAyKQorICAgICAgICAtIDExLjMlIGJldHRlciBvbiBPZmZsaW5lQXNzZW1ibGVyIChw
PDAuMDIpLCAxOS4xMSUgYmV0dGVyIG9uIHBlYWsgbWVtb3J5CisgICAgICAgIC0gcmVncmVzc2lv
biBvZiAwLjQ0JSAocDwwLjA1KSBvbiBVbmlQb2tlcgorICAgICAgICAtIDEuNzQlIGJldHRlciBv
biBjcnlwdG8tYWVzLVNQIChwPDAuMDIpCisgICAgICAgIC0gNC43OSUgYmV0dGVyIG9uIGNyeXB0
by1tZDUtU1AgKHA8MC4wMiksIDEwLjM5JSBiZXR0ZXIgb24gcGVhayBtZW1vcnkKKyAgICAgICAg
LSAxLjYzJSBiZXR0ZXIgb24gY3J5cHRvLXNoYTEtU1AgKHA8MC4wMikKKyAgICAgICAgLSAwLjg1
JSBiZXR0ZXIgb24gZGF0YS1mb3JtYXQtdG9mdGUtU1AgKHA8MC4wMikKKyAgICAgICAgLSAyLjQ4
JSBiZXR0ZXIgb24gZGVsdGEtYmx1ZSAocDwwLjAyKQorICAgICAgICAtIDAuMzglIGJldHRlciBv
biBnYXVzc2lhbi1ibHVyIChwPDAuMDIpCisgICAgICAgIC0gMy42OCUgYmV0dGVyIG9uIGdjYy1s
b29wcy13YXNtIChwPDAuMDUpCisgICAgICAgIC0gMC42MiUgYmV0dGVyIG9uIG4tYm9keS1TUCAo
cDwwLjAyKQorICAgICAgICAtIDAuMTklIGJldHRlciBvbiBvY3RhbmUtY29kZS1sb2FkIChwPDAu
MDUpCisgICAgICAgIC0gMi45MyUgYmV0dGVyIG9uIHF1aWNrc29ydC13YXNtIChwPDAuMDIpCisg
ICAgICAgIC0gMy4xMiUgYmV0dGVyIG9uIHJheXRyYWNlIChwPDAuMDIpCisgICAgICAgIC0gMy44
MCUgYmV0dGVyIG9uIHJlZ2V4cCAocDwwLjAyKSwgNy40MCUgYmV0dGVyIG9uIHBlYWsgbWVtb3J5
CisgICAgICAgIC0gMC45MyUgYmV0dGVyIG9uIGNyeXB0by1zdGFuZm9yZC1hZXMgKHA8MC4wMikK
KyAgICAgICAgLSAyNi4wMiUgYmV0dGVyIG9uIHRzZi13YXNtIChwPDAuMDIpICEKKworICAgICAg
ICBNdWNoIG1vcmUgc3VycHJpc2luZ2x5IHRvIG1lLCB0aGUgaVBob25lIDcgYWxzbyBzaG93cyBh
IHNpZ25pZmljYW50IGltcHJvdmVtZW50IHRvIEpldFN0cmVhbSAyOiAxLjI3JSBiZXR0ZXIgKHA8
MC4wNSkuCisgICAgICAgIExvb2tpbmcgYXQgdGhlIHN1Yi10ZXN0cywgd2Ugc2VlIHRoZSBmb2xs
b3dpbmcgc2lnbmlmaWNhbnQgb25lczoKKyAgICAgICAgLSAxLjYzJSBiZXR0ZXIgb24gQm94MkQg
KHA8MC4wMikKKyAgICAgICAgLSAwLjc2JSBiZXR0ZXIgb24gV1NMIChwPDAuMDIpCisgICAgICAg
IC0gYSByZWdyZXNzaW9uIG9mIDIuNzElIG9uIGNyeXB0by1zaGExLVNQIChwPDAuMDUpCisgICAg
ICAgIC0gMi43OCUgYmV0dGVyIG9uIGdhdXNzaWFuLWJsdXIgKHA8MC4wMikKKyAgICAgICAgLSAz
LjUwJSBiZXR0ZXIgb24gZ2JlbXUgKHA8MC4wNSkKKyAgICAgICAgLSAxLjY0JSBiZXR0ZXIgb24g
anNoaW50LXd0YiAocDwwLjAyKQorICAgICAgICAtIDE5LjE5JSBiZXR0ZXIgb24gdGFnY2xvdWQt
U1AgKHA8MC4wMikKKyAgICAgICAgLSAxLjYxJSBiZXR0ZXIgb24gb2N0YW5lLXpsaWIgKHA8MC4w
NSkKKyAgICAgICAgVGhlIGlQYWQgUHJvIDIgc2hvd3Mgbm8gc2lnbmlmaWNhbnQgZWZmZWN0IG9u
IEpldFN0cmVhbSAyIGFzIGEgd2hvbGUsIGJ1dCBoYXMgc2lnbmlmaWNhbnQgZWZmZWN0cyBvbiB0
aGUgZm9sbG93aW5nIHN1Yi10ZXN0czoKKyAgICAgICAgLSAyLjIxJSBiZXR0ZXIgb24gQmFzaWMg
KHA8MC4wMikKKyAgICAgICAgLSAxLjA5JSBiZXR0ZXIgb24gTUwgKHA8MC4wNSkKKyAgICAgICAg
LSAwLjY1JSBiZXR0ZXIgb24gV1NMIChwPDAuMDIpCisgICAgICAgIC0gMS4xNCUgYmV0dGVyIG9u
IGRhdGEtZm9ybWF0LXRvZnRlLVNQIChwPDAuMDUpCisgICAgICAgIC0gMS4yMCUgYmV0dGVyIG9u
IGZpcnN0LWluc3BlY3Rvci1jb2RlLWxvYWQgKHA8MC4wMikKKyAgICAgICAgLSAxLjg5JSBiZXR0
ZXIgb24gZ2F1c3NpYW4tYmx1ciAocDwwLjAyKQorICAgICAgICAtIGEgcmVncmVzc2lvbiBvZiAy
LjAyJSBvbiByZWdleHAtZG5hLVNQIChwPDAuMDIpCisgICAgICAgIC0gNC45JSBiZXR0ZXIgb24g
dGFnY2xvdWQtU1AgKHA8MC4wMikKKyAgICAgICAgSSB0aGluayB0aGVyZSBpcyB0b28gbXVjaCBv
dmVybGFwIGluIHRoZXNlIHJlc3VsdHMgZm9yIHRoZW0gdG8gYmUgZHVlIHB1cmVseSB0byBjaGFu
Y2UsIGJ1dCB0aGVyZSBpcyBjbGVhcmx5IGEgbG90IG9mIG5vaXNlLCBhbmQgSSBleHBlY3QgdGhh
dCB0aGUgaVBob25lNyByZXN1bHRzIG1pZ2h0IGJlIGV4YWdlcmF0ZWQuCisgICAgICAgIE9uZSBt
b3JlIHJlYXNvbiBJIGJlbGlldmUgdGhlcmUgaXMgYSByZWFsIGVmZmVjdCBoZXJlIGFuZCBub3Qg
anVzdCBub2lzZSwgaXMgdGhhdCB0aGUgbGFyZ2VzdCB3aW5zIHdlcmUgdXN1YWxseSBvbiB0aGUg
YHdvcnN0IGl0ZXJhdGlvbmAgcGFydCBvZiB0aGUgc2NvcmVzLCBzbyBJIHN1c3BlY3QgdGhhdCB0
aGUgbWVtb3J5IHRyYWZmaWMgb2YgdGhlIHJlZ2lzdGVyIGFsbG9jYXRvciB3YXMgc29tZXRpbWVz
IHNsb3dpbmcgZG93biB0aGUgbWFpbiB0aHJlYWQsIHBvc3NpYmx5IHRocm91Z2ggY2FjaGUgZXZp
Y3Rpb25zLgorICAgICAgICBJIGNhbid0IGV4cGxhaW4gd2h5IHRhZ2Nsb3VkLVNQIHNob3dzIGxh
cmdlIHdpbnMgb24gSmV0U3RyZWFtMiBhbmQgbm8gd2luIGluIFJBTWlmaWNhdGlvbiB3aGVyZWFz
IHRzZi13YXNtIGlzIHRoZSBvcHBvc2l0ZS4KKworICAgICAgICAqIGIzL0IzUmVkdWNlTG9vcFN0
cmVuZ3RoLmNwcDoKKyAgICAgICAgKEpTQzo6QjM6OlJlZHVjZUxvb3BTdHJlbmd0aDo6cmVkdWNl
Qnl0ZUNvcHlMb29wc1RvTWVtY3B5KToKKyAgICAgICAgKiBiMy9haXIvQWlyQWxsb2NhdGVSZWdp
c3RlcnNCeUdyYXBoQ29sb3JpbmcuY3BwOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjphbGxvY2F0
ZVJlZ2lzdGVyc0J5R3JhcGhDb2xvcmluZyk6CisgICAgICAgICogYjMvYWlyL0FpckNvZGUuaDoK
KyAgICAgICAgKEpTQzo6QjM6OkFpcjo6Q29kZTo6Zm9yRWFjaEZhc3RUbXAgY29uc3QpOgorICAg
ICAgICAqIGIzL2Fpci9BaXJVc2VDb3VudHMuaDoKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6VXNl
Q291bnRzOjpVc2VDb3VudHMpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpVc2VDb3VudHM6Omlz
Q29uc3REZWYgY29uc3QpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpVc2VDb3VudHM6Om51bVdh
cm1Vc2VzQW5kRGVmcyBjb25zdCk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OlVzZUNvdW50czo6
ZHVtcCBjb25zdCk6CisgICAgICAgICogcGFyc2VyL05vZGVzLmg6CisKIDIwMjEtMDUtMTYgIE1h
cmsgTGFtICA8bWFyay5sYW1AYXBwbGUuY29tPgogCiAgICAgICAgIEltcGxlbWVudCBiYXNlbGlu
ZSBvcF9lbnRlciwgb3BfcmV0LCBvcF9jaGVja190cmFwcywgb3BfdGhyb3cgdXNpbmcgSklUIHRo
dW5rcy4KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1JlZHVjZUxvb3BT
dHJlbmd0aC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNSZWR1Y2VMb29wU3RyZW5n
dGguY3BwCmluZGV4IGM3OTdjZDZjMjZjOC4uNGE3NDhhNzY0MzU1IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYjMvQjNSZWR1Y2VMb29wU3RyZW5ndGguY3BwCisrKyBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1JlZHVjZUxvb3BTdHJlbmd0aC5jcHAKQEAgLTM2LDcgKzM2
LDcgQEAKICNpbmNsdWRlICJCM1BoYXNlU2NvcGUuaCIKICNpbmNsdWRlICJCM1Byb2NlZHVyZUlu
bGluZXMuaCIKICNpbmNsdWRlICJCM1ZhbHVlSW5saW5lcy5oIgotI2luY2x1ZGUgPHd0Zi9TbWFs
bFB0clNldC5oPgorI2luY2x1ZGUgPHd0Zi9TbWFsbFNldC5oPgogI2luY2x1ZGUgPHd0Zi9WZWN0
b3IuaD4KIAogbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CkBAIC0xNTksNyArMTU5LDcg
QEAgcHVibGljOgogICAgICAgICBCYXNpY0Jsb2NrKiBsb29wRm9vdCA9IG51bGxwdHI7CiAgICAg
ICAgIEJhc2ljQmxvY2sqIGxvb3BQcmVoZWFkZXIgPSBudWxscHRyOwogICAgICAgICBCYXNpY0Js
b2NrKiBsb29wUG9zdGZvb3RlciA9IG51bGxwdHI7Ci0gICAgICAgIFNtYWxsUHRyU2V0PEJhc2lj
QmxvY2sqPiBsb29wSW5uZXJCbG9ja3M7CisgICAgICAgIFNtYWxsU2V0PEJhc2ljQmxvY2sqPiBs
b29wSW5uZXJCbG9ja3M7CiAKICAgICAgICAgewogICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBp
ID0gMDsgaSA8IGxvb3AtPnNpemUoKTsgKytpKQpAQCAtMTcxLDggKzE3MSw4IEBAIHB1YmxpYzoK
ICAgICAgICAgICAgIGlmICghbG9vcElubmVyQmxvY2tzLmNvbnRhaW5zKHN0b3JlLT5vd25lcikp
CiAgICAgICAgICAgICAgICAgcmV0dXJuOwogCi0gICAgICAgICAgICBTbWFsbFB0clNldDxCYXNp
Y0Jsb2NrKj4gbG9vcEVudHJhbmNlczsKLSAgICAgICAgICAgIFNtYWxsUHRyU2V0PEJhc2ljQmxv
Y2sqPiBsb29wRXhpdHM7CisgICAgICAgICAgICBTbWFsbFNldDxCYXNpY0Jsb2NrKj4gbG9vcEVu
dHJhbmNlczsKKyAgICAgICAgICAgIFNtYWxsU2V0PEJhc2ljQmxvY2sqPiBsb29wRXhpdHM7CiAg
ICAgICAgICAgICBmb3IgKGF1dG8qIGJsb2NrIDogbG9vcElubmVyQmxvY2tzKSB7CiAgICAgICAg
ICAgICAgICAgZm9yIChhdXRvIHN1Y2Nlc3NvciA6IGJsb2NrLT5zdWNjZXNzb3JzKCkpIHsKICAg
ICAgICAgICAgICAgICAgICAgaWYgKCFsb29wSW5uZXJCbG9ja3MuY29udGFpbnMoc3VjY2Vzc29y
LmJsb2NrKCkpKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJB
bGxvY2F0ZVJlZ2lzdGVyc0J5R3JhcGhDb2xvcmluZy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvYjMvYWlyL0FpckFsbG9jYXRlUmVnaXN0ZXJzQnlHcmFwaENvbG9yaW5nLmNwcAppbmRleCBk
MDE2OWFlMDc0ZDcuLjk3ZTFhNDc4ZjQ4YyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2IzL2Fpci9BaXJBbGxvY2F0ZVJlZ2lzdGVyc0J5R3JhcGhDb2xvcmluZy5jcHAKKysrIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJBbGxvY2F0ZVJlZ2lzdGVyc0J5R3JhcGhD
b2xvcmluZy5jcHAKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE1LTIw
MjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE1
LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAog
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCkBAIC0zNyw2ICszNyw5IEBACiAjaW5jbHVkZSAiQWlyUGhhc2VTY29wZS5o
IgogI2luY2x1ZGUgIkFpclRtcFdpZHRoSW5saW5lcy5oIgogI2luY2x1ZGUgIkFpclVzZUNvdW50
cy5oIgorI2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+CisjaW5jbHVkZSA8d3RmL1NtYWxsU2V0Lmg+
CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogCiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIz
IHsgbmFtZXNwYWNlIEFpciB7CiAKQEAgLTQ2LDEwNCArNDksMjA5IEBAIHN0YXRpYyBjb25zdGV4
cHIgYm9vbCBkZWJ1ZyA9IGZhbHNlOwogc3RhdGljIGNvbnN0ZXhwciBib29sIHRyYWNlRGVidWcg
PSBmYWxzZTsKIHN0YXRpYyBjb25zdGV4cHIgYm9vbCByZXBvcnRTdGF0cyA9IGZhbHNlOwogCi0v
LyBJbnRlcmZlcmVuY2UgZWRnZXMgYXJlIG5vdCBkaXJlY3RlZC4gQW4gZWRnZSBiZXR3ZWVuIGFu
eSB0d28gVG1wcyBpcyByZXByZXNlbnRlZAotLy8gYnkgdGhlIGNvbmNhdGVuYXRlZCB2YWx1ZXMg
b2YgdGhlIHNtYWxsZXN0IFRtcCBmb2xsb3dlZCBieSB0aGUgYmlnZ2VyIFRtcC4KLS8vIFdlIGhh
dmUgYSB0ZW1wbGF0ZWQgdmVyc2lvbiB0byBzdXBwb3J0IDE2IGJpdCBhbmQgYSAzMiBiaXQgaW1w
bGVtZW50YXRpb25zCi0vLyBzaW5jZSB0aGUgbnVtYmVyIG9mIGVudHJpZXMgaW4gYW4gaW50ZXJm
ZXJlbmNlIHRhYmxlIGlzIE8oTl4yKS4KLS8vIEluIG1vc3QgY2FzZXMsIHdlIHVzZSB0aGUgMTYg
Yml0IGZsYXZvciwgdGh1cyBzYXZpbmcgaGFsZiB0aGUgbWVtb3J5Ci0vLyB3aXRoIGEgc2luZ2xl
IGltcGxlbWVudGF0aW9uLgotdGVtcGxhdGUgPHR5cGVuYW1lIEluZGV4SW1wbFR5cGUsIHR5cGVu
YW1lIFBhaXJTdG9yYWdlVHlwZT4KLWNsYXNzIEludGVyZmVyZW5jZUVkZ2UgewotICAgIHN0YXRp
Y19hc3NlcnQoc2l6ZW9mKEluZGV4SW1wbFR5cGUpICogMiA9PSBzaXplb2YoUGFpclN0b3JhZ2VU
eXBlKSk7Ci0gICAgY29uc3QgdW5zaWduZWQgU2hpZnRBbW91bnQgPSBzaXplb2YoSW5kZXhJbXBs
VHlwZSkgKiA4OwotICAgIGNvbnN0IFBhaXJTdG9yYWdlVHlwZSBJbmRleE1hc2sgPSBzdGQ6Om51
bWVyaWNfbGltaXRzPEluZGV4SW1wbFR5cGU+OjptYXgoKTsKK3RlbXBsYXRlIDx0eXBlbmFtZSBJ
bmRleFR5cGU+CitjbGFzcyBJbnRlcmZlcmVuY2VIYXNoU2V0IHsKK3B1YmxpYzoKKyAgICBib29s
IGNvbnRhaW5zKEluZGV4VHlwZSB1LCBJbmRleFR5cGUgdikKKyAgICB7CisgICAgICAgIGlmICh2
IDwgdSkKKyAgICAgICAgICAgIHN0ZDo6c3dhcCh1LCB2KTsKKyAgICAgICAgcmV0dXJuIG1fc2V0
LmNvbnRhaW5zKHsgdSwgdiB9KTsKKyAgICB9CiAKLXByb3RlY3RlZDoKLSAgICB1c2luZyBJbmRl
eFR5cGUgPSB1bnNpZ25lZDsKKyAgICBib29sIGFkZEFuZFJldHVybklzTmV3RW50cnkoSW5kZXhU
eXBlIHUsIEluZGV4VHlwZSB2KQorICAgIHsKKyAgICAgICAgaWYgKHYgPCB1KQorICAgICAgICAg
ICAgc3RkOjpzd2FwKHUsIHYpOworICAgICAgICByZXR1cm4gbV9zZXQuYWRkKHsgdSwgdiB9KS5p
c05ld0VudHJ5OworICAgIH0KKworICAgIHZvaWQgY2xlYXIoKQorICAgIHsKKyAgICAgICAgbV9z
ZXQuY2xlYXIoKTsKKyAgICB9CiAKKyAgICB2b2lkIHNldE1heFRtcEluZGV4KHVuc2lnbmVkIG4p
CisgICAgeworICAgICAgICBBU1NFUlRfVU5VU0VEKG4sIG4gPCBzdGQ6Om51bWVyaWNfbGltaXRz
PEluZGV4VHlwZT46Om1heCgpKTsKKyAgICB9CisKKyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgRnVu
Y3Rvcj4KKyAgICB2b2lkIGZvckVhY2goY29uc3QgRnVuY3RvciYgZnVuY3RvcikKKyAgICB7Cisg
ICAgICAgIGZvciAoYXV0byBlZGdlIDogbV9zZXQpCisgICAgICAgICAgICBmdW5jdG9yKGVkZ2Up
OworICAgIH0KKworICAgIHVuc2lnbmVkIHNpemUoKSBjb25zdCB7IHJldHVybiBtX3NldC5zaXpl
KCk7IH0KKworcHJpdmF0ZToKKyAgICAvLyBJbnRlcmZlcmVuY2UgZWRnZXMgYXJlIG5vdCBkaXJl
Y3RlZC4gQW4gZWRnZSBiZXR3ZWVuIGFueSB0d28gVG1wcyBpcyByZXByZXNlbnRlZAorICAgIC8v
IGJ5IHRoZSBjb25jYXRlbmF0ZWQgdmFsdWVzICh0aHJvdWdoIFRtcE1hcHBlcikgb2YgdGhlIHNt
YWxsZXN0IFRtcCBmb2xsb3dlZCBieSB0aGUgYmlnZ2VyIFRtcC4KKyAgICBIYXNoU2V0PHN0ZDo6
cGFpcjxJbmRleFR5cGUsIEluZGV4VHlwZT4gPiBtX3NldDsKK307CisKK3RlbXBsYXRlIDx0eXBl
bmFtZSBULCB0eXBlbmFtZSBJbmRleFR5cGU+CitjbGFzcyBJbnRlcmZlcmVuY2VWZWN0b3Igewog
cHVibGljOgotICAgIHN0cnVjdCBJbnRlcmZlcmVuY2VFZGdlSGFzaCB7Ci0gICAgICAgIHN0YXRp
YyB1bnNpZ25lZCBoYXNoKGNvbnN0IEludGVyZmVyZW5jZUVkZ2U8SW5kZXhJbXBsVHlwZSwgUGFp
clN0b3JhZ2VUeXBlPiYga2V5KSB7IHJldHVybiBrZXkuaGFzaCgpOyB9Ci0gICAgICAgIHN0YXRp
YyBib29sIGVxdWFsKGNvbnN0IEludGVyZmVyZW5jZUVkZ2U8SW5kZXhJbXBsVHlwZSwgUGFpclN0
b3JhZ2VUeXBlPiYgYSwgY29uc3QgSW50ZXJmZXJlbmNlRWRnZTxJbmRleEltcGxUeXBlLCBQYWly
U3RvcmFnZVR5cGU+JiBiKSB7IHJldHVybiBhID09IGI7IH0KLSAgICAgICAgc3RhdGljIGNvbnN0
ZXhwciBib29sIHNhZmVUb0NvbXBhcmVUb0VtcHR5T3JEZWxldGVkID0gdHJ1ZTsKLSAgICB9Owot
ICAgIHR5cGVkZWYgU2ltcGxlQ2xhc3NIYXNoVHJhaXRzPEludGVyZmVyZW5jZUVkZ2U8SW5kZXhJ
bXBsVHlwZSwgUGFpclN0b3JhZ2VUeXBlPj4gSW50ZXJmZXJlbmNlRWRnZUhhc2hUcmFpdHM7Cisg
ICAgYm9vbCBjb250YWlucyhJbmRleFR5cGUgdSwgSW5kZXhUeXBlIHYpCisgICAgeworICAgICAg
ICBpZiAodiA8IHUpCisgICAgICAgICAgICBzdGQ6OnN3YXAodSwgdik7CisgICAgICAgIHJldHVy
biBtX3ZlY3Rvclt1XS5jb250YWlucyh2KTsKKyAgICB9CiAKLSAgICB0eXBlZGVmIEhhc2hTZXQ8
SW50ZXJmZXJlbmNlRWRnZTxJbmRleEltcGxUeXBlLCBQYWlyU3RvcmFnZVR5cGU+LCBJbnRlcmZl
cmVuY2VFZGdlSGFzaCwgSW50ZXJmZXJlbmNlRWRnZUhhc2hUcmFpdHM+IEludGVyZmVyZW5jZVNl
dDsKKyAgICBib29sIGFkZEFuZFJldHVybklzTmV3RW50cnkoSW5kZXhUeXBlIHUsIEluZGV4VHlw
ZSB2KQorICAgIHsKKyAgICAgICAgaWYgKHYgPCB1KQorICAgICAgICAgICAgc3RkOjpzd2FwKHUs
IHYpOworICAgICAgICBib29sIGlzTmV3RW50cnkgPSBtX3ZlY3Rvclt1XS5hZGQodikuaXNOZXdF
bnRyeTsKKyAgICAgICAgbV9zaXplICs9IGlzTmV3RW50cnk7CisgICAgICAgIHJldHVybiBpc05l
d0VudHJ5OworICAgIH0KKworICAgIHZvaWQgY2xlYXIoKQorICAgIHsKKyAgICAgICAgbV92ZWN0
b3IuY2xlYXIoKTsKKyAgICAgICAgbV9zaXplID0gMDsKKyAgICB9CisKKyAgICB2b2lkIHNldE1h
eFRtcEluZGV4KHVuc2lnbmVkIG4pCisgICAgeworICAgICAgICBBU1NFUlQobiA8IHN0ZDo6bnVt
ZXJpY19saW1pdHM8SW5kZXhUeXBlPjo6bWF4KCkpOworICAgICAgICBtX3ZlY3Rvci5yZXNpemUo
bik7CisgICAgfQogCi0gICAgSW50ZXJmZXJlbmNlRWRnZSgpCisgICAgdGVtcGxhdGUgPHR5cGVu
YW1lIEZ1bmN0b3I+CisgICAgdm9pZCBmb3JFYWNoKGNvbnN0IEZ1bmN0b3ImIGZ1bmN0b3IpCiAg
ICAgeworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV92ZWN0b3Iuc2l6ZSgpIDsg
KytpKSB7CisgICAgICAgICAgICBmb3IgKEluZGV4VHlwZSBqIDogbV92ZWN0b3JbaV0pCisgICAg
ICAgICAgICAgICAgZnVuY3Rvcih7IGksIGogfSk7CisgICAgICAgIH0KICAgICB9CiAKLSAgICBJ
bnRlcmZlcmVuY2VFZGdlKEluZGV4VHlwZSBhLCBJbmRleFR5cGUgYikKKyAgICB1bnNpZ25lZCBz
aXplKCkgY29uc3QgeyByZXR1cm4gbV9zaXplOyB9CisKK3ByaXZhdGU6CisgICAgVmVjdG9yPFQ+
IG1fdmVjdG9yOworICAgIHVuc2lnbmVkIG1fc2l6ZSB7MH07Cit9OworCit0ZW1wbGF0ZSA8dHlw
ZW5hbWUgSW5kZXhUeXBlPgorY2xhc3MgSW50ZXJmZXJlbmNlQml0VmVjdG9yIHsKK3B1YmxpYzoK
KyAgICBib29sIGNvbnRhaW5zKEluZGV4VHlwZSB1LCBJbmRleFR5cGUgdikKICAgICB7Ci0gICAg
ICAgIEFTU0VSVChhKTsKLSAgICAgICAgQVNTRVJUKGIpOwotICAgICAgICBBU1NFUlQoYSA8IHN0
ZDo6bnVtZXJpY19saW1pdHM8SW5kZXhJbXBsVHlwZT46Om1heCgpKTsKLSAgICAgICAgQVNTRVJU
KGIgPCBzdGQ6Om51bWVyaWNfbGltaXRzPEluZGV4SW1wbFR5cGU+OjptYXgoKSk7Ci0gICAgICAg
IEFTU0VSVF9XSVRIX01FU1NBR0UoYSAhPSBiLCAiQSBUbXAgY2FuIG5ldmVyIGludGVyZmVyZSB3
aXRoIGl0c2VsZi4gRG9pbmcgc28gd291bGQgZm9yY2UgaXQgdG8gYmUgdGhlIHN1cGVycG9zaXRp
b24gb2YgdHdvIHJlZ2lzdGVycy4iKTsKKyAgICAgICAgcmV0dXJuIG1fYml0VmVjdG9yLnF1aWNr
R2V0KGluZGV4KHUsIHYpKTsKKyAgICB9CiAKLSAgICAgICAgaWYgKGIgPCBhKQotICAgICAgICAg
ICAgc3RkOjpzd2FwKGEsIGIpOwotICAgICAgICBtX3ZhbHVlID0gc3RhdGljX2Nhc3Q8UGFpclN0
b3JhZ2VUeXBlPihhKSA8PCBTaGlmdEFtb3VudCB8IGI7CisgICAgYm9vbCBhZGRBbmRSZXR1cm5J
c05ld0VudHJ5KEluZGV4VHlwZSB1LCBJbmRleFR5cGUgdikKKyAgICB7CisgICAgICAgIC8vIE5v
dGU6IHdlIGNvdWxkIGRvIG9ubHkgb25lIHF1aWNrU2V0LCBhdCB0aGUgY29zdCBvZiBvbmUgZXh0
cmEgYnJhbmNoIGluIGV2ZXJ5IGNvbnRhaW5zL2FkZEFuZFJldHVybklzTmV3RW50cnkgKHRvIGVu
Zm9yY2UgdSA8IHYpCisgICAgICAgIGJvb2wgYWxyZWFkeUluID0gbV9iaXRWZWN0b3IucXVpY2tT
ZXQoaW5kZXgodSwgdikpOworICAgICAgICBib29sIGFscmVhZHlJbjIgPSBtX2JpdFZlY3Rvci5x
dWlja1NldChpbmRleCh2LCB1KSk7CisgICAgICAgIEFTU0VSVF9VTlVTRUQoYWxyZWFkeUluMiwg
YWxyZWFkeUluID09IGFscmVhZHlJbjIpOworICAgICAgICBtX3NpemUgKz0gIWFscmVhZHlJbjsK
KyAgICAgICAgcmV0dXJuICFhbHJlYWR5SW47CiAgICAgfQogCi0gICAgSW50ZXJmZXJlbmNlRWRn
ZShjb25zdCBJbnRlcmZlcmVuY2VFZGdlPEluZGV4SW1wbFR5cGUsIFBhaXJTdG9yYWdlVHlwZT4m
IG90aGVyKQotICAgICAgICA6IG1fdmFsdWUob3RoZXIubV92YWx1ZSkKKyAgICB2b2lkIGNsZWFy
KCkKICAgICB7CisgICAgICAgIG1fYml0VmVjdG9yLmNsZWFyQWxsKCk7CisgICAgICAgIG1fc2l6
ZSA9IDA7CiAgICAgfQogCisgICAgdm9pZCBzZXRNYXhUbXBJbmRleCh1bnNpZ25lZCBuKQorICAg
IHsKKyAgICAgICAgQVNTRVJUKG4gPCBzdGQ6Om51bWVyaWNfbGltaXRzPEluZGV4VHlwZT46Om1h
eCgpKTsKKyAgICAgICAgbV9udW1UbXBzID0gbjsKKyAgICAgICAgbV9iaXRWZWN0b3IuZW5zdXJl
U2l6ZShuKm4pOworICAgIH0KIAotICAgIEludGVyZmVyZW5jZUVkZ2UoV1RGOjpIYXNoVGFibGVE
ZWxldGVkVmFsdWVUeXBlKQotICAgICAgICA6IG1fdmFsdWUoc3RkOjpudW1lcmljX2xpbWl0czxQ
YWlyU3RvcmFnZVR5cGU+OjptYXgoKSkKKyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgRnVuY3Rvcj4K
KyAgICB2b2lkIGZvckVhY2goY29uc3QgRnVuY3RvciYgZnVuY3RvcikKICAgICB7CisgICAgICAg
IGZvciAoSW5kZXhUeXBlIGkgPSAwOyBpIDwgbV9udW1UbXBzOyArK2kpIHsKKyAgICAgICAgICAg
IGZvciAoSW5kZXhUeXBlIGogPSBpICsgMTsgaiA8IG1fbnVtVG1wczsgKytqKSB7CisgICAgICAg
ICAgICAgICAgaWYgKG1fYml0VmVjdG9yLnF1aWNrR2V0KGluZGV4KGksIGopKSkKKyAgICAgICAg
ICAgICAgICAgICAgZnVuY3Rvcih7IGksIGogfSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0K
ICAgICB9CiAKLSAgICBJbmRleFR5cGUgZmlyc3QoKSBjb25zdAorICAgIHVuc2lnbmVkIHNpemUo
KSBjb25zdCB7IHJldHVybiBtX3NpemU7IH0KKworcHJpdmF0ZToKKyAgICB1bnNpZ25lZCBpbmRl
eChJbmRleFR5cGUgaSwgSW5kZXhUeXBlIGopCiAgICAgewotICAgICAgICByZXR1cm4gbV92YWx1
ZSA+PiBTaGlmdEFtb3VudCAmIEluZGV4TWFzazsKKyAgICAgICAgcmV0dXJuIGkgKiBtX251bVRt
cHMgKyBqOwogICAgIH0KIAotICAgIEluZGV4VHlwZSBzZWNvbmQoKSBjb25zdAorICAgIEJpdFZl
Y3RvciBtX2JpdFZlY3RvcjsKKyAgICB1bnNpZ25lZCBtX3NpemUgezB9OworICAgIEluZGV4VHlw
ZSBtX251bVRtcHM7Cit9OworCisjZGVmaW5lIFRFU1RfSU5URVJGRVJFTkNFX1NNQUxMX1NFVF9W
RUNUT1IgMAorI2lmIFRFU1RfSU5URVJGRVJFTkNFX1NNQUxMX1NFVF9WRUNUT1IKK3RlbXBsYXRl
IDx0eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBJbmRleFR5cGU+CitjbGFzcyBJbnN0
cnVtZW50ZWRJbnRlcmZlcmVuY2VHcmFwaCB7CitwdWJsaWM6CisgICAgYm9vbCBjb250YWlucyhJ
bmRleFR5cGUgdSwgSW5kZXhUeXBlIHYpCiAgICAgewotICAgICAgICByZXR1cm4gbV92YWx1ZSAm
IEluZGV4TWFzazsKKyAgICAgICAgYm9vbCBjb250YWluc0luQSA9IG1fc2V0QS5jb250YWlucyh1
LCB2KTsKKyAgICAgICAgYm9vbCBjb250YWluc0luQiA9IG1fc2V0Qi5jb250YWlucyh1LCB2KTsK
KyAgICAgICAgUkVMRUFTRV9BU1NFUlQoY29udGFpbnNJbkEgPT0gY29udGFpbnNJbkIpOworICAg
ICAgICByZXR1cm4gY29udGFpbnNJbkE7CiAgICAgfQogCi0gICAgYm9vbCBvcGVyYXRvcj09KGNv
bnN0IEludGVyZmVyZW5jZUVkZ2UmIG90aGVyKSBjb25zdAorICAgIGJvb2wgYWRkQW5kUmV0dXJu
SXNOZXdFbnRyeShJbmRleFR5cGUgdSwgSW5kZXhUeXBlIHYpCiAgICAgewotICAgICAgICByZXR1
cm4gbV92YWx1ZSA9PSBvdGhlci5tX3ZhbHVlOworICAgICAgICBib29sIGlzTmV3RW50cnlBID0g
bV9zZXRBLmFkZEFuZFJldHVybklzTmV3RW50cnkodSwgdik7CisgICAgICAgIGJvb2wgaXNOZXdF
bnRyeUIgPSBtX3NldEIuYWRkQW5kUmV0dXJuSXNOZXdFbnRyeSh1LCB2KTsKKyAgICAgICAgUkVM
RUFTRV9BU1NFUlQoaXNOZXdFbnRyeUEgPT0gaXNOZXdFbnRyeUIpOworICAgICAgICByZXR1cm4g
aXNOZXdFbnRyeUE7CiAgICAgfQogCi0gICAgSW50ZXJmZXJlbmNlRWRnZSYgb3BlcmF0b3I9KGNv
bnN0IEludGVyZmVyZW5jZUVkZ2UmIG90aGVyKQorICAgIHZvaWQgY2xlYXIoKQogICAgIHsKLSAg
ICAgICAgbV92YWx1ZSA9IG90aGVyLm1fdmFsdWU7Ci0gICAgICAgIHJldHVybiAqdGhpczsKKyAg
ICAgICAgbV9zZXRBLmNsZWFyKCk7CisgICAgICAgIG1fc2V0Qi5jbGVhcigpOwogICAgIH0KLSAg
ICBib29sIGlzSGFzaFRhYmxlRGVsZXRlZFZhbHVlKCkgY29uc3QKKworICAgIHZvaWQgc2V0TWF4
VG1wSW5kZXgodW5zaWduZWQgbikKICAgICB7Ci0gICAgICAgIHJldHVybiAqdGhpcyA9PSBJbnRl
cmZlcmVuY2VFZGdlKFdURjo6SGFzaFRhYmxlRGVsZXRlZFZhbHVlKTsKKyAgICAgICAgbV9zZXRB
LnNldE1heFRtcEluZGV4KG4pOworICAgICAgICBtX3NldEIuc2V0TWF4VG1wSW5kZXgobik7CiAg
ICAgfQogCi0gICAgdW5zaWduZWQgaGFzaCgpIGNvbnN0CisgICAgdGVtcGxhdGUgPHR5cGVuYW1l
IEZ1bmN0b3I+CisgICAgdm9pZCBmb3JFYWNoKGNvbnN0IEZ1bmN0b3ImIGZ1bmN0b3IpCiAgICAg
ewotICAgICAgICByZXR1cm4gV1RGOjpJbnRIYXNoPFBhaXJTdG9yYWdlVHlwZT46Omhhc2gobV92
YWx1ZSk7CisgICAgICAgIG1fc2V0QS5mb3JFYWNoKGZ1bmN0b3IpOwogICAgIH0KIAotICAgIHZv
aWQgZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAorICAgIHVuc2lnbmVkIHNpemUoKSBjb25z
dAogICAgIHsKLSAgICAgICAgb3V0LnByaW50KGZpcnN0KCksICI8PT4iLCBzZWNvbmQoKSk7Cisg
ICAgICAgIHVuc2lnbmVkIHNpemVBID0gbV9zZXRBLnNpemUoKTsKKyAgICAgICAgdW5zaWduZWQg
c2l6ZUIgPSBtX3NldEIuc2l6ZSgpOworICAgICAgICBSRUxFQVNFX0FTU0VSVChzaXplQSA9PSBz
aXplQik7CisgICAgICAgIHJldHVybiBzaXplQTsKICAgICB9CiAKIHByaXZhdGU6Ci0gICAgUGFp
clN0b3JhZ2VUeXBlIG1fdmFsdWUgeyAwIH07CisgICAgVCBtX3NldEE7CisgICAgVSBtX3NldEI7
CiB9OworI2VuZGlmCiAKIC8vIFRoZSBBYnN0cmFjdENvbG9yaW5nQWxsb2NhdG9yIGRlZmluZXMg
YWxsIHRoZSBjb2RlIHRoYXQgaXMgaW5kZXBlbmRhbnQKIC8vIGZyb20gdGhlIGJhbmsgb3IgcmVn
aXN0ZXIgYW5kIGNhbiBiZSBzaGFyZWQgd2hlbiBhbGxvY2F0aW5nIHJlZ2lzdGVycy4KLXRlbXBs
YXRlPHR5cGVuYW1lIEluZGV4VHlwZSwgdHlwZW5hbWUgVG1wTWFwcGVyLCB0eXBlbmFtZSBJbnRl
cmZlcmVuY2VFZGdlVHlwZT4KK3RlbXBsYXRlPHR5cGVuYW1lIEluZGV4VHlwZSwgdHlwZW5hbWUg
SW50ZXJmZXJlbmNlU2V0LCBCYW5rIGJhbms+CiBjbGFzcyBBYnN0cmFjdENvbG9yaW5nQWxsb2Nh
dG9yIHsKIHB1YmxpYzoKLSAgICBBYnN0cmFjdENvbG9yaW5nQWxsb2NhdG9yKENvZGUmIGNvZGUs
IGNvbnN0IFZlY3RvcjxSZWc+JiByZWdzSW5Qcmlvcml0eU9yZGVyLCBJbmRleFR5cGUgbGFzdFBy
ZWNvbG9yZWRSZWdpc3RlckluZGV4LCB1bnNpZ25lZCB0bXBBcnJheVNpemUsIGNvbnN0IEhhc2hT
ZXQ8dW5zaWduZWQ+JiB1bnNwaWxsYWJsZVRtcHMsIGNvbnN0IFVzZUNvdW50czxUbXA+JiB1c2VD
b3VudHMpCisgICAgQWJzdHJhY3RDb2xvcmluZ0FsbG9jYXRvcihDb2RlJiBjb2RlLCBjb25zdCBW
ZWN0b3I8UmVnPiYgcmVnc0luUHJpb3JpdHlPcmRlciwgSW5kZXhUeXBlIGxhc3RQcmVjb2xvcmVk
UmVnaXN0ZXJJbmRleCwgdW5zaWduZWQgdG1wQXJyYXlTaXplLCBjb25zdCBCaXRWZWN0b3ImIHVu
c3BpbGxhYmxlVG1wcywgY29uc3QgVXNlQ291bnRzJiB1c2VDb3VudHMpCiAgICAgICAgIDogbV9y
ZWdzSW5Qcmlvcml0eU9yZGVyKHJlZ3NJblByaW9yaXR5T3JkZXIpCiAgICAgICAgICwgbV9sYXN0
UHJlY29sb3JlZFJlZ2lzdGVySW5kZXgobGFzdFByZWNvbG9yZWRSZWdpc3RlckluZGV4KQogICAg
ICAgICAsIG1fdW5zcGlsbGFibGVUbXBzKHVuc3BpbGxhYmxlVG1wcykKQEAgLTE2MCw2ICsyNjgs
MTQgQEAgcHVibGljOgogICAgIH0KIAogcHJvdGVjdGVkOgorICAgIHVzaW5nIFRtcE1hcHBlciA9
IEFic29sdXRlVG1wTWFwcGVyPGJhbms+OworCisgICAgSW5kZXhUeXBlIHRtcFRvSW5kZXgoVG1w
IHRtcCkgY29uc3QKKyAgICB7CisgICAgICAgIHVuc2lnbmVkIGluZGV4ID0gVG1wTWFwcGVyOjph
YnNvbHV0ZUluZGV4KHRtcCk7CisgICAgICAgIEFTU0VSVChzdGQ6Om51bWVyaWNfbGltaXRzPElu
ZGV4VHlwZT46Om1heCgpID4gaW5kZXgpOworICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8SW5k
ZXhUeXBlPihpbmRleCk7CisgICAgfQogCiAgICAgdW5zaWduZWQgcmVnaXN0ZXJDb3VudCgpIGNv
bnN0IHsgcmV0dXJuIG1fcmVnc0luUHJpb3JpdHlPcmRlci5zaXplKCk7IH0KIApAQCAtMTgwLDcg
KzI5Niw3IEBAIHByb3RlY3RlZDoKIAogICAgIHZvaWQgYWRkVG9TcGlsbCh1bnNpZ25lZCB0b1Nw
aWxsKQogICAgIHsKLSAgICAgICAgaWYgKG1fdW5zcGlsbGFibGVUbXBzLmNvbnRhaW5zKHRvU3Bp
bGwpKQorICAgICAgICBpZiAobV91bnNwaWxsYWJsZVRtcHMucXVpY2tHZXQodG9TcGlsbCkpCiAg
ICAgICAgICAgICByZXR1cm47CiAKICAgICAgICAgbV9zcGlsbFdvcmtsaXN0LmFkZCh0b1NwaWxs
KTsKQEAgLTE5OCwxNSArMzE0LDE1IEBAIHByb3RlY3RlZDoKICAgICAgICAgLy8gQWxsIHByZWNv
bG9yZWQgcmVnaXN0ZXJzIGhhdmUgIGFuICJpbmZpbml0ZSIgZGVncmVlLgogICAgICAgICB1bnNp
Z25lZCBmaXJzdE5vblJlZ0luZGV4ID0gbV9sYXN0UHJlY29sb3JlZFJlZ2lzdGVySW5kZXggKyAx
OwogICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgZmlyc3ROb25SZWdJbmRleDsgKytp
KQotICAgICAgICAgICAgbV9kZWdyZWVzW2ldID0gc3RkOjpudW1lcmljX2xpbWl0czx1bnNpZ25l
ZD46Om1heCgpOworICAgICAgICAgICAgbV9kZWdyZWVzW2ldID0gc3RkOjpudW1lcmljX2xpbWl0
czxJbmRleFR5cGU+OjptYXgoKTsKIAotICAgICAgICBtZW1zZXQobV9kZWdyZWVzLmRhdGEoKSAr
IGZpcnN0Tm9uUmVnSW5kZXgsIDAsICh0bXBBcnJheVNpemUgLSBmaXJzdE5vblJlZ0luZGV4KSAq
IHNpemVvZih1bnNpZ25lZCkpOworICAgICAgICBtZW1zZXQobV9kZWdyZWVzLmRhdGEoKSArIGZp
cnN0Tm9uUmVnSW5kZXgsIDAsICh0bXBBcnJheVNpemUgLSBmaXJzdE5vblJlZ0luZGV4KSAqIHNp
emVvZihJbmRleFR5cGUpKTsKICAgICB9CiAKICAgICB2b2lkIGFkZEVkZ2VEaXN0aW5jdChJbmRl
eFR5cGUgYSwgSW5kZXhUeXBlIGIpCiAgICAgewogICAgICAgICBBU1NFUlQoYSAhPSBiKTsKLSAg
ICAgICAgYm9vbCBpc05ld0VkZ2UgPSBhZGRJbnRlcmZlcmVuY2VFZGdlKEludGVyZmVyZW5jZUVk
Z2VUeXBlKGEsIGIpKTsKKyAgICAgICAgYm9vbCBpc05ld0VkZ2UgPSBhZGRJbnRlcmZlcmVuY2VF
ZGdlKGEsIGIpOwogICAgICAgICBpZiAoaXNOZXdFZGdlKSB7CiAgICAgICAgICAgICBpZiAoIWlz
UHJlY29sb3JlZChhKSkgewogICAgICAgICAgICAgICAgIEFTU0VSVCghbV9hZGphY2VuY3lMaXN0
W2FdLmNvbnRhaW5zKGIpKTsKQEAgLTIyNSw3ICszNDEsNyBAQCBwcm90ZWN0ZWQ6CiAgICAgYm9v
bCBhZGRFZGdlRGlzdGluY3RXaXRob3V0RGVncmVlQ2hhbmdlKEluZGV4VHlwZSBhLCBJbmRleFR5
cGUgYikKICAgICB7CiAgICAgICAgIEFTU0VSVChhICE9IGIpOwotICAgICAgICBib29sIGlzTmV3
RWRnZSA9IGFkZEludGVyZmVyZW5jZUVkZ2UoSW50ZXJmZXJlbmNlRWRnZVR5cGUoYSwgYikpOwor
ICAgICAgICBib29sIGlzTmV3RWRnZSA9IGFkZEludGVyZmVyZW5jZUVkZ2UoYSwgYik7CiAgICAg
ICAgIGlmIChpc05ld0VkZ2UpIHsKICAgICAgICAgICAgIGlmICghaXNQcmVjb2xvcmVkKGEpKSB7
CiAgICAgICAgICAgICAgICAgQVNTRVJUKCFtX2FkamFjZW5jeUxpc3RbYV0uY29udGFpbnMoYikp
OwpAQCAtMzQwLDcgKzQ1Niw3IEBAIHByb3RlY3RlZDoKICAgICAgICAgICAgIGlmICghaXNQcmVj
b2xvcmVkKGFkamFjZW50VG1wSW5kZXgpCiAgICAgICAgICAgICAgICAgJiYgIWhhc0JlZW5TaW1w
bGlmaWVkKGFkamFjZW50VG1wSW5kZXgpCiAgICAgICAgICAgICAgICAgJiYgbV9kZWdyZWVzW2Fk
amFjZW50VG1wSW5kZXhdID49IHJlZ2lzdGVyQ291bnQoKQotICAgICAgICAgICAgICAgICYmICFo
YXNJbnRlcmZlcmVuY2VFZGdlKEludGVyZmVyZW5jZUVkZ2VUeXBlKHUsIGFkamFjZW50VG1wSW5k
ZXgpKSkKKyAgICAgICAgICAgICAgICAmJiAhaGFzSW50ZXJmZXJlbmNlRWRnZSh1LCBhZGphY2Vu
dFRtcEluZGV4KSkKICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIH0KICAg
ICAgICAgcmV0dXJuIHRydWU7CkBAIC0zNzUsNTIgKzQ5MSw0MCBAQCBwcm90ZWN0ZWQ6CiAgICAg
ICAgIGF1dG8gaXRlcmF0b3IgPSBtX3NwaWxsV29ya2xpc3QuYmVnaW4oKTsKIAogICAgICAgICBS
RUxFQVNFX0FTU0VSVF9XSVRIX01FU1NBR0UoaXRlcmF0b3IgIT0gbV9zcGlsbFdvcmtsaXN0LmVu
ZCgpLCAic2VsZWN0U3BpbGwoKSBjYWxsZWQgd2hlbiB0aGVyZSB3YXMgbm8gc3BpbGwuIik7Ci0g
ICAgICAgIFJFTEVBU0VfQVNTRVJUX1dJVEhfTUVTU0FHRSghbV91bnNwaWxsYWJsZVRtcHMuY29u
dGFpbnMoKml0ZXJhdG9yKSwgInRyeWluZyB0byBzcGlsbCB1bnNwaWxsYWJsZSB0bXAiKTsKLQot
ICAgICAgICAvLyBIaWdoZXIgc2NvcmUgbWVhbnMgbW9yZSBkZXNpcmFibGUgdG8gc3BpbGwuIExv
d2VyIHNjb3JlcyBtYXhpbWl6ZSB0aGUgbGlrZWxpaG9vZCB0aGF0IGEgdG1wCi0gICAgICAgIC8v
IGdldHMgYSByZWdpc3Rlci4KLSAgICAgICAgYXV0byBzY29yZSA9IFsmXSAoVG1wIHRtcCkgLT4g
ZG91YmxlIHsKLSAgICAgICAgICAgIC8vIEFpciBleHBvc2VzIHRoZSBjb25jZXB0IG9mICJmYXN0
IHRtcHMiLCBhbmQgd2UgaW50ZXJwcmV0IHRoYXQgdG8gbWVhbiB0aGF0IHRoZSB0bXAKLSAgICAg
ICAgICAgIC8vIHNob3VsZCBhbHdheXMgYmUgaW4gYSByZWdpc3Rlci4KLSAgICAgICAgICAgIGlm
IChtX2NvZGUuaXNGYXN0VG1wKHRtcCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAg
ICAgICAgICAKLSAgICAgICAgICAgIC8vIEFsbCBlbHNlIGJlaW5nIGVxdWFsLCB0aGUgc2NvcmUg
c2hvdWxkIGJlIGRpcmVjdGx5IHJlbGF0ZWQgdG8gdGhlIGRlZ3JlZS4KLSAgICAgICAgICAgIGRv
dWJsZSBkZWdyZWUgPSBzdGF0aWNfY2FzdDxkb3VibGU+KG1fZGVncmVlc1tUbXBNYXBwZXI6OmFi
c29sdXRlSW5kZXgodG1wKV0pOwotCi0gICAgICAgICAgICAvLyBBbGwgZWxzZSBiZWluZyBlcXVh
bCwgdGhlIHNjb3JlIHNob3VsZCBiZSBpbnZlcnNlbHkgcmVsYXRlZCB0byB0aGUgbnVtYmVyIG9m
IHdhcm0gdXNlcyBhbmQKLSAgICAgICAgICAgIC8vIGRlZnMuCi0gICAgICAgICAgICBjb25zdCBV
c2VDb3VudHM8VG1wPjo6Q291bnRzKiBjb3VudHMgPSBtX3VzZUNvdW50c1t0bXBdOwotICAgICAg
ICAgICAgaWYgKCFjb3VudHMpCi0gICAgICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bnVtZXJpY19s
aW1pdHM8ZG91YmxlPjo6aW5maW5pdHkoKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgZG91
YmxlIHVzZXMgPSBjb3VudHMtPm51bVdhcm1Vc2VzICsgY291bnRzLT5udW1EZWZzOworICAgICAg
ICBSRUxFQVNFX0FTU0VSVF9XSVRIX01FU1NBR0UoIW1fdW5zcGlsbGFibGVUbXBzLmdldCgqaXRl
cmF0b3IpLCAidHJ5aW5nIHRvIHNwaWxsIHVuc3BpbGxhYmxlIHRtcCIpOwogCi0gICAgICAgICAg
ICAvLyBJZiBpdCdzIGEgY29uc3RhbnQsIHRoZW4gaXQncyBub3QgYXMgYmFkIHRvIHNwaWxsLiBX
ZSBjYW4gcmVtYXRlcmlhbGl6ZSBpdCBpbiBtYW55Ci0gICAgICAgICAgICAvLyBjYXNlcy4KLSAg
ICAgICAgICAgIGlmIChjb3VudHMtPm51bUNvbnN0RGVmcyA9PSAxICYmIGNvdW50cy0+bnVtRGVm
cyA9PSAxKQotICAgICAgICAgICAgICAgIHVzZXMgLz0gMjsKKyAgICAgICAgSW5kZXhUeXBlIHZp
Y3RpbUluZGV4ID0gKml0ZXJhdG9yOworICAgICAgICBmbG9hdCBtYXhTY29yZSA9IDA7CiAKLSAg
ICAgICAgICAgIHJldHVybiBkZWdyZWUgLyB1c2VzOwotICAgICAgICB9OworICAgICAgICBmb3Ig
KDtpdGVyYXRvciAhPSBtX3NwaWxsV29ya2xpc3QuZW5kKCk7ICsraXRlcmF0b3IpIHsKKyAgICAg
ICAgICAgIEluZGV4VHlwZSBpbmRleCA9ICppdGVyYXRvcjsKIAotICAgICAgICBhdXRvIHZpY3Rp
bUl0ZXJhdG9yID0gaXRlcmF0b3I7Ci0gICAgICAgIGRvdWJsZSBtYXhTY29yZSA9IHNjb3JlKFRt
cE1hcHBlcjo6dG1wRnJvbUFic29sdXRlSW5kZXgoKml0ZXJhdG9yKSk7CisgICAgICAgICAgICBm
bG9hdCB1c2VzID0gbV91c2VDb3VudHMubnVtV2FybVVzZXNBbmREZWZzPGJhbms+KGluZGV4KTsK
KyAgICAgICAgICAgIGlmICghdXNlcykgeworICAgICAgICAgICAgICAgIHZpY3RpbUluZGV4ID0g
aW5kZXg7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisKKyAgICAgICAg
ICAgIC8vIEhpZ2hlciBzY29yZSBtZWFucyBtb3JlIGRlc2lyYWJsZSB0byBzcGlsbC4gTG93ZXIg
c2NvcmVzIG1heGltaXplIHRoZSBsaWtlbGlob29kIHRoYXQgYSB0bXAKKyAgICAgICAgICAgIC8v
IGdldHMgYSByZWdpc3Rlci4KKyAgICAgICAgICAgIGZsb2F0IGRlZ3JlZSA9IHN0YXRpY19jYXN0
PGZsb2F0PihtX2RlZ3JlZXNbaW5kZXhdKTsKKyAgICAgICAgICAgIGZsb2F0IHRtcFNjb3JlID0g
ZGVncmVlIC8gdXNlczsKKworICAgICAgICAgICAgLy8gSWYgaXQncyBhIGNvbnN0YW50LCB0aGVu
IGl0J3Mgbm90IGFzIGJhZCB0byBzcGlsbC4gV2UgY2FuIHJlbWF0ZXJpYWxpemUgaXQgaW4gbWFu
eQorICAgICAgICAgICAgLy8gY2FzZXMuCisgICAgICAgICAgICBpZiAobV91c2VDb3VudHMuaXND
b25zdERlZjxiYW5rPihpbmRleCkpCisgICAgICAgICAgICAgICAgdG1wU2NvcmUgKj0gMjsKIAot
ICAgICAgICArK2l0ZXJhdG9yOwotICAgICAgICBmb3IgKDtpdGVyYXRvciAhPSBtX3NwaWxsV29y
a2xpc3QuZW5kKCk7ICsraXRlcmF0b3IpIHsKLSAgICAgICAgICAgIGRvdWJsZSB0bXBTY29yZSA9
IHNjb3JlKFRtcE1hcHBlcjo6dG1wRnJvbUFic29sdXRlSW5kZXgoKml0ZXJhdG9yKSk7CiAgICAg
ICAgICAgICBpZiAodG1wU2NvcmUgPiBtYXhTY29yZSkgewotICAgICAgICAgICAgICAgIEFTU0VS
VCghbV91bnNwaWxsYWJsZVRtcHMuY29udGFpbnMoKml0ZXJhdG9yKSk7Ci0gICAgICAgICAgICAg
ICAgdmljdGltSXRlcmF0b3IgPSBpdGVyYXRvcjsKKyAgICAgICAgICAgICAgICB2aWN0aW1JbmRl
eCA9IGluZGV4OwogICAgICAgICAgICAgICAgIG1heFNjb3JlID0gdG1wU2NvcmU7CiAgICAgICAg
ICAgICB9CiAgICAgICAgIH0KIAotICAgICAgICBJbmRleFR5cGUgdmljdGltSW5kZXggPSAqdmlj
dGltSXRlcmF0b3I7CisgICAgICAgIEFTU0VSVCghbV91bnNwaWxsYWJsZVRtcHMuZ2V0KHZpY3Rp
bUluZGV4KSk7CisgICAgICAgIEFTU0VSVCghaXNQcmVjb2xvcmVkKHZpY3RpbUluZGV4KSk7CiAg
ICAgICAgIGlmICh0cmFjZURlYnVnKQogICAgICAgICAgICAgZGF0YUxvZ0xuKCJTZWxlY3Rpbmcg
c3BpbGwgIiwgdmljdGltSW5kZXgpOwotICAgICAgICBBU1NFUlQoIWlzUHJlY29sb3JlZCh2aWN0
aW1JbmRleCkpOwogICAgICAgICByZXR1cm4gdmljdGltSW5kZXg7CiAgICAgfQogCkBAIC01MTIs
MTQgKzYxNiwxNCBAQCBwcm90ZWN0ZWQ6CiAgICAgICAgICAgICBtX2NvbG9yZWRUbXAuY2xlYXIo
KTsKICAgICB9CiAKLSAgICBib29sIGFkZEludGVyZmVyZW5jZUVkZ2UoSW50ZXJmZXJlbmNlRWRn
ZVR5cGUgZWRnZSkKKyAgICBib29sIGFkZEludGVyZmVyZW5jZUVkZ2UoSW5kZXhUeXBlIHUsIElu
ZGV4VHlwZSB2KQogICAgIHsKLSAgICAgICAgcmV0dXJuIG1faW50ZXJmZXJlbmNlRWRnZXMuYWRk
KGVkZ2UpLmlzTmV3RW50cnk7CisgICAgICAgIHJldHVybiBtX2ludGVyZmVyZW5jZUVkZ2VzLmFk
ZEFuZFJldHVybklzTmV3RW50cnkodSwgdik7CiAgICAgfQogCi0gICAgYm9vbCBoYXNJbnRlcmZl
cmVuY2VFZGdlKEludGVyZmVyZW5jZUVkZ2VUeXBlIGVkZ2UpCisgICAgYm9vbCBoYXNJbnRlcmZl
cmVuY2VFZGdlKEluZGV4VHlwZSB1LCBJbmRleFR5cGUgdikKICAgICB7Ci0gICAgICAgIHJldHVy
biBtX2ludGVyZmVyZW5jZUVkZ2VzLmNvbnRhaW5zKGVkZ2UpOworICAgICAgICByZXR1cm4gbV9p
bnRlcmZlcmVuY2VFZGdlcy5jb250YWlucyh1LCB2KTsKICAgICB9CiAKICAgICB2b2lkIGNsZWFy
SW50ZXJmZXJlbmNlRWRnZXMoKQpAQCAtNTMyLDEwICs2MzYsMTEgQEAgcHJvdGVjdGVkOgogICAg
ICAgICBvdXQucHJpbnQoImdyYXBoIEludGVyZmVyZW5jZUdyYXBoIHsgXG4iKTsKIAogICAgICAg
ICBIYXNoU2V0PFRtcD4gdG1wc1dpdGhJbnRlcmZlcmVuY2VzOwotICAgICAgICBmb3IgKGNvbnN0
IGF1dG8mIGVkZ2UgOiBtX2ludGVyZmVyZW5jZUVkZ2VzKSB7Ci0gICAgICAgICAgICB0bXBzV2l0
aEludGVyZmVyZW5jZXMuYWRkKFRtcE1hcHBlcjo6dG1wRnJvbUFic29sdXRlSW5kZXgoZWRnZS5m
aXJzdCgpKSk7Ci0gICAgICAgICAgICB0bXBzV2l0aEludGVyZmVyZW5jZXMuYWRkKFRtcE1hcHBl
cjo6dG1wRnJvbUFic29sdXRlSW5kZXgoZWRnZS5zZWNvbmQoKSkpOwotICAgICAgICB9CisKKyAg
ICAgICAgbV9pbnRlcmZlcmVuY2VFZGdlcy5mb3JFYWNoKFsmdG1wc1dpdGhJbnRlcmZlcmVuY2Vz
XSAoc3RkOjpwYWlyPEluZGV4VHlwZSwgSW5kZXhUeXBlPiBlZGdlKSB7CisgICAgICAgICAgICB0
bXBzV2l0aEludGVyZmVyZW5jZXMuYWRkKFRtcE1hcHBlcjo6dG1wRnJvbUFic29sdXRlSW5kZXgo
ZWRnZS5maXJzdCkpOworICAgICAgICAgICAgdG1wc1dpdGhJbnRlcmZlcmVuY2VzLmFkZChUbXBN
YXBwZXI6OnRtcEZyb21BYnNvbHV0ZUluZGV4KGVkZ2Uuc2Vjb25kKSk7CisgICAgICAgIH0pOwog
CiAgICAgICAgIGZvciAoY29uc3QgYXV0byYgdG1wIDogdG1wc1dpdGhJbnRlcmZlcmVuY2VzKSB7
CiAgICAgICAgICAgICB1bnNpZ25lZCB0bXBJbmRleCA9IFRtcE1hcHBlcjo6YWJzb2x1dGVJbmRl
eCh0bXApOwpAQCAtNTQ1LDIwICs2NTAsMjEgQEAgcHJvdGVjdGVkOgogICAgICAgICAgICAgICAg
IG91dC5wcmludCgiICAgICIsIHRtcC5pbnRlcm5hbFZhbHVlKCksICIgW2xhYmVsPVwiIiwgdG1w
LCAiXCJdO1xuIik7CiAgICAgICAgIH0KIAotICAgICAgICBmb3IgKGNvbnN0IGF1dG8mIGVkZ2Ug
OiBtX2ludGVyZmVyZW5jZUVkZ2VzKQotICAgICAgICAgICAgb3V0LnByaW50KCIgICAgIiwgZWRn
ZS5maXJzdCgpLCAiIC0tICIsIGVkZ2Uuc2Vjb25kKCksICI7XG4iKTsKKyAgICAgICAgbV9pbnRl
cmZlcmVuY2VFZGdlcy5mb3JFYWNoKFsmb3V0XSAoc3RkOjpwYWlyPEluZGV4VHlwZSwgSW5kZXhU
eXBlPiBlZGdlKSB7CisgICAgICAgICAgICBvdXQucHJpbnQoIiAgICAiLCBlZGdlLmZpcnN0LCAi
IC0tICIsIGVkZ2Uuc2Vjb25kLCAiO1xuIik7CisgICAgICAgIH0pOwogICAgICAgICBvdXQucHJp
bnQoIn1cbiIpOwogICAgIH0KIAogICAgIFZlY3RvcjxSZWc+IG1fcmVnc0luUHJpb3JpdHlPcmRl
cjsKICAgICBJbmRleFR5cGUgbV9sYXN0UHJlY29sb3JlZFJlZ2lzdGVySW5kZXggeyAwIH07CiAK
LSAgICB0eXBlbmFtZSBJbnRlcmZlcmVuY2VFZGdlVHlwZTo6SW50ZXJmZXJlbmNlU2V0IG1faW50
ZXJmZXJlbmNlRWRnZXM7CisgICAgSW50ZXJmZXJlbmNlU2V0IG1faW50ZXJmZXJlbmNlRWRnZXM7
CiAKICAgICBWZWN0b3I8VmVjdG9yPEluZGV4VHlwZSwgMCwgVW5zYWZlVmVjdG9yT3ZlcmZsb3cs
IDQ+LCAwLCBVbnNhZmVWZWN0b3JPdmVyZmxvdz4gbV9hZGphY2VuY3lMaXN0OwogICAgIFZlY3Rv
cjxJbmRleFR5cGUsIDAsIFVuc2FmZVZlY3Rvck92ZXJmbG93PiBtX2RlZ3JlZXM7CiAKLSAgICB1
c2luZyBJbmRleFR5cGVTZXQgPSBIYXNoU2V0PEluZGV4VHlwZSwgRGVmYXVsdEhhc2g8SW5kZXhU
eXBlPiwgV1RGOjpVbnNpZ25lZFdpdGhaZXJvS2V5SGFzaFRyYWl0czxJbmRleFR5cGU+PjsKKyAg
ICB1c2luZyBJbmRleFR5cGVTZXQgPSBTbWFsbFNldDxJbmRleFR5cGUsIEludEhhc2g8SW5kZXhU
eXBlPj47CiAKICAgICBIYXNoTWFwPEluZGV4VHlwZSwgSW5kZXhUeXBlU2V0LCBEZWZhdWx0SGFz
aDxJbmRleFR5cGU+LCBXVEY6OlVuc2lnbmVkV2l0aFplcm9LZXlIYXNoVHJhaXRzPEluZGV4VHlw
ZT4+IG1fYmlhc2VzOwogCkBAIC01NzEsNyArNjc3LDcgQEAgcHJvdGVjdGVkOgogICAgIFZlY3Rv
cjxNb3ZlT3BlcmFuZHMsIDAsIFVuc2FmZVZlY3Rvck92ZXJmbG93PiBtX2NvYWxlc2NpbmdDYW5k
aWRhdGVzOwogCiAgICAgLy8gTGlzdCBvZiBldmVyeSBtb3ZlIGluc3RydWN0aW9uIGFzc29jaWF0
ZWQgd2l0aCBhIFRtcC4KLSAgICBWZWN0b3I8SW5kZXhUeXBlU2V0PiBtX21vdmVMaXN0OworICAg
IFZlY3RvcjxTbWFsbFNldDx1bnNpZ25lZCwgSW50SGFzaDxJbmRleFR5cGU+Pj4gbV9tb3ZlTGlz
dDsKIAogICAgIC8vIENvbG9ycy4KICAgICBWZWN0b3I8UmVnLCAwLCBVbnNhZmVWZWN0b3JPdmVy
Zmxvdz4gbV9jb2xvcmVkVG1wOwpAQCAtNTk1LDE3ICs3MDEsMTggQEAgcHJvdGVjdGVkOgogICAg
IC8vIFRoZSBtYXBwaW5nIG9mIFRtcCB0byB0aGVpciBhbGlhcyBmb3IgTW92ZXMgdGhhdCBhcmUg
YWx3YXlzIGNvYWxlc2NpbmcgcmVnYXJkbGVzcyBvZiBzcGlsbGluZy4KICAgICBWZWN0b3I8SW5k
ZXhUeXBlLCAwLCBVbnNhZmVWZWN0b3JPdmVyZmxvdz4gbV9jb2FsZXNjZWRUbXBzQXRTcGlsbDsK
IAotICAgIGNvbnN0IEhhc2hTZXQ8dW5zaWduZWQ+JiBtX3Vuc3BpbGxhYmxlVG1wczsKLSAgICBj
b25zdCBVc2VDb3VudHM8VG1wPiYgbV91c2VDb3VudHM7CisgICAgY29uc3QgQml0VmVjdG9yJiBt
X3Vuc3BpbGxhYmxlVG1wczsKKyAgICBjb25zdCBVc2VDb3VudHMmIG1fdXNlQ291bnRzOwogICAg
IENvZGUmIG1fY29kZTsKIAogICAgIFZlY3RvcjxUbXAsIDQ+IG1fcGlubmVkUmVnczsKIH07CiAK
LXRlbXBsYXRlIDx0eXBlbmFtZSBJbmRleFR5cGUsIHR5cGVuYW1lIFRtcE1hcHBlciwgdHlwZW5h
bWUgSW50ZXJmZXJlbmNlRWRnZT4KLWNsYXNzIEJyaWdncyA6IHB1YmxpYyBBYnN0cmFjdENvbG9y
aW5nQWxsb2NhdG9yPEluZGV4VHlwZSwgVG1wTWFwcGVyLCBJbnRlcmZlcmVuY2VFZGdlPiB7Ci0g
ICAgdXNpbmcgQmFzZSA9IEFic3RyYWN0Q29sb3JpbmdBbGxvY2F0b3I8SW5kZXhUeXBlLCBUbXBN
YXBwZXIsIEludGVyZmVyZW5jZUVkZ2U+OwordGVtcGxhdGUgPHR5cGVuYW1lIEluZGV4VHlwZSwg
dHlwZW5hbWUgSW50ZXJmZXJlbmNlU2V0LCBCYW5rIGJhbms+CitjbGFzcyBCcmlnZ3MgOiBwdWJs
aWMgQWJzdHJhY3RDb2xvcmluZ0FsbG9jYXRvcjxJbmRleFR5cGUsIEludGVyZmVyZW5jZVNldCwg
YmFuaz4geworICAgIHVzaW5nIEJhc2UgPSBBYnN0cmFjdENvbG9yaW5nQWxsb2NhdG9yPEluZGV4
VHlwZSwgSW50ZXJmZXJlbmNlU2V0LCBiYW5rPjsKIHByb3RlY3RlZDoKKyAgICB1c2luZyBUbXBN
YXBwZXIgPSB0eXBlbmFtZSBCYXNlOjpUbXBNYXBwZXI7CiAgICAgdXNpbmcgQmFzZTo6bV9pc09u
U2VsZWN0U3RhY2s7CiAgICAgdXNpbmcgQmFzZTo6bV9zZWxlY3RTdGFjazsKICAgICB1c2luZyBC
YXNlOjptX3NpbXBsaWZ5V29ya2xpc3Q7CkBAIC02MzUsMTEgKzc0MiwxMiBAQCBwcm90ZWN0ZWQ6
CiAgICAgdXNpbmcgQmFzZTo6aGFzQmVlblNpbXBsaWZpZWQ7CiAgICAgdXNpbmcgQmFzZTo6YWRk
VG9TcGlsbDsKICAgICB1c2luZyBCYXNlOjphZGRCaWFzOworICAgIHVzaW5nIEJhc2U6Om1faW50
ZXJmZXJlbmNlRWRnZXM7CiAgICAgdXNpbmcgQmFzZTo6bV9waW5uZWRSZWdzOwogICAgIHVzaW5n
IEJhc2U6Om1fcmVnc0luUHJpb3JpdHlPcmRlcjsKIAogcHVibGljOgotICAgIEJyaWdncyhDb2Rl
JiBjb2RlLCBjb25zdCBWZWN0b3I8UmVnPiYgcmVnc0luUHJpb3JpdHlPcmRlciwgSW5kZXhUeXBl
IGxhc3RQcmVjb2xvcmVkUmVnaXN0ZXJJbmRleCwgdW5zaWduZWQgdG1wQXJyYXlTaXplLCBjb25z
dCBIYXNoU2V0PHVuc2lnbmVkPiYgdW5zcGlsbGFibGVUbXBzLCBjb25zdCBVc2VDb3VudHM8VG1w
PiYgdXNlQ291bnRzKQorICAgIEJyaWdncyhDb2RlJiBjb2RlLCBjb25zdCBWZWN0b3I8UmVnPiYg
cmVnc0luUHJpb3JpdHlPcmRlciwgSW5kZXhUeXBlIGxhc3RQcmVjb2xvcmVkUmVnaXN0ZXJJbmRl
eCwgdW5zaWduZWQgdG1wQXJyYXlTaXplLCBjb25zdCBCaXRWZWN0b3ImIHVuc3BpbGxhYmxlVG1w
cywgY29uc3QgVXNlQ291bnRzJiB1c2VDb3VudHMpCiAgICAgICAgIDogQmFzZShjb2RlLCByZWdz
SW5Qcmlvcml0eU9yZGVyLCBsYXN0UHJlY29sb3JlZFJlZ2lzdGVySW5kZXgsIHRtcEFycmF5U2l6
ZSwgdW5zcGlsbGFibGVUbXBzLCB1c2VDb3VudHMpCiAgICAgewogICAgIH0KQEAgLTY5MSw3ICs3
OTksNyBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIHVuc2ln
bmVkIGRlZ3JlZSA9IG1fZGVncmVlc1tpXTsKICAgICAgICAgICAgICAgICBpZiAoZGVncmVlID49
IHJlZ2lzdGVyQ291bnQpIHsKLSAgICAgICAgICAgICAgICAgICAgQVNTRVJUKG1fdW5zcGlsbGFi
bGVUbXBzLmNvbnRhaW5zKGkpIHx8IG1fc3BpbGxXb3JrbGlzdC5jb250YWlucyhpKSk7CisgICAg
ICAgICAgICAgICAgICAgIEFTU0VSVChtX3Vuc3BpbGxhYmxlVG1wcy5nZXQoaSkgfHwgbV9zcGls
bFdvcmtsaXN0LmNvbnRhaW5zKGkpKTsKICAgICAgICAgICAgICAgICAgICAgQVNTRVJUKCFtX3Np
bXBsaWZ5V29ya2xpc3QuY29udGFpbnMoaSkpOwogICAgICAgICAgICAgICAgICAgICBjb250aW51
ZTsKICAgICAgICAgICAgICAgICB9CkBAIC03NDcsOSArODU1LDcgQEAgcHJvdGVjdGVkOgogICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9CiAKLSAgICAgICAgaWYgKGlzUHJlY29s
b3JlZCh2KQotICAgICAgICAgICAgfHwgaGFzSW50ZXJmZXJlbmNlRWRnZShJbnRlcmZlcmVuY2VF
ZGdlKHUsIHYpKSkgewotCisgICAgICAgIGlmIChpc1ByZWNvbG9yZWQodikgfHwgaGFzSW50ZXJm
ZXJlbmNlRWRnZSh1LCB2KSkgewogICAgICAgICAgICAgLy8gTm8gbmVlZCB0byBldmVyIGNvbnNp
ZGVyIHRoaXMgbW92ZSBhZ2FpbiBpZiBpdCBpbnRlcmZlcmVzLgogICAgICAgICAgICAgLy8gTm8g
Y29hbGVzY2luZyB3aWxsIHJlbW92ZSB0aGUgaW50ZXJmZXJlbmNlLgogICAgICAgICAgICAgbW92
ZUluZGV4ID0gVUlOVF9NQVg7CkBAIC03ODgsNyArODk0LDggQEAgcHJvdGVjdGVkOgogICAgICAg
ICBtX2NvYWxlc2NlZFRtcHNbdl0gPSB1OwogCiAgICAgICAgIGF1dG8mIHZNb3ZlcyA9IG1fbW92
ZUxpc3Rbdl07Ci0gICAgICAgIG1fbW92ZUxpc3RbdV0uYWRkKHZNb3Zlcy5iZWdpbigpLCB2TW92
ZXMuZW5kKCkpOworICAgICAgICBmb3IgKHVuc2lnbmVkIG1vdmUgOiB2TW92ZXMpCisgICAgICAg
ICAgICBtX21vdmVMaXN0W3VdLmFkZChtb3ZlKTsKIAogICAgICAgICBmb3JFYWNoQWRqYWNlbnQo
diwgW3RoaXMsIHVdIChJbmRleFR5cGUgYWRqYWNlbnRUbXBJbmRleCkgewogICAgICAgICAgICAg
aWYgKGFkZEVkZ2VEaXN0aW5jdFdpdGhvdXREZWdyZWVDaGFuZ2UoYWRqYWNlbnRUbXBJbmRleCwg
dSkpIHsKQEAgLTkzOCw3ICsxMDQ1LDcgQEAgcHJvdGVjdGVkOgogICAgICAgICAgICAgICAgIGRh
dGFMb2dMbigiTW92aW5nIHRtcCAiLCB0bXBJbmRleCwgIiBmcm9tIHNwaWxsIGxpc3QgdG8gc2lt
cGxpZnkgbGlzdCBiZWNhdXNlIGl0J3MgZGVncmVlIGlzIG5vdyBsZXNzIHRoYW4gayIpOwogCiAg
ICAgICAgICAgICBpZiAoQVNTRVJUX0VOQUJMRUQpCi0gICAgICAgICAgICAgICAgQVNTRVJUKG1f
dW5zcGlsbGFibGVUbXBzLmNvbnRhaW5zKHRtcEluZGV4KSB8fCBtX3NwaWxsV29ya2xpc3QuY29u
dGFpbnModG1wSW5kZXgpKTsKKyAgICAgICAgICAgICAgICBBU1NFUlQobV91bnNwaWxsYWJsZVRt
cHMuZ2V0KHRtcEluZGV4KSB8fCBtX3NwaWxsV29ya2xpc3QuY29udGFpbnModG1wSW5kZXgpKTsK
ICAgICAgICAgICAgIG1fc3BpbGxXb3JrbGlzdC5xdWlja0NsZWFyKHRtcEluZGV4KTsKIAogICAg
ICAgICAgICAgQVNTRVJUKCFtX3NpbXBsaWZ5V29ya2xpc3QuY29udGFpbnModG1wSW5kZXgpKTsK
QEAgLTk1NiwxMCArMTA2MywxMSBAQCBwcm90ZWN0ZWQ6CiAgICAgTW92ZVNldCBtX3dvcmtsaXN0
TW92ZXM7CiB9OwogCi10ZW1wbGF0ZSA8dHlwZW5hbWUgSW5kZXhUeXBlLCB0eXBlbmFtZSBUbXBN
YXBwZXIsIHR5cGVuYW1lIEludGVyZmVyZW5jZUVkZ2U+Ci1jbGFzcyBJUkMgOiBwdWJsaWMgQWJz
dHJhY3RDb2xvcmluZ0FsbG9jYXRvcjxJbmRleFR5cGUsIFRtcE1hcHBlciwgSW50ZXJmZXJlbmNl
RWRnZT4gewotICAgIHVzaW5nIEJhc2UgPSBBYnN0cmFjdENvbG9yaW5nQWxsb2NhdG9yPEluZGV4
VHlwZSwgVG1wTWFwcGVyLCBJbnRlcmZlcmVuY2VFZGdlPjsKK3RlbXBsYXRlIDx0eXBlbmFtZSBJ
bmRleFR5cGUsIHR5cGVuYW1lIEludGVyZmVyZW5jZVNldCwgQmFuayBiYW5rPgorY2xhc3MgSVJD
IDogcHVibGljIEFic3RyYWN0Q29sb3JpbmdBbGxvY2F0b3I8SW5kZXhUeXBlLCBJbnRlcmZlcmVu
Y2VTZXQsIGJhbms+IHsKKyAgICB1c2luZyBCYXNlID0gQWJzdHJhY3RDb2xvcmluZ0FsbG9jYXRv
cjxJbmRleFR5cGUsIEludGVyZmVyZW5jZVNldCwgYmFuaz47CiBwcm90ZWN0ZWQ6CisgICAgdXNp
bmcgVG1wTWFwcGVyID0gdHlwZW5hbWUgQmFzZTo6VG1wTWFwcGVyOwogICAgIHVzaW5nIEJhc2U6
Om1faXNPblNlbGVjdFN0YWNrOwogICAgIHVzaW5nIEJhc2U6Om1fc2VsZWN0U3RhY2s7CiAgICAg
dXNpbmcgQmFzZTo6bV9zaW1wbGlmeVdvcmtsaXN0OwpAQCAtOTkxLDExICsxMDk5LDEyIEBAIHBy
b3RlY3RlZDoKICAgICB1c2luZyBCYXNlOjptX2FkamFjZW5jeUxpc3Q7CiAgICAgdXNpbmcgQmFz
ZTo6ZHVtcEludGVyZmVyZW5jZUdyYXBoSW5Eb3Q7CiAgICAgdXNpbmcgQmFzZTo6YWRkQmlhczsK
KyAgICB1c2luZyBCYXNlOjptX2ludGVyZmVyZW5jZUVkZ2VzOwogICAgIHVzaW5nIEJhc2U6Om1f
cGlubmVkUmVnczsKICAgICB1c2luZyBCYXNlOjptX3JlZ3NJblByaW9yaXR5T3JkZXI7CiAKIHB1
YmxpYzoKLSAgICBJUkMoQ29kZSYgY29kZSwgY29uc3QgVmVjdG9yPFJlZz4mIHJlZ3NJblByaW9y
aXR5T3JkZXIsIEluZGV4VHlwZSBsYXN0UHJlY29sb3JlZFJlZ2lzdGVySW5kZXgsIHVuc2lnbmVk
IHRtcEFycmF5U2l6ZSwgY29uc3QgSGFzaFNldDx1bnNpZ25lZD4mIHVuc3BpbGxhYmxlVG1wcywg
Y29uc3QgVXNlQ291bnRzPFRtcD4mIHVzZUNvdW50cykKKyAgICBJUkMoQ29kZSYgY29kZSwgY29u
c3QgVmVjdG9yPFJlZz4mIHJlZ3NJblByaW9yaXR5T3JkZXIsIEluZGV4VHlwZSBsYXN0UHJlY29s
b3JlZFJlZ2lzdGVySW5kZXgsIHVuc2lnbmVkIHRtcEFycmF5U2l6ZSwgY29uc3QgQml0VmVjdG9y
JiB1bnNwaWxsYWJsZVRtcHMsIGNvbnN0IFVzZUNvdW50cyYgdXNlQ291bnRzKQogICAgICAgICA6
IEJhc2UoY29kZSwgcmVnc0luUHJpb3JpdHlPcmRlciwgbGFzdFByZWNvbG9yZWRSZWdpc3Rlcklu
ZGV4LCB0bXBBcnJheVNpemUsIHVuc3BpbGxhYmxlVG1wcywgdXNlQ291bnRzKQogICAgIHsKICAg
ICB9CkBAIC0xMDkzLDggKzEyMDIsNyBAQCBwcm90ZWN0ZWQ6CiAKICAgICAgICAgICAgIGlmICh0
cmFjZURlYnVnKQogICAgICAgICAgICAgICAgIGRhdGFMb2coIiAgICBDb2FsZXNjZWRcbiIpOwot
ICAgICAgICB9IGVsc2UgaWYgKGlzUHJlY29sb3JlZCh2KQotICAgICAgICAgICAgfHwgaGFzSW50
ZXJmZXJlbmNlRWRnZShJbnRlcmZlcmVuY2VFZGdlKHUsIHYpKSkgeworICAgICAgICB9IGVsc2Ug
aWYgKGlzUHJlY29sb3JlZCh2KSB8fCBoYXNJbnRlcmZlcmVuY2VFZGdlKHUsIHYpKSB7CiAgICAg
ICAgICAgICBhZGRXb3JrTGlzdCh1KTsKICAgICAgICAgICAgIGFkZFdvcmtMaXN0KHYpOwogCkBA
IC0xMTMzLDcgKzEyNDEsOCBAQCBwcm90ZWN0ZWQ6CiAgICAgICAgIG1fY29hbGVzY2VkVG1wc1t2
XSA9IHU7CiAKICAgICAgICAgYXV0byYgdk1vdmVzID0gbV9tb3ZlTGlzdFt2XTsKLSAgICAgICAg
bV9tb3ZlTGlzdFt1XS5hZGQodk1vdmVzLmJlZ2luKCksIHZNb3Zlcy5lbmQoKSk7CisgICAgICAg
IGZvciAodW5zaWduZWQgbW92ZSA6IHZNb3ZlcykKKyAgICAgICAgICAgIG1fbW92ZUxpc3RbdV0u
YWRkKG1vdmUpOwogCiAgICAgICAgIGZvckVhY2hBZGphY2VudCh2LCBbdGhpcywgdV0gKEluZGV4
VHlwZSBhZGphY2VudFRtcEluZGV4KSB7CiAgICAgICAgICAgICBpZiAoYWRkRWRnZURpc3RpbmN0
V2l0aG91dERlZ3JlZUNoYW5nZShhZGphY2VudFRtcEluZGV4LCB1KSkgewpAQCAtMTM5NywxMCAr
MTUwNiwxMSBAQCBwcm90ZWN0ZWQ6CiB9OwogCiAvLyBUaGlzIHBlcmZvcm0gYWxsIHRoZSB0YXNr
cyB0aGF0IGFyZSBzcGVjaWZpYyB0byBjZXJ0YWluIHJlZ2lzdGVyIHR5cGUuCi10ZW1wbGF0ZTxC
YW5rIGJhbmssIHRlbXBsYXRlPHR5cGVuYW1lLCB0eXBlbmFtZSwgdHlwZW5hbWU+IGNsYXNzIEFs
bG9jYXRvclR5cGUsIHR5cGVuYW1lIEludGVyZmVyZW5jZUVkZ2VUeXBlPgotY2xhc3MgQ29sb3Jp
bmdBbGxvY2F0b3IgOiBwdWJsaWMgQWxsb2NhdG9yVHlwZTx1bnNpZ25lZCwgQWJzb2x1dGVUbXBN
YXBwZXI8YmFuaz4sIEludGVyZmVyZW5jZUVkZ2VUeXBlPiB7Ci0gICAgdXNpbmcgVG1wTWFwcGVy
ID0gQWJzb2x1dGVUbXBNYXBwZXI8YmFuaz47Ci0gICAgdXNpbmcgQmFzZSA9IEFsbG9jYXRvclR5
cGU8dW5zaWduZWQsIFRtcE1hcHBlciwgSW50ZXJmZXJlbmNlRWRnZVR5cGU+OwordGVtcGxhdGU8
dHlwZW5hbWUgSW5kZXhUeXBlLCBCYW5rIGJhbmssIHRlbXBsYXRlPHR5cGVuYW1lLCB0eXBlbmFt
ZSwgQmFuaz4gY2xhc3MgQWxsb2NhdG9yVHlwZSwgdHlwZW5hbWUgSW50ZXJmZXJlbmNlU2V0Pgor
Y2xhc3MgQ29sb3JpbmdBbGxvY2F0b3IgOiBwdWJsaWMgQWxsb2NhdG9yVHlwZTxJbmRleFR5cGUs
IEludGVyZmVyZW5jZVNldCwgYmFuaz4geworICAgIHVzaW5nIEJhc2UgPSBBbGxvY2F0b3JUeXBl
PEluZGV4VHlwZSwgSW50ZXJmZXJlbmNlU2V0LCBiYW5rPjsKKyAgICB1c2luZyBUbXBNYXBwZXIg
PSB0eXBlbmFtZSBCYXNlOjpUbXBNYXBwZXI7CisgICAgdXNpbmcgQmFzZTo6dG1wVG9JbmRleDsK
ICAgICB1c2luZyBCYXNlOjptX2lzT25TZWxlY3RTdGFjazsKICAgICB1c2luZyBCYXNlOjptX3Nl
bGVjdFN0YWNrOwogICAgIHVzaW5nIEJhc2U6Om1fc2ltcGxpZnlXb3JrbGlzdDsKQEAgLTE0MjMs
MTIgKzE1MzMsMTMgQEAgY2xhc3MgQ29sb3JpbmdBbGxvY2F0b3IgOiBwdWJsaWMgQWxsb2NhdG9y
VHlwZTx1bnNpZ25lZCwgQWJzb2x1dGVUbXBNYXBwZXI8YmFuaz4KICAgICB1c2luZyBCYXNlOjpo
YXNJbnRlcmZlcmVuY2VFZGdlOwogICAgIHVzaW5nIEJhc2U6OmdldEFsaWFzOwogICAgIHVzaW5n
IEJhc2U6OmFkZEVkZ2U7CisgICAgdXNpbmcgQmFzZTo6bV9pbnRlcmZlcmVuY2VFZGdlczsKICAg
ICB1c2luZyBCYXNlOjptX3Bpbm5lZFJlZ3M7CiAgICAgdXNpbmcgQmFzZTo6bV9yZWdzSW5Qcmlv
cml0eU9yZGVyOwogCiBwdWJsaWM6CiAKLSAgICBDb2xvcmluZ0FsbG9jYXRvcihDb2RlJiBjb2Rl
LCBUbXBXaWR0aCYgdG1wV2lkdGgsIGNvbnN0IFVzZUNvdW50czxUbXA+JiB1c2VDb3VudHMsIGNv
bnN0IEhhc2hTZXQ8dW5zaWduZWQ+JiB1bnNwaWxsYWJsZVRtcCkKKyAgICBDb2xvcmluZ0FsbG9j
YXRvcihDb2RlJiBjb2RlLCBUbXBXaWR0aCYgdG1wV2lkdGgsIGNvbnN0IFVzZUNvdW50cyYgdXNl
Q291bnRzLCBjb25zdCBCaXRWZWN0b3ImIHVuc3BpbGxhYmxlVG1wKQogICAgICAgICA6IEJhc2Uo
Y29kZSwgY29kZS5yZWdzSW5Qcmlvcml0eU9yZGVyKGJhbmspLCBUbXBNYXBwZXI6Omxhc3RNYWNo
aW5lUmVnaXN0ZXJJbmRleCgpLCB0bXBBcnJheVNpemUoY29kZSksIHVuc3BpbGxhYmxlVG1wLCB1
c2VDb3VudHMpCiAgICAgICAgICwgbV90bXBXaWR0aCh0bXBXaWR0aCkKICAgICB7CkBAIC0xNDQw
LDEzICsxNTUxLDE1IEBAIHB1YmxpYzoKICAgICAgICAgICAgIH0KICAgICAgICAgfQogCisgICAg
ICAgIG1faW50ZXJmZXJlbmNlRWRnZXMuc2V0TWF4VG1wSW5kZXgoQWJzb2x1dGVUbXBNYXBwZXI8
YmFuaz46OmFic29sdXRlSW5kZXgobV9jb2RlLm51bVRtcHMoYmFuaykpKTsKKwogICAgICAgICBp
bml0aWFsaXplUHJlY29sb3JlZFRtcCgpOwogICAgICAgICBidWlsZCgpOwogICAgIH0KIAogICAg
IFRtcCBnZXRBbGlhcyhUbXAgdG1wKSBjb25zdAogICAgIHsKLSAgICAgICAgcmV0dXJuIFRtcE1h
cHBlcjo6dG1wRnJvbUFic29sdXRlSW5kZXgoZ2V0QWxpYXMoVG1wTWFwcGVyOjphYnNvbHV0ZUlu
ZGV4KHRtcCkpKTsKKyAgICAgICAgcmV0dXJuIFRtcE1hcHBlcjo6dG1wRnJvbUFic29sdXRlSW5k
ZXgoZ2V0QWxpYXModG1wVG9JbmRleCh0bXApKSk7CiAgICAgfQogCiAgICAgLy8gVGhpcyB0ZWxs
cyB5b3UgaWYgYSBNb3ZlIHdpbGwgYmUgY29hbGVzY2FibGUgaWYgdGhlIHNyYyBhbmQgZHN0IGVu
ZCB1cCBtYXRjaGluZy4gVGhpcyBtZXRob2QKQEAgLTE0NjksOCArMTU4Miw4IEBAIHB1YmxpYzoK
ICAgICAgICAgaWYgKG1fY29hbGVzY2VkVG1wc0F0U3BpbGwuaXNFbXB0eSgpKQogICAgICAgICAg
ICAgcmV0dXJuIHRtcDsKIAotICAgICAgICB1bnNpZ25lZCBhbGlhc0luZGV4ID0gVG1wTWFwcGVy
OjphYnNvbHV0ZUluZGV4KHRtcCk7Ci0gICAgICAgIHdoaWxlICh1bnNpZ25lZCBuZXh0QWxpYXNJ
bmRleCA9IG1fY29hbGVzY2VkVG1wc0F0U3BpbGxbYWxpYXNJbmRleF0pCisgICAgICAgIEluZGV4
VHlwZSBhbGlhc0luZGV4ID0gdG1wVG9JbmRleCh0bXApOworICAgICAgICB3aGlsZSAoSW5kZXhU
eXBlIG5leHRBbGlhc0luZGV4ID0gbV9jb2FsZXNjZWRUbXBzQXRTcGlsbFthbGlhc0luZGV4XSkK
ICAgICAgICAgICAgIGFsaWFzSW5kZXggPSBuZXh0QWxpYXNJbmRleDsKIAogICAgICAgICBUbXAg
YWxpYXMgPSBUbXBNYXBwZXI6OnRtcEZyb21BYnNvbHV0ZUluZGV4KGFsaWFzSW5kZXgpOwpAQCAt
MTUyNyw3ICsxNjQwLDcgQEAgcHVibGljOgogICAgICAgICBjb25zdCBDb2xsZWN0aW9uJiBtX2Nv
bGxlY3Rpb247CiAgICAgfTsKIAotICAgIEluZGV4VG9UbXBJdGVyYWJsZUFkYXB0b3I8VmVjdG9y
PHVuc2lnbmVkPj4gc3BpbGxlZFRtcHMoKSBjb25zdCB7IHJldHVybiBtX3NwaWxsZWRUbXBzOyB9
CisgICAgSW5kZXhUb1RtcEl0ZXJhYmxlQWRhcHRvcjxWZWN0b3I8SW5kZXhUeXBlPj4gc3BpbGxl
ZFRtcHMoKSBjb25zdCB7IHJldHVybiBtX3NwaWxsZWRUbXBzOyB9CiAKICAgICBib29sIHJlcXVp
cmVzU3BpbGxpbmcoKSBjb25zdCB7IHJldHVybiAhbV9zcGlsbGVkVG1wcy5pc0VtcHR5KCk7IH0K
IApAQCAtMTU4NCwxMCArMTY5NywxMCBAQCBJR05PUkVfR0NDX1dBUk5JTkdTX0VORAogICAgICAg
ICBpZiAobGVmdFRtcC5pc0dQKCkgIT0gKGJhbmsgPT0gR1ApIHx8IHJpZ2h0VG1wLmlzR1AoKSAh
PSAoYmFuayA9PSBHUCkpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICAgICAgdW5z
aWduZWQgbGVmdEluZGV4ID0gVG1wTWFwcGVyOjphYnNvbHV0ZUluZGV4KGxlZnRUbXApOwotICAg
ICAgICB1bnNpZ25lZCByaWdodEluZGV4ID0gVG1wTWFwcGVyOjphYnNvbHV0ZUluZGV4KHJpZ2h0
VG1wKTsKKyAgICAgICAgSW5kZXhUeXBlIGxlZnRJbmRleCA9IHRtcFRvSW5kZXgobGVmdFRtcCk7
CisgICAgICAgIEluZGV4VHlwZSByaWdodEluZGV4ID0gdG1wVG9JbmRleChyaWdodFRtcCk7CiAK
LSAgICAgICAgcmV0dXJuICFoYXNJbnRlcmZlcmVuY2VFZGdlKEludGVyZmVyZW5jZUVkZ2VUeXBl
KGxlZnRJbmRleCwgcmlnaHRJbmRleCkpOworICAgICAgICByZXR1cm4gIWhhc0ludGVyZmVyZW5j
ZUVkZ2UobGVmdEluZGV4LCByaWdodEluZGV4KTsKICAgICB9CiAKICAgICB2b2lkIGFkZFRvTG93
UHJpb3JpdHlDb2FsZXNjaW5nQ2FuZGlkYXRlcyhBcmcgbGVmdCwgQXJnIHJpZ2h0KQpAQCAtMTU5
Niw4ICsxNzA5LDggQEAgSUdOT1JFX0dDQ19XQVJOSU5HU19FTkQKICAgICAgICAgVG1wIGxlZnRU
bXAgPSBsZWZ0LnRtcCgpOwogICAgICAgICBUbXAgcmlnaHRUbXAgPSByaWdodC50bXAoKTsKIAot
ICAgICAgICB1bnNpZ25lZCBsZWZ0SW5kZXggPSBUbXBNYXBwZXI6OmFic29sdXRlSW5kZXgobGVm
dFRtcCk7Ci0gICAgICAgIHVuc2lnbmVkIHJpZ2h0SW5kZXggPSBUbXBNYXBwZXI6OmFic29sdXRl
SW5kZXgocmlnaHRUbXApOworICAgICAgICBJbmRleFR5cGUgbGVmdEluZGV4ID0gdG1wVG9JbmRl
eChsZWZ0VG1wKTsKKyAgICAgICAgSW5kZXhUeXBlIHJpZ2h0SW5kZXggPSB0bXBUb0luZGV4KHJp
Z2h0VG1wKTsKIAogICAgICAgICB1bnNpZ25lZCBuZXh0TW92ZUluZGV4ID0gbV9jb2FsZXNjaW5n
Q2FuZGlkYXRlcy5zaXplKCk7CiAgICAgICAgIG1fY29hbGVzY2luZ0NhbmRpZGF0ZXMuYXBwZW5k
KHsgbGVmdEluZGV4LCByaWdodEluZGV4IH0pOwpAQCAtMTY3NSw3ICsxNzg4LDcgQEAgSUdOT1JF
X0dDQ19XQVJOSU5HU19FTkQKICAgICAgICAgICAgIEFTU0VSVCh1c2VUbXApOwogCiAgICAgICAg
ICAgICB1bnNpZ25lZCBuZXh0TW92ZUluZGV4ID0gbV9jb2FsZXNjaW5nQ2FuZGlkYXRlcy5zaXpl
KCk7Ci0gICAgICAgICAgICBtX2NvYWxlc2NpbmdDYW5kaWRhdGVzLmFwcGVuZCh7IFRtcE1hcHBl
cjo6YWJzb2x1dGVJbmRleCh1c2VUbXApLCBUbXBNYXBwZXI6OmFic29sdXRlSW5kZXgoZGVmVG1w
KSB9KTsKKyAgICAgICAgICAgIG1fY29hbGVzY2luZ0NhbmRpZGF0ZXMuYXBwZW5kKHsgdG1wVG9J
bmRleCh1c2VUbXApLCB0bXBUb0luZGV4KGRlZlRtcCkgfSk7CiAgICAgICAgICAgICBpZiAodHJh
Y2VEZWJ1ZykKICAgICAgICAgICAgICAgICBkYXRhTG9nTG4oIk1vdmUgYXQgaW5kZXggIiwgbmV4
dE1vdmVJbmRleCwgIiBpczogIiwgKnByZXZJbnN0KTsKIApAQCAtMTc0MywxNCArMTg1NiwxNSBA
QCBJR05PUkVfR0NDX1dBUk5JTkdTX0VORAogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAg
ICAgIGZvciAoVG1wIGxpdmVUbXAgOiBsaXZlVG1wcykgewogICAgICAgICAgICAgICAgICAgICBB
U1NFUlQobGl2ZVRtcC5pc0dQKCkgPT0gKGJhbmsgPT0gR1ApKTsKLSAgICAgICAgICAgICAgICAg
ICAgCi0gICAgICAgICAgICAgICAgICAgIGlmICh0cmFjZURlYnVnKQotICAgICAgICAgICAgICAg
ICAgICAgICAgZGF0YUxvZygiICAgIEFkZGluZyBkZWYtbGl2ZSBlZGdlOiAiLCBhcmcsICIsICIs
IGxpdmVUbXAsICJcbiIpOworCisgICAgICAgICAgICAgICAgICAgIGRhdGFMb2dMbklmKHRyYWNl
RGVidWcsICIgICAgQWRkaW5nIGRlZi1saXZlIGVkZ2U6ICIsIGFyZywgIiwgIiwgbGl2ZVRtcCk7
CiAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICBhZGRFZGdlKGFyZywg
bGl2ZVRtcCk7CiAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGZvciAoY29uc3Qg
VG1wJiBwaW5uZWRSZWdUbXAgOiBtX3Bpbm5lZFJlZ3MpCisgICAgICAgICAgICAgICAgZm9yIChj
b25zdCBUbXAmIHBpbm5lZFJlZ1RtcCA6IG1fcGlubmVkUmVncykgeworICAgICAgICAgICAgICAg
ICAgICBkYXRhTG9nTG5JZih0cmFjZURlYnVnLCAiICAgIEFkZGluZyBkZWYtcGlubmVkIGVkZ2U6
ICIsIGFyZywgIiwgIiwgcGlubmVkUmVnVG1wKTsKICAgICAgICAgICAgICAgICAgICAgYWRkRWRn
ZShhcmcsIHBpbm5lZFJlZ1RtcCk7CisgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfSk7
CiAgICAgfQogCkBAIC0xNzU4LDcgKzE4NzIsNyBAQCBJR05PUkVfR0NDX1dBUk5JTkdTX0VORAog
ICAgIHsKICAgICAgICAgQVNTRVJUX1dJVEhfTUVTU0FHRShhLmlzR1AoKSA9PSBiLmlzR1AoKSwg
IkFuIGludGVyZmVyZW5jZSBiZXR3ZWVuIHJlZ2lzdGVycyBvZiBkaWZmZXJlbnQgdHlwZXMgZG9l
cyBub3QgbWFrZSBzZW5zZSwgaXQgY2FuIGxlYWQgdG8gbm9uLWNvbG9yYWJsZSBncmFwaHMuIik7
CiAKLSAgICAgICAgYWRkRWRnZShUbXBNYXBwZXI6OmFic29sdXRlSW5kZXgoYSksIFRtcE1hcHBl
cjo6YWJzb2x1dGVJbmRleChiKSk7CisgICAgICAgIGFkZEVkZ2UodG1wVG9JbmRleChhKSwgdG1w
VG9JbmRleChiKSk7CiAgICAgfQogCiAgICAgLy8gQ2FsbGluZyB0aGlzIHdpdGhvdXQgYSB0bXBX
aWR0aCB3aWxsIHBlcmZvcm0gYSBtb3JlIGNvbnNlcnZhdGl2ZSBjb2FsZXNjaW5nIGFuYWx5c2lz
IHRoYXQgYXNzdW1lcwpAQCAtMTgyMCw3ICsxOTM0LDcgQEAgSUdOT1JFX0dDQ19XQVJOSU5HU19F
TkQKIAogY2xhc3MgR3JhcGhDb2xvcmluZ1JlZ2lzdGVyQWxsb2NhdGlvbiB7CiBwdWJsaWM6Ci0g
ICAgR3JhcGhDb2xvcmluZ1JlZ2lzdGVyQWxsb2NhdGlvbihDb2RlJiBjb2RlLCBVc2VDb3VudHM8
VG1wPiYgdXNlQ291bnRzKQorICAgIEdyYXBoQ29sb3JpbmdSZWdpc3RlckFsbG9jYXRpb24oQ29k
ZSYgY29kZSwgVXNlQ291bnRzJiB1c2VDb3VudHMpCiAgICAgICAgIDogbV9jb2RlKGNvZGUpCiAg
ICAgICAgICwgbV91c2VDb3VudHModXNlQ291bnRzKQogICAgIHsKQEAgLTE4NDAsNyArMTk1NCw3
IEBAIHByaXZhdGU6CiAgICAgdGVtcGxhdGU8QmFuayBiYW5rPgogICAgIHZvaWQgYWxsb2NhdGVP
bkJhbmsoKQogICAgIHsKLSAgICAgICAgSGFzaFNldDx1bnNpZ25lZD4gdW5zcGlsbGFibGVUbXBz
ID0gY29tcHV0ZVVuc3BpbGxhYmxlVG1wczxiYW5rPigpOworICAgICAgICBCaXRWZWN0b3IgdW5z
cGlsbGFibGVUbXBzID0gY29tcHV0ZVVuc3BpbGxhYmxlVG1wczxiYW5rPigpOwogCiAgICAgICAg
IC8vIEZJWE1FOiBJZiBhIFRtcCBpcyB1c2VkIG9ubHkgZnJvbSBhIFNjcmF0Y2ggcm9sZSBhbmQg
dGhhdCBhcmd1bWVudCBpcyAhYWRtaXRzU3RhY2ssIHRoZW4KICAgICAgICAgLy8gd2Ugc2hvdWxk
IGFkZCB0aGUgVG1wIHRvIHVuc3BpbGxhYmxlVG1wcy4gVGhhdCB3aWxsIGhlbHAgYXZvaWQgcmVs
b29waW5nIG9ubHkgdG8gdHVybiB0aGUKQEAgLTE4NjQsMTAgKzE5NzgsOSBAQCBwcml2YXRlOgog
ICAgICAgICAgICAgLy8gY3JlYXRlZCBUbXBzIG1heSBnZXQgbmFycm93ZXIgdXNlL2RlZiB3aWR0
aHMuIE9uIHRoZSBvdGhlciBoYW5kLCB0aGUgc3BpbGxlciBhbHJlYWR5CiAgICAgICAgICAgICAv
LyBzZWxlY3RzIHdoaWNoIG1vdmUgaW5zdHJ1Y3Rpb24gdG8gdXNlIGJhc2VkIG9uIHRoZSBvcmln
aW5hbCBUbXAncyB3aWR0aHMsIHNvIGl0IG1heSBub3QKICAgICAgICAgICAgIC8vIG1hdHRlciB0
aGFuIGEgc3Vic2VxdWVudCBpdGVyYXRpb24gc2VlcyBhIGNvbnNlcnZhdGl2ZSB3aWR0aCBmb3Ig
dGhlIG5ldyBUbXBzLiBBbHNvLCB0aGUKLSAgICAgICAgICAgIC8vIHJlY29tcHV0YXRpb24gbWF5
IG5vdCBhY3R1YWxseSBiZSBhIHBlcmZvcm1hbmNlIHByb2JsZW07IGl0J3MgbGlrZWx5IHRoYXQg
YSBiZXR0ZXIgd2F5IHRvCi0gICAgICAgICAgICAvLyBpbXByb3ZlIHBlcmZvcm1hbmNlIG9mIFRt
cFdpZHRoIGlzIHRvIHJlcGxhY2UgaXRzIEhhc2hNYXAgd2l0aCBzb21ldGhpbmcgZWxzZS4gSXQn
cwotICAgICAgICAgICAgLy8gcG9zc2libGUgdGhhdCBtb3N0IG9mIHRoZSBUbXBXaWR0aCBvdmVy
aGVhZCBpcyBmcm9tIHF1ZXJpZXMgb2YgVG1wV2lkdGggcmF0aGVyIHRoYW4gdGhlCi0gICAgICAg
ICAgICAvLyByZWNvbXB1dGF0aW9uLCBpbiB3aGljaCBjYXNlIHNwZWVkaW5nIHVwIHRoZSBsb29r
dXAgd291bGQgYmUgYSBiaWdnZXIgd2luLgorICAgICAgICAgICAgLy8gcmVjb21wdXRhdGlvbiBt
YXkgbm90IGFjdHVhbGx5IGJlIGEgcGVyZm9ybWFuY2UgcHJvYmxlbTogd2Ugc3BlbmQgcm91Z2hs
eSAzIHRvIDQlIG9mIHRoZQorICAgICAgICAgICAgLy8gcmVnaXN0ZXIgYWxsb2NhdG9yIGluIG1f
dG1wV2lkdGgucmVjb21wdXRlLiBJbiBjb21wYXJpc29uIHdlIHNwZW5kIG1vcmUgdGhhbiA0MCUg
YnVpbGRpbmcKKyAgICAgICAgICAgIC8vIHRoZSBpbnRlcmZlcmVuY2UgZ3JhcGgKICAgICAgICAg
ICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTI0NzgKICAg
ICAgICAgICAgIG1fdG1wV2lkdGgucmVjb21wdXRlPGJhbms+KG1fY29kZSk7CiAKQEAgLTE4ODUs
MjAgKzE5OTgsMjYgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAg
ICAgICAgICAgICB9OwogCisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChtX2NvZGUubnVtVG1w
cyhiYW5rKSA8IHN0ZDo6bnVtZXJpY19saW1pdHM8dWludDE2X3Q+OjptYXgoKSk7CisgICAgICAg
ICAgICAvLyBUaGUgYml0IHZlY3RvciBhcHByb2FjaCB1c2VzIG4qbiBiaXRzLCBvciAya0IgZm9y
IG4gPSA0MDAuCisgICAgICAgICAgICBjb25zdGV4cHIgdW5zaWduZWQgbWF4U2l6ZUZvclNtYWxs
SW50ZXJmZXJlbmNlR3JhcGggPSA0MDA7CisgICAgICAgICAgICB1c2luZyBJbmRleFR5cGUgPSB1
aW50MTZfdDsKKyAgICAgICAgICAgIHVzaW5nIExhcmdlSW50ZXJmZXJlbmNlR3JhcGggPSBJbnRl
cmZlcmVuY2VWZWN0b3I8U21hbGxTZXQ8SW5kZXhUeXBlLCBJbnRIYXNoPEluZGV4VHlwZT4+LCBJ
bmRleFR5cGU+OworICAgICAgICAgICAgdXNpbmcgU21hbGxJbnRlcmZlcmVuY2VHcmFwaCA9IElu
dGVyZmVyZW5jZUJpdFZlY3RvcjxJbmRleFR5cGU+OwogICAgICAgICAgICAgaWYgKHVzZUlSQygp
KSB7Ci0gICAgICAgICAgICAgICAgaWYgKG1fY29kZS5udW1UbXBzKGJhbmspIDwgc3RkOjpudW1l
cmljX2xpbWl0czx1aW50MTZfdD46Om1heCgpKSB7Ci0gICAgICAgICAgICAgICAgICAgIENvbG9y
aW5nQWxsb2NhdG9yPGJhbmssIElSQywgSW50ZXJmZXJlbmNlRWRnZTx1aW50MTZfdCwgdWludDMy
X3Q+PiBhbGxvY2F0b3IobV9jb2RlLCBtX3RtcFdpZHRoLCBtX3VzZUNvdW50cywgdW5zcGlsbGFi
bGVUbXBzKTsKKyAgICAgICAgICAgICAgICBpZiAobV9jb2RlLm51bVRtcHMoYmFuaykgPCBtYXhT
aXplRm9yU21hbGxJbnRlcmZlcmVuY2VHcmFwaCkgeworICAgICAgICAgICAgICAgICAgICBDb2xv
cmluZ0FsbG9jYXRvcjxJbmRleFR5cGUsIGJhbmssIElSQywgU21hbGxJbnRlcmZlcmVuY2VHcmFw
aD4gYWxsb2NhdG9yKG1fY29kZSwgbV90bXBXaWR0aCwgbV91c2VDb3VudHMsIHVuc3BpbGxhYmxl
VG1wcyk7CiAgICAgICAgICAgICAgICAgICAgIGRvbmUgPSBkb0FsbG9jYXRpb24oYWxsb2NhdG9y
KTsKICAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICBDb2xvcmlu
Z0FsbG9jYXRvcjxiYW5rLCBJUkMsIEludGVyZmVyZW5jZUVkZ2U8dWludDMyX3QsIHVpbnQ2NF90
Pj4gYWxsb2NhdG9yKG1fY29kZSwgbV90bXBXaWR0aCwgbV91c2VDb3VudHMsIHVuc3BpbGxhYmxl
VG1wcyk7CisgICAgICAgICAgICAgICAgICAgIENvbG9yaW5nQWxsb2NhdG9yPEluZGV4VHlwZSwg
YmFuaywgSVJDLCBMYXJnZUludGVyZmVyZW5jZUdyYXBoPiBhbGxvY2F0b3IobV9jb2RlLCBtX3Rt
cFdpZHRoLCBtX3VzZUNvdW50cywgdW5zcGlsbGFibGVUbXBzKTsKICAgICAgICAgICAgICAgICAg
ICAgZG9uZSA9IGRvQWxsb2NhdGlvbihhbGxvY2F0b3IpOwogICAgICAgICAgICAgICAgIH0KICAg
ICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgaWYgKG1fY29kZS5udW1UbXBzKGJh
bmspIDwgc3RkOjpudW1lcmljX2xpbWl0czx1aW50MTZfdD46Om1heCgpKSB7Ci0gICAgICAgICAg
ICAgICAgICAgIENvbG9yaW5nQWxsb2NhdG9yPGJhbmssIEJyaWdncywgSW50ZXJmZXJlbmNlRWRn
ZTx1aW50MTZfdCwgdWludDMyX3Q+PiBhbGxvY2F0b3IobV9jb2RlLCBtX3RtcFdpZHRoLCBtX3Vz
ZUNvdW50cywgdW5zcGlsbGFibGVUbXBzKTsKKyAgICAgICAgICAgICAgICBpZiAobV9jb2RlLm51
bVRtcHMoYmFuaykgPCBtYXhTaXplRm9yU21hbGxJbnRlcmZlcmVuY2VHcmFwaCkgeworICAgICAg
ICAgICAgICAgICAgICBDb2xvcmluZ0FsbG9jYXRvcjxJbmRleFR5cGUsIGJhbmssIEJyaWdncywg
U21hbGxJbnRlcmZlcmVuY2VHcmFwaD4gYWxsb2NhdG9yKG1fY29kZSwgbV90bXBXaWR0aCwgbV91
c2VDb3VudHMsIHVuc3BpbGxhYmxlVG1wcyk7CiAgICAgICAgICAgICAgICAgICAgIGRvbmUgPSBk
b0FsbG9jYXRpb24oYWxsb2NhdG9yKTsKICAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAg
ICAgICAgICAgICAgICBDb2xvcmluZ0FsbG9jYXRvcjxiYW5rLCBCcmlnZ3MsIEludGVyZmVyZW5j
ZUVkZ2U8dWludDMyX3QsIHVpbnQ2NF90Pj4gYWxsb2NhdG9yKG1fY29kZSwgbV90bXBXaWR0aCwg
bV91c2VDb3VudHMsIHVuc3BpbGxhYmxlVG1wcyk7CisgICAgICAgICAgICAgICAgICAgIENvbG9y
aW5nQWxsb2NhdG9yPEluZGV4VHlwZSwgYmFuaywgQnJpZ2dzLCBMYXJnZUludGVyZmVyZW5jZUdy
YXBoPiBhbGxvY2F0b3IobV9jb2RlLCBtX3RtcFdpZHRoLCBtX3VzZUNvdW50cywgdW5zcGlsbGFi
bGVUbXBzKTsKICAgICAgICAgICAgICAgICAgICAgZG9uZSA9IGRvQWxsb2NhdGlvbihhbGxvY2F0
b3IpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KQEAgLTE5MDcsMTEgKzIwMjYs
OCBAQCBwcml2YXRlOgogICAgIH0KIAogICAgIHRlbXBsYXRlPEJhbmsgYmFuaz4KLSAgICBIYXNo
U2V0PHVuc2lnbmVkPiBjb21wdXRlVW5zcGlsbGFibGVUbXBzKCkKKyAgICBCaXRWZWN0b3IgY29t
cHV0ZVVuc3BpbGxhYmxlVG1wcygpCiAgICAgewotCi0gICAgICAgIEhhc2hTZXQ8dW5zaWduZWQ+
IHVuc3BpbGxhYmxlVG1wczsKLQogICAgICAgICBzdHJ1Y3QgUmFuZ2UgewogICAgICAgICAgICAg
dW5zaWduZWQgZmlyc3QgeyBzdGQ6Om51bWVyaWNfbGltaXRzPHVuc2lnbmVkPjo6bWF4KCkgfTsK
ICAgICAgICAgICAgIHVuc2lnbmVkIGxhc3QgeyAwIH07CkBAIC0xOTY0LDEyICsyMDgwLDIwIEBA
IHByaXZhdGU6CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICArK2dsb2JhbEluZGV4OwogICAg
ICAgICB9CisKKyAgICAgICAgQml0VmVjdG9yIHVuc3BpbGxhYmxlVG1wczsKKyAgICAgICAgdW5z
cGlsbGFibGVUbXBzLmVuc3VyZVNpemUoYXJyYXlTaXplKTsKICAgICAgICAgZm9yICh1bnNpZ25l
ZCBpID0gQWJzb2x1dGVUbXBNYXBwZXI8YmFuaz46Omxhc3RNYWNoaW5lUmVnaXN0ZXJJbmRleCgp
ICsgMTsgaSA8IHJhbmdlcy5zaXplKCk7ICsraSkgewogICAgICAgICAgICAgUmFuZ2UmIHJhbmdl
ID0gcmFuZ2VzW2ldOwogICAgICAgICAgICAgaWYgKHJhbmdlLmxhc3QgLSByYW5nZS5maXJzdCA8
PSAxICYmIHJhbmdlLmNvdW50ID4gcmFuZ2UuYWRtaXRTdGFja0NvdW50KQotICAgICAgICAgICAg
ICAgIHVuc3BpbGxhYmxlVG1wcy5hZGQoaSk7CisgICAgICAgICAgICAgICAgdW5zcGlsbGFibGVU
bXBzLnF1aWNrU2V0KGkpOwogICAgICAgICB9CiAKKyAgICAgICAgbV9jb2RlLmZvckVhY2hGYXN0
VG1wKFsmXShUbXAgdG1wKSB7CisgICAgICAgICAgICBpZiAodG1wLmJhbmsoKSA9PSBiYW5rKQor
ICAgICAgICAgICAgICAgIHVuc3BpbGxhYmxlVG1wcy5xdWlja1NldChBYnNvbHV0ZVRtcE1hcHBl
cjxiYW5rPjo6YWJzb2x1dGVJbmRleCh0bXApKTsKKyAgICAgICAgfSk7CisKICAgICAgICAgcmV0
dXJuIHVuc3BpbGxhYmxlVG1wczsKICAgICB9CiAKQEAgLTIwMzEsMTIgKzIxNTUsMTIgQEAgcHJp
dmF0ZToKICAgICB9CiAKICAgICB0ZW1wbGF0ZTxCYW5rIGJhbmssIHR5cGVuYW1lIEFsbG9jYXRv
clR5cGU+Ci0gICAgdm9pZCBhZGRTcGlsbEFuZEZpbGwoY29uc3QgQWxsb2NhdG9yVHlwZSYgYWxs
b2NhdG9yLCBIYXNoU2V0PHVuc2lnbmVkPiYgdW5zcGlsbGFibGVUbXBzKQorICAgIHZvaWQgYWRk
U3BpbGxBbmRGaWxsKGNvbnN0IEFsbG9jYXRvclR5cGUmIGFsbG9jYXRvciwgQml0VmVjdG9yJiB1
bnNwaWxsYWJsZVRtcHMpCiAgICAgewogICAgICAgICBIYXNoTWFwPFRtcCwgU3RhY2tTbG90Kj4g
c3RhY2tTbG90czsKICAgICAgICAgZm9yIChUbXAgdG1wIDogYWxsb2NhdG9yLnNwaWxsZWRUbXBz
KCkpIHsKICAgICAgICAgICAgIC8vIEFsbCB0aGUgc3BpbGxlZCB2YWx1ZXMgYmVjb21lIHVuc3Bp
bGxhYmxlLgotICAgICAgICAgICAgdW5zcGlsbGFibGVUbXBzLmFkZChBYnNvbHV0ZVRtcE1hcHBl
cjxiYW5rPjo6YWJzb2x1dGVJbmRleCh0bXApKTsKKyAgICAgICAgICAgIHVuc3BpbGxhYmxlVG1w
cy5zZXQoQWJzb2x1dGVUbXBNYXBwZXI8YmFuaz46OmFic29sdXRlSW5kZXgodG1wKSk7CiAKICAg
ICAgICAgICAgIC8vIEFsbG9jYXRlIHN0YWNrIHNsb3QgZm9yIGVhY2ggc3BpbGxlZCB2YWx1ZS4K
ICAgICAgICAgICAgIFN0YWNrU2xvdCogc3RhY2tTbG90ID0gbV9jb2RlLmFkZFN0YWNrU2xvdCgK
QEAgLTIxMDksMTEgKzIyMzMsOCBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgICAgICAgICAg
Ly8gdmFsdWUgcmF0aGVyIHRoYW4gbG9hZGluZyBpdCBmcm9tIHRoZSBzdGFjay4gSW4gb3JkZXIg
Zm9yIHRoYXQKICAgICAgICAgICAgICAgICAgICAgICAgIC8vIG9wdGltaXphdGlvbiB0byBraWNr
IGluLCB3ZSBuZWVkIHRvIGF2b2lkIHBsYWNpbmcgdGhlIFRtcCdzIHN0YWNrCiAgICAgICAgICAg
ICAgICAgICAgICAgICAvLyBhZGRyZXNzIGludG8gdGhlIGluc3RydWN0aW9uLgotICAgICAgICAg
ICAgICAgICAgICAgICAgaWYgKCFBcmc6OmlzQ29sZFVzZShyb2xlKSkgewotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGNvbnN0IFVzZUNvdW50czxUbXA+OjpDb3VudHMqIGNvdW50cyA9IG1f
dXNlQ291bnRzW2FyZy50bXAoKV07Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNv
dW50cyAmJiBjb3VudHMtPm51bUNvbnN0RGVmcyA9PSAxICYmIGNvdW50cy0+bnVtRGVmcyA9PSAx
KQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIUFyZzo6aXNDb2xkVXNl
KHJvbGUpICYmIG1fdXNlQ291bnRzLmlzQ29uc3REZWY8YmFuaz4oQWJzb2x1dGVUbXBNYXBwZXI8
YmFuaz46OmFic29sdXRlSW5kZXgoYXJnLnRtcCgpKSkpCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuOwogICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAg
ICAgICAgICBXaWR0aCBzcGlsbFdpZHRoID0gbV90bXBXaWR0aC5yZXF1aXJlZFdpZHRoKGFyZy50
bXAoKSk7CiAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoQXJnOjppc0FueURlZihyb2xlKSAm
JiB3aWR0aCA8IHNwaWxsV2lkdGgpIHsKQEAgLTIxNjYsNyArMjI4Nyw3IEBAIHByaXZhdGU6CiAg
ICAgICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKGluc3RCYW5rID09IGJhbmspOwogICAg
ICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgVG1wIHRtcCA9IG1fY29kZS5u
ZXdUbXAoYmFuayk7Ci0gICAgICAgICAgICAgICAgICAgIHVuc3BpbGxhYmxlVG1wcy5hZGQoQWJz
b2x1dGVUbXBNYXBwZXI8YmFuaz46OmFic29sdXRlSW5kZXgodG1wKSk7CisgICAgICAgICAgICAg
ICAgICAgIHVuc3BpbGxhYmxlVG1wcy5zZXQoQWJzb2x1dGVUbXBNYXBwZXI8YmFuaz46OmFic29s
dXRlSW5kZXgodG1wKSk7CiAgICAgICAgICAgICAgICAgICAgIGluc3QuYXJncy5hcHBlbmQodG1w
KTsKICAgICAgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoaW5zdC5hcmdzLnNpemUoKSA9
PSAzKTsKICAgICAgICAgICAgICAgICAgICAgCkBAIC0yMjExLDcgKzIzMzIsNyBAQCBwcml2YXRl
OgogICAgICAgICAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgICAgICAgICAgdG1wID0gbV9j
b2RlLm5ld1RtcChiYW5rKTsKLSAgICAgICAgICAgICAgICAgICAgdW5zcGlsbGFibGVUbXBzLmFk
ZChBYnNvbHV0ZVRtcE1hcHBlcjxiYW5rPjo6YWJzb2x1dGVJbmRleCh0bXApKTsKKyAgICAgICAg
ICAgICAgICAgICAgdW5zcGlsbGFibGVUbXBzLnNldChBYnNvbHV0ZVRtcE1hcHBlcjxiYW5rPjo6
YWJzb2x1dGVJbmRleCh0bXApKTsKICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAg
ICAgICAgIGlmIChyb2xlID09IEFyZzo6U2NyYXRjaCkKICAgICAgICAgICAgICAgICAgICAgICAg
IHJldHVybjsKQEAgLTIyMzUsNyArMjM1Niw3IEBAIHByaXZhdGU6CiAKICAgICBDb2RlJiBtX2Nv
ZGU7CiAgICAgVG1wV2lkdGggbV90bXBXaWR0aDsKLSAgICBVc2VDb3VudHM8VG1wPiYgbV91c2VD
b3VudHM7CisgICAgVXNlQ291bnRzJiBtX3VzZUNvdW50czsKIH07CiAKIH0gLy8gYW5vbnltb3Vz
IG5hbWVzcGFjZQpAQCAtMjI0Nyw3ICsyMzY4LDcgQEAgdm9pZCBhbGxvY2F0ZVJlZ2lzdGVyc0J5
R3JhcGhDb2xvcmluZyhDb2RlJiBjb2RlKQogICAgIGlmICh0cmFjZURlYnVnKQogICAgICAgICBk
YXRhTG9nKCJDb2RlIGJlZm9yZSBncmFwaCBjb2xvcmluZzpcbiIsIGNvZGUpOwogCi0gICAgVXNl
Q291bnRzPFRtcD4gdXNlQ291bnRzKGNvZGUpOworICAgIFVzZUNvdW50cyB1c2VDb3VudHMoY29k
ZSk7CiAgICAgR3JhcGhDb2xvcmluZ1JlZ2lzdGVyQWxsb2NhdGlvbiBncmFwaENvbG9yaW5nUmVn
aXN0ZXJBbGxvY2F0aW9uKGNvZGUsIHVzZUNvdW50cyk7CiAgICAgZ3JhcGhDb2xvcmluZ1JlZ2lz
dGVyQWxsb2NhdGlvbi5ydW4oKTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy9haXIvQWlyQ29kZS5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJDb2Rl
LmgKaW5kZXggYzBiZDM1MjBkMGQzLi5kOGVlNDEyN2I1NzMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQ29kZS5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy9haXIvQWlyQ29kZS5oCkBAIC00MCw2ICs0MCw3IEBACiAjaW5jbHVkZSAiU3RhY2tBbGln
bm1lbnQuaCIKICNpbmNsdWRlIDx3dGYvSGFzaFNldC5oPgogI2luY2x1ZGUgPHd0Zi9JbmRleE1h
cC5oPgorI2luY2x1ZGUgPHd0Zi9TbWFsbFNldC5oPgogI2luY2x1ZGUgPHd0Zi9XZWFrUmFuZG9t
Lmg+CiAKIG5hbWVzcGFjZSBKU0MgewpAQCAtMzExLDcgKzMxMiwxMyBAQCBwdWJsaWM6CiAgICAg
fQogCiAgICAgdm9pZCBhZGRGYXN0VG1wKFRtcCk7Ci0gICAgYm9vbCBpc0Zhc3RUbXAoVG1wIHRt
cCkgY29uc3QgeyByZXR1cm4gbV9mYXN0VG1wcy5jb250YWlucyh0bXApOyB9CisKKyAgICB0ZW1w
bGF0ZTx0eXBlbmFtZSBGdW5jdG9yPgorICAgIHZvaWQgZm9yRWFjaEZhc3RUbXAoY29uc3QgRnVu
Y3RvciYgZnVuY3RvcikgY29uc3QKKyAgICB7CisgICAgICAgIGZvciAoVG1wIHRtcCA6IG1fZmFz
dFRtcHMpCisgICAgICAgICAgICBmdW5jdG9yKHRtcCk7CisgICAgfQogICAgIAogICAgIENGRyYg
Y2ZnKCkgY29uc3QgeyByZXR1cm4gKm1fY2ZnOyB9CiAgICAgCkBAIC0zNzksNyArMzg2LDcgQEAg
cHJpdmF0ZToKICAgICBWZWN0b3I8c3RkOjp1bmlxdWVfcHRyPEJhc2ljQmxvY2s+PiBtX2Jsb2Nr
czsKICAgICBTcGFyc2VDb2xsZWN0aW9uPFNwZWNpYWw+IG1fc3BlY2lhbHM7CiAgICAgc3RkOjp1
bmlxdWVfcHRyPENGRz4gbV9jZmc7Ci0gICAgSGFzaFNldDxUbXA+IG1fZmFzdFRtcHM7CisgICAg
U21hbGxTZXQ8VG1wLCBUbXBIYXNoLCAyPiBtX2Zhc3RUbXBzOwogICAgIENDYWxsU3BlY2lhbCog
bV9jQ2FsbFNwZWNpYWwgeyBudWxscHRyIH07CiAgICAgdW5zaWduZWQgbV9udW1HUFRtcHMgeyAw
IH07CiAgICAgdW5zaWduZWQgbV9udW1GUFRtcHMgeyAwIH07CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpclVzZUNvdW50cy5oIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2IzL2Fpci9BaXJVc2VDb3VudHMuaAppbmRleCA5MGEyNjhjZDU1MjkuLmUwNjYxNWM5ZTNk
MyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJVc2VDb3VudHMu
aAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpclVzZUNvdW50cy5oCkBAIC0x
LDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNS0yMDE3IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNS0yMDIxIEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAt
MzEsMzQgKzMxLDE4IEBACiAjaW5jbHVkZSAiQWlyQmxvY2tXb3JrbGlzdC5oIgogI2luY2x1ZGUg
IkFpckNvZGUuaCIKICNpbmNsdWRlICJBaXJJbnN0SW5saW5lcy5oIgotI2luY2x1ZGUgPHd0Zi9I
YXNoTWFwLmg+Ci0jaW5jbHVkZSA8d3RmL0xpc3REdW1wLmg+CisjaW5jbHVkZSAiQWlyVG1wSW5s
aW5lcy5oIgorI2luY2x1ZGUgPHd0Zi9Db21tYVByaW50ZXIuaD4KKyNpbmNsdWRlIDx3dGYvVmVj
dG9yLmg+CiAKIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeyBuYW1lc3BhY2UgQWlyIHsK
IAogY2xhc3MgQ29kZTsKIAotLy8gQ29tcHV0ZXMgdGhlIG51bWJlciBvZiB1c2VzIG9mIGEgdmFy
aWFibGUgYmFzZWQgb24gZnJlcXVlbmN5IG9mIGV4ZWN1dGlvbi4gVGhlIGZyZXF1ZW5jeSBvZiBi
bG9ja3MKKy8vIENvbXB1dGVzIHRoZSBudW1iZXIgb2YgdXNlcyBvZiBhIHRtcCBiYXNlZCBvbiBm
cmVxdWVuY3kgb2YgZXhlY3V0aW9uLiBUaGUgZnJlcXVlbmN5IG9mIGJsb2NrcwogLy8gdGhhdCBh
cmUgb25seSByZWFjaGFibGUgYnkgcmFyZSBlZGdlcyBpcyBzY2FsZWQgYnkgT3B0aW9uczo6cmFy
ZUJsb2NrUGVuYWx0eSgpLgotCi0vLyBUaGluZyBjYW4gYmUgZWl0aGVyIFRtcCBvciBBcmcuCi10
ZW1wbGF0ZTx0eXBlbmFtZSBUaGluZz4KIGNsYXNzIFVzZUNvdW50cyB7CiBwdWJsaWM6Ci0gICAg
c3RydWN0IENvdW50cyB7Ci0gICAgICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25z
dAotICAgICAgICB7Ci0gICAgICAgICAgICBvdXQucHJpbnQoCi0gICAgICAgICAgICAgICAgIntu
dW1XYXJtVXNlcyA9ICIsIG51bVdhcm1Vc2VzLCAiLCBudW1Db2xkVXNlcyA9ICIsIG51bUNvbGRV
c2VzLCAiLCBudW1EZWZzID0gIiwKLSAgICAgICAgICAgICAgICBudW1EZWZzLCAifSIpOwotICAg
ICAgICB9Ci0gICAgICAgIAotICAgICAgICBkb3VibGUgbnVtV2FybVVzZXMgeyAwIH07Ci0gICAg
ICAgIGRvdWJsZSBudW1Db2xkVXNlcyB7IDAgfTsKLSAgICAgICAgZG91YmxlIG51bURlZnMgeyAw
IH07Ci0gICAgICAgIGRvdWJsZSBudW1Db25zdERlZnMgeyAwIH07Ci0gICAgfTsKLSAgICAKICAg
ICBVc2VDb3VudHMoQ29kZSYgY29kZSkKICAgICB7CiAgICAgICAgIC8vIEZpbmQgbm9uLXJhcmUg
YmxvY2tzLgpAQCAtNzAsNDcgKzU0LDczIEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICAgICAg
ZmFzdFdvcmtsaXN0LnB1c2goc3VjY2Vzc29yLmJsb2NrKCkpOwogICAgICAgICAgICAgfQogICAg
ICAgICB9Ci0gICAgICAgIAorCisgICAgICAgIHVuc2lnbmVkIGdwQXJyYXlTaXplID0gQWJzb2x1
dGVUbXBNYXBwZXI8R1A+OjphYnNvbHV0ZUluZGV4KGNvZGUubnVtVG1wcyhHUCkpOworICAgICAg
ICBtX2dwTnVtV2FybVVzZXNBbmREZWZzLnJlc2l6ZShncEFycmF5U2l6ZSk7CisgICAgICAgIG1f
Z3BDb25zdERlZnMuZW5zdXJlU2l6ZShncEFycmF5U2l6ZSk7CisgICAgICAgIHVuc2lnbmVkIGZw
QXJyYXlTaXplID0gQWJzb2x1dGVUbXBNYXBwZXI8RlA+OjphYnNvbHV0ZUluZGV4KGNvZGUubnVt
VG1wcyhGUCkpOworICAgICAgICBtX2ZwTnVtV2FybVVzZXNBbmREZWZzLnJlc2l6ZShmcEFycmF5
U2l6ZSk7CisgICAgICAgIG1fZnBDb25zdERlZnMuZW5zdXJlU2l6ZShncEFycmF5U2l6ZSk7CisK
ICAgICAgICAgZm9yIChCYXNpY0Jsb2NrKiBibG9jayA6IGNvZGUpIHsKICAgICAgICAgICAgIGRv
dWJsZSBmcmVxdWVuY3kgPSBibG9jay0+ZnJlcXVlbmN5KCk7CiAgICAgICAgICAgICBpZiAoIWZh
c3RXb3JrbGlzdC5zYXcoYmxvY2spKQogICAgICAgICAgICAgICAgIGZyZXF1ZW5jeSAqPSBPcHRp
b25zOjpyYXJlQmxvY2tQZW5hbHR5KCk7CiAgICAgICAgICAgICBmb3IgKEluc3QmIGluc3QgOiAq
YmxvY2spIHsKLSAgICAgICAgICAgICAgICBpbnN0LmZvckVhY2g8VGhpbmc+KAotICAgICAgICAg
ICAgICAgICAgICBbJl0gKFRoaW5nJiBhcmcsIEFyZzo6Um9sZSByb2xlLCBCYW5rLCBXaWR0aCkg
ewotICAgICAgICAgICAgICAgICAgICAgICAgQ291bnRzJiBjb3VudHMgPSBtX2NvdW50cy5hZGQo
YXJnLCBDb3VudHMoKSkuaXRlcmF0b3ItPnZhbHVlOwotCi0gICAgICAgICAgICAgICAgICAgICAg
ICBpZiAoQXJnOjppc1dhcm1Vc2Uocm9sZSkpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
Y291bnRzLm51bVdhcm1Vc2VzICs9IGZyZXF1ZW5jeTsKLSAgICAgICAgICAgICAgICAgICAgICAg
IGlmIChBcmc6OmlzQ29sZFVzZShyb2xlKSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBj
b3VudHMubnVtQ29sZFVzZXMgKz0gZnJlcXVlbmN5OwotICAgICAgICAgICAgICAgICAgICAgICAg
aWYgKEFyZzo6aXNBbnlEZWYocm9sZSkpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgY291
bnRzLm51bURlZnMgKz0gZnJlcXVlbmN5OworICAgICAgICAgICAgICAgIGluc3QuZm9yRWFjaDxU
bXA+KAorICAgICAgICAgICAgICAgICAgICBbJl0gKFRtcCYgdG1wLCBBcmc6OlJvbGUgcm9sZSwg
QmFuayBiYW5rLCBXaWR0aCkgeworCisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoQXJnOjpp
c1dhcm1Vc2Uocm9sZSkgfHwgQXJnOjppc0FueURlZihyb2xlKSkgeworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGlmIChiYW5rID09IEdQKQorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBtX2dwTnVtV2FybVVzZXNBbmREZWZzW0Fic29sdXRlVG1wTWFwcGVyPEdQPjo6YWJzb2x1
dGVJbmRleCh0bXApXSArPSBmcmVxdWVuY3k7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX2ZwTnVtV2FybVVzZXNBbmRE
ZWZzW0Fic29sdXRlVG1wTWFwcGVyPEZQPjo6YWJzb2x1dGVJbmRleCh0bXApXSArPSBmcmVxdWVu
Y3k7CisgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIH0pOwog
CiAgICAgICAgICAgICAgICAgaWYgKChpbnN0LmtpbmQub3Bjb2RlID09IE1vdmUgfHwgaW5zdC5r
aW5kLm9wY29kZSA9PSBNb3ZlMzIpCiAgICAgICAgICAgICAgICAgICAgICYmIGluc3QuYXJnc1sw
XS5pc1NvbWVJbW0oKQotICAgICAgICAgICAgICAgICAgICAmJiBpbnN0LmFyZ3NbMV0uaXM8VGhp
bmc+KCkpCi0gICAgICAgICAgICAgICAgICAgIG1fY291bnRzLmFkZChpbnN0LmFyZ3NbMV0uYXM8
VGhpbmc+KCksIENvdW50cygpKS5pdGVyYXRvci0+dmFsdWUubnVtQ29uc3REZWZzKys7CisgICAg
ICAgICAgICAgICAgICAgICYmIGluc3QuYXJnc1sxXS5pczxUbXA+KCkpIHsKKyAgICAgICAgICAg
ICAgICAgICAgVG1wIHRtcCA9IGluc3QuYXJnc1sxXS5hczxUbXA+KCk7CisgICAgICAgICAgICAg
ICAgICAgIGlmICh0bXAuYmFuaygpID09IEdQKQorICAgICAgICAgICAgICAgICAgICAgICAgbV9n
cENvbnN0RGVmcy5xdWlja1NldChBYnNvbHV0ZVRtcE1hcHBlcjxHUD46OmFic29sdXRlSW5kZXgo
dG1wKSk7CisgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAg
IG1fZnBDb25zdERlZnMucXVpY2tTZXQoQWJzb2x1dGVUbXBNYXBwZXI8RlA+OjphYnNvbHV0ZUlu
ZGV4KHRtcCkpOworICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KICAgICAgICAgfQog
ICAgIH0KIAotICAgIGNvbnN0IENvdW50cyogb3BlcmF0b3JbXShjb25zdCBUaGluZyYgYXJnKSBj
b25zdAorICAgIHRlbXBsYXRlPEJhbmsgYmFuaz4KKyAgICBib29sIGlzQ29uc3REZWYodW5zaWdu
ZWQgYWJzb2x1dGVJbmRleCkgY29uc3QKKyAgICB7CisgICAgICAgIGlmIChiYW5rID09IEdQKQor
ICAgICAgICAgICAgcmV0dXJuIG1fZ3BDb25zdERlZnMucXVpY2tHZXQoYWJzb2x1dGVJbmRleCk7
CisgICAgICAgIHJldHVybiBtX2ZwQ29uc3REZWZzLnF1aWNrR2V0KGFic29sdXRlSW5kZXgpOwor
ICAgIH0KKworICAgIHRlbXBsYXRlPEJhbmsgYmFuaz4KKyAgICBmbG9hdCBudW1XYXJtVXNlc0Fu
ZERlZnModW5zaWduZWQgYWJzb2x1dGVJbmRleCkgY29uc3QKICAgICB7Ci0gICAgICAgIGF1dG8g
aXRlciA9IG1fY291bnRzLmZpbmQoYXJnKTsKLSAgICAgICAgaWYgKGl0ZXIgPT0gbV9jb3VudHMu
ZW5kKCkpCi0gICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICAgICAgcmV0dXJuICZpdGVy
LT52YWx1ZTsKKyAgICAgICAgaWYgKGJhbmsgPT0gR1ApCisgICAgICAgICAgICByZXR1cm4gbV9n
cE51bVdhcm1Vc2VzQW5kRGVmc1thYnNvbHV0ZUluZGV4XTsKKyAgICAgICAgcmV0dXJuIG1fZnBO
dW1XYXJtVXNlc0FuZERlZnNbYWJzb2x1dGVJbmRleF07CiAgICAgfQogCiAgICAgdm9pZCBkdW1w
KFByaW50U3RyZWFtJiBvdXQpIGNvbnN0CiAgICAgewotICAgICAgICBvdXQucHJpbnQobWFwRHVt
cChtX2NvdW50cykpOworICAgICAgICBDb21tYVByaW50ZXIgY29tbWEoIiwgIik7CisgICAgICAg
IGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX2dwTnVtV2FybVVzZXNBbmREZWZzLnNpemUoKTsg
KytpKQorICAgICAgICAgICAgb3V0LnByaW50KGNvbW1hLCBBYnNvbHV0ZVRtcE1hcHBlcjxHUD46
OnRtcEZyb21BYnNvbHV0ZUluZGV4KGkpLCAiPT4ge251bVdhcm1Vc2VzQW5kRGVmcz0iLCBtX2dw
TnVtV2FybVVzZXNBbmREZWZzW2ldLCAiLCBpc0NvbnN0RGVmPSIsIG1fZ3BDb25zdERlZnMucXVp
Y2tHZXQoaSksICJ9Iik7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX2ZwTnVt
V2FybVVzZXNBbmREZWZzLnNpemUoKTsgKytpKQorICAgICAgICAgICAgb3V0LnByaW50KGNvbW1h
LCBBYnNvbHV0ZVRtcE1hcHBlcjxGUD46OnRtcEZyb21BYnNvbHV0ZUluZGV4KGkpLCAiPT4ge251
bVdhcm1Vc2VzQW5kRGVmcz0iLCBtX2ZwTnVtV2FybVVzZXNBbmREZWZzW2ldLCAiLCBpc0NvbnN0
RGVmPSIsIG1fZnBDb25zdERlZnMucXVpY2tHZXQoaSksICJ9Iik7CiAgICAgfQogCiBwcml2YXRl
OgotICAgIEhhc2hNYXA8VGhpbmcsIENvdW50cz4gbV9jb3VudHM7CisgICAgVmVjdG9yPGZsb2F0
PiBtX2dwTnVtV2FybVVzZXNBbmREZWZzOworICAgIFZlY3RvcjxmbG9hdD4gbV9mcE51bVdhcm1V
c2VzQW5kRGVmczsKKyAgICBCaXRWZWN0b3IgbV9ncENvbnN0RGVmczsKKyAgICBCaXRWZWN0b3Ig
bV9mcENvbnN0RGVmczsKIH07CiAKIH0gfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzOjpBaXIKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvTm9kZXMuaCBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9wYXJzZXIvTm9kZXMuaAppbmRleCBlZDE3M2MxN2E1YmIuLjU2MTI5OWE2
YTcwZiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9Ob2Rlcy5oCisr
KyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvTm9kZXMuaApAQCAtMzYsNyArMzYsNyBA
QAogI2luY2x1ZGUgIlN5bWJvbFRhYmxlLmgiCiAjaW5jbHVkZSAiVmFyaWFibGVFbnZpcm9ubWVu
dC5oIgogI2luY2x1ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+Ci0jaW5jbHVkZSA8d3RmL1NtYWxsUHRy
U2V0Lmg+CisjaW5jbHVkZSA8d3RmL1NtYWxsU2V0Lmg+CiAKIG5hbWVzcGFjZSBKU0MgewogCkBA
IC01Myw3ICs1Myw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgIGNsYXNzIFJlZ2lzdGVySUQ7CiAg
ICAgY2xhc3MgU2NvcGVOb2RlOwogCi0gICAgdHlwZWRlZiBTbWFsbFB0clNldDxVbmlxdWVkU3Ry
aW5nSW1wbCo+IFVuaXF1ZWRTdHJpbmdJbXBsUHRyU2V0OworICAgIHR5cGVkZWYgU21hbGxTZXQ8
VW5pcXVlZFN0cmluZ0ltcGwqPiBVbmlxdWVkU3RyaW5nSW1wbFB0clNldDsKIAogICAgIGVudW0g
Y2xhc3MgT3BlcmF0b3IgOiB1aW50OF90IHsKICAgICAgICAgRXF1YWwsCmRpZmYgLS1naXQgYS9T
b3VyY2UvV1RGL0NoYW5nZUxvZyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCmluZGV4IGI5Mzk5ZmU3
NDIxZC4uNWFjNTkwMWY4MzlkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL0NoYW5nZUxvZworKysg
Yi9Tb3VyY2UvV1RGL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI0IEBACisyMDIxLTA1LTE3ICBSb2Jp
biBNb3Jpc3NldCAgPHJtb3Jpc3NldEBhcHBsZS5jb20+CisKKyAgICAgICAgTWFrZSBBaXJBbGxv
Y2F0ZVJlZ2lzdGVyc0J5R3JhcGhDb2xvcmluZyB1c2UgbGVzcyBtZW1vcnkKKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIyNTg0OAorCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWShPT1BTKS4KKworICAgICAgICBJIHJlbmFtZWQgU21hbGxQdHJTZXQg
aW50byBTbWFsbFNldCwgYXMgaXQgbm93IHN1cHBvcnRzIGludGVnZXJzIGFzIHdlbGwgYXMgcG9p
bnRlcnMuCisKKyAgICAgICAgSSB0aGVuIHJlZHVjZWQgaXRzIHNpemUgYnkgc2hhcmluZyB0aGUg
c2FtZSBzdG9yYWdlIGZvciBtX2J1ZmZlciBhbmQgZm9yIG1fc21hbGxTdG9yYWdlLgorICAgICAg
ICBUaGlzIGlzIHNhZmUgdG8gZG8sIGJlY2F1c2UgYWxsIG9wZXJhdGlvbnMgYnJhbmNoIG9uIGlz
U21hbGwoKSB3aGljaCBkZXBlbmRzIHB1cmVseSBvbiBtX2NhcGFjaXR5LgorCisgICAgICAgIEkg
YWxzbyBhZGRlZCB0cml2aWFsIHNpemUoKSBhbmQgaXNFbXB0eSgpIG1ldGhvZHMsIHRvIG1ha2Ug
ZGVidWdnaW5nIGVhc2llci4KKworICAgICAgICBGaW5hbGx5IEkgYWRkZWQgYSBjb21tZW50IGF0
IHRoZSB0b3Agb2YgdGhlIGZpbGUgZXhwbGFpbmluZyB3aGVuIHRvIHVzZSwgYW5kIChtb3JlIGlt
cG9ydGFudGx5KSBub3QgdG8gdXNlIFNtYWxsU2V0LgorCisgICAgICAgICogV1RGLnhjb2RlcHJv
ai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogd3RmL0NNYWtlTGlzdHMudHh0OgorICAgICAg
ICAqIHd0Zi9TbWFsbFNldC5jcHA6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV1RGL3d0Zi9TbWFsbFB0
clNldC5jcHAuCisgICAgICAgICogd3RmL1NtYWxsU2V0Lmg6IFJlbmFtZWQgZnJvbSBTb3VyY2Uv
V1RGL3d0Zi9TbWFsbFB0clNldC5oLgorCiAyMDIxLTA1LTE2ICBDaHJpcyBEdW1leiAgPGNkdW1l
ekBhcHBsZS5jb20+CiAKICAgICAgICAgTW9kZXJuaXplIC8gT3B0aW1pemUgU1FMaXRlU3RhdGVt
ZW50IGNyZWF0aW9uIGFuZCBwcmVwYXJhdGlvbgpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi9XVEYu
eGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1NvdXJjZS9XVEYvV1RGLnhjb2RlcHJvai9wcm9q
ZWN0LnBieHByb2oKaW5kZXggYjExZTA5OGNlNDc3Li5hZmY1MzIxYjQ3ZjMgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XVEYvV1RGLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvU291cmNlL1dU
Ri9XVEYueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAtNDIsNyArNDIsNyBAQAogCQkwRjlE
MzM2MDE2NURCQTczMDA1QUQzODcgLyogRmlsZVByaW50U3RyZWFtLmNwcCBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGOUQzMzVCMTY1REJBNzMwMDVBRDM4
NyAvKiBGaWxlUHJpbnRTdHJlYW0uY3BwICovOyB9OwogCQkwRjlEMzM2MjE2NURCQTczMDA1QUQz
ODcgLyogUHJpbnRTdHJlYW0uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMEY5RDMzNUQxNjVEQkE3MzAwNUFEMzg3IC8qIFByaW50U3RyZWFtLmNwcCAq
LzsgfTsKIAkJMEZBNkYzOEYyMENDNTgwRjAwQTAzRENEIC8qIFNlZ21lbnRlZFZlY3Rvci5jcHAg
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkE2RjM4RTIw
Q0M1ODBFMDBBMDNEQ0QgLyogU2VnbWVudGVkVmVjdG9yLmNwcCAqLzsgfTsKLQkJMEZBNkYzOTMy
MENDNzNBMzAwQTAzRENEIC8qIFNtYWxsUHRyU2V0LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGQTZGMzkyMjBDQzczQTIwMEEwM0RDRCAvKiBTbWFs
bFB0clNldC5jcHAgKi87IH07CisJCTBGQTZGMzkzMjBDQzczQTMwMEEwM0RDRCAvKiBTbWFsbFNl
dC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkE2
RjM5MjIwQ0M3M0EyMDBBMDNEQ0QgLyogU21hbGxTZXQuY3BwICovOyB9OwogCQkwRkE2RjM5NTIw
Q0NBQ0U5MDBBMDNEQ0QgLyogVW5pcXVlQXJyYXkuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZBNkYzOTQyMENDQUNFOTAwQTAzRENEIC8qIFVuaXF1
ZUFycmF5LmNwcCAqLzsgfTsKIAkJMEZEREJGQTcxNjY2REZBMzAwQzU1RkVGIC8qIFN0cmluZ1By
aW50U3RyZWFtLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDBGRERCRkE1MTY2NkRGQTMwMEM1NUZFRiAvKiBTdHJpbmdQcmludFN0cmVhbS5jcHAgKi87
IH07CiAJCTBGRTE2NDZBMUI2RkZDOTYwMDQwMEU3QyAvKiBMb2NrLmNwcCBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRTE2NDY4MUI2RkZDOTYwMDQwMEU3
QyAvKiBMb2NrLmNwcCAqLzsgfTsKQEAgLTI3Miw3ICsyNzIsNyBAQAogCQkwRjlEQUEwNTFGRDFD
MzdCMDA3OUM1QjIgLyogU3RhY2tTaG90UHJvZmlsZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gU3RhY2tTaG90UHJvZmlsZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJMEZBNkYzOEUyMENDNTgwRTAwQTAzRENEIC8qIFNlZ21lbnRlZFZlY3Rvci5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTZWdtZW50ZWRWZWN0b3IuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRkE2RjM5MDIwQ0M2MUVCMDBBMDNEQ0QgLyog
UmVmQ291bnRlZEFycmF5LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9
IFJlZkNvdW50ZWRBcnJheS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTBGQTZG
MzkyMjBDQzczQTIwMEEwM0RDRCAvKiBTbWFsbFB0clNldC5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IHBhdGggPSBTbWFsbFB0clNldC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCTBGQTZGMzkyMjBDQzczQTIwMEEwM0RDRCAvKiBTbWFsbFNldC5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTbWFsbFNldC5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTBGQTZGMzk0MjBDQ0FDRTkwMEEwM0RDRCAvKiBVbmlxdWVBcnJh
eS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBVbmlxdWVBcnJheS5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGQjE0RTE4MTgwRkEyMTgwMDlCNkI0
RCAvKiBCYWcuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQmFnLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGQjE0RTFBMTgxMEUxREEwMDlCNkI0RCAvKiBCYWdU
b0hhc2hNYXAuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQmFnVG9IYXNoTWFwLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CkBAIC00NDIsNyArNDQyLDcgQEAKIAkJNzBFQ0E2MEIxQjAyNDI2ODAwNDQ5
NzM5IC8qIFN5bWJvbEltcGwuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU3lt
Ym9sSW1wbC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3MEVDQTYwQzFCMDI0MjY4
MDA0NDk3MzkgLyogVW5pcXVlZFN0cmluZ0ltcGwuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gVW5pcXVlZFN0cmluZ0ltcGwuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJNzkwMzhFMDUyMjRCMDVBNzAwNEMwNzM4IC8qIFNwYW5uaW5nVHJlZS5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBTcGFubmluZ1RyZWUuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKLQkJNzkzNkQ2QTkxQzk5RjhBRTAwMEQxQUVEIC8qIFNtYWxsUHRyU2V0LmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNtYWxsUHRyU2V0Lmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCTc5MzZENkE5MUM5OUY4QUUwMDBEMUFFRCAvKiBTbWFsbFNldC5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTbWFsbFNldC5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQk3OTNCRkFERDlDRUQ0NEI4QjlGQkNBMTYgLyogU3RkVW5vcmRl
cmVkTWFwLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFN0ZFVub3JkZXJlZE1h
cC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3OTUyMTIwMjFGNDI1ODg4MDBCRDY0
MjEgLyogU2luZ2xlUm9vdEdyYXBoLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IFNpbmdsZVJvb3RHcmFwaC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3QTA1MDkz
RDFGQjlEQ0M1MDBCMzNGQjggLyogSlNPTlZhbHVlcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBKU09OVmFsdWVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0x
MjQ0LDggKzEyNDQsOCBAQAogCQkJCUE3NDg3NDRGMTdBMEJEQUUwMEZBMDRDQiAvKiBTaXhDaGFy
YWN0ZXJIYXNoLmNwcCAqLywKIAkJCQlBNzQ4NzQ1MDE3QTBCREFFMDBGQTA0Q0IgLyogU2l4Q2hh
cmFjdGVySGFzaC5oICovLAogCQkJCUE4QTQ3MzBDMTUxQTgyNUIwMDQxMjNGRiAvKiBTaXplTGlt
aXRzLmNwcCAqLywKLQkJCQkwRkE2RjM5MjIwQ0M3M0EyMDBBMDNEQ0QgLyogU21hbGxQdHJTZXQu
Y3BwICovLAotCQkJCTc5MzZENkE5MUM5OUY4QUUwMDBEMUFFRCAvKiBTbWFsbFB0clNldC5oICov
LAorCQkJCTBGQTZGMzkyMjBDQzczQTIwMEEwM0RDRCAvKiBTbWFsbFNldC5jcHAgKi8sCisJCQkJ
NzkzNkQ2QTkxQzk5RjhBRTAwMEQxQUVEIC8qIFNtYWxsU2V0LmggKi8sCiAJCQkJQTMwRDQxMkQx
RjBERTEzRjAwQjcxOTU0IC8qIFNvZnRMaW5raW5nLmggKi8sCiAJCQkJOTMxNTZDOEQyNjJDOTgy
MjAwRUFFMjdCIC8qIFNvcnRlZEFycmF5TWFwLmggKi8sCiAJCQkJNzkwMzhFMDUyMjRCMDVBNzAw
NEMwNzM4IC8qIFNwYW5uaW5nVHJlZS5oICovLApAQCAtMTc2MCw3ICsxNzYwLDcgQEAKIAkJCQk1
MzExQkQ1MzFFQTcxQ0FEMDA1MjUyODEgLyogU2lnbmFscy5jcHAgaW4gU291cmNlcyAqLywKIAkJ
CQlBNzQ4NzQ1MjE3QTBCREFFMDBGQTA0Q0IgLyogU2l4Q2hhcmFjdGVySGFzaC5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQlBOEE0NzQyNTE1MUE4MjVCMDA0MTIzRkYgLyogU2l6ZUxpbWl0cy5jcHAg
aW4gU291cmNlcyAqLywKLQkJCQkwRkE2RjM5MzIwQ0M3M0EzMDBBMDNEQ0QgLyogU21hbGxQdHJT
ZXQuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEZBNkYzOTMyMENDNzNBMzAwQTAzRENEIC8qIFNt
YWxsU2V0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE4QTQ3NDI3MTUxQTgyNUIwMDQxMjNGRiAv
KiBTdGFja0JvdW5kcy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlGRUVBNERGOTIxNkQ3QkU0MDBB
QzA2MDIgLyogU3RhY2tQb2ludGVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUZFREFDRDNEMTYz
MEY4M0YwMEM2OTYzNCAvKiBTdGFja1N0YXRzLmNwcCBpbiBTb3VyY2VzICovLApkaWZmIC0tZ2l0
IGEvU291cmNlL1dURi93dGYvQ01ha2VMaXN0cy50eHQgYi9Tb3VyY2UvV1RGL3d0Zi9DTWFrZUxp
c3RzLnR4dAppbmRleCBlN2RiYzRmMDJmYTAuLjgwMThmYWJhNDZjNyAxMDA2NDQKLS0tIGEvU291
cmNlL1dURi93dGYvQ01ha2VMaXN0cy50eHQKKysrIGIvU291cmNlL1dURi93dGYvQ01ha2VMaXN0
cy50eHQKQEAgLTIzNSw3ICsyMzUsNyBAQCBzZXQoV1RGX1BVQkxJQ19IRUFERVJTCiAgICAgU2lu
Z2x5TGlua2VkTGlzdC5oCiAgICAgU2luZ2x5TGlua2VkTGlzdFdpdGhUYWlsLmgKICAgICBTaXhD
aGFyYWN0ZXJIYXNoLmgKLSAgICBTbWFsbFB0clNldC5oCisgICAgU21hbGxTZXQuaAogICAgIFNv
ZnRMaW5raW5nLmgKICAgICBTb3J0ZWRBcnJheU1hcC5oCiAgICAgU3Bhbm5pbmdUcmVlLmgKQEAg
LTQ0Myw3ICs0NDMsNyBAQCBzZXQoV1RGX1NPVVJDRVMKICAgICBTZWNvbmRzLmNwcAogICAgIFNl
Z21lbnRlZFZlY3Rvci5jcHAKICAgICBTaXhDaGFyYWN0ZXJIYXNoLmNwcAotICAgIFNtYWxsUHRy
U2V0LmNwcAorICAgIFNtYWxsU2V0LmNwcAogICAgIFN0YWNrQm91bmRzLmNwcAogICAgIFN0YWNr
UG9pbnRlci5jcHAKICAgICBTdGFja1N0YXRzLmNwcApkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93
dGYvU21hbGxQdHJTZXQuY3BwIGIvU291cmNlL1dURi93dGYvU21hbGxTZXQuY3BwCnNpbWlsYXJp
dHkgaW5kZXggOTQlCnJlbmFtZSBmcm9tIFNvdXJjZS9XVEYvd3RmL1NtYWxsUHRyU2V0LmNwcApy
ZW5hbWUgdG8gU291cmNlL1dURi93dGYvU21hbGxTZXQuY3BwCmluZGV4IDQyMDQ4ZTdlOGEyMy4u
MmQyZjQxNWIyYzdhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi9TbWFsbFB0clNldC5jcHAK
KysrIGIvU291cmNlL1dURi93dGYvU21hbGxTZXQuY3BwCkBAIC0yNCwxMiArMjQsMTIgQEAKICAq
LwogCiAjaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSA8d3RmL1NtYWxsUHRyU2V0Lmg+Cisj
aW5jbHVkZSA8d3RmL1NtYWxsU2V0Lmg+CiAKICNpbmNsdWRlIDx3dGYvTmV2ZXJEZXN0cm95ZWQu
aD4KIAogbmFtZXNwYWNlIFdURiB7CiAKLURFRklORV9BTExPQ0FUT1JfV0lUSF9IRUFQX0lERU5U
SUZJRVIoU21hbGxQdHJTZXQpOworREVGSU5FX0FMTE9DQVRPUl9XSVRIX0hFQVBfSURFTlRJRklF
UihTbWFsbFNldCk7CiAKIH0gLy8gbmFtZXNwYWNlIFdURgpkaWZmIC0tZ2l0IGEvU291cmNlL1dU
Ri93dGYvU21hbGxQdHJTZXQuaCBiL1NvdXJjZS9XVEYvd3RmL1NtYWxsU2V0LmgKc2ltaWxhcml0
eSBpbmRleCA1MCUKcmVuYW1lIGZyb20gU291cmNlL1dURi93dGYvU21hbGxQdHJTZXQuaApyZW5h
bWUgdG8gU291cmNlL1dURi93dGYvU21hbGxTZXQuaAppbmRleCA0YzZlNDYxOTZkMjkuLjI0NzQx
ZjEyYzM1ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYvU21hbGxQdHJTZXQuaAorKysgYi9T
b3VyY2UvV1RGL3d0Zi9TbWFsbFNldC5oCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAxNiBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTYtMjAyMSBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgKgogICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTMyLDY1ICszMiw3NyBAQAogCiBuYW1lc3BhY2UgV1RG
IHsKIAotREVDTEFSRV9BTExPQ0FUT1JfV0lUSF9IRUFQX0lERU5USUZJRVIoU21hbGxQdHJTZXQp
OworREVDTEFSRV9BTExPQ0FUT1JfV0lUSF9IRUFQX0lERU5USUZJRVIoU21hbGxTZXQpOwogCi10
ZW1wbGF0ZTx0eXBlbmFtZSBQdHJUeXBlLCB1bnNpZ25lZCBTbWFsbEFycmF5U2l6ZSA9IDg+Ci1j
bGFzcyBTbWFsbFB0clNldCB7CisvLyBGdW5jdGlvbmFsbHksIHRoaXMgY2xhc3MgaXMgdmVyeSBz
aW1pbGFyIHRvIFZhcmlhbnQ8VmVjdG9yPFQsIFNtYWxsQXJyYXlTaXplPiwgSGFzaFNldDxUPj4K
Ky8vIEl0IGlzIG9wdGltaXplZCBwcmltYXJpbHkgZm9yIHNwYWNlLCBidXQgaXMgYWxzbyBxdWl0
ZSBmYXN0CisvLyBJdHMgbWFpbiBsaW1pdGF0aW9uIGlzIHRoYXQgaXQgaGFzIG5vIHdheSB0byBy
ZW1vdmUgZWxlbWVudHMgb25jZSB0aGV5IGhhdmUgYmVlbiBhZGRlZCB0byBpdAorLy8gQWxzbywg
aW5zdGVhZCBvZiBiZWluZyBmdWxseSBwYXJhbWV0ZXJpemVkIGJ5IGEgSGFzaFRyYWl0IHBhcmFt
ZXRlciwgaXQgYWx3YXlzIHVzZXMgLTEgKGFsbCBvbmVzKSBhcyBpdHMgZW1wdHkgdmFsdWUKKy8v
IFJlbGF0ZWRseSwgaXQgY2FuIG9ubHkgc3RvcmUgb2JqZWN0cyBvZiB1cCB0byA2NCBiaXQgc2l6
ZSAoYnV0IHRoYXQgcGFydGljdWxhciBsaW1pdGF0aW9uIHNob3VsZCBiZSBmYWlybHkgZWFzeSB0
byBsaWZ0IGlmIG5lZWRlZCkKKy8vIFVzZSBpdCB3aGVuZXZlciB5b3UgbmVlZCB0byBzdG9yZSBh
biB1bmJvdW5kZWQgYnV0IHByb2JhYmx5IHNtYWxsIG51bWJlciBvZiB1bnNpZ25lZCBpbnRlZ2Vy
cyBvciBwb2ludGVycy4KK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIEhhc2ggPSBQdHJI
YXNoQmFzZTxULCBmYWxzZSAvKiBpc1NtYXJ0UHRyICovPiwgdW5zaWduZWQgU21hbGxBcnJheVNp
emUgPSA4PgorY2xhc3MgU21hbGxTZXQgewogICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwot
ICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKFNtYWxsUHRyU2V0KTsKLSAgICBzdGF0aWNfYXNzZXJ0
KHN0ZDo6aXNfdHJpdmlhbGx5X2Rlc3RydWN0aWJsZTxQdHJUeXBlPjo6dmFsdWUsICJXZSBjdXJy
ZW50bHkgZG9uJ3Qgc3VwcG9ydCBub24tdHJpdmlhbGx5IGRlc3RydWN0aWJsZSBwb2ludGVyIHR5
cGVzLiIpOwotICAgIHN0YXRpY19hc3NlcnQoc2l6ZW9mKFB0clR5cGUpID09IHNpemVvZih2b2lk
KiksICJPbmx5IHN1cHBvcnQgcG9pbnRlciBzaXplZCB0aGluZ3MuIik7CisgICAgV1RGX01BS0Vf
Tk9OQ09QWUFCTEUoU21hbGxTZXQpOworICAgIHN0YXRpY19hc3NlcnQoc3RkOjppc190cml2aWFs
bHlfZGVzdHJ1Y3RpYmxlPFQ+Ojp2YWx1ZSwgIldlIGN1cnJlbnRseSBkb24ndCBzdXBwb3J0IG5v
bi10cml2aWFsbHkgZGVzdHJ1Y3RpYmxlIHR5cGVzLiIpOwogICAgIHN0YXRpY19hc3NlcnQoIShT
bWFsbEFycmF5U2l6ZSAmIChTbWFsbEFycmF5U2l6ZSAtIDEpKSwgIklubGluZSBzaXplIG11c3Qg
YmUgYSBwb3dlciBvZiB0d28uIik7CisgICAgc3RhdGljX2Fzc2VydChzaXplb2YoVCopIDw9IFNt
YWxsQXJyYXlTaXplICogc2l6ZW9mKFQpLCAiVGhpcyBjbGFzcyBoYXMgbm90IGJlZW4gdGVzdGVk
IGZvciBtX2lubGluZS5idWZmZXIgbGFyZ2VyIHRoYW4gbV9pbmxpbmUuc21hbGxTdG9yYWdlIik7
CiAKLXB1YmxpYzogCi0gICAgU21hbGxQdHJTZXQoKQorcHVibGljOgorICAgIFNtYWxsU2V0KCkK
KyAgICAgICAgOiBtX2lubGluZSgpCiAgICAgewogICAgICAgICBpbml0aWFsaXplKCk7CiAgICAg
fQogCi0gICAgLy8gV2UgdGFrZSBjYXJlIHRvIGhhdmUgU21hbGxQdHJTZXQgaGF2ZSBwYXJ0aWFs
IG1vdmUgc2VtYW50aWNzIGFsbG93YWJsZSB0aHJvdWdoCisgICAgLy8gV2UgdGFrZSBjYXJlIHRv
IGhhdmUgU21hbGxTZXQgaGF2ZSBwYXJ0aWFsIG1vdmUgc2VtYW50aWNzIGFsbG93YWJsZSB0aHJv
dWdoCiAgICAgLy8gbWVtY3B5LiBJdCdzIHBhcnRpYWwgbW92ZSBzZW1hbnRpY3MgYmVjYXVzZSBv
dXIgZGVzdHJ1Y3RvciBzaG91bGQgbm90IGJlIGNhbGxlZAogICAgIC8vIG9uIHRoZSBTbWFsbFB0
ck9iamVjdCBpbiB0aGUgb2xkIG1lbW9yeSB3ZSB3ZXJlIG1vdmVkIGZyb20gKG90aGVyd2lzZSwg
d2UgbWlnaHQgZnJlZSBtX2J1ZmZlciB0d2ljZSkKICAgICAvLyB1bmxlc3MgdGhhdCBvbGQgbWVt
b3J5IGlzIHJlc2V0IHRvIGJlIGlzU21hbGwoKS4gU2VlIG1vdmUgY29uc3RydWN0b3IgYmVsb3cu
CiAgICAgLy8gVG8gbWFpbnRhaW4gdGhlc2Ugc2VtYW50aWNzLCB3ZSBkZXRlcm1pbmUgaWYgd2Un
cmUgc21hbGwgYnkgY2hlY2tpbmcgb3VyIHNpemUKICAgICAvLyBhbmQgbm90IG91ciBtX2J1ZmZl
ciBwb2ludGVyLiBBbmQgd2hlbiB3ZSdyZSBzbWFsbCwgd2UgZG9uJ3QgZG8gb3BlcmF0aW9ucyBv
bgogICAgIC8vIG1fYnVmZmVyLCBpbnN0ZWFkLCB3ZSBwZXJmb3JtIG9wZXJhdGlvbnMgb24gbV9z
bWFsbFN0b3JhZ2UgZGlyZWN0bHkuIFRoZSByZWFzb24gd2Ugd2FudAotICAgIC8vIHRoZXNlIHNl
bWFudGljcyBpcyB0aGF0IGl0J3MgYmVuZWZpY2lhbCB0byBoYXZlIGEgVmVjdG9yIHRoYXQgY29u
dGFpbnMgU21hbGxQdHJTZXQKLSAgICAvLyAob3IgYW4gb2JqZWN0IHdpdGggU21hbGxQdHJTZXQg
YXMgYSBmaWVsZCkgYmUgYWxsb3dlZCB0byB1c2UgbWVtY3B5IGZvciBpdHMgbW92ZSBvcGVyYXRp
b24uCisgICAgLy8gdGhlc2Ugc2VtYW50aWNzIGlzIHRoYXQgaXQncyBiZW5lZmljaWFsIHRvIGhh
dmUgYSBWZWN0b3IgdGhhdCBjb250YWlucyBTbWFsbFNldAorICAgIC8vIChvciBhbiBvYmplY3Qg
d2l0aCBTbWFsbFNldCBhcyBhIGZpZWxkKSBiZSBhbGxvd2VkIHRvIHVzZSBtZW1jcHkgZm9yIGl0
cyBtb3ZlIG9wZXJhdGlvbi4KIAotICAgIFNtYWxsUHRyU2V0KFNtYWxsUHRyU2V0JiYgb3RoZXIp
CisgICAgU21hbGxTZXQoU21hbGxTZXQmJiBvdGhlcikKICAgICB7Ci0gICAgICAgIG1lbWNweSh0
aGlzLCAmb3RoZXIsIHNpemVvZihTbWFsbFB0clNldCkpOworICAgICAgICBtZW1jcHkodGhpcywg
Jm90aGVyLCBzaXplb2YoU21hbGxTZXQpKTsKICAgICAgICAgb3RoZXIuaW5pdGlhbGl6ZSgpOwog
ICAgIH0KIAotICAgIFNtYWxsUHRyU2V0JiBvcGVyYXRvcj0oU21hbGxQdHJTZXQmJiBvdGhlcikK
KyAgICBTbWFsbFNldCYgb3BlcmF0b3I9KFNtYWxsU2V0JiYgb3RoZXIpCiAgICAgewotICAgICAg
ICB0aGlzLT5+U21hbGxQdHJTZXQoKTsKLSAgICAgICAgbmV3ICh0aGlzKSBTbWFsbFB0clNldChX
VEZNb3ZlKG90aGVyKSk7CisgICAgICAgIHRoaXMtPn5TbWFsbFNldCgpOworICAgICAgICBuZXcg
KHRoaXMpIFNtYWxsU2V0KFdURk1vdmUob3RoZXIpKTsKICAgICAgICAgcmV0dXJuICp0aGlzOwog
ICAgIH0KIAotICAgIH5TbWFsbFB0clNldCgpCisgICAgflNtYWxsU2V0KCkKICAgICB7CiAgICAg
ICAgIGlmICghaXNTbWFsbCgpKQotICAgICAgICAgICAgU21hbGxQdHJTZXRNYWxsb2M6OmZyZWUo
bV9idWZmZXIpOworICAgICAgICAgICAgU21hbGxTZXRNYWxsb2M6OmZyZWUobV9pbmxpbmUuYnVm
ZmVyKTsKICAgICB9CiAKLSAgICBpbmxpbmUgdm9pZCBhZGQoUHRyVHlwZSBwdHIpCisgICAgLy8g
V2UgY291bGQgZWFzaWx5IGluY2x1ZGUgYW4gaXRlcmF0b3IgaW4gdGhpcyB0byBmdWxseSBtYXRj
aCB0aGUgSGFzaFNldCBpbnRlcmZhY2UsIGJ1dCBjdXJyZW50bHkgbm9uZSBvZiBvdXIgY2xpZW50
cyByZXF1aXJlIGl0LgorICAgIHN0cnVjdCBBZGRSZXN1bHQgeworICAgICAgICBib29sIGlzTmV3
RW50cnk7CisgICAgfTsKKworICAgIGlubGluZSBBZGRSZXN1bHQgYWRkKFQgdmFsdWUpCiAgICAg
ewotICAgICAgICBBU1NFUlQoaXNWYWxpZEVudHJ5KHB0cikpOworICAgICAgICBBU1NFUlQoaXNW
YWxpZEVudHJ5KHZhbHVlKSk7CiAKICAgICAgICAgaWYgKGlzU21hbGwoKSkgewogICAgICAgICAg
ICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fc2l6ZTsgaSsrKSB7Ci0gICAgICAgICAgICAg
ICAgaWYgKG1fc21hbGxTdG9yYWdlW2ldID09IHB0cikKLSAgICAgICAgICAgICAgICAgICAgcmV0
dXJuOworICAgICAgICAgICAgICAgIGlmIChtX2lubGluZS5zbWFsbFN0b3JhZ2VbaV0gPT0gdmFs
dWUpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiB7IGZhbHNlIH07CiAgICAgICAgICAgICB9
CiAKICAgICAgICAgICAgIGlmIChtX3NpemUgPCBTbWFsbEFycmF5U2l6ZSkgewotICAgICAgICAg
ICAgICAgIG1fc21hbGxTdG9yYWdlW21fc2l6ZV0gPSBwdHI7CisgICAgICAgICAgICAgICAgbV9p
bmxpbmUuc21hbGxTdG9yYWdlW21fc2l6ZV0gPSB2YWx1ZTsKICAgICAgICAgICAgICAgICArK21f
c2l6ZTsKLSAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgcmV0dXJuIHsg
dHJ1ZSB9OwogICAgICAgICAgICAgfQogCiAgICAgICAgICAgICBncm93KHN0ZDo6bWF4KDY0dSwg
U21hbGxBcnJheVNpemUgKiAyKSk7CkBAIC0xMDMsMjYgKzExNSwyOSBAQCBwdWJsaWM6CiAgICAg
ICAgICAgICBBU1NFUlQoIShtX2NhcGFjaXR5ICYgKG1fY2FwYWNpdHkgLSAxKSkpOwogICAgICAg
ICB9CiAKLSAgICAgICAgdm9pZCoqIGJ1Y2tldCA9IHRoaXMtPmJ1Y2tldChwdHIpOwotICAgICAg
ICBpZiAoKmJ1Y2tldCAhPSBwdHIpIHsKLSAgICAgICAgICAgICpidWNrZXQgPSBwdHI7CisgICAg
ICAgIFQqIGJ1Y2tldCA9IHRoaXMtPmJ1Y2tldCh2YWx1ZSk7CisgICAgICAgIGlmICgqYnVja2V0
ICE9IHZhbHVlKSB7CisgICAgICAgICAgICAqYnVja2V0ID0gdmFsdWU7CiAgICAgICAgICAgICAr
K21fc2l6ZTsKKyAgICAgICAgICAgIHJldHVybiB7IHRydWUgfTsKICAgICAgICAgfQorICAgICAg
ICByZXR1cm4geyBmYWxzZSB9OwogICAgIH0KIAotICAgIGlubGluZSBib29sIGNvbnRhaW5zKFB0
clR5cGUgcHRyKSBjb25zdAorICAgIGlubGluZSBib29sIGNvbnRhaW5zKFQgdmFsdWUpIGNvbnN0
CiAgICAgewotICAgICAgICBBU1NFUlQoaXNWYWxpZEVudHJ5KHB0cikpOworICAgICAgICBBU1NF
UlQoaXNWYWxpZEVudHJ5KHZhbHVlKSk7CiAgICAgICAgIGlmIChpc1NtYWxsKCkpIHsKLSAgICAg
ICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX3NpemU7IGkrKykgeyAvLyBXZSBvbmx5
IG5lZWQgdG8gc2VhcmNoIHVwIHRvIG1fc2l6ZSBiZWNhdXNlIHdlIHN0b3JlIHRoaW5ncyBsaW5l
YXJseSBpbnNpZGUgbV9zbWFsbFN0b3JhZ2UuCi0gICAgICAgICAgICAgICAgaWYgKG1fc21hbGxT
dG9yYWdlW2ldID09IHB0cikKKyAgICAgICAgICAgIC8vIFdlIG9ubHkgbmVlZCB0byBzZWFyY2gg
dXAgdG8gbV9zaXplIGJlY2F1c2Ugd2Ugc3RvcmUgdGhpbmdzIGxpbmVhcmx5IGluc2lkZSBtX3Nt
YWxsU3RvcmFnZS4KKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX3NpemU7
IGkrKykgeworICAgICAgICAgICAgICAgIGlmIChtX2lubGluZS5zbWFsbFN0b3JhZ2VbaV0gPT0g
dmFsdWUpCiAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICAgICAgfQog
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9CiAKLSAgICAgICAgdm9pZCoqIGJ1
Y2tldCA9IHRoaXMtPmJ1Y2tldChwdHIpOwotICAgICAgICByZXR1cm4gKmJ1Y2tldCA9PSBwdHI7
CisgICAgICAgIFQqIGJ1Y2tldCA9IHRoaXMtPmJ1Y2tldCh2YWx1ZSk7CisgICAgICAgIHJldHVy
biAqYnVja2V0ID09IHZhbHVlOwogICAgIH0KIAogICAgIGNsYXNzIGl0ZXJhdG9yIHsKQEAgLTEz
NywxNSArMTUyLDE1IEBAIHB1YmxpYzoKICAgICAgICAgICAgIHJldHVybiAqdGhpczsKICAgICAg
ICAgfQogICAgICAgICAKLSAgICAgICAgUHRyVHlwZSBvcGVyYXRvciooKSBjb25zdCB7IEFTU0VS
VChtX2luZGV4IDwgbV9jYXBhY2l0eSk7IHJldHVybiBzdGF0aWNfY2FzdDxQdHJUeXBlPihtX2J1
ZmZlclttX2luZGV4XSk7IH0KKyAgICAgICAgVCBvcGVyYXRvciooKSBjb25zdCB7IEFTU0VSVCht
X2luZGV4IDwgbV9jYXBhY2l0eSk7IHJldHVybiBzdGF0aWNfY2FzdDxUPihtX2J1ZmZlclttX2lu
ZGV4XSk7IH0KICAgICAgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IGl0ZXJhdG9yJiBvdGhlcikg
Y29uc3QgeyBBU1NFUlQobV9idWZmZXIgPT0gb3RoZXIubV9idWZmZXIpOyByZXR1cm4gbV9pbmRl
eCA9PSBvdGhlci5tX2luZGV4OyB9CiAgICAgICAgIGJvb2wgb3BlcmF0b3IhPShjb25zdCBpdGVy
YXRvciYgb3RoZXIpIGNvbnN0IHsgQVNTRVJUKG1fYnVmZmVyID09IG90aGVyLm1fYnVmZmVyKTsg
cmV0dXJuICEoKnRoaXMgPT0gb3RoZXIpOyB9CiAKICAgICBwcml2YXRlOgotICAgICAgICB0ZW1w
bGF0ZTx0eXBlbmFtZSBVLCB1bnNpZ25lZCBTPiBmcmllbmQgY2xhc3MgV1RGOjpTbWFsbFB0clNl
dDsKKyAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVSwgdHlwZW5hbWUgSCwgdW5zaWduZWQgUz4g
ZnJpZW5kIGNsYXNzIFdURjo6U21hbGxTZXQ7CiAgICAgICAgIHVuc2lnbmVkIG1faW5kZXg7CiAg
ICAgICAgIHVuc2lnbmVkIG1fY2FwYWNpdHk7Ci0gICAgICAgIHZvaWQqKiBtX2J1ZmZlcjsKKyAg
ICAgICAgVCogbV9idWZmZXI7CiAgICAgfTsKIAogICAgIGl0ZXJhdG9yIGJlZ2luKCkgY29uc3QK
QEAgLTE1NCw5ICsxNjksOSBAQCBwdWJsaWM6CiAgICAgICAgIGl0Lm1faW5kZXggPSBzdGQ6Om51
bWVyaWNfbGltaXRzPHVuc2lnbmVkPjo6bWF4KCk7CiAgICAgICAgIGl0Lm1fY2FwYWNpdHkgPSBt
X2NhcGFjaXR5OwogICAgICAgICBpZiAoaXNTbWFsbCgpKQotICAgICAgICAgICAgaXQubV9idWZm
ZXIgPSBjb25zdF9jYXN0PHZvaWQqKj4obV9zbWFsbFN0b3JhZ2UpOworICAgICAgICAgICAgaXQu
bV9idWZmZXIgPSBjb25zdF9jYXN0PFQqPihtX2lubGluZS5zbWFsbFN0b3JhZ2UpOwogICAgICAg
ICBlbHNlCi0gICAgICAgICAgICBpdC5tX2J1ZmZlciA9IG1fYnVmZmVyOworICAgICAgICAgICAg
aXQubV9idWZmZXIgPSBtX2lubGluZS5idWZmZXI7CiAKICAgICAgICAgKytpdDsKIApAQCAtMTY5
LDI0ICsxODQsMjggQEAgcHVibGljOgogICAgICAgICBpdC5tX2luZGV4ID0gbV9jYXBhY2l0eTsK
ICAgICAgICAgaXQubV9jYXBhY2l0eSA9IG1fY2FwYWNpdHk7CiAgICAgICAgIGlmIChpc1NtYWxs
KCkpCi0gICAgICAgICAgICBpdC5tX2J1ZmZlciA9IGNvbnN0X2Nhc3Q8dm9pZCoqPihtX3NtYWxs
U3RvcmFnZSk7CisgICAgICAgICAgICBpdC5tX2J1ZmZlciA9IGNvbnN0X2Nhc3Q8VCo+KG1faW5s
aW5lLnNtYWxsU3RvcmFnZSk7CiAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIGl0Lm1fYnVmZmVy
ID0gbV9idWZmZXI7CisgICAgICAgICAgICBpdC5tX2J1ZmZlciA9IG1faW5saW5lLmJ1ZmZlcjsK
IAogICAgICAgICByZXR1cm4gaXQ7CiAgICAgfQogCiAgICAgaW5saW5lIHVuc2lnbmVkIHNpemUo
KSBjb25zdCB7IHJldHVybiBtX3NpemU7IH0KIAorICAgIGlubGluZSBib29sIGlzRW1wdHkoKSBj
b25zdCB7IHJldHVybiAhc2l6ZSgpOyB9CisKIHByaXZhdGU6Ci0gICAgY29uc3RleHByIHN0YXRp
YyB2b2lkKiBlbXB0eVZhbHVlKCkKKyAgICBjb25zdGV4cHIgc3RhdGljIFQgZW1wdHlWYWx1ZSgp
CiAgICAgewotICAgICAgICByZXR1cm4gYml0d2lzZV9jYXN0PHZvaWQqPihzdGQ6Om51bWVyaWNf
bGltaXRzPHVpbnRwdHJfdD46Om1heCgpKTsKKyAgICAgICAgaWYgY29uc3RleHByIChzdGQ6Omlz
X3BvaW50ZXI8VD46OnZhbHVlKQorICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PFQ+KGJp
dHdpc2VfY2FzdDx2b2lkKj4oc3RkOjpudW1lcmljX2xpbWl0czx1aW50cHRyX3Q+OjptYXgoKSkp
OworICAgICAgICByZXR1cm4gc3RkOjpudW1lcmljX2xpbWl0czxUPjo6bWF4KCk7CiAgICAgfQog
Ci0gICAgYm9vbCBpc1ZhbGlkRW50cnkoY29uc3QgUHRyVHlwZSBwdHIpIGNvbnN0CisgICAgYm9v
bCBpc1ZhbGlkRW50cnkoY29uc3QgVCB2YWx1ZSkgY29uc3QKICAgICB7Ci0gICAgICAgIHJldHVy
biBwdHIgIT0gZW1wdHlWYWx1ZSgpOworICAgICAgICByZXR1cm4gdmFsdWUgIT0gZW1wdHlWYWx1
ZSgpOwogICAgIH0KIAogICAgIGlubGluZSBib29sIGlzU21hbGwoKSBjb25zdApAQCAtMTk3LDQz
ICsyMTYsNjQgQEAgcHJpdmF0ZToKICAgICBpbmxpbmUgdm9pZCBpbml0aWFsaXplKCkKICAgICB7
CiAgICAgICAgIG1fc2l6ZSA9IDA7Ci0gICAgICAgIG1fYnVmZmVyID0gbnVsbHB0cjsKICAgICAg
ICAgbV9jYXBhY2l0eSA9IFNtYWxsQXJyYXlTaXplOwotICAgICAgICBtZW1zZXQobV9zbWFsbFN0
b3JhZ2UsIC0xLCBzaXplb2Yodm9pZCopICogU21hbGxBcnJheVNpemUpOworICAgICAgICBtZW1z
ZXQobV9pbmxpbmUuc21hbGxTdG9yYWdlLCAtMSwgc2l6ZW9mKFQpICogU21hbGxBcnJheVNpemUp
OwogICAgICAgICBBU1NFUlQoaXNTbWFsbCgpKTsKICAgICB9CiAKICAgICBpbmxpbmUgdm9pZCBn
cm93KHVuc2lnbmVkIHNpemUpCiAgICAgewotICAgICAgICBBU1NFUlQoc3RhdGljX2Nhc3Q8aW50
MzJfdD4oYml0d2lzZV9jYXN0PGludHB0cl90PihlbXB0eVZhbHVlKCkpKSA9PSAtMSk7CisgICAg
ICAgIC8vIFdlIG1lbXNldCB0aGUgbmV3IGJ1ZmZlciB3aXRoIC0xLCBzbyBmb3IgY29uc2lzdGVu
Y3kgZW1wdHlWYWx1ZSgpIG11c3QgcmV0dXJuIHNvbWV0aGluZyB3aGljaCBpcyBhbGwgMXMuCisj
aWYgIWRlZmluZWQoTkRFQlVHKQorICAgICAgICBpZiBjb25zdGV4cHIgKHN0ZDo6aXNfcG9pbnRl
cjxUPjo6dmFsdWUpCisgICAgICAgICAgICBBU1NFUlQoYml0d2lzZV9jYXN0PGludHB0cl90Pihl
bXB0eVZhbHVlKCkpID09IC0xbGwpOworICAgICAgICBlbHNlIGlmIGNvbnN0ZXhwciAoc2l6ZW9m
KFQpID09IDgpCisgICAgICAgICAgICBBU1NFUlQoYml0d2lzZV9jYXN0PGludDY0X3Q+KGVtcHR5
VmFsdWUoKSkgPT0gLTFsbCk7CisgICAgICAgIGVsc2UgaWYgY29uc3RleHByIChzaXplb2YoVCkg
PT0gNCkKKyAgICAgICAgICAgIEFTU0VSVChiaXR3aXNlX2Nhc3Q8aW50MzJfdD4oZW1wdHlWYWx1
ZSgpKSA9PSAtMSk7CisgICAgICAgIGVsc2UgaWYgY29uc3RleHByIChzaXplb2YoVCkgPT0gMikK
KyAgICAgICAgICAgIEFTU0VSVChiaXR3aXNlX2Nhc3Q8aW50MTZfdD4oZW1wdHlWYWx1ZSgpKSA9
PSAtMSk7CisgICAgICAgIGVsc2UgaWYgY29uc3RleHByIChzaXplb2YoVCkgPT0gMSkKKyAgICAg
ICAgICAgIEFTU0VSVChiaXR3aXNlX2Nhc3Q8aW50OF90PihlbXB0eVZhbHVlKCkpID09IC0xKTsK
KyAgICAgICAgZWxzZQorICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsK
KyNlbmRpZgogCi0gICAgICAgIHNpemVfdCBhbGxvY2F0aW9uU2l6ZSA9IHNpemVvZih2b2lkKikg
KiBzaXplOworICAgICAgICBzaXplX3QgYWxsb2NhdGlvblNpemUgPSBzaXplb2YoVCkgKiBzaXpl
OwogICAgICAgICBib29sIHdhc1NtYWxsID0gaXNTbWFsbCgpOwotICAgICAgICB2b2lkKiogb2xk
QnVmZmVyID0gd2FzU21hbGwgPyBtX3NtYWxsU3RvcmFnZSA6IG1fYnVmZmVyOworICAgICAgICBU
KiBvbGRCdWZmZXIgPSB3YXNTbWFsbCA/IG1faW5saW5lLnNtYWxsU3RvcmFnZSA6IG1faW5saW5l
LmJ1ZmZlcjsKICAgICAgICAgdW5zaWduZWQgb2xkQ2FwYWNpdHkgPSBtX2NhcGFjaXR5OwotICAg
ICAgICBtX2J1ZmZlciA9IHN0YXRpY19jYXN0PHZvaWQqKj4oU21hbGxQdHJTZXRNYWxsb2M6Om1h
bGxvYyhhbGxvY2F0aW9uU2l6ZSkpOwotICAgICAgICBtZW1zZXQobV9idWZmZXIsIC0xLCBhbGxv
Y2F0aW9uU2l6ZSk7CisgICAgICAgIFQqIG5ld0J1ZmZlciA9IHN0YXRpY19jYXN0PFQqPihTbWFs
bFNldE1hbGxvYzo6bWFsbG9jKGFsbG9jYXRpb25TaXplKSk7CisgICAgICAgIG1lbXNldChuZXdC
dWZmZXIsIC0xLCBhbGxvY2F0aW9uU2l6ZSk7CiAgICAgICAgIG1fY2FwYWNpdHkgPSBzaXplOwog
CiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBvbGRDYXBhY2l0eTsgaSsrKSB7CiAg
ICAgICAgICAgICBpZiAob2xkQnVmZmVyW2ldICE9IGVtcHR5VmFsdWUoKSkgewotICAgICAgICAg
ICAgICAgIHZvaWQqKiBwdHIgPSB0aGlzLT5idWNrZXQoc3RhdGljX2Nhc3Q8UHRyVHlwZT4ob2xk
QnVmZmVyW2ldKSk7CisgICAgICAgICAgICAgICAgVCogcHRyID0gYnVja2V0SW5CdWZmZXIobmV3
QnVmZmVyLCBzdGF0aWNfY2FzdDxUPihvbGRCdWZmZXJbaV0pKTsKICAgICAgICAgICAgICAgICAq
cHRyID0gb2xkQnVmZmVyW2ldOwogICAgICAgICAgICAgfQogICAgICAgICB9CiAKICAgICAgICAg
aWYgKCF3YXNTbWFsbCkKLSAgICAgICAgICAgIFNtYWxsUHRyU2V0TWFsbG9jOjpmcmVlKG9sZEJ1
ZmZlcik7CisgICAgICAgICAgICBTbWFsbFNldE1hbGxvYzo6ZnJlZShvbGRCdWZmZXIpOworCisg
ICAgICAgIG1faW5saW5lLmJ1ZmZlciA9IG5ld0J1ZmZlcjsKICAgICB9CiAKIAotICAgIGlubGlu
ZSB2b2lkKiogYnVja2V0KFB0clR5cGUgdGFyZ2V0KSBjb25zdAorICAgIGlubGluZSBUKiBidWNr
ZXQoVCB0YXJnZXQpIGNvbnN0CisgICAgeworICAgICAgICBBU1NFUlQoIWlzU21hbGwoKSk7Cisg
ICAgICAgIHJldHVybiBidWNrZXRJbkJ1ZmZlcihtX2lubGluZS5idWZmZXIsIHRhcmdldCk7Cisg
ICAgfQorCisgICAgaW5saW5lIFQqIGJ1Y2tldEluQnVmZmVyKFQqIGJ1ZmZlciwgVCB0YXJnZXQp
IGNvbnN0CiAgICAgewogICAgICAgICBBU1NFUlQoIShtX2NhcGFjaXR5ICYgKG1fY2FwYWNpdHkg
LSAxKSkpOwotICAgICAgICB1bnNpZ25lZCBidWNrZXQgPSBQdHJIYXNoQmFzZTxQdHJUeXBlLCBm
YWxzZSAvKiBpc1NtYXJ0UHRyICovPjo6aGFzaCh0YXJnZXQpICYgKG1fY2FwYWNpdHkgLSAxKTsK
KyAgICAgICAgdW5zaWduZWQgYnVja2V0ID0gSGFzaDo6aGFzaCh0YXJnZXQpICYgKG1fY2FwYWNp
dHkgLSAxKTsKICAgICAgICAgdW5zaWduZWQgaW5kZXggPSAwOwogICAgICAgICB3aGlsZSAodHJ1
ZSkgewotICAgICAgICAgICAgdm9pZCoqIHB0ciA9IG1fYnVmZmVyICsgYnVja2V0OworICAgICAg
ICAgICAgVCogcHRyID0gYnVmZmVyICsgYnVja2V0OwogICAgICAgICAgICAgaWYgKCpwdHIgPT0g
ZW1wdHlWYWx1ZSgpKQogICAgICAgICAgICAgICAgIHJldHVybiBwdHI7CiAgICAgICAgICAgICBp
ZiAoKnB0ciA9PSB0YXJnZXQpCkBAIC0yNDUsMTAgKzI4NSwxMyBAQCBwcml2YXRlOgogCiAgICAg
dW5zaWduZWQgbV9zaXplOwogICAgIHVuc2lnbmVkIG1fY2FwYWNpdHk7Ci0gICAgdm9pZCoqIG1f
YnVmZmVyOwotICAgIHZvaWQqIG1fc21hbGxTdG9yYWdlW1NtYWxsQXJyYXlTaXplXTsKKyAgICB1
bmlvbiBVIHsKKyAgICAgICAgVCogYnVmZmVyOworICAgICAgICBUIHNtYWxsU3RvcmFnZVtTbWFs
bEFycmF5U2l6ZV07CisgICAgICAgIFUoKSB7IH07CisgICAgfSBtX2lubGluZTsKIH07CiAKIH0g
Ly8gbmFtZXNwYWNlIFdURgogCi11c2luZyBXVEY6OlNtYWxsUHRyU2V0OwordXNpbmcgV1RGOjpT
bWFsbFNldDsKZGlmZiAtLWdpdCBhL1Rvb2xzL0NoYW5nZUxvZyBiL1Rvb2xzL0NoYW5nZUxvZwpp
bmRleCAyNTBiMzI5MGJiM2QuLjE2YmU0ZDBiMGRmMiAxMDA2NDQKLS0tIGEvVG9vbHMvQ2hhbmdl
TG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE5IEBACisyMDIxLTA1LTE3ICBS
b2JpbiBNb3Jpc3NldCAgPHJtb3Jpc3NldEBhcHBsZS5jb20+CisKKyAgICAgICAgTWFrZSBBaXJB
bGxvY2F0ZVJlZ2lzdGVyc0J5R3JhcGhDb2xvcmluZyB1c2UgbGVzcyBtZW1vcnkKKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIyNTg0OAorCisgICAgICAg
IFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUykuCisKKyAgICAgICAgd3RmL1NtYWxsUHRyU2V0IChu
b3cgU21hbGxTZXQpIHdhcyBjb21wbGV0ZWx5IHVudGVzdGVkLCBzbyBJIGp1c3QgYWRkZWQgYSBm
ZXcgc2ltcGxlIHRlc3RzLgorCisgICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0V2ViS2l0QVBJ
Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0
cy9XVEYvU21hbGxTZXQuY3BwOiBBZGRlZC4KKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OnRlc3RT
bWFsbFNldE9mVW5zaWduZWQpOgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6dGVzdFNtYWxsU2V0
T2ZQb2ludGVycyk6CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjp0ZXN0VmVjdG9yc09mU21hbGxT
ZXRzT2ZVbnNpZ25lZCk6CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpURVNUKToKKwogMjAyMS0w
NS0xNSAgSmVyIE5vYmxlICA8amVyLm5vYmxlQGFwcGxlLmNvbT4KIAogICAgICAgICBNZWRpYVNl
c3Npb25Db29yZGluYXRvciBzdXJ2aXZlcyBwYWdlIHJlbG9hZC9uYXZpZ2F0aW9uCmRpZmYgLS1n
aXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RXZWJLaXRBUEkueGNvZGVwcm9qL3Byb2plY3Qu
cGJ4cHJvaiBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdFdlYktpdEFQSS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCmluZGV4IDY0NmY4NDIwN2EwZS4uMmI1Y2Q2ZTJmYjNlIDEwMDY0NAotLS0g
YS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RXZWJLaXRBUEkueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvagorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RXZWJLaXRBUEkueGNvZGVwcm9qL3By
b2plY3QucGJ4cHJvagpAQCAtMjA4LDYgKzIwOCw3IEBACiAJCTMxRTlCREEzMjQ3RjU3MjkwMDJF
NTFBMiAvKiB3ZWJnbC5odG1sIGluIENvcHkgUmVzb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDMxRTlCREEyMjQ3RjRERDAwMDJFNTFBMiAvKiB3ZWJnbC5odG1sICov
OyB9OwogCQkzMzk3NkQ4MzI0REM0NzlCMDA4MTIzMDQgLyogSW5kZXhTcGFyc2VTZXQuY3BwIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMzM5NzZEODIyNERD
NDc5QjAwODEyMzA0IC8qIEluZGV4U3BhcnNlU2V0LmNwcCAqLzsgfTsKIAkJMzNCRTVBRjkxMzdC
NUFBRTAwNzA1ODEzIC8qIE1vdXNlTW92ZUFmdGVyQ3Jhc2hfQnVuZGxlLmNwcCBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDMzQkU1QUY4MTM3QjVBQUUwMDcw
NTgxMyAvKiBNb3VzZU1vdmVBZnRlckNyYXNoX0J1bmRsZS5jcHAgKi87IH07CisJCTMzQzJDOUMx
MjY1MUY1QjkwMEU0MDdGNiAvKiBTbWFsbFNldC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzM0MyQzlDMDI2NTFGNUI5MDBFNDA3RjYgLyogU21hbGxT
ZXQuY3BwICovOyB9OwogCQkzM0RDODkxMjE0MTk1NUZFMDA3NDdFRjcgLyogc2ltcGxlLWlmcmFt
ZS5odG1sIGluIENvcHkgUmVzb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDMzREM4OTBFMTQxOTUzOTMwMDc0N0VGNyAvKiBzaW1wbGUtaWZyYW1lLmh0bWwgKi87IH07
CiAJCTMzREM4OTE0MTQxOTU3OUYwMDc0N0VGNyAvKiBMb2FkQ2FuY2VsZWROb1NlcnZlclJlZGly
ZWN0Q2FsbGJhY2tfQnVuZGxlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDMzREM4OTEzMTQxOTU3OUYwMDc0N0VGNyAvKiBMb2FkQ2FuY2VsZWROb1Nl
cnZlclJlZGlyZWN0Q2FsbGJhY2tfQnVuZGxlLmNwcCAqLzsgfTsKIAkJMzNFNzlFMDYxMzdCNUZE
OTAwRTMyRDk5IC8qIG1vdXNlLW1vdmUtbGlzdGVuZXIuaHRtbCBpbiBDb3B5IFJlc291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzM0U3OUUwNTEzN0I1RkNFMDBFMzJE
OTkgLyogbW91c2UtbW92ZS1saXN0ZW5lci5odG1sICovOyB9OwpAQCAtMTk5Miw2ICsxOTkzLDcg
QEAKIAkJMzM5NzZEODIyNERDNDc5QjAwODEyMzA0IC8qIEluZGV4U3BhcnNlU2V0LmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEluZGV4U3BhcnNlU2V0LmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMzNCRTVBRjQxMzdCNUE2QzAwNzA1ODEzIC8qIE1v
dXNlTW92ZUFmdGVyQ3Jhc2guY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRo
ID0gTW91c2VNb3ZlQWZ0ZXJDcmFzaC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTMzQkU1QUY4MTM3QjVBQUUwMDcwNTgxMyAvKiBNb3VzZU1vdmVBZnRlckNyYXNoX0J1bmRsZS5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBNb3VzZU1vdmVBZnRlckNy
YXNoX0J1bmRsZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTMzQzJDOUMwMjY1
MUY1QjkwMEU0MDdGNiAvKiBTbWFsbFNldC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTbWFsbFNl
dC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTMzREM4OTBFMTQxOTUzOTMwMDc0
N0VGNyAvKiBzaW1wbGUtaWZyYW1lLmh0bWwgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0Lmh0bWw7IHBhdGggPSAi
c2ltcGxlLWlmcmFtZS5odG1sIjsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMzNEQzg5
MTAxNDE5NTNBMzAwNzQ3RUY3IC8qIExvYWRDYW5jZWxlZE5vU2VydmVyUmVkaXJlY3RDYWxsYmFj
ay5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBMb2FkQ2FuY2VsZWRO
b1NlcnZlclJlZGlyZWN0Q2FsbGJhY2suY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQkzM0RDODkxMzE0MTk1NzlGMDA3NDdFRjcgLyogTG9hZENhbmNlbGVkTm9TZXJ2ZXJSZWRpcmVj
dENhbGxiYWNrX0J1bmRsZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGgg
PSBMb2FkQ2FuY2VsZWROb1NlcnZlclJlZGlyZWN0Q2FsbGJhY2tfQnVuZGxlLmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTQ0MjAsNiArNDQyMiw3IEBACiAJCQkJOTMzRDYzMUIx
RkNCNzYxODAwMzJFQ0Q2IC8qIEhhc2hlci5jcHAgKi8sCiAJCQkJMEJDRDgzMzQxNDg1N0NFNDAw
RUEyMDAzIC8qIEhhc2hNYXAuY3BwICovLAogCQkJCTI2QjJERkY4MTVCREU1OTkwMDRGNjkxRCAv
KiBIYXNoU2V0LmNwcCAqLywKKwkJCQkzM0MyQzlDMDI2NTFGNUI5MDBFNDA3RjYgLyogU21hbGxT
ZXQuY3BwICovLAogCQkJCTdDOEJGRjcwMjNDMDEwNjcwMEMwMDlCMyAvKiBIZXhOdW1iZXIuY3Bw
ICovLAogCQkJCTMzOTc2RDgyMjREQzQ3OUIwMDgxMjMwNCAvKiBJbmRleFNwYXJzZVNldC5jcHAg
Ki8sCiAJCQkJMjY2RkFGRDIxNUU1Nzc1MjAwRjYxRDVCIC8qIEludGVnZXJUb1N0cmluZ0NvbnZl
cnNpb24uY3BwICovLApAQCAtNTE1NSw2ICs1MTU4LDcgQEAKIAkJCWZpbGVzID0gKAogCQkJCTdD
ODNERTk5MUQwQTU5MEMwMEZFQkNGMyAvKiBBdG9tU3RyaW5nLmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCUZFMkQ5NDc0MjQ1RUIyRjQwMEU0ODEzNSAvKiBCaXRtYXAuY3BwIGluIFNvdXJjZXMgKi8s
CisJCQkJMzNDMkM5QzEyNjUxRjVCOTAwRTQwN0Y2IC8qIFNtYWxsU2V0LmNwcCBpbiBTb3VyY2Vz
ICovLAogCQkJCTFBREFEMTUwMUQ3N0E5RjYwMDIxMjU4NiAvKiBCbG9ja1B0ci5tbSBpbiBTb3Vy
Y2VzICovLAogCQkJCTdDODNERTlDMUQwQTU5MEMwMEZFQkNGMyAvKiBCbG9vbUZpbHRlci5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQk3QzgzREYxODFEMEE1OTBDMDBGRUJDRjMgLyogQm94UHRyLmNw
cCBpbiBTb3VyY2VzICovLApkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9X
VEYvU21hbGxTZXQuY3BwIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XVEYvU21hbGxTZXQu
Y3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMC4uNjUwOWExZGZhNWM4
Ci0tLSAvZGV2L251bGwKKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XVEYvU21hbGxT
ZXQuY3BwCkBAIC0wLDAgKzEsMTUzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycn
CisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwor
ICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICog
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5o
IgorCisjaW5jbHVkZSAiVGVzdC5oIgorI2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+CisjaW5jbHVk
ZSA8d3RmL1NtYWxsU2V0Lmg+CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorCituYW1lc3BhY2Ug
VGVzdFdlYktpdEFQSSB7CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+Cit2b2lkIHRlc3RTbWFsbFNl
dE9mVW5zaWduZWQodW5zaWduZWQgbikKK3sKKyAgICBTbWFsbFNldDxULCBJbnRIYXNoPFQ+PiBz
ZXQ7CisKKyAgICBFWFBFQ1RfVFJVRShzZXQuaXNFbXB0eSgpKTsKKyAgICBFWFBFQ1RfRVEoc2V0
LnNpemUoKSwgMHUpOworCisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG47ICsraSkgewor
ICAgICAgICBhdXRvIHJlc3VsdCA9IHNldC5hZGQoaSk7CisgICAgICAgIEVYUEVDVF9UUlVFKHJl
c3VsdC5pc05ld0VudHJ5KTsKKyAgICB9CisKKyAgICBFWFBFQ1RfRkFMU0Uoc2V0LmlzRW1wdHko
KSk7CisgICAgRVhQRUNUX0VRKHNldC5zaXplKCksIG4pOworCisgICAgZm9yICh1bnNpZ25lZCBp
ID0gMDsgaSA8IDIgKiBuOyBpICs9IDIpIHsKKyAgICAgICAgYXV0byByZXN1bHQgPSBzZXQuYWRk
KGkpOworICAgICAgICBpZiAoaSA8IG4pCisgICAgICAgICAgICBFWFBFQ1RfRkFMU0UocmVzdWx0
LmlzTmV3RW50cnkpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBFWFBFQ1RfVFJVRShyZXN1
bHQuaXNOZXdFbnRyeSk7CisgICAgfQorCisgICAgRVhQRUNUX0VRKHNldC5zaXplKCksIG4gKyBu
IC8gMik7CisKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgMiAqIG47ICsraSkgeworICAg
ICAgICBpZiAoaSA8IG4gfHwgIShpICUgMikpCisgICAgICAgICAgICBFWFBFQ1RfVFJVRShzZXQu
Y29udGFpbnMoaSkpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBFWFBFQ1RfRkFMU0Uoc2V0
LmNvbnRhaW5zKGkpKTsKKyAgICB9CisKKyAgICB1bnNpZ25lZCBjb3VudCA9IDA7CisgICAgSGFz
aFNldDxUPiByZWZlcmVuY2VTZXQ7CisgICAgZm9yICh1bnNpZ25lZCBpIDogc2V0KSB7CisgICAg
ICAgIHJlZmVyZW5jZVNldC5hZGQoaSk7CisgICAgICAgICsrY291bnQ7CisgICAgfQorICAgIEVY
UEVDVF9FUShjb3VudCwgbiArIG4gLyAyKTsKKyAgICBFWFBFQ1RfRVEoY291bnQsIHJlZmVyZW5j
ZVNldC5zaXplKCkpOworfQorCit2b2lkIHRlc3RTbWFsbFNldE9mUG9pbnRlcnMoKQoreworICAg
IFNtYWxsU2V0PGludCo+IHNldDsKKworICAgIGNvbnN0ZXhwciB1bnNpZ25lZCBhcnJheVNpemUg
PSAyMDA7CisgICAgaW50IGFycmF5W2FycmF5U2l6ZV07CisgICAgZm9yICh1bnNpZ25lZCBpID0g
MDsgaSA8IGFycmF5U2l6ZTsgKytpKQorICAgICAgICBhcnJheVtpXSA9IGk7CisKKyAgICBmb3Ig
KHVuc2lnbmVkIGkgPSAwOyBpIDwgYXJyYXlTaXplOyArK2kpIHsKKyAgICAgICAgaW50KiBwdHIg
PSAmKGFycmF5W2ldKTsKKyAgICAgICAgRVhQRUNUX0ZBTFNFKHNldC5jb250YWlucyhwdHIpKTsK
KyAgICAgICAgYXV0byByZXN1bHQgPSBzZXQuYWRkKHB0cik7CisgICAgICAgIEVYUEVDVF9UUlVF
KHJlc3VsdC5pc05ld0VudHJ5KTsKKyAgICAgICAgRVhQRUNUX1RSVUUoc2V0LmNvbnRhaW5zKHB0
cikpOworICAgICAgICByZXN1bHQgPSBzZXQuYWRkKHB0cik7CisgICAgICAgIEVYUEVDVF9GQUxT
RShyZXN1bHQuaXNOZXdFbnRyeSk7CisgICAgfQorCisgICAgZm9yIChpbnQqIHB0ciA6IHNldCkK
KyAgICAgICAgKysoKnB0cik7CisKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgYXJyYXlT
aXplOyArK2kpCisgICAgICAgIEVYUEVDVF9FUShhcnJheVtpXSwgc3RhdGljX2Nhc3Q8aW50Pihp
KzEpKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVD4KK3ZvaWQgdGVzdFZlY3RvcnNPZlNtYWxs
U2V0c09mVW5zaWduZWQoKQoreworICAgIFZlY3RvcjxTbWFsbFNldDxULCBJbnRIYXNoPFQ+Piwg
Mj4gdmVjdG9yOworICAgIHZlY3Rvci5hcHBlbmQoeyB9KTsKKyAgICB2ZWN0b3IuYXBwZW5kKHsg
fSk7CisKKyAgICB2ZWN0b3JbMF0uYWRkKDEwMCk7CisgICAgdmVjdG9yWzBdLmFkZCgyMDApOwor
ICAgIHZlY3RvclswXS5hZGQoMzAwKTsKKworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCAy
MDA7ICsraSkKKyAgICAgICAgdmVjdG9yWzFdLmFkZChpKTsKKworICAgIC8vIE5vdyB3ZSBjYXVz
ZSB0aGUgdmVjdG9yIHRvIGNvcHkgaXRzIGNvbnRlbnRzIHRvIGEgbGFyZ2VyIGJ1ZmZlci4KKyAg
ICAvLyBUaGlzIHNob3VsZCBjb3JydXB0IG5laXRoZXIgdGhlIHNtYWxsIHNldCB0aGF0IHVzZXMg
aW5saW5lIHN0b3JhZ2UgKHZlY3RvclswXSksIG5vciB0aGUgb25lIHRoYXQgdXNlcyBhbiBvdXQt
b2YtbGluZSBidWZmZXIgKHZlY3RvclsxXSkuCisgICAgdmVjdG9yLnJlc2l6ZSgzMDApOworCisg
ICAgRVhQRUNUX0VRKHZlY3RvclswXS5zaXplKCksIDMpOworICAgIEVYUEVDVF9UUlVFKHZlY3Rv
clswXS5jb250YWlucygxMDApKTsKKyAgICBFWFBFQ1RfVFJVRSh2ZWN0b3JbMF0uY29udGFpbnMo
MjAwKSk7CisgICAgRVhQRUNUX1RSVUUodmVjdG9yWzBdLmNvbnRhaW5zKDMwMCkpOworICAgIEVY
UEVDVF9GQUxTRSh2ZWN0b3JbMF0uY29udGFpbnMoNDIpKTsKKworICAgIEVYUEVDVF9FUSh2ZWN0
b3JbMV0uc2l6ZSgpLCAxMDApOworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCAyMDA7ICsr
aSkKKyAgICAgICAgRVhQRUNUX1RSVUUodmVjdG9yWzFdLmNvbnRhaW5zKGkpKTsKKyAgICBFWFBF
Q1RfRkFMU0UodmVjdG9yWzFdLmNvbnRhaW5zKDMwMCkpOworfQorCitURVNUKFdURl9TbWFsbFNl
dCwgVGhyZWVVaW50OCkgeyB0ZXN0U21hbGxTZXRPZlVuc2lnbmVkPHVpbnQ4X3Q+KDMpOyB9CitU
RVNUKFdURl9TbWFsbFNldCwgRm91clVpbnQ4KSB7IHRlc3RTbWFsbFNldE9mVW5zaWduZWQ8dWlu
dDhfdD4oNCk7IH0KK1RFU1QoV1RGX1NtYWxsU2V0LCBIdW5kcmVkVWludDgpIHsgdGVzdFNtYWxs
U2V0T2ZVbnNpZ25lZDx1aW50OF90PigxMDApOyB9CitURVNUKFdURl9TbWFsbFNldCwgVGhyZWVV
aW50MTYpIHsgdGVzdFNtYWxsU2V0T2ZVbnNpZ25lZDx1aW50MTZfdD4oMyk7IH0KK1RFU1QoV1RG
X1NtYWxsU2V0LCBGb3VyVWludDE2KSB7IHRlc3RTbWFsbFNldE9mVW5zaWduZWQ8dWludDE2X3Q+
KDQpOyB9CitURVNUKFdURl9TbWFsbFNldCwgSHVuZHJlZFVpbnQxNikgeyB0ZXN0U21hbGxTZXRP
ZlVuc2lnbmVkPHVpbnQxNl90PigxMDApOyB9CitURVNUKFdURl9TbWFsbFNldCwgVGhyZWVVaW50
MzIpIHsgdGVzdFNtYWxsU2V0T2ZVbnNpZ25lZDx1aW50MzJfdD4oMyk7IH0KK1RFU1QoV1RGX1Nt
YWxsU2V0LCBGb3VyVWludDMyKSB7IHRlc3RTbWFsbFNldE9mVW5zaWduZWQ8dWludDMyX3Q+KDQp
OyB9CitURVNUKFdURl9TbWFsbFNldCwgSHVuZHJlZFVpbnQzMikgeyB0ZXN0U21hbGxTZXRPZlVu
c2lnbmVkPHVpbnQzMl90PigxMDApOyB9CitURVNUKFdURl9TbWFsbFNldCwgVGhyZWVVaW50NjQp
IHsgdGVzdFNtYWxsU2V0T2ZVbnNpZ25lZDx1aW50NjRfdD4oMyk7IH0KK1RFU1QoV1RGX1NtYWxs
U2V0LCBGb3VyVWludDY0KSB7IHRlc3RTbWFsbFNldE9mVW5zaWduZWQ8dWludDY0X3Q+KDQpOyB9
CitURVNUKFdURl9TbWFsbFNldCwgSHVuZHJlZFVpbnQ2NCkgeyB0ZXN0U21hbGxTZXRPZlVuc2ln
bmVkPHVpbnQ2NF90PigxMDApOyB9CisKK1RFU1QoV1RGX1NtYWxsU2V0LCBQb2ludGVycykgeyB0
ZXN0U21hbGxTZXRPZlBvaW50ZXJzKCk7IH0KKworVEVTVChXVEZfU21hbGxTZXQsIFZlY3RvclVp
bnQxNikgeyB0ZXN0VmVjdG9yc09mU21hbGxTZXRzT2ZVbnNpZ25lZDx1aW50MTZfdD4oKTsgfQor
VEVTVChXVEZfU21hbGxTZXQsIFZlY3RvclVpbnQzMikgeyB0ZXN0VmVjdG9yc09mU21hbGxTZXRz
T2ZVbnNpZ25lZDx1aW50MzJfdD4oKTsgfQorVEVTVChXVEZfU21hbGxTZXQsIFZlY3RvclVpbnQ2
NCkgeyB0ZXN0VmVjdG9yc09mU21hbGxTZXRzT2ZVbnNpZ25lZDx1aW50NjRfdD4oKTsgfQorCit9
IC8vIG5hbWVzcGFjZSBUZXN0V2ViS2l0QVBJCg==
</data>
<flag name="commit-queue"
          id="449889"
          type_id="3"
          status="-"
          setter="ews-feeder"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>428852</attachid>
            <date>2021-05-17 11:45:52 -0700</date>
            <delta_ts>2021-05-17 11:50:06 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>patchRegisterAllocator</filename>
            <type>text/plain</type>
            <size>86270</size>
            <attacher name="Robin Morisset">rmorisset</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvQ2hhbmdlTG9nCmluZGV4IGY4MzBjYTkzZDA0OC4uNGQ4NzcyZTVhYjQxIDEw
MDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxMDEgQEAKKzIwMjEtMDUtMTcgIFJv
YmluIE1vcmlzc2V0ICA8cm1vcmlzc2V0QGFwcGxlLmNvbT4KKworICAgICAgICBNYWtlIEFpckFs
bG9jYXRlUmVnaXN0ZXJzQnlHcmFwaENvbG9yaW5nIHVzZSBsZXNzIG1lbW9yeQorICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjI1ODQ4CisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTKS4KKworICAgICAgICBXZeKAmXZlIGhhZCBzb21lIGpl
dHNhbSBwcm9ibGVtcyBjYXVzZWQgYnkgdGhlIG1haW4gQWlyIHJlZ2lzdGVyIGFsbG9jYXRvciwg
d2hpY2ggY2F1c2VkIHVzIHRvIGxvd2VyIE9wdGlvbnM6Om1heGltdW1UbXBzRm9yR3JhcGhDb2xv
cmluZy4KKyAgICAgICAgSGVuY2UgdGhpcyBwYXRjaCB0cmllcyB0byBpbXByb3ZlIHRoZSBtZW1v
cnkgdXNhZ2Ugb2YgdGhlIGFsbG9jYXRvci4gSXQgaW5jbHVkZXMgc2V2ZXJhbCBjaGFuZ2VzOgor
ICAgICAgICAtIENoYW5nZSB0aGUgZGF0YXN0cnVjdHVyZSB1c2VkIGZvciByZXByZXNlbnRpbmcg
dGhlIGludGVyZmVyZW5jZSBncmFwaC4gQmVmb3JlIGl0IHdhcyBlZmZlY3RpdmVseSBhIEhhc2hT
ZXQ8c3RkOjpwYWlyPHVpbnQxNl90LCB1aW50MTZfdD4uIE5vdywgaXQgaXMgZWl0aGVyIGEgQml0
dmVjdG9yIChmb3IgbiA8IDQwMCBmb3Igbm93LCBjYW4gYmUgdHdlYWtlZCBlYXNpbHkpLCBvciBh
IFZlY3RvcjxTbWFsbFNldDx1aW50MTZfdD4+IG90aGVyd2lzZS4gVGhpcyBuZWFybHkgaGFsdmVz
IGl0cyBtZW1vcnkgY29uc3VtcHRpb24gaW4gdGhlIGNhc2UgdGhhdCB0aGUgZ3JhcGggaXMgZGVu
c2UgKHdoaWNoIGlzIHdoZW4gdGhlIG92ZXJoZWFkIG9mIHRoZSBTbWFsbFNldHMgaXMgbWluaW1p
emVkLCBhbmQgd2hlbiB0aGUgcmVnaXN0ZXIgYWxsb2NhdG9yIHVzZXMgdGhlIG1vc3QgbWVtb3J5
KS4gSW4gb3JkZXIgdG8gZWFzaWx5IHRlc3QgdGhpcyBjaGFuZ2UsIGFuZCBhbnkgZnVydGhlciBj
aGFuZ2UgdG8gdGhpcyBkYXRhc3RydWN0dXJlLCB0aGUgb2xkIGFwcHJvYWNoIHdhcyBwcmVzZXJ2
ZWQgYXMgSW50ZXJmZXJlbmNlSGFzaFNldCwgYW5kIGEgdGVtcGxhdGUgdG8gcnVuIHR3byBzdWNo
IGRhdGFzdHJ1Y3R1cmVzIGluIHBhcmFsbGVsLCBjaGVja2luZyB0aGVpciBlcXVpdmFsZW5jZSB3
YXMgYWRkZWQ6IEluc3RydW1lbnRlZEludGVyZmVyZW5jZUdyYXBoCisgICAgICAgIC0gVGhlcmUg
d2FzIGFscmVhZHkgc29tZSB0ZW1wbGF0ZSBwYXJhbWV0ZXIgdG8gY2hhbmdlIHRoZSBzaXplIG9m
IHRoZSB0bXAgaW5kaWNlcyBmcm9tIHVuc2lnbmVkIHRvIHVpbnQxNl90Li4gYnV0IHRoZSBjb2Rl
IGZhaWxlZCB0byBjb21waWxlIHVubGVzcyBpdCB3YXMgdW5zaWduZWQuIEkgZml4ZWQgdGhpcywg
bWFkZSBtb3JlIGNvbnNpc3RlbnQgdXNlIG9mIGl0LCBhbmQgc3dpdGNoZWQgdG8gdWludDE2X3Qg
YnkgZGVmYXVsdCAoc2luY2UgT3B0aW9uczo6bWF4aW11bVRtcHNGb3JHcmFwaENvbG9yaW5nIGlz
IDI1aywgd2UgYXJlIGZhciBmcm9tIGV4aGF1c3RpbmcgdWludDE2X3QpLiBUaGlzIGhhbHZlZCB0
aGUgbWVtb3J5IHVzYWdlIG9mIHZhcmlvdXMgb3RoZXIgZGF0YXN0cnVjdHVyZXMgaW4gdGhlIHJl
Z2lzdGVyIGFsbG9jYXRvcgorICAgICAgICAtIHVuc3BpbGxhYmxlVG1wcyB3YXMgYSBIYXNoU2V0
PHVuc2lnbmVkPi4gU2luY2UgaXQgaXMgb2Z0ZW4gcXVpdGUgZGVuc2UgKG9mdGVuIGFyb3VuZCAy
MCUgb24gSmV0U3RyZWFtMiksIEkgcmVwbGFjZWQgaXQgYnkgYSBCaXR2ZWN0b3IgaW5zdGVhZAor
ICAgICAgICAtIG1fYmlhc2VzIHdhcyBhIEhhc2hNYXA8SW5kZXhUeXBlLCBIYXNoU2V0PEluZGV4
VHlwZT4+LiBTaW5jZSBpdCBpcyBleHRyZW1lbHkgcmFyZSB0aGF0IHRoZSBzZXRzIGhhdmUgbW9y
ZSB0aGFuIDggZWxlbWVudHMgKGZyb20gbG9va2luZyBhdCBzb21lIGluc3RydW1lbnRlZCBydW4g
b2YgSmV0U3RyZWFtMiksIEkgcmVwbGFjZWQgaXQgYnkgSGFzaE1hcDxJbmRleFR5cGUsIFNtYWxs
U2V0PEluZGV4VHlwZT4+LiBUaGlzIG5vdCBvbmx5IHNpZ25pZmljYW50bHkgcmVkdWNlcyBtZW1v
cnksIGJ1dCBuZWFybHkgaGFsdmVzIHRoZSB0aW1lIHNwZW50IGluIGFzc2lnbkNvbG9ycyhhcm91
bmQgODBtcyAtPiA0MG1zIGluIEpldFN0cmVhbSAyKQorICAgICAgICAtIFVzZUNvdW50cyB3YXMg
bmVlZGxlc3NseSBnZW5lcmFsOiBpdCBpcyBvbmx5IHVzZWQgYnkgdGhlIHJlZ2lzdGVyIGFsbG9j
YXRvciAoYWxsIG90aGVyIHJlZmVyZW5jZXMgdG8gVXNlQ291bnRzIHJlZmVyIHRvIHRoZSBjb21w
bGV0ZWx5IGRpZmZlcmVudCBCMzo6VXNlQ291bnRzKSwgc28gdGhlcmUgaXMgbm8gcG9pbnQgaW4g
aXQgY29tcHV0aW5nLCBhbmQgdGhlbiBzdG9yaW5nIGxvdHMgb2YgaXJyZWxldmFudCBkYXRhLiBB
IGZsb2F0IGlzIGFsc28gbW9yZSB0aGFuIGVub3VnaCBwcmVjaXNpb24gKGVzcGVjaWFsbHkgc2lu
Y2UgaXQgaXMgcHJldHR5IG11Y2ggYWx3YXlzIDEsIDEwLCAxMDAsIG9yIDEwMDAgaW4gcHJhY3Rp
Y2XigKYpLiBBbHNvLCBzaW5jZSB3ZSBvbmx5IG5lZWQgaXQgaW5kZXhlZCBieSBUbXBzLCB3ZSBj
YW4gdXNlIGEgVmVjdG9yIHdpdGggQWJzb2x1dGVUbXBNYXBwZXIgaW5zdGVhZCBvZiBpdHMgSGFz
aE1hcC4gVGhlc2UgY2hhbmdlcyBhcmUgbm90IGp1c3QgbWVtb3J5IHNhdmluZ3MsIHRoZXkgYWxz
byBtYWtlIHNlbGVjdFNwaWxsIHdheSBmYXN0ZXIgKDU3MG1zIC0+IDI1MG1zIG9uIG15IG1hY2hp
bmUgb24gSmV0U3RyZWFtMikKKyAgICAgICAgLSBXaGlsZSBJIHdhcyBhdCBpdCwgSSBkaWQgYSBj
b3VwbGUgb2Ygb3RoZXIgdHdlYWtzIHRvIHRoZSBsb2dpYyBvZiBzZWxlY3RTcGlsbC4gSW4gcGFy
dGljdWxhciwgaW5zdGVhZCBvZiBoYXZpbmcgdG8gY2hlY2sgZm9yIGlzRmFzdFRtcCBldmVyeSB0
aW1lLCBJIGp1c3QgcHV0IHRoZSBmYXN0IHRtcHMgZGlyZWN0bHkgaW4gdW5zcGlsbGFibGVUbXBz
LCB3aGljaCBwcmV2ZW50cyB0aGVtIGZyb20gZ2V0dGluZyBhZGRlZCB0byBtX3NwaWxsV29ya2xp
c3QgaW4gdGhlIGZpcnN0IHBsYWNlLiBUaGlzICsgYSBiaXQgb2YgY2xlYW4tdXAgKGZvciBleGFt
cGxlIHB1dHRpbmcgYW4gZWFybHkgZXhpdCBpbnN0ZWFkIG9mIHNldHRpbmcgc2NvcmUgdG8gaW5m
aW5pdHkgaW4gdGhlIGNhc2Ugb2YgZGVhZCB0bXBzKSByZXN1bHRlZCBpbiBhIGZ1cnRoZXIgcGVy
ZiB3aW4gKHRvIHJvdWdobHkgMjAwbXMgc3BlbnQgaW4gc2VsZWN0U3BpbGwoKSBvbiBKZXRTdHJl
YW0yKQorCisgICAgICAgIEFsbCB0b2dldGhlciwgdGhpcyBwYXRjaCByZWR1Y2VzIHRoZSB0aW1l
IHNwZW50IGluIHRoZSByZWdpc3RlciBhbGxvY2F0b3IgYnkgcm91Z2hseSAxNSB0byAyMCUgaW4g
SmV0U3RyZWFtMiAodGVzdGVkIGJvdGggd2l0aCB0aGUgQnJpZ2dzIGFuZCB0aGUgSVJDIGFsbG9j
YXRvcnMgb24gbXkgTUJQIDIwMTkpLgorCisgICAgICAgIFNvIGZhciBJIGhhdmUgcGVyZm9ybWFu
Y2UgbnVtYmVycyBmb3IgdGhpcyBwYXRjaCBvbiBib3RoIGFuIGlQaG9uZSA3IGFuZCBhbiBpUGFk
IFBybyAyIChJJ2xsIHB1dCB0aGUgbnVtYmVycyBvbiBNYWMgaW4gdGhlIGJ1Z3ppbGxhIGlzc3Vl
IG9uY2UgdGhlIHBlcmZvcm1hbmNlIGJvdCBkZWlnbnMgdG8gZ2V0IHRvIGl0KS4KKyAgICAgICAg
T24gaVBob25lIDcsIHdlIHNlZSBhIDAuOTQlIGltcHJvdmVtZW50IHRvIHRoZSBKSVQgdGVzdHMg
c2VjdGlvbiBvZiBSQU1pZmljYXRpb24gKHA8MC4wMiksIHdpdGggdGhlIGZvbGxvd2luZyBzaWdu
aWZpY2FudCBzdWItcmVzdWx0czoKKyAgICAgICAgLSAxLjgyJSBiZXR0ZXIgb24gQWlyIChwPDAu
MDIpCisgICAgICAgIC0gMS4xOCUgYmV0dGVyIG9uIEJhc2ljIChwPDAuMDIpCisgICAgICAgIC0g
MS41OSUgYmV0dGVyIG9uIEJveDJEIChwPDAuMDIpCisgICAgICAgIC0gMC40MyUgYmV0dGVyIG9u
IEhhc2hTZXQtd2FzbSAocDwwLjA1KQorICAgICAgICAtIDAuNTIlIGJldHRlciBvbiBNTCAocDww
LjA1KQorICAgICAgICAtIDkuMzklIGJldHRlciBvbiBPZmZsaW5lQXNzZW1ibGVyIChwPDAuMDIp
CisgICAgICAgIC0gMi4xMyUgYmV0dGVyIG9uIGNyeXB0by1hZXMtU1AgKHA8MC4wMikKKyAgICAg
ICAgLSA1LjI5JSBiZXR0ZXIgb24gY3J5cHRvLW1kNS1TUCAocDwwLjAyKQorICAgICAgICAtIDEu
MDAlIGJldHRlciBvbiBjcnlwdG8tc2hhMS1TUCAocDwwLjA1KQorICAgICAgICAtIDAuOTclIGJl
dHRlciBvbiBkYXRlLWZvcm1hdC10b2Z0ZS1TUCAocDwwLjAyKQorICAgICAgICAtIDAuNzglIGJl
dHRlciBvbiBkYXRlLWZvcm1hdC14cGFyYi1TUCAocDwwLjAyKQorICAgICAgICAtIDEuNTUlIGJl
dHRlciBvbiBkZWx0YS1ibHVlIChwPDAuMDIpCisgICAgICAgIC0gMC4zNyUgYmV0dGVyIG9uIGdh
dXNzaWFuLWJsdXIgKHA8MC4wMikKKyAgICAgICAgLSA0LjExJSBiZXR0ZXIgb24gZ2NjLWxvb3Bz
LXdhc20gKHA8MC4wMikKKyAgICAgICAgLSA1LjE0JSBiZXR0ZXIgb24gcXVpY2tzb3J0LXdhc20g
KHA8MC4wMikKKyAgICAgICAgLSAyLjc0JSBiZXR0ZXIgb24gcmF5dHJhY2UgKHA8MC4wMikKKyAg
ICAgICAgLSA0LjUyJSBiZXR0ZXIgb24gcmVnZXhwIChwPDAuMDIpCisgICAgICAgIC0gMS4wMiUg
YmV0dGVyIG9uIGNyeXB0by1zdGFuZm9yZC1hZXMgKHA8MC4wMikKKyAgICAgICAgLSAxMC40MCUg
YmV0dGVyIG9uIHRzZi13YXNtIChwPDAuMDUpCisgICAgICAgIEFzIGV4cGVjdGVkLCB0aGVyZSBp
cyBubyBzdGF0aXN0aWNhbGx5IHNpZ25pZmljYW50IGVmZmVjdCBvbiB0aGUgbm9uLUpJVCBzZWN0
aW9ucyBvZiBSQU1pZmljYXRpb24uCisgICAgICAgIEFub3RoZXIgbG9naWNhbCBhbmQgZXhwZWN0
ZWQgcHJvcGVydHkgb2YgdGhlc2UgcmVzdWx0cyBpcyB0aGF0IHRoZSBsYXJnZXN0IHdpbnMgYXJl
IHRvIHBlYWsgbWVtb3J5IGFuZCBub3QgdG8gZW5kIG1lbW9yeSAoZS5nLiA4LjYzJSBmb3IgcGVh
ayByZWdleHAsIDUuNDglIGZvciBwZWFrIGdjYy1sb29wcy13YXNtLCAxMC43MCUgYmV0dGVyIGZv
ciBwZWFrIGNyeXB0by1tZDUtU1AsIDE3LjgzJSBiZXR0ZXIgZm9yIHBlYWsgT2ZmbGluZUFzc2Vt
YmxlciwgZXRjLi4pCisgICAgICAgIFRoZSByZXN1bHRzIG9uIGlQYWQgUHJvIDIgYXJlIHZlcnkg
c2ltaWxhcjogMS4yMCUgYmV0dGVyIChwPDAuMDIpIG9uIHRoZSBKSVQgdGVzdHMgb2YgUkFNaWZp
Y2F0aW9uLCB3aXRoIHRoZSBmb2xsb3dpbmcgc2lnbmlmaWNhbnQgc3ViLXJlc3VsdHM6CisgICAg
ICAgIC0gMS4yJSBiZXR0ZXIgb24gM2QtY3ViZS1TUCAocDwwLjA1KQorICAgICAgICAtIDAuNjcl
IGJldHRlciBvbiBiYXNpYyAocDwwLjAyKQorICAgICAgICAtIDEuNTclIGJldHRlciBvbiBCb3gy
RCAocDwwLjAyKQorICAgICAgICAtIDExLjMlIGJldHRlciBvbiBPZmZsaW5lQXNzZW1ibGVyIChw
PDAuMDIpLCAxOS4xMSUgYmV0dGVyIG9uIHBlYWsgbWVtb3J5CisgICAgICAgIC0gcmVncmVzc2lv
biBvZiAwLjQ0JSAocDwwLjA1KSBvbiBVbmlQb2tlcgorICAgICAgICAtIDEuNzQlIGJldHRlciBv
biBjcnlwdG8tYWVzLVNQIChwPDAuMDIpCisgICAgICAgIC0gNC43OSUgYmV0dGVyIG9uIGNyeXB0
by1tZDUtU1AgKHA8MC4wMiksIDEwLjM5JSBiZXR0ZXIgb24gcGVhayBtZW1vcnkKKyAgICAgICAg
LSAxLjYzJSBiZXR0ZXIgb24gY3J5cHRvLXNoYTEtU1AgKHA8MC4wMikKKyAgICAgICAgLSAwLjg1
JSBiZXR0ZXIgb24gZGF0YS1mb3JtYXQtdG9mdGUtU1AgKHA8MC4wMikKKyAgICAgICAgLSAyLjQ4
JSBiZXR0ZXIgb24gZGVsdGEtYmx1ZSAocDwwLjAyKQorICAgICAgICAtIDAuMzglIGJldHRlciBv
biBnYXVzc2lhbi1ibHVyIChwPDAuMDIpCisgICAgICAgIC0gMy42OCUgYmV0dGVyIG9uIGdjYy1s
b29wcy13YXNtIChwPDAuMDUpCisgICAgICAgIC0gMC42MiUgYmV0dGVyIG9uIG4tYm9keS1TUCAo
cDwwLjAyKQorICAgICAgICAtIDAuMTklIGJldHRlciBvbiBvY3RhbmUtY29kZS1sb2FkIChwPDAu
MDUpCisgICAgICAgIC0gMi45MyUgYmV0dGVyIG9uIHF1aWNrc29ydC13YXNtIChwPDAuMDIpCisg
ICAgICAgIC0gMy4xMiUgYmV0dGVyIG9uIHJheXRyYWNlIChwPDAuMDIpCisgICAgICAgIC0gMy44
MCUgYmV0dGVyIG9uIHJlZ2V4cCAocDwwLjAyKSwgNy40MCUgYmV0dGVyIG9uIHBlYWsgbWVtb3J5
CisgICAgICAgIC0gMC45MyUgYmV0dGVyIG9uIGNyeXB0by1zdGFuZm9yZC1hZXMgKHA8MC4wMikK
KyAgICAgICAgLSAyNi4wMiUgYmV0dGVyIG9uIHRzZi13YXNtIChwPDAuMDIpICEKKworICAgICAg
ICBNdWNoIG1vcmUgc3VycHJpc2luZ2x5IHRvIG1lLCB0aGUgaVBob25lIDcgYWxzbyBzaG93cyBh
IHNpZ25pZmljYW50IGltcHJvdmVtZW50IHRvIEpldFN0cmVhbSAyOiAxLjI3JSBiZXR0ZXIgKHA8
MC4wNSkuCisgICAgICAgIExvb2tpbmcgYXQgdGhlIHN1Yi10ZXN0cywgd2Ugc2VlIHRoZSBmb2xs
b3dpbmcgc2lnbmlmaWNhbnQgb25lczoKKyAgICAgICAgLSAxLjYzJSBiZXR0ZXIgb24gQm94MkQg
KHA8MC4wMikKKyAgICAgICAgLSAwLjc2JSBiZXR0ZXIgb24gV1NMIChwPDAuMDIpCisgICAgICAg
IC0gYSByZWdyZXNzaW9uIG9mIDIuNzElIG9uIGNyeXB0by1zaGExLVNQIChwPDAuMDUpCisgICAg
ICAgIC0gMi43OCUgYmV0dGVyIG9uIGdhdXNzaWFuLWJsdXIgKHA8MC4wMikKKyAgICAgICAgLSAz
LjUwJSBiZXR0ZXIgb24gZ2JlbXUgKHA8MC4wNSkKKyAgICAgICAgLSAxLjY0JSBiZXR0ZXIgb24g
anNoaW50LXd0YiAocDwwLjAyKQorICAgICAgICAtIDE5LjE5JSBiZXR0ZXIgb24gdGFnY2xvdWQt
U1AgKHA8MC4wMikKKyAgICAgICAgLSAxLjYxJSBiZXR0ZXIgb24gb2N0YW5lLXpsaWIgKHA8MC4w
NSkKKyAgICAgICAgVGhlIGlQYWQgUHJvIDIgc2hvd3Mgbm8gc2lnbmlmaWNhbnQgZWZmZWN0IG9u
IEpldFN0cmVhbSAyIGFzIGEgd2hvbGUsIGJ1dCBoYXMgc2lnbmlmaWNhbnQgZWZmZWN0cyBvbiB0
aGUgZm9sbG93aW5nIHN1Yi10ZXN0czoKKyAgICAgICAgLSAyLjIxJSBiZXR0ZXIgb24gQmFzaWMg
KHA8MC4wMikKKyAgICAgICAgLSAxLjA5JSBiZXR0ZXIgb24gTUwgKHA8MC4wNSkKKyAgICAgICAg
LSAwLjY1JSBiZXR0ZXIgb24gV1NMIChwPDAuMDIpCisgICAgICAgIC0gMS4xNCUgYmV0dGVyIG9u
IGRhdGEtZm9ybWF0LXRvZnRlLVNQIChwPDAuMDUpCisgICAgICAgIC0gMS4yMCUgYmV0dGVyIG9u
IGZpcnN0LWluc3BlY3Rvci1jb2RlLWxvYWQgKHA8MC4wMikKKyAgICAgICAgLSAxLjg5JSBiZXR0
ZXIgb24gZ2F1c3NpYW4tYmx1ciAocDwwLjAyKQorICAgICAgICAtIGEgcmVncmVzc2lvbiBvZiAy
LjAyJSBvbiByZWdleHAtZG5hLVNQIChwPDAuMDIpCisgICAgICAgIC0gNC45JSBiZXR0ZXIgb24g
dGFnY2xvdWQtU1AgKHA8MC4wMikKKyAgICAgICAgSSB0aGluayB0aGVyZSBpcyB0b28gbXVjaCBv
dmVybGFwIGluIHRoZXNlIHJlc3VsdHMgZm9yIHRoZW0gdG8gYmUgZHVlIHB1cmVseSB0byBjaGFu
Y2UsIGJ1dCB0aGVyZSBpcyBjbGVhcmx5IGEgbG90IG9mIG5vaXNlLCBhbmQgSSBleHBlY3QgdGhh
dCB0aGUgaVBob25lNyByZXN1bHRzIG1pZ2h0IGJlIGV4YWdlcmF0ZWQuCisgICAgICAgIE9uZSBt
b3JlIHJlYXNvbiBJIGJlbGlldmUgdGhlcmUgaXMgYSByZWFsIGVmZmVjdCBoZXJlIGFuZCBub3Qg
anVzdCBub2lzZSwgaXMgdGhhdCB0aGUgbGFyZ2VzdCB3aW5zIHdlcmUgdXN1YWxseSBvbiB0aGUg
YHdvcnN0IGl0ZXJhdGlvbmAgcGFydCBvZiB0aGUgc2NvcmVzLCBzbyBJIHN1c3BlY3QgdGhhdCB0
aGUgbWVtb3J5IHRyYWZmaWMgb2YgdGhlIHJlZ2lzdGVyIGFsbG9jYXRvciB3YXMgc29tZXRpbWVz
IHNsb3dpbmcgZG93biB0aGUgbWFpbiB0aHJlYWQsIHBvc3NpYmx5IHRocm91Z2ggY2FjaGUgZXZp
Y3Rpb25zLgorICAgICAgICBJIGNhbid0IGV4cGxhaW4gd2h5IHRhZ2Nsb3VkLVNQIHNob3dzIGxh
cmdlIHdpbnMgb24gSmV0U3RyZWFtMiBhbmQgbm8gd2luIGluIFJBTWlmaWNhdGlvbiB3aGVyZWFz
IHRzZi13YXNtIGlzIHRoZSBvcHBvc2l0ZS4KKworICAgICAgICAqIGIzL0IzUmVkdWNlTG9vcFN0
cmVuZ3RoLmNwcDoKKyAgICAgICAgKEpTQzo6QjM6OlJlZHVjZUxvb3BTdHJlbmd0aDo6cmVkdWNl
Qnl0ZUNvcHlMb29wc1RvTWVtY3B5KToKKyAgICAgICAgKiBiMy9haXIvQWlyQWxsb2NhdGVSZWdp
c3RlcnNCeUdyYXBoQ29sb3JpbmcuY3BwOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjphbGxvY2F0
ZVJlZ2lzdGVyc0J5R3JhcGhDb2xvcmluZyk6CisgICAgICAgICogYjMvYWlyL0FpckNvZGUuaDoK
KyAgICAgICAgKEpTQzo6QjM6OkFpcjo6Q29kZTo6Zm9yRWFjaEZhc3RUbXAgY29uc3QpOgorICAg
ICAgICAqIGIzL2Fpci9BaXJVc2VDb3VudHMuaDoKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6VXNl
Q291bnRzOjpVc2VDb3VudHMpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpVc2VDb3VudHM6Omlz
Q29uc3REZWYgY29uc3QpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpVc2VDb3VudHM6Om51bVdh
cm1Vc2VzQW5kRGVmcyBjb25zdCk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OlVzZUNvdW50czo6
ZHVtcCBjb25zdCk6CisgICAgICAgICogcGFyc2VyL05vZGVzLmg6CisKIDIwMjEtMDUtMTYgIE1h
cmsgTGFtICA8bWFyay5sYW1AYXBwbGUuY29tPgogCiAgICAgICAgIEltcGxlbWVudCBiYXNlbGlu
ZSBvcF9lbnRlciwgb3BfcmV0LCBvcF9jaGVja190cmFwcywgb3BfdGhyb3cgdXNpbmcgSklUIHRo
dW5rcy4KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1JlZHVjZUxvb3BT
dHJlbmd0aC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNSZWR1Y2VMb29wU3RyZW5n
dGguY3BwCmluZGV4IGM3OTdjZDZjMjZjOC4uNGE3NDhhNzY0MzU1IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYjMvQjNSZWR1Y2VMb29wU3RyZW5ndGguY3BwCisrKyBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1JlZHVjZUxvb3BTdHJlbmd0aC5jcHAKQEAgLTM2LDcgKzM2
LDcgQEAKICNpbmNsdWRlICJCM1BoYXNlU2NvcGUuaCIKICNpbmNsdWRlICJCM1Byb2NlZHVyZUlu
bGluZXMuaCIKICNpbmNsdWRlICJCM1ZhbHVlSW5saW5lcy5oIgotI2luY2x1ZGUgPHd0Zi9TbWFs
bFB0clNldC5oPgorI2luY2x1ZGUgPHd0Zi9TbWFsbFNldC5oPgogI2luY2x1ZGUgPHd0Zi9WZWN0
b3IuaD4KIAogbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CkBAIC0xNTksNyArMTU5LDcg
QEAgcHVibGljOgogICAgICAgICBCYXNpY0Jsb2NrKiBsb29wRm9vdCA9IG51bGxwdHI7CiAgICAg
ICAgIEJhc2ljQmxvY2sqIGxvb3BQcmVoZWFkZXIgPSBudWxscHRyOwogICAgICAgICBCYXNpY0Js
b2NrKiBsb29wUG9zdGZvb3RlciA9IG51bGxwdHI7Ci0gICAgICAgIFNtYWxsUHRyU2V0PEJhc2lj
QmxvY2sqPiBsb29wSW5uZXJCbG9ja3M7CisgICAgICAgIFNtYWxsU2V0PEJhc2ljQmxvY2sqPiBs
b29wSW5uZXJCbG9ja3M7CiAKICAgICAgICAgewogICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBp
ID0gMDsgaSA8IGxvb3AtPnNpemUoKTsgKytpKQpAQCAtMTcxLDggKzE3MSw4IEBAIHB1YmxpYzoK
ICAgICAgICAgICAgIGlmICghbG9vcElubmVyQmxvY2tzLmNvbnRhaW5zKHN0b3JlLT5vd25lcikp
CiAgICAgICAgICAgICAgICAgcmV0dXJuOwogCi0gICAgICAgICAgICBTbWFsbFB0clNldDxCYXNp
Y0Jsb2NrKj4gbG9vcEVudHJhbmNlczsKLSAgICAgICAgICAgIFNtYWxsUHRyU2V0PEJhc2ljQmxv
Y2sqPiBsb29wRXhpdHM7CisgICAgICAgICAgICBTbWFsbFNldDxCYXNpY0Jsb2NrKj4gbG9vcEVu
dHJhbmNlczsKKyAgICAgICAgICAgIFNtYWxsU2V0PEJhc2ljQmxvY2sqPiBsb29wRXhpdHM7CiAg
ICAgICAgICAgICBmb3IgKGF1dG8qIGJsb2NrIDogbG9vcElubmVyQmxvY2tzKSB7CiAgICAgICAg
ICAgICAgICAgZm9yIChhdXRvIHN1Y2Nlc3NvciA6IGJsb2NrLT5zdWNjZXNzb3JzKCkpIHsKICAg
ICAgICAgICAgICAgICAgICAgaWYgKCFsb29wSW5uZXJCbG9ja3MuY29udGFpbnMoc3VjY2Vzc29y
LmJsb2NrKCkpKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJB
bGxvY2F0ZVJlZ2lzdGVyc0J5R3JhcGhDb2xvcmluZy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvYjMvYWlyL0FpckFsbG9jYXRlUmVnaXN0ZXJzQnlHcmFwaENvbG9yaW5nLmNwcAppbmRleCBk
MDE2OWFlMDc0ZDcuLjk3ZTFhNDc4ZjQ4YyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2IzL2Fpci9BaXJBbGxvY2F0ZVJlZ2lzdGVyc0J5R3JhcGhDb2xvcmluZy5jcHAKKysrIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJBbGxvY2F0ZVJlZ2lzdGVyc0J5R3JhcGhD
b2xvcmluZy5jcHAKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE1LTIw
MjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE1
LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAog
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCkBAIC0zNyw2ICszNyw5IEBACiAjaW5jbHVkZSAiQWlyUGhhc2VTY29wZS5o
IgogI2luY2x1ZGUgIkFpclRtcFdpZHRoSW5saW5lcy5oIgogI2luY2x1ZGUgIkFpclVzZUNvdW50
cy5oIgorI2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+CisjaW5jbHVkZSA8d3RmL1NtYWxsU2V0Lmg+
CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogCiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIz
IHsgbmFtZXNwYWNlIEFpciB7CiAKQEAgLTQ2LDEwNCArNDksMjA5IEBAIHN0YXRpYyBjb25zdGV4
cHIgYm9vbCBkZWJ1ZyA9IGZhbHNlOwogc3RhdGljIGNvbnN0ZXhwciBib29sIHRyYWNlRGVidWcg
PSBmYWxzZTsKIHN0YXRpYyBjb25zdGV4cHIgYm9vbCByZXBvcnRTdGF0cyA9IGZhbHNlOwogCi0v
LyBJbnRlcmZlcmVuY2UgZWRnZXMgYXJlIG5vdCBkaXJlY3RlZC4gQW4gZWRnZSBiZXR3ZWVuIGFu
eSB0d28gVG1wcyBpcyByZXByZXNlbnRlZAotLy8gYnkgdGhlIGNvbmNhdGVuYXRlZCB2YWx1ZXMg
b2YgdGhlIHNtYWxsZXN0IFRtcCBmb2xsb3dlZCBieSB0aGUgYmlnZ2VyIFRtcC4KLS8vIFdlIGhh
dmUgYSB0ZW1wbGF0ZWQgdmVyc2lvbiB0byBzdXBwb3J0IDE2IGJpdCBhbmQgYSAzMiBiaXQgaW1w
bGVtZW50YXRpb25zCi0vLyBzaW5jZSB0aGUgbnVtYmVyIG9mIGVudHJpZXMgaW4gYW4gaW50ZXJm
ZXJlbmNlIHRhYmxlIGlzIE8oTl4yKS4KLS8vIEluIG1vc3QgY2FzZXMsIHdlIHVzZSB0aGUgMTYg
Yml0IGZsYXZvciwgdGh1cyBzYXZpbmcgaGFsZiB0aGUgbWVtb3J5Ci0vLyB3aXRoIGEgc2luZ2xl
IGltcGxlbWVudGF0aW9uLgotdGVtcGxhdGUgPHR5cGVuYW1lIEluZGV4SW1wbFR5cGUsIHR5cGVu
YW1lIFBhaXJTdG9yYWdlVHlwZT4KLWNsYXNzIEludGVyZmVyZW5jZUVkZ2UgewotICAgIHN0YXRp
Y19hc3NlcnQoc2l6ZW9mKEluZGV4SW1wbFR5cGUpICogMiA9PSBzaXplb2YoUGFpclN0b3JhZ2VU
eXBlKSk7Ci0gICAgY29uc3QgdW5zaWduZWQgU2hpZnRBbW91bnQgPSBzaXplb2YoSW5kZXhJbXBs
VHlwZSkgKiA4OwotICAgIGNvbnN0IFBhaXJTdG9yYWdlVHlwZSBJbmRleE1hc2sgPSBzdGQ6Om51
bWVyaWNfbGltaXRzPEluZGV4SW1wbFR5cGU+OjptYXgoKTsKK3RlbXBsYXRlIDx0eXBlbmFtZSBJ
bmRleFR5cGU+CitjbGFzcyBJbnRlcmZlcmVuY2VIYXNoU2V0IHsKK3B1YmxpYzoKKyAgICBib29s
IGNvbnRhaW5zKEluZGV4VHlwZSB1LCBJbmRleFR5cGUgdikKKyAgICB7CisgICAgICAgIGlmICh2
IDwgdSkKKyAgICAgICAgICAgIHN0ZDo6c3dhcCh1LCB2KTsKKyAgICAgICAgcmV0dXJuIG1fc2V0
LmNvbnRhaW5zKHsgdSwgdiB9KTsKKyAgICB9CiAKLXByb3RlY3RlZDoKLSAgICB1c2luZyBJbmRl
eFR5cGUgPSB1bnNpZ25lZDsKKyAgICBib29sIGFkZEFuZFJldHVybklzTmV3RW50cnkoSW5kZXhU
eXBlIHUsIEluZGV4VHlwZSB2KQorICAgIHsKKyAgICAgICAgaWYgKHYgPCB1KQorICAgICAgICAg
ICAgc3RkOjpzd2FwKHUsIHYpOworICAgICAgICByZXR1cm4gbV9zZXQuYWRkKHsgdSwgdiB9KS5p
c05ld0VudHJ5OworICAgIH0KKworICAgIHZvaWQgY2xlYXIoKQorICAgIHsKKyAgICAgICAgbV9z
ZXQuY2xlYXIoKTsKKyAgICB9CiAKKyAgICB2b2lkIHNldE1heFRtcEluZGV4KHVuc2lnbmVkIG4p
CisgICAgeworICAgICAgICBBU1NFUlRfVU5VU0VEKG4sIG4gPCBzdGQ6Om51bWVyaWNfbGltaXRz
PEluZGV4VHlwZT46Om1heCgpKTsKKyAgICB9CisKKyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgRnVu
Y3Rvcj4KKyAgICB2b2lkIGZvckVhY2goY29uc3QgRnVuY3RvciYgZnVuY3RvcikKKyAgICB7Cisg
ICAgICAgIGZvciAoYXV0byBlZGdlIDogbV9zZXQpCisgICAgICAgICAgICBmdW5jdG9yKGVkZ2Up
OworICAgIH0KKworICAgIHVuc2lnbmVkIHNpemUoKSBjb25zdCB7IHJldHVybiBtX3NldC5zaXpl
KCk7IH0KKworcHJpdmF0ZToKKyAgICAvLyBJbnRlcmZlcmVuY2UgZWRnZXMgYXJlIG5vdCBkaXJl
Y3RlZC4gQW4gZWRnZSBiZXR3ZWVuIGFueSB0d28gVG1wcyBpcyByZXByZXNlbnRlZAorICAgIC8v
IGJ5IHRoZSBjb25jYXRlbmF0ZWQgdmFsdWVzICh0aHJvdWdoIFRtcE1hcHBlcikgb2YgdGhlIHNt
YWxsZXN0IFRtcCBmb2xsb3dlZCBieSB0aGUgYmlnZ2VyIFRtcC4KKyAgICBIYXNoU2V0PHN0ZDo6
cGFpcjxJbmRleFR5cGUsIEluZGV4VHlwZT4gPiBtX3NldDsKK307CisKK3RlbXBsYXRlIDx0eXBl
bmFtZSBULCB0eXBlbmFtZSBJbmRleFR5cGU+CitjbGFzcyBJbnRlcmZlcmVuY2VWZWN0b3Igewog
cHVibGljOgotICAgIHN0cnVjdCBJbnRlcmZlcmVuY2VFZGdlSGFzaCB7Ci0gICAgICAgIHN0YXRp
YyB1bnNpZ25lZCBoYXNoKGNvbnN0IEludGVyZmVyZW5jZUVkZ2U8SW5kZXhJbXBsVHlwZSwgUGFp
clN0b3JhZ2VUeXBlPiYga2V5KSB7IHJldHVybiBrZXkuaGFzaCgpOyB9Ci0gICAgICAgIHN0YXRp
YyBib29sIGVxdWFsKGNvbnN0IEludGVyZmVyZW5jZUVkZ2U8SW5kZXhJbXBsVHlwZSwgUGFpclN0
b3JhZ2VUeXBlPiYgYSwgY29uc3QgSW50ZXJmZXJlbmNlRWRnZTxJbmRleEltcGxUeXBlLCBQYWly
U3RvcmFnZVR5cGU+JiBiKSB7IHJldHVybiBhID09IGI7IH0KLSAgICAgICAgc3RhdGljIGNvbnN0
ZXhwciBib29sIHNhZmVUb0NvbXBhcmVUb0VtcHR5T3JEZWxldGVkID0gdHJ1ZTsKLSAgICB9Owot
ICAgIHR5cGVkZWYgU2ltcGxlQ2xhc3NIYXNoVHJhaXRzPEludGVyZmVyZW5jZUVkZ2U8SW5kZXhJ
bXBsVHlwZSwgUGFpclN0b3JhZ2VUeXBlPj4gSW50ZXJmZXJlbmNlRWRnZUhhc2hUcmFpdHM7Cisg
ICAgYm9vbCBjb250YWlucyhJbmRleFR5cGUgdSwgSW5kZXhUeXBlIHYpCisgICAgeworICAgICAg
ICBpZiAodiA8IHUpCisgICAgICAgICAgICBzdGQ6OnN3YXAodSwgdik7CisgICAgICAgIHJldHVy
biBtX3ZlY3Rvclt1XS5jb250YWlucyh2KTsKKyAgICB9CiAKLSAgICB0eXBlZGVmIEhhc2hTZXQ8
SW50ZXJmZXJlbmNlRWRnZTxJbmRleEltcGxUeXBlLCBQYWlyU3RvcmFnZVR5cGU+LCBJbnRlcmZl
cmVuY2VFZGdlSGFzaCwgSW50ZXJmZXJlbmNlRWRnZUhhc2hUcmFpdHM+IEludGVyZmVyZW5jZVNl
dDsKKyAgICBib29sIGFkZEFuZFJldHVybklzTmV3RW50cnkoSW5kZXhUeXBlIHUsIEluZGV4VHlw
ZSB2KQorICAgIHsKKyAgICAgICAgaWYgKHYgPCB1KQorICAgICAgICAgICAgc3RkOjpzd2FwKHUs
IHYpOworICAgICAgICBib29sIGlzTmV3RW50cnkgPSBtX3ZlY3Rvclt1XS5hZGQodikuaXNOZXdF
bnRyeTsKKyAgICAgICAgbV9zaXplICs9IGlzTmV3RW50cnk7CisgICAgICAgIHJldHVybiBpc05l
d0VudHJ5OworICAgIH0KKworICAgIHZvaWQgY2xlYXIoKQorICAgIHsKKyAgICAgICAgbV92ZWN0
b3IuY2xlYXIoKTsKKyAgICAgICAgbV9zaXplID0gMDsKKyAgICB9CisKKyAgICB2b2lkIHNldE1h
eFRtcEluZGV4KHVuc2lnbmVkIG4pCisgICAgeworICAgICAgICBBU1NFUlQobiA8IHN0ZDo6bnVt
ZXJpY19saW1pdHM8SW5kZXhUeXBlPjo6bWF4KCkpOworICAgICAgICBtX3ZlY3Rvci5yZXNpemUo
bik7CisgICAgfQogCi0gICAgSW50ZXJmZXJlbmNlRWRnZSgpCisgICAgdGVtcGxhdGUgPHR5cGVu
YW1lIEZ1bmN0b3I+CisgICAgdm9pZCBmb3JFYWNoKGNvbnN0IEZ1bmN0b3ImIGZ1bmN0b3IpCiAg
ICAgeworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV92ZWN0b3Iuc2l6ZSgpIDsg
KytpKSB7CisgICAgICAgICAgICBmb3IgKEluZGV4VHlwZSBqIDogbV92ZWN0b3JbaV0pCisgICAg
ICAgICAgICAgICAgZnVuY3Rvcih7IGksIGogfSk7CisgICAgICAgIH0KICAgICB9CiAKLSAgICBJ
bnRlcmZlcmVuY2VFZGdlKEluZGV4VHlwZSBhLCBJbmRleFR5cGUgYikKKyAgICB1bnNpZ25lZCBz
aXplKCkgY29uc3QgeyByZXR1cm4gbV9zaXplOyB9CisKK3ByaXZhdGU6CisgICAgVmVjdG9yPFQ+
IG1fdmVjdG9yOworICAgIHVuc2lnbmVkIG1fc2l6ZSB7MH07Cit9OworCit0ZW1wbGF0ZSA8dHlw
ZW5hbWUgSW5kZXhUeXBlPgorY2xhc3MgSW50ZXJmZXJlbmNlQml0VmVjdG9yIHsKK3B1YmxpYzoK
KyAgICBib29sIGNvbnRhaW5zKEluZGV4VHlwZSB1LCBJbmRleFR5cGUgdikKICAgICB7Ci0gICAg
ICAgIEFTU0VSVChhKTsKLSAgICAgICAgQVNTRVJUKGIpOwotICAgICAgICBBU1NFUlQoYSA8IHN0
ZDo6bnVtZXJpY19saW1pdHM8SW5kZXhJbXBsVHlwZT46Om1heCgpKTsKLSAgICAgICAgQVNTRVJU
KGIgPCBzdGQ6Om51bWVyaWNfbGltaXRzPEluZGV4SW1wbFR5cGU+OjptYXgoKSk7Ci0gICAgICAg
IEFTU0VSVF9XSVRIX01FU1NBR0UoYSAhPSBiLCAiQSBUbXAgY2FuIG5ldmVyIGludGVyZmVyZSB3
aXRoIGl0c2VsZi4gRG9pbmcgc28gd291bGQgZm9yY2UgaXQgdG8gYmUgdGhlIHN1cGVycG9zaXRp
b24gb2YgdHdvIHJlZ2lzdGVycy4iKTsKKyAgICAgICAgcmV0dXJuIG1fYml0VmVjdG9yLnF1aWNr
R2V0KGluZGV4KHUsIHYpKTsKKyAgICB9CiAKLSAgICAgICAgaWYgKGIgPCBhKQotICAgICAgICAg
ICAgc3RkOjpzd2FwKGEsIGIpOwotICAgICAgICBtX3ZhbHVlID0gc3RhdGljX2Nhc3Q8UGFpclN0
b3JhZ2VUeXBlPihhKSA8PCBTaGlmdEFtb3VudCB8IGI7CisgICAgYm9vbCBhZGRBbmRSZXR1cm5J
c05ld0VudHJ5KEluZGV4VHlwZSB1LCBJbmRleFR5cGUgdikKKyAgICB7CisgICAgICAgIC8vIE5v
dGU6IHdlIGNvdWxkIGRvIG9ubHkgb25lIHF1aWNrU2V0LCBhdCB0aGUgY29zdCBvZiBvbmUgZXh0
cmEgYnJhbmNoIGluIGV2ZXJ5IGNvbnRhaW5zL2FkZEFuZFJldHVybklzTmV3RW50cnkgKHRvIGVu
Zm9yY2UgdSA8IHYpCisgICAgICAgIGJvb2wgYWxyZWFkeUluID0gbV9iaXRWZWN0b3IucXVpY2tT
ZXQoaW5kZXgodSwgdikpOworICAgICAgICBib29sIGFscmVhZHlJbjIgPSBtX2JpdFZlY3Rvci5x
dWlja1NldChpbmRleCh2LCB1KSk7CisgICAgICAgIEFTU0VSVF9VTlVTRUQoYWxyZWFkeUluMiwg
YWxyZWFkeUluID09IGFscmVhZHlJbjIpOworICAgICAgICBtX3NpemUgKz0gIWFscmVhZHlJbjsK
KyAgICAgICAgcmV0dXJuICFhbHJlYWR5SW47CiAgICAgfQogCi0gICAgSW50ZXJmZXJlbmNlRWRn
ZShjb25zdCBJbnRlcmZlcmVuY2VFZGdlPEluZGV4SW1wbFR5cGUsIFBhaXJTdG9yYWdlVHlwZT4m
IG90aGVyKQotICAgICAgICA6IG1fdmFsdWUob3RoZXIubV92YWx1ZSkKKyAgICB2b2lkIGNsZWFy
KCkKICAgICB7CisgICAgICAgIG1fYml0VmVjdG9yLmNsZWFyQWxsKCk7CisgICAgICAgIG1fc2l6
ZSA9IDA7CiAgICAgfQogCisgICAgdm9pZCBzZXRNYXhUbXBJbmRleCh1bnNpZ25lZCBuKQorICAg
IHsKKyAgICAgICAgQVNTRVJUKG4gPCBzdGQ6Om51bWVyaWNfbGltaXRzPEluZGV4VHlwZT46Om1h
eCgpKTsKKyAgICAgICAgbV9udW1UbXBzID0gbjsKKyAgICAgICAgbV9iaXRWZWN0b3IuZW5zdXJl
U2l6ZShuKm4pOworICAgIH0KIAotICAgIEludGVyZmVyZW5jZUVkZ2UoV1RGOjpIYXNoVGFibGVE
ZWxldGVkVmFsdWVUeXBlKQotICAgICAgICA6IG1fdmFsdWUoc3RkOjpudW1lcmljX2xpbWl0czxQ
YWlyU3RvcmFnZVR5cGU+OjptYXgoKSkKKyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgRnVuY3Rvcj4K
KyAgICB2b2lkIGZvckVhY2goY29uc3QgRnVuY3RvciYgZnVuY3RvcikKICAgICB7CisgICAgICAg
IGZvciAoSW5kZXhUeXBlIGkgPSAwOyBpIDwgbV9udW1UbXBzOyArK2kpIHsKKyAgICAgICAgICAg
IGZvciAoSW5kZXhUeXBlIGogPSBpICsgMTsgaiA8IG1fbnVtVG1wczsgKytqKSB7CisgICAgICAg
ICAgICAgICAgaWYgKG1fYml0VmVjdG9yLnF1aWNrR2V0KGluZGV4KGksIGopKSkKKyAgICAgICAg
ICAgICAgICAgICAgZnVuY3Rvcih7IGksIGogfSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0K
ICAgICB9CiAKLSAgICBJbmRleFR5cGUgZmlyc3QoKSBjb25zdAorICAgIHVuc2lnbmVkIHNpemUo
KSBjb25zdCB7IHJldHVybiBtX3NpemU7IH0KKworcHJpdmF0ZToKKyAgICB1bnNpZ25lZCBpbmRl
eChJbmRleFR5cGUgaSwgSW5kZXhUeXBlIGopCiAgICAgewotICAgICAgICByZXR1cm4gbV92YWx1
ZSA+PiBTaGlmdEFtb3VudCAmIEluZGV4TWFzazsKKyAgICAgICAgcmV0dXJuIGkgKiBtX251bVRt
cHMgKyBqOwogICAgIH0KIAotICAgIEluZGV4VHlwZSBzZWNvbmQoKSBjb25zdAorICAgIEJpdFZl
Y3RvciBtX2JpdFZlY3RvcjsKKyAgICB1bnNpZ25lZCBtX3NpemUgezB9OworICAgIEluZGV4VHlw
ZSBtX251bVRtcHM7Cit9OworCisjZGVmaW5lIFRFU1RfSU5URVJGRVJFTkNFX1NNQUxMX1NFVF9W
RUNUT1IgMAorI2lmIFRFU1RfSU5URVJGRVJFTkNFX1NNQUxMX1NFVF9WRUNUT1IKK3RlbXBsYXRl
IDx0eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBJbmRleFR5cGU+CitjbGFzcyBJbnN0
cnVtZW50ZWRJbnRlcmZlcmVuY2VHcmFwaCB7CitwdWJsaWM6CisgICAgYm9vbCBjb250YWlucyhJ
bmRleFR5cGUgdSwgSW5kZXhUeXBlIHYpCiAgICAgewotICAgICAgICByZXR1cm4gbV92YWx1ZSAm
IEluZGV4TWFzazsKKyAgICAgICAgYm9vbCBjb250YWluc0luQSA9IG1fc2V0QS5jb250YWlucyh1
LCB2KTsKKyAgICAgICAgYm9vbCBjb250YWluc0luQiA9IG1fc2V0Qi5jb250YWlucyh1LCB2KTsK
KyAgICAgICAgUkVMRUFTRV9BU1NFUlQoY29udGFpbnNJbkEgPT0gY29udGFpbnNJbkIpOworICAg
ICAgICByZXR1cm4gY29udGFpbnNJbkE7CiAgICAgfQogCi0gICAgYm9vbCBvcGVyYXRvcj09KGNv
bnN0IEludGVyZmVyZW5jZUVkZ2UmIG90aGVyKSBjb25zdAorICAgIGJvb2wgYWRkQW5kUmV0dXJu
SXNOZXdFbnRyeShJbmRleFR5cGUgdSwgSW5kZXhUeXBlIHYpCiAgICAgewotICAgICAgICByZXR1
cm4gbV92YWx1ZSA9PSBvdGhlci5tX3ZhbHVlOworICAgICAgICBib29sIGlzTmV3RW50cnlBID0g
bV9zZXRBLmFkZEFuZFJldHVybklzTmV3RW50cnkodSwgdik7CisgICAgICAgIGJvb2wgaXNOZXdF
bnRyeUIgPSBtX3NldEIuYWRkQW5kUmV0dXJuSXNOZXdFbnRyeSh1LCB2KTsKKyAgICAgICAgUkVM
RUFTRV9BU1NFUlQoaXNOZXdFbnRyeUEgPT0gaXNOZXdFbnRyeUIpOworICAgICAgICByZXR1cm4g
aXNOZXdFbnRyeUE7CiAgICAgfQogCi0gICAgSW50ZXJmZXJlbmNlRWRnZSYgb3BlcmF0b3I9KGNv
bnN0IEludGVyZmVyZW5jZUVkZ2UmIG90aGVyKQorICAgIHZvaWQgY2xlYXIoKQogICAgIHsKLSAg
ICAgICAgbV92YWx1ZSA9IG90aGVyLm1fdmFsdWU7Ci0gICAgICAgIHJldHVybiAqdGhpczsKKyAg
ICAgICAgbV9zZXRBLmNsZWFyKCk7CisgICAgICAgIG1fc2V0Qi5jbGVhcigpOwogICAgIH0KLSAg
ICBib29sIGlzSGFzaFRhYmxlRGVsZXRlZFZhbHVlKCkgY29uc3QKKworICAgIHZvaWQgc2V0TWF4
VG1wSW5kZXgodW5zaWduZWQgbikKICAgICB7Ci0gICAgICAgIHJldHVybiAqdGhpcyA9PSBJbnRl
cmZlcmVuY2VFZGdlKFdURjo6SGFzaFRhYmxlRGVsZXRlZFZhbHVlKTsKKyAgICAgICAgbV9zZXRB
LnNldE1heFRtcEluZGV4KG4pOworICAgICAgICBtX3NldEIuc2V0TWF4VG1wSW5kZXgobik7CiAg
ICAgfQogCi0gICAgdW5zaWduZWQgaGFzaCgpIGNvbnN0CisgICAgdGVtcGxhdGUgPHR5cGVuYW1l
IEZ1bmN0b3I+CisgICAgdm9pZCBmb3JFYWNoKGNvbnN0IEZ1bmN0b3ImIGZ1bmN0b3IpCiAgICAg
ewotICAgICAgICByZXR1cm4gV1RGOjpJbnRIYXNoPFBhaXJTdG9yYWdlVHlwZT46Omhhc2gobV92
YWx1ZSk7CisgICAgICAgIG1fc2V0QS5mb3JFYWNoKGZ1bmN0b3IpOwogICAgIH0KIAotICAgIHZv
aWQgZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAorICAgIHVuc2lnbmVkIHNpemUoKSBjb25z
dAogICAgIHsKLSAgICAgICAgb3V0LnByaW50KGZpcnN0KCksICI8PT4iLCBzZWNvbmQoKSk7Cisg
ICAgICAgIHVuc2lnbmVkIHNpemVBID0gbV9zZXRBLnNpemUoKTsKKyAgICAgICAgdW5zaWduZWQg
c2l6ZUIgPSBtX3NldEIuc2l6ZSgpOworICAgICAgICBSRUxFQVNFX0FTU0VSVChzaXplQSA9PSBz
aXplQik7CisgICAgICAgIHJldHVybiBzaXplQTsKICAgICB9CiAKIHByaXZhdGU6Ci0gICAgUGFp
clN0b3JhZ2VUeXBlIG1fdmFsdWUgeyAwIH07CisgICAgVCBtX3NldEE7CisgICAgVSBtX3NldEI7
CiB9OworI2VuZGlmCiAKIC8vIFRoZSBBYnN0cmFjdENvbG9yaW5nQWxsb2NhdG9yIGRlZmluZXMg
YWxsIHRoZSBjb2RlIHRoYXQgaXMgaW5kZXBlbmRhbnQKIC8vIGZyb20gdGhlIGJhbmsgb3IgcmVn
aXN0ZXIgYW5kIGNhbiBiZSBzaGFyZWQgd2hlbiBhbGxvY2F0aW5nIHJlZ2lzdGVycy4KLXRlbXBs
YXRlPHR5cGVuYW1lIEluZGV4VHlwZSwgdHlwZW5hbWUgVG1wTWFwcGVyLCB0eXBlbmFtZSBJbnRl
cmZlcmVuY2VFZGdlVHlwZT4KK3RlbXBsYXRlPHR5cGVuYW1lIEluZGV4VHlwZSwgdHlwZW5hbWUg
SW50ZXJmZXJlbmNlU2V0LCBCYW5rIGJhbms+CiBjbGFzcyBBYnN0cmFjdENvbG9yaW5nQWxsb2Nh
dG9yIHsKIHB1YmxpYzoKLSAgICBBYnN0cmFjdENvbG9yaW5nQWxsb2NhdG9yKENvZGUmIGNvZGUs
IGNvbnN0IFZlY3RvcjxSZWc+JiByZWdzSW5Qcmlvcml0eU9yZGVyLCBJbmRleFR5cGUgbGFzdFBy
ZWNvbG9yZWRSZWdpc3RlckluZGV4LCB1bnNpZ25lZCB0bXBBcnJheVNpemUsIGNvbnN0IEhhc2hT
ZXQ8dW5zaWduZWQ+JiB1bnNwaWxsYWJsZVRtcHMsIGNvbnN0IFVzZUNvdW50czxUbXA+JiB1c2VD
b3VudHMpCisgICAgQWJzdHJhY3RDb2xvcmluZ0FsbG9jYXRvcihDb2RlJiBjb2RlLCBjb25zdCBW
ZWN0b3I8UmVnPiYgcmVnc0luUHJpb3JpdHlPcmRlciwgSW5kZXhUeXBlIGxhc3RQcmVjb2xvcmVk
UmVnaXN0ZXJJbmRleCwgdW5zaWduZWQgdG1wQXJyYXlTaXplLCBjb25zdCBCaXRWZWN0b3ImIHVu
c3BpbGxhYmxlVG1wcywgY29uc3QgVXNlQ291bnRzJiB1c2VDb3VudHMpCiAgICAgICAgIDogbV9y
ZWdzSW5Qcmlvcml0eU9yZGVyKHJlZ3NJblByaW9yaXR5T3JkZXIpCiAgICAgICAgICwgbV9sYXN0
UHJlY29sb3JlZFJlZ2lzdGVySW5kZXgobGFzdFByZWNvbG9yZWRSZWdpc3RlckluZGV4KQogICAg
ICAgICAsIG1fdW5zcGlsbGFibGVUbXBzKHVuc3BpbGxhYmxlVG1wcykKQEAgLTE2MCw2ICsyNjgs
MTQgQEAgcHVibGljOgogICAgIH0KIAogcHJvdGVjdGVkOgorICAgIHVzaW5nIFRtcE1hcHBlciA9
IEFic29sdXRlVG1wTWFwcGVyPGJhbms+OworCisgICAgSW5kZXhUeXBlIHRtcFRvSW5kZXgoVG1w
IHRtcCkgY29uc3QKKyAgICB7CisgICAgICAgIHVuc2lnbmVkIGluZGV4ID0gVG1wTWFwcGVyOjph
YnNvbHV0ZUluZGV4KHRtcCk7CisgICAgICAgIEFTU0VSVChzdGQ6Om51bWVyaWNfbGltaXRzPElu
ZGV4VHlwZT46Om1heCgpID4gaW5kZXgpOworICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8SW5k
ZXhUeXBlPihpbmRleCk7CisgICAgfQogCiAgICAgdW5zaWduZWQgcmVnaXN0ZXJDb3VudCgpIGNv
bnN0IHsgcmV0dXJuIG1fcmVnc0luUHJpb3JpdHlPcmRlci5zaXplKCk7IH0KIApAQCAtMTgwLDcg
KzI5Niw3IEBAIHByb3RlY3RlZDoKIAogICAgIHZvaWQgYWRkVG9TcGlsbCh1bnNpZ25lZCB0b1Nw
aWxsKQogICAgIHsKLSAgICAgICAgaWYgKG1fdW5zcGlsbGFibGVUbXBzLmNvbnRhaW5zKHRvU3Bp
bGwpKQorICAgICAgICBpZiAobV91bnNwaWxsYWJsZVRtcHMucXVpY2tHZXQodG9TcGlsbCkpCiAg
ICAgICAgICAgICByZXR1cm47CiAKICAgICAgICAgbV9zcGlsbFdvcmtsaXN0LmFkZCh0b1NwaWxs
KTsKQEAgLTE5OCwxNSArMzE0LDE1IEBAIHByb3RlY3RlZDoKICAgICAgICAgLy8gQWxsIHByZWNv
bG9yZWQgcmVnaXN0ZXJzIGhhdmUgIGFuICJpbmZpbml0ZSIgZGVncmVlLgogICAgICAgICB1bnNp
Z25lZCBmaXJzdE5vblJlZ0luZGV4ID0gbV9sYXN0UHJlY29sb3JlZFJlZ2lzdGVySW5kZXggKyAx
OwogICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgZmlyc3ROb25SZWdJbmRleDsgKytp
KQotICAgICAgICAgICAgbV9kZWdyZWVzW2ldID0gc3RkOjpudW1lcmljX2xpbWl0czx1bnNpZ25l
ZD46Om1heCgpOworICAgICAgICAgICAgbV9kZWdyZWVzW2ldID0gc3RkOjpudW1lcmljX2xpbWl0
czxJbmRleFR5cGU+OjptYXgoKTsKIAotICAgICAgICBtZW1zZXQobV9kZWdyZWVzLmRhdGEoKSAr
IGZpcnN0Tm9uUmVnSW5kZXgsIDAsICh0bXBBcnJheVNpemUgLSBmaXJzdE5vblJlZ0luZGV4KSAq
IHNpemVvZih1bnNpZ25lZCkpOworICAgICAgICBtZW1zZXQobV9kZWdyZWVzLmRhdGEoKSArIGZp
cnN0Tm9uUmVnSW5kZXgsIDAsICh0bXBBcnJheVNpemUgLSBmaXJzdE5vblJlZ0luZGV4KSAqIHNp
emVvZihJbmRleFR5cGUpKTsKICAgICB9CiAKICAgICB2b2lkIGFkZEVkZ2VEaXN0aW5jdChJbmRl
eFR5cGUgYSwgSW5kZXhUeXBlIGIpCiAgICAgewogICAgICAgICBBU1NFUlQoYSAhPSBiKTsKLSAg
ICAgICAgYm9vbCBpc05ld0VkZ2UgPSBhZGRJbnRlcmZlcmVuY2VFZGdlKEludGVyZmVyZW5jZUVk
Z2VUeXBlKGEsIGIpKTsKKyAgICAgICAgYm9vbCBpc05ld0VkZ2UgPSBhZGRJbnRlcmZlcmVuY2VF
ZGdlKGEsIGIpOwogICAgICAgICBpZiAoaXNOZXdFZGdlKSB7CiAgICAgICAgICAgICBpZiAoIWlz
UHJlY29sb3JlZChhKSkgewogICAgICAgICAgICAgICAgIEFTU0VSVCghbV9hZGphY2VuY3lMaXN0
W2FdLmNvbnRhaW5zKGIpKTsKQEAgLTIyNSw3ICszNDEsNyBAQCBwcm90ZWN0ZWQ6CiAgICAgYm9v
bCBhZGRFZGdlRGlzdGluY3RXaXRob3V0RGVncmVlQ2hhbmdlKEluZGV4VHlwZSBhLCBJbmRleFR5
cGUgYikKICAgICB7CiAgICAgICAgIEFTU0VSVChhICE9IGIpOwotICAgICAgICBib29sIGlzTmV3
RWRnZSA9IGFkZEludGVyZmVyZW5jZUVkZ2UoSW50ZXJmZXJlbmNlRWRnZVR5cGUoYSwgYikpOwor
ICAgICAgICBib29sIGlzTmV3RWRnZSA9IGFkZEludGVyZmVyZW5jZUVkZ2UoYSwgYik7CiAgICAg
ICAgIGlmIChpc05ld0VkZ2UpIHsKICAgICAgICAgICAgIGlmICghaXNQcmVjb2xvcmVkKGEpKSB7
CiAgICAgICAgICAgICAgICAgQVNTRVJUKCFtX2FkamFjZW5jeUxpc3RbYV0uY29udGFpbnMoYikp
OwpAQCAtMzQwLDcgKzQ1Niw3IEBAIHByb3RlY3RlZDoKICAgICAgICAgICAgIGlmICghaXNQcmVj
b2xvcmVkKGFkamFjZW50VG1wSW5kZXgpCiAgICAgICAgICAgICAgICAgJiYgIWhhc0JlZW5TaW1w
bGlmaWVkKGFkamFjZW50VG1wSW5kZXgpCiAgICAgICAgICAgICAgICAgJiYgbV9kZWdyZWVzW2Fk
amFjZW50VG1wSW5kZXhdID49IHJlZ2lzdGVyQ291bnQoKQotICAgICAgICAgICAgICAgICYmICFo
YXNJbnRlcmZlcmVuY2VFZGdlKEludGVyZmVyZW5jZUVkZ2VUeXBlKHUsIGFkamFjZW50VG1wSW5k
ZXgpKSkKKyAgICAgICAgICAgICAgICAmJiAhaGFzSW50ZXJmZXJlbmNlRWRnZSh1LCBhZGphY2Vu
dFRtcEluZGV4KSkKICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIH0KICAg
ICAgICAgcmV0dXJuIHRydWU7CkBAIC0zNzUsNTIgKzQ5MSw0MCBAQCBwcm90ZWN0ZWQ6CiAgICAg
ICAgIGF1dG8gaXRlcmF0b3IgPSBtX3NwaWxsV29ya2xpc3QuYmVnaW4oKTsKIAogICAgICAgICBS
RUxFQVNFX0FTU0VSVF9XSVRIX01FU1NBR0UoaXRlcmF0b3IgIT0gbV9zcGlsbFdvcmtsaXN0LmVu
ZCgpLCAic2VsZWN0U3BpbGwoKSBjYWxsZWQgd2hlbiB0aGVyZSB3YXMgbm8gc3BpbGwuIik7Ci0g
ICAgICAgIFJFTEVBU0VfQVNTRVJUX1dJVEhfTUVTU0FHRSghbV91bnNwaWxsYWJsZVRtcHMuY29u
dGFpbnMoKml0ZXJhdG9yKSwgInRyeWluZyB0byBzcGlsbCB1bnNwaWxsYWJsZSB0bXAiKTsKLQot
ICAgICAgICAvLyBIaWdoZXIgc2NvcmUgbWVhbnMgbW9yZSBkZXNpcmFibGUgdG8gc3BpbGwuIExv
d2VyIHNjb3JlcyBtYXhpbWl6ZSB0aGUgbGlrZWxpaG9vZCB0aGF0IGEgdG1wCi0gICAgICAgIC8v
IGdldHMgYSByZWdpc3Rlci4KLSAgICAgICAgYXV0byBzY29yZSA9IFsmXSAoVG1wIHRtcCkgLT4g
ZG91YmxlIHsKLSAgICAgICAgICAgIC8vIEFpciBleHBvc2VzIHRoZSBjb25jZXB0IG9mICJmYXN0
IHRtcHMiLCBhbmQgd2UgaW50ZXJwcmV0IHRoYXQgdG8gbWVhbiB0aGF0IHRoZSB0bXAKLSAgICAg
ICAgICAgIC8vIHNob3VsZCBhbHdheXMgYmUgaW4gYSByZWdpc3Rlci4KLSAgICAgICAgICAgIGlm
IChtX2NvZGUuaXNGYXN0VG1wKHRtcCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAg
ICAgICAgICAKLSAgICAgICAgICAgIC8vIEFsbCBlbHNlIGJlaW5nIGVxdWFsLCB0aGUgc2NvcmUg
c2hvdWxkIGJlIGRpcmVjdGx5IHJlbGF0ZWQgdG8gdGhlIGRlZ3JlZS4KLSAgICAgICAgICAgIGRv
dWJsZSBkZWdyZWUgPSBzdGF0aWNfY2FzdDxkb3VibGU+KG1fZGVncmVlc1tUbXBNYXBwZXI6OmFi
c29sdXRlSW5kZXgodG1wKV0pOwotCi0gICAgICAgICAgICAvLyBBbGwgZWxzZSBiZWluZyBlcXVh
bCwgdGhlIHNjb3JlIHNob3VsZCBiZSBpbnZlcnNlbHkgcmVsYXRlZCB0byB0aGUgbnVtYmVyIG9m
IHdhcm0gdXNlcyBhbmQKLSAgICAgICAgICAgIC8vIGRlZnMuCi0gICAgICAgICAgICBjb25zdCBV
c2VDb3VudHM8VG1wPjo6Q291bnRzKiBjb3VudHMgPSBtX3VzZUNvdW50c1t0bXBdOwotICAgICAg
ICAgICAgaWYgKCFjb3VudHMpCi0gICAgICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bnVtZXJpY19s
aW1pdHM8ZG91YmxlPjo6aW5maW5pdHkoKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgZG91
YmxlIHVzZXMgPSBjb3VudHMtPm51bVdhcm1Vc2VzICsgY291bnRzLT5udW1EZWZzOworICAgICAg
ICBSRUxFQVNFX0FTU0VSVF9XSVRIX01FU1NBR0UoIW1fdW5zcGlsbGFibGVUbXBzLmdldCgqaXRl
cmF0b3IpLCAidHJ5aW5nIHRvIHNwaWxsIHVuc3BpbGxhYmxlIHRtcCIpOwogCi0gICAgICAgICAg
ICAvLyBJZiBpdCdzIGEgY29uc3RhbnQsIHRoZW4gaXQncyBub3QgYXMgYmFkIHRvIHNwaWxsLiBX
ZSBjYW4gcmVtYXRlcmlhbGl6ZSBpdCBpbiBtYW55Ci0gICAgICAgICAgICAvLyBjYXNlcy4KLSAg
ICAgICAgICAgIGlmIChjb3VudHMtPm51bUNvbnN0RGVmcyA9PSAxICYmIGNvdW50cy0+bnVtRGVm
cyA9PSAxKQotICAgICAgICAgICAgICAgIHVzZXMgLz0gMjsKKyAgICAgICAgSW5kZXhUeXBlIHZp
Y3RpbUluZGV4ID0gKml0ZXJhdG9yOworICAgICAgICBmbG9hdCBtYXhTY29yZSA9IDA7CiAKLSAg
ICAgICAgICAgIHJldHVybiBkZWdyZWUgLyB1c2VzOwotICAgICAgICB9OworICAgICAgICBmb3Ig
KDtpdGVyYXRvciAhPSBtX3NwaWxsV29ya2xpc3QuZW5kKCk7ICsraXRlcmF0b3IpIHsKKyAgICAg
ICAgICAgIEluZGV4VHlwZSBpbmRleCA9ICppdGVyYXRvcjsKIAotICAgICAgICBhdXRvIHZpY3Rp
bUl0ZXJhdG9yID0gaXRlcmF0b3I7Ci0gICAgICAgIGRvdWJsZSBtYXhTY29yZSA9IHNjb3JlKFRt
cE1hcHBlcjo6dG1wRnJvbUFic29sdXRlSW5kZXgoKml0ZXJhdG9yKSk7CisgICAgICAgICAgICBm
bG9hdCB1c2VzID0gbV91c2VDb3VudHMubnVtV2FybVVzZXNBbmREZWZzPGJhbms+KGluZGV4KTsK
KyAgICAgICAgICAgIGlmICghdXNlcykgeworICAgICAgICAgICAgICAgIHZpY3RpbUluZGV4ID0g
aW5kZXg7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisKKyAgICAgICAg
ICAgIC8vIEhpZ2hlciBzY29yZSBtZWFucyBtb3JlIGRlc2lyYWJsZSB0byBzcGlsbC4gTG93ZXIg
c2NvcmVzIG1heGltaXplIHRoZSBsaWtlbGlob29kIHRoYXQgYSB0bXAKKyAgICAgICAgICAgIC8v
IGdldHMgYSByZWdpc3Rlci4KKyAgICAgICAgICAgIGZsb2F0IGRlZ3JlZSA9IHN0YXRpY19jYXN0
PGZsb2F0PihtX2RlZ3JlZXNbaW5kZXhdKTsKKyAgICAgICAgICAgIGZsb2F0IHRtcFNjb3JlID0g
ZGVncmVlIC8gdXNlczsKKworICAgICAgICAgICAgLy8gSWYgaXQncyBhIGNvbnN0YW50LCB0aGVu
IGl0J3Mgbm90IGFzIGJhZCB0byBzcGlsbC4gV2UgY2FuIHJlbWF0ZXJpYWxpemUgaXQgaW4gbWFu
eQorICAgICAgICAgICAgLy8gY2FzZXMuCisgICAgICAgICAgICBpZiAobV91c2VDb3VudHMuaXND
b25zdERlZjxiYW5rPihpbmRleCkpCisgICAgICAgICAgICAgICAgdG1wU2NvcmUgKj0gMjsKIAot
ICAgICAgICArK2l0ZXJhdG9yOwotICAgICAgICBmb3IgKDtpdGVyYXRvciAhPSBtX3NwaWxsV29y
a2xpc3QuZW5kKCk7ICsraXRlcmF0b3IpIHsKLSAgICAgICAgICAgIGRvdWJsZSB0bXBTY29yZSA9
IHNjb3JlKFRtcE1hcHBlcjo6dG1wRnJvbUFic29sdXRlSW5kZXgoKml0ZXJhdG9yKSk7CiAgICAg
ICAgICAgICBpZiAodG1wU2NvcmUgPiBtYXhTY29yZSkgewotICAgICAgICAgICAgICAgIEFTU0VS
VCghbV91bnNwaWxsYWJsZVRtcHMuY29udGFpbnMoKml0ZXJhdG9yKSk7Ci0gICAgICAgICAgICAg
ICAgdmljdGltSXRlcmF0b3IgPSBpdGVyYXRvcjsKKyAgICAgICAgICAgICAgICB2aWN0aW1JbmRl
eCA9IGluZGV4OwogICAgICAgICAgICAgICAgIG1heFNjb3JlID0gdG1wU2NvcmU7CiAgICAgICAg
ICAgICB9CiAgICAgICAgIH0KIAotICAgICAgICBJbmRleFR5cGUgdmljdGltSW5kZXggPSAqdmlj
dGltSXRlcmF0b3I7CisgICAgICAgIEFTU0VSVCghbV91bnNwaWxsYWJsZVRtcHMuZ2V0KHZpY3Rp
bUluZGV4KSk7CisgICAgICAgIEFTU0VSVCghaXNQcmVjb2xvcmVkKHZpY3RpbUluZGV4KSk7CiAg
ICAgICAgIGlmICh0cmFjZURlYnVnKQogICAgICAgICAgICAgZGF0YUxvZ0xuKCJTZWxlY3Rpbmcg
c3BpbGwgIiwgdmljdGltSW5kZXgpOwotICAgICAgICBBU1NFUlQoIWlzUHJlY29sb3JlZCh2aWN0
aW1JbmRleCkpOwogICAgICAgICByZXR1cm4gdmljdGltSW5kZXg7CiAgICAgfQogCkBAIC01MTIs
MTQgKzYxNiwxNCBAQCBwcm90ZWN0ZWQ6CiAgICAgICAgICAgICBtX2NvbG9yZWRUbXAuY2xlYXIo
KTsKICAgICB9CiAKLSAgICBib29sIGFkZEludGVyZmVyZW5jZUVkZ2UoSW50ZXJmZXJlbmNlRWRn
ZVR5cGUgZWRnZSkKKyAgICBib29sIGFkZEludGVyZmVyZW5jZUVkZ2UoSW5kZXhUeXBlIHUsIElu
ZGV4VHlwZSB2KQogICAgIHsKLSAgICAgICAgcmV0dXJuIG1faW50ZXJmZXJlbmNlRWRnZXMuYWRk
KGVkZ2UpLmlzTmV3RW50cnk7CisgICAgICAgIHJldHVybiBtX2ludGVyZmVyZW5jZUVkZ2VzLmFk
ZEFuZFJldHVybklzTmV3RW50cnkodSwgdik7CiAgICAgfQogCi0gICAgYm9vbCBoYXNJbnRlcmZl
cmVuY2VFZGdlKEludGVyZmVyZW5jZUVkZ2VUeXBlIGVkZ2UpCisgICAgYm9vbCBoYXNJbnRlcmZl
cmVuY2VFZGdlKEluZGV4VHlwZSB1LCBJbmRleFR5cGUgdikKICAgICB7Ci0gICAgICAgIHJldHVy
biBtX2ludGVyZmVyZW5jZUVkZ2VzLmNvbnRhaW5zKGVkZ2UpOworICAgICAgICByZXR1cm4gbV9p
bnRlcmZlcmVuY2VFZGdlcy5jb250YWlucyh1LCB2KTsKICAgICB9CiAKICAgICB2b2lkIGNsZWFy
SW50ZXJmZXJlbmNlRWRnZXMoKQpAQCAtNTMyLDEwICs2MzYsMTEgQEAgcHJvdGVjdGVkOgogICAg
ICAgICBvdXQucHJpbnQoImdyYXBoIEludGVyZmVyZW5jZUdyYXBoIHsgXG4iKTsKIAogICAgICAg
ICBIYXNoU2V0PFRtcD4gdG1wc1dpdGhJbnRlcmZlcmVuY2VzOwotICAgICAgICBmb3IgKGNvbnN0
IGF1dG8mIGVkZ2UgOiBtX2ludGVyZmVyZW5jZUVkZ2VzKSB7Ci0gICAgICAgICAgICB0bXBzV2l0
aEludGVyZmVyZW5jZXMuYWRkKFRtcE1hcHBlcjo6dG1wRnJvbUFic29sdXRlSW5kZXgoZWRnZS5m
aXJzdCgpKSk7Ci0gICAgICAgICAgICB0bXBzV2l0aEludGVyZmVyZW5jZXMuYWRkKFRtcE1hcHBl
cjo6dG1wRnJvbUFic29sdXRlSW5kZXgoZWRnZS5zZWNvbmQoKSkpOwotICAgICAgICB9CisKKyAg
ICAgICAgbV9pbnRlcmZlcmVuY2VFZGdlcy5mb3JFYWNoKFsmdG1wc1dpdGhJbnRlcmZlcmVuY2Vz
XSAoc3RkOjpwYWlyPEluZGV4VHlwZSwgSW5kZXhUeXBlPiBlZGdlKSB7CisgICAgICAgICAgICB0
bXBzV2l0aEludGVyZmVyZW5jZXMuYWRkKFRtcE1hcHBlcjo6dG1wRnJvbUFic29sdXRlSW5kZXgo
ZWRnZS5maXJzdCkpOworICAgICAgICAgICAgdG1wc1dpdGhJbnRlcmZlcmVuY2VzLmFkZChUbXBN
YXBwZXI6OnRtcEZyb21BYnNvbHV0ZUluZGV4KGVkZ2Uuc2Vjb25kKSk7CisgICAgICAgIH0pOwog
CiAgICAgICAgIGZvciAoY29uc3QgYXV0byYgdG1wIDogdG1wc1dpdGhJbnRlcmZlcmVuY2VzKSB7
CiAgICAgICAgICAgICB1bnNpZ25lZCB0bXBJbmRleCA9IFRtcE1hcHBlcjo6YWJzb2x1dGVJbmRl
eCh0bXApOwpAQCAtNTQ1LDIwICs2NTAsMjEgQEAgcHJvdGVjdGVkOgogICAgICAgICAgICAgICAg
IG91dC5wcmludCgiICAgICIsIHRtcC5pbnRlcm5hbFZhbHVlKCksICIgW2xhYmVsPVwiIiwgdG1w
LCAiXCJdO1xuIik7CiAgICAgICAgIH0KIAotICAgICAgICBmb3IgKGNvbnN0IGF1dG8mIGVkZ2Ug
OiBtX2ludGVyZmVyZW5jZUVkZ2VzKQotICAgICAgICAgICAgb3V0LnByaW50KCIgICAgIiwgZWRn
ZS5maXJzdCgpLCAiIC0tICIsIGVkZ2Uuc2Vjb25kKCksICI7XG4iKTsKKyAgICAgICAgbV9pbnRl
cmZlcmVuY2VFZGdlcy5mb3JFYWNoKFsmb3V0XSAoc3RkOjpwYWlyPEluZGV4VHlwZSwgSW5kZXhU
eXBlPiBlZGdlKSB7CisgICAgICAgICAgICBvdXQucHJpbnQoIiAgICAiLCBlZGdlLmZpcnN0LCAi
IC0tICIsIGVkZ2Uuc2Vjb25kLCAiO1xuIik7CisgICAgICAgIH0pOwogICAgICAgICBvdXQucHJp
bnQoIn1cbiIpOwogICAgIH0KIAogICAgIFZlY3RvcjxSZWc+IG1fcmVnc0luUHJpb3JpdHlPcmRl
cjsKICAgICBJbmRleFR5cGUgbV9sYXN0UHJlY29sb3JlZFJlZ2lzdGVySW5kZXggeyAwIH07CiAK
LSAgICB0eXBlbmFtZSBJbnRlcmZlcmVuY2VFZGdlVHlwZTo6SW50ZXJmZXJlbmNlU2V0IG1faW50
ZXJmZXJlbmNlRWRnZXM7CisgICAgSW50ZXJmZXJlbmNlU2V0IG1faW50ZXJmZXJlbmNlRWRnZXM7
CiAKICAgICBWZWN0b3I8VmVjdG9yPEluZGV4VHlwZSwgMCwgVW5zYWZlVmVjdG9yT3ZlcmZsb3cs
IDQ+LCAwLCBVbnNhZmVWZWN0b3JPdmVyZmxvdz4gbV9hZGphY2VuY3lMaXN0OwogICAgIFZlY3Rv
cjxJbmRleFR5cGUsIDAsIFVuc2FmZVZlY3Rvck92ZXJmbG93PiBtX2RlZ3JlZXM7CiAKLSAgICB1
c2luZyBJbmRleFR5cGVTZXQgPSBIYXNoU2V0PEluZGV4VHlwZSwgRGVmYXVsdEhhc2g8SW5kZXhU
eXBlPiwgV1RGOjpVbnNpZ25lZFdpdGhaZXJvS2V5SGFzaFRyYWl0czxJbmRleFR5cGU+PjsKKyAg
ICB1c2luZyBJbmRleFR5cGVTZXQgPSBTbWFsbFNldDxJbmRleFR5cGUsIEludEhhc2g8SW5kZXhU
eXBlPj47CiAKICAgICBIYXNoTWFwPEluZGV4VHlwZSwgSW5kZXhUeXBlU2V0LCBEZWZhdWx0SGFz
aDxJbmRleFR5cGU+LCBXVEY6OlVuc2lnbmVkV2l0aFplcm9LZXlIYXNoVHJhaXRzPEluZGV4VHlw
ZT4+IG1fYmlhc2VzOwogCkBAIC01NzEsNyArNjc3LDcgQEAgcHJvdGVjdGVkOgogICAgIFZlY3Rv
cjxNb3ZlT3BlcmFuZHMsIDAsIFVuc2FmZVZlY3Rvck92ZXJmbG93PiBtX2NvYWxlc2NpbmdDYW5k
aWRhdGVzOwogCiAgICAgLy8gTGlzdCBvZiBldmVyeSBtb3ZlIGluc3RydWN0aW9uIGFzc29jaWF0
ZWQgd2l0aCBhIFRtcC4KLSAgICBWZWN0b3I8SW5kZXhUeXBlU2V0PiBtX21vdmVMaXN0OworICAg
IFZlY3RvcjxTbWFsbFNldDx1bnNpZ25lZCwgSW50SGFzaDxJbmRleFR5cGU+Pj4gbV9tb3ZlTGlz
dDsKIAogICAgIC8vIENvbG9ycy4KICAgICBWZWN0b3I8UmVnLCAwLCBVbnNhZmVWZWN0b3JPdmVy
Zmxvdz4gbV9jb2xvcmVkVG1wOwpAQCAtNTk1LDE3ICs3MDEsMTggQEAgcHJvdGVjdGVkOgogICAg
IC8vIFRoZSBtYXBwaW5nIG9mIFRtcCB0byB0aGVpciBhbGlhcyBmb3IgTW92ZXMgdGhhdCBhcmUg
YWx3YXlzIGNvYWxlc2NpbmcgcmVnYXJkbGVzcyBvZiBzcGlsbGluZy4KICAgICBWZWN0b3I8SW5k
ZXhUeXBlLCAwLCBVbnNhZmVWZWN0b3JPdmVyZmxvdz4gbV9jb2FsZXNjZWRUbXBzQXRTcGlsbDsK
IAotICAgIGNvbnN0IEhhc2hTZXQ8dW5zaWduZWQ+JiBtX3Vuc3BpbGxhYmxlVG1wczsKLSAgICBj
b25zdCBVc2VDb3VudHM8VG1wPiYgbV91c2VDb3VudHM7CisgICAgY29uc3QgQml0VmVjdG9yJiBt
X3Vuc3BpbGxhYmxlVG1wczsKKyAgICBjb25zdCBVc2VDb3VudHMmIG1fdXNlQ291bnRzOwogICAg
IENvZGUmIG1fY29kZTsKIAogICAgIFZlY3RvcjxUbXAsIDQ+IG1fcGlubmVkUmVnczsKIH07CiAK
LXRlbXBsYXRlIDx0eXBlbmFtZSBJbmRleFR5cGUsIHR5cGVuYW1lIFRtcE1hcHBlciwgdHlwZW5h
bWUgSW50ZXJmZXJlbmNlRWRnZT4KLWNsYXNzIEJyaWdncyA6IHB1YmxpYyBBYnN0cmFjdENvbG9y
aW5nQWxsb2NhdG9yPEluZGV4VHlwZSwgVG1wTWFwcGVyLCBJbnRlcmZlcmVuY2VFZGdlPiB7Ci0g
ICAgdXNpbmcgQmFzZSA9IEFic3RyYWN0Q29sb3JpbmdBbGxvY2F0b3I8SW5kZXhUeXBlLCBUbXBN
YXBwZXIsIEludGVyZmVyZW5jZUVkZ2U+OwordGVtcGxhdGUgPHR5cGVuYW1lIEluZGV4VHlwZSwg
dHlwZW5hbWUgSW50ZXJmZXJlbmNlU2V0LCBCYW5rIGJhbms+CitjbGFzcyBCcmlnZ3MgOiBwdWJs
aWMgQWJzdHJhY3RDb2xvcmluZ0FsbG9jYXRvcjxJbmRleFR5cGUsIEludGVyZmVyZW5jZVNldCwg
YmFuaz4geworICAgIHVzaW5nIEJhc2UgPSBBYnN0cmFjdENvbG9yaW5nQWxsb2NhdG9yPEluZGV4
VHlwZSwgSW50ZXJmZXJlbmNlU2V0LCBiYW5rPjsKIHByb3RlY3RlZDoKKyAgICB1c2luZyBUbXBN
YXBwZXIgPSB0eXBlbmFtZSBCYXNlOjpUbXBNYXBwZXI7CiAgICAgdXNpbmcgQmFzZTo6bV9pc09u
U2VsZWN0U3RhY2s7CiAgICAgdXNpbmcgQmFzZTo6bV9zZWxlY3RTdGFjazsKICAgICB1c2luZyBC
YXNlOjptX3NpbXBsaWZ5V29ya2xpc3Q7CkBAIC02MzUsMTEgKzc0MiwxMiBAQCBwcm90ZWN0ZWQ6
CiAgICAgdXNpbmcgQmFzZTo6aGFzQmVlblNpbXBsaWZpZWQ7CiAgICAgdXNpbmcgQmFzZTo6YWRk
VG9TcGlsbDsKICAgICB1c2luZyBCYXNlOjphZGRCaWFzOworICAgIHVzaW5nIEJhc2U6Om1faW50
ZXJmZXJlbmNlRWRnZXM7CiAgICAgdXNpbmcgQmFzZTo6bV9waW5uZWRSZWdzOwogICAgIHVzaW5n
IEJhc2U6Om1fcmVnc0luUHJpb3JpdHlPcmRlcjsKIAogcHVibGljOgotICAgIEJyaWdncyhDb2Rl
JiBjb2RlLCBjb25zdCBWZWN0b3I8UmVnPiYgcmVnc0luUHJpb3JpdHlPcmRlciwgSW5kZXhUeXBl
IGxhc3RQcmVjb2xvcmVkUmVnaXN0ZXJJbmRleCwgdW5zaWduZWQgdG1wQXJyYXlTaXplLCBjb25z
dCBIYXNoU2V0PHVuc2lnbmVkPiYgdW5zcGlsbGFibGVUbXBzLCBjb25zdCBVc2VDb3VudHM8VG1w
PiYgdXNlQ291bnRzKQorICAgIEJyaWdncyhDb2RlJiBjb2RlLCBjb25zdCBWZWN0b3I8UmVnPiYg
cmVnc0luUHJpb3JpdHlPcmRlciwgSW5kZXhUeXBlIGxhc3RQcmVjb2xvcmVkUmVnaXN0ZXJJbmRl
eCwgdW5zaWduZWQgdG1wQXJyYXlTaXplLCBjb25zdCBCaXRWZWN0b3ImIHVuc3BpbGxhYmxlVG1w
cywgY29uc3QgVXNlQ291bnRzJiB1c2VDb3VudHMpCiAgICAgICAgIDogQmFzZShjb2RlLCByZWdz
SW5Qcmlvcml0eU9yZGVyLCBsYXN0UHJlY29sb3JlZFJlZ2lzdGVySW5kZXgsIHRtcEFycmF5U2l6
ZSwgdW5zcGlsbGFibGVUbXBzLCB1c2VDb3VudHMpCiAgICAgewogICAgIH0KQEAgLTY5MSw3ICs3
OTksNyBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIHVuc2ln
bmVkIGRlZ3JlZSA9IG1fZGVncmVlc1tpXTsKICAgICAgICAgICAgICAgICBpZiAoZGVncmVlID49
IHJlZ2lzdGVyQ291bnQpIHsKLSAgICAgICAgICAgICAgICAgICAgQVNTRVJUKG1fdW5zcGlsbGFi
bGVUbXBzLmNvbnRhaW5zKGkpIHx8IG1fc3BpbGxXb3JrbGlzdC5jb250YWlucyhpKSk7CisgICAg
ICAgICAgICAgICAgICAgIEFTU0VSVChtX3Vuc3BpbGxhYmxlVG1wcy5nZXQoaSkgfHwgbV9zcGls
bFdvcmtsaXN0LmNvbnRhaW5zKGkpKTsKICAgICAgICAgICAgICAgICAgICAgQVNTRVJUKCFtX3Np
bXBsaWZ5V29ya2xpc3QuY29udGFpbnMoaSkpOwogICAgICAgICAgICAgICAgICAgICBjb250aW51
ZTsKICAgICAgICAgICAgICAgICB9CkBAIC03NDcsOSArODU1LDcgQEAgcHJvdGVjdGVkOgogICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9CiAKLSAgICAgICAgaWYgKGlzUHJlY29s
b3JlZCh2KQotICAgICAgICAgICAgfHwgaGFzSW50ZXJmZXJlbmNlRWRnZShJbnRlcmZlcmVuY2VF
ZGdlKHUsIHYpKSkgewotCisgICAgICAgIGlmIChpc1ByZWNvbG9yZWQodikgfHwgaGFzSW50ZXJm
ZXJlbmNlRWRnZSh1LCB2KSkgewogICAgICAgICAgICAgLy8gTm8gbmVlZCB0byBldmVyIGNvbnNp
ZGVyIHRoaXMgbW92ZSBhZ2FpbiBpZiBpdCBpbnRlcmZlcmVzLgogICAgICAgICAgICAgLy8gTm8g
Y29hbGVzY2luZyB3aWxsIHJlbW92ZSB0aGUgaW50ZXJmZXJlbmNlLgogICAgICAgICAgICAgbW92
ZUluZGV4ID0gVUlOVF9NQVg7CkBAIC03ODgsNyArODk0LDggQEAgcHJvdGVjdGVkOgogICAgICAg
ICBtX2NvYWxlc2NlZFRtcHNbdl0gPSB1OwogCiAgICAgICAgIGF1dG8mIHZNb3ZlcyA9IG1fbW92
ZUxpc3Rbdl07Ci0gICAgICAgIG1fbW92ZUxpc3RbdV0uYWRkKHZNb3Zlcy5iZWdpbigpLCB2TW92
ZXMuZW5kKCkpOworICAgICAgICBmb3IgKHVuc2lnbmVkIG1vdmUgOiB2TW92ZXMpCisgICAgICAg
ICAgICBtX21vdmVMaXN0W3VdLmFkZChtb3ZlKTsKIAogICAgICAgICBmb3JFYWNoQWRqYWNlbnQo
diwgW3RoaXMsIHVdIChJbmRleFR5cGUgYWRqYWNlbnRUbXBJbmRleCkgewogICAgICAgICAgICAg
aWYgKGFkZEVkZ2VEaXN0aW5jdFdpdGhvdXREZWdyZWVDaGFuZ2UoYWRqYWNlbnRUbXBJbmRleCwg
dSkpIHsKQEAgLTkzOCw3ICsxMDQ1LDcgQEAgcHJvdGVjdGVkOgogICAgICAgICAgICAgICAgIGRh
dGFMb2dMbigiTW92aW5nIHRtcCAiLCB0bXBJbmRleCwgIiBmcm9tIHNwaWxsIGxpc3QgdG8gc2lt
cGxpZnkgbGlzdCBiZWNhdXNlIGl0J3MgZGVncmVlIGlzIG5vdyBsZXNzIHRoYW4gayIpOwogCiAg
ICAgICAgICAgICBpZiAoQVNTRVJUX0VOQUJMRUQpCi0gICAgICAgICAgICAgICAgQVNTRVJUKG1f
dW5zcGlsbGFibGVUbXBzLmNvbnRhaW5zKHRtcEluZGV4KSB8fCBtX3NwaWxsV29ya2xpc3QuY29u
dGFpbnModG1wSW5kZXgpKTsKKyAgICAgICAgICAgICAgICBBU1NFUlQobV91bnNwaWxsYWJsZVRt
cHMuZ2V0KHRtcEluZGV4KSB8fCBtX3NwaWxsV29ya2xpc3QuY29udGFpbnModG1wSW5kZXgpKTsK
ICAgICAgICAgICAgIG1fc3BpbGxXb3JrbGlzdC5xdWlja0NsZWFyKHRtcEluZGV4KTsKIAogICAg
ICAgICAgICAgQVNTRVJUKCFtX3NpbXBsaWZ5V29ya2xpc3QuY29udGFpbnModG1wSW5kZXgpKTsK
QEAgLTk1NiwxMCArMTA2MywxMSBAQCBwcm90ZWN0ZWQ6CiAgICAgTW92ZVNldCBtX3dvcmtsaXN0
TW92ZXM7CiB9OwogCi10ZW1wbGF0ZSA8dHlwZW5hbWUgSW5kZXhUeXBlLCB0eXBlbmFtZSBUbXBN
YXBwZXIsIHR5cGVuYW1lIEludGVyZmVyZW5jZUVkZ2U+Ci1jbGFzcyBJUkMgOiBwdWJsaWMgQWJz
dHJhY3RDb2xvcmluZ0FsbG9jYXRvcjxJbmRleFR5cGUsIFRtcE1hcHBlciwgSW50ZXJmZXJlbmNl
RWRnZT4gewotICAgIHVzaW5nIEJhc2UgPSBBYnN0cmFjdENvbG9yaW5nQWxsb2NhdG9yPEluZGV4
VHlwZSwgVG1wTWFwcGVyLCBJbnRlcmZlcmVuY2VFZGdlPjsKK3RlbXBsYXRlIDx0eXBlbmFtZSBJ
bmRleFR5cGUsIHR5cGVuYW1lIEludGVyZmVyZW5jZVNldCwgQmFuayBiYW5rPgorY2xhc3MgSVJD
IDogcHVibGljIEFic3RyYWN0Q29sb3JpbmdBbGxvY2F0b3I8SW5kZXhUeXBlLCBJbnRlcmZlcmVu
Y2VTZXQsIGJhbms+IHsKKyAgICB1c2luZyBCYXNlID0gQWJzdHJhY3RDb2xvcmluZ0FsbG9jYXRv
cjxJbmRleFR5cGUsIEludGVyZmVyZW5jZVNldCwgYmFuaz47CiBwcm90ZWN0ZWQ6CisgICAgdXNp
bmcgVG1wTWFwcGVyID0gdHlwZW5hbWUgQmFzZTo6VG1wTWFwcGVyOwogICAgIHVzaW5nIEJhc2U6
Om1faXNPblNlbGVjdFN0YWNrOwogICAgIHVzaW5nIEJhc2U6Om1fc2VsZWN0U3RhY2s7CiAgICAg
dXNpbmcgQmFzZTo6bV9zaW1wbGlmeVdvcmtsaXN0OwpAQCAtOTkxLDExICsxMDk5LDEyIEBAIHBy
b3RlY3RlZDoKICAgICB1c2luZyBCYXNlOjptX2FkamFjZW5jeUxpc3Q7CiAgICAgdXNpbmcgQmFz
ZTo6ZHVtcEludGVyZmVyZW5jZUdyYXBoSW5Eb3Q7CiAgICAgdXNpbmcgQmFzZTo6YWRkQmlhczsK
KyAgICB1c2luZyBCYXNlOjptX2ludGVyZmVyZW5jZUVkZ2VzOwogICAgIHVzaW5nIEJhc2U6Om1f
cGlubmVkUmVnczsKICAgICB1c2luZyBCYXNlOjptX3JlZ3NJblByaW9yaXR5T3JkZXI7CiAKIHB1
YmxpYzoKLSAgICBJUkMoQ29kZSYgY29kZSwgY29uc3QgVmVjdG9yPFJlZz4mIHJlZ3NJblByaW9y
aXR5T3JkZXIsIEluZGV4VHlwZSBsYXN0UHJlY29sb3JlZFJlZ2lzdGVySW5kZXgsIHVuc2lnbmVk
IHRtcEFycmF5U2l6ZSwgY29uc3QgSGFzaFNldDx1bnNpZ25lZD4mIHVuc3BpbGxhYmxlVG1wcywg
Y29uc3QgVXNlQ291bnRzPFRtcD4mIHVzZUNvdW50cykKKyAgICBJUkMoQ29kZSYgY29kZSwgY29u
c3QgVmVjdG9yPFJlZz4mIHJlZ3NJblByaW9yaXR5T3JkZXIsIEluZGV4VHlwZSBsYXN0UHJlY29s
b3JlZFJlZ2lzdGVySW5kZXgsIHVuc2lnbmVkIHRtcEFycmF5U2l6ZSwgY29uc3QgQml0VmVjdG9y
JiB1bnNwaWxsYWJsZVRtcHMsIGNvbnN0IFVzZUNvdW50cyYgdXNlQ291bnRzKQogICAgICAgICA6
IEJhc2UoY29kZSwgcmVnc0luUHJpb3JpdHlPcmRlciwgbGFzdFByZWNvbG9yZWRSZWdpc3Rlcklu
ZGV4LCB0bXBBcnJheVNpemUsIHVuc3BpbGxhYmxlVG1wcywgdXNlQ291bnRzKQogICAgIHsKICAg
ICB9CkBAIC0xMDkzLDggKzEyMDIsNyBAQCBwcm90ZWN0ZWQ6CiAKICAgICAgICAgICAgIGlmICh0
cmFjZURlYnVnKQogICAgICAgICAgICAgICAgIGRhdGFMb2coIiAgICBDb2FsZXNjZWRcbiIpOwot
ICAgICAgICB9IGVsc2UgaWYgKGlzUHJlY29sb3JlZCh2KQotICAgICAgICAgICAgfHwgaGFzSW50
ZXJmZXJlbmNlRWRnZShJbnRlcmZlcmVuY2VFZGdlKHUsIHYpKSkgeworICAgICAgICB9IGVsc2Ug
aWYgKGlzUHJlY29sb3JlZCh2KSB8fCBoYXNJbnRlcmZlcmVuY2VFZGdlKHUsIHYpKSB7CiAgICAg
ICAgICAgICBhZGRXb3JrTGlzdCh1KTsKICAgICAgICAgICAgIGFkZFdvcmtMaXN0KHYpOwogCkBA
IC0xMTMzLDcgKzEyNDEsOCBAQCBwcm90ZWN0ZWQ6CiAgICAgICAgIG1fY29hbGVzY2VkVG1wc1t2
XSA9IHU7CiAKICAgICAgICAgYXV0byYgdk1vdmVzID0gbV9tb3ZlTGlzdFt2XTsKLSAgICAgICAg
bV9tb3ZlTGlzdFt1XS5hZGQodk1vdmVzLmJlZ2luKCksIHZNb3Zlcy5lbmQoKSk7CisgICAgICAg
IGZvciAodW5zaWduZWQgbW92ZSA6IHZNb3ZlcykKKyAgICAgICAgICAgIG1fbW92ZUxpc3RbdV0u
YWRkKG1vdmUpOwogCiAgICAgICAgIGZvckVhY2hBZGphY2VudCh2LCBbdGhpcywgdV0gKEluZGV4
VHlwZSBhZGphY2VudFRtcEluZGV4KSB7CiAgICAgICAgICAgICBpZiAoYWRkRWRnZURpc3RpbmN0
V2l0aG91dERlZ3JlZUNoYW5nZShhZGphY2VudFRtcEluZGV4LCB1KSkgewpAQCAtMTM5NywxMCAr
MTUwNiwxMSBAQCBwcm90ZWN0ZWQ6CiB9OwogCiAvLyBUaGlzIHBlcmZvcm0gYWxsIHRoZSB0YXNr
cyB0aGF0IGFyZSBzcGVjaWZpYyB0byBjZXJ0YWluIHJlZ2lzdGVyIHR5cGUuCi10ZW1wbGF0ZTxC
YW5rIGJhbmssIHRlbXBsYXRlPHR5cGVuYW1lLCB0eXBlbmFtZSwgdHlwZW5hbWU+IGNsYXNzIEFs
bG9jYXRvclR5cGUsIHR5cGVuYW1lIEludGVyZmVyZW5jZUVkZ2VUeXBlPgotY2xhc3MgQ29sb3Jp
bmdBbGxvY2F0b3IgOiBwdWJsaWMgQWxsb2NhdG9yVHlwZTx1bnNpZ25lZCwgQWJzb2x1dGVUbXBN
YXBwZXI8YmFuaz4sIEludGVyZmVyZW5jZUVkZ2VUeXBlPiB7Ci0gICAgdXNpbmcgVG1wTWFwcGVy
ID0gQWJzb2x1dGVUbXBNYXBwZXI8YmFuaz47Ci0gICAgdXNpbmcgQmFzZSA9IEFsbG9jYXRvclR5
cGU8dW5zaWduZWQsIFRtcE1hcHBlciwgSW50ZXJmZXJlbmNlRWRnZVR5cGU+OwordGVtcGxhdGU8
dHlwZW5hbWUgSW5kZXhUeXBlLCBCYW5rIGJhbmssIHRlbXBsYXRlPHR5cGVuYW1lLCB0eXBlbmFt
ZSwgQmFuaz4gY2xhc3MgQWxsb2NhdG9yVHlwZSwgdHlwZW5hbWUgSW50ZXJmZXJlbmNlU2V0Pgor
Y2xhc3MgQ29sb3JpbmdBbGxvY2F0b3IgOiBwdWJsaWMgQWxsb2NhdG9yVHlwZTxJbmRleFR5cGUs
IEludGVyZmVyZW5jZVNldCwgYmFuaz4geworICAgIHVzaW5nIEJhc2UgPSBBbGxvY2F0b3JUeXBl
PEluZGV4VHlwZSwgSW50ZXJmZXJlbmNlU2V0LCBiYW5rPjsKKyAgICB1c2luZyBUbXBNYXBwZXIg
PSB0eXBlbmFtZSBCYXNlOjpUbXBNYXBwZXI7CisgICAgdXNpbmcgQmFzZTo6dG1wVG9JbmRleDsK
ICAgICB1c2luZyBCYXNlOjptX2lzT25TZWxlY3RTdGFjazsKICAgICB1c2luZyBCYXNlOjptX3Nl
bGVjdFN0YWNrOwogICAgIHVzaW5nIEJhc2U6Om1fc2ltcGxpZnlXb3JrbGlzdDsKQEAgLTE0MjMs
MTIgKzE1MzMsMTMgQEAgY2xhc3MgQ29sb3JpbmdBbGxvY2F0b3IgOiBwdWJsaWMgQWxsb2NhdG9y
VHlwZTx1bnNpZ25lZCwgQWJzb2x1dGVUbXBNYXBwZXI8YmFuaz4KICAgICB1c2luZyBCYXNlOjpo
YXNJbnRlcmZlcmVuY2VFZGdlOwogICAgIHVzaW5nIEJhc2U6OmdldEFsaWFzOwogICAgIHVzaW5n
IEJhc2U6OmFkZEVkZ2U7CisgICAgdXNpbmcgQmFzZTo6bV9pbnRlcmZlcmVuY2VFZGdlczsKICAg
ICB1c2luZyBCYXNlOjptX3Bpbm5lZFJlZ3M7CiAgICAgdXNpbmcgQmFzZTo6bV9yZWdzSW5Qcmlv
cml0eU9yZGVyOwogCiBwdWJsaWM6CiAKLSAgICBDb2xvcmluZ0FsbG9jYXRvcihDb2RlJiBjb2Rl
LCBUbXBXaWR0aCYgdG1wV2lkdGgsIGNvbnN0IFVzZUNvdW50czxUbXA+JiB1c2VDb3VudHMsIGNv
bnN0IEhhc2hTZXQ8dW5zaWduZWQ+JiB1bnNwaWxsYWJsZVRtcCkKKyAgICBDb2xvcmluZ0FsbG9j
YXRvcihDb2RlJiBjb2RlLCBUbXBXaWR0aCYgdG1wV2lkdGgsIGNvbnN0IFVzZUNvdW50cyYgdXNl
Q291bnRzLCBjb25zdCBCaXRWZWN0b3ImIHVuc3BpbGxhYmxlVG1wKQogICAgICAgICA6IEJhc2Uo
Y29kZSwgY29kZS5yZWdzSW5Qcmlvcml0eU9yZGVyKGJhbmspLCBUbXBNYXBwZXI6Omxhc3RNYWNo
aW5lUmVnaXN0ZXJJbmRleCgpLCB0bXBBcnJheVNpemUoY29kZSksIHVuc3BpbGxhYmxlVG1wLCB1
c2VDb3VudHMpCiAgICAgICAgICwgbV90bXBXaWR0aCh0bXBXaWR0aCkKICAgICB7CkBAIC0xNDQw
LDEzICsxNTUxLDE1IEBAIHB1YmxpYzoKICAgICAgICAgICAgIH0KICAgICAgICAgfQogCisgICAg
ICAgIG1faW50ZXJmZXJlbmNlRWRnZXMuc2V0TWF4VG1wSW5kZXgoQWJzb2x1dGVUbXBNYXBwZXI8
YmFuaz46OmFic29sdXRlSW5kZXgobV9jb2RlLm51bVRtcHMoYmFuaykpKTsKKwogICAgICAgICBp
bml0aWFsaXplUHJlY29sb3JlZFRtcCgpOwogICAgICAgICBidWlsZCgpOwogICAgIH0KIAogICAg
IFRtcCBnZXRBbGlhcyhUbXAgdG1wKSBjb25zdAogICAgIHsKLSAgICAgICAgcmV0dXJuIFRtcE1h
cHBlcjo6dG1wRnJvbUFic29sdXRlSW5kZXgoZ2V0QWxpYXMoVG1wTWFwcGVyOjphYnNvbHV0ZUlu
ZGV4KHRtcCkpKTsKKyAgICAgICAgcmV0dXJuIFRtcE1hcHBlcjo6dG1wRnJvbUFic29sdXRlSW5k
ZXgoZ2V0QWxpYXModG1wVG9JbmRleCh0bXApKSk7CiAgICAgfQogCiAgICAgLy8gVGhpcyB0ZWxs
cyB5b3UgaWYgYSBNb3ZlIHdpbGwgYmUgY29hbGVzY2FibGUgaWYgdGhlIHNyYyBhbmQgZHN0IGVu
ZCB1cCBtYXRjaGluZy4gVGhpcyBtZXRob2QKQEAgLTE0NjksOCArMTU4Miw4IEBAIHB1YmxpYzoK
ICAgICAgICAgaWYgKG1fY29hbGVzY2VkVG1wc0F0U3BpbGwuaXNFbXB0eSgpKQogICAgICAgICAg
ICAgcmV0dXJuIHRtcDsKIAotICAgICAgICB1bnNpZ25lZCBhbGlhc0luZGV4ID0gVG1wTWFwcGVy
OjphYnNvbHV0ZUluZGV4KHRtcCk7Ci0gICAgICAgIHdoaWxlICh1bnNpZ25lZCBuZXh0QWxpYXNJ
bmRleCA9IG1fY29hbGVzY2VkVG1wc0F0U3BpbGxbYWxpYXNJbmRleF0pCisgICAgICAgIEluZGV4
VHlwZSBhbGlhc0luZGV4ID0gdG1wVG9JbmRleCh0bXApOworICAgICAgICB3aGlsZSAoSW5kZXhU
eXBlIG5leHRBbGlhc0luZGV4ID0gbV9jb2FsZXNjZWRUbXBzQXRTcGlsbFthbGlhc0luZGV4XSkK
ICAgICAgICAgICAgIGFsaWFzSW5kZXggPSBuZXh0QWxpYXNJbmRleDsKIAogICAgICAgICBUbXAg
YWxpYXMgPSBUbXBNYXBwZXI6OnRtcEZyb21BYnNvbHV0ZUluZGV4KGFsaWFzSW5kZXgpOwpAQCAt
MTUyNyw3ICsxNjQwLDcgQEAgcHVibGljOgogICAgICAgICBjb25zdCBDb2xsZWN0aW9uJiBtX2Nv
bGxlY3Rpb247CiAgICAgfTsKIAotICAgIEluZGV4VG9UbXBJdGVyYWJsZUFkYXB0b3I8VmVjdG9y
PHVuc2lnbmVkPj4gc3BpbGxlZFRtcHMoKSBjb25zdCB7IHJldHVybiBtX3NwaWxsZWRUbXBzOyB9
CisgICAgSW5kZXhUb1RtcEl0ZXJhYmxlQWRhcHRvcjxWZWN0b3I8SW5kZXhUeXBlPj4gc3BpbGxl
ZFRtcHMoKSBjb25zdCB7IHJldHVybiBtX3NwaWxsZWRUbXBzOyB9CiAKICAgICBib29sIHJlcXVp
cmVzU3BpbGxpbmcoKSBjb25zdCB7IHJldHVybiAhbV9zcGlsbGVkVG1wcy5pc0VtcHR5KCk7IH0K
IApAQCAtMTU4NCwxMCArMTY5NywxMCBAQCBJR05PUkVfR0NDX1dBUk5JTkdTX0VORAogICAgICAg
ICBpZiAobGVmdFRtcC5pc0dQKCkgIT0gKGJhbmsgPT0gR1ApIHx8IHJpZ2h0VG1wLmlzR1AoKSAh
PSAoYmFuayA9PSBHUCkpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICAgICAgdW5z
aWduZWQgbGVmdEluZGV4ID0gVG1wTWFwcGVyOjphYnNvbHV0ZUluZGV4KGxlZnRUbXApOwotICAg
ICAgICB1bnNpZ25lZCByaWdodEluZGV4ID0gVG1wTWFwcGVyOjphYnNvbHV0ZUluZGV4KHJpZ2h0
VG1wKTsKKyAgICAgICAgSW5kZXhUeXBlIGxlZnRJbmRleCA9IHRtcFRvSW5kZXgobGVmdFRtcCk7
CisgICAgICAgIEluZGV4VHlwZSByaWdodEluZGV4ID0gdG1wVG9JbmRleChyaWdodFRtcCk7CiAK
LSAgICAgICAgcmV0dXJuICFoYXNJbnRlcmZlcmVuY2VFZGdlKEludGVyZmVyZW5jZUVkZ2VUeXBl
KGxlZnRJbmRleCwgcmlnaHRJbmRleCkpOworICAgICAgICByZXR1cm4gIWhhc0ludGVyZmVyZW5j
ZUVkZ2UobGVmdEluZGV4LCByaWdodEluZGV4KTsKICAgICB9CiAKICAgICB2b2lkIGFkZFRvTG93
UHJpb3JpdHlDb2FsZXNjaW5nQ2FuZGlkYXRlcyhBcmcgbGVmdCwgQXJnIHJpZ2h0KQpAQCAtMTU5
Niw4ICsxNzA5LDggQEAgSUdOT1JFX0dDQ19XQVJOSU5HU19FTkQKICAgICAgICAgVG1wIGxlZnRU
bXAgPSBsZWZ0LnRtcCgpOwogICAgICAgICBUbXAgcmlnaHRUbXAgPSByaWdodC50bXAoKTsKIAot
ICAgICAgICB1bnNpZ25lZCBsZWZ0SW5kZXggPSBUbXBNYXBwZXI6OmFic29sdXRlSW5kZXgobGVm
dFRtcCk7Ci0gICAgICAgIHVuc2lnbmVkIHJpZ2h0SW5kZXggPSBUbXBNYXBwZXI6OmFic29sdXRl
SW5kZXgocmlnaHRUbXApOworICAgICAgICBJbmRleFR5cGUgbGVmdEluZGV4ID0gdG1wVG9JbmRl
eChsZWZ0VG1wKTsKKyAgICAgICAgSW5kZXhUeXBlIHJpZ2h0SW5kZXggPSB0bXBUb0luZGV4KHJp
Z2h0VG1wKTsKIAogICAgICAgICB1bnNpZ25lZCBuZXh0TW92ZUluZGV4ID0gbV9jb2FsZXNjaW5n
Q2FuZGlkYXRlcy5zaXplKCk7CiAgICAgICAgIG1fY29hbGVzY2luZ0NhbmRpZGF0ZXMuYXBwZW5k
KHsgbGVmdEluZGV4LCByaWdodEluZGV4IH0pOwpAQCAtMTY3NSw3ICsxNzg4LDcgQEAgSUdOT1JF
X0dDQ19XQVJOSU5HU19FTkQKICAgICAgICAgICAgIEFTU0VSVCh1c2VUbXApOwogCiAgICAgICAg
ICAgICB1bnNpZ25lZCBuZXh0TW92ZUluZGV4ID0gbV9jb2FsZXNjaW5nQ2FuZGlkYXRlcy5zaXpl
KCk7Ci0gICAgICAgICAgICBtX2NvYWxlc2NpbmdDYW5kaWRhdGVzLmFwcGVuZCh7IFRtcE1hcHBl
cjo6YWJzb2x1dGVJbmRleCh1c2VUbXApLCBUbXBNYXBwZXI6OmFic29sdXRlSW5kZXgoZGVmVG1w
KSB9KTsKKyAgICAgICAgICAgIG1fY29hbGVzY2luZ0NhbmRpZGF0ZXMuYXBwZW5kKHsgdG1wVG9J
bmRleCh1c2VUbXApLCB0bXBUb0luZGV4KGRlZlRtcCkgfSk7CiAgICAgICAgICAgICBpZiAodHJh
Y2VEZWJ1ZykKICAgICAgICAgICAgICAgICBkYXRhTG9nTG4oIk1vdmUgYXQgaW5kZXggIiwgbmV4
dE1vdmVJbmRleCwgIiBpczogIiwgKnByZXZJbnN0KTsKIApAQCAtMTc0MywxNCArMTg1NiwxNSBA
QCBJR05PUkVfR0NDX1dBUk5JTkdTX0VORAogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAg
ICAgIGZvciAoVG1wIGxpdmVUbXAgOiBsaXZlVG1wcykgewogICAgICAgICAgICAgICAgICAgICBB
U1NFUlQobGl2ZVRtcC5pc0dQKCkgPT0gKGJhbmsgPT0gR1ApKTsKLSAgICAgICAgICAgICAgICAg
ICAgCi0gICAgICAgICAgICAgICAgICAgIGlmICh0cmFjZURlYnVnKQotICAgICAgICAgICAgICAg
ICAgICAgICAgZGF0YUxvZygiICAgIEFkZGluZyBkZWYtbGl2ZSBlZGdlOiAiLCBhcmcsICIsICIs
IGxpdmVUbXAsICJcbiIpOworCisgICAgICAgICAgICAgICAgICAgIGRhdGFMb2dMbklmKHRyYWNl
RGVidWcsICIgICAgQWRkaW5nIGRlZi1saXZlIGVkZ2U6ICIsIGFyZywgIiwgIiwgbGl2ZVRtcCk7
CiAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICBhZGRFZGdlKGFyZywg
bGl2ZVRtcCk7CiAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGZvciAoY29uc3Qg
VG1wJiBwaW5uZWRSZWdUbXAgOiBtX3Bpbm5lZFJlZ3MpCisgICAgICAgICAgICAgICAgZm9yIChj
b25zdCBUbXAmIHBpbm5lZFJlZ1RtcCA6IG1fcGlubmVkUmVncykgeworICAgICAgICAgICAgICAg
ICAgICBkYXRhTG9nTG5JZih0cmFjZURlYnVnLCAiICAgIEFkZGluZyBkZWYtcGlubmVkIGVkZ2U6
ICIsIGFyZywgIiwgIiwgcGlubmVkUmVnVG1wKTsKICAgICAgICAgICAgICAgICAgICAgYWRkRWRn
ZShhcmcsIHBpbm5lZFJlZ1RtcCk7CisgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfSk7
CiAgICAgfQogCkBAIC0xNzU4LDcgKzE4NzIsNyBAQCBJR05PUkVfR0NDX1dBUk5JTkdTX0VORAog
ICAgIHsKICAgICAgICAgQVNTRVJUX1dJVEhfTUVTU0FHRShhLmlzR1AoKSA9PSBiLmlzR1AoKSwg
IkFuIGludGVyZmVyZW5jZSBiZXR3ZWVuIHJlZ2lzdGVycyBvZiBkaWZmZXJlbnQgdHlwZXMgZG9l
cyBub3QgbWFrZSBzZW5zZSwgaXQgY2FuIGxlYWQgdG8gbm9uLWNvbG9yYWJsZSBncmFwaHMuIik7
CiAKLSAgICAgICAgYWRkRWRnZShUbXBNYXBwZXI6OmFic29sdXRlSW5kZXgoYSksIFRtcE1hcHBl
cjo6YWJzb2x1dGVJbmRleChiKSk7CisgICAgICAgIGFkZEVkZ2UodG1wVG9JbmRleChhKSwgdG1w
VG9JbmRleChiKSk7CiAgICAgfQogCiAgICAgLy8gQ2FsbGluZyB0aGlzIHdpdGhvdXQgYSB0bXBX
aWR0aCB3aWxsIHBlcmZvcm0gYSBtb3JlIGNvbnNlcnZhdGl2ZSBjb2FsZXNjaW5nIGFuYWx5c2lz
IHRoYXQgYXNzdW1lcwpAQCAtMTgyMCw3ICsxOTM0LDcgQEAgSUdOT1JFX0dDQ19XQVJOSU5HU19F
TkQKIAogY2xhc3MgR3JhcGhDb2xvcmluZ1JlZ2lzdGVyQWxsb2NhdGlvbiB7CiBwdWJsaWM6Ci0g
ICAgR3JhcGhDb2xvcmluZ1JlZ2lzdGVyQWxsb2NhdGlvbihDb2RlJiBjb2RlLCBVc2VDb3VudHM8
VG1wPiYgdXNlQ291bnRzKQorICAgIEdyYXBoQ29sb3JpbmdSZWdpc3RlckFsbG9jYXRpb24oQ29k
ZSYgY29kZSwgVXNlQ291bnRzJiB1c2VDb3VudHMpCiAgICAgICAgIDogbV9jb2RlKGNvZGUpCiAg
ICAgICAgICwgbV91c2VDb3VudHModXNlQ291bnRzKQogICAgIHsKQEAgLTE4NDAsNyArMTk1NCw3
IEBAIHByaXZhdGU6CiAgICAgdGVtcGxhdGU8QmFuayBiYW5rPgogICAgIHZvaWQgYWxsb2NhdGVP
bkJhbmsoKQogICAgIHsKLSAgICAgICAgSGFzaFNldDx1bnNpZ25lZD4gdW5zcGlsbGFibGVUbXBz
ID0gY29tcHV0ZVVuc3BpbGxhYmxlVG1wczxiYW5rPigpOworICAgICAgICBCaXRWZWN0b3IgdW5z
cGlsbGFibGVUbXBzID0gY29tcHV0ZVVuc3BpbGxhYmxlVG1wczxiYW5rPigpOwogCiAgICAgICAg
IC8vIEZJWE1FOiBJZiBhIFRtcCBpcyB1c2VkIG9ubHkgZnJvbSBhIFNjcmF0Y2ggcm9sZSBhbmQg
dGhhdCBhcmd1bWVudCBpcyAhYWRtaXRzU3RhY2ssIHRoZW4KICAgICAgICAgLy8gd2Ugc2hvdWxk
IGFkZCB0aGUgVG1wIHRvIHVuc3BpbGxhYmxlVG1wcy4gVGhhdCB3aWxsIGhlbHAgYXZvaWQgcmVs
b29waW5nIG9ubHkgdG8gdHVybiB0aGUKQEAgLTE4NjQsMTAgKzE5NzgsOSBAQCBwcml2YXRlOgog
ICAgICAgICAgICAgLy8gY3JlYXRlZCBUbXBzIG1heSBnZXQgbmFycm93ZXIgdXNlL2RlZiB3aWR0
aHMuIE9uIHRoZSBvdGhlciBoYW5kLCB0aGUgc3BpbGxlciBhbHJlYWR5CiAgICAgICAgICAgICAv
LyBzZWxlY3RzIHdoaWNoIG1vdmUgaW5zdHJ1Y3Rpb24gdG8gdXNlIGJhc2VkIG9uIHRoZSBvcmln
aW5hbCBUbXAncyB3aWR0aHMsIHNvIGl0IG1heSBub3QKICAgICAgICAgICAgIC8vIG1hdHRlciB0
aGFuIGEgc3Vic2VxdWVudCBpdGVyYXRpb24gc2VlcyBhIGNvbnNlcnZhdGl2ZSB3aWR0aCBmb3Ig
dGhlIG5ldyBUbXBzLiBBbHNvLCB0aGUKLSAgICAgICAgICAgIC8vIHJlY29tcHV0YXRpb24gbWF5
IG5vdCBhY3R1YWxseSBiZSBhIHBlcmZvcm1hbmNlIHByb2JsZW07IGl0J3MgbGlrZWx5IHRoYXQg
YSBiZXR0ZXIgd2F5IHRvCi0gICAgICAgICAgICAvLyBpbXByb3ZlIHBlcmZvcm1hbmNlIG9mIFRt
cFdpZHRoIGlzIHRvIHJlcGxhY2UgaXRzIEhhc2hNYXAgd2l0aCBzb21ldGhpbmcgZWxzZS4gSXQn
cwotICAgICAgICAgICAgLy8gcG9zc2libGUgdGhhdCBtb3N0IG9mIHRoZSBUbXBXaWR0aCBvdmVy
aGVhZCBpcyBmcm9tIHF1ZXJpZXMgb2YgVG1wV2lkdGggcmF0aGVyIHRoYW4gdGhlCi0gICAgICAg
ICAgICAvLyByZWNvbXB1dGF0aW9uLCBpbiB3aGljaCBjYXNlIHNwZWVkaW5nIHVwIHRoZSBsb29r
dXAgd291bGQgYmUgYSBiaWdnZXIgd2luLgorICAgICAgICAgICAgLy8gcmVjb21wdXRhdGlvbiBt
YXkgbm90IGFjdHVhbGx5IGJlIGEgcGVyZm9ybWFuY2UgcHJvYmxlbTogd2Ugc3BlbmQgcm91Z2hs
eSAzIHRvIDQlIG9mIHRoZQorICAgICAgICAgICAgLy8gcmVnaXN0ZXIgYWxsb2NhdG9yIGluIG1f
dG1wV2lkdGgucmVjb21wdXRlLiBJbiBjb21wYXJpc29uIHdlIHNwZW5kIG1vcmUgdGhhbiA0MCUg
YnVpbGRpbmcKKyAgICAgICAgICAgIC8vIHRoZSBpbnRlcmZlcmVuY2UgZ3JhcGgKICAgICAgICAg
ICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTI0NzgKICAg
ICAgICAgICAgIG1fdG1wV2lkdGgucmVjb21wdXRlPGJhbms+KG1fY29kZSk7CiAKQEAgLTE4ODUs
MjAgKzE5OTgsMjYgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAg
ICAgICAgICAgICB9OwogCisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChtX2NvZGUubnVtVG1w
cyhiYW5rKSA8IHN0ZDo6bnVtZXJpY19saW1pdHM8dWludDE2X3Q+OjptYXgoKSk7CisgICAgICAg
ICAgICAvLyBUaGUgYml0IHZlY3RvciBhcHByb2FjaCB1c2VzIG4qbiBiaXRzLCBvciAya0IgZm9y
IG4gPSA0MDAuCisgICAgICAgICAgICBjb25zdGV4cHIgdW5zaWduZWQgbWF4U2l6ZUZvclNtYWxs
SW50ZXJmZXJlbmNlR3JhcGggPSA0MDA7CisgICAgICAgICAgICB1c2luZyBJbmRleFR5cGUgPSB1
aW50MTZfdDsKKyAgICAgICAgICAgIHVzaW5nIExhcmdlSW50ZXJmZXJlbmNlR3JhcGggPSBJbnRl
cmZlcmVuY2VWZWN0b3I8U21hbGxTZXQ8SW5kZXhUeXBlLCBJbnRIYXNoPEluZGV4VHlwZT4+LCBJ
bmRleFR5cGU+OworICAgICAgICAgICAgdXNpbmcgU21hbGxJbnRlcmZlcmVuY2VHcmFwaCA9IElu
dGVyZmVyZW5jZUJpdFZlY3RvcjxJbmRleFR5cGU+OwogICAgICAgICAgICAgaWYgKHVzZUlSQygp
KSB7Ci0gICAgICAgICAgICAgICAgaWYgKG1fY29kZS5udW1UbXBzKGJhbmspIDwgc3RkOjpudW1l
cmljX2xpbWl0czx1aW50MTZfdD46Om1heCgpKSB7Ci0gICAgICAgICAgICAgICAgICAgIENvbG9y
aW5nQWxsb2NhdG9yPGJhbmssIElSQywgSW50ZXJmZXJlbmNlRWRnZTx1aW50MTZfdCwgdWludDMy
X3Q+PiBhbGxvY2F0b3IobV9jb2RlLCBtX3RtcFdpZHRoLCBtX3VzZUNvdW50cywgdW5zcGlsbGFi
bGVUbXBzKTsKKyAgICAgICAgICAgICAgICBpZiAobV9jb2RlLm51bVRtcHMoYmFuaykgPCBtYXhT
aXplRm9yU21hbGxJbnRlcmZlcmVuY2VHcmFwaCkgeworICAgICAgICAgICAgICAgICAgICBDb2xv
cmluZ0FsbG9jYXRvcjxJbmRleFR5cGUsIGJhbmssIElSQywgU21hbGxJbnRlcmZlcmVuY2VHcmFw
aD4gYWxsb2NhdG9yKG1fY29kZSwgbV90bXBXaWR0aCwgbV91c2VDb3VudHMsIHVuc3BpbGxhYmxl
VG1wcyk7CiAgICAgICAgICAgICAgICAgICAgIGRvbmUgPSBkb0FsbG9jYXRpb24oYWxsb2NhdG9y
KTsKICAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICBDb2xvcmlu
Z0FsbG9jYXRvcjxiYW5rLCBJUkMsIEludGVyZmVyZW5jZUVkZ2U8dWludDMyX3QsIHVpbnQ2NF90
Pj4gYWxsb2NhdG9yKG1fY29kZSwgbV90bXBXaWR0aCwgbV91c2VDb3VudHMsIHVuc3BpbGxhYmxl
VG1wcyk7CisgICAgICAgICAgICAgICAgICAgIENvbG9yaW5nQWxsb2NhdG9yPEluZGV4VHlwZSwg
YmFuaywgSVJDLCBMYXJnZUludGVyZmVyZW5jZUdyYXBoPiBhbGxvY2F0b3IobV9jb2RlLCBtX3Rt
cFdpZHRoLCBtX3VzZUNvdW50cywgdW5zcGlsbGFibGVUbXBzKTsKICAgICAgICAgICAgICAgICAg
ICAgZG9uZSA9IGRvQWxsb2NhdGlvbihhbGxvY2F0b3IpOwogICAgICAgICAgICAgICAgIH0KICAg
ICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgaWYgKG1fY29kZS5udW1UbXBzKGJh
bmspIDwgc3RkOjpudW1lcmljX2xpbWl0czx1aW50MTZfdD46Om1heCgpKSB7Ci0gICAgICAgICAg
ICAgICAgICAgIENvbG9yaW5nQWxsb2NhdG9yPGJhbmssIEJyaWdncywgSW50ZXJmZXJlbmNlRWRn
ZTx1aW50MTZfdCwgdWludDMyX3Q+PiBhbGxvY2F0b3IobV9jb2RlLCBtX3RtcFdpZHRoLCBtX3Vz
ZUNvdW50cywgdW5zcGlsbGFibGVUbXBzKTsKKyAgICAgICAgICAgICAgICBpZiAobV9jb2RlLm51
bVRtcHMoYmFuaykgPCBtYXhTaXplRm9yU21hbGxJbnRlcmZlcmVuY2VHcmFwaCkgeworICAgICAg
ICAgICAgICAgICAgICBDb2xvcmluZ0FsbG9jYXRvcjxJbmRleFR5cGUsIGJhbmssIEJyaWdncywg
U21hbGxJbnRlcmZlcmVuY2VHcmFwaD4gYWxsb2NhdG9yKG1fY29kZSwgbV90bXBXaWR0aCwgbV91
c2VDb3VudHMsIHVuc3BpbGxhYmxlVG1wcyk7CiAgICAgICAgICAgICAgICAgICAgIGRvbmUgPSBk
b0FsbG9jYXRpb24oYWxsb2NhdG9yKTsKICAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAg
ICAgICAgICAgICAgICBDb2xvcmluZ0FsbG9jYXRvcjxiYW5rLCBCcmlnZ3MsIEludGVyZmVyZW5j
ZUVkZ2U8dWludDMyX3QsIHVpbnQ2NF90Pj4gYWxsb2NhdG9yKG1fY29kZSwgbV90bXBXaWR0aCwg
bV91c2VDb3VudHMsIHVuc3BpbGxhYmxlVG1wcyk7CisgICAgICAgICAgICAgICAgICAgIENvbG9y
aW5nQWxsb2NhdG9yPEluZGV4VHlwZSwgYmFuaywgQnJpZ2dzLCBMYXJnZUludGVyZmVyZW5jZUdy
YXBoPiBhbGxvY2F0b3IobV9jb2RlLCBtX3RtcFdpZHRoLCBtX3VzZUNvdW50cywgdW5zcGlsbGFi
bGVUbXBzKTsKICAgICAgICAgICAgICAgICAgICAgZG9uZSA9IGRvQWxsb2NhdGlvbihhbGxvY2F0
b3IpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KQEAgLTE5MDcsMTEgKzIwMjYs
OCBAQCBwcml2YXRlOgogICAgIH0KIAogICAgIHRlbXBsYXRlPEJhbmsgYmFuaz4KLSAgICBIYXNo
U2V0PHVuc2lnbmVkPiBjb21wdXRlVW5zcGlsbGFibGVUbXBzKCkKKyAgICBCaXRWZWN0b3IgY29t
cHV0ZVVuc3BpbGxhYmxlVG1wcygpCiAgICAgewotCi0gICAgICAgIEhhc2hTZXQ8dW5zaWduZWQ+
IHVuc3BpbGxhYmxlVG1wczsKLQogICAgICAgICBzdHJ1Y3QgUmFuZ2UgewogICAgICAgICAgICAg
dW5zaWduZWQgZmlyc3QgeyBzdGQ6Om51bWVyaWNfbGltaXRzPHVuc2lnbmVkPjo6bWF4KCkgfTsK
ICAgICAgICAgICAgIHVuc2lnbmVkIGxhc3QgeyAwIH07CkBAIC0xOTY0LDEyICsyMDgwLDIwIEBA
IHByaXZhdGU6CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICArK2dsb2JhbEluZGV4OwogICAg
ICAgICB9CisKKyAgICAgICAgQml0VmVjdG9yIHVuc3BpbGxhYmxlVG1wczsKKyAgICAgICAgdW5z
cGlsbGFibGVUbXBzLmVuc3VyZVNpemUoYXJyYXlTaXplKTsKICAgICAgICAgZm9yICh1bnNpZ25l
ZCBpID0gQWJzb2x1dGVUbXBNYXBwZXI8YmFuaz46Omxhc3RNYWNoaW5lUmVnaXN0ZXJJbmRleCgp
ICsgMTsgaSA8IHJhbmdlcy5zaXplKCk7ICsraSkgewogICAgICAgICAgICAgUmFuZ2UmIHJhbmdl
ID0gcmFuZ2VzW2ldOwogICAgICAgICAgICAgaWYgKHJhbmdlLmxhc3QgLSByYW5nZS5maXJzdCA8
PSAxICYmIHJhbmdlLmNvdW50ID4gcmFuZ2UuYWRtaXRTdGFja0NvdW50KQotICAgICAgICAgICAg
ICAgIHVuc3BpbGxhYmxlVG1wcy5hZGQoaSk7CisgICAgICAgICAgICAgICAgdW5zcGlsbGFibGVU
bXBzLnF1aWNrU2V0KGkpOwogICAgICAgICB9CiAKKyAgICAgICAgbV9jb2RlLmZvckVhY2hGYXN0
VG1wKFsmXShUbXAgdG1wKSB7CisgICAgICAgICAgICBpZiAodG1wLmJhbmsoKSA9PSBiYW5rKQor
ICAgICAgICAgICAgICAgIHVuc3BpbGxhYmxlVG1wcy5xdWlja1NldChBYnNvbHV0ZVRtcE1hcHBl
cjxiYW5rPjo6YWJzb2x1dGVJbmRleCh0bXApKTsKKyAgICAgICAgfSk7CisKICAgICAgICAgcmV0
dXJuIHVuc3BpbGxhYmxlVG1wczsKICAgICB9CiAKQEAgLTIwMzEsMTIgKzIxNTUsMTIgQEAgcHJp
dmF0ZToKICAgICB9CiAKICAgICB0ZW1wbGF0ZTxCYW5rIGJhbmssIHR5cGVuYW1lIEFsbG9jYXRv
clR5cGU+Ci0gICAgdm9pZCBhZGRTcGlsbEFuZEZpbGwoY29uc3QgQWxsb2NhdG9yVHlwZSYgYWxs
b2NhdG9yLCBIYXNoU2V0PHVuc2lnbmVkPiYgdW5zcGlsbGFibGVUbXBzKQorICAgIHZvaWQgYWRk
U3BpbGxBbmRGaWxsKGNvbnN0IEFsbG9jYXRvclR5cGUmIGFsbG9jYXRvciwgQml0VmVjdG9yJiB1
bnNwaWxsYWJsZVRtcHMpCiAgICAgewogICAgICAgICBIYXNoTWFwPFRtcCwgU3RhY2tTbG90Kj4g
c3RhY2tTbG90czsKICAgICAgICAgZm9yIChUbXAgdG1wIDogYWxsb2NhdG9yLnNwaWxsZWRUbXBz
KCkpIHsKICAgICAgICAgICAgIC8vIEFsbCB0aGUgc3BpbGxlZCB2YWx1ZXMgYmVjb21lIHVuc3Bp
bGxhYmxlLgotICAgICAgICAgICAgdW5zcGlsbGFibGVUbXBzLmFkZChBYnNvbHV0ZVRtcE1hcHBl
cjxiYW5rPjo6YWJzb2x1dGVJbmRleCh0bXApKTsKKyAgICAgICAgICAgIHVuc3BpbGxhYmxlVG1w
cy5zZXQoQWJzb2x1dGVUbXBNYXBwZXI8YmFuaz46OmFic29sdXRlSW5kZXgodG1wKSk7CiAKICAg
ICAgICAgICAgIC8vIEFsbG9jYXRlIHN0YWNrIHNsb3QgZm9yIGVhY2ggc3BpbGxlZCB2YWx1ZS4K
ICAgICAgICAgICAgIFN0YWNrU2xvdCogc3RhY2tTbG90ID0gbV9jb2RlLmFkZFN0YWNrU2xvdCgK
QEAgLTIxMDksMTEgKzIyMzMsOCBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgICAgICAgICAg
Ly8gdmFsdWUgcmF0aGVyIHRoYW4gbG9hZGluZyBpdCBmcm9tIHRoZSBzdGFjay4gSW4gb3JkZXIg
Zm9yIHRoYXQKICAgICAgICAgICAgICAgICAgICAgICAgIC8vIG9wdGltaXphdGlvbiB0byBraWNr
IGluLCB3ZSBuZWVkIHRvIGF2b2lkIHBsYWNpbmcgdGhlIFRtcCdzIHN0YWNrCiAgICAgICAgICAg
ICAgICAgICAgICAgICAvLyBhZGRyZXNzIGludG8gdGhlIGluc3RydWN0aW9uLgotICAgICAgICAg
ICAgICAgICAgICAgICAgaWYgKCFBcmc6OmlzQ29sZFVzZShyb2xlKSkgewotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGNvbnN0IFVzZUNvdW50czxUbXA+OjpDb3VudHMqIGNvdW50cyA9IG1f
dXNlQ291bnRzW2FyZy50bXAoKV07Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNv
dW50cyAmJiBjb3VudHMtPm51bUNvbnN0RGVmcyA9PSAxICYmIGNvdW50cy0+bnVtRGVmcyA9PSAx
KQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIUFyZzo6aXNDb2xkVXNl
KHJvbGUpICYmIG1fdXNlQ291bnRzLmlzQ29uc3REZWY8YmFuaz4oQWJzb2x1dGVUbXBNYXBwZXI8
YmFuaz46OmFic29sdXRlSW5kZXgoYXJnLnRtcCgpKSkpCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuOwogICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAg
ICAgICAgICBXaWR0aCBzcGlsbFdpZHRoID0gbV90bXBXaWR0aC5yZXF1aXJlZFdpZHRoKGFyZy50
bXAoKSk7CiAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoQXJnOjppc0FueURlZihyb2xlKSAm
JiB3aWR0aCA8IHNwaWxsV2lkdGgpIHsKQEAgLTIxNjYsNyArMjI4Nyw3IEBAIHByaXZhdGU6CiAg
ICAgICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKGluc3RCYW5rID09IGJhbmspOwogICAg
ICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgVG1wIHRtcCA9IG1fY29kZS5u
ZXdUbXAoYmFuayk7Ci0gICAgICAgICAgICAgICAgICAgIHVuc3BpbGxhYmxlVG1wcy5hZGQoQWJz
b2x1dGVUbXBNYXBwZXI8YmFuaz46OmFic29sdXRlSW5kZXgodG1wKSk7CisgICAgICAgICAgICAg
ICAgICAgIHVuc3BpbGxhYmxlVG1wcy5zZXQoQWJzb2x1dGVUbXBNYXBwZXI8YmFuaz46OmFic29s
dXRlSW5kZXgodG1wKSk7CiAgICAgICAgICAgICAgICAgICAgIGluc3QuYXJncy5hcHBlbmQodG1w
KTsKICAgICAgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoaW5zdC5hcmdzLnNpemUoKSA9
PSAzKTsKICAgICAgICAgICAgICAgICAgICAgCkBAIC0yMjExLDcgKzIzMzIsNyBAQCBwcml2YXRl
OgogICAgICAgICAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgICAgICAgICAgdG1wID0gbV9j
b2RlLm5ld1RtcChiYW5rKTsKLSAgICAgICAgICAgICAgICAgICAgdW5zcGlsbGFibGVUbXBzLmFk
ZChBYnNvbHV0ZVRtcE1hcHBlcjxiYW5rPjo6YWJzb2x1dGVJbmRleCh0bXApKTsKKyAgICAgICAg
ICAgICAgICAgICAgdW5zcGlsbGFibGVUbXBzLnNldChBYnNvbHV0ZVRtcE1hcHBlcjxiYW5rPjo6
YWJzb2x1dGVJbmRleCh0bXApKTsKICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAg
ICAgICAgIGlmIChyb2xlID09IEFyZzo6U2NyYXRjaCkKICAgICAgICAgICAgICAgICAgICAgICAg
IHJldHVybjsKQEAgLTIyMzUsNyArMjM1Niw3IEBAIHByaXZhdGU6CiAKICAgICBDb2RlJiBtX2Nv
ZGU7CiAgICAgVG1wV2lkdGggbV90bXBXaWR0aDsKLSAgICBVc2VDb3VudHM8VG1wPiYgbV91c2VD
b3VudHM7CisgICAgVXNlQ291bnRzJiBtX3VzZUNvdW50czsKIH07CiAKIH0gLy8gYW5vbnltb3Vz
IG5hbWVzcGFjZQpAQCAtMjI0Nyw3ICsyMzY4LDcgQEAgdm9pZCBhbGxvY2F0ZVJlZ2lzdGVyc0J5
R3JhcGhDb2xvcmluZyhDb2RlJiBjb2RlKQogICAgIGlmICh0cmFjZURlYnVnKQogICAgICAgICBk
YXRhTG9nKCJDb2RlIGJlZm9yZSBncmFwaCBjb2xvcmluZzpcbiIsIGNvZGUpOwogCi0gICAgVXNl
Q291bnRzPFRtcD4gdXNlQ291bnRzKGNvZGUpOworICAgIFVzZUNvdW50cyB1c2VDb3VudHMoY29k
ZSk7CiAgICAgR3JhcGhDb2xvcmluZ1JlZ2lzdGVyQWxsb2NhdGlvbiBncmFwaENvbG9yaW5nUmVn
aXN0ZXJBbGxvY2F0aW9uKGNvZGUsIHVzZUNvdW50cyk7CiAgICAgZ3JhcGhDb2xvcmluZ1JlZ2lz
dGVyQWxsb2NhdGlvbi5ydW4oKTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy9haXIvQWlyQ29kZS5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJDb2Rl
LmgKaW5kZXggYzBiZDM1MjBkMGQzLi5kOGVlNDEyN2I1NzMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQ29kZS5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy9haXIvQWlyQ29kZS5oCkBAIC00MCw2ICs0MCw3IEBACiAjaW5jbHVkZSAiU3RhY2tBbGln
bm1lbnQuaCIKICNpbmNsdWRlIDx3dGYvSGFzaFNldC5oPgogI2luY2x1ZGUgPHd0Zi9JbmRleE1h
cC5oPgorI2luY2x1ZGUgPHd0Zi9TbWFsbFNldC5oPgogI2luY2x1ZGUgPHd0Zi9XZWFrUmFuZG9t
Lmg+CiAKIG5hbWVzcGFjZSBKU0MgewpAQCAtMzExLDcgKzMxMiwxMyBAQCBwdWJsaWM6CiAgICAg
fQogCiAgICAgdm9pZCBhZGRGYXN0VG1wKFRtcCk7Ci0gICAgYm9vbCBpc0Zhc3RUbXAoVG1wIHRt
cCkgY29uc3QgeyByZXR1cm4gbV9mYXN0VG1wcy5jb250YWlucyh0bXApOyB9CisKKyAgICB0ZW1w
bGF0ZTx0eXBlbmFtZSBGdW5jdG9yPgorICAgIHZvaWQgZm9yRWFjaEZhc3RUbXAoY29uc3QgRnVu
Y3RvciYgZnVuY3RvcikgY29uc3QKKyAgICB7CisgICAgICAgIGZvciAoVG1wIHRtcCA6IG1fZmFz
dFRtcHMpCisgICAgICAgICAgICBmdW5jdG9yKHRtcCk7CisgICAgfQogICAgIAogICAgIENGRyYg
Y2ZnKCkgY29uc3QgeyByZXR1cm4gKm1fY2ZnOyB9CiAgICAgCkBAIC0zNzksNyArMzg2LDcgQEAg
cHJpdmF0ZToKICAgICBWZWN0b3I8c3RkOjp1bmlxdWVfcHRyPEJhc2ljQmxvY2s+PiBtX2Jsb2Nr
czsKICAgICBTcGFyc2VDb2xsZWN0aW9uPFNwZWNpYWw+IG1fc3BlY2lhbHM7CiAgICAgc3RkOjp1
bmlxdWVfcHRyPENGRz4gbV9jZmc7Ci0gICAgSGFzaFNldDxUbXA+IG1fZmFzdFRtcHM7CisgICAg
U21hbGxTZXQ8VG1wLCBUbXBIYXNoLCAyPiBtX2Zhc3RUbXBzOwogICAgIENDYWxsU3BlY2lhbCog
bV9jQ2FsbFNwZWNpYWwgeyBudWxscHRyIH07CiAgICAgdW5zaWduZWQgbV9udW1HUFRtcHMgeyAw
IH07CiAgICAgdW5zaWduZWQgbV9udW1GUFRtcHMgeyAwIH07CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpclVzZUNvdW50cy5oIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2IzL2Fpci9BaXJVc2VDb3VudHMuaAppbmRleCA5MGEyNjhjZDU1MjkuLmUwNjYxNWM5ZTNk
MyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJVc2VDb3VudHMu
aAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpclVzZUNvdW50cy5oCkBAIC0x
LDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNS0yMDE3IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNS0yMDIxIEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAt
MzEsMzQgKzMxLDE4IEBACiAjaW5jbHVkZSAiQWlyQmxvY2tXb3JrbGlzdC5oIgogI2luY2x1ZGUg
IkFpckNvZGUuaCIKICNpbmNsdWRlICJBaXJJbnN0SW5saW5lcy5oIgotI2luY2x1ZGUgPHd0Zi9I
YXNoTWFwLmg+Ci0jaW5jbHVkZSA8d3RmL0xpc3REdW1wLmg+CisjaW5jbHVkZSAiQWlyVG1wSW5s
aW5lcy5oIgorI2luY2x1ZGUgPHd0Zi9Db21tYVByaW50ZXIuaD4KKyNpbmNsdWRlIDx3dGYvVmVj
dG9yLmg+CiAKIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeyBuYW1lc3BhY2UgQWlyIHsK
IAogY2xhc3MgQ29kZTsKIAotLy8gQ29tcHV0ZXMgdGhlIG51bWJlciBvZiB1c2VzIG9mIGEgdmFy
aWFibGUgYmFzZWQgb24gZnJlcXVlbmN5IG9mIGV4ZWN1dGlvbi4gVGhlIGZyZXF1ZW5jeSBvZiBi
bG9ja3MKKy8vIENvbXB1dGVzIHRoZSBudW1iZXIgb2YgdXNlcyBvZiBhIHRtcCBiYXNlZCBvbiBm
cmVxdWVuY3kgb2YgZXhlY3V0aW9uLiBUaGUgZnJlcXVlbmN5IG9mIGJsb2NrcwogLy8gdGhhdCBh
cmUgb25seSByZWFjaGFibGUgYnkgcmFyZSBlZGdlcyBpcyBzY2FsZWQgYnkgT3B0aW9uczo6cmFy
ZUJsb2NrUGVuYWx0eSgpLgotCi0vLyBUaGluZyBjYW4gYmUgZWl0aGVyIFRtcCBvciBBcmcuCi10
ZW1wbGF0ZTx0eXBlbmFtZSBUaGluZz4KIGNsYXNzIFVzZUNvdW50cyB7CiBwdWJsaWM6Ci0gICAg
c3RydWN0IENvdW50cyB7Ci0gICAgICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25z
dAotICAgICAgICB7Ci0gICAgICAgICAgICBvdXQucHJpbnQoCi0gICAgICAgICAgICAgICAgIntu
dW1XYXJtVXNlcyA9ICIsIG51bVdhcm1Vc2VzLCAiLCBudW1Db2xkVXNlcyA9ICIsIG51bUNvbGRV
c2VzLCAiLCBudW1EZWZzID0gIiwKLSAgICAgICAgICAgICAgICBudW1EZWZzLCAifSIpOwotICAg
ICAgICB9Ci0gICAgICAgIAotICAgICAgICBkb3VibGUgbnVtV2FybVVzZXMgeyAwIH07Ci0gICAg
ICAgIGRvdWJsZSBudW1Db2xkVXNlcyB7IDAgfTsKLSAgICAgICAgZG91YmxlIG51bURlZnMgeyAw
IH07Ci0gICAgICAgIGRvdWJsZSBudW1Db25zdERlZnMgeyAwIH07Ci0gICAgfTsKLSAgICAKICAg
ICBVc2VDb3VudHMoQ29kZSYgY29kZSkKICAgICB7CiAgICAgICAgIC8vIEZpbmQgbm9uLXJhcmUg
YmxvY2tzLgpAQCAtNzAsNDcgKzU0LDczIEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICAgICAg
ZmFzdFdvcmtsaXN0LnB1c2goc3VjY2Vzc29yLmJsb2NrKCkpOwogICAgICAgICAgICAgfQogICAg
ICAgICB9Ci0gICAgICAgIAorCisgICAgICAgIHVuc2lnbmVkIGdwQXJyYXlTaXplID0gQWJzb2x1
dGVUbXBNYXBwZXI8R1A+OjphYnNvbHV0ZUluZGV4KGNvZGUubnVtVG1wcyhHUCkpOworICAgICAg
ICBtX2dwTnVtV2FybVVzZXNBbmREZWZzLnJlc2l6ZShncEFycmF5U2l6ZSk7CisgICAgICAgIG1f
Z3BDb25zdERlZnMuZW5zdXJlU2l6ZShncEFycmF5U2l6ZSk7CisgICAgICAgIHVuc2lnbmVkIGZw
QXJyYXlTaXplID0gQWJzb2x1dGVUbXBNYXBwZXI8RlA+OjphYnNvbHV0ZUluZGV4KGNvZGUubnVt
VG1wcyhGUCkpOworICAgICAgICBtX2ZwTnVtV2FybVVzZXNBbmREZWZzLnJlc2l6ZShmcEFycmF5
U2l6ZSk7CisgICAgICAgIG1fZnBDb25zdERlZnMuZW5zdXJlU2l6ZShncEFycmF5U2l6ZSk7CisK
ICAgICAgICAgZm9yIChCYXNpY0Jsb2NrKiBibG9jayA6IGNvZGUpIHsKICAgICAgICAgICAgIGRv
dWJsZSBmcmVxdWVuY3kgPSBibG9jay0+ZnJlcXVlbmN5KCk7CiAgICAgICAgICAgICBpZiAoIWZh
c3RXb3JrbGlzdC5zYXcoYmxvY2spKQogICAgICAgICAgICAgICAgIGZyZXF1ZW5jeSAqPSBPcHRp
b25zOjpyYXJlQmxvY2tQZW5hbHR5KCk7CiAgICAgICAgICAgICBmb3IgKEluc3QmIGluc3QgOiAq
YmxvY2spIHsKLSAgICAgICAgICAgICAgICBpbnN0LmZvckVhY2g8VGhpbmc+KAotICAgICAgICAg
ICAgICAgICAgICBbJl0gKFRoaW5nJiBhcmcsIEFyZzo6Um9sZSByb2xlLCBCYW5rLCBXaWR0aCkg
ewotICAgICAgICAgICAgICAgICAgICAgICAgQ291bnRzJiBjb3VudHMgPSBtX2NvdW50cy5hZGQo
YXJnLCBDb3VudHMoKSkuaXRlcmF0b3ItPnZhbHVlOwotCi0gICAgICAgICAgICAgICAgICAgICAg
ICBpZiAoQXJnOjppc1dhcm1Vc2Uocm9sZSkpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
Y291bnRzLm51bVdhcm1Vc2VzICs9IGZyZXF1ZW5jeTsKLSAgICAgICAgICAgICAgICAgICAgICAg
IGlmIChBcmc6OmlzQ29sZFVzZShyb2xlKSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBj
b3VudHMubnVtQ29sZFVzZXMgKz0gZnJlcXVlbmN5OwotICAgICAgICAgICAgICAgICAgICAgICAg
aWYgKEFyZzo6aXNBbnlEZWYocm9sZSkpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgY291
bnRzLm51bURlZnMgKz0gZnJlcXVlbmN5OworICAgICAgICAgICAgICAgIGluc3QuZm9yRWFjaDxU
bXA+KAorICAgICAgICAgICAgICAgICAgICBbJl0gKFRtcCYgdG1wLCBBcmc6OlJvbGUgcm9sZSwg
QmFuayBiYW5rLCBXaWR0aCkgeworCisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoQXJnOjpp
c1dhcm1Vc2Uocm9sZSkgfHwgQXJnOjppc0FueURlZihyb2xlKSkgeworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGlmIChiYW5rID09IEdQKQorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBtX2dwTnVtV2FybVVzZXNBbmREZWZzW0Fic29sdXRlVG1wTWFwcGVyPEdQPjo6YWJzb2x1
dGVJbmRleCh0bXApXSArPSBmcmVxdWVuY3k7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX2ZwTnVtV2FybVVzZXNBbmRE
ZWZzW0Fic29sdXRlVG1wTWFwcGVyPEZQPjo6YWJzb2x1dGVJbmRleCh0bXApXSArPSBmcmVxdWVu
Y3k7CisgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIH0pOwog
CiAgICAgICAgICAgICAgICAgaWYgKChpbnN0LmtpbmQub3Bjb2RlID09IE1vdmUgfHwgaW5zdC5r
aW5kLm9wY29kZSA9PSBNb3ZlMzIpCiAgICAgICAgICAgICAgICAgICAgICYmIGluc3QuYXJnc1sw
XS5pc1NvbWVJbW0oKQotICAgICAgICAgICAgICAgICAgICAmJiBpbnN0LmFyZ3NbMV0uaXM8VGhp
bmc+KCkpCi0gICAgICAgICAgICAgICAgICAgIG1fY291bnRzLmFkZChpbnN0LmFyZ3NbMV0uYXM8
VGhpbmc+KCksIENvdW50cygpKS5pdGVyYXRvci0+dmFsdWUubnVtQ29uc3REZWZzKys7CisgICAg
ICAgICAgICAgICAgICAgICYmIGluc3QuYXJnc1sxXS5pczxUbXA+KCkpIHsKKyAgICAgICAgICAg
ICAgICAgICAgVG1wIHRtcCA9IGluc3QuYXJnc1sxXS5hczxUbXA+KCk7CisgICAgICAgICAgICAg
ICAgICAgIGlmICh0bXAuYmFuaygpID09IEdQKQorICAgICAgICAgICAgICAgICAgICAgICAgbV9n
cENvbnN0RGVmcy5xdWlja1NldChBYnNvbHV0ZVRtcE1hcHBlcjxHUD46OmFic29sdXRlSW5kZXgo
dG1wKSk7CisgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAg
IG1fZnBDb25zdERlZnMucXVpY2tTZXQoQWJzb2x1dGVUbXBNYXBwZXI8RlA+OjphYnNvbHV0ZUlu
ZGV4KHRtcCkpOworICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KICAgICAgICAgfQog
ICAgIH0KIAotICAgIGNvbnN0IENvdW50cyogb3BlcmF0b3JbXShjb25zdCBUaGluZyYgYXJnKSBj
b25zdAorICAgIHRlbXBsYXRlPEJhbmsgYmFuaz4KKyAgICBib29sIGlzQ29uc3REZWYodW5zaWdu
ZWQgYWJzb2x1dGVJbmRleCkgY29uc3QKKyAgICB7CisgICAgICAgIGlmIChiYW5rID09IEdQKQor
ICAgICAgICAgICAgcmV0dXJuIG1fZ3BDb25zdERlZnMucXVpY2tHZXQoYWJzb2x1dGVJbmRleCk7
CisgICAgICAgIHJldHVybiBtX2ZwQ29uc3REZWZzLnF1aWNrR2V0KGFic29sdXRlSW5kZXgpOwor
ICAgIH0KKworICAgIHRlbXBsYXRlPEJhbmsgYmFuaz4KKyAgICBmbG9hdCBudW1XYXJtVXNlc0Fu
ZERlZnModW5zaWduZWQgYWJzb2x1dGVJbmRleCkgY29uc3QKICAgICB7Ci0gICAgICAgIGF1dG8g
aXRlciA9IG1fY291bnRzLmZpbmQoYXJnKTsKLSAgICAgICAgaWYgKGl0ZXIgPT0gbV9jb3VudHMu
ZW5kKCkpCi0gICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICAgICAgcmV0dXJuICZpdGVy
LT52YWx1ZTsKKyAgICAgICAgaWYgKGJhbmsgPT0gR1ApCisgICAgICAgICAgICByZXR1cm4gbV9n
cE51bVdhcm1Vc2VzQW5kRGVmc1thYnNvbHV0ZUluZGV4XTsKKyAgICAgICAgcmV0dXJuIG1fZnBO
dW1XYXJtVXNlc0FuZERlZnNbYWJzb2x1dGVJbmRleF07CiAgICAgfQogCiAgICAgdm9pZCBkdW1w
KFByaW50U3RyZWFtJiBvdXQpIGNvbnN0CiAgICAgewotICAgICAgICBvdXQucHJpbnQobWFwRHVt
cChtX2NvdW50cykpOworICAgICAgICBDb21tYVByaW50ZXIgY29tbWEoIiwgIik7CisgICAgICAg
IGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX2dwTnVtV2FybVVzZXNBbmREZWZzLnNpemUoKTsg
KytpKQorICAgICAgICAgICAgb3V0LnByaW50KGNvbW1hLCBBYnNvbHV0ZVRtcE1hcHBlcjxHUD46
OnRtcEZyb21BYnNvbHV0ZUluZGV4KGkpLCAiPT4ge251bVdhcm1Vc2VzQW5kRGVmcz0iLCBtX2dw
TnVtV2FybVVzZXNBbmREZWZzW2ldLCAiLCBpc0NvbnN0RGVmPSIsIG1fZ3BDb25zdERlZnMucXVp
Y2tHZXQoaSksICJ9Iik7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX2ZwTnVt
V2FybVVzZXNBbmREZWZzLnNpemUoKTsgKytpKQorICAgICAgICAgICAgb3V0LnByaW50KGNvbW1h
LCBBYnNvbHV0ZVRtcE1hcHBlcjxGUD46OnRtcEZyb21BYnNvbHV0ZUluZGV4KGkpLCAiPT4ge251
bVdhcm1Vc2VzQW5kRGVmcz0iLCBtX2ZwTnVtV2FybVVzZXNBbmREZWZzW2ldLCAiLCBpc0NvbnN0
RGVmPSIsIG1fZnBDb25zdERlZnMucXVpY2tHZXQoaSksICJ9Iik7CiAgICAgfQogCiBwcml2YXRl
OgotICAgIEhhc2hNYXA8VGhpbmcsIENvdW50cz4gbV9jb3VudHM7CisgICAgVmVjdG9yPGZsb2F0
PiBtX2dwTnVtV2FybVVzZXNBbmREZWZzOworICAgIFZlY3RvcjxmbG9hdD4gbV9mcE51bVdhcm1V
c2VzQW5kRGVmczsKKyAgICBCaXRWZWN0b3IgbV9ncENvbnN0RGVmczsKKyAgICBCaXRWZWN0b3Ig
bV9mcENvbnN0RGVmczsKIH07CiAKIH0gfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzOjpBaXIKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvTm9kZXMuaCBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9wYXJzZXIvTm9kZXMuaAppbmRleCBlZDE3M2MxN2E1YmIuLjU2MTI5OWE2
YTcwZiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9Ob2Rlcy5oCisr
KyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvTm9kZXMuaApAQCAtMzYsNyArMzYsNyBA
QAogI2luY2x1ZGUgIlN5bWJvbFRhYmxlLmgiCiAjaW5jbHVkZSAiVmFyaWFibGVFbnZpcm9ubWVu
dC5oIgogI2luY2x1ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+Ci0jaW5jbHVkZSA8d3RmL1NtYWxsUHRy
U2V0Lmg+CisjaW5jbHVkZSA8d3RmL1NtYWxsU2V0Lmg+CiAKIG5hbWVzcGFjZSBKU0MgewogCkBA
IC01Myw3ICs1Myw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgIGNsYXNzIFJlZ2lzdGVySUQ7CiAg
ICAgY2xhc3MgU2NvcGVOb2RlOwogCi0gICAgdHlwZWRlZiBTbWFsbFB0clNldDxVbmlxdWVkU3Ry
aW5nSW1wbCo+IFVuaXF1ZWRTdHJpbmdJbXBsUHRyU2V0OworICAgIHR5cGVkZWYgU21hbGxTZXQ8
VW5pcXVlZFN0cmluZ0ltcGwqPiBVbmlxdWVkU3RyaW5nSW1wbFB0clNldDsKIAogICAgIGVudW0g
Y2xhc3MgT3BlcmF0b3IgOiB1aW50OF90IHsKICAgICAgICAgRXF1YWwsCmRpZmYgLS1naXQgYS9T
b3VyY2UvV1RGL0NoYW5nZUxvZyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCmluZGV4IGI5Mzk5ZmU3
NDIxZC4uNWFjNTkwMWY4MzlkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL0NoYW5nZUxvZworKysg
Yi9Tb3VyY2UvV1RGL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI0IEBACisyMDIxLTA1LTE3ICBSb2Jp
biBNb3Jpc3NldCAgPHJtb3Jpc3NldEBhcHBsZS5jb20+CisKKyAgICAgICAgTWFrZSBBaXJBbGxv
Y2F0ZVJlZ2lzdGVyc0J5R3JhcGhDb2xvcmluZyB1c2UgbGVzcyBtZW1vcnkKKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIyNTg0OAorCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWShPT1BTKS4KKworICAgICAgICBJIHJlbmFtZWQgU21hbGxQdHJTZXQg
aW50byBTbWFsbFNldCwgYXMgaXQgbm93IHN1cHBvcnRzIGludGVnZXJzIGFzIHdlbGwgYXMgcG9p
bnRlcnMuCisKKyAgICAgICAgSSB0aGVuIHJlZHVjZWQgaXRzIHNpemUgYnkgc2hhcmluZyB0aGUg
c2FtZSBzdG9yYWdlIGZvciBtX2J1ZmZlciBhbmQgZm9yIG1fc21hbGxTdG9yYWdlLgorICAgICAg
ICBUaGlzIGlzIHNhZmUgdG8gZG8sIGJlY2F1c2UgYWxsIG9wZXJhdGlvbnMgYnJhbmNoIG9uIGlz
U21hbGwoKSB3aGljaCBkZXBlbmRzIHB1cmVseSBvbiBtX2NhcGFjaXR5LgorCisgICAgICAgIEkg
YWxzbyBhZGRlZCB0cml2aWFsIHNpemUoKSBhbmQgaXNFbXB0eSgpIG1ldGhvZHMsIHRvIG1ha2Ug
ZGVidWdnaW5nIGVhc2llci4KKworICAgICAgICBGaW5hbGx5IEkgYWRkZWQgYSBjb21tZW50IGF0
IHRoZSB0b3Agb2YgdGhlIGZpbGUgZXhwbGFpbmluZyB3aGVuIHRvIHVzZSwgYW5kIChtb3JlIGlt
cG9ydGFudGx5KSBub3QgdG8gdXNlIFNtYWxsU2V0LgorCisgICAgICAgICogV1RGLnhjb2RlcHJv
ai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogd3RmL0NNYWtlTGlzdHMudHh0OgorICAgICAg
ICAqIHd0Zi9TbWFsbFNldC5jcHA6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV1RGL3d0Zi9TbWFsbFB0
clNldC5jcHAuCisgICAgICAgICogd3RmL1NtYWxsU2V0Lmg6IFJlbmFtZWQgZnJvbSBTb3VyY2Uv
V1RGL3d0Zi9TbWFsbFB0clNldC5oLgorCiAyMDIxLTA1LTE2ICBDaHJpcyBEdW1leiAgPGNkdW1l
ekBhcHBsZS5jb20+CiAKICAgICAgICAgTW9kZXJuaXplIC8gT3B0aW1pemUgU1FMaXRlU3RhdGVt
ZW50IGNyZWF0aW9uIGFuZCBwcmVwYXJhdGlvbgpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi9XVEYu
eGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1NvdXJjZS9XVEYvV1RGLnhjb2RlcHJvai9wcm9q
ZWN0LnBieHByb2oKaW5kZXggYjExZTA5OGNlNDc3Li5hZmY1MzIxYjQ3ZjMgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XVEYvV1RGLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvU291cmNlL1dU
Ri9XVEYueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAtNDIsNyArNDIsNyBAQAogCQkwRjlE
MzM2MDE2NURCQTczMDA1QUQzODcgLyogRmlsZVByaW50U3RyZWFtLmNwcCBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGOUQzMzVCMTY1REJBNzMwMDVBRDM4
NyAvKiBGaWxlUHJpbnRTdHJlYW0uY3BwICovOyB9OwogCQkwRjlEMzM2MjE2NURCQTczMDA1QUQz
ODcgLyogUHJpbnRTdHJlYW0uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMEY5RDMzNUQxNjVEQkE3MzAwNUFEMzg3IC8qIFByaW50U3RyZWFtLmNwcCAq
LzsgfTsKIAkJMEZBNkYzOEYyMENDNTgwRjAwQTAzRENEIC8qIFNlZ21lbnRlZFZlY3Rvci5jcHAg
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkE2RjM4RTIw
Q0M1ODBFMDBBMDNEQ0QgLyogU2VnbWVudGVkVmVjdG9yLmNwcCAqLzsgfTsKLQkJMEZBNkYzOTMy
MENDNzNBMzAwQTAzRENEIC8qIFNtYWxsUHRyU2V0LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGQTZGMzkyMjBDQzczQTIwMEEwM0RDRCAvKiBTbWFs
bFB0clNldC5jcHAgKi87IH07CisJCTBGQTZGMzkzMjBDQzczQTMwMEEwM0RDRCAvKiBTbWFsbFNl
dC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkE2
RjM5MjIwQ0M3M0EyMDBBMDNEQ0QgLyogU21hbGxTZXQuY3BwICovOyB9OwogCQkwRkE2RjM5NTIw
Q0NBQ0U5MDBBMDNEQ0QgLyogVW5pcXVlQXJyYXkuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZBNkYzOTQyMENDQUNFOTAwQTAzRENEIC8qIFVuaXF1
ZUFycmF5LmNwcCAqLzsgfTsKIAkJMEZEREJGQTcxNjY2REZBMzAwQzU1RkVGIC8qIFN0cmluZ1By
aW50U3RyZWFtLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDBGRERCRkE1MTY2NkRGQTMwMEM1NUZFRiAvKiBTdHJpbmdQcmludFN0cmVhbS5jcHAgKi87
IH07CiAJCTBGRTE2NDZBMUI2RkZDOTYwMDQwMEU3QyAvKiBMb2NrLmNwcCBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRTE2NDY4MUI2RkZDOTYwMDQwMEU3
QyAvKiBMb2NrLmNwcCAqLzsgfTsKQEAgLTI3Miw3ICsyNzIsNyBAQAogCQkwRjlEQUEwNTFGRDFD
MzdCMDA3OUM1QjIgLyogU3RhY2tTaG90UHJvZmlsZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gU3RhY2tTaG90UHJvZmlsZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJMEZBNkYzOEUyMENDNTgwRTAwQTAzRENEIC8qIFNlZ21lbnRlZFZlY3Rvci5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTZWdtZW50ZWRWZWN0b3IuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRkE2RjM5MDIwQ0M2MUVCMDBBMDNEQ0QgLyog
UmVmQ291bnRlZEFycmF5LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9
IFJlZkNvdW50ZWRBcnJheS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTBGQTZG
MzkyMjBDQzczQTIwMEEwM0RDRCAvKiBTbWFsbFB0clNldC5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IHBhdGggPSBTbWFsbFB0clNldC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCTBGQTZGMzkyMjBDQzczQTIwMEEwM0RDRCAvKiBTbWFsbFNldC5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTbWFsbFNldC5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTBGQTZGMzk0MjBDQ0FDRTkwMEEwM0RDRCAvKiBVbmlxdWVBcnJh
eS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBVbmlxdWVBcnJheS5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGQjE0RTE4MTgwRkEyMTgwMDlCNkI0
RCAvKiBCYWcuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQmFnLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGQjE0RTFBMTgxMEUxREEwMDlCNkI0RCAvKiBCYWdU
b0hhc2hNYXAuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQmFnVG9IYXNoTWFwLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CkBAIC00NDIsNyArNDQyLDcgQEAKIAkJNzBFQ0E2MEIxQjAyNDI2ODAwNDQ5
NzM5IC8qIFN5bWJvbEltcGwuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU3lt
Ym9sSW1wbC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3MEVDQTYwQzFCMDI0MjY4
MDA0NDk3MzkgLyogVW5pcXVlZFN0cmluZ0ltcGwuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gVW5pcXVlZFN0cmluZ0ltcGwuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJNzkwMzhFMDUyMjRCMDVBNzAwNEMwNzM4IC8qIFNwYW5uaW5nVHJlZS5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBTcGFubmluZ1RyZWUuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKLQkJNzkzNkQ2QTkxQzk5RjhBRTAwMEQxQUVEIC8qIFNtYWxsUHRyU2V0LmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNtYWxsUHRyU2V0Lmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCTc5MzZENkE5MUM5OUY4QUUwMDBEMUFFRCAvKiBTbWFsbFNldC5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTbWFsbFNldC5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQk3OTNCRkFERDlDRUQ0NEI4QjlGQkNBMTYgLyogU3RkVW5vcmRl
cmVkTWFwLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFN0ZFVub3JkZXJlZE1h
cC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3OTUyMTIwMjFGNDI1ODg4MDBCRDY0
MjEgLyogU2luZ2xlUm9vdEdyYXBoLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IFNpbmdsZVJvb3RHcmFwaC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3QTA1MDkz
RDFGQjlEQ0M1MDBCMzNGQjggLyogSlNPTlZhbHVlcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBKU09OVmFsdWVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0x
MjQ0LDggKzEyNDQsOCBAQAogCQkJCUE3NDg3NDRGMTdBMEJEQUUwMEZBMDRDQiAvKiBTaXhDaGFy
YWN0ZXJIYXNoLmNwcCAqLywKIAkJCQlBNzQ4NzQ1MDE3QTBCREFFMDBGQTA0Q0IgLyogU2l4Q2hh
cmFjdGVySGFzaC5oICovLAogCQkJCUE4QTQ3MzBDMTUxQTgyNUIwMDQxMjNGRiAvKiBTaXplTGlt
aXRzLmNwcCAqLywKLQkJCQkwRkE2RjM5MjIwQ0M3M0EyMDBBMDNEQ0QgLyogU21hbGxQdHJTZXQu
Y3BwICovLAotCQkJCTc5MzZENkE5MUM5OUY4QUUwMDBEMUFFRCAvKiBTbWFsbFB0clNldC5oICov
LAorCQkJCTBGQTZGMzkyMjBDQzczQTIwMEEwM0RDRCAvKiBTbWFsbFNldC5jcHAgKi8sCisJCQkJ
NzkzNkQ2QTkxQzk5RjhBRTAwMEQxQUVEIC8qIFNtYWxsU2V0LmggKi8sCiAJCQkJQTMwRDQxMkQx
RjBERTEzRjAwQjcxOTU0IC8qIFNvZnRMaW5raW5nLmggKi8sCiAJCQkJOTMxNTZDOEQyNjJDOTgy
MjAwRUFFMjdCIC8qIFNvcnRlZEFycmF5TWFwLmggKi8sCiAJCQkJNzkwMzhFMDUyMjRCMDVBNzAw
NEMwNzM4IC8qIFNwYW5uaW5nVHJlZS5oICovLApAQCAtMTc2MCw3ICsxNzYwLDcgQEAKIAkJCQk1
MzExQkQ1MzFFQTcxQ0FEMDA1MjUyODEgLyogU2lnbmFscy5jcHAgaW4gU291cmNlcyAqLywKIAkJ
CQlBNzQ4NzQ1MjE3QTBCREFFMDBGQTA0Q0IgLyogU2l4Q2hhcmFjdGVySGFzaC5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQlBOEE0NzQyNTE1MUE4MjVCMDA0MTIzRkYgLyogU2l6ZUxpbWl0cy5jcHAg
aW4gU291cmNlcyAqLywKLQkJCQkwRkE2RjM5MzIwQ0M3M0EzMDBBMDNEQ0QgLyogU21hbGxQdHJT
ZXQuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEZBNkYzOTMyMENDNzNBMzAwQTAzRENEIC8qIFNt
YWxsU2V0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE4QTQ3NDI3MTUxQTgyNUIwMDQxMjNGRiAv
KiBTdGFja0JvdW5kcy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlGRUVBNERGOTIxNkQ3QkU0MDBB
QzA2MDIgLyogU3RhY2tQb2ludGVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUZFREFDRDNEMTYz
MEY4M0YwMEM2OTYzNCAvKiBTdGFja1N0YXRzLmNwcCBpbiBTb3VyY2VzICovLApkaWZmIC0tZ2l0
IGEvU291cmNlL1dURi93dGYvQ01ha2VMaXN0cy50eHQgYi9Tb3VyY2UvV1RGL3d0Zi9DTWFrZUxp
c3RzLnR4dAppbmRleCBlN2RiYzRmMDJmYTAuLjgwMThmYWJhNDZjNyAxMDA2NDQKLS0tIGEvU291
cmNlL1dURi93dGYvQ01ha2VMaXN0cy50eHQKKysrIGIvU291cmNlL1dURi93dGYvQ01ha2VMaXN0
cy50eHQKQEAgLTIzNSw3ICsyMzUsNyBAQCBzZXQoV1RGX1BVQkxJQ19IRUFERVJTCiAgICAgU2lu
Z2x5TGlua2VkTGlzdC5oCiAgICAgU2luZ2x5TGlua2VkTGlzdFdpdGhUYWlsLmgKICAgICBTaXhD
aGFyYWN0ZXJIYXNoLmgKLSAgICBTbWFsbFB0clNldC5oCisgICAgU21hbGxTZXQuaAogICAgIFNv
ZnRMaW5raW5nLmgKICAgICBTb3J0ZWRBcnJheU1hcC5oCiAgICAgU3Bhbm5pbmdUcmVlLmgKQEAg
LTQ0Myw3ICs0NDMsNyBAQCBzZXQoV1RGX1NPVVJDRVMKICAgICBTZWNvbmRzLmNwcAogICAgIFNl
Z21lbnRlZFZlY3Rvci5jcHAKICAgICBTaXhDaGFyYWN0ZXJIYXNoLmNwcAotICAgIFNtYWxsUHRy
U2V0LmNwcAorICAgIFNtYWxsU2V0LmNwcAogICAgIFN0YWNrQm91bmRzLmNwcAogICAgIFN0YWNr
UG9pbnRlci5jcHAKICAgICBTdGFja1N0YXRzLmNwcApkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93
dGYvU21hbGxQdHJTZXQuY3BwIGIvU291cmNlL1dURi93dGYvU21hbGxTZXQuY3BwCnNpbWlsYXJp
dHkgaW5kZXggOTQlCnJlbmFtZSBmcm9tIFNvdXJjZS9XVEYvd3RmL1NtYWxsUHRyU2V0LmNwcApy
ZW5hbWUgdG8gU291cmNlL1dURi93dGYvU21hbGxTZXQuY3BwCmluZGV4IDQyMDQ4ZTdlOGEyMy4u
MmQyZjQxNWIyYzdhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi9TbWFsbFB0clNldC5jcHAK
KysrIGIvU291cmNlL1dURi93dGYvU21hbGxTZXQuY3BwCkBAIC0yNCwxMiArMjQsMTIgQEAKICAq
LwogCiAjaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSA8d3RmL1NtYWxsUHRyU2V0Lmg+Cisj
aW5jbHVkZSA8d3RmL1NtYWxsU2V0Lmg+CiAKICNpbmNsdWRlIDx3dGYvTmV2ZXJEZXN0cm95ZWQu
aD4KIAogbmFtZXNwYWNlIFdURiB7CiAKLURFRklORV9BTExPQ0FUT1JfV0lUSF9IRUFQX0lERU5U
SUZJRVIoU21hbGxQdHJTZXQpOworREVGSU5FX0FMTE9DQVRPUl9XSVRIX0hFQVBfSURFTlRJRklF
UihTbWFsbFNldCk7CiAKIH0gLy8gbmFtZXNwYWNlIFdURgpkaWZmIC0tZ2l0IGEvU291cmNlL1dU
Ri93dGYvU21hbGxQdHJTZXQuaCBiL1NvdXJjZS9XVEYvd3RmL1NtYWxsU2V0LmgKc2ltaWxhcml0
eSBpbmRleCA1MCUKcmVuYW1lIGZyb20gU291cmNlL1dURi93dGYvU21hbGxQdHJTZXQuaApyZW5h
bWUgdG8gU291cmNlL1dURi93dGYvU21hbGxTZXQuaAppbmRleCA0YzZlNDYxOTZkMjkuLjI0NzQx
ZjEyYzM1ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYvU21hbGxQdHJTZXQuaAorKysgYi9T
b3VyY2UvV1RGL3d0Zi9TbWFsbFNldC5oCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAxNiBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTYtMjAyMSBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgKgogICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTMyLDY1ICszMiw3NyBAQAogCiBuYW1lc3BhY2UgV1RG
IHsKIAotREVDTEFSRV9BTExPQ0FUT1JfV0lUSF9IRUFQX0lERU5USUZJRVIoU21hbGxQdHJTZXQp
OworREVDTEFSRV9BTExPQ0FUT1JfV0lUSF9IRUFQX0lERU5USUZJRVIoU21hbGxTZXQpOwogCi10
ZW1wbGF0ZTx0eXBlbmFtZSBQdHJUeXBlLCB1bnNpZ25lZCBTbWFsbEFycmF5U2l6ZSA9IDg+Ci1j
bGFzcyBTbWFsbFB0clNldCB7CisvLyBGdW5jdGlvbmFsbHksIHRoaXMgY2xhc3MgaXMgdmVyeSBz
aW1pbGFyIHRvIFZhcmlhbnQ8VmVjdG9yPFQsIFNtYWxsQXJyYXlTaXplPiwgSGFzaFNldDxUPj4K
Ky8vIEl0IGlzIG9wdGltaXplZCBwcmltYXJpbHkgZm9yIHNwYWNlLCBidXQgaXMgYWxzbyBxdWl0
ZSBmYXN0CisvLyBJdHMgbWFpbiBsaW1pdGF0aW9uIGlzIHRoYXQgaXQgaGFzIG5vIHdheSB0byBy
ZW1vdmUgZWxlbWVudHMgb25jZSB0aGV5IGhhdmUgYmVlbiBhZGRlZCB0byBpdAorLy8gQWxzbywg
aW5zdGVhZCBvZiBiZWluZyBmdWxseSBwYXJhbWV0ZXJpemVkIGJ5IGEgSGFzaFRyYWl0IHBhcmFt
ZXRlciwgaXQgYWx3YXlzIHVzZXMgLTEgKGFsbCBvbmVzKSBhcyBpdHMgZW1wdHkgdmFsdWUKKy8v
IFJlbGF0ZWRseSwgaXQgY2FuIG9ubHkgc3RvcmUgb2JqZWN0cyBvZiB1cCB0byA2NCBiaXQgc2l6
ZSAoYnV0IHRoYXQgcGFydGljdWxhciBsaW1pdGF0aW9uIHNob3VsZCBiZSBmYWlybHkgZWFzeSB0
byBsaWZ0IGlmIG5lZWRlZCkKKy8vIFVzZSBpdCB3aGVuZXZlciB5b3UgbmVlZCB0byBzdG9yZSBh
biB1bmJvdW5kZWQgYnV0IHByb2JhYmx5IHNtYWxsIG51bWJlciBvZiB1bnNpZ25lZCBpbnRlZ2Vy
cyBvciBwb2ludGVycy4KK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIEhhc2ggPSBQdHJI
YXNoQmFzZTxULCBmYWxzZSAvKiBpc1NtYXJ0UHRyICovPiwgdW5zaWduZWQgU21hbGxBcnJheVNp
emUgPSA4PgorY2xhc3MgU21hbGxTZXQgewogICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwot
ICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKFNtYWxsUHRyU2V0KTsKLSAgICBzdGF0aWNfYXNzZXJ0
KHN0ZDo6aXNfdHJpdmlhbGx5X2Rlc3RydWN0aWJsZTxQdHJUeXBlPjo6dmFsdWUsICJXZSBjdXJy
ZW50bHkgZG9uJ3Qgc3VwcG9ydCBub24tdHJpdmlhbGx5IGRlc3RydWN0aWJsZSBwb2ludGVyIHR5
cGVzLiIpOwotICAgIHN0YXRpY19hc3NlcnQoc2l6ZW9mKFB0clR5cGUpID09IHNpemVvZih2b2lk
KiksICJPbmx5IHN1cHBvcnQgcG9pbnRlciBzaXplZCB0aGluZ3MuIik7CisgICAgV1RGX01BS0Vf
Tk9OQ09QWUFCTEUoU21hbGxTZXQpOworICAgIHN0YXRpY19hc3NlcnQoc3RkOjppc190cml2aWFs
bHlfZGVzdHJ1Y3RpYmxlPFQ+Ojp2YWx1ZSwgIldlIGN1cnJlbnRseSBkb24ndCBzdXBwb3J0IG5v
bi10cml2aWFsbHkgZGVzdHJ1Y3RpYmxlIHR5cGVzLiIpOwogICAgIHN0YXRpY19hc3NlcnQoIShT
bWFsbEFycmF5U2l6ZSAmIChTbWFsbEFycmF5U2l6ZSAtIDEpKSwgIklubGluZSBzaXplIG11c3Qg
YmUgYSBwb3dlciBvZiB0d28uIik7CisgICAgc3RhdGljX2Fzc2VydChzaXplb2YoVCopIDw9IFNt
YWxsQXJyYXlTaXplICogc2l6ZW9mKFQpLCAiVGhpcyBjbGFzcyBoYXMgbm90IGJlZW4gdGVzdGVk
IGZvciBtX2lubGluZS5idWZmZXIgbGFyZ2VyIHRoYW4gbV9pbmxpbmUuc21hbGxTdG9yYWdlIik7
CiAKLXB1YmxpYzogCi0gICAgU21hbGxQdHJTZXQoKQorcHVibGljOgorICAgIFNtYWxsU2V0KCkK
KyAgICAgICAgOiBtX2lubGluZSgpCiAgICAgewogICAgICAgICBpbml0aWFsaXplKCk7CiAgICAg
fQogCi0gICAgLy8gV2UgdGFrZSBjYXJlIHRvIGhhdmUgU21hbGxQdHJTZXQgaGF2ZSBwYXJ0aWFs
IG1vdmUgc2VtYW50aWNzIGFsbG93YWJsZSB0aHJvdWdoCisgICAgLy8gV2UgdGFrZSBjYXJlIHRv
IGhhdmUgU21hbGxTZXQgaGF2ZSBwYXJ0aWFsIG1vdmUgc2VtYW50aWNzIGFsbG93YWJsZSB0aHJv
dWdoCiAgICAgLy8gbWVtY3B5LiBJdCdzIHBhcnRpYWwgbW92ZSBzZW1hbnRpY3MgYmVjYXVzZSBv
dXIgZGVzdHJ1Y3RvciBzaG91bGQgbm90IGJlIGNhbGxlZAogICAgIC8vIG9uIHRoZSBTbWFsbFB0
ck9iamVjdCBpbiB0aGUgb2xkIG1lbW9yeSB3ZSB3ZXJlIG1vdmVkIGZyb20gKG90aGVyd2lzZSwg
d2UgbWlnaHQgZnJlZSBtX2J1ZmZlciB0d2ljZSkKICAgICAvLyB1bmxlc3MgdGhhdCBvbGQgbWVt
b3J5IGlzIHJlc2V0IHRvIGJlIGlzU21hbGwoKS4gU2VlIG1vdmUgY29uc3RydWN0b3IgYmVsb3cu
CiAgICAgLy8gVG8gbWFpbnRhaW4gdGhlc2Ugc2VtYW50aWNzLCB3ZSBkZXRlcm1pbmUgaWYgd2Un
cmUgc21hbGwgYnkgY2hlY2tpbmcgb3VyIHNpemUKICAgICAvLyBhbmQgbm90IG91ciBtX2J1ZmZl
ciBwb2ludGVyLiBBbmQgd2hlbiB3ZSdyZSBzbWFsbCwgd2UgZG9uJ3QgZG8gb3BlcmF0aW9ucyBv
bgogICAgIC8vIG1fYnVmZmVyLCBpbnN0ZWFkLCB3ZSBwZXJmb3JtIG9wZXJhdGlvbnMgb24gbV9z
bWFsbFN0b3JhZ2UgZGlyZWN0bHkuIFRoZSByZWFzb24gd2Ugd2FudAotICAgIC8vIHRoZXNlIHNl
bWFudGljcyBpcyB0aGF0IGl0J3MgYmVuZWZpY2lhbCB0byBoYXZlIGEgVmVjdG9yIHRoYXQgY29u
dGFpbnMgU21hbGxQdHJTZXQKLSAgICAvLyAob3IgYW4gb2JqZWN0IHdpdGggU21hbGxQdHJTZXQg
YXMgYSBmaWVsZCkgYmUgYWxsb3dlZCB0byB1c2UgbWVtY3B5IGZvciBpdHMgbW92ZSBvcGVyYXRp
b24uCisgICAgLy8gdGhlc2Ugc2VtYW50aWNzIGlzIHRoYXQgaXQncyBiZW5lZmljaWFsIHRvIGhh
dmUgYSBWZWN0b3IgdGhhdCBjb250YWlucyBTbWFsbFNldAorICAgIC8vIChvciBhbiBvYmplY3Qg
d2l0aCBTbWFsbFNldCBhcyBhIGZpZWxkKSBiZSBhbGxvd2VkIHRvIHVzZSBtZW1jcHkgZm9yIGl0
cyBtb3ZlIG9wZXJhdGlvbi4KIAotICAgIFNtYWxsUHRyU2V0KFNtYWxsUHRyU2V0JiYgb3RoZXIp
CisgICAgU21hbGxTZXQoU21hbGxTZXQmJiBvdGhlcikKICAgICB7Ci0gICAgICAgIG1lbWNweSh0
aGlzLCAmb3RoZXIsIHNpemVvZihTbWFsbFB0clNldCkpOworICAgICAgICBtZW1jcHkodGhpcywg
Jm90aGVyLCBzaXplb2YoU21hbGxTZXQpKTsKICAgICAgICAgb3RoZXIuaW5pdGlhbGl6ZSgpOwog
ICAgIH0KIAotICAgIFNtYWxsUHRyU2V0JiBvcGVyYXRvcj0oU21hbGxQdHJTZXQmJiBvdGhlcikK
KyAgICBTbWFsbFNldCYgb3BlcmF0b3I9KFNtYWxsU2V0JiYgb3RoZXIpCiAgICAgewotICAgICAg
ICB0aGlzLT5+U21hbGxQdHJTZXQoKTsKLSAgICAgICAgbmV3ICh0aGlzKSBTbWFsbFB0clNldChX
VEZNb3ZlKG90aGVyKSk7CisgICAgICAgIHRoaXMtPn5TbWFsbFNldCgpOworICAgICAgICBuZXcg
KHRoaXMpIFNtYWxsU2V0KFdURk1vdmUob3RoZXIpKTsKICAgICAgICAgcmV0dXJuICp0aGlzOwog
ICAgIH0KIAotICAgIH5TbWFsbFB0clNldCgpCisgICAgflNtYWxsU2V0KCkKICAgICB7CiAgICAg
ICAgIGlmICghaXNTbWFsbCgpKQotICAgICAgICAgICAgU21hbGxQdHJTZXRNYWxsb2M6OmZyZWUo
bV9idWZmZXIpOworICAgICAgICAgICAgU21hbGxTZXRNYWxsb2M6OmZyZWUobV9pbmxpbmUuYnVm
ZmVyKTsKICAgICB9CiAKLSAgICBpbmxpbmUgdm9pZCBhZGQoUHRyVHlwZSBwdHIpCisgICAgLy8g
V2UgY291bGQgZWFzaWx5IGluY2x1ZGUgYW4gaXRlcmF0b3IgaW4gdGhpcyB0byBmdWxseSBtYXRj
aCB0aGUgSGFzaFNldCBpbnRlcmZhY2UsIGJ1dCBjdXJyZW50bHkgbm9uZSBvZiBvdXIgY2xpZW50
cyByZXF1aXJlIGl0LgorICAgIHN0cnVjdCBBZGRSZXN1bHQgeworICAgICAgICBib29sIGlzTmV3
RW50cnk7CisgICAgfTsKKworICAgIGlubGluZSBBZGRSZXN1bHQgYWRkKFQgdmFsdWUpCiAgICAg
ewotICAgICAgICBBU1NFUlQoaXNWYWxpZEVudHJ5KHB0cikpOworICAgICAgICBBU1NFUlQoaXNW
YWxpZEVudHJ5KHZhbHVlKSk7CiAKICAgICAgICAgaWYgKGlzU21hbGwoKSkgewogICAgICAgICAg
ICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fc2l6ZTsgaSsrKSB7Ci0gICAgICAgICAgICAg
ICAgaWYgKG1fc21hbGxTdG9yYWdlW2ldID09IHB0cikKLSAgICAgICAgICAgICAgICAgICAgcmV0
dXJuOworICAgICAgICAgICAgICAgIGlmIChtX2lubGluZS5zbWFsbFN0b3JhZ2VbaV0gPT0gdmFs
dWUpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiB7IGZhbHNlIH07CiAgICAgICAgICAgICB9
CiAKICAgICAgICAgICAgIGlmIChtX3NpemUgPCBTbWFsbEFycmF5U2l6ZSkgewotICAgICAgICAg
ICAgICAgIG1fc21hbGxTdG9yYWdlW21fc2l6ZV0gPSBwdHI7CisgICAgICAgICAgICAgICAgbV9p
bmxpbmUuc21hbGxTdG9yYWdlW21fc2l6ZV0gPSB2YWx1ZTsKICAgICAgICAgICAgICAgICArK21f
c2l6ZTsKLSAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgcmV0dXJuIHsg
dHJ1ZSB9OwogICAgICAgICAgICAgfQogCiAgICAgICAgICAgICBncm93KHN0ZDo6bWF4KDY0dSwg
U21hbGxBcnJheVNpemUgKiAyKSk7CkBAIC0xMDMsMjYgKzExNSwyOSBAQCBwdWJsaWM6CiAgICAg
ICAgICAgICBBU1NFUlQoIShtX2NhcGFjaXR5ICYgKG1fY2FwYWNpdHkgLSAxKSkpOwogICAgICAg
ICB9CiAKLSAgICAgICAgdm9pZCoqIGJ1Y2tldCA9IHRoaXMtPmJ1Y2tldChwdHIpOwotICAgICAg
ICBpZiAoKmJ1Y2tldCAhPSBwdHIpIHsKLSAgICAgICAgICAgICpidWNrZXQgPSBwdHI7CisgICAg
ICAgIFQqIGJ1Y2tldCA9IHRoaXMtPmJ1Y2tldCh2YWx1ZSk7CisgICAgICAgIGlmICgqYnVja2V0
ICE9IHZhbHVlKSB7CisgICAgICAgICAgICAqYnVja2V0ID0gdmFsdWU7CiAgICAgICAgICAgICAr
K21fc2l6ZTsKKyAgICAgICAgICAgIHJldHVybiB7IHRydWUgfTsKICAgICAgICAgfQorICAgICAg
ICByZXR1cm4geyBmYWxzZSB9OwogICAgIH0KIAotICAgIGlubGluZSBib29sIGNvbnRhaW5zKFB0
clR5cGUgcHRyKSBjb25zdAorICAgIGlubGluZSBib29sIGNvbnRhaW5zKFQgdmFsdWUpIGNvbnN0
CiAgICAgewotICAgICAgICBBU1NFUlQoaXNWYWxpZEVudHJ5KHB0cikpOworICAgICAgICBBU1NF
UlQoaXNWYWxpZEVudHJ5KHZhbHVlKSk7CiAgICAgICAgIGlmIChpc1NtYWxsKCkpIHsKLSAgICAg
ICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX3NpemU7IGkrKykgeyAvLyBXZSBvbmx5
IG5lZWQgdG8gc2VhcmNoIHVwIHRvIG1fc2l6ZSBiZWNhdXNlIHdlIHN0b3JlIHRoaW5ncyBsaW5l
YXJseSBpbnNpZGUgbV9zbWFsbFN0b3JhZ2UuCi0gICAgICAgICAgICAgICAgaWYgKG1fc21hbGxT
dG9yYWdlW2ldID09IHB0cikKKyAgICAgICAgICAgIC8vIFdlIG9ubHkgbmVlZCB0byBzZWFyY2gg
dXAgdG8gbV9zaXplIGJlY2F1c2Ugd2Ugc3RvcmUgdGhpbmdzIGxpbmVhcmx5IGluc2lkZSBtX3Nt
YWxsU3RvcmFnZS4KKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX3NpemU7
IGkrKykgeworICAgICAgICAgICAgICAgIGlmIChtX2lubGluZS5zbWFsbFN0b3JhZ2VbaV0gPT0g
dmFsdWUpCiAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICAgICAgfQog
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9CiAKLSAgICAgICAgdm9pZCoqIGJ1
Y2tldCA9IHRoaXMtPmJ1Y2tldChwdHIpOwotICAgICAgICByZXR1cm4gKmJ1Y2tldCA9PSBwdHI7
CisgICAgICAgIFQqIGJ1Y2tldCA9IHRoaXMtPmJ1Y2tldCh2YWx1ZSk7CisgICAgICAgIHJldHVy
biAqYnVja2V0ID09IHZhbHVlOwogICAgIH0KIAogICAgIGNsYXNzIGl0ZXJhdG9yIHsKQEAgLTEz
NywxNSArMTUyLDE1IEBAIHB1YmxpYzoKICAgICAgICAgICAgIHJldHVybiAqdGhpczsKICAgICAg
ICAgfQogICAgICAgICAKLSAgICAgICAgUHRyVHlwZSBvcGVyYXRvciooKSBjb25zdCB7IEFTU0VS
VChtX2luZGV4IDwgbV9jYXBhY2l0eSk7IHJldHVybiBzdGF0aWNfY2FzdDxQdHJUeXBlPihtX2J1
ZmZlclttX2luZGV4XSk7IH0KKyAgICAgICAgVCBvcGVyYXRvciooKSBjb25zdCB7IEFTU0VSVCht
X2luZGV4IDwgbV9jYXBhY2l0eSk7IHJldHVybiBzdGF0aWNfY2FzdDxUPihtX2J1ZmZlclttX2lu
ZGV4XSk7IH0KICAgICAgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IGl0ZXJhdG9yJiBvdGhlcikg
Y29uc3QgeyBBU1NFUlQobV9idWZmZXIgPT0gb3RoZXIubV9idWZmZXIpOyByZXR1cm4gbV9pbmRl
eCA9PSBvdGhlci5tX2luZGV4OyB9CiAgICAgICAgIGJvb2wgb3BlcmF0b3IhPShjb25zdCBpdGVy
YXRvciYgb3RoZXIpIGNvbnN0IHsgQVNTRVJUKG1fYnVmZmVyID09IG90aGVyLm1fYnVmZmVyKTsg
cmV0dXJuICEoKnRoaXMgPT0gb3RoZXIpOyB9CiAKICAgICBwcml2YXRlOgotICAgICAgICB0ZW1w
bGF0ZTx0eXBlbmFtZSBVLCB1bnNpZ25lZCBTPiBmcmllbmQgY2xhc3MgV1RGOjpTbWFsbFB0clNl
dDsKKyAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVSwgdHlwZW5hbWUgSCwgdW5zaWduZWQgUz4g
ZnJpZW5kIGNsYXNzIFdURjo6U21hbGxTZXQ7CiAgICAgICAgIHVuc2lnbmVkIG1faW5kZXg7CiAg
ICAgICAgIHVuc2lnbmVkIG1fY2FwYWNpdHk7Ci0gICAgICAgIHZvaWQqKiBtX2J1ZmZlcjsKKyAg
ICAgICAgVCogbV9idWZmZXI7CiAgICAgfTsKIAogICAgIGl0ZXJhdG9yIGJlZ2luKCkgY29uc3QK
QEAgLTE1NCw5ICsxNjksOSBAQCBwdWJsaWM6CiAgICAgICAgIGl0Lm1faW5kZXggPSBzdGQ6Om51
bWVyaWNfbGltaXRzPHVuc2lnbmVkPjo6bWF4KCk7CiAgICAgICAgIGl0Lm1fY2FwYWNpdHkgPSBt
X2NhcGFjaXR5OwogICAgICAgICBpZiAoaXNTbWFsbCgpKQotICAgICAgICAgICAgaXQubV9idWZm
ZXIgPSBjb25zdF9jYXN0PHZvaWQqKj4obV9zbWFsbFN0b3JhZ2UpOworICAgICAgICAgICAgaXQu
bV9idWZmZXIgPSBjb25zdF9jYXN0PFQqPihtX2lubGluZS5zbWFsbFN0b3JhZ2UpOwogICAgICAg
ICBlbHNlCi0gICAgICAgICAgICBpdC5tX2J1ZmZlciA9IG1fYnVmZmVyOworICAgICAgICAgICAg
aXQubV9idWZmZXIgPSBtX2lubGluZS5idWZmZXI7CiAKICAgICAgICAgKytpdDsKIApAQCAtMTY5
LDI0ICsxODQsMjggQEAgcHVibGljOgogICAgICAgICBpdC5tX2luZGV4ID0gbV9jYXBhY2l0eTsK
ICAgICAgICAgaXQubV9jYXBhY2l0eSA9IG1fY2FwYWNpdHk7CiAgICAgICAgIGlmIChpc1NtYWxs
KCkpCi0gICAgICAgICAgICBpdC5tX2J1ZmZlciA9IGNvbnN0X2Nhc3Q8dm9pZCoqPihtX3NtYWxs
U3RvcmFnZSk7CisgICAgICAgICAgICBpdC5tX2J1ZmZlciA9IGNvbnN0X2Nhc3Q8VCo+KG1faW5s
aW5lLnNtYWxsU3RvcmFnZSk7CiAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIGl0Lm1fYnVmZmVy
ID0gbV9idWZmZXI7CisgICAgICAgICAgICBpdC5tX2J1ZmZlciA9IG1faW5saW5lLmJ1ZmZlcjsK
IAogICAgICAgICByZXR1cm4gaXQ7CiAgICAgfQogCiAgICAgaW5saW5lIHVuc2lnbmVkIHNpemUo
KSBjb25zdCB7IHJldHVybiBtX3NpemU7IH0KIAorICAgIGlubGluZSBib29sIGlzRW1wdHkoKSBj
b25zdCB7IHJldHVybiAhc2l6ZSgpOyB9CisKIHByaXZhdGU6Ci0gICAgY29uc3RleHByIHN0YXRp
YyB2b2lkKiBlbXB0eVZhbHVlKCkKKyAgICBjb25zdGV4cHIgc3RhdGljIFQgZW1wdHlWYWx1ZSgp
CiAgICAgewotICAgICAgICByZXR1cm4gYml0d2lzZV9jYXN0PHZvaWQqPihzdGQ6Om51bWVyaWNf
bGltaXRzPHVpbnRwdHJfdD46Om1heCgpKTsKKyAgICAgICAgaWYgY29uc3RleHByIChzdGQ6Omlz
X3BvaW50ZXI8VD46OnZhbHVlKQorICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PFQ+KGJp
dHdpc2VfY2FzdDx2b2lkKj4oc3RkOjpudW1lcmljX2xpbWl0czx1aW50cHRyX3Q+OjptYXgoKSkp
OworICAgICAgICByZXR1cm4gc3RkOjpudW1lcmljX2xpbWl0czxUPjo6bWF4KCk7CiAgICAgfQog
Ci0gICAgYm9vbCBpc1ZhbGlkRW50cnkoY29uc3QgUHRyVHlwZSBwdHIpIGNvbnN0CisgICAgYm9v
bCBpc1ZhbGlkRW50cnkoY29uc3QgVCB2YWx1ZSkgY29uc3QKICAgICB7Ci0gICAgICAgIHJldHVy
biBwdHIgIT0gZW1wdHlWYWx1ZSgpOworICAgICAgICByZXR1cm4gdmFsdWUgIT0gZW1wdHlWYWx1
ZSgpOwogICAgIH0KIAogICAgIGlubGluZSBib29sIGlzU21hbGwoKSBjb25zdApAQCAtMTk3LDQz
ICsyMTYsNjQgQEAgcHJpdmF0ZToKICAgICBpbmxpbmUgdm9pZCBpbml0aWFsaXplKCkKICAgICB7
CiAgICAgICAgIG1fc2l6ZSA9IDA7Ci0gICAgICAgIG1fYnVmZmVyID0gbnVsbHB0cjsKICAgICAg
ICAgbV9jYXBhY2l0eSA9IFNtYWxsQXJyYXlTaXplOwotICAgICAgICBtZW1zZXQobV9zbWFsbFN0
b3JhZ2UsIC0xLCBzaXplb2Yodm9pZCopICogU21hbGxBcnJheVNpemUpOworICAgICAgICBtZW1z
ZXQobV9pbmxpbmUuc21hbGxTdG9yYWdlLCAtMSwgc2l6ZW9mKFQpICogU21hbGxBcnJheVNpemUp
OwogICAgICAgICBBU1NFUlQoaXNTbWFsbCgpKTsKICAgICB9CiAKICAgICBpbmxpbmUgdm9pZCBn
cm93KHVuc2lnbmVkIHNpemUpCiAgICAgewotICAgICAgICBBU1NFUlQoc3RhdGljX2Nhc3Q8aW50
MzJfdD4oYml0d2lzZV9jYXN0PGludHB0cl90PihlbXB0eVZhbHVlKCkpKSA9PSAtMSk7CisgICAg
ICAgIC8vIFdlIG1lbXNldCB0aGUgbmV3IGJ1ZmZlciB3aXRoIC0xLCBzbyBmb3IgY29uc2lzdGVu
Y3kgZW1wdHlWYWx1ZSgpIG11c3QgcmV0dXJuIHNvbWV0aGluZyB3aGljaCBpcyBhbGwgMXMuCisj
aWYgIWRlZmluZWQoTkRFQlVHKQorICAgICAgICBpZiBjb25zdGV4cHIgKHN0ZDo6aXNfcG9pbnRl
cjxUPjo6dmFsdWUpCisgICAgICAgICAgICBBU1NFUlQoYml0d2lzZV9jYXN0PGludHB0cl90Pihl
bXB0eVZhbHVlKCkpID09IC0xbGwpOworICAgICAgICBlbHNlIGlmIGNvbnN0ZXhwciAoc2l6ZW9m
KFQpID09IDgpCisgICAgICAgICAgICBBU1NFUlQoYml0d2lzZV9jYXN0PGludDY0X3Q+KGVtcHR5
VmFsdWUoKSkgPT0gLTFsbCk7CisgICAgICAgIGVsc2UgaWYgY29uc3RleHByIChzaXplb2YoVCkg
PT0gNCkKKyAgICAgICAgICAgIEFTU0VSVChiaXR3aXNlX2Nhc3Q8aW50MzJfdD4oZW1wdHlWYWx1
ZSgpKSA9PSAtMSk7CisgICAgICAgIGVsc2UgaWYgY29uc3RleHByIChzaXplb2YoVCkgPT0gMikK
KyAgICAgICAgICAgIEFTU0VSVChiaXR3aXNlX2Nhc3Q8aW50MTZfdD4oZW1wdHlWYWx1ZSgpKSA9
PSAtMSk7CisgICAgICAgIGVsc2UgaWYgY29uc3RleHByIChzaXplb2YoVCkgPT0gMSkKKyAgICAg
ICAgICAgIEFTU0VSVChiaXR3aXNlX2Nhc3Q8aW50OF90PihlbXB0eVZhbHVlKCkpID09IC0xKTsK
KyAgICAgICAgZWxzZQorICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsK
KyNlbmRpZgogCi0gICAgICAgIHNpemVfdCBhbGxvY2F0aW9uU2l6ZSA9IHNpemVvZih2b2lkKikg
KiBzaXplOworICAgICAgICBzaXplX3QgYWxsb2NhdGlvblNpemUgPSBzaXplb2YoVCkgKiBzaXpl
OwogICAgICAgICBib29sIHdhc1NtYWxsID0gaXNTbWFsbCgpOwotICAgICAgICB2b2lkKiogb2xk
QnVmZmVyID0gd2FzU21hbGwgPyBtX3NtYWxsU3RvcmFnZSA6IG1fYnVmZmVyOworICAgICAgICBU
KiBvbGRCdWZmZXIgPSB3YXNTbWFsbCA/IG1faW5saW5lLnNtYWxsU3RvcmFnZSA6IG1faW5saW5l
LmJ1ZmZlcjsKICAgICAgICAgdW5zaWduZWQgb2xkQ2FwYWNpdHkgPSBtX2NhcGFjaXR5OwotICAg
ICAgICBtX2J1ZmZlciA9IHN0YXRpY19jYXN0PHZvaWQqKj4oU21hbGxQdHJTZXRNYWxsb2M6Om1h
bGxvYyhhbGxvY2F0aW9uU2l6ZSkpOwotICAgICAgICBtZW1zZXQobV9idWZmZXIsIC0xLCBhbGxv
Y2F0aW9uU2l6ZSk7CisgICAgICAgIFQqIG5ld0J1ZmZlciA9IHN0YXRpY19jYXN0PFQqPihTbWFs
bFNldE1hbGxvYzo6bWFsbG9jKGFsbG9jYXRpb25TaXplKSk7CisgICAgICAgIG1lbXNldChuZXdC
dWZmZXIsIC0xLCBhbGxvY2F0aW9uU2l6ZSk7CiAgICAgICAgIG1fY2FwYWNpdHkgPSBzaXplOwog
CiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBvbGRDYXBhY2l0eTsgaSsrKSB7CiAg
ICAgICAgICAgICBpZiAob2xkQnVmZmVyW2ldICE9IGVtcHR5VmFsdWUoKSkgewotICAgICAgICAg
ICAgICAgIHZvaWQqKiBwdHIgPSB0aGlzLT5idWNrZXQoc3RhdGljX2Nhc3Q8UHRyVHlwZT4ob2xk
QnVmZmVyW2ldKSk7CisgICAgICAgICAgICAgICAgVCogcHRyID0gYnVja2V0SW5CdWZmZXIobmV3
QnVmZmVyLCBzdGF0aWNfY2FzdDxUPihvbGRCdWZmZXJbaV0pKTsKICAgICAgICAgICAgICAgICAq
cHRyID0gb2xkQnVmZmVyW2ldOwogICAgICAgICAgICAgfQogICAgICAgICB9CiAKICAgICAgICAg
aWYgKCF3YXNTbWFsbCkKLSAgICAgICAgICAgIFNtYWxsUHRyU2V0TWFsbG9jOjpmcmVlKG9sZEJ1
ZmZlcik7CisgICAgICAgICAgICBTbWFsbFNldE1hbGxvYzo6ZnJlZShvbGRCdWZmZXIpOworCisg
ICAgICAgIG1faW5saW5lLmJ1ZmZlciA9IG5ld0J1ZmZlcjsKICAgICB9CiAKIAotICAgIGlubGlu
ZSB2b2lkKiogYnVja2V0KFB0clR5cGUgdGFyZ2V0KSBjb25zdAorICAgIGlubGluZSBUKiBidWNr
ZXQoVCB0YXJnZXQpIGNvbnN0CisgICAgeworICAgICAgICBBU1NFUlQoIWlzU21hbGwoKSk7Cisg
ICAgICAgIHJldHVybiBidWNrZXRJbkJ1ZmZlcihtX2lubGluZS5idWZmZXIsIHRhcmdldCk7Cisg
ICAgfQorCisgICAgaW5saW5lIFQqIGJ1Y2tldEluQnVmZmVyKFQqIGJ1ZmZlciwgVCB0YXJnZXQp
IGNvbnN0CiAgICAgewogICAgICAgICBBU1NFUlQoIShtX2NhcGFjaXR5ICYgKG1fY2FwYWNpdHkg
LSAxKSkpOwotICAgICAgICB1bnNpZ25lZCBidWNrZXQgPSBQdHJIYXNoQmFzZTxQdHJUeXBlLCBm
YWxzZSAvKiBpc1NtYXJ0UHRyICovPjo6aGFzaCh0YXJnZXQpICYgKG1fY2FwYWNpdHkgLSAxKTsK
KyAgICAgICAgdW5zaWduZWQgYnVja2V0ID0gSGFzaDo6aGFzaCh0YXJnZXQpICYgKG1fY2FwYWNp
dHkgLSAxKTsKICAgICAgICAgdW5zaWduZWQgaW5kZXggPSAwOwogICAgICAgICB3aGlsZSAodHJ1
ZSkgewotICAgICAgICAgICAgdm9pZCoqIHB0ciA9IG1fYnVmZmVyICsgYnVja2V0OworICAgICAg
ICAgICAgVCogcHRyID0gYnVmZmVyICsgYnVja2V0OwogICAgICAgICAgICAgaWYgKCpwdHIgPT0g
ZW1wdHlWYWx1ZSgpKQogICAgICAgICAgICAgICAgIHJldHVybiBwdHI7CiAgICAgICAgICAgICBp
ZiAoKnB0ciA9PSB0YXJnZXQpCkBAIC0yNDUsMTAgKzI4NSwxMyBAQCBwcml2YXRlOgogCiAgICAg
dW5zaWduZWQgbV9zaXplOwogICAgIHVuc2lnbmVkIG1fY2FwYWNpdHk7Ci0gICAgdm9pZCoqIG1f
YnVmZmVyOwotICAgIHZvaWQqIG1fc21hbGxTdG9yYWdlW1NtYWxsQXJyYXlTaXplXTsKKyAgICB1
bmlvbiBVIHsKKyAgICAgICAgVCogYnVmZmVyOworICAgICAgICBUIHNtYWxsU3RvcmFnZVtTbWFs
bEFycmF5U2l6ZV07CisgICAgICAgIFUoKSB7IH07CisgICAgfSBtX2lubGluZTsKIH07CiAKIH0g
Ly8gbmFtZXNwYWNlIFdURgogCi11c2luZyBXVEY6OlNtYWxsUHRyU2V0OwordXNpbmcgV1RGOjpT
bWFsbFNldDsKZGlmZiAtLWdpdCBhL1Rvb2xzL0NoYW5nZUxvZyBiL1Rvb2xzL0NoYW5nZUxvZwpp
bmRleCAyNTBiMzI5MGJiM2QuLjE2YmU0ZDBiMGRmMiAxMDA2NDQKLS0tIGEvVG9vbHMvQ2hhbmdl
TG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE5IEBACisyMDIxLTA1LTE3ICBS
b2JpbiBNb3Jpc3NldCAgPHJtb3Jpc3NldEBhcHBsZS5jb20+CisKKyAgICAgICAgTWFrZSBBaXJB
bGxvY2F0ZVJlZ2lzdGVyc0J5R3JhcGhDb2xvcmluZyB1c2UgbGVzcyBtZW1vcnkKKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIyNTg0OAorCisgICAgICAg
IFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUykuCisKKyAgICAgICAgd3RmL1NtYWxsUHRyU2V0IChu
b3cgU21hbGxTZXQpIHdhcyBjb21wbGV0ZWx5IHVudGVzdGVkLCBzbyBJIGp1c3QgYWRkZWQgYSBm
ZXcgc2ltcGxlIHRlc3RzLgorCisgICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0V2ViS2l0QVBJ
Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0
cy9XVEYvU21hbGxTZXQuY3BwOiBBZGRlZC4KKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OnRlc3RT
bWFsbFNldE9mVW5zaWduZWQpOgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6dGVzdFNtYWxsU2V0
T2ZQb2ludGVycyk6CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjp0ZXN0VmVjdG9yc09mU21hbGxT
ZXRzT2ZVbnNpZ25lZCk6CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpURVNUKToKKwogMjAyMS0w
NS0xNSAgSmVyIE5vYmxlICA8amVyLm5vYmxlQGFwcGxlLmNvbT4KIAogICAgICAgICBNZWRpYVNl
c3Npb25Db29yZGluYXRvciBzdXJ2aXZlcyBwYWdlIHJlbG9hZC9uYXZpZ2F0aW9uCmRpZmYgLS1n
aXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RXZWJLaXRBUEkueGNvZGVwcm9qL3Byb2plY3Qu
cGJ4cHJvaiBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdFdlYktpdEFQSS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCmluZGV4IDY0NmY4NDIwN2EwZS4uMmI1Y2Q2ZTJmYjNlIDEwMDY0NAotLS0g
YS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RXZWJLaXRBUEkueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvagorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RXZWJLaXRBUEkueGNvZGVwcm9qL3By
b2plY3QucGJ4cHJvagpAQCAtMjA4LDYgKzIwOCw3IEBACiAJCTMxRTlCREEzMjQ3RjU3MjkwMDJF
NTFBMiAvKiB3ZWJnbC5odG1sIGluIENvcHkgUmVzb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDMxRTlCREEyMjQ3RjRERDAwMDJFNTFBMiAvKiB3ZWJnbC5odG1sICov
OyB9OwogCQkzMzk3NkQ4MzI0REM0NzlCMDA4MTIzMDQgLyogSW5kZXhTcGFyc2VTZXQuY3BwIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMzM5NzZEODIyNERD
NDc5QjAwODEyMzA0IC8qIEluZGV4U3BhcnNlU2V0LmNwcCAqLzsgfTsKIAkJMzNCRTVBRjkxMzdC
NUFBRTAwNzA1ODEzIC8qIE1vdXNlTW92ZUFmdGVyQ3Jhc2hfQnVuZGxlLmNwcCBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDMzQkU1QUY4MTM3QjVBQUUwMDcw
NTgxMyAvKiBNb3VzZU1vdmVBZnRlckNyYXNoX0J1bmRsZS5jcHAgKi87IH07CisJCTMzQzJDOUMx
MjY1MUY1QjkwMEU0MDdGNiAvKiBTbWFsbFNldC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzM0MyQzlDMDI2NTFGNUI5MDBFNDA3RjYgLyogU21hbGxT
ZXQuY3BwICovOyB9OwogCQkzM0RDODkxMjE0MTk1NUZFMDA3NDdFRjcgLyogc2ltcGxlLWlmcmFt
ZS5odG1sIGluIENvcHkgUmVzb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDMzREM4OTBFMTQxOTUzOTMwMDc0N0VGNyAvKiBzaW1wbGUtaWZyYW1lLmh0bWwgKi87IH07
CiAJCTMzREM4OTE0MTQxOTU3OUYwMDc0N0VGNyAvKiBMb2FkQ2FuY2VsZWROb1NlcnZlclJlZGly
ZWN0Q2FsbGJhY2tfQnVuZGxlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDMzREM4OTEzMTQxOTU3OUYwMDc0N0VGNyAvKiBMb2FkQ2FuY2VsZWROb1Nl
cnZlclJlZGlyZWN0Q2FsbGJhY2tfQnVuZGxlLmNwcCAqLzsgfTsKIAkJMzNFNzlFMDYxMzdCNUZE
OTAwRTMyRDk5IC8qIG1vdXNlLW1vdmUtbGlzdGVuZXIuaHRtbCBpbiBDb3B5IFJlc291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzM0U3OUUwNTEzN0I1RkNFMDBFMzJE
OTkgLyogbW91c2UtbW92ZS1saXN0ZW5lci5odG1sICovOyB9OwpAQCAtMTk5Miw2ICsxOTkzLDcg
QEAKIAkJMzM5NzZEODIyNERDNDc5QjAwODEyMzA0IC8qIEluZGV4U3BhcnNlU2V0LmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEluZGV4U3BhcnNlU2V0LmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMzNCRTVBRjQxMzdCNUE2QzAwNzA1ODEzIC8qIE1v
dXNlTW92ZUFmdGVyQ3Jhc2guY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRo
ID0gTW91c2VNb3ZlQWZ0ZXJDcmFzaC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTMzQkU1QUY4MTM3QjVBQUUwMDcwNTgxMyAvKiBNb3VzZU1vdmVBZnRlckNyYXNoX0J1bmRsZS5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBNb3VzZU1vdmVBZnRlckNy
YXNoX0J1bmRsZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTMzQzJDOUMwMjY1
MUY1QjkwMEU0MDdGNiAvKiBTbWFsbFNldC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTbWFsbFNl
dC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTMzREM4OTBFMTQxOTUzOTMwMDc0
N0VGNyAvKiBzaW1wbGUtaWZyYW1lLmh0bWwgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0Lmh0bWw7IHBhdGggPSAi
c2ltcGxlLWlmcmFtZS5odG1sIjsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMzNEQzg5
MTAxNDE5NTNBMzAwNzQ3RUY3IC8qIExvYWRDYW5jZWxlZE5vU2VydmVyUmVkaXJlY3RDYWxsYmFj
ay5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBMb2FkQ2FuY2VsZWRO
b1NlcnZlclJlZGlyZWN0Q2FsbGJhY2suY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQkzM0RDODkxMzE0MTk1NzlGMDA3NDdFRjcgLyogTG9hZENhbmNlbGVkTm9TZXJ2ZXJSZWRpcmVj
dENhbGxiYWNrX0J1bmRsZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGgg
PSBMb2FkQ2FuY2VsZWROb1NlcnZlclJlZGlyZWN0Q2FsbGJhY2tfQnVuZGxlLmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTQ0MjAsNiArNDQyMiw3IEBACiAJCQkJOTMzRDYzMUIx
RkNCNzYxODAwMzJFQ0Q2IC8qIEhhc2hlci5jcHAgKi8sCiAJCQkJMEJDRDgzMzQxNDg1N0NFNDAw
RUEyMDAzIC8qIEhhc2hNYXAuY3BwICovLAogCQkJCTI2QjJERkY4MTVCREU1OTkwMDRGNjkxRCAv
KiBIYXNoU2V0LmNwcCAqLywKKwkJCQkzM0MyQzlDMDI2NTFGNUI5MDBFNDA3RjYgLyogU21hbGxT
ZXQuY3BwICovLAogCQkJCTdDOEJGRjcwMjNDMDEwNjcwMEMwMDlCMyAvKiBIZXhOdW1iZXIuY3Bw
ICovLAogCQkJCTMzOTc2RDgyMjREQzQ3OUIwMDgxMjMwNCAvKiBJbmRleFNwYXJzZVNldC5jcHAg
Ki8sCiAJCQkJMjY2RkFGRDIxNUU1Nzc1MjAwRjYxRDVCIC8qIEludGVnZXJUb1N0cmluZ0NvbnZl
cnNpb24uY3BwICovLApAQCAtNTE1NSw2ICs1MTU4LDcgQEAKIAkJCWZpbGVzID0gKAogCQkJCTdD
ODNERTk5MUQwQTU5MEMwMEZFQkNGMyAvKiBBdG9tU3RyaW5nLmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCUZFMkQ5NDc0MjQ1RUIyRjQwMEU0ODEzNSAvKiBCaXRtYXAuY3BwIGluIFNvdXJjZXMgKi8s
CisJCQkJMzNDMkM5QzEyNjUxRjVCOTAwRTQwN0Y2IC8qIFNtYWxsU2V0LmNwcCBpbiBTb3VyY2Vz
ICovLAogCQkJCTFBREFEMTUwMUQ3N0E5RjYwMDIxMjU4NiAvKiBCbG9ja1B0ci5tbSBpbiBTb3Vy
Y2VzICovLAogCQkJCTdDODNERTlDMUQwQTU5MEMwMEZFQkNGMyAvKiBCbG9vbUZpbHRlci5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQk3QzgzREYxODFEMEE1OTBDMDBGRUJDRjMgLyogQm94UHRyLmNw
cCBpbiBTb3VyY2VzICovLApkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9X
VEYvU21hbGxTZXQuY3BwIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XVEYvU21hbGxTZXQu
Y3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMC4uM2MzZWNjOWNmN2Fi
Ci0tLSAvZGV2L251bGwKKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XVEYvU21hbGxT
ZXQuY3BwCkBAIC0wLDAgKzEsMTUzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycn
CisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwor
ICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICog
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5o
IgorCisjaW5jbHVkZSAiVGVzdC5oIgorI2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+CisjaW5jbHVk
ZSA8d3RmL1NtYWxsU2V0Lmg+CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorCituYW1lc3BhY2Ug
VGVzdFdlYktpdEFQSSB7CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+Cit2b2lkIHRlc3RTbWFsbFNl
dE9mVW5zaWduZWQodW5zaWduZWQgbikKK3sKKyAgICBTbWFsbFNldDxULCBJbnRIYXNoPFQ+PiBz
ZXQ7CisKKyAgICBFWFBFQ1RfVFJVRShzZXQuaXNFbXB0eSgpKTsKKyAgICBFWFBFQ1RfRVEoc2V0
LnNpemUoKSwgMHUpOworCisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG47ICsraSkgewor
ICAgICAgICBhdXRvIHJlc3VsdCA9IHNldC5hZGQoaSk7CisgICAgICAgIEVYUEVDVF9UUlVFKHJl
c3VsdC5pc05ld0VudHJ5KTsKKyAgICB9CisKKyAgICBFWFBFQ1RfRkFMU0Uoc2V0LmlzRW1wdHko
KSk7CisgICAgRVhQRUNUX0VRKHNldC5zaXplKCksIG4pOworCisgICAgZm9yICh1bnNpZ25lZCBp
ID0gMDsgaSA8IDIgKiBuOyBpICs9IDIpIHsKKyAgICAgICAgYXV0byByZXN1bHQgPSBzZXQuYWRk
KGkpOworICAgICAgICBpZiAoaSA8IG4pCisgICAgICAgICAgICBFWFBFQ1RfRkFMU0UocmVzdWx0
LmlzTmV3RW50cnkpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBFWFBFQ1RfVFJVRShyZXN1
bHQuaXNOZXdFbnRyeSk7CisgICAgfQorCisgICAgRVhQRUNUX0VRKHNldC5zaXplKCksIG4gKyBu
IC8gMik7CisKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgMiAqIG47ICsraSkgeworICAg
ICAgICBpZiAoaSA8IG4gfHwgIShpICUgMikpCisgICAgICAgICAgICBFWFBFQ1RfVFJVRShzZXQu
Y29udGFpbnMoaSkpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBFWFBFQ1RfRkFMU0Uoc2V0
LmNvbnRhaW5zKGkpKTsKKyAgICB9CisKKyAgICB1bnNpZ25lZCBjb3VudCA9IDA7CisgICAgSGFz
aFNldDxUPiByZWZlcmVuY2VTZXQ7CisgICAgZm9yICh1bnNpZ25lZCBpIDogc2V0KSB7CisgICAg
ICAgIHJlZmVyZW5jZVNldC5hZGQoaSk7CisgICAgICAgICsrY291bnQ7CisgICAgfQorICAgIEVY
UEVDVF9FUShjb3VudCwgbiArIG4gLyAyKTsKKyAgICBFWFBFQ1RfRVEoY291bnQsIHJlZmVyZW5j
ZVNldC5zaXplKCkpOworfQorCit2b2lkIHRlc3RTbWFsbFNldE9mUG9pbnRlcnMoKQoreworICAg
IFNtYWxsU2V0PGludCo+IHNldDsKKworICAgIGNvbnN0ZXhwciB1bnNpZ25lZCBhcnJheVNpemUg
PSAyMDA7CisgICAgaW50IGFycmF5W2FycmF5U2l6ZV07CisgICAgZm9yICh1bnNpZ25lZCBpID0g
MDsgaSA8IGFycmF5U2l6ZTsgKytpKQorICAgICAgICBhcnJheVtpXSA9IGk7CisKKyAgICBmb3Ig
KHVuc2lnbmVkIGkgPSAwOyBpIDwgYXJyYXlTaXplOyArK2kpIHsKKyAgICAgICAgaW50KiBwdHIg
PSAmKGFycmF5W2ldKTsKKyAgICAgICAgRVhQRUNUX0ZBTFNFKHNldC5jb250YWlucyhwdHIpKTsK
KyAgICAgICAgYXV0byByZXN1bHQgPSBzZXQuYWRkKHB0cik7CisgICAgICAgIEVYUEVDVF9UUlVF
KHJlc3VsdC5pc05ld0VudHJ5KTsKKyAgICAgICAgRVhQRUNUX1RSVUUoc2V0LmNvbnRhaW5zKHB0
cikpOworICAgICAgICByZXN1bHQgPSBzZXQuYWRkKHB0cik7CisgICAgICAgIEVYUEVDVF9GQUxT
RShyZXN1bHQuaXNOZXdFbnRyeSk7CisgICAgfQorCisgICAgZm9yIChpbnQqIHB0ciA6IHNldCkK
KyAgICAgICAgKysoKnB0cik7CisKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgYXJyYXlT
aXplOyArK2kpCisgICAgICAgIEVYUEVDVF9FUShhcnJheVtpXSwgc3RhdGljX2Nhc3Q8aW50Pihp
KzEpKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVD4KK3ZvaWQgdGVzdFZlY3RvcnNPZlNtYWxs
U2V0c09mVW5zaWduZWQoKQoreworICAgIFZlY3RvcjxTbWFsbFNldDxULCBJbnRIYXNoPFQ+Piwg
Mj4gdmVjdG9yOworICAgIHZlY3Rvci5hcHBlbmQoeyB9KTsKKyAgICB2ZWN0b3IuYXBwZW5kKHsg
fSk7CisKKyAgICB2ZWN0b3JbMF0uYWRkKDEwMCk7CisgICAgdmVjdG9yWzBdLmFkZCgyMDApOwor
ICAgIHZlY3RvclswXS5hZGQoMzAwKTsKKworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCAy
MDA7ICsraSkKKyAgICAgICAgdmVjdG9yWzFdLmFkZChpKTsKKworICAgIC8vIE5vdyB3ZSBjYXVz
ZSB0aGUgdmVjdG9yIHRvIGNvcHkgaXRzIGNvbnRlbnRzIHRvIGEgbGFyZ2VyIGJ1ZmZlci4KKyAg
ICAvLyBUaGlzIHNob3VsZCBjb3JydXB0IG5laXRoZXIgdGhlIHNtYWxsIHNldCB0aGF0IHVzZXMg
aW5saW5lIHN0b3JhZ2UgKHZlY3RvclswXSksIG5vciB0aGUgb25lIHRoYXQgdXNlcyBhbiBvdXQt
b2YtbGluZSBidWZmZXIgKHZlY3RvclsxXSkuCisgICAgdmVjdG9yLnJlc2l6ZSgzMDApOworCisg
ICAgRVhQRUNUX0VRKHZlY3RvclswXS5zaXplKCksIDN1KTsKKyAgICBFWFBFQ1RfVFJVRSh2ZWN0
b3JbMF0uY29udGFpbnMoMTAwKSk7CisgICAgRVhQRUNUX1RSVUUodmVjdG9yWzBdLmNvbnRhaW5z
KDIwMCkpOworICAgIEVYUEVDVF9UUlVFKHZlY3RvclswXS5jb250YWlucygzMDApKTsKKyAgICBF
WFBFQ1RfRkFMU0UodmVjdG9yWzBdLmNvbnRhaW5zKDQyKSk7CisKKyAgICBFWFBFQ1RfRVEodmVj
dG9yWzFdLnNpemUoKSwgMTAwKTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgMjAwOyAr
K2kpCisgICAgICAgIEVYUEVDVF9UUlVFKHZlY3RvclsxXS5jb250YWlucyhpKSk7CisgICAgRVhQ
RUNUX0ZBTFNFKHZlY3RvclsxXS5jb250YWlucygzMDApKTsKK30KKworVEVTVChXVEZfU21hbGxT
ZXQsIFRocmVlVWludDgpIHsgdGVzdFNtYWxsU2V0T2ZVbnNpZ25lZDx1aW50OF90PigzKTsgfQor
VEVTVChXVEZfU21hbGxTZXQsIEZvdXJVaW50OCkgeyB0ZXN0U21hbGxTZXRPZlVuc2lnbmVkPHVp
bnQ4X3Q+KDQpOyB9CitURVNUKFdURl9TbWFsbFNldCwgSHVuZHJlZFVpbnQ4KSB7IHRlc3RTbWFs
bFNldE9mVW5zaWduZWQ8dWludDhfdD4oMTAwKTsgfQorVEVTVChXVEZfU21hbGxTZXQsIFRocmVl
VWludDE2KSB7IHRlc3RTbWFsbFNldE9mVW5zaWduZWQ8dWludDE2X3Q+KDMpOyB9CitURVNUKFdU
Rl9TbWFsbFNldCwgRm91clVpbnQxNikgeyB0ZXN0U21hbGxTZXRPZlVuc2lnbmVkPHVpbnQxNl90
Pig0KTsgfQorVEVTVChXVEZfU21hbGxTZXQsIEh1bmRyZWRVaW50MTYpIHsgdGVzdFNtYWxsU2V0
T2ZVbnNpZ25lZDx1aW50MTZfdD4oMTAwKTsgfQorVEVTVChXVEZfU21hbGxTZXQsIFRocmVlVWlu
dDMyKSB7IHRlc3RTbWFsbFNldE9mVW5zaWduZWQ8dWludDMyX3Q+KDMpOyB9CitURVNUKFdURl9T
bWFsbFNldCwgRm91clVpbnQzMikgeyB0ZXN0U21hbGxTZXRPZlVuc2lnbmVkPHVpbnQzMl90Pig0
KTsgfQorVEVTVChXVEZfU21hbGxTZXQsIEh1bmRyZWRVaW50MzIpIHsgdGVzdFNtYWxsU2V0T2ZV
bnNpZ25lZDx1aW50MzJfdD4oMTAwKTsgfQorVEVTVChXVEZfU21hbGxTZXQsIFRocmVlVWludDY0
KSB7IHRlc3RTbWFsbFNldE9mVW5zaWduZWQ8dWludDY0X3Q+KDMpOyB9CitURVNUKFdURl9TbWFs
bFNldCwgRm91clVpbnQ2NCkgeyB0ZXN0U21hbGxTZXRPZlVuc2lnbmVkPHVpbnQ2NF90Pig0KTsg
fQorVEVTVChXVEZfU21hbGxTZXQsIEh1bmRyZWRVaW50NjQpIHsgdGVzdFNtYWxsU2V0T2ZVbnNp
Z25lZDx1aW50NjRfdD4oMTAwKTsgfQorCitURVNUKFdURl9TbWFsbFNldCwgUG9pbnRlcnMpIHsg
dGVzdFNtYWxsU2V0T2ZQb2ludGVycygpOyB9CisKK1RFU1QoV1RGX1NtYWxsU2V0LCBWZWN0b3JV
aW50MTYpIHsgdGVzdFZlY3RvcnNPZlNtYWxsU2V0c09mVW5zaWduZWQ8dWludDE2X3Q+KCk7IH0K
K1RFU1QoV1RGX1NtYWxsU2V0LCBWZWN0b3JVaW50MzIpIHsgdGVzdFZlY3RvcnNPZlNtYWxsU2V0
c09mVW5zaWduZWQ8dWludDMyX3Q+KCk7IH0KK1RFU1QoV1RGX1NtYWxsU2V0LCBWZWN0b3JVaW50
NjQpIHsgdGVzdFZlY3RvcnNPZlNtYWxsU2V0c09mVW5zaWduZWQ8dWludDY0X3Q+KCk7IH0KKwor
fSAvLyBuYW1lc3BhY2UgVGVzdFdlYktpdEFQSQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>428853</attachid>
            <date>2021-05-17 11:50:06 -0700</date>
            <delta_ts>2021-05-17 14:36:20 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>patchRegisterAllocator</filename>
            <type>text/plain</type>
            <size>86271</size>
            <attacher name="Robin Morisset">rmorisset</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvQ2hhbmdlTG9nCmluZGV4IGY4MzBjYTkzZDA0OC4uNGQ4NzcyZTVhYjQxIDEw
MDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxMDEgQEAKKzIwMjEtMDUtMTcgIFJv
YmluIE1vcmlzc2V0ICA8cm1vcmlzc2V0QGFwcGxlLmNvbT4KKworICAgICAgICBNYWtlIEFpckFs
bG9jYXRlUmVnaXN0ZXJzQnlHcmFwaENvbG9yaW5nIHVzZSBsZXNzIG1lbW9yeQorICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjI1ODQ4CisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTKS4KKworICAgICAgICBXZeKAmXZlIGhhZCBzb21lIGpl
dHNhbSBwcm9ibGVtcyBjYXVzZWQgYnkgdGhlIG1haW4gQWlyIHJlZ2lzdGVyIGFsbG9jYXRvciwg
d2hpY2ggY2F1c2VkIHVzIHRvIGxvd2VyIE9wdGlvbnM6Om1heGltdW1UbXBzRm9yR3JhcGhDb2xv
cmluZy4KKyAgICAgICAgSGVuY2UgdGhpcyBwYXRjaCB0cmllcyB0byBpbXByb3ZlIHRoZSBtZW1v
cnkgdXNhZ2Ugb2YgdGhlIGFsbG9jYXRvci4gSXQgaW5jbHVkZXMgc2V2ZXJhbCBjaGFuZ2VzOgor
ICAgICAgICAtIENoYW5nZSB0aGUgZGF0YXN0cnVjdHVyZSB1c2VkIGZvciByZXByZXNlbnRpbmcg
dGhlIGludGVyZmVyZW5jZSBncmFwaC4gQmVmb3JlIGl0IHdhcyBlZmZlY3RpdmVseSBhIEhhc2hT
ZXQ8c3RkOjpwYWlyPHVpbnQxNl90LCB1aW50MTZfdD4uIE5vdywgaXQgaXMgZWl0aGVyIGEgQml0
dmVjdG9yIChmb3IgbiA8IDQwMCBmb3Igbm93LCBjYW4gYmUgdHdlYWtlZCBlYXNpbHkpLCBvciBh
IFZlY3RvcjxTbWFsbFNldDx1aW50MTZfdD4+IG90aGVyd2lzZS4gVGhpcyBuZWFybHkgaGFsdmVz
IGl0cyBtZW1vcnkgY29uc3VtcHRpb24gaW4gdGhlIGNhc2UgdGhhdCB0aGUgZ3JhcGggaXMgZGVu
c2UgKHdoaWNoIGlzIHdoZW4gdGhlIG92ZXJoZWFkIG9mIHRoZSBTbWFsbFNldHMgaXMgbWluaW1p
emVkLCBhbmQgd2hlbiB0aGUgcmVnaXN0ZXIgYWxsb2NhdG9yIHVzZXMgdGhlIG1vc3QgbWVtb3J5
KS4gSW4gb3JkZXIgdG8gZWFzaWx5IHRlc3QgdGhpcyBjaGFuZ2UsIGFuZCBhbnkgZnVydGhlciBj
aGFuZ2UgdG8gdGhpcyBkYXRhc3RydWN0dXJlLCB0aGUgb2xkIGFwcHJvYWNoIHdhcyBwcmVzZXJ2
ZWQgYXMgSW50ZXJmZXJlbmNlSGFzaFNldCwgYW5kIGEgdGVtcGxhdGUgdG8gcnVuIHR3byBzdWNo
IGRhdGFzdHJ1Y3R1cmVzIGluIHBhcmFsbGVsLCBjaGVja2luZyB0aGVpciBlcXVpdmFsZW5jZSB3
YXMgYWRkZWQ6IEluc3RydW1lbnRlZEludGVyZmVyZW5jZUdyYXBoCisgICAgICAgIC0gVGhlcmUg
d2FzIGFscmVhZHkgc29tZSB0ZW1wbGF0ZSBwYXJhbWV0ZXIgdG8gY2hhbmdlIHRoZSBzaXplIG9m
IHRoZSB0bXAgaW5kaWNlcyBmcm9tIHVuc2lnbmVkIHRvIHVpbnQxNl90Li4gYnV0IHRoZSBjb2Rl
IGZhaWxlZCB0byBjb21waWxlIHVubGVzcyBpdCB3YXMgdW5zaWduZWQuIEkgZml4ZWQgdGhpcywg
bWFkZSBtb3JlIGNvbnNpc3RlbnQgdXNlIG9mIGl0LCBhbmQgc3dpdGNoZWQgdG8gdWludDE2X3Qg
YnkgZGVmYXVsdCAoc2luY2UgT3B0aW9uczo6bWF4aW11bVRtcHNGb3JHcmFwaENvbG9yaW5nIGlz
IDI1aywgd2UgYXJlIGZhciBmcm9tIGV4aGF1c3RpbmcgdWludDE2X3QpLiBUaGlzIGhhbHZlZCB0
aGUgbWVtb3J5IHVzYWdlIG9mIHZhcmlvdXMgb3RoZXIgZGF0YXN0cnVjdHVyZXMgaW4gdGhlIHJl
Z2lzdGVyIGFsbG9jYXRvcgorICAgICAgICAtIHVuc3BpbGxhYmxlVG1wcyB3YXMgYSBIYXNoU2V0
PHVuc2lnbmVkPi4gU2luY2UgaXQgaXMgb2Z0ZW4gcXVpdGUgZGVuc2UgKG9mdGVuIGFyb3VuZCAy
MCUgb24gSmV0U3RyZWFtMiksIEkgcmVwbGFjZWQgaXQgYnkgYSBCaXR2ZWN0b3IgaW5zdGVhZAor
ICAgICAgICAtIG1fYmlhc2VzIHdhcyBhIEhhc2hNYXA8SW5kZXhUeXBlLCBIYXNoU2V0PEluZGV4
VHlwZT4+LiBTaW5jZSBpdCBpcyBleHRyZW1lbHkgcmFyZSB0aGF0IHRoZSBzZXRzIGhhdmUgbW9y
ZSB0aGFuIDggZWxlbWVudHMgKGZyb20gbG9va2luZyBhdCBzb21lIGluc3RydW1lbnRlZCBydW4g
b2YgSmV0U3RyZWFtMiksIEkgcmVwbGFjZWQgaXQgYnkgSGFzaE1hcDxJbmRleFR5cGUsIFNtYWxs
U2V0PEluZGV4VHlwZT4+LiBUaGlzIG5vdCBvbmx5IHNpZ25pZmljYW50bHkgcmVkdWNlcyBtZW1v
cnksIGJ1dCBuZWFybHkgaGFsdmVzIHRoZSB0aW1lIHNwZW50IGluIGFzc2lnbkNvbG9ycyhhcm91
bmQgODBtcyAtPiA0MG1zIGluIEpldFN0cmVhbSAyKQorICAgICAgICAtIFVzZUNvdW50cyB3YXMg
bmVlZGxlc3NseSBnZW5lcmFsOiBpdCBpcyBvbmx5IHVzZWQgYnkgdGhlIHJlZ2lzdGVyIGFsbG9j
YXRvciAoYWxsIG90aGVyIHJlZmVyZW5jZXMgdG8gVXNlQ291bnRzIHJlZmVyIHRvIHRoZSBjb21w
bGV0ZWx5IGRpZmZlcmVudCBCMzo6VXNlQ291bnRzKSwgc28gdGhlcmUgaXMgbm8gcG9pbnQgaW4g
aXQgY29tcHV0aW5nLCBhbmQgdGhlbiBzdG9yaW5nIGxvdHMgb2YgaXJyZWxldmFudCBkYXRhLiBB
IGZsb2F0IGlzIGFsc28gbW9yZSB0aGFuIGVub3VnaCBwcmVjaXNpb24gKGVzcGVjaWFsbHkgc2lu
Y2UgaXQgaXMgcHJldHR5IG11Y2ggYWx3YXlzIDEsIDEwLCAxMDAsIG9yIDEwMDAgaW4gcHJhY3Rp
Y2XigKYpLiBBbHNvLCBzaW5jZSB3ZSBvbmx5IG5lZWQgaXQgaW5kZXhlZCBieSBUbXBzLCB3ZSBj
YW4gdXNlIGEgVmVjdG9yIHdpdGggQWJzb2x1dGVUbXBNYXBwZXIgaW5zdGVhZCBvZiBpdHMgSGFz
aE1hcC4gVGhlc2UgY2hhbmdlcyBhcmUgbm90IGp1c3QgbWVtb3J5IHNhdmluZ3MsIHRoZXkgYWxz
byBtYWtlIHNlbGVjdFNwaWxsIHdheSBmYXN0ZXIgKDU3MG1zIC0+IDI1MG1zIG9uIG15IG1hY2hp
bmUgb24gSmV0U3RyZWFtMikKKyAgICAgICAgLSBXaGlsZSBJIHdhcyBhdCBpdCwgSSBkaWQgYSBj
b3VwbGUgb2Ygb3RoZXIgdHdlYWtzIHRvIHRoZSBsb2dpYyBvZiBzZWxlY3RTcGlsbC4gSW4gcGFy
dGljdWxhciwgaW5zdGVhZCBvZiBoYXZpbmcgdG8gY2hlY2sgZm9yIGlzRmFzdFRtcCBldmVyeSB0
aW1lLCBJIGp1c3QgcHV0IHRoZSBmYXN0IHRtcHMgZGlyZWN0bHkgaW4gdW5zcGlsbGFibGVUbXBz
LCB3aGljaCBwcmV2ZW50cyB0aGVtIGZyb20gZ2V0dGluZyBhZGRlZCB0byBtX3NwaWxsV29ya2xp
c3QgaW4gdGhlIGZpcnN0IHBsYWNlLiBUaGlzICsgYSBiaXQgb2YgY2xlYW4tdXAgKGZvciBleGFt
cGxlIHB1dHRpbmcgYW4gZWFybHkgZXhpdCBpbnN0ZWFkIG9mIHNldHRpbmcgc2NvcmUgdG8gaW5m
aW5pdHkgaW4gdGhlIGNhc2Ugb2YgZGVhZCB0bXBzKSByZXN1bHRlZCBpbiBhIGZ1cnRoZXIgcGVy
ZiB3aW4gKHRvIHJvdWdobHkgMjAwbXMgc3BlbnQgaW4gc2VsZWN0U3BpbGwoKSBvbiBKZXRTdHJl
YW0yKQorCisgICAgICAgIEFsbCB0b2dldGhlciwgdGhpcyBwYXRjaCByZWR1Y2VzIHRoZSB0aW1l
IHNwZW50IGluIHRoZSByZWdpc3RlciBhbGxvY2F0b3IgYnkgcm91Z2hseSAxNSB0byAyMCUgaW4g
SmV0U3RyZWFtMiAodGVzdGVkIGJvdGggd2l0aCB0aGUgQnJpZ2dzIGFuZCB0aGUgSVJDIGFsbG9j
YXRvcnMgb24gbXkgTUJQIDIwMTkpLgorCisgICAgICAgIFNvIGZhciBJIGhhdmUgcGVyZm9ybWFu
Y2UgbnVtYmVycyBmb3IgdGhpcyBwYXRjaCBvbiBib3RoIGFuIGlQaG9uZSA3IGFuZCBhbiBpUGFk
IFBybyAyIChJJ2xsIHB1dCB0aGUgbnVtYmVycyBvbiBNYWMgaW4gdGhlIGJ1Z3ppbGxhIGlzc3Vl
IG9uY2UgdGhlIHBlcmZvcm1hbmNlIGJvdCBkZWlnbnMgdG8gZ2V0IHRvIGl0KS4KKyAgICAgICAg
T24gaVBob25lIDcsIHdlIHNlZSBhIDAuOTQlIGltcHJvdmVtZW50IHRvIHRoZSBKSVQgdGVzdHMg
c2VjdGlvbiBvZiBSQU1pZmljYXRpb24gKHA8MC4wMiksIHdpdGggdGhlIGZvbGxvd2luZyBzaWdu
aWZpY2FudCBzdWItcmVzdWx0czoKKyAgICAgICAgLSAxLjgyJSBiZXR0ZXIgb24gQWlyIChwPDAu
MDIpCisgICAgICAgIC0gMS4xOCUgYmV0dGVyIG9uIEJhc2ljIChwPDAuMDIpCisgICAgICAgIC0g
MS41OSUgYmV0dGVyIG9uIEJveDJEIChwPDAuMDIpCisgICAgICAgIC0gMC40MyUgYmV0dGVyIG9u
IEhhc2hTZXQtd2FzbSAocDwwLjA1KQorICAgICAgICAtIDAuNTIlIGJldHRlciBvbiBNTCAocDww
LjA1KQorICAgICAgICAtIDkuMzklIGJldHRlciBvbiBPZmZsaW5lQXNzZW1ibGVyIChwPDAuMDIp
CisgICAgICAgIC0gMi4xMyUgYmV0dGVyIG9uIGNyeXB0by1hZXMtU1AgKHA8MC4wMikKKyAgICAg
ICAgLSA1LjI5JSBiZXR0ZXIgb24gY3J5cHRvLW1kNS1TUCAocDwwLjAyKQorICAgICAgICAtIDEu
MDAlIGJldHRlciBvbiBjcnlwdG8tc2hhMS1TUCAocDwwLjA1KQorICAgICAgICAtIDAuOTclIGJl
dHRlciBvbiBkYXRlLWZvcm1hdC10b2Z0ZS1TUCAocDwwLjAyKQorICAgICAgICAtIDAuNzglIGJl
dHRlciBvbiBkYXRlLWZvcm1hdC14cGFyYi1TUCAocDwwLjAyKQorICAgICAgICAtIDEuNTUlIGJl
dHRlciBvbiBkZWx0YS1ibHVlIChwPDAuMDIpCisgICAgICAgIC0gMC4zNyUgYmV0dGVyIG9uIGdh
dXNzaWFuLWJsdXIgKHA8MC4wMikKKyAgICAgICAgLSA0LjExJSBiZXR0ZXIgb24gZ2NjLWxvb3Bz
LXdhc20gKHA8MC4wMikKKyAgICAgICAgLSA1LjE0JSBiZXR0ZXIgb24gcXVpY2tzb3J0LXdhc20g
KHA8MC4wMikKKyAgICAgICAgLSAyLjc0JSBiZXR0ZXIgb24gcmF5dHJhY2UgKHA8MC4wMikKKyAg
ICAgICAgLSA0LjUyJSBiZXR0ZXIgb24gcmVnZXhwIChwPDAuMDIpCisgICAgICAgIC0gMS4wMiUg
YmV0dGVyIG9uIGNyeXB0by1zdGFuZm9yZC1hZXMgKHA8MC4wMikKKyAgICAgICAgLSAxMC40MCUg
YmV0dGVyIG9uIHRzZi13YXNtIChwPDAuMDUpCisgICAgICAgIEFzIGV4cGVjdGVkLCB0aGVyZSBp
cyBubyBzdGF0aXN0aWNhbGx5IHNpZ25pZmljYW50IGVmZmVjdCBvbiB0aGUgbm9uLUpJVCBzZWN0
aW9ucyBvZiBSQU1pZmljYXRpb24uCisgICAgICAgIEFub3RoZXIgbG9naWNhbCBhbmQgZXhwZWN0
ZWQgcHJvcGVydHkgb2YgdGhlc2UgcmVzdWx0cyBpcyB0aGF0IHRoZSBsYXJnZXN0IHdpbnMgYXJl
IHRvIHBlYWsgbWVtb3J5IGFuZCBub3QgdG8gZW5kIG1lbW9yeSAoZS5nLiA4LjYzJSBmb3IgcGVh
ayByZWdleHAsIDUuNDglIGZvciBwZWFrIGdjYy1sb29wcy13YXNtLCAxMC43MCUgYmV0dGVyIGZv
ciBwZWFrIGNyeXB0by1tZDUtU1AsIDE3LjgzJSBiZXR0ZXIgZm9yIHBlYWsgT2ZmbGluZUFzc2Vt
YmxlciwgZXRjLi4pCisgICAgICAgIFRoZSByZXN1bHRzIG9uIGlQYWQgUHJvIDIgYXJlIHZlcnkg
c2ltaWxhcjogMS4yMCUgYmV0dGVyIChwPDAuMDIpIG9uIHRoZSBKSVQgdGVzdHMgb2YgUkFNaWZp
Y2F0aW9uLCB3aXRoIHRoZSBmb2xsb3dpbmcgc2lnbmlmaWNhbnQgc3ViLXJlc3VsdHM6CisgICAg
ICAgIC0gMS4yJSBiZXR0ZXIgb24gM2QtY3ViZS1TUCAocDwwLjA1KQorICAgICAgICAtIDAuNjcl
IGJldHRlciBvbiBiYXNpYyAocDwwLjAyKQorICAgICAgICAtIDEuNTclIGJldHRlciBvbiBCb3gy
RCAocDwwLjAyKQorICAgICAgICAtIDExLjMlIGJldHRlciBvbiBPZmZsaW5lQXNzZW1ibGVyIChw
PDAuMDIpLCAxOS4xMSUgYmV0dGVyIG9uIHBlYWsgbWVtb3J5CisgICAgICAgIC0gcmVncmVzc2lv
biBvZiAwLjQ0JSAocDwwLjA1KSBvbiBVbmlQb2tlcgorICAgICAgICAtIDEuNzQlIGJldHRlciBv
biBjcnlwdG8tYWVzLVNQIChwPDAuMDIpCisgICAgICAgIC0gNC43OSUgYmV0dGVyIG9uIGNyeXB0
by1tZDUtU1AgKHA8MC4wMiksIDEwLjM5JSBiZXR0ZXIgb24gcGVhayBtZW1vcnkKKyAgICAgICAg
LSAxLjYzJSBiZXR0ZXIgb24gY3J5cHRvLXNoYTEtU1AgKHA8MC4wMikKKyAgICAgICAgLSAwLjg1
JSBiZXR0ZXIgb24gZGF0YS1mb3JtYXQtdG9mdGUtU1AgKHA8MC4wMikKKyAgICAgICAgLSAyLjQ4
JSBiZXR0ZXIgb24gZGVsdGEtYmx1ZSAocDwwLjAyKQorICAgICAgICAtIDAuMzglIGJldHRlciBv
biBnYXVzc2lhbi1ibHVyIChwPDAuMDIpCisgICAgICAgIC0gMy42OCUgYmV0dGVyIG9uIGdjYy1s
b29wcy13YXNtIChwPDAuMDUpCisgICAgICAgIC0gMC42MiUgYmV0dGVyIG9uIG4tYm9keS1TUCAo
cDwwLjAyKQorICAgICAgICAtIDAuMTklIGJldHRlciBvbiBvY3RhbmUtY29kZS1sb2FkIChwPDAu
MDUpCisgICAgICAgIC0gMi45MyUgYmV0dGVyIG9uIHF1aWNrc29ydC13YXNtIChwPDAuMDIpCisg
ICAgICAgIC0gMy4xMiUgYmV0dGVyIG9uIHJheXRyYWNlIChwPDAuMDIpCisgICAgICAgIC0gMy44
MCUgYmV0dGVyIG9uIHJlZ2V4cCAocDwwLjAyKSwgNy40MCUgYmV0dGVyIG9uIHBlYWsgbWVtb3J5
CisgICAgICAgIC0gMC45MyUgYmV0dGVyIG9uIGNyeXB0by1zdGFuZm9yZC1hZXMgKHA8MC4wMikK
KyAgICAgICAgLSAyNi4wMiUgYmV0dGVyIG9uIHRzZi13YXNtIChwPDAuMDIpICEKKworICAgICAg
ICBNdWNoIG1vcmUgc3VycHJpc2luZ2x5IHRvIG1lLCB0aGUgaVBob25lIDcgYWxzbyBzaG93cyBh
IHNpZ25pZmljYW50IGltcHJvdmVtZW50IHRvIEpldFN0cmVhbSAyOiAxLjI3JSBiZXR0ZXIgKHA8
MC4wNSkuCisgICAgICAgIExvb2tpbmcgYXQgdGhlIHN1Yi10ZXN0cywgd2Ugc2VlIHRoZSBmb2xs
b3dpbmcgc2lnbmlmaWNhbnQgb25lczoKKyAgICAgICAgLSAxLjYzJSBiZXR0ZXIgb24gQm94MkQg
KHA8MC4wMikKKyAgICAgICAgLSAwLjc2JSBiZXR0ZXIgb24gV1NMIChwPDAuMDIpCisgICAgICAg
IC0gYSByZWdyZXNzaW9uIG9mIDIuNzElIG9uIGNyeXB0by1zaGExLVNQIChwPDAuMDUpCisgICAg
ICAgIC0gMi43OCUgYmV0dGVyIG9uIGdhdXNzaWFuLWJsdXIgKHA8MC4wMikKKyAgICAgICAgLSAz
LjUwJSBiZXR0ZXIgb24gZ2JlbXUgKHA8MC4wNSkKKyAgICAgICAgLSAxLjY0JSBiZXR0ZXIgb24g
anNoaW50LXd0YiAocDwwLjAyKQorICAgICAgICAtIDE5LjE5JSBiZXR0ZXIgb24gdGFnY2xvdWQt
U1AgKHA8MC4wMikKKyAgICAgICAgLSAxLjYxJSBiZXR0ZXIgb24gb2N0YW5lLXpsaWIgKHA8MC4w
NSkKKyAgICAgICAgVGhlIGlQYWQgUHJvIDIgc2hvd3Mgbm8gc2lnbmlmaWNhbnQgZWZmZWN0IG9u
IEpldFN0cmVhbSAyIGFzIGEgd2hvbGUsIGJ1dCBoYXMgc2lnbmlmaWNhbnQgZWZmZWN0cyBvbiB0
aGUgZm9sbG93aW5nIHN1Yi10ZXN0czoKKyAgICAgICAgLSAyLjIxJSBiZXR0ZXIgb24gQmFzaWMg
KHA8MC4wMikKKyAgICAgICAgLSAxLjA5JSBiZXR0ZXIgb24gTUwgKHA8MC4wNSkKKyAgICAgICAg
LSAwLjY1JSBiZXR0ZXIgb24gV1NMIChwPDAuMDIpCisgICAgICAgIC0gMS4xNCUgYmV0dGVyIG9u
IGRhdGEtZm9ybWF0LXRvZnRlLVNQIChwPDAuMDUpCisgICAgICAgIC0gMS4yMCUgYmV0dGVyIG9u
IGZpcnN0LWluc3BlY3Rvci1jb2RlLWxvYWQgKHA8MC4wMikKKyAgICAgICAgLSAxLjg5JSBiZXR0
ZXIgb24gZ2F1c3NpYW4tYmx1ciAocDwwLjAyKQorICAgICAgICAtIGEgcmVncmVzc2lvbiBvZiAy
LjAyJSBvbiByZWdleHAtZG5hLVNQIChwPDAuMDIpCisgICAgICAgIC0gNC45JSBiZXR0ZXIgb24g
dGFnY2xvdWQtU1AgKHA8MC4wMikKKyAgICAgICAgSSB0aGluayB0aGVyZSBpcyB0b28gbXVjaCBv
dmVybGFwIGluIHRoZXNlIHJlc3VsdHMgZm9yIHRoZW0gdG8gYmUgZHVlIHB1cmVseSB0byBjaGFu
Y2UsIGJ1dCB0aGVyZSBpcyBjbGVhcmx5IGEgbG90IG9mIG5vaXNlLCBhbmQgSSBleHBlY3QgdGhh
dCB0aGUgaVBob25lNyByZXN1bHRzIG1pZ2h0IGJlIGV4YWdlcmF0ZWQuCisgICAgICAgIE9uZSBt
b3JlIHJlYXNvbiBJIGJlbGlldmUgdGhlcmUgaXMgYSByZWFsIGVmZmVjdCBoZXJlIGFuZCBub3Qg
anVzdCBub2lzZSwgaXMgdGhhdCB0aGUgbGFyZ2VzdCB3aW5zIHdlcmUgdXN1YWxseSBvbiB0aGUg
YHdvcnN0IGl0ZXJhdGlvbmAgcGFydCBvZiB0aGUgc2NvcmVzLCBzbyBJIHN1c3BlY3QgdGhhdCB0
aGUgbWVtb3J5IHRyYWZmaWMgb2YgdGhlIHJlZ2lzdGVyIGFsbG9jYXRvciB3YXMgc29tZXRpbWVz
IHNsb3dpbmcgZG93biB0aGUgbWFpbiB0aHJlYWQsIHBvc3NpYmx5IHRocm91Z2ggY2FjaGUgZXZp
Y3Rpb25zLgorICAgICAgICBJIGNhbid0IGV4cGxhaW4gd2h5IHRhZ2Nsb3VkLVNQIHNob3dzIGxh
cmdlIHdpbnMgb24gSmV0U3RyZWFtMiBhbmQgbm8gd2luIGluIFJBTWlmaWNhdGlvbiB3aGVyZWFz
IHRzZi13YXNtIGlzIHRoZSBvcHBvc2l0ZS4KKworICAgICAgICAqIGIzL0IzUmVkdWNlTG9vcFN0
cmVuZ3RoLmNwcDoKKyAgICAgICAgKEpTQzo6QjM6OlJlZHVjZUxvb3BTdHJlbmd0aDo6cmVkdWNl
Qnl0ZUNvcHlMb29wc1RvTWVtY3B5KToKKyAgICAgICAgKiBiMy9haXIvQWlyQWxsb2NhdGVSZWdp
c3RlcnNCeUdyYXBoQ29sb3JpbmcuY3BwOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjphbGxvY2F0
ZVJlZ2lzdGVyc0J5R3JhcGhDb2xvcmluZyk6CisgICAgICAgICogYjMvYWlyL0FpckNvZGUuaDoK
KyAgICAgICAgKEpTQzo6QjM6OkFpcjo6Q29kZTo6Zm9yRWFjaEZhc3RUbXAgY29uc3QpOgorICAg
ICAgICAqIGIzL2Fpci9BaXJVc2VDb3VudHMuaDoKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6VXNl
Q291bnRzOjpVc2VDb3VudHMpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpVc2VDb3VudHM6Omlz
Q29uc3REZWYgY29uc3QpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpVc2VDb3VudHM6Om51bVdh
cm1Vc2VzQW5kRGVmcyBjb25zdCk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OlVzZUNvdW50czo6
ZHVtcCBjb25zdCk6CisgICAgICAgICogcGFyc2VyL05vZGVzLmg6CisKIDIwMjEtMDUtMTYgIE1h
cmsgTGFtICA8bWFyay5sYW1AYXBwbGUuY29tPgogCiAgICAgICAgIEltcGxlbWVudCBiYXNlbGlu
ZSBvcF9lbnRlciwgb3BfcmV0LCBvcF9jaGVja190cmFwcywgb3BfdGhyb3cgdXNpbmcgSklUIHRo
dW5rcy4KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1JlZHVjZUxvb3BT
dHJlbmd0aC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNSZWR1Y2VMb29wU3RyZW5n
dGguY3BwCmluZGV4IGM3OTdjZDZjMjZjOC4uNGE3NDhhNzY0MzU1IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYjMvQjNSZWR1Y2VMb29wU3RyZW5ndGguY3BwCisrKyBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1JlZHVjZUxvb3BTdHJlbmd0aC5jcHAKQEAgLTM2LDcgKzM2
LDcgQEAKICNpbmNsdWRlICJCM1BoYXNlU2NvcGUuaCIKICNpbmNsdWRlICJCM1Byb2NlZHVyZUlu
bGluZXMuaCIKICNpbmNsdWRlICJCM1ZhbHVlSW5saW5lcy5oIgotI2luY2x1ZGUgPHd0Zi9TbWFs
bFB0clNldC5oPgorI2luY2x1ZGUgPHd0Zi9TbWFsbFNldC5oPgogI2luY2x1ZGUgPHd0Zi9WZWN0
b3IuaD4KIAogbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CkBAIC0xNTksNyArMTU5LDcg
QEAgcHVibGljOgogICAgICAgICBCYXNpY0Jsb2NrKiBsb29wRm9vdCA9IG51bGxwdHI7CiAgICAg
ICAgIEJhc2ljQmxvY2sqIGxvb3BQcmVoZWFkZXIgPSBudWxscHRyOwogICAgICAgICBCYXNpY0Js
b2NrKiBsb29wUG9zdGZvb3RlciA9IG51bGxwdHI7Ci0gICAgICAgIFNtYWxsUHRyU2V0PEJhc2lj
QmxvY2sqPiBsb29wSW5uZXJCbG9ja3M7CisgICAgICAgIFNtYWxsU2V0PEJhc2ljQmxvY2sqPiBs
b29wSW5uZXJCbG9ja3M7CiAKICAgICAgICAgewogICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBp
ID0gMDsgaSA8IGxvb3AtPnNpemUoKTsgKytpKQpAQCAtMTcxLDggKzE3MSw4IEBAIHB1YmxpYzoK
ICAgICAgICAgICAgIGlmICghbG9vcElubmVyQmxvY2tzLmNvbnRhaW5zKHN0b3JlLT5vd25lcikp
CiAgICAgICAgICAgICAgICAgcmV0dXJuOwogCi0gICAgICAgICAgICBTbWFsbFB0clNldDxCYXNp
Y0Jsb2NrKj4gbG9vcEVudHJhbmNlczsKLSAgICAgICAgICAgIFNtYWxsUHRyU2V0PEJhc2ljQmxv
Y2sqPiBsb29wRXhpdHM7CisgICAgICAgICAgICBTbWFsbFNldDxCYXNpY0Jsb2NrKj4gbG9vcEVu
dHJhbmNlczsKKyAgICAgICAgICAgIFNtYWxsU2V0PEJhc2ljQmxvY2sqPiBsb29wRXhpdHM7CiAg
ICAgICAgICAgICBmb3IgKGF1dG8qIGJsb2NrIDogbG9vcElubmVyQmxvY2tzKSB7CiAgICAgICAg
ICAgICAgICAgZm9yIChhdXRvIHN1Y2Nlc3NvciA6IGJsb2NrLT5zdWNjZXNzb3JzKCkpIHsKICAg
ICAgICAgICAgICAgICAgICAgaWYgKCFsb29wSW5uZXJCbG9ja3MuY29udGFpbnMoc3VjY2Vzc29y
LmJsb2NrKCkpKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJB
bGxvY2F0ZVJlZ2lzdGVyc0J5R3JhcGhDb2xvcmluZy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvYjMvYWlyL0FpckFsbG9jYXRlUmVnaXN0ZXJzQnlHcmFwaENvbG9yaW5nLmNwcAppbmRleCBk
MDE2OWFlMDc0ZDcuLjk3ZTFhNDc4ZjQ4YyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2IzL2Fpci9BaXJBbGxvY2F0ZVJlZ2lzdGVyc0J5R3JhcGhDb2xvcmluZy5jcHAKKysrIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJBbGxvY2F0ZVJlZ2lzdGVyc0J5R3JhcGhD
b2xvcmluZy5jcHAKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE1LTIw
MjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE1
LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAog
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCkBAIC0zNyw2ICszNyw5IEBACiAjaW5jbHVkZSAiQWlyUGhhc2VTY29wZS5o
IgogI2luY2x1ZGUgIkFpclRtcFdpZHRoSW5saW5lcy5oIgogI2luY2x1ZGUgIkFpclVzZUNvdW50
cy5oIgorI2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+CisjaW5jbHVkZSA8d3RmL1NtYWxsU2V0Lmg+
CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogCiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIz
IHsgbmFtZXNwYWNlIEFpciB7CiAKQEAgLTQ2LDEwNCArNDksMjA5IEBAIHN0YXRpYyBjb25zdGV4
cHIgYm9vbCBkZWJ1ZyA9IGZhbHNlOwogc3RhdGljIGNvbnN0ZXhwciBib29sIHRyYWNlRGVidWcg
PSBmYWxzZTsKIHN0YXRpYyBjb25zdGV4cHIgYm9vbCByZXBvcnRTdGF0cyA9IGZhbHNlOwogCi0v
LyBJbnRlcmZlcmVuY2UgZWRnZXMgYXJlIG5vdCBkaXJlY3RlZC4gQW4gZWRnZSBiZXR3ZWVuIGFu
eSB0d28gVG1wcyBpcyByZXByZXNlbnRlZAotLy8gYnkgdGhlIGNvbmNhdGVuYXRlZCB2YWx1ZXMg
b2YgdGhlIHNtYWxsZXN0IFRtcCBmb2xsb3dlZCBieSB0aGUgYmlnZ2VyIFRtcC4KLS8vIFdlIGhh
dmUgYSB0ZW1wbGF0ZWQgdmVyc2lvbiB0byBzdXBwb3J0IDE2IGJpdCBhbmQgYSAzMiBiaXQgaW1w
bGVtZW50YXRpb25zCi0vLyBzaW5jZSB0aGUgbnVtYmVyIG9mIGVudHJpZXMgaW4gYW4gaW50ZXJm
ZXJlbmNlIHRhYmxlIGlzIE8oTl4yKS4KLS8vIEluIG1vc3QgY2FzZXMsIHdlIHVzZSB0aGUgMTYg
Yml0IGZsYXZvciwgdGh1cyBzYXZpbmcgaGFsZiB0aGUgbWVtb3J5Ci0vLyB3aXRoIGEgc2luZ2xl
IGltcGxlbWVudGF0aW9uLgotdGVtcGxhdGUgPHR5cGVuYW1lIEluZGV4SW1wbFR5cGUsIHR5cGVu
YW1lIFBhaXJTdG9yYWdlVHlwZT4KLWNsYXNzIEludGVyZmVyZW5jZUVkZ2UgewotICAgIHN0YXRp
Y19hc3NlcnQoc2l6ZW9mKEluZGV4SW1wbFR5cGUpICogMiA9PSBzaXplb2YoUGFpclN0b3JhZ2VU
eXBlKSk7Ci0gICAgY29uc3QgdW5zaWduZWQgU2hpZnRBbW91bnQgPSBzaXplb2YoSW5kZXhJbXBs
VHlwZSkgKiA4OwotICAgIGNvbnN0IFBhaXJTdG9yYWdlVHlwZSBJbmRleE1hc2sgPSBzdGQ6Om51
bWVyaWNfbGltaXRzPEluZGV4SW1wbFR5cGU+OjptYXgoKTsKK3RlbXBsYXRlIDx0eXBlbmFtZSBJ
bmRleFR5cGU+CitjbGFzcyBJbnRlcmZlcmVuY2VIYXNoU2V0IHsKK3B1YmxpYzoKKyAgICBib29s
IGNvbnRhaW5zKEluZGV4VHlwZSB1LCBJbmRleFR5cGUgdikKKyAgICB7CisgICAgICAgIGlmICh2
IDwgdSkKKyAgICAgICAgICAgIHN0ZDo6c3dhcCh1LCB2KTsKKyAgICAgICAgcmV0dXJuIG1fc2V0
LmNvbnRhaW5zKHsgdSwgdiB9KTsKKyAgICB9CiAKLXByb3RlY3RlZDoKLSAgICB1c2luZyBJbmRl
eFR5cGUgPSB1bnNpZ25lZDsKKyAgICBib29sIGFkZEFuZFJldHVybklzTmV3RW50cnkoSW5kZXhU
eXBlIHUsIEluZGV4VHlwZSB2KQorICAgIHsKKyAgICAgICAgaWYgKHYgPCB1KQorICAgICAgICAg
ICAgc3RkOjpzd2FwKHUsIHYpOworICAgICAgICByZXR1cm4gbV9zZXQuYWRkKHsgdSwgdiB9KS5p
c05ld0VudHJ5OworICAgIH0KKworICAgIHZvaWQgY2xlYXIoKQorICAgIHsKKyAgICAgICAgbV9z
ZXQuY2xlYXIoKTsKKyAgICB9CiAKKyAgICB2b2lkIHNldE1heFRtcEluZGV4KHVuc2lnbmVkIG4p
CisgICAgeworICAgICAgICBBU1NFUlRfVU5VU0VEKG4sIG4gPCBzdGQ6Om51bWVyaWNfbGltaXRz
PEluZGV4VHlwZT46Om1heCgpKTsKKyAgICB9CisKKyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgRnVu
Y3Rvcj4KKyAgICB2b2lkIGZvckVhY2goY29uc3QgRnVuY3RvciYgZnVuY3RvcikKKyAgICB7Cisg
ICAgICAgIGZvciAoYXV0byBlZGdlIDogbV9zZXQpCisgICAgICAgICAgICBmdW5jdG9yKGVkZ2Up
OworICAgIH0KKworICAgIHVuc2lnbmVkIHNpemUoKSBjb25zdCB7IHJldHVybiBtX3NldC5zaXpl
KCk7IH0KKworcHJpdmF0ZToKKyAgICAvLyBJbnRlcmZlcmVuY2UgZWRnZXMgYXJlIG5vdCBkaXJl
Y3RlZC4gQW4gZWRnZSBiZXR3ZWVuIGFueSB0d28gVG1wcyBpcyByZXByZXNlbnRlZAorICAgIC8v
IGJ5IHRoZSBjb25jYXRlbmF0ZWQgdmFsdWVzICh0aHJvdWdoIFRtcE1hcHBlcikgb2YgdGhlIHNt
YWxsZXN0IFRtcCBmb2xsb3dlZCBieSB0aGUgYmlnZ2VyIFRtcC4KKyAgICBIYXNoU2V0PHN0ZDo6
cGFpcjxJbmRleFR5cGUsIEluZGV4VHlwZT4gPiBtX3NldDsKK307CisKK3RlbXBsYXRlIDx0eXBl
bmFtZSBULCB0eXBlbmFtZSBJbmRleFR5cGU+CitjbGFzcyBJbnRlcmZlcmVuY2VWZWN0b3Igewog
cHVibGljOgotICAgIHN0cnVjdCBJbnRlcmZlcmVuY2VFZGdlSGFzaCB7Ci0gICAgICAgIHN0YXRp
YyB1bnNpZ25lZCBoYXNoKGNvbnN0IEludGVyZmVyZW5jZUVkZ2U8SW5kZXhJbXBsVHlwZSwgUGFp
clN0b3JhZ2VUeXBlPiYga2V5KSB7IHJldHVybiBrZXkuaGFzaCgpOyB9Ci0gICAgICAgIHN0YXRp
YyBib29sIGVxdWFsKGNvbnN0IEludGVyZmVyZW5jZUVkZ2U8SW5kZXhJbXBsVHlwZSwgUGFpclN0
b3JhZ2VUeXBlPiYgYSwgY29uc3QgSW50ZXJmZXJlbmNlRWRnZTxJbmRleEltcGxUeXBlLCBQYWly
U3RvcmFnZVR5cGU+JiBiKSB7IHJldHVybiBhID09IGI7IH0KLSAgICAgICAgc3RhdGljIGNvbnN0
ZXhwciBib29sIHNhZmVUb0NvbXBhcmVUb0VtcHR5T3JEZWxldGVkID0gdHJ1ZTsKLSAgICB9Owot
ICAgIHR5cGVkZWYgU2ltcGxlQ2xhc3NIYXNoVHJhaXRzPEludGVyZmVyZW5jZUVkZ2U8SW5kZXhJ
bXBsVHlwZSwgUGFpclN0b3JhZ2VUeXBlPj4gSW50ZXJmZXJlbmNlRWRnZUhhc2hUcmFpdHM7Cisg
ICAgYm9vbCBjb250YWlucyhJbmRleFR5cGUgdSwgSW5kZXhUeXBlIHYpCisgICAgeworICAgICAg
ICBpZiAodiA8IHUpCisgICAgICAgICAgICBzdGQ6OnN3YXAodSwgdik7CisgICAgICAgIHJldHVy
biBtX3ZlY3Rvclt1XS5jb250YWlucyh2KTsKKyAgICB9CiAKLSAgICB0eXBlZGVmIEhhc2hTZXQ8
SW50ZXJmZXJlbmNlRWRnZTxJbmRleEltcGxUeXBlLCBQYWlyU3RvcmFnZVR5cGU+LCBJbnRlcmZl
cmVuY2VFZGdlSGFzaCwgSW50ZXJmZXJlbmNlRWRnZUhhc2hUcmFpdHM+IEludGVyZmVyZW5jZVNl
dDsKKyAgICBib29sIGFkZEFuZFJldHVybklzTmV3RW50cnkoSW5kZXhUeXBlIHUsIEluZGV4VHlw
ZSB2KQorICAgIHsKKyAgICAgICAgaWYgKHYgPCB1KQorICAgICAgICAgICAgc3RkOjpzd2FwKHUs
IHYpOworICAgICAgICBib29sIGlzTmV3RW50cnkgPSBtX3ZlY3Rvclt1XS5hZGQodikuaXNOZXdF
bnRyeTsKKyAgICAgICAgbV9zaXplICs9IGlzTmV3RW50cnk7CisgICAgICAgIHJldHVybiBpc05l
d0VudHJ5OworICAgIH0KKworICAgIHZvaWQgY2xlYXIoKQorICAgIHsKKyAgICAgICAgbV92ZWN0
b3IuY2xlYXIoKTsKKyAgICAgICAgbV9zaXplID0gMDsKKyAgICB9CisKKyAgICB2b2lkIHNldE1h
eFRtcEluZGV4KHVuc2lnbmVkIG4pCisgICAgeworICAgICAgICBBU1NFUlQobiA8IHN0ZDo6bnVt
ZXJpY19saW1pdHM8SW5kZXhUeXBlPjo6bWF4KCkpOworICAgICAgICBtX3ZlY3Rvci5yZXNpemUo
bik7CisgICAgfQogCi0gICAgSW50ZXJmZXJlbmNlRWRnZSgpCisgICAgdGVtcGxhdGUgPHR5cGVu
YW1lIEZ1bmN0b3I+CisgICAgdm9pZCBmb3JFYWNoKGNvbnN0IEZ1bmN0b3ImIGZ1bmN0b3IpCiAg
ICAgeworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV92ZWN0b3Iuc2l6ZSgpIDsg
KytpKSB7CisgICAgICAgICAgICBmb3IgKEluZGV4VHlwZSBqIDogbV92ZWN0b3JbaV0pCisgICAg
ICAgICAgICAgICAgZnVuY3Rvcih7IGksIGogfSk7CisgICAgICAgIH0KICAgICB9CiAKLSAgICBJ
bnRlcmZlcmVuY2VFZGdlKEluZGV4VHlwZSBhLCBJbmRleFR5cGUgYikKKyAgICB1bnNpZ25lZCBz
aXplKCkgY29uc3QgeyByZXR1cm4gbV9zaXplOyB9CisKK3ByaXZhdGU6CisgICAgVmVjdG9yPFQ+
IG1fdmVjdG9yOworICAgIHVuc2lnbmVkIG1fc2l6ZSB7MH07Cit9OworCit0ZW1wbGF0ZSA8dHlw
ZW5hbWUgSW5kZXhUeXBlPgorY2xhc3MgSW50ZXJmZXJlbmNlQml0VmVjdG9yIHsKK3B1YmxpYzoK
KyAgICBib29sIGNvbnRhaW5zKEluZGV4VHlwZSB1LCBJbmRleFR5cGUgdikKICAgICB7Ci0gICAg
ICAgIEFTU0VSVChhKTsKLSAgICAgICAgQVNTRVJUKGIpOwotICAgICAgICBBU1NFUlQoYSA8IHN0
ZDo6bnVtZXJpY19saW1pdHM8SW5kZXhJbXBsVHlwZT46Om1heCgpKTsKLSAgICAgICAgQVNTRVJU
KGIgPCBzdGQ6Om51bWVyaWNfbGltaXRzPEluZGV4SW1wbFR5cGU+OjptYXgoKSk7Ci0gICAgICAg
IEFTU0VSVF9XSVRIX01FU1NBR0UoYSAhPSBiLCAiQSBUbXAgY2FuIG5ldmVyIGludGVyZmVyZSB3
aXRoIGl0c2VsZi4gRG9pbmcgc28gd291bGQgZm9yY2UgaXQgdG8gYmUgdGhlIHN1cGVycG9zaXRp
b24gb2YgdHdvIHJlZ2lzdGVycy4iKTsKKyAgICAgICAgcmV0dXJuIG1fYml0VmVjdG9yLnF1aWNr
R2V0KGluZGV4KHUsIHYpKTsKKyAgICB9CiAKLSAgICAgICAgaWYgKGIgPCBhKQotICAgICAgICAg
ICAgc3RkOjpzd2FwKGEsIGIpOwotICAgICAgICBtX3ZhbHVlID0gc3RhdGljX2Nhc3Q8UGFpclN0
b3JhZ2VUeXBlPihhKSA8PCBTaGlmdEFtb3VudCB8IGI7CisgICAgYm9vbCBhZGRBbmRSZXR1cm5J
c05ld0VudHJ5KEluZGV4VHlwZSB1LCBJbmRleFR5cGUgdikKKyAgICB7CisgICAgICAgIC8vIE5v
dGU6IHdlIGNvdWxkIGRvIG9ubHkgb25lIHF1aWNrU2V0LCBhdCB0aGUgY29zdCBvZiBvbmUgZXh0
cmEgYnJhbmNoIGluIGV2ZXJ5IGNvbnRhaW5zL2FkZEFuZFJldHVybklzTmV3RW50cnkgKHRvIGVu
Zm9yY2UgdSA8IHYpCisgICAgICAgIGJvb2wgYWxyZWFkeUluID0gbV9iaXRWZWN0b3IucXVpY2tT
ZXQoaW5kZXgodSwgdikpOworICAgICAgICBib29sIGFscmVhZHlJbjIgPSBtX2JpdFZlY3Rvci5x
dWlja1NldChpbmRleCh2LCB1KSk7CisgICAgICAgIEFTU0VSVF9VTlVTRUQoYWxyZWFkeUluMiwg
YWxyZWFkeUluID09IGFscmVhZHlJbjIpOworICAgICAgICBtX3NpemUgKz0gIWFscmVhZHlJbjsK
KyAgICAgICAgcmV0dXJuICFhbHJlYWR5SW47CiAgICAgfQogCi0gICAgSW50ZXJmZXJlbmNlRWRn
ZShjb25zdCBJbnRlcmZlcmVuY2VFZGdlPEluZGV4SW1wbFR5cGUsIFBhaXJTdG9yYWdlVHlwZT4m
IG90aGVyKQotICAgICAgICA6IG1fdmFsdWUob3RoZXIubV92YWx1ZSkKKyAgICB2b2lkIGNsZWFy
KCkKICAgICB7CisgICAgICAgIG1fYml0VmVjdG9yLmNsZWFyQWxsKCk7CisgICAgICAgIG1fc2l6
ZSA9IDA7CiAgICAgfQogCisgICAgdm9pZCBzZXRNYXhUbXBJbmRleCh1bnNpZ25lZCBuKQorICAg
IHsKKyAgICAgICAgQVNTRVJUKG4gPCBzdGQ6Om51bWVyaWNfbGltaXRzPEluZGV4VHlwZT46Om1h
eCgpKTsKKyAgICAgICAgbV9udW1UbXBzID0gbjsKKyAgICAgICAgbV9iaXRWZWN0b3IuZW5zdXJl
U2l6ZShuKm4pOworICAgIH0KIAotICAgIEludGVyZmVyZW5jZUVkZ2UoV1RGOjpIYXNoVGFibGVE
ZWxldGVkVmFsdWVUeXBlKQotICAgICAgICA6IG1fdmFsdWUoc3RkOjpudW1lcmljX2xpbWl0czxQ
YWlyU3RvcmFnZVR5cGU+OjptYXgoKSkKKyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgRnVuY3Rvcj4K
KyAgICB2b2lkIGZvckVhY2goY29uc3QgRnVuY3RvciYgZnVuY3RvcikKICAgICB7CisgICAgICAg
IGZvciAoSW5kZXhUeXBlIGkgPSAwOyBpIDwgbV9udW1UbXBzOyArK2kpIHsKKyAgICAgICAgICAg
IGZvciAoSW5kZXhUeXBlIGogPSBpICsgMTsgaiA8IG1fbnVtVG1wczsgKytqKSB7CisgICAgICAg
ICAgICAgICAgaWYgKG1fYml0VmVjdG9yLnF1aWNrR2V0KGluZGV4KGksIGopKSkKKyAgICAgICAg
ICAgICAgICAgICAgZnVuY3Rvcih7IGksIGogfSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0K
ICAgICB9CiAKLSAgICBJbmRleFR5cGUgZmlyc3QoKSBjb25zdAorICAgIHVuc2lnbmVkIHNpemUo
KSBjb25zdCB7IHJldHVybiBtX3NpemU7IH0KKworcHJpdmF0ZToKKyAgICB1bnNpZ25lZCBpbmRl
eChJbmRleFR5cGUgaSwgSW5kZXhUeXBlIGopCiAgICAgewotICAgICAgICByZXR1cm4gbV92YWx1
ZSA+PiBTaGlmdEFtb3VudCAmIEluZGV4TWFzazsKKyAgICAgICAgcmV0dXJuIGkgKiBtX251bVRt
cHMgKyBqOwogICAgIH0KIAotICAgIEluZGV4VHlwZSBzZWNvbmQoKSBjb25zdAorICAgIEJpdFZl
Y3RvciBtX2JpdFZlY3RvcjsKKyAgICB1bnNpZ25lZCBtX3NpemUgezB9OworICAgIEluZGV4VHlw
ZSBtX251bVRtcHM7Cit9OworCisjZGVmaW5lIFRFU1RfSU5URVJGRVJFTkNFX1NNQUxMX1NFVF9W
RUNUT1IgMAorI2lmIFRFU1RfSU5URVJGRVJFTkNFX1NNQUxMX1NFVF9WRUNUT1IKK3RlbXBsYXRl
IDx0eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBJbmRleFR5cGU+CitjbGFzcyBJbnN0
cnVtZW50ZWRJbnRlcmZlcmVuY2VHcmFwaCB7CitwdWJsaWM6CisgICAgYm9vbCBjb250YWlucyhJ
bmRleFR5cGUgdSwgSW5kZXhUeXBlIHYpCiAgICAgewotICAgICAgICByZXR1cm4gbV92YWx1ZSAm
IEluZGV4TWFzazsKKyAgICAgICAgYm9vbCBjb250YWluc0luQSA9IG1fc2V0QS5jb250YWlucyh1
LCB2KTsKKyAgICAgICAgYm9vbCBjb250YWluc0luQiA9IG1fc2V0Qi5jb250YWlucyh1LCB2KTsK
KyAgICAgICAgUkVMRUFTRV9BU1NFUlQoY29udGFpbnNJbkEgPT0gY29udGFpbnNJbkIpOworICAg
ICAgICByZXR1cm4gY29udGFpbnNJbkE7CiAgICAgfQogCi0gICAgYm9vbCBvcGVyYXRvcj09KGNv
bnN0IEludGVyZmVyZW5jZUVkZ2UmIG90aGVyKSBjb25zdAorICAgIGJvb2wgYWRkQW5kUmV0dXJu
SXNOZXdFbnRyeShJbmRleFR5cGUgdSwgSW5kZXhUeXBlIHYpCiAgICAgewotICAgICAgICByZXR1
cm4gbV92YWx1ZSA9PSBvdGhlci5tX3ZhbHVlOworICAgICAgICBib29sIGlzTmV3RW50cnlBID0g
bV9zZXRBLmFkZEFuZFJldHVybklzTmV3RW50cnkodSwgdik7CisgICAgICAgIGJvb2wgaXNOZXdF
bnRyeUIgPSBtX3NldEIuYWRkQW5kUmV0dXJuSXNOZXdFbnRyeSh1LCB2KTsKKyAgICAgICAgUkVM
RUFTRV9BU1NFUlQoaXNOZXdFbnRyeUEgPT0gaXNOZXdFbnRyeUIpOworICAgICAgICByZXR1cm4g
aXNOZXdFbnRyeUE7CiAgICAgfQogCi0gICAgSW50ZXJmZXJlbmNlRWRnZSYgb3BlcmF0b3I9KGNv
bnN0IEludGVyZmVyZW5jZUVkZ2UmIG90aGVyKQorICAgIHZvaWQgY2xlYXIoKQogICAgIHsKLSAg
ICAgICAgbV92YWx1ZSA9IG90aGVyLm1fdmFsdWU7Ci0gICAgICAgIHJldHVybiAqdGhpczsKKyAg
ICAgICAgbV9zZXRBLmNsZWFyKCk7CisgICAgICAgIG1fc2V0Qi5jbGVhcigpOwogICAgIH0KLSAg
ICBib29sIGlzSGFzaFRhYmxlRGVsZXRlZFZhbHVlKCkgY29uc3QKKworICAgIHZvaWQgc2V0TWF4
VG1wSW5kZXgodW5zaWduZWQgbikKICAgICB7Ci0gICAgICAgIHJldHVybiAqdGhpcyA9PSBJbnRl
cmZlcmVuY2VFZGdlKFdURjo6SGFzaFRhYmxlRGVsZXRlZFZhbHVlKTsKKyAgICAgICAgbV9zZXRB
LnNldE1heFRtcEluZGV4KG4pOworICAgICAgICBtX3NldEIuc2V0TWF4VG1wSW5kZXgobik7CiAg
ICAgfQogCi0gICAgdW5zaWduZWQgaGFzaCgpIGNvbnN0CisgICAgdGVtcGxhdGUgPHR5cGVuYW1l
IEZ1bmN0b3I+CisgICAgdm9pZCBmb3JFYWNoKGNvbnN0IEZ1bmN0b3ImIGZ1bmN0b3IpCiAgICAg
ewotICAgICAgICByZXR1cm4gV1RGOjpJbnRIYXNoPFBhaXJTdG9yYWdlVHlwZT46Omhhc2gobV92
YWx1ZSk7CisgICAgICAgIG1fc2V0QS5mb3JFYWNoKGZ1bmN0b3IpOwogICAgIH0KIAotICAgIHZv
aWQgZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAorICAgIHVuc2lnbmVkIHNpemUoKSBjb25z
dAogICAgIHsKLSAgICAgICAgb3V0LnByaW50KGZpcnN0KCksICI8PT4iLCBzZWNvbmQoKSk7Cisg
ICAgICAgIHVuc2lnbmVkIHNpemVBID0gbV9zZXRBLnNpemUoKTsKKyAgICAgICAgdW5zaWduZWQg
c2l6ZUIgPSBtX3NldEIuc2l6ZSgpOworICAgICAgICBSRUxFQVNFX0FTU0VSVChzaXplQSA9PSBz
aXplQik7CisgICAgICAgIHJldHVybiBzaXplQTsKICAgICB9CiAKIHByaXZhdGU6Ci0gICAgUGFp
clN0b3JhZ2VUeXBlIG1fdmFsdWUgeyAwIH07CisgICAgVCBtX3NldEE7CisgICAgVSBtX3NldEI7
CiB9OworI2VuZGlmCiAKIC8vIFRoZSBBYnN0cmFjdENvbG9yaW5nQWxsb2NhdG9yIGRlZmluZXMg
YWxsIHRoZSBjb2RlIHRoYXQgaXMgaW5kZXBlbmRhbnQKIC8vIGZyb20gdGhlIGJhbmsgb3IgcmVn
aXN0ZXIgYW5kIGNhbiBiZSBzaGFyZWQgd2hlbiBhbGxvY2F0aW5nIHJlZ2lzdGVycy4KLXRlbXBs
YXRlPHR5cGVuYW1lIEluZGV4VHlwZSwgdHlwZW5hbWUgVG1wTWFwcGVyLCB0eXBlbmFtZSBJbnRl
cmZlcmVuY2VFZGdlVHlwZT4KK3RlbXBsYXRlPHR5cGVuYW1lIEluZGV4VHlwZSwgdHlwZW5hbWUg
SW50ZXJmZXJlbmNlU2V0LCBCYW5rIGJhbms+CiBjbGFzcyBBYnN0cmFjdENvbG9yaW5nQWxsb2Nh
dG9yIHsKIHB1YmxpYzoKLSAgICBBYnN0cmFjdENvbG9yaW5nQWxsb2NhdG9yKENvZGUmIGNvZGUs
IGNvbnN0IFZlY3RvcjxSZWc+JiByZWdzSW5Qcmlvcml0eU9yZGVyLCBJbmRleFR5cGUgbGFzdFBy
ZWNvbG9yZWRSZWdpc3RlckluZGV4LCB1bnNpZ25lZCB0bXBBcnJheVNpemUsIGNvbnN0IEhhc2hT
ZXQ8dW5zaWduZWQ+JiB1bnNwaWxsYWJsZVRtcHMsIGNvbnN0IFVzZUNvdW50czxUbXA+JiB1c2VD
b3VudHMpCisgICAgQWJzdHJhY3RDb2xvcmluZ0FsbG9jYXRvcihDb2RlJiBjb2RlLCBjb25zdCBW
ZWN0b3I8UmVnPiYgcmVnc0luUHJpb3JpdHlPcmRlciwgSW5kZXhUeXBlIGxhc3RQcmVjb2xvcmVk
UmVnaXN0ZXJJbmRleCwgdW5zaWduZWQgdG1wQXJyYXlTaXplLCBjb25zdCBCaXRWZWN0b3ImIHVu
c3BpbGxhYmxlVG1wcywgY29uc3QgVXNlQ291bnRzJiB1c2VDb3VudHMpCiAgICAgICAgIDogbV9y
ZWdzSW5Qcmlvcml0eU9yZGVyKHJlZ3NJblByaW9yaXR5T3JkZXIpCiAgICAgICAgICwgbV9sYXN0
UHJlY29sb3JlZFJlZ2lzdGVySW5kZXgobGFzdFByZWNvbG9yZWRSZWdpc3RlckluZGV4KQogICAg
ICAgICAsIG1fdW5zcGlsbGFibGVUbXBzKHVuc3BpbGxhYmxlVG1wcykKQEAgLTE2MCw2ICsyNjgs
MTQgQEAgcHVibGljOgogICAgIH0KIAogcHJvdGVjdGVkOgorICAgIHVzaW5nIFRtcE1hcHBlciA9
IEFic29sdXRlVG1wTWFwcGVyPGJhbms+OworCisgICAgSW5kZXhUeXBlIHRtcFRvSW5kZXgoVG1w
IHRtcCkgY29uc3QKKyAgICB7CisgICAgICAgIHVuc2lnbmVkIGluZGV4ID0gVG1wTWFwcGVyOjph
YnNvbHV0ZUluZGV4KHRtcCk7CisgICAgICAgIEFTU0VSVChzdGQ6Om51bWVyaWNfbGltaXRzPElu
ZGV4VHlwZT46Om1heCgpID4gaW5kZXgpOworICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8SW5k
ZXhUeXBlPihpbmRleCk7CisgICAgfQogCiAgICAgdW5zaWduZWQgcmVnaXN0ZXJDb3VudCgpIGNv
bnN0IHsgcmV0dXJuIG1fcmVnc0luUHJpb3JpdHlPcmRlci5zaXplKCk7IH0KIApAQCAtMTgwLDcg
KzI5Niw3IEBAIHByb3RlY3RlZDoKIAogICAgIHZvaWQgYWRkVG9TcGlsbCh1bnNpZ25lZCB0b1Nw
aWxsKQogICAgIHsKLSAgICAgICAgaWYgKG1fdW5zcGlsbGFibGVUbXBzLmNvbnRhaW5zKHRvU3Bp
bGwpKQorICAgICAgICBpZiAobV91bnNwaWxsYWJsZVRtcHMucXVpY2tHZXQodG9TcGlsbCkpCiAg
ICAgICAgICAgICByZXR1cm47CiAKICAgICAgICAgbV9zcGlsbFdvcmtsaXN0LmFkZCh0b1NwaWxs
KTsKQEAgLTE5OCwxNSArMzE0LDE1IEBAIHByb3RlY3RlZDoKICAgICAgICAgLy8gQWxsIHByZWNv
bG9yZWQgcmVnaXN0ZXJzIGhhdmUgIGFuICJpbmZpbml0ZSIgZGVncmVlLgogICAgICAgICB1bnNp
Z25lZCBmaXJzdE5vblJlZ0luZGV4ID0gbV9sYXN0UHJlY29sb3JlZFJlZ2lzdGVySW5kZXggKyAx
OwogICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgZmlyc3ROb25SZWdJbmRleDsgKytp
KQotICAgICAgICAgICAgbV9kZWdyZWVzW2ldID0gc3RkOjpudW1lcmljX2xpbWl0czx1bnNpZ25l
ZD46Om1heCgpOworICAgICAgICAgICAgbV9kZWdyZWVzW2ldID0gc3RkOjpudW1lcmljX2xpbWl0
czxJbmRleFR5cGU+OjptYXgoKTsKIAotICAgICAgICBtZW1zZXQobV9kZWdyZWVzLmRhdGEoKSAr
IGZpcnN0Tm9uUmVnSW5kZXgsIDAsICh0bXBBcnJheVNpemUgLSBmaXJzdE5vblJlZ0luZGV4KSAq
IHNpemVvZih1bnNpZ25lZCkpOworICAgICAgICBtZW1zZXQobV9kZWdyZWVzLmRhdGEoKSArIGZp
cnN0Tm9uUmVnSW5kZXgsIDAsICh0bXBBcnJheVNpemUgLSBmaXJzdE5vblJlZ0luZGV4KSAqIHNp
emVvZihJbmRleFR5cGUpKTsKICAgICB9CiAKICAgICB2b2lkIGFkZEVkZ2VEaXN0aW5jdChJbmRl
eFR5cGUgYSwgSW5kZXhUeXBlIGIpCiAgICAgewogICAgICAgICBBU1NFUlQoYSAhPSBiKTsKLSAg
ICAgICAgYm9vbCBpc05ld0VkZ2UgPSBhZGRJbnRlcmZlcmVuY2VFZGdlKEludGVyZmVyZW5jZUVk
Z2VUeXBlKGEsIGIpKTsKKyAgICAgICAgYm9vbCBpc05ld0VkZ2UgPSBhZGRJbnRlcmZlcmVuY2VF
ZGdlKGEsIGIpOwogICAgICAgICBpZiAoaXNOZXdFZGdlKSB7CiAgICAgICAgICAgICBpZiAoIWlz
UHJlY29sb3JlZChhKSkgewogICAgICAgICAgICAgICAgIEFTU0VSVCghbV9hZGphY2VuY3lMaXN0
W2FdLmNvbnRhaW5zKGIpKTsKQEAgLTIyNSw3ICszNDEsNyBAQCBwcm90ZWN0ZWQ6CiAgICAgYm9v
bCBhZGRFZGdlRGlzdGluY3RXaXRob3V0RGVncmVlQ2hhbmdlKEluZGV4VHlwZSBhLCBJbmRleFR5
cGUgYikKICAgICB7CiAgICAgICAgIEFTU0VSVChhICE9IGIpOwotICAgICAgICBib29sIGlzTmV3
RWRnZSA9IGFkZEludGVyZmVyZW5jZUVkZ2UoSW50ZXJmZXJlbmNlRWRnZVR5cGUoYSwgYikpOwor
ICAgICAgICBib29sIGlzTmV3RWRnZSA9IGFkZEludGVyZmVyZW5jZUVkZ2UoYSwgYik7CiAgICAg
ICAgIGlmIChpc05ld0VkZ2UpIHsKICAgICAgICAgICAgIGlmICghaXNQcmVjb2xvcmVkKGEpKSB7
CiAgICAgICAgICAgICAgICAgQVNTRVJUKCFtX2FkamFjZW5jeUxpc3RbYV0uY29udGFpbnMoYikp
OwpAQCAtMzQwLDcgKzQ1Niw3IEBAIHByb3RlY3RlZDoKICAgICAgICAgICAgIGlmICghaXNQcmVj
b2xvcmVkKGFkamFjZW50VG1wSW5kZXgpCiAgICAgICAgICAgICAgICAgJiYgIWhhc0JlZW5TaW1w
bGlmaWVkKGFkamFjZW50VG1wSW5kZXgpCiAgICAgICAgICAgICAgICAgJiYgbV9kZWdyZWVzW2Fk
amFjZW50VG1wSW5kZXhdID49IHJlZ2lzdGVyQ291bnQoKQotICAgICAgICAgICAgICAgICYmICFo
YXNJbnRlcmZlcmVuY2VFZGdlKEludGVyZmVyZW5jZUVkZ2VUeXBlKHUsIGFkamFjZW50VG1wSW5k
ZXgpKSkKKyAgICAgICAgICAgICAgICAmJiAhaGFzSW50ZXJmZXJlbmNlRWRnZSh1LCBhZGphY2Vu
dFRtcEluZGV4KSkKICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIH0KICAg
ICAgICAgcmV0dXJuIHRydWU7CkBAIC0zNzUsNTIgKzQ5MSw0MCBAQCBwcm90ZWN0ZWQ6CiAgICAg
ICAgIGF1dG8gaXRlcmF0b3IgPSBtX3NwaWxsV29ya2xpc3QuYmVnaW4oKTsKIAogICAgICAgICBS
RUxFQVNFX0FTU0VSVF9XSVRIX01FU1NBR0UoaXRlcmF0b3IgIT0gbV9zcGlsbFdvcmtsaXN0LmVu
ZCgpLCAic2VsZWN0U3BpbGwoKSBjYWxsZWQgd2hlbiB0aGVyZSB3YXMgbm8gc3BpbGwuIik7Ci0g
ICAgICAgIFJFTEVBU0VfQVNTRVJUX1dJVEhfTUVTU0FHRSghbV91bnNwaWxsYWJsZVRtcHMuY29u
dGFpbnMoKml0ZXJhdG9yKSwgInRyeWluZyB0byBzcGlsbCB1bnNwaWxsYWJsZSB0bXAiKTsKLQot
ICAgICAgICAvLyBIaWdoZXIgc2NvcmUgbWVhbnMgbW9yZSBkZXNpcmFibGUgdG8gc3BpbGwuIExv
d2VyIHNjb3JlcyBtYXhpbWl6ZSB0aGUgbGlrZWxpaG9vZCB0aGF0IGEgdG1wCi0gICAgICAgIC8v
IGdldHMgYSByZWdpc3Rlci4KLSAgICAgICAgYXV0byBzY29yZSA9IFsmXSAoVG1wIHRtcCkgLT4g
ZG91YmxlIHsKLSAgICAgICAgICAgIC8vIEFpciBleHBvc2VzIHRoZSBjb25jZXB0IG9mICJmYXN0
IHRtcHMiLCBhbmQgd2UgaW50ZXJwcmV0IHRoYXQgdG8gbWVhbiB0aGF0IHRoZSB0bXAKLSAgICAg
ICAgICAgIC8vIHNob3VsZCBhbHdheXMgYmUgaW4gYSByZWdpc3Rlci4KLSAgICAgICAgICAgIGlm
IChtX2NvZGUuaXNGYXN0VG1wKHRtcCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAg
ICAgICAgICAKLSAgICAgICAgICAgIC8vIEFsbCBlbHNlIGJlaW5nIGVxdWFsLCB0aGUgc2NvcmUg
c2hvdWxkIGJlIGRpcmVjdGx5IHJlbGF0ZWQgdG8gdGhlIGRlZ3JlZS4KLSAgICAgICAgICAgIGRv
dWJsZSBkZWdyZWUgPSBzdGF0aWNfY2FzdDxkb3VibGU+KG1fZGVncmVlc1tUbXBNYXBwZXI6OmFi
c29sdXRlSW5kZXgodG1wKV0pOwotCi0gICAgICAgICAgICAvLyBBbGwgZWxzZSBiZWluZyBlcXVh
bCwgdGhlIHNjb3JlIHNob3VsZCBiZSBpbnZlcnNlbHkgcmVsYXRlZCB0byB0aGUgbnVtYmVyIG9m
IHdhcm0gdXNlcyBhbmQKLSAgICAgICAgICAgIC8vIGRlZnMuCi0gICAgICAgICAgICBjb25zdCBV
c2VDb3VudHM8VG1wPjo6Q291bnRzKiBjb3VudHMgPSBtX3VzZUNvdW50c1t0bXBdOwotICAgICAg
ICAgICAgaWYgKCFjb3VudHMpCi0gICAgICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bnVtZXJpY19s
aW1pdHM8ZG91YmxlPjo6aW5maW5pdHkoKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgZG91
YmxlIHVzZXMgPSBjb3VudHMtPm51bVdhcm1Vc2VzICsgY291bnRzLT5udW1EZWZzOworICAgICAg
ICBSRUxFQVNFX0FTU0VSVF9XSVRIX01FU1NBR0UoIW1fdW5zcGlsbGFibGVUbXBzLmdldCgqaXRl
cmF0b3IpLCAidHJ5aW5nIHRvIHNwaWxsIHVuc3BpbGxhYmxlIHRtcCIpOwogCi0gICAgICAgICAg
ICAvLyBJZiBpdCdzIGEgY29uc3RhbnQsIHRoZW4gaXQncyBub3QgYXMgYmFkIHRvIHNwaWxsLiBX
ZSBjYW4gcmVtYXRlcmlhbGl6ZSBpdCBpbiBtYW55Ci0gICAgICAgICAgICAvLyBjYXNlcy4KLSAg
ICAgICAgICAgIGlmIChjb3VudHMtPm51bUNvbnN0RGVmcyA9PSAxICYmIGNvdW50cy0+bnVtRGVm
cyA9PSAxKQotICAgICAgICAgICAgICAgIHVzZXMgLz0gMjsKKyAgICAgICAgSW5kZXhUeXBlIHZp
Y3RpbUluZGV4ID0gKml0ZXJhdG9yOworICAgICAgICBmbG9hdCBtYXhTY29yZSA9IDA7CiAKLSAg
ICAgICAgICAgIHJldHVybiBkZWdyZWUgLyB1c2VzOwotICAgICAgICB9OworICAgICAgICBmb3Ig
KDtpdGVyYXRvciAhPSBtX3NwaWxsV29ya2xpc3QuZW5kKCk7ICsraXRlcmF0b3IpIHsKKyAgICAg
ICAgICAgIEluZGV4VHlwZSBpbmRleCA9ICppdGVyYXRvcjsKIAotICAgICAgICBhdXRvIHZpY3Rp
bUl0ZXJhdG9yID0gaXRlcmF0b3I7Ci0gICAgICAgIGRvdWJsZSBtYXhTY29yZSA9IHNjb3JlKFRt
cE1hcHBlcjo6dG1wRnJvbUFic29sdXRlSW5kZXgoKml0ZXJhdG9yKSk7CisgICAgICAgICAgICBm
bG9hdCB1c2VzID0gbV91c2VDb3VudHMubnVtV2FybVVzZXNBbmREZWZzPGJhbms+KGluZGV4KTsK
KyAgICAgICAgICAgIGlmICghdXNlcykgeworICAgICAgICAgICAgICAgIHZpY3RpbUluZGV4ID0g
aW5kZXg7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisKKyAgICAgICAg
ICAgIC8vIEhpZ2hlciBzY29yZSBtZWFucyBtb3JlIGRlc2lyYWJsZSB0byBzcGlsbC4gTG93ZXIg
c2NvcmVzIG1heGltaXplIHRoZSBsaWtlbGlob29kIHRoYXQgYSB0bXAKKyAgICAgICAgICAgIC8v
IGdldHMgYSByZWdpc3Rlci4KKyAgICAgICAgICAgIGZsb2F0IGRlZ3JlZSA9IHN0YXRpY19jYXN0
PGZsb2F0PihtX2RlZ3JlZXNbaW5kZXhdKTsKKyAgICAgICAgICAgIGZsb2F0IHRtcFNjb3JlID0g
ZGVncmVlIC8gdXNlczsKKworICAgICAgICAgICAgLy8gSWYgaXQncyBhIGNvbnN0YW50LCB0aGVu
IGl0J3Mgbm90IGFzIGJhZCB0byBzcGlsbC4gV2UgY2FuIHJlbWF0ZXJpYWxpemUgaXQgaW4gbWFu
eQorICAgICAgICAgICAgLy8gY2FzZXMuCisgICAgICAgICAgICBpZiAobV91c2VDb3VudHMuaXND
b25zdERlZjxiYW5rPihpbmRleCkpCisgICAgICAgICAgICAgICAgdG1wU2NvcmUgKj0gMjsKIAot
ICAgICAgICArK2l0ZXJhdG9yOwotICAgICAgICBmb3IgKDtpdGVyYXRvciAhPSBtX3NwaWxsV29y
a2xpc3QuZW5kKCk7ICsraXRlcmF0b3IpIHsKLSAgICAgICAgICAgIGRvdWJsZSB0bXBTY29yZSA9
IHNjb3JlKFRtcE1hcHBlcjo6dG1wRnJvbUFic29sdXRlSW5kZXgoKml0ZXJhdG9yKSk7CiAgICAg
ICAgICAgICBpZiAodG1wU2NvcmUgPiBtYXhTY29yZSkgewotICAgICAgICAgICAgICAgIEFTU0VS
VCghbV91bnNwaWxsYWJsZVRtcHMuY29udGFpbnMoKml0ZXJhdG9yKSk7Ci0gICAgICAgICAgICAg
ICAgdmljdGltSXRlcmF0b3IgPSBpdGVyYXRvcjsKKyAgICAgICAgICAgICAgICB2aWN0aW1JbmRl
eCA9IGluZGV4OwogICAgICAgICAgICAgICAgIG1heFNjb3JlID0gdG1wU2NvcmU7CiAgICAgICAg
ICAgICB9CiAgICAgICAgIH0KIAotICAgICAgICBJbmRleFR5cGUgdmljdGltSW5kZXggPSAqdmlj
dGltSXRlcmF0b3I7CisgICAgICAgIEFTU0VSVCghbV91bnNwaWxsYWJsZVRtcHMuZ2V0KHZpY3Rp
bUluZGV4KSk7CisgICAgICAgIEFTU0VSVCghaXNQcmVjb2xvcmVkKHZpY3RpbUluZGV4KSk7CiAg
ICAgICAgIGlmICh0cmFjZURlYnVnKQogICAgICAgICAgICAgZGF0YUxvZ0xuKCJTZWxlY3Rpbmcg
c3BpbGwgIiwgdmljdGltSW5kZXgpOwotICAgICAgICBBU1NFUlQoIWlzUHJlY29sb3JlZCh2aWN0
aW1JbmRleCkpOwogICAgICAgICByZXR1cm4gdmljdGltSW5kZXg7CiAgICAgfQogCkBAIC01MTIs
MTQgKzYxNiwxNCBAQCBwcm90ZWN0ZWQ6CiAgICAgICAgICAgICBtX2NvbG9yZWRUbXAuY2xlYXIo
KTsKICAgICB9CiAKLSAgICBib29sIGFkZEludGVyZmVyZW5jZUVkZ2UoSW50ZXJmZXJlbmNlRWRn
ZVR5cGUgZWRnZSkKKyAgICBib29sIGFkZEludGVyZmVyZW5jZUVkZ2UoSW5kZXhUeXBlIHUsIElu
ZGV4VHlwZSB2KQogICAgIHsKLSAgICAgICAgcmV0dXJuIG1faW50ZXJmZXJlbmNlRWRnZXMuYWRk
KGVkZ2UpLmlzTmV3RW50cnk7CisgICAgICAgIHJldHVybiBtX2ludGVyZmVyZW5jZUVkZ2VzLmFk
ZEFuZFJldHVybklzTmV3RW50cnkodSwgdik7CiAgICAgfQogCi0gICAgYm9vbCBoYXNJbnRlcmZl
cmVuY2VFZGdlKEludGVyZmVyZW5jZUVkZ2VUeXBlIGVkZ2UpCisgICAgYm9vbCBoYXNJbnRlcmZl
cmVuY2VFZGdlKEluZGV4VHlwZSB1LCBJbmRleFR5cGUgdikKICAgICB7Ci0gICAgICAgIHJldHVy
biBtX2ludGVyZmVyZW5jZUVkZ2VzLmNvbnRhaW5zKGVkZ2UpOworICAgICAgICByZXR1cm4gbV9p
bnRlcmZlcmVuY2VFZGdlcy5jb250YWlucyh1LCB2KTsKICAgICB9CiAKICAgICB2b2lkIGNsZWFy
SW50ZXJmZXJlbmNlRWRnZXMoKQpAQCAtNTMyLDEwICs2MzYsMTEgQEAgcHJvdGVjdGVkOgogICAg
ICAgICBvdXQucHJpbnQoImdyYXBoIEludGVyZmVyZW5jZUdyYXBoIHsgXG4iKTsKIAogICAgICAg
ICBIYXNoU2V0PFRtcD4gdG1wc1dpdGhJbnRlcmZlcmVuY2VzOwotICAgICAgICBmb3IgKGNvbnN0
IGF1dG8mIGVkZ2UgOiBtX2ludGVyZmVyZW5jZUVkZ2VzKSB7Ci0gICAgICAgICAgICB0bXBzV2l0
aEludGVyZmVyZW5jZXMuYWRkKFRtcE1hcHBlcjo6dG1wRnJvbUFic29sdXRlSW5kZXgoZWRnZS5m
aXJzdCgpKSk7Ci0gICAgICAgICAgICB0bXBzV2l0aEludGVyZmVyZW5jZXMuYWRkKFRtcE1hcHBl
cjo6dG1wRnJvbUFic29sdXRlSW5kZXgoZWRnZS5zZWNvbmQoKSkpOwotICAgICAgICB9CisKKyAg
ICAgICAgbV9pbnRlcmZlcmVuY2VFZGdlcy5mb3JFYWNoKFsmdG1wc1dpdGhJbnRlcmZlcmVuY2Vz
XSAoc3RkOjpwYWlyPEluZGV4VHlwZSwgSW5kZXhUeXBlPiBlZGdlKSB7CisgICAgICAgICAgICB0
bXBzV2l0aEludGVyZmVyZW5jZXMuYWRkKFRtcE1hcHBlcjo6dG1wRnJvbUFic29sdXRlSW5kZXgo
ZWRnZS5maXJzdCkpOworICAgICAgICAgICAgdG1wc1dpdGhJbnRlcmZlcmVuY2VzLmFkZChUbXBN
YXBwZXI6OnRtcEZyb21BYnNvbHV0ZUluZGV4KGVkZ2Uuc2Vjb25kKSk7CisgICAgICAgIH0pOwog
CiAgICAgICAgIGZvciAoY29uc3QgYXV0byYgdG1wIDogdG1wc1dpdGhJbnRlcmZlcmVuY2VzKSB7
CiAgICAgICAgICAgICB1bnNpZ25lZCB0bXBJbmRleCA9IFRtcE1hcHBlcjo6YWJzb2x1dGVJbmRl
eCh0bXApOwpAQCAtNTQ1LDIwICs2NTAsMjEgQEAgcHJvdGVjdGVkOgogICAgICAgICAgICAgICAg
IG91dC5wcmludCgiICAgICIsIHRtcC5pbnRlcm5hbFZhbHVlKCksICIgW2xhYmVsPVwiIiwgdG1w
LCAiXCJdO1xuIik7CiAgICAgICAgIH0KIAotICAgICAgICBmb3IgKGNvbnN0IGF1dG8mIGVkZ2Ug
OiBtX2ludGVyZmVyZW5jZUVkZ2VzKQotICAgICAgICAgICAgb3V0LnByaW50KCIgICAgIiwgZWRn
ZS5maXJzdCgpLCAiIC0tICIsIGVkZ2Uuc2Vjb25kKCksICI7XG4iKTsKKyAgICAgICAgbV9pbnRl
cmZlcmVuY2VFZGdlcy5mb3JFYWNoKFsmb3V0XSAoc3RkOjpwYWlyPEluZGV4VHlwZSwgSW5kZXhU
eXBlPiBlZGdlKSB7CisgICAgICAgICAgICBvdXQucHJpbnQoIiAgICAiLCBlZGdlLmZpcnN0LCAi
IC0tICIsIGVkZ2Uuc2Vjb25kLCAiO1xuIik7CisgICAgICAgIH0pOwogICAgICAgICBvdXQucHJp
bnQoIn1cbiIpOwogICAgIH0KIAogICAgIFZlY3RvcjxSZWc+IG1fcmVnc0luUHJpb3JpdHlPcmRl
cjsKICAgICBJbmRleFR5cGUgbV9sYXN0UHJlY29sb3JlZFJlZ2lzdGVySW5kZXggeyAwIH07CiAK
LSAgICB0eXBlbmFtZSBJbnRlcmZlcmVuY2VFZGdlVHlwZTo6SW50ZXJmZXJlbmNlU2V0IG1faW50
ZXJmZXJlbmNlRWRnZXM7CisgICAgSW50ZXJmZXJlbmNlU2V0IG1faW50ZXJmZXJlbmNlRWRnZXM7
CiAKICAgICBWZWN0b3I8VmVjdG9yPEluZGV4VHlwZSwgMCwgVW5zYWZlVmVjdG9yT3ZlcmZsb3cs
IDQ+LCAwLCBVbnNhZmVWZWN0b3JPdmVyZmxvdz4gbV9hZGphY2VuY3lMaXN0OwogICAgIFZlY3Rv
cjxJbmRleFR5cGUsIDAsIFVuc2FmZVZlY3Rvck92ZXJmbG93PiBtX2RlZ3JlZXM7CiAKLSAgICB1
c2luZyBJbmRleFR5cGVTZXQgPSBIYXNoU2V0PEluZGV4VHlwZSwgRGVmYXVsdEhhc2g8SW5kZXhU
eXBlPiwgV1RGOjpVbnNpZ25lZFdpdGhaZXJvS2V5SGFzaFRyYWl0czxJbmRleFR5cGU+PjsKKyAg
ICB1c2luZyBJbmRleFR5cGVTZXQgPSBTbWFsbFNldDxJbmRleFR5cGUsIEludEhhc2g8SW5kZXhU
eXBlPj47CiAKICAgICBIYXNoTWFwPEluZGV4VHlwZSwgSW5kZXhUeXBlU2V0LCBEZWZhdWx0SGFz
aDxJbmRleFR5cGU+LCBXVEY6OlVuc2lnbmVkV2l0aFplcm9LZXlIYXNoVHJhaXRzPEluZGV4VHlw
ZT4+IG1fYmlhc2VzOwogCkBAIC01NzEsNyArNjc3LDcgQEAgcHJvdGVjdGVkOgogICAgIFZlY3Rv
cjxNb3ZlT3BlcmFuZHMsIDAsIFVuc2FmZVZlY3Rvck92ZXJmbG93PiBtX2NvYWxlc2NpbmdDYW5k
aWRhdGVzOwogCiAgICAgLy8gTGlzdCBvZiBldmVyeSBtb3ZlIGluc3RydWN0aW9uIGFzc29jaWF0
ZWQgd2l0aCBhIFRtcC4KLSAgICBWZWN0b3I8SW5kZXhUeXBlU2V0PiBtX21vdmVMaXN0OworICAg
IFZlY3RvcjxTbWFsbFNldDx1bnNpZ25lZCwgSW50SGFzaDxJbmRleFR5cGU+Pj4gbV9tb3ZlTGlz
dDsKIAogICAgIC8vIENvbG9ycy4KICAgICBWZWN0b3I8UmVnLCAwLCBVbnNhZmVWZWN0b3JPdmVy
Zmxvdz4gbV9jb2xvcmVkVG1wOwpAQCAtNTk1LDE3ICs3MDEsMTggQEAgcHJvdGVjdGVkOgogICAg
IC8vIFRoZSBtYXBwaW5nIG9mIFRtcCB0byB0aGVpciBhbGlhcyBmb3IgTW92ZXMgdGhhdCBhcmUg
YWx3YXlzIGNvYWxlc2NpbmcgcmVnYXJkbGVzcyBvZiBzcGlsbGluZy4KICAgICBWZWN0b3I8SW5k
ZXhUeXBlLCAwLCBVbnNhZmVWZWN0b3JPdmVyZmxvdz4gbV9jb2FsZXNjZWRUbXBzQXRTcGlsbDsK
IAotICAgIGNvbnN0IEhhc2hTZXQ8dW5zaWduZWQ+JiBtX3Vuc3BpbGxhYmxlVG1wczsKLSAgICBj
b25zdCBVc2VDb3VudHM8VG1wPiYgbV91c2VDb3VudHM7CisgICAgY29uc3QgQml0VmVjdG9yJiBt
X3Vuc3BpbGxhYmxlVG1wczsKKyAgICBjb25zdCBVc2VDb3VudHMmIG1fdXNlQ291bnRzOwogICAg
IENvZGUmIG1fY29kZTsKIAogICAgIFZlY3RvcjxUbXAsIDQ+IG1fcGlubmVkUmVnczsKIH07CiAK
LXRlbXBsYXRlIDx0eXBlbmFtZSBJbmRleFR5cGUsIHR5cGVuYW1lIFRtcE1hcHBlciwgdHlwZW5h
bWUgSW50ZXJmZXJlbmNlRWRnZT4KLWNsYXNzIEJyaWdncyA6IHB1YmxpYyBBYnN0cmFjdENvbG9y
aW5nQWxsb2NhdG9yPEluZGV4VHlwZSwgVG1wTWFwcGVyLCBJbnRlcmZlcmVuY2VFZGdlPiB7Ci0g
ICAgdXNpbmcgQmFzZSA9IEFic3RyYWN0Q29sb3JpbmdBbGxvY2F0b3I8SW5kZXhUeXBlLCBUbXBN
YXBwZXIsIEludGVyZmVyZW5jZUVkZ2U+OwordGVtcGxhdGUgPHR5cGVuYW1lIEluZGV4VHlwZSwg
dHlwZW5hbWUgSW50ZXJmZXJlbmNlU2V0LCBCYW5rIGJhbms+CitjbGFzcyBCcmlnZ3MgOiBwdWJs
aWMgQWJzdHJhY3RDb2xvcmluZ0FsbG9jYXRvcjxJbmRleFR5cGUsIEludGVyZmVyZW5jZVNldCwg
YmFuaz4geworICAgIHVzaW5nIEJhc2UgPSBBYnN0cmFjdENvbG9yaW5nQWxsb2NhdG9yPEluZGV4
VHlwZSwgSW50ZXJmZXJlbmNlU2V0LCBiYW5rPjsKIHByb3RlY3RlZDoKKyAgICB1c2luZyBUbXBN
YXBwZXIgPSB0eXBlbmFtZSBCYXNlOjpUbXBNYXBwZXI7CiAgICAgdXNpbmcgQmFzZTo6bV9pc09u
U2VsZWN0U3RhY2s7CiAgICAgdXNpbmcgQmFzZTo6bV9zZWxlY3RTdGFjazsKICAgICB1c2luZyBC
YXNlOjptX3NpbXBsaWZ5V29ya2xpc3Q7CkBAIC02MzUsMTEgKzc0MiwxMiBAQCBwcm90ZWN0ZWQ6
CiAgICAgdXNpbmcgQmFzZTo6aGFzQmVlblNpbXBsaWZpZWQ7CiAgICAgdXNpbmcgQmFzZTo6YWRk
VG9TcGlsbDsKICAgICB1c2luZyBCYXNlOjphZGRCaWFzOworICAgIHVzaW5nIEJhc2U6Om1faW50
ZXJmZXJlbmNlRWRnZXM7CiAgICAgdXNpbmcgQmFzZTo6bV9waW5uZWRSZWdzOwogICAgIHVzaW5n
IEJhc2U6Om1fcmVnc0luUHJpb3JpdHlPcmRlcjsKIAogcHVibGljOgotICAgIEJyaWdncyhDb2Rl
JiBjb2RlLCBjb25zdCBWZWN0b3I8UmVnPiYgcmVnc0luUHJpb3JpdHlPcmRlciwgSW5kZXhUeXBl
IGxhc3RQcmVjb2xvcmVkUmVnaXN0ZXJJbmRleCwgdW5zaWduZWQgdG1wQXJyYXlTaXplLCBjb25z
dCBIYXNoU2V0PHVuc2lnbmVkPiYgdW5zcGlsbGFibGVUbXBzLCBjb25zdCBVc2VDb3VudHM8VG1w
PiYgdXNlQ291bnRzKQorICAgIEJyaWdncyhDb2RlJiBjb2RlLCBjb25zdCBWZWN0b3I8UmVnPiYg
cmVnc0luUHJpb3JpdHlPcmRlciwgSW5kZXhUeXBlIGxhc3RQcmVjb2xvcmVkUmVnaXN0ZXJJbmRl
eCwgdW5zaWduZWQgdG1wQXJyYXlTaXplLCBjb25zdCBCaXRWZWN0b3ImIHVuc3BpbGxhYmxlVG1w
cywgY29uc3QgVXNlQ291bnRzJiB1c2VDb3VudHMpCiAgICAgICAgIDogQmFzZShjb2RlLCByZWdz
SW5Qcmlvcml0eU9yZGVyLCBsYXN0UHJlY29sb3JlZFJlZ2lzdGVySW5kZXgsIHRtcEFycmF5U2l6
ZSwgdW5zcGlsbGFibGVUbXBzLCB1c2VDb3VudHMpCiAgICAgewogICAgIH0KQEAgLTY5MSw3ICs3
OTksNyBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIHVuc2ln
bmVkIGRlZ3JlZSA9IG1fZGVncmVlc1tpXTsKICAgICAgICAgICAgICAgICBpZiAoZGVncmVlID49
IHJlZ2lzdGVyQ291bnQpIHsKLSAgICAgICAgICAgICAgICAgICAgQVNTRVJUKG1fdW5zcGlsbGFi
bGVUbXBzLmNvbnRhaW5zKGkpIHx8IG1fc3BpbGxXb3JrbGlzdC5jb250YWlucyhpKSk7CisgICAg
ICAgICAgICAgICAgICAgIEFTU0VSVChtX3Vuc3BpbGxhYmxlVG1wcy5nZXQoaSkgfHwgbV9zcGls
bFdvcmtsaXN0LmNvbnRhaW5zKGkpKTsKICAgICAgICAgICAgICAgICAgICAgQVNTRVJUKCFtX3Np
bXBsaWZ5V29ya2xpc3QuY29udGFpbnMoaSkpOwogICAgICAgICAgICAgICAgICAgICBjb250aW51
ZTsKICAgICAgICAgICAgICAgICB9CkBAIC03NDcsOSArODU1LDcgQEAgcHJvdGVjdGVkOgogICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9CiAKLSAgICAgICAgaWYgKGlzUHJlY29s
b3JlZCh2KQotICAgICAgICAgICAgfHwgaGFzSW50ZXJmZXJlbmNlRWRnZShJbnRlcmZlcmVuY2VF
ZGdlKHUsIHYpKSkgewotCisgICAgICAgIGlmIChpc1ByZWNvbG9yZWQodikgfHwgaGFzSW50ZXJm
ZXJlbmNlRWRnZSh1LCB2KSkgewogICAgICAgICAgICAgLy8gTm8gbmVlZCB0byBldmVyIGNvbnNp
ZGVyIHRoaXMgbW92ZSBhZ2FpbiBpZiBpdCBpbnRlcmZlcmVzLgogICAgICAgICAgICAgLy8gTm8g
Y29hbGVzY2luZyB3aWxsIHJlbW92ZSB0aGUgaW50ZXJmZXJlbmNlLgogICAgICAgICAgICAgbW92
ZUluZGV4ID0gVUlOVF9NQVg7CkBAIC03ODgsNyArODk0LDggQEAgcHJvdGVjdGVkOgogICAgICAg
ICBtX2NvYWxlc2NlZFRtcHNbdl0gPSB1OwogCiAgICAgICAgIGF1dG8mIHZNb3ZlcyA9IG1fbW92
ZUxpc3Rbdl07Ci0gICAgICAgIG1fbW92ZUxpc3RbdV0uYWRkKHZNb3Zlcy5iZWdpbigpLCB2TW92
ZXMuZW5kKCkpOworICAgICAgICBmb3IgKHVuc2lnbmVkIG1vdmUgOiB2TW92ZXMpCisgICAgICAg
ICAgICBtX21vdmVMaXN0W3VdLmFkZChtb3ZlKTsKIAogICAgICAgICBmb3JFYWNoQWRqYWNlbnQo
diwgW3RoaXMsIHVdIChJbmRleFR5cGUgYWRqYWNlbnRUbXBJbmRleCkgewogICAgICAgICAgICAg
aWYgKGFkZEVkZ2VEaXN0aW5jdFdpdGhvdXREZWdyZWVDaGFuZ2UoYWRqYWNlbnRUbXBJbmRleCwg
dSkpIHsKQEAgLTkzOCw3ICsxMDQ1LDcgQEAgcHJvdGVjdGVkOgogICAgICAgICAgICAgICAgIGRh
dGFMb2dMbigiTW92aW5nIHRtcCAiLCB0bXBJbmRleCwgIiBmcm9tIHNwaWxsIGxpc3QgdG8gc2lt
cGxpZnkgbGlzdCBiZWNhdXNlIGl0J3MgZGVncmVlIGlzIG5vdyBsZXNzIHRoYW4gayIpOwogCiAg
ICAgICAgICAgICBpZiAoQVNTRVJUX0VOQUJMRUQpCi0gICAgICAgICAgICAgICAgQVNTRVJUKG1f
dW5zcGlsbGFibGVUbXBzLmNvbnRhaW5zKHRtcEluZGV4KSB8fCBtX3NwaWxsV29ya2xpc3QuY29u
dGFpbnModG1wSW5kZXgpKTsKKyAgICAgICAgICAgICAgICBBU1NFUlQobV91bnNwaWxsYWJsZVRt
cHMuZ2V0KHRtcEluZGV4KSB8fCBtX3NwaWxsV29ya2xpc3QuY29udGFpbnModG1wSW5kZXgpKTsK
ICAgICAgICAgICAgIG1fc3BpbGxXb3JrbGlzdC5xdWlja0NsZWFyKHRtcEluZGV4KTsKIAogICAg
ICAgICAgICAgQVNTRVJUKCFtX3NpbXBsaWZ5V29ya2xpc3QuY29udGFpbnModG1wSW5kZXgpKTsK
QEAgLTk1NiwxMCArMTA2MywxMSBAQCBwcm90ZWN0ZWQ6CiAgICAgTW92ZVNldCBtX3dvcmtsaXN0
TW92ZXM7CiB9OwogCi10ZW1wbGF0ZSA8dHlwZW5hbWUgSW5kZXhUeXBlLCB0eXBlbmFtZSBUbXBN
YXBwZXIsIHR5cGVuYW1lIEludGVyZmVyZW5jZUVkZ2U+Ci1jbGFzcyBJUkMgOiBwdWJsaWMgQWJz
dHJhY3RDb2xvcmluZ0FsbG9jYXRvcjxJbmRleFR5cGUsIFRtcE1hcHBlciwgSW50ZXJmZXJlbmNl
RWRnZT4gewotICAgIHVzaW5nIEJhc2UgPSBBYnN0cmFjdENvbG9yaW5nQWxsb2NhdG9yPEluZGV4
VHlwZSwgVG1wTWFwcGVyLCBJbnRlcmZlcmVuY2VFZGdlPjsKK3RlbXBsYXRlIDx0eXBlbmFtZSBJ
bmRleFR5cGUsIHR5cGVuYW1lIEludGVyZmVyZW5jZVNldCwgQmFuayBiYW5rPgorY2xhc3MgSVJD
IDogcHVibGljIEFic3RyYWN0Q29sb3JpbmdBbGxvY2F0b3I8SW5kZXhUeXBlLCBJbnRlcmZlcmVu
Y2VTZXQsIGJhbms+IHsKKyAgICB1c2luZyBCYXNlID0gQWJzdHJhY3RDb2xvcmluZ0FsbG9jYXRv
cjxJbmRleFR5cGUsIEludGVyZmVyZW5jZVNldCwgYmFuaz47CiBwcm90ZWN0ZWQ6CisgICAgdXNp
bmcgVG1wTWFwcGVyID0gdHlwZW5hbWUgQmFzZTo6VG1wTWFwcGVyOwogICAgIHVzaW5nIEJhc2U6
Om1faXNPblNlbGVjdFN0YWNrOwogICAgIHVzaW5nIEJhc2U6Om1fc2VsZWN0U3RhY2s7CiAgICAg
dXNpbmcgQmFzZTo6bV9zaW1wbGlmeVdvcmtsaXN0OwpAQCAtOTkxLDExICsxMDk5LDEyIEBAIHBy
b3RlY3RlZDoKICAgICB1c2luZyBCYXNlOjptX2FkamFjZW5jeUxpc3Q7CiAgICAgdXNpbmcgQmFz
ZTo6ZHVtcEludGVyZmVyZW5jZUdyYXBoSW5Eb3Q7CiAgICAgdXNpbmcgQmFzZTo6YWRkQmlhczsK
KyAgICB1c2luZyBCYXNlOjptX2ludGVyZmVyZW5jZUVkZ2VzOwogICAgIHVzaW5nIEJhc2U6Om1f
cGlubmVkUmVnczsKICAgICB1c2luZyBCYXNlOjptX3JlZ3NJblByaW9yaXR5T3JkZXI7CiAKIHB1
YmxpYzoKLSAgICBJUkMoQ29kZSYgY29kZSwgY29uc3QgVmVjdG9yPFJlZz4mIHJlZ3NJblByaW9y
aXR5T3JkZXIsIEluZGV4VHlwZSBsYXN0UHJlY29sb3JlZFJlZ2lzdGVySW5kZXgsIHVuc2lnbmVk
IHRtcEFycmF5U2l6ZSwgY29uc3QgSGFzaFNldDx1bnNpZ25lZD4mIHVuc3BpbGxhYmxlVG1wcywg
Y29uc3QgVXNlQ291bnRzPFRtcD4mIHVzZUNvdW50cykKKyAgICBJUkMoQ29kZSYgY29kZSwgY29u
c3QgVmVjdG9yPFJlZz4mIHJlZ3NJblByaW9yaXR5T3JkZXIsIEluZGV4VHlwZSBsYXN0UHJlY29s
b3JlZFJlZ2lzdGVySW5kZXgsIHVuc2lnbmVkIHRtcEFycmF5U2l6ZSwgY29uc3QgQml0VmVjdG9y
JiB1bnNwaWxsYWJsZVRtcHMsIGNvbnN0IFVzZUNvdW50cyYgdXNlQ291bnRzKQogICAgICAgICA6
IEJhc2UoY29kZSwgcmVnc0luUHJpb3JpdHlPcmRlciwgbGFzdFByZWNvbG9yZWRSZWdpc3Rlcklu
ZGV4LCB0bXBBcnJheVNpemUsIHVuc3BpbGxhYmxlVG1wcywgdXNlQ291bnRzKQogICAgIHsKICAg
ICB9CkBAIC0xMDkzLDggKzEyMDIsNyBAQCBwcm90ZWN0ZWQ6CiAKICAgICAgICAgICAgIGlmICh0
cmFjZURlYnVnKQogICAgICAgICAgICAgICAgIGRhdGFMb2coIiAgICBDb2FsZXNjZWRcbiIpOwot
ICAgICAgICB9IGVsc2UgaWYgKGlzUHJlY29sb3JlZCh2KQotICAgICAgICAgICAgfHwgaGFzSW50
ZXJmZXJlbmNlRWRnZShJbnRlcmZlcmVuY2VFZGdlKHUsIHYpKSkgeworICAgICAgICB9IGVsc2Ug
aWYgKGlzUHJlY29sb3JlZCh2KSB8fCBoYXNJbnRlcmZlcmVuY2VFZGdlKHUsIHYpKSB7CiAgICAg
ICAgICAgICBhZGRXb3JrTGlzdCh1KTsKICAgICAgICAgICAgIGFkZFdvcmtMaXN0KHYpOwogCkBA
IC0xMTMzLDcgKzEyNDEsOCBAQCBwcm90ZWN0ZWQ6CiAgICAgICAgIG1fY29hbGVzY2VkVG1wc1t2
XSA9IHU7CiAKICAgICAgICAgYXV0byYgdk1vdmVzID0gbV9tb3ZlTGlzdFt2XTsKLSAgICAgICAg
bV9tb3ZlTGlzdFt1XS5hZGQodk1vdmVzLmJlZ2luKCksIHZNb3Zlcy5lbmQoKSk7CisgICAgICAg
IGZvciAodW5zaWduZWQgbW92ZSA6IHZNb3ZlcykKKyAgICAgICAgICAgIG1fbW92ZUxpc3RbdV0u
YWRkKG1vdmUpOwogCiAgICAgICAgIGZvckVhY2hBZGphY2VudCh2LCBbdGhpcywgdV0gKEluZGV4
VHlwZSBhZGphY2VudFRtcEluZGV4KSB7CiAgICAgICAgICAgICBpZiAoYWRkRWRnZURpc3RpbmN0
V2l0aG91dERlZ3JlZUNoYW5nZShhZGphY2VudFRtcEluZGV4LCB1KSkgewpAQCAtMTM5NywxMCAr
MTUwNiwxMSBAQCBwcm90ZWN0ZWQ6CiB9OwogCiAvLyBUaGlzIHBlcmZvcm0gYWxsIHRoZSB0YXNr
cyB0aGF0IGFyZSBzcGVjaWZpYyB0byBjZXJ0YWluIHJlZ2lzdGVyIHR5cGUuCi10ZW1wbGF0ZTxC
YW5rIGJhbmssIHRlbXBsYXRlPHR5cGVuYW1lLCB0eXBlbmFtZSwgdHlwZW5hbWU+IGNsYXNzIEFs
bG9jYXRvclR5cGUsIHR5cGVuYW1lIEludGVyZmVyZW5jZUVkZ2VUeXBlPgotY2xhc3MgQ29sb3Jp
bmdBbGxvY2F0b3IgOiBwdWJsaWMgQWxsb2NhdG9yVHlwZTx1bnNpZ25lZCwgQWJzb2x1dGVUbXBN
YXBwZXI8YmFuaz4sIEludGVyZmVyZW5jZUVkZ2VUeXBlPiB7Ci0gICAgdXNpbmcgVG1wTWFwcGVy
ID0gQWJzb2x1dGVUbXBNYXBwZXI8YmFuaz47Ci0gICAgdXNpbmcgQmFzZSA9IEFsbG9jYXRvclR5
cGU8dW5zaWduZWQsIFRtcE1hcHBlciwgSW50ZXJmZXJlbmNlRWRnZVR5cGU+OwordGVtcGxhdGU8
dHlwZW5hbWUgSW5kZXhUeXBlLCBCYW5rIGJhbmssIHRlbXBsYXRlPHR5cGVuYW1lLCB0eXBlbmFt
ZSwgQmFuaz4gY2xhc3MgQWxsb2NhdG9yVHlwZSwgdHlwZW5hbWUgSW50ZXJmZXJlbmNlU2V0Pgor
Y2xhc3MgQ29sb3JpbmdBbGxvY2F0b3IgOiBwdWJsaWMgQWxsb2NhdG9yVHlwZTxJbmRleFR5cGUs
IEludGVyZmVyZW5jZVNldCwgYmFuaz4geworICAgIHVzaW5nIEJhc2UgPSBBbGxvY2F0b3JUeXBl
PEluZGV4VHlwZSwgSW50ZXJmZXJlbmNlU2V0LCBiYW5rPjsKKyAgICB1c2luZyBUbXBNYXBwZXIg
PSB0eXBlbmFtZSBCYXNlOjpUbXBNYXBwZXI7CisgICAgdXNpbmcgQmFzZTo6dG1wVG9JbmRleDsK
ICAgICB1c2luZyBCYXNlOjptX2lzT25TZWxlY3RTdGFjazsKICAgICB1c2luZyBCYXNlOjptX3Nl
bGVjdFN0YWNrOwogICAgIHVzaW5nIEJhc2U6Om1fc2ltcGxpZnlXb3JrbGlzdDsKQEAgLTE0MjMs
MTIgKzE1MzMsMTMgQEAgY2xhc3MgQ29sb3JpbmdBbGxvY2F0b3IgOiBwdWJsaWMgQWxsb2NhdG9y
VHlwZTx1bnNpZ25lZCwgQWJzb2x1dGVUbXBNYXBwZXI8YmFuaz4KICAgICB1c2luZyBCYXNlOjpo
YXNJbnRlcmZlcmVuY2VFZGdlOwogICAgIHVzaW5nIEJhc2U6OmdldEFsaWFzOwogICAgIHVzaW5n
IEJhc2U6OmFkZEVkZ2U7CisgICAgdXNpbmcgQmFzZTo6bV9pbnRlcmZlcmVuY2VFZGdlczsKICAg
ICB1c2luZyBCYXNlOjptX3Bpbm5lZFJlZ3M7CiAgICAgdXNpbmcgQmFzZTo6bV9yZWdzSW5Qcmlv
cml0eU9yZGVyOwogCiBwdWJsaWM6CiAKLSAgICBDb2xvcmluZ0FsbG9jYXRvcihDb2RlJiBjb2Rl
LCBUbXBXaWR0aCYgdG1wV2lkdGgsIGNvbnN0IFVzZUNvdW50czxUbXA+JiB1c2VDb3VudHMsIGNv
bnN0IEhhc2hTZXQ8dW5zaWduZWQ+JiB1bnNwaWxsYWJsZVRtcCkKKyAgICBDb2xvcmluZ0FsbG9j
YXRvcihDb2RlJiBjb2RlLCBUbXBXaWR0aCYgdG1wV2lkdGgsIGNvbnN0IFVzZUNvdW50cyYgdXNl
Q291bnRzLCBjb25zdCBCaXRWZWN0b3ImIHVuc3BpbGxhYmxlVG1wKQogICAgICAgICA6IEJhc2Uo
Y29kZSwgY29kZS5yZWdzSW5Qcmlvcml0eU9yZGVyKGJhbmspLCBUbXBNYXBwZXI6Omxhc3RNYWNo
aW5lUmVnaXN0ZXJJbmRleCgpLCB0bXBBcnJheVNpemUoY29kZSksIHVuc3BpbGxhYmxlVG1wLCB1
c2VDb3VudHMpCiAgICAgICAgICwgbV90bXBXaWR0aCh0bXBXaWR0aCkKICAgICB7CkBAIC0xNDQw
LDEzICsxNTUxLDE1IEBAIHB1YmxpYzoKICAgICAgICAgICAgIH0KICAgICAgICAgfQogCisgICAg
ICAgIG1faW50ZXJmZXJlbmNlRWRnZXMuc2V0TWF4VG1wSW5kZXgoQWJzb2x1dGVUbXBNYXBwZXI8
YmFuaz46OmFic29sdXRlSW5kZXgobV9jb2RlLm51bVRtcHMoYmFuaykpKTsKKwogICAgICAgICBp
bml0aWFsaXplUHJlY29sb3JlZFRtcCgpOwogICAgICAgICBidWlsZCgpOwogICAgIH0KIAogICAg
IFRtcCBnZXRBbGlhcyhUbXAgdG1wKSBjb25zdAogICAgIHsKLSAgICAgICAgcmV0dXJuIFRtcE1h
cHBlcjo6dG1wRnJvbUFic29sdXRlSW5kZXgoZ2V0QWxpYXMoVG1wTWFwcGVyOjphYnNvbHV0ZUlu
ZGV4KHRtcCkpKTsKKyAgICAgICAgcmV0dXJuIFRtcE1hcHBlcjo6dG1wRnJvbUFic29sdXRlSW5k
ZXgoZ2V0QWxpYXModG1wVG9JbmRleCh0bXApKSk7CiAgICAgfQogCiAgICAgLy8gVGhpcyB0ZWxs
cyB5b3UgaWYgYSBNb3ZlIHdpbGwgYmUgY29hbGVzY2FibGUgaWYgdGhlIHNyYyBhbmQgZHN0IGVu
ZCB1cCBtYXRjaGluZy4gVGhpcyBtZXRob2QKQEAgLTE0NjksOCArMTU4Miw4IEBAIHB1YmxpYzoK
ICAgICAgICAgaWYgKG1fY29hbGVzY2VkVG1wc0F0U3BpbGwuaXNFbXB0eSgpKQogICAgICAgICAg
ICAgcmV0dXJuIHRtcDsKIAotICAgICAgICB1bnNpZ25lZCBhbGlhc0luZGV4ID0gVG1wTWFwcGVy
OjphYnNvbHV0ZUluZGV4KHRtcCk7Ci0gICAgICAgIHdoaWxlICh1bnNpZ25lZCBuZXh0QWxpYXNJ
bmRleCA9IG1fY29hbGVzY2VkVG1wc0F0U3BpbGxbYWxpYXNJbmRleF0pCisgICAgICAgIEluZGV4
VHlwZSBhbGlhc0luZGV4ID0gdG1wVG9JbmRleCh0bXApOworICAgICAgICB3aGlsZSAoSW5kZXhU
eXBlIG5leHRBbGlhc0luZGV4ID0gbV9jb2FsZXNjZWRUbXBzQXRTcGlsbFthbGlhc0luZGV4XSkK
ICAgICAgICAgICAgIGFsaWFzSW5kZXggPSBuZXh0QWxpYXNJbmRleDsKIAogICAgICAgICBUbXAg
YWxpYXMgPSBUbXBNYXBwZXI6OnRtcEZyb21BYnNvbHV0ZUluZGV4KGFsaWFzSW5kZXgpOwpAQCAt
MTUyNyw3ICsxNjQwLDcgQEAgcHVibGljOgogICAgICAgICBjb25zdCBDb2xsZWN0aW9uJiBtX2Nv
bGxlY3Rpb247CiAgICAgfTsKIAotICAgIEluZGV4VG9UbXBJdGVyYWJsZUFkYXB0b3I8VmVjdG9y
PHVuc2lnbmVkPj4gc3BpbGxlZFRtcHMoKSBjb25zdCB7IHJldHVybiBtX3NwaWxsZWRUbXBzOyB9
CisgICAgSW5kZXhUb1RtcEl0ZXJhYmxlQWRhcHRvcjxWZWN0b3I8SW5kZXhUeXBlPj4gc3BpbGxl
ZFRtcHMoKSBjb25zdCB7IHJldHVybiBtX3NwaWxsZWRUbXBzOyB9CiAKICAgICBib29sIHJlcXVp
cmVzU3BpbGxpbmcoKSBjb25zdCB7IHJldHVybiAhbV9zcGlsbGVkVG1wcy5pc0VtcHR5KCk7IH0K
IApAQCAtMTU4NCwxMCArMTY5NywxMCBAQCBJR05PUkVfR0NDX1dBUk5JTkdTX0VORAogICAgICAg
ICBpZiAobGVmdFRtcC5pc0dQKCkgIT0gKGJhbmsgPT0gR1ApIHx8IHJpZ2h0VG1wLmlzR1AoKSAh
PSAoYmFuayA9PSBHUCkpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICAgICAgdW5z
aWduZWQgbGVmdEluZGV4ID0gVG1wTWFwcGVyOjphYnNvbHV0ZUluZGV4KGxlZnRUbXApOwotICAg
ICAgICB1bnNpZ25lZCByaWdodEluZGV4ID0gVG1wTWFwcGVyOjphYnNvbHV0ZUluZGV4KHJpZ2h0
VG1wKTsKKyAgICAgICAgSW5kZXhUeXBlIGxlZnRJbmRleCA9IHRtcFRvSW5kZXgobGVmdFRtcCk7
CisgICAgICAgIEluZGV4VHlwZSByaWdodEluZGV4ID0gdG1wVG9JbmRleChyaWdodFRtcCk7CiAK
LSAgICAgICAgcmV0dXJuICFoYXNJbnRlcmZlcmVuY2VFZGdlKEludGVyZmVyZW5jZUVkZ2VUeXBl
KGxlZnRJbmRleCwgcmlnaHRJbmRleCkpOworICAgICAgICByZXR1cm4gIWhhc0ludGVyZmVyZW5j
ZUVkZ2UobGVmdEluZGV4LCByaWdodEluZGV4KTsKICAgICB9CiAKICAgICB2b2lkIGFkZFRvTG93
UHJpb3JpdHlDb2FsZXNjaW5nQ2FuZGlkYXRlcyhBcmcgbGVmdCwgQXJnIHJpZ2h0KQpAQCAtMTU5
Niw4ICsxNzA5LDggQEAgSUdOT1JFX0dDQ19XQVJOSU5HU19FTkQKICAgICAgICAgVG1wIGxlZnRU
bXAgPSBsZWZ0LnRtcCgpOwogICAgICAgICBUbXAgcmlnaHRUbXAgPSByaWdodC50bXAoKTsKIAot
ICAgICAgICB1bnNpZ25lZCBsZWZ0SW5kZXggPSBUbXBNYXBwZXI6OmFic29sdXRlSW5kZXgobGVm
dFRtcCk7Ci0gICAgICAgIHVuc2lnbmVkIHJpZ2h0SW5kZXggPSBUbXBNYXBwZXI6OmFic29sdXRl
SW5kZXgocmlnaHRUbXApOworICAgICAgICBJbmRleFR5cGUgbGVmdEluZGV4ID0gdG1wVG9JbmRl
eChsZWZ0VG1wKTsKKyAgICAgICAgSW5kZXhUeXBlIHJpZ2h0SW5kZXggPSB0bXBUb0luZGV4KHJp
Z2h0VG1wKTsKIAogICAgICAgICB1bnNpZ25lZCBuZXh0TW92ZUluZGV4ID0gbV9jb2FsZXNjaW5n
Q2FuZGlkYXRlcy5zaXplKCk7CiAgICAgICAgIG1fY29hbGVzY2luZ0NhbmRpZGF0ZXMuYXBwZW5k
KHsgbGVmdEluZGV4LCByaWdodEluZGV4IH0pOwpAQCAtMTY3NSw3ICsxNzg4LDcgQEAgSUdOT1JF
X0dDQ19XQVJOSU5HU19FTkQKICAgICAgICAgICAgIEFTU0VSVCh1c2VUbXApOwogCiAgICAgICAg
ICAgICB1bnNpZ25lZCBuZXh0TW92ZUluZGV4ID0gbV9jb2FsZXNjaW5nQ2FuZGlkYXRlcy5zaXpl
KCk7Ci0gICAgICAgICAgICBtX2NvYWxlc2NpbmdDYW5kaWRhdGVzLmFwcGVuZCh7IFRtcE1hcHBl
cjo6YWJzb2x1dGVJbmRleCh1c2VUbXApLCBUbXBNYXBwZXI6OmFic29sdXRlSW5kZXgoZGVmVG1w
KSB9KTsKKyAgICAgICAgICAgIG1fY29hbGVzY2luZ0NhbmRpZGF0ZXMuYXBwZW5kKHsgdG1wVG9J
bmRleCh1c2VUbXApLCB0bXBUb0luZGV4KGRlZlRtcCkgfSk7CiAgICAgICAgICAgICBpZiAodHJh
Y2VEZWJ1ZykKICAgICAgICAgICAgICAgICBkYXRhTG9nTG4oIk1vdmUgYXQgaW5kZXggIiwgbmV4
dE1vdmVJbmRleCwgIiBpczogIiwgKnByZXZJbnN0KTsKIApAQCAtMTc0MywxNCArMTg1NiwxNSBA
QCBJR05PUkVfR0NDX1dBUk5JTkdTX0VORAogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAg
ICAgIGZvciAoVG1wIGxpdmVUbXAgOiBsaXZlVG1wcykgewogICAgICAgICAgICAgICAgICAgICBB
U1NFUlQobGl2ZVRtcC5pc0dQKCkgPT0gKGJhbmsgPT0gR1ApKTsKLSAgICAgICAgICAgICAgICAg
ICAgCi0gICAgICAgICAgICAgICAgICAgIGlmICh0cmFjZURlYnVnKQotICAgICAgICAgICAgICAg
ICAgICAgICAgZGF0YUxvZygiICAgIEFkZGluZyBkZWYtbGl2ZSBlZGdlOiAiLCBhcmcsICIsICIs
IGxpdmVUbXAsICJcbiIpOworCisgICAgICAgICAgICAgICAgICAgIGRhdGFMb2dMbklmKHRyYWNl
RGVidWcsICIgICAgQWRkaW5nIGRlZi1saXZlIGVkZ2U6ICIsIGFyZywgIiwgIiwgbGl2ZVRtcCk7
CiAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICBhZGRFZGdlKGFyZywg
bGl2ZVRtcCk7CiAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGZvciAoY29uc3Qg
VG1wJiBwaW5uZWRSZWdUbXAgOiBtX3Bpbm5lZFJlZ3MpCisgICAgICAgICAgICAgICAgZm9yIChj
b25zdCBUbXAmIHBpbm5lZFJlZ1RtcCA6IG1fcGlubmVkUmVncykgeworICAgICAgICAgICAgICAg
ICAgICBkYXRhTG9nTG5JZih0cmFjZURlYnVnLCAiICAgIEFkZGluZyBkZWYtcGlubmVkIGVkZ2U6
ICIsIGFyZywgIiwgIiwgcGlubmVkUmVnVG1wKTsKICAgICAgICAgICAgICAgICAgICAgYWRkRWRn
ZShhcmcsIHBpbm5lZFJlZ1RtcCk7CisgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfSk7
CiAgICAgfQogCkBAIC0xNzU4LDcgKzE4NzIsNyBAQCBJR05PUkVfR0NDX1dBUk5JTkdTX0VORAog
ICAgIHsKICAgICAgICAgQVNTRVJUX1dJVEhfTUVTU0FHRShhLmlzR1AoKSA9PSBiLmlzR1AoKSwg
IkFuIGludGVyZmVyZW5jZSBiZXR3ZWVuIHJlZ2lzdGVycyBvZiBkaWZmZXJlbnQgdHlwZXMgZG9l
cyBub3QgbWFrZSBzZW5zZSwgaXQgY2FuIGxlYWQgdG8gbm9uLWNvbG9yYWJsZSBncmFwaHMuIik7
CiAKLSAgICAgICAgYWRkRWRnZShUbXBNYXBwZXI6OmFic29sdXRlSW5kZXgoYSksIFRtcE1hcHBl
cjo6YWJzb2x1dGVJbmRleChiKSk7CisgICAgICAgIGFkZEVkZ2UodG1wVG9JbmRleChhKSwgdG1w
VG9JbmRleChiKSk7CiAgICAgfQogCiAgICAgLy8gQ2FsbGluZyB0aGlzIHdpdGhvdXQgYSB0bXBX
aWR0aCB3aWxsIHBlcmZvcm0gYSBtb3JlIGNvbnNlcnZhdGl2ZSBjb2FsZXNjaW5nIGFuYWx5c2lz
IHRoYXQgYXNzdW1lcwpAQCAtMTgyMCw3ICsxOTM0LDcgQEAgSUdOT1JFX0dDQ19XQVJOSU5HU19F
TkQKIAogY2xhc3MgR3JhcGhDb2xvcmluZ1JlZ2lzdGVyQWxsb2NhdGlvbiB7CiBwdWJsaWM6Ci0g
ICAgR3JhcGhDb2xvcmluZ1JlZ2lzdGVyQWxsb2NhdGlvbihDb2RlJiBjb2RlLCBVc2VDb3VudHM8
VG1wPiYgdXNlQ291bnRzKQorICAgIEdyYXBoQ29sb3JpbmdSZWdpc3RlckFsbG9jYXRpb24oQ29k
ZSYgY29kZSwgVXNlQ291bnRzJiB1c2VDb3VudHMpCiAgICAgICAgIDogbV9jb2RlKGNvZGUpCiAg
ICAgICAgICwgbV91c2VDb3VudHModXNlQ291bnRzKQogICAgIHsKQEAgLTE4NDAsNyArMTk1NCw3
IEBAIHByaXZhdGU6CiAgICAgdGVtcGxhdGU8QmFuayBiYW5rPgogICAgIHZvaWQgYWxsb2NhdGVP
bkJhbmsoKQogICAgIHsKLSAgICAgICAgSGFzaFNldDx1bnNpZ25lZD4gdW5zcGlsbGFibGVUbXBz
ID0gY29tcHV0ZVVuc3BpbGxhYmxlVG1wczxiYW5rPigpOworICAgICAgICBCaXRWZWN0b3IgdW5z
cGlsbGFibGVUbXBzID0gY29tcHV0ZVVuc3BpbGxhYmxlVG1wczxiYW5rPigpOwogCiAgICAgICAg
IC8vIEZJWE1FOiBJZiBhIFRtcCBpcyB1c2VkIG9ubHkgZnJvbSBhIFNjcmF0Y2ggcm9sZSBhbmQg
dGhhdCBhcmd1bWVudCBpcyAhYWRtaXRzU3RhY2ssIHRoZW4KICAgICAgICAgLy8gd2Ugc2hvdWxk
IGFkZCB0aGUgVG1wIHRvIHVuc3BpbGxhYmxlVG1wcy4gVGhhdCB3aWxsIGhlbHAgYXZvaWQgcmVs
b29waW5nIG9ubHkgdG8gdHVybiB0aGUKQEAgLTE4NjQsMTAgKzE5NzgsOSBAQCBwcml2YXRlOgog
ICAgICAgICAgICAgLy8gY3JlYXRlZCBUbXBzIG1heSBnZXQgbmFycm93ZXIgdXNlL2RlZiB3aWR0
aHMuIE9uIHRoZSBvdGhlciBoYW5kLCB0aGUgc3BpbGxlciBhbHJlYWR5CiAgICAgICAgICAgICAv
LyBzZWxlY3RzIHdoaWNoIG1vdmUgaW5zdHJ1Y3Rpb24gdG8gdXNlIGJhc2VkIG9uIHRoZSBvcmln
aW5hbCBUbXAncyB3aWR0aHMsIHNvIGl0IG1heSBub3QKICAgICAgICAgICAgIC8vIG1hdHRlciB0
aGFuIGEgc3Vic2VxdWVudCBpdGVyYXRpb24gc2VlcyBhIGNvbnNlcnZhdGl2ZSB3aWR0aCBmb3Ig
dGhlIG5ldyBUbXBzLiBBbHNvLCB0aGUKLSAgICAgICAgICAgIC8vIHJlY29tcHV0YXRpb24gbWF5
IG5vdCBhY3R1YWxseSBiZSBhIHBlcmZvcm1hbmNlIHByb2JsZW07IGl0J3MgbGlrZWx5IHRoYXQg
YSBiZXR0ZXIgd2F5IHRvCi0gICAgICAgICAgICAvLyBpbXByb3ZlIHBlcmZvcm1hbmNlIG9mIFRt
cFdpZHRoIGlzIHRvIHJlcGxhY2UgaXRzIEhhc2hNYXAgd2l0aCBzb21ldGhpbmcgZWxzZS4gSXQn
cwotICAgICAgICAgICAgLy8gcG9zc2libGUgdGhhdCBtb3N0IG9mIHRoZSBUbXBXaWR0aCBvdmVy
aGVhZCBpcyBmcm9tIHF1ZXJpZXMgb2YgVG1wV2lkdGggcmF0aGVyIHRoYW4gdGhlCi0gICAgICAg
ICAgICAvLyByZWNvbXB1dGF0aW9uLCBpbiB3aGljaCBjYXNlIHNwZWVkaW5nIHVwIHRoZSBsb29r
dXAgd291bGQgYmUgYSBiaWdnZXIgd2luLgorICAgICAgICAgICAgLy8gcmVjb21wdXRhdGlvbiBt
YXkgbm90IGFjdHVhbGx5IGJlIGEgcGVyZm9ybWFuY2UgcHJvYmxlbTogd2Ugc3BlbmQgcm91Z2hs
eSAzIHRvIDQlIG9mIHRoZQorICAgICAgICAgICAgLy8gcmVnaXN0ZXIgYWxsb2NhdG9yIGluIG1f
dG1wV2lkdGgucmVjb21wdXRlLiBJbiBjb21wYXJpc29uIHdlIHNwZW5kIG1vcmUgdGhhbiA0MCUg
YnVpbGRpbmcKKyAgICAgICAgICAgIC8vIHRoZSBpbnRlcmZlcmVuY2UgZ3JhcGgKICAgICAgICAg
ICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTI0NzgKICAg
ICAgICAgICAgIG1fdG1wV2lkdGgucmVjb21wdXRlPGJhbms+KG1fY29kZSk7CiAKQEAgLTE4ODUs
MjAgKzE5OTgsMjYgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAg
ICAgICAgICAgICB9OwogCisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChtX2NvZGUubnVtVG1w
cyhiYW5rKSA8IHN0ZDo6bnVtZXJpY19saW1pdHM8dWludDE2X3Q+OjptYXgoKSk7CisgICAgICAg
ICAgICAvLyBUaGUgYml0IHZlY3RvciBhcHByb2FjaCB1c2VzIG4qbiBiaXRzLCBvciAya0IgZm9y
IG4gPSA0MDAuCisgICAgICAgICAgICBjb25zdGV4cHIgdW5zaWduZWQgbWF4U2l6ZUZvclNtYWxs
SW50ZXJmZXJlbmNlR3JhcGggPSA0MDA7CisgICAgICAgICAgICB1c2luZyBJbmRleFR5cGUgPSB1
aW50MTZfdDsKKyAgICAgICAgICAgIHVzaW5nIExhcmdlSW50ZXJmZXJlbmNlR3JhcGggPSBJbnRl
cmZlcmVuY2VWZWN0b3I8U21hbGxTZXQ8SW5kZXhUeXBlLCBJbnRIYXNoPEluZGV4VHlwZT4+LCBJ
bmRleFR5cGU+OworICAgICAgICAgICAgdXNpbmcgU21hbGxJbnRlcmZlcmVuY2VHcmFwaCA9IElu
dGVyZmVyZW5jZUJpdFZlY3RvcjxJbmRleFR5cGU+OwogICAgICAgICAgICAgaWYgKHVzZUlSQygp
KSB7Ci0gICAgICAgICAgICAgICAgaWYgKG1fY29kZS5udW1UbXBzKGJhbmspIDwgc3RkOjpudW1l
cmljX2xpbWl0czx1aW50MTZfdD46Om1heCgpKSB7Ci0gICAgICAgICAgICAgICAgICAgIENvbG9y
aW5nQWxsb2NhdG9yPGJhbmssIElSQywgSW50ZXJmZXJlbmNlRWRnZTx1aW50MTZfdCwgdWludDMy
X3Q+PiBhbGxvY2F0b3IobV9jb2RlLCBtX3RtcFdpZHRoLCBtX3VzZUNvdW50cywgdW5zcGlsbGFi
bGVUbXBzKTsKKyAgICAgICAgICAgICAgICBpZiAobV9jb2RlLm51bVRtcHMoYmFuaykgPCBtYXhT
aXplRm9yU21hbGxJbnRlcmZlcmVuY2VHcmFwaCkgeworICAgICAgICAgICAgICAgICAgICBDb2xv
cmluZ0FsbG9jYXRvcjxJbmRleFR5cGUsIGJhbmssIElSQywgU21hbGxJbnRlcmZlcmVuY2VHcmFw
aD4gYWxsb2NhdG9yKG1fY29kZSwgbV90bXBXaWR0aCwgbV91c2VDb3VudHMsIHVuc3BpbGxhYmxl
VG1wcyk7CiAgICAgICAgICAgICAgICAgICAgIGRvbmUgPSBkb0FsbG9jYXRpb24oYWxsb2NhdG9y
KTsKICAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICBDb2xvcmlu
Z0FsbG9jYXRvcjxiYW5rLCBJUkMsIEludGVyZmVyZW5jZUVkZ2U8dWludDMyX3QsIHVpbnQ2NF90
Pj4gYWxsb2NhdG9yKG1fY29kZSwgbV90bXBXaWR0aCwgbV91c2VDb3VudHMsIHVuc3BpbGxhYmxl
VG1wcyk7CisgICAgICAgICAgICAgICAgICAgIENvbG9yaW5nQWxsb2NhdG9yPEluZGV4VHlwZSwg
YmFuaywgSVJDLCBMYXJnZUludGVyZmVyZW5jZUdyYXBoPiBhbGxvY2F0b3IobV9jb2RlLCBtX3Rt
cFdpZHRoLCBtX3VzZUNvdW50cywgdW5zcGlsbGFibGVUbXBzKTsKICAgICAgICAgICAgICAgICAg
ICAgZG9uZSA9IGRvQWxsb2NhdGlvbihhbGxvY2F0b3IpOwogICAgICAgICAgICAgICAgIH0KICAg
ICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgaWYgKG1fY29kZS5udW1UbXBzKGJh
bmspIDwgc3RkOjpudW1lcmljX2xpbWl0czx1aW50MTZfdD46Om1heCgpKSB7Ci0gICAgICAgICAg
ICAgICAgICAgIENvbG9yaW5nQWxsb2NhdG9yPGJhbmssIEJyaWdncywgSW50ZXJmZXJlbmNlRWRn
ZTx1aW50MTZfdCwgdWludDMyX3Q+PiBhbGxvY2F0b3IobV9jb2RlLCBtX3RtcFdpZHRoLCBtX3Vz
ZUNvdW50cywgdW5zcGlsbGFibGVUbXBzKTsKKyAgICAgICAgICAgICAgICBpZiAobV9jb2RlLm51
bVRtcHMoYmFuaykgPCBtYXhTaXplRm9yU21hbGxJbnRlcmZlcmVuY2VHcmFwaCkgeworICAgICAg
ICAgICAgICAgICAgICBDb2xvcmluZ0FsbG9jYXRvcjxJbmRleFR5cGUsIGJhbmssIEJyaWdncywg
U21hbGxJbnRlcmZlcmVuY2VHcmFwaD4gYWxsb2NhdG9yKG1fY29kZSwgbV90bXBXaWR0aCwgbV91
c2VDb3VudHMsIHVuc3BpbGxhYmxlVG1wcyk7CiAgICAgICAgICAgICAgICAgICAgIGRvbmUgPSBk
b0FsbG9jYXRpb24oYWxsb2NhdG9yKTsKICAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAg
ICAgICAgICAgICAgICBDb2xvcmluZ0FsbG9jYXRvcjxiYW5rLCBCcmlnZ3MsIEludGVyZmVyZW5j
ZUVkZ2U8dWludDMyX3QsIHVpbnQ2NF90Pj4gYWxsb2NhdG9yKG1fY29kZSwgbV90bXBXaWR0aCwg
bV91c2VDb3VudHMsIHVuc3BpbGxhYmxlVG1wcyk7CisgICAgICAgICAgICAgICAgICAgIENvbG9y
aW5nQWxsb2NhdG9yPEluZGV4VHlwZSwgYmFuaywgQnJpZ2dzLCBMYXJnZUludGVyZmVyZW5jZUdy
YXBoPiBhbGxvY2F0b3IobV9jb2RlLCBtX3RtcFdpZHRoLCBtX3VzZUNvdW50cywgdW5zcGlsbGFi
bGVUbXBzKTsKICAgICAgICAgICAgICAgICAgICAgZG9uZSA9IGRvQWxsb2NhdGlvbihhbGxvY2F0
b3IpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KQEAgLTE5MDcsMTEgKzIwMjYs
OCBAQCBwcml2YXRlOgogICAgIH0KIAogICAgIHRlbXBsYXRlPEJhbmsgYmFuaz4KLSAgICBIYXNo
U2V0PHVuc2lnbmVkPiBjb21wdXRlVW5zcGlsbGFibGVUbXBzKCkKKyAgICBCaXRWZWN0b3IgY29t
cHV0ZVVuc3BpbGxhYmxlVG1wcygpCiAgICAgewotCi0gICAgICAgIEhhc2hTZXQ8dW5zaWduZWQ+
IHVuc3BpbGxhYmxlVG1wczsKLQogICAgICAgICBzdHJ1Y3QgUmFuZ2UgewogICAgICAgICAgICAg
dW5zaWduZWQgZmlyc3QgeyBzdGQ6Om51bWVyaWNfbGltaXRzPHVuc2lnbmVkPjo6bWF4KCkgfTsK
ICAgICAgICAgICAgIHVuc2lnbmVkIGxhc3QgeyAwIH07CkBAIC0xOTY0LDEyICsyMDgwLDIwIEBA
IHByaXZhdGU6CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICArK2dsb2JhbEluZGV4OwogICAg
ICAgICB9CisKKyAgICAgICAgQml0VmVjdG9yIHVuc3BpbGxhYmxlVG1wczsKKyAgICAgICAgdW5z
cGlsbGFibGVUbXBzLmVuc3VyZVNpemUoYXJyYXlTaXplKTsKICAgICAgICAgZm9yICh1bnNpZ25l
ZCBpID0gQWJzb2x1dGVUbXBNYXBwZXI8YmFuaz46Omxhc3RNYWNoaW5lUmVnaXN0ZXJJbmRleCgp
ICsgMTsgaSA8IHJhbmdlcy5zaXplKCk7ICsraSkgewogICAgICAgICAgICAgUmFuZ2UmIHJhbmdl
ID0gcmFuZ2VzW2ldOwogICAgICAgICAgICAgaWYgKHJhbmdlLmxhc3QgLSByYW5nZS5maXJzdCA8
PSAxICYmIHJhbmdlLmNvdW50ID4gcmFuZ2UuYWRtaXRTdGFja0NvdW50KQotICAgICAgICAgICAg
ICAgIHVuc3BpbGxhYmxlVG1wcy5hZGQoaSk7CisgICAgICAgICAgICAgICAgdW5zcGlsbGFibGVU
bXBzLnF1aWNrU2V0KGkpOwogICAgICAgICB9CiAKKyAgICAgICAgbV9jb2RlLmZvckVhY2hGYXN0
VG1wKFsmXShUbXAgdG1wKSB7CisgICAgICAgICAgICBpZiAodG1wLmJhbmsoKSA9PSBiYW5rKQor
ICAgICAgICAgICAgICAgIHVuc3BpbGxhYmxlVG1wcy5xdWlja1NldChBYnNvbHV0ZVRtcE1hcHBl
cjxiYW5rPjo6YWJzb2x1dGVJbmRleCh0bXApKTsKKyAgICAgICAgfSk7CisKICAgICAgICAgcmV0
dXJuIHVuc3BpbGxhYmxlVG1wczsKICAgICB9CiAKQEAgLTIwMzEsMTIgKzIxNTUsMTIgQEAgcHJp
dmF0ZToKICAgICB9CiAKICAgICB0ZW1wbGF0ZTxCYW5rIGJhbmssIHR5cGVuYW1lIEFsbG9jYXRv
clR5cGU+Ci0gICAgdm9pZCBhZGRTcGlsbEFuZEZpbGwoY29uc3QgQWxsb2NhdG9yVHlwZSYgYWxs
b2NhdG9yLCBIYXNoU2V0PHVuc2lnbmVkPiYgdW5zcGlsbGFibGVUbXBzKQorICAgIHZvaWQgYWRk
U3BpbGxBbmRGaWxsKGNvbnN0IEFsbG9jYXRvclR5cGUmIGFsbG9jYXRvciwgQml0VmVjdG9yJiB1
bnNwaWxsYWJsZVRtcHMpCiAgICAgewogICAgICAgICBIYXNoTWFwPFRtcCwgU3RhY2tTbG90Kj4g
c3RhY2tTbG90czsKICAgICAgICAgZm9yIChUbXAgdG1wIDogYWxsb2NhdG9yLnNwaWxsZWRUbXBz
KCkpIHsKICAgICAgICAgICAgIC8vIEFsbCB0aGUgc3BpbGxlZCB2YWx1ZXMgYmVjb21lIHVuc3Bp
bGxhYmxlLgotICAgICAgICAgICAgdW5zcGlsbGFibGVUbXBzLmFkZChBYnNvbHV0ZVRtcE1hcHBl
cjxiYW5rPjo6YWJzb2x1dGVJbmRleCh0bXApKTsKKyAgICAgICAgICAgIHVuc3BpbGxhYmxlVG1w
cy5zZXQoQWJzb2x1dGVUbXBNYXBwZXI8YmFuaz46OmFic29sdXRlSW5kZXgodG1wKSk7CiAKICAg
ICAgICAgICAgIC8vIEFsbG9jYXRlIHN0YWNrIHNsb3QgZm9yIGVhY2ggc3BpbGxlZCB2YWx1ZS4K
ICAgICAgICAgICAgIFN0YWNrU2xvdCogc3RhY2tTbG90ID0gbV9jb2RlLmFkZFN0YWNrU2xvdCgK
QEAgLTIxMDksMTEgKzIyMzMsOCBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgICAgICAgICAg
Ly8gdmFsdWUgcmF0aGVyIHRoYW4gbG9hZGluZyBpdCBmcm9tIHRoZSBzdGFjay4gSW4gb3JkZXIg
Zm9yIHRoYXQKICAgICAgICAgICAgICAgICAgICAgICAgIC8vIG9wdGltaXphdGlvbiB0byBraWNr
IGluLCB3ZSBuZWVkIHRvIGF2b2lkIHBsYWNpbmcgdGhlIFRtcCdzIHN0YWNrCiAgICAgICAgICAg
ICAgICAgICAgICAgICAvLyBhZGRyZXNzIGludG8gdGhlIGluc3RydWN0aW9uLgotICAgICAgICAg
ICAgICAgICAgICAgICAgaWYgKCFBcmc6OmlzQ29sZFVzZShyb2xlKSkgewotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGNvbnN0IFVzZUNvdW50czxUbXA+OjpDb3VudHMqIGNvdW50cyA9IG1f
dXNlQ291bnRzW2FyZy50bXAoKV07Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNv
dW50cyAmJiBjb3VudHMtPm51bUNvbnN0RGVmcyA9PSAxICYmIGNvdW50cy0+bnVtRGVmcyA9PSAx
KQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIUFyZzo6aXNDb2xkVXNl
KHJvbGUpICYmIG1fdXNlQ291bnRzLmlzQ29uc3REZWY8YmFuaz4oQWJzb2x1dGVUbXBNYXBwZXI8
YmFuaz46OmFic29sdXRlSW5kZXgoYXJnLnRtcCgpKSkpCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuOwogICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAg
ICAgICAgICBXaWR0aCBzcGlsbFdpZHRoID0gbV90bXBXaWR0aC5yZXF1aXJlZFdpZHRoKGFyZy50
bXAoKSk7CiAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoQXJnOjppc0FueURlZihyb2xlKSAm
JiB3aWR0aCA8IHNwaWxsV2lkdGgpIHsKQEAgLTIxNjYsNyArMjI4Nyw3IEBAIHByaXZhdGU6CiAg
ICAgICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKGluc3RCYW5rID09IGJhbmspOwogICAg
ICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgVG1wIHRtcCA9IG1fY29kZS5u
ZXdUbXAoYmFuayk7Ci0gICAgICAgICAgICAgICAgICAgIHVuc3BpbGxhYmxlVG1wcy5hZGQoQWJz
b2x1dGVUbXBNYXBwZXI8YmFuaz46OmFic29sdXRlSW5kZXgodG1wKSk7CisgICAgICAgICAgICAg
ICAgICAgIHVuc3BpbGxhYmxlVG1wcy5zZXQoQWJzb2x1dGVUbXBNYXBwZXI8YmFuaz46OmFic29s
dXRlSW5kZXgodG1wKSk7CiAgICAgICAgICAgICAgICAgICAgIGluc3QuYXJncy5hcHBlbmQodG1w
KTsKICAgICAgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoaW5zdC5hcmdzLnNpemUoKSA9
PSAzKTsKICAgICAgICAgICAgICAgICAgICAgCkBAIC0yMjExLDcgKzIzMzIsNyBAQCBwcml2YXRl
OgogICAgICAgICAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgICAgICAgICAgdG1wID0gbV9j
b2RlLm5ld1RtcChiYW5rKTsKLSAgICAgICAgICAgICAgICAgICAgdW5zcGlsbGFibGVUbXBzLmFk
ZChBYnNvbHV0ZVRtcE1hcHBlcjxiYW5rPjo6YWJzb2x1dGVJbmRleCh0bXApKTsKKyAgICAgICAg
ICAgICAgICAgICAgdW5zcGlsbGFibGVUbXBzLnNldChBYnNvbHV0ZVRtcE1hcHBlcjxiYW5rPjo6
YWJzb2x1dGVJbmRleCh0bXApKTsKICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAg
ICAgICAgIGlmIChyb2xlID09IEFyZzo6U2NyYXRjaCkKICAgICAgICAgICAgICAgICAgICAgICAg
IHJldHVybjsKQEAgLTIyMzUsNyArMjM1Niw3IEBAIHByaXZhdGU6CiAKICAgICBDb2RlJiBtX2Nv
ZGU7CiAgICAgVG1wV2lkdGggbV90bXBXaWR0aDsKLSAgICBVc2VDb3VudHM8VG1wPiYgbV91c2VD
b3VudHM7CisgICAgVXNlQ291bnRzJiBtX3VzZUNvdW50czsKIH07CiAKIH0gLy8gYW5vbnltb3Vz
IG5hbWVzcGFjZQpAQCAtMjI0Nyw3ICsyMzY4LDcgQEAgdm9pZCBhbGxvY2F0ZVJlZ2lzdGVyc0J5
R3JhcGhDb2xvcmluZyhDb2RlJiBjb2RlKQogICAgIGlmICh0cmFjZURlYnVnKQogICAgICAgICBk
YXRhTG9nKCJDb2RlIGJlZm9yZSBncmFwaCBjb2xvcmluZzpcbiIsIGNvZGUpOwogCi0gICAgVXNl
Q291bnRzPFRtcD4gdXNlQ291bnRzKGNvZGUpOworICAgIFVzZUNvdW50cyB1c2VDb3VudHMoY29k
ZSk7CiAgICAgR3JhcGhDb2xvcmluZ1JlZ2lzdGVyQWxsb2NhdGlvbiBncmFwaENvbG9yaW5nUmVn
aXN0ZXJBbGxvY2F0aW9uKGNvZGUsIHVzZUNvdW50cyk7CiAgICAgZ3JhcGhDb2xvcmluZ1JlZ2lz
dGVyQWxsb2NhdGlvbi5ydW4oKTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy9haXIvQWlyQ29kZS5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJDb2Rl
LmgKaW5kZXggYzBiZDM1MjBkMGQzLi5kOGVlNDEyN2I1NzMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQ29kZS5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy9haXIvQWlyQ29kZS5oCkBAIC00MCw2ICs0MCw3IEBACiAjaW5jbHVkZSAiU3RhY2tBbGln
bm1lbnQuaCIKICNpbmNsdWRlIDx3dGYvSGFzaFNldC5oPgogI2luY2x1ZGUgPHd0Zi9JbmRleE1h
cC5oPgorI2luY2x1ZGUgPHd0Zi9TbWFsbFNldC5oPgogI2luY2x1ZGUgPHd0Zi9XZWFrUmFuZG9t
Lmg+CiAKIG5hbWVzcGFjZSBKU0MgewpAQCAtMzExLDcgKzMxMiwxMyBAQCBwdWJsaWM6CiAgICAg
fQogCiAgICAgdm9pZCBhZGRGYXN0VG1wKFRtcCk7Ci0gICAgYm9vbCBpc0Zhc3RUbXAoVG1wIHRt
cCkgY29uc3QgeyByZXR1cm4gbV9mYXN0VG1wcy5jb250YWlucyh0bXApOyB9CisKKyAgICB0ZW1w
bGF0ZTx0eXBlbmFtZSBGdW5jdG9yPgorICAgIHZvaWQgZm9yRWFjaEZhc3RUbXAoY29uc3QgRnVu
Y3RvciYgZnVuY3RvcikgY29uc3QKKyAgICB7CisgICAgICAgIGZvciAoVG1wIHRtcCA6IG1fZmFz
dFRtcHMpCisgICAgICAgICAgICBmdW5jdG9yKHRtcCk7CisgICAgfQogICAgIAogICAgIENGRyYg
Y2ZnKCkgY29uc3QgeyByZXR1cm4gKm1fY2ZnOyB9CiAgICAgCkBAIC0zNzksNyArMzg2LDcgQEAg
cHJpdmF0ZToKICAgICBWZWN0b3I8c3RkOjp1bmlxdWVfcHRyPEJhc2ljQmxvY2s+PiBtX2Jsb2Nr
czsKICAgICBTcGFyc2VDb2xsZWN0aW9uPFNwZWNpYWw+IG1fc3BlY2lhbHM7CiAgICAgc3RkOjp1
bmlxdWVfcHRyPENGRz4gbV9jZmc7Ci0gICAgSGFzaFNldDxUbXA+IG1fZmFzdFRtcHM7CisgICAg
U21hbGxTZXQ8VG1wLCBUbXBIYXNoLCAyPiBtX2Zhc3RUbXBzOwogICAgIENDYWxsU3BlY2lhbCog
bV9jQ2FsbFNwZWNpYWwgeyBudWxscHRyIH07CiAgICAgdW5zaWduZWQgbV9udW1HUFRtcHMgeyAw
IH07CiAgICAgdW5zaWduZWQgbV9udW1GUFRtcHMgeyAwIH07CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpclVzZUNvdW50cy5oIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2IzL2Fpci9BaXJVc2VDb3VudHMuaAppbmRleCA5MGEyNjhjZDU1MjkuLmUwNjYxNWM5ZTNk
MyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJVc2VDb3VudHMu
aAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpclVzZUNvdW50cy5oCkBAIC0x
LDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNS0yMDE3IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNS0yMDIxIEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAt
MzEsMzQgKzMxLDE4IEBACiAjaW5jbHVkZSAiQWlyQmxvY2tXb3JrbGlzdC5oIgogI2luY2x1ZGUg
IkFpckNvZGUuaCIKICNpbmNsdWRlICJBaXJJbnN0SW5saW5lcy5oIgotI2luY2x1ZGUgPHd0Zi9I
YXNoTWFwLmg+Ci0jaW5jbHVkZSA8d3RmL0xpc3REdW1wLmg+CisjaW5jbHVkZSAiQWlyVG1wSW5s
aW5lcy5oIgorI2luY2x1ZGUgPHd0Zi9Db21tYVByaW50ZXIuaD4KKyNpbmNsdWRlIDx3dGYvVmVj
dG9yLmg+CiAKIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeyBuYW1lc3BhY2UgQWlyIHsK
IAogY2xhc3MgQ29kZTsKIAotLy8gQ29tcHV0ZXMgdGhlIG51bWJlciBvZiB1c2VzIG9mIGEgdmFy
aWFibGUgYmFzZWQgb24gZnJlcXVlbmN5IG9mIGV4ZWN1dGlvbi4gVGhlIGZyZXF1ZW5jeSBvZiBi
bG9ja3MKKy8vIENvbXB1dGVzIHRoZSBudW1iZXIgb2YgdXNlcyBvZiBhIHRtcCBiYXNlZCBvbiBm
cmVxdWVuY3kgb2YgZXhlY3V0aW9uLiBUaGUgZnJlcXVlbmN5IG9mIGJsb2NrcwogLy8gdGhhdCBh
cmUgb25seSByZWFjaGFibGUgYnkgcmFyZSBlZGdlcyBpcyBzY2FsZWQgYnkgT3B0aW9uczo6cmFy
ZUJsb2NrUGVuYWx0eSgpLgotCi0vLyBUaGluZyBjYW4gYmUgZWl0aGVyIFRtcCBvciBBcmcuCi10
ZW1wbGF0ZTx0eXBlbmFtZSBUaGluZz4KIGNsYXNzIFVzZUNvdW50cyB7CiBwdWJsaWM6Ci0gICAg
c3RydWN0IENvdW50cyB7Ci0gICAgICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25z
dAotICAgICAgICB7Ci0gICAgICAgICAgICBvdXQucHJpbnQoCi0gICAgICAgICAgICAgICAgIntu
dW1XYXJtVXNlcyA9ICIsIG51bVdhcm1Vc2VzLCAiLCBudW1Db2xkVXNlcyA9ICIsIG51bUNvbGRV
c2VzLCAiLCBudW1EZWZzID0gIiwKLSAgICAgICAgICAgICAgICBudW1EZWZzLCAifSIpOwotICAg
ICAgICB9Ci0gICAgICAgIAotICAgICAgICBkb3VibGUgbnVtV2FybVVzZXMgeyAwIH07Ci0gICAg
ICAgIGRvdWJsZSBudW1Db2xkVXNlcyB7IDAgfTsKLSAgICAgICAgZG91YmxlIG51bURlZnMgeyAw
IH07Ci0gICAgICAgIGRvdWJsZSBudW1Db25zdERlZnMgeyAwIH07Ci0gICAgfTsKLSAgICAKICAg
ICBVc2VDb3VudHMoQ29kZSYgY29kZSkKICAgICB7CiAgICAgICAgIC8vIEZpbmQgbm9uLXJhcmUg
YmxvY2tzLgpAQCAtNzAsNDcgKzU0LDczIEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICAgICAg
ZmFzdFdvcmtsaXN0LnB1c2goc3VjY2Vzc29yLmJsb2NrKCkpOwogICAgICAgICAgICAgfQogICAg
ICAgICB9Ci0gICAgICAgIAorCisgICAgICAgIHVuc2lnbmVkIGdwQXJyYXlTaXplID0gQWJzb2x1
dGVUbXBNYXBwZXI8R1A+OjphYnNvbHV0ZUluZGV4KGNvZGUubnVtVG1wcyhHUCkpOworICAgICAg
ICBtX2dwTnVtV2FybVVzZXNBbmREZWZzLnJlc2l6ZShncEFycmF5U2l6ZSk7CisgICAgICAgIG1f
Z3BDb25zdERlZnMuZW5zdXJlU2l6ZShncEFycmF5U2l6ZSk7CisgICAgICAgIHVuc2lnbmVkIGZw
QXJyYXlTaXplID0gQWJzb2x1dGVUbXBNYXBwZXI8RlA+OjphYnNvbHV0ZUluZGV4KGNvZGUubnVt
VG1wcyhGUCkpOworICAgICAgICBtX2ZwTnVtV2FybVVzZXNBbmREZWZzLnJlc2l6ZShmcEFycmF5
U2l6ZSk7CisgICAgICAgIG1fZnBDb25zdERlZnMuZW5zdXJlU2l6ZShncEFycmF5U2l6ZSk7CisK
ICAgICAgICAgZm9yIChCYXNpY0Jsb2NrKiBibG9jayA6IGNvZGUpIHsKICAgICAgICAgICAgIGRv
dWJsZSBmcmVxdWVuY3kgPSBibG9jay0+ZnJlcXVlbmN5KCk7CiAgICAgICAgICAgICBpZiAoIWZh
c3RXb3JrbGlzdC5zYXcoYmxvY2spKQogICAgICAgICAgICAgICAgIGZyZXF1ZW5jeSAqPSBPcHRp
b25zOjpyYXJlQmxvY2tQZW5hbHR5KCk7CiAgICAgICAgICAgICBmb3IgKEluc3QmIGluc3QgOiAq
YmxvY2spIHsKLSAgICAgICAgICAgICAgICBpbnN0LmZvckVhY2g8VGhpbmc+KAotICAgICAgICAg
ICAgICAgICAgICBbJl0gKFRoaW5nJiBhcmcsIEFyZzo6Um9sZSByb2xlLCBCYW5rLCBXaWR0aCkg
ewotICAgICAgICAgICAgICAgICAgICAgICAgQ291bnRzJiBjb3VudHMgPSBtX2NvdW50cy5hZGQo
YXJnLCBDb3VudHMoKSkuaXRlcmF0b3ItPnZhbHVlOwotCi0gICAgICAgICAgICAgICAgICAgICAg
ICBpZiAoQXJnOjppc1dhcm1Vc2Uocm9sZSkpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
Y291bnRzLm51bVdhcm1Vc2VzICs9IGZyZXF1ZW5jeTsKLSAgICAgICAgICAgICAgICAgICAgICAg
IGlmIChBcmc6OmlzQ29sZFVzZShyb2xlKSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBj
b3VudHMubnVtQ29sZFVzZXMgKz0gZnJlcXVlbmN5OwotICAgICAgICAgICAgICAgICAgICAgICAg
aWYgKEFyZzo6aXNBbnlEZWYocm9sZSkpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgY291
bnRzLm51bURlZnMgKz0gZnJlcXVlbmN5OworICAgICAgICAgICAgICAgIGluc3QuZm9yRWFjaDxU
bXA+KAorICAgICAgICAgICAgICAgICAgICBbJl0gKFRtcCYgdG1wLCBBcmc6OlJvbGUgcm9sZSwg
QmFuayBiYW5rLCBXaWR0aCkgeworCisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoQXJnOjpp
c1dhcm1Vc2Uocm9sZSkgfHwgQXJnOjppc0FueURlZihyb2xlKSkgeworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGlmIChiYW5rID09IEdQKQorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBtX2dwTnVtV2FybVVzZXNBbmREZWZzW0Fic29sdXRlVG1wTWFwcGVyPEdQPjo6YWJzb2x1
dGVJbmRleCh0bXApXSArPSBmcmVxdWVuY3k7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX2ZwTnVtV2FybVVzZXNBbmRE
ZWZzW0Fic29sdXRlVG1wTWFwcGVyPEZQPjo6YWJzb2x1dGVJbmRleCh0bXApXSArPSBmcmVxdWVu
Y3k7CisgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIH0pOwog
CiAgICAgICAgICAgICAgICAgaWYgKChpbnN0LmtpbmQub3Bjb2RlID09IE1vdmUgfHwgaW5zdC5r
aW5kLm9wY29kZSA9PSBNb3ZlMzIpCiAgICAgICAgICAgICAgICAgICAgICYmIGluc3QuYXJnc1sw
XS5pc1NvbWVJbW0oKQotICAgICAgICAgICAgICAgICAgICAmJiBpbnN0LmFyZ3NbMV0uaXM8VGhp
bmc+KCkpCi0gICAgICAgICAgICAgICAgICAgIG1fY291bnRzLmFkZChpbnN0LmFyZ3NbMV0uYXM8
VGhpbmc+KCksIENvdW50cygpKS5pdGVyYXRvci0+dmFsdWUubnVtQ29uc3REZWZzKys7CisgICAg
ICAgICAgICAgICAgICAgICYmIGluc3QuYXJnc1sxXS5pczxUbXA+KCkpIHsKKyAgICAgICAgICAg
ICAgICAgICAgVG1wIHRtcCA9IGluc3QuYXJnc1sxXS5hczxUbXA+KCk7CisgICAgICAgICAgICAg
ICAgICAgIGlmICh0bXAuYmFuaygpID09IEdQKQorICAgICAgICAgICAgICAgICAgICAgICAgbV9n
cENvbnN0RGVmcy5xdWlja1NldChBYnNvbHV0ZVRtcE1hcHBlcjxHUD46OmFic29sdXRlSW5kZXgo
dG1wKSk7CisgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAg
IG1fZnBDb25zdERlZnMucXVpY2tTZXQoQWJzb2x1dGVUbXBNYXBwZXI8RlA+OjphYnNvbHV0ZUlu
ZGV4KHRtcCkpOworICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KICAgICAgICAgfQog
ICAgIH0KIAotICAgIGNvbnN0IENvdW50cyogb3BlcmF0b3JbXShjb25zdCBUaGluZyYgYXJnKSBj
b25zdAorICAgIHRlbXBsYXRlPEJhbmsgYmFuaz4KKyAgICBib29sIGlzQ29uc3REZWYodW5zaWdu
ZWQgYWJzb2x1dGVJbmRleCkgY29uc3QKKyAgICB7CisgICAgICAgIGlmIChiYW5rID09IEdQKQor
ICAgICAgICAgICAgcmV0dXJuIG1fZ3BDb25zdERlZnMucXVpY2tHZXQoYWJzb2x1dGVJbmRleCk7
CisgICAgICAgIHJldHVybiBtX2ZwQ29uc3REZWZzLnF1aWNrR2V0KGFic29sdXRlSW5kZXgpOwor
ICAgIH0KKworICAgIHRlbXBsYXRlPEJhbmsgYmFuaz4KKyAgICBmbG9hdCBudW1XYXJtVXNlc0Fu
ZERlZnModW5zaWduZWQgYWJzb2x1dGVJbmRleCkgY29uc3QKICAgICB7Ci0gICAgICAgIGF1dG8g
aXRlciA9IG1fY291bnRzLmZpbmQoYXJnKTsKLSAgICAgICAgaWYgKGl0ZXIgPT0gbV9jb3VudHMu
ZW5kKCkpCi0gICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICAgICAgcmV0dXJuICZpdGVy
LT52YWx1ZTsKKyAgICAgICAgaWYgKGJhbmsgPT0gR1ApCisgICAgICAgICAgICByZXR1cm4gbV9n
cE51bVdhcm1Vc2VzQW5kRGVmc1thYnNvbHV0ZUluZGV4XTsKKyAgICAgICAgcmV0dXJuIG1fZnBO
dW1XYXJtVXNlc0FuZERlZnNbYWJzb2x1dGVJbmRleF07CiAgICAgfQogCiAgICAgdm9pZCBkdW1w
KFByaW50U3RyZWFtJiBvdXQpIGNvbnN0CiAgICAgewotICAgICAgICBvdXQucHJpbnQobWFwRHVt
cChtX2NvdW50cykpOworICAgICAgICBDb21tYVByaW50ZXIgY29tbWEoIiwgIik7CisgICAgICAg
IGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX2dwTnVtV2FybVVzZXNBbmREZWZzLnNpemUoKTsg
KytpKQorICAgICAgICAgICAgb3V0LnByaW50KGNvbW1hLCBBYnNvbHV0ZVRtcE1hcHBlcjxHUD46
OnRtcEZyb21BYnNvbHV0ZUluZGV4KGkpLCAiPT4ge251bVdhcm1Vc2VzQW5kRGVmcz0iLCBtX2dw
TnVtV2FybVVzZXNBbmREZWZzW2ldLCAiLCBpc0NvbnN0RGVmPSIsIG1fZ3BDb25zdERlZnMucXVp
Y2tHZXQoaSksICJ9Iik7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX2ZwTnVt
V2FybVVzZXNBbmREZWZzLnNpemUoKTsgKytpKQorICAgICAgICAgICAgb3V0LnByaW50KGNvbW1h
LCBBYnNvbHV0ZVRtcE1hcHBlcjxGUD46OnRtcEZyb21BYnNvbHV0ZUluZGV4KGkpLCAiPT4ge251
bVdhcm1Vc2VzQW5kRGVmcz0iLCBtX2ZwTnVtV2FybVVzZXNBbmREZWZzW2ldLCAiLCBpc0NvbnN0
RGVmPSIsIG1fZnBDb25zdERlZnMucXVpY2tHZXQoaSksICJ9Iik7CiAgICAgfQogCiBwcml2YXRl
OgotICAgIEhhc2hNYXA8VGhpbmcsIENvdW50cz4gbV9jb3VudHM7CisgICAgVmVjdG9yPGZsb2F0
PiBtX2dwTnVtV2FybVVzZXNBbmREZWZzOworICAgIFZlY3RvcjxmbG9hdD4gbV9mcE51bVdhcm1V
c2VzQW5kRGVmczsKKyAgICBCaXRWZWN0b3IgbV9ncENvbnN0RGVmczsKKyAgICBCaXRWZWN0b3Ig
bV9mcENvbnN0RGVmczsKIH07CiAKIH0gfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzOjpBaXIKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvTm9kZXMuaCBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9wYXJzZXIvTm9kZXMuaAppbmRleCBlZDE3M2MxN2E1YmIuLjU2MTI5OWE2
YTcwZiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9Ob2Rlcy5oCisr
KyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvTm9kZXMuaApAQCAtMzYsNyArMzYsNyBA
QAogI2luY2x1ZGUgIlN5bWJvbFRhYmxlLmgiCiAjaW5jbHVkZSAiVmFyaWFibGVFbnZpcm9ubWVu
dC5oIgogI2luY2x1ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+Ci0jaW5jbHVkZSA8d3RmL1NtYWxsUHRy
U2V0Lmg+CisjaW5jbHVkZSA8d3RmL1NtYWxsU2V0Lmg+CiAKIG5hbWVzcGFjZSBKU0MgewogCkBA
IC01Myw3ICs1Myw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgIGNsYXNzIFJlZ2lzdGVySUQ7CiAg
ICAgY2xhc3MgU2NvcGVOb2RlOwogCi0gICAgdHlwZWRlZiBTbWFsbFB0clNldDxVbmlxdWVkU3Ry
aW5nSW1wbCo+IFVuaXF1ZWRTdHJpbmdJbXBsUHRyU2V0OworICAgIHR5cGVkZWYgU21hbGxTZXQ8
VW5pcXVlZFN0cmluZ0ltcGwqPiBVbmlxdWVkU3RyaW5nSW1wbFB0clNldDsKIAogICAgIGVudW0g
Y2xhc3MgT3BlcmF0b3IgOiB1aW50OF90IHsKICAgICAgICAgRXF1YWwsCmRpZmYgLS1naXQgYS9T
b3VyY2UvV1RGL0NoYW5nZUxvZyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCmluZGV4IGI5Mzk5ZmU3
NDIxZC4uNWFjNTkwMWY4MzlkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL0NoYW5nZUxvZworKysg
Yi9Tb3VyY2UvV1RGL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI0IEBACisyMDIxLTA1LTE3ICBSb2Jp
biBNb3Jpc3NldCAgPHJtb3Jpc3NldEBhcHBsZS5jb20+CisKKyAgICAgICAgTWFrZSBBaXJBbGxv
Y2F0ZVJlZ2lzdGVyc0J5R3JhcGhDb2xvcmluZyB1c2UgbGVzcyBtZW1vcnkKKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIyNTg0OAorCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWShPT1BTKS4KKworICAgICAgICBJIHJlbmFtZWQgU21hbGxQdHJTZXQg
aW50byBTbWFsbFNldCwgYXMgaXQgbm93IHN1cHBvcnRzIGludGVnZXJzIGFzIHdlbGwgYXMgcG9p
bnRlcnMuCisKKyAgICAgICAgSSB0aGVuIHJlZHVjZWQgaXRzIHNpemUgYnkgc2hhcmluZyB0aGUg
c2FtZSBzdG9yYWdlIGZvciBtX2J1ZmZlciBhbmQgZm9yIG1fc21hbGxTdG9yYWdlLgorICAgICAg
ICBUaGlzIGlzIHNhZmUgdG8gZG8sIGJlY2F1c2UgYWxsIG9wZXJhdGlvbnMgYnJhbmNoIG9uIGlz
U21hbGwoKSB3aGljaCBkZXBlbmRzIHB1cmVseSBvbiBtX2NhcGFjaXR5LgorCisgICAgICAgIEkg
YWxzbyBhZGRlZCB0cml2aWFsIHNpemUoKSBhbmQgaXNFbXB0eSgpIG1ldGhvZHMsIHRvIG1ha2Ug
ZGVidWdnaW5nIGVhc2llci4KKworICAgICAgICBGaW5hbGx5IEkgYWRkZWQgYSBjb21tZW50IGF0
IHRoZSB0b3Agb2YgdGhlIGZpbGUgZXhwbGFpbmluZyB3aGVuIHRvIHVzZSwgYW5kIChtb3JlIGlt
cG9ydGFudGx5KSBub3QgdG8gdXNlIFNtYWxsU2V0LgorCisgICAgICAgICogV1RGLnhjb2RlcHJv
ai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogd3RmL0NNYWtlTGlzdHMudHh0OgorICAgICAg
ICAqIHd0Zi9TbWFsbFNldC5jcHA6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV1RGL3d0Zi9TbWFsbFB0
clNldC5jcHAuCisgICAgICAgICogd3RmL1NtYWxsU2V0Lmg6IFJlbmFtZWQgZnJvbSBTb3VyY2Uv
V1RGL3d0Zi9TbWFsbFB0clNldC5oLgorCiAyMDIxLTA1LTE2ICBDaHJpcyBEdW1leiAgPGNkdW1l
ekBhcHBsZS5jb20+CiAKICAgICAgICAgTW9kZXJuaXplIC8gT3B0aW1pemUgU1FMaXRlU3RhdGVt
ZW50IGNyZWF0aW9uIGFuZCBwcmVwYXJhdGlvbgpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi9XVEYu
eGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1NvdXJjZS9XVEYvV1RGLnhjb2RlcHJvai9wcm9q
ZWN0LnBieHByb2oKaW5kZXggYjExZTA5OGNlNDc3Li5hZmY1MzIxYjQ3ZjMgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XVEYvV1RGLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvU291cmNlL1dU
Ri9XVEYueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAtNDIsNyArNDIsNyBAQAogCQkwRjlE
MzM2MDE2NURCQTczMDA1QUQzODcgLyogRmlsZVByaW50U3RyZWFtLmNwcCBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGOUQzMzVCMTY1REJBNzMwMDVBRDM4
NyAvKiBGaWxlUHJpbnRTdHJlYW0uY3BwICovOyB9OwogCQkwRjlEMzM2MjE2NURCQTczMDA1QUQz
ODcgLyogUHJpbnRTdHJlYW0uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMEY5RDMzNUQxNjVEQkE3MzAwNUFEMzg3IC8qIFByaW50U3RyZWFtLmNwcCAq
LzsgfTsKIAkJMEZBNkYzOEYyMENDNTgwRjAwQTAzRENEIC8qIFNlZ21lbnRlZFZlY3Rvci5jcHAg
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkE2RjM4RTIw
Q0M1ODBFMDBBMDNEQ0QgLyogU2VnbWVudGVkVmVjdG9yLmNwcCAqLzsgfTsKLQkJMEZBNkYzOTMy
MENDNzNBMzAwQTAzRENEIC8qIFNtYWxsUHRyU2V0LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGQTZGMzkyMjBDQzczQTIwMEEwM0RDRCAvKiBTbWFs
bFB0clNldC5jcHAgKi87IH07CisJCTBGQTZGMzkzMjBDQzczQTMwMEEwM0RDRCAvKiBTbWFsbFNl
dC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkE2
RjM5MjIwQ0M3M0EyMDBBMDNEQ0QgLyogU21hbGxTZXQuY3BwICovOyB9OwogCQkwRkE2RjM5NTIw
Q0NBQ0U5MDBBMDNEQ0QgLyogVW5pcXVlQXJyYXkuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZBNkYzOTQyMENDQUNFOTAwQTAzRENEIC8qIFVuaXF1
ZUFycmF5LmNwcCAqLzsgfTsKIAkJMEZEREJGQTcxNjY2REZBMzAwQzU1RkVGIC8qIFN0cmluZ1By
aW50U3RyZWFtLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDBGRERCRkE1MTY2NkRGQTMwMEM1NUZFRiAvKiBTdHJpbmdQcmludFN0cmVhbS5jcHAgKi87
IH07CiAJCTBGRTE2NDZBMUI2RkZDOTYwMDQwMEU3QyAvKiBMb2NrLmNwcCBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRTE2NDY4MUI2RkZDOTYwMDQwMEU3
QyAvKiBMb2NrLmNwcCAqLzsgfTsKQEAgLTI3Miw3ICsyNzIsNyBAQAogCQkwRjlEQUEwNTFGRDFD
MzdCMDA3OUM1QjIgLyogU3RhY2tTaG90UHJvZmlsZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gU3RhY2tTaG90UHJvZmlsZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJMEZBNkYzOEUyMENDNTgwRTAwQTAzRENEIC8qIFNlZ21lbnRlZFZlY3Rvci5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTZWdtZW50ZWRWZWN0b3IuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRkE2RjM5MDIwQ0M2MUVCMDBBMDNEQ0QgLyog
UmVmQ291bnRlZEFycmF5LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9
IFJlZkNvdW50ZWRBcnJheS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTBGQTZG
MzkyMjBDQzczQTIwMEEwM0RDRCAvKiBTbWFsbFB0clNldC5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IHBhdGggPSBTbWFsbFB0clNldC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCTBGQTZGMzkyMjBDQzczQTIwMEEwM0RDRCAvKiBTbWFsbFNldC5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTbWFsbFNldC5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTBGQTZGMzk0MjBDQ0FDRTkwMEEwM0RDRCAvKiBVbmlxdWVBcnJh
eS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBVbmlxdWVBcnJheS5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGQjE0RTE4MTgwRkEyMTgwMDlCNkI0
RCAvKiBCYWcuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQmFnLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGQjE0RTFBMTgxMEUxREEwMDlCNkI0RCAvKiBCYWdU
b0hhc2hNYXAuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQmFnVG9IYXNoTWFwLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CkBAIC00NDIsNyArNDQyLDcgQEAKIAkJNzBFQ0E2MEIxQjAyNDI2ODAwNDQ5
NzM5IC8qIFN5bWJvbEltcGwuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU3lt
Ym9sSW1wbC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3MEVDQTYwQzFCMDI0MjY4
MDA0NDk3MzkgLyogVW5pcXVlZFN0cmluZ0ltcGwuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gVW5pcXVlZFN0cmluZ0ltcGwuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJNzkwMzhFMDUyMjRCMDVBNzAwNEMwNzM4IC8qIFNwYW5uaW5nVHJlZS5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBTcGFubmluZ1RyZWUuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKLQkJNzkzNkQ2QTkxQzk5RjhBRTAwMEQxQUVEIC8qIFNtYWxsUHRyU2V0LmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNtYWxsUHRyU2V0Lmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCTc5MzZENkE5MUM5OUY4QUUwMDBEMUFFRCAvKiBTbWFsbFNldC5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTbWFsbFNldC5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQk3OTNCRkFERDlDRUQ0NEI4QjlGQkNBMTYgLyogU3RkVW5vcmRl
cmVkTWFwLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFN0ZFVub3JkZXJlZE1h
cC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3OTUyMTIwMjFGNDI1ODg4MDBCRDY0
MjEgLyogU2luZ2xlUm9vdEdyYXBoLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IFNpbmdsZVJvb3RHcmFwaC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3QTA1MDkz
RDFGQjlEQ0M1MDBCMzNGQjggLyogSlNPTlZhbHVlcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBKU09OVmFsdWVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0x
MjQ0LDggKzEyNDQsOCBAQAogCQkJCUE3NDg3NDRGMTdBMEJEQUUwMEZBMDRDQiAvKiBTaXhDaGFy
YWN0ZXJIYXNoLmNwcCAqLywKIAkJCQlBNzQ4NzQ1MDE3QTBCREFFMDBGQTA0Q0IgLyogU2l4Q2hh
cmFjdGVySGFzaC5oICovLAogCQkJCUE4QTQ3MzBDMTUxQTgyNUIwMDQxMjNGRiAvKiBTaXplTGlt
aXRzLmNwcCAqLywKLQkJCQkwRkE2RjM5MjIwQ0M3M0EyMDBBMDNEQ0QgLyogU21hbGxQdHJTZXQu
Y3BwICovLAotCQkJCTc5MzZENkE5MUM5OUY4QUUwMDBEMUFFRCAvKiBTbWFsbFB0clNldC5oICov
LAorCQkJCTBGQTZGMzkyMjBDQzczQTIwMEEwM0RDRCAvKiBTbWFsbFNldC5jcHAgKi8sCisJCQkJ
NzkzNkQ2QTkxQzk5RjhBRTAwMEQxQUVEIC8qIFNtYWxsU2V0LmggKi8sCiAJCQkJQTMwRDQxMkQx
RjBERTEzRjAwQjcxOTU0IC8qIFNvZnRMaW5raW5nLmggKi8sCiAJCQkJOTMxNTZDOEQyNjJDOTgy
MjAwRUFFMjdCIC8qIFNvcnRlZEFycmF5TWFwLmggKi8sCiAJCQkJNzkwMzhFMDUyMjRCMDVBNzAw
NEMwNzM4IC8qIFNwYW5uaW5nVHJlZS5oICovLApAQCAtMTc2MCw3ICsxNzYwLDcgQEAKIAkJCQk1
MzExQkQ1MzFFQTcxQ0FEMDA1MjUyODEgLyogU2lnbmFscy5jcHAgaW4gU291cmNlcyAqLywKIAkJ
CQlBNzQ4NzQ1MjE3QTBCREFFMDBGQTA0Q0IgLyogU2l4Q2hhcmFjdGVySGFzaC5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQlBOEE0NzQyNTE1MUE4MjVCMDA0MTIzRkYgLyogU2l6ZUxpbWl0cy5jcHAg
aW4gU291cmNlcyAqLywKLQkJCQkwRkE2RjM5MzIwQ0M3M0EzMDBBMDNEQ0QgLyogU21hbGxQdHJT
ZXQuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEZBNkYzOTMyMENDNzNBMzAwQTAzRENEIC8qIFNt
YWxsU2V0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE4QTQ3NDI3MTUxQTgyNUIwMDQxMjNGRiAv
KiBTdGFja0JvdW5kcy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlGRUVBNERGOTIxNkQ3QkU0MDBB
QzA2MDIgLyogU3RhY2tQb2ludGVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUZFREFDRDNEMTYz
MEY4M0YwMEM2OTYzNCAvKiBTdGFja1N0YXRzLmNwcCBpbiBTb3VyY2VzICovLApkaWZmIC0tZ2l0
IGEvU291cmNlL1dURi93dGYvQ01ha2VMaXN0cy50eHQgYi9Tb3VyY2UvV1RGL3d0Zi9DTWFrZUxp
c3RzLnR4dAppbmRleCBlN2RiYzRmMDJmYTAuLjgwMThmYWJhNDZjNyAxMDA2NDQKLS0tIGEvU291
cmNlL1dURi93dGYvQ01ha2VMaXN0cy50eHQKKysrIGIvU291cmNlL1dURi93dGYvQ01ha2VMaXN0
cy50eHQKQEAgLTIzNSw3ICsyMzUsNyBAQCBzZXQoV1RGX1BVQkxJQ19IRUFERVJTCiAgICAgU2lu
Z2x5TGlua2VkTGlzdC5oCiAgICAgU2luZ2x5TGlua2VkTGlzdFdpdGhUYWlsLmgKICAgICBTaXhD
aGFyYWN0ZXJIYXNoLmgKLSAgICBTbWFsbFB0clNldC5oCisgICAgU21hbGxTZXQuaAogICAgIFNv
ZnRMaW5raW5nLmgKICAgICBTb3J0ZWRBcnJheU1hcC5oCiAgICAgU3Bhbm5pbmdUcmVlLmgKQEAg
LTQ0Myw3ICs0NDMsNyBAQCBzZXQoV1RGX1NPVVJDRVMKICAgICBTZWNvbmRzLmNwcAogICAgIFNl
Z21lbnRlZFZlY3Rvci5jcHAKICAgICBTaXhDaGFyYWN0ZXJIYXNoLmNwcAotICAgIFNtYWxsUHRy
U2V0LmNwcAorICAgIFNtYWxsU2V0LmNwcAogICAgIFN0YWNrQm91bmRzLmNwcAogICAgIFN0YWNr
UG9pbnRlci5jcHAKICAgICBTdGFja1N0YXRzLmNwcApkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93
dGYvU21hbGxQdHJTZXQuY3BwIGIvU291cmNlL1dURi93dGYvU21hbGxTZXQuY3BwCnNpbWlsYXJp
dHkgaW5kZXggOTQlCnJlbmFtZSBmcm9tIFNvdXJjZS9XVEYvd3RmL1NtYWxsUHRyU2V0LmNwcApy
ZW5hbWUgdG8gU291cmNlL1dURi93dGYvU21hbGxTZXQuY3BwCmluZGV4IDQyMDQ4ZTdlOGEyMy4u
MmQyZjQxNWIyYzdhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi9TbWFsbFB0clNldC5jcHAK
KysrIGIvU291cmNlL1dURi93dGYvU21hbGxTZXQuY3BwCkBAIC0yNCwxMiArMjQsMTIgQEAKICAq
LwogCiAjaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSA8d3RmL1NtYWxsUHRyU2V0Lmg+Cisj
aW5jbHVkZSA8d3RmL1NtYWxsU2V0Lmg+CiAKICNpbmNsdWRlIDx3dGYvTmV2ZXJEZXN0cm95ZWQu
aD4KIAogbmFtZXNwYWNlIFdURiB7CiAKLURFRklORV9BTExPQ0FUT1JfV0lUSF9IRUFQX0lERU5U
SUZJRVIoU21hbGxQdHJTZXQpOworREVGSU5FX0FMTE9DQVRPUl9XSVRIX0hFQVBfSURFTlRJRklF
UihTbWFsbFNldCk7CiAKIH0gLy8gbmFtZXNwYWNlIFdURgpkaWZmIC0tZ2l0IGEvU291cmNlL1dU
Ri93dGYvU21hbGxQdHJTZXQuaCBiL1NvdXJjZS9XVEYvd3RmL1NtYWxsU2V0LmgKc2ltaWxhcml0
eSBpbmRleCA1MCUKcmVuYW1lIGZyb20gU291cmNlL1dURi93dGYvU21hbGxQdHJTZXQuaApyZW5h
bWUgdG8gU291cmNlL1dURi93dGYvU21hbGxTZXQuaAppbmRleCA0YzZlNDYxOTZkMjkuLjI0NzQx
ZjEyYzM1ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYvU21hbGxQdHJTZXQuaAorKysgYi9T
b3VyY2UvV1RGL3d0Zi9TbWFsbFNldC5oCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAxNiBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTYtMjAyMSBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgKgogICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTMyLDY1ICszMiw3NyBAQAogCiBuYW1lc3BhY2UgV1RG
IHsKIAotREVDTEFSRV9BTExPQ0FUT1JfV0lUSF9IRUFQX0lERU5USUZJRVIoU21hbGxQdHJTZXQp
OworREVDTEFSRV9BTExPQ0FUT1JfV0lUSF9IRUFQX0lERU5USUZJRVIoU21hbGxTZXQpOwogCi10
ZW1wbGF0ZTx0eXBlbmFtZSBQdHJUeXBlLCB1bnNpZ25lZCBTbWFsbEFycmF5U2l6ZSA9IDg+Ci1j
bGFzcyBTbWFsbFB0clNldCB7CisvLyBGdW5jdGlvbmFsbHksIHRoaXMgY2xhc3MgaXMgdmVyeSBz
aW1pbGFyIHRvIFZhcmlhbnQ8VmVjdG9yPFQsIFNtYWxsQXJyYXlTaXplPiwgSGFzaFNldDxUPj4K
Ky8vIEl0IGlzIG9wdGltaXplZCBwcmltYXJpbHkgZm9yIHNwYWNlLCBidXQgaXMgYWxzbyBxdWl0
ZSBmYXN0CisvLyBJdHMgbWFpbiBsaW1pdGF0aW9uIGlzIHRoYXQgaXQgaGFzIG5vIHdheSB0byBy
ZW1vdmUgZWxlbWVudHMgb25jZSB0aGV5IGhhdmUgYmVlbiBhZGRlZCB0byBpdAorLy8gQWxzbywg
aW5zdGVhZCBvZiBiZWluZyBmdWxseSBwYXJhbWV0ZXJpemVkIGJ5IGEgSGFzaFRyYWl0IHBhcmFt
ZXRlciwgaXQgYWx3YXlzIHVzZXMgLTEgKGFsbCBvbmVzKSBhcyBpdHMgZW1wdHkgdmFsdWUKKy8v
IFJlbGF0ZWRseSwgaXQgY2FuIG9ubHkgc3RvcmUgb2JqZWN0cyBvZiB1cCB0byA2NCBiaXQgc2l6
ZSAoYnV0IHRoYXQgcGFydGljdWxhciBsaW1pdGF0aW9uIHNob3VsZCBiZSBmYWlybHkgZWFzeSB0
byBsaWZ0IGlmIG5lZWRlZCkKKy8vIFVzZSBpdCB3aGVuZXZlciB5b3UgbmVlZCB0byBzdG9yZSBh
biB1bmJvdW5kZWQgYnV0IHByb2JhYmx5IHNtYWxsIG51bWJlciBvZiB1bnNpZ25lZCBpbnRlZ2Vy
cyBvciBwb2ludGVycy4KK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIEhhc2ggPSBQdHJI
YXNoQmFzZTxULCBmYWxzZSAvKiBpc1NtYXJ0UHRyICovPiwgdW5zaWduZWQgU21hbGxBcnJheVNp
emUgPSA4PgorY2xhc3MgU21hbGxTZXQgewogICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwot
ICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKFNtYWxsUHRyU2V0KTsKLSAgICBzdGF0aWNfYXNzZXJ0
KHN0ZDo6aXNfdHJpdmlhbGx5X2Rlc3RydWN0aWJsZTxQdHJUeXBlPjo6dmFsdWUsICJXZSBjdXJy
ZW50bHkgZG9uJ3Qgc3VwcG9ydCBub24tdHJpdmlhbGx5IGRlc3RydWN0aWJsZSBwb2ludGVyIHR5
cGVzLiIpOwotICAgIHN0YXRpY19hc3NlcnQoc2l6ZW9mKFB0clR5cGUpID09IHNpemVvZih2b2lk
KiksICJPbmx5IHN1cHBvcnQgcG9pbnRlciBzaXplZCB0aGluZ3MuIik7CisgICAgV1RGX01BS0Vf
Tk9OQ09QWUFCTEUoU21hbGxTZXQpOworICAgIHN0YXRpY19hc3NlcnQoc3RkOjppc190cml2aWFs
bHlfZGVzdHJ1Y3RpYmxlPFQ+Ojp2YWx1ZSwgIldlIGN1cnJlbnRseSBkb24ndCBzdXBwb3J0IG5v
bi10cml2aWFsbHkgZGVzdHJ1Y3RpYmxlIHR5cGVzLiIpOwogICAgIHN0YXRpY19hc3NlcnQoIShT
bWFsbEFycmF5U2l6ZSAmIChTbWFsbEFycmF5U2l6ZSAtIDEpKSwgIklubGluZSBzaXplIG11c3Qg
YmUgYSBwb3dlciBvZiB0d28uIik7CisgICAgc3RhdGljX2Fzc2VydChzaXplb2YoVCopIDw9IFNt
YWxsQXJyYXlTaXplICogc2l6ZW9mKFQpLCAiVGhpcyBjbGFzcyBoYXMgbm90IGJlZW4gdGVzdGVk
IGZvciBtX2lubGluZS5idWZmZXIgbGFyZ2VyIHRoYW4gbV9pbmxpbmUuc21hbGxTdG9yYWdlIik7
CiAKLXB1YmxpYzogCi0gICAgU21hbGxQdHJTZXQoKQorcHVibGljOgorICAgIFNtYWxsU2V0KCkK
KyAgICAgICAgOiBtX2lubGluZSgpCiAgICAgewogICAgICAgICBpbml0aWFsaXplKCk7CiAgICAg
fQogCi0gICAgLy8gV2UgdGFrZSBjYXJlIHRvIGhhdmUgU21hbGxQdHJTZXQgaGF2ZSBwYXJ0aWFs
IG1vdmUgc2VtYW50aWNzIGFsbG93YWJsZSB0aHJvdWdoCisgICAgLy8gV2UgdGFrZSBjYXJlIHRv
IGhhdmUgU21hbGxTZXQgaGF2ZSBwYXJ0aWFsIG1vdmUgc2VtYW50aWNzIGFsbG93YWJsZSB0aHJv
dWdoCiAgICAgLy8gbWVtY3B5LiBJdCdzIHBhcnRpYWwgbW92ZSBzZW1hbnRpY3MgYmVjYXVzZSBv
dXIgZGVzdHJ1Y3RvciBzaG91bGQgbm90IGJlIGNhbGxlZAogICAgIC8vIG9uIHRoZSBTbWFsbFB0
ck9iamVjdCBpbiB0aGUgb2xkIG1lbW9yeSB3ZSB3ZXJlIG1vdmVkIGZyb20gKG90aGVyd2lzZSwg
d2UgbWlnaHQgZnJlZSBtX2J1ZmZlciB0d2ljZSkKICAgICAvLyB1bmxlc3MgdGhhdCBvbGQgbWVt
b3J5IGlzIHJlc2V0IHRvIGJlIGlzU21hbGwoKS4gU2VlIG1vdmUgY29uc3RydWN0b3IgYmVsb3cu
CiAgICAgLy8gVG8gbWFpbnRhaW4gdGhlc2Ugc2VtYW50aWNzLCB3ZSBkZXRlcm1pbmUgaWYgd2Un
cmUgc21hbGwgYnkgY2hlY2tpbmcgb3VyIHNpemUKICAgICAvLyBhbmQgbm90IG91ciBtX2J1ZmZl
ciBwb2ludGVyLiBBbmQgd2hlbiB3ZSdyZSBzbWFsbCwgd2UgZG9uJ3QgZG8gb3BlcmF0aW9ucyBv
bgogICAgIC8vIG1fYnVmZmVyLCBpbnN0ZWFkLCB3ZSBwZXJmb3JtIG9wZXJhdGlvbnMgb24gbV9z
bWFsbFN0b3JhZ2UgZGlyZWN0bHkuIFRoZSByZWFzb24gd2Ugd2FudAotICAgIC8vIHRoZXNlIHNl
bWFudGljcyBpcyB0aGF0IGl0J3MgYmVuZWZpY2lhbCB0byBoYXZlIGEgVmVjdG9yIHRoYXQgY29u
dGFpbnMgU21hbGxQdHJTZXQKLSAgICAvLyAob3IgYW4gb2JqZWN0IHdpdGggU21hbGxQdHJTZXQg
YXMgYSBmaWVsZCkgYmUgYWxsb3dlZCB0byB1c2UgbWVtY3B5IGZvciBpdHMgbW92ZSBvcGVyYXRp
b24uCisgICAgLy8gdGhlc2Ugc2VtYW50aWNzIGlzIHRoYXQgaXQncyBiZW5lZmljaWFsIHRvIGhh
dmUgYSBWZWN0b3IgdGhhdCBjb250YWlucyBTbWFsbFNldAorICAgIC8vIChvciBhbiBvYmplY3Qg
d2l0aCBTbWFsbFNldCBhcyBhIGZpZWxkKSBiZSBhbGxvd2VkIHRvIHVzZSBtZW1jcHkgZm9yIGl0
cyBtb3ZlIG9wZXJhdGlvbi4KIAotICAgIFNtYWxsUHRyU2V0KFNtYWxsUHRyU2V0JiYgb3RoZXIp
CisgICAgU21hbGxTZXQoU21hbGxTZXQmJiBvdGhlcikKICAgICB7Ci0gICAgICAgIG1lbWNweSh0
aGlzLCAmb3RoZXIsIHNpemVvZihTbWFsbFB0clNldCkpOworICAgICAgICBtZW1jcHkodGhpcywg
Jm90aGVyLCBzaXplb2YoU21hbGxTZXQpKTsKICAgICAgICAgb3RoZXIuaW5pdGlhbGl6ZSgpOwog
ICAgIH0KIAotICAgIFNtYWxsUHRyU2V0JiBvcGVyYXRvcj0oU21hbGxQdHJTZXQmJiBvdGhlcikK
KyAgICBTbWFsbFNldCYgb3BlcmF0b3I9KFNtYWxsU2V0JiYgb3RoZXIpCiAgICAgewotICAgICAg
ICB0aGlzLT5+U21hbGxQdHJTZXQoKTsKLSAgICAgICAgbmV3ICh0aGlzKSBTbWFsbFB0clNldChX
VEZNb3ZlKG90aGVyKSk7CisgICAgICAgIHRoaXMtPn5TbWFsbFNldCgpOworICAgICAgICBuZXcg
KHRoaXMpIFNtYWxsU2V0KFdURk1vdmUob3RoZXIpKTsKICAgICAgICAgcmV0dXJuICp0aGlzOwog
ICAgIH0KIAotICAgIH5TbWFsbFB0clNldCgpCisgICAgflNtYWxsU2V0KCkKICAgICB7CiAgICAg
ICAgIGlmICghaXNTbWFsbCgpKQotICAgICAgICAgICAgU21hbGxQdHJTZXRNYWxsb2M6OmZyZWUo
bV9idWZmZXIpOworICAgICAgICAgICAgU21hbGxTZXRNYWxsb2M6OmZyZWUobV9pbmxpbmUuYnVm
ZmVyKTsKICAgICB9CiAKLSAgICBpbmxpbmUgdm9pZCBhZGQoUHRyVHlwZSBwdHIpCisgICAgLy8g
V2UgY291bGQgZWFzaWx5IGluY2x1ZGUgYW4gaXRlcmF0b3IgaW4gdGhpcyB0byBmdWxseSBtYXRj
aCB0aGUgSGFzaFNldCBpbnRlcmZhY2UsIGJ1dCBjdXJyZW50bHkgbm9uZSBvZiBvdXIgY2xpZW50
cyByZXF1aXJlIGl0LgorICAgIHN0cnVjdCBBZGRSZXN1bHQgeworICAgICAgICBib29sIGlzTmV3
RW50cnk7CisgICAgfTsKKworICAgIGlubGluZSBBZGRSZXN1bHQgYWRkKFQgdmFsdWUpCiAgICAg
ewotICAgICAgICBBU1NFUlQoaXNWYWxpZEVudHJ5KHB0cikpOworICAgICAgICBBU1NFUlQoaXNW
YWxpZEVudHJ5KHZhbHVlKSk7CiAKICAgICAgICAgaWYgKGlzU21hbGwoKSkgewogICAgICAgICAg
ICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fc2l6ZTsgaSsrKSB7Ci0gICAgICAgICAgICAg
ICAgaWYgKG1fc21hbGxTdG9yYWdlW2ldID09IHB0cikKLSAgICAgICAgICAgICAgICAgICAgcmV0
dXJuOworICAgICAgICAgICAgICAgIGlmIChtX2lubGluZS5zbWFsbFN0b3JhZ2VbaV0gPT0gdmFs
dWUpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiB7IGZhbHNlIH07CiAgICAgICAgICAgICB9
CiAKICAgICAgICAgICAgIGlmIChtX3NpemUgPCBTbWFsbEFycmF5U2l6ZSkgewotICAgICAgICAg
ICAgICAgIG1fc21hbGxTdG9yYWdlW21fc2l6ZV0gPSBwdHI7CisgICAgICAgICAgICAgICAgbV9p
bmxpbmUuc21hbGxTdG9yYWdlW21fc2l6ZV0gPSB2YWx1ZTsKICAgICAgICAgICAgICAgICArK21f
c2l6ZTsKLSAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgcmV0dXJuIHsg
dHJ1ZSB9OwogICAgICAgICAgICAgfQogCiAgICAgICAgICAgICBncm93KHN0ZDo6bWF4KDY0dSwg
U21hbGxBcnJheVNpemUgKiAyKSk7CkBAIC0xMDMsMjYgKzExNSwyOSBAQCBwdWJsaWM6CiAgICAg
ICAgICAgICBBU1NFUlQoIShtX2NhcGFjaXR5ICYgKG1fY2FwYWNpdHkgLSAxKSkpOwogICAgICAg
ICB9CiAKLSAgICAgICAgdm9pZCoqIGJ1Y2tldCA9IHRoaXMtPmJ1Y2tldChwdHIpOwotICAgICAg
ICBpZiAoKmJ1Y2tldCAhPSBwdHIpIHsKLSAgICAgICAgICAgICpidWNrZXQgPSBwdHI7CisgICAg
ICAgIFQqIGJ1Y2tldCA9IHRoaXMtPmJ1Y2tldCh2YWx1ZSk7CisgICAgICAgIGlmICgqYnVja2V0
ICE9IHZhbHVlKSB7CisgICAgICAgICAgICAqYnVja2V0ID0gdmFsdWU7CiAgICAgICAgICAgICAr
K21fc2l6ZTsKKyAgICAgICAgICAgIHJldHVybiB7IHRydWUgfTsKICAgICAgICAgfQorICAgICAg
ICByZXR1cm4geyBmYWxzZSB9OwogICAgIH0KIAotICAgIGlubGluZSBib29sIGNvbnRhaW5zKFB0
clR5cGUgcHRyKSBjb25zdAorICAgIGlubGluZSBib29sIGNvbnRhaW5zKFQgdmFsdWUpIGNvbnN0
CiAgICAgewotICAgICAgICBBU1NFUlQoaXNWYWxpZEVudHJ5KHB0cikpOworICAgICAgICBBU1NF
UlQoaXNWYWxpZEVudHJ5KHZhbHVlKSk7CiAgICAgICAgIGlmIChpc1NtYWxsKCkpIHsKLSAgICAg
ICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX3NpemU7IGkrKykgeyAvLyBXZSBvbmx5
IG5lZWQgdG8gc2VhcmNoIHVwIHRvIG1fc2l6ZSBiZWNhdXNlIHdlIHN0b3JlIHRoaW5ncyBsaW5l
YXJseSBpbnNpZGUgbV9zbWFsbFN0b3JhZ2UuCi0gICAgICAgICAgICAgICAgaWYgKG1fc21hbGxT
dG9yYWdlW2ldID09IHB0cikKKyAgICAgICAgICAgIC8vIFdlIG9ubHkgbmVlZCB0byBzZWFyY2gg
dXAgdG8gbV9zaXplIGJlY2F1c2Ugd2Ugc3RvcmUgdGhpbmdzIGxpbmVhcmx5IGluc2lkZSBtX3Nt
YWxsU3RvcmFnZS4KKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX3NpemU7
IGkrKykgeworICAgICAgICAgICAgICAgIGlmIChtX2lubGluZS5zbWFsbFN0b3JhZ2VbaV0gPT0g
dmFsdWUpCiAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICAgICAgfQog
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9CiAKLSAgICAgICAgdm9pZCoqIGJ1
Y2tldCA9IHRoaXMtPmJ1Y2tldChwdHIpOwotICAgICAgICByZXR1cm4gKmJ1Y2tldCA9PSBwdHI7
CisgICAgICAgIFQqIGJ1Y2tldCA9IHRoaXMtPmJ1Y2tldCh2YWx1ZSk7CisgICAgICAgIHJldHVy
biAqYnVja2V0ID09IHZhbHVlOwogICAgIH0KIAogICAgIGNsYXNzIGl0ZXJhdG9yIHsKQEAgLTEz
NywxNSArMTUyLDE1IEBAIHB1YmxpYzoKICAgICAgICAgICAgIHJldHVybiAqdGhpczsKICAgICAg
ICAgfQogICAgICAgICAKLSAgICAgICAgUHRyVHlwZSBvcGVyYXRvciooKSBjb25zdCB7IEFTU0VS
VChtX2luZGV4IDwgbV9jYXBhY2l0eSk7IHJldHVybiBzdGF0aWNfY2FzdDxQdHJUeXBlPihtX2J1
ZmZlclttX2luZGV4XSk7IH0KKyAgICAgICAgVCBvcGVyYXRvciooKSBjb25zdCB7IEFTU0VSVCht
X2luZGV4IDwgbV9jYXBhY2l0eSk7IHJldHVybiBzdGF0aWNfY2FzdDxUPihtX2J1ZmZlclttX2lu
ZGV4XSk7IH0KICAgICAgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IGl0ZXJhdG9yJiBvdGhlcikg
Y29uc3QgeyBBU1NFUlQobV9idWZmZXIgPT0gb3RoZXIubV9idWZmZXIpOyByZXR1cm4gbV9pbmRl
eCA9PSBvdGhlci5tX2luZGV4OyB9CiAgICAgICAgIGJvb2wgb3BlcmF0b3IhPShjb25zdCBpdGVy
YXRvciYgb3RoZXIpIGNvbnN0IHsgQVNTRVJUKG1fYnVmZmVyID09IG90aGVyLm1fYnVmZmVyKTsg
cmV0dXJuICEoKnRoaXMgPT0gb3RoZXIpOyB9CiAKICAgICBwcml2YXRlOgotICAgICAgICB0ZW1w
bGF0ZTx0eXBlbmFtZSBVLCB1bnNpZ25lZCBTPiBmcmllbmQgY2xhc3MgV1RGOjpTbWFsbFB0clNl
dDsKKyAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVSwgdHlwZW5hbWUgSCwgdW5zaWduZWQgUz4g
ZnJpZW5kIGNsYXNzIFdURjo6U21hbGxTZXQ7CiAgICAgICAgIHVuc2lnbmVkIG1faW5kZXg7CiAg
ICAgICAgIHVuc2lnbmVkIG1fY2FwYWNpdHk7Ci0gICAgICAgIHZvaWQqKiBtX2J1ZmZlcjsKKyAg
ICAgICAgVCogbV9idWZmZXI7CiAgICAgfTsKIAogICAgIGl0ZXJhdG9yIGJlZ2luKCkgY29uc3QK
QEAgLTE1NCw5ICsxNjksOSBAQCBwdWJsaWM6CiAgICAgICAgIGl0Lm1faW5kZXggPSBzdGQ6Om51
bWVyaWNfbGltaXRzPHVuc2lnbmVkPjo6bWF4KCk7CiAgICAgICAgIGl0Lm1fY2FwYWNpdHkgPSBt
X2NhcGFjaXR5OwogICAgICAgICBpZiAoaXNTbWFsbCgpKQotICAgICAgICAgICAgaXQubV9idWZm
ZXIgPSBjb25zdF9jYXN0PHZvaWQqKj4obV9zbWFsbFN0b3JhZ2UpOworICAgICAgICAgICAgaXQu
bV9idWZmZXIgPSBjb25zdF9jYXN0PFQqPihtX2lubGluZS5zbWFsbFN0b3JhZ2UpOwogICAgICAg
ICBlbHNlCi0gICAgICAgICAgICBpdC5tX2J1ZmZlciA9IG1fYnVmZmVyOworICAgICAgICAgICAg
aXQubV9idWZmZXIgPSBtX2lubGluZS5idWZmZXI7CiAKICAgICAgICAgKytpdDsKIApAQCAtMTY5
LDI0ICsxODQsMjggQEAgcHVibGljOgogICAgICAgICBpdC5tX2luZGV4ID0gbV9jYXBhY2l0eTsK
ICAgICAgICAgaXQubV9jYXBhY2l0eSA9IG1fY2FwYWNpdHk7CiAgICAgICAgIGlmIChpc1NtYWxs
KCkpCi0gICAgICAgICAgICBpdC5tX2J1ZmZlciA9IGNvbnN0X2Nhc3Q8dm9pZCoqPihtX3NtYWxs
U3RvcmFnZSk7CisgICAgICAgICAgICBpdC5tX2J1ZmZlciA9IGNvbnN0X2Nhc3Q8VCo+KG1faW5s
aW5lLnNtYWxsU3RvcmFnZSk7CiAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIGl0Lm1fYnVmZmVy
ID0gbV9idWZmZXI7CisgICAgICAgICAgICBpdC5tX2J1ZmZlciA9IG1faW5saW5lLmJ1ZmZlcjsK
IAogICAgICAgICByZXR1cm4gaXQ7CiAgICAgfQogCiAgICAgaW5saW5lIHVuc2lnbmVkIHNpemUo
KSBjb25zdCB7IHJldHVybiBtX3NpemU7IH0KIAorICAgIGlubGluZSBib29sIGlzRW1wdHkoKSBj
b25zdCB7IHJldHVybiAhc2l6ZSgpOyB9CisKIHByaXZhdGU6Ci0gICAgY29uc3RleHByIHN0YXRp
YyB2b2lkKiBlbXB0eVZhbHVlKCkKKyAgICBjb25zdGV4cHIgc3RhdGljIFQgZW1wdHlWYWx1ZSgp
CiAgICAgewotICAgICAgICByZXR1cm4gYml0d2lzZV9jYXN0PHZvaWQqPihzdGQ6Om51bWVyaWNf
bGltaXRzPHVpbnRwdHJfdD46Om1heCgpKTsKKyAgICAgICAgaWYgY29uc3RleHByIChzdGQ6Omlz
X3BvaW50ZXI8VD46OnZhbHVlKQorICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PFQ+KGJp
dHdpc2VfY2FzdDx2b2lkKj4oc3RkOjpudW1lcmljX2xpbWl0czx1aW50cHRyX3Q+OjptYXgoKSkp
OworICAgICAgICByZXR1cm4gc3RkOjpudW1lcmljX2xpbWl0czxUPjo6bWF4KCk7CiAgICAgfQog
Ci0gICAgYm9vbCBpc1ZhbGlkRW50cnkoY29uc3QgUHRyVHlwZSBwdHIpIGNvbnN0CisgICAgYm9v
bCBpc1ZhbGlkRW50cnkoY29uc3QgVCB2YWx1ZSkgY29uc3QKICAgICB7Ci0gICAgICAgIHJldHVy
biBwdHIgIT0gZW1wdHlWYWx1ZSgpOworICAgICAgICByZXR1cm4gdmFsdWUgIT0gZW1wdHlWYWx1
ZSgpOwogICAgIH0KIAogICAgIGlubGluZSBib29sIGlzU21hbGwoKSBjb25zdApAQCAtMTk3LDQz
ICsyMTYsNjQgQEAgcHJpdmF0ZToKICAgICBpbmxpbmUgdm9pZCBpbml0aWFsaXplKCkKICAgICB7
CiAgICAgICAgIG1fc2l6ZSA9IDA7Ci0gICAgICAgIG1fYnVmZmVyID0gbnVsbHB0cjsKICAgICAg
ICAgbV9jYXBhY2l0eSA9IFNtYWxsQXJyYXlTaXplOwotICAgICAgICBtZW1zZXQobV9zbWFsbFN0
b3JhZ2UsIC0xLCBzaXplb2Yodm9pZCopICogU21hbGxBcnJheVNpemUpOworICAgICAgICBtZW1z
ZXQobV9pbmxpbmUuc21hbGxTdG9yYWdlLCAtMSwgc2l6ZW9mKFQpICogU21hbGxBcnJheVNpemUp
OwogICAgICAgICBBU1NFUlQoaXNTbWFsbCgpKTsKICAgICB9CiAKICAgICBpbmxpbmUgdm9pZCBn
cm93KHVuc2lnbmVkIHNpemUpCiAgICAgewotICAgICAgICBBU1NFUlQoc3RhdGljX2Nhc3Q8aW50
MzJfdD4oYml0d2lzZV9jYXN0PGludHB0cl90PihlbXB0eVZhbHVlKCkpKSA9PSAtMSk7CisgICAg
ICAgIC8vIFdlIG1lbXNldCB0aGUgbmV3IGJ1ZmZlciB3aXRoIC0xLCBzbyBmb3IgY29uc2lzdGVu
Y3kgZW1wdHlWYWx1ZSgpIG11c3QgcmV0dXJuIHNvbWV0aGluZyB3aGljaCBpcyBhbGwgMXMuCisj
aWYgIWRlZmluZWQoTkRFQlVHKQorICAgICAgICBpZiBjb25zdGV4cHIgKHN0ZDo6aXNfcG9pbnRl
cjxUPjo6dmFsdWUpCisgICAgICAgICAgICBBU1NFUlQoYml0d2lzZV9jYXN0PGludHB0cl90Pihl
bXB0eVZhbHVlKCkpID09IC0xbGwpOworICAgICAgICBlbHNlIGlmIGNvbnN0ZXhwciAoc2l6ZW9m
KFQpID09IDgpCisgICAgICAgICAgICBBU1NFUlQoYml0d2lzZV9jYXN0PGludDY0X3Q+KGVtcHR5
VmFsdWUoKSkgPT0gLTFsbCk7CisgICAgICAgIGVsc2UgaWYgY29uc3RleHByIChzaXplb2YoVCkg
PT0gNCkKKyAgICAgICAgICAgIEFTU0VSVChiaXR3aXNlX2Nhc3Q8aW50MzJfdD4oZW1wdHlWYWx1
ZSgpKSA9PSAtMSk7CisgICAgICAgIGVsc2UgaWYgY29uc3RleHByIChzaXplb2YoVCkgPT0gMikK
KyAgICAgICAgICAgIEFTU0VSVChiaXR3aXNlX2Nhc3Q8aW50MTZfdD4oZW1wdHlWYWx1ZSgpKSA9
PSAtMSk7CisgICAgICAgIGVsc2UgaWYgY29uc3RleHByIChzaXplb2YoVCkgPT0gMSkKKyAgICAg
ICAgICAgIEFTU0VSVChiaXR3aXNlX2Nhc3Q8aW50OF90PihlbXB0eVZhbHVlKCkpID09IC0xKTsK
KyAgICAgICAgZWxzZQorICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsK
KyNlbmRpZgogCi0gICAgICAgIHNpemVfdCBhbGxvY2F0aW9uU2l6ZSA9IHNpemVvZih2b2lkKikg
KiBzaXplOworICAgICAgICBzaXplX3QgYWxsb2NhdGlvblNpemUgPSBzaXplb2YoVCkgKiBzaXpl
OwogICAgICAgICBib29sIHdhc1NtYWxsID0gaXNTbWFsbCgpOwotICAgICAgICB2b2lkKiogb2xk
QnVmZmVyID0gd2FzU21hbGwgPyBtX3NtYWxsU3RvcmFnZSA6IG1fYnVmZmVyOworICAgICAgICBU
KiBvbGRCdWZmZXIgPSB3YXNTbWFsbCA/IG1faW5saW5lLnNtYWxsU3RvcmFnZSA6IG1faW5saW5l
LmJ1ZmZlcjsKICAgICAgICAgdW5zaWduZWQgb2xkQ2FwYWNpdHkgPSBtX2NhcGFjaXR5OwotICAg
ICAgICBtX2J1ZmZlciA9IHN0YXRpY19jYXN0PHZvaWQqKj4oU21hbGxQdHJTZXRNYWxsb2M6Om1h
bGxvYyhhbGxvY2F0aW9uU2l6ZSkpOwotICAgICAgICBtZW1zZXQobV9idWZmZXIsIC0xLCBhbGxv
Y2F0aW9uU2l6ZSk7CisgICAgICAgIFQqIG5ld0J1ZmZlciA9IHN0YXRpY19jYXN0PFQqPihTbWFs
bFNldE1hbGxvYzo6bWFsbG9jKGFsbG9jYXRpb25TaXplKSk7CisgICAgICAgIG1lbXNldChuZXdC
dWZmZXIsIC0xLCBhbGxvY2F0aW9uU2l6ZSk7CiAgICAgICAgIG1fY2FwYWNpdHkgPSBzaXplOwog
CiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBvbGRDYXBhY2l0eTsgaSsrKSB7CiAg
ICAgICAgICAgICBpZiAob2xkQnVmZmVyW2ldICE9IGVtcHR5VmFsdWUoKSkgewotICAgICAgICAg
ICAgICAgIHZvaWQqKiBwdHIgPSB0aGlzLT5idWNrZXQoc3RhdGljX2Nhc3Q8UHRyVHlwZT4ob2xk
QnVmZmVyW2ldKSk7CisgICAgICAgICAgICAgICAgVCogcHRyID0gYnVja2V0SW5CdWZmZXIobmV3
QnVmZmVyLCBzdGF0aWNfY2FzdDxUPihvbGRCdWZmZXJbaV0pKTsKICAgICAgICAgICAgICAgICAq
cHRyID0gb2xkQnVmZmVyW2ldOwogICAgICAgICAgICAgfQogICAgICAgICB9CiAKICAgICAgICAg
aWYgKCF3YXNTbWFsbCkKLSAgICAgICAgICAgIFNtYWxsUHRyU2V0TWFsbG9jOjpmcmVlKG9sZEJ1
ZmZlcik7CisgICAgICAgICAgICBTbWFsbFNldE1hbGxvYzo6ZnJlZShvbGRCdWZmZXIpOworCisg
ICAgICAgIG1faW5saW5lLmJ1ZmZlciA9IG5ld0J1ZmZlcjsKICAgICB9CiAKIAotICAgIGlubGlu
ZSB2b2lkKiogYnVja2V0KFB0clR5cGUgdGFyZ2V0KSBjb25zdAorICAgIGlubGluZSBUKiBidWNr
ZXQoVCB0YXJnZXQpIGNvbnN0CisgICAgeworICAgICAgICBBU1NFUlQoIWlzU21hbGwoKSk7Cisg
ICAgICAgIHJldHVybiBidWNrZXRJbkJ1ZmZlcihtX2lubGluZS5idWZmZXIsIHRhcmdldCk7Cisg
ICAgfQorCisgICAgaW5saW5lIFQqIGJ1Y2tldEluQnVmZmVyKFQqIGJ1ZmZlciwgVCB0YXJnZXQp
IGNvbnN0CiAgICAgewogICAgICAgICBBU1NFUlQoIShtX2NhcGFjaXR5ICYgKG1fY2FwYWNpdHkg
LSAxKSkpOwotICAgICAgICB1bnNpZ25lZCBidWNrZXQgPSBQdHJIYXNoQmFzZTxQdHJUeXBlLCBm
YWxzZSAvKiBpc1NtYXJ0UHRyICovPjo6aGFzaCh0YXJnZXQpICYgKG1fY2FwYWNpdHkgLSAxKTsK
KyAgICAgICAgdW5zaWduZWQgYnVja2V0ID0gSGFzaDo6aGFzaCh0YXJnZXQpICYgKG1fY2FwYWNp
dHkgLSAxKTsKICAgICAgICAgdW5zaWduZWQgaW5kZXggPSAwOwogICAgICAgICB3aGlsZSAodHJ1
ZSkgewotICAgICAgICAgICAgdm9pZCoqIHB0ciA9IG1fYnVmZmVyICsgYnVja2V0OworICAgICAg
ICAgICAgVCogcHRyID0gYnVmZmVyICsgYnVja2V0OwogICAgICAgICAgICAgaWYgKCpwdHIgPT0g
ZW1wdHlWYWx1ZSgpKQogICAgICAgICAgICAgICAgIHJldHVybiBwdHI7CiAgICAgICAgICAgICBp
ZiAoKnB0ciA9PSB0YXJnZXQpCkBAIC0yNDUsMTAgKzI4NSwxMyBAQCBwcml2YXRlOgogCiAgICAg
dW5zaWduZWQgbV9zaXplOwogICAgIHVuc2lnbmVkIG1fY2FwYWNpdHk7Ci0gICAgdm9pZCoqIG1f
YnVmZmVyOwotICAgIHZvaWQqIG1fc21hbGxTdG9yYWdlW1NtYWxsQXJyYXlTaXplXTsKKyAgICB1
bmlvbiBVIHsKKyAgICAgICAgVCogYnVmZmVyOworICAgICAgICBUIHNtYWxsU3RvcmFnZVtTbWFs
bEFycmF5U2l6ZV07CisgICAgICAgIFUoKSB7IH07CisgICAgfSBtX2lubGluZTsKIH07CiAKIH0g
Ly8gbmFtZXNwYWNlIFdURgogCi11c2luZyBXVEY6OlNtYWxsUHRyU2V0OwordXNpbmcgV1RGOjpT
bWFsbFNldDsKZGlmZiAtLWdpdCBhL1Rvb2xzL0NoYW5nZUxvZyBiL1Rvb2xzL0NoYW5nZUxvZwpp
bmRleCAyNTBiMzI5MGJiM2QuLjE2YmU0ZDBiMGRmMiAxMDA2NDQKLS0tIGEvVG9vbHMvQ2hhbmdl
TG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE5IEBACisyMDIxLTA1LTE3ICBS
b2JpbiBNb3Jpc3NldCAgPHJtb3Jpc3NldEBhcHBsZS5jb20+CisKKyAgICAgICAgTWFrZSBBaXJB
bGxvY2F0ZVJlZ2lzdGVyc0J5R3JhcGhDb2xvcmluZyB1c2UgbGVzcyBtZW1vcnkKKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIyNTg0OAorCisgICAgICAg
IFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUykuCisKKyAgICAgICAgd3RmL1NtYWxsUHRyU2V0IChu
b3cgU21hbGxTZXQpIHdhcyBjb21wbGV0ZWx5IHVudGVzdGVkLCBzbyBJIGp1c3QgYWRkZWQgYSBm
ZXcgc2ltcGxlIHRlc3RzLgorCisgICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0V2ViS2l0QVBJ
Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0
cy9XVEYvU21hbGxTZXQuY3BwOiBBZGRlZC4KKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OnRlc3RT
bWFsbFNldE9mVW5zaWduZWQpOgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6dGVzdFNtYWxsU2V0
T2ZQb2ludGVycyk6CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjp0ZXN0VmVjdG9yc09mU21hbGxT
ZXRzT2ZVbnNpZ25lZCk6CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpURVNUKToKKwogMjAyMS0w
NS0xNSAgSmVyIE5vYmxlICA8amVyLm5vYmxlQGFwcGxlLmNvbT4KIAogICAgICAgICBNZWRpYVNl
c3Npb25Db29yZGluYXRvciBzdXJ2aXZlcyBwYWdlIHJlbG9hZC9uYXZpZ2F0aW9uCmRpZmYgLS1n
aXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RXZWJLaXRBUEkueGNvZGVwcm9qL3Byb2plY3Qu
cGJ4cHJvaiBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdFdlYktpdEFQSS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCmluZGV4IDY0NmY4NDIwN2EwZS4uMmI1Y2Q2ZTJmYjNlIDEwMDY0NAotLS0g
YS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RXZWJLaXRBUEkueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvagorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RXZWJLaXRBUEkueGNvZGVwcm9qL3By
b2plY3QucGJ4cHJvagpAQCAtMjA4LDYgKzIwOCw3IEBACiAJCTMxRTlCREEzMjQ3RjU3MjkwMDJF
NTFBMiAvKiB3ZWJnbC5odG1sIGluIENvcHkgUmVzb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDMxRTlCREEyMjQ3RjRERDAwMDJFNTFBMiAvKiB3ZWJnbC5odG1sICov
OyB9OwogCQkzMzk3NkQ4MzI0REM0NzlCMDA4MTIzMDQgLyogSW5kZXhTcGFyc2VTZXQuY3BwIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMzM5NzZEODIyNERD
NDc5QjAwODEyMzA0IC8qIEluZGV4U3BhcnNlU2V0LmNwcCAqLzsgfTsKIAkJMzNCRTVBRjkxMzdC
NUFBRTAwNzA1ODEzIC8qIE1vdXNlTW92ZUFmdGVyQ3Jhc2hfQnVuZGxlLmNwcCBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDMzQkU1QUY4MTM3QjVBQUUwMDcw
NTgxMyAvKiBNb3VzZU1vdmVBZnRlckNyYXNoX0J1bmRsZS5jcHAgKi87IH07CisJCTMzQzJDOUMx
MjY1MUY1QjkwMEU0MDdGNiAvKiBTbWFsbFNldC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzM0MyQzlDMDI2NTFGNUI5MDBFNDA3RjYgLyogU21hbGxT
ZXQuY3BwICovOyB9OwogCQkzM0RDODkxMjE0MTk1NUZFMDA3NDdFRjcgLyogc2ltcGxlLWlmcmFt
ZS5odG1sIGluIENvcHkgUmVzb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDMzREM4OTBFMTQxOTUzOTMwMDc0N0VGNyAvKiBzaW1wbGUtaWZyYW1lLmh0bWwgKi87IH07
CiAJCTMzREM4OTE0MTQxOTU3OUYwMDc0N0VGNyAvKiBMb2FkQ2FuY2VsZWROb1NlcnZlclJlZGly
ZWN0Q2FsbGJhY2tfQnVuZGxlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDMzREM4OTEzMTQxOTU3OUYwMDc0N0VGNyAvKiBMb2FkQ2FuY2VsZWROb1Nl
cnZlclJlZGlyZWN0Q2FsbGJhY2tfQnVuZGxlLmNwcCAqLzsgfTsKIAkJMzNFNzlFMDYxMzdCNUZE
OTAwRTMyRDk5IC8qIG1vdXNlLW1vdmUtbGlzdGVuZXIuaHRtbCBpbiBDb3B5IFJlc291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzM0U3OUUwNTEzN0I1RkNFMDBFMzJE
OTkgLyogbW91c2UtbW92ZS1saXN0ZW5lci5odG1sICovOyB9OwpAQCAtMTk5Miw2ICsxOTkzLDcg
QEAKIAkJMzM5NzZEODIyNERDNDc5QjAwODEyMzA0IC8qIEluZGV4U3BhcnNlU2V0LmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEluZGV4U3BhcnNlU2V0LmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMzNCRTVBRjQxMzdCNUE2QzAwNzA1ODEzIC8qIE1v
dXNlTW92ZUFmdGVyQ3Jhc2guY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRo
ID0gTW91c2VNb3ZlQWZ0ZXJDcmFzaC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTMzQkU1QUY4MTM3QjVBQUUwMDcwNTgxMyAvKiBNb3VzZU1vdmVBZnRlckNyYXNoX0J1bmRsZS5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBNb3VzZU1vdmVBZnRlckNy
YXNoX0J1bmRsZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTMzQzJDOUMwMjY1
MUY1QjkwMEU0MDdGNiAvKiBTbWFsbFNldC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTbWFsbFNl
dC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTMzREM4OTBFMTQxOTUzOTMwMDc0
N0VGNyAvKiBzaW1wbGUtaWZyYW1lLmh0bWwgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0Lmh0bWw7IHBhdGggPSAi
c2ltcGxlLWlmcmFtZS5odG1sIjsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMzNEQzg5
MTAxNDE5NTNBMzAwNzQ3RUY3IC8qIExvYWRDYW5jZWxlZE5vU2VydmVyUmVkaXJlY3RDYWxsYmFj
ay5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBMb2FkQ2FuY2VsZWRO
b1NlcnZlclJlZGlyZWN0Q2FsbGJhY2suY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQkzM0RDODkxMzE0MTk1NzlGMDA3NDdFRjcgLyogTG9hZENhbmNlbGVkTm9TZXJ2ZXJSZWRpcmVj
dENhbGxiYWNrX0J1bmRsZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGgg
PSBMb2FkQ2FuY2VsZWROb1NlcnZlclJlZGlyZWN0Q2FsbGJhY2tfQnVuZGxlLmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTQ0MjAsNiArNDQyMiw3IEBACiAJCQkJOTMzRDYzMUIx
RkNCNzYxODAwMzJFQ0Q2IC8qIEhhc2hlci5jcHAgKi8sCiAJCQkJMEJDRDgzMzQxNDg1N0NFNDAw
RUEyMDAzIC8qIEhhc2hNYXAuY3BwICovLAogCQkJCTI2QjJERkY4MTVCREU1OTkwMDRGNjkxRCAv
KiBIYXNoU2V0LmNwcCAqLywKKwkJCQkzM0MyQzlDMDI2NTFGNUI5MDBFNDA3RjYgLyogU21hbGxT
ZXQuY3BwICovLAogCQkJCTdDOEJGRjcwMjNDMDEwNjcwMEMwMDlCMyAvKiBIZXhOdW1iZXIuY3Bw
ICovLAogCQkJCTMzOTc2RDgyMjREQzQ3OUIwMDgxMjMwNCAvKiBJbmRleFNwYXJzZVNldC5jcHAg
Ki8sCiAJCQkJMjY2RkFGRDIxNUU1Nzc1MjAwRjYxRDVCIC8qIEludGVnZXJUb1N0cmluZ0NvbnZl
cnNpb24uY3BwICovLApAQCAtNTE1NSw2ICs1MTU4LDcgQEAKIAkJCWZpbGVzID0gKAogCQkJCTdD
ODNERTk5MUQwQTU5MEMwMEZFQkNGMyAvKiBBdG9tU3RyaW5nLmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCUZFMkQ5NDc0MjQ1RUIyRjQwMEU0ODEzNSAvKiBCaXRtYXAuY3BwIGluIFNvdXJjZXMgKi8s
CisJCQkJMzNDMkM5QzEyNjUxRjVCOTAwRTQwN0Y2IC8qIFNtYWxsU2V0LmNwcCBpbiBTb3VyY2Vz
ICovLAogCQkJCTFBREFEMTUwMUQ3N0E5RjYwMDIxMjU4NiAvKiBCbG9ja1B0ci5tbSBpbiBTb3Vy
Y2VzICovLAogCQkJCTdDODNERTlDMUQwQTU5MEMwMEZFQkNGMyAvKiBCbG9vbUZpbHRlci5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQk3QzgzREYxODFEMEE1OTBDMDBGRUJDRjMgLyogQm94UHRyLmNw
cCBpbiBTb3VyY2VzICovLApkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9X
VEYvU21hbGxTZXQuY3BwIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XVEYvU21hbGxTZXQu
Y3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMC4uMTk4NDkwOWQ1Mzdi
Ci0tLSAvZGV2L251bGwKKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XVEYvU21hbGxT
ZXQuY3BwCkBAIC0wLDAgKzEsMTUzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycn
CisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwor
ICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICog
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5o
IgorCisjaW5jbHVkZSAiVGVzdC5oIgorI2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+CisjaW5jbHVk
ZSA8d3RmL1NtYWxsU2V0Lmg+CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorCituYW1lc3BhY2Ug
VGVzdFdlYktpdEFQSSB7CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+Cit2b2lkIHRlc3RTbWFsbFNl
dE9mVW5zaWduZWQodW5zaWduZWQgbikKK3sKKyAgICBTbWFsbFNldDxULCBJbnRIYXNoPFQ+PiBz
ZXQ7CisKKyAgICBFWFBFQ1RfVFJVRShzZXQuaXNFbXB0eSgpKTsKKyAgICBFWFBFQ1RfRVEoc2V0
LnNpemUoKSwgMHUpOworCisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG47ICsraSkgewor
ICAgICAgICBhdXRvIHJlc3VsdCA9IHNldC5hZGQoaSk7CisgICAgICAgIEVYUEVDVF9UUlVFKHJl
c3VsdC5pc05ld0VudHJ5KTsKKyAgICB9CisKKyAgICBFWFBFQ1RfRkFMU0Uoc2V0LmlzRW1wdHko
KSk7CisgICAgRVhQRUNUX0VRKHNldC5zaXplKCksIG4pOworCisgICAgZm9yICh1bnNpZ25lZCBp
ID0gMDsgaSA8IDIgKiBuOyBpICs9IDIpIHsKKyAgICAgICAgYXV0byByZXN1bHQgPSBzZXQuYWRk
KGkpOworICAgICAgICBpZiAoaSA8IG4pCisgICAgICAgICAgICBFWFBFQ1RfRkFMU0UocmVzdWx0
LmlzTmV3RW50cnkpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBFWFBFQ1RfVFJVRShyZXN1
bHQuaXNOZXdFbnRyeSk7CisgICAgfQorCisgICAgRVhQRUNUX0VRKHNldC5zaXplKCksIG4gKyBu
IC8gMik7CisKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgMiAqIG47ICsraSkgeworICAg
ICAgICBpZiAoaSA8IG4gfHwgIShpICUgMikpCisgICAgICAgICAgICBFWFBFQ1RfVFJVRShzZXQu
Y29udGFpbnMoaSkpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBFWFBFQ1RfRkFMU0Uoc2V0
LmNvbnRhaW5zKGkpKTsKKyAgICB9CisKKyAgICB1bnNpZ25lZCBjb3VudCA9IDA7CisgICAgSGFz
aFNldDxUPiByZWZlcmVuY2VTZXQ7CisgICAgZm9yICh1bnNpZ25lZCBpIDogc2V0KSB7CisgICAg
ICAgIHJlZmVyZW5jZVNldC5hZGQoaSk7CisgICAgICAgICsrY291bnQ7CisgICAgfQorICAgIEVY
UEVDVF9FUShjb3VudCwgbiArIG4gLyAyKTsKKyAgICBFWFBFQ1RfRVEoY291bnQsIHJlZmVyZW5j
ZVNldC5zaXplKCkpOworfQorCit2b2lkIHRlc3RTbWFsbFNldE9mUG9pbnRlcnMoKQoreworICAg
IFNtYWxsU2V0PGludCo+IHNldDsKKworICAgIGNvbnN0ZXhwciB1bnNpZ25lZCBhcnJheVNpemUg
PSAyMDA7CisgICAgaW50IGFycmF5W2FycmF5U2l6ZV07CisgICAgZm9yICh1bnNpZ25lZCBpID0g
MDsgaSA8IGFycmF5U2l6ZTsgKytpKQorICAgICAgICBhcnJheVtpXSA9IGk7CisKKyAgICBmb3Ig
KHVuc2lnbmVkIGkgPSAwOyBpIDwgYXJyYXlTaXplOyArK2kpIHsKKyAgICAgICAgaW50KiBwdHIg
PSAmKGFycmF5W2ldKTsKKyAgICAgICAgRVhQRUNUX0ZBTFNFKHNldC5jb250YWlucyhwdHIpKTsK
KyAgICAgICAgYXV0byByZXN1bHQgPSBzZXQuYWRkKHB0cik7CisgICAgICAgIEVYUEVDVF9UUlVF
KHJlc3VsdC5pc05ld0VudHJ5KTsKKyAgICAgICAgRVhQRUNUX1RSVUUoc2V0LmNvbnRhaW5zKHB0
cikpOworICAgICAgICByZXN1bHQgPSBzZXQuYWRkKHB0cik7CisgICAgICAgIEVYUEVDVF9GQUxT
RShyZXN1bHQuaXNOZXdFbnRyeSk7CisgICAgfQorCisgICAgZm9yIChpbnQqIHB0ciA6IHNldCkK
KyAgICAgICAgKysoKnB0cik7CisKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgYXJyYXlT
aXplOyArK2kpCisgICAgICAgIEVYUEVDVF9FUShhcnJheVtpXSwgc3RhdGljX2Nhc3Q8aW50Pihp
KzEpKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVD4KK3ZvaWQgdGVzdFZlY3RvcnNPZlNtYWxs
U2V0c09mVW5zaWduZWQoKQoreworICAgIFZlY3RvcjxTbWFsbFNldDxULCBJbnRIYXNoPFQ+Piwg
Mj4gdmVjdG9yOworICAgIHZlY3Rvci5hcHBlbmQoeyB9KTsKKyAgICB2ZWN0b3IuYXBwZW5kKHsg
fSk7CisKKyAgICB2ZWN0b3JbMF0uYWRkKDEwMCk7CisgICAgdmVjdG9yWzBdLmFkZCgyMDApOwor
ICAgIHZlY3RvclswXS5hZGQoMzAwKTsKKworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCAy
MDA7ICsraSkKKyAgICAgICAgdmVjdG9yWzFdLmFkZChpKTsKKworICAgIC8vIE5vdyB3ZSBjYXVz
ZSB0aGUgdmVjdG9yIHRvIGNvcHkgaXRzIGNvbnRlbnRzIHRvIGEgbGFyZ2VyIGJ1ZmZlci4KKyAg
ICAvLyBUaGlzIHNob3VsZCBjb3JydXB0IG5laXRoZXIgdGhlIHNtYWxsIHNldCB0aGF0IHVzZXMg
aW5saW5lIHN0b3JhZ2UgKHZlY3RvclswXSksIG5vciB0aGUgb25lIHRoYXQgdXNlcyBhbiBvdXQt
b2YtbGluZSBidWZmZXIgKHZlY3RvclsxXSkuCisgICAgdmVjdG9yLnJlc2l6ZSgzMDApOworCisg
ICAgRVhQRUNUX0VRKHZlY3RvclswXS5zaXplKCksIDN1KTsKKyAgICBFWFBFQ1RfVFJVRSh2ZWN0
b3JbMF0uY29udGFpbnMoMTAwKSk7CisgICAgRVhQRUNUX1RSVUUodmVjdG9yWzBdLmNvbnRhaW5z
KDIwMCkpOworICAgIEVYUEVDVF9UUlVFKHZlY3RvclswXS5jb250YWlucygzMDApKTsKKyAgICBF
WFBFQ1RfRkFMU0UodmVjdG9yWzBdLmNvbnRhaW5zKDQyKSk7CisKKyAgICBFWFBFQ1RfRVEodmVj
dG9yWzFdLnNpemUoKSwgMTAwdSk7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IDIwMDsg
KytpKQorICAgICAgICBFWFBFQ1RfVFJVRSh2ZWN0b3JbMV0uY29udGFpbnMoaSkpOworICAgIEVY
UEVDVF9GQUxTRSh2ZWN0b3JbMV0uY29udGFpbnMoMzAwKSk7Cit9CisKK1RFU1QoV1RGX1NtYWxs
U2V0LCBUaHJlZVVpbnQ4KSB7IHRlc3RTbWFsbFNldE9mVW5zaWduZWQ8dWludDhfdD4oMyk7IH0K
K1RFU1QoV1RGX1NtYWxsU2V0LCBGb3VyVWludDgpIHsgdGVzdFNtYWxsU2V0T2ZVbnNpZ25lZDx1
aW50OF90Pig0KTsgfQorVEVTVChXVEZfU21hbGxTZXQsIEh1bmRyZWRVaW50OCkgeyB0ZXN0U21h
bGxTZXRPZlVuc2lnbmVkPHVpbnQ4X3Q+KDEwMCk7IH0KK1RFU1QoV1RGX1NtYWxsU2V0LCBUaHJl
ZVVpbnQxNikgeyB0ZXN0U21hbGxTZXRPZlVuc2lnbmVkPHVpbnQxNl90PigzKTsgfQorVEVTVChX
VEZfU21hbGxTZXQsIEZvdXJVaW50MTYpIHsgdGVzdFNtYWxsU2V0T2ZVbnNpZ25lZDx1aW50MTZf
dD4oNCk7IH0KK1RFU1QoV1RGX1NtYWxsU2V0LCBIdW5kcmVkVWludDE2KSB7IHRlc3RTbWFsbFNl
dE9mVW5zaWduZWQ8dWludDE2X3Q+KDEwMCk7IH0KK1RFU1QoV1RGX1NtYWxsU2V0LCBUaHJlZVVp
bnQzMikgeyB0ZXN0U21hbGxTZXRPZlVuc2lnbmVkPHVpbnQzMl90PigzKTsgfQorVEVTVChXVEZf
U21hbGxTZXQsIEZvdXJVaW50MzIpIHsgdGVzdFNtYWxsU2V0T2ZVbnNpZ25lZDx1aW50MzJfdD4o
NCk7IH0KK1RFU1QoV1RGX1NtYWxsU2V0LCBIdW5kcmVkVWludDMyKSB7IHRlc3RTbWFsbFNldE9m
VW5zaWduZWQ8dWludDMyX3Q+KDEwMCk7IH0KK1RFU1QoV1RGX1NtYWxsU2V0LCBUaHJlZVVpbnQ2
NCkgeyB0ZXN0U21hbGxTZXRPZlVuc2lnbmVkPHVpbnQ2NF90PigzKTsgfQorVEVTVChXVEZfU21h
bGxTZXQsIEZvdXJVaW50NjQpIHsgdGVzdFNtYWxsU2V0T2ZVbnNpZ25lZDx1aW50NjRfdD4oNCk7
IH0KK1RFU1QoV1RGX1NtYWxsU2V0LCBIdW5kcmVkVWludDY0KSB7IHRlc3RTbWFsbFNldE9mVW5z
aWduZWQ8dWludDY0X3Q+KDEwMCk7IH0KKworVEVTVChXVEZfU21hbGxTZXQsIFBvaW50ZXJzKSB7
IHRlc3RTbWFsbFNldE9mUG9pbnRlcnMoKTsgfQorCitURVNUKFdURl9TbWFsbFNldCwgVmVjdG9y
VWludDE2KSB7IHRlc3RWZWN0b3JzT2ZTbWFsbFNldHNPZlVuc2lnbmVkPHVpbnQxNl90PigpOyB9
CitURVNUKFdURl9TbWFsbFNldCwgVmVjdG9yVWludDMyKSB7IHRlc3RWZWN0b3JzT2ZTbWFsbFNl
dHNPZlVuc2lnbmVkPHVpbnQzMl90PigpOyB9CitURVNUKFdURl9TbWFsbFNldCwgVmVjdG9yVWlu
dDY0KSB7IHRlc3RWZWN0b3JzT2ZTbWFsbFNldHNPZlVuc2lnbmVkPHVpbnQ2NF90PigpOyB9CisK
K30gLy8gbmFtZXNwYWNlIFRlc3RXZWJLaXRBUEkK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>428871</attachid>
            <date>2021-05-17 14:36:20 -0700</date>
            <delta_ts>2021-05-18 16:26:14 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>patchRegisterAllocator</filename>
            <type>text/plain</type>
            <size>86923</size>
            <attacher name="Robin Morisset">rmorisset</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvQ2hhbmdlTG9nCmluZGV4IGY4MzBjYTkzZDA0OC4uNGQ4NzcyZTVhYjQxIDEw
MDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxMDEgQEAKKzIwMjEtMDUtMTcgIFJv
YmluIE1vcmlzc2V0ICA8cm1vcmlzc2V0QGFwcGxlLmNvbT4KKworICAgICAgICBNYWtlIEFpckFs
bG9jYXRlUmVnaXN0ZXJzQnlHcmFwaENvbG9yaW5nIHVzZSBsZXNzIG1lbW9yeQorICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjI1ODQ4CisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTKS4KKworICAgICAgICBXZeKAmXZlIGhhZCBzb21lIGpl
dHNhbSBwcm9ibGVtcyBjYXVzZWQgYnkgdGhlIG1haW4gQWlyIHJlZ2lzdGVyIGFsbG9jYXRvciwg
d2hpY2ggY2F1c2VkIHVzIHRvIGxvd2VyIE9wdGlvbnM6Om1heGltdW1UbXBzRm9yR3JhcGhDb2xv
cmluZy4KKyAgICAgICAgSGVuY2UgdGhpcyBwYXRjaCB0cmllcyB0byBpbXByb3ZlIHRoZSBtZW1v
cnkgdXNhZ2Ugb2YgdGhlIGFsbG9jYXRvci4gSXQgaW5jbHVkZXMgc2V2ZXJhbCBjaGFuZ2VzOgor
ICAgICAgICAtIENoYW5nZSB0aGUgZGF0YXN0cnVjdHVyZSB1c2VkIGZvciByZXByZXNlbnRpbmcg
dGhlIGludGVyZmVyZW5jZSBncmFwaC4gQmVmb3JlIGl0IHdhcyBlZmZlY3RpdmVseSBhIEhhc2hT
ZXQ8c3RkOjpwYWlyPHVpbnQxNl90LCB1aW50MTZfdD4uIE5vdywgaXQgaXMgZWl0aGVyIGEgQml0
dmVjdG9yIChmb3IgbiA8IDQwMCBmb3Igbm93LCBjYW4gYmUgdHdlYWtlZCBlYXNpbHkpLCBvciBh
IFZlY3RvcjxTbWFsbFNldDx1aW50MTZfdD4+IG90aGVyd2lzZS4gVGhpcyBuZWFybHkgaGFsdmVz
IGl0cyBtZW1vcnkgY29uc3VtcHRpb24gaW4gdGhlIGNhc2UgdGhhdCB0aGUgZ3JhcGggaXMgZGVu
c2UgKHdoaWNoIGlzIHdoZW4gdGhlIG92ZXJoZWFkIG9mIHRoZSBTbWFsbFNldHMgaXMgbWluaW1p
emVkLCBhbmQgd2hlbiB0aGUgcmVnaXN0ZXIgYWxsb2NhdG9yIHVzZXMgdGhlIG1vc3QgbWVtb3J5
KS4gSW4gb3JkZXIgdG8gZWFzaWx5IHRlc3QgdGhpcyBjaGFuZ2UsIGFuZCBhbnkgZnVydGhlciBj
aGFuZ2UgdG8gdGhpcyBkYXRhc3RydWN0dXJlLCB0aGUgb2xkIGFwcHJvYWNoIHdhcyBwcmVzZXJ2
ZWQgYXMgSW50ZXJmZXJlbmNlSGFzaFNldCwgYW5kIGEgdGVtcGxhdGUgdG8gcnVuIHR3byBzdWNo
IGRhdGFzdHJ1Y3R1cmVzIGluIHBhcmFsbGVsLCBjaGVja2luZyB0aGVpciBlcXVpdmFsZW5jZSB3
YXMgYWRkZWQ6IEluc3RydW1lbnRlZEludGVyZmVyZW5jZUdyYXBoCisgICAgICAgIC0gVGhlcmUg
d2FzIGFscmVhZHkgc29tZSB0ZW1wbGF0ZSBwYXJhbWV0ZXIgdG8gY2hhbmdlIHRoZSBzaXplIG9m
IHRoZSB0bXAgaW5kaWNlcyBmcm9tIHVuc2lnbmVkIHRvIHVpbnQxNl90Li4gYnV0IHRoZSBjb2Rl
IGZhaWxlZCB0byBjb21waWxlIHVubGVzcyBpdCB3YXMgdW5zaWduZWQuIEkgZml4ZWQgdGhpcywg
bWFkZSBtb3JlIGNvbnNpc3RlbnQgdXNlIG9mIGl0LCBhbmQgc3dpdGNoZWQgdG8gdWludDE2X3Qg
YnkgZGVmYXVsdCAoc2luY2UgT3B0aW9uczo6bWF4aW11bVRtcHNGb3JHcmFwaENvbG9yaW5nIGlz
IDI1aywgd2UgYXJlIGZhciBmcm9tIGV4aGF1c3RpbmcgdWludDE2X3QpLiBUaGlzIGhhbHZlZCB0
aGUgbWVtb3J5IHVzYWdlIG9mIHZhcmlvdXMgb3RoZXIgZGF0YXN0cnVjdHVyZXMgaW4gdGhlIHJl
Z2lzdGVyIGFsbG9jYXRvcgorICAgICAgICAtIHVuc3BpbGxhYmxlVG1wcyB3YXMgYSBIYXNoU2V0
PHVuc2lnbmVkPi4gU2luY2UgaXQgaXMgb2Z0ZW4gcXVpdGUgZGVuc2UgKG9mdGVuIGFyb3VuZCAy
MCUgb24gSmV0U3RyZWFtMiksIEkgcmVwbGFjZWQgaXQgYnkgYSBCaXR2ZWN0b3IgaW5zdGVhZAor
ICAgICAgICAtIG1fYmlhc2VzIHdhcyBhIEhhc2hNYXA8SW5kZXhUeXBlLCBIYXNoU2V0PEluZGV4
VHlwZT4+LiBTaW5jZSBpdCBpcyBleHRyZW1lbHkgcmFyZSB0aGF0IHRoZSBzZXRzIGhhdmUgbW9y
ZSB0aGFuIDggZWxlbWVudHMgKGZyb20gbG9va2luZyBhdCBzb21lIGluc3RydW1lbnRlZCBydW4g
b2YgSmV0U3RyZWFtMiksIEkgcmVwbGFjZWQgaXQgYnkgSGFzaE1hcDxJbmRleFR5cGUsIFNtYWxs
U2V0PEluZGV4VHlwZT4+LiBUaGlzIG5vdCBvbmx5IHNpZ25pZmljYW50bHkgcmVkdWNlcyBtZW1v
cnksIGJ1dCBuZWFybHkgaGFsdmVzIHRoZSB0aW1lIHNwZW50IGluIGFzc2lnbkNvbG9ycyhhcm91
bmQgODBtcyAtPiA0MG1zIGluIEpldFN0cmVhbSAyKQorICAgICAgICAtIFVzZUNvdW50cyB3YXMg
bmVlZGxlc3NseSBnZW5lcmFsOiBpdCBpcyBvbmx5IHVzZWQgYnkgdGhlIHJlZ2lzdGVyIGFsbG9j
YXRvciAoYWxsIG90aGVyIHJlZmVyZW5jZXMgdG8gVXNlQ291bnRzIHJlZmVyIHRvIHRoZSBjb21w
bGV0ZWx5IGRpZmZlcmVudCBCMzo6VXNlQ291bnRzKSwgc28gdGhlcmUgaXMgbm8gcG9pbnQgaW4g
aXQgY29tcHV0aW5nLCBhbmQgdGhlbiBzdG9yaW5nIGxvdHMgb2YgaXJyZWxldmFudCBkYXRhLiBB
IGZsb2F0IGlzIGFsc28gbW9yZSB0aGFuIGVub3VnaCBwcmVjaXNpb24gKGVzcGVjaWFsbHkgc2lu
Y2UgaXQgaXMgcHJldHR5IG11Y2ggYWx3YXlzIDEsIDEwLCAxMDAsIG9yIDEwMDAgaW4gcHJhY3Rp
Y2XigKYpLiBBbHNvLCBzaW5jZSB3ZSBvbmx5IG5lZWQgaXQgaW5kZXhlZCBieSBUbXBzLCB3ZSBj
YW4gdXNlIGEgVmVjdG9yIHdpdGggQWJzb2x1dGVUbXBNYXBwZXIgaW5zdGVhZCBvZiBpdHMgSGFz
aE1hcC4gVGhlc2UgY2hhbmdlcyBhcmUgbm90IGp1c3QgbWVtb3J5IHNhdmluZ3MsIHRoZXkgYWxz
byBtYWtlIHNlbGVjdFNwaWxsIHdheSBmYXN0ZXIgKDU3MG1zIC0+IDI1MG1zIG9uIG15IG1hY2hp
bmUgb24gSmV0U3RyZWFtMikKKyAgICAgICAgLSBXaGlsZSBJIHdhcyBhdCBpdCwgSSBkaWQgYSBj
b3VwbGUgb2Ygb3RoZXIgdHdlYWtzIHRvIHRoZSBsb2dpYyBvZiBzZWxlY3RTcGlsbC4gSW4gcGFy
dGljdWxhciwgaW5zdGVhZCBvZiBoYXZpbmcgdG8gY2hlY2sgZm9yIGlzRmFzdFRtcCBldmVyeSB0
aW1lLCBJIGp1c3QgcHV0IHRoZSBmYXN0IHRtcHMgZGlyZWN0bHkgaW4gdW5zcGlsbGFibGVUbXBz
LCB3aGljaCBwcmV2ZW50cyB0aGVtIGZyb20gZ2V0dGluZyBhZGRlZCB0byBtX3NwaWxsV29ya2xp
c3QgaW4gdGhlIGZpcnN0IHBsYWNlLiBUaGlzICsgYSBiaXQgb2YgY2xlYW4tdXAgKGZvciBleGFt
cGxlIHB1dHRpbmcgYW4gZWFybHkgZXhpdCBpbnN0ZWFkIG9mIHNldHRpbmcgc2NvcmUgdG8gaW5m
aW5pdHkgaW4gdGhlIGNhc2Ugb2YgZGVhZCB0bXBzKSByZXN1bHRlZCBpbiBhIGZ1cnRoZXIgcGVy
ZiB3aW4gKHRvIHJvdWdobHkgMjAwbXMgc3BlbnQgaW4gc2VsZWN0U3BpbGwoKSBvbiBKZXRTdHJl
YW0yKQorCisgICAgICAgIEFsbCB0b2dldGhlciwgdGhpcyBwYXRjaCByZWR1Y2VzIHRoZSB0aW1l
IHNwZW50IGluIHRoZSByZWdpc3RlciBhbGxvY2F0b3IgYnkgcm91Z2hseSAxNSB0byAyMCUgaW4g
SmV0U3RyZWFtMiAodGVzdGVkIGJvdGggd2l0aCB0aGUgQnJpZ2dzIGFuZCB0aGUgSVJDIGFsbG9j
YXRvcnMgb24gbXkgTUJQIDIwMTkpLgorCisgICAgICAgIFNvIGZhciBJIGhhdmUgcGVyZm9ybWFu
Y2UgbnVtYmVycyBmb3IgdGhpcyBwYXRjaCBvbiBib3RoIGFuIGlQaG9uZSA3IGFuZCBhbiBpUGFk
IFBybyAyIChJJ2xsIHB1dCB0aGUgbnVtYmVycyBvbiBNYWMgaW4gdGhlIGJ1Z3ppbGxhIGlzc3Vl
IG9uY2UgdGhlIHBlcmZvcm1hbmNlIGJvdCBkZWlnbnMgdG8gZ2V0IHRvIGl0KS4KKyAgICAgICAg
T24gaVBob25lIDcsIHdlIHNlZSBhIDAuOTQlIGltcHJvdmVtZW50IHRvIHRoZSBKSVQgdGVzdHMg
c2VjdGlvbiBvZiBSQU1pZmljYXRpb24gKHA8MC4wMiksIHdpdGggdGhlIGZvbGxvd2luZyBzaWdu
aWZpY2FudCBzdWItcmVzdWx0czoKKyAgICAgICAgLSAxLjgyJSBiZXR0ZXIgb24gQWlyIChwPDAu
MDIpCisgICAgICAgIC0gMS4xOCUgYmV0dGVyIG9uIEJhc2ljIChwPDAuMDIpCisgICAgICAgIC0g
MS41OSUgYmV0dGVyIG9uIEJveDJEIChwPDAuMDIpCisgICAgICAgIC0gMC40MyUgYmV0dGVyIG9u
IEhhc2hTZXQtd2FzbSAocDwwLjA1KQorICAgICAgICAtIDAuNTIlIGJldHRlciBvbiBNTCAocDww
LjA1KQorICAgICAgICAtIDkuMzklIGJldHRlciBvbiBPZmZsaW5lQXNzZW1ibGVyIChwPDAuMDIp
CisgICAgICAgIC0gMi4xMyUgYmV0dGVyIG9uIGNyeXB0by1hZXMtU1AgKHA8MC4wMikKKyAgICAg
ICAgLSA1LjI5JSBiZXR0ZXIgb24gY3J5cHRvLW1kNS1TUCAocDwwLjAyKQorICAgICAgICAtIDEu
MDAlIGJldHRlciBvbiBjcnlwdG8tc2hhMS1TUCAocDwwLjA1KQorICAgICAgICAtIDAuOTclIGJl
dHRlciBvbiBkYXRlLWZvcm1hdC10b2Z0ZS1TUCAocDwwLjAyKQorICAgICAgICAtIDAuNzglIGJl
dHRlciBvbiBkYXRlLWZvcm1hdC14cGFyYi1TUCAocDwwLjAyKQorICAgICAgICAtIDEuNTUlIGJl
dHRlciBvbiBkZWx0YS1ibHVlIChwPDAuMDIpCisgICAgICAgIC0gMC4zNyUgYmV0dGVyIG9uIGdh
dXNzaWFuLWJsdXIgKHA8MC4wMikKKyAgICAgICAgLSA0LjExJSBiZXR0ZXIgb24gZ2NjLWxvb3Bz
LXdhc20gKHA8MC4wMikKKyAgICAgICAgLSA1LjE0JSBiZXR0ZXIgb24gcXVpY2tzb3J0LXdhc20g
KHA8MC4wMikKKyAgICAgICAgLSAyLjc0JSBiZXR0ZXIgb24gcmF5dHJhY2UgKHA8MC4wMikKKyAg
ICAgICAgLSA0LjUyJSBiZXR0ZXIgb24gcmVnZXhwIChwPDAuMDIpCisgICAgICAgIC0gMS4wMiUg
YmV0dGVyIG9uIGNyeXB0by1zdGFuZm9yZC1hZXMgKHA8MC4wMikKKyAgICAgICAgLSAxMC40MCUg
YmV0dGVyIG9uIHRzZi13YXNtIChwPDAuMDUpCisgICAgICAgIEFzIGV4cGVjdGVkLCB0aGVyZSBp
cyBubyBzdGF0aXN0aWNhbGx5IHNpZ25pZmljYW50IGVmZmVjdCBvbiB0aGUgbm9uLUpJVCBzZWN0
aW9ucyBvZiBSQU1pZmljYXRpb24uCisgICAgICAgIEFub3RoZXIgbG9naWNhbCBhbmQgZXhwZWN0
ZWQgcHJvcGVydHkgb2YgdGhlc2UgcmVzdWx0cyBpcyB0aGF0IHRoZSBsYXJnZXN0IHdpbnMgYXJl
IHRvIHBlYWsgbWVtb3J5IGFuZCBub3QgdG8gZW5kIG1lbW9yeSAoZS5nLiA4LjYzJSBmb3IgcGVh
ayByZWdleHAsIDUuNDglIGZvciBwZWFrIGdjYy1sb29wcy13YXNtLCAxMC43MCUgYmV0dGVyIGZv
ciBwZWFrIGNyeXB0by1tZDUtU1AsIDE3LjgzJSBiZXR0ZXIgZm9yIHBlYWsgT2ZmbGluZUFzc2Vt
YmxlciwgZXRjLi4pCisgICAgICAgIFRoZSByZXN1bHRzIG9uIGlQYWQgUHJvIDIgYXJlIHZlcnkg
c2ltaWxhcjogMS4yMCUgYmV0dGVyIChwPDAuMDIpIG9uIHRoZSBKSVQgdGVzdHMgb2YgUkFNaWZp
Y2F0aW9uLCB3aXRoIHRoZSBmb2xsb3dpbmcgc2lnbmlmaWNhbnQgc3ViLXJlc3VsdHM6CisgICAg
ICAgIC0gMS4yJSBiZXR0ZXIgb24gM2QtY3ViZS1TUCAocDwwLjA1KQorICAgICAgICAtIDAuNjcl
IGJldHRlciBvbiBiYXNpYyAocDwwLjAyKQorICAgICAgICAtIDEuNTclIGJldHRlciBvbiBCb3gy
RCAocDwwLjAyKQorICAgICAgICAtIDExLjMlIGJldHRlciBvbiBPZmZsaW5lQXNzZW1ibGVyIChw
PDAuMDIpLCAxOS4xMSUgYmV0dGVyIG9uIHBlYWsgbWVtb3J5CisgICAgICAgIC0gcmVncmVzc2lv
biBvZiAwLjQ0JSAocDwwLjA1KSBvbiBVbmlQb2tlcgorICAgICAgICAtIDEuNzQlIGJldHRlciBv
biBjcnlwdG8tYWVzLVNQIChwPDAuMDIpCisgICAgICAgIC0gNC43OSUgYmV0dGVyIG9uIGNyeXB0
by1tZDUtU1AgKHA8MC4wMiksIDEwLjM5JSBiZXR0ZXIgb24gcGVhayBtZW1vcnkKKyAgICAgICAg
LSAxLjYzJSBiZXR0ZXIgb24gY3J5cHRvLXNoYTEtU1AgKHA8MC4wMikKKyAgICAgICAgLSAwLjg1
JSBiZXR0ZXIgb24gZGF0YS1mb3JtYXQtdG9mdGUtU1AgKHA8MC4wMikKKyAgICAgICAgLSAyLjQ4
JSBiZXR0ZXIgb24gZGVsdGEtYmx1ZSAocDwwLjAyKQorICAgICAgICAtIDAuMzglIGJldHRlciBv
biBnYXVzc2lhbi1ibHVyIChwPDAuMDIpCisgICAgICAgIC0gMy42OCUgYmV0dGVyIG9uIGdjYy1s
b29wcy13YXNtIChwPDAuMDUpCisgICAgICAgIC0gMC42MiUgYmV0dGVyIG9uIG4tYm9keS1TUCAo
cDwwLjAyKQorICAgICAgICAtIDAuMTklIGJldHRlciBvbiBvY3RhbmUtY29kZS1sb2FkIChwPDAu
MDUpCisgICAgICAgIC0gMi45MyUgYmV0dGVyIG9uIHF1aWNrc29ydC13YXNtIChwPDAuMDIpCisg
ICAgICAgIC0gMy4xMiUgYmV0dGVyIG9uIHJheXRyYWNlIChwPDAuMDIpCisgICAgICAgIC0gMy44
MCUgYmV0dGVyIG9uIHJlZ2V4cCAocDwwLjAyKSwgNy40MCUgYmV0dGVyIG9uIHBlYWsgbWVtb3J5
CisgICAgICAgIC0gMC45MyUgYmV0dGVyIG9uIGNyeXB0by1zdGFuZm9yZC1hZXMgKHA8MC4wMikK
KyAgICAgICAgLSAyNi4wMiUgYmV0dGVyIG9uIHRzZi13YXNtIChwPDAuMDIpICEKKworICAgICAg
ICBNdWNoIG1vcmUgc3VycHJpc2luZ2x5IHRvIG1lLCB0aGUgaVBob25lIDcgYWxzbyBzaG93cyBh
IHNpZ25pZmljYW50IGltcHJvdmVtZW50IHRvIEpldFN0cmVhbSAyOiAxLjI3JSBiZXR0ZXIgKHA8
MC4wNSkuCisgICAgICAgIExvb2tpbmcgYXQgdGhlIHN1Yi10ZXN0cywgd2Ugc2VlIHRoZSBmb2xs
b3dpbmcgc2lnbmlmaWNhbnQgb25lczoKKyAgICAgICAgLSAxLjYzJSBiZXR0ZXIgb24gQm94MkQg
KHA8MC4wMikKKyAgICAgICAgLSAwLjc2JSBiZXR0ZXIgb24gV1NMIChwPDAuMDIpCisgICAgICAg
IC0gYSByZWdyZXNzaW9uIG9mIDIuNzElIG9uIGNyeXB0by1zaGExLVNQIChwPDAuMDUpCisgICAg
ICAgIC0gMi43OCUgYmV0dGVyIG9uIGdhdXNzaWFuLWJsdXIgKHA8MC4wMikKKyAgICAgICAgLSAz
LjUwJSBiZXR0ZXIgb24gZ2JlbXUgKHA8MC4wNSkKKyAgICAgICAgLSAxLjY0JSBiZXR0ZXIgb24g
anNoaW50LXd0YiAocDwwLjAyKQorICAgICAgICAtIDE5LjE5JSBiZXR0ZXIgb24gdGFnY2xvdWQt
U1AgKHA8MC4wMikKKyAgICAgICAgLSAxLjYxJSBiZXR0ZXIgb24gb2N0YW5lLXpsaWIgKHA8MC4w
NSkKKyAgICAgICAgVGhlIGlQYWQgUHJvIDIgc2hvd3Mgbm8gc2lnbmlmaWNhbnQgZWZmZWN0IG9u
IEpldFN0cmVhbSAyIGFzIGEgd2hvbGUsIGJ1dCBoYXMgc2lnbmlmaWNhbnQgZWZmZWN0cyBvbiB0
aGUgZm9sbG93aW5nIHN1Yi10ZXN0czoKKyAgICAgICAgLSAyLjIxJSBiZXR0ZXIgb24gQmFzaWMg
KHA8MC4wMikKKyAgICAgICAgLSAxLjA5JSBiZXR0ZXIgb24gTUwgKHA8MC4wNSkKKyAgICAgICAg
LSAwLjY1JSBiZXR0ZXIgb24gV1NMIChwPDAuMDIpCisgICAgICAgIC0gMS4xNCUgYmV0dGVyIG9u
IGRhdGEtZm9ybWF0LXRvZnRlLVNQIChwPDAuMDUpCisgICAgICAgIC0gMS4yMCUgYmV0dGVyIG9u
IGZpcnN0LWluc3BlY3Rvci1jb2RlLWxvYWQgKHA8MC4wMikKKyAgICAgICAgLSAxLjg5JSBiZXR0
ZXIgb24gZ2F1c3NpYW4tYmx1ciAocDwwLjAyKQorICAgICAgICAtIGEgcmVncmVzc2lvbiBvZiAy
LjAyJSBvbiByZWdleHAtZG5hLVNQIChwPDAuMDIpCisgICAgICAgIC0gNC45JSBiZXR0ZXIgb24g
dGFnY2xvdWQtU1AgKHA8MC4wMikKKyAgICAgICAgSSB0aGluayB0aGVyZSBpcyB0b28gbXVjaCBv
dmVybGFwIGluIHRoZXNlIHJlc3VsdHMgZm9yIHRoZW0gdG8gYmUgZHVlIHB1cmVseSB0byBjaGFu
Y2UsIGJ1dCB0aGVyZSBpcyBjbGVhcmx5IGEgbG90IG9mIG5vaXNlLCBhbmQgSSBleHBlY3QgdGhh
dCB0aGUgaVBob25lNyByZXN1bHRzIG1pZ2h0IGJlIGV4YWdlcmF0ZWQuCisgICAgICAgIE9uZSBt
b3JlIHJlYXNvbiBJIGJlbGlldmUgdGhlcmUgaXMgYSByZWFsIGVmZmVjdCBoZXJlIGFuZCBub3Qg
anVzdCBub2lzZSwgaXMgdGhhdCB0aGUgbGFyZ2VzdCB3aW5zIHdlcmUgdXN1YWxseSBvbiB0aGUg
YHdvcnN0IGl0ZXJhdGlvbmAgcGFydCBvZiB0aGUgc2NvcmVzLCBzbyBJIHN1c3BlY3QgdGhhdCB0
aGUgbWVtb3J5IHRyYWZmaWMgb2YgdGhlIHJlZ2lzdGVyIGFsbG9jYXRvciB3YXMgc29tZXRpbWVz
IHNsb3dpbmcgZG93biB0aGUgbWFpbiB0aHJlYWQsIHBvc3NpYmx5IHRocm91Z2ggY2FjaGUgZXZp
Y3Rpb25zLgorICAgICAgICBJIGNhbid0IGV4cGxhaW4gd2h5IHRhZ2Nsb3VkLVNQIHNob3dzIGxh
cmdlIHdpbnMgb24gSmV0U3RyZWFtMiBhbmQgbm8gd2luIGluIFJBTWlmaWNhdGlvbiB3aGVyZWFz
IHRzZi13YXNtIGlzIHRoZSBvcHBvc2l0ZS4KKworICAgICAgICAqIGIzL0IzUmVkdWNlTG9vcFN0
cmVuZ3RoLmNwcDoKKyAgICAgICAgKEpTQzo6QjM6OlJlZHVjZUxvb3BTdHJlbmd0aDo6cmVkdWNl
Qnl0ZUNvcHlMb29wc1RvTWVtY3B5KToKKyAgICAgICAgKiBiMy9haXIvQWlyQWxsb2NhdGVSZWdp
c3RlcnNCeUdyYXBoQ29sb3JpbmcuY3BwOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjphbGxvY2F0
ZVJlZ2lzdGVyc0J5R3JhcGhDb2xvcmluZyk6CisgICAgICAgICogYjMvYWlyL0FpckNvZGUuaDoK
KyAgICAgICAgKEpTQzo6QjM6OkFpcjo6Q29kZTo6Zm9yRWFjaEZhc3RUbXAgY29uc3QpOgorICAg
ICAgICAqIGIzL2Fpci9BaXJVc2VDb3VudHMuaDoKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6VXNl
Q291bnRzOjpVc2VDb3VudHMpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpVc2VDb3VudHM6Omlz
Q29uc3REZWYgY29uc3QpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpVc2VDb3VudHM6Om51bVdh
cm1Vc2VzQW5kRGVmcyBjb25zdCk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OlVzZUNvdW50czo6
ZHVtcCBjb25zdCk6CisgICAgICAgICogcGFyc2VyL05vZGVzLmg6CisKIDIwMjEtMDUtMTYgIE1h
cmsgTGFtICA8bWFyay5sYW1AYXBwbGUuY29tPgogCiAgICAgICAgIEltcGxlbWVudCBiYXNlbGlu
ZSBvcF9lbnRlciwgb3BfcmV0LCBvcF9jaGVja190cmFwcywgb3BfdGhyb3cgdXNpbmcgSklUIHRo
dW5rcy4KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1JlZHVjZUxvb3BT
dHJlbmd0aC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNSZWR1Y2VMb29wU3RyZW5n
dGguY3BwCmluZGV4IGM3OTdjZDZjMjZjOC4uNGE3NDhhNzY0MzU1IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYjMvQjNSZWR1Y2VMb29wU3RyZW5ndGguY3BwCisrKyBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1JlZHVjZUxvb3BTdHJlbmd0aC5jcHAKQEAgLTM2LDcgKzM2
LDcgQEAKICNpbmNsdWRlICJCM1BoYXNlU2NvcGUuaCIKICNpbmNsdWRlICJCM1Byb2NlZHVyZUlu
bGluZXMuaCIKICNpbmNsdWRlICJCM1ZhbHVlSW5saW5lcy5oIgotI2luY2x1ZGUgPHd0Zi9TbWFs
bFB0clNldC5oPgorI2luY2x1ZGUgPHd0Zi9TbWFsbFNldC5oPgogI2luY2x1ZGUgPHd0Zi9WZWN0
b3IuaD4KIAogbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CkBAIC0xNTksNyArMTU5LDcg
QEAgcHVibGljOgogICAgICAgICBCYXNpY0Jsb2NrKiBsb29wRm9vdCA9IG51bGxwdHI7CiAgICAg
ICAgIEJhc2ljQmxvY2sqIGxvb3BQcmVoZWFkZXIgPSBudWxscHRyOwogICAgICAgICBCYXNpY0Js
b2NrKiBsb29wUG9zdGZvb3RlciA9IG51bGxwdHI7Ci0gICAgICAgIFNtYWxsUHRyU2V0PEJhc2lj
QmxvY2sqPiBsb29wSW5uZXJCbG9ja3M7CisgICAgICAgIFNtYWxsU2V0PEJhc2ljQmxvY2sqPiBs
b29wSW5uZXJCbG9ja3M7CiAKICAgICAgICAgewogICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBp
ID0gMDsgaSA8IGxvb3AtPnNpemUoKTsgKytpKQpAQCAtMTcxLDggKzE3MSw4IEBAIHB1YmxpYzoK
ICAgICAgICAgICAgIGlmICghbG9vcElubmVyQmxvY2tzLmNvbnRhaW5zKHN0b3JlLT5vd25lcikp
CiAgICAgICAgICAgICAgICAgcmV0dXJuOwogCi0gICAgICAgICAgICBTbWFsbFB0clNldDxCYXNp
Y0Jsb2NrKj4gbG9vcEVudHJhbmNlczsKLSAgICAgICAgICAgIFNtYWxsUHRyU2V0PEJhc2ljQmxv
Y2sqPiBsb29wRXhpdHM7CisgICAgICAgICAgICBTbWFsbFNldDxCYXNpY0Jsb2NrKj4gbG9vcEVu
dHJhbmNlczsKKyAgICAgICAgICAgIFNtYWxsU2V0PEJhc2ljQmxvY2sqPiBsb29wRXhpdHM7CiAg
ICAgICAgICAgICBmb3IgKGF1dG8qIGJsb2NrIDogbG9vcElubmVyQmxvY2tzKSB7CiAgICAgICAg
ICAgICAgICAgZm9yIChhdXRvIHN1Y2Nlc3NvciA6IGJsb2NrLT5zdWNjZXNzb3JzKCkpIHsKICAg
ICAgICAgICAgICAgICAgICAgaWYgKCFsb29wSW5uZXJCbG9ja3MuY29udGFpbnMoc3VjY2Vzc29y
LmJsb2NrKCkpKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJB
bGxvY2F0ZVJlZ2lzdGVyc0J5R3JhcGhDb2xvcmluZy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvYjMvYWlyL0FpckFsbG9jYXRlUmVnaXN0ZXJzQnlHcmFwaENvbG9yaW5nLmNwcAppbmRleCBk
MDE2OWFlMDc0ZDcuLmFlNGM2NjdlOGE0OCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2IzL2Fpci9BaXJBbGxvY2F0ZVJlZ2lzdGVyc0J5R3JhcGhDb2xvcmluZy5jcHAKKysrIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJBbGxvY2F0ZVJlZ2lzdGVyc0J5R3JhcGhD
b2xvcmluZy5jcHAKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE1LTIw
MjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE1
LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAog
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCkBAIC0zNyw2ICszNyw5IEBACiAjaW5jbHVkZSAiQWlyUGhhc2VTY29wZS5o
IgogI2luY2x1ZGUgIkFpclRtcFdpZHRoSW5saW5lcy5oIgogI2luY2x1ZGUgIkFpclVzZUNvdW50
cy5oIgorI2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+CisjaW5jbHVkZSA8d3RmL1NtYWxsU2V0Lmg+
CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogCiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIz
IHsgbmFtZXNwYWNlIEFpciB7CiAKQEAgLTQ2LDEwNCArNDksMjA5IEBAIHN0YXRpYyBjb25zdGV4
cHIgYm9vbCBkZWJ1ZyA9IGZhbHNlOwogc3RhdGljIGNvbnN0ZXhwciBib29sIHRyYWNlRGVidWcg
PSBmYWxzZTsKIHN0YXRpYyBjb25zdGV4cHIgYm9vbCByZXBvcnRTdGF0cyA9IGZhbHNlOwogCi0v
LyBJbnRlcmZlcmVuY2UgZWRnZXMgYXJlIG5vdCBkaXJlY3RlZC4gQW4gZWRnZSBiZXR3ZWVuIGFu
eSB0d28gVG1wcyBpcyByZXByZXNlbnRlZAotLy8gYnkgdGhlIGNvbmNhdGVuYXRlZCB2YWx1ZXMg
b2YgdGhlIHNtYWxsZXN0IFRtcCBmb2xsb3dlZCBieSB0aGUgYmlnZ2VyIFRtcC4KLS8vIFdlIGhh
dmUgYSB0ZW1wbGF0ZWQgdmVyc2lvbiB0byBzdXBwb3J0IDE2IGJpdCBhbmQgYSAzMiBiaXQgaW1w
bGVtZW50YXRpb25zCi0vLyBzaW5jZSB0aGUgbnVtYmVyIG9mIGVudHJpZXMgaW4gYW4gaW50ZXJm
ZXJlbmNlIHRhYmxlIGlzIE8oTl4yKS4KLS8vIEluIG1vc3QgY2FzZXMsIHdlIHVzZSB0aGUgMTYg
Yml0IGZsYXZvciwgdGh1cyBzYXZpbmcgaGFsZiB0aGUgbWVtb3J5Ci0vLyB3aXRoIGEgc2luZ2xl
IGltcGxlbWVudGF0aW9uLgotdGVtcGxhdGUgPHR5cGVuYW1lIEluZGV4SW1wbFR5cGUsIHR5cGVu
YW1lIFBhaXJTdG9yYWdlVHlwZT4KLWNsYXNzIEludGVyZmVyZW5jZUVkZ2UgewotICAgIHN0YXRp
Y19hc3NlcnQoc2l6ZW9mKEluZGV4SW1wbFR5cGUpICogMiA9PSBzaXplb2YoUGFpclN0b3JhZ2VU
eXBlKSk7Ci0gICAgY29uc3QgdW5zaWduZWQgU2hpZnRBbW91bnQgPSBzaXplb2YoSW5kZXhJbXBs
VHlwZSkgKiA4OwotICAgIGNvbnN0IFBhaXJTdG9yYWdlVHlwZSBJbmRleE1hc2sgPSBzdGQ6Om51
bWVyaWNfbGltaXRzPEluZGV4SW1wbFR5cGU+OjptYXgoKTsKK3RlbXBsYXRlIDx0eXBlbmFtZSBJ
bmRleFR5cGU+CitjbGFzcyBJbnRlcmZlcmVuY2VIYXNoU2V0IHsKK3B1YmxpYzoKKyAgICBib29s
IGNvbnRhaW5zKEluZGV4VHlwZSB1LCBJbmRleFR5cGUgdikKKyAgICB7CisgICAgICAgIGlmICh2
IDwgdSkKKyAgICAgICAgICAgIHN0ZDo6c3dhcCh1LCB2KTsKKyAgICAgICAgcmV0dXJuIG1fc2V0
LmNvbnRhaW5zKHsgdSwgdiB9KTsKKyAgICB9CiAKLXByb3RlY3RlZDoKLSAgICB1c2luZyBJbmRl
eFR5cGUgPSB1bnNpZ25lZDsKKyAgICBib29sIGFkZEFuZFJldHVybklzTmV3RW50cnkoSW5kZXhU
eXBlIHUsIEluZGV4VHlwZSB2KQorICAgIHsKKyAgICAgICAgaWYgKHYgPCB1KQorICAgICAgICAg
ICAgc3RkOjpzd2FwKHUsIHYpOworICAgICAgICByZXR1cm4gbV9zZXQuYWRkKHsgdSwgdiB9KS5p
c05ld0VudHJ5OworICAgIH0KKworICAgIHZvaWQgY2xlYXIoKQorICAgIHsKKyAgICAgICAgbV9z
ZXQuY2xlYXIoKTsKKyAgICB9CiAKKyAgICB2b2lkIHNldE1heFRtcEluZGV4KHVuc2lnbmVkIG4p
CisgICAgeworICAgICAgICBBU1NFUlRfVU5VU0VEKG4sIG4gPCBzdGQ6Om51bWVyaWNfbGltaXRz
PEluZGV4VHlwZT46Om1heCgpKTsKKyAgICB9CisKKyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgRnVu
Y3Rvcj4KKyAgICB2b2lkIGZvckVhY2goY29uc3QgRnVuY3RvciYgZnVuY3RvcikKKyAgICB7Cisg
ICAgICAgIGZvciAoYXV0byBlZGdlIDogbV9zZXQpCisgICAgICAgICAgICBmdW5jdG9yKGVkZ2Up
OworICAgIH0KKworICAgIHVuc2lnbmVkIHNpemUoKSBjb25zdCB7IHJldHVybiBtX3NldC5zaXpl
KCk7IH0KKworcHJpdmF0ZToKKyAgICAvLyBJbnRlcmZlcmVuY2UgZWRnZXMgYXJlIG5vdCBkaXJl
Y3RlZC4gQW4gZWRnZSBiZXR3ZWVuIGFueSB0d28gVG1wcyBpcyByZXByZXNlbnRlZAorICAgIC8v
IGJ5IHRoZSBjb25jYXRlbmF0ZWQgdmFsdWVzICh0aHJvdWdoIFRtcE1hcHBlcikgb2YgdGhlIHNt
YWxsZXN0IFRtcCBmb2xsb3dlZCBieSB0aGUgYmlnZ2VyIFRtcC4KKyAgICBIYXNoU2V0PHN0ZDo6
cGFpcjxJbmRleFR5cGUsIEluZGV4VHlwZT4gPiBtX3NldDsKK307CisKK3RlbXBsYXRlIDx0eXBl
bmFtZSBULCB0eXBlbmFtZSBJbmRleFR5cGU+CitjbGFzcyBJbnRlcmZlcmVuY2VWZWN0b3Igewog
cHVibGljOgotICAgIHN0cnVjdCBJbnRlcmZlcmVuY2VFZGdlSGFzaCB7Ci0gICAgICAgIHN0YXRp
YyB1bnNpZ25lZCBoYXNoKGNvbnN0IEludGVyZmVyZW5jZUVkZ2U8SW5kZXhJbXBsVHlwZSwgUGFp
clN0b3JhZ2VUeXBlPiYga2V5KSB7IHJldHVybiBrZXkuaGFzaCgpOyB9Ci0gICAgICAgIHN0YXRp
YyBib29sIGVxdWFsKGNvbnN0IEludGVyZmVyZW5jZUVkZ2U8SW5kZXhJbXBsVHlwZSwgUGFpclN0
b3JhZ2VUeXBlPiYgYSwgY29uc3QgSW50ZXJmZXJlbmNlRWRnZTxJbmRleEltcGxUeXBlLCBQYWly
U3RvcmFnZVR5cGU+JiBiKSB7IHJldHVybiBhID09IGI7IH0KLSAgICAgICAgc3RhdGljIGNvbnN0
ZXhwciBib29sIHNhZmVUb0NvbXBhcmVUb0VtcHR5T3JEZWxldGVkID0gdHJ1ZTsKLSAgICB9Owot
ICAgIHR5cGVkZWYgU2ltcGxlQ2xhc3NIYXNoVHJhaXRzPEludGVyZmVyZW5jZUVkZ2U8SW5kZXhJ
bXBsVHlwZSwgUGFpclN0b3JhZ2VUeXBlPj4gSW50ZXJmZXJlbmNlRWRnZUhhc2hUcmFpdHM7Cisg
ICAgYm9vbCBjb250YWlucyhJbmRleFR5cGUgdSwgSW5kZXhUeXBlIHYpCisgICAgeworICAgICAg
ICBpZiAodiA8IHUpCisgICAgICAgICAgICBzdGQ6OnN3YXAodSwgdik7CisgICAgICAgIHJldHVy
biBtX3ZlY3Rvclt1XS5jb250YWlucyh2KTsKKyAgICB9CiAKLSAgICB0eXBlZGVmIEhhc2hTZXQ8
SW50ZXJmZXJlbmNlRWRnZTxJbmRleEltcGxUeXBlLCBQYWlyU3RvcmFnZVR5cGU+LCBJbnRlcmZl
cmVuY2VFZGdlSGFzaCwgSW50ZXJmZXJlbmNlRWRnZUhhc2hUcmFpdHM+IEludGVyZmVyZW5jZVNl
dDsKKyAgICBib29sIGFkZEFuZFJldHVybklzTmV3RW50cnkoSW5kZXhUeXBlIHUsIEluZGV4VHlw
ZSB2KQorICAgIHsKKyAgICAgICAgaWYgKHYgPCB1KQorICAgICAgICAgICAgc3RkOjpzd2FwKHUs
IHYpOworICAgICAgICBib29sIGlzTmV3RW50cnkgPSBtX3ZlY3Rvclt1XS5hZGQodikuaXNOZXdF
bnRyeTsKKyAgICAgICAgbV9zaXplICs9IGlzTmV3RW50cnk7CisgICAgICAgIHJldHVybiBpc05l
d0VudHJ5OworICAgIH0KIAotICAgIEludGVyZmVyZW5jZUVkZ2UoKQorICAgIHZvaWQgY2xlYXIo
KQogICAgIHsKKyAgICAgICAgbV92ZWN0b3IuY2xlYXIoKTsKKyAgICAgICAgbV9zaXplID0gMDsK
ICAgICB9CiAKLSAgICBJbnRlcmZlcmVuY2VFZGdlKEluZGV4VHlwZSBhLCBJbmRleFR5cGUgYikK
KyAgICB2b2lkIHNldE1heFRtcEluZGV4KHVuc2lnbmVkIG4pCiAgICAgewotICAgICAgICBBU1NF
UlQoYSk7Ci0gICAgICAgIEFTU0VSVChiKTsKLSAgICAgICAgQVNTRVJUKGEgPCBzdGQ6Om51bWVy
aWNfbGltaXRzPEluZGV4SW1wbFR5cGU+OjptYXgoKSk7Ci0gICAgICAgIEFTU0VSVChiIDwgc3Rk
OjpudW1lcmljX2xpbWl0czxJbmRleEltcGxUeXBlPjo6bWF4KCkpOwotICAgICAgICBBU1NFUlRf
V0lUSF9NRVNTQUdFKGEgIT0gYiwgIkEgVG1wIGNhbiBuZXZlciBpbnRlcmZlcmUgd2l0aCBpdHNl
bGYuIERvaW5nIHNvIHdvdWxkIGZvcmNlIGl0IHRvIGJlIHRoZSBzdXBlcnBvc2l0aW9uIG9mIHR3
byByZWdpc3RlcnMuIik7CisgICAgICAgIEFTU0VSVChuIDwgc3RkOjpudW1lcmljX2xpbWl0czxJ
bmRleFR5cGU+OjptYXgoKSk7CisgICAgICAgIG1fdmVjdG9yLnJlc2l6ZShuKTsKKyAgICB9CiAK
LSAgICAgICAgaWYgKGIgPCBhKQotICAgICAgICAgICAgc3RkOjpzd2FwKGEsIGIpOwotICAgICAg
ICBtX3ZhbHVlID0gc3RhdGljX2Nhc3Q8UGFpclN0b3JhZ2VUeXBlPihhKSA8PCBTaGlmdEFtb3Vu
dCB8IGI7CisgICAgdGVtcGxhdGUgPHR5cGVuYW1lIEZ1bmN0b3I+CisgICAgdm9pZCBmb3JFYWNo
KGNvbnN0IEZ1bmN0b3ImIGZ1bmN0b3IpCisgICAgeworICAgICAgICBmb3IgKHVuc2lnbmVkIGkg
PSAwOyBpIDwgbV92ZWN0b3Iuc2l6ZSgpIDsgKytpKSB7CisgICAgICAgICAgICBmb3IgKEluZGV4
VHlwZSBqIDogbV92ZWN0b3JbaV0pCisgICAgICAgICAgICAgICAgZnVuY3Rvcih7IGksIGogfSk7
CisgICAgICAgIH0KICAgICB9CiAKLSAgICBJbnRlcmZlcmVuY2VFZGdlKGNvbnN0IEludGVyZmVy
ZW5jZUVkZ2U8SW5kZXhJbXBsVHlwZSwgUGFpclN0b3JhZ2VUeXBlPiYgb3RoZXIpCi0gICAgICAg
IDogbV92YWx1ZShvdGhlci5tX3ZhbHVlKQorICAgIHVuc2lnbmVkIHNpemUoKSBjb25zdCB7IHJl
dHVybiBtX3NpemU7IH0KKworcHJpdmF0ZToKKyAgICBWZWN0b3I8VD4gbV92ZWN0b3I7CisgICAg
dW5zaWduZWQgbV9zaXplIHswfTsKK307CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBJbmRleFR5cGU+
CitjbGFzcyBJbnRlcmZlcmVuY2VCaXRWZWN0b3IgeworcHVibGljOgorICAgIGJvb2wgY29udGFp
bnMoSW5kZXhUeXBlIHUsIEluZGV4VHlwZSB2KQorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fYml0
VmVjdG9yLnF1aWNrR2V0KGluZGV4KHUsIHYpKTsKKyAgICB9CisKKyAgICBib29sIGFkZEFuZFJl
dHVybklzTmV3RW50cnkoSW5kZXhUeXBlIHUsIEluZGV4VHlwZSB2KQogICAgIHsKKyAgICAgICAg
Ly8gTm90ZTogd2UgY291bGQgZG8gb25seSBvbmUgcXVpY2tTZXQsIGF0IHRoZSBjb3N0IG9mIG9u
ZSBleHRyYSBicmFuY2ggaW4gZXZlcnkgY29udGFpbnMvYWRkQW5kUmV0dXJuSXNOZXdFbnRyeSAo
dG8gZW5mb3JjZSB1IDwgdikKKyAgICAgICAgYm9vbCBhbHJlYWR5SW4gPSBtX2JpdFZlY3Rvci5x
dWlja1NldChpbmRleCh1LCB2KSk7CisgICAgICAgIGJvb2wgYWxyZWFkeUluMiA9IG1fYml0VmVj
dG9yLnF1aWNrU2V0KGluZGV4KHYsIHUpKTsKKyAgICAgICAgQVNTRVJUX1VOVVNFRChhbHJlYWR5
SW4yLCBhbHJlYWR5SW4gPT0gYWxyZWFkeUluMik7CisgICAgICAgIG1fc2l6ZSArPSAhYWxyZWFk
eUluOworICAgICAgICByZXR1cm4gIWFscmVhZHlJbjsKICAgICB9CiAKKyAgICB2b2lkIGNsZWFy
KCkKKyAgICB7CisgICAgICAgIG1fYml0VmVjdG9yLmNsZWFyQWxsKCk7CisgICAgICAgIG1fc2l6
ZSA9IDA7CisgICAgfQogCi0gICAgSW50ZXJmZXJlbmNlRWRnZShXVEY6Okhhc2hUYWJsZURlbGV0
ZWRWYWx1ZVR5cGUpCi0gICAgICAgIDogbV92YWx1ZShzdGQ6Om51bWVyaWNfbGltaXRzPFBhaXJT
dG9yYWdlVHlwZT46Om1heCgpKQorICAgIHZvaWQgc2V0TWF4VG1wSW5kZXgodW5zaWduZWQgbikK
ICAgICB7CisgICAgICAgIEFTU0VSVChuIDwgc3RkOjpudW1lcmljX2xpbWl0czxJbmRleFR5cGU+
OjptYXgoKSk7CisgICAgICAgIG1fbnVtVG1wcyA9IG47CisgICAgICAgIG1fYml0VmVjdG9yLmVu
c3VyZVNpemUobipuKTsKKyAgICB9CisKKyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgRnVuY3Rvcj4K
KyAgICB2b2lkIGZvckVhY2goY29uc3QgRnVuY3RvciYgZnVuY3RvcikKKyAgICB7CisgICAgICAg
IGZvciAoSW5kZXhUeXBlIGkgPSAwOyBpIDwgbV9udW1UbXBzOyArK2kpIHsKKyAgICAgICAgICAg
IGZvciAoSW5kZXhUeXBlIGogPSBpICsgMTsgaiA8IG1fbnVtVG1wczsgKytqKSB7CisgICAgICAg
ICAgICAgICAgaWYgKG1fYml0VmVjdG9yLnF1aWNrR2V0KGluZGV4KGksIGopKSkKKyAgICAgICAg
ICAgICAgICAgICAgZnVuY3Rvcih7IGksIGogfSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0K
ICAgICB9CiAKLSAgICBJbmRleFR5cGUgZmlyc3QoKSBjb25zdAorICAgIHVuc2lnbmVkIHNpemUo
KSBjb25zdCB7IHJldHVybiBtX3NpemU7IH0KKworcHJpdmF0ZToKKyAgICB1bnNpZ25lZCBpbmRl
eChJbmRleFR5cGUgaSwgSW5kZXhUeXBlIGopCiAgICAgewotICAgICAgICByZXR1cm4gbV92YWx1
ZSA+PiBTaGlmdEFtb3VudCAmIEluZGV4TWFzazsKKyAgICAgICAgcmV0dXJuIGkgKiBtX251bVRt
cHMgKyBqOwogICAgIH0KIAotICAgIEluZGV4VHlwZSBzZWNvbmQoKSBjb25zdAorICAgIEJpdFZl
Y3RvciBtX2JpdFZlY3RvcjsKKyAgICB1bnNpZ25lZCBtX3NpemUgezB9OworICAgIEluZGV4VHlw
ZSBtX251bVRtcHM7Cit9OworCisjZGVmaW5lIFRFU1RfSU5URVJGRVJFTkNFX1NNQUxMX1NFVF9W
RUNUT1IgMAorI2lmIFRFU1RfSU5URVJGRVJFTkNFX1NNQUxMX1NFVF9WRUNUT1IKK3RlbXBsYXRl
IDx0eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBJbmRleFR5cGU+CitjbGFzcyBJbnN0
cnVtZW50ZWRJbnRlcmZlcmVuY2VHcmFwaCB7CitwdWJsaWM6CisgICAgYm9vbCBjb250YWlucyhJ
bmRleFR5cGUgdSwgSW5kZXhUeXBlIHYpCiAgICAgewotICAgICAgICByZXR1cm4gbV92YWx1ZSAm
IEluZGV4TWFzazsKKyAgICAgICAgYm9vbCBjb250YWluc0luQSA9IG1fc2V0QS5jb250YWlucyh1
LCB2KTsKKyAgICAgICAgYm9vbCBjb250YWluc0luQiA9IG1fc2V0Qi5jb250YWlucyh1LCB2KTsK
KyAgICAgICAgUkVMRUFTRV9BU1NFUlQoY29udGFpbnNJbkEgPT0gY29udGFpbnNJbkIpOworICAg
ICAgICByZXR1cm4gY29udGFpbnNJbkE7CiAgICAgfQogCi0gICAgYm9vbCBvcGVyYXRvcj09KGNv
bnN0IEludGVyZmVyZW5jZUVkZ2UmIG90aGVyKSBjb25zdAorICAgIGJvb2wgYWRkQW5kUmV0dXJu
SXNOZXdFbnRyeShJbmRleFR5cGUgdSwgSW5kZXhUeXBlIHYpCiAgICAgewotICAgICAgICByZXR1
cm4gbV92YWx1ZSA9PSBvdGhlci5tX3ZhbHVlOworICAgICAgICBib29sIGlzTmV3RW50cnlBID0g
bV9zZXRBLmFkZEFuZFJldHVybklzTmV3RW50cnkodSwgdik7CisgICAgICAgIGJvb2wgaXNOZXdF
bnRyeUIgPSBtX3NldEIuYWRkQW5kUmV0dXJuSXNOZXdFbnRyeSh1LCB2KTsKKyAgICAgICAgUkVM
RUFTRV9BU1NFUlQoaXNOZXdFbnRyeUEgPT0gaXNOZXdFbnRyeUIpOworICAgICAgICByZXR1cm4g
aXNOZXdFbnRyeUE7CiAgICAgfQogCi0gICAgSW50ZXJmZXJlbmNlRWRnZSYgb3BlcmF0b3I9KGNv
bnN0IEludGVyZmVyZW5jZUVkZ2UmIG90aGVyKQorICAgIHZvaWQgY2xlYXIoKQogICAgIHsKLSAg
ICAgICAgbV92YWx1ZSA9IG90aGVyLm1fdmFsdWU7Ci0gICAgICAgIHJldHVybiAqdGhpczsKKyAg
ICAgICAgbV9zZXRBLmNsZWFyKCk7CisgICAgICAgIG1fc2V0Qi5jbGVhcigpOwogICAgIH0KLSAg
ICBib29sIGlzSGFzaFRhYmxlRGVsZXRlZFZhbHVlKCkgY29uc3QKKworICAgIHZvaWQgc2V0TWF4
VG1wSW5kZXgodW5zaWduZWQgbikKICAgICB7Ci0gICAgICAgIHJldHVybiAqdGhpcyA9PSBJbnRl
cmZlcmVuY2VFZGdlKFdURjo6SGFzaFRhYmxlRGVsZXRlZFZhbHVlKTsKKyAgICAgICAgbV9zZXRB
LnNldE1heFRtcEluZGV4KG4pOworICAgICAgICBtX3NldEIuc2V0TWF4VG1wSW5kZXgobik7CiAg
ICAgfQogCi0gICAgdW5zaWduZWQgaGFzaCgpIGNvbnN0CisgICAgdGVtcGxhdGUgPHR5cGVuYW1l
IEZ1bmN0b3I+CisgICAgdm9pZCBmb3JFYWNoKGNvbnN0IEZ1bmN0b3ImIGZ1bmN0b3IpCiAgICAg
ewotICAgICAgICByZXR1cm4gV1RGOjpJbnRIYXNoPFBhaXJTdG9yYWdlVHlwZT46Omhhc2gobV92
YWx1ZSk7CisgICAgICAgIG1fc2V0QS5mb3JFYWNoKGZ1bmN0b3IpOwogICAgIH0KIAotICAgIHZv
aWQgZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAorICAgIHVuc2lnbmVkIHNpemUoKSBjb25z
dAogICAgIHsKLSAgICAgICAgb3V0LnByaW50KGZpcnN0KCksICI8PT4iLCBzZWNvbmQoKSk7Cisg
ICAgICAgIHVuc2lnbmVkIHNpemVBID0gbV9zZXRBLnNpemUoKTsKKyAgICAgICAgdW5zaWduZWQg
c2l6ZUIgPSBtX3NldEIuc2l6ZSgpOworICAgICAgICBSRUxFQVNFX0FTU0VSVChzaXplQSA9PSBz
aXplQik7CisgICAgICAgIHJldHVybiBzaXplQTsKICAgICB9CiAKIHByaXZhdGU6Ci0gICAgUGFp
clN0b3JhZ2VUeXBlIG1fdmFsdWUgeyAwIH07CisgICAgVCBtX3NldEE7CisgICAgVSBtX3NldEI7
CiB9OworI2VuZGlmCiAKIC8vIFRoZSBBYnN0cmFjdENvbG9yaW5nQWxsb2NhdG9yIGRlZmluZXMg
YWxsIHRoZSBjb2RlIHRoYXQgaXMgaW5kZXBlbmRhbnQKIC8vIGZyb20gdGhlIGJhbmsgb3IgcmVn
aXN0ZXIgYW5kIGNhbiBiZSBzaGFyZWQgd2hlbiBhbGxvY2F0aW5nIHJlZ2lzdGVycy4KLXRlbXBs
YXRlPHR5cGVuYW1lIEluZGV4VHlwZSwgdHlwZW5hbWUgVG1wTWFwcGVyLCB0eXBlbmFtZSBJbnRl
cmZlcmVuY2VFZGdlVHlwZT4KK3RlbXBsYXRlPHR5cGVuYW1lIEluZGV4VHlwZSwgdHlwZW5hbWUg
SW50ZXJmZXJlbmNlU2V0LCBCYW5rIGJhbms+CiBjbGFzcyBBYnN0cmFjdENvbG9yaW5nQWxsb2Nh
dG9yIHsKIHB1YmxpYzoKLSAgICBBYnN0cmFjdENvbG9yaW5nQWxsb2NhdG9yKENvZGUmIGNvZGUs
IGNvbnN0IFZlY3RvcjxSZWc+JiByZWdzSW5Qcmlvcml0eU9yZGVyLCBJbmRleFR5cGUgbGFzdFBy
ZWNvbG9yZWRSZWdpc3RlckluZGV4LCB1bnNpZ25lZCB0bXBBcnJheVNpemUsIGNvbnN0IEhhc2hT
ZXQ8dW5zaWduZWQ+JiB1bnNwaWxsYWJsZVRtcHMsIGNvbnN0IFVzZUNvdW50czxUbXA+JiB1c2VD
b3VudHMpCisgICAgQWJzdHJhY3RDb2xvcmluZ0FsbG9jYXRvcihDb2RlJiBjb2RlLCBjb25zdCBW
ZWN0b3I8UmVnPiYgcmVnc0luUHJpb3JpdHlPcmRlciwgSW5kZXhUeXBlIGxhc3RQcmVjb2xvcmVk
UmVnaXN0ZXJJbmRleCwgdW5zaWduZWQgdG1wQXJyYXlTaXplLCBjb25zdCBCaXRWZWN0b3ImIHVu
c3BpbGxhYmxlVG1wcywgY29uc3QgVXNlQ291bnRzJiB1c2VDb3VudHMpCiAgICAgICAgIDogbV9y
ZWdzSW5Qcmlvcml0eU9yZGVyKHJlZ3NJblByaW9yaXR5T3JkZXIpCiAgICAgICAgICwgbV9sYXN0
UHJlY29sb3JlZFJlZ2lzdGVySW5kZXgobGFzdFByZWNvbG9yZWRSZWdpc3RlckluZGV4KQogICAg
ICAgICAsIG1fdW5zcGlsbGFibGVUbXBzKHVuc3BpbGxhYmxlVG1wcykKQEAgLTE2MCw2ICsyNjgs
MTQgQEAgcHVibGljOgogICAgIH0KIAogcHJvdGVjdGVkOgorICAgIHVzaW5nIFRtcE1hcHBlciA9
IEFic29sdXRlVG1wTWFwcGVyPGJhbms+OworCisgICAgSW5kZXhUeXBlIHRtcFRvSW5kZXgoVG1w
IHRtcCkgY29uc3QKKyAgICB7CisgICAgICAgIHVuc2lnbmVkIGluZGV4ID0gVG1wTWFwcGVyOjph
YnNvbHV0ZUluZGV4KHRtcCk7CisgICAgICAgIEFTU0VSVChzdGQ6Om51bWVyaWNfbGltaXRzPElu
ZGV4VHlwZT46Om1heCgpID4gaW5kZXgpOworICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8SW5k
ZXhUeXBlPihpbmRleCk7CisgICAgfQogCiAgICAgdW5zaWduZWQgcmVnaXN0ZXJDb3VudCgpIGNv
bnN0IHsgcmV0dXJuIG1fcmVnc0luUHJpb3JpdHlPcmRlci5zaXplKCk7IH0KIApAQCAtMTgwLDcg
KzI5Niw3IEBAIHByb3RlY3RlZDoKIAogICAgIHZvaWQgYWRkVG9TcGlsbCh1bnNpZ25lZCB0b1Nw
aWxsKQogICAgIHsKLSAgICAgICAgaWYgKG1fdW5zcGlsbGFibGVUbXBzLmNvbnRhaW5zKHRvU3Bp
bGwpKQorICAgICAgICBpZiAobV91bnNwaWxsYWJsZVRtcHMucXVpY2tHZXQodG9TcGlsbCkpCiAg
ICAgICAgICAgICByZXR1cm47CiAKICAgICAgICAgbV9zcGlsbFdvcmtsaXN0LmFkZCh0b1NwaWxs
KTsKQEAgLTE5OCwxNSArMzE0LDE1IEBAIHByb3RlY3RlZDoKICAgICAgICAgLy8gQWxsIHByZWNv
bG9yZWQgcmVnaXN0ZXJzIGhhdmUgIGFuICJpbmZpbml0ZSIgZGVncmVlLgogICAgICAgICB1bnNp
Z25lZCBmaXJzdE5vblJlZ0luZGV4ID0gbV9sYXN0UHJlY29sb3JlZFJlZ2lzdGVySW5kZXggKyAx
OwogICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgZmlyc3ROb25SZWdJbmRleDsgKytp
KQotICAgICAgICAgICAgbV9kZWdyZWVzW2ldID0gc3RkOjpudW1lcmljX2xpbWl0czx1bnNpZ25l
ZD46Om1heCgpOworICAgICAgICAgICAgbV9kZWdyZWVzW2ldID0gc3RkOjpudW1lcmljX2xpbWl0
czxJbmRleFR5cGU+OjptYXgoKTsKIAotICAgICAgICBtZW1zZXQobV9kZWdyZWVzLmRhdGEoKSAr
IGZpcnN0Tm9uUmVnSW5kZXgsIDAsICh0bXBBcnJheVNpemUgLSBmaXJzdE5vblJlZ0luZGV4KSAq
IHNpemVvZih1bnNpZ25lZCkpOworICAgICAgICBtZW1zZXQobV9kZWdyZWVzLmRhdGEoKSArIGZp
cnN0Tm9uUmVnSW5kZXgsIDAsICh0bXBBcnJheVNpemUgLSBmaXJzdE5vblJlZ0luZGV4KSAqIHNp
emVvZihJbmRleFR5cGUpKTsKICAgICB9CiAKICAgICB2b2lkIGFkZEVkZ2VEaXN0aW5jdChJbmRl
eFR5cGUgYSwgSW5kZXhUeXBlIGIpCiAgICAgewogICAgICAgICBBU1NFUlQoYSAhPSBiKTsKLSAg
ICAgICAgYm9vbCBpc05ld0VkZ2UgPSBhZGRJbnRlcmZlcmVuY2VFZGdlKEludGVyZmVyZW5jZUVk
Z2VUeXBlKGEsIGIpKTsKKyAgICAgICAgYm9vbCBpc05ld0VkZ2UgPSBhZGRJbnRlcmZlcmVuY2VF
ZGdlKGEsIGIpOwogICAgICAgICBpZiAoaXNOZXdFZGdlKSB7CiAgICAgICAgICAgICBpZiAoIWlz
UHJlY29sb3JlZChhKSkgewogICAgICAgICAgICAgICAgIEFTU0VSVCghbV9hZGphY2VuY3lMaXN0
W2FdLmNvbnRhaW5zKGIpKTsKQEAgLTIyNSw3ICszNDEsNyBAQCBwcm90ZWN0ZWQ6CiAgICAgYm9v
bCBhZGRFZGdlRGlzdGluY3RXaXRob3V0RGVncmVlQ2hhbmdlKEluZGV4VHlwZSBhLCBJbmRleFR5
cGUgYikKICAgICB7CiAgICAgICAgIEFTU0VSVChhICE9IGIpOwotICAgICAgICBib29sIGlzTmV3
RWRnZSA9IGFkZEludGVyZmVyZW5jZUVkZ2UoSW50ZXJmZXJlbmNlRWRnZVR5cGUoYSwgYikpOwor
ICAgICAgICBib29sIGlzTmV3RWRnZSA9IGFkZEludGVyZmVyZW5jZUVkZ2UoYSwgYik7CiAgICAg
ICAgIGlmIChpc05ld0VkZ2UpIHsKICAgICAgICAgICAgIGlmICghaXNQcmVjb2xvcmVkKGEpKSB7
CiAgICAgICAgICAgICAgICAgQVNTRVJUKCFtX2FkamFjZW5jeUxpc3RbYV0uY29udGFpbnMoYikp
OwpAQCAtMzQwLDcgKzQ1Niw3IEBAIHByb3RlY3RlZDoKICAgICAgICAgICAgIGlmICghaXNQcmVj
b2xvcmVkKGFkamFjZW50VG1wSW5kZXgpCiAgICAgICAgICAgICAgICAgJiYgIWhhc0JlZW5TaW1w
bGlmaWVkKGFkamFjZW50VG1wSW5kZXgpCiAgICAgICAgICAgICAgICAgJiYgbV9kZWdyZWVzW2Fk
amFjZW50VG1wSW5kZXhdID49IHJlZ2lzdGVyQ291bnQoKQotICAgICAgICAgICAgICAgICYmICFo
YXNJbnRlcmZlcmVuY2VFZGdlKEludGVyZmVyZW5jZUVkZ2VUeXBlKHUsIGFkamFjZW50VG1wSW5k
ZXgpKSkKKyAgICAgICAgICAgICAgICAmJiAhaGFzSW50ZXJmZXJlbmNlRWRnZSh1LCBhZGphY2Vu
dFRtcEluZGV4KSkKICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIH0KICAg
ICAgICAgcmV0dXJuIHRydWU7CkBAIC0zNzUsNTIgKzQ5MSw0MCBAQCBwcm90ZWN0ZWQ6CiAgICAg
ICAgIGF1dG8gaXRlcmF0b3IgPSBtX3NwaWxsV29ya2xpc3QuYmVnaW4oKTsKIAogICAgICAgICBS
RUxFQVNFX0FTU0VSVF9XSVRIX01FU1NBR0UoaXRlcmF0b3IgIT0gbV9zcGlsbFdvcmtsaXN0LmVu
ZCgpLCAic2VsZWN0U3BpbGwoKSBjYWxsZWQgd2hlbiB0aGVyZSB3YXMgbm8gc3BpbGwuIik7Ci0g
ICAgICAgIFJFTEVBU0VfQVNTRVJUX1dJVEhfTUVTU0FHRSghbV91bnNwaWxsYWJsZVRtcHMuY29u
dGFpbnMoKml0ZXJhdG9yKSwgInRyeWluZyB0byBzcGlsbCB1bnNwaWxsYWJsZSB0bXAiKTsKLQot
ICAgICAgICAvLyBIaWdoZXIgc2NvcmUgbWVhbnMgbW9yZSBkZXNpcmFibGUgdG8gc3BpbGwuIExv
d2VyIHNjb3JlcyBtYXhpbWl6ZSB0aGUgbGlrZWxpaG9vZCB0aGF0IGEgdG1wCi0gICAgICAgIC8v
IGdldHMgYSByZWdpc3Rlci4KLSAgICAgICAgYXV0byBzY29yZSA9IFsmXSAoVG1wIHRtcCkgLT4g
ZG91YmxlIHsKLSAgICAgICAgICAgIC8vIEFpciBleHBvc2VzIHRoZSBjb25jZXB0IG9mICJmYXN0
IHRtcHMiLCBhbmQgd2UgaW50ZXJwcmV0IHRoYXQgdG8gbWVhbiB0aGF0IHRoZSB0bXAKLSAgICAg
ICAgICAgIC8vIHNob3VsZCBhbHdheXMgYmUgaW4gYSByZWdpc3Rlci4KLSAgICAgICAgICAgIGlm
IChtX2NvZGUuaXNGYXN0VG1wKHRtcCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAg
ICAgICAgICAKLSAgICAgICAgICAgIC8vIEFsbCBlbHNlIGJlaW5nIGVxdWFsLCB0aGUgc2NvcmUg
c2hvdWxkIGJlIGRpcmVjdGx5IHJlbGF0ZWQgdG8gdGhlIGRlZ3JlZS4KLSAgICAgICAgICAgIGRv
dWJsZSBkZWdyZWUgPSBzdGF0aWNfY2FzdDxkb3VibGU+KG1fZGVncmVlc1tUbXBNYXBwZXI6OmFi
c29sdXRlSW5kZXgodG1wKV0pOwotCi0gICAgICAgICAgICAvLyBBbGwgZWxzZSBiZWluZyBlcXVh
bCwgdGhlIHNjb3JlIHNob3VsZCBiZSBpbnZlcnNlbHkgcmVsYXRlZCB0byB0aGUgbnVtYmVyIG9m
IHdhcm0gdXNlcyBhbmQKLSAgICAgICAgICAgIC8vIGRlZnMuCi0gICAgICAgICAgICBjb25zdCBV
c2VDb3VudHM8VG1wPjo6Q291bnRzKiBjb3VudHMgPSBtX3VzZUNvdW50c1t0bXBdOwotICAgICAg
ICAgICAgaWYgKCFjb3VudHMpCi0gICAgICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bnVtZXJpY19s
aW1pdHM8ZG91YmxlPjo6aW5maW5pdHkoKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgZG91
YmxlIHVzZXMgPSBjb3VudHMtPm51bVdhcm1Vc2VzICsgY291bnRzLT5udW1EZWZzOworICAgICAg
ICBSRUxFQVNFX0FTU0VSVF9XSVRIX01FU1NBR0UoIW1fdW5zcGlsbGFibGVUbXBzLmdldCgqaXRl
cmF0b3IpLCAidHJ5aW5nIHRvIHNwaWxsIHVuc3BpbGxhYmxlIHRtcCIpOwogCi0gICAgICAgICAg
ICAvLyBJZiBpdCdzIGEgY29uc3RhbnQsIHRoZW4gaXQncyBub3QgYXMgYmFkIHRvIHNwaWxsLiBX
ZSBjYW4gcmVtYXRlcmlhbGl6ZSBpdCBpbiBtYW55Ci0gICAgICAgICAgICAvLyBjYXNlcy4KLSAg
ICAgICAgICAgIGlmIChjb3VudHMtPm51bUNvbnN0RGVmcyA9PSAxICYmIGNvdW50cy0+bnVtRGVm
cyA9PSAxKQotICAgICAgICAgICAgICAgIHVzZXMgLz0gMjsKKyAgICAgICAgSW5kZXhUeXBlIHZp
Y3RpbUluZGV4ID0gKml0ZXJhdG9yOworICAgICAgICBmbG9hdCBtYXhTY29yZSA9IDA7CiAKLSAg
ICAgICAgICAgIHJldHVybiBkZWdyZWUgLyB1c2VzOwotICAgICAgICB9OworICAgICAgICBmb3Ig
KDtpdGVyYXRvciAhPSBtX3NwaWxsV29ya2xpc3QuZW5kKCk7ICsraXRlcmF0b3IpIHsKKyAgICAg
ICAgICAgIEluZGV4VHlwZSBpbmRleCA9ICppdGVyYXRvcjsKKworICAgICAgICAgICAgZmxvYXQg
dXNlcyA9IG1fdXNlQ291bnRzLm51bVdhcm1Vc2VzQW5kRGVmczxiYW5rPihpbmRleCk7CisgICAg
ICAgICAgICBpZiAoIXVzZXMpIHsKKyAgICAgICAgICAgICAgICB2aWN0aW1JbmRleCA9IGluZGV4
OworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQogCi0gICAgICAgIGF1dG8g
dmljdGltSXRlcmF0b3IgPSBpdGVyYXRvcjsKLSAgICAgICAgZG91YmxlIG1heFNjb3JlID0gc2Nv
cmUoVG1wTWFwcGVyOjp0bXBGcm9tQWJzb2x1dGVJbmRleCgqaXRlcmF0b3IpKTsKKyAgICAgICAg
ICAgIC8vIEhpZ2hlciBzY29yZSBtZWFucyBtb3JlIGRlc2lyYWJsZSB0byBzcGlsbC4gTG93ZXIg
c2NvcmVzIG1heGltaXplIHRoZSBsaWtlbGlob29kIHRoYXQgYSB0bXAKKyAgICAgICAgICAgIC8v
IGdldHMgYSByZWdpc3Rlci4KKyAgICAgICAgICAgIGZsb2F0IGRlZ3JlZSA9IHN0YXRpY19jYXN0
PGZsb2F0PihtX2RlZ3JlZXNbaW5kZXhdKTsKKyAgICAgICAgICAgIGZsb2F0IHRtcFNjb3JlID0g
ZGVncmVlIC8gdXNlczsKKworICAgICAgICAgICAgLy8gSWYgaXQncyBhIGNvbnN0YW50LCB0aGVu
IGl0J3Mgbm90IGFzIGJhZCB0byBzcGlsbC4gV2UgY2FuIHJlbWF0ZXJpYWxpemUgaXQgaW4gbWFu
eQorICAgICAgICAgICAgLy8gY2FzZXMuCisgICAgICAgICAgICBpZiAobV91c2VDb3VudHMuaXND
b25zdERlZjxiYW5rPihpbmRleCkpCisgICAgICAgICAgICAgICAgdG1wU2NvcmUgKj0gMjsKIAot
ICAgICAgICArK2l0ZXJhdG9yOwotICAgICAgICBmb3IgKDtpdGVyYXRvciAhPSBtX3NwaWxsV29y
a2xpc3QuZW5kKCk7ICsraXRlcmF0b3IpIHsKLSAgICAgICAgICAgIGRvdWJsZSB0bXBTY29yZSA9
IHNjb3JlKFRtcE1hcHBlcjo6dG1wRnJvbUFic29sdXRlSW5kZXgoKml0ZXJhdG9yKSk7CiAgICAg
ICAgICAgICBpZiAodG1wU2NvcmUgPiBtYXhTY29yZSkgewotICAgICAgICAgICAgICAgIEFTU0VS
VCghbV91bnNwaWxsYWJsZVRtcHMuY29udGFpbnMoKml0ZXJhdG9yKSk7Ci0gICAgICAgICAgICAg
ICAgdmljdGltSXRlcmF0b3IgPSBpdGVyYXRvcjsKKyAgICAgICAgICAgICAgICB2aWN0aW1JbmRl
eCA9IGluZGV4OwogICAgICAgICAgICAgICAgIG1heFNjb3JlID0gdG1wU2NvcmU7CiAgICAgICAg
ICAgICB9CiAgICAgICAgIH0KIAotICAgICAgICBJbmRleFR5cGUgdmljdGltSW5kZXggPSAqdmlj
dGltSXRlcmF0b3I7CisgICAgICAgIEFTU0VSVCghbV91bnNwaWxsYWJsZVRtcHMuZ2V0KHZpY3Rp
bUluZGV4KSk7CisgICAgICAgIEFTU0VSVCghaXNQcmVjb2xvcmVkKHZpY3RpbUluZGV4KSk7CiAg
ICAgICAgIGlmICh0cmFjZURlYnVnKQogICAgICAgICAgICAgZGF0YUxvZ0xuKCJTZWxlY3Rpbmcg
c3BpbGwgIiwgdmljdGltSW5kZXgpOwotICAgICAgICBBU1NFUlQoIWlzUHJlY29sb3JlZCh2aWN0
aW1JbmRleCkpOwogICAgICAgICByZXR1cm4gdmljdGltSW5kZXg7CiAgICAgfQogCkBAIC01MTIs
MTQgKzYxNiwxNCBAQCBwcm90ZWN0ZWQ6CiAgICAgICAgICAgICBtX2NvbG9yZWRUbXAuY2xlYXIo
KTsKICAgICB9CiAKLSAgICBib29sIGFkZEludGVyZmVyZW5jZUVkZ2UoSW50ZXJmZXJlbmNlRWRn
ZVR5cGUgZWRnZSkKKyAgICBib29sIGFkZEludGVyZmVyZW5jZUVkZ2UoSW5kZXhUeXBlIHUsIElu
ZGV4VHlwZSB2KQogICAgIHsKLSAgICAgICAgcmV0dXJuIG1faW50ZXJmZXJlbmNlRWRnZXMuYWRk
KGVkZ2UpLmlzTmV3RW50cnk7CisgICAgICAgIHJldHVybiBtX2ludGVyZmVyZW5jZUVkZ2VzLmFk
ZEFuZFJldHVybklzTmV3RW50cnkodSwgdik7CiAgICAgfQogCi0gICAgYm9vbCBoYXNJbnRlcmZl
cmVuY2VFZGdlKEludGVyZmVyZW5jZUVkZ2VUeXBlIGVkZ2UpCisgICAgYm9vbCBoYXNJbnRlcmZl
cmVuY2VFZGdlKEluZGV4VHlwZSB1LCBJbmRleFR5cGUgdikKICAgICB7Ci0gICAgICAgIHJldHVy
biBtX2ludGVyZmVyZW5jZUVkZ2VzLmNvbnRhaW5zKGVkZ2UpOworICAgICAgICByZXR1cm4gbV9p
bnRlcmZlcmVuY2VFZGdlcy5jb250YWlucyh1LCB2KTsKICAgICB9CiAKICAgICB2b2lkIGNsZWFy
SW50ZXJmZXJlbmNlRWRnZXMoKQpAQCAtNTMyLDEwICs2MzYsMTEgQEAgcHJvdGVjdGVkOgogICAg
ICAgICBvdXQucHJpbnQoImdyYXBoIEludGVyZmVyZW5jZUdyYXBoIHsgXG4iKTsKIAogICAgICAg
ICBIYXNoU2V0PFRtcD4gdG1wc1dpdGhJbnRlcmZlcmVuY2VzOwotICAgICAgICBmb3IgKGNvbnN0
IGF1dG8mIGVkZ2UgOiBtX2ludGVyZmVyZW5jZUVkZ2VzKSB7Ci0gICAgICAgICAgICB0bXBzV2l0
aEludGVyZmVyZW5jZXMuYWRkKFRtcE1hcHBlcjo6dG1wRnJvbUFic29sdXRlSW5kZXgoZWRnZS5m
aXJzdCgpKSk7Ci0gICAgICAgICAgICB0bXBzV2l0aEludGVyZmVyZW5jZXMuYWRkKFRtcE1hcHBl
cjo6dG1wRnJvbUFic29sdXRlSW5kZXgoZWRnZS5zZWNvbmQoKSkpOwotICAgICAgICB9CisKKyAg
ICAgICAgbV9pbnRlcmZlcmVuY2VFZGdlcy5mb3JFYWNoKFsmdG1wc1dpdGhJbnRlcmZlcmVuY2Vz
XSAoc3RkOjpwYWlyPEluZGV4VHlwZSwgSW5kZXhUeXBlPiBlZGdlKSB7CisgICAgICAgICAgICB0
bXBzV2l0aEludGVyZmVyZW5jZXMuYWRkKFRtcE1hcHBlcjo6dG1wRnJvbUFic29sdXRlSW5kZXgo
ZWRnZS5maXJzdCkpOworICAgICAgICAgICAgdG1wc1dpdGhJbnRlcmZlcmVuY2VzLmFkZChUbXBN
YXBwZXI6OnRtcEZyb21BYnNvbHV0ZUluZGV4KGVkZ2Uuc2Vjb25kKSk7CisgICAgICAgIH0pOwog
CiAgICAgICAgIGZvciAoY29uc3QgYXV0byYgdG1wIDogdG1wc1dpdGhJbnRlcmZlcmVuY2VzKSB7
CiAgICAgICAgICAgICB1bnNpZ25lZCB0bXBJbmRleCA9IFRtcE1hcHBlcjo6YWJzb2x1dGVJbmRl
eCh0bXApOwpAQCAtNTQ1LDIwICs2NTAsMjEgQEAgcHJvdGVjdGVkOgogICAgICAgICAgICAgICAg
IG91dC5wcmludCgiICAgICIsIHRtcC5pbnRlcm5hbFZhbHVlKCksICIgW2xhYmVsPVwiIiwgdG1w
LCAiXCJdO1xuIik7CiAgICAgICAgIH0KIAotICAgICAgICBmb3IgKGNvbnN0IGF1dG8mIGVkZ2Ug
OiBtX2ludGVyZmVyZW5jZUVkZ2VzKQotICAgICAgICAgICAgb3V0LnByaW50KCIgICAgIiwgZWRn
ZS5maXJzdCgpLCAiIC0tICIsIGVkZ2Uuc2Vjb25kKCksICI7XG4iKTsKKyAgICAgICAgbV9pbnRl
cmZlcmVuY2VFZGdlcy5mb3JFYWNoKFsmb3V0XSAoc3RkOjpwYWlyPEluZGV4VHlwZSwgSW5kZXhU
eXBlPiBlZGdlKSB7CisgICAgICAgICAgICBvdXQucHJpbnQoIiAgICAiLCBlZGdlLmZpcnN0LCAi
IC0tICIsIGVkZ2Uuc2Vjb25kLCAiO1xuIik7CisgICAgICAgIH0pOwogICAgICAgICBvdXQucHJp
bnQoIn1cbiIpOwogICAgIH0KIAogICAgIFZlY3RvcjxSZWc+IG1fcmVnc0luUHJpb3JpdHlPcmRl
cjsKICAgICBJbmRleFR5cGUgbV9sYXN0UHJlY29sb3JlZFJlZ2lzdGVySW5kZXggeyAwIH07CiAK
LSAgICB0eXBlbmFtZSBJbnRlcmZlcmVuY2VFZGdlVHlwZTo6SW50ZXJmZXJlbmNlU2V0IG1faW50
ZXJmZXJlbmNlRWRnZXM7CisgICAgSW50ZXJmZXJlbmNlU2V0IG1faW50ZXJmZXJlbmNlRWRnZXM7
CiAKICAgICBWZWN0b3I8VmVjdG9yPEluZGV4VHlwZSwgMCwgVW5zYWZlVmVjdG9yT3ZlcmZsb3cs
IDQ+LCAwLCBVbnNhZmVWZWN0b3JPdmVyZmxvdz4gbV9hZGphY2VuY3lMaXN0OwogICAgIFZlY3Rv
cjxJbmRleFR5cGUsIDAsIFVuc2FmZVZlY3Rvck92ZXJmbG93PiBtX2RlZ3JlZXM7CiAKLSAgICB1
c2luZyBJbmRleFR5cGVTZXQgPSBIYXNoU2V0PEluZGV4VHlwZSwgRGVmYXVsdEhhc2g8SW5kZXhU
eXBlPiwgV1RGOjpVbnNpZ25lZFdpdGhaZXJvS2V5SGFzaFRyYWl0czxJbmRleFR5cGU+PjsKKyAg
ICB1c2luZyBJbmRleFR5cGVTZXQgPSBTbWFsbFNldDxJbmRleFR5cGUsIEludEhhc2g8SW5kZXhU
eXBlPj47CiAKICAgICBIYXNoTWFwPEluZGV4VHlwZSwgSW5kZXhUeXBlU2V0LCBEZWZhdWx0SGFz
aDxJbmRleFR5cGU+LCBXVEY6OlVuc2lnbmVkV2l0aFplcm9LZXlIYXNoVHJhaXRzPEluZGV4VHlw
ZT4+IG1fYmlhc2VzOwogCkBAIC01NzEsNyArNjc3LDcgQEAgcHJvdGVjdGVkOgogICAgIFZlY3Rv
cjxNb3ZlT3BlcmFuZHMsIDAsIFVuc2FmZVZlY3Rvck92ZXJmbG93PiBtX2NvYWxlc2NpbmdDYW5k
aWRhdGVzOwogCiAgICAgLy8gTGlzdCBvZiBldmVyeSBtb3ZlIGluc3RydWN0aW9uIGFzc29jaWF0
ZWQgd2l0aCBhIFRtcC4KLSAgICBWZWN0b3I8SW5kZXhUeXBlU2V0PiBtX21vdmVMaXN0OworICAg
IFZlY3RvcjxTbWFsbFNldDx1bnNpZ25lZCwgSW50SGFzaDxJbmRleFR5cGU+Pj4gbV9tb3ZlTGlz
dDsKIAogICAgIC8vIENvbG9ycy4KICAgICBWZWN0b3I8UmVnLCAwLCBVbnNhZmVWZWN0b3JPdmVy
Zmxvdz4gbV9jb2xvcmVkVG1wOwpAQCAtNTk1LDE3ICs3MDEsMTggQEAgcHJvdGVjdGVkOgogICAg
IC8vIFRoZSBtYXBwaW5nIG9mIFRtcCB0byB0aGVpciBhbGlhcyBmb3IgTW92ZXMgdGhhdCBhcmUg
YWx3YXlzIGNvYWxlc2NpbmcgcmVnYXJkbGVzcyBvZiBzcGlsbGluZy4KICAgICBWZWN0b3I8SW5k
ZXhUeXBlLCAwLCBVbnNhZmVWZWN0b3JPdmVyZmxvdz4gbV9jb2FsZXNjZWRUbXBzQXRTcGlsbDsK
IAotICAgIGNvbnN0IEhhc2hTZXQ8dW5zaWduZWQ+JiBtX3Vuc3BpbGxhYmxlVG1wczsKLSAgICBj
b25zdCBVc2VDb3VudHM8VG1wPiYgbV91c2VDb3VudHM7CisgICAgY29uc3QgQml0VmVjdG9yJiBt
X3Vuc3BpbGxhYmxlVG1wczsKKyAgICBjb25zdCBVc2VDb3VudHMmIG1fdXNlQ291bnRzOwogICAg
IENvZGUmIG1fY29kZTsKIAogICAgIFZlY3RvcjxUbXAsIDQ+IG1fcGlubmVkUmVnczsKIH07CiAK
LXRlbXBsYXRlIDx0eXBlbmFtZSBJbmRleFR5cGUsIHR5cGVuYW1lIFRtcE1hcHBlciwgdHlwZW5h
bWUgSW50ZXJmZXJlbmNlRWRnZT4KLWNsYXNzIEJyaWdncyA6IHB1YmxpYyBBYnN0cmFjdENvbG9y
aW5nQWxsb2NhdG9yPEluZGV4VHlwZSwgVG1wTWFwcGVyLCBJbnRlcmZlcmVuY2VFZGdlPiB7Ci0g
ICAgdXNpbmcgQmFzZSA9IEFic3RyYWN0Q29sb3JpbmdBbGxvY2F0b3I8SW5kZXhUeXBlLCBUbXBN
YXBwZXIsIEludGVyZmVyZW5jZUVkZ2U+OwordGVtcGxhdGUgPHR5cGVuYW1lIEluZGV4VHlwZSwg
dHlwZW5hbWUgSW50ZXJmZXJlbmNlU2V0LCBCYW5rIGJhbms+CitjbGFzcyBCcmlnZ3MgOiBwdWJs
aWMgQWJzdHJhY3RDb2xvcmluZ0FsbG9jYXRvcjxJbmRleFR5cGUsIEludGVyZmVyZW5jZVNldCwg
YmFuaz4geworICAgIHVzaW5nIEJhc2UgPSBBYnN0cmFjdENvbG9yaW5nQWxsb2NhdG9yPEluZGV4
VHlwZSwgSW50ZXJmZXJlbmNlU2V0LCBiYW5rPjsKIHByb3RlY3RlZDoKKyAgICB1c2luZyBUbXBN
YXBwZXIgPSB0eXBlbmFtZSBCYXNlOjpUbXBNYXBwZXI7CiAgICAgdXNpbmcgQmFzZTo6bV9pc09u
U2VsZWN0U3RhY2s7CiAgICAgdXNpbmcgQmFzZTo6bV9zZWxlY3RTdGFjazsKICAgICB1c2luZyBC
YXNlOjptX3NpbXBsaWZ5V29ya2xpc3Q7CkBAIC02MzUsMTEgKzc0MiwxMiBAQCBwcm90ZWN0ZWQ6
CiAgICAgdXNpbmcgQmFzZTo6aGFzQmVlblNpbXBsaWZpZWQ7CiAgICAgdXNpbmcgQmFzZTo6YWRk
VG9TcGlsbDsKICAgICB1c2luZyBCYXNlOjphZGRCaWFzOworICAgIHVzaW5nIEJhc2U6Om1faW50
ZXJmZXJlbmNlRWRnZXM7CiAgICAgdXNpbmcgQmFzZTo6bV9waW5uZWRSZWdzOwogICAgIHVzaW5n
IEJhc2U6Om1fcmVnc0luUHJpb3JpdHlPcmRlcjsKIAogcHVibGljOgotICAgIEJyaWdncyhDb2Rl
JiBjb2RlLCBjb25zdCBWZWN0b3I8UmVnPiYgcmVnc0luUHJpb3JpdHlPcmRlciwgSW5kZXhUeXBl
IGxhc3RQcmVjb2xvcmVkUmVnaXN0ZXJJbmRleCwgdW5zaWduZWQgdG1wQXJyYXlTaXplLCBjb25z
dCBIYXNoU2V0PHVuc2lnbmVkPiYgdW5zcGlsbGFibGVUbXBzLCBjb25zdCBVc2VDb3VudHM8VG1w
PiYgdXNlQ291bnRzKQorICAgIEJyaWdncyhDb2RlJiBjb2RlLCBjb25zdCBWZWN0b3I8UmVnPiYg
cmVnc0luUHJpb3JpdHlPcmRlciwgSW5kZXhUeXBlIGxhc3RQcmVjb2xvcmVkUmVnaXN0ZXJJbmRl
eCwgdW5zaWduZWQgdG1wQXJyYXlTaXplLCBjb25zdCBCaXRWZWN0b3ImIHVuc3BpbGxhYmxlVG1w
cywgY29uc3QgVXNlQ291bnRzJiB1c2VDb3VudHMpCiAgICAgICAgIDogQmFzZShjb2RlLCByZWdz
SW5Qcmlvcml0eU9yZGVyLCBsYXN0UHJlY29sb3JlZFJlZ2lzdGVySW5kZXgsIHRtcEFycmF5U2l6
ZSwgdW5zcGlsbGFibGVUbXBzLCB1c2VDb3VudHMpCiAgICAgewogICAgIH0KQEAgLTY5MSw3ICs3
OTksNyBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIHVuc2ln
bmVkIGRlZ3JlZSA9IG1fZGVncmVlc1tpXTsKICAgICAgICAgICAgICAgICBpZiAoZGVncmVlID49
IHJlZ2lzdGVyQ291bnQpIHsKLSAgICAgICAgICAgICAgICAgICAgQVNTRVJUKG1fdW5zcGlsbGFi
bGVUbXBzLmNvbnRhaW5zKGkpIHx8IG1fc3BpbGxXb3JrbGlzdC5jb250YWlucyhpKSk7CisgICAg
ICAgICAgICAgICAgICAgIEFTU0VSVChtX3Vuc3BpbGxhYmxlVG1wcy5nZXQoaSkgfHwgbV9zcGls
bFdvcmtsaXN0LmNvbnRhaW5zKGkpKTsKICAgICAgICAgICAgICAgICAgICAgQVNTRVJUKCFtX3Np
bXBsaWZ5V29ya2xpc3QuY29udGFpbnMoaSkpOwogICAgICAgICAgICAgICAgICAgICBjb250aW51
ZTsKICAgICAgICAgICAgICAgICB9CkBAIC03NDcsOSArODU1LDcgQEAgcHJvdGVjdGVkOgogICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9CiAKLSAgICAgICAgaWYgKGlzUHJlY29s
b3JlZCh2KQotICAgICAgICAgICAgfHwgaGFzSW50ZXJmZXJlbmNlRWRnZShJbnRlcmZlcmVuY2VF
ZGdlKHUsIHYpKSkgewotCisgICAgICAgIGlmIChpc1ByZWNvbG9yZWQodikgfHwgaGFzSW50ZXJm
ZXJlbmNlRWRnZSh1LCB2KSkgewogICAgICAgICAgICAgLy8gTm8gbmVlZCB0byBldmVyIGNvbnNp
ZGVyIHRoaXMgbW92ZSBhZ2FpbiBpZiBpdCBpbnRlcmZlcmVzLgogICAgICAgICAgICAgLy8gTm8g
Y29hbGVzY2luZyB3aWxsIHJlbW92ZSB0aGUgaW50ZXJmZXJlbmNlLgogICAgICAgICAgICAgbW92
ZUluZGV4ID0gVUlOVF9NQVg7CkBAIC03ODgsNyArODk0LDggQEAgcHJvdGVjdGVkOgogICAgICAg
ICBtX2NvYWxlc2NlZFRtcHNbdl0gPSB1OwogCiAgICAgICAgIGF1dG8mIHZNb3ZlcyA9IG1fbW92
ZUxpc3Rbdl07Ci0gICAgICAgIG1fbW92ZUxpc3RbdV0uYWRkKHZNb3Zlcy5iZWdpbigpLCB2TW92
ZXMuZW5kKCkpOworICAgICAgICBmb3IgKHVuc2lnbmVkIG1vdmUgOiB2TW92ZXMpCisgICAgICAg
ICAgICBtX21vdmVMaXN0W3VdLmFkZChtb3ZlKTsKIAogICAgICAgICBmb3JFYWNoQWRqYWNlbnQo
diwgW3RoaXMsIHVdIChJbmRleFR5cGUgYWRqYWNlbnRUbXBJbmRleCkgewogICAgICAgICAgICAg
aWYgKGFkZEVkZ2VEaXN0aW5jdFdpdGhvdXREZWdyZWVDaGFuZ2UoYWRqYWNlbnRUbXBJbmRleCwg
dSkpIHsKQEAgLTkzOCw3ICsxMDQ1LDcgQEAgcHJvdGVjdGVkOgogICAgICAgICAgICAgICAgIGRh
dGFMb2dMbigiTW92aW5nIHRtcCAiLCB0bXBJbmRleCwgIiBmcm9tIHNwaWxsIGxpc3QgdG8gc2lt
cGxpZnkgbGlzdCBiZWNhdXNlIGl0J3MgZGVncmVlIGlzIG5vdyBsZXNzIHRoYW4gayIpOwogCiAg
ICAgICAgICAgICBpZiAoQVNTRVJUX0VOQUJMRUQpCi0gICAgICAgICAgICAgICAgQVNTRVJUKG1f
dW5zcGlsbGFibGVUbXBzLmNvbnRhaW5zKHRtcEluZGV4KSB8fCBtX3NwaWxsV29ya2xpc3QuY29u
dGFpbnModG1wSW5kZXgpKTsKKyAgICAgICAgICAgICAgICBBU1NFUlQobV91bnNwaWxsYWJsZVRt
cHMuZ2V0KHRtcEluZGV4KSB8fCBtX3NwaWxsV29ya2xpc3QuY29udGFpbnModG1wSW5kZXgpKTsK
ICAgICAgICAgICAgIG1fc3BpbGxXb3JrbGlzdC5xdWlja0NsZWFyKHRtcEluZGV4KTsKIAogICAg
ICAgICAgICAgQVNTRVJUKCFtX3NpbXBsaWZ5V29ya2xpc3QuY29udGFpbnModG1wSW5kZXgpKTsK
QEAgLTk1NiwxMCArMTA2MywxMSBAQCBwcm90ZWN0ZWQ6CiAgICAgTW92ZVNldCBtX3dvcmtsaXN0
TW92ZXM7CiB9OwogCi10ZW1wbGF0ZSA8dHlwZW5hbWUgSW5kZXhUeXBlLCB0eXBlbmFtZSBUbXBN
YXBwZXIsIHR5cGVuYW1lIEludGVyZmVyZW5jZUVkZ2U+Ci1jbGFzcyBJUkMgOiBwdWJsaWMgQWJz
dHJhY3RDb2xvcmluZ0FsbG9jYXRvcjxJbmRleFR5cGUsIFRtcE1hcHBlciwgSW50ZXJmZXJlbmNl
RWRnZT4gewotICAgIHVzaW5nIEJhc2UgPSBBYnN0cmFjdENvbG9yaW5nQWxsb2NhdG9yPEluZGV4
VHlwZSwgVG1wTWFwcGVyLCBJbnRlcmZlcmVuY2VFZGdlPjsKK3RlbXBsYXRlIDx0eXBlbmFtZSBJ
bmRleFR5cGUsIHR5cGVuYW1lIEludGVyZmVyZW5jZVNldCwgQmFuayBiYW5rPgorY2xhc3MgSVJD
IDogcHVibGljIEFic3RyYWN0Q29sb3JpbmdBbGxvY2F0b3I8SW5kZXhUeXBlLCBJbnRlcmZlcmVu
Y2VTZXQsIGJhbms+IHsKKyAgICB1c2luZyBCYXNlID0gQWJzdHJhY3RDb2xvcmluZ0FsbG9jYXRv
cjxJbmRleFR5cGUsIEludGVyZmVyZW5jZVNldCwgYmFuaz47CiBwcm90ZWN0ZWQ6CisgICAgdXNp
bmcgVG1wTWFwcGVyID0gdHlwZW5hbWUgQmFzZTo6VG1wTWFwcGVyOwogICAgIHVzaW5nIEJhc2U6
Om1faXNPblNlbGVjdFN0YWNrOwogICAgIHVzaW5nIEJhc2U6Om1fc2VsZWN0U3RhY2s7CiAgICAg
dXNpbmcgQmFzZTo6bV9zaW1wbGlmeVdvcmtsaXN0OwpAQCAtOTkxLDExICsxMDk5LDEyIEBAIHBy
b3RlY3RlZDoKICAgICB1c2luZyBCYXNlOjptX2FkamFjZW5jeUxpc3Q7CiAgICAgdXNpbmcgQmFz
ZTo6ZHVtcEludGVyZmVyZW5jZUdyYXBoSW5Eb3Q7CiAgICAgdXNpbmcgQmFzZTo6YWRkQmlhczsK
KyAgICB1c2luZyBCYXNlOjptX2ludGVyZmVyZW5jZUVkZ2VzOwogICAgIHVzaW5nIEJhc2U6Om1f
cGlubmVkUmVnczsKICAgICB1c2luZyBCYXNlOjptX3JlZ3NJblByaW9yaXR5T3JkZXI7CiAKIHB1
YmxpYzoKLSAgICBJUkMoQ29kZSYgY29kZSwgY29uc3QgVmVjdG9yPFJlZz4mIHJlZ3NJblByaW9y
aXR5T3JkZXIsIEluZGV4VHlwZSBsYXN0UHJlY29sb3JlZFJlZ2lzdGVySW5kZXgsIHVuc2lnbmVk
IHRtcEFycmF5U2l6ZSwgY29uc3QgSGFzaFNldDx1bnNpZ25lZD4mIHVuc3BpbGxhYmxlVG1wcywg
Y29uc3QgVXNlQ291bnRzPFRtcD4mIHVzZUNvdW50cykKKyAgICBJUkMoQ29kZSYgY29kZSwgY29u
c3QgVmVjdG9yPFJlZz4mIHJlZ3NJblByaW9yaXR5T3JkZXIsIEluZGV4VHlwZSBsYXN0UHJlY29s
b3JlZFJlZ2lzdGVySW5kZXgsIHVuc2lnbmVkIHRtcEFycmF5U2l6ZSwgY29uc3QgQml0VmVjdG9y
JiB1bnNwaWxsYWJsZVRtcHMsIGNvbnN0IFVzZUNvdW50cyYgdXNlQ291bnRzKQogICAgICAgICA6
IEJhc2UoY29kZSwgcmVnc0luUHJpb3JpdHlPcmRlciwgbGFzdFByZWNvbG9yZWRSZWdpc3Rlcklu
ZGV4LCB0bXBBcnJheVNpemUsIHVuc3BpbGxhYmxlVG1wcywgdXNlQ291bnRzKQogICAgIHsKICAg
ICB9CkBAIC0xMDkzLDggKzEyMDIsNyBAQCBwcm90ZWN0ZWQ6CiAKICAgICAgICAgICAgIGlmICh0
cmFjZURlYnVnKQogICAgICAgICAgICAgICAgIGRhdGFMb2coIiAgICBDb2FsZXNjZWRcbiIpOwot
ICAgICAgICB9IGVsc2UgaWYgKGlzUHJlY29sb3JlZCh2KQotICAgICAgICAgICAgfHwgaGFzSW50
ZXJmZXJlbmNlRWRnZShJbnRlcmZlcmVuY2VFZGdlKHUsIHYpKSkgeworICAgICAgICB9IGVsc2Ug
aWYgKGlzUHJlY29sb3JlZCh2KSB8fCBoYXNJbnRlcmZlcmVuY2VFZGdlKHUsIHYpKSB7CiAgICAg
ICAgICAgICBhZGRXb3JrTGlzdCh1KTsKICAgICAgICAgICAgIGFkZFdvcmtMaXN0KHYpOwogCkBA
IC0xMTMzLDcgKzEyNDEsOCBAQCBwcm90ZWN0ZWQ6CiAgICAgICAgIG1fY29hbGVzY2VkVG1wc1t2
XSA9IHU7CiAKICAgICAgICAgYXV0byYgdk1vdmVzID0gbV9tb3ZlTGlzdFt2XTsKLSAgICAgICAg
bV9tb3ZlTGlzdFt1XS5hZGQodk1vdmVzLmJlZ2luKCksIHZNb3Zlcy5lbmQoKSk7CisgICAgICAg
IGZvciAodW5zaWduZWQgbW92ZSA6IHZNb3ZlcykKKyAgICAgICAgICAgIG1fbW92ZUxpc3RbdV0u
YWRkKG1vdmUpOwogCiAgICAgICAgIGZvckVhY2hBZGphY2VudCh2LCBbdGhpcywgdV0gKEluZGV4
VHlwZSBhZGphY2VudFRtcEluZGV4KSB7CiAgICAgICAgICAgICBpZiAoYWRkRWRnZURpc3RpbmN0
V2l0aG91dERlZ3JlZUNoYW5nZShhZGphY2VudFRtcEluZGV4LCB1KSkgewpAQCAtMTM5NywxMCAr
MTUwNiwxMSBAQCBwcm90ZWN0ZWQ6CiB9OwogCiAvLyBUaGlzIHBlcmZvcm0gYWxsIHRoZSB0YXNr
cyB0aGF0IGFyZSBzcGVjaWZpYyB0byBjZXJ0YWluIHJlZ2lzdGVyIHR5cGUuCi10ZW1wbGF0ZTxC
YW5rIGJhbmssIHRlbXBsYXRlPHR5cGVuYW1lLCB0eXBlbmFtZSwgdHlwZW5hbWU+IGNsYXNzIEFs
bG9jYXRvclR5cGUsIHR5cGVuYW1lIEludGVyZmVyZW5jZUVkZ2VUeXBlPgotY2xhc3MgQ29sb3Jp
bmdBbGxvY2F0b3IgOiBwdWJsaWMgQWxsb2NhdG9yVHlwZTx1bnNpZ25lZCwgQWJzb2x1dGVUbXBN
YXBwZXI8YmFuaz4sIEludGVyZmVyZW5jZUVkZ2VUeXBlPiB7Ci0gICAgdXNpbmcgVG1wTWFwcGVy
ID0gQWJzb2x1dGVUbXBNYXBwZXI8YmFuaz47Ci0gICAgdXNpbmcgQmFzZSA9IEFsbG9jYXRvclR5
cGU8dW5zaWduZWQsIFRtcE1hcHBlciwgSW50ZXJmZXJlbmNlRWRnZVR5cGU+OwordGVtcGxhdGU8
dHlwZW5hbWUgSW5kZXhUeXBlLCBCYW5rIGJhbmssIHRlbXBsYXRlPHR5cGVuYW1lLCB0eXBlbmFt
ZSwgQmFuaz4gY2xhc3MgQWxsb2NhdG9yVHlwZSwgdHlwZW5hbWUgSW50ZXJmZXJlbmNlU2V0Pgor
Y2xhc3MgQ29sb3JpbmdBbGxvY2F0b3IgOiBwdWJsaWMgQWxsb2NhdG9yVHlwZTxJbmRleFR5cGUs
IEludGVyZmVyZW5jZVNldCwgYmFuaz4geworICAgIHVzaW5nIEJhc2UgPSBBbGxvY2F0b3JUeXBl
PEluZGV4VHlwZSwgSW50ZXJmZXJlbmNlU2V0LCBiYW5rPjsKKyAgICB1c2luZyBUbXBNYXBwZXIg
PSB0eXBlbmFtZSBCYXNlOjpUbXBNYXBwZXI7CisgICAgdXNpbmcgQmFzZTo6dG1wVG9JbmRleDsK
ICAgICB1c2luZyBCYXNlOjptX2lzT25TZWxlY3RTdGFjazsKICAgICB1c2luZyBCYXNlOjptX3Nl
bGVjdFN0YWNrOwogICAgIHVzaW5nIEJhc2U6Om1fc2ltcGxpZnlXb3JrbGlzdDsKQEAgLTE0MjMs
MTIgKzE1MzMsMTMgQEAgY2xhc3MgQ29sb3JpbmdBbGxvY2F0b3IgOiBwdWJsaWMgQWxsb2NhdG9y
VHlwZTx1bnNpZ25lZCwgQWJzb2x1dGVUbXBNYXBwZXI8YmFuaz4KICAgICB1c2luZyBCYXNlOjpo
YXNJbnRlcmZlcmVuY2VFZGdlOwogICAgIHVzaW5nIEJhc2U6OmdldEFsaWFzOwogICAgIHVzaW5n
IEJhc2U6OmFkZEVkZ2U7CisgICAgdXNpbmcgQmFzZTo6bV9pbnRlcmZlcmVuY2VFZGdlczsKICAg
ICB1c2luZyBCYXNlOjptX3Bpbm5lZFJlZ3M7CiAgICAgdXNpbmcgQmFzZTo6bV9yZWdzSW5Qcmlv
cml0eU9yZGVyOwogCiBwdWJsaWM6CiAKLSAgICBDb2xvcmluZ0FsbG9jYXRvcihDb2RlJiBjb2Rl
LCBUbXBXaWR0aCYgdG1wV2lkdGgsIGNvbnN0IFVzZUNvdW50czxUbXA+JiB1c2VDb3VudHMsIGNv
bnN0IEhhc2hTZXQ8dW5zaWduZWQ+JiB1bnNwaWxsYWJsZVRtcCkKKyAgICBDb2xvcmluZ0FsbG9j
YXRvcihDb2RlJiBjb2RlLCBUbXBXaWR0aCYgdG1wV2lkdGgsIGNvbnN0IFVzZUNvdW50cyYgdXNl
Q291bnRzLCBjb25zdCBCaXRWZWN0b3ImIHVuc3BpbGxhYmxlVG1wKQogICAgICAgICA6IEJhc2Uo
Y29kZSwgY29kZS5yZWdzSW5Qcmlvcml0eU9yZGVyKGJhbmspLCBUbXBNYXBwZXI6Omxhc3RNYWNo
aW5lUmVnaXN0ZXJJbmRleCgpLCB0bXBBcnJheVNpemUoY29kZSksIHVuc3BpbGxhYmxlVG1wLCB1
c2VDb3VudHMpCiAgICAgICAgICwgbV90bXBXaWR0aCh0bXBXaWR0aCkKICAgICB7CkBAIC0xNDQw
LDEzICsxNTUxLDE1IEBAIHB1YmxpYzoKICAgICAgICAgICAgIH0KICAgICAgICAgfQogCisgICAg
ICAgIG1faW50ZXJmZXJlbmNlRWRnZXMuc2V0TWF4VG1wSW5kZXgoQWJzb2x1dGVUbXBNYXBwZXI8
YmFuaz46OmFic29sdXRlSW5kZXgobV9jb2RlLm51bVRtcHMoYmFuaykpKTsKKwogICAgICAgICBp
bml0aWFsaXplUHJlY29sb3JlZFRtcCgpOwogICAgICAgICBidWlsZCgpOwogICAgIH0KIAogICAg
IFRtcCBnZXRBbGlhcyhUbXAgdG1wKSBjb25zdAogICAgIHsKLSAgICAgICAgcmV0dXJuIFRtcE1h
cHBlcjo6dG1wRnJvbUFic29sdXRlSW5kZXgoZ2V0QWxpYXMoVG1wTWFwcGVyOjphYnNvbHV0ZUlu
ZGV4KHRtcCkpKTsKKyAgICAgICAgcmV0dXJuIFRtcE1hcHBlcjo6dG1wRnJvbUFic29sdXRlSW5k
ZXgoZ2V0QWxpYXModG1wVG9JbmRleCh0bXApKSk7CiAgICAgfQogCiAgICAgLy8gVGhpcyB0ZWxs
cyB5b3UgaWYgYSBNb3ZlIHdpbGwgYmUgY29hbGVzY2FibGUgaWYgdGhlIHNyYyBhbmQgZHN0IGVu
ZCB1cCBtYXRjaGluZy4gVGhpcyBtZXRob2QKQEAgLTE0NjksOCArMTU4Miw4IEBAIHB1YmxpYzoK
ICAgICAgICAgaWYgKG1fY29hbGVzY2VkVG1wc0F0U3BpbGwuaXNFbXB0eSgpKQogICAgICAgICAg
ICAgcmV0dXJuIHRtcDsKIAotICAgICAgICB1bnNpZ25lZCBhbGlhc0luZGV4ID0gVG1wTWFwcGVy
OjphYnNvbHV0ZUluZGV4KHRtcCk7Ci0gICAgICAgIHdoaWxlICh1bnNpZ25lZCBuZXh0QWxpYXNJ
bmRleCA9IG1fY29hbGVzY2VkVG1wc0F0U3BpbGxbYWxpYXNJbmRleF0pCisgICAgICAgIEluZGV4
VHlwZSBhbGlhc0luZGV4ID0gdG1wVG9JbmRleCh0bXApOworICAgICAgICB3aGlsZSAoSW5kZXhU
eXBlIG5leHRBbGlhc0luZGV4ID0gbV9jb2FsZXNjZWRUbXBzQXRTcGlsbFthbGlhc0luZGV4XSkK
ICAgICAgICAgICAgIGFsaWFzSW5kZXggPSBuZXh0QWxpYXNJbmRleDsKIAogICAgICAgICBUbXAg
YWxpYXMgPSBUbXBNYXBwZXI6OnRtcEZyb21BYnNvbHV0ZUluZGV4KGFsaWFzSW5kZXgpOwpAQCAt
MTUyNyw3ICsxNjQwLDcgQEAgcHVibGljOgogICAgICAgICBjb25zdCBDb2xsZWN0aW9uJiBtX2Nv
bGxlY3Rpb247CiAgICAgfTsKIAotICAgIEluZGV4VG9UbXBJdGVyYWJsZUFkYXB0b3I8VmVjdG9y
PHVuc2lnbmVkPj4gc3BpbGxlZFRtcHMoKSBjb25zdCB7IHJldHVybiBtX3NwaWxsZWRUbXBzOyB9
CisgICAgSW5kZXhUb1RtcEl0ZXJhYmxlQWRhcHRvcjxWZWN0b3I8SW5kZXhUeXBlPj4gc3BpbGxl
ZFRtcHMoKSBjb25zdCB7IHJldHVybiBtX3NwaWxsZWRUbXBzOyB9CiAKICAgICBib29sIHJlcXVp
cmVzU3BpbGxpbmcoKSBjb25zdCB7IHJldHVybiAhbV9zcGlsbGVkVG1wcy5pc0VtcHR5KCk7IH0K
IApAQCAtMTU4NCwxMCArMTY5NywxMCBAQCBJR05PUkVfR0NDX1dBUk5JTkdTX0VORAogICAgICAg
ICBpZiAobGVmdFRtcC5pc0dQKCkgIT0gKGJhbmsgPT0gR1ApIHx8IHJpZ2h0VG1wLmlzR1AoKSAh
PSAoYmFuayA9PSBHUCkpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICAgICAgdW5z
aWduZWQgbGVmdEluZGV4ID0gVG1wTWFwcGVyOjphYnNvbHV0ZUluZGV4KGxlZnRUbXApOwotICAg
ICAgICB1bnNpZ25lZCByaWdodEluZGV4ID0gVG1wTWFwcGVyOjphYnNvbHV0ZUluZGV4KHJpZ2h0
VG1wKTsKKyAgICAgICAgSW5kZXhUeXBlIGxlZnRJbmRleCA9IHRtcFRvSW5kZXgobGVmdFRtcCk7
CisgICAgICAgIEluZGV4VHlwZSByaWdodEluZGV4ID0gdG1wVG9JbmRleChyaWdodFRtcCk7CiAK
LSAgICAgICAgcmV0dXJuICFoYXNJbnRlcmZlcmVuY2VFZGdlKEludGVyZmVyZW5jZUVkZ2VUeXBl
KGxlZnRJbmRleCwgcmlnaHRJbmRleCkpOworICAgICAgICByZXR1cm4gIWhhc0ludGVyZmVyZW5j
ZUVkZ2UobGVmdEluZGV4LCByaWdodEluZGV4KTsKICAgICB9CiAKICAgICB2b2lkIGFkZFRvTG93
UHJpb3JpdHlDb2FsZXNjaW5nQ2FuZGlkYXRlcyhBcmcgbGVmdCwgQXJnIHJpZ2h0KQpAQCAtMTU5
Niw4ICsxNzA5LDggQEAgSUdOT1JFX0dDQ19XQVJOSU5HU19FTkQKICAgICAgICAgVG1wIGxlZnRU
bXAgPSBsZWZ0LnRtcCgpOwogICAgICAgICBUbXAgcmlnaHRUbXAgPSByaWdodC50bXAoKTsKIAot
ICAgICAgICB1bnNpZ25lZCBsZWZ0SW5kZXggPSBUbXBNYXBwZXI6OmFic29sdXRlSW5kZXgobGVm
dFRtcCk7Ci0gICAgICAgIHVuc2lnbmVkIHJpZ2h0SW5kZXggPSBUbXBNYXBwZXI6OmFic29sdXRl
SW5kZXgocmlnaHRUbXApOworICAgICAgICBJbmRleFR5cGUgbGVmdEluZGV4ID0gdG1wVG9JbmRl
eChsZWZ0VG1wKTsKKyAgICAgICAgSW5kZXhUeXBlIHJpZ2h0SW5kZXggPSB0bXBUb0luZGV4KHJp
Z2h0VG1wKTsKIAogICAgICAgICB1bnNpZ25lZCBuZXh0TW92ZUluZGV4ID0gbV9jb2FsZXNjaW5n
Q2FuZGlkYXRlcy5zaXplKCk7CiAgICAgICAgIG1fY29hbGVzY2luZ0NhbmRpZGF0ZXMuYXBwZW5k
KHsgbGVmdEluZGV4LCByaWdodEluZGV4IH0pOwpAQCAtMTY3NSw3ICsxNzg4LDcgQEAgSUdOT1JF
X0dDQ19XQVJOSU5HU19FTkQKICAgICAgICAgICAgIEFTU0VSVCh1c2VUbXApOwogCiAgICAgICAg
ICAgICB1bnNpZ25lZCBuZXh0TW92ZUluZGV4ID0gbV9jb2FsZXNjaW5nQ2FuZGlkYXRlcy5zaXpl
KCk7Ci0gICAgICAgICAgICBtX2NvYWxlc2NpbmdDYW5kaWRhdGVzLmFwcGVuZCh7IFRtcE1hcHBl
cjo6YWJzb2x1dGVJbmRleCh1c2VUbXApLCBUbXBNYXBwZXI6OmFic29sdXRlSW5kZXgoZGVmVG1w
KSB9KTsKKyAgICAgICAgICAgIG1fY29hbGVzY2luZ0NhbmRpZGF0ZXMuYXBwZW5kKHsgdG1wVG9J
bmRleCh1c2VUbXApLCB0bXBUb0luZGV4KGRlZlRtcCkgfSk7CiAgICAgICAgICAgICBpZiAodHJh
Y2VEZWJ1ZykKICAgICAgICAgICAgICAgICBkYXRhTG9nTG4oIk1vdmUgYXQgaW5kZXggIiwgbmV4
dE1vdmVJbmRleCwgIiBpczogIiwgKnByZXZJbnN0KTsKIApAQCAtMTc0MywxNCArMTg1NiwxNSBA
QCBJR05PUkVfR0NDX1dBUk5JTkdTX0VORAogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAg
ICAgIGZvciAoVG1wIGxpdmVUbXAgOiBsaXZlVG1wcykgewogICAgICAgICAgICAgICAgICAgICBB
U1NFUlQobGl2ZVRtcC5pc0dQKCkgPT0gKGJhbmsgPT0gR1ApKTsKLSAgICAgICAgICAgICAgICAg
ICAgCi0gICAgICAgICAgICAgICAgICAgIGlmICh0cmFjZURlYnVnKQotICAgICAgICAgICAgICAg
ICAgICAgICAgZGF0YUxvZygiICAgIEFkZGluZyBkZWYtbGl2ZSBlZGdlOiAiLCBhcmcsICIsICIs
IGxpdmVUbXAsICJcbiIpOworCisgICAgICAgICAgICAgICAgICAgIGRhdGFMb2dMbklmKHRyYWNl
RGVidWcsICIgICAgQWRkaW5nIGRlZi1saXZlIGVkZ2U6ICIsIGFyZywgIiwgIiwgbGl2ZVRtcCk7
CiAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICBhZGRFZGdlKGFyZywg
bGl2ZVRtcCk7CiAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGZvciAoY29uc3Qg
VG1wJiBwaW5uZWRSZWdUbXAgOiBtX3Bpbm5lZFJlZ3MpCisgICAgICAgICAgICAgICAgZm9yIChj
b25zdCBUbXAmIHBpbm5lZFJlZ1RtcCA6IG1fcGlubmVkUmVncykgeworICAgICAgICAgICAgICAg
ICAgICBkYXRhTG9nTG5JZih0cmFjZURlYnVnLCAiICAgIEFkZGluZyBkZWYtcGlubmVkIGVkZ2U6
ICIsIGFyZywgIiwgIiwgcGlubmVkUmVnVG1wKTsKICAgICAgICAgICAgICAgICAgICAgYWRkRWRn
ZShhcmcsIHBpbm5lZFJlZ1RtcCk7CisgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfSk7
CiAgICAgfQogCkBAIC0xNzU4LDcgKzE4NzIsNyBAQCBJR05PUkVfR0NDX1dBUk5JTkdTX0VORAog
ICAgIHsKICAgICAgICAgQVNTRVJUX1dJVEhfTUVTU0FHRShhLmlzR1AoKSA9PSBiLmlzR1AoKSwg
IkFuIGludGVyZmVyZW5jZSBiZXR3ZWVuIHJlZ2lzdGVycyBvZiBkaWZmZXJlbnQgdHlwZXMgZG9l
cyBub3QgbWFrZSBzZW5zZSwgaXQgY2FuIGxlYWQgdG8gbm9uLWNvbG9yYWJsZSBncmFwaHMuIik7
CiAKLSAgICAgICAgYWRkRWRnZShUbXBNYXBwZXI6OmFic29sdXRlSW5kZXgoYSksIFRtcE1hcHBl
cjo6YWJzb2x1dGVJbmRleChiKSk7CisgICAgICAgIGFkZEVkZ2UodG1wVG9JbmRleChhKSwgdG1w
VG9JbmRleChiKSk7CiAgICAgfQogCiAgICAgLy8gQ2FsbGluZyB0aGlzIHdpdGhvdXQgYSB0bXBX
aWR0aCB3aWxsIHBlcmZvcm0gYSBtb3JlIGNvbnNlcnZhdGl2ZSBjb2FsZXNjaW5nIGFuYWx5c2lz
IHRoYXQgYXNzdW1lcwpAQCAtMTgyMCw3ICsxOTM0LDcgQEAgSUdOT1JFX0dDQ19XQVJOSU5HU19F
TkQKIAogY2xhc3MgR3JhcGhDb2xvcmluZ1JlZ2lzdGVyQWxsb2NhdGlvbiB7CiBwdWJsaWM6Ci0g
ICAgR3JhcGhDb2xvcmluZ1JlZ2lzdGVyQWxsb2NhdGlvbihDb2RlJiBjb2RlLCBVc2VDb3VudHM8
VG1wPiYgdXNlQ291bnRzKQorICAgIEdyYXBoQ29sb3JpbmdSZWdpc3RlckFsbG9jYXRpb24oQ29k
ZSYgY29kZSwgVXNlQ291bnRzJiB1c2VDb3VudHMpCiAgICAgICAgIDogbV9jb2RlKGNvZGUpCiAg
ICAgICAgICwgbV91c2VDb3VudHModXNlQ291bnRzKQogICAgIHsKQEAgLTE4NDAsNyArMTk1NCw3
IEBAIHByaXZhdGU6CiAgICAgdGVtcGxhdGU8QmFuayBiYW5rPgogICAgIHZvaWQgYWxsb2NhdGVP
bkJhbmsoKQogICAgIHsKLSAgICAgICAgSGFzaFNldDx1bnNpZ25lZD4gdW5zcGlsbGFibGVUbXBz
ID0gY29tcHV0ZVVuc3BpbGxhYmxlVG1wczxiYW5rPigpOworICAgICAgICBCaXRWZWN0b3IgdW5z
cGlsbGFibGVUbXBzID0gY29tcHV0ZVVuc3BpbGxhYmxlVG1wczxiYW5rPigpOwogCiAgICAgICAg
IC8vIEZJWE1FOiBJZiBhIFRtcCBpcyB1c2VkIG9ubHkgZnJvbSBhIFNjcmF0Y2ggcm9sZSBhbmQg
dGhhdCBhcmd1bWVudCBpcyAhYWRtaXRzU3RhY2ssIHRoZW4KICAgICAgICAgLy8gd2Ugc2hvdWxk
IGFkZCB0aGUgVG1wIHRvIHVuc3BpbGxhYmxlVG1wcy4gVGhhdCB3aWxsIGhlbHAgYXZvaWQgcmVs
b29waW5nIG9ubHkgdG8gdHVybiB0aGUKQEAgLTE4NjQsMTAgKzE5NzgsOSBAQCBwcml2YXRlOgog
ICAgICAgICAgICAgLy8gY3JlYXRlZCBUbXBzIG1heSBnZXQgbmFycm93ZXIgdXNlL2RlZiB3aWR0
aHMuIE9uIHRoZSBvdGhlciBoYW5kLCB0aGUgc3BpbGxlciBhbHJlYWR5CiAgICAgICAgICAgICAv
LyBzZWxlY3RzIHdoaWNoIG1vdmUgaW5zdHJ1Y3Rpb24gdG8gdXNlIGJhc2VkIG9uIHRoZSBvcmln
aW5hbCBUbXAncyB3aWR0aHMsIHNvIGl0IG1heSBub3QKICAgICAgICAgICAgIC8vIG1hdHRlciB0
aGFuIGEgc3Vic2VxdWVudCBpdGVyYXRpb24gc2VlcyBhIGNvbnNlcnZhdGl2ZSB3aWR0aCBmb3Ig
dGhlIG5ldyBUbXBzLiBBbHNvLCB0aGUKLSAgICAgICAgICAgIC8vIHJlY29tcHV0YXRpb24gbWF5
IG5vdCBhY3R1YWxseSBiZSBhIHBlcmZvcm1hbmNlIHByb2JsZW07IGl0J3MgbGlrZWx5IHRoYXQg
YSBiZXR0ZXIgd2F5IHRvCi0gICAgICAgICAgICAvLyBpbXByb3ZlIHBlcmZvcm1hbmNlIG9mIFRt
cFdpZHRoIGlzIHRvIHJlcGxhY2UgaXRzIEhhc2hNYXAgd2l0aCBzb21ldGhpbmcgZWxzZS4gSXQn
cwotICAgICAgICAgICAgLy8gcG9zc2libGUgdGhhdCBtb3N0IG9mIHRoZSBUbXBXaWR0aCBvdmVy
aGVhZCBpcyBmcm9tIHF1ZXJpZXMgb2YgVG1wV2lkdGggcmF0aGVyIHRoYW4gdGhlCi0gICAgICAg
ICAgICAvLyByZWNvbXB1dGF0aW9uLCBpbiB3aGljaCBjYXNlIHNwZWVkaW5nIHVwIHRoZSBsb29r
dXAgd291bGQgYmUgYSBiaWdnZXIgd2luLgorICAgICAgICAgICAgLy8gcmVjb21wdXRhdGlvbiBt
YXkgbm90IGFjdHVhbGx5IGJlIGEgcGVyZm9ybWFuY2UgcHJvYmxlbTogd2Ugc3BlbmQgcm91Z2hs
eSAzIHRvIDQlIG9mIHRoZQorICAgICAgICAgICAgLy8gcmVnaXN0ZXIgYWxsb2NhdG9yIGluIG1f
dG1wV2lkdGgucmVjb21wdXRlLiBJbiBjb21wYXJpc29uIHdlIHNwZW5kIG1vcmUgdGhhbiA0MCUg
YnVpbGRpbmcKKyAgICAgICAgICAgIC8vIHRoZSBpbnRlcmZlcmVuY2UgZ3JhcGgKICAgICAgICAg
ICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTI0NzgKICAg
ICAgICAgICAgIG1fdG1wV2lkdGgucmVjb21wdXRlPGJhbms+KG1fY29kZSk7CiAKQEAgLTE4ODUs
MjAgKzE5OTgsMzQgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAg
ICAgICAgICAgICB9OwogCi0gICAgICAgICAgICBpZiAodXNlSVJDKCkpIHsKLSAgICAgICAgICAg
ICAgICBpZiAobV9jb2RlLm51bVRtcHMoYmFuaykgPCBzdGQ6Om51bWVyaWNfbGltaXRzPHVpbnQx
Nl90Pjo6bWF4KCkpIHsKLSAgICAgICAgICAgICAgICAgICAgQ29sb3JpbmdBbGxvY2F0b3I8YmFu
aywgSVJDLCBJbnRlcmZlcmVuY2VFZGdlPHVpbnQxNl90LCB1aW50MzJfdD4+IGFsbG9jYXRvciht
X2NvZGUsIG1fdG1wV2lkdGgsIG1fdXNlQ291bnRzLCB1bnNwaWxsYWJsZVRtcHMpOworICAgICAg
ICAgICAgLy8gVGhlIGJpdCB2ZWN0b3IgYXBwcm9hY2ggdXNlcyBuKm4gYml0cywgb3IgMmtCIGZv
ciBuID0gNDAwLgorICAgICAgICAgICAgY29uc3RleHByIHVuc2lnbmVkIG1heFNpemVGb3JTbWFs
bEludGVyZmVyZW5jZUdyYXBoID0gNDAwOworICAgICAgICAgICAgdXNpbmcgU21hbGxJbnRlcmZl
cmVuY2VHcmFwaCA9IEludGVyZmVyZW5jZUJpdFZlY3Rvcjx1aW50MTZfdD47CisgICAgICAgICAg
ICB1c2luZyBMYXJnZUludGVyZmVyZW5jZUdyYXBoID0gSW50ZXJmZXJlbmNlVmVjdG9yPFNtYWxs
U2V0PHVpbnQxNl90LCBJbnRIYXNoPHVpbnQxNl90Pj4sIHVpbnQxNl90PjsKKyAgICAgICAgICAg
IHVzaW5nIEh1Z2VJbnRlcmZlcmVuY2VHcmFwaCA9IEludGVyZmVyZW5jZVZlY3RvcjxTbWFsbFNl
dDx1aW50MzJfdCwgSW50SGFzaDx1aW50MzJfdD4+LCB1aW50MzJfdD47CisgICAgICAgICAgICBp
ZiAobV9jb2RlLm51bVRtcHMoYmFuaykgPCBtYXhTaXplRm9yU21hbGxJbnRlcmZlcmVuY2VHcmFw
aCkgeworICAgICAgICAgICAgICAgIGlmICh1c2VJUkMoKSkgeworICAgICAgICAgICAgICAgICAg
ICBDb2xvcmluZ0FsbG9jYXRvcjx1aW50MTZfdCwgYmFuaywgSVJDLCBTbWFsbEludGVyZmVyZW5j
ZUdyYXBoPiBhbGxvY2F0b3IobV9jb2RlLCBtX3RtcFdpZHRoLCBtX3VzZUNvdW50cywgdW5zcGls
bGFibGVUbXBzKTsKICAgICAgICAgICAgICAgICAgICAgZG9uZSA9IGRvQWxsb2NhdGlvbihhbGxv
Y2F0b3IpOwogICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIENv
bG9yaW5nQWxsb2NhdG9yPGJhbmssIElSQywgSW50ZXJmZXJlbmNlRWRnZTx1aW50MzJfdCwgdWlu
dDY0X3Q+PiBhbGxvY2F0b3IobV9jb2RlLCBtX3RtcFdpZHRoLCBtX3VzZUNvdW50cywgdW5zcGls
bGFibGVUbXBzKTsKKyAgICAgICAgICAgICAgICAgICAgQ29sb3JpbmdBbGxvY2F0b3I8dWludDE2
X3QsIGJhbmssIEJyaWdncywgU21hbGxJbnRlcmZlcmVuY2VHcmFwaD4gYWxsb2NhdG9yKG1fY29k
ZSwgbV90bXBXaWR0aCwgbV91c2VDb3VudHMsIHVuc3BpbGxhYmxlVG1wcyk7CisgICAgICAgICAg
ICAgICAgICAgIGRvbmUgPSBkb0FsbG9jYXRpb24oYWxsb2NhdG9yKTsKKyAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICB9IGVsc2UgaWYgKG1fY29kZS5udW1UbXBzKGJhbmspIDwgc3RkOjpu
dW1lcmljX2xpbWl0czx1aW50MTZfdD46Om1heCgpKSB7CisgICAgICAgICAgICAgICAgaWYgKHVz
ZUlSQygpKSB7CisgICAgICAgICAgICAgICAgICAgIENvbG9yaW5nQWxsb2NhdG9yPHVpbnQxNl90
LCBiYW5rLCBJUkMsIExhcmdlSW50ZXJmZXJlbmNlR3JhcGg+IGFsbG9jYXRvcihtX2NvZGUsIG1f
dG1wV2lkdGgsIG1fdXNlQ291bnRzLCB1bnNwaWxsYWJsZVRtcHMpOworICAgICAgICAgICAgICAg
ICAgICBkb25lID0gZG9BbGxvY2F0aW9uKGFsbG9jYXRvcik7CisgICAgICAgICAgICAgICAgfSBl
bHNlIHsKKyAgICAgICAgICAgICAgICAgICAgQ29sb3JpbmdBbGxvY2F0b3I8dWludDE2X3QsIGJh
bmssIEJyaWdncywgTGFyZ2VJbnRlcmZlcmVuY2VHcmFwaD4gYWxsb2NhdG9yKG1fY29kZSwgbV90
bXBXaWR0aCwgbV91c2VDb3VudHMsIHVuc3BpbGxhYmxlVG1wcyk7CiAgICAgICAgICAgICAgICAg
ICAgIGRvbmUgPSBkb0FsbG9jYXRpb24oYWxsb2NhdG9yKTsKICAgICAgICAgICAgICAgICB9CiAg
ICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIGlmIChtX2NvZGUubnVtVG1wcyhi
YW5rKSA8IHN0ZDo6bnVtZXJpY19saW1pdHM8dWludDE2X3Q+OjptYXgoKSkgewotICAgICAgICAg
ICAgICAgICAgICBDb2xvcmluZ0FsbG9jYXRvcjxiYW5rLCBCcmlnZ3MsIEludGVyZmVyZW5jZUVk
Z2U8dWludDE2X3QsIHVpbnQzMl90Pj4gYWxsb2NhdG9yKG1fY29kZSwgbV90bXBXaWR0aCwgbV91
c2VDb3VudHMsIHVuc3BpbGxhYmxlVG1wcyk7CisgICAgICAgICAgICAgICAgLy8gSGF2aW5nIG1v
cmUgdGhhbiAyKioxNiBudW1UbXBzIGNhbiBvY2N1ciBldmVuIHdpdGggT3B0aW9uczo6bWF4VG1w
c0ZvckdyYXBoQ29sb3JpbmcoKSA8IDIqKjE2LCBiZWNhdXNlIG9mIHNwaWxsaW5nCisgICAgICAg
ICAgICAgICAgaWYgKHVzZUlSQygpKSB7CisgICAgICAgICAgICAgICAgICAgIENvbG9yaW5nQWxs
b2NhdG9yPHVpbnQzMl90LCBiYW5rLCBJUkMsIEh1Z2VJbnRlcmZlcmVuY2VHcmFwaD4gYWxsb2Nh
dG9yKG1fY29kZSwgbV90bXBXaWR0aCwgbV91c2VDb3VudHMsIHVuc3BpbGxhYmxlVG1wcyk7CiAg
ICAgICAgICAgICAgICAgICAgIGRvbmUgPSBkb0FsbG9jYXRpb24oYWxsb2NhdG9yKTsKICAgICAg
ICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICBDb2xvcmluZ0FsbG9jYXRv
cjxiYW5rLCBCcmlnZ3MsIEludGVyZmVyZW5jZUVkZ2U8dWludDMyX3QsIHVpbnQ2NF90Pj4gYWxs
b2NhdG9yKG1fY29kZSwgbV90bXBXaWR0aCwgbV91c2VDb3VudHMsIHVuc3BpbGxhYmxlVG1wcyk7
CisgICAgICAgICAgICAgICAgICAgIENvbG9yaW5nQWxsb2NhdG9yPHVpbnQzMl90LCBiYW5rLCBC
cmlnZ3MsIEh1Z2VJbnRlcmZlcmVuY2VHcmFwaD4gYWxsb2NhdG9yKG1fY29kZSwgbV90bXBXaWR0
aCwgbV91c2VDb3VudHMsIHVuc3BpbGxhYmxlVG1wcyk7CiAgICAgICAgICAgICAgICAgICAgIGRv
bmUgPSBkb0FsbG9jYXRpb24oYWxsb2NhdG9yKTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAg
ICAgICB9CkBAIC0xOTA3LDExICsyMDM0LDggQEAgcHJpdmF0ZToKICAgICB9CiAKICAgICB0ZW1w
bGF0ZTxCYW5rIGJhbms+Ci0gICAgSGFzaFNldDx1bnNpZ25lZD4gY29tcHV0ZVVuc3BpbGxhYmxl
VG1wcygpCisgICAgQml0VmVjdG9yIGNvbXB1dGVVbnNwaWxsYWJsZVRtcHMoKQogICAgIHsKLQot
ICAgICAgICBIYXNoU2V0PHVuc2lnbmVkPiB1bnNwaWxsYWJsZVRtcHM7Ci0KICAgICAgICAgc3Ry
dWN0IFJhbmdlIHsKICAgICAgICAgICAgIHVuc2lnbmVkIGZpcnN0IHsgc3RkOjpudW1lcmljX2xp
bWl0czx1bnNpZ25lZD46Om1heCgpIH07CiAgICAgICAgICAgICB1bnNpZ25lZCBsYXN0IHsgMCB9
OwpAQCAtMTk2NCwxMiArMjA4OCwyMCBAQCBwcml2YXRlOgogICAgICAgICAgICAgfQogICAgICAg
ICAgICAgKytnbG9iYWxJbmRleDsKICAgICAgICAgfQorCisgICAgICAgIEJpdFZlY3RvciB1bnNw
aWxsYWJsZVRtcHM7CisgICAgICAgIHVuc3BpbGxhYmxlVG1wcy5lbnN1cmVTaXplKGFycmF5U2l6
ZSk7CiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IEFic29sdXRlVG1wTWFwcGVyPGJhbms+Ojps
YXN0TWFjaGluZVJlZ2lzdGVySW5kZXgoKSArIDE7IGkgPCByYW5nZXMuc2l6ZSgpOyArK2kpIHsK
ICAgICAgICAgICAgIFJhbmdlJiByYW5nZSA9IHJhbmdlc1tpXTsKICAgICAgICAgICAgIGlmIChy
YW5nZS5sYXN0IC0gcmFuZ2UuZmlyc3QgPD0gMSAmJiByYW5nZS5jb3VudCA+IHJhbmdlLmFkbWl0
U3RhY2tDb3VudCkKLSAgICAgICAgICAgICAgICB1bnNwaWxsYWJsZVRtcHMuYWRkKGkpOworICAg
ICAgICAgICAgICAgIHVuc3BpbGxhYmxlVG1wcy5xdWlja1NldChpKTsKICAgICAgICAgfQogCisg
ICAgICAgIG1fY29kZS5mb3JFYWNoRmFzdFRtcChbJl0oVG1wIHRtcCkgeworICAgICAgICAgICAg
aWYgKHRtcC5iYW5rKCkgPT0gYmFuaykKKyAgICAgICAgICAgICAgICB1bnNwaWxsYWJsZVRtcHMu
cXVpY2tTZXQoQWJzb2x1dGVUbXBNYXBwZXI8YmFuaz46OmFic29sdXRlSW5kZXgodG1wKSk7Cisg
ICAgICAgIH0pOworCiAgICAgICAgIHJldHVybiB1bnNwaWxsYWJsZVRtcHM7CiAgICAgfQogCkBA
IC0yMDMxLDEyICsyMTYzLDEyIEBAIHByaXZhdGU6CiAgICAgfQogCiAgICAgdGVtcGxhdGU8QmFu
ayBiYW5rLCB0eXBlbmFtZSBBbGxvY2F0b3JUeXBlPgotICAgIHZvaWQgYWRkU3BpbGxBbmRGaWxs
KGNvbnN0IEFsbG9jYXRvclR5cGUmIGFsbG9jYXRvciwgSGFzaFNldDx1bnNpZ25lZD4mIHVuc3Bp
bGxhYmxlVG1wcykKKyAgICB2b2lkIGFkZFNwaWxsQW5kRmlsbChjb25zdCBBbGxvY2F0b3JUeXBl
JiBhbGxvY2F0b3IsIEJpdFZlY3RvciYgdW5zcGlsbGFibGVUbXBzKQogICAgIHsKICAgICAgICAg
SGFzaE1hcDxUbXAsIFN0YWNrU2xvdCo+IHN0YWNrU2xvdHM7CiAgICAgICAgIGZvciAoVG1wIHRt
cCA6IGFsbG9jYXRvci5zcGlsbGVkVG1wcygpKSB7CiAgICAgICAgICAgICAvLyBBbGwgdGhlIHNw
aWxsZWQgdmFsdWVzIGJlY29tZSB1bnNwaWxsYWJsZS4KLSAgICAgICAgICAgIHVuc3BpbGxhYmxl
VG1wcy5hZGQoQWJzb2x1dGVUbXBNYXBwZXI8YmFuaz46OmFic29sdXRlSW5kZXgodG1wKSk7Cisg
ICAgICAgICAgICB1bnNwaWxsYWJsZVRtcHMuc2V0KEFic29sdXRlVG1wTWFwcGVyPGJhbms+Ojph
YnNvbHV0ZUluZGV4KHRtcCkpOwogCiAgICAgICAgICAgICAvLyBBbGxvY2F0ZSBzdGFjayBzbG90
IGZvciBlYWNoIHNwaWxsZWQgdmFsdWUuCiAgICAgICAgICAgICBTdGFja1Nsb3QqIHN0YWNrU2xv
dCA9IG1fY29kZS5hZGRTdGFja1Nsb3QoCkBAIC0yMTA5LDExICsyMjQxLDggQEAgcHJpdmF0ZToK
ICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHZhbHVlIHJhdGhlciB0aGFuIGxvYWRpbmcgaXQg
ZnJvbSB0aGUgc3RhY2suIEluIG9yZGVyIGZvciB0aGF0CiAgICAgICAgICAgICAgICAgICAgICAg
ICAvLyBvcHRpbWl6YXRpb24gdG8ga2ljayBpbiwgd2UgbmVlZCB0byBhdm9pZCBwbGFjaW5nIHRo
ZSBUbXAncyBzdGFjawogICAgICAgICAgICAgICAgICAgICAgICAgLy8gYWRkcmVzcyBpbnRvIHRo
ZSBpbnN0cnVjdGlvbi4KLSAgICAgICAgICAgICAgICAgICAgICAgIGlmICghQXJnOjppc0NvbGRV
c2Uocm9sZSkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBVc2VDb3VudHM8
VG1wPjo6Q291bnRzKiBjb3VudHMgPSBtX3VzZUNvdW50c1thcmcudG1wKCldOwotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGlmIChjb3VudHMgJiYgY291bnRzLT5udW1Db25zdERlZnMgPT0g
MSAmJiBjb3VudHMtPm51bURlZnMgPT0gMSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuOwotICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAg
ICAgICAgaWYgKCFBcmc6OmlzQ29sZFVzZShyb2xlKSAmJiBtX3VzZUNvdW50cy5pc0NvbnN0RGVm
PGJhbms+KEFic29sdXRlVG1wTWFwcGVyPGJhbms+OjphYnNvbHV0ZUluZGV4KGFyZy50bXAoKSkp
KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgICAgICAg
ICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgV2lkdGggc3BpbGxXaWR0aCA9IG1fdG1w
V2lkdGgucmVxdWlyZWRXaWR0aChhcmcudG1wKCkpOwogICAgICAgICAgICAgICAgICAgICAgICAg
aWYgKEFyZzo6aXNBbnlEZWYocm9sZSkgJiYgd2lkdGggPCBzcGlsbFdpZHRoKSB7CkBAIC0yMTY2
LDcgKzIyOTUsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VS
VChpbnN0QmFuayA9PSBiYW5rKTsKICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAg
ICAgICAgIFRtcCB0bXAgPSBtX2NvZGUubmV3VG1wKGJhbmspOwotICAgICAgICAgICAgICAgICAg
ICB1bnNwaWxsYWJsZVRtcHMuYWRkKEFic29sdXRlVG1wTWFwcGVyPGJhbms+OjphYnNvbHV0ZUlu
ZGV4KHRtcCkpOworICAgICAgICAgICAgICAgICAgICB1bnNwaWxsYWJsZVRtcHMuc2V0KEFic29s
dXRlVG1wTWFwcGVyPGJhbms+OjphYnNvbHV0ZUluZGV4KHRtcCkpOwogICAgICAgICAgICAgICAg
ICAgICBpbnN0LmFyZ3MuYXBwZW5kKHRtcCk7CiAgICAgICAgICAgICAgICAgICAgIFJFTEVBU0Vf
QVNTRVJUKGluc3QuYXJncy5zaXplKCkgPT0gMyk7CiAgICAgICAgICAgICAgICAgICAgIApAQCAt
MjIxMSw3ICsyMzQwLDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICAgICAgfQogCiAgICAg
ICAgICAgICAgICAgICAgIHRtcCA9IG1fY29kZS5uZXdUbXAoYmFuayk7Ci0gICAgICAgICAgICAg
ICAgICAgIHVuc3BpbGxhYmxlVG1wcy5hZGQoQWJzb2x1dGVUbXBNYXBwZXI8YmFuaz46OmFic29s
dXRlSW5kZXgodG1wKSk7CisgICAgICAgICAgICAgICAgICAgIHVuc3BpbGxhYmxlVG1wcy5zZXQo
QWJzb2x1dGVUbXBNYXBwZXI8YmFuaz46OmFic29sdXRlSW5kZXgodG1wKSk7CiAgICAgICAgICAg
ICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICBpZiAocm9sZSA9PSBBcmc6OlNjcmF0Y2gp
CiAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47CkBAIC0yMjM1LDcgKzIzNjQsNyBAQCBw
cml2YXRlOgogCiAgICAgQ29kZSYgbV9jb2RlOwogICAgIFRtcFdpZHRoIG1fdG1wV2lkdGg7Ci0g
ICAgVXNlQ291bnRzPFRtcD4mIG1fdXNlQ291bnRzOworICAgIFVzZUNvdW50cyYgbV91c2VDb3Vu
dHM7CiB9OwogCiB9IC8vIGFub255bW91cyBuYW1lc3BhY2UKQEAgLTIyNDcsNyArMjM3Niw3IEBA
IHZvaWQgYWxsb2NhdGVSZWdpc3RlcnNCeUdyYXBoQ29sb3JpbmcoQ29kZSYgY29kZSkKICAgICBp
ZiAodHJhY2VEZWJ1ZykKICAgICAgICAgZGF0YUxvZygiQ29kZSBiZWZvcmUgZ3JhcGggY29sb3Jp
bmc6XG4iLCBjb2RlKTsKIAotICAgIFVzZUNvdW50czxUbXA+IHVzZUNvdW50cyhjb2RlKTsKKyAg
ICBVc2VDb3VudHMgdXNlQ291bnRzKGNvZGUpOwogICAgIEdyYXBoQ29sb3JpbmdSZWdpc3RlckFs
bG9jYXRpb24gZ3JhcGhDb2xvcmluZ1JlZ2lzdGVyQWxsb2NhdGlvbihjb2RlLCB1c2VDb3VudHMp
OwogICAgIGdyYXBoQ29sb3JpbmdSZWdpc3RlckFsbG9jYXRpb24ucnVuKCk7CiB9CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckNvZGUuaCBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9iMy9haXIvQWlyQ29kZS5oCmluZGV4IGMwYmQzNTIwZDBkMy4uZDhlZTQxMjdi
NTczIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckNvZGUuaAor
KysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckNvZGUuaApAQCAtNDAsNiArNDAs
NyBAQAogI2luY2x1ZGUgIlN0YWNrQWxpZ25tZW50LmgiCiAjaW5jbHVkZSA8d3RmL0hhc2hTZXQu
aD4KICNpbmNsdWRlIDx3dGYvSW5kZXhNYXAuaD4KKyNpbmNsdWRlIDx3dGYvU21hbGxTZXQuaD4K
ICNpbmNsdWRlIDx3dGYvV2Vha1JhbmRvbS5oPgogCiBuYW1lc3BhY2UgSlNDIHsKQEAgLTMxMSw3
ICszMTIsMTMgQEAgcHVibGljOgogICAgIH0KIAogICAgIHZvaWQgYWRkRmFzdFRtcChUbXApOwot
ICAgIGJvb2wgaXNGYXN0VG1wKFRtcCB0bXApIGNvbnN0IHsgcmV0dXJuIG1fZmFzdFRtcHMuY29u
dGFpbnModG1wKTsgfQorCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rvcj4KKyAgICB2b2lk
IGZvckVhY2hGYXN0VG1wKGNvbnN0IEZ1bmN0b3ImIGZ1bmN0b3IpIGNvbnN0CisgICAgeworICAg
ICAgICBmb3IgKFRtcCB0bXAgOiBtX2Zhc3RUbXBzKQorICAgICAgICAgICAgZnVuY3Rvcih0bXAp
OworICAgIH0KICAgICAKICAgICBDRkcmIGNmZygpIGNvbnN0IHsgcmV0dXJuICptX2NmZzsgfQog
ICAgIApAQCAtMzc5LDcgKzM4Niw3IEBAIHByaXZhdGU6CiAgICAgVmVjdG9yPHN0ZDo6dW5pcXVl
X3B0cjxCYXNpY0Jsb2NrPj4gbV9ibG9ja3M7CiAgICAgU3BhcnNlQ29sbGVjdGlvbjxTcGVjaWFs
PiBtX3NwZWNpYWxzOwogICAgIHN0ZDo6dW5pcXVlX3B0cjxDRkc+IG1fY2ZnOwotICAgIEhhc2hT
ZXQ8VG1wPiBtX2Zhc3RUbXBzOworICAgIFNtYWxsU2V0PFRtcCwgVG1wSGFzaCwgMj4gbV9mYXN0
VG1wczsKICAgICBDQ2FsbFNwZWNpYWwqIG1fY0NhbGxTcGVjaWFsIHsgbnVsbHB0ciB9OwogICAg
IHVuc2lnbmVkIG1fbnVtR1BUbXBzIHsgMCB9OwogICAgIHVuc2lnbmVkIG1fbnVtRlBUbXBzIHsg
MCB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJVc2VDb3Vu
dHMuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyVXNlQ291bnRzLmgKaW5kZXgg
OTBhMjY4Y2Q1NTI5Li5lMDY2MTVjOWUzZDMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy9haXIvQWlyVXNlQ291bnRzLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Iz
L2Fpci9BaXJVc2VDb3VudHMuaApAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTUtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTUtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTMxLDM0ICszMSwxOCBAQAogI2luY2x1ZGUgIkFpckJs
b2NrV29ya2xpc3QuaCIKICNpbmNsdWRlICJBaXJDb2RlLmgiCiAjaW5jbHVkZSAiQWlySW5zdElu
bGluZXMuaCIKLSNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgotI2luY2x1ZGUgPHd0Zi9MaXN0RHVt
cC5oPgorI2luY2x1ZGUgIkFpclRtcElubGluZXMuaCIKKyNpbmNsdWRlIDx3dGYvQ29tbWFQcmlu
dGVyLmg+CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogCiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNw
YWNlIEIzIHsgbmFtZXNwYWNlIEFpciB7CiAKIGNsYXNzIENvZGU7CiAKLS8vIENvbXB1dGVzIHRo
ZSBudW1iZXIgb2YgdXNlcyBvZiBhIHZhcmlhYmxlIGJhc2VkIG9uIGZyZXF1ZW5jeSBvZiBleGVj
dXRpb24uIFRoZSBmcmVxdWVuY3kgb2YgYmxvY2tzCisvLyBDb21wdXRlcyB0aGUgbnVtYmVyIG9m
IHVzZXMgb2YgYSB0bXAgYmFzZWQgb24gZnJlcXVlbmN5IG9mIGV4ZWN1dGlvbi4gVGhlIGZyZXF1
ZW5jeSBvZiBibG9ja3MKIC8vIHRoYXQgYXJlIG9ubHkgcmVhY2hhYmxlIGJ5IHJhcmUgZWRnZXMg
aXMgc2NhbGVkIGJ5IE9wdGlvbnM6OnJhcmVCbG9ja1BlbmFsdHkoKS4KLQotLy8gVGhpbmcgY2Fu
IGJlIGVpdGhlciBUbXAgb3IgQXJnLgotdGVtcGxhdGU8dHlwZW5hbWUgVGhpbmc+CiBjbGFzcyBV
c2VDb3VudHMgewogcHVibGljOgotICAgIHN0cnVjdCBDb3VudHMgewotICAgICAgICB2b2lkIGR1
bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKLSAgICAgICAgewotICAgICAgICAgICAgb3V0LnBy
aW50KAotICAgICAgICAgICAgICAgICJ7bnVtV2FybVVzZXMgPSAiLCBudW1XYXJtVXNlcywgIiwg
bnVtQ29sZFVzZXMgPSAiLCBudW1Db2xkVXNlcywgIiwgbnVtRGVmcyA9ICIsCi0gICAgICAgICAg
ICAgICAgbnVtRGVmcywgIn0iKTsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgZG91Ymxl
IG51bVdhcm1Vc2VzIHsgMCB9OwotICAgICAgICBkb3VibGUgbnVtQ29sZFVzZXMgeyAwIH07Ci0g
ICAgICAgIGRvdWJsZSBudW1EZWZzIHsgMCB9OwotICAgICAgICBkb3VibGUgbnVtQ29uc3REZWZz
IHsgMCB9OwotICAgIH07Ci0gICAgCiAgICAgVXNlQ291bnRzKENvZGUmIGNvZGUpCiAgICAgewog
ICAgICAgICAvLyBGaW5kIG5vbi1yYXJlIGJsb2Nrcy4KQEAgLTcwLDQ3ICs1NCw3MyBAQCBwdWJs
aWM6CiAgICAgICAgICAgICAgICAgICAgIGZhc3RXb3JrbGlzdC5wdXNoKHN1Y2Nlc3Nvci5ibG9j
aygpKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQotICAgICAgICAKKworICAgICAgICB1bnNp
Z25lZCBncEFycmF5U2l6ZSA9IEFic29sdXRlVG1wTWFwcGVyPEdQPjo6YWJzb2x1dGVJbmRleChj
b2RlLm51bVRtcHMoR1ApKTsKKyAgICAgICAgbV9ncE51bVdhcm1Vc2VzQW5kRGVmcy5yZXNpemUo
Z3BBcnJheVNpemUpOworICAgICAgICBtX2dwQ29uc3REZWZzLmVuc3VyZVNpemUoZ3BBcnJheVNp
emUpOworICAgICAgICB1bnNpZ25lZCBmcEFycmF5U2l6ZSA9IEFic29sdXRlVG1wTWFwcGVyPEZQ
Pjo6YWJzb2x1dGVJbmRleChjb2RlLm51bVRtcHMoRlApKTsKKyAgICAgICAgbV9mcE51bVdhcm1V
c2VzQW5kRGVmcy5yZXNpemUoZnBBcnJheVNpemUpOworICAgICAgICBtX2ZwQ29uc3REZWZzLmVu
c3VyZVNpemUoZ3BBcnJheVNpemUpOworCiAgICAgICAgIGZvciAoQmFzaWNCbG9jayogYmxvY2sg
OiBjb2RlKSB7CiAgICAgICAgICAgICBkb3VibGUgZnJlcXVlbmN5ID0gYmxvY2stPmZyZXF1ZW5j
eSgpOwogICAgICAgICAgICAgaWYgKCFmYXN0V29ya2xpc3Quc2F3KGJsb2NrKSkKICAgICAgICAg
ICAgICAgICBmcmVxdWVuY3kgKj0gT3B0aW9uczo6cmFyZUJsb2NrUGVuYWx0eSgpOwogICAgICAg
ICAgICAgZm9yIChJbnN0JiBpbnN0IDogKmJsb2NrKSB7Ci0gICAgICAgICAgICAgICAgaW5zdC5m
b3JFYWNoPFRoaW5nPigKLSAgICAgICAgICAgICAgICAgICAgWyZdIChUaGluZyYgYXJnLCBBcmc6
OlJvbGUgcm9sZSwgQmFuaywgV2lkdGgpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIENvdW50
cyYgY291bnRzID0gbV9jb3VudHMuYWRkKGFyZywgQ291bnRzKCkpLml0ZXJhdG9yLT52YWx1ZTsK
LQotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKEFyZzo6aXNXYXJtVXNlKHJvbGUpKQotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGNvdW50cy5udW1XYXJtVXNlcyArPSBmcmVxdWVuY3k7
Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoQXJnOjppc0NvbGRVc2Uocm9sZSkpCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgY291bnRzLm51bUNvbGRVc2VzICs9IGZyZXF1ZW5jeTsK
LSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChBcmc6OmlzQW55RGVmKHJvbGUpKQotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGNvdW50cy5udW1EZWZzICs9IGZyZXF1ZW5jeTsKKyAgICAg
ICAgICAgICAgICBpbnN0LmZvckVhY2g8VG1wPigKKyAgICAgICAgICAgICAgICAgICAgWyZdIChU
bXAmIHRtcCwgQXJnOjpSb2xlIHJvbGUsIEJhbmsgYmFuaywgV2lkdGgpIHsKKworICAgICAgICAg
ICAgICAgICAgICAgICAgaWYgKEFyZzo6aXNXYXJtVXNlKHJvbGUpIHx8IEFyZzo6aXNBbnlEZWYo
cm9sZSkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoYmFuayA9PSBHUCkKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9ncE51bVdhcm1Vc2VzQW5kRGVmc1tBYnNv
bHV0ZVRtcE1hcHBlcjxHUD46OmFic29sdXRlSW5kZXgodG1wKV0gKz0gZnJlcXVlbmN5OworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgbV9mcE51bVdhcm1Vc2VzQW5kRGVmc1tBYnNvbHV0ZVRtcE1hcHBlcjxGUD46OmFic29s
dXRlSW5kZXgodG1wKV0gKz0gZnJlcXVlbmN5OworICAgICAgICAgICAgICAgICAgICAgICAgfQog
ICAgICAgICAgICAgICAgICAgICB9KTsKIAogICAgICAgICAgICAgICAgIGlmICgoaW5zdC5raW5k
Lm9wY29kZSA9PSBNb3ZlIHx8IGluc3Qua2luZC5vcGNvZGUgPT0gTW92ZTMyKQogICAgICAgICAg
ICAgICAgICAgICAmJiBpbnN0LmFyZ3NbMF0uaXNTb21lSW1tKCkKLSAgICAgICAgICAgICAgICAg
ICAgJiYgaW5zdC5hcmdzWzFdLmlzPFRoaW5nPigpKQotICAgICAgICAgICAgICAgICAgICBtX2Nv
dW50cy5hZGQoaW5zdC5hcmdzWzFdLmFzPFRoaW5nPigpLCBDb3VudHMoKSkuaXRlcmF0b3ItPnZh
bHVlLm51bUNvbnN0RGVmcysrOworICAgICAgICAgICAgICAgICAgICAmJiBpbnN0LmFyZ3NbMV0u
aXM8VG1wPigpKSB7CisgICAgICAgICAgICAgICAgICAgIFRtcCB0bXAgPSBpbnN0LmFyZ3NbMV0u
YXM8VG1wPigpOworICAgICAgICAgICAgICAgICAgICBpZiAodG1wLmJhbmsoKSA9PSBHUCkKKyAg
ICAgICAgICAgICAgICAgICAgICAgIG1fZ3BDb25zdERlZnMucXVpY2tTZXQoQWJzb2x1dGVUbXBN
YXBwZXI8R1A+OjphYnNvbHV0ZUluZGV4KHRtcCkpOworICAgICAgICAgICAgICAgICAgICBlbHNl
CisgICAgICAgICAgICAgICAgICAgICAgICBtX2ZwQ29uc3REZWZzLnF1aWNrU2V0KEFic29sdXRl
VG1wTWFwcGVyPEZQPjo6YWJzb2x1dGVJbmRleCh0bXApKTsKKyAgICAgICAgICAgICAgICB9CiAg
ICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9CiAKLSAgICBjb25zdCBDb3VudHMqIG9wZXJh
dG9yW10oY29uc3QgVGhpbmcmIGFyZykgY29uc3QKKyAgICB0ZW1wbGF0ZTxCYW5rIGJhbms+Cisg
ICAgYm9vbCBpc0NvbnN0RGVmKHVuc2lnbmVkIGFic29sdXRlSW5kZXgpIGNvbnN0CisgICAgewor
ICAgICAgICBpZiAoYmFuayA9PSBHUCkKKyAgICAgICAgICAgIHJldHVybiBtX2dwQ29uc3REZWZz
LnF1aWNrR2V0KGFic29sdXRlSW5kZXgpOworICAgICAgICByZXR1cm4gbV9mcENvbnN0RGVmcy5x
dWlja0dldChhYnNvbHV0ZUluZGV4KTsKKyAgICB9CisKKyAgICB0ZW1wbGF0ZTxCYW5rIGJhbms+
CisgICAgZmxvYXQgbnVtV2FybVVzZXNBbmREZWZzKHVuc2lnbmVkIGFic29sdXRlSW5kZXgpIGNv
bnN0CiAgICAgewotICAgICAgICBhdXRvIGl0ZXIgPSBtX2NvdW50cy5maW5kKGFyZyk7Ci0gICAg
ICAgIGlmIChpdGVyID09IG1fY291bnRzLmVuZCgpKQotICAgICAgICAgICAgcmV0dXJuIG51bGxw
dHI7Ci0gICAgICAgIHJldHVybiAmaXRlci0+dmFsdWU7CisgICAgICAgIGlmIChiYW5rID09IEdQ
KQorICAgICAgICAgICAgcmV0dXJuIG1fZ3BOdW1XYXJtVXNlc0FuZERlZnNbYWJzb2x1dGVJbmRl
eF07CisgICAgICAgIHJldHVybiBtX2ZwTnVtV2FybVVzZXNBbmREZWZzW2Fic29sdXRlSW5kZXhd
OwogICAgIH0KIAogICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAogICAgIHsK
LSAgICAgICAgb3V0LnByaW50KG1hcER1bXAobV9jb3VudHMpKTsKKyAgICAgICAgQ29tbWFQcmlu
dGVyIGNvbW1hKCIsICIpOworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9ncE51
bVdhcm1Vc2VzQW5kRGVmcy5zaXplKCk7ICsraSkKKyAgICAgICAgICAgIG91dC5wcmludChjb21t
YSwgQWJzb2x1dGVUbXBNYXBwZXI8R1A+Ojp0bXBGcm9tQWJzb2x1dGVJbmRleChpKSwgIj0+IHtu
dW1XYXJtVXNlc0FuZERlZnM9IiwgbV9ncE51bVdhcm1Vc2VzQW5kRGVmc1tpXSwgIiwgaXNDb25z
dERlZj0iLCBtX2dwQ29uc3REZWZzLnF1aWNrR2V0KGkpLCAifSIpOworICAgICAgICBmb3IgKHVu
c2lnbmVkIGkgPSAwOyBpIDwgbV9mcE51bVdhcm1Vc2VzQW5kRGVmcy5zaXplKCk7ICsraSkKKyAg
ICAgICAgICAgIG91dC5wcmludChjb21tYSwgQWJzb2x1dGVUbXBNYXBwZXI8RlA+Ojp0bXBGcm9t
QWJzb2x1dGVJbmRleChpKSwgIj0+IHtudW1XYXJtVXNlc0FuZERlZnM9IiwgbV9mcE51bVdhcm1V
c2VzQW5kRGVmc1tpXSwgIiwgaXNDb25zdERlZj0iLCBtX2ZwQ29uc3REZWZzLnF1aWNrR2V0KGkp
LCAifSIpOwogICAgIH0KIAogcHJpdmF0ZToKLSAgICBIYXNoTWFwPFRoaW5nLCBDb3VudHM+IG1f
Y291bnRzOworICAgIFZlY3RvcjxmbG9hdD4gbV9ncE51bVdhcm1Vc2VzQW5kRGVmczsKKyAgICBW
ZWN0b3I8ZmxvYXQ+IG1fZnBOdW1XYXJtVXNlc0FuZERlZnM7CisgICAgQml0VmVjdG9yIG1fZ3BD
b25zdERlZnM7CisgICAgQml0VmVjdG9yIG1fZnBDb25zdERlZnM7CiB9OwogCiB9IH0gfSAvLyBu
YW1lc3BhY2UgSlNDOjpCMzo6QWlyCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
cGFyc2VyL05vZGVzLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL05vZGVzLmgKaW5k
ZXggZWQxNzNjMTdhNWJiLi41NjEyOTlhNmE3MGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9wYXJzZXIvTm9kZXMuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2Vy
L05vZGVzLmgKQEAgLTM2LDcgKzM2LDcgQEAKICNpbmNsdWRlICJTeW1ib2xUYWJsZS5oIgogI2lu
Y2x1ZGUgIlZhcmlhYmxlRW52aXJvbm1lbnQuaCIKICNpbmNsdWRlIDx3dGYvTWF0aEV4dHJhcy5o
PgotI2luY2x1ZGUgPHd0Zi9TbWFsbFB0clNldC5oPgorI2luY2x1ZGUgPHd0Zi9TbWFsbFNldC5o
PgogCiBuYW1lc3BhY2UgSlNDIHsKIApAQCAtNTMsNyArNTMsNyBAQCBuYW1lc3BhY2UgSlNDIHsK
ICAgICBjbGFzcyBSZWdpc3RlcklEOwogICAgIGNsYXNzIFNjb3BlTm9kZTsKIAotICAgIHR5cGVk
ZWYgU21hbGxQdHJTZXQ8VW5pcXVlZFN0cmluZ0ltcGwqPiBVbmlxdWVkU3RyaW5nSW1wbFB0clNl
dDsKKyAgICB0eXBlZGVmIFNtYWxsU2V0PFVuaXF1ZWRTdHJpbmdJbXBsKj4gVW5pcXVlZFN0cmlu
Z0ltcGxQdHJTZXQ7CiAKICAgICBlbnVtIGNsYXNzIE9wZXJhdG9yIDogdWludDhfdCB7CiAgICAg
ICAgIEVxdWFsLApkaWZmIC0tZ2l0IGEvU291cmNlL1dURi9DaGFuZ2VMb2cgYi9Tb3VyY2UvV1RG
L0NoYW5nZUxvZwppbmRleCBiOTM5OWZlNzQyMWQuLjVhYzU5MDFmODM5ZCAxMDA2NDQKLS0tIGEv
U291cmNlL1dURi9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dURi9DaGFuZ2VMb2cKQEAgLTEsMyAr
MSwyNCBAQAorMjAyMS0wNS0xNyAgUm9iaW4gTW9yaXNzZXQgIDxybW9yaXNzZXRAYXBwbGUuY29t
PgorCisgICAgICAgIE1ha2UgQWlyQWxsb2NhdGVSZWdpc3RlcnNCeUdyYXBoQ29sb3JpbmcgdXNl
IGxlc3MgbWVtb3J5CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0yMjU4NDgKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkoT09QUykuCisKKyAgICAg
ICAgSSByZW5hbWVkIFNtYWxsUHRyU2V0IGludG8gU21hbGxTZXQsIGFzIGl0IG5vdyBzdXBwb3J0
cyBpbnRlZ2VycyBhcyB3ZWxsIGFzIHBvaW50ZXJzLgorCisgICAgICAgIEkgdGhlbiByZWR1Y2Vk
IGl0cyBzaXplIGJ5IHNoYXJpbmcgdGhlIHNhbWUgc3RvcmFnZSBmb3IgbV9idWZmZXIgYW5kIGZv
ciBtX3NtYWxsU3RvcmFnZS4KKyAgICAgICAgVGhpcyBpcyBzYWZlIHRvIGRvLCBiZWNhdXNlIGFs
bCBvcGVyYXRpb25zIGJyYW5jaCBvbiBpc1NtYWxsKCkgd2hpY2ggZGVwZW5kcyBwdXJlbHkgb24g
bV9jYXBhY2l0eS4KKworICAgICAgICBJIGFsc28gYWRkZWQgdHJpdmlhbCBzaXplKCkgYW5kIGlz
RW1wdHkoKSBtZXRob2RzLCB0byBtYWtlIGRlYnVnZ2luZyBlYXNpZXIuCisKKyAgICAgICAgRmlu
YWxseSBJIGFkZGVkIGEgY29tbWVudCBhdCB0aGUgdG9wIG9mIHRoZSBmaWxlIGV4cGxhaW5pbmcg
d2hlbiB0byB1c2UsIGFuZCAobW9yZSBpbXBvcnRhbnRseSkgbm90IHRvIHVzZSBTbWFsbFNldC4K
KworICAgICAgICAqIFdURi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIHd0
Zi9DTWFrZUxpc3RzLnR4dDoKKyAgICAgICAgKiB3dGYvU21hbGxTZXQuY3BwOiBSZW5hbWVkIGZy
b20gU291cmNlL1dURi93dGYvU21hbGxQdHJTZXQuY3BwLgorICAgICAgICAqIHd0Zi9TbWFsbFNl
dC5oOiBSZW5hbWVkIGZyb20gU291cmNlL1dURi93dGYvU21hbGxQdHJTZXQuaC4KKwogMjAyMS0w
NS0xNiAgQ2hyaXMgRHVtZXogIDxjZHVtZXpAYXBwbGUuY29tPgogCiAgICAgICAgIE1vZGVybml6
ZSAvIE9wdGltaXplIFNRTGl0ZVN0YXRlbWVudCBjcmVhdGlvbiBhbmQgcHJlcGFyYXRpb24KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XVEYvV1RGLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9Tb3Vy
Y2UvV1RGL1dURi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCmluZGV4IGIxMWUwOThjZTQ3Ny4u
YWZmNTMyMWI0N2YzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL1dURi54Y29kZXByb2ovcHJvamVj
dC5wYnhwcm9qCisrKyBiL1NvdXJjZS9XVEYvV1RGLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oK
QEAgLTQyLDcgKzQyLDcgQEAKIAkJMEY5RDMzNjAxNjVEQkE3MzAwNUFEMzg3IC8qIEZpbGVQcmlu
dFN0cmVhbS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSAwRjlEMzM1QjE2NURCQTczMDA1QUQzODcgLyogRmlsZVByaW50U3RyZWFtLmNwcCAqLzsgfTsK
IAkJMEY5RDMzNjIxNjVEQkE3MzAwNUFEMzg3IC8qIFByaW50U3RyZWFtLmNwcCBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGOUQzMzVEMTY1REJBNzMwMDVB
RDM4NyAvKiBQcmludFN0cmVhbS5jcHAgKi87IH07CiAJCTBGQTZGMzhGMjBDQzU4MEYwMEEwM0RD
RCAvKiBTZWdtZW50ZWRWZWN0b3IuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMEZBNkYzOEUyMENDNTgwRTAwQTAzRENEIC8qIFNlZ21lbnRlZFZlY3Rv
ci5jcHAgKi87IH07Ci0JCTBGQTZGMzkzMjBDQzczQTMwMEEwM0RDRCAvKiBTbWFsbFB0clNldC5j
cHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkE2RjM5
MjIwQ0M3M0EyMDBBMDNEQ0QgLyogU21hbGxQdHJTZXQuY3BwICovOyB9OworCQkwRkE2RjM5MzIw
Q0M3M0EzMDBBMDNEQ0QgLyogU21hbGxTZXQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMEZBNkYzOTIyMENDNzNBMjAwQTAzRENEIC8qIFNtYWxsU2V0
LmNwcCAqLzsgfTsKIAkJMEZBNkYzOTUyMENDQUNFOTAwQTAzRENEIC8qIFVuaXF1ZUFycmF5LmNw
cCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGQTZGMzk0
MjBDQ0FDRTkwMEEwM0RDRCAvKiBVbmlxdWVBcnJheS5jcHAgKi87IH07CiAJCTBGRERCRkE3MTY2
NkRGQTMwMEM1NUZFRiAvKiBTdHJpbmdQcmludFN0cmVhbS5jcHAgaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkREQkZBNTE2NjZERkEzMDBDNTVGRUYgLyog
U3RyaW5nUHJpbnRTdHJlYW0uY3BwICovOyB9OwogCQkwRkUxNjQ2QTFCNkZGQzk2MDA0MDBFN0Mg
LyogTG9jay5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSAwRkUxNjQ2ODFCNkZGQzk2MDA0MDBFN0MgLyogTG9jay5jcHAgKi87IH07CkBAIC0yNzIsNyAr
MjcyLDcgQEAKIAkJMEY5REFBMDUxRkQxQzM3QjAwNzlDNUIyIC8qIFN0YWNrU2hvdFByb2ZpbGVy
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFN0YWNrU2hvdFByb2ZpbGVyLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGQTZGMzhFMjBDQzU4MEUwMEEwM0RDRCAv
KiBTZWdtZW50ZWRWZWN0b3IuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRo
ID0gU2VnbWVudGVkVmVjdG9yLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZB
NkYzOTAyMENDNjFFQjAwQTAzRENEIC8qIFJlZkNvdW50ZWRBcnJheS5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBSZWZDb3VudGVkQXJyYXkuY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwotCQkwRkE2RjM5MjIwQ0M3M0EyMDBBMDNEQ0QgLyogU21hbGxQdHJT
ZXQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU21hbGxQdHJTZXQu
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkE2RjM5MjIwQ0M3M0EyMDBBMDNE
Q0QgLyogU21hbGxTZXQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
U21hbGxTZXQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRkE2RjM5NDIwQ0NB
Q0U5MDBBMDNEQ0QgLyogVW5pcXVlQXJyYXkuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBwYXRoID0gVW5pcXVlQXJyYXkuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQkwRkIxNEUxODE4MEZBMjE4MDA5QjZCNEQgLyogQmFnLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IEJhZy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRkIxNEUx
QTE4MTBFMURBMDA5QjZCNEQgLyogQmFnVG9IYXNoTWFwLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEJhZ1Rv
SGFzaE1hcC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtNDQyLDcgKzQ0Miw3IEBA
CiAJCTcwRUNBNjBCMUIwMjQyNjgwMDQ0OTczOSAvKiBTeW1ib2xJbXBsLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFN5bWJvbEltcGwuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJNzBFQ0E2MEMxQjAyNDI2ODAwNDQ5NzM5IC8qIFVuaXF1ZWRTdHJpbmdJbXBsLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFVuaXF1ZWRTdHJpbmdJbXBsLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTc5MDM4RTA1MjI0QjA1QTcwMDRDMDczOCAvKiBT
cGFubmluZ1RyZWUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU3Bhbm5pbmdU
cmVlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTc5MzZENkE5MUM5OUY4QUUwMDBE
MUFFRCAvKiBTbWFsbFB0clNldC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBT
bWFsbFB0clNldC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3OTM2RDZBOTFDOTlG
OEFFMDAwRDFBRUQgLyogU21hbGxTZXQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gU21hbGxTZXQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzkzQkZBREQ5Q0VE
NDRCOEI5RkJDQTE2IC8qIFN0ZFVub3JkZXJlZE1hcC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBTdGRVbm9yZGVyZWRNYXAuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJNzk1MjEyMDIxRjQyNTg4ODAwQkQ2NDIxIC8qIFNpbmdsZVJvb3RHcmFwaC5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTaW5nbGVSb290R3JhcGguaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJN0EwNTA5M0QxRkI5RENDNTAwQjMzRkI4IC8qIEpTT05WYWx1ZXMu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNPTlZhbHVlcy5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTI0NCw4ICsxMjQ0LDggQEAKIAkJCQlBNzQ4NzQ0RjE3
QTBCREFFMDBGQTA0Q0IgLyogU2l4Q2hhcmFjdGVySGFzaC5jcHAgKi8sCiAJCQkJQTc0ODc0NTAx
N0EwQkRBRTAwRkEwNENCIC8qIFNpeENoYXJhY3Rlckhhc2guaCAqLywKIAkJCQlBOEE0NzMwQzE1
MUE4MjVCMDA0MTIzRkYgLyogU2l6ZUxpbWl0cy5jcHAgKi8sCi0JCQkJMEZBNkYzOTIyMENDNzNB
MjAwQTAzRENEIC8qIFNtYWxsUHRyU2V0LmNwcCAqLywKLQkJCQk3OTM2RDZBOTFDOTlGOEFFMDAw
RDFBRUQgLyogU21hbGxQdHJTZXQuaCAqLywKKwkJCQkwRkE2RjM5MjIwQ0M3M0EyMDBBMDNEQ0Qg
LyogU21hbGxTZXQuY3BwICovLAorCQkJCTc5MzZENkE5MUM5OUY4QUUwMDBEMUFFRCAvKiBTbWFs
bFNldC5oICovLAogCQkJCUEzMEQ0MTJEMUYwREUxM0YwMEI3MTk1NCAvKiBTb2Z0TGlua2luZy5o
ICovLAogCQkJCTkzMTU2QzhEMjYyQzk4MjIwMEVBRTI3QiAvKiBTb3J0ZWRBcnJheU1hcC5oICov
LAogCQkJCTc5MDM4RTA1MjI0QjA1QTcwMDRDMDczOCAvKiBTcGFubmluZ1RyZWUuaCAqLywKQEAg
LTE3NjAsNyArMTc2MCw3IEBACiAJCQkJNTMxMUJENTMxRUE3MUNBRDAwNTI1MjgxIC8qIFNpZ25h
bHMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTc0ODc0NTIxN0EwQkRBRTAwRkEwNENCIC8qIFNp
eENoYXJhY3Rlckhhc2guY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQThBNDc0MjUxNTFBODI1QjAw
NDEyM0ZGIC8qIFNpemVMaW1pdHMuY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJMEZBNkYzOTMyMEND
NzNBMzAwQTAzRENEIC8qIFNtYWxsUHRyU2V0LmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBGQTZG
MzkzMjBDQzczQTMwMEEwM0RDRCAvKiBTbWFsbFNldC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlB
OEE0NzQyNzE1MUE4MjVCMDA0MTIzRkYgLyogU3RhY2tCb3VuZHMuY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJRkVFQTRERjkyMTZEN0JFNDAwQUMwNjAyIC8qIFN0YWNrUG9pbnRlci5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQlGRURBQ0QzRDE2MzBGODNGMDBDNjk2MzQgLyogU3RhY2tTdGF0cy5jcHAg
aW4gU291cmNlcyAqLywKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL0NNYWtlTGlzdHMudHh0
IGIvU291cmNlL1dURi93dGYvQ01ha2VMaXN0cy50eHQKaW5kZXggZTdkYmM0ZjAyZmEwLi44MDE4
ZmFiYTQ2YzcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL0NNYWtlTGlzdHMudHh0CisrKyBi
L1NvdXJjZS9XVEYvd3RmL0NNYWtlTGlzdHMudHh0CkBAIC0yMzUsNyArMjM1LDcgQEAgc2V0KFdU
Rl9QVUJMSUNfSEVBREVSUwogICAgIFNpbmdseUxpbmtlZExpc3QuaAogICAgIFNpbmdseUxpbmtl
ZExpc3RXaXRoVGFpbC5oCiAgICAgU2l4Q2hhcmFjdGVySGFzaC5oCi0gICAgU21hbGxQdHJTZXQu
aAorICAgIFNtYWxsU2V0LmgKICAgICBTb2Z0TGlua2luZy5oCiAgICAgU29ydGVkQXJyYXlNYXAu
aAogICAgIFNwYW5uaW5nVHJlZS5oCkBAIC00NDMsNyArNDQzLDcgQEAgc2V0KFdURl9TT1VSQ0VT
CiAgICAgU2Vjb25kcy5jcHAKICAgICBTZWdtZW50ZWRWZWN0b3IuY3BwCiAgICAgU2l4Q2hhcmFj
dGVySGFzaC5jcHAKLSAgICBTbWFsbFB0clNldC5jcHAKKyAgICBTbWFsbFNldC5jcHAKICAgICBT
dGFja0JvdW5kcy5jcHAKICAgICBTdGFja1BvaW50ZXIuY3BwCiAgICAgU3RhY2tTdGF0cy5jcHAK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL1NtYWxsUHRyU2V0LmNwcCBiL1NvdXJjZS9XVEYv
d3RmL1NtYWxsU2V0LmNwcApzaW1pbGFyaXR5IGluZGV4IDk0JQpyZW5hbWUgZnJvbSBTb3VyY2Uv
V1RGL3d0Zi9TbWFsbFB0clNldC5jcHAKcmVuYW1lIHRvIFNvdXJjZS9XVEYvd3RmL1NtYWxsU2V0
LmNwcAppbmRleCA0MjA0OGU3ZThhMjMuLjJkMmY0MTViMmM3YSAxMDA2NDQKLS0tIGEvU291cmNl
L1dURi93dGYvU21hbGxQdHJTZXQuY3BwCisrKyBiL1NvdXJjZS9XVEYvd3RmL1NtYWxsU2V0LmNw
cApAQCAtMjQsMTIgKzI0LDEyIEBACiAgKi8KIAogI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1
ZGUgPHd0Zi9TbWFsbFB0clNldC5oPgorI2luY2x1ZGUgPHd0Zi9TbWFsbFNldC5oPgogCiAjaW5j
bHVkZSA8d3RmL05ldmVyRGVzdHJveWVkLmg+CiAKIG5hbWVzcGFjZSBXVEYgewogCi1ERUZJTkVf
QUxMT0NBVE9SX1dJVEhfSEVBUF9JREVOVElGSUVSKFNtYWxsUHRyU2V0KTsKK0RFRklORV9BTExP
Q0FUT1JfV0lUSF9IRUFQX0lERU5USUZJRVIoU21hbGxTZXQpOwogCiB9IC8vIG5hbWVzcGFjZSBX
VEYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL1NtYWxsUHRyU2V0LmggYi9Tb3VyY2UvV1RG
L3d0Zi9TbWFsbFNldC5oCnNpbWlsYXJpdHkgaW5kZXggNTAlCnJlbmFtZSBmcm9tIFNvdXJjZS9X
VEYvd3RmL1NtYWxsUHRyU2V0LmgKcmVuYW1lIHRvIFNvdXJjZS9XVEYvd3RmL1NtYWxsU2V0LmgK
aW5kZXggNGM2ZTQ2MTk2ZDI5Li4yNDc0MWYxMmMzNWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYv
d3RmL1NtYWxsUHRyU2V0LmgKKysrIGIvU291cmNlL1dURi93dGYvU21hbGxTZXQuaApAQCAtMSw1
ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgUmlnaHRz
IFJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE2LTIwMjEgQXBwbGUgSW5jLiBBbGwgUmln
aHRzIFJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zMiw2NSAr
MzIsNzcgQEAKIAogbmFtZXNwYWNlIFdURiB7CiAKLURFQ0xBUkVfQUxMT0NBVE9SX1dJVEhfSEVB
UF9JREVOVElGSUVSKFNtYWxsUHRyU2V0KTsKK0RFQ0xBUkVfQUxMT0NBVE9SX1dJVEhfSEVBUF9J
REVOVElGSUVSKFNtYWxsU2V0KTsKIAotdGVtcGxhdGU8dHlwZW5hbWUgUHRyVHlwZSwgdW5zaWdu
ZWQgU21hbGxBcnJheVNpemUgPSA4PgotY2xhc3MgU21hbGxQdHJTZXQgeworLy8gRnVuY3Rpb25h
bGx5LCB0aGlzIGNsYXNzIGlzIHZlcnkgc2ltaWxhciB0byBWYXJpYW50PFZlY3RvcjxULCBTbWFs
bEFycmF5U2l6ZT4sIEhhc2hTZXQ8VD4+CisvLyBJdCBpcyBvcHRpbWl6ZWQgcHJpbWFyaWx5IGZv
ciBzcGFjZSwgYnV0IGlzIGFsc28gcXVpdGUgZmFzdAorLy8gSXRzIG1haW4gbGltaXRhdGlvbiBp
cyB0aGF0IGl0IGhhcyBubyB3YXkgdG8gcmVtb3ZlIGVsZW1lbnRzIG9uY2UgdGhleSBoYXZlIGJl
ZW4gYWRkZWQgdG8gaXQKKy8vIEFsc28sIGluc3RlYWQgb2YgYmVpbmcgZnVsbHkgcGFyYW1ldGVy
aXplZCBieSBhIEhhc2hUcmFpdCBwYXJhbWV0ZXIsIGl0IGFsd2F5cyB1c2VzIC0xIChhbGwgb25l
cykgYXMgaXRzIGVtcHR5IHZhbHVlCisvLyBSZWxhdGVkbHksIGl0IGNhbiBvbmx5IHN0b3JlIG9i
amVjdHMgb2YgdXAgdG8gNjQgYml0IHNpemUgKGJ1dCB0aGF0IHBhcnRpY3VsYXIgbGltaXRhdGlv
biBzaG91bGQgYmUgZmFpcmx5IGVhc3kgdG8gbGlmdCBpZiBuZWVkZWQpCisvLyBVc2UgaXQgd2hl
bmV2ZXIgeW91IG5lZWQgdG8gc3RvcmUgYW4gdW5ib3VuZGVkIGJ1dCBwcm9iYWJseSBzbWFsbCBu
dW1iZXIgb2YgdW5zaWduZWQgaW50ZWdlcnMgb3IgcG9pbnRlcnMuCit0ZW1wbGF0ZTx0eXBlbmFt
ZSBULCB0eXBlbmFtZSBIYXNoID0gUHRySGFzaEJhc2U8VCwgZmFsc2UgLyogaXNTbWFydFB0ciAq
Lz4sIHVuc2lnbmVkIFNtYWxsQXJyYXlTaXplID0gOD4KK2NsYXNzIFNtYWxsU2V0IHsKICAgICBX
VEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKLSAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShTbWFsbFB0
clNldCk7Ci0gICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX3RyaXZpYWxseV9kZXN0cnVjdGlibGU8
UHRyVHlwZT46OnZhbHVlLCAiV2UgY3VycmVudGx5IGRvbid0IHN1cHBvcnQgbm9uLXRyaXZpYWxs
eSBkZXN0cnVjdGlibGUgcG9pbnRlciB0eXBlcy4iKTsKLSAgICBzdGF0aWNfYXNzZXJ0KHNpemVv
ZihQdHJUeXBlKSA9PSBzaXplb2Yodm9pZCopLCAiT25seSBzdXBwb3J0IHBvaW50ZXIgc2l6ZWQg
dGhpbmdzLiIpOworICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKFNtYWxsU2V0KTsKKyAgICBzdGF0
aWNfYXNzZXJ0KHN0ZDo6aXNfdHJpdmlhbGx5X2Rlc3RydWN0aWJsZTxUPjo6dmFsdWUsICJXZSBj
dXJyZW50bHkgZG9uJ3Qgc3VwcG9ydCBub24tdHJpdmlhbGx5IGRlc3RydWN0aWJsZSB0eXBlcy4i
KTsKICAgICBzdGF0aWNfYXNzZXJ0KCEoU21hbGxBcnJheVNpemUgJiAoU21hbGxBcnJheVNpemUg
LSAxKSksICJJbmxpbmUgc2l6ZSBtdXN0IGJlIGEgcG93ZXIgb2YgdHdvLiIpOworICAgIHN0YXRp
Y19hc3NlcnQoc2l6ZW9mKFQqKSA8PSBTbWFsbEFycmF5U2l6ZSAqIHNpemVvZihUKSwgIlRoaXMg
Y2xhc3MgaGFzIG5vdCBiZWVuIHRlc3RlZCBmb3IgbV9pbmxpbmUuYnVmZmVyIGxhcmdlciB0aGFu
IG1faW5saW5lLnNtYWxsU3RvcmFnZSIpOwogCi1wdWJsaWM6IAotICAgIFNtYWxsUHRyU2V0KCkK
K3B1YmxpYzoKKyAgICBTbWFsbFNldCgpCisgICAgICAgIDogbV9pbmxpbmUoKQogICAgIHsKICAg
ICAgICAgaW5pdGlhbGl6ZSgpOwogICAgIH0KIAotICAgIC8vIFdlIHRha2UgY2FyZSB0byBoYXZl
IFNtYWxsUHRyU2V0IGhhdmUgcGFydGlhbCBtb3ZlIHNlbWFudGljcyBhbGxvd2FibGUgdGhyb3Vn
aAorICAgIC8vIFdlIHRha2UgY2FyZSB0byBoYXZlIFNtYWxsU2V0IGhhdmUgcGFydGlhbCBtb3Zl
IHNlbWFudGljcyBhbGxvd2FibGUgdGhyb3VnaAogICAgIC8vIG1lbWNweS4gSXQncyBwYXJ0aWFs
IG1vdmUgc2VtYW50aWNzIGJlY2F1c2Ugb3VyIGRlc3RydWN0b3Igc2hvdWxkIG5vdCBiZSBjYWxs
ZWQKICAgICAvLyBvbiB0aGUgU21hbGxQdHJPYmplY3QgaW4gdGhlIG9sZCBtZW1vcnkgd2Ugd2Vy
ZSBtb3ZlZCBmcm9tIChvdGhlcndpc2UsIHdlIG1pZ2h0IGZyZWUgbV9idWZmZXIgdHdpY2UpCiAg
ICAgLy8gdW5sZXNzIHRoYXQgb2xkIG1lbW9yeSBpcyByZXNldCB0byBiZSBpc1NtYWxsKCkuIFNl
ZSBtb3ZlIGNvbnN0cnVjdG9yIGJlbG93LgogICAgIC8vIFRvIG1haW50YWluIHRoZXNlIHNlbWFu
dGljcywgd2UgZGV0ZXJtaW5lIGlmIHdlJ3JlIHNtYWxsIGJ5IGNoZWNraW5nIG91ciBzaXplCiAg
ICAgLy8gYW5kIG5vdCBvdXIgbV9idWZmZXIgcG9pbnRlci4gQW5kIHdoZW4gd2UncmUgc21hbGws
IHdlIGRvbid0IGRvIG9wZXJhdGlvbnMgb24KICAgICAvLyBtX2J1ZmZlciwgaW5zdGVhZCwgd2Ug
cGVyZm9ybSBvcGVyYXRpb25zIG9uIG1fc21hbGxTdG9yYWdlIGRpcmVjdGx5LiBUaGUgcmVhc29u
IHdlIHdhbnQKLSAgICAvLyB0aGVzZSBzZW1hbnRpY3MgaXMgdGhhdCBpdCdzIGJlbmVmaWNpYWwg
dG8gaGF2ZSBhIFZlY3RvciB0aGF0IGNvbnRhaW5zIFNtYWxsUHRyU2V0Ci0gICAgLy8gKG9yIGFu
IG9iamVjdCB3aXRoIFNtYWxsUHRyU2V0IGFzIGEgZmllbGQpIGJlIGFsbG93ZWQgdG8gdXNlIG1l
bWNweSBmb3IgaXRzIG1vdmUgb3BlcmF0aW9uLgorICAgIC8vIHRoZXNlIHNlbWFudGljcyBpcyB0
aGF0IGl0J3MgYmVuZWZpY2lhbCB0byBoYXZlIGEgVmVjdG9yIHRoYXQgY29udGFpbnMgU21hbGxT
ZXQKKyAgICAvLyAob3IgYW4gb2JqZWN0IHdpdGggU21hbGxTZXQgYXMgYSBmaWVsZCkgYmUgYWxs
b3dlZCB0byB1c2UgbWVtY3B5IGZvciBpdHMgbW92ZSBvcGVyYXRpb24uCiAKLSAgICBTbWFsbFB0
clNldChTbWFsbFB0clNldCYmIG90aGVyKQorICAgIFNtYWxsU2V0KFNtYWxsU2V0JiYgb3RoZXIp
CiAgICAgewotICAgICAgICBtZW1jcHkodGhpcywgJm90aGVyLCBzaXplb2YoU21hbGxQdHJTZXQp
KTsKKyAgICAgICAgbWVtY3B5KHRoaXMsICZvdGhlciwgc2l6ZW9mKFNtYWxsU2V0KSk7CiAgICAg
ICAgIG90aGVyLmluaXRpYWxpemUoKTsKICAgICB9CiAKLSAgICBTbWFsbFB0clNldCYgb3BlcmF0
b3I9KFNtYWxsUHRyU2V0JiYgb3RoZXIpCisgICAgU21hbGxTZXQmIG9wZXJhdG9yPShTbWFsbFNl
dCYmIG90aGVyKQogICAgIHsKLSAgICAgICAgdGhpcy0+flNtYWxsUHRyU2V0KCk7Ci0gICAgICAg
IG5ldyAodGhpcykgU21hbGxQdHJTZXQoV1RGTW92ZShvdGhlcikpOworICAgICAgICB0aGlzLT5+
U21hbGxTZXQoKTsKKyAgICAgICAgbmV3ICh0aGlzKSBTbWFsbFNldChXVEZNb3ZlKG90aGVyKSk7
CiAgICAgICAgIHJldHVybiAqdGhpczsKICAgICB9CiAKLSAgICB+U21hbGxQdHJTZXQoKQorICAg
IH5TbWFsbFNldCgpCiAgICAgewogICAgICAgICBpZiAoIWlzU21hbGwoKSkKLSAgICAgICAgICAg
IFNtYWxsUHRyU2V0TWFsbG9jOjpmcmVlKG1fYnVmZmVyKTsKKyAgICAgICAgICAgIFNtYWxsU2V0
TWFsbG9jOjpmcmVlKG1faW5saW5lLmJ1ZmZlcik7CiAgICAgfQogCi0gICAgaW5saW5lIHZvaWQg
YWRkKFB0clR5cGUgcHRyKQorICAgIC8vIFdlIGNvdWxkIGVhc2lseSBpbmNsdWRlIGFuIGl0ZXJh
dG9yIGluIHRoaXMgdG8gZnVsbHkgbWF0Y2ggdGhlIEhhc2hTZXQgaW50ZXJmYWNlLCBidXQgY3Vy
cmVudGx5IG5vbmUgb2Ygb3VyIGNsaWVudHMgcmVxdWlyZSBpdC4KKyAgICBzdHJ1Y3QgQWRkUmVz
dWx0IHsKKyAgICAgICAgYm9vbCBpc05ld0VudHJ5OworICAgIH07CisKKyAgICBpbmxpbmUgQWRk
UmVzdWx0IGFkZChUIHZhbHVlKQogICAgIHsKLSAgICAgICAgQVNTRVJUKGlzVmFsaWRFbnRyeShw
dHIpKTsKKyAgICAgICAgQVNTRVJUKGlzVmFsaWRFbnRyeSh2YWx1ZSkpOwogCiAgICAgICAgIGlm
IChpc1NtYWxsKCkpIHsKICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX3Np
emU7IGkrKykgewotICAgICAgICAgICAgICAgIGlmIChtX3NtYWxsU3RvcmFnZVtpXSA9PSBwdHIp
Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICBpZiAobV9pbmxp
bmUuc21hbGxTdG9yYWdlW2ldID09IHZhbHVlKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4g
eyBmYWxzZSB9OwogICAgICAgICAgICAgfQogCiAgICAgICAgICAgICBpZiAobV9zaXplIDwgU21h
bGxBcnJheVNpemUpIHsKLSAgICAgICAgICAgICAgICBtX3NtYWxsU3RvcmFnZVttX3NpemVdID0g
cHRyOworICAgICAgICAgICAgICAgIG1faW5saW5lLnNtYWxsU3RvcmFnZVttX3NpemVdID0gdmFs
dWU7CiAgICAgICAgICAgICAgICAgKyttX3NpemU7Ci0gICAgICAgICAgICAgICAgcmV0dXJuOwor
ICAgICAgICAgICAgICAgIHJldHVybiB7IHRydWUgfTsKICAgICAgICAgICAgIH0KIAogICAgICAg
ICAgICAgZ3JvdyhzdGQ6Om1heCg2NHUsIFNtYWxsQXJyYXlTaXplICogMikpOwpAQCAtMTAzLDI2
ICsxMTUsMjkgQEAgcHVibGljOgogICAgICAgICAgICAgQVNTRVJUKCEobV9jYXBhY2l0eSAmICht
X2NhcGFjaXR5IC0gMSkpKTsKICAgICAgICAgfQogCi0gICAgICAgIHZvaWQqKiBidWNrZXQgPSB0
aGlzLT5idWNrZXQocHRyKTsKLSAgICAgICAgaWYgKCpidWNrZXQgIT0gcHRyKSB7Ci0gICAgICAg
ICAgICAqYnVja2V0ID0gcHRyOworICAgICAgICBUKiBidWNrZXQgPSB0aGlzLT5idWNrZXQodmFs
dWUpOworICAgICAgICBpZiAoKmJ1Y2tldCAhPSB2YWx1ZSkgeworICAgICAgICAgICAgKmJ1Y2tl
dCA9IHZhbHVlOwogICAgICAgICAgICAgKyttX3NpemU7CisgICAgICAgICAgICByZXR1cm4geyB0
cnVlIH07CiAgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHsgZmFsc2UgfTsKICAgICB9CiAKLSAg
ICBpbmxpbmUgYm9vbCBjb250YWlucyhQdHJUeXBlIHB0cikgY29uc3QKKyAgICBpbmxpbmUgYm9v
bCBjb250YWlucyhUIHZhbHVlKSBjb25zdAogICAgIHsKLSAgICAgICAgQVNTRVJUKGlzVmFsaWRF
bnRyeShwdHIpKTsKKyAgICAgICAgQVNTRVJUKGlzVmFsaWRFbnRyeSh2YWx1ZSkpOwogICAgICAg
ICBpZiAoaXNTbWFsbCgpKSB7Ci0gICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwg
bV9zaXplOyBpKyspIHsgLy8gV2Ugb25seSBuZWVkIHRvIHNlYXJjaCB1cCB0byBtX3NpemUgYmVj
YXVzZSB3ZSBzdG9yZSB0aGluZ3MgbGluZWFybHkgaW5zaWRlIG1fc21hbGxTdG9yYWdlLgotICAg
ICAgICAgICAgICAgIGlmIChtX3NtYWxsU3RvcmFnZVtpXSA9PSBwdHIpCisgICAgICAgICAgICAv
LyBXZSBvbmx5IG5lZWQgdG8gc2VhcmNoIHVwIHRvIG1fc2l6ZSBiZWNhdXNlIHdlIHN0b3JlIHRo
aW5ncyBsaW5lYXJseSBpbnNpZGUgbV9zbWFsbFN0b3JhZ2UuCisgICAgICAgICAgICBmb3IgKHVu
c2lnbmVkIGkgPSAwOyBpIDwgbV9zaXplOyBpKyspIHsKKyAgICAgICAgICAgICAgICBpZiAobV9p
bmxpbmUuc21hbGxTdG9yYWdlW2ldID09IHZhbHVlKQogICAgICAgICAgICAgICAgICAgICByZXR1
cm4gdHJ1ZTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAg
ICAgfQogCi0gICAgICAgIHZvaWQqKiBidWNrZXQgPSB0aGlzLT5idWNrZXQocHRyKTsKLSAgICAg
ICAgcmV0dXJuICpidWNrZXQgPT0gcHRyOworICAgICAgICBUKiBidWNrZXQgPSB0aGlzLT5idWNr
ZXQodmFsdWUpOworICAgICAgICByZXR1cm4gKmJ1Y2tldCA9PSB2YWx1ZTsKICAgICB9CiAKICAg
ICBjbGFzcyBpdGVyYXRvciB7CkBAIC0xMzcsMTUgKzE1MiwxNSBAQCBwdWJsaWM6CiAgICAgICAg
ICAgICByZXR1cm4gKnRoaXM7CiAgICAgICAgIH0KICAgICAgICAgCi0gICAgICAgIFB0clR5cGUg
b3BlcmF0b3IqKCkgY29uc3QgeyBBU1NFUlQobV9pbmRleCA8IG1fY2FwYWNpdHkpOyByZXR1cm4g
c3RhdGljX2Nhc3Q8UHRyVHlwZT4obV9idWZmZXJbbV9pbmRleF0pOyB9CisgICAgICAgIFQgb3Bl
cmF0b3IqKCkgY29uc3QgeyBBU1NFUlQobV9pbmRleCA8IG1fY2FwYWNpdHkpOyByZXR1cm4gc3Rh
dGljX2Nhc3Q8VD4obV9idWZmZXJbbV9pbmRleF0pOyB9CiAgICAgICAgIGJvb2wgb3BlcmF0b3I9
PShjb25zdCBpdGVyYXRvciYgb3RoZXIpIGNvbnN0IHsgQVNTRVJUKG1fYnVmZmVyID09IG90aGVy
Lm1fYnVmZmVyKTsgcmV0dXJuIG1faW5kZXggPT0gb3RoZXIubV9pbmRleDsgfQogICAgICAgICBi
b29sIG9wZXJhdG9yIT0oY29uc3QgaXRlcmF0b3ImIG90aGVyKSBjb25zdCB7IEFTU0VSVChtX2J1
ZmZlciA9PSBvdGhlci5tX2J1ZmZlcik7IHJldHVybiAhKCp0aGlzID09IG90aGVyKTsgfQogCiAg
ICAgcHJpdmF0ZToKLSAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVSwgdW5zaWduZWQgUz4gZnJp
ZW5kIGNsYXNzIFdURjo6U21hbGxQdHJTZXQ7CisgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIFUs
IHR5cGVuYW1lIEgsIHVuc2lnbmVkIFM+IGZyaWVuZCBjbGFzcyBXVEY6OlNtYWxsU2V0OwogICAg
ICAgICB1bnNpZ25lZCBtX2luZGV4OwogICAgICAgICB1bnNpZ25lZCBtX2NhcGFjaXR5OwotICAg
ICAgICB2b2lkKiogbV9idWZmZXI7CisgICAgICAgIFQqIG1fYnVmZmVyOwogICAgIH07CiAKICAg
ICBpdGVyYXRvciBiZWdpbigpIGNvbnN0CkBAIC0xNTQsOSArMTY5LDkgQEAgcHVibGljOgogICAg
ICAgICBpdC5tX2luZGV4ID0gc3RkOjpudW1lcmljX2xpbWl0czx1bnNpZ25lZD46Om1heCgpOwog
ICAgICAgICBpdC5tX2NhcGFjaXR5ID0gbV9jYXBhY2l0eTsKICAgICAgICAgaWYgKGlzU21hbGwo
KSkKLSAgICAgICAgICAgIGl0Lm1fYnVmZmVyID0gY29uc3RfY2FzdDx2b2lkKio+KG1fc21hbGxT
dG9yYWdlKTsKKyAgICAgICAgICAgIGl0Lm1fYnVmZmVyID0gY29uc3RfY2FzdDxUKj4obV9pbmxp
bmUuc21hbGxTdG9yYWdlKTsKICAgICAgICAgZWxzZQotICAgICAgICAgICAgaXQubV9idWZmZXIg
PSBtX2J1ZmZlcjsKKyAgICAgICAgICAgIGl0Lm1fYnVmZmVyID0gbV9pbmxpbmUuYnVmZmVyOwog
CiAgICAgICAgICsraXQ7CiAKQEAgLTE2OSwyNCArMTg0LDI4IEBAIHB1YmxpYzoKICAgICAgICAg
aXQubV9pbmRleCA9IG1fY2FwYWNpdHk7CiAgICAgICAgIGl0Lm1fY2FwYWNpdHkgPSBtX2NhcGFj
aXR5OwogICAgICAgICBpZiAoaXNTbWFsbCgpKQotICAgICAgICAgICAgaXQubV9idWZmZXIgPSBj
b25zdF9jYXN0PHZvaWQqKj4obV9zbWFsbFN0b3JhZ2UpOworICAgICAgICAgICAgaXQubV9idWZm
ZXIgPSBjb25zdF9jYXN0PFQqPihtX2lubGluZS5zbWFsbFN0b3JhZ2UpOwogICAgICAgICBlbHNl
Ci0gICAgICAgICAgICBpdC5tX2J1ZmZlciA9IG1fYnVmZmVyOworICAgICAgICAgICAgaXQubV9i
dWZmZXIgPSBtX2lubGluZS5idWZmZXI7CiAKICAgICAgICAgcmV0dXJuIGl0OwogICAgIH0KIAog
ICAgIGlubGluZSB1bnNpZ25lZCBzaXplKCkgY29uc3QgeyByZXR1cm4gbV9zaXplOyB9CiAKKyAg
ICBpbmxpbmUgYm9vbCBpc0VtcHR5KCkgY29uc3QgeyByZXR1cm4gIXNpemUoKTsgfQorCiBwcml2
YXRlOgotICAgIGNvbnN0ZXhwciBzdGF0aWMgdm9pZCogZW1wdHlWYWx1ZSgpCisgICAgY29uc3Rl
eHByIHN0YXRpYyBUIGVtcHR5VmFsdWUoKQogICAgIHsKLSAgICAgICAgcmV0dXJuIGJpdHdpc2Vf
Y2FzdDx2b2lkKj4oc3RkOjpudW1lcmljX2xpbWl0czx1aW50cHRyX3Q+OjptYXgoKSk7CisgICAg
ICAgIGlmIGNvbnN0ZXhwciAoc3RkOjppc19wb2ludGVyPFQ+Ojp2YWx1ZSkKKyAgICAgICAgICAg
IHJldHVybiBzdGF0aWNfY2FzdDxUPihiaXR3aXNlX2Nhc3Q8dm9pZCo+KHN0ZDo6bnVtZXJpY19s
aW1pdHM8dWludHB0cl90Pjo6bWF4KCkpKTsKKyAgICAgICAgcmV0dXJuIHN0ZDo6bnVtZXJpY19s
aW1pdHM8VD46Om1heCgpOwogICAgIH0KIAotICAgIGJvb2wgaXNWYWxpZEVudHJ5KGNvbnN0IFB0
clR5cGUgcHRyKSBjb25zdAorICAgIGJvb2wgaXNWYWxpZEVudHJ5KGNvbnN0IFQgdmFsdWUpIGNv
bnN0CiAgICAgewotICAgICAgICByZXR1cm4gcHRyICE9IGVtcHR5VmFsdWUoKTsKKyAgICAgICAg
cmV0dXJuIHZhbHVlICE9IGVtcHR5VmFsdWUoKTsKICAgICB9CiAKICAgICBpbmxpbmUgYm9vbCBp
c1NtYWxsKCkgY29uc3QKQEAgLTE5Nyw0MyArMjE2LDY0IEBAIHByaXZhdGU6CiAgICAgaW5saW5l
IHZvaWQgaW5pdGlhbGl6ZSgpCiAgICAgewogICAgICAgICBtX3NpemUgPSAwOwotICAgICAgICBt
X2J1ZmZlciA9IG51bGxwdHI7CiAgICAgICAgIG1fY2FwYWNpdHkgPSBTbWFsbEFycmF5U2l6ZTsK
LSAgICAgICAgbWVtc2V0KG1fc21hbGxTdG9yYWdlLCAtMSwgc2l6ZW9mKHZvaWQqKSAqIFNtYWxs
QXJyYXlTaXplKTsKKyAgICAgICAgbWVtc2V0KG1faW5saW5lLnNtYWxsU3RvcmFnZSwgLTEsIHNp
emVvZihUKSAqIFNtYWxsQXJyYXlTaXplKTsKICAgICAgICAgQVNTRVJUKGlzU21hbGwoKSk7CiAg
ICAgfQogCiAgICAgaW5saW5lIHZvaWQgZ3Jvdyh1bnNpZ25lZCBzaXplKQogICAgIHsKLSAgICAg
ICAgQVNTRVJUKHN0YXRpY19jYXN0PGludDMyX3Q+KGJpdHdpc2VfY2FzdDxpbnRwdHJfdD4oZW1w
dHlWYWx1ZSgpKSkgPT0gLTEpOworICAgICAgICAvLyBXZSBtZW1zZXQgdGhlIG5ldyBidWZmZXIg
d2l0aCAtMSwgc28gZm9yIGNvbnNpc3RlbmN5IGVtcHR5VmFsdWUoKSBtdXN0IHJldHVybiBzb21l
dGhpbmcgd2hpY2ggaXMgYWxsIDFzLgorI2lmICFkZWZpbmVkKE5ERUJVRykKKyAgICAgICAgaWYg
Y29uc3RleHByIChzdGQ6OmlzX3BvaW50ZXI8VD46OnZhbHVlKQorICAgICAgICAgICAgQVNTRVJU
KGJpdHdpc2VfY2FzdDxpbnRwdHJfdD4oZW1wdHlWYWx1ZSgpKSA9PSAtMWxsKTsKKyAgICAgICAg
ZWxzZSBpZiBjb25zdGV4cHIgKHNpemVvZihUKSA9PSA4KQorICAgICAgICAgICAgQVNTRVJUKGJp
dHdpc2VfY2FzdDxpbnQ2NF90PihlbXB0eVZhbHVlKCkpID09IC0xbGwpOworICAgICAgICBlbHNl
IGlmIGNvbnN0ZXhwciAoc2l6ZW9mKFQpID09IDQpCisgICAgICAgICAgICBBU1NFUlQoYml0d2lz
ZV9jYXN0PGludDMyX3Q+KGVtcHR5VmFsdWUoKSkgPT0gLTEpOworICAgICAgICBlbHNlIGlmIGNv
bnN0ZXhwciAoc2l6ZW9mKFQpID09IDIpCisgICAgICAgICAgICBBU1NFUlQoYml0d2lzZV9jYXN0
PGludDE2X3Q+KGVtcHR5VmFsdWUoKSkgPT0gLTEpOworICAgICAgICBlbHNlIGlmIGNvbnN0ZXhw
ciAoc2l6ZW9mKFQpID09IDEpCisgICAgICAgICAgICBBU1NFUlQoYml0d2lzZV9jYXN0PGludDhf
dD4oZW1wdHlWYWx1ZSgpKSA9PSAtMSk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIFJFTEVB
U0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisjZW5kaWYKIAotICAgICAgICBzaXplX3QgYWxsb2Nh
dGlvblNpemUgPSBzaXplb2Yodm9pZCopICogc2l6ZTsKKyAgICAgICAgc2l6ZV90IGFsbG9jYXRp
b25TaXplID0gc2l6ZW9mKFQpICogc2l6ZTsKICAgICAgICAgYm9vbCB3YXNTbWFsbCA9IGlzU21h
bGwoKTsKLSAgICAgICAgdm9pZCoqIG9sZEJ1ZmZlciA9IHdhc1NtYWxsID8gbV9zbWFsbFN0b3Jh
Z2UgOiBtX2J1ZmZlcjsKKyAgICAgICAgVCogb2xkQnVmZmVyID0gd2FzU21hbGwgPyBtX2lubGlu
ZS5zbWFsbFN0b3JhZ2UgOiBtX2lubGluZS5idWZmZXI7CiAgICAgICAgIHVuc2lnbmVkIG9sZENh
cGFjaXR5ID0gbV9jYXBhY2l0eTsKLSAgICAgICAgbV9idWZmZXIgPSBzdGF0aWNfY2FzdDx2b2lk
Kio+KFNtYWxsUHRyU2V0TWFsbG9jOjptYWxsb2MoYWxsb2NhdGlvblNpemUpKTsKLSAgICAgICAg
bWVtc2V0KG1fYnVmZmVyLCAtMSwgYWxsb2NhdGlvblNpemUpOworICAgICAgICBUKiBuZXdCdWZm
ZXIgPSBzdGF0aWNfY2FzdDxUKj4oU21hbGxTZXRNYWxsb2M6Om1hbGxvYyhhbGxvY2F0aW9uU2l6
ZSkpOworICAgICAgICBtZW1zZXQobmV3QnVmZmVyLCAtMSwgYWxsb2NhdGlvblNpemUpOwogICAg
ICAgICBtX2NhcGFjaXR5ID0gc2l6ZTsKIAogICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBp
IDwgb2xkQ2FwYWNpdHk7IGkrKykgewogICAgICAgICAgICAgaWYgKG9sZEJ1ZmZlcltpXSAhPSBl
bXB0eVZhbHVlKCkpIHsKLSAgICAgICAgICAgICAgICB2b2lkKiogcHRyID0gdGhpcy0+YnVja2V0
KHN0YXRpY19jYXN0PFB0clR5cGU+KG9sZEJ1ZmZlcltpXSkpOworICAgICAgICAgICAgICAgIFQq
IHB0ciA9IGJ1Y2tldEluQnVmZmVyKG5ld0J1ZmZlciwgc3RhdGljX2Nhc3Q8VD4ob2xkQnVmZmVy
W2ldKSk7CiAgICAgICAgICAgICAgICAgKnB0ciA9IG9sZEJ1ZmZlcltpXTsKICAgICAgICAgICAg
IH0KICAgICAgICAgfQogCiAgICAgICAgIGlmICghd2FzU21hbGwpCi0gICAgICAgICAgICBTbWFs
bFB0clNldE1hbGxvYzo6ZnJlZShvbGRCdWZmZXIpOworICAgICAgICAgICAgU21hbGxTZXRNYWxs
b2M6OmZyZWUob2xkQnVmZmVyKTsKKworICAgICAgICBtX2lubGluZS5idWZmZXIgPSBuZXdCdWZm
ZXI7CiAgICAgfQogCiAKLSAgICBpbmxpbmUgdm9pZCoqIGJ1Y2tldChQdHJUeXBlIHRhcmdldCkg
Y29uc3QKKyAgICBpbmxpbmUgVCogYnVja2V0KFQgdGFyZ2V0KSBjb25zdAorICAgIHsKKyAgICAg
ICAgQVNTRVJUKCFpc1NtYWxsKCkpOworICAgICAgICByZXR1cm4gYnVja2V0SW5CdWZmZXIobV9p
bmxpbmUuYnVmZmVyLCB0YXJnZXQpOworICAgIH0KKworICAgIGlubGluZSBUKiBidWNrZXRJbkJ1
ZmZlcihUKiBidWZmZXIsIFQgdGFyZ2V0KSBjb25zdAogICAgIHsKICAgICAgICAgQVNTRVJUKCEo
bV9jYXBhY2l0eSAmIChtX2NhcGFjaXR5IC0gMSkpKTsKLSAgICAgICAgdW5zaWduZWQgYnVja2V0
ID0gUHRySGFzaEJhc2U8UHRyVHlwZSwgZmFsc2UgLyogaXNTbWFydFB0ciAqLz46Omhhc2godGFy
Z2V0KSAmIChtX2NhcGFjaXR5IC0gMSk7CisgICAgICAgIHVuc2lnbmVkIGJ1Y2tldCA9IEhhc2g6
Omhhc2godGFyZ2V0KSAmIChtX2NhcGFjaXR5IC0gMSk7CiAgICAgICAgIHVuc2lnbmVkIGluZGV4
ID0gMDsKICAgICAgICAgd2hpbGUgKHRydWUpIHsKLSAgICAgICAgICAgIHZvaWQqKiBwdHIgPSBt
X2J1ZmZlciArIGJ1Y2tldDsKKyAgICAgICAgICAgIFQqIHB0ciA9IGJ1ZmZlciArIGJ1Y2tldDsK
ICAgICAgICAgICAgIGlmICgqcHRyID09IGVtcHR5VmFsdWUoKSkKICAgICAgICAgICAgICAgICBy
ZXR1cm4gcHRyOwogICAgICAgICAgICAgaWYgKCpwdHIgPT0gdGFyZ2V0KQpAQCAtMjQ1LDEwICsy
ODUsMTMgQEAgcHJpdmF0ZToKIAogICAgIHVuc2lnbmVkIG1fc2l6ZTsKICAgICB1bnNpZ25lZCBt
X2NhcGFjaXR5OwotICAgIHZvaWQqKiBtX2J1ZmZlcjsKLSAgICB2b2lkKiBtX3NtYWxsU3RvcmFn
ZVtTbWFsbEFycmF5U2l6ZV07CisgICAgdW5pb24gVSB7CisgICAgICAgIFQqIGJ1ZmZlcjsKKyAg
ICAgICAgVCBzbWFsbFN0b3JhZ2VbU21hbGxBcnJheVNpemVdOworICAgICAgICBVKCkgeyB9Owor
ICAgIH0gbV9pbmxpbmU7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXVEYKIAotdXNpbmcgV1RGOjpT
bWFsbFB0clNldDsKK3VzaW5nIFdURjo6U21hbGxTZXQ7CmRpZmYgLS1naXQgYS9Ub29scy9DaGFu
Z2VMb2cgYi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggMjUwYjMyOTBiYjNkLi4xNmJlNGQwYjBkZjIg
MTAwNjQ0Ci0tLSBhL1Rvb2xzL0NoYW5nZUxvZworKysgYi9Ub29scy9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwxOSBAQAorMjAyMS0wNS0xNyAgUm9iaW4gTW9yaXNzZXQgIDxybW9yaXNzZXRAYXBwbGUu
Y29tPgorCisgICAgICAgIE1ha2UgQWlyQWxsb2NhdGVSZWdpc3RlcnNCeUdyYXBoQ29sb3Jpbmcg
dXNlIGxlc3MgbWVtb3J5CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0yMjU4NDgKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMpLgorCisg
ICAgICAgIHd0Zi9TbWFsbFB0clNldCAobm93IFNtYWxsU2V0KSB3YXMgY29tcGxldGVseSB1bnRl
c3RlZCwgc28gSSBqdXN0IGFkZGVkIGEgZmV3IHNpbXBsZSB0ZXN0cy4KKworICAgICAgICAqIFRl
c3RXZWJLaXRBUEkvVGVzdFdlYktpdEFQSS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAg
ICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMvV1RGL1NtYWxsU2V0LmNwcDogQWRkZWQuCisgICAg
ICAgIChUZXN0V2ViS2l0QVBJOjp0ZXN0U21hbGxTZXRPZlVuc2lnbmVkKToKKyAgICAgICAgKFRl
c3RXZWJLaXRBUEk6OnRlc3RTbWFsbFNldE9mUG9pbnRlcnMpOgorICAgICAgICAoVGVzdFdlYktp
dEFQSTo6dGVzdFZlY3RvcnNPZlNtYWxsU2V0c09mVW5zaWduZWQpOgorICAgICAgICAoVGVzdFdl
YktpdEFQSTo6VEVTVCk6CisKIDIwMjEtMDUtMTUgIEplciBOb2JsZSAgPGplci5ub2JsZUBhcHBs
ZS5jb20+CiAKICAgICAgICAgTWVkaWFTZXNzaW9uQ29vcmRpbmF0b3Igc3Vydml2ZXMgcGFnZSBy
ZWxvYWQvbmF2aWdhdGlvbgpkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0V2Vi
S2l0QVBJLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rl
c3RXZWJLaXRBUEkueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRleCA2NDZmODQyMDdhMGUu
LjJiNWNkNmUyZmIzZSAxMDA2NDQKLS0tIGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0V2ViS2l0
QVBJLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9U
ZXN0V2ViS2l0QVBJLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTIwOCw2ICsyMDgsNyBA
QAogCQkzMUU5QkRBMzI0N0Y1NzI5MDAyRTUxQTIgLyogd2ViZ2wuaHRtbCBpbiBDb3B5IFJlc291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzMUU5QkRBMjI0N0Y0REQw
MDAyRTUxQTIgLyogd2ViZ2wuaHRtbCAqLzsgfTsKIAkJMzM5NzZEODMyNERDNDc5QjAwODEyMzA0
IC8qIEluZGV4U3BhcnNlU2V0LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDMzOTc2RDgyMjREQzQ3OUIwMDgxMjMwNCAvKiBJbmRleFNwYXJzZVNldC5j
cHAgKi87IH07CiAJCTMzQkU1QUY5MTM3QjVBQUUwMDcwNTgxMyAvKiBNb3VzZU1vdmVBZnRlckNy
YXNoX0J1bmRsZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAzM0JFNUFGODEzN0I1QUFFMDA3MDU4MTMgLyogTW91c2VNb3ZlQWZ0ZXJDcmFzaF9CdW5k
bGUuY3BwICovOyB9OworCQkzM0MyQzlDMTI2NTFGNUI5MDBFNDA3RjYgLyogU21hbGxTZXQuY3Bw
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMzNDMkM5QzAy
NjUxRjVCOTAwRTQwN0Y2IC8qIFNtYWxsU2V0LmNwcCAqLzsgfTsKIAkJMzNEQzg5MTIxNDE5NTVG
RTAwNzQ3RUY3IC8qIHNpbXBsZS1pZnJhbWUuaHRtbCBpbiBDb3B5IFJlc291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzM0RDODkwRTE0MTk1MzkzMDA3NDdFRjcgLyog
c2ltcGxlLWlmcmFtZS5odG1sICovOyB9OwogCQkzM0RDODkxNDE0MTk1NzlGMDA3NDdFRjcgLyog
TG9hZENhbmNlbGVkTm9TZXJ2ZXJSZWRpcmVjdENhbGxiYWNrX0J1bmRsZS5jcHAgaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzM0RDODkxMzE0MTk1NzlGMDA3
NDdFRjcgLyogTG9hZENhbmNlbGVkTm9TZXJ2ZXJSZWRpcmVjdENhbGxiYWNrX0J1bmRsZS5jcHAg
Ki87IH07CiAJCTMzRTc5RTA2MTM3QjVGRDkwMEUzMkQ5OSAvKiBtb3VzZS1tb3ZlLWxpc3RlbmVy
Lmh0bWwgaW4gQ29weSBSZXNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMzNFNzlFMDUxMzdCNUZDRTAwRTMyRDk5IC8qIG1vdXNlLW1vdmUtbGlzdGVuZXIuaHRtbCAq
LzsgfTsKQEAgLTE5OTIsNiArMTk5Myw3IEBACiAJCTMzOTc2RDgyMjREQzQ3OUIwMDgxMjMwNCAv
KiBJbmRleFNwYXJzZVNldC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGgg
PSBJbmRleFNwYXJzZVNldC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTMzQkU1
QUY0MTM3QjVBNkMwMDcwNTgxMyAvKiBNb3VzZU1vdmVBZnRlckNyYXNoLmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IE1vdXNlTW92ZUFmdGVyQ3Jhc2guY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkzM0JFNUFGODEzN0I1QUFFMDA3MDU4MTMgLyogTW91
c2VNb3ZlQWZ0ZXJDcmFzaF9CdW5kbGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBwYXRoID0gTW91c2VNb3ZlQWZ0ZXJDcmFzaF9CdW5kbGUuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQkzM0MyQzlDMDI2NTFGNUI5MDBFNDA3RjYgLyogU21hbGxTZXQuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBwYXRoID0gU21hbGxTZXQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQkzM0RDODkwRTE0MTk1MzkzMDA3NDdFRjcgLyogc2ltcGxlLWlmcmFtZS5odG1sICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gdGV4dC5odG1sOyBwYXRoID0gInNpbXBsZS1pZnJhbWUuaHRtbCI7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTMzREM4OTEwMTQxOTUzQTMwMDc0N0VGNyAvKiBMb2FkQ2FuY2Vs
ZWROb1NlcnZlclJlZGlyZWN0Q2FsbGJhY2suY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBwYXRoID0gTG9hZENhbmNlbGVkTm9TZXJ2ZXJSZWRpcmVjdENhbGxiYWNrLmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMzNEQzg5MTMxNDE5NTc5RjAwNzQ3RUY3IC8qIExv
YWRDYW5jZWxlZE5vU2VydmVyUmVkaXJlY3RDYWxsYmFja19CdW5kbGUuY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gTG9hZENhbmNlbGVkTm9TZXJ2ZXJSZWRpcmVjdENh
bGxiYWNrX0J1bmRsZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC00NDIwLDYg
KzQ0MjIsNyBAQAogCQkJCTkzM0Q2MzFCMUZDQjc2MTgwMDMyRUNENiAvKiBIYXNoZXIuY3BwICov
LAogCQkJCTBCQ0Q4MzM0MTQ4NTdDRTQwMEVBMjAwMyAvKiBIYXNoTWFwLmNwcCAqLywKIAkJCQky
NkIyREZGODE1QkRFNTk5MDA0RjY5MUQgLyogSGFzaFNldC5jcHAgKi8sCisJCQkJMzNDMkM5QzAy
NjUxRjVCOTAwRTQwN0Y2IC8qIFNtYWxsU2V0LmNwcCAqLywKIAkJCQk3QzhCRkY3MDIzQzAxMDY3
MDBDMDA5QjMgLyogSGV4TnVtYmVyLmNwcCAqLywKIAkJCQkzMzk3NkQ4MjI0REM0NzlCMDA4MTIz
MDQgLyogSW5kZXhTcGFyc2VTZXQuY3BwICovLAogCQkJCTI2NkZBRkQyMTVFNTc3NTIwMEY2MUQ1
QiAvKiBJbnRlZ2VyVG9TdHJpbmdDb252ZXJzaW9uLmNwcCAqLywKQEAgLTUxNTUsNiArNTE1OCw3
IEBACiAJCQlmaWxlcyA9ICgKIAkJCQk3QzgzREU5OTFEMEE1OTBDMDBGRUJDRjMgLyogQXRvbVN0
cmluZy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlGRTJEOTQ3NDI0NUVCMkY0MDBFNDgxMzUgLyog
Qml0bWFwLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTMzQzJDOUMxMjY1MUY1QjkwMEU0MDdGNiAv
KiBTbWFsbFNldC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxQURBRDE1MDFENzdBOUY2MDAyMTI1
ODYgLyogQmxvY2tQdHIubW0gaW4gU291cmNlcyAqLywKIAkJCQk3QzgzREU5QzFEMEE1OTBDMDBG
RUJDRjMgLyogQmxvb21GaWx0ZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJN0M4M0RGMTgxRDBB
NTkwQzAwRkVCQ0YzIC8qIEJveFB0ci5jcHAgaW4gU291cmNlcyAqLywKZGlmZiAtLWdpdCBhL1Rv
b2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV1RGL1NtYWxsU2V0LmNwcCBiL1Rvb2xzL1Rlc3RXZWJL
aXRBUEkvVGVzdHMvV1RGL1NtYWxsU2V0LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMDAwMDAuLjhmMWJmMDQ1ODJkMQotLS0gL2Rldi9udWxsCisrKyBiL1Rvb2xzL1Rlc3RX
ZWJLaXRBUEkvVGVzdHMvV1RGL1NtYWxsU2V0LmNwcApAQCAtMCwwICsxLDE1MyBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJ
VFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
CisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor
ICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2luY2x1ZGUgIlRlc3QuaCIKKyNpbmNsdWRl
IDx3dGYvSGFzaFNldC5oPgorI2luY2x1ZGUgPHd0Zi9TbWFsbFNldC5oPgorI2luY2x1ZGUgPHd0
Zi9WZWN0b3IuaD4KKworbmFtZXNwYWNlIFRlc3RXZWJLaXRBUEkgeworCit0ZW1wbGF0ZTx0eXBl
bmFtZSBUPgordm9pZCB0ZXN0U21hbGxTZXRPZlVuc2lnbmVkKHVuc2lnbmVkIG4pCit7CisgICAg
U21hbGxTZXQ8VCwgSW50SGFzaDxUPj4gc2V0OworCisgICAgRVhQRUNUX1RSVUUoc2V0LmlzRW1w
dHkoKSk7CisgICAgRVhQRUNUX0VRKHNldC5zaXplKCksIDB1KTsKKworICAgIGZvciAodW5zaWdu
ZWQgaSA9IDA7IGkgPCBuOyArK2kpIHsKKyAgICAgICAgYXV0byByZXN1bHQgPSBzZXQuYWRkKGkp
OworICAgICAgICBFWFBFQ1RfVFJVRShyZXN1bHQuaXNOZXdFbnRyeSk7CisgICAgfQorCisgICAg
RVhQRUNUX0ZBTFNFKHNldC5pc0VtcHR5KCkpOworICAgIEVYUEVDVF9FUShzZXQuc2l6ZSgpLCBu
KTsKKworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCAyICogbjsgaSArPSAyKSB7CisgICAg
ICAgIGF1dG8gcmVzdWx0ID0gc2V0LmFkZChpKTsKKyAgICAgICAgaWYgKGkgPCBuKQorICAgICAg
ICAgICAgRVhQRUNUX0ZBTFNFKHJlc3VsdC5pc05ld0VudHJ5KTsKKyAgICAgICAgZWxzZQorICAg
ICAgICAgICAgRVhQRUNUX1RSVUUocmVzdWx0LmlzTmV3RW50cnkpOworICAgIH0KKworICAgIEVY
UEVDVF9FUShzZXQuc2l6ZSgpLCBuICsgbiAvIDIpOworCisgICAgZm9yICh1bnNpZ25lZCBpID0g
MDsgaSA8IDIgKiBuOyArK2kpIHsKKyAgICAgICAgaWYgKGkgPCBuIHx8ICEoaSAlIDIpKQorICAg
ICAgICAgICAgRVhQRUNUX1RSVUUoc2V0LmNvbnRhaW5zKGkpKTsKKyAgICAgICAgZWxzZQorICAg
ICAgICAgICAgRVhQRUNUX0ZBTFNFKHNldC5jb250YWlucyhpKSk7CisgICAgfQorCisgICAgdW5z
aWduZWQgY291bnQgPSAwOworICAgIEhhc2hTZXQ8VD4gcmVmZXJlbmNlU2V0OworICAgIGZvciAo
dW5zaWduZWQgaSA6IHNldCkgeworICAgICAgICByZWZlcmVuY2VTZXQuYWRkKGkpOworICAgICAg
ICArK2NvdW50OworICAgIH0KKyAgICBFWFBFQ1RfRVEoY291bnQsIG4gKyBuIC8gMik7CisgICAg
RVhQRUNUX0VRKGNvdW50LCByZWZlcmVuY2VTZXQuc2l6ZSgpKTsKK30KKwordm9pZCB0ZXN0U21h
bGxTZXRPZlBvaW50ZXJzKCkKK3sKKyAgICBTbWFsbFNldDxpbnQqPiBzZXQ7CisKKyAgICBjb25z
dGV4cHIgdW5zaWduZWQgYXJyYXlTaXplID0gMjAwOworICAgIGludCBhcnJheVthcnJheVNpemVd
OworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBhcnJheVNpemU7ICsraSkKKyAgICAgICAg
YXJyYXlbaV0gPSBpOworCisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGFycmF5U2l6ZTsg
KytpKSB7CisgICAgICAgIGludCogcHRyID0gJihhcnJheVtpXSk7CisgICAgICAgIEVYUEVDVF9G
QUxTRShzZXQuY29udGFpbnMocHRyKSk7CisgICAgICAgIGF1dG8gcmVzdWx0ID0gc2V0LmFkZChw
dHIpOworICAgICAgICBFWFBFQ1RfVFJVRShyZXN1bHQuaXNOZXdFbnRyeSk7CisgICAgICAgIEVY
UEVDVF9UUlVFKHNldC5jb250YWlucyhwdHIpKTsKKyAgICAgICAgcmVzdWx0ID0gc2V0LmFkZChw
dHIpOworICAgICAgICBFWFBFQ1RfRkFMU0UocmVzdWx0LmlzTmV3RW50cnkpOworICAgIH0KKwor
ICAgIGZvciAoaW50KiBwdHIgOiBzZXQpCisgICAgICAgICsrKCpwdHIpOworCisgICAgZm9yICh1
bnNpZ25lZCBpID0gMDsgaSA8IGFycmF5U2l6ZTsgKytpKQorICAgICAgICBFWFBFQ1RfRVEoYXJy
YXlbaV0sIHN0YXRpY19jYXN0PGludD4oaSsxKSk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+
Cit2b2lkIHRlc3RWZWN0b3JzT2ZTbWFsbFNldHNPZlVuc2lnbmVkKCkKK3sKKyAgICBWZWN0b3I8
U21hbGxTZXQ8VCwgSW50SGFzaDxUPj4sIDI+IHZlY3RvcjsKKyAgICB2ZWN0b3IuYXBwZW5kKHsg
fSk7CisgICAgdmVjdG9yLmFwcGVuZCh7IH0pOworCisgICAgdmVjdG9yWzBdLmFkZCgxMDApOwor
ICAgIHZlY3RvclswXS5hZGQoMjAwKTsKKyAgICB2ZWN0b3JbMF0uYWRkKDMwMCk7CisKKyAgICBm
b3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgMjAwOyArK2kpCisgICAgICAgIHZlY3RvclsxXS5hZGQo
aSk7CisKKyAgICAvLyBOb3cgd2UgY2F1c2UgdGhlIHZlY3RvciB0byBjb3B5IGl0cyBjb250ZW50
cyB0byBhIGxhcmdlciBidWZmZXIuCisgICAgLy8gVGhpcyBzaG91bGQgY29ycnVwdCBuZWl0aGVy
IHRoZSBzbWFsbCBzZXQgdGhhdCB1c2VzIGlubGluZSBzdG9yYWdlICh2ZWN0b3JbMF0pLCBub3Ig
dGhlIG9uZSB0aGF0IHVzZXMgYW4gb3V0LW9mLWxpbmUgYnVmZmVyICh2ZWN0b3JbMV0pLgorICAg
IHZlY3Rvci5yZXNpemUoMzAwKTsKKworICAgIEVYUEVDVF9FUSh2ZWN0b3JbMF0uc2l6ZSgpLCAz
dSk7CisgICAgRVhQRUNUX1RSVUUodmVjdG9yWzBdLmNvbnRhaW5zKDEwMCkpOworICAgIEVYUEVD
VF9UUlVFKHZlY3RvclswXS5jb250YWlucygyMDApKTsKKyAgICBFWFBFQ1RfVFJVRSh2ZWN0b3Jb
MF0uY29udGFpbnMoMzAwKSk7CisgICAgRVhQRUNUX0ZBTFNFKHZlY3RvclswXS5jb250YWlucyg0
MikpOworCisgICAgRVhQRUNUX0VRKHZlY3RvclsxXS5zaXplKCksIDIwMHUpOworICAgIGZvciAo
dW5zaWduZWQgaSA9IDA7IGkgPCAyMDA7ICsraSkKKyAgICAgICAgRVhQRUNUX1RSVUUodmVjdG9y
WzFdLmNvbnRhaW5zKGkpKTsKKyAgICBFWFBFQ1RfRkFMU0UodmVjdG9yWzFdLmNvbnRhaW5zKDMw
MCkpOworfQorCitURVNUKFdURl9TbWFsbFNldCwgVGhyZWVVaW50OCkgeyB0ZXN0U21hbGxTZXRP
ZlVuc2lnbmVkPHVpbnQ4X3Q+KDMpOyB9CitURVNUKFdURl9TbWFsbFNldCwgRm91clVpbnQ4KSB7
IHRlc3RTbWFsbFNldE9mVW5zaWduZWQ8dWludDhfdD4oNCk7IH0KK1RFU1QoV1RGX1NtYWxsU2V0
LCBIdW5kcmVkVWludDgpIHsgdGVzdFNtYWxsU2V0T2ZVbnNpZ25lZDx1aW50OF90PigxMDApOyB9
CitURVNUKFdURl9TbWFsbFNldCwgVGhyZWVVaW50MTYpIHsgdGVzdFNtYWxsU2V0T2ZVbnNpZ25l
ZDx1aW50MTZfdD4oMyk7IH0KK1RFU1QoV1RGX1NtYWxsU2V0LCBGb3VyVWludDE2KSB7IHRlc3RT
bWFsbFNldE9mVW5zaWduZWQ8dWludDE2X3Q+KDQpOyB9CitURVNUKFdURl9TbWFsbFNldCwgSHVu
ZHJlZFVpbnQxNikgeyB0ZXN0U21hbGxTZXRPZlVuc2lnbmVkPHVpbnQxNl90PigxMDApOyB9CitU
RVNUKFdURl9TbWFsbFNldCwgVGhyZWVVaW50MzIpIHsgdGVzdFNtYWxsU2V0T2ZVbnNpZ25lZDx1
aW50MzJfdD4oMyk7IH0KK1RFU1QoV1RGX1NtYWxsU2V0LCBGb3VyVWludDMyKSB7IHRlc3RTbWFs
bFNldE9mVW5zaWduZWQ8dWludDMyX3Q+KDQpOyB9CitURVNUKFdURl9TbWFsbFNldCwgSHVuZHJl
ZFVpbnQzMikgeyB0ZXN0U21hbGxTZXRPZlVuc2lnbmVkPHVpbnQzMl90PigxMDApOyB9CitURVNU
KFdURl9TbWFsbFNldCwgVGhyZWVVaW50NjQpIHsgdGVzdFNtYWxsU2V0T2ZVbnNpZ25lZDx1aW50
NjRfdD4oMyk7IH0KK1RFU1QoV1RGX1NtYWxsU2V0LCBGb3VyVWludDY0KSB7IHRlc3RTbWFsbFNl
dE9mVW5zaWduZWQ8dWludDY0X3Q+KDQpOyB9CitURVNUKFdURl9TbWFsbFNldCwgSHVuZHJlZFVp
bnQ2NCkgeyB0ZXN0U21hbGxTZXRPZlVuc2lnbmVkPHVpbnQ2NF90PigxMDApOyB9CisKK1RFU1Qo
V1RGX1NtYWxsU2V0LCBQb2ludGVycykgeyB0ZXN0U21hbGxTZXRPZlBvaW50ZXJzKCk7IH0KKwor
VEVTVChXVEZfU21hbGxTZXQsIFZlY3RvclVpbnQxNikgeyB0ZXN0VmVjdG9yc09mU21hbGxTZXRz
T2ZVbnNpZ25lZDx1aW50MTZfdD4oKTsgfQorVEVTVChXVEZfU21hbGxTZXQsIFZlY3RvclVpbnQz
MikgeyB0ZXN0VmVjdG9yc09mU21hbGxTZXRzT2ZVbnNpZ25lZDx1aW50MzJfdD4oKTsgfQorVEVT
VChXVEZfU21hbGxTZXQsIFZlY3RvclVpbnQ2NCkgeyB0ZXN0VmVjdG9yc09mU21hbGxTZXRzT2ZV
bnNpZ25lZDx1aW50NjRfdD4oKTsgfQorCit9IC8vIG5hbWVzcGFjZSBUZXN0V2ViS2l0QVBJCg==
</data>
<flag name="review"
          id="449914"
          type_id="1"
          status="-"
          setter="rmorisset"
    />
    <flag name="commit-queue"
          id="449915"
          type_id="3"
          status="-"
          setter="rmorisset"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>428992</attachid>
            <date>2021-05-18 16:26:14 -0700</date>
            <delta_ts>2021-05-18 20:24:23 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>patchRegisterAllocator2</filename>
            <type>text/plain</type>
            <size>112724</size>
            <attacher name="Robin Morisset">rmorisset</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvQ2hhbmdlTG9nCmluZGV4IDlhM2NmZjQ0ZTM0NC4uMTI4YjljNjYyYTNlIDEw
MDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSw0NCBAQAorMjAyMS0wNS0xOCAgUm9i
aW4gTW9yaXNzZXQgIDxybW9yaXNzZXRAYXBwbGUuY29tPgorCisgICAgICAgIE1ha2UgQWlyQWxs
b2NhdGVSZWdpc3RlcnNCeUdyYXBoQ29sb3JpbmcgdXNlIGxlc3MgbWVtb3J5CisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMjU4NDgKKworICAgICAgICBS
ZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBXZSd2ZSBoYWQgc29tZSBqZXRz
YW0gcHJvYmxlbXMgY2F1c2VkIGJ5IHRoZSBtYWluIEFpciByZWdpc3RlciBhbGxvY2F0b3IsIHdo
aWNoIGNhdXNlZCB1cyB0byBsb3dlciBPcHRpb25zOjptYXhpbXVtVG1wc0ZvckdyYXBoQ29sb3Jp
bmcuCisgICAgICAgIEhlbmNlIHRoaXMgcGF0Y2ggdHJpZXMgdG8gaW1wcm92ZSB0aGUgbWVtb3J5
IHVzYWdlIG9mIHRoZSBhbGxvY2F0b3IuIEl0IGluY2x1ZGVzIHNldmVyYWwgY2hhbmdlczoKKyAg
ICAgICAgLSBDaGFuZ2UgdGhlIGRhdGFzdHJ1Y3R1cmUgdXNlZCBmb3IgcmVwcmVzZW50aW5nIHRo
ZSBpbnRlcmZlcmVuY2UgZ3JhcGguIEJlZm9yZSBpdCB3YXMgZWZmZWN0aXZlbHkgYSBIYXNoU2V0
PHN0ZDo6cGFpcjx1aW50MTZfdCwgdWludDE2X3Q+LiBOb3csIGl0IGlzIGVpdGhlciBhIEJpdHZl
Y3RvciAoZm9yIG4gPCA0MDAgZm9yIG5vdywgY2FuIGJlIHR3ZWFrZWQgZWFzaWx5KSwgb3IgYSBW
ZWN0b3I8TGlrZWx5RGVuc2VVbnNpZ25lZEludGVnZXJTZXQ8dWludDE2X3Q+PiBvdGhlcndpc2Uu
CisgICAgICAgIExpa2VseURlbnNlVW5zaWduZWRJbnRlZ2VyU2V0IGlzIGEgbmV3IGRhdGFzdHJ1
Y3R1cmUgaW50cm9kdWNlZCBieSB0aGlzIHBhdGNoLCBpdCBpcyBlaXRoZXIgYSBIYXNoU2V0IGlm
IHZlcnkgc3BhcnNlLCBvciBhIEJpdFZlY3RvciArIGFuIGFtb3VudCB0byBzaGlmdCBpdCBieS4K
KyAgICAgICAgVGhpcyBpcyBieSBmYXIgdGhlIGxhcmdlc3QgbWVtb3J5IHJlZHVjdGlvbiBpbiB0
aGlzIHBhdGNoLCBpdCByZWR1Y2VzIHRoZSBtYXhpbXVtIG1lbW9yeSB1c2VkIGZvciBhbiBpbnRl
cmZlcmVuY2UgZ3JhcGggaW4gdHNmLXdhc20gaW4gSmV0U3RyZWFtMiBmcm9tIDE2TUIgdG8gNzAw
a0IsIGFuZCBpbiBtcnVieS13YXNtLmFvdG9raS5kZXYgZnJvbSAyNjJNQiB0byAyME1CICh0aGUg
bGF0ZXIgb25seSBoYXBwZW4gd2hlbiB3ZSBpbmNyZWFzZSBPcHRpb25zOjptYXhpbXVtVG1wc0Zv
ckdyYXBoQ29sb3JpbmcuLiB0aGlzIGlzIHRoZSBleGFjdCBmdW5jdGlvbiB3aGljaCBjYXVzZWQg
dXMgdG8gbG93ZXIgaXQpLgorICAgICAgICBJdHMgZWZmZWN0IG9uIHNtYWxsZXIgZnVuY3Rpb25z
IGluIEpldFN0cmVhbTIgaXMgcmFyZWx5IGFzIGRyYW1hdGljIGJ1dCBhbHdheXMgYW4gaW1wcm92
ZW1lbnQsIGFuZCBpbXByb3ZlbWVudHMgYmV0d2VlbiAyeCBhbmQgNXggYXJlIGV4dHJlbWVseSBj
b21tb24gKDEweCB0byAzMHggYXJlIHNpZ25pZmljYW50bHkgcmFyZXIgYnV0IGRvIG9jY3VyKS4K
KyAgICAgICAgLSBJbiBvcmRlciB0byBlYXNpbHkgdGVzdCB0aGlzIGNoYW5nZSBhbmQgYW55IGZ1
cnRoZXIgY2hhbmdlIHRvIHRoaXMgZGF0YXN0cnVjdHVyZSwgdGhlIG9sZCBhcHByb2FjaCB3YXMg
cHJlc2VydmVkIGFzIEludGVyZmVyZW5jZUhhc2hTZXQsIGFuZCBhIHRlbXBsYXRlIHRvIHJ1biB0
d28gc3VjaCBkYXRhc3RydWN0dXJlcyBpbiBwYXJhbGxlbCwgY2hlY2tpbmcgdGhlaXIgZXF1aXZh
bGVuY2Ugd2FzIGFkZGVkOiBJbnN0cnVtZW50ZWRJbnRlcmZlcmVuY2VHcmFwaC4gUnVubmluZyB3
aXRoIGl0IGFuZCByZXBvcnRJbnRlcmZlcmVuY2VHcmFwaE1lbW9yeVVzZSBzZXQgdG8gdHJ1ZSB3
YXMgdXNlZCB0byBjb21wdXRlIHRoZSBudW1iZXJzIGdpdmVuIGFib3ZlLgorICAgICAgICAtIFRo
ZXJlIHdhcyBhbHJlYWR5IHNvbWUgdGVtcGxhdGUgcGFyYW1ldGVyIHRvIGNoYW5nZSB0aGUgc2l6
ZSBvZiB0aGUgdG1wIGluZGljZXMgZnJvbSB1bnNpZ25lZCB0byB1aW50MTZfdCBidXQgdGhlIGNv
ZGUgZmFpbGVkIHRvIGNvbXBpbGUgdW5sZXNzIGl0IHdhcyB1bnNpZ25lZC4gSSBmaXhlZCB0aGlz
LCBtYWRlIG1vcmUgY29uc2lzdGVudCB1c2Ugb2YgaXQsIGFuZCBzd2l0Y2hlZCB0byB1aW50MTZf
dCBpbiB0aGUgdmVyeSBjb21tb24gY2FzZSB0aGF0IHdlIGhhdmUgbGVzcyB0aGFuIDY1ayBUbXBz
ICh3ZSBjYW4gaGF2ZSBtb3JlIGRlc3BpdGUgdGhlIG9wdGlvbiBiZWNhdXNlIG9mIHNwaWxsaW5n
KS4gVGhpcyBoYWx2ZWQgdGhlIG1lbW9yeSB1c2FnZSBvZiB2YXJpb3VzIG90aGVyIGRhdGFzdHJ1
Y3R1cmVzIGluIHRoZSByZWdpc3RlciBhbGxvY2F0b3IKKyAgICAgICAgLSB1bnNwaWxsYWJsZVRt
cHMgd2FzIGEgSGFzaFNldDx1bnNpZ25lZD4uIFNpbmNlIGl0IGlzIG9mdGVuIHF1aXRlIGRlbnNl
IChvZnRlbiBhcm91bmQgMjAlIG9uIEpldFN0cmVhbTIpLCBJIHJlcGxhY2VkIGl0IGJ5IGEgQml0
dmVjdG9yIGluc3RlYWQKKyAgICAgICAgLSBtX2JpYXNlcyB3YXMgYSBIYXNoTWFwPEluZGV4VHlw
ZSwgSGFzaFNldDxJbmRleFR5cGU+Pi4gU2luY2UgaXQgaXMgZXh0cmVtZWx5IHJhcmUgdGhhdCB0
aGUgc2V0cyBoYXZlIG1vcmUgdGhhbiA4IGVsZW1lbnRzIChmcm9tIGxvb2tpbmcgYXQgc29tZSBp
bnN0cnVtZW50ZWQgcnVuIG9mIEpldFN0cmVhbTIpLCBJIHJlcGxhY2VkIGl0IGJ5IEhhc2hNYXA8
SW5kZXhUeXBlLCBTbWFsbFNldDxJbmRleFR5cGU+Pi4gVGhpcyBub3Qgb25seSBzaWduaWZpY2Fu
dGx5IHJlZHVjZXMgbWVtb3J5LCBidXQgbmVhcmx5IGhhbHZlcyB0aGUgdGltZSBzcGVudCBpbiBh
c3NpZ25Db2xvcnMoYXJvdW5kIDgwbXMgLT4gNDBtcyBpbiBKZXRTdHJlYW0gMikKKyAgICAgICAg
LSBVc2VDb3VudHMgd2FzIG5lZWRsZXNzbHkgZ2VuZXJhbDogaXQgaXMgb25seSB1c2VkIGJ5IHRo
ZSByZWdpc3RlciBhbGxvY2F0b3IgKGFsbCBvdGhlciByZWZlcmVuY2VzIHRvIFVzZUNvdW50cyBy
ZWZlciB0byB0aGUgY29tcGxldGVseSBkaWZmZXJlbnQgQjM6OlVzZUNvdW50cyksIHNvIHRoZXJl
IGlzIG5vIHBvaW50IGluIGl0IGNvbXB1dGluZywgYW5kIHRoZW4gc3RvcmluZyBsb3RzIG9mIGly
cmVsZXZhbnQgZGF0YS4gQSBmbG9hdCBpcyBhbHNvIG1vcmUgdGhhbiBlbm91Z2ggcHJlY2lzaW9u
IChlc3BlY2lhbGx5IHNpbmNlIGl0IGlzIHByZXR0eSBtdWNoIGFsd2F5cyAxLCAxMCwgMTAwLCBv
ciAxMDAwIGluIHByYWN0aWNl4oCmKS4gQWxzbywgc2luY2Ugd2Ugb25seSBuZWVkIGl0IGluZGV4
ZWQgYnkgVG1wcywgd2UgY2FuIHVzZSBhIFZlY3RvciB3aXRoIEFic29sdXRlVG1wTWFwcGVyIGlu
c3RlYWQgb2YgaXRzIEhhc2hNYXAuIFRoZXNlIGNoYW5nZXMgYXJlIG5vdCBqdXN0IG1lbW9yeSBz
YXZpbmdzLCB0aGV5IGFsc28gbWFrZSBzZWxlY3RTcGlsbCB3YXkgZmFzdGVyICg1NzBtcyAtPiAy
NTBtcyBvbiBteSBtYWNoaW5lIG9uIEpldFN0cmVhbTIpCisgICAgICAgIC0gV2hpbGUgSSB3YXMg
YXQgaXQsIEkgZGlkIGEgY291cGxlIG9mIG90aGVyIHR3ZWFrcyB0byB0aGUgbG9naWMgb2Ygc2Vs
ZWN0U3BpbGwuIEluIHBhcnRpY3VsYXIsIGluc3RlYWQgb2YgaGF2aW5nIHRvIGNoZWNrIGZvciBp
c0Zhc3RUbXAgZXZlcnkgdGltZSwgSSBqdXN0IHB1dCB0aGUgZmFzdCB0bXBzIGRpcmVjdGx5IGlu
IHVuc3BpbGxhYmxlVG1wcywgd2hpY2ggcHJldmVudHMgdGhlbSBmcm9tIGdldHRpbmcgYWRkZWQg
dG8gbV9zcGlsbFdvcmtsaXN0IGluIHRoZSBmaXJzdCBwbGFjZS4gVGhpcyArIGEgYml0IG9mIGNs
ZWFuLXVwIChmb3IgZXhhbXBsZSBwdXR0aW5nIGFuIGVhcmx5IGV4aXQgaW5zdGVhZCBvZiBzZXR0
aW5nIHNjb3JlIHRvIGluZmluaXR5IGluIHRoZSBjYXNlIG9mIGRlYWQgdG1wcykgcmVzdWx0ZWQg
aW4gYSBmdXJ0aGVyIHBlcmYgd2luICh0byByb3VnaGx5IDIwMG1zIHNwZW50IGluIHNlbGVjdFNw
aWxsKCkgb24gSmV0U3RyZWFtMikKKworICAgICAgICBBbGwgdG9nZXRoZXIsIHRoaXMgcGF0Y2gg
cmVkdWNlcyB0aGUgdGltZSBzcGVudCBpbiB0aGUgcmVnaXN0ZXIgYWxsb2NhdG9yIGJ5IHJvdWdo
bHkgMTUgdG8gMjAlIGluIEpldFN0cmVhbTIgKHRlc3RlZCBib3RoIHdpdGggdGhlIEJyaWdncyBh
bmQgdGhlIElSQyBhbGxvY2F0b3JzIG9uIG15IE1CUCAyMDE5KS4KKworICAgICAgICBJIGRvIG5v
dCB5ZXQgaGF2ZSBwcmVjaXNlIHBlcmZvcm1hbmNlIG51bWJlcnMgZm9yIHRoaXMgZXhhY3QgcGF0
Y2gsIGJ1dCBiZW5jaG1hcmtpbmcgYSBwcmV2aW91cyB2ZXJzaW9uIG9mIGl0ICh3aXRoIGEgbGVz
cyBvcHRpbWl6ZWQgaW50ZXJmZXJlbmNlIGdyYXBoKSByZXN1bHRlZCBpbiBzaWduaWZpY2FudCBS
QU1pZmljYXRpb24gaW1wcm92ZW1lbnRzIChhcm91bmQgMSUpLCBhbmQgbW9yZSBzdXJwcmlzaW5n
bHkgc29tZSBKZXRTdHJlYW0yIGltcHJvdmVtZW50cyBvbiB3ZWFrZXIgbWFjaGluZXMgKGUuZy4g
YW4gaVBob25lIDcgZ2FpbmVkID4gMSUpLiBJIGJlbGlldmUgdGhlc2UgZ2FpbnMgY29tZSBlaXRo
ZXIgZnJvbSBsZXNzIHRyYXNoaW5nIG9mIHRoZSBjYWNoZXMsIG9yIGxlc3MgY29udGVudGlvbiBj
YXVzZWQgYnkgdGhlIG1lbW9yeSB0cmFmZmljLgorICAgICAgICBJIHdpbGwgdHJ5IHRvIHVwZGF0
ZSB0aGUgYnVnemlsbGEgd2l0aCBtb3JlIHVwLXRvLWRhdGUgdGhvcm91Z2ggcmVzdWx0cyB3aGVu
IEkgZ2V0IHRoZW0uCisKKyAgICAgICAgVGhpcyBwYXRjaCBkb2VzIG5vdCBpbmNyZWFzZSBPcHRp
b25zOjptYXhpbXVtVG1wc0ZvckdyYXBoQ29sb3JpbmcsIEkgaW50ZW5kIHRvIGRvIHRoYXQgaW4g
YSBzZXBhcmF0ZSBwYXRjaCB0byBtYWtlIGl0IGVhc2llciB0byByZXZlcnQgaW4gY2FzZSBvZiBh
IHByb2JsZW0uCisKKyAgICAgICAgKiBiMy9CM1JlZHVjZUxvb3BTdHJlbmd0aC5jcHA6CisgICAg
ICAgIChKU0M6OkIzOjpSZWR1Y2VMb29wU3RyZW5ndGg6OnJlZHVjZUJ5dGVDb3B5TG9vcHNUb01l
bWNweSk6CisgICAgICAgICogYjMvYWlyL0FpckFsbG9jYXRlUmVnaXN0ZXJzQW5kU3RhY2tCeUxp
bmVhclNjYW4uY3BwOgorICAgICAgICAqIGIzL2Fpci9BaXJBbGxvY2F0ZVJlZ2lzdGVyc0J5R3Jh
cGhDb2xvcmluZy5jcHA6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OmFsbG9jYXRlUmVnaXN0ZXJz
QnlHcmFwaENvbG9yaW5nKToKKyAgICAgICAgKiBiMy9haXIvQWlyQ29kZS5oOgorICAgICAgICAo
SlNDOjpCMzo6QWlyOjpDb2RlOjpmb3JFYWNoRmFzdFRtcCBjb25zdCk6CisgICAgICAgICogYjMv
YWlyL0FpclVzZUNvdW50cy5oOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpVc2VDb3VudHM6OlVz
ZUNvdW50cyk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OlVzZUNvdW50czo6aXNDb25zdERlZiBj
b25zdCk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OlVzZUNvdW50czo6bnVtV2FybVVzZXNBbmRE
ZWZzIGNvbnN0KToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6VXNlQ291bnRzOjpkdW1wIGNvbnN0
KToKKyAgICAgICAgKiBwYXJzZXIvTm9kZXMuaDoKKwogMjAyMS0wNS0xOCAgU2FhbSBCYXJhdGkg
IDxzYmFyYXRpQGFwcGxlLmNvbT4KIAogICAgICAgICBBZGQgRGF0YSBDYWxsIElDcyB0aGF0IGRv
bid0IHJlcGF0Y2ggYW5kIHVzZSB0aGVtIGluIHRoZSBiYXNlbGluZSBKSVQKZGlmZiAtLWdpdCBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1JlZHVjZUxvb3BTdHJlbmd0aC5jcHAgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYjMvQjNSZWR1Y2VMb29wU3RyZW5ndGguY3BwCmluZGV4IGM3OTdj
ZDZjMjZjOC4uNGE3NDhhNzY0MzU1IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
YjMvQjNSZWR1Y2VMb29wU3RyZW5ndGguY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
My9CM1JlZHVjZUxvb3BTdHJlbmd0aC5jcHAKQEAgLTM2LDcgKzM2LDcgQEAKICNpbmNsdWRlICJC
M1BoYXNlU2NvcGUuaCIKICNpbmNsdWRlICJCM1Byb2NlZHVyZUlubGluZXMuaCIKICNpbmNsdWRl
ICJCM1ZhbHVlSW5saW5lcy5oIgotI2luY2x1ZGUgPHd0Zi9TbWFsbFB0clNldC5oPgorI2luY2x1
ZGUgPHd0Zi9TbWFsbFNldC5oPgogI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KIAogbmFtZXNwYWNl
IEpTQyB7IG5hbWVzcGFjZSBCMyB7CkBAIC0xNTksNyArMTU5LDcgQEAgcHVibGljOgogICAgICAg
ICBCYXNpY0Jsb2NrKiBsb29wRm9vdCA9IG51bGxwdHI7CiAgICAgICAgIEJhc2ljQmxvY2sqIGxv
b3BQcmVoZWFkZXIgPSBudWxscHRyOwogICAgICAgICBCYXNpY0Jsb2NrKiBsb29wUG9zdGZvb3Rl
ciA9IG51bGxwdHI7Ci0gICAgICAgIFNtYWxsUHRyU2V0PEJhc2ljQmxvY2sqPiBsb29wSW5uZXJC
bG9ja3M7CisgICAgICAgIFNtYWxsU2V0PEJhc2ljQmxvY2sqPiBsb29wSW5uZXJCbG9ja3M7CiAK
ICAgICAgICAgewogICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxvb3AtPnNp
emUoKTsgKytpKQpAQCAtMTcxLDggKzE3MSw4IEBAIHB1YmxpYzoKICAgICAgICAgICAgIGlmICgh
bG9vcElubmVyQmxvY2tzLmNvbnRhaW5zKHN0b3JlLT5vd25lcikpCiAgICAgICAgICAgICAgICAg
cmV0dXJuOwogCi0gICAgICAgICAgICBTbWFsbFB0clNldDxCYXNpY0Jsb2NrKj4gbG9vcEVudHJh
bmNlczsKLSAgICAgICAgICAgIFNtYWxsUHRyU2V0PEJhc2ljQmxvY2sqPiBsb29wRXhpdHM7Cisg
ICAgICAgICAgICBTbWFsbFNldDxCYXNpY0Jsb2NrKj4gbG9vcEVudHJhbmNlczsKKyAgICAgICAg
ICAgIFNtYWxsU2V0PEJhc2ljQmxvY2sqPiBsb29wRXhpdHM7CiAgICAgICAgICAgICBmb3IgKGF1
dG8qIGJsb2NrIDogbG9vcElubmVyQmxvY2tzKSB7CiAgICAgICAgICAgICAgICAgZm9yIChhdXRv
IHN1Y2Nlc3NvciA6IGJsb2NrLT5zdWNjZXNzb3JzKCkpIHsKICAgICAgICAgICAgICAgICAgICAg
aWYgKCFsb29wSW5uZXJCbG9ja3MuY29udGFpbnMoc3VjY2Vzc29yLmJsb2NrKCkpKQpkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJBbGxvY2F0ZVJlZ2lzdGVyc0Fu
ZFN0YWNrQnlMaW5lYXJTY2FuLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWly
QWxsb2NhdGVSZWdpc3RlcnNBbmRTdGFja0J5TGluZWFyU2Nhbi5jcHAKaW5kZXggYTAyNDUyNGEz
NmIwLi5mNzk3OWFhZjM0ODkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9h
aXIvQWlyQWxsb2NhdGVSZWdpc3RlcnNBbmRTdGFja0J5TGluZWFyU2Nhbi5jcHAKKysrIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJBbGxvY2F0ZVJlZ2lzdGVyc0FuZFN0YWNrQnlM
aW5lYXJTY2FuLmNwcApAQCAtNDksMTYgKzQ5LDExIEBAIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3Bh
Y2UgQjMgeyBuYW1lc3BhY2UgQWlyIHsKIAogbmFtZXNwYWNlIHsKIAotTk9fUkVUVVJOX0RVRV9U
T19DUkFTSCBORVZFUl9JTkxJTkUgdm9pZCBjcmFzaCgpCi17Ci0gICAgQ1JBU0goKTsKLX0KLQog
I3VuZGVmIFJFTEVBU0VfQVNTRVJUCiAjZGVmaW5lIFJFTEVBU0VfQVNTRVJUKGFzc2VydGlvbikg
ZG8geyBcCiAgICAgaWYgKCEoYXNzZXJ0aW9uKSkgeyBcCiAgICAgICAgIFdURlJlcG9ydEFzc2Vy
dGlvbkZhaWx1cmUoX19GSUxFX18sIF9fTElORV9fLCBXVEZfUFJFVFRZX0ZVTkNUSU9OLCAjYXNz
ZXJ0aW9uKTsgXAotICAgICAgICBjcmFzaCgpOyBcCisgICAgICAgIENSQVNIKCk7IFwKICAgICB9
IFwKIH0gd2hpbGUgKDApCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9h
aXIvQWlyQWxsb2NhdGVSZWdpc3RlcnNCeUdyYXBoQ29sb3JpbmcuY3BwIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2IzL2Fpci9BaXJBbGxvY2F0ZVJlZ2lzdGVyc0J5R3JhcGhDb2xvcmluZy5jcHAK
aW5kZXggZDAxNjlhZTA3NGQ3Li45ZTE2MjM3YTdiZGIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9iMy9haXIvQWlyQWxsb2NhdGVSZWdpc3RlcnNCeUdyYXBoQ29sb3JpbmcuY3Bw
CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQWxsb2NhdGVSZWdpc3RlcnNC
eUdyYXBoQ29sb3JpbmcuY3BwCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykg
MjAxNS0yMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAo
QykgMjAxNS0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzcsNiArMzcsMTEgQEAKICNpbmNsdWRlICJBaXJQaGFz
ZVNjb3BlLmgiCiAjaW5jbHVkZSAiQWlyVG1wV2lkdGhJbmxpbmVzLmgiCiAjaW5jbHVkZSAiQWly
VXNlQ291bnRzLmgiCisjaW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4KKyNpbmNsdWRlIDx3dGYvSGFz
aFRyYWl0cy5oPgorI2luY2x1ZGUgPHd0Zi9MaWtlbHlEZW5zZVVuc2lnbmVkSW50ZWdlclNldC5o
PgorI2luY2x1ZGUgPHd0Zi9TbWFsbFNldC5oPgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KIAog
bmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7IG5hbWVzcGFjZSBBaXIgewogCkBAIC00NSwx
MDUgKzUwLDI0NiBAQCBuYW1lc3BhY2Ugewogc3RhdGljIGNvbnN0ZXhwciBib29sIGRlYnVnID0g
ZmFsc2U7CiBzdGF0aWMgY29uc3RleHByIGJvb2wgdHJhY2VEZWJ1ZyA9IGZhbHNlOwogc3RhdGlj
IGNvbnN0ZXhwciBib29sIHJlcG9ydFN0YXRzID0gZmFsc2U7CitzdGF0aWMgY29uc3RleHByIGJv
b2wgcmVwb3J0SW50ZXJmZXJlbmNlR3JhcGhNZW1vcnlVc2UgPSBmYWxzZTsKIAotLy8gSW50ZXJm
ZXJlbmNlIGVkZ2VzIGFyZSBub3QgZGlyZWN0ZWQuIEFuIGVkZ2UgYmV0d2VlbiBhbnkgdHdvIFRt
cHMgaXMgcmVwcmVzZW50ZWQKLS8vIGJ5IHRoZSBjb25jYXRlbmF0ZWQgdmFsdWVzIG9mIHRoZSBz
bWFsbGVzdCBUbXAgZm9sbG93ZWQgYnkgdGhlIGJpZ2dlciBUbXAuCi0vLyBXZSBoYXZlIGEgdGVt
cGxhdGVkIHZlcnNpb24gdG8gc3VwcG9ydCAxNiBiaXQgYW5kIGEgMzIgYml0IGltcGxlbWVudGF0
aW9ucwotLy8gc2luY2UgdGhlIG51bWJlciBvZiBlbnRyaWVzIGluIGFuIGludGVyZmVyZW5jZSB0
YWJsZSBpcyBPKE5eMikuCi0vLyBJbiBtb3N0IGNhc2VzLCB3ZSB1c2UgdGhlIDE2IGJpdCBmbGF2
b3IsIHRodXMgc2F2aW5nIGhhbGYgdGhlIG1lbW9yeQotLy8gd2l0aCBhIHNpbmdsZSBpbXBsZW1l
bnRhdGlvbi4KLXRlbXBsYXRlIDx0eXBlbmFtZSBJbmRleEltcGxUeXBlLCB0eXBlbmFtZSBQYWly
U3RvcmFnZVR5cGU+Ci1jbGFzcyBJbnRlcmZlcmVuY2VFZGdlIHsKLSAgICBzdGF0aWNfYXNzZXJ0
KHNpemVvZihJbmRleEltcGxUeXBlKSAqIDIgPT0gc2l6ZW9mKFBhaXJTdG9yYWdlVHlwZSkpOwot
ICAgIGNvbnN0IHVuc2lnbmVkIFNoaWZ0QW1vdW50ID0gc2l6ZW9mKEluZGV4SW1wbFR5cGUpICog
ODsKLSAgICBjb25zdCBQYWlyU3RvcmFnZVR5cGUgSW5kZXhNYXNrID0gc3RkOjpudW1lcmljX2xp
bWl0czxJbmRleEltcGxUeXBlPjo6bWF4KCk7Cit0ZW1wbGF0ZSA8dHlwZW5hbWUgSW5kZXhUeXBl
PgorY2xhc3MgSW50ZXJmZXJlbmNlSGFzaFNldCB7CisgICAgLy8gSW50ZXJmZXJlbmNlIGVkZ2Vz
IGFyZSBub3QgZGlyZWN0ZWQuIEFuIGVkZ2UgYmV0d2VlbiBhbnkgdHdvIFRtcHMgaXMgcmVwcmVz
ZW50ZWQKKyAgICAvLyBieSB0aGUgY29uY2F0ZW5hdGVkIHZhbHVlcyAodGhyb3VnaCBUbXBNYXBw
ZXIpIG9mIHRoZSBzbWFsbGVzdCBUbXAgZm9sbG93ZWQgYnkgdGhlIGJpZ2dlciBUbXAuCisgICAg
dXNpbmcgSW50ZXJmZXJlbmNlRWRnZSA9IHN0ZDo6cGFpcjxJbmRleFR5cGUsIEluZGV4VHlwZT47
CitwdWJsaWM6CisgICAgYm9vbCBjb250YWlucyhJbmRleFR5cGUgdSwgSW5kZXhUeXBlIHYpCisg
ICAgeworICAgICAgICBpZiAodiA8IHUpCisgICAgICAgICAgICBzdGQ6OnN3YXAodSwgdik7Cisg
ICAgICAgIHJldHVybiBtX3NldC5jb250YWlucyh7IHUsIHYgfSk7CisgICAgfQogCi1wcm90ZWN0
ZWQ6Ci0gICAgdXNpbmcgSW5kZXhUeXBlID0gdW5zaWduZWQ7CisgICAgYm9vbCBhZGRBbmRSZXR1
cm5Jc05ld0VudHJ5KEluZGV4VHlwZSB1LCBJbmRleFR5cGUgdikKKyAgICB7CisgICAgICAgIGlm
ICh2IDwgdSkKKyAgICAgICAgICAgIHN0ZDo6c3dhcCh1LCB2KTsKKyAgICAgICAgcmV0dXJuIG1f
c2V0LmFkZCh7IHUsIHYgfSkuaXNOZXdFbnRyeTsKKyAgICB9CisKKyAgICB2b2lkIGNsZWFyKCkK
KyAgICB7CisgICAgICAgIG1fc2V0LmNsZWFyKCk7CisgICAgfQorCisgICAgdm9pZCBzZXRNYXhU
bXBJbmRleCh1bnNpZ25lZCBuKQorICAgIHsKKyAgICAgICAgQVNTRVJUX1VOVVNFRChuLCBuIDwg
c3RkOjpudW1lcmljX2xpbWl0czxJbmRleFR5cGU+OjptYXgoKSk7CisgICAgfQogCisgICAgdGVt
cGxhdGUgPHR5cGVuYW1lIEZ1bmN0b3I+CisgICAgdm9pZCBmb3JFYWNoKGNvbnN0IEZ1bmN0b3Im
IGZ1bmN0b3IpCisgICAgeworICAgICAgICBmb3IgKGF1dG8gZWRnZSA6IG1fc2V0KQorICAgICAg
ICAgICAgZnVuY3RvcihlZGdlKTsKKyAgICB9CisKKyAgICB1bnNpZ25lZCBzaXplKCkgY29uc3Qg
eyByZXR1cm4gbV9zZXQuc2l6ZSgpOyB9CisKKyAgICB1bnNpZ25lZCBtZW1vcnlVc2UoKSBjb25z
dCB7IHJldHVybiBtX3NldC5jYXBhY2l0eSgpICogc2l6ZW9mKEludGVyZmVyZW5jZUVkZ2UpOyB9
CisKKyAgICB2b2lkIGR1bXBNZW1vcnlVc2VJbktCKCkgY29uc3QgeyBkYXRhTG9nKG1lbW9yeVVz
ZSgpLzEwMjQpOyB9CisKK3ByaXZhdGU6CisgICAgSGFzaFNldDxJbnRlcmZlcmVuY2VFZGdlPiBt
X3NldDsKK307CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBULCB0eXBlbmFtZSBJbmRleFR5cGU+Citj
bGFzcyBJbnRlcmZlcmVuY2VWZWN0b3IgewogcHVibGljOgotICAgIHN0cnVjdCBJbnRlcmZlcmVu
Y2VFZGdlSGFzaCB7Ci0gICAgICAgIHN0YXRpYyB1bnNpZ25lZCBoYXNoKGNvbnN0IEludGVyZmVy
ZW5jZUVkZ2U8SW5kZXhJbXBsVHlwZSwgUGFpclN0b3JhZ2VUeXBlPiYga2V5KSB7IHJldHVybiBr
ZXkuaGFzaCgpOyB9Ci0gICAgICAgIHN0YXRpYyBib29sIGVxdWFsKGNvbnN0IEludGVyZmVyZW5j
ZUVkZ2U8SW5kZXhJbXBsVHlwZSwgUGFpclN0b3JhZ2VUeXBlPiYgYSwgY29uc3QgSW50ZXJmZXJl
bmNlRWRnZTxJbmRleEltcGxUeXBlLCBQYWlyU3RvcmFnZVR5cGU+JiBiKSB7IHJldHVybiBhID09
IGI7IH0KLSAgICAgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIHNhZmVUb0NvbXBhcmVUb0VtcHR5
T3JEZWxldGVkID0gdHJ1ZTsKLSAgICB9OwotICAgIHR5cGVkZWYgU2ltcGxlQ2xhc3NIYXNoVHJh
aXRzPEludGVyZmVyZW5jZUVkZ2U8SW5kZXhJbXBsVHlwZSwgUGFpclN0b3JhZ2VUeXBlPj4gSW50
ZXJmZXJlbmNlRWRnZUhhc2hUcmFpdHM7CisgICAgYm9vbCBjb250YWlucyhJbmRleFR5cGUgdSwg
SW5kZXhUeXBlIHYpCisgICAgeworICAgICAgICBpZiAodiA8IHUpCisgICAgICAgICAgICBzdGQ6
OnN3YXAodSwgdik7CisgICAgICAgIHJldHVybiBtX3ZlY3Rvclt1XS5jb250YWlucyh2KTsKKyAg
ICB9CiAKLSAgICB0eXBlZGVmIEhhc2hTZXQ8SW50ZXJmZXJlbmNlRWRnZTxJbmRleEltcGxUeXBl
LCBQYWlyU3RvcmFnZVR5cGU+LCBJbnRlcmZlcmVuY2VFZGdlSGFzaCwgSW50ZXJmZXJlbmNlRWRn
ZUhhc2hUcmFpdHM+IEludGVyZmVyZW5jZVNldDsKKyAgICBib29sIGFkZEFuZFJldHVybklzTmV3
RW50cnkoSW5kZXhUeXBlIHUsIEluZGV4VHlwZSB2KQorICAgIHsKKyAgICAgICAgaWYgKHYgPCB1
KQorICAgICAgICAgICAgc3RkOjpzd2FwKHUsIHYpOworICAgICAgICBib29sIGlzTmV3RW50cnkg
PSBtX3ZlY3Rvclt1XS5hZGQodikuaXNOZXdFbnRyeTsKKyAgICAgICAgbV9zaXplICs9IGlzTmV3
RW50cnk7CisgICAgICAgIHJldHVybiBpc05ld0VudHJ5OworICAgIH0KIAotICAgIEludGVyZmVy
ZW5jZUVkZ2UoKQorICAgIHZvaWQgY2xlYXIoKQogICAgIHsKKyAgICAgICAgbV92ZWN0b3IuY2xl
YXIoKTsKKyAgICAgICAgbV9zaXplID0gMDsKICAgICB9CiAKLSAgICBJbnRlcmZlcmVuY2VFZGdl
KEluZGV4VHlwZSBhLCBJbmRleFR5cGUgYikKKyAgICB2b2lkIHNldE1heFRtcEluZGV4KHVuc2ln
bmVkIG4pCiAgICAgewotICAgICAgICBBU1NFUlQoYSk7Ci0gICAgICAgIEFTU0VSVChiKTsKLSAg
ICAgICAgQVNTRVJUKGEgPCBzdGQ6Om51bWVyaWNfbGltaXRzPEluZGV4SW1wbFR5cGU+OjptYXgo
KSk7Ci0gICAgICAgIEFTU0VSVChiIDwgc3RkOjpudW1lcmljX2xpbWl0czxJbmRleEltcGxUeXBl
Pjo6bWF4KCkpOwotICAgICAgICBBU1NFUlRfV0lUSF9NRVNTQUdFKGEgIT0gYiwgIkEgVG1wIGNh
biBuZXZlciBpbnRlcmZlcmUgd2l0aCBpdHNlbGYuIERvaW5nIHNvIHdvdWxkIGZvcmNlIGl0IHRv
IGJlIHRoZSBzdXBlcnBvc2l0aW9uIG9mIHR3byByZWdpc3RlcnMuIik7CisgICAgICAgIEFTU0VS
VChuIDwgc3RkOjpudW1lcmljX2xpbWl0czxJbmRleFR5cGU+OjptYXgoKSk7CisgICAgICAgIG1f
dmVjdG9yLnJlc2l6ZShuKTsKKyAgICB9CiAKLSAgICAgICAgaWYgKGIgPCBhKQotICAgICAgICAg
ICAgc3RkOjpzd2FwKGEsIGIpOwotICAgICAgICBtX3ZhbHVlID0gc3RhdGljX2Nhc3Q8UGFpclN0
b3JhZ2VUeXBlPihhKSA8PCBTaGlmdEFtb3VudCB8IGI7CisgICAgdGVtcGxhdGUgPHR5cGVuYW1l
IEZ1bmN0b3I+CisgICAgdm9pZCBmb3JFYWNoKGNvbnN0IEZ1bmN0b3ImIGZ1bmN0b3IpCisgICAg
eworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV92ZWN0b3Iuc2l6ZSgpIDsgKytp
KSB7CisgICAgICAgICAgICBmb3IgKEluZGV4VHlwZSBqIDogbV92ZWN0b3JbaV0pCisgICAgICAg
ICAgICAgICAgZnVuY3Rvcih7IGksIGogfSk7CisgICAgICAgIH0KICAgICB9CiAKLSAgICBJbnRl
cmZlcmVuY2VFZGdlKGNvbnN0IEludGVyZmVyZW5jZUVkZ2U8SW5kZXhJbXBsVHlwZSwgUGFpclN0
b3JhZ2VUeXBlPiYgb3RoZXIpCi0gICAgICAgIDogbV92YWx1ZShvdGhlci5tX3ZhbHVlKQorICAg
IHVuc2lnbmVkIHNpemUoKSBjb25zdCB7IHJldHVybiBtX3NpemU7IH0KKworICAgIHVuc2lnbmVk
IG1lbW9yeVVzZSgpIGNvbnN0CiAgICAgeworICAgICAgICB1bnNpZ25lZCBtZW1vcnkgPSAwOwor
ICAgICAgICBmb3IgKGNvbnN0IFQmIHNldCA6IG1fdmVjdG9yKQorICAgICAgICAgICAgbWVtb3J5
ICs9IHNldC5tZW1vcnlVc2UoKTsKKyAgICAgICAgcmV0dXJuIG1lbW9yeTsKICAgICB9CiAKKyAg
ICB2b2lkIGR1bXBNZW1vcnlVc2VJbktCKCkgY29uc3QgeyBkYXRhTG9nKG1lbW9yeVVzZSgpLzEw
MjQpOyB9CisKK3ByaXZhdGU6CisgICAgVmVjdG9yPFQ+IG1fdmVjdG9yOworICAgIHVuc2lnbmVk
IG1fc2l6ZSB7MH07Cit9OwogCi0gICAgSW50ZXJmZXJlbmNlRWRnZShXVEY6Okhhc2hUYWJsZURl
bGV0ZWRWYWx1ZVR5cGUpCi0gICAgICAgIDogbV92YWx1ZShzdGQ6Om51bWVyaWNfbGltaXRzPFBh
aXJTdG9yYWdlVHlwZT46Om1heCgpKQordGVtcGxhdGUgPHR5cGVuYW1lIEluZGV4VHlwZT4KK2Ns
YXNzIEludGVyZmVyZW5jZUJpdFZlY3RvciB7CitwdWJsaWM6CisgICAgYm9vbCBjb250YWlucyhJ
bmRleFR5cGUgdSwgSW5kZXhUeXBlIHYpCiAgICAgeworICAgICAgICByZXR1cm4gbV9iaXRWZWN0
b3IucXVpY2tHZXQoaW5kZXgodSwgdikpOwogICAgIH0KIAotICAgIEluZGV4VHlwZSBmaXJzdCgp
IGNvbnN0CisgICAgYm9vbCBhZGRBbmRSZXR1cm5Jc05ld0VudHJ5KEluZGV4VHlwZSB1LCBJbmRl
eFR5cGUgdikKICAgICB7Ci0gICAgICAgIHJldHVybiBtX3ZhbHVlID4+IFNoaWZ0QW1vdW50ICYg
SW5kZXhNYXNrOworICAgICAgICAvLyBOb3RlOiB3ZSBjb3VsZCBkbyBvbmx5IG9uZSBxdWlja1Nl
dCwgYXQgdGhlIGNvc3Qgb2Ygb25lIGV4dHJhIGJyYW5jaCBpbiBldmVyeSBjb250YWlucy9hZGRB
bmRSZXR1cm5Jc05ld0VudHJ5ICh0byBlbmZvcmNlIHUgPCB2KQorICAgICAgICBib29sIGFscmVh
ZHlJbiA9IG1fYml0VmVjdG9yLnF1aWNrU2V0KGluZGV4KHUsIHYpKTsKKyAgICAgICAgYm9vbCBh
bHJlYWR5SW4yID0gbV9iaXRWZWN0b3IucXVpY2tTZXQoaW5kZXgodiwgdSkpOworICAgICAgICBB
U1NFUlRfVU5VU0VEKGFscmVhZHlJbjIsIGFscmVhZHlJbiA9PSBhbHJlYWR5SW4yKTsKKyAgICAg
ICAgbV9zaXplICs9ICFhbHJlYWR5SW47CisgICAgICAgIHJldHVybiAhYWxyZWFkeUluOwogICAg
IH0KIAotICAgIEluZGV4VHlwZSBzZWNvbmQoKSBjb25zdAorICAgIHZvaWQgY2xlYXIoKQogICAg
IHsKLSAgICAgICAgcmV0dXJuIG1fdmFsdWUgJiBJbmRleE1hc2s7CisgICAgICAgIG1fYml0VmVj
dG9yLmNsZWFyQWxsKCk7CisgICAgICAgIG1fc2l6ZSA9IDA7CiAgICAgfQogCi0gICAgYm9vbCBv
cGVyYXRvcj09KGNvbnN0IEludGVyZmVyZW5jZUVkZ2UmIG90aGVyKSBjb25zdAorICAgIHZvaWQg
c2V0TWF4VG1wSW5kZXgodW5zaWduZWQgbikKICAgICB7Ci0gICAgICAgIHJldHVybiBtX3ZhbHVl
ID09IG90aGVyLm1fdmFsdWU7CisgICAgICAgIEFTU0VSVChuIDwgc3RkOjpudW1lcmljX2xpbWl0
czxJbmRleFR5cGU+OjptYXgoKSk7CisgICAgICAgIG1fbnVtVG1wcyA9IG47CisgICAgICAgIG1f
Yml0VmVjdG9yLmVuc3VyZVNpemUobipuKTsKICAgICB9CiAKLSAgICBJbnRlcmZlcmVuY2VFZGdl
JiBvcGVyYXRvcj0oY29uc3QgSW50ZXJmZXJlbmNlRWRnZSYgb3RoZXIpCisgICAgdGVtcGxhdGUg
PHR5cGVuYW1lIEZ1bmN0b3I+CisgICAgdm9pZCBmb3JFYWNoKGNvbnN0IEZ1bmN0b3ImIGZ1bmN0
b3IpCiAgICAgewotICAgICAgICBtX3ZhbHVlID0gb3RoZXIubV92YWx1ZTsKLSAgICAgICAgcmV0
dXJuICp0aGlzOworICAgICAgICBmb3IgKEluZGV4VHlwZSBpID0gMDsgaSA8IG1fbnVtVG1wczsg
KytpKSB7CisgICAgICAgICAgICBmb3IgKEluZGV4VHlwZSBqID0gaSArIDE7IGogPCBtX251bVRt
cHM7ICsraikgeworICAgICAgICAgICAgICAgIGlmIChtX2JpdFZlY3Rvci5xdWlja0dldChpbmRl
eChpLCBqKSkpCisgICAgICAgICAgICAgICAgICAgIGZ1bmN0b3IoeyBpLCBqIH0pOworICAgICAg
ICAgICAgfQorICAgICAgICB9CiAgICAgfQotICAgIGJvb2wgaXNIYXNoVGFibGVEZWxldGVkVmFs
dWUoKSBjb25zdAorCisgICAgdW5zaWduZWQgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fc2l6ZTsg
fQorCisgICAgdW5zaWduZWQgbWVtb3J5VXNlKCkgY29uc3QgeyByZXR1cm4gKG1fYml0VmVjdG9y
LnNpemUoKSArIDcpID4+IDM7IH0KKworICAgIHZvaWQgZHVtcE1lbW9yeVVzZUluS0IoKSBjb25z
dCB7IGRhdGFMb2cobWVtb3J5VXNlKCkvMTAyNCk7IH0KKworcHJpdmF0ZToKKyAgICB1bnNpZ25l
ZCBpbmRleChJbmRleFR5cGUgaSwgSW5kZXhUeXBlIGopCiAgICAgewotICAgICAgICByZXR1cm4g
KnRoaXMgPT0gSW50ZXJmZXJlbmNlRWRnZShXVEY6Okhhc2hUYWJsZURlbGV0ZWRWYWx1ZSk7Cisg
ICAgICAgIHJldHVybiBpICogbV9udW1UbXBzICsgajsKICAgICB9CiAKLSAgICB1bnNpZ25lZCBo
YXNoKCkgY29uc3QKKyAgICBCaXRWZWN0b3IgbV9iaXRWZWN0b3I7CisgICAgdW5zaWduZWQgbV9z
aXplIHswfTsKKyAgICBJbmRleFR5cGUgbV9udW1UbXBzOworfTsKKworI2RlZmluZSBURVNUX09Q
VElNSVpFRF9JTlRFUkZFUkVOQ0VfR1JBUEggMAorI2lmIFRFU1RfT1BUSU1JWkVEX0lOVEVSRkVS
RU5DRV9HUkFQSAordGVtcGxhdGUgPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFUsIHR5cGVuYW1lIElu
ZGV4VHlwZT4KK2NsYXNzIEluc3RydW1lbnRlZEludGVyZmVyZW5jZUdyYXBoIHsKK3B1YmxpYzoK
KyAgICBib29sIGNvbnRhaW5zKEluZGV4VHlwZSB1LCBJbmRleFR5cGUgdikKICAgICB7Ci0gICAg
ICAgIHJldHVybiBXVEY6OkludEhhc2g8UGFpclN0b3JhZ2VUeXBlPjo6aGFzaChtX3ZhbHVlKTsK
KyAgICAgICAgYm9vbCBjb250YWluc0luQSA9IG1fc2V0QS5jb250YWlucyh1LCB2KTsKKyAgICAg
ICAgYm9vbCBjb250YWluc0luQiA9IG1fc2V0Qi5jb250YWlucyh1LCB2KTsKKyAgICAgICAgUkVM
RUFTRV9BU1NFUlQoY29udGFpbnNJbkEgPT0gY29udGFpbnNJbkIpOworICAgICAgICByZXR1cm4g
Y29udGFpbnNJbkE7CiAgICAgfQogCi0gICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNv
bnN0CisgICAgYm9vbCBhZGRBbmRSZXR1cm5Jc05ld0VudHJ5KEluZGV4VHlwZSB1LCBJbmRleFR5
cGUgdikKICAgICB7Ci0gICAgICAgIG91dC5wcmludChmaXJzdCgpLCAiPD0+Iiwgc2Vjb25kKCkp
OworICAgICAgICBib29sIGlzTmV3RW50cnlBID0gbV9zZXRBLmFkZEFuZFJldHVybklzTmV3RW50
cnkodSwgdik7CisgICAgICAgIGJvb2wgaXNOZXdFbnRyeUIgPSBtX3NldEIuYWRkQW5kUmV0dXJu
SXNOZXdFbnRyeSh1LCB2KTsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQoaXNOZXdFbnRyeUEgPT0g
aXNOZXdFbnRyeUIpOworICAgICAgICByZXR1cm4gaXNOZXdFbnRyeUE7CisgICAgfQorCisgICAg
dm9pZCBjbGVhcigpCisgICAgeworICAgICAgICBtX3NldEEuY2xlYXIoKTsKKyAgICAgICAgbV9z
ZXRCLmNsZWFyKCk7CisgICAgfQorCisgICAgdm9pZCBzZXRNYXhUbXBJbmRleCh1bnNpZ25lZCBu
KQorICAgIHsKKyAgICAgICAgbV9zZXRBLnNldE1heFRtcEluZGV4KG4pOworICAgICAgICBtX3Nl
dEIuc2V0TWF4VG1wSW5kZXgobik7CisgICAgfQorCisgICAgdGVtcGxhdGUgPHR5cGVuYW1lIEZ1
bmN0b3I+CisgICAgdm9pZCBmb3JFYWNoKGNvbnN0IEZ1bmN0b3ImIGZ1bmN0b3IpCisgICAgewor
ICAgICAgICBtX3NldEEuZm9yRWFjaChmdW5jdG9yKTsKKyAgICB9CisKKyAgICB1bnNpZ25lZCBz
aXplKCkgY29uc3QKKyAgICB7CisgICAgICAgIHVuc2lnbmVkIHNpemVBID0gbV9zZXRBLnNpemUo
KTsKKyAgICAgICAgdW5zaWduZWQgc2l6ZUIgPSBtX3NldEIuc2l6ZSgpOworICAgICAgICBSRUxF
QVNFX0FTU0VSVChzaXplQSA9PSBzaXplQik7CisgICAgICAgIHJldHVybiBzaXplQTsKKyAgICB9
CisKKyAgICB2b2lkIGR1bXBNZW1vcnlVc2VJbktCKCkgY29uc3QKKyAgICB7CisgICAgICAgIGRh
dGFMb2cobV9zZXRBLm1lbW9yeVVzZSgpLzEwMjQsICIgLT4gIiwgbV9zZXRCLm1lbW9yeVVzZSgp
LzEwMjQpOwogICAgIH0KIAogcHJpdmF0ZToKLSAgICBQYWlyU3RvcmFnZVR5cGUgbV92YWx1ZSB7
IDAgfTsKKyAgICBUIG1fc2V0QTsKKyAgICBVIG1fc2V0QjsKIH07CiAKK3VzaW5nIFNtYWxsSW50
ZXJmZXJlbmNlR3JhcGggPSBJbnRlcmZlcmVuY2VCaXRWZWN0b3I8dWludDE2X3Q+OwordXNpbmcg
TGFyZ2VJbnRlcmZlcmVuY2VHcmFwaCA9IEluc3RydW1lbnRlZEludGVyZmVyZW5jZUdyYXBoPElu
dGVyZmVyZW5jZUhhc2hTZXQ8dWludDE2X3Q+LCBJbnRlcmZlcmVuY2VWZWN0b3I8TGlrZWx5RGVu
c2VVbnNpZ25lZEludGVnZXJTZXQ8dWludDE2X3Q+LCB1aW50MTZfdD4sIHVpbnQxNl90PjsKK3Vz
aW5nIEh1Z2VJbnRlcmZlcmVuY2VHcmFwaCA9IEluc3RydW1lbnRlZEludGVyZmVyZW5jZUdyYXBo
PEludGVyZmVyZW5jZUhhc2hTZXQ8dWludDMyX3Q+LCBJbnRlcmZlcmVuY2VWZWN0b3I8TGlrZWx5
RGVuc2VVbnNpZ25lZEludGVnZXJTZXQ8dWludDMyX3Q+LCB1aW50MzJfdD4sIHVpbnQxNl90PjsK
KworI2Vsc2UgLy8gVEVTVF9PUFRJTUlaRURfSU5URVJGRVJFTkNFX0dSQVBICisKK3VzaW5nIFNt
YWxsSW50ZXJmZXJlbmNlR3JhcGggPSBJbnRlcmZlcmVuY2VCaXRWZWN0b3I8dWludDE2X3Q+Owor
dXNpbmcgTGFyZ2VJbnRlcmZlcmVuY2VHcmFwaCA9IEludGVyZmVyZW5jZVZlY3RvcjxMaWtlbHlE
ZW5zZVVuc2lnbmVkSW50ZWdlclNldDx1aW50MTZfdD4sIHVpbnQxNl90PjsKK3VzaW5nIEh1Z2VJ
bnRlcmZlcmVuY2VHcmFwaCA9IEludGVyZmVyZW5jZVZlY3RvcjxMaWtlbHlEZW5zZVVuc2lnbmVk
SW50ZWdlclNldDx1aW50MzJfdD4sIHVpbnQzMl90PjsKKworI2VuZGlmCisKIC8vIFRoZSBBYnN0
cmFjdENvbG9yaW5nQWxsb2NhdG9yIGRlZmluZXMgYWxsIHRoZSBjb2RlIHRoYXQgaXMgaW5kZXBl
bmRhbnQKIC8vIGZyb20gdGhlIGJhbmsgb3IgcmVnaXN0ZXIgYW5kIGNhbiBiZSBzaGFyZWQgd2hl
biBhbGxvY2F0aW5nIHJlZ2lzdGVycy4KLXRlbXBsYXRlPHR5cGVuYW1lIEluZGV4VHlwZSwgdHlw
ZW5hbWUgVG1wTWFwcGVyLCB0eXBlbmFtZSBJbnRlcmZlcmVuY2VFZGdlVHlwZT4KK3RlbXBsYXRl
PHR5cGVuYW1lIEluZGV4VHlwZSwgdHlwZW5hbWUgSW50ZXJmZXJlbmNlU2V0LCBCYW5rIGJhbms+
CiBjbGFzcyBBYnN0cmFjdENvbG9yaW5nQWxsb2NhdG9yIHsKIHB1YmxpYzoKLSAgICBBYnN0cmFj
dENvbG9yaW5nQWxsb2NhdG9yKENvZGUmIGNvZGUsIGNvbnN0IFZlY3RvcjxSZWc+JiByZWdzSW5Q
cmlvcml0eU9yZGVyLCBJbmRleFR5cGUgbGFzdFByZWNvbG9yZWRSZWdpc3RlckluZGV4LCB1bnNp
Z25lZCB0bXBBcnJheVNpemUsIGNvbnN0IEhhc2hTZXQ8dW5zaWduZWQ+JiB1bnNwaWxsYWJsZVRt
cHMsIGNvbnN0IFVzZUNvdW50czxUbXA+JiB1c2VDb3VudHMpCisgICAgQWJzdHJhY3RDb2xvcmlu
Z0FsbG9jYXRvcihDb2RlJiBjb2RlLCBjb25zdCBWZWN0b3I8UmVnPiYgcmVnc0luUHJpb3JpdHlP
cmRlciwgSW5kZXhUeXBlIGxhc3RQcmVjb2xvcmVkUmVnaXN0ZXJJbmRleCwgdW5zaWduZWQgdG1w
QXJyYXlTaXplLCBjb25zdCBCaXRWZWN0b3ImIHVuc3BpbGxhYmxlVG1wcywgY29uc3QgVXNlQ291
bnRzJiB1c2VDb3VudHMpCiAgICAgICAgIDogbV9yZWdzSW5Qcmlvcml0eU9yZGVyKHJlZ3NJblBy
aW9yaXR5T3JkZXIpCiAgICAgICAgICwgbV9sYXN0UHJlY29sb3JlZFJlZ2lzdGVySW5kZXgobGFz
dFByZWNvbG9yZWRSZWdpc3RlckluZGV4KQogICAgICAgICAsIG1fdW5zcGlsbGFibGVUbXBzKHVu
c3BpbGxhYmxlVG1wcykKQEAgLTE2MCw2ICszMDYsMTQgQEAgcHVibGljOgogICAgIH0KIAogcHJv
dGVjdGVkOgorICAgIHVzaW5nIFRtcE1hcHBlciA9IEFic29sdXRlVG1wTWFwcGVyPGJhbms+Owor
CisgICAgSW5kZXhUeXBlIHRtcFRvSW5kZXgoVG1wIHRtcCkgY29uc3QKKyAgICB7CisgICAgICAg
IHVuc2lnbmVkIGluZGV4ID0gVG1wTWFwcGVyOjphYnNvbHV0ZUluZGV4KHRtcCk7CisgICAgICAg
IEFTU0VSVChzdGQ6Om51bWVyaWNfbGltaXRzPEluZGV4VHlwZT46Om1heCgpID4gaW5kZXgpOwor
ICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8SW5kZXhUeXBlPihpbmRleCk7CisgICAgfQogCiAg
ICAgdW5zaWduZWQgcmVnaXN0ZXJDb3VudCgpIGNvbnN0IHsgcmV0dXJuIG1fcmVnc0luUHJpb3Jp
dHlPcmRlci5zaXplKCk7IH0KIApAQCAtMTgwLDcgKzMzNCw3IEBAIHByb3RlY3RlZDoKIAogICAg
IHZvaWQgYWRkVG9TcGlsbCh1bnNpZ25lZCB0b1NwaWxsKQogICAgIHsKLSAgICAgICAgaWYgKG1f
dW5zcGlsbGFibGVUbXBzLmNvbnRhaW5zKHRvU3BpbGwpKQorICAgICAgICBpZiAobV91bnNwaWxs
YWJsZVRtcHMucXVpY2tHZXQodG9TcGlsbCkpCiAgICAgICAgICAgICByZXR1cm47CiAKICAgICAg
ICAgbV9zcGlsbFdvcmtsaXN0LmFkZCh0b1NwaWxsKTsKQEAgLTE5OCwxNSArMzUyLDE1IEBAIHBy
b3RlY3RlZDoKICAgICAgICAgLy8gQWxsIHByZWNvbG9yZWQgcmVnaXN0ZXJzIGhhdmUgIGFuICJp
bmZpbml0ZSIgZGVncmVlLgogICAgICAgICB1bnNpZ25lZCBmaXJzdE5vblJlZ0luZGV4ID0gbV9s
YXN0UHJlY29sb3JlZFJlZ2lzdGVySW5kZXggKyAxOwogICAgICAgICBmb3IgKHVuc2lnbmVkIGkg
PSAwOyBpIDwgZmlyc3ROb25SZWdJbmRleDsgKytpKQotICAgICAgICAgICAgbV9kZWdyZWVzW2ld
ID0gc3RkOjpudW1lcmljX2xpbWl0czx1bnNpZ25lZD46Om1heCgpOworICAgICAgICAgICAgbV9k
ZWdyZWVzW2ldID0gc3RkOjpudW1lcmljX2xpbWl0czxJbmRleFR5cGU+OjptYXgoKTsKIAotICAg
ICAgICBtZW1zZXQobV9kZWdyZWVzLmRhdGEoKSArIGZpcnN0Tm9uUmVnSW5kZXgsIDAsICh0bXBB
cnJheVNpemUgLSBmaXJzdE5vblJlZ0luZGV4KSAqIHNpemVvZih1bnNpZ25lZCkpOworICAgICAg
ICBtZW1zZXQobV9kZWdyZWVzLmRhdGEoKSArIGZpcnN0Tm9uUmVnSW5kZXgsIDAsICh0bXBBcnJh
eVNpemUgLSBmaXJzdE5vblJlZ0luZGV4KSAqIHNpemVvZihJbmRleFR5cGUpKTsKICAgICB9CiAK
ICAgICB2b2lkIGFkZEVkZ2VEaXN0aW5jdChJbmRleFR5cGUgYSwgSW5kZXhUeXBlIGIpCiAgICAg
ewogICAgICAgICBBU1NFUlQoYSAhPSBiKTsKLSAgICAgICAgYm9vbCBpc05ld0VkZ2UgPSBhZGRJ
bnRlcmZlcmVuY2VFZGdlKEludGVyZmVyZW5jZUVkZ2VUeXBlKGEsIGIpKTsKKyAgICAgICAgYm9v
bCBpc05ld0VkZ2UgPSBhZGRJbnRlcmZlcmVuY2VFZGdlKGEsIGIpOwogICAgICAgICBpZiAoaXNO
ZXdFZGdlKSB7CiAgICAgICAgICAgICBpZiAoIWlzUHJlY29sb3JlZChhKSkgewogICAgICAgICAg
ICAgICAgIEFTU0VSVCghbV9hZGphY2VuY3lMaXN0W2FdLmNvbnRhaW5zKGIpKTsKQEAgLTIyNSw3
ICszNzksNyBAQCBwcm90ZWN0ZWQ6CiAgICAgYm9vbCBhZGRFZGdlRGlzdGluY3RXaXRob3V0RGVn
cmVlQ2hhbmdlKEluZGV4VHlwZSBhLCBJbmRleFR5cGUgYikKICAgICB7CiAgICAgICAgIEFTU0VS
VChhICE9IGIpOwotICAgICAgICBib29sIGlzTmV3RWRnZSA9IGFkZEludGVyZmVyZW5jZUVkZ2Uo
SW50ZXJmZXJlbmNlRWRnZVR5cGUoYSwgYikpOworICAgICAgICBib29sIGlzTmV3RWRnZSA9IGFk
ZEludGVyZmVyZW5jZUVkZ2UoYSwgYik7CiAgICAgICAgIGlmIChpc05ld0VkZ2UpIHsKICAgICAg
ICAgICAgIGlmICghaXNQcmVjb2xvcmVkKGEpKSB7CiAgICAgICAgICAgICAgICAgQVNTRVJUKCFt
X2FkamFjZW5jeUxpc3RbYV0uY29udGFpbnMoYikpOwpAQCAtMzQwLDcgKzQ5NCw3IEBAIHByb3Rl
Y3RlZDoKICAgICAgICAgICAgIGlmICghaXNQcmVjb2xvcmVkKGFkamFjZW50VG1wSW5kZXgpCiAg
ICAgICAgICAgICAgICAgJiYgIWhhc0JlZW5TaW1wbGlmaWVkKGFkamFjZW50VG1wSW5kZXgpCiAg
ICAgICAgICAgICAgICAgJiYgbV9kZWdyZWVzW2FkamFjZW50VG1wSW5kZXhdID49IHJlZ2lzdGVy
Q291bnQoKQotICAgICAgICAgICAgICAgICYmICFoYXNJbnRlcmZlcmVuY2VFZGdlKEludGVyZmVy
ZW5jZUVkZ2VUeXBlKHUsIGFkamFjZW50VG1wSW5kZXgpKSkKKyAgICAgICAgICAgICAgICAmJiAh
aGFzSW50ZXJmZXJlbmNlRWRnZSh1LCBhZGphY2VudFRtcEluZGV4KSkKICAgICAgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuIHRydWU7CkBAIC0zNzUs
NTIgKzUyOSw0MCBAQCBwcm90ZWN0ZWQ6CiAgICAgICAgIGF1dG8gaXRlcmF0b3IgPSBtX3NwaWxs
V29ya2xpc3QuYmVnaW4oKTsKIAogICAgICAgICBSRUxFQVNFX0FTU0VSVF9XSVRIX01FU1NBR0Uo
aXRlcmF0b3IgIT0gbV9zcGlsbFdvcmtsaXN0LmVuZCgpLCAic2VsZWN0U3BpbGwoKSBjYWxsZWQg
d2hlbiB0aGVyZSB3YXMgbm8gc3BpbGwuIik7Ci0gICAgICAgIFJFTEVBU0VfQVNTRVJUX1dJVEhf
TUVTU0FHRSghbV91bnNwaWxsYWJsZVRtcHMuY29udGFpbnMoKml0ZXJhdG9yKSwgInRyeWluZyB0
byBzcGlsbCB1bnNwaWxsYWJsZSB0bXAiKTsKLQotICAgICAgICAvLyBIaWdoZXIgc2NvcmUgbWVh
bnMgbW9yZSBkZXNpcmFibGUgdG8gc3BpbGwuIExvd2VyIHNjb3JlcyBtYXhpbWl6ZSB0aGUgbGlr
ZWxpaG9vZCB0aGF0IGEgdG1wCi0gICAgICAgIC8vIGdldHMgYSByZWdpc3Rlci4KLSAgICAgICAg
YXV0byBzY29yZSA9IFsmXSAoVG1wIHRtcCkgLT4gZG91YmxlIHsKLSAgICAgICAgICAgIC8vIEFp
ciBleHBvc2VzIHRoZSBjb25jZXB0IG9mICJmYXN0IHRtcHMiLCBhbmQgd2UgaW50ZXJwcmV0IHRo
YXQgdG8gbWVhbiB0aGF0IHRoZSB0bXAKLSAgICAgICAgICAgIC8vIHNob3VsZCBhbHdheXMgYmUg
aW4gYSByZWdpc3Rlci4KLSAgICAgICAgICAgIGlmIChtX2NvZGUuaXNGYXN0VG1wKHRtcCkpCi0g
ICAgICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIC8vIEFs
bCBlbHNlIGJlaW5nIGVxdWFsLCB0aGUgc2NvcmUgc2hvdWxkIGJlIGRpcmVjdGx5IHJlbGF0ZWQg
dG8gdGhlIGRlZ3JlZS4KLSAgICAgICAgICAgIGRvdWJsZSBkZWdyZWUgPSBzdGF0aWNfY2FzdDxk
b3VibGU+KG1fZGVncmVlc1tUbXBNYXBwZXI6OmFic29sdXRlSW5kZXgodG1wKV0pOwotCi0gICAg
ICAgICAgICAvLyBBbGwgZWxzZSBiZWluZyBlcXVhbCwgdGhlIHNjb3JlIHNob3VsZCBiZSBpbnZl
cnNlbHkgcmVsYXRlZCB0byB0aGUgbnVtYmVyIG9mIHdhcm0gdXNlcyBhbmQKLSAgICAgICAgICAg
IC8vIGRlZnMuCi0gICAgICAgICAgICBjb25zdCBVc2VDb3VudHM8VG1wPjo6Q291bnRzKiBjb3Vu
dHMgPSBtX3VzZUNvdW50c1t0bXBdOwotICAgICAgICAgICAgaWYgKCFjb3VudHMpCi0gICAgICAg
ICAgICAgICAgcmV0dXJuIHN0ZDo6bnVtZXJpY19saW1pdHM8ZG91YmxlPjo6aW5maW5pdHkoKTsK
LSAgICAgICAgICAgIAotICAgICAgICAgICAgZG91YmxlIHVzZXMgPSBjb3VudHMtPm51bVdhcm1V
c2VzICsgY291bnRzLT5udW1EZWZzOworICAgICAgICBSRUxFQVNFX0FTU0VSVF9XSVRIX01FU1NB
R0UoIW1fdW5zcGlsbGFibGVUbXBzLmdldCgqaXRlcmF0b3IpLCAidHJ5aW5nIHRvIHNwaWxsIHVu
c3BpbGxhYmxlIHRtcCIpOwogCi0gICAgICAgICAgICAvLyBJZiBpdCdzIGEgY29uc3RhbnQsIHRo
ZW4gaXQncyBub3QgYXMgYmFkIHRvIHNwaWxsLiBXZSBjYW4gcmVtYXRlcmlhbGl6ZSBpdCBpbiBt
YW55Ci0gICAgICAgICAgICAvLyBjYXNlcy4KLSAgICAgICAgICAgIGlmIChjb3VudHMtPm51bUNv
bnN0RGVmcyA9PSAxICYmIGNvdW50cy0+bnVtRGVmcyA9PSAxKQotICAgICAgICAgICAgICAgIHVz
ZXMgLz0gMjsKKyAgICAgICAgSW5kZXhUeXBlIHZpY3RpbUluZGV4ID0gKml0ZXJhdG9yOworICAg
ICAgICBmbG9hdCBtYXhTY29yZSA9IDA7CiAKLSAgICAgICAgICAgIHJldHVybiBkZWdyZWUgLyB1
c2VzOwotICAgICAgICB9OworICAgICAgICBmb3IgKDtpdGVyYXRvciAhPSBtX3NwaWxsV29ya2xp
c3QuZW5kKCk7ICsraXRlcmF0b3IpIHsKKyAgICAgICAgICAgIEluZGV4VHlwZSBpbmRleCA9ICpp
dGVyYXRvcjsKIAotICAgICAgICBhdXRvIHZpY3RpbUl0ZXJhdG9yID0gaXRlcmF0b3I7Ci0gICAg
ICAgIGRvdWJsZSBtYXhTY29yZSA9IHNjb3JlKFRtcE1hcHBlcjo6dG1wRnJvbUFic29sdXRlSW5k
ZXgoKml0ZXJhdG9yKSk7CisgICAgICAgICAgICBmbG9hdCB1c2VzID0gbV91c2VDb3VudHMubnVt
V2FybVVzZXNBbmREZWZzPGJhbms+KGluZGV4KTsKKyAgICAgICAgICAgIGlmICghdXNlcykgewor
ICAgICAgICAgICAgICAgIHZpY3RpbUluZGV4ID0gaW5kZXg7CisgICAgICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8vIEhpZ2hlciBzY29yZSBtZWFucyBt
b3JlIGRlc2lyYWJsZSB0byBzcGlsbC4gTG93ZXIgc2NvcmVzIG1heGltaXplIHRoZSBsaWtlbGlo
b29kIHRoYXQgYSB0bXAKKyAgICAgICAgICAgIC8vIGdldHMgYSByZWdpc3Rlci4KKyAgICAgICAg
ICAgIGZsb2F0IGRlZ3JlZSA9IHN0YXRpY19jYXN0PGZsb2F0PihtX2RlZ3JlZXNbaW5kZXhdKTsK
KyAgICAgICAgICAgIGZsb2F0IHRtcFNjb3JlID0gZGVncmVlIC8gdXNlczsKKworICAgICAgICAg
ICAgLy8gSWYgaXQncyBhIGNvbnN0YW50LCB0aGVuIGl0J3Mgbm90IGFzIGJhZCB0byBzcGlsbC4g
V2UgY2FuIHJlbWF0ZXJpYWxpemUgaXQgaW4gbWFueQorICAgICAgICAgICAgLy8gY2FzZXMuCisg
ICAgICAgICAgICBpZiAobV91c2VDb3VudHMuaXNDb25zdERlZjxiYW5rPihpbmRleCkpCisgICAg
ICAgICAgICAgICAgdG1wU2NvcmUgKj0gMjsKIAotICAgICAgICArK2l0ZXJhdG9yOwotICAgICAg
ICBmb3IgKDtpdGVyYXRvciAhPSBtX3NwaWxsV29ya2xpc3QuZW5kKCk7ICsraXRlcmF0b3IpIHsK
LSAgICAgICAgICAgIGRvdWJsZSB0bXBTY29yZSA9IHNjb3JlKFRtcE1hcHBlcjo6dG1wRnJvbUFi
c29sdXRlSW5kZXgoKml0ZXJhdG9yKSk7CiAgICAgICAgICAgICBpZiAodG1wU2NvcmUgPiBtYXhT
Y29yZSkgewotICAgICAgICAgICAgICAgIEFTU0VSVCghbV91bnNwaWxsYWJsZVRtcHMuY29udGFp
bnMoKml0ZXJhdG9yKSk7Ci0gICAgICAgICAgICAgICAgdmljdGltSXRlcmF0b3IgPSBpdGVyYXRv
cjsKKyAgICAgICAgICAgICAgICB2aWN0aW1JbmRleCA9IGluZGV4OwogICAgICAgICAgICAgICAg
IG1heFNjb3JlID0gdG1wU2NvcmU7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KIAotICAgICAg
ICBJbmRleFR5cGUgdmljdGltSW5kZXggPSAqdmljdGltSXRlcmF0b3I7CisgICAgICAgIEFTU0VS
VCghbV91bnNwaWxsYWJsZVRtcHMuZ2V0KHZpY3RpbUluZGV4KSk7CisgICAgICAgIEFTU0VSVCgh
aXNQcmVjb2xvcmVkKHZpY3RpbUluZGV4KSk7CiAgICAgICAgIGlmICh0cmFjZURlYnVnKQogICAg
ICAgICAgICAgZGF0YUxvZ0xuKCJTZWxlY3Rpbmcgc3BpbGwgIiwgdmljdGltSW5kZXgpOwotICAg
ICAgICBBU1NFUlQoIWlzUHJlY29sb3JlZCh2aWN0aW1JbmRleCkpOwogICAgICAgICByZXR1cm4g
dmljdGltSW5kZXg7CiAgICAgfQogCkBAIC01MTIsMTQgKzY1NCwxNCBAQCBwcm90ZWN0ZWQ6CiAg
ICAgICAgICAgICBtX2NvbG9yZWRUbXAuY2xlYXIoKTsKICAgICB9CiAKLSAgICBib29sIGFkZElu
dGVyZmVyZW5jZUVkZ2UoSW50ZXJmZXJlbmNlRWRnZVR5cGUgZWRnZSkKKyAgICBib29sIGFkZElu
dGVyZmVyZW5jZUVkZ2UoSW5kZXhUeXBlIHUsIEluZGV4VHlwZSB2KQogICAgIHsKLSAgICAgICAg
cmV0dXJuIG1faW50ZXJmZXJlbmNlRWRnZXMuYWRkKGVkZ2UpLmlzTmV3RW50cnk7CisgICAgICAg
IHJldHVybiBtX2ludGVyZmVyZW5jZUVkZ2VzLmFkZEFuZFJldHVybklzTmV3RW50cnkodSwgdik7
CiAgICAgfQogCi0gICAgYm9vbCBoYXNJbnRlcmZlcmVuY2VFZGdlKEludGVyZmVyZW5jZUVkZ2VU
eXBlIGVkZ2UpCisgICAgYm9vbCBoYXNJbnRlcmZlcmVuY2VFZGdlKEluZGV4VHlwZSB1LCBJbmRl
eFR5cGUgdikKICAgICB7Ci0gICAgICAgIHJldHVybiBtX2ludGVyZmVyZW5jZUVkZ2VzLmNvbnRh
aW5zKGVkZ2UpOworICAgICAgICByZXR1cm4gbV9pbnRlcmZlcmVuY2VFZGdlcy5jb250YWlucyh1
LCB2KTsKICAgICB9CiAKICAgICB2b2lkIGNsZWFySW50ZXJmZXJlbmNlRWRnZXMoKQpAQCAtNTMy
LDEwICs2NzQsMTEgQEAgcHJvdGVjdGVkOgogICAgICAgICBvdXQucHJpbnQoImdyYXBoIEludGVy
ZmVyZW5jZUdyYXBoIHsgXG4iKTsKIAogICAgICAgICBIYXNoU2V0PFRtcD4gdG1wc1dpdGhJbnRl
cmZlcmVuY2VzOwotICAgICAgICBmb3IgKGNvbnN0IGF1dG8mIGVkZ2UgOiBtX2ludGVyZmVyZW5j
ZUVkZ2VzKSB7Ci0gICAgICAgICAgICB0bXBzV2l0aEludGVyZmVyZW5jZXMuYWRkKFRtcE1hcHBl
cjo6dG1wRnJvbUFic29sdXRlSW5kZXgoZWRnZS5maXJzdCgpKSk7Ci0gICAgICAgICAgICB0bXBz
V2l0aEludGVyZmVyZW5jZXMuYWRkKFRtcE1hcHBlcjo6dG1wRnJvbUFic29sdXRlSW5kZXgoZWRn
ZS5zZWNvbmQoKSkpOwotICAgICAgICB9CisKKyAgICAgICAgbV9pbnRlcmZlcmVuY2VFZGdlcy5m
b3JFYWNoKFsmdG1wc1dpdGhJbnRlcmZlcmVuY2VzXSAoc3RkOjpwYWlyPEluZGV4VHlwZSwgSW5k
ZXhUeXBlPiBlZGdlKSB7CisgICAgICAgICAgICB0bXBzV2l0aEludGVyZmVyZW5jZXMuYWRkKFRt
cE1hcHBlcjo6dG1wRnJvbUFic29sdXRlSW5kZXgoZWRnZS5maXJzdCkpOworICAgICAgICAgICAg
dG1wc1dpdGhJbnRlcmZlcmVuY2VzLmFkZChUbXBNYXBwZXI6OnRtcEZyb21BYnNvbHV0ZUluZGV4
KGVkZ2Uuc2Vjb25kKSk7CisgICAgICAgIH0pOwogCiAgICAgICAgIGZvciAoY29uc3QgYXV0byYg
dG1wIDogdG1wc1dpdGhJbnRlcmZlcmVuY2VzKSB7CiAgICAgICAgICAgICB1bnNpZ25lZCB0bXBJ
bmRleCA9IFRtcE1hcHBlcjo6YWJzb2x1dGVJbmRleCh0bXApOwpAQCAtNTQ1LDIwICs2ODgsMjEg
QEAgcHJvdGVjdGVkOgogICAgICAgICAgICAgICAgIG91dC5wcmludCgiICAgICIsIHRtcC5pbnRl
cm5hbFZhbHVlKCksICIgW2xhYmVsPVwiIiwgdG1wLCAiXCJdO1xuIik7CiAgICAgICAgIH0KIAot
ICAgICAgICBmb3IgKGNvbnN0IGF1dG8mIGVkZ2UgOiBtX2ludGVyZmVyZW5jZUVkZ2VzKQotICAg
ICAgICAgICAgb3V0LnByaW50KCIgICAgIiwgZWRnZS5maXJzdCgpLCAiIC0tICIsIGVkZ2Uuc2Vj
b25kKCksICI7XG4iKTsKKyAgICAgICAgbV9pbnRlcmZlcmVuY2VFZGdlcy5mb3JFYWNoKFsmb3V0
XSAoc3RkOjpwYWlyPEluZGV4VHlwZSwgSW5kZXhUeXBlPiBlZGdlKSB7CisgICAgICAgICAgICBv
dXQucHJpbnQoIiAgICAiLCBlZGdlLmZpcnN0LCAiIC0tICIsIGVkZ2Uuc2Vjb25kLCAiO1xuIik7
CisgICAgICAgIH0pOwogICAgICAgICBvdXQucHJpbnQoIn1cbiIpOwogICAgIH0KIAogICAgIFZl
Y3RvcjxSZWc+IG1fcmVnc0luUHJpb3JpdHlPcmRlcjsKICAgICBJbmRleFR5cGUgbV9sYXN0UHJl
Y29sb3JlZFJlZ2lzdGVySW5kZXggeyAwIH07CiAKLSAgICB0eXBlbmFtZSBJbnRlcmZlcmVuY2VF
ZGdlVHlwZTo6SW50ZXJmZXJlbmNlU2V0IG1faW50ZXJmZXJlbmNlRWRnZXM7CisgICAgSW50ZXJm
ZXJlbmNlU2V0IG1faW50ZXJmZXJlbmNlRWRnZXM7CiAKICAgICBWZWN0b3I8VmVjdG9yPEluZGV4
VHlwZSwgMCwgVW5zYWZlVmVjdG9yT3ZlcmZsb3csIDQ+LCAwLCBVbnNhZmVWZWN0b3JPdmVyZmxv
dz4gbV9hZGphY2VuY3lMaXN0OwogICAgIFZlY3RvcjxJbmRleFR5cGUsIDAsIFVuc2FmZVZlY3Rv
ck92ZXJmbG93PiBtX2RlZ3JlZXM7CiAKLSAgICB1c2luZyBJbmRleFR5cGVTZXQgPSBIYXNoU2V0
PEluZGV4VHlwZSwgRGVmYXVsdEhhc2g8SW5kZXhUeXBlPiwgV1RGOjpVbnNpZ25lZFdpdGhaZXJv
S2V5SGFzaFRyYWl0czxJbmRleFR5cGU+PjsKKyAgICB1c2luZyBJbmRleFR5cGVTZXQgPSBTbWFs
bFNldDxJbmRleFR5cGUsIEludEhhc2g8SW5kZXhUeXBlPj47CiAKICAgICBIYXNoTWFwPEluZGV4
VHlwZSwgSW5kZXhUeXBlU2V0LCBEZWZhdWx0SGFzaDxJbmRleFR5cGU+LCBXVEY6OlVuc2lnbmVk
V2l0aFplcm9LZXlIYXNoVHJhaXRzPEluZGV4VHlwZT4+IG1fYmlhc2VzOwogCkBAIC01NzEsNyAr
NzE1LDcgQEAgcHJvdGVjdGVkOgogICAgIFZlY3RvcjxNb3ZlT3BlcmFuZHMsIDAsIFVuc2FmZVZl
Y3Rvck92ZXJmbG93PiBtX2NvYWxlc2NpbmdDYW5kaWRhdGVzOwogCiAgICAgLy8gTGlzdCBvZiBl
dmVyeSBtb3ZlIGluc3RydWN0aW9uIGFzc29jaWF0ZWQgd2l0aCBhIFRtcC4KLSAgICBWZWN0b3I8
SW5kZXhUeXBlU2V0PiBtX21vdmVMaXN0OworICAgIFZlY3RvcjxTbWFsbFNldDx1bnNpZ25lZCwg
SW50SGFzaDx1bnNpZ25lZD4+PiBtX21vdmVMaXN0OwogCiAgICAgLy8gQ29sb3JzLgogICAgIFZl
Y3RvcjxSZWcsIDAsIFVuc2FmZVZlY3Rvck92ZXJmbG93PiBtX2NvbG9yZWRUbXA7CkBAIC01OTUs
MTcgKzczOSwxOCBAQCBwcm90ZWN0ZWQ6CiAgICAgLy8gVGhlIG1hcHBpbmcgb2YgVG1wIHRvIHRo
ZWlyIGFsaWFzIGZvciBNb3ZlcyB0aGF0IGFyZSBhbHdheXMgY29hbGVzY2luZyByZWdhcmRsZXNz
IG9mIHNwaWxsaW5nLgogICAgIFZlY3RvcjxJbmRleFR5cGUsIDAsIFVuc2FmZVZlY3Rvck92ZXJm
bG93PiBtX2NvYWxlc2NlZFRtcHNBdFNwaWxsOwogCi0gICAgY29uc3QgSGFzaFNldDx1bnNpZ25l
ZD4mIG1fdW5zcGlsbGFibGVUbXBzOwotICAgIGNvbnN0IFVzZUNvdW50czxUbXA+JiBtX3VzZUNv
dW50czsKKyAgICBjb25zdCBCaXRWZWN0b3ImIG1fdW5zcGlsbGFibGVUbXBzOworICAgIGNvbnN0
IFVzZUNvdW50cyYgbV91c2VDb3VudHM7CiAgICAgQ29kZSYgbV9jb2RlOwogCiAgICAgVmVjdG9y
PFRtcCwgND4gbV9waW5uZWRSZWdzOwogfTsKIAotdGVtcGxhdGUgPHR5cGVuYW1lIEluZGV4VHlw
ZSwgdHlwZW5hbWUgVG1wTWFwcGVyLCB0eXBlbmFtZSBJbnRlcmZlcmVuY2VFZGdlPgotY2xhc3Mg
QnJpZ2dzIDogcHVibGljIEFic3RyYWN0Q29sb3JpbmdBbGxvY2F0b3I8SW5kZXhUeXBlLCBUbXBN
YXBwZXIsIEludGVyZmVyZW5jZUVkZ2U+IHsKLSAgICB1c2luZyBCYXNlID0gQWJzdHJhY3RDb2xv
cmluZ0FsbG9jYXRvcjxJbmRleFR5cGUsIFRtcE1hcHBlciwgSW50ZXJmZXJlbmNlRWRnZT47Cit0
ZW1wbGF0ZSA8dHlwZW5hbWUgSW5kZXhUeXBlLCB0eXBlbmFtZSBJbnRlcmZlcmVuY2VTZXQsIEJh
bmsgYmFuaz4KK2NsYXNzIEJyaWdncyA6IHB1YmxpYyBBYnN0cmFjdENvbG9yaW5nQWxsb2NhdG9y
PEluZGV4VHlwZSwgSW50ZXJmZXJlbmNlU2V0LCBiYW5rPiB7CisgICAgdXNpbmcgQmFzZSA9IEFi
c3RyYWN0Q29sb3JpbmdBbGxvY2F0b3I8SW5kZXhUeXBlLCBJbnRlcmZlcmVuY2VTZXQsIGJhbms+
OwogcHJvdGVjdGVkOgorICAgIHVzaW5nIFRtcE1hcHBlciA9IHR5cGVuYW1lIEJhc2U6OlRtcE1h
cHBlcjsKICAgICB1c2luZyBCYXNlOjptX2lzT25TZWxlY3RTdGFjazsKICAgICB1c2luZyBCYXNl
OjptX3NlbGVjdFN0YWNrOwogICAgIHVzaW5nIEJhc2U6Om1fc2ltcGxpZnlXb3JrbGlzdDsKQEAg
LTYzNSwxMSArNzgwLDEyIEBAIHByb3RlY3RlZDoKICAgICB1c2luZyBCYXNlOjpoYXNCZWVuU2lt
cGxpZmllZDsKICAgICB1c2luZyBCYXNlOjphZGRUb1NwaWxsOwogICAgIHVzaW5nIEJhc2U6OmFk
ZEJpYXM7CisgICAgdXNpbmcgQmFzZTo6bV9pbnRlcmZlcmVuY2VFZGdlczsKICAgICB1c2luZyBC
YXNlOjptX3Bpbm5lZFJlZ3M7CiAgICAgdXNpbmcgQmFzZTo6bV9yZWdzSW5Qcmlvcml0eU9yZGVy
OwogCiBwdWJsaWM6Ci0gICAgQnJpZ2dzKENvZGUmIGNvZGUsIGNvbnN0IFZlY3RvcjxSZWc+JiBy
ZWdzSW5Qcmlvcml0eU9yZGVyLCBJbmRleFR5cGUgbGFzdFByZWNvbG9yZWRSZWdpc3RlckluZGV4
LCB1bnNpZ25lZCB0bXBBcnJheVNpemUsIGNvbnN0IEhhc2hTZXQ8dW5zaWduZWQ+JiB1bnNwaWxs
YWJsZVRtcHMsIGNvbnN0IFVzZUNvdW50czxUbXA+JiB1c2VDb3VudHMpCisgICAgQnJpZ2dzKENv
ZGUmIGNvZGUsIGNvbnN0IFZlY3RvcjxSZWc+JiByZWdzSW5Qcmlvcml0eU9yZGVyLCBJbmRleFR5
cGUgbGFzdFByZWNvbG9yZWRSZWdpc3RlckluZGV4LCB1bnNpZ25lZCB0bXBBcnJheVNpemUsIGNv
bnN0IEJpdFZlY3RvciYgdW5zcGlsbGFibGVUbXBzLCBjb25zdCBVc2VDb3VudHMmIHVzZUNvdW50
cykKICAgICAgICAgOiBCYXNlKGNvZGUsIHJlZ3NJblByaW9yaXR5T3JkZXIsIGxhc3RQcmVjb2xv
cmVkUmVnaXN0ZXJJbmRleCwgdG1wQXJyYXlTaXplLCB1bnNwaWxsYWJsZVRtcHMsIHVzZUNvdW50
cykKICAgICB7CiAgICAgfQpAQCAtNjkxLDcgKzgzNyw3IEBAIHB1YmxpYzoKICAgICAgICAgICAg
ICAgICB9CiAgICAgICAgICAgICAgICAgdW5zaWduZWQgZGVncmVlID0gbV9kZWdyZWVzW2ldOwog
ICAgICAgICAgICAgICAgIGlmIChkZWdyZWUgPj0gcmVnaXN0ZXJDb3VudCkgewotICAgICAgICAg
ICAgICAgICAgICBBU1NFUlQobV91bnNwaWxsYWJsZVRtcHMuY29udGFpbnMoaSkgfHwgbV9zcGls
bFdvcmtsaXN0LmNvbnRhaW5zKGkpKTsKKyAgICAgICAgICAgICAgICAgICAgQVNTRVJUKG1fdW5z
cGlsbGFibGVUbXBzLmdldChpKSB8fCBtX3NwaWxsV29ya2xpc3QuY29udGFpbnMoaSkpOwogICAg
ICAgICAgICAgICAgICAgICBBU1NFUlQoIW1fc2ltcGxpZnlXb3JrbGlzdC5jb250YWlucyhpKSk7
CiAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgICAgIH0KQEAgLTc0
Nyw5ICs4OTMsNyBAQCBwcm90ZWN0ZWQ6CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAg
ICAgIH0KIAotICAgICAgICBpZiAoaXNQcmVjb2xvcmVkKHYpCi0gICAgICAgICAgICB8fCBoYXNJ
bnRlcmZlcmVuY2VFZGdlKEludGVyZmVyZW5jZUVkZ2UodSwgdikpKSB7Ci0KKyAgICAgICAgaWYg
KGlzUHJlY29sb3JlZCh2KSB8fCBoYXNJbnRlcmZlcmVuY2VFZGdlKHUsIHYpKSB7CiAgICAgICAg
ICAgICAvLyBObyBuZWVkIHRvIGV2ZXIgY29uc2lkZXIgdGhpcyBtb3ZlIGFnYWluIGlmIGl0IGlu
dGVyZmVyZXMuCiAgICAgICAgICAgICAvLyBObyBjb2FsZXNjaW5nIHdpbGwgcmVtb3ZlIHRoZSBp
bnRlcmZlcmVuY2UuCiAgICAgICAgICAgICBtb3ZlSW5kZXggPSBVSU5UX01BWDsKQEAgLTc4OCw3
ICs5MzIsOCBAQCBwcm90ZWN0ZWQ6CiAgICAgICAgIG1fY29hbGVzY2VkVG1wc1t2XSA9IHU7CiAK
ICAgICAgICAgYXV0byYgdk1vdmVzID0gbV9tb3ZlTGlzdFt2XTsKLSAgICAgICAgbV9tb3ZlTGlz
dFt1XS5hZGQodk1vdmVzLmJlZ2luKCksIHZNb3Zlcy5lbmQoKSk7CisgICAgICAgIGZvciAodW5z
aWduZWQgbW92ZSA6IHZNb3ZlcykKKyAgICAgICAgICAgIG1fbW92ZUxpc3RbdV0uYWRkKG1vdmUp
OwogCiAgICAgICAgIGZvckVhY2hBZGphY2VudCh2LCBbdGhpcywgdV0gKEluZGV4VHlwZSBhZGph
Y2VudFRtcEluZGV4KSB7CiAgICAgICAgICAgICBpZiAoYWRkRWRnZURpc3RpbmN0V2l0aG91dERl
Z3JlZUNoYW5nZShhZGphY2VudFRtcEluZGV4LCB1KSkgewpAQCAtOTM4LDcgKzEwODMsNyBAQCBw
cm90ZWN0ZWQ6CiAgICAgICAgICAgICAgICAgZGF0YUxvZ0xuKCJNb3ZpbmcgdG1wICIsIHRtcElu
ZGV4LCAiIGZyb20gc3BpbGwgbGlzdCB0byBzaW1wbGlmeSBsaXN0IGJlY2F1c2UgaXQncyBkZWdy
ZWUgaXMgbm93IGxlc3MgdGhhbiBrIik7CiAKICAgICAgICAgICAgIGlmIChBU1NFUlRfRU5BQkxF
RCkKLSAgICAgICAgICAgICAgICBBU1NFUlQobV91bnNwaWxsYWJsZVRtcHMuY29udGFpbnModG1w
SW5kZXgpIHx8IG1fc3BpbGxXb3JrbGlzdC5jb250YWlucyh0bXBJbmRleCkpOworICAgICAgICAg
ICAgICAgIEFTU0VSVChtX3Vuc3BpbGxhYmxlVG1wcy5nZXQodG1wSW5kZXgpIHx8IG1fc3BpbGxX
b3JrbGlzdC5jb250YWlucyh0bXBJbmRleCkpOwogICAgICAgICAgICAgbV9zcGlsbFdvcmtsaXN0
LnF1aWNrQ2xlYXIodG1wSW5kZXgpOwogCiAgICAgICAgICAgICBBU1NFUlQoIW1fc2ltcGxpZnlX
b3JrbGlzdC5jb250YWlucyh0bXBJbmRleCkpOwpAQCAtOTU2LDEwICsxMTAxLDExIEBAIHByb3Rl
Y3RlZDoKICAgICBNb3ZlU2V0IG1fd29ya2xpc3RNb3ZlczsKIH07CiAKLXRlbXBsYXRlIDx0eXBl
bmFtZSBJbmRleFR5cGUsIHR5cGVuYW1lIFRtcE1hcHBlciwgdHlwZW5hbWUgSW50ZXJmZXJlbmNl
RWRnZT4KLWNsYXNzIElSQyA6IHB1YmxpYyBBYnN0cmFjdENvbG9yaW5nQWxsb2NhdG9yPEluZGV4
VHlwZSwgVG1wTWFwcGVyLCBJbnRlcmZlcmVuY2VFZGdlPiB7Ci0gICAgdXNpbmcgQmFzZSA9IEFi
c3RyYWN0Q29sb3JpbmdBbGxvY2F0b3I8SW5kZXhUeXBlLCBUbXBNYXBwZXIsIEludGVyZmVyZW5j
ZUVkZ2U+OwordGVtcGxhdGUgPHR5cGVuYW1lIEluZGV4VHlwZSwgdHlwZW5hbWUgSW50ZXJmZXJl
bmNlU2V0LCBCYW5rIGJhbms+CitjbGFzcyBJUkMgOiBwdWJsaWMgQWJzdHJhY3RDb2xvcmluZ0Fs
bG9jYXRvcjxJbmRleFR5cGUsIEludGVyZmVyZW5jZVNldCwgYmFuaz4geworICAgIHVzaW5nIEJh
c2UgPSBBYnN0cmFjdENvbG9yaW5nQWxsb2NhdG9yPEluZGV4VHlwZSwgSW50ZXJmZXJlbmNlU2V0
LCBiYW5rPjsKIHByb3RlY3RlZDoKKyAgICB1c2luZyBUbXBNYXBwZXIgPSB0eXBlbmFtZSBCYXNl
OjpUbXBNYXBwZXI7CiAgICAgdXNpbmcgQmFzZTo6bV9pc09uU2VsZWN0U3RhY2s7CiAgICAgdXNp
bmcgQmFzZTo6bV9zZWxlY3RTdGFjazsKICAgICB1c2luZyBCYXNlOjptX3NpbXBsaWZ5V29ya2xp
c3Q7CkBAIC05OTEsMTEgKzExMzcsMTIgQEAgcHJvdGVjdGVkOgogICAgIHVzaW5nIEJhc2U6Om1f
YWRqYWNlbmN5TGlzdDsKICAgICB1c2luZyBCYXNlOjpkdW1wSW50ZXJmZXJlbmNlR3JhcGhJbkRv
dDsKICAgICB1c2luZyBCYXNlOjphZGRCaWFzOworICAgIHVzaW5nIEJhc2U6Om1faW50ZXJmZXJl
bmNlRWRnZXM7CiAgICAgdXNpbmcgQmFzZTo6bV9waW5uZWRSZWdzOwogICAgIHVzaW5nIEJhc2U6
Om1fcmVnc0luUHJpb3JpdHlPcmRlcjsKIAogcHVibGljOgotICAgIElSQyhDb2RlJiBjb2RlLCBj
b25zdCBWZWN0b3I8UmVnPiYgcmVnc0luUHJpb3JpdHlPcmRlciwgSW5kZXhUeXBlIGxhc3RQcmVj
b2xvcmVkUmVnaXN0ZXJJbmRleCwgdW5zaWduZWQgdG1wQXJyYXlTaXplLCBjb25zdCBIYXNoU2V0
PHVuc2lnbmVkPiYgdW5zcGlsbGFibGVUbXBzLCBjb25zdCBVc2VDb3VudHM8VG1wPiYgdXNlQ291
bnRzKQorICAgIElSQyhDb2RlJiBjb2RlLCBjb25zdCBWZWN0b3I8UmVnPiYgcmVnc0luUHJpb3Jp
dHlPcmRlciwgSW5kZXhUeXBlIGxhc3RQcmVjb2xvcmVkUmVnaXN0ZXJJbmRleCwgdW5zaWduZWQg
dG1wQXJyYXlTaXplLCBjb25zdCBCaXRWZWN0b3ImIHVuc3BpbGxhYmxlVG1wcywgY29uc3QgVXNl
Q291bnRzJiB1c2VDb3VudHMpCiAgICAgICAgIDogQmFzZShjb2RlLCByZWdzSW5Qcmlvcml0eU9y
ZGVyLCBsYXN0UHJlY29sb3JlZFJlZ2lzdGVySW5kZXgsIHRtcEFycmF5U2l6ZSwgdW5zcGlsbGFi
bGVUbXBzLCB1c2VDb3VudHMpCiAgICAgewogICAgIH0KQEAgLTEwOTMsOCArMTI0MCw3IEBAIHBy
b3RlY3RlZDoKIAogICAgICAgICAgICAgaWYgKHRyYWNlRGVidWcpCiAgICAgICAgICAgICAgICAg
ZGF0YUxvZygiICAgIENvYWxlc2NlZFxuIik7Ci0gICAgICAgIH0gZWxzZSBpZiAoaXNQcmVjb2xv
cmVkKHYpCi0gICAgICAgICAgICB8fCBoYXNJbnRlcmZlcmVuY2VFZGdlKEludGVyZmVyZW5jZUVk
Z2UodSwgdikpKSB7CisgICAgICAgIH0gZWxzZSBpZiAoaXNQcmVjb2xvcmVkKHYpIHx8IGhhc0lu
dGVyZmVyZW5jZUVkZ2UodSwgdikpIHsKICAgICAgICAgICAgIGFkZFdvcmtMaXN0KHUpOwogICAg
ICAgICAgICAgYWRkV29ya0xpc3Qodik7CiAKQEAgLTExMzMsNyArMTI3OSw4IEBAIHByb3RlY3Rl
ZDoKICAgICAgICAgbV9jb2FsZXNjZWRUbXBzW3ZdID0gdTsKIAogICAgICAgICBhdXRvJiB2TW92
ZXMgPSBtX21vdmVMaXN0W3ZdOwotICAgICAgICBtX21vdmVMaXN0W3VdLmFkZCh2TW92ZXMuYmVn
aW4oKSwgdk1vdmVzLmVuZCgpKTsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBtb3ZlIDogdk1vdmVz
KQorICAgICAgICAgICAgbV9tb3ZlTGlzdFt1XS5hZGQobW92ZSk7CiAKICAgICAgICAgZm9yRWFj
aEFkamFjZW50KHYsIFt0aGlzLCB1XSAoSW5kZXhUeXBlIGFkamFjZW50VG1wSW5kZXgpIHsKICAg
ICAgICAgICAgIGlmIChhZGRFZGdlRGlzdGluY3RXaXRob3V0RGVncmVlQ2hhbmdlKGFkamFjZW50
VG1wSW5kZXgsIHUpKSB7CkBAIC0xMzk3LDEwICsxNTQ0LDExIEBAIHByb3RlY3RlZDoKIH07CiAK
IC8vIFRoaXMgcGVyZm9ybSBhbGwgdGhlIHRhc2tzIHRoYXQgYXJlIHNwZWNpZmljIHRvIGNlcnRh
aW4gcmVnaXN0ZXIgdHlwZS4KLXRlbXBsYXRlPEJhbmsgYmFuaywgdGVtcGxhdGU8dHlwZW5hbWUs
IHR5cGVuYW1lLCB0eXBlbmFtZT4gY2xhc3MgQWxsb2NhdG9yVHlwZSwgdHlwZW5hbWUgSW50ZXJm
ZXJlbmNlRWRnZVR5cGU+Ci1jbGFzcyBDb2xvcmluZ0FsbG9jYXRvciA6IHB1YmxpYyBBbGxvY2F0
b3JUeXBlPHVuc2lnbmVkLCBBYnNvbHV0ZVRtcE1hcHBlcjxiYW5rPiwgSW50ZXJmZXJlbmNlRWRn
ZVR5cGU+IHsKLSAgICB1c2luZyBUbXBNYXBwZXIgPSBBYnNvbHV0ZVRtcE1hcHBlcjxiYW5rPjsK
LSAgICB1c2luZyBCYXNlID0gQWxsb2NhdG9yVHlwZTx1bnNpZ25lZCwgVG1wTWFwcGVyLCBJbnRl
cmZlcmVuY2VFZGdlVHlwZT47Cit0ZW1wbGF0ZTx0eXBlbmFtZSBJbmRleFR5cGUsIEJhbmsgYmFu
aywgdGVtcGxhdGU8dHlwZW5hbWUsIHR5cGVuYW1lLCBCYW5rPiBjbGFzcyBBbGxvY2F0b3JUeXBl
LCB0eXBlbmFtZSBJbnRlcmZlcmVuY2VTZXQ+CitjbGFzcyBDb2xvcmluZ0FsbG9jYXRvciA6IHB1
YmxpYyBBbGxvY2F0b3JUeXBlPEluZGV4VHlwZSwgSW50ZXJmZXJlbmNlU2V0LCBiYW5rPiB7Cisg
ICAgdXNpbmcgQmFzZSA9IEFsbG9jYXRvclR5cGU8SW5kZXhUeXBlLCBJbnRlcmZlcmVuY2VTZXQs
IGJhbms+OworICAgIHVzaW5nIFRtcE1hcHBlciA9IHR5cGVuYW1lIEJhc2U6OlRtcE1hcHBlcjsK
KyAgICB1c2luZyBCYXNlOjp0bXBUb0luZGV4OwogICAgIHVzaW5nIEJhc2U6Om1faXNPblNlbGVj
dFN0YWNrOwogICAgIHVzaW5nIEJhc2U6Om1fc2VsZWN0U3RhY2s7CiAgICAgdXNpbmcgQmFzZTo6
bV9zaW1wbGlmeVdvcmtsaXN0OwpAQCAtMTQyMywxMiArMTU3MSwxMyBAQCBjbGFzcyBDb2xvcmlu
Z0FsbG9jYXRvciA6IHB1YmxpYyBBbGxvY2F0b3JUeXBlPHVuc2lnbmVkLCBBYnNvbHV0ZVRtcE1h
cHBlcjxiYW5rPgogICAgIHVzaW5nIEJhc2U6Omhhc0ludGVyZmVyZW5jZUVkZ2U7CiAgICAgdXNp
bmcgQmFzZTo6Z2V0QWxpYXM7CiAgICAgdXNpbmcgQmFzZTo6YWRkRWRnZTsKKyAgICB1c2luZyBC
YXNlOjptX2ludGVyZmVyZW5jZUVkZ2VzOwogICAgIHVzaW5nIEJhc2U6Om1fcGlubmVkUmVnczsK
ICAgICB1c2luZyBCYXNlOjptX3JlZ3NJblByaW9yaXR5T3JkZXI7CiAKIHB1YmxpYzoKIAotICAg
IENvbG9yaW5nQWxsb2NhdG9yKENvZGUmIGNvZGUsIFRtcFdpZHRoJiB0bXBXaWR0aCwgY29uc3Qg
VXNlQ291bnRzPFRtcD4mIHVzZUNvdW50cywgY29uc3QgSGFzaFNldDx1bnNpZ25lZD4mIHVuc3Bp
bGxhYmxlVG1wKQorICAgIENvbG9yaW5nQWxsb2NhdG9yKENvZGUmIGNvZGUsIFRtcFdpZHRoJiB0
bXBXaWR0aCwgY29uc3QgVXNlQ291bnRzJiB1c2VDb3VudHMsIGNvbnN0IEJpdFZlY3RvciYgdW5z
cGlsbGFibGVUbXApCiAgICAgICAgIDogQmFzZShjb2RlLCBjb2RlLnJlZ3NJblByaW9yaXR5T3Jk
ZXIoYmFuayksIFRtcE1hcHBlcjo6bGFzdE1hY2hpbmVSZWdpc3RlckluZGV4KCksIHRtcEFycmF5
U2l6ZShjb2RlKSwgdW5zcGlsbGFibGVUbXAsIHVzZUNvdW50cykKICAgICAgICAgLCBtX3RtcFdp
ZHRoKHRtcFdpZHRoKQogICAgIHsKQEAgLTE0NDAsMTMgKzE1ODksMjEgQEAgcHVibGljOgogICAg
ICAgICAgICAgfQogICAgICAgICB9CiAKKyAgICAgICAgbV9pbnRlcmZlcmVuY2VFZGdlcy5zZXRN
YXhUbXBJbmRleChBYnNvbHV0ZVRtcE1hcHBlcjxiYW5rPjo6YWJzb2x1dGVJbmRleChtX2NvZGUu
bnVtVG1wcyhiYW5rKSkpOworCiAgICAgICAgIGluaXRpYWxpemVQcmVjb2xvcmVkVG1wKCk7CiAg
ICAgICAgIGJ1aWxkKCk7CisKKyAgICAgICAgaWYgY29uc3RleHByIChyZXBvcnRJbnRlcmZlcmVu
Y2VHcmFwaE1lbW9yeVVzZSAmJiAoc3RkOjppc19zYW1lPEludGVyZmVyZW5jZVNldCwgTGFyZ2VJ
bnRlcmZlcmVuY2VHcmFwaD46OnZhbHVlIHx8IHN0ZDo6aXNfc2FtZTxJbnRlcmZlcmVuY2VTZXQs
IEh1Z2VJbnRlcmZlcmVuY2VHcmFwaD46OnZhbHVlKSkgeworICAgICAgICAgICAgZGF0YUxvZygi
bnVtVG1wc3xudW1FZGdlc3xtZW1vcnlVc2Uoa0IpOiAiLCBtX2NvZGUubnVtVG1wcyhiYW5rKSwg
IiB8ICIsIG1faW50ZXJmZXJlbmNlRWRnZXMuc2l6ZSgpLCAiIHwgIik7CisgICAgICAgICAgICBt
X2ludGVyZmVyZW5jZUVkZ2VzLmR1bXBNZW1vcnlVc2VJbktCKCk7CisgICAgICAgICAgICBkYXRh
TG9nKCJcbiIpOworICAgICAgICB9CiAgICAgfQogCiAgICAgVG1wIGdldEFsaWFzKFRtcCB0bXAp
IGNvbnN0CiAgICAgewotICAgICAgICByZXR1cm4gVG1wTWFwcGVyOjp0bXBGcm9tQWJzb2x1dGVJ
bmRleChnZXRBbGlhcyhUbXBNYXBwZXI6OmFic29sdXRlSW5kZXgodG1wKSkpOworICAgICAgICBy
ZXR1cm4gVG1wTWFwcGVyOjp0bXBGcm9tQWJzb2x1dGVJbmRleChnZXRBbGlhcyh0bXBUb0luZGV4
KHRtcCkpKTsKICAgICB9CiAKICAgICAvLyBUaGlzIHRlbGxzIHlvdSBpZiBhIE1vdmUgd2lsbCBi
ZSBjb2FsZXNjYWJsZSBpZiB0aGUgc3JjIGFuZCBkc3QgZW5kIHVwIG1hdGNoaW5nLiBUaGlzIG1l
dGhvZApAQCAtMTQ2OSw4ICsxNjI2LDggQEAgcHVibGljOgogICAgICAgICBpZiAobV9jb2FsZXNj
ZWRUbXBzQXRTcGlsbC5pc0VtcHR5KCkpCiAgICAgICAgICAgICByZXR1cm4gdG1wOwogCi0gICAg
ICAgIHVuc2lnbmVkIGFsaWFzSW5kZXggPSBUbXBNYXBwZXI6OmFic29sdXRlSW5kZXgodG1wKTsK
LSAgICAgICAgd2hpbGUgKHVuc2lnbmVkIG5leHRBbGlhc0luZGV4ID0gbV9jb2FsZXNjZWRUbXBz
QXRTcGlsbFthbGlhc0luZGV4XSkKKyAgICAgICAgSW5kZXhUeXBlIGFsaWFzSW5kZXggPSB0bXBU
b0luZGV4KHRtcCk7CisgICAgICAgIHdoaWxlIChJbmRleFR5cGUgbmV4dEFsaWFzSW5kZXggPSBt
X2NvYWxlc2NlZFRtcHNBdFNwaWxsW2FsaWFzSW5kZXhdKQogICAgICAgICAgICAgYWxpYXNJbmRl
eCA9IG5leHRBbGlhc0luZGV4OwogCiAgICAgICAgIFRtcCBhbGlhcyA9IFRtcE1hcHBlcjo6dG1w
RnJvbUFic29sdXRlSW5kZXgoYWxpYXNJbmRleCk7CkBAIC0xNTI3LDcgKzE2ODQsNyBAQCBwdWJs
aWM6CiAgICAgICAgIGNvbnN0IENvbGxlY3Rpb24mIG1fY29sbGVjdGlvbjsKICAgICB9OwogCi0g
ICAgSW5kZXhUb1RtcEl0ZXJhYmxlQWRhcHRvcjxWZWN0b3I8dW5zaWduZWQ+PiBzcGlsbGVkVG1w
cygpIGNvbnN0IHsgcmV0dXJuIG1fc3BpbGxlZFRtcHM7IH0KKyAgICBJbmRleFRvVG1wSXRlcmFi
bGVBZGFwdG9yPFZlY3RvcjxJbmRleFR5cGU+PiBzcGlsbGVkVG1wcygpIGNvbnN0IHsgcmV0dXJu
IG1fc3BpbGxlZFRtcHM7IH0KIAogICAgIGJvb2wgcmVxdWlyZXNTcGlsbGluZygpIGNvbnN0IHsg
cmV0dXJuICFtX3NwaWxsZWRUbXBzLmlzRW1wdHkoKTsgfQogCkBAIC0xNTg0LDEwICsxNzQxLDEw
IEBAIElHTk9SRV9HQ0NfV0FSTklOR1NfRU5ECiAgICAgICAgIGlmIChsZWZ0VG1wLmlzR1AoKSAh
PSAoYmFuayA9PSBHUCkgfHwgcmlnaHRUbXAuaXNHUCgpICE9IChiYW5rID09IEdQKSkKICAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgICAgICB1bnNpZ25lZCBsZWZ0SW5kZXggPSBUbXBN
YXBwZXI6OmFic29sdXRlSW5kZXgobGVmdFRtcCk7Ci0gICAgICAgIHVuc2lnbmVkIHJpZ2h0SW5k
ZXggPSBUbXBNYXBwZXI6OmFic29sdXRlSW5kZXgocmlnaHRUbXApOworICAgICAgICBJbmRleFR5
cGUgbGVmdEluZGV4ID0gdG1wVG9JbmRleChsZWZ0VG1wKTsKKyAgICAgICAgSW5kZXhUeXBlIHJp
Z2h0SW5kZXggPSB0bXBUb0luZGV4KHJpZ2h0VG1wKTsKIAotICAgICAgICByZXR1cm4gIWhhc0lu
dGVyZmVyZW5jZUVkZ2UoSW50ZXJmZXJlbmNlRWRnZVR5cGUobGVmdEluZGV4LCByaWdodEluZGV4
KSk7CisgICAgICAgIHJldHVybiAhaGFzSW50ZXJmZXJlbmNlRWRnZShsZWZ0SW5kZXgsIHJpZ2h0
SW5kZXgpOwogICAgIH0KIAogICAgIHZvaWQgYWRkVG9Mb3dQcmlvcml0eUNvYWxlc2NpbmdDYW5k
aWRhdGVzKEFyZyBsZWZ0LCBBcmcgcmlnaHQpCkBAIC0xNTk2LDggKzE3NTMsOCBAQCBJR05PUkVf
R0NDX1dBUk5JTkdTX0VORAogICAgICAgICBUbXAgbGVmdFRtcCA9IGxlZnQudG1wKCk7CiAgICAg
ICAgIFRtcCByaWdodFRtcCA9IHJpZ2h0LnRtcCgpOwogCi0gICAgICAgIHVuc2lnbmVkIGxlZnRJ
bmRleCA9IFRtcE1hcHBlcjo6YWJzb2x1dGVJbmRleChsZWZ0VG1wKTsKLSAgICAgICAgdW5zaWdu
ZWQgcmlnaHRJbmRleCA9IFRtcE1hcHBlcjo6YWJzb2x1dGVJbmRleChyaWdodFRtcCk7CisgICAg
ICAgIEluZGV4VHlwZSBsZWZ0SW5kZXggPSB0bXBUb0luZGV4KGxlZnRUbXApOworICAgICAgICBJ
bmRleFR5cGUgcmlnaHRJbmRleCA9IHRtcFRvSW5kZXgocmlnaHRUbXApOwogCiAgICAgICAgIHVu
c2lnbmVkIG5leHRNb3ZlSW5kZXggPSBtX2NvYWxlc2NpbmdDYW5kaWRhdGVzLnNpemUoKTsKICAg
ICAgICAgbV9jb2FsZXNjaW5nQ2FuZGlkYXRlcy5hcHBlbmQoeyBsZWZ0SW5kZXgsIHJpZ2h0SW5k
ZXggfSk7CkBAIC0xNjc1LDcgKzE4MzIsNyBAQCBJR05PUkVfR0NDX1dBUk5JTkdTX0VORAogICAg
ICAgICAgICAgQVNTRVJUKHVzZVRtcCk7CiAKICAgICAgICAgICAgIHVuc2lnbmVkIG5leHRNb3Zl
SW5kZXggPSBtX2NvYWxlc2NpbmdDYW5kaWRhdGVzLnNpemUoKTsKLSAgICAgICAgICAgIG1fY29h
bGVzY2luZ0NhbmRpZGF0ZXMuYXBwZW5kKHsgVG1wTWFwcGVyOjphYnNvbHV0ZUluZGV4KHVzZVRt
cCksIFRtcE1hcHBlcjo6YWJzb2x1dGVJbmRleChkZWZUbXApIH0pOworICAgICAgICAgICAgbV9j
b2FsZXNjaW5nQ2FuZGlkYXRlcy5hcHBlbmQoeyB0bXBUb0luZGV4KHVzZVRtcCksIHRtcFRvSW5k
ZXgoZGVmVG1wKSB9KTsKICAgICAgICAgICAgIGlmICh0cmFjZURlYnVnKQogICAgICAgICAgICAg
ICAgIGRhdGFMb2dMbigiTW92ZSBhdCBpbmRleCAiLCBuZXh0TW92ZUluZGV4LCAiIGlzOiAiLCAq
cHJldkluc3QpOwogCkBAIC0xNzQzLDE0ICsxOTAwLDE1IEBAIElHTk9SRV9HQ0NfV0FSTklOR1Nf
RU5ECiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgZm9yIChUbXAgbGl2ZVRtcCA6
IGxpdmVUbXBzKSB7CiAgICAgICAgICAgICAgICAgICAgIEFTU0VSVChsaXZlVG1wLmlzR1AoKSA9
PSAoYmFuayA9PSBHUCkpOwotICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAg
ICAgaWYgKHRyYWNlRGVidWcpCi0gICAgICAgICAgICAgICAgICAgICAgICBkYXRhTG9nKCIgICAg
QWRkaW5nIGRlZi1saXZlIGVkZ2U6ICIsIGFyZywgIiwgIiwgbGl2ZVRtcCwgIlxuIik7CisKKyAg
ICAgICAgICAgICAgICAgICAgZGF0YUxvZ0xuSWYodHJhY2VEZWJ1ZywgIiAgICBBZGRpbmcgZGVm
LWxpdmUgZWRnZTogIiwgYXJnLCAiLCAiLCBsaXZlVG1wKTsKICAgICAgICAgICAgICAgICAgICAg
CiAgICAgICAgICAgICAgICAgICAgIGFkZEVkZ2UoYXJnLCBsaXZlVG1wKTsKICAgICAgICAgICAg
ICAgICB9Ci0gICAgICAgICAgICAgICAgZm9yIChjb25zdCBUbXAmIHBpbm5lZFJlZ1RtcCA6IG1f
cGlubmVkUmVncykKKyAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IFRtcCYgcGlubmVkUmVnVG1w
IDogbV9waW5uZWRSZWdzKSB7CisgICAgICAgICAgICAgICAgICAgIGRhdGFMb2dMbklmKHRyYWNl
RGVidWcsICIgICAgQWRkaW5nIGRlZi1waW5uZWQgZWRnZTogIiwgYXJnLCAiLCAiLCBwaW5uZWRS
ZWdUbXApOwogICAgICAgICAgICAgICAgICAgICBhZGRFZGdlKGFyZywgcGlubmVkUmVnVG1wKTsK
KyAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9KTsKICAgICB9CiAKQEAgLTE3NTgsNyAr
MTkxNiw3IEBAIElHTk9SRV9HQ0NfV0FSTklOR1NfRU5ECiAgICAgewogICAgICAgICBBU1NFUlRf
V0lUSF9NRVNTQUdFKGEuaXNHUCgpID09IGIuaXNHUCgpLCAiQW4gaW50ZXJmZXJlbmNlIGJldHdl
ZW4gcmVnaXN0ZXJzIG9mIGRpZmZlcmVudCB0eXBlcyBkb2VzIG5vdCBtYWtlIHNlbnNlLCBpdCBj
YW4gbGVhZCB0byBub24tY29sb3JhYmxlIGdyYXBocy4iKTsKIAotICAgICAgICBhZGRFZGdlKFRt
cE1hcHBlcjo6YWJzb2x1dGVJbmRleChhKSwgVG1wTWFwcGVyOjphYnNvbHV0ZUluZGV4KGIpKTsK
KyAgICAgICAgYWRkRWRnZSh0bXBUb0luZGV4KGEpLCB0bXBUb0luZGV4KGIpKTsKICAgICB9CiAK
ICAgICAvLyBDYWxsaW5nIHRoaXMgd2l0aG91dCBhIHRtcFdpZHRoIHdpbGwgcGVyZm9ybSBhIG1v
cmUgY29uc2VydmF0aXZlIGNvYWxlc2NpbmcgYW5hbHlzaXMgdGhhdCBhc3N1bWVzCkBAIC0xODIw
LDcgKzE5NzgsNyBAQCBJR05PUkVfR0NDX1dBUk5JTkdTX0VORAogCiBjbGFzcyBHcmFwaENvbG9y
aW5nUmVnaXN0ZXJBbGxvY2F0aW9uIHsKIHB1YmxpYzoKLSAgICBHcmFwaENvbG9yaW5nUmVnaXN0
ZXJBbGxvY2F0aW9uKENvZGUmIGNvZGUsIFVzZUNvdW50czxUbXA+JiB1c2VDb3VudHMpCisgICAg
R3JhcGhDb2xvcmluZ1JlZ2lzdGVyQWxsb2NhdGlvbihDb2RlJiBjb2RlLCBVc2VDb3VudHMmIHVz
ZUNvdW50cykKICAgICAgICAgOiBtX2NvZGUoY29kZSkKICAgICAgICAgLCBtX3VzZUNvdW50cyh1
c2VDb3VudHMpCiAgICAgewpAQCAtMTg0MCw3ICsxOTk4LDcgQEAgcHJpdmF0ZToKICAgICB0ZW1w
bGF0ZTxCYW5rIGJhbms+CiAgICAgdm9pZCBhbGxvY2F0ZU9uQmFuaygpCiAgICAgewotICAgICAg
ICBIYXNoU2V0PHVuc2lnbmVkPiB1bnNwaWxsYWJsZVRtcHMgPSBjb21wdXRlVW5zcGlsbGFibGVU
bXBzPGJhbms+KCk7CisgICAgICAgIEJpdFZlY3RvciB1bnNwaWxsYWJsZVRtcHMgPSBjb21wdXRl
VW5zcGlsbGFibGVUbXBzPGJhbms+KCk7CiAKICAgICAgICAgLy8gRklYTUU6IElmIGEgVG1wIGlz
IHVzZWQgb25seSBmcm9tIGEgU2NyYXRjaCByb2xlIGFuZCB0aGF0IGFyZ3VtZW50IGlzICFhZG1p
dHNTdGFjaywgdGhlbgogICAgICAgICAvLyB3ZSBzaG91bGQgYWRkIHRoZSBUbXAgdG8gdW5zcGls
bGFibGVUbXBzLiBUaGF0IHdpbGwgaGVscCBhdm9pZCByZWxvb3Bpbmcgb25seSB0byB0dXJuIHRo
ZQpAQCAtMTg2NCwxMCArMjAyMiw5IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAvLyBjcmVhdGVk
IFRtcHMgbWF5IGdldCBuYXJyb3dlciB1c2UvZGVmIHdpZHRocy4gT24gdGhlIG90aGVyIGhhbmQs
IHRoZSBzcGlsbGVyIGFscmVhZHkKICAgICAgICAgICAgIC8vIHNlbGVjdHMgd2hpY2ggbW92ZSBp
bnN0cnVjdGlvbiB0byB1c2UgYmFzZWQgb24gdGhlIG9yaWdpbmFsIFRtcCdzIHdpZHRocywgc28g
aXQgbWF5IG5vdAogICAgICAgICAgICAgLy8gbWF0dGVyIHRoYW4gYSBzdWJzZXF1ZW50IGl0ZXJh
dGlvbiBzZWVzIGEgY29uc2VydmF0aXZlIHdpZHRoIGZvciB0aGUgbmV3IFRtcHMuIEFsc28sIHRo
ZQotICAgICAgICAgICAgLy8gcmVjb21wdXRhdGlvbiBtYXkgbm90IGFjdHVhbGx5IGJlIGEgcGVy
Zm9ybWFuY2UgcHJvYmxlbTsgaXQncyBsaWtlbHkgdGhhdCBhIGJldHRlciB3YXkgdG8KLSAgICAg
ICAgICAgIC8vIGltcHJvdmUgcGVyZm9ybWFuY2Ugb2YgVG1wV2lkdGggaXMgdG8gcmVwbGFjZSBp
dHMgSGFzaE1hcCB3aXRoIHNvbWV0aGluZyBlbHNlLiBJdCdzCi0gICAgICAgICAgICAvLyBwb3Nz
aWJsZSB0aGF0IG1vc3Qgb2YgdGhlIFRtcFdpZHRoIG92ZXJoZWFkIGlzIGZyb20gcXVlcmllcyBv
ZiBUbXBXaWR0aCByYXRoZXIgdGhhbiB0aGUKLSAgICAgICAgICAgIC8vIHJlY29tcHV0YXRpb24s
IGluIHdoaWNoIGNhc2Ugc3BlZWRpbmcgdXAgdGhlIGxvb2t1cCB3b3VsZCBiZSBhIGJpZ2dlciB3
aW4uCisgICAgICAgICAgICAvLyByZWNvbXB1dGF0aW9uIG1heSBub3QgYWN0dWFsbHkgYmUgYSBw
ZXJmb3JtYW5jZSBwcm9ibGVtOiB3ZSBzcGVuZCByb3VnaGx5IDMgdG8gNCUgb2YgdGhlCisgICAg
ICAgICAgICAvLyByZWdpc3RlciBhbGxvY2F0b3IgaW4gbV90bXBXaWR0aC5yZWNvbXB1dGUuIElu
IGNvbXBhcmlzb24gd2Ugc3BlbmQgbW9yZSB0aGFuIDQwJSBidWlsZGluZworICAgICAgICAgICAg
Ly8gdGhlIGludGVyZmVyZW5jZSBncmFwaAogICAgICAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1MjQ3OAogICAgICAgICAgICAgbV90bXBXaWR0aC5y
ZWNvbXB1dGU8YmFuaz4obV9jb2RlKTsKIApAQCAtMTg4NSwyMCArMjA0MiwzMSBAQCBwcml2YXRl
OgogICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgICAgIH07CiAKLSAgICAg
ICAgICAgIGlmICh1c2VJUkMoKSkgewotICAgICAgICAgICAgICAgIGlmIChtX2NvZGUubnVtVG1w
cyhiYW5rKSA8IHN0ZDo6bnVtZXJpY19saW1pdHM8dWludDE2X3Q+OjptYXgoKSkgewotICAgICAg
ICAgICAgICAgICAgICBDb2xvcmluZ0FsbG9jYXRvcjxiYW5rLCBJUkMsIEludGVyZmVyZW5jZUVk
Z2U8dWludDE2X3QsIHVpbnQzMl90Pj4gYWxsb2NhdG9yKG1fY29kZSwgbV90bXBXaWR0aCwgbV91
c2VDb3VudHMsIHVuc3BpbGxhYmxlVG1wcyk7CisgICAgICAgICAgICAvLyBUaGUgYml0IHZlY3Rv
ciBhcHByb2FjaCB1c2VzIG4qbiBiaXRzLCBvciAyMGtCIGZvciBuID0gNDAwLgorICAgICAgICAg
ICAgY29uc3RleHByIHVuc2lnbmVkIG1heFNpemVGb3JTbWFsbEludGVyZmVyZW5jZUdyYXBoID0g
NDAwOworICAgICAgICAgICAgaWYgKG1fY29kZS5udW1UbXBzKGJhbmspIDwgbWF4U2l6ZUZvclNt
YWxsSW50ZXJmZXJlbmNlR3JhcGgpIHsKKyAgICAgICAgICAgICAgICBpZiAodXNlSVJDKCkpIHsK
KyAgICAgICAgICAgICAgICAgICAgQ29sb3JpbmdBbGxvY2F0b3I8dWludDE2X3QsIGJhbmssIElS
QywgU21hbGxJbnRlcmZlcmVuY2VHcmFwaD4gYWxsb2NhdG9yKG1fY29kZSwgbV90bXBXaWR0aCwg
bV91c2VDb3VudHMsIHVuc3BpbGxhYmxlVG1wcyk7CiAgICAgICAgICAgICAgICAgICAgIGRvbmUg
PSBkb0FsbG9jYXRpb24oYWxsb2NhdG9yKTsKICAgICAgICAgICAgICAgICB9IGVsc2UgewotICAg
ICAgICAgICAgICAgICAgICBDb2xvcmluZ0FsbG9jYXRvcjxiYW5rLCBJUkMsIEludGVyZmVyZW5j
ZUVkZ2U8dWludDMyX3QsIHVpbnQ2NF90Pj4gYWxsb2NhdG9yKG1fY29kZSwgbV90bXBXaWR0aCwg
bV91c2VDb3VudHMsIHVuc3BpbGxhYmxlVG1wcyk7CisgICAgICAgICAgICAgICAgICAgIENvbG9y
aW5nQWxsb2NhdG9yPHVpbnQxNl90LCBiYW5rLCBCcmlnZ3MsIFNtYWxsSW50ZXJmZXJlbmNlR3Jh
cGg+IGFsbG9jYXRvcihtX2NvZGUsIG1fdG1wV2lkdGgsIG1fdXNlQ291bnRzLCB1bnNwaWxsYWJs
ZVRtcHMpOworICAgICAgICAgICAgICAgICAgICBkb25lID0gZG9BbGxvY2F0aW9uKGFsbG9jYXRv
cik7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSBlbHNlIGlmIChtX2NvZGUubnVt
VG1wcyhiYW5rKSA8IHN0ZDo6bnVtZXJpY19saW1pdHM8dWludDE2X3Q+OjptYXgoKSkgeworICAg
ICAgICAgICAgICAgIGlmICh1c2VJUkMoKSkgeworICAgICAgICAgICAgICAgICAgICBDb2xvcmlu
Z0FsbG9jYXRvcjx1aW50MTZfdCwgYmFuaywgSVJDLCBMYXJnZUludGVyZmVyZW5jZUdyYXBoPiBh
bGxvY2F0b3IobV9jb2RlLCBtX3RtcFdpZHRoLCBtX3VzZUNvdW50cywgdW5zcGlsbGFibGVUbXBz
KTsKKyAgICAgICAgICAgICAgICAgICAgZG9uZSA9IGRvQWxsb2NhdGlvbihhbGxvY2F0b3IpOwor
ICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIENvbG9yaW5nQWxs
b2NhdG9yPHVpbnQxNl90LCBiYW5rLCBCcmlnZ3MsIExhcmdlSW50ZXJmZXJlbmNlR3JhcGg+IGFs
bG9jYXRvcihtX2NvZGUsIG1fdG1wV2lkdGgsIG1fdXNlQ291bnRzLCB1bnNwaWxsYWJsZVRtcHMp
OwogICAgICAgICAgICAgICAgICAgICBkb25lID0gZG9BbGxvY2F0aW9uKGFsbG9jYXRvcik7CiAg
ICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBp
ZiAobV9jb2RlLm51bVRtcHMoYmFuaykgPCBzdGQ6Om51bWVyaWNfbGltaXRzPHVpbnQxNl90Pjo6
bWF4KCkpIHsKLSAgICAgICAgICAgICAgICAgICAgQ29sb3JpbmdBbGxvY2F0b3I8YmFuaywgQnJp
Z2dzLCBJbnRlcmZlcmVuY2VFZGdlPHVpbnQxNl90LCB1aW50MzJfdD4+IGFsbG9jYXRvcihtX2Nv
ZGUsIG1fdG1wV2lkdGgsIG1fdXNlQ291bnRzLCB1bnNwaWxsYWJsZVRtcHMpOworICAgICAgICAg
ICAgICAgIC8vIEhhdmluZyBtb3JlIHRoYW4gMioqMTYgbnVtVG1wcyBjYW4gb2NjdXIgZXZlbiB3
aXRoIE9wdGlvbnM6Om1heFRtcHNGb3JHcmFwaENvbG9yaW5nKCkgPCAyKioxNiwgYmVjYXVzZSBv
ZiBzcGlsbGluZworICAgICAgICAgICAgICAgIGlmICh1c2VJUkMoKSkgeworICAgICAgICAgICAg
ICAgICAgICBDb2xvcmluZ0FsbG9jYXRvcjx1aW50MzJfdCwgYmFuaywgSVJDLCBIdWdlSW50ZXJm
ZXJlbmNlR3JhcGg+IGFsbG9jYXRvcihtX2NvZGUsIG1fdG1wV2lkdGgsIG1fdXNlQ291bnRzLCB1
bnNwaWxsYWJsZVRtcHMpOwogICAgICAgICAgICAgICAgICAgICBkb25lID0gZG9BbGxvY2F0aW9u
KGFsbG9jYXRvcik7CiAgICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAg
ICAgQ29sb3JpbmdBbGxvY2F0b3I8YmFuaywgQnJpZ2dzLCBJbnRlcmZlcmVuY2VFZGdlPHVpbnQz
Ml90LCB1aW50NjRfdD4+IGFsbG9jYXRvcihtX2NvZGUsIG1fdG1wV2lkdGgsIG1fdXNlQ291bnRz
LCB1bnNwaWxsYWJsZVRtcHMpOworICAgICAgICAgICAgICAgICAgICBDb2xvcmluZ0FsbG9jYXRv
cjx1aW50MzJfdCwgYmFuaywgQnJpZ2dzLCBIdWdlSW50ZXJmZXJlbmNlR3JhcGg+IGFsbG9jYXRv
cihtX2NvZGUsIG1fdG1wV2lkdGgsIG1fdXNlQ291bnRzLCB1bnNwaWxsYWJsZVRtcHMpOwogICAg
ICAgICAgICAgICAgICAgICBkb25lID0gZG9BbGxvY2F0aW9uKGFsbG9jYXRvcik7CiAgICAgICAg
ICAgICAgICAgfQogICAgICAgICAgICAgfQpAQCAtMTkwNywxMSArMjA3NSw4IEBAIHByaXZhdGU6
CiAgICAgfQogCiAgICAgdGVtcGxhdGU8QmFuayBiYW5rPgotICAgIEhhc2hTZXQ8dW5zaWduZWQ+
IGNvbXB1dGVVbnNwaWxsYWJsZVRtcHMoKQorICAgIEJpdFZlY3RvciBjb21wdXRlVW5zcGlsbGFi
bGVUbXBzKCkKICAgICB7Ci0KLSAgICAgICAgSGFzaFNldDx1bnNpZ25lZD4gdW5zcGlsbGFibGVU
bXBzOwotCiAgICAgICAgIHN0cnVjdCBSYW5nZSB7CiAgICAgICAgICAgICB1bnNpZ25lZCBmaXJz
dCB7IHN0ZDo6bnVtZXJpY19saW1pdHM8dW5zaWduZWQ+OjptYXgoKSB9OwogICAgICAgICAgICAg
dW5zaWduZWQgbGFzdCB7IDAgfTsKQEAgLTE5NjQsMTIgKzIxMjksMjAgQEAgcHJpdmF0ZToKICAg
ICAgICAgICAgIH0KICAgICAgICAgICAgICsrZ2xvYmFsSW5kZXg7CiAgICAgICAgIH0KKworICAg
ICAgICBCaXRWZWN0b3IgdW5zcGlsbGFibGVUbXBzOworICAgICAgICB1bnNwaWxsYWJsZVRtcHMu
ZW5zdXJlU2l6ZShhcnJheVNpemUpOwogICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBBYnNvbHV0
ZVRtcE1hcHBlcjxiYW5rPjo6bGFzdE1hY2hpbmVSZWdpc3RlckluZGV4KCkgKyAxOyBpIDwgcmFu
Z2VzLnNpemUoKTsgKytpKSB7CiAgICAgICAgICAgICBSYW5nZSYgcmFuZ2UgPSByYW5nZXNbaV07
CiAgICAgICAgICAgICBpZiAocmFuZ2UubGFzdCAtIHJhbmdlLmZpcnN0IDw9IDEgJiYgcmFuZ2Uu
Y291bnQgPiByYW5nZS5hZG1pdFN0YWNrQ291bnQpCi0gICAgICAgICAgICAgICAgdW5zcGlsbGFi
bGVUbXBzLmFkZChpKTsKKyAgICAgICAgICAgICAgICB1bnNwaWxsYWJsZVRtcHMucXVpY2tTZXQo
aSk7CiAgICAgICAgIH0KIAorICAgICAgICBtX2NvZGUuZm9yRWFjaEZhc3RUbXAoWyZdKFRtcCB0
bXApIHsKKyAgICAgICAgICAgIGlmICh0bXAuYmFuaygpID09IGJhbmspCisgICAgICAgICAgICAg
ICAgdW5zcGlsbGFibGVUbXBzLnF1aWNrU2V0KEFic29sdXRlVG1wTWFwcGVyPGJhbms+OjphYnNv
bHV0ZUluZGV4KHRtcCkpOworICAgICAgICB9KTsKKwogICAgICAgICByZXR1cm4gdW5zcGlsbGFi
bGVUbXBzOwogICAgIH0KIApAQCAtMjAzMSwxMiArMjIwNCwxMiBAQCBwcml2YXRlOgogICAgIH0K
IAogICAgIHRlbXBsYXRlPEJhbmsgYmFuaywgdHlwZW5hbWUgQWxsb2NhdG9yVHlwZT4KLSAgICB2
b2lkIGFkZFNwaWxsQW5kRmlsbChjb25zdCBBbGxvY2F0b3JUeXBlJiBhbGxvY2F0b3IsIEhhc2hT
ZXQ8dW5zaWduZWQ+JiB1bnNwaWxsYWJsZVRtcHMpCisgICAgdm9pZCBhZGRTcGlsbEFuZEZpbGwo
Y29uc3QgQWxsb2NhdG9yVHlwZSYgYWxsb2NhdG9yLCBCaXRWZWN0b3ImIHVuc3BpbGxhYmxlVG1w
cykKICAgICB7CiAgICAgICAgIEhhc2hNYXA8VG1wLCBTdGFja1Nsb3QqPiBzdGFja1Nsb3RzOwog
ICAgICAgICBmb3IgKFRtcCB0bXAgOiBhbGxvY2F0b3Iuc3BpbGxlZFRtcHMoKSkgewogICAgICAg
ICAgICAgLy8gQWxsIHRoZSBzcGlsbGVkIHZhbHVlcyBiZWNvbWUgdW5zcGlsbGFibGUuCi0gICAg
ICAgICAgICB1bnNwaWxsYWJsZVRtcHMuYWRkKEFic29sdXRlVG1wTWFwcGVyPGJhbms+OjphYnNv
bHV0ZUluZGV4KHRtcCkpOworICAgICAgICAgICAgdW5zcGlsbGFibGVUbXBzLnNldChBYnNvbHV0
ZVRtcE1hcHBlcjxiYW5rPjo6YWJzb2x1dGVJbmRleCh0bXApKTsKIAogICAgICAgICAgICAgLy8g
QWxsb2NhdGUgc3RhY2sgc2xvdCBmb3IgZWFjaCBzcGlsbGVkIHZhbHVlLgogICAgICAgICAgICAg
U3RhY2tTbG90KiBzdGFja1Nsb3QgPSBtX2NvZGUuYWRkU3RhY2tTbG90KApAQCAtMjEwOSwxMSAr
MjI4Miw4IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgICAgICAgICAvLyB2YWx1ZSByYXRo
ZXIgdGhhbiBsb2FkaW5nIGl0IGZyb20gdGhlIHN0YWNrLiBJbiBvcmRlciBmb3IgdGhhdAogICAg
ICAgICAgICAgICAgICAgICAgICAgLy8gb3B0aW1pemF0aW9uIHRvIGtpY2sgaW4sIHdlIG5lZWQg
dG8gYXZvaWQgcGxhY2luZyB0aGUgVG1wJ3Mgc3RhY2sKICAgICAgICAgICAgICAgICAgICAgICAg
IC8vIGFkZHJlc3MgaW50byB0aGUgaW5zdHJ1Y3Rpb24uCi0gICAgICAgICAgICAgICAgICAgICAg
ICBpZiAoIUFyZzo6aXNDb2xkVXNlKHJvbGUpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgY29uc3QgVXNlQ291bnRzPFRtcD46OkNvdW50cyogY291bnRzID0gbV91c2VDb3VudHNbYXJn
LnRtcCgpXTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoY291bnRzICYmIGNvdW50
cy0+bnVtQ29uc3REZWZzID09IDEgJiYgY291bnRzLT5udW1EZWZzID09IDEpCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgICAgICAgICAgICAgIGlmICghQXJnOjppc0NvbGRVc2Uocm9sZSkgJiYgbV91
c2VDb3VudHMuaXNDb25zdERlZjxiYW5rPihBYnNvbHV0ZVRtcE1hcHBlcjxiYW5rPjo6YWJzb2x1
dGVJbmRleChhcmcudG1wKCkpKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47
CiAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgIFdpZHRo
IHNwaWxsV2lkdGggPSBtX3RtcFdpZHRoLnJlcXVpcmVkV2lkdGgoYXJnLnRtcCgpKTsKICAgICAg
ICAgICAgICAgICAgICAgICAgIGlmIChBcmc6OmlzQW55RGVmKHJvbGUpICYmIHdpZHRoIDwgc3Bp
bGxXaWR0aCkgewpAQCAtMjE2Niw3ICsyMzM2LDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAg
ICAgICAgUkVMRUFTRV9BU1NFUlQoaW5zdEJhbmsgPT0gYmFuayk7CiAgICAgICAgICAgICAgICAg
ICAgIAogICAgICAgICAgICAgICAgICAgICBUbXAgdG1wID0gbV9jb2RlLm5ld1RtcChiYW5rKTsK
LSAgICAgICAgICAgICAgICAgICAgdW5zcGlsbGFibGVUbXBzLmFkZChBYnNvbHV0ZVRtcE1hcHBl
cjxiYW5rPjo6YWJzb2x1dGVJbmRleCh0bXApKTsKKyAgICAgICAgICAgICAgICAgICAgdW5zcGls
bGFibGVUbXBzLnNldChBYnNvbHV0ZVRtcE1hcHBlcjxiYW5rPjo6YWJzb2x1dGVJbmRleCh0bXAp
KTsKICAgICAgICAgICAgICAgICAgICAgaW5zdC5hcmdzLmFwcGVuZCh0bXApOwogICAgICAgICAg
ICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChpbnN0LmFyZ3Muc2l6ZSgpID09IDMpOwogICAgICAg
ICAgICAgICAgICAgICAKQEAgLTIyMTEsNyArMjM4MSw3IEBAIHByaXZhdGU6CiAgICAgICAgICAg
ICAgICAgICAgIH0KIAogICAgICAgICAgICAgICAgICAgICB0bXAgPSBtX2NvZGUubmV3VG1wKGJh
bmspOwotICAgICAgICAgICAgICAgICAgICB1bnNwaWxsYWJsZVRtcHMuYWRkKEFic29sdXRlVG1w
TWFwcGVyPGJhbms+OjphYnNvbHV0ZUluZGV4KHRtcCkpOworICAgICAgICAgICAgICAgICAgICB1
bnNwaWxsYWJsZVRtcHMuc2V0KEFic29sdXRlVG1wTWFwcGVyPGJhbms+OjphYnNvbHV0ZUluZGV4
KHRtcCkpOwogICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgaWYgKHJv
bGUgPT0gQXJnOjpTY3JhdGNoKQogICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwpAQCAt
MjIzNSw3ICsyNDA1LDcgQEAgcHJpdmF0ZToKIAogICAgIENvZGUmIG1fY29kZTsKICAgICBUbXBX
aWR0aCBtX3RtcFdpZHRoOwotICAgIFVzZUNvdW50czxUbXA+JiBtX3VzZUNvdW50czsKKyAgICBV
c2VDb3VudHMmIG1fdXNlQ291bnRzOwogfTsKIAogfSAvLyBhbm9ueW1vdXMgbmFtZXNwYWNlCkBA
IC0yMjQ3LDcgKzI0MTcsNyBAQCB2b2lkIGFsbG9jYXRlUmVnaXN0ZXJzQnlHcmFwaENvbG9yaW5n
KENvZGUmIGNvZGUpCiAgICAgaWYgKHRyYWNlRGVidWcpCiAgICAgICAgIGRhdGFMb2coIkNvZGUg
YmVmb3JlIGdyYXBoIGNvbG9yaW5nOlxuIiwgY29kZSk7CiAKLSAgICBVc2VDb3VudHM8VG1wPiB1
c2VDb3VudHMoY29kZSk7CisgICAgVXNlQ291bnRzIHVzZUNvdW50cyhjb2RlKTsKICAgICBHcmFw
aENvbG9yaW5nUmVnaXN0ZXJBbGxvY2F0aW9uIGdyYXBoQ29sb3JpbmdSZWdpc3RlckFsbG9jYXRp
b24oY29kZSwgdXNlQ291bnRzKTsKICAgICBncmFwaENvbG9yaW5nUmVnaXN0ZXJBbGxvY2F0aW9u
LnJ1bigpOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJD
b2RlLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckNvZGUuaAppbmRleCBjMGJk
MzUyMGQwZDMuLmQ4ZWU0MTI3YjU3MyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2IzL2Fpci9BaXJDb2RlLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJD
b2RlLmgKQEAgLTQwLDYgKzQwLDcgQEAKICNpbmNsdWRlICJTdGFja0FsaWdubWVudC5oIgogI2lu
Y2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+CiAjaW5jbHVkZSA8d3RmL0luZGV4TWFwLmg+CisjaW5jbHVk
ZSA8d3RmL1NtYWxsU2V0Lmg+CiAjaW5jbHVkZSA8d3RmL1dlYWtSYW5kb20uaD4KIAogbmFtZXNw
YWNlIEpTQyB7CkBAIC0zMTEsNyArMzEyLDEzIEBAIHB1YmxpYzoKICAgICB9CiAKICAgICB2b2lk
IGFkZEZhc3RUbXAoVG1wKTsKLSAgICBib29sIGlzRmFzdFRtcChUbXAgdG1wKSBjb25zdCB7IHJl
dHVybiBtX2Zhc3RUbXBzLmNvbnRhaW5zKHRtcCk7IH0KKworICAgIHRlbXBsYXRlPHR5cGVuYW1l
IEZ1bmN0b3I+CisgICAgdm9pZCBmb3JFYWNoRmFzdFRtcChjb25zdCBGdW5jdG9yJiBmdW5jdG9y
KSBjb25zdAorICAgIHsKKyAgICAgICAgZm9yIChUbXAgdG1wIDogbV9mYXN0VG1wcykKKyAgICAg
ICAgICAgIGZ1bmN0b3IodG1wKTsKKyAgICB9CiAgICAgCiAgICAgQ0ZHJiBjZmcoKSBjb25zdCB7
IHJldHVybiAqbV9jZmc7IH0KICAgICAKQEAgLTM3OSw3ICszODYsNyBAQCBwcml2YXRlOgogICAg
IFZlY3RvcjxzdGQ6OnVuaXF1ZV9wdHI8QmFzaWNCbG9jaz4+IG1fYmxvY2tzOwogICAgIFNwYXJz
ZUNvbGxlY3Rpb248U3BlY2lhbD4gbV9zcGVjaWFsczsKICAgICBzdGQ6OnVuaXF1ZV9wdHI8Q0ZH
PiBtX2NmZzsKLSAgICBIYXNoU2V0PFRtcD4gbV9mYXN0VG1wczsKKyAgICBTbWFsbFNldDxUbXAs
IFRtcEhhc2gsIDI+IG1fZmFzdFRtcHM7CiAgICAgQ0NhbGxTcGVjaWFsKiBtX2NDYWxsU3BlY2lh
bCB7IG51bGxwdHIgfTsKICAgICB1bnNpZ25lZCBtX251bUdQVG1wcyB7IDAgfTsKICAgICB1bnNp
Z25lZCBtX251bUZQVG1wcyB7IDAgfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy9haXIvQWlyVXNlQ291bnRzLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fp
clVzZUNvdW50cy5oCmluZGV4IDkwYTI2OGNkNTUyOS4uZTA2NjE1YzllM2QzIDEwMDY0NAotLS0g
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpclVzZUNvdW50cy5oCisrKyBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyVXNlQ291bnRzLmgKQEAgLTEsNSArMSw1IEBACiAv
KgotICogQ29weXJpZ2h0IChDKSAyMDE1LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE1LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zMSwzNCArMzEsMTgg
QEAKICNpbmNsdWRlICJBaXJCbG9ja1dvcmtsaXN0LmgiCiAjaW5jbHVkZSAiQWlyQ29kZS5oIgog
I2luY2x1ZGUgIkFpckluc3RJbmxpbmVzLmgiCi0jaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KLSNp
bmNsdWRlIDx3dGYvTGlzdER1bXAuaD4KKyNpbmNsdWRlICJBaXJUbXBJbmxpbmVzLmgiCisjaW5j
bHVkZSA8d3RmL0NvbW1hUHJpbnRlci5oPgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KIAogbmFt
ZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7IG5hbWVzcGFjZSBBaXIgewogCiBjbGFzcyBDb2Rl
OwogCi0vLyBDb21wdXRlcyB0aGUgbnVtYmVyIG9mIHVzZXMgb2YgYSB2YXJpYWJsZSBiYXNlZCBv
biBmcmVxdWVuY3kgb2YgZXhlY3V0aW9uLiBUaGUgZnJlcXVlbmN5IG9mIGJsb2NrcworLy8gQ29t
cHV0ZXMgdGhlIG51bWJlciBvZiB1c2VzIG9mIGEgdG1wIGJhc2VkIG9uIGZyZXF1ZW5jeSBvZiBl
eGVjdXRpb24uIFRoZSBmcmVxdWVuY3kgb2YgYmxvY2tzCiAvLyB0aGF0IGFyZSBvbmx5IHJlYWNo
YWJsZSBieSByYXJlIGVkZ2VzIGlzIHNjYWxlZCBieSBPcHRpb25zOjpyYXJlQmxvY2tQZW5hbHR5
KCkuCi0KLS8vIFRoaW5nIGNhbiBiZSBlaXRoZXIgVG1wIG9yIEFyZy4KLXRlbXBsYXRlPHR5cGVu
YW1lIFRoaW5nPgogY2xhc3MgVXNlQ291bnRzIHsKIHB1YmxpYzoKLSAgICBzdHJ1Y3QgQ291bnRz
IHsKLSAgICAgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0Ci0gICAgICAgIHsK
LSAgICAgICAgICAgIG91dC5wcmludCgKLSAgICAgICAgICAgICAgICAie251bVdhcm1Vc2VzID0g
IiwgbnVtV2FybVVzZXMsICIsIG51bUNvbGRVc2VzID0gIiwgbnVtQ29sZFVzZXMsICIsIG51bURl
ZnMgPSAiLAotICAgICAgICAgICAgICAgIG51bURlZnMsICJ9Iik7Ci0gICAgICAgIH0KLSAgICAg
ICAgCi0gICAgICAgIGRvdWJsZSBudW1XYXJtVXNlcyB7IDAgfTsKLSAgICAgICAgZG91YmxlIG51
bUNvbGRVc2VzIHsgMCB9OwotICAgICAgICBkb3VibGUgbnVtRGVmcyB7IDAgfTsKLSAgICAgICAg
ZG91YmxlIG51bUNvbnN0RGVmcyB7IDAgfTsKLSAgICB9OwotICAgIAogICAgIFVzZUNvdW50cyhD
b2RlJiBjb2RlKQogICAgIHsKICAgICAgICAgLy8gRmluZCBub24tcmFyZSBibG9ja3MuCkBAIC03
MCw0NyArNTQsNzMgQEAgcHVibGljOgogICAgICAgICAgICAgICAgICAgICBmYXN0V29ya2xpc3Qu
cHVzaChzdWNjZXNzb3IuYmxvY2soKSk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KLSAgICAg
ICAgCisKKyAgICAgICAgdW5zaWduZWQgZ3BBcnJheVNpemUgPSBBYnNvbHV0ZVRtcE1hcHBlcjxH
UD46OmFic29sdXRlSW5kZXgoY29kZS5udW1UbXBzKEdQKSk7CisgICAgICAgIG1fZ3BOdW1XYXJt
VXNlc0FuZERlZnMucmVzaXplKGdwQXJyYXlTaXplKTsKKyAgICAgICAgbV9ncENvbnN0RGVmcy5l
bnN1cmVTaXplKGdwQXJyYXlTaXplKTsKKyAgICAgICAgdW5zaWduZWQgZnBBcnJheVNpemUgPSBB
YnNvbHV0ZVRtcE1hcHBlcjxGUD46OmFic29sdXRlSW5kZXgoY29kZS5udW1UbXBzKEZQKSk7Cisg
ICAgICAgIG1fZnBOdW1XYXJtVXNlc0FuZERlZnMucmVzaXplKGZwQXJyYXlTaXplKTsKKyAgICAg
ICAgbV9mcENvbnN0RGVmcy5lbnN1cmVTaXplKGdwQXJyYXlTaXplKTsKKwogICAgICAgICBmb3Ig
KEJhc2ljQmxvY2sqIGJsb2NrIDogY29kZSkgewogICAgICAgICAgICAgZG91YmxlIGZyZXF1ZW5j
eSA9IGJsb2NrLT5mcmVxdWVuY3koKTsKICAgICAgICAgICAgIGlmICghZmFzdFdvcmtsaXN0LnNh
dyhibG9jaykpCiAgICAgICAgICAgICAgICAgZnJlcXVlbmN5ICo9IE9wdGlvbnM6OnJhcmVCbG9j
a1BlbmFsdHkoKTsKICAgICAgICAgICAgIGZvciAoSW5zdCYgaW5zdCA6ICpibG9jaykgewotICAg
ICAgICAgICAgICAgIGluc3QuZm9yRWFjaDxUaGluZz4oCi0gICAgICAgICAgICAgICAgICAgIFsm
XSAoVGhpbmcmIGFyZywgQXJnOjpSb2xlIHJvbGUsIEJhbmssIFdpZHRoKSB7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICBDb3VudHMmIGNvdW50cyA9IG1fY291bnRzLmFkZChhcmcsIENvdW50cygp
KS5pdGVyYXRvci0+dmFsdWU7Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChBcmc6Omlz
V2FybVVzZShyb2xlKSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb3VudHMubnVtV2Fy
bVVzZXMgKz0gZnJlcXVlbmN5OwotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKEFyZzo6aXND
b2xkVXNlKHJvbGUpKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvdW50cy5udW1Db2xk
VXNlcyArPSBmcmVxdWVuY3k7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoQXJnOjppc0Fu
eURlZihyb2xlKSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb3VudHMubnVtRGVmcyAr
PSBmcmVxdWVuY3k7CisgICAgICAgICAgICAgICAgaW5zdC5mb3JFYWNoPFRtcD4oCisgICAgICAg
ICAgICAgICAgICAgIFsmXSAoVG1wJiB0bXAsIEFyZzo6Um9sZSByb2xlLCBCYW5rIGJhbmssIFdp
ZHRoKSB7CisKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChBcmc6OmlzV2FybVVzZShyb2xl
KSB8fCBBcmc6OmlzQW55RGVmKHJvbGUpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
aWYgKGJhbmsgPT0gR1ApCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fZ3BOdW1X
YXJtVXNlc0FuZERlZnNbQWJzb2x1dGVUbXBNYXBwZXI8R1A+OjphYnNvbHV0ZUluZGV4KHRtcCld
ICs9IGZyZXF1ZW5jeTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIG1fZnBOdW1XYXJtVXNlc0FuZERlZnNbQWJzb2x1dGVU
bXBNYXBwZXI8RlA+OjphYnNvbHV0ZUluZGV4KHRtcCldICs9IGZyZXF1ZW5jeTsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgfSk7CiAKICAgICAgICAgICAg
ICAgICBpZiAoKGluc3Qua2luZC5vcGNvZGUgPT0gTW92ZSB8fCBpbnN0LmtpbmQub3Bjb2RlID09
IE1vdmUzMikKICAgICAgICAgICAgICAgICAgICAgJiYgaW5zdC5hcmdzWzBdLmlzU29tZUltbSgp
Ci0gICAgICAgICAgICAgICAgICAgICYmIGluc3QuYXJnc1sxXS5pczxUaGluZz4oKSkKLSAgICAg
ICAgICAgICAgICAgICAgbV9jb3VudHMuYWRkKGluc3QuYXJnc1sxXS5hczxUaGluZz4oKSwgQ291
bnRzKCkpLml0ZXJhdG9yLT52YWx1ZS5udW1Db25zdERlZnMrKzsKKyAgICAgICAgICAgICAgICAg
ICAgJiYgaW5zdC5hcmdzWzFdLmlzPFRtcD4oKSkgeworICAgICAgICAgICAgICAgICAgICBUbXAg
dG1wID0gaW5zdC5hcmdzWzFdLmFzPFRtcD4oKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHRt
cC5iYW5rKCkgPT0gR1ApCisgICAgICAgICAgICAgICAgICAgICAgICBtX2dwQ29uc3REZWZzLnF1
aWNrU2V0KEFic29sdXRlVG1wTWFwcGVyPEdQPjo6YWJzb2x1dGVJbmRleCh0bXApKTsKKyAgICAg
ICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgbV9mcENvbnN0RGVm
cy5xdWlja1NldChBYnNvbHV0ZVRtcE1hcHBlcjxGUD46OmFic29sdXRlSW5kZXgodG1wKSk7Cisg
ICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgfQogCi0gICAg
Y29uc3QgQ291bnRzKiBvcGVyYXRvcltdKGNvbnN0IFRoaW5nJiBhcmcpIGNvbnN0CisgICAgdGVt
cGxhdGU8QmFuayBiYW5rPgorICAgIGJvb2wgaXNDb25zdERlZih1bnNpZ25lZCBhYnNvbHV0ZUlu
ZGV4KSBjb25zdAorICAgIHsKKyAgICAgICAgaWYgKGJhbmsgPT0gR1ApCisgICAgICAgICAgICBy
ZXR1cm4gbV9ncENvbnN0RGVmcy5xdWlja0dldChhYnNvbHV0ZUluZGV4KTsKKyAgICAgICAgcmV0
dXJuIG1fZnBDb25zdERlZnMucXVpY2tHZXQoYWJzb2x1dGVJbmRleCk7CisgICAgfQorCisgICAg
dGVtcGxhdGU8QmFuayBiYW5rPgorICAgIGZsb2F0IG51bVdhcm1Vc2VzQW5kRGVmcyh1bnNpZ25l
ZCBhYnNvbHV0ZUluZGV4KSBjb25zdAogICAgIHsKLSAgICAgICAgYXV0byBpdGVyID0gbV9jb3Vu
dHMuZmluZChhcmcpOwotICAgICAgICBpZiAoaXRlciA9PSBtX2NvdW50cy5lbmQoKSkKLSAgICAg
ICAgICAgIHJldHVybiBudWxscHRyOwotICAgICAgICByZXR1cm4gJml0ZXItPnZhbHVlOworICAg
ICAgICBpZiAoYmFuayA9PSBHUCkKKyAgICAgICAgICAgIHJldHVybiBtX2dwTnVtV2FybVVzZXNB
bmREZWZzW2Fic29sdXRlSW5kZXhdOworICAgICAgICByZXR1cm4gbV9mcE51bVdhcm1Vc2VzQW5k
RGVmc1thYnNvbHV0ZUluZGV4XTsKICAgICB9CiAKICAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0m
IG91dCkgY29uc3QKICAgICB7Ci0gICAgICAgIG91dC5wcmludChtYXBEdW1wKG1fY291bnRzKSk7
CisgICAgICAgIENvbW1hUHJpbnRlciBjb21tYSgiLCAiKTsKKyAgICAgICAgZm9yICh1bnNpZ25l
ZCBpID0gMDsgaSA8IG1fZ3BOdW1XYXJtVXNlc0FuZERlZnMuc2l6ZSgpOyArK2kpCisgICAgICAg
ICAgICBvdXQucHJpbnQoY29tbWEsIEFic29sdXRlVG1wTWFwcGVyPEdQPjo6dG1wRnJvbUFic29s
dXRlSW5kZXgoaSksICI9PiB7bnVtV2FybVVzZXNBbmREZWZzPSIsIG1fZ3BOdW1XYXJtVXNlc0Fu
ZERlZnNbaV0sICIsIGlzQ29uc3REZWY9IiwgbV9ncENvbnN0RGVmcy5xdWlja0dldChpKSwgIn0i
KTsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fZnBOdW1XYXJtVXNlc0FuZERl
ZnMuc2l6ZSgpOyArK2kpCisgICAgICAgICAgICBvdXQucHJpbnQoY29tbWEsIEFic29sdXRlVG1w
TWFwcGVyPEZQPjo6dG1wRnJvbUFic29sdXRlSW5kZXgoaSksICI9PiB7bnVtV2FybVVzZXNBbmRE
ZWZzPSIsIG1fZnBOdW1XYXJtVXNlc0FuZERlZnNbaV0sICIsIGlzQ29uc3REZWY9IiwgbV9mcENv
bnN0RGVmcy5xdWlja0dldChpKSwgIn0iKTsKICAgICB9CiAKIHByaXZhdGU6Ci0gICAgSGFzaE1h
cDxUaGluZywgQ291bnRzPiBtX2NvdW50czsKKyAgICBWZWN0b3I8ZmxvYXQ+IG1fZ3BOdW1XYXJt
VXNlc0FuZERlZnM7CisgICAgVmVjdG9yPGZsb2F0PiBtX2ZwTnVtV2FybVVzZXNBbmREZWZzOwor
ICAgIEJpdFZlY3RvciBtX2dwQ29uc3REZWZzOworICAgIEJpdFZlY3RvciBtX2ZwQ29uc3REZWZz
OwogfTsKIAogfSB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjM6OkFpcgpkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9Ob2Rlcy5oIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3BhcnNlci9Ob2Rlcy5oCmluZGV4IGVkMTczYzE3YTViYi4uNTYxMjk5YTZhNzBmIDEwMDY0NAot
LS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL05vZGVzLmgKKysrIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3BhcnNlci9Ob2Rlcy5oCkBAIC0zNiw3ICszNiw3IEBACiAjaW5jbHVkZSAi
U3ltYm9sVGFibGUuaCIKICNpbmNsdWRlICJWYXJpYWJsZUVudmlyb25tZW50LmgiCiAjaW5jbHVk
ZSA8d3RmL01hdGhFeHRyYXMuaD4KLSNpbmNsdWRlIDx3dGYvU21hbGxQdHJTZXQuaD4KKyNpbmNs
dWRlIDx3dGYvU21hbGxTZXQuaD4KIAogbmFtZXNwYWNlIEpTQyB7CiAKQEAgLTUzLDcgKzUzLDcg
QEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgY2xhc3MgUmVnaXN0ZXJJRDsKICAgICBjbGFzcyBTY29w
ZU5vZGU7CiAKLSAgICB0eXBlZGVmIFNtYWxsUHRyU2V0PFVuaXF1ZWRTdHJpbmdJbXBsKj4gVW5p
cXVlZFN0cmluZ0ltcGxQdHJTZXQ7CisgICAgdHlwZWRlZiBTbWFsbFNldDxVbmlxdWVkU3RyaW5n
SW1wbCo+IFVuaXF1ZWRTdHJpbmdJbXBsUHRyU2V0OwogCiAgICAgZW51bSBjbGFzcyBPcGVyYXRv
ciA6IHVpbnQ4X3QgewogICAgICAgICBFcXVhbCwKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvQ2hh
bmdlTG9nIGIvU291cmNlL1dURi9DaGFuZ2VMb2cKaW5kZXggYmYzZTM1N2RhNjA1Li5hNmNlNjEz
OTQxYjcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XVEYv
Q2hhbmdlTG9nCkBAIC0xLDMgKzEsNTEgQEAKKzIwMjEtMDUtMTggIFJvYmluIE1vcmlzc2V0ICA8
cm1vcmlzc2V0QGFwcGxlLmNvbT4KKworICAgICAgICBNYWtlIEFpckFsbG9jYXRlUmVnaXN0ZXJz
QnlHcmFwaENvbG9yaW5nIHVzZSBsZXNzIG1lbW9yeQorICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjI1ODQ4CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgVHdvIGNoYW5nZXM6IHRoZSBhZGRpdGlvbiBvZiBMaWtl
bHlEZW5zZVVuc2lnbmVkSW50ZWdlclNldCwgYW5kIHZhcmlvdXMgaW1wcm92ZW1lbnRzIHRvIFNt
YWxsKFB0cilTZXQuCisKKyAgICAgICAgVGhlIGxhdHRlciBpbmNsdWRlOgorICAgICAgICAtIFJl
bmFtaW5nIFNtYWxsUHRyU2V0IGludG8gU21hbGxTZXQsIGFzIGl0IG5vdyBzdXBwb3J0cyBpbnRl
Z2VycyBhcyB3ZWxsIGFzIHBvaW50ZXJzLgorICAgICAgICAtIFJlZHVjaW5nIGl0cyBzaXplIGJ5
IHNoYXJpbmcgdGhlIHNhbWUgc3RvcmFnZSBmb3IgbV9idWZmZXIgYW5kIGZvciBtX3NtYWxsU3Rv
cmFnZS4KKyAgICAgICAgVGhpcyBpcyBzYWZlIHRvIGRvLCBiZWNhdXNlIGFsbCBvcGVyYXRpb25z
IGJyYW5jaCBvbiBpc1NtYWxsKCkgd2hpY2ggZGVwZW5kcyBwdXJlbHkgb24gbV9jYXBhY2l0eS4K
KyAgICAgICAgLSBBZGRpbmcgdHJpdmlhbCBzaXplKCksIGlzRW1wdHkoKSBhbmQgbWVtb3J5VXNl
KCkgbWV0aG9kcworICAgICAgICAtIEFkZGluZyBhIGNvbW1lbnQgYXQgdGhlIHRvcCBvZiB0aGUg
ZmlsZSBleHBsYWluaW5nIHdoZW4gdG8gdXNlLCBhbmQgKG1vcmUgaW1wb3J0YW50bHkpIG5vdCB0
byB1c2UgU21hbGxTZXQuCisKKyAgICAgICAgTGlrZWx5RGVuc2VVbnNpZ25lZEludGVnZXJTZXQg
aXMgYW4gZXZlbiBtb3JlIHNwZWNpYWxpemVkIGRhdGEgc3RydWN0dXJlLCB0aGF0IGNhbiByZXBy
ZXNlbnQgc2V0cyBvZiB1bnNpZ25lZCBpbnRlZ2VycyB2ZXJ5IGNvbXBhY3RseSBpZiB0aGV5IGFy
ZSBjbHVzdGVyZWQuCisKKyAgICAgICAgRmluYWxseSBJIGFkZGVkIGFuIG91dE9mTGluZU1lbW9y
eVVzZSgpIG1ldGhvZCB0byBCaXRWZWN0b3IsIG1ha2luZyBpdCBtb3JlIGNvbnZlbmllbnQgdG8g
Y29tcGFyZSB0aGUgbWVtb3J5IGNvbnN1bXB0aW9uIG9mIGRpZmZlcmVudCBkYXRhIHN0cnVjdHVy
ZXMgaW4gdGhlIHJlZ2lzdGVyIGFsbG9jYXRvci4KKworICAgICAgICAqIFdURi54Y29kZXByb2ov
cHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIHd0Zi9CaXRWZWN0b3IuaDoKKyAgICAgICAgKiB3
dGYvQ01ha2VMaXN0cy50eHQ6CisgICAgICAgICogd3RmL0xpa2VseURlbnNlVW5zaWduZWRJbnRl
Z2VyU2V0LmNwcDogQ29waWVkIGZyb20gU291cmNlL1dURi93dGYvU21hbGxQdHJTZXQuY3BwLgor
ICAgICAgICAqIHd0Zi9MaWtlbHlEZW5zZVVuc2lnbmVkSW50ZWdlclNldC5oOiBBZGRlZC4KKyAg
ICAgICAgKFdURjo6TGlrZWx5RGVuc2VVbnNpZ25lZEludGVnZXJTZXQ6Okxpa2VseURlbnNlVW5z
aWduZWRJbnRlZ2VyU2V0KToKKyAgICAgICAgKFdURjo6TGlrZWx5RGVuc2VVbnNpZ25lZEludGVn
ZXJTZXQ6On5MaWtlbHlEZW5zZVVuc2lnbmVkSW50ZWdlclNldCk6CisgICAgICAgIChXVEY6Okxp
a2VseURlbnNlVW5zaWduZWRJbnRlZ2VyU2V0Ojpjb250YWlucyBjb25zdCk6CisgICAgICAgIChX
VEY6Okxpa2VseURlbnNlVW5zaWduZWRJbnRlZ2VyU2V0OjphZGQpOgorICAgICAgICAoV1RGOjpM
aWtlbHlEZW5zZVVuc2lnbmVkSW50ZWdlclNldDo6c2l6ZSBjb25zdCk6CisgICAgICAgIChXVEY6
Okxpa2VseURlbnNlVW5zaWduZWRJbnRlZ2VyU2V0OjppdGVyYXRvcjo6aXRlcmF0b3IpOgorICAg
ICAgICAoV1RGOjpMaWtlbHlEZW5zZVVuc2lnbmVkSW50ZWdlclNldDo6aXRlcmF0b3I6Om1fc2hp
ZnQpOgorICAgICAgICAoV1RGOjpMaWtlbHlEZW5zZVVuc2lnbmVkSW50ZWdlclNldDo6aXRlcmF0
b3I6Om9wZXJhdG9yKyspOgorICAgICAgICAoV1RGOjpMaWtlbHlEZW5zZVVuc2lnbmVkSW50ZWdl
clNldDo6aXRlcmF0b3I6Om9wZXJhdG9yKiBjb25zdCk6CisgICAgICAgIChXVEY6Okxpa2VseURl
bnNlVW5zaWduZWRJbnRlZ2VyU2V0OjppdGVyYXRvcjo6b3BlcmF0b3I9PSBjb25zdCk6CisgICAg
ICAgIChXVEY6Okxpa2VseURlbnNlVW5zaWduZWRJbnRlZ2VyU2V0OjppdGVyYXRvcjo6b3BlcmF0
b3IhPSBjb25zdCk6CisgICAgICAgIChXVEY6Okxpa2VseURlbnNlVW5zaWduZWRJbnRlZ2VyU2V0
OjpiZWdpbiBjb25zdCk6CisgICAgICAgIChXVEY6Okxpa2VseURlbnNlVW5zaWduZWRJbnRlZ2Vy
U2V0OjplbmQgY29uc3QpOgorICAgICAgICAoV1RGOjpMaWtlbHlEZW5zZVVuc2lnbmVkSW50ZWdl
clNldDo6bWVtb3J5VXNlIGNvbnN0KToKKyAgICAgICAgKFdURjo6TGlrZWx5RGVuc2VVbnNpZ25l
ZEludGVnZXJTZXQ6OnZhbGlkYXRlIGNvbnN0KToKKyAgICAgICAgKFdURjo6TGlrZWx5RGVuc2VV
bnNpZ25lZEludGVnZXJTZXQ6OmlzQml0VmVjdG9yIGNvbnN0KToKKyAgICAgICAgKFdURjo6TGlr
ZWx5RGVuc2VVbnNpZ25lZEludGVnZXJTZXQ6OmlzVmFsaWRWYWx1ZSBjb25zdCk6CisgICAgICAg
IChXVEY6Okxpa2VseURlbnNlVW5zaWduZWRJbnRlZ2VyU2V0Ojp0cmFuc2l0aW9uVG9IYXNoU2V0
KToKKyAgICAgICAgKFdURjo6TGlrZWx5RGVuc2VVbnNpZ25lZEludGVnZXJTZXQ6OnRyYW5zaXRp
b25Ub0JpdFZlY3Rvcik6CisgICAgICAgICogd3RmL1NtYWxsUHRyU2V0Lmg6IFJlbW92ZWQuCisg
ICAgICAgICogd3RmL1NtYWxsU2V0LmNwcDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XVEYvd3RmL1Nt
YWxsUHRyU2V0LmNwcC4KKyAgICAgICAgKiB3dGYvU21hbGxTZXQuaDogQWRkZWQuCisKIDIwMjEt
MDUtMTggIFlvc2hpYWtpIEppdHN1a2F3YSAgPHlvc2hpYWtpLmppdHN1a2F3YUBzb255LmNvbT4K
IAogICAgICAgICBbUGxheVN0YXRpb25dIEZpeCBQbGF5U3RhdGlvbiBwb3J0CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV1RGL1dURi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvU291cmNlL1dURi9X
VEYueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRleCBiMTFlMDk4Y2U0NzcuLjllNjIxMDIy
MTUxNCAxMDA2NDQKLS0tIGEvU291cmNlL1dURi9XVEYueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJv
agorKysgYi9Tb3VyY2UvV1RGL1dURi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC00Miw3
ICs0Miw3IEBACiAJCTBGOUQzMzYwMTY1REJBNzMwMDVBRDM4NyAvKiBGaWxlUHJpbnRTdHJlYW0u
Y3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY5RDMz
NUIxNjVEQkE3MzAwNUFEMzg3IC8qIEZpbGVQcmludFN0cmVhbS5jcHAgKi87IH07CiAJCTBGOUQz
MzYyMTY1REJBNzMwMDVBRDM4NyAvKiBQcmludFN0cmVhbS5jcHAgaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjlEMzM1RDE2NURCQTczMDA1QUQzODcgLyog
UHJpbnRTdHJlYW0uY3BwICovOyB9OwogCQkwRkE2RjM4RjIwQ0M1ODBGMDBBMDNEQ0QgLyogU2Vn
bWVudGVkVmVjdG9yLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDBGQTZGMzhFMjBDQzU4MEUwMEEwM0RDRCAvKiBTZWdtZW50ZWRWZWN0b3IuY3BwICov
OyB9OwotCQkwRkE2RjM5MzIwQ0M3M0EzMDBBMDNEQ0QgLyogU21hbGxQdHJTZXQuY3BwIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZBNkYzOTIyMENDNzNB
MjAwQTAzRENEIC8qIFNtYWxsUHRyU2V0LmNwcCAqLzsgfTsKKwkJMEZBNkYzOTMyMENDNzNBMzAw
QTAzRENEIC8qIFNtYWxsU2V0LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDBGQTZGMzkyMjBDQzczQTIwMEEwM0RDRCAvKiBTbWFsbFNldC5jcHAgKi87
IH07CiAJCTBGQTZGMzk1MjBDQ0FDRTkwMEEwM0RDRCAvKiBVbmlxdWVBcnJheS5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkE2RjM5NDIwQ0NBQ0U5
MDBBMDNEQ0QgLyogVW5pcXVlQXJyYXkuY3BwICovOyB9OwogCQkwRkREQkZBNzE2NjZERkEzMDBD
NTVGRUYgLyogU3RyaW5nUHJpbnRTdHJlYW0uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMEZEREJGQTUxNjY2REZBMzAwQzU1RkVGIC8qIFN0cmluZ1By
aW50U3RyZWFtLmNwcCAqLzsgfTsKIAkJMEZFMTY0NkExQjZGRkM5NjAwNDAwRTdDIC8qIExvY2su
Y3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFMTY0
NjgxQjZGRkM5NjAwNDAwRTdDIC8qIExvY2suY3BwICovOyB9OwpAQCAtNjYsNiArNjYsNyBAQAog
CQkyQ0RFRDBFRjE4MTE1QzM4MDA0REJBNzAgLyogUnVuTG9vcENGLmNwcCBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDJDREVEMEVFMTgxMTVDMzgwMDREQkE3
MCAvKiBSdW5Mb29wQ0YuY3BwICovOyB9OwogCQkyQ0RFRDBGMzE4MTE1Qzg1MDA0REJBNzAgLyog
UnVuTG9vcC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSAyQ0RFRDBGMTE4MTE1Qzg1MDA0REJBNzAgLyogUnVuTG9vcC5jcHAgKi87IH07CiAJCTMzMzdE
QjlDRTc0MzQxMEZBRjA3NkUxNyAvKiBTdGFja1RyYWNlLmNwcCBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDMxM0VERUM5Nzc4RTQ5QzlCRUE5MUNGQyAvKiBT
dGFja1RyYWNlLmNwcCAqLzsgfTsKKwkJMzM3QjJENkEyNjU0NkVCMzAwRERGRDNEIC8qIExpa2Vs
eURlbnNlVW5zaWduZWRJbnRlZ2VyU2V0LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDMzN0IyRDY4MjY1NDZFQUEwMERERkQzRCAvKiBMaWtlbHlEZW5z
ZVVuc2lnbmVkSW50ZWdlclNldC5jcHAgKi87IH07CiAJCTQ0MjdDNUFBMjFGNkQ2QzMwMEE2MTJB
NCAvKiBBU0NJSUNUeXBlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDQ0MjdDNUE5MjFGNkQ2QzMwMEE2MTJBNCAvKiBBU0NJSUNUeXBlLmNwcCAqLzsg
fTsKIAkJNDZCRUI2RUIyMkZGRTI0OTAwMjY5ODY3IC8qIFJlZkNvdW50ZWQuY3BwIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDZCRUI2RTkyMkZGRERENTAw
MjY5ODY3IC8qIFJlZkNvdW50ZWQuY3BwICovOyB9OwogCQk1MERFMzVGNTIxNUJCMDE1MDBCOTc5
QzcgLyogRXh0ZXJuYWxTdHJpbmdJbXBsLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDUwREUzNUYzMjE1QkIwMTUwMEI5NzlDNyAvKiBFeHRlcm5hbFN0
cmluZ0ltcGwuY3BwICovOyB9OwpAQCAtMjcyLDcgKzI3Myw3IEBACiAJCTBGOURBQTA1MUZEMUMz
N0IwMDc5QzVCMiAvKiBTdGFja1Nob3RQcm9maWxlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBTdGFja1Nob3RQcm9maWxlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQkwRkE2RjM4RTIwQ0M1ODBFMDBBMDNEQ0QgLyogU2VnbWVudGVkVmVjdG9yLmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFNlZ21lbnRlZFZlY3Rvci5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGQTZGMzkwMjBDQzYxRUIwMEEwM0RDRCAvKiBS
ZWZDb3VudGVkQXJyYXkuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
UmVmQ291bnRlZEFycmF5LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMEZBNkYz
OTIyMENDNzNBMjAwQTAzRENEIC8qIFNtYWxsUHRyU2V0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgcGF0aCA9IFNtYWxsUHRyU2V0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKKwkJMEZBNkYzOTIyMENDNzNBMjAwQTAzRENEIC8qIFNtYWxsU2V0LmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFNtYWxsU2V0LmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJMEZBNkYzOTQyMENDQUNFOTAwQTAzRENEIC8qIFVuaXF1ZUFycmF5
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFVuaXF1ZUFycmF5LmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZCMTRFMTgxODBGQTIxODAwOUI2QjRE
IC8qIEJhZy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBCYWcuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZCMTRFMUExODEwRTFEQTAwOUI2QjREIC8qIEJhZ1Rv
SGFzaE1hcC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBCYWdUb0hhc2hNYXAuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKQEAgLTM2OCw2ICszNjksOCBAQAogCQkzMDRDQTRFNDEzNzU0MzdFQkU5MzFE
MDMgLyogTWFya2FibGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTWFya2Fi
bGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMzEzN0UxRDdEQkQ4NEFDMzhGQUU0
RDM0IC8qIEluZGV4U2V0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEluZGV4
U2V0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTMxM0VERUM5Nzc4RTQ5QzlCRUE5
MUNGQyAvKiBTdGFja1RyYWNlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0
aCA9IFN0YWNrVHJhY2UuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkzMzdCMkQ2
ODI2NTQ2RUFBMDBEREZEM0QgLyogTGlrZWx5RGVuc2VVbnNpZ25lZEludGVnZXJTZXQuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBwYXRoID0gTGlrZWx5RGVuc2VVbnNpZ25lZEludGVnZXJTZXQuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQkzMzdCMkQ2OTI2NTQ2RUFBMDBEREZEM0QgLyogTGlr
ZWx5RGVuc2VVbnNpZ25lZEludGVnZXJTZXQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTGlrZWx5RGVuc2VV
bnNpZ25lZEludGVnZXJTZXQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMzdDN0ND
MjkxRUE0MEE3MzAwN0JEOTU2IC8qIFdlYWtMaW5raW5nLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IFdlYWtMaW5raW5nLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTM4MjAyOUUyNDZDODRCMDA5OUZENjc2NCAvKiBBU0NJSUxpdGVyYWwuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gQVNDSUlMaXRlcmFsLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTM5MUJENkJBNEQxNjRGRDI5NEY5QTkzRCAvKiBTdGRNYXAuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU3RkTWFwLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CkBAIC00NDIsNyArNDQ1LDcgQEAKIAkJNzBFQ0E2MEIxQjAyNDI2ODAwNDQ5NzM5IC8qIFN5
bWJvbEltcGwuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU3ltYm9sSW1wbC5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3MEVDQTYwQzFCMDI0MjY4MDA0NDk3Mzkg
LyogVW5pcXVlZFN0cmluZ0ltcGwuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
VW5pcXVlZFN0cmluZ0ltcGwuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzkwMzhF
MDUyMjRCMDVBNzAwNEMwNzM4IC8qIFNwYW5uaW5nVHJlZS5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBTcGFubmluZ1RyZWUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
LQkJNzkzNkQ2QTkxQzk5RjhBRTAwMEQxQUVEIC8qIFNtYWxsUHRyU2V0LmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNtYWxsUHRyU2V0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCTc5MzZENkE5MUM5OUY4QUUwMDBEMUFFRCAvKiBTbWFsbFNldC5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTbWFsbFNldC5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQk3OTNCRkFERDlDRUQ0NEI4QjlGQkNBMTYgLyogU3RkVW5vcmRlcmVkTWFwLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFN0ZFVub3JkZXJlZE1hcC5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3OTUyMTIwMjFGNDI1ODg4MDBCRDY0MjEgLyogU2lu
Z2xlUm9vdEdyYXBoLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNpbmdsZVJv
b3RHcmFwaC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3QTA1MDkzRDFGQjlEQ0M1
MDBCMzNGQjggLyogSlNPTlZhbHVlcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBKU09OVmFsdWVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xMjQ0LDggKzEy
NDcsMTAgQEAKIAkJCQlBNzQ4NzQ0RjE3QTBCREFFMDBGQTA0Q0IgLyogU2l4Q2hhcmFjdGVySGFz
aC5jcHAgKi8sCiAJCQkJQTc0ODc0NTAxN0EwQkRBRTAwRkEwNENCIC8qIFNpeENoYXJhY3Rlckhh
c2guaCAqLywKIAkJCQlBOEE0NzMwQzE1MUE4MjVCMDA0MTIzRkYgLyogU2l6ZUxpbWl0cy5jcHAg
Ki8sCi0JCQkJMEZBNkYzOTIyMENDNzNBMjAwQTAzRENEIC8qIFNtYWxsUHRyU2V0LmNwcCAqLywK
LQkJCQk3OTM2RDZBOTFDOTlGOEFFMDAwRDFBRUQgLyogU21hbGxQdHJTZXQuaCAqLywKKwkJCQkw
RkE2RjM5MjIwQ0M3M0EyMDBBMDNEQ0QgLyogU21hbGxTZXQuY3BwICovLAorCQkJCTc5MzZENkE5
MUM5OUY4QUUwMDBEMUFFRCAvKiBTbWFsbFNldC5oICovLAorCQkJCTMzN0IyRDY4MjY1NDZFQUEw
MERERkQzRCAvKiBMaWtlbHlEZW5zZVVuc2lnbmVkSW50ZWdlclNldC5jcHAgKi8sCisJCQkJMzM3
QjJENjkyNjU0NkVBQTAwRERGRDNEIC8qIExpa2VseURlbnNlVW5zaWduZWRJbnRlZ2VyU2V0Lmgg
Ki8sCiAJCQkJQTMwRDQxMkQxRjBERTEzRjAwQjcxOTU0IC8qIFNvZnRMaW5raW5nLmggKi8sCiAJ
CQkJOTMxNTZDOEQyNjJDOTgyMjAwRUFFMjdCIC8qIFNvcnRlZEFycmF5TWFwLmggKi8sCiAJCQkJ
NzkwMzhFMDUyMjRCMDVBNzAwNEMwNzM4IC8qIFNwYW5uaW5nVHJlZS5oICovLApAQCAtMTcwMCw2
ICsxNzA1LDcgQEAKIAkJCQlBOEE0NzNCNTE1MUE4MjVCMDA0MTIzRkYgLyogZml4ZWQtZHRvYS5j
YyBpbiBTb3VyY2VzICovLAogCQkJCTFBMUQ4QjlFMTczMTg3OTgwMDE0MURBNCAvKiBGdW5jdGlv
bkRpc3BhdGNoZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEY1QkYxNzYxRjIzRDQ5QTAwMjlE
OTFEIC8qIEdpZ2FjYWdlLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTMzN0IyRDZBMjY1NDZFQjMw
MERERkQzRCAvKiBMaWtlbHlEZW5zZVVuc2lnbmVkSW50ZWdlclNldC5jcHAgaW4gU291cmNlcyAq
LywKIAkJCQkwRjMwQkE5MDFFNzg3MDhFMDAyQ0E4NDcgLyogR2xvYmFsVmVyc2lvbi5jcHAgaW4g
U291cmNlcyAqLywKIAkJCQkyQ0NEODkyQTE1QzAzOTAyMDAyODUwODMgLyogR3JlZ29yaWFuRGF0
ZVRpbWUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQThBNDczRDgxNTFBODI1QjAwNDEyM0ZGIC8q
IEhhc2hUYWJsZS5jcHAgaW4gU291cmNlcyAqLywKQEAgLTE3NjAsNyArMTc2Niw3IEBACiAJCQkJ
NTMxMUJENTMxRUE3MUNBRDAwNTI1MjgxIC8qIFNpZ25hbHMuY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkJQTc0ODc0NTIxN0EwQkRBRTAwRkEwNENCIC8qIFNpeENoYXJhY3Rlckhhc2guY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJQThBNDc0MjUxNTFBODI1QjAwNDEyM0ZGIC8qIFNpemVMaW1pdHMuY3Bw
IGluIFNvdXJjZXMgKi8sCi0JCQkJMEZBNkYzOTMyMENDNzNBMzAwQTAzRENEIC8qIFNtYWxsUHRy
U2V0LmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBGQTZGMzkzMjBDQzczQTMwMEEwM0RDRCAvKiBT
bWFsbFNldC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBOEE0NzQyNzE1MUE4MjVCMDA0MTIzRkYg
LyogU3RhY2tCb3VuZHMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJRkVFQTRERjkyMTZEN0JFNDAw
QUMwNjAyIC8qIFN0YWNrUG9pbnRlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlGRURBQ0QzRDE2
MzBGODNGMDBDNjk2MzQgLyogU3RhY2tTdGF0cy5jcHAgaW4gU291cmNlcyAqLywKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XVEYvd3RmL0JpdFZlY3Rvci5oIGIvU291cmNlL1dURi93dGYvQml0VmVjdG9y
LmgKaW5kZXggZGQzOGJkODg4MjQyLi4xOWJlNDcyNjI4Y2YgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
VEYvd3RmL0JpdFZlY3Rvci5oCisrKyBiL1NvdXJjZS9XVEYvd3RmL0JpdFZlY3Rvci5oCkBAIC0z
NDksNiArMzQ5LDEzIEBAIHB1YmxpYzoKICAgICAvLyBVc2UgdGhpcyB0byBpdGVyYXRlIG92ZXIg
c2V0IGJpdHMuCiAgICAgaXRlcmF0b3IgYmVnaW4oKSBjb25zdCB7IHJldHVybiBpdGVyYXRvcigq
dGhpcywgZmluZEJpdCgwLCB0cnVlKSk7IH0KICAgICBpdGVyYXRvciBlbmQoKSBjb25zdCB7IHJl
dHVybiBpdGVyYXRvcigqdGhpcywgc2l6ZSgpKTsgfQorCisgICAgdW5zaWduZWQgb3V0T2ZMaW5l
TWVtb3J5VXNlKCkgY29uc3QKKyAgICB7CisgICAgICAgIGlmIChpc0lubGluZSgpKQorICAgICAg
ICAgICAgcmV0dXJuIDA7CisgICAgICAgIHJldHVybiBieXRlQ291bnQoc2l6ZSgpKTsKKyAgICB9
CiAgICAgICAgIAogcHJpdmF0ZToKICAgICBmcmllbmQgY2xhc3MgSlNDOjpDYWNoZWRCaXRWZWN0
b3I7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9DTWFrZUxpc3RzLnR4dCBiL1NvdXJjZS9X
VEYvd3RmL0NNYWtlTGlzdHMudHh0CmluZGV4IGU3ZGJjNGYwMmZhMC4uYWMzZTI5MzU5NmI2IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi9DTWFrZUxpc3RzLnR4dAorKysgYi9Tb3VyY2UvV1RG
L3d0Zi9DTWFrZUxpc3RzLnR4dApAQCAtMTExLDYgKzExMSw3IEBAIHNldChXVEZfUFVCTElDX0hF
QURFUlMKICAgICBLZXlWYWx1ZVBhaXIuaAogICAgIExFQkRlY29kZXIuaAogICAgIExhbmd1YWdl
LmgKKyAgICBMaWtlbHlEZW5zZVVuc2lnbmVkSW50ZWdlclNldC5oCiAgICAgTGlzdER1bXAuaAog
ICAgIExpc3RIYXNoU2V0LmgKICAgICBMaXZlbmVzcy5oCkBAIC0yMzUsNyArMjM2LDcgQEAgc2V0
KFdURl9QVUJMSUNfSEVBREVSUwogICAgIFNpbmdseUxpbmtlZExpc3QuaAogICAgIFNpbmdseUxp
bmtlZExpc3RXaXRoVGFpbC5oCiAgICAgU2l4Q2hhcmFjdGVySGFzaC5oCi0gICAgU21hbGxQdHJT
ZXQuaAorICAgIFNtYWxsU2V0LmgKICAgICBTb2Z0TGlua2luZy5oCiAgICAgU29ydGVkQXJyYXlN
YXAuaAogICAgIFNwYW5uaW5nVHJlZS5oCkBAIC00MTMsNiArNDE0LDcgQEAgc2V0KFdURl9TT1VS
Q0VTCiAgICAgSlNPTlZhbHVlcy5jcHAKICAgICBKU1ZhbHVlTWFsbG9jLmNwcAogICAgIExhbmd1
YWdlLmNwcAorICAgIExpa2VseURlbnNlVW5zaWduZWRJbnRlZ2VyU2V0LmNwcAogICAgIExvY2su
Y3BwCiAgICAgTG9ja2VkUHJpbnRTdHJlYW0uY3BwCiAgICAgTG9nZ2VyLmNwcApAQCAtNDQzLDcg
KzQ0NSw3IEBAIHNldChXVEZfU09VUkNFUwogICAgIFNlY29uZHMuY3BwCiAgICAgU2VnbWVudGVk
VmVjdG9yLmNwcAogICAgIFNpeENoYXJhY3Rlckhhc2guY3BwCi0gICAgU21hbGxQdHJTZXQuY3Bw
CisgICAgU21hbGxTZXQuY3BwCiAgICAgU3RhY2tCb3VuZHMuY3BwCiAgICAgU3RhY2tQb2ludGVy
LmNwcAogICAgIFN0YWNrU3RhdHMuY3BwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9MaWtl
bHlEZW5zZVVuc2lnbmVkSW50ZWdlclNldC5jcHAgYi9Tb3VyY2UvV1RGL3d0Zi9MaWtlbHlEZW5z
ZVVuc2lnbmVkSW50ZWdlclNldC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MDAwMDAwLi4zMTU3MzllZGQ0YjIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV1RGL3d0Zi9M
aWtlbHlEZW5zZVVuc2lnbmVkSW50ZWdlclNldC5jcHAKQEAgLTAsMCArMSwzNSBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMg
SVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAor
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcu
aCIKKyNpbmNsdWRlIDx3dGYvTGlrZWx5RGVuc2VVbnNpZ25lZEludGVnZXJTZXQuaD4KKworI2lu
Y2x1ZGUgPHd0Zi9OZXZlckRlc3Ryb3llZC5oPgorCituYW1lc3BhY2UgV1RGIHsKKworREVGSU5F
X0FMTE9DQVRPUl9XSVRIX0hFQVBfSURFTlRJRklFUihMaWtlbHlEZW5zZVVuc2lnbmVkSW50ZWdl
clNldCk7CisKK30gLy8gbmFtZXNwYWNlIFdURgpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYv
TGlrZWx5RGVuc2VVbnNpZ25lZEludGVnZXJTZXQuaCBiL1NvdXJjZS9XVEYvd3RmL0xpa2VseURl
bnNlVW5zaWduZWRJbnRlZ2VyU2V0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MDAwMDAwLi45YjZiM2Q4N2U3ODQKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV1RGL3d0Zi9M
aWtlbHlEZW5zZVVuc2lnbmVkSW50ZWdlclNldC5oCkBAIC0wLDAgKzEsMzIwIEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJ
UycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisg
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNp
bmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgorI2luY2x1ZGUgPHd0Zi9CaXRWZWN0b3IuaD4KKyNp
bmNsdWRlIDx3dGYvRmFzdE1hbGxvYy5oPgorI2luY2x1ZGUgPHd0Zi9IYXNoRnVuY3Rpb25zLmg+
CisjaW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4KKyNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4K
KyNpbmNsdWRlIDx3dGYvVmFyaWFudC5oPgorCituYW1lc3BhY2UgV1RGIHsKKworREVDTEFSRV9B
TExPQ0FUT1JfV0lUSF9IRUFQX0lERU5USUZJRVIoTGlrZWx5RGVuc2VVbnNpZ25lZEludGVnZXJT
ZXQpOworCisvLyBUaGlzIGlzIGVmZmVjdGl2ZWx5IGEgVmFyaWFudDxIYXNoU2V0LCBQYWlyPEJp
dFZlY3RvciwgSW5kZXhUeXBlPj4KKy8vIElmIGl0IGlzIGluIEJpdFZlY3RvciBtb2RlLCBpdCBr
ZWVwcyB0cmFjayBvZiB0aGUgbWluaW11bSB2YWx1ZSBpbiB0aGUgc2V0LCBhbmQgaGFzIHRoZSBi
aXRWZWN0b3Igc2hpZnRlZCBieSB0aGUgc2FtZSBhbW91bnQuCisvLyBTbyBmb3IgZXhhbXBsZSB7
NDAwMCwgNDAwMiwgNDAwM30gd291bGQgYmUgcmVwcmVzZW50ZWQgYXMgdGhlIGJpdFZlY3RvciAx
MTAxIHdpdGggYSBtX21pbiBvZiA0MDAwLgorLy8gSXQgc2hpZnRzIGJldHdlZW4gdGhlIHR3byBt
b2RlcyB3aGVuZXZlciB0aGF0IHdvdWxkIGF0IGxlYXN0IGhhbHZlIGl0cyBtZW1vcnkgdXNhZ2Uu
IFNvIGl0IHdpbGwgbmV2ZXIgdXNlIG1vcmUgdGhhbiB0d2ljZSB0aGUgb3B0aW1hbCBhbW91bnQg
b2YgbWVtb3J5LCBhbmQgeWV0IHNob3VsZCBub3QgcGluZy1wb25nIGJldHdlZW4gdGhlIHR3byBt
b2RlcyB0b28gb2Z0ZW4uCit0ZW1wbGF0ZTx0eXBlbmFtZSBJbmRleFR5cGU+CitjbGFzcyBMaWtl
bHlEZW5zZVVuc2lnbmVkSW50ZWdlclNldCB7CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7
CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoTGlrZWx5RGVuc2VVbnNpZ25lZEludGVnZXJTZXQp
OworICAgIHN0YXRpY19hc3NlcnQoc3RkOjppc191bnNpZ25lZDxJbmRleFR5cGU+Ojp2YWx1ZSk7
CisgICAgdXNpbmcgU2V0ID0gSGFzaFNldDxJbmRleFR5cGUsIFdURjo6SW50SGFzaDxJbmRleFR5
cGU+LCBXVEY6OlVuc2lnbmVkV2l0aFplcm9LZXlIYXNoVHJhaXRzPEluZGV4VHlwZT4gPjsKK3B1
YmxpYzoKKyAgICBMaWtlbHlEZW5zZVVuc2lnbmVkSW50ZWdlclNldCgpCisgICAgICAgIDogbV9z
aXplKDApCisgICAgICAgICwgbV9taW4oMCkKKyAgICAgICAgLCBtX21heCgwKQorICAgIHsKKyAg
ICAgICAgbmV3ICgmbV9pbmxpbmUuYml0VmVjdG9yKSBCaXRWZWN0b3I7CisgICAgfQorCisgICAg
fkxpa2VseURlbnNlVW5zaWduZWRJbnRlZ2VyU2V0KCkKKyAgICB7CisgICAgICAgIGlmIChpc0Jp
dFZlY3RvcigpKQorICAgICAgICAgICAgbV9pbmxpbmUuYml0VmVjdG9yLn5CaXRWZWN0b3IoKTsK
KyAgICAgICAgZWxzZQorICAgICAgICAgICAgbV9pbmxpbmUuaGFzaFNldC5+U2V0KCk7CisgICAg
fQorCisgICAgTGlrZWx5RGVuc2VVbnNpZ25lZEludGVnZXJTZXQoTGlrZWx5RGVuc2VVbnNpZ25l
ZEludGVnZXJTZXQmJiBvdGhlcikKKyAgICAgICAgOiBtX3NpemUob3RoZXIubV9zaXplKQorICAg
ICAgICAsIG1fbWluKG90aGVyLm1fbWluKQorICAgICAgICAsIG1fbWF4KG90aGVyLm1fbWF4KQor
ICAgIHsKKyAgICAgICAgaWYgKGlzQml0VmVjdG9yKCkpCisgICAgICAgICAgICBuZXcgKCZtX2lu
bGluZS5iaXRWZWN0b3IpIEJpdFZlY3RvcihXVEZNb3ZlKG90aGVyLm1faW5saW5lLmJpdFZlY3Rv
cikpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBuZXcgKCZtX2lubGluZS5oYXNoU2V0KSBT
ZXQoV1RGTW92ZShvdGhlci5tX2lubGluZS5oYXNoU2V0KSk7CisgICAgfQorCisgICAgYm9vbCBj
b250YWlucyhJbmRleFR5cGUgdmFsdWUpIGNvbnN0CisgICAgeworICAgICAgICBBU1NFUlQoaXNW
YWxpZFZhbHVlKHZhbHVlKSk7CisKKyAgICAgICAgaWYgKGlzQml0VmVjdG9yKCkpIHsKKyAgICAg
ICAgICAgIGlmIChtX21pbiA+IHZhbHVlKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICAgICAgICAgIHJldHVybiBtX2lubGluZS5iaXRWZWN0b3IuZ2V0KHZhbHVlIC0gbV9taW4p
OworICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIG1faW5saW5lLmhhc2hTZXQuY29udGFpbnMo
dmFsdWUpOworICAgIH0KKworICAgIC8vIFByb3ZpZGluZyBhbiBpdGVyYXRvciBpbiB0aGlzIHdv
dWxkIGJlIHBvc3NpYmxlLCBidXQgbm9uZSBvZiBvdXIgY2xpZW50cyBuZWVkIGl0LgorICAgIHN0
cnVjdCBBZGRSZXN1bHQgeworICAgICAgICBib29sIGlzTmV3RW50cnk7CisgICAgfTsKKworICAg
IEFkZFJlc3VsdCBhZGQoSW5kZXhUeXBlIHZhbHVlKQorICAgIHsKKyAgICAgICAgQVNTRVJUKGlz
VmFsaWRWYWx1ZSh2YWx1ZSkpOworCisgICAgICAgIGlmICghbV9zaXplKSB7CisgICAgICAgICAg
ICBBU1NFUlQoaXNCaXRWZWN0b3IoKSk7CisgICAgICAgICAgICBtX21pbiA9IHZhbHVlOworICAg
ICAgICAgICAgbV9tYXggPSB2YWx1ZTsKKyAgICAgICAgICAgIG1fc2l6ZSA9IDE7CisgICAgICAg
ICAgICBtX2lubGluZS5iaXRWZWN0b3IucXVpY2tTZXQoMCk7CisgICAgICAgICAgICByZXR1cm4g
eyB0cnVlIH07CisgICAgICAgIH0KKworICAgICAgICBpZiAoIWlzQml0VmVjdG9yKCkpIHsKKyAg
ICAgICAgICAgIGJvb2wgaXNOZXdFbnRyeSA9IG1faW5saW5lLmhhc2hTZXQuYWRkKHZhbHVlKS5p
c05ld0VudHJ5OworICAgICAgICAgICAgaWYgKCFpc05ld0VudHJ5KQorICAgICAgICAgICAgICAg
IHJldHVybiB7IGZhbHNlIH07CisgICAgICAgICAgICBtX21pbiA9IHN0ZDo6bWluKG1fbWluLCB2
YWx1ZSk7CisgICAgICAgICAgICBtX21heCA9IHN0ZDo6bWF4KG1fbWF4LCB2YWx1ZSk7CisgICAg
ICAgICAgICB1bnNpZ25lZCBoYXNoU2V0U2l6ZSA9IG1faW5saW5lLmhhc2hTZXQuY2FwYWNpdHko
KSAqIHNpemVvZihJbmRleFR5cGUpOworICAgICAgICAgICAgdW5zaWduZWQgd291bGRCZUJpdFZl
Y3RvclNpemUgPSAobV9tYXggLSBtX21pbikgLyA4OworICAgICAgICAgICAgaWYgKHdvdWxkQmVC
aXRWZWN0b3JTaXplICogMiA8IGhhc2hTZXRTaXplKQorICAgICAgICAgICAgICAgIHRyYW5zaXRp
b25Ub0JpdFZlY3RvcigpOworICAgICAgICAgICAgcmV0dXJuIHsgdHJ1ZSB9OworICAgICAgICB9
CisKKyAgICAgICAgaWYgKHZhbHVlID49IG1fbWluICYmIHZhbHVlIDw9IG1fbWF4KSB7CisgICAg
ICAgICAgICBib29sIGlzTmV3RW50cnkgPSAhbV9pbmxpbmUuYml0VmVjdG9yLnF1aWNrU2V0KHZh
bHVlIC0gbV9taW4pOworICAgICAgICAgICAgbV9zaXplICs9IGlzTmV3RW50cnk7CisgICAgICAg
ICAgICByZXR1cm4geyBpc05ld0VudHJ5IH07CisgICAgICAgIH0KKworICAgICAgICAvLyBXZSBh
cmUgaW4gQml0VmVjdG9yIG1vZGUsIGFuZCB2YWx1ZSBpcyBub3QgaW4gdGhlIGJvdW5kczogd2Ug
d2lsbCBkZWZpbml0ZWx5IGluc2VydCBpdCBhcyBhIG5ldyBlbnRyeS4KKyAgICAgICAgKyttX3Np
emU7CisKKyAgICAgICAgSW5kZXhUeXBlIG5ld01pbiA9IHN0ZDo6bWluKG1fbWluLCB2YWx1ZSk7
CisgICAgICAgIEluZGV4VHlwZSBuZXdNYXggPSBzdGQ6Om1heChtX21heCwgdmFsdWUpOworICAg
ICAgICB1bnNpZ25lZCBiaXRWZWN0b3JTaXplID0gKG5ld01heCAtIG5ld01pbikgLyA4OworICAg
ICAgICB1bnNpZ25lZCBoYXNoU2V0RXN0aW1hdGVkT2NjdXBhbmN5T3ZlcmhlYWQgPSAzOyAvLyBt
YXggb2NjdXBhbmN5IGZvciBhIGxhcmdlIEhhc2hTZXQgaXMgNTAlCisgICAgICAgIHVuc2lnbmVk
IHdvdWxkQmVIYXNoU2V0Q2FwYWNpdHkgPSBzdGQ6Om1heCg4dSwgbV9zaXplKSAqIGhhc2hTZXRF
c3RpbWF0ZWRPY2N1cGFuY3lPdmVyaGVhZDsKKyAgICAgICAgdW5zaWduZWQgd291bGRCZUhhc2hT
ZXRTaXplID0gd291bGRCZUhhc2hTZXRDYXBhY2l0eSAqIHNpemVvZihJbmRleFR5cGUpOworICAg
ICAgICBpZiAod291bGRCZUhhc2hTZXRTaXplICogMiA8IGJpdFZlY3RvclNpemUpIHsKKyAgICAg
ICAgICAgIHRyYW5zaXRpb25Ub0hhc2hTZXQoKTsKKyAgICAgICAgICAgIGF1dG8gcmVzdWx0ID0g
bV9pbmxpbmUuaGFzaFNldC5hZGQodmFsdWUpOworICAgICAgICAgICAgQVNTRVJUX1VOVVNFRChy
ZXN1bHQsIHJlc3VsdC5pc05ld0VudHJ5KTsKKyAgICAgICAgICAgIG1fbWluID0gbmV3TWluOwor
ICAgICAgICAgICAgbV9tYXggPSBuZXdNYXg7CisgICAgICAgICAgICByZXR1cm4geyB0cnVlIH07
CisgICAgICAgIH0KKworICAgICAgICBpZiAobV9taW4gPD0gdmFsdWUpIHsKKyAgICAgICAgICAg
IGJvb2wgaXNOZXdFbnRyeSA9ICFtX2lubGluZS5iaXRWZWN0b3Iuc2V0KHZhbHVlIC0gbV9taW4p
OworICAgICAgICAgICAgQVNTRVJUX1VOVVNFRChpc05ld0VudHJ5LCBpc05ld0VudHJ5KTsKKyAg
ICAgICAgICAgIEFTU0VSVChuZXdNYXggPT0gdmFsdWUpOworICAgICAgICAgICAgbV9tYXggPSB2
YWx1ZTsKKyAgICAgICAgICAgIHJldHVybiB7IHRydWUgfTsKKyAgICAgICAgfQorCisgICAgICAg
IEJpdFZlY3RvciBuZXdCaXRWZWN0b3I7CisgICAgICAgIG5ld0JpdFZlY3Rvci5yZXNpemUobV9t
YXggLSB2YWx1ZSArIDEpOworICAgICAgICBJbmRleFR5cGUgc2hpZnRSZWR1Y3Rpb24gPSBtX21p
biAtIHZhbHVlOworICAgICAgICBmb3IgKEluZGV4VHlwZSBvbGRJbmRleCA6IG1faW5saW5lLmJp
dFZlY3RvcikKKyAgICAgICAgICAgIG5ld0JpdFZlY3Rvci5xdWlja1NldChvbGRJbmRleCArIHNo
aWZ0UmVkdWN0aW9uKTsKKyAgICAgICAgbmV3Qml0VmVjdG9yLnF1aWNrU2V0KDApOworICAgICAg
ICBtX2lubGluZS5iaXRWZWN0b3IgPSBXVEZNb3ZlKG5ld0JpdFZlY3Rvcik7CisgICAgICAgIEFT
U0VSVChuZXdNaW4gPT0gdmFsdWUpOworICAgICAgICBtX21pbiA9IHZhbHVlOworICAgICAgICBy
ZXR1cm4geyB0cnVlIH07CisgICAgfQorCisgICAgdW5zaWduZWQgc2l6ZSgpIGNvbnN0CisgICAg
eworICAgICAgICBpZiAoaXNCaXRWZWN0b3IoKSkKKyAgICAgICAgICAgIHJldHVybiBtX3NpemU7
CisgICAgICAgIHJldHVybiBtX2lubGluZS5oYXNoU2V0LnNpemUoKTsKKyAgICB9CisKKyAgICBj
bGFzcyBpdGVyYXRvciB7CisgICAgICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworICAgIHB1
YmxpYzoKKyAgICAgICAgaXRlcmF0b3IoQml0VmVjdG9yOjppdGVyYXRvciBpdCwgSW5kZXhUeXBl
IHNoaWZ0KQorICAgICAgICAgICAgOiBtX3VuZGVybHlpbmcoeyBpdCB9KQorICAgICAgICAgICAg
LCBtX3NoaWZ0KHNoaWZ0KQorICAgICAgICB7CisgICAgICAgIH0KKyAgICAgICAgaXRlcmF0b3Io
dHlwZW5hbWUgU2V0OjppdGVyYXRvciBpdCwgSW5kZXhUeXBlIHNoaWZ0KQorICAgICAgICAgICAg
OiBtX3VuZGVybHlpbmcoeyBpdCB9KQorICAgICAgICAgICAgLCBtX3NoaWZ0KHNoaWZ0KQorICAg
ICAgICB7CisgICAgICAgIH0KKworICAgICAgICBpdGVyYXRvciYgb3BlcmF0b3IrKygpCisgICAg
ICAgIHsKKyAgICAgICAgICAgIFdURjo6c3dpdGNoT24obV91bmRlcmx5aW5nLAorICAgICAgICAg
ICAgICAgIFtdKEJpdFZlY3Rvcjo6aXRlcmF0b3ImIGl0KSB7ICsraXQ7IH0sCisgICAgICAgICAg
ICAgICAgW10odHlwZW5hbWUgU2V0OjppdGVyYXRvciYgaXQpIHsgKytpdDsgfSk7CisgICAgICAg
ICAgICByZXR1cm4gKnRoaXM7CisgICAgICAgIH0KKworICAgICAgICBJbmRleFR5cGUgb3BlcmF0
b3IqKCkgY29uc3QKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIFdURjo6c3dpdGNoT24o
bV91bmRlcmx5aW5nLAorICAgICAgICAgICAgICAgIFsmXShjb25zdCBCaXRWZWN0b3I6Oml0ZXJh
dG9yJiBpdCkgeyByZXR1cm4gKml0ICsgbV9zaGlmdDsgfSwKKyAgICAgICAgICAgICAgICBbXShj
b25zdCB0eXBlbmFtZSBTZXQ6Oml0ZXJhdG9yJiBpdCkgeyByZXR1cm4gKml0OyB9KTsKKyAgICAg
ICAgfQorCisgICAgICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBpdGVyYXRvciYgb3RoZXIpIGNv
bnN0CisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBtX3VuZGVybHlpbmcgPT0gb3RoZXIu
bV91bmRlcmx5aW5nICYmIG1fc2hpZnQgPT0gb3RoZXIubV9zaGlmdDsKKyAgICAgICAgfQorICAg
ICAgICBib29sIG9wZXJhdG9yIT0oY29uc3QgaXRlcmF0b3ImIG90aGVyKSBjb25zdAorICAgICAg
ICB7CisgICAgICAgICAgICByZXR1cm4gbV91bmRlcmx5aW5nICE9IG90aGVyLm1fdW5kZXJseWlu
ZyB8fCBtX3NoaWZ0ICE9IG90aGVyLm1fc2hpZnQ7CisgICAgICAgIH0KKworICAgIHByaXZhdGU6
CisgICAgICAgIFdURjo6VmFyaWFudDxCaXRWZWN0b3I6Oml0ZXJhdG9yLCB0eXBlbmFtZSBTZXQ6
Oml0ZXJhdG9yPiBtX3VuZGVybHlpbmc7CisgICAgICAgIEluZGV4VHlwZSBtX3NoaWZ0OworICAg
IH07CisKKyAgICBpdGVyYXRvciBiZWdpbigpIGNvbnN0CisgICAgeworICAgICAgICBpZiAoaXNC
aXRWZWN0b3IoKSkKKyAgICAgICAgICAgIHJldHVybiB7IG1faW5saW5lLmJpdFZlY3Rvci5iZWdp
bigpLCBtX21pbiB9OworICAgICAgICByZXR1cm4geyBtX2lubGluZS5oYXNoU2V0LmJlZ2luKCks
IG1fbWluIH07CisgICAgfQorICAgIGl0ZXJhdG9yIGVuZCgpIGNvbnN0CisgICAgeworICAgICAg
ICBpZiAoaXNCaXRWZWN0b3IoKSkKKyAgICAgICAgICAgIHJldHVybiB7IG1faW5saW5lLmJpdFZl
Y3Rvci5lbmQoKSwgbV9taW4gfTsKKyAgICAgICAgcmV0dXJuIHsgbV9pbmxpbmUuaGFzaFNldC5l
bmQoKSwgbV9taW4gfTsKKyAgICB9CisKKyAgICB1bnNpZ25lZCBtZW1vcnlVc2UoKSBjb25zdAor
ICAgIHsKKyAgICAgICAgdW5zaWduZWQgcmVzdWx0ID0gc2l6ZW9mKExpa2VseURlbnNlVW5zaWdu
ZWRJbnRlZ2VyU2V0KTsKKyAgICAgICAgaWYgKGlzQml0VmVjdG9yKCkpCisgICAgICAgICAgICBy
ZXN1bHQgKz0gbV9pbmxpbmUuYml0VmVjdG9yLm91dE9mTGluZU1lbW9yeVVzZSgpOworICAgICAg
ICBlbHNlCisgICAgICAgICAgICByZXN1bHQgKz0gbV9pbmxpbmUuaGFzaFNldC5jYXBhY2l0eSgp
ICogc2l6ZW9mKEluZGV4VHlwZSk7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorCisg
ICAgdm9pZCB2YWxpZGF0ZSgpIGNvbnN0CisgICAgeworICAgICAgICBJbmRleFR5cGUgbWluID0g
c3RkOjpudW1lcmljX2xpbWl0czxJbmRleFR5cGU+OjptYXgoKSwgbWF4ID0gMDsKKyAgICAgICAg
aWYgKGlzQml0VmVjdG9yKCkpIHsKKyAgICAgICAgICAgIHVuc2lnbmVkIG51bUVsZW1lbnRzID0g
MDsKKyAgICAgICAgICAgIGZvciAoSW5kZXhUeXBlIHNoaWZ0ZWRJbmRleCA6IG1faW5saW5lLmJp
dFZlY3RvcikgeworICAgICAgICAgICAgICAgICsrbnVtRWxlbWVudHM7CisgICAgICAgICAgICAg
ICAgSW5kZXhUeXBlIGNvcnJlY3RlZEluZGV4ID0gbV9taW4gKyBzaGlmdGVkSW5kZXg7CisgICAg
ICAgICAgICAgICAgbWluID0gc3RkOjptaW4obWluLCBjb3JyZWN0ZWRJbmRleCk7CisgICAgICAg
ICAgICAgICAgbWF4ID0gc3RkOjptYXgobWF4LCBjb3JyZWN0ZWRJbmRleCk7CisgICAgICAgICAg
ICB9CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChtX3NpemUgPT0gbnVtRWxlbWVudHMpOwor
ICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgZm9yIChJbmRleFR5cGUgaW5kZXggOiBtX2lu
bGluZS5oYXNoU2V0KSB7CisgICAgICAgICAgICAgICAgbWluID0gc3RkOjptaW4obWluLCBpbmRl
eCk7CisgICAgICAgICAgICAgICAgbWF4ID0gc3RkOjptYXgobWF4LCBpbmRleCk7CisgICAgICAg
ICAgICB9CisgICAgICAgIH0KKyAgICAgICAgaWYgKG1fc2l6ZSkgeworICAgICAgICAgICAgUkVM
RUFTRV9BU1NFUlQobV9taW4gPT0gbWluKTsKKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKG1f
bWF4ID09IG1heCk7CisgICAgICAgIH0KKyAgICB9CisKK3ByaXZhdGU6CisgICAgYm9vbCBpc0Jp
dFZlY3RvcigpIGNvbnN0IHsgcmV0dXJuIG1fc2l6ZSAhPSBzdGQ6Om51bWVyaWNfbGltaXRzPHVu
c2lnbmVkPjo6bWF4KCk7IH0KKworICAgIGJvb2wgaXNWYWxpZFZhbHVlKEluZGV4VHlwZSB2YWx1
ZSkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiB2YWx1ZSAhPSBVbnNpZ25lZFdpdGhaZXJv
S2V5SGFzaFRyYWl0czxJbmRleFR5cGU+OjplbXB0eVZhbHVlKCkKKyAgICAgICAgICAgICYmICFV
bnNpZ25lZFdpdGhaZXJvS2V5SGFzaFRyYWl0czxJbmRleFR5cGU+Ojppc0RlbGV0ZWRWYWx1ZSh2
YWx1ZSk7CisgICAgfQorCisgICAgdm9pZCB0cmFuc2l0aW9uVG9IYXNoU2V0KCkKKyAgICB7Cisg
ICAgICAgIEFTU0VSVChpc0JpdFZlY3RvcigpKTsKKworICAgICAgICBTZXQgbmV3U2V0OworICAg
ICAgICBuZXdTZXQucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShtX3NpemUgKyAxKTsKKyAgICAgICAg
Zm9yIChJbmRleFR5cGUgb2xkSW5kZXggOiBtX2lubGluZS5iaXRWZWN0b3IpCisgICAgICAgICAg
ICBuZXdTZXQuYWRkKG9sZEluZGV4ICsgbV9taW4pOworICAgICAgICBtX2lubGluZS5iaXRWZWN0
b3IufkJpdFZlY3RvcigpOworICAgICAgICBuZXcgKCZtX2lubGluZS5oYXNoU2V0KSBTZXQoV1RG
TW92ZShuZXdTZXQpKTsKKyAgICAgICAgbV9zaXplID0gc3RkOjpudW1lcmljX2xpbWl0czx1bnNp
Z25lZD46Om1heCgpOworCisgICAgICAgIEFTU0VSVCghaXNCaXRWZWN0b3IoKSk7CisgICAgfQor
CisgICAgdm9pZCB0cmFuc2l0aW9uVG9CaXRWZWN0b3IoKQorICAgIHsKKyAgICAgICAgQVNTRVJU
KCFpc0JpdFZlY3RvcigpKTsKKworICAgICAgICBCaXRWZWN0b3IgbmV3Qml0VmVjdG9yOworICAg
ICAgICBuZXdCaXRWZWN0b3IuZW5zdXJlU2l6ZShtX21heCAtIG1fbWluICsgMSk7CisgICAgICAg
IG1fc2l6ZSA9IDA7CisgICAgICAgIGZvciAoSW5kZXhUeXBlIG9sZFZhbHVlIDogbV9pbmxpbmUu
aGFzaFNldCkgeworICAgICAgICAgICAgbmV3Qml0VmVjdG9yLnF1aWNrU2V0KG9sZFZhbHVlIC0g
bV9taW4pOworICAgICAgICAgICAgKyttX3NpemU7CisgICAgICAgIH0KKyAgICAgICAgQVNTRVJU
KG5ld0JpdFZlY3Rvci5xdWlja0dldCgwKSk7CisgICAgICAgIG1faW5saW5lLmhhc2hTZXQuflNl
dCgpOworICAgICAgICBuZXcgKCZtX2lubGluZS5iaXRWZWN0b3IpIEJpdFZlY3RvcihXVEZNb3Zl
KG5ld0JpdFZlY3RvcikpOworCisgICAgICAgIEFTU0VSVChpc0JpdFZlY3RvcigpKTsKKyAgICB9
CisKKyAgICB1bmlvbiBVIHsKKyAgICAgICAgQml0VmVjdG9yIGJpdFZlY3RvcjsKKyAgICAgICAg
U2V0IGhhc2hTZXQ7CisKKyAgICAgICAgVSgpIHsgfQorICAgICAgICB+VSgpIHsgfQorICAgIH0g
bV9pbmxpbmU7CisgICAgdW5zaWduZWQgbV9zaXplOyAvLyBPbmx5IHVwZGF0ZWQgaW4gQml0VmVj
dG9yIG1vZGUsIHN0ZDo6bnVtZXJpY19saW1pdHM8dW5zaWduZWQ+OjptYXgoKSB0byBpbmRpY2F0
ZSBIYXNoU2V0IG1vZGUKKyAgICBJbmRleFR5cGUgbV9taW47CisgICAgSW5kZXhUeXBlIG1fbWF4
OworCit9OworCit9IC8vIG5hbWVzcGFjZSBXVEYKKwordXNpbmcgV1RGOjpMaWtlbHlEZW5zZVVu
c2lnbmVkSW50ZWdlclNldDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL1NtYWxsUHRyU2V0
LmggYi9Tb3VyY2UvV1RGL3d0Zi9TbWFsbFB0clNldC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCA0YzZlNDYxOTZkMjkuLjAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi9T
bWFsbFB0clNldC5oCisrKyAvZGV2L251bGwKQEAgLTEsMjU0ICswLDAgQEAKLS8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgotICoKLSAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgot
ICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycg
QU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAot
ICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQotI3ByYWdtYSBvbmNlCi0KLSNpbmNs
dWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgotI2luY2x1ZGUgPHd0Zi9GYXN0TWFsbG9jLmg+Ci0jaW5j
bHVkZSA8d3RmL0hhc2hGdW5jdGlvbnMuaD4KLSNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4K
LQotbmFtZXNwYWNlIFdURiB7Ci0KLURFQ0xBUkVfQUxMT0NBVE9SX1dJVEhfSEVBUF9JREVOVElG
SUVSKFNtYWxsUHRyU2V0KTsKLQotdGVtcGxhdGU8dHlwZW5hbWUgUHRyVHlwZSwgdW5zaWduZWQg
U21hbGxBcnJheVNpemUgPSA4PgotY2xhc3MgU21hbGxQdHJTZXQgewotICAgIFdURl9NQUtFX0ZB
U1RfQUxMT0NBVEVEOwotICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKFNtYWxsUHRyU2V0KTsKLSAg
ICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfdHJpdmlhbGx5X2Rlc3RydWN0aWJsZTxQdHJUeXBlPjo6
dmFsdWUsICJXZSBjdXJyZW50bHkgZG9uJ3Qgc3VwcG9ydCBub24tdHJpdmlhbGx5IGRlc3RydWN0
aWJsZSBwb2ludGVyIHR5cGVzLiIpOwotICAgIHN0YXRpY19hc3NlcnQoc2l6ZW9mKFB0clR5cGUp
ID09IHNpemVvZih2b2lkKiksICJPbmx5IHN1cHBvcnQgcG9pbnRlciBzaXplZCB0aGluZ3MuIik7
Ci0gICAgc3RhdGljX2Fzc2VydCghKFNtYWxsQXJyYXlTaXplICYgKFNtYWxsQXJyYXlTaXplIC0g
MSkpLCAiSW5saW5lIHNpemUgbXVzdCBiZSBhIHBvd2VyIG9mIHR3by4iKTsKLQotcHVibGljOiAK
LSAgICBTbWFsbFB0clNldCgpCi0gICAgewotICAgICAgICBpbml0aWFsaXplKCk7Ci0gICAgfQot
Ci0gICAgLy8gV2UgdGFrZSBjYXJlIHRvIGhhdmUgU21hbGxQdHJTZXQgaGF2ZSBwYXJ0aWFsIG1v
dmUgc2VtYW50aWNzIGFsbG93YWJsZSB0aHJvdWdoCi0gICAgLy8gbWVtY3B5LiBJdCdzIHBhcnRp
YWwgbW92ZSBzZW1hbnRpY3MgYmVjYXVzZSBvdXIgZGVzdHJ1Y3RvciBzaG91bGQgbm90IGJlIGNh
bGxlZAotICAgIC8vIG9uIHRoZSBTbWFsbFB0ck9iamVjdCBpbiB0aGUgb2xkIG1lbW9yeSB3ZSB3
ZXJlIG1vdmVkIGZyb20gKG90aGVyd2lzZSwgd2UgbWlnaHQgZnJlZSBtX2J1ZmZlciB0d2ljZSkK
LSAgICAvLyB1bmxlc3MgdGhhdCBvbGQgbWVtb3J5IGlzIHJlc2V0IHRvIGJlIGlzU21hbGwoKS4g
U2VlIG1vdmUgY29uc3RydWN0b3IgYmVsb3cuCi0gICAgLy8gVG8gbWFpbnRhaW4gdGhlc2Ugc2Vt
YW50aWNzLCB3ZSBkZXRlcm1pbmUgaWYgd2UncmUgc21hbGwgYnkgY2hlY2tpbmcgb3VyIHNpemUK
LSAgICAvLyBhbmQgbm90IG91ciBtX2J1ZmZlciBwb2ludGVyLiBBbmQgd2hlbiB3ZSdyZSBzbWFs
bCwgd2UgZG9uJ3QgZG8gb3BlcmF0aW9ucyBvbgotICAgIC8vIG1fYnVmZmVyLCBpbnN0ZWFkLCB3
ZSBwZXJmb3JtIG9wZXJhdGlvbnMgb24gbV9zbWFsbFN0b3JhZ2UgZGlyZWN0bHkuIFRoZSByZWFz
b24gd2Ugd2FudAotICAgIC8vIHRoZXNlIHNlbWFudGljcyBpcyB0aGF0IGl0J3MgYmVuZWZpY2lh
bCB0byBoYXZlIGEgVmVjdG9yIHRoYXQgY29udGFpbnMgU21hbGxQdHJTZXQKLSAgICAvLyAob3Ig
YW4gb2JqZWN0IHdpdGggU21hbGxQdHJTZXQgYXMgYSBmaWVsZCkgYmUgYWxsb3dlZCB0byB1c2Ug
bWVtY3B5IGZvciBpdHMgbW92ZSBvcGVyYXRpb24uCi0KLSAgICBTbWFsbFB0clNldChTbWFsbFB0
clNldCYmIG90aGVyKQotICAgIHsKLSAgICAgICAgbWVtY3B5KHRoaXMsICZvdGhlciwgc2l6ZW9m
KFNtYWxsUHRyU2V0KSk7Ci0gICAgICAgIG90aGVyLmluaXRpYWxpemUoKTsKLSAgICB9Ci0KLSAg
ICBTbWFsbFB0clNldCYgb3BlcmF0b3I9KFNtYWxsUHRyU2V0JiYgb3RoZXIpCi0gICAgewotICAg
ICAgICB0aGlzLT5+U21hbGxQdHJTZXQoKTsKLSAgICAgICAgbmV3ICh0aGlzKSBTbWFsbFB0clNl
dChXVEZNb3ZlKG90aGVyKSk7Ci0gICAgICAgIHJldHVybiAqdGhpczsKLSAgICB9Ci0KLSAgICB+
U21hbGxQdHJTZXQoKQotICAgIHsKLSAgICAgICAgaWYgKCFpc1NtYWxsKCkpCi0gICAgICAgICAg
ICBTbWFsbFB0clNldE1hbGxvYzo6ZnJlZShtX2J1ZmZlcik7Ci0gICAgfQotCi0gICAgaW5saW5l
IHZvaWQgYWRkKFB0clR5cGUgcHRyKQotICAgIHsKLSAgICAgICAgQVNTRVJUKGlzVmFsaWRFbnRy
eShwdHIpKTsKLQotICAgICAgICBpZiAoaXNTbWFsbCgpKSB7Ci0gICAgICAgICAgICBmb3IgKHVu
c2lnbmVkIGkgPSAwOyBpIDwgbV9zaXplOyBpKyspIHsKLSAgICAgICAgICAgICAgICBpZiAobV9z
bWFsbFN0b3JhZ2VbaV0gPT0gcHRyKQotICAgICAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAg
ICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlmIChtX3NpemUgPCBTbWFsbEFycmF5U2l6ZSkgewot
ICAgICAgICAgICAgICAgIG1fc21hbGxTdG9yYWdlW21fc2l6ZV0gPSBwdHI7Ci0gICAgICAgICAg
ICAgICAgKyttX3NpemU7Ci0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgfQot
Ci0gICAgICAgICAgICBncm93KHN0ZDo6bWF4KDY0dSwgU21hbGxBcnJheVNpemUgKiAyKSk7Ci0g
ICAgICAgICAgICAvLyBGYWxsIHRocm91Z2guIFdlJ3JlIG5vIGxvbmdlciBzbWFsbCA6KAotICAg
ICAgICB9Ci0KLSAgICAgICAgLy8gSWYgd2UncmUgbW9yZSB0aGFuIDMvNHRocyBmdWxsIHdlIGdy
b3cuCi0gICAgICAgIGlmIChVTkxJS0VMWShtX3NpemUgKiA0ID49IG1fY2FwYWNpdHkgKiAzKSkg
ewotICAgICAgICAgICAgZ3JvdyhtX2NhcGFjaXR5ICogMik7Ci0gICAgICAgICAgICBBU1NFUlQo
IShtX2NhcGFjaXR5ICYgKG1fY2FwYWNpdHkgLSAxKSkpOwotICAgICAgICB9Ci0KLSAgICAgICAg
dm9pZCoqIGJ1Y2tldCA9IHRoaXMtPmJ1Y2tldChwdHIpOwotICAgICAgICBpZiAoKmJ1Y2tldCAh
PSBwdHIpIHsKLSAgICAgICAgICAgICpidWNrZXQgPSBwdHI7Ci0gICAgICAgICAgICArK21fc2l6
ZTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIGlubGluZSBib29sIGNvbnRhaW5zKFB0clR5cGUg
cHRyKSBjb25zdAotICAgIHsKLSAgICAgICAgQVNTRVJUKGlzVmFsaWRFbnRyeShwdHIpKTsKLSAg
ICAgICAgaWYgKGlzU21hbGwoKSkgewotICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsg
aSA8IG1fc2l6ZTsgaSsrKSB7IC8vIFdlIG9ubHkgbmVlZCB0byBzZWFyY2ggdXAgdG8gbV9zaXpl
IGJlY2F1c2Ugd2Ugc3RvcmUgdGhpbmdzIGxpbmVhcmx5IGluc2lkZSBtX3NtYWxsU3RvcmFnZS4K
LSAgICAgICAgICAgICAgICBpZiAobV9zbWFsbFN0b3JhZ2VbaV0gPT0gcHRyKQotICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKLSAgICAgICAgfQotCi0gICAgICAgIHZvaWQqKiBidWNrZXQgPSB0aGlzLT5idWNr
ZXQocHRyKTsKLSAgICAgICAgcmV0dXJuICpidWNrZXQgPT0gcHRyOwotICAgIH0KLQotICAgIGNs
YXNzIGl0ZXJhdG9yIHsKLSAgICAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7Ci0gICAgcHVi
bGljOgotICAgICAgICBpdGVyYXRvciYgb3BlcmF0b3IrKygpCi0gICAgICAgIHsKLSAgICAgICAg
ICAgIG1faW5kZXgrKzsKLSAgICAgICAgICAgIEFTU0VSVChtX2luZGV4IDw9IG1fY2FwYWNpdHkp
OwotICAgICAgICAgICAgd2hpbGUgKG1faW5kZXggPCBtX2NhcGFjaXR5ICYmIG1fYnVmZmVyW21f
aW5kZXhdID09IGVtcHR5VmFsdWUoKSkKLSAgICAgICAgICAgICAgICBtX2luZGV4Kys7Ci0gICAg
ICAgICAgICByZXR1cm4gKnRoaXM7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIFB0clR5
cGUgb3BlcmF0b3IqKCkgY29uc3QgeyBBU1NFUlQobV9pbmRleCA8IG1fY2FwYWNpdHkpOyByZXR1
cm4gc3RhdGljX2Nhc3Q8UHRyVHlwZT4obV9idWZmZXJbbV9pbmRleF0pOyB9Ci0gICAgICAgIGJv
b2wgb3BlcmF0b3I9PShjb25zdCBpdGVyYXRvciYgb3RoZXIpIGNvbnN0IHsgQVNTRVJUKG1fYnVm
ZmVyID09IG90aGVyLm1fYnVmZmVyKTsgcmV0dXJuIG1faW5kZXggPT0gb3RoZXIubV9pbmRleDsg
fQotICAgICAgICBib29sIG9wZXJhdG9yIT0oY29uc3QgaXRlcmF0b3ImIG90aGVyKSBjb25zdCB7
IEFTU0VSVChtX2J1ZmZlciA9PSBvdGhlci5tX2J1ZmZlcik7IHJldHVybiAhKCp0aGlzID09IG90
aGVyKTsgfQotCi0gICAgcHJpdmF0ZToKLSAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVSwgdW5z
aWduZWQgUz4gZnJpZW5kIGNsYXNzIFdURjo6U21hbGxQdHJTZXQ7Ci0gICAgICAgIHVuc2lnbmVk
IG1faW5kZXg7Ci0gICAgICAgIHVuc2lnbmVkIG1fY2FwYWNpdHk7Ci0gICAgICAgIHZvaWQqKiBt
X2J1ZmZlcjsKLSAgICB9OwotCi0gICAgaXRlcmF0b3IgYmVnaW4oKSBjb25zdAotICAgIHsKLSAg
ICAgICAgaXRlcmF0b3IgaXQ7Ci0gICAgICAgIGl0Lm1faW5kZXggPSBzdGQ6Om51bWVyaWNfbGlt
aXRzPHVuc2lnbmVkPjo6bWF4KCk7Ci0gICAgICAgIGl0Lm1fY2FwYWNpdHkgPSBtX2NhcGFjaXR5
OwotICAgICAgICBpZiAoaXNTbWFsbCgpKQotICAgICAgICAgICAgaXQubV9idWZmZXIgPSBjb25z
dF9jYXN0PHZvaWQqKj4obV9zbWFsbFN0b3JhZ2UpOwotICAgICAgICBlbHNlCi0gICAgICAgICAg
ICBpdC5tX2J1ZmZlciA9IG1fYnVmZmVyOwotCi0gICAgICAgICsraXQ7Ci0KLSAgICAgICAgcmV0
dXJuIGl0OwotICAgIH0KLQotICAgIGl0ZXJhdG9yIGVuZCgpIGNvbnN0Ci0gICAgewotICAgICAg
ICBpdGVyYXRvciBpdDsKLSAgICAgICAgaXQubV9pbmRleCA9IG1fY2FwYWNpdHk7Ci0gICAgICAg
IGl0Lm1fY2FwYWNpdHkgPSBtX2NhcGFjaXR5OwotICAgICAgICBpZiAoaXNTbWFsbCgpKQotICAg
ICAgICAgICAgaXQubV9idWZmZXIgPSBjb25zdF9jYXN0PHZvaWQqKj4obV9zbWFsbFN0b3JhZ2Up
OwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBpdC5tX2J1ZmZlciA9IG1fYnVmZmVyOwotCi0g
ICAgICAgIHJldHVybiBpdDsKLSAgICB9Ci0KLSAgICBpbmxpbmUgdW5zaWduZWQgc2l6ZSgpIGNv
bnN0IHsgcmV0dXJuIG1fc2l6ZTsgfQotCi1wcml2YXRlOgotICAgIGNvbnN0ZXhwciBzdGF0aWMg
dm9pZCogZW1wdHlWYWx1ZSgpCi0gICAgewotICAgICAgICByZXR1cm4gYml0d2lzZV9jYXN0PHZv
aWQqPihzdGQ6Om51bWVyaWNfbGltaXRzPHVpbnRwdHJfdD46Om1heCgpKTsKLSAgICB9Ci0KLSAg
ICBib29sIGlzVmFsaWRFbnRyeShjb25zdCBQdHJUeXBlIHB0cikgY29uc3QKLSAgICB7Ci0gICAg
ICAgIHJldHVybiBwdHIgIT0gZW1wdHlWYWx1ZSgpOwotICAgIH0KLQotICAgIGlubGluZSBib29s
IGlzU21hbGwoKSBjb25zdAotICAgIHsKLSAgICAgICAgcmV0dXJuIG1fY2FwYWNpdHkgPT0gU21h
bGxBcnJheVNpemU7Ci0gICAgfQotCi0gICAgaW5saW5lIHZvaWQgaW5pdGlhbGl6ZSgpCi0gICAg
ewotICAgICAgICBtX3NpemUgPSAwOwotICAgICAgICBtX2J1ZmZlciA9IG51bGxwdHI7Ci0gICAg
ICAgIG1fY2FwYWNpdHkgPSBTbWFsbEFycmF5U2l6ZTsKLSAgICAgICAgbWVtc2V0KG1fc21hbGxT
dG9yYWdlLCAtMSwgc2l6ZW9mKHZvaWQqKSAqIFNtYWxsQXJyYXlTaXplKTsKLSAgICAgICAgQVNT
RVJUKGlzU21hbGwoKSk7Ci0gICAgfQotCi0gICAgaW5saW5lIHZvaWQgZ3Jvdyh1bnNpZ25lZCBz
aXplKQotICAgIHsKLSAgICAgICAgQVNTRVJUKHN0YXRpY19jYXN0PGludDMyX3Q+KGJpdHdpc2Vf
Y2FzdDxpbnRwdHJfdD4oZW1wdHlWYWx1ZSgpKSkgPT0gLTEpOwotCi0gICAgICAgIHNpemVfdCBh
bGxvY2F0aW9uU2l6ZSA9IHNpemVvZih2b2lkKikgKiBzaXplOwotICAgICAgICBib29sIHdhc1Nt
YWxsID0gaXNTbWFsbCgpOwotICAgICAgICB2b2lkKiogb2xkQnVmZmVyID0gd2FzU21hbGwgPyBt
X3NtYWxsU3RvcmFnZSA6IG1fYnVmZmVyOwotICAgICAgICB1bnNpZ25lZCBvbGRDYXBhY2l0eSA9
IG1fY2FwYWNpdHk7Ci0gICAgICAgIG1fYnVmZmVyID0gc3RhdGljX2Nhc3Q8dm9pZCoqPihTbWFs
bFB0clNldE1hbGxvYzo6bWFsbG9jKGFsbG9jYXRpb25TaXplKSk7Ci0gICAgICAgIG1lbXNldCht
X2J1ZmZlciwgLTEsIGFsbG9jYXRpb25TaXplKTsKLSAgICAgICAgbV9jYXBhY2l0eSA9IHNpemU7
Ci0KLSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG9sZENhcGFjaXR5OyBpKyspIHsK
LSAgICAgICAgICAgIGlmIChvbGRCdWZmZXJbaV0gIT0gZW1wdHlWYWx1ZSgpKSB7Ci0gICAgICAg
ICAgICAgICAgdm9pZCoqIHB0ciA9IHRoaXMtPmJ1Y2tldChzdGF0aWNfY2FzdDxQdHJUeXBlPihv
bGRCdWZmZXJbaV0pKTsKLSAgICAgICAgICAgICAgICAqcHRyID0gb2xkQnVmZmVyW2ldOwotICAg
ICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKCF3YXNTbWFsbCkKLSAgICAgICAg
ICAgIFNtYWxsUHRyU2V0TWFsbG9jOjpmcmVlKG9sZEJ1ZmZlcik7Ci0gICAgfQotCi0KLSAgICBp
bmxpbmUgdm9pZCoqIGJ1Y2tldChQdHJUeXBlIHRhcmdldCkgY29uc3QKLSAgICB7Ci0gICAgICAg
IEFTU0VSVCghKG1fY2FwYWNpdHkgJiAobV9jYXBhY2l0eSAtIDEpKSk7Ci0gICAgICAgIHVuc2ln
bmVkIGJ1Y2tldCA9IFB0ckhhc2hCYXNlPFB0clR5cGUsIGZhbHNlIC8qIGlzU21hcnRQdHIgKi8+
OjpoYXNoKHRhcmdldCkgJiAobV9jYXBhY2l0eSAtIDEpOwotICAgICAgICB1bnNpZ25lZCBpbmRl
eCA9IDA7Ci0gICAgICAgIHdoaWxlICh0cnVlKSB7Ci0gICAgICAgICAgICB2b2lkKiogcHRyID0g
bV9idWZmZXIgKyBidWNrZXQ7Ci0gICAgICAgICAgICBpZiAoKnB0ciA9PSBlbXB0eVZhbHVlKCkp
Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHB0cjsKLSAgICAgICAgICAgIGlmICgqcHRyID09IHRh
cmdldCkKLSAgICAgICAgICAgICAgICByZXR1cm4gcHRyOwotICAgICAgICAgICAgaW5kZXgrKzsK
LSAgICAgICAgICAgIGJ1Y2tldCA9IChidWNrZXQgKyBpbmRleCkgJiAobV9jYXBhY2l0eSAtIDEp
OwotICAgICAgICB9Ci0gICAgfQotCi0gICAgdW5zaWduZWQgbV9zaXplOwotICAgIHVuc2lnbmVk
IG1fY2FwYWNpdHk7Ci0gICAgdm9pZCoqIG1fYnVmZmVyOwotICAgIHZvaWQqIG1fc21hbGxTdG9y
YWdlW1NtYWxsQXJyYXlTaXplXTsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIFdURgotCi11c2luZyBX
VEY6OlNtYWxsUHRyU2V0OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvU21hbGxQdHJTZXQu
Y3BwIGIvU291cmNlL1dURi93dGYvU21hbGxTZXQuY3BwCnNpbWlsYXJpdHkgaW5kZXggOTQlCnJl
bmFtZSBmcm9tIFNvdXJjZS9XVEYvd3RmL1NtYWxsUHRyU2V0LmNwcApyZW5hbWUgdG8gU291cmNl
L1dURi93dGYvU21hbGxTZXQuY3BwCmluZGV4IDQyMDQ4ZTdlOGEyMy4uMmQyZjQxNWIyYzdhIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi9TbWFsbFB0clNldC5jcHAKKysrIGIvU291cmNlL1dU
Ri93dGYvU21hbGxTZXQuY3BwCkBAIC0yNCwxMiArMjQsMTIgQEAKICAqLwogCiAjaW5jbHVkZSAi
Y29uZmlnLmgiCi0jaW5jbHVkZSA8d3RmL1NtYWxsUHRyU2V0Lmg+CisjaW5jbHVkZSA8d3RmL1Nt
YWxsU2V0Lmg+CiAKICNpbmNsdWRlIDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4KIAogbmFtZXNwYWNl
IFdURiB7CiAKLURFRklORV9BTExPQ0FUT1JfV0lUSF9IRUFQX0lERU5USUZJRVIoU21hbGxQdHJT
ZXQpOworREVGSU5FX0FMTE9DQVRPUl9XSVRIX0hFQVBfSURFTlRJRklFUihTbWFsbFNldCk7CiAK
IH0gLy8gbmFtZXNwYWNlIFdURgpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvU21hbGxTZXQu
aCBiL1NvdXJjZS9XVEYvd3RmL1NtYWxsU2V0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAwLi40NTIzNzEzMmRkODkKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV1RG
L3d0Zi9TbWFsbFNldC5oCkBAIC0wLDAgKzEsMzA1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDE2LTIwMjEgQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFO
WQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlIDx3
dGYvQXNzZXJ0aW9ucy5oPgorI2luY2x1ZGUgPHd0Zi9GYXN0TWFsbG9jLmg+CisjaW5jbHVkZSA8
d3RmL0hhc2hGdW5jdGlvbnMuaD4KKyNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4KKworbmFt
ZXNwYWNlIFdURiB7CisKK0RFQ0xBUkVfQUxMT0NBVE9SX1dJVEhfSEVBUF9JREVOVElGSUVSKFNt
YWxsU2V0KTsKKworLy8gRnVuY3Rpb25hbGx5LCB0aGlzIGNsYXNzIGlzIHZlcnkgc2ltaWxhciB0
byBWYXJpYW50PFZlY3RvcjxULCBTbWFsbEFycmF5U2l6ZT4sIEhhc2hTZXQ8VD4+CisvLyBJdCBp
cyBvcHRpbWl6ZWQgcHJpbWFyaWx5IGZvciBzcGFjZSwgYnV0IGlzIGFsc28gcXVpdGUgZmFzdAor
Ly8gSXRzIG1haW4gbGltaXRhdGlvbiBpcyB0aGF0IGl0IGhhcyBubyB3YXkgdG8gcmVtb3ZlIGVs
ZW1lbnRzIG9uY2UgdGhleSBoYXZlIGJlZW4gYWRkZWQgdG8gaXQKKy8vIEFsc28sIGluc3RlYWQg
b2YgYmVpbmcgZnVsbHkgcGFyYW1ldGVyaXplZCBieSBhIEhhc2hUcmFpdCBwYXJhbWV0ZXIsIGl0
IGFsd2F5cyB1c2VzIC0xIChhbGwgb25lcykgYXMgaXRzIGVtcHR5IHZhbHVlCisvLyBSZWxhdGVk
bHksIGl0IGNhbiBvbmx5IHN0b3JlIG9iamVjdHMgb2YgdXAgdG8gNjQgYml0IHNpemUgKGJ1dCB0
aGF0IHBhcnRpY3VsYXIgbGltaXRhdGlvbiBzaG91bGQgYmUgZmFpcmx5IGVhc3kgdG8gbGlmdCBp
ZiBuZWVkZWQpCisvLyBVc2UgaXQgd2hlbmV2ZXIgeW91IG5lZWQgdG8gc3RvcmUgYW4gdW5ib3Vu
ZGVkIGJ1dCBwcm9iYWJseSBzbWFsbCBudW1iZXIgb2YgdW5zaWduZWQgaW50ZWdlcnMgb3IgcG9p
bnRlcnMuCit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBIYXNoID0gUHRySGFzaEJhc2U8
VCwgZmFsc2UgLyogaXNTbWFydFB0ciAqLz4sIHVuc2lnbmVkIFNtYWxsQXJyYXlTaXplID0gOD4K
K2NsYXNzIFNtYWxsU2V0IHsKKyAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKKyAgICBXVEZf
TUFLRV9OT05DT1BZQUJMRShTbWFsbFNldCk7CisgICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX3Ry
aXZpYWxseV9kZXN0cnVjdGlibGU8VD46OnZhbHVlLCAiV2UgY3VycmVudGx5IGRvbid0IHN1cHBv
cnQgbm9uLXRyaXZpYWxseSBkZXN0cnVjdGlibGUgdHlwZXMuIik7CisgICAgc3RhdGljX2Fzc2Vy
dCghKFNtYWxsQXJyYXlTaXplICYgKFNtYWxsQXJyYXlTaXplIC0gMSkpLCAiSW5saW5lIHNpemUg
bXVzdCBiZSBhIHBvd2VyIG9mIHR3by4iKTsKKyAgICBzdGF0aWNfYXNzZXJ0KHNpemVvZihUKikg
PD0gU21hbGxBcnJheVNpemUgKiBzaXplb2YoVCksICJUaGlzIGNsYXNzIGhhcyBub3QgYmVlbiB0
ZXN0ZWQgZm9yIG1faW5saW5lLmJ1ZmZlciBsYXJnZXIgdGhhbiBtX2lubGluZS5zbWFsbFN0b3Jh
Z2UiKTsKKworcHVibGljOgorICAgIFNtYWxsU2V0KCkKKyAgICAgICAgOiBtX2lubGluZSgpCisg
ICAgeworICAgICAgICBpbml0aWFsaXplKCk7CisgICAgfQorCisgICAgLy8gV2UgdGFrZSBjYXJl
IHRvIGhhdmUgU21hbGxTZXQgaGF2ZSBwYXJ0aWFsIG1vdmUgc2VtYW50aWNzIGFsbG93YWJsZSB0
aHJvdWdoCisgICAgLy8gbWVtY3B5LiBJdCdzIHBhcnRpYWwgbW92ZSBzZW1hbnRpY3MgYmVjYXVz
ZSBvdXIgZGVzdHJ1Y3RvciBzaG91bGQgbm90IGJlIGNhbGxlZAorICAgIC8vIG9uIHRoZSBTbWFs
bFB0ck9iamVjdCBpbiB0aGUgb2xkIG1lbW9yeSB3ZSB3ZXJlIG1vdmVkIGZyb20gKG90aGVyd2lz
ZSwgd2UgbWlnaHQgZnJlZSBtX2J1ZmZlciB0d2ljZSkKKyAgICAvLyB1bmxlc3MgdGhhdCBvbGQg
bWVtb3J5IGlzIHJlc2V0IHRvIGJlIGlzU21hbGwoKS4gU2VlIG1vdmUgY29uc3RydWN0b3IgYmVs
b3cuCisgICAgLy8gVG8gbWFpbnRhaW4gdGhlc2Ugc2VtYW50aWNzLCB3ZSBkZXRlcm1pbmUgaWYg
d2UncmUgc21hbGwgYnkgY2hlY2tpbmcgb3VyIHNpemUKKyAgICAvLyBhbmQgbm90IG91ciBtX2J1
ZmZlciBwb2ludGVyLiBBbmQgd2hlbiB3ZSdyZSBzbWFsbCwgd2UgZG9uJ3QgZG8gb3BlcmF0aW9u
cyBvbgorICAgIC8vIG1fYnVmZmVyLCBpbnN0ZWFkLCB3ZSBwZXJmb3JtIG9wZXJhdGlvbnMgb24g
bV9zbWFsbFN0b3JhZ2UgZGlyZWN0bHkuIFRoZSByZWFzb24gd2Ugd2FudAorICAgIC8vIHRoZXNl
IHNlbWFudGljcyBpcyB0aGF0IGl0J3MgYmVuZWZpY2lhbCB0byBoYXZlIGEgVmVjdG9yIHRoYXQg
Y29udGFpbnMgU21hbGxTZXQKKyAgICAvLyAob3IgYW4gb2JqZWN0IHdpdGggU21hbGxTZXQgYXMg
YSBmaWVsZCkgYmUgYWxsb3dlZCB0byB1c2UgbWVtY3B5IGZvciBpdHMgbW92ZSBvcGVyYXRpb24u
CisKKyAgICBTbWFsbFNldChTbWFsbFNldCYmIG90aGVyKQorICAgIHsKKyAgICAgICAgbWVtY3B5
KHRoaXMsICZvdGhlciwgc2l6ZW9mKFNtYWxsU2V0KSk7CisgICAgICAgIG90aGVyLmluaXRpYWxp
emUoKTsKKyAgICB9CisKKyAgICBTbWFsbFNldCYgb3BlcmF0b3I9KFNtYWxsU2V0JiYgb3RoZXIp
CisgICAgeworICAgICAgICB0aGlzLT5+U21hbGxTZXQoKTsKKyAgICAgICAgbmV3ICh0aGlzKSBT
bWFsbFNldChXVEZNb3ZlKG90aGVyKSk7CisgICAgICAgIHJldHVybiAqdGhpczsKKyAgICB9CisK
KyAgICB+U21hbGxTZXQoKQorICAgIHsKKyAgICAgICAgaWYgKCFpc1NtYWxsKCkpCisgICAgICAg
ICAgICBTbWFsbFNldE1hbGxvYzo6ZnJlZShtX2lubGluZS5idWZmZXIpOworICAgIH0KKworICAg
IC8vIFdlIGNvdWxkIGVhc2lseSBpbmNsdWRlIGFuIGl0ZXJhdG9yIGluIHRoaXMgdG8gZnVsbHkg
bWF0Y2ggdGhlIEhhc2hTZXQgaW50ZXJmYWNlLCBidXQgY3VycmVudGx5IG5vbmUgb2Ygb3VyIGNs
aWVudHMgcmVxdWlyZSBpdC4KKyAgICBzdHJ1Y3QgQWRkUmVzdWx0IHsKKyAgICAgICAgYm9vbCBp
c05ld0VudHJ5OworICAgIH07CisKKyAgICBpbmxpbmUgQWRkUmVzdWx0IGFkZChUIHZhbHVlKQor
ICAgIHsKKyAgICAgICAgQVNTRVJUKGlzVmFsaWRFbnRyeSh2YWx1ZSkpOworCisgICAgICAgIGlm
IChpc1NtYWxsKCkpIHsKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX3Np
emU7IGkrKykgeworICAgICAgICAgICAgICAgIGlmIChtX2lubGluZS5zbWFsbFN0b3JhZ2VbaV0g
PT0gdmFsdWUpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiB7IGZhbHNlIH07CisgICAgICAg
ICAgICB9CisKKyAgICAgICAgICAgIGlmIChtX3NpemUgPCBTbWFsbEFycmF5U2l6ZSkgeworICAg
ICAgICAgICAgICAgIG1faW5saW5lLnNtYWxsU3RvcmFnZVttX3NpemVdID0gdmFsdWU7CisgICAg
ICAgICAgICAgICAgKyttX3NpemU7CisgICAgICAgICAgICAgICAgcmV0dXJuIHsgdHJ1ZSB9Owor
ICAgICAgICAgICAgfQorCisgICAgICAgICAgICBncm93KHN0ZDo6bWF4KDY0dSwgU21hbGxBcnJh
eVNpemUgKiAyKSk7CisgICAgICAgICAgICAvLyBGYWxsIHRocm91Z2guIFdlJ3JlIG5vIGxvbmdl
ciBzbWFsbCA6KAorICAgICAgICB9CisKKyAgICAgICAgLy8gSWYgd2UncmUgbW9yZSB0aGFuIDMv
NHRocyBmdWxsIHdlIGdyb3cuCisgICAgICAgIGlmIChVTkxJS0VMWShtX3NpemUgKiA0ID49IG1f
Y2FwYWNpdHkgKiAzKSkgeworICAgICAgICAgICAgZ3JvdyhtX2NhcGFjaXR5ICogMik7CisgICAg
ICAgICAgICBBU1NFUlQoIShtX2NhcGFjaXR5ICYgKG1fY2FwYWNpdHkgLSAxKSkpOworICAgICAg
ICB9CisKKyAgICAgICAgVCogYnVja2V0ID0gdGhpcy0+YnVja2V0KHZhbHVlKTsKKyAgICAgICAg
aWYgKCpidWNrZXQgIT0gdmFsdWUpIHsKKyAgICAgICAgICAgICpidWNrZXQgPSB2YWx1ZTsKKyAg
ICAgICAgICAgICsrbV9zaXplOworICAgICAgICAgICAgcmV0dXJuIHsgdHJ1ZSB9OworICAgICAg
ICB9CisgICAgICAgIHJldHVybiB7IGZhbHNlIH07CisgICAgfQorCisgICAgaW5saW5lIGJvb2wg
Y29udGFpbnMoVCB2YWx1ZSkgY29uc3QKKyAgICB7CisgICAgICAgIEFTU0VSVChpc1ZhbGlkRW50
cnkodmFsdWUpKTsKKyAgICAgICAgaWYgKGlzU21hbGwoKSkgeworICAgICAgICAgICAgLy8gV2Ug
b25seSBuZWVkIHRvIHNlYXJjaCB1cCB0byBtX3NpemUgYmVjYXVzZSB3ZSBzdG9yZSB0aGluZ3Mg
bGluZWFybHkgaW5zaWRlIG1fc21hbGxTdG9yYWdlLgorICAgICAgICAgICAgZm9yICh1bnNpZ25l
ZCBpID0gMDsgaSA8IG1fc2l6ZTsgaSsrKSB7CisgICAgICAgICAgICAgICAgaWYgKG1faW5saW5l
LnNtYWxsU3RvcmFnZVtpXSA9PSB2YWx1ZSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRy
dWU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0K
KworICAgICAgICBUKiBidWNrZXQgPSB0aGlzLT5idWNrZXQodmFsdWUpOworICAgICAgICByZXR1
cm4gKmJ1Y2tldCA9PSB2YWx1ZTsKKyAgICB9CisKKyAgICBjbGFzcyBpdGVyYXRvciB7CisgICAg
ICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworICAgIHB1YmxpYzoKKyAgICAgICAgaXRlcmF0
b3ImIG9wZXJhdG9yKysoKQorICAgICAgICB7CisgICAgICAgICAgICBtX2luZGV4Kys7CisgICAg
ICAgICAgICBBU1NFUlQobV9pbmRleCA8PSBtX2NhcGFjaXR5KTsKKyAgICAgICAgICAgIHdoaWxl
IChtX2luZGV4IDwgbV9jYXBhY2l0eSAmJiBtX2J1ZmZlclttX2luZGV4XSA9PSBlbXB0eVZhbHVl
KCkpCisgICAgICAgICAgICAgICAgbV9pbmRleCsrOworICAgICAgICAgICAgcmV0dXJuICp0aGlz
OworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBUIG9wZXJhdG9yKigpIGNvbnN0IHsgQVNT
RVJUKG1faW5kZXggPCBtX2NhcGFjaXR5KTsgcmV0dXJuIHN0YXRpY19jYXN0PFQ+KG1fYnVmZmVy
W21faW5kZXhdKTsgfQorICAgICAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgaXRlcmF0b3ImIG90
aGVyKSBjb25zdCB7IEFTU0VSVChtX2J1ZmZlciA9PSBvdGhlci5tX2J1ZmZlcik7IHJldHVybiBt
X2luZGV4ID09IG90aGVyLm1faW5kZXg7IH0KKyAgICAgICAgYm9vbCBvcGVyYXRvciE9KGNvbnN0
IGl0ZXJhdG9yJiBvdGhlcikgY29uc3QgeyBBU1NFUlQobV9idWZmZXIgPT0gb3RoZXIubV9idWZm
ZXIpOyByZXR1cm4gISgqdGhpcyA9PSBvdGhlcik7IH0KKworICAgIHByaXZhdGU6CisgICAgICAg
IHRlbXBsYXRlPHR5cGVuYW1lIFUsIHR5cGVuYW1lIEgsIHVuc2lnbmVkIFM+IGZyaWVuZCBjbGFz
cyBXVEY6OlNtYWxsU2V0OworICAgICAgICB1bnNpZ25lZCBtX2luZGV4OworICAgICAgICB1bnNp
Z25lZCBtX2NhcGFjaXR5OworICAgICAgICBUKiBtX2J1ZmZlcjsKKyAgICB9OworCisgICAgaXRl
cmF0b3IgYmVnaW4oKSBjb25zdAorICAgIHsKKyAgICAgICAgaXRlcmF0b3IgaXQ7CisgICAgICAg
IGl0Lm1faW5kZXggPSBzdGQ6Om51bWVyaWNfbGltaXRzPHVuc2lnbmVkPjo6bWF4KCk7CisgICAg
ICAgIGl0Lm1fY2FwYWNpdHkgPSBtX2NhcGFjaXR5OworICAgICAgICBpZiAoaXNTbWFsbCgpKQor
ICAgICAgICAgICAgaXQubV9idWZmZXIgPSBjb25zdF9jYXN0PFQqPihtX2lubGluZS5zbWFsbFN0
b3JhZ2UpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBpdC5tX2J1ZmZlciA9IG1faW5saW5l
LmJ1ZmZlcjsKKworICAgICAgICArK2l0OworCisgICAgICAgIHJldHVybiBpdDsKKyAgICB9CisK
KyAgICBpdGVyYXRvciBlbmQoKSBjb25zdAorICAgIHsKKyAgICAgICAgaXRlcmF0b3IgaXQ7Cisg
ICAgICAgIGl0Lm1faW5kZXggPSBtX2NhcGFjaXR5OworICAgICAgICBpdC5tX2NhcGFjaXR5ID0g
bV9jYXBhY2l0eTsKKyAgICAgICAgaWYgKGlzU21hbGwoKSkKKyAgICAgICAgICAgIGl0Lm1fYnVm
ZmVyID0gY29uc3RfY2FzdDxUKj4obV9pbmxpbmUuc21hbGxTdG9yYWdlKTsKKyAgICAgICAgZWxz
ZQorICAgICAgICAgICAgaXQubV9idWZmZXIgPSBtX2lubGluZS5idWZmZXI7CisKKyAgICAgICAg
cmV0dXJuIGl0OworICAgIH0KKworICAgIGlubGluZSB1bnNpZ25lZCBzaXplKCkgY29uc3QgeyBy
ZXR1cm4gbV9zaXplOyB9CisKKyAgICBpbmxpbmUgYm9vbCBpc0VtcHR5KCkgY29uc3QgeyByZXR1
cm4gIXNpemUoKTsgfQorCisgICAgdW5zaWduZWQgbWVtb3J5VXNlKCkgY29uc3QKKyAgICB7Cisg
ICAgICAgIHVuc2lnbmVkIG1lbW9yeSA9IHNpemVvZihTbWFsbFNldCk7CisgICAgICAgIGlmICgh
aXNTbWFsbCgpKQorICAgICAgICAgICAgbWVtb3J5ICs9IG1fY2FwYWNpdHkgKiBzaXplb2YoVCk7
CisgICAgICAgIHJldHVybiBtZW1vcnk7CisgICAgfQorCitwcml2YXRlOgorICAgIGNvbnN0ZXhw
ciBzdGF0aWMgVCBlbXB0eVZhbHVlKCkKKyAgICB7CisgICAgICAgIGlmIGNvbnN0ZXhwciAoc3Rk
Ojppc19wb2ludGVyPFQ+Ojp2YWx1ZSkKKyAgICAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxU
PihiaXR3aXNlX2Nhc3Q8dm9pZCo+KHN0ZDo6bnVtZXJpY19saW1pdHM8dWludHB0cl90Pjo6bWF4
KCkpKTsKKyAgICAgICAgcmV0dXJuIHN0ZDo6bnVtZXJpY19saW1pdHM8VD46Om1heCgpOworICAg
IH0KKworICAgIGJvb2wgaXNWYWxpZEVudHJ5KGNvbnN0IFQgdmFsdWUpIGNvbnN0CisgICAgewor
ICAgICAgICByZXR1cm4gdmFsdWUgIT0gZW1wdHlWYWx1ZSgpOworICAgIH0KKworICAgIGlubGlu
ZSBib29sIGlzU21hbGwoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fY2FwYWNpdHkg
PT0gU21hbGxBcnJheVNpemU7CisgICAgfQorCisgICAgaW5saW5lIHZvaWQgaW5pdGlhbGl6ZSgp
CisgICAgeworICAgICAgICBtX3NpemUgPSAwOworICAgICAgICBtX2NhcGFjaXR5ID0gU21hbGxB
cnJheVNpemU7CisgICAgICAgIG1lbXNldChtX2lubGluZS5zbWFsbFN0b3JhZ2UsIC0xLCBzaXpl
b2YoVCkgKiBTbWFsbEFycmF5U2l6ZSk7CisgICAgICAgIEFTU0VSVChpc1NtYWxsKCkpOworICAg
IH0KKworICAgIGlubGluZSB2b2lkIGdyb3codW5zaWduZWQgc2l6ZSkKKyAgICB7CisgICAgICAg
IC8vIFdlIG1lbXNldCB0aGUgbmV3IGJ1ZmZlciB3aXRoIC0xLCBzbyBmb3IgY29uc2lzdGVuY3kg
ZW1wdHlWYWx1ZSgpIG11c3QgcmV0dXJuIHNvbWV0aGluZyB3aGljaCBpcyBhbGwgMXMuCisjaWYg
IWRlZmluZWQoTkRFQlVHKQorICAgICAgICBpZiBjb25zdGV4cHIgKHN0ZDo6aXNfcG9pbnRlcjxU
Pjo6dmFsdWUpCisgICAgICAgICAgICBBU1NFUlQoYml0d2lzZV9jYXN0PGludHB0cl90PihlbXB0
eVZhbHVlKCkpID09IC0xbGwpOworICAgICAgICBlbHNlIGlmIGNvbnN0ZXhwciAoc2l6ZW9mKFQp
ID09IDgpCisgICAgICAgICAgICBBU1NFUlQoYml0d2lzZV9jYXN0PGludDY0X3Q+KGVtcHR5VmFs
dWUoKSkgPT0gLTFsbCk7CisgICAgICAgIGVsc2UgaWYgY29uc3RleHByIChzaXplb2YoVCkgPT0g
NCkKKyAgICAgICAgICAgIEFTU0VSVChiaXR3aXNlX2Nhc3Q8aW50MzJfdD4oZW1wdHlWYWx1ZSgp
KSA9PSAtMSk7CisgICAgICAgIGVsc2UgaWYgY29uc3RleHByIChzaXplb2YoVCkgPT0gMikKKyAg
ICAgICAgICAgIEFTU0VSVChiaXR3aXNlX2Nhc3Q8aW50MTZfdD4oZW1wdHlWYWx1ZSgpKSA9PSAt
MSk7CisgICAgICAgIGVsc2UgaWYgY29uc3RleHByIChzaXplb2YoVCkgPT0gMSkKKyAgICAgICAg
ICAgIEFTU0VSVChiaXR3aXNlX2Nhc3Q8aW50OF90PihlbXB0eVZhbHVlKCkpID09IC0xKTsKKyAg
ICAgICAgZWxzZQorICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyNl
bmRpZgorCisgICAgICAgIHNpemVfdCBhbGxvY2F0aW9uU2l6ZSA9IHNpemVvZihUKSAqIHNpemU7
CisgICAgICAgIGJvb2wgd2FzU21hbGwgPSBpc1NtYWxsKCk7CisgICAgICAgIFQqIG9sZEJ1ZmZl
ciA9IHdhc1NtYWxsID8gbV9pbmxpbmUuc21hbGxTdG9yYWdlIDogbV9pbmxpbmUuYnVmZmVyOwor
ICAgICAgICB1bnNpZ25lZCBvbGRDYXBhY2l0eSA9IG1fY2FwYWNpdHk7CisgICAgICAgIFQqIG5l
d0J1ZmZlciA9IHN0YXRpY19jYXN0PFQqPihTbWFsbFNldE1hbGxvYzo6bWFsbG9jKGFsbG9jYXRp
b25TaXplKSk7CisgICAgICAgIG1lbXNldChuZXdCdWZmZXIsIC0xLCBhbGxvY2F0aW9uU2l6ZSk7
CisgICAgICAgIG1fY2FwYWNpdHkgPSBzaXplOworCisgICAgICAgIGZvciAodW5zaWduZWQgaSA9
IDA7IGkgPCBvbGRDYXBhY2l0eTsgaSsrKSB7CisgICAgICAgICAgICBpZiAob2xkQnVmZmVyW2ld
ICE9IGVtcHR5VmFsdWUoKSkgeworICAgICAgICAgICAgICAgIFQqIHB0ciA9IGJ1Y2tldEluQnVm
ZmVyKG5ld0J1ZmZlciwgc3RhdGljX2Nhc3Q8VD4ob2xkQnVmZmVyW2ldKSk7CisgICAgICAgICAg
ICAgICAgKnB0ciA9IG9sZEJ1ZmZlcltpXTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisg
ICAgICAgIGlmICghd2FzU21hbGwpCisgICAgICAgICAgICBTbWFsbFNldE1hbGxvYzo6ZnJlZShv
bGRCdWZmZXIpOworCisgICAgICAgIG1faW5saW5lLmJ1ZmZlciA9IG5ld0J1ZmZlcjsKKyAgICB9
CisKKworICAgIGlubGluZSBUKiBidWNrZXQoVCB0YXJnZXQpIGNvbnN0CisgICAgeworICAgICAg
ICBBU1NFUlQoIWlzU21hbGwoKSk7CisgICAgICAgIHJldHVybiBidWNrZXRJbkJ1ZmZlcihtX2lu
bGluZS5idWZmZXIsIHRhcmdldCk7CisgICAgfQorCisgICAgaW5saW5lIFQqIGJ1Y2tldEluQnVm
ZmVyKFQqIGJ1ZmZlciwgVCB0YXJnZXQpIGNvbnN0CisgICAgeworICAgICAgICBBU1NFUlQoISht
X2NhcGFjaXR5ICYgKG1fY2FwYWNpdHkgLSAxKSkpOworICAgICAgICB1bnNpZ25lZCBidWNrZXQg
PSBIYXNoOjpoYXNoKHRhcmdldCkgJiAobV9jYXBhY2l0eSAtIDEpOworICAgICAgICB1bnNpZ25l
ZCBpbmRleCA9IDA7CisgICAgICAgIHdoaWxlICh0cnVlKSB7CisgICAgICAgICAgICBUKiBwdHIg
PSBidWZmZXIgKyBidWNrZXQ7CisgICAgICAgICAgICBpZiAoKnB0ciA9PSBlbXB0eVZhbHVlKCkp
CisgICAgICAgICAgICAgICAgcmV0dXJuIHB0cjsKKyAgICAgICAgICAgIGlmICgqcHRyID09IHRh
cmdldCkKKyAgICAgICAgICAgICAgICByZXR1cm4gcHRyOworICAgICAgICAgICAgaW5kZXgrKzsK
KyAgICAgICAgICAgIGJ1Y2tldCA9IChidWNrZXQgKyBpbmRleCkgJiAobV9jYXBhY2l0eSAtIDEp
OworICAgICAgICB9CisgICAgfQorCisgICAgdW5zaWduZWQgbV9zaXplOworICAgIHVuc2lnbmVk
IG1fY2FwYWNpdHk7CisgICAgdW5pb24gVSB7CisgICAgICAgIFQqIGJ1ZmZlcjsKKyAgICAgICAg
VCBzbWFsbFN0b3JhZ2VbU21hbGxBcnJheVNpemVdOworICAgICAgICBVKCkgeyB9OworICAgIH0g
bV9pbmxpbmU7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXVEYKKwordXNpbmcgV1RGOjpTbWFsbFNl
dDsKZGlmZiAtLWdpdCBhL1Rvb2xzL0NoYW5nZUxvZyBiL1Rvb2xzL0NoYW5nZUxvZwppbmRleCAz
ZTVkMTNiZTBiNmYuLjE0MjYwOGM1MGMyZSAxMDA2NDQKLS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisr
KyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE5IEBACisyMDIxLTA1LTE4ICBSb2JpbiBN
b3Jpc3NldCAgPHJtb3Jpc3NldEBhcHBsZS5jb20+CisKKyAgICAgICAgTWFrZSBBaXJBbGxvY2F0
ZVJlZ2lzdGVyc0J5R3JhcGhDb2xvcmluZyB1c2UgbGVzcyBtZW1vcnkKKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIyNTg0OAorCisgICAgICAgIFJldmll
d2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFNpbXBseSBhZGRlZCBzb21lIHRlc3Rz
IGZvciBTbWFsbFNldC4KKworICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdFdlYktpdEFQSS54
Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMv
V1RGL1NtYWxsU2V0LmNwcDogQWRkZWQuCisgICAgICAgIChUZXN0V2ViS2l0QVBJOjp0ZXN0U21h
bGxTZXRPZlVuc2lnbmVkKToKKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OnRlc3RTbWFsbFNldE9m
UG9pbnRlcnMpOgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6dGVzdFZlY3RvcnNPZlNtYWxsU2V0
c09mVW5zaWduZWQpOgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6VEVTVCk6CisKIDIwMjEtMDUt
MTggIEpvbmF0aGFuIEJlZGFyZCAgPGpiZWRhcmRAYXBwbGUuY29tPgogCiAgICAgICAgIFt3ZWJr
aXRweV0gRm9yd2FyZCBib290ZWQgc2ltdWxhdG9ycyB0byBjaGlsZHJlbiBwcm9jZXNzZXMKZGlm
ZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdFdlYktpdEFQSS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0V2ViS2l0QVBJLnhjb2RlcHJv
ai9wcm9qZWN0LnBieHByb2oKaW5kZXggMmU3ZmE0NDU0ODc2Li5mZjRmNzA4ZjczMzcgMTAwNjQ0
Ci0tLSBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdFdlYktpdEFQSS54Y29kZXByb2ovcHJvamVj
dC5wYnhwcm9qCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdFdlYktpdEFQSS54Y29kZXBy
b2ovcHJvamVjdC5wYnhwcm9qCkBAIC0yMDgsNiArMjA4LDcgQEAKIAkJMzFFOUJEQTMyNDdGNTcy
OTAwMkU1MUEyIC8qIHdlYmdsLmh0bWwgaW4gQ29weSBSZXNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMzFFOUJEQTIyNDdGNEREMDAwMkU1MUEyIC8qIHdlYmdsLmh0
bWwgKi87IH07CiAJCTMzOTc2RDgzMjREQzQ3OUIwMDgxMjMwNCAvKiBJbmRleFNwYXJzZVNldC5j
cHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzMzk3NkQ4
MjI0REM0NzlCMDA4MTIzMDQgLyogSW5kZXhTcGFyc2VTZXQuY3BwICovOyB9OwogCQkzM0JFNUFG
OTEzN0I1QUFFMDA3MDU4MTMgLyogTW91c2VNb3ZlQWZ0ZXJDcmFzaF9CdW5kbGUuY3BwIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMzNCRTVBRjgxMzdCNUFB
RTAwNzA1ODEzIC8qIE1vdXNlTW92ZUFmdGVyQ3Jhc2hfQnVuZGxlLmNwcCAqLzsgfTsKKwkJMzND
MkM5QzEyNjUxRjVCOTAwRTQwN0Y2IC8qIFNtYWxsU2V0LmNwcCBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDMzQzJDOUMwMjY1MUY1QjkwMEU0MDdGNiAvKiBT
bWFsbFNldC5jcHAgKi87IH07CiAJCTMzREM4OTEyMTQxOTU1RkUwMDc0N0VGNyAvKiBzaW1wbGUt
aWZyYW1lLmh0bWwgaW4gQ29weSBSZXNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMzNEQzg5MEUxNDE5NTM5MzAwNzQ3RUY3IC8qIHNpbXBsZS1pZnJhbWUuaHRtbCAq
LzsgfTsKIAkJMzNEQzg5MTQxNDE5NTc5RjAwNzQ3RUY3IC8qIExvYWRDYW5jZWxlZE5vU2VydmVy
UmVkaXJlY3RDYWxsYmFja19CdW5kbGUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMzNEQzg5MTMxNDE5NTc5RjAwNzQ3RUY3IC8qIExvYWRDYW5jZWxl
ZE5vU2VydmVyUmVkaXJlY3RDYWxsYmFja19CdW5kbGUuY3BwICovOyB9OwogCQkzM0U3OUUwNjEz
N0I1RkQ5MDBFMzJEOTkgLyogbW91c2UtbW92ZS1saXN0ZW5lci5odG1sIGluIENvcHkgUmVzb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDMzRTc5RTA1MTM3QjVGQ0Uw
MEUzMkQ5OSAvKiBtb3VzZS1tb3ZlLWxpc3RlbmVyLmh0bWwgKi87IH07CkBAIC0xOTkzLDYgKzE5
OTQsNyBAQAogCQkzMzk3NkQ4MjI0REM0NzlCMDA4MTIzMDQgLyogSW5kZXhTcGFyc2VTZXQuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSW5kZXhTcGFyc2VTZXQuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkzM0JFNUFGNDEzN0I1QTZDMDA3MDU4MTMg
LyogTW91c2VNb3ZlQWZ0ZXJDcmFzaC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IHBhdGggPSBNb3VzZU1vdmVBZnRlckNyYXNoLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJMzNCRTVBRjgxMzdCNUFBRTAwNzA1ODEzIC8qIE1vdXNlTW92ZUFmdGVyQ3Jhc2hfQnVu
ZGxlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IE1vdXNlTW92ZUFm
dGVyQ3Jhc2hfQnVuZGxlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMzNDMkM5
QzAyNjUxRjVCOTAwRTQwN0Y2IC8qIFNtYWxsU2V0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFNt
YWxsU2V0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMzNEQzg5MEUxNDE5NTM5
MzAwNzQ3RUY3IC8qIHNpbXBsZS1pZnJhbWUuaHRtbCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQuaHRtbDsgcGF0
aCA9ICJzaW1wbGUtaWZyYW1lLmh0bWwiOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkz
M0RDODkxMDE0MTk1M0EzMDA3NDdFRjcgLyogTG9hZENhbmNlbGVkTm9TZXJ2ZXJSZWRpcmVjdENh
bGxiYWNrLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IExvYWRDYW5j
ZWxlZE5vU2VydmVyUmVkaXJlY3RDYWxsYmFjay5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTMzREM4OTEzMTQxOTU3OUYwMDc0N0VGNyAvKiBMb2FkQ2FuY2VsZWROb1NlcnZlclJl
ZGlyZWN0Q2FsbGJhY2tfQnVuZGxlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
cGF0aCA9IExvYWRDYW5jZWxlZE5vU2VydmVyUmVkaXJlY3RDYWxsYmFja19CdW5kbGUuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtNDQyMyw2ICs0NDI1LDcgQEAKIAkJCQk5MzNE
NjMxQjFGQ0I3NjE4MDAzMkVDRDYgLyogSGFzaGVyLmNwcCAqLywKIAkJCQkwQkNEODMzNDE0ODU3
Q0U0MDBFQTIwMDMgLyogSGFzaE1hcC5jcHAgKi8sCiAJCQkJMjZCMkRGRjgxNUJERTU5OTAwNEY2
OTFEIC8qIEhhc2hTZXQuY3BwICovLAorCQkJCTMzQzJDOUMwMjY1MUY1QjkwMEU0MDdGNiAvKiBT
bWFsbFNldC5jcHAgKi8sCiAJCQkJN0M4QkZGNzAyM0MwMTA2NzAwQzAwOUIzIC8qIEhleE51bWJl
ci5jcHAgKi8sCiAJCQkJMzM5NzZEODIyNERDNDc5QjAwODEyMzA0IC8qIEluZGV4U3BhcnNlU2V0
LmNwcCAqLywKIAkJCQkyNjZGQUZEMjE1RTU3NzUyMDBGNjFENUIgLyogSW50ZWdlclRvU3RyaW5n
Q29udmVyc2lvbi5jcHAgKi8sCkBAIC01MTU4LDYgKzUxNjEsNyBAQAogCQkJZmlsZXMgPSAoCiAJ
CQkJN0M4M0RFOTkxRDBBNTkwQzAwRkVCQ0YzIC8qIEF0b21TdHJpbmcuY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJRkUyRDk0NzQyNDVFQjJGNDAwRTQ4MTM1IC8qIEJpdG1hcC5jcHAgaW4gU291cmNl
cyAqLywKKwkJCQkzM0MyQzlDMTI2NTFGNUI5MDBFNDA3RjYgLyogU21hbGxTZXQuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJMUFEQUQxNTAxRDc3QTlGNjAwMjEyNTg2IC8qIEJsb2NrUHRyLm1tIGlu
IFNvdXJjZXMgKi8sCiAJCQkJN0M4M0RFOUMxRDBBNTkwQzAwRkVCQ0YzIC8qIEJsb29tRmlsdGVy
LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTdDODNERjE4MUQwQTU5MEMwMEZFQkNGMyAvKiBCb3hQ
dHIuY3BwIGluIFNvdXJjZXMgKi8sCmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rl
c3RzL1dURi9TbWFsbFNldC5jcHAgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dURi9TbWFs
bFNldC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwLi44ZjFiZjA0
NTgyZDEKLS0tIC9kZXYvbnVsbAorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dURi9T
bWFsbFNldC5jcHAKQEAgLTAsMCArMSwxNTMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFT
IElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVU
T1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
CisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YK
KyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29u
ZmlnLmgiCisKKyNpbmNsdWRlICJUZXN0LmgiCisjaW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4KKyNp
bmNsdWRlIDx3dGYvU21hbGxTZXQuaD4KKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisKK25hbWVz
cGFjZSBUZXN0V2ViS2l0QVBJIHsKKwordGVtcGxhdGU8dHlwZW5hbWUgVD4KK3ZvaWQgdGVzdFNt
YWxsU2V0T2ZVbnNpZ25lZCh1bnNpZ25lZCBuKQoreworICAgIFNtYWxsU2V0PFQsIEludEhhc2g8
VD4+IHNldDsKKworICAgIEVYUEVDVF9UUlVFKHNldC5pc0VtcHR5KCkpOworICAgIEVYUEVDVF9F
UShzZXQuc2l6ZSgpLCAwdSk7CisKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbjsgKytp
KSB7CisgICAgICAgIGF1dG8gcmVzdWx0ID0gc2V0LmFkZChpKTsKKyAgICAgICAgRVhQRUNUX1RS
VUUocmVzdWx0LmlzTmV3RW50cnkpOworICAgIH0KKworICAgIEVYUEVDVF9GQUxTRShzZXQuaXNF
bXB0eSgpKTsKKyAgICBFWFBFQ1RfRVEoc2V0LnNpemUoKSwgbik7CisKKyAgICBmb3IgKHVuc2ln
bmVkIGkgPSAwOyBpIDwgMiAqIG47IGkgKz0gMikgeworICAgICAgICBhdXRvIHJlc3VsdCA9IHNl
dC5hZGQoaSk7CisgICAgICAgIGlmIChpIDwgbikKKyAgICAgICAgICAgIEVYUEVDVF9GQUxTRShy
ZXN1bHQuaXNOZXdFbnRyeSk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIEVYUEVDVF9UUlVF
KHJlc3VsdC5pc05ld0VudHJ5KTsKKyAgICB9CisKKyAgICBFWFBFQ1RfRVEoc2V0LnNpemUoKSwg
biArIG4gLyAyKTsKKworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCAyICogbjsgKytpKSB7
CisgICAgICAgIGlmIChpIDwgbiB8fCAhKGkgJSAyKSkKKyAgICAgICAgICAgIEVYUEVDVF9UUlVF
KHNldC5jb250YWlucyhpKSk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIEVYUEVDVF9GQUxT
RShzZXQuY29udGFpbnMoaSkpOworICAgIH0KKworICAgIHVuc2lnbmVkIGNvdW50ID0gMDsKKyAg
ICBIYXNoU2V0PFQ+IHJlZmVyZW5jZVNldDsKKyAgICBmb3IgKHVuc2lnbmVkIGkgOiBzZXQpIHsK
KyAgICAgICAgcmVmZXJlbmNlU2V0LmFkZChpKTsKKyAgICAgICAgKytjb3VudDsKKyAgICB9Cisg
ICAgRVhQRUNUX0VRKGNvdW50LCBuICsgbiAvIDIpOworICAgIEVYUEVDVF9FUShjb3VudCwgcmVm
ZXJlbmNlU2V0LnNpemUoKSk7Cit9CisKK3ZvaWQgdGVzdFNtYWxsU2V0T2ZQb2ludGVycygpCit7
CisgICAgU21hbGxTZXQ8aW50Kj4gc2V0OworCisgICAgY29uc3RleHByIHVuc2lnbmVkIGFycmF5
U2l6ZSA9IDIwMDsKKyAgICBpbnQgYXJyYXlbYXJyYXlTaXplXTsKKyAgICBmb3IgKHVuc2lnbmVk
IGkgPSAwOyBpIDwgYXJyYXlTaXplOyArK2kpCisgICAgICAgIGFycmF5W2ldID0gaTsKKworICAg
IGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBhcnJheVNpemU7ICsraSkgeworICAgICAgICBpbnQq
IHB0ciA9ICYoYXJyYXlbaV0pOworICAgICAgICBFWFBFQ1RfRkFMU0Uoc2V0LmNvbnRhaW5zKHB0
cikpOworICAgICAgICBhdXRvIHJlc3VsdCA9IHNldC5hZGQocHRyKTsKKyAgICAgICAgRVhQRUNU
X1RSVUUocmVzdWx0LmlzTmV3RW50cnkpOworICAgICAgICBFWFBFQ1RfVFJVRShzZXQuY29udGFp
bnMocHRyKSk7CisgICAgICAgIHJlc3VsdCA9IHNldC5hZGQocHRyKTsKKyAgICAgICAgRVhQRUNU
X0ZBTFNFKHJlc3VsdC5pc05ld0VudHJ5KTsKKyAgICB9CisKKyAgICBmb3IgKGludCogcHRyIDog
c2V0KQorICAgICAgICArKygqcHRyKTsKKworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBh
cnJheVNpemU7ICsraSkKKyAgICAgICAgRVhQRUNUX0VRKGFycmF5W2ldLCBzdGF0aWNfY2FzdDxp
bnQ+KGkrMSkpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPgordm9pZCB0ZXN0VmVjdG9yc09m
U21hbGxTZXRzT2ZVbnNpZ25lZCgpCit7CisgICAgVmVjdG9yPFNtYWxsU2V0PFQsIEludEhhc2g8
VD4+LCAyPiB2ZWN0b3I7CisgICAgdmVjdG9yLmFwcGVuZCh7IH0pOworICAgIHZlY3Rvci5hcHBl
bmQoeyB9KTsKKworICAgIHZlY3RvclswXS5hZGQoMTAwKTsKKyAgICB2ZWN0b3JbMF0uYWRkKDIw
MCk7CisgICAgdmVjdG9yWzBdLmFkZCgzMDApOworCisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsg
aSA8IDIwMDsgKytpKQorICAgICAgICB2ZWN0b3JbMV0uYWRkKGkpOworCisgICAgLy8gTm93IHdl
IGNhdXNlIHRoZSB2ZWN0b3IgdG8gY29weSBpdHMgY29udGVudHMgdG8gYSBsYXJnZXIgYnVmZmVy
LgorICAgIC8vIFRoaXMgc2hvdWxkIGNvcnJ1cHQgbmVpdGhlciB0aGUgc21hbGwgc2V0IHRoYXQg
dXNlcyBpbmxpbmUgc3RvcmFnZSAodmVjdG9yWzBdKSwgbm9yIHRoZSBvbmUgdGhhdCB1c2VzIGFu
IG91dC1vZi1saW5lIGJ1ZmZlciAodmVjdG9yWzFdKS4KKyAgICB2ZWN0b3IucmVzaXplKDMwMCk7
CisKKyAgICBFWFBFQ1RfRVEodmVjdG9yWzBdLnNpemUoKSwgM3UpOworICAgIEVYUEVDVF9UUlVF
KHZlY3RvclswXS5jb250YWlucygxMDApKTsKKyAgICBFWFBFQ1RfVFJVRSh2ZWN0b3JbMF0uY29u
dGFpbnMoMjAwKSk7CisgICAgRVhQRUNUX1RSVUUodmVjdG9yWzBdLmNvbnRhaW5zKDMwMCkpOwor
ICAgIEVYUEVDVF9GQUxTRSh2ZWN0b3JbMF0uY29udGFpbnMoNDIpKTsKKworICAgIEVYUEVDVF9F
USh2ZWN0b3JbMV0uc2l6ZSgpLCAyMDB1KTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwg
MjAwOyArK2kpCisgICAgICAgIEVYUEVDVF9UUlVFKHZlY3RvclsxXS5jb250YWlucyhpKSk7Cisg
ICAgRVhQRUNUX0ZBTFNFKHZlY3RvclsxXS5jb250YWlucygzMDApKTsKK30KKworVEVTVChXVEZf
U21hbGxTZXQsIFRocmVlVWludDgpIHsgdGVzdFNtYWxsU2V0T2ZVbnNpZ25lZDx1aW50OF90Pigz
KTsgfQorVEVTVChXVEZfU21hbGxTZXQsIEZvdXJVaW50OCkgeyB0ZXN0U21hbGxTZXRPZlVuc2ln
bmVkPHVpbnQ4X3Q+KDQpOyB9CitURVNUKFdURl9TbWFsbFNldCwgSHVuZHJlZFVpbnQ4KSB7IHRl
c3RTbWFsbFNldE9mVW5zaWduZWQ8dWludDhfdD4oMTAwKTsgfQorVEVTVChXVEZfU21hbGxTZXQs
IFRocmVlVWludDE2KSB7IHRlc3RTbWFsbFNldE9mVW5zaWduZWQ8dWludDE2X3Q+KDMpOyB9CitU
RVNUKFdURl9TbWFsbFNldCwgRm91clVpbnQxNikgeyB0ZXN0U21hbGxTZXRPZlVuc2lnbmVkPHVp
bnQxNl90Pig0KTsgfQorVEVTVChXVEZfU21hbGxTZXQsIEh1bmRyZWRVaW50MTYpIHsgdGVzdFNt
YWxsU2V0T2ZVbnNpZ25lZDx1aW50MTZfdD4oMTAwKTsgfQorVEVTVChXVEZfU21hbGxTZXQsIFRo
cmVlVWludDMyKSB7IHRlc3RTbWFsbFNldE9mVW5zaWduZWQ8dWludDMyX3Q+KDMpOyB9CitURVNU
KFdURl9TbWFsbFNldCwgRm91clVpbnQzMikgeyB0ZXN0U21hbGxTZXRPZlVuc2lnbmVkPHVpbnQz
Ml90Pig0KTsgfQorVEVTVChXVEZfU21hbGxTZXQsIEh1bmRyZWRVaW50MzIpIHsgdGVzdFNtYWxs
U2V0T2ZVbnNpZ25lZDx1aW50MzJfdD4oMTAwKTsgfQorVEVTVChXVEZfU21hbGxTZXQsIFRocmVl
VWludDY0KSB7IHRlc3RTbWFsbFNldE9mVW5zaWduZWQ8dWludDY0X3Q+KDMpOyB9CitURVNUKFdU
Rl9TbWFsbFNldCwgRm91clVpbnQ2NCkgeyB0ZXN0U21hbGxTZXRPZlVuc2lnbmVkPHVpbnQ2NF90
Pig0KTsgfQorVEVTVChXVEZfU21hbGxTZXQsIEh1bmRyZWRVaW50NjQpIHsgdGVzdFNtYWxsU2V0
T2ZVbnNpZ25lZDx1aW50NjRfdD4oMTAwKTsgfQorCitURVNUKFdURl9TbWFsbFNldCwgUG9pbnRl
cnMpIHsgdGVzdFNtYWxsU2V0T2ZQb2ludGVycygpOyB9CisKK1RFU1QoV1RGX1NtYWxsU2V0LCBW
ZWN0b3JVaW50MTYpIHsgdGVzdFZlY3RvcnNPZlNtYWxsU2V0c09mVW5zaWduZWQ8dWludDE2X3Q+
KCk7IH0KK1RFU1QoV1RGX1NtYWxsU2V0LCBWZWN0b3JVaW50MzIpIHsgdGVzdFZlY3RvcnNPZlNt
YWxsU2V0c09mVW5zaWduZWQ8dWludDMyX3Q+KCk7IH0KK1RFU1QoV1RGX1NtYWxsU2V0LCBWZWN0
b3JVaW50NjQpIHsgdGVzdFZlY3RvcnNPZlNtYWxsU2V0c09mVW5zaWduZWQ8dWludDY0X3Q+KCk7
IH0KKworfSAvLyBuYW1lc3BhY2UgVGVzdFdlYktpdEFQSQo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="0"
              isprivate="0"
          >
            <attachid>428993</attachid>
            <date>2021-05-18 16:26:57 -0700</date>
            <delta_ts>2021-05-18 16:26:57 -0700</delta_ts>
            <desc>memory use of the interference graphs in JetStream2</desc>
            <filename>memoryUse_JetStream2</filename>
            <type>text/plain</type>
            <size>12334</size>
            <attacher name="Robin Morisset">rmorisset</attacher>
            
              <data encoding="base64">UnVubmluZyBXU0w6CiAgICBudW1UbXBzfG51bUVkZ2VzfG1lbW9yeVVzZShrQik6IDUzMCB8IDI5
OTYgfCAzMiAtPiAxMQogICAgbnVtVG1wc3xudW1FZGdlc3xtZW1vcnlVc2Uoa0IpOiA0MTEgfCA3
ODE0IHwgNjQgLT4gMTAKICAgIG51bVRtcHN8bnVtRWRnZXN8bWVtb3J5VXNlKGtCKTogNTUwIHwg
MzA2MyB8IDMyIC0+IDEzCiAgICBudW1UbXBzfG51bUVkZ2VzfG1lbW9yeVVzZShrQik6IDQ1NCB8
IDIxOTcgfCAzMiAtPiA5CiAgICBudW1UbXBzfG51bUVkZ2VzfG1lbW9yeVVzZShrQik6IDc2NCB8
IDE4MzYzIHwgMjU2IC0+IDIwCiAgICBudW1UbXBzfG51bUVkZ2VzfG1lbW9yeVVzZShrQik6IDEw
NTUgfCA0NzgwIHwgNjQgLT4gMjUKICAgIG51bVRtcHN8bnVtRWRnZXN8bWVtb3J5VXNlKGtCKTog
NTUwIHwgMjIyMSB8IDMyIC0+IDEyCiAgICBudW1UbXBzfG51bUVkZ2VzfG1lbW9yeVVzZShrQik6
IDQ2MSB8IDIyMTcgfCAzMiAtPiAxMAogICAgbnVtVG1wc3xudW1FZGdlc3xtZW1vcnlVc2Uoa0Ip
OiA1MDIgfCAyNTA4IHwgMzIgLT4gMTAKICAgIG51bVRtcHN8bnVtRWRnZXN8bWVtb3J5VXNlKGtC
KTogNDEwIHwgMTgyMiB8IDE2IC0+IDgKICAgIG51bVRtcHN8bnVtRWRnZXN8bWVtb3J5VXNlKGtC
KTogNDA2IHwgMjE2OCB8IDMyIC0+IDgKICAgIG51bVRtcHN8bnVtRWRnZXN8bWVtb3J5VXNlKGtC
KTogNDQxIHwgODQyNyB8IDEyOCAtPiAxMAogICAgbnVtVG1wc3xudW1FZGdlc3xtZW1vcnlVc2Uo
a0IpOiA1OTcgfCAzMDk1IHwgMzIgLT4gMTMKICAgIG51bVRtcHN8bnVtRWRnZXN8bWVtb3J5VXNl
KGtCKTogNDI3IHwgMTUwMTYgfCAxMjggLT4gMTEKICAgIG51bVRtcHN8bnVtRWRnZXN8bWVtb3J5
VXNlKGtCKTogNjIyIHwgMzMxOSB8IDMyIC0+IDEzClJ1bm5pbmcgVW5pUG9rZXI6CiAgICBudW1U
bXBzfG51bUVkZ2VzfG1lbW9yeVVzZShrQik6IDg3NiB8IDExNTE0IHwgMTI4IC0+IDIyCiAgICBu
dW1UbXBzfG51bUVkZ2VzfG1lbW9yeVVzZShrQik6IDEwMzYgfCA0NzQ2IHwgNjQgLT4gMjQKUnVu
bmluZyB1Z2xpZnktanMtd3RiOgogICAgbnVtVG1wc3xudW1FZGdlc3xtZW1vcnlVc2Uoa0IpOiA0
ODAgfCAyMzY2IHwgMzIgLT4gMTAKUnVubmluZyB0eXBlc2NyaXB0OgogICAgbnVtVG1wc3xudW1F
ZGdlc3xtZW1vcnlVc2Uoa0IpOiAxMTE1IHwgOTczOCB8IDEyOCAtPiAyNQogICAgbnVtVG1wc3xu
dW1FZGdlc3xtZW1vcnlVc2Uoa0IpOiAxMTk0IHwgNDMwNSB8IDY0IC0+IDIxCiAgICBudW1UbXBz
fG51bUVkZ2VzfG1lbW9yeVVzZShrQik6IDEyMjAgfCAxMTg4NCB8IDEyOCAtPiAyOQogICAgbnVt
VG1wc3xudW1FZGdlc3xtZW1vcnlVc2Uoa0IpOiAxMzAyIHwgNDcwOCB8IDY0IC0+IDIzCiAgICBu
dW1UbXBzfG51bUVkZ2VzfG1lbW9yeVVzZShrQik6IDQxNSB8IDU1MzQgfCA2NCAtPiA5CiAgICBu
dW1UbXBzfG51bUVkZ2VzfG1lbW9yeVVzZShrQik6IDQ3MCB8IDMwNDggfCAzMiAtPiAxMAogICAg
bnVtVG1wc3xudW1FZGdlc3xtZW1vcnlVc2Uoa0IpOiA1ODggfCAzMzM5IHwgMzIgLT4gMTIKICAg
IG51bVRtcHN8bnVtRWRnZXN8bWVtb3J5VXNlKGtCKTogNTI0IHwgMTg1OTQgfCAyNTYgLT4gMTMK
ICAgIG51bVRtcHN8bnVtRWRnZXN8bWVtb3J5VXNlKGtCKTogNzE5IHwgNDUzOCB8IDY0IC0+IDE2
CiAgICBudW1UbXBzfG51bUVkZ2VzfG1lbW9yeVVzZShrQik6IDcxNCB8IDExNDg3IHwgMTI4IC0+
IDE3CiAgICBudW1UbXBzfG51bUVkZ2VzfG1lbW9yeVVzZShrQik6IDk1NSB8IDUyNjUgfCA2NCAt
PiAyMgogICAgbnVtVG1wc3xudW1FZGdlc3xtZW1vcnlVc2Uoa0IpOiA0NzUgfCAyMjc1IHwgMzIg
LT4gOQogICAgbnVtVG1wc3xudW1FZGdlc3xtZW1vcnlVc2Uoa0IpOiA1MDggfCAxMjM1NSB8IDEy
OCAtPiAxMgogICAgbnVtVG1wc3xudW1FZGdlc3xtZW1vcnlVc2Uoa0IpOiA3NDkgfCA0MTQ0IHwg
NjQgLT4gMTcKICAgIG51bVRtcHN8bnVtRWRnZXN8bWVtb3J5VXNlKGtCKTogNDE5IHwgMTkwOSB8
IDE2IC0+IDgKICAgIG51bVRtcHN8bnVtRWRnZXN8bWVtb3J5VXNlKGtCKTogODU0IHwgMTI3OTgg
fCAxMjggLT4gMjEKICAgIG51bVRtcHN8bnVtRWRnZXN8bWVtb3J5VXNlKGtCKTogMTA2NCB8IDY0
ODAgfCA2NCAtPiAyNwogICAgbnVtVG1wc3xudW1FZGdlc3xtZW1vcnlVc2Uoa0IpOiA4NzYgfCA0
OTE3NSB8IDUxMiAtPiAyNAogICAgbnVtVG1wc3xudW1FZGdlc3xtZW1vcnlVc2Uoa0IpOiAxMzkx
IHwgNjk0MyB8IDY0IC0+IDMxCiAgICBudW1UbXBzfG51bUVkZ2VzfG1lbW9yeVVzZShrQik6IDQw
NyB8IDIyNDUgfCAzMiAtPiA4CiAgICBudW1UbXBzfG51bUVkZ2VzfG1lbW9yeVVzZShrQik6IDUz
MCB8IDE3ODAwIHwgMjU2IC0+IDEzCiAgICBudW1UbXBzfG51bUVkZ2VzfG1lbW9yeVVzZShrQik6
IDY3NSB8IDQwMTMgfCAzMiAtPiAxNgogICAgbnVtVG1wc3xudW1FZGdlc3xtZW1vcnlVc2Uoa0Ip
OiA0MDcgfCAxMDcyMiB8IDEyOCAtPiA5CiAgICBudW1UbXBzfG51bUVkZ2VzfG1lbW9yeVVzZShr
Qik6IDYzNSB8IDI3NzUgfCAzMiAtPiAxMwogICAgbnVtVG1wc3xudW1FZGdlc3xtZW1vcnlVc2Uo
a0IpOiA2MTUgfCAxMDE5MyB8IDEyOCAtPiAxMgogICAgbnVtVG1wc3xudW1FZGdlc3xtZW1vcnlV
c2Uoa0IpOiA2OTQgfCA0ODU1IHwgNjQgLT4gMTUKICAgIG51bVRtcHN8bnVtRWRnZXN8bWVtb3J5
VXNlKGtCKTogNTEyIHwgMTc3NzMgfCAyNTYgLT4gMTMKICAgIG51bVRtcHN8bnVtRWRnZXN8bWVt
b3J5VXNlKGtCKTogNzA2IHwgMzQ4OCB8IDMyIC0+IDE1ClJ1bm5pbmcgdHNmLXdhc206CiAgICBu
dW1UbXBzfG51bUVkZ2VzfG1lbW9yeVVzZShrQik6IDk2OCB8IDIzMTY5IHwgMjU2IC0+IDI3CiAg
ICBudW1UbXBzfG51bUVkZ2VzfG1lbW9yeVVzZShrQik6IDU4MiB8IDExMTc0IHwgMTI4IC0+IDE1
CiAgICBudW1UbXBzfG51bUVkZ2VzfG1lbW9yeVVzZShrQik6IDExOTkgfCA0NjMyIHwgNjQgLT4g
MjcKICAgIG51bVRtcHN8bnVtRWRnZXN8bWVtb3J5VXNlKGtCKTogNjQwIHwgMjgzMiB8IDMyIC0+
IDE1CiAgICBudW1UbXBzfG51bUVkZ2VzfG1lbW9yeVVzZShrQik6IDU4MSB8IDEwMjc4IHwgMTI4
IC0+IDE0CiAgICBudW1UbXBzfG51bUVkZ2VzfG1lbW9yeVVzZShrQik6IDY1OSB8IDM0MTUgfCAz
MiAtPiAxNQogICAgbnVtVG1wc3xudW1FZGdlc3xtZW1vcnlVc2Uoa0IpOiA0NDAgfCAzNDE3IHwg
MzIgLT4gOQogICAgbnVtVG1wc3xudW1FZGdlc3xtZW1vcnlVc2Uoa0IpOiA0NTggfCAyMzA2IHwg
MzIgLT4gOQogICAgbnVtVG1wc3xudW1FZGdlc3xtZW1vcnlVc2Uoa0IpOiAxNjMwIHwgMTk2MTcg
fCAyNTYgLT4gNDMKICAgIG51bVRtcHN8bnVtRWRnZXN8bWVtb3J5VXNlKGtCKTogMTgzNCB8IDEw
NTIwIHwgMTI4IC0+IDQzCiAgICBudW1UbXBzfG51bUVkZ2VzfG1lbW9yeVVzZShrQik6IDEyNTg2
IHwgMTA1MTgzMCB8IDE2Mzg0IC0+IDc2MwogICAgbnVtVG1wc3xudW1FZGdlc3xtZW1vcnlVc2Uo
a0IpOiAxMjQ2MyB8IDEwMDYwMzggfCA4MTkyIC0+IDc1MQogICAgbnVtVG1wc3xudW1FZGdlc3xt
ZW1vcnlVc2Uoa0IpOiAzMzQzOCB8IDE4NDUzMCB8IDIwNDggLT4gNjc4CiAgICBudW1UbXBzfG51
bUVkZ2VzfG1lbW9yeVVzZShrQik6IDMzMzE2IHwgMTMwNTcyIHwgMTAyNCAtPiA2MzEKICAgIG51
bVRtcHN8bnVtRWRnZXN8bWVtb3J5VXNlKGtCKTogMzM3MzYgfCAxNDQ2ODggfCAyMDQ4IC0+IDY0
NgogICAgbnVtVG1wc3xudW1FZGdlc3xtZW1vcnlVc2Uoa0IpOiAzMzg0OSB8IDk0MDgzIHwgMTAy
NCAtPiA2MDQKUnVubmluZyB0YWdjbG91ZC1TUDoKUnVubmluZyBzdHJpbmctdW5wYWNrLWNvZGUt
U1A6ClJ1bm5pbmcgc3RhbmZvcmQtY3J5cHRvLXNoYTI1NjoKUnVubmluZyBzdGFuZm9yZC1jcnlw
dG8tcGJrZGYyOgpSdW5uaW5nIHN0YW5mb3JkLWNyeXB0by1hZXM6CiAgICBudW1UbXBzfG51bUVk
Z2VzfG1lbW9yeVVzZShrQik6IDQ0NiB8IDM2NTIgfCAzMiAtPiAxMApSdW5uaW5nIHNwbGF5OgpS
dW5uaW5nIHJpY2hhcmRzLXdhc206ClJ1bm5pbmcgcmljaGFyZHM6ClJ1bm5pbmcgcmVnZXhwOgog
ICAgbnVtVG1wc3xudW1FZGdlc3xtZW1vcnlVc2Uoa0IpOiAxODQwIHwgNDIwMTUgfCA1MTIgLT4g
NzYKICAgIG51bVRtcHN8bnVtRWRnZXN8bWVtb3J5VXNlKGtCKTogMjY4MiB8IDE2MjY5IHwgMTI4
IC0+IDYyCiAgICBudW1UbXBzfG51bUVkZ2VzfG1lbW9yeVVzZShrQik6IDEzODIgfCAzNzcwNyB8
IDUxMiAtPiA1MQogICAgbnVtVG1wc3xudW1FZGdlc3xtZW1vcnlVc2Uoa0IpOiAyMjA1IHwgMTM3
MTUgfCAxMjggLT4gNTgKICAgIG51bVRtcHN8bnVtRWRnZXN8bWVtb3J5VXNlKGtCKTogOTc5IHwg
Mjc3NTcgfCAyNTYgLT4gMzIKICAgIG51bVRtcHN8bnVtRWRnZXN8bWVtb3J5VXNlKGtCKTogMTM2
OCB8IDEwMjA2IHwgMTI4IC0+IDM5ClJ1bm5pbmcgcmVnZXgtZG5hLVNQOgpSdW5uaW5nIHJheXRy
YWNlOgogICAgbnVtVG1wc3xudW1FZGdlc3xtZW1vcnlVc2Uoa0IpOiA1MDcgfCAxMzExNyB8IDEy
OCAtPiAxMgogICAgbnVtVG1wc3xudW1FZGdlc3xtZW1vcnlVc2Uoa0IpOiA2NTQgfCAzODM2IHwg
MzIgLT4gMTUKUnVubmluZyBxdWlja3NvcnQtd2FzbToKUnVubmluZyBwcmVwYWNrLXd0YjoKUnVu
bmluZyBwZGZqczoKICAgIG51bVRtcHN8bnVtRWRnZXN8bWVtb3J5VXNlKGtCKTogNDU3IHwgMjMz
MSB8IDMyIC0+IDEwCiAgICBudW1UbXBzfG51bUVkZ2VzfG1lbW9yeVVzZShrQik6IDc5NSB8IDI3
NjEyIHwgMjU2IC0+IDIzCiAgICBudW1UbXBzfG51bUVkZ2VzfG1lbW9yeVVzZShrQik6IDEwNjYg
fCA2MzUwIHwgNjQgLT4gMjkKICAgIG51bVRtcHN8bnVtRWRnZXN8bWVtb3J5VXNlKGtCKTogNDA4
IHwgNTIxOSB8IDY0IC0+IDgKICAgIG51bVRtcHN8bnVtRWRnZXN8bWVtb3J5VXNlKGtCKTogNTEw
IHwgMjcxMCB8IDMyIC0+IDExCiAgICBudW1UbXBzfG51bUVkZ2VzfG1lbW9yeVVzZShrQik6IDQz
NCB8IDE4OTUgfCAxNiAtPiA5CiAgICBudW1UbXBzfG51bUVkZ2VzfG1lbW9yeVVzZShrQik6IDQw
MyB8IDExNjIxIHwgMTI4IC0+IDkKICAgIG51bVRtcHN8bnVtRWRnZXN8bWVtb3J5VXNlKGtCKTog
NDgxIHwgMzM4MCB8IDMyIC0+IDEwCiAgICBudW1UbXBzfG51bUVkZ2VzfG1lbW9yeVVzZShrQik6
IDQxMCB8IDE5NTggfCAxNiAtPiA4CiAgICBudW1UbXBzfG51bUVkZ2VzfG1lbW9yeVVzZShrQik6
IDQzOCB8IDI0MzcgfCAzMiAtPiA5CiAgICBudW1UbXBzfG51bUVkZ2VzfG1lbW9yeVVzZShrQik6
IDc5OSB8IDE0ODY3IHwgMTI4IC0+IDIzCiAgICBudW1UbXBzfG51bUVkZ2VzfG1lbW9yeVVzZShr
Qik6IDk1NyB8IDU2ODIgfCA2NCAtPiAyNwogICAgbnVtVG1wc3xudW1FZGdlc3xtZW1vcnlVc2Uo
a0IpOiA0MjggfCAxOTUyIHwgMTYgLT4gOAogICAgbnVtVG1wc3xudW1FZGdlc3xtZW1vcnlVc2Uo
a0IpOiA1NTEgfCAzMDk2IHwgMzIgLT4gMTIKICAgIG51bVRtcHN8bnVtRWRnZXN8bWVtb3J5VXNl
KGtCKTogNzk1IHwgMjc2MTIgfCAyNTYgLT4gMjMKICAgIG51bVRtcHN8bnVtRWRnZXN8bWVtb3J5
VXNlKGtCKTogMTA2NiB8IDYzNTIgfCA2NCAtPiAyOQpSdW5uaW5nIE9mZmxpbmVBc3NlbWJsZXI6
CiAgICBudW1UbXBzfG51bUVkZ2VzfG1lbW9yeVVzZShrQik6IDQxNCB8IDkxMTUgfCAxMjggLT4g
OQogICAgbnVtVG1wc3xudW1FZGdlc3xtZW1vcnlVc2Uoa0IpOiA1MzkgfCAzMjA5IHwgMzIgLT4g
MTIKICAgIG51bVRtcHN8bnVtRWRnZXN8bWVtb3J5VXNlKGtCKTogODMyIHwgMTE4OTUgfCAxMjgg
LT4gMjAKICAgIG51bVRtcHN8bnVtRWRnZXN8bWVtb3J5VXNlKGtCKTogMTExNSB8IDU2NDcgfCA2
NCAtPiAyNwogICAgbnVtVG1wc3xudW1FZGdlc3xtZW1vcnlVc2Uoa0IpOiA1OTQgfCAxNzM5NSB8
IDI1NiAtPiAxNAogICAgbnVtVG1wc3xudW1FZGdlc3xtZW1vcnlVc2Uoa0IpOiA3NTEgfCA0MzAy
IHwgNjQgLT4gMTYKICAgIG51bVRtcHN8bnVtRWRnZXN8bWVtb3J5VXNlKGtCKTogNDQ4IHwgMTEx
NDQgfCAxMjggLT4gMTAKICAgIG51bVRtcHN8bnVtRWRnZXN8bWVtb3J5VXNlKGtCKTogNTk5IHwg
MzMxNCB8IDMyIC0+IDEzCiAgICBudW1UbXBzfG51bUVkZ2VzfG1lbW9yeVVzZShrQik6IDI3OTgg
fCAyMzgwNTMgfCAyMDQ4IC0+IDEzMAogICAgbnVtVG1wc3xudW1FZGdlc3xtZW1vcnlVc2Uoa0Ip
OiAzOTQ0IHwgMjE4MzEgfCAyNTYgLT4gMTAwClJ1bm5pbmcgb2N0YW5lLXpsaWI6CiAgICBudW1U
bXBzfG51bUVkZ2VzfG1lbW9yeVVzZShrQik6IDY1MCB8IDI1NzM0IHwgMjU2IC0+IDE3CiAgICBu
dW1UbXBzfG51bUVkZ2VzfG1lbW9yeVVzZShrQik6IDg0MSB8IDQyMDIgfCA2NCAtPiAxOAogICAg
bnVtVG1wc3xudW1FZGdlc3xtZW1vcnlVc2Uoa0IpOiA0MDMgfCAyNjc1IHwgMzIgLT4gOAogICAg
bnVtVG1wc3xudW1FZGdlc3xtZW1vcnlVc2Uoa0IpOiA0MDkgfCA2MzA0IHwgNjQgLT4gMTAKICAg
IG51bVRtcHN8bnVtRWRnZXN8bWVtb3J5VXNlKGtCKTogNTI4IHwgNDIwNSB8IDY0IC0+IDEzCiAg
ICBudW1UbXBzfG51bUVkZ2VzfG1lbW9yeVVzZShrQik6IDU0OCB8IDMyMTYgfCAzMiAtPiAxNAog
ICAgbnVtVG1wc3xudW1FZGdlc3xtZW1vcnlVc2Uoa0IpOiA5NTEgfCAxNTA2OCB8IDEyOCAtPiAy
NAogICAgbnVtVG1wc3xudW1FZGdlc3xtZW1vcnlVc2Uoa0IpOiAxMDkwIHwgNjE1NCB8IDY0IC0+
IDI0CiAgICBudW1UbXBzfG51bUVkZ2VzfG1lbW9yeVVzZShrQik6IDUxOCB8IDk1MDMgfCAxMjgg
LT4gMTEKICAgIG51bVRtcHN8bnVtRWRnZXN8bWVtb3J5VXNlKGtCKTogNjE5IHwgMzgzNSB8IDMy
IC0+IDE0CiAgICBudW1UbXBzfG51bUVkZ2VzfG1lbW9yeVVzZShrQik6IDQ2MCB8IDM0MDAgfCAz
MiAtPiAxMApSdW5uaW5nIG9jdGFuZS1jb2RlLWxvYWQ6ClJ1bm5pbmcgbmF2aWVyLXN0b2tlczoK
UnVubmluZyBuLWJvZHktU1A6ClJ1bm5pbmcgbXVsdGktaW5zcGVjdG9yLWNvZGUtbG9hZDoKUnVu
bmluZyBNTDoKUnVubmluZyBtYW5kcmVlbDoKICAgIG51bVRtcHN8bnVtRWRnZXN8bWVtb3J5VXNl
KGtCKTogNDU4IHwgMjI2MSB8IDMyIC0+IDkKICAgIG51bVRtcHN8bnVtRWRnZXN8bWVtb3J5VXNl
KGtCKTogNTM1IHwgNzIzNSB8IDY0IC0+IDEwCiAgICBudW1UbXBzfG51bUVkZ2VzfG1lbW9yeVVz
ZShrQik6IDU3OSB8IDM1NzAgfCAzMiAtPiAxMQogICAgbnVtVG1wc3xudW1FZGdlc3xtZW1vcnlV
c2Uoa0IpOiA1ODIgfCAyOTkxIHwgMzIgLT4gMTEKICAgIG51bVRtcHN8bnVtRWRnZXN8bWVtb3J5
VXNlKGtCKTogOTAwIHwgMzE3ODcgfCAyNTYgLT4gMjUKICAgIG51bVRtcHN8bnVtRWRnZXN8bWVt
b3J5VXNlKGtCKTogMTQ5MyB8IDgwNzQgfCA2NCAtPiAzNwogICAgbnVtVG1wc3xudW1FZGdlc3xt
ZW1vcnlVc2Uoa0IpOiA1MTYgfCA4NzgyIHwgMTI4IC0+IDEwCiAgICBudW1UbXBzfG51bUVkZ2Vz
fG1lbW9yeVVzZShrQik6IDYyNyB8IDI4NjcgfCAzMiAtPiAxMQogICAgbnVtVG1wc3xudW1FZGdl
c3xtZW1vcnlVc2Uoa0IpOiA0MjggfCA5NDE5IHwgMTI4IC0+IDExCiAgICBudW1UbXBzfG51bUVk
Z2VzfG1lbW9yeVVzZShrQik6IDc2NSB8IDQyMjMgfCA2NCAtPiAxNwogICAgbnVtVG1wc3xudW1F
ZGdlc3xtZW1vcnlVc2Uoa0IpOiA2OTYgfCA3MDY4IHwgNjQgLT4gMTUKICAgIG51bVRtcHN8bnVt
RWRnZXN8bWVtb3J5VXNlKGtCKTogNzcwIHwgMjk3MiB8IDMyIC0+IDE2ClJ1bm5pbmcgbGViYWIt
d3RiOgpSdW5uaW5nIGpzb24tc3RyaW5naWZ5LWluc3BlY3RvcjoKUnVubmluZyBqc29uLXBhcnNl
LWluc3BlY3RvcjoKUnVubmluZyBqc2hpbnQtd3RiOgogICAgbnVtVG1wc3xudW1FZGdlc3xtZW1v
cnlVc2Uoa0IpOiA0MzIgfCA4Mzk2IHwgMTI4IC0+IDEwCiAgICBudW1UbXBzfG51bUVkZ2VzfG1l
bW9yeVVzZShrQik6IDU0NyB8IDI3OTQgfCAzMiAtPiAxMgogICAgbnVtVG1wc3xudW1FZGdlc3xt
ZW1vcnlVc2Uoa0IpOiA1ODcgfCAxMTkwOSB8IDEyOCAtPiAxNQogICAgbnVtVG1wc3xudW1FZGdl
c3xtZW1vcnlVc2Uoa0IpOiA0OTYgfCA2MDM1IHwgNjQgLT4gMTEKICAgIG51bVRtcHN8bnVtRWRn
ZXN8bWVtb3J5VXNlKGtCKTogNjkyIHwgMzUxMCB8IDMyIC0+IDE0CiAgICBudW1UbXBzfG51bUVk
Z2VzfG1lbW9yeVVzZShrQik6IDcwMSB8IDQ1OTUgfCA2NCAtPiAxOApSdW5uaW5nIEhhc2hTZXQt
d2FzbToKICAgIG51bVRtcHN8bnVtRWRnZXN8bWVtb3J5VXNlKGtCKTogNDM3IHwgMzYwMyB8IDMy
IC0+IDkKICAgIG51bVRtcHN8bnVtRWRnZXN8bWVtb3J5VXNlKGtCKTogNDU3IHwgMjM3NiB8IDMy
IC0+IDkKICAgIG51bVRtcHN8bnVtRWRnZXN8bWVtb3J5VXNlKGtCKTogMTU4MyB8IDE5ODk0IHwg
MjU2IC0+IDQxCiAgICBudW1UbXBzfG51bUVkZ2VzfG1lbW9yeVVzZShrQik6IDE4MDQgfCAxMDQw
NiB8IDEyOCAtPiA0MgpSdW5uaW5nIGhhc2gtbWFwOgpSdW5uaW5nIGdjYy1sb29wcy13YXNtOgog
ICAgbnVtVG1wc3xudW1FZGdlc3xtZW1vcnlVc2Uoa0IpOiA1MzkgfCA0NDExIHwgNjQgLT4gMTEK
ICAgIG51bVRtcHN8bnVtRWRnZXN8bWVtb3J5VXNlKGtCKTogNTc1IHwgMTU0NCB8IDE2IC0+IDEx
ClJ1bm5pbmcgZ2JlbXU6CiAgICBudW1UbXBzfG51bUVkZ2VzfG1lbW9yeVVzZShrQik6IDU5MyB8
IDExMzc4IHwgMTI4IC0+IDE1CiAgICBudW1UbXBzfG51bUVkZ2VzfG1lbW9yeVVzZShrQik6IDY1
NSB8IDI4NzkgfCAzMiAtPiAxNgogICAgbnVtVG1wc3xudW1FZGdlc3xtZW1vcnlVc2Uoa0IpOiA4
MzkgfCAzMzE4MSB8IDUxMiAtPiAyMAogICAgbnVtVG1wc3xudW1FZGdlc3xtZW1vcnlVc2Uoa0Ip
OiAxMzE1IHwgMTE4NDAgfCAxMjggLT4gMzIKICAgIG51bVRtcHN8bnVtRWRnZXN8bWVtb3J5VXNl
KGtCKTogNTUxIHwgODcwNiB8IDEyOCAtPiAxMQogICAgbnVtVG1wc3xudW1FZGdlc3xtZW1vcnlV
c2Uoa0IpOiA3NDUgfCA2MTc4IHwgNjQgLT4gMTgKICAgIG51bVRtcHN8bnVtRWRnZXN8bWVtb3J5
VXNlKGtCKTogNzU0IHwgNTUyMCB8IDY0IC0+IDE3ClJ1bm5pbmcgZ2F1c3NpYW4tYmx1cjoKUnVu
bmluZyBmbG9hdC1tbS5jOgpSdW5uaW5nIEZsaWdodFBsYW5uZXI6ClJ1bm5pbmcgZmlyc3QtaW5z
cGVjdG9yLWNvZGUtbG9hZDoKUnVubmluZyBlc3ByZWUtd3RiOgogICAgbnVtVG1wc3xudW1FZGdl
c3xtZW1vcnlVc2Uoa0IpOiA1NjggfCA1MjAyIHwgNjQgLT4gMTIKICAgIG51bVRtcHN8bnVtRWRn
ZXN8bWVtb3J5VXNlKGtCKTogNTkyIHwgMzA5MCB8IDMyIC0+IDEyClJ1bm5pbmcgZWFybGV5LWJv
eWVyOgpSdW5uaW5nIGRlbHRhLWJsdWU6ClJ1bm5pbmcgZGF0ZS1mb3JtYXQteHBhcmItU1A6CiAg
ICBudW1UbXBzfG51bUVkZ2VzfG1lbW9yeVVzZShrQik6IDUwNSB8IDc0MDkgfCA2NCAtPiAxMgog
ICAgbnVtVG1wc3xudW1FZGdlc3xtZW1vcnlVc2Uoa0IpOiA1NjEgfCAzNjk5IHwgMzIgLT4gMTIK
UnVubmluZyBkYXRlLWZvcm1hdC10b2Z0ZS1TUDoKICAgIG51bVRtcHN8bnVtRWRnZXN8bWVtb3J5
VXNlKGtCKTogNDQ3IHwgNDg1OCB8IDY0IC0+IDEwCiAgICBudW1UbXBzfG51bUVkZ2VzfG1lbW9y
eVVzZShrQik6IDUxOCB8IDI0OTYgfCAzMiAtPiAxMQpSdW5uaW5nIGNyeXB0by1zaGExLVNQOgog
ICAgbnVtVG1wc3xudW1FZGdlc3xtZW1vcnlVc2Uoa0IpOiA0MTQgfCAzMjk1IHwgMzIgLT4gOQog
ICAgbnVtVG1wc3xudW1FZGdlc3xtZW1vcnlVc2Uoa0IpOiA0MTQgfCAxNzAyIHwgMTYgLT4gOAog
ICAgbnVtVG1wc3xudW1FZGdlc3xtZW1vcnlVc2Uoa0IpOiA0MjQgfCAzMjI4IHwgMzIgLT4gOQog
ICAgbnVtVG1wc3xudW1FZGdlc3xtZW1vcnlVc2Uoa0IpOiA0MjQgfCAxNjA0IHwgMTYgLT4gOApS
dW5uaW5nIGNyeXB0by1tZDUtU1A6CiAgICBudW1UbXBzfG51bUVkZ2VzfG1lbW9yeVVzZShrQik6
IDEwMDcgfCA4NzQyOCB8IDEwMjQgLT4gMzIKICAgIG51bVRtcHN8bnVtRWRnZXN8bWVtb3J5VXNl
KGtCKTogMTk1NyB8IDEwODMyIHwgMTI4IC0+IDQ2ClJ1bm5pbmcgY3J5cHRvLWFlcy1TUDoKICAg
IG51bVRtcHN8bnVtRWRnZXN8bWVtb3J5VXNlKGtCKTogNDQ3IHwgMTAzNjUgfCAxMjggLT4gMTEK
ICAgIG51bVRtcHN8bnVtRWRnZXN8bWVtb3J5VXNlKGtCKTogNTM1IHwgMTE2MDkgfCAxMjggLT4g
MTQKICAgIG51bVRtcHN8bnVtRWRnZXN8bWVtb3J5VXNlKGtCKTogNTg3IHwgMzYyOSB8IDMyIC0+
IDE0CiAgICBudW1UbXBzfG51bUVkZ2VzfG1lbW9yeVVzZShrQik6IDY3NiB8IDQzMTcgfCA2NCAt
PiAxNwpSdW5uaW5nIGNyeXB0bzoKUnVubmluZyBjb2ZmZWVzY3JpcHQtd3RiOgogICAgbnVtVG1w
c3xudW1FZGdlc3xtZW1vcnlVc2Uoa0IpOiA0ODYgfCAyMzYzIHwgMzIgLT4gMTAKUnVubmluZyBj
aGFpLXd0YjoKUnVubmluZyBjZGpzOgogICAgbnVtVG1wc3xudW1FZGdlc3xtZW1vcnlVc2Uoa0Ip
OiA0NTIgfCAyMDI4IHwgMTYgLT4gOQpSdW5uaW5nIEJveDJEOgogICAgbnVtVG1wc3xudW1FZGdl
c3xtZW1vcnlVc2Uoa0IpOiA0MzEgfCAzNjU1IHwgMzIgLT4gOAogICAgbnVtVG1wc3xudW1FZGdl
c3xtZW1vcnlVc2Uoa0IpOiA0MzkgfCAzMjQ3IHwgMzIgLT4gOQogICAgbnVtVG1wc3xudW1FZGdl
c3xtZW1vcnlVc2Uoa0IpOiA3MzQgfCAxMDA5MCB8IDEyOCAtPiAxNwogICAgbnVtVG1wc3xudW1F
ZGdlc3xtZW1vcnlVc2Uoa0IpOiA3NDcgfCA1NTE4IHwgNjQgLT4gMTUKICAgIG51bVRtcHN8bnVt
RWRnZXN8bWVtb3J5VXNlKGtCKTogNDUwIHwgMzE3OCB8IDMyIC0+IDEwCiAgICBudW1UbXBzfG51
bUVkZ2VzfG1lbW9yeVVzZShrQik6IDQ0NCB8IDEwOTU3IHwgMTI4IC0+IDEwCiAgICBudW1UbXBz
fG51bUVkZ2VzfG1lbW9yeVVzZShrQik6IDU5NSB8IDMzNTcgfCAzMiAtPiAxNAogICAgbnVtVG1w
c3xudW1FZGdlc3xtZW1vcnlVc2Uoa0IpOiA0NDggfCAyNjYwIHwgMzIgLT4gOQpSdW5uaW5nIEJh
c2ljOgpSdW5uaW5nIGJhc2U2NC1TUDoKICAgIG51bVRtcHN8bnVtRWRnZXN8bWVtb3J5VXNlKGtC
KTogNTc4IHwgNjYwNSB8IDY0IC0+IDEzCiAgICBudW1UbXBzfG51bUVkZ2VzfG1lbW9yeVVzZShr
Qik6IDYxMyB8IDM3ODQgfCAzMiAtPiAxMwpSdW5uaW5nIGJhYnlsb24td3RiOgogICAgbnVtVG1w
c3xudW1FZGdlc3xtZW1vcnlVc2Uoa0IpOiA0MDkgfCAyNzQ1IHwgMzIgLT4gNwogICAgbnVtVG1w
c3xudW1FZGdlc3xtZW1vcnlVc2Uoa0IpOiA1NjIgfCA4NTYwIHwgMTI4IC0+IDEyCiAgICBudW1U
bXBzfG51bUVkZ2VzfG1lbW9yeVVzZShrQik6IDY4NiB8IDQ5NzYgfCA2NCAtPiAxNgogICAgbnVt
VG1wc3xudW1FZGdlc3xtZW1vcnlVc2Uoa0IpOiA0MjUgfCAyOTgxIHwgMzIgLT4gNwogICAgbnVt
VG1wc3xudW1FZGdlc3xtZW1vcnlVc2Uoa0IpOiA1NTUgfCAyOTk4IHwgMzIgLT4gMTIKUnVubmlu
ZyBCYWJ5bG9uOgogICAgbnVtVG1wc3xudW1FZGdlc3xtZW1vcnlVc2Uoa0IpOiA0MzAgfCA2MDk0
IHwgNjQgLT4gOQogICAgbnVtVG1wc3xudW1FZGdlc3xtZW1vcnlVc2Uoa0IpOiA1MjAgfCAzNDUw
IHwgMzIgLT4gMTEKICAgIG51bVRtcHN8bnVtRWRnZXN8bWVtb3J5VXNlKGtCKTogNTAxIHwgMjY1
MyB8IDMyIC0+IDEwCiAgICBudW1UbXBzfG51bUVkZ2VzfG1lbW9yeVVzZShrQik6IDUwOSB8IDQ0
NDUgfCA2NCAtPiA5CiAgICBudW1UbXBzfG51bUVkZ2VzfG1lbW9yeVVzZShrQik6IDUxMCB8IDMz
NjkgfCAzMiAtPiA5ClJ1bm5pbmcgYXN5bmMtZnM6ClJ1bm5pbmcgQWlyOgpSdW5uaW5nIGFpLWFz
dGFyOgogICAgbnVtVG1wc3xudW1FZGdlc3xtZW1vcnlVc2Uoa0IpOiA0NTIgfCAyNDUzIHwgMzIg
LT4gOQogICAgbnVtVG1wc3xudW1FZGdlc3xtZW1vcnlVc2Uoa0IpOiA0MjQgfCAyMjU5IHwgMzIg
LT4gOQpSdW5uaW5nIGFjb3JuLXd0YjoKICAgIG51bVRtcHN8bnVtRWRnZXN8bWVtb3J5VXNlKGtC
KTogNTI5IHwgMzkzNyB8IDMyIC0+IDEwCiAgICBudW1UbXBzfG51bUVkZ2VzfG1lbW9yeVVzZShr
Qik6IDUzOCB8IDIzNDcgfCAzMiAtPiAxMApSdW5uaW5nIDNkLXJheXRyYWNlLVNQOgogICAgbnVt
VG1wc3xudW1FZGdlc3xtZW1vcnlVc2Uoa0IpOiA0NTcgfCAyMjc1IHwgMzIgLT4gMTAKICAgIG51
bVRtcHN8bnVtRWRnZXN8bWVtb3J5VXNlKGtCKTogNjc5IHwgMTI5MzUgfCAxMjggLT4gMjAKICAg
IG51bVRtcHN8bnVtRWRnZXN8bWVtb3J5VXNlKGtCKTogOTkwIHwgNTgzNyB8IDY0IC0+IDI1ClJ1
bm5pbmcgM2QtY3ViZS1TUDoKICAgIG51bVRtcHN8bnVtRWRnZXN8bWVtb3J5VXNlKGtCKTogNDEx
IHwgMjIzNSB8IDMyIC0+IDkKICAgIG51bVRtcHN8bnVtRWRnZXN8bWVtb3J5VXNlKGtCKTogNzU2
IHwgMTI0MTkgfCAxMjggLT4gMjIKICAgIG51bVRtcHN8bnVtRWRnZXN8bWVtb3J5VXNlKGtCKTog
ODk3IHwgNjE4MCB8IDY0IC0+IDI1Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="0"
              isprivate="0"
          >
            <attachid>428994</attachid>
            <date>2021-05-18 16:27:34 -0700</date>
            <delta_ts>2021-05-18 16:27:34 -0700</delta_ts>
            <desc>memory use of the interference graphs while visiting mruby-wasm.aotoki.dev</desc>
            <filename>memoryUse_mruby-wasm</filename>
            <type>text/plain</type>
            <size>1407</size>
            <attacher name="Robin Morisset">rmorisset</attacher>
            
              <data encoding="base64">bnVtVG1wc3xudW1FZGdlc3xtZW1vcnlVc2Uoa0IpOiAxMzU2IHwgNzIzMTEgfCAxMDI0IC0+IDQy
Cm51bVRtcHN8bnVtRWRnZXN8bWVtb3J5VXNlKGtCKTogMTU3NyB8IDY4NTYgfCA2NCAtPiAzNQpu
dW1UbXBzfG51bUVkZ2VzfG1lbW9yeVVzZShrQik6IDIxMDEgfCAzMjA3MiB8IDI1NiAtPiA2NQpu
dW1UbXBzfG51bUVkZ2VzfG1lbW9yeVVzZShrQik6IDIzMjMgfCA2NDgwIHwgNjQgLT4gNTIKbnVt
VG1wc3xudW1FZGdlc3xtZW1vcnlVc2Uoa0IpOiA0MjIzIHwgMTMxMjU0IHwgMjA0OCAtPiAxMTUK
bnVtVG1wc3xudW1FZGdlc3xtZW1vcnlVc2Uoa0IpOiA0NTUwIHwgMTg5MjYgfCAyNTYgLT4gODYK
bnVtVG1wc3xudW1FZGdlc3xtZW1vcnlVc2Uoa0IpOiA1MTEgfCA0MTI5IHwgNjQgLT4gMTAKbnVt
VG1wc3xudW1FZGdlc3xtZW1vcnlVc2Uoa0IpOiA1MjggfCAyNjg4IHwgMzIgLT4gMTEKbnVtVG1w
c3xudW1FZGdlc3xtZW1vcnlVc2Uoa0IpOiA0NTU0IHwgMTAyNzYgfCAxMjggLT4gODEKbnVtVG1w
c3xudW1FZGdlc3xtZW1vcnlVc2Uoa0IpOiA2MzUgfCA4MjUxIHwgMTI4IC0+IDE2Cm51bVRtcHN8
bnVtRWRnZXN8bWVtb3J5VXNlKGtCKTogNjg2IHwgMjE0OSB8IDMyIC0+IDE1Cm51bVRtcHN8bnVt
RWRnZXN8bWVtb3J5VXNlKGtCKTogMTk3MyB8IDI1NzAwIHwgMjU2IC0+IDU3Cm51bVRtcHN8bnVt
RWRnZXN8bWVtb3J5VXNlKGtCKTogMjE5MyB8IDEwNDgzIHwgMTI4IC0+IDUxCm51bVRtcHN8bnVt
RWRnZXN8bWVtb3J5VXNlKGtCKTogNDc0IHwgOTc1MyB8IDEyOCAtPiAxMgpudW1UbXBzfG51bUVk
Z2VzfG1lbW9yeVVzZShrQik6IDU0OCB8IDM4MjAgfCAzMiAtPiAxNApudW1UbXBzfG51bUVkZ2Vz
fG1lbW9yeVVzZShrQik6IDQ4MCB8IDE2MzcgfCAxNiAtPiA5Cm51bVRtcHN8bnVtRWRnZXN8bWVt
b3J5VXNlKGtCKTogNTQ4IHwgMjAwMSB8IDE2IC0+IDEyCm51bVRtcHN8bnVtRWRnZXN8bWVtb3J5
VXNlKGtCKTogMzA3NzYgfCAyMDE2NjUwNyB8IDI2MjE0NCAtPiAxMTg4OApudW1UbXBzfG51bUVk
Z2VzfG1lbW9yeVVzZShrQik6IDMzODUzIHwgMjM0NTIyOTMgfCAyNjIxNDQgLT4gMjA1OTgKbnVt
VG1wc3xudW1FZGdlc3xtZW1vcnlVc2Uoa0IpOiAzMTc3MzcgfCAxMDU1MTM2IHwgMzI3NjggLT4g
MTA2NTkKbnVtVG1wc3xudW1FZGdlc3xtZW1vcnlVc2Uoa0IpOiAzMTk1NTIgfCAxMDI5MjQzIHwg
MTYzODQgLT4gMTA0OTUKbnVtVG1wc3xudW1FZGdlc3xtZW1vcnlVc2Uoa0IpOiAzMjM2NDQgfCA5
NzQyMTQgfCAxNjM4NCAtPiAxMTIxNQpudW1UbXBzfG51bUVkZ2VzfG1lbW9yeVVzZShrQik6IDM0
NTIzOSB8IDkzNjM2NiB8IDE2Mzg0IC0+IDEwNzIyCm51bVRtcHN8bnVtRWRnZXN8bWVtb3J5VXNl
KGtCKTogMzQ2OTg1IHwgOTMyNTYyIHwgMTYzODQgLT4gMTA3MDIK
</data>

          </attachment>
      

    </bug>

</bugzilla>