<?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>165834</bug_id>
          
          <creation_ts>2016-12-13 17:37:41 -0800</creation_ts>
          <short_desc>WebAssembly: WasmB3IRGenerator should throw exceptions instead of crash</short_desc>
          <delta_ts>2016-12-16 11:38:38 -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>JavaScriptCore</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Saam Barati">saam</reporter>
          <assigned_to name="Saam Barati">saam</assigned_to>
          <cc>benjamin</cc>
    
    <cc>commit-queue</cc>
    
    <cc>fpizlo</cc>
    
    <cc>ggaren</cc>
    
    <cc>gskachkov</cc>
    
    <cc>jfbastien</cc>
    
    <cc>keith_miller</cc>
    
    <cc>mark.lam</cc>
    
    <cc>msaboff</cc>
    
    <cc>oliver</cc>
    
    <cc>ticaiolima</cc>
    
    <cc>ysuzuki</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1259600</commentid>
    <comment_count>0</comment_count>
    <who name="Saam Barati">saam</who>
    <bug_when>2016-12-13 17:37:41 -0800</bug_when>
    <thetext>Should be an easy fix.
My plan is to introduce a helper to WasmB3IRGenerator that just jumps to a particular location to throw an exception with some enum as an argument to the function call. The function call can switch on the enum to provide a nice error message.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1259843</commentid>
    <comment_count>1</comment_count>
      <attachid>297110</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2016-12-14 12:27:55 -0800</bug_when>
    <thetext>Created attachment 297110
WIP

I just need to fill in the various exception checks now.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1259873</commentid>
    <comment_count>2</comment_count>
      <attachid>297118</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2016-12-14 13:15:27 -0800</bug_when>
    <thetext>Created attachment 297118
WIP RFC</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1259880</commentid>
    <comment_count>3</comment_count>
      <attachid>297118</attachid>
    <who name="JF Bastien">jfbastien</who>
    <bug_when>2016-12-14 13:25:48 -0800</bug_when>
    <thetext>Comment on attachment 297118
WIP RFC

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

Looks good.

&gt; JSTests/wasm/function-tests/exceptions.js:20
&gt; +            .Function(&quot;foo&quot;, 0 /*[&apos;i32&apos;, &apos;i32&apos;] =&gt; &apos;i32&apos;*/)

Why not let these auto-populate in the Type section?

&gt; JSTests/wasm/function-tests/exceptions.js:23
&gt; +                .CallIndirect(1, 0) // calling function of type [&apos;i32&apos;] =&gt; &apos;i32&apos;

Can call indirect also take a type signature?

&gt; JSTests/wasm/function-tests/exceptions.js:57
&gt; +        assert.throws(() =&gt; foo(1 + i, i), WebAssembly.RuntimeError, &quot;Out of bounds call_indirect&quot;);

Check that negative also fails.

&gt; Source/JavaScriptCore/wasm/WasmB3IRGenerator.cpp:282
&gt; +        // The thing that jumps here will move ExceptionType into the argumentGPR1 and jump here.

Can you use a named constant for that GPR so it&apos;s more obvious / can&apos;t go out of sync?

&gt; Source/JavaScriptCore/wasm/WasmB3IRGenerator.cpp:297
&gt; +            switch (type) {

Can we just make these a static const char * array next to the enum?

&gt; Source/JavaScriptCore/wasm/WasmB3IRGenerator.cpp:308
&gt; +                message = &quot;Can&apos;t make a call_indirect to a null table entry&quot;;

I&apos;d drop &quot;can&apos;t make a &quot; from the message: the issue is &quot;call_indirect to a null table entry&quot;.

&gt; Source/JavaScriptCore/wasm/WasmB3IRGenerator.cpp:311
&gt; +                message = &quot;Tried to make a call_indirect to a signature that does not match&quot;;

Similar here: &quot;call_indirect signature mismatch&quot;.

&gt; Source/JavaScriptCore/wasm/WasmB3IRGenerator.cpp:859
&gt; +        // FIXME: is this even possible?

Do we need to zero-fill missing arguments, and drop extra ones?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1260264</commentid>
    <comment_count>4</comment_count>
      <attachid>297118</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2016-12-15 14:24:38 -0800</bug_when>
    <thetext>Comment on attachment 297118
WIP RFC

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

&gt;&gt; JSTests/wasm/function-tests/exceptions.js:23
&gt;&gt; +                .CallIndirect(1, 0) // calling function of type [&apos;i32&apos;] =&gt; &apos;i32&apos;
&gt; 
&gt; Can call indirect also take a type signature?

We could make it do that but lets make that a separate patch

&gt;&gt; Source/JavaScriptCore/wasm/WasmB3IRGenerator.cpp:282
&gt;&gt; +        // The thing that jumps here will move ExceptionType into the argumentGPR1 and jump here.
&gt; 
&gt; Can you use a named constant for that GPR so it&apos;s more obvious / can&apos;t go out of sync?

That constant would only be used in one place. I don&apos;t think it&apos;s worth it.

&gt;&gt; Source/JavaScriptCore/wasm/WasmB3IRGenerator.cpp:297
&gt;&gt; +            switch (type) {
&gt; 
&gt; Can we just make these a static const char * array next to the enum?

I&apos;m not a big fan of this. I could just make all exception types a macro?

&gt;&gt; Source/JavaScriptCore/wasm/WasmB3IRGenerator.cpp:308
&gt;&gt; +                message = &quot;Can&apos;t make a call_indirect to a null table entry&quot;;
&gt; 
&gt; I&apos;d drop &quot;can&apos;t make a &quot; from the message: the issue is &quot;call_indirect to a null table entry&quot;.

sounds good.

&gt;&gt; Source/JavaScriptCore/wasm/WasmB3IRGenerator.cpp:311
&gt;&gt; +                message = &quot;Tried to make a call_indirect to a signature that does not match&quot;;
&gt; 
&gt; Similar here: &quot;call_indirect signature mismatch&quot;.

sounds good

&gt;&gt; Source/JavaScriptCore/wasm/WasmB3IRGenerator.cpp:859
&gt;&gt; +        // FIXME: is this even possible?
&gt; 
&gt; Do we need to zero-fill missing arguments, and drop extra ones?

No idea. I&apos;ll leave this for another patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1260268</commentid>
    <comment_count>5</comment_count>
      <attachid>297118</attachid>
    <who name="Keith Miller">keith_miller</who>
    <bug_when>2016-12-15 14:35:39 -0800</bug_when>
    <thetext>Comment on attachment 297118
WIP RFC

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

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

Doesn&apos;t this copy the entire B3IRGenerator for each exception generator? Maybe this should just capture the address of m_exceptionHandler?

&gt;&gt;&gt; Source/JavaScriptCore/wasm/WasmB3IRGenerator.cpp:859
&gt;&gt;&gt; +        // FIXME: is this even possible?
&gt;&gt; 
&gt;&gt; Do we need to zero-fill missing arguments, and drop extra ones?
&gt; 
&gt; No idea. I&apos;ll leave this for another patch.

I don&apos;t think this is possible anymore.

&gt; Source/JavaScriptCore/wasm/WasmB3IRGenerator.cpp:923
&gt; +    return jsEntrypoint-&gt;codeRef();

Aren&apos;t you required to keep the byproducts alive along with the code ref?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1260416</commentid>
    <comment_count>6</comment_count>
      <attachid>297265</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2016-12-15 17:41:57 -0800</bug_when>
    <thetext>Created attachment 297265
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1260418</commentid>
    <comment_count>7</comment_count>
      <attachid>297266</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2016-12-15 17:43:46 -0800</bug_when>
    <thetext>Created attachment 297266
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1260420</commentid>
    <comment_count>8</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-12-15 17:44:52 -0800</bug_when>
    <thetext>Attachment 297266 did not pass style-queue:


ERROR: Source/JavaScriptCore/wasm/WasmB3IRGenerator.cpp:328:  Non-label code inside switch statements should be indented.  [whitespace/indent] [4]
Total errors found: 1 in 12 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1260462</commentid>
    <comment_count>9</comment_count>
      <attachid>297266</attachid>
    <who name="Keith Miller">keith_miller</who>
    <bug_when>2016-12-15 18:31:38 -0800</bug_when>
    <thetext>Comment on attachment 297266
patch

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

It seems like emitExceptionHandler should only be called if it&apos;s actually needed. I think I would add a member, m_needsExceptionHandler that is set in emitExceptionCheck.

&gt; Source/JavaScriptCore/wasm/WasmB3IRGenerator.cpp:296
&gt; +    jit.addLinkTask([=] (LinkBuffer&amp; linkBuffer) {

It&apos;s a little weird that you capture the entire B3IRGenerator here.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1260466</commentid>
    <comment_count>10</comment_count>
      <attachid>297266</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2016-12-15 18:37:37 -0800</bug_when>
    <thetext>Comment on attachment 297266
patch

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

&gt;&gt; Source/JavaScriptCore/wasm/WasmB3IRGenerator.cpp:296
&gt;&gt; +    jit.addLinkTask([=] (LinkBuffer&amp; linkBuffer) {
&gt; 
&gt; It&apos;s a little weird that you capture the entire B3IRGenerator here.

What do you propose instead?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1260467</commentid>
    <comment_count>11</comment_count>
    <who name="Saam Barati">saam</who>
    <bug_when>2016-12-15 18:38:15 -0800</bug_when>
    <thetext>(In reply to comment #9)
&gt; Comment on attachment 297266 [details]
&gt; patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=297266&amp;action=review
&gt; 
&gt; It seems like emitExceptionHandler should only be called if it&apos;s actually
&gt; needed. I think I would add a member, m_needsExceptionHandler that is set in
&gt; emitExceptionCheck.
Ok, sounds good.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1260472</commentid>
    <comment_count>12</comment_count>
      <attachid>297266</attachid>
    <who name="Keith Miller">keith_miller</who>
    <bug_when>2016-12-15 18:40:21 -0800</bug_when>
    <thetext>Comment on attachment 297266
patch

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

&gt;&gt;&gt; Source/JavaScriptCore/wasm/WasmB3IRGenerator.cpp:296
&gt;&gt;&gt; +    jit.addLinkTask([=] (LinkBuffer&amp; linkBuffer) {
&gt;&gt; 
&gt;&gt; It&apos;s a little weird that you capture the entire B3IRGenerator here.
&gt; 
&gt; What do you propose instead?

I would just capture m_exceptionHandler.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1260539</commentid>
    <comment_count>13</comment_count>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2016-12-15 23:20:05 -0800</bug_when>
    <thetext>Could you explain in more detail what your goal is here? My principle concern is that it seems like you&apos;re trying to continue executing despite having generated incorrect code.

The correct course of action is to terminate, so there needs to be a very compelling reason not to.

If it&apos;s for debugging or similar, i&apos;d rather you replace &quot;call a function with an enum&quot; with

    jit.move($enumValue, regT0)
    hit.breakpoint()

or similar.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1260540</commentid>
    <comment_count>14</comment_count>
    <who name="Saam Barati">saam</who>
    <bug_when>2016-12-15 23:28:34 -0800</bug_when>
    <thetext>(In reply to comment #13)
&gt; Could you explain in more detail what your goal is here? My principle
&gt; concern is that it seems like you&apos;re trying to continue executing despite
&gt; having generated incorrect code.
&gt; 
&gt; The correct course of action is to terminate, so there needs to be a very
&gt; compelling reason not to.
&gt; 
&gt; If it&apos;s for debugging or similar, i&apos;d rather you replace &quot;call a function
&gt; with an enum&quot; with
&gt; 
&gt;     jit.move($enumValue, regT0)
&gt;     hit.breakpoint()
&gt; 
&gt; or similar.

This is not &quot;trying to continue executing despite having generated incorrect code&quot;.
There are operations in Wasm that *are* supposed to throw real JS exceptions.
For example:
- division by zero
- out of bounds memory access
- Trying to call an &quot;imported&quot; function with a signature mismatch.

So these are things that need to be validated at runtime because they can&apos;t be validated at compile time. Therefore, we must validate such things and throw exceptions if the validation fails.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1260541</commentid>
    <comment_count>15</comment_count>
      <attachid>297302</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2016-12-15 23:29:40 -0800</bug_when>
    <thetext>Created attachment 297302
patch

All Wasm functions now share the exact same exception thrower thunk. This should reduce code size by at least 20 bytes per function.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1260542</commentid>
    <comment_count>16</comment_count>
    <who name="Saam Barati">saam</who>
    <bug_when>2016-12-15 23:31:28 -0800</bug_when>
    <thetext>(In reply to comment #14)
&gt; (In reply to comment #13)
&gt; &gt; Could you explain in more detail what your goal is here? My principle
&gt; &gt; concern is that it seems like you&apos;re trying to continue executing despite
&gt; &gt; having generated incorrect code.
&gt; &gt; 
&gt; &gt; The correct course of action is to terminate, so there needs to be a very
&gt; &gt; compelling reason not to.
&gt; &gt; 
&gt; &gt; If it&apos;s for debugging or similar, i&apos;d rather you replace &quot;call a function
&gt; &gt; with an enum&quot; with
&gt; &gt; 
&gt; &gt;     jit.move($enumValue, regT0)
&gt; &gt;     hit.breakpoint()
&gt; &gt; 
&gt; &gt; or similar.
&gt; 
&gt; This is not &quot;trying to continue executing despite having generated incorrect
&gt; code&quot;.
&gt; There are operations in Wasm that *are* supposed to throw real JS exceptions.
&gt; For example:
&gt; - division by zero
&gt; - out of bounds memory access
&gt; - Trying to call an &quot;imported&quot; function with a signature mismatch.
&gt; 
&gt; So these are things that need to be validated at runtime because they can&apos;t
&gt; be validated at compile time. Therefore, we must validate such things and
&gt; throw exceptions if the validation fails.

To elaborate a bit, when Keith began to implement Wasm, he didn&apos;t write the infrastructure needed to throw exceptions. I recently made our unwinder Wasm-aware, so we can now throw exceptions from (and through) Wasm code. Keith originally added breakpoints() for places that needed to throw exceptions. This patch just fills in some of the various breakpoints() with jumps to the thing that throws an exception.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1260543</commentid>
    <comment_count>17</comment_count>
      <attachid>297303</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2016-12-15 23:34:55 -0800</bug_when>
    <thetext>Created attachment 297303
patch

rebased</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1260544</commentid>
    <comment_count>18</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-12-15 23:37:01 -0800</bug_when>
    <thetext>Attachment 297303 did not pass style-queue:


ERROR: Source/JavaScriptCore/wasm/WasmExceptionType.h:53:  Non-label code inside switch statements should be indented.  [whitespace/indent] [4]
Total errors found: 1 in 15 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1260614</commentid>
    <comment_count>19</comment_count>
      <attachid>297303</attachid>
    <who name="JF Bastien">jfbastien</who>
    <bug_when>2016-12-16 10:14:26 -0800</bug_when>
    <thetext>Comment on attachment 297303
patch

Looks good.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1260640</commentid>
    <comment_count>20</comment_count>
      <attachid>297303</attachid>
    <who name="Keith Miller">keith_miller</who>
    <bug_when>2016-12-16 10:53:42 -0800</bug_when>
    <thetext>Comment on attachment 297303
patch

r=me.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1260667</commentid>
    <comment_count>21</comment_count>
      <attachid>297303</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-12-16 11:24:44 -0800</bug_when>
    <thetext>Comment on attachment 297303
patch

Clearing flags on attachment: 297303

Committed r209928: &lt;http://trac.webkit.org/changeset/209928&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1260668</commentid>
    <comment_count>22</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-12-16 11:24:49 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1260675</commentid>
    <comment_count>23</comment_count>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2016-12-16 11:34:11 -0800</bug_when>
    <thetext>
&gt; To elaborate a bit, when Keith began to implement Wasm, he didn&apos;t write the
&gt; infrastructure needed to throw exceptions. I recently made our unwinder
&gt; Wasm-aware, so we can now throw exceptions from (and through) Wasm code.
&gt; Keith originally added breakpoints() for places that needed to throw
&gt; exceptions. This patch just fills in some of the various breakpoints() with
&gt; jumps to the thing that throws an exception.

Ok, i understand now -- it was not clear to me that the existing breakpoints were (essentially) for unimplemented checks, so i interpreted the breakpoints as being the standard RELEASE_ASSERT of the jit work.

That said i wonder if we could do something to make the existing jit asserts plant info into the crash trace (write error code to register or similar)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1260676</commentid>
    <comment_count>24</comment_count>
    <who name="Saam Barati">saam</who>
    <bug_when>2016-12-16 11:38:38 -0800</bug_when>
    <thetext>(In reply to comment #23)
&gt; &gt; To elaborate a bit, when Keith began to implement Wasm, he didn&apos;t write the
&gt; &gt; infrastructure needed to throw exceptions. I recently made our unwinder
&gt; &gt; Wasm-aware, so we can now throw exceptions from (and through) Wasm code.
&gt; &gt; Keith originally added breakpoints() for places that needed to throw
&gt; &gt; exceptions. This patch just fills in some of the various breakpoints() with
&gt; &gt; jumps to the thing that throws an exception.
&gt; 
&gt; Ok, i understand now -- it was not clear to me that the existing breakpoints
&gt; were (essentially) for unimplemented checks, so i interpreted the
&gt; breakpoints as being the standard RELEASE_ASSERT of the jit work.
&gt; 
&gt; That said i wonder if we could do something to make the existing jit asserts
&gt; plant info into the crash trace (write error code to register or similar)

Yeah for things that are really crashes, we should use the JIT assert mechanism that&apos;s already in place instead of the breakpoint().</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>297110</attachid>
            <date>2016-12-14 12:27:55 -0800</date>
            <delta_ts>2016-12-14 13:15:27 -0800</delta_ts>
            <desc>WIP</desc>
            <filename>a-backup.diff</filename>
            <type>text/plain</type>
            <size>9948</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21CM0lSR2VuZXJhdG9yLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQjNJUkdlbmVyYXRv
ci5jcHAJKHJldmlzaW9uIDIwOTc4NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dh
c21CM0lSR2VuZXJhdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzIsNiArMzIsNyBAQAogI2lu
Y2x1ZGUgIkIzQ0NhbGxWYWx1ZS5oIgogI2luY2x1ZGUgIkIzQ29uc3RQdHJWYWx1ZS5oIgogI2lu
Y2x1ZGUgIkIzRml4U1NBLmgiCisjaW5jbHVkZSAiQjNHZW5lcmF0ZS5oIgogI2luY2x1ZGUgIkIz
U3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zLmgiCiAjaW5jbHVkZSAiQjNTd2l0Y2hWYWx1ZS5oIgog
I2luY2x1ZGUgIkIzVmFsaWRhdGUuaCIKQEAgLTE3OSw2ICsxODAsMTUgQEAgcHVibGljOgogCiAg
ICAgdm9pZCBzZXRFcnJvck1lc3NhZ2UoU3RyaW5nJiYpIHsgVU5SRUFDSEFCTEVfRk9SX1BMQVRG
T1JNKCk7IH0KIAorICAgIGVudW0gY2xhc3MgRXhjZXB0aW9uVHlwZSA6IHVpbnQzMl90IHsKKyAg
ICAgICAgT3V0T2ZCb3VuZHNNZW1vcnlBY2Nlc3MsCisgICAgICAgIE51bGxUYWJsZUVudHJ5LAor
ICAgICAgICBCYWRTaWduYXR1cmUsCisgICAgfTsKKworICAgIHZvaWQgZW1pdEV4Y2VwdGlvbkNo
ZWNrKENDYWxsSGVscGVycyYsIEV4Y2VwdGlvblR5cGUpOworICAgIHZvaWQgZW1pdEV4Y2VwdGlv
bkhhbmRsZXIoQ0NhbGxIZWxwZXJzJik7CisKIHByaXZhdGU6CiAgICAgRXhwcmVzc2lvblR5cGUg
ZW1pdENoZWNrQW5kUHJlcGFyZVBvaW50ZXIoRXhwcmVzc2lvblR5cGUgcG9pbnRlciwgdWludDMy
X3Qgb2Zmc2V0LCB1aW50MzJfdCBzaXplT2ZPcCk7CiAgICAgRXhwcmVzc2lvblR5cGUgZW1pdExv
YWRPcChMb2FkT3BUeXBlLCBPcmlnaW4sIEV4cHJlc3Npb25UeXBlIHBvaW50ZXIsIHVpbnQzMl90
IG9mZnNldCk7CkBAIC0xOTgsNiArMjA4LDcgQEAgcHJpdmF0ZToKICAgICBHUFJSZWcgbV9tZW1v
cnlTaXplR1BSOwogICAgIFZhbHVlKiBtX3plcm9WYWx1ZXNbbnVtVHlwZXNdOwogICAgIFZhbHVl
KiBtX2Z1bmN0aW9uSW5kZXhTcGFjZVZhbHVlOworICAgIENDYWxsSGVscGVyczo6TGFiZWwgbV9l
eGNlcHRpb25IYW5kbGVyOwogfTsKIAogQjNJUkdlbmVyYXRvcjo6QjNJUkdlbmVyYXRvcihWTSYg
dm0sIGNvbnN0IE1lbW9yeUluZm9ybWF0aW9uJiBtZW1vcnksIFByb2NlZHVyZSYgcHJvY2VkdXJl
LCBXYXNtSW50ZXJuYWxGdW5jdGlvbiogY29tcGlsYXRpb24sIFZlY3RvcjxVbmxpbmtlZFdhc21U
b1dhc21DYWxsPiYgdW5saW5rZWRXYXNtVG9XYXNtQ2FsbHMsIGNvbnN0IEltbXV0YWJsZUZ1bmN0
aW9uSW5kZXhTcGFjZSYgZnVuY3Rpb25JbmRleFNwYWNlKQpAQCAtMjMzLDMzICsyNDQsNyBAQCBC
M0lSR2VuZXJhdG9yOjpCM0lSR2VuZXJhdG9yKFZNJiB2bSwgY29uCiAgICAgICAgIG1fcHJvYy5z
ZXRXYXNtQm91bmRzQ2hlY2tHZW5lcmF0b3IoWz1dIChDQ2FsbEhlbHBlcnMmIGppdCwgR1BSUmVn
IHBpbm5lZEdQUiwgdW5zaWduZWQpIHsKICAgICAgICAgICAgIEFsbG93TWFjcm9TY3JhdGNoUmVn
aXN0ZXJVc2FnZSBhbGxvd1NjcmF0Y2goaml0KTsKICAgICAgICAgICAgIEFTU0VSVF9VTlVTRUQo
cGlubmVkR1BSLCBtX21lbW9yeVNpemVHUFIgPT0gcGlubmVkR1BSKTsKLSAgICAgICAgICAgIGpp
dC5jb3B5Q2FsbGVlU2F2ZXNUb1ZNRW50cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVyKCk7Ci0KLSAg
ICAgICAgICAgIGppdC5tb3ZlKEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCBHUFJJbmZvOjph
cmd1bWVudEdQUjApOwotCi0gICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OkNhbGwgY2FsbCA9IGpp
dC5jYWxsKCk7Ci0gICAgICAgICAgICBqaXQuanVtcFRvRXhjZXB0aW9uSGFuZGxlcigpOwotCi0g
ICAgICAgICAgICBqaXQuYWRkTGlua1Rhc2soWz1dIChMaW5rQnVmZmVyJiBsaW5rQnVmZmVyKSB7
Ci0gICAgICAgICAgICAgICAgdm9pZCAoKnRocm93TWVtb3J5RXhjZXB0aW9uKShFeGVjU3RhdGUq
KSA9IFtdIChFeGVjU3RhdGUqIGV4ZWMpIHsKLSAgICAgICAgICAgICAgICAgICAgVk0qIHZtID0g
JmV4ZWMtPnZtKCk7Ci0gICAgICAgICAgICAgICAgICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0
cmFjZXIodm0sIGV4ZWMpOwotCi0gICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAg
ICAgICAgICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUoKnZtKTsKLSAg
ICAgICAgICAgICAgICAgICAgICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSB2bS0+
dG9wSlNXZWJBc3NlbWJseUluc3RhbmNlLT5nbG9iYWxPYmplY3QoKTsKLQotICAgICAgICAgICAg
ICAgICAgICAgICAgSlNXZWJBc3NlbWJseVJ1bnRpbWVFcnJvciogZXJyb3IgPSBKU1dlYkFzc2Vt
Ymx5UnVudGltZUVycm9yOjpjcmVhdGUoCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhl
YywgZ2xvYmFsT2JqZWN0LT5XZWJBc3NlbWJseVJ1bnRpbWVFcnJvclN0cnVjdHVyZSgpLCAiT3V0
IG9mIGJvdW5kcyBtZW1vcnkgYWNjZXNzIik7Ci0gICAgICAgICAgICAgICAgICAgICAgICB0aHJv
d0V4Y2VwdGlvbihleGVjLCB0aHJvd1Njb3BlLCBlcnJvcik7Ci0gICAgICAgICAgICAgICAgICAg
IH0KLQotICAgICAgICAgICAgICAgICAgICBnZW5lcmljVW53aW5kKHZtLCBleGVjKTsKLSAgICAg
ICAgICAgICAgICAgICAgQVNTRVJUKCEhdm0tPmNhbGxGcmFtZUZvckNhdGNoKTsKLSAgICAgICAg
ICAgICAgICB9OwotCi0gICAgICAgICAgICAgICAgbGlua0J1ZmZlci5saW5rKGNhbGwsIHRocm93
TWVtb3J5RXhjZXB0aW9uKTsKLSAgICAgICAgICAgIH0pOworICAgICAgICAgICAgdGhpcy0+ZW1p
dEV4Y2VwdGlvbkNoZWNrKGppdCwgRXhjZXB0aW9uVHlwZTo6T3V0T2ZCb3VuZHNNZW1vcnlBY2Nl
c3MpOwogICAgICAgICB9KTsKIAogICAgICAgICBCMzo6UGF0Y2hwb2ludFZhbHVlKiBmb28gPSBt
X2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PEIzOjpQYXRjaHBvaW50VmFsdWU+KG1fcHJvYywgQjM6
OlZvaWQsIE9yaWdpbigpKTsKQEAgLTI3NCw2ICsyNTksNjggQEAgQjNJUkdlbmVyYXRvcjo6QjNJ
UkdlbmVyYXRvcihWTSYgdm0sIGNvbgogICAgIG1fZnVuY3Rpb25JbmRleFNwYWNlVmFsdWUgPSBt
X2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PENvbnN0UHRyVmFsdWU+KG1fcHJvYywgT3JpZ2luKCks
IGZ1bmN0aW9uSW5kZXhTcGFjZS5idWZmZXIuZ2V0KCkpOwogfQogCit2b2lkIEIzSVJHZW5lcmF0
b3I6OmVtaXRFeGNlcHRpb25DaGVjayhDQ2FsbEhlbHBlcnMmIGppdCwgRXhjZXB0aW9uVHlwZSB0
eXBlKQoreworICAgIEIzSVJHZW5lcmF0b3IqIGdlbmVyYXRvciA9IHRoaXM7CisgICAgaml0Lm1v
dmUoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoc3RhdGljX2Nhc3Q8dWludDMyX3Q+KHR5cGUp
KSwgR1BSSW5mbzo6YXJndW1lbnRHUFIxKTsKKyAgICBhdXRvIGp1bXAgPSBqaXQuanVtcCgpOwor
ICAgIGppdC5hZGRMaW5rVGFzayhbPV0gKExpbmtCdWZmZXImIGxpbmtCdWZmZXIpIHsKKyAgICAg
ICAgQVNTRVJUKGdlbmVyYXRvci0+bV9leGNlcHRpb25IYW5kbGVyLmlzU2V0KCkpOworICAgICAg
ICBsaW5rQnVmZmVyLmxpbmsoanVtcCwgbGlua0J1ZmZlci5sb2NhdGlvbk9mKGdlbmVyYXRvci0+
bV9leGNlcHRpb25IYW5kbGVyKSk7CisgICAgfSk7Cit9CisKKwordm9pZCBCM0lSR2VuZXJhdG9y
OjplbWl0RXhjZXB0aW9uSGFuZGxlcihDQ2FsbEhlbHBlcnMmIGppdCkKK3sKKyAgICBtX2V4Y2Vw
dGlvbkhhbmRsZXIgPSBqaXQubGFiZWwoKTsKKworICAgIHsKKyAgICAgICAgUmVnaXN0ZXJTZXQg
dXNlZFJlZ2lzdGVycyA9IFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKTsK
KyAgICAgICAgLy8gVGhlIHRoaW5nIHRoYXQganVtcHMgaGVyZSB3aWxsIG1vdmUgRXhjZXB0aW9u
VHlwZSBpbnRvIHRoZSBhcmd1bWVudEdQUjEgYW5kIGp1bXAgaGVyZS4KKyAgICAgICAgdXNlZFJl
Z2lzdGVycy5zZXQoR1BSSW5mbzo6YXJndW1lbnRHUFIxKTsKKyAgICAgICAgaml0LmNvcHlDYWxs
ZWVTYXZlc1RvVk1FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNCdWZmZXIoKTsKKyAgICB9CisKKyAgICBq
aXQubW92ZShHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlciwgR1BSSW5mbzo6YXJndW1lbnRHUFIw
KTsKKyAgICBDQ2FsbEhlbHBlcnM6OkNhbGwgY2FsbCA9IGppdC5jYWxsKCk7CisgICAgaml0Lmp1
bXBUb0V4Y2VwdGlvbkhhbmRsZXIoKTsKKworICAgIGppdC5hZGRMaW5rVGFzayhbPV0gKExpbmtC
dWZmZXImIGxpbmtCdWZmZXIpIHsKKyAgICAgICAgdm9pZCAoKnRocm93TWVtb3J5RXhjZXB0aW9u
KShFeGVjU3RhdGUqLCBFeGNlcHRpb25UeXBlKSA9IFtdIChFeGVjU3RhdGUqIGV4ZWMsIEV4Y2Vw
dGlvblR5cGUgdHlwZSkgeworICAgICAgICAgICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7CisgICAg
ICAgICAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKKworICAgICAg
ICAgICAgY29uc3QgY2hhciogbWVzc2FnZTsKKyAgICAgICAgICAgIHN3aXRjaCAodHlwZSkgewor
ICAgICAgICAgICAgY2FzZSBFeGNlcHRpb25UeXBlOjpPdXRPZkJvdW5kc01lbW9yeUFjY2VzczoK
KyAgICAgICAgICAgICAgICBtZXNzYWdlID0gIk91dCBvZiBib3VuZHMgbWVtb3J5IGFjY2VzcyI7
CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIEV4Y2VwdGlvblR5cGU6
Ok51bGxUYWJsZUVudHJ5OgorICAgICAgICAgICAgICAgIG1lc3NhZ2UgPSAiQ2FuJ3QgbWFrZSBh
IGNhbGxfaW5kaXJlY3QgdG8gYSBudWxsIHRhYmxlIGVudHJ5IjsKKyAgICAgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgICAgIGNhc2UgRXhjZXB0aW9uVHlwZTo6QmFkU2lnbmF0dXJlOgorICAg
ICAgICAgICAgICAgIG1lc3NhZ2UgPSAiVHJpZWQgdG8gbWFrZSBhIGNhbGxfaW5kaXJlY3QgdG8g
YSBzaWduYXR1cmUgdGhhdCBkb2VzIG5vdCBtYXRjaCI7CisgICAgICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBhdXRvIHRo
cm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKCp2bSk7CisgICAgICAgICAgICAgICAgSlNH
bG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IHZtLT50b3BKU1dlYkFzc2VtYmx5SW5zdGFuY2Ut
Pmdsb2JhbE9iamVjdCgpOworCisgICAgICAgICAgICAgICAgSlNXZWJBc3NlbWJseVJ1bnRpbWVF
cnJvciogZXJyb3IgPSBKU1dlYkFzc2VtYmx5UnVudGltZUVycm9yOjpjcmVhdGUoCisgICAgICAg
ICAgICAgICAgICAgIGV4ZWMsIGdsb2JhbE9iamVjdC0+V2ViQXNzZW1ibHlSdW50aW1lRXJyb3JT
dHJ1Y3R1cmUoKSwgbWVzc2FnZSk7CisgICAgICAgICAgICAgICAgdGhyb3dFeGNlcHRpb24oZXhl
YywgdGhyb3dTY29wZSwgZXJyb3IpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBnZW5l
cmljVW53aW5kKHZtLCBleGVjKTsKKyAgICAgICAgICAgIEFTU0VSVCghIXZtLT5jYWxsRnJhbWVG
b3JDYXRjaCk7CisgICAgICAgIH07CisKKyAgICAgICAgbGlua0J1ZmZlci5saW5rKGNhbGwsIHRo
cm93TWVtb3J5RXhjZXB0aW9uKTsKKyAgICB9KTsKK30KKwogVmFsdWUqIEIzSVJHZW5lcmF0b3I6
Onplcm9Gb3JUeXBlKFR5cGUgdHlwZSkKIHsKICAgICBBU1NFUlQodHlwZSAhPSBWb2lkKTsKQEAg
LTc4MSw3ICs4MjgsNyBAQCB2b2lkIEIzSVJHZW5lcmF0b3I6OmR1bXAoY29uc3QgVmVjdG9yPENv
CiAgICAgZGF0YUxvZ0xuKCJcbiIpOwogfQogCi1zdGF0aWMgc3RkOjp1bmlxdWVfcHRyPENvbXBp
bGF0aW9uPiBjcmVhdGVKU1RvV2FzbVdyYXBwZXIoVk0mIHZtLCBXYXNtSW50ZXJuYWxGdW5jdGlv
biYgZnVuY3Rpb24sIGNvbnN0IFNpZ25hdHVyZSogc2lnbmF0dXJlLCBNYWNyb0Fzc2VtYmxlckNv
ZGVQdHIgbWFpbkZ1bmN0aW9uLCBjb25zdCBNZW1vcnlJbmZvcm1hdGlvbiYgbWVtb3J5KQorc3Rh
dGljIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiBjcmVhdGVKU1RvV2FzbVdyYXBwZXIoVk0mIHZtLCBX
YXNtSW50ZXJuYWxGdW5jdGlvbiYgZnVuY3Rpb24sIGNvbnN0IFNpZ25hdHVyZSogc2lnbmF0dXJl
LCBNYWNyb0Fzc2VtYmxlckNvZGVQdHIgbWFpbkZ1bmN0aW9uLCBjb25zdCBNZW1vcnlJbmZvcm1h
dGlvbiYgbWVtb3J5KQogewogICAgIFByb2NlZHVyZSBwcm9jOwogICAgIEJhc2ljQmxvY2sqIGJs
b2NrID0gcHJvYy5hZGRCbG9jaygpOwpAQCAtODY0LDcgKzkxMSw3IEBAIHN0YXRpYyBzdGQ6OnVu
aXF1ZV9wdHI8Q29tcGlsYXRpb24+IGNyZWEKIAogICAgIGF1dG8ganNFbnRyeXBvaW50ID0gc3Rk
OjptYWtlX3VuaXF1ZTxDb21waWxhdGlvbj4odm0sIHByb2MpOwogICAgIGZ1bmN0aW9uLmpzVG9X
YXNtRW50cnlwb2ludC5jYWxsZWVTYXZlUmVnaXN0ZXJzID0gcHJvYy5jYWxsZWVTYXZlUmVnaXN0
ZXJzKCk7Ci0gICAgcmV0dXJuIGpzRW50cnlwb2ludDsKKyAgICByZXR1cm4ganNFbnRyeXBvaW50
LT5jb2RlUmVmKCk7CiB9CiAKIHN0ZDo6dW5pcXVlX3B0cjxXYXNtSW50ZXJuYWxGdW5jdGlvbj4g
cGFyc2VBbmRDb21waWxlKFZNJiB2bSwgY29uc3QgdWludDhfdCogZnVuY3Rpb25TdGFydCwgc2l6
ZV90IGZ1bmN0aW9uTGVuZ3RoLCBjb25zdCBTaWduYXR1cmUqIHNpZ25hdHVyZSwgVmVjdG9yPFVu
bGlua2VkV2FzbVRvV2FzbUNhbGw+JiB1bmxpbmtlZFdhc21Ub1dhc21DYWxscywgY29uc3QgSW1t
dXRhYmxlRnVuY3Rpb25JbmRleFNwYWNlJiBmdW5jdGlvbkluZGV4U3BhY2UsIGNvbnN0IE1vZHVs
ZUluZm9ybWF0aW9uJiBpbmZvLCB1bnNpZ25lZCBvcHRMZXZlbCkKQEAgLTg4Niw5ICs5MzMsMTkg
QEAgc3RkOjp1bmlxdWVfcHRyPFdhc21JbnRlcm5hbEZ1bmN0aW9uPiBwYQogICAgIGlmICh2ZXJi
b3NlKQogICAgICAgICBkYXRhTG9nKCJQb3N0IFNTQTogIiwgcHJvY2VkdXJlKTsKIAotICAgIHJl
c3VsdC0+d2FzbUVudHJ5cG9pbnQuY29tcGlsYXRpb24gPSBzdGQ6Om1ha2VfdW5pcXVlPENvbXBp
bGF0aW9uPih2bSwgcHJvY2VkdXJlLCBvcHRMZXZlbCk7CisgICAgeworICAgICAgICBCMzo6cHJl
cGFyZUZvckdlbmVyYXRpb24ocHJvY2VkdXJlLCBvcHRMZXZlbCk7CisgICAgICAgIAorICAgICAg
ICBDQ2FsbEhlbHBlcnMgaml0KCZ2bSk7CisgICAgICAgIEIzOjpnZW5lcmF0ZShwcm9jZWR1cmUs
IGppdCk7CisgICAgICAgIGNvbnRleHQuZW1pdEV4Y2VwdGlvbkhhbmRsZXIoaml0KTsKKworICAg
ICAgICBMaW5rQnVmZmVyIGxpbmtCdWZmZXIodm0sIGppdCwgbnVsbHB0cik7CisgICAgICAgIHJl
c3VsdC0+d2FzbUVudHJ5cG9pbnQuY29kZSA9IEZJTkFMSVpFX0NPREUobGlua0J1ZmZlciwgKCJX
YXNtIGNvbXBpbGF0aW9uIikpOworICAgIH0KKwogICAgIHJlc3VsdC0+d2FzbUVudHJ5cG9pbnQu
Y2FsbGVlU2F2ZVJlZ2lzdGVycyA9IHByb2NlZHVyZS5jYWxsZWVTYXZlUmVnaXN0ZXJzKCk7Ci0g
ICAgcmVzdWx0LT5qc1RvV2FzbUVudHJ5cG9pbnQuY29tcGlsYXRpb24gPSBjcmVhdGVKU1RvV2Fz
bVdyYXBwZXIodm0sICpyZXN1bHQsIHNpZ25hdHVyZSwgcmVzdWx0LT53YXNtRW50cnlwb2ludC5j
b21waWxhdGlvbi0+Y29kZSgpLCBpbmZvLm1lbW9yeSk7CisgICAgcmVzdWx0LT5qc1RvV2FzbUVu
dHJ5cG9pbnQuY29kZSA9IGNyZWF0ZUpTVG9XYXNtV3JhcHBlcih2bSwgKnJlc3VsdCwgc2lnbmF0
dXJlLCByZXN1bHQtPndhc21FbnRyeXBvaW50LmNvZGUuY29kZSgpLCBpbmZvLm1lbW9yeSk7CiAg
ICAgcmV0dXJuIHJlc3VsdDsKIH0KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20v
V2FzbUZvcm1hdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dh
c21Gb3JtYXQuaAkocmV2aXNpb24gMjA5Nzg1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3dh
c20vV2FzbUZvcm1hdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMDIsNyArMjAyLDcgQEAgc3RydWN0
IFVubGlua2VkV2FzbVRvV2FzbUNhbGwgewogfTsKIAogc3RydWN0IEVudHJ5cG9pbnQgewotICAg
IHN0ZDo6dW5pcXVlX3B0cjxCMzo6Q29tcGlsYXRpb24+IGNvbXBpbGF0aW9uOworICAgIE1hY3Jv
QXNzZW1ibGVyQ29kZVJlZiBjb2RlOwogICAgIFJlZ2lzdGVyQXRPZmZzZXRMaXN0IGNhbGxlZVNh
dmVSZWdpc3RlcnM7CiB9OwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNt
UGxhbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVBs
YW4uY3BwCShyZXZpc2lvbiAyMDk3ODQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9X
YXNtUGxhbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEzMCw3ICsxMzAsNyBAQCB2b2lkIFBsYW46
OnJ1bigpCiAKICAgICAgICAgdW5saW5rZWRXYXNtVG9XYXNtQ2FsbHMudW5jaGVja2VkQXBwZW5k
KFZlY3RvcjxVbmxpbmtlZFdhc21Ub1dhc21DYWxsPigpKTsKICAgICAgICAgbV93YXNtSW50ZXJu
YWxGdW5jdGlvbnMudW5jaGVja2VkQXBwZW5kKHBhcnNlQW5kQ29tcGlsZSgqbV92bSwgZnVuY3Rp
b25TdGFydCwgZnVuY3Rpb25MZW5ndGgsIHNpZ25hdHVyZSwgdW5saW5rZWRXYXNtVG9XYXNtQ2Fs
bHMuYXQoZnVuY3Rpb25JbmRleCksIG1fZnVuY3Rpb25JbmRleFNwYWNlLCAqbV9tb2R1bGVJbmZv
cm1hdGlvbikpOwotICAgICAgICBtX2Z1bmN0aW9uSW5kZXhTcGFjZS5idWZmZXIuZ2V0KClbZnVu
Y3Rpb25JbmRleFNwYWNlXS5jb2RlID0gbV93YXNtSW50ZXJuYWxGdW5jdGlvbnNbZnVuY3Rpb25J
bmRleF0tPndhc21FbnRyeXBvaW50LmNvbXBpbGF0aW9uLT5jb2RlKCkuZXhlY3V0YWJsZUFkZHJl
c3MoKTsKKyAgICAgICAgbV9mdW5jdGlvbkluZGV4U3BhY2UuYnVmZmVyLmdldCgpW2Z1bmN0aW9u
SW5kZXhTcGFjZV0uY29kZSA9IG1fd2FzbUludGVybmFsRnVuY3Rpb25zW2Z1bmN0aW9uSW5kZXhd
LT53YXNtRW50cnlwb2ludC5jb2RlLmNvZGUoKS5leGVjdXRhYmxlQWRkcmVzcygpOwogICAgIH0K
IAogICAgIC8vIFBhdGNoIHRoZSBjYWxsIHNpdGVzIGZvciBlYWNoIFdlYkFzc2VtYmx5IGZ1bmN0
aW9uLgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseUNh
bGxlZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2Vi
QXNzZW1ibHlDYWxsZWUuaAkocmV2aXNpb24gMjA5Nzg0KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL3dhc20vanMvSlNXZWJBc3NlbWJseUNhbGxlZS5oCSh3b3JraW5nIGNvcHkpCkBAIC01NSw3
ICs1NSw3IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgY29uc3QgYm9vbCBuZWVkc0Rlc3RydWN0aW9u
ID0gdHJ1ZTsKICAgICBzdGF0aWMgdm9pZCBkZXN0cm95KEpTQ2VsbCopOwogCi0gICAgdm9pZCog
ZW50cnlwb2ludCgpIHsgcmV0dXJuIG1fZW50cnlwb2ludC5jb21waWxhdGlvbi0+Y29kZSgpLmV4
ZWN1dGFibGVBZGRyZXNzKCk7IH0KKyAgICB2b2lkKiBlbnRyeXBvaW50KCkgeyByZXR1cm4gbV9l
bnRyeXBvaW50LmNvZGUuY29kZSgpLmV4ZWN1dGFibGVBZGRyZXNzKCk7IH0KIAogICAgIFJlZ2lz
dGVyQXRPZmZzZXRMaXN0KiBjYWxsZWVTYXZlUmVnaXN0ZXJzKCkgeyByZXR1cm4gJm1fZW50cnlw
b2ludC5jYWxsZWVTYXZlUmVnaXN0ZXJzOyB9CiAK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>297118</attachid>
            <date>2016-12-14 13:15:27 -0800</date>
            <delta_ts>2016-12-15 17:41:57 -0800</delta_ts>
            <desc>WIP RFC</desc>
            <filename>a-backup.diff</filename>
            <type>text/plain</type>
            <size>21515</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IEpTVGVzdHMvd2FzbS9mdW5jdGlvbi10ZXN0cy9leGNlcHRpb25zLmpzCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIEpTVGVzdHMvd2FzbS9mdW5jdGlvbi10ZXN0cy9leGNlcHRpb25zLmpzCShub25leGlz
dGVudCkKKysrIEpTVGVzdHMvd2FzbS9mdW5jdGlvbi10ZXN0cy9leGNlcHRpb25zLmpzCSh3b3Jr
aW5nIGNvcHkpCkBAIC0wLDAgKzEsNTkgQEAKK2ltcG9ydCBCdWlsZGVyIGZyb20gJy4uL0J1aWxk
ZXIuanMnCitpbXBvcnQgKiBhcyBhc3NlcnQgZnJvbSAnLi4vYXNzZXJ0LmpzJworCitmdW5jdGlv
biBtYWtlSW5zdGFuY2UoKSB7CisgICAgY29uc3QgdGFibGVEZXNjcmlwdGlvbiA9IHtpbml0aWFs
OiAxLCBlbGVtZW50OiAiYW55ZnVuYyJ9OworICAgIGNvbnN0IGJ1aWxkZXIgPSBuZXcgQnVpbGRl
cigpCisgICAgICAgIC5UeXBlKCkKKyAgICAgICAgICAgIC5GdW5jKFsiaTMyIiwgImkzMiJdLCAi
aTMyIikKKyAgICAgICAgICAgIC5GdW5jKFsiaTMyIl0sICJpMzIiKQorICAgICAgICAuRW5kKCkK
KyAgICAgICAgLkltcG9ydCgpCisgICAgICAgICAgICAuVGFibGUoImltcCIsICJ0YWJsZSIsIHRh
YmxlRGVzY3JpcHRpb24pCisgICAgICAgIC5FbmQoKQorICAgICAgICAuRnVuY3Rpb24oKS5FbmQo
KQorICAgICAgICAuRXhwb3J0KCkKKyAgICAgICAgICAgIC5GdW5jdGlvbigiZm9vIikKKyAgICAg
ICAgICAgIC5GdW5jdGlvbigiYmFyIikKKyAgICAgICAgLkVuZCgpCisgICAgICAgIC5Db2RlKCkK
KyAgICAgICAgICAgIC5GdW5jdGlvbigiZm9vIiwgMCAvKlsnaTMyJywgJ2kzMiddID0+ICdpMzIn
Ki8pCisgICAgICAgICAgICAgICAgLkdldExvY2FsKDEpIC8vIHBhcmFtZXRlciB0byBjYWxsCisg
ICAgICAgICAgICAgICAgLkdldExvY2FsKDApIC8vIGNhbGwgaW5kZXgKKyAgICAgICAgICAgICAg
ICAuQ2FsbEluZGlyZWN0KDEsIDApIC8vIGNhbGxpbmcgZnVuY3Rpb24gb2YgdHlwZSBbJ2kzMidd
ID0+ICdpMzInCisgICAgICAgICAgICAgICAgLlJldHVybigpCisgICAgICAgICAgICAuRW5kKCkK
KyAgICAgICAgICAgIC5GdW5jdGlvbigiYmFyIiwgMSAvKlsnaTMyJ10gPT4gJ2kzMicqLykKKyAg
ICAgICAgICAgICAgICAuR2V0TG9jYWwoMCkKKyAgICAgICAgICAgICAgICAuSTMyQ29uc3QoNDIp
CisgICAgICAgICAgICAgICAgLkkzMkFkZCgpCisgICAgICAgICAgICAgICAgLlJldHVybigpCisg
ICAgICAgICAgICAuRW5kKCkKKyAgICAgICAgLkVuZCgpOworCisKKyAgICBjb25zdCBiaW4gPSBi
dWlsZGVyLldlYkFzc2VtYmx5KCkuZ2V0KCk7CisgICAgY29uc3QgbW9kdWxlID0gbmV3IFdlYkFz
c2VtYmx5Lk1vZHVsZShiaW4pOworICAgIGNvbnN0IHRhYmxlID0gbmV3IFdlYkFzc2VtYmx5LlRh
YmxlKHRhYmxlRGVzY3JpcHRpb24pOworICAgIHJldHVybiB7aW5zdGFuY2U6IG5ldyBXZWJBc3Nl
bWJseS5JbnN0YW5jZShtb2R1bGUsIHtpbXA6IHt0YWJsZX19KSwgdGFibGV9OworfQorCisvLyBG
SVhNRTogbWFrZSB0aGlzIHdvcmsgY3Jvc3MgbW9kdWxlLiBUaGUgcmVhc29uIGl0IGRvZXNuJ3QK
Ky8vIG5vdyBpcyB0aGF0IHdlIGRvbid0IHVuaXF1ZSBTaWduYXR1cmUqLgorLy8gaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2NTUxMQoreworICAgIGNvbnN0IHtpbnN0
YW5jZSwgdGFibGV9ID0gbWFrZUluc3RhbmNlKCk7CisgICAgY29uc3QgZm9vID0gaW5zdGFuY2Uu
ZXhwb3J0cy5mb287CisgICAgYXNzZXJ0LmVxKHRhYmxlLmdldCgwKSwgbnVsbCk7CisKKyAgICBm
b3IgKGxldCBpID0gMDsgaSA8IDEwMDA7IGkrKykgeworICAgICAgICBhc3NlcnQudGhyb3dzKCgp
ID0+IGZvbygwLCBpKSwgV2ViQXNzZW1ibHkuUnVudGltZUVycm9yLCAiQ2FuJ3QgbWFrZSBhIGNh
bGxfaW5kaXJlY3QgdG8gYSBudWxsIHRhYmxlIGVudHJ5Iik7CisgICAgfQorCisgICAgdGFibGUu
c2V0KDAsIGZvbyk7CisgICAgYXNzZXJ0LmVxKHRhYmxlLmdldCgwKSwgZm9vKTsKKworICAgIGZv
ciAobGV0IGkgPSAwOyBpIDwgMTAwMDsgaSsrKSB7CisgICAgICAgIGFzc2VydC50aHJvd3MoKCkg
PT4gZm9vKDEgKyBpLCBpKSwgV2ViQXNzZW1ibHkuUnVudGltZUVycm9yLCAiT3V0IG9mIGJvdW5k
cyBjYWxsX2luZGlyZWN0Iik7CisgICAgfQorfQpJbmRleDogSlNUZXN0cy93YXNtL2Z1bmN0aW9u
LXRlc3RzL3RhYmxlLWJhc2ljLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEpTVGVzdHMvd2FzbS9mdW5jdGlv
bi10ZXN0cy90YWJsZS1iYXNpYy5qcwkocmV2aXNpb24gMjA5Nzg0KQorKysgSlNUZXN0cy93YXNt
L2Z1bmN0aW9uLXRlc3RzL3RhYmxlLWJhc2ljLmpzCSh3b3JraW5nIGNvcHkpCkBAIC01MywxNSAr
NTMsMTIgQEAgZnVuY3Rpb24gbWFrZUluc3RhbmNlKCkgewogLy8gRklYTUU6IG1ha2UgdGhpcyB3
b3JrIGNyb3NzIG1vZHVsZS4gVGhlIHJlYXNvbiBpdCBkb2Vzbid0CiAvLyBub3cgaXMgdGhhdCB3
ZSBkb24ndCB1bmlxdWUgU2lnbmF0dXJlKi4KIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0xNjU1MTEKLS8qCiB7CiAgICAgY29uc3Qge2luc3RhbmNlLCB0YWJsZX0g
PSBtYWtlSW5zdGFuY2UoKTsKICAgICBjb25zdCBmb28gPSBpbnN0YW5jZS5leHBvcnRzLmZvbzsK
LSAgICAvL3RhYmxlLnNldCgwLCBtYWtlSW5zdGFuY2UoKS5pbnN0YW5jZS5leHBvcnRzLmJhcik7
IC8vIENyb3NzIGluc3RhbmNlIGZ1bmN0aW9uLgorICAgIHRhYmxlLnNldCgwLCBtYWtlSW5zdGFu
Y2UoKS5pbnN0YW5jZS5leHBvcnRzLmJhcik7IC8vIENyb3NzIGluc3RhbmNlIGZ1bmN0aW9uLgog
CiAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCAxMDAwOyBpKyspIHsKLSAgICAgICAgaWYgKGZvbygw
LCBpKSAhPT0gaSArIDQyKQotICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJCYWQgY2FsbCBp
bmRpcmVjdCIpOworICAgICAgICBhc3NlcnQudGhyb3dzKCgpID0+IGZvbygwLCBpKSwgV2ViQXNz
ZW1ibHkuUnVudGltZUVycm9yLCAiVHJpZWQgdG8gbWFrZSBhIGNhbGxfaW5kaXJlY3QgdG8gYSBz
aWduYXR1cmUgdGhhdCBkb2VzIG5vdCBtYXRjaCIpOwogICAgIH0KIH0KLSovCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQjNJUkdlbmVyYXRvci5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUIzSVJHZW5lcmF0b3IuY3BwCShyZXZp
c2lvbiAyMDk3ODQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQjNJUkdlbmVy
YXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMyLDYgKzMyLDcgQEAKICNpbmNsdWRlICJCM0ND
YWxsVmFsdWUuaCIKICNpbmNsdWRlICJCM0NvbnN0UHRyVmFsdWUuaCIKICNpbmNsdWRlICJCM0Zp
eFNTQS5oIgorI2luY2x1ZGUgIkIzR2VuZXJhdGUuaCIKICNpbmNsdWRlICJCM1N0YWNrbWFwR2Vu
ZXJhdGlvblBhcmFtcy5oIgogI2luY2x1ZGUgIkIzU3dpdGNoVmFsdWUuaCIKICNpbmNsdWRlICJC
M1ZhbGlkYXRlLmgiCkBAIC0xNzksNiArMTgwLDE3IEBAIHB1YmxpYzoKIAogICAgIHZvaWQgc2V0
RXJyb3JNZXNzYWdlKFN0cmluZyYmKSB7IFVOUkVBQ0hBQkxFX0ZPUl9QTEFURk9STSgpOyB9CiAK
KyAgICBlbnVtIGNsYXNzIEV4Y2VwdGlvblR5cGUgOiB1aW50MzJfdCB7CisgICAgICAgIE91dE9m
Qm91bmRzTWVtb3J5QWNjZXNzLAorICAgICAgICBPdXRPZkJvdW5kc1RydW5jLAorICAgICAgICBP
dXRPZkJvdW5kc0NhbGxJbmRpcmVjdCwKKyAgICAgICAgTnVsbFRhYmxlRW50cnksCisgICAgICAg
IEJhZFNpZ25hdHVyZSwKKyAgICB9OworCisgICAgdm9pZCBlbWl0RXhjZXB0aW9uQ2hlY2soQ0Nh
bGxIZWxwZXJzJiwgRXhjZXB0aW9uVHlwZSk7CisgICAgdm9pZCBlbWl0RXhjZXB0aW9uSGFuZGxl
cihDQ2FsbEhlbHBlcnMmKTsKKwogcHJpdmF0ZToKICAgICBFeHByZXNzaW9uVHlwZSBlbWl0Q2hl
Y2tBbmRQcmVwYXJlUG9pbnRlcihFeHByZXNzaW9uVHlwZSBwb2ludGVyLCB1aW50MzJfdCBvZmZz
ZXQsIHVpbnQzMl90IHNpemVPZk9wKTsKICAgICBFeHByZXNzaW9uVHlwZSBlbWl0TG9hZE9wKExv
YWRPcFR5cGUsIE9yaWdpbiwgRXhwcmVzc2lvblR5cGUgcG9pbnRlciwgdWludDMyX3Qgb2Zmc2V0
KTsKQEAgLTE5OCw2ICsyMTAsNyBAQCBwcml2YXRlOgogICAgIEdQUlJlZyBtX21lbW9yeVNpemVH
UFI7CiAgICAgVmFsdWUqIG1femVyb1ZhbHVlc1tudW1UeXBlc107CiAgICAgVmFsdWUqIG1fZnVu
Y3Rpb25JbmRleFNwYWNlVmFsdWU7CisgICAgQ0NhbGxIZWxwZXJzOjpMYWJlbCBtX2V4Y2VwdGlv
bkhhbmRsZXI7CiB9OwogCiBCM0lSR2VuZXJhdG9yOjpCM0lSR2VuZXJhdG9yKFZNJiB2bSwgY29u
c3QgTWVtb3J5SW5mb3JtYXRpb24mIG1lbW9yeSwgUHJvY2VkdXJlJiBwcm9jZWR1cmUsIFdhc21J
bnRlcm5hbEZ1bmN0aW9uKiBjb21waWxhdGlvbiwgVmVjdG9yPFVubGlua2VkV2FzbVRvV2FzbUNh
bGw+JiB1bmxpbmtlZFdhc21Ub1dhc21DYWxscywgY29uc3QgSW1tdXRhYmxlRnVuY3Rpb25JbmRl
eFNwYWNlJiBmdW5jdGlvbkluZGV4U3BhY2UpCkBAIC0yMzMsMzMgKzI0Niw3IEBAIEIzSVJHZW5l
cmF0b3I6OkIzSVJHZW5lcmF0b3IoVk0mIHZtLCBjb24KICAgICAgICAgbV9wcm9jLnNldFdhc21C
b3VuZHNDaGVja0dlbmVyYXRvcihbPV0gKENDYWxsSGVscGVycyYgaml0LCBHUFJSZWcgcGlubmVk
R1BSLCB1bnNpZ25lZCkgewogICAgICAgICAgICAgQWxsb3dNYWNyb1NjcmF0Y2hSZWdpc3RlclVz
YWdlIGFsbG93U2NyYXRjaChqaXQpOwogICAgICAgICAgICAgQVNTRVJUX1VOVVNFRChwaW5uZWRH
UFIsIG1fbWVtb3J5U2l6ZUdQUiA9PSBwaW5uZWRHUFIpOwotICAgICAgICAgICAgaml0LmNvcHlD
YWxsZWVTYXZlc1RvVk1FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNCdWZmZXIoKTsKLQotICAgICAgICAg
ICAgaml0Lm1vdmUoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIEdQUkluZm86OmFyZ3VtZW50
R1BSMCk7Ci0KLSAgICAgICAgICAgIENDYWxsSGVscGVyczo6Q2FsbCBjYWxsID0gaml0LmNhbGwo
KTsKLSAgICAgICAgICAgIGppdC5qdW1wVG9FeGNlcHRpb25IYW5kbGVyKCk7Ci0KLSAgICAgICAg
ICAgIGppdC5hZGRMaW5rVGFzayhbPV0gKExpbmtCdWZmZXImIGxpbmtCdWZmZXIpIHsKLSAgICAg
ICAgICAgICAgICB2b2lkICgqdGhyb3dNZW1vcnlFeGNlcHRpb24pKEV4ZWNTdGF0ZSopID0gW10g
KEV4ZWNTdGF0ZSogZXhlYykgewotICAgICAgICAgICAgICAgICAgICBWTSogdm0gPSAmZXhlYy0+
dm0oKTsKLSAgICAgICAgICAgICAgICAgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2
bSwgZXhlYyk7Ci0KLSAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAg
ICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSgqdm0pOwotICAgICAgICAg
ICAgICAgICAgICAgICAgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IHZtLT50b3BKU1dl
YkFzc2VtYmx5SW5zdGFuY2UtPmdsb2JhbE9iamVjdCgpOwotCi0gICAgICAgICAgICAgICAgICAg
ICAgICBKU1dlYkFzc2VtYmx5UnVudGltZUVycm9yKiBlcnJvciA9IEpTV2ViQXNzZW1ibHlSdW50
aW1lRXJyb3I6OmNyZWF0ZSgKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBleGVjLCBnbG9i
YWxPYmplY3QtPldlYkFzc2VtYmx5UnVudGltZUVycm9yU3RydWN0dXJlKCksICJPdXQgb2YgYm91
bmRzIG1lbW9yeSBhY2Nlc3MiKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHRocm93RXhjZXB0
aW9uKGV4ZWMsIHRocm93U2NvcGUsIGVycm9yKTsKLSAgICAgICAgICAgICAgICAgICAgfQotCi0g
ICAgICAgICAgICAgICAgICAgIGdlbmVyaWNVbndpbmQodm0sIGV4ZWMpOwotICAgICAgICAgICAg
ICAgICAgICBBU1NFUlQoISF2bS0+Y2FsbEZyYW1lRm9yQ2F0Y2gpOwotICAgICAgICAgICAgICAg
IH07Ci0KLSAgICAgICAgICAgICAgICBsaW5rQnVmZmVyLmxpbmsoY2FsbCwgdGhyb3dNZW1vcnlF
eGNlcHRpb24pOwotICAgICAgICAgICAgfSk7CisgICAgICAgICAgICB0aGlzLT5lbWl0RXhjZXB0
aW9uQ2hlY2soaml0LCBFeGNlcHRpb25UeXBlOjpPdXRPZkJvdW5kc01lbW9yeUFjY2Vzcyk7CiAg
ICAgICAgIH0pOwogCiAgICAgICAgIEIzOjpQYXRjaHBvaW50VmFsdWUqIGZvbyA9IG1fY3VycmVu
dEJsb2NrLT5hcHBlbmROZXc8QjM6OlBhdGNocG9pbnRWYWx1ZT4obV9wcm9jLCBCMzo6Vm9pZCwg
T3JpZ2luKCkpOwpAQCAtMjc0LDYgKzI2MSw3NCBAQCBCM0lSR2VuZXJhdG9yOjpCM0lSR2VuZXJh
dG9yKFZNJiB2bSwgY29uCiAgICAgbV9mdW5jdGlvbkluZGV4U3BhY2VWYWx1ZSA9IG1fY3VycmVu
dEJsb2NrLT5hcHBlbmROZXc8Q29uc3RQdHJWYWx1ZT4obV9wcm9jLCBPcmlnaW4oKSwgZnVuY3Rp
b25JbmRleFNwYWNlLmJ1ZmZlci5nZXQoKSk7CiB9CiAKK3ZvaWQgQjNJUkdlbmVyYXRvcjo6ZW1p
dEV4Y2VwdGlvbkNoZWNrKENDYWxsSGVscGVycyYgaml0LCBFeGNlcHRpb25UeXBlIHR5cGUpCit7
CisgICAgQjNJUkdlbmVyYXRvciogZ2VuZXJhdG9yID0gdGhpczsKKyAgICBqaXQubW92ZShDQ2Fs
bEhlbHBlcnM6OlRydXN0ZWRJbW0zMihzdGF0aWNfY2FzdDx1aW50MzJfdD4odHlwZSkpLCBHUFJJ
bmZvOjphcmd1bWVudEdQUjEpOworICAgIGF1dG8ganVtcCA9IGppdC5qdW1wKCk7CisgICAgaml0
LmFkZExpbmtUYXNrKFs9XSAoTGlua0J1ZmZlciYgbGlua0J1ZmZlcikgeworICAgICAgICBBU1NF
UlQoZ2VuZXJhdG9yLT5tX2V4Y2VwdGlvbkhhbmRsZXIuaXNTZXQoKSk7CisgICAgICAgIGxpbmtC
dWZmZXIubGluayhqdW1wLCBsaW5rQnVmZmVyLmxvY2F0aW9uT2YoZ2VuZXJhdG9yLT5tX2V4Y2Vw
dGlvbkhhbmRsZXIpKTsKKyAgICB9KTsKK30KKworCit2b2lkIEIzSVJHZW5lcmF0b3I6OmVtaXRF
eGNlcHRpb25IYW5kbGVyKENDYWxsSGVscGVycyYgaml0KQoreworICAgIG1fZXhjZXB0aW9uSGFu
ZGxlciA9IGppdC5sYWJlbCgpOworCisgICAgeworICAgICAgICBSZWdpc3RlclNldCB1c2VkUmVn
aXN0ZXJzID0gUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpOworICAgICAg
ICAvLyBUaGUgdGhpbmcgdGhhdCBqdW1wcyBoZXJlIHdpbGwgbW92ZSBFeGNlcHRpb25UeXBlIGlu
dG8gdGhlIGFyZ3VtZW50R1BSMSBhbmQganVtcCBoZXJlLgorICAgICAgICB1c2VkUmVnaXN0ZXJz
LnNldChHUFJJbmZvOjphcmd1bWVudEdQUjEpOworICAgICAgICBqaXQuY29weUNhbGxlZVNhdmVz
VG9WTUVudHJ5RnJhbWVDYWxsZWVTYXZlc0J1ZmZlcigpOworICAgIH0KKworICAgIGppdC5tb3Zl
KEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCBHUFJJbmZvOjphcmd1bWVudEdQUjApOworICAg
IENDYWxsSGVscGVyczo6Q2FsbCBjYWxsID0gaml0LmNhbGwoKTsKKyAgICBqaXQuanVtcFRvRXhj
ZXB0aW9uSGFuZGxlcigpOworCisgICAgaml0LmFkZExpbmtUYXNrKFs9XSAoTGlua0J1ZmZlciYg
bGlua0J1ZmZlcikgeworICAgICAgICB2b2lkICgqdGhyb3dNZW1vcnlFeGNlcHRpb24pKEV4ZWNT
dGF0ZSosIEV4Y2VwdGlvblR5cGUpID0gW10gKEV4ZWNTdGF0ZSogZXhlYywgRXhjZXB0aW9uVHlw
ZSB0eXBlKSB7CisgICAgICAgICAgICBWTSogdm0gPSAmZXhlYy0+dm0oKTsKKyAgICAgICAgICAg
IE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOworCisgICAgICAgICAgICBj
b25zdCBjaGFyKiBtZXNzYWdlOworICAgICAgICAgICAgc3dpdGNoICh0eXBlKSB7CisgICAgICAg
ICAgICBjYXNlIEV4Y2VwdGlvblR5cGU6Ok91dE9mQm91bmRzTWVtb3J5QWNjZXNzOgorICAgICAg
ICAgICAgICAgIG1lc3NhZ2UgPSAiT3V0IG9mIGJvdW5kcyBtZW1vcnkgYWNjZXNzIjsKKyAgICAg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgRXhjZXB0aW9uVHlwZTo6T3V0T2ZC
b3VuZHNDYWxsSW5kaXJlY3Q6CisgICAgICAgICAgICAgICAgbWVzc2FnZSA9ICJPdXQgb2YgYm91
bmRzIGNhbGxfaW5kaXJlY3QiOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAg
Y2FzZSBFeGNlcHRpb25UeXBlOjpPdXRPZkJvdW5kc1RydW5jOgorICAgICAgICAgICAgICAgIG1l
c3NhZ2UgPSAiVHJ1bmMgb3BlcmF0aW9uIG91dCBvZiBib3VuZHMiOworICAgICAgICAgICAgICAg
IGJyZWFrOworICAgICAgICAgICAgY2FzZSBFeGNlcHRpb25UeXBlOjpOdWxsVGFibGVFbnRyeToK
KyAgICAgICAgICAgICAgICBtZXNzYWdlID0gIkNhbid0IG1ha2UgYSBjYWxsX2luZGlyZWN0IHRv
IGEgbnVsbCB0YWJsZSBlbnRyeSI7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAg
ICBjYXNlIEV4Y2VwdGlvblR5cGU6OkJhZFNpZ25hdHVyZToKKyAgICAgICAgICAgICAgICBtZXNz
YWdlID0gIlRyaWVkIHRvIG1ha2UgYSBjYWxsX2luZGlyZWN0IHRvIGEgc2lnbmF0dXJlIHRoYXQg
ZG9lcyBub3QgbWF0Y2giOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQor
CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFS
RV9USFJPV19TQ09QRSgqdm0pOworICAgICAgICAgICAgICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9i
YWxPYmplY3QgPSB2bS0+dG9wSlNXZWJBc3NlbWJseUluc3RhbmNlLT5nbG9iYWxPYmplY3QoKTsK
KworICAgICAgICAgICAgICAgIEpTV2ViQXNzZW1ibHlSdW50aW1lRXJyb3IqIGVycm9yID0gSlNX
ZWJBc3NlbWJseVJ1bnRpbWVFcnJvcjo6Y3JlYXRlKAorICAgICAgICAgICAgICAgICAgICBleGVj
LCBnbG9iYWxPYmplY3QtPldlYkFzc2VtYmx5UnVudGltZUVycm9yU3RydWN0dXJlKCksIG1lc3Nh
Z2UpOworICAgICAgICAgICAgICAgIHRocm93RXhjZXB0aW9uKGV4ZWMsIHRocm93U2NvcGUsIGVy
cm9yKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgZ2VuZXJpY1Vud2luZCh2bSwgZXhl
Yyk7CisgICAgICAgICAgICBBU1NFUlQoISF2bS0+Y2FsbEZyYW1lRm9yQ2F0Y2gpOworICAgICAg
ICB9OworCisgICAgICAgIGxpbmtCdWZmZXIubGluayhjYWxsLCB0aHJvd01lbW9yeUV4Y2VwdGlv
bik7CisgICAgfSk7Cit9CisKIFZhbHVlKiBCM0lSR2VuZXJhdG9yOjp6ZXJvRm9yVHlwZShUeXBl
IHR5cGUpCiB7CiAgICAgQVNTRVJUKHR5cGUgIT0gVm9pZCk7CkBAIC02ODksOCArNzQ0LDggQEAg
Ym9vbCBCM0lSR2VuZXJhdG9yOjphZGRDYWxsSW5kaXJlY3QoY29ucwogICAgICAgICBDaGVja1Zh
bHVlKiBjaGVjayA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8Q2hlY2tWYWx1ZT4obV9wcm9j
LCBDaGVjaywgT3JpZ2luKCksCiAgICAgICAgICAgICBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3
PFZhbHVlPihtX3Byb2MsIEFib3ZlRXF1YWwsIE9yaWdpbigpLCBjYWxsZWVJbmRleCwgY2FsbGFi
bGVGdW5jdGlvbkJ1ZmZlclNpemUpKTsKIAotICAgICAgICBjaGVjay0+c2V0R2VuZXJhdG9yKFtd
IChDQ2FsbEhlbHBlcnMmIGppdCwgY29uc3QgQjM6OlN0YWNrbWFwR2VuZXJhdGlvblBhcmFtcyYp
IHsKLSAgICAgICAgICAgIGppdC5icmVha3BvaW50KCk7CisgICAgICAgIGNoZWNrLT5zZXRHZW5l
cmF0b3IoWz1dIChDQ2FsbEhlbHBlcnMmIGppdCwgY29uc3QgQjM6OlN0YWNrbWFwR2VuZXJhdGlv
blBhcmFtcyYpIHsKKyAgICAgICAgICAgIHRoaXMtPmVtaXRFeGNlcHRpb25DaGVjayhqaXQsIEV4
Y2VwdGlvblR5cGU6Ok91dE9mQm91bmRzQ2FsbEluZGlyZWN0KTsKICAgICAgICAgfSk7CiAgICAg
fQogCkBAIC03MDgsOCArNzYzLDggQEAgYm9vbCBCM0lSR2VuZXJhdG9yOjphZGRDYWxsSW5kaXJl
Y3QoY29ucwogICAgICAgICAgICAgICAgIGNhbGxlZVNpZ25hdHVyZSwgCiAgICAgICAgICAgICAg
ICAgbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxDb25zdFB0clZhbHVlPihtX3Byb2MsIE9yaWdp
bigpLCAwKSkpOwogCi0gICAgICAgIGNoZWNrLT5zZXRHZW5lcmF0b3IoW10gKENDYWxsSGVscGVy
cyYgaml0LCBjb25zdCBCMzo6U3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zJikgewotICAgICAgICAg
ICAgaml0LmJyZWFrcG9pbnQoKTsKKyAgICAgICAgY2hlY2stPnNldEdlbmVyYXRvcihbPV0gKEND
YWxsSGVscGVycyYgaml0LCBjb25zdCBCMzo6U3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zJikgewor
ICAgICAgICAgICAgdGhpcy0+ZW1pdEV4Y2VwdGlvbkNoZWNrKGppdCwgRXhjZXB0aW9uVHlwZTo6
TnVsbFRhYmxlRW50cnkpOwogICAgICAgICB9KTsKICAgICB9CiAKQEAgLTcxOSw4ICs3NzQsOCBA
QCBib29sIEIzSVJHZW5lcmF0b3I6OmFkZENhbGxJbmRpcmVjdChjb25zCiAgICAgICAgIENoZWNr
VmFsdWUqIGNoZWNrID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxDaGVja1ZhbHVlPihtX3By
b2MsIENoZWNrLCBPcmlnaW4oKSwKICAgICAgICAgICAgIG1fY3VycmVudEJsb2NrLT5hcHBlbmRO
ZXc8VmFsdWU+KG1fcHJvYywgTm90RXF1YWwsIE9yaWdpbigpLCBjYWxsZWVTaWduYXR1cmUsIGV4
cGVjdGVkU2lnbmF0dXJlKSk7CiAKLSAgICAgICAgY2hlY2stPnNldEdlbmVyYXRvcihbXSAoQ0Nh
bGxIZWxwZXJzJiBqaXQsIGNvbnN0IEIzOjpTdGFja21hcEdlbmVyYXRpb25QYXJhbXMmKSB7Ci0g
ICAgICAgICAgICBqaXQuYnJlYWtwb2ludCgpOworICAgICAgICBjaGVjay0+c2V0R2VuZXJhdG9y
KFs9XSAoQ0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0IEIzOjpTdGFja21hcEdlbmVyYXRpb25QYXJh
bXMmKSB7CisgICAgICAgICAgICB0aGlzLT5lbWl0RXhjZXB0aW9uQ2hlY2soaml0LCBFeGNlcHRp
b25UeXBlOjpCYWRTaWduYXR1cmUpOwogICAgICAgICB9KTsKICAgICB9CiAKQEAgLTc4MSw3ICs4
MzYsNyBAQCB2b2lkIEIzSVJHZW5lcmF0b3I6OmR1bXAoY29uc3QgVmVjdG9yPENvCiAgICAgZGF0
YUxvZ0xuKCJcbiIpOwogfQogCi1zdGF0aWMgc3RkOjp1bmlxdWVfcHRyPENvbXBpbGF0aW9uPiBj
cmVhdGVKU1RvV2FzbVdyYXBwZXIoVk0mIHZtLCBXYXNtSW50ZXJuYWxGdW5jdGlvbiYgZnVuY3Rp
b24sIGNvbnN0IFNpZ25hdHVyZSogc2lnbmF0dXJlLCBNYWNyb0Fzc2VtYmxlckNvZGVQdHIgbWFp
bkZ1bmN0aW9uLCBjb25zdCBNZW1vcnlJbmZvcm1hdGlvbiYgbWVtb3J5KQorc3RhdGljIE1hY3Jv
QXNzZW1ibGVyQ29kZVJlZiBjcmVhdGVKU1RvV2FzbVdyYXBwZXIoVk0mIHZtLCBXYXNtSW50ZXJu
YWxGdW5jdGlvbiYgZnVuY3Rpb24sIGNvbnN0IFNpZ25hdHVyZSogc2lnbmF0dXJlLCBNYWNyb0Fz
c2VtYmxlckNvZGVQdHIgbWFpbkZ1bmN0aW9uLCBjb25zdCBNZW1vcnlJbmZvcm1hdGlvbiYgbWVt
b3J5KQogewogICAgIFByb2NlZHVyZSBwcm9jOwogICAgIEJhc2ljQmxvY2sqIGJsb2NrID0gcHJv
Yy5hZGRCbG9jaygpOwpAQCAtODAxLDYgKzg1Niw3IEBAIHN0YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8
Q29tcGlsYXRpb24+IGNyZWEKICAgICAgICAgYmxvY2stPmFwcGVuZE5ldzxWYWx1ZT4ocHJvYywg
QWJvdmUsIG9yaWdpbiwgZXhwZWN0ZWRBcmd1bWVudENvdW50LCBhcmd1bWVudENvdW50KSk7CiAK
ICAgICBhcmd1bWVudENvdW50Q2hlY2stPnNldEdlbmVyYXRvcihbXSAoQ0NhbGxIZWxwZXJzJiBq
aXQsIGNvbnN0IFN0YWNrbWFwR2VuZXJhdGlvblBhcmFtcyYpIHsKKyAgICAgICAgLy8gRklYTUU6
IGlzIHRoaXMgZXZlbiBwb3NzaWJsZT8KICAgICAgICAgaml0LmJyZWFrcG9pbnQoKTsKICAgICB9
KTsKIApAQCAtODY0LDcgKzkyMCw3IEBAIHN0YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8Q29tcGlsYXRp
b24+IGNyZWEKIAogICAgIGF1dG8ganNFbnRyeXBvaW50ID0gc3RkOjptYWtlX3VuaXF1ZTxDb21w
aWxhdGlvbj4odm0sIHByb2MpOwogICAgIGZ1bmN0aW9uLmpzVG9XYXNtRW50cnlwb2ludC5jYWxs
ZWVTYXZlUmVnaXN0ZXJzID0gcHJvYy5jYWxsZWVTYXZlUmVnaXN0ZXJzKCk7Ci0gICAgcmV0dXJu
IGpzRW50cnlwb2ludDsKKyAgICByZXR1cm4ganNFbnRyeXBvaW50LT5jb2RlUmVmKCk7CiB9CiAK
IHN0ZDo6dW5pcXVlX3B0cjxXYXNtSW50ZXJuYWxGdW5jdGlvbj4gcGFyc2VBbmRDb21waWxlKFZN
JiB2bSwgY29uc3QgdWludDhfdCogZnVuY3Rpb25TdGFydCwgc2l6ZV90IGZ1bmN0aW9uTGVuZ3Ro
LCBjb25zdCBTaWduYXR1cmUqIHNpZ25hdHVyZSwgVmVjdG9yPFVubGlua2VkV2FzbVRvV2FzbUNh
bGw+JiB1bmxpbmtlZFdhc21Ub1dhc21DYWxscywgY29uc3QgSW1tdXRhYmxlRnVuY3Rpb25JbmRl
eFNwYWNlJiBmdW5jdGlvbkluZGV4U3BhY2UsIGNvbnN0IE1vZHVsZUluZm9ybWF0aW9uJiBpbmZv
LCB1bnNpZ25lZCBvcHRMZXZlbCkKQEAgLTg4Niw5ICs5NDIsMTkgQEAgc3RkOjp1bmlxdWVfcHRy
PFdhc21JbnRlcm5hbEZ1bmN0aW9uPiBwYQogICAgIGlmICh2ZXJib3NlKQogICAgICAgICBkYXRh
TG9nKCJQb3N0IFNTQTogIiwgcHJvY2VkdXJlKTsKIAotICAgIHJlc3VsdC0+d2FzbUVudHJ5cG9p
bnQuY29tcGlsYXRpb24gPSBzdGQ6Om1ha2VfdW5pcXVlPENvbXBpbGF0aW9uPih2bSwgcHJvY2Vk
dXJlLCBvcHRMZXZlbCk7CisgICAgeworICAgICAgICBCMzo6cHJlcGFyZUZvckdlbmVyYXRpb24o
cHJvY2VkdXJlLCBvcHRMZXZlbCk7CisgICAgICAgIAorICAgICAgICBDQ2FsbEhlbHBlcnMgaml0
KCZ2bSk7CisgICAgICAgIEIzOjpnZW5lcmF0ZShwcm9jZWR1cmUsIGppdCk7CisgICAgICAgIGNv
bnRleHQuZW1pdEV4Y2VwdGlvbkhhbmRsZXIoaml0KTsKKworICAgICAgICBMaW5rQnVmZmVyIGxp
bmtCdWZmZXIodm0sIGppdCwgbnVsbHB0cik7CisgICAgICAgIHJlc3VsdC0+d2FzbUVudHJ5cG9p
bnQuY29kZSA9IEZJTkFMSVpFX0NPREUobGlua0J1ZmZlciwgKCJXYXNtIGNvbXBpbGF0aW9uIikp
OworICAgIH0KKwogICAgIHJlc3VsdC0+d2FzbUVudHJ5cG9pbnQuY2FsbGVlU2F2ZVJlZ2lzdGVy
cyA9IHByb2NlZHVyZS5jYWxsZWVTYXZlUmVnaXN0ZXJzKCk7Ci0gICAgcmVzdWx0LT5qc1RvV2Fz
bUVudHJ5cG9pbnQuY29tcGlsYXRpb24gPSBjcmVhdGVKU1RvV2FzbVdyYXBwZXIodm0sICpyZXN1
bHQsIHNpZ25hdHVyZSwgcmVzdWx0LT53YXNtRW50cnlwb2ludC5jb21waWxhdGlvbi0+Y29kZSgp
LCBpbmZvLm1lbW9yeSk7CisgICAgcmVzdWx0LT5qc1RvV2FzbUVudHJ5cG9pbnQuY29kZSA9IGNy
ZWF0ZUpTVG9XYXNtV3JhcHBlcih2bSwgKnJlc3VsdCwgc2lnbmF0dXJlLCByZXN1bHQtPndhc21F
bnRyeXBvaW50LmNvZGUuY29kZSgpLCBpbmZvLm1lbW9yeSk7CiAgICAgcmV0dXJuIHJlc3VsdDsK
IH0KIApAQCAtMTA0NCw4ICsxMTEwLDggQEAgYm9vbCBCM0lSR2VuZXJhdG9yOjphZGRPcDxPcFR5
cGU6OkkzMlRydQogICAgICAgICBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFZhbHVlPihtX3By
b2MsIEdyZWF0ZXJFcXVhbCwgT3JpZ2luKCksIGFyZywgbWluKSk7CiAgICAgb3V0T2ZCb3VuZHMg
PSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFZhbHVlPihtX3Byb2MsIEVxdWFsLCBPcmlnaW4o
KSwgb3V0T2ZCb3VuZHMsIHplcm9Gb3JUeXBlKEkzMikpOwogICAgIENoZWNrVmFsdWUqIHRyYXAg
PSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PENoZWNrVmFsdWU+KG1fcHJvYywgQ2hlY2ssIE9y
aWdpbigpLCBvdXRPZkJvdW5kcyk7Ci0gICAgdHJhcC0+c2V0R2VuZXJhdG9yKFtdIChDQ2FsbEhl
bHBlcnMmIGppdCwgY29uc3QgU3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zJikgewotICAgICAgICBq
aXQuYnJlYWtwb2ludCgpOworICAgIHRyYXAtPnNldEdlbmVyYXRvcihbPV0gKENDYWxsSGVscGVy
cyYgaml0LCBjb25zdCBTdGFja21hcEdlbmVyYXRpb25QYXJhbXMmKSB7CisgICAgICAgIHRoaXMt
PmVtaXRFeGNlcHRpb25DaGVjayhqaXQsIEV4Y2VwdGlvblR5cGU6Ok91dE9mQm91bmRzVHJ1bmMp
OwogICAgIH0pOwogICAgIFBhdGNocG9pbnRWYWx1ZSogcGF0Y2hwb2ludCA9IG1fY3VycmVudEJs
b2NrLT5hcHBlbmROZXc8UGF0Y2hwb2ludFZhbHVlPihtX3Byb2MsIEludDMyLCBPcmlnaW4oKSk7
CiAgICAgcGF0Y2hwb2ludC0+YXBwZW5kKGFyZywgVmFsdWVSZXA6OlNvbWVSZWdpc3Rlcik7CkBA
IC0xMDY3LDggKzExMzMsOCBAQCBib29sIEIzSVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6STMy
VHJ1CiAgICAgICAgIG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8VmFsdWU+KG1fcHJvYywgR3Jl
YXRlckVxdWFsLCBPcmlnaW4oKSwgYXJnLCBtaW4pKTsKICAgICBvdXRPZkJvdW5kcyA9IG1fY3Vy
cmVudEJsb2NrLT5hcHBlbmROZXc8VmFsdWU+KG1fcHJvYywgRXF1YWwsIE9yaWdpbigpLCBvdXRP
ZkJvdW5kcywgemVyb0ZvclR5cGUoSTMyKSk7CiAgICAgQ2hlY2tWYWx1ZSogdHJhcCA9IG1fY3Vy
cmVudEJsb2NrLT5hcHBlbmROZXc8Q2hlY2tWYWx1ZT4obV9wcm9jLCBDaGVjaywgT3JpZ2luKCks
IG91dE9mQm91bmRzKTsKLSAgICB0cmFwLT5zZXRHZW5lcmF0b3IoW10gKENDYWxsSGVscGVycyYg
aml0LCBjb25zdCBTdGFja21hcEdlbmVyYXRpb25QYXJhbXMmKSB7Ci0gICAgICAgIGppdC5icmVh
a3BvaW50KCk7CisgICAgdHJhcC0+c2V0R2VuZXJhdG9yKFs9XSAoQ0NhbGxIZWxwZXJzJiBqaXQs
IGNvbnN0IFN0YWNrbWFwR2VuZXJhdGlvblBhcmFtcyYpIHsKKyAgICAgICAgdGhpcy0+ZW1pdEV4
Y2VwdGlvbkNoZWNrKGppdCwgRXhjZXB0aW9uVHlwZTo6T3V0T2ZCb3VuZHNUcnVuYyk7CiAgICAg
fSk7CiAgICAgUGF0Y2hwb2ludFZhbHVlKiBwYXRjaHBvaW50ID0gbV9jdXJyZW50QmxvY2stPmFw
cGVuZE5ldzxQYXRjaHBvaW50VmFsdWU+KG1fcHJvYywgSW50MzIsIE9yaWdpbigpKTsKICAgICBw
YXRjaHBvaW50LT5hcHBlbmQoYXJnLCBWYWx1ZVJlcDo6U29tZVJlZ2lzdGVyKTsKQEAgLTEwOTEs
OCArMTE1Nyw4IEBAIGJvb2wgQjNJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpJMzJUcnUKICAg
ICAgICAgbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxWYWx1ZT4obV9wcm9jLCBHcmVhdGVyVGhh
biwgT3JpZ2luKCksIGFyZywgbWluKSk7CiAgICAgb3V0T2ZCb3VuZHMgPSBtX2N1cnJlbnRCbG9j
ay0+YXBwZW5kTmV3PFZhbHVlPihtX3Byb2MsIEVxdWFsLCBPcmlnaW4oKSwgb3V0T2ZCb3VuZHMs
IHplcm9Gb3JUeXBlKEkzMikpOwogICAgIENoZWNrVmFsdWUqIHRyYXAgPSBtX2N1cnJlbnRCbG9j
ay0+YXBwZW5kTmV3PENoZWNrVmFsdWU+KG1fcHJvYywgQ2hlY2ssIE9yaWdpbigpLCBvdXRPZkJv
dW5kcyk7Ci0gICAgdHJhcC0+c2V0R2VuZXJhdG9yKFtdIChDQ2FsbEhlbHBlcnMmIGppdCwgY29u
c3QgU3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zJikgewotICAgICAgICBqaXQuYnJlYWtwb2ludCgp
OworICAgIHRyYXAtPnNldEdlbmVyYXRvcihbPV0gKENDYWxsSGVscGVycyYgaml0LCBjb25zdCBT
dGFja21hcEdlbmVyYXRpb25QYXJhbXMmKSB7CisgICAgICAgIHRoaXMtPmVtaXRFeGNlcHRpb25D
aGVjayhqaXQsIEV4Y2VwdGlvblR5cGU6Ok91dE9mQm91bmRzVHJ1bmMpOwogICAgIH0pOwogICAg
IFBhdGNocG9pbnRWYWx1ZSogcGF0Y2hwb2ludCA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8
UGF0Y2hwb2ludFZhbHVlPihtX3Byb2MsIEludDMyLCBPcmlnaW4oKSk7CiAgICAgcGF0Y2hwb2lu
dC0+YXBwZW5kKGFyZywgVmFsdWVSZXA6OlNvbWVSZWdpc3Rlcik7CkBAIC0xMTE0LDggKzExODAs
OCBAQCBib29sIEIzSVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6STMyVHJ1CiAgICAgICAgIG1f
Y3VycmVudEJsb2NrLT5hcHBlbmROZXc8VmFsdWU+KG1fcHJvYywgR3JlYXRlclRoYW4sIE9yaWdp
bigpLCBhcmcsIG1pbikpOwogICAgIG91dE9mQm91bmRzID0gbV9jdXJyZW50QmxvY2stPmFwcGVu
ZE5ldzxWYWx1ZT4obV9wcm9jLCBFcXVhbCwgT3JpZ2luKCksIG91dE9mQm91bmRzLCB6ZXJvRm9y
VHlwZShJMzIpKTsKICAgICBDaGVja1ZhbHVlKiB0cmFwID0gbV9jdXJyZW50QmxvY2stPmFwcGVu
ZE5ldzxDaGVja1ZhbHVlPihtX3Byb2MsIENoZWNrLCBPcmlnaW4oKSwgb3V0T2ZCb3VuZHMpOwot
ICAgIHRyYXAtPnNldEdlbmVyYXRvcihbXSAoQ0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0IFN0YWNr
bWFwR2VuZXJhdGlvblBhcmFtcyYpIHsKLSAgICAgICAgaml0LmJyZWFrcG9pbnQoKTsKKyAgICB0
cmFwLT5zZXRHZW5lcmF0b3IoWz1dIChDQ2FsbEhlbHBlcnMmIGppdCwgY29uc3QgU3RhY2ttYXBH
ZW5lcmF0aW9uUGFyYW1zJikgeworICAgICAgICB0aGlzLT5lbWl0RXhjZXB0aW9uQ2hlY2soaml0
LCBFeGNlcHRpb25UeXBlOjpPdXRPZkJvdW5kc1RydW5jKTsKICAgICB9KTsKICAgICBQYXRjaHBv
aW50VmFsdWUqIHBhdGNocG9pbnQgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFBhdGNocG9p
bnRWYWx1ZT4obV9wcm9jLCBJbnQzMiwgT3JpZ2luKCkpOwogICAgIHBhdGNocG9pbnQtPmFwcGVu
ZChhcmcsIFZhbHVlUmVwOjpTb21lUmVnaXN0ZXIpOwpAQCAtMTEzNyw4ICsxMjAzLDggQEAgYm9v
bCBCM0lSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6Okk2NFRydQogICAgICAgICBtX2N1cnJlbnRC
bG9jay0+YXBwZW5kTmV3PFZhbHVlPihtX3Byb2MsIEdyZWF0ZXJFcXVhbCwgT3JpZ2luKCksIGFy
ZywgbWluKSk7CiAgICAgb3V0T2ZCb3VuZHMgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFZh
bHVlPihtX3Byb2MsIEVxdWFsLCBPcmlnaW4oKSwgb3V0T2ZCb3VuZHMsIHplcm9Gb3JUeXBlKEkz
MikpOwogICAgIENoZWNrVmFsdWUqIHRyYXAgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PENo
ZWNrVmFsdWU+KG1fcHJvYywgQ2hlY2ssIE9yaWdpbigpLCBvdXRPZkJvdW5kcyk7Ci0gICAgdHJh
cC0+c2V0R2VuZXJhdG9yKFtdIChDQ2FsbEhlbHBlcnMmIGppdCwgY29uc3QgU3RhY2ttYXBHZW5l
cmF0aW9uUGFyYW1zJikgewotICAgICAgICBqaXQuYnJlYWtwb2ludCgpOworICAgIHRyYXAtPnNl
dEdlbmVyYXRvcihbPV0gKENDYWxsSGVscGVycyYgaml0LCBjb25zdCBTdGFja21hcEdlbmVyYXRp
b25QYXJhbXMmKSB7CisgICAgICAgIHRoaXMtPmVtaXRFeGNlcHRpb25DaGVjayhqaXQsIEV4Y2Vw
dGlvblR5cGU6Ok91dE9mQm91bmRzVHJ1bmMpOwogICAgIH0pOwogICAgIFBhdGNocG9pbnRWYWx1
ZSogcGF0Y2hwb2ludCA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8UGF0Y2hwb2ludFZhbHVl
PihtX3Byb2MsIEludDY0LCBPcmlnaW4oKSk7CiAgICAgcGF0Y2hwb2ludC0+YXBwZW5kKGFyZywg
VmFsdWVSZXA6OlNvbWVSZWdpc3Rlcik7CkBAIC0xMTYwLDggKzEyMjYsOCBAQCBib29sIEIzSVJH
ZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6STY0VHJ1CiAgICAgICAgIG1fY3VycmVudEJsb2NrLT5h
cHBlbmROZXc8VmFsdWU+KG1fcHJvYywgR3JlYXRlclRoYW4sIE9yaWdpbigpLCBhcmcsIG1pbikp
OwogICAgIG91dE9mQm91bmRzID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxWYWx1ZT4obV9w
cm9jLCBFcXVhbCwgT3JpZ2luKCksIG91dE9mQm91bmRzLCB6ZXJvRm9yVHlwZShJMzIpKTsKICAg
ICBDaGVja1ZhbHVlKiB0cmFwID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxDaGVja1ZhbHVl
PihtX3Byb2MsIENoZWNrLCBPcmlnaW4oKSwgb3V0T2ZCb3VuZHMpOwotICAgIHRyYXAtPnNldEdl
bmVyYXRvcihbXSAoQ0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0IFN0YWNrbWFwR2VuZXJhdGlvblBh
cmFtcyYpIHsKLSAgICAgICAgaml0LmJyZWFrcG9pbnQoKTsKKyAgICB0cmFwLT5zZXRHZW5lcmF0
b3IoWz1dIChDQ2FsbEhlbHBlcnMmIGppdCwgY29uc3QgU3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1z
JikgeworICAgICAgICB0aGlzLT5lbWl0RXhjZXB0aW9uQ2hlY2soaml0LCBFeGNlcHRpb25UeXBl
OjpPdXRPZkJvdW5kc1RydW5jKTsKICAgICB9KTsKIAogICAgIFZhbHVlKiBjb25zdGFudDsKQEAg
LTEyMDIsOCArMTI2OCw4IEBAIGJvb2wgQjNJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpJNjRU
cnUKICAgICAgICAgbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxWYWx1ZT4obV9wcm9jLCBHcmVh
dGVyRXF1YWwsIE9yaWdpbigpLCBhcmcsIG1pbikpOwogICAgIG91dE9mQm91bmRzID0gbV9jdXJy
ZW50QmxvY2stPmFwcGVuZE5ldzxWYWx1ZT4obV9wcm9jLCBFcXVhbCwgT3JpZ2luKCksIG91dE9m
Qm91bmRzLCB6ZXJvRm9yVHlwZShJMzIpKTsKICAgICBDaGVja1ZhbHVlKiB0cmFwID0gbV9jdXJy
ZW50QmxvY2stPmFwcGVuZE5ldzxDaGVja1ZhbHVlPihtX3Byb2MsIENoZWNrLCBPcmlnaW4oKSwg
b3V0T2ZCb3VuZHMpOwotICAgIHRyYXAtPnNldEdlbmVyYXRvcihbXSAoQ0NhbGxIZWxwZXJzJiBq
aXQsIGNvbnN0IFN0YWNrbWFwR2VuZXJhdGlvblBhcmFtcyYpIHsKLSAgICAgICAgaml0LmJyZWFr
cG9pbnQoKTsKKyAgICB0cmFwLT5zZXRHZW5lcmF0b3IoWz1dIChDQ2FsbEhlbHBlcnMmIGppdCwg
Y29uc3QgU3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zJikgeworICAgICAgICB0aGlzLT5lbWl0RXhj
ZXB0aW9uQ2hlY2soaml0LCBFeGNlcHRpb25UeXBlOjpPdXRPZkJvdW5kc1RydW5jKTsKICAgICB9
KTsKICAgICBQYXRjaHBvaW50VmFsdWUqIHBhdGNocG9pbnQgPSBtX2N1cnJlbnRCbG9jay0+YXBw
ZW5kTmV3PFBhdGNocG9pbnRWYWx1ZT4obV9wcm9jLCBJbnQ2NCwgT3JpZ2luKCkpOwogICAgIHBh
dGNocG9pbnQtPmFwcGVuZChhcmcsIFZhbHVlUmVwOjpTb21lUmVnaXN0ZXIpOwpAQCAtMTIyNSw4
ICsxMjkxLDggQEAgYm9vbCBCM0lSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6Okk2NFRydQogICAg
ICAgICBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFZhbHVlPihtX3Byb2MsIEdyZWF0ZXJUaGFu
LCBPcmlnaW4oKSwgYXJnLCBtaW4pKTsKICAgICBvdXRPZkJvdW5kcyA9IG1fY3VycmVudEJsb2Nr
LT5hcHBlbmROZXc8VmFsdWU+KG1fcHJvYywgRXF1YWwsIE9yaWdpbigpLCBvdXRPZkJvdW5kcywg
emVyb0ZvclR5cGUoSTMyKSk7CiAgICAgQ2hlY2tWYWx1ZSogdHJhcCA9IG1fY3VycmVudEJsb2Nr
LT5hcHBlbmROZXc8Q2hlY2tWYWx1ZT4obV9wcm9jLCBDaGVjaywgT3JpZ2luKCksIG91dE9mQm91
bmRzKTsKLSAgICB0cmFwLT5zZXRHZW5lcmF0b3IoW10gKENDYWxsSGVscGVycyYgaml0LCBjb25z
dCBTdGFja21hcEdlbmVyYXRpb25QYXJhbXMmKSB7Ci0gICAgICAgIGppdC5icmVha3BvaW50KCk7
CisgICAgdHJhcC0+c2V0R2VuZXJhdG9yKFs9XSAoQ0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0IFN0
YWNrbWFwR2VuZXJhdGlvblBhcmFtcyYpIHsKKyAgICAgICAgdGhpcy0+ZW1pdEV4Y2VwdGlvbkNo
ZWNrKGppdCwgRXhjZXB0aW9uVHlwZTo6T3V0T2ZCb3VuZHNUcnVuYyk7CiAgICAgfSk7CiAKICAg
ICBWYWx1ZSogY29uc3RhbnQ7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNt
Rm9ybWF0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUZv
cm1hdC5oCShyZXZpc2lvbiAyMDk3ODUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9X
YXNtRm9ybWF0LmgJKHdvcmtpbmcgY29weSkKQEAgLTIwMiw3ICsyMDIsNyBAQCBzdHJ1Y3QgVW5s
aW5rZWRXYXNtVG9XYXNtQ2FsbCB7CiB9OwogCiBzdHJ1Y3QgRW50cnlwb2ludCB7Ci0gICAgc3Rk
Ojp1bmlxdWVfcHRyPEIzOjpDb21waWxhdGlvbj4gY29tcGlsYXRpb247CisgICAgTWFjcm9Bc3Nl
bWJsZXJDb2RlUmVmIGNvZGU7CiAgICAgUmVnaXN0ZXJBdE9mZnNldExpc3QgY2FsbGVlU2F2ZVJl
Z2lzdGVyczsKIH07CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21QbGFu
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtUGxhbi5j
cHAJKHJldmlzaW9uIDIwOTc4NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21Q
bGFuLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTMwLDcgKzEzMCw3IEBAIHZvaWQgUGxhbjo6cnVu
KCkKIAogICAgICAgICB1bmxpbmtlZFdhc21Ub1dhc21DYWxscy51bmNoZWNrZWRBcHBlbmQoVmVj
dG9yPFVubGlua2VkV2FzbVRvV2FzbUNhbGw+KCkpOwogICAgICAgICBtX3dhc21JbnRlcm5hbEZ1
bmN0aW9ucy51bmNoZWNrZWRBcHBlbmQocGFyc2VBbmRDb21waWxlKCptX3ZtLCBmdW5jdGlvblN0
YXJ0LCBmdW5jdGlvbkxlbmd0aCwgc2lnbmF0dXJlLCB1bmxpbmtlZFdhc21Ub1dhc21DYWxscy5h
dChmdW5jdGlvbkluZGV4KSwgbV9mdW5jdGlvbkluZGV4U3BhY2UsICptX21vZHVsZUluZm9ybWF0
aW9uKSk7Ci0gICAgICAgIG1fZnVuY3Rpb25JbmRleFNwYWNlLmJ1ZmZlci5nZXQoKVtmdW5jdGlv
bkluZGV4U3BhY2VdLmNvZGUgPSBtX3dhc21JbnRlcm5hbEZ1bmN0aW9uc1tmdW5jdGlvbkluZGV4
XS0+d2FzbUVudHJ5cG9pbnQuY29tcGlsYXRpb24tPmNvZGUoKS5leGVjdXRhYmxlQWRkcmVzcygp
OworICAgICAgICBtX2Z1bmN0aW9uSW5kZXhTcGFjZS5idWZmZXIuZ2V0KClbZnVuY3Rpb25JbmRl
eFNwYWNlXS5jb2RlID0gbV93YXNtSW50ZXJuYWxGdW5jdGlvbnNbZnVuY3Rpb25JbmRleF0tPndh
c21FbnRyeXBvaW50LmNvZGUuY29kZSgpLmV4ZWN1dGFibGVBZGRyZXNzKCk7CiAgICAgfQogCiAg
ICAgLy8gUGF0Y2ggdGhlIGNhbGwgc2l0ZXMgZm9yIGVhY2ggV2ViQXNzZW1ibHkgZnVuY3Rpb24u
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5Q2FsbGVl
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3Nl
bWJseUNhbGxlZS5oCShyZXZpc2lvbiAyMDk3ODQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
d2FzbS9qcy9KU1dlYkFzc2VtYmx5Q2FsbGVlLmgJKHdvcmtpbmcgY29weSkKQEAgLTU1LDcgKzU1
LDcgQEAgcHVibGljOgogICAgIHN0YXRpYyBjb25zdCBib29sIG5lZWRzRGVzdHJ1Y3Rpb24gPSB0
cnVlOwogICAgIHN0YXRpYyB2b2lkIGRlc3Ryb3koSlNDZWxsKik7CiAKLSAgICB2b2lkKiBlbnRy
eXBvaW50KCkgeyByZXR1cm4gbV9lbnRyeXBvaW50LmNvbXBpbGF0aW9uLT5jb2RlKCkuZXhlY3V0
YWJsZUFkZHJlc3MoKTsgfQorICAgIHZvaWQqIGVudHJ5cG9pbnQoKSB7IHJldHVybiBtX2VudHJ5
cG9pbnQuY29kZS5jb2RlKCkuZXhlY3V0YWJsZUFkZHJlc3MoKTsgfQogCiAgICAgUmVnaXN0ZXJB
dE9mZnNldExpc3QqIGNhbGxlZVNhdmVSZWdpc3RlcnMoKSB7IHJldHVybiAmbV9lbnRyeXBvaW50
LmNhbGxlZVNhdmVSZWdpc3RlcnM7IH0KIAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>297265</attachid>
            <date>2016-12-15 17:41:57 -0800</date>
            <delta_ts>2016-12-15 17:43:46 -0800</delta_ts>
            <desc>patch</desc>
            <filename>a-backup.diff</filename>
            <type>text/plain</type>
            <size>39480</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IEpTVGVzdHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEpTVGVzdHMvQ2hhbmdlTG9n
CShyZXZpc2lvbiAyMDk4OTMpCisrKyBKU1Rlc3RzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpA
QCAtMSwzICsxLDE1IEBACisyMDE2LTEyLTE1ICBTYWFtIEJhcmF0aSAgPHNiYXJhdGlAYXBwbGUu
Y29tPgorCisgICAgICAgIFdlYkFzc2VtYmx5OiBXYXNtQjNJUkdlbmVyYXRvciBzaG91bGQgdGhy
b3cgZXhjZXB0aW9ucyBpbnN0ZWFkIG9mIGNyYXNoCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjU4MzQKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JP
RFkgKE9PUFMhKS4KKworICAgICAgICAqIHdhc20vZnVuY3Rpb24tdGVzdHMvZXhjZXB0aW9ucy5q
czogQWRkZWQuCisgICAgICAgIChpbXBvcnQuQnVpbGRlci5mcm9tLnN0cmluZ19hcHBlYXJlZF9o
ZXJlLmltcG9ydC5hcy5hc3NlcnQuZnJvbS5zdHJpbmdfYXBwZWFyZWRfaGVyZS5tYWtlSW5zdGFu
Y2UpOgorICAgICAgICAqIHdhc20vZnVuY3Rpb24tdGVzdHMvdGFibGUtYmFzaWMuanM6CisgICAg
ICAgIChpLmkuNDIudGhyb3cubmV3LkVycm9yKToKKwogMjAxNi0xMi0xNSAgS2VpdGggTWlsbGVy
ICA8a2VpdGhfbWlsbGVyQGFwcGxlLmNvbT4KIAogICAgICAgICBXYXNtIHNob3VsZCBub3QgY3Jl
YXRlIGVtcHR5IHVubGlua2VkIGNhbGxzaXRlcwpJbmRleDogSlNUZXN0cy93YXNtL2Z1bmN0aW9u
LXRlc3RzL2V4Y2VwdGlvbnMuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSlNUZXN0cy93YXNtL2Z1bmN0aW9u
LXRlc3RzL2V4Y2VwdGlvbnMuanMJKG5vbmV4aXN0ZW50KQorKysgSlNUZXN0cy93YXNtL2Z1bmN0
aW9uLXRlc3RzL2V4Y2VwdGlvbnMuanMJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw2NyBAQAor
aW1wb3J0IEJ1aWxkZXIgZnJvbSAnLi4vQnVpbGRlci5qcycKK2ltcG9ydCAqIGFzIGFzc2VydCBm
cm9tICcuLi9hc3NlcnQuanMnCisKK2Z1bmN0aW9uIG1ha2VJbnN0YW5jZSgpIHsKKyAgICBjb25z
dCB0YWJsZURlc2NyaXB0aW9uID0ge2luaXRpYWw6IDEsIGVsZW1lbnQ6ICJhbnlmdW5jIn07Cisg
ICAgY29uc3QgYnVpbGRlciA9IG5ldyBCdWlsZGVyKCkKKyAgICAgICAgLlR5cGUoKQorICAgICAg
ICAgICAgLkZ1bmMoWyJpMzIiLCAiaTMyIl0sICJpMzIiKQorICAgICAgICAgICAgLkZ1bmMoWyJp
MzIiXSwgImkzMiIpCisgICAgICAgIC5FbmQoKQorICAgICAgICAuSW1wb3J0KCkKKyAgICAgICAg
ICAgIC5UYWJsZSgiaW1wIiwgInRhYmxlIiwgdGFibGVEZXNjcmlwdGlvbikKKyAgICAgICAgLkVu
ZCgpCisgICAgICAgIC5GdW5jdGlvbigpLkVuZCgpCisgICAgICAgIC5FeHBvcnQoKQorICAgICAg
ICAgICAgLkZ1bmN0aW9uKCJmb28iKQorICAgICAgICAgICAgLkZ1bmN0aW9uKCJiYXIiKQorICAg
ICAgICAuRW5kKCkKKyAgICAgICAgLkNvZGUoKQorICAgICAgICAgICAgLkZ1bmN0aW9uKCJmb28i
LCAwIC8qWydpMzInLCAnaTMyJ10gPT4gJ2kzMicqLykKKyAgICAgICAgICAgICAgICAuR2V0TG9j
YWwoMSkgLy8gcGFyYW1ldGVyIHRvIGNhbGwKKyAgICAgICAgICAgICAgICAuR2V0TG9jYWwoMCkg
Ly8gY2FsbCBpbmRleAorICAgICAgICAgICAgICAgIC5DYWxsSW5kaXJlY3QoMSwgMCkgLy8gY2Fs
bGluZyBmdW5jdGlvbiBvZiB0eXBlIFsnaTMyJ10gPT4gJ2kzMicKKyAgICAgICAgICAgICAgICAu
UmV0dXJuKCkKKyAgICAgICAgICAgIC5FbmQoKQorICAgICAgICAgICAgLkZ1bmN0aW9uKCJiYXIi
LCAxIC8qWydpMzInXSA9PiAnaTMyJyovKQorICAgICAgICAgICAgICAgIC5HZXRMb2NhbCgwKQor
ICAgICAgICAgICAgICAgIC5JMzJDb25zdCg0MikKKyAgICAgICAgICAgICAgICAuSTMyQWRkKCkK
KyAgICAgICAgICAgICAgICAuUmV0dXJuKCkKKyAgICAgICAgICAgIC5FbmQoKQorICAgICAgICAu
RW5kKCk7CisKKworICAgIGNvbnN0IGJpbiA9IGJ1aWxkZXIuV2ViQXNzZW1ibHkoKS5nZXQoKTsK
KyAgICBjb25zdCBtb2R1bGUgPSBuZXcgV2ViQXNzZW1ibHkuTW9kdWxlKGJpbik7CisgICAgY29u
c3QgdGFibGUgPSBuZXcgV2ViQXNzZW1ibHkuVGFibGUodGFibGVEZXNjcmlwdGlvbik7CisgICAg
cmV0dXJuIHtpbnN0YW5jZTogbmV3IFdlYkFzc2VtYmx5Lkluc3RhbmNlKG1vZHVsZSwge2ltcDog
e3RhYmxlfX0pLCB0YWJsZX07Cit9CisKK3sKKyAgICBjb25zdCB7aW5zdGFuY2UsIHRhYmxlfSA9
IG1ha2VJbnN0YW5jZSgpOworICAgIGNvbnN0IGZvbyA9IGluc3RhbmNlLmV4cG9ydHMuZm9vOwor
ICAgIGNvbnN0IGJhciA9IGluc3RhbmNlLmV4cG9ydHMuYmFyOworICAgIGFzc2VydC5lcSh0YWJs
ZS5nZXQoMCksIG51bGwpOworCisgICAgZm9yIChsZXQgaSA9IDA7IGkgPCAxMDAwOyBpKyspIHsK
KyAgICAgICAgYXNzZXJ0LnRocm93cygoKSA9PiBmb28oMCwgaSksIFdlYkFzc2VtYmx5LlJ1bnRp
bWVFcnJvciwgImNhbGxfaW5kaXJlY3QgdG8gYSBudWxsIHRhYmxlIGVudHJ5Iik7CisgICAgfQor
CisgICAgdGFibGUuc2V0KDAsIGZvbyk7CisgICAgYXNzZXJ0LmVxKHRhYmxlLmdldCgwKSwgZm9v
KTsKKworICAgIGZvciAobGV0IGkgPSAwOyBpIDwgMTAwMDsgaSsrKSB7CisgICAgICAgIGFzc2Vy
dC50aHJvd3MoKCkgPT4gZm9vKDEgKyBpLCBpKSwgV2ViQXNzZW1ibHkuUnVudGltZUVycm9yLCAi
T3V0IG9mIGJvdW5kcyBjYWxsX2luZGlyZWN0Iik7CisgICAgfQorCisgICAgZm9yIChsZXQgaSA9
IDA7IGkgPCAxMDAwOyBpKyspIHsKKyAgICAgICAgYXNzZXJ0LnRocm93cygoKSA9PiBmb28oMCwg
aSksIFdlYkFzc2VtYmx5LlJ1bnRpbWVFcnJvciwgImNhbGxfaW5kaXJlY3QgdG8gYSBzaWduYXR1
cmUgdGhhdCBkb2VzIG5vdCBtYXRjaCIpOworICAgIH0KKworICAgIHRhYmxlLnNldCgwLCBiYXIp
OworICAgIGFzc2VydC5lcSh0YWJsZS5nZXQoMCksIGJhcik7CisgICAgZm9yIChsZXQgaSA9IDA7
IGkgPCAyNTsgaSsrKSB7CisgICAgICAgIGFzc2VydC5lcShmb28oMCwgaSksIGkgKyA0Mik7Cisg
ICAgfQorfQpJbmRleDogSlNUZXN0cy93YXNtL2Z1bmN0aW9uLXRlc3RzL3RhYmxlLWJhc2ljLmpz
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIEpTVGVzdHMvd2FzbS9mdW5jdGlvbi10ZXN0cy90YWJsZS1iYXNpYy5q
cwkocmV2aXNpb24gMjA5ODg2KQorKysgSlNUZXN0cy93YXNtL2Z1bmN0aW9uLXRlc3RzL3RhYmxl
LWJhc2ljLmpzCSh3b3JraW5nIGNvcHkpCkBAIC01MywxNSArNTMsMTIgQEAgZnVuY3Rpb24gbWFr
ZUluc3RhbmNlKCkgewogLy8gRklYTUU6IG1ha2UgdGhpcyB3b3JrIGNyb3NzIG1vZHVsZS4gVGhl
IHJlYXNvbiBpdCBkb2Vzbid0CiAvLyBub3cgaXMgdGhhdCB3ZSBkb24ndCB1bmlxdWUgU2lnbmF0
dXJlKi4KIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjU1MTEK
LS8qCiB7CiAgICAgY29uc3Qge2luc3RhbmNlLCB0YWJsZX0gPSBtYWtlSW5zdGFuY2UoKTsKICAg
ICBjb25zdCBmb28gPSBpbnN0YW5jZS5leHBvcnRzLmZvbzsKLSAgICAvL3RhYmxlLnNldCgwLCBt
YWtlSW5zdGFuY2UoKS5pbnN0YW5jZS5leHBvcnRzLmJhcik7IC8vIENyb3NzIGluc3RhbmNlIGZ1
bmN0aW9uLgorICAgIHRhYmxlLnNldCgwLCBtYWtlSW5zdGFuY2UoKS5pbnN0YW5jZS5leHBvcnRz
LmJhcik7IC8vIENyb3NzIGluc3RhbmNlIGZ1bmN0aW9uLgogCiAgICAgZm9yIChsZXQgaSA9IDA7
IGkgPCAxMDAwOyBpKyspIHsKLSAgICAgICAgaWYgKGZvbygwLCBpKSAhPT0gaSArIDQyKQotICAg
ICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJCYWQgY2FsbCBpbmRpcmVjdCIpOworICAgICAgICBh
c3NlcnQudGhyb3dzKCgpID0+IGZvbygwLCBpKSwgV2ViQXNzZW1ibHkuUnVudGltZUVycm9yLCAi
Y2FsbF9pbmRpcmVjdCB0byBhIHNpZ25hdHVyZSB0aGF0IGRvZXMgbm90IG1hdGNoIik7CiAgICAg
fQogfQotKi8KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjA5ODg2KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwz
ICsxLDQ3IEBACisyMDE2LTEyLTE1ICBTYWFtIEJhcmF0aSAgPHNiYXJhdGlAYXBwbGUuY29tPgor
CisgICAgICAgIFdlYkFzc2VtYmx5OiBXYXNtQjNJUkdlbmVyYXRvciBzaG91bGQgdGhyb3cgZXhj
ZXB0aW9ucyBpbnN0ZWFkIG9mIGNyYXNoCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0xNjU4MzQKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICBUaGlzIHBhdGNoIGdlbmVyYWxpemVzIGhvdyB3ZSB0aHJvdyBleGNl
cHRpb25zIGluIHRoZSBXYXNtOjpCM0lSR2VuZXJhdG9yLgorICAgICAgICBUaGVyZSBhcmUgc3Rp
bGwgcGxhY2VzIHdoZXJlIHdlIG5lZWQgdG8gdGhyb3cgZXhjZXB0aW9ucyBhbmQgd2UgZG9uJ3Qs
IGJ1dAorICAgICAgICB0aGlzIHBhdGNoIHJlbW92ZXMgbW9zdCBvZiB0aG9zZSBwbGFjZXMgaW5z
aWRlIHRoZSBJUiBnZW5lcmF0b3IuIFRoZXJlIGFyZQorICAgICAgICBzdGlsbCBhIGZldyBwbGFj
ZXMgd2UgbmVlZCB0byB0aHJvdyBleGNlcHRpb25zIGluc2lkZSB0aGUgSVIgZ2VuZXJhdG9yLCBs
aWtlCisgICAgICAgIGRpdi9tb2QgYnkgMC4gVGhvc2Ugd2lsbCBiZSBkb25lIGluIGEgc2VwYXJh
dGUgcGF0Y2guIEFsc28sIHRoZXJlIGFyZQorICAgICAgICBzdGlsbCBzb21lIHN0dWJzIHdlIG5l
ZWQgdG8gdGhyb3cgZXhjZXB0aW9ucyBmcm9tOyB0aG9zZSB3aWxsIGFsc28gYmUKKyAgICAgICAg
ZG9uZSBpbiBhIHNlcGFyYXRlIHBhdGNoLgorCisgICAgICAgIFRoaXMgcGF0Y2ggYWxzbyByZWZh
Y3RvcnMgQjM6OkNvbXBpbGF0aW9uLiBCZWZvcmUsIEIzOjpDb21waWxhdGlvbihWTSwgUHJvY2Vk
dXJlKQorICAgICAgICBjb25zdHJ1Y3RvciB3b3VsZCBjb21waWxlIGEgQjMgZnVuY3Rpb24uIFRo
aXMgcGF0Y2ggbWFrZXMgQjM6OkNvbXBpbGF0aW9uIGEgc2ltcGxlIAorICAgICAgICB0dXBsZSB0
aGF0IGtlZXBzIHRoZSBuZWNlc3NhcnkgYml0cyBvZiBCMyBmdW5jdGlvbiBhbGl2ZSBpbiBvcmRl
ciB0byBiZSBydW5uYWJsZS4KKyAgICAgICAgVGhlcmUgaXMgYSBuZXcgZnVuY3Rpb24gdGhhdCBh
Y3R1YWxseSBkb2VzIHRoZSBjb21waWxhdGlvbiBmb3IgeW91LiBJdCBpczoKKyAgICAgICAgQ29t
cGlsYXRpb24gQjM6OmNvbXBpbGUoVk0mLCBQcm9jZWR1cmUmKQorICAgICAgICBUaGUgcmVhc29u
IGZvciB0aGlzIGNoYW5nZSBpcyB0aGF0IEknbSBub3cgdXNpbmcgQjM6OkNvbXBpbGF0aW9uKENv
ZGVSZWYsIE9wYXF1ZUJ5cHJvZHVjdHMpCisgICAgICAgIGNvbnN0cnVjdG9yIGluIFdhc20gY29k
ZS4gSXQgaXMgd2VpcmQgdG8gaGF2ZSBhIGNsYXNzIGJvdGggaGF2ZSBhCisgICAgICAgIGNvbnN0
cnVjdG9yIHRoYXQgaW5zdGFudGlhdGVzIHRoZSB0dXBsZSwgYW5kIGFub3RoZXIgdGhhdCBwZXJm
b3JtcyB0aGUKKyAgICAgICAgY29tcGlsYXRpb24gYW5kIHRoZW4gaW5zdGFudGlhdGVzIHRoZSB0
dXBsZS4gSXQncyBtb3JlIHN0cmFpZ2h0CisgICAgICAgIGZvcndhcmQgaWYgQ29tcGlsYXRpb24n
cyBqb2Igd2Fzbid0IHRvIGFjdHVhbGx5IGRvIHRoZSBjb21waWxhdGlvbgorICAgICAgICBidXQg
anVzdCB0byBob2xkIHRoZSBuZWNlc3NhcnkgYml0cyB0byBrZWVwIGEgY29tcGlsZWQgQjMgYWxp
dmUuCisKKyAgICAgICAgKiBDTWFrZUxpc3RzLnR4dDoKKyAgICAgICAgKiBKYXZhU2NyaXB0Q29y
ZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIGIzL0IzQ29tcGlsYXRpb24u
Y3BwOgorICAgICAgICAoSlNDOjpCMzo6Q29tcGlsYXRpb246OkNvbXBpbGF0aW9uKToKKyAgICAg
ICAgKiBiMy9CM0NvbXBpbGF0aW9uLmg6CisgICAgICAgICogYjMvQjNDb21waWxlLmNwcDogQWRk
ZWQuCisgICAgICAgIChKU0M6OkIzOjpjb21waWxlKToKKyAgICAgICAgKiBiMy9CM0NvbXBpbGUu
aDogQWRkZWQuCisgICAgICAgICogYjMvdGVzdGIzLmNwcDoKKyAgICAgICAgKEpTQzo6QjM6OmNv
bXBpbGUpOgorICAgICAgICAqIHdhc20vV2FzbUIzSVJHZW5lcmF0b3IuY3BwOgorICAgICAgICAo
SlNDOjpXYXNtOjpCM0lSR2VuZXJhdG9yOjpCM0lSR2VuZXJhdG9yKToKKyAgICAgICAgKEpTQzo6
V2FzbTo6QjNJUkdlbmVyYXRvcjo6ZW1pdEV4Y2VwdGlvbkNoZWNrKToKKyAgICAgICAgKEpTQzo6
V2FzbTo6QjNJUkdlbmVyYXRvcjo6ZW1pdEV4Y2VwdGlvbkhhbmRsZXIpOgorICAgICAgICAoSlND
OjpXYXNtOjpjcmVhdGVKU1RvV2FzbVdyYXBwZXIpOgorICAgICAgICAoSlNDOjpXYXNtOjpwYXJz
ZUFuZENvbXBpbGUpOgorCiAyMDE2LTEyLTE1ICBKRiBCYXN0aWVuICA8amZiYXN0aWVuQGFwcGxl
LmNvbT4KIAogICAgICAgICBXZWJBc3NlbWJseTogaW1wcm92ZSBjb21waWxhdGlvbiBlcnJvciBt
ZXNzYWdlcwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0NNYWtlTGlzdHMudHh0Cj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAkocmV2aXNpb24g
MjA5ODg2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0NNYWtlTGlzdHMudHh0CSh3b3JraW5n
IGNvcHkpCkBAIC0xMTYsNiArMTE2LDcgQEAgc2V0KEphdmFTY3JpcHRDb3JlX1NPVVJDRVMKICAg
ICBiMy9CM0NoZWNrVmFsdWUuY3BwCiAgICAgYjMvQjNDb21tb24uY3BwCiAgICAgYjMvQjNDb21t
dXRhdGl2aXR5LmNwcAorICAgIGIzL0IzQ29tcGlsZS5jcHAKICAgICBiMy9CM0NvbXBpbGF0aW9u
LmNwcAogICAgIGIzL0IzQ29uc3QzMlZhbHVlLmNwcAogICAgIGIzL0IzQ29uc3Q2NFZhbHVlLmNw
cApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9w
cm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFT
Y3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDIwOTg4NikKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5w
Ynhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC0xNDA3LDExICsxNDA3LDEzIEBACiAJCTc5MDVCQjY5
MUQxMjA1MEUwMDE5RkU1NyAvKiBJbmxpbmVBY2Nlc3MuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDc5MDVCQjY3MUQxMjA1MEUwMDE5RkU1NyAvKiBJbmxp
bmVBY2Nlc3MuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9
OwogCQk3OTE2MERCRDFDOEUzRUM4MDA4QzA4NUEgLyogUHJveHlSZXZva2UuY3BwIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzkxNjBEQkIxQzhFM0VDODAw
OEMwODVBIC8qIFByb3h5UmV2b2tlLmNwcCAqLzsgfTsKIAkJNzkxNjBEQkUxQzhFM0VDODAwOEMw
ODVBIC8qIFByb3h5UmV2b2tlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSA3OTE2MERCQzFDOEUzRUM4MDA4QzA4NUEgLyogUHJveHlSZXZva2UuaCAqLzsg
c2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQk3OTE5Qjc4MDFF
MDM1NTlDMDA1QkVFRDggLyogQjNDb21waWxlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA3OTE5Qjc3RjFFMDM1NTlDMDA1QkVFRDggLyogQjNDb21waWxl
LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNzky
MzNDMkIxRDM0NzE1NzAwQzVBODM0IC8qIEpJVE1hdGhJQy5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzkyMzNDMjkxRDM0NzE1NzAwQzVBODM0IC8qIEpJ
VE1hdGhJQy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07
CiAJCTc5MkNCMzQ5MUM0RUVENUMwMEQxM0FGMyAvKiBQQ1RvQ29kZU9yaWdpbk1hcC5jcHAgaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3OTJDQjM0NzFDNEVF
RDVDMDBEMTNBRjMgLyogUENUb0NvZGVPcmlnaW5NYXAuY3BwICovOyB9OwogCQk3OTJDQjM0QTFD
NEVFRDVDMDBEMTNBRjMgLyogUENUb0NvZGVPcmlnaW5NYXAuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDc5MkNCMzQ4MUM0RUVENUMwMEQxM0FGMyAvKiBQ
Q1RvQ29kZU9yaWdpbk1hcC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUs
ICk7IH07IH07CiAJCTc5NUIxOTk3MUQ3OEJFMzUwMDI2MkZBMCAvKiBNYXBCYXNlLmNwcCBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDc5NUIxOTk1MUQ3OEJF
MzUwMDI2MkZBMCAvKiBNYXBCYXNlLmNwcCAqLzsgfTsKIAkJNzk1QjE5OTgxRDc4QkUzNTAwMjYy
RkEwIC8qIE1hcEJhc2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDc5NUIxOTk2MUQ3OEJFMzUwMDI2MkZBMCAvKiBNYXBCYXNlLmggKi87IHNldHRpbmdz
ID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJNzk1RjA5OUQxRTAzNjAwNTAw
QkJFMzdGIC8qIEIzQ29tcGlsZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA3OTVGMDk5QzFFMDM2MDA1MDBCQkUzN0YgLyogQjNDb21waWxlLmNwcCAq
LzsgfTsKIAkJNzk2NDY1NkExQjk1MkZGMDAwMzA1OUVFIC8qIEdldFB1dEluZm8uaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDc5NjQ2NTY4MUI5NTJGRjAw
MDMwNTlFRSAvKiBHZXRQdXRJbmZvLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJp
dmF0ZSwgKTsgfTsgfTsKIAkJNzk2RkI0M0ExREZGOEMzRjAwMzlDOTVEIC8qIEpTV2ViQXNzZW1i
bHlIZWxwZXJzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSA3OTZGQjQzOTFERkY4QzNGMDAzOUM5NUQgLyogSlNXZWJBc3NlbWJseUhlbHBlcnMuaCAqLzsg
c2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk3OTdFMDdBOTFC
OEZDRkI5MDA4NDAwQkEgLyogSlNHbG9iYWxMZXhpY2FsRW52aXJvbm1lbnQuY3BwIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzk3RTA3QTcxQjhGQ0ZCOTAw
ODQwMEJBIC8qIEpTR2xvYmFsTGV4aWNhbEVudmlyb25tZW50LmNwcCAqLzsgfTsKQEAgLTM4Mzcs
MTEgKzM4MzksMTMgQEAKIAkJNzkwNUJCNjcxRDEyMDUwRTAwMTlGRTU3IC8qIElubGluZUFjY2Vz
cy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJbmxpbmVBY2Nlc3MuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzkxNjBEQkIxQzhFM0VDODAwOEMwODVBIC8qIFBy
b3h5UmV2b2tlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFByb3h5
UmV2b2tlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzkxNjBEQkMxQzhFM0VD
ODAwOEMwODVBIC8qIFByb3h5UmV2b2tlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IFByb3h5UmV2b2tlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTc5MTlCNzdG
MUUwMzU1OUMwMDVCRUVEOCAvKiBCM0NvbXBpbGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBuYW1lID0gQjNDb21waWxlLmg7IHBhdGggPSBiMy9CM0NvbXBpbGUuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJNzkyMzNDMjkxRDM0NzE1NzAwQzVBODM0IC8qIEpJVE1hdGhJQy5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKSVRNYXRoSUMuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzkyQ0IzNDcxQzRFRUQ1QzAwRDEzQUYzIC8qIFBDVG9Db2Rl
T3JpZ2luTWFwLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFBDVG9D
b2RlT3JpZ2luTWFwLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzkyQ0IzNDgx
QzRFRUQ1QzAwRDEzQUYzIC8qIFBDVG9Db2RlT3JpZ2luTWFwLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IFBDVG9Db2RlT3JpZ2luTWFwLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTc5NUIxOTk1MUQ3OEJFMzUwMDI2MkZBMCAvKiBNYXBCYXNlLmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IE1hcEJhc2UuY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQk3OTVCMTk5NjFENzhCRTM1MDAyNjJGQTAgLyogTWFwQmFzZS5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBNYXBCYXNlLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CisJCTc5NUYwOTlDMUUwMzYwMDUwMEJCRTM3RiAvKiBCM0NvbXBpbGUuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gQjNDb21waWxlLmNwcDsgcGF0
aCA9IGIzL0IzQ29tcGlsZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTc5NjQ2
NTY4MUI5NTJGRjAwMDMwNTlFRSAvKiBHZXRQdXRJbmZvLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IEdldFB1dEluZm8uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
Nzk2RkI0MzkxREZGOEMzRjAwMzlDOTVEIC8qIEpTV2ViQXNzZW1ibHlIZWxwZXJzLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEpTV2ViQXNzZW1ibHlIZWxwZXJzLmg7IHBhdGgg
PSBqcy9KU1dlYkFzc2VtYmx5SGVscGVycy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQk3OTdFMDdBNzFCOEZDRkI5MDA4NDAwQkEgLyogSlNHbG9iYWxMZXhpY2FsRW52aXJvbm1lbnQu
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNHbG9iYWxMZXhpY2Fs
RW52aXJvbm1lbnQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtNTE4Miw2ICs1
MTg2LDggQEAKIAkJCQkwRkVDODRDMDFCREFDREFDMDA4MEZGNzQgLyogQjNDb21tb24uaCAqLywK
IAkJCQkwRkVDODRDMTFCREFDREFDMDA4MEZGNzQgLyogQjNDb21tdXRhdGl2aXR5LmNwcCAqLywK
IAkJCQkwRkVDODRDMjFCREFDREFDMDA4MEZGNzQgLyogQjNDb21tdXRhdGl2aXR5LmggKi8sCisJ
CQkJNzkxOUI3N0YxRTAzNTU5QzAwNUJFRUQ4IC8qIEIzQ29tcGlsZS5oICovLAorCQkJCTc5NUYw
OTlDMUUwMzYwMDUwMEJCRTM3RiAvKiBCM0NvbXBpbGUuY3BwICovLAogCQkJCTBGMzM4REZGMUJG
MDI3NkMwMDEzQzg4RiAvKiBCM0NvbXBpbGF0aW9uLmNwcCAqLywKIAkJCQkwRjMzOEUwMDFCRjAy
NzZDMDAxM0M4OEYgLyogQjNDb21waWxhdGlvbi5oICovLAogCQkJCTBGODZBRTFGMUM1MzExQzUw
MDZCRThFQyAvKiBCM0NvbXB1dGVEaXZpc2lvbk1hZ2ljLmggKi8sCkBAIC04Mjk4LDYgKzgzMDQs
NyBAQAogCQkJCTUyQjMxMEZCMTk3NEFFNjEwMDgwODU3QyAvKiBGdW5jdGlvbkhhc0V4ZWN1dGVk
Q2FjaGUuaCBpbiBIZWFkZXJzICovLAogCQkJCUZFNEJGRjJDMUFENDc2RTcwMDA4OEY4NyAvKiBG
dW5jdGlvbk92ZXJyaWRlcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkMxOEM0MDUwRTE2RjVDRDAw
QjM0NDYwIC8qIEZ1bmN0aW9uUHJvdG90eXBlLmggaW4gSGVhZGVycyAqLywKKwkJCQk3OTE5Qjc4
MDFFMDM1NTlDMDA1QkVFRDggLyogQjNDb21waWxlLmggaW4gSGVhZGVycyAqLywKIAkJCQk2MkQy
RDM5MDFBREYxMDNGMDAwMjA2QzEgLyogRnVuY3Rpb25SYXJlRGF0YS5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJMkFBQ0U2M0QxOENBNUEwMzAwRUQwMTkxIC8qIEdDQWN0aXZpdHlDYWxsYmFjay5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJRkUzNDIyMTIxRDZCODFDMzAwMzJCRTg4IC8qIFRocm93U2NvcGUu
aCBpbiBIZWFkZXJzICovLApAQCAtOTgyMyw2ICs5ODMwLDcgQEAKIAkJCQkwRjNBMUJGOTFBOUVD
QjdEMDAwREUwMUEgLyogREZHUHV0U3RhY2tTaW5raW5nUGhhc2UuY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJQUQyRkNCRUExREI1OERBRDAwQjNFNzM2IC8qIEpTV2ViQXNzZW1ibHlUYWJsZS5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQkwRjJGQ0NGQjE4QTYwMDcwMDAxQTI3RjggLyogREZHU2FmZXBv
aW50LmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTc5NUYwOTlEMUUwMzYwMDUwMEJCRTM3RiAvKiBC
M0NvbXBpbGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJODZFQzlERDIxMzI4REY4MjAwMkIyQUQ3
IC8qIERGR1NwZWN1bGF0aXZlSklULmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTg2ODgwRjFGMTQz
MjhCQjkwMEIwOEQ0MiAvKiBERkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCTg2ODgwRjREMTQzNTNCMjEwMEIwOEQ0MiAvKiBERkdTcGVjdWxhdGl2ZUpJVDY0LmNw
cCBpbiBTb3VyY2VzICovLApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ29tcGls
YXRpb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0NvbXBp
bGF0aW9uLmNwcAkocmV2aXNpb24gMjA5ODg2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Iz
L0IzQ29tcGlsYXRpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOCwzNiArMjgsMjMgQEAKIAog
I2lmIEVOQUJMRShCM19KSVQpCiAKLSNpbmNsdWRlICJCM0dlbmVyYXRlLmgiCiAjaW5jbHVkZSAi
QjNPcGFxdWVCeXByb2R1Y3RzLmgiCi0jaW5jbHVkZSAiQjNQcm9jZWR1cmUuaCIKLSNpbmNsdWRl
ICJCM1RpbWluZ1Njb3BlLmgiCiAjaW5jbHVkZSAiQ0NhbGxIZWxwZXJzLmgiCi0jaW5jbHVkZSAi
SlNDSW5saW5lcy5oIgotI2luY2x1ZGUgIkxpbmtCdWZmZXIuaCIKIAogbmFtZXNwYWNlIEpTQyB7
IG5hbWVzcGFjZSBCMyB7CiAKLUNvbXBpbGF0aW9uOjpDb21waWxhdGlvbihWTSYgdm0sIFByb2Nl
ZHVyZSYgcHJvYywgdW5zaWduZWQgb3B0TGV2ZWwpCi17Ci0gICAgVGltaW5nU2NvcGUgdGltaW5n
U2NvcGUoIkNvbXBpbGF0aW9uIik7Ci0gICAgCi0gICAgcHJlcGFyZUZvckdlbmVyYXRpb24ocHJv
Yywgb3B0TGV2ZWwpOwotICAgIAotICAgIENDYWxsSGVscGVycyBqaXQoJnZtKTsKLSAgICBnZW5l
cmF0ZShwcm9jLCBqaXQpOwotICAgIExpbmtCdWZmZXIgbGlua0J1ZmZlcih2bSwgaml0LCBudWxs
cHRyKTsKLQotICAgIG1fY29kZVJlZiA9IEZJTkFMSVpFX0NPREUobGlua0J1ZmZlciwgKCJCMzo6
Q29tcGlsYXRpb24iKSk7Ci0gICAgbV9ieXByb2R1Y3RzID0gcHJvYy5yZWxlYXNlQnlwcm9kdWN0
cygpOwotfQotCiBDb21waWxhdGlvbjo6Q29tcGlsYXRpb24oTWFjcm9Bc3NlbWJsZXJDb2RlUmVm
IGNvZGVSZWYsIHN0ZDo6dW5pcXVlX3B0cjxPcGFxdWVCeXByb2R1Y3RzPiBieXByb2R1Y3RzKQog
ICAgIDogbV9jb2RlUmVmKGNvZGVSZWYpCiAgICAgLCBtX2J5cHJvZHVjdHMoV1RGTW92ZShieXBy
b2R1Y3RzKSkKIHsKIH0KIAorQ29tcGlsYXRpb246OkNvbXBpbGF0aW9uKENvbXBpbGF0aW9uJiYg
b3RoZXIpCisgICAgOiBtX2NvZGVSZWYoV1RGTW92ZShvdGhlci5tX2NvZGVSZWYpKQorICAgICwg
bV9ieXByb2R1Y3RzKFdURk1vdmUob3RoZXIubV9ieXByb2R1Y3RzKSkKK3sKK30KKwogQ29tcGls
YXRpb246On5Db21waWxhdGlvbigpCiB7CiB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
YjMvQjNDb21waWxhdGlvbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
My9CM0NvbXBpbGF0aW9uLmgJKHJldmlzaW9uIDIwOTg4NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy9CM0NvbXBpbGF0aW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTQwLDI1ICs0MCwxNiBA
QCBuYW1lc3BhY2UgQjMgewogY2xhc3MgT3BhcXVlQnlwcm9kdWN0czsKIGNsYXNzIFByb2NlZHVy
ZTsKIAotLy8gVGhpcyBpcyBhIGZvb2wtcHJvb2YgQVBJIGZvciBjb21waWxpbmcgYSBQcm9jZWR1
cmUgdG8gY29kZSBhbmQgdGhlbiBydW5uaW5nIHRoYXQgY29kZS4gWW91IGNvbXBpbGUKLS8vIGEg
UHJvY2VkdXJlIHVzaW5nIHRoaXMgQVBJIGJ5IGRvaW5nOgotLy8KLS8vIHN0ZDo6dW5pcXVlX3B0
cjxDb21waWxhdGlvbj4gY29tcGlsYXRpb24gPSBzdGQ6Om1ha2VfdW5pcXVlPENvbXBpbGF0aW9u
Pih2bSwgcHJvYyk7Ci0vLwotLy8gVGhlbiB5b3Uga2VlcCB0aGUgQ29tcGlsYXRpb24gb2JqZWN0
IGFsaXZlIGZvciBhcyBsb25nIGFzIHlvdSB3YW50IHRvIGJlIGFibGUgdG8gcnVuIHRoZSBjb2Rl
LiBJZgotLy8gdGhpcyBBUEkgZmVlbHMgdG9vIGhpZ2gtbGV2ZWwsIHlvdSBjYW4gdXNlIEIzOjpn
ZW5lcmF0ZSgpIGRpcmVjdGx5LgorLy8gVGhpcyBjbGFzcyBpcyBhIHdheSB0byBrZWVwIHRoZSBy
ZXN1bHQgb2YgYSBCMyBjb21waWxhdGlvbiBhbGl2ZQorLy8gYW5kIHJ1bm5hYmxlLgogCiBjbGFz
cyBDb21waWxhdGlvbiB7CiAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoQ29tcGlsYXRpb24pOwog
ICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogCiBwdWJsaWM6Ci0gICAgSlNfRVhQT1JUX1BS
SVZBVEUgQ29tcGlsYXRpb24oVk0mLCBQcm9jZWR1cmUmLCB1bnNpZ25lZCBvcHRMZXZlbCA9IDEp
OwotCi0gICAgLy8gVGhpcyBjb25zdHJ1Y3RvciBhbGxvd3MgeW91IHRvIG1hbnVhbGx5IGNyZWF0
ZSBhIENvbXBpbGF0aW9uLiBJdCdzIGN1cnJlbnRseSBvbmx5IHVzZWQgYnkgdGVzdAotICAgIC8v
IGNvZGUuIFByb2JhYmx5IGJlc3QgdG8ga2VlcCBpdCB0aGF0IHdheS4KICAgICBKU19FWFBPUlRf
UFJJVkFURSBDb21waWxhdGlvbihNYWNyb0Fzc2VtYmxlckNvZGVSZWYsIHN0ZDo6dW5pcXVlX3B0
cjxPcGFxdWVCeXByb2R1Y3RzPik7Ci0gICAgCisgICAgSlNfRVhQT1JUX1BSSVZBVEUgQ29tcGls
YXRpb24oQ29tcGlsYXRpb24mJik7CiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgfkNvbXBpbGF0aW9u
KCk7CiAKICAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHIgY29kZSgpIGNvbnN0IHsgcmV0dXJuIG1f
Y29kZVJlZi5jb2RlKCk7IH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0NvbXBp
bGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0NvbXBpbGUu
Y3BwCShub25leGlzdGVudCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0NvbXBpbGUu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNTcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQor
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUg
IkIzQ29tcGlsZS5oIgorCisjaWYgRU5BQkxFKEIzX0pJVCkKKworI2luY2x1ZGUgIkIzR2VuZXJh
dGUuaCIKKyNpbmNsdWRlICJCM09wYXF1ZUJ5cHJvZHVjdHMuaCIKKyNpbmNsdWRlICJCM1Byb2Nl
ZHVyZS5oIgorI2luY2x1ZGUgIkIzVGltaW5nU2NvcGUuaCIKKyNpbmNsdWRlICJDQ2FsbEhlbHBl
cnMuaCIKKyNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCisjaW5jbHVkZSAiTGlua0J1ZmZlci5oIgor
CituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKworQ29tcGlsYXRpb24gY29tcGlsZShW
TSYgdm0sIFByb2NlZHVyZSYgcHJvYywgdW5zaWduZWQgb3B0TGV2ZWwpCit7CisgICAgVGltaW5n
U2NvcGUgdGltaW5nU2NvcGUoIkNvbXBpbGF0aW9uIik7CisgICAgCisgICAgcHJlcGFyZUZvckdl
bmVyYXRpb24ocHJvYywgb3B0TGV2ZWwpOworICAgIAorICAgIENDYWxsSGVscGVycyBqaXQoJnZt
KTsKKyAgICBnZW5lcmF0ZShwcm9jLCBqaXQpOworICAgIExpbmtCdWZmZXIgbGlua0J1ZmZlcih2
bSwgaml0LCBudWxscHRyKTsKKworICAgIHJldHVybiBDb21waWxhdGlvbihGSU5BTElaRV9DT0RF
KGxpbmtCdWZmZXIsICgiQjM6OkNvbXBpbGF0aW9uIikpLCBwcm9jLnJlbGVhc2VCeXByb2R1Y3Rz
KCkpOworfQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKKworI2VuZGlmIC8vIEVOQUJMRShC
M19KSVQpCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0NvbXBpbGUuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDb21waWxlLmgJKG5vbmV4aXN0
ZW50KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ29tcGlsZS5oCSh3b3JraW5nIGNv
cHkpCkBAIC0wLDAgKzEsNTIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAq
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4gCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBFTkFCTEUoQjNfSklUKQorCisjaW5jbHVk
ZSAiQjNDb21waWxhdGlvbi5oIgorCituYW1lc3BhY2UgSlNDIHsKKworY2xhc3MgVk07CisKK25h
bWVzcGFjZSBCMyB7CisKK2NsYXNzIFByb2NlZHVyZTsKKworLy8gVGhpcyBpcyBhIGZvb2wtcHJv
b2YgQVBJIGZvciBjb21waWxpbmcgYSBQcm9jZWR1cmUgdG8gY29kZSBhbmQgdGhlbiBydW5uaW5n
IHRoYXQgY29kZS4gWW91IGNvbXBpbGUKKy8vIGEgUHJvY2VkdXJlIHVzaW5nIHRoaXMgQVBJIGJ5
IGRvaW5nOgorLy8KKy8vIENvbXBpbGF0aW9uIGNvbXBpbGF0aW9uID0gQjM6OmNvbXBpbGUodm0s
IHByb2MpOworLy8KKy8vIFRoZW4geW91IGtlZXAgdGhlIENvbXBpbGF0aW9uIG9iamVjdCBhbGl2
ZSBmb3IgYXMgbG9uZyBhcyB5b3Ugd2FudCB0byBiZSBhYmxlIHRvIHJ1biB0aGUgY29kZS4KKy8v
IElmIHRoaXMgQVBJIGZlZWxzIHRvbyBoaWdoLWxldmVsLCB5b3UgY2FuIHVzZSBCMzo6Z2VuZXJh
dGUoKSBkaXJlY3RseS4KKworSlNfRVhQT1JUX1BSSVZBVEUgQ29tcGlsYXRpb24gY29tcGlsZShW
TSYsIFByb2NlZHVyZSYsIHVuc2lnbmVkIG9wdExldmVsID0gMSk7CisKK30gfSAvLyBuYW1lc3Bh
Y2UgSlNDOjpCMworCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9iMy90ZXN0YjMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy90ZXN0YjMuY3BwCShyZXZpc2lvbiAyMDk4ODYpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYjMvdGVzdGIzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzMsNiArMzMsNyBAQAogI2lu
Y2x1ZGUgIkIzQmFzaWNCbG9ja0lubGluZXMuaCIKICNpbmNsdWRlICJCM0NDYWxsVmFsdWUuaCIK
ICNpbmNsdWRlICJCM0NvbXBpbGF0aW9uLmgiCisjaW5jbHVkZSAiQjNDb21waWxlLmgiCiAjaW5j
bHVkZSAiQjNDb21wdXRlRGl2aXNpb25NYWdpYy5oIgogI2luY2x1ZGUgIkIzQ29uc3QzMlZhbHVl
LmgiCiAjaW5jbHVkZSAiQjNDb25zdFB0clZhbHVlLmgiCkBAIC0xMTgsNyArMTE5LDcgQEAgVk0q
IHZtOwogCiBzdGQ6OnVuaXF1ZV9wdHI8Q29tcGlsYXRpb24+IGNvbXBpbGUoUHJvY2VkdXJlJiBw
cm9jZWR1cmUsIHVuc2lnbmVkIG9wdExldmVsID0gMSkKIHsKLSAgICByZXR1cm4gc3RkOjptYWtl
X3VuaXF1ZTxDb21waWxhdGlvbj4oKnZtLCBwcm9jZWR1cmUsIG9wdExldmVsKTsKKyAgICByZXR1
cm4gc3RkOjptYWtlX3VuaXF1ZTxDb21waWxhdGlvbj4oQjM6OmNvbXBpbGUoKnZtLCBwcm9jZWR1
cmUsIG9wdExldmVsKSk7CiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lLi4uIEFy
Z3VtZW50cz4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21CM0lSR2VuZXJh
dG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQjNJ
UkdlbmVyYXRvci5jcHAJKHJldmlzaW9uIDIwOTg4NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS93YXNtL1dhc21CM0lSR2VuZXJhdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzAsOCArMzAs
MTAgQEAKIAogI2luY2x1ZGUgIkIzQmFzaWNCbG9ja0lubGluZXMuaCIKICNpbmNsdWRlICJCM0ND
YWxsVmFsdWUuaCIKKyNpbmNsdWRlICJCM0NvbXBpbGUuaCIKICNpbmNsdWRlICJCM0NvbnN0UHRy
VmFsdWUuaCIKICNpbmNsdWRlICJCM0ZpeFNTQS5oIgorI2luY2x1ZGUgIkIzR2VuZXJhdGUuaCIK
ICNpbmNsdWRlICJCM1N0YWNrbWFwR2VuZXJhdGlvblBhcmFtcy5oIgogI2luY2x1ZGUgIkIzU3dp
dGNoVmFsdWUuaCIKICNpbmNsdWRlICJCM1ZhbGlkYXRlLmgiCkBAIC02Nyw2ICs2OSwxMyBAQCBu
YW1lc3BhY2UgewogY29uc3QgYm9vbCB2ZXJib3NlID0gZmFsc2U7CiB9CiAKKyNkZWZpbmUgRk9S
X0VBQ0hfRVhDRVBUSU9OKG1hY3JvKSBcCisgICAgbWFjcm8oT3V0T2ZCb3VuZHNNZW1vcnlBY2Nl
c3MsICAiT3V0IG9mIGJvdW5kcyBtZW1vcnkgYWNjZXNzIikgXAorICAgIG1hY3JvKE91dE9mQm91
bmRzQ2FsbEluZGlyZWN0LCAiT3V0IG9mIGJvdW5kcyBjYWxsX2luZGlyZWN0IikgXAorICAgIG1h
Y3JvKE51bGxUYWJsZUVudHJ5LCAgImNhbGxfaW5kaXJlY3QgdG8gYSBudWxsIHRhYmxlIGVudHJ5
IikgXAorICAgIG1hY3JvKEJhZFNpZ25hdHVyZSwgImNhbGxfaW5kaXJlY3QgdG8gYSBzaWduYXR1
cmUgdGhhdCBkb2VzIG5vdCBtYXRjaCIpIFwKKyAgICBtYWNybyhPdXRPZkJvdW5kc1RydW5jLCAi
VHJ1bmMgb3BlcmF0aW9uIG91dCBvZiBib3VuZHMiKSBcCisKIGNsYXNzIEIzSVJHZW5lcmF0b3Ig
ewogcHVibGljOgogICAgIHN0cnVjdCBDb250cm9sRGF0YSB7CkBAIC0xOTcsNiArMjA2LDE1IEBA
IHB1YmxpYzoKIAogICAgIHZvaWQgZHVtcChjb25zdCBWZWN0b3I8Q29udHJvbEVudHJ5PiYgY29u
dHJvbFN0YWNrLCBjb25zdCBFeHByZXNzaW9uTGlzdCYgZXhwcmVzc2lvblN0YWNrKTsKIAorICAg
IGVudW0gY2xhc3MgRXhjZXB0aW9uVHlwZSA6IHVpbnQzMl90IHsKKyNkZWZpbmUgTUFLRV9FTlVN
KGVudW1OYW1lLCBlcnJvcikgZW51bU5hbWUsCisgICAgRk9SX0VBQ0hfRVhDRVBUSU9OKE1BS0Vf
RU5VTSkKKyN1bmRlZiBNQUtFX0VOVU0KKyAgICB9OworCisgICAgdm9pZCBlbWl0RXhjZXB0aW9u
Q2hlY2soQ0NhbGxIZWxwZXJzJiwgRXhjZXB0aW9uVHlwZSk7CisgICAgdm9pZCBlbWl0RXhjZXB0
aW9uSGFuZGxlcihDQ2FsbEhlbHBlcnMmKTsKKwogcHJpdmF0ZToKICAgICBFeHByZXNzaW9uVHlw
ZSBlbWl0Q2hlY2tBbmRQcmVwYXJlUG9pbnRlcihFeHByZXNzaW9uVHlwZSBwb2ludGVyLCB1aW50
MzJfdCBvZmZzZXQsIHVpbnQzMl90IHNpemVPZk9wKTsKICAgICBFeHByZXNzaW9uVHlwZSBlbWl0
TG9hZE9wKExvYWRPcFR5cGUsIE9yaWdpbiwgRXhwcmVzc2lvblR5cGUgcG9pbnRlciwgdWludDMy
X3Qgb2Zmc2V0KTsKQEAgLTIxOCw2ICsyMzYsNyBAQCBwcml2YXRlOgogICAgIFZhbHVlKiBtX3pl
cm9WYWx1ZXNbbnVtVHlwZXNdOwogICAgIFZhbHVlKiBtX2luc3RhbmNlVmFsdWU7CiAKKyAgICBD
Q2FsbEhlbHBlcnM6OkxhYmVsIG1fZXhjZXB0aW9uSGFuZGxlcjsKIH07CiAKIEIzSVJHZW5lcmF0
b3I6OkIzSVJHZW5lcmF0b3IoVk0mIHZtLCBjb25zdCBNb2R1bGVJbmZvcm1hdGlvbiYgaW5mbywg
UHJvY2VkdXJlJiBwcm9jZWR1cmUsIFdhc21JbnRlcm5hbEZ1bmN0aW9uKiBjb21waWxhdGlvbiwg
VmVjdG9yPFVubGlua2VkV2FzbVRvV2FzbUNhbGw+JiB1bmxpbmtlZFdhc21Ub1dhc21DYWxscywg
Y29uc3QgSW1tdXRhYmxlRnVuY3Rpb25JbmRleFNwYWNlJiBmdW5jdGlvbkluZGV4U3BhY2UpCkBA
IC0yNTQsMzMgKzI3Myw3IEBAIEIzSVJHZW5lcmF0b3I6OkIzSVJHZW5lcmF0b3IoVk0mIHZtLCBj
b24KICAgICAgICAgbV9wcm9jLnNldFdhc21Cb3VuZHNDaGVja0dlbmVyYXRvcihbPV0gKENDYWxs
SGVscGVycyYgaml0LCBHUFJSZWcgcGlubmVkR1BSLCB1bnNpZ25lZCkgewogICAgICAgICAgICAg
QWxsb3dNYWNyb1NjcmF0Y2hSZWdpc3RlclVzYWdlIGFsbG93U2NyYXRjaChqaXQpOwogICAgICAg
ICAgICAgQVNTRVJUX1VOVVNFRChwaW5uZWRHUFIsIG1fbWVtb3J5U2l6ZUdQUiA9PSBwaW5uZWRH
UFIpOwotICAgICAgICAgICAgaml0LmNvcHlDYWxsZWVTYXZlc1RvVk1FbnRyeUZyYW1lQ2FsbGVl
U2F2ZXNCdWZmZXIoKTsKLQotICAgICAgICAgICAgaml0Lm1vdmUoR1BSSW5mbzo6Y2FsbEZyYW1l
UmVnaXN0ZXIsIEdQUkluZm86OmFyZ3VtZW50R1BSMCk7Ci0KLSAgICAgICAgICAgIENDYWxsSGVs
cGVyczo6Q2FsbCBjYWxsID0gaml0LmNhbGwoKTsKLSAgICAgICAgICAgIGppdC5qdW1wVG9FeGNl
cHRpb25IYW5kbGVyKCk7Ci0KLSAgICAgICAgICAgIGppdC5hZGRMaW5rVGFzayhbPV0gKExpbmtC
dWZmZXImIGxpbmtCdWZmZXIpIHsKLSAgICAgICAgICAgICAgICB2b2lkICgqdGhyb3dNZW1vcnlF
eGNlcHRpb24pKEV4ZWNTdGF0ZSopID0gW10gKEV4ZWNTdGF0ZSogZXhlYykgewotICAgICAgICAg
ICAgICAgICAgICBWTSogdm0gPSAmZXhlYy0+dm0oKTsKLSAgICAgICAgICAgICAgICAgICAgTmF0
aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7Ci0KLSAgICAgICAgICAgICAgICAg
ICAgewotICAgICAgICAgICAgICAgICAgICAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9U
SFJPV19TQ09QRSgqdm0pOwotICAgICAgICAgICAgICAgICAgICAgICAgSlNHbG9iYWxPYmplY3Qq
IGdsb2JhbE9iamVjdCA9IHZtLT50b3BKU1dlYkFzc2VtYmx5SW5zdGFuY2UtPmdsb2JhbE9iamVj
dCgpOwotCi0gICAgICAgICAgICAgICAgICAgICAgICBKU1dlYkFzc2VtYmx5UnVudGltZUVycm9y
KiBlcnJvciA9IEpTV2ViQXNzZW1ibHlSdW50aW1lRXJyb3I6OmNyZWF0ZSgKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBleGVjLCBnbG9iYWxPYmplY3QtPldlYkFzc2VtYmx5UnVudGltZUVy
cm9yU3RydWN0dXJlKCksICJPdXQgb2YgYm91bmRzIG1lbW9yeSBhY2Nlc3MiKTsKLSAgICAgICAg
ICAgICAgICAgICAgICAgIHRocm93RXhjZXB0aW9uKGV4ZWMsIHRocm93U2NvcGUsIGVycm9yKTsK
LSAgICAgICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgICAgIGdlbmVyaWNVbndp
bmQodm0sIGV4ZWMpOwotICAgICAgICAgICAgICAgICAgICBBU1NFUlQoISF2bS0+Y2FsbEZyYW1l
Rm9yQ2F0Y2gpOwotICAgICAgICAgICAgICAgIH07Ci0KLSAgICAgICAgICAgICAgICBsaW5rQnVm
ZmVyLmxpbmsoY2FsbCwgdGhyb3dNZW1vcnlFeGNlcHRpb24pOwotICAgICAgICAgICAgfSk7Cisg
ICAgICAgICAgICB0aGlzLT5lbWl0RXhjZXB0aW9uQ2hlY2soaml0LCBFeGNlcHRpb25UeXBlOjpP
dXRPZkJvdW5kc01lbW9yeUFjY2Vzcyk7CiAgICAgICAgIH0pOwogCiAgICAgICAgIEIzOjpQYXRj
aHBvaW50VmFsdWUqIGZvbyA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8QjM6OlBhdGNocG9p
bnRWYWx1ZT4obV9wcm9jLCBCMzo6Vm9pZCwgT3JpZ2luKCkpOwpAQCAtMjk2LDYgKzI4OSw2MyBA
QCBCM0lSR2VuZXJhdG9yOjpCM0lSR2VuZXJhdG9yKFZNJiB2bSwgY29uCiAgICAgICAgIG1fY3Vy
cmVudEJsb2NrLT5hcHBlbmROZXc8Q29uc3RQdHJWYWx1ZT4obV9wcm9jLCBPcmlnaW4oKSwgJm1f
dm0udG9wSlNXZWJBc3NlbWJseUluc3RhbmNlKSk7CiB9CiAKK3ZvaWQgQjNJUkdlbmVyYXRvcjo6
ZW1pdEV4Y2VwdGlvbkNoZWNrKENDYWxsSGVscGVycyYgaml0LCBFeGNlcHRpb25UeXBlIHR5cGUp
Cit7CisgICAgaml0Lm1vdmUoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoc3RhdGljX2Nhc3Q8
dWludDMyX3Q+KHR5cGUpKSwgR1BSSW5mbzo6YXJndW1lbnRHUFIxKTsKKyAgICBhdXRvIGp1bXAg
PSBqaXQuanVtcCgpOworICAgIGppdC5hZGRMaW5rVGFzayhbPV0gKExpbmtCdWZmZXImIGxpbmtC
dWZmZXIpIHsKKyAgICAgICAgQVNTRVJUKHRoaXMtPm1fZXhjZXB0aW9uSGFuZGxlci5pc1NldCgp
KTsKKyAgICAgICAgbGlua0J1ZmZlci5saW5rKGp1bXAsIGxpbmtCdWZmZXIubG9jYXRpb25PZih0
aGlzLT5tX2V4Y2VwdGlvbkhhbmRsZXIpKTsKKyAgICB9KTsKK30KKwordm9pZCBCM0lSR2VuZXJh
dG9yOjplbWl0RXhjZXB0aW9uSGFuZGxlcihDQ2FsbEhlbHBlcnMmIGppdCkKK3sKKyAgICBtX2V4
Y2VwdGlvbkhhbmRsZXIgPSBqaXQubGFiZWwoKTsKKworICAgIHsKKyAgICAgICAgUmVnaXN0ZXJT
ZXQgdXNlZFJlZ2lzdGVycyA9IFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMo
KTsKKyAgICAgICAgLy8gVGhlIHRoaW5nIHRoYXQganVtcHMgaGVyZSB3aWxsIG1vdmUgRXhjZXB0
aW9uVHlwZSBpbnRvIHRoZSBhcmd1bWVudEdQUjEgYW5kIGp1bXAgaGVyZS4KKyAgICAgICAgdXNl
ZFJlZ2lzdGVycy5zZXQoR1BSSW5mbzo6YXJndW1lbnRHUFIxKTsKKyAgICAgICAgaml0LmNvcHlD
YWxsZWVTYXZlc1RvVk1FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNCdWZmZXIodXNlZFJlZ2lzdGVycyk7
CisgICAgfQorCisgICAgaml0Lm1vdmUoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIEdQUklu
Zm86OmFyZ3VtZW50R1BSMCk7CisgICAgQ0NhbGxIZWxwZXJzOjpDYWxsIGNhbGwgPSBqaXQuY2Fs
bCgpOworICAgIGppdC5qdW1wVG9FeGNlcHRpb25IYW5kbGVyKCk7CisKKyAgICBqaXQuYWRkTGlu
a1Rhc2soWz1dIChMaW5rQnVmZmVyJiBsaW5rQnVmZmVyKSB7CisgICAgICAgIHZvaWQgKCp0aHJv
d01lbW9yeUV4Y2VwdGlvbikoRXhlY1N0YXRlKiwgRXhjZXB0aW9uVHlwZSkgPSBbXSAoRXhlY1N0
YXRlKiBleGVjLCBFeGNlcHRpb25UeXBlIHR5cGUpIHsKKyAgICAgICAgICAgIFZNKiB2bSA9ICZl
eGVjLT52bSgpOworICAgICAgICAgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwg
ZXhlYyk7CisKKyAgICAgICAgICAgIGNvbnN0IGNoYXIqIG1lc3NhZ2U7CisgICAgICAgICAgICBz
d2l0Y2ggKHR5cGUpIHsKKyNkZWZpbmUgU1dJVENIX0NBU0UoZW51bU5hbWUsIGVycm9yKSBcCisg
ICAgICAgICAgICBjYXNlIEV4Y2VwdGlvblR5cGU6OmVudW1OYW1lOiBcCisgICAgICAgICAgICAg
ICAgbWVzc2FnZSA9IGVycm9yOyBcCisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAg
ICBGT1JfRUFDSF9FWENFUFRJT04oU1dJVENIX0NBU0UpCisjdW5kZWYgU1dJVENIX0NBU0UKKyAg
ICAgICAgICAgIH0KKworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGF1dG8gdGhyb3dT
Y29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUoKnZtKTsKKyAgICAgICAgICAgICAgICBKU0dsb2Jh
bE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gdm0tPnRvcEpTV2ViQXNzZW1ibHlJbnN0YW5jZS0+Z2xv
YmFsT2JqZWN0KCk7CisKKyAgICAgICAgICAgICAgICBKU1dlYkFzc2VtYmx5UnVudGltZUVycm9y
KiBlcnJvciA9IEpTV2ViQXNzZW1ibHlSdW50aW1lRXJyb3I6OmNyZWF0ZSgKKyAgICAgICAgICAg
ICAgICAgICAgZXhlYywgZ2xvYmFsT2JqZWN0LT5XZWJBc3NlbWJseVJ1bnRpbWVFcnJvclN0cnVj
dHVyZSgpLCBtZXNzYWdlKTsKKyAgICAgICAgICAgICAgICB0aHJvd0V4Y2VwdGlvbihleGVjLCB0
aHJvd1Njb3BlLCBlcnJvcik7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGdlbmVyaWNV
bndpbmQodm0sIGV4ZWMpOworICAgICAgICAgICAgQVNTRVJUKCEhdm0tPmNhbGxGcmFtZUZvckNh
dGNoKTsKKyAgICAgICAgfTsKKworICAgICAgICBsaW5rQnVmZmVyLmxpbmsoY2FsbCwgdGhyb3dN
ZW1vcnlFeGNlcHRpb24pOworICAgIH0pOworfQorCiBWYWx1ZSogQjNJUkdlbmVyYXRvcjo6emVy
b0ZvclR5cGUoVHlwZSB0eXBlKQogewogICAgIEFTU0VSVCh0eXBlICE9IFZvaWQpOwpAQCAtNzQx
LDggKzc5MSw4IEBAIGF1dG8gQjNJUkdlbmVyYXRvcjo6YWRkQ2FsbEluZGlyZWN0KGNvbnMKICAg
ICAgICAgQ2hlY2tWYWx1ZSogY2hlY2sgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PENoZWNr
VmFsdWU+KG1fcHJvYywgQ2hlY2ssIE9yaWdpbigpLAogICAgICAgICAgICAgbV9jdXJyZW50Qmxv
Y2stPmFwcGVuZE5ldzxWYWx1ZT4obV9wcm9jLCBBYm92ZUVxdWFsLCBPcmlnaW4oKSwgY2FsbGVl
SW5kZXgsIGNhbGxhYmxlRnVuY3Rpb25CdWZmZXJTaXplKSk7CiAKLSAgICAgICAgY2hlY2stPnNl
dEdlbmVyYXRvcihbXSAoQ0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0IEIzOjpTdGFja21hcEdlbmVy
YXRpb25QYXJhbXMmKSB7Ci0gICAgICAgICAgICBqaXQuYnJlYWtwb2ludCgpOworICAgICAgICBj
aGVjay0+c2V0R2VuZXJhdG9yKFs9XSAoQ0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0IEIzOjpTdGFj
a21hcEdlbmVyYXRpb25QYXJhbXMmKSB7CisgICAgICAgICAgICB0aGlzLT5lbWl0RXhjZXB0aW9u
Q2hlY2soaml0LCBFeGNlcHRpb25UeXBlOjpPdXRPZkJvdW5kc0NhbGxJbmRpcmVjdCk7CiAgICAg
ICAgIH0pOwogICAgIH0KIApAQCAtNzYwLDggKzgxMCw4IEBAIGF1dG8gQjNJUkdlbmVyYXRvcjo6
YWRkQ2FsbEluZGlyZWN0KGNvbnMKICAgICAgICAgICAgICAgICBjYWxsZWVTaWduYXR1cmUsIAog
ICAgICAgICAgICAgICAgIG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8Q29uc3RQdHJWYWx1ZT4o
bV9wcm9jLCBPcmlnaW4oKSwgMCkpKTsKIAotICAgICAgICBjaGVjay0+c2V0R2VuZXJhdG9yKFtd
IChDQ2FsbEhlbHBlcnMmIGppdCwgY29uc3QgQjM6OlN0YWNrbWFwR2VuZXJhdGlvblBhcmFtcyYp
IHsKLSAgICAgICAgICAgIGppdC5icmVha3BvaW50KCk7CisgICAgICAgIGNoZWNrLT5zZXRHZW5l
cmF0b3IoWz1dIChDQ2FsbEhlbHBlcnMmIGppdCwgY29uc3QgQjM6OlN0YWNrbWFwR2VuZXJhdGlv
blBhcmFtcyYpIHsKKyAgICAgICAgICAgIHRoaXMtPmVtaXRFeGNlcHRpb25DaGVjayhqaXQsIEV4
Y2VwdGlvblR5cGU6Ok51bGxUYWJsZUVudHJ5KTsKICAgICAgICAgfSk7CiAgICAgfQogCkBAIC03
NzEsOCArODIxLDggQEAgYXV0byBCM0lSR2VuZXJhdG9yOjphZGRDYWxsSW5kaXJlY3QoY29ucwog
ICAgICAgICBDaGVja1ZhbHVlKiBjaGVjayA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8Q2hl
Y2tWYWx1ZT4obV9wcm9jLCBDaGVjaywgT3JpZ2luKCksCiAgICAgICAgICAgICBtX2N1cnJlbnRC
bG9jay0+YXBwZW5kTmV3PFZhbHVlPihtX3Byb2MsIE5vdEVxdWFsLCBPcmlnaW4oKSwgY2FsbGVl
U2lnbmF0dXJlLCBleHBlY3RlZFNpZ25hdHVyZSkpOwogCi0gICAgICAgIGNoZWNrLT5zZXRHZW5l
cmF0b3IoW10gKENDYWxsSGVscGVycyYgaml0LCBjb25zdCBCMzo6U3RhY2ttYXBHZW5lcmF0aW9u
UGFyYW1zJikgewotICAgICAgICAgICAgaml0LmJyZWFrcG9pbnQoKTsKKyAgICAgICAgY2hlY2st
PnNldEdlbmVyYXRvcihbPV0gKENDYWxsSGVscGVycyYgaml0LCBjb25zdCBCMzo6U3RhY2ttYXBH
ZW5lcmF0aW9uUGFyYW1zJikgeworICAgICAgICAgICAgdGhpcy0+ZW1pdEV4Y2VwdGlvbkNoZWNr
KGppdCwgRXhjZXB0aW9uVHlwZTo6QmFkU2lnbmF0dXJlKTsKICAgICAgICAgfSk7CiAgICAgfQog
CkBAIC04MzMsNyArODgzLDcgQEAgdm9pZCBCM0lSR2VuZXJhdG9yOjpkdW1wKGNvbnN0IFZlY3Rv
cjxDbwogICAgIGRhdGFMb2dMbigiXG4iKTsKIH0KIAotc3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxD
b21waWxhdGlvbj4gY3JlYXRlSlNUb1dhc21XcmFwcGVyKFZNJiB2bSwgV2FzbUludGVybmFsRnVu
Y3Rpb24mIGZ1bmN0aW9uLCBjb25zdCBTaWduYXR1cmUqIHNpZ25hdHVyZSwgTWFjcm9Bc3NlbWJs
ZXJDb2RlUHRyIG1haW5GdW5jdGlvbiwgY29uc3QgTWVtb3J5SW5mb3JtYXRpb24mIG1lbW9yeSkK
K3N0YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8QjM6OkNvbXBpbGF0aW9uPiBjcmVhdGVKU1RvV2FzbVdy
YXBwZXIoVk0mIHZtLCBXYXNtSW50ZXJuYWxGdW5jdGlvbiYgZnVuY3Rpb24sIGNvbnN0IFNpZ25h
dHVyZSogc2lnbmF0dXJlLCBNYWNyb0Fzc2VtYmxlckNvZGVQdHIgbWFpbkZ1bmN0aW9uLCBjb25z
dCBNZW1vcnlJbmZvcm1hdGlvbiYgbWVtb3J5KQogewogICAgIFByb2NlZHVyZSBwcm9jOwogICAg
IEJhc2ljQmxvY2sqIGJsb2NrID0gcHJvYy5hZGRCbG9jaygpOwpAQCAtODQyLDE5ICs4OTIsMjMg
QEAgc3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxDb21waWxhdGlvbj4gY3JlYQogCiAgICAganNjQ2Fs
bGluZ0NvbnZlbnRpb24oKS5zZXR1cEZyYW1lSW5Qcm9sb2d1ZSgmZnVuY3Rpb24uanNUb1dhc21D
YWxsZWVNb3ZlTG9jYXRpb24sIHByb2MsIG9yaWdpbiwgYmxvY2spOwogCi0gICAgVmFsdWUqIGZy
YW1lUG9pbnRlciA9IGJsb2NrLT5hcHBlbmROZXc8QjM6OlZhbHVlPihwcm9jLCBCMzo6RnJhbWVQ
b2ludGVyLCBvcmlnaW4pOwotICAgIFZhbHVlKiBvZmZTZXRPZkFyZ3VtZW50Q291bnQgPSBibG9j
ay0+YXBwZW5kTmV3PENvbnN0NjRWYWx1ZT4ocHJvYywgb3JpZ2luLCBDYWxsRnJhbWVTbG90Ojph
cmd1bWVudENvdW50ICogc2l6ZW9mKFJlZ2lzdGVyKSk7Ci0gICAgVmFsdWUqIGFyZ3VtZW50Q291
bnQgPSBibG9jay0+YXBwZW5kTmV3PE1lbW9yeVZhbHVlPihwcm9jLCBMb2FkLCBJbnQzMiwgb3Jp
Z2luLAotICAgICAgICBibG9jay0+YXBwZW5kTmV3PFZhbHVlPihwcm9jLCBBZGQsIG9yaWdpbiwg
ZnJhbWVQb2ludGVyLCBvZmZTZXRPZkFyZ3VtZW50Q291bnQpKTsKKyAgICBpZiAoIUFTU0VSVF9E
SVNBQkxFRCkgeworICAgICAgICAvLyBUaGlzIHNob3VsZCBiZSBndWFyYW50ZWVkIGJ5IG91ciBK
UyB3cmFwcGVyIHRoYXQgaGFuZGxlcyBjYWxscyB0byB1cy4KKyAgICAgICAgLy8gSnVzdCBwcmV2
ZW50IGFnYWluc3QgY3Jhenkgd2hlbiBBU1NFUlQgaXMgZW5hYmxlZC4KKyAgICAgICAgVmFsdWUq
IGZyYW1lUG9pbnRlciA9IGJsb2NrLT5hcHBlbmROZXc8QjM6OlZhbHVlPihwcm9jLCBCMzo6RnJh
bWVQb2ludGVyLCBvcmlnaW4pOworICAgICAgICBWYWx1ZSogb2ZmU2V0T2ZBcmd1bWVudENvdW50
ID0gYmxvY2stPmFwcGVuZE5ldzxDb25zdDY0VmFsdWU+KHByb2MsIG9yaWdpbiwgQ2FsbEZyYW1l
U2xvdDo6YXJndW1lbnRDb3VudCAqIHNpemVvZihSZWdpc3RlcikpOworICAgICAgICBWYWx1ZSog
YXJndW1lbnRDb3VudCA9IGJsb2NrLT5hcHBlbmROZXc8TWVtb3J5VmFsdWU+KHByb2MsIExvYWQs
IEludDMyLCBvcmlnaW4sCisgICAgICAgICAgICBibG9jay0+YXBwZW5kTmV3PFZhbHVlPihwcm9j
LCBBZGQsIG9yaWdpbiwgZnJhbWVQb2ludGVyLCBvZmZTZXRPZkFyZ3VtZW50Q291bnQpKTsKIAot
ICAgIFZhbHVlKiBleHBlY3RlZEFyZ3VtZW50Q291bnQgPSBibG9jay0+YXBwZW5kTmV3PENvbnN0
MzJWYWx1ZT4ocHJvYywgb3JpZ2luLCBzaWduYXR1cmUtPmFyZ3VtZW50cy5zaXplKCkpOworICAg
ICAgICBWYWx1ZSogZXhwZWN0ZWRBcmd1bWVudENvdW50ID0gYmxvY2stPmFwcGVuZE5ldzxDb25z
dDMyVmFsdWU+KHByb2MsIG9yaWdpbiwgc2lnbmF0dXJlLT5hcmd1bWVudHMuc2l6ZSgpKTsKIAot
ICAgIENoZWNrVmFsdWUqIGFyZ3VtZW50Q291bnRDaGVjayA9IGJsb2NrLT5hcHBlbmROZXc8Q2hl
Y2tWYWx1ZT4ocHJvYywgQ2hlY2ssIG9yaWdpbiwKLSAgICAgICAgYmxvY2stPmFwcGVuZE5ldzxW
YWx1ZT4ocHJvYywgQWJvdmUsIG9yaWdpbiwgZXhwZWN0ZWRBcmd1bWVudENvdW50LCBhcmd1bWVu
dENvdW50KSk7CisgICAgICAgIENoZWNrVmFsdWUqIGFyZ3VtZW50Q291bnRDaGVjayA9IGJsb2Nr
LT5hcHBlbmROZXc8Q2hlY2tWYWx1ZT4ocHJvYywgQ2hlY2ssIG9yaWdpbiwKKyAgICAgICAgICAg
IGJsb2NrLT5hcHBlbmROZXc8VmFsdWU+KHByb2MsIEFib3ZlLCBvcmlnaW4sIGV4cGVjdGVkQXJn
dW1lbnRDb3VudCwgYXJndW1lbnRDb3VudCkpOwogCi0gICAgYXJndW1lbnRDb3VudENoZWNrLT5z
ZXRHZW5lcmF0b3IoW10gKENDYWxsSGVscGVycyYgaml0LCBjb25zdCBTdGFja21hcEdlbmVyYXRp
b25QYXJhbXMmKSB7Ci0gICAgICAgIGppdC5icmVha3BvaW50KCk7Ci0gICAgfSk7CisgICAgICAg
IGFyZ3VtZW50Q291bnRDaGVjay0+c2V0R2VuZXJhdG9yKFtdIChDQ2FsbEhlbHBlcnMmIGppdCwg
Y29uc3QgU3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zJikgeworICAgICAgICAgICAgaml0LmJyZWFr
cG9pbnQoKTsKKyAgICAgICAgfSk7CisgICAgfQogCiAgICAgLy8gTW92ZSBtZW1vcnkgdmFsdWVz
IHRvIHRoZSBhcHByb3JpYXRlIHBsYWNlcywgaWYgbmVlZGVkLgogICAgIFZhbHVlKiBiYXNlTWVt
b3J5ID0gbnVsbHB0cjsKQEAgLTkxNCw3ICs5NjgsNyBAQCBzdGF0aWMgc3RkOjp1bmlxdWVfcHRy
PENvbXBpbGF0aW9uPiBjcmVhCiAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7
CiAgICAgfQogCi0gICAgYXV0byBqc0VudHJ5cG9pbnQgPSBzdGQ6Om1ha2VfdW5pcXVlPENvbXBp
bGF0aW9uPih2bSwgcHJvYyk7CisgICAgYXV0byBqc0VudHJ5cG9pbnQgPSBzdGQ6Om1ha2VfdW5p
cXVlPENvbXBpbGF0aW9uPihCMzo6Y29tcGlsZSh2bSwgcHJvYykpOwogICAgIGZ1bmN0aW9uLmpz
VG9XYXNtRW50cnlwb2ludC5jYWxsZWVTYXZlUmVnaXN0ZXJzID0gcHJvYy5jYWxsZWVTYXZlUmVn
aXN0ZXJzKCk7CiAgICAgcmV0dXJuIGpzRW50cnlwb2ludDsKIH0KQEAgLTkzNyw3ICs5OTEsMTcg
QEAgRXhwZWN0ZWQ8c3RkOjp1bmlxdWVfcHRyPFdhc21JbnRlcm5hbEZ1bgogICAgIGlmICh2ZXJi
b3NlKQogICAgICAgICBkYXRhTG9nKCJQb3N0IFNTQTogIiwgcHJvY2VkdXJlKTsKIAotICAgIHJl
c3VsdC0+d2FzbUVudHJ5cG9pbnQuY29tcGlsYXRpb24gPSBzdGQ6Om1ha2VfdW5pcXVlPENvbXBp
bGF0aW9uPih2bSwgcHJvY2VkdXJlLCBvcHRMZXZlbCk7CisgICAgeworICAgICAgICBCMzo6cHJl
cGFyZUZvckdlbmVyYXRpb24ocHJvY2VkdXJlLCBvcHRMZXZlbCk7CisgICAgICAgIAorICAgICAg
ICBDQ2FsbEhlbHBlcnMgaml0KCZ2bSk7CisgICAgICAgIEIzOjpnZW5lcmF0ZShwcm9jZWR1cmUs
IGppdCk7CisgICAgICAgIGNvbnRleHQuZW1pdEV4Y2VwdGlvbkhhbmRsZXIoaml0KTsKKworICAg
ICAgICBMaW5rQnVmZmVyIGxpbmtCdWZmZXIodm0sIGppdCwgbnVsbHB0cik7CisgICAgICAgIHJl
c3VsdC0+d2FzbUVudHJ5cG9pbnQuY29tcGlsYXRpb24gPSBzdGQ6Om1ha2VfdW5pcXVlPEIzOjpD
b21waWxhdGlvbj4oRklOQUxJWkVfQ09ERShsaW5rQnVmZmVyLCAoIldhc20gY29tcGlsYXRpb24i
KSksIHByb2NlZHVyZS5yZWxlYXNlQnlwcm9kdWN0cygpKTsKKyAgICB9CisKICAgICByZXN1bHQt
Pndhc21FbnRyeXBvaW50LmNhbGxlZVNhdmVSZWdpc3RlcnMgPSBwcm9jZWR1cmUuY2FsbGVlU2F2
ZVJlZ2lzdGVycygpOwogICAgIHJlc3VsdC0+anNUb1dhc21FbnRyeXBvaW50LmNvbXBpbGF0aW9u
ID0gY3JlYXRlSlNUb1dhc21XcmFwcGVyKHZtLCAqcmVzdWx0LCBzaWduYXR1cmUsIHJlc3VsdC0+
d2FzbUVudHJ5cG9pbnQuY29tcGlsYXRpb24tPmNvZGUoKSwgaW5mby5tZW1vcnkpOwogICAgIHJl
dHVybiBXVEZNb3ZlKHJlc3VsdCk7CkBAIC0xMDk1LDggKzExNTksOCBAQCBhdXRvIEIzSVJHZW5l
cmF0b3I6OmFkZE9wPE9wVHlwZTo6STMyVHJ1CiAgICAgICAgIG1fY3VycmVudEJsb2NrLT5hcHBl
bmROZXc8VmFsdWU+KG1fcHJvYywgR3JlYXRlckVxdWFsLCBPcmlnaW4oKSwgYXJnLCBtaW4pKTsK
ICAgICBvdXRPZkJvdW5kcyA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8VmFsdWU+KG1fcHJv
YywgRXF1YWwsIE9yaWdpbigpLCBvdXRPZkJvdW5kcywgemVyb0ZvclR5cGUoSTMyKSk7CiAgICAg
Q2hlY2tWYWx1ZSogdHJhcCA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8Q2hlY2tWYWx1ZT4o
bV9wcm9jLCBDaGVjaywgT3JpZ2luKCksIG91dE9mQm91bmRzKTsKLSAgICB0cmFwLT5zZXRHZW5l
cmF0b3IoW10gKENDYWxsSGVscGVycyYgaml0LCBjb25zdCBTdGFja21hcEdlbmVyYXRpb25QYXJh
bXMmKSB7Ci0gICAgICAgIGppdC5icmVha3BvaW50KCk7CisgICAgdHJhcC0+c2V0R2VuZXJhdG9y
KFs9XSAoQ0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0IFN0YWNrbWFwR2VuZXJhdGlvblBhcmFtcyYp
IHsKKyAgICAgICAgdGhpcy0+ZW1pdEV4Y2VwdGlvbkNoZWNrKGppdCwgRXhjZXB0aW9uVHlwZTo6
T3V0T2ZCb3VuZHNUcnVuYyk7CiAgICAgfSk7CiAgICAgUGF0Y2hwb2ludFZhbHVlKiBwYXRjaHBv
aW50ID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxQYXRjaHBvaW50VmFsdWU+KG1fcHJvYywg
SW50MzIsIE9yaWdpbigpKTsKICAgICBwYXRjaHBvaW50LT5hcHBlbmQoYXJnLCBWYWx1ZVJlcDo6
U29tZVJlZ2lzdGVyKTsKQEAgLTExMTgsOCArMTE4Miw4IEBAIGF1dG8gQjNJUkdlbmVyYXRvcjo6
YWRkT3A8T3BUeXBlOjpJMzJUcnUKICAgICAgICAgbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxW
YWx1ZT4obV9wcm9jLCBHcmVhdGVyRXF1YWwsIE9yaWdpbigpLCBhcmcsIG1pbikpOwogICAgIG91
dE9mQm91bmRzID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxWYWx1ZT4obV9wcm9jLCBFcXVh
bCwgT3JpZ2luKCksIG91dE9mQm91bmRzLCB6ZXJvRm9yVHlwZShJMzIpKTsKICAgICBDaGVja1Zh
bHVlKiB0cmFwID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxDaGVja1ZhbHVlPihtX3Byb2Ms
IENoZWNrLCBPcmlnaW4oKSwgb3V0T2ZCb3VuZHMpOwotICAgIHRyYXAtPnNldEdlbmVyYXRvcihb
XSAoQ0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0IFN0YWNrbWFwR2VuZXJhdGlvblBhcmFtcyYpIHsK
LSAgICAgICAgaml0LmJyZWFrcG9pbnQoKTsKKyAgICB0cmFwLT5zZXRHZW5lcmF0b3IoWz1dIChD
Q2FsbEhlbHBlcnMmIGppdCwgY29uc3QgU3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zJikgeworICAg
ICAgICB0aGlzLT5lbWl0RXhjZXB0aW9uQ2hlY2soaml0LCBFeGNlcHRpb25UeXBlOjpPdXRPZkJv
dW5kc1RydW5jKTsKICAgICB9KTsKICAgICBQYXRjaHBvaW50VmFsdWUqIHBhdGNocG9pbnQgPSBt
X2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFBhdGNocG9pbnRWYWx1ZT4obV9wcm9jLCBJbnQzMiwg
T3JpZ2luKCkpOwogICAgIHBhdGNocG9pbnQtPmFwcGVuZChhcmcsIFZhbHVlUmVwOjpTb21lUmVn
aXN0ZXIpOwpAQCAtMTE0Miw4ICsxMjA2LDggQEAgYXV0byBCM0lSR2VuZXJhdG9yOjphZGRPcDxP
cFR5cGU6OkkzMlRydQogICAgICAgICBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFZhbHVlPiht
X3Byb2MsIEdyZWF0ZXJUaGFuLCBPcmlnaW4oKSwgYXJnLCBtaW4pKTsKICAgICBvdXRPZkJvdW5k
cyA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8VmFsdWU+KG1fcHJvYywgRXF1YWwsIE9yaWdp
bigpLCBvdXRPZkJvdW5kcywgemVyb0ZvclR5cGUoSTMyKSk7CiAgICAgQ2hlY2tWYWx1ZSogdHJh
cCA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8Q2hlY2tWYWx1ZT4obV9wcm9jLCBDaGVjaywg
T3JpZ2luKCksIG91dE9mQm91bmRzKTsKLSAgICB0cmFwLT5zZXRHZW5lcmF0b3IoW10gKENDYWxs
SGVscGVycyYgaml0LCBjb25zdCBTdGFja21hcEdlbmVyYXRpb25QYXJhbXMmKSB7Ci0gICAgICAg
IGppdC5icmVha3BvaW50KCk7CisgICAgdHJhcC0+c2V0R2VuZXJhdG9yKFs9XSAoQ0NhbGxIZWxw
ZXJzJiBqaXQsIGNvbnN0IFN0YWNrbWFwR2VuZXJhdGlvblBhcmFtcyYpIHsKKyAgICAgICAgdGhp
cy0+ZW1pdEV4Y2VwdGlvbkNoZWNrKGppdCwgRXhjZXB0aW9uVHlwZTo6T3V0T2ZCb3VuZHNUcnVu
Yyk7CiAgICAgfSk7CiAgICAgUGF0Y2hwb2ludFZhbHVlKiBwYXRjaHBvaW50ID0gbV9jdXJyZW50
QmxvY2stPmFwcGVuZE5ldzxQYXRjaHBvaW50VmFsdWU+KG1fcHJvYywgSW50MzIsIE9yaWdpbigp
KTsKICAgICBwYXRjaHBvaW50LT5hcHBlbmQoYXJnLCBWYWx1ZVJlcDo6U29tZVJlZ2lzdGVyKTsK
QEAgLTExNjUsOCArMTIyOSw4IEBAIGF1dG8gQjNJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpJ
MzJUcnUKICAgICAgICAgbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxWYWx1ZT4obV9wcm9jLCBH
cmVhdGVyVGhhbiwgT3JpZ2luKCksIGFyZywgbWluKSk7CiAgICAgb3V0T2ZCb3VuZHMgPSBtX2N1
cnJlbnRCbG9jay0+YXBwZW5kTmV3PFZhbHVlPihtX3Byb2MsIEVxdWFsLCBPcmlnaW4oKSwgb3V0
T2ZCb3VuZHMsIHplcm9Gb3JUeXBlKEkzMikpOwogICAgIENoZWNrVmFsdWUqIHRyYXAgPSBtX2N1
cnJlbnRCbG9jay0+YXBwZW5kTmV3PENoZWNrVmFsdWU+KG1fcHJvYywgQ2hlY2ssIE9yaWdpbigp
LCBvdXRPZkJvdW5kcyk7Ci0gICAgdHJhcC0+c2V0R2VuZXJhdG9yKFtdIChDQ2FsbEhlbHBlcnMm
IGppdCwgY29uc3QgU3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zJikgewotICAgICAgICBqaXQuYnJl
YWtwb2ludCgpOworICAgIHRyYXAtPnNldEdlbmVyYXRvcihbPV0gKENDYWxsSGVscGVycyYgaml0
LCBjb25zdCBTdGFja21hcEdlbmVyYXRpb25QYXJhbXMmKSB7CisgICAgICAgIHRoaXMtPmVtaXRF
eGNlcHRpb25DaGVjayhqaXQsIEV4Y2VwdGlvblR5cGU6Ok91dE9mQm91bmRzVHJ1bmMpOwogICAg
IH0pOwogICAgIFBhdGNocG9pbnRWYWx1ZSogcGF0Y2hwb2ludCA9IG1fY3VycmVudEJsb2NrLT5h
cHBlbmROZXc8UGF0Y2hwb2ludFZhbHVlPihtX3Byb2MsIEludDMyLCBPcmlnaW4oKSk7CiAgICAg
cGF0Y2hwb2ludC0+YXBwZW5kKGFyZywgVmFsdWVSZXA6OlNvbWVSZWdpc3Rlcik7CkBAIC0xMTg4
LDggKzEyNTIsOCBAQCBhdXRvIEIzSVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6STY0VHJ1CiAg
ICAgICAgIG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8VmFsdWU+KG1fcHJvYywgR3JlYXRlckVx
dWFsLCBPcmlnaW4oKSwgYXJnLCBtaW4pKTsKICAgICBvdXRPZkJvdW5kcyA9IG1fY3VycmVudEJs
b2NrLT5hcHBlbmROZXc8VmFsdWU+KG1fcHJvYywgRXF1YWwsIE9yaWdpbigpLCBvdXRPZkJvdW5k
cywgemVyb0ZvclR5cGUoSTMyKSk7CiAgICAgQ2hlY2tWYWx1ZSogdHJhcCA9IG1fY3VycmVudEJs
b2NrLT5hcHBlbmROZXc8Q2hlY2tWYWx1ZT4obV9wcm9jLCBDaGVjaywgT3JpZ2luKCksIG91dE9m
Qm91bmRzKTsKLSAgICB0cmFwLT5zZXRHZW5lcmF0b3IoW10gKENDYWxsSGVscGVycyYgaml0LCBj
b25zdCBTdGFja21hcEdlbmVyYXRpb25QYXJhbXMmKSB7Ci0gICAgICAgIGppdC5icmVha3BvaW50
KCk7CisgICAgdHJhcC0+c2V0R2VuZXJhdG9yKFs9XSAoQ0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0
IFN0YWNrbWFwR2VuZXJhdGlvblBhcmFtcyYpIHsKKyAgICAgICAgdGhpcy0+ZW1pdEV4Y2VwdGlv
bkNoZWNrKGppdCwgRXhjZXB0aW9uVHlwZTo6T3V0T2ZCb3VuZHNUcnVuYyk7CiAgICAgfSk7CiAg
ICAgUGF0Y2hwb2ludFZhbHVlKiBwYXRjaHBvaW50ID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5l
dzxQYXRjaHBvaW50VmFsdWU+KG1fcHJvYywgSW50NjQsIE9yaWdpbigpKTsKICAgICBwYXRjaHBv
aW50LT5hcHBlbmQoYXJnLCBWYWx1ZVJlcDo6U29tZVJlZ2lzdGVyKTsKQEAgLTEyMTEsOCArMTI3
NSw4IEBAIGF1dG8gQjNJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpJNjRUcnUKICAgICAgICAg
bV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxWYWx1ZT4obV9wcm9jLCBHcmVhdGVyVGhhbiwgT3Jp
Z2luKCksIGFyZywgbWluKSk7CiAgICAgb3V0T2ZCb3VuZHMgPSBtX2N1cnJlbnRCbG9jay0+YXBw
ZW5kTmV3PFZhbHVlPihtX3Byb2MsIEVxdWFsLCBPcmlnaW4oKSwgb3V0T2ZCb3VuZHMsIHplcm9G
b3JUeXBlKEkzMikpOwogICAgIENoZWNrVmFsdWUqIHRyYXAgPSBtX2N1cnJlbnRCbG9jay0+YXBw
ZW5kTmV3PENoZWNrVmFsdWU+KG1fcHJvYywgQ2hlY2ssIE9yaWdpbigpLCBvdXRPZkJvdW5kcyk7
Ci0gICAgdHJhcC0+c2V0R2VuZXJhdG9yKFtdIChDQ2FsbEhlbHBlcnMmIGppdCwgY29uc3QgU3Rh
Y2ttYXBHZW5lcmF0aW9uUGFyYW1zJikgewotICAgICAgICBqaXQuYnJlYWtwb2ludCgpOworICAg
IHRyYXAtPnNldEdlbmVyYXRvcihbPV0gKENDYWxsSGVscGVycyYgaml0LCBjb25zdCBTdGFja21h
cEdlbmVyYXRpb25QYXJhbXMmKSB7CisgICAgICAgIHRoaXMtPmVtaXRFeGNlcHRpb25DaGVjayhq
aXQsIEV4Y2VwdGlvblR5cGU6Ok91dE9mQm91bmRzVHJ1bmMpOwogICAgIH0pOwogCiAgICAgVmFs
dWUqIGNvbnN0YW50OwpAQCAtMTI1Myw4ICsxMzE3LDggQEAgYXV0byBCM0lSR2VuZXJhdG9yOjph
ZGRPcDxPcFR5cGU6Okk2NFRydQogICAgICAgICBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFZh
bHVlPihtX3Byb2MsIEdyZWF0ZXJFcXVhbCwgT3JpZ2luKCksIGFyZywgbWluKSk7CiAgICAgb3V0
T2ZCb3VuZHMgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFZhbHVlPihtX3Byb2MsIEVxdWFs
LCBPcmlnaW4oKSwgb3V0T2ZCb3VuZHMsIHplcm9Gb3JUeXBlKEkzMikpOwogICAgIENoZWNrVmFs
dWUqIHRyYXAgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PENoZWNrVmFsdWU+KG1fcHJvYywg
Q2hlY2ssIE9yaWdpbigpLCBvdXRPZkJvdW5kcyk7Ci0gICAgdHJhcC0+c2V0R2VuZXJhdG9yKFtd
IChDQ2FsbEhlbHBlcnMmIGppdCwgY29uc3QgU3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zJikgewot
ICAgICAgICBqaXQuYnJlYWtwb2ludCgpOworICAgIHRyYXAtPnNldEdlbmVyYXRvcihbPV0gKEND
YWxsSGVscGVycyYgaml0LCBjb25zdCBTdGFja21hcEdlbmVyYXRpb25QYXJhbXMmKSB7CisgICAg
ICAgIHRoaXMtPmVtaXRFeGNlcHRpb25DaGVjayhqaXQsIEV4Y2VwdGlvblR5cGU6Ok91dE9mQm91
bmRzVHJ1bmMpOwogICAgIH0pOwogICAgIFBhdGNocG9pbnRWYWx1ZSogcGF0Y2hwb2ludCA9IG1f
Y3VycmVudEJsb2NrLT5hcHBlbmROZXc8UGF0Y2hwb2ludFZhbHVlPihtX3Byb2MsIEludDY0LCBP
cmlnaW4oKSk7CiAgICAgcGF0Y2hwb2ludC0+YXBwZW5kKGFyZywgVmFsdWVSZXA6OlNvbWVSZWdp
c3Rlcik7CkBAIC0xMjc2LDggKzEzNDAsOCBAQCBhdXRvIEIzSVJHZW5lcmF0b3I6OmFkZE9wPE9w
VHlwZTo6STY0VHJ1CiAgICAgICAgIG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8VmFsdWU+KG1f
cHJvYywgR3JlYXRlclRoYW4sIE9yaWdpbigpLCBhcmcsIG1pbikpOwogICAgIG91dE9mQm91bmRz
ID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxWYWx1ZT4obV9wcm9jLCBFcXVhbCwgT3JpZ2lu
KCksIG91dE9mQm91bmRzLCB6ZXJvRm9yVHlwZShJMzIpKTsKICAgICBDaGVja1ZhbHVlKiB0cmFw
ID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxDaGVja1ZhbHVlPihtX3Byb2MsIENoZWNrLCBP
cmlnaW4oKSwgb3V0T2ZCb3VuZHMpOwotICAgIHRyYXAtPnNldEdlbmVyYXRvcihbXSAoQ0NhbGxI
ZWxwZXJzJiBqaXQsIGNvbnN0IFN0YWNrbWFwR2VuZXJhdGlvblBhcmFtcyYpIHsKLSAgICAgICAg
aml0LmJyZWFrcG9pbnQoKTsKKyAgICB0cmFwLT5zZXRHZW5lcmF0b3IoWz1dIChDQ2FsbEhlbHBl
cnMmIGppdCwgY29uc3QgU3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zJikgeworICAgICAgICB0aGlz
LT5lbWl0RXhjZXB0aW9uQ2hlY2soaml0LCBFeGNlcHRpb25UeXBlOjpPdXRPZkJvdW5kc1RydW5j
KTsKICAgICB9KTsKIAogICAgIFZhbHVlKiBjb25zdGFudDsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>297266</attachid>
            <date>2016-12-15 17:43:46 -0800</date>
            <delta_ts>2016-12-15 23:29:40 -0800</delta_ts>
            <desc>patch</desc>
            <filename>a-backup.diff</filename>
            <type>text/plain</type>
            <size>39480</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IEpTVGVzdHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEpTVGVzdHMvQ2hhbmdlTG9n
CShyZXZpc2lvbiAyMDk4OTMpCisrKyBKU1Rlc3RzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpA
QCAtMSwzICsxLDE1IEBACisyMDE2LTEyLTE1ICBTYWFtIEJhcmF0aSAgPHNiYXJhdGlAYXBwbGUu
Y29tPgorCisgICAgICAgIFdlYkFzc2VtYmx5OiBXYXNtQjNJUkdlbmVyYXRvciBzaG91bGQgdGhy
b3cgZXhjZXB0aW9ucyBpbnN0ZWFkIG9mIGNyYXNoCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjU4MzQKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JP
RFkgKE9PUFMhKS4KKworICAgICAgICAqIHdhc20vZnVuY3Rpb24tdGVzdHMvZXhjZXB0aW9ucy5q
czogQWRkZWQuCisgICAgICAgIChpbXBvcnQuQnVpbGRlci5mcm9tLnN0cmluZ19hcHBlYXJlZF9o
ZXJlLmltcG9ydC5hcy5hc3NlcnQuZnJvbS5zdHJpbmdfYXBwZWFyZWRfaGVyZS5tYWtlSW5zdGFu
Y2UpOgorICAgICAgICAqIHdhc20vZnVuY3Rpb24tdGVzdHMvdGFibGUtYmFzaWMuanM6CisgICAg
ICAgIChpLmkuNDIudGhyb3cubmV3LkVycm9yKToKKwogMjAxNi0xMi0xNSAgS2VpdGggTWlsbGVy
ICA8a2VpdGhfbWlsbGVyQGFwcGxlLmNvbT4KIAogICAgICAgICBXYXNtIHNob3VsZCBub3QgY3Jl
YXRlIGVtcHR5IHVubGlua2VkIGNhbGxzaXRlcwpJbmRleDogSlNUZXN0cy93YXNtL2Z1bmN0aW9u
LXRlc3RzL2V4Y2VwdGlvbnMuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSlNUZXN0cy93YXNtL2Z1bmN0aW9u
LXRlc3RzL2V4Y2VwdGlvbnMuanMJKG5vbmV4aXN0ZW50KQorKysgSlNUZXN0cy93YXNtL2Z1bmN0
aW9uLXRlc3RzL2V4Y2VwdGlvbnMuanMJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw2NyBAQAor
aW1wb3J0IEJ1aWxkZXIgZnJvbSAnLi4vQnVpbGRlci5qcycKK2ltcG9ydCAqIGFzIGFzc2VydCBm
cm9tICcuLi9hc3NlcnQuanMnCisKK2Z1bmN0aW9uIG1ha2VJbnN0YW5jZSgpIHsKKyAgICBjb25z
dCB0YWJsZURlc2NyaXB0aW9uID0ge2luaXRpYWw6IDEsIGVsZW1lbnQ6ICJhbnlmdW5jIn07Cisg
ICAgY29uc3QgYnVpbGRlciA9IG5ldyBCdWlsZGVyKCkKKyAgICAgICAgLlR5cGUoKQorICAgICAg
ICAgICAgLkZ1bmMoWyJpMzIiLCAiaTMyIl0sICJpMzIiKQorICAgICAgICAgICAgLkZ1bmMoWyJp
MzIiXSwgImkzMiIpCisgICAgICAgIC5FbmQoKQorICAgICAgICAuSW1wb3J0KCkKKyAgICAgICAg
ICAgIC5UYWJsZSgiaW1wIiwgInRhYmxlIiwgdGFibGVEZXNjcmlwdGlvbikKKyAgICAgICAgLkVu
ZCgpCisgICAgICAgIC5GdW5jdGlvbigpLkVuZCgpCisgICAgICAgIC5FeHBvcnQoKQorICAgICAg
ICAgICAgLkZ1bmN0aW9uKCJmb28iKQorICAgICAgICAgICAgLkZ1bmN0aW9uKCJiYXIiKQorICAg
ICAgICAuRW5kKCkKKyAgICAgICAgLkNvZGUoKQorICAgICAgICAgICAgLkZ1bmN0aW9uKCJmb28i
LCAwIC8qWydpMzInLCAnaTMyJ10gPT4gJ2kzMicqLykKKyAgICAgICAgICAgICAgICAuR2V0TG9j
YWwoMSkgLy8gcGFyYW1ldGVyIHRvIGNhbGwKKyAgICAgICAgICAgICAgICAuR2V0TG9jYWwoMCkg
Ly8gY2FsbCBpbmRleAorICAgICAgICAgICAgICAgIC5DYWxsSW5kaXJlY3QoMSwgMCkgLy8gY2Fs
bGluZyBmdW5jdGlvbiBvZiB0eXBlIFsnaTMyJ10gPT4gJ2kzMicKKyAgICAgICAgICAgICAgICAu
UmV0dXJuKCkKKyAgICAgICAgICAgIC5FbmQoKQorICAgICAgICAgICAgLkZ1bmN0aW9uKCJiYXIi
LCAxIC8qWydpMzInXSA9PiAnaTMyJyovKQorICAgICAgICAgICAgICAgIC5HZXRMb2NhbCgwKQor
ICAgICAgICAgICAgICAgIC5JMzJDb25zdCg0MikKKyAgICAgICAgICAgICAgICAuSTMyQWRkKCkK
KyAgICAgICAgICAgICAgICAuUmV0dXJuKCkKKyAgICAgICAgICAgIC5FbmQoKQorICAgICAgICAu
RW5kKCk7CisKKworICAgIGNvbnN0IGJpbiA9IGJ1aWxkZXIuV2ViQXNzZW1ibHkoKS5nZXQoKTsK
KyAgICBjb25zdCBtb2R1bGUgPSBuZXcgV2ViQXNzZW1ibHkuTW9kdWxlKGJpbik7CisgICAgY29u
c3QgdGFibGUgPSBuZXcgV2ViQXNzZW1ibHkuVGFibGUodGFibGVEZXNjcmlwdGlvbik7CisgICAg
cmV0dXJuIHtpbnN0YW5jZTogbmV3IFdlYkFzc2VtYmx5Lkluc3RhbmNlKG1vZHVsZSwge2ltcDog
e3RhYmxlfX0pLCB0YWJsZX07Cit9CisKK3sKKyAgICBjb25zdCB7aW5zdGFuY2UsIHRhYmxlfSA9
IG1ha2VJbnN0YW5jZSgpOworICAgIGNvbnN0IGZvbyA9IGluc3RhbmNlLmV4cG9ydHMuZm9vOwor
ICAgIGNvbnN0IGJhciA9IGluc3RhbmNlLmV4cG9ydHMuYmFyOworICAgIGFzc2VydC5lcSh0YWJs
ZS5nZXQoMCksIG51bGwpOworCisgICAgZm9yIChsZXQgaSA9IDA7IGkgPCAxMDAwOyBpKyspIHsK
KyAgICAgICAgYXNzZXJ0LnRocm93cygoKSA9PiBmb28oMCwgaSksIFdlYkFzc2VtYmx5LlJ1bnRp
bWVFcnJvciwgImNhbGxfaW5kaXJlY3QgdG8gYSBudWxsIHRhYmxlIGVudHJ5Iik7CisgICAgfQor
CisgICAgdGFibGUuc2V0KDAsIGZvbyk7CisgICAgYXNzZXJ0LmVxKHRhYmxlLmdldCgwKSwgZm9v
KTsKKworICAgIGZvciAobGV0IGkgPSAwOyBpIDwgMTAwMDsgaSsrKSB7CisgICAgICAgIGFzc2Vy
dC50aHJvd3MoKCkgPT4gZm9vKDEgKyBpLCBpKSwgV2ViQXNzZW1ibHkuUnVudGltZUVycm9yLCAi
T3V0IG9mIGJvdW5kcyBjYWxsX2luZGlyZWN0Iik7CisgICAgfQorCisgICAgZm9yIChsZXQgaSA9
IDA7IGkgPCAxMDAwOyBpKyspIHsKKyAgICAgICAgYXNzZXJ0LnRocm93cygoKSA9PiBmb28oMCwg
aSksIFdlYkFzc2VtYmx5LlJ1bnRpbWVFcnJvciwgImNhbGxfaW5kaXJlY3QgdG8gYSBzaWduYXR1
cmUgdGhhdCBkb2VzIG5vdCBtYXRjaCIpOworICAgIH0KKworICAgIHRhYmxlLnNldCgwLCBiYXIp
OworICAgIGFzc2VydC5lcSh0YWJsZS5nZXQoMCksIGJhcik7CisgICAgZm9yIChsZXQgaSA9IDA7
IGkgPCAyNTsgaSsrKSB7CisgICAgICAgIGFzc2VydC5lcShmb28oMCwgaSksIGkgKyA0Mik7Cisg
ICAgfQorfQpJbmRleDogSlNUZXN0cy93YXNtL2Z1bmN0aW9uLXRlc3RzL3RhYmxlLWJhc2ljLmpz
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIEpTVGVzdHMvd2FzbS9mdW5jdGlvbi10ZXN0cy90YWJsZS1iYXNpYy5q
cwkocmV2aXNpb24gMjA5ODg2KQorKysgSlNUZXN0cy93YXNtL2Z1bmN0aW9uLXRlc3RzL3RhYmxl
LWJhc2ljLmpzCSh3b3JraW5nIGNvcHkpCkBAIC01MywxNSArNTMsMTIgQEAgZnVuY3Rpb24gbWFr
ZUluc3RhbmNlKCkgewogLy8gRklYTUU6IG1ha2UgdGhpcyB3b3JrIGNyb3NzIG1vZHVsZS4gVGhl
IHJlYXNvbiBpdCBkb2Vzbid0CiAvLyBub3cgaXMgdGhhdCB3ZSBkb24ndCB1bmlxdWUgU2lnbmF0
dXJlKi4KIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjU1MTEK
LS8qCiB7CiAgICAgY29uc3Qge2luc3RhbmNlLCB0YWJsZX0gPSBtYWtlSW5zdGFuY2UoKTsKICAg
ICBjb25zdCBmb28gPSBpbnN0YW5jZS5leHBvcnRzLmZvbzsKLSAgICAvL3RhYmxlLnNldCgwLCBt
YWtlSW5zdGFuY2UoKS5pbnN0YW5jZS5leHBvcnRzLmJhcik7IC8vIENyb3NzIGluc3RhbmNlIGZ1
bmN0aW9uLgorICAgIHRhYmxlLnNldCgwLCBtYWtlSW5zdGFuY2UoKS5pbnN0YW5jZS5leHBvcnRz
LmJhcik7IC8vIENyb3NzIGluc3RhbmNlIGZ1bmN0aW9uLgogCiAgICAgZm9yIChsZXQgaSA9IDA7
IGkgPCAxMDAwOyBpKyspIHsKLSAgICAgICAgaWYgKGZvbygwLCBpKSAhPT0gaSArIDQyKQotICAg
ICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJCYWQgY2FsbCBpbmRpcmVjdCIpOworICAgICAgICBh
c3NlcnQudGhyb3dzKCgpID0+IGZvbygwLCBpKSwgV2ViQXNzZW1ibHkuUnVudGltZUVycm9yLCAi
Y2FsbF9pbmRpcmVjdCB0byBhIHNpZ25hdHVyZSB0aGF0IGRvZXMgbm90IG1hdGNoIik7CiAgICAg
fQogfQotKi8KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjA5ODg2KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwz
ICsxLDQ3IEBACisyMDE2LTEyLTE1ICBTYWFtIEJhcmF0aSAgPHNiYXJhdGlAYXBwbGUuY29tPgor
CisgICAgICAgIFdlYkFzc2VtYmx5OiBXYXNtQjNJUkdlbmVyYXRvciBzaG91bGQgdGhyb3cgZXhj
ZXB0aW9ucyBpbnN0ZWFkIG9mIGNyYXNoCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0xNjU4MzQKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICBUaGlzIHBhdGNoIGdlbmVyYWxpemVzIGhvdyB3ZSB0aHJvdyBleGNl
cHRpb25zIGluIHRoZSBXYXNtOjpCM0lSR2VuZXJhdG9yLgorICAgICAgICBUaGVyZSBhcmUgc3Rp
bGwgcGxhY2VzIHdoZXJlIHdlIG5lZWQgdG8gdGhyb3cgZXhjZXB0aW9ucyBhbmQgd2UgZG9uJ3Qs
IGJ1dAorICAgICAgICB0aGlzIHBhdGNoIHJlbW92ZXMgbW9zdCBvZiB0aG9zZSBwbGFjZXMgaW5z
aWRlIHRoZSBJUiBnZW5lcmF0b3IuIFRoZXJlIGFyZQorICAgICAgICBzdGlsbCBhIGZldyBwbGFj
ZXMgd2UgbmVlZCB0byB0aHJvdyBleGNlcHRpb25zIGluc2lkZSB0aGUgSVIgZ2VuZXJhdG9yLCBs
aWtlCisgICAgICAgIGRpdi9tb2QgYnkgMC4gVGhvc2Ugd2lsbCBiZSBkb25lIGluIGEgc2VwYXJh
dGUgcGF0Y2guIEFsc28sIHRoZXJlIGFyZQorICAgICAgICBzdGlsbCBzb21lIHN0dWJzIHdlIG5l
ZWQgdG8gdGhyb3cgZXhjZXB0aW9ucyBmcm9tOyB0aG9zZSB3aWxsIGFsc28gYmUKKyAgICAgICAg
ZG9uZSBpbiBhIHNlcGFyYXRlIHBhdGNoLgorCisgICAgICAgIFRoaXMgcGF0Y2ggYWxzbyByZWZh
Y3RvcnMgQjM6OkNvbXBpbGF0aW9uLiBCZWZvcmUsIEIzOjpDb21waWxhdGlvbihWTSwgUHJvY2Vk
dXJlKQorICAgICAgICBjb25zdHJ1Y3RvciB3b3VsZCBjb21waWxlIGEgQjMgZnVuY3Rpb24uIFRo
aXMgcGF0Y2ggbWFrZXMgQjM6OkNvbXBpbGF0aW9uIGEgc2ltcGxlIAorICAgICAgICB0dXBsZSB0
aGF0IGtlZXBzIHRoZSBuZWNlc3NhcnkgYml0cyBvZiBCMyBmdW5jdGlvbiBhbGl2ZSBpbiBvcmRl
ciB0byBiZSBydW5uYWJsZS4KKyAgICAgICAgVGhlcmUgaXMgYSBuZXcgZnVuY3Rpb24gdGhhdCBh
Y3R1YWxseSBkb2VzIHRoZSBjb21waWxhdGlvbiBmb3IgeW91LiBJdCBpczoKKyAgICAgICAgQ29t
cGlsYXRpb24gQjM6OmNvbXBpbGUoVk0mLCBQcm9jZWR1cmUmKQorICAgICAgICBUaGUgcmVhc29u
IGZvciB0aGlzIGNoYW5nZSBpcyB0aGF0IEknbSBub3cgdXNpbmcgQjM6OkNvbXBpbGF0aW9uKENv
ZGVSZWYsIE9wYXF1ZUJ5cHJvZHVjdHMpCisgICAgICAgIGNvbnN0cnVjdG9yIGluIFdhc20gY29k
ZS4gSXQgaXMgd2VpcmQgdG8gaGF2ZSBhIGNsYXNzIGJvdGggaGF2ZSBhCisgICAgICAgIGNvbnN0
cnVjdG9yIHRoYXQgaW5zdGFudGlhdGVzIHRoZSB0dXBsZSwgYW5kIGFub3RoZXIgdGhhdCBwZXJm
b3JtcyB0aGUKKyAgICAgICAgY29tcGlsYXRpb24gYW5kIHRoZW4gaW5zdGFudGlhdGVzIHRoZSB0
dXBsZS4gSXQncyBtb3JlIHN0cmFpZ2h0CisgICAgICAgIGZvcndhcmQgaWYgQ29tcGlsYXRpb24n
cyBqb2Igd2Fzbid0IHRvIGFjdHVhbGx5IGRvIHRoZSBjb21waWxhdGlvbgorICAgICAgICBidXQg
anVzdCB0byBob2xkIHRoZSBuZWNlc3NhcnkgYml0cyB0byBrZWVwIGEgY29tcGlsZWQgQjMgYWxp
dmUuCisKKyAgICAgICAgKiBDTWFrZUxpc3RzLnR4dDoKKyAgICAgICAgKiBKYXZhU2NyaXB0Q29y
ZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIGIzL0IzQ29tcGlsYXRpb24u
Y3BwOgorICAgICAgICAoSlNDOjpCMzo6Q29tcGlsYXRpb246OkNvbXBpbGF0aW9uKToKKyAgICAg
ICAgKiBiMy9CM0NvbXBpbGF0aW9uLmg6CisgICAgICAgICogYjMvQjNDb21waWxlLmNwcDogQWRk
ZWQuCisgICAgICAgIChKU0M6OkIzOjpjb21waWxlKToKKyAgICAgICAgKiBiMy9CM0NvbXBpbGUu
aDogQWRkZWQuCisgICAgICAgICogYjMvdGVzdGIzLmNwcDoKKyAgICAgICAgKEpTQzo6QjM6OmNv
bXBpbGUpOgorICAgICAgICAqIHdhc20vV2FzbUIzSVJHZW5lcmF0b3IuY3BwOgorICAgICAgICAo
SlNDOjpXYXNtOjpCM0lSR2VuZXJhdG9yOjpCM0lSR2VuZXJhdG9yKToKKyAgICAgICAgKEpTQzo6
V2FzbTo6QjNJUkdlbmVyYXRvcjo6ZW1pdEV4Y2VwdGlvbkNoZWNrKToKKyAgICAgICAgKEpTQzo6
V2FzbTo6QjNJUkdlbmVyYXRvcjo6ZW1pdEV4Y2VwdGlvbkhhbmRsZXIpOgorICAgICAgICAoSlND
OjpXYXNtOjpjcmVhdGVKU1RvV2FzbVdyYXBwZXIpOgorICAgICAgICAoSlNDOjpXYXNtOjpwYXJz
ZUFuZENvbXBpbGUpOgorCiAyMDE2LTEyLTE1ICBKRiBCYXN0aWVuICA8amZiYXN0aWVuQGFwcGxl
LmNvbT4KIAogICAgICAgICBXZWJBc3NlbWJseTogaW1wcm92ZSBjb21waWxhdGlvbiBlcnJvciBt
ZXNzYWdlcwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0NNYWtlTGlzdHMudHh0Cj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAkocmV2aXNpb24g
MjA5ODg2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0NNYWtlTGlzdHMudHh0CSh3b3JraW5n
IGNvcHkpCkBAIC0xMTYsNiArMTE2LDcgQEAgc2V0KEphdmFTY3JpcHRDb3JlX1NPVVJDRVMKICAg
ICBiMy9CM0NoZWNrVmFsdWUuY3BwCiAgICAgYjMvQjNDb21tb24uY3BwCiAgICAgYjMvQjNDb21t
dXRhdGl2aXR5LmNwcAorICAgIGIzL0IzQ29tcGlsZS5jcHAKICAgICBiMy9CM0NvbXBpbGF0aW9u
LmNwcAogICAgIGIzL0IzQ29uc3QzMlZhbHVlLmNwcAogICAgIGIzL0IzQ29uc3Q2NFZhbHVlLmNw
cApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9w
cm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFT
Y3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDIwOTg4NikKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5w
Ynhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC0xNDA3LDExICsxNDA3LDEzIEBACiAJCTc5MDVCQjY5
MUQxMjA1MEUwMDE5RkU1NyAvKiBJbmxpbmVBY2Nlc3MuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDc5MDVCQjY3MUQxMjA1MEUwMDE5RkU1NyAvKiBJbmxp
bmVBY2Nlc3MuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9
OwogCQk3OTE2MERCRDFDOEUzRUM4MDA4QzA4NUEgLyogUHJveHlSZXZva2UuY3BwIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzkxNjBEQkIxQzhFM0VDODAw
OEMwODVBIC8qIFByb3h5UmV2b2tlLmNwcCAqLzsgfTsKIAkJNzkxNjBEQkUxQzhFM0VDODAwOEMw
ODVBIC8qIFByb3h5UmV2b2tlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSA3OTE2MERCQzFDOEUzRUM4MDA4QzA4NUEgLyogUHJveHlSZXZva2UuaCAqLzsg
c2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQk3OTE5Qjc4MDFF
MDM1NTlDMDA1QkVFRDggLyogQjNDb21waWxlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA3OTE5Qjc3RjFFMDM1NTlDMDA1QkVFRDggLyogQjNDb21waWxl
LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNzky
MzNDMkIxRDM0NzE1NzAwQzVBODM0IC8qIEpJVE1hdGhJQy5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzkyMzNDMjkxRDM0NzE1NzAwQzVBODM0IC8qIEpJ
VE1hdGhJQy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07
CiAJCTc5MkNCMzQ5MUM0RUVENUMwMEQxM0FGMyAvKiBQQ1RvQ29kZU9yaWdpbk1hcC5jcHAgaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3OTJDQjM0NzFDNEVF
RDVDMDBEMTNBRjMgLyogUENUb0NvZGVPcmlnaW5NYXAuY3BwICovOyB9OwogCQk3OTJDQjM0QTFD
NEVFRDVDMDBEMTNBRjMgLyogUENUb0NvZGVPcmlnaW5NYXAuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDc5MkNCMzQ4MUM0RUVENUMwMEQxM0FGMyAvKiBQ
Q1RvQ29kZU9yaWdpbk1hcC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUs
ICk7IH07IH07CiAJCTc5NUIxOTk3MUQ3OEJFMzUwMDI2MkZBMCAvKiBNYXBCYXNlLmNwcCBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDc5NUIxOTk1MUQ3OEJF
MzUwMDI2MkZBMCAvKiBNYXBCYXNlLmNwcCAqLzsgfTsKIAkJNzk1QjE5OTgxRDc4QkUzNTAwMjYy
RkEwIC8qIE1hcEJhc2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDc5NUIxOTk2MUQ3OEJFMzUwMDI2MkZBMCAvKiBNYXBCYXNlLmggKi87IHNldHRpbmdz
ID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJNzk1RjA5OUQxRTAzNjAwNTAw
QkJFMzdGIC8qIEIzQ29tcGlsZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA3OTVGMDk5QzFFMDM2MDA1MDBCQkUzN0YgLyogQjNDb21waWxlLmNwcCAq
LzsgfTsKIAkJNzk2NDY1NkExQjk1MkZGMDAwMzA1OUVFIC8qIEdldFB1dEluZm8uaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDc5NjQ2NTY4MUI5NTJGRjAw
MDMwNTlFRSAvKiBHZXRQdXRJbmZvLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJp
dmF0ZSwgKTsgfTsgfTsKIAkJNzk2RkI0M0ExREZGOEMzRjAwMzlDOTVEIC8qIEpTV2ViQXNzZW1i
bHlIZWxwZXJzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSA3OTZGQjQzOTFERkY4QzNGMDAzOUM5NUQgLyogSlNXZWJBc3NlbWJseUhlbHBlcnMuaCAqLzsg
c2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk3OTdFMDdBOTFC
OEZDRkI5MDA4NDAwQkEgLyogSlNHbG9iYWxMZXhpY2FsRW52aXJvbm1lbnQuY3BwIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzk3RTA3QTcxQjhGQ0ZCOTAw
ODQwMEJBIC8qIEpTR2xvYmFsTGV4aWNhbEVudmlyb25tZW50LmNwcCAqLzsgfTsKQEAgLTM4Mzcs
MTEgKzM4MzksMTMgQEAKIAkJNzkwNUJCNjcxRDEyMDUwRTAwMTlGRTU3IC8qIElubGluZUFjY2Vz
cy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJbmxpbmVBY2Nlc3MuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzkxNjBEQkIxQzhFM0VDODAwOEMwODVBIC8qIFBy
b3h5UmV2b2tlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFByb3h5
UmV2b2tlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzkxNjBEQkMxQzhFM0VD
ODAwOEMwODVBIC8qIFByb3h5UmV2b2tlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IFByb3h5UmV2b2tlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTc5MTlCNzdG
MUUwMzU1OUMwMDVCRUVEOCAvKiBCM0NvbXBpbGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBuYW1lID0gQjNDb21waWxlLmg7IHBhdGggPSBiMy9CM0NvbXBpbGUuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJNzkyMzNDMjkxRDM0NzE1NzAwQzVBODM0IC8qIEpJVE1hdGhJQy5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKSVRNYXRoSUMuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzkyQ0IzNDcxQzRFRUQ1QzAwRDEzQUYzIC8qIFBDVG9Db2Rl
T3JpZ2luTWFwLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFBDVG9D
b2RlT3JpZ2luTWFwLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzkyQ0IzNDgx
QzRFRUQ1QzAwRDEzQUYzIC8qIFBDVG9Db2RlT3JpZ2luTWFwLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IFBDVG9Db2RlT3JpZ2luTWFwLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTc5NUIxOTk1MUQ3OEJFMzUwMDI2MkZBMCAvKiBNYXBCYXNlLmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IE1hcEJhc2UuY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQk3OTVCMTk5NjFENzhCRTM1MDAyNjJGQTAgLyogTWFwQmFzZS5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBNYXBCYXNlLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CisJCTc5NUYwOTlDMUUwMzYwMDUwMEJCRTM3RiAvKiBCM0NvbXBpbGUuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gQjNDb21waWxlLmNwcDsgcGF0
aCA9IGIzL0IzQ29tcGlsZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTc5NjQ2
NTY4MUI5NTJGRjAwMDMwNTlFRSAvKiBHZXRQdXRJbmZvLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IEdldFB1dEluZm8uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
Nzk2RkI0MzkxREZGOEMzRjAwMzlDOTVEIC8qIEpTV2ViQXNzZW1ibHlIZWxwZXJzLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEpTV2ViQXNzZW1ibHlIZWxwZXJzLmg7IHBhdGgg
PSBqcy9KU1dlYkFzc2VtYmx5SGVscGVycy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQk3OTdFMDdBNzFCOEZDRkI5MDA4NDAwQkEgLyogSlNHbG9iYWxMZXhpY2FsRW52aXJvbm1lbnQu
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNHbG9iYWxMZXhpY2Fs
RW52aXJvbm1lbnQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtNTE4Miw2ICs1
MTg2LDggQEAKIAkJCQkwRkVDODRDMDFCREFDREFDMDA4MEZGNzQgLyogQjNDb21tb24uaCAqLywK
IAkJCQkwRkVDODRDMTFCREFDREFDMDA4MEZGNzQgLyogQjNDb21tdXRhdGl2aXR5LmNwcCAqLywK
IAkJCQkwRkVDODRDMjFCREFDREFDMDA4MEZGNzQgLyogQjNDb21tdXRhdGl2aXR5LmggKi8sCisJ
CQkJNzkxOUI3N0YxRTAzNTU5QzAwNUJFRUQ4IC8qIEIzQ29tcGlsZS5oICovLAorCQkJCTc5NUYw
OTlDMUUwMzYwMDUwMEJCRTM3RiAvKiBCM0NvbXBpbGUuY3BwICovLAogCQkJCTBGMzM4REZGMUJG
MDI3NkMwMDEzQzg4RiAvKiBCM0NvbXBpbGF0aW9uLmNwcCAqLywKIAkJCQkwRjMzOEUwMDFCRjAy
NzZDMDAxM0M4OEYgLyogQjNDb21waWxhdGlvbi5oICovLAogCQkJCTBGODZBRTFGMUM1MzExQzUw
MDZCRThFQyAvKiBCM0NvbXB1dGVEaXZpc2lvbk1hZ2ljLmggKi8sCkBAIC04Mjk4LDYgKzgzMDQs
NyBAQAogCQkJCTUyQjMxMEZCMTk3NEFFNjEwMDgwODU3QyAvKiBGdW5jdGlvbkhhc0V4ZWN1dGVk
Q2FjaGUuaCBpbiBIZWFkZXJzICovLAogCQkJCUZFNEJGRjJDMUFENDc2RTcwMDA4OEY4NyAvKiBG
dW5jdGlvbk92ZXJyaWRlcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkMxOEM0MDUwRTE2RjVDRDAw
QjM0NDYwIC8qIEZ1bmN0aW9uUHJvdG90eXBlLmggaW4gSGVhZGVycyAqLywKKwkJCQk3OTE5Qjc4
MDFFMDM1NTlDMDA1QkVFRDggLyogQjNDb21waWxlLmggaW4gSGVhZGVycyAqLywKIAkJCQk2MkQy
RDM5MDFBREYxMDNGMDAwMjA2QzEgLyogRnVuY3Rpb25SYXJlRGF0YS5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJMkFBQ0U2M0QxOENBNUEwMzAwRUQwMTkxIC8qIEdDQWN0aXZpdHlDYWxsYmFjay5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJRkUzNDIyMTIxRDZCODFDMzAwMzJCRTg4IC8qIFRocm93U2NvcGUu
aCBpbiBIZWFkZXJzICovLApAQCAtOTgyMyw2ICs5ODMwLDcgQEAKIAkJCQkwRjNBMUJGOTFBOUVD
QjdEMDAwREUwMUEgLyogREZHUHV0U3RhY2tTaW5raW5nUGhhc2UuY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJQUQyRkNCRUExREI1OERBRDAwQjNFNzM2IC8qIEpTV2ViQXNzZW1ibHlUYWJsZS5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQkwRjJGQ0NGQjE4QTYwMDcwMDAxQTI3RjggLyogREZHU2FmZXBv
aW50LmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTc5NUYwOTlEMUUwMzYwMDUwMEJCRTM3RiAvKiBC
M0NvbXBpbGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJODZFQzlERDIxMzI4REY4MjAwMkIyQUQ3
IC8qIERGR1NwZWN1bGF0aXZlSklULmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTg2ODgwRjFGMTQz
MjhCQjkwMEIwOEQ0MiAvKiBERkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCTg2ODgwRjREMTQzNTNCMjEwMEIwOEQ0MiAvKiBERkdTcGVjdWxhdGl2ZUpJVDY0LmNw
cCBpbiBTb3VyY2VzICovLApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ29tcGls
YXRpb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0NvbXBp
bGF0aW9uLmNwcAkocmV2aXNpb24gMjA5ODg2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Iz
L0IzQ29tcGlsYXRpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOCwzNiArMjgsMjMgQEAKIAog
I2lmIEVOQUJMRShCM19KSVQpCiAKLSNpbmNsdWRlICJCM0dlbmVyYXRlLmgiCiAjaW5jbHVkZSAi
QjNPcGFxdWVCeXByb2R1Y3RzLmgiCi0jaW5jbHVkZSAiQjNQcm9jZWR1cmUuaCIKLSNpbmNsdWRl
ICJCM1RpbWluZ1Njb3BlLmgiCiAjaW5jbHVkZSAiQ0NhbGxIZWxwZXJzLmgiCi0jaW5jbHVkZSAi
SlNDSW5saW5lcy5oIgotI2luY2x1ZGUgIkxpbmtCdWZmZXIuaCIKIAogbmFtZXNwYWNlIEpTQyB7
IG5hbWVzcGFjZSBCMyB7CiAKLUNvbXBpbGF0aW9uOjpDb21waWxhdGlvbihWTSYgdm0sIFByb2Nl
ZHVyZSYgcHJvYywgdW5zaWduZWQgb3B0TGV2ZWwpCi17Ci0gICAgVGltaW5nU2NvcGUgdGltaW5n
U2NvcGUoIkNvbXBpbGF0aW9uIik7Ci0gICAgCi0gICAgcHJlcGFyZUZvckdlbmVyYXRpb24ocHJv
Yywgb3B0TGV2ZWwpOwotICAgIAotICAgIENDYWxsSGVscGVycyBqaXQoJnZtKTsKLSAgICBnZW5l
cmF0ZShwcm9jLCBqaXQpOwotICAgIExpbmtCdWZmZXIgbGlua0J1ZmZlcih2bSwgaml0LCBudWxs
cHRyKTsKLQotICAgIG1fY29kZVJlZiA9IEZJTkFMSVpFX0NPREUobGlua0J1ZmZlciwgKCJCMzo6
Q29tcGlsYXRpb24iKSk7Ci0gICAgbV9ieXByb2R1Y3RzID0gcHJvYy5yZWxlYXNlQnlwcm9kdWN0
cygpOwotfQotCiBDb21waWxhdGlvbjo6Q29tcGlsYXRpb24oTWFjcm9Bc3NlbWJsZXJDb2RlUmVm
IGNvZGVSZWYsIHN0ZDo6dW5pcXVlX3B0cjxPcGFxdWVCeXByb2R1Y3RzPiBieXByb2R1Y3RzKQog
ICAgIDogbV9jb2RlUmVmKGNvZGVSZWYpCiAgICAgLCBtX2J5cHJvZHVjdHMoV1RGTW92ZShieXBy
b2R1Y3RzKSkKIHsKIH0KIAorQ29tcGlsYXRpb246OkNvbXBpbGF0aW9uKENvbXBpbGF0aW9uJiYg
b3RoZXIpCisgICAgOiBtX2NvZGVSZWYoV1RGTW92ZShvdGhlci5tX2NvZGVSZWYpKQorICAgICwg
bV9ieXByb2R1Y3RzKFdURk1vdmUob3RoZXIubV9ieXByb2R1Y3RzKSkKK3sKK30KKwogQ29tcGls
YXRpb246On5Db21waWxhdGlvbigpCiB7CiB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
YjMvQjNDb21waWxhdGlvbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
My9CM0NvbXBpbGF0aW9uLmgJKHJldmlzaW9uIDIwOTg4NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy9CM0NvbXBpbGF0aW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTQwLDI1ICs0MCwxNiBA
QCBuYW1lc3BhY2UgQjMgewogY2xhc3MgT3BhcXVlQnlwcm9kdWN0czsKIGNsYXNzIFByb2NlZHVy
ZTsKIAotLy8gVGhpcyBpcyBhIGZvb2wtcHJvb2YgQVBJIGZvciBjb21waWxpbmcgYSBQcm9jZWR1
cmUgdG8gY29kZSBhbmQgdGhlbiBydW5uaW5nIHRoYXQgY29kZS4gWW91IGNvbXBpbGUKLS8vIGEg
UHJvY2VkdXJlIHVzaW5nIHRoaXMgQVBJIGJ5IGRvaW5nOgotLy8KLS8vIHN0ZDo6dW5pcXVlX3B0
cjxDb21waWxhdGlvbj4gY29tcGlsYXRpb24gPSBzdGQ6Om1ha2VfdW5pcXVlPENvbXBpbGF0aW9u
Pih2bSwgcHJvYyk7Ci0vLwotLy8gVGhlbiB5b3Uga2VlcCB0aGUgQ29tcGlsYXRpb24gb2JqZWN0
IGFsaXZlIGZvciBhcyBsb25nIGFzIHlvdSB3YW50IHRvIGJlIGFibGUgdG8gcnVuIHRoZSBjb2Rl
LiBJZgotLy8gdGhpcyBBUEkgZmVlbHMgdG9vIGhpZ2gtbGV2ZWwsIHlvdSBjYW4gdXNlIEIzOjpn
ZW5lcmF0ZSgpIGRpcmVjdGx5LgorLy8gVGhpcyBjbGFzcyBpcyBhIHdheSB0byBrZWVwIHRoZSBy
ZXN1bHQgb2YgYSBCMyBjb21waWxhdGlvbiBhbGl2ZQorLy8gYW5kIHJ1bm5hYmxlLgogCiBjbGFz
cyBDb21waWxhdGlvbiB7CiAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoQ29tcGlsYXRpb24pOwog
ICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogCiBwdWJsaWM6Ci0gICAgSlNfRVhQT1JUX1BS
SVZBVEUgQ29tcGlsYXRpb24oVk0mLCBQcm9jZWR1cmUmLCB1bnNpZ25lZCBvcHRMZXZlbCA9IDEp
OwotCi0gICAgLy8gVGhpcyBjb25zdHJ1Y3RvciBhbGxvd3MgeW91IHRvIG1hbnVhbGx5IGNyZWF0
ZSBhIENvbXBpbGF0aW9uLiBJdCdzIGN1cnJlbnRseSBvbmx5IHVzZWQgYnkgdGVzdAotICAgIC8v
IGNvZGUuIFByb2JhYmx5IGJlc3QgdG8ga2VlcCBpdCB0aGF0IHdheS4KICAgICBKU19FWFBPUlRf
UFJJVkFURSBDb21waWxhdGlvbihNYWNyb0Fzc2VtYmxlckNvZGVSZWYsIHN0ZDo6dW5pcXVlX3B0
cjxPcGFxdWVCeXByb2R1Y3RzPik7Ci0gICAgCisgICAgSlNfRVhQT1JUX1BSSVZBVEUgQ29tcGls
YXRpb24oQ29tcGlsYXRpb24mJik7CiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgfkNvbXBpbGF0aW9u
KCk7CiAKICAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHIgY29kZSgpIGNvbnN0IHsgcmV0dXJuIG1f
Y29kZVJlZi5jb2RlKCk7IH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0NvbXBp
bGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0NvbXBpbGUu
Y3BwCShub25leGlzdGVudCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0NvbXBpbGUu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNTcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQor
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUg
IkIzQ29tcGlsZS5oIgorCisjaWYgRU5BQkxFKEIzX0pJVCkKKworI2luY2x1ZGUgIkIzR2VuZXJh
dGUuaCIKKyNpbmNsdWRlICJCM09wYXF1ZUJ5cHJvZHVjdHMuaCIKKyNpbmNsdWRlICJCM1Byb2Nl
ZHVyZS5oIgorI2luY2x1ZGUgIkIzVGltaW5nU2NvcGUuaCIKKyNpbmNsdWRlICJDQ2FsbEhlbHBl
cnMuaCIKKyNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCisjaW5jbHVkZSAiTGlua0J1ZmZlci5oIgor
CituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKworQ29tcGlsYXRpb24gY29tcGlsZShW
TSYgdm0sIFByb2NlZHVyZSYgcHJvYywgdW5zaWduZWQgb3B0TGV2ZWwpCit7CisgICAgVGltaW5n
U2NvcGUgdGltaW5nU2NvcGUoIkNvbXBpbGF0aW9uIik7CisgICAgCisgICAgcHJlcGFyZUZvckdl
bmVyYXRpb24ocHJvYywgb3B0TGV2ZWwpOworICAgIAorICAgIENDYWxsSGVscGVycyBqaXQoJnZt
KTsKKyAgICBnZW5lcmF0ZShwcm9jLCBqaXQpOworICAgIExpbmtCdWZmZXIgbGlua0J1ZmZlcih2
bSwgaml0LCBudWxscHRyKTsKKworICAgIHJldHVybiBDb21waWxhdGlvbihGSU5BTElaRV9DT0RF
KGxpbmtCdWZmZXIsICgiQjM6OkNvbXBpbGF0aW9uIikpLCBwcm9jLnJlbGVhc2VCeXByb2R1Y3Rz
KCkpOworfQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKKworI2VuZGlmIC8vIEVOQUJMRShC
M19KSVQpCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0NvbXBpbGUuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDb21waWxlLmgJKG5vbmV4aXN0
ZW50KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ29tcGlsZS5oCSh3b3JraW5nIGNv
cHkpCkBAIC0wLDAgKzEsNTIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAq
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4gCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBFTkFCTEUoQjNfSklUKQorCisjaW5jbHVk
ZSAiQjNDb21waWxhdGlvbi5oIgorCituYW1lc3BhY2UgSlNDIHsKKworY2xhc3MgVk07CisKK25h
bWVzcGFjZSBCMyB7CisKK2NsYXNzIFByb2NlZHVyZTsKKworLy8gVGhpcyBpcyBhIGZvb2wtcHJv
b2YgQVBJIGZvciBjb21waWxpbmcgYSBQcm9jZWR1cmUgdG8gY29kZSBhbmQgdGhlbiBydW5uaW5n
IHRoYXQgY29kZS4gWW91IGNvbXBpbGUKKy8vIGEgUHJvY2VkdXJlIHVzaW5nIHRoaXMgQVBJIGJ5
IGRvaW5nOgorLy8KKy8vIENvbXBpbGF0aW9uIGNvbXBpbGF0aW9uID0gQjM6OmNvbXBpbGUodm0s
IHByb2MpOworLy8KKy8vIFRoZW4geW91IGtlZXAgdGhlIENvbXBpbGF0aW9uIG9iamVjdCBhbGl2
ZSBmb3IgYXMgbG9uZyBhcyB5b3Ugd2FudCB0byBiZSBhYmxlIHRvIHJ1biB0aGUgY29kZS4KKy8v
IElmIHRoaXMgQVBJIGZlZWxzIHRvbyBoaWdoLWxldmVsLCB5b3UgY2FuIHVzZSBCMzo6Z2VuZXJh
dGUoKSBkaXJlY3RseS4KKworSlNfRVhQT1JUX1BSSVZBVEUgQ29tcGlsYXRpb24gY29tcGlsZShW
TSYsIFByb2NlZHVyZSYsIHVuc2lnbmVkIG9wdExldmVsID0gMSk7CisKK30gfSAvLyBuYW1lc3Bh
Y2UgSlNDOjpCMworCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9iMy90ZXN0YjMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy90ZXN0YjMuY3BwCShyZXZpc2lvbiAyMDk4ODYpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYjMvdGVzdGIzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzMsNiArMzMsNyBAQAogI2lu
Y2x1ZGUgIkIzQmFzaWNCbG9ja0lubGluZXMuaCIKICNpbmNsdWRlICJCM0NDYWxsVmFsdWUuaCIK
ICNpbmNsdWRlICJCM0NvbXBpbGF0aW9uLmgiCisjaW5jbHVkZSAiQjNDb21waWxlLmgiCiAjaW5j
bHVkZSAiQjNDb21wdXRlRGl2aXNpb25NYWdpYy5oIgogI2luY2x1ZGUgIkIzQ29uc3QzMlZhbHVl
LmgiCiAjaW5jbHVkZSAiQjNDb25zdFB0clZhbHVlLmgiCkBAIC0xMTgsNyArMTE5LDcgQEAgVk0q
IHZtOwogCiBzdGQ6OnVuaXF1ZV9wdHI8Q29tcGlsYXRpb24+IGNvbXBpbGUoUHJvY2VkdXJlJiBw
cm9jZWR1cmUsIHVuc2lnbmVkIG9wdExldmVsID0gMSkKIHsKLSAgICByZXR1cm4gc3RkOjptYWtl
X3VuaXF1ZTxDb21waWxhdGlvbj4oKnZtLCBwcm9jZWR1cmUsIG9wdExldmVsKTsKKyAgICByZXR1
cm4gc3RkOjptYWtlX3VuaXF1ZTxDb21waWxhdGlvbj4oQjM6OmNvbXBpbGUoKnZtLCBwcm9jZWR1
cmUsIG9wdExldmVsKSk7CiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lLi4uIEFy
Z3VtZW50cz4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21CM0lSR2VuZXJh
dG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQjNJ
UkdlbmVyYXRvci5jcHAJKHJldmlzaW9uIDIwOTg4NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS93YXNtL1dhc21CM0lSR2VuZXJhdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzAsOCArMzAs
MTAgQEAKIAogI2luY2x1ZGUgIkIzQmFzaWNCbG9ja0lubGluZXMuaCIKICNpbmNsdWRlICJCM0ND
YWxsVmFsdWUuaCIKKyNpbmNsdWRlICJCM0NvbXBpbGUuaCIKICNpbmNsdWRlICJCM0NvbnN0UHRy
VmFsdWUuaCIKICNpbmNsdWRlICJCM0ZpeFNTQS5oIgorI2luY2x1ZGUgIkIzR2VuZXJhdGUuaCIK
ICNpbmNsdWRlICJCM1N0YWNrbWFwR2VuZXJhdGlvblBhcmFtcy5oIgogI2luY2x1ZGUgIkIzU3dp
dGNoVmFsdWUuaCIKICNpbmNsdWRlICJCM1ZhbGlkYXRlLmgiCkBAIC02Nyw2ICs2OSwxMyBAQCBu
YW1lc3BhY2UgewogY29uc3QgYm9vbCB2ZXJib3NlID0gZmFsc2U7CiB9CiAKKyNkZWZpbmUgRk9S
X0VBQ0hfRVhDRVBUSU9OKG1hY3JvKSBcCisgICAgbWFjcm8oT3V0T2ZCb3VuZHNNZW1vcnlBY2Nl
c3MsICAiT3V0IG9mIGJvdW5kcyBtZW1vcnkgYWNjZXNzIikgXAorICAgIG1hY3JvKE91dE9mQm91
bmRzQ2FsbEluZGlyZWN0LCAiT3V0IG9mIGJvdW5kcyBjYWxsX2luZGlyZWN0IikgXAorICAgIG1h
Y3JvKE51bGxUYWJsZUVudHJ5LCAgImNhbGxfaW5kaXJlY3QgdG8gYSBudWxsIHRhYmxlIGVudHJ5
IikgXAorICAgIG1hY3JvKEJhZFNpZ25hdHVyZSwgImNhbGxfaW5kaXJlY3QgdG8gYSBzaWduYXR1
cmUgdGhhdCBkb2VzIG5vdCBtYXRjaCIpIFwKKyAgICBtYWNybyhPdXRPZkJvdW5kc1RydW5jLCAi
T3V0IG9mIGJvdW5kcyBUcnVuYyBvcGVyYXRpb24iKSBcCisKIGNsYXNzIEIzSVJHZW5lcmF0b3Ig
ewogcHVibGljOgogICAgIHN0cnVjdCBDb250cm9sRGF0YSB7CkBAIC0xOTcsNiArMjA2LDE1IEBA
IHB1YmxpYzoKIAogICAgIHZvaWQgZHVtcChjb25zdCBWZWN0b3I8Q29udHJvbEVudHJ5PiYgY29u
dHJvbFN0YWNrLCBjb25zdCBFeHByZXNzaW9uTGlzdCYgZXhwcmVzc2lvblN0YWNrKTsKIAorICAg
IGVudW0gY2xhc3MgRXhjZXB0aW9uVHlwZSA6IHVpbnQzMl90IHsKKyNkZWZpbmUgTUFLRV9FTlVN
KGVudW1OYW1lLCBlcnJvcikgZW51bU5hbWUsCisgICAgRk9SX0VBQ0hfRVhDRVBUSU9OKE1BS0Vf
RU5VTSkKKyN1bmRlZiBNQUtFX0VOVU0KKyAgICB9OworCisgICAgdm9pZCBlbWl0RXhjZXB0aW9u
Q2hlY2soQ0NhbGxIZWxwZXJzJiwgRXhjZXB0aW9uVHlwZSk7CisgICAgdm9pZCBlbWl0RXhjZXB0
aW9uSGFuZGxlcihDQ2FsbEhlbHBlcnMmKTsKKwogcHJpdmF0ZToKICAgICBFeHByZXNzaW9uVHlw
ZSBlbWl0Q2hlY2tBbmRQcmVwYXJlUG9pbnRlcihFeHByZXNzaW9uVHlwZSBwb2ludGVyLCB1aW50
MzJfdCBvZmZzZXQsIHVpbnQzMl90IHNpemVPZk9wKTsKICAgICBFeHByZXNzaW9uVHlwZSBlbWl0
TG9hZE9wKExvYWRPcFR5cGUsIE9yaWdpbiwgRXhwcmVzc2lvblR5cGUgcG9pbnRlciwgdWludDMy
X3Qgb2Zmc2V0KTsKQEAgLTIxOCw2ICsyMzYsNyBAQCBwcml2YXRlOgogICAgIFZhbHVlKiBtX3pl
cm9WYWx1ZXNbbnVtVHlwZXNdOwogICAgIFZhbHVlKiBtX2luc3RhbmNlVmFsdWU7CiAKKyAgICBD
Q2FsbEhlbHBlcnM6OkxhYmVsIG1fZXhjZXB0aW9uSGFuZGxlcjsKIH07CiAKIEIzSVJHZW5lcmF0
b3I6OkIzSVJHZW5lcmF0b3IoVk0mIHZtLCBjb25zdCBNb2R1bGVJbmZvcm1hdGlvbiYgaW5mbywg
UHJvY2VkdXJlJiBwcm9jZWR1cmUsIFdhc21JbnRlcm5hbEZ1bmN0aW9uKiBjb21waWxhdGlvbiwg
VmVjdG9yPFVubGlua2VkV2FzbVRvV2FzbUNhbGw+JiB1bmxpbmtlZFdhc21Ub1dhc21DYWxscywg
Y29uc3QgSW1tdXRhYmxlRnVuY3Rpb25JbmRleFNwYWNlJiBmdW5jdGlvbkluZGV4U3BhY2UpCkBA
IC0yNTQsMzMgKzI3Myw3IEBAIEIzSVJHZW5lcmF0b3I6OkIzSVJHZW5lcmF0b3IoVk0mIHZtLCBj
b24KICAgICAgICAgbV9wcm9jLnNldFdhc21Cb3VuZHNDaGVja0dlbmVyYXRvcihbPV0gKENDYWxs
SGVscGVycyYgaml0LCBHUFJSZWcgcGlubmVkR1BSLCB1bnNpZ25lZCkgewogICAgICAgICAgICAg
QWxsb3dNYWNyb1NjcmF0Y2hSZWdpc3RlclVzYWdlIGFsbG93U2NyYXRjaChqaXQpOwogICAgICAg
ICAgICAgQVNTRVJUX1VOVVNFRChwaW5uZWRHUFIsIG1fbWVtb3J5U2l6ZUdQUiA9PSBwaW5uZWRH
UFIpOwotICAgICAgICAgICAgaml0LmNvcHlDYWxsZWVTYXZlc1RvVk1FbnRyeUZyYW1lQ2FsbGVl
U2F2ZXNCdWZmZXIoKTsKLQotICAgICAgICAgICAgaml0Lm1vdmUoR1BSSW5mbzo6Y2FsbEZyYW1l
UmVnaXN0ZXIsIEdQUkluZm86OmFyZ3VtZW50R1BSMCk7Ci0KLSAgICAgICAgICAgIENDYWxsSGVs
cGVyczo6Q2FsbCBjYWxsID0gaml0LmNhbGwoKTsKLSAgICAgICAgICAgIGppdC5qdW1wVG9FeGNl
cHRpb25IYW5kbGVyKCk7Ci0KLSAgICAgICAgICAgIGppdC5hZGRMaW5rVGFzayhbPV0gKExpbmtC
dWZmZXImIGxpbmtCdWZmZXIpIHsKLSAgICAgICAgICAgICAgICB2b2lkICgqdGhyb3dNZW1vcnlF
eGNlcHRpb24pKEV4ZWNTdGF0ZSopID0gW10gKEV4ZWNTdGF0ZSogZXhlYykgewotICAgICAgICAg
ICAgICAgICAgICBWTSogdm0gPSAmZXhlYy0+dm0oKTsKLSAgICAgICAgICAgICAgICAgICAgTmF0
aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7Ci0KLSAgICAgICAgICAgICAgICAg
ICAgewotICAgICAgICAgICAgICAgICAgICAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9U
SFJPV19TQ09QRSgqdm0pOwotICAgICAgICAgICAgICAgICAgICAgICAgSlNHbG9iYWxPYmplY3Qq
IGdsb2JhbE9iamVjdCA9IHZtLT50b3BKU1dlYkFzc2VtYmx5SW5zdGFuY2UtPmdsb2JhbE9iamVj
dCgpOwotCi0gICAgICAgICAgICAgICAgICAgICAgICBKU1dlYkFzc2VtYmx5UnVudGltZUVycm9y
KiBlcnJvciA9IEpTV2ViQXNzZW1ibHlSdW50aW1lRXJyb3I6OmNyZWF0ZSgKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBleGVjLCBnbG9iYWxPYmplY3QtPldlYkFzc2VtYmx5UnVudGltZUVy
cm9yU3RydWN0dXJlKCksICJPdXQgb2YgYm91bmRzIG1lbW9yeSBhY2Nlc3MiKTsKLSAgICAgICAg
ICAgICAgICAgICAgICAgIHRocm93RXhjZXB0aW9uKGV4ZWMsIHRocm93U2NvcGUsIGVycm9yKTsK
LSAgICAgICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgICAgIGdlbmVyaWNVbndp
bmQodm0sIGV4ZWMpOwotICAgICAgICAgICAgICAgICAgICBBU1NFUlQoISF2bS0+Y2FsbEZyYW1l
Rm9yQ2F0Y2gpOwotICAgICAgICAgICAgICAgIH07Ci0KLSAgICAgICAgICAgICAgICBsaW5rQnVm
ZmVyLmxpbmsoY2FsbCwgdGhyb3dNZW1vcnlFeGNlcHRpb24pOwotICAgICAgICAgICAgfSk7Cisg
ICAgICAgICAgICB0aGlzLT5lbWl0RXhjZXB0aW9uQ2hlY2soaml0LCBFeGNlcHRpb25UeXBlOjpP
dXRPZkJvdW5kc01lbW9yeUFjY2Vzcyk7CiAgICAgICAgIH0pOwogCiAgICAgICAgIEIzOjpQYXRj
aHBvaW50VmFsdWUqIGZvbyA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8QjM6OlBhdGNocG9p
bnRWYWx1ZT4obV9wcm9jLCBCMzo6Vm9pZCwgT3JpZ2luKCkpOwpAQCAtMjk2LDYgKzI4OSw2MyBA
QCBCM0lSR2VuZXJhdG9yOjpCM0lSR2VuZXJhdG9yKFZNJiB2bSwgY29uCiAgICAgICAgIG1fY3Vy
cmVudEJsb2NrLT5hcHBlbmROZXc8Q29uc3RQdHJWYWx1ZT4obV9wcm9jLCBPcmlnaW4oKSwgJm1f
dm0udG9wSlNXZWJBc3NlbWJseUluc3RhbmNlKSk7CiB9CiAKK3ZvaWQgQjNJUkdlbmVyYXRvcjo6
ZW1pdEV4Y2VwdGlvbkNoZWNrKENDYWxsSGVscGVycyYgaml0LCBFeGNlcHRpb25UeXBlIHR5cGUp
Cit7CisgICAgaml0Lm1vdmUoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoc3RhdGljX2Nhc3Q8
dWludDMyX3Q+KHR5cGUpKSwgR1BSSW5mbzo6YXJndW1lbnRHUFIxKTsKKyAgICBhdXRvIGp1bXAg
PSBqaXQuanVtcCgpOworICAgIGppdC5hZGRMaW5rVGFzayhbPV0gKExpbmtCdWZmZXImIGxpbmtC
dWZmZXIpIHsKKyAgICAgICAgQVNTRVJUKHRoaXMtPm1fZXhjZXB0aW9uSGFuZGxlci5pc1NldCgp
KTsKKyAgICAgICAgbGlua0J1ZmZlci5saW5rKGp1bXAsIGxpbmtCdWZmZXIubG9jYXRpb25PZih0
aGlzLT5tX2V4Y2VwdGlvbkhhbmRsZXIpKTsKKyAgICB9KTsKK30KKwordm9pZCBCM0lSR2VuZXJh
dG9yOjplbWl0RXhjZXB0aW9uSGFuZGxlcihDQ2FsbEhlbHBlcnMmIGppdCkKK3sKKyAgICBtX2V4
Y2VwdGlvbkhhbmRsZXIgPSBqaXQubGFiZWwoKTsKKworICAgIHsKKyAgICAgICAgUmVnaXN0ZXJT
ZXQgdXNlZFJlZ2lzdGVycyA9IFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMo
KTsKKyAgICAgICAgLy8gVGhlIHRoaW5nIHRoYXQganVtcHMgaGVyZSB3aWxsIG1vdmUgRXhjZXB0
aW9uVHlwZSBpbnRvIHRoZSBhcmd1bWVudEdQUjEgYW5kIGp1bXAgaGVyZS4KKyAgICAgICAgdXNl
ZFJlZ2lzdGVycy5zZXQoR1BSSW5mbzo6YXJndW1lbnRHUFIxKTsKKyAgICAgICAgaml0LmNvcHlD
YWxsZWVTYXZlc1RvVk1FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNCdWZmZXIodXNlZFJlZ2lzdGVycyk7
CisgICAgfQorCisgICAgaml0Lm1vdmUoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIEdQUklu
Zm86OmFyZ3VtZW50R1BSMCk7CisgICAgQ0NhbGxIZWxwZXJzOjpDYWxsIGNhbGwgPSBqaXQuY2Fs
bCgpOworICAgIGppdC5qdW1wVG9FeGNlcHRpb25IYW5kbGVyKCk7CisKKyAgICBqaXQuYWRkTGlu
a1Rhc2soWz1dIChMaW5rQnVmZmVyJiBsaW5rQnVmZmVyKSB7CisgICAgICAgIHZvaWQgKCp0aHJv
d01lbW9yeUV4Y2VwdGlvbikoRXhlY1N0YXRlKiwgRXhjZXB0aW9uVHlwZSkgPSBbXSAoRXhlY1N0
YXRlKiBleGVjLCBFeGNlcHRpb25UeXBlIHR5cGUpIHsKKyAgICAgICAgICAgIFZNKiB2bSA9ICZl
eGVjLT52bSgpOworICAgICAgICAgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwg
ZXhlYyk7CisKKyAgICAgICAgICAgIGNvbnN0IGNoYXIqIG1lc3NhZ2U7CisgICAgICAgICAgICBz
d2l0Y2ggKHR5cGUpIHsKKyNkZWZpbmUgU1dJVENIX0NBU0UoZW51bU5hbWUsIGVycm9yKSBcCisg
ICAgICAgICAgICBjYXNlIEV4Y2VwdGlvblR5cGU6OmVudW1OYW1lOiBcCisgICAgICAgICAgICAg
ICAgbWVzc2FnZSA9IGVycm9yOyBcCisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAg
ICBGT1JfRUFDSF9FWENFUFRJT04oU1dJVENIX0NBU0UpCisjdW5kZWYgU1dJVENIX0NBU0UKKyAg
ICAgICAgICAgIH0KKworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGF1dG8gdGhyb3dT
Y29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUoKnZtKTsKKyAgICAgICAgICAgICAgICBKU0dsb2Jh
bE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gdm0tPnRvcEpTV2ViQXNzZW1ibHlJbnN0YW5jZS0+Z2xv
YmFsT2JqZWN0KCk7CisKKyAgICAgICAgICAgICAgICBKU1dlYkFzc2VtYmx5UnVudGltZUVycm9y
KiBlcnJvciA9IEpTV2ViQXNzZW1ibHlSdW50aW1lRXJyb3I6OmNyZWF0ZSgKKyAgICAgICAgICAg
ICAgICAgICAgZXhlYywgZ2xvYmFsT2JqZWN0LT5XZWJBc3NlbWJseVJ1bnRpbWVFcnJvclN0cnVj
dHVyZSgpLCBtZXNzYWdlKTsKKyAgICAgICAgICAgICAgICB0aHJvd0V4Y2VwdGlvbihleGVjLCB0
aHJvd1Njb3BlLCBlcnJvcik7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGdlbmVyaWNV
bndpbmQodm0sIGV4ZWMpOworICAgICAgICAgICAgQVNTRVJUKCEhdm0tPmNhbGxGcmFtZUZvckNh
dGNoKTsKKyAgICAgICAgfTsKKworICAgICAgICBsaW5rQnVmZmVyLmxpbmsoY2FsbCwgdGhyb3dN
ZW1vcnlFeGNlcHRpb24pOworICAgIH0pOworfQorCiBWYWx1ZSogQjNJUkdlbmVyYXRvcjo6emVy
b0ZvclR5cGUoVHlwZSB0eXBlKQogewogICAgIEFTU0VSVCh0eXBlICE9IFZvaWQpOwpAQCAtNzQx
LDggKzc5MSw4IEBAIGF1dG8gQjNJUkdlbmVyYXRvcjo6YWRkQ2FsbEluZGlyZWN0KGNvbnMKICAg
ICAgICAgQ2hlY2tWYWx1ZSogY2hlY2sgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PENoZWNr
VmFsdWU+KG1fcHJvYywgQ2hlY2ssIE9yaWdpbigpLAogICAgICAgICAgICAgbV9jdXJyZW50Qmxv
Y2stPmFwcGVuZE5ldzxWYWx1ZT4obV9wcm9jLCBBYm92ZUVxdWFsLCBPcmlnaW4oKSwgY2FsbGVl
SW5kZXgsIGNhbGxhYmxlRnVuY3Rpb25CdWZmZXJTaXplKSk7CiAKLSAgICAgICAgY2hlY2stPnNl
dEdlbmVyYXRvcihbXSAoQ0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0IEIzOjpTdGFja21hcEdlbmVy
YXRpb25QYXJhbXMmKSB7Ci0gICAgICAgICAgICBqaXQuYnJlYWtwb2ludCgpOworICAgICAgICBj
aGVjay0+c2V0R2VuZXJhdG9yKFs9XSAoQ0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0IEIzOjpTdGFj
a21hcEdlbmVyYXRpb25QYXJhbXMmKSB7CisgICAgICAgICAgICB0aGlzLT5lbWl0RXhjZXB0aW9u
Q2hlY2soaml0LCBFeGNlcHRpb25UeXBlOjpPdXRPZkJvdW5kc0NhbGxJbmRpcmVjdCk7CiAgICAg
ICAgIH0pOwogICAgIH0KIApAQCAtNzYwLDggKzgxMCw4IEBAIGF1dG8gQjNJUkdlbmVyYXRvcjo6
YWRkQ2FsbEluZGlyZWN0KGNvbnMKICAgICAgICAgICAgICAgICBjYWxsZWVTaWduYXR1cmUsIAog
ICAgICAgICAgICAgICAgIG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8Q29uc3RQdHJWYWx1ZT4o
bV9wcm9jLCBPcmlnaW4oKSwgMCkpKTsKIAotICAgICAgICBjaGVjay0+c2V0R2VuZXJhdG9yKFtd
IChDQ2FsbEhlbHBlcnMmIGppdCwgY29uc3QgQjM6OlN0YWNrbWFwR2VuZXJhdGlvblBhcmFtcyYp
IHsKLSAgICAgICAgICAgIGppdC5icmVha3BvaW50KCk7CisgICAgICAgIGNoZWNrLT5zZXRHZW5l
cmF0b3IoWz1dIChDQ2FsbEhlbHBlcnMmIGppdCwgY29uc3QgQjM6OlN0YWNrbWFwR2VuZXJhdGlv
blBhcmFtcyYpIHsKKyAgICAgICAgICAgIHRoaXMtPmVtaXRFeGNlcHRpb25DaGVjayhqaXQsIEV4
Y2VwdGlvblR5cGU6Ok51bGxUYWJsZUVudHJ5KTsKICAgICAgICAgfSk7CiAgICAgfQogCkBAIC03
NzEsOCArODIxLDggQEAgYXV0byBCM0lSR2VuZXJhdG9yOjphZGRDYWxsSW5kaXJlY3QoY29ucwog
ICAgICAgICBDaGVja1ZhbHVlKiBjaGVjayA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8Q2hl
Y2tWYWx1ZT4obV9wcm9jLCBDaGVjaywgT3JpZ2luKCksCiAgICAgICAgICAgICBtX2N1cnJlbnRC
bG9jay0+YXBwZW5kTmV3PFZhbHVlPihtX3Byb2MsIE5vdEVxdWFsLCBPcmlnaW4oKSwgY2FsbGVl
U2lnbmF0dXJlLCBleHBlY3RlZFNpZ25hdHVyZSkpOwogCi0gICAgICAgIGNoZWNrLT5zZXRHZW5l
cmF0b3IoW10gKENDYWxsSGVscGVycyYgaml0LCBjb25zdCBCMzo6U3RhY2ttYXBHZW5lcmF0aW9u
UGFyYW1zJikgewotICAgICAgICAgICAgaml0LmJyZWFrcG9pbnQoKTsKKyAgICAgICAgY2hlY2st
PnNldEdlbmVyYXRvcihbPV0gKENDYWxsSGVscGVycyYgaml0LCBjb25zdCBCMzo6U3RhY2ttYXBH
ZW5lcmF0aW9uUGFyYW1zJikgeworICAgICAgICAgICAgdGhpcy0+ZW1pdEV4Y2VwdGlvbkNoZWNr
KGppdCwgRXhjZXB0aW9uVHlwZTo6QmFkU2lnbmF0dXJlKTsKICAgICAgICAgfSk7CiAgICAgfQog
CkBAIC04MzMsNyArODgzLDcgQEAgdm9pZCBCM0lSR2VuZXJhdG9yOjpkdW1wKGNvbnN0IFZlY3Rv
cjxDbwogICAgIGRhdGFMb2dMbigiXG4iKTsKIH0KIAotc3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxD
b21waWxhdGlvbj4gY3JlYXRlSlNUb1dhc21XcmFwcGVyKFZNJiB2bSwgV2FzbUludGVybmFsRnVu
Y3Rpb24mIGZ1bmN0aW9uLCBjb25zdCBTaWduYXR1cmUqIHNpZ25hdHVyZSwgTWFjcm9Bc3NlbWJs
ZXJDb2RlUHRyIG1haW5GdW5jdGlvbiwgY29uc3QgTWVtb3J5SW5mb3JtYXRpb24mIG1lbW9yeSkK
K3N0YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8QjM6OkNvbXBpbGF0aW9uPiBjcmVhdGVKU1RvV2FzbVdy
YXBwZXIoVk0mIHZtLCBXYXNtSW50ZXJuYWxGdW5jdGlvbiYgZnVuY3Rpb24sIGNvbnN0IFNpZ25h
dHVyZSogc2lnbmF0dXJlLCBNYWNyb0Fzc2VtYmxlckNvZGVQdHIgbWFpbkZ1bmN0aW9uLCBjb25z
dCBNZW1vcnlJbmZvcm1hdGlvbiYgbWVtb3J5KQogewogICAgIFByb2NlZHVyZSBwcm9jOwogICAg
IEJhc2ljQmxvY2sqIGJsb2NrID0gcHJvYy5hZGRCbG9jaygpOwpAQCAtODQyLDE5ICs4OTIsMjMg
QEAgc3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxDb21waWxhdGlvbj4gY3JlYQogCiAgICAganNjQ2Fs
bGluZ0NvbnZlbnRpb24oKS5zZXR1cEZyYW1lSW5Qcm9sb2d1ZSgmZnVuY3Rpb24uanNUb1dhc21D
YWxsZWVNb3ZlTG9jYXRpb24sIHByb2MsIG9yaWdpbiwgYmxvY2spOwogCi0gICAgVmFsdWUqIGZy
YW1lUG9pbnRlciA9IGJsb2NrLT5hcHBlbmROZXc8QjM6OlZhbHVlPihwcm9jLCBCMzo6RnJhbWVQ
b2ludGVyLCBvcmlnaW4pOwotICAgIFZhbHVlKiBvZmZTZXRPZkFyZ3VtZW50Q291bnQgPSBibG9j
ay0+YXBwZW5kTmV3PENvbnN0NjRWYWx1ZT4ocHJvYywgb3JpZ2luLCBDYWxsRnJhbWVTbG90Ojph
cmd1bWVudENvdW50ICogc2l6ZW9mKFJlZ2lzdGVyKSk7Ci0gICAgVmFsdWUqIGFyZ3VtZW50Q291
bnQgPSBibG9jay0+YXBwZW5kTmV3PE1lbW9yeVZhbHVlPihwcm9jLCBMb2FkLCBJbnQzMiwgb3Jp
Z2luLAotICAgICAgICBibG9jay0+YXBwZW5kTmV3PFZhbHVlPihwcm9jLCBBZGQsIG9yaWdpbiwg
ZnJhbWVQb2ludGVyLCBvZmZTZXRPZkFyZ3VtZW50Q291bnQpKTsKKyAgICBpZiAoIUFTU0VSVF9E
SVNBQkxFRCkgeworICAgICAgICAvLyBUaGlzIHNob3VsZCBiZSBndWFyYW50ZWVkIGJ5IG91ciBK
UyB3cmFwcGVyIHRoYXQgaGFuZGxlcyBjYWxscyB0byB1cy4KKyAgICAgICAgLy8gSnVzdCBwcmV2
ZW50IGFnYWluc3QgY3Jhenkgd2hlbiBBU1NFUlQgaXMgZW5hYmxlZC4KKyAgICAgICAgVmFsdWUq
IGZyYW1lUG9pbnRlciA9IGJsb2NrLT5hcHBlbmROZXc8QjM6OlZhbHVlPihwcm9jLCBCMzo6RnJh
bWVQb2ludGVyLCBvcmlnaW4pOworICAgICAgICBWYWx1ZSogb2ZmU2V0T2ZBcmd1bWVudENvdW50
ID0gYmxvY2stPmFwcGVuZE5ldzxDb25zdDY0VmFsdWU+KHByb2MsIG9yaWdpbiwgQ2FsbEZyYW1l
U2xvdDo6YXJndW1lbnRDb3VudCAqIHNpemVvZihSZWdpc3RlcikpOworICAgICAgICBWYWx1ZSog
YXJndW1lbnRDb3VudCA9IGJsb2NrLT5hcHBlbmROZXc8TWVtb3J5VmFsdWU+KHByb2MsIExvYWQs
IEludDMyLCBvcmlnaW4sCisgICAgICAgICAgICBibG9jay0+YXBwZW5kTmV3PFZhbHVlPihwcm9j
LCBBZGQsIG9yaWdpbiwgZnJhbWVQb2ludGVyLCBvZmZTZXRPZkFyZ3VtZW50Q291bnQpKTsKIAot
ICAgIFZhbHVlKiBleHBlY3RlZEFyZ3VtZW50Q291bnQgPSBibG9jay0+YXBwZW5kTmV3PENvbnN0
MzJWYWx1ZT4ocHJvYywgb3JpZ2luLCBzaWduYXR1cmUtPmFyZ3VtZW50cy5zaXplKCkpOworICAg
ICAgICBWYWx1ZSogZXhwZWN0ZWRBcmd1bWVudENvdW50ID0gYmxvY2stPmFwcGVuZE5ldzxDb25z
dDMyVmFsdWU+KHByb2MsIG9yaWdpbiwgc2lnbmF0dXJlLT5hcmd1bWVudHMuc2l6ZSgpKTsKIAot
ICAgIENoZWNrVmFsdWUqIGFyZ3VtZW50Q291bnRDaGVjayA9IGJsb2NrLT5hcHBlbmROZXc8Q2hl
Y2tWYWx1ZT4ocHJvYywgQ2hlY2ssIG9yaWdpbiwKLSAgICAgICAgYmxvY2stPmFwcGVuZE5ldzxW
YWx1ZT4ocHJvYywgQWJvdmUsIG9yaWdpbiwgZXhwZWN0ZWRBcmd1bWVudENvdW50LCBhcmd1bWVu
dENvdW50KSk7CisgICAgICAgIENoZWNrVmFsdWUqIGFyZ3VtZW50Q291bnRDaGVjayA9IGJsb2Nr
LT5hcHBlbmROZXc8Q2hlY2tWYWx1ZT4ocHJvYywgQ2hlY2ssIG9yaWdpbiwKKyAgICAgICAgICAg
IGJsb2NrLT5hcHBlbmROZXc8VmFsdWU+KHByb2MsIEFib3ZlLCBvcmlnaW4sIGV4cGVjdGVkQXJn
dW1lbnRDb3VudCwgYXJndW1lbnRDb3VudCkpOwogCi0gICAgYXJndW1lbnRDb3VudENoZWNrLT5z
ZXRHZW5lcmF0b3IoW10gKENDYWxsSGVscGVycyYgaml0LCBjb25zdCBTdGFja21hcEdlbmVyYXRp
b25QYXJhbXMmKSB7Ci0gICAgICAgIGppdC5icmVha3BvaW50KCk7Ci0gICAgfSk7CisgICAgICAg
IGFyZ3VtZW50Q291bnRDaGVjay0+c2V0R2VuZXJhdG9yKFtdIChDQ2FsbEhlbHBlcnMmIGppdCwg
Y29uc3QgU3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zJikgeworICAgICAgICAgICAgaml0LmJyZWFr
cG9pbnQoKTsKKyAgICAgICAgfSk7CisgICAgfQogCiAgICAgLy8gTW92ZSBtZW1vcnkgdmFsdWVz
IHRvIHRoZSBhcHByb3JpYXRlIHBsYWNlcywgaWYgbmVlZGVkLgogICAgIFZhbHVlKiBiYXNlTWVt
b3J5ID0gbnVsbHB0cjsKQEAgLTkxNCw3ICs5NjgsNyBAQCBzdGF0aWMgc3RkOjp1bmlxdWVfcHRy
PENvbXBpbGF0aW9uPiBjcmVhCiAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7
CiAgICAgfQogCi0gICAgYXV0byBqc0VudHJ5cG9pbnQgPSBzdGQ6Om1ha2VfdW5pcXVlPENvbXBp
bGF0aW9uPih2bSwgcHJvYyk7CisgICAgYXV0byBqc0VudHJ5cG9pbnQgPSBzdGQ6Om1ha2VfdW5p
cXVlPENvbXBpbGF0aW9uPihCMzo6Y29tcGlsZSh2bSwgcHJvYykpOwogICAgIGZ1bmN0aW9uLmpz
VG9XYXNtRW50cnlwb2ludC5jYWxsZWVTYXZlUmVnaXN0ZXJzID0gcHJvYy5jYWxsZWVTYXZlUmVn
aXN0ZXJzKCk7CiAgICAgcmV0dXJuIGpzRW50cnlwb2ludDsKIH0KQEAgLTkzNyw3ICs5OTEsMTcg
QEAgRXhwZWN0ZWQ8c3RkOjp1bmlxdWVfcHRyPFdhc21JbnRlcm5hbEZ1bgogICAgIGlmICh2ZXJi
b3NlKQogICAgICAgICBkYXRhTG9nKCJQb3N0IFNTQTogIiwgcHJvY2VkdXJlKTsKIAotICAgIHJl
c3VsdC0+d2FzbUVudHJ5cG9pbnQuY29tcGlsYXRpb24gPSBzdGQ6Om1ha2VfdW5pcXVlPENvbXBp
bGF0aW9uPih2bSwgcHJvY2VkdXJlLCBvcHRMZXZlbCk7CisgICAgeworICAgICAgICBCMzo6cHJl
cGFyZUZvckdlbmVyYXRpb24ocHJvY2VkdXJlLCBvcHRMZXZlbCk7CisgICAgICAgIAorICAgICAg
ICBDQ2FsbEhlbHBlcnMgaml0KCZ2bSk7CisgICAgICAgIEIzOjpnZW5lcmF0ZShwcm9jZWR1cmUs
IGppdCk7CisgICAgICAgIGNvbnRleHQuZW1pdEV4Y2VwdGlvbkhhbmRsZXIoaml0KTsKKworICAg
ICAgICBMaW5rQnVmZmVyIGxpbmtCdWZmZXIodm0sIGppdCwgbnVsbHB0cik7CisgICAgICAgIHJl
c3VsdC0+d2FzbUVudHJ5cG9pbnQuY29tcGlsYXRpb24gPSBzdGQ6Om1ha2VfdW5pcXVlPEIzOjpD
b21waWxhdGlvbj4oRklOQUxJWkVfQ09ERShsaW5rQnVmZmVyLCAoIldhc20gY29tcGlsYXRpb24i
KSksIHByb2NlZHVyZS5yZWxlYXNlQnlwcm9kdWN0cygpKTsKKyAgICB9CisKICAgICByZXN1bHQt
Pndhc21FbnRyeXBvaW50LmNhbGxlZVNhdmVSZWdpc3RlcnMgPSBwcm9jZWR1cmUuY2FsbGVlU2F2
ZVJlZ2lzdGVycygpOwogICAgIHJlc3VsdC0+anNUb1dhc21FbnRyeXBvaW50LmNvbXBpbGF0aW9u
ID0gY3JlYXRlSlNUb1dhc21XcmFwcGVyKHZtLCAqcmVzdWx0LCBzaWduYXR1cmUsIHJlc3VsdC0+
d2FzbUVudHJ5cG9pbnQuY29tcGlsYXRpb24tPmNvZGUoKSwgaW5mby5tZW1vcnkpOwogICAgIHJl
dHVybiBXVEZNb3ZlKHJlc3VsdCk7CkBAIC0xMDk1LDggKzExNTksOCBAQCBhdXRvIEIzSVJHZW5l
cmF0b3I6OmFkZE9wPE9wVHlwZTo6STMyVHJ1CiAgICAgICAgIG1fY3VycmVudEJsb2NrLT5hcHBl
bmROZXc8VmFsdWU+KG1fcHJvYywgR3JlYXRlckVxdWFsLCBPcmlnaW4oKSwgYXJnLCBtaW4pKTsK
ICAgICBvdXRPZkJvdW5kcyA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8VmFsdWU+KG1fcHJv
YywgRXF1YWwsIE9yaWdpbigpLCBvdXRPZkJvdW5kcywgemVyb0ZvclR5cGUoSTMyKSk7CiAgICAg
Q2hlY2tWYWx1ZSogdHJhcCA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8Q2hlY2tWYWx1ZT4o
bV9wcm9jLCBDaGVjaywgT3JpZ2luKCksIG91dE9mQm91bmRzKTsKLSAgICB0cmFwLT5zZXRHZW5l
cmF0b3IoW10gKENDYWxsSGVscGVycyYgaml0LCBjb25zdCBTdGFja21hcEdlbmVyYXRpb25QYXJh
bXMmKSB7Ci0gICAgICAgIGppdC5icmVha3BvaW50KCk7CisgICAgdHJhcC0+c2V0R2VuZXJhdG9y
KFs9XSAoQ0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0IFN0YWNrbWFwR2VuZXJhdGlvblBhcmFtcyYp
IHsKKyAgICAgICAgdGhpcy0+ZW1pdEV4Y2VwdGlvbkNoZWNrKGppdCwgRXhjZXB0aW9uVHlwZTo6
T3V0T2ZCb3VuZHNUcnVuYyk7CiAgICAgfSk7CiAgICAgUGF0Y2hwb2ludFZhbHVlKiBwYXRjaHBv
aW50ID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxQYXRjaHBvaW50VmFsdWU+KG1fcHJvYywg
SW50MzIsIE9yaWdpbigpKTsKICAgICBwYXRjaHBvaW50LT5hcHBlbmQoYXJnLCBWYWx1ZVJlcDo6
U29tZVJlZ2lzdGVyKTsKQEAgLTExMTgsOCArMTE4Miw4IEBAIGF1dG8gQjNJUkdlbmVyYXRvcjo6
YWRkT3A8T3BUeXBlOjpJMzJUcnUKICAgICAgICAgbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxW
YWx1ZT4obV9wcm9jLCBHcmVhdGVyRXF1YWwsIE9yaWdpbigpLCBhcmcsIG1pbikpOwogICAgIG91
dE9mQm91bmRzID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxWYWx1ZT4obV9wcm9jLCBFcXVh
bCwgT3JpZ2luKCksIG91dE9mQm91bmRzLCB6ZXJvRm9yVHlwZShJMzIpKTsKICAgICBDaGVja1Zh
bHVlKiB0cmFwID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxDaGVja1ZhbHVlPihtX3Byb2Ms
IENoZWNrLCBPcmlnaW4oKSwgb3V0T2ZCb3VuZHMpOwotICAgIHRyYXAtPnNldEdlbmVyYXRvcihb
XSAoQ0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0IFN0YWNrbWFwR2VuZXJhdGlvblBhcmFtcyYpIHsK
LSAgICAgICAgaml0LmJyZWFrcG9pbnQoKTsKKyAgICB0cmFwLT5zZXRHZW5lcmF0b3IoWz1dIChD
Q2FsbEhlbHBlcnMmIGppdCwgY29uc3QgU3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zJikgeworICAg
ICAgICB0aGlzLT5lbWl0RXhjZXB0aW9uQ2hlY2soaml0LCBFeGNlcHRpb25UeXBlOjpPdXRPZkJv
dW5kc1RydW5jKTsKICAgICB9KTsKICAgICBQYXRjaHBvaW50VmFsdWUqIHBhdGNocG9pbnQgPSBt
X2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFBhdGNocG9pbnRWYWx1ZT4obV9wcm9jLCBJbnQzMiwg
T3JpZ2luKCkpOwogICAgIHBhdGNocG9pbnQtPmFwcGVuZChhcmcsIFZhbHVlUmVwOjpTb21lUmVn
aXN0ZXIpOwpAQCAtMTE0Miw4ICsxMjA2LDggQEAgYXV0byBCM0lSR2VuZXJhdG9yOjphZGRPcDxP
cFR5cGU6OkkzMlRydQogICAgICAgICBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFZhbHVlPiht
X3Byb2MsIEdyZWF0ZXJUaGFuLCBPcmlnaW4oKSwgYXJnLCBtaW4pKTsKICAgICBvdXRPZkJvdW5k
cyA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8VmFsdWU+KG1fcHJvYywgRXF1YWwsIE9yaWdp
bigpLCBvdXRPZkJvdW5kcywgemVyb0ZvclR5cGUoSTMyKSk7CiAgICAgQ2hlY2tWYWx1ZSogdHJh
cCA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8Q2hlY2tWYWx1ZT4obV9wcm9jLCBDaGVjaywg
T3JpZ2luKCksIG91dE9mQm91bmRzKTsKLSAgICB0cmFwLT5zZXRHZW5lcmF0b3IoW10gKENDYWxs
SGVscGVycyYgaml0LCBjb25zdCBTdGFja21hcEdlbmVyYXRpb25QYXJhbXMmKSB7Ci0gICAgICAg
IGppdC5icmVha3BvaW50KCk7CisgICAgdHJhcC0+c2V0R2VuZXJhdG9yKFs9XSAoQ0NhbGxIZWxw
ZXJzJiBqaXQsIGNvbnN0IFN0YWNrbWFwR2VuZXJhdGlvblBhcmFtcyYpIHsKKyAgICAgICAgdGhp
cy0+ZW1pdEV4Y2VwdGlvbkNoZWNrKGppdCwgRXhjZXB0aW9uVHlwZTo6T3V0T2ZCb3VuZHNUcnVu
Yyk7CiAgICAgfSk7CiAgICAgUGF0Y2hwb2ludFZhbHVlKiBwYXRjaHBvaW50ID0gbV9jdXJyZW50
QmxvY2stPmFwcGVuZE5ldzxQYXRjaHBvaW50VmFsdWU+KG1fcHJvYywgSW50MzIsIE9yaWdpbigp
KTsKICAgICBwYXRjaHBvaW50LT5hcHBlbmQoYXJnLCBWYWx1ZVJlcDo6U29tZVJlZ2lzdGVyKTsK
QEAgLTExNjUsOCArMTIyOSw4IEBAIGF1dG8gQjNJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpJ
MzJUcnUKICAgICAgICAgbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxWYWx1ZT4obV9wcm9jLCBH
cmVhdGVyVGhhbiwgT3JpZ2luKCksIGFyZywgbWluKSk7CiAgICAgb3V0T2ZCb3VuZHMgPSBtX2N1
cnJlbnRCbG9jay0+YXBwZW5kTmV3PFZhbHVlPihtX3Byb2MsIEVxdWFsLCBPcmlnaW4oKSwgb3V0
T2ZCb3VuZHMsIHplcm9Gb3JUeXBlKEkzMikpOwogICAgIENoZWNrVmFsdWUqIHRyYXAgPSBtX2N1
cnJlbnRCbG9jay0+YXBwZW5kTmV3PENoZWNrVmFsdWU+KG1fcHJvYywgQ2hlY2ssIE9yaWdpbigp
LCBvdXRPZkJvdW5kcyk7Ci0gICAgdHJhcC0+c2V0R2VuZXJhdG9yKFtdIChDQ2FsbEhlbHBlcnMm
IGppdCwgY29uc3QgU3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zJikgewotICAgICAgICBqaXQuYnJl
YWtwb2ludCgpOworICAgIHRyYXAtPnNldEdlbmVyYXRvcihbPV0gKENDYWxsSGVscGVycyYgaml0
LCBjb25zdCBTdGFja21hcEdlbmVyYXRpb25QYXJhbXMmKSB7CisgICAgICAgIHRoaXMtPmVtaXRF
eGNlcHRpb25DaGVjayhqaXQsIEV4Y2VwdGlvblR5cGU6Ok91dE9mQm91bmRzVHJ1bmMpOwogICAg
IH0pOwogICAgIFBhdGNocG9pbnRWYWx1ZSogcGF0Y2hwb2ludCA9IG1fY3VycmVudEJsb2NrLT5h
cHBlbmROZXc8UGF0Y2hwb2ludFZhbHVlPihtX3Byb2MsIEludDMyLCBPcmlnaW4oKSk7CiAgICAg
cGF0Y2hwb2ludC0+YXBwZW5kKGFyZywgVmFsdWVSZXA6OlNvbWVSZWdpc3Rlcik7CkBAIC0xMTg4
LDggKzEyNTIsOCBAQCBhdXRvIEIzSVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6STY0VHJ1CiAg
ICAgICAgIG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8VmFsdWU+KG1fcHJvYywgR3JlYXRlckVx
dWFsLCBPcmlnaW4oKSwgYXJnLCBtaW4pKTsKICAgICBvdXRPZkJvdW5kcyA9IG1fY3VycmVudEJs
b2NrLT5hcHBlbmROZXc8VmFsdWU+KG1fcHJvYywgRXF1YWwsIE9yaWdpbigpLCBvdXRPZkJvdW5k
cywgemVyb0ZvclR5cGUoSTMyKSk7CiAgICAgQ2hlY2tWYWx1ZSogdHJhcCA9IG1fY3VycmVudEJs
b2NrLT5hcHBlbmROZXc8Q2hlY2tWYWx1ZT4obV9wcm9jLCBDaGVjaywgT3JpZ2luKCksIG91dE9m
Qm91bmRzKTsKLSAgICB0cmFwLT5zZXRHZW5lcmF0b3IoW10gKENDYWxsSGVscGVycyYgaml0LCBj
b25zdCBTdGFja21hcEdlbmVyYXRpb25QYXJhbXMmKSB7Ci0gICAgICAgIGppdC5icmVha3BvaW50
KCk7CisgICAgdHJhcC0+c2V0R2VuZXJhdG9yKFs9XSAoQ0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0
IFN0YWNrbWFwR2VuZXJhdGlvblBhcmFtcyYpIHsKKyAgICAgICAgdGhpcy0+ZW1pdEV4Y2VwdGlv
bkNoZWNrKGppdCwgRXhjZXB0aW9uVHlwZTo6T3V0T2ZCb3VuZHNUcnVuYyk7CiAgICAgfSk7CiAg
ICAgUGF0Y2hwb2ludFZhbHVlKiBwYXRjaHBvaW50ID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5l
dzxQYXRjaHBvaW50VmFsdWU+KG1fcHJvYywgSW50NjQsIE9yaWdpbigpKTsKICAgICBwYXRjaHBv
aW50LT5hcHBlbmQoYXJnLCBWYWx1ZVJlcDo6U29tZVJlZ2lzdGVyKTsKQEAgLTEyMTEsOCArMTI3
NSw4IEBAIGF1dG8gQjNJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpJNjRUcnUKICAgICAgICAg
bV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxWYWx1ZT4obV9wcm9jLCBHcmVhdGVyVGhhbiwgT3Jp
Z2luKCksIGFyZywgbWluKSk7CiAgICAgb3V0T2ZCb3VuZHMgPSBtX2N1cnJlbnRCbG9jay0+YXBw
ZW5kTmV3PFZhbHVlPihtX3Byb2MsIEVxdWFsLCBPcmlnaW4oKSwgb3V0T2ZCb3VuZHMsIHplcm9G
b3JUeXBlKEkzMikpOwogICAgIENoZWNrVmFsdWUqIHRyYXAgPSBtX2N1cnJlbnRCbG9jay0+YXBw
ZW5kTmV3PENoZWNrVmFsdWU+KG1fcHJvYywgQ2hlY2ssIE9yaWdpbigpLCBvdXRPZkJvdW5kcyk7
Ci0gICAgdHJhcC0+c2V0R2VuZXJhdG9yKFtdIChDQ2FsbEhlbHBlcnMmIGppdCwgY29uc3QgU3Rh
Y2ttYXBHZW5lcmF0aW9uUGFyYW1zJikgewotICAgICAgICBqaXQuYnJlYWtwb2ludCgpOworICAg
IHRyYXAtPnNldEdlbmVyYXRvcihbPV0gKENDYWxsSGVscGVycyYgaml0LCBjb25zdCBTdGFja21h
cEdlbmVyYXRpb25QYXJhbXMmKSB7CisgICAgICAgIHRoaXMtPmVtaXRFeGNlcHRpb25DaGVjayhq
aXQsIEV4Y2VwdGlvblR5cGU6Ok91dE9mQm91bmRzVHJ1bmMpOwogICAgIH0pOwogCiAgICAgVmFs
dWUqIGNvbnN0YW50OwpAQCAtMTI1Myw4ICsxMzE3LDggQEAgYXV0byBCM0lSR2VuZXJhdG9yOjph
ZGRPcDxPcFR5cGU6Okk2NFRydQogICAgICAgICBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFZh
bHVlPihtX3Byb2MsIEdyZWF0ZXJFcXVhbCwgT3JpZ2luKCksIGFyZywgbWluKSk7CiAgICAgb3V0
T2ZCb3VuZHMgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFZhbHVlPihtX3Byb2MsIEVxdWFs
LCBPcmlnaW4oKSwgb3V0T2ZCb3VuZHMsIHplcm9Gb3JUeXBlKEkzMikpOwogICAgIENoZWNrVmFs
dWUqIHRyYXAgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PENoZWNrVmFsdWU+KG1fcHJvYywg
Q2hlY2ssIE9yaWdpbigpLCBvdXRPZkJvdW5kcyk7Ci0gICAgdHJhcC0+c2V0R2VuZXJhdG9yKFtd
IChDQ2FsbEhlbHBlcnMmIGppdCwgY29uc3QgU3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zJikgewot
ICAgICAgICBqaXQuYnJlYWtwb2ludCgpOworICAgIHRyYXAtPnNldEdlbmVyYXRvcihbPV0gKEND
YWxsSGVscGVycyYgaml0LCBjb25zdCBTdGFja21hcEdlbmVyYXRpb25QYXJhbXMmKSB7CisgICAg
ICAgIHRoaXMtPmVtaXRFeGNlcHRpb25DaGVjayhqaXQsIEV4Y2VwdGlvblR5cGU6Ok91dE9mQm91
bmRzVHJ1bmMpOwogICAgIH0pOwogICAgIFBhdGNocG9pbnRWYWx1ZSogcGF0Y2hwb2ludCA9IG1f
Y3VycmVudEJsb2NrLT5hcHBlbmROZXc8UGF0Y2hwb2ludFZhbHVlPihtX3Byb2MsIEludDY0LCBP
cmlnaW4oKSk7CiAgICAgcGF0Y2hwb2ludC0+YXBwZW5kKGFyZywgVmFsdWVSZXA6OlNvbWVSZWdp
c3Rlcik7CkBAIC0xMjc2LDggKzEzNDAsOCBAQCBhdXRvIEIzSVJHZW5lcmF0b3I6OmFkZE9wPE9w
VHlwZTo6STY0VHJ1CiAgICAgICAgIG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8VmFsdWU+KG1f
cHJvYywgR3JlYXRlclRoYW4sIE9yaWdpbigpLCBhcmcsIG1pbikpOwogICAgIG91dE9mQm91bmRz
ID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxWYWx1ZT4obV9wcm9jLCBFcXVhbCwgT3JpZ2lu
KCksIG91dE9mQm91bmRzLCB6ZXJvRm9yVHlwZShJMzIpKTsKICAgICBDaGVja1ZhbHVlKiB0cmFw
ID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxDaGVja1ZhbHVlPihtX3Byb2MsIENoZWNrLCBP
cmlnaW4oKSwgb3V0T2ZCb3VuZHMpOwotICAgIHRyYXAtPnNldEdlbmVyYXRvcihbXSAoQ0NhbGxI
ZWxwZXJzJiBqaXQsIGNvbnN0IFN0YWNrbWFwR2VuZXJhdGlvblBhcmFtcyYpIHsKLSAgICAgICAg
aml0LmJyZWFrcG9pbnQoKTsKKyAgICB0cmFwLT5zZXRHZW5lcmF0b3IoWz1dIChDQ2FsbEhlbHBl
cnMmIGppdCwgY29uc3QgU3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zJikgeworICAgICAgICB0aGlz
LT5lbWl0RXhjZXB0aW9uQ2hlY2soaml0LCBFeGNlcHRpb25UeXBlOjpPdXRPZkJvdW5kc1RydW5j
KTsKICAgICB9KTsKIAogICAgIFZhbHVlKiBjb25zdGFudDsK
</data>
<flag name="review"
          id="319600"
          type_id="1"
          status="-"
          setter="keith_miller"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>297302</attachid>
            <date>2016-12-15 23:29:40 -0800</date>
            <delta_ts>2016-12-15 23:34:55 -0800</delta_ts>
            <desc>patch</desc>
            <filename>a-backup.diff</filename>
            <type>text/plain</type>
            <size>44751</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IEpTVGVzdHMvd2FzbS9mdW5jdGlvbi10ZXN0cy9leGNlcHRpb25zLmpzCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIEpTVGVzdHMvd2FzbS9mdW5jdGlvbi10ZXN0cy9leGNlcHRpb25zLmpzCShub25leGlz
dGVudCkKKysrIEpTVGVzdHMvd2FzbS9mdW5jdGlvbi10ZXN0cy9leGNlcHRpb25zLmpzCSh3b3Jr
aW5nIGNvcHkpCkBAIC0wLDAgKzEsNjcgQEAKK2ltcG9ydCBCdWlsZGVyIGZyb20gJy4uL0J1aWxk
ZXIuanMnCitpbXBvcnQgKiBhcyBhc3NlcnQgZnJvbSAnLi4vYXNzZXJ0LmpzJworCitmdW5jdGlv
biBtYWtlSW5zdGFuY2UoKSB7CisgICAgY29uc3QgdGFibGVEZXNjcmlwdGlvbiA9IHtpbml0aWFs
OiAxLCBlbGVtZW50OiAiYW55ZnVuYyJ9OworICAgIGNvbnN0IGJ1aWxkZXIgPSBuZXcgQnVpbGRl
cigpCisgICAgICAgIC5UeXBlKCkKKyAgICAgICAgICAgIC5GdW5jKFsiaTMyIiwgImkzMiJdLCAi
aTMyIikKKyAgICAgICAgICAgIC5GdW5jKFsiaTMyIl0sICJpMzIiKQorICAgICAgICAuRW5kKCkK
KyAgICAgICAgLkltcG9ydCgpCisgICAgICAgICAgICAuVGFibGUoImltcCIsICJ0YWJsZSIsIHRh
YmxlRGVzY3JpcHRpb24pCisgICAgICAgIC5FbmQoKQorICAgICAgICAuRnVuY3Rpb24oKS5FbmQo
KQorICAgICAgICAuRXhwb3J0KCkKKyAgICAgICAgICAgIC5GdW5jdGlvbigiZm9vIikKKyAgICAg
ICAgICAgIC5GdW5jdGlvbigiYmFyIikKKyAgICAgICAgLkVuZCgpCisgICAgICAgIC5Db2RlKCkK
KyAgICAgICAgICAgIC5GdW5jdGlvbigiZm9vIiwgMCAvKlsnaTMyJywgJ2kzMiddID0+ICdpMzIn
Ki8pCisgICAgICAgICAgICAgICAgLkdldExvY2FsKDEpIC8vIHBhcmFtZXRlciB0byBjYWxsCisg
ICAgICAgICAgICAgICAgLkdldExvY2FsKDApIC8vIGNhbGwgaW5kZXgKKyAgICAgICAgICAgICAg
ICAuQ2FsbEluZGlyZWN0KDEsIDApIC8vIGNhbGxpbmcgZnVuY3Rpb24gb2YgdHlwZSBbJ2kzMidd
ID0+ICdpMzInCisgICAgICAgICAgICAgICAgLlJldHVybigpCisgICAgICAgICAgICAuRW5kKCkK
KyAgICAgICAgICAgIC5GdW5jdGlvbigiYmFyIiwgMSAvKlsnaTMyJ10gPT4gJ2kzMicqLykKKyAg
ICAgICAgICAgICAgICAuR2V0TG9jYWwoMCkKKyAgICAgICAgICAgICAgICAuSTMyQ29uc3QoNDIp
CisgICAgICAgICAgICAgICAgLkkzMkFkZCgpCisgICAgICAgICAgICAgICAgLlJldHVybigpCisg
ICAgICAgICAgICAuRW5kKCkKKyAgICAgICAgLkVuZCgpOworCisKKyAgICBjb25zdCBiaW4gPSBi
dWlsZGVyLldlYkFzc2VtYmx5KCkuZ2V0KCk7CisgICAgY29uc3QgbW9kdWxlID0gbmV3IFdlYkFz
c2VtYmx5Lk1vZHVsZShiaW4pOworICAgIGNvbnN0IHRhYmxlID0gbmV3IFdlYkFzc2VtYmx5LlRh
YmxlKHRhYmxlRGVzY3JpcHRpb24pOworICAgIHJldHVybiB7aW5zdGFuY2U6IG5ldyBXZWJBc3Nl
bWJseS5JbnN0YW5jZShtb2R1bGUsIHtpbXA6IHt0YWJsZX19KSwgdGFibGV9OworfQorCit7Cisg
ICAgY29uc3Qge2luc3RhbmNlLCB0YWJsZX0gPSBtYWtlSW5zdGFuY2UoKTsKKyAgICBjb25zdCBm
b28gPSBpbnN0YW5jZS5leHBvcnRzLmZvbzsKKyAgICBjb25zdCBiYXIgPSBpbnN0YW5jZS5leHBv
cnRzLmJhcjsKKyAgICBhc3NlcnQuZXEodGFibGUuZ2V0KDApLCBudWxsKTsKKworICAgIGZvciAo
bGV0IGkgPSAwOyBpIDwgMTAwMDsgaSsrKSB7CisgICAgICAgIGFzc2VydC50aHJvd3MoKCkgPT4g
Zm9vKDAsIGkpLCBXZWJBc3NlbWJseS5SdW50aW1lRXJyb3IsICJjYWxsX2luZGlyZWN0IHRvIGEg
bnVsbCB0YWJsZSBlbnRyeSIpOworICAgIH0KKworICAgIHRhYmxlLnNldCgwLCBmb28pOworICAg
IGFzc2VydC5lcSh0YWJsZS5nZXQoMCksIGZvbyk7CisKKyAgICBmb3IgKGxldCBpID0gMDsgaSA8
IDEwMDA7IGkrKykgeworICAgICAgICBhc3NlcnQudGhyb3dzKCgpID0+IGZvbygxICsgaSwgaSks
IFdlYkFzc2VtYmx5LlJ1bnRpbWVFcnJvciwgIk91dCBvZiBib3VuZHMgY2FsbF9pbmRpcmVjdCIp
OworICAgIH0KKworICAgIGZvciAobGV0IGkgPSAwOyBpIDwgMTAwMDsgaSsrKSB7CisgICAgICAg
IGFzc2VydC50aHJvd3MoKCkgPT4gZm9vKDAsIGkpLCBXZWJBc3NlbWJseS5SdW50aW1lRXJyb3Is
ICJjYWxsX2luZGlyZWN0IHRvIGEgc2lnbmF0dXJlIHRoYXQgZG9lcyBub3QgbWF0Y2giKTsKKyAg
ICB9CisKKyAgICB0YWJsZS5zZXQoMCwgYmFyKTsKKyAgICBhc3NlcnQuZXEodGFibGUuZ2V0KDAp
LCBiYXIpOworICAgIGZvciAobGV0IGkgPSAwOyBpIDwgMjU7IGkrKykgeworICAgICAgICBhc3Nl
cnQuZXEoZm9vKDAsIGkpLCBpICsgNDIpOworICAgIH0KK30KSW5kZXg6IEpTVGVzdHMvd2FzbS9m
dW5jdGlvbi10ZXN0cy90YWJsZS1iYXNpYy5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKU1Rlc3RzL3dhc20v
ZnVuY3Rpb24tdGVzdHMvdGFibGUtYmFzaWMuanMJKHJldmlzaW9uIDIwOTg4NikKKysrIEpTVGVz
dHMvd2FzbS9mdW5jdGlvbi10ZXN0cy90YWJsZS1iYXNpYy5qcwkod29ya2luZyBjb3B5KQpAQCAt
NTMsMTUgKzUzLDEyIEBAIGZ1bmN0aW9uIG1ha2VJbnN0YW5jZSgpIHsKIC8vIEZJWE1FOiBtYWtl
IHRoaXMgd29yayBjcm9zcyBtb2R1bGUuIFRoZSByZWFzb24gaXQgZG9lc24ndAogLy8gbm93IGlz
IHRoYXQgd2UgZG9uJ3QgdW5pcXVlIFNpZ25hdHVyZSouCiAvLyBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTY1NTExCi0vKgogewogICAgIGNvbnN0IHtpbnN0YW5jZSwg
dGFibGV9ID0gbWFrZUluc3RhbmNlKCk7CiAgICAgY29uc3QgZm9vID0gaW5zdGFuY2UuZXhwb3J0
cy5mb287Ci0gICAgLy90YWJsZS5zZXQoMCwgbWFrZUluc3RhbmNlKCkuaW5zdGFuY2UuZXhwb3J0
cy5iYXIpOyAvLyBDcm9zcyBpbnN0YW5jZSBmdW5jdGlvbi4KKyAgICB0YWJsZS5zZXQoMCwgbWFr
ZUluc3RhbmNlKCkuaW5zdGFuY2UuZXhwb3J0cy5iYXIpOyAvLyBDcm9zcyBpbnN0YW5jZSBmdW5j
dGlvbi4KIAogICAgIGZvciAobGV0IGkgPSAwOyBpIDwgMTAwMDsgaSsrKSB7Ci0gICAgICAgIGlm
IChmb28oMCwgaSkgIT09IGkgKyA0MikKLSAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcigiQmFk
IGNhbGwgaW5kaXJlY3QiKTsKKyAgICAgICAgYXNzZXJ0LnRocm93cygoKSA9PiBmb28oMCwgaSks
IFdlYkFzc2VtYmx5LlJ1bnRpbWVFcnJvciwgImNhbGxfaW5kaXJlY3QgdG8gYSBzaWduYXR1cmUg
dGhhdCBkb2VzIG5vdCBtYXRjaCIpOwogICAgIH0KIH0KLSovCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvQ01ha2VMaXN0cy50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL0NNYWtlTGlzdHMudHh0CShyZXZpc2lvbiAyMDk4ODYpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ01ha2VMaXN0cy50eHQJKHdvcmtpbmcgY29weSkKQEAgLTExNiw2ICsxMTYsNyBAQCBz
ZXQoSmF2YVNjcmlwdENvcmVfU09VUkNFUwogICAgIGIzL0IzQ2hlY2tWYWx1ZS5jcHAKICAgICBi
My9CM0NvbW1vbi5jcHAKICAgICBiMy9CM0NvbW11dGF0aXZpdHkuY3BwCisgICAgYjMvQjNDb21w
aWxlLmNwcAogICAgIGIzL0IzQ29tcGlsYXRpb24uY3BwCiAgICAgYjMvQjNDb25zdDMyVmFsdWUu
Y3BwCiAgICAgYjMvQjNDb25zdDY0VmFsdWUuY3BwCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3Qu
cGJ4cHJvagkocmV2aXNpb24gMjA5ODg2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFT
Y3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTEz
MDMsNyArMTMwMyw3IEBACiAJCTUzRkEyQUUxMUNGMzdGM0YwMDIyNzExRCAvKiBMTEludFByb3Rv
dHlwZUxvYWRBZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9pbnQuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUzRkEyQUUwMUNGMzdGM0YwMDIyNzExRCAvKiBM
TEludFByb3RvdHlwZUxvYWRBZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9pbnQuaCAqLzsgc2V0dGlu
Z3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk1M0ZBMkFFMzFDRjM4MDM5
MDAyMjcxMUQgLyogTExJbnRQcm90b3R5cGVMb2FkQWRhcHRpdmVTdHJ1Y3R1cmVXYXRjaHBvaW50
LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUzRkEy
QUUyMUNGMzgwMzkwMDIyNzExRCAvKiBMTEludFByb3RvdHlwZUxvYWRBZGFwdGl2ZVN0cnVjdHVy
ZVdhdGNocG9pbnQuY3BwICovOyB9OwogCQk1M0ZEMDREMzFEN0FCMjc3MDAzMjg3RDMgLyogV2Fz
bUNhbGxpbmdDb252ZW50aW9uLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDUzRkQwNEQxMUQ3QUIxODcwMDMyODdEMyAvKiBXYXNtQ2FsbGluZ0NvbnZl
bnRpb24uY3BwICovOyB9OwotCQk1M0ZEMDRENDFEN0FCMjkxMDAzMjg3RDMgLyogV2FzbUNhbGxp
bmdDb252ZW50aW9uLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSA1M0ZEMDREMjFEN0FCMTg3MDAzMjg3RDMgLyogV2FzbUNhbGxpbmdDb252ZW50aW9uLmgg
Ki87IH07CisJCTUzRkQwNEQ0MUQ3QUIyOTEwMDMyODdEMyAvKiBXYXNtQ2FsbGluZ0NvbnZlbnRp
b24uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUzRkQw
NEQyMUQ3QUIxODcwMDMyODdEMyAvKiBXYXNtQ2FsbGluZ0NvbnZlbnRpb24uaCAqLzsgc2V0dGlu
Z3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk1M0ZGN0Y5OTFEQkZDRDkw
MDBBMjZDQ0MgLyogV2FzbVZhbGlkYXRlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSA1M0ZGN0Y5ODFEQkZDRDkwMDBBMjZDQ0MgLyogV2FzbVZhbGlkYXRl
LmggKi87IH07CiAJCTUzRkY3RjlCMURCRkQyQjkwMEEyNkNDQyAvKiBXYXNtVmFsaWRhdGUuY3Bw
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTNGRjdGOUEx
REJGRDJCOTAwQTI2Q0NDIC8qIFdhc21WYWxpZGF0ZS5jcHAgKi87IH07CiAJCTVCNzBDRkRFMURC
NjlFNjYwMEVDMjNGOSAvKiBKU0FzeW5jRnVuY3Rpb24uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDVCNzBDRkQ4MURCNjlFNUMwMEVDMjNGOSAvKiBKU0Fz
eW5jRnVuY3Rpb24uaCAqLzsgfTsKQEAgLTE0MDcsMTEgKzE0MDcsMTMgQEAKIAkJNzkwNUJCNjkx
RDEyMDUwRTAwMTlGRTU3IC8qIElubGluZUFjY2Vzcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzkwNUJCNjcxRDEyMDUwRTAwMTlGRTU3IC8qIElubGlu
ZUFjY2Vzcy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07
CiAJCTc5MTYwREJEMUM4RTNFQzgwMDhDMDg1QSAvKiBQcm94eVJldm9rZS5jcHAgaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3OTE2MERCQjFDOEUzRUM4MDA4
QzA4NUEgLyogUHJveHlSZXZva2UuY3BwICovOyB9OwogCQk3OTE2MERCRTFDOEUzRUM4MDA4QzA4
NUEgLyogUHJveHlSZXZva2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDc5MTYwREJDMUM4RTNFQzgwMDhDMDg1QSAvKiBQcm94eVJldm9rZS5oICovOyBz
ZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTc5MTlCNzgwMUUw
MzU1OUMwMDVCRUVEOCAvKiBCM0NvbXBpbGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDc5MTlCNzdGMUUwMzU1OUMwMDVCRUVEOCAvKiBCM0NvbXBpbGUu
aCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk3OTIz
M0MyQjFEMzQ3MTU3MDBDNUE4MzQgLyogSklUTWF0aElDLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3OTIzM0MyOTFEMzQ3MTU3MDBDNUE4MzQgLyogSklU
TWF0aElDLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsK
IAkJNzkyQ0IzNDkxQzRFRUQ1QzAwRDEzQUYzIC8qIFBDVG9Db2RlT3JpZ2luTWFwLmNwcCBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDc5MkNCMzQ3MUM0RUVE
NUMwMEQxM0FGMyAvKiBQQ1RvQ29kZU9yaWdpbk1hcC5jcHAgKi87IH07CiAJCTc5MkNCMzRBMUM0
RUVENUMwMEQxM0FGMyAvKiBQQ1RvQ29kZU9yaWdpbk1hcC5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzkyQ0IzNDgxQzRFRUQ1QzAwRDEzQUYzIC8qIFBD
VG9Db2RlT3JpZ2luTWFwLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwg
KTsgfTsgfTsKIAkJNzk1QjE5OTcxRDc4QkUzNTAwMjYyRkEwIC8qIE1hcEJhc2UuY3BwIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzk1QjE5OTUxRDc4QkUz
NTAwMjYyRkEwIC8qIE1hcEJhc2UuY3BwICovOyB9OwogCQk3OTVCMTk5ODFENzhCRTM1MDAyNjJG
QTAgLyogTWFwQmFzZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gNzk1QjE5OTYxRDc4QkUzNTAwMjYyRkEwIC8qIE1hcEJhc2UuaCAqLzsgc2V0dGluZ3Mg
PSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQk3OTVGMDk5RDFFMDM2MDA1MDBC
QkUzN0YgLyogQjNDb21waWxlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDc5NUYwOTlDMUUwMzYwMDUwMEJCRTM3RiAvKiBCM0NvbXBpbGUuY3BwICov
OyB9OwogCQk3OTY0NjU2QTFCOTUyRkYwMDAzMDU5RUUgLyogR2V0UHV0SW5mby5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzk2NDY1NjgxQjk1MkZGMDAw
MzA1OUVFIC8qIEdldFB1dEluZm8uaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2
YXRlLCApOyB9OyB9OwogCQk3OTZGQjQzQTFERkY4QzNGMDAzOUM5NUQgLyogSlNXZWJBc3NlbWJs
eUhlbHBlcnMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDc5NkZCNDM5MURGRjhDM0YwMDM5Qzk1RCAvKiBKU1dlYkFzc2VtYmx5SGVscGVycy5oICovOyBz
ZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTc5N0UwN0E5MUI4
RkNGQjkwMDg0MDBCQSAvKiBKU0dsb2JhbExleGljYWxFbnZpcm9ubWVudC5jcHAgaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3OTdFMDdBNzFCOEZDRkI5MDA4
NDAwQkEgLyogSlNHbG9iYWxMZXhpY2FsRW52aXJvbm1lbnQuY3BwICovOyB9OwpAQCAtMTQzOCw2
ICsxNDQwLDcgQEAKIAkJNzlDRkM2RjAxQzMzQjEwMDAwQzc2OEVBIC8qIExMSW50UENSYW5nZXMu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDc5Q0ZDNkVG
MUMzM0IxMDAwMEM3NjhFQSAvKiBMTEludFBDUmFuZ2VzLmggKi87IHNldHRpbmdzID0ge0FUVFJJ
QlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNzlENUNENUExQzExMDZBOTAwQ0VDQTA3IC8q
IFNhbXBsaW5nUHJvZmlsZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gNzlENUNENTgxQzExMDZBOTAwQ0VDQTA3IC8qIFNhbXBsaW5nUHJvZmlsZXIu
Y3BwICovOyB9OwogCQk3OUQ1Q0Q1QjFDMTEwNkE5MDBDRUNBMDcgLyogU2FtcGxpbmdQcm9maWxl
ci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzlENUNE
NTkxQzExMDZBOTAwQ0VDQTA3IC8qIFNhbXBsaW5nUHJvZmlsZXIuaCAqLzsgc2V0dGluZ3MgPSB7
QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQk3OURBRTI3QTFFMDNDODIyMDBCNTI2
QUEgLyogV2FzbUV4Y2VwdGlvblR5cGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDc5REFFMjc5MUUwM0M4MjIwMEI1MjZBQSAvKiBXYXNtRXhjZXB0aW9u
VHlwZS5oICovOyB9OwogCQk3OURGQ0JEQjFEODhDNTk2MDA1MjdEMDMgLyogSGFzT3duUHJvcGVy
dHlDYWNoZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
NzlERkNCREExRDg4QzU5NjAwNTI3RDAzIC8qIEhhc093blByb3BlcnR5Q2FjaGUuaCAqLzsgc2V0
dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk3OUU0MjNFMjFERUU2
NTMyMDA3OEQzNTUgLyogSlNXZWJBc3NlbWJseUNhbGxlZS5jcHAgaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3OUU0MjNFMDFERUU2NTMyMDA3OEQzNTUgLyog
SlNXZWJBc3NlbWJseUNhbGxlZS5jcHAgKi87IH07CiAJCTc5RTQyM0UzMURFRTY1MzIwMDc4RDM1
NSAvKiBKU1dlYkFzc2VtYmx5Q2FsbGVlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSA3OUU0MjNFMTFERUU2NTMyMDA3OEQzNTUgLyogSlNXZWJBc3NlbWJs
eUNhbGxlZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07
CkBAIC0zODM3LDExICszODQwLDEzIEBACiAJCTc5MDVCQjY3MUQxMjA1MEUwMDE5RkU1NyAvKiBJ
bmxpbmVBY2Nlc3MuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSW5saW5lQWNj
ZXNzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTc5MTYwREJCMUM4RTNFQzgwMDhD
MDg1QSAvKiBQcm94eVJldm9rZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBh
dGggPSBQcm94eVJldm9rZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTc5MTYw
REJDMUM4RTNFQzgwMDhDMDg1QSAvKiBQcm94eVJldm9rZS5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBQcm94eVJldm9rZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQk3OTE5Qjc3RjFFMDM1NTlDMDA1QkVFRDggLyogQjNDb21waWxlLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgbmFtZSA9IEIzQ29tcGlsZS5oOyBwYXRoID0gYjMvQjNDb21waWxlLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTc5MjMzQzI5MUQzNDcxNTcwMEM1QTgzNCAvKiBK
SVRNYXRoSUMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSklUTWF0aElDLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTc5MkNCMzQ3MUM0RUVENUMwMEQxM0FGMyAv
KiBQQ1RvQ29kZU9yaWdpbk1hcC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBh
dGggPSBQQ1RvQ29kZU9yaWdpbk1hcC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTc5MkNCMzQ4MUM0RUVENUMwMEQxM0FGMyAvKiBQQ1RvQ29kZU9yaWdpbk1hcC5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBQQ1RvQ29kZU9yaWdpbk1hcC5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQk3OTVCMTk5NTFENzhCRTM1MDAyNjJGQTAgLyogTWFwQmFzZS5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBNYXBCYXNlLmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzk1QjE5OTYxRDc4QkUzNTAwMjYyRkEwIC8qIE1h
cEJhc2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTWFwQmFzZS5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3OTVGMDk5QzFFMDM2MDA1MDBCQkUzN0YgLyogQjND
b21waWxlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEIzQ29tcGls
ZS5jcHA7IHBhdGggPSBiMy9CM0NvbXBpbGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQk3OTY0NjU2ODFCOTUyRkYwMDAzMDU5RUUgLyogR2V0UHV0SW5mby5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBHZXRQdXRJbmZvLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTc5NkZCNDM5MURGRjhDM0YwMDM5Qzk1RCAvKiBKU1dlYkFzc2VtYmx5SGVscGVy
cy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBKU1dlYkFzc2VtYmx5SGVscGVy
cy5oOyBwYXRoID0ganMvSlNXZWJBc3NlbWJseUhlbHBlcnMuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJNzk3RTA3QTcxQjhGQ0ZCOTAwODQwMEJBIC8qIEpTR2xvYmFsTGV4aWNhbEVu
dmlyb25tZW50LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTR2xv
YmFsTGV4aWNhbEVudmlyb25tZW50LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAg
LTM4NjgsNiArMzg3Myw3IEBACiAJCTc5Q0ZDNkVGMUMzM0IxMDAwMEM3NjhFQSAvKiBMTEludFBD
UmFuZ2VzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IExMSW50UENSYW5nZXMu
aDsgcGF0aCA9IGxsaW50L0xMSW50UENSYW5nZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJNzlENUNENTgxQzExMDZBOTAwQ0VDQTA3IC8qIFNhbXBsaW5nUHJvZmlsZXIuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU2FtcGxpbmdQcm9maWxlci5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTc5RDVDRDU5MUMxMTA2QTkwMENFQ0EwNyAv
KiBTYW1wbGluZ1Byb2ZpbGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNh
bXBsaW5nUHJvZmlsZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzlEQUUyNzkx
RTAzQzgyMjAwQjUyNkFBIC8qIFdhc21FeGNlcHRpb25UeXBlLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IFdhc21FeGNlcHRpb25UeXBlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTc5REZDQkRBMUQ4OEM1OTYwMDUyN0QwMyAvKiBIYXNPd25Qcm9wZXJ0eUNhY2hl
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEhhc093blByb3BlcnR5Q2FjaGUu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzlFNDIzRTAxREVFNjUzMjAwNzhEMzU1
IC8qIEpTV2ViQXNzZW1ibHlDYWxsZWUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBuYW1lID0gSlNXZWJBc3NlbWJseUNhbGxlZS5jcHA7IHBhdGggPSBqcy9KU1dlYkFzc2VtYmx5
Q2FsbGVlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzlFNDIzRTExREVFNjUz
MjAwNzhEMzU1IC8qIEpTV2ViQXNzZW1ibHlDYWxsZWUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBuYW1lID0gSlNXZWJBc3NlbWJseUNhbGxlZS5oOyBwYXRoID0ganMvSlNXZWJBc3NlbWJs
eUNhbGxlZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtNTE4Miw2ICs1MTg4LDgg
QEAKIAkJCQkwRkVDODRDMDFCREFDREFDMDA4MEZGNzQgLyogQjNDb21tb24uaCAqLywKIAkJCQkw
RkVDODRDMTFCREFDREFDMDA4MEZGNzQgLyogQjNDb21tdXRhdGl2aXR5LmNwcCAqLywKIAkJCQkw
RkVDODRDMjFCREFDREFDMDA4MEZGNzQgLyogQjNDb21tdXRhdGl2aXR5LmggKi8sCisJCQkJNzkx
OUI3N0YxRTAzNTU5QzAwNUJFRUQ4IC8qIEIzQ29tcGlsZS5oICovLAorCQkJCTc5NUYwOTlDMUUw
MzYwMDUwMEJCRTM3RiAvKiBCM0NvbXBpbGUuY3BwICovLAogCQkJCTBGMzM4REZGMUJGMDI3NkMw
MDEzQzg4RiAvKiBCM0NvbXBpbGF0aW9uLmNwcCAqLywKIAkJCQkwRjMzOEUwMDFCRjAyNzZDMDAx
M0M4OEYgLyogQjNDb21waWxhdGlvbi5oICovLAogCQkJCTBGODZBRTFGMUM1MzExQzUwMDZCRThF
QyAvKiBCM0NvbXB1dGVEaXZpc2lvbk1hZ2ljLmggKi8sCkBAIC02MDE0LDYgKzYwMjIsNyBAQAog
CQkJCUFENEIxREY4MURGMjQ0RDcwMDcxQUUzMiAvKiBXYXNtQmluZGluZy5oICovLAogCQkJCTUz
RkQwNEQxMUQ3QUIxODcwMDMyODdEMyAvKiBXYXNtQ2FsbGluZ0NvbnZlbnRpb24uY3BwICovLAog
CQkJCTUzRkQwNEQyMUQ3QUIxODcwMDMyODdEMyAvKiBXYXNtQ2FsbGluZ0NvbnZlbnRpb24uaCAq
LywKKwkJCQk3OURBRTI3OTFFMDNDODIyMDBCNTI2QUEgLyogV2FzbUV4Y2VwdGlvblR5cGUuaCAq
LywKIAkJCQlBRDJGQ0MzMjFEQzQwNDUzMDBCM0U3MzYgLyogV2FzbUZvcm1hdC5jcHAgKi8sCiAJ
CQkJN0JDNTQ3RDIxQjY5NTk5QjAwOTU5QjU4IC8qIFdhc21Gb3JtYXQuaCAqLywKIAkJCQk1M0Y0
MEU4QTFENTkwMUJCMDA5OUExQjYgLyogV2FzbUZ1bmN0aW9uUGFyc2VyLmggKi8sCkBAIC04Mjk4
LDYgKzgzMDcsNyBAQAogCQkJCTUyQjMxMEZCMTk3NEFFNjEwMDgwODU3QyAvKiBGdW5jdGlvbkhh
c0V4ZWN1dGVkQ2FjaGUuaCBpbiBIZWFkZXJzICovLAogCQkJCUZFNEJGRjJDMUFENDc2RTcwMDA4
OEY4NyAvKiBGdW5jdGlvbk92ZXJyaWRlcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkMxOEM0MDUw
RTE2RjVDRDAwQjM0NDYwIC8qIEZ1bmN0aW9uUHJvdG90eXBlLmggaW4gSGVhZGVycyAqLywKKwkJ
CQk3OTE5Qjc4MDFFMDM1NTlDMDA1QkVFRDggLyogQjNDb21waWxlLmggaW4gSGVhZGVycyAqLywK
IAkJCQk2MkQyRDM5MDFBREYxMDNGMDAwMjA2QzEgLyogRnVuY3Rpb25SYXJlRGF0YS5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJMkFBQ0U2M0QxOENBNUEwMzAwRUQwMTkxIC8qIEdDQWN0aXZpdHlDYWxs
YmFjay5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRkUzNDIyMTIxRDZCODFDMzAwMzJCRTg4IC8qIFRo
cm93U2NvcGUuaCBpbiBIZWFkZXJzICovLApAQCAtODM1Myw2ICs4MzYzLDcgQEAKIAkJCQkwRjAz
MzJDNDE4QjAxNzYzMDA1Rjk3OUEgLyogR2V0QnlJZFZhcmlhbnQuaCBpbiBIZWFkZXJzICovLAog
CQkJCTc5NjQ2NTZBMUI5NTJGRjAwMDMwNTlFRSAvKiBHZXRQdXRJbmZvLmggaW4gSGVhZGVycyAq
LywKIAkJCQlBRDJGQ0MxQzFEQjU5Q0IyMDBCM0U3MzYgLyogV2ViQXNzZW1ibHlNb2R1bGVDb25z
dHJ1Y3Rvci5sdXQuaCBpbiBIZWFkZXJzICovLAorCQkJCTc5REFFMjdBMUUwM0M4MjIwMEI1MjZB
QSAvKiBXYXNtRXhjZXB0aW9uVHlwZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYyNEU1NDQxN0VB
OUY1OTAwQUJCMjE3IC8qIEdQUkluZm8uaCBpbiBIZWFkZXJzICovLAogCQkJCTE0MkUzMTM0MTM0
RkYwQTYwMEFGQURCNSAvKiBIYW5kbGUuaCBpbiBIZWFkZXJzICovLAogCQkJCUMyODMxOTAwMTZG
RTRCN0QwMDE1N0JGRCAvKiBIYW5kbGVCbG9jay5oIGluIEhlYWRlcnMgKi8sCkBAIC05ODIzLDYg
Kzk4MzQsNyBAQAogCQkJCTBGM0ExQkY5MUE5RUNCN0QwMDBERTAxQSAvKiBERkdQdXRTdGFja1Np
bmtpbmdQaGFzZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBRDJGQ0JFQTFEQjU4REFEMDBCM0U3
MzYgLyogSlNXZWJBc3NlbWJseVRhYmxlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGMkZDQ0ZC
MThBNjAwNzAwMDFBMjdGOCAvKiBERkdTYWZlcG9pbnQuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJ
Nzk1RjA5OUQxRTAzNjAwNTAwQkJFMzdGIC8qIEIzQ29tcGlsZS5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQk4NkVDOUREMjEzMjhERjgyMDAyQjJBRDcgLyogREZHU3BlY3VsYXRpdmVKSVQuY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkJODY4ODBGMUYxNDMyOEJCOTAwQjA4RDQyIC8qIERGR1NwZWN1bGF0
aXZlSklUMzJfNjQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJODY4ODBGNEQxNDM1M0IyMTAwQjA4
RDQyIC8qIERGR1NwZWN1bGF0aXZlSklUNjQuY3BwIGluIFNvdXJjZXMgKi8sCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDb21waWxhdGlvbi5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ29tcGlsYXRpb24uY3BwCShyZXZpc2lvbiAyMDk4ODYp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDb21waWxhdGlvbi5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTI4LDM2ICsyOCwyMyBAQAogCiAjaWYgRU5BQkxFKEIzX0pJVCkKIAotI2luY2x1
ZGUgIkIzR2VuZXJhdGUuaCIKICNpbmNsdWRlICJCM09wYXF1ZUJ5cHJvZHVjdHMuaCIKLSNpbmNs
dWRlICJCM1Byb2NlZHVyZS5oIgotI2luY2x1ZGUgIkIzVGltaW5nU2NvcGUuaCIKICNpbmNsdWRl
ICJDQ2FsbEhlbHBlcnMuaCIKLSNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCi0jaW5jbHVkZSAiTGlu
a0J1ZmZlci5oIgogCiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKIAotQ29tcGlsYXRp
b246OkNvbXBpbGF0aW9uKFZNJiB2bSwgUHJvY2VkdXJlJiBwcm9jLCB1bnNpZ25lZCBvcHRMZXZl
bCkKLXsKLSAgICBUaW1pbmdTY29wZSB0aW1pbmdTY29wZSgiQ29tcGlsYXRpb24iKTsKLSAgICAK
LSAgICBwcmVwYXJlRm9yR2VuZXJhdGlvbihwcm9jLCBvcHRMZXZlbCk7Ci0gICAgCi0gICAgQ0Nh
bGxIZWxwZXJzIGppdCgmdm0pOwotICAgIGdlbmVyYXRlKHByb2MsIGppdCk7Ci0gICAgTGlua0J1
ZmZlciBsaW5rQnVmZmVyKHZtLCBqaXQsIG51bGxwdHIpOwotCi0gICAgbV9jb2RlUmVmID0gRklO
QUxJWkVfQ09ERShsaW5rQnVmZmVyLCAoIkIzOjpDb21waWxhdGlvbiIpKTsKLSAgICBtX2J5cHJv
ZHVjdHMgPSBwcm9jLnJlbGVhc2VCeXByb2R1Y3RzKCk7Ci19Ci0KIENvbXBpbGF0aW9uOjpDb21w
aWxhdGlvbihNYWNyb0Fzc2VtYmxlckNvZGVSZWYgY29kZVJlZiwgc3RkOjp1bmlxdWVfcHRyPE9w
YXF1ZUJ5cHJvZHVjdHM+IGJ5cHJvZHVjdHMpCiAgICAgOiBtX2NvZGVSZWYoY29kZVJlZikKICAg
ICAsIG1fYnlwcm9kdWN0cyhXVEZNb3ZlKGJ5cHJvZHVjdHMpKQogewogfQogCitDb21waWxhdGlv
bjo6Q29tcGlsYXRpb24oQ29tcGlsYXRpb24mJiBvdGhlcikKKyAgICA6IG1fY29kZVJlZihXVEZN
b3ZlKG90aGVyLm1fY29kZVJlZikpCisgICAgLCBtX2J5cHJvZHVjdHMoV1RGTW92ZShvdGhlci5t
X2J5cHJvZHVjdHMpKQoreworfQorCiBDb21waWxhdGlvbjo6fkNvbXBpbGF0aW9uKCkKIHsKIH0K
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0NvbXBpbGF0aW9uLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ29tcGlsYXRpb24uaAkocmV2aXNpb24g
MjA5ODg2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ29tcGlsYXRpb24uaAkod29y
a2luZyBjb3B5KQpAQCAtNDAsMjUgKzQwLDE2IEBAIG5hbWVzcGFjZSBCMyB7CiBjbGFzcyBPcGFx
dWVCeXByb2R1Y3RzOwogY2xhc3MgUHJvY2VkdXJlOwogCi0vLyBUaGlzIGlzIGEgZm9vbC1wcm9v
ZiBBUEkgZm9yIGNvbXBpbGluZyBhIFByb2NlZHVyZSB0byBjb2RlIGFuZCB0aGVuIHJ1bm5pbmcg
dGhhdCBjb2RlLiBZb3UgY29tcGlsZQotLy8gYSBQcm9jZWR1cmUgdXNpbmcgdGhpcyBBUEkgYnkg
ZG9pbmc6Ci0vLwotLy8gc3RkOjp1bmlxdWVfcHRyPENvbXBpbGF0aW9uPiBjb21waWxhdGlvbiA9
IHN0ZDo6bWFrZV91bmlxdWU8Q29tcGlsYXRpb24+KHZtLCBwcm9jKTsKLS8vCi0vLyBUaGVuIHlv
dSBrZWVwIHRoZSBDb21waWxhdGlvbiBvYmplY3QgYWxpdmUgZm9yIGFzIGxvbmcgYXMgeW91IHdh
bnQgdG8gYmUgYWJsZSB0byBydW4gdGhlIGNvZGUuIElmCi0vLyB0aGlzIEFQSSBmZWVscyB0b28g
aGlnaC1sZXZlbCwgeW91IGNhbiB1c2UgQjM6OmdlbmVyYXRlKCkgZGlyZWN0bHkuCisvLyBUaGlz
IGNsYXNzIGlzIGEgd2F5IHRvIGtlZXAgdGhlIHJlc3VsdCBvZiBhIEIzIGNvbXBpbGF0aW9uIGFs
aXZlCisvLyBhbmQgcnVubmFibGUuCiAKIGNsYXNzIENvbXBpbGF0aW9uIHsKICAgICBXVEZfTUFL
RV9OT05DT1BZQUJMRShDb21waWxhdGlvbik7CiAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7
CiAKIHB1YmxpYzoKLSAgICBKU19FWFBPUlRfUFJJVkFURSBDb21waWxhdGlvbihWTSYsIFByb2Nl
ZHVyZSYsIHVuc2lnbmVkIG9wdExldmVsID0gMSk7Ci0KLSAgICAvLyBUaGlzIGNvbnN0cnVjdG9y
IGFsbG93cyB5b3UgdG8gbWFudWFsbHkgY3JlYXRlIGEgQ29tcGlsYXRpb24uIEl0J3MgY3VycmVu
dGx5IG9ubHkgdXNlZCBieSB0ZXN0Ci0gICAgLy8gY29kZS4gUHJvYmFibHkgYmVzdCB0byBrZWVw
IGl0IHRoYXQgd2F5LgogICAgIEpTX0VYUE9SVF9QUklWQVRFIENvbXBpbGF0aW9uKE1hY3JvQXNz
ZW1ibGVyQ29kZVJlZiwgc3RkOjp1bmlxdWVfcHRyPE9wYXF1ZUJ5cHJvZHVjdHM+KTsKLSAgICAK
KyAgICBKU19FWFBPUlRfUFJJVkFURSBDb21waWxhdGlvbihDb21waWxhdGlvbiYmKTsKICAgICBK
U19FWFBPUlRfUFJJVkFURSB+Q29tcGlsYXRpb24oKTsKIAogICAgIE1hY3JvQXNzZW1ibGVyQ29k
ZVB0ciBjb2RlKCkgY29uc3QgeyByZXR1cm4gbV9jb2RlUmVmLmNvZGUoKTsgfQpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ29tcGlsZS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2IzL0IzQ29tcGlsZS5jcHAJKG5vbmV4aXN0ZW50KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2IzL0IzQ29tcGlsZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCAr
MSw1NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisj
aW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQjNDb21waWxlLmgiCisKKyNpZiBFTkFCTEUo
QjNfSklUKQorCisjaW5jbHVkZSAiQjNHZW5lcmF0ZS5oIgorI2luY2x1ZGUgIkIzT3BhcXVlQnlw
cm9kdWN0cy5oIgorI2luY2x1ZGUgIkIzUHJvY2VkdXJlLmgiCisjaW5jbHVkZSAiQjNUaW1pbmdT
Y29wZS5oIgorI2luY2x1ZGUgIkNDYWxsSGVscGVycy5oIgorI2luY2x1ZGUgIkpTQ0lubGluZXMu
aCIKKyNpbmNsdWRlICJMaW5rQnVmZmVyLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2Ug
QjMgeworCitDb21waWxhdGlvbiBjb21waWxlKFZNJiB2bSwgUHJvY2VkdXJlJiBwcm9jLCB1bnNp
Z25lZCBvcHRMZXZlbCkKK3sKKyAgICBUaW1pbmdTY29wZSB0aW1pbmdTY29wZSgiQ29tcGlsYXRp
b24iKTsKKyAgICAKKyAgICBwcmVwYXJlRm9yR2VuZXJhdGlvbihwcm9jLCBvcHRMZXZlbCk7Cisg
ICAgCisgICAgQ0NhbGxIZWxwZXJzIGppdCgmdm0pOworICAgIGdlbmVyYXRlKHByb2MsIGppdCk7
CisgICAgTGlua0J1ZmZlciBsaW5rQnVmZmVyKHZtLCBqaXQsIG51bGxwdHIpOworCisgICAgcmV0
dXJuIENvbXBpbGF0aW9uKEZJTkFMSVpFX0NPREUobGlua0J1ZmZlciwgKCJCMzo6Q29tcGlsYXRp
b24iKSksIHByb2MucmVsZWFzZUJ5cHJvZHVjdHMoKSk7Cit9CisKK30gfSAvLyBuYW1lc3BhY2Ug
SlNDOjpCMworCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKKwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2IzL0IzQ29tcGlsZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy9CM0NvbXBpbGUuaAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYjMvQjNDb21waWxlLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw1MiBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMg
SVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAor
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjcHJhZ21hIG9uY2UKKwor
I2lmIEVOQUJMRShCM19KSVQpCisKKyNpbmNsdWRlICJCM0NvbXBpbGF0aW9uLmgiCisKK25hbWVz
cGFjZSBKU0MgeworCitjbGFzcyBWTTsKKworbmFtZXNwYWNlIEIzIHsKKworY2xhc3MgUHJvY2Vk
dXJlOworCisvLyBUaGlzIGlzIGEgZm9vbC1wcm9vZiBBUEkgZm9yIGNvbXBpbGluZyBhIFByb2Nl
ZHVyZSB0byBjb2RlIGFuZCB0aGVuIHJ1bm5pbmcgdGhhdCBjb2RlLiBZb3UgY29tcGlsZQorLy8g
YSBQcm9jZWR1cmUgdXNpbmcgdGhpcyBBUEkgYnkgZG9pbmc6CisvLworLy8gQ29tcGlsYXRpb24g
Y29tcGlsYXRpb24gPSBCMzo6Y29tcGlsZSh2bSwgcHJvYyk7CisvLworLy8gVGhlbiB5b3Uga2Vl
cCB0aGUgQ29tcGlsYXRpb24gb2JqZWN0IGFsaXZlIGZvciBhcyBsb25nIGFzIHlvdSB3YW50IHRv
IGJlIGFibGUgdG8gcnVuIHRoZSBjb2RlLgorLy8gSWYgdGhpcyBBUEkgZmVlbHMgdG9vIGhpZ2gt
bGV2ZWwsIHlvdSBjYW4gdXNlIEIzOjpnZW5lcmF0ZSgpIGRpcmVjdGx5LgorCitKU19FWFBPUlRf
UFJJVkFURSBDb21waWxhdGlvbiBjb21waWxlKFZNJiwgUHJvY2VkdXJlJiwgdW5zaWduZWQgb3B0
TGV2ZWwgPSAxKTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKKyNlbmRpZiAvLyBFTkFC
TEUoQjNfSklUKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL3Rlc3RiMy5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL3Rlc3RiMy5jcHAJKHJldmlzaW9u
IDIwOTg4NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy90ZXN0YjMuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0zMyw2ICszMyw3IEBACiAjaW5jbHVkZSAiQjNCYXNpY0Jsb2NrSW5saW5lcy5o
IgogI2luY2x1ZGUgIkIzQ0NhbGxWYWx1ZS5oIgogI2luY2x1ZGUgIkIzQ29tcGlsYXRpb24uaCIK
KyNpbmNsdWRlICJCM0NvbXBpbGUuaCIKICNpbmNsdWRlICJCM0NvbXB1dGVEaXZpc2lvbk1hZ2lj
LmgiCiAjaW5jbHVkZSAiQjNDb25zdDMyVmFsdWUuaCIKICNpbmNsdWRlICJCM0NvbnN0UHRyVmFs
dWUuaCIKQEAgLTExOCw3ICsxMTksNyBAQCBWTSogdm07CiAKIHN0ZDo6dW5pcXVlX3B0cjxDb21w
aWxhdGlvbj4gY29tcGlsZShQcm9jZWR1cmUmIHByb2NlZHVyZSwgdW5zaWduZWQgb3B0TGV2ZWwg
PSAxKQogewotICAgIHJldHVybiBzdGQ6Om1ha2VfdW5pcXVlPENvbXBpbGF0aW9uPigqdm0sIHBy
b2NlZHVyZSwgb3B0TGV2ZWwpOworICAgIHJldHVybiBzdGQ6Om1ha2VfdW5pcXVlPENvbXBpbGF0
aW9uPihCMzo6Y29tcGlsZSgqdm0sIHByb2NlZHVyZSwgb3B0TGV2ZWwpKTsKIH0KIAogdGVtcGxh
dGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUuLi4gQXJndW1lbnRzPgpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9UaHVua0dlbmVyYXRvcnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvVGh1bmtHZW5lcmF0b3JzLmNwcAkocmV2aXNpb24gMjA5ODg2KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9UaHVua0dlbmVyYXRvcnMuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0yOCwxMyArMjgsMTcgQEAKIAogI2luY2x1ZGUgIkNvZGVCbG9jay5oIgogI2lu
Y2x1ZGUgIkRGR1NwZWN1bGF0aXZlSklULmgiCisjaW5jbHVkZSAiSklURXhjZXB0aW9ucy5oIgog
I2luY2x1ZGUgIkpJVE9wZXJhdGlvbnMuaCIKICNpbmNsdWRlICJKU0FycmF5LmgiCiAjaW5jbHVk
ZSAiSlNCb3VuZEZ1bmN0aW9uLmgiCiAjaW5jbHVkZSAiTWF0aENvbW1vbi5oIgogI2luY2x1ZGUg
Ik1heEZyYW1lRXh0ZW50Rm9yU2xvd1BhdGhDYWxsLmgiCiAjaW5jbHVkZSAiSlNDSW5saW5lcy5o
IgorI2luY2x1ZGUgIkpTV2ViQXNzZW1ibHlJbnN0YW5jZS5oIgorI2luY2x1ZGUgIkpTV2ViQXNz
ZW1ibHlSdW50aW1lRXJyb3IuaCIKICNpbmNsdWRlICJTcGVjaWFsaXplZFRodW5rSklULmgiCisj
aW5jbHVkZSAiV2FzbUV4Y2VwdGlvblR5cGUuaCIKICNpbmNsdWRlIDx3dGYvSW5saW5lQVNNLmg+
CiAjaW5jbHVkZSA8d3RmL1N0cmluZ1ByaW50U3RyZWFtLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQv
U3RyaW5nSW1wbC5oPgpAQCAtMTEyNiw2ICsxMTMwLDQ1IEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJl
ZiBib3VuZFRoaXNOb0FyZ3NGdW4KICAgICAgICAgbGlua0J1ZmZlciwgKCJTcGVjaWFsaXplZCB0
aHVuayBmb3IgYm91bmQgZnVuY3Rpb24gY2FsbHMgd2l0aCBubyBhcmd1bWVudHMiKSk7CiB9CiAK
K01hY3JvQXNzZW1ibGVyQ29kZVJlZiB0aHJvd0V4Y2VwdGlvbkZyb21XYXNtVGh1bmtHZW5lcmF0
b3IoVk0qIHZtKQoreworICAgIENDYWxsSGVscGVycyBqaXQodm0pOworCisgICAgLy8gVGhlIHRo
aW5nIHRoYXQganVtcHMgaGVyZSBtdXN0IG1vdmUgRXhjZXB0aW9uVHlwZSBpbnRvIHRoZSBhcmd1
bWVudEdQUjEgYW5kIGp1bXAgaGVyZS4KKyAgICAvLyBXZSdyZSBhbGxvd2VkIHRvIHVzZSB0ZW1w
IHJlZ2lzdGVycyBoZXJlLCBidXQgbm90IGNhbGxlZSBzYXZlcy4KKyAgICB7CisgICAgICAgIFJl
Z2lzdGVyU2V0IHVzZWRSZWdpc3RlcnMgPSBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVn
aXN0ZXJzKCk7CisgICAgICAgIHVzZWRSZWdpc3RlcnMuc2V0KEdQUkluZm86OmFyZ3VtZW50R1BS
MSk7CisgICAgICAgIGppdC5jb3B5Q2FsbGVlU2F2ZXNUb1ZNRW50cnlGcmFtZUNhbGxlZVNhdmVz
QnVmZmVyKHVzZWRSZWdpc3RlcnMpOworICAgIH0KKworICAgIGppdC5tb3ZlKEdQUkluZm86OmNh
bGxGcmFtZVJlZ2lzdGVyLCBHUFJJbmZvOjphcmd1bWVudEdQUjApOworICAgIENDYWxsSGVscGVy
czo6Q2FsbCBjYWxsID0gaml0LmNhbGwoKTsKKyAgICBqaXQuanVtcFRvRXhjZXB0aW9uSGFuZGxl
cigpOworCisgICAgdm9pZCAoKnRocm93V2FzbUV4Y2VwdGlvbikoRXhlY1N0YXRlKiwgV2FzbTo6
RXhjZXB0aW9uVHlwZSkgPSBbXSAoRXhlY1N0YXRlKiBleGVjLCBXYXNtOjpFeGNlcHRpb25UeXBl
IHR5cGUpIHsKKyAgICAgICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7CisgICAgICAgIE5hdGl2ZUNh
bGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOworCisgICAgICAgIHsKKyAgICAgICAgICAg
IGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUoKnZtKTsKKyAgICAgICAgICAg
IEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSB2bS0+dG9wSlNXZWJBc3NlbWJseUluc3Rh
bmNlLT5nbG9iYWxPYmplY3QoKTsKKworICAgICAgICAgICAgSlNXZWJBc3NlbWJseVJ1bnRpbWVF
cnJvciogZXJyb3IgPSBKU1dlYkFzc2VtYmx5UnVudGltZUVycm9yOjpjcmVhdGUoCisgICAgICAg
ICAgICAgICAgZXhlYywgZ2xvYmFsT2JqZWN0LT5XZWJBc3NlbWJseVJ1bnRpbWVFcnJvclN0cnVj
dHVyZSgpLCBXYXNtOjplcnJvck1lc3NhZ2VGb3JFeGNlcHRpb25UeXBlKHR5cGUpKTsKKyAgICAg
ICAgICAgIHRocm93RXhjZXB0aW9uKGV4ZWMsIHRocm93U2NvcGUsIGVycm9yKTsKKyAgICAgICAg
fQorCisgICAgICAgIGdlbmVyaWNVbndpbmQodm0sIGV4ZWMpOworICAgICAgICBBU1NFUlQoISF2
bS0+Y2FsbEZyYW1lRm9yQ2F0Y2gpOworICAgIH07CisKKyAgICBMaW5rQnVmZmVyIGxpbmtCdWZm
ZXIoKnZtLCBqaXQsIEdMT0JBTF9USFVOS19JRCk7CisgICAgbGlua0J1ZmZlci5saW5rKGNhbGws
IHRocm93V2FzbUV4Y2VwdGlvbik7CisgICAgcmV0dXJuIEZJTkFMSVpFX0NPREUoCisgICAgICAg
IGxpbmtCdWZmZXIsICgiVGhyb3cgZXhjZXB0aW9uIGZyb20gV2FzbSIpKTsKK30KKwogfSAvLyBu
YW1lc3BhY2UgSlNDCiAKICNlbmRpZiAvLyBFTkFCTEUoSklUKQpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9UaHVua0dlbmVyYXRvcnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L1RodW5rR2VuZXJhdG9ycy5oCShyZXZpc2lvbiAyMDk4ODYpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1RodW5rR2VuZXJhdG9ycy5oCSh3b3JraW5nIGNvcHkp
CkBAIC02Myw3ICs2Myw5IEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiBpbXVsVGh1bmtHZW5lcmF0
b3IKIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiByYW5kb21UaHVua0dlbmVyYXRvcihWTSopOwogTWFj
cm9Bc3NlbWJsZXJDb2RlUmVmIHRydW5jVGh1bmtHZW5lcmF0b3IoVk0qKTsKIAotTWFjcm9Bc3Nl
bWJsZXJDb2RlUmVmIGJvdW5kVGhpc05vQXJnc0Z1bmN0aW9uQ2FsbEdlbmVyYXRvcihWTSogdm0p
OworTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIGJvdW5kVGhpc05vQXJnc0Z1bmN0aW9uQ2FsbEdlbmVy
YXRvcihWTSopOworCitNYWNyb0Fzc2VtYmxlckNvZGVSZWYgdGhyb3dFeGNlcHRpb25Gcm9tV2Fz
bVRodW5rR2VuZXJhdG9yKFZNKik7CiAKIH0KICNlbmRpZiAvLyBFTkFCTEUoSklUKQpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUIzSVJHZW5lcmF0b3IuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21CM0lSR2VuZXJhdG9yLmNwcAko
cmV2aXNpb24gMjA5ODg2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUIzSVJH
ZW5lcmF0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMCw4ICszMCwxMCBAQAogCiAjaW5jbHVk
ZSAiQjNCYXNpY0Jsb2NrSW5saW5lcy5oIgogI2luY2x1ZGUgIkIzQ0NhbGxWYWx1ZS5oIgorI2lu
Y2x1ZGUgIkIzQ29tcGlsZS5oIgogI2luY2x1ZGUgIkIzQ29uc3RQdHJWYWx1ZS5oIgogI2luY2x1
ZGUgIkIzRml4U1NBLmgiCisjaW5jbHVkZSAiQjNHZW5lcmF0ZS5oIgogI2luY2x1ZGUgIkIzU3Rh
Y2ttYXBHZW5lcmF0aW9uUGFyYW1zLmgiCiAjaW5jbHVkZSAiQjNTd2l0Y2hWYWx1ZS5oIgogI2lu
Y2x1ZGUgIkIzVmFsaWRhdGUuaCIKQEAgLTQwLDE1ICs0MiwxMyBAQAogI2luY2x1ZGUgIkIzVmFy
aWFibGVWYWx1ZS5oIgogI2luY2x1ZGUgIkIzV2FzbUFkZHJlc3NWYWx1ZS5oIgogI2luY2x1ZGUg
IkIzV2FzbUJvdW5kc0NoZWNrVmFsdWUuaCIKLSNpbmNsdWRlICJFeGNlcHRpb25TY29wZS5oIgot
I2luY2x1ZGUgIkZyYW1lVHJhY2Vycy5oIgotI2luY2x1ZGUgIkpJVEV4Y2VwdGlvbnMuaCIKICNp
bmNsdWRlICJKU0NJbmxpbmVzLmgiCiAjaW5jbHVkZSAiSlNXZWJBc3NlbWJseUluc3RhbmNlLmgi
CiAjaW5jbHVkZSAiSlNXZWJBc3NlbWJseU1vZHVsZS5oIgogI2luY2x1ZGUgIkpTV2ViQXNzZW1i
bHlSdW50aW1lRXJyb3IuaCIKICNpbmNsdWRlICJWaXJ0dWFsUmVnaXN0ZXIuaCIKICNpbmNsdWRl
ICJXYXNtQ2FsbGluZ0NvbnZlbnRpb24uaCIKKyNpbmNsdWRlICJXYXNtRXhjZXB0aW9uVHlwZS5o
IgogI2luY2x1ZGUgIldhc21GdW5jdGlvblBhcnNlci5oIgogI2luY2x1ZGUgIldhc21NZW1vcnku
aCIKICNpbmNsdWRlIDx3dGYvT3B0aW9uYWwuaD4KQEAgLTE5Nyw2ICsxOTcsOCBAQCBwdWJsaWM6
CiAKICAgICB2b2lkIGR1bXAoY29uc3QgVmVjdG9yPENvbnRyb2xFbnRyeT4mIGNvbnRyb2xTdGFj
aywgY29uc3QgRXhwcmVzc2lvbkxpc3QmIGV4cHJlc3Npb25TdGFjayk7CiAKKyAgICB2b2lkIGVt
aXRFeGNlcHRpb25DaGVjayhDQ2FsbEhlbHBlcnMmLCBFeGNlcHRpb25UeXBlKTsKKwogcHJpdmF0
ZToKICAgICBFeHByZXNzaW9uVHlwZSBlbWl0Q2hlY2tBbmRQcmVwYXJlUG9pbnRlcihFeHByZXNz
aW9uVHlwZSBwb2ludGVyLCB1aW50MzJfdCBvZmZzZXQsIHVpbnQzMl90IHNpemVPZk9wKTsKICAg
ICBFeHByZXNzaW9uVHlwZSBlbWl0TG9hZE9wKExvYWRPcFR5cGUsIE9yaWdpbiwgRXhwcmVzc2lv
blR5cGUgcG9pbnRlciwgdWludDMyX3Qgb2Zmc2V0KTsKQEAgLTIxNyw3ICsyMTksNiBAQCBwcml2
YXRlOgogICAgIEdQUlJlZyBtX21lbW9yeVNpemVHUFI7CiAgICAgVmFsdWUqIG1femVyb1ZhbHVl
c1tudW1UeXBlc107CiAgICAgVmFsdWUqIG1faW5zdGFuY2VWYWx1ZTsKLQogfTsKIAogQjNJUkdl
bmVyYXRvcjo6QjNJUkdlbmVyYXRvcihWTSYgdm0sIGNvbnN0IE1vZHVsZUluZm9ybWF0aW9uJiBp
bmZvLCBQcm9jZWR1cmUmIHByb2NlZHVyZSwgV2FzbUludGVybmFsRnVuY3Rpb24qIGNvbXBpbGF0
aW9uLCBWZWN0b3I8VW5saW5rZWRXYXNtVG9XYXNtQ2FsbD4mIHVubGlua2VkV2FzbVRvV2FzbUNh
bGxzLCBjb25zdCBJbW11dGFibGVGdW5jdGlvbkluZGV4U3BhY2UmIGZ1bmN0aW9uSW5kZXhTcGFj
ZSkKQEAgLTI1NCwzMyArMjU1LDcgQEAgQjNJUkdlbmVyYXRvcjo6QjNJUkdlbmVyYXRvcihWTSYg
dm0sIGNvbgogICAgICAgICBtX3Byb2Muc2V0V2FzbUJvdW5kc0NoZWNrR2VuZXJhdG9yKFs9XSAo
Q0NhbGxIZWxwZXJzJiBqaXQsIEdQUlJlZyBwaW5uZWRHUFIsIHVuc2lnbmVkKSB7CiAgICAgICAg
ICAgICBBbGxvd01hY3JvU2NyYXRjaFJlZ2lzdGVyVXNhZ2UgYWxsb3dTY3JhdGNoKGppdCk7CiAg
ICAgICAgICAgICBBU1NFUlRfVU5VU0VEKHBpbm5lZEdQUiwgbV9tZW1vcnlTaXplR1BSID09IHBp
bm5lZEdQUik7Ci0gICAgICAgICAgICBqaXQuY29weUNhbGxlZVNhdmVzVG9WTUVudHJ5RnJhbWVD
YWxsZWVTYXZlc0J1ZmZlcigpOwotCi0gICAgICAgICAgICBqaXQubW92ZShHUFJJbmZvOjpjYWxs
RnJhbWVSZWdpc3RlciwgR1BSSW5mbzo6YXJndW1lbnRHUFIwKTsKLQotICAgICAgICAgICAgQ0Nh
bGxIZWxwZXJzOjpDYWxsIGNhbGwgPSBqaXQuY2FsbCgpOwotICAgICAgICAgICAgaml0Lmp1bXBU
b0V4Y2VwdGlvbkhhbmRsZXIoKTsKLQotICAgICAgICAgICAgaml0LmFkZExpbmtUYXNrKFs9XSAo
TGlua0J1ZmZlciYgbGlua0J1ZmZlcikgewotICAgICAgICAgICAgICAgIHZvaWQgKCp0aHJvd01l
bW9yeUV4Y2VwdGlvbikoRXhlY1N0YXRlKikgPSBbXSAoRXhlY1N0YXRlKiBleGVjKSB7Ci0gICAg
ICAgICAgICAgICAgICAgIFZNKiB2bSA9ICZleGVjLT52bSgpOwotICAgICAgICAgICAgICAgICAg
ICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKLQotICAgICAgICAgICAg
ICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNM
QVJFX1RIUk9XX1NDT1BFKCp2bSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBKU0dsb2JhbE9i
amVjdCogZ2xvYmFsT2JqZWN0ID0gdm0tPnRvcEpTV2ViQXNzZW1ibHlJbnN0YW5jZS0+Z2xvYmFs
T2JqZWN0KCk7Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgIEpTV2ViQXNzZW1ibHlSdW50aW1l
RXJyb3IqIGVycm9yID0gSlNXZWJBc3NlbWJseVJ1bnRpbWVFcnJvcjo6Y3JlYXRlKAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGV4ZWMsIGdsb2JhbE9iamVjdC0+V2ViQXNzZW1ibHlSdW50
aW1lRXJyb3JTdHJ1Y3R1cmUoKSwgIk91dCBvZiBib3VuZHMgbWVtb3J5IGFjY2VzcyIpOwotICAg
ICAgICAgICAgICAgICAgICAgICAgdGhyb3dFeGNlcHRpb24oZXhlYywgdGhyb3dTY29wZSwgZXJy
b3IpOwotICAgICAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAgICAgZ2VuZXJp
Y1Vud2luZCh2bSwgZXhlYyk7Ci0gICAgICAgICAgICAgICAgICAgIEFTU0VSVCghIXZtLT5jYWxs
RnJhbWVGb3JDYXRjaCk7Ci0gICAgICAgICAgICAgICAgfTsKLQotICAgICAgICAgICAgICAgIGxp
bmtCdWZmZXIubGluayhjYWxsLCB0aHJvd01lbW9yeUV4Y2VwdGlvbik7Ci0gICAgICAgICAgICB9
KTsKKyAgICAgICAgICAgIHRoaXMtPmVtaXRFeGNlcHRpb25DaGVjayhqaXQsIEV4Y2VwdGlvblR5
cGU6Ok91dE9mQm91bmRzTWVtb3J5QWNjZXNzKTsKICAgICAgICAgfSk7CiAKICAgICAgICAgQjM6
OlBhdGNocG9pbnRWYWx1ZSogZm9vID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxCMzo6UGF0
Y2hwb2ludFZhbHVlPihtX3Byb2MsIEIzOjpWb2lkLCBPcmlnaW4oKSk7CkBAIC0yOTYsNiArMjcx
LDE3IEBAIEIzSVJHZW5lcmF0b3I6OkIzSVJHZW5lcmF0b3IoVk0mIHZtLCBjb24KICAgICAgICAg
bV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxDb25zdFB0clZhbHVlPihtX3Byb2MsIE9yaWdpbigp
LCAmbV92bS50b3BKU1dlYkFzc2VtYmx5SW5zdGFuY2UpKTsKIH0KIAordm9pZCBCM0lSR2VuZXJh
dG9yOjplbWl0RXhjZXB0aW9uQ2hlY2soQ0NhbGxIZWxwZXJzJiBqaXQsIEV4Y2VwdGlvblR5cGUg
dHlwZSkKK3sKKyAgICBqaXQubW92ZShDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihzdGF0aWNf
Y2FzdDx1aW50MzJfdD4odHlwZSkpLCBHUFJJbmZvOjphcmd1bWVudEdQUjEpOworICAgIGF1dG8g
anVtcFRvRXhjZXB0aW9uU3R1YiA9IGppdC5qdW1wKCk7CisKKyAgICBWTSogdm0gPSAmbV92bTsK
KyAgICBqaXQuYWRkTGlua1Rhc2soWz1dIChMaW5rQnVmZmVyJiBsaW5rQnVmZmVyKSB7CisgICAg
ICAgIGxpbmtCdWZmZXIubGluayhqdW1wVG9FeGNlcHRpb25TdHViLCBDb2RlTG9jYXRpb25MYWJl
bCh2bS0+Z2V0Q1RJU3R1Yih0aHJvd0V4Y2VwdGlvbkZyb21XYXNtVGh1bmtHZW5lcmF0b3IpLmNv
ZGUoKSkpOworICAgIH0pOworfQorCiBWYWx1ZSogQjNJUkdlbmVyYXRvcjo6emVyb0ZvclR5cGUo
VHlwZSB0eXBlKQogewogICAgIEFTU0VSVCh0eXBlICE9IFZvaWQpOwpAQCAtNzQxLDggKzcyNyw4
IEBAIGF1dG8gQjNJUkdlbmVyYXRvcjo6YWRkQ2FsbEluZGlyZWN0KGNvbnMKICAgICAgICAgQ2hl
Y2tWYWx1ZSogY2hlY2sgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PENoZWNrVmFsdWU+KG1f
cHJvYywgQ2hlY2ssIE9yaWdpbigpLAogICAgICAgICAgICAgbV9jdXJyZW50QmxvY2stPmFwcGVu
ZE5ldzxWYWx1ZT4obV9wcm9jLCBBYm92ZUVxdWFsLCBPcmlnaW4oKSwgY2FsbGVlSW5kZXgsIGNh
bGxhYmxlRnVuY3Rpb25CdWZmZXJTaXplKSk7CiAKLSAgICAgICAgY2hlY2stPnNldEdlbmVyYXRv
cihbXSAoQ0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0IEIzOjpTdGFja21hcEdlbmVyYXRpb25QYXJh
bXMmKSB7Ci0gICAgICAgICAgICBqaXQuYnJlYWtwb2ludCgpOworICAgICAgICBjaGVjay0+c2V0
R2VuZXJhdG9yKFs9XSAoQ0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0IEIzOjpTdGFja21hcEdlbmVy
YXRpb25QYXJhbXMmKSB7CisgICAgICAgICAgICB0aGlzLT5lbWl0RXhjZXB0aW9uQ2hlY2soaml0
LCBFeGNlcHRpb25UeXBlOjpPdXRPZkJvdW5kc0NhbGxJbmRpcmVjdCk7CiAgICAgICAgIH0pOwog
ICAgIH0KIApAQCAtNzYwLDggKzc0Niw4IEBAIGF1dG8gQjNJUkdlbmVyYXRvcjo6YWRkQ2FsbElu
ZGlyZWN0KGNvbnMKICAgICAgICAgICAgICAgICBjYWxsZWVTaWduYXR1cmUsIAogICAgICAgICAg
ICAgICAgIG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8Q29uc3RQdHJWYWx1ZT4obV9wcm9jLCBP
cmlnaW4oKSwgMCkpKTsKIAotICAgICAgICBjaGVjay0+c2V0R2VuZXJhdG9yKFtdIChDQ2FsbEhl
bHBlcnMmIGppdCwgY29uc3QgQjM6OlN0YWNrbWFwR2VuZXJhdGlvblBhcmFtcyYpIHsKLSAgICAg
ICAgICAgIGppdC5icmVha3BvaW50KCk7CisgICAgICAgIGNoZWNrLT5zZXRHZW5lcmF0b3IoWz1d
IChDQ2FsbEhlbHBlcnMmIGppdCwgY29uc3QgQjM6OlN0YWNrbWFwR2VuZXJhdGlvblBhcmFtcyYp
IHsKKyAgICAgICAgICAgIHRoaXMtPmVtaXRFeGNlcHRpb25DaGVjayhqaXQsIEV4Y2VwdGlvblR5
cGU6Ok51bGxUYWJsZUVudHJ5KTsKICAgICAgICAgfSk7CiAgICAgfQogCkBAIC03NzEsOCArNzU3
LDggQEAgYXV0byBCM0lSR2VuZXJhdG9yOjphZGRDYWxsSW5kaXJlY3QoY29ucwogICAgICAgICBD
aGVja1ZhbHVlKiBjaGVjayA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8Q2hlY2tWYWx1ZT4o
bV9wcm9jLCBDaGVjaywgT3JpZ2luKCksCiAgICAgICAgICAgICBtX2N1cnJlbnRCbG9jay0+YXBw
ZW5kTmV3PFZhbHVlPihtX3Byb2MsIE5vdEVxdWFsLCBPcmlnaW4oKSwgY2FsbGVlU2lnbmF0dXJl
LCBleHBlY3RlZFNpZ25hdHVyZSkpOwogCi0gICAgICAgIGNoZWNrLT5zZXRHZW5lcmF0b3IoW10g
KENDYWxsSGVscGVycyYgaml0LCBjb25zdCBCMzo6U3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zJikg
ewotICAgICAgICAgICAgaml0LmJyZWFrcG9pbnQoKTsKKyAgICAgICAgY2hlY2stPnNldEdlbmVy
YXRvcihbPV0gKENDYWxsSGVscGVycyYgaml0LCBjb25zdCBCMzo6U3RhY2ttYXBHZW5lcmF0aW9u
UGFyYW1zJikgeworICAgICAgICAgICAgdGhpcy0+ZW1pdEV4Y2VwdGlvbkNoZWNrKGppdCwgRXhj
ZXB0aW9uVHlwZTo6QmFkU2lnbmF0dXJlKTsKICAgICAgICAgfSk7CiAgICAgfQogCkBAIC04MzMs
NyArODE5LDcgQEAgdm9pZCBCM0lSR2VuZXJhdG9yOjpkdW1wKGNvbnN0IFZlY3RvcjxDbwogICAg
IGRhdGFMb2dMbigiXG4iKTsKIH0KIAotc3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxDb21waWxhdGlv
bj4gY3JlYXRlSlNUb1dhc21XcmFwcGVyKFZNJiB2bSwgV2FzbUludGVybmFsRnVuY3Rpb24mIGZ1
bmN0aW9uLCBjb25zdCBTaWduYXR1cmUqIHNpZ25hdHVyZSwgTWFjcm9Bc3NlbWJsZXJDb2RlUHRy
IG1haW5GdW5jdGlvbiwgY29uc3QgTWVtb3J5SW5mb3JtYXRpb24mIG1lbW9yeSkKK3N0YXRpYyBz
dGQ6OnVuaXF1ZV9wdHI8QjM6OkNvbXBpbGF0aW9uPiBjcmVhdGVKU1RvV2FzbVdyYXBwZXIoVk0m
IHZtLCBXYXNtSW50ZXJuYWxGdW5jdGlvbiYgZnVuY3Rpb24sIGNvbnN0IFNpZ25hdHVyZSogc2ln
bmF0dXJlLCBNYWNyb0Fzc2VtYmxlckNvZGVQdHIgbWFpbkZ1bmN0aW9uLCBjb25zdCBNZW1vcnlJ
bmZvcm1hdGlvbiYgbWVtb3J5KQogewogICAgIFByb2NlZHVyZSBwcm9jOwogICAgIEJhc2ljQmxv
Y2sqIGJsb2NrID0gcHJvYy5hZGRCbG9jaygpOwpAQCAtODQyLDE5ICs4MjgsMjMgQEAgc3RhdGlj
IHN0ZDo6dW5pcXVlX3B0cjxDb21waWxhdGlvbj4gY3JlYQogCiAgICAganNjQ2FsbGluZ0NvbnZl
bnRpb24oKS5zZXR1cEZyYW1lSW5Qcm9sb2d1ZSgmZnVuY3Rpb24uanNUb1dhc21DYWxsZWVNb3Zl
TG9jYXRpb24sIHByb2MsIG9yaWdpbiwgYmxvY2spOwogCi0gICAgVmFsdWUqIGZyYW1lUG9pbnRl
ciA9IGJsb2NrLT5hcHBlbmROZXc8QjM6OlZhbHVlPihwcm9jLCBCMzo6RnJhbWVQb2ludGVyLCBv
cmlnaW4pOwotICAgIFZhbHVlKiBvZmZTZXRPZkFyZ3VtZW50Q291bnQgPSBibG9jay0+YXBwZW5k
TmV3PENvbnN0NjRWYWx1ZT4ocHJvYywgb3JpZ2luLCBDYWxsRnJhbWVTbG90Ojphcmd1bWVudENv
dW50ICogc2l6ZW9mKFJlZ2lzdGVyKSk7Ci0gICAgVmFsdWUqIGFyZ3VtZW50Q291bnQgPSBibG9j
ay0+YXBwZW5kTmV3PE1lbW9yeVZhbHVlPihwcm9jLCBMb2FkLCBJbnQzMiwgb3JpZ2luLAotICAg
ICAgICBibG9jay0+YXBwZW5kTmV3PFZhbHVlPihwcm9jLCBBZGQsIG9yaWdpbiwgZnJhbWVQb2lu
dGVyLCBvZmZTZXRPZkFyZ3VtZW50Q291bnQpKTsKKyAgICBpZiAoIUFTU0VSVF9ESVNBQkxFRCkg
eworICAgICAgICAvLyBUaGlzIHNob3VsZCBiZSBndWFyYW50ZWVkIGJ5IG91ciBKUyB3cmFwcGVy
IHRoYXQgaGFuZGxlcyBjYWxscyB0byB1cy4KKyAgICAgICAgLy8gSnVzdCBwcmV2ZW50IGFnYWlu
c3QgY3Jhenkgd2hlbiBBU1NFUlQgaXMgZW5hYmxlZC4KKyAgICAgICAgVmFsdWUqIGZyYW1lUG9p
bnRlciA9IGJsb2NrLT5hcHBlbmROZXc8QjM6OlZhbHVlPihwcm9jLCBCMzo6RnJhbWVQb2ludGVy
LCBvcmlnaW4pOworICAgICAgICBWYWx1ZSogb2ZmU2V0T2ZBcmd1bWVudENvdW50ID0gYmxvY2st
PmFwcGVuZE5ldzxDb25zdDY0VmFsdWU+KHByb2MsIG9yaWdpbiwgQ2FsbEZyYW1lU2xvdDo6YXJn
dW1lbnRDb3VudCAqIHNpemVvZihSZWdpc3RlcikpOworICAgICAgICBWYWx1ZSogYXJndW1lbnRD
b3VudCA9IGJsb2NrLT5hcHBlbmROZXc8TWVtb3J5VmFsdWU+KHByb2MsIExvYWQsIEludDMyLCBv
cmlnaW4sCisgICAgICAgICAgICBibG9jay0+YXBwZW5kTmV3PFZhbHVlPihwcm9jLCBBZGQsIG9y
aWdpbiwgZnJhbWVQb2ludGVyLCBvZmZTZXRPZkFyZ3VtZW50Q291bnQpKTsKIAotICAgIFZhbHVl
KiBleHBlY3RlZEFyZ3VtZW50Q291bnQgPSBibG9jay0+YXBwZW5kTmV3PENvbnN0MzJWYWx1ZT4o
cHJvYywgb3JpZ2luLCBzaWduYXR1cmUtPmFyZ3VtZW50cy5zaXplKCkpOworICAgICAgICBWYWx1
ZSogZXhwZWN0ZWRBcmd1bWVudENvdW50ID0gYmxvY2stPmFwcGVuZE5ldzxDb25zdDMyVmFsdWU+
KHByb2MsIG9yaWdpbiwgc2lnbmF0dXJlLT5hcmd1bWVudHMuc2l6ZSgpKTsKIAotICAgIENoZWNr
VmFsdWUqIGFyZ3VtZW50Q291bnRDaGVjayA9IGJsb2NrLT5hcHBlbmROZXc8Q2hlY2tWYWx1ZT4o
cHJvYywgQ2hlY2ssIG9yaWdpbiwKLSAgICAgICAgYmxvY2stPmFwcGVuZE5ldzxWYWx1ZT4ocHJv
YywgQWJvdmUsIG9yaWdpbiwgZXhwZWN0ZWRBcmd1bWVudENvdW50LCBhcmd1bWVudENvdW50KSk7
CisgICAgICAgIENoZWNrVmFsdWUqIGFyZ3VtZW50Q291bnRDaGVjayA9IGJsb2NrLT5hcHBlbmRO
ZXc8Q2hlY2tWYWx1ZT4ocHJvYywgQ2hlY2ssIG9yaWdpbiwKKyAgICAgICAgICAgIGJsb2NrLT5h
cHBlbmROZXc8VmFsdWU+KHByb2MsIEFib3ZlLCBvcmlnaW4sIGV4cGVjdGVkQXJndW1lbnRDb3Vu
dCwgYXJndW1lbnRDb3VudCkpOwogCi0gICAgYXJndW1lbnRDb3VudENoZWNrLT5zZXRHZW5lcmF0
b3IoW10gKENDYWxsSGVscGVycyYgaml0LCBjb25zdCBTdGFja21hcEdlbmVyYXRpb25QYXJhbXMm
KSB7Ci0gICAgICAgIGppdC5icmVha3BvaW50KCk7Ci0gICAgfSk7CisgICAgICAgIGFyZ3VtZW50
Q291bnRDaGVjay0+c2V0R2VuZXJhdG9yKFtdIChDQ2FsbEhlbHBlcnMmIGppdCwgY29uc3QgU3Rh
Y2ttYXBHZW5lcmF0aW9uUGFyYW1zJikgeworICAgICAgICAgICAgaml0LmJyZWFrcG9pbnQoKTsK
KyAgICAgICAgfSk7CisgICAgfQogCiAgICAgLy8gTW92ZSBtZW1vcnkgdmFsdWVzIHRvIHRoZSBh
cHByb3JpYXRlIHBsYWNlcywgaWYgbmVlZGVkLgogICAgIFZhbHVlKiBiYXNlTWVtb3J5ID0gbnVs
bHB0cjsKQEAgLTkxNCw3ICs5MDQsNyBAQCBzdGF0aWMgc3RkOjp1bmlxdWVfcHRyPENvbXBpbGF0
aW9uPiBjcmVhCiAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgfQog
Ci0gICAgYXV0byBqc0VudHJ5cG9pbnQgPSBzdGQ6Om1ha2VfdW5pcXVlPENvbXBpbGF0aW9uPih2
bSwgcHJvYyk7CisgICAgYXV0byBqc0VudHJ5cG9pbnQgPSBzdGQ6Om1ha2VfdW5pcXVlPENvbXBp
bGF0aW9uPihCMzo6Y29tcGlsZSh2bSwgcHJvYykpOwogICAgIGZ1bmN0aW9uLmpzVG9XYXNtRW50
cnlwb2ludC5jYWxsZWVTYXZlUmVnaXN0ZXJzID0gcHJvYy5jYWxsZWVTYXZlUmVnaXN0ZXJzKCk7
CiAgICAgcmV0dXJuIGpzRW50cnlwb2ludDsKIH0KQEAgLTkzNyw4ICs5MjcsOSBAQCBFeHBlY3Rl
ZDxzdGQ6OnVuaXF1ZV9wdHI8V2FzbUludGVybmFsRnVuCiAgICAgaWYgKHZlcmJvc2UpCiAgICAg
ICAgIGRhdGFMb2coIlBvc3QgU1NBOiAiLCBwcm9jZWR1cmUpOwogCi0gICAgcmVzdWx0LT53YXNt
RW50cnlwb2ludC5jb21waWxhdGlvbiA9IHN0ZDo6bWFrZV91bmlxdWU8Q29tcGlsYXRpb24+KHZt
LCBwcm9jZWR1cmUsIG9wdExldmVsKTsKKyAgICByZXN1bHQtPndhc21FbnRyeXBvaW50LmNvbXBp
bGF0aW9uID0gc3RkOjptYWtlX3VuaXF1ZTxCMzo6Q29tcGlsYXRpb24+KEIzOjpjb21waWxlKHZt
LCBwcm9jZWR1cmUsIG9wdExldmVsKSk7CiAgICAgcmVzdWx0LT53YXNtRW50cnlwb2ludC5jYWxs
ZWVTYXZlUmVnaXN0ZXJzID0gcHJvY2VkdXJlLmNhbGxlZVNhdmVSZWdpc3RlcnMoKTsKKwogICAg
IHJlc3VsdC0+anNUb1dhc21FbnRyeXBvaW50LmNvbXBpbGF0aW9uID0gY3JlYXRlSlNUb1dhc21X
cmFwcGVyKHZtLCAqcmVzdWx0LCBzaWduYXR1cmUsIHJlc3VsdC0+d2FzbUVudHJ5cG9pbnQuY29t
cGlsYXRpb24tPmNvZGUoKSwgaW5mby5tZW1vcnkpOwogICAgIHJldHVybiBXVEZNb3ZlKHJlc3Vs
dCk7CiB9CkBAIC0xMDk1LDggKzEwODYsOCBAQCBhdXRvIEIzSVJHZW5lcmF0b3I6OmFkZE9wPE9w
VHlwZTo6STMyVHJ1CiAgICAgICAgIG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8VmFsdWU+KG1f
cHJvYywgR3JlYXRlckVxdWFsLCBPcmlnaW4oKSwgYXJnLCBtaW4pKTsKICAgICBvdXRPZkJvdW5k
cyA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8VmFsdWU+KG1fcHJvYywgRXF1YWwsIE9yaWdp
bigpLCBvdXRPZkJvdW5kcywgemVyb0ZvclR5cGUoSTMyKSk7CiAgICAgQ2hlY2tWYWx1ZSogdHJh
cCA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8Q2hlY2tWYWx1ZT4obV9wcm9jLCBDaGVjaywg
T3JpZ2luKCksIG91dE9mQm91bmRzKTsKLSAgICB0cmFwLT5zZXRHZW5lcmF0b3IoW10gKENDYWxs
SGVscGVycyYgaml0LCBjb25zdCBTdGFja21hcEdlbmVyYXRpb25QYXJhbXMmKSB7Ci0gICAgICAg
IGppdC5icmVha3BvaW50KCk7CisgICAgdHJhcC0+c2V0R2VuZXJhdG9yKFs9XSAoQ0NhbGxIZWxw
ZXJzJiBqaXQsIGNvbnN0IFN0YWNrbWFwR2VuZXJhdGlvblBhcmFtcyYpIHsKKyAgICAgICAgdGhp
cy0+ZW1pdEV4Y2VwdGlvbkNoZWNrKGppdCwgRXhjZXB0aW9uVHlwZTo6T3V0T2ZCb3VuZHNUcnVu
Yyk7CiAgICAgfSk7CiAgICAgUGF0Y2hwb2ludFZhbHVlKiBwYXRjaHBvaW50ID0gbV9jdXJyZW50
QmxvY2stPmFwcGVuZE5ldzxQYXRjaHBvaW50VmFsdWU+KG1fcHJvYywgSW50MzIsIE9yaWdpbigp
KTsKICAgICBwYXRjaHBvaW50LT5hcHBlbmQoYXJnLCBWYWx1ZVJlcDo6U29tZVJlZ2lzdGVyKTsK
QEAgLTExMTgsOCArMTEwOSw4IEBAIGF1dG8gQjNJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpJ
MzJUcnUKICAgICAgICAgbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxWYWx1ZT4obV9wcm9jLCBH
cmVhdGVyRXF1YWwsIE9yaWdpbigpLCBhcmcsIG1pbikpOwogICAgIG91dE9mQm91bmRzID0gbV9j
dXJyZW50QmxvY2stPmFwcGVuZE5ldzxWYWx1ZT4obV9wcm9jLCBFcXVhbCwgT3JpZ2luKCksIG91
dE9mQm91bmRzLCB6ZXJvRm9yVHlwZShJMzIpKTsKICAgICBDaGVja1ZhbHVlKiB0cmFwID0gbV9j
dXJyZW50QmxvY2stPmFwcGVuZE5ldzxDaGVja1ZhbHVlPihtX3Byb2MsIENoZWNrLCBPcmlnaW4o
KSwgb3V0T2ZCb3VuZHMpOwotICAgIHRyYXAtPnNldEdlbmVyYXRvcihbXSAoQ0NhbGxIZWxwZXJz
JiBqaXQsIGNvbnN0IFN0YWNrbWFwR2VuZXJhdGlvblBhcmFtcyYpIHsKLSAgICAgICAgaml0LmJy
ZWFrcG9pbnQoKTsKKyAgICB0cmFwLT5zZXRHZW5lcmF0b3IoWz1dIChDQ2FsbEhlbHBlcnMmIGpp
dCwgY29uc3QgU3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zJikgeworICAgICAgICB0aGlzLT5lbWl0
RXhjZXB0aW9uQ2hlY2soaml0LCBFeGNlcHRpb25UeXBlOjpPdXRPZkJvdW5kc1RydW5jKTsKICAg
ICB9KTsKICAgICBQYXRjaHBvaW50VmFsdWUqIHBhdGNocG9pbnQgPSBtX2N1cnJlbnRCbG9jay0+
YXBwZW5kTmV3PFBhdGNocG9pbnRWYWx1ZT4obV9wcm9jLCBJbnQzMiwgT3JpZ2luKCkpOwogICAg
IHBhdGNocG9pbnQtPmFwcGVuZChhcmcsIFZhbHVlUmVwOjpTb21lUmVnaXN0ZXIpOwpAQCAtMTE0
Miw4ICsxMTMzLDggQEAgYXV0byBCM0lSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6OkkzMlRydQog
ICAgICAgICBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFZhbHVlPihtX3Byb2MsIEdyZWF0ZXJU
aGFuLCBPcmlnaW4oKSwgYXJnLCBtaW4pKTsKICAgICBvdXRPZkJvdW5kcyA9IG1fY3VycmVudEJs
b2NrLT5hcHBlbmROZXc8VmFsdWU+KG1fcHJvYywgRXF1YWwsIE9yaWdpbigpLCBvdXRPZkJvdW5k
cywgemVyb0ZvclR5cGUoSTMyKSk7CiAgICAgQ2hlY2tWYWx1ZSogdHJhcCA9IG1fY3VycmVudEJs
b2NrLT5hcHBlbmROZXc8Q2hlY2tWYWx1ZT4obV9wcm9jLCBDaGVjaywgT3JpZ2luKCksIG91dE9m
Qm91bmRzKTsKLSAgICB0cmFwLT5zZXRHZW5lcmF0b3IoW10gKENDYWxsSGVscGVycyYgaml0LCBj
b25zdCBTdGFja21hcEdlbmVyYXRpb25QYXJhbXMmKSB7Ci0gICAgICAgIGppdC5icmVha3BvaW50
KCk7CisgICAgdHJhcC0+c2V0R2VuZXJhdG9yKFs9XSAoQ0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0
IFN0YWNrbWFwR2VuZXJhdGlvblBhcmFtcyYpIHsKKyAgICAgICAgdGhpcy0+ZW1pdEV4Y2VwdGlv
bkNoZWNrKGppdCwgRXhjZXB0aW9uVHlwZTo6T3V0T2ZCb3VuZHNUcnVuYyk7CiAgICAgfSk7CiAg
ICAgUGF0Y2hwb2ludFZhbHVlKiBwYXRjaHBvaW50ID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5l
dzxQYXRjaHBvaW50VmFsdWU+KG1fcHJvYywgSW50MzIsIE9yaWdpbigpKTsKICAgICBwYXRjaHBv
aW50LT5hcHBlbmQoYXJnLCBWYWx1ZVJlcDo6U29tZVJlZ2lzdGVyKTsKQEAgLTExNjUsOCArMTE1
Niw4IEBAIGF1dG8gQjNJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpJMzJUcnUKICAgICAgICAg
bV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxWYWx1ZT4obV9wcm9jLCBHcmVhdGVyVGhhbiwgT3Jp
Z2luKCksIGFyZywgbWluKSk7CiAgICAgb3V0T2ZCb3VuZHMgPSBtX2N1cnJlbnRCbG9jay0+YXBw
ZW5kTmV3PFZhbHVlPihtX3Byb2MsIEVxdWFsLCBPcmlnaW4oKSwgb3V0T2ZCb3VuZHMsIHplcm9G
b3JUeXBlKEkzMikpOwogICAgIENoZWNrVmFsdWUqIHRyYXAgPSBtX2N1cnJlbnRCbG9jay0+YXBw
ZW5kTmV3PENoZWNrVmFsdWU+KG1fcHJvYywgQ2hlY2ssIE9yaWdpbigpLCBvdXRPZkJvdW5kcyk7
Ci0gICAgdHJhcC0+c2V0R2VuZXJhdG9yKFtdIChDQ2FsbEhlbHBlcnMmIGppdCwgY29uc3QgU3Rh
Y2ttYXBHZW5lcmF0aW9uUGFyYW1zJikgewotICAgICAgICBqaXQuYnJlYWtwb2ludCgpOworICAg
IHRyYXAtPnNldEdlbmVyYXRvcihbPV0gKENDYWxsSGVscGVycyYgaml0LCBjb25zdCBTdGFja21h
cEdlbmVyYXRpb25QYXJhbXMmKSB7CisgICAgICAgIHRoaXMtPmVtaXRFeGNlcHRpb25DaGVjayhq
aXQsIEV4Y2VwdGlvblR5cGU6Ok91dE9mQm91bmRzVHJ1bmMpOwogICAgIH0pOwogICAgIFBhdGNo
cG9pbnRWYWx1ZSogcGF0Y2hwb2ludCA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8UGF0Y2hw
b2ludFZhbHVlPihtX3Byb2MsIEludDMyLCBPcmlnaW4oKSk7CiAgICAgcGF0Y2hwb2ludC0+YXBw
ZW5kKGFyZywgVmFsdWVSZXA6OlNvbWVSZWdpc3Rlcik7CkBAIC0xMTg4LDggKzExNzksOCBAQCBh
dXRvIEIzSVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6STY0VHJ1CiAgICAgICAgIG1fY3VycmVu
dEJsb2NrLT5hcHBlbmROZXc8VmFsdWU+KG1fcHJvYywgR3JlYXRlckVxdWFsLCBPcmlnaW4oKSwg
YXJnLCBtaW4pKTsKICAgICBvdXRPZkJvdW5kcyA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8
VmFsdWU+KG1fcHJvYywgRXF1YWwsIE9yaWdpbigpLCBvdXRPZkJvdW5kcywgemVyb0ZvclR5cGUo
STMyKSk7CiAgICAgQ2hlY2tWYWx1ZSogdHJhcCA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8
Q2hlY2tWYWx1ZT4obV9wcm9jLCBDaGVjaywgT3JpZ2luKCksIG91dE9mQm91bmRzKTsKLSAgICB0
cmFwLT5zZXRHZW5lcmF0b3IoW10gKENDYWxsSGVscGVycyYgaml0LCBjb25zdCBTdGFja21hcEdl
bmVyYXRpb25QYXJhbXMmKSB7Ci0gICAgICAgIGppdC5icmVha3BvaW50KCk7CisgICAgdHJhcC0+
c2V0R2VuZXJhdG9yKFs9XSAoQ0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0IFN0YWNrbWFwR2VuZXJh
dGlvblBhcmFtcyYpIHsKKyAgICAgICAgdGhpcy0+ZW1pdEV4Y2VwdGlvbkNoZWNrKGppdCwgRXhj
ZXB0aW9uVHlwZTo6T3V0T2ZCb3VuZHNUcnVuYyk7CiAgICAgfSk7CiAgICAgUGF0Y2hwb2ludFZh
bHVlKiBwYXRjaHBvaW50ID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxQYXRjaHBvaW50VmFs
dWU+KG1fcHJvYywgSW50NjQsIE9yaWdpbigpKTsKICAgICBwYXRjaHBvaW50LT5hcHBlbmQoYXJn
LCBWYWx1ZVJlcDo6U29tZVJlZ2lzdGVyKTsKQEAgLTEyMTEsOCArMTIwMiw4IEBAIGF1dG8gQjNJ
UkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpJNjRUcnUKICAgICAgICAgbV9jdXJyZW50QmxvY2st
PmFwcGVuZE5ldzxWYWx1ZT4obV9wcm9jLCBHcmVhdGVyVGhhbiwgT3JpZ2luKCksIGFyZywgbWlu
KSk7CiAgICAgb3V0T2ZCb3VuZHMgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFZhbHVlPiht
X3Byb2MsIEVxdWFsLCBPcmlnaW4oKSwgb3V0T2ZCb3VuZHMsIHplcm9Gb3JUeXBlKEkzMikpOwog
ICAgIENoZWNrVmFsdWUqIHRyYXAgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PENoZWNrVmFs
dWU+KG1fcHJvYywgQ2hlY2ssIE9yaWdpbigpLCBvdXRPZkJvdW5kcyk7Ci0gICAgdHJhcC0+c2V0
R2VuZXJhdG9yKFtdIChDQ2FsbEhlbHBlcnMmIGppdCwgY29uc3QgU3RhY2ttYXBHZW5lcmF0aW9u
UGFyYW1zJikgewotICAgICAgICBqaXQuYnJlYWtwb2ludCgpOworICAgIHRyYXAtPnNldEdlbmVy
YXRvcihbPV0gKENDYWxsSGVscGVycyYgaml0LCBjb25zdCBTdGFja21hcEdlbmVyYXRpb25QYXJh
bXMmKSB7CisgICAgICAgIHRoaXMtPmVtaXRFeGNlcHRpb25DaGVjayhqaXQsIEV4Y2VwdGlvblR5
cGU6Ok91dE9mQm91bmRzVHJ1bmMpOwogICAgIH0pOwogCiAgICAgVmFsdWUqIGNvbnN0YW50OwpA
QCAtMTI1Myw4ICsxMjQ0LDggQEAgYXV0byBCM0lSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6Okk2
NFRydQogICAgICAgICBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFZhbHVlPihtX3Byb2MsIEdy
ZWF0ZXJFcXVhbCwgT3JpZ2luKCksIGFyZywgbWluKSk7CiAgICAgb3V0T2ZCb3VuZHMgPSBtX2N1
cnJlbnRCbG9jay0+YXBwZW5kTmV3PFZhbHVlPihtX3Byb2MsIEVxdWFsLCBPcmlnaW4oKSwgb3V0
T2ZCb3VuZHMsIHplcm9Gb3JUeXBlKEkzMikpOwogICAgIENoZWNrVmFsdWUqIHRyYXAgPSBtX2N1
cnJlbnRCbG9jay0+YXBwZW5kTmV3PENoZWNrVmFsdWU+KG1fcHJvYywgQ2hlY2ssIE9yaWdpbigp
LCBvdXRPZkJvdW5kcyk7Ci0gICAgdHJhcC0+c2V0R2VuZXJhdG9yKFtdIChDQ2FsbEhlbHBlcnMm
IGppdCwgY29uc3QgU3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zJikgewotICAgICAgICBqaXQuYnJl
YWtwb2ludCgpOworICAgIHRyYXAtPnNldEdlbmVyYXRvcihbPV0gKENDYWxsSGVscGVycyYgaml0
LCBjb25zdCBTdGFja21hcEdlbmVyYXRpb25QYXJhbXMmKSB7CisgICAgICAgIHRoaXMtPmVtaXRF
eGNlcHRpb25DaGVjayhqaXQsIEV4Y2VwdGlvblR5cGU6Ok91dE9mQm91bmRzVHJ1bmMpOwogICAg
IH0pOwogICAgIFBhdGNocG9pbnRWYWx1ZSogcGF0Y2hwb2ludCA9IG1fY3VycmVudEJsb2NrLT5h
cHBlbmROZXc8UGF0Y2hwb2ludFZhbHVlPihtX3Byb2MsIEludDY0LCBPcmlnaW4oKSk7CiAgICAg
cGF0Y2hwb2ludC0+YXBwZW5kKGFyZywgVmFsdWVSZXA6OlNvbWVSZWdpc3Rlcik7CkBAIC0xMjc2
LDggKzEyNjcsOCBAQCBhdXRvIEIzSVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6STY0VHJ1CiAg
ICAgICAgIG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8VmFsdWU+KG1fcHJvYywgR3JlYXRlclRo
YW4sIE9yaWdpbigpLCBhcmcsIG1pbikpOwogICAgIG91dE9mQm91bmRzID0gbV9jdXJyZW50Qmxv
Y2stPmFwcGVuZE5ldzxWYWx1ZT4obV9wcm9jLCBFcXVhbCwgT3JpZ2luKCksIG91dE9mQm91bmRz
LCB6ZXJvRm9yVHlwZShJMzIpKTsKICAgICBDaGVja1ZhbHVlKiB0cmFwID0gbV9jdXJyZW50Qmxv
Y2stPmFwcGVuZE5ldzxDaGVja1ZhbHVlPihtX3Byb2MsIENoZWNrLCBPcmlnaW4oKSwgb3V0T2ZC
b3VuZHMpOwotICAgIHRyYXAtPnNldEdlbmVyYXRvcihbXSAoQ0NhbGxIZWxwZXJzJiBqaXQsIGNv
bnN0IFN0YWNrbWFwR2VuZXJhdGlvblBhcmFtcyYpIHsKLSAgICAgICAgaml0LmJyZWFrcG9pbnQo
KTsKKyAgICB0cmFwLT5zZXRHZW5lcmF0b3IoWz1dIChDQ2FsbEhlbHBlcnMmIGppdCwgY29uc3Qg
U3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zJikgeworICAgICAgICB0aGlzLT5lbWl0RXhjZXB0aW9u
Q2hlY2soaml0LCBFeGNlcHRpb25UeXBlOjpPdXRPZkJvdW5kc1RydW5jKTsKICAgICB9KTsKIAog
ICAgIFZhbHVlKiBjb25zdGFudDsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dh
c21FeGNlcHRpb25UeXBlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3dh
c20vV2FzbUV4Y2VwdGlvblR5cGUuaAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvd2FzbS9XYXNtRXhjZXB0aW9uVHlwZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEs
NjIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IK
KyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJh
Z21hIG9uY2UKKworI2lmIEVOQUJMRShXRUJBU1NFTUJMWSkKKworbmFtZXNwYWNlIEpTQyB7CisK
K25hbWVzcGFjZSBXYXNtIHsKKworI2RlZmluZSBGT1JfRUFDSF9FWENFUFRJT04obWFjcm8pIFwK
KyAgICBtYWNybyhPdXRPZkJvdW5kc01lbW9yeUFjY2VzcywgICJPdXQgb2YgYm91bmRzIG1lbW9y
eSBhY2Nlc3MiKSBcCisgICAgbWFjcm8oT3V0T2ZCb3VuZHNDYWxsSW5kaXJlY3QsICJPdXQgb2Yg
Ym91bmRzIGNhbGxfaW5kaXJlY3QiKSBcCisgICAgbWFjcm8oTnVsbFRhYmxlRW50cnksICAiY2Fs
bF9pbmRpcmVjdCB0byBhIG51bGwgdGFibGUgZW50cnkiKSBcCisgICAgbWFjcm8oQmFkU2lnbmF0
dXJlLCAiY2FsbF9pbmRpcmVjdCB0byBhIHNpZ25hdHVyZSB0aGF0IGRvZXMgbm90IG1hdGNoIikg
XAorICAgIG1hY3JvKE91dE9mQm91bmRzVHJ1bmMsICJPdXQgb2YgYm91bmRzIFRydW5jIG9wZXJh
dGlvbiIpIFwKKworZW51bSBjbGFzcyBFeGNlcHRpb25UeXBlIDogdWludDMyX3QgeworI2RlZmlu
ZSBNQUtFX0VOVU0oZW51bU5hbWUsIGVycm9yKSBlbnVtTmFtZSwKKyAgICBGT1JfRUFDSF9FWENF
UFRJT04oTUFLRV9FTlVNKQorI3VuZGVmIE1BS0VfRU5VTQorfTsKKworQUxXQVlTX0lOTElORSBj
b25zdCBjaGFyKiBlcnJvck1lc3NhZ2VGb3JFeGNlcHRpb25UeXBlKEV4Y2VwdGlvblR5cGUgdHlw
ZSkKK3sKKyAgICBzd2l0Y2ggKHR5cGUpIHsKKyNkZWZpbmUgU1dJVENIX0NBU0UoZW51bU5hbWUs
IGVycm9yKSBcCisgICAgY2FzZSBFeGNlcHRpb25UeXBlOjplbnVtTmFtZTogcmV0dXJuIGVycm9y
OworCisgICAgRk9SX0VBQ0hfRVhDRVBUSU9OKFNXSVRDSF9DQVNFKQorI3VuZGVmIFNXSVRDSF9D
QVNFCisgICAgfQorICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHJldHVybiAiIjsKK30K
KworfSB9IC8vIG5hbWVzcGFjZSBKU0M6Oldhc20KKworI2VuZGlmIC8vIEVOQUJMRShXRUJBU1NF
TUJMWSkK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>297303</attachid>
            <date>2016-12-15 23:34:55 -0800</date>
            <delta_ts>2016-12-16 11:24:44 -0800</delta_ts>
            <desc>patch</desc>
            <filename>a-backup.diff</filename>
            <type>text/plain</type>
            <size>48719</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IEpTVGVzdHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEpTVGVzdHMvQ2hhbmdlTG9n
CShyZXZpc2lvbiAyMDk5MTMpCisrKyBKU1Rlc3RzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpA
QCAtMSwzICsxLDE1IEBACisyMDE2LTEyLTE1ICBTYWFtIEJhcmF0aSAgPHNiYXJhdGlAYXBwbGUu
Y29tPgorCisgICAgICAgIFdlYkFzc2VtYmx5OiBXYXNtQjNJUkdlbmVyYXRvciBzaG91bGQgdGhy
b3cgZXhjZXB0aW9ucyBpbnN0ZWFkIG9mIGNyYXNoCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjU4MzQKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JP
RFkgKE9PUFMhKS4KKworICAgICAgICAqIHdhc20vZnVuY3Rpb24tdGVzdHMvZXhjZXB0aW9ucy5q
czogQWRkZWQuCisgICAgICAgIChpbXBvcnQuQnVpbGRlci5mcm9tLnN0cmluZ19hcHBlYXJlZF9o
ZXJlLmltcG9ydC5hcy5hc3NlcnQuZnJvbS5zdHJpbmdfYXBwZWFyZWRfaGVyZS5tYWtlSW5zdGFu
Y2UpOgorICAgICAgICAqIHdhc20vZnVuY3Rpb24tdGVzdHMvdGFibGUtYmFzaWMuanM6CisgICAg
ICAgIChpLmkuNDIudGhyb3cubmV3LkVycm9yKToKKwogMjAxNi0xMi0xNSAgS2VpdGggTWlsbGVy
ICA8a2VpdGhfbWlsbGVyQGFwcGxlLmNvbT4KIAogICAgICAgICBGaXggdmFsaWRhdGlvbiBvZiBu
b24tdm9pZCBpZiBibG9ja3Mgd2l0aCBubyBlbHNlCkluZGV4OiBKU1Rlc3RzL3dhc20vZnVuY3Rp
b24tdGVzdHMvZXhjZXB0aW9ucy5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKU1Rlc3RzL3dhc20vZnVuY3Rp
b24tdGVzdHMvZXhjZXB0aW9ucy5qcwkobm9uZXhpc3RlbnQpCisrKyBKU1Rlc3RzL3dhc20vZnVu
Y3Rpb24tdGVzdHMvZXhjZXB0aW9ucy5qcwkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDY3IEBA
CitpbXBvcnQgQnVpbGRlciBmcm9tICcuLi9CdWlsZGVyLmpzJworaW1wb3J0ICogYXMgYXNzZXJ0
IGZyb20gJy4uL2Fzc2VydC5qcycKKworZnVuY3Rpb24gbWFrZUluc3RhbmNlKCkgeworICAgIGNv
bnN0IHRhYmxlRGVzY3JpcHRpb24gPSB7aW5pdGlhbDogMSwgZWxlbWVudDogImFueWZ1bmMifTsK
KyAgICBjb25zdCBidWlsZGVyID0gbmV3IEJ1aWxkZXIoKQorICAgICAgICAuVHlwZSgpCisgICAg
ICAgICAgICAuRnVuYyhbImkzMiIsICJpMzIiXSwgImkzMiIpCisgICAgICAgICAgICAuRnVuYyhb
ImkzMiJdLCAiaTMyIikKKyAgICAgICAgLkVuZCgpCisgICAgICAgIC5JbXBvcnQoKQorICAgICAg
ICAgICAgLlRhYmxlKCJpbXAiLCAidGFibGUiLCB0YWJsZURlc2NyaXB0aW9uKQorICAgICAgICAu
RW5kKCkKKyAgICAgICAgLkZ1bmN0aW9uKCkuRW5kKCkKKyAgICAgICAgLkV4cG9ydCgpCisgICAg
ICAgICAgICAuRnVuY3Rpb24oImZvbyIpCisgICAgICAgICAgICAuRnVuY3Rpb24oImJhciIpCisg
ICAgICAgIC5FbmQoKQorICAgICAgICAuQ29kZSgpCisgICAgICAgICAgICAuRnVuY3Rpb24oImZv
byIsIDAgLypbJ2kzMicsICdpMzInXSA9PiAnaTMyJyovKQorICAgICAgICAgICAgICAgIC5HZXRM
b2NhbCgxKSAvLyBwYXJhbWV0ZXIgdG8gY2FsbAorICAgICAgICAgICAgICAgIC5HZXRMb2NhbCgw
KSAvLyBjYWxsIGluZGV4CisgICAgICAgICAgICAgICAgLkNhbGxJbmRpcmVjdCgxLCAwKSAvLyBj
YWxsaW5nIGZ1bmN0aW9uIG9mIHR5cGUgWydpMzInXSA9PiAnaTMyJworICAgICAgICAgICAgICAg
IC5SZXR1cm4oKQorICAgICAgICAgICAgLkVuZCgpCisgICAgICAgICAgICAuRnVuY3Rpb24oImJh
ciIsIDEgLypbJ2kzMiddID0+ICdpMzInKi8pCisgICAgICAgICAgICAgICAgLkdldExvY2FsKDAp
CisgICAgICAgICAgICAgICAgLkkzMkNvbnN0KDQyKQorICAgICAgICAgICAgICAgIC5JMzJBZGQo
KQorICAgICAgICAgICAgICAgIC5SZXR1cm4oKQorICAgICAgICAgICAgLkVuZCgpCisgICAgICAg
IC5FbmQoKTsKKworCisgICAgY29uc3QgYmluID0gYnVpbGRlci5XZWJBc3NlbWJseSgpLmdldCgp
OworICAgIGNvbnN0IG1vZHVsZSA9IG5ldyBXZWJBc3NlbWJseS5Nb2R1bGUoYmluKTsKKyAgICBj
b25zdCB0YWJsZSA9IG5ldyBXZWJBc3NlbWJseS5UYWJsZSh0YWJsZURlc2NyaXB0aW9uKTsKKyAg
ICByZXR1cm4ge2luc3RhbmNlOiBuZXcgV2ViQXNzZW1ibHkuSW5zdGFuY2UobW9kdWxlLCB7aW1w
OiB7dGFibGV9fSksIHRhYmxlfTsKK30KKworeworICAgIGNvbnN0IHtpbnN0YW5jZSwgdGFibGV9
ID0gbWFrZUluc3RhbmNlKCk7CisgICAgY29uc3QgZm9vID0gaW5zdGFuY2UuZXhwb3J0cy5mb287
CisgICAgY29uc3QgYmFyID0gaW5zdGFuY2UuZXhwb3J0cy5iYXI7CisgICAgYXNzZXJ0LmVxKHRh
YmxlLmdldCgwKSwgbnVsbCk7CisKKyAgICBmb3IgKGxldCBpID0gMDsgaSA8IDEwMDA7IGkrKykg
eworICAgICAgICBhc3NlcnQudGhyb3dzKCgpID0+IGZvbygwLCBpKSwgV2ViQXNzZW1ibHkuUnVu
dGltZUVycm9yLCAiY2FsbF9pbmRpcmVjdCB0byBhIG51bGwgdGFibGUgZW50cnkiKTsKKyAgICB9
CisKKyAgICB0YWJsZS5zZXQoMCwgZm9vKTsKKyAgICBhc3NlcnQuZXEodGFibGUuZ2V0KDApLCBm
b28pOworCisgICAgZm9yIChsZXQgaSA9IDA7IGkgPCAxMDAwOyBpKyspIHsKKyAgICAgICAgYXNz
ZXJ0LnRocm93cygoKSA9PiBmb28oMSArIGksIGkpLCBXZWJBc3NlbWJseS5SdW50aW1lRXJyb3Is
ICJPdXQgb2YgYm91bmRzIGNhbGxfaW5kaXJlY3QiKTsKKyAgICB9CisKKyAgICBmb3IgKGxldCBp
ID0gMDsgaSA8IDEwMDA7IGkrKykgeworICAgICAgICBhc3NlcnQudGhyb3dzKCgpID0+IGZvbygw
LCBpKSwgV2ViQXNzZW1ibHkuUnVudGltZUVycm9yLCAiY2FsbF9pbmRpcmVjdCB0byBhIHNpZ25h
dHVyZSB0aGF0IGRvZXMgbm90IG1hdGNoIik7CisgICAgfQorCisgICAgdGFibGUuc2V0KDAsIGJh
cik7CisgICAgYXNzZXJ0LmVxKHRhYmxlLmdldCgwKSwgYmFyKTsKKyAgICBmb3IgKGxldCBpID0g
MDsgaSA8IDI1OyBpKyspIHsKKyAgICAgICAgYXNzZXJ0LmVxKGZvbygwLCBpKSwgaSArIDQyKTsK
KyAgICB9Cit9CkluZGV4OiBKU1Rlc3RzL3dhc20vZnVuY3Rpb24tdGVzdHMvdGFibGUtYmFzaWMu
anMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gSlNUZXN0cy93YXNtL2Z1bmN0aW9uLXRlc3RzL3RhYmxlLWJhc2lj
LmpzCShyZXZpc2lvbiAyMDk5MTMpCisrKyBKU1Rlc3RzL3dhc20vZnVuY3Rpb24tdGVzdHMvdGFi
bGUtYmFzaWMuanMJKHdvcmtpbmcgY29weSkKQEAgLTUzLDE1ICs1MywxMiBAQCBmdW5jdGlvbiBt
YWtlSW5zdGFuY2UoKSB7CiAvLyBGSVhNRTogbWFrZSB0aGlzIHdvcmsgY3Jvc3MgbW9kdWxlLiBU
aGUgcmVhc29uIGl0IGRvZXNuJ3QKIC8vIG5vdyBpcyB0aGF0IHdlIGRvbid0IHVuaXF1ZSBTaWdu
YXR1cmUqLgogLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2NTUx
MQotLyoKIHsKICAgICBjb25zdCB7aW5zdGFuY2UsIHRhYmxlfSA9IG1ha2VJbnN0YW5jZSgpOwog
ICAgIGNvbnN0IGZvbyA9IGluc3RhbmNlLmV4cG9ydHMuZm9vOwotICAgIC8vdGFibGUuc2V0KDAs
IG1ha2VJbnN0YW5jZSgpLmluc3RhbmNlLmV4cG9ydHMuYmFyKTsgLy8gQ3Jvc3MgaW5zdGFuY2Ug
ZnVuY3Rpb24uCisgICAgdGFibGUuc2V0KDAsIG1ha2VJbnN0YW5jZSgpLmluc3RhbmNlLmV4cG9y
dHMuYmFyKTsgLy8gQ3Jvc3MgaW5zdGFuY2UgZnVuY3Rpb24uCiAKICAgICBmb3IgKGxldCBpID0g
MDsgaSA8IDEwMDA7IGkrKykgewotICAgICAgICBpZiAoZm9vKDAsIGkpICE9PSBpICsgNDIpCi0g
ICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoIkJhZCBjYWxsIGluZGlyZWN0Iik7CisgICAgICAg
IGFzc2VydC50aHJvd3MoKCkgPT4gZm9vKDAsIGkpLCBXZWJBc3NlbWJseS5SdW50aW1lRXJyb3Is
ICJjYWxsX2luZGlyZWN0IHRvIGEgc2lnbmF0dXJlIHRoYXQgZG9lcyBub3QgbWF0Y2giKTsKICAg
ICB9CiB9Ci0qLwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCShyZXZpc2lvbiAyMDk5MTMp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0x
LDMgKzEsNTYgQEAKKzIwMTYtMTItMTUgIFNhYW0gQmFyYXRpICA8c2JhcmF0aUBhcHBsZS5jb20+
CisKKyAgICAgICAgV2ViQXNzZW1ibHk6IFdhc21CM0lSR2VuZXJhdG9yIHNob3VsZCB0aHJvdyBl
eGNlcHRpb25zIGluc3RlYWQgb2YgY3Jhc2gKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTE2NTgzNAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgIFRoaXMgcGF0Y2ggZ2VuZXJhbGl6ZXMgaG93IHdlIHRocm93IGV4
Y2VwdGlvbnMgaW4gdGhlIFdhc206OkIzSVJHZW5lcmF0b3IuCisgICAgICAgIFRoZXJlIGFyZSBz
dGlsbCBwbGFjZXMgd2hlcmUgd2UgbmVlZCB0byB0aHJvdyBleGNlcHRpb25zIGFuZCB3ZSBkb24n
dCwgYnV0CisgICAgICAgIHRoaXMgcGF0Y2ggcmVtb3ZlcyBtb3N0IG9mIHRob3NlIHBsYWNlcyBp
bnNpZGUgdGhlIElSIGdlbmVyYXRvci4gVGhlcmUgYXJlCisgICAgICAgIHN0aWxsIGEgZmV3IHBs
YWNlcyB3ZSBuZWVkIHRvIHRocm93IGV4Y2VwdGlvbnMgaW5zaWRlIHRoZSBJUiBnZW5lcmF0b3Is
IGxpa2UKKyAgICAgICAgZGl2L21vZCBieSAwLiBUaG9zZSB3aWxsIGJlIGRvbmUgaW4gYSBzZXBh
cmF0ZSBwYXRjaC4gQWxzbywgdGhlcmUgYXJlCisgICAgICAgIHN0aWxsIHNvbWUgc3R1YnMgd2Ug
bmVlZCB0byB0aHJvdyBleGNlcHRpb25zIGZyb207IHRob3NlIHdpbGwgYWxzbyBiZQorICAgICAg
ICBkb25lIGluIGEgc2VwYXJhdGUgcGF0Y2guCisKKyAgICAgICAgQWxsIGV4Y2VwdGlvbnMgdGhy
b3duIGZyb20gV2FzbSBzaGFyZSBhIGNvbW1vbiBzdHViLiBUaGUgQUJJIGZvciB0aGUgc3R1Ygor
ICAgICAgICBpcyB0byBtb3ZlIHRoZSBXYXNtOjpFeGNlcHRpb25UeXBlIGludG8gYXJnR1BSMSBh
bmQganVtcCB0byB0aGUgc3R1Yi4KKyAgICAgICAgVGhlIHN0dWIgd2lsbCB0aGVuIHRocm93IGFu
IGV4Y2VwdGlvbiB3aXRoIGFuIGVycm9yIG1lc3NhZ2UgdGFpbG9yZWQKKyAgICAgICAgdG8gdGhl
IHBhcnRpY3VsYXIgV2FzbTo6RXhjZXB0aW9uVHlwZSBmYWlsdXJlLgorCisgICAgICAgIFRoaXMg
cGF0Y2ggYWxzbyByZWZhY3RvcnMgQjM6OkNvbXBpbGF0aW9uLiBCZWZvcmUsIEIzOjpDb21waWxh
dGlvbihWTSwgUHJvY2VkdXJlKQorICAgICAgICBjb25zdHJ1Y3RvciB3b3VsZCBjb21waWxlIGEg
QjMgZnVuY3Rpb24uIFRoaXMgcGF0Y2ggbWFrZXMgQjM6OkNvbXBpbGF0aW9uIGEgc2ltcGxlIAor
ICAgICAgICB0dXBsZSB0aGF0IGtlZXBzIHRoZSBuZWNlc3NhcnkgYml0cyBvZiBCMyBmdW5jdGlv
biBhbGl2ZSBpbiBvcmRlciB0byBiZSBydW5uYWJsZS4KKyAgICAgICAgVGhlcmUgaXMgYSBuZXcg
ZnVuY3Rpb24gdGhhdCBhY3R1YWxseSBkb2VzIHRoZSBjb21waWxhdGlvbiBmb3IgeW91LiBJdCBp
czoKKyAgICAgICAgQ29tcGlsYXRpb24gQjM6OmNvbXBpbGUoVk0mLCBQcm9jZWR1cmUmKQorICAg
ICAgICBUaGUgcmVhc29uIGZvciB0aGlzIGNoYW5nZSBpcyB0aGF0IEknbSBub3cgdXNpbmcgQjM6
OkNvbXBpbGF0aW9uKENvZGVSZWYsIE9wYXF1ZUJ5cHJvZHVjdHMpCisgICAgICAgIGNvbnN0cnVj
dG9yIGluIFdhc20gY29kZS4gSXQgaXMgd2VpcmQgdG8gaGF2ZSBhIGNsYXNzIGJvdGggaGF2ZSBh
CisgICAgICAgIGNvbnN0cnVjdG9yIHRoYXQgaW5zdGFudGlhdGVzIHRoZSB0dXBsZSwgYW5kIGFu
b3RoZXIgdGhhdCBwZXJmb3JtcyB0aGUKKyAgICAgICAgY29tcGlsYXRpb24gYW5kIHRoZW4gaW5z
dGFudGlhdGVzIHRoZSB0dXBsZS4gSXQncyBtb3JlIHN0cmFpZ2h0CisgICAgICAgIGZvcndhcmQg
aWYgQ29tcGlsYXRpb24ncyBqb2Igd2Fzbid0IHRvIGFjdHVhbGx5IGRvIHRoZSBjb21waWxhdGlv
bgorICAgICAgICBidXQganVzdCB0byBob2xkIHRoZSBuZWNlc3NhcnkgYml0cyB0byBrZWVwIGEg
Y29tcGlsZWQgQjMgYWxpdmUuCisKKyAgICAgICAgKiBDTWFrZUxpc3RzLnR4dDoKKyAgICAgICAg
KiBKYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIGIz
L0IzQ29tcGlsYXRpb24uY3BwOgorICAgICAgICAoSlNDOjpCMzo6Q29tcGlsYXRpb246OkNvbXBp
bGF0aW9uKToKKyAgICAgICAgKiBiMy9CM0NvbXBpbGF0aW9uLmg6CisgICAgICAgICogYjMvQjND
b21waWxlLmNwcDogQWRkZWQuCisgICAgICAgIChKU0M6OkIzOjpjb21waWxlKToKKyAgICAgICAg
KiBiMy9CM0NvbXBpbGUuaDogQWRkZWQuCisgICAgICAgICogYjMvdGVzdGIzLmNwcDoKKyAgICAg
ICAgKEpTQzo6QjM6OmNvbXBpbGUpOgorICAgICAgICAqIGppdC9UaHVua0dlbmVyYXRvcnMuY3Bw
OgorICAgICAgICAoSlNDOjp0aHJvd0V4Y2VwdGlvbkZyb21XYXNtVGh1bmtHZW5lcmF0b3IpOgor
ICAgICAgICAqIGppdC9UaHVua0dlbmVyYXRvcnMuaDoKKyAgICAgICAgKiB3YXNtL1dhc21CM0lS
R2VuZXJhdG9yLmNwcDoKKyAgICAgICAgKEpTQzo6V2FzbTo6QjNJUkdlbmVyYXRvcjo6QjNJUkdl
bmVyYXRvcik6CisgICAgICAgIChKU0M6Oldhc206OkIzSVJHZW5lcmF0b3I6OmVtaXRFeGNlcHRp
b25DaGVjayk6CisgICAgICAgIChKU0M6Oldhc206OmNyZWF0ZUpTVG9XYXNtV3JhcHBlcik6Cisg
ICAgICAgIChKU0M6Oldhc206OnBhcnNlQW5kQ29tcGlsZSk6CisgICAgICAgICogd2FzbS9XYXNt
RXhjZXB0aW9uVHlwZS5oOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6V2FzbTo6ZXJyb3JNZXNzYWdl
Rm9yRXhjZXB0aW9uVHlwZSk6CisKIDIwMTYtMTItMTUgIERhcmluIEFkbGVyICA8ZGFyaW5AYXBw
bGUuY29tPgogCiAgICAgICAgIFVzZSBhc1N0cmluZyBpbnN0ZWFkIG9mIHRvV1RGU3RyaW5nLCB0
b1N0cmluZywgb3IgZ2V0U3RyaW5nIHdoZW4gd2UgYWxyZWFkeSBjaGVja2VkIGlzU3RyaW5nCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL0NNYWtlTGlzdHMudHh0CShyZXZpc2lvbiAyMDk5MTMpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQJKHdvcmtpbmcgY29weSkKQEAg
LTExNiw2ICsxMTYsNyBAQCBzZXQoSmF2YVNjcmlwdENvcmVfU09VUkNFUwogICAgIGIzL0IzQ2hl
Y2tWYWx1ZS5jcHAKICAgICBiMy9CM0NvbW1vbi5jcHAKICAgICBiMy9CM0NvbW11dGF0aXZpdHku
Y3BwCisgICAgYjMvQjNDb21waWxlLmNwcAogICAgIGIzL0IzQ29tcGlsYXRpb24uY3BwCiAgICAg
YjMvQjNDb25zdDMyVmFsdWUuY3BwCiAgICAgYjMvQjNDb25zdDY0VmFsdWUuY3BwCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUu
eGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gMjA5OTEzKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdv
cmtpbmcgY29weSkKQEAgLTEzMDIsNyArMTMwMiw3IEBACiAJCTUzRkEyQUUxMUNGMzdGM0YwMDIy
NzExRCAvKiBMTEludFByb3RvdHlwZUxvYWRBZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9pbnQuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUzRkEyQUUwMUNG
MzdGM0YwMDIyNzExRCAvKiBMTEludFByb3RvdHlwZUxvYWRBZGFwdGl2ZVN0cnVjdHVyZVdhdGNo
cG9pbnQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9Owog
CQk1M0ZBMkFFMzFDRjM4MDM5MDAyMjcxMUQgLyogTExJbnRQcm90b3R5cGVMb2FkQWRhcHRpdmVT
dHJ1Y3R1cmVXYXRjaHBvaW50LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDUzRkEyQUUyMUNGMzgwMzkwMDIyNzExRCAvKiBMTEludFByb3RvdHlwZUxv
YWRBZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9pbnQuY3BwICovOyB9OwogCQk1M0ZEMDREMzFEN0FC
Mjc3MDAzMjg3RDMgLyogV2FzbUNhbGxpbmdDb252ZW50aW9uLmNwcCBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUzRkQwNEQxMUQ3QUIxODcwMDMyODdEMyAv
KiBXYXNtQ2FsbGluZ0NvbnZlbnRpb24uY3BwICovOyB9OwotCQk1M0ZEMDRENDFEN0FCMjkxMDAz
Mjg3RDMgLyogV2FzbUNhbGxpbmdDb252ZW50aW9uLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1M0ZEMDREMjFEN0FCMTg3MDAzMjg3RDMgLyogV2FzbUNh
bGxpbmdDb252ZW50aW9uLmggKi87IH07CisJCTUzRkQwNEQ0MUQ3QUIyOTEwMDMyODdEMyAvKiBX
YXNtQ2FsbGluZ0NvbnZlbnRpb24uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDUzRkQwNEQyMUQ3QUIxODcwMDMyODdEMyAvKiBXYXNtQ2FsbGluZ0NvbnZl
bnRpb24uaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9Owog
CQk1M0ZGN0Y5OTFEQkZDRDkwMDBBMjZDQ0MgLyogV2FzbVZhbGlkYXRlLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1M0ZGN0Y5ODFEQkZDRDkwMDBBMjZD
Q0MgLyogV2FzbVZhbGlkYXRlLmggKi87IH07CiAJCTUzRkY3RjlCMURCRkQyQjkwMEEyNkNDQyAv
KiBXYXNtVmFsaWRhdGUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gNTNGRjdGOUExREJGRDJCOTAwQTI2Q0NDIC8qIFdhc21WYWxpZGF0ZS5jcHAgKi87
IH07CiAJCTVCNzBDRkRFMURCNjlFNjYwMEVDMjNGOSAvKiBKU0FzeW5jRnVuY3Rpb24uaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDVCNzBDRkQ4MURCNjlF
NUMwMEVDMjNGOSAvKiBKU0FzeW5jRnVuY3Rpb24uaCAqLzsgfTsKQEAgLTE0MDYsMTEgKzE0MDYs
MTMgQEAKIAkJNzkwNUJCNjkxRDEyMDUwRTAwMTlGRTU3IC8qIElubGluZUFjY2Vzcy5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzkwNUJCNjcxRDEyMDUw
RTAwMTlGRTU3IC8qIElubGluZUFjY2Vzcy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0g
KFByaXZhdGUsICk7IH07IH07CiAJCTc5MTYwREJEMUM4RTNFQzgwMDhDMDg1QSAvKiBQcm94eVJl
dm9rZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3
OTE2MERCQjFDOEUzRUM4MDA4QzA4NUEgLyogUHJveHlSZXZva2UuY3BwICovOyB9OwogCQk3OTE2
MERCRTFDOEUzRUM4MDA4QzA4NUEgLyogUHJveHlSZXZva2UuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDc5MTYwREJDMUM4RTNFQzgwMDhDMDg1QSAvKiBQ
cm94eVJldm9rZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07
IH07CisJCTc5MTlCNzgwMUUwMzU1OUMwMDVCRUVEOCAvKiBCM0NvbXBpbGUuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDc5MTlCNzdGMUUwMzU1OUMwMDVC
RUVEOCAvKiBCM0NvbXBpbGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRl
LCApOyB9OyB9OwogCQk3OTIzM0MyQjFEMzQ3MTU3MDBDNUE4MzQgLyogSklUTWF0aElDLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3OTIzM0MyOTFEMzQ3
MTU3MDBDNUE4MzQgLyogSklUTWF0aElDLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAo
UHJpdmF0ZSwgKTsgfTsgfTsKIAkJNzkyQ0IzNDkxQzRFRUQ1QzAwRDEzQUYzIC8qIFBDVG9Db2Rl
T3JpZ2luTWFwLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDc5MkNCMzQ3MUM0RUVENUMwMEQxM0FGMyAvKiBQQ1RvQ29kZU9yaWdpbk1hcC5jcHAgKi87
IH07CiAJCTc5MkNCMzRBMUM0RUVENUMwMEQxM0FGMyAvKiBQQ1RvQ29kZU9yaWdpbk1hcC5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzkyQ0IzNDgxQzRF
RUQ1QzAwRDEzQUYzIC8qIFBDVG9Db2RlT3JpZ2luTWFwLmggKi87IHNldHRpbmdzID0ge0FUVFJJ
QlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNzk1QjE5OTcxRDc4QkUzNTAwMjYyRkEwIC8q
IE1hcEJhc2UuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gNzk1QjE5OTUxRDc4QkUzNTAwMjYyRkEwIC8qIE1hcEJhc2UuY3BwICovOyB9OwogCQk3OTVC
MTk5ODFENzhCRTM1MDAyNjJGQTAgLyogTWFwQmFzZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzk1QjE5OTYxRDc4QkUzNTAwMjYyRkEwIC8qIE1hcEJh
c2UuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQk3
OTVGMDk5RDFFMDM2MDA1MDBCQkUzN0YgLyogQjNDb21waWxlLmNwcCBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDc5NUYwOTlDMUUwMzYwMDUwMEJCRTM3RiAv
KiBCM0NvbXBpbGUuY3BwICovOyB9OwogCQk3OTY0NjU2QTFCOTUyRkYwMDAzMDU5RUUgLyogR2V0
UHV0SW5mby5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
Nzk2NDY1NjgxQjk1MkZGMDAwMzA1OUVFIC8qIEdldFB1dEluZm8uaCAqLzsgc2V0dGluZ3MgPSB7
QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk3OTZGQjQzQTFERkY4QzNGMDAzOUM5
NUQgLyogSlNXZWJBc3NlbWJseUhlbHBlcnMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDc5NkZCNDM5MURGRjhDM0YwMDM5Qzk1RCAvKiBKU1dlYkFzc2Vt
Ymx5SGVscGVycy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07
IH07CiAJCTc5N0UwN0E5MUI4RkNGQjkwMDg0MDBCQSAvKiBKU0dsb2JhbExleGljYWxFbnZpcm9u
bWVudC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3
OTdFMDdBNzFCOEZDRkI5MDA4NDAwQkEgLyogSlNHbG9iYWxMZXhpY2FsRW52aXJvbm1lbnQuY3Bw
ICovOyB9OwpAQCAtMTQzNyw2ICsxNDM5LDcgQEAKIAkJNzlDRkM2RjAxQzMzQjEwMDAwQzc2OEVB
IC8qIExMSW50UENSYW5nZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDc5Q0ZDNkVGMUMzM0IxMDAwMEM3NjhFQSAvKiBMTEludFBDUmFuZ2VzLmggKi87
IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNzlENUNENUEx
QzExMDZBOTAwQ0VDQTA3IC8qIFNhbXBsaW5nUHJvZmlsZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzlENUNENTgxQzExMDZBOTAwQ0VDQTA3IC8q
IFNhbXBsaW5nUHJvZmlsZXIuY3BwICovOyB9OwogCQk3OUQ1Q0Q1QjFDMTEwNkE5MDBDRUNBMDcg
LyogU2FtcGxpbmdQcm9maWxlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gNzlENUNENTkxQzExMDZBOTAwQ0VDQTA3IC8qIFNhbXBsaW5nUHJvZmlsZXIu
aCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQk3OURB
RTI3QTFFMDNDODIyMDBCNTI2QUEgLyogV2FzbUV4Y2VwdGlvblR5cGUuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDc5REFFMjc5MUUwM0M4MjIwMEI1MjZB
QSAvKiBXYXNtRXhjZXB0aW9uVHlwZS5oICovOyB9OwogCQk3OURGQ0JEQjFEODhDNTk2MDA1MjdE
MDMgLyogSGFzT3duUHJvcGVydHlDYWNoZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gNzlERkNCREExRDg4QzU5NjAwNTI3RDAzIC8qIEhhc093blByb3Bl
cnR5Q2FjaGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9
OwogCQk3OUU0MjNFMjFERUU2NTMyMDA3OEQzNTUgLyogSlNXZWJBc3NlbWJseUNhbGxlZS5jcHAg
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3OUU0MjNFMDFE
RUU2NTMyMDA3OEQzNTUgLyogSlNXZWJBc3NlbWJseUNhbGxlZS5jcHAgKi87IH07CiAJCTc5RTQy
M0UzMURFRTY1MzIwMDc4RDM1NSAvKiBKU1dlYkFzc2VtYmx5Q2FsbGVlLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3OUU0MjNFMTFERUU2NTMyMDA3OEQz
NTUgLyogSlNXZWJBc3NlbWJseUNhbGxlZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0g
KFByaXZhdGUsICk7IH07IH07CkBAIC0zODM1LDExICszODM4LDEzIEBACiAJCTc5MDVCQjY3MUQx
MjA1MEUwMDE5RkU1NyAvKiBJbmxpbmVBY2Nlc3MuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gSW5saW5lQWNjZXNzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTc5
MTYwREJCMUM4RTNFQzgwMDhDMDg1QSAvKiBQcm94eVJldm9rZS5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBQcm94eVJldm9rZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTc5MTYwREJDMUM4RTNFQzgwMDhDMDg1QSAvKiBQcm94eVJldm9rZS5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBQcm94eVJldm9rZS5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OworCQk3OTE5Qjc3RjFFMDM1NTlDMDA1QkVFRDggLyogQjNDb21waWxl
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEIzQ29tcGlsZS5oOyBwYXRoID0g
YjMvQjNDb21waWxlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTc5MjMzQzI5MUQz
NDcxNTcwMEM1QTgzNCAvKiBKSVRNYXRoSUMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gSklUTWF0aElDLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTc5MkNCMzQ3
MUM0RUVENUMwMEQxM0FGMyAvKiBQQ1RvQ29kZU9yaWdpbk1hcC5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBQQ1RvQ29kZU9yaWdpbk1hcC5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTc5MkNCMzQ4MUM0RUVENUMwMEQxM0FGMyAvKiBQQ1RvQ29kZU9y
aWdpbk1hcC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBQQ1RvQ29kZU9yaWdp
bk1hcC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3OTVCMTk5NTFENzhCRTM1MDAy
NjJGQTAgLyogTWFwQmFzZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGgg
PSBNYXBCYXNlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzk1QjE5OTYxRDc4
QkUzNTAwMjYyRkEwIC8qIE1hcEJhc2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gTWFwQmFzZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3OTVGMDk5QzFFMDM2
MDA1MDBCQkUzN0YgLyogQjNDb21waWxlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgbmFtZSA9IEIzQ29tcGlsZS5jcHA7IHBhdGggPSBiMy9CM0NvbXBpbGUuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQk3OTY0NjU2ODFCOTUyRkYwMDAzMDU5RUUgLyogR2V0UHV0
SW5mby5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBHZXRQdXRJbmZvLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTc5NkZCNDM5MURGRjhDM0YwMDM5Qzk1RCAvKiBK
U1dlYkFzc2VtYmx5SGVscGVycy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBK
U1dlYkFzc2VtYmx5SGVscGVycy5oOyBwYXRoID0ganMvSlNXZWJBc3NlbWJseUhlbHBlcnMuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzk3RTA3QTcxQjhGQ0ZCOTAwODQwMEJBIC8q
IEpTR2xvYmFsTGV4aWNhbEVudmlyb25tZW50LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgcGF0aCA9IEpTR2xvYmFsTGV4aWNhbEVudmlyb25tZW50LmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKQEAgLTM4NjYsNiArMzg3MSw3IEBACiAJCTc5Q0ZDNkVGMUMzM0IxMDAw
MEM3NjhFQSAvKiBMTEludFBDUmFuZ2VzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFt
ZSA9IExMSW50UENSYW5nZXMuaDsgcGF0aCA9IGxsaW50L0xMSW50UENSYW5nZXMuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzlENUNENTgxQzExMDZBOTAwQ0VDQTA3IC8qIFNhbXBs
aW5nUHJvZmlsZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU2Ft
cGxpbmdQcm9maWxlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTc5RDVDRDU5
MUMxMTA2QTkwMENFQ0EwNyAvKiBTYW1wbGluZ1Byb2ZpbGVyLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IFNhbXBsaW5nUHJvZmlsZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKKwkJNzlEQUUyNzkxRTAzQzgyMjAwQjUyNkFBIC8qIFdhc21FeGNlcHRpb25UeXBlLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdhc21FeGNlcHRpb25UeXBlLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTc5REZDQkRBMUQ4OEM1OTYwMDUyN0QwMyAvKiBI
YXNPd25Qcm9wZXJ0eUNhY2hlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEhh
c093blByb3BlcnR5Q2FjaGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzlFNDIz
RTAxREVFNjUzMjAwNzhEMzU1IC8qIEpTV2ViQXNzZW1ibHlDYWxsZWUuY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gSlNXZWJBc3NlbWJseUNhbGxlZS5jcHA7IHBhdGgg
PSBqcy9KU1dlYkFzc2VtYmx5Q2FsbGVlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJNzlFNDIzRTExREVFNjUzMjAwNzhEMzU1IC8qIEpTV2ViQXNzZW1ibHlDYWxsZWUuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gSlNXZWJBc3NlbWJseUNhbGxlZS5oOyBwYXRo
ID0ganMvSlNXZWJBc3NlbWJseUNhbGxlZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpA
QCAtNTE3OCw2ICs1MTg0LDggQEAKIAkJCQkwRkVDODRDMDFCREFDREFDMDA4MEZGNzQgLyogQjND
b21tb24uaCAqLywKIAkJCQkwRkVDODRDMTFCREFDREFDMDA4MEZGNzQgLyogQjNDb21tdXRhdGl2
aXR5LmNwcCAqLywKIAkJCQkwRkVDODRDMjFCREFDREFDMDA4MEZGNzQgLyogQjNDb21tdXRhdGl2
aXR5LmggKi8sCisJCQkJNzkxOUI3N0YxRTAzNTU5QzAwNUJFRUQ4IC8qIEIzQ29tcGlsZS5oICov
LAorCQkJCTc5NUYwOTlDMUUwMzYwMDUwMEJCRTM3RiAvKiBCM0NvbXBpbGUuY3BwICovLAogCQkJ
CTBGMzM4REZGMUJGMDI3NkMwMDEzQzg4RiAvKiBCM0NvbXBpbGF0aW9uLmNwcCAqLywKIAkJCQkw
RjMzOEUwMDFCRjAyNzZDMDAxM0M4OEYgLyogQjNDb21waWxhdGlvbi5oICovLAogCQkJCTBGODZB
RTFGMUM1MzExQzUwMDZCRThFQyAvKiBCM0NvbXB1dGVEaXZpc2lvbk1hZ2ljLmggKi8sCkBAIC02
MDExLDYgKzYwMTksNyBAQAogCQkJCUFENEIxREY4MURGMjQ0RDcwMDcxQUUzMiAvKiBXYXNtQmlu
ZGluZy5oICovLAogCQkJCTUzRkQwNEQxMUQ3QUIxODcwMDMyODdEMyAvKiBXYXNtQ2FsbGluZ0Nv
bnZlbnRpb24uY3BwICovLAogCQkJCTUzRkQwNEQyMUQ3QUIxODcwMDMyODdEMyAvKiBXYXNtQ2Fs
bGluZ0NvbnZlbnRpb24uaCAqLywKKwkJCQk3OURBRTI3OTFFMDNDODIyMDBCNTI2QUEgLyogV2Fz
bUV4Y2VwdGlvblR5cGUuaCAqLywKIAkJCQlBRDJGQ0MzMjFEQzQwNDUzMDBCM0U3MzYgLyogV2Fz
bUZvcm1hdC5jcHAgKi8sCiAJCQkJN0JDNTQ3RDIxQjY5NTk5QjAwOTU5QjU4IC8qIFdhc21Gb3Jt
YXQuaCAqLywKIAkJCQk1M0Y0MEU4QTFENTkwMUJCMDA5OUExQjYgLyogV2FzbUZ1bmN0aW9uUGFy
c2VyLmggKi8sCkBAIC04Mjk0LDYgKzgzMDMsNyBAQAogCQkJCTUyQjMxMEZCMTk3NEFFNjEwMDgw
ODU3QyAvKiBGdW5jdGlvbkhhc0V4ZWN1dGVkQ2FjaGUuaCBpbiBIZWFkZXJzICovLAogCQkJCUZF
NEJGRjJDMUFENDc2RTcwMDA4OEY4NyAvKiBGdW5jdGlvbk92ZXJyaWRlcy5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJQkMxOEM0MDUwRTE2RjVDRDAwQjM0NDYwIC8qIEZ1bmN0aW9uUHJvdG90eXBlLmgg
aW4gSGVhZGVycyAqLywKKwkJCQk3OTE5Qjc4MDFFMDM1NTlDMDA1QkVFRDggLyogQjNDb21waWxl
LmggaW4gSGVhZGVycyAqLywKIAkJCQk2MkQyRDM5MDFBREYxMDNGMDAwMjA2QzEgLyogRnVuY3Rp
b25SYXJlRGF0YS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRkVBMEM0MDMxQ0REN0QxRDAwNDgxOTkx
IC8qIEZ1bmN0aW9uV2hpdGVsaXN0LmggaW4gSGVhZGVycyAqLywKIAkJCQkyQUFDRTYzRDE4Q0E1
QTAzMDBFRDAxOTEgLyogR0NBY3Rpdml0eUNhbGxiYWNrLmggaW4gSGVhZGVycyAqLywKQEAgLTgz
NDUsNiArODM1NSw3IEBACiAJCQkJMEYwMzMyQzQxOEIwMTc2MzAwNUY5NzlBIC8qIEdldEJ5SWRW
YXJpYW50LmggaW4gSGVhZGVycyAqLywKIAkJCQk3OTY0NjU2QTFCOTUyRkYwMDAzMDU5RUUgLyog
R2V0UHV0SW5mby5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMTRBRDkxMEUxRENBOTI5NDAwMTRGOUZF
IC8qIEdsb2JhbENvZGVCbG9jay5oIGluIEhlYWRlcnMgKi8sCisJCQkJNzlEQUUyN0ExRTAzQzgy
MjAwQjUyNkFBIC8qIFdhc21FeGNlcHRpb25UeXBlLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjI0
RTU0NDE3RUE5RjU5MDBBQkIyMTcgLyogR1BSSW5mby5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMTQy
RTMxMzQxMzRGRjBBNjAwQUZBREI1IC8qIEhhbmRsZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQzI4
MzE5MDAxNkZFNEI3RDAwMTU3QkZEIC8qIEhhbmRsZUJsb2NrLmggaW4gSGVhZGVycyAqLywKQEAg
LTk4MzgsNiArOTg0OSw3IEBACiAJCQkJMEZCMTc2NjIxOTZCOEY5RTAwOTEwNTJBIC8qIERGR1B1
cmVWYWx1ZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjNBMUJGOTFBOUVDQjdEMDAwREUwMUEg
LyogREZHUHV0U3RhY2tTaW5raW5nUGhhc2UuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEYyRkND
RkIxOEE2MDA3MDAwMUEyN0Y4IC8qIERGR1NhZmVwb2ludC5jcHAgaW4gU291cmNlcyAqLywKKwkJ
CQk3OTVGMDk5RDFFMDM2MDA1MDBCQkUzN0YgLyogQjNDb21waWxlLmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCTg2RUM5REQyMTMyOERGODIwMDJCMkFENyAvKiBERkdTcGVjdWxhdGl2ZUpJVC5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQk4Njg4MEYxRjE0MzI4QkI5MDBCMDhENDIgLyogREZHU3BlY3Vs
YXRpdmVKSVQzMl82NC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk4Njg4MEY0RDE0MzUzQjIxMDBC
MDhENDIgLyogREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAgaW4gU291cmNlcyAqLywKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0NvbXBpbGF0aW9uLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDb21waWxhdGlvbi5jcHAJKHJldmlzaW9uIDIwOTkx
MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0NvbXBpbGF0aW9uLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMjgsMzYgKzI4LDIzIEBACiAKICNpZiBFTkFCTEUoQjNfSklUKQogCi0jaW5j
bHVkZSAiQjNHZW5lcmF0ZS5oIgogI2luY2x1ZGUgIkIzT3BhcXVlQnlwcm9kdWN0cy5oIgotI2lu
Y2x1ZGUgIkIzUHJvY2VkdXJlLmgiCi0jaW5jbHVkZSAiQjNUaW1pbmdTY29wZS5oIgogI2luY2x1
ZGUgIkNDYWxsSGVscGVycy5oIgotI2luY2x1ZGUgIkpTQ0lubGluZXMuaCIKLSNpbmNsdWRlICJM
aW5rQnVmZmVyLmgiCiAKIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgewogCi1Db21waWxh
dGlvbjo6Q29tcGlsYXRpb24oVk0mIHZtLCBQcm9jZWR1cmUmIHByb2MsIHVuc2lnbmVkIG9wdExl
dmVsKQotewotICAgIFRpbWluZ1Njb3BlIHRpbWluZ1Njb3BlKCJDb21waWxhdGlvbiIpOwotICAg
IAotICAgIHByZXBhcmVGb3JHZW5lcmF0aW9uKHByb2MsIG9wdExldmVsKTsKLSAgICAKLSAgICBD
Q2FsbEhlbHBlcnMgaml0KCZ2bSk7Ci0gICAgZ2VuZXJhdGUocHJvYywgaml0KTsKLSAgICBMaW5r
QnVmZmVyIGxpbmtCdWZmZXIodm0sIGppdCwgbnVsbHB0cik7Ci0KLSAgICBtX2NvZGVSZWYgPSBG
SU5BTElaRV9DT0RFKGxpbmtCdWZmZXIsICgiQjM6OkNvbXBpbGF0aW9uIikpOwotICAgIG1fYnlw
cm9kdWN0cyA9IHByb2MucmVsZWFzZUJ5cHJvZHVjdHMoKTsKLX0KLQogQ29tcGlsYXRpb246OkNv
bXBpbGF0aW9uKE1hY3JvQXNzZW1ibGVyQ29kZVJlZiBjb2RlUmVmLCBzdGQ6OnVuaXF1ZV9wdHI8
T3BhcXVlQnlwcm9kdWN0cz4gYnlwcm9kdWN0cykKICAgICA6IG1fY29kZVJlZihjb2RlUmVmKQog
ICAgICwgbV9ieXByb2R1Y3RzKFdURk1vdmUoYnlwcm9kdWN0cykpCiB7CiB9CiAKK0NvbXBpbGF0
aW9uOjpDb21waWxhdGlvbihDb21waWxhdGlvbiYmIG90aGVyKQorICAgIDogbV9jb2RlUmVmKFdU
Rk1vdmUob3RoZXIubV9jb2RlUmVmKSkKKyAgICAsIG1fYnlwcm9kdWN0cyhXVEZNb3ZlKG90aGVy
Lm1fYnlwcm9kdWN0cykpCit7Cit9CisKIENvbXBpbGF0aW9uOjp+Q29tcGlsYXRpb24oKQogewog
fQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ29tcGlsYXRpb24uaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDb21waWxhdGlvbi5oCShyZXZpc2lv
biAyMDk5MTMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDb21waWxhdGlvbi5oCSh3
b3JraW5nIGNvcHkpCkBAIC00MCwyNSArNDAsMTYgQEAgbmFtZXNwYWNlIEIzIHsKIGNsYXNzIE9w
YXF1ZUJ5cHJvZHVjdHM7CiBjbGFzcyBQcm9jZWR1cmU7CiAKLS8vIFRoaXMgaXMgYSBmb29sLXBy
b29mIEFQSSBmb3IgY29tcGlsaW5nIGEgUHJvY2VkdXJlIHRvIGNvZGUgYW5kIHRoZW4gcnVubmlu
ZyB0aGF0IGNvZGUuIFlvdSBjb21waWxlCi0vLyBhIFByb2NlZHVyZSB1c2luZyB0aGlzIEFQSSBi
eSBkb2luZzoKLS8vCi0vLyBzdGQ6OnVuaXF1ZV9wdHI8Q29tcGlsYXRpb24+IGNvbXBpbGF0aW9u
ID0gc3RkOjptYWtlX3VuaXF1ZTxDb21waWxhdGlvbj4odm0sIHByb2MpOwotLy8KLS8vIFRoZW4g
eW91IGtlZXAgdGhlIENvbXBpbGF0aW9uIG9iamVjdCBhbGl2ZSBmb3IgYXMgbG9uZyBhcyB5b3Ug
d2FudCB0byBiZSBhYmxlIHRvIHJ1biB0aGUgY29kZS4gSWYKLS8vIHRoaXMgQVBJIGZlZWxzIHRv
byBoaWdoLWxldmVsLCB5b3UgY2FuIHVzZSBCMzo6Z2VuZXJhdGUoKSBkaXJlY3RseS4KKy8vIFRo
aXMgY2xhc3MgaXMgYSB3YXkgdG8ga2VlcCB0aGUgcmVzdWx0IG9mIGEgQjMgY29tcGlsYXRpb24g
YWxpdmUKKy8vIGFuZCBydW5uYWJsZS4KIAogY2xhc3MgQ29tcGlsYXRpb24gewogICAgIFdURl9N
QUtFX05PTkNPUFlBQkxFKENvbXBpbGF0aW9uKTsKICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRF
RDsKIAogcHVibGljOgotICAgIEpTX0VYUE9SVF9QUklWQVRFIENvbXBpbGF0aW9uKFZNJiwgUHJv
Y2VkdXJlJiwgdW5zaWduZWQgb3B0TGV2ZWwgPSAxKTsKLQotICAgIC8vIFRoaXMgY29uc3RydWN0
b3IgYWxsb3dzIHlvdSB0byBtYW51YWxseSBjcmVhdGUgYSBDb21waWxhdGlvbi4gSXQncyBjdXJy
ZW50bHkgb25seSB1c2VkIGJ5IHRlc3QKLSAgICAvLyBjb2RlLiBQcm9iYWJseSBiZXN0IHRvIGtl
ZXAgaXQgdGhhdCB3YXkuCiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgQ29tcGlsYXRpb24oTWFjcm9B
c3NlbWJsZXJDb2RlUmVmLCBzdGQ6OnVuaXF1ZV9wdHI8T3BhcXVlQnlwcm9kdWN0cz4pOwotICAg
IAorICAgIEpTX0VYUE9SVF9QUklWQVRFIENvbXBpbGF0aW9uKENvbXBpbGF0aW9uJiYpOwogICAg
IEpTX0VYUE9SVF9QUklWQVRFIH5Db21waWxhdGlvbigpOwogCiAgICAgTWFjcm9Bc3NlbWJsZXJD
b2RlUHRyIGNvZGUoKSBjb25zdCB7IHJldHVybiBtX2NvZGVSZWYuY29kZSgpOyB9CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDb21waWxlLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDb21waWxlLmNwcAkobm9uZXhpc3RlbnQpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDb21waWxlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCww
ICsxLDU3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisK
KyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJCM0NvbXBpbGUuaCIKKworI2lmIEVOQUJM
RShCM19KSVQpCisKKyNpbmNsdWRlICJCM0dlbmVyYXRlLmgiCisjaW5jbHVkZSAiQjNPcGFxdWVC
eXByb2R1Y3RzLmgiCisjaW5jbHVkZSAiQjNQcm9jZWR1cmUuaCIKKyNpbmNsdWRlICJCM1RpbWlu
Z1Njb3BlLmgiCisjaW5jbHVkZSAiQ0NhbGxIZWxwZXJzLmgiCisjaW5jbHVkZSAiSlNDSW5saW5l
cy5oIgorI2luY2x1ZGUgIkxpbmtCdWZmZXIuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFj
ZSBCMyB7CisKK0NvbXBpbGF0aW9uIGNvbXBpbGUoVk0mIHZtLCBQcm9jZWR1cmUmIHByb2MsIHVu
c2lnbmVkIG9wdExldmVsKQoreworICAgIFRpbWluZ1Njb3BlIHRpbWluZ1Njb3BlKCJDb21waWxh
dGlvbiIpOworICAgIAorICAgIHByZXBhcmVGb3JHZW5lcmF0aW9uKHByb2MsIG9wdExldmVsKTsK
KyAgICAKKyAgICBDQ2FsbEhlbHBlcnMgaml0KCZ2bSk7CisgICAgZ2VuZXJhdGUocHJvYywgaml0
KTsKKyAgICBMaW5rQnVmZmVyIGxpbmtCdWZmZXIodm0sIGppdCwgbnVsbHB0cik7CisKKyAgICBy
ZXR1cm4gQ29tcGlsYXRpb24oRklOQUxJWkVfQ09ERShsaW5rQnVmZmVyLCAoIkIzOjpDb21waWxh
dGlvbiIpKSwgcHJvYy5yZWxlYXNlQnlwcm9kdWN0cygpKTsKK30KKworfSB9IC8vIG5hbWVzcGFj
ZSBKU0M6OkIzCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQorCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYjMvQjNDb21waWxlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2IzL0IzQ29tcGlsZS5oCShub25leGlzdGVudCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy9CM0NvbXBpbGUuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDUyIEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBB
UyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
CisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNwcmFnbWEgb25jZQor
CisjaWYgRU5BQkxFKEIzX0pJVCkKKworI2luY2x1ZGUgIkIzQ29tcGlsYXRpb24uaCIKKworbmFt
ZXNwYWNlIEpTQyB7CisKK2NsYXNzIFZNOworCituYW1lc3BhY2UgQjMgeworCitjbGFzcyBQcm9j
ZWR1cmU7CisKKy8vIFRoaXMgaXMgYSBmb29sLXByb29mIEFQSSBmb3IgY29tcGlsaW5nIGEgUHJv
Y2VkdXJlIHRvIGNvZGUgYW5kIHRoZW4gcnVubmluZyB0aGF0IGNvZGUuIFlvdSBjb21waWxlCisv
LyBhIFByb2NlZHVyZSB1c2luZyB0aGlzIEFQSSBieSBkb2luZzoKKy8vCisvLyBDb21waWxhdGlv
biBjb21waWxhdGlvbiA9IEIzOjpjb21waWxlKHZtLCBwcm9jKTsKKy8vCisvLyBUaGVuIHlvdSBr
ZWVwIHRoZSBDb21waWxhdGlvbiBvYmplY3QgYWxpdmUgZm9yIGFzIGxvbmcgYXMgeW91IHdhbnQg
dG8gYmUgYWJsZSB0byBydW4gdGhlIGNvZGUuCisvLyBJZiB0aGlzIEFQSSBmZWVscyB0b28gaGln
aC1sZXZlbCwgeW91IGNhbiB1c2UgQjM6OmdlbmVyYXRlKCkgZGlyZWN0bHkuCisKK0pTX0VYUE9S
VF9QUklWQVRFIENvbXBpbGF0aW9uIGNvbXBpbGUoVk0mLCBQcm9jZWR1cmUmLCB1bnNpZ25lZCBv
cHRMZXZlbCA9IDEpOworCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKKworI2VuZGlmIC8vIEVO
QUJMRShCM19KSVQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvdGVzdGIzLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvdGVzdGIzLmNwcAkocmV2aXNp
b24gMjA5OTEzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL3Rlc3RiMy5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTMzLDYgKzMzLDcgQEAKICNpbmNsdWRlICJCM0Jhc2ljQmxvY2tJbmxpbmVz
LmgiCiAjaW5jbHVkZSAiQjNDQ2FsbFZhbHVlLmgiCiAjaW5jbHVkZSAiQjNDb21waWxhdGlvbi5o
IgorI2luY2x1ZGUgIkIzQ29tcGlsZS5oIgogI2luY2x1ZGUgIkIzQ29tcHV0ZURpdmlzaW9uTWFn
aWMuaCIKICNpbmNsdWRlICJCM0NvbnN0MzJWYWx1ZS5oIgogI2luY2x1ZGUgIkIzQ29uc3RQdHJW
YWx1ZS5oIgpAQCAtMTE4LDcgKzExOSw3IEBAIFZNKiB2bTsKIAogc3RkOjp1bmlxdWVfcHRyPENv
bXBpbGF0aW9uPiBjb21waWxlKFByb2NlZHVyZSYgcHJvY2VkdXJlLCB1bnNpZ25lZCBvcHRMZXZl
bCA9IDEpCiB7Ci0gICAgcmV0dXJuIHN0ZDo6bWFrZV91bmlxdWU8Q29tcGlsYXRpb24+KCp2bSwg
cHJvY2VkdXJlLCBvcHRMZXZlbCk7CisgICAgcmV0dXJuIHN0ZDo6bWFrZV91bmlxdWU8Q29tcGls
YXRpb24+KEIzOjpjb21waWxlKCp2bSwgcHJvY2VkdXJlLCBvcHRMZXZlbCkpOwogfQogCiB0ZW1w
bGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZS4uLiBBcmd1bWVudHM+CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L1RodW5rR2VuZXJhdG9ycy5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9UaHVua0dlbmVyYXRvcnMuY3BwCShyZXZpc2lvbiAyMDk5MTMp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1RodW5rR2VuZXJhdG9ycy5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTI4LDEzICsyOCwxNyBAQAogCiAjaW5jbHVkZSAiQ29kZUJsb2NrLmgiCiAj
aW5jbHVkZSAiREZHU3BlY3VsYXRpdmVKSVQuaCIKKyNpbmNsdWRlICJKSVRFeGNlcHRpb25zLmgi
CiAjaW5jbHVkZSAiSklUT3BlcmF0aW9ucy5oIgogI2luY2x1ZGUgIkpTQXJyYXkuaCIKICNpbmNs
dWRlICJKU0JvdW5kRnVuY3Rpb24uaCIKICNpbmNsdWRlICJNYXRoQ29tbW9uLmgiCiAjaW5jbHVk
ZSAiTWF4RnJhbWVFeHRlbnRGb3JTbG93UGF0aENhbGwuaCIKICNpbmNsdWRlICJKU0NJbmxpbmVz
LmgiCisjaW5jbHVkZSAiSlNXZWJBc3NlbWJseUluc3RhbmNlLmgiCisjaW5jbHVkZSAiSlNXZWJB
c3NlbWJseVJ1bnRpbWVFcnJvci5oIgogI2luY2x1ZGUgIlNwZWNpYWxpemVkVGh1bmtKSVQuaCIK
KyNpbmNsdWRlICJXYXNtRXhjZXB0aW9uVHlwZS5oIgogI2luY2x1ZGUgPHd0Zi9JbmxpbmVBU00u
aD4KICNpbmNsdWRlIDx3dGYvU3RyaW5nUHJpbnRTdHJlYW0uaD4KICNpbmNsdWRlIDx3dGYvdGV4
dC9TdHJpbmdJbXBsLmg+CkBAIC0xMTI2LDYgKzExMzAsNDcgQEAgTWFjcm9Bc3NlbWJsZXJDb2Rl
UmVmIGJvdW5kVGhpc05vQXJnc0Z1bgogICAgICAgICBsaW5rQnVmZmVyLCAoIlNwZWNpYWxpemVk
IHRodW5rIGZvciBib3VuZCBmdW5jdGlvbiBjYWxscyB3aXRoIG5vIGFyZ3VtZW50cyIpKTsKIH0K
IAorI2lmIEVOQUJMRShXRUJBU1NFTUJMWSkKK01hY3JvQXNzZW1ibGVyQ29kZVJlZiB0aHJvd0V4
Y2VwdGlvbkZyb21XYXNtVGh1bmtHZW5lcmF0b3IoVk0qIHZtKQoreworICAgIENDYWxsSGVscGVy
cyBqaXQodm0pOworCisgICAgLy8gVGhlIHRoaW5nIHRoYXQganVtcHMgaGVyZSBtdXN0IG1vdmUg
RXhjZXB0aW9uVHlwZSBpbnRvIHRoZSBhcmd1bWVudEdQUjEgYW5kIGp1bXAgaGVyZS4KKyAgICAv
LyBXZSdyZSBhbGxvd2VkIHRvIHVzZSB0ZW1wIHJlZ2lzdGVycyBoZXJlLCBidXQgbm90IGNhbGxl
ZSBzYXZlcy4KKyAgICB7CisgICAgICAgIFJlZ2lzdGVyU2V0IHVzZWRSZWdpc3RlcnMgPSBSZWdp
c3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCk7CisgICAgICAgIHVzZWRSZWdpc3Rl
cnMuc2V0KEdQUkluZm86OmFyZ3VtZW50R1BSMSk7CisgICAgICAgIGppdC5jb3B5Q2FsbGVlU2F2
ZXNUb1ZNRW50cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVyKHVzZWRSZWdpc3RlcnMpOworICAgIH0K
KworICAgIGppdC5tb3ZlKEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCBHUFJJbmZvOjphcmd1
bWVudEdQUjApOworICAgIENDYWxsSGVscGVyczo6Q2FsbCBjYWxsID0gaml0LmNhbGwoKTsKKyAg
ICBqaXQuanVtcFRvRXhjZXB0aW9uSGFuZGxlcigpOworCisgICAgdm9pZCAoKnRocm93V2FzbUV4
Y2VwdGlvbikoRXhlY1N0YXRlKiwgV2FzbTo6RXhjZXB0aW9uVHlwZSkgPSBbXSAoRXhlY1N0YXRl
KiBleGVjLCBXYXNtOjpFeGNlcHRpb25UeXBlIHR5cGUpIHsKKyAgICAgICAgVk0qIHZtID0gJmV4
ZWMtPnZtKCk7CisgICAgICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMp
OworCisgICAgICAgIHsKKyAgICAgICAgICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhS
T1dfU0NPUEUoKnZtKTsKKyAgICAgICAgICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3Qg
PSB2bS0+dG9wSlNXZWJBc3NlbWJseUluc3RhbmNlLT5nbG9iYWxPYmplY3QoKTsKKworICAgICAg
ICAgICAgSlNXZWJBc3NlbWJseVJ1bnRpbWVFcnJvciogZXJyb3IgPSBKU1dlYkFzc2VtYmx5UnVu
dGltZUVycm9yOjpjcmVhdGUoCisgICAgICAgICAgICAgICAgZXhlYywgZ2xvYmFsT2JqZWN0LT5X
ZWJBc3NlbWJseVJ1bnRpbWVFcnJvclN0cnVjdHVyZSgpLCBXYXNtOjplcnJvck1lc3NhZ2VGb3JF
eGNlcHRpb25UeXBlKHR5cGUpKTsKKyAgICAgICAgICAgIHRocm93RXhjZXB0aW9uKGV4ZWMsIHRo
cm93U2NvcGUsIGVycm9yKTsKKyAgICAgICAgfQorCisgICAgICAgIGdlbmVyaWNVbndpbmQodm0s
IGV4ZWMpOworICAgICAgICBBU1NFUlQoISF2bS0+Y2FsbEZyYW1lRm9yQ2F0Y2gpOworICAgIH07
CisKKyAgICBMaW5rQnVmZmVyIGxpbmtCdWZmZXIoKnZtLCBqaXQsIEdMT0JBTF9USFVOS19JRCk7
CisgICAgbGlua0J1ZmZlci5saW5rKGNhbGwsIHRocm93V2FzbUV4Y2VwdGlvbik7CisgICAgcmV0
dXJuIEZJTkFMSVpFX0NPREUoCisgICAgICAgIGxpbmtCdWZmZXIsICgiVGhyb3cgZXhjZXB0aW9u
IGZyb20gV2FzbSIpKTsKK30KKyNlbmRpZiAvLyBFTkFCTEUoV0VCQVNTRU1CTFkpCisKIH0gLy8g
bmFtZXNwYWNlIEpTQwogCiAjZW5kaWYgLy8gRU5BQkxFKEpJVCkKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvVGh1bmtHZW5lcmF0b3JzLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9UaHVua0dlbmVyYXRvcnMuaAkocmV2aXNpb24gMjA5OTEzKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9UaHVua0dlbmVyYXRvcnMuaAkod29ya2luZyBjb3B5
KQpAQCAtNjMsNyArNjMsMTEgQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIGltdWxUaHVua0dlbmVy
YXRvcgogTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIHJhbmRvbVRodW5rR2VuZXJhdG9yKFZNKik7CiBN
YWNyb0Fzc2VtYmxlckNvZGVSZWYgdHJ1bmNUaHVua0dlbmVyYXRvcihWTSopOwogCi1NYWNyb0Fz
c2VtYmxlckNvZGVSZWYgYm91bmRUaGlzTm9BcmdzRnVuY3Rpb25DYWxsR2VuZXJhdG9yKFZNKiB2
bSk7CitNYWNyb0Fzc2VtYmxlckNvZGVSZWYgYm91bmRUaGlzTm9BcmdzRnVuY3Rpb25DYWxsR2Vu
ZXJhdG9yKFZNKik7CisKKyNpZiBFTkFCTEUoV0VCQVNTRU1CTFkpCitNYWNyb0Fzc2VtYmxlckNv
ZGVSZWYgdGhyb3dFeGNlcHRpb25Gcm9tV2FzbVRodW5rR2VuZXJhdG9yKFZNKik7CisjZW5kaWYK
IAogfQogI2VuZGlmIC8vIEVOQUJMRShKSVQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
d2FzbS9XYXNtQjNJUkdlbmVyYXRvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL3dhc20vV2FzbUIzSVJHZW5lcmF0b3IuY3BwCShyZXZpc2lvbiAyMDk5MTMpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQjNJUkdlbmVyYXRvci5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTMwLDggKzMwLDEwIEBACiAKICNpbmNsdWRlICJCM0Jhc2ljQmxvY2tJbmxpbmVz
LmgiCiAjaW5jbHVkZSAiQjNDQ2FsbFZhbHVlLmgiCisjaW5jbHVkZSAiQjNDb21waWxlLmgiCiAj
aW5jbHVkZSAiQjNDb25zdFB0clZhbHVlLmgiCiAjaW5jbHVkZSAiQjNGaXhTU0EuaCIKKyNpbmNs
dWRlICJCM0dlbmVyYXRlLmgiCiAjaW5jbHVkZSAiQjNTdGFja21hcEdlbmVyYXRpb25QYXJhbXMu
aCIKICNpbmNsdWRlICJCM1N3aXRjaFZhbHVlLmgiCiAjaW5jbHVkZSAiQjNWYWxpZGF0ZS5oIgpA
QCAtNDAsMTUgKzQyLDEzIEBACiAjaW5jbHVkZSAiQjNWYXJpYWJsZVZhbHVlLmgiCiAjaW5jbHVk
ZSAiQjNXYXNtQWRkcmVzc1ZhbHVlLmgiCiAjaW5jbHVkZSAiQjNXYXNtQm91bmRzQ2hlY2tWYWx1
ZS5oIgotI2luY2x1ZGUgIkV4Y2VwdGlvblNjb3BlLmgiCi0jaW5jbHVkZSAiRnJhbWVUcmFjZXJz
LmgiCi0jaW5jbHVkZSAiSklURXhjZXB0aW9ucy5oIgogI2luY2x1ZGUgIkpTQ0lubGluZXMuaCIK
ICNpbmNsdWRlICJKU1dlYkFzc2VtYmx5SW5zdGFuY2UuaCIKICNpbmNsdWRlICJKU1dlYkFzc2Vt
Ymx5TW9kdWxlLmgiCiAjaW5jbHVkZSAiSlNXZWJBc3NlbWJseVJ1bnRpbWVFcnJvci5oIgogI2lu
Y2x1ZGUgIlZpcnR1YWxSZWdpc3Rlci5oIgogI2luY2x1ZGUgIldhc21DYWxsaW5nQ29udmVudGlv
bi5oIgorI2luY2x1ZGUgIldhc21FeGNlcHRpb25UeXBlLmgiCiAjaW5jbHVkZSAiV2FzbUZ1bmN0
aW9uUGFyc2VyLmgiCiAjaW5jbHVkZSAiV2FzbU1lbW9yeS5oIgogI2luY2x1ZGUgPHd0Zi9PcHRp
b25hbC5oPgpAQCAtMTk3LDYgKzE5Nyw4IEBAIHB1YmxpYzoKIAogICAgIHZvaWQgZHVtcChjb25z
dCBWZWN0b3I8Q29udHJvbEVudHJ5PiYgY29udHJvbFN0YWNrLCBjb25zdCBFeHByZXNzaW9uTGlz
dCYgZXhwcmVzc2lvblN0YWNrKTsKIAorICAgIHZvaWQgZW1pdEV4Y2VwdGlvbkNoZWNrKENDYWxs
SGVscGVycyYsIEV4Y2VwdGlvblR5cGUpOworCiBwcml2YXRlOgogICAgIEV4cHJlc3Npb25UeXBl
IGVtaXRDaGVja0FuZFByZXBhcmVQb2ludGVyKEV4cHJlc3Npb25UeXBlIHBvaW50ZXIsIHVpbnQz
Ml90IG9mZnNldCwgdWludDMyX3Qgc2l6ZU9mT3ApOwogICAgIEV4cHJlc3Npb25UeXBlIGVtaXRM
b2FkT3AoTG9hZE9wVHlwZSwgT3JpZ2luLCBFeHByZXNzaW9uVHlwZSBwb2ludGVyLCB1aW50MzJf
dCBvZmZzZXQpOwpAQCAtMjE3LDcgKzIxOSw2IEBAIHByaXZhdGU6CiAgICAgR1BSUmVnIG1fbWVt
b3J5U2l6ZUdQUjsKICAgICBWYWx1ZSogbV96ZXJvVmFsdWVzW251bVR5cGVzXTsKICAgICBWYWx1
ZSogbV9pbnN0YW5jZVZhbHVlOwotCiB9OwogCiBCM0lSR2VuZXJhdG9yOjpCM0lSR2VuZXJhdG9y
KFZNJiB2bSwgY29uc3QgTW9kdWxlSW5mb3JtYXRpb24mIGluZm8sIFByb2NlZHVyZSYgcHJvY2Vk
dXJlLCBXYXNtSW50ZXJuYWxGdW5jdGlvbiogY29tcGlsYXRpb24sIFZlY3RvcjxVbmxpbmtlZFdh
c21Ub1dhc21DYWxsPiYgdW5saW5rZWRXYXNtVG9XYXNtQ2FsbHMsIGNvbnN0IEltbXV0YWJsZUZ1
bmN0aW9uSW5kZXhTcGFjZSYgZnVuY3Rpb25JbmRleFNwYWNlKQpAQCAtMjU0LDMzICsyNTUsNyBA
QCBCM0lSR2VuZXJhdG9yOjpCM0lSR2VuZXJhdG9yKFZNJiB2bSwgY29uCiAgICAgICAgIG1fcHJv
Yy5zZXRXYXNtQm91bmRzQ2hlY2tHZW5lcmF0b3IoWz1dIChDQ2FsbEhlbHBlcnMmIGppdCwgR1BS
UmVnIHBpbm5lZEdQUiwgdW5zaWduZWQpIHsKICAgICAgICAgICAgIEFsbG93TWFjcm9TY3JhdGNo
UmVnaXN0ZXJVc2FnZSBhbGxvd1NjcmF0Y2goaml0KTsKICAgICAgICAgICAgIEFTU0VSVF9VTlVT
RUQocGlubmVkR1BSLCBtX21lbW9yeVNpemVHUFIgPT0gcGlubmVkR1BSKTsKLSAgICAgICAgICAg
IGppdC5jb3B5Q2FsbGVlU2F2ZXNUb1ZNRW50cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVyKCk7Ci0K
LSAgICAgICAgICAgIGppdC5tb3ZlKEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCBHUFJJbmZv
Ojphcmd1bWVudEdQUjApOwotCi0gICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OkNhbGwgY2FsbCA9
IGppdC5jYWxsKCk7Ci0gICAgICAgICAgICBqaXQuanVtcFRvRXhjZXB0aW9uSGFuZGxlcigpOwot
Ci0gICAgICAgICAgICBqaXQuYWRkTGlua1Rhc2soWz1dIChMaW5rQnVmZmVyJiBsaW5rQnVmZmVy
KSB7Ci0gICAgICAgICAgICAgICAgdm9pZCAoKnRocm93TWVtb3J5RXhjZXB0aW9uKShFeGVjU3Rh
dGUqKSA9IFtdIChFeGVjU3RhdGUqIGV4ZWMpIHsKLSAgICAgICAgICAgICAgICAgICAgVk0qIHZt
ID0gJmV4ZWMtPnZtKCk7Ci0gICAgICAgICAgICAgICAgICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNl
ciB0cmFjZXIodm0sIGV4ZWMpOwotCi0gICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAg
ICAgICAgICAgICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUoKnZtKTsK
LSAgICAgICAgICAgICAgICAgICAgICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSB2
bS0+dG9wSlNXZWJBc3NlbWJseUluc3RhbmNlLT5nbG9iYWxPYmplY3QoKTsKLQotICAgICAgICAg
ICAgICAgICAgICAgICAgSlNXZWJBc3NlbWJseVJ1bnRpbWVFcnJvciogZXJyb3IgPSBKU1dlYkFz
c2VtYmx5UnVudGltZUVycm9yOjpjcmVhdGUoCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ZXhlYywgZ2xvYmFsT2JqZWN0LT5XZWJBc3NlbWJseVJ1bnRpbWVFcnJvclN0cnVjdHVyZSgpLCAi
T3V0IG9mIGJvdW5kcyBtZW1vcnkgYWNjZXNzIik7Ci0gICAgICAgICAgICAgICAgICAgICAgICB0
aHJvd0V4Y2VwdGlvbihleGVjLCB0aHJvd1Njb3BlLCBlcnJvcik7Ci0gICAgICAgICAgICAgICAg
ICAgIH0KLQotICAgICAgICAgICAgICAgICAgICBnZW5lcmljVW53aW5kKHZtLCBleGVjKTsKLSAg
ICAgICAgICAgICAgICAgICAgQVNTRVJUKCEhdm0tPmNhbGxGcmFtZUZvckNhdGNoKTsKLSAgICAg
ICAgICAgICAgICB9OwotCi0gICAgICAgICAgICAgICAgbGlua0J1ZmZlci5saW5rKGNhbGwsIHRo
cm93TWVtb3J5RXhjZXB0aW9uKTsKLSAgICAgICAgICAgIH0pOworICAgICAgICAgICAgdGhpcy0+
ZW1pdEV4Y2VwdGlvbkNoZWNrKGppdCwgRXhjZXB0aW9uVHlwZTo6T3V0T2ZCb3VuZHNNZW1vcnlB
Y2Nlc3MpOwogICAgICAgICB9KTsKIAogICAgICAgICBCMzo6UGF0Y2hwb2ludFZhbHVlKiBmb28g
PSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PEIzOjpQYXRjaHBvaW50VmFsdWU+KG1fcHJvYywg
QjM6OlZvaWQsIE9yaWdpbigpKTsKQEAgLTI5Niw2ICsyNzEsMTcgQEAgQjNJUkdlbmVyYXRvcjo6
QjNJUkdlbmVyYXRvcihWTSYgdm0sIGNvbgogICAgICAgICBtX2N1cnJlbnRCbG9jay0+YXBwZW5k
TmV3PENvbnN0UHRyVmFsdWU+KG1fcHJvYywgT3JpZ2luKCksICZtX3ZtLnRvcEpTV2ViQXNzZW1i
bHlJbnN0YW5jZSkpOwogfQogCit2b2lkIEIzSVJHZW5lcmF0b3I6OmVtaXRFeGNlcHRpb25DaGVj
ayhDQ2FsbEhlbHBlcnMmIGppdCwgRXhjZXB0aW9uVHlwZSB0eXBlKQoreworICAgIGppdC5tb3Zl
KENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKHN0YXRpY19jYXN0PHVpbnQzMl90Pih0eXBlKSks
IEdQUkluZm86OmFyZ3VtZW50R1BSMSk7CisgICAgYXV0byBqdW1wVG9FeGNlcHRpb25TdHViID0g
aml0Lmp1bXAoKTsKKworICAgIFZNKiB2bSA9ICZtX3ZtOworICAgIGppdC5hZGRMaW5rVGFzayhb
PV0gKExpbmtCdWZmZXImIGxpbmtCdWZmZXIpIHsKKyAgICAgICAgbGlua0J1ZmZlci5saW5rKGp1
bXBUb0V4Y2VwdGlvblN0dWIsIENvZGVMb2NhdGlvbkxhYmVsKHZtLT5nZXRDVElTdHViKHRocm93
RXhjZXB0aW9uRnJvbVdhc21UaHVua0dlbmVyYXRvcikuY29kZSgpKSk7CisgICAgfSk7Cit9CisK
IFZhbHVlKiBCM0lSR2VuZXJhdG9yOjp6ZXJvRm9yVHlwZShUeXBlIHR5cGUpCiB7CiAgICAgQVNT
RVJUKHR5cGUgIT0gVm9pZCk7CkBAIC03MzksOCArNzI1LDggQEAgYXV0byBCM0lSR2VuZXJhdG9y
OjphZGRDYWxsSW5kaXJlY3QoY29ucwogICAgICAgICBDaGVja1ZhbHVlKiBjaGVjayA9IG1fY3Vy
cmVudEJsb2NrLT5hcHBlbmROZXc8Q2hlY2tWYWx1ZT4obV9wcm9jLCBDaGVjaywgT3JpZ2luKCks
CiAgICAgICAgICAgICBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFZhbHVlPihtX3Byb2MsIEFi
b3ZlRXF1YWwsIE9yaWdpbigpLCBjYWxsZWVJbmRleCwgY2FsbGFibGVGdW5jdGlvbkJ1ZmZlclNp
emUpKTsKIAotICAgICAgICBjaGVjay0+c2V0R2VuZXJhdG9yKFtdIChDQ2FsbEhlbHBlcnMmIGpp
dCwgY29uc3QgQjM6OlN0YWNrbWFwR2VuZXJhdGlvblBhcmFtcyYpIHsKLSAgICAgICAgICAgIGpp
dC5icmVha3BvaW50KCk7CisgICAgICAgIGNoZWNrLT5zZXRHZW5lcmF0b3IoWz1dIChDQ2FsbEhl
bHBlcnMmIGppdCwgY29uc3QgQjM6OlN0YWNrbWFwR2VuZXJhdGlvblBhcmFtcyYpIHsKKyAgICAg
ICAgICAgIHRoaXMtPmVtaXRFeGNlcHRpb25DaGVjayhqaXQsIEV4Y2VwdGlvblR5cGU6Ok91dE9m
Qm91bmRzQ2FsbEluZGlyZWN0KTsKICAgICAgICAgfSk7CiAgICAgfQogCkBAIC03NTgsOCArNzQ0
LDggQEAgYXV0byBCM0lSR2VuZXJhdG9yOjphZGRDYWxsSW5kaXJlY3QoY29ucwogICAgICAgICAg
ICAgICAgIGNhbGxlZVNpZ25hdHVyZSwgCiAgICAgICAgICAgICAgICAgbV9jdXJyZW50QmxvY2st
PmFwcGVuZE5ldzxDb25zdFB0clZhbHVlPihtX3Byb2MsIE9yaWdpbigpLCAwKSkpOwogCi0gICAg
ICAgIGNoZWNrLT5zZXRHZW5lcmF0b3IoW10gKENDYWxsSGVscGVycyYgaml0LCBjb25zdCBCMzo6
U3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zJikgewotICAgICAgICAgICAgaml0LmJyZWFrcG9pbnQo
KTsKKyAgICAgICAgY2hlY2stPnNldEdlbmVyYXRvcihbPV0gKENDYWxsSGVscGVycyYgaml0LCBj
b25zdCBCMzo6U3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zJikgeworICAgICAgICAgICAgdGhpcy0+
ZW1pdEV4Y2VwdGlvbkNoZWNrKGppdCwgRXhjZXB0aW9uVHlwZTo6TnVsbFRhYmxlRW50cnkpOwog
ICAgICAgICB9KTsKICAgICB9CiAKQEAgLTc2OSw4ICs3NTUsOCBAQCBhdXRvIEIzSVJHZW5lcmF0
b3I6OmFkZENhbGxJbmRpcmVjdChjb25zCiAgICAgICAgIENoZWNrVmFsdWUqIGNoZWNrID0gbV9j
dXJyZW50QmxvY2stPmFwcGVuZE5ldzxDaGVja1ZhbHVlPihtX3Byb2MsIENoZWNrLCBPcmlnaW4o
KSwKICAgICAgICAgICAgIG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8VmFsdWU+KG1fcHJvYywg
Tm90RXF1YWwsIE9yaWdpbigpLCBjYWxsZWVTaWduYXR1cmUsIGV4cGVjdGVkU2lnbmF0dXJlKSk7
CiAKLSAgICAgICAgY2hlY2stPnNldEdlbmVyYXRvcihbXSAoQ0NhbGxIZWxwZXJzJiBqaXQsIGNv
bnN0IEIzOjpTdGFja21hcEdlbmVyYXRpb25QYXJhbXMmKSB7Ci0gICAgICAgICAgICBqaXQuYnJl
YWtwb2ludCgpOworICAgICAgICBjaGVjay0+c2V0R2VuZXJhdG9yKFs9XSAoQ0NhbGxIZWxwZXJz
JiBqaXQsIGNvbnN0IEIzOjpTdGFja21hcEdlbmVyYXRpb25QYXJhbXMmKSB7CisgICAgICAgICAg
ICB0aGlzLT5lbWl0RXhjZXB0aW9uQ2hlY2soaml0LCBFeGNlcHRpb25UeXBlOjpCYWRTaWduYXR1
cmUpOwogICAgICAgICB9KTsKICAgICB9CiAKQEAgLTgzMSw3ICs4MTcsNyBAQCB2b2lkIEIzSVJH
ZW5lcmF0b3I6OmR1bXAoY29uc3QgVmVjdG9yPENvCiAgICAgZGF0YUxvZ0xuKCJcbiIpOwogfQog
Ci1zdGF0aWMgc3RkOjp1bmlxdWVfcHRyPENvbXBpbGF0aW9uPiBjcmVhdGVKU1RvV2FzbVdyYXBw
ZXIoVk0mIHZtLCBXYXNtSW50ZXJuYWxGdW5jdGlvbiYgZnVuY3Rpb24sIGNvbnN0IFNpZ25hdHVy
ZSogc2lnbmF0dXJlLCBNYWNyb0Fzc2VtYmxlckNvZGVQdHIgbWFpbkZ1bmN0aW9uLCBjb25zdCBN
ZW1vcnlJbmZvcm1hdGlvbiYgbWVtb3J5KQorc3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxCMzo6Q29t
cGlsYXRpb24+IGNyZWF0ZUpTVG9XYXNtV3JhcHBlcihWTSYgdm0sIFdhc21JbnRlcm5hbEZ1bmN0
aW9uJiBmdW5jdGlvbiwgY29uc3QgU2lnbmF0dXJlKiBzaWduYXR1cmUsIE1hY3JvQXNzZW1ibGVy
Q29kZVB0ciBtYWluRnVuY3Rpb24sIGNvbnN0IE1lbW9yeUluZm9ybWF0aW9uJiBtZW1vcnkpCiB7
CiAgICAgUHJvY2VkdXJlIHByb2M7CiAgICAgQmFzaWNCbG9jayogYmxvY2sgPSBwcm9jLmFkZEJs
b2NrKCk7CkBAIC04NDAsMTkgKzgyNiwyMyBAQCBzdGF0aWMgc3RkOjp1bmlxdWVfcHRyPENvbXBp
bGF0aW9uPiBjcmVhCiAKICAgICBqc2NDYWxsaW5nQ29udmVudGlvbigpLnNldHVwRnJhbWVJblBy
b2xvZ3VlKCZmdW5jdGlvbi5qc1RvV2FzbUNhbGxlZU1vdmVMb2NhdGlvbiwgcHJvYywgb3JpZ2lu
LCBibG9jayk7CiAKLSAgICBWYWx1ZSogZnJhbWVQb2ludGVyID0gYmxvY2stPmFwcGVuZE5ldzxC
Mzo6VmFsdWU+KHByb2MsIEIzOjpGcmFtZVBvaW50ZXIsIG9yaWdpbik7Ci0gICAgVmFsdWUqIG9m
ZlNldE9mQXJndW1lbnRDb3VudCA9IGJsb2NrLT5hcHBlbmROZXc8Q29uc3Q2NFZhbHVlPihwcm9j
LCBvcmlnaW4sIENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnQgKiBzaXplb2YoUmVnaXN0ZXIp
KTsKLSAgICBWYWx1ZSogYXJndW1lbnRDb3VudCA9IGJsb2NrLT5hcHBlbmROZXc8TWVtb3J5VmFs
dWU+KHByb2MsIExvYWQsIEludDMyLCBvcmlnaW4sCi0gICAgICAgIGJsb2NrLT5hcHBlbmROZXc8
VmFsdWU+KHByb2MsIEFkZCwgb3JpZ2luLCBmcmFtZVBvaW50ZXIsIG9mZlNldE9mQXJndW1lbnRD
b3VudCkpOworICAgIGlmICghQVNTRVJUX0RJU0FCTEVEKSB7CisgICAgICAgIC8vIFRoaXMgc2hv
dWxkIGJlIGd1YXJhbnRlZWQgYnkgb3VyIEpTIHdyYXBwZXIgdGhhdCBoYW5kbGVzIGNhbGxzIHRv
IHVzLgorICAgICAgICAvLyBKdXN0IHByZXZlbnQgYWdhaW5zdCBjcmF6eSB3aGVuIEFTU0VSVCBp
cyBlbmFibGVkLgorICAgICAgICBWYWx1ZSogZnJhbWVQb2ludGVyID0gYmxvY2stPmFwcGVuZE5l
dzxCMzo6VmFsdWU+KHByb2MsIEIzOjpGcmFtZVBvaW50ZXIsIG9yaWdpbik7CisgICAgICAgIFZh
bHVlKiBvZmZTZXRPZkFyZ3VtZW50Q291bnQgPSBibG9jay0+YXBwZW5kTmV3PENvbnN0NjRWYWx1
ZT4ocHJvYywgb3JpZ2luLCBDYWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50ICogc2l6ZW9mKFJl
Z2lzdGVyKSk7CisgICAgICAgIFZhbHVlKiBhcmd1bWVudENvdW50ID0gYmxvY2stPmFwcGVuZE5l
dzxNZW1vcnlWYWx1ZT4ocHJvYywgTG9hZCwgSW50MzIsIG9yaWdpbiwKKyAgICAgICAgICAgIGJs
b2NrLT5hcHBlbmROZXc8VmFsdWU+KHByb2MsIEFkZCwgb3JpZ2luLCBmcmFtZVBvaW50ZXIsIG9m
ZlNldE9mQXJndW1lbnRDb3VudCkpOwogCi0gICAgVmFsdWUqIGV4cGVjdGVkQXJndW1lbnRDb3Vu
dCA9IGJsb2NrLT5hcHBlbmROZXc8Q29uc3QzMlZhbHVlPihwcm9jLCBvcmlnaW4sIHNpZ25hdHVy
ZS0+YXJndW1lbnRzLnNpemUoKSk7CisgICAgICAgIFZhbHVlKiBleHBlY3RlZEFyZ3VtZW50Q291
bnQgPSBibG9jay0+YXBwZW5kTmV3PENvbnN0MzJWYWx1ZT4ocHJvYywgb3JpZ2luLCBzaWduYXR1
cmUtPmFyZ3VtZW50cy5zaXplKCkpOwogCi0gICAgQ2hlY2tWYWx1ZSogYXJndW1lbnRDb3VudENo
ZWNrID0gYmxvY2stPmFwcGVuZE5ldzxDaGVja1ZhbHVlPihwcm9jLCBDaGVjaywgb3JpZ2luLAot
ICAgICAgICBibG9jay0+YXBwZW5kTmV3PFZhbHVlPihwcm9jLCBBYm92ZSwgb3JpZ2luLCBleHBl
Y3RlZEFyZ3VtZW50Q291bnQsIGFyZ3VtZW50Q291bnQpKTsKKyAgICAgICAgQ2hlY2tWYWx1ZSog
YXJndW1lbnRDb3VudENoZWNrID0gYmxvY2stPmFwcGVuZE5ldzxDaGVja1ZhbHVlPihwcm9jLCBD
aGVjaywgb3JpZ2luLAorICAgICAgICAgICAgYmxvY2stPmFwcGVuZE5ldzxWYWx1ZT4ocHJvYywg
QWJvdmUsIG9yaWdpbiwgZXhwZWN0ZWRBcmd1bWVudENvdW50LCBhcmd1bWVudENvdW50KSk7CiAK
LSAgICBhcmd1bWVudENvdW50Q2hlY2stPnNldEdlbmVyYXRvcihbXSAoQ0NhbGxIZWxwZXJzJiBq
aXQsIGNvbnN0IFN0YWNrbWFwR2VuZXJhdGlvblBhcmFtcyYpIHsKLSAgICAgICAgaml0LmJyZWFr
cG9pbnQoKTsKLSAgICB9KTsKKyAgICAgICAgYXJndW1lbnRDb3VudENoZWNrLT5zZXRHZW5lcmF0
b3IoW10gKENDYWxsSGVscGVycyYgaml0LCBjb25zdCBTdGFja21hcEdlbmVyYXRpb25QYXJhbXMm
KSB7CisgICAgICAgICAgICBqaXQuYnJlYWtwb2ludCgpOworICAgICAgICB9KTsKKyAgICB9CiAK
ICAgICAvLyBNb3ZlIG1lbW9yeSB2YWx1ZXMgdG8gdGhlIGFwcHJvcmlhdGUgcGxhY2VzLCBpZiBu
ZWVkZWQuCiAgICAgVmFsdWUqIGJhc2VNZW1vcnkgPSBudWxscHRyOwpAQCAtOTEyLDcgKzkwMiw3
IEBAIHN0YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8Q29tcGlsYXRpb24+IGNyZWEKICAgICAgICAgUkVM
RUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICB9CiAKLSAgICBhdXRvIGpzRW50cnlwb2lu
dCA9IHN0ZDo6bWFrZV91bmlxdWU8Q29tcGlsYXRpb24+KHZtLCBwcm9jKTsKKyAgICBhdXRvIGpz
RW50cnlwb2ludCA9IHN0ZDo6bWFrZV91bmlxdWU8Q29tcGlsYXRpb24+KEIzOjpjb21waWxlKHZt
LCBwcm9jKSk7CiAgICAgZnVuY3Rpb24uanNUb1dhc21FbnRyeXBvaW50LmNhbGxlZVNhdmVSZWdp
c3RlcnMgPSBwcm9jLmNhbGxlZVNhdmVSZWdpc3RlcnMoKTsKICAgICByZXR1cm4ganNFbnRyeXBv
aW50OwogfQpAQCAtOTM1LDggKzkyNSw5IEBAIEV4cGVjdGVkPHN0ZDo6dW5pcXVlX3B0cjxXYXNt
SW50ZXJuYWxGdW4KICAgICBpZiAodmVyYm9zZSkKICAgICAgICAgZGF0YUxvZygiUG9zdCBTU0E6
ICIsIHByb2NlZHVyZSk7CiAKLSAgICByZXN1bHQtPndhc21FbnRyeXBvaW50LmNvbXBpbGF0aW9u
ID0gc3RkOjptYWtlX3VuaXF1ZTxDb21waWxhdGlvbj4odm0sIHByb2NlZHVyZSwgb3B0TGV2ZWwp
OworICAgIHJlc3VsdC0+d2FzbUVudHJ5cG9pbnQuY29tcGlsYXRpb24gPSBzdGQ6Om1ha2VfdW5p
cXVlPEIzOjpDb21waWxhdGlvbj4oQjM6OmNvbXBpbGUodm0sIHByb2NlZHVyZSwgb3B0TGV2ZWwp
KTsKICAgICByZXN1bHQtPndhc21FbnRyeXBvaW50LmNhbGxlZVNhdmVSZWdpc3RlcnMgPSBwcm9j
ZWR1cmUuY2FsbGVlU2F2ZVJlZ2lzdGVycygpOworCiAgICAgcmVzdWx0LT5qc1RvV2FzbUVudHJ5
cG9pbnQuY29tcGlsYXRpb24gPSBjcmVhdGVKU1RvV2FzbVdyYXBwZXIodm0sICpyZXN1bHQsIHNp
Z25hdHVyZSwgcmVzdWx0LT53YXNtRW50cnlwb2ludC5jb21waWxhdGlvbi0+Y29kZSgpLCBpbmZv
Lm1lbW9yeSk7CiAgICAgcmV0dXJuIFdURk1vdmUocmVzdWx0KTsKIH0KQEAgLTEwOTMsOCArMTA4
NCw4IEBAIGF1dG8gQjNJUkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpJMzJUcnUKICAgICAgICAg
bV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxWYWx1ZT4obV9wcm9jLCBHcmVhdGVyRXF1YWwsIE9y
aWdpbigpLCBhcmcsIG1pbikpOwogICAgIG91dE9mQm91bmRzID0gbV9jdXJyZW50QmxvY2stPmFw
cGVuZE5ldzxWYWx1ZT4obV9wcm9jLCBFcXVhbCwgT3JpZ2luKCksIG91dE9mQm91bmRzLCB6ZXJv
Rm9yVHlwZShJMzIpKTsKICAgICBDaGVja1ZhbHVlKiB0cmFwID0gbV9jdXJyZW50QmxvY2stPmFw
cGVuZE5ldzxDaGVja1ZhbHVlPihtX3Byb2MsIENoZWNrLCBPcmlnaW4oKSwgb3V0T2ZCb3VuZHMp
OwotICAgIHRyYXAtPnNldEdlbmVyYXRvcihbXSAoQ0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0IFN0
YWNrbWFwR2VuZXJhdGlvblBhcmFtcyYpIHsKLSAgICAgICAgaml0LmJyZWFrcG9pbnQoKTsKKyAg
ICB0cmFwLT5zZXRHZW5lcmF0b3IoWz1dIChDQ2FsbEhlbHBlcnMmIGppdCwgY29uc3QgU3RhY2tt
YXBHZW5lcmF0aW9uUGFyYW1zJikgeworICAgICAgICB0aGlzLT5lbWl0RXhjZXB0aW9uQ2hlY2so
aml0LCBFeGNlcHRpb25UeXBlOjpPdXRPZkJvdW5kc1RydW5jKTsKICAgICB9KTsKICAgICBQYXRj
aHBvaW50VmFsdWUqIHBhdGNocG9pbnQgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFBhdGNo
cG9pbnRWYWx1ZT4obV9wcm9jLCBJbnQzMiwgT3JpZ2luKCkpOwogICAgIHBhdGNocG9pbnQtPmFw
cGVuZChhcmcsIFZhbHVlUmVwOjpTb21lUmVnaXN0ZXIpOwpAQCAtMTExNiw4ICsxMTA3LDggQEAg
YXV0byBCM0lSR2VuZXJhdG9yOjphZGRPcDxPcFR5cGU6OkkzMlRydQogICAgICAgICBtX2N1cnJl
bnRCbG9jay0+YXBwZW5kTmV3PFZhbHVlPihtX3Byb2MsIEdyZWF0ZXJFcXVhbCwgT3JpZ2luKCks
IGFyZywgbWluKSk7CiAgICAgb3V0T2ZCb3VuZHMgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3
PFZhbHVlPihtX3Byb2MsIEVxdWFsLCBPcmlnaW4oKSwgb3V0T2ZCb3VuZHMsIHplcm9Gb3JUeXBl
KEkzMikpOwogICAgIENoZWNrVmFsdWUqIHRyYXAgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3
PENoZWNrVmFsdWU+KG1fcHJvYywgQ2hlY2ssIE9yaWdpbigpLCBvdXRPZkJvdW5kcyk7Ci0gICAg
dHJhcC0+c2V0R2VuZXJhdG9yKFtdIChDQ2FsbEhlbHBlcnMmIGppdCwgY29uc3QgU3RhY2ttYXBH
ZW5lcmF0aW9uUGFyYW1zJikgewotICAgICAgICBqaXQuYnJlYWtwb2ludCgpOworICAgIHRyYXAt
PnNldEdlbmVyYXRvcihbPV0gKENDYWxsSGVscGVycyYgaml0LCBjb25zdCBTdGFja21hcEdlbmVy
YXRpb25QYXJhbXMmKSB7CisgICAgICAgIHRoaXMtPmVtaXRFeGNlcHRpb25DaGVjayhqaXQsIEV4
Y2VwdGlvblR5cGU6Ok91dE9mQm91bmRzVHJ1bmMpOwogICAgIH0pOwogICAgIFBhdGNocG9pbnRW
YWx1ZSogcGF0Y2hwb2ludCA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8UGF0Y2hwb2ludFZh
bHVlPihtX3Byb2MsIEludDMyLCBPcmlnaW4oKSk7CiAgICAgcGF0Y2hwb2ludC0+YXBwZW5kKGFy
ZywgVmFsdWVSZXA6OlNvbWVSZWdpc3Rlcik7CkBAIC0xMTQwLDggKzExMzEsOCBAQCBhdXRvIEIz
SVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6STMyVHJ1CiAgICAgICAgIG1fY3VycmVudEJsb2Nr
LT5hcHBlbmROZXc8VmFsdWU+KG1fcHJvYywgR3JlYXRlclRoYW4sIE9yaWdpbigpLCBhcmcsIG1p
bikpOwogICAgIG91dE9mQm91bmRzID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxWYWx1ZT4o
bV9wcm9jLCBFcXVhbCwgT3JpZ2luKCksIG91dE9mQm91bmRzLCB6ZXJvRm9yVHlwZShJMzIpKTsK
ICAgICBDaGVja1ZhbHVlKiB0cmFwID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxDaGVja1Zh
bHVlPihtX3Byb2MsIENoZWNrLCBPcmlnaW4oKSwgb3V0T2ZCb3VuZHMpOwotICAgIHRyYXAtPnNl
dEdlbmVyYXRvcihbXSAoQ0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0IFN0YWNrbWFwR2VuZXJhdGlv
blBhcmFtcyYpIHsKLSAgICAgICAgaml0LmJyZWFrcG9pbnQoKTsKKyAgICB0cmFwLT5zZXRHZW5l
cmF0b3IoWz1dIChDQ2FsbEhlbHBlcnMmIGppdCwgY29uc3QgU3RhY2ttYXBHZW5lcmF0aW9uUGFy
YW1zJikgeworICAgICAgICB0aGlzLT5lbWl0RXhjZXB0aW9uQ2hlY2soaml0LCBFeGNlcHRpb25U
eXBlOjpPdXRPZkJvdW5kc1RydW5jKTsKICAgICB9KTsKICAgICBQYXRjaHBvaW50VmFsdWUqIHBh
dGNocG9pbnQgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFBhdGNocG9pbnRWYWx1ZT4obV9w
cm9jLCBJbnQzMiwgT3JpZ2luKCkpOwogICAgIHBhdGNocG9pbnQtPmFwcGVuZChhcmcsIFZhbHVl
UmVwOjpTb21lUmVnaXN0ZXIpOwpAQCAtMTE2Myw4ICsxMTU0LDggQEAgYXV0byBCM0lSR2VuZXJh
dG9yOjphZGRPcDxPcFR5cGU6OkkzMlRydQogICAgICAgICBtX2N1cnJlbnRCbG9jay0+YXBwZW5k
TmV3PFZhbHVlPihtX3Byb2MsIEdyZWF0ZXJUaGFuLCBPcmlnaW4oKSwgYXJnLCBtaW4pKTsKICAg
ICBvdXRPZkJvdW5kcyA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8VmFsdWU+KG1fcHJvYywg
RXF1YWwsIE9yaWdpbigpLCBvdXRPZkJvdW5kcywgemVyb0ZvclR5cGUoSTMyKSk7CiAgICAgQ2hl
Y2tWYWx1ZSogdHJhcCA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8Q2hlY2tWYWx1ZT4obV9w
cm9jLCBDaGVjaywgT3JpZ2luKCksIG91dE9mQm91bmRzKTsKLSAgICB0cmFwLT5zZXRHZW5lcmF0
b3IoW10gKENDYWxsSGVscGVycyYgaml0LCBjb25zdCBTdGFja21hcEdlbmVyYXRpb25QYXJhbXMm
KSB7Ci0gICAgICAgIGppdC5icmVha3BvaW50KCk7CisgICAgdHJhcC0+c2V0R2VuZXJhdG9yKFs9
XSAoQ0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0IFN0YWNrbWFwR2VuZXJhdGlvblBhcmFtcyYpIHsK
KyAgICAgICAgdGhpcy0+ZW1pdEV4Y2VwdGlvbkNoZWNrKGppdCwgRXhjZXB0aW9uVHlwZTo6T3V0
T2ZCb3VuZHNUcnVuYyk7CiAgICAgfSk7CiAgICAgUGF0Y2hwb2ludFZhbHVlKiBwYXRjaHBvaW50
ID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxQYXRjaHBvaW50VmFsdWU+KG1fcHJvYywgSW50
MzIsIE9yaWdpbigpKTsKICAgICBwYXRjaHBvaW50LT5hcHBlbmQoYXJnLCBWYWx1ZVJlcDo6U29t
ZVJlZ2lzdGVyKTsKQEAgLTExODYsOCArMTE3Nyw4IEBAIGF1dG8gQjNJUkdlbmVyYXRvcjo6YWRk
T3A8T3BUeXBlOjpJNjRUcnUKICAgICAgICAgbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxWYWx1
ZT4obV9wcm9jLCBHcmVhdGVyRXF1YWwsIE9yaWdpbigpLCBhcmcsIG1pbikpOwogICAgIG91dE9m
Qm91bmRzID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxWYWx1ZT4obV9wcm9jLCBFcXVhbCwg
T3JpZ2luKCksIG91dE9mQm91bmRzLCB6ZXJvRm9yVHlwZShJMzIpKTsKICAgICBDaGVja1ZhbHVl
KiB0cmFwID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxDaGVja1ZhbHVlPihtX3Byb2MsIENo
ZWNrLCBPcmlnaW4oKSwgb3V0T2ZCb3VuZHMpOwotICAgIHRyYXAtPnNldEdlbmVyYXRvcihbXSAo
Q0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0IFN0YWNrbWFwR2VuZXJhdGlvblBhcmFtcyYpIHsKLSAg
ICAgICAgaml0LmJyZWFrcG9pbnQoKTsKKyAgICB0cmFwLT5zZXRHZW5lcmF0b3IoWz1dIChDQ2Fs
bEhlbHBlcnMmIGppdCwgY29uc3QgU3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zJikgeworICAgICAg
ICB0aGlzLT5lbWl0RXhjZXB0aW9uQ2hlY2soaml0LCBFeGNlcHRpb25UeXBlOjpPdXRPZkJvdW5k
c1RydW5jKTsKICAgICB9KTsKICAgICBQYXRjaHBvaW50VmFsdWUqIHBhdGNocG9pbnQgPSBtX2N1
cnJlbnRCbG9jay0+YXBwZW5kTmV3PFBhdGNocG9pbnRWYWx1ZT4obV9wcm9jLCBJbnQ2NCwgT3Jp
Z2luKCkpOwogICAgIHBhdGNocG9pbnQtPmFwcGVuZChhcmcsIFZhbHVlUmVwOjpTb21lUmVnaXN0
ZXIpOwpAQCAtMTIwOSw4ICsxMjAwLDggQEAgYXV0byBCM0lSR2VuZXJhdG9yOjphZGRPcDxPcFR5
cGU6Okk2NFRydQogICAgICAgICBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFZhbHVlPihtX3By
b2MsIEdyZWF0ZXJUaGFuLCBPcmlnaW4oKSwgYXJnLCBtaW4pKTsKICAgICBvdXRPZkJvdW5kcyA9
IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8VmFsdWU+KG1fcHJvYywgRXF1YWwsIE9yaWdpbigp
LCBvdXRPZkJvdW5kcywgemVyb0ZvclR5cGUoSTMyKSk7CiAgICAgQ2hlY2tWYWx1ZSogdHJhcCA9
IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8Q2hlY2tWYWx1ZT4obV9wcm9jLCBDaGVjaywgT3Jp
Z2luKCksIG91dE9mQm91bmRzKTsKLSAgICB0cmFwLT5zZXRHZW5lcmF0b3IoW10gKENDYWxsSGVs
cGVycyYgaml0LCBjb25zdCBTdGFja21hcEdlbmVyYXRpb25QYXJhbXMmKSB7Ci0gICAgICAgIGpp
dC5icmVha3BvaW50KCk7CisgICAgdHJhcC0+c2V0R2VuZXJhdG9yKFs9XSAoQ0NhbGxIZWxwZXJz
JiBqaXQsIGNvbnN0IFN0YWNrbWFwR2VuZXJhdGlvblBhcmFtcyYpIHsKKyAgICAgICAgdGhpcy0+
ZW1pdEV4Y2VwdGlvbkNoZWNrKGppdCwgRXhjZXB0aW9uVHlwZTo6T3V0T2ZCb3VuZHNUcnVuYyk7
CiAgICAgfSk7CiAKICAgICBWYWx1ZSogY29uc3RhbnQ7CkBAIC0xMjUxLDggKzEyNDIsOCBAQCBh
dXRvIEIzSVJHZW5lcmF0b3I6OmFkZE9wPE9wVHlwZTo6STY0VHJ1CiAgICAgICAgIG1fY3VycmVu
dEJsb2NrLT5hcHBlbmROZXc8VmFsdWU+KG1fcHJvYywgR3JlYXRlckVxdWFsLCBPcmlnaW4oKSwg
YXJnLCBtaW4pKTsKICAgICBvdXRPZkJvdW5kcyA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8
VmFsdWU+KG1fcHJvYywgRXF1YWwsIE9yaWdpbigpLCBvdXRPZkJvdW5kcywgemVyb0ZvclR5cGUo
STMyKSk7CiAgICAgQ2hlY2tWYWx1ZSogdHJhcCA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8
Q2hlY2tWYWx1ZT4obV9wcm9jLCBDaGVjaywgT3JpZ2luKCksIG91dE9mQm91bmRzKTsKLSAgICB0
cmFwLT5zZXRHZW5lcmF0b3IoW10gKENDYWxsSGVscGVycyYgaml0LCBjb25zdCBTdGFja21hcEdl
bmVyYXRpb25QYXJhbXMmKSB7Ci0gICAgICAgIGppdC5icmVha3BvaW50KCk7CisgICAgdHJhcC0+
c2V0R2VuZXJhdG9yKFs9XSAoQ0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0IFN0YWNrbWFwR2VuZXJh
dGlvblBhcmFtcyYpIHsKKyAgICAgICAgdGhpcy0+ZW1pdEV4Y2VwdGlvbkNoZWNrKGppdCwgRXhj
ZXB0aW9uVHlwZTo6T3V0T2ZCb3VuZHNUcnVuYyk7CiAgICAgfSk7CiAgICAgUGF0Y2hwb2ludFZh
bHVlKiBwYXRjaHBvaW50ID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxQYXRjaHBvaW50VmFs
dWU+KG1fcHJvYywgSW50NjQsIE9yaWdpbigpKTsKICAgICBwYXRjaHBvaW50LT5hcHBlbmQoYXJn
LCBWYWx1ZVJlcDo6U29tZVJlZ2lzdGVyKTsKQEAgLTEyNzQsOCArMTI2NSw4IEBAIGF1dG8gQjNJ
UkdlbmVyYXRvcjo6YWRkT3A8T3BUeXBlOjpJNjRUcnUKICAgICAgICAgbV9jdXJyZW50QmxvY2st
PmFwcGVuZE5ldzxWYWx1ZT4obV9wcm9jLCBHcmVhdGVyVGhhbiwgT3JpZ2luKCksIGFyZywgbWlu
KSk7CiAgICAgb3V0T2ZCb3VuZHMgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFZhbHVlPiht
X3Byb2MsIEVxdWFsLCBPcmlnaW4oKSwgb3V0T2ZCb3VuZHMsIHplcm9Gb3JUeXBlKEkzMikpOwog
ICAgIENoZWNrVmFsdWUqIHRyYXAgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PENoZWNrVmFs
dWU+KG1fcHJvYywgQ2hlY2ssIE9yaWdpbigpLCBvdXRPZkJvdW5kcyk7Ci0gICAgdHJhcC0+c2V0
R2VuZXJhdG9yKFtdIChDQ2FsbEhlbHBlcnMmIGppdCwgY29uc3QgU3RhY2ttYXBHZW5lcmF0aW9u
UGFyYW1zJikgewotICAgICAgICBqaXQuYnJlYWtwb2ludCgpOworICAgIHRyYXAtPnNldEdlbmVy
YXRvcihbPV0gKENDYWxsSGVscGVycyYgaml0LCBjb25zdCBTdGFja21hcEdlbmVyYXRpb25QYXJh
bXMmKSB7CisgICAgICAgIHRoaXMtPmVtaXRFeGNlcHRpb25DaGVjayhqaXQsIEV4Y2VwdGlvblR5
cGU6Ok91dE9mQm91bmRzVHJ1bmMpOwogICAgIH0pOwogCiAgICAgVmFsdWUqIGNvbnN0YW50OwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUV4Y2VwdGlvblR5cGUuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtRXhjZXB0aW9uVHlwZS5o
CShub25leGlzdGVudCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21FeGNlcHRp
b25UeXBlLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw2MiBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQg
QU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaWYgRU5BQkxF
KFdFQkFTU0VNQkxZKQorCituYW1lc3BhY2UgSlNDIHsKKworbmFtZXNwYWNlIFdhc20geworCisj
ZGVmaW5lIEZPUl9FQUNIX0VYQ0VQVElPTihtYWNybykgXAorICAgIG1hY3JvKE91dE9mQm91bmRz
TWVtb3J5QWNjZXNzLCAgIk91dCBvZiBib3VuZHMgbWVtb3J5IGFjY2VzcyIpIFwKKyAgICBtYWNy
byhPdXRPZkJvdW5kc0NhbGxJbmRpcmVjdCwgIk91dCBvZiBib3VuZHMgY2FsbF9pbmRpcmVjdCIp
IFwKKyAgICBtYWNybyhOdWxsVGFibGVFbnRyeSwgICJjYWxsX2luZGlyZWN0IHRvIGEgbnVsbCB0
YWJsZSBlbnRyeSIpIFwKKyAgICBtYWNybyhCYWRTaWduYXR1cmUsICJjYWxsX2luZGlyZWN0IHRv
IGEgc2lnbmF0dXJlIHRoYXQgZG9lcyBub3QgbWF0Y2giKSBcCisgICAgbWFjcm8oT3V0T2ZCb3Vu
ZHNUcnVuYywgIk91dCBvZiBib3VuZHMgVHJ1bmMgb3BlcmF0aW9uIikgXAorCitlbnVtIGNsYXNz
IEV4Y2VwdGlvblR5cGUgOiB1aW50MzJfdCB7CisjZGVmaW5lIE1BS0VfRU5VTShlbnVtTmFtZSwg
ZXJyb3IpIGVudW1OYW1lLAorICAgIEZPUl9FQUNIX0VYQ0VQVElPTihNQUtFX0VOVU0pCisjdW5k
ZWYgTUFLRV9FTlVNCit9OworCitBTFdBWVNfSU5MSU5FIGNvbnN0IGNoYXIqIGVycm9yTWVzc2Fn
ZUZvckV4Y2VwdGlvblR5cGUoRXhjZXB0aW9uVHlwZSB0eXBlKQoreworICAgIHN3aXRjaCAodHlw
ZSkgeworI2RlZmluZSBTV0lUQ0hfQ0FTRShlbnVtTmFtZSwgZXJyb3IpIFwKKyAgICBjYXNlIEV4
Y2VwdGlvblR5cGU6OmVudW1OYW1lOiByZXR1cm4gZXJyb3I7CisKKyAgICBGT1JfRUFDSF9FWENF
UFRJT04oU1dJVENIX0NBU0UpCisjdW5kZWYgU1dJVENIX0NBU0UKKyAgICB9CisgICAgQVNTRVJU
X05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJuICIiOworfQorCit9IH0gLy8gbmFtZXNwYWNlIEpT
Qzo6V2FzbQorCisjZW5kaWYgLy8gRU5BQkxFKFdFQkFTU0VNQkxZKQo=
</data>

          </attachment>
      

    </bug>

</bugzilla>