<?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>172188</bug_id>
          
          <creation_ts>2017-05-16 14:26:14 -0700</creation_ts>
          <short_desc>We don&apos;t do context switches for Wasm-&gt;Wasm call indirect</short_desc>
          <delta_ts>2017-05-17 17:24:13 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>JavaScriptCore</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>172197</blocked>
    
    <blocked>165546</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Saam Barati">saam</reporter>
          <assigned_to name="Saam Barati">saam</assigned_to>
          <cc>benjamin</cc>
    
    <cc>fpizlo</cc>
    
    <cc>ggaren</cc>
    
    <cc>gskachkov</cc>
    
    <cc>jfbastien</cc>
    
    <cc>keith_miller</cc>
    
    <cc>mark.lam</cc>
    
    <cc>msaboff</cc>
    
    <cc>ticaiolima</cc>
    
    <cc>webkit-bug-importer</cc>
    
    <cc>ysuzuki</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1309294</commentid>
    <comment_count>0</comment_count>
    <who name="Saam Barati">saam</who>
    <bug_when>2017-05-16 14:26:14 -0700</bug_when>
    <thetext>...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1309295</commentid>
    <comment_count>1</comment_count>
    <who name="Saam Barati">saam</who>
    <bug_when>2017-05-16 14:26:36 -0700</bug_when>
    <thetext>We just read random memory and call it, potentially. Fun stuff</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1309296</commentid>
    <comment_count>2</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2017-05-16 14:27:08 -0700</bug_when>
    <thetext>&lt;rdar://problem/32231828&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1309297</commentid>
    <comment_count>3</comment_count>
    <who name="Saam Barati">saam</who>
    <bug_when>2017-05-16 14:29:46 -0700</bug_when>
    <thetext>For example:
```
import Builder from &apos;../Builder.js&apos;
import * as assert from &apos;../assert.js&apos;

{
    function makeInstance() {
        const tableDescription = {initial: 1, element: &quot;anyfunc&quot;};
        const builder = new Builder()
            .Type()
                .Func([], &quot;void&quot;)
            .End()
            .Import()
                .Table(&quot;imp&quot;, &quot;table&quot;, tableDescription)
            .End()
            .Function().End()
            .Export()
                .Function(&quot;foo&quot;)
            .End()
            .Code()
                .Function(&quot;foo&quot;, {params:[&quot;i32&quot;], ret:&quot;void&quot;})
                    .GetLocal(0) // parameter to call
                    .GetLocal(0) // call index
                    .CallIndirect(0, 0) // calling function of type [] =&gt; &apos;void&apos;
                    .Return()
                .End()
            .End();


        const bin = builder.WebAssembly().get();
        const module = new WebAssembly.Module(bin);
        const table = new WebAssembly.Table(tableDescription);
        return {instance: new WebAssembly.Instance(module, {imp: {table}}), table};
    }

    function makeInstance2() {
        const tableDescription = {initial: 1, element: &quot;anyfunc&quot;};
        const builder = new Builder()
            .Type()
            .End()
            .Import()
                .Function(&quot;imp&quot;, &quot;f&quot;, {params:[], ret:&quot;void&quot;})
            .End()
            .Function().End()
            .Export()
                .Function(&quot;foo&quot;)
            .End()
            .Code()
                .Function(&quot;foo&quot;, {params: [], ret: &quot;void&quot; })
                    .Call(0)
                    .Return()
                .End()
            .End();


        const bin = builder.WebAssembly().get();
        const module = new WebAssembly.Module(bin);
        return new WebAssembly.Instance(module, {imp: {f: function() { print(&quot;Inside f&quot;); }}});
    }

    const {instance: i1, table: t1} = makeInstance();
    const foo = i1.exports.foo;

    const i2 = makeInstance2();
    t1.set(0, i2.exports.foo);
    
    foo(0);
}
```</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1309344</commentid>
    <comment_count>4</comment_count>
      <attachid>310308</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2017-05-16 15:45:08 -0700</bug_when>
    <thetext>Created attachment 310308
WIP

I&apos;m thinking of moving to a thunk approach, so we&apos;re not stuck with this branchiness. Just putting this here since I think it works.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1309349</commentid>
    <comment_count>5</comment_count>
    <who name="Saam Barati">saam</who>
    <bug_when>2017-05-16 15:51:52 -0700</bug_when>
    <thetext>The thunk approach could be like this:

A table has three states:
- NoInstance: not yet tied to an instance, so we hold off on making any thunks, since it&apos;s not yet callable from wasm
- SingleInstance: Now, all functions in the table only need thunks to context switch if they&apos;re from a different instance
- MultipleInstances: now all functions need context switching thunks regardless, since we don&apos;t know what instance is calling us. We could have the thunk branch to see if it&apos;s actually performing a context switch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1309369</commentid>
    <comment_count>6</comment_count>
    <who name="Saam Barati">saam</who>
    <bug_when>2017-05-16 16:22:08 -0700</bug_when>
    <thetext>(In reply to Saam Barati from comment #5)
&gt; The thunk approach could be like this:
&gt; 
&gt; A table has three states:
&gt; - NoInstance: not yet tied to an instance, so we hold off on making any
&gt; thunks, since it&apos;s not yet callable from wasm
&gt; - SingleInstance: Now, all functions in the table only need thunks to
&gt; context switch if they&apos;re from a different instance
&gt; - MultipleInstances: now all functions need context switching thunks
&gt; regardless, since we don&apos;t know what instance is calling us. We could have
&gt; the thunk branch to see if it&apos;s actually performing a context switch.

Ima save thunk land for:
https://bugs.webkit.org/show_bug.cgi?id=172197</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1309408</commentid>
    <comment_count>7</comment_count>
      <attachid>310330</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2017-05-16 17:36:44 -0700</bug_when>
    <thetext>Created attachment 310330
WIP

Might be done.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1309416</commentid>
    <comment_count>8</comment_count>
      <attachid>310332</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2017-05-16 17:49:24 -0700</bug_when>
    <thetext>Created attachment 310332
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1309425</commentid>
    <comment_count>9</comment_count>
      <attachid>310336</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2017-05-16 18:00:58 -0700</bug_when>
    <thetext>Created attachment 310336
patch

added file to cmakelists.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1309435</commentid>
    <comment_count>10</comment_count>
      <attachid>310340</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2017-05-16 18:34:53 -0700</bug_when>
    <thetext>Created attachment 310340
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1309701</commentid>
    <comment_count>11</comment_count>
      <attachid>310340</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2017-05-17 11:36:31 -0700</bug_when>
    <thetext>Comment on attachment 310340
patch

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

&gt; Source/JavaScriptCore/wasm/WasmB3IRGenerator.cpp:1155
&gt; +        BasicBlock* continuation = m_proc.addBlock();
&gt; +        BasicBlock* doContextSwitch = m_proc.addBlock();

These should probably be switched for better block ordering.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1309716</commentid>
    <comment_count>12</comment_count>
      <attachid>310340</attachid>
    <who name="JF Bastien">jfbastien</who>
    <bug_when>2017-05-17 11:54:42 -0700</bug_when>
    <thetext>Comment on attachment 310340
patch

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

&gt; Source/JavaScriptCore/wasm/WasmB3IRGenerator.cpp:1170
&gt; +        patchpoint-&gt;setGenerator([=] (CCallHelpers&amp; jit, const B3::StackmapGenerationParams&amp; params) {

I think as a follow-up to this patch I&apos;d rather have this be outlined, and shared between all modules. Kinda like what we do for direct wasm-&gt;wasm calls, but cleaned up. I think the code duplication and compile cost aren&apos;t worth it, because I don&apos;t think inlining exposes any perf win here.

Maybe add a FIXME?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1309720</commentid>
    <comment_count>13</comment_count>
      <attachid>310340</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2017-05-17 11:56:07 -0700</bug_when>
    <thetext>Comment on attachment 310340
patch

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

&gt;&gt; Source/JavaScriptCore/wasm/WasmB3IRGenerator.cpp:1170
&gt;&gt; +        patchpoint-&gt;setGenerator([=] (CCallHelpers&amp; jit, const B3::StackmapGenerationParams&amp; params) {
&gt; 
&gt; I think as a follow-up to this patch I&apos;d rather have this be outlined, and shared between all modules. Kinda like what we do for direct wasm-&gt;wasm calls, but cleaned up. I think the code duplication and compile cost aren&apos;t worth it, because I don&apos;t think inlining exposes any perf win here.
&gt; 
&gt; Maybe add a FIXME?

I think long term we just want to do this:
https://bugs.webkit.org/show_bug.cgi?id=172197</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1309830</commentid>
    <comment_count>14</comment_count>
      <attachid>310340</attachid>
    <who name="Keith Miller">keith_miller</who>
    <bug_when>2017-05-17 14:38:49 -0700</bug_when>
    <thetext>Comment on attachment 310340
patch

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

r=me.

&gt;&gt; Source/JavaScriptCore/wasm/WasmB3IRGenerator.cpp:1155
&gt;&gt; +        BasicBlock* doContextSwitch = m_proc.addBlock();
&gt; 
&gt; These should probably be switched for better block ordering.

I don&apos;t think this matters. Doesn&apos;t B3 pick the ordering it wants later anyway?

&gt; Source/JavaScriptCore/wasm/WasmB3IRGenerator.cpp:1164
&gt; +        PatchpointValue* patchpoint = doContextSwitch-&gt;appendNew&lt;PatchpointValue&gt;(m_proc, B3::Void, origin());

I think you need to say this writes pinned.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1309934</commentid>
    <comment_count>15</comment_count>
    <who name="Saam Barati">saam</who>
    <bug_when>2017-05-17 17:24:13 -0700</bug_when>
    <thetext>landed in:
https://trac.webkit.org/changeset/217017/webkit</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>310308</attachid>
            <date>2017-05-16 15:45:08 -0700</date>
            <delta_ts>2017-05-16 17:36:44 -0700</delta_ts>
            <desc>WIP</desc>
            <filename>c-backup.diff</filename>
            <type>text/plain</type>
            <size>8667</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IEpTVGVzdHMvd2FzbS9mdW5jdGlvbi10ZXN0cy9jb250ZXh0LXN3aXRjaC5qcwo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBKU1Rlc3RzL3dhc20vZnVuY3Rpb24tdGVzdHMvY29udGV4dC1zd2l0Y2guanMJ
KG5vbmV4aXN0ZW50KQorKysgSlNUZXN0cy93YXNtL2Z1bmN0aW9uLXRlc3RzL2NvbnRleHQtc3dp
dGNoLmpzCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNjYgQEAKK2ltcG9ydCBCdWlsZGVyIGZy
b20gJy4uL0J1aWxkZXIuanMnCitpbXBvcnQgKiBhcyBhc3NlcnQgZnJvbSAnLi4vYXNzZXJ0Lmpz
JworCit7CisgICAgZnVuY3Rpb24gbWFrZUluc3RhbmNlKCkgeworICAgICAgICBjb25zdCB0YWJs
ZURlc2NyaXB0aW9uID0ge2luaXRpYWw6IDEsIGVsZW1lbnQ6ICJhbnlmdW5jIn07CisgICAgICAg
IGNvbnN0IGJ1aWxkZXIgPSBuZXcgQnVpbGRlcigpCisgICAgICAgICAgICAuVHlwZSgpCisgICAg
ICAgICAgICAgICAgLkZ1bmMoW10sICJ2b2lkIikKKyAgICAgICAgICAgIC5FbmQoKQorICAgICAg
ICAgICAgLkltcG9ydCgpCisgICAgICAgICAgICAgICAgLlRhYmxlKCJpbXAiLCAidGFibGUiLCB0
YWJsZURlc2NyaXB0aW9uKQorICAgICAgICAgICAgLkVuZCgpCisgICAgICAgICAgICAuRnVuY3Rp
b24oKS5FbmQoKQorICAgICAgICAgICAgLkV4cG9ydCgpCisgICAgICAgICAgICAgICAgLkZ1bmN0
aW9uKCJmb28iKQorICAgICAgICAgICAgLkVuZCgpCisgICAgICAgICAgICAuQ29kZSgpCisgICAg
ICAgICAgICAgICAgLkZ1bmN0aW9uKCJmb28iLCB7cGFyYW1zOlsiaTMyIl0sIHJldDoidm9pZCJ9
KQorICAgICAgICAgICAgICAgICAgICAuR2V0TG9jYWwoMCkgLy8gcGFyYW1ldGVyIHRvIGNhbGwK
KyAgICAgICAgICAgICAgICAgICAgLkdldExvY2FsKDApIC8vIGNhbGwgaW5kZXgKKyAgICAgICAg
ICAgICAgICAgICAgLkNhbGxJbmRpcmVjdCgwLCAwKSAvLyBjYWxsaW5nIGZ1bmN0aW9uIG9mIHR5
cGUgW10gPT4gJ3ZvaWQnCisgICAgICAgICAgICAgICAgICAgIC5SZXR1cm4oKQorICAgICAgICAg
ICAgICAgIC5FbmQoKQorICAgICAgICAgICAgLkVuZCgpOworCisKKyAgICAgICAgY29uc3QgYmlu
ID0gYnVpbGRlci5XZWJBc3NlbWJseSgpLmdldCgpOworICAgICAgICBjb25zdCBtb2R1bGUgPSBu
ZXcgV2ViQXNzZW1ibHkuTW9kdWxlKGJpbik7CisgICAgICAgIGNvbnN0IHRhYmxlID0gbmV3IFdl
YkFzc2VtYmx5LlRhYmxlKHRhYmxlRGVzY3JpcHRpb24pOworICAgICAgICByZXR1cm4ge2luc3Rh
bmNlOiBuZXcgV2ViQXNzZW1ibHkuSW5zdGFuY2UobW9kdWxlLCB7aW1wOiB7dGFibGV9fSksIHRh
YmxlfTsKKyAgICB9CisKKyAgICBmdW5jdGlvbiBtYWtlSW5zdGFuY2UyKCkgeworICAgICAgICBj
b25zdCB0YWJsZURlc2NyaXB0aW9uID0ge2luaXRpYWw6IDEsIGVsZW1lbnQ6ICJhbnlmdW5jIn07
CisgICAgICAgIGNvbnN0IGJ1aWxkZXIgPSBuZXcgQnVpbGRlcigpCisgICAgICAgICAgICAuVHlw
ZSgpCisgICAgICAgICAgICAuRW5kKCkKKyAgICAgICAgICAgIC5JbXBvcnQoKQorICAgICAgICAg
ICAgICAgIC5GdW5jdGlvbigiaW1wIiwgImYiLCB7cGFyYW1zOltdLCByZXQ6InZvaWQifSkKKyAg
ICAgICAgICAgIC5FbmQoKQorICAgICAgICAgICAgLkZ1bmN0aW9uKCkuRW5kKCkKKyAgICAgICAg
ICAgIC5FeHBvcnQoKQorICAgICAgICAgICAgICAgIC5GdW5jdGlvbigiZm9vIikKKyAgICAgICAg
ICAgIC5FbmQoKQorICAgICAgICAgICAgLkNvZGUoKQorICAgICAgICAgICAgICAgIC5GdW5jdGlv
bigiZm9vIiwge3BhcmFtczogW10sIHJldDogInZvaWQiIH0pCisgICAgICAgICAgICAgICAgICAg
IC5DYWxsKDApCisgICAgICAgICAgICAgICAgICAgIC5SZXR1cm4oKQorICAgICAgICAgICAgICAg
IC5FbmQoKQorICAgICAgICAgICAgLkVuZCgpOworCisKKyAgICAgICAgY29uc3QgYmluID0gYnVp
bGRlci5XZWJBc3NlbWJseSgpLmdldCgpOworICAgICAgICBjb25zdCBtb2R1bGUgPSBuZXcgV2Vi
QXNzZW1ibHkuTW9kdWxlKGJpbik7CisgICAgICAgIHJldHVybiBuZXcgV2ViQXNzZW1ibHkuSW5z
dGFuY2UobW9kdWxlLCB7aW1wOiB7ZjogZnVuY3Rpb24oKSB7IHByaW50KCJJbnNpZGUgZiIpOyB9
fX0pOworICAgIH0KKworICAgIGNvbnN0IHtpbnN0YW5jZTogaTEsIHRhYmxlOiB0MX0gPSBtYWtl
SW5zdGFuY2UoKTsKKyAgICBjb25zdCBmb28gPSBpMS5leHBvcnRzLmZvbzsKKworICAgIGNvbnN0
IGkyID0gbWFrZUluc3RhbmNlMigpOworICAgIHQxLnNldCgwLCBpMi5leHBvcnRzLmZvbyk7Cisg
ICAgCisgICAgZm9vKDApOworfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2Fz
bUIzSVJHZW5lcmF0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93
YXNtL1dhc21CM0lSR2VuZXJhdG9yLmNwcAkocmV2aXNpb24gMjE2OTQ3KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL3dhc20vV2FzbUIzSVJHZW5lcmF0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0xMDg5LDEyICsxMDg5LDE1IEBAIGF1dG8gQjNJUkdlbmVyYXRvcjo6YWRkQ2FsbEluZGlyZWN0
KGNvbnMKICAgICBBU1NFUlQoc2lnbmF0dXJlLmFyZ3VtZW50Q291bnQoKSA9PSBhcmdzLnNpemUo
KSk7CiAKICAgICBFeHByZXNzaW9uVHlwZSBjYWxsYWJsZUZ1bmN0aW9uQnVmZmVyOworICAgIEV4
cHJlc3Npb25UeXBlIGpzRnVuY3Rpb25CdWZmZXI7CiAgICAgRXhwcmVzc2lvblR5cGUgY2FsbGFi
bGVGdW5jdGlvbkJ1ZmZlclNpemU7CiAgICAgewogICAgICAgICBFeHByZXNzaW9uVHlwZSB0YWJs
ZSA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8TWVtb3J5VmFsdWU+KG1fcHJvYywgTG9hZCwg
cG9pbnRlclR5cGUoKSwgb3JpZ2luKCksCiAgICAgICAgICAgICBtX2luc3RhbmNlVmFsdWUsIHNh
ZmVDYXN0PGludDMyX3Q+KEpTV2ViQXNzZW1ibHlJbnN0YW5jZTo6b2Zmc2V0T2ZUYWJsZSgpKSk7
CiAgICAgICAgIGNhbGxhYmxlRnVuY3Rpb25CdWZmZXIgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5k
TmV3PE1lbW9yeVZhbHVlPihtX3Byb2MsIExvYWQsIHBvaW50ZXJUeXBlKCksIG9yaWdpbigpLAog
ICAgICAgICAgICAgdGFibGUsIHNhZmVDYXN0PGludDMyX3Q+KEpTV2ViQXNzZW1ibHlUYWJsZTo6
b2Zmc2V0T2ZGdW5jdGlvbnMoKSkpOworICAgICAgICBqc0Z1bmN0aW9uQnVmZmVyID0gbV9jdXJy
ZW50QmxvY2stPmFwcGVuZE5ldzxNZW1vcnlWYWx1ZT4obV9wcm9jLCBMb2FkLCBwb2ludGVyVHlw
ZSgpLCBvcmlnaW4oKSwKKyAgICAgICAgICAgIHRhYmxlLCBzYWZlQ2FzdDxpbnQzMl90PihKU1dl
YkFzc2VtYmx5VGFibGU6Om9mZnNldE9mSlNGdW5jdGlvbnMoKSkpOwogICAgICAgICBjYWxsYWJs
ZUZ1bmN0aW9uQnVmZmVyU2l6ZSA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8TWVtb3J5VmFs
dWU+KG1fcHJvYywgTG9hZCwgSW50MzIsIG9yaWdpbigpLAogICAgICAgICAgICAgdGFibGUsIHNh
ZmVDYXN0PGludDMyX3Q+KEpTV2ViQXNzZW1ibHlUYWJsZTo6b2Zmc2V0T2ZTaXplKCkpKTsKICAg
ICB9CkBAIC0xMTQwLDExICsxMTQzLDY3IEBAIGF1dG8gQjNJUkdlbmVyYXRvcjo6YWRkQ2FsbElu
ZGlyZWN0KGNvbnMKICAgICAgICAgfSk7CiAgICAgfQogCisgICAgLy8gRG8gYSBjb250ZXh0IHN3
aXRjaCBpZiBuZWVkZWQuCisgICAgeworICAgICAgICBWYWx1ZSogb2Zmc2V0ID0gbV9jdXJyZW50
QmxvY2stPmFwcGVuZE5ldzxWYWx1ZT4obV9wcm9jLCBNdWwsIG9yaWdpbigpLAorICAgICAgICAg
ICAgbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxWYWx1ZT4obV9wcm9jLCBaRXh0MzIsIG9yaWdp
bigpLCBjYWxsZWVJbmRleCksCisgICAgICAgICAgICBjb25zdGFudChwb2ludGVyVHlwZSgpLCBz
aXplb2YoV3JpdGVCYXJyaWVyPEpTT2JqZWN0PikpKTsKKyAgICAgICAgVmFsdWUqIGpzT2JqZWN0
ID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxNZW1vcnlWYWx1ZT4obV9wcm9jLCBMb2FkLCBw
b2ludGVyVHlwZSgpLCBvcmlnaW4oKSwKKyAgICAgICAgICAgIG1fY3VycmVudEJsb2NrLT5hcHBl
bmROZXc8VmFsdWU+KG1fcHJvYywgQWRkLCBvcmlnaW4oKSwganNGdW5jdGlvbkJ1ZmZlciwgb2Zm
c2V0KSk7CisKKyAgICAgICAgVmFsdWUqIGpzVHlwZSA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmRO
ZXc8TWVtb3J5VmFsdWU+KG1fcHJvYywgTG9hZDhaLCBvcmlnaW4oKSwganNPYmplY3QsIHNhZmVD
YXN0PGludDMyX3Q+KEpTQ2VsbDo6dHlwZUluZm9UeXBlT2Zmc2V0KCkpKTsKKworICAgICAgICBC
YXNpY0Jsb2NrKiBtYXliZURvQ29udGV4dFN3aXRjaCA9IG1fcHJvYy5hZGRCbG9jaygpOworICAg
ICAgICBCYXNpY0Jsb2NrKiBjb250aW51YXRpb24gPSBtX3Byb2MuYWRkQmxvY2soKTsKKyAgICAg
ICAgQmFzaWNCbG9jayogZG9Db250ZXh0U3dpdGNoID0gbV9wcm9jLmFkZEJsb2NrKCk7CisKKyAg
ICAgICAgVmFsdWUqIGlzV2ViQXNzZW1ibHlGdW5jdGlvbiA9IG1fY3VycmVudEJsb2NrLT5hcHBl
bmROZXc8VmFsdWU+KG1fcHJvYywgRXF1YWwsIG9yaWdpbigpLAorICAgICAgICAgICAganNUeXBl
LCBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PENvbnN0MzJWYWx1ZT4obV9wcm9jLCBvcmlnaW4o
KSwgV2ViQXNzZW1ibHlGdW5jdGlvblR5cGUpKTsKKworICAgICAgICAvLyBJbnNpZGUgYSB0YWJs
ZSwgd2Ugb25seSBhbGxvdyB0d28gdHlwZXMgb2YgZnVuY3Rpb25zOiBXZWJBc3NlbWJseUZ1bmN0
aW9uIGFuZCBXZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlvbi4KKyAgICAgICAgLy8gV2Ugb25seSBu
ZWVkIHRvIGNvbnRleHQgc3dpdGNoIHdoZW4gY2FsbGluZyBhIFdlYkFzc2VtYmx5RnVuY3Rpb24g
c2luY2UgaXQgbWlnaHQgYmUgZnJvbSBhbm90aGVyIGNvbnRleHQuCisgICAgICAgIC8vIFdlYkFz
c2VtYmx5V3JhcHBlckZ1bmN0aW9uIGlzIGFzIGlmIHdlJ3JlIGNhbGxpbmcgaW50byBKUywgc28g
d2UgZG9uJ3QgbmVlZCB0byBkbyBhIGNvbnRleHQgc3dpdGNoLgorICAgICAgICBtX2N1cnJlbnRC
bG9jay0+YXBwZW5kTmV3Q29udHJvbFZhbHVlKG1fcHJvYywgQjM6OkJyYW5jaCwgb3JpZ2luKCks
CisgICAgICAgICAgICBpc1dlYkFzc2VtYmx5RnVuY3Rpb24sIEZyZXF1ZW50ZWRCbG9jayhtYXli
ZURvQ29udGV4dFN3aXRjaCksIEZyZXF1ZW50ZWRCbG9jayhjb250aW51YXRpb24pKTsKKworICAg
ICAgICBWYWx1ZSogbmV3Q29udGV4dCA9IG1heWJlRG9Db250ZXh0U3dpdGNoLT5hcHBlbmROZXc8
TWVtb3J5VmFsdWU+KG1fcHJvYywgTG9hZCwgcG9pbnRlclR5cGUoKSwgb3JpZ2luKCksCisgICAg
ICAgICAgICBqc09iamVjdCwgc2FmZUNhc3Q8aW50MzJfdD4oV2ViQXNzZW1ibHlGdW5jdGlvbjo6
b2Zmc2V0T2ZJbnN0YW5jZSgpKSk7CisgICAgICAgIFZhbHVlKiBpc1NhbWVDb250ZXh0ID0gbWF5
YmVEb0NvbnRleHRTd2l0Y2gtPmFwcGVuZE5ldzxWYWx1ZT4obV9wcm9jLCBFcXVhbCwgb3JpZ2lu
KCksCisgICAgICAgICAgICBuZXdDb250ZXh0LCBtX2luc3RhbmNlVmFsdWUpOworICAgICAgICBt
YXliZURvQ29udGV4dFN3aXRjaC0+YXBwZW5kTmV3Q29udHJvbFZhbHVlKG1fcHJvYywgQjM6OkJy
YW5jaCwgb3JpZ2luKCksCisgICAgICAgICAgICBpc1NhbWVDb250ZXh0LCBGcmVxdWVudGVkQmxv
Y2soY29udGludWF0aW9uKSwgRnJlcXVlbnRlZEJsb2NrKGRvQ29udGV4dFN3aXRjaCkpOworCisg
ICAgICAgIFBhdGNocG9pbnRWYWx1ZSogcGF0Y2hwb2ludCA9IGRvQ29udGV4dFN3aXRjaC0+YXBw
ZW5kTmV3PFBhdGNocG9pbnRWYWx1ZT4obV9wcm9jLCBCMzo6Vm9pZCwgb3JpZ2luKCkpOworICAg
ICAgICAvLyBXZSBwZXNzaW1pc3RpY2FsbHkgYXNzdW1lIHdlJ3JlIGNhbGxpbmcgY29tZXRoaW5n
IHdpdGggQm91bmRzQ2hlY2tpbmcgbWVtb3J5LgorICAgICAgICBwYXRjaHBvaW50LT5jbG9iYmVy
KFBpbm5lZFJlZ2lzdGVySW5mbzo6Z2V0KCkudG9TYXZlKE1lbW9yeU1vZGU6OkJvdW5kc0NoZWNr
aW5nKSk7CisgICAgICAgIHBhdGNocG9pbnQtPmNsb2JiZXIoUmVnaXN0ZXJTZXQ6Om1hY3JvU2Ny
YXRjaFJlZ2lzdGVycygpKTsKKyAgICAgICAgcGF0Y2hwb2ludC0+YXBwZW5kKG5ld0NvbnRleHQs
IFZhbHVlUmVwOjpTb21lUmVnaXN0ZXIpOworICAgICAgICBwYXRjaHBvaW50LT5zZXRHZW5lcmF0
b3IoWz1dIChDQ2FsbEhlbHBlcnMmIGppdCwgY29uc3QgQjM6OlN0YWNrbWFwR2VuZXJhdGlvblBh
cmFtcyYgcGFyYW1zKSB7CisgICAgICAgICAgICBBbGxvd01hY3JvU2NyYXRjaFJlZ2lzdGVyVXNh
Z2UgYWxsb3dTY3JhdGNoKGppdCk7CisgICAgICAgICAgICBHUFJSZWcgbmV3Q29udGV4dCA9IHBh
cmFtc1swXS5ncHIoKTsKKyAgICAgICAgICAgIGNvbnN0IFBpbm5lZFJlZ2lzdGVySW5mbyYgcGlu
bmVkUmVncyA9IFBpbm5lZFJlZ2lzdGVySW5mbzo6Z2V0KCk7CisgICAgICAgICAgICBjb25zdCBh
dXRvJiBzaXplUmVncyA9IHBpbm5lZFJlZ3Muc2l6ZVJlZ2lzdGVyczsKKyAgICAgICAgICAgIEdQ
UlJlZyBiYXNlTWVtb3J5ID0gcGlubmVkUmVncy5iYXNlTWVtb3J5UG9pbnRlcjsKKyAgICAgICAg
ICAgIEFTU0VSVChuZXdDb250ZXh0ICE9IGJhc2VNZW1vcnkpOworCisgICAgICAgICAgICBqaXQu
c3RvcmVXYXNtQ29udGV4dChuZXdDb250ZXh0KTsKKyAgICAgICAgICAgIGppdC5sb2FkUHRyKEND
YWxsSGVscGVyczo6QWRkcmVzcyhuZXdDb250ZXh0LCBDb250ZXh0OjpvZmZzZXRPZk1lbW9yeSgp
KSwgYmFzZU1lbW9yeSk7IC8vIEpTV2ViQXNzZW1ibHlNZW1vcnkqLgorICAgICAgICAgICAgQVNT
RVJUKHNpemVSZWdzLnNpemUoKSA9PSAxKTsKKyAgICAgICAgICAgIEFTU0VSVChzaXplUmVnc1sw
XS5zaXplUmVnaXN0ZXIgIT0gYmFzZU1lbW9yeSk7CisgICAgICAgICAgICBBU1NFUlQoc2l6ZVJl
Z3NbMF0uc2l6ZVJlZ2lzdGVyICE9IG5ld0NvbnRleHQpOworICAgICAgICAgICAgQVNTRVJUKCFz
aXplUmVnc1swXS5zaXplT2Zmc2V0KTsKKyAgICAgICAgICAgIGppdC5sb2FkUHRyKENDYWxsSGVs
cGVyczo6QWRkcmVzcyhiYXNlTWVtb3J5LCBKU1dlYkFzc2VtYmx5TWVtb3J5OjpvZmZzZXRPZlNp
emUoKSksIHNpemVSZWdzWzBdLnNpemVSZWdpc3Rlcik7IC8vIE1lbW9yeSBzaXplLgorICAgICAg
ICAgICAgaml0LmxvYWRQdHIoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKGJhc2VNZW1vcnksIEpTV2Vi
QXNzZW1ibHlNZW1vcnk6Om9mZnNldE9mTWVtb3J5KCkpLCBiYXNlTWVtb3J5KTsgLy8gV2FzbU1l
bW9yeTo6dm9pZCouCisgICAgICAgIH0pOworICAgICAgICBkb0NvbnRleHRTd2l0Y2gtPmFwcGVu
ZE5ld0NvbnRyb2xWYWx1ZShtX3Byb2MsIEp1bXAsIG9yaWdpbigpLCBjb250aW51YXRpb24pOwor
CisgICAgICAgIG1fY3VycmVudEJsb2NrID0gY29udGludWF0aW9uOworICAgIH0KKwogICAgIEV4
cHJlc3Npb25UeXBlIGNhbGxlZUNvZGUgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PE1lbW9y
eVZhbHVlPihtX3Byb2MsIExvYWQsIHBvaW50ZXJUeXBlKCksIG9yaWdpbigpLAogICAgICAgICBt
X2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PE1lbW9yeVZhbHVlPihtX3Byb2MsIExvYWQsIHBvaW50
ZXJUeXBlKCksIG9yaWdpbigpLCBjYWxsYWJsZUZ1bmN0aW9uLAogICAgICAgICAgICAgc2FmZUNh
c3Q8aW50MzJfdD4oT0JKRUNUX09GRlNFVE9GKENhbGxhYmxlRnVuY3Rpb24sIGNvZGUpKSkpOwog
Ci0KICAgICBUeXBlIHJldHVyblR5cGUgPSBzaWduYXR1cmUucmV0dXJuVHlwZSgpOwogICAgIHJl
c3VsdCA9IHdhc21DYWxsaW5nQ29udmVudGlvbigpLnNldHVwQ2FsbChtX3Byb2MsIG1fY3VycmVu
dEJsb2NrLCBvcmlnaW4oKSwgYXJncywgdG9CM1R5cGUocmV0dXJuVHlwZSksCiAgICAgICAgIFs9
XSAoUGF0Y2hwb2ludFZhbHVlKiBwYXRjaHBvaW50KSB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5VGFibGUuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5VGFibGUuaAkocmV2aXNpb24gMjE2
OTQ3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseVRhYmxl
LmgJKHdvcmtpbmcgY29weSkKQEAgLTYyLDYgKzYyLDcgQEAgcHVibGljOgogCiAgICAgc3RhdGlj
IHB0cmRpZmZfdCBvZmZzZXRPZlNpemUoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoSlNXZWJB
c3NlbWJseVRhYmxlLCBtX3NpemUpOyB9CiAgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZkZ1
bmN0aW9ucygpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihKU1dlYkFzc2VtYmx5VGFibGUsIG1f
ZnVuY3Rpb25zKTsgfQorICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZKU0Z1bmN0aW9ucygp
IHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihKU1dlYkFzc2VtYmx5VGFibGUsIG1fanNGdW5jdGlv
bnMpOyB9CiAKICAgICBzdGF0aWMgYm9vbCBpc1ZhbGlkU2l6ZSh1aW50MzJfdCBzaXplKQogICAg
IHsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>310330</attachid>
            <date>2017-05-16 17:36:44 -0700</date>
            <delta_ts>2017-05-16 17:49:24 -0700</delta_ts>
            <desc>WIP</desc>
            <filename>c-backup.diff</filename>
            <type>text/plain</type>
            <size>36252</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IEpTVGVzdHMvd2FzbS9mdW5jdGlvbi10ZXN0cy9jb250ZXh0LXN3aXRjaC5qcwo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBKU1Rlc3RzL3dhc20vZnVuY3Rpb24tdGVzdHMvY29udGV4dC1zd2l0Y2guanMJ
KG5vbmV4aXN0ZW50KQorKysgSlNUZXN0cy93YXNtL2Z1bmN0aW9uLXRlc3RzL2NvbnRleHQtc3dp
dGNoLmpzCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMjc3IEBACitpbXBvcnQgQnVpbGRlciBm
cm9tICcuLi9CdWlsZGVyLmpzJworaW1wb3J0ICogYXMgYXNzZXJ0IGZyb20gJy4uL2Fzc2VydC5q
cycKKworeworICAgIGZ1bmN0aW9uIG1ha2VJbnN0YW5jZSgpIHsKKyAgICAgICAgY29uc3QgdGFi
bGVEZXNjcmlwdGlvbiA9IHtpbml0aWFsOiAxLCBlbGVtZW50OiAiYW55ZnVuYyJ9OworICAgICAg
ICBjb25zdCBidWlsZGVyID0gbmV3IEJ1aWxkZXIoKQorICAgICAgICAgICAgLlR5cGUoKQorICAg
ICAgICAgICAgICAgIC5GdW5jKFtdLCAidm9pZCIpCisgICAgICAgICAgICAuRW5kKCkKKyAgICAg
ICAgICAgIC5JbXBvcnQoKQorICAgICAgICAgICAgICAgIC5UYWJsZSgiaW1wIiwgInRhYmxlIiwg
dGFibGVEZXNjcmlwdGlvbikKKyAgICAgICAgICAgIC5FbmQoKQorICAgICAgICAgICAgLkZ1bmN0
aW9uKCkuRW5kKCkKKyAgICAgICAgICAgIC5FeHBvcnQoKQorICAgICAgICAgICAgICAgIC5GdW5j
dGlvbigiZm9vIikKKyAgICAgICAgICAgIC5FbmQoKQorICAgICAgICAgICAgLkNvZGUoKQorICAg
ICAgICAgICAgICAgIC5GdW5jdGlvbigiZm9vIiwge3BhcmFtczpbImkzMiJdLCByZXQ6InZvaWQi
fSkKKyAgICAgICAgICAgICAgICAgICAgLkdldExvY2FsKDApIC8vIHBhcmFtZXRlciB0byBjYWxs
CisgICAgICAgICAgICAgICAgICAgIC5HZXRMb2NhbCgwKSAvLyBjYWxsIGluZGV4CisgICAgICAg
ICAgICAgICAgICAgIC5DYWxsSW5kaXJlY3QoMCwgMCkgLy8gY2FsbGluZyBmdW5jdGlvbiBvZiB0
eXBlIFtdID0+ICd2b2lkJworICAgICAgICAgICAgICAgICAgICAuUmV0dXJuKCkKKyAgICAgICAg
ICAgICAgICAuRW5kKCkKKyAgICAgICAgICAgIC5FbmQoKTsKKworCisgICAgICAgIGNvbnN0IGJp
biA9IGJ1aWxkZXIuV2ViQXNzZW1ibHkoKS5nZXQoKTsKKyAgICAgICAgY29uc3QgbW9kdWxlID0g
bmV3IFdlYkFzc2VtYmx5Lk1vZHVsZShiaW4pOworICAgICAgICBjb25zdCB0YWJsZSA9IG5ldyBX
ZWJBc3NlbWJseS5UYWJsZSh0YWJsZURlc2NyaXB0aW9uKTsKKyAgICAgICAgcmV0dXJuIHtpbnN0
YW5jZTogbmV3IFdlYkFzc2VtYmx5Lkluc3RhbmNlKG1vZHVsZSwge2ltcDoge3RhYmxlfX0pLCB0
YWJsZX07CisgICAgfQorCisgICAgZnVuY3Rpb24gbWFrZUluc3RhbmNlMihmKSB7CisgICAgICAg
IGNvbnN0IGJ1aWxkZXIgPSBuZXcgQnVpbGRlcigpCisgICAgICAgICAgICAuVHlwZSgpCisgICAg
ICAgICAgICAuRW5kKCkKKyAgICAgICAgICAgIC5JbXBvcnQoKQorICAgICAgICAgICAgICAgIC5G
dW5jdGlvbigiaW1wIiwgImYiLCB7cGFyYW1zOltdLCByZXQ6InZvaWQifSkKKyAgICAgICAgICAg
IC5FbmQoKQorICAgICAgICAgICAgLkZ1bmN0aW9uKCkuRW5kKCkKKyAgICAgICAgICAgIC5FeHBv
cnQoKQorICAgICAgICAgICAgICAgIC5GdW5jdGlvbigiZm9vIikKKyAgICAgICAgICAgIC5FbmQo
KQorICAgICAgICAgICAgLkNvZGUoKQorICAgICAgICAgICAgICAgIC5GdW5jdGlvbigiZm9vIiwg
e3BhcmFtczogW10sIHJldDogInZvaWQiIH0pCisgICAgICAgICAgICAgICAgICAgIC5DYWxsKDAp
CisgICAgICAgICAgICAgICAgICAgIC5SZXR1cm4oKQorICAgICAgICAgICAgICAgIC5FbmQoKQor
ICAgICAgICAgICAgLkVuZCgpOworCisKKyAgICAgICAgY29uc3QgYmluID0gYnVpbGRlci5XZWJB
c3NlbWJseSgpLmdldCgpOworICAgICAgICBjb25zdCBtb2R1bGUgPSBuZXcgV2ViQXNzZW1ibHku
TW9kdWxlKGJpbik7CisgICAgICAgIHJldHVybiBuZXcgV2ViQXNzZW1ibHkuSW5zdGFuY2UobW9k
dWxlLCB7aW1wOiB7Zn19KTsKKyAgICB9CisKKyAgICBjb25zdCB7aW5zdGFuY2U6IGkxLCB0YWJs
ZTogdDF9ID0gbWFrZUluc3RhbmNlKCk7CisgICAgY29uc3QgZm9vID0gaTEuZXhwb3J0cy5mb287
CisKKyAgICBsZXQgY2FsbGVkID0gZmFsc2U7CisgICAgbGV0IHNob3VsZFRocm93ID0gZmFsc2U7
CisgICAgY29uc3QgaTIgPSBtYWtlSW5zdGFuY2UyKGZ1bmN0aW9uKCkgeworICAgICAgICBjYWxs
ZWQgPSB0cnVlOworICAgICAgICBpZiAoc2hvdWxkVGhyb3cpCisgICAgICAgICAgICB0aHJvdyBu
ZXcgRXJyb3IoIlRocmV3Iik7CisgICAgfSk7CisKKyAgICB0MS5zZXQoMCwgaTIuZXhwb3J0cy5m
b28pOworICAgIGZvciAobGV0IGkgPSAwOyBpIDwgMTAwMDsgKytpKSB7CisgICAgICAgIGZvbygw
KTsKKyAgICAgICAgYXNzZXJ0LmVxKGNhbGxlZCwgdHJ1ZSk7CisgICAgICAgIGNhbGxlZCA9IGZh
bHNlOworICAgIH0KKyAgICBzaG91bGRUaHJvdyA9IHRydWU7CisgICAgZm9yIChsZXQgaSA9IDA7
IGkgPCAxMDAwOyArK2kpIHsKKyAgICAgICAgYXNzZXJ0LnRocm93cygoKSA9PiBmb28oMCksIEVy
cm9yLCAiVGhyZXciKTsKKyAgICAgICAgYXNzZXJ0LmVxKGNhbGxlZCwgdHJ1ZSk7CisgICAgICAg
IGNhbGxlZCA9IGZhbHNlOworICAgIH0KK30KKworeworICAgIGZ1bmN0aW9uIG1ha2VJbnN0YW5j
ZSgpIHsKKyAgICAgICAgY29uc3QgdGFibGVEZXNjcmlwdGlvbiA9IHtpbml0aWFsOiAxLCBlbGVt
ZW50OiAiYW55ZnVuYyJ9OworICAgICAgICBjb25zdCBidWlsZGVyID0gbmV3IEJ1aWxkZXIoKQor
ICAgICAgICAgICAgLlR5cGUoKQorICAgICAgICAgICAgICAgIC5GdW5jKFsiaTMyIl0sICJ2b2lk
IikKKyAgICAgICAgICAgIC5FbmQoKQorICAgICAgICAgICAgLkltcG9ydCgpCisgICAgICAgICAg
ICAgICAgLlRhYmxlKCJpbXAiLCAidGFibGUiLCB0YWJsZURlc2NyaXB0aW9uKQorICAgICAgICAg
ICAgLkVuZCgpCisgICAgICAgICAgICAuRnVuY3Rpb24oKS5FbmQoKQorICAgICAgICAgICAgLkV4
cG9ydCgpCisgICAgICAgICAgICAgICAgLkZ1bmN0aW9uKCJmb28iKQorICAgICAgICAgICAgLkVu
ZCgpCisgICAgICAgICAgICAuQ29kZSgpCisgICAgICAgICAgICAgICAgLkZ1bmN0aW9uKCJmb28i
LCB7cGFyYW1zOlsiaTMyIiwgImkzMiJdLCByZXQ6InZvaWQifSkKKyAgICAgICAgICAgICAgICAg
ICAgLkdldExvY2FsKDEpIC8vIHBhcmFtZXRlciB0byBjYWxsCisgICAgICAgICAgICAgICAgICAg
IC5HZXRMb2NhbCgwKSAvLyBjYWxsIGluZGV4CisgICAgICAgICAgICAgICAgICAgIC5DYWxsSW5k
aXJlY3QoMCwgMCkgLy8gY2FsbGluZyBmdW5jdGlvbiBvZiB0eXBlIFsnaTMyJ10gPT4gJ3ZvaWQn
CisgICAgICAgICAgICAgICAgICAgIC5SZXR1cm4oKQorICAgICAgICAgICAgICAgIC5FbmQoKQor
ICAgICAgICAgICAgLkVuZCgpOworCisgICAgICAgIGNvbnN0IGJpbiA9IGJ1aWxkZXIuV2ViQXNz
ZW1ibHkoKS5nZXQoKTsKKyAgICAgICAgY29uc3QgbW9kdWxlID0gbmV3IFdlYkFzc2VtYmx5Lk1v
ZHVsZShiaW4pOworICAgICAgICBjb25zdCB0YWJsZSA9IG5ldyBXZWJBc3NlbWJseS5UYWJsZSh0
YWJsZURlc2NyaXB0aW9uKTsKKyAgICAgICAgcmV0dXJuIHtpbnN0YW5jZTogbmV3IFdlYkFzc2Vt
Ymx5Lkluc3RhbmNlKG1vZHVsZSwge2ltcDoge3RhYmxlfX0pLCB0YWJsZX07CisgICAgfQorCisg
ICAgZnVuY3Rpb24gbWFrZUluc3RhbmNlMihtZW1vcnksIGYpIHsKKyAgICAgICAgY29uc3QgYnVp
bGRlciA9IG5ldyBCdWlsZGVyKCkKKyAgICAgICAgICAgIC5UeXBlKCkKKyAgICAgICAgICAgIC5F
bmQoKQorICAgICAgICAgICAgLkltcG9ydCgpCisgICAgICAgICAgICAgICAgLkZ1bmN0aW9uKCJp
bXAiLCAiZiIsIHtwYXJhbXM6WydpMzInLCAnaTMyJ10sIHJldDoidm9pZCJ9KQorICAgICAgICAg
ICAgICAgIC5NZW1vcnkoImltcCIsICJtZW1vcnkiLCBtZW1vcnlEZXNjcmlwdGlvbikKKyAgICAg
ICAgICAgIC5FbmQoKQorICAgICAgICAgICAgLkZ1bmN0aW9uKCkuRW5kKCkKKyAgICAgICAgICAg
IC5FeHBvcnQoKQorICAgICAgICAgICAgICAgIC5GdW5jdGlvbigiZm9vIikKKyAgICAgICAgICAg
IC5FbmQoKQorICAgICAgICAgICAgLkNvZGUoKQorICAgICAgICAgICAgICAgIC5GdW5jdGlvbigi
Zm9vIiwge3BhcmFtczogWyJpMzIiXSwgcmV0OiAidm9pZCIgfSkKKyAgICAgICAgICAgICAgICAg
ICAgLkdldExvY2FsKDApCisgICAgICAgICAgICAgICAgICAgIC5HZXRMb2NhbCgwKQorICAgICAg
ICAgICAgICAgICAgICAuSTMyTG9hZCgyLCAwKQorICAgICAgICAgICAgICAgICAgICAuQ2FsbCgw
KQorICAgICAgICAgICAgICAgICAgICAuUmV0dXJuKCkKKyAgICAgICAgICAgICAgICAuRW5kKCkK
KyAgICAgICAgICAgIC5FbmQoKTsKKworCisgICAgICAgIGNvbnN0IGJpbiA9IGJ1aWxkZXIuV2Vi
QXNzZW1ibHkoKS5nZXQoKTsKKyAgICAgICAgY29uc3QgbW9kdWxlID0gbmV3IFdlYkFzc2VtYmx5
Lk1vZHVsZShiaW4pOworICAgICAgICByZXR1cm4gbmV3IFdlYkFzc2VtYmx5Lkluc3RhbmNlKG1v
ZHVsZSwge2ltcDoge2YsIG1lbW9yeX19KTsKKyAgICB9CisKKyAgICBjb25zdCB7aW5zdGFuY2U6
IGkxLCB0YWJsZTogdDF9ID0gbWFrZUluc3RhbmNlKCk7CisgICAgY29uc3QgZm9vID0gKG1lbU9m
ZnNldCkgPT4gaTEuZXhwb3J0cy5mb28oMCwgbWVtT2Zmc2V0KTsKKworICAgIGNvbnN0IG1lbW9y
eURlc2NyaXB0aW9uID0ge2luaXRpYWw6MX07CisgICAgY29uc3QgbWVtID0gbmV3IFdlYkFzc2Vt
Ymx5Lk1lbW9yeShtZW1vcnlEZXNjcmlwdGlvbik7CisgICAgbGV0IGNhbGxlZCA9IGZhbHNlOwor
CisgICAgY29uc3QgcGFnZVNpemUgPSA2NCAqIDEwMjQ7CisgICAgbGV0IGJ1ZiA9IG5ldyBVaW50
MzJBcnJheShtZW0uYnVmZmVyKTsKKyAgICBjb25zdCBpMiA9IG1ha2VJbnN0YW5jZTIobWVtLCBm
dW5jdGlvbihpLCB2YWx1ZSkgeworICAgICAgICBhc3NlcnQuZXEoaSAmIDMsIDApOworICAgICAg
ICBhc3NlcnQuZXEoYnVmW2kvNF0sIHZhbHVlKTsKKyAgICAgICAgY2FsbGVkID0gdHJ1ZTsKKyAg
ICB9KTsKKyAgICB0MS5zZXQoMCwgaTIuZXhwb3J0cy5mb28pOworICAgIAorICAgIGZvciAobGV0
IGkgPSAwOyBpIDwgcGFnZVNpemUvNDsgKytpKSB7CisgICAgICAgIGJ1ZltpXSA9IGkrMTsKKyAg
ICB9CisKKyAgICBmb3IgKGxldCBpID0gMDsgaSA8IHBhZ2VTaXplLzQ7ICsraSkgeworICAgICAg
ICBmb28oaSo0KTsKKyAgICAgICAgYXNzZXJ0LmVxKGNhbGxlZCwgdHJ1ZSk7CisgICAgICAgIGNh
bGxlZCA9IGZhbHNlOworICAgIH0KKworICAgIGZvciAobGV0IGkgPSBwYWdlU2l6ZS80OyBpIDwg
MipwYWdlU2l6ZS80OyArK2kpIHsKKyAgICAgICAgYXNzZXJ0LnRocm93cygoKSA9PiBmb28oaSo0
KSwgV2ViQXNzZW1ibHkuUnVudGltZUVycm9yLCAiT3V0IG9mIGJvdW5kcyBtZW1vcnkgYWNjZXNz
Iik7CisgICAgICAgIGFzc2VydC5lcShjYWxsZWQsIGZhbHNlKTsKKyAgICB9Cit9CisKK3sKKyAg
ICBmdW5jdGlvbiBtYWtlSW5zdGFuY2UoKSB7CisgICAgICAgIGNvbnN0IHRhYmxlRGVzY3JpcHRp
b24gPSB7aW5pdGlhbDogMSwgZWxlbWVudDogImFueWZ1bmMifTsKKyAgICAgICAgY29uc3QgYnVp
bGRlciA9IG5ldyBCdWlsZGVyKCkKKyAgICAgICAgICAgIC5UeXBlKCkKKyAgICAgICAgICAgICAg
ICAuRnVuYyhbImkzMiJdLCAidm9pZCIpCisgICAgICAgICAgICAuRW5kKCkKKyAgICAgICAgICAg
IC5JbXBvcnQoKQorICAgICAgICAgICAgICAgIC5UYWJsZSgiaW1wIiwgInRhYmxlIiwgdGFibGVE
ZXNjcmlwdGlvbikKKyAgICAgICAgICAgIC5FbmQoKQorICAgICAgICAgICAgLkZ1bmN0aW9uKCku
RW5kKCkKKyAgICAgICAgICAgIC5FeHBvcnQoKQorICAgICAgICAgICAgICAgIC5GdW5jdGlvbigi
Zm9vIikKKyAgICAgICAgICAgIC5FbmQoKQorICAgICAgICAgICAgLkNvZGUoKQorICAgICAgICAg
ICAgICAgIC5GdW5jdGlvbigiZm9vIiwge3BhcmFtczpbImkzMiIsICJpMzIiXSwgcmV0OiJ2b2lk
In0pCisgICAgICAgICAgICAgICAgICAgIC5HZXRMb2NhbCgxKSAvLyBwYXJhbWV0ZXIgdG8gY2Fs
bAorICAgICAgICAgICAgICAgICAgICAuR2V0TG9jYWwoMCkgLy8gY2FsbCBpbmRleAorICAgICAg
ICAgICAgICAgICAgICAuQ2FsbEluZGlyZWN0KDAsIDApIC8vIGNhbGxpbmcgZnVuY3Rpb24gb2Yg
dHlwZSBbJ2kzMiddID0+ICd2b2lkJworICAgICAgICAgICAgICAgICAgICAuUmV0dXJuKCkKKyAg
ICAgICAgICAgICAgICAuRW5kKCkKKyAgICAgICAgICAgIC5FbmQoKTsKKworICAgICAgICBjb25z
dCBiaW4gPSBidWlsZGVyLldlYkFzc2VtYmx5KCkuZ2V0KCk7CisgICAgICAgIGNvbnN0IG1vZHVs
ZSA9IG5ldyBXZWJBc3NlbWJseS5Nb2R1bGUoYmluKTsKKyAgICAgICAgY29uc3QgdGFibGUgPSBu
ZXcgV2ViQXNzZW1ibHkuVGFibGUodGFibGVEZXNjcmlwdGlvbik7CisgICAgICAgIHJldHVybiB7
aW5zdGFuY2U6IG5ldyBXZWJBc3NlbWJseS5JbnN0YW5jZShtb2R1bGUsIHtpbXA6IHt0YWJsZX19
KSwgdGFibGV9OworICAgIH0KKworICAgIGZ1bmN0aW9uIG1ha2VJbnN0YW5jZTIobWVtb3J5LCBm
KSB7CisgICAgICAgIGNvbnN0IGJ1aWxkZXIgPSBuZXcgQnVpbGRlcigpCisgICAgICAgICAgICAu
VHlwZSgpCisgICAgICAgICAgICAuRW5kKCkKKyAgICAgICAgICAgIC5JbXBvcnQoKQorICAgICAg
ICAgICAgICAgIC5GdW5jdGlvbigiaW1wIiwgImYiLCB7cGFyYW1zOlsnaTMyJywgJ2kzMiddLCBy
ZXQ6InZvaWQifSkKKyAgICAgICAgICAgICAgICAuTWVtb3J5KCJpbXAiLCAibWVtb3J5IiwgbWVt
b3J5RGVzY3JpcHRpb24pCisgICAgICAgICAgICAuRW5kKCkKKyAgICAgICAgICAgIC5GdW5jdGlv
bigpLkVuZCgpCisgICAgICAgICAgICAuRXhwb3J0KCkKKyAgICAgICAgICAgICAgICAuRnVuY3Rp
b24oImZvbyIpCisgICAgICAgICAgICAuRW5kKCkKKyAgICAgICAgICAgIC5Db2RlKCkKKyAgICAg
ICAgICAgICAgICAuRnVuY3Rpb24oImZvbyIsIHtwYXJhbXM6IFsiaTMyIl0sIHJldDogInZvaWQi
IH0pCisgICAgICAgICAgICAgICAgICAgIC5HZXRMb2NhbCgwKQorICAgICAgICAgICAgICAgICAg
ICAuR2V0TG9jYWwoMCkKKyAgICAgICAgICAgICAgICAgICAgLkkzMkxvYWQoMiwgMCkKKyAgICAg
ICAgICAgICAgICAgICAgLkNhbGwoMCkKKyAgICAgICAgICAgICAgICAgICAgLlJldHVybigpCisg
ICAgICAgICAgICAgICAgLkVuZCgpCisgICAgICAgICAgICAuRW5kKCk7CisKKworICAgICAgICBj
b25zdCBiaW4gPSBidWlsZGVyLldlYkFzc2VtYmx5KCkuZ2V0KCk7CisgICAgICAgIGNvbnN0IG1v
ZHVsZSA9IG5ldyBXZWJBc3NlbWJseS5Nb2R1bGUoYmluKTsKKyAgICAgICAgcmV0dXJuIG5ldyBX
ZWJBc3NlbWJseS5JbnN0YW5jZShtb2R1bGUsIHtpbXA6IHtmLCBtZW1vcnl9fSk7CisgICAgfQor
CisgICAgZnVuY3Rpb24gZXhwb3J0SW1wb3J0KGYpIHsKKyAgICAgICAgbGV0IGJ1aWxkZXIgPSAo
bmV3IEJ1aWxkZXIoKSkKKyAgICAgICAgICAgIC5UeXBlKCkuRW5kKCkKKyAgICAgICAgICAgIC5J
bXBvcnQoKQorICAgICAgICAgICAgICAgIC5GdW5jdGlvbigiaW1wIiwgImYiLCB7cGFyYW1zOiBb
J2kzMiddLCByZXQ6InZvaWQifSkKKyAgICAgICAgICAgIC5FbmQoKQorICAgICAgICAgICAgLkZ1
bmN0aW9uKCkuRW5kKCkKKyAgICAgICAgICAgIC5FeHBvcnQoKQorICAgICAgICAgICAgICAgIC5G
dW5jdGlvbigiZnVuYyIsIHttb2R1bGU6ICJpbXAiLCBmaWVsZDogImYifSkKKyAgICAgICAgICAg
IC5FbmQoKQorICAgICAgICAgICAgLkNvZGUoKS5FbmQoKTsKKyAgICAgICAgcmV0dXJuIChuZXcg
V2ViQXNzZW1ibHkuSW5zdGFuY2UobmV3IFdlYkFzc2VtYmx5Lk1vZHVsZShidWlsZGVyLldlYkFz
c2VtYmx5KCkuZ2V0KCkpLCB7aW1wOiB7Zn19KSkuZXhwb3J0cy5mdW5jOworICAgIH0KKworICAg
IGNvbnN0IHtpbnN0YW5jZTogaTEsIHRhYmxlOiB0MX0gPSBtYWtlSW5zdGFuY2UoKTsKKyAgICBj
b25zdCBmb28gPSAobWVtT2Zmc2V0KSA9PiBpMS5leHBvcnRzLmZvbygwLCBtZW1PZmZzZXQpOwor
CisgICAgY29uc3QgbWVtb3J5RGVzY3JpcHRpb24gPSB7aW5pdGlhbDoxfTsKKyAgICBjb25zdCBt
ZW0gPSBuZXcgV2ViQXNzZW1ibHkuTWVtb3J5KG1lbW9yeURlc2NyaXB0aW9uKTsKKyAgICBsZXQg
Y2FsbGVkID0gZmFsc2U7CisKKyAgICBjb25zdCBwYWdlU2l6ZSA9IDY0ICogMTAyNDsKKyAgICBs
ZXQgYnVmID0gbmV3IFVpbnQzMkFycmF5KG1lbS5idWZmZXIpOworICAgIGNvbnN0IGkyID0gbWFr
ZUluc3RhbmNlMihtZW0sIGZ1bmN0aW9uKGksIHZhbHVlKSB7CisgICAgICAgIGFzc2VydC5lcShp
ICYgMywgMCk7CisgICAgICAgIGFzc2VydC5lcShidWZbaS80XSwgdmFsdWUpOworICAgICAgICBj
YWxsZWQgPSB0cnVlOworICAgIH0pOworCisgICAgY29uc3QgZXhwb3J0ZWRJbXBvcnQgPSBleHBv
cnRJbXBvcnQoZnVuY3Rpb24ob2Zmc2V0KSB7CisgICAgICAgIGkyLmV4cG9ydHMuZm9vKG9mZnNl
dCk7CisgICAgfSk7CisgICAgdDEuc2V0KDAsIGV4cG9ydGVkSW1wb3J0KTsKKyAgICAKKyAgICBm
b3IgKGxldCBpID0gMDsgaSA8IHBhZ2VTaXplLzQ7ICsraSkgeworICAgICAgICBidWZbaV0gPSBp
KzE7CisgICAgfQorCisgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBwYWdlU2l6ZS80OyArK2kpIHsK
KyAgICAgICAgZm9vKGkqNCk7CisgICAgICAgIGFzc2VydC5lcShjYWxsZWQsIHRydWUpOworICAg
ICAgICBjYWxsZWQgPSBmYWxzZTsKKyAgICB9CisKKyAgICBmb3IgKGxldCBpID0gcGFnZVNpemUv
NDsgaSA8IDIqcGFnZVNpemUvNDsgKytpKSB7CisgICAgICAgIGFzc2VydC50aHJvd3MoKCkgPT4g
Zm9vKGkqNCksIFdlYkFzc2VtYmx5LlJ1bnRpbWVFcnJvciwgIk91dCBvZiBib3VuZHMgbWVtb3J5
IGFjY2VzcyIpOworICAgICAgICBhc3NlcnQuZXEoY2FsbGVkLCBmYWxzZSk7CisgICAgfQorfQpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9q
ZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3Jp
cHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDIxNjk0NykKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhw
cm9qCSh3b3JraW5nIGNvcHkpCkBAIC0xMzI1LDYgKzEzMjUsOCBAQAogCQk0NDQzQUUzMzE2RTE4
OEQ5MDA3NkYxMTAgLyogRm91bmRhdGlvbi5mcmFtZXdvcmsgaW4gRnJhbWV3b3JrcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MUYwRUI2MTA1Qzg2QzZCMDBFNkRGMUIgLyog
Rm91bmRhdGlvbi5mcmFtZXdvcmsgKi87IH07CiAJCTQ1MTUzOUI5MTJEQzk5NDUwMEVGN0FDNCAv
KiBZYXJyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0
NTE1MzlCODEyREM5OTQ1MDBFRjdBQzQgLyogWWFyci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJV
VEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTQ3M0RBNEE0NzY0QzQ1RkU4NzFCMDQ4NSAvKiBE
ZWZpbmVQcm9wZXJ0eUF0dHJpYnV0ZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDE2OTk0OEVERTY4RDQwNTRCMDFFRjc5NyAvKiBEZWZpbmVQcm9wZXJ0
eUF0dHJpYnV0ZXMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9
OyB9OworCQk1MjEzMjI0NTFFQ0JDRTgyMDBGNjU2MTUgLyogV2ViQXNzZW1ibHlGdW5jdGlvbkJh
c2UuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTIx
MzIyNDMxRUNCQ0U4MjAwRjY1NjE1IC8qIFdlYkFzc2VtYmx5RnVuY3Rpb25CYXNlLmNwcCAqLzsg
fTsKKwkJNTIxMzIyNDYxRUNCQ0U4MjAwRjY1NjE1IC8qIFdlYkFzc2VtYmx5RnVuY3Rpb25CYXNl
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MjEzMjI0
NDFFQ0JDRTgyMDBGNjU2MTUgLyogV2ViQXNzZW1ibHlGdW5jdGlvbkJhc2UuaCAqLzsgfTsKIAkJ
NTI1MEQyRDExRThEQTA1QTAwMjlBOTMyIC8qIFdhc21UaHVua3MuY3BwIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTI1MEQyQ0YxRThEQTA1QTAwMjlBOTMy
IC8qIFdhc21UaHVua3MuY3BwICovOyB9OwogCQk1MjUwRDJEMjFFOERBMDVBMDAyOUE5MzIgLyog
V2FzbVRodW5rcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gNTI1MEQyRDAxRThEQTA1QTAwMjlBOTMyIC8qIFdhc21UaHVua3MuaCAqLzsgc2V0dGluZ3Mg
PSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk1MjVDMEREOTFFOTM1ODQ3MDAy
MTg0Q0QgLyogV2FzbUNhbGxlZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA1MjVDMERENzFFOTM1ODQ3MDAyMTg0Q0QgLyogV2FzbUNhbGxlZS5jcHAg
Ki87IH07CkBAIC0xMzQ2LDcgKzEzNDgsNyBAQAogCQk1MkM5NTJCNzE5QTI4OTg1MDA2OUIzODYg
LyogVHlwZVByb2ZpbGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSA1MkM5NTJCNjE5QTI4OTg1MDA2OUIzODYgLyogVHlwZVByb2ZpbGVyLmggKi87IHNl
dHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNTJDOTUyQjkxOUEy
OEExQzAwNjlCMzg2IC8qIFR5cGVQcm9maWxlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MkM5NTJCODE5QTI4QTFDMDA2OUIzODYgLyogVHlwZVBy
b2ZpbGVyLmNwcCAqLzsgfTsKIAkJNTJGNkMzNUQxRTcxRUIwODAwODFGNENDIC8qIFdlYkFzc2Vt
Ymx5V3JhcHBlckZ1bmN0aW9uLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDUyRjZDMzVCMUU3MUVCMDgwMDgxRjRDQyAvKiBXZWJBc3NlbWJseVdyYXBw
ZXJGdW5jdGlvbi5jcHAgKi87IH07Ci0JCTUyRjZDMzVFMUU3MUVCMDgwMDgxRjRDQyAvKiBXZWJB
c3NlbWJseVdyYXBwZXJGdW5jdGlvbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gNTJGNkMzNUMxRTcxRUIwODAwODFGNENDIC8qIFdlYkFzc2VtYmx5V3Jh
cHBlckZ1bmN0aW9uLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsg
fTsgfTsKKwkJNTJGNkMzNUUxRTcxRUIwODAwODFGNENDIC8qIFdlYkFzc2VtYmx5V3JhcHBlckZ1
bmN0aW9uLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1
MkY2QzM1QzFFNzFFQjA4MDA4MUY0Q0MgLyogV2ViQXNzZW1ibHlXcmFwcGVyRnVuY3Rpb24uaCAq
LzsgfTsKIAkJNTMwRkIzMDIxRTdBMEI2RTAwM0MxOUREIC8qIFdhc21Xb3JrbGlzdC5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTMwRkIzMDExRTdBMEI2
RTAwM0MxOUREIC8qIFdhc21Xb3JrbGlzdC5oICovOyB9OwogCQk1MzBGQjMwNDFFN0ExMTQ2MDAz
QzE5REQgLyogV2FzbVdvcmtsaXN0LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDUzMEZCMzAzMUU3QTExNDYwMDNDMTlERCAvKiBXYXNtV29ya2xpc3Qu
Y3BwICovOyB9OwogCQk1MzExQkQ0QTFFQTU4MUU1MDA1MjUyODEgLyogV2FzbU9NR1BsYW4uY3Bw
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTMxMUJENDgx
RUE1ODFFNTAwNTI1MjgxIC8qIFdhc21PTUdQbGFuLmNwcCAqLzsgfTsKQEAgLTM4NzMsNiArMzg3
NSw4IEBACiAJCTRDRTk3OEUzODVBODQ5ODE5OTA1MjE1MyAvKiBNb2R1bGVOYW1lc3BhY2VBY2Nl
c3NDYXNlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE1vZHVsZU5hbWVzcGFj
ZUFjY2Vzc0Nhc2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTFGMEVCNjEwNUM4
NkM2QjAwRTZERjFCIC8qIEZvdW5kYXRpb24uZnJhbWV3b3JrICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gd3JhcHBlci5mcmFtZXdvcms7IG5hbWUgPSBG
b3VuZGF0aW9uLmZyYW1ld29yazsgcGF0aCA9IC9TeXN0ZW0vTGlicmFyeS9GcmFtZXdvcmtzL0Zv
dW5kYXRpb24uZnJhbWV3b3JrOyBzb3VyY2VUcmVlID0gIjxhYnNvbHV0ZT4iOyB9OwogCQk1MUYw
RUMwNzA1Qzg2QzlBMDBFNkRGMUIgLyogbGlib2JqYy5keWxpYiAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9ICJjb21waWxlZC5tYWNoLW8uZHlsaWIiOyBu
YW1lID0gbGlib2JqYy5keWxpYjsgcGF0aCA9IC91c3IvbGliL2xpYm9iamMuZHlsaWI7IHNvdXJj
ZVRyZWUgPSAiPGFic29sdXRlPiI7IH07CisJCTUyMTMyMjQzMUVDQkNFODIwMEY2NTYxNSAvKiBX
ZWJBc3NlbWJseUZ1bmN0aW9uQmFzZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IG5hbWUgPSBXZWJBc3NlbWJseUZ1bmN0aW9uQmFzZS5jcHA7IHBhdGggPSBqcy9XZWJBc3NlbWJs
eUZ1bmN0aW9uQmFzZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTUyMTMyMjQ0
MUVDQkNFODIwMEY2NTYxNSAvKiBXZWJBc3NlbWJseUZ1bmN0aW9uQmFzZS5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IG5hbWUgPSBXZWJBc3NlbWJseUZ1bmN0aW9uQmFzZS5oOyBwYXRoID0g
anMvV2ViQXNzZW1ibHlGdW5jdGlvbkJhc2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJNTI1MEQyQ0YxRThEQTA1QTAwMjlBOTMyIC8qIFdhc21UaHVua3MuY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV2FzbVRodW5rcy5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTUyNTBEMkQwMUU4REEwNUEwMDI5QTkzMiAvKiBXYXNtVGh1bmtzLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdhc21UaHVua3MuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTI1QzBERDcxRTkzNTg0NzAwMjE4NENEIC8qIFdhc21DYWxs
ZWUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV2FzbUNhbGxlZS5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC04MDg5LDYgKzgwOTMsOCBAQAogCQkJ
CUFEMkZDQkIzMURCNThEQTQwMEIzRTczNiAvKiBXZWJBc3NlbWJseUNvbXBpbGVFcnJvclByb3Rv
dHlwZS5oICovLAogCQkJCUFENDkzN0M5MURERDI3MzQwMDc3QzgwNyAvKiBXZWJBc3NlbWJseUZ1
bmN0aW9uLmNwcCAqLywKIAkJCQlBRDQ5MzdDQTFEREQyNzM0MDA3N0M4MDcgLyogV2ViQXNzZW1i
bHlGdW5jdGlvbi5oICovLAorCQkJCTUyMTMyMjQzMUVDQkNFODIwMEY2NTYxNSAvKiBXZWJBc3Nl
bWJseUZ1bmN0aW9uQmFzZS5jcHAgKi8sCisJCQkJNTIxMzIyNDQxRUNCQ0U4MjAwRjY1NjE1IC8q
IFdlYkFzc2VtYmx5RnVuY3Rpb25CYXNlLmggKi8sCiAJCQkJQUQyRkNCQjQxREI1OERBNDAwQjNF
NzM2IC8qIFdlYkFzc2VtYmx5SW5zdGFuY2VDb25zdHJ1Y3Rvci5jcHAgKi8sCiAJCQkJQUQyRkNC
QjUxREI1OERBNDAwQjNFNzM2IC8qIFdlYkFzc2VtYmx5SW5zdGFuY2VDb25zdHJ1Y3Rvci5oICov
LAogCQkJCUFEMkZDQkI2MURCNThEQTQwMEIzRTczNiAvKiBXZWJBc3NlbWJseUluc3RhbmNlUHJv
dG90eXBlLmNwcCAqLywKQEAgLTg3MDMsNiArODcwOSw3IEBACiAJCQkJMEYzNEIxNEExNkQ0MjAx
MzAwMUNEQTVBIC8qIERGR1VzZUtpbmQuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGOTcxNTMxMUVC
MjhCRUUwMEExNjQ1RCAvKiBHQ1JlcXVlc3QuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGM0IzQTJD
MTU0NzUwMDIwMDNFRDBGRiAvKiBERkdWYWxpZGF0ZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJNTIx
MzIyNDYxRUNCQ0U4MjAwRjY1NjE1IC8qIFdlYkFzc2VtYmx5RnVuY3Rpb25CYXNlLmggaW4gSGVh
ZGVycyAqLywKIAkJCQkwRjJCREM0ODE1MjI4MDI5MDBDRDg5MTAgLyogREZHVmFsdWVTb3VyY2Uu
aCBpbiBIZWFkZXJzICovLAogCQkJCTBGMDEyMzMzMTk0NEVBMUIwMDg0M0EwQyAvKiBERkdWYWx1
ZVN0cmVuZ3RoLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkUyNTRGNzFBQkRERDIyMDBBN0M2RDIg
LyogREZHVmFyYXJnc0ZvcndhcmRpbmdQaGFzZS5oIGluIEhlYWRlcnMgKi8sCkBAIC0xMDU3MSw2
ICsxMDU3OCw3IEBACiAJCQkJQTUzOThGQUMxQzc1MERBNjAwNjBBOTYzIC8qIEhlYXBQcm9maWxl
ci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBNTRDMkFCMDFDNjU0NEVFMDBBMThENzggLyogSGVh
cFNuYXBzaG90LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE1MzExQzM3MUM3N0NFQ0EwMEU2QjFC
NiAvKiBIZWFwU25hcHNob3RCdWlsZGVyLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTUyMTMyMjQ1
MUVDQkNFODIwMEY2NTYxNSAvKiBXZWJBc3NlbWJseUZ1bmN0aW9uQmFzZS5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQkwRjQ2ODBENDE0QkJEMjQ5MDBCRkUyNzIgLyogSG9zdENhbGxSZXR1cm5WYWx1
ZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlEQzIxNDMwODFDQTMyRTU4MDAwQTg4NjkgLyogSUNT
dGF0cy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxNDdGMzlDRTEwN0VDMzc2MDA0MjdBNDggLyog
SWRlbnRpZmllci5jcHAgaW4gU291cmNlcyAqLywKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS93YXNtL1dhc21CM0lSR2VuZXJhdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvd2FzbS9XYXNtQjNJUkdlbmVyYXRvci5jcHAJKHJldmlzaW9uIDIxNjk0NykKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21CM0lSR2VuZXJhdG9yLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMTA4OSwxMiArMTA4OSwxNSBAQCBhdXRvIEIzSVJHZW5lcmF0b3I6OmFkZENh
bGxJbmRpcmVjdChjb25zCiAgICAgQVNTRVJUKHNpZ25hdHVyZS5hcmd1bWVudENvdW50KCkgPT0g
YXJncy5zaXplKCkpOwogCiAgICAgRXhwcmVzc2lvblR5cGUgY2FsbGFibGVGdW5jdGlvbkJ1ZmZl
cjsKKyAgICBFeHByZXNzaW9uVHlwZSBqc0Z1bmN0aW9uQnVmZmVyOwogICAgIEV4cHJlc3Npb25U
eXBlIGNhbGxhYmxlRnVuY3Rpb25CdWZmZXJTaXplOwogICAgIHsKICAgICAgICAgRXhwcmVzc2lv
blR5cGUgdGFibGUgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PE1lbW9yeVZhbHVlPihtX3By
b2MsIExvYWQsIHBvaW50ZXJUeXBlKCksIG9yaWdpbigpLAogICAgICAgICAgICAgbV9pbnN0YW5j
ZVZhbHVlLCBzYWZlQ2FzdDxpbnQzMl90PihKU1dlYkFzc2VtYmx5SW5zdGFuY2U6Om9mZnNldE9m
VGFibGUoKSkpOwogICAgICAgICBjYWxsYWJsZUZ1bmN0aW9uQnVmZmVyID0gbV9jdXJyZW50Qmxv
Y2stPmFwcGVuZE5ldzxNZW1vcnlWYWx1ZT4obV9wcm9jLCBMb2FkLCBwb2ludGVyVHlwZSgpLCBv
cmlnaW4oKSwKICAgICAgICAgICAgIHRhYmxlLCBzYWZlQ2FzdDxpbnQzMl90PihKU1dlYkFzc2Vt
Ymx5VGFibGU6Om9mZnNldE9mRnVuY3Rpb25zKCkpKTsKKyAgICAgICAganNGdW5jdGlvbkJ1ZmZl
ciA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8TWVtb3J5VmFsdWU+KG1fcHJvYywgTG9hZCwg
cG9pbnRlclR5cGUoKSwgb3JpZ2luKCksCisgICAgICAgICAgICB0YWJsZSwgc2FmZUNhc3Q8aW50
MzJfdD4oSlNXZWJBc3NlbWJseVRhYmxlOjpvZmZzZXRPZkpTRnVuY3Rpb25zKCkpKTsKICAgICAg
ICAgY2FsbGFibGVGdW5jdGlvbkJ1ZmZlclNpemUgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3
PE1lbW9yeVZhbHVlPihtX3Byb2MsIExvYWQsIEludDMyLCBvcmlnaW4oKSwKICAgICAgICAgICAg
IHRhYmxlLCBzYWZlQ2FzdDxpbnQzMl90PihKU1dlYkFzc2VtYmx5VGFibGU6Om9mZnNldE9mU2l6
ZSgpKSk7CiAgICAgfQpAQCAtMTE0MCwxMSArMTE0Myw1NSBAQCBhdXRvIEIzSVJHZW5lcmF0b3I6
OmFkZENhbGxJbmRpcmVjdChjb25zCiAgICAgICAgIH0pOwogICAgIH0KIAorICAgIC8vIERvIGEg
Y29udGV4dCBzd2l0Y2ggaWYgbmVlZGVkLgorICAgIHsKKyAgICAgICAgVmFsdWUqIG9mZnNldCA9
IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8VmFsdWU+KG1fcHJvYywgTXVsLCBvcmlnaW4oKSwK
KyAgICAgICAgICAgIG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8VmFsdWU+KG1fcHJvYywgWkV4
dDMyLCBvcmlnaW4oKSwgY2FsbGVlSW5kZXgpLAorICAgICAgICAgICAgY29uc3RhbnQocG9pbnRl
clR5cGUoKSwgc2l6ZW9mKFdyaXRlQmFycmllcjxKU09iamVjdD4pKSk7CisgICAgICAgIFZhbHVl
KiBqc09iamVjdCA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8TWVtb3J5VmFsdWU+KG1fcHJv
YywgTG9hZCwgcG9pbnRlclR5cGUoKSwgb3JpZ2luKCksCisgICAgICAgICAgICBtX2N1cnJlbnRC
bG9jay0+YXBwZW5kTmV3PFZhbHVlPihtX3Byb2MsIEFkZCwgb3JpZ2luKCksIGpzRnVuY3Rpb25C
dWZmZXIsIG9mZnNldCkpOworCisgICAgICAgIEJhc2ljQmxvY2sqIGNvbnRpbnVhdGlvbiA9IG1f
cHJvYy5hZGRCbG9jaygpOworICAgICAgICBCYXNpY0Jsb2NrKiBkb0NvbnRleHRTd2l0Y2ggPSBt
X3Byb2MuYWRkQmxvY2soKTsKKworICAgICAgICBWYWx1ZSogbmV3Q29udGV4dCA9IG1fY3VycmVu
dEJsb2NrLT5hcHBlbmROZXc8TWVtb3J5VmFsdWU+KG1fcHJvYywgTG9hZCwgcG9pbnRlclR5cGUo
KSwgb3JpZ2luKCksCisgICAgICAgICAgICBqc09iamVjdCwgc2FmZUNhc3Q8aW50MzJfdD4oV2Vi
QXNzZW1ibHlGdW5jdGlvbkJhc2U6Om9mZnNldE9mSW5zdGFuY2UoKSkpOworICAgICAgICBWYWx1
ZSogaXNTYW1lQ29udGV4dCA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8VmFsdWU+KG1fcHJv
YywgRXF1YWwsIG9yaWdpbigpLAorICAgICAgICAgICAgbmV3Q29udGV4dCwgbV9pbnN0YW5jZVZh
bHVlKTsKKyAgICAgICAgbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ld0NvbnRyb2xWYWx1ZShtX3By
b2MsIEIzOjpCcmFuY2gsIG9yaWdpbigpLAorICAgICAgICAgICAgaXNTYW1lQ29udGV4dCwgRnJl
cXVlbnRlZEJsb2NrKGNvbnRpbnVhdGlvbiksIEZyZXF1ZW50ZWRCbG9jayhkb0NvbnRleHRTd2l0
Y2gpKTsKKworICAgICAgICBQYXRjaHBvaW50VmFsdWUqIHBhdGNocG9pbnQgPSBkb0NvbnRleHRT
d2l0Y2gtPmFwcGVuZE5ldzxQYXRjaHBvaW50VmFsdWU+KG1fcHJvYywgQjM6OlZvaWQsIG9yaWdp
bigpKTsKKyAgICAgICAgLy8gV2UgcGVzc2ltaXN0aWNhbGx5IGFzc3VtZSB3ZSdyZSBjYWxsaW5n
IGNvbWV0aGluZyB3aXRoIEJvdW5kc0NoZWNraW5nIG1lbW9yeS4KKyAgICAgICAgcGF0Y2hwb2lu
dC0+Y2xvYmJlcihQaW5uZWRSZWdpc3RlckluZm86OmdldCgpLnRvU2F2ZShNZW1vcnlNb2RlOjpC
b3VuZHNDaGVja2luZykpOworICAgICAgICBwYXRjaHBvaW50LT5jbG9iYmVyKFJlZ2lzdGVyU2V0
OjptYWNyb1NjcmF0Y2hSZWdpc3RlcnMoKSk7CisgICAgICAgIHBhdGNocG9pbnQtPmFwcGVuZChu
ZXdDb250ZXh0LCBWYWx1ZVJlcDo6U29tZVJlZ2lzdGVyKTsKKyAgICAgICAgcGF0Y2hwb2ludC0+
c2V0R2VuZXJhdG9yKFs9XSAoQ0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0IEIzOjpTdGFja21hcEdl
bmVyYXRpb25QYXJhbXMmIHBhcmFtcykgeworICAgICAgICAgICAgQWxsb3dNYWNyb1NjcmF0Y2hS
ZWdpc3RlclVzYWdlIGFsbG93U2NyYXRjaChqaXQpOworICAgICAgICAgICAgR1BSUmVnIG5ld0Nv
bnRleHQgPSBwYXJhbXNbMF0uZ3ByKCk7CisgICAgICAgICAgICBjb25zdCBQaW5uZWRSZWdpc3Rl
ckluZm8mIHBpbm5lZFJlZ3MgPSBQaW5uZWRSZWdpc3RlckluZm86OmdldCgpOworICAgICAgICAg
ICAgY29uc3QgYXV0byYgc2l6ZVJlZ3MgPSBwaW5uZWRSZWdzLnNpemVSZWdpc3RlcnM7CisgICAg
ICAgICAgICBHUFJSZWcgYmFzZU1lbW9yeSA9IHBpbm5lZFJlZ3MuYmFzZU1lbW9yeVBvaW50ZXI7
CisgICAgICAgICAgICBBU1NFUlQobmV3Q29udGV4dCAhPSBiYXNlTWVtb3J5KTsKKworICAgICAg
ICAgICAgaml0LnN0b3JlV2FzbUNvbnRleHQobmV3Q29udGV4dCk7CisgICAgICAgICAgICBqaXQu
bG9hZFB0cihDQ2FsbEhlbHBlcnM6OkFkZHJlc3MobmV3Q29udGV4dCwgQ29udGV4dDo6b2Zmc2V0
T2ZNZW1vcnkoKSksIGJhc2VNZW1vcnkpOyAvLyBKU1dlYkFzc2VtYmx5TWVtb3J5Ki4KKyAgICAg
ICAgICAgIEFTU0VSVChzaXplUmVncy5zaXplKCkgPT0gMSk7CisgICAgICAgICAgICBBU1NFUlQo
c2l6ZVJlZ3NbMF0uc2l6ZVJlZ2lzdGVyICE9IGJhc2VNZW1vcnkpOworICAgICAgICAgICAgQVNT
RVJUKHNpemVSZWdzWzBdLnNpemVSZWdpc3RlciAhPSBuZXdDb250ZXh0KTsKKyAgICAgICAgICAg
IEFTU0VSVCghc2l6ZVJlZ3NbMF0uc2l6ZU9mZnNldCk7CisgICAgICAgICAgICBqaXQubG9hZFB0
cihDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoYmFzZU1lbW9yeSwgSlNXZWJBc3NlbWJseU1lbW9yeTo6
b2Zmc2V0T2ZTaXplKCkpLCBzaXplUmVnc1swXS5zaXplUmVnaXN0ZXIpOyAvLyBNZW1vcnkgc2l6
ZS4KKyAgICAgICAgICAgIGppdC5sb2FkUHRyKENDYWxsSGVscGVyczo6QWRkcmVzcyhiYXNlTWVt
b3J5LCBKU1dlYkFzc2VtYmx5TWVtb3J5OjpvZmZzZXRPZk1lbW9yeSgpKSwgYmFzZU1lbW9yeSk7
IC8vIFdhc21NZW1vcnk6OnZvaWQqLgorICAgICAgICB9KTsKKyAgICAgICAgZG9Db250ZXh0U3dp
dGNoLT5hcHBlbmROZXdDb250cm9sVmFsdWUobV9wcm9jLCBKdW1wLCBvcmlnaW4oKSwgY29udGlu
dWF0aW9uKTsKKworICAgICAgICBtX2N1cnJlbnRCbG9jayA9IGNvbnRpbnVhdGlvbjsKKyAgICB9
CisKICAgICBFeHByZXNzaW9uVHlwZSBjYWxsZWVDb2RlID0gbV9jdXJyZW50QmxvY2stPmFwcGVu
ZE5ldzxNZW1vcnlWYWx1ZT4obV9wcm9jLCBMb2FkLCBwb2ludGVyVHlwZSgpLCBvcmlnaW4oKSwK
ICAgICAgICAgbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxNZW1vcnlWYWx1ZT4obV9wcm9jLCBM
b2FkLCBwb2ludGVyVHlwZSgpLCBvcmlnaW4oKSwgY2FsbGFibGVGdW5jdGlvbiwKICAgICAgICAg
ICAgIHNhZmVDYXN0PGludDMyX3Q+KE9CSkVDVF9PRkZTRVRPRihDYWxsYWJsZUZ1bmN0aW9uLCBj
b2RlKSkpKTsKIAotCiAgICAgVHlwZSByZXR1cm5UeXBlID0gc2lnbmF0dXJlLnJldHVyblR5cGUo
KTsKICAgICByZXN1bHQgPSB3YXNtQ2FsbGluZ0NvbnZlbnRpb24oKS5zZXR1cENhbGwobV9wcm9j
LCBtX2N1cnJlbnRCbG9jaywgb3JpZ2luKCksIGFyZ3MsIHRvQjNUeXBlKHJldHVyblR5cGUpLAog
ICAgICAgICBbPV0gKFBhdGNocG9pbnRWYWx1ZSogcGF0Y2hwb2ludCkgewpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseVRhYmxlLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseVRhYmxlLmgJKHJl
dmlzaW9uIDIxNjk0NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNz
ZW1ibHlUYWJsZS5oCSh3b3JraW5nIGNvcHkpCkBAIC02Miw2ICs2Miw3IEBAIHB1YmxpYzoKIAog
ICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZTaXplKCkgeyByZXR1cm4gT0JKRUNUX09GRlNF
VE9GKEpTV2ViQXNzZW1ibHlUYWJsZSwgbV9zaXplKTsgfQogICAgIHN0YXRpYyBwdHJkaWZmX3Qg
b2Zmc2V0T2ZGdW5jdGlvbnMoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoSlNXZWJBc3NlbWJs
eVRhYmxlLCBtX2Z1bmN0aW9ucyk7IH0KKyAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mSlNG
dW5jdGlvbnMoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoSlNXZWJBc3NlbWJseVRhYmxlLCBt
X2pzRnVuY3Rpb25zKTsgfQogCiAgICAgc3RhdGljIGJvb2wgaXNWYWxpZFNpemUodWludDMyX3Qg
c2l6ZSkKICAgICB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3Nl
bWJseUZ1bmN0aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2Fz
bS9qcy9XZWJBc3NlbWJseUZ1bmN0aW9uLmNwcAkocmV2aXNpb24gMjE2OTQ3KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlGdW5jdGlvbi5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTE4NCwxNCArMTg0LDYgQEAgdm9pZCBXZWJBc3NlbWJseUZ1bmN0aW9uOjp2aXNp
dENoaWxkcmVuKAogICAgIFdlYkFzc2VtYmx5RnVuY3Rpb24qIHRoaXNPYmplY3QgPSBqc0Nhc3Q8
V2ViQXNzZW1ibHlGdW5jdGlvbio+KGNlbGwpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJ
VFModGhpc09iamVjdCwgaW5mbygpKTsKICAgICBCYXNlOjp2aXNpdENoaWxkcmVuKHRoaXNPYmpl
Y3QsIHZpc2l0b3IpOwotICAgIHZpc2l0b3IuYXBwZW5kKHRoaXNPYmplY3QtPm1faW5zdGFuY2Up
OwotfQotCi12b2lkIFdlYkFzc2VtYmx5RnVuY3Rpb246OmZpbmlzaENyZWF0aW9uKFZNJiB2bSwg
TmF0aXZlRXhlY3V0YWJsZSogZXhlY3V0YWJsZSwgdW5zaWduZWQgbGVuZ3RoLCBjb25zdCBTdHJp
bmcmIG5hbWUsIEpTV2ViQXNzZW1ibHlJbnN0YW5jZSogaW5zdGFuY2UpCi17Ci0gICAgQmFzZTo6
ZmluaXNoQ3JlYXRpb24odm0sIGV4ZWN1dGFibGUsIGxlbmd0aCwgbmFtZSk7Ci0gICAgQVNTRVJU
KGluaGVyaXRzKHZtLCBpbmZvKCkpKTsKLSAgICBtX2luc3RhbmNlLnNldCh2bSwgdGhpcywgaW5z
dGFuY2UpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5RnVuY3Rpb24uaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseUZ1bmN0aW9uLmgJKHJldmlzaW9uIDIx
Njk0NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5RnVuY3Rp
b24uaAkod29ya2luZyBjb3B5KQpAQCAtMjcsOCArMjcsOCBAQAogCiAjaWYgRU5BQkxFKFdFQkFT
U0VNQkxZKQogCi0jaW5jbHVkZSAiSlNGdW5jdGlvbi5oIgogI2luY2x1ZGUgIldhc21DYWxsZWUu
aCIKKyNpbmNsdWRlICJXZWJBc3NlbWJseUZ1bmN0aW9uQmFzZS5oIgogI2luY2x1ZGUgPHd0Zi9O
b25jb3B5YWJsZS5oPgogCiBuYW1lc3BhY2UgSlNDIHsKQEAgLTQxLDkgKzQxLDkgQEAgbmFtZXNw
YWNlIEIzIHsKIGNsYXNzIENvbXBpbGF0aW9uOwogfQogCi1jbGFzcyBXZWJBc3NlbWJseUZ1bmN0
aW9uIDogcHVibGljIEpTRnVuY3Rpb24geworY2xhc3MgV2ViQXNzZW1ibHlGdW5jdGlvbiA6IHB1
YmxpYyBXZWJBc3NlbWJseUZ1bmN0aW9uQmFzZSB7CiBwdWJsaWM6Ci0gICAgdHlwZWRlZiBKU0Z1
bmN0aW9uIEJhc2U7CisgICAgdXNpbmcgQmFzZSA9IFdlYkFzc2VtYmx5RnVuY3Rpb25CYXNlOwog
CiAgICAgY29uc3Qgc3RhdGljIHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gQmFzZTo6U3RydWN0
dXJlRmxhZ3M7CiAKQEAgLTUyLDI1ICs1MiwyMCBAQCBwdWJsaWM6CiAgICAgSlNfRVhQT1JUX1BS
SVZBVEUgc3RhdGljIFdlYkFzc2VtYmx5RnVuY3Rpb24qIGNyZWF0ZShWTSYsIEpTR2xvYmFsT2Jq
ZWN0KiwgdW5zaWduZWQsIGNvbnN0IFN0cmluZyYsIEpTV2ViQXNzZW1ibHlJbnN0YW5jZSosIFdh
c206OkNhbGxlZSYganNFbnRyeXBvaW50LCBXYXNtOjpXYXNtRW50cnlwb2ludExvYWRMb2NhdGlv
biwgV2FzbTo6U2lnbmF0dXJlSW5kZXgpOwogICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0ZVN0
cnVjdHVyZShWTSYsIEpTR2xvYmFsT2JqZWN0KiwgSlNWYWx1ZSk7CiAKLSAgICBKU1dlYkFzc2Vt
Ymx5SW5zdGFuY2UqIGluc3RhbmNlKCkgY29uc3QgeyByZXR1cm4gbV9pbnN0YW5jZS5nZXQoKTsg
fQogICAgIFdhc206OlNpZ25hdHVyZUluZGV4IHNpZ25hdHVyZUluZGV4KCkgY29uc3QgeyByZXR1
cm4gbV93YXNtRnVuY3Rpb24uc2lnbmF0dXJlSW5kZXg7IH0KICAgICBXYXNtOjpXYXNtRW50cnlw
b2ludExvYWRMb2NhdGlvbiB3YXNtRW50cnlwb2ludExvYWRMb2NhdGlvbigpIGNvbnN0IHsgcmV0
dXJuIG1fd2FzbUZ1bmN0aW9uLmNvZGU7IH0KICAgICBXYXNtOjpDYWxsYWJsZUZ1bmN0aW9uIGNh
bGxhYmxlRnVuY3Rpb24oKSBjb25zdCB7IHJldHVybiBtX3dhc21GdW5jdGlvbjsgfQogCiAgICAg
dm9pZCoganNFbnRyeXBvaW50KCkgeyByZXR1cm4gbV9qc0VudHJ5cG9pbnQ7IH0KIAotICAgIHN0
YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZJbnN0YW5jZSgpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRP
RihXZWJBc3NlbWJseUZ1bmN0aW9uLCBtX2luc3RhbmNlKTsgfQogICAgIHN0YXRpYyBwdHJkaWZm
X3Qgb2Zmc2V0T2ZXYXNtRW50cnlwb2ludExvYWRMb2NhdGlvbigpIHsgcmV0dXJuIE9CSkVDVF9P
RkZTRVRPRihXZWJBc3NlbWJseUZ1bmN0aW9uLCBtX3dhc21GdW5jdGlvbikgKyBXYXNtOjpDYWxs
YWJsZUZ1bmN0aW9uOjpvZmZzZXRPZldhc21FbnRyeXBvaW50TG9hZExvY2F0aW9uKCk7IH0KIAog
cHJvdGVjdGVkOgogICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZp
c2l0b3ImKTsKIAotICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oVk0mLCBOYXRpdmVFeGVjdXRhYmxl
KiwgdW5zaWduZWQgbGVuZ3RoLCBjb25zdCBTdHJpbmcmIG5hbWUsIEpTV2ViQXNzZW1ibHlJbnN0
YW5jZSopOwotCiBwcml2YXRlOgogICAgIFdlYkFzc2VtYmx5RnVuY3Rpb24oVk0mLCBKU0dsb2Jh
bE9iamVjdCosIFN0cnVjdHVyZSosIFdhc206OkNhbGxlZSYganNFbnRyeXBvaW50LCBXYXNtOjpX
YXNtRW50cnlwb2ludExvYWRMb2NhdGlvbiwgV2FzbTo6U2lnbmF0dXJlSW5kZXgpOwogCi0gICAg
V3JpdGVCYXJyaWVyPEpTV2ViQXNzZW1ibHlJbnN0YW5jZT4gbV9pbnN0YW5jZTsKICAgICAvLyBJ
dCdzIHNhZmUgdG8ganVzdCBob2xkIHRoZSByYXcgQ2FsbGFibGVGdW5jdGlvbi9qc0VudHJ5cG9p
bnQgYmVjYXVzZSB3ZSBoYXZlIGEgcmVmZXJlbmNlCiAgICAgLy8gdG8gb3VyIEluc3RhbmNlLCB3
aGljaCBwb2ludHMgdG8gdGhlIE1vZHVsZSB0aGF0IGV4cG9ydGVkIHVzLCB3aGljaAogICAgIC8v
IGVuc3VyZXMgdGhhdCB0aGUgYWN0dWFsIFNpZ25hdHVyZS9jb2RlIGRvZXNuJ3QgZ2V0IGRlYWxs
b2NhdGVkLgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlG
dW5jdGlvbkJhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNt
L2pzL1dlYkFzc2VtYmx5RnVuY3Rpb25CYXNlLmNwcAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseUZ1bmN0aW9uQmFzZS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTAsMCArMSw1OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJXZWJBc3NlbWJs
eUZ1bmN0aW9uQmFzZS5oIgorCisjaWYgRU5BQkxFKFdFQkFTU0VNQkxZKQorCisjaW5jbHVkZSAi
SlNXZWJBc3NlbWJseUluc3RhbmNlLmgiCisKK25hbWVzcGFjZSBKU0MgeworCitjb25zdCBDbGFz
c0luZm8gV2ViQXNzZW1ibHlGdW5jdGlvbkJhc2U6OnNfaW5mbyA9IHsgIldlYkFzc2VtYmx5RnVu
Y3Rpb25CYXNlIiwgJkJhc2U6OnNfaW5mbywgbnVsbHB0ciwgQ1JFQVRFX01FVEhPRF9UQUJMRShX
ZWJBc3NlbWJseUZ1bmN0aW9uQmFzZSkgfTsKKworV2ViQXNzZW1ibHlGdW5jdGlvbkJhc2U6Oldl
YkFzc2VtYmx5RnVuY3Rpb25CYXNlKFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVj
dCwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCisgICAgOiBCYXNlKHZtLCBnbG9iYWxPYmplY3QsIHN0
cnVjdHVyZSkKK3sgfQorCit2b2lkIFdlYkFzc2VtYmx5RnVuY3Rpb25CYXNlOjp2aXNpdENoaWxk
cmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit7CisgICAgV2ViQXNzZW1i
bHlGdW5jdGlvbkJhc2UqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8V2ViQXNzZW1ibHlGdW5jdGlvbkJh
c2UqPihjZWxsKTsKKyAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGlu
Zm8oKSk7CisgICAgQmFzZTo6dmlzaXRDaGlsZHJlbih0aGlzT2JqZWN0LCB2aXNpdG9yKTsKKyAg
ICB2aXNpdG9yLmFwcGVuZCh0aGlzT2JqZWN0LT5tX2luc3RhbmNlKTsKK30KKwordm9pZCBXZWJB
c3NlbWJseUZ1bmN0aW9uQmFzZTo6ZmluaXNoQ3JlYXRpb24oVk0mIHZtLCBOYXRpdmVFeGVjdXRh
YmxlKiBleGVjdXRhYmxlLCB1bnNpZ25lZCBsZW5ndGgsIGNvbnN0IFN0cmluZyYgbmFtZSwgSlNX
ZWJBc3NlbWJseUluc3RhbmNlKiBpbnN0YW5jZSkKK3sKKyAgICBCYXNlOjpmaW5pc2hDcmVhdGlv
bih2bSwgZXhlY3V0YWJsZSwgbGVuZ3RoLCBuYW1lKTsKKyAgICBBU1NFUlQoaW5oZXJpdHModm0s
IGluZm8oKSkpOworICAgIG1faW5zdGFuY2Uuc2V0KHZtLCB0aGlzLCBpbnN0YW5jZSk7Cit9CisK
K30gLy8gbmFtZXNwYWNlIEpTQworCisjZW5kaWYgLy8gRU5BQkxFKFdFQkFTU0VNQkxZKQpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlGdW5jdGlvbkJhc2Uu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJs
eUZ1bmN0aW9uQmFzZS5oCShub25leGlzdGVudCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93
YXNtL2pzL1dlYkFzc2VtYmx5RnVuY3Rpb25CYXNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCAr
MSw1NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNw
cmFnbWEgb25jZQorCisjaWYgRU5BQkxFKFdFQkFTU0VNQkxZKQorCisjaW5jbHVkZSAiSlNGdW5j
dGlvbi5oIgorCituYW1lc3BhY2UgSlNDIHsKKworY2xhc3MgSlNHbG9iYWxPYmplY3Q7CitjbGFz
cyBKU1dlYkFzc2VtYmx5SW5zdGFuY2U7CisKK2NsYXNzIFdlYkFzc2VtYmx5RnVuY3Rpb25CYXNl
IDogcHVibGljIEpTRnVuY3Rpb24geworcHVibGljOgorICAgIHVzaW5nIEJhc2UgPSBKU0Z1bmN0
aW9uOworCisgICAgY29uc3Qgc3RhdGljIHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gQmFzZTo6
U3RydWN0dXJlRmxhZ3M7CisKKyAgICBERUNMQVJFX0lORk87CisKKyAgICBKU1dlYkFzc2VtYmx5
SW5zdGFuY2UqIGluc3RhbmNlKCkgY29uc3QgeyByZXR1cm4gbV9pbnN0YW5jZS5nZXQoKTsgfQor
ICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZJbnN0YW5jZSgpIHsgcmV0dXJuIE9CSkVDVF9P
RkZTRVRPRihXZWJBc3NlbWJseUZ1bmN0aW9uQmFzZSwgbV9pbnN0YW5jZSk7IH0KKworcHJvdGVj
dGVkOgorICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3Im
KTsKKyAgICB2b2lkIGZpbmlzaENyZWF0aW9uKFZNJiwgTmF0aXZlRXhlY3V0YWJsZSosIHVuc2ln
bmVkIGxlbmd0aCwgY29uc3QgU3RyaW5nJiBuYW1lLCBKU1dlYkFzc2VtYmx5SW5zdGFuY2UqKTsK
KyAgICBXZWJBc3NlbWJseUZ1bmN0aW9uQmFzZShWTSYsIEpTR2xvYmFsT2JqZWN0KiwgU3RydWN0
dXJlKik7CisgICAgV3JpdGVCYXJyaWVyPEpTV2ViQXNzZW1ibHlJbnN0YW5jZT4gbV9pbnN0YW5j
ZTsKK307CisKK30gLy8gbmFtZXNwYWNlIEpTQworCisjZW5kaWYgLy8gRU5BQkxFKFdFQkFTU0VN
QkxZKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlNb2R1
bGVSZWNvcmQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pz
L1dlYkFzc2VtYmx5TW9kdWxlUmVjb3JkLmNwcAkocmV2aXNpb24gMjE2OTQ3KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlNb2R1bGVSZWNvcmQuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xMTcsNyArMTE3LDcgQEAgdm9pZCBXZWJBc3NlbWJseU1vZHVsZVJlY29y
ZDo6bGluayhFeGVjUwogICAgICAgICAgICAgICAgICAgICBleHBvcnRlZFZhbHVlID0gZnVuY3Rp
b25JbXBvcnQ7CiAgICAgICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgIFdh
c206OlNpZ25hdHVyZUluZGV4IHNpZ25hdHVyZUluZGV4ID0gbW9kdWxlLT5zaWduYXR1cmVJbmRl
eEZyb21GdW5jdGlvbkluZGV4U3BhY2UoZnVuY3Rpb25JbmRleCk7Ci0gICAgICAgICAgICAgICAg
ICAgIGV4cG9ydGVkVmFsdWUgPSBXZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlvbjo6Y3JlYXRlKHZt
LCBnbG9iYWxPYmplY3QsIGZ1bmN0aW9uSW1wb3J0LCBmdW5jdGlvbkluZGV4LCBjb2RlQmxvY2ss
IHNpZ25hdHVyZUluZGV4KTsKKyAgICAgICAgICAgICAgICAgICAgZXhwb3J0ZWRWYWx1ZSA9IFdl
YkFzc2VtYmx5V3JhcHBlckZ1bmN0aW9uOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgZnVuY3Rp
b25JbXBvcnQsIGZ1bmN0aW9uSW5kZXgsIGluc3RhbmNlLCBzaWduYXR1cmVJbmRleCk7CiAgICAg
ICAgICAgICAgICAgfQogICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAvLyAg
IGlpaS4gT3RoZXJ3aXNlOgpAQCAtMjY0LDcgKzI2NCw3IEBAIEpTVmFsdWUgV2ViQXNzZW1ibHlN
b2R1bGVSZWNvcmQ6OmV2YWx1YXQKICAgICAgICAgICAgICAgICAgICAgfQogCiAgICAgICAgICAg
ICAgICAgICAgIHRhYmxlLT5zZXRGdW5jdGlvbih2bSwgdGFibGVJbmRleCwKLSAgICAgICAgICAg
ICAgICAgICAgICAgIFdlYkFzc2VtYmx5V3JhcHBlckZ1bmN0aW9uOjpjcmVhdGUodm0sIG1faW5z
dGFuY2UtPmdsb2JhbE9iamVjdCgpLCBmdW5jdGlvbkltcG9ydCwgZnVuY3Rpb25JbmRleCwgY29k
ZUJsb2NrLCBzaWduYXR1cmVJbmRleCkpOworICAgICAgICAgICAgICAgICAgICAgICAgV2ViQXNz
ZW1ibHlXcmFwcGVyRnVuY3Rpb246OmNyZWF0ZSh2bSwgbV9pbnN0YW5jZS0+Z2xvYmFsT2JqZWN0
KCksIGZ1bmN0aW9uSW1wb3J0LCBmdW5jdGlvbkluZGV4LCBtX2luc3RhbmNlLmdldCgpLCBzaWdu
YXR1cmVJbmRleCkpOwogICAgICAgICAgICAgICAgICAgICArK3RhYmxlSW5kZXg7CiAgICAgICAg
ICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgICAgIH0KSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5V3JhcHBlckZ1bmN0aW9uLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseVdyYXBw
ZXJGdW5jdGlvbi5jcHAJKHJldmlzaW9uIDIxNjk0NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS93YXNtL2pzL1dlYkFzc2VtYmx5V3JhcHBlckZ1bmN0aW9uLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMzEsNiArMzEsNyBAQAogI2luY2x1ZGUgIkVycm9yLmgiCiAjaW5jbHVkZSAiRnVuY3Rpb25Q
cm90b3R5cGUuaCIKICNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCisjaW5jbHVkZSAiSlNXZWJBc3Nl
bWJseUluc3RhbmNlLmgiCiAKIG5hbWVzcGFjZSBKU0MgewogCkBAIC01NywyMyArNTgsMjIgQEAg
V2ViQXNzZW1ibHlXcmFwcGVyRnVuY3Rpb246OldlYkFzc2VtYmx5VwogICAgICwgbV93YXNtRnVu
Y3Rpb24od2FzbUZ1bmN0aW9uKQogeyB9CiAKLVdlYkFzc2VtYmx5V3JhcHBlckZ1bmN0aW9uKiBX
ZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlvbjo6Y3JlYXRlKFZNJiB2bSwgSlNHbG9iYWxPYmplY3Qq
IGdsb2JhbE9iamVjdCwgSlNPYmplY3QqIGZ1bmN0aW9uLCB1bnNpZ25lZCBpbXBvcnRJbmRleCwg
SlNXZWJBc3NlbWJseUNvZGVCbG9jayogY29kZUJsb2NrLCBXYXNtOjpTaWduYXR1cmVJbmRleCBz
aWduYXR1cmVJbmRleCkKK1dlYkFzc2VtYmx5V3JhcHBlckZ1bmN0aW9uKiBXZWJBc3NlbWJseVdy
YXBwZXJGdW5jdGlvbjo6Y3JlYXRlKFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVj
dCwgSlNPYmplY3QqIGZ1bmN0aW9uLCB1bnNpZ25lZCBpbXBvcnRJbmRleCwgSlNXZWJBc3NlbWJs
eUluc3RhbmNlKiBpbnN0YW5jZSwgV2FzbTo6U2lnbmF0dXJlSW5kZXggc2lnbmF0dXJlSW5kZXgp
CiB7CiAgICAgQVNTRVJUX1dJVEhfTUVTU0FHRSghZnVuY3Rpb24tPmluaGVyaXRzKHZtLCBXZWJB
c3NlbWJseVdyYXBwZXJGdW5jdGlvbjo6aW5mbygpKSwgIldlIHNob3VsZCBuZXZlciBkb3VibGUg
d3JhcCBhIHdyYXBwZXIgZnVuY3Rpb24uIik7CiAgICAgU3RyaW5nIG5hbWUgPSAiIjsKICAgICBO
YXRpdmVFeGVjdXRhYmxlKiBleGVjdXRhYmxlID0gdm0uZ2V0SG9zdEZ1bmN0aW9uKGNhbGxXZWJB
c3NlbWJseVdyYXBwZXJGdW5jdGlvbiwgTm9JbnRyaW5zaWMsIGNhbGxIb3N0RnVuY3Rpb25Bc0Nv
bnN0cnVjdG9yLCBudWxscHRyLCBuYW1lKTsKLSAgICBXZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlv
biogcmVzdWx0ID0gbmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8V2ViQXNzZW1ibHlXcmFwcGVy
RnVuY3Rpb24+KHZtLmhlYXApKSBXZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlvbih2bSwgZ2xvYmFs
T2JqZWN0LCBnbG9iYWxPYmplY3QtPndlYkFzc2VtYmx5V3JhcHBlckZ1bmN0aW9uU3RydWN0dXJl
KCksIFdhc206OkNhbGxhYmxlRnVuY3Rpb24oc2lnbmF0dXJlSW5kZXgsIGNvZGVCbG9jay0+d2Fz
bVRvSnNDYWxsU3R1YkZvckltcG9ydChpbXBvcnRJbmRleCkpKTsKKyAgICBXZWJBc3NlbWJseVdy
YXBwZXJGdW5jdGlvbiogcmVzdWx0ID0gbmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8V2ViQXNz
ZW1ibHlXcmFwcGVyRnVuY3Rpb24+KHZtLmhlYXApKSBXZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlv
bih2bSwgZ2xvYmFsT2JqZWN0LCBnbG9iYWxPYmplY3QtPndlYkFzc2VtYmx5V3JhcHBlckZ1bmN0
aW9uU3RydWN0dXJlKCksIFdhc206OkNhbGxhYmxlRnVuY3Rpb24oc2lnbmF0dXJlSW5kZXgsIGlu
c3RhbmNlLT5jb2RlQmxvY2soKS0+d2FzbVRvSnNDYWxsU3R1YkZvckltcG9ydChpbXBvcnRJbmRl
eCkpKTsKICAgICBjb25zdCBXYXNtOjpTaWduYXR1cmUmIHNpZ25hdHVyZSA9IFdhc206OlNpZ25h
dHVyZUluZm9ybWF0aW9uOjpnZXQoc2lnbmF0dXJlSW5kZXgpOwotICAgIHJlc3VsdC0+ZmluaXNo
Q3JlYXRpb24odm0sIGV4ZWN1dGFibGUsIHNpZ25hdHVyZS5hcmd1bWVudENvdW50KCksIG5hbWUs
IGZ1bmN0aW9uLCBjb2RlQmxvY2spOworICAgIHJlc3VsdC0+ZmluaXNoQ3JlYXRpb24odm0sIGV4
ZWN1dGFibGUsIHNpZ25hdHVyZS5hcmd1bWVudENvdW50KCksIG5hbWUsIGZ1bmN0aW9uLCBpbnN0
YW5jZSk7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotdm9pZCBXZWJBc3NlbWJseVdyYXBwZXJG
dW5jdGlvbjo6ZmluaXNoQ3JlYXRpb24oVk0mIHZtLCBOYXRpdmVFeGVjdXRhYmxlKiBleGVjdXRh
YmxlLCB1bnNpZ25lZCBsZW5ndGgsIGNvbnN0IFN0cmluZyYgbmFtZSwgSlNPYmplY3QqIGZ1bmN0
aW9uLCBKU1dlYkFzc2VtYmx5Q29kZUJsb2NrKiBjb2RlQmxvY2spCit2b2lkIFdlYkFzc2VtYmx5
V3JhcHBlckZ1bmN0aW9uOjpmaW5pc2hDcmVhdGlvbihWTSYgdm0sIE5hdGl2ZUV4ZWN1dGFibGUq
IGV4ZWN1dGFibGUsIHVuc2lnbmVkIGxlbmd0aCwgY29uc3QgU3RyaW5nJiBuYW1lLCBKU09iamVj
dCogZnVuY3Rpb24sIEpTV2ViQXNzZW1ibHlJbnN0YW5jZSogaW5zdGFuY2UpCiB7Ci0gICAgQmFz
ZTo6ZmluaXNoQ3JlYXRpb24odm0sIGV4ZWN1dGFibGUsIGxlbmd0aCwgbmFtZSk7CisgICAgQmFz
ZTo6ZmluaXNoQ3JlYXRpb24odm0sIGV4ZWN1dGFibGUsIGxlbmd0aCwgbmFtZSwgaW5zdGFuY2Up
OwogICAgIFJFTEVBU0VfQVNTRVJUKEpTVmFsdWUoZnVuY3Rpb24pLmlzRnVuY3Rpb24oKSk7CiAg
ICAgbV9mdW5jdGlvbi5zZXQodm0sIHRoaXMsIGZ1bmN0aW9uKTsKLSAgICBtX2NvZGVCbG9jay5z
ZXQodm0sIHRoaXMsIGNvZGVCbG9jayk7CiB9CiAKIFN0cnVjdHVyZSogV2ViQXNzZW1ibHlXcmFw
cGVyRnVuY3Rpb246OmNyZWF0ZVN0cnVjdHVyZShWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9i
YWxPYmplY3QsIEpTVmFsdWUgcHJvdG90eXBlKQpAQCAtODgsNyArODgsNiBAQCB2b2lkIFdlYkFz
c2VtYmx5V3JhcHBlckZ1bmN0aW9uOjp2aXNpdENoCiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhF
UklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwogICAgIEJhc2U6OnZpc2l0Q2hpbGRyZW4odGhpc09i
amVjdCwgdmlzaXRvcik7CiAKLSAgICB2aXNpdG9yLmFwcGVuZCh0aGlzT2JqZWN0LT5tX2NvZGVC
bG9jayk7CiAgICAgdmlzaXRvci5hcHBlbmQodGhpc09iamVjdC0+bV9mdW5jdGlvbik7CiB9CiAK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5V3JhcHBlckZ1
bmN0aW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2Vi
QXNzZW1ibHlXcmFwcGVyRnVuY3Rpb24uaAkocmV2aXNpb24gMjE2OTQ3KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlXcmFwcGVyRnVuY3Rpb24uaAkod29ya2lu
ZyBjb3B5KQpAQCAtMjcsMjAgKzI3LDIwIEBACiAKICNpZiBFTkFCTEUoV0VCQVNTRU1CTFkpCiAK
LSNpbmNsdWRlICJKU0Z1bmN0aW9uLmgiCiAjaW5jbHVkZSAiSlNXZWJBc3NlbWJseUNvZGVCbG9j
ay5oIgorI2luY2x1ZGUgIldlYkFzc2VtYmx5RnVuY3Rpb25CYXNlLmgiCiAKIG5hbWVzcGFjZSBK
U0MgewogCi1jbGFzcyBXZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlvbiA6IHB1YmxpYyBKU0Z1bmN0
aW9uIHsKK2NsYXNzIFdlYkFzc2VtYmx5V3JhcHBlckZ1bmN0aW9uIDogcHVibGljIFdlYkFzc2Vt
Ymx5RnVuY3Rpb25CYXNlIHsKIHB1YmxpYzoKLSAgICB0eXBlZGVmIEpTRnVuY3Rpb24gQmFzZTsK
KyAgICB1c2luZyBCYXNlID0gV2ViQXNzZW1ibHlGdW5jdGlvbkJhc2U7CiAKICAgICBjb25zdCBz
dGF0aWMgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBCYXNlOjpTdHJ1Y3R1cmVGbGFnczsKIAog
ICAgIERFQ0xBUkVfSU5GTzsKIAotICAgIHN0YXRpYyBXZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlv
biogY3JlYXRlKFZNJiwgSlNHbG9iYWxPYmplY3QqLCBKU09iamVjdCosIHVuc2lnbmVkIGltcG9y
dEluZGV4LCBKU1dlYkFzc2VtYmx5Q29kZUJsb2NrKiwgV2FzbTo6U2lnbmF0dXJlSW5kZXgpOwor
ICAgIHN0YXRpYyBXZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlvbiogY3JlYXRlKFZNJiwgSlNHbG9i
YWxPYmplY3QqLCBKU09iamVjdCosIHVuc2lnbmVkIGltcG9ydEluZGV4LCBKU1dlYkFzc2VtYmx5
SW5zdGFuY2UqLCBXYXNtOjpTaWduYXR1cmVJbmRleCk7CiAgICAgc3RhdGljIFN0cnVjdHVyZSog
Y3JlYXRlU3RydWN0dXJlKFZNJiwgSlNHbG9iYWxPYmplY3QqLCBKU1ZhbHVlKTsKIAogICAgIFdh
c206OlNpZ25hdHVyZUluZGV4IHNpZ25hdHVyZUluZGV4KCkgY29uc3QgeyByZXR1cm4gbV93YXNt
RnVuY3Rpb24uc2lnbmF0dXJlSW5kZXg7IH0KQEAgLTUxLDE4ICs1MSwxNSBAQCBwdWJsaWM6CiBw
cm90ZWN0ZWQ6CiAgICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90Vmlz
aXRvciYpOwogCi0gICAgdm9pZCBmaW5pc2hDcmVhdGlvbihWTSYsIE5hdGl2ZUV4ZWN1dGFibGUq
LCB1bnNpZ25lZCBsZW5ndGgsIGNvbnN0IFN0cmluZyYgbmFtZSwgSlNPYmplY3QqLCBKU1dlYkFz
c2VtYmx5Q29kZUJsb2NrKik7CisgICAgdm9pZCBmaW5pc2hDcmVhdGlvbihWTSYsIE5hdGl2ZUV4
ZWN1dGFibGUqLCB1bnNpZ25lZCBsZW5ndGgsIGNvbnN0IFN0cmluZyYgbmFtZSwgSlNPYmplY3Qq
LCBKU1dlYkFzc2VtYmx5SW5zdGFuY2UqKTsKIAogcHJpdmF0ZToKICAgICBXZWJBc3NlbWJseVdy
YXBwZXJGdW5jdGlvbihWTSYsIEpTR2xvYmFsT2JqZWN0KiwgU3RydWN0dXJlKiwgV2FzbTo6Q2Fs
bGFibGVGdW5jdGlvbik7CiAKLSAgICAvLyBXZSBrZWVwIGEgcmVmZXJlbmNlIHRvIG91ciBDb2Rl
QmxvY2sgYmVjYXVzZSB3ZSBoYXZlIGEgcmF3Ci0gICAgLy8gcG9pbnRlciB0byBhc20gY29kZSB0
aGF0IGl0IG93bnMuCi0gICAgV3JpdGVCYXJyaWVyPEpTV2ViQXNzZW1ibHlDb2RlQmxvY2s+IG1f
Y29kZUJsb2NrOwogICAgIFdyaXRlQmFycmllcjxKU09iamVjdD4gbV9mdW5jdGlvbjsKICAgICAv
LyBJdCdzIHNhZmUgdG8ganVzdCBob2xkIHRoZSByYXcgQ2FsbGFibGVGdW5jdGlvbiBiZWNhdXNl
IHdlIGhhdmUgYSByZWZlcmVuY2UKLSAgICAvLyB0byBvdXIgQ29kZUJsb2NrLCB3aGljaCBwb2lu
dHMgdG8gdGhlIE1vZHVsZSB0aGF0IGV4cG9ydGVkIHVzLCB3aGljaAotICAgIC8vIGVuc3VyZXMg
dGhhdCB0aGUgYWN0dWFsIFNpZ25hdHVyZS9jb2RlIGRvZXNuJ3QgZ2V0IGRlYWxsb2NhdGVkLgor
ICAgIC8vIHRvIG91ciBJbnN0YW5jZSwgd2hpY2ggcG9pbnRzIHRvIHRoZSBDb2RlQmxvY2ssIHdo
aWNoIHBvaW50cyB0byB0aGUgTW9kdWxlCisgICAgLy8gdGhhdCBleHBvcnRlZCB1cywgd2hpY2gg
ZW5zdXJlcyB0aGF0IHRoZSBhY3R1YWwgU2lnbmF0dXJlL2NvZGUgZG9lc24ndCBnZXQgZGVhbGxv
Y2F0ZWQuCiAgICAgV2FzbTo6Q2FsbGFibGVGdW5jdGlvbiBtX3dhc21GdW5jdGlvbjsKIH07CiAK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>310332</attachid>
            <date>2017-05-16 17:49:24 -0700</date>
            <delta_ts>2017-05-16 18:00:58 -0700</delta_ts>
            <desc>patch</desc>
            <filename>c-backup.diff</filename>
            <type>text/plain</type>
            <size>39925</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IEpTVGVzdHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEpTVGVzdHMvQ2hhbmdlTG9n
CShyZXZpc2lvbiAyMTY5NjApCisrKyBKU1Rlc3RzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpA
QCAtMSwzICsxLDIxIEBACisyMDE3LTA1LTE2ICBTYWFtIEJhcmF0aSAgPHNiYXJhdGlAYXBwbGUu
Y29tPgorCisgICAgICAgIFdlIGRvbid0IGRvIGNvbnRleHQgc3dpdGNoZXMgZm9yIFdhc20tPldh
c20gY2FsbCBpbmRpcmVjdAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MTcyMTg4CisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS8zMjIzMTgyOD4KKworICAg
ICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIHdhc20vZnVuY3Rp
b24tdGVzdHMvY29udGV4dC1zd2l0Y2guanM6IEFkZGVkLgorICAgICAgICAoaW1wb3J0LkJ1aWxk
ZXIuZnJvbS5zdHJpbmdfYXBwZWFyZWRfaGVyZS5pbXBvcnQuYXMuYXNzZXJ0LmZyb20uc3RyaW5n
X2FwcGVhcmVkX2hlcmUubWFrZUluc3RhbmNlKToKKyAgICAgICAgKGltcG9ydC5CdWlsZGVyLmZy
b20uc3RyaW5nX2FwcGVhcmVkX2hlcmUuaW1wb3J0LmFzLmFzc2VydC5mcm9tLnN0cmluZ19hcHBl
YXJlZF9oZXJlLm1ha2VJbnN0YW5jZTIpOgorICAgICAgICAoaW1wb3J0LkJ1aWxkZXIuZnJvbS5z
dHJpbmdfYXBwZWFyZWRfaGVyZS5pbXBvcnQuYXMuYXNzZXJ0LmZyb20uc3RyaW5nX2FwcGVhcmVk
X2hlcmUuY29uc3QuaTIubWFrZUluc3RhbmNlMik6CisgICAgICAgIChtYWtlSW5zdGFuY2UpOgor
ICAgICAgICAobWFrZUluc3RhbmNlMik6CisgICAgICAgIChhc3NlcnQuZXEubWFrZUluc3RhbmNl
KToKKyAgICAgICAgKGFzc2VydC5lcS5tYWtlSW5zdGFuY2UyKToKKyAgICAgICAgKGFzc2VydC5l
cSk6CisKIDIwMTctMDUtMTYgIFl1c3VrZSBTdXp1a2kgIDx1dGF0YW5lLnRlYUBnbWFpbC5jb20+
CiAKICAgICAgICAgW0RGR10gQ29uc3RhbnQgRm9sZGluZyBQaGFzZSBzaG91bGQgY29udmVydCBN
YWtlUm9wZSgiIiwgU3RyaW5nKSA9PiBJZGVudGl0eShTdHJpbmcpCkluZGV4OiBKU1Rlc3RzL3dh
c20vZnVuY3Rpb24tdGVzdHMvY29udGV4dC1zd2l0Y2guanMKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSlNUZXN0
cy93YXNtL2Z1bmN0aW9uLXRlc3RzL2NvbnRleHQtc3dpdGNoLmpzCShub25leGlzdGVudCkKKysr
IEpTVGVzdHMvd2FzbS9mdW5jdGlvbi10ZXN0cy9jb250ZXh0LXN3aXRjaC5qcwkod29ya2luZyBj
b3B5KQpAQCAtMCwwICsxLDI3NyBAQAoraW1wb3J0IEJ1aWxkZXIgZnJvbSAnLi4vQnVpbGRlci5q
cycKK2ltcG9ydCAqIGFzIGFzc2VydCBmcm9tICcuLi9hc3NlcnQuanMnCisKK3sKKyAgICBmdW5j
dGlvbiBtYWtlSW5zdGFuY2UoKSB7CisgICAgICAgIGNvbnN0IHRhYmxlRGVzY3JpcHRpb24gPSB7
aW5pdGlhbDogMSwgZWxlbWVudDogImFueWZ1bmMifTsKKyAgICAgICAgY29uc3QgYnVpbGRlciA9
IG5ldyBCdWlsZGVyKCkKKyAgICAgICAgICAgIC5UeXBlKCkKKyAgICAgICAgICAgICAgICAuRnVu
YyhbXSwgInZvaWQiKQorICAgICAgICAgICAgLkVuZCgpCisgICAgICAgICAgICAuSW1wb3J0KCkK
KyAgICAgICAgICAgICAgICAuVGFibGUoImltcCIsICJ0YWJsZSIsIHRhYmxlRGVzY3JpcHRpb24p
CisgICAgICAgICAgICAuRW5kKCkKKyAgICAgICAgICAgIC5GdW5jdGlvbigpLkVuZCgpCisgICAg
ICAgICAgICAuRXhwb3J0KCkKKyAgICAgICAgICAgICAgICAuRnVuY3Rpb24oImZvbyIpCisgICAg
ICAgICAgICAuRW5kKCkKKyAgICAgICAgICAgIC5Db2RlKCkKKyAgICAgICAgICAgICAgICAuRnVu
Y3Rpb24oImZvbyIsIHtwYXJhbXM6WyJpMzIiXSwgcmV0OiJ2b2lkIn0pCisgICAgICAgICAgICAg
ICAgICAgIC5HZXRMb2NhbCgwKSAvLyBwYXJhbWV0ZXIgdG8gY2FsbAorICAgICAgICAgICAgICAg
ICAgICAuR2V0TG9jYWwoMCkgLy8gY2FsbCBpbmRleAorICAgICAgICAgICAgICAgICAgICAuQ2Fs
bEluZGlyZWN0KDAsIDApIC8vIGNhbGxpbmcgZnVuY3Rpb24gb2YgdHlwZSBbXSA9PiAndm9pZCcK
KyAgICAgICAgICAgICAgICAgICAgLlJldHVybigpCisgICAgICAgICAgICAgICAgLkVuZCgpCisg
ICAgICAgICAgICAuRW5kKCk7CisKKworICAgICAgICBjb25zdCBiaW4gPSBidWlsZGVyLldlYkFz
c2VtYmx5KCkuZ2V0KCk7CisgICAgICAgIGNvbnN0IG1vZHVsZSA9IG5ldyBXZWJBc3NlbWJseS5N
b2R1bGUoYmluKTsKKyAgICAgICAgY29uc3QgdGFibGUgPSBuZXcgV2ViQXNzZW1ibHkuVGFibGUo
dGFibGVEZXNjcmlwdGlvbik7CisgICAgICAgIHJldHVybiB7aW5zdGFuY2U6IG5ldyBXZWJBc3Nl
bWJseS5JbnN0YW5jZShtb2R1bGUsIHtpbXA6IHt0YWJsZX19KSwgdGFibGV9OworICAgIH0KKwor
ICAgIGZ1bmN0aW9uIG1ha2VJbnN0YW5jZTIoZikgeworICAgICAgICBjb25zdCBidWlsZGVyID0g
bmV3IEJ1aWxkZXIoKQorICAgICAgICAgICAgLlR5cGUoKQorICAgICAgICAgICAgLkVuZCgpCisg
ICAgICAgICAgICAuSW1wb3J0KCkKKyAgICAgICAgICAgICAgICAuRnVuY3Rpb24oImltcCIsICJm
Iiwge3BhcmFtczpbXSwgcmV0OiJ2b2lkIn0pCisgICAgICAgICAgICAuRW5kKCkKKyAgICAgICAg
ICAgIC5GdW5jdGlvbigpLkVuZCgpCisgICAgICAgICAgICAuRXhwb3J0KCkKKyAgICAgICAgICAg
ICAgICAuRnVuY3Rpb24oImZvbyIpCisgICAgICAgICAgICAuRW5kKCkKKyAgICAgICAgICAgIC5D
b2RlKCkKKyAgICAgICAgICAgICAgICAuRnVuY3Rpb24oImZvbyIsIHtwYXJhbXM6IFtdLCByZXQ6
ICJ2b2lkIiB9KQorICAgICAgICAgICAgICAgICAgICAuQ2FsbCgwKQorICAgICAgICAgICAgICAg
ICAgICAuUmV0dXJuKCkKKyAgICAgICAgICAgICAgICAuRW5kKCkKKyAgICAgICAgICAgIC5FbmQo
KTsKKworCisgICAgICAgIGNvbnN0IGJpbiA9IGJ1aWxkZXIuV2ViQXNzZW1ibHkoKS5nZXQoKTsK
KyAgICAgICAgY29uc3QgbW9kdWxlID0gbmV3IFdlYkFzc2VtYmx5Lk1vZHVsZShiaW4pOworICAg
ICAgICByZXR1cm4gbmV3IFdlYkFzc2VtYmx5Lkluc3RhbmNlKG1vZHVsZSwge2ltcDoge2Z9fSk7
CisgICAgfQorCisgICAgY29uc3Qge2luc3RhbmNlOiBpMSwgdGFibGU6IHQxfSA9IG1ha2VJbnN0
YW5jZSgpOworICAgIGNvbnN0IGZvbyA9IGkxLmV4cG9ydHMuZm9vOworCisgICAgbGV0IGNhbGxl
ZCA9IGZhbHNlOworICAgIGxldCBzaG91bGRUaHJvdyA9IGZhbHNlOworICAgIGNvbnN0IGkyID0g
bWFrZUluc3RhbmNlMihmdW5jdGlvbigpIHsKKyAgICAgICAgY2FsbGVkID0gdHJ1ZTsKKyAgICAg
ICAgaWYgKHNob3VsZFRocm93KQorICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJUaHJldyIp
OworICAgIH0pOworCisgICAgdDEuc2V0KDAsIGkyLmV4cG9ydHMuZm9vKTsKKyAgICBmb3IgKGxl
dCBpID0gMDsgaSA8IDEwMDA7ICsraSkgeworICAgICAgICBmb28oMCk7CisgICAgICAgIGFzc2Vy
dC5lcShjYWxsZWQsIHRydWUpOworICAgICAgICBjYWxsZWQgPSBmYWxzZTsKKyAgICB9CisgICAg
c2hvdWxkVGhyb3cgPSB0cnVlOworICAgIGZvciAobGV0IGkgPSAwOyBpIDwgMTAwMDsgKytpKSB7
CisgICAgICAgIGFzc2VydC50aHJvd3MoKCkgPT4gZm9vKDApLCBFcnJvciwgIlRocmV3Iik7Cisg
ICAgICAgIGFzc2VydC5lcShjYWxsZWQsIHRydWUpOworICAgICAgICBjYWxsZWQgPSBmYWxzZTsK
KyAgICB9Cit9CisKK3sKKyAgICBmdW5jdGlvbiBtYWtlSW5zdGFuY2UoKSB7CisgICAgICAgIGNv
bnN0IHRhYmxlRGVzY3JpcHRpb24gPSB7aW5pdGlhbDogMSwgZWxlbWVudDogImFueWZ1bmMifTsK
KyAgICAgICAgY29uc3QgYnVpbGRlciA9IG5ldyBCdWlsZGVyKCkKKyAgICAgICAgICAgIC5UeXBl
KCkKKyAgICAgICAgICAgICAgICAuRnVuYyhbImkzMiJdLCAidm9pZCIpCisgICAgICAgICAgICAu
RW5kKCkKKyAgICAgICAgICAgIC5JbXBvcnQoKQorICAgICAgICAgICAgICAgIC5UYWJsZSgiaW1w
IiwgInRhYmxlIiwgdGFibGVEZXNjcmlwdGlvbikKKyAgICAgICAgICAgIC5FbmQoKQorICAgICAg
ICAgICAgLkZ1bmN0aW9uKCkuRW5kKCkKKyAgICAgICAgICAgIC5FeHBvcnQoKQorICAgICAgICAg
ICAgICAgIC5GdW5jdGlvbigiZm9vIikKKyAgICAgICAgICAgIC5FbmQoKQorICAgICAgICAgICAg
LkNvZGUoKQorICAgICAgICAgICAgICAgIC5GdW5jdGlvbigiZm9vIiwge3BhcmFtczpbImkzMiIs
ICJpMzIiXSwgcmV0OiJ2b2lkIn0pCisgICAgICAgICAgICAgICAgICAgIC5HZXRMb2NhbCgxKSAv
LyBwYXJhbWV0ZXIgdG8gY2FsbAorICAgICAgICAgICAgICAgICAgICAuR2V0TG9jYWwoMCkgLy8g
Y2FsbCBpbmRleAorICAgICAgICAgICAgICAgICAgICAuQ2FsbEluZGlyZWN0KDAsIDApIC8vIGNh
bGxpbmcgZnVuY3Rpb24gb2YgdHlwZSBbJ2kzMiddID0+ICd2b2lkJworICAgICAgICAgICAgICAg
ICAgICAuUmV0dXJuKCkKKyAgICAgICAgICAgICAgICAuRW5kKCkKKyAgICAgICAgICAgIC5FbmQo
KTsKKworICAgICAgICBjb25zdCBiaW4gPSBidWlsZGVyLldlYkFzc2VtYmx5KCkuZ2V0KCk7Cisg
ICAgICAgIGNvbnN0IG1vZHVsZSA9IG5ldyBXZWJBc3NlbWJseS5Nb2R1bGUoYmluKTsKKyAgICAg
ICAgY29uc3QgdGFibGUgPSBuZXcgV2ViQXNzZW1ibHkuVGFibGUodGFibGVEZXNjcmlwdGlvbik7
CisgICAgICAgIHJldHVybiB7aW5zdGFuY2U6IG5ldyBXZWJBc3NlbWJseS5JbnN0YW5jZShtb2R1
bGUsIHtpbXA6IHt0YWJsZX19KSwgdGFibGV9OworICAgIH0KKworICAgIGZ1bmN0aW9uIG1ha2VJ
bnN0YW5jZTIobWVtb3J5LCBmKSB7CisgICAgICAgIGNvbnN0IGJ1aWxkZXIgPSBuZXcgQnVpbGRl
cigpCisgICAgICAgICAgICAuVHlwZSgpCisgICAgICAgICAgICAuRW5kKCkKKyAgICAgICAgICAg
IC5JbXBvcnQoKQorICAgICAgICAgICAgICAgIC5GdW5jdGlvbigiaW1wIiwgImYiLCB7cGFyYW1z
OlsnaTMyJywgJ2kzMiddLCByZXQ6InZvaWQifSkKKyAgICAgICAgICAgICAgICAuTWVtb3J5KCJp
bXAiLCAibWVtb3J5IiwgbWVtb3J5RGVzY3JpcHRpb24pCisgICAgICAgICAgICAuRW5kKCkKKyAg
ICAgICAgICAgIC5GdW5jdGlvbigpLkVuZCgpCisgICAgICAgICAgICAuRXhwb3J0KCkKKyAgICAg
ICAgICAgICAgICAuRnVuY3Rpb24oImZvbyIpCisgICAgICAgICAgICAuRW5kKCkKKyAgICAgICAg
ICAgIC5Db2RlKCkKKyAgICAgICAgICAgICAgICAuRnVuY3Rpb24oImZvbyIsIHtwYXJhbXM6IFsi
aTMyIl0sIHJldDogInZvaWQiIH0pCisgICAgICAgICAgICAgICAgICAgIC5HZXRMb2NhbCgwKQor
ICAgICAgICAgICAgICAgICAgICAuR2V0TG9jYWwoMCkKKyAgICAgICAgICAgICAgICAgICAgLkkz
MkxvYWQoMiwgMCkKKyAgICAgICAgICAgICAgICAgICAgLkNhbGwoMCkKKyAgICAgICAgICAgICAg
ICAgICAgLlJldHVybigpCisgICAgICAgICAgICAgICAgLkVuZCgpCisgICAgICAgICAgICAuRW5k
KCk7CisKKworICAgICAgICBjb25zdCBiaW4gPSBidWlsZGVyLldlYkFzc2VtYmx5KCkuZ2V0KCk7
CisgICAgICAgIGNvbnN0IG1vZHVsZSA9IG5ldyBXZWJBc3NlbWJseS5Nb2R1bGUoYmluKTsKKyAg
ICAgICAgcmV0dXJuIG5ldyBXZWJBc3NlbWJseS5JbnN0YW5jZShtb2R1bGUsIHtpbXA6IHtmLCBt
ZW1vcnl9fSk7CisgICAgfQorCisgICAgY29uc3Qge2luc3RhbmNlOiBpMSwgdGFibGU6IHQxfSA9
IG1ha2VJbnN0YW5jZSgpOworICAgIGNvbnN0IGZvbyA9IChtZW1PZmZzZXQpID0+IGkxLmV4cG9y
dHMuZm9vKDAsIG1lbU9mZnNldCk7CisKKyAgICBjb25zdCBtZW1vcnlEZXNjcmlwdGlvbiA9IHtp
bml0aWFsOjF9OworICAgIGNvbnN0IG1lbSA9IG5ldyBXZWJBc3NlbWJseS5NZW1vcnkobWVtb3J5
RGVzY3JpcHRpb24pOworICAgIGxldCBjYWxsZWQgPSBmYWxzZTsKKworICAgIGNvbnN0IHBhZ2VT
aXplID0gNjQgKiAxMDI0OworICAgIGxldCBidWYgPSBuZXcgVWludDMyQXJyYXkobWVtLmJ1ZmZl
cik7CisgICAgY29uc3QgaTIgPSBtYWtlSW5zdGFuY2UyKG1lbSwgZnVuY3Rpb24oaSwgdmFsdWUp
IHsKKyAgICAgICAgYXNzZXJ0LmVxKGkgJiAzLCAwKTsKKyAgICAgICAgYXNzZXJ0LmVxKGJ1Zltp
LzRdLCB2YWx1ZSk7CisgICAgICAgIGNhbGxlZCA9IHRydWU7CisgICAgfSk7CisgICAgdDEuc2V0
KDAsIGkyLmV4cG9ydHMuZm9vKTsKKyAgICAKKyAgICBmb3IgKGxldCBpID0gMDsgaSA8IHBhZ2VT
aXplLzQ7ICsraSkgeworICAgICAgICBidWZbaV0gPSBpKzE7CisgICAgfQorCisgICAgZm9yIChs
ZXQgaSA9IDA7IGkgPCBwYWdlU2l6ZS80OyArK2kpIHsKKyAgICAgICAgZm9vKGkqNCk7CisgICAg
ICAgIGFzc2VydC5lcShjYWxsZWQsIHRydWUpOworICAgICAgICBjYWxsZWQgPSBmYWxzZTsKKyAg
ICB9CisKKyAgICBmb3IgKGxldCBpID0gcGFnZVNpemUvNDsgaSA8IDIqcGFnZVNpemUvNDsgKytp
KSB7CisgICAgICAgIGFzc2VydC50aHJvd3MoKCkgPT4gZm9vKGkqNCksIFdlYkFzc2VtYmx5LlJ1
bnRpbWVFcnJvciwgIk91dCBvZiBib3VuZHMgbWVtb3J5IGFjY2VzcyIpOworICAgICAgICBhc3Nl
cnQuZXEoY2FsbGVkLCBmYWxzZSk7CisgICAgfQorfQorCit7CisgICAgZnVuY3Rpb24gbWFrZUlu
c3RhbmNlKCkgeworICAgICAgICBjb25zdCB0YWJsZURlc2NyaXB0aW9uID0ge2luaXRpYWw6IDEs
IGVsZW1lbnQ6ICJhbnlmdW5jIn07CisgICAgICAgIGNvbnN0IGJ1aWxkZXIgPSBuZXcgQnVpbGRl
cigpCisgICAgICAgICAgICAuVHlwZSgpCisgICAgICAgICAgICAgICAgLkZ1bmMoWyJpMzIiXSwg
InZvaWQiKQorICAgICAgICAgICAgLkVuZCgpCisgICAgICAgICAgICAuSW1wb3J0KCkKKyAgICAg
ICAgICAgICAgICAuVGFibGUoImltcCIsICJ0YWJsZSIsIHRhYmxlRGVzY3JpcHRpb24pCisgICAg
ICAgICAgICAuRW5kKCkKKyAgICAgICAgICAgIC5GdW5jdGlvbigpLkVuZCgpCisgICAgICAgICAg
ICAuRXhwb3J0KCkKKyAgICAgICAgICAgICAgICAuRnVuY3Rpb24oImZvbyIpCisgICAgICAgICAg
ICAuRW5kKCkKKyAgICAgICAgICAgIC5Db2RlKCkKKyAgICAgICAgICAgICAgICAuRnVuY3Rpb24o
ImZvbyIsIHtwYXJhbXM6WyJpMzIiLCAiaTMyIl0sIHJldDoidm9pZCJ9KQorICAgICAgICAgICAg
ICAgICAgICAuR2V0TG9jYWwoMSkgLy8gcGFyYW1ldGVyIHRvIGNhbGwKKyAgICAgICAgICAgICAg
ICAgICAgLkdldExvY2FsKDApIC8vIGNhbGwgaW5kZXgKKyAgICAgICAgICAgICAgICAgICAgLkNh
bGxJbmRpcmVjdCgwLCAwKSAvLyBjYWxsaW5nIGZ1bmN0aW9uIG9mIHR5cGUgWydpMzInXSA9PiAn
dm9pZCcKKyAgICAgICAgICAgICAgICAgICAgLlJldHVybigpCisgICAgICAgICAgICAgICAgLkVu
ZCgpCisgICAgICAgICAgICAuRW5kKCk7CisKKyAgICAgICAgY29uc3QgYmluID0gYnVpbGRlci5X
ZWJBc3NlbWJseSgpLmdldCgpOworICAgICAgICBjb25zdCBtb2R1bGUgPSBuZXcgV2ViQXNzZW1i
bHkuTW9kdWxlKGJpbik7CisgICAgICAgIGNvbnN0IHRhYmxlID0gbmV3IFdlYkFzc2VtYmx5LlRh
YmxlKHRhYmxlRGVzY3JpcHRpb24pOworICAgICAgICByZXR1cm4ge2luc3RhbmNlOiBuZXcgV2Vi
QXNzZW1ibHkuSW5zdGFuY2UobW9kdWxlLCB7aW1wOiB7dGFibGV9fSksIHRhYmxlfTsKKyAgICB9
CisKKyAgICBmdW5jdGlvbiBtYWtlSW5zdGFuY2UyKG1lbW9yeSwgZikgeworICAgICAgICBjb25z
dCBidWlsZGVyID0gbmV3IEJ1aWxkZXIoKQorICAgICAgICAgICAgLlR5cGUoKQorICAgICAgICAg
ICAgLkVuZCgpCisgICAgICAgICAgICAuSW1wb3J0KCkKKyAgICAgICAgICAgICAgICAuRnVuY3Rp
b24oImltcCIsICJmIiwge3BhcmFtczpbJ2kzMicsICdpMzInXSwgcmV0OiJ2b2lkIn0pCisgICAg
ICAgICAgICAgICAgLk1lbW9yeSgiaW1wIiwgIm1lbW9yeSIsIG1lbW9yeURlc2NyaXB0aW9uKQor
ICAgICAgICAgICAgLkVuZCgpCisgICAgICAgICAgICAuRnVuY3Rpb24oKS5FbmQoKQorICAgICAg
ICAgICAgLkV4cG9ydCgpCisgICAgICAgICAgICAgICAgLkZ1bmN0aW9uKCJmb28iKQorICAgICAg
ICAgICAgLkVuZCgpCisgICAgICAgICAgICAuQ29kZSgpCisgICAgICAgICAgICAgICAgLkZ1bmN0
aW9uKCJmb28iLCB7cGFyYW1zOiBbImkzMiJdLCByZXQ6ICJ2b2lkIiB9KQorICAgICAgICAgICAg
ICAgICAgICAuR2V0TG9jYWwoMCkKKyAgICAgICAgICAgICAgICAgICAgLkdldExvY2FsKDApCisg
ICAgICAgICAgICAgICAgICAgIC5JMzJMb2FkKDIsIDApCisgICAgICAgICAgICAgICAgICAgIC5D
YWxsKDApCisgICAgICAgICAgICAgICAgICAgIC5SZXR1cm4oKQorICAgICAgICAgICAgICAgIC5F
bmQoKQorICAgICAgICAgICAgLkVuZCgpOworCisKKyAgICAgICAgY29uc3QgYmluID0gYnVpbGRl
ci5XZWJBc3NlbWJseSgpLmdldCgpOworICAgICAgICBjb25zdCBtb2R1bGUgPSBuZXcgV2ViQXNz
ZW1ibHkuTW9kdWxlKGJpbik7CisgICAgICAgIHJldHVybiBuZXcgV2ViQXNzZW1ibHkuSW5zdGFu
Y2UobW9kdWxlLCB7aW1wOiB7ZiwgbWVtb3J5fX0pOworICAgIH0KKworICAgIGZ1bmN0aW9uIGV4
cG9ydEltcG9ydChmKSB7CisgICAgICAgIGxldCBidWlsZGVyID0gKG5ldyBCdWlsZGVyKCkpCisg
ICAgICAgICAgICAuVHlwZSgpLkVuZCgpCisgICAgICAgICAgICAuSW1wb3J0KCkKKyAgICAgICAg
ICAgICAgICAuRnVuY3Rpb24oImltcCIsICJmIiwge3BhcmFtczogWydpMzInXSwgcmV0OiJ2b2lk
In0pCisgICAgICAgICAgICAuRW5kKCkKKyAgICAgICAgICAgIC5GdW5jdGlvbigpLkVuZCgpCisg
ICAgICAgICAgICAuRXhwb3J0KCkKKyAgICAgICAgICAgICAgICAuRnVuY3Rpb24oImZ1bmMiLCB7
bW9kdWxlOiAiaW1wIiwgZmllbGQ6ICJmIn0pCisgICAgICAgICAgICAuRW5kKCkKKyAgICAgICAg
ICAgIC5Db2RlKCkuRW5kKCk7CisgICAgICAgIHJldHVybiAobmV3IFdlYkFzc2VtYmx5Lkluc3Rh
bmNlKG5ldyBXZWJBc3NlbWJseS5Nb2R1bGUoYnVpbGRlci5XZWJBc3NlbWJseSgpLmdldCgpKSwg
e2ltcDoge2Z9fSkpLmV4cG9ydHMuZnVuYzsKKyAgICB9CisKKyAgICBjb25zdCB7aW5zdGFuY2U6
IGkxLCB0YWJsZTogdDF9ID0gbWFrZUluc3RhbmNlKCk7CisgICAgY29uc3QgZm9vID0gKG1lbU9m
ZnNldCkgPT4gaTEuZXhwb3J0cy5mb28oMCwgbWVtT2Zmc2V0KTsKKworICAgIGNvbnN0IG1lbW9y
eURlc2NyaXB0aW9uID0ge2luaXRpYWw6MX07CisgICAgY29uc3QgbWVtID0gbmV3IFdlYkFzc2Vt
Ymx5Lk1lbW9yeShtZW1vcnlEZXNjcmlwdGlvbik7CisgICAgbGV0IGNhbGxlZCA9IGZhbHNlOwor
CisgICAgY29uc3QgcGFnZVNpemUgPSA2NCAqIDEwMjQ7CisgICAgbGV0IGJ1ZiA9IG5ldyBVaW50
MzJBcnJheShtZW0uYnVmZmVyKTsKKyAgICBjb25zdCBpMiA9IG1ha2VJbnN0YW5jZTIobWVtLCBm
dW5jdGlvbihpLCB2YWx1ZSkgeworICAgICAgICBhc3NlcnQuZXEoaSAmIDMsIDApOworICAgICAg
ICBhc3NlcnQuZXEoYnVmW2kvNF0sIHZhbHVlKTsKKyAgICAgICAgY2FsbGVkID0gdHJ1ZTsKKyAg
ICB9KTsKKworICAgIGNvbnN0IGV4cG9ydGVkSW1wb3J0ID0gZXhwb3J0SW1wb3J0KGZ1bmN0aW9u
KG9mZnNldCkgeworICAgICAgICBpMi5leHBvcnRzLmZvbyhvZmZzZXQpOworICAgIH0pOworICAg
IHQxLnNldCgwLCBleHBvcnRlZEltcG9ydCk7CisgICAgCisgICAgZm9yIChsZXQgaSA9IDA7IGkg
PCBwYWdlU2l6ZS80OyArK2kpIHsKKyAgICAgICAgYnVmW2ldID0gaSsxOworICAgIH0KKworICAg
IGZvciAobGV0IGkgPSAwOyBpIDwgcGFnZVNpemUvNDsgKytpKSB7CisgICAgICAgIGZvbyhpKjQp
OworICAgICAgICBhc3NlcnQuZXEoY2FsbGVkLCB0cnVlKTsKKyAgICAgICAgY2FsbGVkID0gZmFs
c2U7CisgICAgfQorCisgICAgZm9yIChsZXQgaSA9IHBhZ2VTaXplLzQ7IGkgPCAyKnBhZ2VTaXpl
LzQ7ICsraSkgeworICAgICAgICBhc3NlcnQudGhyb3dzKCgpID0+IGZvbyhpKjQpLCBXZWJBc3Nl
bWJseS5SdW50aW1lRXJyb3IsICJPdXQgb2YgYm91bmRzIG1lbW9yeSBhY2Nlc3MiKTsKKyAgICAg
ICAgYXNzZXJ0LmVxKGNhbGxlZCwgZmFsc2UpOworICAgIH0KK30KSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L0NoYW5nZUxvZwkocmV2aXNpb24gMjE2OTQ3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0No
YW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDQ1IEBACisyMDE3LTA1LTE2ICBTYWFt
IEJhcmF0aSAgPHNiYXJhdGlAYXBwbGUuY29tPgorCisgICAgICAgIFdlIGRvbid0IGRvIGNvbnRl
eHQgc3dpdGNoZXMgZm9yIFdhc20tPldhc20gY2FsbCBpbmRpcmVjdAorICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTcyMTg4CisgICAgICAgIDxyZGFyOi8v
cHJvYmxlbS8zMjIzMTgyOD4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4K
KworICAgICAgICBXZSBkaWQgbm90IGRvIGEgY29udGV4dCBzd2l0Y2ggd2hlbiBkb2luZyBhbiBp
bmRpcmVjdCBjYWxsLiAKKyAgICAgICAgVGhpcyBpcyBjbGVhcmx5IHdyb25nLCBzaW5jZSB0aGUg
dGhpbmcgd2UncmUgbWFraW5nIGFuIGluZGlyZWN0CisgICAgICAgIGNhbGwgdG8gY291bGQgYmUg
ZnJvbSBhbm90aGVyIGluc3RhbmNlLiBUaGlzIHBhdGNoIGZpeGVzIHRoaXMKKyAgICAgICAgb3Zl
cnNpZ2h0IGJ5IGRvaW5nIGEgdmVyeSBzaW1wbGUgY29udGV4dCBzd2l0Y2guIEkndmUgYWxzbyBv
cGVuZWQKKyAgICAgICAgYSBidWcgdG8gbWFrZSBpbmRpcmVjdCBjYWxscyBmYXN0OiBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTcyMTk3CisgICAgICAgIHNpbmNlIHRo
aXMgcGF0Y2ggYWRkcyB5ZXQgYW5vdGhlciBicmFuY2ggdG8gdGhlIGluZGlyZWN0IGNhbGwgcGF0
aC4KKyAgICAgICAgSSd2ZSBhbHNvIGFkZGVkIHRlc3RzIHRoYXQgZWl0aGVyIHRocm93IG9yIGNy
YXNoIGJlZm9yZSB0aGlzIGNoYW5nZS4KKworICAgICAgICAqIEphdmFTY3JpcHRDb3JlLnhjb2Rl
cHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogd2FzbS9XYXNtQjNJUkdlbmVyYXRvci5j
cHA6CisgICAgICAgICogd2FzbS9qcy9KU1dlYkFzc2VtYmx5VGFibGUuaDoKKyAgICAgICAgKEpT
Qzo6SlNXZWJBc3NlbWJseVRhYmxlOjpvZmZzZXRPZkpTRnVuY3Rpb25zKToKKyAgICAgICAgKiB3
YXNtL2pzL1dlYkFzc2VtYmx5RnVuY3Rpb24uY3BwOgorICAgICAgICAoSlNDOjpXZWJBc3NlbWJs
eUZ1bmN0aW9uOjp2aXNpdENoaWxkcmVuKToKKyAgICAgICAgKEpTQzo6V2ViQXNzZW1ibHlGdW5j
dGlvbjo6ZmluaXNoQ3JlYXRpb24pOiBEZWxldGVkLgorICAgICAgICAqIHdhc20vanMvV2ViQXNz
ZW1ibHlGdW5jdGlvbi5oOgorICAgICAgICAoSlNDOjpXZWJBc3NlbWJseUZ1bmN0aW9uOjppbnN0
YW5jZSk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OldlYkFzc2VtYmx5RnVuY3Rpb246Om9mZnNl
dE9mSW5zdGFuY2UpOiBEZWxldGVkLgorICAgICAgICAqIHdhc20vanMvV2ViQXNzZW1ibHlGdW5j
dGlvbkJhc2UuY3BwOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6V2ViQXNzZW1ibHlGdW5jdGlvbkJh
c2U6OldlYkFzc2VtYmx5RnVuY3Rpb25CYXNlKToKKyAgICAgICAgKEpTQzo6V2ViQXNzZW1ibHlG
dW5jdGlvbkJhc2U6OnZpc2l0Q2hpbGRyZW4pOgorICAgICAgICAoSlNDOjpXZWJBc3NlbWJseUZ1
bmN0aW9uQmFzZTo6ZmluaXNoQ3JlYXRpb24pOgorICAgICAgICAqIHdhc20vanMvV2ViQXNzZW1i
bHlGdW5jdGlvbkJhc2UuaDogQWRkZWQuCisgICAgICAgIChKU0M6OldlYkFzc2VtYmx5RnVuY3Rp
b25CYXNlOjppbnN0YW5jZSk6CisgICAgICAgIChKU0M6OldlYkFzc2VtYmx5RnVuY3Rpb25CYXNl
OjpvZmZzZXRPZkluc3RhbmNlKToKKyAgICAgICAgKiB3YXNtL2pzL1dlYkFzc2VtYmx5TW9kdWxl
UmVjb3JkLmNwcDoKKyAgICAgICAgKEpTQzo6V2ViQXNzZW1ibHlNb2R1bGVSZWNvcmQ6Omxpbmsp
OgorICAgICAgICAoSlNDOjpXZWJBc3NlbWJseU1vZHVsZVJlY29yZDo6ZXZhbHVhdGUpOgorICAg
ICAgICAqIHdhc20vanMvV2ViQXNzZW1ibHlXcmFwcGVyRnVuY3Rpb24uY3BwOgorICAgICAgICAo
SlNDOjpXZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlvbjo6Y3JlYXRlKToKKyAgICAgICAgKEpTQzo6
V2ViQXNzZW1ibHlXcmFwcGVyRnVuY3Rpb246OmZpbmlzaENyZWF0aW9uKToKKyAgICAgICAgKEpT
Qzo6V2ViQXNzZW1ibHlXcmFwcGVyRnVuY3Rpb246OnZpc2l0Q2hpbGRyZW4pOgorICAgICAgICAq
IHdhc20vanMvV2ViQXNzZW1ibHlXcmFwcGVyRnVuY3Rpb24uaDoKKwogMjAxNy0wNS0xNiAgWXVz
dWtlIFN1enVraSAgPHV0YXRhbmUudGVhQGdtYWlsLmNvbT4KIAogICAgICAgICBVbnJldmlld2Vk
LCBhZGQgT2JqZWN0aXZlIEMgZmlsZXMgdG8gQ01ha2UgTWFjIHBvcnQKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXBy
b2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAyMTY5NDcpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29ya2luZyBj
b3B5KQpAQCAtMTMyNSw2ICsxMzI1LDggQEAKIAkJNDQ0M0FFMzMxNkUxODhEOTAwNzZGMTEwIC8q
IEZvdW5kYXRpb24uZnJhbWV3b3JrIGluIEZyYW1ld29ya3MgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gNTFGMEVCNjEwNUM4NkM2QjAwRTZERjFCIC8qIEZvdW5kYXRpb24uZnJh
bWV3b3JrICovOyB9OwogCQk0NTE1MzlCOTEyREM5OTQ1MDBFRjdBQzQgLyogWWFyci5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDUxNTM5QjgxMkRDOTk0
NTAwRUY3QUM0IC8qIFlhcnIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRl
LCApOyB9OyB9OwogCQk0NzNEQTRBNDc2NEM0NUZFODcxQjA0ODUgLyogRGVmaW5lUHJvcGVydHlB
dHRyaWJ1dGVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSAxNjk5NDhFREU2OEQ0MDU0QjAxRUY3OTcgLyogRGVmaW5lUHJvcGVydHlBdHRyaWJ1dGVzLmgg
Ki87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJNTIxMzIy
NDUxRUNCQ0U4MjAwRjY1NjE1IC8qIFdlYkFzc2VtYmx5RnVuY3Rpb25CYXNlLmNwcCBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUyMTMyMjQzMUVDQkNFODIw
MEY2NTYxNSAvKiBXZWJBc3NlbWJseUZ1bmN0aW9uQmFzZS5jcHAgKi87IH07CisJCTUyMTMyMjQ2
MUVDQkNFODIwMEY2NTYxNSAvKiBXZWJBc3NlbWJseUZ1bmN0aW9uQmFzZS5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTIxMzIyNDQxRUNCQ0U4MjAwRjY1
NjE1IC8qIFdlYkFzc2VtYmx5RnVuY3Rpb25CYXNlLmggKi87IH07CiAJCTUyNTBEMkQxMUU4REEw
NUEwMDI5QTkzMiAvKiBXYXNtVGh1bmtzLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDUyNTBEMkNGMUU4REEwNUEwMDI5QTkzMiAvKiBXYXNtVGh1bmtz
LmNwcCAqLzsgfTsKIAkJNTI1MEQyRDIxRThEQTA1QTAwMjlBOTMyIC8qIFdhc21UaHVua3MuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUyNTBEMkQwMUU4
REEwNUEwMDI5QTkzMiAvKiBXYXNtVGh1bmtzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMg
PSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNTI1QzBERDkxRTkzNTg0NzAwMjE4NENEIC8qIFdhc21D
YWxsZWUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
NTI1QzBERDcxRTkzNTg0NzAwMjE4NENEIC8qIFdhc21DYWxsZWUuY3BwICovOyB9OwpAQCAtMTM0
Niw3ICsxMzQ4LDcgQEAKIAkJNTJDOTUyQjcxOUEyODk4NTAwNjlCMzg2IC8qIFR5cGVQcm9maWxl
ci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTJDOTUy
QjYxOUEyODk4NTAwNjlCMzg2IC8qIFR5cGVQcm9maWxlci5oICovOyBzZXR0aW5ncyA9IHtBVFRS
SUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTUyQzk1MkI5MTlBMjhBMUMwMDY5QjM4NiAv
KiBUeXBlUHJvZmlsZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gNTJDOTUyQjgxOUEyOEExQzAwNjlCMzg2IC8qIFR5cGVQcm9maWxlci5jcHAgKi87
IH07CiAJCTUyRjZDMzVEMUU3MUVCMDgwMDgxRjRDQyAvKiBXZWJBc3NlbWJseVdyYXBwZXJGdW5j
dGlvbi5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1
MkY2QzM1QjFFNzFFQjA4MDA4MUY0Q0MgLyogV2ViQXNzZW1ibHlXcmFwcGVyRnVuY3Rpb24uY3Bw
ICovOyB9OwotCQk1MkY2QzM1RTFFNzFFQjA4MDA4MUY0Q0MgLyogV2ViQXNzZW1ibHlXcmFwcGVy
RnVuY3Rpb24uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDUyRjZDMzVDMUU3MUVCMDgwMDgxRjRDQyAvKiBXZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlvbi5o
ICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTUyRjZD
MzVFMUU3MUVCMDgwMDgxRjRDQyAvKiBXZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlvbi5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTJGNkMzNUMxRTcxRUIw
ODAwODFGNENDIC8qIFdlYkFzc2VtYmx5V3JhcHBlckZ1bmN0aW9uLmggKi87IH07CiAJCTUzMEZC
MzAyMUU3QTBCNkUwMDNDMTlERCAvKiBXYXNtV29ya2xpc3QuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUzMEZCMzAxMUU3QTBCNkUwMDNDMTlERCAvKiBX
YXNtV29ya2xpc3QuaCAqLzsgfTsKIAkJNTMwRkIzMDQxRTdBMTE0NjAwM0MxOUREIC8qIFdhc21X
b3JrbGlzdC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSA1MzBGQjMwMzFFN0ExMTQ2MDAzQzE5REQgLyogV2FzbVdvcmtsaXN0LmNwcCAqLzsgfTsKIAkJ
NTMxMUJENEExRUE1ODFFNTAwNTI1MjgxIC8qIFdhc21PTUdQbGFuLmNwcCBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUzMTFCRDQ4MUVBNTgxRTUwMDUyNTI4
MSAvKiBXYXNtT01HUGxhbi5jcHAgKi87IH07CkBAIC0zODczLDYgKzM4NzUsOCBAQAogCQk0Q0U5
NzhFMzg1QTg0OTgxOTkwNTIxNTMgLyogTW9kdWxlTmFtZXNwYWNlQWNjZXNzQ2FzZS5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBNb2R1bGVOYW1lc3BhY2VBY2Nlc3NDYXNlLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUxRjBFQjYxMDVDODZDNkIwMEU2REYxQiAv
KiBGb3VuZGF0aW9uLmZyYW1ld29yayAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0
S25vd25GaWxlVHlwZSA9IHdyYXBwZXIuZnJhbWV3b3JrOyBuYW1lID0gRm91bmRhdGlvbi5mcmFt
ZXdvcms7IHBhdGggPSAvU3lzdGVtL0xpYnJhcnkvRnJhbWV3b3Jrcy9Gb3VuZGF0aW9uLmZyYW1l
d29yazsgc291cmNlVHJlZSA9ICI8YWJzb2x1dGU+IjsgfTsKIAkJNTFGMEVDMDcwNUM4NkM5QTAw
RTZERjFCIC8qIGxpYm9iamMuZHlsaWIgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFz
dEtub3duRmlsZVR5cGUgPSAiY29tcGlsZWQubWFjaC1vLmR5bGliIjsgbmFtZSA9IGxpYm9iamMu
ZHlsaWI7IHBhdGggPSAvdXNyL2xpYi9saWJvYmpjLmR5bGliOyBzb3VyY2VUcmVlID0gIjxhYnNv
bHV0ZT4iOyB9OworCQk1MjEzMjI0MzFFQ0JDRTgyMDBGNjU2MTUgLyogV2ViQXNzZW1ibHlGdW5j
dGlvbkJhc2UuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gV2ViQXNz
ZW1ibHlGdW5jdGlvbkJhc2UuY3BwOyBwYXRoID0ganMvV2ViQXNzZW1ibHlGdW5jdGlvbkJhc2Uu
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk1MjEzMjI0NDFFQ0JDRTgyMDBGNjU2
MTUgLyogV2ViQXNzZW1ibHlGdW5jdGlvbkJhc2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBuYW1lID0gV2ViQXNzZW1ibHlGdW5jdGlvbkJhc2UuaDsgcGF0aCA9IGpzL1dlYkFzc2VtYmx5
RnVuY3Rpb25CYXNlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUyNTBEMkNGMUU4
REEwNUEwMDI5QTkzMiAvKiBXYXNtVGh1bmtzLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgcGF0aCA9IFdhc21UaHVua3MuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQk1MjUwRDJEMDFFOERBMDVBMDAyOUE5MzIgLyogV2FzbVRodW5rcy5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBXYXNtVGh1bmtzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTUyNUMwREQ3MUU5MzU4NDcwMDIxODRDRCAvKiBXYXNtQ2FsbGVlLmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdhc21DYWxsZWUuY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwpAQCAtODA4OSw2ICs4MDkzLDggQEAKIAkJCQlBRDJGQ0JCMzFEQjU4
REE0MDBCM0U3MzYgLyogV2ViQXNzZW1ibHlDb21waWxlRXJyb3JQcm90b3R5cGUuaCAqLywKIAkJ
CQlBRDQ5MzdDOTFEREQyNzM0MDA3N0M4MDcgLyogV2ViQXNzZW1ibHlGdW5jdGlvbi5jcHAgKi8s
CiAJCQkJQUQ0OTM3Q0ExREREMjczNDAwNzdDODA3IC8qIFdlYkFzc2VtYmx5RnVuY3Rpb24uaCAq
LywKKwkJCQk1MjEzMjI0MzFFQ0JDRTgyMDBGNjU2MTUgLyogV2ViQXNzZW1ibHlGdW5jdGlvbkJh
c2UuY3BwICovLAorCQkJCTUyMTMyMjQ0MUVDQkNFODIwMEY2NTYxNSAvKiBXZWJBc3NlbWJseUZ1
bmN0aW9uQmFzZS5oICovLAogCQkJCUFEMkZDQkI0MURCNThEQTQwMEIzRTczNiAvKiBXZWJBc3Nl
bWJseUluc3RhbmNlQ29uc3RydWN0b3IuY3BwICovLAogCQkJCUFEMkZDQkI1MURCNThEQTQwMEIz
RTczNiAvKiBXZWJBc3NlbWJseUluc3RhbmNlQ29uc3RydWN0b3IuaCAqLywKIAkJCQlBRDJGQ0JC
NjFEQjU4REE0MDBCM0U3MzYgLyogV2ViQXNzZW1ibHlJbnN0YW5jZVByb3RvdHlwZS5jcHAgKi8s
CkBAIC04NzAzLDYgKzg3MDksNyBAQAogCQkJCTBGMzRCMTRBMTZENDIwMTMwMDFDREE1QSAvKiBE
RkdVc2VLaW5kLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjk3MTUzMTFFQjI4QkVFMDBBMTY0NUQg
LyogR0NSZXF1ZXN0LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjNCM0EyQzE1NDc1MDAyMDAzRUQw
RkYgLyogREZHVmFsaWRhdGUuaCBpbiBIZWFkZXJzICovLAorCQkJCTUyMTMyMjQ2MUVDQkNFODIw
MEY2NTYxNSAvKiBXZWJBc3NlbWJseUZ1bmN0aW9uQmFzZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
MEYyQkRDNDgxNTIyODAyOTAwQ0Q4OTEwIC8qIERGR1ZhbHVlU291cmNlLmggaW4gSGVhZGVycyAq
LywKIAkJCQkwRjAxMjMzMzE5NDRFQTFCMDA4NDNBMEMgLyogREZHVmFsdWVTdHJlbmd0aC5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJMEZFMjU0RjcxQUJEREQyMjAwQTdDNkQyIC8qIERGR1ZhcmFyZ3NG
b3J3YXJkaW5nUGhhc2UuaCBpbiBIZWFkZXJzICovLApAQCAtMTA1NzEsNiArMTA1NzgsNyBAQAog
CQkJCUE1Mzk4RkFDMUM3NTBEQTYwMDYwQTk2MyAvKiBIZWFwUHJvZmlsZXIuY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJQTU0QzJBQjAxQzY1NDRFRTAwQTE4RDc4IC8qIEhlYXBTbmFwc2hvdC5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQlBNTMxMUMzNzFDNzdDRUNBMDBFNkIxQjYgLyogSGVhcFNuYXBz
aG90QnVpbGRlci5jcHAgaW4gU291cmNlcyAqLywKKwkJCQk1MjEzMjI0NTFFQ0JDRTgyMDBGNjU2
MTUgLyogV2ViQXNzZW1ibHlGdW5jdGlvbkJhc2UuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEY0
NjgwRDQxNEJCRDI0OTAwQkZFMjcyIC8qIEhvc3RDYWxsUmV0dXJuVmFsdWUuY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJREMyMTQzMDgxQ0EzMkU1ODAwMEE4ODY5IC8qIElDU3RhdHMuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJMTQ3RjM5Q0UxMDdFQzM3NjAwNDI3QTQ4IC8qIElkZW50aWZpZXIuY3Bw
IGluIFNvdXJjZXMgKi8sCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQjNJ
UkdlbmVyYXRvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20v
V2FzbUIzSVJHZW5lcmF0b3IuY3BwCShyZXZpc2lvbiAyMTY5NDcpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvd2FzbS9XYXNtQjNJUkdlbmVyYXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEw
ODksMTIgKzEwODksMTUgQEAgYXV0byBCM0lSR2VuZXJhdG9yOjphZGRDYWxsSW5kaXJlY3QoY29u
cwogICAgIEFTU0VSVChzaWduYXR1cmUuYXJndW1lbnRDb3VudCgpID09IGFyZ3Muc2l6ZSgpKTsK
IAogICAgIEV4cHJlc3Npb25UeXBlIGNhbGxhYmxlRnVuY3Rpb25CdWZmZXI7CisgICAgRXhwcmVz
c2lvblR5cGUganNGdW5jdGlvbkJ1ZmZlcjsKICAgICBFeHByZXNzaW9uVHlwZSBjYWxsYWJsZUZ1
bmN0aW9uQnVmZmVyU2l6ZTsKICAgICB7CiAgICAgICAgIEV4cHJlc3Npb25UeXBlIHRhYmxlID0g
bV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxNZW1vcnlWYWx1ZT4obV9wcm9jLCBMb2FkLCBwb2lu
dGVyVHlwZSgpLCBvcmlnaW4oKSwKICAgICAgICAgICAgIG1faW5zdGFuY2VWYWx1ZSwgc2FmZUNh
c3Q8aW50MzJfdD4oSlNXZWJBc3NlbWJseUluc3RhbmNlOjpvZmZzZXRPZlRhYmxlKCkpKTsKICAg
ICAgICAgY2FsbGFibGVGdW5jdGlvbkJ1ZmZlciA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8
TWVtb3J5VmFsdWU+KG1fcHJvYywgTG9hZCwgcG9pbnRlclR5cGUoKSwgb3JpZ2luKCksCiAgICAg
ICAgICAgICB0YWJsZSwgc2FmZUNhc3Q8aW50MzJfdD4oSlNXZWJBc3NlbWJseVRhYmxlOjpvZmZz
ZXRPZkZ1bmN0aW9ucygpKSk7CisgICAgICAgIGpzRnVuY3Rpb25CdWZmZXIgPSBtX2N1cnJlbnRC
bG9jay0+YXBwZW5kTmV3PE1lbW9yeVZhbHVlPihtX3Byb2MsIExvYWQsIHBvaW50ZXJUeXBlKCks
IG9yaWdpbigpLAorICAgICAgICAgICAgdGFibGUsIHNhZmVDYXN0PGludDMyX3Q+KEpTV2ViQXNz
ZW1ibHlUYWJsZTo6b2Zmc2V0T2ZKU0Z1bmN0aW9ucygpKSk7CiAgICAgICAgIGNhbGxhYmxlRnVu
Y3Rpb25CdWZmZXJTaXplID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxNZW1vcnlWYWx1ZT4o
bV9wcm9jLCBMb2FkLCBJbnQzMiwgb3JpZ2luKCksCiAgICAgICAgICAgICB0YWJsZSwgc2FmZUNh
c3Q8aW50MzJfdD4oSlNXZWJBc3NlbWJseVRhYmxlOjpvZmZzZXRPZlNpemUoKSkpOwogICAgIH0K
QEAgLTExNDAsMTEgKzExNDMsNTYgQEAgYXV0byBCM0lSR2VuZXJhdG9yOjphZGRDYWxsSW5kaXJl
Y3QoY29ucwogICAgICAgICB9KTsKICAgICB9CiAKKyAgICAvLyBEbyBhIGNvbnRleHQgc3dpdGNo
IGlmIG5lZWRlZC4KKyAgICB7CisgICAgICAgIFZhbHVlKiBvZmZzZXQgPSBtX2N1cnJlbnRCbG9j
ay0+YXBwZW5kTmV3PFZhbHVlPihtX3Byb2MsIE11bCwgb3JpZ2luKCksCisgICAgICAgICAgICBt
X2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFZhbHVlPihtX3Byb2MsIFpFeHQzMiwgb3JpZ2luKCks
IGNhbGxlZUluZGV4KSwKKyAgICAgICAgICAgIGNvbnN0YW50KHBvaW50ZXJUeXBlKCksIHNpemVv
ZihXcml0ZUJhcnJpZXI8SlNPYmplY3Q+KSkpOworICAgICAgICBWYWx1ZSoganNPYmplY3QgPSBt
X2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PE1lbW9yeVZhbHVlPihtX3Byb2MsIExvYWQsIHBvaW50
ZXJUeXBlKCksIG9yaWdpbigpLAorICAgICAgICAgICAgbV9jdXJyZW50QmxvY2stPmFwcGVuZE5l
dzxWYWx1ZT4obV9wcm9jLCBBZGQsIG9yaWdpbigpLCBqc0Z1bmN0aW9uQnVmZmVyLCBvZmZzZXQp
KTsKKworICAgICAgICBCYXNpY0Jsb2NrKiBjb250aW51YXRpb24gPSBtX3Byb2MuYWRkQmxvY2so
KTsKKyAgICAgICAgQmFzaWNCbG9jayogZG9Db250ZXh0U3dpdGNoID0gbV9wcm9jLmFkZEJsb2Nr
KCk7CisKKyAgICAgICAgVmFsdWUqIG5ld0NvbnRleHQgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5k
TmV3PE1lbW9yeVZhbHVlPihtX3Byb2MsIExvYWQsIHBvaW50ZXJUeXBlKCksIG9yaWdpbigpLAor
ICAgICAgICAgICAganNPYmplY3QsIHNhZmVDYXN0PGludDMyX3Q+KFdlYkFzc2VtYmx5RnVuY3Rp
b25CYXNlOjpvZmZzZXRPZkluc3RhbmNlKCkpKTsKKyAgICAgICAgVmFsdWUqIGlzU2FtZUNvbnRl
eHQgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFZhbHVlPihtX3Byb2MsIEVxdWFsLCBvcmln
aW4oKSwKKyAgICAgICAgICAgIG5ld0NvbnRleHQsIG1faW5zdGFuY2VWYWx1ZSk7CisgICAgICAg
IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXdDb250cm9sVmFsdWUobV9wcm9jLCBCMzo6QnJhbmNo
LCBvcmlnaW4oKSwKKyAgICAgICAgICAgIGlzU2FtZUNvbnRleHQsIEZyZXF1ZW50ZWRCbG9jayhj
b250aW51YXRpb24pLCBGcmVxdWVudGVkQmxvY2soZG9Db250ZXh0U3dpdGNoKSk7CisKKyAgICAg
ICAgUGF0Y2hwb2ludFZhbHVlKiBwYXRjaHBvaW50ID0gZG9Db250ZXh0U3dpdGNoLT5hcHBlbmRO
ZXc8UGF0Y2hwb2ludFZhbHVlPihtX3Byb2MsIEIzOjpWb2lkLCBvcmlnaW4oKSk7CisgICAgICAg
IC8vIFdlIHBlc3NpbWlzdGljYWxseSBhc3N1bWUgd2UncmUgY2FsbGluZyBzb21ldGhpbmcgd2l0
aCBCb3VuZHNDaGVja2luZyBtZW1vcnkuCisgICAgICAgIC8vIEZJWE1FOiBXZSBzaG91bGRuJ3Qg
aGF2ZSB0byBkbyB0aGlzOiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MTcyMTgxCisgICAgICAgIHBhdGNocG9pbnQtPmNsb2JiZXIoUGlubmVkUmVnaXN0ZXJJbmZvOjpn
ZXQoKS50b1NhdmUoTWVtb3J5TW9kZTo6Qm91bmRzQ2hlY2tpbmcpKTsKKyAgICAgICAgcGF0Y2hw
b2ludC0+Y2xvYmJlcihSZWdpc3RlclNldDo6bWFjcm9TY3JhdGNoUmVnaXN0ZXJzKCkpOworICAg
ICAgICBwYXRjaHBvaW50LT5hcHBlbmQobmV3Q29udGV4dCwgVmFsdWVSZXA6OlNvbWVSZWdpc3Rl
cik7CisgICAgICAgIHBhdGNocG9pbnQtPnNldEdlbmVyYXRvcihbPV0gKENDYWxsSGVscGVycyYg
aml0LCBjb25zdCBCMzo6U3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zJiBwYXJhbXMpIHsKKyAgICAg
ICAgICAgIEFsbG93TWFjcm9TY3JhdGNoUmVnaXN0ZXJVc2FnZSBhbGxvd1NjcmF0Y2goaml0KTsK
KyAgICAgICAgICAgIEdQUlJlZyBuZXdDb250ZXh0ID0gcGFyYW1zWzBdLmdwcigpOworICAgICAg
ICAgICAgY29uc3QgUGlubmVkUmVnaXN0ZXJJbmZvJiBwaW5uZWRSZWdzID0gUGlubmVkUmVnaXN0
ZXJJbmZvOjpnZXQoKTsKKyAgICAgICAgICAgIGNvbnN0IGF1dG8mIHNpemVSZWdzID0gcGlubmVk
UmVncy5zaXplUmVnaXN0ZXJzOworICAgICAgICAgICAgR1BSUmVnIGJhc2VNZW1vcnkgPSBwaW5u
ZWRSZWdzLmJhc2VNZW1vcnlQb2ludGVyOworICAgICAgICAgICAgQVNTRVJUKG5ld0NvbnRleHQg
IT0gYmFzZU1lbW9yeSk7CisKKyAgICAgICAgICAgIGppdC5zdG9yZVdhc21Db250ZXh0KG5ld0Nv
bnRleHQpOworICAgICAgICAgICAgaml0LmxvYWRQdHIoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKG5l
d0NvbnRleHQsIENvbnRleHQ6Om9mZnNldE9mTWVtb3J5KCkpLCBiYXNlTWVtb3J5KTsgLy8gSlNX
ZWJBc3NlbWJseU1lbW9yeSouCisgICAgICAgICAgICBBU1NFUlQoc2l6ZVJlZ3Muc2l6ZSgpID09
IDEpOworICAgICAgICAgICAgQVNTRVJUKHNpemVSZWdzWzBdLnNpemVSZWdpc3RlciAhPSBiYXNl
TWVtb3J5KTsKKyAgICAgICAgICAgIEFTU0VSVChzaXplUmVnc1swXS5zaXplUmVnaXN0ZXIgIT0g
bmV3Q29udGV4dCk7CisgICAgICAgICAgICBBU1NFUlQoIXNpemVSZWdzWzBdLnNpemVPZmZzZXQp
OworICAgICAgICAgICAgaml0LmxvYWRQdHIoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKGJhc2VNZW1v
cnksIEpTV2ViQXNzZW1ibHlNZW1vcnk6Om9mZnNldE9mU2l6ZSgpKSwgc2l6ZVJlZ3NbMF0uc2l6
ZVJlZ2lzdGVyKTsgLy8gTWVtb3J5IHNpemUuCisgICAgICAgICAgICBqaXQubG9hZFB0cihDQ2Fs
bEhlbHBlcnM6OkFkZHJlc3MoYmFzZU1lbW9yeSwgSlNXZWJBc3NlbWJseU1lbW9yeTo6b2Zmc2V0
T2ZNZW1vcnkoKSksIGJhc2VNZW1vcnkpOyAvLyBXYXNtTWVtb3J5Ojp2b2lkKi4KKyAgICAgICAg
fSk7CisgICAgICAgIGRvQ29udGV4dFN3aXRjaC0+YXBwZW5kTmV3Q29udHJvbFZhbHVlKG1fcHJv
YywgSnVtcCwgb3JpZ2luKCksIGNvbnRpbnVhdGlvbik7CisKKyAgICAgICAgbV9jdXJyZW50Qmxv
Y2sgPSBjb250aW51YXRpb247CisgICAgfQorCiAgICAgRXhwcmVzc2lvblR5cGUgY2FsbGVlQ29k
ZSA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8TWVtb3J5VmFsdWU+KG1fcHJvYywgTG9hZCwg
cG9pbnRlclR5cGUoKSwgb3JpZ2luKCksCiAgICAgICAgIG1fY3VycmVudEJsb2NrLT5hcHBlbmRO
ZXc8TWVtb3J5VmFsdWU+KG1fcHJvYywgTG9hZCwgcG9pbnRlclR5cGUoKSwgb3JpZ2luKCksIGNh
bGxhYmxlRnVuY3Rpb24sCiAgICAgICAgICAgICBzYWZlQ2FzdDxpbnQzMl90PihPQkpFQ1RfT0ZG
U0VUT0YoQ2FsbGFibGVGdW5jdGlvbiwgY29kZSkpKSk7CiAKLQogICAgIFR5cGUgcmV0dXJuVHlw
ZSA9IHNpZ25hdHVyZS5yZXR1cm5UeXBlKCk7CiAgICAgcmVzdWx0ID0gd2FzbUNhbGxpbmdDb252
ZW50aW9uKCkuc2V0dXBDYWxsKG1fcHJvYywgbV9jdXJyZW50QmxvY2ssIG9yaWdpbigpLCBhcmdz
LCB0b0IzVHlwZShyZXR1cm5UeXBlKSwKICAgICAgICAgWz1dIChQYXRjaHBvaW50VmFsdWUqIHBh
dGNocG9pbnQpIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNz
ZW1ibHlUYWJsZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pz
L0pTV2ViQXNzZW1ibHlUYWJsZS5oCShyZXZpc2lvbiAyMTY5NDcpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5VGFibGUuaAkod29ya2luZyBjb3B5KQpAQCAt
NjIsNiArNjIsNyBAQCBwdWJsaWM6CiAKICAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mU2l6
ZSgpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihKU1dlYkFzc2VtYmx5VGFibGUsIG1fc2l6ZSk7
IH0KICAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mRnVuY3Rpb25zKCkgeyByZXR1cm4gT0JK
RUNUX09GRlNFVE9GKEpTV2ViQXNzZW1ibHlUYWJsZSwgbV9mdW5jdGlvbnMpOyB9CisgICAgc3Rh
dGljIHB0cmRpZmZfdCBvZmZzZXRPZkpTRnVuY3Rpb25zKCkgeyByZXR1cm4gT0JKRUNUX09GRlNF
VE9GKEpTV2ViQXNzZW1ibHlUYWJsZSwgbV9qc0Z1bmN0aW9ucyk7IH0KIAogICAgIHN0YXRpYyBi
b29sIGlzVmFsaWRTaXplKHVpbnQzMl90IHNpemUpCiAgICAgewpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlGdW5jdGlvbi5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlGdW5jdGlvbi5jcHAJKHJl
dmlzaW9uIDIxNjk0NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2Vt
Ymx5RnVuY3Rpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xODQsMTQgKzE4NCw2IEBAIHZvaWQg
V2ViQXNzZW1ibHlGdW5jdGlvbjo6dmlzaXRDaGlsZHJlbigKICAgICBXZWJBc3NlbWJseUZ1bmN0
aW9uKiB0aGlzT2JqZWN0ID0ganNDYXN0PFdlYkFzc2VtYmx5RnVuY3Rpb24qPihjZWxsKTsKICAg
ICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CiAgICAgQmFz
ZTo6dmlzaXRDaGlsZHJlbih0aGlzT2JqZWN0LCB2aXNpdG9yKTsKLSAgICB2aXNpdG9yLmFwcGVu
ZCh0aGlzT2JqZWN0LT5tX2luc3RhbmNlKTsKLX0KLQotdm9pZCBXZWJBc3NlbWJseUZ1bmN0aW9u
OjpmaW5pc2hDcmVhdGlvbihWTSYgdm0sIE5hdGl2ZUV4ZWN1dGFibGUqIGV4ZWN1dGFibGUsIHVu
c2lnbmVkIGxlbmd0aCwgY29uc3QgU3RyaW5nJiBuYW1lLCBKU1dlYkFzc2VtYmx5SW5zdGFuY2Uq
IGluc3RhbmNlKQotewotICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKHZtLCBleGVjdXRhYmxlLCBs
ZW5ndGgsIG5hbWUpOwotICAgIEFTU0VSVChpbmhlcml0cyh2bSwgaW5mbygpKSk7Ci0gICAgbV9p
bnN0YW5jZS5zZXQodm0sIHRoaXMsIGluc3RhbmNlKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgSlND
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseUZ1bmN0aW9u
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1i
bHlGdW5jdGlvbi5oCShyZXZpc2lvbiAyMTY5NDcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
d2FzbS9qcy9XZWJBc3NlbWJseUZ1bmN0aW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTI3LDggKzI3
LDggQEAKIAogI2lmIEVOQUJMRShXRUJBU1NFTUJMWSkKIAotI2luY2x1ZGUgIkpTRnVuY3Rpb24u
aCIKICNpbmNsdWRlICJXYXNtQ2FsbGVlLmgiCisjaW5jbHVkZSAiV2ViQXNzZW1ibHlGdW5jdGlv
bkJhc2UuaCIKICNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4KIAogbmFtZXNwYWNlIEpTQyB7
CkBAIC00MSw5ICs0MSw5IEBAIG5hbWVzcGFjZSBCMyB7CiBjbGFzcyBDb21waWxhdGlvbjsKIH0K
IAotY2xhc3MgV2ViQXNzZW1ibHlGdW5jdGlvbiA6IHB1YmxpYyBKU0Z1bmN0aW9uIHsKK2NsYXNz
IFdlYkFzc2VtYmx5RnVuY3Rpb24gOiBwdWJsaWMgV2ViQXNzZW1ibHlGdW5jdGlvbkJhc2Ugewog
cHVibGljOgotICAgIHR5cGVkZWYgSlNGdW5jdGlvbiBCYXNlOworICAgIHVzaW5nIEJhc2UgPSBX
ZWJBc3NlbWJseUZ1bmN0aW9uQmFzZTsKIAogICAgIGNvbnN0IHN0YXRpYyB1bnNpZ25lZCBTdHJ1
Y3R1cmVGbGFncyA9IEJhc2U6OlN0cnVjdHVyZUZsYWdzOwogCkBAIC01MiwyNSArNTIsMjAgQEAg
cHVibGljOgogICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyBXZWJBc3NlbWJseUZ1bmN0aW9u
KiBjcmVhdGUoVk0mLCBKU0dsb2JhbE9iamVjdCosIHVuc2lnbmVkLCBjb25zdCBTdHJpbmcmLCBK
U1dlYkFzc2VtYmx5SW5zdGFuY2UqLCBXYXNtOjpDYWxsZWUmIGpzRW50cnlwb2ludCwgV2FzbTo6
V2FzbUVudHJ5cG9pbnRMb2FkTG9jYXRpb24sIFdhc206OlNpZ25hdHVyZUluZGV4KTsKICAgICBz
dGF0aWMgU3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoVk0mLCBKU0dsb2JhbE9iamVjdCosIEpT
VmFsdWUpOwogCi0gICAgSlNXZWJBc3NlbWJseUluc3RhbmNlKiBpbnN0YW5jZSgpIGNvbnN0IHsg
cmV0dXJuIG1faW5zdGFuY2UuZ2V0KCk7IH0KICAgICBXYXNtOjpTaWduYXR1cmVJbmRleCBzaWdu
YXR1cmVJbmRleCgpIGNvbnN0IHsgcmV0dXJuIG1fd2FzbUZ1bmN0aW9uLnNpZ25hdHVyZUluZGV4
OyB9CiAgICAgV2FzbTo6V2FzbUVudHJ5cG9pbnRMb2FkTG9jYXRpb24gd2FzbUVudHJ5cG9pbnRM
b2FkTG9jYXRpb24oKSBjb25zdCB7IHJldHVybiBtX3dhc21GdW5jdGlvbi5jb2RlOyB9CiAgICAg
V2FzbTo6Q2FsbGFibGVGdW5jdGlvbiBjYWxsYWJsZUZ1bmN0aW9uKCkgY29uc3QgeyByZXR1cm4g
bV93YXNtRnVuY3Rpb247IH0KIAogICAgIHZvaWQqIGpzRW50cnlwb2ludCgpIHsgcmV0dXJuIG1f
anNFbnRyeXBvaW50OyB9CiAKLSAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mSW5zdGFuY2Uo
KSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoV2ViQXNzZW1ibHlGdW5jdGlvbiwgbV9pbnN0YW5j
ZSk7IH0KICAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mV2FzbUVudHJ5cG9pbnRMb2FkTG9j
YXRpb24oKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoV2ViQXNzZW1ibHlGdW5jdGlvbiwgbV93
YXNtRnVuY3Rpb24pICsgV2FzbTo6Q2FsbGFibGVGdW5jdGlvbjo6b2Zmc2V0T2ZXYXNtRW50cnlw
b2ludExvYWRMb2NhdGlvbigpOyB9CiAKIHByb3RlY3RlZDoKICAgICBzdGF0aWMgdm9pZCB2aXNp
dENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CiAKLSAgICB2b2lkIGZpbmlzaENyZWF0
aW9uKFZNJiwgTmF0aXZlRXhlY3V0YWJsZSosIHVuc2lnbmVkIGxlbmd0aCwgY29uc3QgU3RyaW5n
JiBuYW1lLCBKU1dlYkFzc2VtYmx5SW5zdGFuY2UqKTsKLQogcHJpdmF0ZToKICAgICBXZWJBc3Nl
bWJseUZ1bmN0aW9uKFZNJiwgSlNHbG9iYWxPYmplY3QqLCBTdHJ1Y3R1cmUqLCBXYXNtOjpDYWxs
ZWUmIGpzRW50cnlwb2ludCwgV2FzbTo6V2FzbUVudHJ5cG9pbnRMb2FkTG9jYXRpb24sIFdhc206
OlNpZ25hdHVyZUluZGV4KTsKIAotICAgIFdyaXRlQmFycmllcjxKU1dlYkFzc2VtYmx5SW5zdGFu
Y2U+IG1faW5zdGFuY2U7CiAgICAgLy8gSXQncyBzYWZlIHRvIGp1c3QgaG9sZCB0aGUgcmF3IENh
bGxhYmxlRnVuY3Rpb24vanNFbnRyeXBvaW50IGJlY2F1c2Ugd2UgaGF2ZSBhIHJlZmVyZW5jZQog
ICAgIC8vIHRvIG91ciBJbnN0YW5jZSwgd2hpY2ggcG9pbnRzIHRvIHRoZSBNb2R1bGUgdGhhdCBl
eHBvcnRlZCB1cywgd2hpY2gKICAgICAvLyBlbnN1cmVzIHRoYXQgdGhlIGFjdHVhbCBTaWduYXR1
cmUvY29kZSBkb2Vzbid0IGdldCBkZWFsbG9jYXRlZC4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5RnVuY3Rpb25CYXNlLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseUZ1bmN0aW9uQmFzZS5jcHAJ
KG5vbmV4aXN0ZW50KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1i
bHlGdW5jdGlvbkJhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNTggQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFT
IElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
KyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmln
LmgiCisjaW5jbHVkZSAiV2ViQXNzZW1ibHlGdW5jdGlvbkJhc2UuaCIKKworI2lmIEVOQUJMRShX
RUJBU1NFTUJMWSkKKworI2luY2x1ZGUgIkpTV2ViQXNzZW1ibHlJbnN0YW5jZS5oIgorCituYW1l
c3BhY2UgSlNDIHsKKworY29uc3QgQ2xhc3NJbmZvIFdlYkFzc2VtYmx5RnVuY3Rpb25CYXNlOjpz
X2luZm8gPSB7ICJXZWJBc3NlbWJseUZ1bmN0aW9uQmFzZSIsICZCYXNlOjpzX2luZm8sIG51bGxw
dHIsIENSRUFURV9NRVRIT0RfVEFCTEUoV2ViQXNzZW1ibHlGdW5jdGlvbkJhc2UpIH07CisKK1dl
YkFzc2VtYmx5RnVuY3Rpb25CYXNlOjpXZWJBc3NlbWJseUZ1bmN0aW9uQmFzZShWTSYgdm0sIEpT
R2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFN0cnVjdHVyZSogc3RydWN0dXJlKQorICAgIDog
QmFzZSh2bSwgZ2xvYmFsT2JqZWN0LCBzdHJ1Y3R1cmUpCit7IH0KKwordm9pZCBXZWJBc3NlbWJs
eUZ1bmN0aW9uQmFzZTo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2
aXNpdG9yKQoreworICAgIFdlYkFzc2VtYmx5RnVuY3Rpb25CYXNlKiB0aGlzT2JqZWN0ID0ganND
YXN0PFdlYkFzc2VtYmx5RnVuY3Rpb25CYXNlKj4oY2VsbCk7CisgICAgQVNTRVJUX0dDX09CSkVD
VF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOworICAgIEJhc2U6OnZpc2l0Q2hpbGRyZW4o
dGhpc09iamVjdCwgdmlzaXRvcik7CisgICAgdmlzaXRvci5hcHBlbmQodGhpc09iamVjdC0+bV9p
bnN0YW5jZSk7Cit9CisKK3ZvaWQgV2ViQXNzZW1ibHlGdW5jdGlvbkJhc2U6OmZpbmlzaENyZWF0
aW9uKFZNJiB2bSwgTmF0aXZlRXhlY3V0YWJsZSogZXhlY3V0YWJsZSwgdW5zaWduZWQgbGVuZ3Ro
LCBjb25zdCBTdHJpbmcmIG5hbWUsIEpTV2ViQXNzZW1ibHlJbnN0YW5jZSogaW5zdGFuY2UpCit7
CisgICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24odm0sIGV4ZWN1dGFibGUsIGxlbmd0aCwgbmFtZSk7
CisgICAgQVNTRVJUKGluaGVyaXRzKHZtLCBpbmZvKCkpKTsKKyAgICBtX2luc3RhbmNlLnNldCh2
bSwgdGhpcywgaW5zdGFuY2UpOworfQorCit9IC8vIG5hbWVzcGFjZSBKU0MKKworI2VuZGlmIC8v
IEVOQUJMRShXRUJBU1NFTUJMWSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pz
L1dlYkFzc2VtYmx5RnVuY3Rpb25CYXNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlGdW5jdGlvbkJhc2UuaAkobm9uZXhpc3RlbnQpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseUZ1bmN0aW9uQmFzZS5o
CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNTcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQor
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lmIEVOQUJMRShXRUJBU1NF
TUJMWSkKKworI2luY2x1ZGUgIkpTRnVuY3Rpb24uaCIKKworbmFtZXNwYWNlIEpTQyB7CisKK2Ns
YXNzIEpTR2xvYmFsT2JqZWN0OworY2xhc3MgSlNXZWJBc3NlbWJseUluc3RhbmNlOworCitjbGFz
cyBXZWJBc3NlbWJseUZ1bmN0aW9uQmFzZSA6IHB1YmxpYyBKU0Z1bmN0aW9uIHsKK3B1YmxpYzoK
KyAgICB1c2luZyBCYXNlID0gSlNGdW5jdGlvbjsKKworICAgIGNvbnN0IHN0YXRpYyB1bnNpZ25l
ZCBTdHJ1Y3R1cmVGbGFncyA9IEJhc2U6OlN0cnVjdHVyZUZsYWdzOworCisgICAgREVDTEFSRV9J
TkZPOworCisgICAgSlNXZWJBc3NlbWJseUluc3RhbmNlKiBpbnN0YW5jZSgpIGNvbnN0IHsgcmV0
dXJuIG1faW5zdGFuY2UuZ2V0KCk7IH0KKyAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mSW5z
dGFuY2UoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoV2ViQXNzZW1ibHlGdW5jdGlvbkJhc2Us
IG1faW5zdGFuY2UpOyB9CisKK3Byb3RlY3RlZDoKKyAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxk
cmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CisgICAgdm9pZCBmaW5pc2hDcmVhdGlvbihWTSYs
IE5hdGl2ZUV4ZWN1dGFibGUqLCB1bnNpZ25lZCBsZW5ndGgsIGNvbnN0IFN0cmluZyYgbmFtZSwg
SlNXZWJBc3NlbWJseUluc3RhbmNlKik7CisgICAgV2ViQXNzZW1ibHlGdW5jdGlvbkJhc2UoVk0m
LCBKU0dsb2JhbE9iamVjdCosIFN0cnVjdHVyZSopOworICAgIFdyaXRlQmFycmllcjxKU1dlYkFz
c2VtYmx5SW5zdGFuY2U+IG1faW5zdGFuY2U7Cit9OworCit9IC8vIG5hbWVzcGFjZSBKU0MKKwor
I2VuZGlmIC8vIEVOQUJMRShXRUJBU1NFTUJMWSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS93YXNtL2pzL1dlYkFzc2VtYmx5TW9kdWxlUmVjb3JkLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseU1vZHVsZVJlY29yZC5jcHAJKHJl
dmlzaW9uIDIxNjk0NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2Vt
Ymx5TW9kdWxlUmVjb3JkLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTE3LDcgKzExNyw3IEBAIHZv
aWQgV2ViQXNzZW1ibHlNb2R1bGVSZWNvcmQ6OmxpbmsoRXhlY1MKICAgICAgICAgICAgICAgICAg
ICAgZXhwb3J0ZWRWYWx1ZSA9IGZ1bmN0aW9uSW1wb3J0OwogICAgICAgICAgICAgICAgIGVsc2Ug
ewogICAgICAgICAgICAgICAgICAgICBXYXNtOjpTaWduYXR1cmVJbmRleCBzaWduYXR1cmVJbmRl
eCA9IG1vZHVsZS0+c2lnbmF0dXJlSW5kZXhGcm9tRnVuY3Rpb25JbmRleFNwYWNlKGZ1bmN0aW9u
SW5kZXgpOwotICAgICAgICAgICAgICAgICAgICBleHBvcnRlZFZhbHVlID0gV2ViQXNzZW1ibHlX
cmFwcGVyRnVuY3Rpb246OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBmdW5jdGlvbkltcG9ydCwg
ZnVuY3Rpb25JbmRleCwgY29kZUJsb2NrLCBzaWduYXR1cmVJbmRleCk7CisgICAgICAgICAgICAg
ICAgICAgIGV4cG9ydGVkVmFsdWUgPSBXZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlvbjo6Y3JlYXRl
KHZtLCBnbG9iYWxPYmplY3QsIGZ1bmN0aW9uSW1wb3J0LCBmdW5jdGlvbkluZGV4LCBpbnN0YW5j
ZSwgc2lnbmF0dXJlSW5kZXgpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0gZWxz
ZSB7CiAgICAgICAgICAgICAgICAgLy8gICBpaWkuIE90aGVyd2lzZToKQEAgLTI2NCw3ICsyNjQs
NyBAQCBKU1ZhbHVlIFdlYkFzc2VtYmx5TW9kdWxlUmVjb3JkOjpldmFsdWF0CiAgICAgICAgICAg
ICAgICAgICAgIH0KIAogICAgICAgICAgICAgICAgICAgICB0YWJsZS0+c2V0RnVuY3Rpb24odm0s
IHRhYmxlSW5kZXgsCi0gICAgICAgICAgICAgICAgICAgICAgICBXZWJBc3NlbWJseVdyYXBwZXJG
dW5jdGlvbjo6Y3JlYXRlKHZtLCBtX2luc3RhbmNlLT5nbG9iYWxPYmplY3QoKSwgZnVuY3Rpb25J
bXBvcnQsIGZ1bmN0aW9uSW5kZXgsIGNvZGVCbG9jaywgc2lnbmF0dXJlSW5kZXgpKTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIFdlYkFzc2VtYmx5V3JhcHBlckZ1bmN0aW9uOjpjcmVhdGUodm0s
IG1faW5zdGFuY2UtPmdsb2JhbE9iamVjdCgpLCBmdW5jdGlvbkltcG9ydCwgZnVuY3Rpb25JbmRl
eCwgbV9pbnN0YW5jZS5nZXQoKSwgc2lnbmF0dXJlSW5kZXgpKTsKICAgICAgICAgICAgICAgICAg
ICAgKyt0YWJsZUluZGV4OwogICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAg
ICAgICAgICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJs
eVdyYXBwZXJGdW5jdGlvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L3dhc20vanMvV2ViQXNzZW1ibHlXcmFwcGVyRnVuY3Rpb24uY3BwCShyZXZpc2lvbiAyMTY5NDcp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseVdyYXBwZXJGdW5j
dGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMxLDYgKzMxLDcgQEAKICNpbmNsdWRlICJFcnJv
ci5oIgogI2luY2x1ZGUgIkZ1bmN0aW9uUHJvdG90eXBlLmgiCiAjaW5jbHVkZSAiSlNDSW5saW5l
cy5oIgorI2luY2x1ZGUgIkpTV2ViQXNzZW1ibHlJbnN0YW5jZS5oIgogCiBuYW1lc3BhY2UgSlND
IHsKIApAQCAtNTcsMjMgKzU4LDIyIEBAIFdlYkFzc2VtYmx5V3JhcHBlckZ1bmN0aW9uOjpXZWJB
c3NlbWJseVcKICAgICAsIG1fd2FzbUZ1bmN0aW9uKHdhc21GdW5jdGlvbikKIHsgfQogCi1XZWJB
c3NlbWJseVdyYXBwZXJGdW5jdGlvbiogV2ViQXNzZW1ibHlXcmFwcGVyRnVuY3Rpb246OmNyZWF0
ZShWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTT2JqZWN0KiBmdW5jdGlv
biwgdW5zaWduZWQgaW1wb3J0SW5kZXgsIEpTV2ViQXNzZW1ibHlDb2RlQmxvY2sqIGNvZGVCbG9j
aywgV2FzbTo6U2lnbmF0dXJlSW5kZXggc2lnbmF0dXJlSW5kZXgpCitXZWJBc3NlbWJseVdyYXBw
ZXJGdW5jdGlvbiogV2ViQXNzZW1ibHlXcmFwcGVyRnVuY3Rpb246OmNyZWF0ZShWTSYgdm0sIEpT
R2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTT2JqZWN0KiBmdW5jdGlvbiwgdW5zaWduZWQg
aW1wb3J0SW5kZXgsIEpTV2ViQXNzZW1ibHlJbnN0YW5jZSogaW5zdGFuY2UsIFdhc206OlNpZ25h
dHVyZUluZGV4IHNpZ25hdHVyZUluZGV4KQogewogICAgIEFTU0VSVF9XSVRIX01FU1NBR0UoIWZ1
bmN0aW9uLT5pbmhlcml0cyh2bSwgV2ViQXNzZW1ibHlXcmFwcGVyRnVuY3Rpb246OmluZm8oKSks
ICJXZSBzaG91bGQgbmV2ZXIgZG91YmxlIHdyYXAgYSB3cmFwcGVyIGZ1bmN0aW9uLiIpOwogICAg
IFN0cmluZyBuYW1lID0gIiI7CiAgICAgTmF0aXZlRXhlY3V0YWJsZSogZXhlY3V0YWJsZSA9IHZt
LmdldEhvc3RGdW5jdGlvbihjYWxsV2ViQXNzZW1ibHlXcmFwcGVyRnVuY3Rpb24sIE5vSW50cmlu
c2ljLCBjYWxsSG9zdEZ1bmN0aW9uQXNDb25zdHJ1Y3RvciwgbnVsbHB0ciwgbmFtZSk7Ci0gICAg
V2ViQXNzZW1ibHlXcmFwcGVyRnVuY3Rpb24qIHJlc3VsdCA9IG5ldyAoTm90TnVsbCwgYWxsb2Nh
dGVDZWxsPFdlYkFzc2VtYmx5V3JhcHBlckZ1bmN0aW9uPih2bS5oZWFwKSkgV2ViQXNzZW1ibHlX
cmFwcGVyRnVuY3Rpb24odm0sIGdsb2JhbE9iamVjdCwgZ2xvYmFsT2JqZWN0LT53ZWJBc3NlbWJs
eVdyYXBwZXJGdW5jdGlvblN0cnVjdHVyZSgpLCBXYXNtOjpDYWxsYWJsZUZ1bmN0aW9uKHNpZ25h
dHVyZUluZGV4LCBjb2RlQmxvY2stPndhc21Ub0pzQ2FsbFN0dWJGb3JJbXBvcnQoaW1wb3J0SW5k
ZXgpKSk7CisgICAgV2ViQXNzZW1ibHlXcmFwcGVyRnVuY3Rpb24qIHJlc3VsdCA9IG5ldyAoTm90
TnVsbCwgYWxsb2NhdGVDZWxsPFdlYkFzc2VtYmx5V3JhcHBlckZ1bmN0aW9uPih2bS5oZWFwKSkg
V2ViQXNzZW1ibHlXcmFwcGVyRnVuY3Rpb24odm0sIGdsb2JhbE9iamVjdCwgZ2xvYmFsT2JqZWN0
LT53ZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlvblN0cnVjdHVyZSgpLCBXYXNtOjpDYWxsYWJsZUZ1
bmN0aW9uKHNpZ25hdHVyZUluZGV4LCBpbnN0YW5jZS0+Y29kZUJsb2NrKCktPndhc21Ub0pzQ2Fs
bFN0dWJGb3JJbXBvcnQoaW1wb3J0SW5kZXgpKSk7CiAgICAgY29uc3QgV2FzbTo6U2lnbmF0dXJl
JiBzaWduYXR1cmUgPSBXYXNtOjpTaWduYXR1cmVJbmZvcm1hdGlvbjo6Z2V0KHNpZ25hdHVyZUlu
ZGV4KTsKLSAgICByZXN1bHQtPmZpbmlzaENyZWF0aW9uKHZtLCBleGVjdXRhYmxlLCBzaWduYXR1
cmUuYXJndW1lbnRDb3VudCgpLCBuYW1lLCBmdW5jdGlvbiwgY29kZUJsb2NrKTsKKyAgICByZXN1
bHQtPmZpbmlzaENyZWF0aW9uKHZtLCBleGVjdXRhYmxlLCBzaWduYXR1cmUuYXJndW1lbnRDb3Vu
dCgpLCBuYW1lLCBmdW5jdGlvbiwgaW5zdGFuY2UpOwogICAgIHJldHVybiByZXN1bHQ7CiB9CiAK
LXZvaWQgV2ViQXNzZW1ibHlXcmFwcGVyRnVuY3Rpb246OmZpbmlzaENyZWF0aW9uKFZNJiB2bSwg
TmF0aXZlRXhlY3V0YWJsZSogZXhlY3V0YWJsZSwgdW5zaWduZWQgbGVuZ3RoLCBjb25zdCBTdHJp
bmcmIG5hbWUsIEpTT2JqZWN0KiBmdW5jdGlvbiwgSlNXZWJBc3NlbWJseUNvZGVCbG9jayogY29k
ZUJsb2NrKQordm9pZCBXZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlvbjo6ZmluaXNoQ3JlYXRpb24o
Vk0mIHZtLCBOYXRpdmVFeGVjdXRhYmxlKiBleGVjdXRhYmxlLCB1bnNpZ25lZCBsZW5ndGgsIGNv
bnN0IFN0cmluZyYgbmFtZSwgSlNPYmplY3QqIGZ1bmN0aW9uLCBKU1dlYkFzc2VtYmx5SW5zdGFu
Y2UqIGluc3RhbmNlKQogewotICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKHZtLCBleGVjdXRhYmxl
LCBsZW5ndGgsIG5hbWUpOworICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKHZtLCBleGVjdXRhYmxl
LCBsZW5ndGgsIG5hbWUsIGluc3RhbmNlKTsKICAgICBSRUxFQVNFX0FTU0VSVChKU1ZhbHVlKGZ1
bmN0aW9uKS5pc0Z1bmN0aW9uKCkpOwogICAgIG1fZnVuY3Rpb24uc2V0KHZtLCB0aGlzLCBmdW5j
dGlvbik7Ci0gICAgbV9jb2RlQmxvY2suc2V0KHZtLCB0aGlzLCBjb2RlQmxvY2spOwogfQogCiBT
dHJ1Y3R1cmUqIFdlYkFzc2VtYmx5V3JhcHBlckZ1bmN0aW9uOjpjcmVhdGVTdHJ1Y3R1cmUoVk0m
IHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlIHByb3RvdHlwZSkKQEAg
LTg4LDcgKzg4LDYgQEAgdm9pZCBXZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlvbjo6dmlzaXRDaAog
ICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKICAgICBC
YXNlOjp2aXNpdENoaWxkcmVuKHRoaXNPYmplY3QsIHZpc2l0b3IpOwogCi0gICAgdmlzaXRvci5h
cHBlbmQodGhpc09iamVjdC0+bV9jb2RlQmxvY2spOwogICAgIHZpc2l0b3IuYXBwZW5kKHRoaXNP
YmplY3QtPm1fZnVuY3Rpb24pOwogfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2Fz
bS9qcy9XZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlvbi5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5V3JhcHBlckZ1bmN0aW9uLmgJKHJldmlz
aW9uIDIxNjk0NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5
V3JhcHBlckZ1bmN0aW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTI3LDIwICsyNywyMCBAQAogCiAj
aWYgRU5BQkxFKFdFQkFTU0VNQkxZKQogCi0jaW5jbHVkZSAiSlNGdW5jdGlvbi5oIgogI2luY2x1
ZGUgIkpTV2ViQXNzZW1ibHlDb2RlQmxvY2suaCIKKyNpbmNsdWRlICJXZWJBc3NlbWJseUZ1bmN0
aW9uQmFzZS5oIgogCiBuYW1lc3BhY2UgSlNDIHsKIAotY2xhc3MgV2ViQXNzZW1ibHlXcmFwcGVy
RnVuY3Rpb24gOiBwdWJsaWMgSlNGdW5jdGlvbiB7CitjbGFzcyBXZWJBc3NlbWJseVdyYXBwZXJG
dW5jdGlvbiA6IHB1YmxpYyBXZWJBc3NlbWJseUZ1bmN0aW9uQmFzZSB7CiBwdWJsaWM6Ci0gICAg
dHlwZWRlZiBKU0Z1bmN0aW9uIEJhc2U7CisgICAgdXNpbmcgQmFzZSA9IFdlYkFzc2VtYmx5RnVu
Y3Rpb25CYXNlOwogCiAgICAgY29uc3Qgc3RhdGljIHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0g
QmFzZTo6U3RydWN0dXJlRmxhZ3M7CiAKICAgICBERUNMQVJFX0lORk87CiAKLSAgICBzdGF0aWMg
V2ViQXNzZW1ibHlXcmFwcGVyRnVuY3Rpb24qIGNyZWF0ZShWTSYsIEpTR2xvYmFsT2JqZWN0Kiwg
SlNPYmplY3QqLCB1bnNpZ25lZCBpbXBvcnRJbmRleCwgSlNXZWJBc3NlbWJseUNvZGVCbG9jayos
IFdhc206OlNpZ25hdHVyZUluZGV4KTsKKyAgICBzdGF0aWMgV2ViQXNzZW1ibHlXcmFwcGVyRnVu
Y3Rpb24qIGNyZWF0ZShWTSYsIEpTR2xvYmFsT2JqZWN0KiwgSlNPYmplY3QqLCB1bnNpZ25lZCBp
bXBvcnRJbmRleCwgSlNXZWJBc3NlbWJseUluc3RhbmNlKiwgV2FzbTo6U2lnbmF0dXJlSW5kZXgp
OwogICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShWTSYsIEpTR2xvYmFsT2Jq
ZWN0KiwgSlNWYWx1ZSk7CiAKICAgICBXYXNtOjpTaWduYXR1cmVJbmRleCBzaWduYXR1cmVJbmRl
eCgpIGNvbnN0IHsgcmV0dXJuIG1fd2FzbUZ1bmN0aW9uLnNpZ25hdHVyZUluZGV4OyB9CkBAIC01
MSwxOCArNTEsMTUgQEAgcHVibGljOgogcHJvdGVjdGVkOgogICAgIHN0YXRpYyB2b2lkIHZpc2l0
Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKIAotICAgIHZvaWQgZmluaXNoQ3JlYXRp
b24oVk0mLCBOYXRpdmVFeGVjdXRhYmxlKiwgdW5zaWduZWQgbGVuZ3RoLCBjb25zdCBTdHJpbmcm
IG5hbWUsIEpTT2JqZWN0KiwgSlNXZWJBc3NlbWJseUNvZGVCbG9jayopOworICAgIHZvaWQgZmlu
aXNoQ3JlYXRpb24oVk0mLCBOYXRpdmVFeGVjdXRhYmxlKiwgdW5zaWduZWQgbGVuZ3RoLCBjb25z
dCBTdHJpbmcmIG5hbWUsIEpTT2JqZWN0KiwgSlNXZWJBc3NlbWJseUluc3RhbmNlKik7CiAKIHBy
aXZhdGU6CiAgICAgV2ViQXNzZW1ibHlXcmFwcGVyRnVuY3Rpb24oVk0mLCBKU0dsb2JhbE9iamVj
dCosIFN0cnVjdHVyZSosIFdhc206OkNhbGxhYmxlRnVuY3Rpb24pOwogCi0gICAgLy8gV2Uga2Vl
cCBhIHJlZmVyZW5jZSB0byBvdXIgQ29kZUJsb2NrIGJlY2F1c2Ugd2UgaGF2ZSBhIHJhdwotICAg
IC8vIHBvaW50ZXIgdG8gYXNtIGNvZGUgdGhhdCBpdCBvd25zLgotICAgIFdyaXRlQmFycmllcjxK
U1dlYkFzc2VtYmx5Q29kZUJsb2NrPiBtX2NvZGVCbG9jazsKICAgICBXcml0ZUJhcnJpZXI8SlNP
YmplY3Q+IG1fZnVuY3Rpb247CiAgICAgLy8gSXQncyBzYWZlIHRvIGp1c3QgaG9sZCB0aGUgcmF3
IENhbGxhYmxlRnVuY3Rpb24gYmVjYXVzZSB3ZSBoYXZlIGEgcmVmZXJlbmNlCi0gICAgLy8gdG8g
b3VyIENvZGVCbG9jaywgd2hpY2ggcG9pbnRzIHRvIHRoZSBNb2R1bGUgdGhhdCBleHBvcnRlZCB1
cywgd2hpY2gKLSAgICAvLyBlbnN1cmVzIHRoYXQgdGhlIGFjdHVhbCBTaWduYXR1cmUvY29kZSBk
b2Vzbid0IGdldCBkZWFsbG9jYXRlZC4KKyAgICAvLyB0byBvdXIgSW5zdGFuY2UsIHdoaWNoIHBv
aW50cyB0byB0aGUgQ29kZUJsb2NrLCB3aGljaCBwb2ludHMgdG8gdGhlIE1vZHVsZQorICAgIC8v
IHRoYXQgZXhwb3J0ZWQgdXMsIHdoaWNoIGVuc3VyZXMgdGhhdCB0aGUgYWN0dWFsIFNpZ25hdHVy
ZS9jb2RlIGRvZXNuJ3QgZ2V0IGRlYWxsb2NhdGVkLgogICAgIFdhc206OkNhbGxhYmxlRnVuY3Rp
b24gbV93YXNtRnVuY3Rpb247CiB9OwogCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>310336</attachid>
            <date>2017-05-16 18:00:58 -0700</date>
            <delta_ts>2017-05-16 18:34:53 -0700</delta_ts>
            <desc>patch</desc>
            <filename>c-backup.diff</filename>
            <type>text/plain</type>
            <size>40522</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IEpTVGVzdHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEpTVGVzdHMvQ2hhbmdlTG9n
CShyZXZpc2lvbiAyMTY5NjApCisrKyBKU1Rlc3RzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpA
QCAtMSwzICsxLDIxIEBACisyMDE3LTA1LTE2ICBTYWFtIEJhcmF0aSAgPHNiYXJhdGlAYXBwbGUu
Y29tPgorCisgICAgICAgIFdlIGRvbid0IGRvIGNvbnRleHQgc3dpdGNoZXMgZm9yIFdhc20tPldh
c20gY2FsbCBpbmRpcmVjdAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MTcyMTg4CisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS8zMjIzMTgyOD4KKworICAg
ICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIHdhc20vZnVuY3Rp
b24tdGVzdHMvY29udGV4dC1zd2l0Y2guanM6IEFkZGVkLgorICAgICAgICAoaW1wb3J0LkJ1aWxk
ZXIuZnJvbS5zdHJpbmdfYXBwZWFyZWRfaGVyZS5pbXBvcnQuYXMuYXNzZXJ0LmZyb20uc3RyaW5n
X2FwcGVhcmVkX2hlcmUubWFrZUluc3RhbmNlKToKKyAgICAgICAgKGltcG9ydC5CdWlsZGVyLmZy
b20uc3RyaW5nX2FwcGVhcmVkX2hlcmUuaW1wb3J0LmFzLmFzc2VydC5mcm9tLnN0cmluZ19hcHBl
YXJlZF9oZXJlLm1ha2VJbnN0YW5jZTIpOgorICAgICAgICAoaW1wb3J0LkJ1aWxkZXIuZnJvbS5z
dHJpbmdfYXBwZWFyZWRfaGVyZS5pbXBvcnQuYXMuYXNzZXJ0LmZyb20uc3RyaW5nX2FwcGVhcmVk
X2hlcmUuY29uc3QuaTIubWFrZUluc3RhbmNlMik6CisgICAgICAgIChtYWtlSW5zdGFuY2UpOgor
ICAgICAgICAobWFrZUluc3RhbmNlMik6CisgICAgICAgIChhc3NlcnQuZXEubWFrZUluc3RhbmNl
KToKKyAgICAgICAgKGFzc2VydC5lcS5tYWtlSW5zdGFuY2UyKToKKyAgICAgICAgKGFzc2VydC5l
cSk6CisKIDIwMTctMDUtMTYgIFl1c3VrZSBTdXp1a2kgIDx1dGF0YW5lLnRlYUBnbWFpbC5jb20+
CiAKICAgICAgICAgW0RGR10gQ29uc3RhbnQgRm9sZGluZyBQaGFzZSBzaG91bGQgY29udmVydCBN
YWtlUm9wZSgiIiwgU3RyaW5nKSA9PiBJZGVudGl0eShTdHJpbmcpCkluZGV4OiBKU1Rlc3RzL3dh
c20vZnVuY3Rpb24tdGVzdHMvY29udGV4dC1zd2l0Y2guanMKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSlNUZXN0
cy93YXNtL2Z1bmN0aW9uLXRlc3RzL2NvbnRleHQtc3dpdGNoLmpzCShub25leGlzdGVudCkKKysr
IEpTVGVzdHMvd2FzbS9mdW5jdGlvbi10ZXN0cy9jb250ZXh0LXN3aXRjaC5qcwkod29ya2luZyBj
b3B5KQpAQCAtMCwwICsxLDI3NyBAQAoraW1wb3J0IEJ1aWxkZXIgZnJvbSAnLi4vQnVpbGRlci5q
cycKK2ltcG9ydCAqIGFzIGFzc2VydCBmcm9tICcuLi9hc3NlcnQuanMnCisKK3sKKyAgICBmdW5j
dGlvbiBtYWtlSW5zdGFuY2UoKSB7CisgICAgICAgIGNvbnN0IHRhYmxlRGVzY3JpcHRpb24gPSB7
aW5pdGlhbDogMSwgZWxlbWVudDogImFueWZ1bmMifTsKKyAgICAgICAgY29uc3QgYnVpbGRlciA9
IG5ldyBCdWlsZGVyKCkKKyAgICAgICAgICAgIC5UeXBlKCkKKyAgICAgICAgICAgICAgICAuRnVu
YyhbXSwgInZvaWQiKQorICAgICAgICAgICAgLkVuZCgpCisgICAgICAgICAgICAuSW1wb3J0KCkK
KyAgICAgICAgICAgICAgICAuVGFibGUoImltcCIsICJ0YWJsZSIsIHRhYmxlRGVzY3JpcHRpb24p
CisgICAgICAgICAgICAuRW5kKCkKKyAgICAgICAgICAgIC5GdW5jdGlvbigpLkVuZCgpCisgICAg
ICAgICAgICAuRXhwb3J0KCkKKyAgICAgICAgICAgICAgICAuRnVuY3Rpb24oImZvbyIpCisgICAg
ICAgICAgICAuRW5kKCkKKyAgICAgICAgICAgIC5Db2RlKCkKKyAgICAgICAgICAgICAgICAuRnVu
Y3Rpb24oImZvbyIsIHtwYXJhbXM6WyJpMzIiXSwgcmV0OiJ2b2lkIn0pCisgICAgICAgICAgICAg
ICAgICAgIC5HZXRMb2NhbCgwKSAvLyBwYXJhbWV0ZXIgdG8gY2FsbAorICAgICAgICAgICAgICAg
ICAgICAuR2V0TG9jYWwoMCkgLy8gY2FsbCBpbmRleAorICAgICAgICAgICAgICAgICAgICAuQ2Fs
bEluZGlyZWN0KDAsIDApIC8vIGNhbGxpbmcgZnVuY3Rpb24gb2YgdHlwZSBbXSA9PiAndm9pZCcK
KyAgICAgICAgICAgICAgICAgICAgLlJldHVybigpCisgICAgICAgICAgICAgICAgLkVuZCgpCisg
ICAgICAgICAgICAuRW5kKCk7CisKKworICAgICAgICBjb25zdCBiaW4gPSBidWlsZGVyLldlYkFz
c2VtYmx5KCkuZ2V0KCk7CisgICAgICAgIGNvbnN0IG1vZHVsZSA9IG5ldyBXZWJBc3NlbWJseS5N
b2R1bGUoYmluKTsKKyAgICAgICAgY29uc3QgdGFibGUgPSBuZXcgV2ViQXNzZW1ibHkuVGFibGUo
dGFibGVEZXNjcmlwdGlvbik7CisgICAgICAgIHJldHVybiB7aW5zdGFuY2U6IG5ldyBXZWJBc3Nl
bWJseS5JbnN0YW5jZShtb2R1bGUsIHtpbXA6IHt0YWJsZX19KSwgdGFibGV9OworICAgIH0KKwor
ICAgIGZ1bmN0aW9uIG1ha2VJbnN0YW5jZTIoZikgeworICAgICAgICBjb25zdCBidWlsZGVyID0g
bmV3IEJ1aWxkZXIoKQorICAgICAgICAgICAgLlR5cGUoKQorICAgICAgICAgICAgLkVuZCgpCisg
ICAgICAgICAgICAuSW1wb3J0KCkKKyAgICAgICAgICAgICAgICAuRnVuY3Rpb24oImltcCIsICJm
Iiwge3BhcmFtczpbXSwgcmV0OiJ2b2lkIn0pCisgICAgICAgICAgICAuRW5kKCkKKyAgICAgICAg
ICAgIC5GdW5jdGlvbigpLkVuZCgpCisgICAgICAgICAgICAuRXhwb3J0KCkKKyAgICAgICAgICAg
ICAgICAuRnVuY3Rpb24oImZvbyIpCisgICAgICAgICAgICAuRW5kKCkKKyAgICAgICAgICAgIC5D
b2RlKCkKKyAgICAgICAgICAgICAgICAuRnVuY3Rpb24oImZvbyIsIHtwYXJhbXM6IFtdLCByZXQ6
ICJ2b2lkIiB9KQorICAgICAgICAgICAgICAgICAgICAuQ2FsbCgwKQorICAgICAgICAgICAgICAg
ICAgICAuUmV0dXJuKCkKKyAgICAgICAgICAgICAgICAuRW5kKCkKKyAgICAgICAgICAgIC5FbmQo
KTsKKworCisgICAgICAgIGNvbnN0IGJpbiA9IGJ1aWxkZXIuV2ViQXNzZW1ibHkoKS5nZXQoKTsK
KyAgICAgICAgY29uc3QgbW9kdWxlID0gbmV3IFdlYkFzc2VtYmx5Lk1vZHVsZShiaW4pOworICAg
ICAgICByZXR1cm4gbmV3IFdlYkFzc2VtYmx5Lkluc3RhbmNlKG1vZHVsZSwge2ltcDoge2Z9fSk7
CisgICAgfQorCisgICAgY29uc3Qge2luc3RhbmNlOiBpMSwgdGFibGU6IHQxfSA9IG1ha2VJbnN0
YW5jZSgpOworICAgIGNvbnN0IGZvbyA9IGkxLmV4cG9ydHMuZm9vOworCisgICAgbGV0IGNhbGxl
ZCA9IGZhbHNlOworICAgIGxldCBzaG91bGRUaHJvdyA9IGZhbHNlOworICAgIGNvbnN0IGkyID0g
bWFrZUluc3RhbmNlMihmdW5jdGlvbigpIHsKKyAgICAgICAgY2FsbGVkID0gdHJ1ZTsKKyAgICAg
ICAgaWYgKHNob3VsZFRocm93KQorICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJUaHJldyIp
OworICAgIH0pOworCisgICAgdDEuc2V0KDAsIGkyLmV4cG9ydHMuZm9vKTsKKyAgICBmb3IgKGxl
dCBpID0gMDsgaSA8IDEwMDA7ICsraSkgeworICAgICAgICBmb28oMCk7CisgICAgICAgIGFzc2Vy
dC5lcShjYWxsZWQsIHRydWUpOworICAgICAgICBjYWxsZWQgPSBmYWxzZTsKKyAgICB9CisgICAg
c2hvdWxkVGhyb3cgPSB0cnVlOworICAgIGZvciAobGV0IGkgPSAwOyBpIDwgMTAwMDsgKytpKSB7
CisgICAgICAgIGFzc2VydC50aHJvd3MoKCkgPT4gZm9vKDApLCBFcnJvciwgIlRocmV3Iik7Cisg
ICAgICAgIGFzc2VydC5lcShjYWxsZWQsIHRydWUpOworICAgICAgICBjYWxsZWQgPSBmYWxzZTsK
KyAgICB9Cit9CisKK3sKKyAgICBmdW5jdGlvbiBtYWtlSW5zdGFuY2UoKSB7CisgICAgICAgIGNv
bnN0IHRhYmxlRGVzY3JpcHRpb24gPSB7aW5pdGlhbDogMSwgZWxlbWVudDogImFueWZ1bmMifTsK
KyAgICAgICAgY29uc3QgYnVpbGRlciA9IG5ldyBCdWlsZGVyKCkKKyAgICAgICAgICAgIC5UeXBl
KCkKKyAgICAgICAgICAgICAgICAuRnVuYyhbImkzMiJdLCAidm9pZCIpCisgICAgICAgICAgICAu
RW5kKCkKKyAgICAgICAgICAgIC5JbXBvcnQoKQorICAgICAgICAgICAgICAgIC5UYWJsZSgiaW1w
IiwgInRhYmxlIiwgdGFibGVEZXNjcmlwdGlvbikKKyAgICAgICAgICAgIC5FbmQoKQorICAgICAg
ICAgICAgLkZ1bmN0aW9uKCkuRW5kKCkKKyAgICAgICAgICAgIC5FeHBvcnQoKQorICAgICAgICAg
ICAgICAgIC5GdW5jdGlvbigiZm9vIikKKyAgICAgICAgICAgIC5FbmQoKQorICAgICAgICAgICAg
LkNvZGUoKQorICAgICAgICAgICAgICAgIC5GdW5jdGlvbigiZm9vIiwge3BhcmFtczpbImkzMiIs
ICJpMzIiXSwgcmV0OiJ2b2lkIn0pCisgICAgICAgICAgICAgICAgICAgIC5HZXRMb2NhbCgxKSAv
LyBwYXJhbWV0ZXIgdG8gY2FsbAorICAgICAgICAgICAgICAgICAgICAuR2V0TG9jYWwoMCkgLy8g
Y2FsbCBpbmRleAorICAgICAgICAgICAgICAgICAgICAuQ2FsbEluZGlyZWN0KDAsIDApIC8vIGNh
bGxpbmcgZnVuY3Rpb24gb2YgdHlwZSBbJ2kzMiddID0+ICd2b2lkJworICAgICAgICAgICAgICAg
ICAgICAuUmV0dXJuKCkKKyAgICAgICAgICAgICAgICAuRW5kKCkKKyAgICAgICAgICAgIC5FbmQo
KTsKKworICAgICAgICBjb25zdCBiaW4gPSBidWlsZGVyLldlYkFzc2VtYmx5KCkuZ2V0KCk7Cisg
ICAgICAgIGNvbnN0IG1vZHVsZSA9IG5ldyBXZWJBc3NlbWJseS5Nb2R1bGUoYmluKTsKKyAgICAg
ICAgY29uc3QgdGFibGUgPSBuZXcgV2ViQXNzZW1ibHkuVGFibGUodGFibGVEZXNjcmlwdGlvbik7
CisgICAgICAgIHJldHVybiB7aW5zdGFuY2U6IG5ldyBXZWJBc3NlbWJseS5JbnN0YW5jZShtb2R1
bGUsIHtpbXA6IHt0YWJsZX19KSwgdGFibGV9OworICAgIH0KKworICAgIGZ1bmN0aW9uIG1ha2VJ
bnN0YW5jZTIobWVtb3J5LCBmKSB7CisgICAgICAgIGNvbnN0IGJ1aWxkZXIgPSBuZXcgQnVpbGRl
cigpCisgICAgICAgICAgICAuVHlwZSgpCisgICAgICAgICAgICAuRW5kKCkKKyAgICAgICAgICAg
IC5JbXBvcnQoKQorICAgICAgICAgICAgICAgIC5GdW5jdGlvbigiaW1wIiwgImYiLCB7cGFyYW1z
OlsnaTMyJywgJ2kzMiddLCByZXQ6InZvaWQifSkKKyAgICAgICAgICAgICAgICAuTWVtb3J5KCJp
bXAiLCAibWVtb3J5IiwgbWVtb3J5RGVzY3JpcHRpb24pCisgICAgICAgICAgICAuRW5kKCkKKyAg
ICAgICAgICAgIC5GdW5jdGlvbigpLkVuZCgpCisgICAgICAgICAgICAuRXhwb3J0KCkKKyAgICAg
ICAgICAgICAgICAuRnVuY3Rpb24oImZvbyIpCisgICAgICAgICAgICAuRW5kKCkKKyAgICAgICAg
ICAgIC5Db2RlKCkKKyAgICAgICAgICAgICAgICAuRnVuY3Rpb24oImZvbyIsIHtwYXJhbXM6IFsi
aTMyIl0sIHJldDogInZvaWQiIH0pCisgICAgICAgICAgICAgICAgICAgIC5HZXRMb2NhbCgwKQor
ICAgICAgICAgICAgICAgICAgICAuR2V0TG9jYWwoMCkKKyAgICAgICAgICAgICAgICAgICAgLkkz
MkxvYWQoMiwgMCkKKyAgICAgICAgICAgICAgICAgICAgLkNhbGwoMCkKKyAgICAgICAgICAgICAg
ICAgICAgLlJldHVybigpCisgICAgICAgICAgICAgICAgLkVuZCgpCisgICAgICAgICAgICAuRW5k
KCk7CisKKworICAgICAgICBjb25zdCBiaW4gPSBidWlsZGVyLldlYkFzc2VtYmx5KCkuZ2V0KCk7
CisgICAgICAgIGNvbnN0IG1vZHVsZSA9IG5ldyBXZWJBc3NlbWJseS5Nb2R1bGUoYmluKTsKKyAg
ICAgICAgcmV0dXJuIG5ldyBXZWJBc3NlbWJseS5JbnN0YW5jZShtb2R1bGUsIHtpbXA6IHtmLCBt
ZW1vcnl9fSk7CisgICAgfQorCisgICAgY29uc3Qge2luc3RhbmNlOiBpMSwgdGFibGU6IHQxfSA9
IG1ha2VJbnN0YW5jZSgpOworICAgIGNvbnN0IGZvbyA9IChtZW1PZmZzZXQpID0+IGkxLmV4cG9y
dHMuZm9vKDAsIG1lbU9mZnNldCk7CisKKyAgICBjb25zdCBtZW1vcnlEZXNjcmlwdGlvbiA9IHtp
bml0aWFsOjF9OworICAgIGNvbnN0IG1lbSA9IG5ldyBXZWJBc3NlbWJseS5NZW1vcnkobWVtb3J5
RGVzY3JpcHRpb24pOworICAgIGxldCBjYWxsZWQgPSBmYWxzZTsKKworICAgIGNvbnN0IHBhZ2VT
aXplID0gNjQgKiAxMDI0OworICAgIGxldCBidWYgPSBuZXcgVWludDMyQXJyYXkobWVtLmJ1ZmZl
cik7CisgICAgY29uc3QgaTIgPSBtYWtlSW5zdGFuY2UyKG1lbSwgZnVuY3Rpb24oaSwgdmFsdWUp
IHsKKyAgICAgICAgYXNzZXJ0LmVxKGkgJiAzLCAwKTsKKyAgICAgICAgYXNzZXJ0LmVxKGJ1Zltp
LzRdLCB2YWx1ZSk7CisgICAgICAgIGNhbGxlZCA9IHRydWU7CisgICAgfSk7CisgICAgdDEuc2V0
KDAsIGkyLmV4cG9ydHMuZm9vKTsKKyAgICAKKyAgICBmb3IgKGxldCBpID0gMDsgaSA8IHBhZ2VT
aXplLzQ7ICsraSkgeworICAgICAgICBidWZbaV0gPSBpKzE7CisgICAgfQorCisgICAgZm9yIChs
ZXQgaSA9IDA7IGkgPCBwYWdlU2l6ZS80OyArK2kpIHsKKyAgICAgICAgZm9vKGkqNCk7CisgICAg
ICAgIGFzc2VydC5lcShjYWxsZWQsIHRydWUpOworICAgICAgICBjYWxsZWQgPSBmYWxzZTsKKyAg
ICB9CisKKyAgICBmb3IgKGxldCBpID0gcGFnZVNpemUvNDsgaSA8IDIqcGFnZVNpemUvNDsgKytp
KSB7CisgICAgICAgIGFzc2VydC50aHJvd3MoKCkgPT4gZm9vKGkqNCksIFdlYkFzc2VtYmx5LlJ1
bnRpbWVFcnJvciwgIk91dCBvZiBib3VuZHMgbWVtb3J5IGFjY2VzcyIpOworICAgICAgICBhc3Nl
cnQuZXEoY2FsbGVkLCBmYWxzZSk7CisgICAgfQorfQorCit7CisgICAgZnVuY3Rpb24gbWFrZUlu
c3RhbmNlKCkgeworICAgICAgICBjb25zdCB0YWJsZURlc2NyaXB0aW9uID0ge2luaXRpYWw6IDEs
IGVsZW1lbnQ6ICJhbnlmdW5jIn07CisgICAgICAgIGNvbnN0IGJ1aWxkZXIgPSBuZXcgQnVpbGRl
cigpCisgICAgICAgICAgICAuVHlwZSgpCisgICAgICAgICAgICAgICAgLkZ1bmMoWyJpMzIiXSwg
InZvaWQiKQorICAgICAgICAgICAgLkVuZCgpCisgICAgICAgICAgICAuSW1wb3J0KCkKKyAgICAg
ICAgICAgICAgICAuVGFibGUoImltcCIsICJ0YWJsZSIsIHRhYmxlRGVzY3JpcHRpb24pCisgICAg
ICAgICAgICAuRW5kKCkKKyAgICAgICAgICAgIC5GdW5jdGlvbigpLkVuZCgpCisgICAgICAgICAg
ICAuRXhwb3J0KCkKKyAgICAgICAgICAgICAgICAuRnVuY3Rpb24oImZvbyIpCisgICAgICAgICAg
ICAuRW5kKCkKKyAgICAgICAgICAgIC5Db2RlKCkKKyAgICAgICAgICAgICAgICAuRnVuY3Rpb24o
ImZvbyIsIHtwYXJhbXM6WyJpMzIiLCAiaTMyIl0sIHJldDoidm9pZCJ9KQorICAgICAgICAgICAg
ICAgICAgICAuR2V0TG9jYWwoMSkgLy8gcGFyYW1ldGVyIHRvIGNhbGwKKyAgICAgICAgICAgICAg
ICAgICAgLkdldExvY2FsKDApIC8vIGNhbGwgaW5kZXgKKyAgICAgICAgICAgICAgICAgICAgLkNh
bGxJbmRpcmVjdCgwLCAwKSAvLyBjYWxsaW5nIGZ1bmN0aW9uIG9mIHR5cGUgWydpMzInXSA9PiAn
dm9pZCcKKyAgICAgICAgICAgICAgICAgICAgLlJldHVybigpCisgICAgICAgICAgICAgICAgLkVu
ZCgpCisgICAgICAgICAgICAuRW5kKCk7CisKKyAgICAgICAgY29uc3QgYmluID0gYnVpbGRlci5X
ZWJBc3NlbWJseSgpLmdldCgpOworICAgICAgICBjb25zdCBtb2R1bGUgPSBuZXcgV2ViQXNzZW1i
bHkuTW9kdWxlKGJpbik7CisgICAgICAgIGNvbnN0IHRhYmxlID0gbmV3IFdlYkFzc2VtYmx5LlRh
YmxlKHRhYmxlRGVzY3JpcHRpb24pOworICAgICAgICByZXR1cm4ge2luc3RhbmNlOiBuZXcgV2Vi
QXNzZW1ibHkuSW5zdGFuY2UobW9kdWxlLCB7aW1wOiB7dGFibGV9fSksIHRhYmxlfTsKKyAgICB9
CisKKyAgICBmdW5jdGlvbiBtYWtlSW5zdGFuY2UyKG1lbW9yeSwgZikgeworICAgICAgICBjb25z
dCBidWlsZGVyID0gbmV3IEJ1aWxkZXIoKQorICAgICAgICAgICAgLlR5cGUoKQorICAgICAgICAg
ICAgLkVuZCgpCisgICAgICAgICAgICAuSW1wb3J0KCkKKyAgICAgICAgICAgICAgICAuRnVuY3Rp
b24oImltcCIsICJmIiwge3BhcmFtczpbJ2kzMicsICdpMzInXSwgcmV0OiJ2b2lkIn0pCisgICAg
ICAgICAgICAgICAgLk1lbW9yeSgiaW1wIiwgIm1lbW9yeSIsIG1lbW9yeURlc2NyaXB0aW9uKQor
ICAgICAgICAgICAgLkVuZCgpCisgICAgICAgICAgICAuRnVuY3Rpb24oKS5FbmQoKQorICAgICAg
ICAgICAgLkV4cG9ydCgpCisgICAgICAgICAgICAgICAgLkZ1bmN0aW9uKCJmb28iKQorICAgICAg
ICAgICAgLkVuZCgpCisgICAgICAgICAgICAuQ29kZSgpCisgICAgICAgICAgICAgICAgLkZ1bmN0
aW9uKCJmb28iLCB7cGFyYW1zOiBbImkzMiJdLCByZXQ6ICJ2b2lkIiB9KQorICAgICAgICAgICAg
ICAgICAgICAuR2V0TG9jYWwoMCkKKyAgICAgICAgICAgICAgICAgICAgLkdldExvY2FsKDApCisg
ICAgICAgICAgICAgICAgICAgIC5JMzJMb2FkKDIsIDApCisgICAgICAgICAgICAgICAgICAgIC5D
YWxsKDApCisgICAgICAgICAgICAgICAgICAgIC5SZXR1cm4oKQorICAgICAgICAgICAgICAgIC5F
bmQoKQorICAgICAgICAgICAgLkVuZCgpOworCisKKyAgICAgICAgY29uc3QgYmluID0gYnVpbGRl
ci5XZWJBc3NlbWJseSgpLmdldCgpOworICAgICAgICBjb25zdCBtb2R1bGUgPSBuZXcgV2ViQXNz
ZW1ibHkuTW9kdWxlKGJpbik7CisgICAgICAgIHJldHVybiBuZXcgV2ViQXNzZW1ibHkuSW5zdGFu
Y2UobW9kdWxlLCB7aW1wOiB7ZiwgbWVtb3J5fX0pOworICAgIH0KKworICAgIGZ1bmN0aW9uIGV4
cG9ydEltcG9ydChmKSB7CisgICAgICAgIGxldCBidWlsZGVyID0gKG5ldyBCdWlsZGVyKCkpCisg
ICAgICAgICAgICAuVHlwZSgpLkVuZCgpCisgICAgICAgICAgICAuSW1wb3J0KCkKKyAgICAgICAg
ICAgICAgICAuRnVuY3Rpb24oImltcCIsICJmIiwge3BhcmFtczogWydpMzInXSwgcmV0OiJ2b2lk
In0pCisgICAgICAgICAgICAuRW5kKCkKKyAgICAgICAgICAgIC5GdW5jdGlvbigpLkVuZCgpCisg
ICAgICAgICAgICAuRXhwb3J0KCkKKyAgICAgICAgICAgICAgICAuRnVuY3Rpb24oImZ1bmMiLCB7
bW9kdWxlOiAiaW1wIiwgZmllbGQ6ICJmIn0pCisgICAgICAgICAgICAuRW5kKCkKKyAgICAgICAg
ICAgIC5Db2RlKCkuRW5kKCk7CisgICAgICAgIHJldHVybiAobmV3IFdlYkFzc2VtYmx5Lkluc3Rh
bmNlKG5ldyBXZWJBc3NlbWJseS5Nb2R1bGUoYnVpbGRlci5XZWJBc3NlbWJseSgpLmdldCgpKSwg
e2ltcDoge2Z9fSkpLmV4cG9ydHMuZnVuYzsKKyAgICB9CisKKyAgICBjb25zdCB7aW5zdGFuY2U6
IGkxLCB0YWJsZTogdDF9ID0gbWFrZUluc3RhbmNlKCk7CisgICAgY29uc3QgZm9vID0gKG1lbU9m
ZnNldCkgPT4gaTEuZXhwb3J0cy5mb28oMCwgbWVtT2Zmc2V0KTsKKworICAgIGNvbnN0IG1lbW9y
eURlc2NyaXB0aW9uID0ge2luaXRpYWw6MX07CisgICAgY29uc3QgbWVtID0gbmV3IFdlYkFzc2Vt
Ymx5Lk1lbW9yeShtZW1vcnlEZXNjcmlwdGlvbik7CisgICAgbGV0IGNhbGxlZCA9IGZhbHNlOwor
CisgICAgY29uc3QgcGFnZVNpemUgPSA2NCAqIDEwMjQ7CisgICAgbGV0IGJ1ZiA9IG5ldyBVaW50
MzJBcnJheShtZW0uYnVmZmVyKTsKKyAgICBjb25zdCBpMiA9IG1ha2VJbnN0YW5jZTIobWVtLCBm
dW5jdGlvbihpLCB2YWx1ZSkgeworICAgICAgICBhc3NlcnQuZXEoaSAmIDMsIDApOworICAgICAg
ICBhc3NlcnQuZXEoYnVmW2kvNF0sIHZhbHVlKTsKKyAgICAgICAgY2FsbGVkID0gdHJ1ZTsKKyAg
ICB9KTsKKworICAgIGNvbnN0IGV4cG9ydGVkSW1wb3J0ID0gZXhwb3J0SW1wb3J0KGZ1bmN0aW9u
KG9mZnNldCkgeworICAgICAgICBpMi5leHBvcnRzLmZvbyhvZmZzZXQpOworICAgIH0pOworICAg
IHQxLnNldCgwLCBleHBvcnRlZEltcG9ydCk7CisgICAgCisgICAgZm9yIChsZXQgaSA9IDA7IGkg
PCBwYWdlU2l6ZS80OyArK2kpIHsKKyAgICAgICAgYnVmW2ldID0gaSsxOworICAgIH0KKworICAg
IGZvciAobGV0IGkgPSAwOyBpIDwgcGFnZVNpemUvNDsgKytpKSB7CisgICAgICAgIGZvbyhpKjQp
OworICAgICAgICBhc3NlcnQuZXEoY2FsbGVkLCB0cnVlKTsKKyAgICAgICAgY2FsbGVkID0gZmFs
c2U7CisgICAgfQorCisgICAgZm9yIChsZXQgaSA9IHBhZ2VTaXplLzQ7IGkgPCAyKnBhZ2VTaXpl
LzQ7ICsraSkgeworICAgICAgICBhc3NlcnQudGhyb3dzKCgpID0+IGZvbyhpKjQpLCBXZWJBc3Nl
bWJseS5SdW50aW1lRXJyb3IsICJPdXQgb2YgYm91bmRzIG1lbW9yeSBhY2Nlc3MiKTsKKyAgICAg
ICAgYXNzZXJ0LmVxKGNhbGxlZCwgZmFsc2UpOworICAgIH0KK30KSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L0NoYW5nZUxvZwkocmV2aXNpb24gMjE2OTQ3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0No
YW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDQ1IEBACisyMDE3LTA1LTE2ICBTYWFt
IEJhcmF0aSAgPHNiYXJhdGlAYXBwbGUuY29tPgorCisgICAgICAgIFdlIGRvbid0IGRvIGNvbnRl
eHQgc3dpdGNoZXMgZm9yIFdhc20tPldhc20gY2FsbCBpbmRpcmVjdAorICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTcyMTg4CisgICAgICAgIDxyZGFyOi8v
cHJvYmxlbS8zMjIzMTgyOD4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4K
KworICAgICAgICBXZSBkaWQgbm90IGRvIGEgY29udGV4dCBzd2l0Y2ggd2hlbiBkb2luZyBhbiBp
bmRpcmVjdCBjYWxsLiAKKyAgICAgICAgVGhpcyBpcyBjbGVhcmx5IHdyb25nLCBzaW5jZSB0aGUg
dGhpbmcgd2UncmUgbWFraW5nIGFuIGluZGlyZWN0CisgICAgICAgIGNhbGwgdG8gY291bGQgYmUg
ZnJvbSBhbm90aGVyIGluc3RhbmNlLiBUaGlzIHBhdGNoIGZpeGVzIHRoaXMKKyAgICAgICAgb3Zl
cnNpZ2h0IGJ5IGRvaW5nIGEgdmVyeSBzaW1wbGUgY29udGV4dCBzd2l0Y2guIEkndmUgYWxzbyBv
cGVuZWQKKyAgICAgICAgYSBidWcgdG8gbWFrZSBpbmRpcmVjdCBjYWxscyBmYXN0OiBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTcyMTk3CisgICAgICAgIHNpbmNlIHRo
aXMgcGF0Y2ggYWRkcyB5ZXQgYW5vdGhlciBicmFuY2ggdG8gdGhlIGluZGlyZWN0IGNhbGwgcGF0
aC4KKyAgICAgICAgSSd2ZSBhbHNvIGFkZGVkIHRlc3RzIHRoYXQgZWl0aGVyIHRocm93IG9yIGNy
YXNoIGJlZm9yZSB0aGlzIGNoYW5nZS4KKworICAgICAgICAqIEphdmFTY3JpcHRDb3JlLnhjb2Rl
cHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogd2FzbS9XYXNtQjNJUkdlbmVyYXRvci5j
cHA6CisgICAgICAgICogd2FzbS9qcy9KU1dlYkFzc2VtYmx5VGFibGUuaDoKKyAgICAgICAgKEpT
Qzo6SlNXZWJBc3NlbWJseVRhYmxlOjpvZmZzZXRPZkpTRnVuY3Rpb25zKToKKyAgICAgICAgKiB3
YXNtL2pzL1dlYkFzc2VtYmx5RnVuY3Rpb24uY3BwOgorICAgICAgICAoSlNDOjpXZWJBc3NlbWJs
eUZ1bmN0aW9uOjp2aXNpdENoaWxkcmVuKToKKyAgICAgICAgKEpTQzo6V2ViQXNzZW1ibHlGdW5j
dGlvbjo6ZmluaXNoQ3JlYXRpb24pOiBEZWxldGVkLgorICAgICAgICAqIHdhc20vanMvV2ViQXNz
ZW1ibHlGdW5jdGlvbi5oOgorICAgICAgICAoSlNDOjpXZWJBc3NlbWJseUZ1bmN0aW9uOjppbnN0
YW5jZSk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OldlYkFzc2VtYmx5RnVuY3Rpb246Om9mZnNl
dE9mSW5zdGFuY2UpOiBEZWxldGVkLgorICAgICAgICAqIHdhc20vanMvV2ViQXNzZW1ibHlGdW5j
dGlvbkJhc2UuY3BwOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6V2ViQXNzZW1ibHlGdW5jdGlvbkJh
c2U6OldlYkFzc2VtYmx5RnVuY3Rpb25CYXNlKToKKyAgICAgICAgKEpTQzo6V2ViQXNzZW1ibHlG
dW5jdGlvbkJhc2U6OnZpc2l0Q2hpbGRyZW4pOgorICAgICAgICAoSlNDOjpXZWJBc3NlbWJseUZ1
bmN0aW9uQmFzZTo6ZmluaXNoQ3JlYXRpb24pOgorICAgICAgICAqIHdhc20vanMvV2ViQXNzZW1i
bHlGdW5jdGlvbkJhc2UuaDogQWRkZWQuCisgICAgICAgIChKU0M6OldlYkFzc2VtYmx5RnVuY3Rp
b25CYXNlOjppbnN0YW5jZSk6CisgICAgICAgIChKU0M6OldlYkFzc2VtYmx5RnVuY3Rpb25CYXNl
OjpvZmZzZXRPZkluc3RhbmNlKToKKyAgICAgICAgKiB3YXNtL2pzL1dlYkFzc2VtYmx5TW9kdWxl
UmVjb3JkLmNwcDoKKyAgICAgICAgKEpTQzo6V2ViQXNzZW1ibHlNb2R1bGVSZWNvcmQ6Omxpbmsp
OgorICAgICAgICAoSlNDOjpXZWJBc3NlbWJseU1vZHVsZVJlY29yZDo6ZXZhbHVhdGUpOgorICAg
ICAgICAqIHdhc20vanMvV2ViQXNzZW1ibHlXcmFwcGVyRnVuY3Rpb24uY3BwOgorICAgICAgICAo
SlNDOjpXZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlvbjo6Y3JlYXRlKToKKyAgICAgICAgKEpTQzo6
V2ViQXNzZW1ibHlXcmFwcGVyRnVuY3Rpb246OmZpbmlzaENyZWF0aW9uKToKKyAgICAgICAgKEpT
Qzo6V2ViQXNzZW1ibHlXcmFwcGVyRnVuY3Rpb246OnZpc2l0Q2hpbGRyZW4pOgorICAgICAgICAq
IHdhc20vanMvV2ViQXNzZW1ibHlXcmFwcGVyRnVuY3Rpb24uaDoKKwogMjAxNy0wNS0xNiAgWXVz
dWtlIFN1enVraSAgPHV0YXRhbmUudGVhQGdtYWlsLmNvbT4KIAogICAgICAgICBVbnJldmlld2Vk
LCBhZGQgT2JqZWN0aXZlIEMgZmlsZXMgdG8gQ01ha2UgTWFjIHBvcnQKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvQ01ha2VMaXN0cy50eHQJKHJldmlzaW9uIDIxNjk0NykKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAkod29ya2luZyBjb3B5KQpAQCAtOTgxLDYgKzk4MSw3
IEBAIHNldChKYXZhU2NyaXB0Q29yZV9TT1VSQ0VTCiAgICAgd2FzbS9qcy9XZWJBc3NlbWJseUNv
bXBpbGVFcnJvckNvbnN0cnVjdG9yLmNwcAogICAgIHdhc20vanMvV2ViQXNzZW1ibHlDb21waWxl
RXJyb3JQcm90b3R5cGUuY3BwCiAgICAgd2FzbS9qcy9XZWJBc3NlbWJseUZ1bmN0aW9uLmNwcAor
ICAgIHdhc20vanMvV2ViQXNzZW1ibHlGdW5jdGlvbkJhc2UuY3BwCiAgICAgd2FzbS9qcy9XZWJB
c3NlbWJseUluc3RhbmNlQ29uc3RydWN0b3IuY3BwCiAgICAgd2FzbS9qcy9XZWJBc3NlbWJseUlu
c3RhbmNlUHJvdG90eXBlLmNwcAogICAgIHdhc20vanMvV2ViQXNzZW1ibHlMaW5rRXJyb3JDb25z
dHJ1Y3Rvci5jcHAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54
Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAy
MTY5NDcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9q
L3Byb2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAtMTMyNSw2ICsxMzI1LDggQEAKIAkJ
NDQ0M0FFMzMxNkUxODhEOTAwNzZGMTEwIC8qIEZvdW5kYXRpb24uZnJhbWV3b3JrIGluIEZyYW1l
d29ya3MgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTFGMEVCNjEwNUM4NkM2
QjAwRTZERjFCIC8qIEZvdW5kYXRpb24uZnJhbWV3b3JrICovOyB9OwogCQk0NTE1MzlCOTEyREM5
OTQ1MDBFRjdBQzQgLyogWWFyci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gNDUxNTM5QjgxMkRDOTk0NTAwRUY3QUM0IC8qIFlhcnIuaCAqLzsgc2V0dGlu
Z3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk0NzNEQTRBNDc2NEM0NUZF
ODcxQjA0ODUgLyogRGVmaW5lUHJvcGVydHlBdHRyaWJ1dGVzLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxNjk5NDhFREU2OEQ0MDU0QjAxRUY3OTcgLyog
RGVmaW5lUHJvcGVydHlBdHRyaWJ1dGVzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAo
UHJpdmF0ZSwgKTsgfTsgfTsKKwkJNTIxMzIyNDUxRUNCQ0U4MjAwRjY1NjE1IC8qIFdlYkFzc2Vt
Ymx5RnVuY3Rpb25CYXNlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDUyMTMyMjQzMUVDQkNFODIwMEY2NTYxNSAvKiBXZWJBc3NlbWJseUZ1bmN0aW9u
QmFzZS5jcHAgKi87IH07CisJCTUyMTMyMjQ2MUVDQkNFODIwMEY2NTYxNSAvKiBXZWJBc3NlbWJs
eUZ1bmN0aW9uQmFzZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gNTIxMzIyNDQxRUNCQ0U4MjAwRjY1NjE1IC8qIFdlYkFzc2VtYmx5RnVuY3Rpb25CYXNl
LmggKi87IH07CiAJCTUyNTBEMkQxMUU4REEwNUEwMDI5QTkzMiAvKiBXYXNtVGh1bmtzLmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUyNTBEMkNGMUU4
REEwNUEwMDI5QTkzMiAvKiBXYXNtVGh1bmtzLmNwcCAqLzsgfTsKIAkJNTI1MEQyRDIxRThEQTA1
QTAwMjlBOTMyIC8qIFdhc21UaHVua3MuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDUyNTBEMkQwMUU4REEwNUEwMDI5QTkzMiAvKiBXYXNtVGh1bmtzLmgg
Ki87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNTI1QzBE
RDkxRTkzNTg0NzAwMjE4NENEIC8qIFdhc21DYWxsZWUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTI1QzBERDcxRTkzNTg0NzAwMjE4NENEIC8qIFdh
c21DYWxsZWUuY3BwICovOyB9OwpAQCAtMTM0Niw3ICsxMzQ4LDcgQEAKIAkJNTJDOTUyQjcxOUEy
ODk4NTAwNjlCMzg2IC8qIFR5cGVQcm9maWxlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gNTJDOTUyQjYxOUEyODk4NTAwNjlCMzg2IC8qIFR5cGVQcm9m
aWxlci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJ
CTUyQzk1MkI5MTlBMjhBMUMwMDY5QjM4NiAvKiBUeXBlUHJvZmlsZXIuY3BwIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTJDOTUyQjgxOUEyOEExQzAwNjlC
Mzg2IC8qIFR5cGVQcm9maWxlci5jcHAgKi87IH07CiAJCTUyRjZDMzVEMUU3MUVCMDgwMDgxRjRD
QyAvKiBXZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlvbi5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MkY2QzM1QjFFNzFFQjA4MDA4MUY0Q0MgLyogV2Vi
QXNzZW1ibHlXcmFwcGVyRnVuY3Rpb24uY3BwICovOyB9OwotCQk1MkY2QzM1RTFFNzFFQjA4MDA4
MUY0Q0MgLyogV2ViQXNzZW1ibHlXcmFwcGVyRnVuY3Rpb24uaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUyRjZDMzVDMUU3MUVCMDgwMDgxRjRDQyAvKiBX
ZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlvbi5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0g
KFByaXZhdGUsICk7IH07IH07CisJCTUyRjZDMzVFMUU3MUVCMDgwMDgxRjRDQyAvKiBXZWJBc3Nl
bWJseVdyYXBwZXJGdW5jdGlvbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gNTJGNkMzNUMxRTcxRUIwODAwODFGNENDIC8qIFdlYkFzc2VtYmx5V3JhcHBl
ckZ1bmN0aW9uLmggKi87IH07CiAJCTUzMEZCMzAyMUU3QTBCNkUwMDNDMTlERCAvKiBXYXNtV29y
a2xpc3QuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUz
MEZCMzAxMUU3QTBCNkUwMDNDMTlERCAvKiBXYXNtV29ya2xpc3QuaCAqLzsgfTsKIAkJNTMwRkIz
MDQxRTdBMTE0NjAwM0MxOUREIC8qIFdhc21Xb3JrbGlzdC5jcHAgaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MzBGQjMwMzFFN0ExMTQ2MDAzQzE5REQgLyog
V2FzbVdvcmtsaXN0LmNwcCAqLzsgfTsKIAkJNTMxMUJENEExRUE1ODFFNTAwNTI1MjgxIC8qIFdh
c21PTUdQbGFuLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDUzMTFCRDQ4MUVBNTgxRTUwMDUyNTI4MSAvKiBXYXNtT01HUGxhbi5jcHAgKi87IH07CkBA
IC0zODczLDYgKzM4NzUsOCBAQAogCQk0Q0U5NzhFMzg1QTg0OTgxOTkwNTIxNTMgLyogTW9kdWxl
TmFtZXNwYWNlQWNjZXNzQ2FzZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBN
b2R1bGVOYW1lc3BhY2VBY2Nlc3NDYXNlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTUxRjBFQjYxMDVDODZDNkIwMEU2REYxQiAvKiBGb3VuZGF0aW9uLmZyYW1ld29yayAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHdyYXBwZXIuZnJhbWV3
b3JrOyBuYW1lID0gRm91bmRhdGlvbi5mcmFtZXdvcms7IHBhdGggPSAvU3lzdGVtL0xpYnJhcnkv
RnJhbWV3b3Jrcy9Gb3VuZGF0aW9uLmZyYW1ld29yazsgc291cmNlVHJlZSA9ICI8YWJzb2x1dGU+
IjsgfTsKIAkJNTFGMEVDMDcwNUM4NkM5QTAwRTZERjFCIC8qIGxpYm9iamMuZHlsaWIgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSAiY29tcGlsZWQubWFj
aC1vLmR5bGliIjsgbmFtZSA9IGxpYm9iamMuZHlsaWI7IHBhdGggPSAvdXNyL2xpYi9saWJvYmpj
LmR5bGliOyBzb3VyY2VUcmVlID0gIjxhYnNvbHV0ZT4iOyB9OworCQk1MjEzMjI0MzFFQ0JDRTgy
MDBGNjU2MTUgLyogV2ViQXNzZW1ibHlGdW5jdGlvbkJhc2UuY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBuYW1lID0gV2ViQXNzZW1ibHlGdW5jdGlvbkJhc2UuY3BwOyBwYXRoID0g
anMvV2ViQXNzZW1ibHlGdW5jdGlvbkJhc2UuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OworCQk1MjEzMjI0NDFFQ0JDRTgyMDBGNjU2MTUgLyogV2ViQXNzZW1ibHlGdW5jdGlvbkJhc2Uu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gV2ViQXNzZW1ibHlGdW5jdGlvbkJh
c2UuaDsgcGF0aCA9IGpzL1dlYkFzc2VtYmx5RnVuY3Rpb25CYXNlLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTUyNTBEMkNGMUU4REEwNUEwMDI5QTkzMiAvKiBXYXNtVGh1bmtzLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdhc21UaHVua3MuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1MjUwRDJEMDFFOERBMDVBMDAyOUE5MzIgLyog
V2FzbVRodW5rcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXYXNtVGh1bmtz
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUyNUMwREQ3MUU5MzU4NDcwMDIxODRD
RCAvKiBXYXNtQ2FsbGVlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9
IFdhc21DYWxsZWUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtODA4OSw2ICs4
MDkzLDggQEAKIAkJCQlBRDJGQ0JCMzFEQjU4REE0MDBCM0U3MzYgLyogV2ViQXNzZW1ibHlDb21w
aWxlRXJyb3JQcm90b3R5cGUuaCAqLywKIAkJCQlBRDQ5MzdDOTFEREQyNzM0MDA3N0M4MDcgLyog
V2ViQXNzZW1ibHlGdW5jdGlvbi5jcHAgKi8sCiAJCQkJQUQ0OTM3Q0ExREREMjczNDAwNzdDODA3
IC8qIFdlYkFzc2VtYmx5RnVuY3Rpb24uaCAqLywKKwkJCQk1MjEzMjI0MzFFQ0JDRTgyMDBGNjU2
MTUgLyogV2ViQXNzZW1ibHlGdW5jdGlvbkJhc2UuY3BwICovLAorCQkJCTUyMTMyMjQ0MUVDQkNF
ODIwMEY2NTYxNSAvKiBXZWJBc3NlbWJseUZ1bmN0aW9uQmFzZS5oICovLAogCQkJCUFEMkZDQkI0
MURCNThEQTQwMEIzRTczNiAvKiBXZWJBc3NlbWJseUluc3RhbmNlQ29uc3RydWN0b3IuY3BwICov
LAogCQkJCUFEMkZDQkI1MURCNThEQTQwMEIzRTczNiAvKiBXZWJBc3NlbWJseUluc3RhbmNlQ29u
c3RydWN0b3IuaCAqLywKIAkJCQlBRDJGQ0JCNjFEQjU4REE0MDBCM0U3MzYgLyogV2ViQXNzZW1i
bHlJbnN0YW5jZVByb3RvdHlwZS5jcHAgKi8sCkBAIC04NzAzLDYgKzg3MDksNyBAQAogCQkJCTBG
MzRCMTRBMTZENDIwMTMwMDFDREE1QSAvKiBERkdVc2VLaW5kLmggaW4gSGVhZGVycyAqLywKIAkJ
CQkwRjk3MTUzMTFFQjI4QkVFMDBBMTY0NUQgLyogR0NSZXF1ZXN0LmggaW4gSGVhZGVycyAqLywK
IAkJCQkwRjNCM0EyQzE1NDc1MDAyMDAzRUQwRkYgLyogREZHVmFsaWRhdGUuaCBpbiBIZWFkZXJz
ICovLAorCQkJCTUyMTMyMjQ2MUVDQkNFODIwMEY2NTYxNSAvKiBXZWJBc3NlbWJseUZ1bmN0aW9u
QmFzZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYyQkRDNDgxNTIyODAyOTAwQ0Q4OTEwIC8qIERG
R1ZhbHVlU291cmNlLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjAxMjMzMzE5NDRFQTFCMDA4NDNB
MEMgLyogREZHVmFsdWVTdHJlbmd0aC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZFMjU0RjcxQUJE
REQyMjAwQTdDNkQyIC8qIERGR1ZhcmFyZ3NGb3J3YXJkaW5nUGhhc2UuaCBpbiBIZWFkZXJzICov
LApAQCAtMTA1NzEsNiArMTA1NzgsNyBAQAogCQkJCUE1Mzk4RkFDMUM3NTBEQTYwMDYwQTk2MyAv
KiBIZWFwUHJvZmlsZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTU0QzJBQjAxQzY1NDRFRTAw
QTE4RDc4IC8qIEhlYXBTbmFwc2hvdC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBNTMxMUMzNzFD
NzdDRUNBMDBFNkIxQjYgLyogSGVhcFNuYXBzaG90QnVpbGRlci5jcHAgaW4gU291cmNlcyAqLywK
KwkJCQk1MjEzMjI0NTFFQ0JDRTgyMDBGNjU2MTUgLyogV2ViQXNzZW1ibHlGdW5jdGlvbkJhc2Uu
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEY0NjgwRDQxNEJCRDI0OTAwQkZFMjcyIC8qIEhvc3RD
YWxsUmV0dXJuVmFsdWUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJREMyMTQzMDgxQ0EzMkU1ODAw
MEE4ODY5IC8qIElDU3RhdHMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMTQ3RjM5Q0UxMDdFQzM3
NjAwNDI3QTQ4IC8qIElkZW50aWZpZXIuY3BwIGluIFNvdXJjZXMgKi8sCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQjNJUkdlbmVyYXRvci5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUIzSVJHZW5lcmF0b3IuY3BwCShyZXZpc2lv
biAyMTY5NDcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQjNJUkdlbmVyYXRv
ci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEwODksMTIgKzEwODksMTUgQEAgYXV0byBCM0lSR2Vu
ZXJhdG9yOjphZGRDYWxsSW5kaXJlY3QoY29ucwogICAgIEFTU0VSVChzaWduYXR1cmUuYXJndW1l
bnRDb3VudCgpID09IGFyZ3Muc2l6ZSgpKTsKIAogICAgIEV4cHJlc3Npb25UeXBlIGNhbGxhYmxl
RnVuY3Rpb25CdWZmZXI7CisgICAgRXhwcmVzc2lvblR5cGUganNGdW5jdGlvbkJ1ZmZlcjsKICAg
ICBFeHByZXNzaW9uVHlwZSBjYWxsYWJsZUZ1bmN0aW9uQnVmZmVyU2l6ZTsKICAgICB7CiAgICAg
ICAgIEV4cHJlc3Npb25UeXBlIHRhYmxlID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxNZW1v
cnlWYWx1ZT4obV9wcm9jLCBMb2FkLCBwb2ludGVyVHlwZSgpLCBvcmlnaW4oKSwKICAgICAgICAg
ICAgIG1faW5zdGFuY2VWYWx1ZSwgc2FmZUNhc3Q8aW50MzJfdD4oSlNXZWJBc3NlbWJseUluc3Rh
bmNlOjpvZmZzZXRPZlRhYmxlKCkpKTsKICAgICAgICAgY2FsbGFibGVGdW5jdGlvbkJ1ZmZlciA9
IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8TWVtb3J5VmFsdWU+KG1fcHJvYywgTG9hZCwgcG9p
bnRlclR5cGUoKSwgb3JpZ2luKCksCiAgICAgICAgICAgICB0YWJsZSwgc2FmZUNhc3Q8aW50MzJf
dD4oSlNXZWJBc3NlbWJseVRhYmxlOjpvZmZzZXRPZkZ1bmN0aW9ucygpKSk7CisgICAgICAgIGpz
RnVuY3Rpb25CdWZmZXIgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PE1lbW9yeVZhbHVlPiht
X3Byb2MsIExvYWQsIHBvaW50ZXJUeXBlKCksIG9yaWdpbigpLAorICAgICAgICAgICAgdGFibGUs
IHNhZmVDYXN0PGludDMyX3Q+KEpTV2ViQXNzZW1ibHlUYWJsZTo6b2Zmc2V0T2ZKU0Z1bmN0aW9u
cygpKSk7CiAgICAgICAgIGNhbGxhYmxlRnVuY3Rpb25CdWZmZXJTaXplID0gbV9jdXJyZW50Qmxv
Y2stPmFwcGVuZE5ldzxNZW1vcnlWYWx1ZT4obV9wcm9jLCBMb2FkLCBJbnQzMiwgb3JpZ2luKCks
CiAgICAgICAgICAgICB0YWJsZSwgc2FmZUNhc3Q8aW50MzJfdD4oSlNXZWJBc3NlbWJseVRhYmxl
OjpvZmZzZXRPZlNpemUoKSkpOwogICAgIH0KQEAgLTExNDAsMTEgKzExNDMsNTYgQEAgYXV0byBC
M0lSR2VuZXJhdG9yOjphZGRDYWxsSW5kaXJlY3QoY29ucwogICAgICAgICB9KTsKICAgICB9CiAK
KyAgICAvLyBEbyBhIGNvbnRleHQgc3dpdGNoIGlmIG5lZWRlZC4KKyAgICB7CisgICAgICAgIFZh
bHVlKiBvZmZzZXQgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFZhbHVlPihtX3Byb2MsIE11
bCwgb3JpZ2luKCksCisgICAgICAgICAgICBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFZhbHVl
PihtX3Byb2MsIFpFeHQzMiwgb3JpZ2luKCksIGNhbGxlZUluZGV4KSwKKyAgICAgICAgICAgIGNv
bnN0YW50KHBvaW50ZXJUeXBlKCksIHNpemVvZihXcml0ZUJhcnJpZXI8SlNPYmplY3Q+KSkpOwor
ICAgICAgICBWYWx1ZSoganNPYmplY3QgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PE1lbW9y
eVZhbHVlPihtX3Byb2MsIExvYWQsIHBvaW50ZXJUeXBlKCksIG9yaWdpbigpLAorICAgICAgICAg
ICAgbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxWYWx1ZT4obV9wcm9jLCBBZGQsIG9yaWdpbigp
LCBqc0Z1bmN0aW9uQnVmZmVyLCBvZmZzZXQpKTsKKworICAgICAgICBCYXNpY0Jsb2NrKiBjb250
aW51YXRpb24gPSBtX3Byb2MuYWRkQmxvY2soKTsKKyAgICAgICAgQmFzaWNCbG9jayogZG9Db250
ZXh0U3dpdGNoID0gbV9wcm9jLmFkZEJsb2NrKCk7CisKKyAgICAgICAgVmFsdWUqIG5ld0NvbnRl
eHQgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PE1lbW9yeVZhbHVlPihtX3Byb2MsIExvYWQs
IHBvaW50ZXJUeXBlKCksIG9yaWdpbigpLAorICAgICAgICAgICAganNPYmplY3QsIHNhZmVDYXN0
PGludDMyX3Q+KFdlYkFzc2VtYmx5RnVuY3Rpb25CYXNlOjpvZmZzZXRPZkluc3RhbmNlKCkpKTsK
KyAgICAgICAgVmFsdWUqIGlzU2FtZUNvbnRleHQgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3
PFZhbHVlPihtX3Byb2MsIEVxdWFsLCBvcmlnaW4oKSwKKyAgICAgICAgICAgIG5ld0NvbnRleHQs
IG1faW5zdGFuY2VWYWx1ZSk7CisgICAgICAgIG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXdDb250
cm9sVmFsdWUobV9wcm9jLCBCMzo6QnJhbmNoLCBvcmlnaW4oKSwKKyAgICAgICAgICAgIGlzU2Ft
ZUNvbnRleHQsIEZyZXF1ZW50ZWRCbG9jayhjb250aW51YXRpb24pLCBGcmVxdWVudGVkQmxvY2so
ZG9Db250ZXh0U3dpdGNoKSk7CisKKyAgICAgICAgUGF0Y2hwb2ludFZhbHVlKiBwYXRjaHBvaW50
ID0gZG9Db250ZXh0U3dpdGNoLT5hcHBlbmROZXc8UGF0Y2hwb2ludFZhbHVlPihtX3Byb2MsIEIz
OjpWb2lkLCBvcmlnaW4oKSk7CisgICAgICAgIC8vIFdlIHBlc3NpbWlzdGljYWxseSBhc3N1bWUg
d2UncmUgY2FsbGluZyBzb21ldGhpbmcgd2l0aCBCb3VuZHNDaGVja2luZyBtZW1vcnkuCisgICAg
ICAgIC8vIEZJWE1FOiBXZSBzaG91bGRuJ3QgaGF2ZSB0byBkbyB0aGlzOiBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTcyMTgxCisgICAgICAgIHBhdGNocG9pbnQtPmNs
b2JiZXIoUGlubmVkUmVnaXN0ZXJJbmZvOjpnZXQoKS50b1NhdmUoTWVtb3J5TW9kZTo6Qm91bmRz
Q2hlY2tpbmcpKTsKKyAgICAgICAgcGF0Y2hwb2ludC0+Y2xvYmJlcihSZWdpc3RlclNldDo6bWFj
cm9TY3JhdGNoUmVnaXN0ZXJzKCkpOworICAgICAgICBwYXRjaHBvaW50LT5hcHBlbmQobmV3Q29u
dGV4dCwgVmFsdWVSZXA6OlNvbWVSZWdpc3Rlcik7CisgICAgICAgIHBhdGNocG9pbnQtPnNldEdl
bmVyYXRvcihbPV0gKENDYWxsSGVscGVycyYgaml0LCBjb25zdCBCMzo6U3RhY2ttYXBHZW5lcmF0
aW9uUGFyYW1zJiBwYXJhbXMpIHsKKyAgICAgICAgICAgIEFsbG93TWFjcm9TY3JhdGNoUmVnaXN0
ZXJVc2FnZSBhbGxvd1NjcmF0Y2goaml0KTsKKyAgICAgICAgICAgIEdQUlJlZyBuZXdDb250ZXh0
ID0gcGFyYW1zWzBdLmdwcigpOworICAgICAgICAgICAgY29uc3QgUGlubmVkUmVnaXN0ZXJJbmZv
JiBwaW5uZWRSZWdzID0gUGlubmVkUmVnaXN0ZXJJbmZvOjpnZXQoKTsKKyAgICAgICAgICAgIGNv
bnN0IGF1dG8mIHNpemVSZWdzID0gcGlubmVkUmVncy5zaXplUmVnaXN0ZXJzOworICAgICAgICAg
ICAgR1BSUmVnIGJhc2VNZW1vcnkgPSBwaW5uZWRSZWdzLmJhc2VNZW1vcnlQb2ludGVyOworICAg
ICAgICAgICAgQVNTRVJUKG5ld0NvbnRleHQgIT0gYmFzZU1lbW9yeSk7CisKKyAgICAgICAgICAg
IGppdC5zdG9yZVdhc21Db250ZXh0KG5ld0NvbnRleHQpOworICAgICAgICAgICAgaml0LmxvYWRQ
dHIoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKG5ld0NvbnRleHQsIENvbnRleHQ6Om9mZnNldE9mTWVt
b3J5KCkpLCBiYXNlTWVtb3J5KTsgLy8gSlNXZWJBc3NlbWJseU1lbW9yeSouCisgICAgICAgICAg
ICBBU1NFUlQoc2l6ZVJlZ3Muc2l6ZSgpID09IDEpOworICAgICAgICAgICAgQVNTRVJUKHNpemVS
ZWdzWzBdLnNpemVSZWdpc3RlciAhPSBiYXNlTWVtb3J5KTsKKyAgICAgICAgICAgIEFTU0VSVChz
aXplUmVnc1swXS5zaXplUmVnaXN0ZXIgIT0gbmV3Q29udGV4dCk7CisgICAgICAgICAgICBBU1NF
UlQoIXNpemVSZWdzWzBdLnNpemVPZmZzZXQpOworICAgICAgICAgICAgaml0LmxvYWRQdHIoQ0Nh
bGxIZWxwZXJzOjpBZGRyZXNzKGJhc2VNZW1vcnksIEpTV2ViQXNzZW1ibHlNZW1vcnk6Om9mZnNl
dE9mU2l6ZSgpKSwgc2l6ZVJlZ3NbMF0uc2l6ZVJlZ2lzdGVyKTsgLy8gTWVtb3J5IHNpemUuCisg
ICAgICAgICAgICBqaXQubG9hZFB0cihDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoYmFzZU1lbW9yeSwg
SlNXZWJBc3NlbWJseU1lbW9yeTo6b2Zmc2V0T2ZNZW1vcnkoKSksIGJhc2VNZW1vcnkpOyAvLyBX
YXNtTWVtb3J5Ojp2b2lkKi4KKyAgICAgICAgfSk7CisgICAgICAgIGRvQ29udGV4dFN3aXRjaC0+
YXBwZW5kTmV3Q29udHJvbFZhbHVlKG1fcHJvYywgSnVtcCwgb3JpZ2luKCksIGNvbnRpbnVhdGlv
bik7CisKKyAgICAgICAgbV9jdXJyZW50QmxvY2sgPSBjb250aW51YXRpb247CisgICAgfQorCiAg
ICAgRXhwcmVzc2lvblR5cGUgY2FsbGVlQ29kZSA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8
TWVtb3J5VmFsdWU+KG1fcHJvYywgTG9hZCwgcG9pbnRlclR5cGUoKSwgb3JpZ2luKCksCiAgICAg
ICAgIG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8TWVtb3J5VmFsdWU+KG1fcHJvYywgTG9hZCwg
cG9pbnRlclR5cGUoKSwgb3JpZ2luKCksIGNhbGxhYmxlRnVuY3Rpb24sCiAgICAgICAgICAgICBz
YWZlQ2FzdDxpbnQzMl90PihPQkpFQ1RfT0ZGU0VUT0YoQ2FsbGFibGVGdW5jdGlvbiwgY29kZSkp
KSk7CiAKLQogICAgIFR5cGUgcmV0dXJuVHlwZSA9IHNpZ25hdHVyZS5yZXR1cm5UeXBlKCk7CiAg
ICAgcmVzdWx0ID0gd2FzbUNhbGxpbmdDb252ZW50aW9uKCkuc2V0dXBDYWxsKG1fcHJvYywgbV9j
dXJyZW50QmxvY2ssIG9yaWdpbigpLCBhcmdzLCB0b0IzVHlwZShyZXR1cm5UeXBlKSwKICAgICAg
ICAgWz1dIChQYXRjaHBvaW50VmFsdWUqIHBhdGNocG9pbnQpIHsKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlUYWJsZS5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlUYWJsZS5oCShyZXZpc2lv
biAyMTY5NDcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5
VGFibGUuaAkod29ya2luZyBjb3B5KQpAQCAtNjIsNiArNjIsNyBAQCBwdWJsaWM6CiAKICAgICBz
dGF0aWMgcHRyZGlmZl90IG9mZnNldE9mU2l6ZSgpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihK
U1dlYkFzc2VtYmx5VGFibGUsIG1fc2l6ZSk7IH0KICAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNl
dE9mRnVuY3Rpb25zKCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKEpTV2ViQXNzZW1ibHlUYWJs
ZSwgbV9mdW5jdGlvbnMpOyB9CisgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZkpTRnVuY3Rp
b25zKCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKEpTV2ViQXNzZW1ibHlUYWJsZSwgbV9qc0Z1
bmN0aW9ucyk7IH0KIAogICAgIHN0YXRpYyBib29sIGlzVmFsaWRTaXplKHVpbnQzMl90IHNpemUp
CiAgICAgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlG
dW5jdGlvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMv
V2ViQXNzZW1ibHlGdW5jdGlvbi5jcHAJKHJldmlzaW9uIDIxNjk0NykKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5RnVuY3Rpb24uY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0xODQsMTQgKzE4NCw2IEBAIHZvaWQgV2ViQXNzZW1ibHlGdW5jdGlvbjo6dmlzaXRDaGls
ZHJlbigKICAgICBXZWJBc3NlbWJseUZ1bmN0aW9uKiB0aGlzT2JqZWN0ID0ganNDYXN0PFdlYkFz
c2VtYmx5RnVuY3Rpb24qPihjZWxsKTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRo
aXNPYmplY3QsIGluZm8oKSk7CiAgICAgQmFzZTo6dmlzaXRDaGlsZHJlbih0aGlzT2JqZWN0LCB2
aXNpdG9yKTsKLSAgICB2aXNpdG9yLmFwcGVuZCh0aGlzT2JqZWN0LT5tX2luc3RhbmNlKTsKLX0K
LQotdm9pZCBXZWJBc3NlbWJseUZ1bmN0aW9uOjpmaW5pc2hDcmVhdGlvbihWTSYgdm0sIE5hdGl2
ZUV4ZWN1dGFibGUqIGV4ZWN1dGFibGUsIHVuc2lnbmVkIGxlbmd0aCwgY29uc3QgU3RyaW5nJiBu
YW1lLCBKU1dlYkFzc2VtYmx5SW5zdGFuY2UqIGluc3RhbmNlKQotewotICAgIEJhc2U6OmZpbmlz
aENyZWF0aW9uKHZtLCBleGVjdXRhYmxlLCBsZW5ndGgsIG5hbWUpOwotICAgIEFTU0VSVChpbmhl
cml0cyh2bSwgaW5mbygpKSk7Ci0gICAgbV9pbnN0YW5jZS5zZXQodm0sIHRoaXMsIGluc3RhbmNl
KTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
d2FzbS9qcy9XZWJBc3NlbWJseUZ1bmN0aW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlGdW5jdGlvbi5oCShyZXZpc2lvbiAyMTY5NDcp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseUZ1bmN0aW9uLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTI3LDggKzI3LDggQEAKIAogI2lmIEVOQUJMRShXRUJBU1NFTUJM
WSkKIAotI2luY2x1ZGUgIkpTRnVuY3Rpb24uaCIKICNpbmNsdWRlICJXYXNtQ2FsbGVlLmgiCisj
aW5jbHVkZSAiV2ViQXNzZW1ibHlGdW5jdGlvbkJhc2UuaCIKICNpbmNsdWRlIDx3dGYvTm9uY29w
eWFibGUuaD4KIAogbmFtZXNwYWNlIEpTQyB7CkBAIC00MSw5ICs0MSw5IEBAIG5hbWVzcGFjZSBC
MyB7CiBjbGFzcyBDb21waWxhdGlvbjsKIH0KIAotY2xhc3MgV2ViQXNzZW1ibHlGdW5jdGlvbiA6
IHB1YmxpYyBKU0Z1bmN0aW9uIHsKK2NsYXNzIFdlYkFzc2VtYmx5RnVuY3Rpb24gOiBwdWJsaWMg
V2ViQXNzZW1ibHlGdW5jdGlvbkJhc2UgewogcHVibGljOgotICAgIHR5cGVkZWYgSlNGdW5jdGlv
biBCYXNlOworICAgIHVzaW5nIEJhc2UgPSBXZWJBc3NlbWJseUZ1bmN0aW9uQmFzZTsKIAogICAg
IGNvbnN0IHN0YXRpYyB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IEJhc2U6OlN0cnVjdHVyZUZs
YWdzOwogCkBAIC01MiwyNSArNTIsMjAgQEAgcHVibGljOgogICAgIEpTX0VYUE9SVF9QUklWQVRF
IHN0YXRpYyBXZWJBc3NlbWJseUZ1bmN0aW9uKiBjcmVhdGUoVk0mLCBKU0dsb2JhbE9iamVjdCos
IHVuc2lnbmVkLCBjb25zdCBTdHJpbmcmLCBKU1dlYkFzc2VtYmx5SW5zdGFuY2UqLCBXYXNtOjpD
YWxsZWUmIGpzRW50cnlwb2ludCwgV2FzbTo6V2FzbUVudHJ5cG9pbnRMb2FkTG9jYXRpb24sIFdh
c206OlNpZ25hdHVyZUluZGV4KTsKICAgICBzdGF0aWMgU3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1
cmUoVk0mLCBKU0dsb2JhbE9iamVjdCosIEpTVmFsdWUpOwogCi0gICAgSlNXZWJBc3NlbWJseUlu
c3RhbmNlKiBpbnN0YW5jZSgpIGNvbnN0IHsgcmV0dXJuIG1faW5zdGFuY2UuZ2V0KCk7IH0KICAg
ICBXYXNtOjpTaWduYXR1cmVJbmRleCBzaWduYXR1cmVJbmRleCgpIGNvbnN0IHsgcmV0dXJuIG1f
d2FzbUZ1bmN0aW9uLnNpZ25hdHVyZUluZGV4OyB9CiAgICAgV2FzbTo6V2FzbUVudHJ5cG9pbnRM
b2FkTG9jYXRpb24gd2FzbUVudHJ5cG9pbnRMb2FkTG9jYXRpb24oKSBjb25zdCB7IHJldHVybiBt
X3dhc21GdW5jdGlvbi5jb2RlOyB9CiAgICAgV2FzbTo6Q2FsbGFibGVGdW5jdGlvbiBjYWxsYWJs
ZUZ1bmN0aW9uKCkgY29uc3QgeyByZXR1cm4gbV93YXNtRnVuY3Rpb247IH0KIAogICAgIHZvaWQq
IGpzRW50cnlwb2ludCgpIHsgcmV0dXJuIG1fanNFbnRyeXBvaW50OyB9CiAKLSAgICBzdGF0aWMg
cHRyZGlmZl90IG9mZnNldE9mSW5zdGFuY2UoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoV2Vi
QXNzZW1ibHlGdW5jdGlvbiwgbV9pbnN0YW5jZSk7IH0KICAgICBzdGF0aWMgcHRyZGlmZl90IG9m
ZnNldE9mV2FzbUVudHJ5cG9pbnRMb2FkTG9jYXRpb24oKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VU
T0YoV2ViQXNzZW1ibHlGdW5jdGlvbiwgbV93YXNtRnVuY3Rpb24pICsgV2FzbTo6Q2FsbGFibGVG
dW5jdGlvbjo6b2Zmc2V0T2ZXYXNtRW50cnlwb2ludExvYWRMb2NhdGlvbigpOyB9CiAKIHByb3Rl
Y3RlZDoKICAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9y
Jik7CiAKLSAgICB2b2lkIGZpbmlzaENyZWF0aW9uKFZNJiwgTmF0aXZlRXhlY3V0YWJsZSosIHVu
c2lnbmVkIGxlbmd0aCwgY29uc3QgU3RyaW5nJiBuYW1lLCBKU1dlYkFzc2VtYmx5SW5zdGFuY2Uq
KTsKLQogcHJpdmF0ZToKICAgICBXZWJBc3NlbWJseUZ1bmN0aW9uKFZNJiwgSlNHbG9iYWxPYmpl
Y3QqLCBTdHJ1Y3R1cmUqLCBXYXNtOjpDYWxsZWUmIGpzRW50cnlwb2ludCwgV2FzbTo6V2FzbUVu
dHJ5cG9pbnRMb2FkTG9jYXRpb24sIFdhc206OlNpZ25hdHVyZUluZGV4KTsKIAotICAgIFdyaXRl
QmFycmllcjxKU1dlYkFzc2VtYmx5SW5zdGFuY2U+IG1faW5zdGFuY2U7CiAgICAgLy8gSXQncyBz
YWZlIHRvIGp1c3QgaG9sZCB0aGUgcmF3IENhbGxhYmxlRnVuY3Rpb24vanNFbnRyeXBvaW50IGJl
Y2F1c2Ugd2UgaGF2ZSBhIHJlZmVyZW5jZQogICAgIC8vIHRvIG91ciBJbnN0YW5jZSwgd2hpY2gg
cG9pbnRzIHRvIHRoZSBNb2R1bGUgdGhhdCBleHBvcnRlZCB1cywgd2hpY2gKICAgICAvLyBlbnN1
cmVzIHRoYXQgdGhlIGFjdHVhbCBTaWduYXR1cmUvY29kZSBkb2Vzbid0IGdldCBkZWFsbG9jYXRl
ZC4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5RnVuY3Rp
b25CYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9X
ZWJBc3NlbWJseUZ1bmN0aW9uQmFzZS5jcHAJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlGdW5jdGlvbkJhc2UuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0wLDAgKzEsNTggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAq
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiV2ViQXNzZW1ibHlGdW5j
dGlvbkJhc2UuaCIKKworI2lmIEVOQUJMRShXRUJBU1NFTUJMWSkKKworI2luY2x1ZGUgIkpTV2Vi
QXNzZW1ibHlJbnN0YW5jZS5oIgorCituYW1lc3BhY2UgSlNDIHsKKworY29uc3QgQ2xhc3NJbmZv
IFdlYkFzc2VtYmx5RnVuY3Rpb25CYXNlOjpzX2luZm8gPSB7ICJXZWJBc3NlbWJseUZ1bmN0aW9u
QmFzZSIsICZCYXNlOjpzX2luZm8sIG51bGxwdHIsIENSRUFURV9NRVRIT0RfVEFCTEUoV2ViQXNz
ZW1ibHlGdW5jdGlvbkJhc2UpIH07CisKK1dlYkFzc2VtYmx5RnVuY3Rpb25CYXNlOjpXZWJBc3Nl
bWJseUZ1bmN0aW9uQmFzZShWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFN0
cnVjdHVyZSogc3RydWN0dXJlKQorICAgIDogQmFzZSh2bSwgZ2xvYmFsT2JqZWN0LCBzdHJ1Y3R1
cmUpCit7IH0KKwordm9pZCBXZWJBc3NlbWJseUZ1bmN0aW9uQmFzZTo6dmlzaXRDaGlsZHJlbihK
U0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQoreworICAgIFdlYkFzc2VtYmx5RnVu
Y3Rpb25CYXNlKiB0aGlzT2JqZWN0ID0ganNDYXN0PFdlYkFzc2VtYmx5RnVuY3Rpb25CYXNlKj4o
Y2VsbCk7CisgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkp
OworICAgIEJhc2U6OnZpc2l0Q2hpbGRyZW4odGhpc09iamVjdCwgdmlzaXRvcik7CisgICAgdmlz
aXRvci5hcHBlbmQodGhpc09iamVjdC0+bV9pbnN0YW5jZSk7Cit9CisKK3ZvaWQgV2ViQXNzZW1i
bHlGdW5jdGlvbkJhc2U6OmZpbmlzaENyZWF0aW9uKFZNJiB2bSwgTmF0aXZlRXhlY3V0YWJsZSog
ZXhlY3V0YWJsZSwgdW5zaWduZWQgbGVuZ3RoLCBjb25zdCBTdHJpbmcmIG5hbWUsIEpTV2ViQXNz
ZW1ibHlJbnN0YW5jZSogaW5zdGFuY2UpCit7CisgICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24odm0s
IGV4ZWN1dGFibGUsIGxlbmd0aCwgbmFtZSk7CisgICAgQVNTRVJUKGluaGVyaXRzKHZtLCBpbmZv
KCkpKTsKKyAgICBtX2luc3RhbmNlLnNldCh2bSwgdGhpcywgaW5zdGFuY2UpOworfQorCit9IC8v
IG5hbWVzcGFjZSBKU0MKKworI2VuZGlmIC8vIEVOQUJMRShXRUJBU1NFTUJMWSkKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5RnVuY3Rpb25CYXNlLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlGdW5j
dGlvbkJhc2UuaAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9q
cy9XZWJBc3NlbWJseUZ1bmN0aW9uQmFzZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNTcg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAq
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
CisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21h
IG9uY2UKKworI2lmIEVOQUJMRShXRUJBU1NFTUJMWSkKKworI2luY2x1ZGUgIkpTRnVuY3Rpb24u
aCIKKworbmFtZXNwYWNlIEpTQyB7CisKK2NsYXNzIEpTR2xvYmFsT2JqZWN0OworY2xhc3MgSlNX
ZWJBc3NlbWJseUluc3RhbmNlOworCitjbGFzcyBXZWJBc3NlbWJseUZ1bmN0aW9uQmFzZSA6IHB1
YmxpYyBKU0Z1bmN0aW9uIHsKK3B1YmxpYzoKKyAgICB1c2luZyBCYXNlID0gSlNGdW5jdGlvbjsK
KworICAgIGNvbnN0IHN0YXRpYyB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IEJhc2U6OlN0cnVj
dHVyZUZsYWdzOworCisgICAgREVDTEFSRV9JTkZPOworCisgICAgSlNXZWJBc3NlbWJseUluc3Rh
bmNlKiBpbnN0YW5jZSgpIGNvbnN0IHsgcmV0dXJuIG1faW5zdGFuY2UuZ2V0KCk7IH0KKyAgICBz
dGF0aWMgcHRyZGlmZl90IG9mZnNldE9mSW5zdGFuY2UoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VU
T0YoV2ViQXNzZW1ibHlGdW5jdGlvbkJhc2UsIG1faW5zdGFuY2UpOyB9CisKK3Byb3RlY3RlZDoK
KyAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7Cisg
ICAgdm9pZCBmaW5pc2hDcmVhdGlvbihWTSYsIE5hdGl2ZUV4ZWN1dGFibGUqLCB1bnNpZ25lZCBs
ZW5ndGgsIGNvbnN0IFN0cmluZyYgbmFtZSwgSlNXZWJBc3NlbWJseUluc3RhbmNlKik7CisgICAg
V2ViQXNzZW1ibHlGdW5jdGlvbkJhc2UoVk0mLCBKU0dsb2JhbE9iamVjdCosIFN0cnVjdHVyZSop
OworICAgIFdyaXRlQmFycmllcjxKU1dlYkFzc2VtYmx5SW5zdGFuY2U+IG1faW5zdGFuY2U7Cit9
OworCit9IC8vIG5hbWVzcGFjZSBKU0MKKworI2VuZGlmIC8vIEVOQUJMRShXRUJBU1NFTUJMWSkK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5TW9kdWxlUmVj
b3JkLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJB
c3NlbWJseU1vZHVsZVJlY29yZC5jcHAJKHJldmlzaW9uIDIxNjk0NykKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5TW9kdWxlUmVjb3JkLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMTE3LDcgKzExNyw3IEBAIHZvaWQgV2ViQXNzZW1ibHlNb2R1bGVSZWNvcmQ6Omxp
bmsoRXhlY1MKICAgICAgICAgICAgICAgICAgICAgZXhwb3J0ZWRWYWx1ZSA9IGZ1bmN0aW9uSW1w
b3J0OwogICAgICAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgICAgICBXYXNtOjpT
aWduYXR1cmVJbmRleCBzaWduYXR1cmVJbmRleCA9IG1vZHVsZS0+c2lnbmF0dXJlSW5kZXhGcm9t
RnVuY3Rpb25JbmRleFNwYWNlKGZ1bmN0aW9uSW5kZXgpOwotICAgICAgICAgICAgICAgICAgICBl
eHBvcnRlZFZhbHVlID0gV2ViQXNzZW1ibHlXcmFwcGVyRnVuY3Rpb246OmNyZWF0ZSh2bSwgZ2xv
YmFsT2JqZWN0LCBmdW5jdGlvbkltcG9ydCwgZnVuY3Rpb25JbmRleCwgY29kZUJsb2NrLCBzaWdu
YXR1cmVJbmRleCk7CisgICAgICAgICAgICAgICAgICAgIGV4cG9ydGVkVmFsdWUgPSBXZWJBc3Nl
bWJseVdyYXBwZXJGdW5jdGlvbjo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIGZ1bmN0aW9uSW1w
b3J0LCBmdW5jdGlvbkluZGV4LCBpbnN0YW5jZSwgc2lnbmF0dXJlSW5kZXgpOwogICAgICAgICAg
ICAgICAgIH0KICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgLy8gICBpaWku
IE90aGVyd2lzZToKQEAgLTI2NCw3ICsyNjQsNyBAQCBKU1ZhbHVlIFdlYkFzc2VtYmx5TW9kdWxl
UmVjb3JkOjpldmFsdWF0CiAgICAgICAgICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgICAg
ICAgICB0YWJsZS0+c2V0RnVuY3Rpb24odm0sIHRhYmxlSW5kZXgsCi0gICAgICAgICAgICAgICAg
ICAgICAgICBXZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlvbjo6Y3JlYXRlKHZtLCBtX2luc3RhbmNl
LT5nbG9iYWxPYmplY3QoKSwgZnVuY3Rpb25JbXBvcnQsIGZ1bmN0aW9uSW5kZXgsIGNvZGVCbG9j
aywgc2lnbmF0dXJlSW5kZXgpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIFdlYkFzc2VtYmx5
V3JhcHBlckZ1bmN0aW9uOjpjcmVhdGUodm0sIG1faW5zdGFuY2UtPmdsb2JhbE9iamVjdCgpLCBm
dW5jdGlvbkltcG9ydCwgZnVuY3Rpb25JbmRleCwgbV9pbnN0YW5jZS5nZXQoKSwgc2lnbmF0dXJl
SW5kZXgpKTsKICAgICAgICAgICAgICAgICAgICAgKyt0YWJsZUluZGV4OwogICAgICAgICAgICAg
ICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgICAgICB9CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlvbi5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlXcmFwcGVyRnVu
Y3Rpb24uY3BwCShyZXZpc2lvbiAyMTY5NDcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2Fz
bS9qcy9XZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMx
LDYgKzMxLDcgQEAKICNpbmNsdWRlICJFcnJvci5oIgogI2luY2x1ZGUgIkZ1bmN0aW9uUHJvdG90
eXBlLmgiCiAjaW5jbHVkZSAiSlNDSW5saW5lcy5oIgorI2luY2x1ZGUgIkpTV2ViQXNzZW1ibHlJ
bnN0YW5jZS5oIgogCiBuYW1lc3BhY2UgSlNDIHsKIApAQCAtNTcsMjMgKzU4LDIyIEBAIFdlYkFz
c2VtYmx5V3JhcHBlckZ1bmN0aW9uOjpXZWJBc3NlbWJseVcKICAgICAsIG1fd2FzbUZ1bmN0aW9u
KHdhc21GdW5jdGlvbikKIHsgfQogCi1XZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlvbiogV2ViQXNz
ZW1ibHlXcmFwcGVyRnVuY3Rpb246OmNyZWF0ZShWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9i
YWxPYmplY3QsIEpTT2JqZWN0KiBmdW5jdGlvbiwgdW5zaWduZWQgaW1wb3J0SW5kZXgsIEpTV2Vi
QXNzZW1ibHlDb2RlQmxvY2sqIGNvZGVCbG9jaywgV2FzbTo6U2lnbmF0dXJlSW5kZXggc2lnbmF0
dXJlSW5kZXgpCitXZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlvbiogV2ViQXNzZW1ibHlXcmFwcGVy
RnVuY3Rpb246OmNyZWF0ZShWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpT
T2JqZWN0KiBmdW5jdGlvbiwgdW5zaWduZWQgaW1wb3J0SW5kZXgsIEpTV2ViQXNzZW1ibHlJbnN0
YW5jZSogaW5zdGFuY2UsIFdhc206OlNpZ25hdHVyZUluZGV4IHNpZ25hdHVyZUluZGV4KQogewog
ICAgIEFTU0VSVF9XSVRIX01FU1NBR0UoIWZ1bmN0aW9uLT5pbmhlcml0cyh2bSwgV2ViQXNzZW1i
bHlXcmFwcGVyRnVuY3Rpb246OmluZm8oKSksICJXZSBzaG91bGQgbmV2ZXIgZG91YmxlIHdyYXAg
YSB3cmFwcGVyIGZ1bmN0aW9uLiIpOwogICAgIFN0cmluZyBuYW1lID0gIiI7CiAgICAgTmF0aXZl
RXhlY3V0YWJsZSogZXhlY3V0YWJsZSA9IHZtLmdldEhvc3RGdW5jdGlvbihjYWxsV2ViQXNzZW1i
bHlXcmFwcGVyRnVuY3Rpb24sIE5vSW50cmluc2ljLCBjYWxsSG9zdEZ1bmN0aW9uQXNDb25zdHJ1
Y3RvciwgbnVsbHB0ciwgbmFtZSk7Ci0gICAgV2ViQXNzZW1ibHlXcmFwcGVyRnVuY3Rpb24qIHJl
c3VsdCA9IG5ldyAoTm90TnVsbCwgYWxsb2NhdGVDZWxsPFdlYkFzc2VtYmx5V3JhcHBlckZ1bmN0
aW9uPih2bS5oZWFwKSkgV2ViQXNzZW1ibHlXcmFwcGVyRnVuY3Rpb24odm0sIGdsb2JhbE9iamVj
dCwgZ2xvYmFsT2JqZWN0LT53ZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlvblN0cnVjdHVyZSgpLCBX
YXNtOjpDYWxsYWJsZUZ1bmN0aW9uKHNpZ25hdHVyZUluZGV4LCBjb2RlQmxvY2stPndhc21Ub0pz
Q2FsbFN0dWJGb3JJbXBvcnQoaW1wb3J0SW5kZXgpKSk7CisgICAgV2ViQXNzZW1ibHlXcmFwcGVy
RnVuY3Rpb24qIHJlc3VsdCA9IG5ldyAoTm90TnVsbCwgYWxsb2NhdGVDZWxsPFdlYkFzc2VtYmx5
V3JhcHBlckZ1bmN0aW9uPih2bS5oZWFwKSkgV2ViQXNzZW1ibHlXcmFwcGVyRnVuY3Rpb24odm0s
IGdsb2JhbE9iamVjdCwgZ2xvYmFsT2JqZWN0LT53ZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlvblN0
cnVjdHVyZSgpLCBXYXNtOjpDYWxsYWJsZUZ1bmN0aW9uKHNpZ25hdHVyZUluZGV4LCBpbnN0YW5j
ZS0+Y29kZUJsb2NrKCktPndhc21Ub0pzQ2FsbFN0dWJGb3JJbXBvcnQoaW1wb3J0SW5kZXgpKSk7
CiAgICAgY29uc3QgV2FzbTo6U2lnbmF0dXJlJiBzaWduYXR1cmUgPSBXYXNtOjpTaWduYXR1cmVJ
bmZvcm1hdGlvbjo6Z2V0KHNpZ25hdHVyZUluZGV4KTsKLSAgICByZXN1bHQtPmZpbmlzaENyZWF0
aW9uKHZtLCBleGVjdXRhYmxlLCBzaWduYXR1cmUuYXJndW1lbnRDb3VudCgpLCBuYW1lLCBmdW5j
dGlvbiwgY29kZUJsb2NrKTsKKyAgICByZXN1bHQtPmZpbmlzaENyZWF0aW9uKHZtLCBleGVjdXRh
YmxlLCBzaWduYXR1cmUuYXJndW1lbnRDb3VudCgpLCBuYW1lLCBmdW5jdGlvbiwgaW5zdGFuY2Up
OwogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLXZvaWQgV2ViQXNzZW1ibHlXcmFwcGVyRnVuY3Rp
b246OmZpbmlzaENyZWF0aW9uKFZNJiB2bSwgTmF0aXZlRXhlY3V0YWJsZSogZXhlY3V0YWJsZSwg
dW5zaWduZWQgbGVuZ3RoLCBjb25zdCBTdHJpbmcmIG5hbWUsIEpTT2JqZWN0KiBmdW5jdGlvbiwg
SlNXZWJBc3NlbWJseUNvZGVCbG9jayogY29kZUJsb2NrKQordm9pZCBXZWJBc3NlbWJseVdyYXBw
ZXJGdW5jdGlvbjo6ZmluaXNoQ3JlYXRpb24oVk0mIHZtLCBOYXRpdmVFeGVjdXRhYmxlKiBleGVj
dXRhYmxlLCB1bnNpZ25lZCBsZW5ndGgsIGNvbnN0IFN0cmluZyYgbmFtZSwgSlNPYmplY3QqIGZ1
bmN0aW9uLCBKU1dlYkFzc2VtYmx5SW5zdGFuY2UqIGluc3RhbmNlKQogewotICAgIEJhc2U6OmZp
bmlzaENyZWF0aW9uKHZtLCBleGVjdXRhYmxlLCBsZW5ndGgsIG5hbWUpOworICAgIEJhc2U6OmZp
bmlzaENyZWF0aW9uKHZtLCBleGVjdXRhYmxlLCBsZW5ndGgsIG5hbWUsIGluc3RhbmNlKTsKICAg
ICBSRUxFQVNFX0FTU0VSVChKU1ZhbHVlKGZ1bmN0aW9uKS5pc0Z1bmN0aW9uKCkpOwogICAgIG1f
ZnVuY3Rpb24uc2V0KHZtLCB0aGlzLCBmdW5jdGlvbik7Ci0gICAgbV9jb2RlQmxvY2suc2V0KHZt
LCB0aGlzLCBjb2RlQmxvY2spOwogfQogCiBTdHJ1Y3R1cmUqIFdlYkFzc2VtYmx5V3JhcHBlckZ1
bmN0aW9uOjpjcmVhdGVTdHJ1Y3R1cmUoVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2Jq
ZWN0LCBKU1ZhbHVlIHByb3RvdHlwZSkKQEAgLTg4LDcgKzg4LDYgQEAgdm9pZCBXZWJBc3NlbWJs
eVdyYXBwZXJGdW5jdGlvbjo6dmlzaXRDaAogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFMo
dGhpc09iamVjdCwgaW5mbygpKTsKICAgICBCYXNlOjp2aXNpdENoaWxkcmVuKHRoaXNPYmplY3Qs
IHZpc2l0b3IpOwogCi0gICAgdmlzaXRvci5hcHBlbmQodGhpc09iamVjdC0+bV9jb2RlQmxvY2sp
OwogICAgIHZpc2l0b3IuYXBwZW5kKHRoaXNPYmplY3QtPm1fZnVuY3Rpb24pOwogfQogCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlv
bi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2Vt
Ymx5V3JhcHBlckZ1bmN0aW9uLmgJKHJldmlzaW9uIDIxNjk0NykKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5V3JhcHBlckZ1bmN0aW9uLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTI3LDIwICsyNywyMCBAQAogCiAjaWYgRU5BQkxFKFdFQkFTU0VNQkxZKQogCi0jaW5j
bHVkZSAiSlNGdW5jdGlvbi5oIgogI2luY2x1ZGUgIkpTV2ViQXNzZW1ibHlDb2RlQmxvY2suaCIK
KyNpbmNsdWRlICJXZWJBc3NlbWJseUZ1bmN0aW9uQmFzZS5oIgogCiBuYW1lc3BhY2UgSlNDIHsK
IAotY2xhc3MgV2ViQXNzZW1ibHlXcmFwcGVyRnVuY3Rpb24gOiBwdWJsaWMgSlNGdW5jdGlvbiB7
CitjbGFzcyBXZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlvbiA6IHB1YmxpYyBXZWJBc3NlbWJseUZ1
bmN0aW9uQmFzZSB7CiBwdWJsaWM6Ci0gICAgdHlwZWRlZiBKU0Z1bmN0aW9uIEJhc2U7CisgICAg
dXNpbmcgQmFzZSA9IFdlYkFzc2VtYmx5RnVuY3Rpb25CYXNlOwogCiAgICAgY29uc3Qgc3RhdGlj
IHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gQmFzZTo6U3RydWN0dXJlRmxhZ3M7CiAKICAgICBE
RUNMQVJFX0lORk87CiAKLSAgICBzdGF0aWMgV2ViQXNzZW1ibHlXcmFwcGVyRnVuY3Rpb24qIGNy
ZWF0ZShWTSYsIEpTR2xvYmFsT2JqZWN0KiwgSlNPYmplY3QqLCB1bnNpZ25lZCBpbXBvcnRJbmRl
eCwgSlNXZWJBc3NlbWJseUNvZGVCbG9jayosIFdhc206OlNpZ25hdHVyZUluZGV4KTsKKyAgICBz
dGF0aWMgV2ViQXNzZW1ibHlXcmFwcGVyRnVuY3Rpb24qIGNyZWF0ZShWTSYsIEpTR2xvYmFsT2Jq
ZWN0KiwgSlNPYmplY3QqLCB1bnNpZ25lZCBpbXBvcnRJbmRleCwgSlNXZWJBc3NlbWJseUluc3Rh
bmNlKiwgV2FzbTo6U2lnbmF0dXJlSW5kZXgpOwogICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0
ZVN0cnVjdHVyZShWTSYsIEpTR2xvYmFsT2JqZWN0KiwgSlNWYWx1ZSk7CiAKICAgICBXYXNtOjpT
aWduYXR1cmVJbmRleCBzaWduYXR1cmVJbmRleCgpIGNvbnN0IHsgcmV0dXJuIG1fd2FzbUZ1bmN0
aW9uLnNpZ25hdHVyZUluZGV4OyB9CkBAIC01MSwxOCArNTEsMTUgQEAgcHVibGljOgogcHJvdGVj
dGVkOgogICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3Im
KTsKIAotICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oVk0mLCBOYXRpdmVFeGVjdXRhYmxlKiwgdW5z
aWduZWQgbGVuZ3RoLCBjb25zdCBTdHJpbmcmIG5hbWUsIEpTT2JqZWN0KiwgSlNXZWJBc3NlbWJs
eUNvZGVCbG9jayopOworICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oVk0mLCBOYXRpdmVFeGVjdXRh
YmxlKiwgdW5zaWduZWQgbGVuZ3RoLCBjb25zdCBTdHJpbmcmIG5hbWUsIEpTT2JqZWN0KiwgSlNX
ZWJBc3NlbWJseUluc3RhbmNlKik7CiAKIHByaXZhdGU6CiAgICAgV2ViQXNzZW1ibHlXcmFwcGVy
RnVuY3Rpb24oVk0mLCBKU0dsb2JhbE9iamVjdCosIFN0cnVjdHVyZSosIFdhc206OkNhbGxhYmxl
RnVuY3Rpb24pOwogCi0gICAgLy8gV2Uga2VlcCBhIHJlZmVyZW5jZSB0byBvdXIgQ29kZUJsb2Nr
IGJlY2F1c2Ugd2UgaGF2ZSBhIHJhdwotICAgIC8vIHBvaW50ZXIgdG8gYXNtIGNvZGUgdGhhdCBp
dCBvd25zLgotICAgIFdyaXRlQmFycmllcjxKU1dlYkFzc2VtYmx5Q29kZUJsb2NrPiBtX2NvZGVC
bG9jazsKICAgICBXcml0ZUJhcnJpZXI8SlNPYmplY3Q+IG1fZnVuY3Rpb247CiAgICAgLy8gSXQn
cyBzYWZlIHRvIGp1c3QgaG9sZCB0aGUgcmF3IENhbGxhYmxlRnVuY3Rpb24gYmVjYXVzZSB3ZSBo
YXZlIGEgcmVmZXJlbmNlCi0gICAgLy8gdG8gb3VyIENvZGVCbG9jaywgd2hpY2ggcG9pbnRzIHRv
IHRoZSBNb2R1bGUgdGhhdCBleHBvcnRlZCB1cywgd2hpY2gKLSAgICAvLyBlbnN1cmVzIHRoYXQg
dGhlIGFjdHVhbCBTaWduYXR1cmUvY29kZSBkb2Vzbid0IGdldCBkZWFsbG9jYXRlZC4KKyAgICAv
LyB0byBvdXIgSW5zdGFuY2UsIHdoaWNoIHBvaW50cyB0byB0aGUgQ29kZUJsb2NrLCB3aGljaCBw
b2ludHMgdG8gdGhlIE1vZHVsZQorICAgIC8vIHRoYXQgZXhwb3J0ZWQgdXMsIHdoaWNoIGVuc3Vy
ZXMgdGhhdCB0aGUgYWN0dWFsIFNpZ25hdHVyZS9jb2RlIGRvZXNuJ3QgZ2V0IGRlYWxsb2NhdGVk
LgogICAgIFdhc206OkNhbGxhYmxlRnVuY3Rpb24gbV93YXNtRnVuY3Rpb247CiB9OwogCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>310340</attachid>
            <date>2017-05-16 18:34:53 -0700</date>
            <delta_ts>2017-05-17 14:38:49 -0700</delta_ts>
            <desc>patch</desc>
            <filename>c-backup.diff</filename>
            <type>text/plain</type>
            <size>40547</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IEpTVGVzdHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEpTVGVzdHMvQ2hhbmdlTG9n
CShyZXZpc2lvbiAyMTY5NjApCisrKyBKU1Rlc3RzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpA
QCAtMSwzICsxLDIxIEBACisyMDE3LTA1LTE2ICBTYWFtIEJhcmF0aSAgPHNiYXJhdGlAYXBwbGUu
Y29tPgorCisgICAgICAgIFdlIGRvbid0IGRvIGNvbnRleHQgc3dpdGNoZXMgZm9yIFdhc20tPldh
c20gY2FsbCBpbmRpcmVjdAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MTcyMTg4CisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS8zMjIzMTgyOD4KKworICAg
ICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIHdhc20vZnVuY3Rp
b24tdGVzdHMvY29udGV4dC1zd2l0Y2guanM6IEFkZGVkLgorICAgICAgICAoaW1wb3J0LkJ1aWxk
ZXIuZnJvbS5zdHJpbmdfYXBwZWFyZWRfaGVyZS5pbXBvcnQuYXMuYXNzZXJ0LmZyb20uc3RyaW5n
X2FwcGVhcmVkX2hlcmUubWFrZUluc3RhbmNlKToKKyAgICAgICAgKGltcG9ydC5CdWlsZGVyLmZy
b20uc3RyaW5nX2FwcGVhcmVkX2hlcmUuaW1wb3J0LmFzLmFzc2VydC5mcm9tLnN0cmluZ19hcHBl
YXJlZF9oZXJlLm1ha2VJbnN0YW5jZTIpOgorICAgICAgICAoaW1wb3J0LkJ1aWxkZXIuZnJvbS5z
dHJpbmdfYXBwZWFyZWRfaGVyZS5pbXBvcnQuYXMuYXNzZXJ0LmZyb20uc3RyaW5nX2FwcGVhcmVk
X2hlcmUuY29uc3QuaTIubWFrZUluc3RhbmNlMik6CisgICAgICAgIChtYWtlSW5zdGFuY2UpOgor
ICAgICAgICAobWFrZUluc3RhbmNlMik6CisgICAgICAgIChhc3NlcnQuZXEubWFrZUluc3RhbmNl
KToKKyAgICAgICAgKGFzc2VydC5lcS5tYWtlSW5zdGFuY2UyKToKKyAgICAgICAgKGFzc2VydC5l
cSk6CisKIDIwMTctMDUtMTYgIFl1c3VrZSBTdXp1a2kgIDx1dGF0YW5lLnRlYUBnbWFpbC5jb20+
CiAKICAgICAgICAgW0RGR10gQ29uc3RhbnQgRm9sZGluZyBQaGFzZSBzaG91bGQgY29udmVydCBN
YWtlUm9wZSgiIiwgU3RyaW5nKSA9PiBJZGVudGl0eShTdHJpbmcpCkluZGV4OiBKU1Rlc3RzL3dh
c20vZnVuY3Rpb24tdGVzdHMvY29udGV4dC1zd2l0Y2guanMKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSlNUZXN0
cy93YXNtL2Z1bmN0aW9uLXRlc3RzL2NvbnRleHQtc3dpdGNoLmpzCShub25leGlzdGVudCkKKysr
IEpTVGVzdHMvd2FzbS9mdW5jdGlvbi10ZXN0cy9jb250ZXh0LXN3aXRjaC5qcwkod29ya2luZyBj
b3B5KQpAQCAtMCwwICsxLDI3NyBAQAoraW1wb3J0IEJ1aWxkZXIgZnJvbSAnLi4vQnVpbGRlci5q
cycKK2ltcG9ydCAqIGFzIGFzc2VydCBmcm9tICcuLi9hc3NlcnQuanMnCisKK3sKKyAgICBmdW5j
dGlvbiBtYWtlSW5zdGFuY2UoKSB7CisgICAgICAgIGNvbnN0IHRhYmxlRGVzY3JpcHRpb24gPSB7
aW5pdGlhbDogMSwgZWxlbWVudDogImFueWZ1bmMifTsKKyAgICAgICAgY29uc3QgYnVpbGRlciA9
IG5ldyBCdWlsZGVyKCkKKyAgICAgICAgICAgIC5UeXBlKCkKKyAgICAgICAgICAgICAgICAuRnVu
YyhbXSwgInZvaWQiKQorICAgICAgICAgICAgLkVuZCgpCisgICAgICAgICAgICAuSW1wb3J0KCkK
KyAgICAgICAgICAgICAgICAuVGFibGUoImltcCIsICJ0YWJsZSIsIHRhYmxlRGVzY3JpcHRpb24p
CisgICAgICAgICAgICAuRW5kKCkKKyAgICAgICAgICAgIC5GdW5jdGlvbigpLkVuZCgpCisgICAg
ICAgICAgICAuRXhwb3J0KCkKKyAgICAgICAgICAgICAgICAuRnVuY3Rpb24oImZvbyIpCisgICAg
ICAgICAgICAuRW5kKCkKKyAgICAgICAgICAgIC5Db2RlKCkKKyAgICAgICAgICAgICAgICAuRnVu
Y3Rpb24oImZvbyIsIHtwYXJhbXM6WyJpMzIiXSwgcmV0OiJ2b2lkIn0pCisgICAgICAgICAgICAg
ICAgICAgIC5HZXRMb2NhbCgwKSAvLyBwYXJhbWV0ZXIgdG8gY2FsbAorICAgICAgICAgICAgICAg
ICAgICAuR2V0TG9jYWwoMCkgLy8gY2FsbCBpbmRleAorICAgICAgICAgICAgICAgICAgICAuQ2Fs
bEluZGlyZWN0KDAsIDApIC8vIGNhbGxpbmcgZnVuY3Rpb24gb2YgdHlwZSBbXSA9PiAndm9pZCcK
KyAgICAgICAgICAgICAgICAgICAgLlJldHVybigpCisgICAgICAgICAgICAgICAgLkVuZCgpCisg
ICAgICAgICAgICAuRW5kKCk7CisKKworICAgICAgICBjb25zdCBiaW4gPSBidWlsZGVyLldlYkFz
c2VtYmx5KCkuZ2V0KCk7CisgICAgICAgIGNvbnN0IG1vZHVsZSA9IG5ldyBXZWJBc3NlbWJseS5N
b2R1bGUoYmluKTsKKyAgICAgICAgY29uc3QgdGFibGUgPSBuZXcgV2ViQXNzZW1ibHkuVGFibGUo
dGFibGVEZXNjcmlwdGlvbik7CisgICAgICAgIHJldHVybiB7aW5zdGFuY2U6IG5ldyBXZWJBc3Nl
bWJseS5JbnN0YW5jZShtb2R1bGUsIHtpbXA6IHt0YWJsZX19KSwgdGFibGV9OworICAgIH0KKwor
ICAgIGZ1bmN0aW9uIG1ha2VJbnN0YW5jZTIoZikgeworICAgICAgICBjb25zdCBidWlsZGVyID0g
bmV3IEJ1aWxkZXIoKQorICAgICAgICAgICAgLlR5cGUoKQorICAgICAgICAgICAgLkVuZCgpCisg
ICAgICAgICAgICAuSW1wb3J0KCkKKyAgICAgICAgICAgICAgICAuRnVuY3Rpb24oImltcCIsICJm
Iiwge3BhcmFtczpbXSwgcmV0OiJ2b2lkIn0pCisgICAgICAgICAgICAuRW5kKCkKKyAgICAgICAg
ICAgIC5GdW5jdGlvbigpLkVuZCgpCisgICAgICAgICAgICAuRXhwb3J0KCkKKyAgICAgICAgICAg
ICAgICAuRnVuY3Rpb24oImZvbyIpCisgICAgICAgICAgICAuRW5kKCkKKyAgICAgICAgICAgIC5D
b2RlKCkKKyAgICAgICAgICAgICAgICAuRnVuY3Rpb24oImZvbyIsIHtwYXJhbXM6IFtdLCByZXQ6
ICJ2b2lkIiB9KQorICAgICAgICAgICAgICAgICAgICAuQ2FsbCgwKQorICAgICAgICAgICAgICAg
ICAgICAuUmV0dXJuKCkKKyAgICAgICAgICAgICAgICAuRW5kKCkKKyAgICAgICAgICAgIC5FbmQo
KTsKKworCisgICAgICAgIGNvbnN0IGJpbiA9IGJ1aWxkZXIuV2ViQXNzZW1ibHkoKS5nZXQoKTsK
KyAgICAgICAgY29uc3QgbW9kdWxlID0gbmV3IFdlYkFzc2VtYmx5Lk1vZHVsZShiaW4pOworICAg
ICAgICByZXR1cm4gbmV3IFdlYkFzc2VtYmx5Lkluc3RhbmNlKG1vZHVsZSwge2ltcDoge2Z9fSk7
CisgICAgfQorCisgICAgY29uc3Qge2luc3RhbmNlOiBpMSwgdGFibGU6IHQxfSA9IG1ha2VJbnN0
YW5jZSgpOworICAgIGNvbnN0IGZvbyA9IGkxLmV4cG9ydHMuZm9vOworCisgICAgbGV0IGNhbGxl
ZCA9IGZhbHNlOworICAgIGxldCBzaG91bGRUaHJvdyA9IGZhbHNlOworICAgIGNvbnN0IGkyID0g
bWFrZUluc3RhbmNlMihmdW5jdGlvbigpIHsKKyAgICAgICAgY2FsbGVkID0gdHJ1ZTsKKyAgICAg
ICAgaWYgKHNob3VsZFRocm93KQorICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJUaHJldyIp
OworICAgIH0pOworCisgICAgdDEuc2V0KDAsIGkyLmV4cG9ydHMuZm9vKTsKKyAgICBmb3IgKGxl
dCBpID0gMDsgaSA8IDEwMDA7ICsraSkgeworICAgICAgICBmb28oMCk7CisgICAgICAgIGFzc2Vy
dC5lcShjYWxsZWQsIHRydWUpOworICAgICAgICBjYWxsZWQgPSBmYWxzZTsKKyAgICB9CisgICAg
c2hvdWxkVGhyb3cgPSB0cnVlOworICAgIGZvciAobGV0IGkgPSAwOyBpIDwgMTAwMDsgKytpKSB7
CisgICAgICAgIGFzc2VydC50aHJvd3MoKCkgPT4gZm9vKDApLCBFcnJvciwgIlRocmV3Iik7Cisg
ICAgICAgIGFzc2VydC5lcShjYWxsZWQsIHRydWUpOworICAgICAgICBjYWxsZWQgPSBmYWxzZTsK
KyAgICB9Cit9CisKK3sKKyAgICBmdW5jdGlvbiBtYWtlSW5zdGFuY2UoKSB7CisgICAgICAgIGNv
bnN0IHRhYmxlRGVzY3JpcHRpb24gPSB7aW5pdGlhbDogMSwgZWxlbWVudDogImFueWZ1bmMifTsK
KyAgICAgICAgY29uc3QgYnVpbGRlciA9IG5ldyBCdWlsZGVyKCkKKyAgICAgICAgICAgIC5UeXBl
KCkKKyAgICAgICAgICAgICAgICAuRnVuYyhbImkzMiJdLCAidm9pZCIpCisgICAgICAgICAgICAu
RW5kKCkKKyAgICAgICAgICAgIC5JbXBvcnQoKQorICAgICAgICAgICAgICAgIC5UYWJsZSgiaW1w
IiwgInRhYmxlIiwgdGFibGVEZXNjcmlwdGlvbikKKyAgICAgICAgICAgIC5FbmQoKQorICAgICAg
ICAgICAgLkZ1bmN0aW9uKCkuRW5kKCkKKyAgICAgICAgICAgIC5FeHBvcnQoKQorICAgICAgICAg
ICAgICAgIC5GdW5jdGlvbigiZm9vIikKKyAgICAgICAgICAgIC5FbmQoKQorICAgICAgICAgICAg
LkNvZGUoKQorICAgICAgICAgICAgICAgIC5GdW5jdGlvbigiZm9vIiwge3BhcmFtczpbImkzMiIs
ICJpMzIiXSwgcmV0OiJ2b2lkIn0pCisgICAgICAgICAgICAgICAgICAgIC5HZXRMb2NhbCgxKSAv
LyBwYXJhbWV0ZXIgdG8gY2FsbAorICAgICAgICAgICAgICAgICAgICAuR2V0TG9jYWwoMCkgLy8g
Y2FsbCBpbmRleAorICAgICAgICAgICAgICAgICAgICAuQ2FsbEluZGlyZWN0KDAsIDApIC8vIGNh
bGxpbmcgZnVuY3Rpb24gb2YgdHlwZSBbJ2kzMiddID0+ICd2b2lkJworICAgICAgICAgICAgICAg
ICAgICAuUmV0dXJuKCkKKyAgICAgICAgICAgICAgICAuRW5kKCkKKyAgICAgICAgICAgIC5FbmQo
KTsKKworICAgICAgICBjb25zdCBiaW4gPSBidWlsZGVyLldlYkFzc2VtYmx5KCkuZ2V0KCk7Cisg
ICAgICAgIGNvbnN0IG1vZHVsZSA9IG5ldyBXZWJBc3NlbWJseS5Nb2R1bGUoYmluKTsKKyAgICAg
ICAgY29uc3QgdGFibGUgPSBuZXcgV2ViQXNzZW1ibHkuVGFibGUodGFibGVEZXNjcmlwdGlvbik7
CisgICAgICAgIHJldHVybiB7aW5zdGFuY2U6IG5ldyBXZWJBc3NlbWJseS5JbnN0YW5jZShtb2R1
bGUsIHtpbXA6IHt0YWJsZX19KSwgdGFibGV9OworICAgIH0KKworICAgIGZ1bmN0aW9uIG1ha2VJ
bnN0YW5jZTIobWVtb3J5LCBmKSB7CisgICAgICAgIGNvbnN0IGJ1aWxkZXIgPSBuZXcgQnVpbGRl
cigpCisgICAgICAgICAgICAuVHlwZSgpCisgICAgICAgICAgICAuRW5kKCkKKyAgICAgICAgICAg
IC5JbXBvcnQoKQorICAgICAgICAgICAgICAgIC5GdW5jdGlvbigiaW1wIiwgImYiLCB7cGFyYW1z
OlsnaTMyJywgJ2kzMiddLCByZXQ6InZvaWQifSkKKyAgICAgICAgICAgICAgICAuTWVtb3J5KCJp
bXAiLCAibWVtb3J5IiwgbWVtb3J5RGVzY3JpcHRpb24pCisgICAgICAgICAgICAuRW5kKCkKKyAg
ICAgICAgICAgIC5GdW5jdGlvbigpLkVuZCgpCisgICAgICAgICAgICAuRXhwb3J0KCkKKyAgICAg
ICAgICAgICAgICAuRnVuY3Rpb24oImZvbyIpCisgICAgICAgICAgICAuRW5kKCkKKyAgICAgICAg
ICAgIC5Db2RlKCkKKyAgICAgICAgICAgICAgICAuRnVuY3Rpb24oImZvbyIsIHtwYXJhbXM6IFsi
aTMyIl0sIHJldDogInZvaWQiIH0pCisgICAgICAgICAgICAgICAgICAgIC5HZXRMb2NhbCgwKQor
ICAgICAgICAgICAgICAgICAgICAuR2V0TG9jYWwoMCkKKyAgICAgICAgICAgICAgICAgICAgLkkz
MkxvYWQoMiwgMCkKKyAgICAgICAgICAgICAgICAgICAgLkNhbGwoMCkKKyAgICAgICAgICAgICAg
ICAgICAgLlJldHVybigpCisgICAgICAgICAgICAgICAgLkVuZCgpCisgICAgICAgICAgICAuRW5k
KCk7CisKKworICAgICAgICBjb25zdCBiaW4gPSBidWlsZGVyLldlYkFzc2VtYmx5KCkuZ2V0KCk7
CisgICAgICAgIGNvbnN0IG1vZHVsZSA9IG5ldyBXZWJBc3NlbWJseS5Nb2R1bGUoYmluKTsKKyAg
ICAgICAgcmV0dXJuIG5ldyBXZWJBc3NlbWJseS5JbnN0YW5jZShtb2R1bGUsIHtpbXA6IHtmLCBt
ZW1vcnl9fSk7CisgICAgfQorCisgICAgY29uc3Qge2luc3RhbmNlOiBpMSwgdGFibGU6IHQxfSA9
IG1ha2VJbnN0YW5jZSgpOworICAgIGNvbnN0IGZvbyA9IChtZW1PZmZzZXQpID0+IGkxLmV4cG9y
dHMuZm9vKDAsIG1lbU9mZnNldCk7CisKKyAgICBjb25zdCBtZW1vcnlEZXNjcmlwdGlvbiA9IHtp
bml0aWFsOjF9OworICAgIGNvbnN0IG1lbSA9IG5ldyBXZWJBc3NlbWJseS5NZW1vcnkobWVtb3J5
RGVzY3JpcHRpb24pOworICAgIGxldCBjYWxsZWQgPSBmYWxzZTsKKworICAgIGNvbnN0IHBhZ2VT
aXplID0gNjQgKiAxMDI0OworICAgIGxldCBidWYgPSBuZXcgVWludDMyQXJyYXkobWVtLmJ1ZmZl
cik7CisgICAgY29uc3QgaTIgPSBtYWtlSW5zdGFuY2UyKG1lbSwgZnVuY3Rpb24oaSwgdmFsdWUp
IHsKKyAgICAgICAgYXNzZXJ0LmVxKGkgJiAzLCAwKTsKKyAgICAgICAgYXNzZXJ0LmVxKGJ1Zltp
LzRdLCB2YWx1ZSk7CisgICAgICAgIGNhbGxlZCA9IHRydWU7CisgICAgfSk7CisgICAgdDEuc2V0
KDAsIGkyLmV4cG9ydHMuZm9vKTsKKyAgICAKKyAgICBmb3IgKGxldCBpID0gMDsgaSA8IHBhZ2VT
aXplLzQ7ICsraSkgeworICAgICAgICBidWZbaV0gPSBpKzE7CisgICAgfQorCisgICAgZm9yIChs
ZXQgaSA9IDA7IGkgPCBwYWdlU2l6ZS80OyArK2kpIHsKKyAgICAgICAgZm9vKGkqNCk7CisgICAg
ICAgIGFzc2VydC5lcShjYWxsZWQsIHRydWUpOworICAgICAgICBjYWxsZWQgPSBmYWxzZTsKKyAg
ICB9CisKKyAgICBmb3IgKGxldCBpID0gcGFnZVNpemUvNDsgaSA8IDIqcGFnZVNpemUvNDsgKytp
KSB7CisgICAgICAgIGFzc2VydC50aHJvd3MoKCkgPT4gZm9vKGkqNCksIFdlYkFzc2VtYmx5LlJ1
bnRpbWVFcnJvciwgIk91dCBvZiBib3VuZHMgbWVtb3J5IGFjY2VzcyIpOworICAgICAgICBhc3Nl
cnQuZXEoY2FsbGVkLCBmYWxzZSk7CisgICAgfQorfQorCit7CisgICAgZnVuY3Rpb24gbWFrZUlu
c3RhbmNlKCkgeworICAgICAgICBjb25zdCB0YWJsZURlc2NyaXB0aW9uID0ge2luaXRpYWw6IDEs
IGVsZW1lbnQ6ICJhbnlmdW5jIn07CisgICAgICAgIGNvbnN0IGJ1aWxkZXIgPSBuZXcgQnVpbGRl
cigpCisgICAgICAgICAgICAuVHlwZSgpCisgICAgICAgICAgICAgICAgLkZ1bmMoWyJpMzIiXSwg
InZvaWQiKQorICAgICAgICAgICAgLkVuZCgpCisgICAgICAgICAgICAuSW1wb3J0KCkKKyAgICAg
ICAgICAgICAgICAuVGFibGUoImltcCIsICJ0YWJsZSIsIHRhYmxlRGVzY3JpcHRpb24pCisgICAg
ICAgICAgICAuRW5kKCkKKyAgICAgICAgICAgIC5GdW5jdGlvbigpLkVuZCgpCisgICAgICAgICAg
ICAuRXhwb3J0KCkKKyAgICAgICAgICAgICAgICAuRnVuY3Rpb24oImZvbyIpCisgICAgICAgICAg
ICAuRW5kKCkKKyAgICAgICAgICAgIC5Db2RlKCkKKyAgICAgICAgICAgICAgICAuRnVuY3Rpb24o
ImZvbyIsIHtwYXJhbXM6WyJpMzIiLCAiaTMyIl0sIHJldDoidm9pZCJ9KQorICAgICAgICAgICAg
ICAgICAgICAuR2V0TG9jYWwoMSkgLy8gcGFyYW1ldGVyIHRvIGNhbGwKKyAgICAgICAgICAgICAg
ICAgICAgLkdldExvY2FsKDApIC8vIGNhbGwgaW5kZXgKKyAgICAgICAgICAgICAgICAgICAgLkNh
bGxJbmRpcmVjdCgwLCAwKSAvLyBjYWxsaW5nIGZ1bmN0aW9uIG9mIHR5cGUgWydpMzInXSA9PiAn
dm9pZCcKKyAgICAgICAgICAgICAgICAgICAgLlJldHVybigpCisgICAgICAgICAgICAgICAgLkVu
ZCgpCisgICAgICAgICAgICAuRW5kKCk7CisKKyAgICAgICAgY29uc3QgYmluID0gYnVpbGRlci5X
ZWJBc3NlbWJseSgpLmdldCgpOworICAgICAgICBjb25zdCBtb2R1bGUgPSBuZXcgV2ViQXNzZW1i
bHkuTW9kdWxlKGJpbik7CisgICAgICAgIGNvbnN0IHRhYmxlID0gbmV3IFdlYkFzc2VtYmx5LlRh
YmxlKHRhYmxlRGVzY3JpcHRpb24pOworICAgICAgICByZXR1cm4ge2luc3RhbmNlOiBuZXcgV2Vi
QXNzZW1ibHkuSW5zdGFuY2UobW9kdWxlLCB7aW1wOiB7dGFibGV9fSksIHRhYmxlfTsKKyAgICB9
CisKKyAgICBmdW5jdGlvbiBtYWtlSW5zdGFuY2UyKG1lbW9yeSwgZikgeworICAgICAgICBjb25z
dCBidWlsZGVyID0gbmV3IEJ1aWxkZXIoKQorICAgICAgICAgICAgLlR5cGUoKQorICAgICAgICAg
ICAgLkVuZCgpCisgICAgICAgICAgICAuSW1wb3J0KCkKKyAgICAgICAgICAgICAgICAuRnVuY3Rp
b24oImltcCIsICJmIiwge3BhcmFtczpbJ2kzMicsICdpMzInXSwgcmV0OiJ2b2lkIn0pCisgICAg
ICAgICAgICAgICAgLk1lbW9yeSgiaW1wIiwgIm1lbW9yeSIsIG1lbW9yeURlc2NyaXB0aW9uKQor
ICAgICAgICAgICAgLkVuZCgpCisgICAgICAgICAgICAuRnVuY3Rpb24oKS5FbmQoKQorICAgICAg
ICAgICAgLkV4cG9ydCgpCisgICAgICAgICAgICAgICAgLkZ1bmN0aW9uKCJmb28iKQorICAgICAg
ICAgICAgLkVuZCgpCisgICAgICAgICAgICAuQ29kZSgpCisgICAgICAgICAgICAgICAgLkZ1bmN0
aW9uKCJmb28iLCB7cGFyYW1zOiBbImkzMiJdLCByZXQ6ICJ2b2lkIiB9KQorICAgICAgICAgICAg
ICAgICAgICAuR2V0TG9jYWwoMCkKKyAgICAgICAgICAgICAgICAgICAgLkdldExvY2FsKDApCisg
ICAgICAgICAgICAgICAgICAgIC5JMzJMb2FkKDIsIDApCisgICAgICAgICAgICAgICAgICAgIC5D
YWxsKDApCisgICAgICAgICAgICAgICAgICAgIC5SZXR1cm4oKQorICAgICAgICAgICAgICAgIC5F
bmQoKQorICAgICAgICAgICAgLkVuZCgpOworCisKKyAgICAgICAgY29uc3QgYmluID0gYnVpbGRl
ci5XZWJBc3NlbWJseSgpLmdldCgpOworICAgICAgICBjb25zdCBtb2R1bGUgPSBuZXcgV2ViQXNz
ZW1ibHkuTW9kdWxlKGJpbik7CisgICAgICAgIHJldHVybiBuZXcgV2ViQXNzZW1ibHkuSW5zdGFu
Y2UobW9kdWxlLCB7aW1wOiB7ZiwgbWVtb3J5fX0pOworICAgIH0KKworICAgIGZ1bmN0aW9uIGV4
cG9ydEltcG9ydChmKSB7CisgICAgICAgIGxldCBidWlsZGVyID0gKG5ldyBCdWlsZGVyKCkpCisg
ICAgICAgICAgICAuVHlwZSgpLkVuZCgpCisgICAgICAgICAgICAuSW1wb3J0KCkKKyAgICAgICAg
ICAgICAgICAuRnVuY3Rpb24oImltcCIsICJmIiwge3BhcmFtczogWydpMzInXSwgcmV0OiJ2b2lk
In0pCisgICAgICAgICAgICAuRW5kKCkKKyAgICAgICAgICAgIC5GdW5jdGlvbigpLkVuZCgpCisg
ICAgICAgICAgICAuRXhwb3J0KCkKKyAgICAgICAgICAgICAgICAuRnVuY3Rpb24oImZ1bmMiLCB7
bW9kdWxlOiAiaW1wIiwgZmllbGQ6ICJmIn0pCisgICAgICAgICAgICAuRW5kKCkKKyAgICAgICAg
ICAgIC5Db2RlKCkuRW5kKCk7CisgICAgICAgIHJldHVybiAobmV3IFdlYkFzc2VtYmx5Lkluc3Rh
bmNlKG5ldyBXZWJBc3NlbWJseS5Nb2R1bGUoYnVpbGRlci5XZWJBc3NlbWJseSgpLmdldCgpKSwg
e2ltcDoge2Z9fSkpLmV4cG9ydHMuZnVuYzsKKyAgICB9CisKKyAgICBjb25zdCB7aW5zdGFuY2U6
IGkxLCB0YWJsZTogdDF9ID0gbWFrZUluc3RhbmNlKCk7CisgICAgY29uc3QgZm9vID0gKG1lbU9m
ZnNldCkgPT4gaTEuZXhwb3J0cy5mb28oMCwgbWVtT2Zmc2V0KTsKKworICAgIGNvbnN0IG1lbW9y
eURlc2NyaXB0aW9uID0ge2luaXRpYWw6MX07CisgICAgY29uc3QgbWVtID0gbmV3IFdlYkFzc2Vt
Ymx5Lk1lbW9yeShtZW1vcnlEZXNjcmlwdGlvbik7CisgICAgbGV0IGNhbGxlZCA9IGZhbHNlOwor
CisgICAgY29uc3QgcGFnZVNpemUgPSA2NCAqIDEwMjQ7CisgICAgbGV0IGJ1ZiA9IG5ldyBVaW50
MzJBcnJheShtZW0uYnVmZmVyKTsKKyAgICBjb25zdCBpMiA9IG1ha2VJbnN0YW5jZTIobWVtLCBm
dW5jdGlvbihpLCB2YWx1ZSkgeworICAgICAgICBhc3NlcnQuZXEoaSAmIDMsIDApOworICAgICAg
ICBhc3NlcnQuZXEoYnVmW2kvNF0sIHZhbHVlKTsKKyAgICAgICAgY2FsbGVkID0gdHJ1ZTsKKyAg
ICB9KTsKKworICAgIGNvbnN0IGV4cG9ydGVkSW1wb3J0ID0gZXhwb3J0SW1wb3J0KGZ1bmN0aW9u
KG9mZnNldCkgeworICAgICAgICBpMi5leHBvcnRzLmZvbyhvZmZzZXQpOworICAgIH0pOworICAg
IHQxLnNldCgwLCBleHBvcnRlZEltcG9ydCk7CisgICAgCisgICAgZm9yIChsZXQgaSA9IDA7IGkg
PCBwYWdlU2l6ZS80OyArK2kpIHsKKyAgICAgICAgYnVmW2ldID0gaSsxOworICAgIH0KKworICAg
IGZvciAobGV0IGkgPSAwOyBpIDwgcGFnZVNpemUvNDsgKytpKSB7CisgICAgICAgIGZvbyhpKjQp
OworICAgICAgICBhc3NlcnQuZXEoY2FsbGVkLCB0cnVlKTsKKyAgICAgICAgY2FsbGVkID0gZmFs
c2U7CisgICAgfQorCisgICAgZm9yIChsZXQgaSA9IHBhZ2VTaXplLzQ7IGkgPCAyKnBhZ2VTaXpl
LzQ7ICsraSkgeworICAgICAgICBhc3NlcnQudGhyb3dzKCgpID0+IGZvbyhpKjQpLCBXZWJBc3Nl
bWJseS5SdW50aW1lRXJyb3IsICJPdXQgb2YgYm91bmRzIG1lbW9yeSBhY2Nlc3MiKTsKKyAgICAg
ICAgYXNzZXJ0LmVxKGNhbGxlZCwgZmFsc2UpOworICAgIH0KK30KSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L0NoYW5nZUxvZwkocmV2aXNpb24gMjE2OTQ3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0No
YW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDQ1IEBACisyMDE3LTA1LTE2ICBTYWFt
IEJhcmF0aSAgPHNiYXJhdGlAYXBwbGUuY29tPgorCisgICAgICAgIFdlIGRvbid0IGRvIGNvbnRl
eHQgc3dpdGNoZXMgZm9yIFdhc20tPldhc20gY2FsbCBpbmRpcmVjdAorICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTcyMTg4CisgICAgICAgIDxyZGFyOi8v
cHJvYmxlbS8zMjIzMTgyOD4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4K
KworICAgICAgICBXZSBkaWQgbm90IGRvIGEgY29udGV4dCBzd2l0Y2ggd2hlbiBkb2luZyBhbiBp
bmRpcmVjdCBjYWxsLiAKKyAgICAgICAgVGhpcyBpcyBjbGVhcmx5IHdyb25nLCBzaW5jZSB0aGUg
dGhpbmcgd2UncmUgbWFraW5nIGFuIGluZGlyZWN0CisgICAgICAgIGNhbGwgdG8gY291bGQgYmUg
ZnJvbSBhbm90aGVyIGluc3RhbmNlLiBUaGlzIHBhdGNoIGZpeGVzIHRoaXMKKyAgICAgICAgb3Zl
cnNpZ2h0IGJ5IGRvaW5nIGEgdmVyeSBzaW1wbGUgY29udGV4dCBzd2l0Y2guIEkndmUgYWxzbyBv
cGVuZWQKKyAgICAgICAgYSBidWcgdG8gbWFrZSBpbmRpcmVjdCBjYWxscyBmYXN0OiBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTcyMTk3CisgICAgICAgIHNpbmNlIHRo
aXMgcGF0Y2ggYWRkcyB5ZXQgYW5vdGhlciBicmFuY2ggdG8gdGhlIGluZGlyZWN0IGNhbGwgcGF0
aC4KKyAgICAgICAgSSd2ZSBhbHNvIGFkZGVkIHRlc3RzIHRoYXQgZWl0aGVyIHRocm93IG9yIGNy
YXNoIGJlZm9yZSB0aGlzIGNoYW5nZS4KKworICAgICAgICAqIEphdmFTY3JpcHRDb3JlLnhjb2Rl
cHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogd2FzbS9XYXNtQjNJUkdlbmVyYXRvci5j
cHA6CisgICAgICAgICogd2FzbS9qcy9KU1dlYkFzc2VtYmx5VGFibGUuaDoKKyAgICAgICAgKEpT
Qzo6SlNXZWJBc3NlbWJseVRhYmxlOjpvZmZzZXRPZkpTRnVuY3Rpb25zKToKKyAgICAgICAgKiB3
YXNtL2pzL1dlYkFzc2VtYmx5RnVuY3Rpb24uY3BwOgorICAgICAgICAoSlNDOjpXZWJBc3NlbWJs
eUZ1bmN0aW9uOjp2aXNpdENoaWxkcmVuKToKKyAgICAgICAgKEpTQzo6V2ViQXNzZW1ibHlGdW5j
dGlvbjo6ZmluaXNoQ3JlYXRpb24pOiBEZWxldGVkLgorICAgICAgICAqIHdhc20vanMvV2ViQXNz
ZW1ibHlGdW5jdGlvbi5oOgorICAgICAgICAoSlNDOjpXZWJBc3NlbWJseUZ1bmN0aW9uOjppbnN0
YW5jZSk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OldlYkFzc2VtYmx5RnVuY3Rpb246Om9mZnNl
dE9mSW5zdGFuY2UpOiBEZWxldGVkLgorICAgICAgICAqIHdhc20vanMvV2ViQXNzZW1ibHlGdW5j
dGlvbkJhc2UuY3BwOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6V2ViQXNzZW1ibHlGdW5jdGlvbkJh
c2U6OldlYkFzc2VtYmx5RnVuY3Rpb25CYXNlKToKKyAgICAgICAgKEpTQzo6V2ViQXNzZW1ibHlG
dW5jdGlvbkJhc2U6OnZpc2l0Q2hpbGRyZW4pOgorICAgICAgICAoSlNDOjpXZWJBc3NlbWJseUZ1
bmN0aW9uQmFzZTo6ZmluaXNoQ3JlYXRpb24pOgorICAgICAgICAqIHdhc20vanMvV2ViQXNzZW1i
bHlGdW5jdGlvbkJhc2UuaDogQWRkZWQuCisgICAgICAgIChKU0M6OldlYkFzc2VtYmx5RnVuY3Rp
b25CYXNlOjppbnN0YW5jZSk6CisgICAgICAgIChKU0M6OldlYkFzc2VtYmx5RnVuY3Rpb25CYXNl
OjpvZmZzZXRPZkluc3RhbmNlKToKKyAgICAgICAgKiB3YXNtL2pzL1dlYkFzc2VtYmx5TW9kdWxl
UmVjb3JkLmNwcDoKKyAgICAgICAgKEpTQzo6V2ViQXNzZW1ibHlNb2R1bGVSZWNvcmQ6Omxpbmsp
OgorICAgICAgICAoSlNDOjpXZWJBc3NlbWJseU1vZHVsZVJlY29yZDo6ZXZhbHVhdGUpOgorICAg
ICAgICAqIHdhc20vanMvV2ViQXNzZW1ibHlXcmFwcGVyRnVuY3Rpb24uY3BwOgorICAgICAgICAo
SlNDOjpXZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlvbjo6Y3JlYXRlKToKKyAgICAgICAgKEpTQzo6
V2ViQXNzZW1ibHlXcmFwcGVyRnVuY3Rpb246OmZpbmlzaENyZWF0aW9uKToKKyAgICAgICAgKEpT
Qzo6V2ViQXNzZW1ibHlXcmFwcGVyRnVuY3Rpb246OnZpc2l0Q2hpbGRyZW4pOgorICAgICAgICAq
IHdhc20vanMvV2ViQXNzZW1ibHlXcmFwcGVyRnVuY3Rpb24uaDoKKwogMjAxNy0wNS0xNiAgWXVz
dWtlIFN1enVraSAgPHV0YXRhbmUudGVhQGdtYWlsLmNvbT4KIAogICAgICAgICBVbnJldmlld2Vk
LCBhZGQgT2JqZWN0aXZlIEMgZmlsZXMgdG8gQ01ha2UgTWFjIHBvcnQKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvQ01ha2VMaXN0cy50eHQJKHJldmlzaW9uIDIxNjk0NykKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAkod29ya2luZyBjb3B5KQpAQCAtOTgxLDYgKzk4MSw3
IEBAIHNldChKYXZhU2NyaXB0Q29yZV9TT1VSQ0VTCiAgICAgd2FzbS9qcy9XZWJBc3NlbWJseUNv
bXBpbGVFcnJvckNvbnN0cnVjdG9yLmNwcAogICAgIHdhc20vanMvV2ViQXNzZW1ibHlDb21waWxl
RXJyb3JQcm90b3R5cGUuY3BwCiAgICAgd2FzbS9qcy9XZWJBc3NlbWJseUZ1bmN0aW9uLmNwcAor
ICAgIHdhc20vanMvV2ViQXNzZW1ibHlGdW5jdGlvbkJhc2UuY3BwCiAgICAgd2FzbS9qcy9XZWJB
c3NlbWJseUluc3RhbmNlQ29uc3RydWN0b3IuY3BwCiAgICAgd2FzbS9qcy9XZWJBc3NlbWJseUlu
c3RhbmNlUHJvdG90eXBlLmNwcAogICAgIHdhc20vanMvV2ViQXNzZW1ibHlMaW5rRXJyb3JDb25z
dHJ1Y3Rvci5jcHAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54
Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAy
MTY5NDcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9q
L3Byb2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAtMTMyNSw2ICsxMzI1LDggQEAKIAkJ
NDQ0M0FFMzMxNkUxODhEOTAwNzZGMTEwIC8qIEZvdW5kYXRpb24uZnJhbWV3b3JrIGluIEZyYW1l
d29ya3MgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTFGMEVCNjEwNUM4NkM2
QjAwRTZERjFCIC8qIEZvdW5kYXRpb24uZnJhbWV3b3JrICovOyB9OwogCQk0NTE1MzlCOTEyREM5
OTQ1MDBFRjdBQzQgLyogWWFyci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gNDUxNTM5QjgxMkRDOTk0NTAwRUY3QUM0IC8qIFlhcnIuaCAqLzsgc2V0dGlu
Z3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk0NzNEQTRBNDc2NEM0NUZF
ODcxQjA0ODUgLyogRGVmaW5lUHJvcGVydHlBdHRyaWJ1dGVzLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxNjk5NDhFREU2OEQ0MDU0QjAxRUY3OTcgLyog
RGVmaW5lUHJvcGVydHlBdHRyaWJ1dGVzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAo
UHJpdmF0ZSwgKTsgfTsgfTsKKwkJNTIxMzIyNDUxRUNCQ0U4MjAwRjY1NjE1IC8qIFdlYkFzc2Vt
Ymx5RnVuY3Rpb25CYXNlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDUyMTMyMjQzMUVDQkNFODIwMEY2NTYxNSAvKiBXZWJBc3NlbWJseUZ1bmN0aW9u
QmFzZS5jcHAgKi87IH07CisJCTUyMTMyMjQ2MUVDQkNFODIwMEY2NTYxNSAvKiBXZWJBc3NlbWJs
eUZ1bmN0aW9uQmFzZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gNTIxMzIyNDQxRUNCQ0U4MjAwRjY1NjE1IC8qIFdlYkFzc2VtYmx5RnVuY3Rpb25CYXNl
LmggKi87IH07CiAJCTUyNTBEMkQxMUU4REEwNUEwMDI5QTkzMiAvKiBXYXNtVGh1bmtzLmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUyNTBEMkNGMUU4
REEwNUEwMDI5QTkzMiAvKiBXYXNtVGh1bmtzLmNwcCAqLzsgfTsKIAkJNTI1MEQyRDIxRThEQTA1
QTAwMjlBOTMyIC8qIFdhc21UaHVua3MuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDUyNTBEMkQwMUU4REEwNUEwMDI5QTkzMiAvKiBXYXNtVGh1bmtzLmgg
Ki87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNTI1QzBE
RDkxRTkzNTg0NzAwMjE4NENEIC8qIFdhc21DYWxsZWUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTI1QzBERDcxRTkzNTg0NzAwMjE4NENEIC8qIFdh
c21DYWxsZWUuY3BwICovOyB9OwpAQCAtMTM0Niw3ICsxMzQ4LDcgQEAKIAkJNTJDOTUyQjcxOUEy
ODk4NTAwNjlCMzg2IC8qIFR5cGVQcm9maWxlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gNTJDOTUyQjYxOUEyODk4NTAwNjlCMzg2IC8qIFR5cGVQcm9m
aWxlci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJ
CTUyQzk1MkI5MTlBMjhBMUMwMDY5QjM4NiAvKiBUeXBlUHJvZmlsZXIuY3BwIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTJDOTUyQjgxOUEyOEExQzAwNjlC
Mzg2IC8qIFR5cGVQcm9maWxlci5jcHAgKi87IH07CiAJCTUyRjZDMzVEMUU3MUVCMDgwMDgxRjRD
QyAvKiBXZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlvbi5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MkY2QzM1QjFFNzFFQjA4MDA4MUY0Q0MgLyogV2Vi
QXNzZW1ibHlXcmFwcGVyRnVuY3Rpb24uY3BwICovOyB9OwotCQk1MkY2QzM1RTFFNzFFQjA4MDA4
MUY0Q0MgLyogV2ViQXNzZW1ibHlXcmFwcGVyRnVuY3Rpb24uaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUyRjZDMzVDMUU3MUVCMDgwMDgxRjRDQyAvKiBX
ZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlvbi5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0g
KFByaXZhdGUsICk7IH07IH07CisJCTUyRjZDMzVFMUU3MUVCMDgwMDgxRjRDQyAvKiBXZWJBc3Nl
bWJseVdyYXBwZXJGdW5jdGlvbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gNTJGNkMzNUMxRTcxRUIwODAwODFGNENDIC8qIFdlYkFzc2VtYmx5V3JhcHBl
ckZ1bmN0aW9uLmggKi87IH07CiAJCTUzMEZCMzAyMUU3QTBCNkUwMDNDMTlERCAvKiBXYXNtV29y
a2xpc3QuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUz
MEZCMzAxMUU3QTBCNkUwMDNDMTlERCAvKiBXYXNtV29ya2xpc3QuaCAqLzsgfTsKIAkJNTMwRkIz
MDQxRTdBMTE0NjAwM0MxOUREIC8qIFdhc21Xb3JrbGlzdC5jcHAgaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MzBGQjMwMzFFN0ExMTQ2MDAzQzE5REQgLyog
V2FzbVdvcmtsaXN0LmNwcCAqLzsgfTsKIAkJNTMxMUJENEExRUE1ODFFNTAwNTI1MjgxIC8qIFdh
c21PTUdQbGFuLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDUzMTFCRDQ4MUVBNTgxRTUwMDUyNTI4MSAvKiBXYXNtT01HUGxhbi5jcHAgKi87IH07CkBA
IC0zODczLDYgKzM4NzUsOCBAQAogCQk0Q0U5NzhFMzg1QTg0OTgxOTkwNTIxNTMgLyogTW9kdWxl
TmFtZXNwYWNlQWNjZXNzQ2FzZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBN
b2R1bGVOYW1lc3BhY2VBY2Nlc3NDYXNlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTUxRjBFQjYxMDVDODZDNkIwMEU2REYxQiAvKiBGb3VuZGF0aW9uLmZyYW1ld29yayAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHdyYXBwZXIuZnJhbWV3
b3JrOyBuYW1lID0gRm91bmRhdGlvbi5mcmFtZXdvcms7IHBhdGggPSAvU3lzdGVtL0xpYnJhcnkv
RnJhbWV3b3Jrcy9Gb3VuZGF0aW9uLmZyYW1ld29yazsgc291cmNlVHJlZSA9ICI8YWJzb2x1dGU+
IjsgfTsKIAkJNTFGMEVDMDcwNUM4NkM5QTAwRTZERjFCIC8qIGxpYm9iamMuZHlsaWIgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSAiY29tcGlsZWQubWFj
aC1vLmR5bGliIjsgbmFtZSA9IGxpYm9iamMuZHlsaWI7IHBhdGggPSAvdXNyL2xpYi9saWJvYmpj
LmR5bGliOyBzb3VyY2VUcmVlID0gIjxhYnNvbHV0ZT4iOyB9OworCQk1MjEzMjI0MzFFQ0JDRTgy
MDBGNjU2MTUgLyogV2ViQXNzZW1ibHlGdW5jdGlvbkJhc2UuY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBuYW1lID0gV2ViQXNzZW1ibHlGdW5jdGlvbkJhc2UuY3BwOyBwYXRoID0g
anMvV2ViQXNzZW1ibHlGdW5jdGlvbkJhc2UuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OworCQk1MjEzMjI0NDFFQ0JDRTgyMDBGNjU2MTUgLyogV2ViQXNzZW1ibHlGdW5jdGlvbkJhc2Uu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gV2ViQXNzZW1ibHlGdW5jdGlvbkJh
c2UuaDsgcGF0aCA9IGpzL1dlYkFzc2VtYmx5RnVuY3Rpb25CYXNlLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTUyNTBEMkNGMUU4REEwNUEwMDI5QTkzMiAvKiBXYXNtVGh1bmtzLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdhc21UaHVua3MuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1MjUwRDJEMDFFOERBMDVBMDAyOUE5MzIgLyog
V2FzbVRodW5rcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXYXNtVGh1bmtz
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUyNUMwREQ3MUU5MzU4NDcwMDIxODRD
RCAvKiBXYXNtQ2FsbGVlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9
IFdhc21DYWxsZWUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtODA4OSw2ICs4
MDkzLDggQEAKIAkJCQlBRDJGQ0JCMzFEQjU4REE0MDBCM0U3MzYgLyogV2ViQXNzZW1ibHlDb21w
aWxlRXJyb3JQcm90b3R5cGUuaCAqLywKIAkJCQlBRDQ5MzdDOTFEREQyNzM0MDA3N0M4MDcgLyog
V2ViQXNzZW1ibHlGdW5jdGlvbi5jcHAgKi8sCiAJCQkJQUQ0OTM3Q0ExREREMjczNDAwNzdDODA3
IC8qIFdlYkFzc2VtYmx5RnVuY3Rpb24uaCAqLywKKwkJCQk1MjEzMjI0MzFFQ0JDRTgyMDBGNjU2
MTUgLyogV2ViQXNzZW1ibHlGdW5jdGlvbkJhc2UuY3BwICovLAorCQkJCTUyMTMyMjQ0MUVDQkNF
ODIwMEY2NTYxNSAvKiBXZWJBc3NlbWJseUZ1bmN0aW9uQmFzZS5oICovLAogCQkJCUFEMkZDQkI0
MURCNThEQTQwMEIzRTczNiAvKiBXZWJBc3NlbWJseUluc3RhbmNlQ29uc3RydWN0b3IuY3BwICov
LAogCQkJCUFEMkZDQkI1MURCNThEQTQwMEIzRTczNiAvKiBXZWJBc3NlbWJseUluc3RhbmNlQ29u
c3RydWN0b3IuaCAqLywKIAkJCQlBRDJGQ0JCNjFEQjU4REE0MDBCM0U3MzYgLyogV2ViQXNzZW1i
bHlJbnN0YW5jZVByb3RvdHlwZS5jcHAgKi8sCkBAIC04NzAzLDYgKzg3MDksNyBAQAogCQkJCTBG
MzRCMTRBMTZENDIwMTMwMDFDREE1QSAvKiBERkdVc2VLaW5kLmggaW4gSGVhZGVycyAqLywKIAkJ
CQkwRjk3MTUzMTFFQjI4QkVFMDBBMTY0NUQgLyogR0NSZXF1ZXN0LmggaW4gSGVhZGVycyAqLywK
IAkJCQkwRjNCM0EyQzE1NDc1MDAyMDAzRUQwRkYgLyogREZHVmFsaWRhdGUuaCBpbiBIZWFkZXJz
ICovLAorCQkJCTUyMTMyMjQ2MUVDQkNFODIwMEY2NTYxNSAvKiBXZWJBc3NlbWJseUZ1bmN0aW9u
QmFzZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYyQkRDNDgxNTIyODAyOTAwQ0Q4OTEwIC8qIERG
R1ZhbHVlU291cmNlLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjAxMjMzMzE5NDRFQTFCMDA4NDNB
MEMgLyogREZHVmFsdWVTdHJlbmd0aC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZFMjU0RjcxQUJE
REQyMjAwQTdDNkQyIC8qIERGR1ZhcmFyZ3NGb3J3YXJkaW5nUGhhc2UuaCBpbiBIZWFkZXJzICov
LApAQCAtMTA1NzEsNiArMTA1NzgsNyBAQAogCQkJCUE1Mzk4RkFDMUM3NTBEQTYwMDYwQTk2MyAv
KiBIZWFwUHJvZmlsZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTU0QzJBQjAxQzY1NDRFRTAw
QTE4RDc4IC8qIEhlYXBTbmFwc2hvdC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBNTMxMUMzNzFD
NzdDRUNBMDBFNkIxQjYgLyogSGVhcFNuYXBzaG90QnVpbGRlci5jcHAgaW4gU291cmNlcyAqLywK
KwkJCQk1MjEzMjI0NTFFQ0JDRTgyMDBGNjU2MTUgLyogV2ViQXNzZW1ibHlGdW5jdGlvbkJhc2Uu
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEY0NjgwRDQxNEJCRDI0OTAwQkZFMjcyIC8qIEhvc3RD
YWxsUmV0dXJuVmFsdWUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJREMyMTQzMDgxQ0EzMkU1ODAw
MEE4ODY5IC8qIElDU3RhdHMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMTQ3RjM5Q0UxMDdFQzM3
NjAwNDI3QTQ4IC8qIElkZW50aWZpZXIuY3BwIGluIFNvdXJjZXMgKi8sCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQjNJUkdlbmVyYXRvci5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUIzSVJHZW5lcmF0b3IuY3BwCShyZXZpc2lv
biAyMTY5NDcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQjNJUkdlbmVyYXRv
ci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEwODksMTIgKzEwODksMTUgQEAgYXV0byBCM0lSR2Vu
ZXJhdG9yOjphZGRDYWxsSW5kaXJlY3QoY29ucwogICAgIEFTU0VSVChzaWduYXR1cmUuYXJndW1l
bnRDb3VudCgpID09IGFyZ3Muc2l6ZSgpKTsKIAogICAgIEV4cHJlc3Npb25UeXBlIGNhbGxhYmxl
RnVuY3Rpb25CdWZmZXI7CisgICAgRXhwcmVzc2lvblR5cGUganNGdW5jdGlvbkJ1ZmZlcjsKICAg
ICBFeHByZXNzaW9uVHlwZSBjYWxsYWJsZUZ1bmN0aW9uQnVmZmVyU2l6ZTsKICAgICB7CiAgICAg
ICAgIEV4cHJlc3Npb25UeXBlIHRhYmxlID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxNZW1v
cnlWYWx1ZT4obV9wcm9jLCBMb2FkLCBwb2ludGVyVHlwZSgpLCBvcmlnaW4oKSwKICAgICAgICAg
ICAgIG1faW5zdGFuY2VWYWx1ZSwgc2FmZUNhc3Q8aW50MzJfdD4oSlNXZWJBc3NlbWJseUluc3Rh
bmNlOjpvZmZzZXRPZlRhYmxlKCkpKTsKICAgICAgICAgY2FsbGFibGVGdW5jdGlvbkJ1ZmZlciA9
IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8TWVtb3J5VmFsdWU+KG1fcHJvYywgTG9hZCwgcG9p
bnRlclR5cGUoKSwgb3JpZ2luKCksCiAgICAgICAgICAgICB0YWJsZSwgc2FmZUNhc3Q8aW50MzJf
dD4oSlNXZWJBc3NlbWJseVRhYmxlOjpvZmZzZXRPZkZ1bmN0aW9ucygpKSk7CisgICAgICAgIGpz
RnVuY3Rpb25CdWZmZXIgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PE1lbW9yeVZhbHVlPiht
X3Byb2MsIExvYWQsIHBvaW50ZXJUeXBlKCksIG9yaWdpbigpLAorICAgICAgICAgICAgdGFibGUs
IHNhZmVDYXN0PGludDMyX3Q+KEpTV2ViQXNzZW1ibHlUYWJsZTo6b2Zmc2V0T2ZKU0Z1bmN0aW9u
cygpKSk7CiAgICAgICAgIGNhbGxhYmxlRnVuY3Rpb25CdWZmZXJTaXplID0gbV9jdXJyZW50Qmxv
Y2stPmFwcGVuZE5ldzxNZW1vcnlWYWx1ZT4obV9wcm9jLCBMb2FkLCBJbnQzMiwgb3JpZ2luKCks
CiAgICAgICAgICAgICB0YWJsZSwgc2FmZUNhc3Q8aW50MzJfdD4oSlNXZWJBc3NlbWJseVRhYmxl
OjpvZmZzZXRPZlNpemUoKSkpOwogICAgIH0KQEAgLTExNDAsMTEgKzExNDMsNTYgQEAgYXV0byBC
M0lSR2VuZXJhdG9yOjphZGRDYWxsSW5kaXJlY3QoY29ucwogICAgICAgICB9KTsKICAgICB9CiAK
KyAgICAvLyBEbyBhIGNvbnRleHQgc3dpdGNoIGlmIG5lZWRlZC4KKyAgICB7CisgICAgICAgIFZh
bHVlKiBvZmZzZXQgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFZhbHVlPihtX3Byb2MsIE11
bCwgb3JpZ2luKCksCisgICAgICAgICAgICBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFZhbHVl
PihtX3Byb2MsIFpFeHQzMiwgb3JpZ2luKCksIGNhbGxlZUluZGV4KSwKKyAgICAgICAgICAgIGNv
bnN0YW50KHBvaW50ZXJUeXBlKCksIHNpemVvZihXcml0ZUJhcnJpZXI8SlNPYmplY3Q+KSkpOwor
ICAgICAgICBWYWx1ZSoganNPYmplY3QgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PE1lbW9y
eVZhbHVlPihtX3Byb2MsIExvYWQsIHBvaW50ZXJUeXBlKCksIG9yaWdpbigpLAorICAgICAgICAg
ICAgbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxWYWx1ZT4obV9wcm9jLCBBZGQsIG9yaWdpbigp
LCBqc0Z1bmN0aW9uQnVmZmVyLCBvZmZzZXQpKTsKKworICAgICAgICBCYXNpY0Jsb2NrKiBjb250
aW51YXRpb24gPSBtX3Byb2MuYWRkQmxvY2soKTsKKyAgICAgICAgQmFzaWNCbG9jayogZG9Db250
ZXh0U3dpdGNoID0gbV9wcm9jLmFkZEJsb2NrKCk7CisKKyAgICAgICAgVmFsdWUqIG5ld0NvbnRl
eHQgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PE1lbW9yeVZhbHVlPihtX3Byb2MsIExvYWQs
IHBvaW50ZXJUeXBlKCksIG9yaWdpbigpLAorICAgICAgICAgICAganNPYmplY3QsIHNhZmVDYXN0
PGludDMyX3Q+KFdlYkFzc2VtYmx5RnVuY3Rpb25CYXNlOjpvZmZzZXRPZkluc3RhbmNlKCkpKTsK
KyAgICAgICAgVmFsdWUqIGlzU2FtZUNvbnRleHQgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3
PFZhbHVlPihtX3Byb2MsIEVxdWFsLCBvcmlnaW4oKSwKKyAgICAgICAgICAgIG5ld0NvbnRleHQs
IG1faW5zdGFuY2VWYWx1ZSk7CisgICAgICAgIG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXdDb250
cm9sVmFsdWUobV9wcm9jLCBCMzo6QnJhbmNoLCBvcmlnaW4oKSwKKyAgICAgICAgICAgIGlzU2Ft
ZUNvbnRleHQsIEZyZXF1ZW50ZWRCbG9jayhjb250aW51YXRpb24pLCBGcmVxdWVudGVkQmxvY2so
ZG9Db250ZXh0U3dpdGNoKSk7CisKKyAgICAgICAgUGF0Y2hwb2ludFZhbHVlKiBwYXRjaHBvaW50
ID0gZG9Db250ZXh0U3dpdGNoLT5hcHBlbmROZXc8UGF0Y2hwb2ludFZhbHVlPihtX3Byb2MsIEIz
OjpWb2lkLCBvcmlnaW4oKSk7CisgICAgICAgIC8vIFdlIHBlc3NpbWlzdGljYWxseSBhc3N1bWUg
d2UncmUgY2FsbGluZyBzb21ldGhpbmcgd2l0aCBCb3VuZHNDaGVja2luZyBtZW1vcnkuCisgICAg
ICAgIC8vIEZJWE1FOiBXZSBzaG91bGRuJ3QgaGF2ZSB0byBkbyB0aGlzOiBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTcyMTgxCisgICAgICAgIHBhdGNocG9pbnQtPmNs
b2JiZXIoUGlubmVkUmVnaXN0ZXJJbmZvOjpnZXQoKS50b1NhdmUoTWVtb3J5TW9kZTo6Qm91bmRz
Q2hlY2tpbmcpKTsKKyAgICAgICAgcGF0Y2hwb2ludC0+Y2xvYmJlcihSZWdpc3RlclNldDo6bWFj
cm9TY3JhdGNoUmVnaXN0ZXJzKCkpOworICAgICAgICBwYXRjaHBvaW50LT5hcHBlbmQobmV3Q29u
dGV4dCwgVmFsdWVSZXA6OlNvbWVSZWdpc3Rlcik7CisgICAgICAgIHBhdGNocG9pbnQtPnNldEdl
bmVyYXRvcihbPV0gKENDYWxsSGVscGVycyYgaml0LCBjb25zdCBCMzo6U3RhY2ttYXBHZW5lcmF0
aW9uUGFyYW1zJiBwYXJhbXMpIHsKKyAgICAgICAgICAgIEFsbG93TWFjcm9TY3JhdGNoUmVnaXN0
ZXJVc2FnZSBhbGxvd1NjcmF0Y2goaml0KTsKKyAgICAgICAgICAgIEdQUlJlZyBuZXdDb250ZXh0
ID0gcGFyYW1zWzBdLmdwcigpOworICAgICAgICAgICAgY29uc3QgUGlubmVkUmVnaXN0ZXJJbmZv
JiBwaW5uZWRSZWdzID0gUGlubmVkUmVnaXN0ZXJJbmZvOjpnZXQoKTsKKyAgICAgICAgICAgIGNv
bnN0IGF1dG8mIHNpemVSZWdzID0gcGlubmVkUmVncy5zaXplUmVnaXN0ZXJzOworICAgICAgICAg
ICAgR1BSUmVnIGJhc2VNZW1vcnkgPSBwaW5uZWRSZWdzLmJhc2VNZW1vcnlQb2ludGVyOworICAg
ICAgICAgICAgQVNTRVJUKG5ld0NvbnRleHQgIT0gYmFzZU1lbW9yeSk7CisKKyAgICAgICAgICAg
IGppdC5zdG9yZVdhc21Db250ZXh0KG5ld0NvbnRleHQpOworICAgICAgICAgICAgaml0LmxvYWRQ
dHIoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKG5ld0NvbnRleHQsIENvbnRleHQ6Om9mZnNldE9mTWVt
b3J5KCkpLCBiYXNlTWVtb3J5KTsgLy8gSlNXZWJBc3NlbWJseU1lbW9yeSouCisgICAgICAgICAg
ICBBU1NFUlQoc2l6ZVJlZ3Muc2l6ZSgpID09IDEpOworICAgICAgICAgICAgQVNTRVJUKHNpemVS
ZWdzWzBdLnNpemVSZWdpc3RlciAhPSBiYXNlTWVtb3J5KTsKKyAgICAgICAgICAgIEFTU0VSVChz
aXplUmVnc1swXS5zaXplUmVnaXN0ZXIgIT0gbmV3Q29udGV4dCk7CisgICAgICAgICAgICBBU1NF
UlQoIXNpemVSZWdzWzBdLnNpemVPZmZzZXQpOworICAgICAgICAgICAgaml0LmxvYWRQdHIoQ0Nh
bGxIZWxwZXJzOjpBZGRyZXNzKGJhc2VNZW1vcnksIEpTV2ViQXNzZW1ibHlNZW1vcnk6Om9mZnNl
dE9mU2l6ZSgpKSwgc2l6ZVJlZ3NbMF0uc2l6ZVJlZ2lzdGVyKTsgLy8gTWVtb3J5IHNpemUuCisg
ICAgICAgICAgICBqaXQubG9hZFB0cihDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoYmFzZU1lbW9yeSwg
SlNXZWJBc3NlbWJseU1lbW9yeTo6b2Zmc2V0T2ZNZW1vcnkoKSksIGJhc2VNZW1vcnkpOyAvLyBX
YXNtTWVtb3J5Ojp2b2lkKi4KKyAgICAgICAgfSk7CisgICAgICAgIGRvQ29udGV4dFN3aXRjaC0+
YXBwZW5kTmV3Q29udHJvbFZhbHVlKG1fcHJvYywgSnVtcCwgb3JpZ2luKCksIGNvbnRpbnVhdGlv
bik7CisKKyAgICAgICAgbV9jdXJyZW50QmxvY2sgPSBjb250aW51YXRpb247CisgICAgfQorCiAg
ICAgRXhwcmVzc2lvblR5cGUgY2FsbGVlQ29kZSA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8
TWVtb3J5VmFsdWU+KG1fcHJvYywgTG9hZCwgcG9pbnRlclR5cGUoKSwgb3JpZ2luKCksCiAgICAg
ICAgIG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8TWVtb3J5VmFsdWU+KG1fcHJvYywgTG9hZCwg
cG9pbnRlclR5cGUoKSwgb3JpZ2luKCksIGNhbGxhYmxlRnVuY3Rpb24sCiAgICAgICAgICAgICBz
YWZlQ2FzdDxpbnQzMl90PihPQkpFQ1RfT0ZGU0VUT0YoQ2FsbGFibGVGdW5jdGlvbiwgY29kZSkp
KSk7CiAKLQogICAgIFR5cGUgcmV0dXJuVHlwZSA9IHNpZ25hdHVyZS5yZXR1cm5UeXBlKCk7CiAg
ICAgcmVzdWx0ID0gd2FzbUNhbGxpbmdDb252ZW50aW9uKCkuc2V0dXBDYWxsKG1fcHJvYywgbV9j
dXJyZW50QmxvY2ssIG9yaWdpbigpLCBhcmdzLCB0b0IzVHlwZShyZXR1cm5UeXBlKSwKICAgICAg
ICAgWz1dIChQYXRjaHBvaW50VmFsdWUqIHBhdGNocG9pbnQpIHsKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlUYWJsZS5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlUYWJsZS5oCShyZXZpc2lv
biAyMTY5NDcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5
VGFibGUuaAkod29ya2luZyBjb3B5KQpAQCAtNjIsNiArNjIsNyBAQCBwdWJsaWM6CiAKICAgICBz
dGF0aWMgcHRyZGlmZl90IG9mZnNldE9mU2l6ZSgpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihK
U1dlYkFzc2VtYmx5VGFibGUsIG1fc2l6ZSk7IH0KICAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNl
dE9mRnVuY3Rpb25zKCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKEpTV2ViQXNzZW1ibHlUYWJs
ZSwgbV9mdW5jdGlvbnMpOyB9CisgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZkpTRnVuY3Rp
b25zKCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKEpTV2ViQXNzZW1ibHlUYWJsZSwgbV9qc0Z1
bmN0aW9ucyk7IH0KIAogICAgIHN0YXRpYyBib29sIGlzVmFsaWRTaXplKHVpbnQzMl90IHNpemUp
CiAgICAgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlG
dW5jdGlvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMv
V2ViQXNzZW1ibHlGdW5jdGlvbi5jcHAJKHJldmlzaW9uIDIxNjk0NykKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5RnVuY3Rpb24uY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0xODQsMTQgKzE4NCw2IEBAIHZvaWQgV2ViQXNzZW1ibHlGdW5jdGlvbjo6dmlzaXRDaGls
ZHJlbigKICAgICBXZWJBc3NlbWJseUZ1bmN0aW9uKiB0aGlzT2JqZWN0ID0ganNDYXN0PFdlYkFz
c2VtYmx5RnVuY3Rpb24qPihjZWxsKTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRo
aXNPYmplY3QsIGluZm8oKSk7CiAgICAgQmFzZTo6dmlzaXRDaGlsZHJlbih0aGlzT2JqZWN0LCB2
aXNpdG9yKTsKLSAgICB2aXNpdG9yLmFwcGVuZCh0aGlzT2JqZWN0LT5tX2luc3RhbmNlKTsKLX0K
LQotdm9pZCBXZWJBc3NlbWJseUZ1bmN0aW9uOjpmaW5pc2hDcmVhdGlvbihWTSYgdm0sIE5hdGl2
ZUV4ZWN1dGFibGUqIGV4ZWN1dGFibGUsIHVuc2lnbmVkIGxlbmd0aCwgY29uc3QgU3RyaW5nJiBu
YW1lLCBKU1dlYkFzc2VtYmx5SW5zdGFuY2UqIGluc3RhbmNlKQotewotICAgIEJhc2U6OmZpbmlz
aENyZWF0aW9uKHZtLCBleGVjdXRhYmxlLCBsZW5ndGgsIG5hbWUpOwotICAgIEFTU0VSVChpbmhl
cml0cyh2bSwgaW5mbygpKSk7Ci0gICAgbV9pbnN0YW5jZS5zZXQodm0sIHRoaXMsIGluc3RhbmNl
KTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
d2FzbS9qcy9XZWJBc3NlbWJseUZ1bmN0aW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlGdW5jdGlvbi5oCShyZXZpc2lvbiAyMTY5NDcp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseUZ1bmN0aW9uLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTI3LDggKzI3LDggQEAKIAogI2lmIEVOQUJMRShXRUJBU1NFTUJM
WSkKIAotI2luY2x1ZGUgIkpTRnVuY3Rpb24uaCIKICNpbmNsdWRlICJXYXNtQ2FsbGVlLmgiCisj
aW5jbHVkZSAiV2ViQXNzZW1ibHlGdW5jdGlvbkJhc2UuaCIKICNpbmNsdWRlIDx3dGYvTm9uY29w
eWFibGUuaD4KIAogbmFtZXNwYWNlIEpTQyB7CkBAIC00MSw5ICs0MSw5IEBAIG5hbWVzcGFjZSBC
MyB7CiBjbGFzcyBDb21waWxhdGlvbjsKIH0KIAotY2xhc3MgV2ViQXNzZW1ibHlGdW5jdGlvbiA6
IHB1YmxpYyBKU0Z1bmN0aW9uIHsKK2NsYXNzIFdlYkFzc2VtYmx5RnVuY3Rpb24gOiBwdWJsaWMg
V2ViQXNzZW1ibHlGdW5jdGlvbkJhc2UgewogcHVibGljOgotICAgIHR5cGVkZWYgSlNGdW5jdGlv
biBCYXNlOworICAgIHVzaW5nIEJhc2UgPSBXZWJBc3NlbWJseUZ1bmN0aW9uQmFzZTsKIAogICAg
IGNvbnN0IHN0YXRpYyB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IEJhc2U6OlN0cnVjdHVyZUZs
YWdzOwogCkBAIC01MiwyNSArNTIsMjAgQEAgcHVibGljOgogICAgIEpTX0VYUE9SVF9QUklWQVRF
IHN0YXRpYyBXZWJBc3NlbWJseUZ1bmN0aW9uKiBjcmVhdGUoVk0mLCBKU0dsb2JhbE9iamVjdCos
IHVuc2lnbmVkLCBjb25zdCBTdHJpbmcmLCBKU1dlYkFzc2VtYmx5SW5zdGFuY2UqLCBXYXNtOjpD
YWxsZWUmIGpzRW50cnlwb2ludCwgV2FzbTo6V2FzbUVudHJ5cG9pbnRMb2FkTG9jYXRpb24sIFdh
c206OlNpZ25hdHVyZUluZGV4KTsKICAgICBzdGF0aWMgU3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1
cmUoVk0mLCBKU0dsb2JhbE9iamVjdCosIEpTVmFsdWUpOwogCi0gICAgSlNXZWJBc3NlbWJseUlu
c3RhbmNlKiBpbnN0YW5jZSgpIGNvbnN0IHsgcmV0dXJuIG1faW5zdGFuY2UuZ2V0KCk7IH0KICAg
ICBXYXNtOjpTaWduYXR1cmVJbmRleCBzaWduYXR1cmVJbmRleCgpIGNvbnN0IHsgcmV0dXJuIG1f
d2FzbUZ1bmN0aW9uLnNpZ25hdHVyZUluZGV4OyB9CiAgICAgV2FzbTo6V2FzbUVudHJ5cG9pbnRM
b2FkTG9jYXRpb24gd2FzbUVudHJ5cG9pbnRMb2FkTG9jYXRpb24oKSBjb25zdCB7IHJldHVybiBt
X3dhc21GdW5jdGlvbi5jb2RlOyB9CiAgICAgV2FzbTo6Q2FsbGFibGVGdW5jdGlvbiBjYWxsYWJs
ZUZ1bmN0aW9uKCkgY29uc3QgeyByZXR1cm4gbV93YXNtRnVuY3Rpb247IH0KIAogICAgIHZvaWQq
IGpzRW50cnlwb2ludCgpIHsgcmV0dXJuIG1fanNFbnRyeXBvaW50OyB9CiAKLSAgICBzdGF0aWMg
cHRyZGlmZl90IG9mZnNldE9mSW5zdGFuY2UoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoV2Vi
QXNzZW1ibHlGdW5jdGlvbiwgbV9pbnN0YW5jZSk7IH0KICAgICBzdGF0aWMgcHRyZGlmZl90IG9m
ZnNldE9mV2FzbUVudHJ5cG9pbnRMb2FkTG9jYXRpb24oKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VU
T0YoV2ViQXNzZW1ibHlGdW5jdGlvbiwgbV93YXNtRnVuY3Rpb24pICsgV2FzbTo6Q2FsbGFibGVG
dW5jdGlvbjo6b2Zmc2V0T2ZXYXNtRW50cnlwb2ludExvYWRMb2NhdGlvbigpOyB9CiAKIHByb3Rl
Y3RlZDoKICAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9y
Jik7CiAKLSAgICB2b2lkIGZpbmlzaENyZWF0aW9uKFZNJiwgTmF0aXZlRXhlY3V0YWJsZSosIHVu
c2lnbmVkIGxlbmd0aCwgY29uc3QgU3RyaW5nJiBuYW1lLCBKU1dlYkFzc2VtYmx5SW5zdGFuY2Uq
KTsKLQogcHJpdmF0ZToKICAgICBXZWJBc3NlbWJseUZ1bmN0aW9uKFZNJiwgSlNHbG9iYWxPYmpl
Y3QqLCBTdHJ1Y3R1cmUqLCBXYXNtOjpDYWxsZWUmIGpzRW50cnlwb2ludCwgV2FzbTo6V2FzbUVu
dHJ5cG9pbnRMb2FkTG9jYXRpb24sIFdhc206OlNpZ25hdHVyZUluZGV4KTsKIAotICAgIFdyaXRl
QmFycmllcjxKU1dlYkFzc2VtYmx5SW5zdGFuY2U+IG1faW5zdGFuY2U7CiAgICAgLy8gSXQncyBz
YWZlIHRvIGp1c3QgaG9sZCB0aGUgcmF3IENhbGxhYmxlRnVuY3Rpb24vanNFbnRyeXBvaW50IGJl
Y2F1c2Ugd2UgaGF2ZSBhIHJlZmVyZW5jZQogICAgIC8vIHRvIG91ciBJbnN0YW5jZSwgd2hpY2gg
cG9pbnRzIHRvIHRoZSBNb2R1bGUgdGhhdCBleHBvcnRlZCB1cywgd2hpY2gKICAgICAvLyBlbnN1
cmVzIHRoYXQgdGhlIGFjdHVhbCBTaWduYXR1cmUvY29kZSBkb2Vzbid0IGdldCBkZWFsbG9jYXRl
ZC4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5RnVuY3Rp
b25CYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9X
ZWJBc3NlbWJseUZ1bmN0aW9uQmFzZS5jcHAJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlGdW5jdGlvbkJhc2UuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0wLDAgKzEsNTkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAq
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiV2ViQXNzZW1ibHlGdW5j
dGlvbkJhc2UuaCIKKworI2lmIEVOQUJMRShXRUJBU1NFTUJMWSkKKworI2luY2x1ZGUgIkpTQ0lu
bGluZXMuaCIKKyNpbmNsdWRlICJKU1dlYkFzc2VtYmx5SW5zdGFuY2UuaCIKKworbmFtZXNwYWNl
IEpTQyB7CisKK2NvbnN0IENsYXNzSW5mbyBXZWJBc3NlbWJseUZ1bmN0aW9uQmFzZTo6c19pbmZv
ID0geyAiV2ViQXNzZW1ibHlGdW5jdGlvbkJhc2UiLCAmQmFzZTo6c19pbmZvLCBudWxscHRyLCBD
UkVBVEVfTUVUSE9EX1RBQkxFKFdlYkFzc2VtYmx5RnVuY3Rpb25CYXNlKSB9OworCitXZWJBc3Nl
bWJseUZ1bmN0aW9uQmFzZTo6V2ViQXNzZW1ibHlGdW5jdGlvbkJhc2UoVk0mIHZtLCBKU0dsb2Jh
bE9iamVjdCogZ2xvYmFsT2JqZWN0LCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKKyAgICA6IEJhc2Uo
dm0sIGdsb2JhbE9iamVjdCwgc3RydWN0dXJlKQoreyB9CisKK3ZvaWQgV2ViQXNzZW1ibHlGdW5j
dGlvbkJhc2U6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRv
cikKK3sKKyAgICBXZWJBc3NlbWJseUZ1bmN0aW9uQmFzZSogdGhpc09iamVjdCA9IGpzQ2FzdDxX
ZWJBc3NlbWJseUZ1bmN0aW9uQmFzZSo+KGNlbGwpOworICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5I
RVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKKyAgICBCYXNlOjp2aXNpdENoaWxkcmVuKHRoaXNP
YmplY3QsIHZpc2l0b3IpOworICAgIHZpc2l0b3IuYXBwZW5kKHRoaXNPYmplY3QtPm1faW5zdGFu
Y2UpOworfQorCit2b2lkIFdlYkFzc2VtYmx5RnVuY3Rpb25CYXNlOjpmaW5pc2hDcmVhdGlvbihW
TSYgdm0sIE5hdGl2ZUV4ZWN1dGFibGUqIGV4ZWN1dGFibGUsIHVuc2lnbmVkIGxlbmd0aCwgY29u
c3QgU3RyaW5nJiBuYW1lLCBKU1dlYkFzc2VtYmx5SW5zdGFuY2UqIGluc3RhbmNlKQoreworICAg
IEJhc2U6OmZpbmlzaENyZWF0aW9uKHZtLCBleGVjdXRhYmxlLCBsZW5ndGgsIG5hbWUpOworICAg
IEFTU0VSVChpbmhlcml0cyh2bSwgaW5mbygpKSk7CisgICAgbV9pbnN0YW5jZS5zZXQodm0sIHRo
aXMsIGluc3RhbmNlKTsKK30KKworfSAvLyBuYW1lc3BhY2UgSlNDCisKKyNlbmRpZiAvLyBFTkFC
TEUoV0VCQVNTRU1CTFkpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJB
c3NlbWJseUZ1bmN0aW9uQmFzZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS93YXNtL2pzL1dlYkFzc2VtYmx5RnVuY3Rpb25CYXNlLmgJKG5vbmV4aXN0ZW50KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlGdW5jdGlvbkJhc2UuaAkod29y
a2luZyBjb3B5KQpAQCAtMCwwICsxLDU3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE3IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBFTkFCTEUoV0VCQVNTRU1CTFkp
CisKKyNpbmNsdWRlICJKU0Z1bmN0aW9uLmgiCisKK25hbWVzcGFjZSBKU0MgeworCitjbGFzcyBK
U0dsb2JhbE9iamVjdDsKK2NsYXNzIEpTV2ViQXNzZW1ibHlJbnN0YW5jZTsKKworY2xhc3MgV2Vi
QXNzZW1ibHlGdW5jdGlvbkJhc2UgOiBwdWJsaWMgSlNGdW5jdGlvbiB7CitwdWJsaWM6CisgICAg
dXNpbmcgQmFzZSA9IEpTRnVuY3Rpb247CisKKyAgICBjb25zdCBzdGF0aWMgdW5zaWduZWQgU3Ry
dWN0dXJlRmxhZ3MgPSBCYXNlOjpTdHJ1Y3R1cmVGbGFnczsKKworICAgIERFQ0xBUkVfSU5GTzsK
KworICAgIEpTV2ViQXNzZW1ibHlJbnN0YW5jZSogaW5zdGFuY2UoKSBjb25zdCB7IHJldHVybiBt
X2luc3RhbmNlLmdldCgpOyB9CisgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZkluc3RhbmNl
KCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKFdlYkFzc2VtYmx5RnVuY3Rpb25CYXNlLCBtX2lu
c3RhbmNlKTsgfQorCitwcm90ZWN0ZWQ6CisgICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihK
U0NlbGwqLCBTbG90VmlzaXRvciYpOworICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oVk0mLCBOYXRp
dmVFeGVjdXRhYmxlKiwgdW5zaWduZWQgbGVuZ3RoLCBjb25zdCBTdHJpbmcmIG5hbWUsIEpTV2Vi
QXNzZW1ibHlJbnN0YW5jZSopOworICAgIFdlYkFzc2VtYmx5RnVuY3Rpb25CYXNlKFZNJiwgSlNH
bG9iYWxPYmplY3QqLCBTdHJ1Y3R1cmUqKTsKKyAgICBXcml0ZUJhcnJpZXI8SlNXZWJBc3NlbWJs
eUluc3RhbmNlPiBtX2luc3RhbmNlOworfTsKKworfSAvLyBuYW1lc3BhY2UgSlNDCisKKyNlbmRp
ZiAvLyBFTkFCTEUoV0VCQVNTRU1CTFkpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2Fz
bS9qcy9XZWJBc3NlbWJseU1vZHVsZVJlY29yZC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlNb2R1bGVSZWNvcmQuY3BwCShyZXZpc2lv
biAyMTY5NDcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseU1v
ZHVsZVJlY29yZC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTExNyw3ICsxMTcsNyBAQCB2b2lkIFdl
YkFzc2VtYmx5TW9kdWxlUmVjb3JkOjpsaW5rKEV4ZWNTCiAgICAgICAgICAgICAgICAgICAgIGV4
cG9ydGVkVmFsdWUgPSBmdW5jdGlvbkltcG9ydDsKICAgICAgICAgICAgICAgICBlbHNlIHsKICAg
ICAgICAgICAgICAgICAgICAgV2FzbTo6U2lnbmF0dXJlSW5kZXggc2lnbmF0dXJlSW5kZXggPSBt
b2R1bGUtPnNpZ25hdHVyZUluZGV4RnJvbUZ1bmN0aW9uSW5kZXhTcGFjZShmdW5jdGlvbkluZGV4
KTsKLSAgICAgICAgICAgICAgICAgICAgZXhwb3J0ZWRWYWx1ZSA9IFdlYkFzc2VtYmx5V3JhcHBl
ckZ1bmN0aW9uOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgZnVuY3Rpb25JbXBvcnQsIGZ1bmN0
aW9uSW5kZXgsIGNvZGVCbG9jaywgc2lnbmF0dXJlSW5kZXgpOworICAgICAgICAgICAgICAgICAg
ICBleHBvcnRlZFZhbHVlID0gV2ViQXNzZW1ibHlXcmFwcGVyRnVuY3Rpb246OmNyZWF0ZSh2bSwg
Z2xvYmFsT2JqZWN0LCBmdW5jdGlvbkltcG9ydCwgZnVuY3Rpb25JbmRleCwgaW5zdGFuY2UsIHNp
Z25hdHVyZUluZGV4KTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9IGVsc2Ugewog
ICAgICAgICAgICAgICAgIC8vICAgaWlpLiBPdGhlcndpc2U6CkBAIC0yNjQsNyArMjY0LDcgQEAg
SlNWYWx1ZSBXZWJBc3NlbWJseU1vZHVsZVJlY29yZDo6ZXZhbHVhdAogICAgICAgICAgICAgICAg
ICAgICB9CiAKICAgICAgICAgICAgICAgICAgICAgdGFibGUtPnNldEZ1bmN0aW9uKHZtLCB0YWJs
ZUluZGV4LAotICAgICAgICAgICAgICAgICAgICAgICAgV2ViQXNzZW1ibHlXcmFwcGVyRnVuY3Rp
b246OmNyZWF0ZSh2bSwgbV9pbnN0YW5jZS0+Z2xvYmFsT2JqZWN0KCksIGZ1bmN0aW9uSW1wb3J0
LCBmdW5jdGlvbkluZGV4LCBjb2RlQmxvY2ssIHNpZ25hdHVyZUluZGV4KSk7CisgICAgICAgICAg
ICAgICAgICAgICAgICBXZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlvbjo6Y3JlYXRlKHZtLCBtX2lu
c3RhbmNlLT5nbG9iYWxPYmplY3QoKSwgZnVuY3Rpb25JbXBvcnQsIGZ1bmN0aW9uSW5kZXgsIG1f
aW5zdGFuY2UuZ2V0KCksIHNpZ25hdHVyZUluZGV4KSk7CiAgICAgICAgICAgICAgICAgICAgICsr
dGFibGVJbmRleDsKICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICAg
ICAgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlXcmFw
cGVyRnVuY3Rpb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNt
L2pzL1dlYkFzc2VtYmx5V3JhcHBlckZ1bmN0aW9uLmNwcAkocmV2aXNpb24gMjE2OTQ3KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlXcmFwcGVyRnVuY3Rpb24u
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMSw2ICszMSw3IEBACiAjaW5jbHVkZSAiRXJyb3IuaCIK
ICNpbmNsdWRlICJGdW5jdGlvblByb3RvdHlwZS5oIgogI2luY2x1ZGUgIkpTQ0lubGluZXMuaCIK
KyNpbmNsdWRlICJKU1dlYkFzc2VtYmx5SW5zdGFuY2UuaCIKIAogbmFtZXNwYWNlIEpTQyB7CiAK
QEAgLTU3LDIzICs1OCwyMiBAQCBXZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlvbjo6V2ViQXNzZW1i
bHlXCiAgICAgLCBtX3dhc21GdW5jdGlvbih3YXNtRnVuY3Rpb24pCiB7IH0KIAotV2ViQXNzZW1i
bHlXcmFwcGVyRnVuY3Rpb24qIFdlYkFzc2VtYmx5V3JhcHBlckZ1bmN0aW9uOjpjcmVhdGUoVk0m
IHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU09iamVjdCogZnVuY3Rpb24sIHVu
c2lnbmVkIGltcG9ydEluZGV4LCBKU1dlYkFzc2VtYmx5Q29kZUJsb2NrKiBjb2RlQmxvY2ssIFdh
c206OlNpZ25hdHVyZUluZGV4IHNpZ25hdHVyZUluZGV4KQorV2ViQXNzZW1ibHlXcmFwcGVyRnVu
Y3Rpb24qIFdlYkFzc2VtYmx5V3JhcHBlckZ1bmN0aW9uOjpjcmVhdGUoVk0mIHZtLCBKU0dsb2Jh
bE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU09iamVjdCogZnVuY3Rpb24sIHVuc2lnbmVkIGltcG9y
dEluZGV4LCBKU1dlYkFzc2VtYmx5SW5zdGFuY2UqIGluc3RhbmNlLCBXYXNtOjpTaWduYXR1cmVJ
bmRleCBzaWduYXR1cmVJbmRleCkKIHsKICAgICBBU1NFUlRfV0lUSF9NRVNTQUdFKCFmdW5jdGlv
bi0+aW5oZXJpdHModm0sIFdlYkFzc2VtYmx5V3JhcHBlckZ1bmN0aW9uOjppbmZvKCkpLCAiV2Ug
c2hvdWxkIG5ldmVyIGRvdWJsZSB3cmFwIGEgd3JhcHBlciBmdW5jdGlvbi4iKTsKICAgICBTdHJp
bmcgbmFtZSA9ICIiOwogICAgIE5hdGl2ZUV4ZWN1dGFibGUqIGV4ZWN1dGFibGUgPSB2bS5nZXRI
b3N0RnVuY3Rpb24oY2FsbFdlYkFzc2VtYmx5V3JhcHBlckZ1bmN0aW9uLCBOb0ludHJpbnNpYywg
Y2FsbEhvc3RGdW5jdGlvbkFzQ29uc3RydWN0b3IsIG51bGxwdHIsIG5hbWUpOwotICAgIFdlYkFz
c2VtYmx5V3JhcHBlckZ1bmN0aW9uKiByZXN1bHQgPSBuZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2Vs
bDxXZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlvbj4odm0uaGVhcCkpIFdlYkFzc2VtYmx5V3JhcHBl
ckZ1bmN0aW9uKHZtLCBnbG9iYWxPYmplY3QsIGdsb2JhbE9iamVjdC0+d2ViQXNzZW1ibHlXcmFw
cGVyRnVuY3Rpb25TdHJ1Y3R1cmUoKSwgV2FzbTo6Q2FsbGFibGVGdW5jdGlvbihzaWduYXR1cmVJ
bmRleCwgY29kZUJsb2NrLT53YXNtVG9Kc0NhbGxTdHViRm9ySW1wb3J0KGltcG9ydEluZGV4KSkp
OworICAgIFdlYkFzc2VtYmx5V3JhcHBlckZ1bmN0aW9uKiByZXN1bHQgPSBuZXcgKE5vdE51bGws
IGFsbG9jYXRlQ2VsbDxXZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlvbj4odm0uaGVhcCkpIFdlYkFz
c2VtYmx5V3JhcHBlckZ1bmN0aW9uKHZtLCBnbG9iYWxPYmplY3QsIGdsb2JhbE9iamVjdC0+d2Vi
QXNzZW1ibHlXcmFwcGVyRnVuY3Rpb25TdHJ1Y3R1cmUoKSwgV2FzbTo6Q2FsbGFibGVGdW5jdGlv
bihzaWduYXR1cmVJbmRleCwgaW5zdGFuY2UtPmNvZGVCbG9jaygpLT53YXNtVG9Kc0NhbGxTdHVi
Rm9ySW1wb3J0KGltcG9ydEluZGV4KSkpOwogICAgIGNvbnN0IFdhc206OlNpZ25hdHVyZSYgc2ln
bmF0dXJlID0gV2FzbTo6U2lnbmF0dXJlSW5mb3JtYXRpb246OmdldChzaWduYXR1cmVJbmRleCk7
Ci0gICAgcmVzdWx0LT5maW5pc2hDcmVhdGlvbih2bSwgZXhlY3V0YWJsZSwgc2lnbmF0dXJlLmFy
Z3VtZW50Q291bnQoKSwgbmFtZSwgZnVuY3Rpb24sIGNvZGVCbG9jayk7CisgICAgcmVzdWx0LT5m
aW5pc2hDcmVhdGlvbih2bSwgZXhlY3V0YWJsZSwgc2lnbmF0dXJlLmFyZ3VtZW50Q291bnQoKSwg
bmFtZSwgZnVuY3Rpb24sIGluc3RhbmNlKTsKICAgICByZXR1cm4gcmVzdWx0OwogfQogCi12b2lk
IFdlYkFzc2VtYmx5V3JhcHBlckZ1bmN0aW9uOjpmaW5pc2hDcmVhdGlvbihWTSYgdm0sIE5hdGl2
ZUV4ZWN1dGFibGUqIGV4ZWN1dGFibGUsIHVuc2lnbmVkIGxlbmd0aCwgY29uc3QgU3RyaW5nJiBu
YW1lLCBKU09iamVjdCogZnVuY3Rpb24sIEpTV2ViQXNzZW1ibHlDb2RlQmxvY2sqIGNvZGVCbG9j
aykKK3ZvaWQgV2ViQXNzZW1ibHlXcmFwcGVyRnVuY3Rpb246OmZpbmlzaENyZWF0aW9uKFZNJiB2
bSwgTmF0aXZlRXhlY3V0YWJsZSogZXhlY3V0YWJsZSwgdW5zaWduZWQgbGVuZ3RoLCBjb25zdCBT
dHJpbmcmIG5hbWUsIEpTT2JqZWN0KiBmdW5jdGlvbiwgSlNXZWJBc3NlbWJseUluc3RhbmNlKiBp
bnN0YW5jZSkKIHsKLSAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbih2bSwgZXhlY3V0YWJsZSwgbGVu
Z3RoLCBuYW1lKTsKKyAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbih2bSwgZXhlY3V0YWJsZSwgbGVu
Z3RoLCBuYW1lLCBpbnN0YW5jZSk7CiAgICAgUkVMRUFTRV9BU1NFUlQoSlNWYWx1ZShmdW5jdGlv
bikuaXNGdW5jdGlvbigpKTsKICAgICBtX2Z1bmN0aW9uLnNldCh2bSwgdGhpcywgZnVuY3Rpb24p
OwotICAgIG1fY29kZUJsb2NrLnNldCh2bSwgdGhpcywgY29kZUJsb2NrKTsKIH0KIAogU3RydWN0
dXJlKiBXZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlvbjo6Y3JlYXRlU3RydWN0dXJlKFZNJiB2bSwg
SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBwcm90b3R5cGUpCkBAIC04OCw3
ICs4OCw2IEBAIHZvaWQgV2ViQXNzZW1ibHlXcmFwcGVyRnVuY3Rpb246OnZpc2l0Q2gKICAgICBB
U1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CiAgICAgQmFzZTo6
dmlzaXRDaGlsZHJlbih0aGlzT2JqZWN0LCB2aXNpdG9yKTsKIAotICAgIHZpc2l0b3IuYXBwZW5k
KHRoaXNPYmplY3QtPm1fY29kZUJsb2NrKTsKICAgICB2aXNpdG9yLmFwcGVuZCh0aGlzT2JqZWN0
LT5tX2Z1bmN0aW9uKTsKIH0KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMv
V2ViQXNzZW1ibHlXcmFwcGVyRnVuY3Rpb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseVdyYXBwZXJGdW5jdGlvbi5oCShyZXZpc2lvbiAy
MTY5NDcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseVdyYXBw
ZXJGdW5jdGlvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNywyMCArMjcsMjAgQEAKIAogI2lmIEVO
QUJMRShXRUJBU1NFTUJMWSkKIAotI2luY2x1ZGUgIkpTRnVuY3Rpb24uaCIKICNpbmNsdWRlICJK
U1dlYkFzc2VtYmx5Q29kZUJsb2NrLmgiCisjaW5jbHVkZSAiV2ViQXNzZW1ibHlGdW5jdGlvbkJh
c2UuaCIKIAogbmFtZXNwYWNlIEpTQyB7CiAKLWNsYXNzIFdlYkFzc2VtYmx5V3JhcHBlckZ1bmN0
aW9uIDogcHVibGljIEpTRnVuY3Rpb24geworY2xhc3MgV2ViQXNzZW1ibHlXcmFwcGVyRnVuY3Rp
b24gOiBwdWJsaWMgV2ViQXNzZW1ibHlGdW5jdGlvbkJhc2UgewogcHVibGljOgotICAgIHR5cGVk
ZWYgSlNGdW5jdGlvbiBCYXNlOworICAgIHVzaW5nIEJhc2UgPSBXZWJBc3NlbWJseUZ1bmN0aW9u
QmFzZTsKIAogICAgIGNvbnN0IHN0YXRpYyB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IEJhc2U6
OlN0cnVjdHVyZUZsYWdzOwogCiAgICAgREVDTEFSRV9JTkZPOwogCi0gICAgc3RhdGljIFdlYkFz
c2VtYmx5V3JhcHBlckZ1bmN0aW9uKiBjcmVhdGUoVk0mLCBKU0dsb2JhbE9iamVjdCosIEpTT2Jq
ZWN0KiwgdW5zaWduZWQgaW1wb3J0SW5kZXgsIEpTV2ViQXNzZW1ibHlDb2RlQmxvY2sqLCBXYXNt
OjpTaWduYXR1cmVJbmRleCk7CisgICAgc3RhdGljIFdlYkFzc2VtYmx5V3JhcHBlckZ1bmN0aW9u
KiBjcmVhdGUoVk0mLCBKU0dsb2JhbE9iamVjdCosIEpTT2JqZWN0KiwgdW5zaWduZWQgaW1wb3J0
SW5kZXgsIEpTV2ViQXNzZW1ibHlJbnN0YW5jZSosIFdhc206OlNpZ25hdHVyZUluZGV4KTsKICAg
ICBzdGF0aWMgU3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoVk0mLCBKU0dsb2JhbE9iamVjdCos
IEpTVmFsdWUpOwogCiAgICAgV2FzbTo6U2lnbmF0dXJlSW5kZXggc2lnbmF0dXJlSW5kZXgoKSBj
b25zdCB7IHJldHVybiBtX3dhc21GdW5jdGlvbi5zaWduYXR1cmVJbmRleDsgfQpAQCAtNTEsMTgg
KzUxLDE1IEBAIHB1YmxpYzoKIHByb3RlY3RlZDoKICAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxk
cmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CiAKLSAgICB2b2lkIGZpbmlzaENyZWF0aW9uKFZN
JiwgTmF0aXZlRXhlY3V0YWJsZSosIHVuc2lnbmVkIGxlbmd0aCwgY29uc3QgU3RyaW5nJiBuYW1l
LCBKU09iamVjdCosIEpTV2ViQXNzZW1ibHlDb2RlQmxvY2sqKTsKKyAgICB2b2lkIGZpbmlzaENy
ZWF0aW9uKFZNJiwgTmF0aXZlRXhlY3V0YWJsZSosIHVuc2lnbmVkIGxlbmd0aCwgY29uc3QgU3Ry
aW5nJiBuYW1lLCBKU09iamVjdCosIEpTV2ViQXNzZW1ibHlJbnN0YW5jZSopOwogCiBwcml2YXRl
OgogICAgIFdlYkFzc2VtYmx5V3JhcHBlckZ1bmN0aW9uKFZNJiwgSlNHbG9iYWxPYmplY3QqLCBT
dHJ1Y3R1cmUqLCBXYXNtOjpDYWxsYWJsZUZ1bmN0aW9uKTsKIAotICAgIC8vIFdlIGtlZXAgYSBy
ZWZlcmVuY2UgdG8gb3VyIENvZGVCbG9jayBiZWNhdXNlIHdlIGhhdmUgYSByYXcKLSAgICAvLyBw
b2ludGVyIHRvIGFzbSBjb2RlIHRoYXQgaXQgb3ducy4KLSAgICBXcml0ZUJhcnJpZXI8SlNXZWJB
c3NlbWJseUNvZGVCbG9jaz4gbV9jb2RlQmxvY2s7CiAgICAgV3JpdGVCYXJyaWVyPEpTT2JqZWN0
PiBtX2Z1bmN0aW9uOwogICAgIC8vIEl0J3Mgc2FmZSB0byBqdXN0IGhvbGQgdGhlIHJhdyBDYWxs
YWJsZUZ1bmN0aW9uIGJlY2F1c2Ugd2UgaGF2ZSBhIHJlZmVyZW5jZQotICAgIC8vIHRvIG91ciBD
b2RlQmxvY2ssIHdoaWNoIHBvaW50cyB0byB0aGUgTW9kdWxlIHRoYXQgZXhwb3J0ZWQgdXMsIHdo
aWNoCi0gICAgLy8gZW5zdXJlcyB0aGF0IHRoZSBhY3R1YWwgU2lnbmF0dXJlL2NvZGUgZG9lc24n
dCBnZXQgZGVhbGxvY2F0ZWQuCisgICAgLy8gdG8gb3VyIEluc3RhbmNlLCB3aGljaCBwb2ludHMg
dG8gdGhlIENvZGVCbG9jaywgd2hpY2ggcG9pbnRzIHRvIHRoZSBNb2R1bGUKKyAgICAvLyB0aGF0
IGV4cG9ydGVkIHVzLCB3aGljaCBlbnN1cmVzIHRoYXQgdGhlIGFjdHVhbCBTaWduYXR1cmUvY29k
ZSBkb2Vzbid0IGdldCBkZWFsbG9jYXRlZC4KICAgICBXYXNtOjpDYWxsYWJsZUZ1bmN0aW9uIG1f
d2FzbUZ1bmN0aW9uOwogfTsKIAo=
</data>
<flag name="review"
          id="331423"
          type_id="1"
          status="+"
          setter="keith_miller"
    />
          </attachment>
      

    </bug>

</bugzilla>