<?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>177305</bug_id>
          
          <creation_ts>2017-09-21 09:31:55 -0700</creation_ts>
          <short_desc>WebAssembly: cache memory address / size on instance</short_desc>
          <delta_ts>2018-02-23 15:18:25 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebAssembly</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="JF Bastien">jfbastien</reporter>
          <assigned_to name="GSkachkov">gskachkov</assigned_to>
          <cc>commit-queue</cc>
    
    <cc>fpizlo</cc>
    
    <cc>gskachkov</cc>
    
    <cc>jfbastien</cc>
    
    <cc>keith_miller</cc>
    
    <cc>mark.lam</cc>
    
    <cc>msaboff</cc>
    
    <cc>rmorisset</cc>
    
    <cc>saam</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1351215</commentid>
    <comment_count>0</comment_count>
    <who name="JF Bastien">jfbastien</who>
    <bug_when>2017-09-21 09:31:55 -0700</bug_when>
    <thetext>(From a FIXME that didn&apos;t have a bug)

In Wasm::Memory, we should cache address / size to the instances to avoid a load on instance-&gt;instance calls. This will require updating all the instances when grow is called.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1377814</commentid>
    <comment_count>1</comment_count>
    <who name="GSkachkov">gskachkov</who>
    <bug_when>2017-12-04 12:11:16 -0800</bug_when>
    <thetext>I can try to fix this issue.

Wasm::Instance will have to add property cachedMemory and cachedSize, but Wasm::Memory should contain links to Wasm::Instance where Wasm::Memory is used to iterate within `grow`, is it correct understating of the issue?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1378015</commentid>
    <comment_count>2</comment_count>
    <who name="JF Bastien">jfbastien</who>
    <bug_when>2017-12-04 17:05:41 -0800</bug_when>
    <thetext>(In reply to GSkachkov from comment #1)
&gt; I can try to fix this issue.

Cool!

&gt; Wasm::Instance will have to add property cachedMemory and cachedSize,

Yes, and use it in the JIT instead of doing the indirection.

&gt; Wasm::Memory should contain links to Wasm::Instance where Wasm::Memory is
&gt; used to iterate within `grow`, is it correct understating of the issue?

Wasm::Memory can be used by multiple Wasm::Instance at the same time, so the Wasm::Memory has to know all of the Wasm::Instances that refer to it. The Instance owns the memory, so the back-pointers need to be weak references. Then yes, you would update all of them from grow.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1382304</commentid>
    <comment_count>3</comment_count>
      <attachid>329518</attachid>
    <who name="GSkachkov">gskachkov</who>
    <bug_when>2017-12-15 14:10:15 -0800</bug_when>
    <thetext>Created attachment 329518
Patch

WiP. Caching memory size &amp; addess in  wasm::Instance</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1382305</commentid>
    <comment_count>4</comment_count>
    <who name="JF Bastien">jfbastien</who>
    <bug_when>2017-12-15 14:11:03 -0800</bug_when>
    <thetext>(In reply to GSkachkov from comment #3)
&gt; Created attachment 329518 [details]
&gt; Patch
&gt; 
&gt; WiP. Caching memory size &amp; addess in  wasm::Instance

You&apos;ve marked as &quot;review?&quot;. Is it WIP or ready for review?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1382306</commentid>
    <comment_count>5</comment_count>
    <who name="GSkachkov">gskachkov</who>
    <bug_when>2017-12-15 14:15:14 -0800</bug_when>
    <thetext>(In reply to JF Bastien from comment #4)
&gt; (In reply to GSkachkov from comment #3)
&gt; &gt; Created attachment 329518 [details]
&gt; &gt; Patch
&gt; &gt; 
&gt; &gt; WiP. Caching memory size &amp; addess in  wasm::Instance
&gt; 
&gt; You&apos;ve marked as &quot;review?&quot;. Is it WIP or ready for review?

Sorry, it is WiP and I removed review flag, but I would like to have some feedback if my changes related to what is expected to do in this task.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1382529</commentid>
    <comment_count>6</comment_count>
      <attachid>329580</attachid>
    <who name="GSkachkov">gskachkov</who>
    <bug_when>2017-12-16 11:30:31 -0800</bug_when>
    <thetext>Created attachment 329580
Patch

Patch for review</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1382613</commentid>
    <comment_count>7</comment_count>
      <attachid>329610</attachid>
    <who name="GSkachkov">gskachkov</who>
    <bug_when>2017-12-17 10:59:47 -0800</bug_when>
    <thetext>Created attachment 329610
Patch

Patch for review + small clearence</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1382763</commentid>
    <comment_count>8</comment_count>
      <attachid>329610</attachid>
    <who name="JF Bastien">jfbastien</who>
    <bug_when>2017-12-18 09:12:52 -0800</bug_when>
    <thetext>Comment on attachment 329610
Patch

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

Very cool! That&apos;s the right direction, but I have a few comments.

Also for testing you might want to look at the memory fuzz test I wrote in JSTests/wasm/fuzz

&gt; Source/JavaScriptCore/wasm/WasmB3IRGenerator.cpp:-1284
&gt; -            ASSERT(sizeRegs[0].sizeRegister != baseMemory);

I think we should keep this assert.

&gt; Source/JavaScriptCore/wasm/WasmB3IRGenerator.cpp:1281
&gt;              ASSERT(!sizeRegs[0].sizeOffset);

Can you also assert that sizeRegs.size() == 1 ? The code below assumes it is, and would be wrong if that weren&apos;t the case. You can like to FIXME https://bugs.webkit.org/show_bug.cgi?id=162952

&gt; Source/JavaScriptCore/wasm/WasmBinding.cpp:-68
&gt; -    ASSERT(!sizeRegs[0].sizeOffset); // The following code assumes we start at 0, and calculates subsequent size registers relative to 0.

Same here on keeping the assert, and adding one for https://bugs.webkit.org/show_bug.cgi?id=162952

&gt; Source/JavaScriptCore/wasm/WasmInstance.h:77
&gt; +        updateChechedMemory();

Typo &quot;cached&quot;.

&gt; Source/JavaScriptCore/wasm/WasmInstance.h:79
&gt; +    void updateChechedMemory()

Typo.

&gt; Source/JavaScriptCore/wasm/WasmInstance.h:147
&gt; +    WeakPtrFactory&lt;Instance&gt; m_weakPtrFactory;

I would try to organize members so that the ones accessed by the JIT are together, at the start. That way we need only small immediates, and they&apos;ll be in the same cacheline when accessed.

So the cached values would go after m_context, and the weak ptr factory after the call frame callback.

&gt; Source/JavaScriptCore/wasm/js/JSToWasm.cpp:193
&gt; +            jit.loadWasmContextInstance(baseMemory);

This now happens twice if the memory wasn&apos;t signaling and we use fast TLS.

It might be easier to have 4 code paths without any sharing, for all combinations of signal/no + fast TLS/no.

&gt; JSTests/wasm/function-tests/memory-reuse.js:4
&gt; +{

This scope doesn&apos;t seem useful?

&gt; JSTests/wasm/function-tests/memory-reuse.js:8
&gt; +    function createWasmModule(memory) {

This returns instances, so I&apos;d call it &quot;createInstance&quot;.

&gt; JSTests/wasm/function-tests/memory-reuse.js:41
&gt; +        for (let i = 0; i &lt; buf.length/4; ++i) {

Spaces between divide. Same thing for other binary operators below.

&gt; JSTests/wasm/function-tests/memory-reuse.js:56
&gt; +        const pageSize = 64 * 1024;

Hoist this to the top of the file, and remove the other one above.

&gt; JSTests/wasm/function-tests/memory-reuse.js:58
&gt; +        const modules = [];

As above, I&apos;d rename to &quot;instances&quot;.

&gt; JSTests/wasm/function-tests/memory-reuse.js:68
&gt; +    }

I think the start of the test is good, but you then need to grow the memory. There are two ways to do so: as the grow_memory opcode directly in WebAssembly IR, or through the JS API on WebAssembly.Memory. You should then re-run doCheck().

The difficulty in doing this test is that you want them memory&apos;s base void* to have moved (hard!), and the size to change (easy!). You&apos;re not really testing size because signaling memory does that implicitly. I think you want a VM primitive for testing that allows you to allocate a WebAssembly.Memory that is never signaling. That way to can test size by going out-of-bounds, catching the trap, then growing, and same out-of-bounds should not trap anymore. Now with a non-signaling memory you know that enough growth will cause us to re-allocate and memmove then void* memory too!

After doing so, the tests should kill instances and force-invoke the GC to try to make sure they die, and then re-run the checks again.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1383783</commentid>
    <comment_count>9</comment_count>
      <attachid>329942</attachid>
    <who name="GSkachkov">gskachkov</who>
    <bug_when>2017-12-20 12:11:48 -0800</bug_when>
    <thetext>Created attachment 329942
Patch

Fix comments</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1383784</commentid>
    <comment_count>10</comment_count>
      <attachid>329610</attachid>
    <who name="GSkachkov">gskachkov</who>
    <bug_when>2017-12-20 12:15:03 -0800</bug_when>
    <thetext>Comment on attachment 329610
Patch

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

&gt;&gt; Source/JavaScriptCore/wasm/WasmB3IRGenerator.cpp:-1284
&gt;&gt; -            ASSERT(sizeRegs[0].sizeRegister != baseMemory);
&gt; 
&gt; I think we should keep this assert.

Done

&gt;&gt; Source/JavaScriptCore/wasm/WasmB3IRGenerator.cpp:1281
&gt;&gt;              ASSERT(!sizeRegs[0].sizeOffset);
&gt; 
&gt; Can you also assert that sizeRegs.size() == 1 ? The code below assumes it is, and would be wrong if that weren&apos;t the case. You can like to FIXME https://bugs.webkit.org/show_bug.cgi?id=162952

As I can see we have this assert, line 1283/1279

&gt;&gt; Source/JavaScriptCore/wasm/WasmBinding.cpp:-68
&gt;&gt; -    ASSERT(!sizeRegs[0].sizeOffset); // The following code assumes we start at 0, and calculates subsequent size registers relative to 0.
&gt; 
&gt; Same here on keeping the assert, and adding one for https://bugs.webkit.org/show_bug.cgi?id=162952

Done

&gt;&gt; Source/JavaScriptCore/wasm/WasmInstance.h:77
&gt;&gt; +        updateChechedMemory();
&gt; 
&gt; Typo &quot;cached&quot;.

Fixed

&gt;&gt; Source/JavaScriptCore/wasm/WasmInstance.h:79
&gt;&gt; +    void updateChechedMemory()
&gt; 
&gt; Typo.

Fixed

&gt;&gt; Source/JavaScriptCore/wasm/WasmInstance.h:147
&gt;&gt; +    WeakPtrFactory&lt;Instance&gt; m_weakPtrFactory;
&gt; 
&gt; I would try to organize members so that the ones accessed by the JIT are together, at the start. That way we need only small immediates, and they&apos;ll be in the same cacheline when accessed.
&gt; 
&gt; So the cached values would go after m_context, and the weak ptr factory after the call frame callback.

Done

&gt;&gt; Source/JavaScriptCore/wasm/js/JSToWasm.cpp:193
&gt;&gt; +            jit.loadWasmContextInstance(baseMemory);
&gt; 
&gt; This now happens twice if the memory wasn&apos;t signaling and we use fast TLS.
&gt; 
&gt; It might be easier to have 4 code paths without any sharing, for all combinations of signal/no + fast TLS/no.

I&apos;ve tried rewrite this, hope I did not lost something.

&gt;&gt; JSTests/wasm/function-tests/memory-reuse.js:4
&gt;&gt; +{
&gt; 
&gt; This scope doesn&apos;t seem useful?

Removed

&gt;&gt; JSTests/wasm/function-tests/memory-reuse.js:8
&gt;&gt; +    function createWasmModule(memory) {
&gt; 
&gt; This returns instances, so I&apos;d call it &quot;createInstance&quot;.

Fixed

&gt;&gt; JSTests/wasm/function-tests/memory-reuse.js:41
&gt;&gt; +        for (let i = 0; i &lt; buf.length/4; ++i) {
&gt; 
&gt; Spaces between divide. Same thing for other binary operators below.

Fixed

&gt;&gt; JSTests/wasm/function-tests/memory-reuse.js:56
&gt;&gt; +        const pageSize = 64 * 1024;
&gt; 
&gt; Hoist this to the top of the file, and remove the other one above.

Done

&gt;&gt; JSTests/wasm/function-tests/memory-reuse.js:58
&gt;&gt; +        const modules = [];
&gt; 
&gt; As above, I&apos;d rename to &quot;instances&quot;.

Done

&gt;&gt; JSTests/wasm/function-tests/memory-reuse.js:68
&gt;&gt; +    }
&gt; 
&gt; I think the start of the test is good, but you then need to grow the memory. There are two ways to do so: as the grow_memory opcode directly in WebAssembly IR, or through the JS API on WebAssembly.Memory. You should then re-run doCheck().
&gt; 
&gt; The difficulty in doing this test is that you want them memory&apos;s base void* to have moved (hard!), and the size to change (easy!). You&apos;re not really testing size because signaling memory does that implicitly. I think you want a VM primitive for testing that allows you to allocate a WebAssembly.Memory that is never signaling. That way to can test size by going out-of-bounds, catching the trap, then growing, and same out-of-bounds should not trap anymore. Now with a non-signaling memory you know that enough growth will cause us to re-allocate and memmove then void* memory too!
&gt; 
&gt; After doing so, the tests should kill instances and force-invoke the GC to try to make sure they die, and then re-run the checks again.

Rewritten, I hope it is close to what is expected</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1385827</commentid>
    <comment_count>11</comment_count>
    <who name="JF Bastien">jfbastien</who>
    <bug_when>2018-01-04 09:01:46 -0800</bug_when>
    <thetext>This patch will conflict with a not-yet-committed but important patch. I don&apos;t think the conflict will be very bad, but if you don&apos;t mind I&apos;d like to hold off committing this until the other patch can land.

Once it&apos;s in I&apos;ll do the other round of reviews, because this is a really neat improvement that we definitely want!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1385845</commentid>
    <comment_count>12</comment_count>
    <who name="GSkachkov">gskachkov</who>
    <bug_when>2018-01-04 10:02:30 -0800</bug_when>
    <thetext>(In reply to JF Bastien from comment #11)
&gt; This patch will conflict with a not-yet-committed but important patch. I
&gt; don&apos;t think the conflict will be very bad, but if you don&apos;t mind I&apos;d like to
&gt; hold off committing this until the other patch can land.
&gt; 
&gt; Once it&apos;s in I&apos;ll do the other round of reviews, because this is a really
&gt; neat improvement that we definitely want!

Yes sure, let me know when I need to rebase.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1386454</commentid>
    <comment_count>13</comment_count>
    <who name="JF Bastien">jfbastien</who>
    <bug_when>2018-01-05 20:30:11 -0800</bug_when>
    <thetext>(In reply to GSkachkov from comment #12)
&gt; (In reply to JF Bastien from comment #11)
&gt; &gt; This patch will conflict with a not-yet-committed but important patch. I
&gt; &gt; don&apos;t think the conflict will be very bad, but if you don&apos;t mind I&apos;d like to
&gt; &gt; hold off committing this until the other patch can land.
&gt; &gt; 
&gt; &gt; Once it&apos;s in I&apos;ll do the other round of reviews, because this is a really
&gt; &gt; neat improvement that we definitely want!
&gt; 
&gt; Yes sure, let me know when I need to rebase.

Here&apos;s the patch:
  https://bugs.webkit.org/show_bug.cgi?id=181313

There&apos;s now also an index mask that needs to be cached in the same way as memory and size.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1386546</commentid>
    <comment_count>14</comment_count>
      <attachid>330654</attachid>
    <who name="GSkachkov">gskachkov</who>
    <bug_when>2018-01-07 02:00:20 -0800</bug_when>
    <thetext>Created attachment 330654
Patch

Rebased patch &amp; using cachedIndexingMask property</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1386547</commentid>
    <comment_count>15</comment_count>
    <who name="GSkachkov">gskachkov</who>
    <bug_when>2018-01-07 03:03:45 -0800</bug_when>
    <thetext>(In reply to JF Bastien from comment #13)
&gt; (In reply to GSkachkov from comment #12)
&gt; &gt; (In reply to JF Bastien from comment #11)
&gt; &gt; &gt; This patch will conflict with a not-yet-committed but important patch. I
&gt; &gt; &gt; don&apos;t think the conflict will be very bad, but if you don&apos;t mind I&apos;d like to
&gt; &gt; &gt; hold off committing this until the other patch can land.
&gt; &gt; &gt; 
&gt; &gt; &gt; Once it&apos;s in I&apos;ll do the other round of reviews, because this is a really
&gt; &gt; &gt; neat improvement that we definitely want!
&gt; &gt; 
&gt; &gt; Yes sure, let me know when I need to rebase.
&gt; 
&gt; Here&apos;s the patch:
&gt;   https://bugs.webkit.org/show_bug.cgi?id=181313
&gt; 
&gt; There&apos;s now also an index mask that needs to be cached in the same way as
&gt; memory and size.

There is a new rebased patch and I added caching of the index mask in the same way as did for other properties.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1388459</commentid>
    <comment_count>16</comment_count>
      <attachid>331117</attachid>
    <who name="GSkachkov">gskachkov</who>
    <bug_when>2018-01-11 14:14:14 -0800</bug_when>
    <thetext>Created attachment 331117
Patch

Fix error in added tests</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1393259</commentid>
    <comment_count>17</comment_count>
    <who name="GSkachkov">gskachkov</who>
    <bug_when>2018-01-25 13:54:55 -0800</bug_when>
    <thetext>JF Bastien, Are there any performance tests that I can run for Wasm and check any difference with my patch and without?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1393261</commentid>
    <comment_count>18</comment_count>
    <who name="JF Bastien">jfbastien</who>
    <bug_when>2018-01-25 13:56:58 -0800</bug_when>
    <thetext>(In reply to GSkachkov from comment #17)
&gt; JF Bastien, Are there any performance tests that I can run for Wasm and
&gt; check any difference with my patch and without?

We don&apos;t have public ones because of licenses. The WebAssembly paper used:
 - PolyBenchC-3.2
 - SciMark2.1

It&apos;s also fairly easy to compile SPEC2k (non-Fortran parts) and run the training sets.

Otherwise Emscripten has benchmarks as well.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1393633</commentid>
    <comment_count>19</comment_count>
    <who name="GSkachkov">gskachkov</who>
    <bug_when>2018-01-26 12:56:58 -0800</bug_when>
    <thetext>(In reply to JF Bastien from comment #18)
&gt; (In reply to GSkachkov from comment #17)
&gt; &gt; JF Bastien, Are there any performance tests that I can run for Wasm and
&gt; &gt; check any difference with my patch and without?
&gt; 
&gt; We don&apos;t have public ones because of licenses. The WebAssembly paper used:
&gt;  - PolyBenchC-3.2
&gt;  - SciMark2.1
&gt; 
&gt; It&apos;s also fairly easy to compile SPEC2k (non-Fortran parts) and run the
&gt; training sets.
&gt; 
&gt; Otherwise Emscripten has benchmarks as well.

Thanks for pointing to tests, will prepare some figures during the week.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1400908</commentid>
    <comment_count>20</comment_count>
      <attachid>331117</attachid>
    <who name="JF Bastien">jfbastien</who>
    <bug_when>2018-02-20 14:31:44 -0800</bug_when>
    <thetext>Comment on attachment 331117
Patch

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

This looks pretty good, with a few comments I&apos;m ready to r=me. Also, did you run the benchmarks you said you would?

&gt; Source/JavaScriptCore/wasm/WasmMemory.cpp:403
&gt; +        }

We never remove weak pointers that are now nullptr, correct? That&apos;s a (very slow) leak because m_instances never shrinks. I don&apos;t think grow() is the right place to remove null entries, though. Maybe in registerInstance you could first traverse m_instances looking for a null entry, reuse the entry if there&apos;s one, and if you can&apos;t find one then append?

&gt; Source/JavaScriptCore/wasm/js/JSToWasm.cpp:181
&gt; +        GPRReg memoryGRP = Context::useFastTLS() ? baseMemory : wasmContextInstanceGPR;

I&apos;d rename memoryGPR to currentInstanceGPR, since we&apos;re using the basemMemory register to hold the instance.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1401225</commentid>
    <comment_count>21</comment_count>
    <who name="GSkachkov">gskachkov</who>
    <bug_when>2018-02-21 12:43:49 -0800</bug_when>
    <thetext>(In reply to JF Bastien from comment #20)
&gt; Comment on attachment 331117 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=331117&amp;action=review
&gt; 
&gt; This looks pretty good, with a few comments I&apos;m ready to r=me. Also, did you
&gt; run the benchmarks you said you would?
&gt; 
&gt; &gt; Source/JavaScriptCore/wasm/WasmMemory.cpp:403
&gt; &gt; +        }
&gt; 
&gt; We never remove weak pointers that are now nullptr, correct? That&apos;s a (very
&gt; slow) leak because m_instances never shrinks. I don&apos;t think grow() is the
&gt; right place to remove null entries, though. Maybe in registerInstance you
&gt; could first traverse m_instances looking for a null entry, reuse the entry
&gt; if there&apos;s one, and if you can&apos;t find one then append?
&gt; 
&gt; &gt; Source/JavaScriptCore/wasm/js/JSToWasm.cpp:181
&gt; &gt; +        GPRReg memoryGRP = Context::useFastTLS() ? baseMemory : wasmContextInstanceGPR;
&gt; 
&gt; I&apos;d rename memoryGPR to currentInstanceGPR, since we&apos;re using the
&gt; basemMemory register to hold the instance.
Thanks for the feedback, will try to fix comments soon. 
Ohh yes, I forget about perf tests. I downloaded tests, but had some troubles with running then switch to another task. I&apos;ll try provide figures with next patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1401749</commentid>
    <comment_count>22</comment_count>
    <who name="GSkachkov">gskachkov</who>
    <bug_when>2018-02-23 10:16:34 -0800</bug_when>
    <thetext>(In reply to JF Bastien from comment #20)
&gt; Comment on attachment 331117 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=331117&amp;action=review
&gt; 
&gt; This looks pretty good, with a few comments I&apos;m ready to r=me. Also, did you
&gt; run the benchmarks you said you would?
&gt; 

There is a result for scimark2_1c:

test was build with following parameters:
emcc   -O *.c -s WASM=1  -s ALLOW_MEMORY_GROWTH=1 -s ABORTING_MALLOC=0 -o scimark2_1c.html 

and checked by following url:
https://gskachkov.github.io/wasm-perf-tests/scimark2_1c/scimark2_1c.html

Result for Safari with Patch

**                                                              **
** SciMark2 Numeric Benchmark, see http://math.nist.gov/scimark **
** for details. (Results can be submitted to pozo@nist.gov)     **
**                                                              **
Using       2.00 seconds min time per kenel.
Composite Score:         1186.26
FFT             Mflops:  1281.59    (N=1024)
SOR             Mflops:  1269.40    (100 x 100)
MonteCarlo:     Mflops:   184.56
Sparse matmult  Mflops:  1254.28    (N=1000, nz=5000)
LU              Mflops:  1941.46    (M=100, N=100)

Result for Safari without Patch:

**                                                              **
** SciMark2 Numeric Benchmark, see http://math.nist.gov/scimark **
** for details. (Results can be submitted to pozo@nist.gov)     **
**                                                              **
Using       2.00 seconds min time per kenel.
Composite Score:         1182.51
FFT             Mflops:  1310.47    (N=1024)
SOR             Mflops:  1251.27    (100 x 100)
MonteCarlo:     Mflops:   184.94
Sparse matmult  Mflops:  1231.30    (N=1000, nz=5000)
LU              Mflops:  1934.58    (M=100, N=100)


Result from terminal:

**                                                              **
** SciMark2 Numeric Benchmark, see http://math.nist.gov/scimark **
** for details. (Results can be submitted to pozo@nist.gov)     **
**                                                              **
Using       2.00 seconds min time per kenel.
Composite Score:         1879.40
FFT             Mflops:  1681.28    (N=1024)
SOR             Mflops:  1253.96    (100 x 100)
MonteCarlo:     Mflops:   488.40
Sparse matmult  Mflops:  2064.39    (N=1000, nz=5000)
LU              Mflops:  3908.97    (M=100, N=100)

Looks like my changes do not affects this test</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1401791</commentid>
    <comment_count>23</comment_count>
      <attachid>334544</attachid>
    <who name="GSkachkov">gskachkov</who>
    <bug_when>2018-02-23 12:55:06 -0800</bug_when>
    <thetext>Created attachment 334544
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1401808</commentid>
    <comment_count>24</comment_count>
    <who name="JF Bastien">jfbastien</who>
    <bug_when>2018-02-23 14:44:02 -0800</bug_when>
    <thetext>Running the non-Fortran part of spec2k, I see roughly 5% throughput win on x86-64. Pretty nice!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1401809</commentid>
    <comment_count>25</comment_count>
      <attachid>334544</attachid>
    <who name="JF Bastien">jfbastien</who>
    <bug_when>2018-02-23 14:44:38 -0800</bug_when>
    <thetext>Comment on attachment 334544
Patch

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1401815</commentid>
    <comment_count>26</comment_count>
    <who name="GSkachkov">gskachkov</who>
    <bug_when>2018-02-23 15:07:08 -0800</bug_when>
    <thetext>(In reply to JF Bastien from comment #24)
&gt; Running the non-Fortran part of spec2k, I see roughly 5% throughput win on
&gt; x86-64. Pretty nice!

Cool! Thanks! 
Where I can download spec2k? I only found by line https://www.spec.org/order.html and I&apos;m not sure what exact version I should download to run tests? CPU2006 V1.2?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1401816</commentid>
    <comment_count>27</comment_count>
    <who name="JF Bastien">jfbastien</who>
    <bug_when>2018-02-23 15:09:53 -0800</bug_when>
    <thetext>(In reply to GSkachkov from comment #26)
&gt; (In reply to JF Bastien from comment #24)
&gt; &gt; Running the non-Fortran part of spec2k, I see roughly 5% throughput win on
&gt; &gt; x86-64. Pretty nice!
&gt; 
&gt; Cool! Thanks! 
&gt; Where I can download spec2k? I only found by line
&gt; https://www.spec.org/order.html and I&apos;m not sure what exact version I should
&gt; download to run tests? CPU2006 V1.2?

We have a access to it internally, but cannot make it public because of licensing. I&apos;m using CPU2000 because 2006 uses well over 1GiB of memory on many tests (unless you benchmark the training set).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1401818</commentid>
    <comment_count>28</comment_count>
      <attachid>334544</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2018-02-23 15:17:03 -0800</bug_when>
    <thetext>Comment on attachment 334544
Patch

Clearing flags on attachment: 334544

Committed r228966: &lt;https://trac.webkit.org/changeset/228966&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1401819</commentid>
    <comment_count>29</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2018-02-23 15:17:05 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1401820</commentid>
    <comment_count>30</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2018-02-23 15:18:25 -0800</bug_when>
    <thetext>&lt;rdar://problem/37841252&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>329518</attachid>
            <date>2017-12-15 14:10:15 -0800</date>
            <delta_ts>2017-12-16 11:30:25 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-177305-20171216001012.patch</filename>
            <type>text/plain</type>
            <size>16231</size>
            <attacher name="GSkachkov">gskachkov</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjI1OTg1CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCBh
ZmIzOTY1ODIzMmVhZjAxNjI5ZmYwOTY5M2UzODE2MjJkOTA0YjU5Li4wYzU5ZWNmMjFhYmFjMjNk
OTRmZTViYTU5Y2IyM2JjNDMxZDJlZTMwIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwzNiBAQAorMjAxNy0xMi0xNSAgT2xla3NhbmRyIFNrYWNoa292ICA8Z3NrYWNoa292QGdt
YWlsLmNvbT4KKworICAgICAgICBXZWJBc3NlbWJseTogY2FjaGUgbWVtb3J5IGFkZHJlc3MgLyBz
aXplIG9uIGluc3RhbmNlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0xNzczMDUKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKwor
ICAgICAgICBDYWNoZSBtZW1vcnkgYWRkcmVzcy8gc2l6ZSBpbiB3YXNtOkluc3RhbmNlIHRvIGF2
b2lkIGxvYWQgd2FzbTpJbnN0YW5jZQorICAgICAgICBkdXJpbmcgYWNjZXNzIHRvIG1lbW9yeSBh
bmQgbWVtb3J5IHNpemUgICAgICAgCisKKyAgICAgICAgKiB3YXNtL1dhc21CM0lSR2VuZXJhdG9y
LmNwcDoKKyAgICAgICAgKEpTQzo6V2FzbTo6QjNJUkdlbmVyYXRvcjo6cmVzdG9yZVdlYkFzc2Vt
Ymx5R2xvYmFsU3RhdGUpOgorICAgICAgICAoSlNDOjpXYXNtOjpCM0lSR2VuZXJhdG9yOjphZGRD
dXJyZW50TWVtb3J5KToKKyAgICAgICAgKEpTQzo6V2FzbTo6QjNJUkdlbmVyYXRvcjo6YWRkQ2Fs
bEluZGlyZWN0KToKKyAgICAgICAgKiB3YXNtL1dhc21CaW5kaW5nLmNwcDoKKyAgICAgICAgKEpT
Qzo6V2FzbTo6d2FzbVRvV2FzbSk6CisgICAgICAgICogd2FzbS9XYXNtSW5zdGFuY2UuaDoKKyAg
ICAgICAgKEpTQzo6V2FzbTo6SW5zdGFuY2U6OmNhY2hlZE1lbW9yeSBjb25zdCk6CisgICAgICAg
IChKU0M6Oldhc206Okluc3RhbmNlOjpjYWNoZWRNZW1vcnlTaXplIGNvbnN0KToKKyAgICAgICAg
KEpTQzo6V2FzbTo6SW5zdGFuY2U6OmNyZWF0ZVdlYWtQdHIpOgorICAgICAgICAoSlNDOjpXYXNt
OjpJbnN0YW5jZTo6c2V0TWVtb3J5KToKKyAgICAgICAgKEpTQzo6V2FzbTo6SW5zdGFuY2U6OnVw
ZGF0ZUNoZWNoZWRNZW1vcnkpOgorICAgICAgICAoSlNDOjpXYXNtOjpJbnN0YW5jZTo6b2Zmc2V0
T2ZDYWNoZWRNZW1vcnkpOgorICAgICAgICAoSlNDOjpXYXNtOjpJbnN0YW5jZTo6b2Zmc2V0T2ZD
YWNoZWRNZW1vcnlTaXplKToKKyAgICAgICAgKiB3YXNtL1dhc21NZW1vcnkuY3BwOgorICAgICAg
ICAoSlNDOjpXYXNtOjpNZW1vcnk6Omdyb3cpOgorICAgICAgICAoSlNDOjpXYXNtOjpNZW1vcnk6
OnJlZ2lzdGVySW5zdGFuY2UpOgorICAgICAgICAqIHdhc20vV2FzbU1lbW9yeS5oOgorICAgICAg
ICAqIHdhc20vanMvSlNUb1dhc20uY3BwOgorICAgICAgICAoSlNDOjpXYXNtOjpjcmVhdGVKU1Rv
V2FzbVdyYXBwZXIpOgorICAgICAgICAqIHdhc20vanMvV2ViQXNzZW1ibHlNb2R1bGVSZWNvcmQu
Y3BwOgorICAgICAgICAoSlNDOjpXZWJBc3NlbWJseU1vZHVsZVJlY29yZDo6ZXZhbHVhdGUpOgor
CiAyMDE3LTEyLTE1ICBZdXN1a2UgU3V6dWtpICA8dXRhdGFuZS50ZWFAZ21haWwuY29tPgogCiAg
ICAgICAgIFVucmV2aWV3ZWQsIDMyYml0IEpTRW1wdHkgaXMgbm90IG51bGxwdHIgKyBDZWxsVGFn
CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQjNJUkdlbmVyYXRv
ci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQjNJUkdlbmVyYXRvci5jcHAK
aW5kZXggYTJiODEzZjM0MzVkMWM1MWQ1ZTA3YmIwMGVmM2IwZWZjNmFjZDEzMC4uYjQ4NjgyNDFj
MTg1Nzk5YzU4MzdhZDIzOWQxODhhNjdkYzQ3OTVlYiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3dhc20vV2FzbUIzSVJHZW5lcmF0b3IuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS93YXNtL1dhc21CM0lSR2VuZXJhdG9yLmNwcApAQCAtNDgwLDEyICs0ODAsMTEgQEAg
dm9pZCBCM0lSR2VuZXJhdG9yOjpyZXN0b3JlV2ViQXNzZW1ibHlHbG9iYWxTdGF0ZShSZXN0b3Jl
Q2FjaGVkU3RhY2tMaW1pdCByZXN0b3IKIAogICAgICAgICBwYXRjaHBvaW50LT5zZXRHZW5lcmF0
b3IoW3Bpbm5lZFJlZ3NdIChDQ2FsbEhlbHBlcnMmIGppdCwgY29uc3QgQjM6OlN0YWNrbWFwR2Vu
ZXJhdGlvblBhcmFtcyYgcGFyYW1zKSB7CiAgICAgICAgICAgICBHUFJSZWcgYmFzZU1lbW9yeSA9
IHBpbm5lZFJlZ3MtPmJhc2VNZW1vcnlQb2ludGVyOwotICAgICAgICAgICAgaml0LmxvYWRQdHIo
Q0NhbGxIZWxwZXJzOjpBZGRyZXNzKHBhcmFtc1swXS5ncHIoKSwgSW5zdGFuY2U6Om9mZnNldE9m
TWVtb3J5KCkpLCBiYXNlTWVtb3J5KTsKICAgICAgICAgICAgIGNvbnN0IGF1dG8mIHNpemVSZWdz
ID0gcGlubmVkUmVncy0+c2l6ZVJlZ2lzdGVyczsKICAgICAgICAgICAgIEFTU0VSVChzaXplUmVn
cy5zaXplKCkgPj0gMSk7CiAgICAgICAgICAgICBBU1NFUlQoIXNpemVSZWdzWzBdLnNpemVPZmZz
ZXQpOyAvLyBUaGUgZm9sbG93aW5nIGNvZGUgYXNzdW1lcyB3ZSBzdGFydCBhdCAwLCBhbmQgY2Fs
Y3VsYXRlcyBzdWJzZXF1ZW50IHNpemUgcmVnaXN0ZXJzIHJlbGF0aXZlIHRvIDAuCi0gICAgICAg
ICAgICBqaXQubG9hZFB0cihDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoYmFzZU1lbW9yeSwgTWVtb3J5
OjpvZmZzZXRPZlNpemUoKSksIHNpemVSZWdzWzBdLnNpemVSZWdpc3Rlcik7Ci0gICAgICAgICAg
ICBqaXQubG9hZFB0cihDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoYmFzZU1lbW9yeSwgTWVtb3J5Ojpv
ZmZzZXRPZk1lbW9yeSgpKSwgYmFzZU1lbW9yeSk7CisgICAgICAgICAgICBqaXQubG9hZFB0cihD
Q2FsbEhlbHBlcnM6OkFkZHJlc3MocGFyYW1zWzBdLmdwcigpLCBJbnN0YW5jZTo6b2Zmc2V0T2ZD
YWNoZWRNZW1vcnlTaXplKCkpLCBzaXplUmVnc1swXS5zaXplUmVnaXN0ZXIpOworICAgICAgICAg
ICAgaml0LmxvYWRQdHIoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKHBhcmFtc1swXS5ncHIoKSwgSW5z
dGFuY2U6Om9mZnNldE9mQ2FjaGVkTWVtb3J5KCkpLCBiYXNlTWVtb3J5KTsKICAgICAgICAgICAg
IGZvciAodW5zaWduZWQgaSA9IDE7IGkgPCBzaXplUmVncy5zaXplKCk7ICsraSkKICAgICAgICAg
ICAgICAgICBqaXQuYWRkNjQoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoLXNpemVSZWdzW2ld
LnNpemVPZmZzZXQpLCBzaXplUmVnc1swXS5zaXplUmVnaXN0ZXIsIHNpemVSZWdzW2ldLnNpemVS
ZWdpc3Rlcik7CiAgICAgICAgIH0pOwpAQCAtNTk4LDExICs1OTcsOSBAQCBhdXRvIEIzSVJHZW5l
cmF0b3I6OmFkZEdyb3dNZW1vcnkoRXhwcmVzc2lvblR5cGUgZGVsdGEsIEV4cHJlc3Npb25UeXBl
JiByZXN1bHQpCiAKIGF1dG8gQjNJUkdlbmVyYXRvcjo6YWRkQ3VycmVudE1lbW9yeShFeHByZXNz
aW9uVHlwZSYgcmVzdWx0KSAtPiBQYXJ0aWFsUmVzdWx0CiB7Ci0gICAgVmFsdWUqIG1lbW9yeU9i
amVjdCA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8TWVtb3J5VmFsdWU+KG1fcHJvYywgTG9h
ZCwgcG9pbnRlclR5cGUoKSwgb3JpZ2luKCksIGluc3RhbmNlVmFsdWUoKSwgc2FmZUNhc3Q8aW50
MzJfdD4oSW5zdGFuY2U6Om9mZnNldE9mTWVtb3J5KCkpKTsKLQogICAgIHN0YXRpY19hc3NlcnQo
c2l6ZW9mKGRlY2x0eXBlKHN0YXRpY19jYXN0PE1lbW9yeSo+KG51bGxwdHIpLT5zaXplKCkpKSA9
PSBzaXplb2YodWludDY0X3QpLCAiY29kZWdlbiByZWxpZXMgb24gdGhpcyBzaXplIik7Ci0gICAg
VmFsdWUqIHNpemUgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PE1lbW9yeVZhbHVlPihtX3By
b2MsIExvYWQsIEludDY0LCBvcmlnaW4oKSwgbWVtb3J5T2JqZWN0LCBzYWZlQ2FzdDxpbnQzMl90
PihNZW1vcnk6Om9mZnNldE9mU2l6ZSgpKSk7Ci0gICAgCisgICAgVmFsdWUqIHNpemUgPSBtX2N1
cnJlbnRCbG9jay0+YXBwZW5kTmV3PE1lbW9yeVZhbHVlPihtX3Byb2MsIExvYWQsIEludDY0LCBv
cmlnaW4oKSwgaW5zdGFuY2VWYWx1ZSgpLCBzYWZlQ2FzdDxpbnQzMl90PihJbnN0YW5jZTo6b2Zm
c2V0T2ZDYWNoZWRNZW1vcnlTaXplKCkpKTsKKwogICAgIGNvbnN0ZXhwciB1aW50MzJfdCBzaGlm
dFZhbHVlID0gMTY7CiAgICAgc3RhdGljX2Fzc2VydChQYWdlQ291bnQ6OnBhZ2VTaXplID09IDF1
bGwgPDwgc2hpZnRWYWx1ZSwgIlRoaXMgbXVzdCBob2xkIGZvciB0aGUgY29kZSBiZWxvdyB0byBi
ZSBjb3JyZWN0LiIpOwogICAgIFZhbHVlKiBudW1QYWdlcyA9IG1fY3VycmVudEJsb2NrLT5hcHBl
bmROZXc8VmFsdWU+KG1fcHJvYywgWlNociwgb3JpZ2luKCksCkBAIC0xMjc5LDEzICsxMjc2LDEx
IEBAIGF1dG8gQjNJUkdlbmVyYXRvcjo6YWRkQ2FsbEluZGlyZWN0KGNvbnN0IFNpZ25hdHVyZSYg
c2lnbmF0dXJlLCBWZWN0b3I8RXhwcmVzc2lvCiAgICAgICAgICAgICBqaXQubG9hZFB0cihDQ2Fs
bEhlbHBlcnM6OkFkZHJlc3Mob2xkQ29udGV4dEluc3RhbmNlLCBJbnN0YW5jZTo6b2Zmc2V0T2ZD
YWNoZWRTdGFja0xpbWl0KCkpLCBiYXNlTWVtb3J5KTsKICAgICAgICAgICAgIGppdC5zdG9yZVB0
cihiYXNlTWVtb3J5LCBDQ2FsbEhlbHBlcnM6OkFkZHJlc3MobmV3Q29udGV4dEluc3RhbmNlLCBJ
bnN0YW5jZTo6b2Zmc2V0T2ZDYWNoZWRTdGFja0xpbWl0KCkpKTsKICAgICAgICAgICAgIGppdC5z
dG9yZVdhc21Db250ZXh0SW5zdGFuY2UobmV3Q29udGV4dEluc3RhbmNlKTsKLSAgICAgICAgICAg
IGppdC5sb2FkUHRyKENDYWxsSGVscGVyczo6QWRkcmVzcyhuZXdDb250ZXh0SW5zdGFuY2UsIElu
c3RhbmNlOjpvZmZzZXRPZk1lbW9yeSgpKSwgYmFzZU1lbW9yeSk7IC8vIE1lbW9yeSouCiAgICAg
ICAgICAgICBBU1NFUlQoc2l6ZVJlZ3Muc2l6ZSgpID09IDEpOwotICAgICAgICAgICAgQVNTRVJU
KHNpemVSZWdzWzBdLnNpemVSZWdpc3RlciAhPSBiYXNlTWVtb3J5KTsKICAgICAgICAgICAgIEFT
U0VSVChzaXplUmVnc1swXS5zaXplUmVnaXN0ZXIgIT0gbmV3Q29udGV4dEluc3RhbmNlKTsKICAg
ICAgICAgICAgIEFTU0VSVCghc2l6ZVJlZ3NbMF0uc2l6ZU9mZnNldCk7Ci0gICAgICAgICAgICBq
aXQubG9hZFB0cihDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoYmFzZU1lbW9yeSwgTWVtb3J5OjpvZmZz
ZXRPZlNpemUoKSksIHNpemVSZWdzWzBdLnNpemVSZWdpc3Rlcik7IC8vIE1lbW9yeSBzaXplLgot
ICAgICAgICAgICAgaml0LmxvYWRQdHIoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKGJhc2VNZW1vcnks
IE1lbW9yeTo6b2Zmc2V0T2ZNZW1vcnkoKSksIGJhc2VNZW1vcnkpOyAvLyBNZW1vcnk6OnZvaWQq
LgorICAgICAgICAgICAgaml0LmxvYWRQdHIoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKG5ld0NvbnRl
eHRJbnN0YW5jZSwgSW5zdGFuY2U6Om9mZnNldE9mQ2FjaGVkTWVtb3J5U2l6ZSgpKSwgc2l6ZVJl
Z3NbMF0uc2l6ZVJlZ2lzdGVyKTsgLy8gTWVtb3J5IHNpemUuCisgICAgICAgICAgICBqaXQubG9h
ZFB0cihDQ2FsbEhlbHBlcnM6OkFkZHJlc3MobmV3Q29udGV4dEluc3RhbmNlLCBJbnN0YW5jZTo6
b2Zmc2V0T2ZDYWNoZWRNZW1vcnkoKSksIGJhc2VNZW1vcnkpOyAvLyBNZW1vcnk6OnZvaWQqLgog
ICAgICAgICB9KTsKICAgICAgICAgZG9Db250ZXh0U3dpdGNoLT5hcHBlbmROZXdDb250cm9sVmFs
dWUobV9wcm9jLCBKdW1wLCBvcmlnaW4oKSwgY29udGludWF0aW9uKTsKIApkaWZmIC0tZ2l0IGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUJpbmRpbmcuY3BwIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3dhc20vV2FzbUJpbmRpbmcuY3BwCmluZGV4IDYyZWEzYWYwYzE3NmQxODRlM2Vm
NWNiNmRkZGQwYjU5NmZlMDdlYjYuLmQyMmFmNWM2YjkxZjBjMTJhMDg1YTRiMzFkYjViODg3MGVk
MjI0OWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21CaW5kaW5n
LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQmluZGluZy5jcHAKQEAg
LTY0LDEwICs2NCw4IEBAIEV4cGVjdGVkPE1hY3JvQXNzZW1ibGVyQ29kZVJlZiwgQmluZGluZ0Zh
aWx1cmU+IHdhc21Ub1dhc20odW5zaWduZWQgaW1wb3J0SW5kZXgpCiAKICAgICAvLyBGSVhNRSB0
aGUgZm9sbG93aW5nIGNvZGUgYXNzdW1lcyB0aGF0IGFsbCBXYXNtOjpJbnN0YW5jZSBoYXZlIHRo
ZSBzYW1lIHBpbm5lZCByZWdpc3RlcnMuIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0xNjI5NTIKICAgICAvLyBTZXQgdXAgdGhlIGNhbGxlZSdzIGJhc2VNZW1vcnkgcmVn
aXN0ZXIgYXMgd2VsbCBhcyB0aGUgbWVtb3J5IHNpemUgcmVnaXN0ZXJzLgotICAgIGppdC5sb2Fk
UHRyKEpJVDo6QWRkcmVzcyhiYXNlTWVtb3J5LCBJbnN0YW5jZTo6b2Zmc2V0T2ZNZW1vcnkoKSks
IGJhc2VNZW1vcnkpOyAvLyBXYXNtOjpNZW1vcnkqLgotICAgIEFTU0VSVCghc2l6ZVJlZ3NbMF0u
c2l6ZU9mZnNldCk7IC8vIFRoZSBmb2xsb3dpbmcgY29kZSBhc3N1bWVzIHdlIHN0YXJ0IGF0IDAs
IGFuZCBjYWxjdWxhdGVzIHN1YnNlcXVlbnQgc2l6ZSByZWdpc3RlcnMgcmVsYXRpdmUgdG8gMC4K
LSAgICBqaXQubG9hZFB0cihKSVQ6OkFkZHJlc3MoYmFzZU1lbW9yeSwgV2FzbTo6TWVtb3J5Ojpv
ZmZzZXRPZlNpemUoKSksIHNpemVSZWdzWzBdLnNpemVSZWdpc3Rlcik7IC8vIE1lbW9yeSBzaXpl
LgotICAgIGppdC5sb2FkUHRyKEpJVDo6QWRkcmVzcyhiYXNlTWVtb3J5LCBXYXNtOjpNZW1vcnk6
Om9mZnNldE9mTWVtb3J5KCkpLCBiYXNlTWVtb3J5KTsgLy8gV2FzbTo6TWVtb3J5Ojp2b2lkKi4K
KyAgICBqaXQubG9hZFB0cihKSVQ6OkFkZHJlc3MoYmFzZU1lbW9yeSwgV2FzbTo6SW5zdGFuY2U6
Om9mZnNldE9mQ2FjaGVkTWVtb3J5U2l6ZSgpKSwgc2l6ZVJlZ3NbMF0uc2l6ZVJlZ2lzdGVyKTsg
Ly8gTWVtb3J5IHNpemUuCisgICAgaml0LmxvYWRQdHIoSklUOjpBZGRyZXNzKGJhc2VNZW1vcnks
IFdhc206Okluc3RhbmNlOjpvZmZzZXRPZkNhY2hlZE1lbW9yeSgpKSwgYmFzZU1lbW9yeSk7IC8v
IFdhc206Ok1lbW9yeTo6dm9pZCouCiAgICAgZm9yICh1bnNpZ25lZCBpID0gMTsgaSA8IHNpemVS
ZWdzLnNpemUoKTsgKytpKSB7CiAgICAgICAgIEFTU0VSVChzaXplUmVnc1tpXS5zaXplUmVnaXN0
ZXIgIT0gYmFzZU1lbW9yeSk7CiAgICAgICAgIEFTU0VSVChzaXplUmVnc1tpXS5zaXplUmVnaXN0
ZXIgIT0gc2NyYXRjaCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9X
YXNtSW5zdGFuY2UuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21JbnN0YW5jZS5o
CmluZGV4IDJjMDgwMDAzZDUyY2E2OThkYTcyZmNmZjY3NDQ0MDQ2ZGI0NTM1NTYuLjEzY2ZlN2Nj
MmVlYzU4Y2YxNGViMDg4ZGFkMGY3OWZjNTQ0YjIyMjcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS93YXNtL1dhc21JbnN0YW5jZS5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS93YXNtL1dhc21JbnN0YW5jZS5oCkBAIC02NSw4ICs2NSwyNCBAQCBwdWJsaWM6CiAgICAgQ29k
ZUJsb2NrKiBjb2RlQmxvY2soKSB7IHJldHVybiBtX2NvZGVCbG9jay5nZXQoKTsgfQogICAgIE1l
bW9yeSogbWVtb3J5KCkgeyByZXR1cm4gbV9tZW1vcnkuZ2V0KCk7IH0KICAgICBUYWJsZSogdGFi
bGUoKSB7IHJldHVybiBtX3RhYmxlLmdldCgpOyB9Ci0gICAgCi0gICAgdm9pZCBzZXRNZW1vcnko
UmVmPE1lbW9yeT4mJiBtZW1vcnkpIHsgbV9tZW1vcnkgPSBXVEZNb3ZlKG1lbW9yeSk7IH0KKwor
ICAgIHZvaWQqIGNhY2hlZE1lbW9yeSgpIGNvbnN0IHsgcmV0dXJuIG1fY2FjaGVkTWVtb3J5OyB9
CisgICAgc2l6ZV90IGNhY2hlZE1lbW9yeVNpemUoKSBjb25zdCB7IHJldHVybiBtX2NhY2hlZE1l
bW9yeVNpemU7IH0KKworICAgIFdlYWtQdHI8SW5zdGFuY2U+IGNyZWF0ZVdlYWtQdHIoKSB7IHJl
dHVybiBtX3dlYWtQdHJGYWN0b3J5LmNyZWF0ZVdlYWtQdHIoKnRoaXMpOyB9CisgICAgdm9pZCBz
ZXRNZW1vcnkoUmVmPE1lbW9yeT4mJiBtZW1vcnkpCisgICAgeworICAgICAgICBtX21lbW9yeSA9
IFdURk1vdmUobWVtb3J5KTsKKyAgICAgICAgbV9tZW1vcnkuZ2V0KCktPnJlZ2lzdGVySW5zdGFu
Y2UodGhpcyk7CisgICAgICAgIHVwZGF0ZUNoZWNoZWRNZW1vcnkoKTsKKyAgICB9CisgICAgdm9p
ZCB1cGRhdGVDaGVjaGVkTWVtb3J5KCkKKyAgICB7CisgICAgICAgIGlmIChtX21lbW9yeSAhPSBu
dWxscHRyKSB7CisgICAgICAgICAgICBtX2NhY2hlZE1lbW9yeSA9IG1lbW9yeSgpLT5tZW1vcnko
KTsKKyAgICAgICAgICAgIG1fY2FjaGVkTWVtb3J5U2l6ZSA9IG1lbW9yeSgpLT5zaXplKCk7Cisg
ICAgICAgIH0KKyAgICB9CiAgICAgdm9pZCBzZXRUYWJsZShSZWY8VGFibGU+JiYgdGFibGUpIHsg
bV90YWJsZSA9IFdURk1vdmUodGFibGUpOyB9CiAKICAgICBpbnQzMl90IGxvYWRJMzJHbG9iYWwo
dW5zaWduZWQgaSkgY29uc3QgeyByZXR1cm4gbV9nbG9iYWxzLmdldCgpW2ldOyB9CkBAIC03OCw2
ICs5NCw4IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mTWVtb3J5KCkg
eyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKEluc3RhbmNlLCBtX21lbW9yeSk7IH0KICAgICBzdGF0
aWMgcHRyZGlmZl90IG9mZnNldE9mR2xvYmFscygpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihJ
bnN0YW5jZSwgbV9nbG9iYWxzKTsgfQogICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZUYWJs
ZSgpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihJbnN0YW5jZSwgbV90YWJsZSk7IH0KKyAgICBz
dGF0aWMgcHRyZGlmZl90IG9mZnNldE9mQ2FjaGVkTWVtb3J5KCkgeyByZXR1cm4gT0JKRUNUX09G
RlNFVE9GKEluc3RhbmNlLCBtX2NhY2hlZE1lbW9yeSk7IH0KKyAgICBzdGF0aWMgcHRyZGlmZl90
IG9mZnNldE9mQ2FjaGVkTWVtb3J5U2l6ZSgpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihJbnN0
YW5jZSwgbV9jYWNoZWRNZW1vcnlTaXplKTsgfQogICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0
T2ZQb2ludGVyVG9Ub3BFbnRyeUZyYW1lKCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKEluc3Rh
bmNlLCBtX3BvaW50ZXJUb1RvcEVudHJ5RnJhbWUpOyB9CiAKICAgICBzdGF0aWMgcHRyZGlmZl90
IG9mZnNldE9mUG9pbnRlclRvQWN0dWFsU3RhY2tMaW1pdCgpIHsgcmV0dXJuIE9CSkVDVF9PRkZT
RVRPRihJbnN0YW5jZSwgbV9wb2ludGVyVG9BY3R1YWxTdGFja0xpbWl0KTsgfQpAQCAtMTI2LDcg
KzE0NCw3IEBAIHByaXZhdGU6CiAgICAgewogICAgICAgICByZXR1cm4gKG9mZnNldE9mVGFpbCgp
ICsgc2l6ZW9mKEltcG9ydEZ1bmN0aW9uSW5mbykgKiBudW1JbXBvcnRGdW5jdGlvbnMpLnVuc2Fm
ZUdldCgpOwogICAgIH0KLQorICAgIFdlYWtQdHJGYWN0b3J5PEluc3RhbmNlPiBtX3dlYWtQdHJG
YWN0b3J5OwogICAgIHZvaWQqIG1fb3duZXIgeyBudWxscHRyIH07IC8vIEluIGEgSlMgZW1iZWRk
aW5nLCB0aGlzIGlzIGEgSlNXZWJBc3NlbWJseUluc3RhbmNlKi4KICAgICBDb250ZXh0KiBtX2Nv
bnRleHQgeyBudWxscHRyIH07CiAgICAgUmVmPE1vZHVsZT4gbV9tb2R1bGU7CkBAIC0xMzQsNiAr
MTUyLDggQEAgcHJpdmF0ZToKICAgICBSZWZQdHI8TWVtb3J5PiBtX21lbW9yeTsKICAgICBSZWZQ
dHI8VGFibGU+IG1fdGFibGU7CiAgICAgTWFsbG9jUHRyPHVpbnQ2NF90PiBtX2dsb2JhbHM7Cisg
ICAgdm9pZCogbV9jYWNoZWRNZW1vcnkgeyBudWxscHRyIH07CisgICAgc2l6ZV90IG1fY2FjaGVk
TWVtb3J5U2l6ZSB7IDAgfTsKICAgICBFbnRyeUZyYW1lKiogbV9wb2ludGVyVG9Ub3BFbnRyeUZy
YW1lIHsgbnVsbHB0ciB9OwogICAgIHZvaWQqKiBtX3BvaW50ZXJUb0FjdHVhbFN0YWNrTGltaXQg
eyBudWxscHRyIH07CiAgICAgdm9pZCogbV9jYWNoZWRTdGFja0xpbWl0IHsgYml0d2lzZV9jYXN0
PHZvaWQqPihzdGQ6Om51bWVyaWNfbGltaXRzPHVpbnRwdHJfdD46Om1heCgpKSB9OwpkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU1lbW9yeS5jcHAgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTWVtb3J5LmNwcAppbmRleCAxYzFjZjU5ZjJlOGViY2Vm
MDdhZjUyYWFiOTYyYTllY2FjMGQ4MzQ0Li4wMmE3ZWJkMGI3NzM5YjcxZjFjNjI4YzE4ZjE1NTJm
OWFmOGU3NDZjIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTWVt
b3J5LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTWVtb3J5LmNwcApA
QCAtMjUsNiArMjUsNyBAQAogCiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiV2FzbU1l
bW9yeS5oIgorI2luY2x1ZGUgIldhc21JbnN0YW5jZS5oIgogCiAjaWYgRU5BQkxFKFdFQkFTU0VN
QkxZKQogCkBAIC0zOTQsNiArMzk1LDExIEBAIEV4cGVjdGVkPFBhZ2VDb3VudCwgTWVtb3J5OjpH
cm93RmFpbFJlYXNvbj4gTWVtb3J5Ojpncm93KFBhZ2VDb3VudCBkZWx0YSkKIAogICAgIGF1dG8g
c3VjY2VzcyA9IFsmXSAoKSB7CiAgICAgICAgIG1fZ3Jvd1N1Y2Nlc3NDYWxsYmFjayhHcm93U3Vj
Y2Vzc1RhZywgb2xkUGFnZUNvdW50LCBuZXdQYWdlQ291bnQpOworICAgICAgICAvLyBVcGRhdGUg
Y2FjaGUgZm9yIGluc3RhbmNlCisgICAgICAgIGZvciAoYXV0byYgaW5zdGFuY2UgOiBtX2luc3Rh
bmNlcykgeworICAgICAgICAgICAgaWYgKGluc3RhbmNlLmdldCgpICE9IG51bGxwdHIpCisgICAg
ICAgICAgICAgICAgaW5zdGFuY2UuZ2V0KCktPnVwZGF0ZUNoZWNoZWRNZW1vcnkoKTsKKyAgICAg
ICAgfQogICAgICAgICByZXR1cm4gb2xkUGFnZUNvdW50OwogICAgIH07CiAKQEAgLTQ1NCw2ICs0
NjAsMTEgQEAgRXhwZWN0ZWQ8UGFnZUNvdW50LCBNZW1vcnk6Okdyb3dGYWlsUmVhc29uPiBNZW1v
cnk6Omdyb3coUGFnZUNvdW50IGRlbHRhKQogICAgIHJldHVybiBvbGRQYWdlQ291bnQ7CiB9CiAK
K3ZvaWQgTWVtb3J5OjpyZWdpc3Rlckluc3RhbmNlKEluc3RhbmNlKiBpbnN0YW5jZSkKK3sKKyAg
ICBtX2luc3RhbmNlcy5hcHBlbmQoaW5zdGFuY2UtPmNyZWF0ZVdlYWtQdHIoKSk7Cit9CisKIHZv
aWQgTWVtb3J5OjpkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0CiB7CiAgICAgb3V0LnByaW50
KCJNZW1vcnkgYXQgIiwgUmF3UG9pbnRlcihtX21lbW9yeSksICIsIHNpemUgIiwgbV9zaXplLCAi
QiBjYXBhY2l0eSAiLCBtX21hcHBlZENhcGFjaXR5LCAiQiwgaW5pdGlhbCAiLCBtX2luaXRpYWws
ICIgbWF4aW11bSAiLCBtX21heGltdW0sICIgbW9kZSAiLCBtYWtlU3RyaW5nKG1fbW9kZSkpOwpk
aWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU1lbW9yeS5oIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU1lbW9yeS5oCmluZGV4IGQ4NmRlMzI0NDM0M2Vl
Y2Q1OTU2NDljNzE1ODlmNWJhOTAzM2IyNWEuLjdmMjg0ODE1ODJhMTViNTkzYzFlM2NkNTY4Mjdl
MWM1NDdkZTFhYmUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21N
ZW1vcnkuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTWVtb3J5LmgKQEAg
LTM0LDYgKzM0LDggQEAKICNpbmNsdWRlIDx3dGYvRnVuY3Rpb24uaD4KICNpbmNsdWRlIDx3dGYv
UmVmQ291bnRlZC5oPgogI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KKyNpbmNsdWRlIDx3dGYvVmVj
dG9yLmg+CisjaW5jbHVkZSA8d3RmL1dlYWtQdHIuaD4KIAogbmFtZXNwYWNlIFdURiB7CiBjbGFz
cyBQcmludFN0cmVhbTsKQEAgLTQzLDYgKzQ1LDggQEAgbmFtZXNwYWNlIEpTQyB7CiAKIG5hbWVz
cGFjZSBXYXNtIHsKIAorY2xhc3MgSW5zdGFuY2U7CisKIGNsYXNzIE1lbW9yeSA6IHB1YmxpYyBS
ZWZDb3VudGVkPE1lbW9yeT4gewogICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKE1lbW9yeSk7CiAg
ICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CkBAIC04MCw2ICs4NCw3IEBAIHB1YmxpYzoKICAg
ICAgICAgT3V0T2ZNZW1vcnksCiAgICAgfTsKICAgICBFeHBlY3RlZDxQYWdlQ291bnQsIEdyb3dG
YWlsUmVhc29uPiBncm93KFBhZ2VDb3VudCk7CisgICAgdm9pZCByZWdpc3Rlckluc3RhbmNlKElu
c3RhbmNlKik7CiAKICAgICB2b2lkIGNoZWNrKCkgeyAgQVNTRVJUKCFkZWxldGlvbkhhc0JlZ3Vu
KCkpOyB9CiAKQEAgLTEwMSw2ICsxMDYsNyBAQCBwcml2YXRlOgogICAgIFdURjo6RnVuY3Rpb248
dm9pZChOb3RpZnlQcmVzc3VyZSk+IG1fbm90aWZ5TWVtb3J5UHJlc3N1cmU7CiAgICAgV1RGOjpG
dW5jdGlvbjx2b2lkKFN5bmNUcnlUb1JlY2xhaW0pPiBtX3N5bmNUcnlUb1JlY2xhaW1NZW1vcnk7
CiAgICAgV1RGOjpGdW5jdGlvbjx2b2lkKEdyb3dTdWNjZXNzLCBQYWdlQ291bnQsIFBhZ2VDb3Vu
dCk+IG1fZ3Jvd1N1Y2Nlc3NDYWxsYmFjazsKKyAgICBWZWN0b3I8V2Vha1B0cjxJbnN0YW5jZT4+
IG1faW5zdGFuY2VzOwogfTsKIAogfSB9IC8vIG5hbWVzcGFjZSBKU0M6Oldhc20KZGlmZiAtLWdp
dCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTVG9XYXNtLmNwcCBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTVG9XYXNtLmNwcAppbmRleCA1NmU3ODAxOTJkNTBiMjQz
NjlmMmM0YzcyODE4MTU5OTNkODBiY2MzLi5iOTE0MjliODNkNzA5MjBjMDY3YjE3ZGQxZGU1MWQz
YzVjM2Q2NGM2IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1Rv
V2FzbS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNUb1dhc20uY3Bw
CkBAIC0xNzMsMjMgKzE3MywyNiBAQCBzdGQ6OnVuaXF1ZV9wdHI8SW50ZXJuYWxGdW5jdGlvbj4g
Y3JlYXRlSlNUb1dhc21XcmFwcGVyKENvbXBpbGF0aW9uQ29udGV4dCYgY29tcAogICAgIGlmICgh
IWluZm8ubWVtb3J5KSB7CiAgICAgICAgIEdQUlJlZyBiYXNlTWVtb3J5ID0gcGlubmVkUmVncy5i
YXNlTWVtb3J5UG9pbnRlcjsKIAotICAgICAgICBpZiAoIUNvbnRleHQ6OnVzZUZhc3RUTFMoKSkK
LSAgICAgICAgICAgIGppdC5sb2FkUHRyKENDYWxsSGVscGVyczo6QWRkcmVzcyh3YXNtQ29udGV4
dEluc3RhbmNlR1BSLCBJbnN0YW5jZTo6b2Zmc2V0T2ZNZW1vcnkoKSksIGJhc2VNZW1vcnkpOwot
ICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgIGppdC5sb2FkV2FzbUNvbnRleHRJbnN0YW5jZShi
YXNlTWVtb3J5KTsKLSAgICAgICAgICAgIGppdC5sb2FkUHRyKENDYWxsSGVscGVyczo6QWRkcmVz
cyhiYXNlTWVtb3J5LCBJbnN0YW5jZTo6b2Zmc2V0T2ZNZW1vcnkoKSksIGJhc2VNZW1vcnkpOwot
ICAgICAgICB9Ci0KICAgICAgICAgaWYgKG1vZGUgIT0gTWVtb3J5TW9kZTo6U2lnbmFsaW5nKSB7
CiAgICAgICAgICAgICBjb25zdCBhdXRvJiBzaXplUmVncyA9IHBpbm5lZFJlZ3Muc2l6ZVJlZ2lz
dGVyczsKICAgICAgICAgICAgIEFTU0VSVChzaXplUmVncy5zaXplKCkgPj0gMSk7CiAgICAgICAg
ICAgICBBU1NFUlQoIXNpemVSZWdzWzBdLnNpemVPZmZzZXQpOyAvLyBUaGUgZm9sbG93aW5nIGNv
ZGUgYXNzdW1lcyB3ZSBzdGFydCBhdCAwLCBhbmQgY2FsY3VsYXRlcyBzdWJzZXF1ZW50IHNpemUg
cmVnaXN0ZXJzIHJlbGF0aXZlIHRvIDAuCi0gICAgICAgICAgICBqaXQubG9hZFB0cihDQ2FsbEhl
bHBlcnM6OkFkZHJlc3MoYmFzZU1lbW9yeSwgV2FzbTo6TWVtb3J5OjpvZmZzZXRPZlNpemUoKSks
IHNpemVSZWdzWzBdLnNpemVSZWdpc3Rlcik7CisgICAgICAgICAgICBpZiAoIUNvbnRleHQ6OnVz
ZUZhc3RUTFMoKSkKKyAgICAgICAgICAgICAgICBqaXQubG9hZFB0cihDQ2FsbEhlbHBlcnM6OkFk
ZHJlc3Mod2FzbUNvbnRleHRJbnN0YW5jZUdQUiwgSW5zdGFuY2U6Om9mZnNldE9mQ2FjaGVkTWVt
b3J5U2l6ZSgpKSwgc2l6ZVJlZ3NbMF0uc2l6ZVJlZ2lzdGVyKTsKKyAgICAgICAgICAgIGVsc2Ug
eworICAgICAgICAgICAgICAgIGppdC5sb2FkV2FzbUNvbnRleHRJbnN0YW5jZShiYXNlTWVtb3J5
KTsKKyAgICAgICAgICAgICAgICBqaXQubG9hZFB0cihDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoYmFz
ZU1lbW9yeSwgSW5zdGFuY2U6Om9mZnNldE9mQ2FjaGVkTWVtb3J5U2l6ZSgpKSwgc2l6ZVJlZ3Nb
MF0uc2l6ZVJlZ2lzdGVyKTsKKyAgICAgICAgICAgIH0KICAgICAgICAgICAgIGZvciAodW5zaWdu
ZWQgaSA9IDE7IGkgPCBzaXplUmVncy5zaXplKCk7ICsraSkKICAgICAgICAgICAgICAgICBqaXQu
YWRkNjQoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoLXNpemVSZWdzW2ldLnNpemVPZmZzZXQp
LCBzaXplUmVnc1swXS5zaXplUmVnaXN0ZXIsIHNpemVSZWdzW2ldLnNpemVSZWdpc3Rlcik7CiAg
ICAgICAgIH0KIAotICAgICAgICBqaXQubG9hZFB0cihDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoYmFz
ZU1lbW9yeSwgV2FzbTo6TWVtb3J5OjpvZmZzZXRPZk1lbW9yeSgpKSwgYmFzZU1lbW9yeSk7Cisg
ICAgICAgIGlmICghQ29udGV4dDo6dXNlRmFzdFRMUygpKQorICAgICAgICAgICAgaml0LmxvYWRQ
dHIoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKHdhc21Db250ZXh0SW5zdGFuY2VHUFIsIEluc3RhbmNl
OjpvZmZzZXRPZkNhY2hlZE1lbW9yeSgpKSwgYmFzZU1lbW9yeSk7CisgICAgICAgIGVsc2Ugewor
ICAgICAgICAgICAgaml0LmxvYWRXYXNtQ29udGV4dEluc3RhbmNlKGJhc2VNZW1vcnkpOworICAg
ICAgICAgICAgaml0LmxvYWRQdHIoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKGJhc2VNZW1vcnksIElu
c3RhbmNlOjpvZmZzZXRPZkNhY2hlZE1lbW9yeSgpKSwgYmFzZU1lbW9yeSk7CisgICAgICAgIH0K
ICAgICB9CiAKICAgICBDQ2FsbEhlbHBlcnM6OkNhbGwgY2FsbCA9IGppdC50aHJlYWRTYWZlUGF0
Y2hhYmxlTmVhckNhbGwoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNt
L2pzL1dlYkFzc2VtYmx5TW9kdWxlUmVjb3JkLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93
YXNtL2pzL1dlYkFzc2VtYmx5TW9kdWxlUmVjb3JkLmNwcAppbmRleCBlZjBjOGM1YTRiNjVkZDI1
MDJhYjgwNjI5YzRjNTRkNDBhZmE0ZDc2Li5kNGYwMTYyOWQ5Y2YyOWU0OTk5ODRkM2FkZWU3ZTNk
ZjVjYmJmZWM2IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJB
c3NlbWJseU1vZHVsZVJlY29yZC5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20v
anMvV2ViQXNzZW1ibHlNb2R1bGVSZWNvcmQuY3BwCkBAIC0yMjMsOCArMjIzLDcgQEAgSlNWYWx1
ZSBXZWJBc3NlbWJseU1vZHVsZVJlY29yZDo6ZXZhbHVhdGUoRXhlY1N0YXRlKiBleGVjKQogICAg
IEpTV2ViQXNzZW1ibHlUYWJsZSogdGFibGUgPSBtX2luc3RhbmNlLT50YWJsZSgpOwogCiAgICAg
Y29uc3QgVmVjdG9yPFdhc206OlNlZ21lbnQ6OlB0cj4mIGRhdGEgPSBtb2R1bGVJbmZvcm1hdGlv
bi5kYXRhOwotICAgIEpTV2ViQXNzZW1ibHlNZW1vcnkqIGpzTWVtb3J5ID0gbV9pbnN0YW5jZS0+
bWVtb3J5KCk7Ci0KKyAgICAKICAgICBzdGQ6Om9wdGlvbmFsPEpTVmFsdWU+IGV4Y2VwdGlvbjsK
IAogICAgIGF1dG8gZm9yRWFjaEVsZW1lbnQgPSBbJl0gKGF1dG8gZm4pIHsKQEAgLTI1MCw4ICsy
NDksOCBAQCBKU1ZhbHVlIFdlYkFzc2VtYmx5TW9kdWxlUmVjb3JkOjpldmFsdWF0ZShFeGVjU3Rh
dGUqIGV4ZWMpCiAgICAgfTsKIAogICAgIGF1dG8gZm9yRWFjaFNlZ21lbnQgPSBbJl0gKGF1dG8g
Zm4pIHsKLSAgICAgICAgdWludDhfdCogbWVtb3J5ID0gcmVpbnRlcnByZXRfY2FzdDx1aW50OF90
Kj4oanNNZW1vcnktPm1lbW9yeSgpLm1lbW9yeSgpKTsKLSAgICAgICAgdWludDY0X3Qgc2l6ZUlu
Qnl0ZXMgPSBqc01lbW9yeS0+bWVtb3J5KCkuc2l6ZSgpOworICAgICAgICB1aW50OF90KiBtZW1v
cnkgPSByZWludGVycHJldF9jYXN0PHVpbnQ4X3QqPihtX2luc3RhbmNlLT5pbnN0YW5jZSgpLmNh
Y2hlZE1lbW9yeSgpKTsKKyAgICAgICAgdWludDY0X3Qgc2l6ZUluQnl0ZXMgPSBtX2luc3RhbmNl
LT5pbnN0YW5jZSgpLmNhY2hlZE1lbW9yeVNpemUoKTsKIAogICAgICAgICBmb3IgKGNvbnN0IFdh
c206OlNlZ21lbnQ6OlB0ciYgc2VnbWVudCA6IGRhdGEpIHsKICAgICAgICAgICAgIHVpbnQzMl90
IG9mZnNldCA9IHNlZ21lbnQtPm9mZnNldC5pc0dsb2JhbEltcG9ydCgpCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>329580</attachid>
            <date>2017-12-16 11:30:31 -0800</date>
            <delta_ts>2017-12-17 10:59:42 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-177305-20171216213029.patch</filename>
            <type>text/plain</type>
            <size>19557</size>
            <attacher name="GSkachkov">gskachkov</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjI1OTg1CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCBh
ZmIzOTY1ODIzMmVhZjAxNjI5ZmYwOTY5M2UzODE2MjJkOTA0YjU5Li45MjViYzVjMjk5NzQxYzBj
ZmZiZDNmZWUzZWZjNmMxMmU3NWEzM2M0IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwzNiBAQAorMjAxNy0xMi0xNiAgT2xla3NhbmRyIFNrYWNoa292ICA8Z3NrYWNoa292QGdt
YWlsLmNvbT4KKworICAgICAgICBXZWJBc3NlbWJseTogY2FjaGUgbWVtb3J5IGFkZHJlc3MgLyBz
aXplIG9uIGluc3RhbmNlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0xNzczMDUKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKwor
ICAgICAgICBDYWNoZSBtZW1vcnkgYWRkcmVzcy9zaXplIGluIHdhc206SW5zdGFuY2UgdG8gYXZv
aWQgbG9hZCB3YXNtOk1lbW9yeSAKKyAgICAgICAgb2JqZWN0IGR1cmluZyBhY2Nlc3MgdG8gbWVt
b3J5IGFuZCBtZW1vcnkgc2l6ZSAgICAgICAKKworICAgICAgICAqIHdhc20vV2FzbUIzSVJHZW5l
cmF0b3IuY3BwOgorICAgICAgICAoSlNDOjpXYXNtOjpCM0lSR2VuZXJhdG9yOjpyZXN0b3JlV2Vi
QXNzZW1ibHlHbG9iYWxTdGF0ZSk6CisgICAgICAgIChKU0M6Oldhc206OkIzSVJHZW5lcmF0b3I6
OmFkZEN1cnJlbnRNZW1vcnkpOgorICAgICAgICAoSlNDOjpXYXNtOjpCM0lSR2VuZXJhdG9yOjph
ZGRDYWxsSW5kaXJlY3QpOgorICAgICAgICAqIHdhc20vV2FzbUJpbmRpbmcuY3BwOgorICAgICAg
ICAoSlNDOjpXYXNtOjp3YXNtVG9XYXNtKToKKyAgICAgICAgKiB3YXNtL1dhc21JbnN0YW5jZS5o
OgorICAgICAgICAoSlNDOjpXYXNtOjpJbnN0YW5jZTo6Y2FjaGVkTWVtb3J5IGNvbnN0KToKKyAg
ICAgICAgKEpTQzo6V2FzbTo6SW5zdGFuY2U6OmNhY2hlZE1lbW9yeVNpemUgY29uc3QpOgorICAg
ICAgICAoSlNDOjpXYXNtOjpJbnN0YW5jZTo6Y3JlYXRlV2Vha1B0cik6CisgICAgICAgIChKU0M6
Oldhc206Okluc3RhbmNlOjpzZXRNZW1vcnkpOgorICAgICAgICAoSlNDOjpXYXNtOjpJbnN0YW5j
ZTo6dXBkYXRlQ2hlY2hlZE1lbW9yeSk6CisgICAgICAgIChKU0M6Oldhc206Okluc3RhbmNlOjpv
ZmZzZXRPZkNhY2hlZE1lbW9yeSk6CisgICAgICAgIChKU0M6Oldhc206Okluc3RhbmNlOjpvZmZz
ZXRPZkNhY2hlZE1lbW9yeVNpemUpOgorICAgICAgICAqIHdhc20vV2FzbU1lbW9yeS5jcHA6Cisg
ICAgICAgIChKU0M6Oldhc206Ok1lbW9yeTo6Z3Jvdyk6CisgICAgICAgIChKU0M6Oldhc206Ok1l
bW9yeTo6cmVnaXN0ZXJJbnN0YW5jZSk6CisgICAgICAgICogd2FzbS9XYXNtTWVtb3J5Lmg6Cisg
ICAgICAgICogd2FzbS9qcy9KU1RvV2FzbS5jcHA6CisgICAgICAgIChKU0M6Oldhc206OmNyZWF0
ZUpTVG9XYXNtV3JhcHBlcik6CisgICAgICAgICogd2FzbS9qcy9XZWJBc3NlbWJseU1vZHVsZVJl
Y29yZC5jcHA6CisgICAgICAgIChKU0M6OldlYkFzc2VtYmx5TW9kdWxlUmVjb3JkOjpldmFsdWF0
ZSk6CisKIDIwMTctMTItMTUgIFl1c3VrZSBTdXp1a2kgIDx1dGF0YW5lLnRlYUBnbWFpbC5jb20+
CiAKICAgICAgICAgVW5yZXZpZXdlZCwgMzJiaXQgSlNFbXB0eSBpcyBub3QgbnVsbHB0ciArIENl
bGxUYWcKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21CM0lSR2Vu
ZXJhdG9yLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21CM0lSR2VuZXJhdG9y
LmNwcAppbmRleCBhMmI4MTNmMzQzNWQxYzUxZDVlMDdiYjAwZWYzYjBlZmM2YWNkMTMwLi5iNDg2
ODI0MWMxODU3OTljNTgzN2FkMjM5ZDE4OGE2N2RjNDc5NWViIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQjNJUkdlbmVyYXRvci5jcHAKKysrIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3dhc20vV2FzbUIzSVJHZW5lcmF0b3IuY3BwCkBAIC00ODAsMTIgKzQ4MCwx
MSBAQCB2b2lkIEIzSVJHZW5lcmF0b3I6OnJlc3RvcmVXZWJBc3NlbWJseUdsb2JhbFN0YXRlKFJl
c3RvcmVDYWNoZWRTdGFja0xpbWl0IHJlc3RvcgogCiAgICAgICAgIHBhdGNocG9pbnQtPnNldEdl
bmVyYXRvcihbcGlubmVkUmVnc10gKENDYWxsSGVscGVycyYgaml0LCBjb25zdCBCMzo6U3RhY2tt
YXBHZW5lcmF0aW9uUGFyYW1zJiBwYXJhbXMpIHsKICAgICAgICAgICAgIEdQUlJlZyBiYXNlTWVt
b3J5ID0gcGlubmVkUmVncy0+YmFzZU1lbW9yeVBvaW50ZXI7Ci0gICAgICAgICAgICBqaXQubG9h
ZFB0cihDQ2FsbEhlbHBlcnM6OkFkZHJlc3MocGFyYW1zWzBdLmdwcigpLCBJbnN0YW5jZTo6b2Zm
c2V0T2ZNZW1vcnkoKSksIGJhc2VNZW1vcnkpOwogICAgICAgICAgICAgY29uc3QgYXV0byYgc2l6
ZVJlZ3MgPSBwaW5uZWRSZWdzLT5zaXplUmVnaXN0ZXJzOwogICAgICAgICAgICAgQVNTRVJUKHNp
emVSZWdzLnNpemUoKSA+PSAxKTsKICAgICAgICAgICAgIEFTU0VSVCghc2l6ZVJlZ3NbMF0uc2l6
ZU9mZnNldCk7IC8vIFRoZSBmb2xsb3dpbmcgY29kZSBhc3N1bWVzIHdlIHN0YXJ0IGF0IDAsIGFu
ZCBjYWxjdWxhdGVzIHN1YnNlcXVlbnQgc2l6ZSByZWdpc3RlcnMgcmVsYXRpdmUgdG8gMC4KLSAg
ICAgICAgICAgIGppdC5sb2FkUHRyKENDYWxsSGVscGVyczo6QWRkcmVzcyhiYXNlTWVtb3J5LCBN
ZW1vcnk6Om9mZnNldE9mU2l6ZSgpKSwgc2l6ZVJlZ3NbMF0uc2l6ZVJlZ2lzdGVyKTsKLSAgICAg
ICAgICAgIGppdC5sb2FkUHRyKENDYWxsSGVscGVyczo6QWRkcmVzcyhiYXNlTWVtb3J5LCBNZW1v
cnk6Om9mZnNldE9mTWVtb3J5KCkpLCBiYXNlTWVtb3J5KTsKKyAgICAgICAgICAgIGppdC5sb2Fk
UHRyKENDYWxsSGVscGVyczo6QWRkcmVzcyhwYXJhbXNbMF0uZ3ByKCksIEluc3RhbmNlOjpvZmZz
ZXRPZkNhY2hlZE1lbW9yeVNpemUoKSksIHNpemVSZWdzWzBdLnNpemVSZWdpc3Rlcik7CisgICAg
ICAgICAgICBqaXQubG9hZFB0cihDQ2FsbEhlbHBlcnM6OkFkZHJlc3MocGFyYW1zWzBdLmdwcigp
LCBJbnN0YW5jZTo6b2Zmc2V0T2ZDYWNoZWRNZW1vcnkoKSksIGJhc2VNZW1vcnkpOwogICAgICAg
ICAgICAgZm9yICh1bnNpZ25lZCBpID0gMTsgaSA8IHNpemVSZWdzLnNpemUoKTsgKytpKQogICAg
ICAgICAgICAgICAgIGppdC5hZGQ2NChDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMigtc2l6ZVJl
Z3NbaV0uc2l6ZU9mZnNldCksIHNpemVSZWdzWzBdLnNpemVSZWdpc3Rlciwgc2l6ZVJlZ3NbaV0u
c2l6ZVJlZ2lzdGVyKTsKICAgICAgICAgfSk7CkBAIC01OTgsMTEgKzU5Nyw5IEBAIGF1dG8gQjNJ
UkdlbmVyYXRvcjo6YWRkR3Jvd01lbW9yeShFeHByZXNzaW9uVHlwZSBkZWx0YSwgRXhwcmVzc2lv
blR5cGUmIHJlc3VsdCkKIAogYXV0byBCM0lSR2VuZXJhdG9yOjphZGRDdXJyZW50TWVtb3J5KEV4
cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKIHsKLSAgICBWYWx1ZSogbWVt
b3J5T2JqZWN0ID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxNZW1vcnlWYWx1ZT4obV9wcm9j
LCBMb2FkLCBwb2ludGVyVHlwZSgpLCBvcmlnaW4oKSwgaW5zdGFuY2VWYWx1ZSgpLCBzYWZlQ2Fz
dDxpbnQzMl90PihJbnN0YW5jZTo6b2Zmc2V0T2ZNZW1vcnkoKSkpOwotCiAgICAgc3RhdGljX2Fz
c2VydChzaXplb2YoZGVjbHR5cGUoc3RhdGljX2Nhc3Q8TWVtb3J5Kj4obnVsbHB0ciktPnNpemUo
KSkpID09IHNpemVvZih1aW50NjRfdCksICJjb2RlZ2VuIHJlbGllcyBvbiB0aGlzIHNpemUiKTsK
LSAgICBWYWx1ZSogc2l6ZSA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8TWVtb3J5VmFsdWU+
KG1fcHJvYywgTG9hZCwgSW50NjQsIG9yaWdpbigpLCBtZW1vcnlPYmplY3QsIHNhZmVDYXN0PGlu
dDMyX3Q+KE1lbW9yeTo6b2Zmc2V0T2ZTaXplKCkpKTsKLSAgICAKKyAgICBWYWx1ZSogc2l6ZSA9
IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8TWVtb3J5VmFsdWU+KG1fcHJvYywgTG9hZCwgSW50
NjQsIG9yaWdpbigpLCBpbnN0YW5jZVZhbHVlKCksIHNhZmVDYXN0PGludDMyX3Q+KEluc3RhbmNl
OjpvZmZzZXRPZkNhY2hlZE1lbW9yeVNpemUoKSkpOworCiAgICAgY29uc3RleHByIHVpbnQzMl90
IHNoaWZ0VmFsdWUgPSAxNjsKICAgICBzdGF0aWNfYXNzZXJ0KFBhZ2VDb3VudDo6cGFnZVNpemUg
PT0gMXVsbCA8PCBzaGlmdFZhbHVlLCAiVGhpcyBtdXN0IGhvbGQgZm9yIHRoZSBjb2RlIGJlbG93
IHRvIGJlIGNvcnJlY3QuIik7CiAgICAgVmFsdWUqIG51bVBhZ2VzID0gbV9jdXJyZW50QmxvY2st
PmFwcGVuZE5ldzxWYWx1ZT4obV9wcm9jLCBaU2hyLCBvcmlnaW4oKSwKQEAgLTEyNzksMTMgKzEy
NzYsMTEgQEAgYXV0byBCM0lSR2VuZXJhdG9yOjphZGRDYWxsSW5kaXJlY3QoY29uc3QgU2lnbmF0
dXJlJiBzaWduYXR1cmUsIFZlY3RvcjxFeHByZXNzaW8KICAgICAgICAgICAgIGppdC5sb2FkUHRy
KENDYWxsSGVscGVyczo6QWRkcmVzcyhvbGRDb250ZXh0SW5zdGFuY2UsIEluc3RhbmNlOjpvZmZz
ZXRPZkNhY2hlZFN0YWNrTGltaXQoKSksIGJhc2VNZW1vcnkpOwogICAgICAgICAgICAgaml0LnN0
b3JlUHRyKGJhc2VNZW1vcnksIENDYWxsSGVscGVyczo6QWRkcmVzcyhuZXdDb250ZXh0SW5zdGFu
Y2UsIEluc3RhbmNlOjpvZmZzZXRPZkNhY2hlZFN0YWNrTGltaXQoKSkpOwogICAgICAgICAgICAg
aml0LnN0b3JlV2FzbUNvbnRleHRJbnN0YW5jZShuZXdDb250ZXh0SW5zdGFuY2UpOwotICAgICAg
ICAgICAgaml0LmxvYWRQdHIoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKG5ld0NvbnRleHRJbnN0YW5j
ZSwgSW5zdGFuY2U6Om9mZnNldE9mTWVtb3J5KCkpLCBiYXNlTWVtb3J5KTsgLy8gTWVtb3J5Ki4K
ICAgICAgICAgICAgIEFTU0VSVChzaXplUmVncy5zaXplKCkgPT0gMSk7Ci0gICAgICAgICAgICBB
U1NFUlQoc2l6ZVJlZ3NbMF0uc2l6ZVJlZ2lzdGVyICE9IGJhc2VNZW1vcnkpOwogICAgICAgICAg
ICAgQVNTRVJUKHNpemVSZWdzWzBdLnNpemVSZWdpc3RlciAhPSBuZXdDb250ZXh0SW5zdGFuY2Up
OwogICAgICAgICAgICAgQVNTRVJUKCFzaXplUmVnc1swXS5zaXplT2Zmc2V0KTsKLSAgICAgICAg
ICAgIGppdC5sb2FkUHRyKENDYWxsSGVscGVyczo6QWRkcmVzcyhiYXNlTWVtb3J5LCBNZW1vcnk6
Om9mZnNldE9mU2l6ZSgpKSwgc2l6ZVJlZ3NbMF0uc2l6ZVJlZ2lzdGVyKTsgLy8gTWVtb3J5IHNp
emUuCi0gICAgICAgICAgICBqaXQubG9hZFB0cihDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoYmFzZU1l
bW9yeSwgTWVtb3J5OjpvZmZzZXRPZk1lbW9yeSgpKSwgYmFzZU1lbW9yeSk7IC8vIE1lbW9yeTo6
dm9pZCouCisgICAgICAgICAgICBqaXQubG9hZFB0cihDQ2FsbEhlbHBlcnM6OkFkZHJlc3MobmV3
Q29udGV4dEluc3RhbmNlLCBJbnN0YW5jZTo6b2Zmc2V0T2ZDYWNoZWRNZW1vcnlTaXplKCkpLCBz
aXplUmVnc1swXS5zaXplUmVnaXN0ZXIpOyAvLyBNZW1vcnkgc2l6ZS4KKyAgICAgICAgICAgIGpp
dC5sb2FkUHRyKENDYWxsSGVscGVyczo6QWRkcmVzcyhuZXdDb250ZXh0SW5zdGFuY2UsIEluc3Rh
bmNlOjpvZmZzZXRPZkNhY2hlZE1lbW9yeSgpKSwgYmFzZU1lbW9yeSk7IC8vIE1lbW9yeTo6dm9p
ZCouCiAgICAgICAgIH0pOwogICAgICAgICBkb0NvbnRleHRTd2l0Y2gtPmFwcGVuZE5ld0NvbnRy
b2xWYWx1ZShtX3Byb2MsIEp1bXAsIG9yaWdpbigpLCBjb250aW51YXRpb24pOwogCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQmluZGluZy5jcHAgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQmluZGluZy5jcHAKaW5kZXggNjJlYTNhZjBjMTc2ZDE4
NGUzZWY1Y2I2ZGRkZDBiNTk2ZmUwN2ViNi4uZDIyYWY1YzZiOTFmMGMxMmEwODVhNGIzMWRiNWI4
ODcwZWQyMjQ5YiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUJp
bmRpbmcuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21CaW5kaW5nLmNw
cApAQCAtNjQsMTAgKzY0LDggQEAgRXhwZWN0ZWQ8TWFjcm9Bc3NlbWJsZXJDb2RlUmVmLCBCaW5k
aW5nRmFpbHVyZT4gd2FzbVRvV2FzbSh1bnNpZ25lZCBpbXBvcnRJbmRleCkKIAogICAgIC8vIEZJ
WE1FIHRoZSBmb2xsb3dpbmcgY29kZSBhc3N1bWVzIHRoYXQgYWxsIFdhc206Okluc3RhbmNlIGhh
dmUgdGhlIHNhbWUgcGlubmVkIHJlZ2lzdGVycy4gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTE2Mjk1MgogICAgIC8vIFNldCB1cCB0aGUgY2FsbGVlJ3MgYmFzZU1lbW9y
eSByZWdpc3RlciBhcyB3ZWxsIGFzIHRoZSBtZW1vcnkgc2l6ZSByZWdpc3RlcnMuCi0gICAgaml0
LmxvYWRQdHIoSklUOjpBZGRyZXNzKGJhc2VNZW1vcnksIEluc3RhbmNlOjpvZmZzZXRPZk1lbW9y
eSgpKSwgYmFzZU1lbW9yeSk7IC8vIFdhc206Ok1lbW9yeSouCi0gICAgQVNTRVJUKCFzaXplUmVn
c1swXS5zaXplT2Zmc2V0KTsgLy8gVGhlIGZvbGxvd2luZyBjb2RlIGFzc3VtZXMgd2Ugc3RhcnQg
YXQgMCwgYW5kIGNhbGN1bGF0ZXMgc3Vic2VxdWVudCBzaXplIHJlZ2lzdGVycyByZWxhdGl2ZSB0
byAwLgotICAgIGppdC5sb2FkUHRyKEpJVDo6QWRkcmVzcyhiYXNlTWVtb3J5LCBXYXNtOjpNZW1v
cnk6Om9mZnNldE9mU2l6ZSgpKSwgc2l6ZVJlZ3NbMF0uc2l6ZVJlZ2lzdGVyKTsgLy8gTWVtb3J5
IHNpemUuCi0gICAgaml0LmxvYWRQdHIoSklUOjpBZGRyZXNzKGJhc2VNZW1vcnksIFdhc206Ok1l
bW9yeTo6b2Zmc2V0T2ZNZW1vcnkoKSksIGJhc2VNZW1vcnkpOyAvLyBXYXNtOjpNZW1vcnk6OnZv
aWQqLgorICAgIGppdC5sb2FkUHRyKEpJVDo6QWRkcmVzcyhiYXNlTWVtb3J5LCBXYXNtOjpJbnN0
YW5jZTo6b2Zmc2V0T2ZDYWNoZWRNZW1vcnlTaXplKCkpLCBzaXplUmVnc1swXS5zaXplUmVnaXN0
ZXIpOyAvLyBNZW1vcnkgc2l6ZS4KKyAgICBqaXQubG9hZFB0cihKSVQ6OkFkZHJlc3MoYmFzZU1l
bW9yeSwgV2FzbTo6SW5zdGFuY2U6Om9mZnNldE9mQ2FjaGVkTWVtb3J5KCkpLCBiYXNlTWVtb3J5
KTsgLy8gV2FzbTo6TWVtb3J5Ojp2b2lkKi4KICAgICBmb3IgKHVuc2lnbmVkIGkgPSAxOyBpIDwg
c2l6ZVJlZ3Muc2l6ZSgpOyArK2kpIHsKICAgICAgICAgQVNTRVJUKHNpemVSZWdzW2ldLnNpemVS
ZWdpc3RlciAhPSBiYXNlTWVtb3J5KTsKICAgICAgICAgQVNTRVJUKHNpemVSZWdzW2ldLnNpemVS
ZWdpc3RlciAhPSBzY3JhdGNoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93
YXNtL1dhc21JbnN0YW5jZS5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUluc3Rh
bmNlLmgKaW5kZXggMmMwODAwMDNkNTJjYTY5OGRhNzJmY2ZmNjc0NDQwNDZkYjQ1MzU1Ni4uMTNj
ZmU3Y2MyZWVjNThjZjE0ZWIwODhkYWQwZjc5ZmM1NDRiMjIyNyAxMDA2NDQKLS0tIGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUluc3RhbmNlLmgKKysrIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3dhc20vV2FzbUluc3RhbmNlLmgKQEAgLTY1LDggKzY1LDI0IEBAIHB1YmxpYzoKICAg
ICBDb2RlQmxvY2sqIGNvZGVCbG9jaygpIHsgcmV0dXJuIG1fY29kZUJsb2NrLmdldCgpOyB9CiAg
ICAgTWVtb3J5KiBtZW1vcnkoKSB7IHJldHVybiBtX21lbW9yeS5nZXQoKTsgfQogICAgIFRhYmxl
KiB0YWJsZSgpIHsgcmV0dXJuIG1fdGFibGUuZ2V0KCk7IH0KLSAgICAKLSAgICB2b2lkIHNldE1l
bW9yeShSZWY8TWVtb3J5PiYmIG1lbW9yeSkgeyBtX21lbW9yeSA9IFdURk1vdmUobWVtb3J5KTsg
fQorCisgICAgdm9pZCogY2FjaGVkTWVtb3J5KCkgY29uc3QgeyByZXR1cm4gbV9jYWNoZWRNZW1v
cnk7IH0KKyAgICBzaXplX3QgY2FjaGVkTWVtb3J5U2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fY2Fj
aGVkTWVtb3J5U2l6ZTsgfQorCisgICAgV2Vha1B0cjxJbnN0YW5jZT4gY3JlYXRlV2Vha1B0cigp
IHsgcmV0dXJuIG1fd2Vha1B0ckZhY3RvcnkuY3JlYXRlV2Vha1B0cigqdGhpcyk7IH0KKyAgICB2
b2lkIHNldE1lbW9yeShSZWY8TWVtb3J5PiYmIG1lbW9yeSkKKyAgICB7CisgICAgICAgIG1fbWVt
b3J5ID0gV1RGTW92ZShtZW1vcnkpOworICAgICAgICBtX21lbW9yeS5nZXQoKS0+cmVnaXN0ZXJJ
bnN0YW5jZSh0aGlzKTsKKyAgICAgICAgdXBkYXRlQ2hlY2hlZE1lbW9yeSgpOworICAgIH0KKyAg
ICB2b2lkIHVwZGF0ZUNoZWNoZWRNZW1vcnkoKQorICAgIHsKKyAgICAgICAgaWYgKG1fbWVtb3J5
ICE9IG51bGxwdHIpIHsKKyAgICAgICAgICAgIG1fY2FjaGVkTWVtb3J5ID0gbWVtb3J5KCktPm1l
bW9yeSgpOworICAgICAgICAgICAgbV9jYWNoZWRNZW1vcnlTaXplID0gbWVtb3J5KCktPnNpemUo
KTsKKyAgICAgICAgfQorICAgIH0KICAgICB2b2lkIHNldFRhYmxlKFJlZjxUYWJsZT4mJiB0YWJs
ZSkgeyBtX3RhYmxlID0gV1RGTW92ZSh0YWJsZSk7IH0KIAogICAgIGludDMyX3QgbG9hZEkzMkds
b2JhbCh1bnNpZ25lZCBpKSBjb25zdCB7IHJldHVybiBtX2dsb2JhbHMuZ2V0KClbaV07IH0KQEAg
LTc4LDYgKzk0LDggQEAgcHVibGljOgogICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZNZW1v
cnkoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoSW5zdGFuY2UsIG1fbWVtb3J5KTsgfQogICAg
IHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZHbG9iYWxzKCkgeyByZXR1cm4gT0JKRUNUX09GRlNF
VE9GKEluc3RhbmNlLCBtX2dsb2JhbHMpOyB9CiAgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRP
ZlRhYmxlKCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKEluc3RhbmNlLCBtX3RhYmxlKTsgfQor
ICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZDYWNoZWRNZW1vcnkoKSB7IHJldHVybiBPQkpF
Q1RfT0ZGU0VUT0YoSW5zdGFuY2UsIG1fY2FjaGVkTWVtb3J5KTsgfQorICAgIHN0YXRpYyBwdHJk
aWZmX3Qgb2Zmc2V0T2ZDYWNoZWRNZW1vcnlTaXplKCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9G
KEluc3RhbmNlLCBtX2NhY2hlZE1lbW9yeVNpemUpOyB9CiAgICAgc3RhdGljIHB0cmRpZmZfdCBv
ZmZzZXRPZlBvaW50ZXJUb1RvcEVudHJ5RnJhbWUoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0Yo
SW5zdGFuY2UsIG1fcG9pbnRlclRvVG9wRW50cnlGcmFtZSk7IH0KIAogICAgIHN0YXRpYyBwdHJk
aWZmX3Qgb2Zmc2V0T2ZQb2ludGVyVG9BY3R1YWxTdGFja0xpbWl0KCkgeyByZXR1cm4gT0JKRUNU
X09GRlNFVE9GKEluc3RhbmNlLCBtX3BvaW50ZXJUb0FjdHVhbFN0YWNrTGltaXQpOyB9CkBAIC0x
MjYsNyArMTQ0LDcgQEAgcHJpdmF0ZToKICAgICB7CiAgICAgICAgIHJldHVybiAob2Zmc2V0T2ZU
YWlsKCkgKyBzaXplb2YoSW1wb3J0RnVuY3Rpb25JbmZvKSAqIG51bUltcG9ydEZ1bmN0aW9ucyku
dW5zYWZlR2V0KCk7CiAgICAgfQotCisgICAgV2Vha1B0ckZhY3Rvcnk8SW5zdGFuY2U+IG1fd2Vh
a1B0ckZhY3Rvcnk7CiAgICAgdm9pZCogbV9vd25lciB7IG51bGxwdHIgfTsgLy8gSW4gYSBKUyBl
bWJlZGRpbmcsIHRoaXMgaXMgYSBKU1dlYkFzc2VtYmx5SW5zdGFuY2UqLgogICAgIENvbnRleHQq
IG1fY29udGV4dCB7IG51bGxwdHIgfTsKICAgICBSZWY8TW9kdWxlPiBtX21vZHVsZTsKQEAgLTEz
NCw2ICsxNTIsOCBAQCBwcml2YXRlOgogICAgIFJlZlB0cjxNZW1vcnk+IG1fbWVtb3J5OwogICAg
IFJlZlB0cjxUYWJsZT4gbV90YWJsZTsKICAgICBNYWxsb2NQdHI8dWludDY0X3Q+IG1fZ2xvYmFs
czsKKyAgICB2b2lkKiBtX2NhY2hlZE1lbW9yeSB7IG51bGxwdHIgfTsKKyAgICBzaXplX3QgbV9j
YWNoZWRNZW1vcnlTaXplIHsgMCB9OwogICAgIEVudHJ5RnJhbWUqKiBtX3BvaW50ZXJUb1RvcEVu
dHJ5RnJhbWUgeyBudWxscHRyIH07CiAgICAgdm9pZCoqIG1fcG9pbnRlclRvQWN0dWFsU3RhY2tM
aW1pdCB7IG51bGxwdHIgfTsKICAgICB2b2lkKiBtX2NhY2hlZFN0YWNrTGltaXQgeyBiaXR3aXNl
X2Nhc3Q8dm9pZCo+KHN0ZDo6bnVtZXJpY19saW1pdHM8dWludHB0cl90Pjo6bWF4KCkpIH07CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTWVtb3J5LmNwcCBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21NZW1vcnkuY3BwCmluZGV4IDFjMWNmNTlmMmU4
ZWJjZWYwN2FmNTJhYWI5NjJhOWVjYWMwZDgzNDQuLjAyYTdlYmQwYjc3MzliNzFmMWM2MjhjMThm
MTU1MmY5YWY4ZTc0NmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dh
c21NZW1vcnkuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21NZW1vcnku
Y3BwCkBAIC0yNSw2ICsyNSw3IEBACiAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJX
YXNtTWVtb3J5LmgiCisjaW5jbHVkZSAiV2FzbUluc3RhbmNlLmgiCiAKICNpZiBFTkFCTEUoV0VC
QVNTRU1CTFkpCiAKQEAgLTM5NCw2ICszOTUsMTEgQEAgRXhwZWN0ZWQ8UGFnZUNvdW50LCBNZW1v
cnk6Okdyb3dGYWlsUmVhc29uPiBNZW1vcnk6Omdyb3coUGFnZUNvdW50IGRlbHRhKQogCiAgICAg
YXV0byBzdWNjZXNzID0gWyZdICgpIHsKICAgICAgICAgbV9ncm93U3VjY2Vzc0NhbGxiYWNrKEdy
b3dTdWNjZXNzVGFnLCBvbGRQYWdlQ291bnQsIG5ld1BhZ2VDb3VudCk7CisgICAgICAgIC8vIFVw
ZGF0ZSBjYWNoZSBmb3IgaW5zdGFuY2UKKyAgICAgICAgZm9yIChhdXRvJiBpbnN0YW5jZSA6IG1f
aW5zdGFuY2VzKSB7CisgICAgICAgICAgICBpZiAoaW5zdGFuY2UuZ2V0KCkgIT0gbnVsbHB0cikK
KyAgICAgICAgICAgICAgICBpbnN0YW5jZS5nZXQoKS0+dXBkYXRlQ2hlY2hlZE1lbW9yeSgpOwor
ICAgICAgICB9CiAgICAgICAgIHJldHVybiBvbGRQYWdlQ291bnQ7CiAgICAgfTsKIApAQCAtNDU0
LDYgKzQ2MCwxMSBAQCBFeHBlY3RlZDxQYWdlQ291bnQsIE1lbW9yeTo6R3Jvd0ZhaWxSZWFzb24+
IE1lbW9yeTo6Z3JvdyhQYWdlQ291bnQgZGVsdGEpCiAgICAgcmV0dXJuIG9sZFBhZ2VDb3VudDsK
IH0KIAordm9pZCBNZW1vcnk6OnJlZ2lzdGVySW5zdGFuY2UoSW5zdGFuY2UqIGluc3RhbmNlKQor
eworICAgIG1faW5zdGFuY2VzLmFwcGVuZChpbnN0YW5jZS0+Y3JlYXRlV2Vha1B0cigpKTsKK30K
Kwogdm9pZCBNZW1vcnk6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKIHsKICAgICBvdXQu
cHJpbnQoIk1lbW9yeSBhdCAiLCBSYXdQb2ludGVyKG1fbWVtb3J5KSwgIiwgc2l6ZSAiLCBtX3Np
emUsICJCIGNhcGFjaXR5ICIsIG1fbWFwcGVkQ2FwYWNpdHksICJCLCBpbml0aWFsICIsIG1faW5p
dGlhbCwgIiBtYXhpbXVtICIsIG1fbWF4aW11bSwgIiBtb2RlICIsIG1ha2VTdHJpbmcobV9tb2Rl
KSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTWVtb3J5Lmgg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTWVtb3J5LmgKaW5kZXggZDg2ZGUzMjQ0
MzQzZWVjZDU5NTY0OWM3MTU4OWY1YmE5MDMzYjI1YS4uN2YyODQ4MTU4MmExNWI1OTNjMWUzY2Q1
NjgyN2UxYzU0N2RlMWFiZSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20v
V2FzbU1lbW9yeS5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21NZW1vcnku
aApAQCAtMzQsNiArMzQsOCBAQAogI2luY2x1ZGUgPHd0Zi9GdW5jdGlvbi5oPgogI2luY2x1ZGUg
PHd0Zi9SZWZDb3VudGVkLmg+CiAjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgorI2luY2x1ZGUgPHd0
Zi9WZWN0b3IuaD4KKyNpbmNsdWRlIDx3dGYvV2Vha1B0ci5oPgogCiBuYW1lc3BhY2UgV1RGIHsK
IGNsYXNzIFByaW50U3RyZWFtOwpAQCAtNDMsNiArNDUsOCBAQCBuYW1lc3BhY2UgSlNDIHsKIAog
bmFtZXNwYWNlIFdhc20gewogCitjbGFzcyBJbnN0YW5jZTsKKwogY2xhc3MgTWVtb3J5IDogcHVi
bGljIFJlZkNvdW50ZWQ8TWVtb3J5PiB7CiAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoTWVtb3J5
KTsKICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKQEAgLTgwLDYgKzg0LDcgQEAgcHVibGlj
OgogICAgICAgICBPdXRPZk1lbW9yeSwKICAgICB9OwogICAgIEV4cGVjdGVkPFBhZ2VDb3VudCwg
R3Jvd0ZhaWxSZWFzb24+IGdyb3coUGFnZUNvdW50KTsKKyAgICB2b2lkIHJlZ2lzdGVySW5zdGFu
Y2UoSW5zdGFuY2UqKTsKIAogICAgIHZvaWQgY2hlY2soKSB7ICBBU1NFUlQoIWRlbGV0aW9uSGFz
QmVndW4oKSk7IH0KIApAQCAtMTAxLDYgKzEwNiw3IEBAIHByaXZhdGU6CiAgICAgV1RGOjpGdW5j
dGlvbjx2b2lkKE5vdGlmeVByZXNzdXJlKT4gbV9ub3RpZnlNZW1vcnlQcmVzc3VyZTsKICAgICBX
VEY6OkZ1bmN0aW9uPHZvaWQoU3luY1RyeVRvUmVjbGFpbSk+IG1fc3luY1RyeVRvUmVjbGFpbU1l
bW9yeTsKICAgICBXVEY6OkZ1bmN0aW9uPHZvaWQoR3Jvd1N1Y2Nlc3MsIFBhZ2VDb3VudCwgUGFn
ZUNvdW50KT4gbV9ncm93U3VjY2Vzc0NhbGxiYWNrOworICAgIFZlY3RvcjxXZWFrUHRyPEluc3Rh
bmNlPj4gbV9pbnN0YW5jZXM7CiB9OwogCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6V2FzbQpkaWZm
IC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNUb1dhc20uY3BwIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNUb1dhc20uY3BwCmluZGV4IDU2ZTc4MDE5MmQ1
MGIyNDM2OWYyYzRjNzI4MTgxNTk5M2Q4MGJjYzMuLmI5MTQyOWI4M2Q3MDkyMGMwNjdiMTdkZDFk
ZTUxZDNjNWMzZDY0YzYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pz
L0pTVG9XYXNtLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1RvV2Fz
bS5jcHAKQEAgLTE3MywyMyArMTczLDI2IEBAIHN0ZDo6dW5pcXVlX3B0cjxJbnRlcm5hbEZ1bmN0
aW9uPiBjcmVhdGVKU1RvV2FzbVdyYXBwZXIoQ29tcGlsYXRpb25Db250ZXh0JiBjb21wCiAgICAg
aWYgKCEhaW5mby5tZW1vcnkpIHsKICAgICAgICAgR1BSUmVnIGJhc2VNZW1vcnkgPSBwaW5uZWRS
ZWdzLmJhc2VNZW1vcnlQb2ludGVyOwogCi0gICAgICAgIGlmICghQ29udGV4dDo6dXNlRmFzdFRM
UygpKQotICAgICAgICAgICAgaml0LmxvYWRQdHIoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKHdhc21D
b250ZXh0SW5zdGFuY2VHUFIsIEluc3RhbmNlOjpvZmZzZXRPZk1lbW9yeSgpKSwgYmFzZU1lbW9y
eSk7Ci0gICAgICAgIGVsc2UgewotICAgICAgICAgICAgaml0LmxvYWRXYXNtQ29udGV4dEluc3Rh
bmNlKGJhc2VNZW1vcnkpOwotICAgICAgICAgICAgaml0LmxvYWRQdHIoQ0NhbGxIZWxwZXJzOjpB
ZGRyZXNzKGJhc2VNZW1vcnksIEluc3RhbmNlOjpvZmZzZXRPZk1lbW9yeSgpKSwgYmFzZU1lbW9y
eSk7Ci0gICAgICAgIH0KLQogICAgICAgICBpZiAobW9kZSAhPSBNZW1vcnlNb2RlOjpTaWduYWxp
bmcpIHsKICAgICAgICAgICAgIGNvbnN0IGF1dG8mIHNpemVSZWdzID0gcGlubmVkUmVncy5zaXpl
UmVnaXN0ZXJzOwogICAgICAgICAgICAgQVNTRVJUKHNpemVSZWdzLnNpemUoKSA+PSAxKTsKICAg
ICAgICAgICAgIEFTU0VSVCghc2l6ZVJlZ3NbMF0uc2l6ZU9mZnNldCk7IC8vIFRoZSBmb2xsb3dp
bmcgY29kZSBhc3N1bWVzIHdlIHN0YXJ0IGF0IDAsIGFuZCBjYWxjdWxhdGVzIHN1YnNlcXVlbnQg
c2l6ZSByZWdpc3RlcnMgcmVsYXRpdmUgdG8gMC4KLSAgICAgICAgICAgIGppdC5sb2FkUHRyKEND
YWxsSGVscGVyczo6QWRkcmVzcyhiYXNlTWVtb3J5LCBXYXNtOjpNZW1vcnk6Om9mZnNldE9mU2l6
ZSgpKSwgc2l6ZVJlZ3NbMF0uc2l6ZVJlZ2lzdGVyKTsKKyAgICAgICAgICAgIGlmICghQ29udGV4
dDo6dXNlRmFzdFRMUygpKQorICAgICAgICAgICAgICAgIGppdC5sb2FkUHRyKENDYWxsSGVscGVy
czo6QWRkcmVzcyh3YXNtQ29udGV4dEluc3RhbmNlR1BSLCBJbnN0YW5jZTo6b2Zmc2V0T2ZDYWNo
ZWRNZW1vcnlTaXplKCkpLCBzaXplUmVnc1swXS5zaXplUmVnaXN0ZXIpOworICAgICAgICAgICAg
ZWxzZSB7CisgICAgICAgICAgICAgICAgaml0LmxvYWRXYXNtQ29udGV4dEluc3RhbmNlKGJhc2VN
ZW1vcnkpOworICAgICAgICAgICAgICAgIGppdC5sb2FkUHRyKENDYWxsSGVscGVyczo6QWRkcmVz
cyhiYXNlTWVtb3J5LCBJbnN0YW5jZTo6b2Zmc2V0T2ZDYWNoZWRNZW1vcnlTaXplKCkpLCBzaXpl
UmVnc1swXS5zaXplUmVnaXN0ZXIpOworICAgICAgICAgICAgfQogICAgICAgICAgICAgZm9yICh1
bnNpZ25lZCBpID0gMTsgaSA8IHNpemVSZWdzLnNpemUoKTsgKytpKQogICAgICAgICAgICAgICAg
IGppdC5hZGQ2NChDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMigtc2l6ZVJlZ3NbaV0uc2l6ZU9m
ZnNldCksIHNpemVSZWdzWzBdLnNpemVSZWdpc3Rlciwgc2l6ZVJlZ3NbaV0uc2l6ZVJlZ2lzdGVy
KTsKICAgICAgICAgfQogCi0gICAgICAgIGppdC5sb2FkUHRyKENDYWxsSGVscGVyczo6QWRkcmVz
cyhiYXNlTWVtb3J5LCBXYXNtOjpNZW1vcnk6Om9mZnNldE9mTWVtb3J5KCkpLCBiYXNlTWVtb3J5
KTsKKyAgICAgICAgaWYgKCFDb250ZXh0Ojp1c2VGYXN0VExTKCkpCisgICAgICAgICAgICBqaXQu
bG9hZFB0cihDQ2FsbEhlbHBlcnM6OkFkZHJlc3Mod2FzbUNvbnRleHRJbnN0YW5jZUdQUiwgSW5z
dGFuY2U6Om9mZnNldE9mQ2FjaGVkTWVtb3J5KCkpLCBiYXNlTWVtb3J5KTsKKyAgICAgICAgZWxz
ZSB7CisgICAgICAgICAgICBqaXQubG9hZFdhc21Db250ZXh0SW5zdGFuY2UoYmFzZU1lbW9yeSk7
CisgICAgICAgICAgICBqaXQubG9hZFB0cihDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoYmFzZU1lbW9y
eSwgSW5zdGFuY2U6Om9mZnNldE9mQ2FjaGVkTWVtb3J5KCkpLCBiYXNlTWVtb3J5KTsKKyAgICAg
ICAgfQogICAgIH0KIAogICAgIENDYWxsSGVscGVyczo6Q2FsbCBjYWxsID0gaml0LnRocmVhZFNh
ZmVQYXRjaGFibGVOZWFyQ2FsbCgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3dhc20vanMvV2ViQXNzZW1ibHlNb2R1bGVSZWNvcmQuY3BwIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL3dhc20vanMvV2ViQXNzZW1ibHlNb2R1bGVSZWNvcmQuY3BwCmluZGV4IGVmMGM4YzVhNGI2
NWRkMjUwMmFiODA2MjljNGM1NGQ0MGFmYTRkNzYuLmQ0ZjAxNjI5ZDljZjI5ZTQ5OTk4NGQzYWRl
ZTdlM2RmNWNiYmZlYzYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pz
L1dlYkFzc2VtYmx5TW9kdWxlUmVjb3JkLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
d2FzbS9qcy9XZWJBc3NlbWJseU1vZHVsZVJlY29yZC5jcHAKQEAgLTIyMyw4ICsyMjMsNyBAQCBK
U1ZhbHVlIFdlYkFzc2VtYmx5TW9kdWxlUmVjb3JkOjpldmFsdWF0ZShFeGVjU3RhdGUqIGV4ZWMp
CiAgICAgSlNXZWJBc3NlbWJseVRhYmxlKiB0YWJsZSA9IG1faW5zdGFuY2UtPnRhYmxlKCk7CiAK
ICAgICBjb25zdCBWZWN0b3I8V2FzbTo6U2VnbWVudDo6UHRyPiYgZGF0YSA9IG1vZHVsZUluZm9y
bWF0aW9uLmRhdGE7Ci0gICAgSlNXZWJBc3NlbWJseU1lbW9yeSoganNNZW1vcnkgPSBtX2luc3Rh
bmNlLT5tZW1vcnkoKTsKLQorICAgIAogICAgIHN0ZDo6b3B0aW9uYWw8SlNWYWx1ZT4gZXhjZXB0
aW9uOwogCiAgICAgYXV0byBmb3JFYWNoRWxlbWVudCA9IFsmXSAoYXV0byBmbikgewpAQCAtMjUw
LDggKzI0OSw4IEBAIEpTVmFsdWUgV2ViQXNzZW1ibHlNb2R1bGVSZWNvcmQ6OmV2YWx1YXRlKEV4
ZWNTdGF0ZSogZXhlYykKICAgICB9OwogCiAgICAgYXV0byBmb3JFYWNoU2VnbWVudCA9IFsmXSAo
YXV0byBmbikgewotICAgICAgICB1aW50OF90KiBtZW1vcnkgPSByZWludGVycHJldF9jYXN0PHVp
bnQ4X3QqPihqc01lbW9yeS0+bWVtb3J5KCkubWVtb3J5KCkpOwotICAgICAgICB1aW50NjRfdCBz
aXplSW5CeXRlcyA9IGpzTWVtb3J5LT5tZW1vcnkoKS5zaXplKCk7CisgICAgICAgIHVpbnQ4X3Qq
IG1lbW9yeSA9IHJlaW50ZXJwcmV0X2Nhc3Q8dWludDhfdCo+KG1faW5zdGFuY2UtPmluc3RhbmNl
KCkuY2FjaGVkTWVtb3J5KCkpOworICAgICAgICB1aW50NjRfdCBzaXplSW5CeXRlcyA9IG1faW5z
dGFuY2UtPmluc3RhbmNlKCkuY2FjaGVkTWVtb3J5U2l6ZSgpOwogCiAgICAgICAgIGZvciAoY29u
c3QgV2FzbTo6U2VnbWVudDo6UHRyJiBzZWdtZW50IDogZGF0YSkgewogICAgICAgICAgICAgdWlu
dDMyX3Qgb2Zmc2V0ID0gc2VnbWVudC0+b2Zmc2V0LmlzR2xvYmFsSW1wb3J0KCkKZGlmZiAtLWdp
dCBhL0pTVGVzdHMvQ2hhbmdlTG9nIGIvSlNUZXN0cy9DaGFuZ2VMb2cKaW5kZXggMWIwMGE5OTA2
YmE3MTU2NWEzZDA5MTg5MTljYzI0ZjI1MmEyMTI2ZS4uYmRjYWFmYTZhMWYxOTNkYzE3MWFjNzE5
ZTdmNjMxZGExMGQwYWU3MiAxMDA2NDQKLS0tIGEvSlNUZXN0cy9DaGFuZ2VMb2cKKysrIGIvSlNU
ZXN0cy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNSBAQAorMjAxNy0xMi0xNiAgT2xla3NhbmRyIFNr
YWNoa292ICA8Z3NrYWNoa292QGdtYWlsLmNvbT4KKworICAgICAgICBXZWJBc3NlbWJseTogY2Fj
aGUgbWVtb3J5IGFkZHJlc3MgLyBzaXplIG9uIGluc3RhbmNlCisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzczMDUKKworICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIHdhc20vZnVuY3Rpb24tdGVzdHMvbWVtb3J5
LXJldXNlLmpzOiBBZGRlZC4KKyAgICAgICAgKGltcG9ydC5CdWlsZGVyLmZyb20uc3RyaW5nX2Fw
cGVhcmVkX2hlcmUuaW1wb3J0LmFzLmFzc2VydC5mcm9tLnN0cmluZ19hcHBlYXJlZF9oZXJlLmNy
ZWF0ZVdhc21Nb2R1bGUpOgorICAgICAgICAoaW1wb3J0LkJ1aWxkZXIuZnJvbS5zdHJpbmdfYXBw
ZWFyZWRfaGVyZS5pbXBvcnQuYXMuYXNzZXJ0LmZyb20uc3RyaW5nX2FwcGVhcmVkX2hlcmUpOgor
ICAgICAgICAoaW1wb3J0LkJ1aWxkZXIuZnJvbS5zdHJpbmdfYXBwZWFyZWRfaGVyZS5pbXBvcnQu
YXMuYXNzZXJ0LmZyb20uc3RyaW5nX2FwcGVhcmVkX2hlcmUubG9hZFdhc21Nb2R1bGVXaXRoU2hh
cmVkTWVtb3J5KToKKwogMjAxNy0xMi0xNCAgU2FhbSBCYXJhdGkgIDxzYmFyYXRpQGFwcGxlLmNv
bT4KIAogICAgICAgICBUaGUgQ2xlYW5VcCBhZnRlciBMSUNNIGlzIGVycm9uZW91c2x5IHJlbW92
aW5nIGEgQ2hlY2sKZGlmZiAtLWdpdCBhL0pTVGVzdHMvd2FzbS9mdW5jdGlvbi10ZXN0cy9tZW1v
cnktcmV1c2UuanMgYi9KU1Rlc3RzL3dhc20vZnVuY3Rpb24tdGVzdHMvbWVtb3J5LXJldXNlLmpz
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAuLmY1YzdkODhmNGFhZTFmNjczMTNlZGFiNmEyNmU5NGZjYTJlZTVhZTIKLS0t
IC9kZXYvbnVsbAorKysgYi9KU1Rlc3RzL3dhc20vZnVuY3Rpb24tdGVzdHMvbWVtb3J5LXJldXNl
LmpzCkBAIC0wLDAgKzEsNzEgQEAKK2ltcG9ydCBCdWlsZGVyIGZyb20gJy4uL0J1aWxkZXIuanMn
CitpbXBvcnQgKiBhcyBhc3NlcnQgZnJvbSAnLi4vYXNzZXJ0LmpzJworCit7CisgICAgY29uc3Qg
Y291bnQgPSAxMDsKKyAgICBjb25zdCBtZW1vcnlEZXNjcmlwdGlvbiA9IHtpbml0aWFsOjF9Owor
CisgICAgZnVuY3Rpb24gY3JlYXRlV2FzbU1vZHVsZShtZW1vcnkpIHsKKyAgICAgICAgY29uc3Qg
YnVpbGRlciA9IG5ldyBCdWlsZGVyKCkKKyAgICAgICAgICAgIC5UeXBlKCkuRW5kKCkKKyAgICAg
ICAgICAgIC5JbXBvcnQoKQorICAgICAgICAgICAgICAgIC5NZW1vcnkoImltcCIsICJtZW1vcnki
LCBtZW1vcnlEZXNjcmlwdGlvbikKKyAgICAgICAgICAgIC5FbmQoKQorICAgICAgICAgICAgLkZ1
bmN0aW9uKCkuRW5kKCkKKyAgICAgICAgICAgIC5FeHBvcnQoKQorICAgICAgICAgICAgICAgIC5G
dW5jdGlvbigiY3VycmVudCIpCisgICAgICAgICAgICAgICAgLkZ1bmN0aW9uKCJnZXQiKQorICAg
ICAgICAgICAgLkVuZCgpCisgICAgICAgICAgICAuQ29kZSgpCisgICAgICAgICAgICAgICAgLkZ1
bmN0aW9uKCJjdXJyZW50IiwgeyBwYXJhbXM6IFtdLCByZXQ6ICJpMzIiIH0pCisgICAgICAgICAg
ICAgICAgICAgIC5DdXJyZW50TWVtb3J5KDApCisgICAgICAgICAgICAgICAgICAgIC5SZXR1cm4o
KQorICAgICAgICAgICAgICAgIC5FbmQoKQorICAgICAgICAgICAgICAgIC5GdW5jdGlvbigiZ2V0
IiwgeyBwYXJhbXM6IFsiaTMyIl0sIHJldDogImkzMiIgfSkKKyAgICAgICAgICAgICAgICAgICAg
LkdldExvY2FsKDApCisgICAgICAgICAgICAgICAgICAgIC5JMzJMb2FkKDIsIDApCisgICAgICAg
ICAgICAgICAgICAgIC5SZXR1cm4oKQorICAgICAgICAgICAgICAgIC5FbmQoKQorICAgICAgICAg
ICAgLkVuZCgpOworCisKKyAgICAgICAgY29uc3QgYmluID0gYnVpbGRlci5XZWJBc3NlbWJseSgp
LmdldCgpOworICAgICAgICBjb25zdCBtb2R1bGUgPSBuZXcgV2ViQXNzZW1ibHkuTW9kdWxlKGJp
bik7CisgICAgICAgIHJldHVybiBuZXcgV2ViQXNzZW1ibHkuSW5zdGFuY2UobW9kdWxlLCB7aW1w
OiB7bWVtb3J5fX0pOworICAgIH0KKworICAgIGZ1bmN0aW9uIGRvQ2hlY2tNb2R1bGVzKG1vZHVs
ZXMsIG1lbSkgeworICAgICAgICBjb25zdCBwYWdlU2l6ZSA9IDY0ICogMTAyNDsKKyAgICAgICAg
bGV0IGJ1ZiA9IG5ldyBVaW50MzJBcnJheShtZW0uYnVmZmVyKTsKKworICAgICAgICBmb3IgKGxl
dCBpID0gMDsgaSA8IGJ1Zi5sZW5ndGgvNDsgKytpKSB7CisgICAgICAgICAgICBidWZbaV0gPSBp
KzE7CisgICAgICAgIH0KKworICAgICAgICBmb3IgKGxldCBjdXJyIG9mIG1vZHVsZXMpIHsKKyAg
ICAgICAgICAgIGFzc2VydC5lcShjdXJyLmV4cG9ydHMuY3VycmVudCgpLCBidWYubGVuZ3RoICog
NC9wYWdlU2l6ZSk7CisKKyAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYnVmLmxlbmd0
aC80OyArK2kpIHsKKyAgICAgICAgICAgICAgICBhc3NlcnQuZXEoY3Vyci5leHBvcnRzLmdldChp
KjQpLCBidWZbaV0pOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgZnVu
Y3Rpb24gbG9hZFdhc21Nb2R1bGVXaXRoU2hhcmVkTWVtb3J5KCkgeworICAgICAgICBjb25zdCBt
ZW0gPSBuZXcgV2ViQXNzZW1ibHkuTWVtb3J5KG1lbW9yeURlc2NyaXB0aW9uKTsKKyAgICAgICAg
Y29uc3QgcGFnZVNpemUgPSA2NCAqIDEwMjQ7CisKKyAgICAgICAgY29uc3QgbW9kdWxlcyA9IFtd
OworICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGNvdW50OyBpKyspIHsKKyAgICAgICAgICAg
IG1vZHVsZXMucHVzaChjcmVhdGVXYXNtTW9kdWxlKG1lbSkpOworICAgICAgICB9CisKKyAgICAg
ICAgZG9DaGVja01vZHVsZXMobW9kdWxlcywgbWVtKTsKKyAgICAgICAgbWVtLmdyb3coMSk7Cisg
ICAgICAgIGRvQ2hlY2tNb2R1bGVzKG1vZHVsZXMsIG1lbSk7CisgICAgICAgIG1lbS5ncm93KDIp
OworICAgICAgICBkb0NoZWNrTW9kdWxlcyhtb2R1bGVzLCBtZW0pOworICAgIH0KKworICAgIGxv
YWRXYXNtTW9kdWxlV2l0aFNoYXJlZE1lbW9yeSgpOworfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9m
IGZpbGUK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>329610</attachid>
            <date>2017-12-17 10:59:47 -0800</date>
            <delta_ts>2017-12-20 12:11:44 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-177305-20171217205950.patch</filename>
            <type>text/plain</type>
            <size>20427</size>
            <attacher name="GSkachkov">gskachkov</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjI1OTg1CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCBh
ZmIzOTY1ODIzMmVhZjAxNjI5ZmYwOTY5M2UzODE2MjJkOTA0YjU5Li44NGZhZDhlY2VjN2Y5MTk5
YTgzODliNGNiYTRiNmNiNTlkNzMwN2VkIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwzNiBAQAorMjAxNy0xMi0xNiAgT2xla3NhbmRyIFNrYWNoa292ICA8Z3NrYWNoa292QGdt
YWlsLmNvbT4KKworICAgICAgICBXZWJBc3NlbWJseTogY2FjaGUgbWVtb3J5IGFkZHJlc3MgLyBz
aXplIG9uIGluc3RhbmNlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0xNzczMDUKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKwor
ICAgICAgICBDYWNoZSBtZW1vcnkgYWRkcmVzcy9zaXplIGluIHdhc206SW5zdGFuY2UgdG8gYXZv
aWQgbG9hZCB3YXNtOk1lbW9yeSAKKyAgICAgICAgb2JqZWN0IGR1cmluZyBhY2Nlc3MgdG8gbWVt
b3J5IGFuZCBtZW1vcnkgc2l6ZSBpbiBKaVQKKworICAgICAgICAqIHdhc20vV2FzbUIzSVJHZW5l
cmF0b3IuY3BwOgorICAgICAgICAoSlNDOjpXYXNtOjpCM0lSR2VuZXJhdG9yOjpyZXN0b3JlV2Vi
QXNzZW1ibHlHbG9iYWxTdGF0ZSk6CisgICAgICAgIChKU0M6Oldhc206OkIzSVJHZW5lcmF0b3I6
OmFkZEN1cnJlbnRNZW1vcnkpOgorICAgICAgICAoSlNDOjpXYXNtOjpCM0lSR2VuZXJhdG9yOjph
ZGRDYWxsSW5kaXJlY3QpOgorICAgICAgICAqIHdhc20vV2FzbUJpbmRpbmcuY3BwOgorICAgICAg
ICAoSlNDOjpXYXNtOjp3YXNtVG9XYXNtKToKKyAgICAgICAgKiB3YXNtL1dhc21JbnN0YW5jZS5o
OgorICAgICAgICAoSlNDOjpXYXNtOjpJbnN0YW5jZTo6Y2FjaGVkTWVtb3J5IGNvbnN0KToKKyAg
ICAgICAgKEpTQzo6V2FzbTo6SW5zdGFuY2U6OmNhY2hlZE1lbW9yeVNpemUgY29uc3QpOgorICAg
ICAgICAoSlNDOjpXYXNtOjpJbnN0YW5jZTo6Y3JlYXRlV2Vha1B0cik6CisgICAgICAgIChKU0M6
Oldhc206Okluc3RhbmNlOjpzZXRNZW1vcnkpOgorICAgICAgICAoSlNDOjpXYXNtOjpJbnN0YW5j
ZTo6dXBkYXRlQ2hlY2hlZE1lbW9yeSk6CisgICAgICAgIChKU0M6Oldhc206Okluc3RhbmNlOjpv
ZmZzZXRPZkNhY2hlZE1lbW9yeSk6CisgICAgICAgIChKU0M6Oldhc206Okluc3RhbmNlOjpvZmZz
ZXRPZkNhY2hlZE1lbW9yeVNpemUpOgorICAgICAgICAqIHdhc20vV2FzbU1lbW9yeS5jcHA6Cisg
ICAgICAgIChKU0M6Oldhc206Ok1lbW9yeTo6Z3Jvdyk6CisgICAgICAgIChKU0M6Oldhc206Ok1l
bW9yeTo6cmVnaXN0ZXJJbnN0YW5jZSk6CisgICAgICAgICogd2FzbS9XYXNtTWVtb3J5Lmg6Cisg
ICAgICAgICogd2FzbS9qcy9KU1RvV2FzbS5jcHA6CisgICAgICAgIChKU0M6Oldhc206OmNyZWF0
ZUpTVG9XYXNtV3JhcHBlcik6CisgICAgICAgICogd2FzbS9qcy9XZWJBc3NlbWJseU1vZHVsZVJl
Y29yZC5jcHA6CisgICAgICAgIChKU0M6OldlYkFzc2VtYmx5TW9kdWxlUmVjb3JkOjpldmFsdWF0
ZSk6CisKIDIwMTctMTItMTUgIFl1c3VrZSBTdXp1a2kgIDx1dGF0YW5lLnRlYUBnbWFpbC5jb20+
CiAKICAgICAgICAgVW5yZXZpZXdlZCwgMzJiaXQgSlNFbXB0eSBpcyBub3QgbnVsbHB0ciArIENl
bGxUYWcKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21CM0lSR2Vu
ZXJhdG9yLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21CM0lSR2VuZXJhdG9y
LmNwcAppbmRleCBhMmI4MTNmMzQzNWQxYzUxZDVlMDdiYjAwZWYzYjBlZmM2YWNkMTMwLi5iNDg2
ODI0MWMxODU3OTljNTgzN2FkMjM5ZDE4OGE2N2RjNDc5NWViIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQjNJUkdlbmVyYXRvci5jcHAKKysrIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3dhc20vV2FzbUIzSVJHZW5lcmF0b3IuY3BwCkBAIC00ODAsMTIgKzQ4MCwx
MSBAQCB2b2lkIEIzSVJHZW5lcmF0b3I6OnJlc3RvcmVXZWJBc3NlbWJseUdsb2JhbFN0YXRlKFJl
c3RvcmVDYWNoZWRTdGFja0xpbWl0IHJlc3RvcgogCiAgICAgICAgIHBhdGNocG9pbnQtPnNldEdl
bmVyYXRvcihbcGlubmVkUmVnc10gKENDYWxsSGVscGVycyYgaml0LCBjb25zdCBCMzo6U3RhY2tt
YXBHZW5lcmF0aW9uUGFyYW1zJiBwYXJhbXMpIHsKICAgICAgICAgICAgIEdQUlJlZyBiYXNlTWVt
b3J5ID0gcGlubmVkUmVncy0+YmFzZU1lbW9yeVBvaW50ZXI7Ci0gICAgICAgICAgICBqaXQubG9h
ZFB0cihDQ2FsbEhlbHBlcnM6OkFkZHJlc3MocGFyYW1zWzBdLmdwcigpLCBJbnN0YW5jZTo6b2Zm
c2V0T2ZNZW1vcnkoKSksIGJhc2VNZW1vcnkpOwogICAgICAgICAgICAgY29uc3QgYXV0byYgc2l6
ZVJlZ3MgPSBwaW5uZWRSZWdzLT5zaXplUmVnaXN0ZXJzOwogICAgICAgICAgICAgQVNTRVJUKHNp
emVSZWdzLnNpemUoKSA+PSAxKTsKICAgICAgICAgICAgIEFTU0VSVCghc2l6ZVJlZ3NbMF0uc2l6
ZU9mZnNldCk7IC8vIFRoZSBmb2xsb3dpbmcgY29kZSBhc3N1bWVzIHdlIHN0YXJ0IGF0IDAsIGFu
ZCBjYWxjdWxhdGVzIHN1YnNlcXVlbnQgc2l6ZSByZWdpc3RlcnMgcmVsYXRpdmUgdG8gMC4KLSAg
ICAgICAgICAgIGppdC5sb2FkUHRyKENDYWxsSGVscGVyczo6QWRkcmVzcyhiYXNlTWVtb3J5LCBN
ZW1vcnk6Om9mZnNldE9mU2l6ZSgpKSwgc2l6ZVJlZ3NbMF0uc2l6ZVJlZ2lzdGVyKTsKLSAgICAg
ICAgICAgIGppdC5sb2FkUHRyKENDYWxsSGVscGVyczo6QWRkcmVzcyhiYXNlTWVtb3J5LCBNZW1v
cnk6Om9mZnNldE9mTWVtb3J5KCkpLCBiYXNlTWVtb3J5KTsKKyAgICAgICAgICAgIGppdC5sb2Fk
UHRyKENDYWxsSGVscGVyczo6QWRkcmVzcyhwYXJhbXNbMF0uZ3ByKCksIEluc3RhbmNlOjpvZmZz
ZXRPZkNhY2hlZE1lbW9yeVNpemUoKSksIHNpemVSZWdzWzBdLnNpemVSZWdpc3Rlcik7CisgICAg
ICAgICAgICBqaXQubG9hZFB0cihDQ2FsbEhlbHBlcnM6OkFkZHJlc3MocGFyYW1zWzBdLmdwcigp
LCBJbnN0YW5jZTo6b2Zmc2V0T2ZDYWNoZWRNZW1vcnkoKSksIGJhc2VNZW1vcnkpOwogICAgICAg
ICAgICAgZm9yICh1bnNpZ25lZCBpID0gMTsgaSA8IHNpemVSZWdzLnNpemUoKTsgKytpKQogICAg
ICAgICAgICAgICAgIGppdC5hZGQ2NChDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMigtc2l6ZVJl
Z3NbaV0uc2l6ZU9mZnNldCksIHNpemVSZWdzWzBdLnNpemVSZWdpc3Rlciwgc2l6ZVJlZ3NbaV0u
c2l6ZVJlZ2lzdGVyKTsKICAgICAgICAgfSk7CkBAIC01OTgsMTEgKzU5Nyw5IEBAIGF1dG8gQjNJ
UkdlbmVyYXRvcjo6YWRkR3Jvd01lbW9yeShFeHByZXNzaW9uVHlwZSBkZWx0YSwgRXhwcmVzc2lv
blR5cGUmIHJlc3VsdCkKIAogYXV0byBCM0lSR2VuZXJhdG9yOjphZGRDdXJyZW50TWVtb3J5KEV4
cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxSZXN1bHQKIHsKLSAgICBWYWx1ZSogbWVt
b3J5T2JqZWN0ID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxNZW1vcnlWYWx1ZT4obV9wcm9j
LCBMb2FkLCBwb2ludGVyVHlwZSgpLCBvcmlnaW4oKSwgaW5zdGFuY2VWYWx1ZSgpLCBzYWZlQ2Fz
dDxpbnQzMl90PihJbnN0YW5jZTo6b2Zmc2V0T2ZNZW1vcnkoKSkpOwotCiAgICAgc3RhdGljX2Fz
c2VydChzaXplb2YoZGVjbHR5cGUoc3RhdGljX2Nhc3Q8TWVtb3J5Kj4obnVsbHB0ciktPnNpemUo
KSkpID09IHNpemVvZih1aW50NjRfdCksICJjb2RlZ2VuIHJlbGllcyBvbiB0aGlzIHNpemUiKTsK
LSAgICBWYWx1ZSogc2l6ZSA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8TWVtb3J5VmFsdWU+
KG1fcHJvYywgTG9hZCwgSW50NjQsIG9yaWdpbigpLCBtZW1vcnlPYmplY3QsIHNhZmVDYXN0PGlu
dDMyX3Q+KE1lbW9yeTo6b2Zmc2V0T2ZTaXplKCkpKTsKLSAgICAKKyAgICBWYWx1ZSogc2l6ZSA9
IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8TWVtb3J5VmFsdWU+KG1fcHJvYywgTG9hZCwgSW50
NjQsIG9yaWdpbigpLCBpbnN0YW5jZVZhbHVlKCksIHNhZmVDYXN0PGludDMyX3Q+KEluc3RhbmNl
OjpvZmZzZXRPZkNhY2hlZE1lbW9yeVNpemUoKSkpOworCiAgICAgY29uc3RleHByIHVpbnQzMl90
IHNoaWZ0VmFsdWUgPSAxNjsKICAgICBzdGF0aWNfYXNzZXJ0KFBhZ2VDb3VudDo6cGFnZVNpemUg
PT0gMXVsbCA8PCBzaGlmdFZhbHVlLCAiVGhpcyBtdXN0IGhvbGQgZm9yIHRoZSBjb2RlIGJlbG93
IHRvIGJlIGNvcnJlY3QuIik7CiAgICAgVmFsdWUqIG51bVBhZ2VzID0gbV9jdXJyZW50QmxvY2st
PmFwcGVuZE5ldzxWYWx1ZT4obV9wcm9jLCBaU2hyLCBvcmlnaW4oKSwKQEAgLTEyNzksMTMgKzEy
NzYsMTEgQEAgYXV0byBCM0lSR2VuZXJhdG9yOjphZGRDYWxsSW5kaXJlY3QoY29uc3QgU2lnbmF0
dXJlJiBzaWduYXR1cmUsIFZlY3RvcjxFeHByZXNzaW8KICAgICAgICAgICAgIGppdC5sb2FkUHRy
KENDYWxsSGVscGVyczo6QWRkcmVzcyhvbGRDb250ZXh0SW5zdGFuY2UsIEluc3RhbmNlOjpvZmZz
ZXRPZkNhY2hlZFN0YWNrTGltaXQoKSksIGJhc2VNZW1vcnkpOwogICAgICAgICAgICAgaml0LnN0
b3JlUHRyKGJhc2VNZW1vcnksIENDYWxsSGVscGVyczo6QWRkcmVzcyhuZXdDb250ZXh0SW5zdGFu
Y2UsIEluc3RhbmNlOjpvZmZzZXRPZkNhY2hlZFN0YWNrTGltaXQoKSkpOwogICAgICAgICAgICAg
aml0LnN0b3JlV2FzbUNvbnRleHRJbnN0YW5jZShuZXdDb250ZXh0SW5zdGFuY2UpOwotICAgICAg
ICAgICAgaml0LmxvYWRQdHIoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKG5ld0NvbnRleHRJbnN0YW5j
ZSwgSW5zdGFuY2U6Om9mZnNldE9mTWVtb3J5KCkpLCBiYXNlTWVtb3J5KTsgLy8gTWVtb3J5Ki4K
ICAgICAgICAgICAgIEFTU0VSVChzaXplUmVncy5zaXplKCkgPT0gMSk7Ci0gICAgICAgICAgICBB
U1NFUlQoc2l6ZVJlZ3NbMF0uc2l6ZVJlZ2lzdGVyICE9IGJhc2VNZW1vcnkpOwogICAgICAgICAg
ICAgQVNTRVJUKHNpemVSZWdzWzBdLnNpemVSZWdpc3RlciAhPSBuZXdDb250ZXh0SW5zdGFuY2Up
OwogICAgICAgICAgICAgQVNTRVJUKCFzaXplUmVnc1swXS5zaXplT2Zmc2V0KTsKLSAgICAgICAg
ICAgIGppdC5sb2FkUHRyKENDYWxsSGVscGVyczo6QWRkcmVzcyhiYXNlTWVtb3J5LCBNZW1vcnk6
Om9mZnNldE9mU2l6ZSgpKSwgc2l6ZVJlZ3NbMF0uc2l6ZVJlZ2lzdGVyKTsgLy8gTWVtb3J5IHNp
emUuCi0gICAgICAgICAgICBqaXQubG9hZFB0cihDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoYmFzZU1l
bW9yeSwgTWVtb3J5OjpvZmZzZXRPZk1lbW9yeSgpKSwgYmFzZU1lbW9yeSk7IC8vIE1lbW9yeTo6
dm9pZCouCisgICAgICAgICAgICBqaXQubG9hZFB0cihDQ2FsbEhlbHBlcnM6OkFkZHJlc3MobmV3
Q29udGV4dEluc3RhbmNlLCBJbnN0YW5jZTo6b2Zmc2V0T2ZDYWNoZWRNZW1vcnlTaXplKCkpLCBz
aXplUmVnc1swXS5zaXplUmVnaXN0ZXIpOyAvLyBNZW1vcnkgc2l6ZS4KKyAgICAgICAgICAgIGpp
dC5sb2FkUHRyKENDYWxsSGVscGVyczo6QWRkcmVzcyhuZXdDb250ZXh0SW5zdGFuY2UsIEluc3Rh
bmNlOjpvZmZzZXRPZkNhY2hlZE1lbW9yeSgpKSwgYmFzZU1lbW9yeSk7IC8vIE1lbW9yeTo6dm9p
ZCouCiAgICAgICAgIH0pOwogICAgICAgICBkb0NvbnRleHRTd2l0Y2gtPmFwcGVuZE5ld0NvbnRy
b2xWYWx1ZShtX3Byb2MsIEp1bXAsIG9yaWdpbigpLCBjb250aW51YXRpb24pOwogCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQmluZGluZy5jcHAgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQmluZGluZy5jcHAKaW5kZXggNjJlYTNhZjBjMTc2ZDE4
NGUzZWY1Y2I2ZGRkZDBiNTk2ZmUwN2ViNi4uZDIyYWY1YzZiOTFmMGMxMmEwODVhNGIzMWRiNWI4
ODcwZWQyMjQ5YiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUJp
bmRpbmcuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21CaW5kaW5nLmNw
cApAQCAtNjQsMTAgKzY0LDggQEAgRXhwZWN0ZWQ8TWFjcm9Bc3NlbWJsZXJDb2RlUmVmLCBCaW5k
aW5nRmFpbHVyZT4gd2FzbVRvV2FzbSh1bnNpZ25lZCBpbXBvcnRJbmRleCkKIAogICAgIC8vIEZJ
WE1FIHRoZSBmb2xsb3dpbmcgY29kZSBhc3N1bWVzIHRoYXQgYWxsIFdhc206Okluc3RhbmNlIGhh
dmUgdGhlIHNhbWUgcGlubmVkIHJlZ2lzdGVycy4gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTE2Mjk1MgogICAgIC8vIFNldCB1cCB0aGUgY2FsbGVlJ3MgYmFzZU1lbW9y
eSByZWdpc3RlciBhcyB3ZWxsIGFzIHRoZSBtZW1vcnkgc2l6ZSByZWdpc3RlcnMuCi0gICAgaml0
LmxvYWRQdHIoSklUOjpBZGRyZXNzKGJhc2VNZW1vcnksIEluc3RhbmNlOjpvZmZzZXRPZk1lbW9y
eSgpKSwgYmFzZU1lbW9yeSk7IC8vIFdhc206Ok1lbW9yeSouCi0gICAgQVNTRVJUKCFzaXplUmVn
c1swXS5zaXplT2Zmc2V0KTsgLy8gVGhlIGZvbGxvd2luZyBjb2RlIGFzc3VtZXMgd2Ugc3RhcnQg
YXQgMCwgYW5kIGNhbGN1bGF0ZXMgc3Vic2VxdWVudCBzaXplIHJlZ2lzdGVycyByZWxhdGl2ZSB0
byAwLgotICAgIGppdC5sb2FkUHRyKEpJVDo6QWRkcmVzcyhiYXNlTWVtb3J5LCBXYXNtOjpNZW1v
cnk6Om9mZnNldE9mU2l6ZSgpKSwgc2l6ZVJlZ3NbMF0uc2l6ZVJlZ2lzdGVyKTsgLy8gTWVtb3J5
IHNpemUuCi0gICAgaml0LmxvYWRQdHIoSklUOjpBZGRyZXNzKGJhc2VNZW1vcnksIFdhc206Ok1l
bW9yeTo6b2Zmc2V0T2ZNZW1vcnkoKSksIGJhc2VNZW1vcnkpOyAvLyBXYXNtOjpNZW1vcnk6OnZv
aWQqLgorICAgIGppdC5sb2FkUHRyKEpJVDo6QWRkcmVzcyhiYXNlTWVtb3J5LCBXYXNtOjpJbnN0
YW5jZTo6b2Zmc2V0T2ZDYWNoZWRNZW1vcnlTaXplKCkpLCBzaXplUmVnc1swXS5zaXplUmVnaXN0
ZXIpOyAvLyBNZW1vcnkgc2l6ZS4KKyAgICBqaXQubG9hZFB0cihKSVQ6OkFkZHJlc3MoYmFzZU1l
bW9yeSwgV2FzbTo6SW5zdGFuY2U6Om9mZnNldE9mQ2FjaGVkTWVtb3J5KCkpLCBiYXNlTWVtb3J5
KTsgLy8gV2FzbTo6TWVtb3J5Ojp2b2lkKi4KICAgICBmb3IgKHVuc2lnbmVkIGkgPSAxOyBpIDwg
c2l6ZVJlZ3Muc2l6ZSgpOyArK2kpIHsKICAgICAgICAgQVNTRVJUKHNpemVSZWdzW2ldLnNpemVS
ZWdpc3RlciAhPSBiYXNlTWVtb3J5KTsKICAgICAgICAgQVNTRVJUKHNpemVSZWdzW2ldLnNpemVS
ZWdpc3RlciAhPSBzY3JhdGNoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93
YXNtL1dhc21JbnN0YW5jZS5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUluc3Rh
bmNlLmgKaW5kZXggMmMwODAwMDNkNTJjYTY5OGRhNzJmY2ZmNjc0NDQwNDZkYjQ1MzU1Ni4uMTNj
ZmU3Y2MyZWVjNThjZjE0ZWIwODhkYWQwZjc5ZmM1NDRiMjIyNyAxMDA2NDQKLS0tIGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUluc3RhbmNlLmgKKysrIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3dhc20vV2FzbUluc3RhbmNlLmgKQEAgLTY1LDggKzY1LDI0IEBAIHB1YmxpYzoKICAg
ICBDb2RlQmxvY2sqIGNvZGVCbG9jaygpIHsgcmV0dXJuIG1fY29kZUJsb2NrLmdldCgpOyB9CiAg
ICAgTWVtb3J5KiBtZW1vcnkoKSB7IHJldHVybiBtX21lbW9yeS5nZXQoKTsgfQogICAgIFRhYmxl
KiB0YWJsZSgpIHsgcmV0dXJuIG1fdGFibGUuZ2V0KCk7IH0KLSAgICAKLSAgICB2b2lkIHNldE1l
bW9yeShSZWY8TWVtb3J5PiYmIG1lbW9yeSkgeyBtX21lbW9yeSA9IFdURk1vdmUobWVtb3J5KTsg
fQorCisgICAgdm9pZCogY2FjaGVkTWVtb3J5KCkgY29uc3QgeyByZXR1cm4gbV9jYWNoZWRNZW1v
cnk7IH0KKyAgICBzaXplX3QgY2FjaGVkTWVtb3J5U2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fY2Fj
aGVkTWVtb3J5U2l6ZTsgfQorCisgICAgV2Vha1B0cjxJbnN0YW5jZT4gY3JlYXRlV2Vha1B0cigp
IHsgcmV0dXJuIG1fd2Vha1B0ckZhY3RvcnkuY3JlYXRlV2Vha1B0cigqdGhpcyk7IH0KKyAgICB2
b2lkIHNldE1lbW9yeShSZWY8TWVtb3J5PiYmIG1lbW9yeSkKKyAgICB7CisgICAgICAgIG1fbWVt
b3J5ID0gV1RGTW92ZShtZW1vcnkpOworICAgICAgICBtX21lbW9yeS5nZXQoKS0+cmVnaXN0ZXJJ
bnN0YW5jZSh0aGlzKTsKKyAgICAgICAgdXBkYXRlQ2hlY2hlZE1lbW9yeSgpOworICAgIH0KKyAg
ICB2b2lkIHVwZGF0ZUNoZWNoZWRNZW1vcnkoKQorICAgIHsKKyAgICAgICAgaWYgKG1fbWVtb3J5
ICE9IG51bGxwdHIpIHsKKyAgICAgICAgICAgIG1fY2FjaGVkTWVtb3J5ID0gbWVtb3J5KCktPm1l
bW9yeSgpOworICAgICAgICAgICAgbV9jYWNoZWRNZW1vcnlTaXplID0gbWVtb3J5KCktPnNpemUo
KTsKKyAgICAgICAgfQorICAgIH0KICAgICB2b2lkIHNldFRhYmxlKFJlZjxUYWJsZT4mJiB0YWJs
ZSkgeyBtX3RhYmxlID0gV1RGTW92ZSh0YWJsZSk7IH0KIAogICAgIGludDMyX3QgbG9hZEkzMkds
b2JhbCh1bnNpZ25lZCBpKSBjb25zdCB7IHJldHVybiBtX2dsb2JhbHMuZ2V0KClbaV07IH0KQEAg
LTc4LDYgKzk0LDggQEAgcHVibGljOgogICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZNZW1v
cnkoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoSW5zdGFuY2UsIG1fbWVtb3J5KTsgfQogICAg
IHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZHbG9iYWxzKCkgeyByZXR1cm4gT0JKRUNUX09GRlNF
VE9GKEluc3RhbmNlLCBtX2dsb2JhbHMpOyB9CiAgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRP
ZlRhYmxlKCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKEluc3RhbmNlLCBtX3RhYmxlKTsgfQor
ICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZDYWNoZWRNZW1vcnkoKSB7IHJldHVybiBPQkpF
Q1RfT0ZGU0VUT0YoSW5zdGFuY2UsIG1fY2FjaGVkTWVtb3J5KTsgfQorICAgIHN0YXRpYyBwdHJk
aWZmX3Qgb2Zmc2V0T2ZDYWNoZWRNZW1vcnlTaXplKCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9G
KEluc3RhbmNlLCBtX2NhY2hlZE1lbW9yeVNpemUpOyB9CiAgICAgc3RhdGljIHB0cmRpZmZfdCBv
ZmZzZXRPZlBvaW50ZXJUb1RvcEVudHJ5RnJhbWUoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0Yo
SW5zdGFuY2UsIG1fcG9pbnRlclRvVG9wRW50cnlGcmFtZSk7IH0KIAogICAgIHN0YXRpYyBwdHJk
aWZmX3Qgb2Zmc2V0T2ZQb2ludGVyVG9BY3R1YWxTdGFja0xpbWl0KCkgeyByZXR1cm4gT0JKRUNU
X09GRlNFVE9GKEluc3RhbmNlLCBtX3BvaW50ZXJUb0FjdHVhbFN0YWNrTGltaXQpOyB9CkBAIC0x
MjYsNyArMTQ0LDcgQEAgcHJpdmF0ZToKICAgICB7CiAgICAgICAgIHJldHVybiAob2Zmc2V0T2ZU
YWlsKCkgKyBzaXplb2YoSW1wb3J0RnVuY3Rpb25JbmZvKSAqIG51bUltcG9ydEZ1bmN0aW9ucyku
dW5zYWZlR2V0KCk7CiAgICAgfQotCisgICAgV2Vha1B0ckZhY3Rvcnk8SW5zdGFuY2U+IG1fd2Vh
a1B0ckZhY3Rvcnk7CiAgICAgdm9pZCogbV9vd25lciB7IG51bGxwdHIgfTsgLy8gSW4gYSBKUyBl
bWJlZGRpbmcsIHRoaXMgaXMgYSBKU1dlYkFzc2VtYmx5SW5zdGFuY2UqLgogICAgIENvbnRleHQq
IG1fY29udGV4dCB7IG51bGxwdHIgfTsKICAgICBSZWY8TW9kdWxlPiBtX21vZHVsZTsKQEAgLTEz
NCw2ICsxNTIsOCBAQCBwcml2YXRlOgogICAgIFJlZlB0cjxNZW1vcnk+IG1fbWVtb3J5OwogICAg
IFJlZlB0cjxUYWJsZT4gbV90YWJsZTsKICAgICBNYWxsb2NQdHI8dWludDY0X3Q+IG1fZ2xvYmFs
czsKKyAgICB2b2lkKiBtX2NhY2hlZE1lbW9yeSB7IG51bGxwdHIgfTsKKyAgICBzaXplX3QgbV9j
YWNoZWRNZW1vcnlTaXplIHsgMCB9OwogICAgIEVudHJ5RnJhbWUqKiBtX3BvaW50ZXJUb1RvcEVu
dHJ5RnJhbWUgeyBudWxscHRyIH07CiAgICAgdm9pZCoqIG1fcG9pbnRlclRvQWN0dWFsU3RhY2tM
aW1pdCB7IG51bGxwdHIgfTsKICAgICB2b2lkKiBtX2NhY2hlZFN0YWNrTGltaXQgeyBiaXR3aXNl
X2Nhc3Q8dm9pZCo+KHN0ZDo6bnVtZXJpY19saW1pdHM8dWludHB0cl90Pjo6bWF4KCkpIH07CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTWVtb3J5LmNwcCBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21NZW1vcnkuY3BwCmluZGV4IDFjMWNmNTlmMmU4
ZWJjZWYwN2FmNTJhYWI5NjJhOWVjYWMwZDgzNDQuLjAyYTdlYmQwYjc3MzliNzFmMWM2MjhjMThm
MTU1MmY5YWY4ZTc0NmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dh
c21NZW1vcnkuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21NZW1vcnku
Y3BwCkBAIC0yNSw2ICsyNSw3IEBACiAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJX
YXNtTWVtb3J5LmgiCisjaW5jbHVkZSAiV2FzbUluc3RhbmNlLmgiCiAKICNpZiBFTkFCTEUoV0VC
QVNTRU1CTFkpCiAKQEAgLTM5NCw2ICszOTUsMTEgQEAgRXhwZWN0ZWQ8UGFnZUNvdW50LCBNZW1v
cnk6Okdyb3dGYWlsUmVhc29uPiBNZW1vcnk6Omdyb3coUGFnZUNvdW50IGRlbHRhKQogCiAgICAg
YXV0byBzdWNjZXNzID0gWyZdICgpIHsKICAgICAgICAgbV9ncm93U3VjY2Vzc0NhbGxiYWNrKEdy
b3dTdWNjZXNzVGFnLCBvbGRQYWdlQ291bnQsIG5ld1BhZ2VDb3VudCk7CisgICAgICAgIC8vIFVw
ZGF0ZSBjYWNoZSBmb3IgaW5zdGFuY2UKKyAgICAgICAgZm9yIChhdXRvJiBpbnN0YW5jZSA6IG1f
aW5zdGFuY2VzKSB7CisgICAgICAgICAgICBpZiAoaW5zdGFuY2UuZ2V0KCkgIT0gbnVsbHB0cikK
KyAgICAgICAgICAgICAgICBpbnN0YW5jZS5nZXQoKS0+dXBkYXRlQ2hlY2hlZE1lbW9yeSgpOwor
ICAgICAgICB9CiAgICAgICAgIHJldHVybiBvbGRQYWdlQ291bnQ7CiAgICAgfTsKIApAQCAtNDU0
LDYgKzQ2MCwxMSBAQCBFeHBlY3RlZDxQYWdlQ291bnQsIE1lbW9yeTo6R3Jvd0ZhaWxSZWFzb24+
IE1lbW9yeTo6Z3JvdyhQYWdlQ291bnQgZGVsdGEpCiAgICAgcmV0dXJuIG9sZFBhZ2VDb3VudDsK
IH0KIAordm9pZCBNZW1vcnk6OnJlZ2lzdGVySW5zdGFuY2UoSW5zdGFuY2UqIGluc3RhbmNlKQor
eworICAgIG1faW5zdGFuY2VzLmFwcGVuZChpbnN0YW5jZS0+Y3JlYXRlV2Vha1B0cigpKTsKK30K
Kwogdm9pZCBNZW1vcnk6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKIHsKICAgICBvdXQu
cHJpbnQoIk1lbW9yeSBhdCAiLCBSYXdQb2ludGVyKG1fbWVtb3J5KSwgIiwgc2l6ZSAiLCBtX3Np
emUsICJCIGNhcGFjaXR5ICIsIG1fbWFwcGVkQ2FwYWNpdHksICJCLCBpbml0aWFsICIsIG1faW5p
dGlhbCwgIiBtYXhpbXVtICIsIG1fbWF4aW11bSwgIiBtb2RlICIsIG1ha2VTdHJpbmcobV9tb2Rl
KSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTWVtb3J5Lmgg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTWVtb3J5LmgKaW5kZXggZDg2ZGUzMjQ0
MzQzZWVjZDU5NTY0OWM3MTU4OWY1YmE5MDMzYjI1YS4uYzM2NTgwZjc5ZWY3MzNkODYxOGRjZmRi
M2Y2NzIxNzM4NWYyZjI0MSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20v
V2FzbU1lbW9yeS5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21NZW1vcnku
aApAQCAtMzQsNiArMzQsOCBAQAogI2luY2x1ZGUgPHd0Zi9GdW5jdGlvbi5oPgogI2luY2x1ZGUg
PHd0Zi9SZWZDb3VudGVkLmg+CiAjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgorI2luY2x1ZGUgPHd0
Zi9WZWN0b3IuaD4KKyNpbmNsdWRlIDx3dGYvV2Vha1B0ci5oPgogCiBuYW1lc3BhY2UgV1RGIHsK
IGNsYXNzIFByaW50U3RyZWFtOwpAQCAtNDMsNiArNDUsOCBAQCBuYW1lc3BhY2UgSlNDIHsKIAog
bmFtZXNwYWNlIFdhc20gewogCitjbGFzcyBJbnN0YW5jZTsKKwogY2xhc3MgTWVtb3J5IDogcHVi
bGljIFJlZkNvdW50ZWQ8TWVtb3J5PiB7CiAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoTWVtb3J5
KTsKICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKQEAgLTgwLDYgKzg0LDcgQEAgcHVibGlj
OgogICAgICAgICBPdXRPZk1lbW9yeSwKICAgICB9OwogICAgIEV4cGVjdGVkPFBhZ2VDb3VudCwg
R3Jvd0ZhaWxSZWFzb24+IGdyb3coUGFnZUNvdW50KTsKKyAgICB2b2lkIHJlZ2lzdGVySW5zdGFu
Y2UoSW5zdGFuY2UqKTsKIAogICAgIHZvaWQgY2hlY2soKSB7ICBBU1NFUlQoIWRlbGV0aW9uSGFz
QmVndW4oKSk7IH0KIApAQCAtOTEsNyArOTYsNiBAQCBwcml2YXRlOgogICAgIE1lbW9yeSh2b2lk
KiBtZW1vcnksIFBhZ2VDb3VudCBpbml0aWFsLCBQYWdlQ291bnQgbWF4aW11bSwgc2l6ZV90IG1h
cHBlZENhcGFjaXR5LCBNZW1vcnlNb2RlLCBXVEY6OkZ1bmN0aW9uPHZvaWQoTm90aWZ5UHJlc3N1
cmUpPiYmIG5vdGlmeU1lbW9yeVByZXNzdXJlLCBXVEY6OkZ1bmN0aW9uPHZvaWQoU3luY1RyeVRv
UmVjbGFpbSk+JiYgc3luY1RyeVRvUmVjbGFpbU1lbW9yeSwgV1RGOjpGdW5jdGlvbjx2b2lkKEdy
b3dTdWNjZXNzLCBQYWdlQ291bnQsIFBhZ2VDb3VudCk+JiYgZ3Jvd1N1Y2Nlc3NDYWxsYmFjayk7
CiAgICAgTWVtb3J5KFBhZ2VDb3VudCBpbml0aWFsLCBQYWdlQ291bnQgbWF4aW11bSwgV1RGOjpG
dW5jdGlvbjx2b2lkKE5vdGlmeVByZXNzdXJlKT4mJiBub3RpZnlNZW1vcnlQcmVzc3VyZSwgV1RG
OjpGdW5jdGlvbjx2b2lkKFN5bmNUcnlUb1JlY2xhaW0pPiYmIHN5bmNUcnlUb1JlY2xhaW1NZW1v
cnksIFdURjo6RnVuY3Rpb248dm9pZChHcm93U3VjY2VzcywgUGFnZUNvdW50LCBQYWdlQ291bnQp
PiYmIGdyb3dTdWNjZXNzQ2FsbGJhY2spOwogCi0gICAgLy8gRklYTUU6IHdlIGNhY2hlIHRoZXNl
IG9uIHRoZSBpbnN0YW5jZXMgdG8gYXZvaWQgYSBsb2FkIG9uIGluc3RhbmNlLT5pbnN0YW5jZSBj
YWxscy4gVGhpcyB3aWxsIHJlcXVpcmUgdXBkYXRpbmcgYWxsIHRoZSBpbnN0YW5jZXMgd2hlbiBn
cm93IGlzIGNhbGxlZC4gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3
NzMwNQogICAgIHZvaWQqIG1fbWVtb3J5IHsgbnVsbHB0ciB9OwogICAgIHNpemVfdCBtX3NpemUg
eyAwIH07CiAgICAgUGFnZUNvdW50IG1faW5pdGlhbDsKQEAgLTEwMSw2ICsxMDUsNyBAQCBwcml2
YXRlOgogICAgIFdURjo6RnVuY3Rpb248dm9pZChOb3RpZnlQcmVzc3VyZSk+IG1fbm90aWZ5TWVt
b3J5UHJlc3N1cmU7CiAgICAgV1RGOjpGdW5jdGlvbjx2b2lkKFN5bmNUcnlUb1JlY2xhaW0pPiBt
X3N5bmNUcnlUb1JlY2xhaW1NZW1vcnk7CiAgICAgV1RGOjpGdW5jdGlvbjx2b2lkKEdyb3dTdWNj
ZXNzLCBQYWdlQ291bnQsIFBhZ2VDb3VudCk+IG1fZ3Jvd1N1Y2Nlc3NDYWxsYmFjazsKKyAgICBW
ZWN0b3I8V2Vha1B0cjxJbnN0YW5jZT4+IG1faW5zdGFuY2VzOwogfTsKIAogfSB9IC8vIG5hbWVz
cGFjZSBKU0M6Oldhc20KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pz
L0pTVG9XYXNtLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTVG9XYXNtLmNw
cAppbmRleCA1NmU3ODAxOTJkNTBiMjQzNjlmMmM0YzcyODE4MTU5OTNkODBiY2MzLi5iOTE0Mjli
ODNkNzA5MjBjMDY3YjE3ZGQxZGU1MWQzYzVjM2Q2NGM2IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvd2FzbS9qcy9KU1RvV2FzbS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL3dhc20vanMvSlNUb1dhc20uY3BwCkBAIC0xNzMsMjMgKzE3MywyNiBAQCBzdGQ6OnVuaXF1
ZV9wdHI8SW50ZXJuYWxGdW5jdGlvbj4gY3JlYXRlSlNUb1dhc21XcmFwcGVyKENvbXBpbGF0aW9u
Q29udGV4dCYgY29tcAogICAgIGlmICghIWluZm8ubWVtb3J5KSB7CiAgICAgICAgIEdQUlJlZyBi
YXNlTWVtb3J5ID0gcGlubmVkUmVncy5iYXNlTWVtb3J5UG9pbnRlcjsKIAotICAgICAgICBpZiAo
IUNvbnRleHQ6OnVzZUZhc3RUTFMoKSkKLSAgICAgICAgICAgIGppdC5sb2FkUHRyKENDYWxsSGVs
cGVyczo6QWRkcmVzcyh3YXNtQ29udGV4dEluc3RhbmNlR1BSLCBJbnN0YW5jZTo6b2Zmc2V0T2ZN
ZW1vcnkoKSksIGJhc2VNZW1vcnkpOwotICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgIGppdC5s
b2FkV2FzbUNvbnRleHRJbnN0YW5jZShiYXNlTWVtb3J5KTsKLSAgICAgICAgICAgIGppdC5sb2Fk
UHRyKENDYWxsSGVscGVyczo6QWRkcmVzcyhiYXNlTWVtb3J5LCBJbnN0YW5jZTo6b2Zmc2V0T2ZN
ZW1vcnkoKSksIGJhc2VNZW1vcnkpOwotICAgICAgICB9Ci0KICAgICAgICAgaWYgKG1vZGUgIT0g
TWVtb3J5TW9kZTo6U2lnbmFsaW5nKSB7CiAgICAgICAgICAgICBjb25zdCBhdXRvJiBzaXplUmVn
cyA9IHBpbm5lZFJlZ3Muc2l6ZVJlZ2lzdGVyczsKICAgICAgICAgICAgIEFTU0VSVChzaXplUmVn
cy5zaXplKCkgPj0gMSk7CiAgICAgICAgICAgICBBU1NFUlQoIXNpemVSZWdzWzBdLnNpemVPZmZz
ZXQpOyAvLyBUaGUgZm9sbG93aW5nIGNvZGUgYXNzdW1lcyB3ZSBzdGFydCBhdCAwLCBhbmQgY2Fs
Y3VsYXRlcyBzdWJzZXF1ZW50IHNpemUgcmVnaXN0ZXJzIHJlbGF0aXZlIHRvIDAuCi0gICAgICAg
ICAgICBqaXQubG9hZFB0cihDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoYmFzZU1lbW9yeSwgV2FzbTo6
TWVtb3J5OjpvZmZzZXRPZlNpemUoKSksIHNpemVSZWdzWzBdLnNpemVSZWdpc3Rlcik7CisgICAg
ICAgICAgICBpZiAoIUNvbnRleHQ6OnVzZUZhc3RUTFMoKSkKKyAgICAgICAgICAgICAgICBqaXQu
bG9hZFB0cihDQ2FsbEhlbHBlcnM6OkFkZHJlc3Mod2FzbUNvbnRleHRJbnN0YW5jZUdQUiwgSW5z
dGFuY2U6Om9mZnNldE9mQ2FjaGVkTWVtb3J5U2l6ZSgpKSwgc2l6ZVJlZ3NbMF0uc2l6ZVJlZ2lz
dGVyKTsKKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgIGppdC5sb2FkV2FzbUNv
bnRleHRJbnN0YW5jZShiYXNlTWVtb3J5KTsKKyAgICAgICAgICAgICAgICBqaXQubG9hZFB0cihD
Q2FsbEhlbHBlcnM6OkFkZHJlc3MoYmFzZU1lbW9yeSwgSW5zdGFuY2U6Om9mZnNldE9mQ2FjaGVk
TWVtb3J5U2l6ZSgpKSwgc2l6ZVJlZ3NbMF0uc2l6ZVJlZ2lzdGVyKTsKKyAgICAgICAgICAgIH0K
ICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDE7IGkgPCBzaXplUmVncy5zaXplKCk7ICsr
aSkKICAgICAgICAgICAgICAgICBqaXQuYWRkNjQoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIo
LXNpemVSZWdzW2ldLnNpemVPZmZzZXQpLCBzaXplUmVnc1swXS5zaXplUmVnaXN0ZXIsIHNpemVS
ZWdzW2ldLnNpemVSZWdpc3Rlcik7CiAgICAgICAgIH0KIAotICAgICAgICBqaXQubG9hZFB0cihD
Q2FsbEhlbHBlcnM6OkFkZHJlc3MoYmFzZU1lbW9yeSwgV2FzbTo6TWVtb3J5OjpvZmZzZXRPZk1l
bW9yeSgpKSwgYmFzZU1lbW9yeSk7CisgICAgICAgIGlmICghQ29udGV4dDo6dXNlRmFzdFRMUygp
KQorICAgICAgICAgICAgaml0LmxvYWRQdHIoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKHdhc21Db250
ZXh0SW5zdGFuY2VHUFIsIEluc3RhbmNlOjpvZmZzZXRPZkNhY2hlZE1lbW9yeSgpKSwgYmFzZU1l
bW9yeSk7CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgaml0LmxvYWRXYXNtQ29udGV4dElu
c3RhbmNlKGJhc2VNZW1vcnkpOworICAgICAgICAgICAgaml0LmxvYWRQdHIoQ0NhbGxIZWxwZXJz
OjpBZGRyZXNzKGJhc2VNZW1vcnksIEluc3RhbmNlOjpvZmZzZXRPZkNhY2hlZE1lbW9yeSgpKSwg
YmFzZU1lbW9yeSk7CisgICAgICAgIH0KICAgICB9CiAKICAgICBDQ2FsbEhlbHBlcnM6OkNhbGwg
Y2FsbCA9IGppdC50aHJlYWRTYWZlUGF0Y2hhYmxlTmVhckNhbGwoKTsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5TW9kdWxlUmVjb3JkLmNwcCBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5TW9kdWxlUmVjb3JkLmNw
cAppbmRleCBlZjBjOGM1YTRiNjVkZDI1MDJhYjgwNjI5YzRjNTRkNDBhZmE0ZDc2Li5kNGYwMTYy
OWQ5Y2YyOWU0OTk5ODRkM2FkZWU3ZTNkZjVjYmJmZWM2IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseU1vZHVsZVJlY29yZC5jcHAKKysrIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlNb2R1bGVSZWNvcmQuY3BwCkBA
IC0yMjMsOCArMjIzLDcgQEAgSlNWYWx1ZSBXZWJBc3NlbWJseU1vZHVsZVJlY29yZDo6ZXZhbHVh
dGUoRXhlY1N0YXRlKiBleGVjKQogICAgIEpTV2ViQXNzZW1ibHlUYWJsZSogdGFibGUgPSBtX2lu
c3RhbmNlLT50YWJsZSgpOwogCiAgICAgY29uc3QgVmVjdG9yPFdhc206OlNlZ21lbnQ6OlB0cj4m
IGRhdGEgPSBtb2R1bGVJbmZvcm1hdGlvbi5kYXRhOwotICAgIEpTV2ViQXNzZW1ibHlNZW1vcnkq
IGpzTWVtb3J5ID0gbV9pbnN0YW5jZS0+bWVtb3J5KCk7Ci0KKyAgICAKICAgICBzdGQ6Om9wdGlv
bmFsPEpTVmFsdWU+IGV4Y2VwdGlvbjsKIAogICAgIGF1dG8gZm9yRWFjaEVsZW1lbnQgPSBbJl0g
KGF1dG8gZm4pIHsKQEAgLTI1MCw4ICsyNDksOCBAQCBKU1ZhbHVlIFdlYkFzc2VtYmx5TW9kdWxl
UmVjb3JkOjpldmFsdWF0ZShFeGVjU3RhdGUqIGV4ZWMpCiAgICAgfTsKIAogICAgIGF1dG8gZm9y
RWFjaFNlZ21lbnQgPSBbJl0gKGF1dG8gZm4pIHsKLSAgICAgICAgdWludDhfdCogbWVtb3J5ID0g
cmVpbnRlcnByZXRfY2FzdDx1aW50OF90Kj4oanNNZW1vcnktPm1lbW9yeSgpLm1lbW9yeSgpKTsK
LSAgICAgICAgdWludDY0X3Qgc2l6ZUluQnl0ZXMgPSBqc01lbW9yeS0+bWVtb3J5KCkuc2l6ZSgp
OworICAgICAgICB1aW50OF90KiBtZW1vcnkgPSByZWludGVycHJldF9jYXN0PHVpbnQ4X3QqPiht
X2luc3RhbmNlLT5pbnN0YW5jZSgpLmNhY2hlZE1lbW9yeSgpKTsKKyAgICAgICAgdWludDY0X3Qg
c2l6ZUluQnl0ZXMgPSBtX2luc3RhbmNlLT5pbnN0YW5jZSgpLmNhY2hlZE1lbW9yeVNpemUoKTsK
IAogICAgICAgICBmb3IgKGNvbnN0IFdhc206OlNlZ21lbnQ6OlB0ciYgc2VnbWVudCA6IGRhdGEp
IHsKICAgICAgICAgICAgIHVpbnQzMl90IG9mZnNldCA9IHNlZ21lbnQtPm9mZnNldC5pc0dsb2Jh
bEltcG9ydCgpCmRpZmYgLS1naXQgYS9KU1Rlc3RzL0NoYW5nZUxvZyBiL0pTVGVzdHMvQ2hhbmdl
TG9nCmluZGV4IDFiMDBhOTkwNmJhNzE1NjVhM2QwOTE4OTE5Y2MyNGYyNTJhMjEyNmUuLmJkY2Fh
ZmE2YTFmMTkzZGMxNzFhYzcxOWU3ZjYzMWRhMTBkMGFlNzIgMTAwNjQ0Ci0tLSBhL0pTVGVzdHMv
Q2hhbmdlTG9nCisrKyBiL0pTVGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTUgQEAKKzIwMTct
MTItMTYgIE9sZWtzYW5kciBTa2FjaGtvdiAgPGdza2FjaGtvdkBnbWFpbC5jb20+CisKKyAgICAg
ICAgV2ViQXNzZW1ibHk6IGNhY2hlIG1lbW9yeSBhZGRyZXNzIC8gc2l6ZSBvbiBpbnN0YW5jZQor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTc3MzA1CisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiB3YXNtL2Z1
bmN0aW9uLXRlc3RzL21lbW9yeS1yZXVzZS5qczogQWRkZWQuCisgICAgICAgIChpbXBvcnQuQnVp
bGRlci5mcm9tLnN0cmluZ19hcHBlYXJlZF9oZXJlLmltcG9ydC5hcy5hc3NlcnQuZnJvbS5zdHJp
bmdfYXBwZWFyZWRfaGVyZS5jcmVhdGVXYXNtTW9kdWxlKToKKyAgICAgICAgKGltcG9ydC5CdWls
ZGVyLmZyb20uc3RyaW5nX2FwcGVhcmVkX2hlcmUuaW1wb3J0LmFzLmFzc2VydC5mcm9tLnN0cmlu
Z19hcHBlYXJlZF9oZXJlKToKKyAgICAgICAgKGltcG9ydC5CdWlsZGVyLmZyb20uc3RyaW5nX2Fw
cGVhcmVkX2hlcmUuaW1wb3J0LmFzLmFzc2VydC5mcm9tLnN0cmluZ19hcHBlYXJlZF9oZXJlLmxv
YWRXYXNtTW9kdWxlV2l0aFNoYXJlZE1lbW9yeSk6CisKIDIwMTctMTItMTQgIFNhYW0gQmFyYXRp
ICA8c2JhcmF0aUBhcHBsZS5jb20+CiAKICAgICAgICAgVGhlIENsZWFuVXAgYWZ0ZXIgTElDTSBp
cyBlcnJvbmVvdXNseSByZW1vdmluZyBhIENoZWNrCmRpZmYgLS1naXQgYS9KU1Rlc3RzL3dhc20v
ZnVuY3Rpb24tdGVzdHMvbWVtb3J5LXJldXNlLmpzIGIvSlNUZXN0cy93YXNtL2Z1bmN0aW9uLXRl
c3RzL21lbW9yeS1yZXVzZS5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi43OWVhMjM2YmM2MTg1Nzc0NGJjMDY5M2Rl
YWQzYTVkMmI5ZTIxMzBhCi0tLSAvZGV2L251bGwKKysrIGIvSlNUZXN0cy93YXNtL2Z1bmN0aW9u
LXRlc3RzL21lbW9yeS1yZXVzZS5qcwpAQCAtMCwwICsxLDcxIEBACitpbXBvcnQgQnVpbGRlciBm
cm9tICcuLi9CdWlsZGVyLmpzJworaW1wb3J0ICogYXMgYXNzZXJ0IGZyb20gJy4uL2Fzc2VydC5q
cycKKworeworICAgIGNvbnN0IGNvdW50ID0gMTA7CisgICAgY29uc3QgbWVtb3J5RGVzY3JpcHRp
b24gPSB7aW5pdGlhbDoxfTsKKworICAgIGZ1bmN0aW9uIGNyZWF0ZVdhc21Nb2R1bGUobWVtb3J5
KSB7CisgICAgICAgIGNvbnN0IGJ1aWxkZXIgPSBuZXcgQnVpbGRlcigpCisgICAgICAgICAgICAu
VHlwZSgpLkVuZCgpCisgICAgICAgICAgICAuSW1wb3J0KCkKKyAgICAgICAgICAgICAgICAuTWVt
b3J5KCJpbXAiLCAibWVtb3J5IiwgbWVtb3J5RGVzY3JpcHRpb24pCisgICAgICAgICAgICAuRW5k
KCkKKyAgICAgICAgICAgIC5GdW5jdGlvbigpLkVuZCgpCisgICAgICAgICAgICAuRXhwb3J0KCkK
KyAgICAgICAgICAgICAgICAuRnVuY3Rpb24oImN1cnJlbnQiKQorICAgICAgICAgICAgICAgIC5G
dW5jdGlvbigiZ2V0IikKKyAgICAgICAgICAgIC5FbmQoKQorICAgICAgICAgICAgLkNvZGUoKQor
ICAgICAgICAgICAgICAgIC5GdW5jdGlvbigiY3VycmVudCIsIHsgcGFyYW1zOiBbXSwgcmV0OiAi
aTMyIiB9KQorICAgICAgICAgICAgICAgICAgICAuQ3VycmVudE1lbW9yeSgwKQorICAgICAgICAg
ICAgICAgICAgICAuUmV0dXJuKCkKKyAgICAgICAgICAgICAgICAuRW5kKCkKKyAgICAgICAgICAg
ICAgICAuRnVuY3Rpb24oImdldCIsIHsgcGFyYW1zOiBbImkzMiJdLCByZXQ6ICJpMzIiIH0pCisg
ICAgICAgICAgICAgICAgICAgIC5HZXRMb2NhbCgwKQorICAgICAgICAgICAgICAgICAgICAuSTMy
TG9hZCgyLCAwKQorICAgICAgICAgICAgICAgICAgICAuUmV0dXJuKCkKKyAgICAgICAgICAgICAg
ICAuRW5kKCkKKyAgICAgICAgICAgIC5FbmQoKTsKKworCisgICAgICAgIGNvbnN0IGJpbiA9IGJ1
aWxkZXIuV2ViQXNzZW1ibHkoKS5nZXQoKTsKKyAgICAgICAgY29uc3QgbW9kdWxlID0gbmV3IFdl
YkFzc2VtYmx5Lk1vZHVsZShiaW4pOworICAgICAgICByZXR1cm4gbmV3IFdlYkFzc2VtYmx5Lklu
c3RhbmNlKG1vZHVsZSwge2ltcDoge21lbW9yeX19KTsKKyAgICB9CisKKyAgICBmdW5jdGlvbiBk
b0NoZWNrTW9kdWxlcyhtb2R1bGVzLCBtZW0pIHsKKyAgICAgICAgY29uc3QgcGFnZVNpemUgPSA2
NCAqIDEwMjQ7CisgICAgICAgIGxldCBidWYgPSBuZXcgVWludDMyQXJyYXkobWVtLmJ1ZmZlcik7
CisKKyAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBidWYubGVuZ3RoLzQ7ICsraSkgeworICAg
ICAgICAgICAgYnVmW2ldID0gaSsxOworICAgICAgICB9CisKKyAgICAgICAgZm9yIChsZXQgY3Vy
ciBvZiBtb2R1bGVzKSB7CisgICAgICAgICAgICBhc3NlcnQuZXEoY3Vyci5leHBvcnRzLmN1cnJl
bnQoKSwgYnVmLmxlbmd0aCAqIDQvcGFnZVNpemUpOworCisgICAgICAgICAgICBmb3IgKGxldCBp
ID0gMDsgaSA8IGJ1Zi5sZW5ndGgvNDsgKytpKSB7CisgICAgICAgICAgICAgICAgYXNzZXJ0LmVx
KGN1cnIuZXhwb3J0cy5nZXQoaSo0KSwgYnVmW2ldKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
fQorICAgIH0KKworICAgIGZ1bmN0aW9uIGxvYWRXYXNtTW9kdWxlV2l0aFNoYXJlZE1lbW9yeSgp
IHsKKyAgICAgICAgY29uc3QgbWVtID0gbmV3IFdlYkFzc2VtYmx5Lk1lbW9yeShtZW1vcnlEZXNj
cmlwdGlvbik7CisgICAgICAgIGNvbnN0IHBhZ2VTaXplID0gNjQgKiAxMDI0OworCisgICAgICAg
IGNvbnN0IG1vZHVsZXMgPSBbXTsKKyAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBjb3VudDsg
aSsrKSB7CisgICAgICAgICAgICBtb2R1bGVzLnB1c2goY3JlYXRlV2FzbU1vZHVsZShtZW0pKTsK
KyAgICAgICAgfQorCisgICAgICAgIGZvcihsZXQgaSA9IDA7IGkgPCA1OyBpKyspIHsKKyAgICAg
ICAgICAgIGRvQ2hlY2tNb2R1bGVzKG1vZHVsZXMsIG1lbSk7CisgICAgICAgICAgICBtZW0uZ3Jv
dygxKTsKKyAgICAgICAgfQorICAgICAgICBkb0NoZWNrTW9kdWxlcyhtb2R1bGVzLCBtZW0pOwor
ICAgIH0KKworICAgIGxvYWRXYXNtTW9kdWxlV2l0aFNoYXJlZE1lbW9yeSgpOworfQpcIE5vIG5l
d2xpbmUgYXQgZW5kIG9mIGZpbGUK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>329942</attachid>
            <date>2017-12-20 12:11:48 -0800</date>
            <delta_ts>2018-01-07 02:00:14 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-177305-20171220221146.patch</filename>
            <type>text/plain</type>
            <size>21411</size>
            <attacher name="GSkachkov">gskachkov</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjI1OTg1CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCBh
ZmIzOTY1ODIzMmVhZjAxNjI5ZmYwOTY5M2UzODE2MjJkOTA0YjU5Li4wYjhmNGYyMzY4ZWVlMGU2
NzM0OWFjMjY0ZWZiZjBhNjZmMTg1NzZjIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwzNiBAQAorMjAxNy0xMi0xNiAgT2xla3NhbmRyIFNrYWNoa292ICA8Z3NrYWNoa292QGdt
YWlsLmNvbT4KKworICAgICAgICBXZWJBc3NlbWJseTogY2FjaGUgbWVtb3J5IGFkZHJlc3MgLyBz
aXplIG9uIGluc3RhbmNlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0xNzczMDUKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKwor
ICAgICAgICBDYWNoZSBtZW1vcnkgYWRkcmVzcy9zaXplIGluIHdhc206SW5zdGFuY2UgdG8gYXZv
aWQgbG9hZCB3YXNtOk1lbW9yeSAKKyAgICAgICAgb2JqZWN0IGR1cmluZyBhY2Nlc3MgdG8gbWVt
b3J5IGFuZCBtZW1vcnkgc2l6ZSBwcm9wZXJ0eSBpbiBKaVQKKworICAgICAgICAqIHdhc20vV2Fz
bUIzSVJHZW5lcmF0b3IuY3BwOgorICAgICAgICAoSlNDOjpXYXNtOjpCM0lSR2VuZXJhdG9yOjpy
ZXN0b3JlV2ViQXNzZW1ibHlHbG9iYWxTdGF0ZSk6CisgICAgICAgIChKU0M6Oldhc206OkIzSVJH
ZW5lcmF0b3I6OmFkZEN1cnJlbnRNZW1vcnkpOgorICAgICAgICAoSlNDOjpXYXNtOjpCM0lSR2Vu
ZXJhdG9yOjphZGRDYWxsSW5kaXJlY3QpOgorICAgICAgICAqIHdhc20vV2FzbUJpbmRpbmcuY3Bw
OgorICAgICAgICAoSlNDOjpXYXNtOjp3YXNtVG9XYXNtKToKKyAgICAgICAgKiB3YXNtL1dhc21J
bnN0YW5jZS5oOgorICAgICAgICAoSlNDOjpXYXNtOjpJbnN0YW5jZTo6Y2FjaGVkTWVtb3J5IGNv
bnN0KToKKyAgICAgICAgKEpTQzo6V2FzbTo6SW5zdGFuY2U6OmNhY2hlZE1lbW9yeVNpemUgY29u
c3QpOgorICAgICAgICAoSlNDOjpXYXNtOjpJbnN0YW5jZTo6Y3JlYXRlV2Vha1B0cik6CisgICAg
ICAgIChKU0M6Oldhc206Okluc3RhbmNlOjpzZXRNZW1vcnkpOgorICAgICAgICAoSlNDOjpXYXNt
OjpJbnN0YW5jZTo6dXBkYXRlQ2FjaGVkTWVtb3J5KToKKyAgICAgICAgKEpTQzo6V2FzbTo6SW5z
dGFuY2U6Om9mZnNldE9mQ2FjaGVkTWVtb3J5KToKKyAgICAgICAgKEpTQzo6V2FzbTo6SW5zdGFu
Y2U6Om9mZnNldE9mQ2FjaGVkTWVtb3J5U2l6ZSk6CisgICAgICAgICogd2FzbS9XYXNtTWVtb3J5
LmNwcDoKKyAgICAgICAgKEpTQzo6V2FzbTo6TWVtb3J5Ojpncm93KToKKyAgICAgICAgKEpTQzo6
V2FzbTo6TWVtb3J5OjpyZWdpc3Rlckluc3RhbmNlKToKKyAgICAgICAgKiB3YXNtL1dhc21NZW1v
cnkuaDoKKyAgICAgICAgKiB3YXNtL2pzL0pTVG9XYXNtLmNwcDoKKyAgICAgICAgKEpTQzo6V2Fz
bTo6Y3JlYXRlSlNUb1dhc21XcmFwcGVyKToKKyAgICAgICAgKiB3YXNtL2pzL1dlYkFzc2VtYmx5
TW9kdWxlUmVjb3JkLmNwcDoKKyAgICAgICAgKEpTQzo6V2ViQXNzZW1ibHlNb2R1bGVSZWNvcmQ6
OmV2YWx1YXRlKToKKwogMjAxNy0xMi0xNSAgWXVzdWtlIFN1enVraSAgPHV0YXRhbmUudGVhQGdt
YWlsLmNvbT4KIAogICAgICAgICBVbnJldmlld2VkLCAzMmJpdCBKU0VtcHR5IGlzIG5vdCBudWxs
cHRyICsgQ2VsbFRhZwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2Fz
bUIzSVJHZW5lcmF0b3IuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUIzSVJH
ZW5lcmF0b3IuY3BwCmluZGV4IGEyYjgxM2YzNDM1ZDFjNTFkNWUwN2JiMDBlZjNiMGVmYzZhY2Qx
MzAuLjU0M2VmMDYwOTJlY2EzMWM5ZDZmMTJlNGFjMThkY2QyYWM4ZGYxZTggMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21CM0lSR2VuZXJhdG9yLmNwcAorKysgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQjNJUkdlbmVyYXRvci5jcHAKQEAgLTQ4MCwx
MiArNDgwLDExIEBAIHZvaWQgQjNJUkdlbmVyYXRvcjo6cmVzdG9yZVdlYkFzc2VtYmx5R2xvYmFs
U3RhdGUoUmVzdG9yZUNhY2hlZFN0YWNrTGltaXQgcmVzdG9yCiAKICAgICAgICAgcGF0Y2hwb2lu
dC0+c2V0R2VuZXJhdG9yKFtwaW5uZWRSZWdzXSAoQ0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0IEIz
OjpTdGFja21hcEdlbmVyYXRpb25QYXJhbXMmIHBhcmFtcykgewogICAgICAgICAgICAgR1BSUmVn
IGJhc2VNZW1vcnkgPSBwaW5uZWRSZWdzLT5iYXNlTWVtb3J5UG9pbnRlcjsKLSAgICAgICAgICAg
IGppdC5sb2FkUHRyKENDYWxsSGVscGVyczo6QWRkcmVzcyhwYXJhbXNbMF0uZ3ByKCksIEluc3Rh
bmNlOjpvZmZzZXRPZk1lbW9yeSgpKSwgYmFzZU1lbW9yeSk7CiAgICAgICAgICAgICBjb25zdCBh
dXRvJiBzaXplUmVncyA9IHBpbm5lZFJlZ3MtPnNpemVSZWdpc3RlcnM7CiAgICAgICAgICAgICBB
U1NFUlQoc2l6ZVJlZ3Muc2l6ZSgpID49IDEpOwogICAgICAgICAgICAgQVNTRVJUKCFzaXplUmVn
c1swXS5zaXplT2Zmc2V0KTsgLy8gVGhlIGZvbGxvd2luZyBjb2RlIGFzc3VtZXMgd2Ugc3RhcnQg
YXQgMCwgYW5kIGNhbGN1bGF0ZXMgc3Vic2VxdWVudCBzaXplIHJlZ2lzdGVycyByZWxhdGl2ZSB0
byAwLgotICAgICAgICAgICAgaml0LmxvYWRQdHIoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKGJhc2VN
ZW1vcnksIE1lbW9yeTo6b2Zmc2V0T2ZTaXplKCkpLCBzaXplUmVnc1swXS5zaXplUmVnaXN0ZXIp
OwotICAgICAgICAgICAgaml0LmxvYWRQdHIoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKGJhc2VNZW1v
cnksIE1lbW9yeTo6b2Zmc2V0T2ZNZW1vcnkoKSksIGJhc2VNZW1vcnkpOworICAgICAgICAgICAg
aml0LmxvYWRQdHIoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKHBhcmFtc1swXS5ncHIoKSwgSW5zdGFu
Y2U6Om9mZnNldE9mQ2FjaGVkTWVtb3J5U2l6ZSgpKSwgc2l6ZVJlZ3NbMF0uc2l6ZVJlZ2lzdGVy
KTsKKyAgICAgICAgICAgIGppdC5sb2FkUHRyKENDYWxsSGVscGVyczo6QWRkcmVzcyhwYXJhbXNb
MF0uZ3ByKCksIEluc3RhbmNlOjpvZmZzZXRPZkNhY2hlZE1lbW9yeSgpKSwgYmFzZU1lbW9yeSk7
CiAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAxOyBpIDwgc2l6ZVJlZ3Muc2l6ZSgpOyAr
K2kpCiAgICAgICAgICAgICAgICAgaml0LmFkZDY0KENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMy
KC1zaXplUmVnc1tpXS5zaXplT2Zmc2V0KSwgc2l6ZVJlZ3NbMF0uc2l6ZVJlZ2lzdGVyLCBzaXpl
UmVnc1tpXS5zaXplUmVnaXN0ZXIpOwogICAgICAgICB9KTsKQEAgLTU5OCwxMSArNTk3LDkgQEAg
YXV0byBCM0lSR2VuZXJhdG9yOjphZGRHcm93TWVtb3J5KEV4cHJlc3Npb25UeXBlIGRlbHRhLCBF
eHByZXNzaW9uVHlwZSYgcmVzdWx0KQogCiBhdXRvIEIzSVJHZW5lcmF0b3I6OmFkZEN1cnJlbnRN
ZW1vcnkoRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAogewotICAgIFZh
bHVlKiBtZW1vcnlPYmplY3QgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PE1lbW9yeVZhbHVl
PihtX3Byb2MsIExvYWQsIHBvaW50ZXJUeXBlKCksIG9yaWdpbigpLCBpbnN0YW5jZVZhbHVlKCks
IHNhZmVDYXN0PGludDMyX3Q+KEluc3RhbmNlOjpvZmZzZXRPZk1lbW9yeSgpKSk7Ci0KICAgICBz
dGF0aWNfYXNzZXJ0KHNpemVvZihkZWNsdHlwZShzdGF0aWNfY2FzdDxNZW1vcnkqPihudWxscHRy
KS0+c2l6ZSgpKSkgPT0gc2l6ZW9mKHVpbnQ2NF90KSwgImNvZGVnZW4gcmVsaWVzIG9uIHRoaXMg
c2l6ZSIpOwotICAgIFZhbHVlKiBzaXplID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxNZW1v
cnlWYWx1ZT4obV9wcm9jLCBMb2FkLCBJbnQ2NCwgb3JpZ2luKCksIG1lbW9yeU9iamVjdCwgc2Fm
ZUNhc3Q8aW50MzJfdD4oTWVtb3J5OjpvZmZzZXRPZlNpemUoKSkpOwotICAgIAorICAgIFZhbHVl
KiBzaXplID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxNZW1vcnlWYWx1ZT4obV9wcm9jLCBM
b2FkLCBJbnQ2NCwgb3JpZ2luKCksIGluc3RhbmNlVmFsdWUoKSwgc2FmZUNhc3Q8aW50MzJfdD4o
SW5zdGFuY2U6Om9mZnNldE9mQ2FjaGVkTWVtb3J5U2l6ZSgpKSk7CisKICAgICBjb25zdGV4cHIg
dWludDMyX3Qgc2hpZnRWYWx1ZSA9IDE2OwogICAgIHN0YXRpY19hc3NlcnQoUGFnZUNvdW50Ojpw
YWdlU2l6ZSA9PSAxdWxsIDw8IHNoaWZ0VmFsdWUsICJUaGlzIG11c3QgaG9sZCBmb3IgdGhlIGNv
ZGUgYmVsb3cgdG8gYmUgY29ycmVjdC4iKTsKICAgICBWYWx1ZSogbnVtUGFnZXMgPSBtX2N1cnJl
bnRCbG9jay0+YXBwZW5kTmV3PFZhbHVlPihtX3Byb2MsIFpTaHIsIG9yaWdpbigpLApAQCAtMTI3
OSwxMyArMTI3NiwxNCBAQCBhdXRvIEIzSVJHZW5lcmF0b3I6OmFkZENhbGxJbmRpcmVjdChjb25z
dCBTaWduYXR1cmUmIHNpZ25hdHVyZSwgVmVjdG9yPEV4cHJlc3NpbwogICAgICAgICAgICAgaml0
LmxvYWRQdHIoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKG9sZENvbnRleHRJbnN0YW5jZSwgSW5zdGFu
Y2U6Om9mZnNldE9mQ2FjaGVkU3RhY2tMaW1pdCgpKSwgYmFzZU1lbW9yeSk7CiAgICAgICAgICAg
ICBqaXQuc3RvcmVQdHIoYmFzZU1lbW9yeSwgQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKG5ld0NvbnRl
eHRJbnN0YW5jZSwgSW5zdGFuY2U6Om9mZnNldE9mQ2FjaGVkU3RhY2tMaW1pdCgpKSk7CiAgICAg
ICAgICAgICBqaXQuc3RvcmVXYXNtQ29udGV4dEluc3RhbmNlKG5ld0NvbnRleHRJbnN0YW5jZSk7
Ci0gICAgICAgICAgICBqaXQubG9hZFB0cihDQ2FsbEhlbHBlcnM6OkFkZHJlc3MobmV3Q29udGV4
dEluc3RhbmNlLCBJbnN0YW5jZTo6b2Zmc2V0T2ZNZW1vcnkoKSksIGJhc2VNZW1vcnkpOyAvLyBN
ZW1vcnkqLgotICAgICAgICAgICAgQVNTRVJUKHNpemVSZWdzLnNpemUoKSA9PSAxKTsKICAgICAg
ICAgICAgIEFTU0VSVChzaXplUmVnc1swXS5zaXplUmVnaXN0ZXIgIT0gYmFzZU1lbW9yeSk7Cisg
ICAgICAgICAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIHN1cHBvcnQgbW9yZSB0aGFuIG9uZSBtZW1v
cnkgc2l6ZSByZWdpc3RlcgorICAgICAgICAgICAgLy8gICBzZWU6IGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjI5NTIKKyAgICAgICAgICAgIEFTU0VSVChzaXplUmVn
cy5zaXplKCkgPT0gMSk7CiAgICAgICAgICAgICBBU1NFUlQoc2l6ZVJlZ3NbMF0uc2l6ZVJlZ2lz
dGVyICE9IG5ld0NvbnRleHRJbnN0YW5jZSk7CiAgICAgICAgICAgICBBU1NFUlQoIXNpemVSZWdz
WzBdLnNpemVPZmZzZXQpOwotICAgICAgICAgICAgaml0LmxvYWRQdHIoQ0NhbGxIZWxwZXJzOjpB
ZGRyZXNzKGJhc2VNZW1vcnksIE1lbW9yeTo6b2Zmc2V0T2ZTaXplKCkpLCBzaXplUmVnc1swXS5z
aXplUmVnaXN0ZXIpOyAvLyBNZW1vcnkgc2l6ZS4KLSAgICAgICAgICAgIGppdC5sb2FkUHRyKEND
YWxsSGVscGVyczo6QWRkcmVzcyhiYXNlTWVtb3J5LCBNZW1vcnk6Om9mZnNldE9mTWVtb3J5KCkp
LCBiYXNlTWVtb3J5KTsgLy8gTWVtb3J5Ojp2b2lkKi4KKyAgICAgICAgICAgIGppdC5sb2FkUHRy
KENDYWxsSGVscGVyczo6QWRkcmVzcyhuZXdDb250ZXh0SW5zdGFuY2UsIEluc3RhbmNlOjpvZmZz
ZXRPZkNhY2hlZE1lbW9yeVNpemUoKSksIHNpemVSZWdzWzBdLnNpemVSZWdpc3Rlcik7IC8vIE1l
bW9yeSBzaXplLgorICAgICAgICAgICAgaml0LmxvYWRQdHIoQ0NhbGxIZWxwZXJzOjpBZGRyZXNz
KG5ld0NvbnRleHRJbnN0YW5jZSwgSW5zdGFuY2U6Om9mZnNldE9mQ2FjaGVkTWVtb3J5KCkpLCBi
YXNlTWVtb3J5KTsgLy8gTWVtb3J5Ojp2b2lkKi4KICAgICAgICAgfSk7CiAgICAgICAgIGRvQ29u
dGV4dFN3aXRjaC0+YXBwZW5kTmV3Q29udHJvbFZhbHVlKG1fcHJvYywgSnVtcCwgb3JpZ2luKCks
IGNvbnRpbnVhdGlvbik7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNt
L1dhc21CaW5kaW5nLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21CaW5kaW5n
LmNwcAppbmRleCA2MmVhM2FmMGMxNzZkMTg0ZTNlZjVjYjZkZGRkMGI1OTZmZTA3ZWI2Li4wODll
ZTE2NzExOGQzZmI4MmFkZmI1M2NkOGRhOWRkODExMzEzYzgyIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQmluZGluZy5jcHAKKysrIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3dhc20vV2FzbUJpbmRpbmcuY3BwCkBAIC02NCwxMCArNjQsOSBAQCBFeHBlY3RlZDxN
YWNyb0Fzc2VtYmxlckNvZGVSZWYsIEJpbmRpbmdGYWlsdXJlPiB3YXNtVG9XYXNtKHVuc2lnbmVk
IGltcG9ydEluZGV4KQogCiAgICAgLy8gRklYTUUgdGhlIGZvbGxvd2luZyBjb2RlIGFzc3VtZXMg
dGhhdCBhbGwgV2FzbTo6SW5zdGFuY2UgaGF2ZSB0aGUgc2FtZSBwaW5uZWQgcmVnaXN0ZXJzLiBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTYyOTUyCiAgICAgLy8gU2V0
IHVwIHRoZSBjYWxsZWUncyBiYXNlTWVtb3J5IHJlZ2lzdGVyIGFzIHdlbGwgYXMgdGhlIG1lbW9y
eSBzaXplIHJlZ2lzdGVycy4KLSAgICBqaXQubG9hZFB0cihKSVQ6OkFkZHJlc3MoYmFzZU1lbW9y
eSwgSW5zdGFuY2U6Om9mZnNldE9mTWVtb3J5KCkpLCBiYXNlTWVtb3J5KTsgLy8gV2FzbTo6TWVt
b3J5Ki4KICAgICBBU1NFUlQoIXNpemVSZWdzWzBdLnNpemVPZmZzZXQpOyAvLyBUaGUgZm9sbG93
aW5nIGNvZGUgYXNzdW1lcyB3ZSBzdGFydCBhdCAwLCBhbmQgY2FsY3VsYXRlcyBzdWJzZXF1ZW50
IHNpemUgcmVnaXN0ZXJzIHJlbGF0aXZlIHRvIDAuCi0gICAgaml0LmxvYWRQdHIoSklUOjpBZGRy
ZXNzKGJhc2VNZW1vcnksIFdhc206Ok1lbW9yeTo6b2Zmc2V0T2ZTaXplKCkpLCBzaXplUmVnc1sw
XS5zaXplUmVnaXN0ZXIpOyAvLyBNZW1vcnkgc2l6ZS4KLSAgICBqaXQubG9hZFB0cihKSVQ6OkFk
ZHJlc3MoYmFzZU1lbW9yeSwgV2FzbTo6TWVtb3J5OjpvZmZzZXRPZk1lbW9yeSgpKSwgYmFzZU1l
bW9yeSk7IC8vIFdhc206Ok1lbW9yeTo6dm9pZCouCisgICAgaml0LmxvYWRQdHIoSklUOjpBZGRy
ZXNzKGJhc2VNZW1vcnksIFdhc206Okluc3RhbmNlOjpvZmZzZXRPZkNhY2hlZE1lbW9yeVNpemUo
KSksIHNpemVSZWdzWzBdLnNpemVSZWdpc3Rlcik7IC8vIE1lbW9yeSBzaXplLgorICAgIGppdC5s
b2FkUHRyKEpJVDo6QWRkcmVzcyhiYXNlTWVtb3J5LCBXYXNtOjpJbnN0YW5jZTo6b2Zmc2V0T2ZD
YWNoZWRNZW1vcnkoKSksIGJhc2VNZW1vcnkpOyAvLyBXYXNtOjpNZW1vcnk6OnZvaWQqLgogICAg
IGZvciAodW5zaWduZWQgaSA9IDE7IGkgPCBzaXplUmVncy5zaXplKCk7ICsraSkgewogICAgICAg
ICBBU1NFUlQoc2l6ZVJlZ3NbaV0uc2l6ZVJlZ2lzdGVyICE9IGJhc2VNZW1vcnkpOwogICAgICAg
ICBBU1NFUlQoc2l6ZVJlZ3NbaV0uc2l6ZVJlZ2lzdGVyICE9IHNjcmF0Y2gpOwpkaWZmIC0tZ2l0
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUluc3RhbmNlLmggYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvd2FzbS9XYXNtSW5zdGFuY2UuaAppbmRleCAyYzA4MDAwM2Q1MmNhNjk4ZGE3
MmZjZmY2NzQ0NDA0NmRiNDUzNTU2Li41ZjEyY2JiZjY0MjJjMDhiOGRkZjgxMDE2ZDZjNTA5OWVm
ZDMxMmNkIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtSW5zdGFu
Y2UuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtSW5zdGFuY2UuaApAQCAt
NjUsOCArNjUsMjQgQEAgcHVibGljOgogICAgIENvZGVCbG9jayogY29kZUJsb2NrKCkgeyByZXR1
cm4gbV9jb2RlQmxvY2suZ2V0KCk7IH0KICAgICBNZW1vcnkqIG1lbW9yeSgpIHsgcmV0dXJuIG1f
bWVtb3J5LmdldCgpOyB9CiAgICAgVGFibGUqIHRhYmxlKCkgeyByZXR1cm4gbV90YWJsZS5nZXQo
KTsgfQotICAgIAotICAgIHZvaWQgc2V0TWVtb3J5KFJlZjxNZW1vcnk+JiYgbWVtb3J5KSB7IG1f
bWVtb3J5ID0gV1RGTW92ZShtZW1vcnkpOyB9CisKKyAgICB2b2lkKiBjYWNoZWRNZW1vcnkoKSBj
b25zdCB7IHJldHVybiBtX2NhY2hlZE1lbW9yeTsgfQorICAgIHNpemVfdCBjYWNoZWRNZW1vcnlT
aXplKCkgY29uc3QgeyByZXR1cm4gbV9jYWNoZWRNZW1vcnlTaXplOyB9CisKKyAgICBXZWFrUHRy
PEluc3RhbmNlPiBjcmVhdGVXZWFrUHRyKCkgeyByZXR1cm4gbV93ZWFrUHRyRmFjdG9yeS5jcmVh
dGVXZWFrUHRyKCp0aGlzKTsgfQorICAgIHZvaWQgc2V0TWVtb3J5KFJlZjxNZW1vcnk+JiYgbWVt
b3J5KQorICAgIHsKKyAgICAgICAgbV9tZW1vcnkgPSBXVEZNb3ZlKG1lbW9yeSk7CisgICAgICAg
IG1fbWVtb3J5LmdldCgpLT5yZWdpc3Rlckluc3RhbmNlKHRoaXMpOworICAgICAgICB1cGRhdGVD
YWNoZWRNZW1vcnkoKTsKKyAgICB9CisgICAgdm9pZCB1cGRhdGVDYWNoZWRNZW1vcnkoKQorICAg
IHsKKyAgICAgICAgaWYgKG1fbWVtb3J5ICE9IG51bGxwdHIpIHsKKyAgICAgICAgICAgIG1fY2Fj
aGVkTWVtb3J5ID0gbWVtb3J5KCktPm1lbW9yeSgpOworICAgICAgICAgICAgbV9jYWNoZWRNZW1v
cnlTaXplID0gbWVtb3J5KCktPnNpemUoKTsKKyAgICAgICAgfQorICAgIH0KICAgICB2b2lkIHNl
dFRhYmxlKFJlZjxUYWJsZT4mJiB0YWJsZSkgeyBtX3RhYmxlID0gV1RGTW92ZSh0YWJsZSk7IH0K
IAogICAgIGludDMyX3QgbG9hZEkzMkdsb2JhbCh1bnNpZ25lZCBpKSBjb25zdCB7IHJldHVybiBt
X2dsb2JhbHMuZ2V0KClbaV07IH0KQEAgLTc4LDYgKzk0LDggQEAgcHVibGljOgogICAgIHN0YXRp
YyBwdHJkaWZmX3Qgb2Zmc2V0T2ZNZW1vcnkoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoSW5z
dGFuY2UsIG1fbWVtb3J5KTsgfQogICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZHbG9iYWxz
KCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKEluc3RhbmNlLCBtX2dsb2JhbHMpOyB9CiAgICAg
c3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZlRhYmxlKCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9G
KEluc3RhbmNlLCBtX3RhYmxlKTsgfQorICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZDYWNo
ZWRNZW1vcnkoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoSW5zdGFuY2UsIG1fY2FjaGVkTWVt
b3J5KTsgfQorICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZDYWNoZWRNZW1vcnlTaXplKCkg
eyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKEluc3RhbmNlLCBtX2NhY2hlZE1lbW9yeVNpemUpOyB9
CiAgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZlBvaW50ZXJUb1RvcEVudHJ5RnJhbWUoKSB7
IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoSW5zdGFuY2UsIG1fcG9pbnRlclRvVG9wRW50cnlGcmFt
ZSk7IH0KIAogICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZQb2ludGVyVG9BY3R1YWxTdGFj
a0xpbWl0KCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKEluc3RhbmNlLCBtX3BvaW50ZXJUb0Fj
dHVhbFN0YWNrTGltaXQpOyB9CkBAIC0xMjYsOSArMTQ0LDEwIEBAIHByaXZhdGU6CiAgICAgewog
ICAgICAgICByZXR1cm4gKG9mZnNldE9mVGFpbCgpICsgc2l6ZW9mKEltcG9ydEZ1bmN0aW9uSW5m
bykgKiBudW1JbXBvcnRGdW5jdGlvbnMpLnVuc2FmZUdldCgpOwogICAgIH0KLQogICAgIHZvaWQq
IG1fb3duZXIgeyBudWxscHRyIH07IC8vIEluIGEgSlMgZW1iZWRkaW5nLCB0aGlzIGlzIGEgSlNX
ZWJBc3NlbWJseUluc3RhbmNlKi4KICAgICBDb250ZXh0KiBtX2NvbnRleHQgeyBudWxscHRyIH07
CisgICAgdm9pZCogbV9jYWNoZWRNZW1vcnkgeyBudWxscHRyIH07CisgICAgc2l6ZV90IG1fY2Fj
aGVkTWVtb3J5U2l6ZSB7IDAgfTsKICAgICBSZWY8TW9kdWxlPiBtX21vZHVsZTsKICAgICBSZWZQ
dHI8Q29kZUJsb2NrPiBtX2NvZGVCbG9jazsKICAgICBSZWZQdHI8TWVtb3J5PiBtX21lbW9yeTsK
QEAgLTEzOCw2ICsxNTcsNyBAQCBwcml2YXRlOgogICAgIHZvaWQqKiBtX3BvaW50ZXJUb0FjdHVh
bFN0YWNrTGltaXQgeyBudWxscHRyIH07CiAgICAgdm9pZCogbV9jYWNoZWRTdGFja0xpbWl0IHsg
Yml0d2lzZV9jYXN0PHZvaWQqPihzdGQ6Om51bWVyaWNfbGltaXRzPHVpbnRwdHJfdD46Om1heCgp
KSB9OwogICAgIFN0b3JlVG9wQ2FsbEZyYW1lQ2FsbGJhY2sgbV9zdG9yZVRvcENhbGxGcmFtZTsK
KyAgICBXZWFrUHRyRmFjdG9yeTxJbnN0YW5jZT4gbV93ZWFrUHRyRmFjdG9yeTsKICAgICB1bnNp
Z25lZCBtX251bUltcG9ydEZ1bmN0aW9ucyB7IDAgfTsKIH07CiAKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21NZW1vcnkuY3BwIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL3dhc20vV2FzbU1lbW9yeS5jcHAKaW5kZXggMWMxY2Y1OWYyZThlYmNlZjA3YWY1MmFhYjk2
MmE5ZWNhYzBkODM0NC4uOTFiNjFmYmY5ODRmOWYxNzU1NTY2MjY1Y2YzOTMzNTFkOWFiN2ZkZSAx
MDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU1lbW9yeS5jcHAKKysr
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU1lbW9yeS5jcHAKQEAgLTI1LDYgKzI1
LDcgQEAKIAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIldhc21NZW1vcnkuaCIKKyNp
bmNsdWRlICJXYXNtSW5zdGFuY2UuaCIKIAogI2lmIEVOQUJMRShXRUJBU1NFTUJMWSkKIApAQCAt
Mzk0LDYgKzM5NSwxMSBAQCBFeHBlY3RlZDxQYWdlQ291bnQsIE1lbW9yeTo6R3Jvd0ZhaWxSZWFz
b24+IE1lbW9yeTo6Z3JvdyhQYWdlQ291bnQgZGVsdGEpCiAKICAgICBhdXRvIHN1Y2Nlc3MgPSBb
Jl0gKCkgewogICAgICAgICBtX2dyb3dTdWNjZXNzQ2FsbGJhY2soR3Jvd1N1Y2Nlc3NUYWcsIG9s
ZFBhZ2VDb3VudCwgbmV3UGFnZUNvdW50KTsKKyAgICAgICAgLy8gVXBkYXRlIGNhY2hlIGZvciBp
bnN0YW5jZQorICAgICAgICBmb3IgKGF1dG8mIGluc3RhbmNlIDogbV9pbnN0YW5jZXMpIHsKKyAg
ICAgICAgICAgIGlmIChpbnN0YW5jZS5nZXQoKSAhPSBudWxscHRyKQorICAgICAgICAgICAgICAg
IGluc3RhbmNlLmdldCgpLT51cGRhdGVDYWNoZWRNZW1vcnkoKTsKKyAgICAgICAgfQogICAgICAg
ICByZXR1cm4gb2xkUGFnZUNvdW50OwogICAgIH07CiAKQEAgLTQ1NCw2ICs0NjAsMTEgQEAgRXhw
ZWN0ZWQ8UGFnZUNvdW50LCBNZW1vcnk6Okdyb3dGYWlsUmVhc29uPiBNZW1vcnk6Omdyb3coUGFn
ZUNvdW50IGRlbHRhKQogICAgIHJldHVybiBvbGRQYWdlQ291bnQ7CiB9CiAKK3ZvaWQgTWVtb3J5
OjpyZWdpc3Rlckluc3RhbmNlKEluc3RhbmNlKiBpbnN0YW5jZSkKK3sKKyAgICBtX2luc3RhbmNl
cy5hcHBlbmQoaW5zdGFuY2UtPmNyZWF0ZVdlYWtQdHIoKSk7Cit9CisKIHZvaWQgTWVtb3J5Ojpk
dW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0CiB7CiAgICAgb3V0LnByaW50KCJNZW1vcnkgYXQg
IiwgUmF3UG9pbnRlcihtX21lbW9yeSksICIsIHNpemUgIiwgbV9zaXplLCAiQiBjYXBhY2l0eSAi
LCBtX21hcHBlZENhcGFjaXR5LCAiQiwgaW5pdGlhbCAiLCBtX2luaXRpYWwsICIgbWF4aW11bSAi
LCBtX21heGltdW0sICIgbW9kZSAiLCBtYWtlU3RyaW5nKG1fbW9kZSkpOwpkaWZmIC0tZ2l0IGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU1lbW9yeS5oIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3dhc20vV2FzbU1lbW9yeS5oCmluZGV4IGQ4NmRlMzI0NDM0M2VlY2Q1OTU2NDljNzE1
ODlmNWJhOTAzM2IyNWEuLmMzNjU4MGY3OWVmNzMzZDg2MThkY2ZkYjNmNjcyMTczODVmMmYyNDEg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21NZW1vcnkuaAorKysg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTWVtb3J5LmgKQEAgLTM0LDYgKzM0LDgg
QEAKICNpbmNsdWRlIDx3dGYvRnVuY3Rpb24uaD4KICNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5o
PgogI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisjaW5j
bHVkZSA8d3RmL1dlYWtQdHIuaD4KIAogbmFtZXNwYWNlIFdURiB7CiBjbGFzcyBQcmludFN0cmVh
bTsKQEAgLTQzLDYgKzQ1LDggQEAgbmFtZXNwYWNlIEpTQyB7CiAKIG5hbWVzcGFjZSBXYXNtIHsK
IAorY2xhc3MgSW5zdGFuY2U7CisKIGNsYXNzIE1lbW9yeSA6IHB1YmxpYyBSZWZDb3VudGVkPE1l
bW9yeT4gewogICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKE1lbW9yeSk7CiAgICAgV1RGX01BS0Vf
RkFTVF9BTExPQ0FURUQ7CkBAIC04MCw2ICs4NCw3IEBAIHB1YmxpYzoKICAgICAgICAgT3V0T2ZN
ZW1vcnksCiAgICAgfTsKICAgICBFeHBlY3RlZDxQYWdlQ291bnQsIEdyb3dGYWlsUmVhc29uPiBn
cm93KFBhZ2VDb3VudCk7CisgICAgdm9pZCByZWdpc3Rlckluc3RhbmNlKEluc3RhbmNlKik7CiAK
ICAgICB2b2lkIGNoZWNrKCkgeyAgQVNTRVJUKCFkZWxldGlvbkhhc0JlZ3VuKCkpOyB9CiAKQEAg
LTkxLDcgKzk2LDYgQEAgcHJpdmF0ZToKICAgICBNZW1vcnkodm9pZCogbWVtb3J5LCBQYWdlQ291
bnQgaW5pdGlhbCwgUGFnZUNvdW50IG1heGltdW0sIHNpemVfdCBtYXBwZWRDYXBhY2l0eSwgTWVt
b3J5TW9kZSwgV1RGOjpGdW5jdGlvbjx2b2lkKE5vdGlmeVByZXNzdXJlKT4mJiBub3RpZnlNZW1v
cnlQcmVzc3VyZSwgV1RGOjpGdW5jdGlvbjx2b2lkKFN5bmNUcnlUb1JlY2xhaW0pPiYmIHN5bmNU
cnlUb1JlY2xhaW1NZW1vcnksIFdURjo6RnVuY3Rpb248dm9pZChHcm93U3VjY2VzcywgUGFnZUNv
dW50LCBQYWdlQ291bnQpPiYmIGdyb3dTdWNjZXNzQ2FsbGJhY2spOwogICAgIE1lbW9yeShQYWdl
Q291bnQgaW5pdGlhbCwgUGFnZUNvdW50IG1heGltdW0sIFdURjo6RnVuY3Rpb248dm9pZChOb3Rp
ZnlQcmVzc3VyZSk+JiYgbm90aWZ5TWVtb3J5UHJlc3N1cmUsIFdURjo6RnVuY3Rpb248dm9pZChT
eW5jVHJ5VG9SZWNsYWltKT4mJiBzeW5jVHJ5VG9SZWNsYWltTWVtb3J5LCBXVEY6OkZ1bmN0aW9u
PHZvaWQoR3Jvd1N1Y2Nlc3MsIFBhZ2VDb3VudCwgUGFnZUNvdW50KT4mJiBncm93U3VjY2Vzc0Nh
bGxiYWNrKTsKIAotICAgIC8vIEZJWE1FOiB3ZSBjYWNoZSB0aGVzZSBvbiB0aGUgaW5zdGFuY2Vz
IHRvIGF2b2lkIGEgbG9hZCBvbiBpbnN0YW5jZS0+aW5zdGFuY2UgY2FsbHMuIFRoaXMgd2lsbCBy
ZXF1aXJlIHVwZGF0aW5nIGFsbCB0aGUgaW5zdGFuY2VzIHdoZW4gZ3JvdyBpcyBjYWxsZWQuIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzczMDUKICAgICB2b2lkKiBt
X21lbW9yeSB7IG51bGxwdHIgfTsKICAgICBzaXplX3QgbV9zaXplIHsgMCB9OwogICAgIFBhZ2VD
b3VudCBtX2luaXRpYWw7CkBAIC0xMDEsNiArMTA1LDcgQEAgcHJpdmF0ZToKICAgICBXVEY6OkZ1
bmN0aW9uPHZvaWQoTm90aWZ5UHJlc3N1cmUpPiBtX25vdGlmeU1lbW9yeVByZXNzdXJlOwogICAg
IFdURjo6RnVuY3Rpb248dm9pZChTeW5jVHJ5VG9SZWNsYWltKT4gbV9zeW5jVHJ5VG9SZWNsYWlt
TWVtb3J5OwogICAgIFdURjo6RnVuY3Rpb248dm9pZChHcm93U3VjY2VzcywgUGFnZUNvdW50LCBQ
YWdlQ291bnQpPiBtX2dyb3dTdWNjZXNzQ2FsbGJhY2s7CisgICAgVmVjdG9yPFdlYWtQdHI8SW5z
dGFuY2U+PiBtX2luc3RhbmNlczsKIH07CiAKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpXYXNtCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1RvV2FzbS5jcHAgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1RvV2FzbS5jcHAKaW5kZXggNTZlNzgwMTky
ZDUwYjI0MzY5ZjJjNGM3MjgxODE1OTkzZDgwYmNjMy4uMzM3ZmQyYTQ5YTFhMTIzNjE5MjQzMTg4
MmQzNmQ5ODg3N2E2MWVkYSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20v
anMvSlNUb1dhc20uY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTVG9X
YXNtLmNwcApAQCAtMTczLDIzICsxNzMsMTkgQEAgc3RkOjp1bmlxdWVfcHRyPEludGVybmFsRnVu
Y3Rpb24+IGNyZWF0ZUpTVG9XYXNtV3JhcHBlcihDb21waWxhdGlvbkNvbnRleHQmIGNvbXAKICAg
ICBpZiAoISFpbmZvLm1lbW9yeSkgewogICAgICAgICBHUFJSZWcgYmFzZU1lbW9yeSA9IHBpbm5l
ZFJlZ3MuYmFzZU1lbW9yeVBvaW50ZXI7CiAKLSAgICAgICAgaWYgKCFDb250ZXh0Ojp1c2VGYXN0
VExTKCkpCi0gICAgICAgICAgICBqaXQubG9hZFB0cihDQ2FsbEhlbHBlcnM6OkFkZHJlc3Mod2Fz
bUNvbnRleHRJbnN0YW5jZUdQUiwgSW5zdGFuY2U6Om9mZnNldE9mTWVtb3J5KCkpLCBiYXNlTWVt
b3J5KTsKLSAgICAgICAgZWxzZSB7CisgICAgICAgIGlmIChDb250ZXh0Ojp1c2VGYXN0VExTKCkp
CiAgICAgICAgICAgICBqaXQubG9hZFdhc21Db250ZXh0SW5zdGFuY2UoYmFzZU1lbW9yeSk7Ci0g
ICAgICAgICAgICBqaXQubG9hZFB0cihDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoYmFzZU1lbW9yeSwg
SW5zdGFuY2U6Om9mZnNldE9mTWVtb3J5KCkpLCBiYXNlTWVtb3J5KTsKLSAgICAgICAgfQogCiAg
ICAgICAgIGlmIChtb2RlICE9IE1lbW9yeU1vZGU6OlNpZ25hbGluZykgewogICAgICAgICAgICAg
Y29uc3QgYXV0byYgc2l6ZVJlZ3MgPSBwaW5uZWRSZWdzLnNpemVSZWdpc3RlcnM7CiAgICAgICAg
ICAgICBBU1NFUlQoc2l6ZVJlZ3Muc2l6ZSgpID49IDEpOwogICAgICAgICAgICAgQVNTRVJUKCFz
aXplUmVnc1swXS5zaXplT2Zmc2V0KTsgLy8gVGhlIGZvbGxvd2luZyBjb2RlIGFzc3VtZXMgd2Ug
c3RhcnQgYXQgMCwgYW5kIGNhbGN1bGF0ZXMgc3Vic2VxdWVudCBzaXplIHJlZ2lzdGVycyByZWxh
dGl2ZSB0byAwLgotICAgICAgICAgICAgaml0LmxvYWRQdHIoQ0NhbGxIZWxwZXJzOjpBZGRyZXNz
KGJhc2VNZW1vcnksIFdhc206Ok1lbW9yeTo6b2Zmc2V0T2ZTaXplKCkpLCBzaXplUmVnc1swXS5z
aXplUmVnaXN0ZXIpOworICAgICAgICAgICAgaml0LmxvYWRQdHIoQ0NhbGxIZWxwZXJzOjpBZGRy
ZXNzKENvbnRleHQ6OnVzZUZhc3RUTFMoKSA/IGJhc2VNZW1vcnkgOiB3YXNtQ29udGV4dEluc3Rh
bmNlR1BSLCBXYXNtOjpJbnN0YW5jZTo6b2Zmc2V0T2ZDYWNoZWRNZW1vcnlTaXplKCkpLCBzaXpl
UmVnc1swXS5zaXplUmVnaXN0ZXIpOwogICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMTsg
aSA8IHNpemVSZWdzLnNpemUoKTsgKytpKQogICAgICAgICAgICAgICAgIGppdC5hZGQ2NChDQ2Fs
bEhlbHBlcnM6OlRydXN0ZWRJbW0zMigtc2l6ZVJlZ3NbaV0uc2l6ZU9mZnNldCksIHNpemVSZWdz
WzBdLnNpemVSZWdpc3Rlciwgc2l6ZVJlZ3NbaV0uc2l6ZVJlZ2lzdGVyKTsKICAgICAgICAgfQog
Ci0gICAgICAgIGppdC5sb2FkUHRyKENDYWxsSGVscGVyczo6QWRkcmVzcyhiYXNlTWVtb3J5LCBX
YXNtOjpNZW1vcnk6Om9mZnNldE9mTWVtb3J5KCkpLCBiYXNlTWVtb3J5KTsKKyAgICAgICAgaml0
LmxvYWRQdHIoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKENvbnRleHQ6OnVzZUZhc3RUTFMoKSA/IGJh
c2VNZW1vcnkgOiB3YXNtQ29udGV4dEluc3RhbmNlR1BSLCBXYXNtOjpJbnN0YW5jZTo6b2Zmc2V0
T2ZDYWNoZWRNZW1vcnkoKSksIGJhc2VNZW1vcnkpOwogICAgIH0KIAogICAgIENDYWxsSGVscGVy
czo6Q2FsbCBjYWxsID0gaml0LnRocmVhZFNhZmVQYXRjaGFibGVOZWFyQ2FsbCgpOwpkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlNb2R1bGVSZWNv
cmQuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlNb2R1bGVS
ZWNvcmQuY3BwCmluZGV4IGVmMGM4YzVhNGI2NWRkMjUwMmFiODA2MjljNGM1NGQ0MGFmYTRkNzYu
LmQ0ZjAxNjI5ZDljZjI5ZTQ5OTk4NGQzYWRlZTdlM2RmNWNiYmZlYzYgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5TW9kdWxlUmVjb3JkLmNwcAor
KysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseU1vZHVsZVJlY29y
ZC5jcHAKQEAgLTIyMyw4ICsyMjMsNyBAQCBKU1ZhbHVlIFdlYkFzc2VtYmx5TW9kdWxlUmVjb3Jk
OjpldmFsdWF0ZShFeGVjU3RhdGUqIGV4ZWMpCiAgICAgSlNXZWJBc3NlbWJseVRhYmxlKiB0YWJs
ZSA9IG1faW5zdGFuY2UtPnRhYmxlKCk7CiAKICAgICBjb25zdCBWZWN0b3I8V2FzbTo6U2VnbWVu
dDo6UHRyPiYgZGF0YSA9IG1vZHVsZUluZm9ybWF0aW9uLmRhdGE7Ci0gICAgSlNXZWJBc3NlbWJs
eU1lbW9yeSoganNNZW1vcnkgPSBtX2luc3RhbmNlLT5tZW1vcnkoKTsKLQorICAgIAogICAgIHN0
ZDo6b3B0aW9uYWw8SlNWYWx1ZT4gZXhjZXB0aW9uOwogCiAgICAgYXV0byBmb3JFYWNoRWxlbWVu
dCA9IFsmXSAoYXV0byBmbikgewpAQCAtMjUwLDggKzI0OSw4IEBAIEpTVmFsdWUgV2ViQXNzZW1i
bHlNb2R1bGVSZWNvcmQ6OmV2YWx1YXRlKEV4ZWNTdGF0ZSogZXhlYykKICAgICB9OwogCiAgICAg
YXV0byBmb3JFYWNoU2VnbWVudCA9IFsmXSAoYXV0byBmbikgewotICAgICAgICB1aW50OF90KiBt
ZW1vcnkgPSByZWludGVycHJldF9jYXN0PHVpbnQ4X3QqPihqc01lbW9yeS0+bWVtb3J5KCkubWVt
b3J5KCkpOwotICAgICAgICB1aW50NjRfdCBzaXplSW5CeXRlcyA9IGpzTWVtb3J5LT5tZW1vcnko
KS5zaXplKCk7CisgICAgICAgIHVpbnQ4X3QqIG1lbW9yeSA9IHJlaW50ZXJwcmV0X2Nhc3Q8dWlu
dDhfdCo+KG1faW5zdGFuY2UtPmluc3RhbmNlKCkuY2FjaGVkTWVtb3J5KCkpOworICAgICAgICB1
aW50NjRfdCBzaXplSW5CeXRlcyA9IG1faW5zdGFuY2UtPmluc3RhbmNlKCkuY2FjaGVkTWVtb3J5
U2l6ZSgpOwogCiAgICAgICAgIGZvciAoY29uc3QgV2FzbTo6U2VnbWVudDo6UHRyJiBzZWdtZW50
IDogZGF0YSkgewogICAgICAgICAgICAgdWludDMyX3Qgb2Zmc2V0ID0gc2VnbWVudC0+b2Zmc2V0
LmlzR2xvYmFsSW1wb3J0KCkKZGlmZiAtLWdpdCBhL0pTVGVzdHMvQ2hhbmdlTG9nIGIvSlNUZXN0
cy9DaGFuZ2VMb2cKaW5kZXggMWIwMGE5OTA2YmE3MTU2NWEzZDA5MTg5MTljYzI0ZjI1MmEyMTI2
ZS4uYmRjYWFmYTZhMWYxOTNkYzE3MWFjNzE5ZTdmNjMxZGExMGQwYWU3MiAxMDA2NDQKLS0tIGEv
SlNUZXN0cy9DaGFuZ2VMb2cKKysrIGIvSlNUZXN0cy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNSBA
QAorMjAxNy0xMi0xNiAgT2xla3NhbmRyIFNrYWNoa292ICA8Z3NrYWNoa292QGdtYWlsLmNvbT4K
KworICAgICAgICBXZWJBc3NlbWJseTogY2FjaGUgbWVtb3J5IGFkZHJlc3MgLyBzaXplIG9uIGlu
c3RhbmNlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0x
NzczMDUKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAq
IHdhc20vZnVuY3Rpb24tdGVzdHMvbWVtb3J5LXJldXNlLmpzOiBBZGRlZC4KKyAgICAgICAgKGlt
cG9ydC5CdWlsZGVyLmZyb20uc3RyaW5nX2FwcGVhcmVkX2hlcmUuaW1wb3J0LmFzLmFzc2VydC5m
cm9tLnN0cmluZ19hcHBlYXJlZF9oZXJlLmNyZWF0ZVdhc21Nb2R1bGUpOgorICAgICAgICAoaW1w
b3J0LkJ1aWxkZXIuZnJvbS5zdHJpbmdfYXBwZWFyZWRfaGVyZS5pbXBvcnQuYXMuYXNzZXJ0LmZy
b20uc3RyaW5nX2FwcGVhcmVkX2hlcmUpOgorICAgICAgICAoaW1wb3J0LkJ1aWxkZXIuZnJvbS5z
dHJpbmdfYXBwZWFyZWRfaGVyZS5pbXBvcnQuYXMuYXNzZXJ0LmZyb20uc3RyaW5nX2FwcGVhcmVk
X2hlcmUubG9hZFdhc21Nb2R1bGVXaXRoU2hhcmVkTWVtb3J5KToKKwogMjAxNy0xMi0xNCAgU2Fh
bSBCYXJhdGkgIDxzYmFyYXRpQGFwcGxlLmNvbT4KIAogICAgICAgICBUaGUgQ2xlYW5VcCBhZnRl
ciBMSUNNIGlzIGVycm9uZW91c2x5IHJlbW92aW5nIGEgQ2hlY2sKZGlmZiAtLWdpdCBhL0pTVGVz
dHMvd2FzbS9mdW5jdGlvbi10ZXN0cy9tZW1vcnktcmV1c2UuanMgYi9KU1Rlc3RzL3dhc20vZnVu
Y3Rpb24tdGVzdHMvbWVtb3J5LXJldXNlLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmY1ZjM5NWUxYmY0NDM0MDgx
Y2EwMDYzNGVhNmQwYzEwM2Y0NTQxNmEKLS0tIC9kZXYvbnVsbAorKysgYi9KU1Rlc3RzL3dhc20v
ZnVuY3Rpb24tdGVzdHMvbWVtb3J5LXJldXNlLmpzCkBAIC0wLDAgKzEsMTEzIEBACitpbXBvcnQg
QnVpbGRlciBmcm9tICcuLi9CdWlsZGVyLmpzJworaW1wb3J0ICogYXMgYXNzZXJ0IGZyb20gJy4u
L2Fzc2VydC5qcycKKworY29uc3QgY291bnQgPSAxMDsKK2NvbnN0IHBhZ2VzID0gMTI7Citjb25z
dCBtZW1vcnlEZXNjcmlwdGlvbiA9IHtpbml0aWFsOjF9OworY29uc3QgcGFnZVNpemUgPSA2NCAq
IDEwMjQ7CisKK2Z1bmN0aW9uIGNyZWF0ZVdhc21JbnN0YW5jZShtZW1vcnkpIHsKKyAgICBjb25z
dCBidWlsZGVyID0gbmV3IEJ1aWxkZXIoKQorICAgICAgICAuVHlwZSgpLkVuZCgpCisgICAgICAg
IC5JbXBvcnQoKQorICAgICAgICAgICAgLk1lbW9yeSgiaW1wIiwgIm1lbW9yeSIsIG1lbW9yeURl
c2NyaXB0aW9uKQorICAgICAgICAuRW5kKCkKKyAgICAgICAgLkZ1bmN0aW9uKCkuRW5kKCkKKyAg
ICAgICAgLkV4cG9ydCgpCisgICAgICAgICAgICAuRnVuY3Rpb24oImN1cnJlbnQiKQorICAgICAg
ICAgICAgLkZ1bmN0aW9uKCJnZXQiKQorICAgICAgICAgICAgLkZ1bmN0aW9uKCJncm93IikKKyAg
ICAgICAgLkVuZCgpCisgICAgICAgIC5Db2RlKCkKKyAgICAgICAgICAgIC5GdW5jdGlvbigiY3Vy
cmVudCIsIHsgcGFyYW1zOiBbXSwgcmV0OiAiaTMyIiB9KQorICAgICAgICAgICAgICAgIC5DdXJy
ZW50TWVtb3J5KDApCisgICAgICAgICAgICAgICAgLlJldHVybigpCisgICAgICAgICAgICAuRW5k
KCkKKyAgICAgICAgICAgIC5GdW5jdGlvbigiZ2V0IiwgeyBwYXJhbXM6IFsiaTMyIl0sIHJldDog
ImkzMiIgfSkKKyAgICAgICAgICAgICAgICAuR2V0TG9jYWwoMCkKKyAgICAgICAgICAgICAgICAu
STMyTG9hZCgyLCAwKQorICAgICAgICAgICAgICAgIC5SZXR1cm4oKQorICAgICAgICAgICAgLkVu
ZCgpCisgICAgICAgICAgICAuRnVuY3Rpb24oImdyb3ciLCB7IHBhcmFtczogWyJpMzIiXSwgcmV0
OiAiaTMyIiB9KQorICAgICAgICAgICAgICAgIC5HZXRMb2NhbCgwKQorICAgICAgICAgICAgICAg
IC5Hcm93TWVtb3J5KDApCisgICAgICAgICAgICAgICAgLlJldHVybigpCisgICAgICAgICAgICAu
RW5kKCkKKyAgICAgICAgLkVuZCgpOworCisgICAgY29uc3QgYmluID0gYnVpbGRlci5XZWJBc3Nl
bWJseSgpLmdldCgpOworICAgIGNvbnN0IG1vZHVsZSA9IG5ldyBXZWJBc3NlbWJseS5Nb2R1bGUo
YmluKTsKKyAgICByZXR1cm4gbmV3IFdlYkFzc2VtYmx5Lkluc3RhbmNlKG1vZHVsZSwge2ltcDog
e21lbW9yeX19KTsKK30KKworZnVuY3Rpb24gZG9GaWxsTWVtb3J5KG1lbSwgbGVuZ3RoKSB7Cisg
ICAgY29uc3QgYnVmID0gbmV3IFVpbnQzMkFycmF5KG1lbS5idWZmZXIpOworCisgICAgZm9yIChs
ZXQgaSA9IDA7IGkgPCBsZW5ndGg7ICsraSkgeworICAgICAgICBidWZbaV0gPSBpICsgMTsKKyAg
ICB9Cit9CisKK2Z1bmN0aW9uIGRvQ2hlY2tUcmFwKGluc3RhbmNlcywgbWVtLCBudW1QYWdlcywg
bGVuZ3RoKSB7CisgICAgY29uc3QgYnVmID0gbmV3IFVpbnQzMkFycmF5KG1lbS5idWZmZXIpOwor
CisgICAgZm9yIChsZXQgaW5zdGFuY2Ugb2YgaW5zdGFuY2VzKSB7CisgICAgICAgIGNvbnN0IGZv
byA9IGluc3RhbmNlLmV4cG9ydHMuZ2V0OworICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGxl
bmd0aDsgaSsrKSB7CisgICAgICAgICAgICBhc3NlcnQuZXEoZm9vKGkpLCBidWZbaV0pOworICAg
ICAgICB9CisgICAgICAgIGFzc2VydC50aHJvd3MoKCkgPT4gZm9vKG51bVBhZ2VzICogcGFnZVNp
emUgKyAxKSwgV2ViQXNzZW1ibHkuUnVudGltZUVycm9yLCAiT3V0IG9mIGJvdW5kcyBtZW1vcnkg
YWNjZXNzIik7CisgICAgfQorfQorCitmdW5jdGlvbiBkb0NoZWNrTm9UcmFwKGluc3RhbmNlcywg
bWVtLCBudW1QYWdlcywgbGVuZ3RoKSB7CisgICAgY29uc3QgYnVmID0gbmV3IFVpbnQzMkFycmF5
KG1lbS5idWZmZXIpOworCisgICAgZm9yIChsZXQgaW5zdGFuY2Ugb2YgaW5zdGFuY2VzKSB7Cisg
ICAgICAgIGNvbnN0IGZvbyA9IGluc3RhbmNlLmV4cG9ydHMuZ2V0OworICAgICAgICBmb3IgKGxl
dCBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7CisgICAgICAgICAgICBhc3NlcnQuZXEoZm9vKGkp
LCBidWZbaV0pOworICAgICAgICB9CisgICAgICAgIGFzc2VydC5lcShmb28obnVtUGFnZXMgKiBw
YWdlU2l6ZSArIDEpLCAwKTsKKyAgICB9Cit9CisKK2Z1bmN0aW9uIGRvTWVtb3J5R3JvdyhpbnN0
YW5jZXMpIHsKKyAgICBjb25zdCBpbnN0YW5jZSA9IGluc3RhbmNlc1swXTsgLy8gVGFrZSBmaXJz
dCBpbnN0YW5jZSBhbmQgZ3JvdyBzaGFyZWQgbWVtb3J5CisgICAgaW5zdGFuY2UuZXhwb3J0cy5n
cm93KDEpOworfQorCitmdW5jdGlvbiBkb0NoZWNrKG1lbSwgaW5zdGFuY2VzLCBudW1QYWdlcykg
eworICAgIGNvbnN0IGxlbmd0aCA9IG1lbS5idWZmZXIubGVuZ3RoIC8gNDsKKyAgICAKKyAgICBk
b0ZpbGxNZW1vcnkobWVtLCBsZW5ndGgpOworICAgIGRvQ2hlY2tUcmFwKGluc3RhbmNlcywgbWVt
LCBudW1QYWdlcywgbGVuZ3RoKTsKKyAgICBkb01lbW9yeUdyb3coaW5zdGFuY2VzKTsKKyAgICBk
b0NoZWNrTm9UcmFwKGluc3RhbmNlcywgbWVtLCBudW1QYWdlcywgbGVuZ3RoKTsKK30KKworZnVu
Y3Rpb24gY2hlY2tXYXNtSW5zdGFuY2VzV2l0aFNoYXJlZE1lbW9yeSgpIHsKKyAgICBjb25zdCBt
ZW0gPSBuZXcgV2ViQXNzZW1ibHkuTWVtb3J5KG1lbW9yeURlc2NyaXB0aW9uKTsKKworICAgIGNv
bnN0IGluc3RhbmNlcyA9IFtdOworICAgIGZvciAobGV0IGkgPSAwOyBpIDwgY291bnQ7IGkrKykg
eworICAgICAgICBpbnN0YW5jZXMucHVzaChjcmVhdGVXYXNtSW5zdGFuY2UobWVtKSk7CisgICAg
fQorCisgICAgZm9yKGxldCBpID0gMTsgaSA8IHBhZ2VzOyBpKyspIHsKKyAgICAgICAgZG9DaGVj
ayhtZW0sIGluc3RhbmNlcywgaSk7CisgICAgfQorCisgICAgbGV0IGluc3RhbmNlOworICAgIGZv
ciAobGV0IGkgPSAwOyBpIDwgY291bnQ7IGkrKykgeworICAgICAgICBpbnN0YW5jZSA9IGluc3Rh
bmNlcy5zaGlmdCgpOworICAgIH0KKworICAgIGZ1bGxHQygpOworCisgICAgY29uc3Qgc3Vydml2
ZWRJbnN0YW5jZXMgPSAgWyBpbnN0YW5jZSBdOyAvLyBTaG91bGQgc3Vydml2ZSBvbmx5IG9uZSBp
bnN0YW5jZSBhZnRlciBmdWxsIEdDCisKKyAgICBkb0NoZWNrKG1lbSwgc3Vydml2ZWRJbnN0YW5j
ZXMsIHBhZ2VzKTsgLy8gUmVjaGVjayBvbmx5IGZvciBzdXJ2aWUgaW5zdGFuY2VzCit9CisKK2No
ZWNrV2FzbUluc3RhbmNlc1dpdGhTaGFyZWRNZW1vcnkoKTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>330654</attachid>
            <date>2018-01-07 02:00:20 -0800</date>
            <delta_ts>2018-01-11 14:14:09 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-177305-20180107120018.patch</filename>
            <type>text/plain</type>
            <size>22926</size>
            <attacher name="GSkachkov">gskachkov</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjI2NDg3CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCBk
NTdhNTdlOTJjOWVhYmY0YjVlNDE1MzYyYzU2MzNkNmY2ZDc4ZTYxLi45MTUwOGU3MmY3MGQyYWRj
Nzc1YTYxMGZmMDM4MWRmZjcxYzMzOGQ1IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwzOSBAQAorMjAxOC0wMS0wNyAgT2xla3NhbmRyIFNrYWNoa292ICA8Z3NrYWNoa292QGdt
YWlsLmNvbT4KKworICAgICAgICBXZWJBc3NlbWJseTogY2FjaGUgbWVtb3J5IGFkZHJlc3MgLyBz
aXplIG9uIGluc3RhbmNlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0xNzczMDUKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKwor
ICAgICAgICBDYWNoZSBtZW1vcnkgYWRkcmVzcy9zaXplIGluIHdhc206SW5zdGFuY2UgdG8gYXZv
aWQgbG9hZCB3YXNtOk1lbW9yeSAKKyAgICAgICAgb2JqZWN0IGR1cmluZyBhY2Nlc3MgdG8gbWVt
b3J5IGFuZCBtZW1vcnkgc2l6ZSBwcm9wZXJ0eSBpbiBKaVQKKworICAgICAgICAqIHdhc20vV2Fz
bUIzSVJHZW5lcmF0b3IuY3BwOgorICAgICAgICAoSlNDOjpXYXNtOjpCM0lSR2VuZXJhdG9yOjpy
ZXN0b3JlV2ViQXNzZW1ibHlHbG9iYWxTdGF0ZSk6CisgICAgICAgIChKU0M6Oldhc206OkIzSVJH
ZW5lcmF0b3I6OmFkZEN1cnJlbnRNZW1vcnkpOgorICAgICAgICAoSlNDOjpXYXNtOjpCM0lSR2Vu
ZXJhdG9yOjphZGRDYWxsSW5kaXJlY3QpOgorICAgICAgICAqIHdhc20vV2FzbUJpbmRpbmcuY3Bw
OgorICAgICAgICAoSlNDOjpXYXNtOjp3YXNtVG9XYXNtKToKKyAgICAgICAgKiB3YXNtL1dhc21J
bnN0YW5jZS5oOgorICAgICAgICAoSlNDOjpXYXNtOjpJbnN0YW5jZTo6Y2FjaGVkTWVtb3J5IGNv
bnN0KToKKyAgICAgICAgKEpTQzo6V2FzbTo6SW5zdGFuY2U6OmNhY2hlZE1lbW9yeVNpemUgY29u
c3QpOgorICAgICAgICAoSlNDOjpXYXNtOjpJbnN0YW5jZTo6Y3JlYXRlV2Vha1B0cik6CisgICAg
ICAgIChKU0M6Oldhc206Okluc3RhbmNlOjpzZXRNZW1vcnkpOgorICAgICAgICAoSlNDOjpXYXNt
OjpJbnN0YW5jZTo6dXBkYXRlQ2FjaGVkTWVtb3J5KToKKyAgICAgICAgKEpTQzo6V2FzbTo6SW5z
dGFuY2U6Om9mZnNldE9mQ2FjaGVkTWVtb3J5KToKKyAgICAgICAgKEpTQzo6V2FzbTo6SW5zdGFu
Y2U6Om9mZnNldE9mQ2FjaGVkTWVtb3J5U2l6ZSk6CisgICAgICAgIChKU0M6Oldhc206Okluc3Rh
bmNlOjpvZmZzZXRPZkNhY2hlZEluZGV4aW5nTWFzayk6CisgICAgICAgIChKU0M6Oldhc206Oklu
c3RhbmNlOjphbGxvY2F0aW9uU2l6ZSk6CisgICAgICAgICogd2FzbS9XYXNtTWVtb3J5LmNwcDoK
KyAgICAgICAgKEpTQzo6V2FzbTo6TWVtb3J5Ojpncm93KToKKyAgICAgICAgKEpTQzo6V2FzbTo6
TWVtb3J5OjpyZWdpc3Rlckluc3RhbmNlKToKKyAgICAgICAgKiB3YXNtL1dhc21NZW1vcnkuaDoK
KyAgICAgICAgKEpTQzo6V2FzbTo6TWVtb3J5OjppbmRleGluZ01hc2spOgorICAgICAgICAqIHdh
c20vanMvSlNUb1dhc20uY3BwOgorICAgICAgICAoSlNDOjpXYXNtOjpjcmVhdGVKU1RvV2FzbVdy
YXBwZXIpOgorICAgICAgICAqIHdhc20vanMvV2ViQXNzZW1ibHlNb2R1bGVSZWNvcmQuY3BwOgor
ICAgICAgICAoSlNDOjpXZWJBc3NlbWJseU1vZHVsZVJlY29yZDo6ZXZhbHVhdGUpOgorCiAyMDE4
LTAxLTA1ICBKRiBCYXN0aWVuICA8amZiYXN0aWVuQGFwcGxlLmNvbT4KIAogICAgICAgICBXZWJB
c3NlbWJseTogcG9pc29uIEpTIG9iamVjdCdzIHNlY3JldHMKZGlmZiAtLWdpdCBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS93YXNtL1dhc21CM0lSR2VuZXJhdG9yLmNwcCBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS93YXNtL1dhc21CM0lSR2VuZXJhdG9yLmNwcAppbmRleCA4NDlhNWVkZDM3ZTkyZjQ1
NzI2NzNkNWNjNWI0N2RmZjAwNjI1ZmVkLi44YzIyNTA3MTVhZGQ4N2I0ZWVkZjBkODM3ODUyMTQ0
NDE5ZWYyYTU2IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQjNJ
UkdlbmVyYXRvci5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUIzSVJH
ZW5lcmF0b3IuY3BwCkBAIC00ODUsMTMgKzQ4NSwxMiBAQCB2b2lkIEIzSVJHZW5lcmF0b3I6OnJl
c3RvcmVXZWJBc3NlbWJseUdsb2JhbFN0YXRlKFJlc3RvcmVDYWNoZWRTdGFja0xpbWl0IHJlc3Rv
cgogCiAgICAgICAgIHBhdGNocG9pbnQtPnNldEdlbmVyYXRvcihbcGlubmVkUmVnc10gKENDYWxs
SGVscGVycyYgaml0LCBjb25zdCBCMzo6U3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zJiBwYXJhbXMp
IHsKICAgICAgICAgICAgIEdQUlJlZyBiYXNlTWVtb3J5ID0gcGlubmVkUmVncy0+YmFzZU1lbW9y
eVBvaW50ZXI7Ci0gICAgICAgICAgICBqaXQubG9hZFB0cihDQ2FsbEhlbHBlcnM6OkFkZHJlc3Mo
cGFyYW1zWzBdLmdwcigpLCBJbnN0YW5jZTo6b2Zmc2V0T2ZNZW1vcnkoKSksIGJhc2VNZW1vcnkp
OwogICAgICAgICAgICAgY29uc3QgYXV0byYgc2l6ZVJlZ3MgPSBwaW5uZWRSZWdzLT5zaXplUmVn
aXN0ZXJzOwogICAgICAgICAgICAgQVNTRVJUKHNpemVSZWdzLnNpemUoKSA+PSAxKTsKICAgICAg
ICAgICAgIEFTU0VSVCghc2l6ZVJlZ3NbMF0uc2l6ZU9mZnNldCk7IC8vIFRoZSBmb2xsb3dpbmcg
Y29kZSBhc3N1bWVzIHdlIHN0YXJ0IGF0IDAsIGFuZCBjYWxjdWxhdGVzIHN1YnNlcXVlbnQgc2l6
ZSByZWdpc3RlcnMgcmVsYXRpdmUgdG8gMC4KLSAgICAgICAgICAgIGppdC5sb2FkUHRyKENDYWxs
SGVscGVyczo6QWRkcmVzcyhiYXNlTWVtb3J5LCBNZW1vcnk6Om9mZnNldE9mU2l6ZSgpKSwgc2l6
ZVJlZ3NbMF0uc2l6ZVJlZ2lzdGVyKTsKLSAgICAgICAgICAgIGppdC5sb2FkUHRyKENDYWxsSGVs
cGVyczo6QWRkcmVzcyhiYXNlTWVtb3J5LCBNZW1vcnk6Om9mZnNldE9mSW5kZXhpbmdNYXNrKCkp
LCBwaW5uZWRSZWdzLT5pbmRleGluZ01hc2spOwotICAgICAgICAgICAgaml0LmxvYWRQdHIoQ0Nh
bGxIZWxwZXJzOjpBZGRyZXNzKGJhc2VNZW1vcnksIE1lbW9yeTo6b2Zmc2V0T2ZNZW1vcnkoKSks
IGJhc2VNZW1vcnkpOworICAgICAgICAgICAgaml0LmxvYWRQdHIoQ0NhbGxIZWxwZXJzOjpBZGRy
ZXNzKHBhcmFtc1swXS5ncHIoKSwgSW5zdGFuY2U6Om9mZnNldE9mQ2FjaGVkTWVtb3J5U2l6ZSgp
KSwgc2l6ZVJlZ3NbMF0uc2l6ZVJlZ2lzdGVyKTsKKyAgICAgICAgICAgIGppdC5sb2FkUHRyKEND
YWxsSGVscGVyczo6QWRkcmVzcyhwYXJhbXNbMF0uZ3ByKCksIEluc3RhbmNlOjpvZmZzZXRPZkNh
Y2hlZEluZGV4aW5nTWFzaygpKSwgcGlubmVkUmVncy0+aW5kZXhpbmdNYXNrKTsKKyAgICAgICAg
ICAgIGppdC5sb2FkUHRyKENDYWxsSGVscGVyczo6QWRkcmVzcyhwYXJhbXNbMF0uZ3ByKCksIElu
c3RhbmNlOjpvZmZzZXRPZkNhY2hlZE1lbW9yeSgpKSwgYmFzZU1lbW9yeSk7CiAgICAgICAgICAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAxOyBpIDwgc2l6ZVJlZ3Muc2l6ZSgpOyArK2kpCiAgICAgICAg
ICAgICAgICAgaml0LmFkZDY0KENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKC1zaXplUmVnc1tp
XS5zaXplT2Zmc2V0KSwgc2l6ZVJlZ3NbMF0uc2l6ZVJlZ2lzdGVyLCBzaXplUmVnc1tpXS5zaXpl
UmVnaXN0ZXIpOwogICAgICAgICB9KTsKQEAgLTYwNCwxMSArNjAzLDkgQEAgYXV0byBCM0lSR2Vu
ZXJhdG9yOjphZGRHcm93TWVtb3J5KEV4cHJlc3Npb25UeXBlIGRlbHRhLCBFeHByZXNzaW9uVHlw
ZSYgcmVzdWx0KQogCiBhdXRvIEIzSVJHZW5lcmF0b3I6OmFkZEN1cnJlbnRNZW1vcnkoRXhwcmVz
c2lvblR5cGUmIHJlc3VsdCkgLT4gUGFydGlhbFJlc3VsdAogewotICAgIFZhbHVlKiBtZW1vcnlP
YmplY3QgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PE1lbW9yeVZhbHVlPihtX3Byb2MsIExv
YWQsIHBvaW50ZXJUeXBlKCksIG9yaWdpbigpLCBpbnN0YW5jZVZhbHVlKCksIHNhZmVDYXN0PGlu
dDMyX3Q+KEluc3RhbmNlOjpvZmZzZXRPZk1lbW9yeSgpKSk7Ci0KICAgICBzdGF0aWNfYXNzZXJ0
KHNpemVvZihkZWNsdHlwZShzdGF0aWNfY2FzdDxNZW1vcnkqPihudWxscHRyKS0+c2l6ZSgpKSkg
PT0gc2l6ZW9mKHVpbnQ2NF90KSwgImNvZGVnZW4gcmVsaWVzIG9uIHRoaXMgc2l6ZSIpOwotICAg
IFZhbHVlKiBzaXplID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxNZW1vcnlWYWx1ZT4obV9w
cm9jLCBMb2FkLCBJbnQ2NCwgb3JpZ2luKCksIG1lbW9yeU9iamVjdCwgc2FmZUNhc3Q8aW50MzJf
dD4oTWVtb3J5OjpvZmZzZXRPZlNpemUoKSkpOwotICAgIAorICAgIFZhbHVlKiBzaXplID0gbV9j
dXJyZW50QmxvY2stPmFwcGVuZE5ldzxNZW1vcnlWYWx1ZT4obV9wcm9jLCBMb2FkLCBJbnQ2NCwg
b3JpZ2luKCksIGluc3RhbmNlVmFsdWUoKSwgc2FmZUNhc3Q8aW50MzJfdD4oSW5zdGFuY2U6Om9m
ZnNldE9mQ2FjaGVkTWVtb3J5U2l6ZSgpKSk7CisKICAgICBjb25zdGV4cHIgdWludDMyX3Qgc2hp
ZnRWYWx1ZSA9IDE2OwogICAgIHN0YXRpY19hc3NlcnQoUGFnZUNvdW50OjpwYWdlU2l6ZSA9PSAx
dWxsIDw8IHNoaWZ0VmFsdWUsICJUaGlzIG11c3QgaG9sZCBmb3IgdGhlIGNvZGUgYmVsb3cgdG8g
YmUgY29ycmVjdC4iKTsKICAgICBWYWx1ZSogbnVtUGFnZXMgPSBtX2N1cnJlbnRCbG9jay0+YXBw
ZW5kTmV3PFZhbHVlPihtX3Byb2MsIFpTaHIsIG9yaWdpbigpLApAQCAtMTI4OSwxNCArMTI4Niwx
NSBAQCBhdXRvIEIzSVJHZW5lcmF0b3I6OmFkZENhbGxJbmRpcmVjdChjb25zdCBTaWduYXR1cmUm
IHNpZ25hdHVyZSwgVmVjdG9yPEV4cHJlc3NpbwogICAgICAgICAgICAgaml0LmxvYWRQdHIoQ0Nh
bGxIZWxwZXJzOjpBZGRyZXNzKG9sZENvbnRleHRJbnN0YW5jZSwgSW5zdGFuY2U6Om9mZnNldE9m
Q2FjaGVkU3RhY2tMaW1pdCgpKSwgYmFzZU1lbW9yeSk7CiAgICAgICAgICAgICBqaXQuc3RvcmVQ
dHIoYmFzZU1lbW9yeSwgQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKG5ld0NvbnRleHRJbnN0YW5jZSwg
SW5zdGFuY2U6Om9mZnNldE9mQ2FjaGVkU3RhY2tMaW1pdCgpKSk7CiAgICAgICAgICAgICBqaXQu
c3RvcmVXYXNtQ29udGV4dEluc3RhbmNlKG5ld0NvbnRleHRJbnN0YW5jZSk7Ci0gICAgICAgICAg
ICBqaXQubG9hZFB0cihDQ2FsbEhlbHBlcnM6OkFkZHJlc3MobmV3Q29udGV4dEluc3RhbmNlLCBJ
bnN0YW5jZTo6b2Zmc2V0T2ZNZW1vcnkoKSksIGJhc2VNZW1vcnkpOyAvLyBNZW1vcnkqLgotICAg
ICAgICAgICAgQVNTRVJUKHNpemVSZWdzLnNpemUoKSA9PSAxKTsKICAgICAgICAgICAgIEFTU0VS
VChzaXplUmVnc1swXS5zaXplUmVnaXN0ZXIgIT0gYmFzZU1lbW9yeSk7CisgICAgICAgICAgICAv
LyBGSVhNRTogV2Ugc2hvdWxkIHN1cHBvcnQgbW9yZSB0aGFuIG9uZSBtZW1vcnkgc2l6ZSByZWdp
c3RlcgorICAgICAgICAgICAgLy8gICBzZWU6IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD0xNjI5NTIKKyAgICAgICAgICAgIEFTU0VSVChzaXplUmVncy5zaXplKCkgPT0g
MSk7CiAgICAgICAgICAgICBBU1NFUlQoc2l6ZVJlZ3NbMF0uc2l6ZVJlZ2lzdGVyICE9IG5ld0Nv
bnRleHRJbnN0YW5jZSk7CiAgICAgICAgICAgICBBU1NFUlQoIXNpemVSZWdzWzBdLnNpemVPZmZz
ZXQpOwotICAgICAgICAgICAgaml0LmxvYWRQdHIoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKGJhc2VN
ZW1vcnksIE1lbW9yeTo6b2Zmc2V0T2ZJbmRleGluZ01hc2soKSksIHBpbm5lZFJlZ3MuaW5kZXhp
bmdNYXNrKTsgLy8gSW5kZXhpbmcgbWFzay4KLSAgICAgICAgICAgIGppdC5sb2FkUHRyKENDYWxs
SGVscGVyczo6QWRkcmVzcyhiYXNlTWVtb3J5LCBNZW1vcnk6Om9mZnNldE9mU2l6ZSgpKSwgc2l6
ZVJlZ3NbMF0uc2l6ZVJlZ2lzdGVyKTsgLy8gTWVtb3J5IHNpemUuCi0gICAgICAgICAgICBqaXQu
bG9hZFB0cihDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoYmFzZU1lbW9yeSwgTWVtb3J5OjpvZmZzZXRP
Zk1lbW9yeSgpKSwgYmFzZU1lbW9yeSk7IC8vIE1lbW9yeTo6dm9pZCouCisgICAgICAgICAgICBq
aXQubG9hZFB0cihDQ2FsbEhlbHBlcnM6OkFkZHJlc3MobmV3Q29udGV4dEluc3RhbmNlLCBJbnN0
YW5jZTo6b2Zmc2V0T2ZDYWNoZWRJbmRleGluZ01hc2soKSksIHBpbm5lZFJlZ3MuaW5kZXhpbmdN
YXNrKTsgLy8gSW5kZXhpbmcgbWFzay4KKyAgICAgICAgICAgIGppdC5sb2FkUHRyKENDYWxsSGVs
cGVyczo6QWRkcmVzcyhuZXdDb250ZXh0SW5zdGFuY2UsIEluc3RhbmNlOjpvZmZzZXRPZkNhY2hl
ZE1lbW9yeVNpemUoKSksIHNpemVSZWdzWzBdLnNpemVSZWdpc3Rlcik7IC8vIE1lbW9yeSBzaXpl
LgorICAgICAgICAgICAgaml0LmxvYWRQdHIoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKG5ld0NvbnRl
eHRJbnN0YW5jZSwgSW5zdGFuY2U6Om9mZnNldE9mQ2FjaGVkTWVtb3J5KCkpLCBiYXNlTWVtb3J5
KTsgLy8gTWVtb3J5Ojp2b2lkKi4KICAgICAgICAgfSk7CiAgICAgICAgIGRvQ29udGV4dFN3aXRj
aC0+YXBwZW5kTmV3Q29udHJvbFZhbHVlKG1fcHJvYywgSnVtcCwgb3JpZ2luKCksIGNvbnRpbnVh
dGlvbik7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21CaW5k
aW5nLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21CaW5kaW5nLmNwcAppbmRl
eCA3NTliMjY4ZDRjZjFhYjg2NGNhZDJhYjVkODc0Yjg0Y2E2M2JhNjBjLi44OWY5MWYzM2ExNzBi
MGJiMzNlODFmMjc4NTNkZjNhNjVjOTA0ODcyIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvd2FzbS9XYXNtQmluZGluZy5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dh
c20vV2FzbUJpbmRpbmcuY3BwCkBAIC02NCwxMSArNjQsMTAgQEAgRXhwZWN0ZWQ8TWFjcm9Bc3Nl
bWJsZXJDb2RlUmVmLCBCaW5kaW5nRmFpbHVyZT4gd2FzbVRvV2FzbSh1bnNpZ25lZCBpbXBvcnRJ
bmRleCkKIAogICAgIC8vIEZJWE1FIHRoZSBmb2xsb3dpbmcgY29kZSBhc3N1bWVzIHRoYXQgYWxs
IFdhc206Okluc3RhbmNlIGhhdmUgdGhlIHNhbWUgcGlubmVkIHJlZ2lzdGVycy4gaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2Mjk1MgogICAgIC8vIFNldCB1cCB0aGUg
Y2FsbGVlJ3MgYmFzZU1lbW9yeSByZWdpc3RlciBhcyB3ZWxsIGFzIHRoZSBtZW1vcnkgc2l6ZSBy
ZWdpc3RlcnMuCi0gICAgaml0LmxvYWRQdHIoSklUOjpBZGRyZXNzKGJhc2VNZW1vcnksIEluc3Rh
bmNlOjpvZmZzZXRPZk1lbW9yeSgpKSwgYmFzZU1lbW9yeSk7IC8vIFdhc206Ok1lbW9yeSouCiAg
ICAgQVNTRVJUKCFzaXplUmVnc1swXS5zaXplT2Zmc2V0KTsgLy8gVGhlIGZvbGxvd2luZyBjb2Rl
IGFzc3VtZXMgd2Ugc3RhcnQgYXQgMCwgYW5kIGNhbGN1bGF0ZXMgc3Vic2VxdWVudCBzaXplIHJl
Z2lzdGVycyByZWxhdGl2ZSB0byAwLgotICAgIGppdC5sb2FkUHRyKENDYWxsSGVscGVyczo6QWRk
cmVzcyhiYXNlTWVtb3J5LCBNZW1vcnk6Om9mZnNldE9mSW5kZXhpbmdNYXNrKCkpLCBwaW5uZWRS
ZWdzLmluZGV4aW5nTWFzayk7IC8vIEluZGV4aW5nIG1hc2suCi0gICAgaml0LmxvYWRQdHIoSklU
OjpBZGRyZXNzKGJhc2VNZW1vcnksIFdhc206Ok1lbW9yeTo6b2Zmc2V0T2ZTaXplKCkpLCBzaXpl
UmVnc1swXS5zaXplUmVnaXN0ZXIpOyAvLyBNZW1vcnkgc2l6ZS4KLSAgICBqaXQubG9hZFB0cihK
SVQ6OkFkZHJlc3MoYmFzZU1lbW9yeSwgV2FzbTo6TWVtb3J5OjpvZmZzZXRPZk1lbW9yeSgpKSwg
YmFzZU1lbW9yeSk7IC8vIFdhc206Ok1lbW9yeTo6dm9pZCouCisgICAgaml0LmxvYWRQdHIoSklU
OjpBZGRyZXNzKGJhc2VNZW1vcnksIFdhc206Okluc3RhbmNlOjpvZmZzZXRPZkNhY2hlZEluZGV4
aW5nTWFzaygpKSwgcGlubmVkUmVncy5pbmRleGluZ01hc2spOyAvLyBJbmRleGluZyBtYXNrLgor
ICAgIGppdC5sb2FkUHRyKEpJVDo6QWRkcmVzcyhiYXNlTWVtb3J5LCBXYXNtOjpJbnN0YW5jZTo6
b2Zmc2V0T2ZDYWNoZWRNZW1vcnlTaXplKCkpLCBzaXplUmVnc1swXS5zaXplUmVnaXN0ZXIpOyAv
LyBNZW1vcnkgc2l6ZS4KKyAgICBqaXQubG9hZFB0cihKSVQ6OkFkZHJlc3MoYmFzZU1lbW9yeSwg
V2FzbTo6SW5zdGFuY2U6Om9mZnNldE9mQ2FjaGVkTWVtb3J5KCkpLCBiYXNlTWVtb3J5KTsgLy8g
V2FzbTo6TWVtb3J5Ojp2b2lkKi4KICAgICBmb3IgKHVuc2lnbmVkIGkgPSAxOyBpIDwgc2l6ZVJl
Z3Muc2l6ZSgpOyArK2kpIHsKICAgICAgICAgQVNTRVJUKHNpemVSZWdzW2ldLnNpemVSZWdpc3Rl
ciAhPSBiYXNlTWVtb3J5KTsKICAgICAgICAgQVNTRVJUKHNpemVSZWdzW2ldLnNpemVSZWdpc3Rl
ciAhPSBzY3JhdGNoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dh
c21JbnN0YW5jZS5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUluc3RhbmNlLmgK
aW5kZXggMmMwODAwMDNkNTJjYTY5OGRhNzJmY2ZmNjc0NDQwNDZkYjQ1MzU1Ni4uM2NhOTJmNTY1
NmRlNzRhMjdiNzBjNDFlNDc4YmU5N2RjODA2NmU1OCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3dhc20vV2FzbUluc3RhbmNlLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3dhc20vV2FzbUluc3RhbmNlLmgKQEAgLTY1LDggKzY1LDI1IEBAIHB1YmxpYzoKICAgICBDb2Rl
QmxvY2sqIGNvZGVCbG9jaygpIHsgcmV0dXJuIG1fY29kZUJsb2NrLmdldCgpOyB9CiAgICAgTWVt
b3J5KiBtZW1vcnkoKSB7IHJldHVybiBtX21lbW9yeS5nZXQoKTsgfQogICAgIFRhYmxlKiB0YWJs
ZSgpIHsgcmV0dXJuIG1fdGFibGUuZ2V0KCk7IH0KLSAgICAKLSAgICB2b2lkIHNldE1lbW9yeShS
ZWY8TWVtb3J5PiYmIG1lbW9yeSkgeyBtX21lbW9yeSA9IFdURk1vdmUobWVtb3J5KTsgfQorCisg
ICAgdm9pZCogY2FjaGVkTWVtb3J5KCkgY29uc3QgeyByZXR1cm4gbV9jYWNoZWRNZW1vcnk7IH0K
KyAgICBzaXplX3QgY2FjaGVkTWVtb3J5U2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fY2FjaGVkTWVt
b3J5U2l6ZTsgfQorCisgICAgV2Vha1B0cjxJbnN0YW5jZT4gY3JlYXRlV2Vha1B0cigpIHsgcmV0
dXJuIG1fd2Vha1B0ckZhY3RvcnkuY3JlYXRlV2Vha1B0cigqdGhpcyk7IH0KKyAgICB2b2lkIHNl
dE1lbW9yeShSZWY8TWVtb3J5PiYmIG1lbW9yeSkKKyAgICB7CisgICAgICAgIG1fbWVtb3J5ID0g
V1RGTW92ZShtZW1vcnkpOworICAgICAgICBtX21lbW9yeS5nZXQoKS0+cmVnaXN0ZXJJbnN0YW5j
ZSh0aGlzKTsKKyAgICAgICAgdXBkYXRlQ2FjaGVkTWVtb3J5KCk7CisgICAgfQorICAgIHZvaWQg
dXBkYXRlQ2FjaGVkTWVtb3J5KCkKKyAgICB7CisgICAgICAgIGlmIChtX21lbW9yeSAhPSBudWxs
cHRyKSB7CisgICAgICAgICAgICBtX2NhY2hlZE1lbW9yeSA9IG1lbW9yeSgpLT5tZW1vcnkoKTsK
KyAgICAgICAgICAgIG1fY2FjaGVkTWVtb3J5U2l6ZSA9IG1lbW9yeSgpLT5zaXplKCk7CisgICAg
ICAgICAgICBtX2NhY2hlZEluZGV4aW5nTWFzayA9IG1lbW9yeSgpLT5pbmRleGluZ01hc2soKTsK
KyAgICAgICAgfQorICAgIH0KICAgICB2b2lkIHNldFRhYmxlKFJlZjxUYWJsZT4mJiB0YWJsZSkg
eyBtX3RhYmxlID0gV1RGTW92ZSh0YWJsZSk7IH0KIAogICAgIGludDMyX3QgbG9hZEkzMkdsb2Jh
bCh1bnNpZ25lZCBpKSBjb25zdCB7IHJldHVybiBtX2dsb2JhbHMuZ2V0KClbaV07IH0KQEAgLTc4
LDYgKzk1LDkgQEAgcHVibGljOgogICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZNZW1vcnko
KSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoSW5zdGFuY2UsIG1fbWVtb3J5KTsgfQogICAgIHN0
YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZHbG9iYWxzKCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9G
KEluc3RhbmNlLCBtX2dsb2JhbHMpOyB9CiAgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZlRh
YmxlKCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKEluc3RhbmNlLCBtX3RhYmxlKTsgfQorICAg
IHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZDYWNoZWRNZW1vcnkoKSB7IHJldHVybiBPQkpFQ1Rf
T0ZGU0VUT0YoSW5zdGFuY2UsIG1fY2FjaGVkTWVtb3J5KTsgfQorICAgIHN0YXRpYyBwdHJkaWZm
X3Qgb2Zmc2V0T2ZDYWNoZWRNZW1vcnlTaXplKCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKElu
c3RhbmNlLCBtX2NhY2hlZE1lbW9yeVNpemUpOyB9CisgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZz
ZXRPZkNhY2hlZEluZGV4aW5nTWFzaygpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihJbnN0YW5j
ZSwgbV9jYWNoZWRJbmRleGluZ01hc2spOyB9CiAgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRP
ZlBvaW50ZXJUb1RvcEVudHJ5RnJhbWUoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoSW5zdGFu
Y2UsIG1fcG9pbnRlclRvVG9wRW50cnlGcmFtZSk7IH0KIAogICAgIHN0YXRpYyBwdHJkaWZmX3Qg
b2Zmc2V0T2ZQb2ludGVyVG9BY3R1YWxTdGFja0xpbWl0KCkgeyByZXR1cm4gT0JKRUNUX09GRlNF
VE9GKEluc3RhbmNlLCBtX3BvaW50ZXJUb0FjdHVhbFN0YWNrTGltaXQpOyB9CkBAIC0xMjYsOSAr
MTQ2LDExIEBAIHByaXZhdGU6CiAgICAgewogICAgICAgICByZXR1cm4gKG9mZnNldE9mVGFpbCgp
ICsgc2l6ZW9mKEltcG9ydEZ1bmN0aW9uSW5mbykgKiBudW1JbXBvcnRGdW5jdGlvbnMpLnVuc2Fm
ZUdldCgpOwogICAgIH0KLQogICAgIHZvaWQqIG1fb3duZXIgeyBudWxscHRyIH07IC8vIEluIGEg
SlMgZW1iZWRkaW5nLCB0aGlzIGlzIGEgSlNXZWJBc3NlbWJseUluc3RhbmNlKi4KICAgICBDb250
ZXh0KiBtX2NvbnRleHQgeyBudWxscHRyIH07CisgICAgdm9pZCogbV9jYWNoZWRNZW1vcnkgeyBu
dWxscHRyIH07CisgICAgc2l6ZV90IG1fY2FjaGVkTWVtb3J5U2l6ZSB7IDAgfTsKKyAgICBzaXpl
X3QgbV9jYWNoZWRJbmRleGluZ01hc2sgeyAwIH07CiAgICAgUmVmPE1vZHVsZT4gbV9tb2R1bGU7
CiAgICAgUmVmUHRyPENvZGVCbG9jaz4gbV9jb2RlQmxvY2s7CiAgICAgUmVmUHRyPE1lbW9yeT4g
bV9tZW1vcnk7CkBAIC0xMzgsNiArMTYwLDcgQEAgcHJpdmF0ZToKICAgICB2b2lkKiogbV9wb2lu
dGVyVG9BY3R1YWxTdGFja0xpbWl0IHsgbnVsbHB0ciB9OwogICAgIHZvaWQqIG1fY2FjaGVkU3Rh
Y2tMaW1pdCB7IGJpdHdpc2VfY2FzdDx2b2lkKj4oc3RkOjpudW1lcmljX2xpbWl0czx1aW50cHRy
X3Q+OjptYXgoKSkgfTsKICAgICBTdG9yZVRvcENhbGxGcmFtZUNhbGxiYWNrIG1fc3RvcmVUb3BD
YWxsRnJhbWU7CisgICAgV2Vha1B0ckZhY3Rvcnk8SW5zdGFuY2U+IG1fd2Vha1B0ckZhY3Rvcnk7
CiAgICAgdW5zaWduZWQgbV9udW1JbXBvcnRGdW5jdGlvbnMgeyAwIH07CiB9OwogCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTWVtb3J5LmNwcCBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS93YXNtL1dhc21NZW1vcnkuY3BwCmluZGV4IGMxMjBkYTczYmM3MDJlY2Uy
MTc5YzEwMDZiZTk1ZDRlMTUzZjUzNDYuLmY1Yzc3OTY5MTM4MzhkZmM1ODY2YTJlNTA3MzhlNDdm
ZGIyNzFlYWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21NZW1v
cnkuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21NZW1vcnkuY3BwCkBA
IC0yNSw2ICsyNSw3IEBACiAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJXYXNtTWVt
b3J5LmgiCisjaW5jbHVkZSAiV2FzbUluc3RhbmNlLmgiCiAKICNpZiBFTkFCTEUoV0VCQVNTRU1C
TFkpCiAKQEAgLTM5NSw2ICszOTYsMTEgQEAgRXhwZWN0ZWQ8UGFnZUNvdW50LCBNZW1vcnk6Okdy
b3dGYWlsUmVhc29uPiBNZW1vcnk6Omdyb3coUGFnZUNvdW50IGRlbHRhKQogCiAgICAgYXV0byBz
dWNjZXNzID0gWyZdICgpIHsKICAgICAgICAgbV9ncm93U3VjY2Vzc0NhbGxiYWNrKEdyb3dTdWNj
ZXNzVGFnLCBvbGRQYWdlQ291bnQsIG5ld1BhZ2VDb3VudCk7CisgICAgICAgIC8vIFVwZGF0ZSBj
YWNoZSBmb3IgaW5zdGFuY2UKKyAgICAgICAgZm9yIChhdXRvJiBpbnN0YW5jZSA6IG1faW5zdGFu
Y2VzKSB7CisgICAgICAgICAgICBpZiAoaW5zdGFuY2UuZ2V0KCkgIT0gbnVsbHB0cikKKyAgICAg
ICAgICAgICAgICBpbnN0YW5jZS5nZXQoKS0+dXBkYXRlQ2FjaGVkTWVtb3J5KCk7CisgICAgICAg
IH0KICAgICAgICAgcmV0dXJuIG9sZFBhZ2VDb3VudDsKICAgICB9OwogCkBAIC00NTcsNiArNDYz
LDExIEBAIEV4cGVjdGVkPFBhZ2VDb3VudCwgTWVtb3J5OjpHcm93RmFpbFJlYXNvbj4gTWVtb3J5
Ojpncm93KFBhZ2VDb3VudCBkZWx0YSkKICAgICByZXR1cm4gb2xkUGFnZUNvdW50OwogfQogCit2
b2lkIE1lbW9yeTo6cmVnaXN0ZXJJbnN0YW5jZShJbnN0YW5jZSogaW5zdGFuY2UpCit7CisgICAg
bV9pbnN0YW5jZXMuYXBwZW5kKGluc3RhbmNlLT5jcmVhdGVXZWFrUHRyKCkpOworfQorCiB2b2lk
IE1lbW9yeTo6ZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAogewogICAgIG91dC5wcmludCgi
TWVtb3J5IGF0ICIsIFJhd1BvaW50ZXIobV9tZW1vcnkpLCAiLCBzaXplICIsIG1fc2l6ZSwgIkIg
Y2FwYWNpdHkgIiwgbV9tYXBwZWRDYXBhY2l0eSwgIkIsIGluaXRpYWwgIiwgbV9pbml0aWFsLCAi
IG1heGltdW0gIiwgbV9tYXhpbXVtLCAiIG1vZGUgIiwgbWFrZVN0cmluZyhtX21vZGUpKTsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21NZW1vcnkuaCBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21NZW1vcnkuaAppbmRleCBmZmY5NGViOTIxM2RiNGNk
ZmVkMzhlM2MzYzI2NmYwOTllOTI5ODkzLi4yMjBjMGNmMTlhNzY1YWI2YjgzOGFjODhjZWVkN2Yx
NDdiYzI2MWE4IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTWVt
b3J5LmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU1lbW9yeS5oCkBAIC0z
NCw2ICszNCw4IEBACiAjaW5jbHVkZSA8d3RmL0Z1bmN0aW9uLmg+CiAjaW5jbHVkZSA8d3RmL1Jl
ZkNvdW50ZWQuaD4KICNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CisjaW5jbHVkZSA8d3RmL1ZlY3Rv
ci5oPgorI2luY2x1ZGUgPHd0Zi9XZWFrUHRyLmg+CiAKIG5hbWVzcGFjZSBXVEYgewogY2xhc3Mg
UHJpbnRTdHJlYW07CkBAIC00Myw2ICs0NSw4IEBAIG5hbWVzcGFjZSBKU0MgewogCiBuYW1lc3Bh
Y2UgV2FzbSB7CiAKK2NsYXNzIEluc3RhbmNlOworCiBjbGFzcyBNZW1vcnkgOiBwdWJsaWMgUmVm
Q291bnRlZDxNZW1vcnk+IHsKICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShNZW1vcnkpOwogICAg
IFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwpAQCAtNjYsNiArNzAsNyBAQCBwdWJsaWM6CiAKICAg
ICB2b2lkKiBtZW1vcnkoKSBjb25zdCB7IHJldHVybiBtX21lbW9yeTsgfQogICAgIHNpemVfdCBz
aXplKCkgY29uc3QgeyByZXR1cm4gbV9zaXplOyB9CisgICAgc2l6ZV90IGluZGV4aW5nTWFzaygp
IHsgcmV0dXJuIG1faW5kZXhpbmdNYXNrOyB9CiAgICAgUGFnZUNvdW50IHNpemVJblBhZ2VzKCkg
Y29uc3QgeyByZXR1cm4gUGFnZUNvdW50Ojpmcm9tQnl0ZXMobV9zaXplKTsgfQogCiAgICAgUGFn
ZUNvdW50IGluaXRpYWwoKSBjb25zdCB7IHJldHVybiBtX2luaXRpYWw7IH0KQEAgLTgwLDYgKzg1
LDcgQEAgcHVibGljOgogICAgICAgICBPdXRPZk1lbW9yeSwKICAgICB9OwogICAgIEV4cGVjdGVk
PFBhZ2VDb3VudCwgR3Jvd0ZhaWxSZWFzb24+IGdyb3coUGFnZUNvdW50KTsKKyAgICB2b2lkIHJl
Z2lzdGVySW5zdGFuY2UoSW5zdGFuY2UqKTsKIAogICAgIHZvaWQgY2hlY2soKSB7ICBBU1NFUlQo
IWRlbGV0aW9uSGFzQmVndW4oKSk7IH0KIApAQCAtOTIsNyArOTgsNiBAQCBwcml2YXRlOgogICAg
IE1lbW9yeSh2b2lkKiBtZW1vcnksIFBhZ2VDb3VudCBpbml0aWFsLCBQYWdlQ291bnQgbWF4aW11
bSwgc2l6ZV90IG1hcHBlZENhcGFjaXR5LCBNZW1vcnlNb2RlLCBXVEY6OkZ1bmN0aW9uPHZvaWQo
Tm90aWZ5UHJlc3N1cmUpPiYmIG5vdGlmeU1lbW9yeVByZXNzdXJlLCBXVEY6OkZ1bmN0aW9uPHZv
aWQoU3luY1RyeVRvUmVjbGFpbSk+JiYgc3luY1RyeVRvUmVjbGFpbU1lbW9yeSwgV1RGOjpGdW5j
dGlvbjx2b2lkKEdyb3dTdWNjZXNzLCBQYWdlQ291bnQsIFBhZ2VDb3VudCk+JiYgZ3Jvd1N1Y2Nl
c3NDYWxsYmFjayk7CiAgICAgTWVtb3J5KFBhZ2VDb3VudCBpbml0aWFsLCBQYWdlQ291bnQgbWF4
aW11bSwgV1RGOjpGdW5jdGlvbjx2b2lkKE5vdGlmeVByZXNzdXJlKT4mJiBub3RpZnlNZW1vcnlQ
cmVzc3VyZSwgV1RGOjpGdW5jdGlvbjx2b2lkKFN5bmNUcnlUb1JlY2xhaW0pPiYmIHN5bmNUcnlU
b1JlY2xhaW1NZW1vcnksIFdURjo6RnVuY3Rpb248dm9pZChHcm93U3VjY2VzcywgUGFnZUNvdW50
LCBQYWdlQ291bnQpPiYmIGdyb3dTdWNjZXNzQ2FsbGJhY2spOwogCi0gICAgLy8gRklYTUU6IHdl
IGNhY2hlIHRoZXNlIG9uIHRoZSBpbnN0YW5jZXMgdG8gYXZvaWQgYSBsb2FkIG9uIGluc3RhbmNl
LT5pbnN0YW5jZSBjYWxscy4gVGhpcyB3aWxsIHJlcXVpcmUgdXBkYXRpbmcgYWxsIHRoZSBpbnN0
YW5jZXMgd2hlbiBncm93IGlzIGNhbGxlZC4gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTE3NzMwNQogICAgIHZvaWQqIG1fbWVtb3J5IHsgbnVsbHB0ciB9OwogICAgIHNp
emVfdCBtX3NpemUgeyAwIH07CiAgICAgc2l6ZV90IG1faW5kZXhpbmdNYXNrIHsgMCB9OwpAQCAt
MTAzLDYgKzEwOCw3IEBAIHByaXZhdGU6CiAgICAgV1RGOjpGdW5jdGlvbjx2b2lkKE5vdGlmeVBy
ZXNzdXJlKT4gbV9ub3RpZnlNZW1vcnlQcmVzc3VyZTsKICAgICBXVEY6OkZ1bmN0aW9uPHZvaWQo
U3luY1RyeVRvUmVjbGFpbSk+IG1fc3luY1RyeVRvUmVjbGFpbU1lbW9yeTsKICAgICBXVEY6OkZ1
bmN0aW9uPHZvaWQoR3Jvd1N1Y2Nlc3MsIFBhZ2VDb3VudCwgUGFnZUNvdW50KT4gbV9ncm93U3Vj
Y2Vzc0NhbGxiYWNrOworICAgIFZlY3RvcjxXZWFrUHRyPEluc3RhbmNlPj4gbV9pbnN0YW5jZXM7
CiB9OwogCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6V2FzbQpkaWZmIC0tZ2l0IGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3dhc20vanMvSlNUb1dhc20uY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3dhc20vanMvSlNUb1dhc20uY3BwCmluZGV4IDEwYjQ2Yzk1NGE4YTkyOGY0MDJmM2QzOTUzMzBk
ZGNlNmI3Nzg3OTYuLjM4ZjY5MGNmMjQ2Nzk3M2RkOTI2YjU2MmI2MGQ4OTVmYTdiNWI2ODUgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTVG9XYXNtLmNwcAorKysg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1RvV2FzbS5jcHAKQEAgLTE3NSwyNCAr
MTc1LDIxIEBAIHN0ZDo6dW5pcXVlX3B0cjxJbnRlcm5hbEZ1bmN0aW9uPiBjcmVhdGVKU1RvV2Fz
bVdyYXBwZXIoQ29tcGlsYXRpb25Db250ZXh0JiBjb21wCiAgICAgaWYgKCEhaW5mby5tZW1vcnkp
IHsKICAgICAgICAgR1BSUmVnIGJhc2VNZW1vcnkgPSBwaW5uZWRSZWdzLmJhc2VNZW1vcnlQb2lu
dGVyOwogCi0gICAgICAgIGlmICghQ29udGV4dDo6dXNlRmFzdFRMUygpKQotICAgICAgICAgICAg
aml0LmxvYWRQdHIoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKHdhc21Db250ZXh0SW5zdGFuY2VHUFIs
IEluc3RhbmNlOjpvZmZzZXRPZk1lbW9yeSgpKSwgYmFzZU1lbW9yeSk7Ci0gICAgICAgIGVsc2Ug
eworICAgICAgICBpZiAoQ29udGV4dDo6dXNlRmFzdFRMUygpKQogICAgICAgICAgICAgaml0Lmxv
YWRXYXNtQ29udGV4dEluc3RhbmNlKGJhc2VNZW1vcnkpOwotICAgICAgICAgICAgaml0LmxvYWRQ
dHIoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKGJhc2VNZW1vcnksIEluc3RhbmNlOjpvZmZzZXRPZk1l
bW9yeSgpKSwgYmFzZU1lbW9yeSk7Ci0gICAgICAgIH0KIAorICAgICAgICBHUFJSZWcgbWVtb3J5
R1JQID0gQ29udGV4dDo6dXNlRmFzdFRMUygpID8gYmFzZU1lbW9yeSA6IHdhc21Db250ZXh0SW5z
dGFuY2VHUFI7CiAgICAgICAgIGlmIChtb2RlICE9IE1lbW9yeU1vZGU6OlNpZ25hbGluZykgewot
ICAgICAgICAgICAgaml0LmxvYWRQdHIoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKGJhc2VNZW1vcnks
IFdhc206Ok1lbW9yeTo6b2Zmc2V0T2ZJbmRleGluZ01hc2soKSksIHBpbm5lZFJlZ3MuaW5kZXhp
bmdNYXNrKTsKKyAgICAgICAgICAgIGppdC5sb2FkUHRyKENDYWxsSGVscGVyczo6QWRkcmVzcyht
ZW1vcnlHUlAsIFdhc206Okluc3RhbmNlOjpvZmZzZXRPZkNhY2hlZEluZGV4aW5nTWFzaygpKSwg
cGlubmVkUmVncy5pbmRleGluZ01hc2spOwogICAgICAgICAgICAgY29uc3QgYXV0byYgc2l6ZVJl
Z3MgPSBwaW5uZWRSZWdzLnNpemVSZWdpc3RlcnM7CiAgICAgICAgICAgICBBU1NFUlQoc2l6ZVJl
Z3Muc2l6ZSgpID49IDEpOwogICAgICAgICAgICAgQVNTRVJUKCFzaXplUmVnc1swXS5zaXplT2Zm
c2V0KTsgLy8gVGhlIGZvbGxvd2luZyBjb2RlIGFzc3VtZXMgd2Ugc3RhcnQgYXQgMCwgYW5kIGNh
bGN1bGF0ZXMgc3Vic2VxdWVudCBzaXplIHJlZ2lzdGVycyByZWxhdGl2ZSB0byAwLgotICAgICAg
ICAgICAgaml0LmxvYWRQdHIoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKGJhc2VNZW1vcnksIFdhc206
Ok1lbW9yeTo6b2Zmc2V0T2ZTaXplKCkpLCBzaXplUmVnc1swXS5zaXplUmVnaXN0ZXIpOworICAg
ICAgICAgICAgaml0LmxvYWRQdHIoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKG1lbW9yeUdSUCwgV2Fz
bTo6SW5zdGFuY2U6Om9mZnNldE9mQ2FjaGVkTWVtb3J5U2l6ZSgpKSwgc2l6ZVJlZ3NbMF0uc2l6
ZVJlZ2lzdGVyKTsKICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDE7IGkgPCBzaXplUmVn
cy5zaXplKCk7ICsraSkKICAgICAgICAgICAgICAgICBqaXQuYWRkNjQoQ0NhbGxIZWxwZXJzOjpU
cnVzdGVkSW1tMzIoLXNpemVSZWdzW2ldLnNpemVPZmZzZXQpLCBzaXplUmVnc1swXS5zaXplUmVn
aXN0ZXIsIHNpemVSZWdzW2ldLnNpemVSZWdpc3Rlcik7CiAgICAgICAgIH0KIAotICAgICAgICBq
aXQubG9hZFB0cihDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoYmFzZU1lbW9yeSwgV2FzbTo6TWVtb3J5
OjpvZmZzZXRPZk1lbW9yeSgpKSwgYmFzZU1lbW9yeSk7CisgICAgICAgIGppdC5sb2FkUHRyKEND
YWxsSGVscGVyczo6QWRkcmVzcyhtZW1vcnlHUlAsIFdhc206Okluc3RhbmNlOjpvZmZzZXRPZkNh
Y2hlZE1lbW9yeSgpKSwgYmFzZU1lbW9yeSk7CiAgICAgfQogCiAgICAgQ0NhbGxIZWxwZXJzOjpD
YWxsIGNhbGwgPSBqaXQudGhyZWFkU2FmZVBhdGNoYWJsZU5lYXJDYWxsKCk7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseU1vZHVsZVJlY29yZC5j
cHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseU1vZHVsZVJlY29y
ZC5jcHAKaW5kZXggZWYwYzhjNWE0YjY1ZGQyNTAyYWI4MDYyOWM0YzU0ZDQwYWZhNGQ3Ni4uZDRm
MDE2MjlkOWNmMjllNDk5OTg0ZDNhZGVlN2UzZGY1Y2JiZmVjNiAxMDA2NDQKLS0tIGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlNb2R1bGVSZWNvcmQuY3BwCisrKyBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5TW9kdWxlUmVjb3JkLmNw
cApAQCAtMjIzLDggKzIyMyw3IEBAIEpTVmFsdWUgV2ViQXNzZW1ibHlNb2R1bGVSZWNvcmQ6OmV2
YWx1YXRlKEV4ZWNTdGF0ZSogZXhlYykKICAgICBKU1dlYkFzc2VtYmx5VGFibGUqIHRhYmxlID0g
bV9pbnN0YW5jZS0+dGFibGUoKTsKIAogICAgIGNvbnN0IFZlY3RvcjxXYXNtOjpTZWdtZW50OjpQ
dHI+JiBkYXRhID0gbW9kdWxlSW5mb3JtYXRpb24uZGF0YTsKLSAgICBKU1dlYkFzc2VtYmx5TWVt
b3J5KiBqc01lbW9yeSA9IG1faW5zdGFuY2UtPm1lbW9yeSgpOwotCisgICAgCiAgICAgc3RkOjpv
cHRpb25hbDxKU1ZhbHVlPiBleGNlcHRpb247CiAKICAgICBhdXRvIGZvckVhY2hFbGVtZW50ID0g
WyZdIChhdXRvIGZuKSB7CkBAIC0yNTAsOCArMjQ5LDggQEAgSlNWYWx1ZSBXZWJBc3NlbWJseU1v
ZHVsZVJlY29yZDo6ZXZhbHVhdGUoRXhlY1N0YXRlKiBleGVjKQogICAgIH07CiAKICAgICBhdXRv
IGZvckVhY2hTZWdtZW50ID0gWyZdIChhdXRvIGZuKSB7Ci0gICAgICAgIHVpbnQ4X3QqIG1lbW9y
eSA9IHJlaW50ZXJwcmV0X2Nhc3Q8dWludDhfdCo+KGpzTWVtb3J5LT5tZW1vcnkoKS5tZW1vcnko
KSk7Ci0gICAgICAgIHVpbnQ2NF90IHNpemVJbkJ5dGVzID0ganNNZW1vcnktPm1lbW9yeSgpLnNp
emUoKTsKKyAgICAgICAgdWludDhfdCogbWVtb3J5ID0gcmVpbnRlcnByZXRfY2FzdDx1aW50OF90
Kj4obV9pbnN0YW5jZS0+aW5zdGFuY2UoKS5jYWNoZWRNZW1vcnkoKSk7CisgICAgICAgIHVpbnQ2
NF90IHNpemVJbkJ5dGVzID0gbV9pbnN0YW5jZS0+aW5zdGFuY2UoKS5jYWNoZWRNZW1vcnlTaXpl
KCk7CiAKICAgICAgICAgZm9yIChjb25zdCBXYXNtOjpTZWdtZW50OjpQdHImIHNlZ21lbnQgOiBk
YXRhKSB7CiAgICAgICAgICAgICB1aW50MzJfdCBvZmZzZXQgPSBzZWdtZW50LT5vZmZzZXQuaXNH
bG9iYWxJbXBvcnQoKQpkaWZmIC0tZ2l0IGEvSlNUZXN0cy9DaGFuZ2VMb2cgYi9KU1Rlc3RzL0No
YW5nZUxvZwppbmRleCAzMmUwN2UyOTY0ZmE3ODIyOWZkYWU3MWYxNDhmMmI1NTk4ODdlNTA3Li41
YjliMjUwZmIyNjE0MGM4Njk1NjVmOTZkYWM2NGE2ZjM2ZDcxNjhiIDEwMDY0NAotLS0gYS9KU1Rl
c3RzL0NoYW5nZUxvZworKysgYi9KU1Rlc3RzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE3IEBACisy
MDE4LTAxLTA3ICBPbGVrc2FuZHIgU2thY2hrb3YgIDxnc2thY2hrb3ZAZ21haWwuY29tPgorCisg
ICAgICAgIFdlYkFzc2VtYmx5OiBjYWNoZSBtZW1vcnkgYWRkcmVzcyAvIHNpemUgb24gaW5zdGFu
Y2UKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3NzMw
NQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogd2Fz
bS9mdW5jdGlvbi10ZXN0cy9tZW1vcnktcmV1c2UuanM6IEFkZGVkLgorICAgICAgICAoY3JlYXRl
V2FzbUluc3RhbmNlKToKKyAgICAgICAgKGRvQ2hlY2tUcmFwKToKKyAgICAgICAgKGRvTWVtb3J5
R3Jvdyk6CisgICAgICAgIChkb0NoZWNrKToKKyAgICAgICAgKGNoZWNrV2FzbUluc3RhbmNlc1dp
dGhTaGFyZWRNZW1vcnkpOgorCiAyMDE4LTAxLTA1ICBSeWFuIEhhZGRhZCAgPHJ5YW5oYWRkYWRA
YXBwbGUuY29tPgogCiAgICAgICAgIFVucmV2aWV3ZWQsIGF0dGVtcHQgdG8gZml4IHRlc3QyNjIg
YWZ0ZXIgcjIyNjM4Ni4KZGlmZiAtLWdpdCBhL0pTVGVzdHMvd2FzbS9mdW5jdGlvbi10ZXN0cy9t
ZW1vcnktcmV1c2UuanMgYi9KU1Rlc3RzL3dhc20vZnVuY3Rpb24tdGVzdHMvbWVtb3J5LXJldXNl
LmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAuLmY1ZjM5NWUxYmY0NDM0MDgxY2EwMDYzNGVhNmQwYzEwM2Y0NTQxNmEK
LS0tIC9kZXYvbnVsbAorKysgYi9KU1Rlc3RzL3dhc20vZnVuY3Rpb24tdGVzdHMvbWVtb3J5LXJl
dXNlLmpzCkBAIC0wLDAgKzEsMTEzIEBACitpbXBvcnQgQnVpbGRlciBmcm9tICcuLi9CdWlsZGVy
LmpzJworaW1wb3J0ICogYXMgYXNzZXJ0IGZyb20gJy4uL2Fzc2VydC5qcycKKworY29uc3QgY291
bnQgPSAxMDsKK2NvbnN0IHBhZ2VzID0gMTI7Citjb25zdCBtZW1vcnlEZXNjcmlwdGlvbiA9IHtp
bml0aWFsOjF9OworY29uc3QgcGFnZVNpemUgPSA2NCAqIDEwMjQ7CisKK2Z1bmN0aW9uIGNyZWF0
ZVdhc21JbnN0YW5jZShtZW1vcnkpIHsKKyAgICBjb25zdCBidWlsZGVyID0gbmV3IEJ1aWxkZXIo
KQorICAgICAgICAuVHlwZSgpLkVuZCgpCisgICAgICAgIC5JbXBvcnQoKQorICAgICAgICAgICAg
Lk1lbW9yeSgiaW1wIiwgIm1lbW9yeSIsIG1lbW9yeURlc2NyaXB0aW9uKQorICAgICAgICAuRW5k
KCkKKyAgICAgICAgLkZ1bmN0aW9uKCkuRW5kKCkKKyAgICAgICAgLkV4cG9ydCgpCisgICAgICAg
ICAgICAuRnVuY3Rpb24oImN1cnJlbnQiKQorICAgICAgICAgICAgLkZ1bmN0aW9uKCJnZXQiKQor
ICAgICAgICAgICAgLkZ1bmN0aW9uKCJncm93IikKKyAgICAgICAgLkVuZCgpCisgICAgICAgIC5D
b2RlKCkKKyAgICAgICAgICAgIC5GdW5jdGlvbigiY3VycmVudCIsIHsgcGFyYW1zOiBbXSwgcmV0
OiAiaTMyIiB9KQorICAgICAgICAgICAgICAgIC5DdXJyZW50TWVtb3J5KDApCisgICAgICAgICAg
ICAgICAgLlJldHVybigpCisgICAgICAgICAgICAuRW5kKCkKKyAgICAgICAgICAgIC5GdW5jdGlv
bigiZ2V0IiwgeyBwYXJhbXM6IFsiaTMyIl0sIHJldDogImkzMiIgfSkKKyAgICAgICAgICAgICAg
ICAuR2V0TG9jYWwoMCkKKyAgICAgICAgICAgICAgICAuSTMyTG9hZCgyLCAwKQorICAgICAgICAg
ICAgICAgIC5SZXR1cm4oKQorICAgICAgICAgICAgLkVuZCgpCisgICAgICAgICAgICAuRnVuY3Rp
b24oImdyb3ciLCB7IHBhcmFtczogWyJpMzIiXSwgcmV0OiAiaTMyIiB9KQorICAgICAgICAgICAg
ICAgIC5HZXRMb2NhbCgwKQorICAgICAgICAgICAgICAgIC5Hcm93TWVtb3J5KDApCisgICAgICAg
ICAgICAgICAgLlJldHVybigpCisgICAgICAgICAgICAuRW5kKCkKKyAgICAgICAgLkVuZCgpOwor
CisgICAgY29uc3QgYmluID0gYnVpbGRlci5XZWJBc3NlbWJseSgpLmdldCgpOworICAgIGNvbnN0
IG1vZHVsZSA9IG5ldyBXZWJBc3NlbWJseS5Nb2R1bGUoYmluKTsKKyAgICByZXR1cm4gbmV3IFdl
YkFzc2VtYmx5Lkluc3RhbmNlKG1vZHVsZSwge2ltcDoge21lbW9yeX19KTsKK30KKworZnVuY3Rp
b24gZG9GaWxsTWVtb3J5KG1lbSwgbGVuZ3RoKSB7CisgICAgY29uc3QgYnVmID0gbmV3IFVpbnQz
MkFycmF5KG1lbS5idWZmZXIpOworCisgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBsZW5ndGg7ICsr
aSkgeworICAgICAgICBidWZbaV0gPSBpICsgMTsKKyAgICB9Cit9CisKK2Z1bmN0aW9uIGRvQ2hl
Y2tUcmFwKGluc3RhbmNlcywgbWVtLCBudW1QYWdlcywgbGVuZ3RoKSB7CisgICAgY29uc3QgYnVm
ID0gbmV3IFVpbnQzMkFycmF5KG1lbS5idWZmZXIpOworCisgICAgZm9yIChsZXQgaW5zdGFuY2Ug
b2YgaW5zdGFuY2VzKSB7CisgICAgICAgIGNvbnN0IGZvbyA9IGluc3RhbmNlLmV4cG9ydHMuZ2V0
OworICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7CisgICAgICAgICAg
ICBhc3NlcnQuZXEoZm9vKGkpLCBidWZbaV0pOworICAgICAgICB9CisgICAgICAgIGFzc2VydC50
aHJvd3MoKCkgPT4gZm9vKG51bVBhZ2VzICogcGFnZVNpemUgKyAxKSwgV2ViQXNzZW1ibHkuUnVu
dGltZUVycm9yLCAiT3V0IG9mIGJvdW5kcyBtZW1vcnkgYWNjZXNzIik7CisgICAgfQorfQorCitm
dW5jdGlvbiBkb0NoZWNrTm9UcmFwKGluc3RhbmNlcywgbWVtLCBudW1QYWdlcywgbGVuZ3RoKSB7
CisgICAgY29uc3QgYnVmID0gbmV3IFVpbnQzMkFycmF5KG1lbS5idWZmZXIpOworCisgICAgZm9y
IChsZXQgaW5zdGFuY2Ugb2YgaW5zdGFuY2VzKSB7CisgICAgICAgIGNvbnN0IGZvbyA9IGluc3Rh
bmNlLmV4cG9ydHMuZ2V0OworICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGxlbmd0aDsgaSsr
KSB7CisgICAgICAgICAgICBhc3NlcnQuZXEoZm9vKGkpLCBidWZbaV0pOworICAgICAgICB9Cisg
ICAgICAgIGFzc2VydC5lcShmb28obnVtUGFnZXMgKiBwYWdlU2l6ZSArIDEpLCAwKTsKKyAgICB9
Cit9CisKK2Z1bmN0aW9uIGRvTWVtb3J5R3JvdyhpbnN0YW5jZXMpIHsKKyAgICBjb25zdCBpbnN0
YW5jZSA9IGluc3RhbmNlc1swXTsgLy8gVGFrZSBmaXJzdCBpbnN0YW5jZSBhbmQgZ3JvdyBzaGFy
ZWQgbWVtb3J5CisgICAgaW5zdGFuY2UuZXhwb3J0cy5ncm93KDEpOworfQorCitmdW5jdGlvbiBk
b0NoZWNrKG1lbSwgaW5zdGFuY2VzLCBudW1QYWdlcykgeworICAgIGNvbnN0IGxlbmd0aCA9IG1l
bS5idWZmZXIubGVuZ3RoIC8gNDsKKyAgICAKKyAgICBkb0ZpbGxNZW1vcnkobWVtLCBsZW5ndGgp
OworICAgIGRvQ2hlY2tUcmFwKGluc3RhbmNlcywgbWVtLCBudW1QYWdlcywgbGVuZ3RoKTsKKyAg
ICBkb01lbW9yeUdyb3coaW5zdGFuY2VzKTsKKyAgICBkb0NoZWNrTm9UcmFwKGluc3RhbmNlcywg
bWVtLCBudW1QYWdlcywgbGVuZ3RoKTsKK30KKworZnVuY3Rpb24gY2hlY2tXYXNtSW5zdGFuY2Vz
V2l0aFNoYXJlZE1lbW9yeSgpIHsKKyAgICBjb25zdCBtZW0gPSBuZXcgV2ViQXNzZW1ibHkuTWVt
b3J5KG1lbW9yeURlc2NyaXB0aW9uKTsKKworICAgIGNvbnN0IGluc3RhbmNlcyA9IFtdOworICAg
IGZvciAobGV0IGkgPSAwOyBpIDwgY291bnQ7IGkrKykgeworICAgICAgICBpbnN0YW5jZXMucHVz
aChjcmVhdGVXYXNtSW5zdGFuY2UobWVtKSk7CisgICAgfQorCisgICAgZm9yKGxldCBpID0gMTsg
aSA8IHBhZ2VzOyBpKyspIHsKKyAgICAgICAgZG9DaGVjayhtZW0sIGluc3RhbmNlcywgaSk7Cisg
ICAgfQorCisgICAgbGV0IGluc3RhbmNlOworICAgIGZvciAobGV0IGkgPSAwOyBpIDwgY291bnQ7
IGkrKykgeworICAgICAgICBpbnN0YW5jZSA9IGluc3RhbmNlcy5zaGlmdCgpOworICAgIH0KKwor
ICAgIGZ1bGxHQygpOworCisgICAgY29uc3Qgc3Vydml2ZWRJbnN0YW5jZXMgPSAgWyBpbnN0YW5j
ZSBdOyAvLyBTaG91bGQgc3Vydml2ZSBvbmx5IG9uZSBpbnN0YW5jZSBhZnRlciBmdWxsIEdDCisK
KyAgICBkb0NoZWNrKG1lbSwgc3Vydml2ZWRJbnN0YW5jZXMsIHBhZ2VzKTsgLy8gUmVjaGVjayBv
bmx5IGZvciBzdXJ2aWUgaW5zdGFuY2VzCit9CisKK2NoZWNrV2FzbUluc3RhbmNlc1dpdGhTaGFy
ZWRNZW1vcnkoKTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>331117</attachid>
            <date>2018-01-11 14:14:14 -0800</date>
            <delta_ts>2018-02-23 12:54:59 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-177305-20180112001412.patch</filename>
            <type>text/plain</type>
            <size>23015</size>
            <attacher name="GSkachkov">gskachkov</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjI2Nzk2CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCA0
ODQwYzY5ZmU3ZTdmNjMyMWEwNDc5NTg5Yjg1NjFiN2I5M2QyNThhLi5hYzg5ODFhYTJmMjZhZjE1
YTk3YWY3NzFmOWQwYmYwMWEwZjcwNjJlIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwzOSBAQAorMjAxOC0wMS0xMSAgT2xla3NhbmRyIFNrYWNoa292ICA8Z3NrYWNoa292QGdt
YWlsLmNvbT4KKworICAgICAgICBXZWJBc3NlbWJseTogY2FjaGUgbWVtb3J5IGFkZHJlc3MgLyBz
aXplIG9uIGluc3RhbmNlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0xNzczMDUKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKwor
ICAgICAgICBDYWNoZSBtZW1vcnkgYWRkcmVzcy9zaXplIGluIHdhc206SW5zdGFuY2UgdG8gYXZv
aWQgbG9hZCB3YXNtOk1lbW9yeSAKKyAgICAgICAgb2JqZWN0IGR1cmluZyBhY2Nlc3MgdG8gbWVt
b3J5IGFuZCBtZW1vcnkgc2l6ZSBwcm9wZXJ0eSBpbiBKaVQKKworICAgICAgICAqIHdhc20vV2Fz
bUIzSVJHZW5lcmF0b3IuY3BwOgorICAgICAgICAoSlNDOjpXYXNtOjpCM0lSR2VuZXJhdG9yOjpy
ZXN0b3JlV2ViQXNzZW1ibHlHbG9iYWxTdGF0ZSk6CisgICAgICAgIChKU0M6Oldhc206OkIzSVJH
ZW5lcmF0b3I6OmFkZEN1cnJlbnRNZW1vcnkpOgorICAgICAgICAoSlNDOjpXYXNtOjpCM0lSR2Vu
ZXJhdG9yOjphZGRDYWxsSW5kaXJlY3QpOgorICAgICAgICAqIHdhc20vV2FzbUJpbmRpbmcuY3Bw
OgorICAgICAgICAoSlNDOjpXYXNtOjp3YXNtVG9XYXNtKToKKyAgICAgICAgKiB3YXNtL1dhc21J
bnN0YW5jZS5oOgorICAgICAgICAoSlNDOjpXYXNtOjpJbnN0YW5jZTo6Y2FjaGVkTWVtb3J5IGNv
bnN0KToKKyAgICAgICAgKEpTQzo6V2FzbTo6SW5zdGFuY2U6OmNhY2hlZE1lbW9yeVNpemUgY29u
c3QpOgorICAgICAgICAoSlNDOjpXYXNtOjpJbnN0YW5jZTo6Y3JlYXRlV2Vha1B0cik6CisgICAg
ICAgIChKU0M6Oldhc206Okluc3RhbmNlOjpzZXRNZW1vcnkpOgorICAgICAgICAoSlNDOjpXYXNt
OjpJbnN0YW5jZTo6dXBkYXRlQ2FjaGVkTWVtb3J5KToKKyAgICAgICAgKEpTQzo6V2FzbTo6SW5z
dGFuY2U6Om9mZnNldE9mQ2FjaGVkTWVtb3J5KToKKyAgICAgICAgKEpTQzo6V2FzbTo6SW5zdGFu
Y2U6Om9mZnNldE9mQ2FjaGVkTWVtb3J5U2l6ZSk6CisgICAgICAgIChKU0M6Oldhc206Okluc3Rh
bmNlOjpvZmZzZXRPZkNhY2hlZEluZGV4aW5nTWFzayk6CisgICAgICAgIChKU0M6Oldhc206Oklu
c3RhbmNlOjphbGxvY2F0aW9uU2l6ZSk6CisgICAgICAgICogd2FzbS9XYXNtTWVtb3J5LmNwcDoK
KyAgICAgICAgKEpTQzo6V2FzbTo6TWVtb3J5Ojpncm93KToKKyAgICAgICAgKEpTQzo6V2FzbTo6
TWVtb3J5OjpyZWdpc3Rlckluc3RhbmNlKToKKyAgICAgICAgKiB3YXNtL1dhc21NZW1vcnkuaDoK
KyAgICAgICAgKEpTQzo6V2FzbTo6TWVtb3J5OjppbmRleGluZ01hc2spOgorICAgICAgICAqIHdh
c20vanMvSlNUb1dhc20uY3BwOgorICAgICAgICAoSlNDOjpXYXNtOjpjcmVhdGVKU1RvV2FzbVdy
YXBwZXIpOgorICAgICAgICAqIHdhc20vanMvV2ViQXNzZW1ibHlNb2R1bGVSZWNvcmQuY3BwOgor
ICAgICAgICAoSlNDOjpXZWJBc3NlbWJseU1vZHVsZVJlY29yZDo6ZXZhbHVhdGUpOgorCiAyMDE4
LTAxLTExICBNaWNoYWVsIFNhYm9mZiAgPG1zYWJvZmZAYXBwbGUuY29tPgogCiAgICAgICAgIEVu
c3VyZSB0aGVyZSBhcmUgbm8gdW5zYWZlIHVzZXMgb2YgTWFjcm9Bc3NlbWJsZXJBUk02NDo6ZGF0
YVRlbXBSZWdpc3RlcgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2Fz
bUIzSVJHZW5lcmF0b3IuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUIzSVJH
ZW5lcmF0b3IuY3BwCmluZGV4IDVmYTM4NjYxZWFkZjhkNzZiN2FiNzk5YjBlOTQwNTM0NWFlYmNk
MTQuLjJlZTMzZGYyNjFjYjdkY2QyYWM2NTBhYTQ1MTYzNDk1NmRiNzNjZmEgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21CM0lSR2VuZXJhdG9yLmNwcAorKysgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQjNJUkdlbmVyYXRvci5jcHAKQEAgLTQ4NSwx
MyArNDg1LDEyIEBAIHZvaWQgQjNJUkdlbmVyYXRvcjo6cmVzdG9yZVdlYkFzc2VtYmx5R2xvYmFs
U3RhdGUoUmVzdG9yZUNhY2hlZFN0YWNrTGltaXQgcmVzdG9yCiAKICAgICAgICAgcGF0Y2hwb2lu
dC0+c2V0R2VuZXJhdG9yKFtwaW5uZWRSZWdzXSAoQ0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0IEIz
OjpTdGFja21hcEdlbmVyYXRpb25QYXJhbXMmIHBhcmFtcykgewogICAgICAgICAgICAgR1BSUmVn
IGJhc2VNZW1vcnkgPSBwaW5uZWRSZWdzLT5iYXNlTWVtb3J5UG9pbnRlcjsKLSAgICAgICAgICAg
IGppdC5sb2FkUHRyKENDYWxsSGVscGVyczo6QWRkcmVzcyhwYXJhbXNbMF0uZ3ByKCksIEluc3Rh
bmNlOjpvZmZzZXRPZk1lbW9yeSgpKSwgYmFzZU1lbW9yeSk7CiAgICAgICAgICAgICBjb25zdCBh
dXRvJiBzaXplUmVncyA9IHBpbm5lZFJlZ3MtPnNpemVSZWdpc3RlcnM7CiAgICAgICAgICAgICBB
U1NFUlQoc2l6ZVJlZ3Muc2l6ZSgpID49IDEpOwogICAgICAgICAgICAgQVNTRVJUKCFzaXplUmVn
c1swXS5zaXplT2Zmc2V0KTsgLy8gVGhlIGZvbGxvd2luZyBjb2RlIGFzc3VtZXMgd2Ugc3RhcnQg
YXQgMCwgYW5kIGNhbGN1bGF0ZXMgc3Vic2VxdWVudCBzaXplIHJlZ2lzdGVycyByZWxhdGl2ZSB0
byAwLgotICAgICAgICAgICAgaml0LmxvYWRQdHIoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKGJhc2VN
ZW1vcnksIE1lbW9yeTo6b2Zmc2V0T2ZTaXplKCkpLCBzaXplUmVnc1swXS5zaXplUmVnaXN0ZXIp
OwotICAgICAgICAgICAgaml0LmxvYWRQdHIoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKGJhc2VNZW1v
cnksIE1lbW9yeTo6b2Zmc2V0T2ZJbmRleGluZ01hc2soKSksIHBpbm5lZFJlZ3MtPmluZGV4aW5n
TWFzayk7Ci0gICAgICAgICAgICBqaXQubG9hZFB0cihDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoYmFz
ZU1lbW9yeSwgTWVtb3J5OjpvZmZzZXRPZk1lbW9yeSgpKSwgYmFzZU1lbW9yeSk7CisgICAgICAg
ICAgICBqaXQubG9hZFB0cihDQ2FsbEhlbHBlcnM6OkFkZHJlc3MocGFyYW1zWzBdLmdwcigpLCBJ
bnN0YW5jZTo6b2Zmc2V0T2ZDYWNoZWRNZW1vcnlTaXplKCkpLCBzaXplUmVnc1swXS5zaXplUmVn
aXN0ZXIpOworICAgICAgICAgICAgaml0LmxvYWRQdHIoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKHBh
cmFtc1swXS5ncHIoKSwgSW5zdGFuY2U6Om9mZnNldE9mQ2FjaGVkSW5kZXhpbmdNYXNrKCkpLCBw
aW5uZWRSZWdzLT5pbmRleGluZ01hc2spOworICAgICAgICAgICAgaml0LmxvYWRQdHIoQ0NhbGxI
ZWxwZXJzOjpBZGRyZXNzKHBhcmFtc1swXS5ncHIoKSwgSW5zdGFuY2U6Om9mZnNldE9mQ2FjaGVk
TWVtb3J5KCkpLCBiYXNlTWVtb3J5KTsKICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDE7
IGkgPCBzaXplUmVncy5zaXplKCk7ICsraSkKICAgICAgICAgICAgICAgICBqaXQuYWRkNjQoQ0Nh
bGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoLXNpemVSZWdzW2ldLnNpemVPZmZzZXQpLCBzaXplUmVn
c1swXS5zaXplUmVnaXN0ZXIsIHNpemVSZWdzW2ldLnNpemVSZWdpc3Rlcik7CiAgICAgICAgIH0p
OwpAQCAtNjA0LDExICs2MDMsOSBAQCBhdXRvIEIzSVJHZW5lcmF0b3I6OmFkZEdyb3dNZW1vcnko
RXhwcmVzc2lvblR5cGUgZGVsdGEsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpCiAKIGF1dG8gQjNJ
UkdlbmVyYXRvcjo6YWRkQ3VycmVudE1lbW9yeShFeHByZXNzaW9uVHlwZSYgcmVzdWx0KSAtPiBQ
YXJ0aWFsUmVzdWx0CiB7Ci0gICAgVmFsdWUqIG1lbW9yeU9iamVjdCA9IG1fY3VycmVudEJsb2Nr
LT5hcHBlbmROZXc8TWVtb3J5VmFsdWU+KG1fcHJvYywgTG9hZCwgcG9pbnRlclR5cGUoKSwgb3Jp
Z2luKCksIGluc3RhbmNlVmFsdWUoKSwgc2FmZUNhc3Q8aW50MzJfdD4oSW5zdGFuY2U6Om9mZnNl
dE9mTWVtb3J5KCkpKTsKLQogICAgIHN0YXRpY19hc3NlcnQoc2l6ZW9mKGRlY2x0eXBlKHN0YXRp
Y19jYXN0PE1lbW9yeSo+KG51bGxwdHIpLT5zaXplKCkpKSA9PSBzaXplb2YodWludDY0X3QpLCAi
Y29kZWdlbiByZWxpZXMgb24gdGhpcyBzaXplIik7Ci0gICAgVmFsdWUqIHNpemUgPSBtX2N1cnJl
bnRCbG9jay0+YXBwZW5kTmV3PE1lbW9yeVZhbHVlPihtX3Byb2MsIExvYWQsIEludDY0LCBvcmln
aW4oKSwgbWVtb3J5T2JqZWN0LCBzYWZlQ2FzdDxpbnQzMl90PihNZW1vcnk6Om9mZnNldE9mU2l6
ZSgpKSk7Ci0gICAgCisgICAgVmFsdWUqIHNpemUgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3
PE1lbW9yeVZhbHVlPihtX3Byb2MsIExvYWQsIEludDY0LCBvcmlnaW4oKSwgaW5zdGFuY2VWYWx1
ZSgpLCBzYWZlQ2FzdDxpbnQzMl90PihJbnN0YW5jZTo6b2Zmc2V0T2ZDYWNoZWRNZW1vcnlTaXpl
KCkpKTsKKwogICAgIGNvbnN0ZXhwciB1aW50MzJfdCBzaGlmdFZhbHVlID0gMTY7CiAgICAgc3Rh
dGljX2Fzc2VydChQYWdlQ291bnQ6OnBhZ2VTaXplID09IDF1bGwgPDwgc2hpZnRWYWx1ZSwgIlRo
aXMgbXVzdCBob2xkIGZvciB0aGUgY29kZSBiZWxvdyB0byBiZSBjb3JyZWN0LiIpOwogICAgIFZh
bHVlKiBudW1QYWdlcyA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8VmFsdWU+KG1fcHJvYywg
WlNociwgb3JpZ2luKCksCkBAIC0xMjk5LDE0ICsxMjk2LDE1IEBAIGF1dG8gQjNJUkdlbmVyYXRv
cjo6YWRkQ2FsbEluZGlyZWN0KGNvbnN0IFNpZ25hdHVyZSYgc2lnbmF0dXJlLCBWZWN0b3I8RXhw
cmVzc2lvCiAgICAgICAgICAgICBqaXQubG9hZFB0cihDQ2FsbEhlbHBlcnM6OkFkZHJlc3Mob2xk
Q29udGV4dEluc3RhbmNlLCBJbnN0YW5jZTo6b2Zmc2V0T2ZDYWNoZWRTdGFja0xpbWl0KCkpLCBi
YXNlTWVtb3J5KTsKICAgICAgICAgICAgIGppdC5zdG9yZVB0cihiYXNlTWVtb3J5LCBDQ2FsbEhl
bHBlcnM6OkFkZHJlc3MobmV3Q29udGV4dEluc3RhbmNlLCBJbnN0YW5jZTo6b2Zmc2V0T2ZDYWNo
ZWRTdGFja0xpbWl0KCkpKTsKICAgICAgICAgICAgIGppdC5zdG9yZVdhc21Db250ZXh0SW5zdGFu
Y2UobmV3Q29udGV4dEluc3RhbmNlKTsKLSAgICAgICAgICAgIGppdC5sb2FkUHRyKENDYWxsSGVs
cGVyczo6QWRkcmVzcyhuZXdDb250ZXh0SW5zdGFuY2UsIEluc3RhbmNlOjpvZmZzZXRPZk1lbW9y
eSgpKSwgYmFzZU1lbW9yeSk7IC8vIE1lbW9yeSouCi0gICAgICAgICAgICBBU1NFUlQoc2l6ZVJl
Z3Muc2l6ZSgpID09IDEpOwogICAgICAgICAgICAgQVNTRVJUKHNpemVSZWdzWzBdLnNpemVSZWdp
c3RlciAhPSBiYXNlTWVtb3J5KTsKKyAgICAgICAgICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgc3Vw
cG9ydCBtb3JlIHRoYW4gb25lIG1lbW9yeSBzaXplIHJlZ2lzdGVyCisgICAgICAgICAgICAvLyAg
IHNlZTogaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2Mjk1MgorICAg
ICAgICAgICAgQVNTRVJUKHNpemVSZWdzLnNpemUoKSA9PSAxKTsKICAgICAgICAgICAgIEFTU0VS
VChzaXplUmVnc1swXS5zaXplUmVnaXN0ZXIgIT0gbmV3Q29udGV4dEluc3RhbmNlKTsKICAgICAg
ICAgICAgIEFTU0VSVCghc2l6ZVJlZ3NbMF0uc2l6ZU9mZnNldCk7Ci0gICAgICAgICAgICBqaXQu
bG9hZFB0cihDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoYmFzZU1lbW9yeSwgTWVtb3J5OjpvZmZzZXRP
ZkluZGV4aW5nTWFzaygpKSwgcGlubmVkUmVncy5pbmRleGluZ01hc2spOyAvLyBJbmRleGluZyBt
YXNrLgotICAgICAgICAgICAgaml0LmxvYWRQdHIoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKGJhc2VN
ZW1vcnksIE1lbW9yeTo6b2Zmc2V0T2ZTaXplKCkpLCBzaXplUmVnc1swXS5zaXplUmVnaXN0ZXIp
OyAvLyBNZW1vcnkgc2l6ZS4KLSAgICAgICAgICAgIGppdC5sb2FkUHRyKENDYWxsSGVscGVyczo6
QWRkcmVzcyhiYXNlTWVtb3J5LCBNZW1vcnk6Om9mZnNldE9mTWVtb3J5KCkpLCBiYXNlTWVtb3J5
KTsgLy8gTWVtb3J5Ojp2b2lkKi4KKyAgICAgICAgICAgIGppdC5sb2FkUHRyKENDYWxsSGVscGVy
czo6QWRkcmVzcyhuZXdDb250ZXh0SW5zdGFuY2UsIEluc3RhbmNlOjpvZmZzZXRPZkNhY2hlZElu
ZGV4aW5nTWFzaygpKSwgcGlubmVkUmVncy5pbmRleGluZ01hc2spOyAvLyBJbmRleGluZyBtYXNr
LgorICAgICAgICAgICAgaml0LmxvYWRQdHIoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKG5ld0NvbnRl
eHRJbnN0YW5jZSwgSW5zdGFuY2U6Om9mZnNldE9mQ2FjaGVkTWVtb3J5U2l6ZSgpKSwgc2l6ZVJl
Z3NbMF0uc2l6ZVJlZ2lzdGVyKTsgLy8gTWVtb3J5IHNpemUuCisgICAgICAgICAgICBqaXQubG9h
ZFB0cihDQ2FsbEhlbHBlcnM6OkFkZHJlc3MobmV3Q29udGV4dEluc3RhbmNlLCBJbnN0YW5jZTo6
b2Zmc2V0T2ZDYWNoZWRNZW1vcnkoKSksIGJhc2VNZW1vcnkpOyAvLyBNZW1vcnk6OnZvaWQqLgog
ICAgICAgICB9KTsKICAgICAgICAgZG9Db250ZXh0U3dpdGNoLT5hcHBlbmROZXdDb250cm9sVmFs
dWUobV9wcm9jLCBKdW1wLCBvcmlnaW4oKSwgY29udGludWF0aW9uKTsKIApkaWZmIC0tZ2l0IGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUJpbmRpbmcuY3BwIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3dhc20vV2FzbUJpbmRpbmcuY3BwCmluZGV4IDc1OWIyNjhkNGNmMWFiODY0Y2Fk
MmFiNWQ4NzRiODRjYTYzYmE2MGMuLjg5ZjkxZjMzYTE3MGIwYmIzM2U4MWYyNzg1M2RmM2E2NWM5
MDQ4NzIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21CaW5kaW5n
LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQmluZGluZy5jcHAKQEAg
LTY0LDExICs2NCwxMCBAQCBFeHBlY3RlZDxNYWNyb0Fzc2VtYmxlckNvZGVSZWYsIEJpbmRpbmdG
YWlsdXJlPiB3YXNtVG9XYXNtKHVuc2lnbmVkIGltcG9ydEluZGV4KQogCiAgICAgLy8gRklYTUUg
dGhlIGZvbGxvd2luZyBjb2RlIGFzc3VtZXMgdGhhdCBhbGwgV2FzbTo6SW5zdGFuY2UgaGF2ZSB0
aGUgc2FtZSBwaW5uZWQgcmVnaXN0ZXJzLiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MTYyOTUyCiAgICAgLy8gU2V0IHVwIHRoZSBjYWxsZWUncyBiYXNlTWVtb3J5IHJl
Z2lzdGVyIGFzIHdlbGwgYXMgdGhlIG1lbW9yeSBzaXplIHJlZ2lzdGVycy4KLSAgICBqaXQubG9h
ZFB0cihKSVQ6OkFkZHJlc3MoYmFzZU1lbW9yeSwgSW5zdGFuY2U6Om9mZnNldE9mTWVtb3J5KCkp
LCBiYXNlTWVtb3J5KTsgLy8gV2FzbTo6TWVtb3J5Ki4KICAgICBBU1NFUlQoIXNpemVSZWdzWzBd
LnNpemVPZmZzZXQpOyAvLyBUaGUgZm9sbG93aW5nIGNvZGUgYXNzdW1lcyB3ZSBzdGFydCBhdCAw
LCBhbmQgY2FsY3VsYXRlcyBzdWJzZXF1ZW50IHNpemUgcmVnaXN0ZXJzIHJlbGF0aXZlIHRvIDAu
Ci0gICAgaml0LmxvYWRQdHIoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKGJhc2VNZW1vcnksIE1lbW9y
eTo6b2Zmc2V0T2ZJbmRleGluZ01hc2soKSksIHBpbm5lZFJlZ3MuaW5kZXhpbmdNYXNrKTsgLy8g
SW5kZXhpbmcgbWFzay4KLSAgICBqaXQubG9hZFB0cihKSVQ6OkFkZHJlc3MoYmFzZU1lbW9yeSwg
V2FzbTo6TWVtb3J5OjpvZmZzZXRPZlNpemUoKSksIHNpemVSZWdzWzBdLnNpemVSZWdpc3Rlcik7
IC8vIE1lbW9yeSBzaXplLgotICAgIGppdC5sb2FkUHRyKEpJVDo6QWRkcmVzcyhiYXNlTWVtb3J5
LCBXYXNtOjpNZW1vcnk6Om9mZnNldE9mTWVtb3J5KCkpLCBiYXNlTWVtb3J5KTsgLy8gV2FzbTo6
TWVtb3J5Ojp2b2lkKi4KKyAgICBqaXQubG9hZFB0cihKSVQ6OkFkZHJlc3MoYmFzZU1lbW9yeSwg
V2FzbTo6SW5zdGFuY2U6Om9mZnNldE9mQ2FjaGVkSW5kZXhpbmdNYXNrKCkpLCBwaW5uZWRSZWdz
LmluZGV4aW5nTWFzayk7IC8vIEluZGV4aW5nIG1hc2suCisgICAgaml0LmxvYWRQdHIoSklUOjpB
ZGRyZXNzKGJhc2VNZW1vcnksIFdhc206Okluc3RhbmNlOjpvZmZzZXRPZkNhY2hlZE1lbW9yeVNp
emUoKSksIHNpemVSZWdzWzBdLnNpemVSZWdpc3Rlcik7IC8vIE1lbW9yeSBzaXplLgorICAgIGpp
dC5sb2FkUHRyKEpJVDo6QWRkcmVzcyhiYXNlTWVtb3J5LCBXYXNtOjpJbnN0YW5jZTo6b2Zmc2V0
T2ZDYWNoZWRNZW1vcnkoKSksIGJhc2VNZW1vcnkpOyAvLyBXYXNtOjpNZW1vcnk6OnZvaWQqLgog
ICAgIGZvciAodW5zaWduZWQgaSA9IDE7IGkgPCBzaXplUmVncy5zaXplKCk7ICsraSkgewogICAg
ICAgICBBU1NFUlQoc2l6ZVJlZ3NbaV0uc2l6ZVJlZ2lzdGVyICE9IGJhc2VNZW1vcnkpOwogICAg
ICAgICBBU1NFUlQoc2l6ZVJlZ3NbaV0uc2l6ZVJlZ2lzdGVyICE9IHNjcmF0Y2gpOwpkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUluc3RhbmNlLmggYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtSW5zdGFuY2UuaAppbmRleCAyYzA4MDAwM2Q1MmNhNjk4
ZGE3MmZjZmY2NzQ0NDA0NmRiNDUzNTU2Li4zY2E5MmY1NjU2ZGU3NGEyN2I3MGM0MWU0NzhiZTk3
ZGM4MDY2ZTU4IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtSW5z
dGFuY2UuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtSW5zdGFuY2UuaApA
QCAtNjUsOCArNjUsMjUgQEAgcHVibGljOgogICAgIENvZGVCbG9jayogY29kZUJsb2NrKCkgeyBy
ZXR1cm4gbV9jb2RlQmxvY2suZ2V0KCk7IH0KICAgICBNZW1vcnkqIG1lbW9yeSgpIHsgcmV0dXJu
IG1fbWVtb3J5LmdldCgpOyB9CiAgICAgVGFibGUqIHRhYmxlKCkgeyByZXR1cm4gbV90YWJsZS5n
ZXQoKTsgfQotICAgIAotICAgIHZvaWQgc2V0TWVtb3J5KFJlZjxNZW1vcnk+JiYgbWVtb3J5KSB7
IG1fbWVtb3J5ID0gV1RGTW92ZShtZW1vcnkpOyB9CisKKyAgICB2b2lkKiBjYWNoZWRNZW1vcnko
KSBjb25zdCB7IHJldHVybiBtX2NhY2hlZE1lbW9yeTsgfQorICAgIHNpemVfdCBjYWNoZWRNZW1v
cnlTaXplKCkgY29uc3QgeyByZXR1cm4gbV9jYWNoZWRNZW1vcnlTaXplOyB9CisKKyAgICBXZWFr
UHRyPEluc3RhbmNlPiBjcmVhdGVXZWFrUHRyKCkgeyByZXR1cm4gbV93ZWFrUHRyRmFjdG9yeS5j
cmVhdGVXZWFrUHRyKCp0aGlzKTsgfQorICAgIHZvaWQgc2V0TWVtb3J5KFJlZjxNZW1vcnk+JiYg
bWVtb3J5KQorICAgIHsKKyAgICAgICAgbV9tZW1vcnkgPSBXVEZNb3ZlKG1lbW9yeSk7CisgICAg
ICAgIG1fbWVtb3J5LmdldCgpLT5yZWdpc3Rlckluc3RhbmNlKHRoaXMpOworICAgICAgICB1cGRh
dGVDYWNoZWRNZW1vcnkoKTsKKyAgICB9CisgICAgdm9pZCB1cGRhdGVDYWNoZWRNZW1vcnkoKQor
ICAgIHsKKyAgICAgICAgaWYgKG1fbWVtb3J5ICE9IG51bGxwdHIpIHsKKyAgICAgICAgICAgIG1f
Y2FjaGVkTWVtb3J5ID0gbWVtb3J5KCktPm1lbW9yeSgpOworICAgICAgICAgICAgbV9jYWNoZWRN
ZW1vcnlTaXplID0gbWVtb3J5KCktPnNpemUoKTsKKyAgICAgICAgICAgIG1fY2FjaGVkSW5kZXhp
bmdNYXNrID0gbWVtb3J5KCktPmluZGV4aW5nTWFzaygpOworICAgICAgICB9CisgICAgfQogICAg
IHZvaWQgc2V0VGFibGUoUmVmPFRhYmxlPiYmIHRhYmxlKSB7IG1fdGFibGUgPSBXVEZNb3ZlKHRh
YmxlKTsgfQogCiAgICAgaW50MzJfdCBsb2FkSTMyR2xvYmFsKHVuc2lnbmVkIGkpIGNvbnN0IHsg
cmV0dXJuIG1fZ2xvYmFscy5nZXQoKVtpXTsgfQpAQCAtNzgsNiArOTUsOSBAQCBwdWJsaWM6CiAg
ICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZk1lbW9yeSgpIHsgcmV0dXJuIE9CSkVDVF9PRkZT
RVRPRihJbnN0YW5jZSwgbV9tZW1vcnkpOyB9CiAgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRP
Zkdsb2JhbHMoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoSW5zdGFuY2UsIG1fZ2xvYmFscyk7
IH0KICAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mVGFibGUoKSB7IHJldHVybiBPQkpFQ1Rf
T0ZGU0VUT0YoSW5zdGFuY2UsIG1fdGFibGUpOyB9CisgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZz
ZXRPZkNhY2hlZE1lbW9yeSgpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihJbnN0YW5jZSwgbV9j
YWNoZWRNZW1vcnkpOyB9CisgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZkNhY2hlZE1lbW9y
eVNpemUoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoSW5zdGFuY2UsIG1fY2FjaGVkTWVtb3J5
U2l6ZSk7IH0KKyAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mQ2FjaGVkSW5kZXhpbmdNYXNr
KCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKEluc3RhbmNlLCBtX2NhY2hlZEluZGV4aW5nTWFz
ayk7IH0KICAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mUG9pbnRlclRvVG9wRW50cnlGcmFt
ZSgpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihJbnN0YW5jZSwgbV9wb2ludGVyVG9Ub3BFbnRy
eUZyYW1lKTsgfQogCiAgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZlBvaW50ZXJUb0FjdHVh
bFN0YWNrTGltaXQoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoSW5zdGFuY2UsIG1fcG9pbnRl
clRvQWN0dWFsU3RhY2tMaW1pdCk7IH0KQEAgLTEyNiw5ICsxNDYsMTEgQEAgcHJpdmF0ZToKICAg
ICB7CiAgICAgICAgIHJldHVybiAob2Zmc2V0T2ZUYWlsKCkgKyBzaXplb2YoSW1wb3J0RnVuY3Rp
b25JbmZvKSAqIG51bUltcG9ydEZ1bmN0aW9ucykudW5zYWZlR2V0KCk7CiAgICAgfQotCiAgICAg
dm9pZCogbV9vd25lciB7IG51bGxwdHIgfTsgLy8gSW4gYSBKUyBlbWJlZGRpbmcsIHRoaXMgaXMg
YSBKU1dlYkFzc2VtYmx5SW5zdGFuY2UqLgogICAgIENvbnRleHQqIG1fY29udGV4dCB7IG51bGxw
dHIgfTsKKyAgICB2b2lkKiBtX2NhY2hlZE1lbW9yeSB7IG51bGxwdHIgfTsKKyAgICBzaXplX3Qg
bV9jYWNoZWRNZW1vcnlTaXplIHsgMCB9OworICAgIHNpemVfdCBtX2NhY2hlZEluZGV4aW5nTWFz
ayB7IDAgfTsKICAgICBSZWY8TW9kdWxlPiBtX21vZHVsZTsKICAgICBSZWZQdHI8Q29kZUJsb2Nr
PiBtX2NvZGVCbG9jazsKICAgICBSZWZQdHI8TWVtb3J5PiBtX21lbW9yeTsKQEAgLTEzOCw2ICsx
NjAsNyBAQCBwcml2YXRlOgogICAgIHZvaWQqKiBtX3BvaW50ZXJUb0FjdHVhbFN0YWNrTGltaXQg
eyBudWxscHRyIH07CiAgICAgdm9pZCogbV9jYWNoZWRTdGFja0xpbWl0IHsgYml0d2lzZV9jYXN0
PHZvaWQqPihzdGQ6Om51bWVyaWNfbGltaXRzPHVpbnRwdHJfdD46Om1heCgpKSB9OwogICAgIFN0
b3JlVG9wQ2FsbEZyYW1lQ2FsbGJhY2sgbV9zdG9yZVRvcENhbGxGcmFtZTsKKyAgICBXZWFrUHRy
RmFjdG9yeTxJbnN0YW5jZT4gbV93ZWFrUHRyRmFjdG9yeTsKICAgICB1bnNpZ25lZCBtX251bUlt
cG9ydEZ1bmN0aW9ucyB7IDAgfTsKIH07CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS93YXNtL1dhc21NZW1vcnkuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2Fz
bU1lbW9yeS5jcHAKaW5kZXggYzEyMGRhNzNiYzcwMmVjZTIxNzljMTAwNmJlOTVkNGUxNTNmNTM0
Ni4uZjVjNzc5NjkxMzgzOGRmYzU4NjZhMmU1MDczOGU0N2ZkYjI3MWVhYiAxMDA2NDQKLS0tIGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU1lbW9yeS5jcHAKKysrIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3dhc20vV2FzbU1lbW9yeS5jcHAKQEAgLTI1LDYgKzI1LDcgQEAKIAogI2lu
Y2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIldhc21NZW1vcnkuaCIKKyNpbmNsdWRlICJXYXNt
SW5zdGFuY2UuaCIKIAogI2lmIEVOQUJMRShXRUJBU1NFTUJMWSkKIApAQCAtMzk1LDYgKzM5Niwx
MSBAQCBFeHBlY3RlZDxQYWdlQ291bnQsIE1lbW9yeTo6R3Jvd0ZhaWxSZWFzb24+IE1lbW9yeTo6
Z3JvdyhQYWdlQ291bnQgZGVsdGEpCiAKICAgICBhdXRvIHN1Y2Nlc3MgPSBbJl0gKCkgewogICAg
ICAgICBtX2dyb3dTdWNjZXNzQ2FsbGJhY2soR3Jvd1N1Y2Nlc3NUYWcsIG9sZFBhZ2VDb3VudCwg
bmV3UGFnZUNvdW50KTsKKyAgICAgICAgLy8gVXBkYXRlIGNhY2hlIGZvciBpbnN0YW5jZQorICAg
ICAgICBmb3IgKGF1dG8mIGluc3RhbmNlIDogbV9pbnN0YW5jZXMpIHsKKyAgICAgICAgICAgIGlm
IChpbnN0YW5jZS5nZXQoKSAhPSBudWxscHRyKQorICAgICAgICAgICAgICAgIGluc3RhbmNlLmdl
dCgpLT51cGRhdGVDYWNoZWRNZW1vcnkoKTsKKyAgICAgICAgfQogICAgICAgICByZXR1cm4gb2xk
UGFnZUNvdW50OwogICAgIH07CiAKQEAgLTQ1Nyw2ICs0NjMsMTEgQEAgRXhwZWN0ZWQ8UGFnZUNv
dW50LCBNZW1vcnk6Okdyb3dGYWlsUmVhc29uPiBNZW1vcnk6Omdyb3coUGFnZUNvdW50IGRlbHRh
KQogICAgIHJldHVybiBvbGRQYWdlQ291bnQ7CiB9CiAKK3ZvaWQgTWVtb3J5OjpyZWdpc3Rlcklu
c3RhbmNlKEluc3RhbmNlKiBpbnN0YW5jZSkKK3sKKyAgICBtX2luc3RhbmNlcy5hcHBlbmQoaW5z
dGFuY2UtPmNyZWF0ZVdlYWtQdHIoKSk7Cit9CisKIHZvaWQgTWVtb3J5OjpkdW1wKFByaW50U3Ry
ZWFtJiBvdXQpIGNvbnN0CiB7CiAgICAgb3V0LnByaW50KCJNZW1vcnkgYXQgIiwgUmF3UG9pbnRl
cihtX21lbW9yeSksICIsIHNpemUgIiwgbV9zaXplLCAiQiBjYXBhY2l0eSAiLCBtX21hcHBlZENh
cGFjaXR5LCAiQiwgaW5pdGlhbCAiLCBtX2luaXRpYWwsICIgbWF4aW11bSAiLCBtX21heGltdW0s
ICIgbW9kZSAiLCBtYWtlU3RyaW5nKG1fbW9kZSkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3dhc20vV2FzbU1lbW9yeS5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20v
V2FzbU1lbW9yeS5oCmluZGV4IGZmZjk0ZWI5MjEzZGI0Y2RmZWQzOGUzYzNjMjY2ZjA5OWU5Mjk4
OTMuLjIyMGMwY2YxOWE3NjVhYjZiODM4YWM4OGNlZWQ3ZjE0N2JjMjYxYTggMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21NZW1vcnkuaAorKysgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvd2FzbS9XYXNtTWVtb3J5LmgKQEAgLTM0LDYgKzM0LDggQEAKICNpbmNsdWRl
IDx3dGYvRnVuY3Rpb24uaD4KICNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgogI2luY2x1ZGUg
PHd0Zi9SZWZQdHIuaD4KKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisjaW5jbHVkZSA8d3RmL1dl
YWtQdHIuaD4KIAogbmFtZXNwYWNlIFdURiB7CiBjbGFzcyBQcmludFN0cmVhbTsKQEAgLTQzLDYg
KzQ1LDggQEAgbmFtZXNwYWNlIEpTQyB7CiAKIG5hbWVzcGFjZSBXYXNtIHsKIAorY2xhc3MgSW5z
dGFuY2U7CisKIGNsYXNzIE1lbW9yeSA6IHB1YmxpYyBSZWZDb3VudGVkPE1lbW9yeT4gewogICAg
IFdURl9NQUtFX05PTkNPUFlBQkxFKE1lbW9yeSk7CiAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FU
RUQ7CkBAIC02Niw2ICs3MCw3IEBAIHB1YmxpYzoKIAogICAgIHZvaWQqIG1lbW9yeSgpIGNvbnN0
IHsgcmV0dXJuIG1fbWVtb3J5OyB9CiAgICAgc2l6ZV90IHNpemUoKSBjb25zdCB7IHJldHVybiBt
X3NpemU7IH0KKyAgICBzaXplX3QgaW5kZXhpbmdNYXNrKCkgeyByZXR1cm4gbV9pbmRleGluZ01h
c2s7IH0KICAgICBQYWdlQ291bnQgc2l6ZUluUGFnZXMoKSBjb25zdCB7IHJldHVybiBQYWdlQ291
bnQ6OmZyb21CeXRlcyhtX3NpemUpOyB9CiAKICAgICBQYWdlQ291bnQgaW5pdGlhbCgpIGNvbnN0
IHsgcmV0dXJuIG1faW5pdGlhbDsgfQpAQCAtODAsNiArODUsNyBAQCBwdWJsaWM6CiAgICAgICAg
IE91dE9mTWVtb3J5LAogICAgIH07CiAgICAgRXhwZWN0ZWQ8UGFnZUNvdW50LCBHcm93RmFpbFJl
YXNvbj4gZ3JvdyhQYWdlQ291bnQpOworICAgIHZvaWQgcmVnaXN0ZXJJbnN0YW5jZShJbnN0YW5j
ZSopOwogCiAgICAgdm9pZCBjaGVjaygpIHsgIEFTU0VSVCghZGVsZXRpb25IYXNCZWd1bigpKTsg
fQogCkBAIC05Miw3ICs5OCw2IEBAIHByaXZhdGU6CiAgICAgTWVtb3J5KHZvaWQqIG1lbW9yeSwg
UGFnZUNvdW50IGluaXRpYWwsIFBhZ2VDb3VudCBtYXhpbXVtLCBzaXplX3QgbWFwcGVkQ2FwYWNp
dHksIE1lbW9yeU1vZGUsIFdURjo6RnVuY3Rpb248dm9pZChOb3RpZnlQcmVzc3VyZSk+JiYgbm90
aWZ5TWVtb3J5UHJlc3N1cmUsIFdURjo6RnVuY3Rpb248dm9pZChTeW5jVHJ5VG9SZWNsYWltKT4m
JiBzeW5jVHJ5VG9SZWNsYWltTWVtb3J5LCBXVEY6OkZ1bmN0aW9uPHZvaWQoR3Jvd1N1Y2Nlc3Ms
IFBhZ2VDb3VudCwgUGFnZUNvdW50KT4mJiBncm93U3VjY2Vzc0NhbGxiYWNrKTsKICAgICBNZW1v
cnkoUGFnZUNvdW50IGluaXRpYWwsIFBhZ2VDb3VudCBtYXhpbXVtLCBXVEY6OkZ1bmN0aW9uPHZv
aWQoTm90aWZ5UHJlc3N1cmUpPiYmIG5vdGlmeU1lbW9yeVByZXNzdXJlLCBXVEY6OkZ1bmN0aW9u
PHZvaWQoU3luY1RyeVRvUmVjbGFpbSk+JiYgc3luY1RyeVRvUmVjbGFpbU1lbW9yeSwgV1RGOjpG
dW5jdGlvbjx2b2lkKEdyb3dTdWNjZXNzLCBQYWdlQ291bnQsIFBhZ2VDb3VudCk+JiYgZ3Jvd1N1
Y2Nlc3NDYWxsYmFjayk7CiAKLSAgICAvLyBGSVhNRTogd2UgY2FjaGUgdGhlc2Ugb24gdGhlIGlu
c3RhbmNlcyB0byBhdm9pZCBhIGxvYWQgb24gaW5zdGFuY2UtPmluc3RhbmNlIGNhbGxzLiBUaGlz
IHdpbGwgcmVxdWlyZSB1cGRhdGluZyBhbGwgdGhlIGluc3RhbmNlcyB3aGVuIGdyb3cgaXMgY2Fs
bGVkLiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTc3MzA1CiAgICAg
dm9pZCogbV9tZW1vcnkgeyBudWxscHRyIH07CiAgICAgc2l6ZV90IG1fc2l6ZSB7IDAgfTsKICAg
ICBzaXplX3QgbV9pbmRleGluZ01hc2sgeyAwIH07CkBAIC0xMDMsNiArMTA4LDcgQEAgcHJpdmF0
ZToKICAgICBXVEY6OkZ1bmN0aW9uPHZvaWQoTm90aWZ5UHJlc3N1cmUpPiBtX25vdGlmeU1lbW9y
eVByZXNzdXJlOwogICAgIFdURjo6RnVuY3Rpb248dm9pZChTeW5jVHJ5VG9SZWNsYWltKT4gbV9z
eW5jVHJ5VG9SZWNsYWltTWVtb3J5OwogICAgIFdURjo6RnVuY3Rpb248dm9pZChHcm93U3VjY2Vz
cywgUGFnZUNvdW50LCBQYWdlQ291bnQpPiBtX2dyb3dTdWNjZXNzQ2FsbGJhY2s7CisgICAgVmVj
dG9yPFdlYWtQdHI8SW5zdGFuY2U+PiBtX2luc3RhbmNlczsKIH07CiAKIH0gfSAvLyBuYW1lc3Bh
Y2UgSlNDOjpXYXNtCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9K
U1RvV2FzbS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1RvV2FzbS5jcHAK
aW5kZXggMTBiNDZjOTU0YThhOTI4ZjQwMmYzZDM5NTMzMGRkY2U2Yjc3ODc5Ni4uMzhmNjkwY2Yy
NDY3OTczZGQ5MjZiNTYyYjYwZDg5NWZhN2I1YjY4NSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3dhc20vanMvSlNUb1dhc20uY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS93YXNtL2pzL0pTVG9XYXNtLmNwcApAQCAtMTc1LDI0ICsxNzUsMjEgQEAgc3RkOjp1bmlxdWVf
cHRyPEludGVybmFsRnVuY3Rpb24+IGNyZWF0ZUpTVG9XYXNtV3JhcHBlcihDb21waWxhdGlvbkNv
bnRleHQmIGNvbXAKICAgICBpZiAoISFpbmZvLm1lbW9yeSkgewogICAgICAgICBHUFJSZWcgYmFz
ZU1lbW9yeSA9IHBpbm5lZFJlZ3MuYmFzZU1lbW9yeVBvaW50ZXI7CiAKLSAgICAgICAgaWYgKCFD
b250ZXh0Ojp1c2VGYXN0VExTKCkpCi0gICAgICAgICAgICBqaXQubG9hZFB0cihDQ2FsbEhlbHBl
cnM6OkFkZHJlc3Mod2FzbUNvbnRleHRJbnN0YW5jZUdQUiwgSW5zdGFuY2U6Om9mZnNldE9mTWVt
b3J5KCkpLCBiYXNlTWVtb3J5KTsKLSAgICAgICAgZWxzZSB7CisgICAgICAgIGlmIChDb250ZXh0
Ojp1c2VGYXN0VExTKCkpCiAgICAgICAgICAgICBqaXQubG9hZFdhc21Db250ZXh0SW5zdGFuY2Uo
YmFzZU1lbW9yeSk7Ci0gICAgICAgICAgICBqaXQubG9hZFB0cihDQ2FsbEhlbHBlcnM6OkFkZHJl
c3MoYmFzZU1lbW9yeSwgSW5zdGFuY2U6Om9mZnNldE9mTWVtb3J5KCkpLCBiYXNlTWVtb3J5KTsK
LSAgICAgICAgfQogCisgICAgICAgIEdQUlJlZyBtZW1vcnlHUlAgPSBDb250ZXh0Ojp1c2VGYXN0
VExTKCkgPyBiYXNlTWVtb3J5IDogd2FzbUNvbnRleHRJbnN0YW5jZUdQUjsKICAgICAgICAgaWYg
KG1vZGUgIT0gTWVtb3J5TW9kZTo6U2lnbmFsaW5nKSB7Ci0gICAgICAgICAgICBqaXQubG9hZFB0
cihDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoYmFzZU1lbW9yeSwgV2FzbTo6TWVtb3J5OjpvZmZzZXRP
ZkluZGV4aW5nTWFzaygpKSwgcGlubmVkUmVncy5pbmRleGluZ01hc2spOworICAgICAgICAgICAg
aml0LmxvYWRQdHIoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKG1lbW9yeUdSUCwgV2FzbTo6SW5zdGFu
Y2U6Om9mZnNldE9mQ2FjaGVkSW5kZXhpbmdNYXNrKCkpLCBwaW5uZWRSZWdzLmluZGV4aW5nTWFz
ayk7CiAgICAgICAgICAgICBjb25zdCBhdXRvJiBzaXplUmVncyA9IHBpbm5lZFJlZ3Muc2l6ZVJl
Z2lzdGVyczsKICAgICAgICAgICAgIEFTU0VSVChzaXplUmVncy5zaXplKCkgPj0gMSk7CiAgICAg
ICAgICAgICBBU1NFUlQoIXNpemVSZWdzWzBdLnNpemVPZmZzZXQpOyAvLyBUaGUgZm9sbG93aW5n
IGNvZGUgYXNzdW1lcyB3ZSBzdGFydCBhdCAwLCBhbmQgY2FsY3VsYXRlcyBzdWJzZXF1ZW50IHNp
emUgcmVnaXN0ZXJzIHJlbGF0aXZlIHRvIDAuCi0gICAgICAgICAgICBqaXQubG9hZFB0cihDQ2Fs
bEhlbHBlcnM6OkFkZHJlc3MoYmFzZU1lbW9yeSwgV2FzbTo6TWVtb3J5OjpvZmZzZXRPZlNpemUo
KSksIHNpemVSZWdzWzBdLnNpemVSZWdpc3Rlcik7CisgICAgICAgICAgICBqaXQubG9hZFB0cihD
Q2FsbEhlbHBlcnM6OkFkZHJlc3MobWVtb3J5R1JQLCBXYXNtOjpJbnN0YW5jZTo6b2Zmc2V0T2ZD
YWNoZWRNZW1vcnlTaXplKCkpLCBzaXplUmVnc1swXS5zaXplUmVnaXN0ZXIpOwogICAgICAgICAg
ICAgZm9yICh1bnNpZ25lZCBpID0gMTsgaSA8IHNpemVSZWdzLnNpemUoKTsgKytpKQogICAgICAg
ICAgICAgICAgIGppdC5hZGQ2NChDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMigtc2l6ZVJlZ3Nb
aV0uc2l6ZU9mZnNldCksIHNpemVSZWdzWzBdLnNpemVSZWdpc3Rlciwgc2l6ZVJlZ3NbaV0uc2l6
ZVJlZ2lzdGVyKTsKICAgICAgICAgfQogCi0gICAgICAgIGppdC5sb2FkUHRyKENDYWxsSGVscGVy
czo6QWRkcmVzcyhiYXNlTWVtb3J5LCBXYXNtOjpNZW1vcnk6Om9mZnNldE9mTWVtb3J5KCkpLCBi
YXNlTWVtb3J5KTsKKyAgICAgICAgaml0LmxvYWRQdHIoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKG1l
bW9yeUdSUCwgV2FzbTo6SW5zdGFuY2U6Om9mZnNldE9mQ2FjaGVkTWVtb3J5KCkpLCBiYXNlTWVt
b3J5KTsKICAgICB9CiAKICAgICBDQ2FsbEhlbHBlcnM6OkNhbGwgY2FsbCA9IGppdC50aHJlYWRT
YWZlUGF0Y2hhYmxlTmVhckNhbGwoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS93YXNtL2pzL1dlYkFzc2VtYmx5TW9kdWxlUmVjb3JkLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5TW9kdWxlUmVjb3JkLmNwcAppbmRleCA3OGJhYTZiMjU1
YTU1MTQ4NDk1YmFjYjI0MWZjYmJkNWNmYWZkZWU2Li5kZmY4MzU1YmRmMzU2NDg3MmE0MTE2MzA4
OThkOGFkNDQzNjEwZjY4IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9q
cy9XZWJBc3NlbWJseU1vZHVsZVJlY29yZC5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3dhc20vanMvV2ViQXNzZW1ibHlNb2R1bGVSZWNvcmQuY3BwCkBAIC0yMjMsOCArMjIzLDcgQEAg
SlNWYWx1ZSBXZWJBc3NlbWJseU1vZHVsZVJlY29yZDo6ZXZhbHVhdGUoRXhlY1N0YXRlKiBleGVj
KQogICAgIEpTV2ViQXNzZW1ibHlUYWJsZSogdGFibGUgPSBtX2luc3RhbmNlLT50YWJsZSgpOwog
CiAgICAgY29uc3QgVmVjdG9yPFdhc206OlNlZ21lbnQ6OlB0cj4mIGRhdGEgPSBtb2R1bGVJbmZv
cm1hdGlvbi5kYXRhOwotICAgIEpTV2ViQXNzZW1ibHlNZW1vcnkqIGpzTWVtb3J5ID0gbV9pbnN0
YW5jZS0+bWVtb3J5KCk7Ci0KKyAgICAKICAgICBzdGQ6Om9wdGlvbmFsPEpTVmFsdWU+IGV4Y2Vw
dGlvbjsKIAogICAgIGF1dG8gZm9yRWFjaEVsZW1lbnQgPSBbJl0gKGF1dG8gZm4pIHsKQEAgLTI1
MCw4ICsyNDksOCBAQCBKU1ZhbHVlIFdlYkFzc2VtYmx5TW9kdWxlUmVjb3JkOjpldmFsdWF0ZShF
eGVjU3RhdGUqIGV4ZWMpCiAgICAgfTsKIAogICAgIGF1dG8gZm9yRWFjaFNlZ21lbnQgPSBbJl0g
KGF1dG8gZm4pIHsKLSAgICAgICAgdWludDhfdCogbWVtb3J5ID0gcmVpbnRlcnByZXRfY2FzdDx1
aW50OF90Kj4oanNNZW1vcnktPm1lbW9yeSgpLm1lbW9yeSgpKTsKLSAgICAgICAgdWludDY0X3Qg
c2l6ZUluQnl0ZXMgPSBqc01lbW9yeS0+bWVtb3J5KCkuc2l6ZSgpOworICAgICAgICB1aW50OF90
KiBtZW1vcnkgPSByZWludGVycHJldF9jYXN0PHVpbnQ4X3QqPihtX2luc3RhbmNlLT5pbnN0YW5j
ZSgpLmNhY2hlZE1lbW9yeSgpKTsKKyAgICAgICAgdWludDY0X3Qgc2l6ZUluQnl0ZXMgPSBtX2lu
c3RhbmNlLT5pbnN0YW5jZSgpLmNhY2hlZE1lbW9yeVNpemUoKTsKIAogICAgICAgICBmb3IgKGNv
bnN0IFdhc206OlNlZ21lbnQ6OlB0ciYgc2VnbWVudCA6IGRhdGEpIHsKICAgICAgICAgICAgIHVp
bnQzMl90IG9mZnNldCA9IHNlZ21lbnQtPm9mZnNldC5pc0dsb2JhbEltcG9ydCgpCmRpZmYgLS1n
aXQgYS9KU1Rlc3RzL0NoYW5nZUxvZyBiL0pTVGVzdHMvQ2hhbmdlTG9nCmluZGV4IDgzOTQ5MjM2
ZjQ4OWRlMmIyOGRmNGYzMTJlODQ0ZjRhMmVjOWYwM2EuLjY3Nzg1YWNhZTdkOGU1OTJhYTM5OGQx
MWQxNTI5ODRkYThhZjAyZmYgMTAwNjQ0Ci0tLSBhL0pTVGVzdHMvQ2hhbmdlTG9nCisrKyBiL0pT
VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTcgQEAKKzIwMTgtMDEtMTEgIE9sZWtzYW5kciBT
a2FjaGtvdiAgPGdza2FjaGtvdkBnbWFpbC5jb20+CisKKyAgICAgICAgV2ViQXNzZW1ibHk6IGNh
Y2hlIG1lbW9yeSBhZGRyZXNzIC8gc2l6ZSBvbiBpbnN0YW5jZQorICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTc3MzA1CisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiB3YXNtL2Z1bmN0aW9uLXRlc3RzL21lbW9y
eS1yZXVzZS5qczogQWRkZWQuCisgICAgICAgIChjcmVhdGVXYXNtSW5zdGFuY2UpOgorICAgICAg
ICAoZG9DaGVja1RyYXApOgorICAgICAgICAoZG9NZW1vcnlHcm93KToKKyAgICAgICAgKGRvQ2hl
Y2spOgorICAgICAgICAoY2hlY2tXYXNtSW5zdGFuY2VzV2l0aFNoYXJlZE1lbW9yeSk6CisKIDIw
MTgtMDEtMTEgIFNhYW0gQmFyYXRpICA8c2JhcmF0aUBhcHBsZS5jb20+CiAKICAgICAgICAgT3Vy
IGZvci1pbiBjYWNoaW5nIGlzIHdyb25nIHdoZW4gd2UgYWRkIGluZGV4ZWQgcHJvcGVydGllcyBv
biB0aGluZ3MgaW4gdGhlIHByb3RvdHlwZSBjaGFpbgpkaWZmIC0tZ2l0IGEvSlNUZXN0cy93YXNt
L2Z1bmN0aW9uLXRlc3RzL21lbW9yeS1yZXVzZS5qcyBiL0pTVGVzdHMvd2FzbS9mdW5jdGlvbi10
ZXN0cy9tZW1vcnktcmV1c2UuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZmVjY2NjZWVjZDQwZTI4YThjNmQ3NWZm
Y2E3MzgzNDZmMzE0NWI5NwotLS0gL2Rldi9udWxsCisrKyBiL0pTVGVzdHMvd2FzbS9mdW5jdGlv
bi10ZXN0cy9tZW1vcnktcmV1c2UuanMKQEAgLTAsMCArMSwxMTMgQEAKK2ltcG9ydCBCdWlsZGVy
IGZyb20gJy4uL0J1aWxkZXIuanMnCitpbXBvcnQgKiBhcyBhc3NlcnQgZnJvbSAnLi4vYXNzZXJ0
LmpzJworCitjb25zdCBjb3VudCA9IDEwOworY29uc3QgcGFnZXMgPSA2OworY29uc3QgbWVtb3J5
RGVzY3JpcHRpb24gPSB7aW5pdGlhbDoxfTsKK2NvbnN0IHBhZ2VTaXplID0gNjQgKiAxMDI0Owor
CitmdW5jdGlvbiBjcmVhdGVXYXNtSW5zdGFuY2UobWVtb3J5KSB7CisgICAgY29uc3QgYnVpbGRl
ciA9IG5ldyBCdWlsZGVyKCkKKyAgICAgICAgLlR5cGUoKS5FbmQoKQorICAgICAgICAuSW1wb3J0
KCkKKyAgICAgICAgICAgIC5NZW1vcnkoImltcCIsICJtZW1vcnkiLCBtZW1vcnlEZXNjcmlwdGlv
bikKKyAgICAgICAgLkVuZCgpCisgICAgICAgIC5GdW5jdGlvbigpLkVuZCgpCisgICAgICAgIC5F
eHBvcnQoKQorICAgICAgICAgICAgLkZ1bmN0aW9uKCJjdXJyZW50IikKKyAgICAgICAgICAgIC5G
dW5jdGlvbigiZ2V0IikKKyAgICAgICAgICAgIC5GdW5jdGlvbigiZ3JvdyIpCisgICAgICAgIC5F
bmQoKQorICAgICAgICAuQ29kZSgpCisgICAgICAgICAgICAuRnVuY3Rpb24oImN1cnJlbnQiLCB7
IHBhcmFtczogW10sIHJldDogImkzMiIgfSkKKyAgICAgICAgICAgICAgICAuQ3VycmVudE1lbW9y
eSgwKQorICAgICAgICAgICAgICAgIC5SZXR1cm4oKQorICAgICAgICAgICAgLkVuZCgpCisgICAg
ICAgICAgICAuRnVuY3Rpb24oImdldCIsIHsgcGFyYW1zOiBbImkzMiJdLCByZXQ6ICJpMzIiIH0p
CisgICAgICAgICAgICAgICAgLkdldExvY2FsKDApCisgICAgICAgICAgICAgICAgLkkzMkxvYWQo
MiwgMCkKKyAgICAgICAgICAgICAgICAuUmV0dXJuKCkKKyAgICAgICAgICAgIC5FbmQoKQorICAg
ICAgICAgICAgLkZ1bmN0aW9uKCJncm93IiwgeyBwYXJhbXM6IFsiaTMyIl0sIHJldDogImkzMiIg
fSkKKyAgICAgICAgICAgICAgICAuR2V0TG9jYWwoMCkKKyAgICAgICAgICAgICAgICAuR3Jvd01l
bW9yeSgwKQorICAgICAgICAgICAgICAgIC5SZXR1cm4oKQorICAgICAgICAgICAgLkVuZCgpCisg
ICAgICAgIC5FbmQoKTsKKworICAgIGNvbnN0IGJpbiA9IGJ1aWxkZXIuV2ViQXNzZW1ibHkoKS5n
ZXQoKTsKKyAgICBjb25zdCBtb2R1bGUgPSBuZXcgV2ViQXNzZW1ibHkuTW9kdWxlKGJpbik7Cisg
ICAgcmV0dXJuIG5ldyBXZWJBc3NlbWJseS5JbnN0YW5jZShtb2R1bGUsIHtpbXA6IHttZW1vcnl9
fSk7Cit9CisKK2Z1bmN0aW9uIGRvRmlsbE1lbW9yeShtZW0sIGxlbmd0aCkgeworICAgIGNvbnN0
IGJ1ZiA9IG5ldyBVaW50MzJBcnJheShtZW0uYnVmZmVyKTsKKworICAgIGZvciAobGV0IGkgPSAw
OyBpIDwgbGVuZ3RoOyArK2kpIHsKKyAgICAgICAgYnVmW2kgKiA0XSA9IGkgKyAxOworICAgIH0K
K30KKworZnVuY3Rpb24gZG9DaGVja1RyYXAoaW5zdGFuY2VzLCBtZW0sIG51bVBhZ2VzLCBsZW5n
dGgpIHsKKyAgICBjb25zdCBidWYgPSBuZXcgVWludDMyQXJyYXkobWVtLmJ1ZmZlcik7CisKKyAg
ICBmb3IgKGxldCBpbnN0YW5jZSBvZiBpbnN0YW5jZXMpIHsKKyAgICAgICAgY29uc3QgZm9vID0g
aW5zdGFuY2UuZXhwb3J0cy5nZXQ7CisgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbGVuZ3Ro
OyBpKyspIHsKKyAgICAgICAgICAgIGFzc2VydC5lcShmb28oaSAqIDQpLCBidWZbaV0pOworICAg
ICAgICB9CisgICAgICAgIGFzc2VydC50aHJvd3MoKCkgPT4gZm9vKG51bVBhZ2VzICogcGFnZVNp
emUgKyAxKSwgV2ViQXNzZW1ibHkuUnVudGltZUVycm9yLCAiT3V0IG9mIGJvdW5kcyBtZW1vcnkg
YWNjZXNzIik7CisgICAgfQorfQorCitmdW5jdGlvbiBkb0NoZWNrTm9UcmFwKGluc3RhbmNlcywg
bWVtLCBudW1QYWdlcywgbGVuZ3RoKSB7CisgICAgY29uc3QgYnVmID0gbmV3IFVpbnQzMkFycmF5
KG1lbS5idWZmZXIpOworCisgICAgZm9yIChsZXQgaW5zdGFuY2Ugb2YgaW5zdGFuY2VzKSB7Cisg
ICAgICAgIGNvbnN0IGZvbyA9IGluc3RhbmNlLmV4cG9ydHMuZ2V0OworICAgICAgICBmb3IgKGxl
dCBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7CisgICAgICAgICAgICBhc3NlcnQuZXEoZm9vKGkg
KiA0KSwgYnVmW2ldKTsKKyAgICAgICAgfQorICAgICAgICBhc3NlcnQuZXEoZm9vKG51bVBhZ2Vz
ICogcGFnZVNpemUgKyAxKSwgMCk7CisgICAgfQorfQorCitmdW5jdGlvbiBkb01lbW9yeUdyb3co
aW5zdGFuY2VzKSB7CisgICAgY29uc3QgaW5zdGFuY2UgPSBpbnN0YW5jZXNbMF07IC8vIFRha2Ug
Zmlyc3QgaW5zdGFuY2UgYW5kIGdyb3cgc2hhcmVkIG1lbW9yeQorICAgIGluc3RhbmNlLmV4cG9y
dHMuZ3JvdygxKTsKK30KKworZnVuY3Rpb24gZG9DaGVjayhtZW0sIGluc3RhbmNlcywgbnVtUGFn
ZXMpIHsKKyAgICBjb25zdCBsZW5ndGggPSBtZW0uYnVmZmVyLmJ5dGVMZW5ndGggLyA0OworICAg
IAorICAgIGRvRmlsbE1lbW9yeShtZW0sIGxlbmd0aCk7CisgICAgZG9DaGVja1RyYXAoaW5zdGFu
Y2VzLCBtZW0sIG51bVBhZ2VzLCBsZW5ndGgpOworICAgIGRvTWVtb3J5R3JvdyhpbnN0YW5jZXMp
OworICAgIGRvQ2hlY2tOb1RyYXAoaW5zdGFuY2VzLCBtZW0sIG51bVBhZ2VzLCBsZW5ndGgpOwor
fQorCitmdW5jdGlvbiBjaGVja1dhc21JbnN0YW5jZXNXaXRoU2hhcmVkTWVtb3J5KCkgeworICAg
IGNvbnN0IG1lbSA9IG5ldyBXZWJBc3NlbWJseS5NZW1vcnkobWVtb3J5RGVzY3JpcHRpb24pOwor
CisgICAgY29uc3QgaW5zdGFuY2VzID0gW107CisgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBjb3Vu
dDsgaSsrKSB7CisgICAgICAgIGluc3RhbmNlcy5wdXNoKGNyZWF0ZVdhc21JbnN0YW5jZShtZW0p
KTsKKyAgICB9CisKKyAgICBmb3IobGV0IGkgPSAxOyBpIDwgcGFnZXM7IGkrKykgeworICAgICAg
ICBkb0NoZWNrKG1lbSwgaW5zdGFuY2VzLCBpKTsKKyAgICB9CisKKyAgICBsZXQgaW5zdGFuY2U7
CisgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBjb3VudDsgaSsrKSB7CisgICAgICAgIGluc3RhbmNl
ID0gaW5zdGFuY2VzLnNoaWZ0KCk7CisgICAgfQorCisgICAgZnVsbEdDKCk7CisKKyAgICBjb25z
dCBzdXJ2aXZlZEluc3RhbmNlcyA9ICBbIGluc3RhbmNlIF07IC8vIFNob3VsZCBzdXJ2aXZlIG9u
bHkgb25lIGluc3RhbmNlIGFmdGVyIGZ1bGwgR0MKKworICAgIGRvQ2hlY2sobWVtLCBzdXJ2aXZl
ZEluc3RhbmNlcywgcGFnZXMpOyAvLyBSZWNoZWNrIG9ubHkgZm9yIHN1cnZpZSBpbnN0YW5jZXMK
K30KKworY2hlY2tXYXNtSW5zdGFuY2VzV2l0aFNoYXJlZE1lbW9yeSgpOwo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>334544</attachid>
            <date>2018-02-23 12:55:06 -0800</date>
            <delta_ts>2018-02-23 15:17:03 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-177305-20180223225501.patch</filename>
            <type>text/plain</type>
            <size>23273</size>
            <attacher name="GSkachkov">gskachkov</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjI4ODkyCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCAy
OWIzZGY5MTMzMWM4OTU4OTM1ZGVlNmVlYzhhMjAxY2IwYjYzZTM5Li4xMDE4YmZhMzVjMTIxNGEz
YWQyNmEzOTcxNTIwNjkyNDBiNzQ0YWZlIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwzOSBAQAorMjAxOC0wMS0xMSAgT2xla3NhbmRyIFNrYWNoa292ICA8Z3NrYWNoa292QGdt
YWlsLmNvbT4KKworICAgICAgICBXZWJBc3NlbWJseTogY2FjaGUgbWVtb3J5IGFkZHJlc3MgLyBz
aXplIG9uIGluc3RhbmNlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0xNzczMDUKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKwor
ICAgICAgICBDYWNoZSBtZW1vcnkgYWRkcmVzcy9zaXplIGluIHdhc206SW5zdGFuY2UgdG8gYXZv
aWQgbG9hZCB3YXNtOk1lbW9yeSAKKyAgICAgICAgb2JqZWN0IGR1cmluZyBhY2Nlc3MgdG8gbWVt
b3J5IGFuZCBtZW1vcnkgc2l6ZSBwcm9wZXJ0eSBpbiBKaVQKKworICAgICAgICAqIHdhc20vV2Fz
bUIzSVJHZW5lcmF0b3IuY3BwOgorICAgICAgICAoSlNDOjpXYXNtOjpCM0lSR2VuZXJhdG9yOjpy
ZXN0b3JlV2ViQXNzZW1ibHlHbG9iYWxTdGF0ZSk6CisgICAgICAgIChKU0M6Oldhc206OkIzSVJH
ZW5lcmF0b3I6OmFkZEN1cnJlbnRNZW1vcnkpOgorICAgICAgICAoSlNDOjpXYXNtOjpCM0lSR2Vu
ZXJhdG9yOjphZGRDYWxsSW5kaXJlY3QpOgorICAgICAgICAqIHdhc20vV2FzbUJpbmRpbmcuY3Bw
OgorICAgICAgICAoSlNDOjpXYXNtOjp3YXNtVG9XYXNtKToKKyAgICAgICAgKiB3YXNtL1dhc21J
bnN0YW5jZS5oOgorICAgICAgICAoSlNDOjpXYXNtOjpJbnN0YW5jZTo6Y2FjaGVkTWVtb3J5IGNv
bnN0KToKKyAgICAgICAgKEpTQzo6V2FzbTo6SW5zdGFuY2U6OmNhY2hlZE1lbW9yeVNpemUgY29u
c3QpOgorICAgICAgICAoSlNDOjpXYXNtOjpJbnN0YW5jZTo6Y3JlYXRlV2Vha1B0cik6CisgICAg
ICAgIChKU0M6Oldhc206Okluc3RhbmNlOjpzZXRNZW1vcnkpOgorICAgICAgICAoSlNDOjpXYXNt
OjpJbnN0YW5jZTo6dXBkYXRlQ2FjaGVkTWVtb3J5KToKKyAgICAgICAgKEpTQzo6V2FzbTo6SW5z
dGFuY2U6Om9mZnNldE9mQ2FjaGVkTWVtb3J5KToKKyAgICAgICAgKEpTQzo6V2FzbTo6SW5zdGFu
Y2U6Om9mZnNldE9mQ2FjaGVkTWVtb3J5U2l6ZSk6CisgICAgICAgIChKU0M6Oldhc206Okluc3Rh
bmNlOjpvZmZzZXRPZkNhY2hlZEluZGV4aW5nTWFzayk6CisgICAgICAgIChKU0M6Oldhc206Oklu
c3RhbmNlOjphbGxvY2F0aW9uU2l6ZSk6CisgICAgICAgICogd2FzbS9XYXNtTWVtb3J5LmNwcDoK
KyAgICAgICAgKEpTQzo6V2FzbTo6TWVtb3J5Ojpncm93KToKKyAgICAgICAgKEpTQzo6V2FzbTo6
TWVtb3J5OjpyZWdpc3Rlckluc3RhbmNlKToKKyAgICAgICAgKiB3YXNtL1dhc21NZW1vcnkuaDoK
KyAgICAgICAgKEpTQzo6V2FzbTo6TWVtb3J5OjppbmRleGluZ01hc2spOgorICAgICAgICAqIHdh
c20vanMvSlNUb1dhc20uY3BwOgorICAgICAgICAoSlNDOjpXYXNtOjpjcmVhdGVKU1RvV2FzbVdy
YXBwZXIpOgorICAgICAgICAqIHdhc20vanMvV2ViQXNzZW1ibHlNb2R1bGVSZWNvcmQuY3BwOgor
ICAgICAgICAoSlNDOjpXZWJBc3NlbWJseU1vZHVsZVJlY29yZDo6ZXZhbHVhdGUpOgorCiAyMDE4
LTAyLTIwICBTYWFtIEJhcmF0aSAgPHNiYXJhdGlAYXBwbGUuY29tPgogCiAgICAgICAgIERGRzo6
VmFyYXJnc0ZvcndhcmRpbmdQaGFzZSBzaG91bGQgZWxpbWluYXRlIGdldHRpbmcgYXJndW1lbnQg
bGVuZ3RoCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQjNJUkdl
bmVyYXRvci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQjNJUkdlbmVyYXRv
ci5jcHAKaW5kZXggNWZhMzg2NjFlYWRmOGQ3NmI3YWI3OTliMGU5NDA1MzQ1YWViY2QxNC4uMmVl
MzNkZjI2MWNiN2RjZDJhYzY1MGFhNDUxNjM0OTU2ZGI3M2NmYSAxMDA2NDQKLS0tIGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUIzSVJHZW5lcmF0b3IuY3BwCisrKyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS93YXNtL1dhc21CM0lSR2VuZXJhdG9yLmNwcApAQCAtNDg1LDEzICs0ODUs
MTIgQEAgdm9pZCBCM0lSR2VuZXJhdG9yOjpyZXN0b3JlV2ViQXNzZW1ibHlHbG9iYWxTdGF0ZShS
ZXN0b3JlQ2FjaGVkU3RhY2tMaW1pdCByZXN0b3IKIAogICAgICAgICBwYXRjaHBvaW50LT5zZXRH
ZW5lcmF0b3IoW3Bpbm5lZFJlZ3NdIChDQ2FsbEhlbHBlcnMmIGppdCwgY29uc3QgQjM6OlN0YWNr
bWFwR2VuZXJhdGlvblBhcmFtcyYgcGFyYW1zKSB7CiAgICAgICAgICAgICBHUFJSZWcgYmFzZU1l
bW9yeSA9IHBpbm5lZFJlZ3MtPmJhc2VNZW1vcnlQb2ludGVyOwotICAgICAgICAgICAgaml0Lmxv
YWRQdHIoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKHBhcmFtc1swXS5ncHIoKSwgSW5zdGFuY2U6Om9m
ZnNldE9mTWVtb3J5KCkpLCBiYXNlTWVtb3J5KTsKICAgICAgICAgICAgIGNvbnN0IGF1dG8mIHNp
emVSZWdzID0gcGlubmVkUmVncy0+c2l6ZVJlZ2lzdGVyczsKICAgICAgICAgICAgIEFTU0VSVChz
aXplUmVncy5zaXplKCkgPj0gMSk7CiAgICAgICAgICAgICBBU1NFUlQoIXNpemVSZWdzWzBdLnNp
emVPZmZzZXQpOyAvLyBUaGUgZm9sbG93aW5nIGNvZGUgYXNzdW1lcyB3ZSBzdGFydCBhdCAwLCBh
bmQgY2FsY3VsYXRlcyBzdWJzZXF1ZW50IHNpemUgcmVnaXN0ZXJzIHJlbGF0aXZlIHRvIDAuCi0g
ICAgICAgICAgICBqaXQubG9hZFB0cihDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoYmFzZU1lbW9yeSwg
TWVtb3J5OjpvZmZzZXRPZlNpemUoKSksIHNpemVSZWdzWzBdLnNpemVSZWdpc3Rlcik7Ci0gICAg
ICAgICAgICBqaXQubG9hZFB0cihDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoYmFzZU1lbW9yeSwgTWVt
b3J5OjpvZmZzZXRPZkluZGV4aW5nTWFzaygpKSwgcGlubmVkUmVncy0+aW5kZXhpbmdNYXNrKTsK
LSAgICAgICAgICAgIGppdC5sb2FkUHRyKENDYWxsSGVscGVyczo6QWRkcmVzcyhiYXNlTWVtb3J5
LCBNZW1vcnk6Om9mZnNldE9mTWVtb3J5KCkpLCBiYXNlTWVtb3J5KTsKKyAgICAgICAgICAgIGpp
dC5sb2FkUHRyKENDYWxsSGVscGVyczo6QWRkcmVzcyhwYXJhbXNbMF0uZ3ByKCksIEluc3RhbmNl
OjpvZmZzZXRPZkNhY2hlZE1lbW9yeVNpemUoKSksIHNpemVSZWdzWzBdLnNpemVSZWdpc3Rlcik7
CisgICAgICAgICAgICBqaXQubG9hZFB0cihDQ2FsbEhlbHBlcnM6OkFkZHJlc3MocGFyYW1zWzBd
LmdwcigpLCBJbnN0YW5jZTo6b2Zmc2V0T2ZDYWNoZWRJbmRleGluZ01hc2soKSksIHBpbm5lZFJl
Z3MtPmluZGV4aW5nTWFzayk7CisgICAgICAgICAgICBqaXQubG9hZFB0cihDQ2FsbEhlbHBlcnM6
OkFkZHJlc3MocGFyYW1zWzBdLmdwcigpLCBJbnN0YW5jZTo6b2Zmc2V0T2ZDYWNoZWRNZW1vcnko
KSksIGJhc2VNZW1vcnkpOwogICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMTsgaSA8IHNp
emVSZWdzLnNpemUoKTsgKytpKQogICAgICAgICAgICAgICAgIGppdC5hZGQ2NChDQ2FsbEhlbHBl
cnM6OlRydXN0ZWRJbW0zMigtc2l6ZVJlZ3NbaV0uc2l6ZU9mZnNldCksIHNpemVSZWdzWzBdLnNp
emVSZWdpc3Rlciwgc2l6ZVJlZ3NbaV0uc2l6ZVJlZ2lzdGVyKTsKICAgICAgICAgfSk7CkBAIC02
MDQsMTEgKzYwMyw5IEBAIGF1dG8gQjNJUkdlbmVyYXRvcjo6YWRkR3Jvd01lbW9yeShFeHByZXNz
aW9uVHlwZSBkZWx0YSwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCkKIAogYXV0byBCM0lSR2VuZXJh
dG9yOjphZGRDdXJyZW50TWVtb3J5KEV4cHJlc3Npb25UeXBlJiByZXN1bHQpIC0+IFBhcnRpYWxS
ZXN1bHQKIHsKLSAgICBWYWx1ZSogbWVtb3J5T2JqZWN0ID0gbV9jdXJyZW50QmxvY2stPmFwcGVu
ZE5ldzxNZW1vcnlWYWx1ZT4obV9wcm9jLCBMb2FkLCBwb2ludGVyVHlwZSgpLCBvcmlnaW4oKSwg
aW5zdGFuY2VWYWx1ZSgpLCBzYWZlQ2FzdDxpbnQzMl90PihJbnN0YW5jZTo6b2Zmc2V0T2ZNZW1v
cnkoKSkpOwotCiAgICAgc3RhdGljX2Fzc2VydChzaXplb2YoZGVjbHR5cGUoc3RhdGljX2Nhc3Q8
TWVtb3J5Kj4obnVsbHB0ciktPnNpemUoKSkpID09IHNpemVvZih1aW50NjRfdCksICJjb2RlZ2Vu
IHJlbGllcyBvbiB0aGlzIHNpemUiKTsKLSAgICBWYWx1ZSogc2l6ZSA9IG1fY3VycmVudEJsb2Nr
LT5hcHBlbmROZXc8TWVtb3J5VmFsdWU+KG1fcHJvYywgTG9hZCwgSW50NjQsIG9yaWdpbigpLCBt
ZW1vcnlPYmplY3QsIHNhZmVDYXN0PGludDMyX3Q+KE1lbW9yeTo6b2Zmc2V0T2ZTaXplKCkpKTsK
LSAgICAKKyAgICBWYWx1ZSogc2l6ZSA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8TWVtb3J5
VmFsdWU+KG1fcHJvYywgTG9hZCwgSW50NjQsIG9yaWdpbigpLCBpbnN0YW5jZVZhbHVlKCksIHNh
ZmVDYXN0PGludDMyX3Q+KEluc3RhbmNlOjpvZmZzZXRPZkNhY2hlZE1lbW9yeVNpemUoKSkpOwor
CiAgICAgY29uc3RleHByIHVpbnQzMl90IHNoaWZ0VmFsdWUgPSAxNjsKICAgICBzdGF0aWNfYXNz
ZXJ0KFBhZ2VDb3VudDo6cGFnZVNpemUgPT0gMXVsbCA8PCBzaGlmdFZhbHVlLCAiVGhpcyBtdXN0
IGhvbGQgZm9yIHRoZSBjb2RlIGJlbG93IHRvIGJlIGNvcnJlY3QuIik7CiAgICAgVmFsdWUqIG51
bVBhZ2VzID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxWYWx1ZT4obV9wcm9jLCBaU2hyLCBv
cmlnaW4oKSwKQEAgLTEyOTksMTQgKzEyOTYsMTUgQEAgYXV0byBCM0lSR2VuZXJhdG9yOjphZGRD
YWxsSW5kaXJlY3QoY29uc3QgU2lnbmF0dXJlJiBzaWduYXR1cmUsIFZlY3RvcjxFeHByZXNzaW8K
ICAgICAgICAgICAgIGppdC5sb2FkUHRyKENDYWxsSGVscGVyczo6QWRkcmVzcyhvbGRDb250ZXh0
SW5zdGFuY2UsIEluc3RhbmNlOjpvZmZzZXRPZkNhY2hlZFN0YWNrTGltaXQoKSksIGJhc2VNZW1v
cnkpOwogICAgICAgICAgICAgaml0LnN0b3JlUHRyKGJhc2VNZW1vcnksIENDYWxsSGVscGVyczo6
QWRkcmVzcyhuZXdDb250ZXh0SW5zdGFuY2UsIEluc3RhbmNlOjpvZmZzZXRPZkNhY2hlZFN0YWNr
TGltaXQoKSkpOwogICAgICAgICAgICAgaml0LnN0b3JlV2FzbUNvbnRleHRJbnN0YW5jZShuZXdD
b250ZXh0SW5zdGFuY2UpOwotICAgICAgICAgICAgaml0LmxvYWRQdHIoQ0NhbGxIZWxwZXJzOjpB
ZGRyZXNzKG5ld0NvbnRleHRJbnN0YW5jZSwgSW5zdGFuY2U6Om9mZnNldE9mTWVtb3J5KCkpLCBi
YXNlTWVtb3J5KTsgLy8gTWVtb3J5Ki4KLSAgICAgICAgICAgIEFTU0VSVChzaXplUmVncy5zaXpl
KCkgPT0gMSk7CiAgICAgICAgICAgICBBU1NFUlQoc2l6ZVJlZ3NbMF0uc2l6ZVJlZ2lzdGVyICE9
IGJhc2VNZW1vcnkpOworICAgICAgICAgICAgLy8gRklYTUU6IFdlIHNob3VsZCBzdXBwb3J0IG1v
cmUgdGhhbiBvbmUgbWVtb3J5IHNpemUgcmVnaXN0ZXIKKyAgICAgICAgICAgIC8vICAgc2VlOiBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTYyOTUyCisgICAgICAgICAg
ICBBU1NFUlQoc2l6ZVJlZ3Muc2l6ZSgpID09IDEpOwogICAgICAgICAgICAgQVNTRVJUKHNpemVS
ZWdzWzBdLnNpemVSZWdpc3RlciAhPSBuZXdDb250ZXh0SW5zdGFuY2UpOwogICAgICAgICAgICAg
QVNTRVJUKCFzaXplUmVnc1swXS5zaXplT2Zmc2V0KTsKLSAgICAgICAgICAgIGppdC5sb2FkUHRy
KENDYWxsSGVscGVyczo6QWRkcmVzcyhiYXNlTWVtb3J5LCBNZW1vcnk6Om9mZnNldE9mSW5kZXhp
bmdNYXNrKCkpLCBwaW5uZWRSZWdzLmluZGV4aW5nTWFzayk7IC8vIEluZGV4aW5nIG1hc2suCi0g
ICAgICAgICAgICBqaXQubG9hZFB0cihDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoYmFzZU1lbW9yeSwg
TWVtb3J5OjpvZmZzZXRPZlNpemUoKSksIHNpemVSZWdzWzBdLnNpemVSZWdpc3Rlcik7IC8vIE1l
bW9yeSBzaXplLgotICAgICAgICAgICAgaml0LmxvYWRQdHIoQ0NhbGxIZWxwZXJzOjpBZGRyZXNz
KGJhc2VNZW1vcnksIE1lbW9yeTo6b2Zmc2V0T2ZNZW1vcnkoKSksIGJhc2VNZW1vcnkpOyAvLyBN
ZW1vcnk6OnZvaWQqLgorICAgICAgICAgICAgaml0LmxvYWRQdHIoQ0NhbGxIZWxwZXJzOjpBZGRy
ZXNzKG5ld0NvbnRleHRJbnN0YW5jZSwgSW5zdGFuY2U6Om9mZnNldE9mQ2FjaGVkSW5kZXhpbmdN
YXNrKCkpLCBwaW5uZWRSZWdzLmluZGV4aW5nTWFzayk7IC8vIEluZGV4aW5nIG1hc2suCisgICAg
ICAgICAgICBqaXQubG9hZFB0cihDQ2FsbEhlbHBlcnM6OkFkZHJlc3MobmV3Q29udGV4dEluc3Rh
bmNlLCBJbnN0YW5jZTo6b2Zmc2V0T2ZDYWNoZWRNZW1vcnlTaXplKCkpLCBzaXplUmVnc1swXS5z
aXplUmVnaXN0ZXIpOyAvLyBNZW1vcnkgc2l6ZS4KKyAgICAgICAgICAgIGppdC5sb2FkUHRyKEND
YWxsSGVscGVyczo6QWRkcmVzcyhuZXdDb250ZXh0SW5zdGFuY2UsIEluc3RhbmNlOjpvZmZzZXRP
ZkNhY2hlZE1lbW9yeSgpKSwgYmFzZU1lbW9yeSk7IC8vIE1lbW9yeTo6dm9pZCouCiAgICAgICAg
IH0pOwogICAgICAgICBkb0NvbnRleHRTd2l0Y2gtPmFwcGVuZE5ld0NvbnRyb2xWYWx1ZShtX3By
b2MsIEp1bXAsIG9yaWdpbigpLCBjb250aW51YXRpb24pOwogCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQmluZGluZy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvd2FzbS9XYXNtQmluZGluZy5jcHAKaW5kZXggNzU5YjI2OGQ0Y2YxYWI4NjRjYWQyYWI1ZDg3
NGI4NGNhNjNiYTYwYy4uODlmOTFmMzNhMTcwYjBiYjMzZTgxZjI3ODUzZGYzYTY1YzkwNDg3MiAx
MDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUJpbmRpbmcuY3BwCisr
KyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21CaW5kaW5nLmNwcApAQCAtNjQsMTEg
KzY0LDEwIEBAIEV4cGVjdGVkPE1hY3JvQXNzZW1ibGVyQ29kZVJlZiwgQmluZGluZ0ZhaWx1cmU+
IHdhc21Ub1dhc20odW5zaWduZWQgaW1wb3J0SW5kZXgpCiAKICAgICAvLyBGSVhNRSB0aGUgZm9s
bG93aW5nIGNvZGUgYXNzdW1lcyB0aGF0IGFsbCBXYXNtOjpJbnN0YW5jZSBoYXZlIHRoZSBzYW1l
IHBpbm5lZCByZWdpc3RlcnMuIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0xNjI5NTIKICAgICAvLyBTZXQgdXAgdGhlIGNhbGxlZSdzIGJhc2VNZW1vcnkgcmVnaXN0ZXIg
YXMgd2VsbCBhcyB0aGUgbWVtb3J5IHNpemUgcmVnaXN0ZXJzLgotICAgIGppdC5sb2FkUHRyKEpJ
VDo6QWRkcmVzcyhiYXNlTWVtb3J5LCBJbnN0YW5jZTo6b2Zmc2V0T2ZNZW1vcnkoKSksIGJhc2VN
ZW1vcnkpOyAvLyBXYXNtOjpNZW1vcnkqLgogICAgIEFTU0VSVCghc2l6ZVJlZ3NbMF0uc2l6ZU9m
ZnNldCk7IC8vIFRoZSBmb2xsb3dpbmcgY29kZSBhc3N1bWVzIHdlIHN0YXJ0IGF0IDAsIGFuZCBj
YWxjdWxhdGVzIHN1YnNlcXVlbnQgc2l6ZSByZWdpc3RlcnMgcmVsYXRpdmUgdG8gMC4KLSAgICBq
aXQubG9hZFB0cihDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoYmFzZU1lbW9yeSwgTWVtb3J5OjpvZmZz
ZXRPZkluZGV4aW5nTWFzaygpKSwgcGlubmVkUmVncy5pbmRleGluZ01hc2spOyAvLyBJbmRleGlu
ZyBtYXNrLgotICAgIGppdC5sb2FkUHRyKEpJVDo6QWRkcmVzcyhiYXNlTWVtb3J5LCBXYXNtOjpN
ZW1vcnk6Om9mZnNldE9mU2l6ZSgpKSwgc2l6ZVJlZ3NbMF0uc2l6ZVJlZ2lzdGVyKTsgLy8gTWVt
b3J5IHNpemUuCi0gICAgaml0LmxvYWRQdHIoSklUOjpBZGRyZXNzKGJhc2VNZW1vcnksIFdhc206
Ok1lbW9yeTo6b2Zmc2V0T2ZNZW1vcnkoKSksIGJhc2VNZW1vcnkpOyAvLyBXYXNtOjpNZW1vcnk6
OnZvaWQqLgorICAgIGppdC5sb2FkUHRyKEpJVDo6QWRkcmVzcyhiYXNlTWVtb3J5LCBXYXNtOjpJ
bnN0YW5jZTo6b2Zmc2V0T2ZDYWNoZWRJbmRleGluZ01hc2soKSksIHBpbm5lZFJlZ3MuaW5kZXhp
bmdNYXNrKTsgLy8gSW5kZXhpbmcgbWFzay4KKyAgICBqaXQubG9hZFB0cihKSVQ6OkFkZHJlc3Mo
YmFzZU1lbW9yeSwgV2FzbTo6SW5zdGFuY2U6Om9mZnNldE9mQ2FjaGVkTWVtb3J5U2l6ZSgpKSwg
c2l6ZVJlZ3NbMF0uc2l6ZVJlZ2lzdGVyKTsgLy8gTWVtb3J5IHNpemUuCisgICAgaml0LmxvYWRQ
dHIoSklUOjpBZGRyZXNzKGJhc2VNZW1vcnksIFdhc206Okluc3RhbmNlOjpvZmZzZXRPZkNhY2hl
ZE1lbW9yeSgpKSwgYmFzZU1lbW9yeSk7IC8vIFdhc206Ok1lbW9yeTo6dm9pZCouCiAgICAgZm9y
ICh1bnNpZ25lZCBpID0gMTsgaSA8IHNpemVSZWdzLnNpemUoKTsgKytpKSB7CiAgICAgICAgIEFT
U0VSVChzaXplUmVnc1tpXS5zaXplUmVnaXN0ZXIgIT0gYmFzZU1lbW9yeSk7CiAgICAgICAgIEFT
U0VSVChzaXplUmVnc1tpXS5zaXplUmVnaXN0ZXIgIT0gc2NyYXRjaCk7CmRpZmYgLS1naXQgYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtSW5zdGFuY2UuaCBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS93YXNtL1dhc21JbnN0YW5jZS5oCmluZGV4IGFhOWY3Y2Y2MDI1ZmE4OTI5M2Y0NjA5
YTVhZjc5ZDJjMDE1YmNkYWIuLmVkZDVhNjFjYzNiY2E2ZWIzMTZlNDk5Nzg2NTlkODQ1ZjZlZmUy
NjEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21JbnN0YW5jZS5o
CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21JbnN0YW5jZS5oCkBAIC02NSw4
ICs2NSwyNSBAQCBwdWJsaWM6CiAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2soKSB7IHJldHVybiBt
X2NvZGVCbG9jay5nZXQoKTsgfQogICAgIE1lbW9yeSogbWVtb3J5KCkgeyByZXR1cm4gbV9tZW1v
cnkuZ2V0KCk7IH0KICAgICBUYWJsZSogdGFibGUoKSB7IHJldHVybiBtX3RhYmxlLmdldCgpOyB9
Ci0gICAgCi0gICAgdm9pZCBzZXRNZW1vcnkoUmVmPE1lbW9yeT4mJiBtZW1vcnkpIHsgbV9tZW1v
cnkgPSBXVEZNb3ZlKG1lbW9yeSk7IH0KKworICAgIHZvaWQqIGNhY2hlZE1lbW9yeSgpIGNvbnN0
IHsgcmV0dXJuIG1fY2FjaGVkTWVtb3J5OyB9CisgICAgc2l6ZV90IGNhY2hlZE1lbW9yeVNpemUo
KSBjb25zdCB7IHJldHVybiBtX2NhY2hlZE1lbW9yeVNpemU7IH0KKworICAgIFdlYWtQdHI8SW5z
dGFuY2U+IGNyZWF0ZVdlYWtQdHIoKSB7IHJldHVybiBtX3dlYWtQdHJGYWN0b3J5LmNyZWF0ZVdl
YWtQdHIoKnRoaXMpOyB9CisgICAgdm9pZCBzZXRNZW1vcnkoUmVmPE1lbW9yeT4mJiBtZW1vcnkp
CisgICAgeworICAgICAgICBtX21lbW9yeSA9IFdURk1vdmUobWVtb3J5KTsKKyAgICAgICAgbV9t
ZW1vcnkuZ2V0KCktPnJlZ2lzdGVySW5zdGFuY2UodGhpcyk7CisgICAgICAgIHVwZGF0ZUNhY2hl
ZE1lbW9yeSgpOworICAgIH0KKyAgICB2b2lkIHVwZGF0ZUNhY2hlZE1lbW9yeSgpCisgICAgewor
ICAgICAgICBpZiAobV9tZW1vcnkgIT0gbnVsbHB0cikgeworICAgICAgICAgICAgbV9jYWNoZWRN
ZW1vcnkgPSBtZW1vcnkoKS0+bWVtb3J5KCk7CisgICAgICAgICAgICBtX2NhY2hlZE1lbW9yeVNp
emUgPSBtZW1vcnkoKS0+c2l6ZSgpOworICAgICAgICAgICAgbV9jYWNoZWRJbmRleGluZ01hc2sg
PSBtZW1vcnkoKS0+aW5kZXhpbmdNYXNrKCk7CisgICAgICAgIH0KKyAgICB9CiAgICAgdm9pZCBz
ZXRUYWJsZShSZWY8VGFibGU+JiYgdGFibGUpIHsgbV90YWJsZSA9IFdURk1vdmUodGFibGUpOyB9
CiAKICAgICBpbnQzMl90IGxvYWRJMzJHbG9iYWwodW5zaWduZWQgaSkgY29uc3QgeyByZXR1cm4g
bV9nbG9iYWxzLmdldCgpW2ldOyB9CkBAIC03OCw2ICs5NSw5IEBAIHB1YmxpYzoKICAgICBzdGF0
aWMgcHRyZGlmZl90IG9mZnNldE9mTWVtb3J5KCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKElu
c3RhbmNlLCBtX21lbW9yeSk7IH0KICAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mR2xvYmFs
cygpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihJbnN0YW5jZSwgbV9nbG9iYWxzKTsgfQogICAg
IHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZUYWJsZSgpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRP
RihJbnN0YW5jZSwgbV90YWJsZSk7IH0KKyAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mQ2Fj
aGVkTWVtb3J5KCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKEluc3RhbmNlLCBtX2NhY2hlZE1l
bW9yeSk7IH0KKyAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mQ2FjaGVkTWVtb3J5U2l6ZSgp
IHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihJbnN0YW5jZSwgbV9jYWNoZWRNZW1vcnlTaXplKTsg
fQorICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZDYWNoZWRJbmRleGluZ01hc2soKSB7IHJl
dHVybiBPQkpFQ1RfT0ZGU0VUT0YoSW5zdGFuY2UsIG1fY2FjaGVkSW5kZXhpbmdNYXNrKTsgfQog
ICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZQb2ludGVyVG9Ub3BFbnRyeUZyYW1lKCkgeyBy
ZXR1cm4gT0JKRUNUX09GRlNFVE9GKEluc3RhbmNlLCBtX3BvaW50ZXJUb1RvcEVudHJ5RnJhbWUp
OyB9CiAKICAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mUG9pbnRlclRvQWN0dWFsU3RhY2tM
aW1pdCgpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihJbnN0YW5jZSwgbV9wb2ludGVyVG9BY3R1
YWxTdGFja0xpbWl0KTsgfQpAQCAtMTI2LDkgKzE0NiwxMSBAQCBwcml2YXRlOgogICAgIHsKICAg
ICAgICAgcmV0dXJuIChvZmZzZXRPZlRhaWwoKSArIHNpemVvZihJbXBvcnRGdW5jdGlvbkluZm8p
ICogbnVtSW1wb3J0RnVuY3Rpb25zKS51bnNhZmVHZXQoKTsKICAgICB9Ci0KICAgICB2b2lkKiBt
X293bmVyIHsgbnVsbHB0ciB9OyAvLyBJbiBhIEpTIGVtYmVkZGluZywgdGhpcyBpcyBhIEpTV2Vi
QXNzZW1ibHlJbnN0YW5jZSouCiAgICAgQ29udGV4dCogbV9jb250ZXh0IHsgbnVsbHB0ciB9Owor
ICAgIHZvaWQqIG1fY2FjaGVkTWVtb3J5IHsgbnVsbHB0ciB9OworICAgIHNpemVfdCBtX2NhY2hl
ZE1lbW9yeVNpemUgeyAwIH07CisgICAgc2l6ZV90IG1fY2FjaGVkSW5kZXhpbmdNYXNrIHsgMCB9
OwogICAgIFJlZjxNb2R1bGU+IG1fbW9kdWxlOwogICAgIFJlZlB0cjxDb2RlQmxvY2s+IG1fY29k
ZUJsb2NrOwogICAgIFJlZlB0cjxNZW1vcnk+IG1fbWVtb3J5OwpAQCAtMTM4LDYgKzE2MCw3IEBA
IHByaXZhdGU6CiAgICAgdm9pZCoqIG1fcG9pbnRlclRvQWN0dWFsU3RhY2tMaW1pdCB7IG51bGxw
dHIgfTsKICAgICB2b2lkKiBtX2NhY2hlZFN0YWNrTGltaXQgeyBiaXR3aXNlX2Nhc3Q8dm9pZCo+
KHN0ZDo6bnVtZXJpY19saW1pdHM8dWludHB0cl90Pjo6bWF4KCkpIH07CiAgICAgU3RvcmVUb3BD
YWxsRnJhbWVDYWxsYmFjayBtX3N0b3JlVG9wQ2FsbEZyYW1lOworICAgIFdlYWtQdHJGYWN0b3J5
PEluc3RhbmNlPiBtX3dlYWtQdHJGYWN0b3J5OwogICAgIHVuc2lnbmVkIG1fbnVtSW1wb3J0RnVu
Y3Rpb25zIHsgMCB9OwogfTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dh
c20vV2FzbU1lbW9yeS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTWVtb3J5
LmNwcAppbmRleCBkZDNlYTlmZmYzYzBlOTgxYmJkZjMyZmI4MWFlNmFjNWM5NzcyZDkyLi41MDc3
MmNlMTU4NzMzMzA2MDlmMDM4ODEyNGEyYTk2NmNjYzY3N2MxIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTWVtb3J5LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvd2FzbS9XYXNtTWVtb3J5LmNwcApAQCAtMjUsNiArMjUsNyBAQAogCiAjaW5jbHVkZSAi
Y29uZmlnLmgiCiAjaW5jbHVkZSAiV2FzbU1lbW9yeS5oIgorI2luY2x1ZGUgIldhc21JbnN0YW5j
ZS5oIgogCiAjaWYgRU5BQkxFKFdFQkFTU0VNQkxZKQogCkBAIC0zNzcsNiArMzc4LDExIEBAIEV4
cGVjdGVkPFBhZ2VDb3VudCwgTWVtb3J5OjpHcm93RmFpbFJlYXNvbj4gTWVtb3J5Ojpncm93KFBh
Z2VDb3VudCBkZWx0YSkKIAogICAgIGF1dG8gc3VjY2VzcyA9IFsmXSAoKSB7CiAgICAgICAgIG1f
Z3Jvd1N1Y2Nlc3NDYWxsYmFjayhHcm93U3VjY2Vzc1RhZywgb2xkUGFnZUNvdW50LCBuZXdQYWdl
Q291bnQpOworICAgICAgICAvLyBVcGRhdGUgY2FjaGUgZm9yIGluc3RhbmNlCisgICAgICAgIGZv
ciAoYXV0byYgaW5zdGFuY2UgOiBtX2luc3RhbmNlcykgeworICAgICAgICAgICAgaWYgKGluc3Rh
bmNlLmdldCgpICE9IG51bGxwdHIpCisgICAgICAgICAgICAgICAgaW5zdGFuY2UuZ2V0KCktPnVw
ZGF0ZUNhY2hlZE1lbW9yeSgpOworICAgICAgICB9CiAgICAgICAgIHJldHVybiBvbGRQYWdlQ291
bnQ7CiAgICAgfTsKIApAQCAtNDM3LDYgKzQ0MywxOCBAQCBFeHBlY3RlZDxQYWdlQ291bnQsIE1l
bW9yeTo6R3Jvd0ZhaWxSZWFzb24+IE1lbW9yeTo6Z3JvdyhQYWdlQ291bnQgZGVsdGEpCiAgICAg
cmV0dXJuIG9sZFBhZ2VDb3VudDsKIH0KIAordm9pZCBNZW1vcnk6OnJlZ2lzdGVySW5zdGFuY2Uo
SW5zdGFuY2UqIGluc3RhbmNlKQoreworICAgIHNpemVfdCBjb3VudCA9IG1faW5zdGFuY2VzLnNp
emUoKTsKKyAgICBmb3IgKHNpemVfdCBpbmRleCA9IDA7IGluZGV4IDwgY291bnQ7IGluZGV4Kysp
IHsKKyAgICAgICAgaWYgKG1faW5zdGFuY2VzLmF0KGluZGV4KS5nZXQoKSA9PSBudWxscHRyKSB7
CisgICAgICAgICAgICBtX2luc3RhbmNlcy5hdChpbmRleCkgPSBpbnN0YW5jZS0+Y3JlYXRlV2Vh
a1B0cigpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgfQorICAgIG1faW5z
dGFuY2VzLmFwcGVuZChpbnN0YW5jZS0+Y3JlYXRlV2Vha1B0cigpKTsKK30KKwogdm9pZCBNZW1v
cnk6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKIHsKICAgICBvdXQucHJpbnQoIk1lbW9y
eSBhdCAiLCBSYXdQb2ludGVyKG1fbWVtb3J5KSwgIiwgc2l6ZSAiLCBtX3NpemUsICJCIGNhcGFj
aXR5ICIsIG1fbWFwcGVkQ2FwYWNpdHksICJCLCBpbml0aWFsICIsIG1faW5pdGlhbCwgIiBtYXhp
bXVtICIsIG1fbWF4aW11bSwgIiBtb2RlICIsIG1ha2VTdHJpbmcobV9tb2RlKSk7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTWVtb3J5LmggYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvd2FzbS9XYXNtTWVtb3J5LmgKaW5kZXggZmZmOTRlYjkyMTNkYjRjZGZlZDM4
ZTNjM2MyNjZmMDk5ZTkyOTg5My4uMjIwYzBjZjE5YTc2NWFiNmI4MzhhYzg4Y2VlZDdmMTQ3YmMy
NjFhOCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU1lbW9yeS5o
CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21NZW1vcnkuaApAQCAtMzQsNiAr
MzQsOCBAQAogI2luY2x1ZGUgPHd0Zi9GdW5jdGlvbi5oPgogI2luY2x1ZGUgPHd0Zi9SZWZDb3Vu
dGVkLmg+CiAjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4K
KyNpbmNsdWRlIDx3dGYvV2Vha1B0ci5oPgogCiBuYW1lc3BhY2UgV1RGIHsKIGNsYXNzIFByaW50
U3RyZWFtOwpAQCAtNDMsNiArNDUsOCBAQCBuYW1lc3BhY2UgSlNDIHsKIAogbmFtZXNwYWNlIFdh
c20gewogCitjbGFzcyBJbnN0YW5jZTsKKwogY2xhc3MgTWVtb3J5IDogcHVibGljIFJlZkNvdW50
ZWQ8TWVtb3J5PiB7CiAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoTWVtb3J5KTsKICAgICBXVEZf
TUFLRV9GQVNUX0FMTE9DQVRFRDsKQEAgLTY2LDYgKzcwLDcgQEAgcHVibGljOgogCiAgICAgdm9p
ZCogbWVtb3J5KCkgY29uc3QgeyByZXR1cm4gbV9tZW1vcnk7IH0KICAgICBzaXplX3Qgc2l6ZSgp
IGNvbnN0IHsgcmV0dXJuIG1fc2l6ZTsgfQorICAgIHNpemVfdCBpbmRleGluZ01hc2soKSB7IHJl
dHVybiBtX2luZGV4aW5nTWFzazsgfQogICAgIFBhZ2VDb3VudCBzaXplSW5QYWdlcygpIGNvbnN0
IHsgcmV0dXJuIFBhZ2VDb3VudDo6ZnJvbUJ5dGVzKG1fc2l6ZSk7IH0KIAogICAgIFBhZ2VDb3Vu
dCBpbml0aWFsKCkgY29uc3QgeyByZXR1cm4gbV9pbml0aWFsOyB9CkBAIC04MCw2ICs4NSw3IEBA
IHB1YmxpYzoKICAgICAgICAgT3V0T2ZNZW1vcnksCiAgICAgfTsKICAgICBFeHBlY3RlZDxQYWdl
Q291bnQsIEdyb3dGYWlsUmVhc29uPiBncm93KFBhZ2VDb3VudCk7CisgICAgdm9pZCByZWdpc3Rl
ckluc3RhbmNlKEluc3RhbmNlKik7CiAKICAgICB2b2lkIGNoZWNrKCkgeyAgQVNTRVJUKCFkZWxl
dGlvbkhhc0JlZ3VuKCkpOyB9CiAKQEAgLTkyLDcgKzk4LDYgQEAgcHJpdmF0ZToKICAgICBNZW1v
cnkodm9pZCogbWVtb3J5LCBQYWdlQ291bnQgaW5pdGlhbCwgUGFnZUNvdW50IG1heGltdW0sIHNp
emVfdCBtYXBwZWRDYXBhY2l0eSwgTWVtb3J5TW9kZSwgV1RGOjpGdW5jdGlvbjx2b2lkKE5vdGlm
eVByZXNzdXJlKT4mJiBub3RpZnlNZW1vcnlQcmVzc3VyZSwgV1RGOjpGdW5jdGlvbjx2b2lkKFN5
bmNUcnlUb1JlY2xhaW0pPiYmIHN5bmNUcnlUb1JlY2xhaW1NZW1vcnksIFdURjo6RnVuY3Rpb248
dm9pZChHcm93U3VjY2VzcywgUGFnZUNvdW50LCBQYWdlQ291bnQpPiYmIGdyb3dTdWNjZXNzQ2Fs
bGJhY2spOwogICAgIE1lbW9yeShQYWdlQ291bnQgaW5pdGlhbCwgUGFnZUNvdW50IG1heGltdW0s
IFdURjo6RnVuY3Rpb248dm9pZChOb3RpZnlQcmVzc3VyZSk+JiYgbm90aWZ5TWVtb3J5UHJlc3N1
cmUsIFdURjo6RnVuY3Rpb248dm9pZChTeW5jVHJ5VG9SZWNsYWltKT4mJiBzeW5jVHJ5VG9SZWNs
YWltTWVtb3J5LCBXVEY6OkZ1bmN0aW9uPHZvaWQoR3Jvd1N1Y2Nlc3MsIFBhZ2VDb3VudCwgUGFn
ZUNvdW50KT4mJiBncm93U3VjY2Vzc0NhbGxiYWNrKTsKIAotICAgIC8vIEZJWE1FOiB3ZSBjYWNo
ZSB0aGVzZSBvbiB0aGUgaW5zdGFuY2VzIHRvIGF2b2lkIGEgbG9hZCBvbiBpbnN0YW5jZS0+aW5z
dGFuY2UgY2FsbHMuIFRoaXMgd2lsbCByZXF1aXJlIHVwZGF0aW5nIGFsbCB0aGUgaW5zdGFuY2Vz
IHdoZW4gZ3JvdyBpcyBjYWxsZWQuIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0xNzczMDUKICAgICB2b2lkKiBtX21lbW9yeSB7IG51bGxwdHIgfTsKICAgICBzaXplX3Qg
bV9zaXplIHsgMCB9OwogICAgIHNpemVfdCBtX2luZGV4aW5nTWFzayB7IDAgfTsKQEAgLTEwMyw2
ICsxMDgsNyBAQCBwcml2YXRlOgogICAgIFdURjo6RnVuY3Rpb248dm9pZChOb3RpZnlQcmVzc3Vy
ZSk+IG1fbm90aWZ5TWVtb3J5UHJlc3N1cmU7CiAgICAgV1RGOjpGdW5jdGlvbjx2b2lkKFN5bmNU
cnlUb1JlY2xhaW0pPiBtX3N5bmNUcnlUb1JlY2xhaW1NZW1vcnk7CiAgICAgV1RGOjpGdW5jdGlv
bjx2b2lkKEdyb3dTdWNjZXNzLCBQYWdlQ291bnQsIFBhZ2VDb3VudCk+IG1fZ3Jvd1N1Y2Nlc3ND
YWxsYmFjazsKKyAgICBWZWN0b3I8V2Vha1B0cjxJbnN0YW5jZT4+IG1faW5zdGFuY2VzOwogfTsK
IAogfSB9IC8vIG5hbWVzcGFjZSBKU0M6Oldhc20KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS93YXNtL2pzL0pTVG9XYXNtLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNt
L2pzL0pTVG9XYXNtLmNwcAppbmRleCBjNmQwNTNiZTc2NWU0YzkzNDIyODFkZjIxMzA2ODFiOTcy
ZDQyYjg5Li5iZmM0NjgzZmNlNjQyNWExMTViMjQ4NTcyM2EzOTYwYmIyZjRhMmJiIDEwMDY0NAot
LS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1RvV2FzbS5jcHAKKysrIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNUb1dhc20uY3BwCkBAIC0xNzUsMjQgKzE3NSwy
MSBAQCBzdGQ6OnVuaXF1ZV9wdHI8SW50ZXJuYWxGdW5jdGlvbj4gY3JlYXRlSlNUb1dhc21XcmFw
cGVyKENvbXBpbGF0aW9uQ29udGV4dCYgY29tcAogICAgIGlmICghIWluZm8ubWVtb3J5KSB7CiAg
ICAgICAgIEdQUlJlZyBiYXNlTWVtb3J5ID0gcGlubmVkUmVncy5iYXNlTWVtb3J5UG9pbnRlcjsK
IAotICAgICAgICBpZiAoIUNvbnRleHQ6OnVzZUZhc3RUTFMoKSkKLSAgICAgICAgICAgIGppdC5s
b2FkUHRyKENDYWxsSGVscGVyczo6QWRkcmVzcyh3YXNtQ29udGV4dEluc3RhbmNlR1BSLCBJbnN0
YW5jZTo6b2Zmc2V0T2ZNZW1vcnkoKSksIGJhc2VNZW1vcnkpOwotICAgICAgICBlbHNlIHsKKyAg
ICAgICAgaWYgKENvbnRleHQ6OnVzZUZhc3RUTFMoKSkKICAgICAgICAgICAgIGppdC5sb2FkV2Fz
bUNvbnRleHRJbnN0YW5jZShiYXNlTWVtb3J5KTsKLSAgICAgICAgICAgIGppdC5sb2FkUHRyKEND
YWxsSGVscGVyczo6QWRkcmVzcyhiYXNlTWVtb3J5LCBJbnN0YW5jZTo6b2Zmc2V0T2ZNZW1vcnko
KSksIGJhc2VNZW1vcnkpOwotICAgICAgICB9CiAKKyAgICAgICAgR1BSUmVnIGN1cnJlbnRJbnN0
YW5jZUdQUiA9IENvbnRleHQ6OnVzZUZhc3RUTFMoKSA/IGJhc2VNZW1vcnkgOiB3YXNtQ29udGV4
dEluc3RhbmNlR1BSOwogICAgICAgICBpZiAobW9kZSAhPSBNZW1vcnlNb2RlOjpTaWduYWxpbmcp
IHsKLSAgICAgICAgICAgIGppdC5sb2FkUHRyKENDYWxsSGVscGVyczo6QWRkcmVzcyhiYXNlTWVt
b3J5LCBXYXNtOjpNZW1vcnk6Om9mZnNldE9mSW5kZXhpbmdNYXNrKCkpLCBwaW5uZWRSZWdzLmlu
ZGV4aW5nTWFzayk7CisgICAgICAgICAgICBqaXQubG9hZFB0cihDQ2FsbEhlbHBlcnM6OkFkZHJl
c3MoY3VycmVudEluc3RhbmNlR1BSLCBXYXNtOjpJbnN0YW5jZTo6b2Zmc2V0T2ZDYWNoZWRJbmRl
eGluZ01hc2soKSksIHBpbm5lZFJlZ3MuaW5kZXhpbmdNYXNrKTsKICAgICAgICAgICAgIGNvbnN0
IGF1dG8mIHNpemVSZWdzID0gcGlubmVkUmVncy5zaXplUmVnaXN0ZXJzOwogICAgICAgICAgICAg
QVNTRVJUKHNpemVSZWdzLnNpemUoKSA+PSAxKTsKICAgICAgICAgICAgIEFTU0VSVCghc2l6ZVJl
Z3NbMF0uc2l6ZU9mZnNldCk7IC8vIFRoZSBmb2xsb3dpbmcgY29kZSBhc3N1bWVzIHdlIHN0YXJ0
IGF0IDAsIGFuZCBjYWxjdWxhdGVzIHN1YnNlcXVlbnQgc2l6ZSByZWdpc3RlcnMgcmVsYXRpdmUg
dG8gMC4KLSAgICAgICAgICAgIGppdC5sb2FkUHRyKENDYWxsSGVscGVyczo6QWRkcmVzcyhiYXNl
TWVtb3J5LCBXYXNtOjpNZW1vcnk6Om9mZnNldE9mU2l6ZSgpKSwgc2l6ZVJlZ3NbMF0uc2l6ZVJl
Z2lzdGVyKTsKKyAgICAgICAgICAgIGppdC5sb2FkUHRyKENDYWxsSGVscGVyczo6QWRkcmVzcyhj
dXJyZW50SW5zdGFuY2VHUFIsIFdhc206Okluc3RhbmNlOjpvZmZzZXRPZkNhY2hlZE1lbW9yeVNp
emUoKSksIHNpemVSZWdzWzBdLnNpemVSZWdpc3Rlcik7CiAgICAgICAgICAgICBmb3IgKHVuc2ln
bmVkIGkgPSAxOyBpIDwgc2l6ZVJlZ3Muc2l6ZSgpOyArK2kpCiAgICAgICAgICAgICAgICAgaml0
LmFkZDY0KENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKC1zaXplUmVnc1tpXS5zaXplT2Zmc2V0
KSwgc2l6ZVJlZ3NbMF0uc2l6ZVJlZ2lzdGVyLCBzaXplUmVnc1tpXS5zaXplUmVnaXN0ZXIpOwog
ICAgICAgICB9CiAKLSAgICAgICAgaml0LmxvYWRQdHIoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKGJh
c2VNZW1vcnksIFdhc206Ok1lbW9yeTo6b2Zmc2V0T2ZNZW1vcnkoKSksIGJhc2VNZW1vcnkpOwor
ICAgICAgICBqaXQubG9hZFB0cihDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoY3VycmVudEluc3RhbmNl
R1BSLCBXYXNtOjpJbnN0YW5jZTo6b2Zmc2V0T2ZDYWNoZWRNZW1vcnkoKSksIGJhc2VNZW1vcnkp
OwogICAgIH0KIAogICAgIENDYWxsSGVscGVyczo6Q2FsbCBjYWxsID0gaml0LnRocmVhZFNhZmVQ
YXRjaGFibGVOZWFyQ2FsbCgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dh
c20vanMvV2ViQXNzZW1ibHlNb2R1bGVSZWNvcmQuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3dhc20vanMvV2ViQXNzZW1ibHlNb2R1bGVSZWNvcmQuY3BwCmluZGV4IDk1ZGIyOWEwOGVhMjc4
YjA2NjA1MDA1ODhiYTRjYzQ0NDIzNjVhZjUuLjc3ODc1Yjk5MWQzODYxMjhmYzliYWRjZjFhOGU4
Mjg0MjQ5ODgzOTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dl
YkFzc2VtYmx5TW9kdWxlUmVjb3JkLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2Fz
bS9qcy9XZWJBc3NlbWJseU1vZHVsZVJlY29yZC5jcHAKQEAgLTIyMyw4ICsyMjMsNyBAQCBKU1Zh
bHVlIFdlYkFzc2VtYmx5TW9kdWxlUmVjb3JkOjpldmFsdWF0ZShFeGVjU3RhdGUqIGV4ZWMpCiAg
ICAgSlNXZWJBc3NlbWJseVRhYmxlKiB0YWJsZSA9IG1faW5zdGFuY2UtPnRhYmxlKCk7CiAKICAg
ICBjb25zdCBWZWN0b3I8V2FzbTo6U2VnbWVudDo6UHRyPiYgZGF0YSA9IG1vZHVsZUluZm9ybWF0
aW9uLmRhdGE7Ci0gICAgSlNXZWJBc3NlbWJseU1lbW9yeSoganNNZW1vcnkgPSBtX2luc3RhbmNl
LT5tZW1vcnkoKTsKLQorICAgIAogICAgIHN0ZDo6b3B0aW9uYWw8SlNWYWx1ZT4gZXhjZXB0aW9u
OwogCiAgICAgYXV0byBmb3JFYWNoRWxlbWVudCA9IFsmXSAoYXV0byBmbikgewpAQCAtMjUwLDgg
KzI0OSw4IEBAIEpTVmFsdWUgV2ViQXNzZW1ibHlNb2R1bGVSZWNvcmQ6OmV2YWx1YXRlKEV4ZWNT
dGF0ZSogZXhlYykKICAgICB9OwogCiAgICAgYXV0byBmb3JFYWNoU2VnbWVudCA9IFsmXSAoYXV0
byBmbikgewotICAgICAgICB1aW50OF90KiBtZW1vcnkgPSByZWludGVycHJldF9jYXN0PHVpbnQ4
X3QqPihqc01lbW9yeS0+bWVtb3J5KCkubWVtb3J5KCkpOwotICAgICAgICB1aW50NjRfdCBzaXpl
SW5CeXRlcyA9IGpzTWVtb3J5LT5tZW1vcnkoKS5zaXplKCk7CisgICAgICAgIHVpbnQ4X3QqIG1l
bW9yeSA9IHJlaW50ZXJwcmV0X2Nhc3Q8dWludDhfdCo+KG1faW5zdGFuY2UtPmluc3RhbmNlKCku
Y2FjaGVkTWVtb3J5KCkpOworICAgICAgICB1aW50NjRfdCBzaXplSW5CeXRlcyA9IG1faW5zdGFu
Y2UtPmluc3RhbmNlKCkuY2FjaGVkTWVtb3J5U2l6ZSgpOwogCiAgICAgICAgIGZvciAoY29uc3Qg
V2FzbTo6U2VnbWVudDo6UHRyJiBzZWdtZW50IDogZGF0YSkgewogICAgICAgICAgICAgdWludDMy
X3Qgb2Zmc2V0ID0gc2VnbWVudC0+b2Zmc2V0LmlzR2xvYmFsSW1wb3J0KCkKZGlmZiAtLWdpdCBh
L0pTVGVzdHMvQ2hhbmdlTG9nIGIvSlNUZXN0cy9DaGFuZ2VMb2cKaW5kZXggNzI1YTc1ZjgyNzdk
YzI2MzM0NzVlZjIxYjczMzRkOGYzYWE5Mzc5MS4uNjg4NmM1NTIyMTQyY2NjNTIxMDdhZGUyMGMx
NTM4YzJhMzY0ODQ0NiAxMDA2NDQKLS0tIGEvSlNUZXN0cy9DaGFuZ2VMb2cKKysrIGIvSlNUZXN0
cy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNyBAQAorMjAxOC0wMS0xMSAgT2xla3NhbmRyIFNrYWNo
a292ICA8Z3NrYWNoa292QGdtYWlsLmNvbT4KKworICAgICAgICBXZWJBc3NlbWJseTogY2FjaGUg
bWVtb3J5IGFkZHJlc3MgLyBzaXplIG9uIGluc3RhbmNlCisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzczMDUKKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIHdhc20vZnVuY3Rpb24tdGVzdHMvbWVtb3J5LXJl
dXNlLmpzOiBBZGRlZC4KKyAgICAgICAgKGNyZWF0ZVdhc21JbnN0YW5jZSk6CisgICAgICAgIChk
b0NoZWNrVHJhcCk6CisgICAgICAgIChkb01lbW9yeUdyb3cpOgorICAgICAgICAoZG9DaGVjayk6
CisgICAgICAgIChjaGVja1dhc21JbnN0YW5jZXNXaXRoU2hhcmVkTWVtb3J5KToKKwogMjAxOC0w
Mi0yMCAgU2FhbSBCYXJhdGkgIDxzYmFyYXRpQGFwcGxlLmNvbT4KIAogICAgICAgICBERkc6OlZh
cmFyZ3NGb3J3YXJkaW5nUGhhc2Ugc2hvdWxkIGVsaW1pbmF0ZSBnZXR0aW5nIGFyZ3VtZW50IGxl
bmd0aApkaWZmIC0tZ2l0IGEvSlNUZXN0cy93YXNtL2Z1bmN0aW9uLXRlc3RzL21lbW9yeS1yZXVz
ZS5qcyBiL0pTVGVzdHMvd2FzbS9mdW5jdGlvbi10ZXN0cy9tZW1vcnktcmV1c2UuanMKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMC4uZmVjY2NjZWVjZDQwZTI4YThjNmQ3NWZmY2E3MzgzNDZmMzE0NWI5NwotLS0gL2Rldi9u
dWxsCisrKyBiL0pTVGVzdHMvd2FzbS9mdW5jdGlvbi10ZXN0cy9tZW1vcnktcmV1c2UuanMKQEAg
LTAsMCArMSwxMTMgQEAKK2ltcG9ydCBCdWlsZGVyIGZyb20gJy4uL0J1aWxkZXIuanMnCitpbXBv
cnQgKiBhcyBhc3NlcnQgZnJvbSAnLi4vYXNzZXJ0LmpzJworCitjb25zdCBjb3VudCA9IDEwOwor
Y29uc3QgcGFnZXMgPSA2OworY29uc3QgbWVtb3J5RGVzY3JpcHRpb24gPSB7aW5pdGlhbDoxfTsK
K2NvbnN0IHBhZ2VTaXplID0gNjQgKiAxMDI0OworCitmdW5jdGlvbiBjcmVhdGVXYXNtSW5zdGFu
Y2UobWVtb3J5KSB7CisgICAgY29uc3QgYnVpbGRlciA9IG5ldyBCdWlsZGVyKCkKKyAgICAgICAg
LlR5cGUoKS5FbmQoKQorICAgICAgICAuSW1wb3J0KCkKKyAgICAgICAgICAgIC5NZW1vcnkoImlt
cCIsICJtZW1vcnkiLCBtZW1vcnlEZXNjcmlwdGlvbikKKyAgICAgICAgLkVuZCgpCisgICAgICAg
IC5GdW5jdGlvbigpLkVuZCgpCisgICAgICAgIC5FeHBvcnQoKQorICAgICAgICAgICAgLkZ1bmN0
aW9uKCJjdXJyZW50IikKKyAgICAgICAgICAgIC5GdW5jdGlvbigiZ2V0IikKKyAgICAgICAgICAg
IC5GdW5jdGlvbigiZ3JvdyIpCisgICAgICAgIC5FbmQoKQorICAgICAgICAuQ29kZSgpCisgICAg
ICAgICAgICAuRnVuY3Rpb24oImN1cnJlbnQiLCB7IHBhcmFtczogW10sIHJldDogImkzMiIgfSkK
KyAgICAgICAgICAgICAgICAuQ3VycmVudE1lbW9yeSgwKQorICAgICAgICAgICAgICAgIC5SZXR1
cm4oKQorICAgICAgICAgICAgLkVuZCgpCisgICAgICAgICAgICAuRnVuY3Rpb24oImdldCIsIHsg
cGFyYW1zOiBbImkzMiJdLCByZXQ6ICJpMzIiIH0pCisgICAgICAgICAgICAgICAgLkdldExvY2Fs
KDApCisgICAgICAgICAgICAgICAgLkkzMkxvYWQoMiwgMCkKKyAgICAgICAgICAgICAgICAuUmV0
dXJuKCkKKyAgICAgICAgICAgIC5FbmQoKQorICAgICAgICAgICAgLkZ1bmN0aW9uKCJncm93Iiwg
eyBwYXJhbXM6IFsiaTMyIl0sIHJldDogImkzMiIgfSkKKyAgICAgICAgICAgICAgICAuR2V0TG9j
YWwoMCkKKyAgICAgICAgICAgICAgICAuR3Jvd01lbW9yeSgwKQorICAgICAgICAgICAgICAgIC5S
ZXR1cm4oKQorICAgICAgICAgICAgLkVuZCgpCisgICAgICAgIC5FbmQoKTsKKworICAgIGNvbnN0
IGJpbiA9IGJ1aWxkZXIuV2ViQXNzZW1ibHkoKS5nZXQoKTsKKyAgICBjb25zdCBtb2R1bGUgPSBu
ZXcgV2ViQXNzZW1ibHkuTW9kdWxlKGJpbik7CisgICAgcmV0dXJuIG5ldyBXZWJBc3NlbWJseS5J
bnN0YW5jZShtb2R1bGUsIHtpbXA6IHttZW1vcnl9fSk7Cit9CisKK2Z1bmN0aW9uIGRvRmlsbE1l
bW9yeShtZW0sIGxlbmd0aCkgeworICAgIGNvbnN0IGJ1ZiA9IG5ldyBVaW50MzJBcnJheShtZW0u
YnVmZmVyKTsKKworICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kpIHsKKyAgICAg
ICAgYnVmW2kgKiA0XSA9IGkgKyAxOworICAgIH0KK30KKworZnVuY3Rpb24gZG9DaGVja1RyYXAo
aW5zdGFuY2VzLCBtZW0sIG51bVBhZ2VzLCBsZW5ndGgpIHsKKyAgICBjb25zdCBidWYgPSBuZXcg
VWludDMyQXJyYXkobWVtLmJ1ZmZlcik7CisKKyAgICBmb3IgKGxldCBpbnN0YW5jZSBvZiBpbnN0
YW5jZXMpIHsKKyAgICAgICAgY29uc3QgZm9vID0gaW5zdGFuY2UuZXhwb3J0cy5nZXQ7CisgICAg
ICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHsKKyAgICAgICAgICAgIGFzc2Vy
dC5lcShmb28oaSAqIDQpLCBidWZbaV0pOworICAgICAgICB9CisgICAgICAgIGFzc2VydC50aHJv
d3MoKCkgPT4gZm9vKG51bVBhZ2VzICogcGFnZVNpemUgKyAxKSwgV2ViQXNzZW1ibHkuUnVudGlt
ZUVycm9yLCAiT3V0IG9mIGJvdW5kcyBtZW1vcnkgYWNjZXNzIik7CisgICAgfQorfQorCitmdW5j
dGlvbiBkb0NoZWNrTm9UcmFwKGluc3RhbmNlcywgbWVtLCBudW1QYWdlcywgbGVuZ3RoKSB7Cisg
ICAgY29uc3QgYnVmID0gbmV3IFVpbnQzMkFycmF5KG1lbS5idWZmZXIpOworCisgICAgZm9yIChs
ZXQgaW5zdGFuY2Ugb2YgaW5zdGFuY2VzKSB7CisgICAgICAgIGNvbnN0IGZvbyA9IGluc3RhbmNl
LmV4cG9ydHMuZ2V0OworICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7
CisgICAgICAgICAgICBhc3NlcnQuZXEoZm9vKGkgKiA0KSwgYnVmW2ldKTsKKyAgICAgICAgfQor
ICAgICAgICBhc3NlcnQuZXEoZm9vKG51bVBhZ2VzICogcGFnZVNpemUgKyAxKSwgMCk7CisgICAg
fQorfQorCitmdW5jdGlvbiBkb01lbW9yeUdyb3coaW5zdGFuY2VzKSB7CisgICAgY29uc3QgaW5z
dGFuY2UgPSBpbnN0YW5jZXNbMF07IC8vIFRha2UgZmlyc3QgaW5zdGFuY2UgYW5kIGdyb3cgc2hh
cmVkIG1lbW9yeQorICAgIGluc3RhbmNlLmV4cG9ydHMuZ3JvdygxKTsKK30KKworZnVuY3Rpb24g
ZG9DaGVjayhtZW0sIGluc3RhbmNlcywgbnVtUGFnZXMpIHsKKyAgICBjb25zdCBsZW5ndGggPSBt
ZW0uYnVmZmVyLmJ5dGVMZW5ndGggLyA0OworICAgIAorICAgIGRvRmlsbE1lbW9yeShtZW0sIGxl
bmd0aCk7CisgICAgZG9DaGVja1RyYXAoaW5zdGFuY2VzLCBtZW0sIG51bVBhZ2VzLCBsZW5ndGgp
OworICAgIGRvTWVtb3J5R3JvdyhpbnN0YW5jZXMpOworICAgIGRvQ2hlY2tOb1RyYXAoaW5zdGFu
Y2VzLCBtZW0sIG51bVBhZ2VzLCBsZW5ndGgpOworfQorCitmdW5jdGlvbiBjaGVja1dhc21JbnN0
YW5jZXNXaXRoU2hhcmVkTWVtb3J5KCkgeworICAgIGNvbnN0IG1lbSA9IG5ldyBXZWJBc3NlbWJs
eS5NZW1vcnkobWVtb3J5RGVzY3JpcHRpb24pOworCisgICAgY29uc3QgaW5zdGFuY2VzID0gW107
CisgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBjb3VudDsgaSsrKSB7CisgICAgICAgIGluc3RhbmNl
cy5wdXNoKGNyZWF0ZVdhc21JbnN0YW5jZShtZW0pKTsKKyAgICB9CisKKyAgICBmb3IobGV0IGkg
PSAxOyBpIDwgcGFnZXM7IGkrKykgeworICAgICAgICBkb0NoZWNrKG1lbSwgaW5zdGFuY2VzLCBp
KTsKKyAgICB9CisKKyAgICBsZXQgaW5zdGFuY2U7CisgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBj
b3VudDsgaSsrKSB7CisgICAgICAgIGluc3RhbmNlID0gaW5zdGFuY2VzLnNoaWZ0KCk7CisgICAg
fQorCisgICAgZnVsbEdDKCk7CisKKyAgICBjb25zdCBzdXJ2aXZlZEluc3RhbmNlcyA9ICBbIGlu
c3RhbmNlIF07IC8vIFNob3VsZCBzdXJ2aXZlIG9ubHkgb25lIGluc3RhbmNlIGFmdGVyIGZ1bGwg
R0MKKworICAgIGRvQ2hlY2sobWVtLCBzdXJ2aXZlZEluc3RhbmNlcywgcGFnZXMpOyAvLyBSZWNo
ZWNrIG9ubHkgZm9yIHN1cnZpZSBpbnN0YW5jZXMKK30KKworY2hlY2tXYXNtSW5zdGFuY2VzV2l0
aFNoYXJlZE1lbW9yeSgpOwo=
</data>

          </attachment>
      

    </bug>

</bugzilla>