<?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>50030</bug_id>
          
          <creation_ts>2010-11-24 09:02:04 -0800</creation_ts>
          <short_desc>Add an OptionsObject class for IndexedDB (and later GeoLocation)</short_desc>
          <delta_ts>2010-11-25 06:05:45 -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>New Bugs</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>PC</rep_platform>
          <op_sys>OS X 10.5</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="Jeremy Orlow">jorlow</reporter>
          <assigned_to name="Jeremy Orlow">jorlow</assigned_to>
          <cc>andreip</cc>
    
    <cc>buildbot</cc>
    
    <cc>eric</cc>
    
    <cc>hans</cc>
    
    <cc>steveblock</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>313324</commentid>
    <comment_count>0</comment_count>
    <who name="Jeremy Orlow">jorlow</who>
    <bug_when>2010-11-24 09:02:04 -0800</bug_when>
    <thetext>GeoLocation and IndexedDB both have the concept of an optional parameter that has various options supplied with it.  In GeoLocation this was done with custom bindings, but I&apos;m trying to avoid that for IndexedDB.

Patch1: Implement this for v8, add it to the bindings tests, and utilize it for IDBDatabase.createObjectStore

Patch2: Implement for JSC, change GeoLocation to use it instead of custom code</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>313326</commentid>
    <comment_count>1</comment_count>
      <attachid>74766</attachid>
    <who name="Jeremy Orlow">jorlow</who>
    <bug_when>2010-11-24 09:05:44 -0800</bug_when>
    <thetext>Created attachment 74766
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>313333</commentid>
    <comment_count>2</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2010-11-24 09:20:08 -0800</bug_when>
    <thetext>Attachment 74766 did not build on mac:
Build output: http://queues.webkit.org/results/6395030</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>313337</commentid>
    <comment_count>3</comment_count>
    <who name="Jeremy Orlow">jorlow</who>
    <bug_when>2010-11-24 09:23:57 -0800</bug_when>
    <thetext>The bots show red only because of style.  And the style is that of the generated bindings, but actual code.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>313346</commentid>
    <comment_count>4</comment_count>
      <attachid>74771</attachid>
    <who name="Jeremy Orlow">jorlow</who>
    <bug_when>2010-11-24 09:38:00 -0800</bug_when>
    <thetext>Created attachment 74771
Added another layout test</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>313358</commentid>
    <comment_count>5</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2010-11-24 09:58:18 -0800</bug_when>
    <thetext>Attachment 74771 did not build on mac:
Build output: http://queues.webkit.org/results/6375029</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>313401</commentid>
    <comment_count>6</comment_count>
    <who name="Build Bot">buildbot</who>
    <bug_when>2010-11-24 11:13:19 -0800</bug_when>
    <thetext>Attachment 74771 did not build on win:
Build output: http://queues.webkit.org/results/6372031</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>313423</commentid>
    <comment_count>7</comment_count>
    <who name="Andrei Popescu">andreip</who>
    <bug_when>2010-11-24 12:33:20 -0800</bug_when>
    <thetext>Nice!

&gt; // IMPORTANT: This should only be allocated on the stack given that it stores the
&gt; //            object as a v8::Local which is only allowed to be on the stack.

Rather than this, maybe it&apos;s more efficient to just declare the new operator as private? This wouldn&apos;t work if you derive from this class tho...

&gt;  bool getKeyBool(const String&amp; key, bool&amp; value) const;
&gt;  bool getKeyString(const String&amp; key, String&amp; value) const;

Geolocation also uses a long.


&gt; 83     return !v8Value.IsEmpty();

Should this be return true; instead? If v8Value was empty you would have already returned false on line 77, no?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>313424</commentid>
    <comment_count>8</comment_count>
    <who name="Jeremy Orlow">jorlow</who>
    <bug_when>2010-11-24 12:39:13 -0800</bug_when>
    <thetext>(In reply to comment #7)
&gt; Nice!
&gt; 
&gt; &gt; // IMPORTANT: This should only be allocated on the stack given that it stores the
&gt; &gt; //            object as a v8::Local which is only allowed to be on the stack.
&gt; 
&gt; Rather than this, maybe it&apos;s more efficient to just declare the new operator as private? This wouldn&apos;t work if you derive from this class tho...

Good idea.
 
&gt; &gt;  bool getKeyBool(const String&amp; key, bool&amp; value) const;
&gt; &gt;  bool getKeyString(const String&amp; key, String&amp; value) const;
&gt; 
&gt; Geolocation also uses a long.

And other stuff.  Will add it in patch 2.
 
&gt; &gt; 83     return !v8Value.IsEmpty();
&gt; 
&gt; Should this be return true; instead? If v8Value was empty you would have already returned false on line 77, no?

I guess I can assert that it&apos;s not empty and return true.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>313660</commentid>
    <comment_count>9</comment_count>
      <attachid>74844</attachid>
    <who name="Jeremy Orlow">jorlow</who>
    <bug_when>2010-11-25 02:38:07 -0800</bug_when>
    <thetext>Created attachment 74844
andrei&apos;s changes

(In reply to comment #8)
&gt; (In reply to comment #7)
&gt; &gt; Nice!
&gt; &gt; 
&gt; &gt; &gt; // IMPORTANT: This should only be allocated on the stack given that it stores the
&gt; &gt; &gt; //            object as a v8::Local which is only allowed to be on the stack.
&gt; &gt; 
&gt; &gt; Rather than this, maybe it&apos;s more efficient to just declare the new operator as private? This wouldn&apos;t work if you derive from this class tho...
&gt; 
&gt; Good idea.

Done.
 
&gt; &gt; &gt;  bool getKeyBool(const String&amp; key, bool&amp; value) const;
&gt; &gt; &gt;  bool getKeyString(const String&amp; key, String&amp; value) const;
&gt; &gt; 
&gt; &gt; Geolocation also uses a long.
&gt; 
&gt; And other stuff.  Will add it in patch 2.
&gt; 
&gt; &gt; &gt; 83     return !v8Value.IsEmpty();
&gt; &gt; 
&gt; &gt; Should this be return true; instead? If v8Value was empty you would have already returned false on line 77, no?
&gt; 
&gt; I guess I can assert that it&apos;s not empty and return true.

Done

Also, I added something to the WebKit API for another patch I&apos;m working on.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>313662</commentid>
    <comment_count>10</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2010-11-25 02:49:21 -0800</bug_when>
    <thetext>Attachment 74844 did not build on mac:
Build output: http://queues.webkit.org/results/6348048</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>313666</commentid>
    <comment_count>11</comment_count>
      <attachid>74844</attachid>
    <who name="Steve Block">steveblock</who>
    <bug_when>2010-11-25 03:09:57 -0800</bug_when>
    <thetext>Comment on attachment 74844
andrei&apos;s changes

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

&gt; LayoutTests/ChangeLog:5
&gt; +        Add an OptionsObject class for IndexedDB (and later GeoLocation)

Nit: Geolocation

&gt; LayoutTests/ChangeLog:8
&gt; +        Existing test covers this case.

It looks like you have added a new test?

&gt; LayoutTests/storage/indexeddb/createObjectStoreOptions.html:1
&gt; +&lt;html&gt;

This test is named incorrectly - create-object-store-options.html

&gt; WebCore/ChangeLog:13
&gt; +        This first patch implements it in V8 and makes createObjectStore use it.

It would aid reviewing if you used separate patches for the addition of the new OptionsObject and for using it in IDB. Same goes for when you do it for JSC and then use it for Geolocation.

&gt; WebCore/bindings/v8/OptionsObject.cpp:53
&gt; +    if (m_options.IsEmpty())

I guess this is safe even if m_options has never been initialized?

&gt; WebCore/bindings/v8/OptionsObject.cpp:83
&gt; +    ASSERT(!v8Value.IsEmpty());

Doesn&apos;t this make more sense at line 78? Why no similar assert in getKeyBool() ?

&gt; WebCore/bindings/v8/OptionsObject.cpp:89
&gt; +    if (undefinedOrNull())

I don&apos;t think is the right check. The caller might want to distinguish between null and undefined. For example, in Geolocation, for PositionOptions.timeout, if the property is unset or set to undefined we apply a default value. For any other value, we apply the generic JS conversion to Number, which includes null -&gt; 0. One can imagine a similar situation for a boolean property which defaults to true, but where we want to allow null -&gt; false. Can we test for this kind of thing?

&gt; WebCore/bindings/v8/OptionsObject.cpp:91
&gt; +    v8::Local&lt;v8::Object&gt; options = m_options-&gt;ToObject();

Is it possible to do the conversion to v8::Object once only, in the constructor, and cache the result?

&gt; WebCore/bindings/v8/OptionsObject.cpp:94
&gt; +    return !value.IsEmpty();

As Andrei mentioned, it&apos;s more readable to return true here.

&gt; WebCore/bindings/v8/OptionsObject.h:43
&gt; +    bool undefinedOrNull() const;

Shouldn&apos;t this be isUndefinedOrNull() ?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>313674</commentid>
    <comment_count>12</comment_count>
      <attachid>74849</attachid>
    <who name="Jeremy Orlow">jorlow</who>
    <bug_when>2010-11-25 03:48:14 -0800</bug_when>
    <thetext>Created attachment 74849
address steve&apos;s coments

(In reply to comment #11)
&gt; (From update of attachment 74844 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=74844&amp;action=review
&gt; 
&gt; &gt; LayoutTests/ChangeLog:5
&gt; &gt; +        Add an OptionsObject class for IndexedDB (and later GeoLocation)
&gt; 
&gt; Nit: Geolocation

done

&gt; &gt; LayoutTests/ChangeLog:8
&gt; &gt; +        Existing test covers this case.
&gt; 
&gt; It looks like you have added a new test?

oops

&gt; &gt; LayoutTests/storage/indexeddb/createObjectStoreOptions.html:1
&gt; &gt; +&lt;html&gt;
&gt; 
&gt; This test is named incorrectly - create-object-store-options.html

oops
 
&gt; &gt; WebCore/ChangeLog:13
&gt; &gt; +        This first patch implements it in V8 and makes createObjectStore use it.
&gt; 
&gt; It would aid reviewing if you used separate patches for the addition of the new OptionsObject and for using it in IDB. Same goes for when you do it for JSC and then use it for Geolocation.

I thought we generally weren&apos;t supposed to add dead code?  I tried to make this as minimal as possible.

&gt; &gt; WebCore/bindings/v8/OptionsObject.cpp:53
&gt; &gt; +    if (m_options.IsEmpty())
&gt; 
&gt; I guess this is safe even if m_options has never been initialized?

It isn&apos;t.
 
&gt; &gt; WebCore/bindings/v8/OptionsObject.cpp:83
&gt; &gt; +    ASSERT(!v8Value.IsEmpty());
&gt; 
&gt; Doesn&apos;t this make more sense at line 78? Why no similar assert in getKeyBool() ?

Was supposed to be on value, not v8Value.

&gt; &gt; WebCore/bindings/v8/OptionsObject.cpp:89
&gt; &gt; +    if (undefinedOrNull())
&gt; 
&gt; I don&apos;t think is the right check. The caller might want to distinguish between null and undefined. For example, in Geolocation, for PositionOptions.timeout, if the property is unset or set to undefined we apply a default value. For any other value, we apply the generic JS conversion to Number, which includes null -&gt; 0. One can imagine a similar situation for a boolean property which defaults to true, but where we want to allow null -&gt; false. Can we test for this kind of thing?

Will address in later patch.
 
&gt; &gt; WebCore/bindings/v8/OptionsObject.cpp:91
&gt; &gt; +    v8::Local&lt;v8::Object&gt; options = m_options-&gt;ToObject();
&gt; 
&gt; Is it possible to do the conversion to v8::Object once only, in the constructor, and cache the result?

We could with the current code, but I&apos;m working on a patch where this is no longer true so I&apos;m not sure it&apos;s worth the effort.

&gt; &gt; WebCore/bindings/v8/OptionsObject.cpp:94
&gt; &gt; +    return !value.IsEmpty();
&gt; 
&gt; As Andrei mentioned, it&apos;s more readable to return true here.

No, he mentioned it earlier.  It isn&apos;t necessarily true here.  But if I do a Has check first, then it should always be true.  And that does seem better.

&gt; &gt; WebCore/bindings/v8/OptionsObject.h:43
&gt; &gt; +    bool undefinedOrNull() const;
&gt; 
&gt; Shouldn&apos;t this be isUndefinedOrNull() ?

done</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>313678</commentid>
    <comment_count>13</comment_count>
    <who name="Andrei Popescu">andreip</who>
    <bug_when>2010-11-25 03:56:28 -0800</bug_when>
    <thetext>LGTM

&gt; static void* operator new(size_t); 
&gt; static void operator delete(void *);


I&apos;d add the array new (void operator new[] (size_t)) just in case someone decides to allocate an array of these objects.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>313680</commentid>
    <comment_count>14</comment_count>
    <who name="Jeremy Orlow">jorlow</who>
    <bug_when>2010-11-25 03:59:43 -0800</bug_when>
    <thetext>(In reply to comment #13)
&gt; LGTM
&gt; 
&gt; &gt; static void* operator new(size_t); 
&gt; &gt; static void operator delete(void *);
&gt; 
&gt; 
&gt; I&apos;d add the array new (void operator new[] (size_t)) just in case someone decides to allocate an array of these objects.

Done in my local copy.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>313682</commentid>
    <comment_count>15</comment_count>
      <attachid>74852</attachid>
    <who name="Jeremy Orlow">jorlow</who>
    <bug_when>2010-11-25 04:03:54 -0800</bug_when>
    <thetext>Created attachment 74852
andrei&apos;s comment</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>313683</commentid>
    <comment_count>16</comment_count>
      <attachid>74853</attachid>
    <who name="Jeremy Orlow">jorlow</who>
    <bug_when>2010-11-25 04:05:55 -0800</bug_when>
    <thetext>Created attachment 74853
even better</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>313689</commentid>
    <comment_count>17</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2010-11-25 04:18:01 -0800</bug_when>
    <thetext>Attachment 74853 did not build on mac:
Build output: http://queues.webkit.org/results/6342039</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>313695</commentid>
    <comment_count>18</comment_count>
    <who name="Steve Block">steveblock</who>
    <bug_when>2010-11-25 04:42:58 -0800</bug_when>
    <thetext>&gt; I thought we generally weren&apos;t supposed to add dead code?  I tried to make
&gt; this as minimal as possible.
Sure, but when the the need for the temporarily dead code is clear (eg bug dependencies), I think it&apos;s best to keep things as simple as possible.

&gt; &gt; &gt; WebCore/bindings/v8/OptionsObject.cpp:53
&gt; &gt; &gt; +    if (m_options.IsEmpty())
&gt; &gt; 
&gt; &gt; I guess this is safe even if m_options has never been initialized?
&gt; It isn&apos;t.
So what if somebody calls the default constructor then one of the getter methods?

&gt; Will address in later patch.
Sure, if you&apos;re confident it doesn&apos;t make sense to do it now.

&gt; &gt; Is it possible to do the conversion to v8::Object once only, in the constructor, and cache the result?
&gt; 
&gt; We could with the current code, but I&apos;m working on a patch where this is no longer true so I&apos;m not sure it&apos;s worth the effort.
OK

The bots seems to be red because of a missing header, which needs fixing.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>313699</commentid>
    <comment_count>19</comment_count>
    <who name="Jeremy Orlow">jorlow</who>
    <bug_when>2010-11-25 04:50:40 -0800</bug_when>
    <thetext>(In reply to comment #18)
&gt; &gt; I thought we generally weren&apos;t supposed to add dead code?  I tried to make
&gt; &gt; this as minimal as possible.
&gt; Sure, but when the the need for the temporarily dead code is clear (eg bug dependencies), I think it&apos;s best to keep things as simple as possible.
&gt; 
&gt; &gt; &gt; &gt; WebCore/bindings/v8/OptionsObject.cpp:53
&gt; &gt; &gt; &gt; +    if (m_options.IsEmpty())
&gt; &gt; &gt; 
&gt; &gt; &gt; I guess this is safe even if m_options has never been initialized?
&gt; &gt; It isn&apos;t.
&gt; So what if somebody calls the default constructor then one of the getter methods?

Nothing will be returned.  Which makes sense, because the option was not provided.
 
&gt; &gt; Will address in later patch.
&gt; Sure, if you&apos;re confident it doesn&apos;t make sense to do it now.

What benefit does it give besides a slight perf advantage that would never be measurable and maybe a slight code cleanliness bump?
 
&gt; &gt; &gt; Is it possible to do the conversion to v8::Object once only, in the constructor, and cache the result?
&gt; &gt; 
&gt; &gt; We could with the current code, but I&apos;m working on a patch where this is no longer true so I&apos;m not sure it&apos;s worth the effort.
&gt; OK
&gt; 
&gt; The bots seems to be red because of a missing header, which needs fixing.

Will add an empty file for JSC with a fixme.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>313701</commentid>
    <comment_count>20</comment_count>
      <attachid>74858</attachid>
    <who name="Jeremy Orlow">jorlow</who>
    <bug_when>2010-11-25 04:57:14 -0800</bug_when>
    <thetext>Created attachment 74858
updated

should compile now</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>313703</commentid>
    <comment_count>21</comment_count>
    <who name="Jeremy Orlow">jorlow</who>
    <bug_when>2010-11-25 04:59:03 -0800</bug_when>
    <thetext>(In reply to comment #19)
&gt; (In reply to comment #18)
&gt; &gt; &gt; I thought we generally weren&apos;t supposed to add dead code?  I tried to make
&gt; &gt; &gt; this as minimal as possible.
&gt; &gt; Sure, but when the the need for the temporarily dead code is clear (eg bug dependencies), I think it&apos;s best to keep things as simple as possible.
&gt; &gt; 
&gt; &gt; &gt; &gt; &gt; WebCore/bindings/v8/OptionsObject.cpp:53
&gt; &gt; &gt; &gt; &gt; +    if (m_options.IsEmpty())
&gt; &gt; &gt; &gt; 
&gt; &gt; &gt; &gt; I guess this is safe even if m_options has never been initialized?
&gt; &gt; &gt; It isn&apos;t.
&gt; &gt; So what if somebody calls the default constructor then one of the getter methods?
&gt; 
&gt; Nothing will be returned.  Which makes sense, because the option was not provided.

Because getKey will call this class&apos;s isUndefinedOrNull which does the check.
 
&gt; &gt; &gt; Will address in later patch.
&gt; &gt; Sure, if you&apos;re confident it doesn&apos;t make sense to do it now.
&gt; 
&gt; What benefit does it give besides a slight perf advantage that would never be measurable and maybe a slight code cleanliness bump?
&gt; 
&gt; &gt; &gt; &gt; Is it possible to do the conversion to v8::Object once only, in the constructor, and cache the result?
&gt; &gt; &gt; 
&gt; &gt; &gt; We could with the current code, but I&apos;m working on a patch where this is no longer true so I&apos;m not sure it&apos;s worth the effort.
&gt; &gt; OK
&gt; &gt; 
&gt; &gt; The bots seems to be red because of a missing header, which needs fixing.
&gt; 
&gt; Will add an empty file for JSC with a fixme.

done</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>313711</commentid>
    <comment_count>22</comment_count>
    <who name="Andrei Popescu">andreip</who>
    <bug_when>2010-11-25 05:19:34 -0800</bug_when>
    <thetext>(In reply to comment #19)
&gt; (In reply to comment #18)
&gt; &gt; &gt; I thought we generally weren&apos;t supposed to add dead code?  I tried to make
&gt; &gt; &gt; this as minimal as possible.
&gt; &gt; Sure, but when the the need for the temporarily dead code is clear (eg bug dependencies), I think it&apos;s best to keep things as simple as possible.
&gt; &gt; 
&gt; &gt; &gt; &gt; &gt; WebCore/bindings/v8/OptionsObject.cpp:53
&gt; &gt; &gt; &gt; &gt; +    if (m_options.IsEmpty())
&gt; &gt; &gt; &gt; 
&gt; &gt; &gt; &gt; I guess this is safe even if m_options has never been initialized?
&gt; &gt; &gt; It isn&apos;t.
&gt; &gt; So what if somebody calls the default constructor then one of the getter methods?
&gt; 
&gt; Nothing will be returned.  Which makes sense, because the option was not provided.
&gt; 
&gt; &gt; &gt; Will address in later patch.
&gt; &gt; Sure, if you&apos;re confident it doesn&apos;t make sense to do it now.
&gt; 
&gt; What benefit does it give besides a slight perf advantage that would never be measurable and maybe a slight code cleanliness bump?
&gt; 


I think Steve&apos;s comment is about something else altogether. Say someone calls

geolocation.getCurrentPosition(successCallback, errorCallback, {timeout:null});

What should happen here is that the null parameter gets coerced to a Number, which will be 0 in this case. That then sets a timeout of 0ms, overriding the default value (Infinitiy).

Now if we were to use the OptionsObject in this patch, getKey() would early out after the isUndefinedOrNull() check, since the value is null. This would then mean that the extraction of the timeout attribute would fail, so the default value would apply (Infinity). But this is wrong since 0 should have been used.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>313712</commentid>
    <comment_count>23</comment_count>
    <who name="Steve Block">steveblock</who>
    <bug_when>2010-11-25 05:21:18 -0800</bug_when>
    <thetext>&gt; &gt; &gt; &gt; &gt; I guess this is safe even if m_options has never been initialized?
&gt; &gt; &gt; &gt; It isn&apos;t.
&gt; &gt; &gt; So what if somebody calls the default constructor then one of the getter methods?
&gt; &gt; 
&gt; &gt; Nothing will be returned.  Which makes sense, because the option was not provided.
OK, so it is safe. I think there was just a misunderstanding to start with.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>313714</commentid>
    <comment_count>24</comment_count>
    <who name="Jeremy Orlow">jorlow</who>
    <bug_when>2010-11-25 05:22:56 -0800</bug_when>
    <thetext>(In reply to comment #23)
&gt; &gt; &gt; &gt; &gt; &gt; I guess this is safe even if m_options has never been initialized?
&gt; &gt; &gt; &gt; &gt; It isn&apos;t.
&gt; &gt; &gt; &gt; So what if somebody calls the default constructor then one of the getter methods?
&gt; &gt; &gt; 
&gt; &gt; &gt; Nothing will be returned.  Which makes sense, because the option was not provided.
&gt; OK, so it is safe. I think there was just a misunderstanding to start with.

Let&apos;s concentrate on this patch.  I&apos;ll modify it to work for Geolocation later.  I prototyped what it would look like and I think this is on the right track, but we can discuss it in that patch.  k?

Can I please get a r+?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>313715</commentid>
    <comment_count>25</comment_count>
      <attachid>74858</attachid>
    <who name="Steve Block">steveblock</who>
    <bug_when>2010-11-25 05:33:23 -0800</bug_when>
    <thetext>Comment on attachment 74858
updated

&gt; &gt; &gt; &gt; &gt; I don&apos;t think is the right check. ...
&gt; &gt; &gt; &gt; Will address in later patch.
&gt; &gt; &gt; Sure, if you&apos;re confident it doesn&apos;t make sense to do it now.
&gt; &gt; What benefit does it give besides a slight perf advantage that would never be measurable and maybe a slight code cleanliness bump?
&gt; Let&apos;s concentrate on this patch.  I&apos;ll modify it to work for Geolocation later.
I pointed it out in this review because it might have made sense to fix it here. If you&apos;d like to fix it in a later patch, that&apos;s fine with me, as I said above. I was then was confused by your comment about performance, which seems unrelated.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>313727</commentid>
    <comment_count>26</comment_count>
    <who name="Jeremy Orlow">jorlow</who>
    <bug_when>2010-11-25 06:05:45 -0800</bug_when>
    <thetext>Committed r72728: &lt;http://trac.webkit.org/changeset/72728&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>74766</attachid>
            <date>2010-11-24 09:05:44 -0800</date>
            <delta_ts>2010-11-24 09:38:00 -0800</delta_ts>
            <desc>patch</desc>
            <filename>a</filename>
            <type>text/plain</type>
            <size>32512</size>
            <attacher name="Jeremy Orlow">jorlow</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxv
ZwppbmRleCA0ZjhmM2QyLi4xMGFmZjQ0IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VM
b2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTQgQEAKKzIwMTAtMTEt
MjQgIEplcmVteSBPcmxvdyAgPGpvcmxvd0BjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQWRkIGFuIE9wdGlvbnNPYmplY3QgY2xh
c3MgZm9yIEluZGV4ZWREQiAoYW5kIGxhdGVyIEdlb0xvY2F0aW9uKQorICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTAwMzAKKworICAgICAgICBFeGlzdGlu
ZyB0ZXN0IGNvdmVycyB0aGlzIGNhc2UuCisKKyAgICAgICAgKiBzdG9yYWdlL2luZGV4ZWRkYi90
dXRvcmlhbC5odG1sOgorCiAyMDEwLTExLTIzICBKZXJlbXkgT3Jsb3cgIDxqb3Jsb3dAY2hyb21p
dW0ub3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgpkaWZmIC0tZ2l0
IGEvTGF5b3V0VGVzdHMvc3RvcmFnZS9pbmRleGVkZGIvdHV0b3JpYWwuaHRtbCBiL0xheW91dFRl
c3RzL3N0b3JhZ2UvaW5kZXhlZGRiL3R1dG9yaWFsLmh0bWwKaW5kZXggZGI5ZjJmYS4uMzU3ODg0
OCAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvc3RvcmFnZS9pbmRleGVkZGIvdHV0b3JpYWwuaHRt
bAorKysgYi9MYXlvdXRUZXN0cy9zdG9yYWdlL2luZGV4ZWRkYi90dXRvcmlhbC5odG1sCkBAIC0x
NTAsMTMgKzE1MCwyNSBAQCBmdW5jdGlvbiBvblNldFZlcnNpb24oKQogICAgIC8vIGEgbnVtYmVy
IGF0dHJpYnV0ZSBhbmQgYXQgbGVhc3Qgb25lIHNpYmxpbmcpLiBZb3UgY2FuIGV2ZW4gZ28gd2ls
ZCBhbmQgc2F5CiAgICAgLy8gImZvb1swXVsyXS5iYXJbMF0uYmF6LnRlc3RbMV1bMl1bM10iLiBJ
dCdzIHBvc3NpYmxlIHRoaXMgd2lsbCBjaGFuZ2UgaW4gdGhlIGZ1dHVyZSB0aG91Z2guCiAgICAg
Ly8KLSAgICAvLyBJZiB5b3Ugc2V0IGF1dG9JbmNyZW1lbnQgKHRoZSB0aGlyZCBvcHRpb25hbCBw
YXJhbWV0ZXIpLCBJbmRleGVkREIgd2lsbCBnZW5lcmF0ZSBhIGtleQorICAgIC8vIElmIHlvdSBz
ZXQgYXV0b0luY3JlbWVudCAoYW5vdGhlciBvcHRpb25hbCBwYXJhbWV0ZXIpLCBJbmRleGVkREIg
d2lsbCBnZW5lcmF0ZSBhIGtleQogICAgIC8vIGZvciB5b3VyIGVudHJ5IGF1dG9tYXRpY2FsbHku
IEFuZCBpZiB5b3UgaGF2ZSBhIGtleVBhdGggc2V0LCBpdCdsbCBzZXQgdGhlIHZhbHVlIGF0CiAg
ICAgLy8gdGhlIGxvY2F0aW9uIG9mIHRoZSBrZXlQYXRoIF9pbiB0aGUgZGF0YWJhc2VfIChpLmUu
IGl0IHdpbGwgbm90IG1vZGlmeSB0aGUgdmFsdWUgeW91IHBhc3MKICAgICAvLyBpbiB0byBwdXQv
YWRkKS4gVW5mb3J0dW5hdGVseSBhdXRvSW5jcmVtZW50IGlzIG5vdCB5ZXQgaW1wbGVtZW50ZWQg
aW4gQ2hyb21pdW0vV2ViS2l0LgogICAgIC8vCisgICAgLy8gQW5vdGhlciBvcHRpb25hbCBwYXJh
bWV0ZXIsICJldmljdGFibGUiIGlzIG5vdCB5ZXQgaW1wbGVtZW50ZWQuIFdoZW4gaXQgaXMsIGl0
J2xsIGhpbnQKKyAgICAvLyB3aGljaCBkYXRhIHNob3VsZCBiZSBkZWxldGVkIGZpcnN0IGlmIHRo
ZSBicm93c2VyIGRlY2lkZXMgdGhpcyBvcmlnaW4gaXMgdXNpbmcgdG9vIG11Y2gKKyAgICAvLyBz
dG9yYWdlLiAoVGhlIGFsdGVybmF0aXZlIGlzIHRoYXQgaXQnbGwgc3VnZ2VzdCB0aGUgdXNlciBk
ZWxldGUgZXZlcnl0aGluZyBmcm9tIHRoZQorICAgIC8vIG9yaWdpbiwgc28gaXQncyBpbiB5b3Vy
IGZhdm9yIHRvIHNldCBpdCBhcHByb3BlcmF0ZWx5ISkgVGhpcyBpcyBncmVhdCBmb3Igd2hlbiB5
b3UgaGF2ZQorICAgIC8vIHNvbWUgYWJzb2x1dGVseSBjcml0aWNhbCBkYXRhIChsaWtlIHVuc2V0
IGVtYWlscykgYW5kIGEgYnVuY2ggb2YgbGVzcyBjcml0aWNhbCwgKGJ1dAorICAgIC8vIG1heWJl
IHN0aWxsIGltcG9ydGFudCEpIGRhdGEuCisgICAgLy8KKyAgICAvLyBBbGwgb2YgdGhlc2Ugb3B0
aW9ucyBjYW4gYmUgcGFzc2VkIGludG8gY3JlYXRlT2JqZWN0U3RvcmUgdmlhIGl0cyAob3B0aW9u
YWwpIHNlY29uZAorICAgIC8vIHBhcmFtZXRlci4gU28sIGlmIHlvdSB3YW50ZWQgdG8gZGVmaW5l
IGFsbCwgWW91J2QgZG8ge2tleVBhdGg6ICJzb21ldGhpbmciLAorICAgIC8vIGV2aWN0YWJsZTog
dHJ1ZSwgYXV0b0luY3JlbWVudDogdHJ1ZX0uIFlvdSBjYW4gYWxzbyBwYXNzIGluIHN1YnNldHMg
b2YgYWxsIHRocmVlIG9yCisgICAgLy8gb21pdCB0aGUgb2JqZWN0IChzaW5jZSBpdCdzIG9wdGlv
bmFsKS4KKyAgICAvLwogICAgIC8vIExldCdzIG5vdyBjcmVhdGUgYW4gb2JqZWN0U3RvcmUgZm9y
IHBlb3BsZS4gV2UnbGwgc3VwcGx5IGEga2V5IHBhdGggaW4gdGhpcyBjYXNlLgotICAgIHZhciBv
YmplY3RTdG9yZSA9IGRiLmNyZWF0ZU9iamVjdFN0b3JlKCJwZW9wbGUiLCAiaWQiKTsKKyAgICB2
YXIgb2JqZWN0U3RvcmUgPSBkYi5jcmVhdGVPYmplY3RTdG9yZSgicGVvcGxlIiwge2tleVBhdGg6
ICJpZCJ9KTsKIAogICAgIC8vIE5vdGljZSB0aGF0IGl0IHJldHVybmVkIHN5bmNocm9ub3VzbHku
IFRoZSBydWxlIG9mIHRodW1iIGlzIHRoYXQgYW55IGNhbGwgdGhhdCB0b3VjaGVzIChpbgogICAg
IC8vIGFueSB3YXkpIGtleXMgb3IgdmFsdWVzIGlzIGFzeW5jaHJvbm91cyBhbmQgYW55IG90aGVy
IGNhbGwgKGJlc2lkZXMgc2V0VmVyc2lvbiBhbmQgb3BlbikgYXJlCmRpZmYgLS1naXQgYS9XZWJD
b3JlL0NoYW5nZUxvZyBiL1dlYkNvcmUvQ2hhbmdlTG9nCmluZGV4IDgyYWViY2UuLjJlZmUzZmYg
MTAwNjQ0Ci0tLSBhL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1dlYkNvcmUvQ2hhbmdlTG9nCkBA
IC0xLDMgKzEsNDggQEAKKzIwMTAtMTEtMjQgIEplcmVteSBPcmxvdyAgPGpvcmxvd0BjaHJvbWl1
bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAg
QWRkIGFuIE9wdGlvbnNPYmplY3QgY2xhc3MgZm9yIEluZGV4ZWREQiAoYW5kIGxhdGVyIEdlb0xv
Y2F0aW9uKQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
NTAwMzAKKworICAgICAgICBHZW9Mb2NhdGlvbiBhbmQgSW5kZXhlZERCIGJvdGggaGF2ZSB0aGUg
Y29uY2VwdCBvZiBhbiBvcHRpb25hbAorICAgICAgICBwYXJhbWV0ZXIgdGhhdCBoYXMgdmFyaW91
cyBvcHRpb25zIHN1cHBsaWVkIHdpdGggaXQuICBJbgorICAgICAgICBHZW9Mb2NhdGlvbiB0aGlz
IHdhcyBkb25lIHdpdGggY3VzdG9tIGJpbmRpbmdzLCBidXQgSSdtIHRyeWluZyB0bworICAgICAg
ICBhdm9pZCB0aGF0IGZvciBJbmRleGVkREIuICAKKworICAgICAgICBUaGlzIGZpcnN0IHBhdGNo
IGltcGxlbWVudHMgaXQgaW4gVjggYW5kIG1ha2VzIGNyZWF0ZU9iamVjdFN0b3JlIHVzZSBpdC4K
KyAgICAgICAgVGhlIG5leHQgcGF0Y2ggd2lsbCBjb3ZlciBHZW9Mb2NhdGlvbiBhbmQgSlNDLgor
CisgICAgICAgIEV4aXN0aW5nIHRlc3QgbW9kaWZpZWQgdG8gY292ZXIgdGhpcyBjaGFuZ2UuCisK
KyAgICAgICAgKiBXZWJDb3JlLmd5cGk6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy9Db2Rl
R2VuZXJhdG9yVjgucG06CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0NQUC9XZWJE
T01UZXN0T2JqLmNwcDoKKyAgICAgICAgKFdlYkRPTVRlc3RPYmo6Om9wdGlvbnNPYmplY3QpOgor
ICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9DUFAvV2ViRE9NVGVzdE9iai5oOgorICAg
ICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9HT2JqZWN0L1dlYktpdERPTVRlc3RDYWxsYmFj
ay5jcHA6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0dPYmplY3QvV2ViS2l0RE9N
VGVzdEludGVyZmFjZS5jcHA6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0dPYmpl
Y3QvV2ViS2l0RE9NVGVzdE1lZGlhUXVlcnlMaXN0TGlzdGVuZXIuY3BwOgorICAgICAgICAqIGJp
bmRpbmdzL3NjcmlwdHMvdGVzdC9HT2JqZWN0L1dlYktpdERPTVRlc3RPYmouY3BwOgorICAgICAg
ICAod2Via2l0X2RvbV90ZXN0X29ial9vcHRpb25zX29iamVjdCk6CisgICAgICAgICogYmluZGlu
Z3Mvc2NyaXB0cy90ZXN0L0dPYmplY3QvV2ViS2l0RE9NVGVzdE9iai5oOgorICAgICAgICAqIGJp
bmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RPYmouY3BwOgorICAgICAgICAoV2ViQ29yZTo6
anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25PcHRpb25zT2JqZWN0KToKKyAgICAgICAgKiBiaW5k
aW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0T2JqLmg6CisgICAgICAgICogYmluZGluZ3Mvc2Ny
aXB0cy90ZXN0L09iakMvRE9NVGVzdE9iai5oOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMv
dGVzdC9PYmpDL0RPTVRlc3RPYmoubW06CisgICAgICAgICgtW0RPTVRlc3RPYmogb3B0aW9uc09i
amVjdDpvb286XSk6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Rlc3RPYmouaWRs
OgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRlc3RNZWRpYVF1ZXJ5TGlz
dExpc3RlbmVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNvbmZpZ3VyZVY4VGVzdE1lZGlhUXVl
cnlMaXN0TGlzdGVuZXJUZW1wbGF0ZSk6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0
L1Y4L1Y4VGVzdE9iai5jcHA6CisgICAgICAgIChXZWJDb3JlOjpUZXN0T2JqSW50ZXJuYWw6Om9w
dGlvbnNPYmplY3RDYWxsYmFjayk6CisgICAgICAgICogc3RvcmFnZS9JREJEYXRhYmFzZS5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpJREJEYXRhYmFzZTo6Y3JlYXRlT2JqZWN0U3RvcmUpOgorICAg
ICAgICAqIHN0b3JhZ2UvSURCRGF0YWJhc2UuaDoKKyAgICAgICAgKFdlYkNvcmU6OklEQkRhdGFi
YXNlOjpjcmVhdGVPYmplY3RTdG9yZSk6CisgICAgICAgICogc3RvcmFnZS9JREJEYXRhYmFzZS5p
ZGw6CisKIDIwMTAtMTEtMjMgIEplcmVteSBPcmxvdyAgPGpvcmxvd0BjaHJvbWl1bS5vcmc+CiAK
ICAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCmRpZmYgLS1naXQgYS9XZWJDb3Jl
L1dlYkNvcmUuZ3lwaSBiL1dlYkNvcmUvV2ViQ29yZS5neXBpCmluZGV4IGNiZjc4MTQuLmViMTNj
YjQgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvV2ViQ29yZS5neXBpCisrKyBiL1dlYkNvcmUvV2ViQ29y
ZS5neXBpCkBAIC03NDQsNiArNzQ0LDggQEAKICAgICAgICAgICAgICdiaW5kaW5ncy92OC9DaGls
ZFRocmVhZERPTURhdGEuaCcsCiAgICAgICAgICAgICAnYmluZGluZ3MvdjgvSURCQmluZGluZ1V0
aWxpdGllcy5jcHAnLAogICAgICAgICAgICAgJ2JpbmRpbmdzL3Y4L0lEQkJpbmRpbmdVdGlsaXRp
ZXMuaCcsCisgICAgICAgICAgICAnYmluZGluZ3MvdjgvT3B0aW9uc09iamVjdC5jcHAnLAorICAg
ICAgICAgICAgJ2JpbmRpbmdzL3Y4L09wdGlvbnNPYmplY3QuaCcsCiAgICAgICAgICAgICAnYmlu
ZGluZ3MvdjgvY3VzdG9tL1Y4Q2FudmFzUGl4ZWxBcnJheUN1c3RvbS5jcHAnLAogICAgICAgICAg
ICAgJ2JpbmRpbmdzL3Y4L2N1c3RvbS9WOEFycmF5QnVmZmVyVmlld0N1c3RvbS5oJywKICAgICAg
ICAgICAgICdiaW5kaW5ncy92OC9jdXN0b20vVjhBcnJheUJ1ZmZlckN1c3RvbS5jcHAnLApkaWZm
IC0tZ2l0IGEvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JWOC5wbSBiL1dl
YkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9yVjgucG0KaW5kZXggN2VhNGM2My4u
MTk2YmE5MiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0
b3JWOC5wbQorKysgYi9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvclY4LnBt
CkBAIC0yODA2LDYgKzI4MDYsNyBAQCBzdWIgR2V0TmF0aXZlVHlwZQogICAgIHJldHVybiAiTm9k
ZSoiIGlmICR0eXBlIGVxICJFdmVudFRhcmdldCIgYW5kICRpc1BhcmFtZXRlcjsKICAgICByZXR1
cm4gImRvdWJsZSIgaWYgJHR5cGUgZXEgIkRhdGUiOwogICAgIHJldHVybiAiU2NyaXB0VmFsdWUi
IGlmICR0eXBlIGVxICJET01PYmplY3QiOworICAgIHJldHVybiAiT3B0aW9uc09iamVjdCIgaWYg
JHR5cGUgZXEgIk9wdGlvbnNPYmplY3QiOwogCiAgICAgcmV0dXJuICJTdHJpbmciIGlmICR0eXBl
IGVxICJET01Vc2VyRGF0YSI7ICAjIEZJWE1FOiBUZW1wb3JhcnkgaGFjaz8KIApAQCAtMjg4OSw2
ICsyODkwLDExIEBAIHN1YiBKU1ZhbHVlVG9OYXRpdmUKICAgICAgICAgcmV0dXJuICJjcmVhdGVJ
REJLZXlGcm9tVmFsdWUoJHZhbHVlKSI7CiAgICAgfQogCisgICAgaWYgKCR0eXBlIGVxICJPcHRp
b25zT2JqZWN0IikgeworICAgICAgICAkaW1wbEluY2x1ZGVzeyJPcHRpb25zT2JqZWN0LmgifSA9
IDE7CisgICAgICAgIHJldHVybiAkdmFsdWU7CisgICAgfQorCiAgICAgaWYgKCR0eXBlIGVxICJE
T01PYmplY3QiKSB7CiAgICAgICAgICRpbXBsSW5jbHVkZXN7IlNjcmlwdFZhbHVlLmgifSA9IDE7
CiAgICAgICAgIHJldHVybiAiU2NyaXB0VmFsdWUoJHZhbHVlKSI7CkBAIC0zMDM0LDYgKzMwNDAs
NyBAQCBteSAlbm9uX3dyYXBwZXJfdHlwZXMgPSAoCiAgICAgJ05vZGVGaWx0ZXInID0+IDEsCiAg
ICAgJ0V2ZW50TGlzdGVuZXInID0+IDEsCiAgICAgJ0lEQktleScgPT4gMSwKKyAgICAnT3B0aW9u
c09iamVjdCcgPT4gMSwKICAgICAnRGF0ZScgPT4gMSwKICAgICAnTWVkaWFRdWVyeUxpc3RMaXN0
ZW5lcicgPT4gMQogKTsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0
L0NQUC9XZWJET01UZXN0T2JqLmNwcCBiL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0NQ
UC9XZWJET01UZXN0T2JqLmNwcAppbmRleCA5YThkOTA5Li44MTljN2NmIDEwMDY0NAotLS0gYS9X
ZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9DUFAvV2ViRE9NVGVzdE9iai5jcHAKKysrIGIv
V2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvQ1BQL1dlYkRPTVRlc3RPYmouY3BwCkBAIC0y
NCw5ICsyNCwxMSBAQAogI2luY2x1ZGUgIkhUTUxOYW1lcy5oIgogI2luY2x1ZGUgIklEQktleS5o
IgogI2luY2x1ZGUgIktVUkwuaCIKKyNpbmNsdWRlICJPcHRpb25zT2JqZWN0LmgiCiAjaW5jbHVk
ZSAiU2VyaWFsaXplZFNjcmlwdFZhbHVlLmgiCiAjaW5jbHVkZSAiVGVzdE9iai5oIgogI2luY2x1
ZGUgIldlYkRPTUlEQktleS5oIgorI2luY2x1ZGUgIldlYkRPTU9wdGlvbnNPYmplY3QuaCIKICNp
bmNsdWRlICJXZWJET01TdHJpbmcuaCIKICNpbmNsdWRlICJXZWJFeGNlcHRpb25IYW5kbGVyLmgi
CiAjaW5jbHVkZSAiV2ViTmF0aXZlRXZlbnRMaXN0ZW5lci5oIgpAQCAtNjYyLDYgKzY2NCwxNCBA
QCB2b2lkIFdlYkRPTVRlc3RPYmo6OmlkYktleShjb25zdCBXZWJET01JREJLZXkmIGtleSkKICAg
ICBpbXBsKCktPmlkYktleSh0b1dlYkNvcmUoa2V5KSk7CiB9CiAKK3ZvaWQgV2ViRE9NVGVzdE9i
ajo6b3B0aW9uc09iamVjdChjb25zdCBXZWJET01PcHRpb25zT2JqZWN0JiBvbywgY29uc3QgV2Vi
RE9NT3B0aW9uc09iamVjdCYgb29vKQoreworICAgIGlmICghaW1wbCgpKQorICAgICAgICByZXR1
cm47CisKKyAgICBpbXBsKCktPm9wdGlvbnNPYmplY3QodG9XZWJDb3JlKG9vKSwgdG9XZWJDb3Jl
KG9vbykpOworfQorCiB2b2lkIFdlYkRPTVRlc3RPYmo6Om1ldGhvZFdpdGhFeGNlcHRpb24oKQog
ewogICAgIGlmICghaW1wbCgpKQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRz
L3Rlc3QvQ1BQL1dlYkRPTVRlc3RPYmouaCBiL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0
L0NQUC9XZWJET01UZXN0T2JqLmgKaW5kZXggZjI5YjdkYy4uMGIzNTkzZCAxMDA2NDQKLS0tIGEv
V2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvQ1BQL1dlYkRPTVRlc3RPYmouaAorKysgYi9X
ZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9DUFAvV2ViRE9NVGVzdE9iai5oCkBAIC0zMiw2
ICszMiw3IEBAIGNsYXNzIFRlc3RPYmo7CiAKIGNsYXNzIFdlYkRPTUV2ZW50TGlzdGVuZXI7CiBj
bGFzcyBXZWJET01JREJLZXk7CitjbGFzcyBXZWJET01PcHRpb25zT2JqZWN0OwogY2xhc3MgV2Vi
RE9NU3RyaW5nOwogY2xhc3MgV2ViRE9NVGVzdE9iajsKIApAQCAtMTM2LDYgKzEzNyw3IEBAIHB1
YmxpYzoKICAgICBXZWJET01UZXN0T2JqIG1ldGhvZFRoYXRSZXF1aXJlc0FsbEFyZ3NBbmRUaHJv
d3MoY29uc3QgV2ViRE9NU3RyaW5nJiBzdHJBcmcsIGNvbnN0IFdlYkRPTVRlc3RPYmomIG9iakFy
Zyk7CiAgICAgdm9pZCBzZXJpYWxpemVkVmFsdWUoY29uc3QgV2ViRE9NU3RyaW5nJiBzZXJpYWxp
emVkQXJnKTsKICAgICB2b2lkIGlkYktleShjb25zdCBXZWJET01JREJLZXkmIGtleSk7CisgICAg
dm9pZCBvcHRpb25zT2JqZWN0KGNvbnN0IFdlYkRPTU9wdGlvbnNPYmplY3QmIG9vLCBjb25zdCBX
ZWJET01PcHRpb25zT2JqZWN0JiBvb28pOwogICAgIHZvaWQgbWV0aG9kV2l0aEV4Y2VwdGlvbigp
OwogICAgIHZvaWQgY3VzdG9tTWV0aG9kKCk7CiAgICAgdm9pZCBjdXN0b21NZXRob2RXaXRoQXJn
cyhpbnQgaW50QXJnLCBjb25zdCBXZWJET01TdHJpbmcmIHN0ckFyZywgY29uc3QgV2ViRE9NVGVz
dE9iaiYgb2JqQXJnKTsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0
L0dPYmplY3QvV2ViS2l0RE9NVGVzdENhbGxiYWNrLmNwcCBiL1dlYkNvcmUvYmluZGluZ3Mvc2Ny
aXB0cy90ZXN0L0dPYmplY3QvV2ViS2l0RE9NVGVzdENhbGxiYWNrLmNwcAppbmRleCAxOWZmMTY2
Li41NTRjYzE1IDEwMDY0NAotLS0gYS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9HT2Jq
ZWN0L1dlYktpdERPTVRlc3RDYWxsYmFjay5jcHAKKysrIGIvV2ViQ29yZS9iaW5kaW5ncy9zY3Jp
cHRzL3Rlc3QvR09iamVjdC9XZWJLaXRET01UZXN0Q2FsbGJhY2suY3BwCkBAIC0yNSw2ICsyNSw3
IEBACiAKICNpbmNsdWRlIDx3dGYvR2V0UHRyLmg+CiAjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgor
I2luY2x1ZGUgIkRPTU9iamVjdENhY2hlLmgiCiAjaW5jbHVkZSAiRXhjZXB0aW9uQ29kZS5oIgog
I2luY2x1ZGUgIkpTTWFpblRocmVhZEV4ZWNTdGF0ZS5oIgogI2luY2x1ZGUgIlRlc3RDYWxsYmFj
ay5oIgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvR09iamVjdC9X
ZWJLaXRET01UZXN0SW50ZXJmYWNlLmNwcCBiL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0
L0dPYmplY3QvV2ViS2l0RE9NVGVzdEludGVyZmFjZS5jcHAKaW5kZXggYTEzZGE0NS4uNmM5MDZl
NCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvR09iamVjdC9XZWJL
aXRET01UZXN0SW50ZXJmYWNlLmNwcAorKysgYi9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVz
dC9HT2JqZWN0L1dlYktpdERPTVRlc3RJbnRlcmZhY2UuY3BwCkBAIC0yNSw2ICsyNSw3IEBACiAK
ICNpbmNsdWRlIDx3dGYvR2V0UHRyLmg+CiAjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgorI2luY2x1
ZGUgIkRPTU9iamVjdENhY2hlLmgiCiAjaW5jbHVkZSAiRXhjZXB0aW9uQ29kZS5oIgogI2luY2x1
ZGUgIkpTTWFpblRocmVhZEV4ZWNTdGF0ZS5oIgogI2luY2x1ZGUgIlRlc3RJbnRlcmZhY2UuaCIK
ZGlmZiAtLWdpdCBhL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0dPYmplY3QvV2ViS2l0
RE9NVGVzdE1lZGlhUXVlcnlMaXN0TGlzdGVuZXIuY3BwIGIvV2ViQ29yZS9iaW5kaW5ncy9zY3Jp
cHRzL3Rlc3QvR09iamVjdC9XZWJLaXRET01UZXN0TWVkaWFRdWVyeUxpc3RMaXN0ZW5lci5jcHAK
aW5kZXggZjVkZWQ3OS4uYTdkMzY0YyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9iaW5kaW5ncy9zY3Jp
cHRzL3Rlc3QvR09iamVjdC9XZWJLaXRET01UZXN0TWVkaWFRdWVyeUxpc3RMaXN0ZW5lci5jcHAK
KysrIGIvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvR09iamVjdC9XZWJLaXRET01UZXN0
TWVkaWFRdWVyeUxpc3RMaXN0ZW5lci5jcHAKQEAgLTIzLDYgKzIzLDcgQEAKIAogI2luY2x1ZGUg
PHd0Zi9HZXRQdHIuaD4KICNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CisjaW5jbHVkZSAiRE9NT2Jq
ZWN0Q2FjaGUuaCIKICNpbmNsdWRlICJFeGNlcHRpb25Db2RlLmgiCiAjaW5jbHVkZSAiSlNNYWlu
VGhyZWFkRXhlY1N0YXRlLmgiCiAjaW5jbHVkZSAiVGVzdE1lZGlhUXVlcnlMaXN0TGlzdGVuZXIu
aCIKZGlmZiAtLWdpdCBhL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0dPYmplY3QvV2Vi
S2l0RE9NVGVzdE9iai5jcHAgYi9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9HT2JqZWN0
L1dlYktpdERPTVRlc3RPYmouY3BwCmluZGV4IDFiZjk5ODMuLmVjMmM2ZGMgMTAwNjQ0Ci0tLSBh
L1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0dPYmplY3QvV2ViS2l0RE9NVGVzdE9iai5j
cHAKKysrIGIvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvR09iamVjdC9XZWJLaXRET01U
ZXN0T2JqLmNwcApAQCAtMjMsNiArMjMsNyBAQAogCiAjaW5jbHVkZSA8d3RmL0dldFB0ci5oPgog
I2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KKyNpbmNsdWRlICJET01PYmplY3RDYWNoZS5oIgogI2lu
Y2x1ZGUgIkV4Y2VwdGlvbkNvZGUuaCIKICNpbmNsdWRlICJIVE1MTmFtZXMuaCIKICNpbmNsdWRl
ICJKU01haW5UaHJlYWRFeGVjU3RhdGUuaCIKQEAgLTMxLDYgKzMyLDggQEAKICNpbmNsdWRlICJn
b2JqZWN0L0NvbnZlcnRUb1VURjhTdHJpbmcuaCIKICNpbmNsdWRlICJ3ZWJraXQvV2ViS2l0RE9N
SURCS2V5LmgiCiAjaW5jbHVkZSAid2Via2l0L1dlYktpdERPTUlEQktleVByaXZhdGUuaCIKKyNp
bmNsdWRlICJ3ZWJraXQvV2ViS2l0RE9NT3B0aW9uc09iamVjdC5oIgorI2luY2x1ZGUgIndlYmtp
dC9XZWJLaXRET01PcHRpb25zT2JqZWN0UHJpdmF0ZS5oIgogI2luY2x1ZGUgIndlYmtpdC9XZWJL
aXRET01TZXJpYWxpemVkU2NyaXB0VmFsdWUuaCIKICNpbmNsdWRlICJ3ZWJraXQvV2ViS2l0RE9N
U2VyaWFsaXplZFNjcmlwdFZhbHVlUHJpdmF0ZS5oIgogI2luY2x1ZGUgIndlYmtpdC9XZWJLaXRE
T01UZXN0T2JqLmgiCkBAIC0yMTEsNiArMjE0LDI3IEBAIHdlYmtpdF9kb21fdGVzdF9vYmpfaWRi
X2tleShXZWJLaXRET01UZXN0T2JqKiBzZWxmLCBXZWJLaXRET01JREJLZXkqIGtleSkKIH0KIAog
dm9pZAord2Via2l0X2RvbV90ZXN0X29ial9vcHRpb25zX29iamVjdChXZWJLaXRET01UZXN0T2Jq
KiBzZWxmLCBXZWJLaXRET01PcHRpb25zT2JqZWN0KiBvbywgV2ViS2l0RE9NT3B0aW9uc09iamVj
dCogb29vKQoreworICAgIGdfcmV0dXJuX2lmX2ZhaWwoc2VsZik7CisgICAgV2ViQ29yZTo6SlNN
YWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIFdlYkNvcmU6OlRlc3RPYmogKiBpdGVtID0g
V2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGdfcmV0dXJuX2lmX2ZhaWwob28pOworICAgIGdfcmV0
dXJuX2lmX2ZhaWwob29vKTsKKyAgICBXZWJDb3JlOjpPcHRpb25zT2JqZWN0ICogY29udmVydGVk
X29vID0gTlVMTDsKKyAgICBpZiAob28gIT0gTlVMTCkgeworICAgICAgICBjb252ZXJ0ZWRfb28g
PSBXZWJLaXQ6OmNvcmUob28pOworICAgICAgICBnX3JldHVybl9pZl9mYWlsKGNvbnZlcnRlZF9v
byk7CisgICAgfQorICAgIFdlYkNvcmU6Ok9wdGlvbnNPYmplY3QgKiBjb252ZXJ0ZWRfb29vID0g
TlVMTDsKKyAgICBpZiAob29vICE9IE5VTEwpIHsKKyAgICAgICAgY29udmVydGVkX29vbyA9IFdl
YktpdDo6Y29yZShvb28pOworICAgICAgICBnX3JldHVybl9pZl9mYWlsKGNvbnZlcnRlZF9vb28p
OworICAgIH0KKyAgICBpdGVtLT5vcHRpb25zT2JqZWN0KGNvbnZlcnRlZF9vbywgY29udmVydGVk
X29vbyk7Cit9CisKK3ZvaWQKIHdlYmtpdF9kb21fdGVzdF9vYmpfbWV0aG9kX3dpdGhfZXhjZXB0
aW9uKFdlYktpdERPTVRlc3RPYmoqIHNlbGYsIEdFcnJvciAqKmVycm9yKQogewogICAgIGdfcmV0
dXJuX2lmX2ZhaWwoc2VsZik7CmRpZmYgLS1naXQgYS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMv
dGVzdC9HT2JqZWN0L1dlYktpdERPTVRlc3RPYmouaCBiL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0
cy90ZXN0L0dPYmplY3QvV2ViS2l0RE9NVGVzdE9iai5oCmluZGV4IDJlZWJkYjEuLjQyZDFmY2Qg
MTAwNjQ0Ci0tLSBhL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0dPYmplY3QvV2ViS2l0
RE9NVGVzdE9iai5oCisrKyBiL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0dPYmplY3Qv
V2ViS2l0RE9NVGVzdE9iai5oCkBAIC03Nyw2ICs3Nyw5IEBAIFdFQktJVF9BUEkgdm9pZAogd2Vi
a2l0X2RvbV90ZXN0X29ial9pZGJfa2V5KFdlYktpdERPTVRlc3RPYmoqIHNlbGYsIFdlYktpdERP
TUlEQktleSoga2V5KTsKIAogV0VCS0lUX0FQSSB2b2lkCit3ZWJraXRfZG9tX3Rlc3Rfb2JqX29w
dGlvbnNfb2JqZWN0KFdlYktpdERPTVRlc3RPYmoqIHNlbGYsIFdlYktpdERPTU9wdGlvbnNPYmpl
Y3QqIG9vLCBXZWJLaXRET01PcHRpb25zT2JqZWN0KiBvb28pOworCitXRUJLSVRfQVBJIHZvaWQK
IHdlYmtpdF9kb21fdGVzdF9vYmpfbWV0aG9kX3dpdGhfZXhjZXB0aW9uKFdlYktpdERPTVRlc3RP
YmoqIHNlbGYsIEdFcnJvciAqKmVycm9yKTsKIAogCmRpZmYgLS1naXQgYS9XZWJDb3JlL2JpbmRp
bmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RPYmouY3BwIGIvV2ViQ29yZS9iaW5kaW5ncy9zY3Jp
cHRzL3Rlc3QvSlMvSlNUZXN0T2JqLmNwcAppbmRleCA5ODIwZmFiLi5kOGJmNjdlIDEwMDY0NAot
LS0gYS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RPYmouY3BwCisrKyBi
L1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE9iai5jcHAKQEAgLTI3LDYg
KzI3LDcgQEAKICNpbmNsdWRlICJJREJLZXkuaCIKICNpbmNsdWRlICJKU0RPTUJpbmRpbmcuaCIK
ICNpbmNsdWRlICJKU0V2ZW50TGlzdGVuZXIuaCIKKyNpbmNsdWRlICJKU09wdGlvbnNPYmplY3Qu
aCIKICNpbmNsdWRlICJKU1Rlc3RDYWxsYmFjay5oIgogI2luY2x1ZGUgIkpTVGVzdE9iai5oIgog
I2luY2x1ZGUgIkpTbG9nLmgiCkBAIC0xODEsNyArMTgyLDcgQEAgYm9vbCBKU1Rlc3RPYmpDb25z
dHJ1Y3Rvcjo6Z2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKEV4ZWNTdGF0ZSogZXhlYywgY29uc3Qg
SWRlbnQKICNkZWZpbmUgVEhVTktfR0VORVJBVE9SKGdlbmVyYXRvcikKICNlbmRpZgogCi1zdGF0
aWMgY29uc3QgSGFzaFRhYmxlVmFsdWUgSlNUZXN0T2JqUHJvdG90eXBlVGFibGVWYWx1ZXNbNDdd
ID0KK3N0YXRpYyBjb25zdCBIYXNoVGFibGVWYWx1ZSBKU1Rlc3RPYmpQcm90b3R5cGVUYWJsZVZh
bHVlc1s0OF0gPQogewogICAgIHsgIkNPTlNUX1ZBTFVFXzAiLCBEb250RGVsZXRlIHwgUmVhZE9u
bHksIChpbnRwdHJfdClzdGF0aWNfY2FzdDxQcm9wZXJ0eVNsb3Q6OkdldFZhbHVlRnVuYz4oanNU
ZXN0T2JqQ09OU1RfVkFMVUVfMCksIChpbnRwdHJfdCkwIFRIVU5LX0dFTkVSQVRPUigwKSB9LAog
ICAgIHsgIkNPTlNUX1ZBTFVFXzEiLCBEb250RGVsZXRlIHwgUmVhZE9ubHksIChpbnRwdHJfdClz
dGF0aWNfY2FzdDxQcm9wZXJ0eVNsb3Q6OkdldFZhbHVlRnVuYz4oanNUZXN0T2JqQ09OU1RfVkFM
VUVfMSksIChpbnRwdHJfdCkwIFRIVU5LX0dFTkVSQVRPUigwKSB9LApAQCAtMjA0LDYgKzIwNSw3
IEBAIHN0YXRpYyBjb25zdCBIYXNoVGFibGVWYWx1ZSBKU1Rlc3RPYmpQcm90b3R5cGVUYWJsZVZh
bHVlc1s0N10gPQogICAgIHsgIm1ldGhvZFRoYXRSZXF1aXJlc0FsbEFyZ3NBbmRUaHJvd3MiLCBE
b250RGVsZXRlIHwgRnVuY3Rpb24sIChpbnRwdHJfdClzdGF0aWNfY2FzdDxOYXRpdmVGdW5jdGlv
bj4oanNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RUaGF0UmVxdWlyZXNBbGxBcmdzQW5k
VGhyb3dzKSwgKGludHB0cl90KTIgVEhVTktfR0VORVJBVE9SKDApIH0sCiAgICAgeyAic2VyaWFs
aXplZFZhbHVlIiwgRG9udERlbGV0ZSB8IEZ1bmN0aW9uLCAoaW50cHRyX3Qpc3RhdGljX2Nhc3Q8
TmF0aXZlRnVuY3Rpb24+KGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uU2VyaWFsaXplZFZhbHVl
KSwgKGludHB0cl90KTEgVEhVTktfR0VORVJBVE9SKDApIH0sCiAgICAgeyAiaWRiS2V5IiwgRG9u
dERlbGV0ZSB8IEZ1bmN0aW9uLCAoaW50cHRyX3Qpc3RhdGljX2Nhc3Q8TmF0aXZlRnVuY3Rpb24+
KGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uSWRiS2V5KSwgKGludHB0cl90KTEgVEhVTktfR0VO
RVJBVE9SKDApIH0sCisgICAgeyAib3B0aW9uc09iamVjdCIsIERvbnREZWxldGUgfCBGdW5jdGlv
biwgKGludHB0cl90KXN0YXRpY19jYXN0PE5hdGl2ZUZ1bmN0aW9uPihqc1Rlc3RPYmpQcm90b3R5
cGVGdW5jdGlvbk9wdGlvbnNPYmplY3QpLCAoaW50cHRyX3QpMiBUSFVOS19HRU5FUkFUT1IoMCkg
fSwKICAgICB7ICJtZXRob2RXaXRoRXhjZXB0aW9uIiwgRG9udERlbGV0ZSB8IEZ1bmN0aW9uLCAo
aW50cHRyX3Qpc3RhdGljX2Nhc3Q8TmF0aXZlRnVuY3Rpb24+KGpzVGVzdE9ialByb3RvdHlwZUZ1
bmN0aW9uTWV0aG9kV2l0aEV4Y2VwdGlvbiksIChpbnRwdHJfdCkwIFRIVU5LX0dFTkVSQVRPUigw
KSB9LAogICAgIHsgImN1c3RvbU1ldGhvZCIsIERvbnREZWxldGUgfCBGdW5jdGlvbiwgKGludHB0
cl90KXN0YXRpY19jYXN0PE5hdGl2ZUZ1bmN0aW9uPihqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlv
bkN1c3RvbU1ldGhvZCksIChpbnRwdHJfdCkwIFRIVU5LX0dFTkVSQVRPUigwKSB9LAogICAgIHsg
ImN1c3RvbU1ldGhvZFdpdGhBcmdzIiwgRG9udERlbGV0ZSB8IEZ1bmN0aW9uLCAoaW50cHRyX3Qp
c3RhdGljX2Nhc3Q8TmF0aXZlRnVuY3Rpb24+KGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uQ3Vz
dG9tTWV0aG9kV2l0aEFyZ3MpLCAoaW50cHRyX3QpMyBUSFVOS19HRU5FUkFUT1IoMCkgfSwKQEAg
LTIzMyw3ICsyMzUsNyBAQCBzdGF0aWMgY29uc3QgSGFzaFRhYmxlVmFsdWUgSlNUZXN0T2JqUHJv
dG90eXBlVGFibGVWYWx1ZXNbNDddID0KIH07CiAKICN1bmRlZiBUSFVOS19HRU5FUkFUT1IKLXN0
YXRpYyBKU0NfQ09OU1RfSEFTSFRBQkxFIEhhc2hUYWJsZSBKU1Rlc3RPYmpQcm90b3R5cGVUYWJs
ZSA9IHsgMTM1LCAxMjcsIEpTVGVzdE9ialByb3RvdHlwZVRhYmxlVmFsdWVzLCAwIH07CitzdGF0
aWMgSlNDX0NPTlNUX0hBU0hUQUJMRSBIYXNoVGFibGUgSlNUZXN0T2JqUHJvdG90eXBlVGFibGUg
PSB7IDEzNiwgMTI3LCBKU1Rlc3RPYmpQcm90b3R5cGVUYWJsZVZhbHVlcywgMCB9OwogY29uc3Qg
Q2xhc3NJbmZvIEpTVGVzdE9ialByb3RvdHlwZTo6c19pbmZvID0geyAiVGVzdE9ialByb3RvdHlw
ZSIsIDAsICZKU1Rlc3RPYmpQcm90b3R5cGVUYWJsZSwgMCB9OwogCiBKU09iamVjdCogSlNUZXN0
T2JqUHJvdG90eXBlOjpzZWxmKEV4ZWNTdGF0ZSogZXhlYywgSlNHbG9iYWxPYmplY3QqIGdsb2Jh
bE9iamVjdCkKQEAgLTk5MCw2ICs5OTIsMzEgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FM
TCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbklkYktleShFeGVjU3RhdGUqIGV4ZWMpCiAgICAg
cmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKIH0KIAorRW5jb2RlZEpTVmFs
dWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk9wdGlvbnNPYmplY3Qo
RXhlY1N0YXRlKiBleGVjKQoreworICAgIEpTVmFsdWUgdGhpc1ZhbHVlID0gZXhlYy0+aG9zdFRo
aXNWYWx1ZSgpOworICAgIGlmICghdGhpc1ZhbHVlLmluaGVyaXRzKCZKU1Rlc3RPYmo6OnNfaW5m
bykpCisgICAgICAgIHJldHVybiB0aHJvd1ZNVHlwZUVycm9yKGV4ZWMpOworICAgIEpTVGVzdE9i
aiogY2FzdGVkVGhpcyA9IHN0YXRpY19jYXN0PEpTVGVzdE9iaio+KGFzT2JqZWN0KHRoaXNWYWx1
ZSkpOworICAgIFRlc3RPYmoqIGltcCA9IHN0YXRpY19jYXN0PFRlc3RPYmoqPihjYXN0ZWRUaGlz
LT5pbXBsKCkpOworICAgIE9wdGlvbnNPYmplY3QqIG9vID0gdG9PcHRpb25zT2JqZWN0KGV4ZWMt
PmFyZ3VtZW50KDApKTsKKyAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgICAgIHJl
dHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CisKKyAgICBpbnQgYXJnc0NvdW50
ID0gZXhlYy0+YXJndW1lbnRDb3VudCgpOworICAgIGlmIChhcmdzQ291bnQgPD0gMSkgeworICAg
ICAgICBpbXAtPm9wdGlvbnNPYmplY3Qob28pOworICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5j
b2RlKGpzVW5kZWZpbmVkKCkpOworICAgIH0KKworICAgIE9wdGlvbnNPYmplY3QqIG9vbyA9IHRv
T3B0aW9uc09iamVjdChleGVjLT5hcmd1bWVudCgxKSk7CisgICAgaWYgKGV4ZWMtPmhhZEV4Y2Vw
dGlvbigpKQorICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwor
CisgICAgaW1wLT5vcHRpb25zT2JqZWN0KG9vLCBvb28pOworICAgIHJldHVybiBKU1ZhbHVlOjpl
bmNvZGUoanNVbmRlZmluZWQoKSk7Cit9CisKIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwg
anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoRXhjZXB0aW9uKEV4ZWNTdGF0ZSog
ZXhlYykKIHsKICAgICBKU1ZhbHVlIHRoaXNWYWx1ZSA9IGV4ZWMtPmhvc3RUaGlzVmFsdWUoKTsK
ZGlmZiAtLWdpdCBhL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE9iai5o
IGIvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0T2JqLmgKaW5kZXggNjAx
NGY3YS4uYzI3NDQ0YSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3Qv
SlMvSlNUZXN0T2JqLmgKKysrIGIvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNU
ZXN0T2JqLmgKQEAgLTk2LDYgKzk2LDcgQEAgSlNDOjpFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9D
QUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kVGhhdFJlcXVpcmVzQWwKIEpTQzo6
RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1l
dGhvZFRoYXRSZXF1aXJlc0FsbEFyZ3NBbmRUaHJvd3MoSlNDOjpFeGVjU3RhdGUqKTsKIEpTQzo6
RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvblNl
cmlhbGl6ZWRWYWx1ZShKU0M6OkV4ZWNTdGF0ZSopOwogSlNDOjpFbmNvZGVkSlNWYWx1ZSBKU0Nf
SE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uSWRiS2V5KEpTQzo6RXhlY1N0YXRl
Kik7CitKU0M6OkVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBl
RnVuY3Rpb25PcHRpb25zT2JqZWN0KEpTQzo6RXhlY1N0YXRlKik7CiBKU0M6OkVuY29kZWRKU1Zh
bHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoRXhj
ZXB0aW9uKEpTQzo6RXhlY1N0YXRlKik7CiBKU0M6OkVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NB
TEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25DdXN0b21NZXRob2QoSlNDOjpFeGVjU3RhdGUq
KTsKIEpTQzo6RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVG
dW5jdGlvbkN1c3RvbU1ldGhvZFdpdGhBcmdzKEpTQzo6RXhlY1N0YXRlKik7CmRpZmYgLS1naXQg
YS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9PYmpDL0RPTVRlc3RPYmouaCBiL1dlYkNv
cmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L09iakMvRE9NVGVzdE9iai5oCmluZGV4IGZkNDAwOTUu
Ljc2NmQzMWYgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L09iakMv
RE9NVGVzdE9iai5oCisrKyBiL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L09iakMvRE9N
VGVzdE9iai5oCkBAIC0yOSw2ICsyOSw3IEBACiAjaWYgV0VCS0lUX1ZFUlNJT05fTUFYX0FMTE9X
RUQgPj0gV0VCS0lUX1ZFUlNJT05fTEFURVNUCiAKIEBjbGFzcyBET01JREJLZXk7CitAY2xhc3Mg
RE9NT3B0aW9uc09iamVjdDsKIEBjbGFzcyBET01UZXN0T2JqOwogQGNsYXNzIERPTWxvZzsKIEBj
bGFzcyBOU1N0cmluZzsKQEAgLTEyNyw2ICsxMjgsNyBAQCBlbnVtIHsKIC0gKERPTVRlc3RPYmog
KiltZXRob2RUaGF0UmVxdWlyZXNBbGxBcmdzQW5kVGhyb3dzOihOU1N0cmluZyAqKXN0ckFyZyBv
YmpBcmc6KERPTVRlc3RPYmogKilvYmpBcmc7CiAtICh2b2lkKXNlcmlhbGl6ZWRWYWx1ZTooTlNT
dHJpbmcgKilzZXJpYWxpemVkQXJnOwogLSAodm9pZClpZGJLZXk6KERPTUlEQktleSAqKWtleTsK
Ky0gKHZvaWQpb3B0aW9uc09iamVjdDooRE9NT3B0aW9uc09iamVjdCAqKW9vIG9vbzooRE9NT3B0
aW9uc09iamVjdCAqKW9vbzsKIC0gKHZvaWQpbWV0aG9kV2l0aEV4Y2VwdGlvbjsKIC0gKHZvaWQp
Y3VzdG9tTWV0aG9kOwogLSAodm9pZCljdXN0b21NZXRob2RXaXRoQXJnczooaW50KWludEFyZyBz
dHJBcmc6KE5TU3RyaW5nICopc3RyQXJnIG9iakFyZzooRE9NVGVzdE9iaiAqKW9iakFyZzsKZGlm
ZiAtLWdpdCBhL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L09iakMvRE9NVGVzdE9iai5t
bSBiL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L09iakMvRE9NVGVzdE9iai5tbQppbmRl
eCA2MTI1OTdmLi5hYzA0MjM1IDEwMDY0NAotLS0gYS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMv
dGVzdC9PYmpDL0RPTVRlc3RPYmoubW0KKysrIGIvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rl
c3QvT2JqQy9ET01UZXN0T2JqLm1tCkBAIC0zNSw2ICszNSw3IEBACiAjaW1wb3J0ICJET01FdmVu
dEludGVybmFsLmgiCiAjaW1wb3J0ICJET01JREJLZXlJbnRlcm5hbC5oIgogI2ltcG9ydCAiRE9N
Tm9kZUludGVybmFsLmgiCisjaW1wb3J0ICJET01PcHRpb25zT2JqZWN0SW50ZXJuYWwuaCIKICNp
bXBvcnQgIkRPTVN0eWxlU2hlZXRJbnRlcm5hbC5oIgogI2ltcG9ydCAiRE9NVGVzdE9iakludGVy
bmFsLmgiCiAjaW1wb3J0ICJET01sb2dJbnRlcm5hbC5oIgpAQCAtNDUsNiArNDYsNyBAQAogI2lt
cG9ydCAiSlNNYWluVGhyZWFkRXhlY1N0YXRlLmgiCiAjaW1wb3J0ICJLVVJMLmgiCiAjaW1wb3J0
ICJPYmpDRXZlbnRMaXN0ZW5lci5oIgorI2ltcG9ydCAiT3B0aW9uc09iamVjdC5oIgogI2ltcG9y
dCAiU2VyaWFsaXplZFNjcmlwdFZhbHVlLmgiCiAjaW1wb3J0ICJUZXN0T2JqLmgiCiAjaW1wb3J0
ICJUaHJlYWRDaGVjay5oIgpAQCAtNTMzLDYgKzUzNSwxMiBAQAogICAgIElNUEwtPmlkYktleShj
b3JlKGtleSkpOwogfQogCistICh2b2lkKW9wdGlvbnNPYmplY3Q6KERPTU9wdGlvbnNPYmplY3Qg
KilvbyBvb286KERPTU9wdGlvbnNPYmplY3QgKilvb28KK3sKKyAgICBXZWJDb3JlOjpKU01haW5U
aHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgSU1QTC0+b3B0aW9uc09iamVjdChjb3JlKG9vKSwg
Y29yZShvb28pKTsKK30KKwogLSAodm9pZCltZXRob2RXaXRoRXhjZXB0aW9uCiB7CiAgICAgV2Vi
Q29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9i
aW5kaW5ncy9zY3JpcHRzL3Rlc3QvVGVzdE9iai5pZGwgYi9XZWJDb3JlL2JpbmRpbmdzL3Njcmlw
dHMvdGVzdC9UZXN0T2JqLmlkbAppbmRleCA1Mzc1MzRiLi5jMGQwZTg4IDEwMDY0NAotLS0gYS9X
ZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9UZXN0T2JqLmlkbAorKysgYi9XZWJDb3JlL2Jp
bmRpbmdzL3NjcmlwdHMvdGVzdC9UZXN0T2JqLmlkbApAQCAtNzQsNiArNzQsNyBAQCBtb2R1bGUg
dGVzdCB7CiAKICAgICAgICAgdm9pZCBzZXJpYWxpemVkVmFsdWUoaW4gU2VyaWFsaXplZFNjcmlw
dFZhbHVlIHNlcmlhbGl6ZWRBcmcpOwogICAgICAgICB2b2lkIGlkYktleShpbiBJREJLZXkga2V5
KTsKKyAgICAgICAgdm9pZCBvcHRpb25zT2JqZWN0KGluIE9wdGlvbnNPYmplY3Qgb28sIGluIFtP
cHRpb25hbF0gT3B0aW9uc09iamVjdCBvb28pOwogCiAgICAgICAgIC8vIEV4Y2VwdGlvbnMKICAg
ICAgICAgdm9pZCBtZXRob2RXaXRoRXhjZXB0aW9uKCkgcmFpc2VzKERPTUV4Y2VwdGlvbik7CmRp
ZmYgLS1naXQgYS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRlc3RNZWRpYVF1
ZXJ5TGlzdExpc3RlbmVyLmNwcCBiL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4
VGVzdE1lZGlhUXVlcnlMaXN0TGlzdGVuZXIuY3BwCmluZGV4IGYxYzRlMmIuLmFiOWU2ZGIgMTAw
NjQ0Ci0tLSBhL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdE1lZGlhUXVl
cnlMaXN0TGlzdGVuZXIuY3BwCisrKyBiL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4
L1Y4VGVzdE1lZGlhUXVlcnlMaXN0TGlzdGVuZXIuY3BwCkBAIC01Nyw3ICs1Nyw3IEBAIHN0YXRp
YyB2ODo6UGVyc2lzdGVudDx2ODo6RnVuY3Rpb25UZW1wbGF0ZT4gQ29uZmlndXJlVjhUZXN0TWVk
aWFRdWVyeUxpc3RMaXN0ZW5lCiB7CiAgICAgdjg6OkxvY2FsPHY4OjpTaWduYXR1cmU+IGRlZmF1
bHRTaWduYXR1cmUgPSBjb25maWd1cmVUZW1wbGF0ZShkZXNjLCAiVGVzdE1lZGlhUXVlcnlMaXN0
TGlzdGVuZXIiLCB2ODo6UGVyc2lzdGVudDx2ODo6RnVuY3Rpb25UZW1wbGF0ZT4oKSwgVjhUZXN0
TWVkaWFRdWVyeUxpc3RMaXN0ZW5lcjo6aW50ZXJuYWxGaWVsZENvdW50LAogICAgICAgICAwLCAw
LAotICAgICAgICBUZXN0TWVkaWFRdWVyeUxpc3RMaXN0ZW5lckNhbGxiYWNrcywgc2l6ZW9mKFRl
c3RNZWRpYVF1ZXJ5TGlzdExpc3RlbmVyQ2FsbGJhY2tzKSAvIHNpemVvZigqVGVzdE1lZGlhUXVl
cnlMaXN0TGlzdGVuZXJDYWxsYmFja3MpKTsKKyAgICAgICAgVGVzdE1lZGlhUXVlcnlMaXN0TGlz
dGVuZXJDYWxsYmFja3MsIFdURl9BUlJBWV9MRU5HVEgoVGVzdE1lZGlhUXVlcnlMaXN0TGlzdGVu
ZXJDYWxsYmFja3MpKTsKICAgICB2ODo6TG9jYWw8djg6Ok9iamVjdFRlbXBsYXRlPiBpbnN0YW5j
ZSA9IGRlc2MtPkluc3RhbmNlVGVtcGxhdGUoKTsKICAgICB2ODo6TG9jYWw8djg6Ok9iamVjdFRl
bXBsYXRlPiBwcm90byA9IGRlc2MtPlByb3RvdHlwZVRlbXBsYXRlKCk7CiAgICAgCmRpZmYgLS1n
aXQgYS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRlc3RPYmouY3BwIGIvV2Vi
Q29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0T2JqLmNwcAppbmRleCBjNGE3NmFj
Li5lMDZkM2YyIDEwMDY0NAotLS0gYS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9W
OFRlc3RPYmouY3BwCisrKyBiL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVz
dE9iai5jcHAKQEAgLTI1LDYgKzI1LDcgQEAKICNpbmNsdWRlICJIVE1MTmFtZXMuaCIKICNpbmNs
dWRlICJJREJCaW5kaW5nVXRpbGl0aWVzLmgiCiAjaW5jbHVkZSAiSURCS2V5LmgiCisjaW5jbHVk
ZSAiT3B0aW9uc09iamVjdC5oIgogI2luY2x1ZGUgIlJ1bnRpbWVFbmFibGVkRmVhdHVyZXMuaCIK
ICNpbmNsdWRlICJTY3JpcHRBcmd1bWVudHMuaCIKICNpbmNsdWRlICJTY3JpcHRDYWxsU3RhY2su
aCIKQEAgLTcyNyw2ICs3MjgsMjAgQEAgc3RhdGljIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBpZGJL
ZXlDYWxsYmFjayhjb25zdCB2ODo6QXJndW1lbnRzJiBhcmdzKQogICAgIHJldHVybiB2ODo6SGFu
ZGxlPHY4OjpWYWx1ZT4oKTsKIH0KIAorc3RhdGljIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBvcHRp
b25zT2JqZWN0Q2FsbGJhY2soY29uc3Qgdjg6OkFyZ3VtZW50cyYgYXJncykKK3sKKyAgICBJTkNf
U1RBVFMoIkRPTS5UZXN0T2JqLm9wdGlvbnNPYmplY3QiKTsKKyAgICBUZXN0T2JqKiBpbXAgPSBW
OFRlc3RPYmo6OnRvTmF0aXZlKGFyZ3MuSG9sZGVyKCkpOworICAgIEVYQ0VQVElPTl9CTE9DSyhP
cHRpb25zT2JqZWN0LCBvbywgYXJnc1swXSk7CisgICAgaWYgKGFyZ3MuTGVuZ3RoKCkgPD0gMSkg
eworICAgICAgICBpbXAtPm9wdGlvbnNPYmplY3Qob28pOworICAgICAgICByZXR1cm4gdjg6Okhh
bmRsZTx2ODo6VmFsdWU+KCk7CisgICAgfQorICAgIEVYQ0VQVElPTl9CTE9DSyhPcHRpb25zT2Jq
ZWN0LCBvb28sIGFyZ3NbMV0pOworICAgIGltcC0+b3B0aW9uc09iamVjdChvbywgb29vKTsKKyAg
ICByZXR1cm4gdjg6OkhhbmRsZTx2ODo6VmFsdWU+KCk7Cit9CisKIHN0YXRpYyB2ODo6SGFuZGxl
PHY4OjpWYWx1ZT4gbWV0aG9kV2l0aEV4Y2VwdGlvbkNhbGxiYWNrKGNvbnN0IHY4OjpBcmd1bWVu
dHMmIGFyZ3MpCiB7CiAgICAgSU5DX1NUQVRTKCJET00uVGVzdE9iai5tZXRob2RXaXRoRXhjZXB0
aW9uIik7CkBAIC0xMjAxLDYgKzEyMTYsNyBAQCBzdGF0aWMgY29uc3QgQmF0Y2hlZENhbGxiYWNr
IFRlc3RPYmpDYWxsYmFja3NbXSA9IHsKICAgICB7Im9iak1ldGhvZCIsIFRlc3RPYmpJbnRlcm5h
bDo6b2JqTWV0aG9kQ2FsbGJhY2t9LAogICAgIHsic2VyaWFsaXplZFZhbHVlIiwgVGVzdE9iaklu
dGVybmFsOjpzZXJpYWxpemVkVmFsdWVDYWxsYmFja30sCiAgICAgeyJpZGJLZXkiLCBUZXN0T2Jq
SW50ZXJuYWw6OmlkYktleUNhbGxiYWNrfSwKKyAgICB7Im9wdGlvbnNPYmplY3QiLCBUZXN0T2Jq
SW50ZXJuYWw6Om9wdGlvbnNPYmplY3RDYWxsYmFja30sCiAgICAgeyJtZXRob2RXaXRoRXhjZXB0
aW9uIiwgVGVzdE9iakludGVybmFsOjptZXRob2RXaXRoRXhjZXB0aW9uQ2FsbGJhY2t9LAogICAg
IHsiY3VzdG9tTWV0aG9kIiwgVjhUZXN0T2JqOjpjdXN0b21NZXRob2RDYWxsYmFja30sCiAgICAg
eyJjdXN0b21NZXRob2RXaXRoQXJncyIsIFY4VGVzdE9iajo6Y3VzdG9tTWV0aG9kV2l0aEFyZ3ND
YWxsYmFja30sCmRpZmYgLS1naXQgYS9XZWJDb3JlL2JpbmRpbmdzL3Y4L09wdGlvbnNPYmplY3Qu
Y3BwIGIvV2ViQ29yZS9iaW5kaW5ncy92OC9PcHRpb25zT2JqZWN0LmNwcApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZGMzNzE4Ci0tLSAvZGV2L251bGwKKysrIGIvV2ViQ29y
ZS9iaW5kaW5ncy92OC9PcHRpb25zT2JqZWN0LmNwcApAQCAtMCwwICsxLDk2IEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBB
TkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQK
KyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9O
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKwor
I2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIk9wdGlvbnNPYmplY3QuaCIKKyNpbmNsdWRl
ICJWOEJpbmRpbmcuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitPcHRpb25zT2JqZWN0OjpP
cHRpb25zT2JqZWN0KCkKK3sKK30KKworT3B0aW9uc09iamVjdDo6T3B0aW9uc09iamVjdChjb25z
dCB2ODo6TG9jYWw8djg6OlZhbHVlPiYgb3B0aW9ucykKKyAgICA6IG1fb3B0aW9ucyhvcHRpb25z
KQoreworfQorCitPcHRpb25zT2JqZWN0Ojp+T3B0aW9uc09iamVjdCgpCit7Cit9CisKK09wdGlv
bnNPYmplY3QmIE9wdGlvbnNPYmplY3Q6Om9wZXJhdG9yPShjb25zdCBPcHRpb25zT2JqZWN0JiBv
cHRpb25zT2JqZWN0KQoreworICAgIG1fb3B0aW9ucyA9IG9wdGlvbnNPYmplY3QubV9vcHRpb25z
OworICAgIHJldHVybiAqdGhpczsKK30KKworYm9vbCBPcHRpb25zT2JqZWN0Ojp1bmRlZmluZWRP
ck51bGwoKSBjb25zdAoreworICAgIGlmIChtX29wdGlvbnMuSXNFbXB0eSgpKQorICAgICAgICBy
ZXR1cm4gdHJ1ZTsKKyAgICByZXR1cm4gaXNVbmRlZmluZWRPck51bGwobV9vcHRpb25zKTsKK30K
KworYm9vbCBPcHRpb25zT2JqZWN0OjpnZXRLZXlCb29sKGNvbnN0IFN0cmluZyYga2V5LCBib29s
JiB2YWx1ZSkgY29uc3QKK3sKKyAgICB2ODo6TG9jYWw8djg6OlZhbHVlPiB2OFZhbHVlOworICAg
IGlmICghZ2V0S2V5KGtleSwgdjhWYWx1ZSkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAg
IGlmICghdjhWYWx1ZS0+SXNCb29sZWFuKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB2
ODo6TG9jYWw8djg6OkJvb2xlYW4+IHY4Qm9vbCA9IHY4VmFsdWUtPlRvQm9vbGVhbigpOworICAg
IEFTU0VSVCghdjhCb29sLklzRW1wdHkoKSk7CisKKyAgICB2YWx1ZSA9IHY4Qm9vbC0+VmFsdWUo
KTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBPcHRpb25zT2JqZWN0OjpnZXRLZXlTdHJp
bmcoY29uc3QgU3RyaW5nJiBrZXksIFN0cmluZyYgdmFsdWUpIGNvbnN0Cit7CisgICAgdjg6Okxv
Y2FsPHY4OjpWYWx1ZT4gdjhWYWx1ZTsKKyAgICBpZiAoIWdldEtleShrZXksIHY4VmFsdWUpKQor
ICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBpZiAoIXY4VmFsdWUtPklzU3RyaW5nKCkpCisg
ICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIHZhbHVlID0gdjhWYWx1ZVRvV2ViQ29yZVN0cmlu
Zyh2OFZhbHVlKTsKKyAgICByZXR1cm4gIXY4VmFsdWUuSXNFbXB0eSgpOworfQorCitib29sIE9w
dGlvbnNPYmplY3Q6OmdldEtleShjb25zdCBTdHJpbmcmIGtleSwgdjg6OkxvY2FsPHY4OjpWYWx1
ZT4mIHZhbHVlKSBjb25zdAoreworICAgIGlmICh1bmRlZmluZWRPck51bGwoKSkKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgIHY4OjpMb2NhbDx2ODo6T2JqZWN0PiBvcHRpb25zID0gbV9vcHRp
b25zLT5Ub09iamVjdCgpOworICAgIEFTU0VSVCghb3B0aW9ucy5Jc0VtcHR5KCkpOworICAgIHZh
bHVlID0gb3B0aW9ucy0+R2V0KHY4U3RyaW5nKGtleSkpOworICAgIHJldHVybiAhdmFsdWUuSXNF
bXB0eSgpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9XZWJDb3Jl
L2JpbmRpbmdzL3Y4L09wdGlvbnNPYmplY3QuaCBiL1dlYkNvcmUvYmluZGluZ3MvdjgvT3B0aW9u
c09iamVjdC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlkYTA3N2EKLS0t
IC9kZXYvbnVsbAorKysgYi9XZWJDb3JlL2JpbmRpbmdzL3Y4L09wdGlvbnNPYmplY3QuaApAQCAt
MCwwICsxLDU3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkK
KyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YK
KyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBPcHRpb25zT2JqZWN0X2gKKyNkZWZpbmUgT3B0
aW9uc09iamVjdF9oCisKKyNpbmNsdWRlICJQbGF0Zm9ybVN0cmluZy5oIgorI2luY2x1ZGUgPHY4
Lmg+CisjaW5jbHVkZSA8d3RmL05vbkNvcHlhYmxlLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsK
KworLy8gSU1QT1JUQU5UOiBUaGlzIHNob3VsZCBvbmx5IGJlIGFsbG9jYXRlZCBvbiB0aGUgc3Rh
Y2sgZ2l2ZW4gdGhhdCBpdCBzdG9yZXMgdGhlCisvLyAgICAgICAgICAgIG9iamVjdCBhcyBhIHY4
OjpMb2NhbCB3aGljaCBpcyBvbmx5IGFsbG93ZWQgdG8gYmUgb24gdGhlIHN0YWNrLgorY2xhc3Mg
T3B0aW9uc09iamVjdCB7CitwdWJsaWM6CisgICAgT3B0aW9uc09iamVjdCgpOworICAgIE9wdGlv
bnNPYmplY3QoY29uc3Qgdjg6OkxvY2FsPHY4OjpWYWx1ZT4mIG9wdGlvbnMpOworICAgIH5PcHRp
b25zT2JqZWN0KCk7CisKKyAgICBPcHRpb25zT2JqZWN0JiBvcGVyYXRvcj0oY29uc3QgT3B0aW9u
c09iamVjdCYpOworCisgICAgYm9vbCB1bmRlZmluZWRPck51bGwoKSBjb25zdDsKKyAgICBib29s
IGdldEtleUJvb2woY29uc3QgU3RyaW5nJiBrZXksIGJvb2wmIHZhbHVlKSBjb25zdDsKKyAgICBi
b29sIGdldEtleVN0cmluZyhjb25zdCBTdHJpbmcmIGtleSwgU3RyaW5nJiB2YWx1ZSkgY29uc3Q7
CisKK3ByaXZhdGU6CisgICAgYm9vbCBnZXRLZXkoY29uc3QgU3RyaW5nJiBrZXksIHY4OjpMb2Nh
bDx2ODo6VmFsdWU+JikgY29uc3Q7CisKKyAgICB2ODo6TG9jYWw8djg6OlZhbHVlPiBtX29wdGlv
bnM7Cit9OworCit9CisKKyNlbmRpZiAvLyBPcHRpb25zT2JqZWN0X2gKZGlmZiAtLWdpdCBhL1dl
YkNvcmUvc3RvcmFnZS9JREJEYXRhYmFzZS5jcHAgYi9XZWJDb3JlL3N0b3JhZ2UvSURCRGF0YWJh
c2UuY3BwCmluZGV4IDE1MzZiYTcuLjcyZmYxN2QgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvc3RvcmFn
ZS9JREJEYXRhYmFzZS5jcHAKKysrIGIvV2ViQ29yZS9zdG9yYWdlL0lEQkRhdGFiYXNlLmNwcApA
QCAtNTYsMTMgKzU2LDE5IEBAIHZvaWQgSURCRGF0YWJhc2U6OnNldFNldFZlcnNpb25UcmFuc2Fj
dGlvbihJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UqIHRyYW5zCiAgICAgbV9zZXRWZXJz
aW9uVHJhbnNhY3Rpb24gPSB0cmFuc2FjdGlvbjsKIH0KIAotUGFzc1JlZlB0cjxJREJPYmplY3RT
dG9yZT4gSURCRGF0YWJhc2U6OmNyZWF0ZU9iamVjdFN0b3JlKGNvbnN0IFN0cmluZyYgbmFtZSwg
Y29uc3QgU3RyaW5nJiBrZXlQYXRoLCBib29sIGF1dG9JbmNyZW1lbnQsIEV4Y2VwdGlvbkNvZGUm
IGVjKQorUGFzc1JlZlB0cjxJREJPYmplY3RTdG9yZT4gSURCRGF0YWJhc2U6OmNyZWF0ZU9iamVj
dFN0b3JlKGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgT3B0aW9uc09iamVjdCYgb3B0aW9ucywg
RXhjZXB0aW9uQ29kZSYgZWMpCiB7CiAgICAgaWYgKCFtX3NldFZlcnNpb25UcmFuc2FjdGlvbikg
ewogICAgICAgICBlYyA9IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpOT1RfQUxMT1dFRF9FUlI7CiAg
ICAgICAgIHJldHVybiAwOwogICAgIH0KIAorICAgIFN0cmluZyBrZXlQYXRoOworICAgIG9wdGlv
bnMuZ2V0S2V5U3RyaW5nKCJrZXlQYXRoIiwga2V5UGF0aCk7CisgICAgYm9vbCBhdXRvSW5jcmVt
ZW50ID0gZmFsc2U7CisgICAgb3B0aW9ucy5nZXRLZXlCb29sKCJhdXRvSW5jcmVtZW50IiwgYXV0
b0luY3JlbWVudCk7CisgICAgLy8gRklYTUU6IExvb2sgdXAgZXZpY3RhYmxlIGFuZCBwYXNzIHRo
YXQgb24gYXMgd2VsbC4KKwogICAgIFJlZlB0cjxJREJPYmplY3RTdG9yZUJhY2tlbmRJbnRlcmZh
Y2U+IG9iamVjdFN0b3JlID0gbV9iYWNrZW5kLT5jcmVhdGVPYmplY3RTdG9yZShuYW1lLCBrZXlQ
YXRoLCBhdXRvSW5jcmVtZW50LCBtX3NldFZlcnNpb25UcmFuc2FjdGlvbi5nZXQoKSwgZWMpOwog
ICAgIGlmICghb2JqZWN0U3RvcmUpIHsKICAgICAgICAgLy8gRklYTUU6IEFTU0VSVChlYykgb25j
ZSBVTktOT1dOX0VSUiBpcyBub3QgMC4KZGlmZiAtLWdpdCBhL1dlYkNvcmUvc3RvcmFnZS9JREJE
YXRhYmFzZS5oIGIvV2ViQ29yZS9zdG9yYWdlL0lEQkRhdGFiYXNlLmgKaW5kZXggZGY1NmY0Ni4u
M2UzMzQ3MiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9zdG9yYWdlL0lEQkRhdGFiYXNlLmgKKysrIGIv
V2ViQ29yZS9zdG9yYWdlL0lEQkRhdGFiYXNlLmgKQEAgLTMxLDYgKzMxLDcgQEAKICNpbmNsdWRl
ICJJREJEYXRhYmFzZUJhY2tlbmRJbnRlcmZhY2UuaCIKICNpbmNsdWRlICJJREJPYmplY3RTdG9y
ZS5oIgogI2luY2x1ZGUgIklEQlRyYW5zYWN0aW9uLmgiCisjaW5jbHVkZSAiT3B0aW9uc09iamVj
dC5oIgogI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CiAjaW5jbHVkZSA8d3RmL1JlZkNvdW50
ZWQuaD4KICNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CkBAIC01OSwxMyArNjAsMTIgQEAgcHVibGlj
OgogICAgIFBhc3NSZWZQdHI8RE9NU3RyaW5nTGlzdD4gb2JqZWN0U3RvcmVzKCkgY29uc3QgeyBy
ZXR1cm4gbV9iYWNrZW5kLT5vYmplY3RTdG9yZXMoKTsgfQogCiAgICAgLy8gRklYTUU6IFRyeSB0
byBtb2RpZnkgdGhlIGNvZGUgZ2VuZXJhdG9yIHNvIHRoaXMgaXMgdW5uZWVkZWQuCi0gICAgUGFz
c1JlZlB0cjxJREJPYmplY3RTdG9yZT4gY3JlYXRlT2JqZWN0U3RvcmUoY29uc3QgU3RyaW5nJiBu
YW1lLCBFeGNlcHRpb25Db2RlJiBlYykgeyByZXR1cm4gY3JlYXRlT2JqZWN0U3RvcmUobmFtZSwg
U3RyaW5nKCksIGVjKTsgfQotICAgIFBhc3NSZWZQdHI8SURCT2JqZWN0U3RvcmU+IGNyZWF0ZU9i
amVjdFN0b3JlKGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgU3RyaW5nJiBrZXlQYXRoLCBFeGNl
cHRpb25Db2RlJiBlYykgeyByZXR1cm4gY3JlYXRlT2JqZWN0U3RvcmUobmFtZSwga2V5UGF0aCwg
ZmFsc2UsIGVjKTsgfQorICAgIFBhc3NSZWZQdHI8SURCT2JqZWN0U3RvcmU+IGNyZWF0ZU9iamVj
dFN0b3JlKGNvbnN0IFN0cmluZyYgbmFtZSwgRXhjZXB0aW9uQ29kZSYgZWMpIHsgcmV0dXJuIGNy
ZWF0ZU9iamVjdFN0b3JlKG5hbWUsIE9wdGlvbnNPYmplY3QoKSwgZWMpOyB9CiAgICAgUGFzc1Jl
ZlB0cjxJREJUcmFuc2FjdGlvbj4gdHJhbnNhY3Rpb24oU2NyaXB0RXhlY3V0aW9uQ29udGV4dCog
Y29udGV4dCwgRXhjZXB0aW9uQ29kZSYgZWMpIHsgcmV0dXJuIHRyYW5zYWN0aW9uKGNvbnRleHQs
IDAsIGVjKTsgfQogICAgIFBhc3NSZWZQdHI8SURCVHJhbnNhY3Rpb24+IHRyYW5zYWN0aW9uKFNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIERPTVN0cmluZ0xpc3QqIHN0b3JlTmFtZXMs
IEV4Y2VwdGlvbkNvZGUmIGVjKSB7IHJldHVybiB0cmFuc2FjdGlvbihjb250ZXh0LCBzdG9yZU5h
bWVzLCBJREJUcmFuc2FjdGlvbjo6UkVBRF9PTkxZLCBlYyk7IH0KICAgICBQYXNzUmVmUHRyPElE
QlRyYW5zYWN0aW9uPiB0cmFuc2FjdGlvbihTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0
LCBET01TdHJpbmdMaXN0KiBzdG9yZU5hbWVzLCB1bnNpZ25lZCBzaG9ydCBtb2RlLCBFeGNlcHRp
b25Db2RlJiBlYykgeyByZXR1cm4gdHJhbnNhY3Rpb24oY29udGV4dCwgc3RvcmVOYW1lcywgbW9k
ZSwgMCwgZWMpOyB9IC8vIEZJWE1FOiB3aGF0IHNob3VsZCB0aGUgZGVmYXVsdCB0aW1lb3V0IGJl
PwogCi0gICAgUGFzc1JlZlB0cjxJREJPYmplY3RTdG9yZT4gY3JlYXRlT2JqZWN0U3RvcmUoY29u
c3QgU3RyaW5nJiBuYW1lLCBjb25zdCBTdHJpbmcmIGtleVBhdGgsIGJvb2wgYXV0b0luY3JlbWVu
dCwgRXhjZXB0aW9uQ29kZSYpOworICAgIFBhc3NSZWZQdHI8SURCT2JqZWN0U3RvcmU+IGNyZWF0
ZU9iamVjdFN0b3JlKGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgT3B0aW9uc09iamVjdCYsIEV4
Y2VwdGlvbkNvZGUmKTsKICAgICB2b2lkIHJlbW92ZU9iamVjdFN0b3JlKGNvbnN0IFN0cmluZyYg
bmFtZSwgRXhjZXB0aW9uQ29kZSYpOwogICAgIFBhc3NSZWZQdHI8SURCUmVxdWVzdD4gc2V0VmVy
c2lvbihTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgY29uc3QgU3RyaW5nJiB2ZXJzaW9uLCBFeGNl
cHRpb25Db2RlJik7CiAgICAgUGFzc1JlZlB0cjxJREJUcmFuc2FjdGlvbj4gdHJhbnNhY3Rpb24o
U2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIERPTVN0cmluZ0xpc3QqLCB1bnNpZ25lZCBzaG9ydCBt
b2RlLCB1bnNpZ25lZCBsb25nIHRpbWVvdXQsIEV4Y2VwdGlvbkNvZGUmKTsKZGlmZiAtLWdpdCBh
L1dlYkNvcmUvc3RvcmFnZS9JREJEYXRhYmFzZS5pZGwgYi9XZWJDb3JlL3N0b3JhZ2UvSURCRGF0
YWJhc2UuaWRsCmluZGV4IDFhYjViMGIuLmIwOGQ0NTkgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvc3Rv
cmFnZS9JREJEYXRhYmFzZS5pZGwKKysrIGIvV2ViQ29yZS9zdG9yYWdlL0lEQkRhdGFiYXNlLmlk
bApAQCAtMzIsNyArMzIsNyBAQCBtb2R1bGUgc3RvcmFnZSB7CiAgICAgICAgIHJlYWRvbmx5IGF0
dHJpYnV0ZSBET01TdHJpbmcgdmVyc2lvbjsKICAgICAgICAgcmVhZG9ubHkgYXR0cmlidXRlIERP
TVN0cmluZ0xpc3Qgb2JqZWN0U3RvcmVzOwogCi0gICAgICAgIElEQk9iamVjdFN0b3JlIGNyZWF0
ZU9iamVjdFN0b3JlKGluIERPTVN0cmluZyBuYW1lLCBpbiBbT3B0aW9uYWwsIENvbnZlcnROdWxs
VG9OdWxsU3RyaW5nXSBET01TdHJpbmcga2V5UGF0aCwgaW4gW09wdGlvbmFsXSBib29sZWFuIGF1
dG9JbmNyZW1lbnQpCisgICAgICAgIElEQk9iamVjdFN0b3JlIGNyZWF0ZU9iamVjdFN0b3JlKGlu
IERPTVN0cmluZyBuYW1lLCBpbiBbT3B0aW9uYWxdIE9wdGlvbnNPYmplY3Qgb3B0aW9ucykKICAg
ICAgICAgICAgIHJhaXNlcyAoSURCRGF0YWJhc2VFeGNlcHRpb24pOwogICAgICAgICB2b2lkIHJl
bW92ZU9iamVjdFN0b3JlKGluIERPTVN0cmluZyBuYW1lKQogICAgICAgICAgICAgcmFpc2VzIChJ
REJEYXRhYmFzZUV4Y2VwdGlvbik7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>74771</attachid>
            <date>2010-11-24 09:38:00 -0800</date>
            <delta_ts>2010-11-25 02:38:07 -0800</delta_ts>
            <desc>Added another layout test</desc>
            <filename>a</filename>
            <type>text/plain</type>
            <size>36127</size>
            <attacher name="Jeremy Orlow">jorlow</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxv
ZwppbmRleCA0ZjhmM2QyLi4xMGFmZjQ0IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VM
b2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTQgQEAKKzIwMTAtMTEt
MjQgIEplcmVteSBPcmxvdyAgPGpvcmxvd0BjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQWRkIGFuIE9wdGlvbnNPYmplY3QgY2xh
c3MgZm9yIEluZGV4ZWREQiAoYW5kIGxhdGVyIEdlb0xvY2F0aW9uKQorICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTAwMzAKKworICAgICAgICBFeGlzdGlu
ZyB0ZXN0IGNvdmVycyB0aGlzIGNhc2UuCisKKyAgICAgICAgKiBzdG9yYWdlL2luZGV4ZWRkYi90
dXRvcmlhbC5odG1sOgorCiAyMDEwLTExLTIzICBKZXJlbXkgT3Jsb3cgIDxqb3Jsb3dAY2hyb21p
dW0ub3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgpkaWZmIC0tZ2l0
IGEvTGF5b3V0VGVzdHMvc3RvcmFnZS9pbmRleGVkZGIvY3JlYXRlT2JqZWN0U3RvcmVPcHRpb25z
LWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL3N0b3JhZ2UvaW5kZXhlZGRiL2NyZWF0ZU9iamVj
dFN0b3JlT3B0aW9ucy1leHBlY3RlZC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMC4uYWVjMzgxZgotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL3N0b3JhZ2UvaW5k
ZXhlZGRiL2NyZWF0ZU9iamVjdFN0b3JlT3B0aW9ucy1leHBlY3RlZC50eHQKQEAgLTAsMCArMSwy
OSBAQAorVGVzdCBJbmRleGVkREIncyBjcmVhdGVPYmplY3RTdG9yZSdzIHZhcmlvdXMgb3B0aW9u
cworCitPbiBzdWNjZXNzLCB5b3Ugd2lsbCBzZWUgYSBzZXJpZXMgb2YgIlBBU1MiIG1lc3NhZ2Vz
LCBmb2xsb3dlZCBieSAiVEVTVCBDT01QTEVURSIuCisKKworUEFTUyAnd2Via2l0SW5kZXhlZERC
JyBpbiB3aW5kb3cgaXMgdHJ1ZQorUEFTUyB3ZWJraXRJbmRleGVkREIgPT0gbnVsbCBpcyBmYWxz
ZQord2Via2l0SW5kZXhlZERCLm9wZW4oJ25hbWUnLCAnZGVzY3JpcHRpb24nKQorUEFTUyAnb25z
dWNjZXNzJyBpbiByZXN1bHQgaXMgdHJ1ZQorUEFTUyAnb25lcnJvcicgaW4gcmVzdWx0IGlzIHRy
dWUKK1BBU1MgJ3JlYWR5U3RhdGUnIGluIHJlc3VsdCBpcyB0cnVlCitBbiBldmVudCBzaG91bGQg
ZmlyZSBzaG9ydGx5Li4uCisKK2RiID0gZXZlbnQucmVzdWx0CityZXN1bHQgPSBkYi5zZXRWZXJz
aW9uKCd2ZXJzaW9uIDEnKQorRGVsZXRlZCBhbGwgb2JqZWN0IHN0b3Jlcy4KK2RiLmNyZWF0ZU9i
amVjdFN0b3JlKCdhJywge2tleVBhdGg6ICdhJ30pCitkYi5jcmVhdGVPYmplY3RTdG9yZSgnYicp
Cit0cmFucyA9IGRiLnRyYW5zYWN0aW9uKFtdLCB3ZWJraXRJREJUcmFuc2FjdGlvbi5SRUFEX1dS
SVRFKQordHJhbnMub2JqZWN0U3RvcmUoJ2EnKS5wdXQoeydhJzogMH0pCit0cmFucy5vYmplY3RT
dG9yZSgnYicpLnB1dCh7J2EnOiAwfSwgMCkKK3RyYW5zLm9iamVjdFN0b3JlKCdhJykuZ2V0KDAp
CitQQVNTIGV2ZW50LnJlc3VsdC5hIGlzIHthOiAwfQordHJhbnMub2JqZWN0U3RvcmUoJ2InKS5n
ZXQoMCkKK1BBU1MgZXZlbnQucmVzdWx0LmEgaXMge2E6IDB9CitQQVNTIHN1Y2Nlc3NmdWxseVBh
cnNlZCBpcyB0cnVlCisKK1RFU1QgQ09NUExFVEUKKwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMv
c3RvcmFnZS9pbmRleGVkZGIvY3JlYXRlT2JqZWN0U3RvcmVPcHRpb25zLmh0bWwgYi9MYXlvdXRU
ZXN0cy9zdG9yYWdlL2luZGV4ZWRkYi9jcmVhdGVPYmplY3RTdG9yZU9wdGlvbnMuaHRtbApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMjhkMmQyCi0tLSAvZGV2L251bGwKKysr
IGIvTGF5b3V0VGVzdHMvc3RvcmFnZS9pbmRleGVkZGIvY3JlYXRlT2JqZWN0U3RvcmVPcHRpb25z
Lmh0bWwKQEAgLTAsMCArMSw5MCBAQAorPGh0bWw+Cis8aGVhZD4KKzxsaW5rIHJlbD0ic3R5bGVz
aGVldCIgaHJlZj0iLi4vLi4vZmFzdC9qcy9yZXNvdXJjZXMvanMtdGVzdC1zdHlsZS5jc3MiPgor
PHNjcmlwdCBzcmM9Ii4uLy4uL2Zhc3QvanMvcmVzb3VyY2VzL2pzLXRlc3QtcHJlLmpzIj48L3Nj
cmlwdD4KKzxzY3JpcHQgc3JjPSIuLi8uLi9mYXN0L2pzL3Jlc291cmNlcy9qcy10ZXN0LXBvc3Qt
ZnVuY3Rpb24uanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9InJlc291cmNlcy9zaGFyZWQuanMi
Pjwvc2NyaXB0PgorPC9oZWFkPgorPGJvZHk+Cis8cCBpZD0iZGVzY3JpcHRpb24iPjwvcD4KKzxk
aXYgaWQ9ImNvbnNvbGUiPjwvZGl2PgorPHNjcmlwdD4KKworZGVzY3JpcHRpb24oIlRlc3QgSW5k
ZXhlZERCJ3MgY3JlYXRlT2JqZWN0U3RvcmUncyB2YXJpb3VzIG9wdGlvbnMiKTsKK2lmICh3aW5k
b3cubGF5b3V0VGVzdENvbnRyb2xsZXIpCisgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIud2FpdFVu
dGlsRG9uZSgpOworCitmdW5jdGlvbiB0ZXN0KCkKK3sKKyAgICBzaG91bGRCZVRydWUoIid3ZWJr
aXRJbmRleGVkREInIGluIHdpbmRvdyIpOworICAgIHNob3VsZEJlRmFsc2UoIndlYmtpdEluZGV4
ZWREQiA9PSBudWxsIik7CisKKyAgICByZXN1bHQgPSBldmFsQW5kTG9nKCJ3ZWJraXRJbmRleGVk
REIub3BlbignbmFtZScsICdkZXNjcmlwdGlvbicpIik7CisgICAgdmVyaWZ5UmVzdWx0KHJlc3Vs
dCk7CisgICAgcmVzdWx0Lm9uc3VjY2VzcyA9IG9wZW5TdWNjZXNzOworICAgIHJlc3VsdC5vbmVy
cm9yID0gdW5leHBlY3RlZEVycm9yQ2FsbGJhY2s7Cit9CisKK2Z1bmN0aW9uIG9wZW5TdWNjZXNz
KCkKK3sKKyAgICBkYiA9IGV2YWxBbmRMb2coImRiID0gZXZlbnQucmVzdWx0Iik7CisKKyAgICBy
ZXN1bHQgPSBldmFsQW5kTG9nKCJyZXN1bHQgPSBkYi5zZXRWZXJzaW9uKCd2ZXJzaW9uIDEnKSIp
OworICAgIHJlc3VsdC5vbnN1Y2Nlc3MgPSBjbGVhbkRhdGFiYXNlOworICAgIHJlc3VsdC5vbmVy
cm9yID0gdW5leHBlY3RlZEVycm9yQ2FsbGJhY2s7Cit9CisKK2Z1bmN0aW9uIGNsZWFuRGF0YWJh
c2UoKQoreworICAgIGRlbGV0ZUFsbE9iamVjdFN0b3JlcyhkYiwgY2xlYW5lZCk7Cit9CisKK2Z1
bmN0aW9uIGNsZWFuZWQoKQoreworICAgIGV2YWxBbmRMb2coImRiLmNyZWF0ZU9iamVjdFN0b3Jl
KCdhJywge2tleVBhdGg6ICdhJ30pIik7CisgICAgZXZhbEFuZExvZygiZGIuY3JlYXRlT2JqZWN0
U3RvcmUoJ2InKSIpOworCisgICAgdHJhbnMgPSBldmFsQW5kTG9nKCJ0cmFucyA9IGRiLnRyYW5z
YWN0aW9uKFtdLCB3ZWJraXRJREJUcmFuc2FjdGlvbi5SRUFEX1dSSVRFKSIpOworCisgICAgcmVx
ID0gZXZhbEFuZExvZygidHJhbnMub2JqZWN0U3RvcmUoJ2EnKS5wdXQoeydhJzogMH0pIik7Cisg
ICAgcmVxLm9uc3VjY2VzcyA9IHB1dEI7CisgICAgcmVxLm9uZXJyb3IgPSB1bmV4cGVjdGVkRXJy
b3JDYWxsYmFjazsKK30KKworZnVuY3Rpb24gcHV0QigpCit7CisgICAgcmVxID0gZXZhbEFuZExv
ZygidHJhbnMub2JqZWN0U3RvcmUoJ2InKS5wdXQoeydhJzogMH0sIDApIik7ICAvLyBPT1BTCisg
ICAgcmVxLm9uc3VjY2VzcyA9IGdldEE7CisgICAgcmVxLm9uZXJyb3IgPSB1bmV4cGVjdGVkRXJy
b3JDYWxsYmFjazsKK30KKworZnVuY3Rpb24gZ2V0QSgpCit7CisgICAgcmVxID0gZXZhbEFuZExv
ZygidHJhbnMub2JqZWN0U3RvcmUoJ2EnKS5nZXQoMCkiKTsKKyAgICByZXEub25zdWNjZXNzID0g
Z2V0QjsKKyAgICByZXEub25lcnJvciA9IHVuZXhwZWN0ZWRFcnJvckNhbGxiYWNrOworfQorCitm
dW5jdGlvbiBnZXRCKCkKK3sKKyAgICBzaG91bGRCZSgiZXZlbnQucmVzdWx0LmEiLCAie2E6IDB9
Iik7CisKKyAgICByZXEgPSBldmFsQW5kTG9nKCJ0cmFucy5vYmplY3RTdG9yZSgnYicpLmdldCgw
KSIpOworICAgIHJlcS5vbnN1Y2Nlc3MgPSBjaGVja0I7CisgICAgcmVxLm9uZXJyb3IgPSB1bmV4
cGVjdGVkRXJyb3JDYWxsYmFjazsKK30KKworZnVuY3Rpb24gY2hlY2tCKCkKK3sKKyAgICBzaG91
bGRCZSgiZXZlbnQucmVzdWx0LmEiLCAie2E6IDB9Iik7CisKKyAgICBkb25lKCk7Cit9CisKK3Zh
ciBzdWNjZXNzZnVsbHlQYXJzZWQgPSB0cnVlOworCit0ZXN0KCk7CisKKzwvc2NyaXB0PgorPC9i
b2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvc3RvcmFnZS9pbmRleGVkZGIv
dHV0b3JpYWwuaHRtbCBiL0xheW91dFRlc3RzL3N0b3JhZ2UvaW5kZXhlZGRiL3R1dG9yaWFsLmh0
bWwKaW5kZXggZGI5ZjJmYS4uMzU3ODg0OCAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvc3RvcmFn
ZS9pbmRleGVkZGIvdHV0b3JpYWwuaHRtbAorKysgYi9MYXlvdXRUZXN0cy9zdG9yYWdlL2luZGV4
ZWRkYi90dXRvcmlhbC5odG1sCkBAIC0xNTAsMTMgKzE1MCwyNSBAQCBmdW5jdGlvbiBvblNldFZl
cnNpb24oKQogICAgIC8vIGEgbnVtYmVyIGF0dHJpYnV0ZSBhbmQgYXQgbGVhc3Qgb25lIHNpYmxp
bmcpLiBZb3UgY2FuIGV2ZW4gZ28gd2lsZCBhbmQgc2F5CiAgICAgLy8gImZvb1swXVsyXS5iYXJb
MF0uYmF6LnRlc3RbMV1bMl1bM10iLiBJdCdzIHBvc3NpYmxlIHRoaXMgd2lsbCBjaGFuZ2UgaW4g
dGhlIGZ1dHVyZSB0aG91Z2guCiAgICAgLy8KLSAgICAvLyBJZiB5b3Ugc2V0IGF1dG9JbmNyZW1l
bnQgKHRoZSB0aGlyZCBvcHRpb25hbCBwYXJhbWV0ZXIpLCBJbmRleGVkREIgd2lsbCBnZW5lcmF0
ZSBhIGtleQorICAgIC8vIElmIHlvdSBzZXQgYXV0b0luY3JlbWVudCAoYW5vdGhlciBvcHRpb25h
bCBwYXJhbWV0ZXIpLCBJbmRleGVkREIgd2lsbCBnZW5lcmF0ZSBhIGtleQogICAgIC8vIGZvciB5
b3VyIGVudHJ5IGF1dG9tYXRpY2FsbHkuIEFuZCBpZiB5b3UgaGF2ZSBhIGtleVBhdGggc2V0LCBp
dCdsbCBzZXQgdGhlIHZhbHVlIGF0CiAgICAgLy8gdGhlIGxvY2F0aW9uIG9mIHRoZSBrZXlQYXRo
IF9pbiB0aGUgZGF0YWJhc2VfIChpLmUuIGl0IHdpbGwgbm90IG1vZGlmeSB0aGUgdmFsdWUgeW91
IHBhc3MKICAgICAvLyBpbiB0byBwdXQvYWRkKS4gVW5mb3J0dW5hdGVseSBhdXRvSW5jcmVtZW50
IGlzIG5vdCB5ZXQgaW1wbGVtZW50ZWQgaW4gQ2hyb21pdW0vV2ViS2l0LgogICAgIC8vCisgICAg
Ly8gQW5vdGhlciBvcHRpb25hbCBwYXJhbWV0ZXIsICJldmljdGFibGUiIGlzIG5vdCB5ZXQgaW1w
bGVtZW50ZWQuIFdoZW4gaXQgaXMsIGl0J2xsIGhpbnQKKyAgICAvLyB3aGljaCBkYXRhIHNob3Vs
ZCBiZSBkZWxldGVkIGZpcnN0IGlmIHRoZSBicm93c2VyIGRlY2lkZXMgdGhpcyBvcmlnaW4gaXMg
dXNpbmcgdG9vIG11Y2gKKyAgICAvLyBzdG9yYWdlLiAoVGhlIGFsdGVybmF0aXZlIGlzIHRoYXQg
aXQnbGwgc3VnZ2VzdCB0aGUgdXNlciBkZWxldGUgZXZlcnl0aGluZyBmcm9tIHRoZQorICAgIC8v
IG9yaWdpbiwgc28gaXQncyBpbiB5b3VyIGZhdm9yIHRvIHNldCBpdCBhcHByb3BlcmF0ZWx5ISkg
VGhpcyBpcyBncmVhdCBmb3Igd2hlbiB5b3UgaGF2ZQorICAgIC8vIHNvbWUgYWJzb2x1dGVseSBj
cml0aWNhbCBkYXRhIChsaWtlIHVuc2V0IGVtYWlscykgYW5kIGEgYnVuY2ggb2YgbGVzcyBjcml0
aWNhbCwgKGJ1dAorICAgIC8vIG1heWJlIHN0aWxsIGltcG9ydGFudCEpIGRhdGEuCisgICAgLy8K
KyAgICAvLyBBbGwgb2YgdGhlc2Ugb3B0aW9ucyBjYW4gYmUgcGFzc2VkIGludG8gY3JlYXRlT2Jq
ZWN0U3RvcmUgdmlhIGl0cyAob3B0aW9uYWwpIHNlY29uZAorICAgIC8vIHBhcmFtZXRlci4gU28s
IGlmIHlvdSB3YW50ZWQgdG8gZGVmaW5lIGFsbCwgWW91J2QgZG8ge2tleVBhdGg6ICJzb21ldGhp
bmciLAorICAgIC8vIGV2aWN0YWJsZTogdHJ1ZSwgYXV0b0luY3JlbWVudDogdHJ1ZX0uIFlvdSBj
YW4gYWxzbyBwYXNzIGluIHN1YnNldHMgb2YgYWxsIHRocmVlIG9yCisgICAgLy8gb21pdCB0aGUg
b2JqZWN0IChzaW5jZSBpdCdzIG9wdGlvbmFsKS4KKyAgICAvLwogICAgIC8vIExldCdzIG5vdyBj
cmVhdGUgYW4gb2JqZWN0U3RvcmUgZm9yIHBlb3BsZS4gV2UnbGwgc3VwcGx5IGEga2V5IHBhdGgg
aW4gdGhpcyBjYXNlLgotICAgIHZhciBvYmplY3RTdG9yZSA9IGRiLmNyZWF0ZU9iamVjdFN0b3Jl
KCJwZW9wbGUiLCAiaWQiKTsKKyAgICB2YXIgb2JqZWN0U3RvcmUgPSBkYi5jcmVhdGVPYmplY3RT
dG9yZSgicGVvcGxlIiwge2tleVBhdGg6ICJpZCJ9KTsKIAogICAgIC8vIE5vdGljZSB0aGF0IGl0
IHJldHVybmVkIHN5bmNocm9ub3VzbHkuIFRoZSBydWxlIG9mIHRodW1iIGlzIHRoYXQgYW55IGNh
bGwgdGhhdCB0b3VjaGVzIChpbgogICAgIC8vIGFueSB3YXkpIGtleXMgb3IgdmFsdWVzIGlzIGFz
eW5jaHJvbm91cyBhbmQgYW55IG90aGVyIGNhbGwgKGJlc2lkZXMgc2V0VmVyc2lvbiBhbmQgb3Bl
bikgYXJlCmRpZmYgLS1naXQgYS9XZWJDb3JlL0NoYW5nZUxvZyBiL1dlYkNvcmUvQ2hhbmdlTG9n
CmluZGV4IDgyYWViY2UuLjJlZmUzZmYgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvQ2hhbmdlTG9nCisr
KyBiL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNDggQEAKKzIwMTAtMTEtMjQgIEplcmVt
eSBPcmxvdyAgPGpvcmxvd0BjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgQWRkIGFuIE9wdGlvbnNPYmplY3QgY2xhc3MgZm9yIElu
ZGV4ZWREQiAoYW5kIGxhdGVyIEdlb0xvY2F0aW9uKQorICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTAwMzAKKworICAgICAgICBHZW9Mb2NhdGlvbiBhbmQg
SW5kZXhlZERCIGJvdGggaGF2ZSB0aGUgY29uY2VwdCBvZiBhbiBvcHRpb25hbAorICAgICAgICBw
YXJhbWV0ZXIgdGhhdCBoYXMgdmFyaW91cyBvcHRpb25zIHN1cHBsaWVkIHdpdGggaXQuICBJbgor
ICAgICAgICBHZW9Mb2NhdGlvbiB0aGlzIHdhcyBkb25lIHdpdGggY3VzdG9tIGJpbmRpbmdzLCBi
dXQgSSdtIHRyeWluZyB0bworICAgICAgICBhdm9pZCB0aGF0IGZvciBJbmRleGVkREIuICAKKwor
ICAgICAgICBUaGlzIGZpcnN0IHBhdGNoIGltcGxlbWVudHMgaXQgaW4gVjggYW5kIG1ha2VzIGNy
ZWF0ZU9iamVjdFN0b3JlIHVzZSBpdC4KKyAgICAgICAgVGhlIG5leHQgcGF0Y2ggd2lsbCBjb3Zl
ciBHZW9Mb2NhdGlvbiBhbmQgSlNDLgorCisgICAgICAgIEV4aXN0aW5nIHRlc3QgbW9kaWZpZWQg
dG8gY292ZXIgdGhpcyBjaGFuZ2UuCisKKyAgICAgICAgKiBXZWJDb3JlLmd5cGk6CisgICAgICAg
ICogYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9yVjgucG06CisgICAgICAgICogYmluZGlu
Z3Mvc2NyaXB0cy90ZXN0L0NQUC9XZWJET01UZXN0T2JqLmNwcDoKKyAgICAgICAgKFdlYkRPTVRl
c3RPYmo6Om9wdGlvbnNPYmplY3QpOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9D
UFAvV2ViRE9NVGVzdE9iai5oOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9HT2Jq
ZWN0L1dlYktpdERPTVRlc3RDYWxsYmFjay5jcHA6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0
cy90ZXN0L0dPYmplY3QvV2ViS2l0RE9NVGVzdEludGVyZmFjZS5jcHA6CisgICAgICAgICogYmlu
ZGluZ3Mvc2NyaXB0cy90ZXN0L0dPYmplY3QvV2ViS2l0RE9NVGVzdE1lZGlhUXVlcnlMaXN0TGlz
dGVuZXIuY3BwOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9HT2JqZWN0L1dlYktp
dERPTVRlc3RPYmouY3BwOgorICAgICAgICAod2Via2l0X2RvbV90ZXN0X29ial9vcHRpb25zX29i
amVjdCk6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0dPYmplY3QvV2ViS2l0RE9N
VGVzdE9iai5oOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RPYmou
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25PcHRpb25z
T2JqZWN0KToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0T2JqLmg6
CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L09iakMvRE9NVGVzdE9iai5oOgorICAg
ICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9PYmpDL0RPTVRlc3RPYmoubW06CisgICAgICAg
ICgtW0RPTVRlc3RPYmogb3B0aW9uc09iamVjdDpvb286XSk6CisgICAgICAgICogYmluZGluZ3Mv
c2NyaXB0cy90ZXN0L1Rlc3RPYmouaWRsOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVz
dC9WOC9WOFRlc3RNZWRpYVF1ZXJ5TGlzdExpc3RlbmVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkNvbmZpZ3VyZVY4VGVzdE1lZGlhUXVlcnlMaXN0TGlzdGVuZXJUZW1wbGF0ZSk6CisgICAgICAg
ICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdE9iai5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpUZXN0T2JqSW50ZXJuYWw6Om9wdGlvbnNPYmplY3RDYWxsYmFjayk6CisgICAgICAgICog
c3RvcmFnZS9JREJEYXRhYmFzZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJREJEYXRhYmFzZTo6
Y3JlYXRlT2JqZWN0U3RvcmUpOgorICAgICAgICAqIHN0b3JhZ2UvSURCRGF0YWJhc2UuaDoKKyAg
ICAgICAgKFdlYkNvcmU6OklEQkRhdGFiYXNlOjpjcmVhdGVPYmplY3RTdG9yZSk6CisgICAgICAg
ICogc3RvcmFnZS9JREJEYXRhYmFzZS5pZGw6CisKIDIwMTAtMTEtMjMgIEplcmVteSBPcmxvdyAg
PGpvcmxvd0BjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCmRpZmYgLS1naXQgYS9XZWJDb3JlL1dlYkNvcmUuZ3lwaSBiL1dlYkNvcmUvV2ViQ29yZS5n
eXBpCmluZGV4IGNiZjc4MTQuLmViMTNjYjQgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvV2ViQ29yZS5n
eXBpCisrKyBiL1dlYkNvcmUvV2ViQ29yZS5neXBpCkBAIC03NDQsNiArNzQ0LDggQEAKICAgICAg
ICAgICAgICdiaW5kaW5ncy92OC9DaGlsZFRocmVhZERPTURhdGEuaCcsCiAgICAgICAgICAgICAn
YmluZGluZ3MvdjgvSURCQmluZGluZ1V0aWxpdGllcy5jcHAnLAogICAgICAgICAgICAgJ2JpbmRp
bmdzL3Y4L0lEQkJpbmRpbmdVdGlsaXRpZXMuaCcsCisgICAgICAgICAgICAnYmluZGluZ3Mvdjgv
T3B0aW9uc09iamVjdC5jcHAnLAorICAgICAgICAgICAgJ2JpbmRpbmdzL3Y4L09wdGlvbnNPYmpl
Y3QuaCcsCiAgICAgICAgICAgICAnYmluZGluZ3MvdjgvY3VzdG9tL1Y4Q2FudmFzUGl4ZWxBcnJh
eUN1c3RvbS5jcHAnLAogICAgICAgICAgICAgJ2JpbmRpbmdzL3Y4L2N1c3RvbS9WOEFycmF5QnVm
ZmVyVmlld0N1c3RvbS5oJywKICAgICAgICAgICAgICdiaW5kaW5ncy92OC9jdXN0b20vVjhBcnJh
eUJ1ZmZlckN1c3RvbS5jcHAnLApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRz
L0NvZGVHZW5lcmF0b3JWOC5wbSBiL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJh
dG9yVjgucG0KaW5kZXggN2VhNGM2My4uMTk2YmE5MiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9iaW5k
aW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JWOC5wbQorKysgYi9XZWJDb3JlL2JpbmRpbmdzL3Nj
cmlwdHMvQ29kZUdlbmVyYXRvclY4LnBtCkBAIC0yODA2LDYgKzI4MDYsNyBAQCBzdWIgR2V0TmF0
aXZlVHlwZQogICAgIHJldHVybiAiTm9kZSoiIGlmICR0eXBlIGVxICJFdmVudFRhcmdldCIgYW5k
ICRpc1BhcmFtZXRlcjsKICAgICByZXR1cm4gImRvdWJsZSIgaWYgJHR5cGUgZXEgIkRhdGUiOwog
ICAgIHJldHVybiAiU2NyaXB0VmFsdWUiIGlmICR0eXBlIGVxICJET01PYmplY3QiOworICAgIHJl
dHVybiAiT3B0aW9uc09iamVjdCIgaWYgJHR5cGUgZXEgIk9wdGlvbnNPYmplY3QiOwogCiAgICAg
cmV0dXJuICJTdHJpbmciIGlmICR0eXBlIGVxICJET01Vc2VyRGF0YSI7ICAjIEZJWE1FOiBUZW1w
b3JhcnkgaGFjaz8KIApAQCAtMjg4OSw2ICsyODkwLDExIEBAIHN1YiBKU1ZhbHVlVG9OYXRpdmUK
ICAgICAgICAgcmV0dXJuICJjcmVhdGVJREJLZXlGcm9tVmFsdWUoJHZhbHVlKSI7CiAgICAgfQog
CisgICAgaWYgKCR0eXBlIGVxICJPcHRpb25zT2JqZWN0IikgeworICAgICAgICAkaW1wbEluY2x1
ZGVzeyJPcHRpb25zT2JqZWN0LmgifSA9IDE7CisgICAgICAgIHJldHVybiAkdmFsdWU7CisgICAg
fQorCiAgICAgaWYgKCR0eXBlIGVxICJET01PYmplY3QiKSB7CiAgICAgICAgICRpbXBsSW5jbHVk
ZXN7IlNjcmlwdFZhbHVlLmgifSA9IDE7CiAgICAgICAgIHJldHVybiAiU2NyaXB0VmFsdWUoJHZh
bHVlKSI7CkBAIC0zMDM0LDYgKzMwNDAsNyBAQCBteSAlbm9uX3dyYXBwZXJfdHlwZXMgPSAoCiAg
ICAgJ05vZGVGaWx0ZXInID0+IDEsCiAgICAgJ0V2ZW50TGlzdGVuZXInID0+IDEsCiAgICAgJ0lE
QktleScgPT4gMSwKKyAgICAnT3B0aW9uc09iamVjdCcgPT4gMSwKICAgICAnRGF0ZScgPT4gMSwK
ICAgICAnTWVkaWFRdWVyeUxpc3RMaXN0ZW5lcicgPT4gMQogKTsKZGlmZiAtLWdpdCBhL1dlYkNv
cmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0NQUC9XZWJET01UZXN0T2JqLmNwcCBiL1dlYkNvcmUv
YmluZGluZ3Mvc2NyaXB0cy90ZXN0L0NQUC9XZWJET01UZXN0T2JqLmNwcAppbmRleCA5YThkOTA5
Li44MTljN2NmIDEwMDY0NAotLS0gYS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9DUFAv
V2ViRE9NVGVzdE9iai5jcHAKKysrIGIvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvQ1BQ
L1dlYkRPTVRlc3RPYmouY3BwCkBAIC0yNCw5ICsyNCwxMSBAQAogI2luY2x1ZGUgIkhUTUxOYW1l
cy5oIgogI2luY2x1ZGUgIklEQktleS5oIgogI2luY2x1ZGUgIktVUkwuaCIKKyNpbmNsdWRlICJP
cHRpb25zT2JqZWN0LmgiCiAjaW5jbHVkZSAiU2VyaWFsaXplZFNjcmlwdFZhbHVlLmgiCiAjaW5j
bHVkZSAiVGVzdE9iai5oIgogI2luY2x1ZGUgIldlYkRPTUlEQktleS5oIgorI2luY2x1ZGUgIldl
YkRPTU9wdGlvbnNPYmplY3QuaCIKICNpbmNsdWRlICJXZWJET01TdHJpbmcuaCIKICNpbmNsdWRl
ICJXZWJFeGNlcHRpb25IYW5kbGVyLmgiCiAjaW5jbHVkZSAiV2ViTmF0aXZlRXZlbnRMaXN0ZW5l
ci5oIgpAQCAtNjYyLDYgKzY2NCwxNCBAQCB2b2lkIFdlYkRPTVRlc3RPYmo6OmlkYktleShjb25z
dCBXZWJET01JREJLZXkmIGtleSkKICAgICBpbXBsKCktPmlkYktleSh0b1dlYkNvcmUoa2V5KSk7
CiB9CiAKK3ZvaWQgV2ViRE9NVGVzdE9iajo6b3B0aW9uc09iamVjdChjb25zdCBXZWJET01PcHRp
b25zT2JqZWN0JiBvbywgY29uc3QgV2ViRE9NT3B0aW9uc09iamVjdCYgb29vKQoreworICAgIGlm
ICghaW1wbCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBpbXBsKCktPm9wdGlvbnNPYmplY3Qo
dG9XZWJDb3JlKG9vKSwgdG9XZWJDb3JlKG9vbykpOworfQorCiB2b2lkIFdlYkRPTVRlc3RPYmo6
Om1ldGhvZFdpdGhFeGNlcHRpb24oKQogewogICAgIGlmICghaW1wbCgpKQpkaWZmIC0tZ2l0IGEv
V2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvQ1BQL1dlYkRPTVRlc3RPYmouaCBiL1dlYkNv
cmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0NQUC9XZWJET01UZXN0T2JqLmgKaW5kZXggZjI5Yjdk
Yy4uMGIzNTkzZCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvQ1BQ
L1dlYkRPTVRlc3RPYmouaAorKysgYi9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9DUFAv
V2ViRE9NVGVzdE9iai5oCkBAIC0zMiw2ICszMiw3IEBAIGNsYXNzIFRlc3RPYmo7CiAKIGNsYXNz
IFdlYkRPTUV2ZW50TGlzdGVuZXI7CiBjbGFzcyBXZWJET01JREJLZXk7CitjbGFzcyBXZWJET01P
cHRpb25zT2JqZWN0OwogY2xhc3MgV2ViRE9NU3RyaW5nOwogY2xhc3MgV2ViRE9NVGVzdE9iajsK
IApAQCAtMTM2LDYgKzEzNyw3IEBAIHB1YmxpYzoKICAgICBXZWJET01UZXN0T2JqIG1ldGhvZFRo
YXRSZXF1aXJlc0FsbEFyZ3NBbmRUaHJvd3MoY29uc3QgV2ViRE9NU3RyaW5nJiBzdHJBcmcsIGNv
bnN0IFdlYkRPTVRlc3RPYmomIG9iakFyZyk7CiAgICAgdm9pZCBzZXJpYWxpemVkVmFsdWUoY29u
c3QgV2ViRE9NU3RyaW5nJiBzZXJpYWxpemVkQXJnKTsKICAgICB2b2lkIGlkYktleShjb25zdCBX
ZWJET01JREJLZXkmIGtleSk7CisgICAgdm9pZCBvcHRpb25zT2JqZWN0KGNvbnN0IFdlYkRPTU9w
dGlvbnNPYmplY3QmIG9vLCBjb25zdCBXZWJET01PcHRpb25zT2JqZWN0JiBvb28pOwogICAgIHZv
aWQgbWV0aG9kV2l0aEV4Y2VwdGlvbigpOwogICAgIHZvaWQgY3VzdG9tTWV0aG9kKCk7CiAgICAg
dm9pZCBjdXN0b21NZXRob2RXaXRoQXJncyhpbnQgaW50QXJnLCBjb25zdCBXZWJET01TdHJpbmcm
IHN0ckFyZywgY29uc3QgV2ViRE9NVGVzdE9iaiYgb2JqQXJnKTsKZGlmZiAtLWdpdCBhL1dlYkNv
cmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0dPYmplY3QvV2ViS2l0RE9NVGVzdENhbGxiYWNrLmNw
cCBiL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0dPYmplY3QvV2ViS2l0RE9NVGVzdENh
bGxiYWNrLmNwcAppbmRleCAxOWZmMTY2Li41NTRjYzE1IDEwMDY0NAotLS0gYS9XZWJDb3JlL2Jp
bmRpbmdzL3NjcmlwdHMvdGVzdC9HT2JqZWN0L1dlYktpdERPTVRlc3RDYWxsYmFjay5jcHAKKysr
IGIvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvR09iamVjdC9XZWJLaXRET01UZXN0Q2Fs
bGJhY2suY3BwCkBAIC0yNSw2ICsyNSw3IEBACiAKICNpbmNsdWRlIDx3dGYvR2V0UHRyLmg+CiAj
aW5jbHVkZSA8d3RmL1JlZlB0ci5oPgorI2luY2x1ZGUgIkRPTU9iamVjdENhY2hlLmgiCiAjaW5j
bHVkZSAiRXhjZXB0aW9uQ29kZS5oIgogI2luY2x1ZGUgIkpTTWFpblRocmVhZEV4ZWNTdGF0ZS5o
IgogI2luY2x1ZGUgIlRlc3RDYWxsYmFjay5oIgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9iaW5kaW5n
cy9zY3JpcHRzL3Rlc3QvR09iamVjdC9XZWJLaXRET01UZXN0SW50ZXJmYWNlLmNwcCBiL1dlYkNv
cmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0dPYmplY3QvV2ViS2l0RE9NVGVzdEludGVyZmFjZS5j
cHAKaW5kZXggYTEzZGE0NS4uNmM5MDZlNCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9iaW5kaW5ncy9z
Y3JpcHRzL3Rlc3QvR09iamVjdC9XZWJLaXRET01UZXN0SW50ZXJmYWNlLmNwcAorKysgYi9XZWJD
b3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9HT2JqZWN0L1dlYktpdERPTVRlc3RJbnRlcmZhY2Uu
Y3BwCkBAIC0yNSw2ICsyNSw3IEBACiAKICNpbmNsdWRlIDx3dGYvR2V0UHRyLmg+CiAjaW5jbHVk
ZSA8d3RmL1JlZlB0ci5oPgorI2luY2x1ZGUgIkRPTU9iamVjdENhY2hlLmgiCiAjaW5jbHVkZSAi
RXhjZXB0aW9uQ29kZS5oIgogI2luY2x1ZGUgIkpTTWFpblRocmVhZEV4ZWNTdGF0ZS5oIgogI2lu
Y2x1ZGUgIlRlc3RJbnRlcmZhY2UuaCIKZGlmZiAtLWdpdCBhL1dlYkNvcmUvYmluZGluZ3Mvc2Ny
aXB0cy90ZXN0L0dPYmplY3QvV2ViS2l0RE9NVGVzdE1lZGlhUXVlcnlMaXN0TGlzdGVuZXIuY3Bw
IGIvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvR09iamVjdC9XZWJLaXRET01UZXN0TWVk
aWFRdWVyeUxpc3RMaXN0ZW5lci5jcHAKaW5kZXggZjVkZWQ3OS4uYTdkMzY0YyAxMDA2NDQKLS0t
IGEvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvR09iamVjdC9XZWJLaXRET01UZXN0TWVk
aWFRdWVyeUxpc3RMaXN0ZW5lci5jcHAKKysrIGIvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rl
c3QvR09iamVjdC9XZWJLaXRET01UZXN0TWVkaWFRdWVyeUxpc3RMaXN0ZW5lci5jcHAKQEAgLTIz
LDYgKzIzLDcgQEAKIAogI2luY2x1ZGUgPHd0Zi9HZXRQdHIuaD4KICNpbmNsdWRlIDx3dGYvUmVm
UHRyLmg+CisjaW5jbHVkZSAiRE9NT2JqZWN0Q2FjaGUuaCIKICNpbmNsdWRlICJFeGNlcHRpb25D
b2RlLmgiCiAjaW5jbHVkZSAiSlNNYWluVGhyZWFkRXhlY1N0YXRlLmgiCiAjaW5jbHVkZSAiVGVz
dE1lZGlhUXVlcnlMaXN0TGlzdGVuZXIuaCIKZGlmZiAtLWdpdCBhL1dlYkNvcmUvYmluZGluZ3Mv
c2NyaXB0cy90ZXN0L0dPYmplY3QvV2ViS2l0RE9NVGVzdE9iai5jcHAgYi9XZWJDb3JlL2JpbmRp
bmdzL3NjcmlwdHMvdGVzdC9HT2JqZWN0L1dlYktpdERPTVRlc3RPYmouY3BwCmluZGV4IDFiZjk5
ODMuLmVjMmM2ZGMgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0dP
YmplY3QvV2ViS2l0RE9NVGVzdE9iai5jcHAKKysrIGIvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRz
L3Rlc3QvR09iamVjdC9XZWJLaXRET01UZXN0T2JqLmNwcApAQCAtMjMsNiArMjMsNyBAQAogCiAj
aW5jbHVkZSA8d3RmL0dldFB0ci5oPgogI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KKyNpbmNsdWRl
ICJET01PYmplY3RDYWNoZS5oIgogI2luY2x1ZGUgIkV4Y2VwdGlvbkNvZGUuaCIKICNpbmNsdWRl
ICJIVE1MTmFtZXMuaCIKICNpbmNsdWRlICJKU01haW5UaHJlYWRFeGVjU3RhdGUuaCIKQEAgLTMx
LDYgKzMyLDggQEAKICNpbmNsdWRlICJnb2JqZWN0L0NvbnZlcnRUb1VURjhTdHJpbmcuaCIKICNp
bmNsdWRlICJ3ZWJraXQvV2ViS2l0RE9NSURCS2V5LmgiCiAjaW5jbHVkZSAid2Via2l0L1dlYktp
dERPTUlEQktleVByaXZhdGUuaCIKKyNpbmNsdWRlICJ3ZWJraXQvV2ViS2l0RE9NT3B0aW9uc09i
amVjdC5oIgorI2luY2x1ZGUgIndlYmtpdC9XZWJLaXRET01PcHRpb25zT2JqZWN0UHJpdmF0ZS5o
IgogI2luY2x1ZGUgIndlYmtpdC9XZWJLaXRET01TZXJpYWxpemVkU2NyaXB0VmFsdWUuaCIKICNp
bmNsdWRlICJ3ZWJraXQvV2ViS2l0RE9NU2VyaWFsaXplZFNjcmlwdFZhbHVlUHJpdmF0ZS5oIgog
I2luY2x1ZGUgIndlYmtpdC9XZWJLaXRET01UZXN0T2JqLmgiCkBAIC0yMTEsNiArMjE0LDI3IEBA
IHdlYmtpdF9kb21fdGVzdF9vYmpfaWRiX2tleShXZWJLaXRET01UZXN0T2JqKiBzZWxmLCBXZWJL
aXRET01JREJLZXkqIGtleSkKIH0KIAogdm9pZAord2Via2l0X2RvbV90ZXN0X29ial9vcHRpb25z
X29iamVjdChXZWJLaXRET01UZXN0T2JqKiBzZWxmLCBXZWJLaXRET01PcHRpb25zT2JqZWN0KiBv
bywgV2ViS2l0RE9NT3B0aW9uc09iamVjdCogb29vKQoreworICAgIGdfcmV0dXJuX2lmX2ZhaWwo
c2VsZik7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIFdl
YkNvcmU6OlRlc3RPYmogKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGdfcmV0dXJu
X2lmX2ZhaWwob28pOworICAgIGdfcmV0dXJuX2lmX2ZhaWwob29vKTsKKyAgICBXZWJDb3JlOjpP
cHRpb25zT2JqZWN0ICogY29udmVydGVkX29vID0gTlVMTDsKKyAgICBpZiAob28gIT0gTlVMTCkg
eworICAgICAgICBjb252ZXJ0ZWRfb28gPSBXZWJLaXQ6OmNvcmUob28pOworICAgICAgICBnX3Jl
dHVybl9pZl9mYWlsKGNvbnZlcnRlZF9vbyk7CisgICAgfQorICAgIFdlYkNvcmU6Ok9wdGlvbnNP
YmplY3QgKiBjb252ZXJ0ZWRfb29vID0gTlVMTDsKKyAgICBpZiAob29vICE9IE5VTEwpIHsKKyAg
ICAgICAgY29udmVydGVkX29vbyA9IFdlYktpdDo6Y29yZShvb28pOworICAgICAgICBnX3JldHVy
bl9pZl9mYWlsKGNvbnZlcnRlZF9vb28pOworICAgIH0KKyAgICBpdGVtLT5vcHRpb25zT2JqZWN0
KGNvbnZlcnRlZF9vbywgY29udmVydGVkX29vbyk7Cit9CisKK3ZvaWQKIHdlYmtpdF9kb21fdGVz
dF9vYmpfbWV0aG9kX3dpdGhfZXhjZXB0aW9uKFdlYktpdERPTVRlc3RPYmoqIHNlbGYsIEdFcnJv
ciAqKmVycm9yKQogewogICAgIGdfcmV0dXJuX2lmX2ZhaWwoc2VsZik7CmRpZmYgLS1naXQgYS9X
ZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9HT2JqZWN0L1dlYktpdERPTVRlc3RPYmouaCBi
L1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0dPYmplY3QvV2ViS2l0RE9NVGVzdE9iai5o
CmluZGV4IDJlZWJkYjEuLjQyZDFmY2QgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvYmluZGluZ3Mvc2Ny
aXB0cy90ZXN0L0dPYmplY3QvV2ViS2l0RE9NVGVzdE9iai5oCisrKyBiL1dlYkNvcmUvYmluZGlu
Z3Mvc2NyaXB0cy90ZXN0L0dPYmplY3QvV2ViS2l0RE9NVGVzdE9iai5oCkBAIC03Nyw2ICs3Nyw5
IEBAIFdFQktJVF9BUEkgdm9pZAogd2Via2l0X2RvbV90ZXN0X29ial9pZGJfa2V5KFdlYktpdERP
TVRlc3RPYmoqIHNlbGYsIFdlYktpdERPTUlEQktleSoga2V5KTsKIAogV0VCS0lUX0FQSSB2b2lk
Cit3ZWJraXRfZG9tX3Rlc3Rfb2JqX29wdGlvbnNfb2JqZWN0KFdlYktpdERPTVRlc3RPYmoqIHNl
bGYsIFdlYktpdERPTU9wdGlvbnNPYmplY3QqIG9vLCBXZWJLaXRET01PcHRpb25zT2JqZWN0KiBv
b28pOworCitXRUJLSVRfQVBJIHZvaWQKIHdlYmtpdF9kb21fdGVzdF9vYmpfbWV0aG9kX3dpdGhf
ZXhjZXB0aW9uKFdlYktpdERPTVRlc3RPYmoqIHNlbGYsIEdFcnJvciAqKmVycm9yKTsKIAogCmRp
ZmYgLS1naXQgYS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RPYmouY3Bw
IGIvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0T2JqLmNwcAppbmRleCA5
ODIwZmFiLi5kOGJmNjdlIDEwMDY0NAotLS0gYS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVz
dC9KUy9KU1Rlc3RPYmouY3BwCisrKyBiL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pT
L0pTVGVzdE9iai5jcHAKQEAgLTI3LDYgKzI3LDcgQEAKICNpbmNsdWRlICJJREJLZXkuaCIKICNp
bmNsdWRlICJKU0RPTUJpbmRpbmcuaCIKICNpbmNsdWRlICJKU0V2ZW50TGlzdGVuZXIuaCIKKyNp
bmNsdWRlICJKU09wdGlvbnNPYmplY3QuaCIKICNpbmNsdWRlICJKU1Rlc3RDYWxsYmFjay5oIgog
I2luY2x1ZGUgIkpTVGVzdE9iai5oIgogI2luY2x1ZGUgIkpTbG9nLmgiCkBAIC0xODEsNyArMTgy
LDcgQEAgYm9vbCBKU1Rlc3RPYmpDb25zdHJ1Y3Rvcjo6Z2V0T3duUHJvcGVydHlEZXNjcmlwdG9y
KEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgSWRlbnQKICNkZWZpbmUgVEhVTktfR0VORVJBVE9SKGdl
bmVyYXRvcikKICNlbmRpZgogCi1zdGF0aWMgY29uc3QgSGFzaFRhYmxlVmFsdWUgSlNUZXN0T2Jq
UHJvdG90eXBlVGFibGVWYWx1ZXNbNDddID0KK3N0YXRpYyBjb25zdCBIYXNoVGFibGVWYWx1ZSBK
U1Rlc3RPYmpQcm90b3R5cGVUYWJsZVZhbHVlc1s0OF0gPQogewogICAgIHsgIkNPTlNUX1ZBTFVF
XzAiLCBEb250RGVsZXRlIHwgUmVhZE9ubHksIChpbnRwdHJfdClzdGF0aWNfY2FzdDxQcm9wZXJ0
eVNsb3Q6OkdldFZhbHVlRnVuYz4oanNUZXN0T2JqQ09OU1RfVkFMVUVfMCksIChpbnRwdHJfdCkw
IFRIVU5LX0dFTkVSQVRPUigwKSB9LAogICAgIHsgIkNPTlNUX1ZBTFVFXzEiLCBEb250RGVsZXRl
IHwgUmVhZE9ubHksIChpbnRwdHJfdClzdGF0aWNfY2FzdDxQcm9wZXJ0eVNsb3Q6OkdldFZhbHVl
RnVuYz4oanNUZXN0T2JqQ09OU1RfVkFMVUVfMSksIChpbnRwdHJfdCkwIFRIVU5LX0dFTkVSQVRP
UigwKSB9LApAQCAtMjA0LDYgKzIwNSw3IEBAIHN0YXRpYyBjb25zdCBIYXNoVGFibGVWYWx1ZSBK
U1Rlc3RPYmpQcm90b3R5cGVUYWJsZVZhbHVlc1s0N10gPQogICAgIHsgIm1ldGhvZFRoYXRSZXF1
aXJlc0FsbEFyZ3NBbmRUaHJvd3MiLCBEb250RGVsZXRlIHwgRnVuY3Rpb24sIChpbnRwdHJfdClz
dGF0aWNfY2FzdDxOYXRpdmVGdW5jdGlvbj4oanNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRo
b2RUaGF0UmVxdWlyZXNBbGxBcmdzQW5kVGhyb3dzKSwgKGludHB0cl90KTIgVEhVTktfR0VORVJB
VE9SKDApIH0sCiAgICAgeyAic2VyaWFsaXplZFZhbHVlIiwgRG9udERlbGV0ZSB8IEZ1bmN0aW9u
LCAoaW50cHRyX3Qpc3RhdGljX2Nhc3Q8TmF0aXZlRnVuY3Rpb24+KGpzVGVzdE9ialByb3RvdHlw
ZUZ1bmN0aW9uU2VyaWFsaXplZFZhbHVlKSwgKGludHB0cl90KTEgVEhVTktfR0VORVJBVE9SKDAp
IH0sCiAgICAgeyAiaWRiS2V5IiwgRG9udERlbGV0ZSB8IEZ1bmN0aW9uLCAoaW50cHRyX3Qpc3Rh
dGljX2Nhc3Q8TmF0aXZlRnVuY3Rpb24+KGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uSWRiS2V5
KSwgKGludHB0cl90KTEgVEhVTktfR0VORVJBVE9SKDApIH0sCisgICAgeyAib3B0aW9uc09iamVj
dCIsIERvbnREZWxldGUgfCBGdW5jdGlvbiwgKGludHB0cl90KXN0YXRpY19jYXN0PE5hdGl2ZUZ1
bmN0aW9uPihqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk9wdGlvbnNPYmplY3QpLCAoaW50cHRy
X3QpMiBUSFVOS19HRU5FUkFUT1IoMCkgfSwKICAgICB7ICJtZXRob2RXaXRoRXhjZXB0aW9uIiwg
RG9udERlbGV0ZSB8IEZ1bmN0aW9uLCAoaW50cHRyX3Qpc3RhdGljX2Nhc3Q8TmF0aXZlRnVuY3Rp
b24+KGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aEV4Y2VwdGlvbiksIChpbnRw
dHJfdCkwIFRIVU5LX0dFTkVSQVRPUigwKSB9LAogICAgIHsgImN1c3RvbU1ldGhvZCIsIERvbnRE
ZWxldGUgfCBGdW5jdGlvbiwgKGludHB0cl90KXN0YXRpY19jYXN0PE5hdGl2ZUZ1bmN0aW9uPihq
c1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbkN1c3RvbU1ldGhvZCksIChpbnRwdHJfdCkwIFRIVU5L
X0dFTkVSQVRPUigwKSB9LAogICAgIHsgImN1c3RvbU1ldGhvZFdpdGhBcmdzIiwgRG9udERlbGV0
ZSB8IEZ1bmN0aW9uLCAoaW50cHRyX3Qpc3RhdGljX2Nhc3Q8TmF0aXZlRnVuY3Rpb24+KGpzVGVz
dE9ialByb3RvdHlwZUZ1bmN0aW9uQ3VzdG9tTWV0aG9kV2l0aEFyZ3MpLCAoaW50cHRyX3QpMyBU
SFVOS19HRU5FUkFUT1IoMCkgfSwKQEAgLTIzMyw3ICsyMzUsNyBAQCBzdGF0aWMgY29uc3QgSGFz
aFRhYmxlVmFsdWUgSlNUZXN0T2JqUHJvdG90eXBlVGFibGVWYWx1ZXNbNDddID0KIH07CiAKICN1
bmRlZiBUSFVOS19HRU5FUkFUT1IKLXN0YXRpYyBKU0NfQ09OU1RfSEFTSFRBQkxFIEhhc2hUYWJs
ZSBKU1Rlc3RPYmpQcm90b3R5cGVUYWJsZSA9IHsgMTM1LCAxMjcsIEpTVGVzdE9ialByb3RvdHlw
ZVRhYmxlVmFsdWVzLCAwIH07CitzdGF0aWMgSlNDX0NPTlNUX0hBU0hUQUJMRSBIYXNoVGFibGUg
SlNUZXN0T2JqUHJvdG90eXBlVGFibGUgPSB7IDEzNiwgMTI3LCBKU1Rlc3RPYmpQcm90b3R5cGVU
YWJsZVZhbHVlcywgMCB9OwogY29uc3QgQ2xhc3NJbmZvIEpTVGVzdE9ialByb3RvdHlwZTo6c19p
bmZvID0geyAiVGVzdE9ialByb3RvdHlwZSIsIDAsICZKU1Rlc3RPYmpQcm90b3R5cGVUYWJsZSwg
MCB9OwogCiBKU09iamVjdCogSlNUZXN0T2JqUHJvdG90eXBlOjpzZWxmKEV4ZWNTdGF0ZSogZXhl
YywgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCkKQEAgLTk5MCw2ICs5OTIsMzEgQEAgRW5j
b2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbklkYktl
eShFeGVjU3RhdGUqIGV4ZWMpCiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5l
ZCgpKTsKIH0KIAorRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5
cGVGdW5jdGlvbk9wdGlvbnNPYmplY3QoRXhlY1N0YXRlKiBleGVjKQoreworICAgIEpTVmFsdWUg
dGhpc1ZhbHVlID0gZXhlYy0+aG9zdFRoaXNWYWx1ZSgpOworICAgIGlmICghdGhpc1ZhbHVlLmlu
aGVyaXRzKCZKU1Rlc3RPYmo6OnNfaW5mbykpCisgICAgICAgIHJldHVybiB0aHJvd1ZNVHlwZUVy
cm9yKGV4ZWMpOworICAgIEpTVGVzdE9iaiogY2FzdGVkVGhpcyA9IHN0YXRpY19jYXN0PEpTVGVz
dE9iaio+KGFzT2JqZWN0KHRoaXNWYWx1ZSkpOworICAgIFRlc3RPYmoqIGltcCA9IHN0YXRpY19j
YXN0PFRlc3RPYmoqPihjYXN0ZWRUaGlzLT5pbXBsKCkpOworICAgIE9wdGlvbnNPYmplY3QqIG9v
ID0gdG9PcHRpb25zT2JqZWN0KGV4ZWMtPmFyZ3VtZW50KDApKTsKKyAgICBpZiAoZXhlYy0+aGFk
RXhjZXB0aW9uKCkpCisgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQo
KSk7CisKKyAgICBpbnQgYXJnc0NvdW50ID0gZXhlYy0+YXJndW1lbnRDb3VudCgpOworICAgIGlm
IChhcmdzQ291bnQgPD0gMSkgeworICAgICAgICBpbXAtPm9wdGlvbnNPYmplY3Qob28pOworICAg
ICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOworICAgIH0KKworICAg
IE9wdGlvbnNPYmplY3QqIG9vbyA9IHRvT3B0aW9uc09iamVjdChleGVjLT5hcmd1bWVudCgxKSk7
CisgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgICAgICByZXR1cm4gSlNWYWx1ZTo6
ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOworCisgICAgaW1wLT5vcHRpb25zT2JqZWN0KG9vLCBvb28p
OworICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7Cit9CisKIEVuY29k
ZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RX
aXRoRXhjZXB0aW9uKEV4ZWNTdGF0ZSogZXhlYykKIHsKICAgICBKU1ZhbHVlIHRoaXNWYWx1ZSA9
IGV4ZWMtPmhvc3RUaGlzVmFsdWUoKTsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvYmluZGluZ3Mvc2Ny
aXB0cy90ZXN0L0pTL0pTVGVzdE9iai5oIGIvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3Qv
SlMvSlNUZXN0T2JqLmgKaW5kZXggNjAxNGY3YS4uYzI3NDQ0YSAxMDA2NDQKLS0tIGEvV2ViQ29y
ZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0T2JqLmgKKysrIGIvV2ViQ29yZS9iaW5k
aW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0T2JqLmgKQEAgLTk2LDYgKzk2LDcgQEAgSlNDOjpF
bmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0
aG9kVGhhdFJlcXVpcmVzQWwKIEpTQzo6RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rl
c3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFRoYXRSZXF1aXJlc0FsbEFyZ3NBbmRUaHJvd3Mo
SlNDOjpFeGVjU3RhdGUqKTsKIEpTQzo6RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rl
c3RPYmpQcm90b3R5cGVGdW5jdGlvblNlcmlhbGl6ZWRWYWx1ZShKU0M6OkV4ZWNTdGF0ZSopOwog
SlNDOjpFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0
aW9uSWRiS2V5KEpTQzo6RXhlY1N0YXRlKik7CitKU0M6OkVuY29kZWRKU1ZhbHVlIEpTQ19IT1NU
X0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25PcHRpb25zT2JqZWN0KEpTQzo6RXhlY1N0
YXRlKik7CiBKU0M6OkVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90
eXBlRnVuY3Rpb25NZXRob2RXaXRoRXhjZXB0aW9uKEpTQzo6RXhlY1N0YXRlKik7CiBKU0M6OkVu
Y29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25DdXN0
b21NZXRob2QoSlNDOjpFeGVjU3RhdGUqKTsKIEpTQzo6RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1Rf
Q0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbkN1c3RvbU1ldGhvZFdpdGhBcmdzKEpTQzo6
RXhlY1N0YXRlKik7CmRpZmYgLS1naXQgYS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9P
YmpDL0RPTVRlc3RPYmouaCBiL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L09iakMvRE9N
VGVzdE9iai5oCmluZGV4IGZkNDAwOTUuLjc2NmQzMWYgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvYmlu
ZGluZ3Mvc2NyaXB0cy90ZXN0L09iakMvRE9NVGVzdE9iai5oCisrKyBiL1dlYkNvcmUvYmluZGlu
Z3Mvc2NyaXB0cy90ZXN0L09iakMvRE9NVGVzdE9iai5oCkBAIC0yOSw2ICsyOSw3IEBACiAjaWYg
V0VCS0lUX1ZFUlNJT05fTUFYX0FMTE9XRUQgPj0gV0VCS0lUX1ZFUlNJT05fTEFURVNUCiAKIEBj
bGFzcyBET01JREJLZXk7CitAY2xhc3MgRE9NT3B0aW9uc09iamVjdDsKIEBjbGFzcyBET01UZXN0
T2JqOwogQGNsYXNzIERPTWxvZzsKIEBjbGFzcyBOU1N0cmluZzsKQEAgLTEyNyw2ICsxMjgsNyBA
QCBlbnVtIHsKIC0gKERPTVRlc3RPYmogKiltZXRob2RUaGF0UmVxdWlyZXNBbGxBcmdzQW5kVGhy
b3dzOihOU1N0cmluZyAqKXN0ckFyZyBvYmpBcmc6KERPTVRlc3RPYmogKilvYmpBcmc7CiAtICh2
b2lkKXNlcmlhbGl6ZWRWYWx1ZTooTlNTdHJpbmcgKilzZXJpYWxpemVkQXJnOwogLSAodm9pZClp
ZGJLZXk6KERPTUlEQktleSAqKWtleTsKKy0gKHZvaWQpb3B0aW9uc09iamVjdDooRE9NT3B0aW9u
c09iamVjdCAqKW9vIG9vbzooRE9NT3B0aW9uc09iamVjdCAqKW9vbzsKIC0gKHZvaWQpbWV0aG9k
V2l0aEV4Y2VwdGlvbjsKIC0gKHZvaWQpY3VzdG9tTWV0aG9kOwogLSAodm9pZCljdXN0b21NZXRo
b2RXaXRoQXJnczooaW50KWludEFyZyBzdHJBcmc6KE5TU3RyaW5nICopc3RyQXJnIG9iakFyZzoo
RE9NVGVzdE9iaiAqKW9iakFyZzsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0
cy90ZXN0L09iakMvRE9NVGVzdE9iai5tbSBiL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0
L09iakMvRE9NVGVzdE9iai5tbQppbmRleCA2MTI1OTdmLi5hYzA0MjM1IDEwMDY0NAotLS0gYS9X
ZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9PYmpDL0RPTVRlc3RPYmoubW0KKysrIGIvV2Vi
Q29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvT2JqQy9ET01UZXN0T2JqLm1tCkBAIC0zNSw2ICsz
NSw3IEBACiAjaW1wb3J0ICJET01FdmVudEludGVybmFsLmgiCiAjaW1wb3J0ICJET01JREJLZXlJ
bnRlcm5hbC5oIgogI2ltcG9ydCAiRE9NTm9kZUludGVybmFsLmgiCisjaW1wb3J0ICJET01PcHRp
b25zT2JqZWN0SW50ZXJuYWwuaCIKICNpbXBvcnQgIkRPTVN0eWxlU2hlZXRJbnRlcm5hbC5oIgog
I2ltcG9ydCAiRE9NVGVzdE9iakludGVybmFsLmgiCiAjaW1wb3J0ICJET01sb2dJbnRlcm5hbC5o
IgpAQCAtNDUsNiArNDYsNyBAQAogI2ltcG9ydCAiSlNNYWluVGhyZWFkRXhlY1N0YXRlLmgiCiAj
aW1wb3J0ICJLVVJMLmgiCiAjaW1wb3J0ICJPYmpDRXZlbnRMaXN0ZW5lci5oIgorI2ltcG9ydCAi
T3B0aW9uc09iamVjdC5oIgogI2ltcG9ydCAiU2VyaWFsaXplZFNjcmlwdFZhbHVlLmgiCiAjaW1w
b3J0ICJUZXN0T2JqLmgiCiAjaW1wb3J0ICJUaHJlYWRDaGVjay5oIgpAQCAtNTMzLDYgKzUzNSwx
MiBAQAogICAgIElNUEwtPmlkYktleShjb3JlKGtleSkpOwogfQogCistICh2b2lkKW9wdGlvbnNP
YmplY3Q6KERPTU9wdGlvbnNPYmplY3QgKilvbyBvb286KERPTU9wdGlvbnNPYmplY3QgKilvb28K
K3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgSU1QTC0+
b3B0aW9uc09iamVjdChjb3JlKG9vKSwgY29yZShvb28pKTsKK30KKwogLSAodm9pZCltZXRob2RX
aXRoRXhjZXB0aW9uCiB7CiAgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRl
OwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVGVzdE9iai5pZGwg
Yi9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9UZXN0T2JqLmlkbAppbmRleCA1Mzc1MzRi
Li5jMGQwZTg4IDEwMDY0NAotLS0gYS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9UZXN0
T2JqLmlkbAorKysgYi9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9UZXN0T2JqLmlkbApA
QCAtNzQsNiArNzQsNyBAQCBtb2R1bGUgdGVzdCB7CiAKICAgICAgICAgdm9pZCBzZXJpYWxpemVk
VmFsdWUoaW4gU2VyaWFsaXplZFNjcmlwdFZhbHVlIHNlcmlhbGl6ZWRBcmcpOwogICAgICAgICB2
b2lkIGlkYktleShpbiBJREJLZXkga2V5KTsKKyAgICAgICAgdm9pZCBvcHRpb25zT2JqZWN0KGlu
IE9wdGlvbnNPYmplY3Qgb28sIGluIFtPcHRpb25hbF0gT3B0aW9uc09iamVjdCBvb28pOwogCiAg
ICAgICAgIC8vIEV4Y2VwdGlvbnMKICAgICAgICAgdm9pZCBtZXRob2RXaXRoRXhjZXB0aW9uKCkg
cmFpc2VzKERPTUV4Y2VwdGlvbik7CmRpZmYgLS1naXQgYS9XZWJDb3JlL2JpbmRpbmdzL3Njcmlw
dHMvdGVzdC9WOC9WOFRlc3RNZWRpYVF1ZXJ5TGlzdExpc3RlbmVyLmNwcCBiL1dlYkNvcmUvYmlu
ZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdE1lZGlhUXVlcnlMaXN0TGlzdGVuZXIuY3BwCmlu
ZGV4IGYxYzRlMmIuLmFiOWU2ZGIgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0
cy90ZXN0L1Y4L1Y4VGVzdE1lZGlhUXVlcnlMaXN0TGlzdGVuZXIuY3BwCisrKyBiL1dlYkNvcmUv
YmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdE1lZGlhUXVlcnlMaXN0TGlzdGVuZXIuY3Bw
CkBAIC01Nyw3ICs1Nyw3IEBAIHN0YXRpYyB2ODo6UGVyc2lzdGVudDx2ODo6RnVuY3Rpb25UZW1w
bGF0ZT4gQ29uZmlndXJlVjhUZXN0TWVkaWFRdWVyeUxpc3RMaXN0ZW5lCiB7CiAgICAgdjg6Okxv
Y2FsPHY4OjpTaWduYXR1cmU+IGRlZmF1bHRTaWduYXR1cmUgPSBjb25maWd1cmVUZW1wbGF0ZShk
ZXNjLCAiVGVzdE1lZGlhUXVlcnlMaXN0TGlzdGVuZXIiLCB2ODo6UGVyc2lzdGVudDx2ODo6RnVu
Y3Rpb25UZW1wbGF0ZT4oKSwgVjhUZXN0TWVkaWFRdWVyeUxpc3RMaXN0ZW5lcjo6aW50ZXJuYWxG
aWVsZENvdW50LAogICAgICAgICAwLCAwLAotICAgICAgICBUZXN0TWVkaWFRdWVyeUxpc3RMaXN0
ZW5lckNhbGxiYWNrcywgc2l6ZW9mKFRlc3RNZWRpYVF1ZXJ5TGlzdExpc3RlbmVyQ2FsbGJhY2tz
KSAvIHNpemVvZigqVGVzdE1lZGlhUXVlcnlMaXN0TGlzdGVuZXJDYWxsYmFja3MpKTsKKyAgICAg
ICAgVGVzdE1lZGlhUXVlcnlMaXN0TGlzdGVuZXJDYWxsYmFja3MsIFdURl9BUlJBWV9MRU5HVEgo
VGVzdE1lZGlhUXVlcnlMaXN0TGlzdGVuZXJDYWxsYmFja3MpKTsKICAgICB2ODo6TG9jYWw8djg6
Ok9iamVjdFRlbXBsYXRlPiBpbnN0YW5jZSA9IGRlc2MtPkluc3RhbmNlVGVtcGxhdGUoKTsKICAg
ICB2ODo6TG9jYWw8djg6Ok9iamVjdFRlbXBsYXRlPiBwcm90byA9IGRlc2MtPlByb3RvdHlwZVRl
bXBsYXRlKCk7CiAgICAgCmRpZmYgLS1naXQgYS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVz
dC9WOC9WOFRlc3RPYmouY3BwIGIvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhU
ZXN0T2JqLmNwcAppbmRleCBjNGE3NmFjLi5lMDZkM2YyIDEwMDY0NAotLS0gYS9XZWJDb3JlL2Jp
bmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRlc3RPYmouY3BwCisrKyBiL1dlYkNvcmUvYmluZGlu
Z3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdE9iai5jcHAKQEAgLTI1LDYgKzI1LDcgQEAKICNpbmNs
dWRlICJIVE1MTmFtZXMuaCIKICNpbmNsdWRlICJJREJCaW5kaW5nVXRpbGl0aWVzLmgiCiAjaW5j
bHVkZSAiSURCS2V5LmgiCisjaW5jbHVkZSAiT3B0aW9uc09iamVjdC5oIgogI2luY2x1ZGUgIlJ1
bnRpbWVFbmFibGVkRmVhdHVyZXMuaCIKICNpbmNsdWRlICJTY3JpcHRBcmd1bWVudHMuaCIKICNp
bmNsdWRlICJTY3JpcHRDYWxsU3RhY2suaCIKQEAgLTcyNyw2ICs3MjgsMjAgQEAgc3RhdGljIHY4
OjpIYW5kbGU8djg6OlZhbHVlPiBpZGJLZXlDYWxsYmFjayhjb25zdCB2ODo6QXJndW1lbnRzJiBh
cmdzKQogICAgIHJldHVybiB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4oKTsKIH0KIAorc3RhdGljIHY4
OjpIYW5kbGU8djg6OlZhbHVlPiBvcHRpb25zT2JqZWN0Q2FsbGJhY2soY29uc3Qgdjg6OkFyZ3Vt
ZW50cyYgYXJncykKK3sKKyAgICBJTkNfU1RBVFMoIkRPTS5UZXN0T2JqLm9wdGlvbnNPYmplY3Qi
KTsKKyAgICBUZXN0T2JqKiBpbXAgPSBWOFRlc3RPYmo6OnRvTmF0aXZlKGFyZ3MuSG9sZGVyKCkp
OworICAgIEVYQ0VQVElPTl9CTE9DSyhPcHRpb25zT2JqZWN0LCBvbywgYXJnc1swXSk7CisgICAg
aWYgKGFyZ3MuTGVuZ3RoKCkgPD0gMSkgeworICAgICAgICBpbXAtPm9wdGlvbnNPYmplY3Qob28p
OworICAgICAgICByZXR1cm4gdjg6OkhhbmRsZTx2ODo6VmFsdWU+KCk7CisgICAgfQorICAgIEVY
Q0VQVElPTl9CTE9DSyhPcHRpb25zT2JqZWN0LCBvb28sIGFyZ3NbMV0pOworICAgIGltcC0+b3B0
aW9uc09iamVjdChvbywgb29vKTsKKyAgICByZXR1cm4gdjg6OkhhbmRsZTx2ODo6VmFsdWU+KCk7
Cit9CisKIHN0YXRpYyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gbWV0aG9kV2l0aEV4Y2VwdGlvbkNh
bGxiYWNrKGNvbnN0IHY4OjpBcmd1bWVudHMmIGFyZ3MpCiB7CiAgICAgSU5DX1NUQVRTKCJET00u
VGVzdE9iai5tZXRob2RXaXRoRXhjZXB0aW9uIik7CkBAIC0xMjAxLDYgKzEyMTYsNyBAQCBzdGF0
aWMgY29uc3QgQmF0Y2hlZENhbGxiYWNrIFRlc3RPYmpDYWxsYmFja3NbXSA9IHsKICAgICB7Im9i
ak1ldGhvZCIsIFRlc3RPYmpJbnRlcm5hbDo6b2JqTWV0aG9kQ2FsbGJhY2t9LAogICAgIHsic2Vy
aWFsaXplZFZhbHVlIiwgVGVzdE9iakludGVybmFsOjpzZXJpYWxpemVkVmFsdWVDYWxsYmFja30s
CiAgICAgeyJpZGJLZXkiLCBUZXN0T2JqSW50ZXJuYWw6OmlkYktleUNhbGxiYWNrfSwKKyAgICB7
Im9wdGlvbnNPYmplY3QiLCBUZXN0T2JqSW50ZXJuYWw6Om9wdGlvbnNPYmplY3RDYWxsYmFja30s
CiAgICAgeyJtZXRob2RXaXRoRXhjZXB0aW9uIiwgVGVzdE9iakludGVybmFsOjptZXRob2RXaXRo
RXhjZXB0aW9uQ2FsbGJhY2t9LAogICAgIHsiY3VzdG9tTWV0aG9kIiwgVjhUZXN0T2JqOjpjdXN0
b21NZXRob2RDYWxsYmFja30sCiAgICAgeyJjdXN0b21NZXRob2RXaXRoQXJncyIsIFY4VGVzdE9i
ajo6Y3VzdG9tTWV0aG9kV2l0aEFyZ3NDYWxsYmFja30sCmRpZmYgLS1naXQgYS9XZWJDb3JlL2Jp
bmRpbmdzL3Y4L09wdGlvbnNPYmplY3QuY3BwIGIvV2ViQ29yZS9iaW5kaW5ncy92OC9PcHRpb25z
T2JqZWN0LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZGMzNzE4Ci0t
LSAvZGV2L251bGwKKysrIGIvV2ViQ29yZS9iaW5kaW5ncy92OC9PcHRpb25zT2JqZWN0LmNwcApA
QCAtMCwwICsxLDk2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBB
TlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBM
T1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Ug
T0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIk9w
dGlvbnNPYmplY3QuaCIKKyNpbmNsdWRlICJWOEJpbmRpbmcuaCIKKworbmFtZXNwYWNlIFdlYkNv
cmUgeworCitPcHRpb25zT2JqZWN0OjpPcHRpb25zT2JqZWN0KCkKK3sKK30KKworT3B0aW9uc09i
amVjdDo6T3B0aW9uc09iamVjdChjb25zdCB2ODo6TG9jYWw8djg6OlZhbHVlPiYgb3B0aW9ucykK
KyAgICA6IG1fb3B0aW9ucyhvcHRpb25zKQoreworfQorCitPcHRpb25zT2JqZWN0Ojp+T3B0aW9u
c09iamVjdCgpCit7Cit9CisKK09wdGlvbnNPYmplY3QmIE9wdGlvbnNPYmplY3Q6Om9wZXJhdG9y
PShjb25zdCBPcHRpb25zT2JqZWN0JiBvcHRpb25zT2JqZWN0KQoreworICAgIG1fb3B0aW9ucyA9
IG9wdGlvbnNPYmplY3QubV9vcHRpb25zOworICAgIHJldHVybiAqdGhpczsKK30KKworYm9vbCBP
cHRpb25zT2JqZWN0Ojp1bmRlZmluZWRPck51bGwoKSBjb25zdAoreworICAgIGlmIChtX29wdGlv
bnMuSXNFbXB0eSgpKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICByZXR1cm4gaXNVbmRlZmlu
ZWRPck51bGwobV9vcHRpb25zKTsKK30KKworYm9vbCBPcHRpb25zT2JqZWN0OjpnZXRLZXlCb29s
KGNvbnN0IFN0cmluZyYga2V5LCBib29sJiB2YWx1ZSkgY29uc3QKK3sKKyAgICB2ODo6TG9jYWw8
djg6OlZhbHVlPiB2OFZhbHVlOworICAgIGlmICghZ2V0S2V5KGtleSwgdjhWYWx1ZSkpCisgICAg
ICAgIHJldHVybiBmYWxzZTsKKworICAgIGlmICghdjhWYWx1ZS0+SXNCb29sZWFuKCkpCisgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICB2ODo6TG9jYWw8djg6OkJvb2xlYW4+IHY4Qm9vbCA9IHY4
VmFsdWUtPlRvQm9vbGVhbigpOworICAgIEFTU0VSVCghdjhCb29sLklzRW1wdHkoKSk7CisKKyAg
ICB2YWx1ZSA9IHY4Qm9vbC0+VmFsdWUoKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBP
cHRpb25zT2JqZWN0OjpnZXRLZXlTdHJpbmcoY29uc3QgU3RyaW5nJiBrZXksIFN0cmluZyYgdmFs
dWUpIGNvbnN0Cit7CisgICAgdjg6OkxvY2FsPHY4OjpWYWx1ZT4gdjhWYWx1ZTsKKyAgICBpZiAo
IWdldEtleShrZXksIHY4VmFsdWUpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBpZiAo
IXY4VmFsdWUtPklzU3RyaW5nKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIHZhbHVl
ID0gdjhWYWx1ZVRvV2ViQ29yZVN0cmluZyh2OFZhbHVlKTsKKyAgICByZXR1cm4gIXY4VmFsdWUu
SXNFbXB0eSgpOworfQorCitib29sIE9wdGlvbnNPYmplY3Q6OmdldEtleShjb25zdCBTdHJpbmcm
IGtleSwgdjg6OkxvY2FsPHY4OjpWYWx1ZT4mIHZhbHVlKSBjb25zdAoreworICAgIGlmICh1bmRl
ZmluZWRPck51bGwoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIHY4OjpMb2NhbDx2ODo6
T2JqZWN0PiBvcHRpb25zID0gbV9vcHRpb25zLT5Ub09iamVjdCgpOworICAgIEFTU0VSVCghb3B0
aW9ucy5Jc0VtcHR5KCkpOworICAgIHZhbHVlID0gb3B0aW9ucy0+R2V0KHY4U3RyaW5nKGtleSkp
OworICAgIHJldHVybiAhdmFsdWUuSXNFbXB0eSgpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJD
b3JlCmRpZmYgLS1naXQgYS9XZWJDb3JlL2JpbmRpbmdzL3Y4L09wdGlvbnNPYmplY3QuaCBiL1dl
YkNvcmUvYmluZGluZ3MvdjgvT3B0aW9uc09iamVjdC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAuLjlkYTA3N2EKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJDb3JlL2JpbmRpbmdz
L3Y4L09wdGlvbnNPYmplY3QuaApAQCAtMCwwICsxLDU3IEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRS
SUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9T
RSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBPcHRp
b25zT2JqZWN0X2gKKyNkZWZpbmUgT3B0aW9uc09iamVjdF9oCisKKyNpbmNsdWRlICJQbGF0Zm9y
bVN0cmluZy5oIgorI2luY2x1ZGUgPHY4Lmg+CisjaW5jbHVkZSA8d3RmL05vbkNvcHlhYmxlLmg+
CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworLy8gSU1QT1JUQU5UOiBUaGlzIHNob3VsZCBvbmx5
IGJlIGFsbG9jYXRlZCBvbiB0aGUgc3RhY2sgZ2l2ZW4gdGhhdCBpdCBzdG9yZXMgdGhlCisvLyAg
ICAgICAgICAgIG9iamVjdCBhcyBhIHY4OjpMb2NhbCB3aGljaCBpcyBvbmx5IGFsbG93ZWQgdG8g
YmUgb24gdGhlIHN0YWNrLgorY2xhc3MgT3B0aW9uc09iamVjdCB7CitwdWJsaWM6CisgICAgT3B0
aW9uc09iamVjdCgpOworICAgIE9wdGlvbnNPYmplY3QoY29uc3Qgdjg6OkxvY2FsPHY4OjpWYWx1
ZT4mIG9wdGlvbnMpOworICAgIH5PcHRpb25zT2JqZWN0KCk7CisKKyAgICBPcHRpb25zT2JqZWN0
JiBvcGVyYXRvcj0oY29uc3QgT3B0aW9uc09iamVjdCYpOworCisgICAgYm9vbCB1bmRlZmluZWRP
ck51bGwoKSBjb25zdDsKKyAgICBib29sIGdldEtleUJvb2woY29uc3QgU3RyaW5nJiBrZXksIGJv
b2wmIHZhbHVlKSBjb25zdDsKKyAgICBib29sIGdldEtleVN0cmluZyhjb25zdCBTdHJpbmcmIGtl
eSwgU3RyaW5nJiB2YWx1ZSkgY29uc3Q7CisKK3ByaXZhdGU6CisgICAgYm9vbCBnZXRLZXkoY29u
c3QgU3RyaW5nJiBrZXksIHY4OjpMb2NhbDx2ODo6VmFsdWU+JikgY29uc3Q7CisKKyAgICB2ODo6
TG9jYWw8djg6OlZhbHVlPiBtX29wdGlvbnM7Cit9OworCit9CisKKyNlbmRpZiAvLyBPcHRpb25z
T2JqZWN0X2gKZGlmZiAtLWdpdCBhL1dlYkNvcmUvc3RvcmFnZS9JREJEYXRhYmFzZS5jcHAgYi9X
ZWJDb3JlL3N0b3JhZ2UvSURCRGF0YWJhc2UuY3BwCmluZGV4IDE1MzZiYTcuLjcyZmYxN2QgMTAw
NjQ0Ci0tLSBhL1dlYkNvcmUvc3RvcmFnZS9JREJEYXRhYmFzZS5jcHAKKysrIGIvV2ViQ29yZS9z
dG9yYWdlL0lEQkRhdGFiYXNlLmNwcApAQCAtNTYsMTMgKzU2LDE5IEBAIHZvaWQgSURCRGF0YWJh
c2U6OnNldFNldFZlcnNpb25UcmFuc2FjdGlvbihJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZh
Y2UqIHRyYW5zCiAgICAgbV9zZXRWZXJzaW9uVHJhbnNhY3Rpb24gPSB0cmFuc2FjdGlvbjsKIH0K
IAotUGFzc1JlZlB0cjxJREJPYmplY3RTdG9yZT4gSURCRGF0YWJhc2U6OmNyZWF0ZU9iamVjdFN0
b3JlKGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgU3RyaW5nJiBrZXlQYXRoLCBib29sIGF1dG9J
bmNyZW1lbnQsIEV4Y2VwdGlvbkNvZGUmIGVjKQorUGFzc1JlZlB0cjxJREJPYmplY3RTdG9yZT4g
SURCRGF0YWJhc2U6OmNyZWF0ZU9iamVjdFN0b3JlKGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3Qg
T3B0aW9uc09iamVjdCYgb3B0aW9ucywgRXhjZXB0aW9uQ29kZSYgZWMpCiB7CiAgICAgaWYgKCFt
X3NldFZlcnNpb25UcmFuc2FjdGlvbikgewogICAgICAgICBlYyA9IElEQkRhdGFiYXNlRXhjZXB0
aW9uOjpOT1RfQUxMT1dFRF9FUlI7CiAgICAgICAgIHJldHVybiAwOwogICAgIH0KIAorICAgIFN0
cmluZyBrZXlQYXRoOworICAgIG9wdGlvbnMuZ2V0S2V5U3RyaW5nKCJrZXlQYXRoIiwga2V5UGF0
aCk7CisgICAgYm9vbCBhdXRvSW5jcmVtZW50ID0gZmFsc2U7CisgICAgb3B0aW9ucy5nZXRLZXlC
b29sKCJhdXRvSW5jcmVtZW50IiwgYXV0b0luY3JlbWVudCk7CisgICAgLy8gRklYTUU6IExvb2sg
dXAgZXZpY3RhYmxlIGFuZCBwYXNzIHRoYXQgb24gYXMgd2VsbC4KKwogICAgIFJlZlB0cjxJREJP
YmplY3RTdG9yZUJhY2tlbmRJbnRlcmZhY2U+IG9iamVjdFN0b3JlID0gbV9iYWNrZW5kLT5jcmVh
dGVPYmplY3RTdG9yZShuYW1lLCBrZXlQYXRoLCBhdXRvSW5jcmVtZW50LCBtX3NldFZlcnNpb25U
cmFuc2FjdGlvbi5nZXQoKSwgZWMpOwogICAgIGlmICghb2JqZWN0U3RvcmUpIHsKICAgICAgICAg
Ly8gRklYTUU6IEFTU0VSVChlYykgb25jZSBVTktOT1dOX0VSUiBpcyBub3QgMC4KZGlmZiAtLWdp
dCBhL1dlYkNvcmUvc3RvcmFnZS9JREJEYXRhYmFzZS5oIGIvV2ViQ29yZS9zdG9yYWdlL0lEQkRh
dGFiYXNlLmgKaW5kZXggZGY1NmY0Ni4uM2UzMzQ3MiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9zdG9y
YWdlL0lEQkRhdGFiYXNlLmgKKysrIGIvV2ViQ29yZS9zdG9yYWdlL0lEQkRhdGFiYXNlLmgKQEAg
LTMxLDYgKzMxLDcgQEAKICNpbmNsdWRlICJJREJEYXRhYmFzZUJhY2tlbmRJbnRlcmZhY2UuaCIK
ICNpbmNsdWRlICJJREJPYmplY3RTdG9yZS5oIgogI2luY2x1ZGUgIklEQlRyYW5zYWN0aW9uLmgi
CisjaW5jbHVkZSAiT3B0aW9uc09iamVjdC5oIgogI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+
CiAjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KICNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CkBA
IC01OSwxMyArNjAsMTIgQEAgcHVibGljOgogICAgIFBhc3NSZWZQdHI8RE9NU3RyaW5nTGlzdD4g
b2JqZWN0U3RvcmVzKCkgY29uc3QgeyByZXR1cm4gbV9iYWNrZW5kLT5vYmplY3RTdG9yZXMoKTsg
fQogCiAgICAgLy8gRklYTUU6IFRyeSB0byBtb2RpZnkgdGhlIGNvZGUgZ2VuZXJhdG9yIHNvIHRo
aXMgaXMgdW5uZWVkZWQuCi0gICAgUGFzc1JlZlB0cjxJREJPYmplY3RTdG9yZT4gY3JlYXRlT2Jq
ZWN0U3RvcmUoY29uc3QgU3RyaW5nJiBuYW1lLCBFeGNlcHRpb25Db2RlJiBlYykgeyByZXR1cm4g
Y3JlYXRlT2JqZWN0U3RvcmUobmFtZSwgU3RyaW5nKCksIGVjKTsgfQotICAgIFBhc3NSZWZQdHI8
SURCT2JqZWN0U3RvcmU+IGNyZWF0ZU9iamVjdFN0b3JlKGNvbnN0IFN0cmluZyYgbmFtZSwgY29u
c3QgU3RyaW5nJiBrZXlQYXRoLCBFeGNlcHRpb25Db2RlJiBlYykgeyByZXR1cm4gY3JlYXRlT2Jq
ZWN0U3RvcmUobmFtZSwga2V5UGF0aCwgZmFsc2UsIGVjKTsgfQorICAgIFBhc3NSZWZQdHI8SURC
T2JqZWN0U3RvcmU+IGNyZWF0ZU9iamVjdFN0b3JlKGNvbnN0IFN0cmluZyYgbmFtZSwgRXhjZXB0
aW9uQ29kZSYgZWMpIHsgcmV0dXJuIGNyZWF0ZU9iamVjdFN0b3JlKG5hbWUsIE9wdGlvbnNPYmpl
Y3QoKSwgZWMpOyB9CiAgICAgUGFzc1JlZlB0cjxJREJUcmFuc2FjdGlvbj4gdHJhbnNhY3Rpb24o
U2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwgRXhjZXB0aW9uQ29kZSYgZWMpIHsgcmV0
dXJuIHRyYW5zYWN0aW9uKGNvbnRleHQsIDAsIGVjKTsgfQogICAgIFBhc3NSZWZQdHI8SURCVHJh
bnNhY3Rpb24+IHRyYW5zYWN0aW9uKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIERP
TVN0cmluZ0xpc3QqIHN0b3JlTmFtZXMsIEV4Y2VwdGlvbkNvZGUmIGVjKSB7IHJldHVybiB0cmFu
c2FjdGlvbihjb250ZXh0LCBzdG9yZU5hbWVzLCBJREJUcmFuc2FjdGlvbjo6UkVBRF9PTkxZLCBl
Yyk7IH0KICAgICBQYXNzUmVmUHRyPElEQlRyYW5zYWN0aW9uPiB0cmFuc2FjdGlvbihTY3JpcHRF
eGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBET01TdHJpbmdMaXN0KiBzdG9yZU5hbWVzLCB1bnNp
Z25lZCBzaG9ydCBtb2RlLCBFeGNlcHRpb25Db2RlJiBlYykgeyByZXR1cm4gdHJhbnNhY3Rpb24o
Y29udGV4dCwgc3RvcmVOYW1lcywgbW9kZSwgMCwgZWMpOyB9IC8vIEZJWE1FOiB3aGF0IHNob3Vs
ZCB0aGUgZGVmYXVsdCB0aW1lb3V0IGJlPwogCi0gICAgUGFzc1JlZlB0cjxJREJPYmplY3RTdG9y
ZT4gY3JlYXRlT2JqZWN0U3RvcmUoY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBTdHJpbmcmIGtl
eVBhdGgsIGJvb2wgYXV0b0luY3JlbWVudCwgRXhjZXB0aW9uQ29kZSYpOworICAgIFBhc3NSZWZQ
dHI8SURCT2JqZWN0U3RvcmU+IGNyZWF0ZU9iamVjdFN0b3JlKGNvbnN0IFN0cmluZyYgbmFtZSwg
Y29uc3QgT3B0aW9uc09iamVjdCYsIEV4Y2VwdGlvbkNvZGUmKTsKICAgICB2b2lkIHJlbW92ZU9i
amVjdFN0b3JlKGNvbnN0IFN0cmluZyYgbmFtZSwgRXhjZXB0aW9uQ29kZSYpOwogICAgIFBhc3NS
ZWZQdHI8SURCUmVxdWVzdD4gc2V0VmVyc2lvbihTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgY29u
c3QgU3RyaW5nJiB2ZXJzaW9uLCBFeGNlcHRpb25Db2RlJik7CiAgICAgUGFzc1JlZlB0cjxJREJU
cmFuc2FjdGlvbj4gdHJhbnNhY3Rpb24oU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIERPTVN0cmlu
Z0xpc3QqLCB1bnNpZ25lZCBzaG9ydCBtb2RlLCB1bnNpZ25lZCBsb25nIHRpbWVvdXQsIEV4Y2Vw
dGlvbkNvZGUmKTsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvc3RvcmFnZS9JREJEYXRhYmFzZS5pZGwg
Yi9XZWJDb3JlL3N0b3JhZ2UvSURCRGF0YWJhc2UuaWRsCmluZGV4IDFhYjViMGIuLmIwOGQ0NTkg
MTAwNjQ0Ci0tLSBhL1dlYkNvcmUvc3RvcmFnZS9JREJEYXRhYmFzZS5pZGwKKysrIGIvV2ViQ29y
ZS9zdG9yYWdlL0lEQkRhdGFiYXNlLmlkbApAQCAtMzIsNyArMzIsNyBAQCBtb2R1bGUgc3RvcmFn
ZSB7CiAgICAgICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBET01TdHJpbmcgdmVyc2lvbjsKICAgICAg
ICAgcmVhZG9ubHkgYXR0cmlidXRlIERPTVN0cmluZ0xpc3Qgb2JqZWN0U3RvcmVzOwogCi0gICAg
ICAgIElEQk9iamVjdFN0b3JlIGNyZWF0ZU9iamVjdFN0b3JlKGluIERPTVN0cmluZyBuYW1lLCBp
biBbT3B0aW9uYWwsIENvbnZlcnROdWxsVG9OdWxsU3RyaW5nXSBET01TdHJpbmcga2V5UGF0aCwg
aW4gW09wdGlvbmFsXSBib29sZWFuIGF1dG9JbmNyZW1lbnQpCisgICAgICAgIElEQk9iamVjdFN0
b3JlIGNyZWF0ZU9iamVjdFN0b3JlKGluIERPTVN0cmluZyBuYW1lLCBpbiBbT3B0aW9uYWxdIE9w
dGlvbnNPYmplY3Qgb3B0aW9ucykKICAgICAgICAgICAgIHJhaXNlcyAoSURCRGF0YWJhc2VFeGNl
cHRpb24pOwogICAgICAgICB2b2lkIHJlbW92ZU9iamVjdFN0b3JlKGluIERPTVN0cmluZyBuYW1l
KQogICAgICAgICAgICAgcmFpc2VzIChJREJEYXRhYmFzZUV4Y2VwdGlvbik7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>74844</attachid>
            <date>2010-11-25 02:38:07 -0800</date>
            <delta_ts>2010-11-25 03:48:14 -0800</delta_ts>
            <desc>andrei&apos;s changes</desc>
            <filename>a</filename>
            <type>text/plain</type>
            <size>37189</size>
            <attacher name="Jeremy Orlow">jorlow</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxv
ZwppbmRleCA2YjVmNzU5Li45MGM0M2UyIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VM
b2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTQgQEAKKzIwMTAtMTEt
MjQgIEplcmVteSBPcmxvdyAgPGpvcmxvd0BjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQWRkIGFuIE9wdGlvbnNPYmplY3QgY2xh
c3MgZm9yIEluZGV4ZWREQiAoYW5kIGxhdGVyIEdlb0xvY2F0aW9uKQorICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTAwMzAKKworICAgICAgICBFeGlzdGlu
ZyB0ZXN0IGNvdmVycyB0aGlzIGNhc2UuCisKKyAgICAgICAgKiBzdG9yYWdlL2luZGV4ZWRkYi90
dXRvcmlhbC5odG1sOgorCiAyMDEwLTExLTIzICBKZXJlbXkgT3Jsb3cgIDxqb3Jsb3dAY2hyb21p
dW0ub3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5IFN0ZXZlIEJsb2NrLgpkaWZmIC0tZ2l0IGEv
TGF5b3V0VGVzdHMvc3RvcmFnZS9pbmRleGVkZGIvY3JlYXRlT2JqZWN0U3RvcmVPcHRpb25zLWV4
cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL3N0b3JhZ2UvaW5kZXhlZGRiL2NyZWF0ZU9iamVjdFN0
b3JlT3B0aW9ucy1leHBlY3RlZC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MC4uYWVjMzgxZgotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL3N0b3JhZ2UvaW5kZXhl
ZGRiL2NyZWF0ZU9iamVjdFN0b3JlT3B0aW9ucy1leHBlY3RlZC50eHQKQEAgLTAsMCArMSwyOSBA
QAorVGVzdCBJbmRleGVkREIncyBjcmVhdGVPYmplY3RTdG9yZSdzIHZhcmlvdXMgb3B0aW9ucwor
CitPbiBzdWNjZXNzLCB5b3Ugd2lsbCBzZWUgYSBzZXJpZXMgb2YgIlBBU1MiIG1lc3NhZ2VzLCBm
b2xsb3dlZCBieSAiVEVTVCBDT01QTEVURSIuCisKKworUEFTUyAnd2Via2l0SW5kZXhlZERCJyBp
biB3aW5kb3cgaXMgdHJ1ZQorUEFTUyB3ZWJraXRJbmRleGVkREIgPT0gbnVsbCBpcyBmYWxzZQor
d2Via2l0SW5kZXhlZERCLm9wZW4oJ25hbWUnLCAnZGVzY3JpcHRpb24nKQorUEFTUyAnb25zdWNj
ZXNzJyBpbiByZXN1bHQgaXMgdHJ1ZQorUEFTUyAnb25lcnJvcicgaW4gcmVzdWx0IGlzIHRydWUK
K1BBU1MgJ3JlYWR5U3RhdGUnIGluIHJlc3VsdCBpcyB0cnVlCitBbiBldmVudCBzaG91bGQgZmly
ZSBzaG9ydGx5Li4uCisKK2RiID0gZXZlbnQucmVzdWx0CityZXN1bHQgPSBkYi5zZXRWZXJzaW9u
KCd2ZXJzaW9uIDEnKQorRGVsZXRlZCBhbGwgb2JqZWN0IHN0b3Jlcy4KK2RiLmNyZWF0ZU9iamVj
dFN0b3JlKCdhJywge2tleVBhdGg6ICdhJ30pCitkYi5jcmVhdGVPYmplY3RTdG9yZSgnYicpCit0
cmFucyA9IGRiLnRyYW5zYWN0aW9uKFtdLCB3ZWJraXRJREJUcmFuc2FjdGlvbi5SRUFEX1dSSVRF
KQordHJhbnMub2JqZWN0U3RvcmUoJ2EnKS5wdXQoeydhJzogMH0pCit0cmFucy5vYmplY3RTdG9y
ZSgnYicpLnB1dCh7J2EnOiAwfSwgMCkKK3RyYW5zLm9iamVjdFN0b3JlKCdhJykuZ2V0KDApCitQ
QVNTIGV2ZW50LnJlc3VsdC5hIGlzIHthOiAwfQordHJhbnMub2JqZWN0U3RvcmUoJ2InKS5nZXQo
MCkKK1BBU1MgZXZlbnQucmVzdWx0LmEgaXMge2E6IDB9CitQQVNTIHN1Y2Nlc3NmdWxseVBhcnNl
ZCBpcyB0cnVlCisKK1RFU1QgQ09NUExFVEUKKwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvc3Rv
cmFnZS9pbmRleGVkZGIvY3JlYXRlT2JqZWN0U3RvcmVPcHRpb25zLmh0bWwgYi9MYXlvdXRUZXN0
cy9zdG9yYWdlL2luZGV4ZWRkYi9jcmVhdGVPYmplY3RTdG9yZU9wdGlvbnMuaHRtbApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMjhkMmQyCi0tLSAvZGV2L251bGwKKysrIGIv
TGF5b3V0VGVzdHMvc3RvcmFnZS9pbmRleGVkZGIvY3JlYXRlT2JqZWN0U3RvcmVPcHRpb25zLmh0
bWwKQEAgLTAsMCArMSw5MCBAQAorPGh0bWw+Cis8aGVhZD4KKzxsaW5rIHJlbD0ic3R5bGVzaGVl
dCIgaHJlZj0iLi4vLi4vZmFzdC9qcy9yZXNvdXJjZXMvanMtdGVzdC1zdHlsZS5jc3MiPgorPHNj
cmlwdCBzcmM9Ii4uLy4uL2Zhc3QvanMvcmVzb3VyY2VzL2pzLXRlc3QtcHJlLmpzIj48L3Njcmlw
dD4KKzxzY3JpcHQgc3JjPSIuLi8uLi9mYXN0L2pzL3Jlc291cmNlcy9qcy10ZXN0LXBvc3QtZnVu
Y3Rpb24uanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9InJlc291cmNlcy9zaGFyZWQuanMiPjwv
c2NyaXB0PgorPC9oZWFkPgorPGJvZHk+Cis8cCBpZD0iZGVzY3JpcHRpb24iPjwvcD4KKzxkaXYg
aWQ9ImNvbnNvbGUiPjwvZGl2PgorPHNjcmlwdD4KKworZGVzY3JpcHRpb24oIlRlc3QgSW5kZXhl
ZERCJ3MgY3JlYXRlT2JqZWN0U3RvcmUncyB2YXJpb3VzIG9wdGlvbnMiKTsKK2lmICh3aW5kb3cu
bGF5b3V0VGVzdENvbnRyb2xsZXIpCisgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIud2FpdFVudGls
RG9uZSgpOworCitmdW5jdGlvbiB0ZXN0KCkKK3sKKyAgICBzaG91bGRCZVRydWUoIid3ZWJraXRJ
bmRleGVkREInIGluIHdpbmRvdyIpOworICAgIHNob3VsZEJlRmFsc2UoIndlYmtpdEluZGV4ZWRE
QiA9PSBudWxsIik7CisKKyAgICByZXN1bHQgPSBldmFsQW5kTG9nKCJ3ZWJraXRJbmRleGVkREIu
b3BlbignbmFtZScsICdkZXNjcmlwdGlvbicpIik7CisgICAgdmVyaWZ5UmVzdWx0KHJlc3VsdCk7
CisgICAgcmVzdWx0Lm9uc3VjY2VzcyA9IG9wZW5TdWNjZXNzOworICAgIHJlc3VsdC5vbmVycm9y
ID0gdW5leHBlY3RlZEVycm9yQ2FsbGJhY2s7Cit9CisKK2Z1bmN0aW9uIG9wZW5TdWNjZXNzKCkK
K3sKKyAgICBkYiA9IGV2YWxBbmRMb2coImRiID0gZXZlbnQucmVzdWx0Iik7CisKKyAgICByZXN1
bHQgPSBldmFsQW5kTG9nKCJyZXN1bHQgPSBkYi5zZXRWZXJzaW9uKCd2ZXJzaW9uIDEnKSIpOwor
ICAgIHJlc3VsdC5vbnN1Y2Nlc3MgPSBjbGVhbkRhdGFiYXNlOworICAgIHJlc3VsdC5vbmVycm9y
ID0gdW5leHBlY3RlZEVycm9yQ2FsbGJhY2s7Cit9CisKK2Z1bmN0aW9uIGNsZWFuRGF0YWJhc2Uo
KQoreworICAgIGRlbGV0ZUFsbE9iamVjdFN0b3JlcyhkYiwgY2xlYW5lZCk7Cit9CisKK2Z1bmN0
aW9uIGNsZWFuZWQoKQoreworICAgIGV2YWxBbmRMb2coImRiLmNyZWF0ZU9iamVjdFN0b3JlKCdh
Jywge2tleVBhdGg6ICdhJ30pIik7CisgICAgZXZhbEFuZExvZygiZGIuY3JlYXRlT2JqZWN0U3Rv
cmUoJ2InKSIpOworCisgICAgdHJhbnMgPSBldmFsQW5kTG9nKCJ0cmFucyA9IGRiLnRyYW5zYWN0
aW9uKFtdLCB3ZWJraXRJREJUcmFuc2FjdGlvbi5SRUFEX1dSSVRFKSIpOworCisgICAgcmVxID0g
ZXZhbEFuZExvZygidHJhbnMub2JqZWN0U3RvcmUoJ2EnKS5wdXQoeydhJzogMH0pIik7CisgICAg
cmVxLm9uc3VjY2VzcyA9IHB1dEI7CisgICAgcmVxLm9uZXJyb3IgPSB1bmV4cGVjdGVkRXJyb3JD
YWxsYmFjazsKK30KKworZnVuY3Rpb24gcHV0QigpCit7CisgICAgcmVxID0gZXZhbEFuZExvZygi
dHJhbnMub2JqZWN0U3RvcmUoJ2InKS5wdXQoeydhJzogMH0sIDApIik7ICAvLyBPT1BTCisgICAg
cmVxLm9uc3VjY2VzcyA9IGdldEE7CisgICAgcmVxLm9uZXJyb3IgPSB1bmV4cGVjdGVkRXJyb3JD
YWxsYmFjazsKK30KKworZnVuY3Rpb24gZ2V0QSgpCit7CisgICAgcmVxID0gZXZhbEFuZExvZygi
dHJhbnMub2JqZWN0U3RvcmUoJ2EnKS5nZXQoMCkiKTsKKyAgICByZXEub25zdWNjZXNzID0gZ2V0
QjsKKyAgICByZXEub25lcnJvciA9IHVuZXhwZWN0ZWRFcnJvckNhbGxiYWNrOworfQorCitmdW5j
dGlvbiBnZXRCKCkKK3sKKyAgICBzaG91bGRCZSgiZXZlbnQucmVzdWx0LmEiLCAie2E6IDB9Iik7
CisKKyAgICByZXEgPSBldmFsQW5kTG9nKCJ0cmFucy5vYmplY3RTdG9yZSgnYicpLmdldCgwKSIp
OworICAgIHJlcS5vbnN1Y2Nlc3MgPSBjaGVja0I7CisgICAgcmVxLm9uZXJyb3IgPSB1bmV4cGVj
dGVkRXJyb3JDYWxsYmFjazsKK30KKworZnVuY3Rpb24gY2hlY2tCKCkKK3sKKyAgICBzaG91bGRC
ZSgiZXZlbnQucmVzdWx0LmEiLCAie2E6IDB9Iik7CisKKyAgICBkb25lKCk7Cit9CisKK3ZhciBz
dWNjZXNzZnVsbHlQYXJzZWQgPSB0cnVlOworCit0ZXN0KCk7CisKKzwvc2NyaXB0PgorPC9ib2R5
PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvc3RvcmFnZS9pbmRleGVkZGIvdHV0
b3JpYWwuaHRtbCBiL0xheW91dFRlc3RzL3N0b3JhZ2UvaW5kZXhlZGRiL3R1dG9yaWFsLmh0bWwK
aW5kZXggZGI5ZjJmYS4uMzU3ODg0OCAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvc3RvcmFnZS9p
bmRleGVkZGIvdHV0b3JpYWwuaHRtbAorKysgYi9MYXlvdXRUZXN0cy9zdG9yYWdlL2luZGV4ZWRk
Yi90dXRvcmlhbC5odG1sCkBAIC0xNTAsMTMgKzE1MCwyNSBAQCBmdW5jdGlvbiBvblNldFZlcnNp
b24oKQogICAgIC8vIGEgbnVtYmVyIGF0dHJpYnV0ZSBhbmQgYXQgbGVhc3Qgb25lIHNpYmxpbmcp
LiBZb3UgY2FuIGV2ZW4gZ28gd2lsZCBhbmQgc2F5CiAgICAgLy8gImZvb1swXVsyXS5iYXJbMF0u
YmF6LnRlc3RbMV1bMl1bM10iLiBJdCdzIHBvc3NpYmxlIHRoaXMgd2lsbCBjaGFuZ2UgaW4gdGhl
IGZ1dHVyZSB0aG91Z2guCiAgICAgLy8KLSAgICAvLyBJZiB5b3Ugc2V0IGF1dG9JbmNyZW1lbnQg
KHRoZSB0aGlyZCBvcHRpb25hbCBwYXJhbWV0ZXIpLCBJbmRleGVkREIgd2lsbCBnZW5lcmF0ZSBh
IGtleQorICAgIC8vIElmIHlvdSBzZXQgYXV0b0luY3JlbWVudCAoYW5vdGhlciBvcHRpb25hbCBw
YXJhbWV0ZXIpLCBJbmRleGVkREIgd2lsbCBnZW5lcmF0ZSBhIGtleQogICAgIC8vIGZvciB5b3Vy
IGVudHJ5IGF1dG9tYXRpY2FsbHkuIEFuZCBpZiB5b3UgaGF2ZSBhIGtleVBhdGggc2V0LCBpdCds
bCBzZXQgdGhlIHZhbHVlIGF0CiAgICAgLy8gdGhlIGxvY2F0aW9uIG9mIHRoZSBrZXlQYXRoIF9p
biB0aGUgZGF0YWJhc2VfIChpLmUuIGl0IHdpbGwgbm90IG1vZGlmeSB0aGUgdmFsdWUgeW91IHBh
c3MKICAgICAvLyBpbiB0byBwdXQvYWRkKS4gVW5mb3J0dW5hdGVseSBhdXRvSW5jcmVtZW50IGlz
IG5vdCB5ZXQgaW1wbGVtZW50ZWQgaW4gQ2hyb21pdW0vV2ViS2l0LgogICAgIC8vCisgICAgLy8g
QW5vdGhlciBvcHRpb25hbCBwYXJhbWV0ZXIsICJldmljdGFibGUiIGlzIG5vdCB5ZXQgaW1wbGVt
ZW50ZWQuIFdoZW4gaXQgaXMsIGl0J2xsIGhpbnQKKyAgICAvLyB3aGljaCBkYXRhIHNob3VsZCBi
ZSBkZWxldGVkIGZpcnN0IGlmIHRoZSBicm93c2VyIGRlY2lkZXMgdGhpcyBvcmlnaW4gaXMgdXNp
bmcgdG9vIG11Y2gKKyAgICAvLyBzdG9yYWdlLiAoVGhlIGFsdGVybmF0aXZlIGlzIHRoYXQgaXQn
bGwgc3VnZ2VzdCB0aGUgdXNlciBkZWxldGUgZXZlcnl0aGluZyBmcm9tIHRoZQorICAgIC8vIG9y
aWdpbiwgc28gaXQncyBpbiB5b3VyIGZhdm9yIHRvIHNldCBpdCBhcHByb3BlcmF0ZWx5ISkgVGhp
cyBpcyBncmVhdCBmb3Igd2hlbiB5b3UgaGF2ZQorICAgIC8vIHNvbWUgYWJzb2x1dGVseSBjcml0
aWNhbCBkYXRhIChsaWtlIHVuc2V0IGVtYWlscykgYW5kIGEgYnVuY2ggb2YgbGVzcyBjcml0aWNh
bCwgKGJ1dAorICAgIC8vIG1heWJlIHN0aWxsIGltcG9ydGFudCEpIGRhdGEuCisgICAgLy8KKyAg
ICAvLyBBbGwgb2YgdGhlc2Ugb3B0aW9ucyBjYW4gYmUgcGFzc2VkIGludG8gY3JlYXRlT2JqZWN0
U3RvcmUgdmlhIGl0cyAob3B0aW9uYWwpIHNlY29uZAorICAgIC8vIHBhcmFtZXRlci4gU28sIGlm
IHlvdSB3YW50ZWQgdG8gZGVmaW5lIGFsbCwgWW91J2QgZG8ge2tleVBhdGg6ICJzb21ldGhpbmci
LAorICAgIC8vIGV2aWN0YWJsZTogdHJ1ZSwgYXV0b0luY3JlbWVudDogdHJ1ZX0uIFlvdSBjYW4g
YWxzbyBwYXNzIGluIHN1YnNldHMgb2YgYWxsIHRocmVlIG9yCisgICAgLy8gb21pdCB0aGUgb2Jq
ZWN0IChzaW5jZSBpdCdzIG9wdGlvbmFsKS4KKyAgICAvLwogICAgIC8vIExldCdzIG5vdyBjcmVh
dGUgYW4gb2JqZWN0U3RvcmUgZm9yIHBlb3BsZS4gV2UnbGwgc3VwcGx5IGEga2V5IHBhdGggaW4g
dGhpcyBjYXNlLgotICAgIHZhciBvYmplY3RTdG9yZSA9IGRiLmNyZWF0ZU9iamVjdFN0b3JlKCJw
ZW9wbGUiLCAiaWQiKTsKKyAgICB2YXIgb2JqZWN0U3RvcmUgPSBkYi5jcmVhdGVPYmplY3RTdG9y
ZSgicGVvcGxlIiwge2tleVBhdGg6ICJpZCJ9KTsKIAogICAgIC8vIE5vdGljZSB0aGF0IGl0IHJl
dHVybmVkIHN5bmNocm9ub3VzbHkuIFRoZSBydWxlIG9mIHRodW1iIGlzIHRoYXQgYW55IGNhbGwg
dGhhdCB0b3VjaGVzIChpbgogICAgIC8vIGFueSB3YXkpIGtleXMgb3IgdmFsdWVzIGlzIGFzeW5j
aHJvbm91cyBhbmQgYW55IG90aGVyIGNhbGwgKGJlc2lkZXMgc2V0VmVyc2lvbiBhbmQgb3Blbikg
YXJlCmRpZmYgLS1naXQgYS9XZWJDb3JlL0NoYW5nZUxvZyBiL1dlYkNvcmUvQ2hhbmdlTG9nCmlu
ZGV4IGQ3NmYwYzguLjc0MjA2NjggMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBi
L1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNDggQEAKKzIwMTAtMTEtMjQgIEplcmVteSBP
cmxvdyAgPGpvcmxvd0BjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgQWRkIGFuIE9wdGlvbnNPYmplY3QgY2xhc3MgZm9yIEluZGV4
ZWREQiAoYW5kIGxhdGVyIEdlb0xvY2F0aW9uKQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTAwMzAKKworICAgICAgICBHZW9Mb2NhdGlvbiBhbmQgSW5k
ZXhlZERCIGJvdGggaGF2ZSB0aGUgY29uY2VwdCBvZiBhbiBvcHRpb25hbAorICAgICAgICBwYXJh
bWV0ZXIgdGhhdCBoYXMgdmFyaW91cyBvcHRpb25zIHN1cHBsaWVkIHdpdGggaXQuICBJbgorICAg
ICAgICBHZW9Mb2NhdGlvbiB0aGlzIHdhcyBkb25lIHdpdGggY3VzdG9tIGJpbmRpbmdzLCBidXQg
SSdtIHRyeWluZyB0bworICAgICAgICBhdm9pZCB0aGF0IGZvciBJbmRleGVkREIuICAKKworICAg
ICAgICBUaGlzIGZpcnN0IHBhdGNoIGltcGxlbWVudHMgaXQgaW4gVjggYW5kIG1ha2VzIGNyZWF0
ZU9iamVjdFN0b3JlIHVzZSBpdC4KKyAgICAgICAgVGhlIG5leHQgcGF0Y2ggd2lsbCBjb3ZlciBH
ZW9Mb2NhdGlvbiBhbmQgSlNDLgorCisgICAgICAgIEV4aXN0aW5nIHRlc3QgbW9kaWZpZWQgdG8g
Y292ZXIgdGhpcyBjaGFuZ2UuCisKKyAgICAgICAgKiBXZWJDb3JlLmd5cGk6CisgICAgICAgICog
YmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9yVjgucG06CisgICAgICAgICogYmluZGluZ3Mv
c2NyaXB0cy90ZXN0L0NQUC9XZWJET01UZXN0T2JqLmNwcDoKKyAgICAgICAgKFdlYkRPTVRlc3RP
Ymo6Om9wdGlvbnNPYmplY3QpOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9DUFAv
V2ViRE9NVGVzdE9iai5oOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9HT2JqZWN0
L1dlYktpdERPTVRlc3RDYWxsYmFjay5jcHA6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90
ZXN0L0dPYmplY3QvV2ViS2l0RE9NVGVzdEludGVyZmFjZS5jcHA6CisgICAgICAgICogYmluZGlu
Z3Mvc2NyaXB0cy90ZXN0L0dPYmplY3QvV2ViS2l0RE9NVGVzdE1lZGlhUXVlcnlMaXN0TGlzdGVu
ZXIuY3BwOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9HT2JqZWN0L1dlYktpdERP
TVRlc3RPYmouY3BwOgorICAgICAgICAod2Via2l0X2RvbV90ZXN0X29ial9vcHRpb25zX29iamVj
dCk6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0dPYmplY3QvV2ViS2l0RE9NVGVz
dE9iai5oOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RPYmouY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25PcHRpb25zT2Jq
ZWN0KToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0T2JqLmg6Cisg
ICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L09iakMvRE9NVGVzdE9iai5oOgorICAgICAg
ICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9PYmpDL0RPTVRlc3RPYmoubW06CisgICAgICAgICgt
W0RPTVRlc3RPYmogb3B0aW9uc09iamVjdDpvb286XSk6CisgICAgICAgICogYmluZGluZ3Mvc2Ny
aXB0cy90ZXN0L1Rlc3RPYmouaWRsOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9W
OC9WOFRlc3RNZWRpYVF1ZXJ5TGlzdExpc3RlbmVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNv
bmZpZ3VyZVY4VGVzdE1lZGlhUXVlcnlMaXN0TGlzdGVuZXJUZW1wbGF0ZSk6CisgICAgICAgICog
YmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdE9iai5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpUZXN0T2JqSW50ZXJuYWw6Om9wdGlvbnNPYmplY3RDYWxsYmFjayk6CisgICAgICAgICogc3Rv
cmFnZS9JREJEYXRhYmFzZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJREJEYXRhYmFzZTo6Y3Jl
YXRlT2JqZWN0U3RvcmUpOgorICAgICAgICAqIHN0b3JhZ2UvSURCRGF0YWJhc2UuaDoKKyAgICAg
ICAgKFdlYkNvcmU6OklEQkRhdGFiYXNlOjpjcmVhdGVPYmplY3RTdG9yZSk6CisgICAgICAgICog
c3RvcmFnZS9JREJEYXRhYmFzZS5pZGw6CisKIDIwMTAtMTEtMjMgIEplcmVteSBPcmxvdyAgPGpv
cmxvd0BjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgU3RldmUgQmxvY2suCmRp
ZmYgLS1naXQgYS9XZWJDb3JlL1dlYkNvcmUuZ3lwaSBiL1dlYkNvcmUvV2ViQ29yZS5neXBpCmlu
ZGV4IDJjODE3Y2IuLjU4MjM1MmYgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvV2ViQ29yZS5neXBpCisr
KyBiL1dlYkNvcmUvV2ViQ29yZS5neXBpCkBAIC03NDQsNiArNzQ0LDggQEAKICAgICAgICAgICAg
ICdiaW5kaW5ncy92OC9DaGlsZFRocmVhZERPTURhdGEuaCcsCiAgICAgICAgICAgICAnYmluZGlu
Z3MvdjgvSURCQmluZGluZ1V0aWxpdGllcy5jcHAnLAogICAgICAgICAgICAgJ2JpbmRpbmdzL3Y4
L0lEQkJpbmRpbmdVdGlsaXRpZXMuaCcsCisgICAgICAgICAgICAnYmluZGluZ3MvdjgvT3B0aW9u
c09iamVjdC5jcHAnLAorICAgICAgICAgICAgJ2JpbmRpbmdzL3Y4L09wdGlvbnNPYmplY3QuaCcs
CiAgICAgICAgICAgICAnYmluZGluZ3MvdjgvY3VzdG9tL1Y4Q2FudmFzUGl4ZWxBcnJheUN1c3Rv
bS5jcHAnLAogICAgICAgICAgICAgJ2JpbmRpbmdzL3Y4L2N1c3RvbS9WOEFycmF5QnVmZmVyVmll
d0N1c3RvbS5oJywKICAgICAgICAgICAgICdiaW5kaW5ncy92OC9jdXN0b20vVjhBcnJheUJ1ZmZl
ckN1c3RvbS5jcHAnLApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVH
ZW5lcmF0b3JWOC5wbSBiL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9yVjgu
cG0KaW5kZXggN2VhNGM2My4uMTk2YmE5MiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9iaW5kaW5ncy9z
Y3JpcHRzL0NvZGVHZW5lcmF0b3JWOC5wbQorKysgYi9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMv
Q29kZUdlbmVyYXRvclY4LnBtCkBAIC0yODA2LDYgKzI4MDYsNyBAQCBzdWIgR2V0TmF0aXZlVHlw
ZQogICAgIHJldHVybiAiTm9kZSoiIGlmICR0eXBlIGVxICJFdmVudFRhcmdldCIgYW5kICRpc1Bh
cmFtZXRlcjsKICAgICByZXR1cm4gImRvdWJsZSIgaWYgJHR5cGUgZXEgIkRhdGUiOwogICAgIHJl
dHVybiAiU2NyaXB0VmFsdWUiIGlmICR0eXBlIGVxICJET01PYmplY3QiOworICAgIHJldHVybiAi
T3B0aW9uc09iamVjdCIgaWYgJHR5cGUgZXEgIk9wdGlvbnNPYmplY3QiOwogCiAgICAgcmV0dXJu
ICJTdHJpbmciIGlmICR0eXBlIGVxICJET01Vc2VyRGF0YSI7ICAjIEZJWE1FOiBUZW1wb3Jhcnkg
aGFjaz8KIApAQCAtMjg4OSw2ICsyODkwLDExIEBAIHN1YiBKU1ZhbHVlVG9OYXRpdmUKICAgICAg
ICAgcmV0dXJuICJjcmVhdGVJREJLZXlGcm9tVmFsdWUoJHZhbHVlKSI7CiAgICAgfQogCisgICAg
aWYgKCR0eXBlIGVxICJPcHRpb25zT2JqZWN0IikgeworICAgICAgICAkaW1wbEluY2x1ZGVzeyJP
cHRpb25zT2JqZWN0LmgifSA9IDE7CisgICAgICAgIHJldHVybiAkdmFsdWU7CisgICAgfQorCiAg
ICAgaWYgKCR0eXBlIGVxICJET01PYmplY3QiKSB7CiAgICAgICAgICRpbXBsSW5jbHVkZXN7IlNj
cmlwdFZhbHVlLmgifSA9IDE7CiAgICAgICAgIHJldHVybiAiU2NyaXB0VmFsdWUoJHZhbHVlKSI7
CkBAIC0zMDM0LDYgKzMwNDAsNyBAQCBteSAlbm9uX3dyYXBwZXJfdHlwZXMgPSAoCiAgICAgJ05v
ZGVGaWx0ZXInID0+IDEsCiAgICAgJ0V2ZW50TGlzdGVuZXInID0+IDEsCiAgICAgJ0lEQktleScg
PT4gMSwKKyAgICAnT3B0aW9uc09iamVjdCcgPT4gMSwKICAgICAnRGF0ZScgPT4gMSwKICAgICAn
TWVkaWFRdWVyeUxpc3RMaXN0ZW5lcicgPT4gMQogKTsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvYmlu
ZGluZ3Mvc2NyaXB0cy90ZXN0L0NQUC9XZWJET01UZXN0T2JqLmNwcCBiL1dlYkNvcmUvYmluZGlu
Z3Mvc2NyaXB0cy90ZXN0L0NQUC9XZWJET01UZXN0T2JqLmNwcAppbmRleCA5YThkOTA5Li44MTlj
N2NmIDEwMDY0NAotLS0gYS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9DUFAvV2ViRE9N
VGVzdE9iai5jcHAKKysrIGIvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvQ1BQL1dlYkRP
TVRlc3RPYmouY3BwCkBAIC0yNCw5ICsyNCwxMSBAQAogI2luY2x1ZGUgIkhUTUxOYW1lcy5oIgog
I2luY2x1ZGUgIklEQktleS5oIgogI2luY2x1ZGUgIktVUkwuaCIKKyNpbmNsdWRlICJPcHRpb25z
T2JqZWN0LmgiCiAjaW5jbHVkZSAiU2VyaWFsaXplZFNjcmlwdFZhbHVlLmgiCiAjaW5jbHVkZSAi
VGVzdE9iai5oIgogI2luY2x1ZGUgIldlYkRPTUlEQktleS5oIgorI2luY2x1ZGUgIldlYkRPTU9w
dGlvbnNPYmplY3QuaCIKICNpbmNsdWRlICJXZWJET01TdHJpbmcuaCIKICNpbmNsdWRlICJXZWJF
eGNlcHRpb25IYW5kbGVyLmgiCiAjaW5jbHVkZSAiV2ViTmF0aXZlRXZlbnRMaXN0ZW5lci5oIgpA
QCAtNjYyLDYgKzY2NCwxNCBAQCB2b2lkIFdlYkRPTVRlc3RPYmo6OmlkYktleShjb25zdCBXZWJE
T01JREJLZXkmIGtleSkKICAgICBpbXBsKCktPmlkYktleSh0b1dlYkNvcmUoa2V5KSk7CiB9CiAK
K3ZvaWQgV2ViRE9NVGVzdE9iajo6b3B0aW9uc09iamVjdChjb25zdCBXZWJET01PcHRpb25zT2Jq
ZWN0JiBvbywgY29uc3QgV2ViRE9NT3B0aW9uc09iamVjdCYgb29vKQoreworICAgIGlmICghaW1w
bCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBpbXBsKCktPm9wdGlvbnNPYmplY3QodG9XZWJD
b3JlKG9vKSwgdG9XZWJDb3JlKG9vbykpOworfQorCiB2b2lkIFdlYkRPTVRlc3RPYmo6Om1ldGhv
ZFdpdGhFeGNlcHRpb24oKQogewogICAgIGlmICghaW1wbCgpKQpkaWZmIC0tZ2l0IGEvV2ViQ29y
ZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvQ1BQL1dlYkRPTVRlc3RPYmouaCBiL1dlYkNvcmUvYmlu
ZGluZ3Mvc2NyaXB0cy90ZXN0L0NQUC9XZWJET01UZXN0T2JqLmgKaW5kZXggZjI5YjdkYy4uMGIz
NTkzZCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvQ1BQL1dlYkRP
TVRlc3RPYmouaAorKysgYi9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9DUFAvV2ViRE9N
VGVzdE9iai5oCkBAIC0zMiw2ICszMiw3IEBAIGNsYXNzIFRlc3RPYmo7CiAKIGNsYXNzIFdlYkRP
TUV2ZW50TGlzdGVuZXI7CiBjbGFzcyBXZWJET01JREJLZXk7CitjbGFzcyBXZWJET01PcHRpb25z
T2JqZWN0OwogY2xhc3MgV2ViRE9NU3RyaW5nOwogY2xhc3MgV2ViRE9NVGVzdE9iajsKIApAQCAt
MTM2LDYgKzEzNyw3IEBAIHB1YmxpYzoKICAgICBXZWJET01UZXN0T2JqIG1ldGhvZFRoYXRSZXF1
aXJlc0FsbEFyZ3NBbmRUaHJvd3MoY29uc3QgV2ViRE9NU3RyaW5nJiBzdHJBcmcsIGNvbnN0IFdl
YkRPTVRlc3RPYmomIG9iakFyZyk7CiAgICAgdm9pZCBzZXJpYWxpemVkVmFsdWUoY29uc3QgV2Vi
RE9NU3RyaW5nJiBzZXJpYWxpemVkQXJnKTsKICAgICB2b2lkIGlkYktleShjb25zdCBXZWJET01J
REJLZXkmIGtleSk7CisgICAgdm9pZCBvcHRpb25zT2JqZWN0KGNvbnN0IFdlYkRPTU9wdGlvbnNP
YmplY3QmIG9vLCBjb25zdCBXZWJET01PcHRpb25zT2JqZWN0JiBvb28pOwogICAgIHZvaWQgbWV0
aG9kV2l0aEV4Y2VwdGlvbigpOwogICAgIHZvaWQgY3VzdG9tTWV0aG9kKCk7CiAgICAgdm9pZCBj
dXN0b21NZXRob2RXaXRoQXJncyhpbnQgaW50QXJnLCBjb25zdCBXZWJET01TdHJpbmcmIHN0ckFy
ZywgY29uc3QgV2ViRE9NVGVzdE9iaiYgb2JqQXJnKTsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvYmlu
ZGluZ3Mvc2NyaXB0cy90ZXN0L0dPYmplY3QvV2ViS2l0RE9NVGVzdENhbGxiYWNrLmNwcCBiL1dl
YkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0dPYmplY3QvV2ViS2l0RE9NVGVzdENhbGxiYWNr
LmNwcAppbmRleCAxOWZmMTY2Li41NTRjYzE1IDEwMDY0NAotLS0gYS9XZWJDb3JlL2JpbmRpbmdz
L3NjcmlwdHMvdGVzdC9HT2JqZWN0L1dlYktpdERPTVRlc3RDYWxsYmFjay5jcHAKKysrIGIvV2Vi
Q29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvR09iamVjdC9XZWJLaXRET01UZXN0Q2FsbGJhY2su
Y3BwCkBAIC0yNSw2ICsyNSw3IEBACiAKICNpbmNsdWRlIDx3dGYvR2V0UHRyLmg+CiAjaW5jbHVk
ZSA8d3RmL1JlZlB0ci5oPgorI2luY2x1ZGUgIkRPTU9iamVjdENhY2hlLmgiCiAjaW5jbHVkZSAi
RXhjZXB0aW9uQ29kZS5oIgogI2luY2x1ZGUgIkpTTWFpblRocmVhZEV4ZWNTdGF0ZS5oIgogI2lu
Y2x1ZGUgIlRlc3RDYWxsYmFjay5oIgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9iaW5kaW5ncy9zY3Jp
cHRzL3Rlc3QvR09iamVjdC9XZWJLaXRET01UZXN0SW50ZXJmYWNlLmNwcCBiL1dlYkNvcmUvYmlu
ZGluZ3Mvc2NyaXB0cy90ZXN0L0dPYmplY3QvV2ViS2l0RE9NVGVzdEludGVyZmFjZS5jcHAKaW5k
ZXggYTEzZGE0NS4uNmM5MDZlNCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRz
L3Rlc3QvR09iamVjdC9XZWJLaXRET01UZXN0SW50ZXJmYWNlLmNwcAorKysgYi9XZWJDb3JlL2Jp
bmRpbmdzL3NjcmlwdHMvdGVzdC9HT2JqZWN0L1dlYktpdERPTVRlc3RJbnRlcmZhY2UuY3BwCkBA
IC0yNSw2ICsyNSw3IEBACiAKICNpbmNsdWRlIDx3dGYvR2V0UHRyLmg+CiAjaW5jbHVkZSA8d3Rm
L1JlZlB0ci5oPgorI2luY2x1ZGUgIkRPTU9iamVjdENhY2hlLmgiCiAjaW5jbHVkZSAiRXhjZXB0
aW9uQ29kZS5oIgogI2luY2x1ZGUgIkpTTWFpblRocmVhZEV4ZWNTdGF0ZS5oIgogI2luY2x1ZGUg
IlRlc3RJbnRlcmZhY2UuaCIKZGlmZiAtLWdpdCBhL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90
ZXN0L0dPYmplY3QvV2ViS2l0RE9NVGVzdE1lZGlhUXVlcnlMaXN0TGlzdGVuZXIuY3BwIGIvV2Vi
Q29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvR09iamVjdC9XZWJLaXRET01UZXN0TWVkaWFRdWVy
eUxpc3RMaXN0ZW5lci5jcHAKaW5kZXggZjVkZWQ3OS4uYTdkMzY0YyAxMDA2NDQKLS0tIGEvV2Vi
Q29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvR09iamVjdC9XZWJLaXRET01UZXN0TWVkaWFRdWVy
eUxpc3RMaXN0ZW5lci5jcHAKKysrIGIvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvR09i
amVjdC9XZWJLaXRET01UZXN0TWVkaWFRdWVyeUxpc3RMaXN0ZW5lci5jcHAKQEAgLTIzLDYgKzIz
LDcgQEAKIAogI2luY2x1ZGUgPHd0Zi9HZXRQdHIuaD4KICNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+
CisjaW5jbHVkZSAiRE9NT2JqZWN0Q2FjaGUuaCIKICNpbmNsdWRlICJFeGNlcHRpb25Db2RlLmgi
CiAjaW5jbHVkZSAiSlNNYWluVGhyZWFkRXhlY1N0YXRlLmgiCiAjaW5jbHVkZSAiVGVzdE1lZGlh
UXVlcnlMaXN0TGlzdGVuZXIuaCIKZGlmZiAtLWdpdCBhL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0
cy90ZXN0L0dPYmplY3QvV2ViS2l0RE9NVGVzdE9iai5jcHAgYi9XZWJDb3JlL2JpbmRpbmdzL3Nj
cmlwdHMvdGVzdC9HT2JqZWN0L1dlYktpdERPTVRlc3RPYmouY3BwCmluZGV4IDFiZjk5ODMuLmVj
MmM2ZGMgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0dPYmplY3Qv
V2ViS2l0RE9NVGVzdE9iai5jcHAKKysrIGIvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3Qv
R09iamVjdC9XZWJLaXRET01UZXN0T2JqLmNwcApAQCAtMjMsNiArMjMsNyBAQAogCiAjaW5jbHVk
ZSA8d3RmL0dldFB0ci5oPgogI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KKyNpbmNsdWRlICJET01P
YmplY3RDYWNoZS5oIgogI2luY2x1ZGUgIkV4Y2VwdGlvbkNvZGUuaCIKICNpbmNsdWRlICJIVE1M
TmFtZXMuaCIKICNpbmNsdWRlICJKU01haW5UaHJlYWRFeGVjU3RhdGUuaCIKQEAgLTMxLDYgKzMy
LDggQEAKICNpbmNsdWRlICJnb2JqZWN0L0NvbnZlcnRUb1VURjhTdHJpbmcuaCIKICNpbmNsdWRl
ICJ3ZWJraXQvV2ViS2l0RE9NSURCS2V5LmgiCiAjaW5jbHVkZSAid2Via2l0L1dlYktpdERPTUlE
QktleVByaXZhdGUuaCIKKyNpbmNsdWRlICJ3ZWJraXQvV2ViS2l0RE9NT3B0aW9uc09iamVjdC5o
IgorI2luY2x1ZGUgIndlYmtpdC9XZWJLaXRET01PcHRpb25zT2JqZWN0UHJpdmF0ZS5oIgogI2lu
Y2x1ZGUgIndlYmtpdC9XZWJLaXRET01TZXJpYWxpemVkU2NyaXB0VmFsdWUuaCIKICNpbmNsdWRl
ICJ3ZWJraXQvV2ViS2l0RE9NU2VyaWFsaXplZFNjcmlwdFZhbHVlUHJpdmF0ZS5oIgogI2luY2x1
ZGUgIndlYmtpdC9XZWJLaXRET01UZXN0T2JqLmgiCkBAIC0yMTEsNiArMjE0LDI3IEBAIHdlYmtp
dF9kb21fdGVzdF9vYmpfaWRiX2tleShXZWJLaXRET01UZXN0T2JqKiBzZWxmLCBXZWJLaXRET01J
REJLZXkqIGtleSkKIH0KIAogdm9pZAord2Via2l0X2RvbV90ZXN0X29ial9vcHRpb25zX29iamVj
dChXZWJLaXRET01UZXN0T2JqKiBzZWxmLCBXZWJLaXRET01PcHRpb25zT2JqZWN0KiBvbywgV2Vi
S2l0RE9NT3B0aW9uc09iamVjdCogb29vKQoreworICAgIGdfcmV0dXJuX2lmX2ZhaWwoc2VsZik7
CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIFdlYkNvcmU6
OlRlc3RPYmogKiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOworICAgIGdfcmV0dXJuX2lmX2Zh
aWwob28pOworICAgIGdfcmV0dXJuX2lmX2ZhaWwob29vKTsKKyAgICBXZWJDb3JlOjpPcHRpb25z
T2JqZWN0ICogY29udmVydGVkX29vID0gTlVMTDsKKyAgICBpZiAob28gIT0gTlVMTCkgeworICAg
ICAgICBjb252ZXJ0ZWRfb28gPSBXZWJLaXQ6OmNvcmUob28pOworICAgICAgICBnX3JldHVybl9p
Zl9mYWlsKGNvbnZlcnRlZF9vbyk7CisgICAgfQorICAgIFdlYkNvcmU6Ok9wdGlvbnNPYmplY3Qg
KiBjb252ZXJ0ZWRfb29vID0gTlVMTDsKKyAgICBpZiAob29vICE9IE5VTEwpIHsKKyAgICAgICAg
Y29udmVydGVkX29vbyA9IFdlYktpdDo6Y29yZShvb28pOworICAgICAgICBnX3JldHVybl9pZl9m
YWlsKGNvbnZlcnRlZF9vb28pOworICAgIH0KKyAgICBpdGVtLT5vcHRpb25zT2JqZWN0KGNvbnZl
cnRlZF9vbywgY29udmVydGVkX29vbyk7Cit9CisKK3ZvaWQKIHdlYmtpdF9kb21fdGVzdF9vYmpf
bWV0aG9kX3dpdGhfZXhjZXB0aW9uKFdlYktpdERPTVRlc3RPYmoqIHNlbGYsIEdFcnJvciAqKmVy
cm9yKQogewogICAgIGdfcmV0dXJuX2lmX2ZhaWwoc2VsZik7CmRpZmYgLS1naXQgYS9XZWJDb3Jl
L2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9HT2JqZWN0L1dlYktpdERPTVRlc3RPYmouaCBiL1dlYkNv
cmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0dPYmplY3QvV2ViS2l0RE9NVGVzdE9iai5oCmluZGV4
IDJlZWJkYjEuLjQyZDFmY2QgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90
ZXN0L0dPYmplY3QvV2ViS2l0RE9NVGVzdE9iai5oCisrKyBiL1dlYkNvcmUvYmluZGluZ3Mvc2Ny
aXB0cy90ZXN0L0dPYmplY3QvV2ViS2l0RE9NVGVzdE9iai5oCkBAIC03Nyw2ICs3Nyw5IEBAIFdF
QktJVF9BUEkgdm9pZAogd2Via2l0X2RvbV90ZXN0X29ial9pZGJfa2V5KFdlYktpdERPTVRlc3RP
YmoqIHNlbGYsIFdlYktpdERPTUlEQktleSoga2V5KTsKIAogV0VCS0lUX0FQSSB2b2lkCit3ZWJr
aXRfZG9tX3Rlc3Rfb2JqX29wdGlvbnNfb2JqZWN0KFdlYktpdERPTVRlc3RPYmoqIHNlbGYsIFdl
YktpdERPTU9wdGlvbnNPYmplY3QqIG9vLCBXZWJLaXRET01PcHRpb25zT2JqZWN0KiBvb28pOwor
CitXRUJLSVRfQVBJIHZvaWQKIHdlYmtpdF9kb21fdGVzdF9vYmpfbWV0aG9kX3dpdGhfZXhjZXB0
aW9uKFdlYktpdERPTVRlc3RPYmoqIHNlbGYsIEdFcnJvciAqKmVycm9yKTsKIAogCmRpZmYgLS1n
aXQgYS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RPYmouY3BwIGIvV2Vi
Q29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0T2JqLmNwcAppbmRleCA5ODIwZmFi
Li5kOGJmNjdlIDEwMDY0NAotLS0gYS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9K
U1Rlc3RPYmouY3BwCisrKyBiL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVz
dE9iai5jcHAKQEAgLTI3LDYgKzI3LDcgQEAKICNpbmNsdWRlICJJREJLZXkuaCIKICNpbmNsdWRl
ICJKU0RPTUJpbmRpbmcuaCIKICNpbmNsdWRlICJKU0V2ZW50TGlzdGVuZXIuaCIKKyNpbmNsdWRl
ICJKU09wdGlvbnNPYmplY3QuaCIKICNpbmNsdWRlICJKU1Rlc3RDYWxsYmFjay5oIgogI2luY2x1
ZGUgIkpTVGVzdE9iai5oIgogI2luY2x1ZGUgIkpTbG9nLmgiCkBAIC0xODEsNyArMTgyLDcgQEAg
Ym9vbCBKU1Rlc3RPYmpDb25zdHJ1Y3Rvcjo6Z2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKEV4ZWNT
dGF0ZSogZXhlYywgY29uc3QgSWRlbnQKICNkZWZpbmUgVEhVTktfR0VORVJBVE9SKGdlbmVyYXRv
cikKICNlbmRpZgogCi1zdGF0aWMgY29uc3QgSGFzaFRhYmxlVmFsdWUgSlNUZXN0T2JqUHJvdG90
eXBlVGFibGVWYWx1ZXNbNDddID0KK3N0YXRpYyBjb25zdCBIYXNoVGFibGVWYWx1ZSBKU1Rlc3RP
YmpQcm90b3R5cGVUYWJsZVZhbHVlc1s0OF0gPQogewogICAgIHsgIkNPTlNUX1ZBTFVFXzAiLCBE
b250RGVsZXRlIHwgUmVhZE9ubHksIChpbnRwdHJfdClzdGF0aWNfY2FzdDxQcm9wZXJ0eVNsb3Q6
OkdldFZhbHVlRnVuYz4oanNUZXN0T2JqQ09OU1RfVkFMVUVfMCksIChpbnRwdHJfdCkwIFRIVU5L
X0dFTkVSQVRPUigwKSB9LAogICAgIHsgIkNPTlNUX1ZBTFVFXzEiLCBEb250RGVsZXRlIHwgUmVh
ZE9ubHksIChpbnRwdHJfdClzdGF0aWNfY2FzdDxQcm9wZXJ0eVNsb3Q6OkdldFZhbHVlRnVuYz4o
anNUZXN0T2JqQ09OU1RfVkFMVUVfMSksIChpbnRwdHJfdCkwIFRIVU5LX0dFTkVSQVRPUigwKSB9
LApAQCAtMjA0LDYgKzIwNSw3IEBAIHN0YXRpYyBjb25zdCBIYXNoVGFibGVWYWx1ZSBKU1Rlc3RP
YmpQcm90b3R5cGVUYWJsZVZhbHVlc1s0N10gPQogICAgIHsgIm1ldGhvZFRoYXRSZXF1aXJlc0Fs
bEFyZ3NBbmRUaHJvd3MiLCBEb250RGVsZXRlIHwgRnVuY3Rpb24sIChpbnRwdHJfdClzdGF0aWNf
Y2FzdDxOYXRpdmVGdW5jdGlvbj4oanNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RUaGF0
UmVxdWlyZXNBbGxBcmdzQW5kVGhyb3dzKSwgKGludHB0cl90KTIgVEhVTktfR0VORVJBVE9SKDAp
IH0sCiAgICAgeyAic2VyaWFsaXplZFZhbHVlIiwgRG9udERlbGV0ZSB8IEZ1bmN0aW9uLCAoaW50
cHRyX3Qpc3RhdGljX2Nhc3Q8TmF0aXZlRnVuY3Rpb24+KGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0
aW9uU2VyaWFsaXplZFZhbHVlKSwgKGludHB0cl90KTEgVEhVTktfR0VORVJBVE9SKDApIH0sCiAg
ICAgeyAiaWRiS2V5IiwgRG9udERlbGV0ZSB8IEZ1bmN0aW9uLCAoaW50cHRyX3Qpc3RhdGljX2Nh
c3Q8TmF0aXZlRnVuY3Rpb24+KGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uSWRiS2V5KSwgKGlu
dHB0cl90KTEgVEhVTktfR0VORVJBVE9SKDApIH0sCisgICAgeyAib3B0aW9uc09iamVjdCIsIERv
bnREZWxldGUgfCBGdW5jdGlvbiwgKGludHB0cl90KXN0YXRpY19jYXN0PE5hdGl2ZUZ1bmN0aW9u
Pihqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk9wdGlvbnNPYmplY3QpLCAoaW50cHRyX3QpMiBU
SFVOS19HRU5FUkFUT1IoMCkgfSwKICAgICB7ICJtZXRob2RXaXRoRXhjZXB0aW9uIiwgRG9udERl
bGV0ZSB8IEZ1bmN0aW9uLCAoaW50cHRyX3Qpc3RhdGljX2Nhc3Q8TmF0aXZlRnVuY3Rpb24+KGpz
VGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aEV4Y2VwdGlvbiksIChpbnRwdHJfdCkw
IFRIVU5LX0dFTkVSQVRPUigwKSB9LAogICAgIHsgImN1c3RvbU1ldGhvZCIsIERvbnREZWxldGUg
fCBGdW5jdGlvbiwgKGludHB0cl90KXN0YXRpY19jYXN0PE5hdGl2ZUZ1bmN0aW9uPihqc1Rlc3RP
YmpQcm90b3R5cGVGdW5jdGlvbkN1c3RvbU1ldGhvZCksIChpbnRwdHJfdCkwIFRIVU5LX0dFTkVS
QVRPUigwKSB9LAogICAgIHsgImN1c3RvbU1ldGhvZFdpdGhBcmdzIiwgRG9udERlbGV0ZSB8IEZ1
bmN0aW9uLCAoaW50cHRyX3Qpc3RhdGljX2Nhc3Q8TmF0aXZlRnVuY3Rpb24+KGpzVGVzdE9ialBy
b3RvdHlwZUZ1bmN0aW9uQ3VzdG9tTWV0aG9kV2l0aEFyZ3MpLCAoaW50cHRyX3QpMyBUSFVOS19H
RU5FUkFUT1IoMCkgfSwKQEAgLTIzMyw3ICsyMzUsNyBAQCBzdGF0aWMgY29uc3QgSGFzaFRhYmxl
VmFsdWUgSlNUZXN0T2JqUHJvdG90eXBlVGFibGVWYWx1ZXNbNDddID0KIH07CiAKICN1bmRlZiBU
SFVOS19HRU5FUkFUT1IKLXN0YXRpYyBKU0NfQ09OU1RfSEFTSFRBQkxFIEhhc2hUYWJsZSBKU1Rl
c3RPYmpQcm90b3R5cGVUYWJsZSA9IHsgMTM1LCAxMjcsIEpTVGVzdE9ialByb3RvdHlwZVRhYmxl
VmFsdWVzLCAwIH07CitzdGF0aWMgSlNDX0NPTlNUX0hBU0hUQUJMRSBIYXNoVGFibGUgSlNUZXN0
T2JqUHJvdG90eXBlVGFibGUgPSB7IDEzNiwgMTI3LCBKU1Rlc3RPYmpQcm90b3R5cGVUYWJsZVZh
bHVlcywgMCB9OwogY29uc3QgQ2xhc3NJbmZvIEpTVGVzdE9ialByb3RvdHlwZTo6c19pbmZvID0g
eyAiVGVzdE9ialByb3RvdHlwZSIsIDAsICZKU1Rlc3RPYmpQcm90b3R5cGVUYWJsZSwgMCB9Owog
CiBKU09iamVjdCogSlNUZXN0T2JqUHJvdG90eXBlOjpzZWxmKEV4ZWNTdGF0ZSogZXhlYywgSlNH
bG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCkKQEAgLTk5MCw2ICs5OTIsMzEgQEAgRW5jb2RlZEpT
VmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbklkYktleShFeGVj
U3RhdGUqIGV4ZWMpCiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsK
IH0KIAorRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5j
dGlvbk9wdGlvbnNPYmplY3QoRXhlY1N0YXRlKiBleGVjKQoreworICAgIEpTVmFsdWUgdGhpc1Zh
bHVlID0gZXhlYy0+aG9zdFRoaXNWYWx1ZSgpOworICAgIGlmICghdGhpc1ZhbHVlLmluaGVyaXRz
KCZKU1Rlc3RPYmo6OnNfaW5mbykpCisgICAgICAgIHJldHVybiB0aHJvd1ZNVHlwZUVycm9yKGV4
ZWMpOworICAgIEpTVGVzdE9iaiogY2FzdGVkVGhpcyA9IHN0YXRpY19jYXN0PEpTVGVzdE9iaio+
KGFzT2JqZWN0KHRoaXNWYWx1ZSkpOworICAgIFRlc3RPYmoqIGltcCA9IHN0YXRpY19jYXN0PFRl
c3RPYmoqPihjYXN0ZWRUaGlzLT5pbXBsKCkpOworICAgIE9wdGlvbnNPYmplY3QqIG9vID0gdG9P
cHRpb25zT2JqZWN0KGV4ZWMtPmFyZ3VtZW50KDApKTsKKyAgICBpZiAoZXhlYy0+aGFkRXhjZXB0
aW9uKCkpCisgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CisK
KyAgICBpbnQgYXJnc0NvdW50ID0gZXhlYy0+YXJndW1lbnRDb3VudCgpOworICAgIGlmIChhcmdz
Q291bnQgPD0gMSkgeworICAgICAgICBpbXAtPm9wdGlvbnNPYmplY3Qob28pOworICAgICAgICBy
ZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOworICAgIH0KKworICAgIE9wdGlv
bnNPYmplY3QqIG9vbyA9IHRvT3B0aW9uc09iamVjdChleGVjLT5hcmd1bWVudCgxKSk7CisgICAg
aWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2Rl
KGpzVW5kZWZpbmVkKCkpOworCisgICAgaW1wLT5vcHRpb25zT2JqZWN0KG9vLCBvb28pOworICAg
IHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7Cit9CisKIEVuY29kZWRKU1Zh
bHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoRXhj
ZXB0aW9uKEV4ZWNTdGF0ZSogZXhlYykKIHsKICAgICBKU1ZhbHVlIHRoaXNWYWx1ZSA9IGV4ZWMt
Pmhvc3RUaGlzVmFsdWUoKTsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90
ZXN0L0pTL0pTVGVzdE9iai5oIGIvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNU
ZXN0T2JqLmgKaW5kZXggNjAxNGY3YS4uYzI3NDQ0YSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9iaW5k
aW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0T2JqLmgKKysrIGIvV2ViQ29yZS9iaW5kaW5ncy9z
Y3JpcHRzL3Rlc3QvSlMvSlNUZXN0T2JqLmgKQEAgLTk2LDYgKzk2LDcgQEAgSlNDOjpFbmNvZGVk
SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kVGhh
dFJlcXVpcmVzQWwKIEpTQzo6RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQ
cm90b3R5cGVGdW5jdGlvbk1ldGhvZFRoYXRSZXF1aXJlc0FsbEFyZ3NBbmRUaHJvd3MoSlNDOjpF
eGVjU3RhdGUqKTsKIEpTQzo6RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQ
cm90b3R5cGVGdW5jdGlvblNlcmlhbGl6ZWRWYWx1ZShKU0M6OkV4ZWNTdGF0ZSopOwogSlNDOjpF
bmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uSWRi
S2V5KEpTQzo6RXhlY1N0YXRlKik7CitKU0M6OkVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwg
anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25PcHRpb25zT2JqZWN0KEpTQzo6RXhlY1N0YXRlKik7
CiBKU0M6OkVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVu
Y3Rpb25NZXRob2RXaXRoRXhjZXB0aW9uKEpTQzo6RXhlY1N0YXRlKik7CiBKU0M6OkVuY29kZWRK
U1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25DdXN0b21NZXRo
b2QoSlNDOjpFeGVjU3RhdGUqKTsKIEpTQzo6RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBq
c1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbkN1c3RvbU1ldGhvZFdpdGhBcmdzKEpTQzo6RXhlY1N0
YXRlKik7CmRpZmYgLS1naXQgYS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9PYmpDL0RP
TVRlc3RPYmouaCBiL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L09iakMvRE9NVGVzdE9i
ai5oCmluZGV4IGZkNDAwOTUuLjc2NmQzMWYgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvYmluZGluZ3Mv
c2NyaXB0cy90ZXN0L09iakMvRE9NVGVzdE9iai5oCisrKyBiL1dlYkNvcmUvYmluZGluZ3Mvc2Ny
aXB0cy90ZXN0L09iakMvRE9NVGVzdE9iai5oCkBAIC0yOSw2ICsyOSw3IEBACiAjaWYgV0VCS0lU
X1ZFUlNJT05fTUFYX0FMTE9XRUQgPj0gV0VCS0lUX1ZFUlNJT05fTEFURVNUCiAKIEBjbGFzcyBE
T01JREJLZXk7CitAY2xhc3MgRE9NT3B0aW9uc09iamVjdDsKIEBjbGFzcyBET01UZXN0T2JqOwog
QGNsYXNzIERPTWxvZzsKIEBjbGFzcyBOU1N0cmluZzsKQEAgLTEyNyw2ICsxMjgsNyBAQCBlbnVt
IHsKIC0gKERPTVRlc3RPYmogKiltZXRob2RUaGF0UmVxdWlyZXNBbGxBcmdzQW5kVGhyb3dzOihO
U1N0cmluZyAqKXN0ckFyZyBvYmpBcmc6KERPTVRlc3RPYmogKilvYmpBcmc7CiAtICh2b2lkKXNl
cmlhbGl6ZWRWYWx1ZTooTlNTdHJpbmcgKilzZXJpYWxpemVkQXJnOwogLSAodm9pZClpZGJLZXk6
KERPTUlEQktleSAqKWtleTsKKy0gKHZvaWQpb3B0aW9uc09iamVjdDooRE9NT3B0aW9uc09iamVj
dCAqKW9vIG9vbzooRE9NT3B0aW9uc09iamVjdCAqKW9vbzsKIC0gKHZvaWQpbWV0aG9kV2l0aEV4
Y2VwdGlvbjsKIC0gKHZvaWQpY3VzdG9tTWV0aG9kOwogLSAodm9pZCljdXN0b21NZXRob2RXaXRo
QXJnczooaW50KWludEFyZyBzdHJBcmc6KE5TU3RyaW5nICopc3RyQXJnIG9iakFyZzooRE9NVGVz
dE9iaiAqKW9iakFyZzsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0
L09iakMvRE9NVGVzdE9iai5tbSBiL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L09iakMv
RE9NVGVzdE9iai5tbQppbmRleCA2MTI1OTdmLi5hYzA0MjM1IDEwMDY0NAotLS0gYS9XZWJDb3Jl
L2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9PYmpDL0RPTVRlc3RPYmoubW0KKysrIGIvV2ViQ29yZS9i
aW5kaW5ncy9zY3JpcHRzL3Rlc3QvT2JqQy9ET01UZXN0T2JqLm1tCkBAIC0zNSw2ICszNSw3IEBA
CiAjaW1wb3J0ICJET01FdmVudEludGVybmFsLmgiCiAjaW1wb3J0ICJET01JREJLZXlJbnRlcm5h
bC5oIgogI2ltcG9ydCAiRE9NTm9kZUludGVybmFsLmgiCisjaW1wb3J0ICJET01PcHRpb25zT2Jq
ZWN0SW50ZXJuYWwuaCIKICNpbXBvcnQgIkRPTVN0eWxlU2hlZXRJbnRlcm5hbC5oIgogI2ltcG9y
dCAiRE9NVGVzdE9iakludGVybmFsLmgiCiAjaW1wb3J0ICJET01sb2dJbnRlcm5hbC5oIgpAQCAt
NDUsNiArNDYsNyBAQAogI2ltcG9ydCAiSlNNYWluVGhyZWFkRXhlY1N0YXRlLmgiCiAjaW1wb3J0
ICJLVVJMLmgiCiAjaW1wb3J0ICJPYmpDRXZlbnRMaXN0ZW5lci5oIgorI2ltcG9ydCAiT3B0aW9u
c09iamVjdC5oIgogI2ltcG9ydCAiU2VyaWFsaXplZFNjcmlwdFZhbHVlLmgiCiAjaW1wb3J0ICJU
ZXN0T2JqLmgiCiAjaW1wb3J0ICJUaHJlYWRDaGVjay5oIgpAQCAtNTMzLDYgKzUzNSwxMiBAQAog
ICAgIElNUEwtPmlkYktleShjb3JlKGtleSkpOwogfQogCistICh2b2lkKW9wdGlvbnNPYmplY3Q6
KERPTU9wdGlvbnNPYmplY3QgKilvbyBvb286KERPTU9wdGlvbnNPYmplY3QgKilvb28KK3sKKyAg
ICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CisgICAgSU1QTC0+b3B0aW9u
c09iamVjdChjb3JlKG9vKSwgY29yZShvb28pKTsKK30KKwogLSAodm9pZCltZXRob2RXaXRoRXhj
ZXB0aW9uCiB7CiAgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOwpkaWZm
IC0tZ2l0IGEvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVGVzdE9iai5pZGwgYi9XZWJD
b3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9UZXN0T2JqLmlkbAppbmRleCA1Mzc1MzRiLi5jMGQw
ZTg4IDEwMDY0NAotLS0gYS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9UZXN0T2JqLmlk
bAorKysgYi9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9UZXN0T2JqLmlkbApAQCAtNzQs
NiArNzQsNyBAQCBtb2R1bGUgdGVzdCB7CiAKICAgICAgICAgdm9pZCBzZXJpYWxpemVkVmFsdWUo
aW4gU2VyaWFsaXplZFNjcmlwdFZhbHVlIHNlcmlhbGl6ZWRBcmcpOwogICAgICAgICB2b2lkIGlk
YktleShpbiBJREJLZXkga2V5KTsKKyAgICAgICAgdm9pZCBvcHRpb25zT2JqZWN0KGluIE9wdGlv
bnNPYmplY3Qgb28sIGluIFtPcHRpb25hbF0gT3B0aW9uc09iamVjdCBvb28pOwogCiAgICAgICAg
IC8vIEV4Y2VwdGlvbnMKICAgICAgICAgdm9pZCBtZXRob2RXaXRoRXhjZXB0aW9uKCkgcmFpc2Vz
KERPTUV4Y2VwdGlvbik7CmRpZmYgLS1naXQgYS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVz
dC9WOC9WOFRlc3RNZWRpYVF1ZXJ5TGlzdExpc3RlbmVyLmNwcCBiL1dlYkNvcmUvYmluZGluZ3Mv
c2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdE1lZGlhUXVlcnlMaXN0TGlzdGVuZXIuY3BwCmluZGV4IGYx
YzRlMmIuLmFiOWU2ZGIgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0
L1Y4L1Y4VGVzdE1lZGlhUXVlcnlMaXN0TGlzdGVuZXIuY3BwCisrKyBiL1dlYkNvcmUvYmluZGlu
Z3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdE1lZGlhUXVlcnlMaXN0TGlzdGVuZXIuY3BwCkBAIC01
Nyw3ICs1Nyw3IEBAIHN0YXRpYyB2ODo6UGVyc2lzdGVudDx2ODo6RnVuY3Rpb25UZW1wbGF0ZT4g
Q29uZmlndXJlVjhUZXN0TWVkaWFRdWVyeUxpc3RMaXN0ZW5lCiB7CiAgICAgdjg6OkxvY2FsPHY4
OjpTaWduYXR1cmU+IGRlZmF1bHRTaWduYXR1cmUgPSBjb25maWd1cmVUZW1wbGF0ZShkZXNjLCAi
VGVzdE1lZGlhUXVlcnlMaXN0TGlzdGVuZXIiLCB2ODo6UGVyc2lzdGVudDx2ODo6RnVuY3Rpb25U
ZW1wbGF0ZT4oKSwgVjhUZXN0TWVkaWFRdWVyeUxpc3RMaXN0ZW5lcjo6aW50ZXJuYWxGaWVsZENv
dW50LAogICAgICAgICAwLCAwLAotICAgICAgICBUZXN0TWVkaWFRdWVyeUxpc3RMaXN0ZW5lckNh
bGxiYWNrcywgc2l6ZW9mKFRlc3RNZWRpYVF1ZXJ5TGlzdExpc3RlbmVyQ2FsbGJhY2tzKSAvIHNp
emVvZigqVGVzdE1lZGlhUXVlcnlMaXN0TGlzdGVuZXJDYWxsYmFja3MpKTsKKyAgICAgICAgVGVz
dE1lZGlhUXVlcnlMaXN0TGlzdGVuZXJDYWxsYmFja3MsIFdURl9BUlJBWV9MRU5HVEgoVGVzdE1l
ZGlhUXVlcnlMaXN0TGlzdGVuZXJDYWxsYmFja3MpKTsKICAgICB2ODo6TG9jYWw8djg6Ok9iamVj
dFRlbXBsYXRlPiBpbnN0YW5jZSA9IGRlc2MtPkluc3RhbmNlVGVtcGxhdGUoKTsKICAgICB2ODo6
TG9jYWw8djg6Ok9iamVjdFRlbXBsYXRlPiBwcm90byA9IGRlc2MtPlByb3RvdHlwZVRlbXBsYXRl
KCk7CiAgICAgCmRpZmYgLS1naXQgYS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9W
OFRlc3RPYmouY3BwIGIvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0T2Jq
LmNwcAppbmRleCBjNGE3NmFjLi5lMDZkM2YyIDEwMDY0NAotLS0gYS9XZWJDb3JlL2JpbmRpbmdz
L3NjcmlwdHMvdGVzdC9WOC9WOFRlc3RPYmouY3BwCisrKyBiL1dlYkNvcmUvYmluZGluZ3Mvc2Ny
aXB0cy90ZXN0L1Y4L1Y4VGVzdE9iai5jcHAKQEAgLTI1LDYgKzI1LDcgQEAKICNpbmNsdWRlICJI
VE1MTmFtZXMuaCIKICNpbmNsdWRlICJJREJCaW5kaW5nVXRpbGl0aWVzLmgiCiAjaW5jbHVkZSAi
SURCS2V5LmgiCisjaW5jbHVkZSAiT3B0aW9uc09iamVjdC5oIgogI2luY2x1ZGUgIlJ1bnRpbWVF
bmFibGVkRmVhdHVyZXMuaCIKICNpbmNsdWRlICJTY3JpcHRBcmd1bWVudHMuaCIKICNpbmNsdWRl
ICJTY3JpcHRDYWxsU3RhY2suaCIKQEAgLTcyNyw2ICs3MjgsMjAgQEAgc3RhdGljIHY4OjpIYW5k
bGU8djg6OlZhbHVlPiBpZGJLZXlDYWxsYmFjayhjb25zdCB2ODo6QXJndW1lbnRzJiBhcmdzKQog
ICAgIHJldHVybiB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4oKTsKIH0KIAorc3RhdGljIHY4OjpIYW5k
bGU8djg6OlZhbHVlPiBvcHRpb25zT2JqZWN0Q2FsbGJhY2soY29uc3Qgdjg6OkFyZ3VtZW50cyYg
YXJncykKK3sKKyAgICBJTkNfU1RBVFMoIkRPTS5UZXN0T2JqLm9wdGlvbnNPYmplY3QiKTsKKyAg
ICBUZXN0T2JqKiBpbXAgPSBWOFRlc3RPYmo6OnRvTmF0aXZlKGFyZ3MuSG9sZGVyKCkpOworICAg
IEVYQ0VQVElPTl9CTE9DSyhPcHRpb25zT2JqZWN0LCBvbywgYXJnc1swXSk7CisgICAgaWYgKGFy
Z3MuTGVuZ3RoKCkgPD0gMSkgeworICAgICAgICBpbXAtPm9wdGlvbnNPYmplY3Qob28pOworICAg
ICAgICByZXR1cm4gdjg6OkhhbmRsZTx2ODo6VmFsdWU+KCk7CisgICAgfQorICAgIEVYQ0VQVElP
Tl9CTE9DSyhPcHRpb25zT2JqZWN0LCBvb28sIGFyZ3NbMV0pOworICAgIGltcC0+b3B0aW9uc09i
amVjdChvbywgb29vKTsKKyAgICByZXR1cm4gdjg6OkhhbmRsZTx2ODo6VmFsdWU+KCk7Cit9CisK
IHN0YXRpYyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gbWV0aG9kV2l0aEV4Y2VwdGlvbkNhbGxiYWNr
KGNvbnN0IHY4OjpBcmd1bWVudHMmIGFyZ3MpCiB7CiAgICAgSU5DX1NUQVRTKCJET00uVGVzdE9i
ai5tZXRob2RXaXRoRXhjZXB0aW9uIik7CkBAIC0xMjAxLDYgKzEyMTYsNyBAQCBzdGF0aWMgY29u
c3QgQmF0Y2hlZENhbGxiYWNrIFRlc3RPYmpDYWxsYmFja3NbXSA9IHsKICAgICB7Im9iak1ldGhv
ZCIsIFRlc3RPYmpJbnRlcm5hbDo6b2JqTWV0aG9kQ2FsbGJhY2t9LAogICAgIHsic2VyaWFsaXpl
ZFZhbHVlIiwgVGVzdE9iakludGVybmFsOjpzZXJpYWxpemVkVmFsdWVDYWxsYmFja30sCiAgICAg
eyJpZGJLZXkiLCBUZXN0T2JqSW50ZXJuYWw6OmlkYktleUNhbGxiYWNrfSwKKyAgICB7Im9wdGlv
bnNPYmplY3QiLCBUZXN0T2JqSW50ZXJuYWw6Om9wdGlvbnNPYmplY3RDYWxsYmFja30sCiAgICAg
eyJtZXRob2RXaXRoRXhjZXB0aW9uIiwgVGVzdE9iakludGVybmFsOjptZXRob2RXaXRoRXhjZXB0
aW9uQ2FsbGJhY2t9LAogICAgIHsiY3VzdG9tTWV0aG9kIiwgVjhUZXN0T2JqOjpjdXN0b21NZXRo
b2RDYWxsYmFja30sCiAgICAgeyJjdXN0b21NZXRob2RXaXRoQXJncyIsIFY4VGVzdE9iajo6Y3Vz
dG9tTWV0aG9kV2l0aEFyZ3NDYWxsYmFja30sCmRpZmYgLS1naXQgYS9XZWJDb3JlL2JpbmRpbmdz
L3Y4L09wdGlvbnNPYmplY3QuY3BwIGIvV2ViQ29yZS9iaW5kaW5ncy92OC9PcHRpb25zT2JqZWN0
LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZDZmZjM3Ci0tLSAvZGV2
L251bGwKKysrIGIvV2ViQ29yZS9iaW5kaW5ncy92OC9PcHRpb25zT2JqZWN0LmNwcApAQCAtMCww
ICsxLDk3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkK
KyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAq
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIk9wdGlvbnNP
YmplY3QuaCIKKyNpbmNsdWRlICJWOEJpbmRpbmcuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgewor
CitPcHRpb25zT2JqZWN0OjpPcHRpb25zT2JqZWN0KCkKK3sKK30KKworT3B0aW9uc09iamVjdDo6
T3B0aW9uc09iamVjdChjb25zdCB2ODo6TG9jYWw8djg6OlZhbHVlPiYgb3B0aW9ucykKKyAgICA6
IG1fb3B0aW9ucyhvcHRpb25zKQoreworfQorCitPcHRpb25zT2JqZWN0Ojp+T3B0aW9uc09iamVj
dCgpCit7Cit9CisKK09wdGlvbnNPYmplY3QmIE9wdGlvbnNPYmplY3Q6Om9wZXJhdG9yPShjb25z
dCBPcHRpb25zT2JqZWN0JiBvcHRpb25zT2JqZWN0KQoreworICAgIG1fb3B0aW9ucyA9IG9wdGlv
bnNPYmplY3QubV9vcHRpb25zOworICAgIHJldHVybiAqdGhpczsKK30KKworYm9vbCBPcHRpb25z
T2JqZWN0Ojp1bmRlZmluZWRPck51bGwoKSBjb25zdAoreworICAgIGlmIChtX29wdGlvbnMuSXNF
bXB0eSgpKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICByZXR1cm4gaXNVbmRlZmluZWRPck51
bGwobV9vcHRpb25zKTsKK30KKworYm9vbCBPcHRpb25zT2JqZWN0OjpnZXRLZXlCb29sKGNvbnN0
IFN0cmluZyYga2V5LCBib29sJiB2YWx1ZSkgY29uc3QKK3sKKyAgICB2ODo6TG9jYWw8djg6OlZh
bHVlPiB2OFZhbHVlOworICAgIGlmICghZ2V0S2V5KGtleSwgdjhWYWx1ZSkpCisgICAgICAgIHJl
dHVybiBmYWxzZTsKKworICAgIGlmICghdjhWYWx1ZS0+SXNCb29sZWFuKCkpCisgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICB2ODo6TG9jYWw8djg6OkJvb2xlYW4+IHY4Qm9vbCA9IHY4VmFsdWUt
PlRvQm9vbGVhbigpOworICAgIEFTU0VSVCghdjhCb29sLklzRW1wdHkoKSk7CisKKyAgICB2YWx1
ZSA9IHY4Qm9vbC0+VmFsdWUoKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBPcHRpb25z
T2JqZWN0OjpnZXRLZXlTdHJpbmcoY29uc3QgU3RyaW5nJiBrZXksIFN0cmluZyYgdmFsdWUpIGNv
bnN0Cit7CisgICAgdjg6OkxvY2FsPHY4OjpWYWx1ZT4gdjhWYWx1ZTsKKyAgICBpZiAoIWdldEtl
eShrZXksIHY4VmFsdWUpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBpZiAoIXY4VmFs
dWUtPklzU3RyaW5nKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIHZhbHVlID0gdjhW
YWx1ZVRvV2ViQ29yZVN0cmluZyh2OFZhbHVlKTsKKyAgICBBU1NFUlQoIXY4VmFsdWUuSXNFbXB0
eSgpKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBPcHRpb25zT2JqZWN0OjpnZXRLZXko
Y29uc3QgU3RyaW5nJiBrZXksIHY4OjpMb2NhbDx2ODo6VmFsdWU+JiB2YWx1ZSkgY29uc3QKK3sK
KyAgICBpZiAodW5kZWZpbmVkT3JOdWxsKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB2
ODo6TG9jYWw8djg6Ok9iamVjdD4gb3B0aW9ucyA9IG1fb3B0aW9ucy0+VG9PYmplY3QoKTsKKyAg
ICBBU1NFUlQoIW9wdGlvbnMuSXNFbXB0eSgpKTsKKyAgICB2YWx1ZSA9IG9wdGlvbnMtPkdldCh2
OFN0cmluZyhrZXkpKTsKKyAgICByZXR1cm4gIXZhbHVlLklzRW1wdHkoKTsKK30KKworfSAvLyBu
YW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9iaW5kaW5ncy92OC9PcHRpb25z
T2JqZWN0LmggYi9XZWJDb3JlL2JpbmRpbmdzL3Y4L09wdGlvbnNPYmplY3QuaApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZGE2ZWE2Ci0tLSAvZGV2L251bGwKKysrIGIvV2Vi
Q29yZS9iaW5kaW5ncy92OC9PcHRpb25zT2JqZWN0LmgKQEAgLTAsMCArMSw1OSBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuICBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
QU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVE
CisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBP
TiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisK
KyNpZm5kZWYgT3B0aW9uc09iamVjdF9oCisjZGVmaW5lIE9wdGlvbnNPYmplY3RfaAorCisjaW5j
bHVkZSAiUGxhdGZvcm1TdHJpbmcuaCIKKyNpbmNsdWRlIDx2OC5oPgorI2luY2x1ZGUgPHd0Zi9O
b25Db3B5YWJsZS5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIE9wdGlvbnNPYmpl
Y3QgeworcHVibGljOgorICAgIE9wdGlvbnNPYmplY3QoKTsKKyAgICBPcHRpb25zT2JqZWN0KGNv
bnN0IHY4OjpMb2NhbDx2ODo6VmFsdWU+JiBvcHRpb25zKTsKKyAgICB+T3B0aW9uc09iamVjdCgp
OworCisgICAgT3B0aW9uc09iamVjdCYgb3BlcmF0b3I9KGNvbnN0IE9wdGlvbnNPYmplY3QmKTsK
KworICAgIGJvb2wgdW5kZWZpbmVkT3JOdWxsKCkgY29uc3Q7CisgICAgYm9vbCBnZXRLZXlCb29s
KGNvbnN0IFN0cmluZyYga2V5LCBib29sJiB2YWx1ZSkgY29uc3Q7CisgICAgYm9vbCBnZXRLZXlT
dHJpbmcoY29uc3QgU3RyaW5nJiBrZXksIFN0cmluZyYgdmFsdWUpIGNvbnN0OworCitwcml2YXRl
OgorICAgIGJvb2wgZ2V0S2V5KGNvbnN0IFN0cmluZyYga2V5LCB2ODo6TG9jYWw8djg6OlZhbHVl
PiYpIGNvbnN0OworCisgICAgLy8gVGhpcyBvYmplY3QgY2FuIG9ubHkgYmUgdXNlZCBzYWZlbHkg
d2hlbiBzdGFjayBhbGxvY2F0ZWQgYmVjYXVzZSBvZiB2ODo6TG9jYWwuCisgICAgc3RhdGljIHZv
aWQqIG9wZXJhdG9yIG5ldyhzaXplX3QpOyAKKyAgICBzdGF0aWMgdm9pZCBvcGVyYXRvciBkZWxl
dGUodm9pZCAqKTsKKworICAgIHY4OjpMb2NhbDx2ODo6VmFsdWU+IG1fb3B0aW9uczsKK307CisK
K30KKworI2VuZGlmIC8vIE9wdGlvbnNPYmplY3RfaApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9zdG9y
YWdlL0lEQkRhdGFiYXNlLmNwcCBiL1dlYkNvcmUvc3RvcmFnZS9JREJEYXRhYmFzZS5jcHAKaW5k
ZXggMTUzNmJhNy4uNzJmZjE3ZCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9zdG9yYWdlL0lEQkRhdGFi
YXNlLmNwcAorKysgYi9XZWJDb3JlL3N0b3JhZ2UvSURCRGF0YWJhc2UuY3BwCkBAIC01NiwxMyAr
NTYsMTkgQEAgdm9pZCBJREJEYXRhYmFzZTo6c2V0U2V0VmVyc2lvblRyYW5zYWN0aW9uKElEQlRy
YW5zYWN0aW9uQmFja2VuZEludGVyZmFjZSogdHJhbnMKICAgICBtX3NldFZlcnNpb25UcmFuc2Fj
dGlvbiA9IHRyYW5zYWN0aW9uOwogfQogCi1QYXNzUmVmUHRyPElEQk9iamVjdFN0b3JlPiBJREJE
YXRhYmFzZTo6Y3JlYXRlT2JqZWN0U3RvcmUoY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBTdHJp
bmcmIGtleVBhdGgsIGJvb2wgYXV0b0luY3JlbWVudCwgRXhjZXB0aW9uQ29kZSYgZWMpCitQYXNz
UmVmUHRyPElEQk9iamVjdFN0b3JlPiBJREJEYXRhYmFzZTo6Y3JlYXRlT2JqZWN0U3RvcmUoY29u
c3QgU3RyaW5nJiBuYW1lLCBjb25zdCBPcHRpb25zT2JqZWN0JiBvcHRpb25zLCBFeGNlcHRpb25D
b2RlJiBlYykKIHsKICAgICBpZiAoIW1fc2V0VmVyc2lvblRyYW5zYWN0aW9uKSB7CiAgICAgICAg
IGVjID0gSURCRGF0YWJhc2VFeGNlcHRpb246Ok5PVF9BTExPV0VEX0VSUjsKICAgICAgICAgcmV0
dXJuIDA7CiAgICAgfQogCisgICAgU3RyaW5nIGtleVBhdGg7CisgICAgb3B0aW9ucy5nZXRLZXlT
dHJpbmcoImtleVBhdGgiLCBrZXlQYXRoKTsKKyAgICBib29sIGF1dG9JbmNyZW1lbnQgPSBmYWxz
ZTsKKyAgICBvcHRpb25zLmdldEtleUJvb2woImF1dG9JbmNyZW1lbnQiLCBhdXRvSW5jcmVtZW50
KTsKKyAgICAvLyBGSVhNRTogTG9vayB1cCBldmljdGFibGUgYW5kIHBhc3MgdGhhdCBvbiBhcyB3
ZWxsLgorCiAgICAgUmVmUHRyPElEQk9iamVjdFN0b3JlQmFja2VuZEludGVyZmFjZT4gb2JqZWN0
U3RvcmUgPSBtX2JhY2tlbmQtPmNyZWF0ZU9iamVjdFN0b3JlKG5hbWUsIGtleVBhdGgsIGF1dG9J
bmNyZW1lbnQsIG1fc2V0VmVyc2lvblRyYW5zYWN0aW9uLmdldCgpLCBlYyk7CiAgICAgaWYgKCFv
YmplY3RTdG9yZSkgewogICAgICAgICAvLyBGSVhNRTogQVNTRVJUKGVjKSBvbmNlIFVOS05PV05f
RVJSIGlzIG5vdCAwLgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9zdG9yYWdlL0lEQkRhdGFiYXNlLmgg
Yi9XZWJDb3JlL3N0b3JhZ2UvSURCRGF0YWJhc2UuaAppbmRleCBkZjU2ZjQ2Li4zZTMzNDcyIDEw
MDY0NAotLS0gYS9XZWJDb3JlL3N0b3JhZ2UvSURCRGF0YWJhc2UuaAorKysgYi9XZWJDb3JlL3N0
b3JhZ2UvSURCRGF0YWJhc2UuaApAQCAtMzEsNiArMzEsNyBAQAogI2luY2x1ZGUgIklEQkRhdGFi
YXNlQmFja2VuZEludGVyZmFjZS5oIgogI2luY2x1ZGUgIklEQk9iamVjdFN0b3JlLmgiCiAjaW5j
bHVkZSAiSURCVHJhbnNhY3Rpb24uaCIKKyNpbmNsdWRlICJPcHRpb25zT2JqZWN0LmgiCiAjaW5j
bHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KICNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgogI2lu
Y2x1ZGUgPHd0Zi9SZWZQdHIuaD4KQEAgLTU5LDEzICs2MCwxMiBAQCBwdWJsaWM6CiAgICAgUGFz
c1JlZlB0cjxET01TdHJpbmdMaXN0PiBvYmplY3RTdG9yZXMoKSBjb25zdCB7IHJldHVybiBtX2Jh
Y2tlbmQtPm9iamVjdFN0b3JlcygpOyB9CiAKICAgICAvLyBGSVhNRTogVHJ5IHRvIG1vZGlmeSB0
aGUgY29kZSBnZW5lcmF0b3Igc28gdGhpcyBpcyB1bm5lZWRlZC4KLSAgICBQYXNzUmVmUHRyPElE
Qk9iamVjdFN0b3JlPiBjcmVhdGVPYmplY3RTdG9yZShjb25zdCBTdHJpbmcmIG5hbWUsIEV4Y2Vw
dGlvbkNvZGUmIGVjKSB7IHJldHVybiBjcmVhdGVPYmplY3RTdG9yZShuYW1lLCBTdHJpbmcoKSwg
ZWMpOyB9Ci0gICAgUGFzc1JlZlB0cjxJREJPYmplY3RTdG9yZT4gY3JlYXRlT2JqZWN0U3RvcmUo
Y29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBTdHJpbmcmIGtleVBhdGgsIEV4Y2VwdGlvbkNvZGUm
IGVjKSB7IHJldHVybiBjcmVhdGVPYmplY3RTdG9yZShuYW1lLCBrZXlQYXRoLCBmYWxzZSwgZWMp
OyB9CisgICAgUGFzc1JlZlB0cjxJREJPYmplY3RTdG9yZT4gY3JlYXRlT2JqZWN0U3RvcmUoY29u
c3QgU3RyaW5nJiBuYW1lLCBFeGNlcHRpb25Db2RlJiBlYykgeyByZXR1cm4gY3JlYXRlT2JqZWN0
U3RvcmUobmFtZSwgT3B0aW9uc09iamVjdCgpLCBlYyk7IH0KICAgICBQYXNzUmVmUHRyPElEQlRy
YW5zYWN0aW9uPiB0cmFuc2FjdGlvbihTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBF
eGNlcHRpb25Db2RlJiBlYykgeyByZXR1cm4gdHJhbnNhY3Rpb24oY29udGV4dCwgMCwgZWMpOyB9
CiAgICAgUGFzc1JlZlB0cjxJREJUcmFuc2FjdGlvbj4gdHJhbnNhY3Rpb24oU2NyaXB0RXhlY3V0
aW9uQ29udGV4dCogY29udGV4dCwgRE9NU3RyaW5nTGlzdCogc3RvcmVOYW1lcywgRXhjZXB0aW9u
Q29kZSYgZWMpIHsgcmV0dXJuIHRyYW5zYWN0aW9uKGNvbnRleHQsIHN0b3JlTmFtZXMsIElEQlRy
YW5zYWN0aW9uOjpSRUFEX09OTFksIGVjKTsgfQogICAgIFBhc3NSZWZQdHI8SURCVHJhbnNhY3Rp
b24+IHRyYW5zYWN0aW9uKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIERPTVN0cmlu
Z0xpc3QqIHN0b3JlTmFtZXMsIHVuc2lnbmVkIHNob3J0IG1vZGUsIEV4Y2VwdGlvbkNvZGUmIGVj
KSB7IHJldHVybiB0cmFuc2FjdGlvbihjb250ZXh0LCBzdG9yZU5hbWVzLCBtb2RlLCAwLCBlYyk7
IH0gLy8gRklYTUU6IHdoYXQgc2hvdWxkIHRoZSBkZWZhdWx0IHRpbWVvdXQgYmU/CiAKLSAgICBQ
YXNzUmVmUHRyPElEQk9iamVjdFN0b3JlPiBjcmVhdGVPYmplY3RTdG9yZShjb25zdCBTdHJpbmcm
IG5hbWUsIGNvbnN0IFN0cmluZyYga2V5UGF0aCwgYm9vbCBhdXRvSW5jcmVtZW50LCBFeGNlcHRp
b25Db2RlJik7CisgICAgUGFzc1JlZlB0cjxJREJPYmplY3RTdG9yZT4gY3JlYXRlT2JqZWN0U3Rv
cmUoY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBPcHRpb25zT2JqZWN0JiwgRXhjZXB0aW9uQ29k
ZSYpOwogICAgIHZvaWQgcmVtb3ZlT2JqZWN0U3RvcmUoY29uc3QgU3RyaW5nJiBuYW1lLCBFeGNl
cHRpb25Db2RlJik7CiAgICAgUGFzc1JlZlB0cjxJREJSZXF1ZXN0PiBzZXRWZXJzaW9uKFNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQqLCBjb25zdCBTdHJpbmcmIHZlcnNpb24sIEV4Y2VwdGlvbkNvZGUm
KTsKICAgICBQYXNzUmVmUHRyPElEQlRyYW5zYWN0aW9uPiB0cmFuc2FjdGlvbihTY3JpcHRFeGVj
dXRpb25Db250ZXh0KiwgRE9NU3RyaW5nTGlzdCosIHVuc2lnbmVkIHNob3J0IG1vZGUsIHVuc2ln
bmVkIGxvbmcgdGltZW91dCwgRXhjZXB0aW9uQ29kZSYpOwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9z
dG9yYWdlL0lEQkRhdGFiYXNlLmlkbCBiL1dlYkNvcmUvc3RvcmFnZS9JREJEYXRhYmFzZS5pZGwK
aW5kZXggMWFiNWIwYi4uYjA4ZDQ1OSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9zdG9yYWdlL0lEQkRh
dGFiYXNlLmlkbAorKysgYi9XZWJDb3JlL3N0b3JhZ2UvSURCRGF0YWJhc2UuaWRsCkBAIC0zMiw3
ICszMiw3IEBAIG1vZHVsZSBzdG9yYWdlIHsKICAgICAgICAgcmVhZG9ubHkgYXR0cmlidXRlIERP
TVN0cmluZyB2ZXJzaW9uOwogICAgICAgICByZWFkb25seSBhdHRyaWJ1dGUgRE9NU3RyaW5nTGlz
dCBvYmplY3RTdG9yZXM7CiAKLSAgICAgICAgSURCT2JqZWN0U3RvcmUgY3JlYXRlT2JqZWN0U3Rv
cmUoaW4gRE9NU3RyaW5nIG5hbWUsIGluIFtPcHRpb25hbCwgQ29udmVydE51bGxUb051bGxTdHJp
bmddIERPTVN0cmluZyBrZXlQYXRoLCBpbiBbT3B0aW9uYWxdIGJvb2xlYW4gYXV0b0luY3JlbWVu
dCkKKyAgICAgICAgSURCT2JqZWN0U3RvcmUgY3JlYXRlT2JqZWN0U3RvcmUoaW4gRE9NU3RyaW5n
IG5hbWUsIGluIFtPcHRpb25hbF0gT3B0aW9uc09iamVjdCBvcHRpb25zKQogICAgICAgICAgICAg
cmFpc2VzIChJREJEYXRhYmFzZUV4Y2VwdGlvbik7CiAgICAgICAgIHZvaWQgcmVtb3ZlT2JqZWN0
U3RvcmUoaW4gRE9NU3RyaW5nIG5hbWUpCiAgICAgICAgICAgICByYWlzZXMgKElEQkRhdGFiYXNl
RXhjZXB0aW9uKTsKZGlmZiAtLWdpdCBhL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViSURCVHJh
bnNhY3Rpb24uaCBiL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViSURCVHJhbnNhY3Rpb24uaApp
bmRleCBlNzVkZTNjLi41ODRiNjdhIDEwMDY0NAotLS0gYS9XZWJLaXQvY2hyb21pdW0vcHVibGlj
L1dlYklEQlRyYW5zYWN0aW9uLmgKKysrIGIvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJJREJU
cmFuc2FjdGlvbi5oCkBAIC0yNiw2ICsyNiw3IEBACiAjaWZuZGVmIFdlYklEQlRyYW5zYWN0aW9u
X2gKICNkZWZpbmUgV2ViSURCVHJhbnNhY3Rpb25faAogCisjaW5jbHVkZSAiV2ViRXhjZXB0aW9u
Q29kZS5oIgogI2luY2x1ZGUgIldlYlN0cmluZy5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7IGNs
YXNzIElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZTsgfQpAQCAtNDUsMTAgKzQ2LDE1IEBA
IHB1YmxpYzoKICAgICAgICAgV0VCS0lUX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICBy
ZXR1cm4gMDsKICAgICB9CisgICAgdmlydHVhbCBXZWJJREJPYmplY3RTdG9yZSogb2JqZWN0U3Rv
cmUoY29uc3QgV2ViU3RyaW5nJiBuYW1lLCBXZWJFeGNlcHRpb25Db2RlJikKKyAgICB7CisgICAg
ICAgIHJldHVybiBvYmplY3RTdG9yZShuYW1lKTsKKyAgICB9CisgICAgLy8gRklYTUU6IFJlbW92
ZSB0aGlzIGFmdGVyIFdlYktpdCByb2xsLgogICAgIHZpcnR1YWwgV2ViSURCT2JqZWN0U3RvcmUq
IG9iamVjdFN0b3JlKGNvbnN0IFdlYlN0cmluZyYgbmFtZSkKICAgICB7Ci0gICAgICAgIFdFQktJ
VF9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIFdlYkV4
Y2VwdGlvbkNvZGUgZWM7CisgICAgICAgIHJldHVybiBvYmplY3RTdG9yZShuYW1lLCBlYyk7CiAg
ICAgfQogICAgIHZpcnR1YWwgdm9pZCBhYm9ydCgpIHsgV0VCS0lUX0FTU0VSVF9OT1RfUkVBQ0hF
RCgpOyB9CiAgICAgdmlydHVhbCB2b2lkIGRpZENvbXBsZXRlVGFza0V2ZW50cygpIHsgV0VCS0lU
X0FTU0VSVF9OT1RfUkVBQ0hFRCgpOyB9Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>74849</attachid>
            <date>2010-11-25 03:48:14 -0800</date>
            <delta_ts>2010-11-25 04:03:54 -0800</delta_ts>
            <desc>address steve&apos;s coments</desc>
            <filename>a</filename>
            <type>text/plain</type>
            <size>31304</size>
            <attacher name="Jeremy Orlow">jorlow</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxv
ZwppbmRleCA2YjVmNzU5Li4xNzI0MDI4IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VM
b2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTQgQEAKKzIwMTAtMTEt
MjUgIEplcmVteSBPcmxvdyAgPGpvcmxvd0BjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQWRkIGFuIE9wdGlvbnNPYmplY3QgY2xh
c3MgZm9yIEluZGV4ZWREQiAoYW5kIGxhdGVyIEdlb2xvY2F0aW9uKQorICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTAwMzAKKworICAgICAgICAqIHN0b3Jh
Z2UvaW5kZXhlZGRiL2NyZWF0ZS1vYmplY3Qtc3RvcmUtb3B0aW9ucy1leHBlY3RlZC50eHQ6IEFk
ZGVkLgorICAgICAgICAqIHN0b3JhZ2UvaW5kZXhlZGRiL2NyZWF0ZS1vYmplY3Qtc3RvcmUtb3B0
aW9ucy5odG1sOiBBZGRlZC4KKyAgICAgICAgKiBzdG9yYWdlL2luZGV4ZWRkYi90dXRvcmlhbC5o
dG1sOgorCiAyMDEwLTExLTIzICBKZXJlbXkgT3Jsb3cgIDxqb3Jsb3dAY2hyb21pdW0ub3JnPgog
CiAgICAgICAgIFJldmlld2VkIGJ5IFN0ZXZlIEJsb2NrLgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVz
dHMvc3RvcmFnZS9pbmRleGVkZGIvdHV0b3JpYWwuaHRtbCBiL0xheW91dFRlc3RzL3N0b3JhZ2Uv
aW5kZXhlZGRiL3R1dG9yaWFsLmh0bWwKaW5kZXggZGI5ZjJmYS4uMzU3ODg0OCAxMDA2NDQKLS0t
IGEvTGF5b3V0VGVzdHMvc3RvcmFnZS9pbmRleGVkZGIvdHV0b3JpYWwuaHRtbAorKysgYi9MYXlv
dXRUZXN0cy9zdG9yYWdlL2luZGV4ZWRkYi90dXRvcmlhbC5odG1sCkBAIC0xNTAsMTMgKzE1MCwy
NSBAQCBmdW5jdGlvbiBvblNldFZlcnNpb24oKQogICAgIC8vIGEgbnVtYmVyIGF0dHJpYnV0ZSBh
bmQgYXQgbGVhc3Qgb25lIHNpYmxpbmcpLiBZb3UgY2FuIGV2ZW4gZ28gd2lsZCBhbmQgc2F5CiAg
ICAgLy8gImZvb1swXVsyXS5iYXJbMF0uYmF6LnRlc3RbMV1bMl1bM10iLiBJdCdzIHBvc3NpYmxl
IHRoaXMgd2lsbCBjaGFuZ2UgaW4gdGhlIGZ1dHVyZSB0aG91Z2guCiAgICAgLy8KLSAgICAvLyBJ
ZiB5b3Ugc2V0IGF1dG9JbmNyZW1lbnQgKHRoZSB0aGlyZCBvcHRpb25hbCBwYXJhbWV0ZXIpLCBJ
bmRleGVkREIgd2lsbCBnZW5lcmF0ZSBhIGtleQorICAgIC8vIElmIHlvdSBzZXQgYXV0b0luY3Jl
bWVudCAoYW5vdGhlciBvcHRpb25hbCBwYXJhbWV0ZXIpLCBJbmRleGVkREIgd2lsbCBnZW5lcmF0
ZSBhIGtleQogICAgIC8vIGZvciB5b3VyIGVudHJ5IGF1dG9tYXRpY2FsbHkuIEFuZCBpZiB5b3Ug
aGF2ZSBhIGtleVBhdGggc2V0LCBpdCdsbCBzZXQgdGhlIHZhbHVlIGF0CiAgICAgLy8gdGhlIGxv
Y2F0aW9uIG9mIHRoZSBrZXlQYXRoIF9pbiB0aGUgZGF0YWJhc2VfIChpLmUuIGl0IHdpbGwgbm90
IG1vZGlmeSB0aGUgdmFsdWUgeW91IHBhc3MKICAgICAvLyBpbiB0byBwdXQvYWRkKS4gVW5mb3J0
dW5hdGVseSBhdXRvSW5jcmVtZW50IGlzIG5vdCB5ZXQgaW1wbGVtZW50ZWQgaW4gQ2hyb21pdW0v
V2ViS2l0LgogICAgIC8vCisgICAgLy8gQW5vdGhlciBvcHRpb25hbCBwYXJhbWV0ZXIsICJldmlj
dGFibGUiIGlzIG5vdCB5ZXQgaW1wbGVtZW50ZWQuIFdoZW4gaXQgaXMsIGl0J2xsIGhpbnQKKyAg
ICAvLyB3aGljaCBkYXRhIHNob3VsZCBiZSBkZWxldGVkIGZpcnN0IGlmIHRoZSBicm93c2VyIGRl
Y2lkZXMgdGhpcyBvcmlnaW4gaXMgdXNpbmcgdG9vIG11Y2gKKyAgICAvLyBzdG9yYWdlLiAoVGhl
IGFsdGVybmF0aXZlIGlzIHRoYXQgaXQnbGwgc3VnZ2VzdCB0aGUgdXNlciBkZWxldGUgZXZlcnl0
aGluZyBmcm9tIHRoZQorICAgIC8vIG9yaWdpbiwgc28gaXQncyBpbiB5b3VyIGZhdm9yIHRvIHNl
dCBpdCBhcHByb3BlcmF0ZWx5ISkgVGhpcyBpcyBncmVhdCBmb3Igd2hlbiB5b3UgaGF2ZQorICAg
IC8vIHNvbWUgYWJzb2x1dGVseSBjcml0aWNhbCBkYXRhIChsaWtlIHVuc2V0IGVtYWlscykgYW5k
IGEgYnVuY2ggb2YgbGVzcyBjcml0aWNhbCwgKGJ1dAorICAgIC8vIG1heWJlIHN0aWxsIGltcG9y
dGFudCEpIGRhdGEuCisgICAgLy8KKyAgICAvLyBBbGwgb2YgdGhlc2Ugb3B0aW9ucyBjYW4gYmUg
cGFzc2VkIGludG8gY3JlYXRlT2JqZWN0U3RvcmUgdmlhIGl0cyAob3B0aW9uYWwpIHNlY29uZAor
ICAgIC8vIHBhcmFtZXRlci4gU28sIGlmIHlvdSB3YW50ZWQgdG8gZGVmaW5lIGFsbCwgWW91J2Qg
ZG8ge2tleVBhdGg6ICJzb21ldGhpbmciLAorICAgIC8vIGV2aWN0YWJsZTogdHJ1ZSwgYXV0b0lu
Y3JlbWVudDogdHJ1ZX0uIFlvdSBjYW4gYWxzbyBwYXNzIGluIHN1YnNldHMgb2YgYWxsIHRocmVl
IG9yCisgICAgLy8gb21pdCB0aGUgb2JqZWN0IChzaW5jZSBpdCdzIG9wdGlvbmFsKS4KKyAgICAv
LwogICAgIC8vIExldCdzIG5vdyBjcmVhdGUgYW4gb2JqZWN0U3RvcmUgZm9yIHBlb3BsZS4gV2Un
bGwgc3VwcGx5IGEga2V5IHBhdGggaW4gdGhpcyBjYXNlLgotICAgIHZhciBvYmplY3RTdG9yZSA9
IGRiLmNyZWF0ZU9iamVjdFN0b3JlKCJwZW9wbGUiLCAiaWQiKTsKKyAgICB2YXIgb2JqZWN0U3Rv
cmUgPSBkYi5jcmVhdGVPYmplY3RTdG9yZSgicGVvcGxlIiwge2tleVBhdGg6ICJpZCJ9KTsKIAog
ICAgIC8vIE5vdGljZSB0aGF0IGl0IHJldHVybmVkIHN5bmNocm9ub3VzbHkuIFRoZSBydWxlIG9m
IHRodW1iIGlzIHRoYXQgYW55IGNhbGwgdGhhdCB0b3VjaGVzIChpbgogICAgIC8vIGFueSB3YXkp
IGtleXMgb3IgdmFsdWVzIGlzIGFzeW5jaHJvbm91cyBhbmQgYW55IG90aGVyIGNhbGwgKGJlc2lk
ZXMgc2V0VmVyc2lvbiBhbmQgb3BlbikgYXJlCmRpZmYgLS1naXQgYS9XZWJDb3JlL0NoYW5nZUxv
ZyBiL1dlYkNvcmUvQ2hhbmdlTG9nCmluZGV4IGQ3NmYwYzguLjZhNjkxOTMgMTAwNjQ0Ci0tLSBh
L1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNTcg
QEAKKzIwMTAtMTEtMjUgIEplcmVteSBPcmxvdyAgPGpvcmxvd0BjaHJvbWl1bS5vcmc+CisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQWRkIGFuIE9wdGlv
bnNPYmplY3QgY2xhc3MgZm9yIEluZGV4ZWREQiAoYW5kIGxhdGVyIEdlb2xvY2F0aW9uKQorICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTAwMzAKKworICAg
ICAgICBHZW9sb2NhdGlvbiBhbmQgSW5kZXhlZERCIGJvdGggaGF2ZSB0aGUgY29uY2VwdCBvZiBh
biBvcHRpb25hbAorICAgICAgICBwYXJhbWV0ZXIgdGhhdCBoYXMgdmFyaW91cyBvcHRpb25zIHN1
cHBsaWVkIHdpdGggaXQuICBJbgorICAgICAgICBHZW9sb2NhdGlvbiB0aGlzIHdhcyBkb25lIHdp
dGggY3VzdG9tIGJpbmRpbmdzLCBidXQgSSdtIHRyeWluZyB0bworICAgICAgICBhdm9pZCB0aGF0
IGZvciBJbmRleGVkREIuICAKKworICAgICAgICBUaGlzIGZpcnN0IHBhdGNoIGltcGxlbWVudHMg
aXQgaW4gVjggYW5kIG1ha2VzIGNyZWF0ZU9iamVjdFN0b3JlIHVzZSBpdC4KKyAgICAgICAgVGhl
IG5leHQgcGF0Y2ggd2lsbCBjb3ZlciBHZW9sb2NhdGlvbiBhbmQgSlNDLgorCisgICAgICAgIFRl
c3Q6IHN0b3JhZ2UvaW5kZXhlZGRiL2NyZWF0ZS1vYmplY3Qtc3RvcmUtb3B0aW9ucy5odG1sCisK
KyAgICAgICAgKiBXZWJDb3JlLmd5cGk6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy9Db2Rl
R2VuZXJhdG9yVjgucG06CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0NQUC9XZWJE
T01UZXN0T2JqLmNwcDoKKyAgICAgICAgKFdlYkRPTVRlc3RPYmo6Om9wdGlvbnNPYmplY3QpOgor
ICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9DUFAvV2ViRE9NVGVzdE9iai5oOgorICAg
ICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9HT2JqZWN0L1dlYktpdERPTVRlc3RDYWxsYmFj
ay5jcHA6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0dPYmplY3QvV2ViS2l0RE9N
VGVzdEludGVyZmFjZS5jcHA6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0dPYmpl
Y3QvV2ViS2l0RE9NVGVzdE1lZGlhUXVlcnlMaXN0TGlzdGVuZXIuY3BwOgorICAgICAgICAqIGJp
bmRpbmdzL3NjcmlwdHMvdGVzdC9HT2JqZWN0L1dlYktpdERPTVRlc3RPYmouY3BwOgorICAgICAg
ICAod2Via2l0X2RvbV90ZXN0X29ial9vcHRpb25zX29iamVjdCk6CisgICAgICAgICogYmluZGlu
Z3Mvc2NyaXB0cy90ZXN0L0dPYmplY3QvV2ViS2l0RE9NVGVzdE9iai5oOgorICAgICAgICAqIGJp
bmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RPYmouY3BwOgorICAgICAgICAoV2ViQ29yZTo6
anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25PcHRpb25zT2JqZWN0KToKKyAgICAgICAgKiBiaW5k
aW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0T2JqLmg6CisgICAgICAgICogYmluZGluZ3Mvc2Ny
aXB0cy90ZXN0L09iakMvRE9NVGVzdE9iai5oOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMv
dGVzdC9PYmpDL0RPTVRlc3RPYmoubW06CisgICAgICAgICgtW0RPTVRlc3RPYmogb3B0aW9uc09i
amVjdDpvb286XSk6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Rlc3RPYmouaWRs
OgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRlc3RNZWRpYVF1ZXJ5TGlz
dExpc3RlbmVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNvbmZpZ3VyZVY4VGVzdE1lZGlhUXVl
cnlMaXN0TGlzdGVuZXJUZW1wbGF0ZSk6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0
L1Y4L1Y4VGVzdE9iai5jcHA6CisgICAgICAgIChXZWJDb3JlOjpUZXN0T2JqSW50ZXJuYWw6Om9w
dGlvbnNPYmplY3RDYWxsYmFjayk6CisgICAgICAgICogYmluZGluZ3MvdjgvT3B0aW9uc09iamVj
dC5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6T3B0aW9uc09iamVjdDo6T3B0aW9uc09i
amVjdCk6CisgICAgICAgIChXZWJDb3JlOjpPcHRpb25zT2JqZWN0Ojp+T3B0aW9uc09iamVjdCk6
CisgICAgICAgIChXZWJDb3JlOjpPcHRpb25zT2JqZWN0OjpvcGVyYXRvcj0pOgorICAgICAgICAo
V2ViQ29yZTo6T3B0aW9uc09iamVjdDo6dW5kZWZpbmVkT3JOdWxsKToKKyAgICAgICAgKFdlYkNv
cmU6Ok9wdGlvbnNPYmplY3Q6OmdldEtleUJvb2wpOgorICAgICAgICAoV2ViQ29yZTo6T3B0aW9u
c09iamVjdDo6Z2V0S2V5U3RyaW5nKToKKyAgICAgICAgKFdlYkNvcmU6Ok9wdGlvbnNPYmplY3Q6
OmdldEtleSk6CisgICAgICAgICogYmluZGluZ3MvdjgvT3B0aW9uc09iamVjdC5oOiBDb3BpZWQg
ZnJvbSBXZWJDb3JlL3N0b3JhZ2UvSURCRGF0YWJhc2UuaWRsLgorICAgICAgICAqIHN0b3JhZ2Uv
SURCRGF0YWJhc2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SURCRGF0YWJhc2U6OmNyZWF0ZU9i
amVjdFN0b3JlKToKKyAgICAgICAgKiBzdG9yYWdlL0lEQkRhdGFiYXNlLmg6CisgICAgICAgIChX
ZWJDb3JlOjpJREJEYXRhYmFzZTo6Y3JlYXRlT2JqZWN0U3RvcmUpOgorICAgICAgICAqIHN0b3Jh
Z2UvSURCRGF0YWJhc2UuaWRsOgorCiAyMDEwLTExLTIzICBKZXJlbXkgT3Jsb3cgIDxqb3Jsb3dA
Y2hyb21pdW0ub3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5IFN0ZXZlIEJsb2NrLgpkaWZmIC0t
Z2l0IGEvV2ViQ29yZS9XZWJDb3JlLmd5cGkgYi9XZWJDb3JlL1dlYkNvcmUuZ3lwaQppbmRleCAy
YzgxN2NiLi41ODIzNTJmIDEwMDY0NAotLS0gYS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQorKysgYi9X
ZWJDb3JlL1dlYkNvcmUuZ3lwaQpAQCAtNzQ0LDYgKzc0NCw4IEBACiAgICAgICAgICAgICAnYmlu
ZGluZ3MvdjgvQ2hpbGRUaHJlYWRET01EYXRhLmgnLAogICAgICAgICAgICAgJ2JpbmRpbmdzL3Y4
L0lEQkJpbmRpbmdVdGlsaXRpZXMuY3BwJywKICAgICAgICAgICAgICdiaW5kaW5ncy92OC9JREJC
aW5kaW5nVXRpbGl0aWVzLmgnLAorICAgICAgICAgICAgJ2JpbmRpbmdzL3Y4L09wdGlvbnNPYmpl
Y3QuY3BwJywKKyAgICAgICAgICAgICdiaW5kaW5ncy92OC9PcHRpb25zT2JqZWN0LmgnLAogICAg
ICAgICAgICAgJ2JpbmRpbmdzL3Y4L2N1c3RvbS9WOENhbnZhc1BpeGVsQXJyYXlDdXN0b20uY3Bw
JywKICAgICAgICAgICAgICdiaW5kaW5ncy92OC9jdXN0b20vVjhBcnJheUJ1ZmZlclZpZXdDdXN0
b20uaCcsCiAgICAgICAgICAgICAnYmluZGluZ3MvdjgvY3VzdG9tL1Y4QXJyYXlCdWZmZXJDdXN0
b20uY3BwJywKZGlmZiAtLWdpdCBhL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJh
dG9yVjgucG0gYi9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvclY4LnBtCmlu
ZGV4IDdlYTRjNjMuLjE5NmJhOTIgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0
cy9Db2RlR2VuZXJhdG9yVjgucG0KKysrIGIvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVH
ZW5lcmF0b3JWOC5wbQpAQCAtMjgwNiw2ICsyODA2LDcgQEAgc3ViIEdldE5hdGl2ZVR5cGUKICAg
ICByZXR1cm4gIk5vZGUqIiBpZiAkdHlwZSBlcSAiRXZlbnRUYXJnZXQiIGFuZCAkaXNQYXJhbWV0
ZXI7CiAgICAgcmV0dXJuICJkb3VibGUiIGlmICR0eXBlIGVxICJEYXRlIjsKICAgICByZXR1cm4g
IlNjcmlwdFZhbHVlIiBpZiAkdHlwZSBlcSAiRE9NT2JqZWN0IjsKKyAgICByZXR1cm4gIk9wdGlv
bnNPYmplY3QiIGlmICR0eXBlIGVxICJPcHRpb25zT2JqZWN0IjsKIAogICAgIHJldHVybiAiU3Ry
aW5nIiBpZiAkdHlwZSBlcSAiRE9NVXNlckRhdGEiOyAgIyBGSVhNRTogVGVtcG9yYXJ5IGhhY2s/
CiAKQEAgLTI4ODksNiArMjg5MCwxMSBAQCBzdWIgSlNWYWx1ZVRvTmF0aXZlCiAgICAgICAgIHJl
dHVybiAiY3JlYXRlSURCS2V5RnJvbVZhbHVlKCR2YWx1ZSkiOwogICAgIH0KIAorICAgIGlmICgk
dHlwZSBlcSAiT3B0aW9uc09iamVjdCIpIHsKKyAgICAgICAgJGltcGxJbmNsdWRlc3siT3B0aW9u
c09iamVjdC5oIn0gPSAxOworICAgICAgICByZXR1cm4gJHZhbHVlOworICAgIH0KKwogICAgIGlm
ICgkdHlwZSBlcSAiRE9NT2JqZWN0IikgewogICAgICAgICAkaW1wbEluY2x1ZGVzeyJTY3JpcHRW
YWx1ZS5oIn0gPSAxOwogICAgICAgICByZXR1cm4gIlNjcmlwdFZhbHVlKCR2YWx1ZSkiOwpAQCAt
MzAzNCw2ICszMDQwLDcgQEAgbXkgJW5vbl93cmFwcGVyX3R5cGVzID0gKAogICAgICdOb2RlRmls
dGVyJyA9PiAxLAogICAgICdFdmVudExpc3RlbmVyJyA9PiAxLAogICAgICdJREJLZXknID0+IDEs
CisgICAgJ09wdGlvbnNPYmplY3QnID0+IDEsCiAgICAgJ0RhdGUnID0+IDEsCiAgICAgJ01lZGlh
UXVlcnlMaXN0TGlzdGVuZXInID0+IDEKICk7CmRpZmYgLS1naXQgYS9XZWJDb3JlL2JpbmRpbmdz
L3NjcmlwdHMvdGVzdC9DUFAvV2ViRE9NVGVzdE9iai5jcHAgYi9XZWJDb3JlL2JpbmRpbmdzL3Nj
cmlwdHMvdGVzdC9DUFAvV2ViRE9NVGVzdE9iai5jcHAKaW5kZXggOWE4ZDkwOS4uODE5YzdjZiAx
MDA2NDQKLS0tIGEvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvQ1BQL1dlYkRPTVRlc3RP
YmouY3BwCisrKyBiL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0NQUC9XZWJET01UZXN0
T2JqLmNwcApAQCAtMjQsOSArMjQsMTEgQEAKICNpbmNsdWRlICJIVE1MTmFtZXMuaCIKICNpbmNs
dWRlICJJREJLZXkuaCIKICNpbmNsdWRlICJLVVJMLmgiCisjaW5jbHVkZSAiT3B0aW9uc09iamVj
dC5oIgogI2luY2x1ZGUgIlNlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5oIgogI2luY2x1ZGUgIlRlc3RP
YmouaCIKICNpbmNsdWRlICJXZWJET01JREJLZXkuaCIKKyNpbmNsdWRlICJXZWJET01PcHRpb25z
T2JqZWN0LmgiCiAjaW5jbHVkZSAiV2ViRE9NU3RyaW5nLmgiCiAjaW5jbHVkZSAiV2ViRXhjZXB0
aW9uSGFuZGxlci5oIgogI2luY2x1ZGUgIldlYk5hdGl2ZUV2ZW50TGlzdGVuZXIuaCIKQEAgLTY2
Miw2ICs2NjQsMTQgQEAgdm9pZCBXZWJET01UZXN0T2JqOjppZGJLZXkoY29uc3QgV2ViRE9NSURC
S2V5JiBrZXkpCiAgICAgaW1wbCgpLT5pZGJLZXkodG9XZWJDb3JlKGtleSkpOwogfQogCit2b2lk
IFdlYkRPTVRlc3RPYmo6Om9wdGlvbnNPYmplY3QoY29uc3QgV2ViRE9NT3B0aW9uc09iamVjdCYg
b28sIGNvbnN0IFdlYkRPTU9wdGlvbnNPYmplY3QmIG9vbykKK3sKKyAgICBpZiAoIWltcGwoKSkK
KyAgICAgICAgcmV0dXJuOworCisgICAgaW1wbCgpLT5vcHRpb25zT2JqZWN0KHRvV2ViQ29yZShv
byksIHRvV2ViQ29yZShvb28pKTsKK30KKwogdm9pZCBXZWJET01UZXN0T2JqOjptZXRob2RXaXRo
RXhjZXB0aW9uKCkKIHsKICAgICBpZiAoIWltcGwoKSkKZGlmZiAtLWdpdCBhL1dlYkNvcmUvYmlu
ZGluZ3Mvc2NyaXB0cy90ZXN0L0NQUC9XZWJET01UZXN0T2JqLmggYi9XZWJDb3JlL2JpbmRpbmdz
L3NjcmlwdHMvdGVzdC9DUFAvV2ViRE9NVGVzdE9iai5oCmluZGV4IGYyOWI3ZGMuLjBiMzU5M2Qg
MTAwNjQ0Ci0tLSBhL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0NQUC9XZWJET01UZXN0
T2JqLmgKKysrIGIvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvQ1BQL1dlYkRPTVRlc3RP
YmouaApAQCAtMzIsNiArMzIsNyBAQCBjbGFzcyBUZXN0T2JqOwogCiBjbGFzcyBXZWJET01FdmVu
dExpc3RlbmVyOwogY2xhc3MgV2ViRE9NSURCS2V5OworY2xhc3MgV2ViRE9NT3B0aW9uc09iamVj
dDsKIGNsYXNzIFdlYkRPTVN0cmluZzsKIGNsYXNzIFdlYkRPTVRlc3RPYmo7CiAKQEAgLTEzNiw2
ICsxMzcsNyBAQCBwdWJsaWM6CiAgICAgV2ViRE9NVGVzdE9iaiBtZXRob2RUaGF0UmVxdWlyZXNB
bGxBcmdzQW5kVGhyb3dzKGNvbnN0IFdlYkRPTVN0cmluZyYgc3RyQXJnLCBjb25zdCBXZWJET01U
ZXN0T2JqJiBvYmpBcmcpOwogICAgIHZvaWQgc2VyaWFsaXplZFZhbHVlKGNvbnN0IFdlYkRPTVN0
cmluZyYgc2VyaWFsaXplZEFyZyk7CiAgICAgdm9pZCBpZGJLZXkoY29uc3QgV2ViRE9NSURCS2V5
JiBrZXkpOworICAgIHZvaWQgb3B0aW9uc09iamVjdChjb25zdCBXZWJET01PcHRpb25zT2JqZWN0
JiBvbywgY29uc3QgV2ViRE9NT3B0aW9uc09iamVjdCYgb29vKTsKICAgICB2b2lkIG1ldGhvZFdp
dGhFeGNlcHRpb24oKTsKICAgICB2b2lkIGN1c3RvbU1ldGhvZCgpOwogICAgIHZvaWQgY3VzdG9t
TWV0aG9kV2l0aEFyZ3MoaW50IGludEFyZywgY29uc3QgV2ViRE9NU3RyaW5nJiBzdHJBcmcsIGNv
bnN0IFdlYkRPTVRlc3RPYmomIG9iakFyZyk7CmRpZmYgLS1naXQgYS9XZWJDb3JlL2JpbmRpbmdz
L3NjcmlwdHMvdGVzdC9HT2JqZWN0L1dlYktpdERPTVRlc3RDYWxsYmFjay5jcHAgYi9XZWJDb3Jl
L2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9HT2JqZWN0L1dlYktpdERPTVRlc3RDYWxsYmFjay5jcHAK
aW5kZXggMTlmZjE2Ni4uNTU0Y2MxNSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9iaW5kaW5ncy9zY3Jp
cHRzL3Rlc3QvR09iamVjdC9XZWJLaXRET01UZXN0Q2FsbGJhY2suY3BwCisrKyBiL1dlYkNvcmUv
YmluZGluZ3Mvc2NyaXB0cy90ZXN0L0dPYmplY3QvV2ViS2l0RE9NVGVzdENhbGxiYWNrLmNwcApA
QCAtMjUsNiArMjUsNyBAQAogCiAjaW5jbHVkZSA8d3RmL0dldFB0ci5oPgogI2luY2x1ZGUgPHd0
Zi9SZWZQdHIuaD4KKyNpbmNsdWRlICJET01PYmplY3RDYWNoZS5oIgogI2luY2x1ZGUgIkV4Y2Vw
dGlvbkNvZGUuaCIKICNpbmNsdWRlICJKU01haW5UaHJlYWRFeGVjU3RhdGUuaCIKICNpbmNsdWRl
ICJUZXN0Q2FsbGJhY2suaCIKZGlmZiAtLWdpdCBhL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90
ZXN0L0dPYmplY3QvV2ViS2l0RE9NVGVzdEludGVyZmFjZS5jcHAgYi9XZWJDb3JlL2JpbmRpbmdz
L3NjcmlwdHMvdGVzdC9HT2JqZWN0L1dlYktpdERPTVRlc3RJbnRlcmZhY2UuY3BwCmluZGV4IGEx
M2RhNDUuLjZjOTA2ZTQgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0
L0dPYmplY3QvV2ViS2l0RE9NVGVzdEludGVyZmFjZS5jcHAKKysrIGIvV2ViQ29yZS9iaW5kaW5n
cy9zY3JpcHRzL3Rlc3QvR09iamVjdC9XZWJLaXRET01UZXN0SW50ZXJmYWNlLmNwcApAQCAtMjUs
NiArMjUsNyBAQAogCiAjaW5jbHVkZSA8d3RmL0dldFB0ci5oPgogI2luY2x1ZGUgPHd0Zi9SZWZQ
dHIuaD4KKyNpbmNsdWRlICJET01PYmplY3RDYWNoZS5oIgogI2luY2x1ZGUgIkV4Y2VwdGlvbkNv
ZGUuaCIKICNpbmNsdWRlICJKU01haW5UaHJlYWRFeGVjU3RhdGUuaCIKICNpbmNsdWRlICJUZXN0
SW50ZXJmYWNlLmgiCmRpZmYgLS1naXQgYS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9H
T2JqZWN0L1dlYktpdERPTVRlc3RNZWRpYVF1ZXJ5TGlzdExpc3RlbmVyLmNwcCBiL1dlYkNvcmUv
YmluZGluZ3Mvc2NyaXB0cy90ZXN0L0dPYmplY3QvV2ViS2l0RE9NVGVzdE1lZGlhUXVlcnlMaXN0
TGlzdGVuZXIuY3BwCmluZGV4IGY1ZGVkNzkuLmE3ZDM2NGMgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUv
YmluZGluZ3Mvc2NyaXB0cy90ZXN0L0dPYmplY3QvV2ViS2l0RE9NVGVzdE1lZGlhUXVlcnlMaXN0
TGlzdGVuZXIuY3BwCisrKyBiL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0dPYmplY3Qv
V2ViS2l0RE9NVGVzdE1lZGlhUXVlcnlMaXN0TGlzdGVuZXIuY3BwCkBAIC0yMyw2ICsyMyw3IEBA
CiAKICNpbmNsdWRlIDx3dGYvR2V0UHRyLmg+CiAjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgorI2lu
Y2x1ZGUgIkRPTU9iamVjdENhY2hlLmgiCiAjaW5jbHVkZSAiRXhjZXB0aW9uQ29kZS5oIgogI2lu
Y2x1ZGUgIkpTTWFpblRocmVhZEV4ZWNTdGF0ZS5oIgogI2luY2x1ZGUgIlRlc3RNZWRpYVF1ZXJ5
TGlzdExpc3RlbmVyLmgiCmRpZmYgLS1naXQgYS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVz
dC9HT2JqZWN0L1dlYktpdERPTVRlc3RPYmouY3BwIGIvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRz
L3Rlc3QvR09iamVjdC9XZWJLaXRET01UZXN0T2JqLmNwcAppbmRleCAxYmY5OTgzLi5lYzJjNmRj
IDEwMDY0NAotLS0gYS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9HT2JqZWN0L1dlYktp
dERPTVRlc3RPYmouY3BwCisrKyBiL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0dPYmpl
Y3QvV2ViS2l0RE9NVGVzdE9iai5jcHAKQEAgLTIzLDYgKzIzLDcgQEAKIAogI2luY2x1ZGUgPHd0
Zi9HZXRQdHIuaD4KICNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CisjaW5jbHVkZSAiRE9NT2JqZWN0
Q2FjaGUuaCIKICNpbmNsdWRlICJFeGNlcHRpb25Db2RlLmgiCiAjaW5jbHVkZSAiSFRNTE5hbWVz
LmgiCiAjaW5jbHVkZSAiSlNNYWluVGhyZWFkRXhlY1N0YXRlLmgiCkBAIC0zMSw2ICszMiw4IEBA
CiAjaW5jbHVkZSAiZ29iamVjdC9Db252ZXJ0VG9VVEY4U3RyaW5nLmgiCiAjaW5jbHVkZSAid2Vi
a2l0L1dlYktpdERPTUlEQktleS5oIgogI2luY2x1ZGUgIndlYmtpdC9XZWJLaXRET01JREJLZXlQ
cml2YXRlLmgiCisjaW5jbHVkZSAid2Via2l0L1dlYktpdERPTU9wdGlvbnNPYmplY3QuaCIKKyNp
bmNsdWRlICJ3ZWJraXQvV2ViS2l0RE9NT3B0aW9uc09iamVjdFByaXZhdGUuaCIKICNpbmNsdWRl
ICJ3ZWJraXQvV2ViS2l0RE9NU2VyaWFsaXplZFNjcmlwdFZhbHVlLmgiCiAjaW5jbHVkZSAid2Vi
a2l0L1dlYktpdERPTVNlcmlhbGl6ZWRTY3JpcHRWYWx1ZVByaXZhdGUuaCIKICNpbmNsdWRlICJ3
ZWJraXQvV2ViS2l0RE9NVGVzdE9iai5oIgpAQCAtMjExLDYgKzIxNCwyNyBAQCB3ZWJraXRfZG9t
X3Rlc3Rfb2JqX2lkYl9rZXkoV2ViS2l0RE9NVGVzdE9iaiogc2VsZiwgV2ViS2l0RE9NSURCS2V5
KiBrZXkpCiB9CiAKIHZvaWQKK3dlYmtpdF9kb21fdGVzdF9vYmpfb3B0aW9uc19vYmplY3QoV2Vi
S2l0RE9NVGVzdE9iaiogc2VsZiwgV2ViS2l0RE9NT3B0aW9uc09iamVjdCogb28sIFdlYktpdERP
TU9wdGlvbnNPYmplY3QqIG9vbykKK3sKKyAgICBnX3JldHVybl9pZl9mYWlsKHNlbGYpOworICAg
IFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBXZWJDb3JlOjpUZXN0
T2JqICogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBnX3JldHVybl9pZl9mYWlsKG9v
KTsKKyAgICBnX3JldHVybl9pZl9mYWlsKG9vbyk7CisgICAgV2ViQ29yZTo6T3B0aW9uc09iamVj
dCAqIGNvbnZlcnRlZF9vbyA9IE5VTEw7CisgICAgaWYgKG9vICE9IE5VTEwpIHsKKyAgICAgICAg
Y29udmVydGVkX29vID0gV2ViS2l0Ojpjb3JlKG9vKTsKKyAgICAgICAgZ19yZXR1cm5faWZfZmFp
bChjb252ZXJ0ZWRfb28pOworICAgIH0KKyAgICBXZWJDb3JlOjpPcHRpb25zT2JqZWN0ICogY29u
dmVydGVkX29vbyA9IE5VTEw7CisgICAgaWYgKG9vbyAhPSBOVUxMKSB7CisgICAgICAgIGNvbnZl
cnRlZF9vb28gPSBXZWJLaXQ6OmNvcmUob29vKTsKKyAgICAgICAgZ19yZXR1cm5faWZfZmFpbChj
b252ZXJ0ZWRfb29vKTsKKyAgICB9CisgICAgaXRlbS0+b3B0aW9uc09iamVjdChjb252ZXJ0ZWRf
b28sIGNvbnZlcnRlZF9vb28pOworfQorCit2b2lkCiB3ZWJraXRfZG9tX3Rlc3Rfb2JqX21ldGhv
ZF93aXRoX2V4Y2VwdGlvbihXZWJLaXRET01UZXN0T2JqKiBzZWxmLCBHRXJyb3IgKiplcnJvcikK
IHsKICAgICBnX3JldHVybl9pZl9mYWlsKHNlbGYpOwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9iaW5k
aW5ncy9zY3JpcHRzL3Rlc3QvR09iamVjdC9XZWJLaXRET01UZXN0T2JqLmggYi9XZWJDb3JlL2Jp
bmRpbmdzL3NjcmlwdHMvdGVzdC9HT2JqZWN0L1dlYktpdERPTVRlc3RPYmouaAppbmRleCAyZWVi
ZGIxLi40MmQxZmNkIDEwMDY0NAotLS0gYS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9H
T2JqZWN0L1dlYktpdERPTVRlc3RPYmouaAorKysgYi9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMv
dGVzdC9HT2JqZWN0L1dlYktpdERPTVRlc3RPYmouaApAQCAtNzcsNiArNzcsOSBAQCBXRUJLSVRf
QVBJIHZvaWQKIHdlYmtpdF9kb21fdGVzdF9vYmpfaWRiX2tleShXZWJLaXRET01UZXN0T2JqKiBz
ZWxmLCBXZWJLaXRET01JREJLZXkqIGtleSk7CiAKIFdFQktJVF9BUEkgdm9pZAord2Via2l0X2Rv
bV90ZXN0X29ial9vcHRpb25zX29iamVjdChXZWJLaXRET01UZXN0T2JqKiBzZWxmLCBXZWJLaXRE
T01PcHRpb25zT2JqZWN0KiBvbywgV2ViS2l0RE9NT3B0aW9uc09iamVjdCogb29vKTsKKworV0VC
S0lUX0FQSSB2b2lkCiB3ZWJraXRfZG9tX3Rlc3Rfb2JqX21ldGhvZF93aXRoX2V4Y2VwdGlvbihX
ZWJLaXRET01UZXN0T2JqKiBzZWxmLCBHRXJyb3IgKiplcnJvcik7CiAKIApkaWZmIC0tZ2l0IGEv
V2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0T2JqLmNwcCBiL1dlYkNvcmUv
YmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE9iai5jcHAKaW5kZXggOTgyMGZhYi4uZDhi
ZjY3ZSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0
T2JqLmNwcAorKysgYi9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RPYmou
Y3BwCkBAIC0yNyw2ICsyNyw3IEBACiAjaW5jbHVkZSAiSURCS2V5LmgiCiAjaW5jbHVkZSAiSlNE
T01CaW5kaW5nLmgiCiAjaW5jbHVkZSAiSlNFdmVudExpc3RlbmVyLmgiCisjaW5jbHVkZSAiSlNP
cHRpb25zT2JqZWN0LmgiCiAjaW5jbHVkZSAiSlNUZXN0Q2FsbGJhY2suaCIKICNpbmNsdWRlICJK
U1Rlc3RPYmouaCIKICNpbmNsdWRlICJKU2xvZy5oIgpAQCAtMTgxLDcgKzE4Miw3IEBAIGJvb2wg
SlNUZXN0T2JqQ29uc3RydWN0b3I6OmdldE93blByb3BlcnR5RGVzY3JpcHRvcihFeGVjU3RhdGUq
IGV4ZWMsIGNvbnN0IElkZW50CiAjZGVmaW5lIFRIVU5LX0dFTkVSQVRPUihnZW5lcmF0b3IpCiAj
ZW5kaWYKIAotc3RhdGljIGNvbnN0IEhhc2hUYWJsZVZhbHVlIEpTVGVzdE9ialByb3RvdHlwZVRh
YmxlVmFsdWVzWzQ3XSA9CitzdGF0aWMgY29uc3QgSGFzaFRhYmxlVmFsdWUgSlNUZXN0T2JqUHJv
dG90eXBlVGFibGVWYWx1ZXNbNDhdID0KIHsKICAgICB7ICJDT05TVF9WQUxVRV8wIiwgRG9udERl
bGV0ZSB8IFJlYWRPbmx5LCAoaW50cHRyX3Qpc3RhdGljX2Nhc3Q8UHJvcGVydHlTbG90OjpHZXRW
YWx1ZUZ1bmM+KGpzVGVzdE9iakNPTlNUX1ZBTFVFXzApLCAoaW50cHRyX3QpMCBUSFVOS19HRU5F
UkFUT1IoMCkgfSwKICAgICB7ICJDT05TVF9WQUxVRV8xIiwgRG9udERlbGV0ZSB8IFJlYWRPbmx5
LCAoaW50cHRyX3Qpc3RhdGljX2Nhc3Q8UHJvcGVydHlTbG90OjpHZXRWYWx1ZUZ1bmM+KGpzVGVz
dE9iakNPTlNUX1ZBTFVFXzEpLCAoaW50cHRyX3QpMCBUSFVOS19HRU5FUkFUT1IoMCkgfSwKQEAg
LTIwNCw2ICsyMDUsNyBAQCBzdGF0aWMgY29uc3QgSGFzaFRhYmxlVmFsdWUgSlNUZXN0T2JqUHJv
dG90eXBlVGFibGVWYWx1ZXNbNDddID0KICAgICB7ICJtZXRob2RUaGF0UmVxdWlyZXNBbGxBcmdz
QW5kVGhyb3dzIiwgRG9udERlbGV0ZSB8IEZ1bmN0aW9uLCAoaW50cHRyX3Qpc3RhdGljX2Nhc3Q8
TmF0aXZlRnVuY3Rpb24+KGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kVGhhdFJlcXVp
cmVzQWxsQXJnc0FuZFRocm93cyksIChpbnRwdHJfdCkyIFRIVU5LX0dFTkVSQVRPUigwKSB9LAog
ICAgIHsgInNlcmlhbGl6ZWRWYWx1ZSIsIERvbnREZWxldGUgfCBGdW5jdGlvbiwgKGludHB0cl90
KXN0YXRpY19jYXN0PE5hdGl2ZUZ1bmN0aW9uPihqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvblNl
cmlhbGl6ZWRWYWx1ZSksIChpbnRwdHJfdCkxIFRIVU5LX0dFTkVSQVRPUigwKSB9LAogICAgIHsg
ImlkYktleSIsIERvbnREZWxldGUgfCBGdW5jdGlvbiwgKGludHB0cl90KXN0YXRpY19jYXN0PE5h
dGl2ZUZ1bmN0aW9uPihqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbklkYktleSksIChpbnRwdHJf
dCkxIFRIVU5LX0dFTkVSQVRPUigwKSB9LAorICAgIHsgIm9wdGlvbnNPYmplY3QiLCBEb250RGVs
ZXRlIHwgRnVuY3Rpb24sIChpbnRwdHJfdClzdGF0aWNfY2FzdDxOYXRpdmVGdW5jdGlvbj4oanNU
ZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25PcHRpb25zT2JqZWN0KSwgKGludHB0cl90KTIgVEhVTktf
R0VORVJBVE9SKDApIH0sCiAgICAgeyAibWV0aG9kV2l0aEV4Y2VwdGlvbiIsIERvbnREZWxldGUg
fCBGdW5jdGlvbiwgKGludHB0cl90KXN0YXRpY19jYXN0PE5hdGl2ZUZ1bmN0aW9uPihqc1Rlc3RP
YmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhFeGNlcHRpb24pLCAoaW50cHRyX3QpMCBUSFVO
S19HRU5FUkFUT1IoMCkgfSwKICAgICB7ICJjdXN0b21NZXRob2QiLCBEb250RGVsZXRlIHwgRnVu
Y3Rpb24sIChpbnRwdHJfdClzdGF0aWNfY2FzdDxOYXRpdmVGdW5jdGlvbj4oanNUZXN0T2JqUHJv
dG90eXBlRnVuY3Rpb25DdXN0b21NZXRob2QpLCAoaW50cHRyX3QpMCBUSFVOS19HRU5FUkFUT1Io
MCkgfSwKICAgICB7ICJjdXN0b21NZXRob2RXaXRoQXJncyIsIERvbnREZWxldGUgfCBGdW5jdGlv
biwgKGludHB0cl90KXN0YXRpY19jYXN0PE5hdGl2ZUZ1bmN0aW9uPihqc1Rlc3RPYmpQcm90b3R5
cGVGdW5jdGlvbkN1c3RvbU1ldGhvZFdpdGhBcmdzKSwgKGludHB0cl90KTMgVEhVTktfR0VORVJB
VE9SKDApIH0sCkBAIC0yMzMsNyArMjM1LDcgQEAgc3RhdGljIGNvbnN0IEhhc2hUYWJsZVZhbHVl
IEpTVGVzdE9ialByb3RvdHlwZVRhYmxlVmFsdWVzWzQ3XSA9CiB9OwogCiAjdW5kZWYgVEhVTktf
R0VORVJBVE9SCi1zdGF0aWMgSlNDX0NPTlNUX0hBU0hUQUJMRSBIYXNoVGFibGUgSlNUZXN0T2Jq
UHJvdG90eXBlVGFibGUgPSB7IDEzNSwgMTI3LCBKU1Rlc3RPYmpQcm90b3R5cGVUYWJsZVZhbHVl
cywgMCB9Oworc3RhdGljIEpTQ19DT05TVF9IQVNIVEFCTEUgSGFzaFRhYmxlIEpTVGVzdE9ialBy
b3RvdHlwZVRhYmxlID0geyAxMzYsIDEyNywgSlNUZXN0T2JqUHJvdG90eXBlVGFibGVWYWx1ZXMs
IDAgfTsKIGNvbnN0IENsYXNzSW5mbyBKU1Rlc3RPYmpQcm90b3R5cGU6OnNfaW5mbyA9IHsgIlRl
c3RPYmpQcm90b3R5cGUiLCAwLCAmSlNUZXN0T2JqUHJvdG90eXBlVGFibGUsIDAgfTsKIAogSlNP
YmplY3QqIEpTVGVzdE9ialByb3RvdHlwZTo6c2VsZihFeGVjU3RhdGUqIGV4ZWMsIEpTR2xvYmFs
T2JqZWN0KiBnbG9iYWxPYmplY3QpCkBAIC05OTAsNiArOTkyLDMxIEBAIEVuY29kZWRKU1ZhbHVl
IEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25JZGJLZXkoRXhlY1N0YXRl
KiBleGVjKQogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiB9CiAK
K0VuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25P
cHRpb25zT2JqZWN0KEV4ZWNTdGF0ZSogZXhlYykKK3sKKyAgICBKU1ZhbHVlIHRoaXNWYWx1ZSA9
IGV4ZWMtPmhvc3RUaGlzVmFsdWUoKTsKKyAgICBpZiAoIXRoaXNWYWx1ZS5pbmhlcml0cygmSlNU
ZXN0T2JqOjpzX2luZm8pKQorICAgICAgICByZXR1cm4gdGhyb3dWTVR5cGVFcnJvcihleGVjKTsK
KyAgICBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMgPSBzdGF0aWNfY2FzdDxKU1Rlc3RPYmoqPihhc09i
amVjdCh0aGlzVmFsdWUpKTsKKyAgICBUZXN0T2JqKiBpbXAgPSBzdGF0aWNfY2FzdDxUZXN0T2Jq
Kj4oY2FzdGVkVGhpcy0+aW1wbCgpKTsKKyAgICBPcHRpb25zT2JqZWN0KiBvbyA9IHRvT3B0aW9u
c09iamVjdChleGVjLT5hcmd1bWVudCgwKSk7CisgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigp
KQorICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOworCisgICAg
aW50IGFyZ3NDb3VudCA9IGV4ZWMtPmFyZ3VtZW50Q291bnQoKTsKKyAgICBpZiAoYXJnc0NvdW50
IDw9IDEpIHsKKyAgICAgICAgaW1wLT5vcHRpb25zT2JqZWN0KG9vKTsKKyAgICAgICAgcmV0dXJu
IEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKKyAgICB9CisKKyAgICBPcHRpb25zT2Jq
ZWN0KiBvb28gPSB0b09wdGlvbnNPYmplY3QoZXhlYy0+YXJndW1lbnQoMSkpOworICAgIGlmIChl
eGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1Vu
ZGVmaW5lZCgpKTsKKworICAgIGltcC0+b3B0aW9uc09iamVjdChvbywgb29vKTsKKyAgICByZXR1
cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOworfQorCiBFbmNvZGVkSlNWYWx1ZSBK
U0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aEV4Y2VwdGlv
bihFeGVjU3RhdGUqIGV4ZWMpCiB7CiAgICAgSlNWYWx1ZSB0aGlzVmFsdWUgPSBleGVjLT5ob3N0
VGhpc1ZhbHVlKCk7CmRpZmYgLS1naXQgYS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9K
Uy9KU1Rlc3RPYmouaCBiL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE9i
ai5oCmluZGV4IDYwMTRmN2EuLmMyNzQ0NGEgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvYmluZGluZ3Mv
c2NyaXB0cy90ZXN0L0pTL0pTVGVzdE9iai5oCisrKyBiL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0
cy90ZXN0L0pTL0pTVGVzdE9iai5oCkBAIC05Niw2ICs5Niw3IEBAIEpTQzo6RW5jb2RlZEpTVmFs
dWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFRoYXRSZXF1
aXJlc0FsCiBKU0M6OkVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90
eXBlRnVuY3Rpb25NZXRob2RUaGF0UmVxdWlyZXNBbGxBcmdzQW5kVGhyb3dzKEpTQzo6RXhlY1N0
YXRlKik7CiBKU0M6OkVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90
eXBlRnVuY3Rpb25TZXJpYWxpemVkVmFsdWUoSlNDOjpFeGVjU3RhdGUqKTsKIEpTQzo6RW5jb2Rl
ZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbklkYktleShK
U0M6OkV4ZWNTdGF0ZSopOworSlNDOjpFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVz
dE9ialByb3RvdHlwZUZ1bmN0aW9uT3B0aW9uc09iamVjdChKU0M6OkV4ZWNTdGF0ZSopOwogSlND
OjpFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9u
TWV0aG9kV2l0aEV4Y2VwdGlvbihKU0M6OkV4ZWNTdGF0ZSopOwogSlNDOjpFbmNvZGVkSlNWYWx1
ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uQ3VzdG9tTWV0aG9kKEpT
Qzo6RXhlY1N0YXRlKik7CiBKU0M6OkVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0
T2JqUHJvdG90eXBlRnVuY3Rpb25DdXN0b21NZXRob2RXaXRoQXJncyhKU0M6OkV4ZWNTdGF0ZSop
OwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvT2JqQy9ET01UZXN0
T2JqLmggYi9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9PYmpDL0RPTVRlc3RPYmouaApp
bmRleCBmZDQwMDk1Li43NjZkMzFmIDEwMDY0NAotLS0gYS9XZWJDb3JlL2JpbmRpbmdzL3Njcmlw
dHMvdGVzdC9PYmpDL0RPTVRlc3RPYmouaAorKysgYi9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMv
dGVzdC9PYmpDL0RPTVRlc3RPYmouaApAQCAtMjksNiArMjksNyBAQAogI2lmIFdFQktJVF9WRVJT
SU9OX01BWF9BTExPV0VEID49IFdFQktJVF9WRVJTSU9OX0xBVEVTVAogCiBAY2xhc3MgRE9NSURC
S2V5OworQGNsYXNzIERPTU9wdGlvbnNPYmplY3Q7CiBAY2xhc3MgRE9NVGVzdE9iajsKIEBjbGFz
cyBET01sb2c7CiBAY2xhc3MgTlNTdHJpbmc7CkBAIC0xMjcsNiArMTI4LDcgQEAgZW51bSB7CiAt
IChET01UZXN0T2JqICopbWV0aG9kVGhhdFJlcXVpcmVzQWxsQXJnc0FuZFRocm93czooTlNTdHJp
bmcgKilzdHJBcmcgb2JqQXJnOihET01UZXN0T2JqICopb2JqQXJnOwogLSAodm9pZClzZXJpYWxp
emVkVmFsdWU6KE5TU3RyaW5nICopc2VyaWFsaXplZEFyZzsKIC0gKHZvaWQpaWRiS2V5OihET01J
REJLZXkgKilrZXk7CistICh2b2lkKW9wdGlvbnNPYmplY3Q6KERPTU9wdGlvbnNPYmplY3QgKilv
byBvb286KERPTU9wdGlvbnNPYmplY3QgKilvb287CiAtICh2b2lkKW1ldGhvZFdpdGhFeGNlcHRp
b247CiAtICh2b2lkKWN1c3RvbU1ldGhvZDsKIC0gKHZvaWQpY3VzdG9tTWV0aG9kV2l0aEFyZ3M6
KGludClpbnRBcmcgc3RyQXJnOihOU1N0cmluZyAqKXN0ckFyZyBvYmpBcmc6KERPTVRlc3RPYmog
KilvYmpBcmc7CmRpZmYgLS1naXQgYS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9PYmpD
L0RPTVRlc3RPYmoubW0gYi9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9PYmpDL0RPTVRl
c3RPYmoubW0KaW5kZXggNjEyNTk3Zi4uYWMwNDIzNSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9iaW5k
aW5ncy9zY3JpcHRzL3Rlc3QvT2JqQy9ET01UZXN0T2JqLm1tCisrKyBiL1dlYkNvcmUvYmluZGlu
Z3Mvc2NyaXB0cy90ZXN0L09iakMvRE9NVGVzdE9iai5tbQpAQCAtMzUsNiArMzUsNyBAQAogI2lt
cG9ydCAiRE9NRXZlbnRJbnRlcm5hbC5oIgogI2ltcG9ydCAiRE9NSURCS2V5SW50ZXJuYWwuaCIK
ICNpbXBvcnQgIkRPTU5vZGVJbnRlcm5hbC5oIgorI2ltcG9ydCAiRE9NT3B0aW9uc09iamVjdElu
dGVybmFsLmgiCiAjaW1wb3J0ICJET01TdHlsZVNoZWV0SW50ZXJuYWwuaCIKICNpbXBvcnQgIkRP
TVRlc3RPYmpJbnRlcm5hbC5oIgogI2ltcG9ydCAiRE9NbG9nSW50ZXJuYWwuaCIKQEAgLTQ1LDYg
KzQ2LDcgQEAKICNpbXBvcnQgIkpTTWFpblRocmVhZEV4ZWNTdGF0ZS5oIgogI2ltcG9ydCAiS1VS
TC5oIgogI2ltcG9ydCAiT2JqQ0V2ZW50TGlzdGVuZXIuaCIKKyNpbXBvcnQgIk9wdGlvbnNPYmpl
Y3QuaCIKICNpbXBvcnQgIlNlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5oIgogI2ltcG9ydCAiVGVzdE9i
ai5oIgogI2ltcG9ydCAiVGhyZWFkQ2hlY2suaCIKQEAgLTUzMyw2ICs1MzUsMTIgQEAKICAgICBJ
TVBMLT5pZGJLZXkoY29yZShrZXkpKTsKIH0KIAorLSAodm9pZClvcHRpb25zT2JqZWN0OihET01P
cHRpb25zT2JqZWN0ICopb28gb29vOihET01PcHRpb25zT2JqZWN0ICopb29vCit7CisgICAgV2Vi
Q29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIElNUEwtPm9wdGlvbnNPYmpl
Y3QoY29yZShvbyksIGNvcmUob29vKSk7Cit9CisKIC0gKHZvaWQpbWV0aG9kV2l0aEV4Y2VwdGlv
bgogewogICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKZGlmZiAtLWdp
dCBhL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Rlc3RPYmouaWRsIGIvV2ViQ29yZS9i
aW5kaW5ncy9zY3JpcHRzL3Rlc3QvVGVzdE9iai5pZGwKaW5kZXggNTM3NTM0Yi4uYzBkMGU4OCAx
MDA2NDQKLS0tIGEvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVGVzdE9iai5pZGwKKysr
IGIvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVGVzdE9iai5pZGwKQEAgLTc0LDYgKzc0
LDcgQEAgbW9kdWxlIHRlc3QgewogCiAgICAgICAgIHZvaWQgc2VyaWFsaXplZFZhbHVlKGluIFNl
cmlhbGl6ZWRTY3JpcHRWYWx1ZSBzZXJpYWxpemVkQXJnKTsKICAgICAgICAgdm9pZCBpZGJLZXko
aW4gSURCS2V5IGtleSk7CisgICAgICAgIHZvaWQgb3B0aW9uc09iamVjdChpbiBPcHRpb25zT2Jq
ZWN0IG9vLCBpbiBbT3B0aW9uYWxdIE9wdGlvbnNPYmplY3Qgb29vKTsKIAogICAgICAgICAvLyBF
eGNlcHRpb25zCiAgICAgICAgIHZvaWQgbWV0aG9kV2l0aEV4Y2VwdGlvbigpIHJhaXNlcyhET01F
eGNlcHRpb24pOwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgv
VjhUZXN0TWVkaWFRdWVyeUxpc3RMaXN0ZW5lci5jcHAgYi9XZWJDb3JlL2JpbmRpbmdzL3Njcmlw
dHMvdGVzdC9WOC9WOFRlc3RNZWRpYVF1ZXJ5TGlzdExpc3RlbmVyLmNwcAppbmRleCBmMWM0ZTJi
Li5hYjllNmRiIDEwMDY0NAotLS0gYS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9W
OFRlc3RNZWRpYVF1ZXJ5TGlzdExpc3RlbmVyLmNwcAorKysgYi9XZWJDb3JlL2JpbmRpbmdzL3Nj
cmlwdHMvdGVzdC9WOC9WOFRlc3RNZWRpYVF1ZXJ5TGlzdExpc3RlbmVyLmNwcApAQCAtNTcsNyAr
NTcsNyBAQCBzdGF0aWMgdjg6OlBlcnNpc3RlbnQ8djg6OkZ1bmN0aW9uVGVtcGxhdGU+IENvbmZp
Z3VyZVY4VGVzdE1lZGlhUXVlcnlMaXN0TGlzdGVuZQogewogICAgIHY4OjpMb2NhbDx2ODo6U2ln
bmF0dXJlPiBkZWZhdWx0U2lnbmF0dXJlID0gY29uZmlndXJlVGVtcGxhdGUoZGVzYywgIlRlc3RN
ZWRpYVF1ZXJ5TGlzdExpc3RlbmVyIiwgdjg6OlBlcnNpc3RlbnQ8djg6OkZ1bmN0aW9uVGVtcGxh
dGU+KCksIFY4VGVzdE1lZGlhUXVlcnlMaXN0TGlzdGVuZXI6OmludGVybmFsRmllbGRDb3VudCwK
ICAgICAgICAgMCwgMCwKLSAgICAgICAgVGVzdE1lZGlhUXVlcnlMaXN0TGlzdGVuZXJDYWxsYmFj
a3MsIHNpemVvZihUZXN0TWVkaWFRdWVyeUxpc3RMaXN0ZW5lckNhbGxiYWNrcykgLyBzaXplb2Yo
KlRlc3RNZWRpYVF1ZXJ5TGlzdExpc3RlbmVyQ2FsbGJhY2tzKSk7CisgICAgICAgIFRlc3RNZWRp
YVF1ZXJ5TGlzdExpc3RlbmVyQ2FsbGJhY2tzLCBXVEZfQVJSQVlfTEVOR1RIKFRlc3RNZWRpYVF1
ZXJ5TGlzdExpc3RlbmVyQ2FsbGJhY2tzKSk7CiAgICAgdjg6OkxvY2FsPHY4OjpPYmplY3RUZW1w
bGF0ZT4gaW5zdGFuY2UgPSBkZXNjLT5JbnN0YW5jZVRlbXBsYXRlKCk7CiAgICAgdjg6OkxvY2Fs
PHY4OjpPYmplY3RUZW1wbGF0ZT4gcHJvdG8gPSBkZXNjLT5Qcm90b3R5cGVUZW1wbGF0ZSgpOwog
ICAgIApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0
T2JqLmNwcCBiL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdE9iai5jcHAK
aW5kZXggYzRhNzZhYy4uZTA2ZDNmMiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9iaW5kaW5ncy9zY3Jp
cHRzL3Rlc3QvVjgvVjhUZXN0T2JqLmNwcAorKysgYi9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMv
dGVzdC9WOC9WOFRlc3RPYmouY3BwCkBAIC0yNSw2ICsyNSw3IEBACiAjaW5jbHVkZSAiSFRNTE5h
bWVzLmgiCiAjaW5jbHVkZSAiSURCQmluZGluZ1V0aWxpdGllcy5oIgogI2luY2x1ZGUgIklEQktl
eS5oIgorI2luY2x1ZGUgIk9wdGlvbnNPYmplY3QuaCIKICNpbmNsdWRlICJSdW50aW1lRW5hYmxl
ZEZlYXR1cmVzLmgiCiAjaW5jbHVkZSAiU2NyaXB0QXJndW1lbnRzLmgiCiAjaW5jbHVkZSAiU2Ny
aXB0Q2FsbFN0YWNrLmgiCkBAIC03MjcsNiArNzI4LDIwIEBAIHN0YXRpYyB2ODo6SGFuZGxlPHY4
OjpWYWx1ZT4gaWRiS2V5Q2FsbGJhY2soY29uc3Qgdjg6OkFyZ3VtZW50cyYgYXJncykKICAgICBy
ZXR1cm4gdjg6OkhhbmRsZTx2ODo6VmFsdWU+KCk7CiB9CiAKK3N0YXRpYyB2ODo6SGFuZGxlPHY4
OjpWYWx1ZT4gb3B0aW9uc09iamVjdENhbGxiYWNrKGNvbnN0IHY4OjpBcmd1bWVudHMmIGFyZ3Mp
Cit7CisgICAgSU5DX1NUQVRTKCJET00uVGVzdE9iai5vcHRpb25zT2JqZWN0Iik7CisgICAgVGVz
dE9iaiogaW1wID0gVjhUZXN0T2JqOjp0b05hdGl2ZShhcmdzLkhvbGRlcigpKTsKKyAgICBFWENF
UFRJT05fQkxPQ0soT3B0aW9uc09iamVjdCwgb28sIGFyZ3NbMF0pOworICAgIGlmIChhcmdzLkxl
bmd0aCgpIDw9IDEpIHsKKyAgICAgICAgaW1wLT5vcHRpb25zT2JqZWN0KG9vKTsKKyAgICAgICAg
cmV0dXJuIHY4OjpIYW5kbGU8djg6OlZhbHVlPigpOworICAgIH0KKyAgICBFWENFUFRJT05fQkxP
Q0soT3B0aW9uc09iamVjdCwgb29vLCBhcmdzWzFdKTsKKyAgICBpbXAtPm9wdGlvbnNPYmplY3Qo
b28sIG9vbyk7CisgICAgcmV0dXJuIHY4OjpIYW5kbGU8djg6OlZhbHVlPigpOworfQorCiBzdGF0
aWMgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IG1ldGhvZFdpdGhFeGNlcHRpb25DYWxsYmFjayhjb25z
dCB2ODo6QXJndW1lbnRzJiBhcmdzKQogewogICAgIElOQ19TVEFUUygiRE9NLlRlc3RPYmoubWV0
aG9kV2l0aEV4Y2VwdGlvbiIpOwpAQCAtMTIwMSw2ICsxMjE2LDcgQEAgc3RhdGljIGNvbnN0IEJh
dGNoZWRDYWxsYmFjayBUZXN0T2JqQ2FsbGJhY2tzW10gPSB7CiAgICAgeyJvYmpNZXRob2QiLCBU
ZXN0T2JqSW50ZXJuYWw6Om9iak1ldGhvZENhbGxiYWNrfSwKICAgICB7InNlcmlhbGl6ZWRWYWx1
ZSIsIFRlc3RPYmpJbnRlcm5hbDo6c2VyaWFsaXplZFZhbHVlQ2FsbGJhY2t9LAogICAgIHsiaWRi
S2V5IiwgVGVzdE9iakludGVybmFsOjppZGJLZXlDYWxsYmFja30sCisgICAgeyJvcHRpb25zT2Jq
ZWN0IiwgVGVzdE9iakludGVybmFsOjpvcHRpb25zT2JqZWN0Q2FsbGJhY2t9LAogICAgIHsibWV0
aG9kV2l0aEV4Y2VwdGlvbiIsIFRlc3RPYmpJbnRlcm5hbDo6bWV0aG9kV2l0aEV4Y2VwdGlvbkNh
bGxiYWNrfSwKICAgICB7ImN1c3RvbU1ldGhvZCIsIFY4VGVzdE9iajo6Y3VzdG9tTWV0aG9kQ2Fs
bGJhY2t9LAogICAgIHsiY3VzdG9tTWV0aG9kV2l0aEFyZ3MiLCBWOFRlc3RPYmo6OmN1c3RvbU1l
dGhvZFdpdGhBcmdzQ2FsbGJhY2t9LApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9iaW5kaW5ncy92OC9P
cHRpb25zT2JqZWN0LmNwcCBiL1dlYkNvcmUvYmluZGluZ3MvdjgvT3B0aW9uc09iamVjdC5jcHAK
aW5kZXggNWQ2ZmYzNy4uZGRlNTExYSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9iaW5kaW5ncy92OC9P
cHRpb25zT2JqZWN0LmNwcAorKysgYi9XZWJDb3JlL2JpbmRpbmdzL3Y4L09wdGlvbnNPYmplY3Qu
Y3BwCkBAIC00OCwxMSArNDgsMTEgQEAgT3B0aW9uc09iamVjdCYgT3B0aW9uc09iamVjdDo6b3Bl
cmF0b3I9KGNvbnN0IE9wdGlvbnNPYmplY3QmIG9wdGlvbnNPYmplY3QpCiAgICAgcmV0dXJuICp0
aGlzOwogfQogCi1ib29sIE9wdGlvbnNPYmplY3Q6OnVuZGVmaW5lZE9yTnVsbCgpIGNvbnN0Citi
b29sIE9wdGlvbnNPYmplY3Q6OmlzVW5kZWZpbmVkT3JOdWxsKCkgY29uc3QKIHsKICAgICBpZiAo
bV9vcHRpb25zLklzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgcmV0dXJuIGlz
VW5kZWZpbmVkT3JOdWxsKG1fb3B0aW9ucyk7CisgICAgcmV0dXJuIFdlYkNvcmU6OmlzVW5kZWZp
bmVkT3JOdWxsKG1fb3B0aW9ucyk7CiB9CiAKIGJvb2wgT3B0aW9uc09iamVjdDo6Z2V0S2V5Qm9v
bChjb25zdCBTdHJpbmcmIGtleSwgYm9vbCYgdmFsdWUpIGNvbnN0CkBAIC04MCwxOCArODAsMjMg
QEAgYm9vbCBPcHRpb25zT2JqZWN0OjpnZXRLZXlTdHJpbmcoY29uc3QgU3RyaW5nJiBrZXksIFN0
cmluZyYgdmFsdWUpIGNvbnN0CiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIHZhbHVlID0g
djhWYWx1ZVRvV2ViQ29yZVN0cmluZyh2OFZhbHVlKTsKLSAgICBBU1NFUlQoIXY4VmFsdWUuSXNF
bXB0eSgpKTsKKyAgICBBU1NFUlQoIXZhbHVlLmlzRW1wdHkoKSk7CiAgICAgcmV0dXJuIHRydWU7
CiB9CiAKIGJvb2wgT3B0aW9uc09iamVjdDo6Z2V0S2V5KGNvbnN0IFN0cmluZyYga2V5LCB2ODo6
TG9jYWw8djg6OlZhbHVlPiYgdmFsdWUpIGNvbnN0CiB7Ci0gICAgaWYgKHVuZGVmaW5lZE9yTnVs
bCgpKQorICAgIGlmIChpc1VuZGVmaW5lZE9yTnVsbCgpKQogICAgICAgICByZXR1cm4gZmFsc2U7
CiAgICAgdjg6OkxvY2FsPHY4OjpPYmplY3Q+IG9wdGlvbnMgPSBtX29wdGlvbnMtPlRvT2JqZWN0
KCk7CiAgICAgQVNTRVJUKCFvcHRpb25zLklzRW1wdHkoKSk7Ci0gICAgdmFsdWUgPSBvcHRpb25z
LT5HZXQodjhTdHJpbmcoa2V5KSk7Ci0gICAgcmV0dXJuICF2YWx1ZS5Jc0VtcHR5KCk7CisKKyAg
ICB2ODo6SGFuZGxlPHY4OjpTdHJpbmc+IHY4S2V5ID0gdjhTdHJpbmcoa2V5KTsKKyAgICBpZiAo
IW9wdGlvbnMtPkhhcyh2OEtleSkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB2YWx1ZSA9
IG9wdGlvbnMtPkdldCh2OEtleSk7CisgICAgQVNTRVJUKCF2YWx1ZS5Jc0VtcHR5KCkpOworICAg
IHJldHVybiB0cnVlOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9X
ZWJDb3JlL2JpbmRpbmdzL3Y4L09wdGlvbnNPYmplY3QuaCBiL1dlYkNvcmUvYmluZGluZ3Mvdjgv
T3B0aW9uc09iamVjdC5oCmluZGV4IDFkYTZlYTYuLmQ1NDc4N2EgMTAwNjQ0Ci0tLSBhL1dlYkNv
cmUvYmluZGluZ3MvdjgvT3B0aW9uc09iamVjdC5oCisrKyBiL1dlYkNvcmUvYmluZGluZ3Mvdjgv
T3B0aW9uc09iamVjdC5oCkBAIC00MCw3ICs0MCw3IEBAIHB1YmxpYzoKIAogICAgIE9wdGlvbnNP
YmplY3QmIG9wZXJhdG9yPShjb25zdCBPcHRpb25zT2JqZWN0Jik7CiAKLSAgICBib29sIHVuZGVm
aW5lZE9yTnVsbCgpIGNvbnN0OworICAgIGJvb2wgaXNVbmRlZmluZWRPck51bGwoKSBjb25zdDsK
ICAgICBib29sIGdldEtleUJvb2woY29uc3QgU3RyaW5nJiBrZXksIGJvb2wmIHZhbHVlKSBjb25z
dDsKICAgICBib29sIGdldEtleVN0cmluZyhjb25zdCBTdHJpbmcmIGtleSwgU3RyaW5nJiB2YWx1
ZSkgY29uc3Q7CiAKZGlmZiAtLWdpdCBhL1dlYkNvcmUvc3RvcmFnZS9JREJEYXRhYmFzZS5jcHAg
Yi9XZWJDb3JlL3N0b3JhZ2UvSURCRGF0YWJhc2UuY3BwCmluZGV4IDE1MzZiYTcuLjcyZmYxN2Qg
MTAwNjQ0Ci0tLSBhL1dlYkNvcmUvc3RvcmFnZS9JREJEYXRhYmFzZS5jcHAKKysrIGIvV2ViQ29y
ZS9zdG9yYWdlL0lEQkRhdGFiYXNlLmNwcApAQCAtNTYsMTMgKzU2LDE5IEBAIHZvaWQgSURCRGF0
YWJhc2U6OnNldFNldFZlcnNpb25UcmFuc2FjdGlvbihJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRl
cmZhY2UqIHRyYW5zCiAgICAgbV9zZXRWZXJzaW9uVHJhbnNhY3Rpb24gPSB0cmFuc2FjdGlvbjsK
IH0KIAotUGFzc1JlZlB0cjxJREJPYmplY3RTdG9yZT4gSURCRGF0YWJhc2U6OmNyZWF0ZU9iamVj
dFN0b3JlKGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgU3RyaW5nJiBrZXlQYXRoLCBib29sIGF1
dG9JbmNyZW1lbnQsIEV4Y2VwdGlvbkNvZGUmIGVjKQorUGFzc1JlZlB0cjxJREJPYmplY3RTdG9y
ZT4gSURCRGF0YWJhc2U6OmNyZWF0ZU9iamVjdFN0b3JlKGNvbnN0IFN0cmluZyYgbmFtZSwgY29u
c3QgT3B0aW9uc09iamVjdCYgb3B0aW9ucywgRXhjZXB0aW9uQ29kZSYgZWMpCiB7CiAgICAgaWYg
KCFtX3NldFZlcnNpb25UcmFuc2FjdGlvbikgewogICAgICAgICBlYyA9IElEQkRhdGFiYXNlRXhj
ZXB0aW9uOjpOT1RfQUxMT1dFRF9FUlI7CiAgICAgICAgIHJldHVybiAwOwogICAgIH0KIAorICAg
IFN0cmluZyBrZXlQYXRoOworICAgIG9wdGlvbnMuZ2V0S2V5U3RyaW5nKCJrZXlQYXRoIiwga2V5
UGF0aCk7CisgICAgYm9vbCBhdXRvSW5jcmVtZW50ID0gZmFsc2U7CisgICAgb3B0aW9ucy5nZXRL
ZXlCb29sKCJhdXRvSW5jcmVtZW50IiwgYXV0b0luY3JlbWVudCk7CisgICAgLy8gRklYTUU6IExv
b2sgdXAgZXZpY3RhYmxlIGFuZCBwYXNzIHRoYXQgb24gYXMgd2VsbC4KKwogICAgIFJlZlB0cjxJ
REJPYmplY3RTdG9yZUJhY2tlbmRJbnRlcmZhY2U+IG9iamVjdFN0b3JlID0gbV9iYWNrZW5kLT5j
cmVhdGVPYmplY3RTdG9yZShuYW1lLCBrZXlQYXRoLCBhdXRvSW5jcmVtZW50LCBtX3NldFZlcnNp
b25UcmFuc2FjdGlvbi5nZXQoKSwgZWMpOwogICAgIGlmICghb2JqZWN0U3RvcmUpIHsKICAgICAg
ICAgLy8gRklYTUU6IEFTU0VSVChlYykgb25jZSBVTktOT1dOX0VSUiBpcyBub3QgMC4KZGlmZiAt
LWdpdCBhL1dlYkNvcmUvc3RvcmFnZS9JREJEYXRhYmFzZS5oIGIvV2ViQ29yZS9zdG9yYWdlL0lE
QkRhdGFiYXNlLmgKaW5kZXggZGY1NmY0Ni4uM2UzMzQ3MiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9z
dG9yYWdlL0lEQkRhdGFiYXNlLmgKKysrIGIvV2ViQ29yZS9zdG9yYWdlL0lEQkRhdGFiYXNlLmgK
QEAgLTMxLDYgKzMxLDcgQEAKICNpbmNsdWRlICJJREJEYXRhYmFzZUJhY2tlbmRJbnRlcmZhY2Uu
aCIKICNpbmNsdWRlICJJREJPYmplY3RTdG9yZS5oIgogI2luY2x1ZGUgIklEQlRyYW5zYWN0aW9u
LmgiCisjaW5jbHVkZSAiT3B0aW9uc09iamVjdC5oIgogI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRy
Lmg+CiAjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KICNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+
CkBAIC01OSwxMyArNjAsMTIgQEAgcHVibGljOgogICAgIFBhc3NSZWZQdHI8RE9NU3RyaW5nTGlz
dD4gb2JqZWN0U3RvcmVzKCkgY29uc3QgeyByZXR1cm4gbV9iYWNrZW5kLT5vYmplY3RTdG9yZXMo
KTsgfQogCiAgICAgLy8gRklYTUU6IFRyeSB0byBtb2RpZnkgdGhlIGNvZGUgZ2VuZXJhdG9yIHNv
IHRoaXMgaXMgdW5uZWVkZWQuCi0gICAgUGFzc1JlZlB0cjxJREJPYmplY3RTdG9yZT4gY3JlYXRl
T2JqZWN0U3RvcmUoY29uc3QgU3RyaW5nJiBuYW1lLCBFeGNlcHRpb25Db2RlJiBlYykgeyByZXR1
cm4gY3JlYXRlT2JqZWN0U3RvcmUobmFtZSwgU3RyaW5nKCksIGVjKTsgfQotICAgIFBhc3NSZWZQ
dHI8SURCT2JqZWN0U3RvcmU+IGNyZWF0ZU9iamVjdFN0b3JlKGNvbnN0IFN0cmluZyYgbmFtZSwg
Y29uc3QgU3RyaW5nJiBrZXlQYXRoLCBFeGNlcHRpb25Db2RlJiBlYykgeyByZXR1cm4gY3JlYXRl
T2JqZWN0U3RvcmUobmFtZSwga2V5UGF0aCwgZmFsc2UsIGVjKTsgfQorICAgIFBhc3NSZWZQdHI8
SURCT2JqZWN0U3RvcmU+IGNyZWF0ZU9iamVjdFN0b3JlKGNvbnN0IFN0cmluZyYgbmFtZSwgRXhj
ZXB0aW9uQ29kZSYgZWMpIHsgcmV0dXJuIGNyZWF0ZU9iamVjdFN0b3JlKG5hbWUsIE9wdGlvbnNP
YmplY3QoKSwgZWMpOyB9CiAgICAgUGFzc1JlZlB0cjxJREJUcmFuc2FjdGlvbj4gdHJhbnNhY3Rp
b24oU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwgRXhjZXB0aW9uQ29kZSYgZWMpIHsg
cmV0dXJuIHRyYW5zYWN0aW9uKGNvbnRleHQsIDAsIGVjKTsgfQogICAgIFBhc3NSZWZQdHI8SURC
VHJhbnNhY3Rpb24+IHRyYW5zYWN0aW9uKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQs
IERPTVN0cmluZ0xpc3QqIHN0b3JlTmFtZXMsIEV4Y2VwdGlvbkNvZGUmIGVjKSB7IHJldHVybiB0
cmFuc2FjdGlvbihjb250ZXh0LCBzdG9yZU5hbWVzLCBJREJUcmFuc2FjdGlvbjo6UkVBRF9PTkxZ
LCBlYyk7IH0KICAgICBQYXNzUmVmUHRyPElEQlRyYW5zYWN0aW9uPiB0cmFuc2FjdGlvbihTY3Jp
cHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBET01TdHJpbmdMaXN0KiBzdG9yZU5hbWVzLCB1
bnNpZ25lZCBzaG9ydCBtb2RlLCBFeGNlcHRpb25Db2RlJiBlYykgeyByZXR1cm4gdHJhbnNhY3Rp
b24oY29udGV4dCwgc3RvcmVOYW1lcywgbW9kZSwgMCwgZWMpOyB9IC8vIEZJWE1FOiB3aGF0IHNo
b3VsZCB0aGUgZGVmYXVsdCB0aW1lb3V0IGJlPwogCi0gICAgUGFzc1JlZlB0cjxJREJPYmplY3RT
dG9yZT4gY3JlYXRlT2JqZWN0U3RvcmUoY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBTdHJpbmcm
IGtleVBhdGgsIGJvb2wgYXV0b0luY3JlbWVudCwgRXhjZXB0aW9uQ29kZSYpOworICAgIFBhc3NS
ZWZQdHI8SURCT2JqZWN0U3RvcmU+IGNyZWF0ZU9iamVjdFN0b3JlKGNvbnN0IFN0cmluZyYgbmFt
ZSwgY29uc3QgT3B0aW9uc09iamVjdCYsIEV4Y2VwdGlvbkNvZGUmKTsKICAgICB2b2lkIHJlbW92
ZU9iamVjdFN0b3JlKGNvbnN0IFN0cmluZyYgbmFtZSwgRXhjZXB0aW9uQ29kZSYpOwogICAgIFBh
c3NSZWZQdHI8SURCUmVxdWVzdD4gc2V0VmVyc2lvbihTY3JpcHRFeGVjdXRpb25Db250ZXh0Kiwg
Y29uc3QgU3RyaW5nJiB2ZXJzaW9uLCBFeGNlcHRpb25Db2RlJik7CiAgICAgUGFzc1JlZlB0cjxJ
REJUcmFuc2FjdGlvbj4gdHJhbnNhY3Rpb24oU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIERPTVN0
cmluZ0xpc3QqLCB1bnNpZ25lZCBzaG9ydCBtb2RlLCB1bnNpZ25lZCBsb25nIHRpbWVvdXQsIEV4
Y2VwdGlvbkNvZGUmKTsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvc3RvcmFnZS9JREJEYXRhYmFzZS5p
ZGwgYi9XZWJDb3JlL3N0b3JhZ2UvSURCRGF0YWJhc2UuaWRsCmluZGV4IDFhYjViMGIuLmIwOGQ0
NTkgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvc3RvcmFnZS9JREJEYXRhYmFzZS5pZGwKKysrIGIvV2Vi
Q29yZS9zdG9yYWdlL0lEQkRhdGFiYXNlLmlkbApAQCAtMzIsNyArMzIsNyBAQCBtb2R1bGUgc3Rv
cmFnZSB7CiAgICAgICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBET01TdHJpbmcgdmVyc2lvbjsKICAg
ICAgICAgcmVhZG9ubHkgYXR0cmlidXRlIERPTVN0cmluZ0xpc3Qgb2JqZWN0U3RvcmVzOwogCi0g
ICAgICAgIElEQk9iamVjdFN0b3JlIGNyZWF0ZU9iamVjdFN0b3JlKGluIERPTVN0cmluZyBuYW1l
LCBpbiBbT3B0aW9uYWwsIENvbnZlcnROdWxsVG9OdWxsU3RyaW5nXSBET01TdHJpbmcga2V5UGF0
aCwgaW4gW09wdGlvbmFsXSBib29sZWFuIGF1dG9JbmNyZW1lbnQpCisgICAgICAgIElEQk9iamVj
dFN0b3JlIGNyZWF0ZU9iamVjdFN0b3JlKGluIERPTVN0cmluZyBuYW1lLCBpbiBbT3B0aW9uYWxd
IE9wdGlvbnNPYmplY3Qgb3B0aW9ucykKICAgICAgICAgICAgIHJhaXNlcyAoSURCRGF0YWJhc2VF
eGNlcHRpb24pOwogICAgICAgICB2b2lkIHJlbW92ZU9iamVjdFN0b3JlKGluIERPTVN0cmluZyBu
YW1lKQogICAgICAgICAgICAgcmFpc2VzIChJREJEYXRhYmFzZUV4Y2VwdGlvbik7CmRpZmYgLS1n
aXQgYS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nIGIvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxv
ZwppbmRleCA5MTJhYjdmLi5hNzQ0OWM1IDEwMDY0NAotLS0gYS9XZWJLaXQvY2hyb21pdW0vQ2hh
bmdlTG9nCisrKyBiL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyMiBAQAor
MjAxMC0xMS0yNSAgSmVyZW15IE9ybG93ICA8am9ybG93QGNocm9taXVtLm9yZz4KKworICAgICAg
ICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBZGQgZXhjZXB0aW9uIGNv
ZGUgdG8gV2ViSURCVHJhbnNhY3Rpb246Om9iamVjdFN0b3JlCisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD01MDAzMAorCisgICAgICAgICogcHVibGljL1dl
YklEQlRyYW5zYWN0aW9uLmg6CisgICAgICAgIChXZWJLaXQ6OldlYklEQlRyYW5zYWN0aW9uOjpv
YmplY3RTdG9yZSk6CisKKzIwMTAtMTEtMjUgIEplcmVteSBPcmxvdyAgPGpvcmxvd0BjaHJvbWl1
bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAg
TmVlZCBhIHNob3J0IGRlc2NyaXB0aW9uIGFuZCBidWcgVVJMIChPT1BTISkKKworICAgICAgICAq
IHB1YmxpYy9XZWJJREJUcmFuc2FjdGlvbi5oOgorICAgICAgICAoV2ViS2l0OjpXZWJJREJUcmFu
c2FjdGlvbjo6b2JqZWN0U3RvcmUpOgorCiAyMDEwLTExLTI0ICBTYXRpc2ggU2FtcGF0aCAgPHNh
dGlzaEBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgU3RldmUgQmxvY2suCmRp
ZmYgLS1naXQgYS9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYklEQlRyYW5zYWN0aW9uLmggYi9X
ZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYklEQlRyYW5zYWN0aW9uLmgKaW5kZXggZTc1ZGUzYy4u
NTg0YjY3YSAxMDA2NDQKLS0tIGEvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJJREJUcmFuc2Fj
dGlvbi5oCisrKyBiL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViSURCVHJhbnNhY3Rpb24uaApA
QCAtMjYsNiArMjYsNyBAQAogI2lmbmRlZiBXZWJJREJUcmFuc2FjdGlvbl9oCiAjZGVmaW5lIFdl
YklEQlRyYW5zYWN0aW9uX2gKIAorI2luY2x1ZGUgIldlYkV4Y2VwdGlvbkNvZGUuaCIKICNpbmNs
dWRlICJXZWJTdHJpbmcuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgeyBjbGFzcyBJREJUcmFuc2Fj
dGlvbkJhY2tlbmRJbnRlcmZhY2U7IH0KQEAgLTQ1LDEwICs0NiwxNSBAQCBwdWJsaWM6CiAgICAg
ICAgIFdFQktJVF9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICAgcmV0dXJuIDA7CiAgICAg
fQorICAgIHZpcnR1YWwgV2ViSURCT2JqZWN0U3RvcmUqIG9iamVjdFN0b3JlKGNvbnN0IFdlYlN0
cmluZyYgbmFtZSwgV2ViRXhjZXB0aW9uQ29kZSYpCisgICAgeworICAgICAgICByZXR1cm4gb2Jq
ZWN0U3RvcmUobmFtZSk7CisgICAgfQorICAgIC8vIEZJWE1FOiBSZW1vdmUgdGhpcyBhZnRlciBX
ZWJLaXQgcm9sbC4KICAgICB2aXJ0dWFsIFdlYklEQk9iamVjdFN0b3JlKiBvYmplY3RTdG9yZShj
b25zdCBXZWJTdHJpbmcmIG5hbWUpCiAgICAgewotICAgICAgICBXRUJLSVRfQVNTRVJUX05PVF9S
RUFDSEVEKCk7Ci0gICAgICAgIHJldHVybiAwOworICAgICAgICBXZWJFeGNlcHRpb25Db2RlIGVj
OworICAgICAgICByZXR1cm4gb2JqZWN0U3RvcmUobmFtZSwgZWMpOwogICAgIH0KICAgICB2aXJ0
dWFsIHZvaWQgYWJvcnQoKSB7IFdFQktJVF9BU1NFUlRfTk9UX1JFQUNIRUQoKTsgfQogICAgIHZp
cnR1YWwgdm9pZCBkaWRDb21wbGV0ZVRhc2tFdmVudHMoKSB7IFdFQktJVF9BU1NFUlRfTk9UX1JF
QUNIRUQoKTsgfQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>74852</attachid>
            <date>2010-11-25 04:03:54 -0800</date>
            <delta_ts>2010-11-25 04:05:55 -0800</delta_ts>
            <desc>andrei&apos;s comment</desc>
            <filename>a</filename>
            <type>text/plain</type>
            <size>38773</size>
            <attacher name="Jeremy Orlow">jorlow</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxv
ZwppbmRleCA2YjVmNzU5Li4xNzI0MDI4IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VM
b2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTQgQEAKKzIwMTAtMTEt
MjUgIEplcmVteSBPcmxvdyAgPGpvcmxvd0BjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQWRkIGFuIE9wdGlvbnNPYmplY3QgY2xh
c3MgZm9yIEluZGV4ZWREQiAoYW5kIGxhdGVyIEdlb2xvY2F0aW9uKQorICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTAwMzAKKworICAgICAgICAqIHN0b3Jh
Z2UvaW5kZXhlZGRiL2NyZWF0ZS1vYmplY3Qtc3RvcmUtb3B0aW9ucy1leHBlY3RlZC50eHQ6IEFk
ZGVkLgorICAgICAgICAqIHN0b3JhZ2UvaW5kZXhlZGRiL2NyZWF0ZS1vYmplY3Qtc3RvcmUtb3B0
aW9ucy5odG1sOiBBZGRlZC4KKyAgICAgICAgKiBzdG9yYWdlL2luZGV4ZWRkYi90dXRvcmlhbC5o
dG1sOgorCiAyMDEwLTExLTIzICBKZXJlbXkgT3Jsb3cgIDxqb3Jsb3dAY2hyb21pdW0ub3JnPgog
CiAgICAgICAgIFJldmlld2VkIGJ5IFN0ZXZlIEJsb2NrLgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVz
dHMvc3RvcmFnZS9pbmRleGVkZGIvY3JlYXRlLW9iamVjdC1zdG9yZS1vcHRpb25zLWV4cGVjdGVk
LnR4dCBiL0xheW91dFRlc3RzL3N0b3JhZ2UvaW5kZXhlZGRiL2NyZWF0ZS1vYmplY3Qtc3RvcmUt
b3B0aW9ucy1leHBlY3RlZC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4u
YWVjMzgxZgotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL3N0b3JhZ2UvaW5kZXhlZGRi
L2NyZWF0ZS1vYmplY3Qtc3RvcmUtb3B0aW9ucy1leHBlY3RlZC50eHQKQEAgLTAsMCArMSwyOSBA
QAorVGVzdCBJbmRleGVkREIncyBjcmVhdGVPYmplY3RTdG9yZSdzIHZhcmlvdXMgb3B0aW9ucwor
CitPbiBzdWNjZXNzLCB5b3Ugd2lsbCBzZWUgYSBzZXJpZXMgb2YgIlBBU1MiIG1lc3NhZ2VzLCBm
b2xsb3dlZCBieSAiVEVTVCBDT01QTEVURSIuCisKKworUEFTUyAnd2Via2l0SW5kZXhlZERCJyBp
biB3aW5kb3cgaXMgdHJ1ZQorUEFTUyB3ZWJraXRJbmRleGVkREIgPT0gbnVsbCBpcyBmYWxzZQor
d2Via2l0SW5kZXhlZERCLm9wZW4oJ25hbWUnLCAnZGVzY3JpcHRpb24nKQorUEFTUyAnb25zdWNj
ZXNzJyBpbiByZXN1bHQgaXMgdHJ1ZQorUEFTUyAnb25lcnJvcicgaW4gcmVzdWx0IGlzIHRydWUK
K1BBU1MgJ3JlYWR5U3RhdGUnIGluIHJlc3VsdCBpcyB0cnVlCitBbiBldmVudCBzaG91bGQgZmly
ZSBzaG9ydGx5Li4uCisKK2RiID0gZXZlbnQucmVzdWx0CityZXN1bHQgPSBkYi5zZXRWZXJzaW9u
KCd2ZXJzaW9uIDEnKQorRGVsZXRlZCBhbGwgb2JqZWN0IHN0b3Jlcy4KK2RiLmNyZWF0ZU9iamVj
dFN0b3JlKCdhJywge2tleVBhdGg6ICdhJ30pCitkYi5jcmVhdGVPYmplY3RTdG9yZSgnYicpCit0
cmFucyA9IGRiLnRyYW5zYWN0aW9uKFtdLCB3ZWJraXRJREJUcmFuc2FjdGlvbi5SRUFEX1dSSVRF
KQordHJhbnMub2JqZWN0U3RvcmUoJ2EnKS5wdXQoeydhJzogMH0pCit0cmFucy5vYmplY3RTdG9y
ZSgnYicpLnB1dCh7J2EnOiAwfSwgMCkKK3RyYW5zLm9iamVjdFN0b3JlKCdhJykuZ2V0KDApCitQ
QVNTIGV2ZW50LnJlc3VsdC5hIGlzIHthOiAwfQordHJhbnMub2JqZWN0U3RvcmUoJ2InKS5nZXQo
MCkKK1BBU1MgZXZlbnQucmVzdWx0LmEgaXMge2E6IDB9CitQQVNTIHN1Y2Nlc3NmdWxseVBhcnNl
ZCBpcyB0cnVlCisKK1RFU1QgQ09NUExFVEUKKwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvc3Rv
cmFnZS9pbmRleGVkZGIvY3JlYXRlLW9iamVjdC1zdG9yZS1vcHRpb25zLmh0bWwgYi9MYXlvdXRU
ZXN0cy9zdG9yYWdlL2luZGV4ZWRkYi9jcmVhdGUtb2JqZWN0LXN0b3JlLW9wdGlvbnMuaHRtbApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMjhkMmQyCi0tLSAvZGV2L251bGwK
KysrIGIvTGF5b3V0VGVzdHMvc3RvcmFnZS9pbmRleGVkZGIvY3JlYXRlLW9iamVjdC1zdG9yZS1v
cHRpb25zLmh0bWwKQEAgLTAsMCArMSw5MCBAQAorPGh0bWw+Cis8aGVhZD4KKzxsaW5rIHJlbD0i
c3R5bGVzaGVldCIgaHJlZj0iLi4vLi4vZmFzdC9qcy9yZXNvdXJjZXMvanMtdGVzdC1zdHlsZS5j
c3MiPgorPHNjcmlwdCBzcmM9Ii4uLy4uL2Zhc3QvanMvcmVzb3VyY2VzL2pzLXRlc3QtcHJlLmpz
Ij48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIuLi8uLi9mYXN0L2pzL3Jlc291cmNlcy9qcy10ZXN0
LXBvc3QtZnVuY3Rpb24uanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9InJlc291cmNlcy9zaGFy
ZWQuanMiPjwvc2NyaXB0PgorPC9oZWFkPgorPGJvZHk+Cis8cCBpZD0iZGVzY3JpcHRpb24iPjwv
cD4KKzxkaXYgaWQ9ImNvbnNvbGUiPjwvZGl2PgorPHNjcmlwdD4KKworZGVzY3JpcHRpb24oIlRl
c3QgSW5kZXhlZERCJ3MgY3JlYXRlT2JqZWN0U3RvcmUncyB2YXJpb3VzIG9wdGlvbnMiKTsKK2lm
ICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpCisgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIu
d2FpdFVudGlsRG9uZSgpOworCitmdW5jdGlvbiB0ZXN0KCkKK3sKKyAgICBzaG91bGRCZVRydWUo
Iid3ZWJraXRJbmRleGVkREInIGluIHdpbmRvdyIpOworICAgIHNob3VsZEJlRmFsc2UoIndlYmtp
dEluZGV4ZWREQiA9PSBudWxsIik7CisKKyAgICByZXN1bHQgPSBldmFsQW5kTG9nKCJ3ZWJraXRJ
bmRleGVkREIub3BlbignbmFtZScsICdkZXNjcmlwdGlvbicpIik7CisgICAgdmVyaWZ5UmVzdWx0
KHJlc3VsdCk7CisgICAgcmVzdWx0Lm9uc3VjY2VzcyA9IG9wZW5TdWNjZXNzOworICAgIHJlc3Vs
dC5vbmVycm9yID0gdW5leHBlY3RlZEVycm9yQ2FsbGJhY2s7Cit9CisKK2Z1bmN0aW9uIG9wZW5T
dWNjZXNzKCkKK3sKKyAgICBkYiA9IGV2YWxBbmRMb2coImRiID0gZXZlbnQucmVzdWx0Iik7CisK
KyAgICByZXN1bHQgPSBldmFsQW5kTG9nKCJyZXN1bHQgPSBkYi5zZXRWZXJzaW9uKCd2ZXJzaW9u
IDEnKSIpOworICAgIHJlc3VsdC5vbnN1Y2Nlc3MgPSBjbGVhbkRhdGFiYXNlOworICAgIHJlc3Vs
dC5vbmVycm9yID0gdW5leHBlY3RlZEVycm9yQ2FsbGJhY2s7Cit9CisKK2Z1bmN0aW9uIGNsZWFu
RGF0YWJhc2UoKQoreworICAgIGRlbGV0ZUFsbE9iamVjdFN0b3JlcyhkYiwgY2xlYW5lZCk7Cit9
CisKK2Z1bmN0aW9uIGNsZWFuZWQoKQoreworICAgIGV2YWxBbmRMb2coImRiLmNyZWF0ZU9iamVj
dFN0b3JlKCdhJywge2tleVBhdGg6ICdhJ30pIik7CisgICAgZXZhbEFuZExvZygiZGIuY3JlYXRl
T2JqZWN0U3RvcmUoJ2InKSIpOworCisgICAgdHJhbnMgPSBldmFsQW5kTG9nKCJ0cmFucyA9IGRi
LnRyYW5zYWN0aW9uKFtdLCB3ZWJraXRJREJUcmFuc2FjdGlvbi5SRUFEX1dSSVRFKSIpOworCisg
ICAgcmVxID0gZXZhbEFuZExvZygidHJhbnMub2JqZWN0U3RvcmUoJ2EnKS5wdXQoeydhJzogMH0p
Iik7CisgICAgcmVxLm9uc3VjY2VzcyA9IHB1dEI7CisgICAgcmVxLm9uZXJyb3IgPSB1bmV4cGVj
dGVkRXJyb3JDYWxsYmFjazsKK30KKworZnVuY3Rpb24gcHV0QigpCit7CisgICAgcmVxID0gZXZh
bEFuZExvZygidHJhbnMub2JqZWN0U3RvcmUoJ2InKS5wdXQoeydhJzogMH0sIDApIik7ICAvLyBP
T1BTCisgICAgcmVxLm9uc3VjY2VzcyA9IGdldEE7CisgICAgcmVxLm9uZXJyb3IgPSB1bmV4cGVj
dGVkRXJyb3JDYWxsYmFjazsKK30KKworZnVuY3Rpb24gZ2V0QSgpCit7CisgICAgcmVxID0gZXZh
bEFuZExvZygidHJhbnMub2JqZWN0U3RvcmUoJ2EnKS5nZXQoMCkiKTsKKyAgICByZXEub25zdWNj
ZXNzID0gZ2V0QjsKKyAgICByZXEub25lcnJvciA9IHVuZXhwZWN0ZWRFcnJvckNhbGxiYWNrOwor
fQorCitmdW5jdGlvbiBnZXRCKCkKK3sKKyAgICBzaG91bGRCZSgiZXZlbnQucmVzdWx0LmEiLCAi
e2E6IDB9Iik7CisKKyAgICByZXEgPSBldmFsQW5kTG9nKCJ0cmFucy5vYmplY3RTdG9yZSgnYicp
LmdldCgwKSIpOworICAgIHJlcS5vbnN1Y2Nlc3MgPSBjaGVja0I7CisgICAgcmVxLm9uZXJyb3Ig
PSB1bmV4cGVjdGVkRXJyb3JDYWxsYmFjazsKK30KKworZnVuY3Rpb24gY2hlY2tCKCkKK3sKKyAg
ICBzaG91bGRCZSgiZXZlbnQucmVzdWx0LmEiLCAie2E6IDB9Iik7CisKKyAgICBkb25lKCk7Cit9
CisKK3ZhciBzdWNjZXNzZnVsbHlQYXJzZWQgPSB0cnVlOworCit0ZXN0KCk7CisKKzwvc2NyaXB0
PgorPC9ib2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvc3RvcmFnZS9pbmRl
eGVkZGIvdHV0b3JpYWwuaHRtbCBiL0xheW91dFRlc3RzL3N0b3JhZ2UvaW5kZXhlZGRiL3R1dG9y
aWFsLmh0bWwKaW5kZXggZGI5ZjJmYS4uMzU3ODg0OCAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMv
c3RvcmFnZS9pbmRleGVkZGIvdHV0b3JpYWwuaHRtbAorKysgYi9MYXlvdXRUZXN0cy9zdG9yYWdl
L2luZGV4ZWRkYi90dXRvcmlhbC5odG1sCkBAIC0xNTAsMTMgKzE1MCwyNSBAQCBmdW5jdGlvbiBv
blNldFZlcnNpb24oKQogICAgIC8vIGEgbnVtYmVyIGF0dHJpYnV0ZSBhbmQgYXQgbGVhc3Qgb25l
IHNpYmxpbmcpLiBZb3UgY2FuIGV2ZW4gZ28gd2lsZCBhbmQgc2F5CiAgICAgLy8gImZvb1swXVsy
XS5iYXJbMF0uYmF6LnRlc3RbMV1bMl1bM10iLiBJdCdzIHBvc3NpYmxlIHRoaXMgd2lsbCBjaGFu
Z2UgaW4gdGhlIGZ1dHVyZSB0aG91Z2guCiAgICAgLy8KLSAgICAvLyBJZiB5b3Ugc2V0IGF1dG9J
bmNyZW1lbnQgKHRoZSB0aGlyZCBvcHRpb25hbCBwYXJhbWV0ZXIpLCBJbmRleGVkREIgd2lsbCBn
ZW5lcmF0ZSBhIGtleQorICAgIC8vIElmIHlvdSBzZXQgYXV0b0luY3JlbWVudCAoYW5vdGhlciBv
cHRpb25hbCBwYXJhbWV0ZXIpLCBJbmRleGVkREIgd2lsbCBnZW5lcmF0ZSBhIGtleQogICAgIC8v
IGZvciB5b3VyIGVudHJ5IGF1dG9tYXRpY2FsbHkuIEFuZCBpZiB5b3UgaGF2ZSBhIGtleVBhdGgg
c2V0LCBpdCdsbCBzZXQgdGhlIHZhbHVlIGF0CiAgICAgLy8gdGhlIGxvY2F0aW9uIG9mIHRoZSBr
ZXlQYXRoIF9pbiB0aGUgZGF0YWJhc2VfIChpLmUuIGl0IHdpbGwgbm90IG1vZGlmeSB0aGUgdmFs
dWUgeW91IHBhc3MKICAgICAvLyBpbiB0byBwdXQvYWRkKS4gVW5mb3J0dW5hdGVseSBhdXRvSW5j
cmVtZW50IGlzIG5vdCB5ZXQgaW1wbGVtZW50ZWQgaW4gQ2hyb21pdW0vV2ViS2l0LgogICAgIC8v
CisgICAgLy8gQW5vdGhlciBvcHRpb25hbCBwYXJhbWV0ZXIsICJldmljdGFibGUiIGlzIG5vdCB5
ZXQgaW1wbGVtZW50ZWQuIFdoZW4gaXQgaXMsIGl0J2xsIGhpbnQKKyAgICAvLyB3aGljaCBkYXRh
IHNob3VsZCBiZSBkZWxldGVkIGZpcnN0IGlmIHRoZSBicm93c2VyIGRlY2lkZXMgdGhpcyBvcmln
aW4gaXMgdXNpbmcgdG9vIG11Y2gKKyAgICAvLyBzdG9yYWdlLiAoVGhlIGFsdGVybmF0aXZlIGlz
IHRoYXQgaXQnbGwgc3VnZ2VzdCB0aGUgdXNlciBkZWxldGUgZXZlcnl0aGluZyBmcm9tIHRoZQor
ICAgIC8vIG9yaWdpbiwgc28gaXQncyBpbiB5b3VyIGZhdm9yIHRvIHNldCBpdCBhcHByb3BlcmF0
ZWx5ISkgVGhpcyBpcyBncmVhdCBmb3Igd2hlbiB5b3UgaGF2ZQorICAgIC8vIHNvbWUgYWJzb2x1
dGVseSBjcml0aWNhbCBkYXRhIChsaWtlIHVuc2V0IGVtYWlscykgYW5kIGEgYnVuY2ggb2YgbGVz
cyBjcml0aWNhbCwgKGJ1dAorICAgIC8vIG1heWJlIHN0aWxsIGltcG9ydGFudCEpIGRhdGEuCisg
ICAgLy8KKyAgICAvLyBBbGwgb2YgdGhlc2Ugb3B0aW9ucyBjYW4gYmUgcGFzc2VkIGludG8gY3Jl
YXRlT2JqZWN0U3RvcmUgdmlhIGl0cyAob3B0aW9uYWwpIHNlY29uZAorICAgIC8vIHBhcmFtZXRl
ci4gU28sIGlmIHlvdSB3YW50ZWQgdG8gZGVmaW5lIGFsbCwgWW91J2QgZG8ge2tleVBhdGg6ICJz
b21ldGhpbmciLAorICAgIC8vIGV2aWN0YWJsZTogdHJ1ZSwgYXV0b0luY3JlbWVudDogdHJ1ZX0u
IFlvdSBjYW4gYWxzbyBwYXNzIGluIHN1YnNldHMgb2YgYWxsIHRocmVlIG9yCisgICAgLy8gb21p
dCB0aGUgb2JqZWN0IChzaW5jZSBpdCdzIG9wdGlvbmFsKS4KKyAgICAvLwogICAgIC8vIExldCdz
IG5vdyBjcmVhdGUgYW4gb2JqZWN0U3RvcmUgZm9yIHBlb3BsZS4gV2UnbGwgc3VwcGx5IGEga2V5
IHBhdGggaW4gdGhpcyBjYXNlLgotICAgIHZhciBvYmplY3RTdG9yZSA9IGRiLmNyZWF0ZU9iamVj
dFN0b3JlKCJwZW9wbGUiLCAiaWQiKTsKKyAgICB2YXIgb2JqZWN0U3RvcmUgPSBkYi5jcmVhdGVP
YmplY3RTdG9yZSgicGVvcGxlIiwge2tleVBhdGg6ICJpZCJ9KTsKIAogICAgIC8vIE5vdGljZSB0
aGF0IGl0IHJldHVybmVkIHN5bmNocm9ub3VzbHkuIFRoZSBydWxlIG9mIHRodW1iIGlzIHRoYXQg
YW55IGNhbGwgdGhhdCB0b3VjaGVzIChpbgogICAgIC8vIGFueSB3YXkpIGtleXMgb3IgdmFsdWVz
IGlzIGFzeW5jaHJvbm91cyBhbmQgYW55IG90aGVyIGNhbGwgKGJlc2lkZXMgc2V0VmVyc2lvbiBh
bmQgb3BlbikgYXJlCmRpZmYgLS1naXQgYS9XZWJDb3JlL0NoYW5nZUxvZyBiL1dlYkNvcmUvQ2hh
bmdlTG9nCmluZGV4IGQ3NmYwYzguLjZhNjkxOTMgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvQ2hhbmdl
TG9nCisrKyBiL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNTcgQEAKKzIwMTAtMTEtMjUg
IEplcmVteSBPcmxvdyAgPGpvcmxvd0BjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQWRkIGFuIE9wdGlvbnNPYmplY3QgY2xhc3Mg
Zm9yIEluZGV4ZWREQiAoYW5kIGxhdGVyIEdlb2xvY2F0aW9uKQorICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTAwMzAKKworICAgICAgICBHZW9sb2NhdGlv
biBhbmQgSW5kZXhlZERCIGJvdGggaGF2ZSB0aGUgY29uY2VwdCBvZiBhbiBvcHRpb25hbAorICAg
ICAgICBwYXJhbWV0ZXIgdGhhdCBoYXMgdmFyaW91cyBvcHRpb25zIHN1cHBsaWVkIHdpdGggaXQu
ICBJbgorICAgICAgICBHZW9sb2NhdGlvbiB0aGlzIHdhcyBkb25lIHdpdGggY3VzdG9tIGJpbmRp
bmdzLCBidXQgSSdtIHRyeWluZyB0bworICAgICAgICBhdm9pZCB0aGF0IGZvciBJbmRleGVkREIu
ICAKKworICAgICAgICBUaGlzIGZpcnN0IHBhdGNoIGltcGxlbWVudHMgaXQgaW4gVjggYW5kIG1h
a2VzIGNyZWF0ZU9iamVjdFN0b3JlIHVzZSBpdC4KKyAgICAgICAgVGhlIG5leHQgcGF0Y2ggd2ls
bCBjb3ZlciBHZW9sb2NhdGlvbiBhbmQgSlNDLgorCisgICAgICAgIFRlc3Q6IHN0b3JhZ2UvaW5k
ZXhlZGRiL2NyZWF0ZS1vYmplY3Qtc3RvcmUtb3B0aW9ucy5odG1sCisKKyAgICAgICAgKiBXZWJD
b3JlLmd5cGk6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9yVjgucG06
CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0NQUC9XZWJET01UZXN0T2JqLmNwcDoK
KyAgICAgICAgKFdlYkRPTVRlc3RPYmo6Om9wdGlvbnNPYmplY3QpOgorICAgICAgICAqIGJpbmRp
bmdzL3NjcmlwdHMvdGVzdC9DUFAvV2ViRE9NVGVzdE9iai5oOgorICAgICAgICAqIGJpbmRpbmdz
L3NjcmlwdHMvdGVzdC9HT2JqZWN0L1dlYktpdERPTVRlc3RDYWxsYmFjay5jcHA6CisgICAgICAg
ICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0dPYmplY3QvV2ViS2l0RE9NVGVzdEludGVyZmFjZS5j
cHA6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0dPYmplY3QvV2ViS2l0RE9NVGVz
dE1lZGlhUXVlcnlMaXN0TGlzdGVuZXIuY3BwOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMv
dGVzdC9HT2JqZWN0L1dlYktpdERPTVRlc3RPYmouY3BwOgorICAgICAgICAod2Via2l0X2RvbV90
ZXN0X29ial9vcHRpb25zX29iamVjdCk6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0
L0dPYmplY3QvV2ViS2l0RE9NVGVzdE9iai5oOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMv
dGVzdC9KUy9KU1Rlc3RPYmouY3BwOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0T2JqUHJvdG90
eXBlRnVuY3Rpb25PcHRpb25zT2JqZWN0KToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rl
c3QvSlMvSlNUZXN0T2JqLmg6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L09iakMv
RE9NVGVzdE9iai5oOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9PYmpDL0RPTVRl
c3RPYmoubW06CisgICAgICAgICgtW0RPTVRlc3RPYmogb3B0aW9uc09iamVjdDpvb286XSk6Cisg
ICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Rlc3RPYmouaWRsOgorICAgICAgICAqIGJp
bmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRlc3RNZWRpYVF1ZXJ5TGlzdExpc3RlbmVyLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkNvbmZpZ3VyZVY4VGVzdE1lZGlhUXVlcnlMaXN0TGlzdGVuZXJU
ZW1wbGF0ZSk6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdE9iai5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpUZXN0T2JqSW50ZXJuYWw6Om9wdGlvbnNPYmplY3RDYWxs
YmFjayk6CisgICAgICAgICogYmluZGluZ3MvdjgvT3B0aW9uc09iamVjdC5jcHA6IEFkZGVkLgor
ICAgICAgICAoV2ViQ29yZTo6T3B0aW9uc09iamVjdDo6T3B0aW9uc09iamVjdCk6CisgICAgICAg
IChXZWJDb3JlOjpPcHRpb25zT2JqZWN0Ojp+T3B0aW9uc09iamVjdCk6CisgICAgICAgIChXZWJD
b3JlOjpPcHRpb25zT2JqZWN0OjpvcGVyYXRvcj0pOgorICAgICAgICAoV2ViQ29yZTo6T3B0aW9u
c09iamVjdDo6dW5kZWZpbmVkT3JOdWxsKToKKyAgICAgICAgKFdlYkNvcmU6Ok9wdGlvbnNPYmpl
Y3Q6OmdldEtleUJvb2wpOgorICAgICAgICAoV2ViQ29yZTo6T3B0aW9uc09iamVjdDo6Z2V0S2V5
U3RyaW5nKToKKyAgICAgICAgKFdlYkNvcmU6Ok9wdGlvbnNPYmplY3Q6OmdldEtleSk6CisgICAg
ICAgICogYmluZGluZ3MvdjgvT3B0aW9uc09iamVjdC5oOiBDb3BpZWQgZnJvbSBXZWJDb3JlL3N0
b3JhZ2UvSURCRGF0YWJhc2UuaWRsLgorICAgICAgICAqIHN0b3JhZ2UvSURCRGF0YWJhc2UuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6SURCRGF0YWJhc2U6OmNyZWF0ZU9iamVjdFN0b3JlKToKKyAg
ICAgICAgKiBzdG9yYWdlL0lEQkRhdGFiYXNlLmg6CisgICAgICAgIChXZWJDb3JlOjpJREJEYXRh
YmFzZTo6Y3JlYXRlT2JqZWN0U3RvcmUpOgorICAgICAgICAqIHN0b3JhZ2UvSURCRGF0YWJhc2Uu
aWRsOgorCiAyMDEwLTExLTIzICBKZXJlbXkgT3Jsb3cgIDxqb3Jsb3dAY2hyb21pdW0ub3JnPgog
CiAgICAgICAgIFJldmlld2VkIGJ5IFN0ZXZlIEJsb2NrLgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9X
ZWJDb3JlLmd5cGkgYi9XZWJDb3JlL1dlYkNvcmUuZ3lwaQppbmRleCAyYzgxN2NiLi41ODIzNTJm
IDEwMDY0NAotLS0gYS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQorKysgYi9XZWJDb3JlL1dlYkNvcmUu
Z3lwaQpAQCAtNzQ0LDYgKzc0NCw4IEBACiAgICAgICAgICAgICAnYmluZGluZ3MvdjgvQ2hpbGRU
aHJlYWRET01EYXRhLmgnLAogICAgICAgICAgICAgJ2JpbmRpbmdzL3Y4L0lEQkJpbmRpbmdVdGls
aXRpZXMuY3BwJywKICAgICAgICAgICAgICdiaW5kaW5ncy92OC9JREJCaW5kaW5nVXRpbGl0aWVz
LmgnLAorICAgICAgICAgICAgJ2JpbmRpbmdzL3Y4L09wdGlvbnNPYmplY3QuY3BwJywKKyAgICAg
ICAgICAgICdiaW5kaW5ncy92OC9PcHRpb25zT2JqZWN0LmgnLAogICAgICAgICAgICAgJ2JpbmRp
bmdzL3Y4L2N1c3RvbS9WOENhbnZhc1BpeGVsQXJyYXlDdXN0b20uY3BwJywKICAgICAgICAgICAg
ICdiaW5kaW5ncy92OC9jdXN0b20vVjhBcnJheUJ1ZmZlclZpZXdDdXN0b20uaCcsCiAgICAgICAg
ICAgICAnYmluZGluZ3MvdjgvY3VzdG9tL1Y4QXJyYXlCdWZmZXJDdXN0b20uY3BwJywKZGlmZiAt
LWdpdCBhL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9yVjgucG0gYi9XZWJD
b3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvclY4LnBtCmluZGV4IDdlYTRjNjMuLjE5
NmJhOTIgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9y
VjgucG0KKysrIGIvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JWOC5wbQpA
QCAtMjgwNiw2ICsyODA2LDcgQEAgc3ViIEdldE5hdGl2ZVR5cGUKICAgICByZXR1cm4gIk5vZGUq
IiBpZiAkdHlwZSBlcSAiRXZlbnRUYXJnZXQiIGFuZCAkaXNQYXJhbWV0ZXI7CiAgICAgcmV0dXJu
ICJkb3VibGUiIGlmICR0eXBlIGVxICJEYXRlIjsKICAgICByZXR1cm4gIlNjcmlwdFZhbHVlIiBp
ZiAkdHlwZSBlcSAiRE9NT2JqZWN0IjsKKyAgICByZXR1cm4gIk9wdGlvbnNPYmplY3QiIGlmICR0
eXBlIGVxICJPcHRpb25zT2JqZWN0IjsKIAogICAgIHJldHVybiAiU3RyaW5nIiBpZiAkdHlwZSBl
cSAiRE9NVXNlckRhdGEiOyAgIyBGSVhNRTogVGVtcG9yYXJ5IGhhY2s/CiAKQEAgLTI4ODksNiAr
Mjg5MCwxMSBAQCBzdWIgSlNWYWx1ZVRvTmF0aXZlCiAgICAgICAgIHJldHVybiAiY3JlYXRlSURC
S2V5RnJvbVZhbHVlKCR2YWx1ZSkiOwogICAgIH0KIAorICAgIGlmICgkdHlwZSBlcSAiT3B0aW9u
c09iamVjdCIpIHsKKyAgICAgICAgJGltcGxJbmNsdWRlc3siT3B0aW9uc09iamVjdC5oIn0gPSAx
OworICAgICAgICByZXR1cm4gJHZhbHVlOworICAgIH0KKwogICAgIGlmICgkdHlwZSBlcSAiRE9N
T2JqZWN0IikgewogICAgICAgICAkaW1wbEluY2x1ZGVzeyJTY3JpcHRWYWx1ZS5oIn0gPSAxOwog
ICAgICAgICByZXR1cm4gIlNjcmlwdFZhbHVlKCR2YWx1ZSkiOwpAQCAtMzAzNCw2ICszMDQwLDcg
QEAgbXkgJW5vbl93cmFwcGVyX3R5cGVzID0gKAogICAgICdOb2RlRmlsdGVyJyA9PiAxLAogICAg
ICdFdmVudExpc3RlbmVyJyA9PiAxLAogICAgICdJREJLZXknID0+IDEsCisgICAgJ09wdGlvbnNP
YmplY3QnID0+IDEsCiAgICAgJ0RhdGUnID0+IDEsCiAgICAgJ01lZGlhUXVlcnlMaXN0TGlzdGVu
ZXInID0+IDEKICk7CmRpZmYgLS1naXQgYS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9D
UFAvV2ViRE9NVGVzdE9iai5jcHAgYi9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9DUFAv
V2ViRE9NVGVzdE9iai5jcHAKaW5kZXggOWE4ZDkwOS4uODE5YzdjZiAxMDA2NDQKLS0tIGEvV2Vi
Q29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvQ1BQL1dlYkRPTVRlc3RPYmouY3BwCisrKyBiL1dl
YkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0NQUC9XZWJET01UZXN0T2JqLmNwcApAQCAtMjQs
OSArMjQsMTEgQEAKICNpbmNsdWRlICJIVE1MTmFtZXMuaCIKICNpbmNsdWRlICJJREJLZXkuaCIK
ICNpbmNsdWRlICJLVVJMLmgiCisjaW5jbHVkZSAiT3B0aW9uc09iamVjdC5oIgogI2luY2x1ZGUg
IlNlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5oIgogI2luY2x1ZGUgIlRlc3RPYmouaCIKICNpbmNsdWRl
ICJXZWJET01JREJLZXkuaCIKKyNpbmNsdWRlICJXZWJET01PcHRpb25zT2JqZWN0LmgiCiAjaW5j
bHVkZSAiV2ViRE9NU3RyaW5nLmgiCiAjaW5jbHVkZSAiV2ViRXhjZXB0aW9uSGFuZGxlci5oIgog
I2luY2x1ZGUgIldlYk5hdGl2ZUV2ZW50TGlzdGVuZXIuaCIKQEAgLTY2Miw2ICs2NjQsMTQgQEAg
dm9pZCBXZWJET01UZXN0T2JqOjppZGJLZXkoY29uc3QgV2ViRE9NSURCS2V5JiBrZXkpCiAgICAg
aW1wbCgpLT5pZGJLZXkodG9XZWJDb3JlKGtleSkpOwogfQogCit2b2lkIFdlYkRPTVRlc3RPYmo6
Om9wdGlvbnNPYmplY3QoY29uc3QgV2ViRE9NT3B0aW9uc09iamVjdCYgb28sIGNvbnN0IFdlYkRP
TU9wdGlvbnNPYmplY3QmIG9vbykKK3sKKyAgICBpZiAoIWltcGwoKSkKKyAgICAgICAgcmV0dXJu
OworCisgICAgaW1wbCgpLT5vcHRpb25zT2JqZWN0KHRvV2ViQ29yZShvbyksIHRvV2ViQ29yZShv
b28pKTsKK30KKwogdm9pZCBXZWJET01UZXN0T2JqOjptZXRob2RXaXRoRXhjZXB0aW9uKCkKIHsK
ICAgICBpZiAoIWltcGwoKSkKZGlmZiAtLWdpdCBhL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90
ZXN0L0NQUC9XZWJET01UZXN0T2JqLmggYi9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9D
UFAvV2ViRE9NVGVzdE9iai5oCmluZGV4IGYyOWI3ZGMuLjBiMzU5M2QgMTAwNjQ0Ci0tLSBhL1dl
YkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0NQUC9XZWJET01UZXN0T2JqLmgKKysrIGIvV2Vi
Q29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvQ1BQL1dlYkRPTVRlc3RPYmouaApAQCAtMzIsNiAr
MzIsNyBAQCBjbGFzcyBUZXN0T2JqOwogCiBjbGFzcyBXZWJET01FdmVudExpc3RlbmVyOwogY2xh
c3MgV2ViRE9NSURCS2V5OworY2xhc3MgV2ViRE9NT3B0aW9uc09iamVjdDsKIGNsYXNzIFdlYkRP
TVN0cmluZzsKIGNsYXNzIFdlYkRPTVRlc3RPYmo7CiAKQEAgLTEzNiw2ICsxMzcsNyBAQCBwdWJs
aWM6CiAgICAgV2ViRE9NVGVzdE9iaiBtZXRob2RUaGF0UmVxdWlyZXNBbGxBcmdzQW5kVGhyb3dz
KGNvbnN0IFdlYkRPTVN0cmluZyYgc3RyQXJnLCBjb25zdCBXZWJET01UZXN0T2JqJiBvYmpBcmcp
OwogICAgIHZvaWQgc2VyaWFsaXplZFZhbHVlKGNvbnN0IFdlYkRPTVN0cmluZyYgc2VyaWFsaXpl
ZEFyZyk7CiAgICAgdm9pZCBpZGJLZXkoY29uc3QgV2ViRE9NSURCS2V5JiBrZXkpOworICAgIHZv
aWQgb3B0aW9uc09iamVjdChjb25zdCBXZWJET01PcHRpb25zT2JqZWN0JiBvbywgY29uc3QgV2Vi
RE9NT3B0aW9uc09iamVjdCYgb29vKTsKICAgICB2b2lkIG1ldGhvZFdpdGhFeGNlcHRpb24oKTsK
ICAgICB2b2lkIGN1c3RvbU1ldGhvZCgpOwogICAgIHZvaWQgY3VzdG9tTWV0aG9kV2l0aEFyZ3Mo
aW50IGludEFyZywgY29uc3QgV2ViRE9NU3RyaW5nJiBzdHJBcmcsIGNvbnN0IFdlYkRPTVRlc3RP
YmomIG9iakFyZyk7CmRpZmYgLS1naXQgYS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9H
T2JqZWN0L1dlYktpdERPTVRlc3RDYWxsYmFjay5jcHAgYi9XZWJDb3JlL2JpbmRpbmdzL3Njcmlw
dHMvdGVzdC9HT2JqZWN0L1dlYktpdERPTVRlc3RDYWxsYmFjay5jcHAKaW5kZXggMTlmZjE2Ni4u
NTU0Y2MxNSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvR09iamVj
dC9XZWJLaXRET01UZXN0Q2FsbGJhY2suY3BwCisrKyBiL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0
cy90ZXN0L0dPYmplY3QvV2ViS2l0RE9NVGVzdENhbGxiYWNrLmNwcApAQCAtMjUsNiArMjUsNyBA
QAogCiAjaW5jbHVkZSA8d3RmL0dldFB0ci5oPgogI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KKyNp
bmNsdWRlICJET01PYmplY3RDYWNoZS5oIgogI2luY2x1ZGUgIkV4Y2VwdGlvbkNvZGUuaCIKICNp
bmNsdWRlICJKU01haW5UaHJlYWRFeGVjU3RhdGUuaCIKICNpbmNsdWRlICJUZXN0Q2FsbGJhY2su
aCIKZGlmZiAtLWdpdCBhL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0dPYmplY3QvV2Vi
S2l0RE9NVGVzdEludGVyZmFjZS5jcHAgYi9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9H
T2JqZWN0L1dlYktpdERPTVRlc3RJbnRlcmZhY2UuY3BwCmluZGV4IGExM2RhNDUuLjZjOTA2ZTQg
MTAwNjQ0Ci0tLSBhL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0dPYmplY3QvV2ViS2l0
RE9NVGVzdEludGVyZmFjZS5jcHAKKysrIGIvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3Qv
R09iamVjdC9XZWJLaXRET01UZXN0SW50ZXJmYWNlLmNwcApAQCAtMjUsNiArMjUsNyBAQAogCiAj
aW5jbHVkZSA8d3RmL0dldFB0ci5oPgogI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KKyNpbmNsdWRl
ICJET01PYmplY3RDYWNoZS5oIgogI2luY2x1ZGUgIkV4Y2VwdGlvbkNvZGUuaCIKICNpbmNsdWRl
ICJKU01haW5UaHJlYWRFeGVjU3RhdGUuaCIKICNpbmNsdWRlICJUZXN0SW50ZXJmYWNlLmgiCmRp
ZmYgLS1naXQgYS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9HT2JqZWN0L1dlYktpdERP
TVRlc3RNZWRpYVF1ZXJ5TGlzdExpc3RlbmVyLmNwcCBiL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0
cy90ZXN0L0dPYmplY3QvV2ViS2l0RE9NVGVzdE1lZGlhUXVlcnlMaXN0TGlzdGVuZXIuY3BwCmlu
ZGV4IGY1ZGVkNzkuLmE3ZDM2NGMgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0
cy90ZXN0L0dPYmplY3QvV2ViS2l0RE9NVGVzdE1lZGlhUXVlcnlMaXN0TGlzdGVuZXIuY3BwCisr
KyBiL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0dPYmplY3QvV2ViS2l0RE9NVGVzdE1l
ZGlhUXVlcnlMaXN0TGlzdGVuZXIuY3BwCkBAIC0yMyw2ICsyMyw3IEBACiAKICNpbmNsdWRlIDx3
dGYvR2V0UHRyLmg+CiAjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgorI2luY2x1ZGUgIkRPTU9iamVj
dENhY2hlLmgiCiAjaW5jbHVkZSAiRXhjZXB0aW9uQ29kZS5oIgogI2luY2x1ZGUgIkpTTWFpblRo
cmVhZEV4ZWNTdGF0ZS5oIgogI2luY2x1ZGUgIlRlc3RNZWRpYVF1ZXJ5TGlzdExpc3RlbmVyLmgi
CmRpZmYgLS1naXQgYS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9HT2JqZWN0L1dlYktp
dERPTVRlc3RPYmouY3BwIGIvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvR09iamVjdC9X
ZWJLaXRET01UZXN0T2JqLmNwcAppbmRleCAxYmY5OTgzLi5lYzJjNmRjIDEwMDY0NAotLS0gYS9X
ZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9HT2JqZWN0L1dlYktpdERPTVRlc3RPYmouY3Bw
CisrKyBiL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0dPYmplY3QvV2ViS2l0RE9NVGVz
dE9iai5jcHAKQEAgLTIzLDYgKzIzLDcgQEAKIAogI2luY2x1ZGUgPHd0Zi9HZXRQdHIuaD4KICNp
bmNsdWRlIDx3dGYvUmVmUHRyLmg+CisjaW5jbHVkZSAiRE9NT2JqZWN0Q2FjaGUuaCIKICNpbmNs
dWRlICJFeGNlcHRpb25Db2RlLmgiCiAjaW5jbHVkZSAiSFRNTE5hbWVzLmgiCiAjaW5jbHVkZSAi
SlNNYWluVGhyZWFkRXhlY1N0YXRlLmgiCkBAIC0zMSw2ICszMiw4IEBACiAjaW5jbHVkZSAiZ29i
amVjdC9Db252ZXJ0VG9VVEY4U3RyaW5nLmgiCiAjaW5jbHVkZSAid2Via2l0L1dlYktpdERPTUlE
QktleS5oIgogI2luY2x1ZGUgIndlYmtpdC9XZWJLaXRET01JREJLZXlQcml2YXRlLmgiCisjaW5j
bHVkZSAid2Via2l0L1dlYktpdERPTU9wdGlvbnNPYmplY3QuaCIKKyNpbmNsdWRlICJ3ZWJraXQv
V2ViS2l0RE9NT3B0aW9uc09iamVjdFByaXZhdGUuaCIKICNpbmNsdWRlICJ3ZWJraXQvV2ViS2l0
RE9NU2VyaWFsaXplZFNjcmlwdFZhbHVlLmgiCiAjaW5jbHVkZSAid2Via2l0L1dlYktpdERPTVNl
cmlhbGl6ZWRTY3JpcHRWYWx1ZVByaXZhdGUuaCIKICNpbmNsdWRlICJ3ZWJraXQvV2ViS2l0RE9N
VGVzdE9iai5oIgpAQCAtMjExLDYgKzIxNCwyNyBAQCB3ZWJraXRfZG9tX3Rlc3Rfb2JqX2lkYl9r
ZXkoV2ViS2l0RE9NVGVzdE9iaiogc2VsZiwgV2ViS2l0RE9NSURCS2V5KiBrZXkpCiB9CiAKIHZv
aWQKK3dlYmtpdF9kb21fdGVzdF9vYmpfb3B0aW9uc19vYmplY3QoV2ViS2l0RE9NVGVzdE9iaiog
c2VsZiwgV2ViS2l0RE9NT3B0aW9uc09iamVjdCogb28sIFdlYktpdERPTU9wdGlvbnNPYmplY3Qq
IG9vbykKK3sKKyAgICBnX3JldHVybl9pZl9mYWlsKHNlbGYpOworICAgIFdlYkNvcmU6OkpTTWFp
blRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBXZWJDb3JlOjpUZXN0T2JqICogaXRlbSA9IFdl
YktpdDo6Y29yZShzZWxmKTsKKyAgICBnX3JldHVybl9pZl9mYWlsKG9vKTsKKyAgICBnX3JldHVy
bl9pZl9mYWlsKG9vbyk7CisgICAgV2ViQ29yZTo6T3B0aW9uc09iamVjdCAqIGNvbnZlcnRlZF9v
byA9IE5VTEw7CisgICAgaWYgKG9vICE9IE5VTEwpIHsKKyAgICAgICAgY29udmVydGVkX29vID0g
V2ViS2l0Ojpjb3JlKG9vKTsKKyAgICAgICAgZ19yZXR1cm5faWZfZmFpbChjb252ZXJ0ZWRfb28p
OworICAgIH0KKyAgICBXZWJDb3JlOjpPcHRpb25zT2JqZWN0ICogY29udmVydGVkX29vbyA9IE5V
TEw7CisgICAgaWYgKG9vbyAhPSBOVUxMKSB7CisgICAgICAgIGNvbnZlcnRlZF9vb28gPSBXZWJL
aXQ6OmNvcmUob29vKTsKKyAgICAgICAgZ19yZXR1cm5faWZfZmFpbChjb252ZXJ0ZWRfb29vKTsK
KyAgICB9CisgICAgaXRlbS0+b3B0aW9uc09iamVjdChjb252ZXJ0ZWRfb28sIGNvbnZlcnRlZF9v
b28pOworfQorCit2b2lkCiB3ZWJraXRfZG9tX3Rlc3Rfb2JqX21ldGhvZF93aXRoX2V4Y2VwdGlv
bihXZWJLaXRET01UZXN0T2JqKiBzZWxmLCBHRXJyb3IgKiplcnJvcikKIHsKICAgICBnX3JldHVy
bl9pZl9mYWlsKHNlbGYpOwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rl
c3QvR09iamVjdC9XZWJLaXRET01UZXN0T2JqLmggYi9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMv
dGVzdC9HT2JqZWN0L1dlYktpdERPTVRlc3RPYmouaAppbmRleCAyZWViZGIxLi40MmQxZmNkIDEw
MDY0NAotLS0gYS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9HT2JqZWN0L1dlYktpdERP
TVRlc3RPYmouaAorKysgYi9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9HT2JqZWN0L1dl
YktpdERPTVRlc3RPYmouaApAQCAtNzcsNiArNzcsOSBAQCBXRUJLSVRfQVBJIHZvaWQKIHdlYmtp
dF9kb21fdGVzdF9vYmpfaWRiX2tleShXZWJLaXRET01UZXN0T2JqKiBzZWxmLCBXZWJLaXRET01J
REJLZXkqIGtleSk7CiAKIFdFQktJVF9BUEkgdm9pZAord2Via2l0X2RvbV90ZXN0X29ial9vcHRp
b25zX29iamVjdChXZWJLaXRET01UZXN0T2JqKiBzZWxmLCBXZWJLaXRET01PcHRpb25zT2JqZWN0
KiBvbywgV2ViS2l0RE9NT3B0aW9uc09iamVjdCogb29vKTsKKworV0VCS0lUX0FQSSB2b2lkCiB3
ZWJraXRfZG9tX3Rlc3Rfb2JqX21ldGhvZF93aXRoX2V4Y2VwdGlvbihXZWJLaXRET01UZXN0T2Jq
KiBzZWxmLCBHRXJyb3IgKiplcnJvcik7CiAKIApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9iaW5kaW5n
cy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0T2JqLmNwcCBiL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0
cy90ZXN0L0pTL0pTVGVzdE9iai5jcHAKaW5kZXggOTgyMGZhYi4uZDhiZjY3ZSAxMDA2NDQKLS0t
IGEvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0T2JqLmNwcAorKysgYi9X
ZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RPYmouY3BwCkBAIC0yNyw2ICsy
Nyw3IEBACiAjaW5jbHVkZSAiSURCS2V5LmgiCiAjaW5jbHVkZSAiSlNET01CaW5kaW5nLmgiCiAj
aW5jbHVkZSAiSlNFdmVudExpc3RlbmVyLmgiCisjaW5jbHVkZSAiSlNPcHRpb25zT2JqZWN0Lmgi
CiAjaW5jbHVkZSAiSlNUZXN0Q2FsbGJhY2suaCIKICNpbmNsdWRlICJKU1Rlc3RPYmouaCIKICNp
bmNsdWRlICJKU2xvZy5oIgpAQCAtMTgxLDcgKzE4Miw3IEBAIGJvb2wgSlNUZXN0T2JqQ29uc3Ry
dWN0b3I6OmdldE93blByb3BlcnR5RGVzY3JpcHRvcihFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IElk
ZW50CiAjZGVmaW5lIFRIVU5LX0dFTkVSQVRPUihnZW5lcmF0b3IpCiAjZW5kaWYKIAotc3RhdGlj
IGNvbnN0IEhhc2hUYWJsZVZhbHVlIEpTVGVzdE9ialByb3RvdHlwZVRhYmxlVmFsdWVzWzQ3XSA9
CitzdGF0aWMgY29uc3QgSGFzaFRhYmxlVmFsdWUgSlNUZXN0T2JqUHJvdG90eXBlVGFibGVWYWx1
ZXNbNDhdID0KIHsKICAgICB7ICJDT05TVF9WQUxVRV8wIiwgRG9udERlbGV0ZSB8IFJlYWRPbmx5
LCAoaW50cHRyX3Qpc3RhdGljX2Nhc3Q8UHJvcGVydHlTbG90OjpHZXRWYWx1ZUZ1bmM+KGpzVGVz
dE9iakNPTlNUX1ZBTFVFXzApLCAoaW50cHRyX3QpMCBUSFVOS19HRU5FUkFUT1IoMCkgfSwKICAg
ICB7ICJDT05TVF9WQUxVRV8xIiwgRG9udERlbGV0ZSB8IFJlYWRPbmx5LCAoaW50cHRyX3Qpc3Rh
dGljX2Nhc3Q8UHJvcGVydHlTbG90OjpHZXRWYWx1ZUZ1bmM+KGpzVGVzdE9iakNPTlNUX1ZBTFVF
XzEpLCAoaW50cHRyX3QpMCBUSFVOS19HRU5FUkFUT1IoMCkgfSwKQEAgLTIwNCw2ICsyMDUsNyBA
QCBzdGF0aWMgY29uc3QgSGFzaFRhYmxlVmFsdWUgSlNUZXN0T2JqUHJvdG90eXBlVGFibGVWYWx1
ZXNbNDddID0KICAgICB7ICJtZXRob2RUaGF0UmVxdWlyZXNBbGxBcmdzQW5kVGhyb3dzIiwgRG9u
dERlbGV0ZSB8IEZ1bmN0aW9uLCAoaW50cHRyX3Qpc3RhdGljX2Nhc3Q8TmF0aXZlRnVuY3Rpb24+
KGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kVGhhdFJlcXVpcmVzQWxsQXJnc0FuZFRo
cm93cyksIChpbnRwdHJfdCkyIFRIVU5LX0dFTkVSQVRPUigwKSB9LAogICAgIHsgInNlcmlhbGl6
ZWRWYWx1ZSIsIERvbnREZWxldGUgfCBGdW5jdGlvbiwgKGludHB0cl90KXN0YXRpY19jYXN0PE5h
dGl2ZUZ1bmN0aW9uPihqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvblNlcmlhbGl6ZWRWYWx1ZSks
IChpbnRwdHJfdCkxIFRIVU5LX0dFTkVSQVRPUigwKSB9LAogICAgIHsgImlkYktleSIsIERvbnRE
ZWxldGUgfCBGdW5jdGlvbiwgKGludHB0cl90KXN0YXRpY19jYXN0PE5hdGl2ZUZ1bmN0aW9uPihq
c1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbklkYktleSksIChpbnRwdHJfdCkxIFRIVU5LX0dFTkVS
QVRPUigwKSB9LAorICAgIHsgIm9wdGlvbnNPYmplY3QiLCBEb250RGVsZXRlIHwgRnVuY3Rpb24s
IChpbnRwdHJfdClzdGF0aWNfY2FzdDxOYXRpdmVGdW5jdGlvbj4oanNUZXN0T2JqUHJvdG90eXBl
RnVuY3Rpb25PcHRpb25zT2JqZWN0KSwgKGludHB0cl90KTIgVEhVTktfR0VORVJBVE9SKDApIH0s
CiAgICAgeyAibWV0aG9kV2l0aEV4Y2VwdGlvbiIsIERvbnREZWxldGUgfCBGdW5jdGlvbiwgKGlu
dHB0cl90KXN0YXRpY19jYXN0PE5hdGl2ZUZ1bmN0aW9uPihqc1Rlc3RPYmpQcm90b3R5cGVGdW5j
dGlvbk1ldGhvZFdpdGhFeGNlcHRpb24pLCAoaW50cHRyX3QpMCBUSFVOS19HRU5FUkFUT1IoMCkg
fSwKICAgICB7ICJjdXN0b21NZXRob2QiLCBEb250RGVsZXRlIHwgRnVuY3Rpb24sIChpbnRwdHJf
dClzdGF0aWNfY2FzdDxOYXRpdmVGdW5jdGlvbj4oanNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25D
dXN0b21NZXRob2QpLCAoaW50cHRyX3QpMCBUSFVOS19HRU5FUkFUT1IoMCkgfSwKICAgICB7ICJj
dXN0b21NZXRob2RXaXRoQXJncyIsIERvbnREZWxldGUgfCBGdW5jdGlvbiwgKGludHB0cl90KXN0
YXRpY19jYXN0PE5hdGl2ZUZ1bmN0aW9uPihqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbkN1c3Rv
bU1ldGhvZFdpdGhBcmdzKSwgKGludHB0cl90KTMgVEhVTktfR0VORVJBVE9SKDApIH0sCkBAIC0y
MzMsNyArMjM1LDcgQEAgc3RhdGljIGNvbnN0IEhhc2hUYWJsZVZhbHVlIEpTVGVzdE9ialByb3Rv
dHlwZVRhYmxlVmFsdWVzWzQ3XSA9CiB9OwogCiAjdW5kZWYgVEhVTktfR0VORVJBVE9SCi1zdGF0
aWMgSlNDX0NPTlNUX0hBU0hUQUJMRSBIYXNoVGFibGUgSlNUZXN0T2JqUHJvdG90eXBlVGFibGUg
PSB7IDEzNSwgMTI3LCBKU1Rlc3RPYmpQcm90b3R5cGVUYWJsZVZhbHVlcywgMCB9Oworc3RhdGlj
IEpTQ19DT05TVF9IQVNIVEFCTEUgSGFzaFRhYmxlIEpTVGVzdE9ialByb3RvdHlwZVRhYmxlID0g
eyAxMzYsIDEyNywgSlNUZXN0T2JqUHJvdG90eXBlVGFibGVWYWx1ZXMsIDAgfTsKIGNvbnN0IENs
YXNzSW5mbyBKU1Rlc3RPYmpQcm90b3R5cGU6OnNfaW5mbyA9IHsgIlRlc3RPYmpQcm90b3R5cGUi
LCAwLCAmSlNUZXN0T2JqUHJvdG90eXBlVGFibGUsIDAgfTsKIAogSlNPYmplY3QqIEpTVGVzdE9i
alByb3RvdHlwZTo6c2VsZihFeGVjU3RhdGUqIGV4ZWMsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxP
YmplY3QpCkBAIC05OTAsNiArOTkyLDMxIEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwg
anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25JZGJLZXkoRXhlY1N0YXRlKiBleGVjKQogICAgIHJl
dHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiB9CiAKK0VuY29kZWRKU1ZhbHVl
IEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25PcHRpb25zT2JqZWN0KEV4
ZWNTdGF0ZSogZXhlYykKK3sKKyAgICBKU1ZhbHVlIHRoaXNWYWx1ZSA9IGV4ZWMtPmhvc3RUaGlz
VmFsdWUoKTsKKyAgICBpZiAoIXRoaXNWYWx1ZS5pbmhlcml0cygmSlNUZXN0T2JqOjpzX2luZm8p
KQorICAgICAgICByZXR1cm4gdGhyb3dWTVR5cGVFcnJvcihleGVjKTsKKyAgICBKU1Rlc3RPYmoq
IGNhc3RlZFRoaXMgPSBzdGF0aWNfY2FzdDxKU1Rlc3RPYmoqPihhc09iamVjdCh0aGlzVmFsdWUp
KTsKKyAgICBUZXN0T2JqKiBpbXAgPSBzdGF0aWNfY2FzdDxUZXN0T2JqKj4oY2FzdGVkVGhpcy0+
aW1wbCgpKTsKKyAgICBPcHRpb25zT2JqZWN0KiBvbyA9IHRvT3B0aW9uc09iamVjdChleGVjLT5h
cmd1bWVudCgwKSk7CisgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgICAgICByZXR1
cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOworCisgICAgaW50IGFyZ3NDb3VudCA9
IGV4ZWMtPmFyZ3VtZW50Q291bnQoKTsKKyAgICBpZiAoYXJnc0NvdW50IDw9IDEpIHsKKyAgICAg
ICAgaW1wLT5vcHRpb25zT2JqZWN0KG9vKTsKKyAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29k
ZShqc1VuZGVmaW5lZCgpKTsKKyAgICB9CisKKyAgICBPcHRpb25zT2JqZWN0KiBvb28gPSB0b09w
dGlvbnNPYmplY3QoZXhlYy0+YXJndW1lbnQoMSkpOworICAgIGlmIChleGVjLT5oYWRFeGNlcHRp
b24oKSkKKyAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKKwor
ICAgIGltcC0+b3B0aW9uc09iamVjdChvbywgb29vKTsKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5j
b2RlKGpzVW5kZWZpbmVkKCkpOworfQorCiBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpz
VGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aEV4Y2VwdGlvbihFeGVjU3RhdGUqIGV4
ZWMpCiB7CiAgICAgSlNWYWx1ZSB0aGlzVmFsdWUgPSBleGVjLT5ob3N0VGhpc1ZhbHVlKCk7CmRp
ZmYgLS1naXQgYS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RPYmouaCBi
L1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE9iai5oCmluZGV4IDYwMTRm
N2EuLmMyNzQ0NGEgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pT
L0pTVGVzdE9iai5oCisrKyBiL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVz
dE9iai5oCkBAIC05Niw2ICs5Niw3IEBAIEpTQzo6RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FM
TCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFRoYXRSZXF1aXJlc0FsCiBKU0M6OkVu
Y29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRo
b2RUaGF0UmVxdWlyZXNBbGxBcmdzQW5kVGhyb3dzKEpTQzo6RXhlY1N0YXRlKik7CiBKU0M6OkVu
Y29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25TZXJp
YWxpemVkVmFsdWUoSlNDOjpFeGVjU3RhdGUqKTsKIEpTQzo6RW5jb2RlZEpTVmFsdWUgSlNDX0hP
U1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbklkYktleShKU0M6OkV4ZWNTdGF0ZSop
OworSlNDOjpFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1
bmN0aW9uT3B0aW9uc09iamVjdChKU0M6OkV4ZWNTdGF0ZSopOwogSlNDOjpFbmNvZGVkSlNWYWx1
ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aEV4Y2Vw
dGlvbihKU0M6OkV4ZWNTdGF0ZSopOwogSlNDOjpFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxM
IGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uQ3VzdG9tTWV0aG9kKEpTQzo6RXhlY1N0YXRlKik7
CiBKU0M6OkVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVu
Y3Rpb25DdXN0b21NZXRob2RXaXRoQXJncyhKU0M6OkV4ZWNTdGF0ZSopOwpkaWZmIC0tZ2l0IGEv
V2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvT2JqQy9ET01UZXN0T2JqLmggYi9XZWJDb3Jl
L2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9PYmpDL0RPTVRlc3RPYmouaAppbmRleCBmZDQwMDk1Li43
NjZkMzFmIDEwMDY0NAotLS0gYS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9PYmpDL0RP
TVRlc3RPYmouaAorKysgYi9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9PYmpDL0RPTVRl
c3RPYmouaApAQCAtMjksNiArMjksNyBAQAogI2lmIFdFQktJVF9WRVJTSU9OX01BWF9BTExPV0VE
ID49IFdFQktJVF9WRVJTSU9OX0xBVEVTVAogCiBAY2xhc3MgRE9NSURCS2V5OworQGNsYXNzIERP
TU9wdGlvbnNPYmplY3Q7CiBAY2xhc3MgRE9NVGVzdE9iajsKIEBjbGFzcyBET01sb2c7CiBAY2xh
c3MgTlNTdHJpbmc7CkBAIC0xMjcsNiArMTI4LDcgQEAgZW51bSB7CiAtIChET01UZXN0T2JqICop
bWV0aG9kVGhhdFJlcXVpcmVzQWxsQXJnc0FuZFRocm93czooTlNTdHJpbmcgKilzdHJBcmcgb2Jq
QXJnOihET01UZXN0T2JqICopb2JqQXJnOwogLSAodm9pZClzZXJpYWxpemVkVmFsdWU6KE5TU3Ry
aW5nICopc2VyaWFsaXplZEFyZzsKIC0gKHZvaWQpaWRiS2V5OihET01JREJLZXkgKilrZXk7Cist
ICh2b2lkKW9wdGlvbnNPYmplY3Q6KERPTU9wdGlvbnNPYmplY3QgKilvbyBvb286KERPTU9wdGlv
bnNPYmplY3QgKilvb287CiAtICh2b2lkKW1ldGhvZFdpdGhFeGNlcHRpb247CiAtICh2b2lkKWN1
c3RvbU1ldGhvZDsKIC0gKHZvaWQpY3VzdG9tTWV0aG9kV2l0aEFyZ3M6KGludClpbnRBcmcgc3Ry
QXJnOihOU1N0cmluZyAqKXN0ckFyZyBvYmpBcmc6KERPTVRlc3RPYmogKilvYmpBcmc7CmRpZmYg
LS1naXQgYS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9PYmpDL0RPTVRlc3RPYmoubW0g
Yi9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9PYmpDL0RPTVRlc3RPYmoubW0KaW5kZXgg
NjEyNTk3Zi4uYWMwNDIzNSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rl
c3QvT2JqQy9ET01UZXN0T2JqLm1tCisrKyBiL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0
L09iakMvRE9NVGVzdE9iai5tbQpAQCAtMzUsNiArMzUsNyBAQAogI2ltcG9ydCAiRE9NRXZlbnRJ
bnRlcm5hbC5oIgogI2ltcG9ydCAiRE9NSURCS2V5SW50ZXJuYWwuaCIKICNpbXBvcnQgIkRPTU5v
ZGVJbnRlcm5hbC5oIgorI2ltcG9ydCAiRE9NT3B0aW9uc09iamVjdEludGVybmFsLmgiCiAjaW1w
b3J0ICJET01TdHlsZVNoZWV0SW50ZXJuYWwuaCIKICNpbXBvcnQgIkRPTVRlc3RPYmpJbnRlcm5h
bC5oIgogI2ltcG9ydCAiRE9NbG9nSW50ZXJuYWwuaCIKQEAgLTQ1LDYgKzQ2LDcgQEAKICNpbXBv
cnQgIkpTTWFpblRocmVhZEV4ZWNTdGF0ZS5oIgogI2ltcG9ydCAiS1VSTC5oIgogI2ltcG9ydCAi
T2JqQ0V2ZW50TGlzdGVuZXIuaCIKKyNpbXBvcnQgIk9wdGlvbnNPYmplY3QuaCIKICNpbXBvcnQg
IlNlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5oIgogI2ltcG9ydCAiVGVzdE9iai5oIgogI2ltcG9ydCAi
VGhyZWFkQ2hlY2suaCIKQEAgLTUzMyw2ICs1MzUsMTIgQEAKICAgICBJTVBMLT5pZGJLZXkoY29y
ZShrZXkpKTsKIH0KIAorLSAodm9pZClvcHRpb25zT2JqZWN0OihET01PcHRpb25zT2JqZWN0ICop
b28gb29vOihET01PcHRpb25zT2JqZWN0ICopb29vCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhy
ZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIElNUEwtPm9wdGlvbnNPYmplY3QoY29yZShvbyksIGNv
cmUob29vKSk7Cit9CisKIC0gKHZvaWQpbWV0aG9kV2l0aEV4Y2VwdGlvbgogewogICAgIFdlYkNv
cmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvYmlu
ZGluZ3Mvc2NyaXB0cy90ZXN0L1Rlc3RPYmouaWRsIGIvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRz
L3Rlc3QvVGVzdE9iai5pZGwKaW5kZXggNTM3NTM0Yi4uYzBkMGU4OCAxMDA2NDQKLS0tIGEvV2Vi
Q29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVGVzdE9iai5pZGwKKysrIGIvV2ViQ29yZS9iaW5k
aW5ncy9zY3JpcHRzL3Rlc3QvVGVzdE9iai5pZGwKQEAgLTc0LDYgKzc0LDcgQEAgbW9kdWxlIHRl
c3QgewogCiAgICAgICAgIHZvaWQgc2VyaWFsaXplZFZhbHVlKGluIFNlcmlhbGl6ZWRTY3JpcHRW
YWx1ZSBzZXJpYWxpemVkQXJnKTsKICAgICAgICAgdm9pZCBpZGJLZXkoaW4gSURCS2V5IGtleSk7
CisgICAgICAgIHZvaWQgb3B0aW9uc09iamVjdChpbiBPcHRpb25zT2JqZWN0IG9vLCBpbiBbT3B0
aW9uYWxdIE9wdGlvbnNPYmplY3Qgb29vKTsKIAogICAgICAgICAvLyBFeGNlcHRpb25zCiAgICAg
ICAgIHZvaWQgbWV0aG9kV2l0aEV4Y2VwdGlvbigpIHJhaXNlcyhET01FeGNlcHRpb24pOwpkaWZm
IC0tZ2l0IGEvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0TWVkaWFRdWVy
eUxpc3RMaXN0ZW5lci5jcHAgYi9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRl
c3RNZWRpYVF1ZXJ5TGlzdExpc3RlbmVyLmNwcAppbmRleCBmMWM0ZTJiLi5hYjllNmRiIDEwMDY0
NAotLS0gYS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRlc3RNZWRpYVF1ZXJ5
TGlzdExpc3RlbmVyLmNwcAorKysgYi9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9W
OFRlc3RNZWRpYVF1ZXJ5TGlzdExpc3RlbmVyLmNwcApAQCAtNTcsNyArNTcsNyBAQCBzdGF0aWMg
djg6OlBlcnNpc3RlbnQ8djg6OkZ1bmN0aW9uVGVtcGxhdGU+IENvbmZpZ3VyZVY4VGVzdE1lZGlh
UXVlcnlMaXN0TGlzdGVuZQogewogICAgIHY4OjpMb2NhbDx2ODo6U2lnbmF0dXJlPiBkZWZhdWx0
U2lnbmF0dXJlID0gY29uZmlndXJlVGVtcGxhdGUoZGVzYywgIlRlc3RNZWRpYVF1ZXJ5TGlzdExp
c3RlbmVyIiwgdjg6OlBlcnNpc3RlbnQ8djg6OkZ1bmN0aW9uVGVtcGxhdGU+KCksIFY4VGVzdE1l
ZGlhUXVlcnlMaXN0TGlzdGVuZXI6OmludGVybmFsRmllbGRDb3VudCwKICAgICAgICAgMCwgMCwK
LSAgICAgICAgVGVzdE1lZGlhUXVlcnlMaXN0TGlzdGVuZXJDYWxsYmFja3MsIHNpemVvZihUZXN0
TWVkaWFRdWVyeUxpc3RMaXN0ZW5lckNhbGxiYWNrcykgLyBzaXplb2YoKlRlc3RNZWRpYVF1ZXJ5
TGlzdExpc3RlbmVyQ2FsbGJhY2tzKSk7CisgICAgICAgIFRlc3RNZWRpYVF1ZXJ5TGlzdExpc3Rl
bmVyQ2FsbGJhY2tzLCBXVEZfQVJSQVlfTEVOR1RIKFRlc3RNZWRpYVF1ZXJ5TGlzdExpc3RlbmVy
Q2FsbGJhY2tzKSk7CiAgICAgdjg6OkxvY2FsPHY4OjpPYmplY3RUZW1wbGF0ZT4gaW5zdGFuY2Ug
PSBkZXNjLT5JbnN0YW5jZVRlbXBsYXRlKCk7CiAgICAgdjg6OkxvY2FsPHY4OjpPYmplY3RUZW1w
bGF0ZT4gcHJvdG8gPSBkZXNjLT5Qcm90b3R5cGVUZW1wbGF0ZSgpOwogICAgIApkaWZmIC0tZ2l0
IGEvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0T2JqLmNwcCBiL1dlYkNv
cmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdE9iai5jcHAKaW5kZXggYzRhNzZhYy4u
ZTA2ZDNmMiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhU
ZXN0T2JqLmNwcAorKysgYi9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRlc3RP
YmouY3BwCkBAIC0yNSw2ICsyNSw3IEBACiAjaW5jbHVkZSAiSFRNTE5hbWVzLmgiCiAjaW5jbHVk
ZSAiSURCQmluZGluZ1V0aWxpdGllcy5oIgogI2luY2x1ZGUgIklEQktleS5oIgorI2luY2x1ZGUg
Ik9wdGlvbnNPYmplY3QuaCIKICNpbmNsdWRlICJSdW50aW1lRW5hYmxlZEZlYXR1cmVzLmgiCiAj
aW5jbHVkZSAiU2NyaXB0QXJndW1lbnRzLmgiCiAjaW5jbHVkZSAiU2NyaXB0Q2FsbFN0YWNrLmgi
CkBAIC03MjcsNiArNzI4LDIwIEBAIHN0YXRpYyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gaWRiS2V5
Q2FsbGJhY2soY29uc3Qgdjg6OkFyZ3VtZW50cyYgYXJncykKICAgICByZXR1cm4gdjg6OkhhbmRs
ZTx2ODo6VmFsdWU+KCk7CiB9CiAKK3N0YXRpYyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gb3B0aW9u
c09iamVjdENhbGxiYWNrKGNvbnN0IHY4OjpBcmd1bWVudHMmIGFyZ3MpCit7CisgICAgSU5DX1NU
QVRTKCJET00uVGVzdE9iai5vcHRpb25zT2JqZWN0Iik7CisgICAgVGVzdE9iaiogaW1wID0gVjhU
ZXN0T2JqOjp0b05hdGl2ZShhcmdzLkhvbGRlcigpKTsKKyAgICBFWENFUFRJT05fQkxPQ0soT3B0
aW9uc09iamVjdCwgb28sIGFyZ3NbMF0pOworICAgIGlmIChhcmdzLkxlbmd0aCgpIDw9IDEpIHsK
KyAgICAgICAgaW1wLT5vcHRpb25zT2JqZWN0KG9vKTsKKyAgICAgICAgcmV0dXJuIHY4OjpIYW5k
bGU8djg6OlZhbHVlPigpOworICAgIH0KKyAgICBFWENFUFRJT05fQkxPQ0soT3B0aW9uc09iamVj
dCwgb29vLCBhcmdzWzFdKTsKKyAgICBpbXAtPm9wdGlvbnNPYmplY3Qob28sIG9vbyk7CisgICAg
cmV0dXJuIHY4OjpIYW5kbGU8djg6OlZhbHVlPigpOworfQorCiBzdGF0aWMgdjg6OkhhbmRsZTx2
ODo6VmFsdWU+IG1ldGhvZFdpdGhFeGNlcHRpb25DYWxsYmFjayhjb25zdCB2ODo6QXJndW1lbnRz
JiBhcmdzKQogewogICAgIElOQ19TVEFUUygiRE9NLlRlc3RPYmoubWV0aG9kV2l0aEV4Y2VwdGlv
biIpOwpAQCAtMTIwMSw2ICsxMjE2LDcgQEAgc3RhdGljIGNvbnN0IEJhdGNoZWRDYWxsYmFjayBU
ZXN0T2JqQ2FsbGJhY2tzW10gPSB7CiAgICAgeyJvYmpNZXRob2QiLCBUZXN0T2JqSW50ZXJuYWw6
Om9iak1ldGhvZENhbGxiYWNrfSwKICAgICB7InNlcmlhbGl6ZWRWYWx1ZSIsIFRlc3RPYmpJbnRl
cm5hbDo6c2VyaWFsaXplZFZhbHVlQ2FsbGJhY2t9LAogICAgIHsiaWRiS2V5IiwgVGVzdE9iaklu
dGVybmFsOjppZGJLZXlDYWxsYmFja30sCisgICAgeyJvcHRpb25zT2JqZWN0IiwgVGVzdE9iaklu
dGVybmFsOjpvcHRpb25zT2JqZWN0Q2FsbGJhY2t9LAogICAgIHsibWV0aG9kV2l0aEV4Y2VwdGlv
biIsIFRlc3RPYmpJbnRlcm5hbDo6bWV0aG9kV2l0aEV4Y2VwdGlvbkNhbGxiYWNrfSwKICAgICB7
ImN1c3RvbU1ldGhvZCIsIFY4VGVzdE9iajo6Y3VzdG9tTWV0aG9kQ2FsbGJhY2t9LAogICAgIHsi
Y3VzdG9tTWV0aG9kV2l0aEFyZ3MiLCBWOFRlc3RPYmo6OmN1c3RvbU1ldGhvZFdpdGhBcmdzQ2Fs
bGJhY2t9LApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9iaW5kaW5ncy92OC9PcHRpb25zT2JqZWN0LmNw
cCBiL1dlYkNvcmUvYmluZGluZ3MvdjgvT3B0aW9uc09iamVjdC5jcHAKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMC4uZGRlNTExYQotLS0gL2Rldi9udWxsCisrKyBiL1dlYkNvcmUv
YmluZGluZ3MvdjgvT3B0aW9uc09iamVjdC5jcHAKQEAgLTAsMCArMSwxMDIgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFO
RCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAor
ICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
T1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04g
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisj
aW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiT3B0aW9uc09iamVjdC5oIgorI2luY2x1ZGUg
IlY4QmluZGluZy5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK09wdGlvbnNPYmplY3Q6Ok9w
dGlvbnNPYmplY3QoKQoreworfQorCitPcHRpb25zT2JqZWN0OjpPcHRpb25zT2JqZWN0KGNvbnN0
IHY4OjpMb2NhbDx2ODo6VmFsdWU+JiBvcHRpb25zKQorICAgIDogbV9vcHRpb25zKG9wdGlvbnMp
Cit7Cit9CisKK09wdGlvbnNPYmplY3Q6On5PcHRpb25zT2JqZWN0KCkKK3sKK30KKworT3B0aW9u
c09iamVjdCYgT3B0aW9uc09iamVjdDo6b3BlcmF0b3I9KGNvbnN0IE9wdGlvbnNPYmplY3QmIG9w
dGlvbnNPYmplY3QpCit7CisgICAgbV9vcHRpb25zID0gb3B0aW9uc09iamVjdC5tX29wdGlvbnM7
CisgICAgcmV0dXJuICp0aGlzOworfQorCitib29sIE9wdGlvbnNPYmplY3Q6OmlzVW5kZWZpbmVk
T3JOdWxsKCkgY29uc3QKK3sKKyAgICBpZiAobV9vcHRpb25zLklzRW1wdHkoKSkKKyAgICAgICAg
cmV0dXJuIHRydWU7CisgICAgcmV0dXJuIFdlYkNvcmU6OmlzVW5kZWZpbmVkT3JOdWxsKG1fb3B0
aW9ucyk7Cit9CisKK2Jvb2wgT3B0aW9uc09iamVjdDo6Z2V0S2V5Qm9vbChjb25zdCBTdHJpbmcm
IGtleSwgYm9vbCYgdmFsdWUpIGNvbnN0Cit7CisgICAgdjg6OkxvY2FsPHY4OjpWYWx1ZT4gdjhW
YWx1ZTsKKyAgICBpZiAoIWdldEtleShrZXksIHY4VmFsdWUpKQorICAgICAgICByZXR1cm4gZmFs
c2U7CisKKyAgICBpZiAoIXY4VmFsdWUtPklzQm9vbGVhbigpKQorICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgdjg6OkxvY2FsPHY4OjpCb29sZWFuPiB2OEJvb2wgPSB2OFZhbHVlLT5Ub0Jvb2xl
YW4oKTsKKyAgICBBU1NFUlQoIXY4Qm9vbC5Jc0VtcHR5KCkpOworCisgICAgdmFsdWUgPSB2OEJv
b2wtPlZhbHVlKCk7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgT3B0aW9uc09iamVjdDo6
Z2V0S2V5U3RyaW5nKGNvbnN0IFN0cmluZyYga2V5LCBTdHJpbmcmIHZhbHVlKSBjb25zdAorewor
ICAgIHY4OjpMb2NhbDx2ODo6VmFsdWU+IHY4VmFsdWU7CisgICAgaWYgKCFnZXRLZXkoa2V5LCB2
OFZhbHVlKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgaWYgKCF2OFZhbHVlLT5Jc1N0
cmluZygpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICB2YWx1ZSA9IHY4VmFsdWVUb1dl
YkNvcmVTdHJpbmcodjhWYWx1ZSk7CisgICAgQVNTRVJUKCF2YWx1ZS5pc0VtcHR5KCkpOworICAg
IHJldHVybiB0cnVlOworfQorCitib29sIE9wdGlvbnNPYmplY3Q6OmdldEtleShjb25zdCBTdHJp
bmcmIGtleSwgdjg6OkxvY2FsPHY4OjpWYWx1ZT4mIHZhbHVlKSBjb25zdAoreworICAgIGlmIChp
c1VuZGVmaW5lZE9yTnVsbCgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgdjg6OkxvY2Fs
PHY4OjpPYmplY3Q+IG9wdGlvbnMgPSBtX29wdGlvbnMtPlRvT2JqZWN0KCk7CisgICAgQVNTRVJU
KCFvcHRpb25zLklzRW1wdHkoKSk7CisKKyAgICB2ODo6SGFuZGxlPHY4OjpTdHJpbmc+IHY4S2V5
ID0gdjhTdHJpbmcoa2V5KTsKKyAgICBpZiAoIW9wdGlvbnMtPkhhcyh2OEtleSkpCisgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICB2YWx1ZSA9IG9wdGlvbnMtPkdldCh2OEtleSk7CisgICAgQVNT
RVJUKCF2YWx1ZS5Jc0VtcHR5KCkpOworICAgIHJldHVybiB0cnVlOworfQorCit9IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9XZWJDb3JlL2JpbmRpbmdzL3Y4L09wdGlvbnNPYmpl
Y3QuaCBiL1dlYkNvcmUvYmluZGluZ3MvdjgvT3B0aW9uc09iamVjdC5oCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRlMmY4MjEKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJDb3Jl
L2JpbmRpbmdzL3Y4L09wdGlvbnNPYmplY3QuaApAQCAtMCwwICsxLDYwIEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQg
SVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAq
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9S
IElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
CisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lm
bmRlZiBPcHRpb25zT2JqZWN0X2gKKyNkZWZpbmUgT3B0aW9uc09iamVjdF9oCisKKyNpbmNsdWRl
ICJQbGF0Zm9ybVN0cmluZy5oIgorI2luY2x1ZGUgPHY4Lmg+CisjaW5jbHVkZSA8d3RmL05vbkNv
cHlhYmxlLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgT3B0aW9uc09iamVjdCB7
CitwdWJsaWM6CisgICAgT3B0aW9uc09iamVjdCgpOworICAgIE9wdGlvbnNPYmplY3QoY29uc3Qg
djg6OkxvY2FsPHY4OjpWYWx1ZT4mIG9wdGlvbnMpOworICAgIH5PcHRpb25zT2JqZWN0KCk7CisK
KyAgICBPcHRpb25zT2JqZWN0JiBvcGVyYXRvcj0oY29uc3QgT3B0aW9uc09iamVjdCYpOworCisg
ICAgYm9vbCBpc1VuZGVmaW5lZE9yTnVsbCgpIGNvbnN0OworICAgIGJvb2wgZ2V0S2V5Qm9vbChj
b25zdCBTdHJpbmcmIGtleSwgYm9vbCYgdmFsdWUpIGNvbnN0OworICAgIGJvb2wgZ2V0S2V5U3Ry
aW5nKGNvbnN0IFN0cmluZyYga2V5LCBTdHJpbmcmIHZhbHVlKSBjb25zdDsKKworcHJpdmF0ZToK
KyAgICBib29sIGdldEtleShjb25zdCBTdHJpbmcmIGtleSwgdjg6OkxvY2FsPHY4OjpWYWx1ZT4m
KSBjb25zdDsKKworICAgIC8vIFRoaXMgb2JqZWN0IGNhbiBvbmx5IGJlIHVzZWQgc2FmZWx5IHdo
ZW4gc3RhY2sgYWxsb2NhdGVkIGJlY2F1c2Ugb2Ygdjg6OkxvY2FsLgorICAgIHN0YXRpYyB2b2lk
KiBvcGVyYXRvciBuZXcoc2l6ZV90KTsKKyAgICBzdGF0aWMgdm9pZCogb3BlcmF0b3IgbmV3W10o
c2l6ZV90KTsKKyAgICBzdGF0aWMgdm9pZCBvcGVyYXRvciBkZWxldGUodm9pZCAqKTsKKworICAg
IHY4OjpMb2NhbDx2ODo6VmFsdWU+IG1fb3B0aW9uczsKK307CisKK30KKworI2VuZGlmIC8vIE9w
dGlvbnNPYmplY3RfaApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9zdG9yYWdlL0lEQkRhdGFiYXNlLmNw
cCBiL1dlYkNvcmUvc3RvcmFnZS9JREJEYXRhYmFzZS5jcHAKaW5kZXggMTUzNmJhNy4uNzJmZjE3
ZCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9zdG9yYWdlL0lEQkRhdGFiYXNlLmNwcAorKysgYi9XZWJD
b3JlL3N0b3JhZ2UvSURCRGF0YWJhc2UuY3BwCkBAIC01NiwxMyArNTYsMTkgQEAgdm9pZCBJREJE
YXRhYmFzZTo6c2V0U2V0VmVyc2lvblRyYW5zYWN0aW9uKElEQlRyYW5zYWN0aW9uQmFja2VuZElu
dGVyZmFjZSogdHJhbnMKICAgICBtX3NldFZlcnNpb25UcmFuc2FjdGlvbiA9IHRyYW5zYWN0aW9u
OwogfQogCi1QYXNzUmVmUHRyPElEQk9iamVjdFN0b3JlPiBJREJEYXRhYmFzZTo6Y3JlYXRlT2Jq
ZWN0U3RvcmUoY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBTdHJpbmcmIGtleVBhdGgsIGJvb2wg
YXV0b0luY3JlbWVudCwgRXhjZXB0aW9uQ29kZSYgZWMpCitQYXNzUmVmUHRyPElEQk9iamVjdFN0
b3JlPiBJREJEYXRhYmFzZTo6Y3JlYXRlT2JqZWN0U3RvcmUoY29uc3QgU3RyaW5nJiBuYW1lLCBj
b25zdCBPcHRpb25zT2JqZWN0JiBvcHRpb25zLCBFeGNlcHRpb25Db2RlJiBlYykKIHsKICAgICBp
ZiAoIW1fc2V0VmVyc2lvblRyYW5zYWN0aW9uKSB7CiAgICAgICAgIGVjID0gSURCRGF0YWJhc2VF
eGNlcHRpb246Ok5PVF9BTExPV0VEX0VSUjsKICAgICAgICAgcmV0dXJuIDA7CiAgICAgfQogCisg
ICAgU3RyaW5nIGtleVBhdGg7CisgICAgb3B0aW9ucy5nZXRLZXlTdHJpbmcoImtleVBhdGgiLCBr
ZXlQYXRoKTsKKyAgICBib29sIGF1dG9JbmNyZW1lbnQgPSBmYWxzZTsKKyAgICBvcHRpb25zLmdl
dEtleUJvb2woImF1dG9JbmNyZW1lbnQiLCBhdXRvSW5jcmVtZW50KTsKKyAgICAvLyBGSVhNRTog
TG9vayB1cCBldmljdGFibGUgYW5kIHBhc3MgdGhhdCBvbiBhcyB3ZWxsLgorCiAgICAgUmVmUHRy
PElEQk9iamVjdFN0b3JlQmFja2VuZEludGVyZmFjZT4gb2JqZWN0U3RvcmUgPSBtX2JhY2tlbmQt
PmNyZWF0ZU9iamVjdFN0b3JlKG5hbWUsIGtleVBhdGgsIGF1dG9JbmNyZW1lbnQsIG1fc2V0VmVy
c2lvblRyYW5zYWN0aW9uLmdldCgpLCBlYyk7CiAgICAgaWYgKCFvYmplY3RTdG9yZSkgewogICAg
ICAgICAvLyBGSVhNRTogQVNTRVJUKGVjKSBvbmNlIFVOS05PV05fRVJSIGlzIG5vdCAwLgpkaWZm
IC0tZ2l0IGEvV2ViQ29yZS9zdG9yYWdlL0lEQkRhdGFiYXNlLmggYi9XZWJDb3JlL3N0b3JhZ2Uv
SURCRGF0YWJhc2UuaAppbmRleCBkZjU2ZjQ2Li4zZTMzNDcyIDEwMDY0NAotLS0gYS9XZWJDb3Jl
L3N0b3JhZ2UvSURCRGF0YWJhc2UuaAorKysgYi9XZWJDb3JlL3N0b3JhZ2UvSURCRGF0YWJhc2Uu
aApAQCAtMzEsNiArMzEsNyBAQAogI2luY2x1ZGUgIklEQkRhdGFiYXNlQmFja2VuZEludGVyZmFj
ZS5oIgogI2luY2x1ZGUgIklEQk9iamVjdFN0b3JlLmgiCiAjaW5jbHVkZSAiSURCVHJhbnNhY3Rp
b24uaCIKKyNpbmNsdWRlICJPcHRpb25zT2JqZWN0LmgiCiAjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQ
dHIuaD4KICNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgogI2luY2x1ZGUgPHd0Zi9SZWZQdHIu
aD4KQEAgLTU5LDEzICs2MCwxMiBAQCBwdWJsaWM6CiAgICAgUGFzc1JlZlB0cjxET01TdHJpbmdM
aXN0PiBvYmplY3RTdG9yZXMoKSBjb25zdCB7IHJldHVybiBtX2JhY2tlbmQtPm9iamVjdFN0b3Jl
cygpOyB9CiAKICAgICAvLyBGSVhNRTogVHJ5IHRvIG1vZGlmeSB0aGUgY29kZSBnZW5lcmF0b3Ig
c28gdGhpcyBpcyB1bm5lZWRlZC4KLSAgICBQYXNzUmVmUHRyPElEQk9iamVjdFN0b3JlPiBjcmVh
dGVPYmplY3RTdG9yZShjb25zdCBTdHJpbmcmIG5hbWUsIEV4Y2VwdGlvbkNvZGUmIGVjKSB7IHJl
dHVybiBjcmVhdGVPYmplY3RTdG9yZShuYW1lLCBTdHJpbmcoKSwgZWMpOyB9Ci0gICAgUGFzc1Jl
ZlB0cjxJREJPYmplY3RTdG9yZT4gY3JlYXRlT2JqZWN0U3RvcmUoY29uc3QgU3RyaW5nJiBuYW1l
LCBjb25zdCBTdHJpbmcmIGtleVBhdGgsIEV4Y2VwdGlvbkNvZGUmIGVjKSB7IHJldHVybiBjcmVh
dGVPYmplY3RTdG9yZShuYW1lLCBrZXlQYXRoLCBmYWxzZSwgZWMpOyB9CisgICAgUGFzc1JlZlB0
cjxJREJPYmplY3RTdG9yZT4gY3JlYXRlT2JqZWN0U3RvcmUoY29uc3QgU3RyaW5nJiBuYW1lLCBF
eGNlcHRpb25Db2RlJiBlYykgeyByZXR1cm4gY3JlYXRlT2JqZWN0U3RvcmUobmFtZSwgT3B0aW9u
c09iamVjdCgpLCBlYyk7IH0KICAgICBQYXNzUmVmUHRyPElEQlRyYW5zYWN0aW9uPiB0cmFuc2Fj
dGlvbihTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBFeGNlcHRpb25Db2RlJiBlYykg
eyByZXR1cm4gdHJhbnNhY3Rpb24oY29udGV4dCwgMCwgZWMpOyB9CiAgICAgUGFzc1JlZlB0cjxJ
REJUcmFuc2FjdGlvbj4gdHJhbnNhY3Rpb24oU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4
dCwgRE9NU3RyaW5nTGlzdCogc3RvcmVOYW1lcywgRXhjZXB0aW9uQ29kZSYgZWMpIHsgcmV0dXJu
IHRyYW5zYWN0aW9uKGNvbnRleHQsIHN0b3JlTmFtZXMsIElEQlRyYW5zYWN0aW9uOjpSRUFEX09O
TFksIGVjKTsgfQogICAgIFBhc3NSZWZQdHI8SURCVHJhbnNhY3Rpb24+IHRyYW5zYWN0aW9uKFNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIERPTVN0cmluZ0xpc3QqIHN0b3JlTmFtZXMs
IHVuc2lnbmVkIHNob3J0IG1vZGUsIEV4Y2VwdGlvbkNvZGUmIGVjKSB7IHJldHVybiB0cmFuc2Fj
dGlvbihjb250ZXh0LCBzdG9yZU5hbWVzLCBtb2RlLCAwLCBlYyk7IH0gLy8gRklYTUU6IHdoYXQg
c2hvdWxkIHRoZSBkZWZhdWx0IHRpbWVvdXQgYmU/CiAKLSAgICBQYXNzUmVmUHRyPElEQk9iamVj
dFN0b3JlPiBjcmVhdGVPYmplY3RTdG9yZShjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cmlu
ZyYga2V5UGF0aCwgYm9vbCBhdXRvSW5jcmVtZW50LCBFeGNlcHRpb25Db2RlJik7CisgICAgUGFz
c1JlZlB0cjxJREJPYmplY3RTdG9yZT4gY3JlYXRlT2JqZWN0U3RvcmUoY29uc3QgU3RyaW5nJiBu
YW1lLCBjb25zdCBPcHRpb25zT2JqZWN0JiwgRXhjZXB0aW9uQ29kZSYpOwogICAgIHZvaWQgcmVt
b3ZlT2JqZWN0U3RvcmUoY29uc3QgU3RyaW5nJiBuYW1lLCBFeGNlcHRpb25Db2RlJik7CiAgICAg
UGFzc1JlZlB0cjxJREJSZXF1ZXN0PiBzZXRWZXJzaW9uKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQq
LCBjb25zdCBTdHJpbmcmIHZlcnNpb24sIEV4Y2VwdGlvbkNvZGUmKTsKICAgICBQYXNzUmVmUHRy
PElEQlRyYW5zYWN0aW9uPiB0cmFuc2FjdGlvbihTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgRE9N
U3RyaW5nTGlzdCosIHVuc2lnbmVkIHNob3J0IG1vZGUsIHVuc2lnbmVkIGxvbmcgdGltZW91dCwg
RXhjZXB0aW9uQ29kZSYpOwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9zdG9yYWdlL0lEQkRhdGFiYXNl
LmlkbCBiL1dlYkNvcmUvc3RvcmFnZS9JREJEYXRhYmFzZS5pZGwKaW5kZXggMWFiNWIwYi4uYjA4
ZDQ1OSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9zdG9yYWdlL0lEQkRhdGFiYXNlLmlkbAorKysgYi9X
ZWJDb3JlL3N0b3JhZ2UvSURCRGF0YWJhc2UuaWRsCkBAIC0zMiw3ICszMiw3IEBAIG1vZHVsZSBz
dG9yYWdlIHsKICAgICAgICAgcmVhZG9ubHkgYXR0cmlidXRlIERPTVN0cmluZyB2ZXJzaW9uOwog
ICAgICAgICByZWFkb25seSBhdHRyaWJ1dGUgRE9NU3RyaW5nTGlzdCBvYmplY3RTdG9yZXM7CiAK
LSAgICAgICAgSURCT2JqZWN0U3RvcmUgY3JlYXRlT2JqZWN0U3RvcmUoaW4gRE9NU3RyaW5nIG5h
bWUsIGluIFtPcHRpb25hbCwgQ29udmVydE51bGxUb051bGxTdHJpbmddIERPTVN0cmluZyBrZXlQ
YXRoLCBpbiBbT3B0aW9uYWxdIGJvb2xlYW4gYXV0b0luY3JlbWVudCkKKyAgICAgICAgSURCT2Jq
ZWN0U3RvcmUgY3JlYXRlT2JqZWN0U3RvcmUoaW4gRE9NU3RyaW5nIG5hbWUsIGluIFtPcHRpb25h
bF0gT3B0aW9uc09iamVjdCBvcHRpb25zKQogICAgICAgICAgICAgcmFpc2VzIChJREJEYXRhYmFz
ZUV4Y2VwdGlvbik7CiAgICAgICAgIHZvaWQgcmVtb3ZlT2JqZWN0U3RvcmUoaW4gRE9NU3RyaW5n
IG5hbWUpCiAgICAgICAgICAgICByYWlzZXMgKElEQkRhdGFiYXNlRXhjZXB0aW9uKTsKZGlmZiAt
LWdpdCBhL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cgYi9XZWJLaXQvY2hyb21pdW0vQ2hhbmdl
TG9nCmluZGV4IDkxMmFiN2YuLmE3NDQ5YzUgMTAwNjQ0Ci0tLSBhL1dlYktpdC9jaHJvbWl1bS9D
aGFuZ2VMb2cKKysrIGIvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwpAQCAtMSwzICsxLDIyIEBA
CisyMDEwLTExLTI1ICBKZXJlbXkgT3Jsb3cgIDxqb3Jsb3dAY2hyb21pdW0ub3JnPgorCisgICAg
ICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFkZCBleGNlcHRpb24g
Y29kZSB0byBXZWJJREJUcmFuc2FjdGlvbjo6b2JqZWN0U3RvcmUKKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTUwMDMwCisKKyAgICAgICAgKiBwdWJsaWMv
V2ViSURCVHJhbnNhY3Rpb24uaDoKKyAgICAgICAgKFdlYktpdDo6V2ViSURCVHJhbnNhY3Rpb246
Om9iamVjdFN0b3JlKToKKworMjAxMC0xMS0yNSAgSmVyZW15IE9ybG93ICA8am9ybG93QGNocm9t
aXVtLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICBOZWVkIGEgc2hvcnQgZGVzY3JpcHRpb24gYW5kIGJ1ZyBVUkwgKE9PUFMhKQorCisgICAgICAg
ICogcHVibGljL1dlYklEQlRyYW5zYWN0aW9uLmg6CisgICAgICAgIChXZWJLaXQ6OldlYklEQlRy
YW5zYWN0aW9uOjpvYmplY3RTdG9yZSk6CisKIDIwMTAtMTEtMjQgIFNhdGlzaCBTYW1wYXRoICA8
c2F0aXNoQGNocm9taXVtLm9yZz4KIAogICAgICAgICBSZXZpZXdlZCBieSBTdGV2ZSBCbG9jay4K
ZGlmZiAtLWdpdCBhL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViSURCVHJhbnNhY3Rpb24uaCBi
L1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViSURCVHJhbnNhY3Rpb24uaAppbmRleCBlNzVkZTNj
Li41ODRiNjdhIDEwMDY0NAotLS0gYS9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYklEQlRyYW5z
YWN0aW9uLmgKKysrIGIvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJJREJUcmFuc2FjdGlvbi5o
CkBAIC0yNiw2ICsyNiw3IEBACiAjaWZuZGVmIFdlYklEQlRyYW5zYWN0aW9uX2gKICNkZWZpbmUg
V2ViSURCVHJhbnNhY3Rpb25faAogCisjaW5jbHVkZSAiV2ViRXhjZXB0aW9uQ29kZS5oIgogI2lu
Y2x1ZGUgIldlYlN0cmluZy5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7IGNsYXNzIElEQlRyYW5z
YWN0aW9uQmFja2VuZEludGVyZmFjZTsgfQpAQCAtNDUsMTAgKzQ2LDE1IEBAIHB1YmxpYzoKICAg
ICAgICAgV0VCS0lUX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICByZXR1cm4gMDsKICAg
ICB9CisgICAgdmlydHVhbCBXZWJJREJPYmplY3RTdG9yZSogb2JqZWN0U3RvcmUoY29uc3QgV2Vi
U3RyaW5nJiBuYW1lLCBXZWJFeGNlcHRpb25Db2RlJikKKyAgICB7CisgICAgICAgIHJldHVybiBv
YmplY3RTdG9yZShuYW1lKTsKKyAgICB9CisgICAgLy8gRklYTUU6IFJlbW92ZSB0aGlzIGFmdGVy
IFdlYktpdCByb2xsLgogICAgIHZpcnR1YWwgV2ViSURCT2JqZWN0U3RvcmUqIG9iamVjdFN0b3Jl
KGNvbnN0IFdlYlN0cmluZyYgbmFtZSkKICAgICB7Ci0gICAgICAgIFdFQktJVF9BU1NFUlRfTk9U
X1JFQUNIRUQoKTsKLSAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIFdlYkV4Y2VwdGlvbkNvZGUg
ZWM7CisgICAgICAgIHJldHVybiBvYmplY3RTdG9yZShuYW1lLCBlYyk7CiAgICAgfQogICAgIHZp
cnR1YWwgdm9pZCBhYm9ydCgpIHsgV0VCS0lUX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOyB9CiAgICAg
dmlydHVhbCB2b2lkIGRpZENvbXBsZXRlVGFza0V2ZW50cygpIHsgV0VCS0lUX0FTU0VSVF9OT1Rf
UkVBQ0hFRCgpOyB9Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>74853</attachid>
            <date>2010-11-25 04:05:55 -0800</date>
            <delta_ts>2010-11-25 04:57:14 -0800</delta_ts>
            <desc>even better</desc>
            <filename>a</filename>
            <type>text/plain</type>
            <size>38535</size>
            <attacher name="Jeremy Orlow">jorlow</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxv
ZwppbmRleCA2YjVmNzU5Li4xNzI0MDI4IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VM
b2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTQgQEAKKzIwMTAtMTEt
MjUgIEplcmVteSBPcmxvdyAgPGpvcmxvd0BjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQWRkIGFuIE9wdGlvbnNPYmplY3QgY2xh
c3MgZm9yIEluZGV4ZWREQiAoYW5kIGxhdGVyIEdlb2xvY2F0aW9uKQorICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTAwMzAKKworICAgICAgICAqIHN0b3Jh
Z2UvaW5kZXhlZGRiL2NyZWF0ZS1vYmplY3Qtc3RvcmUtb3B0aW9ucy1leHBlY3RlZC50eHQ6IEFk
ZGVkLgorICAgICAgICAqIHN0b3JhZ2UvaW5kZXhlZGRiL2NyZWF0ZS1vYmplY3Qtc3RvcmUtb3B0
aW9ucy5odG1sOiBBZGRlZC4KKyAgICAgICAgKiBzdG9yYWdlL2luZGV4ZWRkYi90dXRvcmlhbC5o
dG1sOgorCiAyMDEwLTExLTIzICBKZXJlbXkgT3Jsb3cgIDxqb3Jsb3dAY2hyb21pdW0ub3JnPgog
CiAgICAgICAgIFJldmlld2VkIGJ5IFN0ZXZlIEJsb2NrLgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVz
dHMvc3RvcmFnZS9pbmRleGVkZGIvY3JlYXRlLW9iamVjdC1zdG9yZS1vcHRpb25zLWV4cGVjdGVk
LnR4dCBiL0xheW91dFRlc3RzL3N0b3JhZ2UvaW5kZXhlZGRiL2NyZWF0ZS1vYmplY3Qtc3RvcmUt
b3B0aW9ucy1leHBlY3RlZC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4u
YWVjMzgxZgotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL3N0b3JhZ2UvaW5kZXhlZGRi
L2NyZWF0ZS1vYmplY3Qtc3RvcmUtb3B0aW9ucy1leHBlY3RlZC50eHQKQEAgLTAsMCArMSwyOSBA
QAorVGVzdCBJbmRleGVkREIncyBjcmVhdGVPYmplY3RTdG9yZSdzIHZhcmlvdXMgb3B0aW9ucwor
CitPbiBzdWNjZXNzLCB5b3Ugd2lsbCBzZWUgYSBzZXJpZXMgb2YgIlBBU1MiIG1lc3NhZ2VzLCBm
b2xsb3dlZCBieSAiVEVTVCBDT01QTEVURSIuCisKKworUEFTUyAnd2Via2l0SW5kZXhlZERCJyBp
biB3aW5kb3cgaXMgdHJ1ZQorUEFTUyB3ZWJraXRJbmRleGVkREIgPT0gbnVsbCBpcyBmYWxzZQor
d2Via2l0SW5kZXhlZERCLm9wZW4oJ25hbWUnLCAnZGVzY3JpcHRpb24nKQorUEFTUyAnb25zdWNj
ZXNzJyBpbiByZXN1bHQgaXMgdHJ1ZQorUEFTUyAnb25lcnJvcicgaW4gcmVzdWx0IGlzIHRydWUK
K1BBU1MgJ3JlYWR5U3RhdGUnIGluIHJlc3VsdCBpcyB0cnVlCitBbiBldmVudCBzaG91bGQgZmly
ZSBzaG9ydGx5Li4uCisKK2RiID0gZXZlbnQucmVzdWx0CityZXN1bHQgPSBkYi5zZXRWZXJzaW9u
KCd2ZXJzaW9uIDEnKQorRGVsZXRlZCBhbGwgb2JqZWN0IHN0b3Jlcy4KK2RiLmNyZWF0ZU9iamVj
dFN0b3JlKCdhJywge2tleVBhdGg6ICdhJ30pCitkYi5jcmVhdGVPYmplY3RTdG9yZSgnYicpCit0
cmFucyA9IGRiLnRyYW5zYWN0aW9uKFtdLCB3ZWJraXRJREJUcmFuc2FjdGlvbi5SRUFEX1dSSVRF
KQordHJhbnMub2JqZWN0U3RvcmUoJ2EnKS5wdXQoeydhJzogMH0pCit0cmFucy5vYmplY3RTdG9y
ZSgnYicpLnB1dCh7J2EnOiAwfSwgMCkKK3RyYW5zLm9iamVjdFN0b3JlKCdhJykuZ2V0KDApCitQ
QVNTIGV2ZW50LnJlc3VsdC5hIGlzIHthOiAwfQordHJhbnMub2JqZWN0U3RvcmUoJ2InKS5nZXQo
MCkKK1BBU1MgZXZlbnQucmVzdWx0LmEgaXMge2E6IDB9CitQQVNTIHN1Y2Nlc3NmdWxseVBhcnNl
ZCBpcyB0cnVlCisKK1RFU1QgQ09NUExFVEUKKwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvc3Rv
cmFnZS9pbmRleGVkZGIvY3JlYXRlLW9iamVjdC1zdG9yZS1vcHRpb25zLmh0bWwgYi9MYXlvdXRU
ZXN0cy9zdG9yYWdlL2luZGV4ZWRkYi9jcmVhdGUtb2JqZWN0LXN0b3JlLW9wdGlvbnMuaHRtbApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMjhkMmQyCi0tLSAvZGV2L251bGwK
KysrIGIvTGF5b3V0VGVzdHMvc3RvcmFnZS9pbmRleGVkZGIvY3JlYXRlLW9iamVjdC1zdG9yZS1v
cHRpb25zLmh0bWwKQEAgLTAsMCArMSw5MCBAQAorPGh0bWw+Cis8aGVhZD4KKzxsaW5rIHJlbD0i
c3R5bGVzaGVldCIgaHJlZj0iLi4vLi4vZmFzdC9qcy9yZXNvdXJjZXMvanMtdGVzdC1zdHlsZS5j
c3MiPgorPHNjcmlwdCBzcmM9Ii4uLy4uL2Zhc3QvanMvcmVzb3VyY2VzL2pzLXRlc3QtcHJlLmpz
Ij48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIuLi8uLi9mYXN0L2pzL3Jlc291cmNlcy9qcy10ZXN0
LXBvc3QtZnVuY3Rpb24uanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9InJlc291cmNlcy9zaGFy
ZWQuanMiPjwvc2NyaXB0PgorPC9oZWFkPgorPGJvZHk+Cis8cCBpZD0iZGVzY3JpcHRpb24iPjwv
cD4KKzxkaXYgaWQ9ImNvbnNvbGUiPjwvZGl2PgorPHNjcmlwdD4KKworZGVzY3JpcHRpb24oIlRl
c3QgSW5kZXhlZERCJ3MgY3JlYXRlT2JqZWN0U3RvcmUncyB2YXJpb3VzIG9wdGlvbnMiKTsKK2lm
ICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpCisgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIu
d2FpdFVudGlsRG9uZSgpOworCitmdW5jdGlvbiB0ZXN0KCkKK3sKKyAgICBzaG91bGRCZVRydWUo
Iid3ZWJraXRJbmRleGVkREInIGluIHdpbmRvdyIpOworICAgIHNob3VsZEJlRmFsc2UoIndlYmtp
dEluZGV4ZWREQiA9PSBudWxsIik7CisKKyAgICByZXN1bHQgPSBldmFsQW5kTG9nKCJ3ZWJraXRJ
bmRleGVkREIub3BlbignbmFtZScsICdkZXNjcmlwdGlvbicpIik7CisgICAgdmVyaWZ5UmVzdWx0
KHJlc3VsdCk7CisgICAgcmVzdWx0Lm9uc3VjY2VzcyA9IG9wZW5TdWNjZXNzOworICAgIHJlc3Vs
dC5vbmVycm9yID0gdW5leHBlY3RlZEVycm9yQ2FsbGJhY2s7Cit9CisKK2Z1bmN0aW9uIG9wZW5T
dWNjZXNzKCkKK3sKKyAgICBkYiA9IGV2YWxBbmRMb2coImRiID0gZXZlbnQucmVzdWx0Iik7CisK
KyAgICByZXN1bHQgPSBldmFsQW5kTG9nKCJyZXN1bHQgPSBkYi5zZXRWZXJzaW9uKCd2ZXJzaW9u
IDEnKSIpOworICAgIHJlc3VsdC5vbnN1Y2Nlc3MgPSBjbGVhbkRhdGFiYXNlOworICAgIHJlc3Vs
dC5vbmVycm9yID0gdW5leHBlY3RlZEVycm9yQ2FsbGJhY2s7Cit9CisKK2Z1bmN0aW9uIGNsZWFu
RGF0YWJhc2UoKQoreworICAgIGRlbGV0ZUFsbE9iamVjdFN0b3JlcyhkYiwgY2xlYW5lZCk7Cit9
CisKK2Z1bmN0aW9uIGNsZWFuZWQoKQoreworICAgIGV2YWxBbmRMb2coImRiLmNyZWF0ZU9iamVj
dFN0b3JlKCdhJywge2tleVBhdGg6ICdhJ30pIik7CisgICAgZXZhbEFuZExvZygiZGIuY3JlYXRl
T2JqZWN0U3RvcmUoJ2InKSIpOworCisgICAgdHJhbnMgPSBldmFsQW5kTG9nKCJ0cmFucyA9IGRi
LnRyYW5zYWN0aW9uKFtdLCB3ZWJraXRJREJUcmFuc2FjdGlvbi5SRUFEX1dSSVRFKSIpOworCisg
ICAgcmVxID0gZXZhbEFuZExvZygidHJhbnMub2JqZWN0U3RvcmUoJ2EnKS5wdXQoeydhJzogMH0p
Iik7CisgICAgcmVxLm9uc3VjY2VzcyA9IHB1dEI7CisgICAgcmVxLm9uZXJyb3IgPSB1bmV4cGVj
dGVkRXJyb3JDYWxsYmFjazsKK30KKworZnVuY3Rpb24gcHV0QigpCit7CisgICAgcmVxID0gZXZh
bEFuZExvZygidHJhbnMub2JqZWN0U3RvcmUoJ2InKS5wdXQoeydhJzogMH0sIDApIik7ICAvLyBP
T1BTCisgICAgcmVxLm9uc3VjY2VzcyA9IGdldEE7CisgICAgcmVxLm9uZXJyb3IgPSB1bmV4cGVj
dGVkRXJyb3JDYWxsYmFjazsKK30KKworZnVuY3Rpb24gZ2V0QSgpCit7CisgICAgcmVxID0gZXZh
bEFuZExvZygidHJhbnMub2JqZWN0U3RvcmUoJ2EnKS5nZXQoMCkiKTsKKyAgICByZXEub25zdWNj
ZXNzID0gZ2V0QjsKKyAgICByZXEub25lcnJvciA9IHVuZXhwZWN0ZWRFcnJvckNhbGxiYWNrOwor
fQorCitmdW5jdGlvbiBnZXRCKCkKK3sKKyAgICBzaG91bGRCZSgiZXZlbnQucmVzdWx0LmEiLCAi
e2E6IDB9Iik7CisKKyAgICByZXEgPSBldmFsQW5kTG9nKCJ0cmFucy5vYmplY3RTdG9yZSgnYicp
LmdldCgwKSIpOworICAgIHJlcS5vbnN1Y2Nlc3MgPSBjaGVja0I7CisgICAgcmVxLm9uZXJyb3Ig
PSB1bmV4cGVjdGVkRXJyb3JDYWxsYmFjazsKK30KKworZnVuY3Rpb24gY2hlY2tCKCkKK3sKKyAg
ICBzaG91bGRCZSgiZXZlbnQucmVzdWx0LmEiLCAie2E6IDB9Iik7CisKKyAgICBkb25lKCk7Cit9
CisKK3ZhciBzdWNjZXNzZnVsbHlQYXJzZWQgPSB0cnVlOworCit0ZXN0KCk7CisKKzwvc2NyaXB0
PgorPC9ib2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvc3RvcmFnZS9pbmRl
eGVkZGIvdHV0b3JpYWwuaHRtbCBiL0xheW91dFRlc3RzL3N0b3JhZ2UvaW5kZXhlZGRiL3R1dG9y
aWFsLmh0bWwKaW5kZXggZGI5ZjJmYS4uMzU3ODg0OCAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMv
c3RvcmFnZS9pbmRleGVkZGIvdHV0b3JpYWwuaHRtbAorKysgYi9MYXlvdXRUZXN0cy9zdG9yYWdl
L2luZGV4ZWRkYi90dXRvcmlhbC5odG1sCkBAIC0xNTAsMTMgKzE1MCwyNSBAQCBmdW5jdGlvbiBv
blNldFZlcnNpb24oKQogICAgIC8vIGEgbnVtYmVyIGF0dHJpYnV0ZSBhbmQgYXQgbGVhc3Qgb25l
IHNpYmxpbmcpLiBZb3UgY2FuIGV2ZW4gZ28gd2lsZCBhbmQgc2F5CiAgICAgLy8gImZvb1swXVsy
XS5iYXJbMF0uYmF6LnRlc3RbMV1bMl1bM10iLiBJdCdzIHBvc3NpYmxlIHRoaXMgd2lsbCBjaGFu
Z2UgaW4gdGhlIGZ1dHVyZSB0aG91Z2guCiAgICAgLy8KLSAgICAvLyBJZiB5b3Ugc2V0IGF1dG9J
bmNyZW1lbnQgKHRoZSB0aGlyZCBvcHRpb25hbCBwYXJhbWV0ZXIpLCBJbmRleGVkREIgd2lsbCBn
ZW5lcmF0ZSBhIGtleQorICAgIC8vIElmIHlvdSBzZXQgYXV0b0luY3JlbWVudCAoYW5vdGhlciBv
cHRpb25hbCBwYXJhbWV0ZXIpLCBJbmRleGVkREIgd2lsbCBnZW5lcmF0ZSBhIGtleQogICAgIC8v
IGZvciB5b3VyIGVudHJ5IGF1dG9tYXRpY2FsbHkuIEFuZCBpZiB5b3UgaGF2ZSBhIGtleVBhdGgg
c2V0LCBpdCdsbCBzZXQgdGhlIHZhbHVlIGF0CiAgICAgLy8gdGhlIGxvY2F0aW9uIG9mIHRoZSBr
ZXlQYXRoIF9pbiB0aGUgZGF0YWJhc2VfIChpLmUuIGl0IHdpbGwgbm90IG1vZGlmeSB0aGUgdmFs
dWUgeW91IHBhc3MKICAgICAvLyBpbiB0byBwdXQvYWRkKS4gVW5mb3J0dW5hdGVseSBhdXRvSW5j
cmVtZW50IGlzIG5vdCB5ZXQgaW1wbGVtZW50ZWQgaW4gQ2hyb21pdW0vV2ViS2l0LgogICAgIC8v
CisgICAgLy8gQW5vdGhlciBvcHRpb25hbCBwYXJhbWV0ZXIsICJldmljdGFibGUiIGlzIG5vdCB5
ZXQgaW1wbGVtZW50ZWQuIFdoZW4gaXQgaXMsIGl0J2xsIGhpbnQKKyAgICAvLyB3aGljaCBkYXRh
IHNob3VsZCBiZSBkZWxldGVkIGZpcnN0IGlmIHRoZSBicm93c2VyIGRlY2lkZXMgdGhpcyBvcmln
aW4gaXMgdXNpbmcgdG9vIG11Y2gKKyAgICAvLyBzdG9yYWdlLiAoVGhlIGFsdGVybmF0aXZlIGlz
IHRoYXQgaXQnbGwgc3VnZ2VzdCB0aGUgdXNlciBkZWxldGUgZXZlcnl0aGluZyBmcm9tIHRoZQor
ICAgIC8vIG9yaWdpbiwgc28gaXQncyBpbiB5b3VyIGZhdm9yIHRvIHNldCBpdCBhcHByb3BlcmF0
ZWx5ISkgVGhpcyBpcyBncmVhdCBmb3Igd2hlbiB5b3UgaGF2ZQorICAgIC8vIHNvbWUgYWJzb2x1
dGVseSBjcml0aWNhbCBkYXRhIChsaWtlIHVuc2V0IGVtYWlscykgYW5kIGEgYnVuY2ggb2YgbGVz
cyBjcml0aWNhbCwgKGJ1dAorICAgIC8vIG1heWJlIHN0aWxsIGltcG9ydGFudCEpIGRhdGEuCisg
ICAgLy8KKyAgICAvLyBBbGwgb2YgdGhlc2Ugb3B0aW9ucyBjYW4gYmUgcGFzc2VkIGludG8gY3Jl
YXRlT2JqZWN0U3RvcmUgdmlhIGl0cyAob3B0aW9uYWwpIHNlY29uZAorICAgIC8vIHBhcmFtZXRl
ci4gU28sIGlmIHlvdSB3YW50ZWQgdG8gZGVmaW5lIGFsbCwgWW91J2QgZG8ge2tleVBhdGg6ICJz
b21ldGhpbmciLAorICAgIC8vIGV2aWN0YWJsZTogdHJ1ZSwgYXV0b0luY3JlbWVudDogdHJ1ZX0u
IFlvdSBjYW4gYWxzbyBwYXNzIGluIHN1YnNldHMgb2YgYWxsIHRocmVlIG9yCisgICAgLy8gb21p
dCB0aGUgb2JqZWN0IChzaW5jZSBpdCdzIG9wdGlvbmFsKS4KKyAgICAvLwogICAgIC8vIExldCdz
IG5vdyBjcmVhdGUgYW4gb2JqZWN0U3RvcmUgZm9yIHBlb3BsZS4gV2UnbGwgc3VwcGx5IGEga2V5
IHBhdGggaW4gdGhpcyBjYXNlLgotICAgIHZhciBvYmplY3RTdG9yZSA9IGRiLmNyZWF0ZU9iamVj
dFN0b3JlKCJwZW9wbGUiLCAiaWQiKTsKKyAgICB2YXIgb2JqZWN0U3RvcmUgPSBkYi5jcmVhdGVP
YmplY3RTdG9yZSgicGVvcGxlIiwge2tleVBhdGg6ICJpZCJ9KTsKIAogICAgIC8vIE5vdGljZSB0
aGF0IGl0IHJldHVybmVkIHN5bmNocm9ub3VzbHkuIFRoZSBydWxlIG9mIHRodW1iIGlzIHRoYXQg
YW55IGNhbGwgdGhhdCB0b3VjaGVzIChpbgogICAgIC8vIGFueSB3YXkpIGtleXMgb3IgdmFsdWVz
IGlzIGFzeW5jaHJvbm91cyBhbmQgYW55IG90aGVyIGNhbGwgKGJlc2lkZXMgc2V0VmVyc2lvbiBh
bmQgb3BlbikgYXJlCmRpZmYgLS1naXQgYS9XZWJDb3JlL0NoYW5nZUxvZyBiL1dlYkNvcmUvQ2hh
bmdlTG9nCmluZGV4IGQ3NmYwYzguLjZhNjkxOTMgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvQ2hhbmdl
TG9nCisrKyBiL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNTcgQEAKKzIwMTAtMTEtMjUg
IEplcmVteSBPcmxvdyAgPGpvcmxvd0BjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQWRkIGFuIE9wdGlvbnNPYmplY3QgY2xhc3Mg
Zm9yIEluZGV4ZWREQiAoYW5kIGxhdGVyIEdlb2xvY2F0aW9uKQorICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTAwMzAKKworICAgICAgICBHZW9sb2NhdGlv
biBhbmQgSW5kZXhlZERCIGJvdGggaGF2ZSB0aGUgY29uY2VwdCBvZiBhbiBvcHRpb25hbAorICAg
ICAgICBwYXJhbWV0ZXIgdGhhdCBoYXMgdmFyaW91cyBvcHRpb25zIHN1cHBsaWVkIHdpdGggaXQu
ICBJbgorICAgICAgICBHZW9sb2NhdGlvbiB0aGlzIHdhcyBkb25lIHdpdGggY3VzdG9tIGJpbmRp
bmdzLCBidXQgSSdtIHRyeWluZyB0bworICAgICAgICBhdm9pZCB0aGF0IGZvciBJbmRleGVkREIu
ICAKKworICAgICAgICBUaGlzIGZpcnN0IHBhdGNoIGltcGxlbWVudHMgaXQgaW4gVjggYW5kIG1h
a2VzIGNyZWF0ZU9iamVjdFN0b3JlIHVzZSBpdC4KKyAgICAgICAgVGhlIG5leHQgcGF0Y2ggd2ls
bCBjb3ZlciBHZW9sb2NhdGlvbiBhbmQgSlNDLgorCisgICAgICAgIFRlc3Q6IHN0b3JhZ2UvaW5k
ZXhlZGRiL2NyZWF0ZS1vYmplY3Qtc3RvcmUtb3B0aW9ucy5odG1sCisKKyAgICAgICAgKiBXZWJD
b3JlLmd5cGk6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9yVjgucG06
CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0NQUC9XZWJET01UZXN0T2JqLmNwcDoK
KyAgICAgICAgKFdlYkRPTVRlc3RPYmo6Om9wdGlvbnNPYmplY3QpOgorICAgICAgICAqIGJpbmRp
bmdzL3NjcmlwdHMvdGVzdC9DUFAvV2ViRE9NVGVzdE9iai5oOgorICAgICAgICAqIGJpbmRpbmdz
L3NjcmlwdHMvdGVzdC9HT2JqZWN0L1dlYktpdERPTVRlc3RDYWxsYmFjay5jcHA6CisgICAgICAg
ICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0dPYmplY3QvV2ViS2l0RE9NVGVzdEludGVyZmFjZS5j
cHA6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0dPYmplY3QvV2ViS2l0RE9NVGVz
dE1lZGlhUXVlcnlMaXN0TGlzdGVuZXIuY3BwOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMv
dGVzdC9HT2JqZWN0L1dlYktpdERPTVRlc3RPYmouY3BwOgorICAgICAgICAod2Via2l0X2RvbV90
ZXN0X29ial9vcHRpb25zX29iamVjdCk6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0
L0dPYmplY3QvV2ViS2l0RE9NVGVzdE9iai5oOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMv
dGVzdC9KUy9KU1Rlc3RPYmouY3BwOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0T2JqUHJvdG90
eXBlRnVuY3Rpb25PcHRpb25zT2JqZWN0KToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rl
c3QvSlMvSlNUZXN0T2JqLmg6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L09iakMv
RE9NVGVzdE9iai5oOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9PYmpDL0RPTVRl
c3RPYmoubW06CisgICAgICAgICgtW0RPTVRlc3RPYmogb3B0aW9uc09iamVjdDpvb286XSk6Cisg
ICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Rlc3RPYmouaWRsOgorICAgICAgICAqIGJp
bmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRlc3RNZWRpYVF1ZXJ5TGlzdExpc3RlbmVyLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkNvbmZpZ3VyZVY4VGVzdE1lZGlhUXVlcnlMaXN0TGlzdGVuZXJU
ZW1wbGF0ZSk6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdE9iai5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpUZXN0T2JqSW50ZXJuYWw6Om9wdGlvbnNPYmplY3RDYWxs
YmFjayk6CisgICAgICAgICogYmluZGluZ3MvdjgvT3B0aW9uc09iamVjdC5jcHA6IEFkZGVkLgor
ICAgICAgICAoV2ViQ29yZTo6T3B0aW9uc09iamVjdDo6T3B0aW9uc09iamVjdCk6CisgICAgICAg
IChXZWJDb3JlOjpPcHRpb25zT2JqZWN0Ojp+T3B0aW9uc09iamVjdCk6CisgICAgICAgIChXZWJD
b3JlOjpPcHRpb25zT2JqZWN0OjpvcGVyYXRvcj0pOgorICAgICAgICAoV2ViQ29yZTo6T3B0aW9u
c09iamVjdDo6dW5kZWZpbmVkT3JOdWxsKToKKyAgICAgICAgKFdlYkNvcmU6Ok9wdGlvbnNPYmpl
Y3Q6OmdldEtleUJvb2wpOgorICAgICAgICAoV2ViQ29yZTo6T3B0aW9uc09iamVjdDo6Z2V0S2V5
U3RyaW5nKToKKyAgICAgICAgKFdlYkNvcmU6Ok9wdGlvbnNPYmplY3Q6OmdldEtleSk6CisgICAg
ICAgICogYmluZGluZ3MvdjgvT3B0aW9uc09iamVjdC5oOiBDb3BpZWQgZnJvbSBXZWJDb3JlL3N0
b3JhZ2UvSURCRGF0YWJhc2UuaWRsLgorICAgICAgICAqIHN0b3JhZ2UvSURCRGF0YWJhc2UuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6SURCRGF0YWJhc2U6OmNyZWF0ZU9iamVjdFN0b3JlKToKKyAg
ICAgICAgKiBzdG9yYWdlL0lEQkRhdGFiYXNlLmg6CisgICAgICAgIChXZWJDb3JlOjpJREJEYXRh
YmFzZTo6Y3JlYXRlT2JqZWN0U3RvcmUpOgorICAgICAgICAqIHN0b3JhZ2UvSURCRGF0YWJhc2Uu
aWRsOgorCiAyMDEwLTExLTIzICBKZXJlbXkgT3Jsb3cgIDxqb3Jsb3dAY2hyb21pdW0ub3JnPgog
CiAgICAgICAgIFJldmlld2VkIGJ5IFN0ZXZlIEJsb2NrLgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9X
ZWJDb3JlLmd5cGkgYi9XZWJDb3JlL1dlYkNvcmUuZ3lwaQppbmRleCAyYzgxN2NiLi41ODIzNTJm
IDEwMDY0NAotLS0gYS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQorKysgYi9XZWJDb3JlL1dlYkNvcmUu
Z3lwaQpAQCAtNzQ0LDYgKzc0NCw4IEBACiAgICAgICAgICAgICAnYmluZGluZ3MvdjgvQ2hpbGRU
aHJlYWRET01EYXRhLmgnLAogICAgICAgICAgICAgJ2JpbmRpbmdzL3Y4L0lEQkJpbmRpbmdVdGls
aXRpZXMuY3BwJywKICAgICAgICAgICAgICdiaW5kaW5ncy92OC9JREJCaW5kaW5nVXRpbGl0aWVz
LmgnLAorICAgICAgICAgICAgJ2JpbmRpbmdzL3Y4L09wdGlvbnNPYmplY3QuY3BwJywKKyAgICAg
ICAgICAgICdiaW5kaW5ncy92OC9PcHRpb25zT2JqZWN0LmgnLAogICAgICAgICAgICAgJ2JpbmRp
bmdzL3Y4L2N1c3RvbS9WOENhbnZhc1BpeGVsQXJyYXlDdXN0b20uY3BwJywKICAgICAgICAgICAg
ICdiaW5kaW5ncy92OC9jdXN0b20vVjhBcnJheUJ1ZmZlclZpZXdDdXN0b20uaCcsCiAgICAgICAg
ICAgICAnYmluZGluZ3MvdjgvY3VzdG9tL1Y4QXJyYXlCdWZmZXJDdXN0b20uY3BwJywKZGlmZiAt
LWdpdCBhL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9yVjgucG0gYi9XZWJD
b3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvclY4LnBtCmluZGV4IDdlYTRjNjMuLjE5
NmJhOTIgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9y
VjgucG0KKysrIGIvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JWOC5wbQpA
QCAtMjgwNiw2ICsyODA2LDcgQEAgc3ViIEdldE5hdGl2ZVR5cGUKICAgICByZXR1cm4gIk5vZGUq
IiBpZiAkdHlwZSBlcSAiRXZlbnRUYXJnZXQiIGFuZCAkaXNQYXJhbWV0ZXI7CiAgICAgcmV0dXJu
ICJkb3VibGUiIGlmICR0eXBlIGVxICJEYXRlIjsKICAgICByZXR1cm4gIlNjcmlwdFZhbHVlIiBp
ZiAkdHlwZSBlcSAiRE9NT2JqZWN0IjsKKyAgICByZXR1cm4gIk9wdGlvbnNPYmplY3QiIGlmICR0
eXBlIGVxICJPcHRpb25zT2JqZWN0IjsKIAogICAgIHJldHVybiAiU3RyaW5nIiBpZiAkdHlwZSBl
cSAiRE9NVXNlckRhdGEiOyAgIyBGSVhNRTogVGVtcG9yYXJ5IGhhY2s/CiAKQEAgLTI4ODksNiAr
Mjg5MCwxMSBAQCBzdWIgSlNWYWx1ZVRvTmF0aXZlCiAgICAgICAgIHJldHVybiAiY3JlYXRlSURC
S2V5RnJvbVZhbHVlKCR2YWx1ZSkiOwogICAgIH0KIAorICAgIGlmICgkdHlwZSBlcSAiT3B0aW9u
c09iamVjdCIpIHsKKyAgICAgICAgJGltcGxJbmNsdWRlc3siT3B0aW9uc09iamVjdC5oIn0gPSAx
OworICAgICAgICByZXR1cm4gJHZhbHVlOworICAgIH0KKwogICAgIGlmICgkdHlwZSBlcSAiRE9N
T2JqZWN0IikgewogICAgICAgICAkaW1wbEluY2x1ZGVzeyJTY3JpcHRWYWx1ZS5oIn0gPSAxOwog
ICAgICAgICByZXR1cm4gIlNjcmlwdFZhbHVlKCR2YWx1ZSkiOwpAQCAtMzAzNCw2ICszMDQwLDcg
QEAgbXkgJW5vbl93cmFwcGVyX3R5cGVzID0gKAogICAgICdOb2RlRmlsdGVyJyA9PiAxLAogICAg
ICdFdmVudExpc3RlbmVyJyA9PiAxLAogICAgICdJREJLZXknID0+IDEsCisgICAgJ09wdGlvbnNP
YmplY3QnID0+IDEsCiAgICAgJ0RhdGUnID0+IDEsCiAgICAgJ01lZGlhUXVlcnlMaXN0TGlzdGVu
ZXInID0+IDEKICk7CmRpZmYgLS1naXQgYS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9D
UFAvV2ViRE9NVGVzdE9iai5jcHAgYi9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9DUFAv
V2ViRE9NVGVzdE9iai5jcHAKaW5kZXggOWE4ZDkwOS4uODE5YzdjZiAxMDA2NDQKLS0tIGEvV2Vi
Q29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvQ1BQL1dlYkRPTVRlc3RPYmouY3BwCisrKyBiL1dl
YkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0NQUC9XZWJET01UZXN0T2JqLmNwcApAQCAtMjQs
OSArMjQsMTEgQEAKICNpbmNsdWRlICJIVE1MTmFtZXMuaCIKICNpbmNsdWRlICJJREJLZXkuaCIK
ICNpbmNsdWRlICJLVVJMLmgiCisjaW5jbHVkZSAiT3B0aW9uc09iamVjdC5oIgogI2luY2x1ZGUg
IlNlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5oIgogI2luY2x1ZGUgIlRlc3RPYmouaCIKICNpbmNsdWRl
ICJXZWJET01JREJLZXkuaCIKKyNpbmNsdWRlICJXZWJET01PcHRpb25zT2JqZWN0LmgiCiAjaW5j
bHVkZSAiV2ViRE9NU3RyaW5nLmgiCiAjaW5jbHVkZSAiV2ViRXhjZXB0aW9uSGFuZGxlci5oIgog
I2luY2x1ZGUgIldlYk5hdGl2ZUV2ZW50TGlzdGVuZXIuaCIKQEAgLTY2Miw2ICs2NjQsMTQgQEAg
dm9pZCBXZWJET01UZXN0T2JqOjppZGJLZXkoY29uc3QgV2ViRE9NSURCS2V5JiBrZXkpCiAgICAg
aW1wbCgpLT5pZGJLZXkodG9XZWJDb3JlKGtleSkpOwogfQogCit2b2lkIFdlYkRPTVRlc3RPYmo6
Om9wdGlvbnNPYmplY3QoY29uc3QgV2ViRE9NT3B0aW9uc09iamVjdCYgb28sIGNvbnN0IFdlYkRP
TU9wdGlvbnNPYmplY3QmIG9vbykKK3sKKyAgICBpZiAoIWltcGwoKSkKKyAgICAgICAgcmV0dXJu
OworCisgICAgaW1wbCgpLT5vcHRpb25zT2JqZWN0KHRvV2ViQ29yZShvbyksIHRvV2ViQ29yZShv
b28pKTsKK30KKwogdm9pZCBXZWJET01UZXN0T2JqOjptZXRob2RXaXRoRXhjZXB0aW9uKCkKIHsK
ICAgICBpZiAoIWltcGwoKSkKZGlmZiAtLWdpdCBhL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90
ZXN0L0NQUC9XZWJET01UZXN0T2JqLmggYi9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9D
UFAvV2ViRE9NVGVzdE9iai5oCmluZGV4IGYyOWI3ZGMuLjBiMzU5M2QgMTAwNjQ0Ci0tLSBhL1dl
YkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0NQUC9XZWJET01UZXN0T2JqLmgKKysrIGIvV2Vi
Q29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvQ1BQL1dlYkRPTVRlc3RPYmouaApAQCAtMzIsNiAr
MzIsNyBAQCBjbGFzcyBUZXN0T2JqOwogCiBjbGFzcyBXZWJET01FdmVudExpc3RlbmVyOwogY2xh
c3MgV2ViRE9NSURCS2V5OworY2xhc3MgV2ViRE9NT3B0aW9uc09iamVjdDsKIGNsYXNzIFdlYkRP
TVN0cmluZzsKIGNsYXNzIFdlYkRPTVRlc3RPYmo7CiAKQEAgLTEzNiw2ICsxMzcsNyBAQCBwdWJs
aWM6CiAgICAgV2ViRE9NVGVzdE9iaiBtZXRob2RUaGF0UmVxdWlyZXNBbGxBcmdzQW5kVGhyb3dz
KGNvbnN0IFdlYkRPTVN0cmluZyYgc3RyQXJnLCBjb25zdCBXZWJET01UZXN0T2JqJiBvYmpBcmcp
OwogICAgIHZvaWQgc2VyaWFsaXplZFZhbHVlKGNvbnN0IFdlYkRPTVN0cmluZyYgc2VyaWFsaXpl
ZEFyZyk7CiAgICAgdm9pZCBpZGJLZXkoY29uc3QgV2ViRE9NSURCS2V5JiBrZXkpOworICAgIHZv
aWQgb3B0aW9uc09iamVjdChjb25zdCBXZWJET01PcHRpb25zT2JqZWN0JiBvbywgY29uc3QgV2Vi
RE9NT3B0aW9uc09iamVjdCYgb29vKTsKICAgICB2b2lkIG1ldGhvZFdpdGhFeGNlcHRpb24oKTsK
ICAgICB2b2lkIGN1c3RvbU1ldGhvZCgpOwogICAgIHZvaWQgY3VzdG9tTWV0aG9kV2l0aEFyZ3Mo
aW50IGludEFyZywgY29uc3QgV2ViRE9NU3RyaW5nJiBzdHJBcmcsIGNvbnN0IFdlYkRPTVRlc3RP
YmomIG9iakFyZyk7CmRpZmYgLS1naXQgYS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9H
T2JqZWN0L1dlYktpdERPTVRlc3RDYWxsYmFjay5jcHAgYi9XZWJDb3JlL2JpbmRpbmdzL3Njcmlw
dHMvdGVzdC9HT2JqZWN0L1dlYktpdERPTVRlc3RDYWxsYmFjay5jcHAKaW5kZXggMTlmZjE2Ni4u
NTU0Y2MxNSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvR09iamVj
dC9XZWJLaXRET01UZXN0Q2FsbGJhY2suY3BwCisrKyBiL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0
cy90ZXN0L0dPYmplY3QvV2ViS2l0RE9NVGVzdENhbGxiYWNrLmNwcApAQCAtMjUsNiArMjUsNyBA
QAogCiAjaW5jbHVkZSA8d3RmL0dldFB0ci5oPgogI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KKyNp
bmNsdWRlICJET01PYmplY3RDYWNoZS5oIgogI2luY2x1ZGUgIkV4Y2VwdGlvbkNvZGUuaCIKICNp
bmNsdWRlICJKU01haW5UaHJlYWRFeGVjU3RhdGUuaCIKICNpbmNsdWRlICJUZXN0Q2FsbGJhY2su
aCIKZGlmZiAtLWdpdCBhL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0dPYmplY3QvV2Vi
S2l0RE9NVGVzdEludGVyZmFjZS5jcHAgYi9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9H
T2JqZWN0L1dlYktpdERPTVRlc3RJbnRlcmZhY2UuY3BwCmluZGV4IGExM2RhNDUuLjZjOTA2ZTQg
MTAwNjQ0Ci0tLSBhL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0dPYmplY3QvV2ViS2l0
RE9NVGVzdEludGVyZmFjZS5jcHAKKysrIGIvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3Qv
R09iamVjdC9XZWJLaXRET01UZXN0SW50ZXJmYWNlLmNwcApAQCAtMjUsNiArMjUsNyBAQAogCiAj
aW5jbHVkZSA8d3RmL0dldFB0ci5oPgogI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KKyNpbmNsdWRl
ICJET01PYmplY3RDYWNoZS5oIgogI2luY2x1ZGUgIkV4Y2VwdGlvbkNvZGUuaCIKICNpbmNsdWRl
ICJKU01haW5UaHJlYWRFeGVjU3RhdGUuaCIKICNpbmNsdWRlICJUZXN0SW50ZXJmYWNlLmgiCmRp
ZmYgLS1naXQgYS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9HT2JqZWN0L1dlYktpdERP
TVRlc3RNZWRpYVF1ZXJ5TGlzdExpc3RlbmVyLmNwcCBiL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0
cy90ZXN0L0dPYmplY3QvV2ViS2l0RE9NVGVzdE1lZGlhUXVlcnlMaXN0TGlzdGVuZXIuY3BwCmlu
ZGV4IGY1ZGVkNzkuLmE3ZDM2NGMgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0
cy90ZXN0L0dPYmplY3QvV2ViS2l0RE9NVGVzdE1lZGlhUXVlcnlMaXN0TGlzdGVuZXIuY3BwCisr
KyBiL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0dPYmplY3QvV2ViS2l0RE9NVGVzdE1l
ZGlhUXVlcnlMaXN0TGlzdGVuZXIuY3BwCkBAIC0yMyw2ICsyMyw3IEBACiAKICNpbmNsdWRlIDx3
dGYvR2V0UHRyLmg+CiAjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgorI2luY2x1ZGUgIkRPTU9iamVj
dENhY2hlLmgiCiAjaW5jbHVkZSAiRXhjZXB0aW9uQ29kZS5oIgogI2luY2x1ZGUgIkpTTWFpblRo
cmVhZEV4ZWNTdGF0ZS5oIgogI2luY2x1ZGUgIlRlc3RNZWRpYVF1ZXJ5TGlzdExpc3RlbmVyLmgi
CmRpZmYgLS1naXQgYS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9HT2JqZWN0L1dlYktp
dERPTVRlc3RPYmouY3BwIGIvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvR09iamVjdC9X
ZWJLaXRET01UZXN0T2JqLmNwcAppbmRleCAxYmY5OTgzLi5lYzJjNmRjIDEwMDY0NAotLS0gYS9X
ZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9HT2JqZWN0L1dlYktpdERPTVRlc3RPYmouY3Bw
CisrKyBiL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0dPYmplY3QvV2ViS2l0RE9NVGVz
dE9iai5jcHAKQEAgLTIzLDYgKzIzLDcgQEAKIAogI2luY2x1ZGUgPHd0Zi9HZXRQdHIuaD4KICNp
bmNsdWRlIDx3dGYvUmVmUHRyLmg+CisjaW5jbHVkZSAiRE9NT2JqZWN0Q2FjaGUuaCIKICNpbmNs
dWRlICJFeGNlcHRpb25Db2RlLmgiCiAjaW5jbHVkZSAiSFRNTE5hbWVzLmgiCiAjaW5jbHVkZSAi
SlNNYWluVGhyZWFkRXhlY1N0YXRlLmgiCkBAIC0zMSw2ICszMiw4IEBACiAjaW5jbHVkZSAiZ29i
amVjdC9Db252ZXJ0VG9VVEY4U3RyaW5nLmgiCiAjaW5jbHVkZSAid2Via2l0L1dlYktpdERPTUlE
QktleS5oIgogI2luY2x1ZGUgIndlYmtpdC9XZWJLaXRET01JREJLZXlQcml2YXRlLmgiCisjaW5j
bHVkZSAid2Via2l0L1dlYktpdERPTU9wdGlvbnNPYmplY3QuaCIKKyNpbmNsdWRlICJ3ZWJraXQv
V2ViS2l0RE9NT3B0aW9uc09iamVjdFByaXZhdGUuaCIKICNpbmNsdWRlICJ3ZWJraXQvV2ViS2l0
RE9NU2VyaWFsaXplZFNjcmlwdFZhbHVlLmgiCiAjaW5jbHVkZSAid2Via2l0L1dlYktpdERPTVNl
cmlhbGl6ZWRTY3JpcHRWYWx1ZVByaXZhdGUuaCIKICNpbmNsdWRlICJ3ZWJraXQvV2ViS2l0RE9N
VGVzdE9iai5oIgpAQCAtMjExLDYgKzIxNCwyNyBAQCB3ZWJraXRfZG9tX3Rlc3Rfb2JqX2lkYl9r
ZXkoV2ViS2l0RE9NVGVzdE9iaiogc2VsZiwgV2ViS2l0RE9NSURCS2V5KiBrZXkpCiB9CiAKIHZv
aWQKK3dlYmtpdF9kb21fdGVzdF9vYmpfb3B0aW9uc19vYmplY3QoV2ViS2l0RE9NVGVzdE9iaiog
c2VsZiwgV2ViS2l0RE9NT3B0aW9uc09iamVjdCogb28sIFdlYktpdERPTU9wdGlvbnNPYmplY3Qq
IG9vbykKK3sKKyAgICBnX3JldHVybl9pZl9mYWlsKHNlbGYpOworICAgIFdlYkNvcmU6OkpTTWFp
blRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBXZWJDb3JlOjpUZXN0T2JqICogaXRlbSA9IFdl
YktpdDo6Y29yZShzZWxmKTsKKyAgICBnX3JldHVybl9pZl9mYWlsKG9vKTsKKyAgICBnX3JldHVy
bl9pZl9mYWlsKG9vbyk7CisgICAgV2ViQ29yZTo6T3B0aW9uc09iamVjdCAqIGNvbnZlcnRlZF9v
byA9IE5VTEw7CisgICAgaWYgKG9vICE9IE5VTEwpIHsKKyAgICAgICAgY29udmVydGVkX29vID0g
V2ViS2l0Ojpjb3JlKG9vKTsKKyAgICAgICAgZ19yZXR1cm5faWZfZmFpbChjb252ZXJ0ZWRfb28p
OworICAgIH0KKyAgICBXZWJDb3JlOjpPcHRpb25zT2JqZWN0ICogY29udmVydGVkX29vbyA9IE5V
TEw7CisgICAgaWYgKG9vbyAhPSBOVUxMKSB7CisgICAgICAgIGNvbnZlcnRlZF9vb28gPSBXZWJL
aXQ6OmNvcmUob29vKTsKKyAgICAgICAgZ19yZXR1cm5faWZfZmFpbChjb252ZXJ0ZWRfb29vKTsK
KyAgICB9CisgICAgaXRlbS0+b3B0aW9uc09iamVjdChjb252ZXJ0ZWRfb28sIGNvbnZlcnRlZF9v
b28pOworfQorCit2b2lkCiB3ZWJraXRfZG9tX3Rlc3Rfb2JqX21ldGhvZF93aXRoX2V4Y2VwdGlv
bihXZWJLaXRET01UZXN0T2JqKiBzZWxmLCBHRXJyb3IgKiplcnJvcikKIHsKICAgICBnX3JldHVy
bl9pZl9mYWlsKHNlbGYpOwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rl
c3QvR09iamVjdC9XZWJLaXRET01UZXN0T2JqLmggYi9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMv
dGVzdC9HT2JqZWN0L1dlYktpdERPTVRlc3RPYmouaAppbmRleCAyZWViZGIxLi40MmQxZmNkIDEw
MDY0NAotLS0gYS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9HT2JqZWN0L1dlYktpdERP
TVRlc3RPYmouaAorKysgYi9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9HT2JqZWN0L1dl
YktpdERPTVRlc3RPYmouaApAQCAtNzcsNiArNzcsOSBAQCBXRUJLSVRfQVBJIHZvaWQKIHdlYmtp
dF9kb21fdGVzdF9vYmpfaWRiX2tleShXZWJLaXRET01UZXN0T2JqKiBzZWxmLCBXZWJLaXRET01J
REJLZXkqIGtleSk7CiAKIFdFQktJVF9BUEkgdm9pZAord2Via2l0X2RvbV90ZXN0X29ial9vcHRp
b25zX29iamVjdChXZWJLaXRET01UZXN0T2JqKiBzZWxmLCBXZWJLaXRET01PcHRpb25zT2JqZWN0
KiBvbywgV2ViS2l0RE9NT3B0aW9uc09iamVjdCogb29vKTsKKworV0VCS0lUX0FQSSB2b2lkCiB3
ZWJraXRfZG9tX3Rlc3Rfb2JqX21ldGhvZF93aXRoX2V4Y2VwdGlvbihXZWJLaXRET01UZXN0T2Jq
KiBzZWxmLCBHRXJyb3IgKiplcnJvcik7CiAKIApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9iaW5kaW5n
cy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0T2JqLmNwcCBiL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0
cy90ZXN0L0pTL0pTVGVzdE9iai5jcHAKaW5kZXggOTgyMGZhYi4uZDhiZjY3ZSAxMDA2NDQKLS0t
IGEvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0T2JqLmNwcAorKysgYi9X
ZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RPYmouY3BwCkBAIC0yNyw2ICsy
Nyw3IEBACiAjaW5jbHVkZSAiSURCS2V5LmgiCiAjaW5jbHVkZSAiSlNET01CaW5kaW5nLmgiCiAj
aW5jbHVkZSAiSlNFdmVudExpc3RlbmVyLmgiCisjaW5jbHVkZSAiSlNPcHRpb25zT2JqZWN0Lmgi
CiAjaW5jbHVkZSAiSlNUZXN0Q2FsbGJhY2suaCIKICNpbmNsdWRlICJKU1Rlc3RPYmouaCIKICNp
bmNsdWRlICJKU2xvZy5oIgpAQCAtMTgxLDcgKzE4Miw3IEBAIGJvb2wgSlNUZXN0T2JqQ29uc3Ry
dWN0b3I6OmdldE93blByb3BlcnR5RGVzY3JpcHRvcihFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IElk
ZW50CiAjZGVmaW5lIFRIVU5LX0dFTkVSQVRPUihnZW5lcmF0b3IpCiAjZW5kaWYKIAotc3RhdGlj
IGNvbnN0IEhhc2hUYWJsZVZhbHVlIEpTVGVzdE9ialByb3RvdHlwZVRhYmxlVmFsdWVzWzQ3XSA9
CitzdGF0aWMgY29uc3QgSGFzaFRhYmxlVmFsdWUgSlNUZXN0T2JqUHJvdG90eXBlVGFibGVWYWx1
ZXNbNDhdID0KIHsKICAgICB7ICJDT05TVF9WQUxVRV8wIiwgRG9udERlbGV0ZSB8IFJlYWRPbmx5
LCAoaW50cHRyX3Qpc3RhdGljX2Nhc3Q8UHJvcGVydHlTbG90OjpHZXRWYWx1ZUZ1bmM+KGpzVGVz
dE9iakNPTlNUX1ZBTFVFXzApLCAoaW50cHRyX3QpMCBUSFVOS19HRU5FUkFUT1IoMCkgfSwKICAg
ICB7ICJDT05TVF9WQUxVRV8xIiwgRG9udERlbGV0ZSB8IFJlYWRPbmx5LCAoaW50cHRyX3Qpc3Rh
dGljX2Nhc3Q8UHJvcGVydHlTbG90OjpHZXRWYWx1ZUZ1bmM+KGpzVGVzdE9iakNPTlNUX1ZBTFVF
XzEpLCAoaW50cHRyX3QpMCBUSFVOS19HRU5FUkFUT1IoMCkgfSwKQEAgLTIwNCw2ICsyMDUsNyBA
QCBzdGF0aWMgY29uc3QgSGFzaFRhYmxlVmFsdWUgSlNUZXN0T2JqUHJvdG90eXBlVGFibGVWYWx1
ZXNbNDddID0KICAgICB7ICJtZXRob2RUaGF0UmVxdWlyZXNBbGxBcmdzQW5kVGhyb3dzIiwgRG9u
dERlbGV0ZSB8IEZ1bmN0aW9uLCAoaW50cHRyX3Qpc3RhdGljX2Nhc3Q8TmF0aXZlRnVuY3Rpb24+
KGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kVGhhdFJlcXVpcmVzQWxsQXJnc0FuZFRo
cm93cyksIChpbnRwdHJfdCkyIFRIVU5LX0dFTkVSQVRPUigwKSB9LAogICAgIHsgInNlcmlhbGl6
ZWRWYWx1ZSIsIERvbnREZWxldGUgfCBGdW5jdGlvbiwgKGludHB0cl90KXN0YXRpY19jYXN0PE5h
dGl2ZUZ1bmN0aW9uPihqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvblNlcmlhbGl6ZWRWYWx1ZSks
IChpbnRwdHJfdCkxIFRIVU5LX0dFTkVSQVRPUigwKSB9LAogICAgIHsgImlkYktleSIsIERvbnRE
ZWxldGUgfCBGdW5jdGlvbiwgKGludHB0cl90KXN0YXRpY19jYXN0PE5hdGl2ZUZ1bmN0aW9uPihq
c1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbklkYktleSksIChpbnRwdHJfdCkxIFRIVU5LX0dFTkVS
QVRPUigwKSB9LAorICAgIHsgIm9wdGlvbnNPYmplY3QiLCBEb250RGVsZXRlIHwgRnVuY3Rpb24s
IChpbnRwdHJfdClzdGF0aWNfY2FzdDxOYXRpdmVGdW5jdGlvbj4oanNUZXN0T2JqUHJvdG90eXBl
RnVuY3Rpb25PcHRpb25zT2JqZWN0KSwgKGludHB0cl90KTIgVEhVTktfR0VORVJBVE9SKDApIH0s
CiAgICAgeyAibWV0aG9kV2l0aEV4Y2VwdGlvbiIsIERvbnREZWxldGUgfCBGdW5jdGlvbiwgKGlu
dHB0cl90KXN0YXRpY19jYXN0PE5hdGl2ZUZ1bmN0aW9uPihqc1Rlc3RPYmpQcm90b3R5cGVGdW5j
dGlvbk1ldGhvZFdpdGhFeGNlcHRpb24pLCAoaW50cHRyX3QpMCBUSFVOS19HRU5FUkFUT1IoMCkg
fSwKICAgICB7ICJjdXN0b21NZXRob2QiLCBEb250RGVsZXRlIHwgRnVuY3Rpb24sIChpbnRwdHJf
dClzdGF0aWNfY2FzdDxOYXRpdmVGdW5jdGlvbj4oanNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25D
dXN0b21NZXRob2QpLCAoaW50cHRyX3QpMCBUSFVOS19HRU5FUkFUT1IoMCkgfSwKICAgICB7ICJj
dXN0b21NZXRob2RXaXRoQXJncyIsIERvbnREZWxldGUgfCBGdW5jdGlvbiwgKGludHB0cl90KXN0
YXRpY19jYXN0PE5hdGl2ZUZ1bmN0aW9uPihqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbkN1c3Rv
bU1ldGhvZFdpdGhBcmdzKSwgKGludHB0cl90KTMgVEhVTktfR0VORVJBVE9SKDApIH0sCkBAIC0y
MzMsNyArMjM1LDcgQEAgc3RhdGljIGNvbnN0IEhhc2hUYWJsZVZhbHVlIEpTVGVzdE9ialByb3Rv
dHlwZVRhYmxlVmFsdWVzWzQ3XSA9CiB9OwogCiAjdW5kZWYgVEhVTktfR0VORVJBVE9SCi1zdGF0
aWMgSlNDX0NPTlNUX0hBU0hUQUJMRSBIYXNoVGFibGUgSlNUZXN0T2JqUHJvdG90eXBlVGFibGUg
PSB7IDEzNSwgMTI3LCBKU1Rlc3RPYmpQcm90b3R5cGVUYWJsZVZhbHVlcywgMCB9Oworc3RhdGlj
IEpTQ19DT05TVF9IQVNIVEFCTEUgSGFzaFRhYmxlIEpTVGVzdE9ialByb3RvdHlwZVRhYmxlID0g
eyAxMzYsIDEyNywgSlNUZXN0T2JqUHJvdG90eXBlVGFibGVWYWx1ZXMsIDAgfTsKIGNvbnN0IENs
YXNzSW5mbyBKU1Rlc3RPYmpQcm90b3R5cGU6OnNfaW5mbyA9IHsgIlRlc3RPYmpQcm90b3R5cGUi
LCAwLCAmSlNUZXN0T2JqUHJvdG90eXBlVGFibGUsIDAgfTsKIAogSlNPYmplY3QqIEpTVGVzdE9i
alByb3RvdHlwZTo6c2VsZihFeGVjU3RhdGUqIGV4ZWMsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxP
YmplY3QpCkBAIC05OTAsNiArOTkyLDMxIEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwg
anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25JZGJLZXkoRXhlY1N0YXRlKiBleGVjKQogICAgIHJl
dHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiB9CiAKK0VuY29kZWRKU1ZhbHVl
IEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25PcHRpb25zT2JqZWN0KEV4
ZWNTdGF0ZSogZXhlYykKK3sKKyAgICBKU1ZhbHVlIHRoaXNWYWx1ZSA9IGV4ZWMtPmhvc3RUaGlz
VmFsdWUoKTsKKyAgICBpZiAoIXRoaXNWYWx1ZS5pbmhlcml0cygmSlNUZXN0T2JqOjpzX2luZm8p
KQorICAgICAgICByZXR1cm4gdGhyb3dWTVR5cGVFcnJvcihleGVjKTsKKyAgICBKU1Rlc3RPYmoq
IGNhc3RlZFRoaXMgPSBzdGF0aWNfY2FzdDxKU1Rlc3RPYmoqPihhc09iamVjdCh0aGlzVmFsdWUp
KTsKKyAgICBUZXN0T2JqKiBpbXAgPSBzdGF0aWNfY2FzdDxUZXN0T2JqKj4oY2FzdGVkVGhpcy0+
aW1wbCgpKTsKKyAgICBPcHRpb25zT2JqZWN0KiBvbyA9IHRvT3B0aW9uc09iamVjdChleGVjLT5h
cmd1bWVudCgwKSk7CisgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgICAgICByZXR1
cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOworCisgICAgaW50IGFyZ3NDb3VudCA9
IGV4ZWMtPmFyZ3VtZW50Q291bnQoKTsKKyAgICBpZiAoYXJnc0NvdW50IDw9IDEpIHsKKyAgICAg
ICAgaW1wLT5vcHRpb25zT2JqZWN0KG9vKTsKKyAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29k
ZShqc1VuZGVmaW5lZCgpKTsKKyAgICB9CisKKyAgICBPcHRpb25zT2JqZWN0KiBvb28gPSB0b09w
dGlvbnNPYmplY3QoZXhlYy0+YXJndW1lbnQoMSkpOworICAgIGlmIChleGVjLT5oYWRFeGNlcHRp
b24oKSkKKyAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKKwor
ICAgIGltcC0+b3B0aW9uc09iamVjdChvbywgb29vKTsKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5j
b2RlKGpzVW5kZWZpbmVkKCkpOworfQorCiBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpz
VGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aEV4Y2VwdGlvbihFeGVjU3RhdGUqIGV4
ZWMpCiB7CiAgICAgSlNWYWx1ZSB0aGlzVmFsdWUgPSBleGVjLT5ob3N0VGhpc1ZhbHVlKCk7CmRp
ZmYgLS1naXQgYS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RPYmouaCBi
L1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE9iai5oCmluZGV4IDYwMTRm
N2EuLmMyNzQ0NGEgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pT
L0pTVGVzdE9iai5oCisrKyBiL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVz
dE9iai5oCkBAIC05Niw2ICs5Niw3IEBAIEpTQzo6RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FM
TCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFRoYXRSZXF1aXJlc0FsCiBKU0M6OkVu
Y29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRo
b2RUaGF0UmVxdWlyZXNBbGxBcmdzQW5kVGhyb3dzKEpTQzo6RXhlY1N0YXRlKik7CiBKU0M6OkVu
Y29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25TZXJp
YWxpemVkVmFsdWUoSlNDOjpFeGVjU3RhdGUqKTsKIEpTQzo6RW5jb2RlZEpTVmFsdWUgSlNDX0hP
U1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbklkYktleShKU0M6OkV4ZWNTdGF0ZSop
OworSlNDOjpFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1
bmN0aW9uT3B0aW9uc09iamVjdChKU0M6OkV4ZWNTdGF0ZSopOwogSlNDOjpFbmNvZGVkSlNWYWx1
ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aEV4Y2Vw
dGlvbihKU0M6OkV4ZWNTdGF0ZSopOwogSlNDOjpFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxM
IGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uQ3VzdG9tTWV0aG9kKEpTQzo6RXhlY1N0YXRlKik7
CiBKU0M6OkVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVu
Y3Rpb25DdXN0b21NZXRob2RXaXRoQXJncyhKU0M6OkV4ZWNTdGF0ZSopOwpkaWZmIC0tZ2l0IGEv
V2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvT2JqQy9ET01UZXN0T2JqLmggYi9XZWJDb3Jl
L2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9PYmpDL0RPTVRlc3RPYmouaAppbmRleCBmZDQwMDk1Li43
NjZkMzFmIDEwMDY0NAotLS0gYS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9PYmpDL0RP
TVRlc3RPYmouaAorKysgYi9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9PYmpDL0RPTVRl
c3RPYmouaApAQCAtMjksNiArMjksNyBAQAogI2lmIFdFQktJVF9WRVJTSU9OX01BWF9BTExPV0VE
ID49IFdFQktJVF9WRVJTSU9OX0xBVEVTVAogCiBAY2xhc3MgRE9NSURCS2V5OworQGNsYXNzIERP
TU9wdGlvbnNPYmplY3Q7CiBAY2xhc3MgRE9NVGVzdE9iajsKIEBjbGFzcyBET01sb2c7CiBAY2xh
c3MgTlNTdHJpbmc7CkBAIC0xMjcsNiArMTI4LDcgQEAgZW51bSB7CiAtIChET01UZXN0T2JqICop
bWV0aG9kVGhhdFJlcXVpcmVzQWxsQXJnc0FuZFRocm93czooTlNTdHJpbmcgKilzdHJBcmcgb2Jq
QXJnOihET01UZXN0T2JqICopb2JqQXJnOwogLSAodm9pZClzZXJpYWxpemVkVmFsdWU6KE5TU3Ry
aW5nICopc2VyaWFsaXplZEFyZzsKIC0gKHZvaWQpaWRiS2V5OihET01JREJLZXkgKilrZXk7Cist
ICh2b2lkKW9wdGlvbnNPYmplY3Q6KERPTU9wdGlvbnNPYmplY3QgKilvbyBvb286KERPTU9wdGlv
bnNPYmplY3QgKilvb287CiAtICh2b2lkKW1ldGhvZFdpdGhFeGNlcHRpb247CiAtICh2b2lkKWN1
c3RvbU1ldGhvZDsKIC0gKHZvaWQpY3VzdG9tTWV0aG9kV2l0aEFyZ3M6KGludClpbnRBcmcgc3Ry
QXJnOihOU1N0cmluZyAqKXN0ckFyZyBvYmpBcmc6KERPTVRlc3RPYmogKilvYmpBcmc7CmRpZmYg
LS1naXQgYS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9PYmpDL0RPTVRlc3RPYmoubW0g
Yi9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9PYmpDL0RPTVRlc3RPYmoubW0KaW5kZXgg
NjEyNTk3Zi4uYWMwNDIzNSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rl
c3QvT2JqQy9ET01UZXN0T2JqLm1tCisrKyBiL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0
L09iakMvRE9NVGVzdE9iai5tbQpAQCAtMzUsNiArMzUsNyBAQAogI2ltcG9ydCAiRE9NRXZlbnRJ
bnRlcm5hbC5oIgogI2ltcG9ydCAiRE9NSURCS2V5SW50ZXJuYWwuaCIKICNpbXBvcnQgIkRPTU5v
ZGVJbnRlcm5hbC5oIgorI2ltcG9ydCAiRE9NT3B0aW9uc09iamVjdEludGVybmFsLmgiCiAjaW1w
b3J0ICJET01TdHlsZVNoZWV0SW50ZXJuYWwuaCIKICNpbXBvcnQgIkRPTVRlc3RPYmpJbnRlcm5h
bC5oIgogI2ltcG9ydCAiRE9NbG9nSW50ZXJuYWwuaCIKQEAgLTQ1LDYgKzQ2LDcgQEAKICNpbXBv
cnQgIkpTTWFpblRocmVhZEV4ZWNTdGF0ZS5oIgogI2ltcG9ydCAiS1VSTC5oIgogI2ltcG9ydCAi
T2JqQ0V2ZW50TGlzdGVuZXIuaCIKKyNpbXBvcnQgIk9wdGlvbnNPYmplY3QuaCIKICNpbXBvcnQg
IlNlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5oIgogI2ltcG9ydCAiVGVzdE9iai5oIgogI2ltcG9ydCAi
VGhyZWFkQ2hlY2suaCIKQEAgLTUzMyw2ICs1MzUsMTIgQEAKICAgICBJTVBMLT5pZGJLZXkoY29y
ZShrZXkpKTsKIH0KIAorLSAodm9pZClvcHRpb25zT2JqZWN0OihET01PcHRpb25zT2JqZWN0ICop
b28gb29vOihET01PcHRpb25zT2JqZWN0ICopb29vCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhy
ZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIElNUEwtPm9wdGlvbnNPYmplY3QoY29yZShvbyksIGNv
cmUob29vKSk7Cit9CisKIC0gKHZvaWQpbWV0aG9kV2l0aEV4Y2VwdGlvbgogewogICAgIFdlYkNv
cmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvYmlu
ZGluZ3Mvc2NyaXB0cy90ZXN0L1Rlc3RPYmouaWRsIGIvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRz
L3Rlc3QvVGVzdE9iai5pZGwKaW5kZXggNTM3NTM0Yi4uYzBkMGU4OCAxMDA2NDQKLS0tIGEvV2Vi
Q29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVGVzdE9iai5pZGwKKysrIGIvV2ViQ29yZS9iaW5k
aW5ncy9zY3JpcHRzL3Rlc3QvVGVzdE9iai5pZGwKQEAgLTc0LDYgKzc0LDcgQEAgbW9kdWxlIHRl
c3QgewogCiAgICAgICAgIHZvaWQgc2VyaWFsaXplZFZhbHVlKGluIFNlcmlhbGl6ZWRTY3JpcHRW
YWx1ZSBzZXJpYWxpemVkQXJnKTsKICAgICAgICAgdm9pZCBpZGJLZXkoaW4gSURCS2V5IGtleSk7
CisgICAgICAgIHZvaWQgb3B0aW9uc09iamVjdChpbiBPcHRpb25zT2JqZWN0IG9vLCBpbiBbT3B0
aW9uYWxdIE9wdGlvbnNPYmplY3Qgb29vKTsKIAogICAgICAgICAvLyBFeGNlcHRpb25zCiAgICAg
ICAgIHZvaWQgbWV0aG9kV2l0aEV4Y2VwdGlvbigpIHJhaXNlcyhET01FeGNlcHRpb24pOwpkaWZm
IC0tZ2l0IGEvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0TWVkaWFRdWVy
eUxpc3RMaXN0ZW5lci5jcHAgYi9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRl
c3RNZWRpYVF1ZXJ5TGlzdExpc3RlbmVyLmNwcAppbmRleCBmMWM0ZTJiLi5hYjllNmRiIDEwMDY0
NAotLS0gYS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRlc3RNZWRpYVF1ZXJ5
TGlzdExpc3RlbmVyLmNwcAorKysgYi9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9W
OFRlc3RNZWRpYVF1ZXJ5TGlzdExpc3RlbmVyLmNwcApAQCAtNTcsNyArNTcsNyBAQCBzdGF0aWMg
djg6OlBlcnNpc3RlbnQ8djg6OkZ1bmN0aW9uVGVtcGxhdGU+IENvbmZpZ3VyZVY4VGVzdE1lZGlh
UXVlcnlMaXN0TGlzdGVuZQogewogICAgIHY4OjpMb2NhbDx2ODo6U2lnbmF0dXJlPiBkZWZhdWx0
U2lnbmF0dXJlID0gY29uZmlndXJlVGVtcGxhdGUoZGVzYywgIlRlc3RNZWRpYVF1ZXJ5TGlzdExp
c3RlbmVyIiwgdjg6OlBlcnNpc3RlbnQ8djg6OkZ1bmN0aW9uVGVtcGxhdGU+KCksIFY4VGVzdE1l
ZGlhUXVlcnlMaXN0TGlzdGVuZXI6OmludGVybmFsRmllbGRDb3VudCwKICAgICAgICAgMCwgMCwK
LSAgICAgICAgVGVzdE1lZGlhUXVlcnlMaXN0TGlzdGVuZXJDYWxsYmFja3MsIHNpemVvZihUZXN0
TWVkaWFRdWVyeUxpc3RMaXN0ZW5lckNhbGxiYWNrcykgLyBzaXplb2YoKlRlc3RNZWRpYVF1ZXJ5
TGlzdExpc3RlbmVyQ2FsbGJhY2tzKSk7CisgICAgICAgIFRlc3RNZWRpYVF1ZXJ5TGlzdExpc3Rl
bmVyQ2FsbGJhY2tzLCBXVEZfQVJSQVlfTEVOR1RIKFRlc3RNZWRpYVF1ZXJ5TGlzdExpc3RlbmVy
Q2FsbGJhY2tzKSk7CiAgICAgdjg6OkxvY2FsPHY4OjpPYmplY3RUZW1wbGF0ZT4gaW5zdGFuY2Ug
PSBkZXNjLT5JbnN0YW5jZVRlbXBsYXRlKCk7CiAgICAgdjg6OkxvY2FsPHY4OjpPYmplY3RUZW1w
bGF0ZT4gcHJvdG8gPSBkZXNjLT5Qcm90b3R5cGVUZW1wbGF0ZSgpOwogICAgIApkaWZmIC0tZ2l0
IGEvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0T2JqLmNwcCBiL1dlYkNv
cmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdE9iai5jcHAKaW5kZXggYzRhNzZhYy4u
ZTA2ZDNmMiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhU
ZXN0T2JqLmNwcAorKysgYi9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRlc3RP
YmouY3BwCkBAIC0yNSw2ICsyNSw3IEBACiAjaW5jbHVkZSAiSFRNTE5hbWVzLmgiCiAjaW5jbHVk
ZSAiSURCQmluZGluZ1V0aWxpdGllcy5oIgogI2luY2x1ZGUgIklEQktleS5oIgorI2luY2x1ZGUg
Ik9wdGlvbnNPYmplY3QuaCIKICNpbmNsdWRlICJSdW50aW1lRW5hYmxlZEZlYXR1cmVzLmgiCiAj
aW5jbHVkZSAiU2NyaXB0QXJndW1lbnRzLmgiCiAjaW5jbHVkZSAiU2NyaXB0Q2FsbFN0YWNrLmgi
CkBAIC03MjcsNiArNzI4LDIwIEBAIHN0YXRpYyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gaWRiS2V5
Q2FsbGJhY2soY29uc3Qgdjg6OkFyZ3VtZW50cyYgYXJncykKICAgICByZXR1cm4gdjg6OkhhbmRs
ZTx2ODo6VmFsdWU+KCk7CiB9CiAKK3N0YXRpYyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gb3B0aW9u
c09iamVjdENhbGxiYWNrKGNvbnN0IHY4OjpBcmd1bWVudHMmIGFyZ3MpCit7CisgICAgSU5DX1NU
QVRTKCJET00uVGVzdE9iai5vcHRpb25zT2JqZWN0Iik7CisgICAgVGVzdE9iaiogaW1wID0gVjhU
ZXN0T2JqOjp0b05hdGl2ZShhcmdzLkhvbGRlcigpKTsKKyAgICBFWENFUFRJT05fQkxPQ0soT3B0
aW9uc09iamVjdCwgb28sIGFyZ3NbMF0pOworICAgIGlmIChhcmdzLkxlbmd0aCgpIDw9IDEpIHsK
KyAgICAgICAgaW1wLT5vcHRpb25zT2JqZWN0KG9vKTsKKyAgICAgICAgcmV0dXJuIHY4OjpIYW5k
bGU8djg6OlZhbHVlPigpOworICAgIH0KKyAgICBFWENFUFRJT05fQkxPQ0soT3B0aW9uc09iamVj
dCwgb29vLCBhcmdzWzFdKTsKKyAgICBpbXAtPm9wdGlvbnNPYmplY3Qob28sIG9vbyk7CisgICAg
cmV0dXJuIHY4OjpIYW5kbGU8djg6OlZhbHVlPigpOworfQorCiBzdGF0aWMgdjg6OkhhbmRsZTx2
ODo6VmFsdWU+IG1ldGhvZFdpdGhFeGNlcHRpb25DYWxsYmFjayhjb25zdCB2ODo6QXJndW1lbnRz
JiBhcmdzKQogewogICAgIElOQ19TVEFUUygiRE9NLlRlc3RPYmoubWV0aG9kV2l0aEV4Y2VwdGlv
biIpOwpAQCAtMTIwMSw2ICsxMjE2LDcgQEAgc3RhdGljIGNvbnN0IEJhdGNoZWRDYWxsYmFjayBU
ZXN0T2JqQ2FsbGJhY2tzW10gPSB7CiAgICAgeyJvYmpNZXRob2QiLCBUZXN0T2JqSW50ZXJuYWw6
Om9iak1ldGhvZENhbGxiYWNrfSwKICAgICB7InNlcmlhbGl6ZWRWYWx1ZSIsIFRlc3RPYmpJbnRl
cm5hbDo6c2VyaWFsaXplZFZhbHVlQ2FsbGJhY2t9LAogICAgIHsiaWRiS2V5IiwgVGVzdE9iaklu
dGVybmFsOjppZGJLZXlDYWxsYmFja30sCisgICAgeyJvcHRpb25zT2JqZWN0IiwgVGVzdE9iaklu
dGVybmFsOjpvcHRpb25zT2JqZWN0Q2FsbGJhY2t9LAogICAgIHsibWV0aG9kV2l0aEV4Y2VwdGlv
biIsIFRlc3RPYmpJbnRlcm5hbDo6bWV0aG9kV2l0aEV4Y2VwdGlvbkNhbGxiYWNrfSwKICAgICB7
ImN1c3RvbU1ldGhvZCIsIFY4VGVzdE9iajo6Y3VzdG9tTWV0aG9kQ2FsbGJhY2t9LAogICAgIHsi
Y3VzdG9tTWV0aG9kV2l0aEFyZ3MiLCBWOFRlc3RPYmo6OmN1c3RvbU1ldGhvZFdpdGhBcmdzQ2Fs
bGJhY2t9LApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9iaW5kaW5ncy92OC9PcHRpb25zT2JqZWN0LmNw
cCBiL1dlYkNvcmUvYmluZGluZ3MvdjgvT3B0aW9uc09iamVjdC5jcHAKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMC4uZGRlNTExYQotLS0gL2Rldi9udWxsCisrKyBiL1dlYkNvcmUv
YmluZGluZ3MvdjgvT3B0aW9uc09iamVjdC5jcHAKQEAgLTAsMCArMSwxMDIgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFO
RCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAor
ICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
T1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04g
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisj
aW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiT3B0aW9uc09iamVjdC5oIgorI2luY2x1ZGUg
IlY4QmluZGluZy5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK09wdGlvbnNPYmplY3Q6Ok9w
dGlvbnNPYmplY3QoKQoreworfQorCitPcHRpb25zT2JqZWN0OjpPcHRpb25zT2JqZWN0KGNvbnN0
IHY4OjpMb2NhbDx2ODo6VmFsdWU+JiBvcHRpb25zKQorICAgIDogbV9vcHRpb25zKG9wdGlvbnMp
Cit7Cit9CisKK09wdGlvbnNPYmplY3Q6On5PcHRpb25zT2JqZWN0KCkKK3sKK30KKworT3B0aW9u
c09iamVjdCYgT3B0aW9uc09iamVjdDo6b3BlcmF0b3I9KGNvbnN0IE9wdGlvbnNPYmplY3QmIG9w
dGlvbnNPYmplY3QpCit7CisgICAgbV9vcHRpb25zID0gb3B0aW9uc09iamVjdC5tX29wdGlvbnM7
CisgICAgcmV0dXJuICp0aGlzOworfQorCitib29sIE9wdGlvbnNPYmplY3Q6OmlzVW5kZWZpbmVk
T3JOdWxsKCkgY29uc3QKK3sKKyAgICBpZiAobV9vcHRpb25zLklzRW1wdHkoKSkKKyAgICAgICAg
cmV0dXJuIHRydWU7CisgICAgcmV0dXJuIFdlYkNvcmU6OmlzVW5kZWZpbmVkT3JOdWxsKG1fb3B0
aW9ucyk7Cit9CisKK2Jvb2wgT3B0aW9uc09iamVjdDo6Z2V0S2V5Qm9vbChjb25zdCBTdHJpbmcm
IGtleSwgYm9vbCYgdmFsdWUpIGNvbnN0Cit7CisgICAgdjg6OkxvY2FsPHY4OjpWYWx1ZT4gdjhW
YWx1ZTsKKyAgICBpZiAoIWdldEtleShrZXksIHY4VmFsdWUpKQorICAgICAgICByZXR1cm4gZmFs
c2U7CisKKyAgICBpZiAoIXY4VmFsdWUtPklzQm9vbGVhbigpKQorICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgdjg6OkxvY2FsPHY4OjpCb29sZWFuPiB2OEJvb2wgPSB2OFZhbHVlLT5Ub0Jvb2xl
YW4oKTsKKyAgICBBU1NFUlQoIXY4Qm9vbC5Jc0VtcHR5KCkpOworCisgICAgdmFsdWUgPSB2OEJv
b2wtPlZhbHVlKCk7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgT3B0aW9uc09iamVjdDo6
Z2V0S2V5U3RyaW5nKGNvbnN0IFN0cmluZyYga2V5LCBTdHJpbmcmIHZhbHVlKSBjb25zdAorewor
ICAgIHY4OjpMb2NhbDx2ODo6VmFsdWU+IHY4VmFsdWU7CisgICAgaWYgKCFnZXRLZXkoa2V5LCB2
OFZhbHVlKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgaWYgKCF2OFZhbHVlLT5Jc1N0
cmluZygpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICB2YWx1ZSA9IHY4VmFsdWVUb1dl
YkNvcmVTdHJpbmcodjhWYWx1ZSk7CisgICAgQVNTRVJUKCF2YWx1ZS5pc0VtcHR5KCkpOworICAg
IHJldHVybiB0cnVlOworfQorCitib29sIE9wdGlvbnNPYmplY3Q6OmdldEtleShjb25zdCBTdHJp
bmcmIGtleSwgdjg6OkxvY2FsPHY4OjpWYWx1ZT4mIHZhbHVlKSBjb25zdAoreworICAgIGlmIChp
c1VuZGVmaW5lZE9yTnVsbCgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgdjg6OkxvY2Fs
PHY4OjpPYmplY3Q+IG9wdGlvbnMgPSBtX29wdGlvbnMtPlRvT2JqZWN0KCk7CisgICAgQVNTRVJU
KCFvcHRpb25zLklzRW1wdHkoKSk7CisKKyAgICB2ODo6SGFuZGxlPHY4OjpTdHJpbmc+IHY4S2V5
ID0gdjhTdHJpbmcoa2V5KTsKKyAgICBpZiAoIW9wdGlvbnMtPkhhcyh2OEtleSkpCisgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICB2YWx1ZSA9IG9wdGlvbnMtPkdldCh2OEtleSk7CisgICAgQVNT
RVJUKCF2YWx1ZS5Jc0VtcHR5KCkpOworICAgIHJldHVybiB0cnVlOworfQorCit9IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9XZWJDb3JlL2JpbmRpbmdzL3Y4L09wdGlvbnNPYmpl
Y3QuaCBiL1dlYkNvcmUvYmluZGluZ3MvdjgvT3B0aW9uc09iamVjdC5oCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRlMmY4MjEKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJDb3Jl
L2JpbmRpbmdzL3Y4L09wdGlvbnNPYmplY3QuaApAQCAtMCwwICsxLDYwIEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQg
SVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAq
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9S
IElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
CisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lm
bmRlZiBPcHRpb25zT2JqZWN0X2gKKyNkZWZpbmUgT3B0aW9uc09iamVjdF9oCisKKyNpbmNsdWRl
ICJQbGF0Zm9ybVN0cmluZy5oIgorI2luY2x1ZGUgPHY4Lmg+CisjaW5jbHVkZSA8d3RmL05vbkNv
cHlhYmxlLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgT3B0aW9uc09iamVjdCB7
CitwdWJsaWM6CisgICAgT3B0aW9uc09iamVjdCgpOworICAgIE9wdGlvbnNPYmplY3QoY29uc3Qg
djg6OkxvY2FsPHY4OjpWYWx1ZT4mIG9wdGlvbnMpOworICAgIH5PcHRpb25zT2JqZWN0KCk7CisK
KyAgICBPcHRpb25zT2JqZWN0JiBvcGVyYXRvcj0oY29uc3QgT3B0aW9uc09iamVjdCYpOworCisg
ICAgYm9vbCBpc1VuZGVmaW5lZE9yTnVsbCgpIGNvbnN0OworICAgIGJvb2wgZ2V0S2V5Qm9vbChj
b25zdCBTdHJpbmcmIGtleSwgYm9vbCYgdmFsdWUpIGNvbnN0OworICAgIGJvb2wgZ2V0S2V5U3Ry
aW5nKGNvbnN0IFN0cmluZyYga2V5LCBTdHJpbmcmIHZhbHVlKSBjb25zdDsKKworcHJpdmF0ZToK
KyAgICBib29sIGdldEtleShjb25zdCBTdHJpbmcmIGtleSwgdjg6OkxvY2FsPHY4OjpWYWx1ZT4m
KSBjb25zdDsKKworICAgIC8vIFRoaXMgb2JqZWN0IGNhbiBvbmx5IGJlIHVzZWQgc2FmZWx5IHdo
ZW4gc3RhY2sgYWxsb2NhdGVkIGJlY2F1c2Ugb2Ygdjg6OkxvY2FsLgorICAgIHN0YXRpYyB2b2lk
KiBvcGVyYXRvciBuZXcoc2l6ZV90KTsKKyAgICBzdGF0aWMgdm9pZCogb3BlcmF0b3IgbmV3W10o
c2l6ZV90KTsKKyAgICBzdGF0aWMgdm9pZCBvcGVyYXRvciBkZWxldGUodm9pZCAqKTsKKworICAg
IHY4OjpMb2NhbDx2ODo6VmFsdWU+IG1fb3B0aW9uczsKK307CisKK30KKworI2VuZGlmIC8vIE9w
dGlvbnNPYmplY3RfaApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9zdG9yYWdlL0lEQkRhdGFiYXNlLmNw
cCBiL1dlYkNvcmUvc3RvcmFnZS9JREJEYXRhYmFzZS5jcHAKaW5kZXggMTUzNmJhNy4uNzJmZjE3
ZCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9zdG9yYWdlL0lEQkRhdGFiYXNlLmNwcAorKysgYi9XZWJD
b3JlL3N0b3JhZ2UvSURCRGF0YWJhc2UuY3BwCkBAIC01NiwxMyArNTYsMTkgQEAgdm9pZCBJREJE
YXRhYmFzZTo6c2V0U2V0VmVyc2lvblRyYW5zYWN0aW9uKElEQlRyYW5zYWN0aW9uQmFja2VuZElu
dGVyZmFjZSogdHJhbnMKICAgICBtX3NldFZlcnNpb25UcmFuc2FjdGlvbiA9IHRyYW5zYWN0aW9u
OwogfQogCi1QYXNzUmVmUHRyPElEQk9iamVjdFN0b3JlPiBJREJEYXRhYmFzZTo6Y3JlYXRlT2Jq
ZWN0U3RvcmUoY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBTdHJpbmcmIGtleVBhdGgsIGJvb2wg
YXV0b0luY3JlbWVudCwgRXhjZXB0aW9uQ29kZSYgZWMpCitQYXNzUmVmUHRyPElEQk9iamVjdFN0
b3JlPiBJREJEYXRhYmFzZTo6Y3JlYXRlT2JqZWN0U3RvcmUoY29uc3QgU3RyaW5nJiBuYW1lLCBj
b25zdCBPcHRpb25zT2JqZWN0JiBvcHRpb25zLCBFeGNlcHRpb25Db2RlJiBlYykKIHsKICAgICBp
ZiAoIW1fc2V0VmVyc2lvblRyYW5zYWN0aW9uKSB7CiAgICAgICAgIGVjID0gSURCRGF0YWJhc2VF
eGNlcHRpb246Ok5PVF9BTExPV0VEX0VSUjsKICAgICAgICAgcmV0dXJuIDA7CiAgICAgfQogCisg
ICAgU3RyaW5nIGtleVBhdGg7CisgICAgb3B0aW9ucy5nZXRLZXlTdHJpbmcoImtleVBhdGgiLCBr
ZXlQYXRoKTsKKyAgICBib29sIGF1dG9JbmNyZW1lbnQgPSBmYWxzZTsKKyAgICBvcHRpb25zLmdl
dEtleUJvb2woImF1dG9JbmNyZW1lbnQiLCBhdXRvSW5jcmVtZW50KTsKKyAgICAvLyBGSVhNRTog
TG9vayB1cCBldmljdGFibGUgYW5kIHBhc3MgdGhhdCBvbiBhcyB3ZWxsLgorCiAgICAgUmVmUHRy
PElEQk9iamVjdFN0b3JlQmFja2VuZEludGVyZmFjZT4gb2JqZWN0U3RvcmUgPSBtX2JhY2tlbmQt
PmNyZWF0ZU9iamVjdFN0b3JlKG5hbWUsIGtleVBhdGgsIGF1dG9JbmNyZW1lbnQsIG1fc2V0VmVy
c2lvblRyYW5zYWN0aW9uLmdldCgpLCBlYyk7CiAgICAgaWYgKCFvYmplY3RTdG9yZSkgewogICAg
ICAgICAvLyBGSVhNRTogQVNTRVJUKGVjKSBvbmNlIFVOS05PV05fRVJSIGlzIG5vdCAwLgpkaWZm
IC0tZ2l0IGEvV2ViQ29yZS9zdG9yYWdlL0lEQkRhdGFiYXNlLmggYi9XZWJDb3JlL3N0b3JhZ2Uv
SURCRGF0YWJhc2UuaAppbmRleCBkZjU2ZjQ2Li4zZTMzNDcyIDEwMDY0NAotLS0gYS9XZWJDb3Jl
L3N0b3JhZ2UvSURCRGF0YWJhc2UuaAorKysgYi9XZWJDb3JlL3N0b3JhZ2UvSURCRGF0YWJhc2Uu
aApAQCAtMzEsNiArMzEsNyBAQAogI2luY2x1ZGUgIklEQkRhdGFiYXNlQmFja2VuZEludGVyZmFj
ZS5oIgogI2luY2x1ZGUgIklEQk9iamVjdFN0b3JlLmgiCiAjaW5jbHVkZSAiSURCVHJhbnNhY3Rp
b24uaCIKKyNpbmNsdWRlICJPcHRpb25zT2JqZWN0LmgiCiAjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQ
dHIuaD4KICNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgogI2luY2x1ZGUgPHd0Zi9SZWZQdHIu
aD4KQEAgLTU5LDEzICs2MCwxMiBAQCBwdWJsaWM6CiAgICAgUGFzc1JlZlB0cjxET01TdHJpbmdM
aXN0PiBvYmplY3RTdG9yZXMoKSBjb25zdCB7IHJldHVybiBtX2JhY2tlbmQtPm9iamVjdFN0b3Jl
cygpOyB9CiAKICAgICAvLyBGSVhNRTogVHJ5IHRvIG1vZGlmeSB0aGUgY29kZSBnZW5lcmF0b3Ig
c28gdGhpcyBpcyB1bm5lZWRlZC4KLSAgICBQYXNzUmVmUHRyPElEQk9iamVjdFN0b3JlPiBjcmVh
dGVPYmplY3RTdG9yZShjb25zdCBTdHJpbmcmIG5hbWUsIEV4Y2VwdGlvbkNvZGUmIGVjKSB7IHJl
dHVybiBjcmVhdGVPYmplY3RTdG9yZShuYW1lLCBTdHJpbmcoKSwgZWMpOyB9Ci0gICAgUGFzc1Jl
ZlB0cjxJREJPYmplY3RTdG9yZT4gY3JlYXRlT2JqZWN0U3RvcmUoY29uc3QgU3RyaW5nJiBuYW1l
LCBjb25zdCBTdHJpbmcmIGtleVBhdGgsIEV4Y2VwdGlvbkNvZGUmIGVjKSB7IHJldHVybiBjcmVh
dGVPYmplY3RTdG9yZShuYW1lLCBrZXlQYXRoLCBmYWxzZSwgZWMpOyB9CisgICAgUGFzc1JlZlB0
cjxJREJPYmplY3RTdG9yZT4gY3JlYXRlT2JqZWN0U3RvcmUoY29uc3QgU3RyaW5nJiBuYW1lLCBF
eGNlcHRpb25Db2RlJiBlYykgeyByZXR1cm4gY3JlYXRlT2JqZWN0U3RvcmUobmFtZSwgT3B0aW9u
c09iamVjdCgpLCBlYyk7IH0KICAgICBQYXNzUmVmUHRyPElEQlRyYW5zYWN0aW9uPiB0cmFuc2Fj
dGlvbihTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBFeGNlcHRpb25Db2RlJiBlYykg
eyByZXR1cm4gdHJhbnNhY3Rpb24oY29udGV4dCwgMCwgZWMpOyB9CiAgICAgUGFzc1JlZlB0cjxJ
REJUcmFuc2FjdGlvbj4gdHJhbnNhY3Rpb24oU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4
dCwgRE9NU3RyaW5nTGlzdCogc3RvcmVOYW1lcywgRXhjZXB0aW9uQ29kZSYgZWMpIHsgcmV0dXJu
IHRyYW5zYWN0aW9uKGNvbnRleHQsIHN0b3JlTmFtZXMsIElEQlRyYW5zYWN0aW9uOjpSRUFEX09O
TFksIGVjKTsgfQogICAgIFBhc3NSZWZQdHI8SURCVHJhbnNhY3Rpb24+IHRyYW5zYWN0aW9uKFNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIERPTVN0cmluZ0xpc3QqIHN0b3JlTmFtZXMs
IHVuc2lnbmVkIHNob3J0IG1vZGUsIEV4Y2VwdGlvbkNvZGUmIGVjKSB7IHJldHVybiB0cmFuc2Fj
dGlvbihjb250ZXh0LCBzdG9yZU5hbWVzLCBtb2RlLCAwLCBlYyk7IH0gLy8gRklYTUU6IHdoYXQg
c2hvdWxkIHRoZSBkZWZhdWx0IHRpbWVvdXQgYmU/CiAKLSAgICBQYXNzUmVmUHRyPElEQk9iamVj
dFN0b3JlPiBjcmVhdGVPYmplY3RTdG9yZShjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cmlu
ZyYga2V5UGF0aCwgYm9vbCBhdXRvSW5jcmVtZW50LCBFeGNlcHRpb25Db2RlJik7CisgICAgUGFz
c1JlZlB0cjxJREJPYmplY3RTdG9yZT4gY3JlYXRlT2JqZWN0U3RvcmUoY29uc3QgU3RyaW5nJiBu
YW1lLCBjb25zdCBPcHRpb25zT2JqZWN0JiwgRXhjZXB0aW9uQ29kZSYpOwogICAgIHZvaWQgcmVt
b3ZlT2JqZWN0U3RvcmUoY29uc3QgU3RyaW5nJiBuYW1lLCBFeGNlcHRpb25Db2RlJik7CiAgICAg
UGFzc1JlZlB0cjxJREJSZXF1ZXN0PiBzZXRWZXJzaW9uKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQq
LCBjb25zdCBTdHJpbmcmIHZlcnNpb24sIEV4Y2VwdGlvbkNvZGUmKTsKICAgICBQYXNzUmVmUHRy
PElEQlRyYW5zYWN0aW9uPiB0cmFuc2FjdGlvbihTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgRE9N
U3RyaW5nTGlzdCosIHVuc2lnbmVkIHNob3J0IG1vZGUsIHVuc2lnbmVkIGxvbmcgdGltZW91dCwg
RXhjZXB0aW9uQ29kZSYpOwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9zdG9yYWdlL0lEQkRhdGFiYXNl
LmlkbCBiL1dlYkNvcmUvc3RvcmFnZS9JREJEYXRhYmFzZS5pZGwKaW5kZXggMWFiNWIwYi4uYjA4
ZDQ1OSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9zdG9yYWdlL0lEQkRhdGFiYXNlLmlkbAorKysgYi9X
ZWJDb3JlL3N0b3JhZ2UvSURCRGF0YWJhc2UuaWRsCkBAIC0zMiw3ICszMiw3IEBAIG1vZHVsZSBz
dG9yYWdlIHsKICAgICAgICAgcmVhZG9ubHkgYXR0cmlidXRlIERPTVN0cmluZyB2ZXJzaW9uOwog
ICAgICAgICByZWFkb25seSBhdHRyaWJ1dGUgRE9NU3RyaW5nTGlzdCBvYmplY3RTdG9yZXM7CiAK
LSAgICAgICAgSURCT2JqZWN0U3RvcmUgY3JlYXRlT2JqZWN0U3RvcmUoaW4gRE9NU3RyaW5nIG5h
bWUsIGluIFtPcHRpb25hbCwgQ29udmVydE51bGxUb051bGxTdHJpbmddIERPTVN0cmluZyBrZXlQ
YXRoLCBpbiBbT3B0aW9uYWxdIGJvb2xlYW4gYXV0b0luY3JlbWVudCkKKyAgICAgICAgSURCT2Jq
ZWN0U3RvcmUgY3JlYXRlT2JqZWN0U3RvcmUoaW4gRE9NU3RyaW5nIG5hbWUsIGluIFtPcHRpb25h
bF0gT3B0aW9uc09iamVjdCBvcHRpb25zKQogICAgICAgICAgICAgcmFpc2VzIChJREJEYXRhYmFz
ZUV4Y2VwdGlvbik7CiAgICAgICAgIHZvaWQgcmVtb3ZlT2JqZWN0U3RvcmUoaW4gRE9NU3RyaW5n
IG5hbWUpCiAgICAgICAgICAgICByYWlzZXMgKElEQkRhdGFiYXNlRXhjZXB0aW9uKTsKZGlmZiAt
LWdpdCBhL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cgYi9XZWJLaXQvY2hyb21pdW0vQ2hhbmdl
TG9nCmluZGV4IDkxMmFiN2YuLmQ1ZGI4MzggMTAwNjQ0Ci0tLSBhL1dlYktpdC9jaHJvbWl1bS9D
aGFuZ2VMb2cKKysrIGIvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEzIEBA
CisyMDEwLTExLTI1ICBKZXJlbXkgT3Jsb3cgIDxqb3Jsb3dAY2hyb21pdW0ub3JnPgorCisgICAg
ICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFkZCBleGNlcHRpb24g
Y29kZSB0byBXZWJJREJUcmFuc2FjdGlvbjo6b2JqZWN0U3RvcmUKKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTUwMDMwCisKKyAgICAgICAgKiBwdWJsaWMv
V2ViSURCVHJhbnNhY3Rpb24uaDoKKyAgICAgICAgKFdlYktpdDo6V2ViSURCVHJhbnNhY3Rpb246
Om9iamVjdFN0b3JlKToKKwogMjAxMC0xMS0yNCAgU2F0aXNoIFNhbXBhdGggIDxzYXRpc2hAY2hy
b21pdW0ub3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5IFN0ZXZlIEJsb2NrLgpkaWZmIC0tZ2l0
IGEvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJJREJUcmFuc2FjdGlvbi5oIGIvV2ViS2l0L2No
cm9taXVtL3B1YmxpYy9XZWJJREJUcmFuc2FjdGlvbi5oCmluZGV4IGU3NWRlM2MuLjU4NGI2N2Eg
MTAwNjQ0Ci0tLSBhL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViSURCVHJhbnNhY3Rpb24uaAor
KysgYi9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYklEQlRyYW5zYWN0aW9uLmgKQEAgLTI2LDYg
KzI2LDcgQEAKICNpZm5kZWYgV2ViSURCVHJhbnNhY3Rpb25faAogI2RlZmluZSBXZWJJREJUcmFu
c2FjdGlvbl9oCiAKKyNpbmNsdWRlICJXZWJFeGNlcHRpb25Db2RlLmgiCiAjaW5jbHVkZSAiV2Vi
U3RyaW5nLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsgY2xhc3MgSURCVHJhbnNhY3Rpb25CYWNr
ZW5kSW50ZXJmYWNlOyB9CkBAIC00NSwxMCArNDYsMTUgQEAgcHVibGljOgogICAgICAgICBXRUJL
SVRfQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgIHJldHVybiAwOwogICAgIH0KKyAgICB2
aXJ0dWFsIFdlYklEQk9iamVjdFN0b3JlKiBvYmplY3RTdG9yZShjb25zdCBXZWJTdHJpbmcmIG5h
bWUsIFdlYkV4Y2VwdGlvbkNvZGUmKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG9iamVjdFN0b3Jl
KG5hbWUpOworICAgIH0KKyAgICAvLyBGSVhNRTogUmVtb3ZlIHRoaXMgYWZ0ZXIgV2ViS2l0IHJv
bGwuCiAgICAgdmlydHVhbCBXZWJJREJPYmplY3RTdG9yZSogb2JqZWN0U3RvcmUoY29uc3QgV2Vi
U3RyaW5nJiBuYW1lKQogICAgIHsKLSAgICAgICAgV0VCS0lUX0FTU0VSVF9OT1RfUkVBQ0hFRCgp
OwotICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgV2ViRXhjZXB0aW9uQ29kZSBlYzsKKyAgICAg
ICAgcmV0dXJuIG9iamVjdFN0b3JlKG5hbWUsIGVjKTsKICAgICB9CiAgICAgdmlydHVhbCB2b2lk
IGFib3J0KCkgeyBXRUJLSVRfQVNTRVJUX05PVF9SRUFDSEVEKCk7IH0KICAgICB2aXJ0dWFsIHZv
aWQgZGlkQ29tcGxldGVUYXNrRXZlbnRzKCkgeyBXRUJLSVRfQVNTRVJUX05PVF9SRUFDSEVEKCk7
IH0K
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>74858</attachid>
            <date>2010-11-25 04:57:14 -0800</date>
            <delta_ts>2010-11-25 05:33:23 -0800</delta_ts>
            <desc>updated</desc>
            <filename>a</filename>
            <type>text/plain</type>
            <size>40212</size>
            <attacher name="Jeremy Orlow">jorlow</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxv
ZwppbmRleCA2YjVmNzU5Li4xNzI0MDI4IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VM
b2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTQgQEAKKzIwMTAtMTEt
MjUgIEplcmVteSBPcmxvdyAgPGpvcmxvd0BjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQWRkIGFuIE9wdGlvbnNPYmplY3QgY2xh
c3MgZm9yIEluZGV4ZWREQiAoYW5kIGxhdGVyIEdlb2xvY2F0aW9uKQorICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTAwMzAKKworICAgICAgICAqIHN0b3Jh
Z2UvaW5kZXhlZGRiL2NyZWF0ZS1vYmplY3Qtc3RvcmUtb3B0aW9ucy1leHBlY3RlZC50eHQ6IEFk
ZGVkLgorICAgICAgICAqIHN0b3JhZ2UvaW5kZXhlZGRiL2NyZWF0ZS1vYmplY3Qtc3RvcmUtb3B0
aW9ucy5odG1sOiBBZGRlZC4KKyAgICAgICAgKiBzdG9yYWdlL2luZGV4ZWRkYi90dXRvcmlhbC5o
dG1sOgorCiAyMDEwLTExLTIzICBKZXJlbXkgT3Jsb3cgIDxqb3Jsb3dAY2hyb21pdW0ub3JnPgog
CiAgICAgICAgIFJldmlld2VkIGJ5IFN0ZXZlIEJsb2NrLgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVz
dHMvc3RvcmFnZS9pbmRleGVkZGIvY3JlYXRlLW9iamVjdC1zdG9yZS1vcHRpb25zLWV4cGVjdGVk
LnR4dCBiL0xheW91dFRlc3RzL3N0b3JhZ2UvaW5kZXhlZGRiL2NyZWF0ZS1vYmplY3Qtc3RvcmUt
b3B0aW9ucy1leHBlY3RlZC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4u
YWVjMzgxZgotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL3N0b3JhZ2UvaW5kZXhlZGRi
L2NyZWF0ZS1vYmplY3Qtc3RvcmUtb3B0aW9ucy1leHBlY3RlZC50eHQKQEAgLTAsMCArMSwyOSBA
QAorVGVzdCBJbmRleGVkREIncyBjcmVhdGVPYmplY3RTdG9yZSdzIHZhcmlvdXMgb3B0aW9ucwor
CitPbiBzdWNjZXNzLCB5b3Ugd2lsbCBzZWUgYSBzZXJpZXMgb2YgIlBBU1MiIG1lc3NhZ2VzLCBm
b2xsb3dlZCBieSAiVEVTVCBDT01QTEVURSIuCisKKworUEFTUyAnd2Via2l0SW5kZXhlZERCJyBp
biB3aW5kb3cgaXMgdHJ1ZQorUEFTUyB3ZWJraXRJbmRleGVkREIgPT0gbnVsbCBpcyBmYWxzZQor
d2Via2l0SW5kZXhlZERCLm9wZW4oJ25hbWUnLCAnZGVzY3JpcHRpb24nKQorUEFTUyAnb25zdWNj
ZXNzJyBpbiByZXN1bHQgaXMgdHJ1ZQorUEFTUyAnb25lcnJvcicgaW4gcmVzdWx0IGlzIHRydWUK
K1BBU1MgJ3JlYWR5U3RhdGUnIGluIHJlc3VsdCBpcyB0cnVlCitBbiBldmVudCBzaG91bGQgZmly
ZSBzaG9ydGx5Li4uCisKK2RiID0gZXZlbnQucmVzdWx0CityZXN1bHQgPSBkYi5zZXRWZXJzaW9u
KCd2ZXJzaW9uIDEnKQorRGVsZXRlZCBhbGwgb2JqZWN0IHN0b3Jlcy4KK2RiLmNyZWF0ZU9iamVj
dFN0b3JlKCdhJywge2tleVBhdGg6ICdhJ30pCitkYi5jcmVhdGVPYmplY3RTdG9yZSgnYicpCit0
cmFucyA9IGRiLnRyYW5zYWN0aW9uKFtdLCB3ZWJraXRJREJUcmFuc2FjdGlvbi5SRUFEX1dSSVRF
KQordHJhbnMub2JqZWN0U3RvcmUoJ2EnKS5wdXQoeydhJzogMH0pCit0cmFucy5vYmplY3RTdG9y
ZSgnYicpLnB1dCh7J2EnOiAwfSwgMCkKK3RyYW5zLm9iamVjdFN0b3JlKCdhJykuZ2V0KDApCitQ
QVNTIGV2ZW50LnJlc3VsdC5hIGlzIHthOiAwfQordHJhbnMub2JqZWN0U3RvcmUoJ2InKS5nZXQo
MCkKK1BBU1MgZXZlbnQucmVzdWx0LmEgaXMge2E6IDB9CitQQVNTIHN1Y2Nlc3NmdWxseVBhcnNl
ZCBpcyB0cnVlCisKK1RFU1QgQ09NUExFVEUKKwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvc3Rv
cmFnZS9pbmRleGVkZGIvY3JlYXRlLW9iamVjdC1zdG9yZS1vcHRpb25zLmh0bWwgYi9MYXlvdXRU
ZXN0cy9zdG9yYWdlL2luZGV4ZWRkYi9jcmVhdGUtb2JqZWN0LXN0b3JlLW9wdGlvbnMuaHRtbApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMjhkMmQyCi0tLSAvZGV2L251bGwK
KysrIGIvTGF5b3V0VGVzdHMvc3RvcmFnZS9pbmRleGVkZGIvY3JlYXRlLW9iamVjdC1zdG9yZS1v
cHRpb25zLmh0bWwKQEAgLTAsMCArMSw5MCBAQAorPGh0bWw+Cis8aGVhZD4KKzxsaW5rIHJlbD0i
c3R5bGVzaGVldCIgaHJlZj0iLi4vLi4vZmFzdC9qcy9yZXNvdXJjZXMvanMtdGVzdC1zdHlsZS5j
c3MiPgorPHNjcmlwdCBzcmM9Ii4uLy4uL2Zhc3QvanMvcmVzb3VyY2VzL2pzLXRlc3QtcHJlLmpz
Ij48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIuLi8uLi9mYXN0L2pzL3Jlc291cmNlcy9qcy10ZXN0
LXBvc3QtZnVuY3Rpb24uanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9InJlc291cmNlcy9zaGFy
ZWQuanMiPjwvc2NyaXB0PgorPC9oZWFkPgorPGJvZHk+Cis8cCBpZD0iZGVzY3JpcHRpb24iPjwv
cD4KKzxkaXYgaWQ9ImNvbnNvbGUiPjwvZGl2PgorPHNjcmlwdD4KKworZGVzY3JpcHRpb24oIlRl
c3QgSW5kZXhlZERCJ3MgY3JlYXRlT2JqZWN0U3RvcmUncyB2YXJpb3VzIG9wdGlvbnMiKTsKK2lm
ICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpCisgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIu
d2FpdFVudGlsRG9uZSgpOworCitmdW5jdGlvbiB0ZXN0KCkKK3sKKyAgICBzaG91bGRCZVRydWUo
Iid3ZWJraXRJbmRleGVkREInIGluIHdpbmRvdyIpOworICAgIHNob3VsZEJlRmFsc2UoIndlYmtp
dEluZGV4ZWREQiA9PSBudWxsIik7CisKKyAgICByZXN1bHQgPSBldmFsQW5kTG9nKCJ3ZWJraXRJ
bmRleGVkREIub3BlbignbmFtZScsICdkZXNjcmlwdGlvbicpIik7CisgICAgdmVyaWZ5UmVzdWx0
KHJlc3VsdCk7CisgICAgcmVzdWx0Lm9uc3VjY2VzcyA9IG9wZW5TdWNjZXNzOworICAgIHJlc3Vs
dC5vbmVycm9yID0gdW5leHBlY3RlZEVycm9yQ2FsbGJhY2s7Cit9CisKK2Z1bmN0aW9uIG9wZW5T
dWNjZXNzKCkKK3sKKyAgICBkYiA9IGV2YWxBbmRMb2coImRiID0gZXZlbnQucmVzdWx0Iik7CisK
KyAgICByZXN1bHQgPSBldmFsQW5kTG9nKCJyZXN1bHQgPSBkYi5zZXRWZXJzaW9uKCd2ZXJzaW9u
IDEnKSIpOworICAgIHJlc3VsdC5vbnN1Y2Nlc3MgPSBjbGVhbkRhdGFiYXNlOworICAgIHJlc3Vs
dC5vbmVycm9yID0gdW5leHBlY3RlZEVycm9yQ2FsbGJhY2s7Cit9CisKK2Z1bmN0aW9uIGNsZWFu
RGF0YWJhc2UoKQoreworICAgIGRlbGV0ZUFsbE9iamVjdFN0b3JlcyhkYiwgY2xlYW5lZCk7Cit9
CisKK2Z1bmN0aW9uIGNsZWFuZWQoKQoreworICAgIGV2YWxBbmRMb2coImRiLmNyZWF0ZU9iamVj
dFN0b3JlKCdhJywge2tleVBhdGg6ICdhJ30pIik7CisgICAgZXZhbEFuZExvZygiZGIuY3JlYXRl
T2JqZWN0U3RvcmUoJ2InKSIpOworCisgICAgdHJhbnMgPSBldmFsQW5kTG9nKCJ0cmFucyA9IGRi
LnRyYW5zYWN0aW9uKFtdLCB3ZWJraXRJREJUcmFuc2FjdGlvbi5SRUFEX1dSSVRFKSIpOworCisg
ICAgcmVxID0gZXZhbEFuZExvZygidHJhbnMub2JqZWN0U3RvcmUoJ2EnKS5wdXQoeydhJzogMH0p
Iik7CisgICAgcmVxLm9uc3VjY2VzcyA9IHB1dEI7CisgICAgcmVxLm9uZXJyb3IgPSB1bmV4cGVj
dGVkRXJyb3JDYWxsYmFjazsKK30KKworZnVuY3Rpb24gcHV0QigpCit7CisgICAgcmVxID0gZXZh
bEFuZExvZygidHJhbnMub2JqZWN0U3RvcmUoJ2InKS5wdXQoeydhJzogMH0sIDApIik7ICAvLyBP
T1BTCisgICAgcmVxLm9uc3VjY2VzcyA9IGdldEE7CisgICAgcmVxLm9uZXJyb3IgPSB1bmV4cGVj
dGVkRXJyb3JDYWxsYmFjazsKK30KKworZnVuY3Rpb24gZ2V0QSgpCit7CisgICAgcmVxID0gZXZh
bEFuZExvZygidHJhbnMub2JqZWN0U3RvcmUoJ2EnKS5nZXQoMCkiKTsKKyAgICByZXEub25zdWNj
ZXNzID0gZ2V0QjsKKyAgICByZXEub25lcnJvciA9IHVuZXhwZWN0ZWRFcnJvckNhbGxiYWNrOwor
fQorCitmdW5jdGlvbiBnZXRCKCkKK3sKKyAgICBzaG91bGRCZSgiZXZlbnQucmVzdWx0LmEiLCAi
e2E6IDB9Iik7CisKKyAgICByZXEgPSBldmFsQW5kTG9nKCJ0cmFucy5vYmplY3RTdG9yZSgnYicp
LmdldCgwKSIpOworICAgIHJlcS5vbnN1Y2Nlc3MgPSBjaGVja0I7CisgICAgcmVxLm9uZXJyb3Ig
PSB1bmV4cGVjdGVkRXJyb3JDYWxsYmFjazsKK30KKworZnVuY3Rpb24gY2hlY2tCKCkKK3sKKyAg
ICBzaG91bGRCZSgiZXZlbnQucmVzdWx0LmEiLCAie2E6IDB9Iik7CisKKyAgICBkb25lKCk7Cit9
CisKK3ZhciBzdWNjZXNzZnVsbHlQYXJzZWQgPSB0cnVlOworCit0ZXN0KCk7CisKKzwvc2NyaXB0
PgorPC9ib2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvc3RvcmFnZS9pbmRl
eGVkZGIvdHV0b3JpYWwuaHRtbCBiL0xheW91dFRlc3RzL3N0b3JhZ2UvaW5kZXhlZGRiL3R1dG9y
aWFsLmh0bWwKaW5kZXggZGI5ZjJmYS4uMzU3ODg0OCAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMv
c3RvcmFnZS9pbmRleGVkZGIvdHV0b3JpYWwuaHRtbAorKysgYi9MYXlvdXRUZXN0cy9zdG9yYWdl
L2luZGV4ZWRkYi90dXRvcmlhbC5odG1sCkBAIC0xNTAsMTMgKzE1MCwyNSBAQCBmdW5jdGlvbiBv
blNldFZlcnNpb24oKQogICAgIC8vIGEgbnVtYmVyIGF0dHJpYnV0ZSBhbmQgYXQgbGVhc3Qgb25l
IHNpYmxpbmcpLiBZb3UgY2FuIGV2ZW4gZ28gd2lsZCBhbmQgc2F5CiAgICAgLy8gImZvb1swXVsy
XS5iYXJbMF0uYmF6LnRlc3RbMV1bMl1bM10iLiBJdCdzIHBvc3NpYmxlIHRoaXMgd2lsbCBjaGFu
Z2UgaW4gdGhlIGZ1dHVyZSB0aG91Z2guCiAgICAgLy8KLSAgICAvLyBJZiB5b3Ugc2V0IGF1dG9J
bmNyZW1lbnQgKHRoZSB0aGlyZCBvcHRpb25hbCBwYXJhbWV0ZXIpLCBJbmRleGVkREIgd2lsbCBn
ZW5lcmF0ZSBhIGtleQorICAgIC8vIElmIHlvdSBzZXQgYXV0b0luY3JlbWVudCAoYW5vdGhlciBv
cHRpb25hbCBwYXJhbWV0ZXIpLCBJbmRleGVkREIgd2lsbCBnZW5lcmF0ZSBhIGtleQogICAgIC8v
IGZvciB5b3VyIGVudHJ5IGF1dG9tYXRpY2FsbHkuIEFuZCBpZiB5b3UgaGF2ZSBhIGtleVBhdGgg
c2V0LCBpdCdsbCBzZXQgdGhlIHZhbHVlIGF0CiAgICAgLy8gdGhlIGxvY2F0aW9uIG9mIHRoZSBr
ZXlQYXRoIF9pbiB0aGUgZGF0YWJhc2VfIChpLmUuIGl0IHdpbGwgbm90IG1vZGlmeSB0aGUgdmFs
dWUgeW91IHBhc3MKICAgICAvLyBpbiB0byBwdXQvYWRkKS4gVW5mb3J0dW5hdGVseSBhdXRvSW5j
cmVtZW50IGlzIG5vdCB5ZXQgaW1wbGVtZW50ZWQgaW4gQ2hyb21pdW0vV2ViS2l0LgogICAgIC8v
CisgICAgLy8gQW5vdGhlciBvcHRpb25hbCBwYXJhbWV0ZXIsICJldmljdGFibGUiIGlzIG5vdCB5
ZXQgaW1wbGVtZW50ZWQuIFdoZW4gaXQgaXMsIGl0J2xsIGhpbnQKKyAgICAvLyB3aGljaCBkYXRh
IHNob3VsZCBiZSBkZWxldGVkIGZpcnN0IGlmIHRoZSBicm93c2VyIGRlY2lkZXMgdGhpcyBvcmln
aW4gaXMgdXNpbmcgdG9vIG11Y2gKKyAgICAvLyBzdG9yYWdlLiAoVGhlIGFsdGVybmF0aXZlIGlz
IHRoYXQgaXQnbGwgc3VnZ2VzdCB0aGUgdXNlciBkZWxldGUgZXZlcnl0aGluZyBmcm9tIHRoZQor
ICAgIC8vIG9yaWdpbiwgc28gaXQncyBpbiB5b3VyIGZhdm9yIHRvIHNldCBpdCBhcHByb3BlcmF0
ZWx5ISkgVGhpcyBpcyBncmVhdCBmb3Igd2hlbiB5b3UgaGF2ZQorICAgIC8vIHNvbWUgYWJzb2x1
dGVseSBjcml0aWNhbCBkYXRhIChsaWtlIHVuc2V0IGVtYWlscykgYW5kIGEgYnVuY2ggb2YgbGVz
cyBjcml0aWNhbCwgKGJ1dAorICAgIC8vIG1heWJlIHN0aWxsIGltcG9ydGFudCEpIGRhdGEuCisg
ICAgLy8KKyAgICAvLyBBbGwgb2YgdGhlc2Ugb3B0aW9ucyBjYW4gYmUgcGFzc2VkIGludG8gY3Jl
YXRlT2JqZWN0U3RvcmUgdmlhIGl0cyAob3B0aW9uYWwpIHNlY29uZAorICAgIC8vIHBhcmFtZXRl
ci4gU28sIGlmIHlvdSB3YW50ZWQgdG8gZGVmaW5lIGFsbCwgWW91J2QgZG8ge2tleVBhdGg6ICJz
b21ldGhpbmciLAorICAgIC8vIGV2aWN0YWJsZTogdHJ1ZSwgYXV0b0luY3JlbWVudDogdHJ1ZX0u
IFlvdSBjYW4gYWxzbyBwYXNzIGluIHN1YnNldHMgb2YgYWxsIHRocmVlIG9yCisgICAgLy8gb21p
dCB0aGUgb2JqZWN0IChzaW5jZSBpdCdzIG9wdGlvbmFsKS4KKyAgICAvLwogICAgIC8vIExldCdz
IG5vdyBjcmVhdGUgYW4gb2JqZWN0U3RvcmUgZm9yIHBlb3BsZS4gV2UnbGwgc3VwcGx5IGEga2V5
IHBhdGggaW4gdGhpcyBjYXNlLgotICAgIHZhciBvYmplY3RTdG9yZSA9IGRiLmNyZWF0ZU9iamVj
dFN0b3JlKCJwZW9wbGUiLCAiaWQiKTsKKyAgICB2YXIgb2JqZWN0U3RvcmUgPSBkYi5jcmVhdGVP
YmplY3RTdG9yZSgicGVvcGxlIiwge2tleVBhdGg6ICJpZCJ9KTsKIAogICAgIC8vIE5vdGljZSB0
aGF0IGl0IHJldHVybmVkIHN5bmNocm9ub3VzbHkuIFRoZSBydWxlIG9mIHRodW1iIGlzIHRoYXQg
YW55IGNhbGwgdGhhdCB0b3VjaGVzIChpbgogICAgIC8vIGFueSB3YXkpIGtleXMgb3IgdmFsdWVz
IGlzIGFzeW5jaHJvbm91cyBhbmQgYW55IG90aGVyIGNhbGwgKGJlc2lkZXMgc2V0VmVyc2lvbiBh
bmQgb3BlbikgYXJlCmRpZmYgLS1naXQgYS9XZWJDb3JlL0NoYW5nZUxvZyBiL1dlYkNvcmUvQ2hh
bmdlTG9nCmluZGV4IGQ3NmYwYzguLmY2ODg2NDMgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvQ2hhbmdl
TG9nCisrKyBiL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNTggQEAKKzIwMTAtMTEtMjUg
IEplcmVteSBPcmxvdyAgPGpvcmxvd0BjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQWRkIGFuIE9wdGlvbnNPYmplY3QgY2xhc3Mg
Zm9yIEluZGV4ZWREQiAoYW5kIGxhdGVyIEdlb2xvY2F0aW9uKQorICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTAwMzAKKworICAgICAgICBHZW9sb2NhdGlv
biBhbmQgSW5kZXhlZERCIGJvdGggaGF2ZSB0aGUgY29uY2VwdCBvZiBhbiBvcHRpb25hbAorICAg
ICAgICBwYXJhbWV0ZXIgdGhhdCBoYXMgdmFyaW91cyBvcHRpb25zIHN1cHBsaWVkIHdpdGggaXQu
ICBJbgorICAgICAgICBHZW9sb2NhdGlvbiB0aGlzIHdhcyBkb25lIHdpdGggY3VzdG9tIGJpbmRp
bmdzLCBidXQgSSdtIHRyeWluZyB0bworICAgICAgICBhdm9pZCB0aGF0IGZvciBJbmRleGVkREIu
ICAKKworICAgICAgICBUaGlzIGZpcnN0IHBhdGNoIGltcGxlbWVudHMgaXQgaW4gVjggYW5kIG1h
a2VzIGNyZWF0ZU9iamVjdFN0b3JlIHVzZSBpdC4KKyAgICAgICAgVGhlIG5leHQgcGF0Y2ggd2ls
bCBjb3ZlciBHZW9sb2NhdGlvbiBhbmQgSlNDLgorCisgICAgICAgIFRlc3Q6IHN0b3JhZ2UvaW5k
ZXhlZGRiL2NyZWF0ZS1vYmplY3Qtc3RvcmUtb3B0aW9ucy5odG1sCisKKyAgICAgICAgKiBXZWJD
b3JlLmd5cGk6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9yVjgucG06
CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0NQUC9XZWJET01UZXN0T2JqLmNwcDoK
KyAgICAgICAgKFdlYkRPTVRlc3RPYmo6Om9wdGlvbnNPYmplY3QpOgorICAgICAgICAqIGJpbmRp
bmdzL3NjcmlwdHMvdGVzdC9DUFAvV2ViRE9NVGVzdE9iai5oOgorICAgICAgICAqIGJpbmRpbmdz
L3NjcmlwdHMvdGVzdC9HT2JqZWN0L1dlYktpdERPTVRlc3RDYWxsYmFjay5jcHA6CisgICAgICAg
ICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0dPYmplY3QvV2ViS2l0RE9NVGVzdEludGVyZmFjZS5j
cHA6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0dPYmplY3QvV2ViS2l0RE9NVGVz
dE1lZGlhUXVlcnlMaXN0TGlzdGVuZXIuY3BwOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMv
dGVzdC9HT2JqZWN0L1dlYktpdERPTVRlc3RPYmouY3BwOgorICAgICAgICAod2Via2l0X2RvbV90
ZXN0X29ial9vcHRpb25zX29iamVjdCk6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0
L0dPYmplY3QvV2ViS2l0RE9NVGVzdE9iai5oOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMv
dGVzdC9KUy9KU1Rlc3RPYmouY3BwOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0T2JqUHJvdG90
eXBlRnVuY3Rpb25PcHRpb25zT2JqZWN0KToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rl
c3QvSlMvSlNUZXN0T2JqLmg6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L09iakMv
RE9NVGVzdE9iai5oOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9PYmpDL0RPTVRl
c3RPYmoubW06CisgICAgICAgICgtW0RPTVRlc3RPYmogb3B0aW9uc09iamVjdDpvb286XSk6Cisg
ICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Rlc3RPYmouaWRsOgorICAgICAgICAqIGJp
bmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRlc3RNZWRpYVF1ZXJ5TGlzdExpc3RlbmVyLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkNvbmZpZ3VyZVY4VGVzdE1lZGlhUXVlcnlMaXN0TGlzdGVuZXJU
ZW1wbGF0ZSk6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdE9iai5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpUZXN0T2JqSW50ZXJuYWw6Om9wdGlvbnNPYmplY3RDYWxs
YmFjayk6CisgICAgICAgICogYmluZGluZ3MvdjgvT3B0aW9uc09iamVjdC5jcHA6IEFkZGVkLgor
ICAgICAgICAoV2ViQ29yZTo6T3B0aW9uc09iamVjdDo6T3B0aW9uc09iamVjdCk6CisgICAgICAg
IChXZWJDb3JlOjpPcHRpb25zT2JqZWN0Ojp+T3B0aW9uc09iamVjdCk6CisgICAgICAgIChXZWJD
b3JlOjpPcHRpb25zT2JqZWN0OjpvcGVyYXRvcj0pOgorICAgICAgICAoV2ViQ29yZTo6T3B0aW9u
c09iamVjdDo6dW5kZWZpbmVkT3JOdWxsKToKKyAgICAgICAgKFdlYkNvcmU6Ok9wdGlvbnNPYmpl
Y3Q6OmdldEtleUJvb2wpOgorICAgICAgICAoV2ViQ29yZTo6T3B0aW9uc09iamVjdDo6Z2V0S2V5
U3RyaW5nKToKKyAgICAgICAgKFdlYkNvcmU6Ok9wdGlvbnNPYmplY3Q6OmdldEtleSk6CisgICAg
ICAgICogYmluZGluZ3MvdjgvT3B0aW9uc09iamVjdC5oOgorICAgICAgICAqIGJpbmRpbmdzL2pz
L09wdGlvbnNPYmplY3QuaDoKKyAgICAgICAgKiBzdG9yYWdlL0lEQkRhdGFiYXNlLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OklEQkRhdGFiYXNlOjpjcmVhdGVPYmplY3RTdG9yZSk6CisgICAgICAg
ICogc3RvcmFnZS9JREJEYXRhYmFzZS5oOgorICAgICAgICAoV2ViQ29yZTo6SURCRGF0YWJhc2U6
OmNyZWF0ZU9iamVjdFN0b3JlKToKKyAgICAgICAgKiBzdG9yYWdlL0lEQkRhdGFiYXNlLmlkbDoK
KwogMjAxMC0xMS0yMyAgSmVyZW15IE9ybG93ICA8am9ybG93QGNocm9taXVtLm9yZz4KIAogICAg
ICAgICBSZXZpZXdlZCBieSBTdGV2ZSBCbG9jay4KZGlmZiAtLWdpdCBhL1dlYkNvcmUvV2ViQ29y
ZS5neXBpIGIvV2ViQ29yZS9XZWJDb3JlLmd5cGkKaW5kZXggMmM4MTdjYi4uNTgyMzUyZiAxMDA2
NDQKLS0tIGEvV2ViQ29yZS9XZWJDb3JlLmd5cGkKKysrIGIvV2ViQ29yZS9XZWJDb3JlLmd5cGkK
QEAgLTc0NCw2ICs3NDQsOCBAQAogICAgICAgICAgICAgJ2JpbmRpbmdzL3Y4L0NoaWxkVGhyZWFk
RE9NRGF0YS5oJywKICAgICAgICAgICAgICdiaW5kaW5ncy92OC9JREJCaW5kaW5nVXRpbGl0aWVz
LmNwcCcsCiAgICAgICAgICAgICAnYmluZGluZ3MvdjgvSURCQmluZGluZ1V0aWxpdGllcy5oJywK
KyAgICAgICAgICAgICdiaW5kaW5ncy92OC9PcHRpb25zT2JqZWN0LmNwcCcsCisgICAgICAgICAg
ICAnYmluZGluZ3MvdjgvT3B0aW9uc09iamVjdC5oJywKICAgICAgICAgICAgICdiaW5kaW5ncy92
OC9jdXN0b20vVjhDYW52YXNQaXhlbEFycmF5Q3VzdG9tLmNwcCcsCiAgICAgICAgICAgICAnYmlu
ZGluZ3MvdjgvY3VzdG9tL1Y4QXJyYXlCdWZmZXJWaWV3Q3VzdG9tLmgnLAogICAgICAgICAgICAg
J2JpbmRpbmdzL3Y4L2N1c3RvbS9WOEFycmF5QnVmZmVyQ3VzdG9tLmNwcCcsCmRpZmYgLS1naXQg
YS9XZWJDb3JlL2JpbmRpbmdzL2pzL09wdGlvbnNPYmplY3QuaCBiL1dlYkNvcmUvYmluZGluZ3Mv
anMvT3B0aW9uc09iamVjdC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM0
OTEwYzAKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJDb3JlL2JpbmRpbmdzL2pzL09wdGlvbnNPYmpl
Y3QuaApAQCAtMCwwICsxLDMxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMi
IEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBPcHRpb25zT2JqZWN0X2gKKyNk
ZWZpbmUgT3B0aW9uc09iamVjdF9oCisKKy8vIEZJWE1FOiBJbXBsZW1lbnQuCisKKyNlbmRpZiAv
LyBPcHRpb25zT2JqZWN0X2gKZGlmZiAtLWdpdCBhL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9D
b2RlR2VuZXJhdG9yVjgucG0gYi9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRv
clY4LnBtCmluZGV4IDdlYTRjNjMuLjE5NmJhOTIgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvYmluZGlu
Z3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9yVjgucG0KKysrIGIvV2ViQ29yZS9iaW5kaW5ncy9zY3Jp
cHRzL0NvZGVHZW5lcmF0b3JWOC5wbQpAQCAtMjgwNiw2ICsyODA2LDcgQEAgc3ViIEdldE5hdGl2
ZVR5cGUKICAgICByZXR1cm4gIk5vZGUqIiBpZiAkdHlwZSBlcSAiRXZlbnRUYXJnZXQiIGFuZCAk
aXNQYXJhbWV0ZXI7CiAgICAgcmV0dXJuICJkb3VibGUiIGlmICR0eXBlIGVxICJEYXRlIjsKICAg
ICByZXR1cm4gIlNjcmlwdFZhbHVlIiBpZiAkdHlwZSBlcSAiRE9NT2JqZWN0IjsKKyAgICByZXR1
cm4gIk9wdGlvbnNPYmplY3QiIGlmICR0eXBlIGVxICJPcHRpb25zT2JqZWN0IjsKIAogICAgIHJl
dHVybiAiU3RyaW5nIiBpZiAkdHlwZSBlcSAiRE9NVXNlckRhdGEiOyAgIyBGSVhNRTogVGVtcG9y
YXJ5IGhhY2s/CiAKQEAgLTI4ODksNiArMjg5MCwxMSBAQCBzdWIgSlNWYWx1ZVRvTmF0aXZlCiAg
ICAgICAgIHJldHVybiAiY3JlYXRlSURCS2V5RnJvbVZhbHVlKCR2YWx1ZSkiOwogICAgIH0KIAor
ICAgIGlmICgkdHlwZSBlcSAiT3B0aW9uc09iamVjdCIpIHsKKyAgICAgICAgJGltcGxJbmNsdWRl
c3siT3B0aW9uc09iamVjdC5oIn0gPSAxOworICAgICAgICByZXR1cm4gJHZhbHVlOworICAgIH0K
KwogICAgIGlmICgkdHlwZSBlcSAiRE9NT2JqZWN0IikgewogICAgICAgICAkaW1wbEluY2x1ZGVz
eyJTY3JpcHRWYWx1ZS5oIn0gPSAxOwogICAgICAgICByZXR1cm4gIlNjcmlwdFZhbHVlKCR2YWx1
ZSkiOwpAQCAtMzAzNCw2ICszMDQwLDcgQEAgbXkgJW5vbl93cmFwcGVyX3R5cGVzID0gKAogICAg
ICdOb2RlRmlsdGVyJyA9PiAxLAogICAgICdFdmVudExpc3RlbmVyJyA9PiAxLAogICAgICdJREJL
ZXknID0+IDEsCisgICAgJ09wdGlvbnNPYmplY3QnID0+IDEsCiAgICAgJ0RhdGUnID0+IDEsCiAg
ICAgJ01lZGlhUXVlcnlMaXN0TGlzdGVuZXInID0+IDEKICk7CmRpZmYgLS1naXQgYS9XZWJDb3Jl
L2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9DUFAvV2ViRE9NVGVzdE9iai5jcHAgYi9XZWJDb3JlL2Jp
bmRpbmdzL3NjcmlwdHMvdGVzdC9DUFAvV2ViRE9NVGVzdE9iai5jcHAKaW5kZXggOWE4ZDkwOS4u
ODE5YzdjZiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvQ1BQL1dl
YkRPTVRlc3RPYmouY3BwCisrKyBiL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0NQUC9X
ZWJET01UZXN0T2JqLmNwcApAQCAtMjQsOSArMjQsMTEgQEAKICNpbmNsdWRlICJIVE1MTmFtZXMu
aCIKICNpbmNsdWRlICJJREJLZXkuaCIKICNpbmNsdWRlICJLVVJMLmgiCisjaW5jbHVkZSAiT3B0
aW9uc09iamVjdC5oIgogI2luY2x1ZGUgIlNlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5oIgogI2luY2x1
ZGUgIlRlc3RPYmouaCIKICNpbmNsdWRlICJXZWJET01JREJLZXkuaCIKKyNpbmNsdWRlICJXZWJE
T01PcHRpb25zT2JqZWN0LmgiCiAjaW5jbHVkZSAiV2ViRE9NU3RyaW5nLmgiCiAjaW5jbHVkZSAi
V2ViRXhjZXB0aW9uSGFuZGxlci5oIgogI2luY2x1ZGUgIldlYk5hdGl2ZUV2ZW50TGlzdGVuZXIu
aCIKQEAgLTY2Miw2ICs2NjQsMTQgQEAgdm9pZCBXZWJET01UZXN0T2JqOjppZGJLZXkoY29uc3Qg
V2ViRE9NSURCS2V5JiBrZXkpCiAgICAgaW1wbCgpLT5pZGJLZXkodG9XZWJDb3JlKGtleSkpOwog
fQogCit2b2lkIFdlYkRPTVRlc3RPYmo6Om9wdGlvbnNPYmplY3QoY29uc3QgV2ViRE9NT3B0aW9u
c09iamVjdCYgb28sIGNvbnN0IFdlYkRPTU9wdGlvbnNPYmplY3QmIG9vbykKK3sKKyAgICBpZiAo
IWltcGwoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgaW1wbCgpLT5vcHRpb25zT2JqZWN0KHRv
V2ViQ29yZShvbyksIHRvV2ViQ29yZShvb28pKTsKK30KKwogdm9pZCBXZWJET01UZXN0T2JqOjpt
ZXRob2RXaXRoRXhjZXB0aW9uKCkKIHsKICAgICBpZiAoIWltcGwoKSkKZGlmZiAtLWdpdCBhL1dl
YkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0NQUC9XZWJET01UZXN0T2JqLmggYi9XZWJDb3Jl
L2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9DUFAvV2ViRE9NVGVzdE9iai5oCmluZGV4IGYyOWI3ZGMu
LjBiMzU5M2QgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0NQUC9X
ZWJET01UZXN0T2JqLmgKKysrIGIvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvQ1BQL1dl
YkRPTVRlc3RPYmouaApAQCAtMzIsNiArMzIsNyBAQCBjbGFzcyBUZXN0T2JqOwogCiBjbGFzcyBX
ZWJET01FdmVudExpc3RlbmVyOwogY2xhc3MgV2ViRE9NSURCS2V5OworY2xhc3MgV2ViRE9NT3B0
aW9uc09iamVjdDsKIGNsYXNzIFdlYkRPTVN0cmluZzsKIGNsYXNzIFdlYkRPTVRlc3RPYmo7CiAK
QEAgLTEzNiw2ICsxMzcsNyBAQCBwdWJsaWM6CiAgICAgV2ViRE9NVGVzdE9iaiBtZXRob2RUaGF0
UmVxdWlyZXNBbGxBcmdzQW5kVGhyb3dzKGNvbnN0IFdlYkRPTVN0cmluZyYgc3RyQXJnLCBjb25z
dCBXZWJET01UZXN0T2JqJiBvYmpBcmcpOwogICAgIHZvaWQgc2VyaWFsaXplZFZhbHVlKGNvbnN0
IFdlYkRPTVN0cmluZyYgc2VyaWFsaXplZEFyZyk7CiAgICAgdm9pZCBpZGJLZXkoY29uc3QgV2Vi
RE9NSURCS2V5JiBrZXkpOworICAgIHZvaWQgb3B0aW9uc09iamVjdChjb25zdCBXZWJET01PcHRp
b25zT2JqZWN0JiBvbywgY29uc3QgV2ViRE9NT3B0aW9uc09iamVjdCYgb29vKTsKICAgICB2b2lk
IG1ldGhvZFdpdGhFeGNlcHRpb24oKTsKICAgICB2b2lkIGN1c3RvbU1ldGhvZCgpOwogICAgIHZv
aWQgY3VzdG9tTWV0aG9kV2l0aEFyZ3MoaW50IGludEFyZywgY29uc3QgV2ViRE9NU3RyaW5nJiBz
dHJBcmcsIGNvbnN0IFdlYkRPTVRlc3RPYmomIG9iakFyZyk7CmRpZmYgLS1naXQgYS9XZWJDb3Jl
L2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9HT2JqZWN0L1dlYktpdERPTVRlc3RDYWxsYmFjay5jcHAg
Yi9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9HT2JqZWN0L1dlYktpdERPTVRlc3RDYWxs
YmFjay5jcHAKaW5kZXggMTlmZjE2Ni4uNTU0Y2MxNSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9iaW5k
aW5ncy9zY3JpcHRzL3Rlc3QvR09iamVjdC9XZWJLaXRET01UZXN0Q2FsbGJhY2suY3BwCisrKyBi
L1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0dPYmplY3QvV2ViS2l0RE9NVGVzdENhbGxi
YWNrLmNwcApAQCAtMjUsNiArMjUsNyBAQAogCiAjaW5jbHVkZSA8d3RmL0dldFB0ci5oPgogI2lu
Y2x1ZGUgPHd0Zi9SZWZQdHIuaD4KKyNpbmNsdWRlICJET01PYmplY3RDYWNoZS5oIgogI2luY2x1
ZGUgIkV4Y2VwdGlvbkNvZGUuaCIKICNpbmNsdWRlICJKU01haW5UaHJlYWRFeGVjU3RhdGUuaCIK
ICNpbmNsdWRlICJUZXN0Q2FsbGJhY2suaCIKZGlmZiAtLWdpdCBhL1dlYkNvcmUvYmluZGluZ3Mv
c2NyaXB0cy90ZXN0L0dPYmplY3QvV2ViS2l0RE9NVGVzdEludGVyZmFjZS5jcHAgYi9XZWJDb3Jl
L2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9HT2JqZWN0L1dlYktpdERPTVRlc3RJbnRlcmZhY2UuY3Bw
CmluZGV4IGExM2RhNDUuLjZjOTA2ZTQgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvYmluZGluZ3Mvc2Ny
aXB0cy90ZXN0L0dPYmplY3QvV2ViS2l0RE9NVGVzdEludGVyZmFjZS5jcHAKKysrIGIvV2ViQ29y
ZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvR09iamVjdC9XZWJLaXRET01UZXN0SW50ZXJmYWNlLmNw
cApAQCAtMjUsNiArMjUsNyBAQAogCiAjaW5jbHVkZSA8d3RmL0dldFB0ci5oPgogI2luY2x1ZGUg
PHd0Zi9SZWZQdHIuaD4KKyNpbmNsdWRlICJET01PYmplY3RDYWNoZS5oIgogI2luY2x1ZGUgIkV4
Y2VwdGlvbkNvZGUuaCIKICNpbmNsdWRlICJKU01haW5UaHJlYWRFeGVjU3RhdGUuaCIKICNpbmNs
dWRlICJUZXN0SW50ZXJmYWNlLmgiCmRpZmYgLS1naXQgYS9XZWJDb3JlL2JpbmRpbmdzL3Njcmlw
dHMvdGVzdC9HT2JqZWN0L1dlYktpdERPTVRlc3RNZWRpYVF1ZXJ5TGlzdExpc3RlbmVyLmNwcCBi
L1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0dPYmplY3QvV2ViS2l0RE9NVGVzdE1lZGlh
UXVlcnlMaXN0TGlzdGVuZXIuY3BwCmluZGV4IGY1ZGVkNzkuLmE3ZDM2NGMgMTAwNjQ0Ci0tLSBh
L1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0dPYmplY3QvV2ViS2l0RE9NVGVzdE1lZGlh
UXVlcnlMaXN0TGlzdGVuZXIuY3BwCisrKyBiL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0
L0dPYmplY3QvV2ViS2l0RE9NVGVzdE1lZGlhUXVlcnlMaXN0TGlzdGVuZXIuY3BwCkBAIC0yMyw2
ICsyMyw3IEBACiAKICNpbmNsdWRlIDx3dGYvR2V0UHRyLmg+CiAjaW5jbHVkZSA8d3RmL1JlZlB0
ci5oPgorI2luY2x1ZGUgIkRPTU9iamVjdENhY2hlLmgiCiAjaW5jbHVkZSAiRXhjZXB0aW9uQ29k
ZS5oIgogI2luY2x1ZGUgIkpTTWFpblRocmVhZEV4ZWNTdGF0ZS5oIgogI2luY2x1ZGUgIlRlc3RN
ZWRpYVF1ZXJ5TGlzdExpc3RlbmVyLmgiCmRpZmYgLS1naXQgYS9XZWJDb3JlL2JpbmRpbmdzL3Nj
cmlwdHMvdGVzdC9HT2JqZWN0L1dlYktpdERPTVRlc3RPYmouY3BwIGIvV2ViQ29yZS9iaW5kaW5n
cy9zY3JpcHRzL3Rlc3QvR09iamVjdC9XZWJLaXRET01UZXN0T2JqLmNwcAppbmRleCAxYmY5OTgz
Li5lYzJjNmRjIDEwMDY0NAotLS0gYS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9HT2Jq
ZWN0L1dlYktpdERPTVRlc3RPYmouY3BwCisrKyBiL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90
ZXN0L0dPYmplY3QvV2ViS2l0RE9NVGVzdE9iai5jcHAKQEAgLTIzLDYgKzIzLDcgQEAKIAogI2lu
Y2x1ZGUgPHd0Zi9HZXRQdHIuaD4KICNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CisjaW5jbHVkZSAi
RE9NT2JqZWN0Q2FjaGUuaCIKICNpbmNsdWRlICJFeGNlcHRpb25Db2RlLmgiCiAjaW5jbHVkZSAi
SFRNTE5hbWVzLmgiCiAjaW5jbHVkZSAiSlNNYWluVGhyZWFkRXhlY1N0YXRlLmgiCkBAIC0zMSw2
ICszMiw4IEBACiAjaW5jbHVkZSAiZ29iamVjdC9Db252ZXJ0VG9VVEY4U3RyaW5nLmgiCiAjaW5j
bHVkZSAid2Via2l0L1dlYktpdERPTUlEQktleS5oIgogI2luY2x1ZGUgIndlYmtpdC9XZWJLaXRE
T01JREJLZXlQcml2YXRlLmgiCisjaW5jbHVkZSAid2Via2l0L1dlYktpdERPTU9wdGlvbnNPYmpl
Y3QuaCIKKyNpbmNsdWRlICJ3ZWJraXQvV2ViS2l0RE9NT3B0aW9uc09iamVjdFByaXZhdGUuaCIK
ICNpbmNsdWRlICJ3ZWJraXQvV2ViS2l0RE9NU2VyaWFsaXplZFNjcmlwdFZhbHVlLmgiCiAjaW5j
bHVkZSAid2Via2l0L1dlYktpdERPTVNlcmlhbGl6ZWRTY3JpcHRWYWx1ZVByaXZhdGUuaCIKICNp
bmNsdWRlICJ3ZWJraXQvV2ViS2l0RE9NVGVzdE9iai5oIgpAQCAtMjExLDYgKzIxNCwyNyBAQCB3
ZWJraXRfZG9tX3Rlc3Rfb2JqX2lkYl9rZXkoV2ViS2l0RE9NVGVzdE9iaiogc2VsZiwgV2ViS2l0
RE9NSURCS2V5KiBrZXkpCiB9CiAKIHZvaWQKK3dlYmtpdF9kb21fdGVzdF9vYmpfb3B0aW9uc19v
YmplY3QoV2ViS2l0RE9NVGVzdE9iaiogc2VsZiwgV2ViS2l0RE9NT3B0aW9uc09iamVjdCogb28s
IFdlYktpdERPTU9wdGlvbnNPYmplY3QqIG9vbykKK3sKKyAgICBnX3JldHVybl9pZl9mYWlsKHNl
bGYpOworICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBXZWJD
b3JlOjpUZXN0T2JqICogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBnX3JldHVybl9p
Zl9mYWlsKG9vKTsKKyAgICBnX3JldHVybl9pZl9mYWlsKG9vbyk7CisgICAgV2ViQ29yZTo6T3B0
aW9uc09iamVjdCAqIGNvbnZlcnRlZF9vbyA9IE5VTEw7CisgICAgaWYgKG9vICE9IE5VTEwpIHsK
KyAgICAgICAgY29udmVydGVkX29vID0gV2ViS2l0Ojpjb3JlKG9vKTsKKyAgICAgICAgZ19yZXR1
cm5faWZfZmFpbChjb252ZXJ0ZWRfb28pOworICAgIH0KKyAgICBXZWJDb3JlOjpPcHRpb25zT2Jq
ZWN0ICogY29udmVydGVkX29vbyA9IE5VTEw7CisgICAgaWYgKG9vbyAhPSBOVUxMKSB7CisgICAg
ICAgIGNvbnZlcnRlZF9vb28gPSBXZWJLaXQ6OmNvcmUob29vKTsKKyAgICAgICAgZ19yZXR1cm5f
aWZfZmFpbChjb252ZXJ0ZWRfb29vKTsKKyAgICB9CisgICAgaXRlbS0+b3B0aW9uc09iamVjdChj
b252ZXJ0ZWRfb28sIGNvbnZlcnRlZF9vb28pOworfQorCit2b2lkCiB3ZWJraXRfZG9tX3Rlc3Rf
b2JqX21ldGhvZF93aXRoX2V4Y2VwdGlvbihXZWJLaXRET01UZXN0T2JqKiBzZWxmLCBHRXJyb3Ig
KiplcnJvcikKIHsKICAgICBnX3JldHVybl9pZl9mYWlsKHNlbGYpOwpkaWZmIC0tZ2l0IGEvV2Vi
Q29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvR09iamVjdC9XZWJLaXRET01UZXN0T2JqLmggYi9X
ZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9HT2JqZWN0L1dlYktpdERPTVRlc3RPYmouaApp
bmRleCAyZWViZGIxLi40MmQxZmNkIDEwMDY0NAotLS0gYS9XZWJDb3JlL2JpbmRpbmdzL3Njcmlw
dHMvdGVzdC9HT2JqZWN0L1dlYktpdERPTVRlc3RPYmouaAorKysgYi9XZWJDb3JlL2JpbmRpbmdz
L3NjcmlwdHMvdGVzdC9HT2JqZWN0L1dlYktpdERPTVRlc3RPYmouaApAQCAtNzcsNiArNzcsOSBA
QCBXRUJLSVRfQVBJIHZvaWQKIHdlYmtpdF9kb21fdGVzdF9vYmpfaWRiX2tleShXZWJLaXRET01U
ZXN0T2JqKiBzZWxmLCBXZWJLaXRET01JREJLZXkqIGtleSk7CiAKIFdFQktJVF9BUEkgdm9pZAor
d2Via2l0X2RvbV90ZXN0X29ial9vcHRpb25zX29iamVjdChXZWJLaXRET01UZXN0T2JqKiBzZWxm
LCBXZWJLaXRET01PcHRpb25zT2JqZWN0KiBvbywgV2ViS2l0RE9NT3B0aW9uc09iamVjdCogb29v
KTsKKworV0VCS0lUX0FQSSB2b2lkCiB3ZWJraXRfZG9tX3Rlc3Rfb2JqX21ldGhvZF93aXRoX2V4
Y2VwdGlvbihXZWJLaXRET01UZXN0T2JqKiBzZWxmLCBHRXJyb3IgKiplcnJvcik7CiAKIApkaWZm
IC0tZ2l0IGEvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0T2JqLmNwcCBi
L1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE9iai5jcHAKaW5kZXggOTgy
MGZhYi4uZDhiZjY3ZSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3Qv
SlMvSlNUZXN0T2JqLmNwcAorKysgYi9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9K
U1Rlc3RPYmouY3BwCkBAIC0yNyw2ICsyNyw3IEBACiAjaW5jbHVkZSAiSURCS2V5LmgiCiAjaW5j
bHVkZSAiSlNET01CaW5kaW5nLmgiCiAjaW5jbHVkZSAiSlNFdmVudExpc3RlbmVyLmgiCisjaW5j
bHVkZSAiSlNPcHRpb25zT2JqZWN0LmgiCiAjaW5jbHVkZSAiSlNUZXN0Q2FsbGJhY2suaCIKICNp
bmNsdWRlICJKU1Rlc3RPYmouaCIKICNpbmNsdWRlICJKU2xvZy5oIgpAQCAtMTgxLDcgKzE4Miw3
IEBAIGJvb2wgSlNUZXN0T2JqQ29uc3RydWN0b3I6OmdldE93blByb3BlcnR5RGVzY3JpcHRvcihF
eGVjU3RhdGUqIGV4ZWMsIGNvbnN0IElkZW50CiAjZGVmaW5lIFRIVU5LX0dFTkVSQVRPUihnZW5l
cmF0b3IpCiAjZW5kaWYKIAotc3RhdGljIGNvbnN0IEhhc2hUYWJsZVZhbHVlIEpTVGVzdE9ialBy
b3RvdHlwZVRhYmxlVmFsdWVzWzQ3XSA9CitzdGF0aWMgY29uc3QgSGFzaFRhYmxlVmFsdWUgSlNU
ZXN0T2JqUHJvdG90eXBlVGFibGVWYWx1ZXNbNDhdID0KIHsKICAgICB7ICJDT05TVF9WQUxVRV8w
IiwgRG9udERlbGV0ZSB8IFJlYWRPbmx5LCAoaW50cHRyX3Qpc3RhdGljX2Nhc3Q8UHJvcGVydHlT
bG90OjpHZXRWYWx1ZUZ1bmM+KGpzVGVzdE9iakNPTlNUX1ZBTFVFXzApLCAoaW50cHRyX3QpMCBU
SFVOS19HRU5FUkFUT1IoMCkgfSwKICAgICB7ICJDT05TVF9WQUxVRV8xIiwgRG9udERlbGV0ZSB8
IFJlYWRPbmx5LCAoaW50cHRyX3Qpc3RhdGljX2Nhc3Q8UHJvcGVydHlTbG90OjpHZXRWYWx1ZUZ1
bmM+KGpzVGVzdE9iakNPTlNUX1ZBTFVFXzEpLCAoaW50cHRyX3QpMCBUSFVOS19HRU5FUkFUT1Io
MCkgfSwKQEAgLTIwNCw2ICsyMDUsNyBAQCBzdGF0aWMgY29uc3QgSGFzaFRhYmxlVmFsdWUgSlNU
ZXN0T2JqUHJvdG90eXBlVGFibGVWYWx1ZXNbNDddID0KICAgICB7ICJtZXRob2RUaGF0UmVxdWly
ZXNBbGxBcmdzQW5kVGhyb3dzIiwgRG9udERlbGV0ZSB8IEZ1bmN0aW9uLCAoaW50cHRyX3Qpc3Rh
dGljX2Nhc3Q8TmF0aXZlRnVuY3Rpb24+KGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9k
VGhhdFJlcXVpcmVzQWxsQXJnc0FuZFRocm93cyksIChpbnRwdHJfdCkyIFRIVU5LX0dFTkVSQVRP
UigwKSB9LAogICAgIHsgInNlcmlhbGl6ZWRWYWx1ZSIsIERvbnREZWxldGUgfCBGdW5jdGlvbiwg
KGludHB0cl90KXN0YXRpY19jYXN0PE5hdGl2ZUZ1bmN0aW9uPihqc1Rlc3RPYmpQcm90b3R5cGVG
dW5jdGlvblNlcmlhbGl6ZWRWYWx1ZSksIChpbnRwdHJfdCkxIFRIVU5LX0dFTkVSQVRPUigwKSB9
LAogICAgIHsgImlkYktleSIsIERvbnREZWxldGUgfCBGdW5jdGlvbiwgKGludHB0cl90KXN0YXRp
Y19jYXN0PE5hdGl2ZUZ1bmN0aW9uPihqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbklkYktleSks
IChpbnRwdHJfdCkxIFRIVU5LX0dFTkVSQVRPUigwKSB9LAorICAgIHsgIm9wdGlvbnNPYmplY3Qi
LCBEb250RGVsZXRlIHwgRnVuY3Rpb24sIChpbnRwdHJfdClzdGF0aWNfY2FzdDxOYXRpdmVGdW5j
dGlvbj4oanNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25PcHRpb25zT2JqZWN0KSwgKGludHB0cl90
KTIgVEhVTktfR0VORVJBVE9SKDApIH0sCiAgICAgeyAibWV0aG9kV2l0aEV4Y2VwdGlvbiIsIERv
bnREZWxldGUgfCBGdW5jdGlvbiwgKGludHB0cl90KXN0YXRpY19jYXN0PE5hdGl2ZUZ1bmN0aW9u
Pihqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhFeGNlcHRpb24pLCAoaW50cHRy
X3QpMCBUSFVOS19HRU5FUkFUT1IoMCkgfSwKICAgICB7ICJjdXN0b21NZXRob2QiLCBEb250RGVs
ZXRlIHwgRnVuY3Rpb24sIChpbnRwdHJfdClzdGF0aWNfY2FzdDxOYXRpdmVGdW5jdGlvbj4oanNU
ZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25DdXN0b21NZXRob2QpLCAoaW50cHRyX3QpMCBUSFVOS19H
RU5FUkFUT1IoMCkgfSwKICAgICB7ICJjdXN0b21NZXRob2RXaXRoQXJncyIsIERvbnREZWxldGUg
fCBGdW5jdGlvbiwgKGludHB0cl90KXN0YXRpY19jYXN0PE5hdGl2ZUZ1bmN0aW9uPihqc1Rlc3RP
YmpQcm90b3R5cGVGdW5jdGlvbkN1c3RvbU1ldGhvZFdpdGhBcmdzKSwgKGludHB0cl90KTMgVEhV
TktfR0VORVJBVE9SKDApIH0sCkBAIC0yMzMsNyArMjM1LDcgQEAgc3RhdGljIGNvbnN0IEhhc2hU
YWJsZVZhbHVlIEpTVGVzdE9ialByb3RvdHlwZVRhYmxlVmFsdWVzWzQ3XSA9CiB9OwogCiAjdW5k
ZWYgVEhVTktfR0VORVJBVE9SCi1zdGF0aWMgSlNDX0NPTlNUX0hBU0hUQUJMRSBIYXNoVGFibGUg
SlNUZXN0T2JqUHJvdG90eXBlVGFibGUgPSB7IDEzNSwgMTI3LCBKU1Rlc3RPYmpQcm90b3R5cGVU
YWJsZVZhbHVlcywgMCB9Oworc3RhdGljIEpTQ19DT05TVF9IQVNIVEFCTEUgSGFzaFRhYmxlIEpT
VGVzdE9ialByb3RvdHlwZVRhYmxlID0geyAxMzYsIDEyNywgSlNUZXN0T2JqUHJvdG90eXBlVGFi
bGVWYWx1ZXMsIDAgfTsKIGNvbnN0IENsYXNzSW5mbyBKU1Rlc3RPYmpQcm90b3R5cGU6OnNfaW5m
byA9IHsgIlRlc3RPYmpQcm90b3R5cGUiLCAwLCAmSlNUZXN0T2JqUHJvdG90eXBlVGFibGUsIDAg
fTsKIAogSlNPYmplY3QqIEpTVGVzdE9ialByb3RvdHlwZTo6c2VsZihFeGVjU3RhdGUqIGV4ZWMs
IEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QpCkBAIC05OTAsNiArOTkyLDMxIEBAIEVuY29k
ZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25JZGJLZXko
RXhlY1N0YXRlKiBleGVjKQogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQo
KSk7CiB9CiAKK0VuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBl
RnVuY3Rpb25PcHRpb25zT2JqZWN0KEV4ZWNTdGF0ZSogZXhlYykKK3sKKyAgICBKU1ZhbHVlIHRo
aXNWYWx1ZSA9IGV4ZWMtPmhvc3RUaGlzVmFsdWUoKTsKKyAgICBpZiAoIXRoaXNWYWx1ZS5pbmhl
cml0cygmSlNUZXN0T2JqOjpzX2luZm8pKQorICAgICAgICByZXR1cm4gdGhyb3dWTVR5cGVFcnJv
cihleGVjKTsKKyAgICBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMgPSBzdGF0aWNfY2FzdDxKU1Rlc3RP
YmoqPihhc09iamVjdCh0aGlzVmFsdWUpKTsKKyAgICBUZXN0T2JqKiBpbXAgPSBzdGF0aWNfY2Fz
dDxUZXN0T2JqKj4oY2FzdGVkVGhpcy0+aW1wbCgpKTsKKyAgICBPcHRpb25zT2JqZWN0KiBvbyA9
IHRvT3B0aW9uc09iamVjdChleGVjLT5hcmd1bWVudCgwKSk7CisgICAgaWYgKGV4ZWMtPmhhZEV4
Y2VwdGlvbigpKQorICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkp
OworCisgICAgaW50IGFyZ3NDb3VudCA9IGV4ZWMtPmFyZ3VtZW50Q291bnQoKTsKKyAgICBpZiAo
YXJnc0NvdW50IDw9IDEpIHsKKyAgICAgICAgaW1wLT5vcHRpb25zT2JqZWN0KG9vKTsKKyAgICAg
ICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKKyAgICB9CisKKyAgICBP
cHRpb25zT2JqZWN0KiBvb28gPSB0b09wdGlvbnNPYmplY3QoZXhlYy0+YXJndW1lbnQoMSkpOwor
ICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVu
Y29kZShqc1VuZGVmaW5lZCgpKTsKKworICAgIGltcC0+b3B0aW9uc09iamVjdChvbywgb29vKTsK
KyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOworfQorCiBFbmNvZGVk
SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0
aEV4Y2VwdGlvbihFeGVjU3RhdGUqIGV4ZWMpCiB7CiAgICAgSlNWYWx1ZSB0aGlzVmFsdWUgPSBl
eGVjLT5ob3N0VGhpc1ZhbHVlKCk7CmRpZmYgLS1naXQgYS9XZWJDb3JlL2JpbmRpbmdzL3Njcmlw
dHMvdGVzdC9KUy9KU1Rlc3RPYmouaCBiL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pT
L0pTVGVzdE9iai5oCmluZGV4IDYwMTRmN2EuLmMyNzQ0NGEgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUv
YmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE9iai5oCisrKyBiL1dlYkNvcmUvYmluZGlu
Z3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE9iai5oCkBAIC05Niw2ICs5Niw3IEBAIEpTQzo6RW5j
b2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhv
ZFRoYXRSZXF1aXJlc0FsCiBKU0M6OkVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0
T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RUaGF0UmVxdWlyZXNBbGxBcmdzQW5kVGhyb3dzKEpT
Qzo6RXhlY1N0YXRlKik7CiBKU0M6OkVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0
T2JqUHJvdG90eXBlRnVuY3Rpb25TZXJpYWxpemVkVmFsdWUoSlNDOjpFeGVjU3RhdGUqKTsKIEpT
Qzo6RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlv
bklkYktleShKU0M6OkV4ZWNTdGF0ZSopOworSlNDOjpFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9D
QUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uT3B0aW9uc09iamVjdChKU0M6OkV4ZWNTdGF0
ZSopOwogSlNDOjpFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlw
ZUZ1bmN0aW9uTWV0aG9kV2l0aEV4Y2VwdGlvbihKU0M6OkV4ZWNTdGF0ZSopOwogSlNDOjpFbmNv
ZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uQ3VzdG9t
TWV0aG9kKEpTQzo6RXhlY1N0YXRlKik7CiBKU0M6OkVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NB
TEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25DdXN0b21NZXRob2RXaXRoQXJncyhKU0M6OkV4
ZWNTdGF0ZSopOwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvT2Jq
Qy9ET01UZXN0T2JqLmggYi9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9PYmpDL0RPTVRl
c3RPYmouaAppbmRleCBmZDQwMDk1Li43NjZkMzFmIDEwMDY0NAotLS0gYS9XZWJDb3JlL2JpbmRp
bmdzL3NjcmlwdHMvdGVzdC9PYmpDL0RPTVRlc3RPYmouaAorKysgYi9XZWJDb3JlL2JpbmRpbmdz
L3NjcmlwdHMvdGVzdC9PYmpDL0RPTVRlc3RPYmouaApAQCAtMjksNiArMjksNyBAQAogI2lmIFdF
QktJVF9WRVJTSU9OX01BWF9BTExPV0VEID49IFdFQktJVF9WRVJTSU9OX0xBVEVTVAogCiBAY2xh
c3MgRE9NSURCS2V5OworQGNsYXNzIERPTU9wdGlvbnNPYmplY3Q7CiBAY2xhc3MgRE9NVGVzdE9i
ajsKIEBjbGFzcyBET01sb2c7CiBAY2xhc3MgTlNTdHJpbmc7CkBAIC0xMjcsNiArMTI4LDcgQEAg
ZW51bSB7CiAtIChET01UZXN0T2JqICopbWV0aG9kVGhhdFJlcXVpcmVzQWxsQXJnc0FuZFRocm93
czooTlNTdHJpbmcgKilzdHJBcmcgb2JqQXJnOihET01UZXN0T2JqICopb2JqQXJnOwogLSAodm9p
ZClzZXJpYWxpemVkVmFsdWU6KE5TU3RyaW5nICopc2VyaWFsaXplZEFyZzsKIC0gKHZvaWQpaWRi
S2V5OihET01JREJLZXkgKilrZXk7CistICh2b2lkKW9wdGlvbnNPYmplY3Q6KERPTU9wdGlvbnNP
YmplY3QgKilvbyBvb286KERPTU9wdGlvbnNPYmplY3QgKilvb287CiAtICh2b2lkKW1ldGhvZFdp
dGhFeGNlcHRpb247CiAtICh2b2lkKWN1c3RvbU1ldGhvZDsKIC0gKHZvaWQpY3VzdG9tTWV0aG9k
V2l0aEFyZ3M6KGludClpbnRBcmcgc3RyQXJnOihOU1N0cmluZyAqKXN0ckFyZyBvYmpBcmc6KERP
TVRlc3RPYmogKilvYmpBcmc7CmRpZmYgLS1naXQgYS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMv
dGVzdC9PYmpDL0RPTVRlc3RPYmoubW0gYi9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9P
YmpDL0RPTVRlc3RPYmoubW0KaW5kZXggNjEyNTk3Zi4uYWMwNDIzNSAxMDA2NDQKLS0tIGEvV2Vi
Q29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvT2JqQy9ET01UZXN0T2JqLm1tCisrKyBiL1dlYkNv
cmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L09iakMvRE9NVGVzdE9iai5tbQpAQCAtMzUsNiArMzUs
NyBAQAogI2ltcG9ydCAiRE9NRXZlbnRJbnRlcm5hbC5oIgogI2ltcG9ydCAiRE9NSURCS2V5SW50
ZXJuYWwuaCIKICNpbXBvcnQgIkRPTU5vZGVJbnRlcm5hbC5oIgorI2ltcG9ydCAiRE9NT3B0aW9u
c09iamVjdEludGVybmFsLmgiCiAjaW1wb3J0ICJET01TdHlsZVNoZWV0SW50ZXJuYWwuaCIKICNp
bXBvcnQgIkRPTVRlc3RPYmpJbnRlcm5hbC5oIgogI2ltcG9ydCAiRE9NbG9nSW50ZXJuYWwuaCIK
QEAgLTQ1LDYgKzQ2LDcgQEAKICNpbXBvcnQgIkpTTWFpblRocmVhZEV4ZWNTdGF0ZS5oIgogI2lt
cG9ydCAiS1VSTC5oIgogI2ltcG9ydCAiT2JqQ0V2ZW50TGlzdGVuZXIuaCIKKyNpbXBvcnQgIk9w
dGlvbnNPYmplY3QuaCIKICNpbXBvcnQgIlNlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5oIgogI2ltcG9y
dCAiVGVzdE9iai5oIgogI2ltcG9ydCAiVGhyZWFkQ2hlY2suaCIKQEAgLTUzMyw2ICs1MzUsMTIg
QEAKICAgICBJTVBMLT5pZGJLZXkoY29yZShrZXkpKTsKIH0KIAorLSAodm9pZClvcHRpb25zT2Jq
ZWN0OihET01PcHRpb25zT2JqZWN0ICopb28gb29vOihET01PcHRpb25zT2JqZWN0ICopb29vCit7
CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOworICAgIElNUEwtPm9w
dGlvbnNPYmplY3QoY29yZShvbyksIGNvcmUob29vKSk7Cit9CisKIC0gKHZvaWQpbWV0aG9kV2l0
aEV4Y2VwdGlvbgogewogICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsK
ZGlmZiAtLWdpdCBhL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Rlc3RPYmouaWRsIGIv
V2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVGVzdE9iai5pZGwKaW5kZXggNTM3NTM0Yi4u
YzBkMGU4OCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVGVzdE9i
ai5pZGwKKysrIGIvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVGVzdE9iai5pZGwKQEAg
LTc0LDYgKzc0LDcgQEAgbW9kdWxlIHRlc3QgewogCiAgICAgICAgIHZvaWQgc2VyaWFsaXplZFZh
bHVlKGluIFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZSBzZXJpYWxpemVkQXJnKTsKICAgICAgICAgdm9p
ZCBpZGJLZXkoaW4gSURCS2V5IGtleSk7CisgICAgICAgIHZvaWQgb3B0aW9uc09iamVjdChpbiBP
cHRpb25zT2JqZWN0IG9vLCBpbiBbT3B0aW9uYWxdIE9wdGlvbnNPYmplY3Qgb29vKTsKIAogICAg
ICAgICAvLyBFeGNlcHRpb25zCiAgICAgICAgIHZvaWQgbWV0aG9kV2l0aEV4Y2VwdGlvbigpIHJh
aXNlcyhET01FeGNlcHRpb24pOwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRz
L3Rlc3QvVjgvVjhUZXN0TWVkaWFRdWVyeUxpc3RMaXN0ZW5lci5jcHAgYi9XZWJDb3JlL2JpbmRp
bmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRlc3RNZWRpYVF1ZXJ5TGlzdExpc3RlbmVyLmNwcAppbmRl
eCBmMWM0ZTJiLi5hYjllNmRiIDEwMDY0NAotLS0gYS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMv
dGVzdC9WOC9WOFRlc3RNZWRpYVF1ZXJ5TGlzdExpc3RlbmVyLmNwcAorKysgYi9XZWJDb3JlL2Jp
bmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRlc3RNZWRpYVF1ZXJ5TGlzdExpc3RlbmVyLmNwcApA
QCAtNTcsNyArNTcsNyBAQCBzdGF0aWMgdjg6OlBlcnNpc3RlbnQ8djg6OkZ1bmN0aW9uVGVtcGxh
dGU+IENvbmZpZ3VyZVY4VGVzdE1lZGlhUXVlcnlMaXN0TGlzdGVuZQogewogICAgIHY4OjpMb2Nh
bDx2ODo6U2lnbmF0dXJlPiBkZWZhdWx0U2lnbmF0dXJlID0gY29uZmlndXJlVGVtcGxhdGUoZGVz
YywgIlRlc3RNZWRpYVF1ZXJ5TGlzdExpc3RlbmVyIiwgdjg6OlBlcnNpc3RlbnQ8djg6OkZ1bmN0
aW9uVGVtcGxhdGU+KCksIFY4VGVzdE1lZGlhUXVlcnlMaXN0TGlzdGVuZXI6OmludGVybmFsRmll
bGRDb3VudCwKICAgICAgICAgMCwgMCwKLSAgICAgICAgVGVzdE1lZGlhUXVlcnlMaXN0TGlzdGVu
ZXJDYWxsYmFja3MsIHNpemVvZihUZXN0TWVkaWFRdWVyeUxpc3RMaXN0ZW5lckNhbGxiYWNrcykg
LyBzaXplb2YoKlRlc3RNZWRpYVF1ZXJ5TGlzdExpc3RlbmVyQ2FsbGJhY2tzKSk7CisgICAgICAg
IFRlc3RNZWRpYVF1ZXJ5TGlzdExpc3RlbmVyQ2FsbGJhY2tzLCBXVEZfQVJSQVlfTEVOR1RIKFRl
c3RNZWRpYVF1ZXJ5TGlzdExpc3RlbmVyQ2FsbGJhY2tzKSk7CiAgICAgdjg6OkxvY2FsPHY4OjpP
YmplY3RUZW1wbGF0ZT4gaW5zdGFuY2UgPSBkZXNjLT5JbnN0YW5jZVRlbXBsYXRlKCk7CiAgICAg
djg6OkxvY2FsPHY4OjpPYmplY3RUZW1wbGF0ZT4gcHJvdG8gPSBkZXNjLT5Qcm90b3R5cGVUZW1w
bGF0ZSgpOwogICAgIApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3Qv
VjgvVjhUZXN0T2JqLmNwcCBiL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVz
dE9iai5jcHAKaW5kZXggYzRhNzZhYy4uZTA2ZDNmMiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9iaW5k
aW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0T2JqLmNwcAorKysgYi9XZWJDb3JlL2JpbmRpbmdz
L3NjcmlwdHMvdGVzdC9WOC9WOFRlc3RPYmouY3BwCkBAIC0yNSw2ICsyNSw3IEBACiAjaW5jbHVk
ZSAiSFRNTE5hbWVzLmgiCiAjaW5jbHVkZSAiSURCQmluZGluZ1V0aWxpdGllcy5oIgogI2luY2x1
ZGUgIklEQktleS5oIgorI2luY2x1ZGUgIk9wdGlvbnNPYmplY3QuaCIKICNpbmNsdWRlICJSdW50
aW1lRW5hYmxlZEZlYXR1cmVzLmgiCiAjaW5jbHVkZSAiU2NyaXB0QXJndW1lbnRzLmgiCiAjaW5j
bHVkZSAiU2NyaXB0Q2FsbFN0YWNrLmgiCkBAIC03MjcsNiArNzI4LDIwIEBAIHN0YXRpYyB2ODo6
SGFuZGxlPHY4OjpWYWx1ZT4gaWRiS2V5Q2FsbGJhY2soY29uc3Qgdjg6OkFyZ3VtZW50cyYgYXJn
cykKICAgICByZXR1cm4gdjg6OkhhbmRsZTx2ODo6VmFsdWU+KCk7CiB9CiAKK3N0YXRpYyB2ODo6
SGFuZGxlPHY4OjpWYWx1ZT4gb3B0aW9uc09iamVjdENhbGxiYWNrKGNvbnN0IHY4OjpBcmd1bWVu
dHMmIGFyZ3MpCit7CisgICAgSU5DX1NUQVRTKCJET00uVGVzdE9iai5vcHRpb25zT2JqZWN0Iik7
CisgICAgVGVzdE9iaiogaW1wID0gVjhUZXN0T2JqOjp0b05hdGl2ZShhcmdzLkhvbGRlcigpKTsK
KyAgICBFWENFUFRJT05fQkxPQ0soT3B0aW9uc09iamVjdCwgb28sIGFyZ3NbMF0pOworICAgIGlm
IChhcmdzLkxlbmd0aCgpIDw9IDEpIHsKKyAgICAgICAgaW1wLT5vcHRpb25zT2JqZWN0KG9vKTsK
KyAgICAgICAgcmV0dXJuIHY4OjpIYW5kbGU8djg6OlZhbHVlPigpOworICAgIH0KKyAgICBFWENF
UFRJT05fQkxPQ0soT3B0aW9uc09iamVjdCwgb29vLCBhcmdzWzFdKTsKKyAgICBpbXAtPm9wdGlv
bnNPYmplY3Qob28sIG9vbyk7CisgICAgcmV0dXJuIHY4OjpIYW5kbGU8djg6OlZhbHVlPigpOwor
fQorCiBzdGF0aWMgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IG1ldGhvZFdpdGhFeGNlcHRpb25DYWxs
YmFjayhjb25zdCB2ODo6QXJndW1lbnRzJiBhcmdzKQogewogICAgIElOQ19TVEFUUygiRE9NLlRl
c3RPYmoubWV0aG9kV2l0aEV4Y2VwdGlvbiIpOwpAQCAtMTIwMSw2ICsxMjE2LDcgQEAgc3RhdGlj
IGNvbnN0IEJhdGNoZWRDYWxsYmFjayBUZXN0T2JqQ2FsbGJhY2tzW10gPSB7CiAgICAgeyJvYmpN
ZXRob2QiLCBUZXN0T2JqSW50ZXJuYWw6Om9iak1ldGhvZENhbGxiYWNrfSwKICAgICB7InNlcmlh
bGl6ZWRWYWx1ZSIsIFRlc3RPYmpJbnRlcm5hbDo6c2VyaWFsaXplZFZhbHVlQ2FsbGJhY2t9LAog
ICAgIHsiaWRiS2V5IiwgVGVzdE9iakludGVybmFsOjppZGJLZXlDYWxsYmFja30sCisgICAgeyJv
cHRpb25zT2JqZWN0IiwgVGVzdE9iakludGVybmFsOjpvcHRpb25zT2JqZWN0Q2FsbGJhY2t9LAog
ICAgIHsibWV0aG9kV2l0aEV4Y2VwdGlvbiIsIFRlc3RPYmpJbnRlcm5hbDo6bWV0aG9kV2l0aEV4
Y2VwdGlvbkNhbGxiYWNrfSwKICAgICB7ImN1c3RvbU1ldGhvZCIsIFY4VGVzdE9iajo6Y3VzdG9t
TWV0aG9kQ2FsbGJhY2t9LAogICAgIHsiY3VzdG9tTWV0aG9kV2l0aEFyZ3MiLCBWOFRlc3RPYmo6
OmN1c3RvbU1ldGhvZFdpdGhBcmdzQ2FsbGJhY2t9LApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9iaW5k
aW5ncy92OC9PcHRpb25zT2JqZWN0LmNwcCBiL1dlYkNvcmUvYmluZGluZ3MvdjgvT3B0aW9uc09i
amVjdC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGRlNTExYQotLS0g
L2Rldi9udWxsCisrKyBiL1dlYkNvcmUvYmluZGluZ3MvdjgvT3B0aW9uc09iamVjdC5jcHAKQEAg
LTAsMCArMSwxMDIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFO
WQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP
RgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiT3B0
aW9uc09iamVjdC5oIgorI2luY2x1ZGUgIlY4QmluZGluZy5oIgorCituYW1lc3BhY2UgV2ViQ29y
ZSB7CisKK09wdGlvbnNPYmplY3Q6Ok9wdGlvbnNPYmplY3QoKQoreworfQorCitPcHRpb25zT2Jq
ZWN0OjpPcHRpb25zT2JqZWN0KGNvbnN0IHY4OjpMb2NhbDx2ODo6VmFsdWU+JiBvcHRpb25zKQor
ICAgIDogbV9vcHRpb25zKG9wdGlvbnMpCit7Cit9CisKK09wdGlvbnNPYmplY3Q6On5PcHRpb25z
T2JqZWN0KCkKK3sKK30KKworT3B0aW9uc09iamVjdCYgT3B0aW9uc09iamVjdDo6b3BlcmF0b3I9
KGNvbnN0IE9wdGlvbnNPYmplY3QmIG9wdGlvbnNPYmplY3QpCit7CisgICAgbV9vcHRpb25zID0g
b3B0aW9uc09iamVjdC5tX29wdGlvbnM7CisgICAgcmV0dXJuICp0aGlzOworfQorCitib29sIE9w
dGlvbnNPYmplY3Q6OmlzVW5kZWZpbmVkT3JOdWxsKCkgY29uc3QKK3sKKyAgICBpZiAobV9vcHRp
b25zLklzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgcmV0dXJuIFdlYkNvcmU6
OmlzVW5kZWZpbmVkT3JOdWxsKG1fb3B0aW9ucyk7Cit9CisKK2Jvb2wgT3B0aW9uc09iamVjdDo6
Z2V0S2V5Qm9vbChjb25zdCBTdHJpbmcmIGtleSwgYm9vbCYgdmFsdWUpIGNvbnN0Cit7CisgICAg
djg6OkxvY2FsPHY4OjpWYWx1ZT4gdjhWYWx1ZTsKKyAgICBpZiAoIWdldEtleShrZXksIHY4VmFs
dWUpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBpZiAoIXY4VmFsdWUtPklzQm9vbGVh
bigpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgdjg6OkxvY2FsPHY4OjpCb29sZWFuPiB2
OEJvb2wgPSB2OFZhbHVlLT5Ub0Jvb2xlYW4oKTsKKyAgICBBU1NFUlQoIXY4Qm9vbC5Jc0VtcHR5
KCkpOworCisgICAgdmFsdWUgPSB2OEJvb2wtPlZhbHVlKCk7CisgICAgcmV0dXJuIHRydWU7Cit9
CisKK2Jvb2wgT3B0aW9uc09iamVjdDo6Z2V0S2V5U3RyaW5nKGNvbnN0IFN0cmluZyYga2V5LCBT
dHJpbmcmIHZhbHVlKSBjb25zdAoreworICAgIHY4OjpMb2NhbDx2ODo6VmFsdWU+IHY4VmFsdWU7
CisgICAgaWYgKCFnZXRLZXkoa2V5LCB2OFZhbHVlKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOwor
CisgICAgaWYgKCF2OFZhbHVlLT5Jc1N0cmluZygpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisK
KyAgICB2YWx1ZSA9IHY4VmFsdWVUb1dlYkNvcmVTdHJpbmcodjhWYWx1ZSk7CisgICAgQVNTRVJU
KCF2YWx1ZS5pc0VtcHR5KCkpOworICAgIHJldHVybiB0cnVlOworfQorCitib29sIE9wdGlvbnNP
YmplY3Q6OmdldEtleShjb25zdCBTdHJpbmcmIGtleSwgdjg6OkxvY2FsPHY4OjpWYWx1ZT4mIHZh
bHVlKSBjb25zdAoreworICAgIGlmIChpc1VuZGVmaW5lZE9yTnVsbCgpKQorICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgdjg6OkxvY2FsPHY4OjpPYmplY3Q+IG9wdGlvbnMgPSBtX29wdGlvbnMt
PlRvT2JqZWN0KCk7CisgICAgQVNTRVJUKCFvcHRpb25zLklzRW1wdHkoKSk7CisKKyAgICB2ODo6
SGFuZGxlPHY4OjpTdHJpbmc+IHY4S2V5ID0gdjhTdHJpbmcoa2V5KTsKKyAgICBpZiAoIW9wdGlv
bnMtPkhhcyh2OEtleSkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB2YWx1ZSA9IG9wdGlv
bnMtPkdldCh2OEtleSk7CisgICAgQVNTRVJUKCF2YWx1ZS5Jc0VtcHR5KCkpOworICAgIHJldHVy
biB0cnVlOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9XZWJDb3Jl
L2JpbmRpbmdzL3Y4L09wdGlvbnNPYmplY3QuaCBiL1dlYkNvcmUvYmluZGluZ3MvdjgvT3B0aW9u
c09iamVjdC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRlMmY4MjEKLS0t
IC9kZXYvbnVsbAorKysgYi9XZWJDb3JlL2JpbmRpbmdzL3Y4L09wdGlvbnNPYmplY3QuaApAQCAt
MCwwICsxLDYwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkK
KyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YK
KyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBPcHRpb25zT2JqZWN0X2gKKyNkZWZpbmUgT3B0
aW9uc09iamVjdF9oCisKKyNpbmNsdWRlICJQbGF0Zm9ybVN0cmluZy5oIgorI2luY2x1ZGUgPHY4
Lmg+CisjaW5jbHVkZSA8d3RmL05vbkNvcHlhYmxlLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsK
KworY2xhc3MgT3B0aW9uc09iamVjdCB7CitwdWJsaWM6CisgICAgT3B0aW9uc09iamVjdCgpOwor
ICAgIE9wdGlvbnNPYmplY3QoY29uc3Qgdjg6OkxvY2FsPHY4OjpWYWx1ZT4mIG9wdGlvbnMpOwor
ICAgIH5PcHRpb25zT2JqZWN0KCk7CisKKyAgICBPcHRpb25zT2JqZWN0JiBvcGVyYXRvcj0oY29u
c3QgT3B0aW9uc09iamVjdCYpOworCisgICAgYm9vbCBpc1VuZGVmaW5lZE9yTnVsbCgpIGNvbnN0
OworICAgIGJvb2wgZ2V0S2V5Qm9vbChjb25zdCBTdHJpbmcmIGtleSwgYm9vbCYgdmFsdWUpIGNv
bnN0OworICAgIGJvb2wgZ2V0S2V5U3RyaW5nKGNvbnN0IFN0cmluZyYga2V5LCBTdHJpbmcmIHZh
bHVlKSBjb25zdDsKKworcHJpdmF0ZToKKyAgICBib29sIGdldEtleShjb25zdCBTdHJpbmcmIGtl
eSwgdjg6OkxvY2FsPHY4OjpWYWx1ZT4mKSBjb25zdDsKKworICAgIC8vIFRoaXMgb2JqZWN0IGNh
biBvbmx5IGJlIHVzZWQgc2FmZWx5IHdoZW4gc3RhY2sgYWxsb2NhdGVkIGJlY2F1c2Ugb2Ygdjg6
OkxvY2FsLgorICAgIHN0YXRpYyB2b2lkKiBvcGVyYXRvciBuZXcoc2l6ZV90KTsKKyAgICBzdGF0
aWMgdm9pZCogb3BlcmF0b3IgbmV3W10oc2l6ZV90KTsKKyAgICBzdGF0aWMgdm9pZCBvcGVyYXRv
ciBkZWxldGUodm9pZCAqKTsKKworICAgIHY4OjpMb2NhbDx2ODo6VmFsdWU+IG1fb3B0aW9uczsK
K307CisKK30KKworI2VuZGlmIC8vIE9wdGlvbnNPYmplY3RfaApkaWZmIC0tZ2l0IGEvV2ViQ29y
ZS9zdG9yYWdlL0lEQkRhdGFiYXNlLmNwcCBiL1dlYkNvcmUvc3RvcmFnZS9JREJEYXRhYmFzZS5j
cHAKaW5kZXggMTUzNmJhNy4uNzJmZjE3ZCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9zdG9yYWdlL0lE
QkRhdGFiYXNlLmNwcAorKysgYi9XZWJDb3JlL3N0b3JhZ2UvSURCRGF0YWJhc2UuY3BwCkBAIC01
NiwxMyArNTYsMTkgQEAgdm9pZCBJREJEYXRhYmFzZTo6c2V0U2V0VmVyc2lvblRyYW5zYWN0aW9u
KElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZSogdHJhbnMKICAgICBtX3NldFZlcnNpb25U
cmFuc2FjdGlvbiA9IHRyYW5zYWN0aW9uOwogfQogCi1QYXNzUmVmUHRyPElEQk9iamVjdFN0b3Jl
PiBJREJEYXRhYmFzZTo6Y3JlYXRlT2JqZWN0U3RvcmUoY29uc3QgU3RyaW5nJiBuYW1lLCBjb25z
dCBTdHJpbmcmIGtleVBhdGgsIGJvb2wgYXV0b0luY3JlbWVudCwgRXhjZXB0aW9uQ29kZSYgZWMp
CitQYXNzUmVmUHRyPElEQk9iamVjdFN0b3JlPiBJREJEYXRhYmFzZTo6Y3JlYXRlT2JqZWN0U3Rv
cmUoY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBPcHRpb25zT2JqZWN0JiBvcHRpb25zLCBFeGNl
cHRpb25Db2RlJiBlYykKIHsKICAgICBpZiAoIW1fc2V0VmVyc2lvblRyYW5zYWN0aW9uKSB7CiAg
ICAgICAgIGVjID0gSURCRGF0YWJhc2VFeGNlcHRpb246Ok5PVF9BTExPV0VEX0VSUjsKICAgICAg
ICAgcmV0dXJuIDA7CiAgICAgfQogCisgICAgU3RyaW5nIGtleVBhdGg7CisgICAgb3B0aW9ucy5n
ZXRLZXlTdHJpbmcoImtleVBhdGgiLCBrZXlQYXRoKTsKKyAgICBib29sIGF1dG9JbmNyZW1lbnQg
PSBmYWxzZTsKKyAgICBvcHRpb25zLmdldEtleUJvb2woImF1dG9JbmNyZW1lbnQiLCBhdXRvSW5j
cmVtZW50KTsKKyAgICAvLyBGSVhNRTogTG9vayB1cCBldmljdGFibGUgYW5kIHBhc3MgdGhhdCBv
biBhcyB3ZWxsLgorCiAgICAgUmVmUHRyPElEQk9iamVjdFN0b3JlQmFja2VuZEludGVyZmFjZT4g
b2JqZWN0U3RvcmUgPSBtX2JhY2tlbmQtPmNyZWF0ZU9iamVjdFN0b3JlKG5hbWUsIGtleVBhdGgs
IGF1dG9JbmNyZW1lbnQsIG1fc2V0VmVyc2lvblRyYW5zYWN0aW9uLmdldCgpLCBlYyk7CiAgICAg
aWYgKCFvYmplY3RTdG9yZSkgewogICAgICAgICAvLyBGSVhNRTogQVNTRVJUKGVjKSBvbmNlIFVO
S05PV05fRVJSIGlzIG5vdCAwLgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9zdG9yYWdlL0lEQkRhdGFi
YXNlLmggYi9XZWJDb3JlL3N0b3JhZ2UvSURCRGF0YWJhc2UuaAppbmRleCBkZjU2ZjQ2Li4zZTMz
NDcyIDEwMDY0NAotLS0gYS9XZWJDb3JlL3N0b3JhZ2UvSURCRGF0YWJhc2UuaAorKysgYi9XZWJD
b3JlL3N0b3JhZ2UvSURCRGF0YWJhc2UuaApAQCAtMzEsNiArMzEsNyBAQAogI2luY2x1ZGUgIklE
QkRhdGFiYXNlQmFja2VuZEludGVyZmFjZS5oIgogI2luY2x1ZGUgIklEQk9iamVjdFN0b3JlLmgi
CiAjaW5jbHVkZSAiSURCVHJhbnNhY3Rpb24uaCIKKyNpbmNsdWRlICJPcHRpb25zT2JqZWN0Lmgi
CiAjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KICNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5o
PgogI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KQEAgLTU5LDEzICs2MCwxMiBAQCBwdWJsaWM6CiAg
ICAgUGFzc1JlZlB0cjxET01TdHJpbmdMaXN0PiBvYmplY3RTdG9yZXMoKSBjb25zdCB7IHJldHVy
biBtX2JhY2tlbmQtPm9iamVjdFN0b3JlcygpOyB9CiAKICAgICAvLyBGSVhNRTogVHJ5IHRvIG1v
ZGlmeSB0aGUgY29kZSBnZW5lcmF0b3Igc28gdGhpcyBpcyB1bm5lZWRlZC4KLSAgICBQYXNzUmVm
UHRyPElEQk9iamVjdFN0b3JlPiBjcmVhdGVPYmplY3RTdG9yZShjb25zdCBTdHJpbmcmIG5hbWUs
IEV4Y2VwdGlvbkNvZGUmIGVjKSB7IHJldHVybiBjcmVhdGVPYmplY3RTdG9yZShuYW1lLCBTdHJp
bmcoKSwgZWMpOyB9Ci0gICAgUGFzc1JlZlB0cjxJREJPYmplY3RTdG9yZT4gY3JlYXRlT2JqZWN0
U3RvcmUoY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBTdHJpbmcmIGtleVBhdGgsIEV4Y2VwdGlv
bkNvZGUmIGVjKSB7IHJldHVybiBjcmVhdGVPYmplY3RTdG9yZShuYW1lLCBrZXlQYXRoLCBmYWxz
ZSwgZWMpOyB9CisgICAgUGFzc1JlZlB0cjxJREJPYmplY3RTdG9yZT4gY3JlYXRlT2JqZWN0U3Rv
cmUoY29uc3QgU3RyaW5nJiBuYW1lLCBFeGNlcHRpb25Db2RlJiBlYykgeyByZXR1cm4gY3JlYXRl
T2JqZWN0U3RvcmUobmFtZSwgT3B0aW9uc09iamVjdCgpLCBlYyk7IH0KICAgICBQYXNzUmVmUHRy
PElEQlRyYW5zYWN0aW9uPiB0cmFuc2FjdGlvbihTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250
ZXh0LCBFeGNlcHRpb25Db2RlJiBlYykgeyByZXR1cm4gdHJhbnNhY3Rpb24oY29udGV4dCwgMCwg
ZWMpOyB9CiAgICAgUGFzc1JlZlB0cjxJREJUcmFuc2FjdGlvbj4gdHJhbnNhY3Rpb24oU2NyaXB0
RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwgRE9NU3RyaW5nTGlzdCogc3RvcmVOYW1lcywgRXhj
ZXB0aW9uQ29kZSYgZWMpIHsgcmV0dXJuIHRyYW5zYWN0aW9uKGNvbnRleHQsIHN0b3JlTmFtZXMs
IElEQlRyYW5zYWN0aW9uOjpSRUFEX09OTFksIGVjKTsgfQogICAgIFBhc3NSZWZQdHI8SURCVHJh
bnNhY3Rpb24+IHRyYW5zYWN0aW9uKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIERP
TVN0cmluZ0xpc3QqIHN0b3JlTmFtZXMsIHVuc2lnbmVkIHNob3J0IG1vZGUsIEV4Y2VwdGlvbkNv
ZGUmIGVjKSB7IHJldHVybiB0cmFuc2FjdGlvbihjb250ZXh0LCBzdG9yZU5hbWVzLCBtb2RlLCAw
LCBlYyk7IH0gLy8gRklYTUU6IHdoYXQgc2hvdWxkIHRoZSBkZWZhdWx0IHRpbWVvdXQgYmU/CiAK
LSAgICBQYXNzUmVmUHRyPElEQk9iamVjdFN0b3JlPiBjcmVhdGVPYmplY3RTdG9yZShjb25zdCBT
dHJpbmcmIG5hbWUsIGNvbnN0IFN0cmluZyYga2V5UGF0aCwgYm9vbCBhdXRvSW5jcmVtZW50LCBF
eGNlcHRpb25Db2RlJik7CisgICAgUGFzc1JlZlB0cjxJREJPYmplY3RTdG9yZT4gY3JlYXRlT2Jq
ZWN0U3RvcmUoY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBPcHRpb25zT2JqZWN0JiwgRXhjZXB0
aW9uQ29kZSYpOwogICAgIHZvaWQgcmVtb3ZlT2JqZWN0U3RvcmUoY29uc3QgU3RyaW5nJiBuYW1l
LCBFeGNlcHRpb25Db2RlJik7CiAgICAgUGFzc1JlZlB0cjxJREJSZXF1ZXN0PiBzZXRWZXJzaW9u
KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBjb25zdCBTdHJpbmcmIHZlcnNpb24sIEV4Y2VwdGlv
bkNvZGUmKTsKICAgICBQYXNzUmVmUHRyPElEQlRyYW5zYWN0aW9uPiB0cmFuc2FjdGlvbihTY3Jp
cHRFeGVjdXRpb25Db250ZXh0KiwgRE9NU3RyaW5nTGlzdCosIHVuc2lnbmVkIHNob3J0IG1vZGUs
IHVuc2lnbmVkIGxvbmcgdGltZW91dCwgRXhjZXB0aW9uQ29kZSYpOwpkaWZmIC0tZ2l0IGEvV2Vi
Q29yZS9zdG9yYWdlL0lEQkRhdGFiYXNlLmlkbCBiL1dlYkNvcmUvc3RvcmFnZS9JREJEYXRhYmFz
ZS5pZGwKaW5kZXggMWFiNWIwYi4uYjA4ZDQ1OSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9zdG9yYWdl
L0lEQkRhdGFiYXNlLmlkbAorKysgYi9XZWJDb3JlL3N0b3JhZ2UvSURCRGF0YWJhc2UuaWRsCkBA
IC0zMiw3ICszMiw3IEBAIG1vZHVsZSBzdG9yYWdlIHsKICAgICAgICAgcmVhZG9ubHkgYXR0cmli
dXRlIERPTVN0cmluZyB2ZXJzaW9uOwogICAgICAgICByZWFkb25seSBhdHRyaWJ1dGUgRE9NU3Ry
aW5nTGlzdCBvYmplY3RTdG9yZXM7CiAKLSAgICAgICAgSURCT2JqZWN0U3RvcmUgY3JlYXRlT2Jq
ZWN0U3RvcmUoaW4gRE9NU3RyaW5nIG5hbWUsIGluIFtPcHRpb25hbCwgQ29udmVydE51bGxUb051
bGxTdHJpbmddIERPTVN0cmluZyBrZXlQYXRoLCBpbiBbT3B0aW9uYWxdIGJvb2xlYW4gYXV0b0lu
Y3JlbWVudCkKKyAgICAgICAgSURCT2JqZWN0U3RvcmUgY3JlYXRlT2JqZWN0U3RvcmUoaW4gRE9N
U3RyaW5nIG5hbWUsIGluIFtPcHRpb25hbF0gT3B0aW9uc09iamVjdCBvcHRpb25zKQogICAgICAg
ICAgICAgcmFpc2VzIChJREJEYXRhYmFzZUV4Y2VwdGlvbik7CiAgICAgICAgIHZvaWQgcmVtb3Zl
T2JqZWN0U3RvcmUoaW4gRE9NU3RyaW5nIG5hbWUpCiAgICAgICAgICAgICByYWlzZXMgKElEQkRh
dGFiYXNlRXhjZXB0aW9uKTsKZGlmZiAtLWdpdCBhL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cg
Yi9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCmluZGV4IDkxMmFiN2YuLmQ1ZGI4MzggMTAwNjQ0
Ci0tLSBhL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKKysrIGIvV2ViS2l0L2Nocm9taXVtL0No
YW5nZUxvZwpAQCAtMSwzICsxLDEzIEBACisyMDEwLTExLTI1ICBKZXJlbXkgT3Jsb3cgIDxqb3Js
b3dAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgor
CisgICAgICAgIEFkZCBleGNlcHRpb24gY29kZSB0byBXZWJJREJUcmFuc2FjdGlvbjo6b2JqZWN0
U3RvcmUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTUw
MDMwCisKKyAgICAgICAgKiBwdWJsaWMvV2ViSURCVHJhbnNhY3Rpb24uaDoKKyAgICAgICAgKFdl
YktpdDo6V2ViSURCVHJhbnNhY3Rpb246Om9iamVjdFN0b3JlKToKKwogMjAxMC0xMS0yNCAgU2F0
aXNoIFNhbXBhdGggIDxzYXRpc2hAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5
IFN0ZXZlIEJsb2NrLgpkaWZmIC0tZ2l0IGEvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJJREJU
cmFuc2FjdGlvbi5oIGIvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJJREJUcmFuc2FjdGlvbi5o
CmluZGV4IGU3NWRlM2MuLjU4NGI2N2EgMTAwNjQ0Ci0tLSBhL1dlYktpdC9jaHJvbWl1bS9wdWJs
aWMvV2ViSURCVHJhbnNhY3Rpb24uaAorKysgYi9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYklE
QlRyYW5zYWN0aW9uLmgKQEAgLTI2LDYgKzI2LDcgQEAKICNpZm5kZWYgV2ViSURCVHJhbnNhY3Rp
b25faAogI2RlZmluZSBXZWJJREJUcmFuc2FjdGlvbl9oCiAKKyNpbmNsdWRlICJXZWJFeGNlcHRp
b25Db2RlLmgiCiAjaW5jbHVkZSAiV2ViU3RyaW5nLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsg
Y2xhc3MgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlOyB9CkBAIC00NSwxMCArNDYsMTUg
QEAgcHVibGljOgogICAgICAgICBXRUJLSVRfQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAg
IHJldHVybiAwOwogICAgIH0KKyAgICB2aXJ0dWFsIFdlYklEQk9iamVjdFN0b3JlKiBvYmplY3RT
dG9yZShjb25zdCBXZWJTdHJpbmcmIG5hbWUsIFdlYkV4Y2VwdGlvbkNvZGUmKQorICAgIHsKKyAg
ICAgICAgcmV0dXJuIG9iamVjdFN0b3JlKG5hbWUpOworICAgIH0KKyAgICAvLyBGSVhNRTogUmVt
b3ZlIHRoaXMgYWZ0ZXIgV2ViS2l0IHJvbGwuCiAgICAgdmlydHVhbCBXZWJJREJPYmplY3RTdG9y
ZSogb2JqZWN0U3RvcmUoY29uc3QgV2ViU3RyaW5nJiBuYW1lKQogICAgIHsKLSAgICAgICAgV0VC
S0lUX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgV2Vi
RXhjZXB0aW9uQ29kZSBlYzsKKyAgICAgICAgcmV0dXJuIG9iamVjdFN0b3JlKG5hbWUsIGVjKTsK
ICAgICB9CiAgICAgdmlydHVhbCB2b2lkIGFib3J0KCkgeyBXRUJLSVRfQVNTRVJUX05PVF9SRUFD
SEVEKCk7IH0KICAgICB2aXJ0dWFsIHZvaWQgZGlkQ29tcGxldGVUYXNrRXZlbnRzKCkgeyBXRUJL
SVRfQVNTRVJUX05PVF9SRUFDSEVEKCk7IH0K
</data>
<flag name="review"
          id="65562"
          type_id="1"
          status="+"
          setter="steveblock"
    />
          </attachment>
      

    </bug>

</bugzilla>