<?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>53421</bug_id>
          
          <creation_ts>2011-01-31 06:56:04 -0800</creation_ts>
          <short_desc>IndexedDB: Implement support for cursor updates</short_desc>
          <delta_ts>2011-02-02 02:11:14 -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>Other</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="Hans Wennborg">hans</reporter>
          <assigned_to name="Hans Wennborg">hans</assigned_to>
          <cc>andreip</cc>
    
    <cc>dgrogan</cc>
    
    <cc>jorlow</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>342557</commentid>
    <comment_count>0</comment_count>
    <who name="Hans Wennborg">hans</who>
    <bug_when>2011-01-31 06:56:04 -0800</bug_when>
    <thetext>IndexedDB: Implement support for cursor updates</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>342561</commentid>
    <comment_count>1</comment_count>
      <attachid>80638</attachid>
    <who name="Hans Wennborg">hans</who>
    <bug_when>2011-01-31 07:21:19 -0800</bug_when>
    <thetext>Created attachment 80638
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>342616</commentid>
    <comment_count>2</comment_count>
      <attachid>80638</attachid>
    <who name="Jeremy Orlow">jorlow</who>
    <bug_when>2011-01-31 09:34:16 -0800</bug_when>
    <thetext>Comment on attachment 80638
Patch

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

&gt; Source/WebCore/storage/IDBCursorBackendImpl.cpp:81
&gt;  void IDBCursorBackendImpl::update(PassRefPtr&lt;SerializedScriptValue&gt; prpValue, PassRefPtr&lt;IDBCallbacks&gt; prpCallbacks, ExceptionCode&amp; ec)

remove the prp...only use that when we&apos;re about to assign to a RefPtr

&gt; Source/WebCore/storage/IDBCursorBackendImpl.cpp:88
&gt; +    RefPtr&lt;IDBKey&gt; key = m_currentIDBKeyValue ? m_currentIDBKeyValue : m_currentKey;

Can you please fix up the naming a bit.  It&apos;s kind of confusing.  And/or add a comment in the header.

&gt; Source/WebCore/storage/IDBObjectStoreBackendImpl.cpp:213
&gt; +    if (objectStore-&gt;autoIncrement() &amp;&amp; key &amp;&amp; putMode != CursorUpdate) {

Hmm...if we implement autoIncrement properly, will we even need to distinguish between CursorUpdate and not?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>342627</commentid>
    <comment_count>3</comment_count>
    <who name="Hans Wennborg">hans</who>
    <bug_when>2011-01-31 09:54:42 -0800</bug_when>
    <thetext>(In reply to comment #2)
&gt; (From update of attachment 80638 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=80638&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/storage/IDBCursorBackendImpl.cpp:81
&gt; &gt;  void IDBCursorBackendImpl::update(PassRefPtr&lt;SerializedScriptValue&gt; prpValue, PassRefPtr&lt;IDBCallbacks&gt; prpCallbacks, ExceptionCode&amp; ec)
&gt; 
&gt; remove the prp...only use that when we&apos;re about to assign to a RefPtr
Will fix.

&gt; 
&gt; &gt; Source/WebCore/storage/IDBCursorBackendImpl.cpp:88
&gt; &gt; +    RefPtr&lt;IDBKey&gt; key = m_currentIDBKeyValue ? m_currentIDBKeyValue : m_currentKey;
&gt; 
&gt; Can you please fix up the naming a bit.  It&apos;s kind of confusing.  And/or add a comment in the header.
Will do.

&gt; 
&gt; &gt; Source/WebCore/storage/IDBObjectStoreBackendImpl.cpp:213
&gt; &gt; +    if (objectStore-&gt;autoIncrement() &amp;&amp; key &amp;&amp; putMode != CursorUpdate) {
&gt; 
&gt; Hmm...if we implement autoIncrement properly, will we even need to distinguish between CursorUpdate and not?

Yeah, if we change the auto increment semantics, those checks could go away.

We still need the CursorUpdate mode for handling object stores with key paths, though.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>343003</commentid>
    <comment_count>4</comment_count>
      <attachid>80638</attachid>
    <who name="Jeremy Orlow">jorlow</who>
    <bug_when>2011-01-31 20:46:25 -0800</bug_when>
    <thetext>Comment on attachment 80638
Patch

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

r=me assuming you fix these issues and/or start on the next patch right away

&gt; LayoutTests/storage/indexeddb/cursor-update.html:79
&gt; +    keyRange = webkitIDBKeyRange.lowerBound(&quot;myKey1&quot;);

maybe blank newline before?

&gt; LayoutTests/storage/indexeddb/cursor-update.html:80
&gt; +    result = evalAndLog(&quot;trans.objectStore(&apos;basicStore&apos;).openCursor({range: keyRange})&quot;);

Wait...did we not revert the options object for cursors...?

&gt; LayoutTests/storage/indexeddb/cursor-update.html:125
&gt; +function autoIncrementUpdateCursor()

If you were writing this again, it probably would have been worth trying to factor this out more properly.  No worries tho.

&gt; LayoutTests/storage/indexeddb/cursor-update.html:180
&gt; +        shouldBe(&quot;event.code&quot;, &quot;webkitIDBDatabaseException.DATA_ERR&quot;);

According to the (imaginary version of the) spec, this is wrong, right?  We should probably make this work as it&apos;s supposed to.  See my comment in the cpp.

&gt; LayoutTests/storage/indexeddb/cursor-update.html:182
&gt; +        result = evalAndLog(&quot;event.source.update({id: counter, number: 100 + counter++})&quot;);

This likely doesn&apos;t work how you expect it to.  counter++ gets run when the onerror happens, which means they were all updated to just 100 I&apos;m pretty sure.

&gt;&gt;&gt; Source/WebCore/storage/IDBObjectStoreBackendImpl.cpp:213
&gt;&gt;&gt; +    if (objectStore-&gt;autoIncrement() &amp;&amp; key &amp;&amp; putMode != CursorUpdate) {
&gt;&gt; 
&gt;&gt; Hmm...if we implement autoIncrement properly, will we even need to distinguish between CursorUpdate and not?
&gt; 
&gt; Yeah, if we change the auto increment semantics, those checks could go away.
&gt; 
&gt; We still need the CursorUpdate mode for handling object stores with key paths, though.

Let&apos;s try to fix the autoIncrement implementation soon then.

&gt; Source/WebCore/storage/IDBObjectStoreBackendImpl.cpp:234
&gt; +        if (putMode == CursorUpdate &amp;&amp; !keyPathKey-&gt;isEqual(key.get())) {

Hmm....does this make sense?  The key is the old key, right?  That can change....right?

&gt; Source/WebKit/chromium/public/WebIDBObjectStore.h:79
&gt; +        put(value, key, putMode == AddOnly ? true : false, callbacks, transaction, ec);

don&apos;t need the ? true : false part</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>343137</commentid>
    <comment_count>5</comment_count>
      <attachid>80738</attachid>
    <who name="Hans Wennborg">hans</who>
    <bug_when>2011-02-01 04:34:04 -0800</bug_when>
    <thetext>Created attachment 80738
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>343138</commentid>
    <comment_count>6</comment_count>
    <who name="Hans Wennborg">hans</who>
    <bug_when>2011-02-01 04:35:29 -0800</bug_when>
    <thetext>Uploading new patch and waiting for review as there are still some question marks:


(In reply to comment #2)
&gt; &gt; Source/WebCore/storage/IDBCursorBackendImpl.cpp:81
&gt; &gt;  void IDBCursorBackendImpl::update(PassRefPtr&lt;SerializedScriptValue&gt; prpValue, PassRefPtr&lt;IDBCallbacks&gt; prpCallbacks, ExceptionCode&amp; ec)
&gt; 
&gt; remove the prp...only use that when we&apos;re about to assign to a RefPtr

Just to make sure I understand correctly: do you want prpValue and prpCallbacks to be raw pointers instead?

I&apos;m not sure I really understand this.. shouldn&apos;t that apply to the deleteFunction() too?

And IDBCursorBackendProxy, which implements the same interface, doesn&apos;t store its PassRefPtr parameters in RefPtrs either?

&gt; &gt; Source/WebCore/storage/IDBCursorBackendImpl.cpp:88
&gt; &gt; +    RefPtr&lt;IDBKey&gt; key = m_currentIDBKeyValue ? m_currentIDBKeyValue : m_currentKey;
&gt; 
&gt; Can you please fix up the naming a bit.  It&apos;s kind of confusing.  And/or add a comment in the header.
&gt; 

Trying to clarify with comments.. I don&apos;t really have ideas for better names :S


(In reply to comment #4)
&gt; &gt; LayoutTests/storage/indexeddb/cursor-update.html:79
&gt; &gt; +    keyRange = webkitIDBKeyRange.lowerBound(&quot;myKey1&quot;);
&gt; 
&gt; maybe blank newline before?
Done.

&gt; &gt; LayoutTests/storage/indexeddb/cursor-update.html:80
&gt; &gt; +    result = evalAndLog(&quot;trans.objectStore(&apos;basicStore&apos;).openCursor({range: keyRange})&quot;);
&gt; 
&gt; Wait...did we not revert the options object for cursors...?
Oops. Fixed.

&gt; 
&gt; &gt; LayoutTests/storage/indexeddb/cursor-update.html:125
&gt; &gt; +function autoIncrementUpdateCursor()
&gt; 
&gt; If you were writing this again, it probably would have been worth trying to factor this out more properly.  No worries tho.
Ok.

&gt; 
&gt; &gt; LayoutTests/storage/indexeddb/cursor-update.html:180
&gt; &gt; +        shouldBe(&quot;event.code&quot;, &quot;webkitIDBDatabaseException.DATA_ERR&quot;);
&gt; 
&gt; According to the (imaginary version of the) spec, this is wrong, right?  We should probably make this work as it&apos;s supposed to.  See my comment in the cpp.

No, I think the spec is right here: &quot;If the effective object store of this cursor uses in-line keys and evaluating the key path of the value parameter results in a different value than the cursor&apos;s effective key, this method throws DATA_ERR.&quot;

I think this makes sense.

&gt; &gt; LayoutTests/storage/indexeddb/cursor-update.html:182
&gt; &gt; +        result = evalAndLog(&quot;event.source.update({id: counter, number: 100 + counter++})&quot;);
&gt; 
&gt; This likely doesn&apos;t work how you expect it to.  counter++ gets run when the onerror happens, which means they were all updated to just 100 I&apos;m pretty sure.

But counter is global to the file, so it&apos;s not a problem that it is run when the onerror happens. I&apos;ve updated keyPathCheckCursor() below to make it clearer what the actual values end up being.

&gt; &gt; Source/WebCore/storage/IDBObjectStoreBackendImpl.cpp:234
&gt; &gt; +        if (putMode == CursorUpdate &amp;&amp; !keyPathKey-&gt;isEqual(key.get())) {
&gt; 
&gt; Hmm....does this make sense?  The key is the old key, right?  That can change....right?

No, one is not allowed to change the object so that the key from the keypath changes: &quot;If the effective object store of this cursor uses in-line keys and evaluating the key path of the value parameter results in a different value than the cursor&apos;s effective key, this method throws DATA_ERR.&quot;

&gt; &gt; Source/WebKit/chromium/public/WebIDBObjectStore.h:79
&gt; &gt; +        put(value, key, putMode == AddOnly ? true : false, callbacks, transaction, ec);
&gt; 
&gt; don&apos;t need the ? true : false part

Silly me. Fixed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>343285</commentid>
    <comment_count>7</comment_count>
    <who name="Jeremy Orlow">jorlow</who>
    <bug_when>2011-02-01 09:59:09 -0800</bug_when>
    <thetext>(In reply to comment #6)
&gt; Uploading new patch and waiting for review as there are still some question marks:
&gt; 
&gt; 
&gt; (In reply to comment #2)
&gt; &gt; &gt; Source/WebCore/storage/IDBCursorBackendImpl.cpp:81
&gt; &gt; &gt;  void IDBCursorBackendImpl::update(PassRefPtr&lt;SerializedScriptValue&gt; prpValue, PassRefPtr&lt;IDBCallbacks&gt; prpCallbacks, ExceptionCode&amp; ec)
&gt; &gt; 
&gt; &gt; remove the prp...only use that when we&apos;re about to assign to a RefPtr
&gt; 
&gt; Just to make sure I understand correctly: do you want prpValue and prpCallbacks to be raw pointers instead?
&gt; 
&gt; I&apos;m not sure I really understand this.. shouldn&apos;t that apply to the deleteFunction() too?

No, just change the name to &quot;value&quot; rather than &quot;prpValue&quot; for example.

&gt; And IDBCursorBackendProxy, which implements the same interface, doesn&apos;t store its PassRefPtr parameters in RefPtrs either?
&gt; 
&gt; &gt; &gt; Source/WebCore/storage/IDBCursorBackendImpl.cpp:88
&gt; &gt; &gt; +    RefPtr&lt;IDBKey&gt; key = m_currentIDBKeyValue ? m_currentIDBKeyValue : m_currentKey;
&gt; &gt; 
&gt; &gt; Can you please fix up the naming a bit.  It&apos;s kind of confusing.  And/or add a comment in the header.
&gt; &gt; 
&gt; 
&gt; Trying to clarify with comments.. I don&apos;t really have ideas for better names :S

I guess just go with the names that&apos;ll show up in the IDL.  So m_currentValue and m_currentIndexKey IIRC?

&gt; (In reply to comment #4)
&gt; &gt; &gt; LayoutTests/storage/indexeddb/cursor-update.html:79
&gt; &gt; &gt; +    keyRange = webkitIDBKeyRange.lowerBound(&quot;myKey1&quot;);
&gt; &gt; 
&gt; &gt; maybe blank newline before?
&gt; Done.
&gt; 
&gt; &gt; &gt; LayoutTests/storage/indexeddb/cursor-update.html:80
&gt; &gt; &gt; +    result = evalAndLog(&quot;trans.objectStore(&apos;basicStore&apos;).openCursor({range: keyRange})&quot;);
&gt; &gt; 
&gt; &gt; Wait...did we not revert the options object for cursors...?
&gt; Oops. Fixed.
&gt; 
&gt; &gt; 
&gt; &gt; &gt; LayoutTests/storage/indexeddb/cursor-update.html:125
&gt; &gt; &gt; +function autoIncrementUpdateCursor()
&gt; &gt; 
&gt; &gt; If you were writing this again, it probably would have been worth trying to factor this out more properly.  No worries tho.
&gt; Ok.
&gt; 
&gt; &gt; 
&gt; &gt; &gt; LayoutTests/storage/indexeddb/cursor-update.html:180
&gt; &gt; &gt; +        shouldBe(&quot;event.code&quot;, &quot;webkitIDBDatabaseException.DATA_ERR&quot;);
&gt; &gt; 
&gt; &gt; According to the (imaginary version of the) spec, this is wrong, right?  We should probably make this work as it&apos;s supposed to.  See my comment in the cpp.
&gt; 
&gt; No, I think the spec is right here: &quot;If the effective object store of this cursor uses in-line keys and evaluating the key path of the value parameter results in a different value than the cursor&apos;s effective key, this method throws DATA_ERR.&quot;
&gt; 
&gt; I think this makes sense.

Why do we need to limit it this way, though?
 
&gt; &gt; &gt; LayoutTests/storage/indexeddb/cursor-update.html:182
&gt; &gt; &gt; +        result = evalAndLog(&quot;event.source.update({id: counter, number: 100 + counter++})&quot;);
&gt; &gt; 
&gt; &gt; This likely doesn&apos;t work how you expect it to.  counter++ gets run when the onerror happens, which means they were all updated to just 100 I&apos;m pretty sure.
&gt; 
&gt; But counter is global to the file, so it&apos;s not a problem that it is run when the onerror happens. I&apos;ve updated keyPathCheckCursor() below to make it clearer what the actual values end up being.

I see..yeah, guess it&apos;s fine.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>343315</commentid>
    <comment_count>8</comment_count>
    <who name="Hans Wennborg">hans</who>
    <bug_when>2011-02-01 10:25:48 -0800</bug_when>
    <thetext>(In reply to comment #7)
&gt; &gt; &gt; &gt; Source/WebCore/storage/IDBCursorBackendImpl.cpp:81
&gt; &gt; &gt; &gt;  void IDBCursorBackendImpl::update(PassRefPtr&lt;SerializedScriptValue&gt; prpValue, PassRefPtr&lt;IDBCallbacks&gt; prpCallbacks, ExceptionCode&amp; ec)
&gt; &gt; &gt; 
&gt; &gt; &gt; remove the prp...only use that when we&apos;re about to assign to a RefPtr
&gt; &gt; 
&gt; &gt; Just to make sure I understand correctly: do you want prpValue and prpCallbacks to be raw pointers instead?
&gt; &gt; 
&gt; &gt; I&apos;m not sure I really understand this.. shouldn&apos;t that apply to the deleteFunction() too?
&gt; 
&gt; No, just change the name to &quot;value&quot; rather than &quot;prpValue&quot; for example.

Ah, I misunderstood. Fixing.

&gt; &gt; &gt; &gt; Source/WebCore/storage/IDBCursorBackendImpl.cpp:88
&gt; &gt; &gt; &gt; +    RefPtr&lt;IDBKey&gt; key = m_currentIDBKeyValue ? m_currentIDBKeyValue : m_currentKey;
&gt; &gt; &gt; 
&gt; &gt; &gt; Can you please fix up the naming a bit.  It&apos;s kind of confusing.  And/or add a comment in the header.
&gt; &gt; &gt; 
&gt; &gt; 
&gt; &gt; Trying to clarify with comments.. I don&apos;t really have ideas for better names :S
&gt; 
&gt; I guess just go with the names that&apos;ll show up in the IDL.  So m_currentValue and m_currentIndexKey IIRC?

Which IDL are you referring to? The cursor only has a &quot;key&quot; and a &quot;value&quot; attribute?

&gt; &gt; &gt; &gt; LayoutTests/storage/indexeddb/cursor-update.html:180
&gt; &gt; &gt; &gt; +        shouldBe(&quot;event.code&quot;, &quot;webkitIDBDatabaseException.DATA_ERR&quot;);
&gt; &gt; &gt; 
&gt; &gt; &gt; According to the (imaginary version of the) spec, this is wrong, right?  We should probably make this work as it&apos;s supposed to.  See my comment in the cpp.
&gt; &gt; 
&gt; &gt; No, I think the spec is right here: &quot;If the effective object store of this cursor uses in-line keys and evaluating the key path of the value parameter results in a different value than the cursor&apos;s effective key, this method throws DATA_ERR.&quot;
&gt; &gt; 
&gt; &gt; I think this makes sense.
&gt; 
&gt; Why do we need to limit it this way, though?

Because otherwise the keys that the cursor is iterating over can &quot;change from underneath our feet&quot;, and that seems like a bad idea.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>343350</commentid>
    <comment_count>9</comment_count>
    <who name="Jeremy Orlow">jorlow</who>
    <bug_when>2011-02-01 11:00:50 -0800</bug_when>
    <thetext>(In reply to comment #8)
&gt; (In reply to comment #7)
&gt; &gt; &gt; &gt; &gt; Source/WebCore/storage/IDBCursorBackendImpl.cpp:81
&gt; &gt; &gt; &gt; &gt;  void IDBCursorBackendImpl::update(PassRefPtr&lt;SerializedScriptValue&gt; prpValue, PassRefPtr&lt;IDBCallbacks&gt; prpCallbacks, ExceptionCode&amp; ec)
&gt; &gt; &gt; &gt; 
&gt; &gt; &gt; &gt; remove the prp...only use that when we&apos;re about to assign to a RefPtr
&gt; &gt; &gt; 
&gt; &gt; &gt; Just to make sure I understand correctly: do you want prpValue and prpCallbacks to be raw pointers instead?
&gt; &gt; &gt; 
&gt; &gt; &gt; I&apos;m not sure I really understand this.. shouldn&apos;t that apply to the deleteFunction() too?
&gt; &gt; 
&gt; &gt; No, just change the name to &quot;value&quot; rather than &quot;prpValue&quot; for example.
&gt; 
&gt; Ah, I misunderstood. Fixing.
&gt; 
&gt; &gt; &gt; &gt; &gt; Source/WebCore/storage/IDBCursorBackendImpl.cpp:88
&gt; &gt; &gt; &gt; &gt; +    RefPtr&lt;IDBKey&gt; key = m_currentIDBKeyValue ? m_currentIDBKeyValue : m_currentKey;
&gt; &gt; &gt; &gt; 
&gt; &gt; &gt; &gt; Can you please fix up the naming a bit.  It&apos;s kind of confusing.  And/or add a comment in the header.
&gt; &gt; &gt; &gt; 
&gt; &gt; &gt; 
&gt; &gt; &gt; Trying to clarify with comments.. I don&apos;t really have ideas for better names :S
&gt; &gt; 
&gt; &gt; I guess just go with the names that&apos;ll show up in the IDL.  So m_currentValue and m_currentIndexKey IIRC?
&gt; 
&gt; Which IDL are you referring to? The cursor only has a &quot;key&quot; and a &quot;value&quot; attribute?

Oops...wasn&apos;t really properly bugged: http://www.w3.org/Bugs/Public/show_bug.cgi?id=11948
 
&gt; &gt; &gt; &gt; &gt; LayoutTests/storage/indexeddb/cursor-update.html:180
&gt; &gt; &gt; &gt; &gt; +        shouldBe(&quot;event.code&quot;, &quot;webkitIDBDatabaseException.DATA_ERR&quot;);
&gt; &gt; &gt; &gt; 
&gt; &gt; &gt; &gt; According to the (imaginary version of the) spec, this is wrong, right?  We should probably make this work as it&apos;s supposed to.  See my comment in the cpp.
&gt; &gt; &gt; 
&gt; &gt; &gt; No, I think the spec is right here: &quot;If the effective object store of this cursor uses in-line keys and evaluating the key path of the value parameter results in a different value than the cursor&apos;s effective key, this method throws DATA_ERR.&quot;
&gt; &gt; &gt; 
&gt; &gt; &gt; I think this makes sense.
&gt; &gt; 
&gt; &gt; Why do we need to limit it this way, though?
&gt; 
&gt; Because otherwise the keys that the cursor is iterating over can &quot;change from underneath our feet&quot;, and that seems like a bad idea.

They already can.  Just do a put.

On the other hand, the put would add a new item whereas this is essentially a remove + a put...but I guess I&apos;m not sure why we disallow this.  Will bring it up on list.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>343351</commentid>
    <comment_count>10</comment_count>
      <attachid>80738</attachid>
    <who name="Jeremy Orlow">jorlow</who>
    <bug_when>2011-02-01 11:01:48 -0800</bug_when>
    <thetext>Comment on attachment 80738
Patch

change the prp bit and you should be good to go</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>343921</commentid>
    <comment_count>11</comment_count>
    <who name="Hans Wennborg">hans</who>
    <bug_when>2011-02-02 02:11:14 -0800</bug_when>
    <thetext>Committed r77371: &lt;http://trac.webkit.org/changeset/77371&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>80638</attachid>
            <date>2011-01-31 07:21:19 -0800</date>
            <delta_ts>2011-02-01 04:33:59 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-53421-20110131152117.patch</filename>
            <type>text/plain</type>
            <size>44075</size>
            <attacher name="Hans Wennborg">hans</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxv
ZwppbmRleCAxMWY5YjY1NWRlZTg1ZTNlM2Y5NTc4NzZlZjY0NDA3NWRmNjg4MTYxLi42ZWZiZWEx
ODdiYTYwYjhhMjJkMTU0N2VhNzU1NzI3YmE0MTI2OGI1IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0
cy9DaGFuZ2VMb2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTUgQEAK
KzIwMTEtMDEtMzEgIEhhbnMgV2VubmJvcmcgIDxoYW5zQGNocm9taXVtLm9yZz4KKworICAgICAg
ICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBJbmRleGVkREI6IEltcGxl
bWVudCBzdXBwb3J0IGZvciBjdXJzb3IgdXBkYXRlcworICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTM0MjEKKworICAgICAgICBMYXlvdXQgdGVzdCBmb3Ig
Y3Vyc29yIHVwZGF0ZXMuCisKKyAgICAgICAgKiBzdG9yYWdlL2luZGV4ZWRkYi9jdXJzb3ItdXBk
YXRlLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICogc3RvcmFnZS9pbmRleGVkZGIvY3Vy
c29yLXVwZGF0ZS5odG1sOiBBZGRlZC4KKwogMjAxMS0wMS0zMCAgS2VuaWNoaSBJc2hpYmFzaGkg
IDxiYXNoaUBnb29nbGUuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IEtlbnQgVGFtdXJhLgpk
aWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvc3RvcmFnZS9pbmRleGVkZGIvY3Vyc29yLXVwZGF0ZS1l
eHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9zdG9yYWdlL2luZGV4ZWRkYi9jdXJzb3ItdXBkYXRl
LWV4cGVjdGVkLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4zOTFkYmY0NDQxYmZkYjE0MTk4ZjM4MjdlMmViNTRk
OThmMGRhZTk2Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvc3RvcmFnZS9pbmRleGVk
ZGIvY3Vyc29yLXVwZGF0ZS1leHBlY3RlZC50eHQKQEAgLTAsMCArMSwyNzkgQEAKK1Rlc3QgSW5k
ZXhlZERCJ3MgY3Vyc29yIHVwZGF0ZS4KKworT24gc3VjY2VzcywgeW91IHdpbGwgc2VlIGEgc2Vy
aWVzIG9mICJQQVNTIiBtZXNzYWdlcywgZm9sbG93ZWQgYnkgIlRFU1QgQ09NUExFVEUiLgorCisK
K3dlYmtpdEluZGV4ZWREQi5vcGVuKCduYW1lJykKK1BBU1MgJ29uc3VjY2VzcycgaW4gcmVzdWx0
IGlzIHRydWUKK1BBU1MgJ29uZXJyb3InIGluIHJlc3VsdCBpcyB0cnVlCitQQVNTICdyZWFkeVN0
YXRlJyBpbiByZXN1bHQgaXMgdHJ1ZQorQW4gZXZlbnQgc2hvdWxkIGZpcmUgc2hvcnRseS4uLgor
CitTdWNjZXNzIGV2ZW50IGZpcmVkOgorUEFTUyAncmVzdWx0JyBpbiBldmVudCBpcyB0cnVlCitQ
QVNTICdjb2RlJyBpbiBldmVudCBpcyBmYWxzZQorUEFTUyAnbWVzc2FnZScgaW4gZXZlbnQgaXMg
ZmFsc2UKK1BBU1MgJ3NvdXJjZScgaW4gZXZlbnQgaXMgdHJ1ZQorUEFTUyBldmVudC5zb3VyY2Ug
IT0gbnVsbCBpcyB0cnVlCitQQVNTICdvbnN1Y2Nlc3MnIGluIGV2ZW50LnRhcmdldCBpcyB0cnVl
CitQQVNTICdvbmVycm9yJyBpbiBldmVudC50YXJnZXQgaXMgdHJ1ZQorUEFTUyAncmVhZHlTdGF0
ZScgaW4gZXZlbnQudGFyZ2V0IGlzIHRydWUKK1BBU1MgZXZlbnQudGFyZ2V0LnJlYWR5U3RhdGUg
aXMgZXZlbnQudGFyZ2V0LkRPTkUKKworZGIgPSBldmVudC5yZXN1bHQKK2RiLnNldFZlcnNpb24o
J25ldyB2ZXJzaW9uJykKK1BBU1MgJ29uc3VjY2VzcycgaW4gcmVzdWx0IGlzIHRydWUKK1BBU1Mg
J29uZXJyb3InIGluIHJlc3VsdCBpcyB0cnVlCitQQVNTICdyZWFkeVN0YXRlJyBpbiByZXN1bHQg
aXMgdHJ1ZQorQW4gZXZlbnQgc2hvdWxkIGZpcmUgc2hvcnRseS4uLgorCitzZXRWZXJzaW9uU3Vj
Y2VzcygpOgorU3VjY2VzcyBldmVudCBmaXJlZDoKK1BBU1MgJ3Jlc3VsdCcgaW4gZXZlbnQgaXMg
dHJ1ZQorUEFTUyAnY29kZScgaW4gZXZlbnQgaXMgZmFsc2UKK1BBU1MgJ21lc3NhZ2UnIGluIGV2
ZW50IGlzIGZhbHNlCitQQVNTICdzb3VyY2UnIGluIGV2ZW50IGlzIHRydWUKK1BBU1MgZXZlbnQu
c291cmNlICE9IG51bGwgaXMgdHJ1ZQorUEFTUyAnb25zdWNjZXNzJyBpbiBldmVudC50YXJnZXQg
aXMgdHJ1ZQorUEFTUyAnb25lcnJvcicgaW4gZXZlbnQudGFyZ2V0IGlzIHRydWUKK1BBU1MgJ3Jl
YWR5U3RhdGUnIGluIGV2ZW50LnRhcmdldCBpcyB0cnVlCitQQVNTIGV2ZW50LnRhcmdldC5yZWFk
eVN0YXRlIGlzIGV2ZW50LnRhcmdldC5ET05FCisKK3RyYW5zID0gZXZlbnQucmVzdWx0CitQQVNT
IHRyYW5zICE9PSBudWxsIGlzIHRydWUKK0RlbGV0ZWQgYWxsIG9iamVjdCBzdG9yZXMuCitjcmVh
dGVBbmRQb3B1bGF0ZU9iamVjdFN0b3JlKCk6CitvYmplY3RTdG9yZSA9IGRiLmNyZWF0ZU9iamVj
dFN0b3JlKCdiYXNpY1N0b3JlJykKK29iamVjdFN0b3JlLmFkZCgnbXlWYWx1ZTEnLCAnbXlLZXkx
Jykub25lcnJvciA9IHVuZXhwZWN0ZWRFcnJvckNhbGxiYWNrCitvYmplY3RTdG9yZS5hZGQoJ215
VmFsdWUyJywgJ215S2V5MicpLm9uZXJyb3IgPSB1bmV4cGVjdGVkRXJyb3JDYWxsYmFjaworb2Jq
ZWN0U3RvcmUuYWRkKCdteVZhbHVlMycsICdteUtleTMnKS5vbmVycm9yID0gdW5leHBlY3RlZEVy
cm9yQ2FsbGJhY2sKK29iamVjdFN0b3JlLmFkZCgnbXlWYWx1ZTQnLCAnbXlLZXk0Jykub25lcnJv
ciA9IHVuZXhwZWN0ZWRFcnJvckNhbGxiYWNrCitvYmplY3RTdG9yZSA9IGRiLmNyZWF0ZU9iamVj
dFN0b3JlKCdhdXRvSW5jcmVtZW50U3RvcmUnLCB7YXV0b0luY3JlbWVudDogdHJ1ZX0pCitvYmpl
Y3RTdG9yZS5hZGQoJ2ZvbzEnKS5vbmVycm9yID0gdW5leHBlY3RlZEVycm9yQ2FsbGJhY2sKK29i
amVjdFN0b3JlLmFkZCgnZm9vMicpLm9uZXJyb3IgPSB1bmV4cGVjdGVkRXJyb3JDYWxsYmFjawor
b2JqZWN0U3RvcmUuYWRkKCdmb28zJykub25lcnJvciA9IHVuZXhwZWN0ZWRFcnJvckNhbGxiYWNr
CitvYmplY3RTdG9yZS5hZGQoJ2ZvbzQnKS5vbmVycm9yID0gdW5leHBlY3RlZEVycm9yQ2FsbGJh
Y2sKK29iamVjdFN0b3JlID0gZGIuY3JlYXRlT2JqZWN0U3RvcmUoJ2tleVBhdGhTdG9yZScsIHtr
ZXlQYXRoOiAnaWQnfSkKK29iamVjdFN0b3JlLmNyZWF0ZUluZGV4KCdudW1iZXJJbmRleCcsICdu
dW1iZXInKQorb2JqZWN0U3RvcmUuYWRkKHtudW1iZXI6IDEsIGlkOiAxfSkub25lcnJvciA9IHVu
ZXhwZWN0ZWRFcnJvckNhbGxiYWNrCitvYmplY3RTdG9yZS5hZGQoe251bWJlcjogMiwgaWQ6IDJ9
KS5vbmVycm9yID0gdW5leHBlY3RlZEVycm9yQ2FsbGJhY2sKK29iamVjdFN0b3JlLmFkZCh7bnVt
YmVyOiAzLCBpZDogM30pLm9uZXJyb3IgPSB1bmV4cGVjdGVkRXJyb3JDYWxsYmFjaworb2JqZWN0
U3RvcmUuYWRkKHtudW1iZXI6IDQsIGlkOiA0fSkub25lcnJvciA9IHVuZXhwZWN0ZWRFcnJvckNh
bGxiYWNrCitvcGVuQmFzaWNDdXJzb3IoKQordHJhbnMgPSBkYi50cmFuc2FjdGlvbihbXSwgd2Vi
a2l0SURCVHJhbnNhY3Rpb24uUkVBRF9XUklURSkKK3RyYW5zLm9iamVjdFN0b3JlKCdiYXNpY1N0
b3JlJykub3BlbkN1cnNvcih7cmFuZ2U6IGtleVJhbmdlfSkKK1BBU1MgJ29uc3VjY2VzcycgaW4g
cmVzdWx0IGlzIHRydWUKK1BBU1MgJ29uZXJyb3InIGluIHJlc3VsdCBpcyB0cnVlCitQQVNTICdy
ZWFkeVN0YXRlJyBpbiByZXN1bHQgaXMgdHJ1ZQorQW4gZXZlbnQgc2hvdWxkIGZpcmUgc2hvcnRs
eS4uLgorCitiYXNpY1VwZGF0ZUN1cnNvcigpCitldmVudC5yZXN1bHQudXBkYXRlKCdteVVwZGF0
ZWRWYWx1ZScgKyBjb3VudGVyKyspCitldmVudC5zb3VyY2UuY29udGludWUoKQorYmFzaWNVcGRh
dGVDdXJzb3IoKQorZXZlbnQucmVzdWx0LnVwZGF0ZSgnbXlVcGRhdGVkVmFsdWUnICsgY291bnRl
cisrKQorZXZlbnQuc291cmNlLmNvbnRpbnVlKCkKK2Jhc2ljVXBkYXRlQ3Vyc29yKCkKK2V2ZW50
LnJlc3VsdC51cGRhdGUoJ215VXBkYXRlZFZhbHVlJyArIGNvdW50ZXIrKykKK2V2ZW50LnNvdXJj
ZS5jb250aW51ZSgpCitiYXNpY1VwZGF0ZUN1cnNvcigpCitldmVudC5yZXN1bHQudXBkYXRlKCdt
eVVwZGF0ZWRWYWx1ZScgKyBjb3VudGVyKyspCitldmVudC5zb3VyY2UuY29udGludWUoKQorYmFz
aWNVcGRhdGVDdXJzb3IoKQorUEFTUyBjb3VudGVyIGlzIDUKK3RyYW5zLm9iamVjdFN0b3JlKCdi
YXNpY1N0b3JlJykub3BlbkN1cnNvcihrZXlSYW5nZSkKK1BBU1MgJ29uc3VjY2VzcycgaW4gcmVz
dWx0IGlzIHRydWUKK1BBU1MgJ29uZXJyb3InIGluIHJlc3VsdCBpcyB0cnVlCitQQVNTICdyZWFk
eVN0YXRlJyBpbiByZXN1bHQgaXMgdHJ1ZQorQW4gZXZlbnQgc2hvdWxkIGZpcmUgc2hvcnRseS4u
LgorCitiYXNpY0NoZWNrQ3Vyc29yKCkKK1BBU1MgZXZlbnQucmVzdWx0LmtleSBpcyAibXlLZXkx
IgorUEFTUyBldmVudC5yZXN1bHQudmFsdWUgaXMgIm15VXBkYXRlZFZhbHVlMSIKK2V2ZW50LnJl
c3VsdC5jb250aW51ZSgpCitiYXNpY0NoZWNrQ3Vyc29yKCkKK1BBU1MgZXZlbnQucmVzdWx0Lmtl
eSBpcyAibXlLZXkyIgorUEFTUyBldmVudC5yZXN1bHQudmFsdWUgaXMgIm15VXBkYXRlZFZhbHVl
MiIKK2V2ZW50LnJlc3VsdC5jb250aW51ZSgpCitiYXNpY0NoZWNrQ3Vyc29yKCkKK1BBU1MgZXZl
bnQucmVzdWx0LmtleSBpcyAibXlLZXkzIgorUEFTUyBldmVudC5yZXN1bHQudmFsdWUgaXMgIm15
VXBkYXRlZFZhbHVlMyIKK2V2ZW50LnJlc3VsdC5jb250aW51ZSgpCitiYXNpY0NoZWNrQ3Vyc29y
KCkKK1BBU1MgZXZlbnQucmVzdWx0LmtleSBpcyAibXlLZXk0IgorUEFTUyBldmVudC5yZXN1bHQu
dmFsdWUgaXMgIm15VXBkYXRlZFZhbHVlNCIKK2V2ZW50LnJlc3VsdC5jb250aW51ZSgpCitiYXNp
Y0NoZWNrQ3Vyc29yKCkKK1BBU1MgY291bnRlciBpcyA1Cit0cmFucy5vYmplY3RTdG9yZSgnYXV0
b0luY3JlbWVudFN0b3JlJykub3BlbkN1cnNvcih7cmFuZ2U6IGtleVJhbmdlfSkKK1BBU1MgJ29u
c3VjY2VzcycgaW4gcmVzdWx0IGlzIHRydWUKK1BBU1MgJ29uZXJyb3InIGluIHJlc3VsdCBpcyB0
cnVlCitQQVNTICdyZWFkeVN0YXRlJyBpbiByZXN1bHQgaXMgdHJ1ZQorQW4gZXZlbnQgc2hvdWxk
IGZpcmUgc2hvcnRseS4uLgorCithdXRvSW5jcmVtZW50VXBkYXRlQ3Vyc29yKCkKK2V2ZW50LnJl
c3VsdC51cGRhdGUoJ215VXBkYXRlZEZvbycgKyBjb3VudGVyKyspCitldmVudC5zb3VyY2UuY29u
dGludWUoKQorYXV0b0luY3JlbWVudFVwZGF0ZUN1cnNvcigpCitldmVudC5yZXN1bHQudXBkYXRl
KCdteVVwZGF0ZWRGb28nICsgY291bnRlcisrKQorZXZlbnQuc291cmNlLmNvbnRpbnVlKCkKK2F1
dG9JbmNyZW1lbnRVcGRhdGVDdXJzb3IoKQorZXZlbnQucmVzdWx0LnVwZGF0ZSgnbXlVcGRhdGVk
Rm9vJyArIGNvdW50ZXIrKykKK2V2ZW50LnNvdXJjZS5jb250aW51ZSgpCithdXRvSW5jcmVtZW50
VXBkYXRlQ3Vyc29yKCkKK2V2ZW50LnJlc3VsdC51cGRhdGUoJ215VXBkYXRlZEZvbycgKyBjb3Vu
dGVyKyspCitldmVudC5zb3VyY2UuY29udGludWUoKQorYXV0b0luY3JlbWVudFVwZGF0ZUN1cnNv
cigpCitQQVNTIGNvdW50ZXIgaXMgNQordHJhbnMub2JqZWN0U3RvcmUoJ2F1dG9JbmNyZW1lbnRT
dG9yZScpLm9wZW5DdXJzb3Ioa2V5UmFuZ2UpCitQQVNTICdvbnN1Y2Nlc3MnIGluIHJlc3VsdCBp
cyB0cnVlCitQQVNTICdvbmVycm9yJyBpbiByZXN1bHQgaXMgdHJ1ZQorUEFTUyAncmVhZHlTdGF0
ZScgaW4gcmVzdWx0IGlzIHRydWUKK0FuIGV2ZW50IHNob3VsZCBmaXJlIHNob3J0bHkuLi4KKwor
YXV0b0luY3JlbWVudENoZWNrQ3Vyc29yKCkKK1BBU1MgZXZlbnQucmVzdWx0LmtleSBpcyBjb3Vu
dGVyCitQQVNTIGV2ZW50LnJlc3VsdC52YWx1ZSBpcyAibXlVcGRhdGVkRm9vMSIKK2V2ZW50LnJl
c3VsdC5jb250aW51ZSgpCithdXRvSW5jcmVtZW50Q2hlY2tDdXJzb3IoKQorUEFTUyBldmVudC5y
ZXN1bHQua2V5IGlzIGNvdW50ZXIKK1BBU1MgZXZlbnQucmVzdWx0LnZhbHVlIGlzICJteVVwZGF0
ZWRGb28yIgorZXZlbnQucmVzdWx0LmNvbnRpbnVlKCkKK2F1dG9JbmNyZW1lbnRDaGVja0N1cnNv
cigpCitQQVNTIGV2ZW50LnJlc3VsdC5rZXkgaXMgY291bnRlcgorUEFTUyBldmVudC5yZXN1bHQu
dmFsdWUgaXMgIm15VXBkYXRlZEZvbzMiCitldmVudC5yZXN1bHQuY29udGludWUoKQorYXV0b0lu
Y3JlbWVudENoZWNrQ3Vyc29yKCkKK1BBU1MgZXZlbnQucmVzdWx0LmtleSBpcyBjb3VudGVyCitQ
QVNTIGV2ZW50LnJlc3VsdC52YWx1ZSBpcyAibXlVcGRhdGVkRm9vNCIKK2V2ZW50LnJlc3VsdC5j
b250aW51ZSgpCithdXRvSW5jcmVtZW50Q2hlY2tDdXJzb3IoKQorUEFTUyBjb3VudGVyIGlzIDUK
K3RyYW5zLm9iamVjdFN0b3JlKCdrZXlQYXRoU3RvcmUnKS5vcGVuQ3Vyc29yKHtyYW5nZToga2V5
UmFuZ2V9KQorUEFTUyAnb25zdWNjZXNzJyBpbiByZXN1bHQgaXMgdHJ1ZQorUEFTUyAnb25lcnJv
cicgaW4gcmVzdWx0IGlzIHRydWUKK1BBU1MgJ3JlYWR5U3RhdGUnIGluIHJlc3VsdCBpcyB0cnVl
CitBbiBldmVudCBzaG91bGQgZmlyZSBzaG9ydGx5Li4uCisKK2tleVBhdGhVcGRhdGVDdXJzb3Io
KQorZXZlbnQucmVzdWx0LnVwZGF0ZSh7aWQ6IDEwMCArIGNvdW50ZXIsIG51bWJlcjogMTAwICsg
Y291bnRlcn0pCitFcnJvciBldmVudCBmaXJlZDoKK1BBU1MgJ3Jlc3VsdCcgaW4gZXZlbnQgaXMg
ZmFsc2UKK1BBU1MgJ2NvZGUnIGluIGV2ZW50IGlzIHRydWUKK1BBU1MgJ21lc3NhZ2UnIGluIGV2
ZW50IGlzIHRydWUKK1BBU1MgJ3NvdXJjZScgaW4gZXZlbnQgaXMgdHJ1ZQorUEFTUyBldmVudC5z
b3VyY2UgIT0gbnVsbCBpcyB0cnVlCitQQVNTICdvbnN1Y2Nlc3MnIGluIGV2ZW50LnRhcmdldCBp
cyB0cnVlCitQQVNTICdvbmVycm9yJyBpbiBldmVudC50YXJnZXQgaXMgdHJ1ZQorUEFTUyAncmVh
ZHlTdGF0ZScgaW4gZXZlbnQudGFyZ2V0IGlzIHRydWUKK1BBU1MgZXZlbnQudGFyZ2V0LnJlYWR5
U3RhdGUgaXMgZXZlbnQudGFyZ2V0LkRPTkUKKworUEFTUyBldmVudC5jb2RlIGlzIHdlYmtpdElE
QkRhdGFiYXNlRXhjZXB0aW9uLkRBVEFfRVJSCitldmVudC5zb3VyY2UudXBkYXRlKHtpZDogY291
bnRlciwgbnVtYmVyOiAxMDAgKyBjb3VudGVyKyt9KQorZXZlbnQuc291cmNlLmNvbnRpbnVlKCkK
K2tleVBhdGhVcGRhdGVDdXJzb3IoKQorZXZlbnQucmVzdWx0LnVwZGF0ZSh7aWQ6IDEwMCArIGNv
dW50ZXIsIG51bWJlcjogMTAwICsgY291bnRlcn0pCitFcnJvciBldmVudCBmaXJlZDoKK1BBU1Mg
J3Jlc3VsdCcgaW4gZXZlbnQgaXMgZmFsc2UKK1BBU1MgJ2NvZGUnIGluIGV2ZW50IGlzIHRydWUK
K1BBU1MgJ21lc3NhZ2UnIGluIGV2ZW50IGlzIHRydWUKK1BBU1MgJ3NvdXJjZScgaW4gZXZlbnQg
aXMgdHJ1ZQorUEFTUyBldmVudC5zb3VyY2UgIT0gbnVsbCBpcyB0cnVlCitQQVNTICdvbnN1Y2Nl
c3MnIGluIGV2ZW50LnRhcmdldCBpcyB0cnVlCitQQVNTICdvbmVycm9yJyBpbiBldmVudC50YXJn
ZXQgaXMgdHJ1ZQorUEFTUyAncmVhZHlTdGF0ZScgaW4gZXZlbnQudGFyZ2V0IGlzIHRydWUKK1BB
U1MgZXZlbnQudGFyZ2V0LnJlYWR5U3RhdGUgaXMgZXZlbnQudGFyZ2V0LkRPTkUKKworUEFTUyBl
dmVudC5jb2RlIGlzIHdlYmtpdElEQkRhdGFiYXNlRXhjZXB0aW9uLkRBVEFfRVJSCitldmVudC5z
b3VyY2UudXBkYXRlKHtpZDogY291bnRlciwgbnVtYmVyOiAxMDAgKyBjb3VudGVyKyt9KQorZXZl
bnQuc291cmNlLmNvbnRpbnVlKCkKK2tleVBhdGhVcGRhdGVDdXJzb3IoKQorZXZlbnQucmVzdWx0
LnVwZGF0ZSh7aWQ6IDEwMCArIGNvdW50ZXIsIG51bWJlcjogMTAwICsgY291bnRlcn0pCitFcnJv
ciBldmVudCBmaXJlZDoKK1BBU1MgJ3Jlc3VsdCcgaW4gZXZlbnQgaXMgZmFsc2UKK1BBU1MgJ2Nv
ZGUnIGluIGV2ZW50IGlzIHRydWUKK1BBU1MgJ21lc3NhZ2UnIGluIGV2ZW50IGlzIHRydWUKK1BB
U1MgJ3NvdXJjZScgaW4gZXZlbnQgaXMgdHJ1ZQorUEFTUyBldmVudC5zb3VyY2UgIT0gbnVsbCBp
cyB0cnVlCitQQVNTICdvbnN1Y2Nlc3MnIGluIGV2ZW50LnRhcmdldCBpcyB0cnVlCitQQVNTICdv
bmVycm9yJyBpbiBldmVudC50YXJnZXQgaXMgdHJ1ZQorUEFTUyAncmVhZHlTdGF0ZScgaW4gZXZl
bnQudGFyZ2V0IGlzIHRydWUKK1BBU1MgZXZlbnQudGFyZ2V0LnJlYWR5U3RhdGUgaXMgZXZlbnQu
dGFyZ2V0LkRPTkUKKworUEFTUyBldmVudC5jb2RlIGlzIHdlYmtpdElEQkRhdGFiYXNlRXhjZXB0
aW9uLkRBVEFfRVJSCitldmVudC5zb3VyY2UudXBkYXRlKHtpZDogY291bnRlciwgbnVtYmVyOiAx
MDAgKyBjb3VudGVyKyt9KQorZXZlbnQuc291cmNlLmNvbnRpbnVlKCkKK2tleVBhdGhVcGRhdGVD
dXJzb3IoKQorZXZlbnQucmVzdWx0LnVwZGF0ZSh7aWQ6IDEwMCArIGNvdW50ZXIsIG51bWJlcjog
MTAwICsgY291bnRlcn0pCitFcnJvciBldmVudCBmaXJlZDoKK1BBU1MgJ3Jlc3VsdCcgaW4gZXZl
bnQgaXMgZmFsc2UKK1BBU1MgJ2NvZGUnIGluIGV2ZW50IGlzIHRydWUKK1BBU1MgJ21lc3NhZ2Un
IGluIGV2ZW50IGlzIHRydWUKK1BBU1MgJ3NvdXJjZScgaW4gZXZlbnQgaXMgdHJ1ZQorUEFTUyBl
dmVudC5zb3VyY2UgIT0gbnVsbCBpcyB0cnVlCitQQVNTICdvbnN1Y2Nlc3MnIGluIGV2ZW50LnRh
cmdldCBpcyB0cnVlCitQQVNTICdvbmVycm9yJyBpbiBldmVudC50YXJnZXQgaXMgdHJ1ZQorUEFT
UyAncmVhZHlTdGF0ZScgaW4gZXZlbnQudGFyZ2V0IGlzIHRydWUKK1BBU1MgZXZlbnQudGFyZ2V0
LnJlYWR5U3RhdGUgaXMgZXZlbnQudGFyZ2V0LkRPTkUKKworUEFTUyBldmVudC5jb2RlIGlzIHdl
YmtpdElEQkRhdGFiYXNlRXhjZXB0aW9uLkRBVEFfRVJSCitldmVudC5zb3VyY2UudXBkYXRlKHtp
ZDogY291bnRlciwgbnVtYmVyOiAxMDAgKyBjb3VudGVyKyt9KQorZXZlbnQuc291cmNlLmNvbnRp
bnVlKCkKK2tleVBhdGhVcGRhdGVDdXJzb3IoKQorUEFTUyBjb3VudGVyIGlzIDUKK3RyYW5zLm9i
amVjdFN0b3JlKCdrZXlQYXRoU3RvcmUnKS5vcGVuQ3Vyc29yKGtleVJhbmdlKQorUEFTUyAnb25z
dWNjZXNzJyBpbiByZXN1bHQgaXMgdHJ1ZQorUEFTUyAnb25lcnJvcicgaW4gcmVzdWx0IGlzIHRy
dWUKK1BBU1MgJ3JlYWR5U3RhdGUnIGluIHJlc3VsdCBpcyB0cnVlCitBbiBldmVudCBzaG91bGQg
ZmlyZSBzaG9ydGx5Li4uCisKK2tleVBhdGhDaGVja0N1cnNvcigpCitQQVNTIGV2ZW50LnJlc3Vs
dC5rZXkgaXMgY291bnRlcgorUEFTUyBldmVudC5yZXN1bHQudmFsdWUuaWQgaXMgY291bnRlcgor
UEFTUyBldmVudC5yZXN1bHQudmFsdWUubnVtYmVyIGlzIGNvdW50ZXIgKyAxMDAKK2V2ZW50LnJl
c3VsdC5jb250aW51ZSgpCitrZXlQYXRoQ2hlY2tDdXJzb3IoKQorUEFTUyBldmVudC5yZXN1bHQu
a2V5IGlzIGNvdW50ZXIKK1BBU1MgZXZlbnQucmVzdWx0LnZhbHVlLmlkIGlzIGNvdW50ZXIKK1BB
U1MgZXZlbnQucmVzdWx0LnZhbHVlLm51bWJlciBpcyBjb3VudGVyICsgMTAwCitldmVudC5yZXN1
bHQuY29udGludWUoKQora2V5UGF0aENoZWNrQ3Vyc29yKCkKK1BBU1MgZXZlbnQucmVzdWx0Lmtl
eSBpcyBjb3VudGVyCitQQVNTIGV2ZW50LnJlc3VsdC52YWx1ZS5pZCBpcyBjb3VudGVyCitQQVNT
IGV2ZW50LnJlc3VsdC52YWx1ZS5udW1iZXIgaXMgY291bnRlciArIDEwMAorZXZlbnQucmVzdWx0
LmNvbnRpbnVlKCkKK2tleVBhdGhDaGVja0N1cnNvcigpCitQQVNTIGV2ZW50LnJlc3VsdC5rZXkg
aXMgY291bnRlcgorUEFTUyBldmVudC5yZXN1bHQudmFsdWUuaWQgaXMgY291bnRlcgorUEFTUyBl
dmVudC5yZXN1bHQudmFsdWUubnVtYmVyIGlzIGNvdW50ZXIgKyAxMDAKK2V2ZW50LnJlc3VsdC5j
b250aW51ZSgpCitrZXlQYXRoQ2hlY2tDdXJzb3IoKQorUEFTUyBjb3VudGVyIGlzIDUKK3RyYW5z
Lm9iamVjdFN0b3JlKCdrZXlQYXRoU3RvcmUnKS5pbmRleCgnbnVtYmVySW5kZXgnKS5vcGVuS2V5
Q3Vyc29yKHtyYW5nZToga2V5UmFuZ2V9KQora2V5Q3Vyc29yKCkKK1BBU1MgZXZlbnQucmVzdWx0
LmtleSBpcyBjb3VudGVyICsgMTAwCitQQVNTIGV2ZW50LnJlc3VsdC52YWx1ZSBpcyBjb3VudGVy
CitldmVudC5yZXN1bHQudXBkYXRlKHtpZDogY291bnRlciwgbnVtYmVyOiBjb3VudGVyICsgMjAw
fSkKK1BBU1MgY29kZSBpcyB3ZWJraXRJREJEYXRhYmFzZUV4Y2VwdGlvbi5OT1RfQUxMT1dFRF9F
UlIKK2tleUN1cnNvcigpCitQQVNTIGV2ZW50LnJlc3VsdC5rZXkgaXMgY291bnRlciArIDEwMAor
UEFTUyBldmVudC5yZXN1bHQudmFsdWUgaXMgY291bnRlcgorZXZlbnQucmVzdWx0LnVwZGF0ZSh7
aWQ6IGNvdW50ZXIsIG51bWJlcjogY291bnRlciArIDIwMH0pCitQQVNTIGNvZGUgaXMgd2Via2l0
SURCRGF0YWJhc2VFeGNlcHRpb24uTk9UX0FMTE9XRURfRVJSCitrZXlDdXJzb3IoKQorUEFTUyBl
dmVudC5yZXN1bHQua2V5IGlzIGNvdW50ZXIgKyAxMDAKK1BBU1MgZXZlbnQucmVzdWx0LnZhbHVl
IGlzIGNvdW50ZXIKK2V2ZW50LnJlc3VsdC51cGRhdGUoe2lkOiBjb3VudGVyLCBudW1iZXI6IGNv
dW50ZXIgKyAyMDB9KQorUEFTUyBjb2RlIGlzIHdlYmtpdElEQkRhdGFiYXNlRXhjZXB0aW9uLk5P
VF9BTExPV0VEX0VSUgora2V5Q3Vyc29yKCkKK1BBU1MgZXZlbnQucmVzdWx0LmtleSBpcyBjb3Vu
dGVyICsgMTAwCitQQVNTIGV2ZW50LnJlc3VsdC52YWx1ZSBpcyBjb3VudGVyCitldmVudC5yZXN1
bHQudXBkYXRlKHtpZDogY291bnRlciwgbnVtYmVyOiBjb3VudGVyICsgMjAwfSkKK1BBU1MgY29k
ZSBpcyB3ZWJraXRJREJEYXRhYmFzZUV4Y2VwdGlvbi5OT1RfQUxMT1dFRF9FUlIKK2tleUN1cnNv
cigpCitQQVNTIGNvdW50ZXIgaXMgNQordHJhbnNhY3Rpb25Db21wbGV0ZSgpCitQQVNTIHN1Y2Nl
c3NmdWxseVBhcnNlZCBpcyB0cnVlCisKK1RFU1QgQ09NUExFVEUKKwpkaWZmIC0tZ2l0IGEvTGF5
b3V0VGVzdHMvc3RvcmFnZS9pbmRleGVkZGIvY3Vyc29yLXVwZGF0ZS5odG1sIGIvTGF5b3V0VGVz
dHMvc3RvcmFnZS9pbmRleGVkZGIvY3Vyc29yLXVwZGF0ZS5odG1sCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjg5MzJi
ZDhlYzU5ZDdiMDVmZDdkOGE2ZTQ5OWIyNzBlM2YyNmNmNDEKLS0tIC9kZXYvbnVsbAorKysgYi9M
YXlvdXRUZXN0cy9zdG9yYWdlL2luZGV4ZWRkYi9jdXJzb3ItdXBkYXRlLmh0bWwKQEAgLTAsMCAr
MSwyNDIgQEAKKzxodG1sPgorPGhlYWQ+Cis8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Ii4u
Ly4uL2Zhc3QvanMvcmVzb3VyY2VzL2pzLXRlc3Qtc3R5bGUuY3NzIj4KKzxzY3JpcHQgc3JjPSIu
Li8uLi9mYXN0L2pzL3Jlc291cmNlcy9qcy10ZXN0LXByZS5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0
IHNyYz0iLi4vLi4vZmFzdC9qcy9yZXNvdXJjZXMvanMtdGVzdC1wb3N0LWZ1bmN0aW9uLmpzIj48
L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSJyZXNvdXJjZXMvc2hhcmVkLmpzIj48L3NjcmlwdD4KKzwv
aGVhZD4KKzxib2R5PgorPHAgaWQ9ImRlc2NyaXB0aW9uIj48L3A+Cis8ZGl2IGlkPSJjb25zb2xl
Ij48L2Rpdj4KKzxzY3JpcHQ+CisKK2Rlc2NyaXB0aW9uKCJUZXN0IEluZGV4ZWREQidzIGN1cnNv
ciB1cGRhdGUuIik7CitpZiAod2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKQorICAgIGxheW91
dFRlc3RDb250cm9sbGVyLndhaXRVbnRpbERvbmUoKTsKKwordGVzdCgpOworCitmdW5jdGlvbiB0
ZXN0KCkKK3sKKyAgICByZXN1bHQgPSBldmFsQW5kTG9nKCJ3ZWJraXRJbmRleGVkREIub3Blbign
bmFtZScpIik7CisgICAgdmVyaWZ5UmVzdWx0KHJlc3VsdCk7CisgICAgcmVzdWx0Lm9uc3VjY2Vz
cyA9IG9wZW5TdWNjZXNzOworICAgIHJlc3VsdC5vbmVycm9yID0gdW5leHBlY3RlZEVycm9yQ2Fs
bGJhY2s7Cit9CisKK2Z1bmN0aW9uIG9wZW5TdWNjZXNzKCkKK3sKKyAgICB2ZXJpZnlTdWNjZXNz
RXZlbnQoZXZlbnQpOworICAgIHZhciBkYiA9IGV2YWxBbmRMb2coImRiID0gZXZlbnQucmVzdWx0
Iik7CisKKyAgICByZXN1bHQgPSBldmFsQW5kTG9nKCJkYi5zZXRWZXJzaW9uKCduZXcgdmVyc2lv
bicpIik7CisgICAgdmVyaWZ5UmVzdWx0KHJlc3VsdCk7CisgICAgcmVzdWx0Lm9uc3VjY2VzcyA9
IHNldFZlcnNpb25TdWNjZXNzOworICAgIHJlc3VsdC5vbmVycm9yID0gdW5leHBlY3RlZEVycm9y
Q2FsbGJhY2s7Cit9CisKK2Z1bmN0aW9uIHNldFZlcnNpb25TdWNjZXNzKCkKK3sKKyAgICBkZWJ1
Zygic2V0VmVyc2lvblN1Y2Nlc3MoKToiKTsKKyAgICB2ZXJpZnlTdWNjZXNzRXZlbnQoZXZlbnQp
OworICAgIHdpbmRvdy50cmFucyA9IGV2YWxBbmRMb2coInRyYW5zID0gZXZlbnQucmVzdWx0Iik7
CisgICAgc2hvdWxkQmVUcnVlKCJ0cmFucyAhPT0gbnVsbCIpOworICAgIHRyYW5zLm9uYWJvcnQg
PSB1bmV4cGVjdGVkQWJvcnRDYWxsYmFjazsKKyAgICB0cmFucy5vbmNvbXBsZXRlID0gb3BlbkJh
c2ljQ3Vyc29yOworCisgICAgZGVsZXRlQWxsT2JqZWN0U3RvcmVzKGRiLCBjcmVhdGVBbmRQb3B1
bGF0ZU9iamVjdFN0b3JlKTsKK30KKworZnVuY3Rpb24gY3JlYXRlQW5kUG9wdWxhdGVPYmplY3RT
dG9yZSgpCit7CisgICAgZGVidWcoImNyZWF0ZUFuZFBvcHVsYXRlT2JqZWN0U3RvcmUoKToiKTsK
KyAgICB2YXIgb2JqZWN0U3RvcmUgPSBldmFsQW5kTG9nKCJvYmplY3RTdG9yZSA9IGRiLmNyZWF0
ZU9iamVjdFN0b3JlKCdiYXNpY1N0b3JlJykiKTsKKyAgICBldmFsQW5kTG9nKCJvYmplY3RTdG9y
ZS5hZGQoJ215VmFsdWUxJywgJ215S2V5MScpLm9uZXJyb3IgPSB1bmV4cGVjdGVkRXJyb3JDYWxs
YmFjayIpOworICAgIGV2YWxBbmRMb2coIm9iamVjdFN0b3JlLmFkZCgnbXlWYWx1ZTInLCAnbXlL
ZXkyJykub25lcnJvciA9IHVuZXhwZWN0ZWRFcnJvckNhbGxiYWNrIik7CisgICAgZXZhbEFuZExv
Zygib2JqZWN0U3RvcmUuYWRkKCdteVZhbHVlMycsICdteUtleTMnKS5vbmVycm9yID0gdW5leHBl
Y3RlZEVycm9yQ2FsbGJhY2siKTsKKyAgICBldmFsQW5kTG9nKCJvYmplY3RTdG9yZS5hZGQoJ215
VmFsdWU0JywgJ215S2V5NCcpLm9uZXJyb3IgPSB1bmV4cGVjdGVkRXJyb3JDYWxsYmFjayIpOwor
CisgICAgdmFyIG9iamVjdFN0b3JlID0gZXZhbEFuZExvZygib2JqZWN0U3RvcmUgPSBkYi5jcmVh
dGVPYmplY3RTdG9yZSgnYXV0b0luY3JlbWVudFN0b3JlJywge2F1dG9JbmNyZW1lbnQ6IHRydWV9
KSIpOworICAgIGV2YWxBbmRMb2coIm9iamVjdFN0b3JlLmFkZCgnZm9vMScpLm9uZXJyb3IgPSB1
bmV4cGVjdGVkRXJyb3JDYWxsYmFjayIpOworICAgIGV2YWxBbmRMb2coIm9iamVjdFN0b3JlLmFk
ZCgnZm9vMicpLm9uZXJyb3IgPSB1bmV4cGVjdGVkRXJyb3JDYWxsYmFjayIpOworICAgIGV2YWxB
bmRMb2coIm9iamVjdFN0b3JlLmFkZCgnZm9vMycpLm9uZXJyb3IgPSB1bmV4cGVjdGVkRXJyb3JD
YWxsYmFjayIpOworICAgIGV2YWxBbmRMb2coIm9iamVjdFN0b3JlLmFkZCgnZm9vNCcpLm9uZXJy
b3IgPSB1bmV4cGVjdGVkRXJyb3JDYWxsYmFjayIpOworCisgICAgdmFyIG9iamVjdFN0b3JlID0g
ZXZhbEFuZExvZygib2JqZWN0U3RvcmUgPSBkYi5jcmVhdGVPYmplY3RTdG9yZSgna2V5UGF0aFN0
b3JlJywge2tleVBhdGg6ICdpZCd9KSIpOworICAgIGV2YWxBbmRMb2coIm9iamVjdFN0b3JlLmNy
ZWF0ZUluZGV4KCdudW1iZXJJbmRleCcsICdudW1iZXInKSIpOworICAgIGV2YWxBbmRMb2coIm9i
amVjdFN0b3JlLmFkZCh7bnVtYmVyOiAxLCBpZDogMX0pLm9uZXJyb3IgPSB1bmV4cGVjdGVkRXJy
b3JDYWxsYmFjayIpOworICAgIGV2YWxBbmRMb2coIm9iamVjdFN0b3JlLmFkZCh7bnVtYmVyOiAy
LCBpZDogMn0pLm9uZXJyb3IgPSB1bmV4cGVjdGVkRXJyb3JDYWxsYmFjayIpOworICAgIGV2YWxB
bmRMb2coIm9iamVjdFN0b3JlLmFkZCh7bnVtYmVyOiAzLCBpZDogM30pLm9uZXJyb3IgPSB1bmV4
cGVjdGVkRXJyb3JDYWxsYmFjayIpOworICAgIGV2YWxBbmRMb2coIm9iamVjdFN0b3JlLmFkZCh7
bnVtYmVyOiA0LCBpZDogNH0pLm9uZXJyb3IgPSB1bmV4cGVjdGVkRXJyb3JDYWxsYmFjayIpOwor
fQorCitmdW5jdGlvbiBvcGVuQmFzaWNDdXJzb3IoKQoreworICAgIGRlYnVnKCJvcGVuQmFzaWND
dXJzb3IoKSIpOworICAgIGV2YWxBbmRMb2coInRyYW5zID0gZGIudHJhbnNhY3Rpb24oW10sIHdl
YmtpdElEQlRyYW5zYWN0aW9uLlJFQURfV1JJVEUpIik7CisgICAgdHJhbnMub25hYm9ydCA9IHVu
ZXhwZWN0ZWRBYm9ydENhbGxiYWNrOworICAgIHRyYW5zLm9uY29tcGxldGUgPSB0cmFuc2FjdGlv
bkNvbXBsZXRlOworICAgIGtleVJhbmdlID0gd2Via2l0SURCS2V5UmFuZ2UubG93ZXJCb3VuZCgi
bXlLZXkxIik7CisgICAgcmVzdWx0ID0gZXZhbEFuZExvZygidHJhbnMub2JqZWN0U3RvcmUoJ2Jh
c2ljU3RvcmUnKS5vcGVuQ3Vyc29yKHtyYW5nZToga2V5UmFuZ2V9KSIpOworICAgIHZlcmlmeVJl
c3VsdChyZXN1bHQpOworICAgIHJlc3VsdC5vbnN1Y2Nlc3MgPSBiYXNpY1VwZGF0ZUN1cnNvcjsK
KyAgICByZXN1bHQub25lcnJvciA9IHVuZXhwZWN0ZWRFcnJvckNhbGxiYWNrOworICAgIGNvdW50
ZXIgPSAxOworfQorCitmdW5jdGlvbiBiYXNpY1VwZGF0ZUN1cnNvcigpCit7CisgICAgZGVidWco
ImJhc2ljVXBkYXRlQ3Vyc29yKCkiKTsKKyAgICBpZiAoZXZlbnQucmVzdWx0ID09IG51bGwpIHsK
KyAgICAgICAgc2hvdWxkQmUoImNvdW50ZXIiLCAiNSIpOworICAgICAgICBjb3VudGVyID0gMTsK
KyAgICAgICAgcmVzdWx0ID0gZXZhbEFuZExvZygidHJhbnMub2JqZWN0U3RvcmUoJ2Jhc2ljU3Rv
cmUnKS5vcGVuQ3Vyc29yKGtleVJhbmdlKSIpOworICAgICAgICB2ZXJpZnlSZXN1bHQocmVzdWx0
KTsKKyAgICAgICAgcmVzdWx0Lm9uc3VjY2VzcyA9IGJhc2ljQ2hlY2tDdXJzb3I7CisgICAgICAg
IHJlc3VsdC5vbmVycm9yID0gdW5leHBlY3RlZEVycm9yQ2FsbGJhY2s7CisgICAgICAgIHJldHVy
bjsKKyAgICB9CisKKyAgICByZXN1bHQgPSBldmFsQW5kTG9nKCJldmVudC5yZXN1bHQudXBkYXRl
KCdteVVwZGF0ZWRWYWx1ZScgKyBjb3VudGVyKyspIik7CisgICAgcmVzdWx0Lm9uc3VjY2VzcyA9
IGZ1bmN0aW9uKCkgeyBldmFsQW5kTG9nKCJldmVudC5zb3VyY2UuY29udGludWUoKSIpOyB9Cisg
ICAgcmVzdWx0Lm9uZXJyb3IgPSB1bmV4cGVjdGVkRXJyb3JDYWxsYmFjazsKK30KKworZnVuY3Rp
b24gYmFzaWNDaGVja0N1cnNvcigpCit7CisgICAgZGVidWcoImJhc2ljQ2hlY2tDdXJzb3IoKSIp
OworICAgIGlmIChldmVudC5yZXN1bHQgPT0gbnVsbCkgeworICAgICAgICBzaG91bGRCZSgiY291
bnRlciIsICI1Iik7CisgICAgICAgIGNvdW50ZXIgPSAxOworCisgICAgICAgIGtleVJhbmdlID0g
d2Via2l0SURCS2V5UmFuZ2UubG93ZXJCb3VuZCgxKTsKKyAgICAgICAgcmVzdWx0ID0gZXZhbEFu
ZExvZygidHJhbnMub2JqZWN0U3RvcmUoJ2F1dG9JbmNyZW1lbnRTdG9yZScpLm9wZW5DdXJzb3Io
e3JhbmdlOiBrZXlSYW5nZX0pIik7CisgICAgICAgIHZlcmlmeVJlc3VsdChyZXN1bHQpOworICAg
ICAgICByZXN1bHQub25zdWNjZXNzID0gYXV0b0luY3JlbWVudFVwZGF0ZUN1cnNvcjsKKyAgICAg
ICAgcmVzdWx0Lm9uZXJyb3IgPSB1bmV4cGVjdGVkRXJyb3JDYWxsYmFjazsKKyAgICAgICAgcmV0
dXJuOworICAgIH0KKworICAgIHNob3VsZEJlRXF1YWxUb1N0cmluZygiZXZlbnQucmVzdWx0Lmtl
eSIsICJteUtleSIgKyBjb3VudGVyKTsKKyAgICBzaG91bGRCZUVxdWFsVG9TdHJpbmcoImV2ZW50
LnJlc3VsdC52YWx1ZSIsICJteVVwZGF0ZWRWYWx1ZSIgKyBjb3VudGVyKyspOworICAgIGV2YWxB
bmRMb2coImV2ZW50LnJlc3VsdC5jb250aW51ZSgpIik7Cit9CisKK2Z1bmN0aW9uIGF1dG9JbmNy
ZW1lbnRVcGRhdGVDdXJzb3IoKQoreworICAgIGRlYnVnKCJhdXRvSW5jcmVtZW50VXBkYXRlQ3Vy
c29yKCkiKTsKKyAgICBpZiAoZXZlbnQucmVzdWx0ID09IG51bGwpIHsKKyAgICAgICAgc2hvdWxk
QmUoImNvdW50ZXIiLCAiNSIpOworICAgICAgICBjb3VudGVyID0gMTsKKyAgICAgICAgcmVzdWx0
ID0gZXZhbEFuZExvZygidHJhbnMub2JqZWN0U3RvcmUoJ2F1dG9JbmNyZW1lbnRTdG9yZScpLm9w
ZW5DdXJzb3Ioa2V5UmFuZ2UpIik7CisgICAgICAgIHZlcmlmeVJlc3VsdChyZXN1bHQpOworICAg
ICAgICByZXN1bHQub25zdWNjZXNzID0gYXV0b0luY3JlbWVudENoZWNrQ3Vyc29yOworICAgICAg
ICByZXN1bHQub25lcnJvciA9IHVuZXhwZWN0ZWRFcnJvckNhbGxiYWNrOworICAgICAgICByZXR1
cm47CisgICAgfQorCisgICAgcmVzdWx0ID0gZXZhbEFuZExvZygiZXZlbnQucmVzdWx0LnVwZGF0
ZSgnbXlVcGRhdGVkRm9vJyArIGNvdW50ZXIrKykiKTsKKyAgICByZXN1bHQub25zdWNjZXNzID0g
ZnVuY3Rpb24oKSB7IGV2YWxBbmRMb2coImV2ZW50LnNvdXJjZS5jb250aW51ZSgpIik7IH0KKyAg
ICByZXN1bHQub25lcnJvciA9IHVuZXhwZWN0ZWRFcnJvckNhbGxiYWNrOworfQorCitmdW5jdGlv
biBhdXRvSW5jcmVtZW50Q2hlY2tDdXJzb3IoKQoreworICAgIGRlYnVnKCJhdXRvSW5jcmVtZW50
Q2hlY2tDdXJzb3IoKSIpOworICAgIGlmIChldmVudC5yZXN1bHQgPT0gbnVsbCkgeworICAgICAg
ICBzaG91bGRCZSgiY291bnRlciIsICI1Iik7CisgICAgICAgIGNvdW50ZXIgPSAxOworCisgICAg
ICAgIGtleVJhbmdlID0gd2Via2l0SURCS2V5UmFuZ2UubG93ZXJCb3VuZCgxKTsKKyAgICAgICAg
cmVzdWx0ID0gZXZhbEFuZExvZygidHJhbnMub2JqZWN0U3RvcmUoJ2tleVBhdGhTdG9yZScpLm9w
ZW5DdXJzb3Ioe3JhbmdlOiBrZXlSYW5nZX0pIik7CisgICAgICAgIHZlcmlmeVJlc3VsdChyZXN1
bHQpOworICAgICAgICByZXN1bHQub25zdWNjZXNzID0ga2V5UGF0aFVwZGF0ZUN1cnNvcjsKKyAg
ICAgICAgcmVzdWx0Lm9uZXJyb3IgPSB1bmV4cGVjdGVkRXJyb3JDYWxsYmFjazsKKyAgICAgICAg
cmV0dXJuOworICAgIH0KKworICAgIHNob3VsZEJlKCJldmVudC5yZXN1bHQua2V5IiwgImNvdW50
ZXIiKTsKKyAgICBzaG91bGRCZUVxdWFsVG9TdHJpbmcoImV2ZW50LnJlc3VsdC52YWx1ZSIsICJt
eVVwZGF0ZWRGb28iICsgY291bnRlcisrKTsKKyAgICBldmFsQW5kTG9nKCJldmVudC5yZXN1bHQu
Y29udGludWUoKSIpOworfQorCitmdW5jdGlvbiBrZXlQYXRoVXBkYXRlQ3Vyc29yKCkKK3sKKyAg
ICBkZWJ1Zygia2V5UGF0aFVwZGF0ZUN1cnNvcigpIik7CisgICAgaWYgKGV2ZW50LnJlc3VsdCA9
PSBudWxsKSB7CisgICAgICAgIHNob3VsZEJlKCJjb3VudGVyIiwgIjUiKTsKKyAgICAgICAgY291
bnRlciA9IDE7CisgICAgICAgIHJlc3VsdCA9IGV2YWxBbmRMb2coInRyYW5zLm9iamVjdFN0b3Jl
KCdrZXlQYXRoU3RvcmUnKS5vcGVuQ3Vyc29yKGtleVJhbmdlKSIpOworICAgICAgICB2ZXJpZnlS
ZXN1bHQocmVzdWx0KTsKKyAgICAgICAgcmVzdWx0Lm9uc3VjY2VzcyA9IGtleVBhdGhDaGVja0N1
cnNvcjsKKyAgICAgICAgcmVzdWx0Lm9uZXJyb3IgPSB1bmV4cGVjdGVkRXJyb3JDYWxsYmFjazsK
KyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIHJlc3VsdCA9IGV2YWxBbmRMb2coImV2ZW50
LnJlc3VsdC51cGRhdGUoe2lkOiAxMDAgKyBjb3VudGVyLCBudW1iZXI6IDEwMCArIGNvdW50ZXJ9
KSIpOworICAgIHJlc3VsdC5vbnN1Y2Nlc3MgPSB1bmV4cGVjdGVkU3VjY2Vzc0NhbGxiYWNrOwor
ICAgIHJlc3VsdC5vbmVycm9yID0gZnVuY3Rpb24oKSB7CisgICAgICAgIHZlcmlmeUVycm9yRXZl
bnQoZXZlbnQpOworICAgICAgICBzaG91bGRCZSgiZXZlbnQuY29kZSIsICJ3ZWJraXRJREJEYXRh
YmFzZUV4Y2VwdGlvbi5EQVRBX0VSUiIpOworCisgICAgICAgIHJlc3VsdCA9IGV2YWxBbmRMb2co
ImV2ZW50LnNvdXJjZS51cGRhdGUoe2lkOiBjb3VudGVyLCBudW1iZXI6IDEwMCArIGNvdW50ZXIr
K30pIik7CisgICAgICAgIHJlc3VsdC5vbnN1Y2Nlc3MgPSBmdW5jdGlvbigpIHsgZXZhbEFuZExv
ZygiZXZlbnQuc291cmNlLmNvbnRpbnVlKCkiKSB9OworICAgICAgICByZXN1bHQub25lcnJvciA9
IHVuZXhwZWN0ZWRFcnJvckNhbGxiYWNrOworICAgIH0KK30KKworZnVuY3Rpb24ga2V5UGF0aENo
ZWNrQ3Vyc29yKCkKK3sKKyAgICBkZWJ1Zygia2V5UGF0aENoZWNrQ3Vyc29yKCkiKTsKKyAgICBp
ZiAoZXZlbnQucmVzdWx0ID09IG51bGwpIHsKKyAgICAgICAgc2hvdWxkQmUoImNvdW50ZXIiLCAi
NSIpOworICAgICAgICBjb3VudGVyID0gMTsKKyAgICAgICAga2V5UmFuZ2UgPSB3ZWJraXRJREJL
ZXlSYW5nZS5sb3dlckJvdW5kKDEwMSk7CisgICAgICAgIHJlc3VsdCA9IGV2YWxBbmRMb2coInRy
YW5zLm9iamVjdFN0b3JlKCdrZXlQYXRoU3RvcmUnKS5pbmRleCgnbnVtYmVySW5kZXgnKS5vcGVu
S2V5Q3Vyc29yKHtyYW5nZToga2V5UmFuZ2V9KSIpOworICAgICAgICByZXN1bHQub25zdWNjZXNz
ID0ga2V5Q3Vyc29yOworICAgICAgICByZXN1bHQub25lcnJvciA9IHVuZXhwZWN0ZWRFcnJvckNh
bGxiYWNrOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgc2hvdWxkQmUoImV2ZW50LnJl
c3VsdC5rZXkiLCAiY291bnRlciIpOworICAgIHNob3VsZEJlKCJldmVudC5yZXN1bHQudmFsdWUu
aWQiLCAiY291bnRlciIpOworICAgIHNob3VsZEJlKCJldmVudC5yZXN1bHQudmFsdWUubnVtYmVy
IiwgImNvdW50ZXIgKyAxMDAiKTsKKyAgICBjb3VudGVyKys7CisgICAgZXZhbEFuZExvZygiZXZl
bnQucmVzdWx0LmNvbnRpbnVlKCkiKTsKK30KKworZnVuY3Rpb24ga2V5Q3Vyc29yKCkKK3sKKyAg
ICBkZWJ1Zygia2V5Q3Vyc29yKCkiKTsKKyAgICBpZiAoZXZlbnQucmVzdWx0ID09IG51bGwpIHsK
KyAgICAgICAgc2hvdWxkQmUoImNvdW50ZXIiLCAiNSIpOworICAgICAgICByZXR1cm47CisgICAg
fQorCisgICAgc2hvdWxkQmUoImV2ZW50LnJlc3VsdC5rZXkiLCAiY291bnRlciArIDEwMCIpOwor
ICAgIHNob3VsZEJlKCJldmVudC5yZXN1bHQudmFsdWUiLCAiY291bnRlciIpOworCisgICAgdHJ5
IHsKKyAgICAgICAgZGVidWcoImV2ZW50LnJlc3VsdC51cGRhdGUoe2lkOiBjb3VudGVyLCBudW1i
ZXI6IGNvdW50ZXIgKyAyMDB9KSIpOworICAgICAgICBldmVudC5yZXN1bHQudXBkYXRlKHtpZDog
Y291bnRlciwgbnVtYmVyOiBjb3VudGVyICsgMjAwfSk7CisgICAgICAgIHRlc3RGYWlsZWQoIkV4
cGVjdGVkIGV4Y2VwdGlvbi4iKTsKKyAgICB9IGNhdGNoIChlKSB7CisgICAgICAgIGNvZGUgPSBl
LmNvZGU7CisgICAgICAgIHNob3VsZEJlKCJjb2RlIiwgIndlYmtpdElEQkRhdGFiYXNlRXhjZXB0
aW9uLk5PVF9BTExPV0VEX0VSUiIpOworICAgIH0KKworICAgIGNvdW50ZXIrKzsKKyAgICBldmVu
dC5yZXN1bHQuY29udGludWUoKTsKK30KKworZnVuY3Rpb24gdHJhbnNhY3Rpb25Db21wbGV0ZSgp
Cit7CisgICAgZGVidWcoInRyYW5zYWN0aW9uQ29tcGxldGUoKSIpOworICAgIGRvbmUoKTsKK30K
KwordmFyIHN1Y2Nlc3NmdWxseVBhcnNlZCA9IHRydWU7CisKKzwvc2NyaXB0PgorPC9ib2R5Pgor
PC9odG1sPgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nIGIvU291cmNlL1dl
YkNvcmUvQ2hhbmdlTG9nCmluZGV4IDVjZjRjODQ4MTJhMjgzZjMwMzk4NzIyMzAzYjJjMTIwYTUx
ZjQzNDYuLjY2M2ZhNWE5N2M3OGYyM2U4YzI5ZTI5MGQ1ZWQ1OTJlZWVhODY5NGIgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VM
b2cKQEAgLTEsMyArMSwzMiBAQAorMjAxMS0wMS0zMSAgSGFucyBXZW5uYm9yZyAgPGhhbnNAY2hy
b21pdW0ub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAg
ICAgIEluZGV4ZWREQjogSW1wbGVtZW50IHN1cHBvcnQgZm9yIGN1cnNvciB1cGRhdGVzCisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD01MzQyMQorCisgICAg
ICAgIEltcGxlbWVudCBzdXBwb3J0IGZvciBjdXJzb3IgdXBkYXRlcyB1c2luZyB0aGUgc2FtZSBw
YXR0ZXJuIGFzIGN1cnNvcgorICAgICAgICBkZWxldGVzOiBmb3J3YXJkIHRoZSBjYWxscyB0byB0
aGUgSURCT2JqZWN0U3RvcmVCYWNrZW5kOjpwdXQoKS4KKyAgICAgICAgVGhlIHB1dCgpIGZ1bmN0
aW9uJ3Mgc2lnbmF0dXJlIG5lZWRzIHRvIGJlIGNoYW5nZWQgdG8gYWxsb3cgZm9yIGEKKyAgICAg
ICAgImN1cnNvciB1cGRhdGUgbW9kZSIuIFRoaXMgbWFrZXMgdGhlIHNpZ25hdHVyZSBtb3JlIGNs
ZWFyIGFueXdheSwKKyAgICAgICAgc2luY2UgaXQgcmVwbGFjZXMgdGhlIGJvb2xlYW4gcGFyYW1l
dGVyLgorCisgICAgICAgIFRlc3Q6IHN0b3JhZ2UvaW5kZXhlZGRiL2N1cnNvci11cGRhdGUuaHRt
bAorCisgICAgICAgICogc3RvcmFnZS9JREJDdXJzb3IuaWRsOgorICAgICAgICAqIHN0b3JhZ2Uv
SURCQ3Vyc29yQmFja2VuZEltcGwuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SURCQ3Vyc29yQmFj
a2VuZEltcGw6OmtleSk6CisgICAgICAgIChXZWJDb3JlOjpJREJDdXJzb3JCYWNrZW5kSW1wbDo6
dXBkYXRlKToKKyAgICAgICAgKiBzdG9yYWdlL0lEQkN1cnNvckJhY2tlbmRJbXBsLmg6CisgICAg
ICAgICogc3RvcmFnZS9JREJPYmplY3RTdG9yZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJREJP
YmplY3RTdG9yZTo6YWRkKToKKyAgICAgICAgKFdlYkNvcmU6OklEQk9iamVjdFN0b3JlOjpwdXQp
OgorICAgICAgICAqIHN0b3JhZ2UvSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbC5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpwdXQpOgorICAgICAgICAo
V2ViQ29yZTo6SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6cHV0SW50ZXJuYWwpOgorICAgICAg
ICAqIHN0b3JhZ2UvSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbC5oOgorICAgICAgICAqIHN0b3Jh
Z2UvSURCT2JqZWN0U3RvcmVCYWNrZW5kSW50ZXJmYWNlLmg6CisKIDIwMTEtMDEtMzAgIEtlbmlj
aGkgSXNoaWJhc2hpICA8YmFzaGlAZ29vZ2xlLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBL
ZW50IFRhbXVyYS4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCQ3Vyc29y
LmlkbCBiL1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCQ3Vyc29yLmlkbAppbmRleCAxMmQwYmFm
N2Y5MDU3MGQ3MmQ5ZGVhZjg3NDg5MjE3ZTM4NjZkMjc0Li4yZTE0NTlmNDkxYjI0NzFiNTljYWE2
NGNhMDUyNDMwMzA2MDM5YjU2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lE
QkN1cnNvci5pZGwKKysrIGIvU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJDdXJzb3IuaWRsCkBA
IC0zNyw5ICszNyw4IEBAIG1vZHVsZSBzdG9yYWdlIHsKICAgICAgICAgcmVhZG9ubHkgYXR0cmli
dXRlIElEQktleSBrZXk7CiAgICAgICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBJREJBbnkgdmFsdWU7
CiAKLSAgICAgICAgLy8gRklYTUU6IEltcGxlbWVudC4KLSAgICAgICAgLy9bQ2FsbFdpdGg9U2Ny
aXB0RXhlY3V0aW9uQ29udGV4dF0gSURCUmVxdWVzdCB1cGRhdGUoaW4gU2VyaWFsaXplZFNjcmlw
dFZhbHVlIHZhbHVlKQotICAgICAgICAvLyAgICByYWlzZXMgKElEQkRhdGFiYXNlRXhjZXB0aW9u
KTsKKyAgICAgICAgW0NhbGxXaXRoPVNjcmlwdEV4ZWN1dGlvbkNvbnRleHRdIElEQlJlcXVlc3Qg
dXBkYXRlKGluIFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZSB2YWx1ZSkKKyAgICAgICAgICAgIHJhaXNl
cyAoSURCRGF0YWJhc2VFeGNlcHRpb24pOwogICAgICAgICBbSW1wbGVtZW50YXRpb25GdW5jdGlv
bj1jb250aW51ZUZ1bmN0aW9uXSB2b2lkIGNvbnRpbnVlKGluIFtPcHRpb25hbF0gSURCS2V5IGtl
eSkKICAgICAgICAgICAgIHJhaXNlcyAoSURCRGF0YWJhc2VFeGNlcHRpb24pOwogICAgICAgICBb
Q2FsbFdpdGg9U2NyaXB0RXhlY3V0aW9uQ29udGV4dCwgSW1wbGVtZW50YXRpb25GdW5jdGlvbj1k
ZWxldGVGdW5jdGlvbl0gSURCUmVxdWVzdCBkZWxldGUoKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvc3RvcmFnZS9JREJDdXJzb3JCYWNrZW5kSW1wbC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9z
dG9yYWdlL0lEQkN1cnNvckJhY2tlbmRJbXBsLmNwcAppbmRleCA0MTM1MTAxMzA4MDVjNGRmMjMz
ZDlhOTVjOGJiNjNjZjUyMDM0MWMxLi5hYjU2M2RiNmVjNmQxNjNiMzViOTIwYWZlMGJkYzgyMjQ1
NzA3N2I3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQkN1cnNvckJhY2tl
bmRJbXBsLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQkN1cnNvckJhY2tlbmRJ
bXBsLmNwcApAQCAtNjgsNyArNjgsNiBAQCB1bnNpZ25lZCBzaG9ydCBJREJDdXJzb3JCYWNrZW5k
SW1wbDo6ZGlyZWN0aW9uKCkgY29uc3QKIAogUGFzc1JlZlB0cjxJREJLZXk+IElEQkN1cnNvckJh
Y2tlbmRJbXBsOjprZXkoKSBjb25zdAogewotICAgIAogICAgIHJldHVybiBtX2N1cnJlbnRLZXk7
CiB9CiAKQEAgLTgxLDQxICs4MCwxMyBAQCBQYXNzUmVmUHRyPElEQkFueT4gSURCQ3Vyc29yQmFj
a2VuZEltcGw6OnZhbHVlKCkgY29uc3QKIAogdm9pZCBJREJDdXJzb3JCYWNrZW5kSW1wbDo6dXBk
YXRlKFBhc3NSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiBwcnBWYWx1ZSwgUGFzc1JlZlB0
cjxJREJDYWxsYmFja3M+IHBycENhbGxiYWNrcywgRXhjZXB0aW9uQ29kZSYgZWMpCiB7Ci0gICAg
UmVmUHRyPElEQkN1cnNvckJhY2tlbmRJbXBsPiBjdXJzb3IgPSB0aGlzOwotICAgIFJlZlB0cjxT
ZXJpYWxpemVkU2NyaXB0VmFsdWU+IHZhbHVlID0gcHJwVmFsdWU7Ci0gICAgUmVmUHRyPElEQkNh
bGxiYWNrcz4gY2FsbGJhY2tzID0gcHJwQ2FsbGJhY2tzOwotICAgIC8vIEZJWE1FOiBUaHJvdyBE
QVRBX0VSUiBhbmQgU0VSSUFMX0VSUiB3aGVuIGFwcHJvcHJpYXRlLgotICAgIGlmICghbV90cmFu
c2FjdGlvbi0+c2NoZWR1bGVUYXNrKGNyZWF0ZUNhbGxiYWNrVGFzaygmSURCQ3Vyc29yQmFja2Vu
ZEltcGw6OnVwZGF0ZUludGVybmFsLCBjdXJzb3IsIHZhbHVlLCBjYWxsYmFja3MpKSkKKyAgICBp
ZiAoIW1fcXVlcnkgfHwgbV9jdXJyZW50SWQgPT0gSW52YWxpZElkIHx8ICFtX2lzU2VyaWFsaXpl
ZFNjcmlwdFZhbHVlQ3Vyc29yKSB7CiAgICAgICAgIGVjID0gSURCRGF0YWJhc2VFeGNlcHRpb246
Ok5PVF9BTExPV0VEX0VSUjsKLX0KLQotdm9pZCBJREJDdXJzb3JCYWNrZW5kSW1wbDo6dXBkYXRl
SW50ZXJuYWwoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFBhc3NSZWZQdHI8SURCQ3Vyc29yQmFj
a2VuZEltcGw+IGN1cnNvciwgUGFzc1JlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IHBycFZh
bHVlLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4gY2FsbGJhY2tzKQotewotICAgIC8vIEZJWE1F
OiBUaGlzIG1ldGhvZCBkb2Vzbid0IHVwZGF0ZSBpbmRleGVzLiBJdCdzIGRhbmdlcm91cyB0byBj
YWxsIGluIGl0cyBjdXJyZW50IHN0YXRlLgotICAgIGNhbGxiYWNrcy0+b25FcnJvcihJREJEYXRh
YmFzZUVycm9yOjpjcmVhdGUoSURCRGF0YWJhc2VFeGNlcHRpb246OlVOS05PV05fRVJSLCAiTm90
IGltcGxlbWVudGVkLiIpKTsKLSAgICByZXR1cm47Ci0KLSAgICBSZWZQdHI8U2VyaWFsaXplZFNj
cmlwdFZhbHVlPiB2YWx1ZSA9IHBycFZhbHVlOwotCi0gICAgaWYgKCFjdXJzb3ItPm1fcXVlcnkg
fHwgY3Vyc29yLT5tX2N1cnJlbnRJZCA9PSBJbnZhbGlkSWQpIHsKLSAgICAgICAgLy8gRklYTUU6
IFVzZSB0aGUgcHJvcGVyIGVycm9yIGNvZGUgd2hlbiBpdCdzIHNwZWNjZWQuCi0gICAgICAgIGNh
bGxiYWNrcy0+b25FcnJvcihJREJEYXRhYmFzZUVycm9yOjpjcmVhdGUoSURCRGF0YWJhc2VFeGNl
cHRpb246OlVOS05PV05fRVJSLCAiT3BlcmF0aW9uIG5vdCBwb3NzaWJsZS4iKSk7CiAgICAgICAg
IHJldHVybjsKICAgICB9CiAKLSAgICBTdHJpbmcgc3FsID0gIlVQREFURSBPYmplY3RTdG9yZURh
dGEgU0VUIHZhbHVlID0gPyBXSEVSRSBpZCA9ID8iOwotICAgIFNRTGl0ZVN0YXRlbWVudCB1cGRh
dGVRdWVyeShjdXJzb3ItPmRhdGFiYXNlKCksIHNxbCk7Ci0gICAgCi0gICAgYm9vbCBvayA9IHVw
ZGF0ZVF1ZXJ5LnByZXBhcmUoKSA9PSBTUUxSZXN1bHRPazsKLSAgICBBU1NFUlRfVU5VU0VEKG9r
LCBvayk7IC8vIEZJWE1FOiBCZXR0ZXIgZXJyb3IgaGFuZGxpbmcuCi0gICAgdXBkYXRlUXVlcnku
YmluZFRleHQoMSwgdmFsdWUtPnRvV2lyZVN0cmluZygpKTsKLSAgICB1cGRhdGVRdWVyeS5iaW5k
SW50NjQoMiwgY3Vyc29yLT5tX2N1cnJlbnRJZCk7Ci0gICAgb2sgPSB1cGRhdGVRdWVyeS5zdGVw
KCkgPT0gU1FMUmVzdWx0RG9uZTsKLSAgICBBU1NFUlRfVU5VU0VEKG9rLCBvayk7IC8vIEZJWE1F
OiBCZXR0ZXIgZXJyb3IgaGFuZGxpbmcuCi0KLSAgICBpZiAoY3Vyc29yLT5tX2lzU2VyaWFsaXpl
ZFNjcmlwdFZhbHVlQ3Vyc29yKQotICAgICAgICBjdXJzb3ItPm1fY3VycmVudFNlcmlhbGl6ZWRT
Y3JpcHRWYWx1ZSA9IHZhbHVlLnJlbGVhc2UoKTsKLSAgICBjYWxsYmFja3MtPm9uU3VjY2VzcyhT
ZXJpYWxpemVkU2NyaXB0VmFsdWU6Om51bGxWYWx1ZSgpKTsKKyAgICBSZWZQdHI8SURCS2V5PiBr
ZXkgPSBtX2N1cnJlbnRJREJLZXlWYWx1ZSA/IG1fY3VycmVudElEQktleVZhbHVlIDogbV9jdXJy
ZW50S2V5OworICAgIG1fb2JqZWN0U3RvcmUtPnB1dChwcnBWYWx1ZSwga2V5LnJlbGVhc2UoKSwg
SURCT2JqZWN0U3RvcmVCYWNrZW5kSW50ZXJmYWNlOjpDdXJzb3JVcGRhdGUsIHBycENhbGxiYWNr
cywgbV90cmFuc2FjdGlvbi5nZXQoKSwgZWMpOwogfQogCiB2b2lkIElEQkN1cnNvckJhY2tlbmRJ
bXBsOjpjb250aW51ZUZ1bmN0aW9uKFBhc3NSZWZQdHI8SURCS2V5PiBwcnBLZXksIFBhc3NSZWZQ
dHI8SURCQ2FsbGJhY2tzPiBwcnBDYWxsYmFja3MsIEV4Y2VwdGlvbkNvZGUmIGVjKQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJDdXJzb3JCYWNrZW5kSW1wbC5oIGIvU291
cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJDdXJzb3JCYWNrZW5kSW1wbC5oCmluZGV4IGUzYTg5OTUw
ODZkOGZiMTk5ZjExMjQ4MmIwY2I1MjQzMWQyZjE5OTAuLjc3MjZmMTIzYTI3OGUwZTVlMjJjMDc2
YzMwZjNmZjZmZDdmMTE4NDcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURC
Q3Vyc29yQmFja2VuZEltcGwuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQkN1cnNv
ckJhY2tlbmRJbXBsLmgKQEAgLTY4LDcgKzY4LDYgQEAgcHJpdmF0ZToKICAgICB2b2lkIGxvYWRD
dXJyZW50Um93KCk7CiAgICAgU1FMaXRlRGF0YWJhc2UmIGRhdGFiYXNlKCkgY29uc3Q7CiAKLSAg
ICBzdGF0aWMgdm9pZCB1cGRhdGVJbnRlcm5hbChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgUGFz
c1JlZlB0cjxJREJDdXJzb3JCYWNrZW5kSW1wbD4sIFBhc3NSZWZQdHI8U2VyaWFsaXplZFNjcmlw
dFZhbHVlPiwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+KTsKICAgICBzdGF0aWMgdm9pZCBjb250
aW51ZUZ1bmN0aW9uSW50ZXJuYWwoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFBhc3NSZWZQdHI8
SURCQ3Vyc29yQmFja2VuZEltcGw+LCBQYXNzUmVmUHRyPElEQktleT4sIFBhc3NSZWZQdHI8SURC
Q2FsbGJhY2tzPik7CiAKICAgICBzdGF0aWMgY29uc3QgaW50NjRfdCBJbnZhbGlkSWQgPSAtMTsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCT2JqZWN0U3RvcmUuY3BwIGIv
U291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJPYmplY3RTdG9yZS5jcHAKaW5kZXggZGIzM2E0ZTk0
YmY5N2JhZjM1ZDlhYzljYjAzYTEzYThlM2I0MTYzNi4uYWM4NjBhMjU1OGI0ZTMyOWZhZDlkOTBi
ZGI0OGExMGU5MjVkMWRjNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJP
YmplY3RTdG9yZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJPYmplY3RTdG9y
ZS5jcHAKQEAgLTc5LDcgKzc5LDcgQEAgUGFzc1JlZlB0cjxJREJSZXF1ZXN0PiBJREJPYmplY3RT
dG9yZTo6Z2V0KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIFBhc3MKIFBhc3NSZWZQ
dHI8SURCUmVxdWVzdD4gSURCT2JqZWN0U3RvcmU6OmFkZChTY3JpcHRFeGVjdXRpb25Db250ZXh0
KiBjb250ZXh0LCBQYXNzUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4gdmFsdWUsIFBhc3NS
ZWZQdHI8SURCS2V5PiBrZXksIEV4Y2VwdGlvbkNvZGUmIGVjKQogewogICAgIFJlZlB0cjxJREJS
ZXF1ZXN0PiByZXF1ZXN0ID0gSURCUmVxdWVzdDo6Y3JlYXRlKGNvbnRleHQsIElEQkFueTo6Y3Jl
YXRlKHRoaXMpLCBtX3RyYW5zYWN0aW9uLmdldCgpKTsKLSAgICBtX29iamVjdFN0b3JlLT5wdXQo
dmFsdWUsIGtleSwgdHJ1ZSwgcmVxdWVzdCwgbV90cmFuc2FjdGlvbi5nZXQoKSwgZWMpOworICAg
IG1fb2JqZWN0U3RvcmUtPnB1dCh2YWx1ZSwga2V5LCBJREJPYmplY3RTdG9yZUJhY2tlbmRJbnRl
cmZhY2U6OkFkZE9ubHksIHJlcXVlc3QsIG1fdHJhbnNhY3Rpb24uZ2V0KCksIGVjKTsKICAgICBp
ZiAoZWMpCiAgICAgICAgIHJldHVybiAwOwogICAgIHJldHVybiByZXF1ZXN0OwpAQCAtODgsNyAr
ODgsNyBAQCBQYXNzUmVmUHRyPElEQlJlcXVlc3Q+IElEQk9iamVjdFN0b3JlOjphZGQoU2NyaXB0
RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwgUGFzcwogUGFzc1JlZlB0cjxJREJSZXF1ZXN0PiBJ
REJPYmplY3RTdG9yZTo6cHV0KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIFBhc3NS
ZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiB2YWx1ZSwgUGFzc1JlZlB0cjxJREJLZXk+IGtl
eSwgRXhjZXB0aW9uQ29kZSYgZWMpCiB7CiAgICAgUmVmUHRyPElEQlJlcXVlc3Q+IHJlcXVlc3Qg
PSBJREJSZXF1ZXN0OjpjcmVhdGUoY29udGV4dCwgSURCQW55OjpjcmVhdGUodGhpcyksIG1fdHJh
bnNhY3Rpb24uZ2V0KCkpOwotICAgIG1fb2JqZWN0U3RvcmUtPnB1dCh2YWx1ZSwga2V5LCBmYWxz
ZSwgcmVxdWVzdCwgbV90cmFuc2FjdGlvbi5nZXQoKSwgZWMpOworICAgIG1fb2JqZWN0U3RvcmUt
PnB1dCh2YWx1ZSwga2V5LCBJREJPYmplY3RTdG9yZUJhY2tlbmRJbnRlcmZhY2U6OkFkZE9yVXBk
YXRlLCByZXF1ZXN0LCBtX3RyYW5zYWN0aW9uLmdldCgpLCBlYyk7CiAgICAgaWYgKGVjKQogICAg
ICAgICByZXR1cm4gMDsKICAgICByZXR1cm4gcmVxdWVzdDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3N0b3JhZ2UvSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbC5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9zdG9yYWdlL0lEQk9iamVjdFN0b3JlQmFja2VuZEltcGwuY3BwCmluZGV4IGNhNDdlNjRk
NWQyYjM2ZWVlNzFhMzIyNmU0ZjgwODY0NDY0Mjc0YjMuLjIxM2Y1ZDA5ZGE4NGQ5ZTI0NTkwNDU4
Mjk3ZGI5OTI5NjhhZjliY2YgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURC
T2JqZWN0U3RvcmVCYWNrZW5kSW1wbC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvc3RvcmFnZS9J
REJPYmplY3RTdG9yZUJhY2tlbmRJbXBsLmNwcApAQCAtMTc5LDcgKzE3OSw3IEBAIHN0YXRpYyBi
b29sIHB1dEluZGV4RGF0YShTUUxpdGVEYXRhYmFzZSYgZGIsIElEQktleSoga2V5LCBpbnQ2NF90
IGluZGV4SWQsIGludDY0CiAgICAgcmV0dXJuIHB1dFF1ZXJ5LnN0ZXAoKSA9PSBTUUxSZXN1bHRE
b25lOwogfQogCi12b2lkIElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6OnB1dChQYXNzUmVmUHRy
PFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4gcHJwVmFsdWUsIFBhc3NSZWZQdHI8SURCS2V5PiBwcnBL
ZXksIGJvb2wgYWRkT25seSwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+IHBycENhbGxiYWNrcywg
SURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlKiB0cmFuc2FjdGlvblB0ciwgRXhjZXB0aW9u
Q29kZSYgZWMpCit2b2lkIElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6OnB1dChQYXNzUmVmUHRy
PFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4gcHJwVmFsdWUsIFBhc3NSZWZQdHI8SURCS2V5PiBwcnBL
ZXksIFB1dE1vZGUgcHV0TW9kZSwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+IHBycENhbGxiYWNr
cywgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlKiB0cmFuc2FjdGlvblB0ciwgRXhjZXB0
aW9uQ29kZSYgZWMpCiB7CiAgICAgaWYgKHRyYW5zYWN0aW9uUHRyLT5tb2RlKCkgPT0gSURCVHJh
bnNhY3Rpb246OlJFQURfT05MWSkgewogICAgICAgICBlYyA9IElEQkRhdGFiYXNlRXhjZXB0aW9u
OjpSRUFEX09OTFlfRVJSOwpAQCAtMTkzLDI2ICsxOTMsMjkgQEAgdm9pZCBJREJPYmplY3RTdG9y
ZUJhY2tlbmRJbXBsOjpwdXQoUGFzc1JlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IHBycFZh
bHVlLAogICAgIFJlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2U+IHRyYW5zYWN0
aW9uID0gdHJhbnNhY3Rpb25QdHI7CiAgICAgLy8gRklYTUU6IFRoaXMgc2hvdWxkIHRocm93IGEg
U0VSSUFMX0VSUiBvbiBzdHJ1Y3R1cmVkIGNsb25lIHByb2JsZW1zLgogICAgIC8vIEZJWE1FOiBU
aGlzIHNob3VsZCB0aHJvdyBhIERBVEFfRVJSIHdoZW4gdGhlIHdyb25nIGtleS9rZXlQYXRoIGRh
dGEgaXMgc3VwcGxpZWQuCi0gICAgaWYgKCF0cmFuc2FjdGlvbi0+c2NoZWR1bGVUYXNrKGNyZWF0
ZUNhbGxiYWNrVGFzaygmSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6cHV0SW50ZXJuYWwsIG9i
amVjdFN0b3JlLCB2YWx1ZSwga2V5LCBhZGRPbmx5LCBjYWxsYmFja3MsIHRyYW5zYWN0aW9uKSkp
CisgICAgaWYgKCF0cmFuc2FjdGlvbi0+c2NoZWR1bGVUYXNrKGNyZWF0ZUNhbGxiYWNrVGFzaygm
SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6cHV0SW50ZXJuYWwsIG9iamVjdFN0b3JlLCB2YWx1
ZSwga2V5LCBwdXRNb2RlLCBjYWxsYmFja3MsIHRyYW5zYWN0aW9uKSkpCiAgICAgICAgIGVjID0g
SURCRGF0YWJhc2VFeGNlcHRpb246Ok5PVF9BTExPV0VEX0VSUjsKIH0KIAotdm9pZCBJREJPYmpl
Y3RTdG9yZUJhY2tlbmRJbXBsOjpwdXRJbnRlcm5hbChTY3JpcHRFeGVjdXRpb25Db250ZXh0Kiwg
UGFzc1JlZlB0cjxJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsPiBvYmplY3RTdG9yZSwgUGFzc1Jl
ZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IHBycFZhbHVlLCBQYXNzUmVmUHRyPElEQktleT4g
cHJwS2V5LCBib29sIGFkZE9ubHksIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiBjYWxsYmFja3Ms
IFBhc3NSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlPiB0cmFuc2FjdGlvbikK
K3ZvaWQgSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6cHV0SW50ZXJuYWwoU2NyaXB0RXhlY3V0
aW9uQ29udGV4dCosIFBhc3NSZWZQdHI8SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbD4gb2JqZWN0
U3RvcmUsIFBhc3NSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiBwcnBWYWx1ZSwgUGFzc1Jl
ZlB0cjxJREJLZXk+IHBycEtleSwgUHV0TW9kZSBwdXRNb2RlLCBQYXNzUmVmUHRyPElEQkNhbGxi
YWNrcz4gY2FsbGJhY2tzLCBQYXNzUmVmUHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFj
ZT4gdHJhbnNhY3Rpb24pCiB7CiAgICAgUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4gdmFs
dWUgPSBwcnBWYWx1ZTsKICAgICBSZWZQdHI8SURCS2V5PiBrZXkgPSBwcnBLZXk7CiAKLSAgICBp
ZiAoIW9iamVjdFN0b3JlLT5tX2tleVBhdGguaXNOdWxsKCkgJiYga2V5KSB7CisgICAgaWYgKHB1
dE1vZGUgPT0gQ3Vyc29yVXBkYXRlKQorICAgICAgICBBU1NFUlQoa2V5KTsKKworICAgIGlmICgh
b2JqZWN0U3RvcmUtPm1fa2V5UGF0aC5pc051bGwoKSAmJiBrZXkgJiYgcHV0TW9kZSAhPSBDdXJz
b3JVcGRhdGUpIHsKICAgICAgICAgY2FsbGJhY2tzLT5vbkVycm9yKElEQkRhdGFiYXNlRXJyb3I6
OmNyZWF0ZShJREJEYXRhYmFzZUV4Y2VwdGlvbjo6REFUQV9FUlIsICJBIGtleSB3YXMgc3VwcGxp
ZWQgZm9yIGFuIG9iamVjdFN0b3JlIHRoYXQgaGFzIGEga2V5UGF0aC4iKSk7CiAgICAgICAgIHJl
dHVybjsKICAgICB9CiAKLSAgICBpZiAob2JqZWN0U3RvcmUtPmF1dG9JbmNyZW1lbnQoKSAmJiBr
ZXkpIHsKKyAgICBpZiAob2JqZWN0U3RvcmUtPmF1dG9JbmNyZW1lbnQoKSAmJiBrZXkgJiYgcHV0
TW9kZSAhPSBDdXJzb3JVcGRhdGUpIHsKICAgICAgICAgY2FsbGJhY2tzLT5vbkVycm9yKElEQkRh
dGFiYXNlRXJyb3I6OmNyZWF0ZShJREJEYXRhYmFzZUV4Y2VwdGlvbjo6REFUQV9FUlIsICJBIGtl
eSB3YXMgc3VwcGxpZWQgZm9yIGFuIG9iamVjdFN0b3JlIHRoYXQgaXMgdXNpbmcgYXV0byBpbmNy
ZW1lbnQuIikpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgaWYgKG9iamVjdFN0b3Jl
LT5hdXRvSW5jcmVtZW50KCkpIHsKKyAgICBpZiAob2JqZWN0U3RvcmUtPmF1dG9JbmNyZW1lbnQo
KSAmJiBwdXRNb2RlICE9IEN1cnNvclVwZGF0ZSkgewogICAgICAgICBrZXkgPSBvYmplY3RTdG9y
ZS0+Z2VuQXV0b0luY3JlbWVudEtleSgpOwogCiAgICAgICAgIGlmICghb2JqZWN0U3RvcmUtPm1f
a2V5UGF0aC5pc051bGwoKSkgewpAQCAtMjIxLDEyICsyMjQsMTkgQEAgdm9pZCBJREJPYmplY3RT
dG9yZUJhY2tlbmRJbXBsOjpwdXRJbnRlcm5hbChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgUGFz
c1JlZlB0cjwKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogICAgIH0gZWxzZSBpZiAo
IW9iamVjdFN0b3JlLT5tX2tleVBhdGguaXNOdWxsKCkpIHsKLSAgICAgICAga2V5ID0gZmV0Y2hL
ZXlGcm9tS2V5UGF0aCh2YWx1ZS5nZXQoKSwgb2JqZWN0U3RvcmUtPm1fa2V5UGF0aCk7CisgICAg
ICAgIFJlZlB0cjxJREJLZXk+IGtleVBhdGhLZXkgPSBmZXRjaEtleUZyb21LZXlQYXRoKHZhbHVl
LmdldCgpLCBvYmplY3RTdG9yZS0+bV9rZXlQYXRoKTsKIAotICAgICAgICBpZiAoIWtleSkgewor
ICAgICAgICBpZiAoIWtleVBhdGhLZXkpIHsKICAgICAgICAgICAgIGNhbGxiYWNrcy0+b25FcnJv
cihJREJEYXRhYmFzZUVycm9yOjpjcmVhdGUoSURCRGF0YWJhc2VFeGNlcHRpb246OkRBVEFfRVJS
LCAiVGhlIGtleSBjb3VsZCBub3QgYmUgZmV0Y2hlZCBmcm9tIHRoZSBrZXlQYXRoLiIpKTsKICAg
ICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQorCisgICAgICAgIGlmIChwdXRNb2RlID09IEN1
cnNvclVwZGF0ZSAmJiAha2V5UGF0aEtleS0+aXNFcXVhbChrZXkuZ2V0KCkpKSB7CisgICAgICAg
ICAgICBjYWxsYmFja3MtPm9uRXJyb3IoSURCRGF0YWJhc2VFcnJvcjo6Y3JlYXRlKElEQkRhdGFi
YXNlRXhjZXB0aW9uOjpEQVRBX0VSUiwgIlRoZSBrZXkgZmV0Y2hlZCBmcm9tIHRoZSBrZXlQYXRo
IGRvZXMgbm90IG1hdGNoIHRoZSBrZXkgb2YgdGhlIGN1cnNvci4iKSk7CisgICAgICAgICAgICBy
ZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBrZXkgPSBrZXlQYXRoS2V5OwogICAgIH0gZWxz
ZSBpZiAoIWtleSkgewogICAgICAgICBjYWxsYmFja3MtPm9uRXJyb3IoSURCRGF0YWJhc2VFcnJv
cjo6Y3JlYXRlKElEQkRhdGFiYXNlRXhjZXB0aW9uOjpEQVRBX0VSUiwgIk5vIGtleSBzdXBwbGll
ZC4iKSk7CiAgICAgICAgIHJldHVybjsKQEAgLTI2MSw3ICsyNzEsNyBAQCB2b2lkIElEQk9iamVj
dFN0b3JlQmFja2VuZEltcGw6OnB1dEludGVybmFsKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBQ
YXNzUmVmUHRyPAogCiAgICAgYmluZFdoZXJlQ2xhdXNlKGdldFF1ZXJ5LCBvYmplY3RTdG9yZS0+
aWQoKSwga2V5LmdldCgpKTsKICAgICBib29sIGlzRXhpc3RpbmdWYWx1ZSA9IGdldFF1ZXJ5LnN0
ZXAoKSA9PSBTUUxSZXN1bHRSb3c7Ci0gICAgaWYgKGFkZE9ubHkgJiYgaXNFeGlzdGluZ1ZhbHVl
KSB7CisgICAgaWYgKHB1dE1vZGUgPT0gQWRkT25seSAmJiBpc0V4aXN0aW5nVmFsdWUpIHsKICAg
ICAgICAgY2FsbGJhY2tzLT5vbkVycm9yKElEQkRhdGFiYXNlRXJyb3I6OmNyZWF0ZShJREJEYXRh
YmFzZUV4Y2VwdGlvbjo6Q09OU1RSQUlOVF9FUlIsICJLZXkgYWxyZWFkeSBleGlzdHMgaW4gdGhl
IG9iamVjdCBzdG9yZS4iKSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQk9iamVjdFN0b3JlQmFja2VuZEltcGwuaCBiL1NvdXJj
ZS9XZWJDb3JlL3N0b3JhZ2UvSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbC5oCmluZGV4IDlmYjFi
N2M0NjdiNzcyNjJiYzcyM2Q5NWRiY2NiODk4YTA5NDYyMDMuLmQ1MTMwMmZmODU0MzZkOTdhNDAw
YjZiYzBjYWFkYzJkNDM0NzAyZDkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2Uv
SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2Uv
SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbC5oCkBAIC02Nyw3ICs2Nyw3IEBAIHB1YmxpYzoKICAg
ICB2aXJ0dWFsIGJvb2wgYXV0b0luY3JlbWVudCgpIGNvbnN0IHsgcmV0dXJuIG1fYXV0b0luY3Jl
bWVudDsgfQogCiAgICAgdmlydHVhbCB2b2lkIGdldChQYXNzUmVmUHRyPElEQktleT4ga2V5LCBQ
YXNzUmVmUHRyPElEQkNhbGxiYWNrcz4sIElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZSos
IEV4Y2VwdGlvbkNvZGUmKTsKLSAgICB2aXJ0dWFsIHZvaWQgcHV0KFBhc3NSZWZQdHI8U2VyaWFs
aXplZFNjcmlwdFZhbHVlPiB2YWx1ZSwgUGFzc1JlZlB0cjxJREJLZXk+IGtleSwgYm9vbCBhZGRP
bmx5LCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4sIElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVy
ZmFjZSosIEV4Y2VwdGlvbkNvZGUmKTsKKyAgICB2aXJ0dWFsIHZvaWQgcHV0KFBhc3NSZWZQdHI8
U2VyaWFsaXplZFNjcmlwdFZhbHVlPiwgUGFzc1JlZlB0cjxJREJLZXk+LCBQdXRNb2RlLCBQYXNz
UmVmUHRyPElEQkNhbGxiYWNrcz4sIElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZSosIEV4
Y2VwdGlvbkNvZGUmKTsKICAgICB2aXJ0dWFsIHZvaWQgZGVsZXRlRnVuY3Rpb24oUGFzc1JlZlB0
cjxJREJLZXk+IGtleSwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+LCBJREJUcmFuc2FjdGlvbkJh
Y2tlbmRJbnRlcmZhY2UqLCBFeGNlcHRpb25Db2RlJik7CiAKICAgICB2aXJ0dWFsIFBhc3NSZWZQ
dHI8SURCSW5kZXhCYWNrZW5kSW50ZXJmYWNlPiBjcmVhdGVJbmRleChjb25zdCBTdHJpbmcmIG5h
bWUsIGNvbnN0IFN0cmluZyYga2V5UGF0aCwgYm9vbCB1bmlxdWUsIElEQlRyYW5zYWN0aW9uQmFj
a2VuZEludGVyZmFjZSosIEV4Y2VwdGlvbkNvZGUmKTsKQEAgLTg1LDcgKzg1LDcgQEAgcHJpdmF0
ZToKICAgICBQYXNzUmVmUHRyPElEQktleT4gZ2VuQXV0b0luY3JlbWVudEtleSgpOwogCiAgICAg
c3RhdGljIHZvaWQgZ2V0SW50ZXJuYWwoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFBhc3NSZWZQ
dHI8SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbD4sIFBhc3NSZWZQdHI8SURCS2V5PiBrZXksIFBh
c3NSZWZQdHI8SURCQ2FsbGJhY2tzPik7Ci0gICAgc3RhdGljIHZvaWQgcHV0SW50ZXJuYWwoU2Ny
aXB0RXhlY3V0aW9uQ29udGV4dCosIFBhc3NSZWZQdHI8SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1w
bD4sIFBhc3NSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiB2YWx1ZSwgUGFzc1JlZlB0cjxJ
REJLZXk+IGtleSwgYm9vbCBhZGRPbmx5LCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4sIFBhc3NS
ZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlPik7CisgICAgc3RhdGljIHZvaWQg
cHV0SW50ZXJuYWwoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFBhc3NSZWZQdHI8SURCT2JqZWN0
U3RvcmVCYWNrZW5kSW1wbD4sIFBhc3NSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiwgUGFz
c1JlZlB0cjxJREJLZXk+LCBQdXRNb2RlLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4sIFBhc3NS
ZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlPik7CiAgICAgc3RhdGljIHZvaWQg
ZGVsZXRlSW50ZXJuYWwoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFBhc3NSZWZQdHI8SURCT2Jq
ZWN0U3RvcmVCYWNrZW5kSW1wbD4sIFBhc3NSZWZQdHI8SURCS2V5PiBrZXksIFBhc3NSZWZQdHI8
SURCQ2FsbGJhY2tzPik7CiAgICAgc3RhdGljIHZvaWQgY3JlYXRlSW5kZXhJbnRlcm5hbChTY3Jp
cHRFeGVjdXRpb25Db250ZXh0KiwgUGFzc1JlZlB0cjxJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBs
PiwgUGFzc1JlZlB0cjxJREJJbmRleEJhY2tlbmRJbXBsPiwgUGFzc1JlZlB0cjxJREJUcmFuc2Fj
dGlvbkJhY2tlbmRJbnRlcmZhY2U+KTsKICAgICBzdGF0aWMgdm9pZCBkZWxldGVJbmRleEludGVy
bmFsKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBQYXNzUmVmUHRyPElEQk9iamVjdFN0b3JlQmFj
a2VuZEltcGw+LCBQYXNzUmVmUHRyPElEQkluZGV4QmFja2VuZEltcGw+LCBQYXNzUmVmUHRyPElE
QlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZT4pOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvc3RvcmFnZS9JREJPYmplY3RTdG9yZUJhY2tlbmRJbnRlcmZhY2UuaCBiL1NvdXJjZS9XZWJD
b3JlL3N0b3JhZ2UvSURCT2JqZWN0U3RvcmVCYWNrZW5kSW50ZXJmYWNlLmgKaW5kZXggMDJjZWIy
NzY3YTU0YjYyMjAyYWJhM2M4NTI5MTZjYTg1MzQwMzQ4MC4uZmEyODQxNmE2NjAyYzg4M2M3OWEz
YTVmNDgyOWI2YjY5YWYzZGU4OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3RvcmFnZS9J
REJPYmplY3RTdG9yZUJhY2tlbmRJbnRlcmZhY2UuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdG9y
YWdlL0lEQk9iamVjdFN0b3JlQmFja2VuZEludGVyZmFjZS5oCkBAIC01MSw3ICs1MSwxMyBAQCBw
dWJsaWM6CiAgICAgdmlydHVhbCBQYXNzUmVmUHRyPERPTVN0cmluZ0xpc3Q+IGluZGV4TmFtZXMo
KSBjb25zdCA9IDA7CiAKICAgICB2aXJ0dWFsIHZvaWQgZ2V0KFBhc3NSZWZQdHI8SURCS2V5Piwg
UGFzc1JlZlB0cjxJREJDYWxsYmFja3M+LCBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2Uq
LCBFeGNlcHRpb25Db2RlJikgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBwdXQoUGFzc1JlZlB0cjxT
ZXJpYWxpemVkU2NyaXB0VmFsdWU+LCBQYXNzUmVmUHRyPElEQktleT4sIGJvb2wgYWRkT25seSwg
UGFzc1JlZlB0cjxJREJDYWxsYmFja3M+LCBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2Uq
LCBFeGNlcHRpb25Db2RlJikgPSAwOworCisgICAgZW51bSBQdXRNb2RlIHsKKyAgICAgICAgQWRk
T3JVcGRhdGUsCisgICAgICAgIEFkZE9ubHksCisgICAgICAgIEN1cnNvclVwZGF0ZQorICAgIH07
CisgICAgdmlydHVhbCB2b2lkIHB1dChQYXNzUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4s
IFBhc3NSZWZQdHI8SURCS2V5PiwgUHV0TW9kZSwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+LCBJ
REJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UqLCBFeGNlcHRpb25Db2RlJikgPSAwOwogICAg
IHZpcnR1YWwgdm9pZCBkZWxldGVGdW5jdGlvbihQYXNzUmVmUHRyPElEQktleT4sIFBhc3NSZWZQ
dHI8SURCQ2FsbGJhY2tzPiwgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlKiwgRXhjZXB0
aW9uQ29kZSYpID0gMDsKIAogICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxJREJJbmRleEJhY2tlbmRJ
bnRlcmZhY2U+IGNyZWF0ZUluZGV4KGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgU3RyaW5nJiBr
ZXlQYXRoLCBib29sIHVuaXF1ZSwgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlKiwgRXhj
ZXB0aW9uQ29kZSYpID0gMDsKQEAgLTY2LDQgKzcyLDMgQEAgcHVibGljOgogI2VuZGlmCiAKICNl
bmRpZiAvLyBJREJPYmplY3RTdG9yZUJhY2tlbmRJbnRlcmZhY2VfaAotCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0v
Q2hhbmdlTG9nCmluZGV4IGZkZGE0OGExNGRiMGM5ODViM2I0NTFkNTQwNDQ5NWI0YTcwMzYxMjAu
LmNhMGYwMTczY2EwOTUxNTgyYjE0M2U1NWQ1ZTQxMTRlMmE2NzI3ZWMgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21p
dW0vQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjIgQEAKKzIwMTEtMDEtMzEgIEhhbnMgV2VubmJvcmcg
IDxoYW5zQGNocm9taXVtLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMh
KS4KKworICAgICAgICBJbmRleGVkREI6IEltcGxlbWVudCBzdXBwb3J0IGZvciBjdXJzb3IgdXBk
YXRlcworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTM0
MjEKKworICAgICAgICBNaXJyb3IgdGhlIHVwZGF0ZSB0byB0aGUgSURCT2JqZWN0U3RvcmVJbnRl
cmZhY2U6OnB1dCgpIHNpZ25hdHVyZSBpbgorICAgICAgICB0aGUgV2ViS2l0IGxheWVyIHdyYXBw
ZXJzLgorCisgICAgICAgICogcHVibGljL1dlYklEQk9iamVjdFN0b3JlLmg6CisgICAgICAgIChX
ZWJLaXQ6OldlYklEQk9iamVjdFN0b3JlOjpwdXQpOgorICAgICAgICAqIHNyYy9JREJPYmplY3RT
dG9yZVByb3h5LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OklEQk9iamVjdFN0b3JlUHJveHk6OnB1
dCk6CisgICAgICAgICogc3JjL0lEQk9iamVjdFN0b3JlUHJveHkuaDoKKyAgICAgICAgKiBzcmMv
V2ViSURCT2JqZWN0U3RvcmVJbXBsLmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViSURCT2JqZWN0
U3RvcmVJbXBsOjpwdXQpOgorICAgICAgICAqIHNyYy9XZWJJREJPYmplY3RTdG9yZUltcGwuaDoK
KwogMjAxMS0wMS0yOSAgUGF0cmljayBHYW5zdGVyZXIgIDxwYXJvZ2FAd2Via2l0Lm9yZz4KIAog
ICAgICAgICBSZXZpZXdlZCBieSBEYXZpZCBLaWx6ZXIuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0L2Nocm9taXVtL3B1YmxpYy9XZWJJREJPYmplY3RTdG9yZS5oIGIvU291cmNlL1dlYktpdC9j
aHJvbWl1bS9wdWJsaWMvV2ViSURCT2JqZWN0U3RvcmUuaAppbmRleCA4ZjIyNDdmMTcyOWIzNGVm
NzIyMzFiZDYwMjJjM2E1MDBiMTkxOTAxLi4xOTY0M2EwMWJhOTRiZjQxMzRmYjEzOThhYTYzY2Nl
ZDE5NjY3ZTgyIDEwMDc1NQotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJJ
REJPYmplY3RTdG9yZS5oCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYklE
Qk9iamVjdFN0b3JlLmgKQEAgLTYwLDcgKzYwLDI1IEBAIHB1YmxpYzoKICAgICB9CiAKICAgICB2
aXJ0dWFsIHZvaWQgZ2V0KGNvbnN0IFdlYklEQktleSYsIFdlYklEQkNhbGxiYWNrcyosIGNvbnN0
IFdlYklEQlRyYW5zYWN0aW9uJiwgV2ViRXhjZXB0aW9uQ29kZSYpIHsgV0VCS0lUX0FTU0VSVF9O
T1RfUkVBQ0hFRCgpOyB9Ci0gICAgdmlydHVhbCB2b2lkIHB1dChjb25zdCBXZWJTZXJpYWxpemVk
U2NyaXB0VmFsdWUmLCBjb25zdCBXZWJJREJLZXkmLCBib29sIGFkZE9ubHksIFdlYklEQkNhbGxi
YWNrcyosIGNvbnN0IFdlYklEQlRyYW5zYWN0aW9uJiwgV2ViRXhjZXB0aW9uQ29kZSYpIHsgV0VC
S0lUX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOyB9CisKKyAgICBlbnVtIFB1dE1vZGUgeworICAgICAg
ICBBZGRPclVwZGF0ZSwKKyAgICAgICAgQWRkT25seSwKKyAgICAgICAgQ3Vyc29yVXBkYXRlCisg
ICAgfTsKKworICAgIC8vIEZJWE1FOiBSZW1vdmUgb25jZSBDaHJvbWl1bSBzaWRlIGlzIHVwZGF0
ZWQgdG8gY2FsbCB0aGUgbmV3IHB1dCBmdW5jdGlvbi4KKyAgICB2aXJ0dWFsIHZvaWQgcHV0KGNv
bnN0IFdlYlNlcmlhbGl6ZWRTY3JpcHRWYWx1ZSYgdmFsdWUsIGNvbnN0IFdlYklEQktleSYga2V5
LCBib29sIGFkZE9ubHksIFdlYklEQkNhbGxiYWNrcyogY2FsbGJhY2tzLCBjb25zdCBXZWJJREJU
cmFuc2FjdGlvbiYgdHJhbnNhY3Rpb24sIFdlYkV4Y2VwdGlvbkNvZGUmIGVjKQorICAgIHsKKyAg
ICAgICAgcHV0KHZhbHVlLCBrZXksIGFkZE9ubHkgPyBBZGRPbmx5IDogQWRkT3JVcGRhdGUsIGNh
bGxiYWNrcywgdHJhbnNhY3Rpb24sIGVjKTsKKyAgICB9CisKKyAgICAvLyBGSVhNRTogQXNzZXJ0
IG5vdCByZWFjaGVkIG9uY2UgQ2hyb21pdW0gc2lkZSBvdmVycmlkZXMgdGhpcyBwcm9wZXJseS4K
KyAgICB2aXJ0dWFsIHZvaWQgcHV0KGNvbnN0IFdlYlNlcmlhbGl6ZWRTY3JpcHRWYWx1ZSYgdmFs
dWUsIGNvbnN0IFdlYklEQktleSYga2V5LCBQdXRNb2RlIHB1dE1vZGUsIFdlYklEQkNhbGxiYWNr
cyogY2FsbGJhY2tzLCBjb25zdCBXZWJJREJUcmFuc2FjdGlvbiYgdHJhbnNhY3Rpb24sIFdlYkV4
Y2VwdGlvbkNvZGUmIGVjKQorICAgIHsKKyAgICAgICAgcHV0KHZhbHVlLCBrZXksIHB1dE1vZGUg
PT0gQWRkT25seSA/IHRydWUgOiBmYWxzZSwgY2FsbGJhY2tzLCB0cmFuc2FjdGlvbiwgZWMpOwor
ICAgIH0KKwogICAgIHZpcnR1YWwgdm9pZCBkZWxldGVGdW5jdGlvbihjb25zdCBXZWJJREJLZXkm
IGtleSwgV2ViSURCQ2FsbGJhY2tzKiBjYWxsYmFja3MsIGNvbnN0IFdlYklEQlRyYW5zYWN0aW9u
JiB0cmFuc2FjdGlvbiwgV2ViRXhjZXB0aW9uQ29kZSYgZWMpIHsgV0VCS0lUX0FTU0VSVF9OT1Rf
UkVBQ0hFRCgpOyB9CiAgICAgdmlydHVhbCBXZWJJREJJbmRleCogY3JlYXRlSW5kZXgoY29uc3Qg
V2ViU3RyaW5nJiBuYW1lLCBjb25zdCBXZWJTdHJpbmcmIGtleVBhdGgsIGJvb2wgdW5pcXVlLCBj
b25zdCBXZWJJREJUcmFuc2FjdGlvbiYsIFdlYkV4Y2VwdGlvbkNvZGUmKQogICAgIHsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL0lEQk9iamVjdFN0b3JlUHJveHkuY3Bw
IGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvSURCT2JqZWN0U3RvcmVQcm94eS5jcHAKaW5k
ZXggZTAzY2RjOGJkYTE0YzdmOTE5YWNlNmE1NGYzOWIxZjIzMzUwZjI1My4uYzU3ZmJhNmJlNDk3
MTJjYzAxYmZkYTM5MzE1N2U2ZTcyZjU2ZDFlMCAxMDA3NTUKLS0tIGEvU291cmNlL1dlYktpdC9j
aHJvbWl1bS9zcmMvSURCT2JqZWN0U3RvcmVQcm94eS5jcHAKKysrIGIvU291cmNlL1dlYktpdC9j
aHJvbWl1bS9zcmMvSURCT2JqZWN0U3RvcmVQcm94eS5jcHAKQEAgLTgwLDEyICs4MCwxMiBAQCB2
b2lkIElEQk9iamVjdFN0b3JlUHJveHk6OmdldChQYXNzUmVmUHRyPElEQktleT4ga2V5LCBQYXNz
UmVmUHRyPElEQkNhbGxiYWNrcz4gYwogICAgIG1fd2ViSURCT2JqZWN0U3RvcmUtPmdldChrZXks
IG5ldyBXZWJJREJDYWxsYmFja3NJbXBsKGNhbGxiYWNrcyksICp0cmFuc2FjdGlvblByb3h5LT5n
ZXRXZWJJREJUcmFuc2FjdGlvbigpLCBlYyk7CiB9CiAKLXZvaWQgSURCT2JqZWN0U3RvcmVQcm94
eTo6cHV0KFBhc3NSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiB2YWx1ZSwgUGFzc1JlZlB0
cjxJREJLZXk+IGtleSwgYm9vbCBhZGRPbmx5LCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4gY2Fs
bGJhY2tzLCBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UqIHRyYW5zYWN0aW9uLCBFeGNl
cHRpb25Db2RlJiBlYykKK3ZvaWQgSURCT2JqZWN0U3RvcmVQcm94eTo6cHV0KFBhc3NSZWZQdHI8
U2VyaWFsaXplZFNjcmlwdFZhbHVlPiB2YWx1ZSwgUGFzc1JlZlB0cjxJREJLZXk+IGtleSwgUHV0
TW9kZSBwdXRNb2RlLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4gY2FsbGJhY2tzLCBJREJUcmFu
c2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UqIHRyYW5zYWN0aW9uLCBFeGNlcHRpb25Db2RlJiBlYykK
IHsKICAgICAvLyBUaGUgdHJhbnNhY3Rpb24gcG9pbnRlciBpcyBndWFyYW50ZWVkIHRvIGJlIGEg
cG9pbnRlciB0byBhIHByb3h5IG9iamVjdCBhcywgaW4gdGhlIHJlbmRlcmVyLAogICAgIC8vIGFs
bCBpbXBsZW1lbnRhdGlvbnMgb2YgSURCIGludGVyZmFjZXMgYXJlIHByb3h5IG9iamVjdHMuCiAg
ICAgSURCVHJhbnNhY3Rpb25CYWNrZW5kUHJveHkqIHRyYW5zYWN0aW9uUHJveHkgPSBzdGF0aWNf
Y2FzdDxJREJUcmFuc2FjdGlvbkJhY2tlbmRQcm94eSo+KHRyYW5zYWN0aW9uKTsKLSAgICBtX3dl
YklEQk9iamVjdFN0b3JlLT5wdXQodmFsdWUsIGtleSwgYWRkT25seSwgbmV3IFdlYklEQkNhbGxi
YWNrc0ltcGwoY2FsbGJhY2tzKSwgKnRyYW5zYWN0aW9uUHJveHktPmdldFdlYklEQlRyYW5zYWN0
aW9uKCksIGVjKTsKKyAgICBtX3dlYklEQk9iamVjdFN0b3JlLT5wdXQodmFsdWUsIGtleSwgc3Rh
dGljX2Nhc3Q8V2ViS2l0OjpXZWJJREJPYmplY3RTdG9yZTo6UHV0TW9kZT4ocHV0TW9kZSksIG5l
dyBXZWJJREJDYWxsYmFja3NJbXBsKGNhbGxiYWNrcyksICp0cmFuc2FjdGlvblByb3h5LT5nZXRX
ZWJJREJUcmFuc2FjdGlvbigpLCBlYyk7CiB9CiAKIHZvaWQgSURCT2JqZWN0U3RvcmVQcm94eTo6
ZGVsZXRlRnVuY3Rpb24oUGFzc1JlZlB0cjxJREJLZXk+IGtleSwgUGFzc1JlZlB0cjxJREJDYWxs
YmFja3M+IGNhbGxiYWNrcywgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlKiB0cmFuc2Fj
dGlvbiwgRXhjZXB0aW9uQ29kZSYgZWMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9t
aXVtL3NyYy9JREJPYmplY3RTdG9yZVByb3h5LmggYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Ny
Yy9JREJPYmplY3RTdG9yZVByb3h5LmgKaW5kZXggMzQ4Yzc5NDZlYzk2YThmN2U5N2E3ZjA2NmZl
YmZlZTFlNjM4MDdmYS4uNDk4YmM1Nzk5MTNlZDE5MjkwZDk3YWFkZWZhNjE4MjAwMTBlZTlhYyAx
MDA3NTUKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvSURCT2JqZWN0U3RvcmVQcm94
eS5oCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL0lEQk9iamVjdFN0b3JlUHJveHku
aApAQCAtNDcsNyArNDcsNyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBQYXNzUmVmUHRyPERPTVN0
cmluZ0xpc3Q+IGluZGV4TmFtZXMoKSBjb25zdDsKIAogICAgIHZpcnR1YWwgdm9pZCBnZXQoUGFz
c1JlZlB0cjxJREJLZXk+LCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4sIElEQlRyYW5zYWN0aW9u
QmFja2VuZEludGVyZmFjZSosIEV4Y2VwdGlvbkNvZGUmKTsKLSAgICB2aXJ0dWFsIHZvaWQgcHV0
KFBhc3NSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiwgUGFzc1JlZlB0cjxJREJLZXk+LCBi
b29sIGFkZE9ubHksIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiwgSURCVHJhbnNhY3Rpb25CYWNr
ZW5kSW50ZXJmYWNlKiwgRXhjZXB0aW9uQ29kZSYpOworICAgIHZpcnR1YWwgdm9pZCBwdXQoUGFz
c1JlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+LCBQYXNzUmVmUHRyPElEQktleT4sIFB1dE1v
ZGUsIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiwgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJm
YWNlKiwgRXhjZXB0aW9uQ29kZSYpOwogICAgIHZpcnR1YWwgdm9pZCBkZWxldGVGdW5jdGlvbihQ
YXNzUmVmUHRyPElEQktleT4sIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiwgSURCVHJhbnNhY3Rp
b25CYWNrZW5kSW50ZXJmYWNlKiwgRXhjZXB0aW9uQ29kZSYpOwogCiAgICAgUGFzc1JlZlB0cjxJ
REJJbmRleEJhY2tlbmRJbnRlcmZhY2U+IGNyZWF0ZUluZGV4KGNvbnN0IFN0cmluZyYgbmFtZSwg
Y29uc3QgU3RyaW5nJiBrZXlQYXRoLCBib29sIHVuaXF1ZSwgSURCVHJhbnNhY3Rpb25CYWNrZW5k
SW50ZXJmYWNlKiwgRXhjZXB0aW9uQ29kZSYpOwpAQCAtNjcsNCArNjcsMyBAQCBwcml2YXRlOgog
I2VuZGlmCiAKICNlbmRpZiAvLyBJREJPYmplY3RTdG9yZVByb3h5X2gKLQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViSURCT2JqZWN0U3RvcmVJbXBsLmNwcCBiL1Nv
dXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYklEQk9iamVjdFN0b3JlSW1wbC5jcHAKaW5kZXgg
MDUwM2VkZThlOGM4NjkzZTk4NTY2Mzk2YzdjMTNkM2E2MThmZDYxNi4uNDk4ZWI3NmI5NTY3NGVk
MTdjZDY1MTA0OGZjODViZjlmZWIwMTA5YiAxMDA3NTUKLS0tIGEvU291cmNlL1dlYktpdC9jaHJv
bWl1bS9zcmMvV2ViSURCT2JqZWN0U3RvcmVJbXBsLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L2No
cm9taXVtL3NyYy9XZWJJREJPYmplY3RTdG9yZUltcGwuY3BwCkBAIC03MSw5ICs3MSw5IEBAIHZv
aWQgV2ViSURCT2JqZWN0U3RvcmVJbXBsOjpnZXQoY29uc3QgV2ViSURCS2V5JiBrZXksIFdlYklE
QkNhbGxiYWNrcyogY2FsbGJhY2tzCiAgICAgbV9vYmplY3RTdG9yZS0+Z2V0KGtleSwgSURCQ2Fs
bGJhY2tzUHJveHk6OmNyZWF0ZShjYWxsYmFja3MpLCB0cmFuc2FjdGlvbi5nZXRJREJUcmFuc2Fj
dGlvbkJhY2tlbmRJbnRlcmZhY2UoKSwgZWMpOwogfQogCi12b2lkIFdlYklEQk9iamVjdFN0b3Jl
SW1wbDo6cHV0KGNvbnN0IFdlYlNlcmlhbGl6ZWRTY3JpcHRWYWx1ZSYgdmFsdWUsIGNvbnN0IFdl
YklEQktleSYga2V5LCBib29sIGFkZE9ubHksIFdlYklEQkNhbGxiYWNrcyogY2FsbGJhY2tzLCBj
b25zdCBXZWJJREJUcmFuc2FjdGlvbiYgdHJhbnNhY3Rpb24sIFdlYkV4Y2VwdGlvbkNvZGUmIGVj
KQordm9pZCBXZWJJREJPYmplY3RTdG9yZUltcGw6OnB1dChjb25zdCBXZWJTZXJpYWxpemVkU2Ny
aXB0VmFsdWUmIHZhbHVlLCBjb25zdCBXZWJJREJLZXkmIGtleSwgUHV0TW9kZSBwdXRNb2RlLCBX
ZWJJREJDYWxsYmFja3MqIGNhbGxiYWNrcywgY29uc3QgV2ViSURCVHJhbnNhY3Rpb24mIHRyYW5z
YWN0aW9uLCBXZWJFeGNlcHRpb25Db2RlJiBlYykKIHsKLSAgICBtX29iamVjdFN0b3JlLT5wdXQo
dmFsdWUsIGtleSwgYWRkT25seSwgSURCQ2FsbGJhY2tzUHJveHk6OmNyZWF0ZShjYWxsYmFja3Mp
LCB0cmFuc2FjdGlvbi5nZXRJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UoKSwgZWMpOwor
ICAgIG1fb2JqZWN0U3RvcmUtPnB1dCh2YWx1ZSwga2V5LCBzdGF0aWNfY2FzdDxJREJPYmplY3RT
dG9yZUJhY2tlbmRJbnRlcmZhY2U6OlB1dE1vZGU+KHB1dE1vZGUpLCBJREJDYWxsYmFja3NQcm94
eTo6Y3JlYXRlKGNhbGxiYWNrcyksIHRyYW5zYWN0aW9uLmdldElEQlRyYW5zYWN0aW9uQmFja2Vu
ZEludGVyZmFjZSgpLCBlYyk7CiB9CiAKIHZvaWQgV2ViSURCT2JqZWN0U3RvcmVJbXBsOjpkZWxl
dGVGdW5jdGlvbihjb25zdCBXZWJJREJLZXkmIGtleSwgV2ViSURCQ2FsbGJhY2tzKiBjYWxsYmFj
a3MsIGNvbnN0IFdlYklEQlRyYW5zYWN0aW9uJiB0cmFuc2FjdGlvbiwgV2ViRXhjZXB0aW9uQ29k
ZSYgZWMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJJREJPYmpl
Y3RTdG9yZUltcGwuaCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYklEQk9iamVjdFN0
b3JlSW1wbC5oCmluZGV4IGY5Y2Q3NzY0NzFlNTM0MmZiNTZmZGYzM2RmYTQ3ODY2Mzk4OWYwZjYu
LjczMTZmOWE2YWFjMTBjYjcyZGRjNTBiMDY2NDIwNDM3MzkwZDVjZjUgMTAwNzU1Ci0tLSBhL1Nv
dXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYklEQk9iamVjdFN0b3JlSW1wbC5oCisrKyBiL1Nv
dXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYklEQk9iamVjdFN0b3JlSW1wbC5oCkBAIC00OCw3
ICs0OCw3IEBAIHB1YmxpYzoKICAgICBXZWJET01TdHJpbmdMaXN0IGluZGV4TmFtZXMoKSBjb25z
dDsKIAogICAgIHZvaWQgZ2V0KGNvbnN0IFdlYklEQktleSYga2V5LCBXZWJJREJDYWxsYmFja3Mq
LCBjb25zdCBXZWJJREJUcmFuc2FjdGlvbiYsIFdlYkV4Y2VwdGlvbkNvZGUmKTsKLSAgICB2b2lk
IHB1dChjb25zdCBXZWJTZXJpYWxpemVkU2NyaXB0VmFsdWUmLCBjb25zdCBXZWJJREJLZXkmIGtl
eSwgYm9vbCBhZGRPbmx5LCBXZWJJREJDYWxsYmFja3MqLCBjb25zdCBXZWJJREJUcmFuc2FjdGlv
biYsIFdlYkV4Y2VwdGlvbkNvZGUmKTsKKyAgICB2b2lkIHB1dChjb25zdCBXZWJTZXJpYWxpemVk
U2NyaXB0VmFsdWUmLCBjb25zdCBXZWJJREJLZXkmLCBQdXRNb2RlLCBXZWJJREJDYWxsYmFja3Mq
LCBjb25zdCBXZWJJREJUcmFuc2FjdGlvbiYsIFdlYkV4Y2VwdGlvbkNvZGUmKTsKICAgICB2b2lk
IGRlbGV0ZUZ1bmN0aW9uKGNvbnN0IFdlYklEQktleSYga2V5LCBXZWJJREJDYWxsYmFja3MqLCBj
b25zdCBXZWJJREJUcmFuc2FjdGlvbiYsIFdlYkV4Y2VwdGlvbkNvZGUmKTsKIAogICAgIFdlYklE
QkluZGV4KiBjcmVhdGVJbmRleChjb25zdCBXZWJTdHJpbmcmIG5hbWUsIGNvbnN0IFdlYlN0cmlu
ZyYga2V5UGF0aCwgYm9vbCB1bmlxdWUsIGNvbnN0IFdlYklEQlRyYW5zYWN0aW9uJiwgV2ViRXhj
ZXB0aW9uQ29kZSYpOwo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>80738</attachid>
            <date>2011-02-01 04:34:04 -0800</date>
            <delta_ts>2011-02-01 11:01:48 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-53421-20110201123401.patch</filename>
            <type>text/plain</type>
            <size>44741</size>
            <attacher name="Hans Wennborg">hans</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxv
ZwppbmRleCAxMDY4ZDlmODJjOGFlYzRmZmMwNDhkOTM1ZWFiZDZjNDlhMGQxODA3Li5hNTkxYWE1
YWYwNDQ1ODhhY2I0ZTI1MDQwOTRmMzgxYmE3OTM5ZDY3IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0
cy9DaGFuZ2VMb2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTUgQEAK
KzIwMTEtMDItMDEgIEhhbnMgV2VubmJvcmcgIDxoYW5zQGNocm9taXVtLm9yZz4KKworICAgICAg
ICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBJbmRleGVkREI6IEltcGxl
bWVudCBzdXBwb3J0IGZvciBjdXJzb3IgdXBkYXRlcworICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTM0MjEKKworICAgICAgICBMYXlvdXQgdGVzdCBmb3Ig
Y3Vyc29yIHVwZGF0ZXMuCisKKyAgICAgICAgKiBzdG9yYWdlL2luZGV4ZWRkYi9jdXJzb3ItdXBk
YXRlLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICogc3RvcmFnZS9pbmRleGVkZGIvY3Vy
c29yLXVwZGF0ZS5odG1sOiBBZGRlZC4KKwogMjAxMS0wMi0wMSAgTWloYWkgUGFycGFyaXRhICA8
bWloYWlwQGNocm9taXVtLm9yZz4KIAogICAgICAgICBSZXZpZXdlZCBieSBKYW1lcyBSb2JpbnNv
bi4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3N0b3JhZ2UvaW5kZXhlZGRiL2N1cnNvci11cGRh
dGUtZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvc3RvcmFnZS9pbmRleGVkZGIvY3Vyc29yLXVw
ZGF0ZS1leHBlY3RlZC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uODdkM2JjYTMwYTUwYzA3YmY3NDRkZmI1ZGYy
NDQyNzVmODFjYjJjMgotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL3N0b3JhZ2UvaW5k
ZXhlZGRiL2N1cnNvci11cGRhdGUtZXhwZWN0ZWQudHh0CkBAIC0wLDAgKzEsMjc5IEBACitUZXN0
IEluZGV4ZWREQidzIGN1cnNvciB1cGRhdGUuCisKK09uIHN1Y2Nlc3MsIHlvdSB3aWxsIHNlZSBh
IHNlcmllcyBvZiAiUEFTUyIgbWVzc2FnZXMsIGZvbGxvd2VkIGJ5ICJURVNUIENPTVBMRVRFIi4K
KworCit3ZWJraXRJbmRleGVkREIub3BlbignbmFtZScpCitQQVNTICdvbnN1Y2Nlc3MnIGluIHJl
c3VsdCBpcyB0cnVlCitQQVNTICdvbmVycm9yJyBpbiByZXN1bHQgaXMgdHJ1ZQorUEFTUyAncmVh
ZHlTdGF0ZScgaW4gcmVzdWx0IGlzIHRydWUKK0FuIGV2ZW50IHNob3VsZCBmaXJlIHNob3J0bHku
Li4KKworU3VjY2VzcyBldmVudCBmaXJlZDoKK1BBU1MgJ3Jlc3VsdCcgaW4gZXZlbnQgaXMgdHJ1
ZQorUEFTUyAnY29kZScgaW4gZXZlbnQgaXMgZmFsc2UKK1BBU1MgJ21lc3NhZ2UnIGluIGV2ZW50
IGlzIGZhbHNlCitQQVNTICdzb3VyY2UnIGluIGV2ZW50IGlzIHRydWUKK1BBU1MgZXZlbnQuc291
cmNlICE9IG51bGwgaXMgdHJ1ZQorUEFTUyAnb25zdWNjZXNzJyBpbiBldmVudC50YXJnZXQgaXMg
dHJ1ZQorUEFTUyAnb25lcnJvcicgaW4gZXZlbnQudGFyZ2V0IGlzIHRydWUKK1BBU1MgJ3JlYWR5
U3RhdGUnIGluIGV2ZW50LnRhcmdldCBpcyB0cnVlCitQQVNTIGV2ZW50LnRhcmdldC5yZWFkeVN0
YXRlIGlzIGV2ZW50LnRhcmdldC5ET05FCisKK2RiID0gZXZlbnQucmVzdWx0CitkYi5zZXRWZXJz
aW9uKCduZXcgdmVyc2lvbicpCitQQVNTICdvbnN1Y2Nlc3MnIGluIHJlc3VsdCBpcyB0cnVlCitQ
QVNTICdvbmVycm9yJyBpbiByZXN1bHQgaXMgdHJ1ZQorUEFTUyAncmVhZHlTdGF0ZScgaW4gcmVz
dWx0IGlzIHRydWUKK0FuIGV2ZW50IHNob3VsZCBmaXJlIHNob3J0bHkuLi4KKworc2V0VmVyc2lv
blN1Y2Nlc3MoKToKK1N1Y2Nlc3MgZXZlbnQgZmlyZWQ6CitQQVNTICdyZXN1bHQnIGluIGV2ZW50
IGlzIHRydWUKK1BBU1MgJ2NvZGUnIGluIGV2ZW50IGlzIGZhbHNlCitQQVNTICdtZXNzYWdlJyBp
biBldmVudCBpcyBmYWxzZQorUEFTUyAnc291cmNlJyBpbiBldmVudCBpcyB0cnVlCitQQVNTIGV2
ZW50LnNvdXJjZSAhPSBudWxsIGlzIHRydWUKK1BBU1MgJ29uc3VjY2VzcycgaW4gZXZlbnQudGFy
Z2V0IGlzIHRydWUKK1BBU1MgJ29uZXJyb3InIGluIGV2ZW50LnRhcmdldCBpcyB0cnVlCitQQVNT
ICdyZWFkeVN0YXRlJyBpbiBldmVudC50YXJnZXQgaXMgdHJ1ZQorUEFTUyBldmVudC50YXJnZXQu
cmVhZHlTdGF0ZSBpcyBldmVudC50YXJnZXQuRE9ORQorCit0cmFucyA9IGV2ZW50LnJlc3VsdAor
UEFTUyB0cmFucyAhPT0gbnVsbCBpcyB0cnVlCitEZWxldGVkIGFsbCBvYmplY3Qgc3RvcmVzLgor
Y3JlYXRlQW5kUG9wdWxhdGVPYmplY3RTdG9yZSgpOgorb2JqZWN0U3RvcmUgPSBkYi5jcmVhdGVP
YmplY3RTdG9yZSgnYmFzaWNTdG9yZScpCitvYmplY3RTdG9yZS5hZGQoJ215VmFsdWUxJywgJ215
S2V5MScpLm9uZXJyb3IgPSB1bmV4cGVjdGVkRXJyb3JDYWxsYmFjaworb2JqZWN0U3RvcmUuYWRk
KCdteVZhbHVlMicsICdteUtleTInKS5vbmVycm9yID0gdW5leHBlY3RlZEVycm9yQ2FsbGJhY2sK
K29iamVjdFN0b3JlLmFkZCgnbXlWYWx1ZTMnLCAnbXlLZXkzJykub25lcnJvciA9IHVuZXhwZWN0
ZWRFcnJvckNhbGxiYWNrCitvYmplY3RTdG9yZS5hZGQoJ215VmFsdWU0JywgJ215S2V5NCcpLm9u
ZXJyb3IgPSB1bmV4cGVjdGVkRXJyb3JDYWxsYmFjaworb2JqZWN0U3RvcmUgPSBkYi5jcmVhdGVP
YmplY3RTdG9yZSgnYXV0b0luY3JlbWVudFN0b3JlJywge2F1dG9JbmNyZW1lbnQ6IHRydWV9KQor
b2JqZWN0U3RvcmUuYWRkKCdmb28xJykub25lcnJvciA9IHVuZXhwZWN0ZWRFcnJvckNhbGxiYWNr
CitvYmplY3RTdG9yZS5hZGQoJ2ZvbzInKS5vbmVycm9yID0gdW5leHBlY3RlZEVycm9yQ2FsbGJh
Y2sKK29iamVjdFN0b3JlLmFkZCgnZm9vMycpLm9uZXJyb3IgPSB1bmV4cGVjdGVkRXJyb3JDYWxs
YmFjaworb2JqZWN0U3RvcmUuYWRkKCdmb280Jykub25lcnJvciA9IHVuZXhwZWN0ZWRFcnJvckNh
bGxiYWNrCitvYmplY3RTdG9yZSA9IGRiLmNyZWF0ZU9iamVjdFN0b3JlKCdrZXlQYXRoU3RvcmUn
LCB7a2V5UGF0aDogJ2lkJ30pCitvYmplY3RTdG9yZS5jcmVhdGVJbmRleCgnbnVtYmVySW5kZXgn
LCAnbnVtYmVyJykKK29iamVjdFN0b3JlLmFkZCh7bnVtYmVyOiAxLCBpZDogMX0pLm9uZXJyb3Ig
PSB1bmV4cGVjdGVkRXJyb3JDYWxsYmFjaworb2JqZWN0U3RvcmUuYWRkKHtudW1iZXI6IDIsIGlk
OiAyfSkub25lcnJvciA9IHVuZXhwZWN0ZWRFcnJvckNhbGxiYWNrCitvYmplY3RTdG9yZS5hZGQo
e251bWJlcjogMywgaWQ6IDN9KS5vbmVycm9yID0gdW5leHBlY3RlZEVycm9yQ2FsbGJhY2sKK29i
amVjdFN0b3JlLmFkZCh7bnVtYmVyOiA0LCBpZDogNH0pLm9uZXJyb3IgPSB1bmV4cGVjdGVkRXJy
b3JDYWxsYmFjaworb3BlbkJhc2ljQ3Vyc29yKCkKK3RyYW5zID0gZGIudHJhbnNhY3Rpb24oW10s
IHdlYmtpdElEQlRyYW5zYWN0aW9uLlJFQURfV1JJVEUpCit0cmFucy5vYmplY3RTdG9yZSgnYmFz
aWNTdG9yZScpLm9wZW5DdXJzb3Ioa2V5UmFuZ2UpCitQQVNTICdvbnN1Y2Nlc3MnIGluIHJlc3Vs
dCBpcyB0cnVlCitQQVNTICdvbmVycm9yJyBpbiByZXN1bHQgaXMgdHJ1ZQorUEFTUyAncmVhZHlT
dGF0ZScgaW4gcmVzdWx0IGlzIHRydWUKK0FuIGV2ZW50IHNob3VsZCBmaXJlIHNob3J0bHkuLi4K
KworYmFzaWNVcGRhdGVDdXJzb3IoKQorZXZlbnQucmVzdWx0LnVwZGF0ZSgnbXlVcGRhdGVkVmFs
dWUnICsgY291bnRlcisrKQorZXZlbnQuc291cmNlLmNvbnRpbnVlKCkKK2Jhc2ljVXBkYXRlQ3Vy
c29yKCkKK2V2ZW50LnJlc3VsdC51cGRhdGUoJ215VXBkYXRlZFZhbHVlJyArIGNvdW50ZXIrKykK
K2V2ZW50LnNvdXJjZS5jb250aW51ZSgpCitiYXNpY1VwZGF0ZUN1cnNvcigpCitldmVudC5yZXN1
bHQudXBkYXRlKCdteVVwZGF0ZWRWYWx1ZScgKyBjb3VudGVyKyspCitldmVudC5zb3VyY2UuY29u
dGludWUoKQorYmFzaWNVcGRhdGVDdXJzb3IoKQorZXZlbnQucmVzdWx0LnVwZGF0ZSgnbXlVcGRh
dGVkVmFsdWUnICsgY291bnRlcisrKQorZXZlbnQuc291cmNlLmNvbnRpbnVlKCkKK2Jhc2ljVXBk
YXRlQ3Vyc29yKCkKK1BBU1MgY291bnRlciBpcyA1Cit0cmFucy5vYmplY3RTdG9yZSgnYmFzaWNT
dG9yZScpLm9wZW5DdXJzb3Ioa2V5UmFuZ2UpCitQQVNTICdvbnN1Y2Nlc3MnIGluIHJlc3VsdCBp
cyB0cnVlCitQQVNTICdvbmVycm9yJyBpbiByZXN1bHQgaXMgdHJ1ZQorUEFTUyAncmVhZHlTdGF0
ZScgaW4gcmVzdWx0IGlzIHRydWUKK0FuIGV2ZW50IHNob3VsZCBmaXJlIHNob3J0bHkuLi4KKwor
YmFzaWNDaGVja0N1cnNvcigpCitQQVNTIGV2ZW50LnJlc3VsdC5rZXkgaXMgIm15S2V5MSIKK1BB
U1MgZXZlbnQucmVzdWx0LnZhbHVlIGlzICJteVVwZGF0ZWRWYWx1ZTEiCitldmVudC5yZXN1bHQu
Y29udGludWUoKQorYmFzaWNDaGVja0N1cnNvcigpCitQQVNTIGV2ZW50LnJlc3VsdC5rZXkgaXMg
Im15S2V5MiIKK1BBU1MgZXZlbnQucmVzdWx0LnZhbHVlIGlzICJteVVwZGF0ZWRWYWx1ZTIiCitl
dmVudC5yZXN1bHQuY29udGludWUoKQorYmFzaWNDaGVja0N1cnNvcigpCitQQVNTIGV2ZW50LnJl
c3VsdC5rZXkgaXMgIm15S2V5MyIKK1BBU1MgZXZlbnQucmVzdWx0LnZhbHVlIGlzICJteVVwZGF0
ZWRWYWx1ZTMiCitldmVudC5yZXN1bHQuY29udGludWUoKQorYmFzaWNDaGVja0N1cnNvcigpCitQ
QVNTIGV2ZW50LnJlc3VsdC5rZXkgaXMgIm15S2V5NCIKK1BBU1MgZXZlbnQucmVzdWx0LnZhbHVl
IGlzICJteVVwZGF0ZWRWYWx1ZTQiCitldmVudC5yZXN1bHQuY29udGludWUoKQorYmFzaWNDaGVj
a0N1cnNvcigpCitQQVNTIGNvdW50ZXIgaXMgNQordHJhbnMub2JqZWN0U3RvcmUoJ2F1dG9JbmNy
ZW1lbnRTdG9yZScpLm9wZW5DdXJzb3Ioa2V5UmFuZ2UpCitQQVNTICdvbnN1Y2Nlc3MnIGluIHJl
c3VsdCBpcyB0cnVlCitQQVNTICdvbmVycm9yJyBpbiByZXN1bHQgaXMgdHJ1ZQorUEFTUyAncmVh
ZHlTdGF0ZScgaW4gcmVzdWx0IGlzIHRydWUKK0FuIGV2ZW50IHNob3VsZCBmaXJlIHNob3J0bHku
Li4KKworYXV0b0luY3JlbWVudFVwZGF0ZUN1cnNvcigpCitldmVudC5yZXN1bHQudXBkYXRlKCdt
eVVwZGF0ZWRGb28nICsgY291bnRlcisrKQorZXZlbnQuc291cmNlLmNvbnRpbnVlKCkKK2F1dG9J
bmNyZW1lbnRVcGRhdGVDdXJzb3IoKQorZXZlbnQucmVzdWx0LnVwZGF0ZSgnbXlVcGRhdGVkRm9v
JyArIGNvdW50ZXIrKykKK2V2ZW50LnNvdXJjZS5jb250aW51ZSgpCithdXRvSW5jcmVtZW50VXBk
YXRlQ3Vyc29yKCkKK2V2ZW50LnJlc3VsdC51cGRhdGUoJ215VXBkYXRlZEZvbycgKyBjb3VudGVy
KyspCitldmVudC5zb3VyY2UuY29udGludWUoKQorYXV0b0luY3JlbWVudFVwZGF0ZUN1cnNvcigp
CitldmVudC5yZXN1bHQudXBkYXRlKCdteVVwZGF0ZWRGb28nICsgY291bnRlcisrKQorZXZlbnQu
c291cmNlLmNvbnRpbnVlKCkKK2F1dG9JbmNyZW1lbnRVcGRhdGVDdXJzb3IoKQorUEFTUyBjb3Vu
dGVyIGlzIDUKK3RyYW5zLm9iamVjdFN0b3JlKCdhdXRvSW5jcmVtZW50U3RvcmUnKS5vcGVuQ3Vy
c29yKGtleVJhbmdlKQorUEFTUyAnb25zdWNjZXNzJyBpbiByZXN1bHQgaXMgdHJ1ZQorUEFTUyAn
b25lcnJvcicgaW4gcmVzdWx0IGlzIHRydWUKK1BBU1MgJ3JlYWR5U3RhdGUnIGluIHJlc3VsdCBp
cyB0cnVlCitBbiBldmVudCBzaG91bGQgZmlyZSBzaG9ydGx5Li4uCisKK2F1dG9JbmNyZW1lbnRD
aGVja0N1cnNvcigpCitQQVNTIGV2ZW50LnJlc3VsdC5rZXkgaXMgY291bnRlcgorUEFTUyBldmVu
dC5yZXN1bHQudmFsdWUgaXMgIm15VXBkYXRlZEZvbzEiCitldmVudC5yZXN1bHQuY29udGludWUo
KQorYXV0b0luY3JlbWVudENoZWNrQ3Vyc29yKCkKK1BBU1MgZXZlbnQucmVzdWx0LmtleSBpcyBj
b3VudGVyCitQQVNTIGV2ZW50LnJlc3VsdC52YWx1ZSBpcyAibXlVcGRhdGVkRm9vMiIKK2V2ZW50
LnJlc3VsdC5jb250aW51ZSgpCithdXRvSW5jcmVtZW50Q2hlY2tDdXJzb3IoKQorUEFTUyBldmVu
dC5yZXN1bHQua2V5IGlzIGNvdW50ZXIKK1BBU1MgZXZlbnQucmVzdWx0LnZhbHVlIGlzICJteVVw
ZGF0ZWRGb28zIgorZXZlbnQucmVzdWx0LmNvbnRpbnVlKCkKK2F1dG9JbmNyZW1lbnRDaGVja0N1
cnNvcigpCitQQVNTIGV2ZW50LnJlc3VsdC5rZXkgaXMgY291bnRlcgorUEFTUyBldmVudC5yZXN1
bHQudmFsdWUgaXMgIm15VXBkYXRlZEZvbzQiCitldmVudC5yZXN1bHQuY29udGludWUoKQorYXV0
b0luY3JlbWVudENoZWNrQ3Vyc29yKCkKK1BBU1MgY291bnRlciBpcyA1Cit0cmFucy5vYmplY3RT
dG9yZSgna2V5UGF0aFN0b3JlJykub3BlbkN1cnNvcihrZXlSYW5nZSkKK1BBU1MgJ29uc3VjY2Vz
cycgaW4gcmVzdWx0IGlzIHRydWUKK1BBU1MgJ29uZXJyb3InIGluIHJlc3VsdCBpcyB0cnVlCitQ
QVNTICdyZWFkeVN0YXRlJyBpbiByZXN1bHQgaXMgdHJ1ZQorQW4gZXZlbnQgc2hvdWxkIGZpcmUg
c2hvcnRseS4uLgorCitrZXlQYXRoVXBkYXRlQ3Vyc29yKCkKK2V2ZW50LnJlc3VsdC51cGRhdGUo
e2lkOiAxMDAgKyBjb3VudGVyLCBudW1iZXI6IDEwMCArIGNvdW50ZXJ9KQorRXJyb3IgZXZlbnQg
ZmlyZWQ6CitQQVNTICdyZXN1bHQnIGluIGV2ZW50IGlzIGZhbHNlCitQQVNTICdjb2RlJyBpbiBl
dmVudCBpcyB0cnVlCitQQVNTICdtZXNzYWdlJyBpbiBldmVudCBpcyB0cnVlCitQQVNTICdzb3Vy
Y2UnIGluIGV2ZW50IGlzIHRydWUKK1BBU1MgZXZlbnQuc291cmNlICE9IG51bGwgaXMgdHJ1ZQor
UEFTUyAnb25zdWNjZXNzJyBpbiBldmVudC50YXJnZXQgaXMgdHJ1ZQorUEFTUyAnb25lcnJvcicg
aW4gZXZlbnQudGFyZ2V0IGlzIHRydWUKK1BBU1MgJ3JlYWR5U3RhdGUnIGluIGV2ZW50LnRhcmdl
dCBpcyB0cnVlCitQQVNTIGV2ZW50LnRhcmdldC5yZWFkeVN0YXRlIGlzIGV2ZW50LnRhcmdldC5E
T05FCisKK1BBU1MgZXZlbnQuY29kZSBpcyB3ZWJraXRJREJEYXRhYmFzZUV4Y2VwdGlvbi5EQVRB
X0VSUgorZXZlbnQuc291cmNlLnVwZGF0ZSh7aWQ6IGNvdW50ZXIsIG51bWJlcjogMTAwICsgY291
bnRlcisrfSkKK2V2ZW50LnNvdXJjZS5jb250aW51ZSgpCitrZXlQYXRoVXBkYXRlQ3Vyc29yKCkK
K2V2ZW50LnJlc3VsdC51cGRhdGUoe2lkOiAxMDAgKyBjb3VudGVyLCBudW1iZXI6IDEwMCArIGNv
dW50ZXJ9KQorRXJyb3IgZXZlbnQgZmlyZWQ6CitQQVNTICdyZXN1bHQnIGluIGV2ZW50IGlzIGZh
bHNlCitQQVNTICdjb2RlJyBpbiBldmVudCBpcyB0cnVlCitQQVNTICdtZXNzYWdlJyBpbiBldmVu
dCBpcyB0cnVlCitQQVNTICdzb3VyY2UnIGluIGV2ZW50IGlzIHRydWUKK1BBU1MgZXZlbnQuc291
cmNlICE9IG51bGwgaXMgdHJ1ZQorUEFTUyAnb25zdWNjZXNzJyBpbiBldmVudC50YXJnZXQgaXMg
dHJ1ZQorUEFTUyAnb25lcnJvcicgaW4gZXZlbnQudGFyZ2V0IGlzIHRydWUKK1BBU1MgJ3JlYWR5
U3RhdGUnIGluIGV2ZW50LnRhcmdldCBpcyB0cnVlCitQQVNTIGV2ZW50LnRhcmdldC5yZWFkeVN0
YXRlIGlzIGV2ZW50LnRhcmdldC5ET05FCisKK1BBU1MgZXZlbnQuY29kZSBpcyB3ZWJraXRJREJE
YXRhYmFzZUV4Y2VwdGlvbi5EQVRBX0VSUgorZXZlbnQuc291cmNlLnVwZGF0ZSh7aWQ6IGNvdW50
ZXIsIG51bWJlcjogMTAwICsgY291bnRlcisrfSkKK2V2ZW50LnNvdXJjZS5jb250aW51ZSgpCitr
ZXlQYXRoVXBkYXRlQ3Vyc29yKCkKK2V2ZW50LnJlc3VsdC51cGRhdGUoe2lkOiAxMDAgKyBjb3Vu
dGVyLCBudW1iZXI6IDEwMCArIGNvdW50ZXJ9KQorRXJyb3IgZXZlbnQgZmlyZWQ6CitQQVNTICdy
ZXN1bHQnIGluIGV2ZW50IGlzIGZhbHNlCitQQVNTICdjb2RlJyBpbiBldmVudCBpcyB0cnVlCitQ
QVNTICdtZXNzYWdlJyBpbiBldmVudCBpcyB0cnVlCitQQVNTICdzb3VyY2UnIGluIGV2ZW50IGlz
IHRydWUKK1BBU1MgZXZlbnQuc291cmNlICE9IG51bGwgaXMgdHJ1ZQorUEFTUyAnb25zdWNjZXNz
JyBpbiBldmVudC50YXJnZXQgaXMgdHJ1ZQorUEFTUyAnb25lcnJvcicgaW4gZXZlbnQudGFyZ2V0
IGlzIHRydWUKK1BBU1MgJ3JlYWR5U3RhdGUnIGluIGV2ZW50LnRhcmdldCBpcyB0cnVlCitQQVNT
IGV2ZW50LnRhcmdldC5yZWFkeVN0YXRlIGlzIGV2ZW50LnRhcmdldC5ET05FCisKK1BBU1MgZXZl
bnQuY29kZSBpcyB3ZWJraXRJREJEYXRhYmFzZUV4Y2VwdGlvbi5EQVRBX0VSUgorZXZlbnQuc291
cmNlLnVwZGF0ZSh7aWQ6IGNvdW50ZXIsIG51bWJlcjogMTAwICsgY291bnRlcisrfSkKK2V2ZW50
LnNvdXJjZS5jb250aW51ZSgpCitrZXlQYXRoVXBkYXRlQ3Vyc29yKCkKK2V2ZW50LnJlc3VsdC51
cGRhdGUoe2lkOiAxMDAgKyBjb3VudGVyLCBudW1iZXI6IDEwMCArIGNvdW50ZXJ9KQorRXJyb3Ig
ZXZlbnQgZmlyZWQ6CitQQVNTICdyZXN1bHQnIGluIGV2ZW50IGlzIGZhbHNlCitQQVNTICdjb2Rl
JyBpbiBldmVudCBpcyB0cnVlCitQQVNTICdtZXNzYWdlJyBpbiBldmVudCBpcyB0cnVlCitQQVNT
ICdzb3VyY2UnIGluIGV2ZW50IGlzIHRydWUKK1BBU1MgZXZlbnQuc291cmNlICE9IG51bGwgaXMg
dHJ1ZQorUEFTUyAnb25zdWNjZXNzJyBpbiBldmVudC50YXJnZXQgaXMgdHJ1ZQorUEFTUyAnb25l
cnJvcicgaW4gZXZlbnQudGFyZ2V0IGlzIHRydWUKK1BBU1MgJ3JlYWR5U3RhdGUnIGluIGV2ZW50
LnRhcmdldCBpcyB0cnVlCitQQVNTIGV2ZW50LnRhcmdldC5yZWFkeVN0YXRlIGlzIGV2ZW50LnRh
cmdldC5ET05FCisKK1BBU1MgZXZlbnQuY29kZSBpcyB3ZWJraXRJREJEYXRhYmFzZUV4Y2VwdGlv
bi5EQVRBX0VSUgorZXZlbnQuc291cmNlLnVwZGF0ZSh7aWQ6IGNvdW50ZXIsIG51bWJlcjogMTAw
ICsgY291bnRlcisrfSkKK2V2ZW50LnNvdXJjZS5jb250aW51ZSgpCitrZXlQYXRoVXBkYXRlQ3Vy
c29yKCkKK1BBU1MgY291bnRlciBpcyA1Cit0cmFucy5vYmplY3RTdG9yZSgna2V5UGF0aFN0b3Jl
Jykub3BlbkN1cnNvcihrZXlSYW5nZSkKK1BBU1MgJ29uc3VjY2VzcycgaW4gcmVzdWx0IGlzIHRy
dWUKK1BBU1MgJ29uZXJyb3InIGluIHJlc3VsdCBpcyB0cnVlCitQQVNTICdyZWFkeVN0YXRlJyBp
biByZXN1bHQgaXMgdHJ1ZQorQW4gZXZlbnQgc2hvdWxkIGZpcmUgc2hvcnRseS4uLgorCitrZXlQ
YXRoQ2hlY2tDdXJzb3IoKQorUEFTUyBldmVudC5yZXN1bHQua2V5IGlzIGNvdW50ZXIKK1BBU1Mg
ZXZlbnQucmVzdWx0LnZhbHVlLmlkIGlzIGNvdW50ZXIKK1BBU1MgZXZlbnQucmVzdWx0LnZhbHVl
Lm51bWJlciBpcyAxMDEKK2V2ZW50LnJlc3VsdC5jb250aW51ZSgpCitrZXlQYXRoQ2hlY2tDdXJz
b3IoKQorUEFTUyBldmVudC5yZXN1bHQua2V5IGlzIGNvdW50ZXIKK1BBU1MgZXZlbnQucmVzdWx0
LnZhbHVlLmlkIGlzIGNvdW50ZXIKK1BBU1MgZXZlbnQucmVzdWx0LnZhbHVlLm51bWJlciBpcyAx
MDIKK2V2ZW50LnJlc3VsdC5jb250aW51ZSgpCitrZXlQYXRoQ2hlY2tDdXJzb3IoKQorUEFTUyBl
dmVudC5yZXN1bHQua2V5IGlzIGNvdW50ZXIKK1BBU1MgZXZlbnQucmVzdWx0LnZhbHVlLmlkIGlz
IGNvdW50ZXIKK1BBU1MgZXZlbnQucmVzdWx0LnZhbHVlLm51bWJlciBpcyAxMDMKK2V2ZW50LnJl
c3VsdC5jb250aW51ZSgpCitrZXlQYXRoQ2hlY2tDdXJzb3IoKQorUEFTUyBldmVudC5yZXN1bHQu
a2V5IGlzIGNvdW50ZXIKK1BBU1MgZXZlbnQucmVzdWx0LnZhbHVlLmlkIGlzIGNvdW50ZXIKK1BB
U1MgZXZlbnQucmVzdWx0LnZhbHVlLm51bWJlciBpcyAxMDQKK2V2ZW50LnJlc3VsdC5jb250aW51
ZSgpCitrZXlQYXRoQ2hlY2tDdXJzb3IoKQorUEFTUyBjb3VudGVyIGlzIDUKK3RyYW5zLm9iamVj
dFN0b3JlKCdrZXlQYXRoU3RvcmUnKS5pbmRleCgnbnVtYmVySW5kZXgnKS5vcGVuS2V5Q3Vyc29y
KGtleVJhbmdlKQora2V5Q3Vyc29yKCkKK1BBU1MgZXZlbnQucmVzdWx0LmtleSBpcyBjb3VudGVy
ICsgMTAwCitQQVNTIGV2ZW50LnJlc3VsdC52YWx1ZSBpcyBjb3VudGVyCitldmVudC5yZXN1bHQu
dXBkYXRlKHtpZDogY291bnRlciwgbnVtYmVyOiBjb3VudGVyICsgMjAwfSkKK1BBU1MgY29kZSBp
cyB3ZWJraXRJREJEYXRhYmFzZUV4Y2VwdGlvbi5OT1RfQUxMT1dFRF9FUlIKK2tleUN1cnNvcigp
CitQQVNTIGV2ZW50LnJlc3VsdC5rZXkgaXMgY291bnRlciArIDEwMAorUEFTUyBldmVudC5yZXN1
bHQudmFsdWUgaXMgY291bnRlcgorZXZlbnQucmVzdWx0LnVwZGF0ZSh7aWQ6IGNvdW50ZXIsIG51
bWJlcjogY291bnRlciArIDIwMH0pCitQQVNTIGNvZGUgaXMgd2Via2l0SURCRGF0YWJhc2VFeGNl
cHRpb24uTk9UX0FMTE9XRURfRVJSCitrZXlDdXJzb3IoKQorUEFTUyBldmVudC5yZXN1bHQua2V5
IGlzIGNvdW50ZXIgKyAxMDAKK1BBU1MgZXZlbnQucmVzdWx0LnZhbHVlIGlzIGNvdW50ZXIKK2V2
ZW50LnJlc3VsdC51cGRhdGUoe2lkOiBjb3VudGVyLCBudW1iZXI6IGNvdW50ZXIgKyAyMDB9KQor
UEFTUyBjb2RlIGlzIHdlYmtpdElEQkRhdGFiYXNlRXhjZXB0aW9uLk5PVF9BTExPV0VEX0VSUgor
a2V5Q3Vyc29yKCkKK1BBU1MgZXZlbnQucmVzdWx0LmtleSBpcyBjb3VudGVyICsgMTAwCitQQVNT
IGV2ZW50LnJlc3VsdC52YWx1ZSBpcyBjb3VudGVyCitldmVudC5yZXN1bHQudXBkYXRlKHtpZDog
Y291bnRlciwgbnVtYmVyOiBjb3VudGVyICsgMjAwfSkKK1BBU1MgY29kZSBpcyB3ZWJraXRJREJE
YXRhYmFzZUV4Y2VwdGlvbi5OT1RfQUxMT1dFRF9FUlIKK2tleUN1cnNvcigpCitQQVNTIGNvdW50
ZXIgaXMgNQordHJhbnNhY3Rpb25Db21wbGV0ZSgpCitQQVNTIHN1Y2Nlc3NmdWxseVBhcnNlZCBp
cyB0cnVlCisKK1RFU1QgQ09NUExFVEUKKwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvc3RvcmFn
ZS9pbmRleGVkZGIvY3Vyc29yLXVwZGF0ZS5odG1sIGIvTGF5b3V0VGVzdHMvc3RvcmFnZS9pbmRl
eGVkZGIvY3Vyc29yLXVwZGF0ZS5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmVkYzAxZTdlNWMxZGMzYTFlMmIw
MTU4ODcyMTU3YTljZWY5NGVjNmMKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9zdG9y
YWdlL2luZGV4ZWRkYi9jdXJzb3ItdXBkYXRlLmh0bWwKQEAgLTAsMCArMSwyNDcgQEAKKzxodG1s
PgorPGhlYWQ+Cis8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Ii4uLy4uL2Zhc3QvanMvcmVz
b3VyY2VzL2pzLXRlc3Qtc3R5bGUuY3NzIj4KKzxzY3JpcHQgc3JjPSIuLi8uLi9mYXN0L2pzL3Jl
c291cmNlcy9qcy10ZXN0LXByZS5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iLi4vLi4vZmFz
dC9qcy9yZXNvdXJjZXMvanMtdGVzdC1wb3N0LWZ1bmN0aW9uLmpzIj48L3NjcmlwdD4KKzxzY3Jp
cHQgc3JjPSJyZXNvdXJjZXMvc2hhcmVkLmpzIj48L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5Pgor
PHAgaWQ9ImRlc2NyaXB0aW9uIj48L3A+Cis8ZGl2IGlkPSJjb25zb2xlIj48L2Rpdj4KKzxzY3Jp
cHQ+CisKK2Rlc2NyaXB0aW9uKCJUZXN0IEluZGV4ZWREQidzIGN1cnNvciB1cGRhdGUuIik7Citp
ZiAod2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKQorICAgIGxheW91dFRlc3RDb250cm9sbGVy
LndhaXRVbnRpbERvbmUoKTsKKwordGVzdCgpOworCitmdW5jdGlvbiB0ZXN0KCkKK3sKKyAgICBy
ZXN1bHQgPSBldmFsQW5kTG9nKCJ3ZWJraXRJbmRleGVkREIub3BlbignbmFtZScpIik7CisgICAg
dmVyaWZ5UmVzdWx0KHJlc3VsdCk7CisgICAgcmVzdWx0Lm9uc3VjY2VzcyA9IG9wZW5TdWNjZXNz
OworICAgIHJlc3VsdC5vbmVycm9yID0gdW5leHBlY3RlZEVycm9yQ2FsbGJhY2s7Cit9CisKK2Z1
bmN0aW9uIG9wZW5TdWNjZXNzKCkKK3sKKyAgICB2ZXJpZnlTdWNjZXNzRXZlbnQoZXZlbnQpOwor
ICAgIHZhciBkYiA9IGV2YWxBbmRMb2coImRiID0gZXZlbnQucmVzdWx0Iik7CisKKyAgICByZXN1
bHQgPSBldmFsQW5kTG9nKCJkYi5zZXRWZXJzaW9uKCduZXcgdmVyc2lvbicpIik7CisgICAgdmVy
aWZ5UmVzdWx0KHJlc3VsdCk7CisgICAgcmVzdWx0Lm9uc3VjY2VzcyA9IHNldFZlcnNpb25TdWNj
ZXNzOworICAgIHJlc3VsdC5vbmVycm9yID0gdW5leHBlY3RlZEVycm9yQ2FsbGJhY2s7Cit9CisK
K2Z1bmN0aW9uIHNldFZlcnNpb25TdWNjZXNzKCkKK3sKKyAgICBkZWJ1Zygic2V0VmVyc2lvblN1
Y2Nlc3MoKToiKTsKKyAgICB2ZXJpZnlTdWNjZXNzRXZlbnQoZXZlbnQpOworICAgIHdpbmRvdy50
cmFucyA9IGV2YWxBbmRMb2coInRyYW5zID0gZXZlbnQucmVzdWx0Iik7CisgICAgc2hvdWxkQmVU
cnVlKCJ0cmFucyAhPT0gbnVsbCIpOworICAgIHRyYW5zLm9uYWJvcnQgPSB1bmV4cGVjdGVkQWJv
cnRDYWxsYmFjazsKKyAgICB0cmFucy5vbmNvbXBsZXRlID0gb3BlbkJhc2ljQ3Vyc29yOworCisg
ICAgZGVsZXRlQWxsT2JqZWN0U3RvcmVzKGRiLCBjcmVhdGVBbmRQb3B1bGF0ZU9iamVjdFN0b3Jl
KTsKK30KKworZnVuY3Rpb24gY3JlYXRlQW5kUG9wdWxhdGVPYmplY3RTdG9yZSgpCit7CisgICAg
ZGVidWcoImNyZWF0ZUFuZFBvcHVsYXRlT2JqZWN0U3RvcmUoKToiKTsKKyAgICB2YXIgb2JqZWN0
U3RvcmUgPSBldmFsQW5kTG9nKCJvYmplY3RTdG9yZSA9IGRiLmNyZWF0ZU9iamVjdFN0b3JlKCdi
YXNpY1N0b3JlJykiKTsKKyAgICBldmFsQW5kTG9nKCJvYmplY3RTdG9yZS5hZGQoJ215VmFsdWUx
JywgJ215S2V5MScpLm9uZXJyb3IgPSB1bmV4cGVjdGVkRXJyb3JDYWxsYmFjayIpOworICAgIGV2
YWxBbmRMb2coIm9iamVjdFN0b3JlLmFkZCgnbXlWYWx1ZTInLCAnbXlLZXkyJykub25lcnJvciA9
IHVuZXhwZWN0ZWRFcnJvckNhbGxiYWNrIik7CisgICAgZXZhbEFuZExvZygib2JqZWN0U3RvcmUu
YWRkKCdteVZhbHVlMycsICdteUtleTMnKS5vbmVycm9yID0gdW5leHBlY3RlZEVycm9yQ2FsbGJh
Y2siKTsKKyAgICBldmFsQW5kTG9nKCJvYmplY3RTdG9yZS5hZGQoJ215VmFsdWU0JywgJ215S2V5
NCcpLm9uZXJyb3IgPSB1bmV4cGVjdGVkRXJyb3JDYWxsYmFjayIpOworCisgICAgdmFyIG9iamVj
dFN0b3JlID0gZXZhbEFuZExvZygib2JqZWN0U3RvcmUgPSBkYi5jcmVhdGVPYmplY3RTdG9yZSgn
YXV0b0luY3JlbWVudFN0b3JlJywge2F1dG9JbmNyZW1lbnQ6IHRydWV9KSIpOworICAgIGV2YWxB
bmRMb2coIm9iamVjdFN0b3JlLmFkZCgnZm9vMScpLm9uZXJyb3IgPSB1bmV4cGVjdGVkRXJyb3JD
YWxsYmFjayIpOworICAgIGV2YWxBbmRMb2coIm9iamVjdFN0b3JlLmFkZCgnZm9vMicpLm9uZXJy
b3IgPSB1bmV4cGVjdGVkRXJyb3JDYWxsYmFjayIpOworICAgIGV2YWxBbmRMb2coIm9iamVjdFN0
b3JlLmFkZCgnZm9vMycpLm9uZXJyb3IgPSB1bmV4cGVjdGVkRXJyb3JDYWxsYmFjayIpOworICAg
IGV2YWxBbmRMb2coIm9iamVjdFN0b3JlLmFkZCgnZm9vNCcpLm9uZXJyb3IgPSB1bmV4cGVjdGVk
RXJyb3JDYWxsYmFjayIpOworCisgICAgdmFyIG9iamVjdFN0b3JlID0gZXZhbEFuZExvZygib2Jq
ZWN0U3RvcmUgPSBkYi5jcmVhdGVPYmplY3RTdG9yZSgna2V5UGF0aFN0b3JlJywge2tleVBhdGg6
ICdpZCd9KSIpOworICAgIGV2YWxBbmRMb2coIm9iamVjdFN0b3JlLmNyZWF0ZUluZGV4KCdudW1i
ZXJJbmRleCcsICdudW1iZXInKSIpOworICAgIGV2YWxBbmRMb2coIm9iamVjdFN0b3JlLmFkZCh7
bnVtYmVyOiAxLCBpZDogMX0pLm9uZXJyb3IgPSB1bmV4cGVjdGVkRXJyb3JDYWxsYmFjayIpOwor
ICAgIGV2YWxBbmRMb2coIm9iamVjdFN0b3JlLmFkZCh7bnVtYmVyOiAyLCBpZDogMn0pLm9uZXJy
b3IgPSB1bmV4cGVjdGVkRXJyb3JDYWxsYmFjayIpOworICAgIGV2YWxBbmRMb2coIm9iamVjdFN0
b3JlLmFkZCh7bnVtYmVyOiAzLCBpZDogM30pLm9uZXJyb3IgPSB1bmV4cGVjdGVkRXJyb3JDYWxs
YmFjayIpOworICAgIGV2YWxBbmRMb2coIm9iamVjdFN0b3JlLmFkZCh7bnVtYmVyOiA0LCBpZDog
NH0pLm9uZXJyb3IgPSB1bmV4cGVjdGVkRXJyb3JDYWxsYmFjayIpOworfQorCitmdW5jdGlvbiBv
cGVuQmFzaWNDdXJzb3IoKQoreworICAgIGRlYnVnKCJvcGVuQmFzaWNDdXJzb3IoKSIpOworICAg
IGV2YWxBbmRMb2coInRyYW5zID0gZGIudHJhbnNhY3Rpb24oW10sIHdlYmtpdElEQlRyYW5zYWN0
aW9uLlJFQURfV1JJVEUpIik7CisgICAgdHJhbnMub25hYm9ydCA9IHVuZXhwZWN0ZWRBYm9ydENh
bGxiYWNrOworICAgIHRyYW5zLm9uY29tcGxldGUgPSB0cmFuc2FjdGlvbkNvbXBsZXRlOworCisg
ICAga2V5UmFuZ2UgPSB3ZWJraXRJREJLZXlSYW5nZS5sb3dlckJvdW5kKCJteUtleTEiKTsKKyAg
ICByZXN1bHQgPSBldmFsQW5kTG9nKCJ0cmFucy5vYmplY3RTdG9yZSgnYmFzaWNTdG9yZScpLm9w
ZW5DdXJzb3Ioa2V5UmFuZ2UpIik7CisgICAgdmVyaWZ5UmVzdWx0KHJlc3VsdCk7CisgICAgcmVz
dWx0Lm9uc3VjY2VzcyA9IGJhc2ljVXBkYXRlQ3Vyc29yOworICAgIHJlc3VsdC5vbmVycm9yID0g
dW5leHBlY3RlZEVycm9yQ2FsbGJhY2s7CisgICAgY291bnRlciA9IDE7Cit9CisKK2Z1bmN0aW9u
IGJhc2ljVXBkYXRlQ3Vyc29yKCkKK3sKKyAgICBkZWJ1ZygiYmFzaWNVcGRhdGVDdXJzb3IoKSIp
OworICAgIGlmIChldmVudC5yZXN1bHQgPT0gbnVsbCkgeworICAgICAgICBzaG91bGRCZSgiY291
bnRlciIsICI1Iik7CisgICAgICAgIGNvdW50ZXIgPSAxOworCisgICAgICAgIHJlc3VsdCA9IGV2
YWxBbmRMb2coInRyYW5zLm9iamVjdFN0b3JlKCdiYXNpY1N0b3JlJykub3BlbkN1cnNvcihrZXlS
YW5nZSkiKTsKKyAgICAgICAgdmVyaWZ5UmVzdWx0KHJlc3VsdCk7CisgICAgICAgIHJlc3VsdC5v
bnN1Y2Nlc3MgPSBiYXNpY0NoZWNrQ3Vyc29yOworICAgICAgICByZXN1bHQub25lcnJvciA9IHVu
ZXhwZWN0ZWRFcnJvckNhbGxiYWNrOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgcmVz
dWx0ID0gZXZhbEFuZExvZygiZXZlbnQucmVzdWx0LnVwZGF0ZSgnbXlVcGRhdGVkVmFsdWUnICsg
Y291bnRlcisrKSIpOworICAgIHJlc3VsdC5vbnN1Y2Nlc3MgPSBmdW5jdGlvbigpIHsgZXZhbEFu
ZExvZygiZXZlbnQuc291cmNlLmNvbnRpbnVlKCkiKTsgfQorICAgIHJlc3VsdC5vbmVycm9yID0g
dW5leHBlY3RlZEVycm9yQ2FsbGJhY2s7Cit9CisKK2Z1bmN0aW9uIGJhc2ljQ2hlY2tDdXJzb3Io
KQoreworICAgIGRlYnVnKCJiYXNpY0NoZWNrQ3Vyc29yKCkiKTsKKyAgICBpZiAoZXZlbnQucmVz
dWx0ID09IG51bGwpIHsKKyAgICAgICAgc2hvdWxkQmUoImNvdW50ZXIiLCAiNSIpOworICAgICAg
ICBjb3VudGVyID0gMTsKKworICAgICAgICBrZXlSYW5nZSA9IHdlYmtpdElEQktleVJhbmdlLmxv
d2VyQm91bmQoMSk7CisgICAgICAgIHJlc3VsdCA9IGV2YWxBbmRMb2coInRyYW5zLm9iamVjdFN0
b3JlKCdhdXRvSW5jcmVtZW50U3RvcmUnKS5vcGVuQ3Vyc29yKGtleVJhbmdlKSIpOworICAgICAg
ICB2ZXJpZnlSZXN1bHQocmVzdWx0KTsKKyAgICAgICAgcmVzdWx0Lm9uc3VjY2VzcyA9IGF1dG9J
bmNyZW1lbnRVcGRhdGVDdXJzb3I7CisgICAgICAgIHJlc3VsdC5vbmVycm9yID0gdW5leHBlY3Rl
ZEVycm9yQ2FsbGJhY2s7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBzaG91bGRCZUVx
dWFsVG9TdHJpbmcoImV2ZW50LnJlc3VsdC5rZXkiLCAibXlLZXkiICsgY291bnRlcik7CisgICAg
c2hvdWxkQmVFcXVhbFRvU3RyaW5nKCJldmVudC5yZXN1bHQudmFsdWUiLCAibXlVcGRhdGVkVmFs
dWUiICsgY291bnRlcisrKTsKKyAgICBldmFsQW5kTG9nKCJldmVudC5yZXN1bHQuY29udGludWUo
KSIpOworfQorCitmdW5jdGlvbiBhdXRvSW5jcmVtZW50VXBkYXRlQ3Vyc29yKCkKK3sKKyAgICBk
ZWJ1ZygiYXV0b0luY3JlbWVudFVwZGF0ZUN1cnNvcigpIik7CisgICAgaWYgKGV2ZW50LnJlc3Vs
dCA9PSBudWxsKSB7CisgICAgICAgIHNob3VsZEJlKCJjb3VudGVyIiwgIjUiKTsKKyAgICAgICAg
Y291bnRlciA9IDE7CisKKyAgICAgICAgcmVzdWx0ID0gZXZhbEFuZExvZygidHJhbnMub2JqZWN0
U3RvcmUoJ2F1dG9JbmNyZW1lbnRTdG9yZScpLm9wZW5DdXJzb3Ioa2V5UmFuZ2UpIik7CisgICAg
ICAgIHZlcmlmeVJlc3VsdChyZXN1bHQpOworICAgICAgICByZXN1bHQub25zdWNjZXNzID0gYXV0
b0luY3JlbWVudENoZWNrQ3Vyc29yOworICAgICAgICByZXN1bHQub25lcnJvciA9IHVuZXhwZWN0
ZWRFcnJvckNhbGxiYWNrOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgcmVzdWx0ID0g
ZXZhbEFuZExvZygiZXZlbnQucmVzdWx0LnVwZGF0ZSgnbXlVcGRhdGVkRm9vJyArIGNvdW50ZXIr
KykiKTsKKyAgICByZXN1bHQub25zdWNjZXNzID0gZnVuY3Rpb24oKSB7IGV2YWxBbmRMb2coImV2
ZW50LnNvdXJjZS5jb250aW51ZSgpIik7IH0KKyAgICByZXN1bHQub25lcnJvciA9IHVuZXhwZWN0
ZWRFcnJvckNhbGxiYWNrOworfQorCitmdW5jdGlvbiBhdXRvSW5jcmVtZW50Q2hlY2tDdXJzb3Io
KQoreworICAgIGRlYnVnKCJhdXRvSW5jcmVtZW50Q2hlY2tDdXJzb3IoKSIpOworICAgIGlmIChl
dmVudC5yZXN1bHQgPT0gbnVsbCkgeworICAgICAgICBzaG91bGRCZSgiY291bnRlciIsICI1Iik7
CisgICAgICAgIGNvdW50ZXIgPSAxOworCisgICAgICAgIGtleVJhbmdlID0gd2Via2l0SURCS2V5
UmFuZ2UubG93ZXJCb3VuZCgxKTsKKyAgICAgICAgcmVzdWx0ID0gZXZhbEFuZExvZygidHJhbnMu
b2JqZWN0U3RvcmUoJ2tleVBhdGhTdG9yZScpLm9wZW5DdXJzb3Ioa2V5UmFuZ2UpIik7CisgICAg
ICAgIHZlcmlmeVJlc3VsdChyZXN1bHQpOworICAgICAgICByZXN1bHQub25zdWNjZXNzID0ga2V5
UGF0aFVwZGF0ZUN1cnNvcjsKKyAgICAgICAgcmVzdWx0Lm9uZXJyb3IgPSB1bmV4cGVjdGVkRXJy
b3JDYWxsYmFjazsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIHNob3VsZEJlKCJldmVu
dC5yZXN1bHQua2V5IiwgImNvdW50ZXIiKTsKKyAgICBzaG91bGRCZUVxdWFsVG9TdHJpbmcoImV2
ZW50LnJlc3VsdC52YWx1ZSIsICJteVVwZGF0ZWRGb28iICsgY291bnRlcisrKTsKKyAgICBldmFs
QW5kTG9nKCJldmVudC5yZXN1bHQuY29udGludWUoKSIpOworfQorCitmdW5jdGlvbiBrZXlQYXRo
VXBkYXRlQ3Vyc29yKCkKK3sKKyAgICBkZWJ1Zygia2V5UGF0aFVwZGF0ZUN1cnNvcigpIik7Cisg
ICAgaWYgKGV2ZW50LnJlc3VsdCA9PSBudWxsKSB7CisgICAgICAgIHNob3VsZEJlKCJjb3VudGVy
IiwgIjUiKTsKKyAgICAgICAgY291bnRlciA9IDE7CisKKyAgICAgICAgcmVzdWx0ID0gZXZhbEFu
ZExvZygidHJhbnMub2JqZWN0U3RvcmUoJ2tleVBhdGhTdG9yZScpLm9wZW5DdXJzb3Ioa2V5UmFu
Z2UpIik7CisgICAgICAgIHZlcmlmeVJlc3VsdChyZXN1bHQpOworICAgICAgICByZXN1bHQub25z
dWNjZXNzID0ga2V5UGF0aENoZWNrQ3Vyc29yOworICAgICAgICByZXN1bHQub25lcnJvciA9IHVu
ZXhwZWN0ZWRFcnJvckNhbGxiYWNrOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgcmVz
dWx0ID0gZXZhbEFuZExvZygiZXZlbnQucmVzdWx0LnVwZGF0ZSh7aWQ6IDEwMCArIGNvdW50ZXIs
IG51bWJlcjogMTAwICsgY291bnRlcn0pIik7CisgICAgcmVzdWx0Lm9uc3VjY2VzcyA9IHVuZXhw
ZWN0ZWRTdWNjZXNzQ2FsbGJhY2s7CisgICAgcmVzdWx0Lm9uZXJyb3IgPSBmdW5jdGlvbigpIHsK
KyAgICAgICAgdmVyaWZ5RXJyb3JFdmVudChldmVudCk7CisgICAgICAgIHNob3VsZEJlKCJldmVu
dC5jb2RlIiwgIndlYmtpdElEQkRhdGFiYXNlRXhjZXB0aW9uLkRBVEFfRVJSIik7CisKKyAgICAg
ICAgcmVzdWx0ID0gZXZhbEFuZExvZygiZXZlbnQuc291cmNlLnVwZGF0ZSh7aWQ6IGNvdW50ZXIs
IG51bWJlcjogMTAwICsgY291bnRlcisrfSkiKTsKKyAgICAgICAgcmVzdWx0Lm9uc3VjY2VzcyA9
IGZ1bmN0aW9uKCkgeyBldmFsQW5kTG9nKCJldmVudC5zb3VyY2UuY29udGludWUoKSIpIH07Cisg
ICAgICAgIHJlc3VsdC5vbmVycm9yID0gdW5leHBlY3RlZEVycm9yQ2FsbGJhY2s7CisgICAgfQor
fQorCitmdW5jdGlvbiBrZXlQYXRoQ2hlY2tDdXJzb3IoKQoreworICAgIGRlYnVnKCJrZXlQYXRo
Q2hlY2tDdXJzb3IoKSIpOworICAgIGlmIChldmVudC5yZXN1bHQgPT0gbnVsbCkgeworICAgICAg
ICBzaG91bGRCZSgiY291bnRlciIsICI1Iik7CisgICAgICAgIGNvdW50ZXIgPSAxOworCisgICAg
ICAgIGtleVJhbmdlID0gd2Via2l0SURCS2V5UmFuZ2UubG93ZXJCb3VuZCgxMDEpOworICAgICAg
ICByZXN1bHQgPSBldmFsQW5kTG9nKCJ0cmFucy5vYmplY3RTdG9yZSgna2V5UGF0aFN0b3JlJyku
aW5kZXgoJ251bWJlckluZGV4Jykub3BlbktleUN1cnNvcihrZXlSYW5nZSkiKTsKKyAgICAgICAg
cmVzdWx0Lm9uc3VjY2VzcyA9IGtleUN1cnNvcjsKKyAgICAgICAgcmVzdWx0Lm9uZXJyb3IgPSB1
bmV4cGVjdGVkRXJyb3JDYWxsYmFjazsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIHNo
b3VsZEJlKCJldmVudC5yZXN1bHQua2V5IiwgImNvdW50ZXIiKTsKKyAgICBzaG91bGRCZSgiZXZl
bnQucmVzdWx0LnZhbHVlLmlkIiwgImNvdW50ZXIiKTsKKyAgICBzaG91bGRCZSgiZXZlbnQucmVz
dWx0LnZhbHVlLm51bWJlciIsIChjb3VudGVyICsgMTAwKS50b1N0cmluZygpKTsKKyAgICBjb3Vu
dGVyKys7CisgICAgZXZhbEFuZExvZygiZXZlbnQucmVzdWx0LmNvbnRpbnVlKCkiKTsKK30KKwor
ZnVuY3Rpb24ga2V5Q3Vyc29yKCkKK3sKKyAgICBkZWJ1Zygia2V5Q3Vyc29yKCkiKTsKKyAgICBp
ZiAoZXZlbnQucmVzdWx0ID09IG51bGwpIHsKKyAgICAgICAgc2hvdWxkQmUoImNvdW50ZXIiLCAi
NSIpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgc2hvdWxkQmUoImV2ZW50LnJlc3Vs
dC5rZXkiLCAiY291bnRlciArIDEwMCIpOworICAgIHNob3VsZEJlKCJldmVudC5yZXN1bHQudmFs
dWUiLCAiY291bnRlciIpOworCisgICAgdHJ5IHsKKyAgICAgICAgZGVidWcoImV2ZW50LnJlc3Vs
dC51cGRhdGUoe2lkOiBjb3VudGVyLCBudW1iZXI6IGNvdW50ZXIgKyAyMDB9KSIpOworICAgICAg
ICBldmVudC5yZXN1bHQudXBkYXRlKHtpZDogY291bnRlciwgbnVtYmVyOiBjb3VudGVyICsgMjAw
fSk7CisgICAgICAgIHRlc3RGYWlsZWQoIkV4cGVjdGVkIGV4Y2VwdGlvbi4iKTsKKyAgICB9IGNh
dGNoIChlKSB7CisgICAgICAgIGNvZGUgPSBlLmNvZGU7CisgICAgICAgIHNob3VsZEJlKCJjb2Rl
IiwgIndlYmtpdElEQkRhdGFiYXNlRXhjZXB0aW9uLk5PVF9BTExPV0VEX0VSUiIpOworICAgIH0K
KworICAgIGNvdW50ZXIrKzsKKyAgICBldmVudC5yZXN1bHQuY29udGludWUoKTsKK30KKworZnVu
Y3Rpb24gdHJhbnNhY3Rpb25Db21wbGV0ZSgpCit7CisgICAgZGVidWcoInRyYW5zYWN0aW9uQ29t
cGxldGUoKSIpOworICAgIGRvbmUoKTsKK30KKwordmFyIHN1Y2Nlc3NmdWxseVBhcnNlZCA9IHRy
dWU7CisKKzwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvQ2hhbmdlTG9nIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCmluZGV4IDRmNmFmNjFl
ODUzYTNiY2QxZmVmMjEwODE0YTAyZDlhOWE3YzVmODYuLjI0MzZmNzA0NDIwODg0NjBjN2EzMmVm
YzQxZmEwZTUzMzJmYWIyYTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwor
KysgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwzMiBAQAorMjAxMS0wMi0w
MSAgSGFucyBXZW5uYm9yZyAgPGhhbnNAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEluZGV4ZWREQjogSW1wbGVtZW50IHN1cHBv
cnQgZm9yIGN1cnNvciB1cGRhdGVzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD01MzQyMQorCisgICAgICAgIEltcGxlbWVudCBzdXBwb3J0IGZvciBjdXJz
b3IgdXBkYXRlcyB1c2luZyB0aGUgc2FtZSBwYXR0ZXJuIGFzIGN1cnNvcgorICAgICAgICBkZWxl
dGVzOiBmb3J3YXJkIHRoZSBjYWxscyB0byB0aGUgSURCT2JqZWN0U3RvcmVCYWNrZW5kOjpwdXQo
KS4KKyAgICAgICAgVGhlIHB1dCgpIGZ1bmN0aW9uJ3Mgc2lnbmF0dXJlIG5lZWRzIHRvIGJlIGNo
YW5nZWQgdG8gYWxsb3cgZm9yIGEKKyAgICAgICAgImN1cnNvciB1cGRhdGUgbW9kZSIuIFRoaXMg
bWFrZXMgdGhlIHNpZ25hdHVyZSBtb3JlIGNsZWFyIGFueXdheSwKKyAgICAgICAgc2luY2UgaXQg
cmVwbGFjZXMgdGhlIGJvb2xlYW4gcGFyYW1ldGVyLgorCisgICAgICAgIFRlc3Q6IHN0b3JhZ2Uv
aW5kZXhlZGRiL2N1cnNvci11cGRhdGUuaHRtbAorCisgICAgICAgICogc3RvcmFnZS9JREJDdXJz
b3IuaWRsOgorICAgICAgICAqIHN0b3JhZ2UvSURCQ3Vyc29yQmFja2VuZEltcGwuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6SURCQ3Vyc29yQmFja2VuZEltcGw6OmtleSk6CisgICAgICAgIChXZWJD
b3JlOjpJREJDdXJzb3JCYWNrZW5kSW1wbDo6dXBkYXRlKToKKyAgICAgICAgKiBzdG9yYWdlL0lE
QkN1cnNvckJhY2tlbmRJbXBsLmg6CisgICAgICAgICogc3RvcmFnZS9JREJPYmplY3RTdG9yZS5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpJREJPYmplY3RTdG9yZTo6YWRkKToKKyAgICAgICAgKFdl
YkNvcmU6OklEQk9iamVjdFN0b3JlOjpwdXQpOgorICAgICAgICAqIHN0b3JhZ2UvSURCT2JqZWN0
U3RvcmVCYWNrZW5kSW1wbC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJREJPYmplY3RTdG9yZUJh
Y2tlbmRJbXBsOjpwdXQpOgorICAgICAgICAoV2ViQ29yZTo6SURCT2JqZWN0U3RvcmVCYWNrZW5k
SW1wbDo6cHV0SW50ZXJuYWwpOgorICAgICAgICAqIHN0b3JhZ2UvSURCT2JqZWN0U3RvcmVCYWNr
ZW5kSW1wbC5oOgorICAgICAgICAqIHN0b3JhZ2UvSURCT2JqZWN0U3RvcmVCYWNrZW5kSW50ZXJm
YWNlLmg6CisKIDIwMTEtMDItMDEgIE1hcmlvIFNhbmNoZXogUHJhZGEgIDxtc2FuY2hlekBpZ2Fs
aWEuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IE1hcnRpbiBSb2JpbnNvbi4KZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCQ3Vyc29yLmlkbCBiL1NvdXJjZS9XZWJDb3Jl
L3N0b3JhZ2UvSURCQ3Vyc29yLmlkbAppbmRleCAxMmQwYmFmN2Y5MDU3MGQ3MmQ5ZGVhZjg3NDg5
MjE3ZTM4NjZkMjc0Li4yZTE0NTlmNDkxYjI0NzFiNTljYWE2NGNhMDUyNDMwMzA2MDM5YjU2IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQkN1cnNvci5pZGwKKysrIGIvU291
cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJDdXJzb3IuaWRsCkBAIC0zNyw5ICszNyw4IEBAIG1vZHVs
ZSBzdG9yYWdlIHsKICAgICAgICAgcmVhZG9ubHkgYXR0cmlidXRlIElEQktleSBrZXk7CiAgICAg
ICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBJREJBbnkgdmFsdWU7CiAKLSAgICAgICAgLy8gRklYTUU6
IEltcGxlbWVudC4KLSAgICAgICAgLy9bQ2FsbFdpdGg9U2NyaXB0RXhlY3V0aW9uQ29udGV4dF0g
SURCUmVxdWVzdCB1cGRhdGUoaW4gU2VyaWFsaXplZFNjcmlwdFZhbHVlIHZhbHVlKQotICAgICAg
ICAvLyAgICByYWlzZXMgKElEQkRhdGFiYXNlRXhjZXB0aW9uKTsKKyAgICAgICAgW0NhbGxXaXRo
PVNjcmlwdEV4ZWN1dGlvbkNvbnRleHRdIElEQlJlcXVlc3QgdXBkYXRlKGluIFNlcmlhbGl6ZWRT
Y3JpcHRWYWx1ZSB2YWx1ZSkKKyAgICAgICAgICAgIHJhaXNlcyAoSURCRGF0YWJhc2VFeGNlcHRp
b24pOwogICAgICAgICBbSW1wbGVtZW50YXRpb25GdW5jdGlvbj1jb250aW51ZUZ1bmN0aW9uXSB2
b2lkIGNvbnRpbnVlKGluIFtPcHRpb25hbF0gSURCS2V5IGtleSkKICAgICAgICAgICAgIHJhaXNl
cyAoSURCRGF0YWJhc2VFeGNlcHRpb24pOwogICAgICAgICBbQ2FsbFdpdGg9U2NyaXB0RXhlY3V0
aW9uQ29udGV4dCwgSW1wbGVtZW50YXRpb25GdW5jdGlvbj1kZWxldGVGdW5jdGlvbl0gSURCUmVx
dWVzdCBkZWxldGUoKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJDdXJz
b3JCYWNrZW5kSW1wbC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQkN1cnNvckJhY2tl
bmRJbXBsLmNwcAppbmRleCA0MTM1MTAxMzA4MDVjNGRmMjMzZDlhOTVjOGJiNjNjZjUyMDM0MWMx
Li5hYjU2M2RiNmVjNmQxNjNiMzViOTIwYWZlMGJkYzgyMjQ1NzA3N2I3IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQkN1cnNvckJhY2tlbmRJbXBsLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9zdG9yYWdlL0lEQkN1cnNvckJhY2tlbmRJbXBsLmNwcApAQCAtNjgsNyArNjgs
NiBAQCB1bnNpZ25lZCBzaG9ydCBJREJDdXJzb3JCYWNrZW5kSW1wbDo6ZGlyZWN0aW9uKCkgY29u
c3QKIAogUGFzc1JlZlB0cjxJREJLZXk+IElEQkN1cnNvckJhY2tlbmRJbXBsOjprZXkoKSBjb25z
dAogewotICAgIAogICAgIHJldHVybiBtX2N1cnJlbnRLZXk7CiB9CiAKQEAgLTgxLDQxICs4MCwx
MyBAQCBQYXNzUmVmUHRyPElEQkFueT4gSURCQ3Vyc29yQmFja2VuZEltcGw6OnZhbHVlKCkgY29u
c3QKIAogdm9pZCBJREJDdXJzb3JCYWNrZW5kSW1wbDo6dXBkYXRlKFBhc3NSZWZQdHI8U2VyaWFs
aXplZFNjcmlwdFZhbHVlPiBwcnBWYWx1ZSwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+IHBycENh
bGxiYWNrcywgRXhjZXB0aW9uQ29kZSYgZWMpCiB7Ci0gICAgUmVmUHRyPElEQkN1cnNvckJhY2tl
bmRJbXBsPiBjdXJzb3IgPSB0aGlzOwotICAgIFJlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+
IHZhbHVlID0gcHJwVmFsdWU7Ci0gICAgUmVmUHRyPElEQkNhbGxiYWNrcz4gY2FsbGJhY2tzID0g
cHJwQ2FsbGJhY2tzOwotICAgIC8vIEZJWE1FOiBUaHJvdyBEQVRBX0VSUiBhbmQgU0VSSUFMX0VS
UiB3aGVuIGFwcHJvcHJpYXRlLgotICAgIGlmICghbV90cmFuc2FjdGlvbi0+c2NoZWR1bGVUYXNr
KGNyZWF0ZUNhbGxiYWNrVGFzaygmSURCQ3Vyc29yQmFja2VuZEltcGw6OnVwZGF0ZUludGVybmFs
LCBjdXJzb3IsIHZhbHVlLCBjYWxsYmFja3MpKSkKKyAgICBpZiAoIW1fcXVlcnkgfHwgbV9jdXJy
ZW50SWQgPT0gSW52YWxpZElkIHx8ICFtX2lzU2VyaWFsaXplZFNjcmlwdFZhbHVlQ3Vyc29yKSB7
CiAgICAgICAgIGVjID0gSURCRGF0YWJhc2VFeGNlcHRpb246Ok5PVF9BTExPV0VEX0VSUjsKLX0K
LQotdm9pZCBJREJDdXJzb3JCYWNrZW5kSW1wbDo6dXBkYXRlSW50ZXJuYWwoU2NyaXB0RXhlY3V0
aW9uQ29udGV4dCosIFBhc3NSZWZQdHI8SURCQ3Vyc29yQmFja2VuZEltcGw+IGN1cnNvciwgUGFz
c1JlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IHBycFZhbHVlLCBQYXNzUmVmUHRyPElEQkNh
bGxiYWNrcz4gY2FsbGJhY2tzKQotewotICAgIC8vIEZJWE1FOiBUaGlzIG1ldGhvZCBkb2Vzbid0
IHVwZGF0ZSBpbmRleGVzLiBJdCdzIGRhbmdlcm91cyB0byBjYWxsIGluIGl0cyBjdXJyZW50IHN0
YXRlLgotICAgIGNhbGxiYWNrcy0+b25FcnJvcihJREJEYXRhYmFzZUVycm9yOjpjcmVhdGUoSURC
RGF0YWJhc2VFeGNlcHRpb246OlVOS05PV05fRVJSLCAiTm90IGltcGxlbWVudGVkLiIpKTsKLSAg
ICByZXR1cm47Ci0KLSAgICBSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiB2YWx1ZSA9IHBy
cFZhbHVlOwotCi0gICAgaWYgKCFjdXJzb3ItPm1fcXVlcnkgfHwgY3Vyc29yLT5tX2N1cnJlbnRJ
ZCA9PSBJbnZhbGlkSWQpIHsKLSAgICAgICAgLy8gRklYTUU6IFVzZSB0aGUgcHJvcGVyIGVycm9y
IGNvZGUgd2hlbiBpdCdzIHNwZWNjZWQuCi0gICAgICAgIGNhbGxiYWNrcy0+b25FcnJvcihJREJE
YXRhYmFzZUVycm9yOjpjcmVhdGUoSURCRGF0YWJhc2VFeGNlcHRpb246OlVOS05PV05fRVJSLCAi
T3BlcmF0aW9uIG5vdCBwb3NzaWJsZS4iKSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAg
ICBTdHJpbmcgc3FsID0gIlVQREFURSBPYmplY3RTdG9yZURhdGEgU0VUIHZhbHVlID0gPyBXSEVS
RSBpZCA9ID8iOwotICAgIFNRTGl0ZVN0YXRlbWVudCB1cGRhdGVRdWVyeShjdXJzb3ItPmRhdGFi
YXNlKCksIHNxbCk7Ci0gICAgCi0gICAgYm9vbCBvayA9IHVwZGF0ZVF1ZXJ5LnByZXBhcmUoKSA9
PSBTUUxSZXN1bHRPazsKLSAgICBBU1NFUlRfVU5VU0VEKG9rLCBvayk7IC8vIEZJWE1FOiBCZXR0
ZXIgZXJyb3IgaGFuZGxpbmcuCi0gICAgdXBkYXRlUXVlcnkuYmluZFRleHQoMSwgdmFsdWUtPnRv
V2lyZVN0cmluZygpKTsKLSAgICB1cGRhdGVRdWVyeS5iaW5kSW50NjQoMiwgY3Vyc29yLT5tX2N1
cnJlbnRJZCk7Ci0gICAgb2sgPSB1cGRhdGVRdWVyeS5zdGVwKCkgPT0gU1FMUmVzdWx0RG9uZTsK
LSAgICBBU1NFUlRfVU5VU0VEKG9rLCBvayk7IC8vIEZJWE1FOiBCZXR0ZXIgZXJyb3IgaGFuZGxp
bmcuCi0KLSAgICBpZiAoY3Vyc29yLT5tX2lzU2VyaWFsaXplZFNjcmlwdFZhbHVlQ3Vyc29yKQot
ICAgICAgICBjdXJzb3ItPm1fY3VycmVudFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZSA9IHZhbHVlLnJl
bGVhc2UoKTsKLSAgICBjYWxsYmFja3MtPm9uU3VjY2VzcyhTZXJpYWxpemVkU2NyaXB0VmFsdWU6
Om51bGxWYWx1ZSgpKTsKKyAgICBSZWZQdHI8SURCS2V5PiBrZXkgPSBtX2N1cnJlbnRJREJLZXlW
YWx1ZSA/IG1fY3VycmVudElEQktleVZhbHVlIDogbV9jdXJyZW50S2V5OworICAgIG1fb2JqZWN0
U3RvcmUtPnB1dChwcnBWYWx1ZSwga2V5LnJlbGVhc2UoKSwgSURCT2JqZWN0U3RvcmVCYWNrZW5k
SW50ZXJmYWNlOjpDdXJzb3JVcGRhdGUsIHBycENhbGxiYWNrcywgbV90cmFuc2FjdGlvbi5nZXQo
KSwgZWMpOwogfQogCiB2b2lkIElEQkN1cnNvckJhY2tlbmRJbXBsOjpjb250aW51ZUZ1bmN0aW9u
KFBhc3NSZWZQdHI8SURCS2V5PiBwcnBLZXksIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiBwcnBD
YWxsYmFja3MsIEV4Y2VwdGlvbkNvZGUmIGVjKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
c3RvcmFnZS9JREJDdXJzb3JCYWNrZW5kSW1wbC5oIGIvU291cmNlL1dlYkNvcmUvc3RvcmFnZS9J
REJDdXJzb3JCYWNrZW5kSW1wbC5oCmluZGV4IGUzYTg5OTUwODZkOGZiMTk5ZjExMjQ4MmIwY2I1
MjQzMWQyZjE5OTAuLjkxOWYxNTM3NDJlMjc4OTFkOGYzZGM1NzBlNTkyY2VmZmRhMDhmYTIgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCQ3Vyc29yQmFja2VuZEltcGwuaAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQkN1cnNvckJhY2tlbmRJbXBsLmgKQEAgLTY4
LDcgKzY4LDYgQEAgcHJpdmF0ZToKICAgICB2b2lkIGxvYWRDdXJyZW50Um93KCk7CiAgICAgU1FM
aXRlRGF0YWJhc2UmIGRhdGFiYXNlKCkgY29uc3Q7CiAKLSAgICBzdGF0aWMgdm9pZCB1cGRhdGVJ
bnRlcm5hbChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgUGFzc1JlZlB0cjxJREJDdXJzb3JCYWNr
ZW5kSW1wbD4sIFBhc3NSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiwgUGFzc1JlZlB0cjxJ
REJDYWxsYmFja3M+KTsKICAgICBzdGF0aWMgdm9pZCBjb250aW51ZUZ1bmN0aW9uSW50ZXJuYWwo
U2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFBhc3NSZWZQdHI8SURCQ3Vyc29yQmFja2VuZEltcGw+
LCBQYXNzUmVmUHRyPElEQktleT4sIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPik7CiAKICAgICBz
dGF0aWMgY29uc3QgaW50NjRfdCBJbnZhbGlkSWQgPSAtMTsKQEAgLTgwLDExICs3OSwxNSBAQCBw
cml2YXRlOgogICAgIE93blB0cjxTUUxpdGVTdGF0ZW1lbnQ+IG1fcXVlcnk7CiAgICAgYm9vbCBt
X2lzU2VyaWFsaXplZFNjcmlwdFZhbHVlQ3Vyc29yOwogICAgIGludDY0X3QgbV9jdXJyZW50SWQ7
CisKKyAgICAvLyBUaGUga2V5IGluIHRoZSBvYmplY3RTdG9yZSBvciBpbmRleCB0aGF0IHRoaXMg
Y3Vyc29yIGl0ZXJhdGVzIG92ZXIuCiAgICAgUmVmUHRyPElEQktleT4gbV9jdXJyZW50S2V5Owog
CiAgICAgLy8gbV9pc1NlcmlhbGl6ZWRTY3JpcHRWYWx1ZUN1cnNvciB3aWxsIG9ubHkgYmUgYXZh
aWxhYmxlIGZvciBvYmplY3QgY3Vyc29ycy4KICAgICBSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZh
bHVlPiBtX2N1cnJlbnRTZXJpYWxpemVkU2NyaXB0VmFsdWU7CisKICAgICAvLyBGSVhNRTogbWFr
ZSB0aGUgcHJpbWFyeSBrZXkgYXZhaWxhYmxlIHZpYSBzY3JpcHQgZm9yIGFsbCB0eXBlcyBvZiBj
dXJzb3JzLgorICAgIC8vIEZvciBjdXJzb3JzIG9uIGluZGljZXMsIHRoaXMgaXMgdGhlIGtleSBp
biB0aGUgb2JqZWN0c3RvcmUgdGhhdCBjb3JyZXNwb25kcyB0byB0aGUgY3VycmVudCBlbnRyeSBp
biB0aGUgaW5kZXguCiAgICAgUmVmUHRyPElEQktleT4gbV9jdXJyZW50SURCS2V5VmFsdWU7CiAK
ICAgICBSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlPiBtX3RyYW5zYWN0aW9u
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJPYmplY3RTdG9yZS5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQk9iamVjdFN0b3JlLmNwcAppbmRleCBkYjMzYTRl
OTRiZjk3YmFmMzVkOWFjOWNiMDNhMTNhOGUzYjQxNjM2Li5hYzg2MGEyNTU4YjRlMzI5ZmFkOWQ5
MGJkYjQ4YTEwZTkyNWQxZGM0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lE
Qk9iamVjdFN0b3JlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQk9iamVjdFN0
b3JlLmNwcApAQCAtNzksNyArNzksNyBAQCBQYXNzUmVmUHRyPElEQlJlcXVlc3Q+IElEQk9iamVj
dFN0b3JlOjpnZXQoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwgUGFzcwogUGFzc1Jl
ZlB0cjxJREJSZXF1ZXN0PiBJREJPYmplY3RTdG9yZTo6YWRkKFNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQqIGNvbnRleHQsIFBhc3NSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiB2YWx1ZSwgUGFz
c1JlZlB0cjxJREJLZXk+IGtleSwgRXhjZXB0aW9uQ29kZSYgZWMpCiB7CiAgICAgUmVmUHRyPElE
QlJlcXVlc3Q+IHJlcXVlc3QgPSBJREJSZXF1ZXN0OjpjcmVhdGUoY29udGV4dCwgSURCQW55Ojpj
cmVhdGUodGhpcyksIG1fdHJhbnNhY3Rpb24uZ2V0KCkpOwotICAgIG1fb2JqZWN0U3RvcmUtPnB1
dCh2YWx1ZSwga2V5LCB0cnVlLCByZXF1ZXN0LCBtX3RyYW5zYWN0aW9uLmdldCgpLCBlYyk7Cisg
ICAgbV9vYmplY3RTdG9yZS0+cHV0KHZhbHVlLCBrZXksIElEQk9iamVjdFN0b3JlQmFja2VuZElu
dGVyZmFjZTo6QWRkT25seSwgcmVxdWVzdCwgbV90cmFuc2FjdGlvbi5nZXQoKSwgZWMpOwogICAg
IGlmIChlYykKICAgICAgICAgcmV0dXJuIDA7CiAgICAgcmV0dXJuIHJlcXVlc3Q7CkBAIC04OCw3
ICs4OCw3IEBAIFBhc3NSZWZQdHI8SURCUmVxdWVzdD4gSURCT2JqZWN0U3RvcmU6OmFkZChTY3Jp
cHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBQYXNzCiBQYXNzUmVmUHRyPElEQlJlcXVlc3Q+
IElEQk9iamVjdFN0b3JlOjpwdXQoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwgUGFz
c1JlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IHZhbHVlLCBQYXNzUmVmUHRyPElEQktleT4g
a2V5LCBFeGNlcHRpb25Db2RlJiBlYykKIHsKICAgICBSZWZQdHI8SURCUmVxdWVzdD4gcmVxdWVz
dCA9IElEQlJlcXVlc3Q6OmNyZWF0ZShjb250ZXh0LCBJREJBbnk6OmNyZWF0ZSh0aGlzKSwgbV90
cmFuc2FjdGlvbi5nZXQoKSk7Ci0gICAgbV9vYmplY3RTdG9yZS0+cHV0KHZhbHVlLCBrZXksIGZh
bHNlLCByZXF1ZXN0LCBtX3RyYW5zYWN0aW9uLmdldCgpLCBlYyk7CisgICAgbV9vYmplY3RTdG9y
ZS0+cHV0KHZhbHVlLCBrZXksIElEQk9iamVjdFN0b3JlQmFja2VuZEludGVyZmFjZTo6QWRkT3JV
cGRhdGUsIHJlcXVlc3QsIG1fdHJhbnNhY3Rpb24uZ2V0KCksIGVjKTsKICAgICBpZiAoZWMpCiAg
ICAgICAgIHJldHVybiAwOwogICAgIHJldHVybiByZXF1ZXN0OwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvc3RvcmFnZS9JREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3N0b3JhZ2UvSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbC5jcHAKaW5kZXggY2E0N2U2
NGQ1ZDJiMzZlZWU3MWEzMjI2ZTRmODA4NjQ0NjQyNzRiMy4uMjEzZjVkMDlkYTg0ZDllMjQ1OTA0
NTgyOTdkYjk5Mjk2OGFmOWJjZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3RvcmFnZS9J
REJPYmplY3RTdG9yZUJhY2tlbmRJbXBsLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdl
L0lEQk9iamVjdFN0b3JlQmFja2VuZEltcGwuY3BwCkBAIC0xNzksNyArMTc5LDcgQEAgc3RhdGlj
IGJvb2wgcHV0SW5kZXhEYXRhKFNRTGl0ZURhdGFiYXNlJiBkYiwgSURCS2V5KiBrZXksIGludDY0
X3QgaW5kZXhJZCwgaW50NjQKICAgICByZXR1cm4gcHV0UXVlcnkuc3RlcCgpID09IFNRTFJlc3Vs
dERvbmU7CiB9CiAKLXZvaWQgSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6cHV0KFBhc3NSZWZQ
dHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiBwcnBWYWx1ZSwgUGFzc1JlZlB0cjxJREJLZXk+IHBy
cEtleSwgYm9vbCBhZGRPbmx5LCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4gcHJwQ2FsbGJhY2tz
LCBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UqIHRyYW5zYWN0aW9uUHRyLCBFeGNlcHRp
b25Db2RlJiBlYykKK3ZvaWQgSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6cHV0KFBhc3NSZWZQ
dHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiBwcnBWYWx1ZSwgUGFzc1JlZlB0cjxJREJLZXk+IHBy
cEtleSwgUHV0TW9kZSBwdXRNb2RlLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4gcHJwQ2FsbGJh
Y2tzLCBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UqIHRyYW5zYWN0aW9uUHRyLCBFeGNl
cHRpb25Db2RlJiBlYykKIHsKICAgICBpZiAodHJhbnNhY3Rpb25QdHItPm1vZGUoKSA9PSBJREJU
cmFuc2FjdGlvbjo6UkVBRF9PTkxZKSB7CiAgICAgICAgIGVjID0gSURCRGF0YWJhc2VFeGNlcHRp
b246OlJFQURfT05MWV9FUlI7CkBAIC0xOTMsMjYgKzE5MywyOSBAQCB2b2lkIElEQk9iamVjdFN0
b3JlQmFja2VuZEltcGw6OnB1dChQYXNzUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4gcHJw
VmFsdWUsCiAgICAgUmVmUHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZT4gdHJhbnNh
Y3Rpb24gPSB0cmFuc2FjdGlvblB0cjsKICAgICAvLyBGSVhNRTogVGhpcyBzaG91bGQgdGhyb3cg
YSBTRVJJQUxfRVJSIG9uIHN0cnVjdHVyZWQgY2xvbmUgcHJvYmxlbXMuCiAgICAgLy8gRklYTUU6
IFRoaXMgc2hvdWxkIHRocm93IGEgREFUQV9FUlIgd2hlbiB0aGUgd3Jvbmcga2V5L2tleVBhdGgg
ZGF0YSBpcyBzdXBwbGllZC4KLSAgICBpZiAoIXRyYW5zYWN0aW9uLT5zY2hlZHVsZVRhc2soY3Jl
YXRlQ2FsbGJhY2tUYXNrKCZJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpwdXRJbnRlcm5hbCwg
b2JqZWN0U3RvcmUsIHZhbHVlLCBrZXksIGFkZE9ubHksIGNhbGxiYWNrcywgdHJhbnNhY3Rpb24p
KSkKKyAgICBpZiAoIXRyYW5zYWN0aW9uLT5zY2hlZHVsZVRhc2soY3JlYXRlQ2FsbGJhY2tUYXNr
KCZJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpwdXRJbnRlcm5hbCwgb2JqZWN0U3RvcmUsIHZh
bHVlLCBrZXksIHB1dE1vZGUsIGNhbGxiYWNrcywgdHJhbnNhY3Rpb24pKSkKICAgICAgICAgZWMg
PSBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6Tk9UX0FMTE9XRURfRVJSOwogfQogCi12b2lkIElEQk9i
amVjdFN0b3JlQmFja2VuZEltcGw6OnB1dEludGVybmFsKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQq
LCBQYXNzUmVmUHRyPElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw+IG9iamVjdFN0b3JlLCBQYXNz
UmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4gcHJwVmFsdWUsIFBhc3NSZWZQdHI8SURCS2V5
PiBwcnBLZXksIGJvb2wgYWRkT25seSwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+IGNhbGxiYWNr
cywgUGFzc1JlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2U+IHRyYW5zYWN0aW9u
KQordm9pZCBJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpwdXRJbnRlcm5hbChTY3JpcHRFeGVj
dXRpb25Db250ZXh0KiwgUGFzc1JlZlB0cjxJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsPiBvYmpl
Y3RTdG9yZSwgUGFzc1JlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IHBycFZhbHVlLCBQYXNz
UmVmUHRyPElEQktleT4gcHJwS2V5LCBQdXRNb2RlIHB1dE1vZGUsIFBhc3NSZWZQdHI8SURCQ2Fs
bGJhY2tzPiBjYWxsYmFja3MsIFBhc3NSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJm
YWNlPiB0cmFuc2FjdGlvbikKIHsKICAgICBSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiB2
YWx1ZSA9IHBycFZhbHVlOwogICAgIFJlZlB0cjxJREJLZXk+IGtleSA9IHBycEtleTsKIAotICAg
IGlmICghb2JqZWN0U3RvcmUtPm1fa2V5UGF0aC5pc051bGwoKSAmJiBrZXkpIHsKKyAgICBpZiAo
cHV0TW9kZSA9PSBDdXJzb3JVcGRhdGUpCisgICAgICAgIEFTU0VSVChrZXkpOworCisgICAgaWYg
KCFvYmplY3RTdG9yZS0+bV9rZXlQYXRoLmlzTnVsbCgpICYmIGtleSAmJiBwdXRNb2RlICE9IEN1
cnNvclVwZGF0ZSkgewogICAgICAgICBjYWxsYmFja3MtPm9uRXJyb3IoSURCRGF0YWJhc2VFcnJv
cjo6Y3JlYXRlKElEQkRhdGFiYXNlRXhjZXB0aW9uOjpEQVRBX0VSUiwgIkEga2V5IHdhcyBzdXBw
bGllZCBmb3IgYW4gb2JqZWN0U3RvcmUgdGhhdCBoYXMgYSBrZXlQYXRoLiIpKTsKICAgICAgICAg
cmV0dXJuOwogICAgIH0KIAotICAgIGlmIChvYmplY3RTdG9yZS0+YXV0b0luY3JlbWVudCgpICYm
IGtleSkgeworICAgIGlmIChvYmplY3RTdG9yZS0+YXV0b0luY3JlbWVudCgpICYmIGtleSAmJiBw
dXRNb2RlICE9IEN1cnNvclVwZGF0ZSkgewogICAgICAgICBjYWxsYmFja3MtPm9uRXJyb3IoSURC
RGF0YWJhc2VFcnJvcjo6Y3JlYXRlKElEQkRhdGFiYXNlRXhjZXB0aW9uOjpEQVRBX0VSUiwgIkEg
a2V5IHdhcyBzdXBwbGllZCBmb3IgYW4gb2JqZWN0U3RvcmUgdGhhdCBpcyB1c2luZyBhdXRvIGlu
Y3JlbWVudC4iKSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBpZiAob2JqZWN0U3Rv
cmUtPmF1dG9JbmNyZW1lbnQoKSkgeworICAgIGlmIChvYmplY3RTdG9yZS0+YXV0b0luY3JlbWVu
dCgpICYmIHB1dE1vZGUgIT0gQ3Vyc29yVXBkYXRlKSB7CiAgICAgICAgIGtleSA9IG9iamVjdFN0
b3JlLT5nZW5BdXRvSW5jcmVtZW50S2V5KCk7CiAKICAgICAgICAgaWYgKCFvYmplY3RTdG9yZS0+
bV9rZXlQYXRoLmlzTnVsbCgpKSB7CkBAIC0yMjEsMTIgKzIyNCwxOSBAQCB2b2lkIElEQk9iamVj
dFN0b3JlQmFja2VuZEltcGw6OnB1dEludGVybmFsKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBQ
YXNzUmVmUHRyPAogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAgICAgfSBlbHNlIGlm
ICghb2JqZWN0U3RvcmUtPm1fa2V5UGF0aC5pc051bGwoKSkgewotICAgICAgICBrZXkgPSBmZXRj
aEtleUZyb21LZXlQYXRoKHZhbHVlLmdldCgpLCBvYmplY3RTdG9yZS0+bV9rZXlQYXRoKTsKKyAg
ICAgICAgUmVmUHRyPElEQktleT4ga2V5UGF0aEtleSA9IGZldGNoS2V5RnJvbUtleVBhdGgodmFs
dWUuZ2V0KCksIG9iamVjdFN0b3JlLT5tX2tleVBhdGgpOwogCi0gICAgICAgIGlmICgha2V5KSB7
CisgICAgICAgIGlmICgha2V5UGF0aEtleSkgewogICAgICAgICAgICAgY2FsbGJhY2tzLT5vbkVy
cm9yKElEQkRhdGFiYXNlRXJyb3I6OmNyZWF0ZShJREJEYXRhYmFzZUV4Y2VwdGlvbjo6REFUQV9F
UlIsICJUaGUga2V5IGNvdWxkIG5vdCBiZSBmZXRjaGVkIGZyb20gdGhlIGtleVBhdGguIikpOwog
ICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CisKKyAgICAgICAgaWYgKHB1dE1vZGUgPT0g
Q3Vyc29yVXBkYXRlICYmICFrZXlQYXRoS2V5LT5pc0VxdWFsKGtleS5nZXQoKSkpIHsKKyAgICAg
ICAgICAgIGNhbGxiYWNrcy0+b25FcnJvcihJREJEYXRhYmFzZUVycm9yOjpjcmVhdGUoSURCRGF0
YWJhc2VFeGNlcHRpb246OkRBVEFfRVJSLCAiVGhlIGtleSBmZXRjaGVkIGZyb20gdGhlIGtleVBh
dGggZG9lcyBub3QgbWF0Y2ggdGhlIGtleSBvZiB0aGUgY3Vyc29yLiIpKTsKKyAgICAgICAgICAg
IHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIGtleSA9IGtleVBhdGhLZXk7CiAgICAgfSBl
bHNlIGlmICgha2V5KSB7CiAgICAgICAgIGNhbGxiYWNrcy0+b25FcnJvcihJREJEYXRhYmFzZUVy
cm9yOjpjcmVhdGUoSURCRGF0YWJhc2VFeGNlcHRpb246OkRBVEFfRVJSLCAiTm8ga2V5IHN1cHBs
aWVkLiIpKTsKICAgICAgICAgcmV0dXJuOwpAQCAtMjYxLDcgKzI3MSw3IEBAIHZvaWQgSURCT2Jq
ZWN0U3RvcmVCYWNrZW5kSW1wbDo6cHV0SW50ZXJuYWwoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCos
IFBhc3NSZWZQdHI8CiAKICAgICBiaW5kV2hlcmVDbGF1c2UoZ2V0UXVlcnksIG9iamVjdFN0b3Jl
LT5pZCgpLCBrZXkuZ2V0KCkpOwogICAgIGJvb2wgaXNFeGlzdGluZ1ZhbHVlID0gZ2V0UXVlcnku
c3RlcCgpID09IFNRTFJlc3VsdFJvdzsKLSAgICBpZiAoYWRkT25seSAmJiBpc0V4aXN0aW5nVmFs
dWUpIHsKKyAgICBpZiAocHV0TW9kZSA9PSBBZGRPbmx5ICYmIGlzRXhpc3RpbmdWYWx1ZSkgewog
ICAgICAgICBjYWxsYmFja3MtPm9uRXJyb3IoSURCRGF0YWJhc2VFcnJvcjo6Y3JlYXRlKElEQkRh
dGFiYXNlRXhjZXB0aW9uOjpDT05TVFJBSU5UX0VSUiwgIktleSBhbHJlYWR5IGV4aXN0cyBpbiB0
aGUgb2JqZWN0IHN0b3JlLiIpKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbC5oIGIvU291
cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsLmgKaW5kZXggOWZi
MWI3YzQ2N2I3NzI2MmJjNzIzZDk1ZGJjY2I4OThhMDk0NjIwMy4uZDUxMzAyZmY4NTQzNmQ5N2E0
MDBiNmJjMGNhYWRjMmQ0MzQ3MDJkOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3RvcmFn
ZS9JREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsLmgKKysrIGIvU291cmNlL1dlYkNvcmUvc3RvcmFn
ZS9JREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsLmgKQEAgLTY3LDcgKzY3LDcgQEAgcHVibGljOgog
ICAgIHZpcnR1YWwgYm9vbCBhdXRvSW5jcmVtZW50KCkgY29uc3QgeyByZXR1cm4gbV9hdXRvSW5j
cmVtZW50OyB9CiAKICAgICB2aXJ0dWFsIHZvaWQgZ2V0KFBhc3NSZWZQdHI8SURCS2V5PiBrZXks
IFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiwgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNl
KiwgRXhjZXB0aW9uQ29kZSYpOwotICAgIHZpcnR1YWwgdm9pZCBwdXQoUGFzc1JlZlB0cjxTZXJp
YWxpemVkU2NyaXB0VmFsdWU+IHZhbHVlLCBQYXNzUmVmUHRyPElEQktleT4ga2V5LCBib29sIGFk
ZE9ubHksIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiwgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW50
ZXJmYWNlKiwgRXhjZXB0aW9uQ29kZSYpOworICAgIHZpcnR1YWwgdm9pZCBwdXQoUGFzc1JlZlB0
cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+LCBQYXNzUmVmUHRyPElEQktleT4sIFB1dE1vZGUsIFBh
c3NSZWZQdHI8SURCQ2FsbGJhY2tzPiwgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlKiwg
RXhjZXB0aW9uQ29kZSYpOwogICAgIHZpcnR1YWwgdm9pZCBkZWxldGVGdW5jdGlvbihQYXNzUmVm
UHRyPElEQktleT4ga2V5LCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4sIElEQlRyYW5zYWN0aW9u
QmFja2VuZEludGVyZmFjZSosIEV4Y2VwdGlvbkNvZGUmKTsKIAogICAgIHZpcnR1YWwgUGFzc1Jl
ZlB0cjxJREJJbmRleEJhY2tlbmRJbnRlcmZhY2U+IGNyZWF0ZUluZGV4KGNvbnN0IFN0cmluZyYg
bmFtZSwgY29uc3QgU3RyaW5nJiBrZXlQYXRoLCBib29sIHVuaXF1ZSwgSURCVHJhbnNhY3Rpb25C
YWNrZW5kSW50ZXJmYWNlKiwgRXhjZXB0aW9uQ29kZSYpOwpAQCAtODUsNyArODUsNyBAQCBwcml2
YXRlOgogICAgIFBhc3NSZWZQdHI8SURCS2V5PiBnZW5BdXRvSW5jcmVtZW50S2V5KCk7CiAKICAg
ICBzdGF0aWMgdm9pZCBnZXRJbnRlcm5hbChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgUGFzc1Jl
ZlB0cjxJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsPiwgUGFzc1JlZlB0cjxJREJLZXk+IGtleSwg
UGFzc1JlZlB0cjxJREJDYWxsYmFja3M+KTsKLSAgICBzdGF0aWMgdm9pZCBwdXRJbnRlcm5hbChT
Y3JpcHRFeGVjdXRpb25Db250ZXh0KiwgUGFzc1JlZlB0cjxJREJPYmplY3RTdG9yZUJhY2tlbmRJ
bXBsPiwgUGFzc1JlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IHZhbHVlLCBQYXNzUmVmUHRy
PElEQktleT4ga2V5LCBib29sIGFkZE9ubHksIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiwgUGFz
c1JlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2U+KTsKKyAgICBzdGF0aWMgdm9p
ZCBwdXRJbnRlcm5hbChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgUGFzc1JlZlB0cjxJREJPYmpl
Y3RTdG9yZUJhY2tlbmRJbXBsPiwgUGFzc1JlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+LCBQ
YXNzUmVmUHRyPElEQktleT4sIFB1dE1vZGUsIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiwgUGFz
c1JlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2U+KTsKICAgICBzdGF0aWMgdm9p
ZCBkZWxldGVJbnRlcm5hbChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgUGFzc1JlZlB0cjxJREJP
YmplY3RTdG9yZUJhY2tlbmRJbXBsPiwgUGFzc1JlZlB0cjxJREJLZXk+IGtleSwgUGFzc1JlZlB0
cjxJREJDYWxsYmFja3M+KTsKICAgICBzdGF0aWMgdm9pZCBjcmVhdGVJbmRleEludGVybmFsKFNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBQYXNzUmVmUHRyPElEQk9iamVjdFN0b3JlQmFja2VuZElt
cGw+LCBQYXNzUmVmUHRyPElEQkluZGV4QmFja2VuZEltcGw+LCBQYXNzUmVmUHRyPElEQlRyYW5z
YWN0aW9uQmFja2VuZEludGVyZmFjZT4pOwogICAgIHN0YXRpYyB2b2lkIGRlbGV0ZUluZGV4SW50
ZXJuYWwoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFBhc3NSZWZQdHI8SURCT2JqZWN0U3RvcmVC
YWNrZW5kSW1wbD4sIFBhc3NSZWZQdHI8SURCSW5kZXhCYWNrZW5kSW1wbD4sIFBhc3NSZWZQdHI8
SURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlPik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9zdG9yYWdlL0lEQk9iamVjdFN0b3JlQmFja2VuZEludGVyZmFjZS5oIGIvU291cmNlL1dl
YkNvcmUvc3RvcmFnZS9JREJPYmplY3RTdG9yZUJhY2tlbmRJbnRlcmZhY2UuaAppbmRleCAwMmNl
YjI3NjdhNTRiNjIyMDJhYmEzYzg1MjkxNmNhODUzNDAzNDgwLi5mYTI4NDE2YTY2MDJjODgzYzc5
YTNhNWY0ODI5YjZiNjlhZjNkZTg5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdl
L0lEQk9iamVjdFN0b3JlQmFja2VuZEludGVyZmFjZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N0
b3JhZ2UvSURCT2JqZWN0U3RvcmVCYWNrZW5kSW50ZXJmYWNlLmgKQEAgLTUxLDcgKzUxLDEzIEBA
IHB1YmxpYzoKICAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8RE9NU3RyaW5nTGlzdD4gaW5kZXhOYW1l
cygpIGNvbnN0ID0gMDsKIAogICAgIHZpcnR1YWwgdm9pZCBnZXQoUGFzc1JlZlB0cjxJREJLZXk+
LCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4sIElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFj
ZSosIEV4Y2VwdGlvbkNvZGUmKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIHB1dChQYXNzUmVmUHRy
PFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4sIFBhc3NSZWZQdHI8SURCS2V5PiwgYm9vbCBhZGRPbmx5
LCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4sIElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFj
ZSosIEV4Y2VwdGlvbkNvZGUmKSA9IDA7CisKKyAgICBlbnVtIFB1dE1vZGUgeworICAgICAgICBB
ZGRPclVwZGF0ZSwKKyAgICAgICAgQWRkT25seSwKKyAgICAgICAgQ3Vyc29yVXBkYXRlCisgICAg
fTsKKyAgICB2aXJ0dWFsIHZvaWQgcHV0KFBhc3NSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVl
PiwgUGFzc1JlZlB0cjxJREJLZXk+LCBQdXRNb2RlLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4s
IElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZSosIEV4Y2VwdGlvbkNvZGUmKSA9IDA7CiAg
ICAgdmlydHVhbCB2b2lkIGRlbGV0ZUZ1bmN0aW9uKFBhc3NSZWZQdHI8SURCS2V5PiwgUGFzc1Jl
ZlB0cjxJREJDYWxsYmFja3M+LCBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UqLCBFeGNl
cHRpb25Db2RlJikgPSAwOwogCiAgICAgdmlydHVhbCBQYXNzUmVmUHRyPElEQkluZGV4QmFja2Vu
ZEludGVyZmFjZT4gY3JlYXRlSW5kZXgoY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBTdHJpbmcm
IGtleVBhdGgsIGJvb2wgdW5pcXVlLCBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UqLCBF
eGNlcHRpb25Db2RlJikgPSAwOwpAQCAtNjYsNCArNzIsMyBAQCBwdWJsaWM6CiAjZW5kaWYKIAog
I2VuZGlmIC8vIElEQk9iamVjdFN0b3JlQmFja2VuZEludGVyZmFjZV9oCi0KZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9jaHJvbWl1
bS9DaGFuZ2VMb2cKaW5kZXggZDBlZDRjNmIzM2JlMDNjZGEzMTRhNDNhNDU3YTI2ZTEyMWM0N2Iw
Mi4uNjk4MWE1ZTQzOTY1ZWFiNzFiYWVjNDE2M2RhYmRhNGI3MGRmNmQwOCAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdC9jaHJv
bWl1bS9DaGFuZ2VMb2cKQEAgLTEsNSArMSwyNCBAQAogMjAxMS0wMi0wMSAgSGFucyBXZW5uYm9y
ZyAgPGhhbnNAY2hyb21pdW0ub3JnPgogCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgIEluZGV4ZWREQjogSW1wbGVtZW50IHN1cHBvcnQgZm9yIGN1cnNvciB1
cGRhdGVzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD01
MzQyMQorCisgICAgICAgIE1pcnJvciB0aGUgdXBkYXRlIHRvIHRoZSBJREJPYmplY3RTdG9yZUlu
dGVyZmFjZTo6cHV0KCkgc2lnbmF0dXJlIGluCisgICAgICAgIHRoZSBXZWJLaXQgbGF5ZXIgd3Jh
cHBlcnMuCisKKyAgICAgICAgKiBwdWJsaWMvV2ViSURCT2JqZWN0U3RvcmUuaDoKKyAgICAgICAg
KFdlYktpdDo6V2ViSURCT2JqZWN0U3RvcmU6OnB1dCk6CisgICAgICAgICogc3JjL0lEQk9iamVj
dFN0b3JlUHJveHkuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SURCT2JqZWN0U3RvcmVQcm94eTo6
cHV0KToKKyAgICAgICAgKiBzcmMvSURCT2JqZWN0U3RvcmVQcm94eS5oOgorICAgICAgICAqIHNy
Yy9XZWJJREJPYmplY3RTdG9yZUltcGwuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJJREJPYmpl
Y3RTdG9yZUltcGw6OnB1dCk6CisgICAgICAgICogc3JjL1dlYklEQk9iamVjdFN0b3JlSW1wbC5o
OgorCisyMDExLTAyLTAxICBIYW5zIFdlbm5ib3JnICA8aGFuc0BjaHJvbWl1bS5vcmc+CisKICAg
ICAgICAgUmV2aWV3ZWQgYnkgSmVyZW15IE9ybG93LgogCiAgICAgICAgIENocm9taXVtOiByZW1v
dmUgV2ViSURCQ2FsbGJhY2tzOjpvblN1Y2NlcygpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
L2Nocm9taXVtL3B1YmxpYy9XZWJJREJPYmplY3RTdG9yZS5oIGIvU291cmNlL1dlYktpdC9jaHJv
bWl1bS9wdWJsaWMvV2ViSURCT2JqZWN0U3RvcmUuaAppbmRleCA4ZjIyNDdmMTcyOWIzNGVmNzIy
MzFiZDYwMjJjM2E1MDBiMTkxOTAxLi41YjdmYTk5NjExOTZkNmU3YjJlMDE4MDExNWU5NjJiNTg2
OGI1NTFjIDEwMDc1NQotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJJREJP
YmplY3RTdG9yZS5oCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYklEQk9i
amVjdFN0b3JlLmgKQEAgLTYwLDcgKzYwLDI1IEBAIHB1YmxpYzoKICAgICB9CiAKICAgICB2aXJ0
dWFsIHZvaWQgZ2V0KGNvbnN0IFdlYklEQktleSYsIFdlYklEQkNhbGxiYWNrcyosIGNvbnN0IFdl
YklEQlRyYW5zYWN0aW9uJiwgV2ViRXhjZXB0aW9uQ29kZSYpIHsgV0VCS0lUX0FTU0VSVF9OT1Rf
UkVBQ0hFRCgpOyB9Ci0gICAgdmlydHVhbCB2b2lkIHB1dChjb25zdCBXZWJTZXJpYWxpemVkU2Ny
aXB0VmFsdWUmLCBjb25zdCBXZWJJREJLZXkmLCBib29sIGFkZE9ubHksIFdlYklEQkNhbGxiYWNr
cyosIGNvbnN0IFdlYklEQlRyYW5zYWN0aW9uJiwgV2ViRXhjZXB0aW9uQ29kZSYpIHsgV0VCS0lU
X0FTU0VSVF9OT1RfUkVBQ0hFRCgpOyB9CisKKyAgICBlbnVtIFB1dE1vZGUgeworICAgICAgICBB
ZGRPclVwZGF0ZSwKKyAgICAgICAgQWRkT25seSwKKyAgICAgICAgQ3Vyc29yVXBkYXRlCisgICAg
fTsKKworICAgIC8vIEZJWE1FOiBSZW1vdmUgb25jZSBDaHJvbWl1bSBzaWRlIGlzIHVwZGF0ZWQg
dG8gY2FsbCB0aGUgbmV3IHB1dCBmdW5jdGlvbi4KKyAgICB2aXJ0dWFsIHZvaWQgcHV0KGNvbnN0
IFdlYlNlcmlhbGl6ZWRTY3JpcHRWYWx1ZSYgdmFsdWUsIGNvbnN0IFdlYklEQktleSYga2V5LCBi
b29sIGFkZE9ubHksIFdlYklEQkNhbGxiYWNrcyogY2FsbGJhY2tzLCBjb25zdCBXZWJJREJUcmFu
c2FjdGlvbiYgdHJhbnNhY3Rpb24sIFdlYkV4Y2VwdGlvbkNvZGUmIGVjKQorICAgIHsKKyAgICAg
ICAgcHV0KHZhbHVlLCBrZXksIGFkZE9ubHkgPyBBZGRPbmx5IDogQWRkT3JVcGRhdGUsIGNhbGxi
YWNrcywgdHJhbnNhY3Rpb24sIGVjKTsKKyAgICB9CisKKyAgICAvLyBGSVhNRTogQXNzZXJ0IG5v
dCByZWFjaGVkIG9uY2UgQ2hyb21pdW0gc2lkZSBvdmVycmlkZXMgdGhpcyBwcm9wZXJseS4KKyAg
ICB2aXJ0dWFsIHZvaWQgcHV0KGNvbnN0IFdlYlNlcmlhbGl6ZWRTY3JpcHRWYWx1ZSYgdmFsdWUs
IGNvbnN0IFdlYklEQktleSYga2V5LCBQdXRNb2RlIHB1dE1vZGUsIFdlYklEQkNhbGxiYWNrcyog
Y2FsbGJhY2tzLCBjb25zdCBXZWJJREJUcmFuc2FjdGlvbiYgdHJhbnNhY3Rpb24sIFdlYkV4Y2Vw
dGlvbkNvZGUmIGVjKQorICAgIHsKKyAgICAgICAgcHV0KHZhbHVlLCBrZXksIHB1dE1vZGUgPT0g
QWRkT25seSwgY2FsbGJhY2tzLCB0cmFuc2FjdGlvbiwgZWMpOworICAgIH0KKwogICAgIHZpcnR1
YWwgdm9pZCBkZWxldGVGdW5jdGlvbihjb25zdCBXZWJJREJLZXkmIGtleSwgV2ViSURCQ2FsbGJh
Y2tzKiBjYWxsYmFja3MsIGNvbnN0IFdlYklEQlRyYW5zYWN0aW9uJiB0cmFuc2FjdGlvbiwgV2Vi
RXhjZXB0aW9uQ29kZSYgZWMpIHsgV0VCS0lUX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOyB9CiAgICAg
dmlydHVhbCBXZWJJREJJbmRleCogY3JlYXRlSW5kZXgoY29uc3QgV2ViU3RyaW5nJiBuYW1lLCBj
b25zdCBXZWJTdHJpbmcmIGtleVBhdGgsIGJvb2wgdW5pcXVlLCBjb25zdCBXZWJJREJUcmFuc2Fj
dGlvbiYsIFdlYkV4Y2VwdGlvbkNvZGUmKQogICAgIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQvY2hyb21pdW0vc3JjL0lEQk9iamVjdFN0b3JlUHJveHkuY3BwIGIvU291cmNlL1dlYktpdC9j
aHJvbWl1bS9zcmMvSURCT2JqZWN0U3RvcmVQcm94eS5jcHAKaW5kZXggZTAzY2RjOGJkYTE0Yzdm
OTE5YWNlNmE1NGYzOWIxZjIzMzUwZjI1My4uYzU3ZmJhNmJlNDk3MTJjYzAxYmZkYTM5MzE1N2U2
ZTcyZjU2ZDFlMCAxMDA3NTUKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvSURCT2Jq
ZWN0U3RvcmVQcm94eS5jcHAKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvSURCT2Jq
ZWN0U3RvcmVQcm94eS5jcHAKQEAgLTgwLDEyICs4MCwxMiBAQCB2b2lkIElEQk9iamVjdFN0b3Jl
UHJveHk6OmdldChQYXNzUmVmUHRyPElEQktleT4ga2V5LCBQYXNzUmVmUHRyPElEQkNhbGxiYWNr
cz4gYwogICAgIG1fd2ViSURCT2JqZWN0U3RvcmUtPmdldChrZXksIG5ldyBXZWJJREJDYWxsYmFj
a3NJbXBsKGNhbGxiYWNrcyksICp0cmFuc2FjdGlvblByb3h5LT5nZXRXZWJJREJUcmFuc2FjdGlv
bigpLCBlYyk7CiB9CiAKLXZvaWQgSURCT2JqZWN0U3RvcmVQcm94eTo6cHV0KFBhc3NSZWZQdHI8
U2VyaWFsaXplZFNjcmlwdFZhbHVlPiB2YWx1ZSwgUGFzc1JlZlB0cjxJREJLZXk+IGtleSwgYm9v
bCBhZGRPbmx5LCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4gY2FsbGJhY2tzLCBJREJUcmFuc2Fj
dGlvbkJhY2tlbmRJbnRlcmZhY2UqIHRyYW5zYWN0aW9uLCBFeGNlcHRpb25Db2RlJiBlYykKK3Zv
aWQgSURCT2JqZWN0U3RvcmVQcm94eTo6cHV0KFBhc3NSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZh
bHVlPiB2YWx1ZSwgUGFzc1JlZlB0cjxJREJLZXk+IGtleSwgUHV0TW9kZSBwdXRNb2RlLCBQYXNz
UmVmUHRyPElEQkNhbGxiYWNrcz4gY2FsbGJhY2tzLCBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRl
cmZhY2UqIHRyYW5zYWN0aW9uLCBFeGNlcHRpb25Db2RlJiBlYykKIHsKICAgICAvLyBUaGUgdHJh
bnNhY3Rpb24gcG9pbnRlciBpcyBndWFyYW50ZWVkIHRvIGJlIGEgcG9pbnRlciB0byBhIHByb3h5
IG9iamVjdCBhcywgaW4gdGhlIHJlbmRlcmVyLAogICAgIC8vIGFsbCBpbXBsZW1lbnRhdGlvbnMg
b2YgSURCIGludGVyZmFjZXMgYXJlIHByb3h5IG9iamVjdHMuCiAgICAgSURCVHJhbnNhY3Rpb25C
YWNrZW5kUHJveHkqIHRyYW5zYWN0aW9uUHJveHkgPSBzdGF0aWNfY2FzdDxJREJUcmFuc2FjdGlv
bkJhY2tlbmRQcm94eSo+KHRyYW5zYWN0aW9uKTsKLSAgICBtX3dlYklEQk9iamVjdFN0b3JlLT5w
dXQodmFsdWUsIGtleSwgYWRkT25seSwgbmV3IFdlYklEQkNhbGxiYWNrc0ltcGwoY2FsbGJhY2tz
KSwgKnRyYW5zYWN0aW9uUHJveHktPmdldFdlYklEQlRyYW5zYWN0aW9uKCksIGVjKTsKKyAgICBt
X3dlYklEQk9iamVjdFN0b3JlLT5wdXQodmFsdWUsIGtleSwgc3RhdGljX2Nhc3Q8V2ViS2l0OjpX
ZWJJREJPYmplY3RTdG9yZTo6UHV0TW9kZT4ocHV0TW9kZSksIG5ldyBXZWJJREJDYWxsYmFja3NJ
bXBsKGNhbGxiYWNrcyksICp0cmFuc2FjdGlvblByb3h5LT5nZXRXZWJJREJUcmFuc2FjdGlvbigp
LCBlYyk7CiB9CiAKIHZvaWQgSURCT2JqZWN0U3RvcmVQcm94eTo6ZGVsZXRlRnVuY3Rpb24oUGFz
c1JlZlB0cjxJREJLZXk+IGtleSwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+IGNhbGxiYWNrcywg
SURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlKiB0cmFuc2FjdGlvbiwgRXhjZXB0aW9uQ29k
ZSYgZWMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9JREJPYmplY3RT
dG9yZVByb3h5LmggYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9JREJPYmplY3RTdG9yZVBy
b3h5LmgKaW5kZXggMzQ4Yzc5NDZlYzk2YThmN2U5N2E3ZjA2NmZlYmZlZTFlNjM4MDdmYS4uNDk4
YmM1Nzk5MTNlZDE5MjkwZDk3YWFkZWZhNjE4MjAwMTBlZTlhYyAxMDA3NTUKLS0tIGEvU291cmNl
L1dlYktpdC9jaHJvbWl1bS9zcmMvSURCT2JqZWN0U3RvcmVQcm94eS5oCisrKyBiL1NvdXJjZS9X
ZWJLaXQvY2hyb21pdW0vc3JjL0lEQk9iamVjdFN0b3JlUHJveHkuaApAQCAtNDcsNyArNDcsNyBA
QCBwdWJsaWM6CiAgICAgdmlydHVhbCBQYXNzUmVmUHRyPERPTVN0cmluZ0xpc3Q+IGluZGV4TmFt
ZXMoKSBjb25zdDsKIAogICAgIHZpcnR1YWwgdm9pZCBnZXQoUGFzc1JlZlB0cjxJREJLZXk+LCBQ
YXNzUmVmUHRyPElEQkNhbGxiYWNrcz4sIElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZSos
IEV4Y2VwdGlvbkNvZGUmKTsKLSAgICB2aXJ0dWFsIHZvaWQgcHV0KFBhc3NSZWZQdHI8U2VyaWFs
aXplZFNjcmlwdFZhbHVlPiwgUGFzc1JlZlB0cjxJREJLZXk+LCBib29sIGFkZE9ubHksIFBhc3NS
ZWZQdHI8SURCQ2FsbGJhY2tzPiwgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlKiwgRXhj
ZXB0aW9uQ29kZSYpOworICAgIHZpcnR1YWwgdm9pZCBwdXQoUGFzc1JlZlB0cjxTZXJpYWxpemVk
U2NyaXB0VmFsdWU+LCBQYXNzUmVmUHRyPElEQktleT4sIFB1dE1vZGUsIFBhc3NSZWZQdHI8SURC
Q2FsbGJhY2tzPiwgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlKiwgRXhjZXB0aW9uQ29k
ZSYpOwogICAgIHZpcnR1YWwgdm9pZCBkZWxldGVGdW5jdGlvbihQYXNzUmVmUHRyPElEQktleT4s
IFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiwgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNl
KiwgRXhjZXB0aW9uQ29kZSYpOwogCiAgICAgUGFzc1JlZlB0cjxJREJJbmRleEJhY2tlbmRJbnRl
cmZhY2U+IGNyZWF0ZUluZGV4KGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgU3RyaW5nJiBrZXlQ
YXRoLCBib29sIHVuaXF1ZSwgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlKiwgRXhjZXB0
aW9uQ29kZSYpOwpAQCAtNjcsNCArNjcsMyBAQCBwcml2YXRlOgogI2VuZGlmCiAKICNlbmRpZiAv
LyBJREJPYmplY3RTdG9yZVByb3h5X2gKLQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJv
bWl1bS9zcmMvV2ViSURCT2JqZWN0U3RvcmVJbXBsLmNwcCBiL1NvdXJjZS9XZWJLaXQvY2hyb21p
dW0vc3JjL1dlYklEQk9iamVjdFN0b3JlSW1wbC5jcHAKaW5kZXggMDUwM2VkZThlOGM4NjkzZTk4
NTY2Mzk2YzdjMTNkM2E2MThmZDYxNi4uNDk4ZWI3NmI5NTY3NGVkMTdjZDY1MTA0OGZjODViZjlm
ZWIwMTA5YiAxMDA3NTUKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViSURCT2Jq
ZWN0U3RvcmVJbXBsLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJJREJP
YmplY3RTdG9yZUltcGwuY3BwCkBAIC03MSw5ICs3MSw5IEBAIHZvaWQgV2ViSURCT2JqZWN0U3Rv
cmVJbXBsOjpnZXQoY29uc3QgV2ViSURCS2V5JiBrZXksIFdlYklEQkNhbGxiYWNrcyogY2FsbGJh
Y2tzCiAgICAgbV9vYmplY3RTdG9yZS0+Z2V0KGtleSwgSURCQ2FsbGJhY2tzUHJveHk6OmNyZWF0
ZShjYWxsYmFja3MpLCB0cmFuc2FjdGlvbi5nZXRJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZh
Y2UoKSwgZWMpOwogfQogCi12b2lkIFdlYklEQk9iamVjdFN0b3JlSW1wbDo6cHV0KGNvbnN0IFdl
YlNlcmlhbGl6ZWRTY3JpcHRWYWx1ZSYgdmFsdWUsIGNvbnN0IFdlYklEQktleSYga2V5LCBib29s
IGFkZE9ubHksIFdlYklEQkNhbGxiYWNrcyogY2FsbGJhY2tzLCBjb25zdCBXZWJJREJUcmFuc2Fj
dGlvbiYgdHJhbnNhY3Rpb24sIFdlYkV4Y2VwdGlvbkNvZGUmIGVjKQordm9pZCBXZWJJREJPYmpl
Y3RTdG9yZUltcGw6OnB1dChjb25zdCBXZWJTZXJpYWxpemVkU2NyaXB0VmFsdWUmIHZhbHVlLCBj
b25zdCBXZWJJREJLZXkmIGtleSwgUHV0TW9kZSBwdXRNb2RlLCBXZWJJREJDYWxsYmFja3MqIGNh
bGxiYWNrcywgY29uc3QgV2ViSURCVHJhbnNhY3Rpb24mIHRyYW5zYWN0aW9uLCBXZWJFeGNlcHRp
b25Db2RlJiBlYykKIHsKLSAgICBtX29iamVjdFN0b3JlLT5wdXQodmFsdWUsIGtleSwgYWRkT25s
eSwgSURCQ2FsbGJhY2tzUHJveHk6OmNyZWF0ZShjYWxsYmFja3MpLCB0cmFuc2FjdGlvbi5nZXRJ
REJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UoKSwgZWMpOworICAgIG1fb2JqZWN0U3RvcmUt
PnB1dCh2YWx1ZSwga2V5LCBzdGF0aWNfY2FzdDxJREJPYmplY3RTdG9yZUJhY2tlbmRJbnRlcmZh
Y2U6OlB1dE1vZGU+KHB1dE1vZGUpLCBJREJDYWxsYmFja3NQcm94eTo6Y3JlYXRlKGNhbGxiYWNr
cyksIHRyYW5zYWN0aW9uLmdldElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZSgpLCBlYyk7
CiB9CiAKIHZvaWQgV2ViSURCT2JqZWN0U3RvcmVJbXBsOjpkZWxldGVGdW5jdGlvbihjb25zdCBX
ZWJJREJLZXkmIGtleSwgV2ViSURCQ2FsbGJhY2tzKiBjYWxsYmFja3MsIGNvbnN0IFdlYklEQlRy
YW5zYWN0aW9uJiB0cmFuc2FjdGlvbiwgV2ViRXhjZXB0aW9uQ29kZSYgZWMpCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJJREJPYmplY3RTdG9yZUltcGwuaCBiL1Nv
dXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYklEQk9iamVjdFN0b3JlSW1wbC5oCmluZGV4IGY5
Y2Q3NzY0NzFlNTM0MmZiNTZmZGYzM2RmYTQ3ODY2Mzk4OWYwZjYuLjczMTZmOWE2YWFjMTBjYjcy
ZGRjNTBiMDY2NDIwNDM3MzkwZDVjZjUgMTAwNzU1Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21p
dW0vc3JjL1dlYklEQk9iamVjdFN0b3JlSW1wbC5oCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21p
dW0vc3JjL1dlYklEQk9iamVjdFN0b3JlSW1wbC5oCkBAIC00OCw3ICs0OCw3IEBAIHB1YmxpYzoK
ICAgICBXZWJET01TdHJpbmdMaXN0IGluZGV4TmFtZXMoKSBjb25zdDsKIAogICAgIHZvaWQgZ2V0
KGNvbnN0IFdlYklEQktleSYga2V5LCBXZWJJREJDYWxsYmFja3MqLCBjb25zdCBXZWJJREJUcmFu
c2FjdGlvbiYsIFdlYkV4Y2VwdGlvbkNvZGUmKTsKLSAgICB2b2lkIHB1dChjb25zdCBXZWJTZXJp
YWxpemVkU2NyaXB0VmFsdWUmLCBjb25zdCBXZWJJREJLZXkmIGtleSwgYm9vbCBhZGRPbmx5LCBX
ZWJJREJDYWxsYmFja3MqLCBjb25zdCBXZWJJREJUcmFuc2FjdGlvbiYsIFdlYkV4Y2VwdGlvbkNv
ZGUmKTsKKyAgICB2b2lkIHB1dChjb25zdCBXZWJTZXJpYWxpemVkU2NyaXB0VmFsdWUmLCBjb25z
dCBXZWJJREJLZXkmLCBQdXRNb2RlLCBXZWJJREJDYWxsYmFja3MqLCBjb25zdCBXZWJJREJUcmFu
c2FjdGlvbiYsIFdlYkV4Y2VwdGlvbkNvZGUmKTsKICAgICB2b2lkIGRlbGV0ZUZ1bmN0aW9uKGNv
bnN0IFdlYklEQktleSYga2V5LCBXZWJJREJDYWxsYmFja3MqLCBjb25zdCBXZWJJREJUcmFuc2Fj
dGlvbiYsIFdlYkV4Y2VwdGlvbkNvZGUmKTsKIAogICAgIFdlYklEQkluZGV4KiBjcmVhdGVJbmRl
eChjb25zdCBXZWJTdHJpbmcmIG5hbWUsIGNvbnN0IFdlYlN0cmluZyYga2V5UGF0aCwgYm9vbCB1
bmlxdWUsIGNvbnN0IFdlYklEQlRyYW5zYWN0aW9uJiwgV2ViRXhjZXB0aW9uQ29kZSYpOwo=
</data>
<flag name="review"
          id="72239"
          type_id="1"
          status="+"
          setter="jorlow"
    />
          </attachment>
      

    </bug>

</bugzilla>