<?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>104354</bug_id>
          
          <creation_ts>2012-12-07 01:16:44 -0800</creation_ts>
          <short_desc>IndexedDB: Don&apos;t use strings to represent serialized values</short_desc>
          <delta_ts>2012-12-17 16:00:58 -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>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>105186</blocked>
          <everconfirmed>0</everconfirmed>
          <reporter name="Michael Pruett">michael</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>abarth</cc>
    
    <cc>alecflett</cc>
    
    <cc>haraken</cc>
    
    <cc>japhet</cc>
    
    <cc>jsbell</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>785729</commentid>
    <comment_count>0</comment_count>
    <who name="Michael Pruett">michael</who>
    <bug_when>2012-12-07 01:16:44 -0800</bug_when>
    <thetext>Strings are inappropriate for representing serialized values in IndexedDB; these serialized values are not Unicode character sequences and should instead be represented as byte arrays. While the V8 implementation of SerializedScriptValue uses String as its internal representation, the JSC implementation uses Vector&lt;uint8_t&gt;. Converting a Vector&lt;uint8_t&gt; to a String object only for IndexedDB to convert it back immediately to a Vector&lt;char&gt; is awkward and inefficient.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>785742</commentid>
    <comment_count>1</comment_count>
      <attachid>178182</attachid>
    <who name="Michael Pruett">michael</who>
    <bug_when>2012-12-07 01:32:41 -0800</bug_when>
    <thetext>Created attachment 178182
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>785743</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-12-07 01:35:41 -0800</bug_when>
    <thetext>Attachment 178182 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/WebCore/ChangeLog&apos;, u&apos;Source/WebCor...&quot; exit_code: 1
Source/WebCore/bindings/v8/SerializedScriptValue.cpp:2257:  Extra space before ( in function call  [whitespace/parens] [4]
Total errors found: 1 in 12 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>785746</commentid>
    <comment_count>3</comment_count>
      <attachid>178184</attachid>
    <who name="Michael Pruett">michael</who>
    <bug_when>2012-12-07 01:38:13 -0800</bug_when>
    <thetext>Created attachment 178184
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>785933</commentid>
    <comment_count>4</comment_count>
      <attachid>178184</attachid>
    <who name="Alec Flett">alecflett</who>
    <bug_when>2012-12-07 09:45:09 -0800</bug_when>
    <thetext>Comment on attachment 178184
Patch

Overall this is great - I was just saying to jsbell that this is an important one. (Note to self: we have to fix the V8 implementation to stop using String internally as well)

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

&gt; Source/WebCore/Modules/indexeddb/IDBLevelDBCoding.h:74
&gt; +Vector&lt;char&gt; encodeIDBValue(const Vector&lt;uint8_t&gt;&amp;);

I&apos;m not sure I see why we need encodeIDBValue/decodeIDBValue now - seems like they&apos;re just introducing additional string copies to do conversion from char &lt;-&gt; uint8_t - is there a way to cleverly use static_cast and the like to make the conversion safe?

Alternatively, can we just fix the LevelDB code to use uint8_t?

&gt; Source/WebCore/bindings/js/SerializedScriptValue.cpp:1844
&gt;  String SerializedScriptValue::toWireString() const

add FIXME&apos;s to say &quot;remove when...&quot; for whatever is stopping this method (preferably in the form of a webkit bug) from being completely removed.. is it bindings code? Chromium code?

(and add the identical FIXME for all the methods that should be removed - I see a bunch)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>785971</commentid>
    <comment_count>5</comment_count>
      <attachid>178184</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2012-12-07 10:34:15 -0800</bug_when>
    <thetext>Comment on attachment 178184
Patch

Attachment 178184 did not pass mac-ews (mac):
Output: http://queues.webkit.org/results/15186463</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>788862</commentid>
    <comment_count>6</comment_count>
      <attachid>178894</attachid>
    <who name="Michael Pruett">michael</who>
    <bug_when>2012-12-11 15:27:22 -0800</bug_when>
    <thetext>Created attachment 178894
Patch

With the changes in r137346, the toWireString() and createFromWire(const String&amp;) methods of the JSC SerializedScriptValue class can be removed in this patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>788895</commentid>
    <comment_count>7</comment_count>
      <attachid>178894</attachid>
    <who name="Alec Flett">alecflett</who>
    <bug_when>2012-12-11 15:54:22 -0800</bug_when>
    <thetext>Comment on attachment 178894
Patch

Can you include changes to LevelDBSlice() to accept a Vector&lt;uint8_t&gt; to avoid the extra copy that this patch introduces?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>788898</commentid>
    <comment_count>8</comment_count>
    <who name="Alec Flett">alecflett</who>
    <bug_when>2012-12-11 15:55:12 -0800</bug_when>
    <thetext>(I think you&apos;ll have to use reinterpret_cast)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>788905</commentid>
    <comment_count>9</comment_count>
      <attachid>178894</attachid>
    <who name="Joshua Bell">jsbell</who>
    <bug_when>2012-12-11 15:58:10 -0800</bug_when>
    <thetext>Comment on attachment 178894
Patch

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

&gt; Source/WebCore/Modules/indexeddb/IDBBackingStore.h:81
&gt; +    virtual bool putRecord(IDBBackingStore::Transaction*, int64_t databaseId, int64_t objectStoreId, const IDBKey&amp;, const Vector&lt;uint8_t&gt;&amp; value, RecordIdentifier*);

Should still have WARN_UNUSED_RETURN?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>788955</commentid>
    <comment_count>10</comment_count>
      <attachid>178915</attachid>
    <who name="Michael Pruett">michael</who>
    <bug_when>2012-12-11 16:36:41 -0800</bug_when>
    <thetext>Created attachment 178915
Patch

I&apos;ve added back WARN_UNUSED_RETURN which I erroneously removed from IDBBackingStore::putRecord(). I have also eliminated encodeIDBValue() and decodeIDBValue() and have replaced those with calls to Vector::appendVector() and Vector::appendRange(). I&apos;ve also updated IDBBackingStore::Cursor::value() to return a const Vector&lt;uint8_t&gt;&amp; rather than Vector&lt;uint8_t&gt;. I believe these changes should eliminate the extra memory copies introduced in my previous patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>789861</commentid>
    <comment_count>11</comment_count>
      <attachid>178915</attachid>
    <who name="Alec Flett">alecflett</who>
    <bug_when>2012-12-12 13:35:12 -0800</bug_when>
    <thetext>Comment on attachment 178915
Patch

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

&gt; Source/WebCore/bindings/js/SerializedScriptValue.h:110
&gt; +        return adopt(bytes);

I&apos;m confused how/why this works - I&apos;m not familiar with the JSC SSV implementation, but aren&apos;t you adopting a stack-allocated Vector? or maybe can you just adopt data instead? 

(ah.. it looks like the constructor is relying on swap(), but maybe it should just be copying it in SerializedScriptValue::SerializedScriptValue(Vector&lt;uint8_t&gt;&amp; buffer) instead of swapping?

&gt; Source/WebCore/bindings/v8/SerializedScriptValue.cpp:2262
&gt; +        dst[i] = ntohs(src[i]);

I&apos;m actually now a little confused as to why the ntohs is necessary... This may be the most prudent fix for right now, but could this also be fixed by the V8 SSV parser/serializer simply unpacking/packing bytes in the right order? (it seems unfortunate that the act of creating or extracting an SSV requires this conversion, and that that cost should be paid by the parser/serializer in case the SSV is never deserialized)

&gt; Source/WebCore/bindings/v8/SerializedScriptValue.cpp:2324
&gt; +        dst[i] = htons(src[i]);

(ditto for htons here)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>789902</commentid>
    <comment_count>12</comment_count>
    <who name="Michael Pruett">michael</who>
    <bug_when>2012-12-12 14:10:58 -0800</bug_when>
    <thetext>(In reply to comment #11)
&gt; (From update of attachment 178915 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=178915&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/bindings/js/SerializedScriptValue.h:110
&gt; &gt; +        return adopt(bytes);
&gt; 
&gt; I&apos;m confused how/why this works - I&apos;m not familiar with the JSC SSV implementation, but aren&apos;t you adopting a stack-allocated Vector? or maybe can you just adopt data instead? 
&gt; 
&gt; (ah.. it looks like the constructor is relying on swap(), but maybe it should just be copying it in SerializedScriptValue::SerializedScriptValue(Vector&lt;uint8_t&gt;&amp; buffer) instead of swapping?

I agree that adding a constructor which takes a const Vector&lt;uint8_t&gt;&amp; would be cleaner.

&gt; &gt; Source/WebCore/bindings/v8/SerializedScriptValue.cpp:2262
&gt; &gt; +        dst[i] = ntohs(src[i]);
&gt; 
&gt; I&apos;m actually now a little confused as to why the ntohs is necessary... This may be the most prudent fix for right now, but could this also be fixed by the V8 SSV parser/serializer simply unpacking/packing bytes in the right order? (it seems unfortunate that the act of creating or extracting an SSV requires this conversion, and that that cost should be paid by the parser/serializer in case the SSV is never deserialized)
&gt; 
&gt; &gt; Source/WebCore/bindings/v8/SerializedScriptValue.cpp:2324
&gt; &gt; +        dst[i] = htons(src[i]);
&gt; 
&gt; (ditto for htons here)

I have added byte swapping to the V8 implementation of SSV&apos;s toWireBytes() and createFromWire(const Vector&lt;uint8_t&gt;&amp;) in order to maintain binary compatibility with existing IDB databases. In the previous call path, the string in toWireString() and createFromWire(const String&amp;) was swapped in IDBLevelDBCoding.h&apos;s encodeString() and decodeString().

Certainly swapping for deserialization could be performed at a later stage such as in SerializedScriptValue::deserialize() if performance is a concern, but that approach would be significantly more complex. I believe the approach in the proposed patch has equivalent performance to the status quo as every value which was written to or read from a LevelDB database was swapped.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>789928</commentid>
    <comment_count>13</comment_count>
    <who name="Alec Flett">alecflett</who>
    <bug_when>2012-12-12 14:35:57 -0800</bug_when>
    <thetext>
&gt; Certainly swapping for deserialization could be performed at a later stage such as in SerializedScriptValue::deserialize() if performance is a concern, but that approach would be significantly more complex. I believe the approach in the proposed patch has equivalent performance to the status quo as every value which was written to or read from a LevelDB database was swapped.

Yeah, that&apos;s kind of what I figured - I just wanted to confirm. The parser is a total mess right now anyway (it manually puts the value into a String, pulls out 16-bit characters one at a time, and then parses them as a sequence of 8-bit characters. so no sense trying to make that better right now.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>790326</commentid>
    <comment_count>14</comment_count>
      <attachid>178915</attachid>
    <who name="Kentaro Hara">haraken</who>
    <bug_when>2012-12-12 23:29:36 -0800</bug_when>
    <thetext>Comment on attachment 178915
Patch

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

BTW, don&apos;t you have any performance concern about this change? (Is there any benchmark that we can use to make sure that this change won&apos;t regress performance?)

&gt; Source/WebCore/Modules/indexeddb/IDBBackingStore.cpp:1406
&gt; +    Vector&lt;uint8_t&gt; m_emptyValue;

Do you need this member?

&gt; Source/WebCore/Modules/indexeddb/IDBBackingStore.cpp:1528
&gt; +    Vector&lt;uint8_t&gt; m_emptyValue;

Ditto.

&gt; Source/WebCore/Modules/indexeddb/IDBBackingStore.cpp:1610
&gt; +    Vector&lt;uint8_t&gt; m_value;

Nit: Rename to m_currentValue, as you&apos;re using m_currentValue above.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>790327</commentid>
    <comment_count>15</comment_count>
      <attachid>178915</attachid>
    <who name="Kentaro Hara">haraken</who>
    <bug_when>2012-12-12 23:32:03 -0800</bug_when>
    <thetext>Comment on attachment 178915
Patch

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

(It looks like a couple of my comments were gone away...)

&gt; Source/WebCore/bindings/js/SerializedScriptValue.h:107
&gt; +    static PassRefPtr&lt;SerializedScriptValue&gt; createFromWire(const Vector&lt;uint8_t&gt;&amp; data)

It&apos;s a bit confusing that there are two createFromWire()s. Shall we rename the method?

&gt; Source/WebCore/bindings/js/SerializedScriptValue.h:112
&gt; +    const Vector&lt;uint8_t&gt;&amp; toWireBytes() const { return m_data; }

Is this correct? You&apos;re implementing toWireBytes() in the cpp file too.

&gt; Source/WebCore/bindings/v8/SerializedScriptValue.cpp:2326
&gt; +    return result;

Can we avoid copying the vector ?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>792121</commentid>
    <comment_count>16</comment_count>
    <who name="Michael Pruett">michael</who>
    <bug_when>2012-12-15 07:41:42 -0800</bug_when>
    <thetext>(In reply to comment #15)
&gt; (From update of attachment 178915 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=178915&amp;action=review
&gt; 
&gt; (It looks like a couple of my comments were gone away...)
&gt; 
&gt; &gt; Source/WebCore/bindings/js/SerializedScriptValue.h:107
&gt; &gt; +    static PassRefPtr&lt;SerializedScriptValue&gt; createFromWire(const Vector&lt;uint8_t&gt;&amp; data)
&gt; 
&gt; It&apos;s a bit confusing that there are two createFromWire()s. Shall we rename the method?

Sure, I&apos;ll rename it to createFromWireBytes().

&gt; &gt; Source/WebCore/bindings/js/SerializedScriptValue.h:112
&gt; &gt; +    const Vector&lt;uint8_t&gt;&amp; toWireBytes() const { return m_data; }
&gt; 
&gt; Is this correct? You&apos;re implementing toWireBytes() in the cpp file too.

Yes I believe this is correct. The toWireBytes() method is defined in the header file for the JSC SerializedScriptValue but in the source file for the V8 SerializedScriptValue.

&gt; &gt; Source/WebCore/bindings/v8/SerializedScriptValue.cpp:2326
&gt; &gt; +    return result;
&gt; 
&gt; Can we avoid copying the vector ?

I don&apos;t think so, but the copying that is now happening here used to happen in encodeString(), so I don&apos;t think there&apos;s any change.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>792124</commentid>
    <comment_count>17</comment_count>
      <attachid>179599</attachid>
    <who name="Michael Pruett">michael</who>
    <bug_when>2012-12-15 07:44:47 -0800</bug_when>
    <thetext>Created attachment 179599
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>792392</commentid>
    <comment_count>18</comment_count>
      <attachid>179599</attachid>
    <who name="Kentaro Hara">haraken</who>
    <bug_when>2012-12-16 16:38:27 -0800</bug_when>
    <thetext>Comment on attachment 179599
Patch

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

&gt; Source/WebCore/Modules/indexeddb/IDBBackingStore.cpp:1392
&gt; +    virtual const Vector&lt;uint8_t&gt;* value() const { ASSERT_NOT_REACHED(); return 0; }

I would prefer returning &apos;const Vector&lt;uint8_t&gt;&amp;&apos; because m_currentValue is a member variable. Here you can write:

  virtual const Vector&lt;uint8_t&gt;&amp; value() const { ASSERT_NOT_REACHED(); return new Vector&lt;uint8_t&gt;(); }

Performance of this code wouldn&apos;t be important as this is a code that must not be reached.

&gt; Source/WebCore/Modules/indexeddb/IDBBackingStore.cpp:1447
&gt; +    virtual const Vector&lt;uint8_t&gt;* value() const { return &amp;m_currentValue; }

Ditto.

&gt; Source/WebCore/Modules/indexeddb/IDBBackingStore.cpp:1508
&gt; +    virtual const Vector&lt;uint8_t&gt;* value() const { ASSERT_NOT_REACHED(); return 0; }

Ditto.

&gt; Source/WebCore/Modules/indexeddb/IDBBackingStore.cpp:1587
&gt; +    virtual const Vector&lt;uint8_t&gt;* value() const { return &amp;m_currentValue; }

Ditto.

&gt; Source/WebCore/Modules/indexeddb/IDBBackingStore.h:118
&gt; +        virtual const Vector&lt;uint8_t&gt;* value() const = 0;

Ditto.

&gt; Source/WebCore/bindings/js/SerializedScriptValue.h:110
&gt; +        Vector&lt;uint8_t&gt; bytes(data);
&gt; +        return adopt(bytes);

Let&apos;s apply the comment from Alec Flett.

&gt; Source/WebCore/bindings/v8/SerializedScriptValue.cpp:2262
&gt; +        dst[i] = ntohs(src[i]);

Alec Flett: Does this ntohs() looks OK ?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>792424</commentid>
    <comment_count>19</comment_count>
      <attachid>179678</attachid>
    <who name="Michael Pruett">michael</who>
    <bug_when>2012-12-16 18:21:05 -0800</bug_when>
    <thetext>Created attachment 179678
Patch

I&apos;ve changed the return type of IDBBackingStore::Cursor::value() from const Vector&lt;uint8_t&gt;* to const Vector&lt;uint8_t&gt;&amp; and have added a constructor for JSC SerializedScriptValue which takes const Vector&lt;uint8_t&gt;&amp; rather than Vector&lt;uint8_t&gt;&amp;.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>792425</commentid>
    <comment_count>20</comment_count>
      <attachid>179678</attachid>
    <who name="Kentaro Hara">haraken</who>
    <bug_when>2012-12-16 18:23:09 -0800</bug_when>
    <thetext>Comment on attachment 179678
Patch

LGTM. Let&apos;s wait for alec&apos;s comment before landing.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>792767</commentid>
    <comment_count>21</comment_count>
    <who name="Alec Flett">alecflett</who>
    <bug_when>2012-12-17 09:02:18 -0800</bug_when>
    <thetext>yes this is much better.

You&apos;ll notice I filed bug 105186 to address my own note to self in comment 8.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>793117</commentid>
    <comment_count>22</comment_count>
      <attachid>179678</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-12-17 16:00:53 -0800</bug_when>
    <thetext>Comment on attachment 179678
Patch

Clearing flags on attachment: 179678

Committed r137954: &lt;http://trac.webkit.org/changeset/137954&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>793118</commentid>
    <comment_count>23</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-12-17 16:00:58 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>178182</attachid>
            <date>2012-12-07 01:32:41 -0800</date>
            <delta_ts>2012-12-07 01:38:13 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>idb-ssv.patch</filename>
            <type>text/plain</type>
            <size>20804</size>
            <attacher name="Michael Pruett">michael</attacher>
            
              <data encoding="base64">RnJvbTogTWljaGFlbCBQcnVldHQgPG1pY2hhZWxANjhrLm9yZz4KRGF0ZTogRnJpLCA3IERlYyAy
MDEyIDAwOjMxOjU3IC0wODAwClN1YmplY3Q6IEluZGV4ZWREQjogRG9uJ3QgdXNlIHN0cmluZ3Mg
dG8gcmVwcmVzZW50IHNlcmlhbGl6ZWQgdmFsdWVzCgotLS0KIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZyAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICA1MCArKysrKysrKysrKysrKysrKysr
KwogLi4uL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCQmFja2luZ1N0b3JlLmNwcCAgfCAg
IDI4ICsrKysrLS0tLS0tCiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJCYWNr
aW5nU3RvcmUuaCB8ICAgIDYgKy0tCiAuLi4vTW9kdWxlcy9pbmRleGVkZGIvSURCQ3Vyc29yQmFj
a2VuZEltcGwuY3BwICAgICB8ICAgIDIgKy0KIC4uLi9Nb2R1bGVzL2luZGV4ZWRkYi9JREJJbmRl
eEJhY2tlbmRJbXBsLmNwcCAgICAgIHwgICAgNCArLQogLi4uL1dlYkNvcmUvTW9kdWxlcy9pbmRl
eGVkZGIvSURCTGV2ZWxEQkNvZGluZy5jcHAgfCAgIDE1ICsrKysrKwogLi4uL1dlYkNvcmUvTW9k
dWxlcy9pbmRleGVkZGIvSURCTGV2ZWxEQkNvZGluZy5oICAgfCAgICAyICsKIC4uLi9pbmRleGVk
ZGIvSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbC5jcHAgICAgICAgIHwgICAgNiArLS0KIC4uLi9X
ZWJDb3JlL2JpbmRpbmdzL2pzL1NlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5jcHAgIHwgICAyMSArKy0t
LS0tLQogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvU2VyaWFsaXplZFNjcmlwdFZhbHVlLmgg
fCAgICA3ICsrKwogLi4uL1dlYkNvcmUvYmluZGluZ3MvdjgvU2VyaWFsaXplZFNjcmlwdFZhbHVl
LmNwcCAgfCAgIDI5ICsrKysrKysrKysrKwogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvU2Vy
aWFsaXplZFNjcmlwdFZhbHVlLmggfCAgICAyICsKIDEyIGZpbGVzIGNoYW5nZWQsIDEzMiBpbnNl
cnRpb25zKCspLCA0MCBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMzkyZTBmOS4uZmNkYTNh
MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJD
b3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDUzIEBACisyMDEyLTEyLTA3ICBNaWNoYWVsIFBydWV0
dCAgPG1pY2hhZWxANjhrLm9yZz4KKworICAgICAgICBJbmRleGVkREI6IERvbid0IHVzZSBzdHJp
bmdzIHRvIHJlcHJlc2VudCBzZXJpYWxpemVkIHZhbHVlcworICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTA0MzU0CisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
Tk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVXNlIFZlY3Rvcjx1aW50OF90PiByYXRoZXIgdGhh
biBTdHJpbmcgdG8gcmVwcmVzZW50IHNlcmlhbGl6ZWQgdmFsdWVzCisgICAgICAgIGluIEluZGV4
ZWREQi4gVGhpcyBjaGFuZ2UgaXMgbmVjZXNzYXJ5IHRvIGltcGxlbWVudCBJbmRleGVkREIgZm9y
IEpTQy4KKworICAgICAgICBUZXN0czogc3RvcmFnZS9pbmRleGVkZGIvKgorCisgICAgICAgICog
TW9kdWxlcy9pbmRleGVkZGIvSURCQmFja2luZ1N0b3JlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OklEQkJhY2tpbmdTdG9yZTo6Z2V0UmVjb3JkKToKKyAgICAgICAgKFdlYkNvcmU6OklEQkJhY2tp
bmdTdG9yZTo6cHV0UmVjb3JkKToKKyAgICAgICAgKFdlYkNvcmU6Ok9iamVjdFN0b3JlS2V5Q3Vy
c29ySW1wbDo6dmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6T2JqZWN0U3RvcmVDdXJzb3JJbXBs
Ojp2YWx1ZSk6CisgICAgICAgIChPYmplY3RTdG9yZUN1cnNvckltcGwpOgorICAgICAgICAoV2Vi
Q29yZTo6T2JqZWN0U3RvcmVDdXJzb3JJbXBsOjpsb2FkQ3VycmVudFJvdyk6CisgICAgICAgIChX
ZWJDb3JlOjpJbmRleEtleUN1cnNvckltcGw6OnZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6Oklu
ZGV4Q3Vyc29ySW1wbDo6dmFsdWUpOgorICAgICAgICAoSW5kZXhDdXJzb3JJbXBsKToKKyAgICAg
ICAgKFdlYkNvcmU6OkluZGV4Q3Vyc29ySW1wbDo6bG9hZEN1cnJlbnRSb3cpOgorICAgICAgICAq
IE1vZHVsZXMvaW5kZXhlZGRiL0lEQkJhY2tpbmdTdG9yZS5oOgorICAgICAgICAoSURCQmFja2lu
Z1N0b3JlKToKKyAgICAgICAgKEN1cnNvcik6CisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIv
SURCQ3Vyc29yQmFja2VuZEltcGwuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SURCQ3Vyc29yQmFj
a2VuZEltcGw6OkN1cnNvclByZWZldGNoSXRlcmF0aW9uT3BlcmF0aW9uOjpwZXJmb3JtKToKKyAg
ICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9JREJJbmRleEJhY2tlbmRJbXBsLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OklEQkluZGV4QmFja2VuZEltcGw6OkluZGV4UmVmZXJlbmNlZFZhbHVlUmV0
cmlldmFsT3BlcmF0aW9uOjpwZXJmb3JtKToKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9J
REJMZXZlbERCQ29kaW5nLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OklEQkxldmVsREJDb2Rpbmc6
OmVuY29kZUlEQlZhbHVlKToKKyAgICAgICAgKElEQkxldmVsREJDb2RpbmcpOgorICAgICAgICAo
V2ViQ29yZTo6SURCTGV2ZWxEQkNvZGluZzo6ZGVjb2RlSURCVmFsdWUpOgorICAgICAgICAqIE1v
ZHVsZXMvaW5kZXhlZGRiL0lEQkxldmVsREJDb2RpbmcuaDoKKyAgICAgICAgKElEQkxldmVsREJD
b2RpbmcpOgorICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL0lEQk9iamVjdFN0b3JlQmFja2Vu
ZEltcGwuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6
T2JqZWN0U3RvcmVSZXRyaWV2YWxPcGVyYXRpb246OnBlcmZvcm0pOgorICAgICAgICAoV2ViQ29y
ZTo6SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6T2JqZWN0U3RvcmVTdG9yYWdlT3BlcmF0aW9u
OjpwZXJmb3JtKToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9TZXJpYWxpemVkU2NyaXB0VmFsdWUu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6U2VyaWFsaXplZFNjcmlwdFZhbHVlOjp0b1dpcmVTdHJp
bmcpOgorICAgICAgICAoV2ViQ29yZTo6U2VyaWFsaXplZFNjcmlwdFZhbHVlOjpjcmVhdGVGcm9t
V2lyZSk6CisgICAgICAgICogYmluZGluZ3MvanMvU2VyaWFsaXplZFNjcmlwdFZhbHVlLmg6Cisg
ICAgICAgICogYmluZGluZ3MvdjgvU2VyaWFsaXplZFNjcmlwdFZhbHVlLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OlNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTo6Y3JlYXRlRnJvbVdpcmUpOgorICAgICAg
ICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpTZXJpYWxpemVkU2NyaXB0VmFsdWU6OnRv
V2lyZUJ5dGVzKToKKyAgICAgICAgKiBiaW5kaW5ncy92OC9TZXJpYWxpemVkU2NyaXB0VmFsdWUu
aDoKKyAgICAgICAgKFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZSk6CisKIDIwMTItMTItMDYgIEtlbnQg
VGFtdXJhICA8dGtlbnRAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFJlZmFjdG9yaW5nOiBDbGVh
biB1cCBwbGFjZWhvbGRlciBhdHRyaWJ1dGUgdXNhZ2UKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkJhY2tpbmdTdG9yZS5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJCYWNraW5nU3RvcmUuY3BwCmluZGV4IDg4ODJkZWIuLmU2
YzcwMGMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkJh
Y2tpbmdTdG9yZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURC
QmFja2luZ1N0b3JlLmNwcApAQCAtNjY1LDcgKzY2NSw3IEBAIGJvb2wgSURCQmFja2luZ1N0b3Jl
OjpkZWxldGVPYmplY3RTdG9yZShJREJCYWNraW5nU3RvcmU6OlRyYW5zYWN0aW9uKiB0cmFuc2Fj
dGlvCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLWJvb2wgSURCQmFja2luZ1N0b3JlOjpnZXRSZWNv
cmQoSURCQmFja2luZ1N0b3JlOjpUcmFuc2FjdGlvbiogdHJhbnNhY3Rpb24sIGludDY0X3QgZGF0
YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBjb25zdCBJREJLZXkmIGtleSwgU3RyaW5n
JiByZWNvcmQpCitib29sIElEQkJhY2tpbmdTdG9yZTo6Z2V0UmVjb3JkKElEQkJhY2tpbmdTdG9y
ZTo6VHJhbnNhY3Rpb24qIHRyYW5zYWN0aW9uLCBpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qg
b2JqZWN0U3RvcmVJZCwgY29uc3QgSURCS2V5JiBrZXksIFZlY3Rvcjx1aW50OF90PiYgcmVjb3Jk
KQogewogICAgIElEQl9UUkFDRSgiSURCQmFja2luZ1N0b3JlOjpnZXRSZWNvcmQiKTsKICAgICBM
ZXZlbERCVHJhbnNhY3Rpb24qIGxldmVsREJUcmFuc2FjdGlvbiA9IElEQkJhY2tpbmdTdG9yZTo6
VHJhbnNhY3Rpb246OmxldmVsREJUcmFuc2FjdGlvbkZyb20odHJhbnNhY3Rpb24pOwpAQCAtNjc2
LDcgKzY3Niw3IEBAIGJvb2wgSURCQmFja2luZ1N0b3JlOjpnZXRSZWNvcmQoSURCQmFja2luZ1N0
b3JlOjpUcmFuc2FjdGlvbiogdHJhbnNhY3Rpb24sIGludDY0CiAgICAgYm9vbCBmb3VuZCA9IGZh
bHNlOwogICAgIGJvb2wgb2sgPSBsZXZlbERCVHJhbnNhY3Rpb24tPnNhZmVHZXQobGV2ZWxkYktl
eSwgZGF0YSwgZm91bmQpOwogICAgIGlmICghb2spIHsKLSAgICAgICAgcmVjb3JkID0gU3RyaW5n
KCk7CisgICAgICAgIHJlY29yZC5jbGVhcigpOwogICAgICAgICBJbnRlcm5hbEVycm9yKElEQkxl
dmVsREJCYWNraW5nU3RvcmVSZWFkRXJyb3JHZXRSZWNvcmQpOwogICAgICAgICByZXR1cm4gZmFs
c2U7CiAgICAgfQpAQCAtNjg1LDExICs2ODUsMTEgQEAgYm9vbCBJREJCYWNraW5nU3RvcmU6Omdl
dFJlY29yZChJREJCYWNraW5nU3RvcmU6OlRyYW5zYWN0aW9uKiB0cmFuc2FjdGlvbiwgaW50NjQK
ICAgICBjb25zdCBjaGFyKiBwID0gZGVjb2RlVmFySW50KGRhdGEuYmVnaW4oKSwgZGF0YS5lbmQo
KSwgdmVyc2lvbik7CiAgICAgaWYgKCFwKSB7CiAgICAgICAgIEludGVybmFsRXJyb3IoSURCTGV2
ZWxEQkJhY2tpbmdTdG9yZVJlYWRFcnJvckdldFJlY29yZCk7Ci0gICAgICAgIHJlY29yZCA9IFN0
cmluZygpOworICAgICAgICByZWNvcmQuY2xlYXIoKTsKICAgICAgICAgcmV0dXJuIGZhbHNlOwog
ICAgIH0KIAotICAgIHJlY29yZCA9IGRlY29kZVN0cmluZyhwLCBkYXRhLmVuZCgpKTsKKyAgICBy
ZWNvcmQgPSBkZWNvZGVJREJWYWx1ZShwLCBkYXRhLmVuZCgpKTsKICAgICByZXR1cm4gdHJ1ZTsK
IH0KIApAQCAtNzExLDcgKzcxMSw3IEBAIHN0YXRpYyBpbnQ2NF90IGdldE5ld1ZlcnNpb25OdW1i
ZXIoTGV2ZWxEQlRyYW5zYWN0aW9uKiB0cmFuc2FjdGlvbiwgaW50NjRfdCBkYXRhCiAgICAgcmV0
dXJuIHZlcnNpb247CiB9CiAKLXZvaWQgSURCQmFja2luZ1N0b3JlOjpwdXRSZWNvcmQoSURCQmFj
a2luZ1N0b3JlOjpUcmFuc2FjdGlvbiogdHJhbnNhY3Rpb24sIGludDY0X3QgZGF0YWJhc2VJZCwg
aW50NjRfdCBvYmplY3RTdG9yZUlkLCBjb25zdCBJREJLZXkmIGtleSwgY29uc3QgU3RyaW5nJiB2
YWx1ZSwgUmVjb3JkSWRlbnRpZmllciogcmVjb3JkSWRlbnRpZmllcikKK3ZvaWQgSURCQmFja2lu
Z1N0b3JlOjpwdXRSZWNvcmQoSURCQmFja2luZ1N0b3JlOjpUcmFuc2FjdGlvbiogdHJhbnNhY3Rp
b24sIGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBjb25zdCBJREJL
ZXkmIGtleSwgY29uc3QgVmVjdG9yPHVpbnQ4X3Q+JiB2YWx1ZSwgUmVjb3JkSWRlbnRpZmllciog
cmVjb3JkSWRlbnRpZmllcikKIHsKICAgICBJREJfVFJBQ0UoIklEQkJhY2tpbmdTdG9yZTo6cHV0
UmVjb3JkIik7CiAgICAgQVNTRVJUKGtleS5pc1ZhbGlkKCkpOwpAQCAtNzIxLDcgKzcyMSw3IEBA
IHZvaWQgSURCQmFja2luZ1N0b3JlOjpwdXRSZWNvcmQoSURCQmFja2luZ1N0b3JlOjpUcmFuc2Fj
dGlvbiogdHJhbnNhY3Rpb24sIGludDY0CiAKICAgICBWZWN0b3I8Y2hhcj4gdjsKICAgICB2LmFw
cGVuZChlbmNvZGVWYXJJbnQodmVyc2lvbikpOwotICAgIHYuYXBwZW5kKGVuY29kZVN0cmluZyh2
YWx1ZSkpOworICAgIHYuYXBwZW5kKGVuY29kZUlEQlZhbHVlKHZhbHVlKSk7CiAKICAgICBsZXZl
bERCVHJhbnNhY3Rpb24tPnB1dChvYmplY3RTdG9yZWRhdGFLZXksIHYpOwogCkBAIC0xMjY5LDcg
KzEyNjksNyBAQCBwdWJsaWM6CiAgICAgfQogCiAgICAgLy8gSURCQmFja2luZ1N0b3JlOjpDdXJz
b3IKLSAgICB2aXJ0dWFsIFN0cmluZyB2YWx1ZSgpIGNvbnN0IHsgQVNTRVJUX05PVF9SRUFDSEVE
KCk7IHJldHVybiBTdHJpbmcoKTsgfQorICAgIHZpcnR1YWwgVmVjdG9yPHVpbnQ4X3Q+IHZhbHVl
KCkgY29uc3QgeyBBU1NFUlRfTk9UX1JFQUNIRUQoKTsgcmV0dXJuIFZlY3Rvcjx1aW50OF90Pigp
OyB9CiAgICAgdmlydHVhbCBib29sIGxvYWRDdXJyZW50Um93KCk7CiAKIHByaXZhdGU6CkBAIC0x
MzI1LDcgKzEzMjUsNyBAQCBwdWJsaWM6CiAgICAgfQogCiAgICAgLy8gSURCQmFja2luZ1N0b3Jl
OjpDdXJzb3IKLSAgICB2aXJ0dWFsIFN0cmluZyB2YWx1ZSgpIGNvbnN0IHsgcmV0dXJuIG1fY3Vy
cmVudFZhbHVlOyB9CisgICAgdmlydHVhbCBWZWN0b3I8dWludDhfdD4gdmFsdWUoKSBjb25zdCB7
IHJldHVybiBtX2N1cnJlbnRWYWx1ZTsgfQogICAgIHZpcnR1YWwgYm9vbCBsb2FkQ3VycmVudFJv
dygpOwogCiBwcml2YXRlOgpAQCAtMTM0MCw3ICsxMzQwLDcgQEAgcHJpdmF0ZToKICAgICB7CiAg
ICAgfQogCi0gICAgU3RyaW5nIG1fY3VycmVudFZhbHVlOworICAgIFZlY3Rvcjx1aW50OF90PiBt
X2N1cnJlbnRWYWx1ZTsKIH07CiAKIGJvb2wgT2JqZWN0U3RvcmVDdXJzb3JJbXBsOjpsb2FkQ3Vy
cmVudFJvdygpCkBAIC0xMzY3LDcgKzEzNjcsNyBAQCBib29sIE9iamVjdFN0b3JlQ3Vyc29ySW1w
bDo6bG9hZEN1cnJlbnRSb3coKQogICAgIC8vIEZJWE1FOiBUaGlzIHJlLWVuY29kZXMgd2hhdCB3
YXMganVzdCBkZWNvZGVkOyB0cnkgYW5kIG9wdGltaXplLgogICAgIG1fcmVjb3JkSWRlbnRpZmll
ci5yZXNldChlbmNvZGVJREJLZXkoKm1fY3VycmVudEtleSksIHZlcnNpb24pOwogCi0gICAgbV9j
dXJyZW50VmFsdWUgPSBkZWNvZGVTdHJpbmcodmFsdWVQb3NpdGlvbiwgbV9pdGVyYXRvci0+dmFs
dWUoKS5lbmQoKSk7CisgICAgbV9jdXJyZW50VmFsdWUgPSBkZWNvZGVJREJWYWx1ZSh2YWx1ZVBv
c2l0aW9uLCBtX2l0ZXJhdG9yLT52YWx1ZSgpLmVuZCgpKTsKIAogICAgIHJldHVybiB0cnVlOwog
fQpAQCAtMTM4NSw3ICsxMzg1LDcgQEAgcHVibGljOgogICAgIH0KIAogICAgIC8vIElEQkJhY2tp
bmdTdG9yZTo6Q3Vyc29yCi0gICAgdmlydHVhbCBTdHJpbmcgdmFsdWUoKSBjb25zdCB7IEFTU0VS
VF9OT1RfUkVBQ0hFRCgpOyByZXR1cm4gU3RyaW5nKCk7IH0KKyAgICB2aXJ0dWFsIFZlY3Rvcjx1
aW50OF90PiB2YWx1ZSgpIGNvbnN0IHsgQVNTRVJUX05PVF9SRUFDSEVEKCk7IHJldHVybiBWZWN0
b3I8dWludDhfdD4oKTsgfQogICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxJREJLZXk+IHByaW1hcnlL
ZXkoKSBjb25zdCB7IHJldHVybiBtX3ByaW1hcnlLZXk7IH0KICAgICB2aXJ0dWFsIGNvbnN0IElE
QkJhY2tpbmdTdG9yZTo6UmVjb3JkSWRlbnRpZmllciYgcmVjb3JkSWRlbnRpZmllcigpIGNvbnN0
IHsgQVNTRVJUX05PVF9SRUFDSEVEKCk7IHJldHVybiBtX3JlY29yZElkZW50aWZpZXI7IH0KICAg
ICB2aXJ0dWFsIGJvb2wgbG9hZEN1cnJlbnRSb3coKTsKQEAgLTE0NjQsNyArMTQ2NCw3IEBAIHB1
YmxpYzoKICAgICB9CiAKICAgICAvLyBJREJCYWNraW5nU3RvcmU6OkN1cnNvcgotICAgIHZpcnR1
YWwgU3RyaW5nIHZhbHVlKCkgY29uc3QgeyByZXR1cm4gbV92YWx1ZTsgfQorICAgIHZpcnR1YWwg
VmVjdG9yPHVpbnQ4X3Q+IHZhbHVlKCkgY29uc3QgeyByZXR1cm4gbV92YWx1ZTsgfQogICAgIHZp
cnR1YWwgUGFzc1JlZlB0cjxJREJLZXk+IHByaW1hcnlLZXkoKSBjb25zdCB7IHJldHVybiBtX3By
aW1hcnlLZXk7IH0KICAgICB2aXJ0dWFsIGNvbnN0IElEQkJhY2tpbmdTdG9yZTo6UmVjb3JkSWRl
bnRpZmllciYgcmVjb3JkSWRlbnRpZmllcigpIGNvbnN0IHsgQVNTRVJUX05PVF9SRUFDSEVEKCk7
IHJldHVybiBtX3JlY29yZElkZW50aWZpZXI7IH0KICAgICBib29sIGxvYWRDdXJyZW50Um93KCk7
CkBAIC0xNDg0LDcgKzE0ODQsNyBAQCBwcml2YXRlOgogICAgIH0KIAogICAgIFJlZlB0cjxJREJL
ZXk+IG1fcHJpbWFyeUtleTsKLSAgICBTdHJpbmcgbV92YWx1ZTsKKyAgICBWZWN0b3I8dWludDhf
dD4gbV92YWx1ZTsKICAgICBWZWN0b3I8Y2hhcj4gbV9wcmltYXJ5TGV2ZWxEQktleTsKIH07CiAK
QEAgLTE1MzMsNyArMTUzMyw3IEBAIGJvb2wgSW5kZXhDdXJzb3JJbXBsOjpsb2FkQ3VycmVudFJv
dygpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAKLSAgICBtX3ZhbHVlID0gZGVjb2Rl
U3RyaW5nKHQsIHJlc3VsdC5lbmQoKSk7CisgICAgbV92YWx1ZSA9IGRlY29kZUlEQlZhbHVlKHQs
IHJlc3VsdC5lbmQoKSk7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkJhY2tpbmdTdG9yZS5oIGIvU291cmNlL1dl
YkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCQmFja2luZ1N0b3JlLmgKaW5kZXggZTZlZDRkOC4u
OWNmMjExNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURC
QmFja2luZ1N0b3JlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURC
QmFja2luZ1N0b3JlLmgKQEAgLTc3LDggKzc3LDggQEAgcHVibGljOgogICAgICAgICBpbnQ2NF90
IG1fdmVyc2lvbjsKICAgICB9OwogCi0gICAgdmlydHVhbCBib29sIGdldFJlY29yZChJREJCYWNr
aW5nU3RvcmU6OlRyYW5zYWN0aW9uKiwgaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVj
dFN0b3JlSWQsIGNvbnN0IElEQktleSYsIFN0cmluZyYgcmVjb3JkKSBXQVJOX1VOVVNFRF9SRVRV
Uk47Ci0gICAgdmlydHVhbCB2b2lkIHB1dFJlY29yZChJREJCYWNraW5nU3RvcmU6OlRyYW5zYWN0
aW9uKiwgaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGNvbnN0IElE
QktleSYsIGNvbnN0IFN0cmluZyYgdmFsdWUsIFJlY29yZElkZW50aWZpZXIqKTsKKyAgICB2aXJ0
dWFsIGJvb2wgZ2V0UmVjb3JkKElEQkJhY2tpbmdTdG9yZTo6VHJhbnNhY3Rpb24qLCBpbnQ2NF90
IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgY29uc3QgSURCS2V5JiwgVmVjdG9y
PHVpbnQ4X3Q+JiByZWNvcmQpIFdBUk5fVU5VU0VEX1JFVFVSTjsKKyAgICB2aXJ0dWFsIHZvaWQg
cHV0UmVjb3JkKElEQkJhY2tpbmdTdG9yZTo6VHJhbnNhY3Rpb24qLCBpbnQ2NF90IGRhdGFiYXNl
SWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgY29uc3QgSURCS2V5JiwgY29uc3QgVmVjdG9yPHVp
bnQ4X3Q+JiB2YWx1ZSwgUmVjb3JkSWRlbnRpZmllciopOwogICAgIHZpcnR1YWwgdm9pZCBjbGVh
ck9iamVjdFN0b3JlKElEQkJhY2tpbmdTdG9yZTo6VHJhbnNhY3Rpb24qLCBpbnQ2NF90IGRhdGFi
YXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCk7CiAgICAgdmlydHVhbCB2b2lkIGRlbGV0ZVJl
Y29yZChJREJCYWNraW5nU3RvcmU6OlRyYW5zYWN0aW9uKiwgaW50NjRfdCBkYXRhYmFzZUlkLCBp
bnQ2NF90IG9iamVjdFN0b3JlSWQsIGNvbnN0IFJlY29yZElkZW50aWZpZXImKTsKICAgICB2aXJ0
dWFsIGJvb2wgZ2V0S2V5R2VuZXJhdG9yQ3VycmVudE51bWJlcihJREJCYWNraW5nU3RvcmU6OlRy
YW5zYWN0aW9uKiwgaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGlu
dDY0X3QmIGN1cnJlbnROdW1iZXIpIFdBUk5fVU5VU0VEX1JFVFVSTjsKQEAgLTExNSw3ICsxMTUs
NyBAQCBwdWJsaWM6CiAKICAgICAgICAgdmlydHVhbCBQYXNzUmVmUHRyPEN1cnNvcj4gY2xvbmUo
KSA9IDA7CiAgICAgICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxJREJLZXk+IHByaW1hcnlLZXkoKSBj
b25zdCB7IHJldHVybiBtX2N1cnJlbnRLZXk7IH0KLSAgICAgICAgdmlydHVhbCBTdHJpbmcgdmFs
dWUoKSBjb25zdCA9IDA7CisgICAgICAgIHZpcnR1YWwgVmVjdG9yPHVpbnQ4X3Q+IHZhbHVlKCkg
Y29uc3QgPSAwOwogICAgICAgICB2aXJ0dWFsIGNvbnN0IFJlY29yZElkZW50aWZpZXImIHJlY29y
ZElkZW50aWZpZXIoKSBjb25zdCB7IHJldHVybiBtX3JlY29yZElkZW50aWZpZXI7IH0KICAgICAg
ICAgdmlydHVhbCB+Q3Vyc29yKCkgeyB9CiAgICAgICAgIHZpcnR1YWwgYm9vbCBsb2FkQ3VycmVu
dFJvdygpID0gMDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRi
L0lEQkN1cnNvckJhY2tlbmRJbXBsLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhl
ZGRiL0lEQkN1cnNvckJhY2tlbmRJbXBsLmNwcAppbmRleCBkMjc1ODgzLi40OTc0ODhlIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJDdXJzb3JCYWNrZW5k
SW1wbC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCQ3Vyc29y
QmFja2VuZEltcGwuY3BwCkBAIC0yMTYsNyArMjE2LDcgQEAgdm9pZCBJREJDdXJzb3JCYWNrZW5k
SW1wbDo6Q3Vyc29yUHJlZmV0Y2hJdGVyYXRpb25PcGVyYXRpb246OnBlcmZvcm0oSURCVHJhbnNh
Y3QKICAgICAgICAgc2l6ZUVzdGltYXRlICs9IG1fY3Vyc29yLT5tX2N1cnNvci0+a2V5KCktPnNp
emVFc3RpbWF0ZSgpOwogICAgICAgICBzaXplRXN0aW1hdGUgKz0gbV9jdXJzb3ItPm1fY3Vyc29y
LT5wcmltYXJ5S2V5KCktPnNpemVFc3RpbWF0ZSgpOwogICAgICAgICBpZiAobV9jdXJzb3ItPm1f
Y3Vyc29yVHlwZSAhPSBJREJDdXJzb3JCYWNrZW5kSW50ZXJmYWNlOjpJbmRleEtleUN1cnNvcikK
LSAgICAgICAgICAgIHNpemVFc3RpbWF0ZSArPSBtX2N1cnNvci0+bV9jdXJzb3ItPnZhbHVlKCku
bGVuZ3RoKCkgKiBzaXplb2YoVUNoYXIpOworICAgICAgICAgICAgc2l6ZUVzdGltYXRlICs9IG1f
Y3Vyc29yLT5tX2N1cnNvci0+dmFsdWUoKS5zaXplKCk7CiAKICAgICAgICAgaWYgKHNpemVFc3Rp
bWF0ZSA+IG1heFNpemVFc3RpbWF0ZSkKICAgICAgICAgICAgIGJyZWFrOwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCSW5kZXhCYWNrZW5kSW1wbC5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJJbmRleEJhY2tlbmRJbXBsLmNw
cAppbmRleCA5MWVlOGYwLi44NWUxYmUwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL2luZGV4ZWRkYi9JREJJbmRleEJhY2tlbmRJbXBsLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJJbmRleEJhY2tlbmRJbXBsLmNwcApAQCAtMjM3LDE0ICsy
MzcsMTQgQEAgdm9pZCBJREJJbmRleEJhY2tlbmRJbXBsOjpJbmRleFJlZmVyZW5jZWRWYWx1ZVJl
dHJpZXZhbE9wZXJhdGlvbjo6cGVyZm9ybShJREJUcmEKICAgICAgICAgcmV0dXJuOwogICAgIH0K
IAotICAgIFN0cmluZyB2YWx1ZTsKKyAgICBWZWN0b3I8dWludDhfdD4gdmFsdWU7CiAgICAgb2sg
PSBtX2luZGV4LT5iYWNraW5nU3RvcmUoKS0+Z2V0UmVjb3JkKHRyYW5zYWN0aW9uLT5iYWNraW5n
U3RvcmVUcmFuc2FjdGlvbigpLCBtX2luZGV4LT5kYXRhYmFzZUlkKCksIG1faW5kZXgtPm1fb2Jq
ZWN0U3RvcmVCYWNrZW5kLT5pZCgpLCAqcHJpbWFyeUtleSwgdmFsdWUpOwogICAgIGlmICghb2sp
IHsKICAgICAgICAgbV9jYWxsYmFja3MtPm9uRXJyb3IoSURCRGF0YWJhc2VFcnJvcjo6Y3JlYXRl
KElEQkRhdGFiYXNlRXhjZXB0aW9uOjpVbmtub3duRXJyb3IsICJJbnRlcm5hbCBlcnJvciBpbiBn
ZXRSZWNvcmQuIikpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgaWYgKHZhbHVlLmlz
TnVsbCgpKSB7CisgICAgaWYgKHZhbHVlLmlzRW1wdHkoKSkgewogICAgICAgICBtX2NhbGxiYWNr
cy0+b25TdWNjZXNzKCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJMZXZlbERCQ29kaW5nLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkxldmVsREJDb2RpbmcuY3BwCmluZGV4IDdh
ZmZjMjguLjY5ZDhhMGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhl
ZGRiL0lEQkxldmVsREJDb2RpbmcuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5k
ZXhlZGRiL0lEQkxldmVsREJDb2RpbmcuY3BwCkBAIC01NTksNiArNTU5LDIxIEBAIGNvbnN0IGNo
YXIqIGV4dHJhY3RFbmNvZGVkSURCS2V5KGNvbnN0IGNoYXIqIHN0YXJ0LCBjb25zdCBjaGFyKiBs
aW1pdCwgVmVjdG9yPGNoCiAgICAgcmV0dXJuIHA7CiB9CiAKK1ZlY3RvcjxjaGFyPiBlbmNvZGVJ
REJWYWx1ZShjb25zdCBWZWN0b3I8dWludDhfdD4mIHZhbHVlKQoreworICAgIFZlY3RvcjxjaGFy
PiByZXN1bHQ7CisgICAgcmVzdWx0LmFwcGVuZFZlY3Rvcih2YWx1ZSk7CisgICAgcmV0dXJuIHJl
c3VsdDsKK30KKworVmVjdG9yPHVpbnQ4X3Q+IGRlY29kZUlEQlZhbHVlKGNvbnN0IGNoYXIqIHN0
YXJ0LCBjb25zdCBjaGFyKiBsaW1pdCkKK3sKKyAgICBBU1NFUlQobGltaXQgPj0gc3RhcnQpOwor
ICAgIFZlY3Rvcjx1aW50OF90PiByZXN1bHQ7CisgICAgcmVzdWx0LmFwcGVuZChzdGFydCwgbGlt
aXQgLSBzdGFydCk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwogc3RhdGljIElEQktleTo6VHlw
ZSBrZXlUeXBlQnl0ZVRvS2V5VHlwZSh1bnNpZ25lZCBjaGFyIHR5cGUpCiB7CiAgICAgc3dpdGNo
ICh0eXBlKSB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9J
REJMZXZlbERCQ29kaW5nLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJM
ZXZlbERCQ29kaW5nLmgKaW5kZXggNzlmODc2MS4uNTE4NWJhYyAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCTGV2ZWxEQkNvZGluZy5oCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkxldmVsREJDb2RpbmcuaApAQCAtNzEsNiAr
NzEsOCBAQCBjb25zdCBjaGFyKiBleHRyYWN0RW5jb2RlZElEQktleShjb25zdCBjaGFyKiBzdGFy
dCwgY29uc3QgY2hhciogbGltaXQsIFZlY3RvcjxjaAogaW50IGNvbXBhcmVFbmNvZGVkSURCS2V5
cyhjb25zdCBWZWN0b3I8Y2hhcj4mLCBjb25zdCBWZWN0b3I8Y2hhcj4mKTsKIFZlY3RvcjxjaGFy
PiBlbmNvZGVJREJLZXlQYXRoKGNvbnN0IElEQktleVBhdGgmKTsKIElEQktleVBhdGggZGVjb2Rl
SURCS2V5UGF0aChjb25zdCBjaGFyKiwgY29uc3QgY2hhciopOworVmVjdG9yPGNoYXI+IGVuY29k
ZUlEQlZhbHVlKGNvbnN0IFZlY3Rvcjx1aW50OF90PiYpOworVmVjdG9yPHVpbnQ4X3Q+IGRlY29k
ZUlEQlZhbHVlKGNvbnN0IGNoYXIqLCBjb25zdCBjaGFyKik7CiAKIGludCBjb21wYXJlKGNvbnN0
IExldmVsREJTbGljZSYsIGNvbnN0IExldmVsREJTbGljZSYsIGJvb2wgaW5kZXhLZXlzID0gZmFs
c2UpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJP
YmplY3RTdG9yZUJhY2tlbmRJbXBsLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhl
ZGRiL0lEQk9iamVjdFN0b3JlQmFja2VuZEltcGwuY3BwCmluZGV4IDJhZGE1MjUuLjIwYzFjMzYg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQk9iamVjdFN0
b3JlQmFja2VuZEltcGwuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRi
L0lEQk9iamVjdFN0b3JlQmFja2VuZEltcGwuY3BwCkBAIC0zMDgsMTMgKzMwOCwxMyBAQCB2b2lk
IElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6Ok9iamVjdFN0b3JlUmV0cmlldmFsT3BlcmF0aW9u
OjpwZXJmb3JtKElEQlRyYW5zYQogICAgICAgICBrZXkgPSBiYWNraW5nU3RvcmVDdXJzb3ItPmtl
eSgpOwogICAgIH0KIAotICAgIFN0cmluZyB3aXJlRGF0YTsKKyAgICBWZWN0b3I8dWludDhfdD4g
d2lyZURhdGE7CiAgICAgYm9vbCBvayA9IG1fb2JqZWN0U3RvcmUtPmJhY2tpbmdTdG9yZSgpLT5n
ZXRSZWNvcmQodHJhbnNhY3Rpb24tPmJhY2tpbmdTdG9yZVRyYW5zYWN0aW9uKCksIG1fb2JqZWN0
U3RvcmUtPmRhdGFiYXNlSWQoKSwgbV9vYmplY3RTdG9yZS0+aWQoKSwgKmtleSwgd2lyZURhdGEp
OwogICAgIGlmICghb2spIHsKICAgICAgICAgbV9jYWxsYmFja3MtPm9uRXJyb3IoSURCRGF0YWJh
c2VFcnJvcjo6Y3JlYXRlKElEQkRhdGFiYXNlRXhjZXB0aW9uOjpVbmtub3duRXJyb3IsICJJbnRl
cm5hbCBlcnJvciBpbiBnZXRSZWNvcmQuIikpOwogICAgICAgICByZXR1cm47CiAgICAgfQotICAg
IGlmICh3aXJlRGF0YS5pc051bGwoKSkgeworICAgIGlmICh3aXJlRGF0YS5pc0VtcHR5KCkpIHsK
ICAgICAgICAgbV9jYWxsYmFja3MtPm9uU3VjY2VzcygpOwogICAgICAgICByZXR1cm47CiAgICAg
fQpAQCAtNTYwLDcgKzU2MCw3IEBAIHZvaWQgSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6T2Jq
ZWN0U3RvcmVTdG9yYWdlT3BlcmF0aW9uOjpwZXJmb3JtKElEQlRyYW5zYWN0CiAKICAgICAvLyBC
ZWZvcmUgdGhpcyBwb2ludCwgZG9uJ3QgZG8gYW55IG11dGF0aW9uLiAgQWZ0ZXIgdGhpcyBwb2lu
dCwgcm9sbGJhY2sgdGhlIHRyYW5zYWN0aW9uIGluIGNhc2Ugb2YgZXJyb3IuCiAKLSAgICBtX29i
amVjdFN0b3JlLT5iYWNraW5nU3RvcmUoKS0+cHV0UmVjb3JkKHRyYW5zYWN0aW9uLT5iYWNraW5n
U3RvcmVUcmFuc2FjdGlvbigpLCBtX29iamVjdFN0b3JlLT5kYXRhYmFzZUlkKCksIG1fb2JqZWN0
U3RvcmUtPmlkKCksICptX2tleSwgbV92YWx1ZS0+dG9XaXJlU3RyaW5nKCksICZyZWNvcmRJZGVu
dGlmaWVyKTsKKyAgICBtX29iamVjdFN0b3JlLT5iYWNraW5nU3RvcmUoKS0+cHV0UmVjb3JkKHRy
YW5zYWN0aW9uLT5iYWNraW5nU3RvcmVUcmFuc2FjdGlvbigpLCBtX29iamVjdFN0b3JlLT5kYXRh
YmFzZUlkKCksIG1fb2JqZWN0U3RvcmUtPmlkKCksICptX2tleSwgbV92YWx1ZS0+dG9XaXJlQnl0
ZXMoKSwgJnJlY29yZElkZW50aWZpZXIpOwogCiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBp
bmRleFdyaXRlcnMuc2l6ZSgpOyArK2kpIHsKICAgICAgICAgSW5kZXhXcml0ZXIqIGluZGV4V3Jp
dGVyID0gaW5kZXhXcml0ZXJzW2ldLmdldCgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
YmluZGluZ3MvanMvU2VyaWFsaXplZFNjcmlwdFZhbHVlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL2pzL1NlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5jcHAKaW5kZXggN2RjOWFlZC4uYThlZDk2
MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvU2VyaWFsaXplZFNjcmlw
dFZhbHVlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9TZXJpYWxpemVkU2Ny
aXB0VmFsdWUuY3BwCkBAIC0xMDAzLDE4ICsxMDAzLDYgQEAgdHlwZWRlZiBWZWN0b3I8V1RGOjpB
cnJheUJ1ZmZlckNvbnRlbnRzPiBBcnJheUJ1ZmZlckNvbnRlbnRzQXJyYXk7CiAKIGNsYXNzIENs
b25lRGVzZXJpYWxpemVyIDogQ2xvbmVCYXNlIHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgU3RyaW5n
IHRvV2lyZVN0cmluZyhjb25zdCBWZWN0b3I8dW5zaWduZWQgY2hhcj4mIHZhbHVlKQotICAgIHsK
LSAgICAgICAgY29uc3QgdWludDhfdCogc3RhcnQgPSB2YWx1ZS5iZWdpbigpOwotICAgICAgICBj
b25zdCB1aW50OF90KiBlbmQgPSB2YWx1ZS5lbmQoKTsKLSAgICAgICAgY29uc3QgdWludDMyX3Qg
bGVuZ3RoID0gdmFsdWUuc2l6ZSgpIC8gc2l6ZW9mKFVDaGFyKTsKLSAgICAgICAgU3RyaW5nIHN0
cjsKLSAgICAgICAgaWYgKCFDbG9uZURlc2VyaWFsaXplcjo6cmVhZFN0cmluZyhzdGFydCwgZW5k
LCBzdHIsIGxlbmd0aCkpCi0gICAgICAgICAgICByZXR1cm4gU3RyaW5nKCk7Ci0KLSAgICAgICAg
cmV0dXJuIFN0cmluZyhzdHIuaW1wbCgpKTsKLSAgICB9Ci0KICAgICBzdGF0aWMgU3RyaW5nIGRl
c2VyaWFsaXplU3RyaW5nKGNvbnN0IFZlY3Rvcjx1aW50OF90PiYgYnVmZmVyKQogICAgIHsKICAg
ICAgICAgY29uc3QgdWludDhfdCogcHRyID0gYnVmZmVyLmJlZ2luKCk7CkBAIC0xODU1LDE1ICsx
ODQzLDE0IEBAIEpTVmFsdWUgU2VyaWFsaXplZFNjcmlwdFZhbHVlOjpkZXNlcmlhbGl6ZShKU0M6
OkV4ZWNTdGF0ZSogZXhlYywgSlNDOjpKU0dsb2JhbE9iCiAKIFN0cmluZyBTZXJpYWxpemVkU2Ny
aXB0VmFsdWU6OnRvV2lyZVN0cmluZygpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIENsb25lRGVzZXJp
YWxpemVyOjp0b1dpcmVTdHJpbmcobV9kYXRhKTsKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsK
KyAgICByZXR1cm4gU3RyaW5nKCk7CiB9CiAKIFBhc3NSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZh
bHVlPiBTZXJpYWxpemVkU2NyaXB0VmFsdWU6OmNyZWF0ZUZyb21XaXJlKGNvbnN0IFN0cmluZyYg
dmFsdWUpCiB7Ci0gICAgVmVjdG9yPHVpbnQ4X3Q+IGJ1ZmZlcjsKLSAgICBpZiAoIXdyaXRlTGl0
dGxlRW5kaWFuKGJ1ZmZlciwgdmFsdWUuaW1wbCgpLT5jaGFyYWN0ZXJzKCksIHZhbHVlLmxlbmd0
aCgpKSkKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBTZXJpYWxp
emVkU2NyaXB0VmFsdWUoYnVmZmVyKSk7CisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAg
cmV0dXJuIDA7CiB9CiAKIFBhc3NSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiBTZXJpYWxp
emVkU2NyaXB0VmFsdWU6OmNyZWF0ZShKU0NvbnRleHRSZWYgb3JpZ2luQ29udGV4dCwgSlNWYWx1
ZVJlZiBhcGlWYWx1ZSwgCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9T
ZXJpYWxpemVkU2NyaXB0VmFsdWUuaCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1Nlcmlh
bGl6ZWRTY3JpcHRWYWx1ZS5oCmluZGV4IGVjY2E4MjAuLmQ2MTU5ZGQgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1NlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5oCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1NlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5oCkBAIC0xMDUs
NiArMTA1LDEzIEBAIHB1YmxpYzoKICAgICBzdGF0aWMgUGFzc1JlZlB0cjxTZXJpYWxpemVkU2Ny
aXB0VmFsdWU+IGNyZWF0ZUZyb21XaXJlKGNvbnN0IFN0cmluZyYgZGF0YSk7CiAgICAgU3RyaW5n
IHRvV2lyZVN0cmluZygpIGNvbnN0OwogCisgICAgc3RhdGljIFBhc3NSZWZQdHI8U2VyaWFsaXpl
ZFNjcmlwdFZhbHVlPiBjcmVhdGVGcm9tV2lyZShjb25zdCBWZWN0b3I8dWludDhfdD4mIGRhdGEp
CisgICAgeworICAgICAgICBWZWN0b3I8dWludDhfdD4gYnl0ZXMoZGF0YSk7CisgICAgICAgIHJl
dHVybiBhZG9wdChieXRlcyk7CisgICAgfQorICAgIGNvbnN0IFZlY3Rvcjx1aW50OF90PiYgdG9X
aXJlQnl0ZXMoKSBjb25zdCB7IHJldHVybiBtX2RhdGE7IH0KKwogICAgIH5TZXJpYWxpemVkU2Ny
aXB0VmFsdWUoKTsKIAogcHJpdmF0ZToKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL3Y4L1NlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy92OC9TZXJpYWxpemVkU2NyaXB0VmFsdWUuY3BwCmluZGV4IDYyYTA0OGEuLjc2N2FlMjYgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1NlcmlhbGl6ZWRTY3JpcHRWYWx1
ZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvU2VyaWFsaXplZFNjcmlwdFZh
bHVlLmNwcApAQCAtNjQsNiArNjQsNyBAQAogI2luY2x1ZGUgPHd0Zi9BcnJheUJ1ZmZlci5oPgog
I2luY2x1ZGUgPHd0Zi9BcnJheUJ1ZmZlclZpZXcuaD4KICNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9u
cy5oPgorI2luY2x1ZGUgPHd0Zi9CeXRlT3JkZXIuaD4KICNpbmNsdWRlIDx3dGYvRmxvYXQzMkFy
cmF5Lmg+CiAjaW5jbHVkZSA8d3RmL0Zsb2F0NjRBcnJheS5oPgogI2luY2x1ZGUgPHd0Zi9JbnQx
NkFycmF5Lmg+CkBAIC0yMjQ5LDYgKzIyNTAsMjAgQEAgUGFzc1JlZlB0cjxTZXJpYWxpemVkU2Ny
aXB0VmFsdWU+IFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTo6Y3JlYXRlRnJvbVdpcmUoY29uc3QgU3QK
ICAgICByZXR1cm4gYWRvcHRSZWYobmV3IFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZShkYXRhKSk7CiB9
CiAKK1Bhc3NSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiBTZXJpYWxpemVkU2NyaXB0VmFs
dWU6OmNyZWF0ZUZyb21XaXJlKGNvbnN0IFZlY3Rvcjx1aW50OF90PiYgZGF0YSkKK3sKKyAgICAv
LyBEZWNvZGUgd2lyZSBkYXRhIGZyb20gYmlnIGVuZGlhbiB0byBob3N0IGJ5dGUgb3JkZXIuCisg
ICAgQVNTRVJUKCEoZGF0YS5zaXplKCkgJSBzaXplb2YoVUNoYXIpKSk7CisgICAgc2l6ZV90IGxl
bmd0aCA9IGRhdGEuc2l6ZSgpIC8gc2l6ZW9mIChVQ2hhcik7CisgICAgVmVjdG9yPFVDaGFyPiBi
dWZmZXIobGVuZ3RoKTsKKyAgICBjb25zdCBVQ2hhciogc3JjID0gcmVpbnRlcnByZXRfY2FzdDxj
b25zdCBVQ2hhcio+KGRhdGEuZGF0YSgpKTsKKyAgICBVQ2hhciogZHN0ID0gYnVmZmVyLmRhdGEo
KTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKQorICAgICAgICBkc3Rb
aV0gPSBudG9ocyhzcmNbaV0pOworCisgICAgcmV0dXJuIGNyZWF0ZUZyb21XaXJlKFN0cmluZzo6
YWRvcHQoYnVmZmVyKSk7Cit9CisKIFBhc3NSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiBT
ZXJpYWxpemVkU2NyaXB0VmFsdWU6OmNyZWF0ZShjb25zdCBTdHJpbmcmIGRhdGEsIHY4OjpJc29s
YXRlKiBpc29sYXRlKQogewogICAgIFdyaXRlciB3cml0ZXIoaXNvbGF0ZSk7CkBAIC0yMjk3LDYg
KzIzMTIsMjAgQEAgUGFzc1JlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IFNlcmlhbGl6ZWRT
Y3JpcHRWYWx1ZTo6bnVtYmVyVmFsdWUoZG91YmxlIHZhbHUKICAgICByZXR1cm4gYWRvcHRSZWYo
bmV3IFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZSh3aXJlRGF0YSkpOwogfQogCitWZWN0b3I8dWludDhf
dD4gU2VyaWFsaXplZFNjcmlwdFZhbHVlOjp0b1dpcmVCeXRlcygpIGNvbnN0Cit7CisgICAgLy8g
Q29udmVydCBzZXJpYWxpemVkIHN0cmluZyB0byBiaWcgZW5kaWFuIHdpcmUgZGF0YS4KKyAgICBz
aXplX3QgbGVuZ3RoID0gbV9kYXRhLmxlbmd0aCgpOworICAgIFZlY3Rvcjx1aW50OF90PiByZXN1
bHQobGVuZ3RoICogc2l6ZW9mKFVDaGFyKSk7CisKKyAgICBjb25zdCBVQ2hhciogc3JjID0gbV9k
YXRhLmNoYXJhY3RlcnMoKTsKKyAgICBVQ2hhciogZHN0ID0gcmVpbnRlcnByZXRfY2FzdDxVQ2hh
cio+KHJlc3VsdC5kYXRhKCkpOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbGVuZ3RoOyBp
KyspCisgICAgICAgIGRzdFtpXSA9IGh0b25zKHNyY1tpXSk7CisKKyAgICByZXR1cm4gcmVzdWx0
OworfQorCiBQYXNzUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4gU2VyaWFsaXplZFNjcmlw
dFZhbHVlOjpyZWxlYXNlKCkKIHsKICAgICBSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiBy
ZXN1bHQgPSBhZG9wdFJlZihuZXcgU2VyaWFsaXplZFNjcmlwdFZhbHVlKG1fZGF0YSkpOwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvU2VyaWFsaXplZFNjcmlwdFZhbHVl
LmggYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9TZXJpYWxpemVkU2NyaXB0VmFsdWUuaApp
bmRleCBjYjY2Mzg0Li43NmRkNzMyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy92OC9TZXJpYWxpemVkU2NyaXB0VmFsdWUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy92OC9TZXJpYWxpemVkU2NyaXB0VmFsdWUuaApAQCAtNTcsNiArNTcsNyBAQCBwdWJsaWM6CiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCYg
ZGlkVGhyb3csIHY4OjpJc29sYXRlKiA9IDApOwogICAgIHN0YXRpYyBQYXNzUmVmUHRyPFNlcmlh
bGl6ZWRTY3JpcHRWYWx1ZT4gY3JlYXRlKHY4OjpIYW5kbGU8djg6OlZhbHVlPiwgdjg6Oklzb2xh
dGUqID0gMCk7CiAgICAgc3RhdGljIFBhc3NSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiBj
cmVhdGVGcm9tV2lyZShjb25zdCBTdHJpbmcmIGRhdGEpOworICAgIHN0YXRpYyBQYXNzUmVmUHRy
PFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4gY3JlYXRlRnJvbVdpcmUoY29uc3QgVmVjdG9yPHVpbnQ4
X3Q+JiBkYXRhKTsKICAgICBzdGF0aWMgUGFzc1JlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+
IGNyZWF0ZShjb25zdCBTdHJpbmcmIGRhdGEsIHY4OjpJc29sYXRlKiA9IDApOwogICAgIHN0YXRp
YyBQYXNzUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4gY3JlYXRlKCk7CiAKQEAgLTY4LDYg
KzY5LDcgQEAgcHVibGljOgogICAgIFBhc3NSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiBy
ZWxlYXNlKCk7CiAKICAgICBTdHJpbmcgdG9XaXJlU3RyaW5nKCkgY29uc3QgeyByZXR1cm4gbV9k
YXRhOyB9CisgICAgVmVjdG9yPHVpbnQ4X3Q+IHRvV2lyZUJ5dGVzKCkgY29uc3Q7CiAKICAgICAv
LyBEZXNlcmlhbGl6ZXMgdGhlIHZhbHVlIChpbiB0aGUgY3VycmVudCBjb250ZXh0KS4gUmV0dXJu
cyBhIG51bGwgdmFsdWUgaW4KICAgICAvLyBjYXNlIG9mIGZhaWx1cmUuCi0tIAoxLjcuOS41Cgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>178184</attachid>
            <date>2012-12-07 01:38:13 -0800</date>
            <delta_ts>2012-12-11 15:27:22 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>idb-ssv.patch</filename>
            <type>text/plain</type>
            <size>20803</size>
            <attacher name="Michael Pruett">michael</attacher>
            
              <data encoding="base64">RnJvbTogTWljaGFlbCBQcnVldHQgPG1pY2hhZWxANjhrLm9yZz4KRGF0ZTogRnJpLCA3IERlYyAy
MDEyIDAwOjMxOjU3IC0wODAwClN1YmplY3Q6IEluZGV4ZWREQjogRG9uJ3QgdXNlIHN0cmluZ3Mg
dG8gcmVwcmVzZW50IHNlcmlhbGl6ZWQgdmFsdWVzCgotLS0KIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZyAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICA1MCArKysrKysrKysrKysrKysrKysr
KwogLi4uL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCQmFja2luZ1N0b3JlLmNwcCAgfCAg
IDI4ICsrKysrLS0tLS0tCiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJCYWNr
aW5nU3RvcmUuaCB8ICAgIDYgKy0tCiAuLi4vTW9kdWxlcy9pbmRleGVkZGIvSURCQ3Vyc29yQmFj
a2VuZEltcGwuY3BwICAgICB8ICAgIDIgKy0KIC4uLi9Nb2R1bGVzL2luZGV4ZWRkYi9JREJJbmRl
eEJhY2tlbmRJbXBsLmNwcCAgICAgIHwgICAgNCArLQogLi4uL1dlYkNvcmUvTW9kdWxlcy9pbmRl
eGVkZGIvSURCTGV2ZWxEQkNvZGluZy5jcHAgfCAgIDE1ICsrKysrKwogLi4uL1dlYkNvcmUvTW9k
dWxlcy9pbmRleGVkZGIvSURCTGV2ZWxEQkNvZGluZy5oICAgfCAgICAyICsKIC4uLi9pbmRleGVk
ZGIvSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbC5jcHAgICAgICAgIHwgICAgNiArLS0KIC4uLi9X
ZWJDb3JlL2JpbmRpbmdzL2pzL1NlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5jcHAgIHwgICAyMSArKy0t
LS0tLQogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvU2VyaWFsaXplZFNjcmlwdFZhbHVlLmgg
fCAgICA3ICsrKwogLi4uL1dlYkNvcmUvYmluZGluZ3MvdjgvU2VyaWFsaXplZFNjcmlwdFZhbHVl
LmNwcCAgfCAgIDI5ICsrKysrKysrKysrKwogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvU2Vy
aWFsaXplZFNjcmlwdFZhbHVlLmggfCAgICAyICsKIDEyIGZpbGVzIGNoYW5nZWQsIDEzMiBpbnNl
cnRpb25zKCspLCA0MCBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMzkyZTBmOS4uZmNkYTNh
MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJD
b3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDUzIEBACisyMDEyLTEyLTA3ICBNaWNoYWVsIFBydWV0
dCAgPG1pY2hhZWxANjhrLm9yZz4KKworICAgICAgICBJbmRleGVkREI6IERvbid0IHVzZSBzdHJp
bmdzIHRvIHJlcHJlc2VudCBzZXJpYWxpemVkIHZhbHVlcworICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTA0MzU0CisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
Tk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVXNlIFZlY3Rvcjx1aW50OF90PiByYXRoZXIgdGhh
biBTdHJpbmcgdG8gcmVwcmVzZW50IHNlcmlhbGl6ZWQgdmFsdWVzCisgICAgICAgIGluIEluZGV4
ZWREQi4gVGhpcyBjaGFuZ2UgaXMgbmVjZXNzYXJ5IHRvIGltcGxlbWVudCBJbmRleGVkREIgZm9y
IEpTQy4KKworICAgICAgICBUZXN0czogc3RvcmFnZS9pbmRleGVkZGIvKgorCisgICAgICAgICog
TW9kdWxlcy9pbmRleGVkZGIvSURCQmFja2luZ1N0b3JlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OklEQkJhY2tpbmdTdG9yZTo6Z2V0UmVjb3JkKToKKyAgICAgICAgKFdlYkNvcmU6OklEQkJhY2tp
bmdTdG9yZTo6cHV0UmVjb3JkKToKKyAgICAgICAgKFdlYkNvcmU6Ok9iamVjdFN0b3JlS2V5Q3Vy
c29ySW1wbDo6dmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6T2JqZWN0U3RvcmVDdXJzb3JJbXBs
Ojp2YWx1ZSk6CisgICAgICAgIChPYmplY3RTdG9yZUN1cnNvckltcGwpOgorICAgICAgICAoV2Vi
Q29yZTo6T2JqZWN0U3RvcmVDdXJzb3JJbXBsOjpsb2FkQ3VycmVudFJvdyk6CisgICAgICAgIChX
ZWJDb3JlOjpJbmRleEtleUN1cnNvckltcGw6OnZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6Oklu
ZGV4Q3Vyc29ySW1wbDo6dmFsdWUpOgorICAgICAgICAoSW5kZXhDdXJzb3JJbXBsKToKKyAgICAg
ICAgKFdlYkNvcmU6OkluZGV4Q3Vyc29ySW1wbDo6bG9hZEN1cnJlbnRSb3cpOgorICAgICAgICAq
IE1vZHVsZXMvaW5kZXhlZGRiL0lEQkJhY2tpbmdTdG9yZS5oOgorICAgICAgICAoSURCQmFja2lu
Z1N0b3JlKToKKyAgICAgICAgKEN1cnNvcik6CisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIv
SURCQ3Vyc29yQmFja2VuZEltcGwuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SURCQ3Vyc29yQmFj
a2VuZEltcGw6OkN1cnNvclByZWZldGNoSXRlcmF0aW9uT3BlcmF0aW9uOjpwZXJmb3JtKToKKyAg
ICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9JREJJbmRleEJhY2tlbmRJbXBsLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OklEQkluZGV4QmFja2VuZEltcGw6OkluZGV4UmVmZXJlbmNlZFZhbHVlUmV0
cmlldmFsT3BlcmF0aW9uOjpwZXJmb3JtKToKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9J
REJMZXZlbERCQ29kaW5nLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OklEQkxldmVsREJDb2Rpbmc6
OmVuY29kZUlEQlZhbHVlKToKKyAgICAgICAgKElEQkxldmVsREJDb2RpbmcpOgorICAgICAgICAo
V2ViQ29yZTo6SURCTGV2ZWxEQkNvZGluZzo6ZGVjb2RlSURCVmFsdWUpOgorICAgICAgICAqIE1v
ZHVsZXMvaW5kZXhlZGRiL0lEQkxldmVsREJDb2RpbmcuaDoKKyAgICAgICAgKElEQkxldmVsREJD
b2RpbmcpOgorICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL0lEQk9iamVjdFN0b3JlQmFja2Vu
ZEltcGwuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6
T2JqZWN0U3RvcmVSZXRyaWV2YWxPcGVyYXRpb246OnBlcmZvcm0pOgorICAgICAgICAoV2ViQ29y
ZTo6SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6T2JqZWN0U3RvcmVTdG9yYWdlT3BlcmF0aW9u
OjpwZXJmb3JtKToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9TZXJpYWxpemVkU2NyaXB0VmFsdWUu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6U2VyaWFsaXplZFNjcmlwdFZhbHVlOjp0b1dpcmVTdHJp
bmcpOgorICAgICAgICAoV2ViQ29yZTo6U2VyaWFsaXplZFNjcmlwdFZhbHVlOjpjcmVhdGVGcm9t
V2lyZSk6CisgICAgICAgICogYmluZGluZ3MvanMvU2VyaWFsaXplZFNjcmlwdFZhbHVlLmg6Cisg
ICAgICAgICogYmluZGluZ3MvdjgvU2VyaWFsaXplZFNjcmlwdFZhbHVlLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OlNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTo6Y3JlYXRlRnJvbVdpcmUpOgorICAgICAg
ICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpTZXJpYWxpemVkU2NyaXB0VmFsdWU6OnRv
V2lyZUJ5dGVzKToKKyAgICAgICAgKiBiaW5kaW5ncy92OC9TZXJpYWxpemVkU2NyaXB0VmFsdWUu
aDoKKyAgICAgICAgKFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZSk6CisKIDIwMTItMTItMDYgIEtlbnQg
VGFtdXJhICA8dGtlbnRAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFJlZmFjdG9yaW5nOiBDbGVh
biB1cCBwbGFjZWhvbGRlciBhdHRyaWJ1dGUgdXNhZ2UKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkJhY2tpbmdTdG9yZS5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJCYWNraW5nU3RvcmUuY3BwCmluZGV4IDg4ODJkZWIuLmU2
YzcwMGMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkJh
Y2tpbmdTdG9yZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURC
QmFja2luZ1N0b3JlLmNwcApAQCAtNjY1LDcgKzY2NSw3IEBAIGJvb2wgSURCQmFja2luZ1N0b3Jl
OjpkZWxldGVPYmplY3RTdG9yZShJREJCYWNraW5nU3RvcmU6OlRyYW5zYWN0aW9uKiB0cmFuc2Fj
dGlvCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLWJvb2wgSURCQmFja2luZ1N0b3JlOjpnZXRSZWNv
cmQoSURCQmFja2luZ1N0b3JlOjpUcmFuc2FjdGlvbiogdHJhbnNhY3Rpb24sIGludDY0X3QgZGF0
YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBjb25zdCBJREJLZXkmIGtleSwgU3RyaW5n
JiByZWNvcmQpCitib29sIElEQkJhY2tpbmdTdG9yZTo6Z2V0UmVjb3JkKElEQkJhY2tpbmdTdG9y
ZTo6VHJhbnNhY3Rpb24qIHRyYW5zYWN0aW9uLCBpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qg
b2JqZWN0U3RvcmVJZCwgY29uc3QgSURCS2V5JiBrZXksIFZlY3Rvcjx1aW50OF90PiYgcmVjb3Jk
KQogewogICAgIElEQl9UUkFDRSgiSURCQmFja2luZ1N0b3JlOjpnZXRSZWNvcmQiKTsKICAgICBM
ZXZlbERCVHJhbnNhY3Rpb24qIGxldmVsREJUcmFuc2FjdGlvbiA9IElEQkJhY2tpbmdTdG9yZTo6
VHJhbnNhY3Rpb246OmxldmVsREJUcmFuc2FjdGlvbkZyb20odHJhbnNhY3Rpb24pOwpAQCAtNjc2
LDcgKzY3Niw3IEBAIGJvb2wgSURCQmFja2luZ1N0b3JlOjpnZXRSZWNvcmQoSURCQmFja2luZ1N0
b3JlOjpUcmFuc2FjdGlvbiogdHJhbnNhY3Rpb24sIGludDY0CiAgICAgYm9vbCBmb3VuZCA9IGZh
bHNlOwogICAgIGJvb2wgb2sgPSBsZXZlbERCVHJhbnNhY3Rpb24tPnNhZmVHZXQobGV2ZWxkYktl
eSwgZGF0YSwgZm91bmQpOwogICAgIGlmICghb2spIHsKLSAgICAgICAgcmVjb3JkID0gU3RyaW5n
KCk7CisgICAgICAgIHJlY29yZC5jbGVhcigpOwogICAgICAgICBJbnRlcm5hbEVycm9yKElEQkxl
dmVsREJCYWNraW5nU3RvcmVSZWFkRXJyb3JHZXRSZWNvcmQpOwogICAgICAgICByZXR1cm4gZmFs
c2U7CiAgICAgfQpAQCAtNjg1LDExICs2ODUsMTEgQEAgYm9vbCBJREJCYWNraW5nU3RvcmU6Omdl
dFJlY29yZChJREJCYWNraW5nU3RvcmU6OlRyYW5zYWN0aW9uKiB0cmFuc2FjdGlvbiwgaW50NjQK
ICAgICBjb25zdCBjaGFyKiBwID0gZGVjb2RlVmFySW50KGRhdGEuYmVnaW4oKSwgZGF0YS5lbmQo
KSwgdmVyc2lvbik7CiAgICAgaWYgKCFwKSB7CiAgICAgICAgIEludGVybmFsRXJyb3IoSURCTGV2
ZWxEQkJhY2tpbmdTdG9yZVJlYWRFcnJvckdldFJlY29yZCk7Ci0gICAgICAgIHJlY29yZCA9IFN0
cmluZygpOworICAgICAgICByZWNvcmQuY2xlYXIoKTsKICAgICAgICAgcmV0dXJuIGZhbHNlOwog
ICAgIH0KIAotICAgIHJlY29yZCA9IGRlY29kZVN0cmluZyhwLCBkYXRhLmVuZCgpKTsKKyAgICBy
ZWNvcmQgPSBkZWNvZGVJREJWYWx1ZShwLCBkYXRhLmVuZCgpKTsKICAgICByZXR1cm4gdHJ1ZTsK
IH0KIApAQCAtNzExLDcgKzcxMSw3IEBAIHN0YXRpYyBpbnQ2NF90IGdldE5ld1ZlcnNpb25OdW1i
ZXIoTGV2ZWxEQlRyYW5zYWN0aW9uKiB0cmFuc2FjdGlvbiwgaW50NjRfdCBkYXRhCiAgICAgcmV0
dXJuIHZlcnNpb247CiB9CiAKLXZvaWQgSURCQmFja2luZ1N0b3JlOjpwdXRSZWNvcmQoSURCQmFj
a2luZ1N0b3JlOjpUcmFuc2FjdGlvbiogdHJhbnNhY3Rpb24sIGludDY0X3QgZGF0YWJhc2VJZCwg
aW50NjRfdCBvYmplY3RTdG9yZUlkLCBjb25zdCBJREJLZXkmIGtleSwgY29uc3QgU3RyaW5nJiB2
YWx1ZSwgUmVjb3JkSWRlbnRpZmllciogcmVjb3JkSWRlbnRpZmllcikKK3ZvaWQgSURCQmFja2lu
Z1N0b3JlOjpwdXRSZWNvcmQoSURCQmFja2luZ1N0b3JlOjpUcmFuc2FjdGlvbiogdHJhbnNhY3Rp
b24sIGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBjb25zdCBJREJL
ZXkmIGtleSwgY29uc3QgVmVjdG9yPHVpbnQ4X3Q+JiB2YWx1ZSwgUmVjb3JkSWRlbnRpZmllciog
cmVjb3JkSWRlbnRpZmllcikKIHsKICAgICBJREJfVFJBQ0UoIklEQkJhY2tpbmdTdG9yZTo6cHV0
UmVjb3JkIik7CiAgICAgQVNTRVJUKGtleS5pc1ZhbGlkKCkpOwpAQCAtNzIxLDcgKzcyMSw3IEBA
IHZvaWQgSURCQmFja2luZ1N0b3JlOjpwdXRSZWNvcmQoSURCQmFja2luZ1N0b3JlOjpUcmFuc2Fj
dGlvbiogdHJhbnNhY3Rpb24sIGludDY0CiAKICAgICBWZWN0b3I8Y2hhcj4gdjsKICAgICB2LmFw
cGVuZChlbmNvZGVWYXJJbnQodmVyc2lvbikpOwotICAgIHYuYXBwZW5kKGVuY29kZVN0cmluZyh2
YWx1ZSkpOworICAgIHYuYXBwZW5kKGVuY29kZUlEQlZhbHVlKHZhbHVlKSk7CiAKICAgICBsZXZl
bERCVHJhbnNhY3Rpb24tPnB1dChvYmplY3RTdG9yZWRhdGFLZXksIHYpOwogCkBAIC0xMjY5LDcg
KzEyNjksNyBAQCBwdWJsaWM6CiAgICAgfQogCiAgICAgLy8gSURCQmFja2luZ1N0b3JlOjpDdXJz
b3IKLSAgICB2aXJ0dWFsIFN0cmluZyB2YWx1ZSgpIGNvbnN0IHsgQVNTRVJUX05PVF9SRUFDSEVE
KCk7IHJldHVybiBTdHJpbmcoKTsgfQorICAgIHZpcnR1YWwgVmVjdG9yPHVpbnQ4X3Q+IHZhbHVl
KCkgY29uc3QgeyBBU1NFUlRfTk9UX1JFQUNIRUQoKTsgcmV0dXJuIFZlY3Rvcjx1aW50OF90Pigp
OyB9CiAgICAgdmlydHVhbCBib29sIGxvYWRDdXJyZW50Um93KCk7CiAKIHByaXZhdGU6CkBAIC0x
MzI1LDcgKzEzMjUsNyBAQCBwdWJsaWM6CiAgICAgfQogCiAgICAgLy8gSURCQmFja2luZ1N0b3Jl
OjpDdXJzb3IKLSAgICB2aXJ0dWFsIFN0cmluZyB2YWx1ZSgpIGNvbnN0IHsgcmV0dXJuIG1fY3Vy
cmVudFZhbHVlOyB9CisgICAgdmlydHVhbCBWZWN0b3I8dWludDhfdD4gdmFsdWUoKSBjb25zdCB7
IHJldHVybiBtX2N1cnJlbnRWYWx1ZTsgfQogICAgIHZpcnR1YWwgYm9vbCBsb2FkQ3VycmVudFJv
dygpOwogCiBwcml2YXRlOgpAQCAtMTM0MCw3ICsxMzQwLDcgQEAgcHJpdmF0ZToKICAgICB7CiAg
ICAgfQogCi0gICAgU3RyaW5nIG1fY3VycmVudFZhbHVlOworICAgIFZlY3Rvcjx1aW50OF90PiBt
X2N1cnJlbnRWYWx1ZTsKIH07CiAKIGJvb2wgT2JqZWN0U3RvcmVDdXJzb3JJbXBsOjpsb2FkQ3Vy
cmVudFJvdygpCkBAIC0xMzY3LDcgKzEzNjcsNyBAQCBib29sIE9iamVjdFN0b3JlQ3Vyc29ySW1w
bDo6bG9hZEN1cnJlbnRSb3coKQogICAgIC8vIEZJWE1FOiBUaGlzIHJlLWVuY29kZXMgd2hhdCB3
YXMganVzdCBkZWNvZGVkOyB0cnkgYW5kIG9wdGltaXplLgogICAgIG1fcmVjb3JkSWRlbnRpZmll
ci5yZXNldChlbmNvZGVJREJLZXkoKm1fY3VycmVudEtleSksIHZlcnNpb24pOwogCi0gICAgbV9j
dXJyZW50VmFsdWUgPSBkZWNvZGVTdHJpbmcodmFsdWVQb3NpdGlvbiwgbV9pdGVyYXRvci0+dmFs
dWUoKS5lbmQoKSk7CisgICAgbV9jdXJyZW50VmFsdWUgPSBkZWNvZGVJREJWYWx1ZSh2YWx1ZVBv
c2l0aW9uLCBtX2l0ZXJhdG9yLT52YWx1ZSgpLmVuZCgpKTsKIAogICAgIHJldHVybiB0cnVlOwog
fQpAQCAtMTM4NSw3ICsxMzg1LDcgQEAgcHVibGljOgogICAgIH0KIAogICAgIC8vIElEQkJhY2tp
bmdTdG9yZTo6Q3Vyc29yCi0gICAgdmlydHVhbCBTdHJpbmcgdmFsdWUoKSBjb25zdCB7IEFTU0VS
VF9OT1RfUkVBQ0hFRCgpOyByZXR1cm4gU3RyaW5nKCk7IH0KKyAgICB2aXJ0dWFsIFZlY3Rvcjx1
aW50OF90PiB2YWx1ZSgpIGNvbnN0IHsgQVNTRVJUX05PVF9SRUFDSEVEKCk7IHJldHVybiBWZWN0
b3I8dWludDhfdD4oKTsgfQogICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxJREJLZXk+IHByaW1hcnlL
ZXkoKSBjb25zdCB7IHJldHVybiBtX3ByaW1hcnlLZXk7IH0KICAgICB2aXJ0dWFsIGNvbnN0IElE
QkJhY2tpbmdTdG9yZTo6UmVjb3JkSWRlbnRpZmllciYgcmVjb3JkSWRlbnRpZmllcigpIGNvbnN0
IHsgQVNTRVJUX05PVF9SRUFDSEVEKCk7IHJldHVybiBtX3JlY29yZElkZW50aWZpZXI7IH0KICAg
ICB2aXJ0dWFsIGJvb2wgbG9hZEN1cnJlbnRSb3coKTsKQEAgLTE0NjQsNyArMTQ2NCw3IEBAIHB1
YmxpYzoKICAgICB9CiAKICAgICAvLyBJREJCYWNraW5nU3RvcmU6OkN1cnNvcgotICAgIHZpcnR1
YWwgU3RyaW5nIHZhbHVlKCkgY29uc3QgeyByZXR1cm4gbV92YWx1ZTsgfQorICAgIHZpcnR1YWwg
VmVjdG9yPHVpbnQ4X3Q+IHZhbHVlKCkgY29uc3QgeyByZXR1cm4gbV92YWx1ZTsgfQogICAgIHZp
cnR1YWwgUGFzc1JlZlB0cjxJREJLZXk+IHByaW1hcnlLZXkoKSBjb25zdCB7IHJldHVybiBtX3By
aW1hcnlLZXk7IH0KICAgICB2aXJ0dWFsIGNvbnN0IElEQkJhY2tpbmdTdG9yZTo6UmVjb3JkSWRl
bnRpZmllciYgcmVjb3JkSWRlbnRpZmllcigpIGNvbnN0IHsgQVNTRVJUX05PVF9SRUFDSEVEKCk7
IHJldHVybiBtX3JlY29yZElkZW50aWZpZXI7IH0KICAgICBib29sIGxvYWRDdXJyZW50Um93KCk7
CkBAIC0xNDg0LDcgKzE0ODQsNyBAQCBwcml2YXRlOgogICAgIH0KIAogICAgIFJlZlB0cjxJREJL
ZXk+IG1fcHJpbWFyeUtleTsKLSAgICBTdHJpbmcgbV92YWx1ZTsKKyAgICBWZWN0b3I8dWludDhf
dD4gbV92YWx1ZTsKICAgICBWZWN0b3I8Y2hhcj4gbV9wcmltYXJ5TGV2ZWxEQktleTsKIH07CiAK
QEAgLTE1MzMsNyArMTUzMyw3IEBAIGJvb2wgSW5kZXhDdXJzb3JJbXBsOjpsb2FkQ3VycmVudFJv
dygpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAKLSAgICBtX3ZhbHVlID0gZGVjb2Rl
U3RyaW5nKHQsIHJlc3VsdC5lbmQoKSk7CisgICAgbV92YWx1ZSA9IGRlY29kZUlEQlZhbHVlKHQs
IHJlc3VsdC5lbmQoKSk7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkJhY2tpbmdTdG9yZS5oIGIvU291cmNlL1dl
YkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCQmFja2luZ1N0b3JlLmgKaW5kZXggZTZlZDRkOC4u
OWNmMjExNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURC
QmFja2luZ1N0b3JlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURC
QmFja2luZ1N0b3JlLmgKQEAgLTc3LDggKzc3LDggQEAgcHVibGljOgogICAgICAgICBpbnQ2NF90
IG1fdmVyc2lvbjsKICAgICB9OwogCi0gICAgdmlydHVhbCBib29sIGdldFJlY29yZChJREJCYWNr
aW5nU3RvcmU6OlRyYW5zYWN0aW9uKiwgaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVj
dFN0b3JlSWQsIGNvbnN0IElEQktleSYsIFN0cmluZyYgcmVjb3JkKSBXQVJOX1VOVVNFRF9SRVRV
Uk47Ci0gICAgdmlydHVhbCB2b2lkIHB1dFJlY29yZChJREJCYWNraW5nU3RvcmU6OlRyYW5zYWN0
aW9uKiwgaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGNvbnN0IElE
QktleSYsIGNvbnN0IFN0cmluZyYgdmFsdWUsIFJlY29yZElkZW50aWZpZXIqKTsKKyAgICB2aXJ0
dWFsIGJvb2wgZ2V0UmVjb3JkKElEQkJhY2tpbmdTdG9yZTo6VHJhbnNhY3Rpb24qLCBpbnQ2NF90
IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgY29uc3QgSURCS2V5JiwgVmVjdG9y
PHVpbnQ4X3Q+JiByZWNvcmQpIFdBUk5fVU5VU0VEX1JFVFVSTjsKKyAgICB2aXJ0dWFsIHZvaWQg
cHV0UmVjb3JkKElEQkJhY2tpbmdTdG9yZTo6VHJhbnNhY3Rpb24qLCBpbnQ2NF90IGRhdGFiYXNl
SWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgY29uc3QgSURCS2V5JiwgY29uc3QgVmVjdG9yPHVp
bnQ4X3Q+JiB2YWx1ZSwgUmVjb3JkSWRlbnRpZmllciopOwogICAgIHZpcnR1YWwgdm9pZCBjbGVh
ck9iamVjdFN0b3JlKElEQkJhY2tpbmdTdG9yZTo6VHJhbnNhY3Rpb24qLCBpbnQ2NF90IGRhdGFi
YXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCk7CiAgICAgdmlydHVhbCB2b2lkIGRlbGV0ZVJl
Y29yZChJREJCYWNraW5nU3RvcmU6OlRyYW5zYWN0aW9uKiwgaW50NjRfdCBkYXRhYmFzZUlkLCBp
bnQ2NF90IG9iamVjdFN0b3JlSWQsIGNvbnN0IFJlY29yZElkZW50aWZpZXImKTsKICAgICB2aXJ0
dWFsIGJvb2wgZ2V0S2V5R2VuZXJhdG9yQ3VycmVudE51bWJlcihJREJCYWNraW5nU3RvcmU6OlRy
YW5zYWN0aW9uKiwgaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGlu
dDY0X3QmIGN1cnJlbnROdW1iZXIpIFdBUk5fVU5VU0VEX1JFVFVSTjsKQEAgLTExNSw3ICsxMTUs
NyBAQCBwdWJsaWM6CiAKICAgICAgICAgdmlydHVhbCBQYXNzUmVmUHRyPEN1cnNvcj4gY2xvbmUo
KSA9IDA7CiAgICAgICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxJREJLZXk+IHByaW1hcnlLZXkoKSBj
b25zdCB7IHJldHVybiBtX2N1cnJlbnRLZXk7IH0KLSAgICAgICAgdmlydHVhbCBTdHJpbmcgdmFs
dWUoKSBjb25zdCA9IDA7CisgICAgICAgIHZpcnR1YWwgVmVjdG9yPHVpbnQ4X3Q+IHZhbHVlKCkg
Y29uc3QgPSAwOwogICAgICAgICB2aXJ0dWFsIGNvbnN0IFJlY29yZElkZW50aWZpZXImIHJlY29y
ZElkZW50aWZpZXIoKSBjb25zdCB7IHJldHVybiBtX3JlY29yZElkZW50aWZpZXI7IH0KICAgICAg
ICAgdmlydHVhbCB+Q3Vyc29yKCkgeyB9CiAgICAgICAgIHZpcnR1YWwgYm9vbCBsb2FkQ3VycmVu
dFJvdygpID0gMDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRi
L0lEQkN1cnNvckJhY2tlbmRJbXBsLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhl
ZGRiL0lEQkN1cnNvckJhY2tlbmRJbXBsLmNwcAppbmRleCBkMjc1ODgzLi40OTc0ODhlIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJDdXJzb3JCYWNrZW5k
SW1wbC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCQ3Vyc29y
QmFja2VuZEltcGwuY3BwCkBAIC0yMTYsNyArMjE2LDcgQEAgdm9pZCBJREJDdXJzb3JCYWNrZW5k
SW1wbDo6Q3Vyc29yUHJlZmV0Y2hJdGVyYXRpb25PcGVyYXRpb246OnBlcmZvcm0oSURCVHJhbnNh
Y3QKICAgICAgICAgc2l6ZUVzdGltYXRlICs9IG1fY3Vyc29yLT5tX2N1cnNvci0+a2V5KCktPnNp
emVFc3RpbWF0ZSgpOwogICAgICAgICBzaXplRXN0aW1hdGUgKz0gbV9jdXJzb3ItPm1fY3Vyc29y
LT5wcmltYXJ5S2V5KCktPnNpemVFc3RpbWF0ZSgpOwogICAgICAgICBpZiAobV9jdXJzb3ItPm1f
Y3Vyc29yVHlwZSAhPSBJREJDdXJzb3JCYWNrZW5kSW50ZXJmYWNlOjpJbmRleEtleUN1cnNvcikK
LSAgICAgICAgICAgIHNpemVFc3RpbWF0ZSArPSBtX2N1cnNvci0+bV9jdXJzb3ItPnZhbHVlKCku
bGVuZ3RoKCkgKiBzaXplb2YoVUNoYXIpOworICAgICAgICAgICAgc2l6ZUVzdGltYXRlICs9IG1f
Y3Vyc29yLT5tX2N1cnNvci0+dmFsdWUoKS5zaXplKCk7CiAKICAgICAgICAgaWYgKHNpemVFc3Rp
bWF0ZSA+IG1heFNpemVFc3RpbWF0ZSkKICAgICAgICAgICAgIGJyZWFrOwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCSW5kZXhCYWNrZW5kSW1wbC5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJJbmRleEJhY2tlbmRJbXBsLmNw
cAppbmRleCA5MWVlOGYwLi44NWUxYmUwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL2luZGV4ZWRkYi9JREJJbmRleEJhY2tlbmRJbXBsLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJJbmRleEJhY2tlbmRJbXBsLmNwcApAQCAtMjM3LDE0ICsy
MzcsMTQgQEAgdm9pZCBJREJJbmRleEJhY2tlbmRJbXBsOjpJbmRleFJlZmVyZW5jZWRWYWx1ZVJl
dHJpZXZhbE9wZXJhdGlvbjo6cGVyZm9ybShJREJUcmEKICAgICAgICAgcmV0dXJuOwogICAgIH0K
IAotICAgIFN0cmluZyB2YWx1ZTsKKyAgICBWZWN0b3I8dWludDhfdD4gdmFsdWU7CiAgICAgb2sg
PSBtX2luZGV4LT5iYWNraW5nU3RvcmUoKS0+Z2V0UmVjb3JkKHRyYW5zYWN0aW9uLT5iYWNraW5n
U3RvcmVUcmFuc2FjdGlvbigpLCBtX2luZGV4LT5kYXRhYmFzZUlkKCksIG1faW5kZXgtPm1fb2Jq
ZWN0U3RvcmVCYWNrZW5kLT5pZCgpLCAqcHJpbWFyeUtleSwgdmFsdWUpOwogICAgIGlmICghb2sp
IHsKICAgICAgICAgbV9jYWxsYmFja3MtPm9uRXJyb3IoSURCRGF0YWJhc2VFcnJvcjo6Y3JlYXRl
KElEQkRhdGFiYXNlRXhjZXB0aW9uOjpVbmtub3duRXJyb3IsICJJbnRlcm5hbCBlcnJvciBpbiBn
ZXRSZWNvcmQuIikpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgaWYgKHZhbHVlLmlz
TnVsbCgpKSB7CisgICAgaWYgKHZhbHVlLmlzRW1wdHkoKSkgewogICAgICAgICBtX2NhbGxiYWNr
cy0+b25TdWNjZXNzKCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJMZXZlbERCQ29kaW5nLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkxldmVsREJDb2RpbmcuY3BwCmluZGV4IDdh
ZmZjMjguLjY5ZDhhMGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhl
ZGRiL0lEQkxldmVsREJDb2RpbmcuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5k
ZXhlZGRiL0lEQkxldmVsREJDb2RpbmcuY3BwCkBAIC01NTksNiArNTU5LDIxIEBAIGNvbnN0IGNo
YXIqIGV4dHJhY3RFbmNvZGVkSURCS2V5KGNvbnN0IGNoYXIqIHN0YXJ0LCBjb25zdCBjaGFyKiBs
aW1pdCwgVmVjdG9yPGNoCiAgICAgcmV0dXJuIHA7CiB9CiAKK1ZlY3RvcjxjaGFyPiBlbmNvZGVJ
REJWYWx1ZShjb25zdCBWZWN0b3I8dWludDhfdD4mIHZhbHVlKQoreworICAgIFZlY3RvcjxjaGFy
PiByZXN1bHQ7CisgICAgcmVzdWx0LmFwcGVuZFZlY3Rvcih2YWx1ZSk7CisgICAgcmV0dXJuIHJl
c3VsdDsKK30KKworVmVjdG9yPHVpbnQ4X3Q+IGRlY29kZUlEQlZhbHVlKGNvbnN0IGNoYXIqIHN0
YXJ0LCBjb25zdCBjaGFyKiBsaW1pdCkKK3sKKyAgICBBU1NFUlQobGltaXQgPj0gc3RhcnQpOwor
ICAgIFZlY3Rvcjx1aW50OF90PiByZXN1bHQ7CisgICAgcmVzdWx0LmFwcGVuZChzdGFydCwgbGlt
aXQgLSBzdGFydCk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwogc3RhdGljIElEQktleTo6VHlw
ZSBrZXlUeXBlQnl0ZVRvS2V5VHlwZSh1bnNpZ25lZCBjaGFyIHR5cGUpCiB7CiAgICAgc3dpdGNo
ICh0eXBlKSB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9J
REJMZXZlbERCQ29kaW5nLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJM
ZXZlbERCQ29kaW5nLmgKaW5kZXggNzlmODc2MS4uNTE4NWJhYyAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCTGV2ZWxEQkNvZGluZy5oCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkxldmVsREJDb2RpbmcuaApAQCAtNzEsNiAr
NzEsOCBAQCBjb25zdCBjaGFyKiBleHRyYWN0RW5jb2RlZElEQktleShjb25zdCBjaGFyKiBzdGFy
dCwgY29uc3QgY2hhciogbGltaXQsIFZlY3RvcjxjaAogaW50IGNvbXBhcmVFbmNvZGVkSURCS2V5
cyhjb25zdCBWZWN0b3I8Y2hhcj4mLCBjb25zdCBWZWN0b3I8Y2hhcj4mKTsKIFZlY3RvcjxjaGFy
PiBlbmNvZGVJREJLZXlQYXRoKGNvbnN0IElEQktleVBhdGgmKTsKIElEQktleVBhdGggZGVjb2Rl
SURCS2V5UGF0aChjb25zdCBjaGFyKiwgY29uc3QgY2hhciopOworVmVjdG9yPGNoYXI+IGVuY29k
ZUlEQlZhbHVlKGNvbnN0IFZlY3Rvcjx1aW50OF90PiYpOworVmVjdG9yPHVpbnQ4X3Q+IGRlY29k
ZUlEQlZhbHVlKGNvbnN0IGNoYXIqLCBjb25zdCBjaGFyKik7CiAKIGludCBjb21wYXJlKGNvbnN0
IExldmVsREJTbGljZSYsIGNvbnN0IExldmVsREJTbGljZSYsIGJvb2wgaW5kZXhLZXlzID0gZmFs
c2UpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJP
YmplY3RTdG9yZUJhY2tlbmRJbXBsLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhl
ZGRiL0lEQk9iamVjdFN0b3JlQmFja2VuZEltcGwuY3BwCmluZGV4IDJhZGE1MjUuLjIwYzFjMzYg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQk9iamVjdFN0
b3JlQmFja2VuZEltcGwuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRi
L0lEQk9iamVjdFN0b3JlQmFja2VuZEltcGwuY3BwCkBAIC0zMDgsMTMgKzMwOCwxMyBAQCB2b2lk
IElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6Ok9iamVjdFN0b3JlUmV0cmlldmFsT3BlcmF0aW9u
OjpwZXJmb3JtKElEQlRyYW5zYQogICAgICAgICBrZXkgPSBiYWNraW5nU3RvcmVDdXJzb3ItPmtl
eSgpOwogICAgIH0KIAotICAgIFN0cmluZyB3aXJlRGF0YTsKKyAgICBWZWN0b3I8dWludDhfdD4g
d2lyZURhdGE7CiAgICAgYm9vbCBvayA9IG1fb2JqZWN0U3RvcmUtPmJhY2tpbmdTdG9yZSgpLT5n
ZXRSZWNvcmQodHJhbnNhY3Rpb24tPmJhY2tpbmdTdG9yZVRyYW5zYWN0aW9uKCksIG1fb2JqZWN0
U3RvcmUtPmRhdGFiYXNlSWQoKSwgbV9vYmplY3RTdG9yZS0+aWQoKSwgKmtleSwgd2lyZURhdGEp
OwogICAgIGlmICghb2spIHsKICAgICAgICAgbV9jYWxsYmFja3MtPm9uRXJyb3IoSURCRGF0YWJh
c2VFcnJvcjo6Y3JlYXRlKElEQkRhdGFiYXNlRXhjZXB0aW9uOjpVbmtub3duRXJyb3IsICJJbnRl
cm5hbCBlcnJvciBpbiBnZXRSZWNvcmQuIikpOwogICAgICAgICByZXR1cm47CiAgICAgfQotICAg
IGlmICh3aXJlRGF0YS5pc051bGwoKSkgeworICAgIGlmICh3aXJlRGF0YS5pc0VtcHR5KCkpIHsK
ICAgICAgICAgbV9jYWxsYmFja3MtPm9uU3VjY2VzcygpOwogICAgICAgICByZXR1cm47CiAgICAg
fQpAQCAtNTYwLDcgKzU2MCw3IEBAIHZvaWQgSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6T2Jq
ZWN0U3RvcmVTdG9yYWdlT3BlcmF0aW9uOjpwZXJmb3JtKElEQlRyYW5zYWN0CiAKICAgICAvLyBC
ZWZvcmUgdGhpcyBwb2ludCwgZG9uJ3QgZG8gYW55IG11dGF0aW9uLiAgQWZ0ZXIgdGhpcyBwb2lu
dCwgcm9sbGJhY2sgdGhlIHRyYW5zYWN0aW9uIGluIGNhc2Ugb2YgZXJyb3IuCiAKLSAgICBtX29i
amVjdFN0b3JlLT5iYWNraW5nU3RvcmUoKS0+cHV0UmVjb3JkKHRyYW5zYWN0aW9uLT5iYWNraW5n
U3RvcmVUcmFuc2FjdGlvbigpLCBtX29iamVjdFN0b3JlLT5kYXRhYmFzZUlkKCksIG1fb2JqZWN0
U3RvcmUtPmlkKCksICptX2tleSwgbV92YWx1ZS0+dG9XaXJlU3RyaW5nKCksICZyZWNvcmRJZGVu
dGlmaWVyKTsKKyAgICBtX29iamVjdFN0b3JlLT5iYWNraW5nU3RvcmUoKS0+cHV0UmVjb3JkKHRy
YW5zYWN0aW9uLT5iYWNraW5nU3RvcmVUcmFuc2FjdGlvbigpLCBtX29iamVjdFN0b3JlLT5kYXRh
YmFzZUlkKCksIG1fb2JqZWN0U3RvcmUtPmlkKCksICptX2tleSwgbV92YWx1ZS0+dG9XaXJlQnl0
ZXMoKSwgJnJlY29yZElkZW50aWZpZXIpOwogCiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBp
bmRleFdyaXRlcnMuc2l6ZSgpOyArK2kpIHsKICAgICAgICAgSW5kZXhXcml0ZXIqIGluZGV4V3Jp
dGVyID0gaW5kZXhXcml0ZXJzW2ldLmdldCgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
YmluZGluZ3MvanMvU2VyaWFsaXplZFNjcmlwdFZhbHVlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL2pzL1NlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5jcHAKaW5kZXggN2RjOWFlZC4uYThlZDk2
MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvU2VyaWFsaXplZFNjcmlw
dFZhbHVlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9TZXJpYWxpemVkU2Ny
aXB0VmFsdWUuY3BwCkBAIC0xMDAzLDE4ICsxMDAzLDYgQEAgdHlwZWRlZiBWZWN0b3I8V1RGOjpB
cnJheUJ1ZmZlckNvbnRlbnRzPiBBcnJheUJ1ZmZlckNvbnRlbnRzQXJyYXk7CiAKIGNsYXNzIENs
b25lRGVzZXJpYWxpemVyIDogQ2xvbmVCYXNlIHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgU3RyaW5n
IHRvV2lyZVN0cmluZyhjb25zdCBWZWN0b3I8dW5zaWduZWQgY2hhcj4mIHZhbHVlKQotICAgIHsK
LSAgICAgICAgY29uc3QgdWludDhfdCogc3RhcnQgPSB2YWx1ZS5iZWdpbigpOwotICAgICAgICBj
b25zdCB1aW50OF90KiBlbmQgPSB2YWx1ZS5lbmQoKTsKLSAgICAgICAgY29uc3QgdWludDMyX3Qg
bGVuZ3RoID0gdmFsdWUuc2l6ZSgpIC8gc2l6ZW9mKFVDaGFyKTsKLSAgICAgICAgU3RyaW5nIHN0
cjsKLSAgICAgICAgaWYgKCFDbG9uZURlc2VyaWFsaXplcjo6cmVhZFN0cmluZyhzdGFydCwgZW5k
LCBzdHIsIGxlbmd0aCkpCi0gICAgICAgICAgICByZXR1cm4gU3RyaW5nKCk7Ci0KLSAgICAgICAg
cmV0dXJuIFN0cmluZyhzdHIuaW1wbCgpKTsKLSAgICB9Ci0KICAgICBzdGF0aWMgU3RyaW5nIGRl
c2VyaWFsaXplU3RyaW5nKGNvbnN0IFZlY3Rvcjx1aW50OF90PiYgYnVmZmVyKQogICAgIHsKICAg
ICAgICAgY29uc3QgdWludDhfdCogcHRyID0gYnVmZmVyLmJlZ2luKCk7CkBAIC0xODU1LDE1ICsx
ODQzLDE0IEBAIEpTVmFsdWUgU2VyaWFsaXplZFNjcmlwdFZhbHVlOjpkZXNlcmlhbGl6ZShKU0M6
OkV4ZWNTdGF0ZSogZXhlYywgSlNDOjpKU0dsb2JhbE9iCiAKIFN0cmluZyBTZXJpYWxpemVkU2Ny
aXB0VmFsdWU6OnRvV2lyZVN0cmluZygpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIENsb25lRGVzZXJp
YWxpemVyOjp0b1dpcmVTdHJpbmcobV9kYXRhKTsKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsK
KyAgICByZXR1cm4gU3RyaW5nKCk7CiB9CiAKIFBhc3NSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZh
bHVlPiBTZXJpYWxpemVkU2NyaXB0VmFsdWU6OmNyZWF0ZUZyb21XaXJlKGNvbnN0IFN0cmluZyYg
dmFsdWUpCiB7Ci0gICAgVmVjdG9yPHVpbnQ4X3Q+IGJ1ZmZlcjsKLSAgICBpZiAoIXdyaXRlTGl0
dGxlRW5kaWFuKGJ1ZmZlciwgdmFsdWUuaW1wbCgpLT5jaGFyYWN0ZXJzKCksIHZhbHVlLmxlbmd0
aCgpKSkKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBTZXJpYWxp
emVkU2NyaXB0VmFsdWUoYnVmZmVyKSk7CisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAg
cmV0dXJuIDA7CiB9CiAKIFBhc3NSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiBTZXJpYWxp
emVkU2NyaXB0VmFsdWU6OmNyZWF0ZShKU0NvbnRleHRSZWYgb3JpZ2luQ29udGV4dCwgSlNWYWx1
ZVJlZiBhcGlWYWx1ZSwgCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9T
ZXJpYWxpemVkU2NyaXB0VmFsdWUuaCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1Nlcmlh
bGl6ZWRTY3JpcHRWYWx1ZS5oCmluZGV4IGVjY2E4MjAuLmQ2MTU5ZGQgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1NlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5oCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1NlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5oCkBAIC0xMDUs
NiArMTA1LDEzIEBAIHB1YmxpYzoKICAgICBzdGF0aWMgUGFzc1JlZlB0cjxTZXJpYWxpemVkU2Ny
aXB0VmFsdWU+IGNyZWF0ZUZyb21XaXJlKGNvbnN0IFN0cmluZyYgZGF0YSk7CiAgICAgU3RyaW5n
IHRvV2lyZVN0cmluZygpIGNvbnN0OwogCisgICAgc3RhdGljIFBhc3NSZWZQdHI8U2VyaWFsaXpl
ZFNjcmlwdFZhbHVlPiBjcmVhdGVGcm9tV2lyZShjb25zdCBWZWN0b3I8dWludDhfdD4mIGRhdGEp
CisgICAgeworICAgICAgICBWZWN0b3I8dWludDhfdD4gYnl0ZXMoZGF0YSk7CisgICAgICAgIHJl
dHVybiBhZG9wdChieXRlcyk7CisgICAgfQorICAgIGNvbnN0IFZlY3Rvcjx1aW50OF90PiYgdG9X
aXJlQnl0ZXMoKSBjb25zdCB7IHJldHVybiBtX2RhdGE7IH0KKwogICAgIH5TZXJpYWxpemVkU2Ny
aXB0VmFsdWUoKTsKIAogcHJpdmF0ZToKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL3Y4L1NlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy92OC9TZXJpYWxpemVkU2NyaXB0VmFsdWUuY3BwCmluZGV4IDYyYTA0OGEuLjNjNDU5MDIgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1NlcmlhbGl6ZWRTY3JpcHRWYWx1
ZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvU2VyaWFsaXplZFNjcmlwdFZh
bHVlLmNwcApAQCAtNjQsNiArNjQsNyBAQAogI2luY2x1ZGUgPHd0Zi9BcnJheUJ1ZmZlci5oPgog
I2luY2x1ZGUgPHd0Zi9BcnJheUJ1ZmZlclZpZXcuaD4KICNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9u
cy5oPgorI2luY2x1ZGUgPHd0Zi9CeXRlT3JkZXIuaD4KICNpbmNsdWRlIDx3dGYvRmxvYXQzMkFy
cmF5Lmg+CiAjaW5jbHVkZSA8d3RmL0Zsb2F0NjRBcnJheS5oPgogI2luY2x1ZGUgPHd0Zi9JbnQx
NkFycmF5Lmg+CkBAIC0yMjQ5LDYgKzIyNTAsMjAgQEAgUGFzc1JlZlB0cjxTZXJpYWxpemVkU2Ny
aXB0VmFsdWU+IFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTo6Y3JlYXRlRnJvbVdpcmUoY29uc3QgU3QK
ICAgICByZXR1cm4gYWRvcHRSZWYobmV3IFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZShkYXRhKSk7CiB9
CiAKK1Bhc3NSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiBTZXJpYWxpemVkU2NyaXB0VmFs
dWU6OmNyZWF0ZUZyb21XaXJlKGNvbnN0IFZlY3Rvcjx1aW50OF90PiYgZGF0YSkKK3sKKyAgICAv
LyBEZWNvZGUgd2lyZSBkYXRhIGZyb20gYmlnIGVuZGlhbiB0byBob3N0IGJ5dGUgb3JkZXIuCisg
ICAgQVNTRVJUKCEoZGF0YS5zaXplKCkgJSBzaXplb2YoVUNoYXIpKSk7CisgICAgc2l6ZV90IGxl
bmd0aCA9IGRhdGEuc2l6ZSgpIC8gc2l6ZW9mKFVDaGFyKTsKKyAgICBWZWN0b3I8VUNoYXI+IGJ1
ZmZlcihsZW5ndGgpOworICAgIGNvbnN0IFVDaGFyKiBzcmMgPSByZWludGVycHJldF9jYXN0PGNv
bnN0IFVDaGFyKj4oZGF0YS5kYXRhKCkpOworICAgIFVDaGFyKiBkc3QgPSBidWZmZXIuZGF0YSgp
OworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspCisgICAgICAgIGRzdFtp
XSA9IG50b2hzKHNyY1tpXSk7CisKKyAgICByZXR1cm4gY3JlYXRlRnJvbVdpcmUoU3RyaW5nOjph
ZG9wdChidWZmZXIpKTsKK30KKwogUGFzc1JlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IFNl
cmlhbGl6ZWRTY3JpcHRWYWx1ZTo6Y3JlYXRlKGNvbnN0IFN0cmluZyYgZGF0YSwgdjg6Oklzb2xh
dGUqIGlzb2xhdGUpCiB7CiAgICAgV3JpdGVyIHdyaXRlcihpc29sYXRlKTsKQEAgLTIyOTcsNiAr
MjMxMiwyMCBAQCBQYXNzUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4gU2VyaWFsaXplZFNj
cmlwdFZhbHVlOjpudW1iZXJWYWx1ZShkb3VibGUgdmFsdQogICAgIHJldHVybiBhZG9wdFJlZihu
ZXcgU2VyaWFsaXplZFNjcmlwdFZhbHVlKHdpcmVEYXRhKSk7CiB9CiAKK1ZlY3Rvcjx1aW50OF90
PiBTZXJpYWxpemVkU2NyaXB0VmFsdWU6OnRvV2lyZUJ5dGVzKCkgY29uc3QKK3sKKyAgICAvLyBD
b252ZXJ0IHNlcmlhbGl6ZWQgc3RyaW5nIHRvIGJpZyBlbmRpYW4gd2lyZSBkYXRhLgorICAgIHNp
emVfdCBsZW5ndGggPSBtX2RhdGEubGVuZ3RoKCk7CisgICAgVmVjdG9yPHVpbnQ4X3Q+IHJlc3Vs
dChsZW5ndGggKiBzaXplb2YoVUNoYXIpKTsKKworICAgIGNvbnN0IFVDaGFyKiBzcmMgPSBtX2Rh
dGEuY2hhcmFjdGVycygpOworICAgIFVDaGFyKiBkc3QgPSByZWludGVycHJldF9jYXN0PFVDaGFy
Kj4ocmVzdWx0LmRhdGEoKSk7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBsZW5ndGg7IGkr
KykKKyAgICAgICAgZHN0W2ldID0gaHRvbnMoc3JjW2ldKTsKKworICAgIHJldHVybiByZXN1bHQ7
Cit9CisKIFBhc3NSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiBTZXJpYWxpemVkU2NyaXB0
VmFsdWU6OnJlbGVhc2UoKQogewogICAgIFJlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IHJl
c3VsdCA9IGFkb3B0UmVmKG5ldyBTZXJpYWxpemVkU2NyaXB0VmFsdWUobV9kYXRhKSk7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9TZXJpYWxpemVkU2NyaXB0VmFsdWUu
aCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1NlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5oCmlu
ZGV4IGNiNjYzODQuLjc2ZGQ3MzIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L3Y4L1NlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L3Y4L1NlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5oCkBAIC01Nyw2ICs1Nyw3IEBAIHB1YmxpYzoKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sJiBk
aWRUaHJvdywgdjg6Oklzb2xhdGUqID0gMCk7CiAgICAgc3RhdGljIFBhc3NSZWZQdHI8U2VyaWFs
aXplZFNjcmlwdFZhbHVlPiBjcmVhdGUodjg6OkhhbmRsZTx2ODo6VmFsdWU+LCB2ODo6SXNvbGF0
ZSogPSAwKTsKICAgICBzdGF0aWMgUGFzc1JlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IGNy
ZWF0ZUZyb21XaXJlKGNvbnN0IFN0cmluZyYgZGF0YSk7CisgICAgc3RhdGljIFBhc3NSZWZQdHI8
U2VyaWFsaXplZFNjcmlwdFZhbHVlPiBjcmVhdGVGcm9tV2lyZShjb25zdCBWZWN0b3I8dWludDhf
dD4mIGRhdGEpOwogICAgIHN0YXRpYyBQYXNzUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4g
Y3JlYXRlKGNvbnN0IFN0cmluZyYgZGF0YSwgdjg6Oklzb2xhdGUqID0gMCk7CiAgICAgc3RhdGlj
IFBhc3NSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiBjcmVhdGUoKTsKIApAQCAtNjgsNiAr
NjksNyBAQCBwdWJsaWM6CiAgICAgUGFzc1JlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IHJl
bGVhc2UoKTsKIAogICAgIFN0cmluZyB0b1dpcmVTdHJpbmcoKSBjb25zdCB7IHJldHVybiBtX2Rh
dGE7IH0KKyAgICBWZWN0b3I8dWludDhfdD4gdG9XaXJlQnl0ZXMoKSBjb25zdDsKIAogICAgIC8v
IERlc2VyaWFsaXplcyB0aGUgdmFsdWUgKGluIHRoZSBjdXJyZW50IGNvbnRleHQpLiBSZXR1cm5z
IGEgbnVsbCB2YWx1ZSBpbgogICAgIC8vIGNhc2Ugb2YgZmFpbHVyZS4KLS0gCjEuNy45LjUKCg==
</data>
<flag name="commit-queue"
          id="194689"
          type_id="3"
          status="-"
          setter="buildbot"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>178894</attachid>
            <date>2012-12-11 15:27:22 -0800</date>
            <delta_ts>2012-12-11 16:36:41 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>idb-wire-bytes.patch</filename>
            <type>text/plain</type>
            <size>21095</size>
            <attacher name="Michael Pruett">michael</attacher>
            
              <data encoding="base64">RnJvbTogTWljaGFlbCBQcnVldHQgPG1pY2hhZWxANjhrLm9yZz4KRGF0ZTogVHVlLCAxMSBEZWMg
MjAxMiAxNToxOTozNiAtMDgwMApTdWJqZWN0OiBJbmRleGVkREI6IERvbid0IHVzZSBzdHJpbmdz
IHRvIHJlcHJlc2VudCBzZXJpYWxpemVkIHZhbHVlcwoKLS0tCiBTb3VyY2UvV2ViQ29yZS9DaGFu
Z2VMb2cgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgNDkgKysrKysrKysrKysrKysrKysr
KysKIC4uLi9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkJhY2tpbmdTdG9yZS5jcHAgIHwg
ICAyOCArKysrKy0tLS0tLQogU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCQmFj
a2luZ1N0b3JlLmggfCAgICA2ICstLQogLi4uL01vZHVsZXMvaW5kZXhlZGRiL0lEQkN1cnNvckJh
Y2tlbmRJbXBsLmNwcCAgICAgfCAgICAyICstCiAuLi4vTW9kdWxlcy9pbmRleGVkZGIvSURCSW5k
ZXhCYWNrZW5kSW1wbC5jcHAgICAgICB8ICAgIDQgKy0KIC4uLi9XZWJDb3JlL01vZHVsZXMvaW5k
ZXhlZGRiL0lEQkxldmVsREJDb2RpbmcuY3BwIHwgICAxNSArKysrKysKIC4uLi9XZWJDb3JlL01v
ZHVsZXMvaW5kZXhlZGRiL0lEQkxldmVsREJDb2RpbmcuaCAgIHwgICAgMiArCiAuLi4vaW5kZXhl
ZGRiL0lEQk9iamVjdFN0b3JlQmFja2VuZEltcGwuY3BwICAgICAgICB8ICAgIDYgKy0tCiAuLi4v
V2ViQ29yZS9iaW5kaW5ncy9qcy9TZXJpYWxpemVkU2NyaXB0VmFsdWUuY3BwICB8ICAgMjUgLS0t
LS0tLS0tLQogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvU2VyaWFsaXplZFNjcmlwdFZhbHVl
LmggfCAgICA4ICsrKy0KIC4uLi9XZWJDb3JlL2JpbmRpbmdzL3Y4L1NlcmlhbGl6ZWRTY3JpcHRW
YWx1ZS5jcHAgIHwgICAyOSArKysrKysrKysrKysKIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4
L1NlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5oIHwgICAgMiArCiAxMiBmaWxlcyBjaGFuZ2VkLCAxMjYg
aW5zZXJ0aW9ucygrKSwgNTAgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvQ2hhbmdlTG9nIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCmluZGV4IDFjOTMwMTUuLjYw
NmYxYmEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZworKysgYi9Tb3VyY2Uv
V2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSw1MiBAQAorMjAxMi0xMi0xMSAgTWljaGFlbCBQ
cnVldHQgIDxtaWNoYWVsQDY4ay5vcmc+CisKKyAgICAgICAgSW5kZXhlZERCOiBEb24ndCB1c2Ug
c3RyaW5ncyB0byByZXByZXNlbnQgc2VyaWFsaXplZCB2YWx1ZXMKKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEwNDM1NAorCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFVzZSBWZWN0b3I8dWludDhfdD4gcmF0aGVy
IHRoYW4gU3RyaW5nIHRvIHJlcHJlc2VudCBzZXJpYWxpemVkIHZhbHVlcworICAgICAgICBpbiBJ
bmRleGVkREIuIFRoaXMgY2hhbmdlIGlzIG5lY2Vzc2FyeSB0byBpbXBsZW1lbnQgSW5kZXhlZERC
IGZvciBKU0MuCisKKyAgICAgICAgVGVzdHM6IHN0b3JhZ2UvaW5kZXhlZGRiLyoKKworICAgICAg
ICAqIE1vZHVsZXMvaW5kZXhlZGRiL0lEQkJhY2tpbmdTdG9yZS5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpJREJCYWNraW5nU3RvcmU6OmdldFJlY29yZCk6CisgICAgICAgIChXZWJDb3JlOjpJREJC
YWNraW5nU3RvcmU6OnB1dFJlY29yZCk6CisgICAgICAgIChXZWJDb3JlOjpPYmplY3RTdG9yZUtl
eUN1cnNvckltcGw6OnZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6Ok9iamVjdFN0b3JlQ3Vyc29y
SW1wbDo6dmFsdWUpOgorICAgICAgICAoT2JqZWN0U3RvcmVDdXJzb3JJbXBsKToKKyAgICAgICAg
KFdlYkNvcmU6Ok9iamVjdFN0b3JlQ3Vyc29ySW1wbDo6bG9hZEN1cnJlbnRSb3cpOgorICAgICAg
ICAoV2ViQ29yZTo6SW5kZXhLZXlDdXJzb3JJbXBsOjp2YWx1ZSk6CisgICAgICAgIChXZWJDb3Jl
OjpJbmRleEN1cnNvckltcGw6OnZhbHVlKToKKyAgICAgICAgKEluZGV4Q3Vyc29ySW1wbCk6Cisg
ICAgICAgIChXZWJDb3JlOjpJbmRleEN1cnNvckltcGw6OmxvYWRDdXJyZW50Um93KToKKyAgICAg
ICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9JREJCYWNraW5nU3RvcmUuaDoKKyAgICAgICAgKElEQkJh
Y2tpbmdTdG9yZSk6CisgICAgICAgIChDdXJzb3IpOgorICAgICAgICAqIE1vZHVsZXMvaW5kZXhl
ZGRiL0lEQkN1cnNvckJhY2tlbmRJbXBsLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OklEQkN1cnNv
ckJhY2tlbmRJbXBsOjpDdXJzb3JQcmVmZXRjaEl0ZXJhdGlvbk9wZXJhdGlvbjo6cGVyZm9ybSk6
CisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvSURCSW5kZXhCYWNrZW5kSW1wbC5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpJREJJbmRleEJhY2tlbmRJbXBsOjpJbmRleFJlZmVyZW5jZWRWYWx1
ZVJldHJpZXZhbE9wZXJhdGlvbjo6cGVyZm9ybSk6CisgICAgICAgICogTW9kdWxlcy9pbmRleGVk
ZGIvSURCTGV2ZWxEQkNvZGluZy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJREJMZXZlbERCQ29k
aW5nOjplbmNvZGVJREJWYWx1ZSk6CisgICAgICAgIChJREJMZXZlbERCQ29kaW5nKToKKyAgICAg
ICAgKFdlYkNvcmU6OklEQkxldmVsREJDb2Rpbmc6OmRlY29kZUlEQlZhbHVlKToKKyAgICAgICAg
KiBNb2R1bGVzL2luZGV4ZWRkYi9JREJMZXZlbERCQ29kaW5nLmg6CisgICAgICAgIChJREJMZXZl
bERCQ29kaW5nKToKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9JREJPYmplY3RTdG9yZUJh
Y2tlbmRJbXBsLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OklEQk9iamVjdFN0b3JlQmFja2VuZElt
cGw6Ok9iamVjdFN0b3JlUmV0cmlldmFsT3BlcmF0aW9uOjpwZXJmb3JtKToKKyAgICAgICAgKFdl
YkNvcmU6OklEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6Ok9iamVjdFN0b3JlU3RvcmFnZU9wZXJh
dGlvbjo6cGVyZm9ybSk6CisgICAgICAgICogYmluZGluZ3MvanMvU2VyaWFsaXplZFNjcmlwdFZh
bHVlLmNwcDoKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAqIGJpbmRpbmdzL2pzL1Nlcmlh
bGl6ZWRTY3JpcHRWYWx1ZS5oOgorICAgICAgICAqIGJpbmRpbmdzL3Y4L1NlcmlhbGl6ZWRTY3Jp
cHRWYWx1ZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTZXJpYWxpemVkU2NyaXB0VmFsdWU6OmNy
ZWF0ZUZyb21XaXJlKToKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6U2Vy
aWFsaXplZFNjcmlwdFZhbHVlOjp0b1dpcmVCeXRlcyk6CisgICAgICAgICogYmluZGluZ3Mvdjgv
U2VyaWFsaXplZFNjcmlwdFZhbHVlLmg6CisgICAgICAgIChTZXJpYWxpemVkU2NyaXB0VmFsdWUp
OgorCiAyMDEyLTEyLTExICBIdWFuZyBEb25nc3VuZyAgPGx1eHRlbGxhQGNvbXBhbnkxMDAubmV0
PgogCiAgICAgICAgIFtHVEtdIFJFR1JFU1NJT04ocjEzNTYyMCk6IEFjY2VsZXJhdGVkIENvbXBv
c2l0aW5nIGRvZXMgbm90IGRyYXcgc29tZSBwYWdlcy4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkJhY2tpbmdTdG9yZS5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJCYWNraW5nU3RvcmUuY3BwCmluZGV4IDRiMWExYTcuLjNi
ODBkMjEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkJh
Y2tpbmdTdG9yZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURC
QmFja2luZ1N0b3JlLmNwcApAQCAtNzY2LDcgKzc2Niw3IEBAIGJvb2wgSURCQmFja2luZ1N0b3Jl
OjpkZWxldGVPYmplY3RTdG9yZShJREJCYWNraW5nU3RvcmU6OlRyYW5zYWN0aW9uKiB0cmFuc2Fj
dGlvCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLWJvb2wgSURCQmFja2luZ1N0b3JlOjpnZXRSZWNv
cmQoSURCQmFja2luZ1N0b3JlOjpUcmFuc2FjdGlvbiogdHJhbnNhY3Rpb24sIGludDY0X3QgZGF0
YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBjb25zdCBJREJLZXkmIGtleSwgU3RyaW5n
JiByZWNvcmQpCitib29sIElEQkJhY2tpbmdTdG9yZTo6Z2V0UmVjb3JkKElEQkJhY2tpbmdTdG9y
ZTo6VHJhbnNhY3Rpb24qIHRyYW5zYWN0aW9uLCBpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qg
b2JqZWN0U3RvcmVJZCwgY29uc3QgSURCS2V5JiBrZXksIFZlY3Rvcjx1aW50OF90PiYgcmVjb3Jk
KQogewogICAgIElEQl9UUkFDRSgiSURCQmFja2luZ1N0b3JlOjpnZXRSZWNvcmQiKTsKICAgICBM
ZXZlbERCVHJhbnNhY3Rpb24qIGxldmVsREJUcmFuc2FjdGlvbiA9IElEQkJhY2tpbmdTdG9yZTo6
VHJhbnNhY3Rpb246OmxldmVsREJUcmFuc2FjdGlvbkZyb20odHJhbnNhY3Rpb24pOwpAQCAtNzc3
LDcgKzc3Nyw3IEBAIGJvb2wgSURCQmFja2luZ1N0b3JlOjpnZXRSZWNvcmQoSURCQmFja2luZ1N0
b3JlOjpUcmFuc2FjdGlvbiogdHJhbnNhY3Rpb24sIGludDY0CiAgICAgYm9vbCBmb3VuZCA9IGZh
bHNlOwogICAgIGJvb2wgb2sgPSBsZXZlbERCVHJhbnNhY3Rpb24tPnNhZmVHZXQobGV2ZWxkYktl
eSwgZGF0YSwgZm91bmQpOwogICAgIGlmICghb2spIHsKLSAgICAgICAgcmVjb3JkID0gU3RyaW5n
KCk7CisgICAgICAgIHJlY29yZC5jbGVhcigpOwogICAgICAgICBJbnRlcm5hbEVycm9yKElEQkxl
dmVsREJCYWNraW5nU3RvcmVSZWFkRXJyb3JHZXRSZWNvcmQpOwogICAgICAgICByZXR1cm4gZmFs
c2U7CiAgICAgfQpAQCAtNzg2LDExICs3ODYsMTEgQEAgYm9vbCBJREJCYWNraW5nU3RvcmU6Omdl
dFJlY29yZChJREJCYWNraW5nU3RvcmU6OlRyYW5zYWN0aW9uKiB0cmFuc2FjdGlvbiwgaW50NjQK
ICAgICBjb25zdCBjaGFyKiBwID0gZGVjb2RlVmFySW50KGRhdGEuYmVnaW4oKSwgZGF0YS5lbmQo
KSwgdmVyc2lvbik7CiAgICAgaWYgKCFwKSB7CiAgICAgICAgIEludGVybmFsRXJyb3IoSURCTGV2
ZWxEQkJhY2tpbmdTdG9yZVJlYWRFcnJvckdldFJlY29yZCk7Ci0gICAgICAgIHJlY29yZCA9IFN0
cmluZygpOworICAgICAgICByZWNvcmQuY2xlYXIoKTsKICAgICAgICAgcmV0dXJuIGZhbHNlOwog
ICAgIH0KIAotICAgIHJlY29yZCA9IGRlY29kZVN0cmluZyhwLCBkYXRhLmVuZCgpKTsKKyAgICBy
ZWNvcmQgPSBkZWNvZGVJREJWYWx1ZShwLCBkYXRhLmVuZCgpKTsKICAgICByZXR1cm4gdHJ1ZTsK
IH0KIApAQCAtODIwLDcgKzgyMCw3IEBAIFdBUk5fVU5VU0VEX1JFVFVSTiBzdGF0aWMgYm9vbCBn
ZXROZXdWZXJzaW9uTnVtYmVyKExldmVsREJUcmFuc2FjdGlvbiogdHJhbnNhY3RpCiAgICAgcmV0
dXJuIHRydWU7CiB9CiAKLWJvb2wgSURCQmFja2luZ1N0b3JlOjpwdXRSZWNvcmQoSURCQmFja2lu
Z1N0b3JlOjpUcmFuc2FjdGlvbiogdHJhbnNhY3Rpb24sIGludDY0X3QgZGF0YWJhc2VJZCwgaW50
NjRfdCBvYmplY3RTdG9yZUlkLCBjb25zdCBJREJLZXkmIGtleSwgY29uc3QgU3RyaW5nJiB2YWx1
ZSwgUmVjb3JkSWRlbnRpZmllciogcmVjb3JkSWRlbnRpZmllcikKK2Jvb2wgSURCQmFja2luZ1N0
b3JlOjpwdXRSZWNvcmQoSURCQmFja2luZ1N0b3JlOjpUcmFuc2FjdGlvbiogdHJhbnNhY3Rpb24s
IGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBjb25zdCBJREJLZXkm
IGtleSwgY29uc3QgVmVjdG9yPHVpbnQ4X3Q+JiB2YWx1ZSwgUmVjb3JkSWRlbnRpZmllciogcmVj
b3JkSWRlbnRpZmllcikKIHsKICAgICBJREJfVFJBQ0UoIklEQkJhY2tpbmdTdG9yZTo6cHV0UmVj
b3JkIik7CiAgICAgQVNTRVJUKGtleS5pc1ZhbGlkKCkpOwpAQCAtODM0LDcgKzgzNCw3IEBAIGJv
b2wgSURCQmFja2luZ1N0b3JlOjpwdXRSZWNvcmQoSURCQmFja2luZ1N0b3JlOjpUcmFuc2FjdGlv
biogdHJhbnNhY3Rpb24sIGludDY0CiAKICAgICBWZWN0b3I8Y2hhcj4gdjsKICAgICB2LmFwcGVu
ZChlbmNvZGVWYXJJbnQodmVyc2lvbikpOwotICAgIHYuYXBwZW5kKGVuY29kZVN0cmluZyh2YWx1
ZSkpOworICAgIHYuYXBwZW5kKGVuY29kZUlEQlZhbHVlKHZhbHVlKSk7CiAKICAgICBsZXZlbERC
VHJhbnNhY3Rpb24tPnB1dChvYmplY3RTdG9yZWRhdGFLZXksIHYpOwogCkBAIC0xMzg5LDcgKzEz
ODksNyBAQCBwdWJsaWM6CiAgICAgfQogCiAgICAgLy8gSURCQmFja2luZ1N0b3JlOjpDdXJzb3IK
LSAgICB2aXJ0dWFsIFN0cmluZyB2YWx1ZSgpIGNvbnN0IHsgQVNTRVJUX05PVF9SRUFDSEVEKCk7
IHJldHVybiBTdHJpbmcoKTsgfQorICAgIHZpcnR1YWwgVmVjdG9yPHVpbnQ4X3Q+IHZhbHVlKCkg
Y29uc3QgeyBBU1NFUlRfTk9UX1JFQUNIRUQoKTsgcmV0dXJuIFZlY3Rvcjx1aW50OF90PigpOyB9
CiAgICAgdmlydHVhbCBib29sIGxvYWRDdXJyZW50Um93KCk7CiAKIHByaXZhdGU6CkBAIC0xNDQ1
LDcgKzE0NDUsNyBAQCBwdWJsaWM6CiAgICAgfQogCiAgICAgLy8gSURCQmFja2luZ1N0b3JlOjpD
dXJzb3IKLSAgICB2aXJ0dWFsIFN0cmluZyB2YWx1ZSgpIGNvbnN0IHsgcmV0dXJuIG1fY3VycmVu
dFZhbHVlOyB9CisgICAgdmlydHVhbCBWZWN0b3I8dWludDhfdD4gdmFsdWUoKSBjb25zdCB7IHJl
dHVybiBtX2N1cnJlbnRWYWx1ZTsgfQogICAgIHZpcnR1YWwgYm9vbCBsb2FkQ3VycmVudFJvdygp
OwogCiBwcml2YXRlOgpAQCAtMTQ2MCw3ICsxNDYwLDcgQEAgcHJpdmF0ZToKICAgICB7CiAgICAg
fQogCi0gICAgU3RyaW5nIG1fY3VycmVudFZhbHVlOworICAgIFZlY3Rvcjx1aW50OF90PiBtX2N1
cnJlbnRWYWx1ZTsKIH07CiAKIGJvb2wgT2JqZWN0U3RvcmVDdXJzb3JJbXBsOjpsb2FkQ3VycmVu
dFJvdygpCkBAIC0xNDg3LDcgKzE0ODcsNyBAQCBib29sIE9iamVjdFN0b3JlQ3Vyc29ySW1wbDo6
bG9hZEN1cnJlbnRSb3coKQogICAgIC8vIEZJWE1FOiBUaGlzIHJlLWVuY29kZXMgd2hhdCB3YXMg
anVzdCBkZWNvZGVkOyB0cnkgYW5kIG9wdGltaXplLgogICAgIG1fcmVjb3JkSWRlbnRpZmllci5y
ZXNldChlbmNvZGVJREJLZXkoKm1fY3VycmVudEtleSksIHZlcnNpb24pOwogCi0gICAgbV9jdXJy
ZW50VmFsdWUgPSBkZWNvZGVTdHJpbmcodmFsdWVQb3NpdGlvbiwgbV9pdGVyYXRvci0+dmFsdWUo
KS5lbmQoKSk7CisgICAgbV9jdXJyZW50VmFsdWUgPSBkZWNvZGVJREJWYWx1ZSh2YWx1ZVBvc2l0
aW9uLCBtX2l0ZXJhdG9yLT52YWx1ZSgpLmVuZCgpKTsKIAogICAgIHJldHVybiB0cnVlOwogfQpA
QCAtMTUwNSw3ICsxNTA1LDcgQEAgcHVibGljOgogICAgIH0KIAogICAgIC8vIElEQkJhY2tpbmdT
dG9yZTo6Q3Vyc29yCi0gICAgdmlydHVhbCBTdHJpbmcgdmFsdWUoKSBjb25zdCB7IEFTU0VSVF9O
T1RfUkVBQ0hFRCgpOyByZXR1cm4gU3RyaW5nKCk7IH0KKyAgICB2aXJ0dWFsIFZlY3Rvcjx1aW50
OF90PiB2YWx1ZSgpIGNvbnN0IHsgQVNTRVJUX05PVF9SRUFDSEVEKCk7IHJldHVybiBWZWN0b3I8
dWludDhfdD4oKTsgfQogICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxJREJLZXk+IHByaW1hcnlLZXko
KSBjb25zdCB7IHJldHVybiBtX3ByaW1hcnlLZXk7IH0KICAgICB2aXJ0dWFsIGNvbnN0IElEQkJh
Y2tpbmdTdG9yZTo6UmVjb3JkSWRlbnRpZmllciYgcmVjb3JkSWRlbnRpZmllcigpIGNvbnN0IHsg
QVNTRVJUX05PVF9SRUFDSEVEKCk7IHJldHVybiBtX3JlY29yZElkZW50aWZpZXI7IH0KICAgICB2
aXJ0dWFsIGJvb2wgbG9hZEN1cnJlbnRSb3coKTsKQEAgLTE1ODQsNyArMTU4NCw3IEBAIHB1Ymxp
YzoKICAgICB9CiAKICAgICAvLyBJREJCYWNraW5nU3RvcmU6OkN1cnNvcgotICAgIHZpcnR1YWwg
U3RyaW5nIHZhbHVlKCkgY29uc3QgeyByZXR1cm4gbV92YWx1ZTsgfQorICAgIHZpcnR1YWwgVmVj
dG9yPHVpbnQ4X3Q+IHZhbHVlKCkgY29uc3QgeyByZXR1cm4gbV92YWx1ZTsgfQogICAgIHZpcnR1
YWwgUGFzc1JlZlB0cjxJREJLZXk+IHByaW1hcnlLZXkoKSBjb25zdCB7IHJldHVybiBtX3ByaW1h
cnlLZXk7IH0KICAgICB2aXJ0dWFsIGNvbnN0IElEQkJhY2tpbmdTdG9yZTo6UmVjb3JkSWRlbnRp
ZmllciYgcmVjb3JkSWRlbnRpZmllcigpIGNvbnN0IHsgQVNTRVJUX05PVF9SRUFDSEVEKCk7IHJl
dHVybiBtX3JlY29yZElkZW50aWZpZXI7IH0KICAgICBib29sIGxvYWRDdXJyZW50Um93KCk7CkBA
IC0xNjA0LDcgKzE2MDQsNyBAQCBwcml2YXRlOgogICAgIH0KIAogICAgIFJlZlB0cjxJREJLZXk+
IG1fcHJpbWFyeUtleTsKLSAgICBTdHJpbmcgbV92YWx1ZTsKKyAgICBWZWN0b3I8dWludDhfdD4g
bV92YWx1ZTsKICAgICBWZWN0b3I8Y2hhcj4gbV9wcmltYXJ5TGV2ZWxEQktleTsKIH07CiAKQEAg
LTE2NTMsNyArMTY1Myw3IEBAIGJvb2wgSW5kZXhDdXJzb3JJbXBsOjpsb2FkQ3VycmVudFJvdygp
CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAKLSAgICBtX3ZhbHVlID0gZGVjb2RlU3Ry
aW5nKHQsIHJlc3VsdC5lbmQoKSk7CisgICAgbV92YWx1ZSA9IGRlY29kZUlEQlZhbHVlKHQsIHJl
c3VsdC5lbmQoKSk7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkJhY2tpbmdTdG9yZS5oIGIvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy9pbmRleGVkZGIvSURCQmFja2luZ1N0b3JlLmgKaW5kZXggNWQxYWFjYy4uYWJj
OWNmZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCQmFj
a2luZ1N0b3JlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCQmFj
a2luZ1N0b3JlLmgKQEAgLTc3LDggKzc3LDggQEAgcHVibGljOgogICAgICAgICBpbnQ2NF90IG1f
dmVyc2lvbjsKICAgICB9OwogCi0gICAgdmlydHVhbCBib29sIGdldFJlY29yZChJREJCYWNraW5n
U3RvcmU6OlRyYW5zYWN0aW9uKiwgaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0
b3JlSWQsIGNvbnN0IElEQktleSYsIFN0cmluZyYgcmVjb3JkKSBXQVJOX1VOVVNFRF9SRVRVUk47
Ci0gICAgdmlydHVhbCBib29sIHB1dFJlY29yZChJREJCYWNraW5nU3RvcmU6OlRyYW5zYWN0aW9u
KiwgaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGNvbnN0IElEQktl
eSYsIGNvbnN0IFN0cmluZyYgdmFsdWUsIFJlY29yZElkZW50aWZpZXIqKSBXQVJOX1VOVVNFRF9S
RVRVUk47CisgICAgdmlydHVhbCBib29sIGdldFJlY29yZChJREJCYWNraW5nU3RvcmU6OlRyYW5z
YWN0aW9uKiwgaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGNvbnN0
IElEQktleSYsIFZlY3Rvcjx1aW50OF90PiYgcmVjb3JkKSBXQVJOX1VOVVNFRF9SRVRVUk47Cisg
ICAgdmlydHVhbCBib29sIHB1dFJlY29yZChJREJCYWNraW5nU3RvcmU6OlRyYW5zYWN0aW9uKiwg
aW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGNvbnN0IElEQktleSYs
IGNvbnN0IFZlY3Rvcjx1aW50OF90PiYgdmFsdWUsIFJlY29yZElkZW50aWZpZXIqKTsKICAgICB2
aXJ0dWFsIHZvaWQgY2xlYXJPYmplY3RTdG9yZShJREJCYWNraW5nU3RvcmU6OlRyYW5zYWN0aW9u
KiwgaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQpOwogICAgIHZpcnR1
YWwgdm9pZCBkZWxldGVSZWNvcmQoSURCQmFja2luZ1N0b3JlOjpUcmFuc2FjdGlvbiosIGludDY0
X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBjb25zdCBSZWNvcmRJZGVudGlm
aWVyJik7CiAgICAgdmlydHVhbCBib29sIGdldEtleUdlbmVyYXRvckN1cnJlbnROdW1iZXIoSURC
QmFja2luZ1N0b3JlOjpUcmFuc2FjdGlvbiosIGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBv
YmplY3RTdG9yZUlkLCBpbnQ2NF90JiBjdXJyZW50TnVtYmVyKSBXQVJOX1VOVVNFRF9SRVRVUk47
CkBAIC0xMTUsNyArMTE1LDcgQEAgcHVibGljOgogCiAgICAgICAgIHZpcnR1YWwgUGFzc1JlZlB0
cjxDdXJzb3I+IGNsb25lKCkgPSAwOwogICAgICAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8SURCS2V5
PiBwcmltYXJ5S2V5KCkgY29uc3QgeyByZXR1cm4gbV9jdXJyZW50S2V5OyB9Ci0gICAgICAgIHZp
cnR1YWwgU3RyaW5nIHZhbHVlKCkgY29uc3QgPSAwOworICAgICAgICB2aXJ0dWFsIFZlY3Rvcjx1
aW50OF90PiB2YWx1ZSgpIGNvbnN0ID0gMDsKICAgICAgICAgdmlydHVhbCBjb25zdCBSZWNvcmRJ
ZGVudGlmaWVyJiByZWNvcmRJZGVudGlmaWVyKCkgY29uc3QgeyByZXR1cm4gbV9yZWNvcmRJZGVu
dGlmaWVyOyB9CiAgICAgICAgIHZpcnR1YWwgfkN1cnNvcigpIHsgfQogICAgICAgICB2aXJ0dWFs
IGJvb2wgbG9hZEN1cnJlbnRSb3coKSA9IDA7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL2luZGV4ZWRkYi9JREJDdXJzb3JCYWNrZW5kSW1wbC5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJDdXJzb3JCYWNrZW5kSW1wbC5jcHAKaW5kZXggZDI3NTg4
My4uNDk3NDg4ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIv
SURCQ3Vyc29yQmFja2VuZEltcGwuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5k
ZXhlZGRiL0lEQkN1cnNvckJhY2tlbmRJbXBsLmNwcApAQCAtMjE2LDcgKzIxNiw3IEBAIHZvaWQg
SURCQ3Vyc29yQmFja2VuZEltcGw6OkN1cnNvclByZWZldGNoSXRlcmF0aW9uT3BlcmF0aW9uOjpw
ZXJmb3JtKElEQlRyYW5zYWN0CiAgICAgICAgIHNpemVFc3RpbWF0ZSArPSBtX2N1cnNvci0+bV9j
dXJzb3ItPmtleSgpLT5zaXplRXN0aW1hdGUoKTsKICAgICAgICAgc2l6ZUVzdGltYXRlICs9IG1f
Y3Vyc29yLT5tX2N1cnNvci0+cHJpbWFyeUtleSgpLT5zaXplRXN0aW1hdGUoKTsKICAgICAgICAg
aWYgKG1fY3Vyc29yLT5tX2N1cnNvclR5cGUgIT0gSURCQ3Vyc29yQmFja2VuZEludGVyZmFjZTo6
SW5kZXhLZXlDdXJzb3IpCi0gICAgICAgICAgICBzaXplRXN0aW1hdGUgKz0gbV9jdXJzb3ItPm1f
Y3Vyc29yLT52YWx1ZSgpLmxlbmd0aCgpICogc2l6ZW9mKFVDaGFyKTsKKyAgICAgICAgICAgIHNp
emVFc3RpbWF0ZSArPSBtX2N1cnNvci0+bV9jdXJzb3ItPnZhbHVlKCkuc2l6ZSgpOwogCiAgICAg
ICAgIGlmIChzaXplRXN0aW1hdGUgPiBtYXhTaXplRXN0aW1hdGUpCiAgICAgICAgICAgICBicmVh
azsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkluZGV4
QmFja2VuZEltcGwuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCSW5k
ZXhCYWNrZW5kSW1wbC5jcHAKaW5kZXggOTFlZThmMC4uODVlMWJlMCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCSW5kZXhCYWNrZW5kSW1wbC5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCSW5kZXhCYWNrZW5kSW1wbC5j
cHAKQEAgLTIzNywxNCArMjM3LDE0IEBAIHZvaWQgSURCSW5kZXhCYWNrZW5kSW1wbDo6SW5kZXhS
ZWZlcmVuY2VkVmFsdWVSZXRyaWV2YWxPcGVyYXRpb246OnBlcmZvcm0oSURCVHJhCiAgICAgICAg
IHJldHVybjsKICAgICB9CiAKLSAgICBTdHJpbmcgdmFsdWU7CisgICAgVmVjdG9yPHVpbnQ4X3Q+
IHZhbHVlOwogICAgIG9rID0gbV9pbmRleC0+YmFja2luZ1N0b3JlKCktPmdldFJlY29yZCh0cmFu
c2FjdGlvbi0+YmFja2luZ1N0b3JlVHJhbnNhY3Rpb24oKSwgbV9pbmRleC0+ZGF0YWJhc2VJZCgp
LCBtX2luZGV4LT5tX29iamVjdFN0b3JlQmFja2VuZC0+aWQoKSwgKnByaW1hcnlLZXksIHZhbHVl
KTsKICAgICBpZiAoIW9rKSB7CiAgICAgICAgIG1fY2FsbGJhY2tzLT5vbkVycm9yKElEQkRhdGFi
YXNlRXJyb3I6OmNyZWF0ZShJREJEYXRhYmFzZUV4Y2VwdGlvbjo6VW5rbm93bkVycm9yLCAiSW50
ZXJuYWwgZXJyb3IgaW4gZ2V0UmVjb3JkLiIpKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAot
ICAgIGlmICh2YWx1ZS5pc051bGwoKSkgeworICAgIGlmICh2YWx1ZS5pc0VtcHR5KCkpIHsKICAg
ICAgICAgbV9jYWxsYmFja3MtPm9uU3VjY2VzcygpOwogICAgICAgICByZXR1cm47CiAgICAgfQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCTGV2ZWxEQkNv
ZGluZy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJMZXZlbERCQ29k
aW5nLmNwcAppbmRleCAxZGFlZGIwLi42OWYxNjkwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJMZXZlbERCQ29kaW5nLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJMZXZlbERCQ29kaW5nLmNwcApAQCAtNTYxLDYgKzU2
MSwyMSBAQCBjb25zdCBjaGFyKiBleHRyYWN0RW5jb2RlZElEQktleShjb25zdCBjaGFyKiBzdGFy
dCwgY29uc3QgY2hhciogbGltaXQsIFZlY3RvcjxjaAogICAgIHJldHVybiBwOwogfQogCitWZWN0
b3I8Y2hhcj4gZW5jb2RlSURCVmFsdWUoY29uc3QgVmVjdG9yPHVpbnQ4X3Q+JiB2YWx1ZSkKK3sK
KyAgICBWZWN0b3I8Y2hhcj4gcmVzdWx0OworICAgIHJlc3VsdC5hcHBlbmRWZWN0b3IodmFsdWUp
OworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK1ZlY3Rvcjx1aW50OF90PiBkZWNvZGVJREJWYWx1
ZShjb25zdCBjaGFyKiBzdGFydCwgY29uc3QgY2hhciogbGltaXQpCit7CisgICAgQVNTRVJUKGxp
bWl0ID49IHN0YXJ0KTsKKyAgICBWZWN0b3I8dWludDhfdD4gcmVzdWx0OworICAgIHJlc3VsdC5h
cHBlbmQoc3RhcnQsIGxpbWl0IC0gc3RhcnQpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKIHN0
YXRpYyBJREJLZXk6OlR5cGUga2V5VHlwZUJ5dGVUb0tleVR5cGUodW5zaWduZWQgY2hhciB0eXBl
KQogewogICAgIHN3aXRjaCAodHlwZSkgewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9k
dWxlcy9pbmRleGVkZGIvSURCTGV2ZWxEQkNvZGluZy5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy9pbmRleGVkZGIvSURCTGV2ZWxEQkNvZGluZy5oCmluZGV4IDAwZjdjZGIuLmM1MGY5Y2QgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkxldmVsREJDb2Rp
bmcuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJMZXZlbERCQ29k
aW5nLmgKQEAgLTcxLDYgKzcxLDggQEAgY29uc3QgY2hhciogZXh0cmFjdEVuY29kZWRJREJLZXko
Y29uc3QgY2hhciogc3RhcnQsIGNvbnN0IGNoYXIqIGxpbWl0LCBWZWN0b3I8Y2gKIGludCBjb21w
YXJlRW5jb2RlZElEQktleXMoY29uc3QgVmVjdG9yPGNoYXI+JiwgY29uc3QgVmVjdG9yPGNoYXI+
Jik7CiBWZWN0b3I8Y2hhcj4gZW5jb2RlSURCS2V5UGF0aChjb25zdCBJREJLZXlQYXRoJik7CiBJ
REJLZXlQYXRoIGRlY29kZUlEQktleVBhdGgoY29uc3QgY2hhciosIGNvbnN0IGNoYXIqKTsKK1Zl
Y3RvcjxjaGFyPiBlbmNvZGVJREJWYWx1ZShjb25zdCBWZWN0b3I8dWludDhfdD4mKTsKK1ZlY3Rv
cjx1aW50OF90PiBkZWNvZGVJREJWYWx1ZShjb25zdCBjaGFyKiwgY29uc3QgY2hhciopOwogCiBp
bnQgY29tcGFyZShjb25zdCBMZXZlbERCU2xpY2UmLCBjb25zdCBMZXZlbERCU2xpY2UmLCBib29s
IGluZGV4S2V5cyA9IGZhbHNlKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy9pbmRleGVkZGIvSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbC5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsLmNwcAppbmRleCA4
MmViZDQ2Li5mNzZkYzkxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4
ZWRkYi9JREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL2luZGV4ZWRkYi9JREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsLmNwcApAQCAtMzA4LDEz
ICszMDgsMTMgQEAgdm9pZCBJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpPYmplY3RTdG9yZVJl
dHJpZXZhbE9wZXJhdGlvbjo6cGVyZm9ybShJREJUcmFuc2EKICAgICAgICAga2V5ID0gYmFja2lu
Z1N0b3JlQ3Vyc29yLT5rZXkoKTsKICAgICB9CiAKLSAgICBTdHJpbmcgd2lyZURhdGE7CisgICAg
VmVjdG9yPHVpbnQ4X3Q+IHdpcmVEYXRhOwogICAgIGJvb2wgb2sgPSBtX29iamVjdFN0b3JlLT5i
YWNraW5nU3RvcmUoKS0+Z2V0UmVjb3JkKHRyYW5zYWN0aW9uLT5iYWNraW5nU3RvcmVUcmFuc2Fj
dGlvbigpLCBtX29iamVjdFN0b3JlLT5kYXRhYmFzZUlkKCksIG1fb2JqZWN0U3RvcmUtPmlkKCks
ICprZXksIHdpcmVEYXRhKTsKICAgICBpZiAoIW9rKSB7CiAgICAgICAgIG1fY2FsbGJhY2tzLT5v
bkVycm9yKElEQkRhdGFiYXNlRXJyb3I6OmNyZWF0ZShJREJEYXRhYmFzZUV4Y2VwdGlvbjo6VW5r
bm93bkVycm9yLCAiSW50ZXJuYWwgZXJyb3IgaW4gZ2V0UmVjb3JkLiIpKTsKICAgICAgICAgcmV0
dXJuOwogICAgIH0KLSAgICBpZiAod2lyZURhdGEuaXNOdWxsKCkpIHsKKyAgICBpZiAod2lyZURh
dGEuaXNFbXB0eSgpKSB7CiAgICAgICAgIG1fY2FsbGJhY2tzLT5vblN1Y2Nlc3MoKTsKICAgICAg
ICAgcmV0dXJuOwogICAgIH0KQEAgLTU2MSw3ICs1NjEsNyBAQCB2b2lkIElEQk9iamVjdFN0b3Jl
QmFja2VuZEltcGw6Ok9iamVjdFN0b3JlU3RvcmFnZU9wZXJhdGlvbjo6cGVyZm9ybShJREJUcmFu
c2FjdAogCiAgICAgLy8gQmVmb3JlIHRoaXMgcG9pbnQsIGRvbid0IGRvIGFueSBtdXRhdGlvbi4g
IEFmdGVyIHRoaXMgcG9pbnQsIHJvbGxiYWNrIHRoZSB0cmFuc2FjdGlvbiBpbiBjYXNlIG9mIGVy
cm9yLgogCi0gICAgYmFja2luZ1N0b3JlU3VjY2VzcyA9IG1fb2JqZWN0U3RvcmUtPmJhY2tpbmdT
dG9yZSgpLT5wdXRSZWNvcmQodHJhbnNhY3Rpb24tPmJhY2tpbmdTdG9yZVRyYW5zYWN0aW9uKCks
IG1fb2JqZWN0U3RvcmUtPmRhdGFiYXNlSWQoKSwgbV9vYmplY3RTdG9yZS0+aWQoKSwgKm1fa2V5
LCBtX3ZhbHVlLT50b1dpcmVTdHJpbmcoKSwgJnJlY29yZElkZW50aWZpZXIpOworICAgIGJhY2tp
bmdTdG9yZVN1Y2Nlc3MgPSBtX29iamVjdFN0b3JlLT5iYWNraW5nU3RvcmUoKS0+cHV0UmVjb3Jk
KHRyYW5zYWN0aW9uLT5iYWNraW5nU3RvcmVUcmFuc2FjdGlvbigpLCBtX29iamVjdFN0b3JlLT5k
YXRhYmFzZUlkKCksIG1fb2JqZWN0U3RvcmUtPmlkKCksICptX2tleSwgbV92YWx1ZS0+dG9XaXJl
Qnl0ZXMoKSwgJnJlY29yZElkZW50aWZpZXIpOwogICAgIGlmICghYmFja2luZ1N0b3JlU3VjY2Vz
cykgewogICAgICAgICBtX2NhbGxiYWNrcy0+b25FcnJvcihJREJEYXRhYmFzZUVycm9yOjpjcmVh
dGUoSURCRGF0YWJhc2VFeGNlcHRpb246OlVua25vd25FcnJvciwgIkludGVybmFsIGVycm9yOiBi
YWNraW5nIHN0b3JlIGVycm9yIHBlcmZvcm1pbmcgcHV0L2FkZC4iKSk7CiAgICAgICAgIHJldHVy
bjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1NlcmlhbGl6ZWRTY3Jp
cHRWYWx1ZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9TZXJpYWxpemVkU2NyaXB0
VmFsdWUuY3BwCmluZGV4IDhhMDI4NDYuLjFhNmMwMDkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL2pzL1NlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvYmluZGluZ3MvanMvU2VyaWFsaXplZFNjcmlwdFZhbHVlLmNwcApAQCAtMTAwMywxOCAr
MTAwMyw2IEBAIHR5cGVkZWYgVmVjdG9yPFdURjo6QXJyYXlCdWZmZXJDb250ZW50cz4gQXJyYXlC
dWZmZXJDb250ZW50c0FycmF5OwogCiBjbGFzcyBDbG9uZURlc2VyaWFsaXplciA6IENsb25lQmFz
ZSB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFN0cmluZyB0b1dpcmVTdHJpbmcoY29uc3QgVmVjdG9y
PHVuc2lnbmVkIGNoYXI+JiB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIGNvbnN0IHVpbnQ4X3QqIHN0
YXJ0ID0gdmFsdWUuYmVnaW4oKTsKLSAgICAgICAgY29uc3QgdWludDhfdCogZW5kID0gdmFsdWUu
ZW5kKCk7Ci0gICAgICAgIGNvbnN0IHVpbnQzMl90IGxlbmd0aCA9IHZhbHVlLnNpemUoKSAvIHNp
emVvZihVQ2hhcik7Ci0gICAgICAgIFN0cmluZyBzdHI7Ci0gICAgICAgIGlmICghQ2xvbmVEZXNl
cmlhbGl6ZXI6OnJlYWRTdHJpbmcoc3RhcnQsIGVuZCwgc3RyLCBsZW5ndGgpKQotICAgICAgICAg
ICAgcmV0dXJuIFN0cmluZygpOwotCi0gICAgICAgIHJldHVybiBTdHJpbmcoc3RyLmltcGwoKSk7
Ci0gICAgfQotCiAgICAgc3RhdGljIFN0cmluZyBkZXNlcmlhbGl6ZVN0cmluZyhjb25zdCBWZWN0
b3I8dWludDhfdD4mIGJ1ZmZlcikKICAgICB7CiAgICAgICAgIGNvbnN0IHVpbnQ4X3QqIHB0ciA9
IGJ1ZmZlci5iZWdpbigpOwpAQCAtMTg1MywxOSArMTg0MSw2IEBAIEpTVmFsdWUgU2VyaWFsaXpl
ZFNjcmlwdFZhbHVlOjpkZXNlcmlhbGl6ZShKU0M6OkV4ZWNTdGF0ZSogZXhlYywgSlNDOjpKU0ds
b2JhbE9iCiB9CiAjZW5kaWYKIAotU3RyaW5nIFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTo6dG9XaXJl
U3RyaW5nKCkgY29uc3QKLXsKLSAgICByZXR1cm4gQ2xvbmVEZXNlcmlhbGl6ZXI6OnRvV2lyZVN0
cmluZyhtX2RhdGEpOwotfQotCi1QYXNzUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4gU2Vy
aWFsaXplZFNjcmlwdFZhbHVlOjpjcmVhdGVGcm9tV2lyZShjb25zdCBTdHJpbmcmIHZhbHVlKQot
ewotICAgIFZlY3Rvcjx1aW50OF90PiBidWZmZXI7Ci0gICAgaWYgKCF3cml0ZUxpdHRsZUVuZGlh
bihidWZmZXIsIHZhbHVlLmltcGwoKS0+Y2hhcmFjdGVycygpLCB2YWx1ZS5sZW5ndGgoKSkpCi0g
ICAgICAgIHJldHVybiAwOwotICAgIHJldHVybiBhZG9wdFJlZihuZXcgU2VyaWFsaXplZFNjcmlw
dFZhbHVlKGJ1ZmZlcikpOwotfQotCiBQYXNzUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4g
U2VyaWFsaXplZFNjcmlwdFZhbHVlOjpjcmVhdGUoSlNDb250ZXh0UmVmIG9yaWdpbkNvbnRleHQs
IEpTVmFsdWVSZWYgYXBpVmFsdWUsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1lc3NhZ2VQb3J0QXJyYXkqIG1lc3NhZ2VQ
b3J0cywgQXJyYXlCdWZmZXJBcnJheSogYXJyYXlCdWZmZXJzLAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEpTVmFsdWVSZWYq
IGV4Y2VwdGlvbikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1Nlcmlh
bGl6ZWRTY3JpcHRWYWx1ZS5oIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvU2VyaWFsaXpl
ZFNjcmlwdFZhbHVlLmgKaW5kZXggODA5MTg1My4uMWYzNTI2YSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvYmluZGluZ3MvanMvU2VyaWFsaXplZFNjcmlwdFZhbHVlLmgKKysrIGIvU291cmNl
L1dlYkNvcmUvYmluZGluZ3MvanMvU2VyaWFsaXplZFNjcmlwdFZhbHVlLmgKQEAgLTEwNCw4ICsx
MDQsMTIgQEAgcHVibGljOgogICAgIEpTQzo6SlNWYWx1ZSBkZXNlcmlhbGl6ZShKU0M6OkV4ZWNT
dGF0ZSosIEpTQzo6SlNHbG9iYWxPYmplY3QqKTsKICNlbmRpZgogCi0gICAgc3RhdGljIFBhc3NS
ZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiBjcmVhdGVGcm9tV2lyZShjb25zdCBTdHJpbmcm
IGRhdGEpOwotICAgIFN0cmluZyB0b1dpcmVTdHJpbmcoKSBjb25zdDsKKyAgICBzdGF0aWMgUGFz
c1JlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IGNyZWF0ZUZyb21XaXJlKGNvbnN0IFZlY3Rv
cjx1aW50OF90PiYgZGF0YSkKKyAgICB7CisgICAgICAgIFZlY3Rvcjx1aW50OF90PiBieXRlcyhk
YXRhKTsKKyAgICAgICAgcmV0dXJuIGFkb3B0KGJ5dGVzKTsKKyAgICB9CisgICAgY29uc3QgVmVj
dG9yPHVpbnQ4X3Q+JiB0b1dpcmVCeXRlcygpIGNvbnN0IHsgcmV0dXJuIG1fZGF0YTsgfQogCiAg
ICAgflNlcmlhbGl6ZWRTY3JpcHRWYWx1ZSgpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy92OC9TZXJpYWxpemVkU2NyaXB0VmFsdWUuY3BwIGIvU291cmNlL1dlYkNvcmUv
YmluZGluZ3MvdjgvU2VyaWFsaXplZFNjcmlwdFZhbHVlLmNwcAppbmRleCA5MWY4ZWYwLi4yYjQz
ODJmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9TZXJpYWxpemVkU2Ny
aXB0VmFsdWUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1NlcmlhbGl6ZWRT
Y3JpcHRWYWx1ZS5jcHAKQEAgLTY0LDYgKzY0LDcgQEAKICNpbmNsdWRlIDx3dGYvQXJyYXlCdWZm
ZXIuaD4KICNpbmNsdWRlIDx3dGYvQXJyYXlCdWZmZXJWaWV3Lmg+CiAjaW5jbHVkZSA8d3RmL0Fz
c2VydGlvbnMuaD4KKyNpbmNsdWRlIDx3dGYvQnl0ZU9yZGVyLmg+CiAjaW5jbHVkZSA8d3RmL0Zs
b2F0MzJBcnJheS5oPgogI2luY2x1ZGUgPHd0Zi9GbG9hdDY0QXJyYXkuaD4KICNpbmNsdWRlIDx3
dGYvSW50MTZBcnJheS5oPgpAQCAtMjI0OSw2ICsyMjUwLDIwIEBAIFBhc3NSZWZQdHI8U2VyaWFs
aXplZFNjcmlwdFZhbHVlPiBTZXJpYWxpemVkU2NyaXB0VmFsdWU6OmNyZWF0ZUZyb21XaXJlKGNv
bnN0IFN0CiAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBTZXJpYWxpemVkU2NyaXB0VmFsdWUoZGF0
YSkpOwogfQogCitQYXNzUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4gU2VyaWFsaXplZFNj
cmlwdFZhbHVlOjpjcmVhdGVGcm9tV2lyZShjb25zdCBWZWN0b3I8dWludDhfdD4mIGRhdGEpCit7
CisgICAgLy8gRGVjb2RlIHdpcmUgZGF0YSBmcm9tIGJpZyBlbmRpYW4gdG8gaG9zdCBieXRlIG9y
ZGVyLgorICAgIEFTU0VSVCghKGRhdGEuc2l6ZSgpICUgc2l6ZW9mKFVDaGFyKSkpOworICAgIHNp
emVfdCBsZW5ndGggPSBkYXRhLnNpemUoKSAvIHNpemVvZihVQ2hhcik7CisgICAgVmVjdG9yPFVD
aGFyPiBidWZmZXIobGVuZ3RoKTsKKyAgICBjb25zdCBVQ2hhciogc3JjID0gcmVpbnRlcnByZXRf
Y2FzdDxjb25zdCBVQ2hhcio+KGRhdGEuZGF0YSgpKTsKKyAgICBVQ2hhciogZHN0ID0gYnVmZmVy
LmRhdGEoKTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKQorICAgICAg
ICBkc3RbaV0gPSBudG9ocyhzcmNbaV0pOworCisgICAgcmV0dXJuIGNyZWF0ZUZyb21XaXJlKFN0
cmluZzo6YWRvcHQoYnVmZmVyKSk7Cit9CisKIFBhc3NSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZh
bHVlPiBTZXJpYWxpemVkU2NyaXB0VmFsdWU6OmNyZWF0ZShjb25zdCBTdHJpbmcmIGRhdGEsIHY4
OjpJc29sYXRlKiBpc29sYXRlKQogewogICAgIFdyaXRlciB3cml0ZXIoaXNvbGF0ZSk7CkBAIC0y
Mjk3LDYgKzIzMTIsMjAgQEAgUGFzc1JlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IFNlcmlh
bGl6ZWRTY3JpcHRWYWx1ZTo6bnVtYmVyVmFsdWUoZG91YmxlIHZhbHUKICAgICByZXR1cm4gYWRv
cHRSZWYobmV3IFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZSh3aXJlRGF0YSkpOwogfQogCitWZWN0b3I8
dWludDhfdD4gU2VyaWFsaXplZFNjcmlwdFZhbHVlOjp0b1dpcmVCeXRlcygpIGNvbnN0Cit7Cisg
ICAgLy8gQ29udmVydCBzZXJpYWxpemVkIHN0cmluZyB0byBiaWcgZW5kaWFuIHdpcmUgZGF0YS4K
KyAgICBzaXplX3QgbGVuZ3RoID0gbV9kYXRhLmxlbmd0aCgpOworICAgIFZlY3Rvcjx1aW50OF90
PiByZXN1bHQobGVuZ3RoICogc2l6ZW9mKFVDaGFyKSk7CisKKyAgICBjb25zdCBVQ2hhciogc3Jj
ID0gbV9kYXRhLmNoYXJhY3RlcnMoKTsKKyAgICBVQ2hhciogZHN0ID0gcmVpbnRlcnByZXRfY2Fz
dDxVQ2hhcio+KHJlc3VsdC5kYXRhKCkpOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbGVu
Z3RoOyBpKyspCisgICAgICAgIGRzdFtpXSA9IGh0b25zKHNyY1tpXSk7CisKKyAgICByZXR1cm4g
cmVzdWx0OworfQorCiBQYXNzUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4gU2VyaWFsaXpl
ZFNjcmlwdFZhbHVlOjpyZWxlYXNlKCkKIHsKICAgICBSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZh
bHVlPiByZXN1bHQgPSBhZG9wdFJlZihuZXcgU2VyaWFsaXplZFNjcmlwdFZhbHVlKG1fZGF0YSkp
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvU2VyaWFsaXplZFNjcmlw
dFZhbHVlLmggYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9TZXJpYWxpemVkU2NyaXB0VmFs
dWUuaAppbmRleCA2OWVhOGQ4Li40OTE1YTIyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy92OC9TZXJpYWxpemVkU2NyaXB0VmFsdWUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy92OC9TZXJpYWxpemVkU2NyaXB0VmFsdWUuaApAQCAtNTcsNiArNTcsNyBAQCBwdWJs
aWM6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Ym9vbCYgZGlkVGhyb3csIHY4OjpJc29sYXRlKiA9IDApOwogICAgIHN0YXRpYyBQYXNzUmVmUHRy
PFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4gY3JlYXRlKHY4OjpIYW5kbGU8djg6OlZhbHVlPiwgdjg6
Oklzb2xhdGUqID0gMCk7CiAgICAgc3RhdGljIFBhc3NSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZh
bHVlPiBjcmVhdGVGcm9tV2lyZShjb25zdCBTdHJpbmcmIGRhdGEpOworICAgIHN0YXRpYyBQYXNz
UmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4gY3JlYXRlRnJvbVdpcmUoY29uc3QgVmVjdG9y
PHVpbnQ4X3Q+JiBkYXRhKTsKICAgICBzdGF0aWMgUGFzc1JlZlB0cjxTZXJpYWxpemVkU2NyaXB0
VmFsdWU+IGNyZWF0ZShjb25zdCBTdHJpbmcmIGRhdGEsIHY4OjpJc29sYXRlKiA9IDApOwogICAg
IHN0YXRpYyBQYXNzUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4gY3JlYXRlKCk7CiAKQEAg
LTcwLDYgKzcxLDcgQEAgcHVibGljOgogICAgIFBhc3NSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZh
bHVlPiByZWxlYXNlKCk7CiAKICAgICBTdHJpbmcgdG9XaXJlU3RyaW5nKCkgY29uc3QgeyByZXR1
cm4gbV9kYXRhOyB9CisgICAgVmVjdG9yPHVpbnQ4X3Q+IHRvV2lyZUJ5dGVzKCkgY29uc3Q7CiAK
ICAgICAvLyBEZXNlcmlhbGl6ZXMgdGhlIHZhbHVlIChpbiB0aGUgY3VycmVudCBjb250ZXh0KS4g
UmV0dXJucyBhIG51bGwgdmFsdWUgaW4KICAgICAvLyBjYXNlIG9mIGZhaWx1cmUuCi0tIAoxLjcu
OS41Cgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>178915</attachid>
            <date>2012-12-11 16:36:41 -0800</date>
            <delta_ts>2012-12-15 07:44:47 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>idb-wire-bytes.patch</filename>
            <type>text/plain</type>
            <size>19753</size>
            <attacher name="Michael Pruett">michael</attacher>
            
              <data encoding="base64">RnJvbTogTWljaGFlbCBQcnVldHQgPG1pY2hhZWxANjhrLm9yZz4KRGF0ZTogVHVlLCAxMSBEZWMg
MjAxMiAxNjoyODozMyAtMDgwMApTdWJqZWN0OiBJbmRleGVkREI6IERvbid0IHVzZSBzdHJpbmdz
IHRvIHJlcHJlc2VudCBzZXJpYWxpemVkIHZhbHVlcwoKLS0tCiBTb3VyY2UvV2ViQ29yZS9DaGFu
Z2VMb2cgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgNDUgKysrKysrKysrKysrKysrKysr
KysKIC4uLi9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkJhY2tpbmdTdG9yZS5jcHAgIHwg
ICAzMiArKysrKysrKy0tLS0tLQogU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURC
QmFja2luZ1N0b3JlLmggfCAgICA2ICstLQogLi4uL01vZHVsZXMvaW5kZXhlZGRiL0lEQkN1cnNv
ckJhY2tlbmRJbXBsLmNwcCAgICAgfCAgICAyICstCiAuLi4vTW9kdWxlcy9pbmRleGVkZGIvSURC
SW5kZXhCYWNrZW5kSW1wbC5jcHAgICAgICB8ICAgIDQgKy0KIC4uLi9pbmRleGVkZGIvSURCT2Jq
ZWN0U3RvcmVCYWNrZW5kSW1wbC5jcHAgICAgICAgIHwgICAgNiArLS0KIC4uLi9XZWJDb3JlL2Jp
bmRpbmdzL2pzL1NlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5jcHAgIHwgICAyNSAtLS0tLS0tLS0tLQog
U291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvU2VyaWFsaXplZFNjcmlwdFZhbHVlLmggfCAgICA4
ICsrKy0KIC4uLi9XZWJDb3JlL2JpbmRpbmdzL3Y4L1NlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5jcHAg
IHwgICAyOSArKysrKysrKysrKysrCiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9TZXJpYWxp
emVkU2NyaXB0VmFsdWUuaCB8ICAgIDIgKwogMTAgZmlsZXMgY2hhbmdlZCwgMTA5IGluc2VydGlv
bnMoKyksIDUwIGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCAxYzkzMDE1Li5iOGU5NGUyIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUv
Q2hhbmdlTG9nCkBAIC0xLDMgKzEsNDggQEAKKzIwMTItMTItMTEgIE1pY2hhZWwgUHJ1ZXR0ICA8
bWljaGFlbEA2OGsub3JnPgorCisgICAgICAgIEluZGV4ZWREQjogRG9uJ3QgdXNlIHN0cmluZ3Mg
dG8gcmVwcmVzZW50IHNlcmlhbGl6ZWQgdmFsdWVzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMDQzNTQKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JP
RFkgKE9PUFMhKS4KKworICAgICAgICBVc2UgVmVjdG9yPHVpbnQ4X3Q+IHJhdGhlciB0aGFuIFN0
cmluZyB0byByZXByZXNlbnQgc2VyaWFsaXplZCB2YWx1ZXMKKyAgICAgICAgaW4gSW5kZXhlZERC
LiBUaGlzIGNoYW5nZSBpcyBuZWNlc3NhcnkgdG8gaW1wbGVtZW50IEluZGV4ZWREQiBmb3IgSlND
LgorCisgICAgICAgIFRlc3RzOiBzdG9yYWdlL2luZGV4ZWRkYi8qCisKKyAgICAgICAgKiBNb2R1
bGVzL2luZGV4ZWRkYi9JREJCYWNraW5nU3RvcmUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SURC
QmFja2luZ1N0b3JlOjpnZXRSZWNvcmQpOgorICAgICAgICAoV2ViQ29yZTo6SURCQmFja2luZ1N0
b3JlOjpwdXRSZWNvcmQpOgorICAgICAgICAoV2ViQ29yZTo6T2JqZWN0U3RvcmVLZXlDdXJzb3JJ
bXBsOjp2YWx1ZSk6CisgICAgICAgIChPYmplY3RTdG9yZUtleUN1cnNvckltcGwpOgorICAgICAg
ICAoV2ViQ29yZTo6T2JqZWN0U3RvcmVDdXJzb3JJbXBsOjp2YWx1ZSk6CisgICAgICAgIChPYmpl
Y3RTdG9yZUN1cnNvckltcGwpOgorICAgICAgICAoV2ViQ29yZTo6T2JqZWN0U3RvcmVDdXJzb3JJ
bXBsOjpsb2FkQ3VycmVudFJvdyk6CisgICAgICAgIChXZWJDb3JlOjpJbmRleEtleUN1cnNvcklt
cGw6OnZhbHVlKToKKyAgICAgICAgKEluZGV4S2V5Q3Vyc29ySW1wbCk6CisgICAgICAgIChXZWJD
b3JlOjpJbmRleEN1cnNvckltcGw6OnZhbHVlKToKKyAgICAgICAgKEluZGV4Q3Vyc29ySW1wbCk6
CisgICAgICAgIChXZWJDb3JlOjpJbmRleEN1cnNvckltcGw6OmxvYWRDdXJyZW50Um93KToKKyAg
ICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9JREJCYWNraW5nU3RvcmUuaDoKKyAgICAgICAgKElE
QkJhY2tpbmdTdG9yZSk6CisgICAgICAgIChDdXJzb3IpOgorICAgICAgICAqIE1vZHVsZXMvaW5k
ZXhlZGRiL0lEQkN1cnNvckJhY2tlbmRJbXBsLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OklEQkN1
cnNvckJhY2tlbmRJbXBsOjpDdXJzb3JQcmVmZXRjaEl0ZXJhdGlvbk9wZXJhdGlvbjo6cGVyZm9y
bSk6CisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvSURCSW5kZXhCYWNrZW5kSW1wbC5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpJREJJbmRleEJhY2tlbmRJbXBsOjpJbmRleFJlZmVyZW5jZWRW
YWx1ZVJldHJpZXZhbE9wZXJhdGlvbjo6cGVyZm9ybSk6CisgICAgICAgICogTW9kdWxlcy9pbmRl
eGVkZGIvSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJ
REJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpPYmplY3RTdG9yZVJldHJpZXZhbE9wZXJhdGlvbjo6
cGVyZm9ybSk6CisgICAgICAgIChXZWJDb3JlOjpJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpP
YmplY3RTdG9yZVN0b3JhZ2VPcGVyYXRpb246OnBlcmZvcm0pOgorICAgICAgICAqIGJpbmRpbmdz
L2pzL1NlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5jcHA6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAg
ICAgKiBiaW5kaW5ncy9qcy9TZXJpYWxpemVkU2NyaXB0VmFsdWUuaDoKKyAgICAgICAgKiBiaW5k
aW5ncy92OC9TZXJpYWxpemVkU2NyaXB0VmFsdWUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U2Vy
aWFsaXplZFNjcmlwdFZhbHVlOjpjcmVhdGVGcm9tV2lyZSk6CisgICAgICAgIChXZWJDb3JlKToK
KyAgICAgICAgKFdlYkNvcmU6OlNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTo6dG9XaXJlQnl0ZXMpOgor
ICAgICAgICAqIGJpbmRpbmdzL3Y4L1NlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5oOgorICAgICAgICAo
U2VyaWFsaXplZFNjcmlwdFZhbHVlKToKKwogMjAxMi0xMi0xMSAgSHVhbmcgRG9uZ3N1bmcgIDxs
dXh0ZWxsYUBjb21wYW55MTAwLm5ldD4KIAogICAgICAgICBbR1RLXSBSRUdSRVNTSU9OKHIxMzU2
MjApOiBBY2NlbGVyYXRlZCBDb21wb3NpdGluZyBkb2VzIG5vdCBkcmF3IHNvbWUgcGFnZXMuCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJCYWNraW5nU3Rv
cmUuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCQmFja2luZ1N0b3Jl
LmNwcAppbmRleCA0YjFhMWE3Li5jNzNkZmZkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL2luZGV4ZWRkYi9JREJCYWNraW5nU3RvcmUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvaW5kZXhlZGRiL0lEQkJhY2tpbmdTdG9yZS5jcHAKQEAgLTc2Niw3ICs3NjYsNyBA
QCBib29sIElEQkJhY2tpbmdTdG9yZTo6ZGVsZXRlT2JqZWN0U3RvcmUoSURCQmFja2luZ1N0b3Jl
OjpUcmFuc2FjdGlvbiogdHJhbnNhY3RpbwogICAgIHJldHVybiB0cnVlOwogfQogCi1ib29sIElE
QkJhY2tpbmdTdG9yZTo6Z2V0UmVjb3JkKElEQkJhY2tpbmdTdG9yZTo6VHJhbnNhY3Rpb24qIHRy
YW5zYWN0aW9uLCBpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgY29u
c3QgSURCS2V5JiBrZXksIFN0cmluZyYgcmVjb3JkKQorYm9vbCBJREJCYWNraW5nU3RvcmU6Omdl
dFJlY29yZChJREJCYWNraW5nU3RvcmU6OlRyYW5zYWN0aW9uKiB0cmFuc2FjdGlvbiwgaW50NjRf
dCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGNvbnN0IElEQktleSYga2V5LCBW
ZWN0b3I8dWludDhfdD4mIHJlY29yZCkKIHsKICAgICBJREJfVFJBQ0UoIklEQkJhY2tpbmdTdG9y
ZTo6Z2V0UmVjb3JkIik7CiAgICAgTGV2ZWxEQlRyYW5zYWN0aW9uKiBsZXZlbERCVHJhbnNhY3Rp
b24gPSBJREJCYWNraW5nU3RvcmU6OlRyYW5zYWN0aW9uOjpsZXZlbERCVHJhbnNhY3Rpb25Gcm9t
KHRyYW5zYWN0aW9uKTsKQEAgLTc3NCwxMCArNzc0LDExIEBAIGJvb2wgSURCQmFja2luZ1N0b3Jl
OjpnZXRSZWNvcmQoSURCQmFja2luZ1N0b3JlOjpUcmFuc2FjdGlvbiogdHJhbnNhY3Rpb24sIGlu
dDY0CiAgICAgY29uc3QgVmVjdG9yPGNoYXI+IGxldmVsZGJLZXkgPSBPYmplY3RTdG9yZURhdGFL
ZXk6OmVuY29kZShkYXRhYmFzZUlkLCBvYmplY3RTdG9yZUlkLCBrZXkpOwogICAgIFZlY3Rvcjxj
aGFyPiBkYXRhOwogCisgICAgcmVjb3JkLmNsZWFyKCk7CisKICAgICBib29sIGZvdW5kID0gZmFs
c2U7CiAgICAgYm9vbCBvayA9IGxldmVsREJUcmFuc2FjdGlvbi0+c2FmZUdldChsZXZlbGRiS2V5
LCBkYXRhLCBmb3VuZCk7CiAgICAgaWYgKCFvaykgewotICAgICAgICByZWNvcmQgPSBTdHJpbmco
KTsKICAgICAgICAgSW50ZXJuYWxFcnJvcihJREJMZXZlbERCQmFja2luZ1N0b3JlUmVhZEVycm9y
R2V0UmVjb3JkKTsKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KQEAgLTc4NiwxMSArNzg3
LDEwIEBAIGJvb2wgSURCQmFja2luZ1N0b3JlOjpnZXRSZWNvcmQoSURCQmFja2luZ1N0b3JlOjpU
cmFuc2FjdGlvbiogdHJhbnNhY3Rpb24sIGludDY0CiAgICAgY29uc3QgY2hhciogcCA9IGRlY29k
ZVZhckludChkYXRhLmJlZ2luKCksIGRhdGEuZW5kKCksIHZlcnNpb24pOwogICAgIGlmICghcCkg
ewogICAgICAgICBJbnRlcm5hbEVycm9yKElEQkxldmVsREJCYWNraW5nU3RvcmVSZWFkRXJyb3JH
ZXRSZWNvcmQpOwotICAgICAgICByZWNvcmQgPSBTdHJpbmcoKTsKICAgICAgICAgcmV0dXJuIGZh
bHNlOwogICAgIH0KIAotICAgIHJlY29yZCA9IGRlY29kZVN0cmluZyhwLCBkYXRhLmVuZCgpKTsK
KyAgICByZWNvcmQuYXBwZW5kUmFuZ2UocCwgc3RhdGljX2Nhc3Q8Y29uc3QgY2hhcio+KGRhdGEu
ZW5kKCkpKTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIApAQCAtODIwLDcgKzgyMCw3IEBAIFdBUk5f
VU5VU0VEX1JFVFVSTiBzdGF0aWMgYm9vbCBnZXROZXdWZXJzaW9uTnVtYmVyKExldmVsREJUcmFu
c2FjdGlvbiogdHJhbnNhY3RpCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLWJvb2wgSURCQmFja2lu
Z1N0b3JlOjpwdXRSZWNvcmQoSURCQmFja2luZ1N0b3JlOjpUcmFuc2FjdGlvbiogdHJhbnNhY3Rp
b24sIGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBjb25zdCBJREJL
ZXkmIGtleSwgY29uc3QgU3RyaW5nJiB2YWx1ZSwgUmVjb3JkSWRlbnRpZmllciogcmVjb3JkSWRl
bnRpZmllcikKK2Jvb2wgSURCQmFja2luZ1N0b3JlOjpwdXRSZWNvcmQoSURCQmFja2luZ1N0b3Jl
OjpUcmFuc2FjdGlvbiogdHJhbnNhY3Rpb24sIGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBv
YmplY3RTdG9yZUlkLCBjb25zdCBJREJLZXkmIGtleSwgY29uc3QgVmVjdG9yPHVpbnQ4X3Q+JiB2
YWx1ZSwgUmVjb3JkSWRlbnRpZmllciogcmVjb3JkSWRlbnRpZmllcikKIHsKICAgICBJREJfVFJB
Q0UoIklEQkJhY2tpbmdTdG9yZTo6cHV0UmVjb3JkIik7CiAgICAgQVNTRVJUKGtleS5pc1ZhbGlk
KCkpOwpAQCAtODM0LDcgKzgzNCw3IEBAIGJvb2wgSURCQmFja2luZ1N0b3JlOjpwdXRSZWNvcmQo
SURCQmFja2luZ1N0b3JlOjpUcmFuc2FjdGlvbiogdHJhbnNhY3Rpb24sIGludDY0CiAKICAgICBW
ZWN0b3I8Y2hhcj4gdjsKICAgICB2LmFwcGVuZChlbmNvZGVWYXJJbnQodmVyc2lvbikpOwotICAg
IHYuYXBwZW5kKGVuY29kZVN0cmluZyh2YWx1ZSkpOworICAgIHYuYXBwZW5kVmVjdG9yKHZhbHVl
KTsKIAogICAgIGxldmVsREJUcmFuc2FjdGlvbi0+cHV0KG9iamVjdFN0b3JlZGF0YUtleSwgdik7
CiAKQEAgLTEzODksNyArMTM4OSw3IEBAIHB1YmxpYzoKICAgICB9CiAKICAgICAvLyBJREJCYWNr
aW5nU3RvcmU6OkN1cnNvcgotICAgIHZpcnR1YWwgU3RyaW5nIHZhbHVlKCkgY29uc3QgeyBBU1NF
UlRfTk9UX1JFQUNIRUQoKTsgcmV0dXJuIFN0cmluZygpOyB9CisgICAgdmlydHVhbCBjb25zdCBW
ZWN0b3I8dWludDhfdD4mIHZhbHVlKCkgY29uc3QgeyBBU1NFUlRfTk9UX1JFQUNIRUQoKTsgcmV0
dXJuIG1fZW1wdHlWYWx1ZTsgfQogICAgIHZpcnR1YWwgYm9vbCBsb2FkQ3VycmVudFJvdygpOwog
CiBwcml2YXRlOgpAQCAtMTQwMyw2ICsxNDAzLDcgQEAgcHJpdmF0ZToKICAgICB7CiAgICAgfQog
CisgICAgVmVjdG9yPHVpbnQ4X3Q+IG1fZW1wdHlWYWx1ZTsKIH07CiAKIGJvb2wgT2JqZWN0U3Rv
cmVLZXlDdXJzb3JJbXBsOjpsb2FkQ3VycmVudFJvdygpCkBAIC0xNDQ1LDcgKzE0NDYsNyBAQCBw
dWJsaWM6CiAgICAgfQogCiAgICAgLy8gSURCQmFja2luZ1N0b3JlOjpDdXJzb3IKLSAgICB2aXJ0
dWFsIFN0cmluZyB2YWx1ZSgpIGNvbnN0IHsgcmV0dXJuIG1fY3VycmVudFZhbHVlOyB9CisgICAg
dmlydHVhbCBjb25zdCBWZWN0b3I8dWludDhfdD4mIHZhbHVlKCkgY29uc3QgeyByZXR1cm4gbV9j
dXJyZW50VmFsdWU7IH0KICAgICB2aXJ0dWFsIGJvb2wgbG9hZEN1cnJlbnRSb3coKTsKIAogcHJp
dmF0ZToKQEAgLTE0NjAsNyArMTQ2MSw3IEBAIHByaXZhdGU6CiAgICAgewogICAgIH0KIAotICAg
IFN0cmluZyBtX2N1cnJlbnRWYWx1ZTsKKyAgICBWZWN0b3I8dWludDhfdD4gbV9jdXJyZW50VmFs
dWU7CiB9OwogCiBib29sIE9iamVjdFN0b3JlQ3Vyc29ySW1wbDo6bG9hZEN1cnJlbnRSb3coKQpA
QCAtMTQ4Nyw3ICsxNDg4LDggQEAgYm9vbCBPYmplY3RTdG9yZUN1cnNvckltcGw6OmxvYWRDdXJy
ZW50Um93KCkKICAgICAvLyBGSVhNRTogVGhpcyByZS1lbmNvZGVzIHdoYXQgd2FzIGp1c3QgZGVj
b2RlZDsgdHJ5IGFuZCBvcHRpbWl6ZS4KICAgICBtX3JlY29yZElkZW50aWZpZXIucmVzZXQoZW5j
b2RlSURCS2V5KCptX2N1cnJlbnRLZXkpLCB2ZXJzaW9uKTsKIAotICAgIG1fY3VycmVudFZhbHVl
ID0gZGVjb2RlU3RyaW5nKHZhbHVlUG9zaXRpb24sIG1faXRlcmF0b3ItPnZhbHVlKCkuZW5kKCkp
OworICAgIG1fY3VycmVudFZhbHVlLmNsZWFyKCk7CisgICAgbV9jdXJyZW50VmFsdWUuYXBwZW5k
UmFuZ2UodmFsdWVQb3NpdGlvbiwgc3RhdGljX2Nhc3Q8Y29uc3QgY2hhcio+KG1faXRlcmF0b3It
PnZhbHVlKCkuZW5kKCkpKTsKIAogICAgIHJldHVybiB0cnVlOwogfQpAQCAtMTUwNSw3ICsxNTA3
LDcgQEAgcHVibGljOgogICAgIH0KIAogICAgIC8vIElEQkJhY2tpbmdTdG9yZTo6Q3Vyc29yCi0g
ICAgdmlydHVhbCBTdHJpbmcgdmFsdWUoKSBjb25zdCB7IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOyBy
ZXR1cm4gU3RyaW5nKCk7IH0KKyAgICB2aXJ0dWFsIGNvbnN0IFZlY3Rvcjx1aW50OF90PiYgdmFs
dWUoKSBjb25zdCB7IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOyByZXR1cm4gbV9lbXB0eVZhbHVlOyB9
CiAgICAgdmlydHVhbCBQYXNzUmVmUHRyPElEQktleT4gcHJpbWFyeUtleSgpIGNvbnN0IHsgcmV0
dXJuIG1fcHJpbWFyeUtleTsgfQogICAgIHZpcnR1YWwgY29uc3QgSURCQmFja2luZ1N0b3JlOjpS
ZWNvcmRJZGVudGlmaWVyJiByZWNvcmRJZGVudGlmaWVyKCkgY29uc3QgeyBBU1NFUlRfTk9UX1JF
QUNIRUQoKTsgcmV0dXJuIG1fcmVjb3JkSWRlbnRpZmllcjsgfQogICAgIHZpcnR1YWwgYm9vbCBs
b2FkQ3VycmVudFJvdygpOwpAQCAtMTUyMyw2ICsxNTI1LDcgQEAgcHJpdmF0ZToKICAgICB9CiAK
ICAgICBSZWZQdHI8SURCS2V5PiBtX3ByaW1hcnlLZXk7CisgICAgVmVjdG9yPHVpbnQ4X3Q+IG1f
ZW1wdHlWYWx1ZTsKIH07CiAKIGJvb2wgSW5kZXhLZXlDdXJzb3JJbXBsOjpsb2FkQ3VycmVudFJv
dygpCkBAIC0xNTg0LDcgKzE1ODcsNyBAQCBwdWJsaWM6CiAgICAgfQogCiAgICAgLy8gSURCQmFj
a2luZ1N0b3JlOjpDdXJzb3IKLSAgICB2aXJ0dWFsIFN0cmluZyB2YWx1ZSgpIGNvbnN0IHsgcmV0
dXJuIG1fdmFsdWU7IH0KKyAgICB2aXJ0dWFsIGNvbnN0IFZlY3Rvcjx1aW50OF90PiYgdmFsdWUo
KSBjb25zdCB7IHJldHVybiBtX3ZhbHVlOyB9CiAgICAgdmlydHVhbCBQYXNzUmVmUHRyPElEQktl
eT4gcHJpbWFyeUtleSgpIGNvbnN0IHsgcmV0dXJuIG1fcHJpbWFyeUtleTsgfQogICAgIHZpcnR1
YWwgY29uc3QgSURCQmFja2luZ1N0b3JlOjpSZWNvcmRJZGVudGlmaWVyJiByZWNvcmRJZGVudGlm
aWVyKCkgY29uc3QgeyBBU1NFUlRfTk9UX1JFQUNIRUQoKTsgcmV0dXJuIG1fcmVjb3JkSWRlbnRp
ZmllcjsgfQogICAgIGJvb2wgbG9hZEN1cnJlbnRSb3coKTsKQEAgLTE2MDQsNyArMTYwNyw3IEBA
IHByaXZhdGU6CiAgICAgfQogCiAgICAgUmVmUHRyPElEQktleT4gbV9wcmltYXJ5S2V5OwotICAg
IFN0cmluZyBtX3ZhbHVlOworICAgIFZlY3Rvcjx1aW50OF90PiBtX3ZhbHVlOwogICAgIFZlY3Rv
cjxjaGFyPiBtX3ByaW1hcnlMZXZlbERCS2V5OwogfTsKIApAQCAtMTY1Myw3ICsxNjU2LDggQEAg
Ym9vbCBJbmRleEN1cnNvckltcGw6OmxvYWRDdXJyZW50Um93KCkKICAgICAgICAgcmV0dXJuIGZh
bHNlOwogICAgIH0KIAotICAgIG1fdmFsdWUgPSBkZWNvZGVTdHJpbmcodCwgcmVzdWx0LmVuZCgp
KTsKKyAgICBtX3ZhbHVlLmNsZWFyKCk7CisgICAgbV92YWx1ZS5hcHBlbmRSYW5nZSh0LCBzdGF0
aWNfY2FzdDxjb25zdCBjaGFyKj4ocmVzdWx0LmVuZCgpKSk7CiAgICAgcmV0dXJuIHRydWU7CiB9
CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkJhY2tp
bmdTdG9yZS5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCQmFja2luZ1N0
b3JlLmgKaW5kZXggNWQxYWFjYy4uMmY5OWNhMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy9pbmRleGVkZGIvSURCQmFja2luZ1N0b3JlLmgKKysrIGIvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy9pbmRleGVkZGIvSURCQmFja2luZ1N0b3JlLmgKQEAgLTc3LDggKzc3LDggQEAgcHVi
bGljOgogICAgICAgICBpbnQ2NF90IG1fdmVyc2lvbjsKICAgICB9OwogCi0gICAgdmlydHVhbCBi
b29sIGdldFJlY29yZChJREJCYWNraW5nU3RvcmU6OlRyYW5zYWN0aW9uKiwgaW50NjRfdCBkYXRh
YmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGNvbnN0IElEQktleSYsIFN0cmluZyYgcmVj
b3JkKSBXQVJOX1VOVVNFRF9SRVRVUk47Ci0gICAgdmlydHVhbCBib29sIHB1dFJlY29yZChJREJC
YWNraW5nU3RvcmU6OlRyYW5zYWN0aW9uKiwgaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9i
amVjdFN0b3JlSWQsIGNvbnN0IElEQktleSYsIGNvbnN0IFN0cmluZyYgdmFsdWUsIFJlY29yZElk
ZW50aWZpZXIqKSBXQVJOX1VOVVNFRF9SRVRVUk47CisgICAgdmlydHVhbCBib29sIGdldFJlY29y
ZChJREJCYWNraW5nU3RvcmU6OlRyYW5zYWN0aW9uKiwgaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2
NF90IG9iamVjdFN0b3JlSWQsIGNvbnN0IElEQktleSYsIFZlY3Rvcjx1aW50OF90PiYgcmVjb3Jk
KSBXQVJOX1VOVVNFRF9SRVRVUk47CisgICAgdmlydHVhbCBib29sIHB1dFJlY29yZChJREJCYWNr
aW5nU3RvcmU6OlRyYW5zYWN0aW9uKiwgaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVj
dFN0b3JlSWQsIGNvbnN0IElEQktleSYsIGNvbnN0IFZlY3Rvcjx1aW50OF90PiYgdmFsdWUsIFJl
Y29yZElkZW50aWZpZXIqKSBXQVJOX1VOVVNFRF9SRVRVUk47CiAgICAgdmlydHVhbCB2b2lkIGNs
ZWFyT2JqZWN0U3RvcmUoSURCQmFja2luZ1N0b3JlOjpUcmFuc2FjdGlvbiosIGludDY0X3QgZGF0
YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkKTsKICAgICB2aXJ0dWFsIHZvaWQgZGVsZXRl
UmVjb3JkKElEQkJhY2tpbmdTdG9yZTo6VHJhbnNhY3Rpb24qLCBpbnQ2NF90IGRhdGFiYXNlSWQs
IGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgY29uc3QgUmVjb3JkSWRlbnRpZmllciYpOwogICAgIHZp
cnR1YWwgYm9vbCBnZXRLZXlHZW5lcmF0b3JDdXJyZW50TnVtYmVyKElEQkJhY2tpbmdTdG9yZTo6
VHJhbnNhY3Rpb24qLCBpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwg
aW50NjRfdCYgY3VycmVudE51bWJlcikgV0FSTl9VTlVTRURfUkVUVVJOOwpAQCAtMTE1LDcgKzEx
NSw3IEBAIHB1YmxpYzoKIAogICAgICAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8Q3Vyc29yPiBjbG9u
ZSgpID0gMDsKICAgICAgICAgdmlydHVhbCBQYXNzUmVmUHRyPElEQktleT4gcHJpbWFyeUtleSgp
IGNvbnN0IHsgcmV0dXJuIG1fY3VycmVudEtleTsgfQotICAgICAgICB2aXJ0dWFsIFN0cmluZyB2
YWx1ZSgpIGNvbnN0ID0gMDsKKyAgICAgICAgdmlydHVhbCBjb25zdCBWZWN0b3I8dWludDhfdD4m
IHZhbHVlKCkgY29uc3QgPSAwOwogICAgICAgICB2aXJ0dWFsIGNvbnN0IFJlY29yZElkZW50aWZp
ZXImIHJlY29yZElkZW50aWZpZXIoKSBjb25zdCB7IHJldHVybiBtX3JlY29yZElkZW50aWZpZXI7
IH0KICAgICAgICAgdmlydHVhbCB+Q3Vyc29yKCkgeyB9CiAgICAgICAgIHZpcnR1YWwgYm9vbCBs
b2FkQ3VycmVudFJvdygpID0gMDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
aW5kZXhlZGRiL0lEQkN1cnNvckJhY2tlbmRJbXBsLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvaW5kZXhlZGRiL0lEQkN1cnNvckJhY2tlbmRJbXBsLmNwcAppbmRleCBkMjc1ODgzLi40OTc0
ODhlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJDdXJz
b3JCYWNrZW5kSW1wbC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIv
SURCQ3Vyc29yQmFja2VuZEltcGwuY3BwCkBAIC0yMTYsNyArMjE2LDcgQEAgdm9pZCBJREJDdXJz
b3JCYWNrZW5kSW1wbDo6Q3Vyc29yUHJlZmV0Y2hJdGVyYXRpb25PcGVyYXRpb246OnBlcmZvcm0o
SURCVHJhbnNhY3QKICAgICAgICAgc2l6ZUVzdGltYXRlICs9IG1fY3Vyc29yLT5tX2N1cnNvci0+
a2V5KCktPnNpemVFc3RpbWF0ZSgpOwogICAgICAgICBzaXplRXN0aW1hdGUgKz0gbV9jdXJzb3It
Pm1fY3Vyc29yLT5wcmltYXJ5S2V5KCktPnNpemVFc3RpbWF0ZSgpOwogICAgICAgICBpZiAobV9j
dXJzb3ItPm1fY3Vyc29yVHlwZSAhPSBJREJDdXJzb3JCYWNrZW5kSW50ZXJmYWNlOjpJbmRleEtl
eUN1cnNvcikKLSAgICAgICAgICAgIHNpemVFc3RpbWF0ZSArPSBtX2N1cnNvci0+bV9jdXJzb3It
PnZhbHVlKCkubGVuZ3RoKCkgKiBzaXplb2YoVUNoYXIpOworICAgICAgICAgICAgc2l6ZUVzdGlt
YXRlICs9IG1fY3Vyc29yLT5tX2N1cnNvci0+dmFsdWUoKS5zaXplKCk7CiAKICAgICAgICAgaWYg
KHNpemVFc3RpbWF0ZSA+IG1heFNpemVFc3RpbWF0ZSkKICAgICAgICAgICAgIGJyZWFrOwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCSW5kZXhCYWNrZW5k
SW1wbC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJJbmRleEJhY2tl
bmRJbXBsLmNwcAppbmRleCA5MWVlOGYwLi44NWUxYmUwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJJbmRleEJhY2tlbmRJbXBsLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJJbmRleEJhY2tlbmRJbXBsLmNwcApAQCAt
MjM3LDE0ICsyMzcsMTQgQEAgdm9pZCBJREJJbmRleEJhY2tlbmRJbXBsOjpJbmRleFJlZmVyZW5j
ZWRWYWx1ZVJldHJpZXZhbE9wZXJhdGlvbjo6cGVyZm9ybShJREJUcmEKICAgICAgICAgcmV0dXJu
OwogICAgIH0KIAotICAgIFN0cmluZyB2YWx1ZTsKKyAgICBWZWN0b3I8dWludDhfdD4gdmFsdWU7
CiAgICAgb2sgPSBtX2luZGV4LT5iYWNraW5nU3RvcmUoKS0+Z2V0UmVjb3JkKHRyYW5zYWN0aW9u
LT5iYWNraW5nU3RvcmVUcmFuc2FjdGlvbigpLCBtX2luZGV4LT5kYXRhYmFzZUlkKCksIG1faW5k
ZXgtPm1fb2JqZWN0U3RvcmVCYWNrZW5kLT5pZCgpLCAqcHJpbWFyeUtleSwgdmFsdWUpOwogICAg
IGlmICghb2spIHsKICAgICAgICAgbV9jYWxsYmFja3MtPm9uRXJyb3IoSURCRGF0YWJhc2VFcnJv
cjo6Y3JlYXRlKElEQkRhdGFiYXNlRXhjZXB0aW9uOjpVbmtub3duRXJyb3IsICJJbnRlcm5hbCBl
cnJvciBpbiBnZXRSZWNvcmQuIikpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgaWYg
KHZhbHVlLmlzTnVsbCgpKSB7CisgICAgaWYgKHZhbHVlLmlzRW1wdHkoKSkgewogICAgICAgICBt
X2NhbGxiYWNrcy0+b25TdWNjZXNzKCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJPYmplY3RTdG9yZUJhY2tl
bmRJbXBsLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQk9iamVjdFN0
b3JlQmFja2VuZEltcGwuY3BwCmluZGV4IDgyZWJkNDYuLmY3NmRjOTEgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQk9iamVjdFN0b3JlQmFja2VuZEltcGwu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQk9iamVjdFN0b3Jl
QmFja2VuZEltcGwuY3BwCkBAIC0zMDgsMTMgKzMwOCwxMyBAQCB2b2lkIElEQk9iamVjdFN0b3Jl
QmFja2VuZEltcGw6Ok9iamVjdFN0b3JlUmV0cmlldmFsT3BlcmF0aW9uOjpwZXJmb3JtKElEQlRy
YW5zYQogICAgICAgICBrZXkgPSBiYWNraW5nU3RvcmVDdXJzb3ItPmtleSgpOwogICAgIH0KIAot
ICAgIFN0cmluZyB3aXJlRGF0YTsKKyAgICBWZWN0b3I8dWludDhfdD4gd2lyZURhdGE7CiAgICAg
Ym9vbCBvayA9IG1fb2JqZWN0U3RvcmUtPmJhY2tpbmdTdG9yZSgpLT5nZXRSZWNvcmQodHJhbnNh
Y3Rpb24tPmJhY2tpbmdTdG9yZVRyYW5zYWN0aW9uKCksIG1fb2JqZWN0U3RvcmUtPmRhdGFiYXNl
SWQoKSwgbV9vYmplY3RTdG9yZS0+aWQoKSwgKmtleSwgd2lyZURhdGEpOwogICAgIGlmICghb2sp
IHsKICAgICAgICAgbV9jYWxsYmFja3MtPm9uRXJyb3IoSURCRGF0YWJhc2VFcnJvcjo6Y3JlYXRl
KElEQkRhdGFiYXNlRXhjZXB0aW9uOjpVbmtub3duRXJyb3IsICJJbnRlcm5hbCBlcnJvciBpbiBn
ZXRSZWNvcmQuIikpOwogICAgICAgICByZXR1cm47CiAgICAgfQotICAgIGlmICh3aXJlRGF0YS5p
c051bGwoKSkgeworICAgIGlmICh3aXJlRGF0YS5pc0VtcHR5KCkpIHsKICAgICAgICAgbV9jYWxs
YmFja3MtPm9uU3VjY2VzcygpOwogICAgICAgICByZXR1cm47CiAgICAgfQpAQCAtNTYxLDcgKzU2
MSw3IEBAIHZvaWQgSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6T2JqZWN0U3RvcmVTdG9yYWdl
T3BlcmF0aW9uOjpwZXJmb3JtKElEQlRyYW5zYWN0CiAKICAgICAvLyBCZWZvcmUgdGhpcyBwb2lu
dCwgZG9uJ3QgZG8gYW55IG11dGF0aW9uLiAgQWZ0ZXIgdGhpcyBwb2ludCwgcm9sbGJhY2sgdGhl
IHRyYW5zYWN0aW9uIGluIGNhc2Ugb2YgZXJyb3IuCiAKLSAgICBiYWNraW5nU3RvcmVTdWNjZXNz
ID0gbV9vYmplY3RTdG9yZS0+YmFja2luZ1N0b3JlKCktPnB1dFJlY29yZCh0cmFuc2FjdGlvbi0+
YmFja2luZ1N0b3JlVHJhbnNhY3Rpb24oKSwgbV9vYmplY3RTdG9yZS0+ZGF0YWJhc2VJZCgpLCBt
X29iamVjdFN0b3JlLT5pZCgpLCAqbV9rZXksIG1fdmFsdWUtPnRvV2lyZVN0cmluZygpLCAmcmVj
b3JkSWRlbnRpZmllcik7CisgICAgYmFja2luZ1N0b3JlU3VjY2VzcyA9IG1fb2JqZWN0U3RvcmUt
PmJhY2tpbmdTdG9yZSgpLT5wdXRSZWNvcmQodHJhbnNhY3Rpb24tPmJhY2tpbmdTdG9yZVRyYW5z
YWN0aW9uKCksIG1fb2JqZWN0U3RvcmUtPmRhdGFiYXNlSWQoKSwgbV9vYmplY3RTdG9yZS0+aWQo
KSwgKm1fa2V5LCBtX3ZhbHVlLT50b1dpcmVCeXRlcygpLCAmcmVjb3JkSWRlbnRpZmllcik7CiAg
ICAgaWYgKCFiYWNraW5nU3RvcmVTdWNjZXNzKSB7CiAgICAgICAgIG1fY2FsbGJhY2tzLT5vbkVy
cm9yKElEQkRhdGFiYXNlRXJyb3I6OmNyZWF0ZShJREJEYXRhYmFzZUV4Y2VwdGlvbjo6VW5rbm93
bkVycm9yLCAiSW50ZXJuYWwgZXJyb3I6IGJhY2tpbmcgc3RvcmUgZXJyb3IgcGVyZm9ybWluZyBw
dXQvYWRkLiIpKTsKICAgICAgICAgcmV0dXJuOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
YmluZGluZ3MvanMvU2VyaWFsaXplZFNjcmlwdFZhbHVlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL2pzL1NlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5jcHAKaW5kZXggOGEwMjg0Ni4uMWE2YzAw
OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvU2VyaWFsaXplZFNjcmlw
dFZhbHVlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9TZXJpYWxpemVkU2Ny
aXB0VmFsdWUuY3BwCkBAIC0xMDAzLDE4ICsxMDAzLDYgQEAgdHlwZWRlZiBWZWN0b3I8V1RGOjpB
cnJheUJ1ZmZlckNvbnRlbnRzPiBBcnJheUJ1ZmZlckNvbnRlbnRzQXJyYXk7CiAKIGNsYXNzIENs
b25lRGVzZXJpYWxpemVyIDogQ2xvbmVCYXNlIHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgU3RyaW5n
IHRvV2lyZVN0cmluZyhjb25zdCBWZWN0b3I8dW5zaWduZWQgY2hhcj4mIHZhbHVlKQotICAgIHsK
LSAgICAgICAgY29uc3QgdWludDhfdCogc3RhcnQgPSB2YWx1ZS5iZWdpbigpOwotICAgICAgICBj
b25zdCB1aW50OF90KiBlbmQgPSB2YWx1ZS5lbmQoKTsKLSAgICAgICAgY29uc3QgdWludDMyX3Qg
bGVuZ3RoID0gdmFsdWUuc2l6ZSgpIC8gc2l6ZW9mKFVDaGFyKTsKLSAgICAgICAgU3RyaW5nIHN0
cjsKLSAgICAgICAgaWYgKCFDbG9uZURlc2VyaWFsaXplcjo6cmVhZFN0cmluZyhzdGFydCwgZW5k
LCBzdHIsIGxlbmd0aCkpCi0gICAgICAgICAgICByZXR1cm4gU3RyaW5nKCk7Ci0KLSAgICAgICAg
cmV0dXJuIFN0cmluZyhzdHIuaW1wbCgpKTsKLSAgICB9Ci0KICAgICBzdGF0aWMgU3RyaW5nIGRl
c2VyaWFsaXplU3RyaW5nKGNvbnN0IFZlY3Rvcjx1aW50OF90PiYgYnVmZmVyKQogICAgIHsKICAg
ICAgICAgY29uc3QgdWludDhfdCogcHRyID0gYnVmZmVyLmJlZ2luKCk7CkBAIC0xODUzLDE5ICsx
ODQxLDYgQEAgSlNWYWx1ZSBTZXJpYWxpemVkU2NyaXB0VmFsdWU6OmRlc2VyaWFsaXplKEpTQzo6
RXhlY1N0YXRlKiBleGVjLCBKU0M6OkpTR2xvYmFsT2IKIH0KICNlbmRpZgogCi1TdHJpbmcgU2Vy
aWFsaXplZFNjcmlwdFZhbHVlOjp0b1dpcmVTdHJpbmcoKSBjb25zdAotewotICAgIHJldHVybiBD
bG9uZURlc2VyaWFsaXplcjo6dG9XaXJlU3RyaW5nKG1fZGF0YSk7Ci19Ci0KLVBhc3NSZWZQdHI8
U2VyaWFsaXplZFNjcmlwdFZhbHVlPiBTZXJpYWxpemVkU2NyaXB0VmFsdWU6OmNyZWF0ZUZyb21X
aXJlKGNvbnN0IFN0cmluZyYgdmFsdWUpCi17Ci0gICAgVmVjdG9yPHVpbnQ4X3Q+IGJ1ZmZlcjsK
LSAgICBpZiAoIXdyaXRlTGl0dGxlRW5kaWFuKGJ1ZmZlciwgdmFsdWUuaW1wbCgpLT5jaGFyYWN0
ZXJzKCksIHZhbHVlLmxlbmd0aCgpKSkKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgcmV0dXJuIGFk
b3B0UmVmKG5ldyBTZXJpYWxpemVkU2NyaXB0VmFsdWUoYnVmZmVyKSk7Ci19Ci0KIFBhc3NSZWZQ
dHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiBTZXJpYWxpemVkU2NyaXB0VmFsdWU6OmNyZWF0ZShK
U0NvbnRleHRSZWYgb3JpZ2luQ29udGV4dCwgSlNWYWx1ZVJlZiBhcGlWYWx1ZSwgCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
TWVzc2FnZVBvcnRBcnJheSogbWVzc2FnZVBvcnRzLCBBcnJheUJ1ZmZlckFycmF5KiBhcnJheUJ1
ZmZlcnMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgSlNWYWx1ZVJlZiogZXhjZXB0aW9uKQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvYmluZGluZ3MvanMvU2VyaWFsaXplZFNjcmlwdFZhbHVlLmggYi9Tb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9qcy9TZXJpYWxpemVkU2NyaXB0VmFsdWUuaAppbmRleCA4MDkxODUzLi4x
ZjM1MjZhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9TZXJpYWxpemVk
U2NyaXB0VmFsdWUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9TZXJpYWxpemVk
U2NyaXB0VmFsdWUuaApAQCAtMTA0LDggKzEwNCwxMiBAQCBwdWJsaWM6CiAgICAgSlNDOjpKU1Zh
bHVlIGRlc2VyaWFsaXplKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpKU0dsb2JhbE9iamVjdCopOwog
I2VuZGlmCiAKLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IGNy
ZWF0ZUZyb21XaXJlKGNvbnN0IFN0cmluZyYgZGF0YSk7Ci0gICAgU3RyaW5nIHRvV2lyZVN0cmlu
ZygpIGNvbnN0OworICAgIHN0YXRpYyBQYXNzUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4g
Y3JlYXRlRnJvbVdpcmUoY29uc3QgVmVjdG9yPHVpbnQ4X3Q+JiBkYXRhKQorICAgIHsKKyAgICAg
ICAgVmVjdG9yPHVpbnQ4X3Q+IGJ5dGVzKGRhdGEpOworICAgICAgICByZXR1cm4gYWRvcHQoYnl0
ZXMpOworICAgIH0KKyAgICBjb25zdCBWZWN0b3I8dWludDhfdD4mIHRvV2lyZUJ5dGVzKCkgY29u
c3QgeyByZXR1cm4gbV9kYXRhOyB9CiAKICAgICB+U2VyaWFsaXplZFNjcmlwdFZhbHVlKCk7CiAK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1NlcmlhbGl6ZWRTY3JpcHRW
YWx1ZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9TZXJpYWxpemVkU2NyaXB0VmFs
dWUuY3BwCmluZGV4IDkxZjhlZjAuLjJiNDM4MmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL3Y4L1NlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvYmluZGluZ3MvdjgvU2VyaWFsaXplZFNjcmlwdFZhbHVlLmNwcApAQCAtNjQsNiArNjQsNyBA
QAogI2luY2x1ZGUgPHd0Zi9BcnJheUJ1ZmZlci5oPgogI2luY2x1ZGUgPHd0Zi9BcnJheUJ1ZmZl
clZpZXcuaD4KICNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgorI2luY2x1ZGUgPHd0Zi9CeXRl
T3JkZXIuaD4KICNpbmNsdWRlIDx3dGYvRmxvYXQzMkFycmF5Lmg+CiAjaW5jbHVkZSA8d3RmL0Zs
b2F0NjRBcnJheS5oPgogI2luY2x1ZGUgPHd0Zi9JbnQxNkFycmF5Lmg+CkBAIC0yMjQ5LDYgKzIy
NTAsMjAgQEAgUGFzc1JlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IFNlcmlhbGl6ZWRTY3Jp
cHRWYWx1ZTo6Y3JlYXRlRnJvbVdpcmUoY29uc3QgU3QKICAgICByZXR1cm4gYWRvcHRSZWYobmV3
IFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZShkYXRhKSk7CiB9CiAKK1Bhc3NSZWZQdHI8U2VyaWFsaXpl
ZFNjcmlwdFZhbHVlPiBTZXJpYWxpemVkU2NyaXB0VmFsdWU6OmNyZWF0ZUZyb21XaXJlKGNvbnN0
IFZlY3Rvcjx1aW50OF90PiYgZGF0YSkKK3sKKyAgICAvLyBEZWNvZGUgd2lyZSBkYXRhIGZyb20g
YmlnIGVuZGlhbiB0byBob3N0IGJ5dGUgb3JkZXIuCisgICAgQVNTRVJUKCEoZGF0YS5zaXplKCkg
JSBzaXplb2YoVUNoYXIpKSk7CisgICAgc2l6ZV90IGxlbmd0aCA9IGRhdGEuc2l6ZSgpIC8gc2l6
ZW9mKFVDaGFyKTsKKyAgICBWZWN0b3I8VUNoYXI+IGJ1ZmZlcihsZW5ndGgpOworICAgIGNvbnN0
IFVDaGFyKiBzcmMgPSByZWludGVycHJldF9jYXN0PGNvbnN0IFVDaGFyKj4oZGF0YS5kYXRhKCkp
OworICAgIFVDaGFyKiBkc3QgPSBidWZmZXIuZGF0YSgpOworICAgIGZvciAoc2l6ZV90IGkgPSAw
OyBpIDwgbGVuZ3RoOyBpKyspCisgICAgICAgIGRzdFtpXSA9IG50b2hzKHNyY1tpXSk7CisKKyAg
ICByZXR1cm4gY3JlYXRlRnJvbVdpcmUoU3RyaW5nOjphZG9wdChidWZmZXIpKTsKK30KKwogUGFz
c1JlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTo6Y3Jl
YXRlKGNvbnN0IFN0cmluZyYgZGF0YSwgdjg6Oklzb2xhdGUqIGlzb2xhdGUpCiB7CiAgICAgV3Jp
dGVyIHdyaXRlcihpc29sYXRlKTsKQEAgLTIyOTcsNiArMjMxMiwyMCBAQCBQYXNzUmVmUHRyPFNl
cmlhbGl6ZWRTY3JpcHRWYWx1ZT4gU2VyaWFsaXplZFNjcmlwdFZhbHVlOjpudW1iZXJWYWx1ZShk
b3VibGUgdmFsdQogICAgIHJldHVybiBhZG9wdFJlZihuZXcgU2VyaWFsaXplZFNjcmlwdFZhbHVl
KHdpcmVEYXRhKSk7CiB9CiAKK1ZlY3Rvcjx1aW50OF90PiBTZXJpYWxpemVkU2NyaXB0VmFsdWU6
OnRvV2lyZUJ5dGVzKCkgY29uc3QKK3sKKyAgICAvLyBDb252ZXJ0IHNlcmlhbGl6ZWQgc3RyaW5n
IHRvIGJpZyBlbmRpYW4gd2lyZSBkYXRhLgorICAgIHNpemVfdCBsZW5ndGggPSBtX2RhdGEubGVu
Z3RoKCk7CisgICAgVmVjdG9yPHVpbnQ4X3Q+IHJlc3VsdChsZW5ndGggKiBzaXplb2YoVUNoYXIp
KTsKKworICAgIGNvbnN0IFVDaGFyKiBzcmMgPSBtX2RhdGEuY2hhcmFjdGVycygpOworICAgIFVD
aGFyKiBkc3QgPSByZWludGVycHJldF9jYXN0PFVDaGFyKj4ocmVzdWx0LmRhdGEoKSk7CisgICAg
Zm9yIChzaXplX3QgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykKKyAgICAgICAgZHN0W2ldID0gaHRv
bnMoc3JjW2ldKTsKKworICAgIHJldHVybiByZXN1bHQ7Cit9CisKIFBhc3NSZWZQdHI8U2VyaWFs
aXplZFNjcmlwdFZhbHVlPiBTZXJpYWxpemVkU2NyaXB0VmFsdWU6OnJlbGVhc2UoKQogewogICAg
IFJlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IHJlc3VsdCA9IGFkb3B0UmVmKG5ldyBTZXJp
YWxpemVkU2NyaXB0VmFsdWUobV9kYXRhKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy92OC9TZXJpYWxpemVkU2NyaXB0VmFsdWUuaCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL3Y4L1NlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5oCmluZGV4IDY5ZWE4ZDguLjQ5MTVhMjIgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1NlcmlhbGl6ZWRTY3JpcHRWYWx1
ZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1NlcmlhbGl6ZWRTY3JpcHRWYWx1
ZS5oCkBAIC01Nyw2ICs1Nyw3IEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBib29sJiBkaWRUaHJvdywgdjg6Oklzb2xhdGUqID0g
MCk7CiAgICAgc3RhdGljIFBhc3NSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiBjcmVhdGUo
djg6OkhhbmRsZTx2ODo6VmFsdWU+LCB2ODo6SXNvbGF0ZSogPSAwKTsKICAgICBzdGF0aWMgUGFz
c1JlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IGNyZWF0ZUZyb21XaXJlKGNvbnN0IFN0cmlu
ZyYgZGF0YSk7CisgICAgc3RhdGljIFBhc3NSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiBj
cmVhdGVGcm9tV2lyZShjb25zdCBWZWN0b3I8dWludDhfdD4mIGRhdGEpOwogICAgIHN0YXRpYyBQ
YXNzUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4gY3JlYXRlKGNvbnN0IFN0cmluZyYgZGF0
YSwgdjg6Oklzb2xhdGUqID0gMCk7CiAgICAgc3RhdGljIFBhc3NSZWZQdHI8U2VyaWFsaXplZFNj
cmlwdFZhbHVlPiBjcmVhdGUoKTsKIApAQCAtNzAsNiArNzEsNyBAQCBwdWJsaWM6CiAgICAgUGFz
c1JlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IHJlbGVhc2UoKTsKIAogICAgIFN0cmluZyB0
b1dpcmVTdHJpbmcoKSBjb25zdCB7IHJldHVybiBtX2RhdGE7IH0KKyAgICBWZWN0b3I8dWludDhf
dD4gdG9XaXJlQnl0ZXMoKSBjb25zdDsKIAogICAgIC8vIERlc2VyaWFsaXplcyB0aGUgdmFsdWUg
KGluIHRoZSBjdXJyZW50IGNvbnRleHQpLiBSZXR1cm5zIGEgbnVsbCB2YWx1ZSBpbgogICAgIC8v
IGNhc2Ugb2YgZmFpbHVyZS4KLS0gCjEuNy45LjUKCg==
</data>
<flag name="review"
          id="195597"
          type_id="1"
          status="-"
          setter="haraken"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>179599</attachid>
            <date>2012-12-15 07:44:47 -0800</date>
            <delta_ts>2012-12-16 18:21:05 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>idb-wire-bytes.patch</filename>
            <type>text/plain</type>
            <size>22721</size>
            <attacher name="Michael Pruett">michael</attacher>
            
              <data encoding="base64">RnJvbTogTWljaGFlbCBQcnVldHQgPG1pY2hhZWxANjhrLm9yZz4KRGF0ZTogU2F0LCAxNSBEZWMg
MjAxMiAwNzoxNTozOSAtMDgwMApTdWJqZWN0OiBJbmRleGVkREI6IERvbid0IHVzZSBzdHJpbmdz
IHRvIHJlcHJlc2VudCBzZXJpYWxpemVkIHZhbHVlcwoKLS0tCiBTb3VyY2UvV2ViQ29yZS9DaGFu
Z2VMb2cgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgNDcgKysrKysrKysrKysrKysrKysr
KysKIC4uLi9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkJhY2tpbmdTdG9yZS5jcHAgIHwg
ICAzMyArKysrKysrLS0tLS0tLQogU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURC
QmFja2luZ1N0b3JlLmggfCAgICA2ICstLQogLi4uL01vZHVsZXMvaW5kZXhlZGRiL0lEQkN1cnNv
ckJhY2tlbmRJbXBsLmNwcCAgICAgfCAgICA0ICstCiAuLi4vTW9kdWxlcy9pbmRleGVkZGIvSURC
Q3Vyc29yQmFja2VuZEltcGwuaCAgICAgICB8ICAgIDIgKy0KIC4uLi9Nb2R1bGVzL2luZGV4ZWRk
Yi9JREJJbmRleEJhY2tlbmRJbXBsLmNwcCAgICAgIHwgICAgOCArKy0tCiAuLi4vaW5kZXhlZGRi
L0lEQk9iamVjdFN0b3JlQmFja2VuZEltcGwuY3BwICAgICAgICB8ICAgMTAgKystLS0KIC4uLi9X
ZWJDb3JlL2JpbmRpbmdzL2pzL1NlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5jcHAgIHwgICAyNSAtLS0t
LS0tLS0tLQogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvU2VyaWFsaXplZFNjcmlwdFZhbHVl
LmggfCAgICA4ICsrKy0KIC4uLi9XZWJDb3JlL2JpbmRpbmdzL3Y4L1NlcmlhbGl6ZWRTY3JpcHRW
YWx1ZS5jcHAgIHwgICAyOSArKysrKysrKysrKysKIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4
L1NlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5oIHwgICAgMiArCiAxMSBmaWxlcyBjaGFuZ2VkLCAxMTYg
aW5zZXJ0aW9ucygrKSwgNTggZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvQ2hhbmdlTG9nIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCmluZGV4IDg5NzBhYjMuLjk4
ZjdlNTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZworKysgYi9Tb3VyY2Uv
V2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSw1MCBAQAorMjAxMi0xMi0xNSAgTWljaGFlbCBQ
cnVldHQgIDxtaWNoYWVsQDY4ay5vcmc+CisKKyAgICAgICAgSW5kZXhlZERCOiBEb24ndCB1c2Ug
c3RyaW5ncyB0byByZXByZXNlbnQgc2VyaWFsaXplZCB2YWx1ZXMKKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEwNDM1NAorCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFVzZSBWZWN0b3I8dWludDhfdD4gcmF0aGVy
IHRoYW4gU3RyaW5nIHRvIHJlcHJlc2VudCBzZXJpYWxpemVkIHZhbHVlcworICAgICAgICBpbiBJ
bmRleGVkREIuIFRoaXMgY2hhbmdlIGlzIG5lY2Vzc2FyeSB0byBpbXBsZW1lbnQgSW5kZXhlZERC
IGZvciBKU0MuCisKKyAgICAgICAgVGVzdHM6IHN0b3JhZ2UvaW5kZXhlZGRiLyoKKworICAgICAg
ICAqIE1vZHVsZXMvaW5kZXhlZGRiL0lEQkJhY2tpbmdTdG9yZS5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpJREJCYWNraW5nU3RvcmU6OmdldFJlY29yZCk6CisgICAgICAgIChXZWJDb3JlOjpJREJC
YWNraW5nU3RvcmU6OnB1dFJlY29yZCk6CisgICAgICAgIChXZWJDb3JlOjpPYmplY3RTdG9yZUtl
eUN1cnNvckltcGw6OnZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6Ok9iamVjdFN0b3JlS2V5Q3Vy
c29ySW1wbDo6T2JqZWN0U3RvcmVLZXlDdXJzb3JJbXBsKToKKyAgICAgICAgKFdlYkNvcmU6Ok9i
amVjdFN0b3JlQ3Vyc29ySW1wbDo6dmFsdWUpOgorICAgICAgICAoT2JqZWN0U3RvcmVDdXJzb3JJ
bXBsKToKKyAgICAgICAgKFdlYkNvcmU6Ok9iamVjdFN0b3JlQ3Vyc29ySW1wbDo6bG9hZEN1cnJl
bnRSb3cpOgorICAgICAgICAoV2ViQ29yZTo6SW5kZXhLZXlDdXJzb3JJbXBsOjp2YWx1ZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpJbmRleEN1cnNvckltcGw6OnZhbHVlKToKKyAgICAgICAgKFdlYkNv
cmU6OkluZGV4Q3Vyc29ySW1wbDo6SW5kZXhDdXJzb3JJbXBsKToKKyAgICAgICAgKEluZGV4Q3Vy
c29ySW1wbCk6CisgICAgICAgIChXZWJDb3JlOjpJbmRleEN1cnNvckltcGw6OmxvYWRDdXJyZW50
Um93KToKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9JREJCYWNraW5nU3RvcmUuaDoKKyAg
ICAgICAgKElEQkJhY2tpbmdTdG9yZSk6CisgICAgICAgIChDdXJzb3IpOgorICAgICAgICAqIE1v
ZHVsZXMvaW5kZXhlZGRiL0lEQkN1cnNvckJhY2tlbmRJbXBsLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OklEQkN1cnNvckJhY2tlbmRJbXBsOjpDdXJzb3JQcmVmZXRjaEl0ZXJhdGlvbk9wZXJhdGlv
bjo6cGVyZm9ybSk6CisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvSURCQ3Vyc29yQmFja2Vu
ZEltcGwuaDoKKyAgICAgICAgKFdlYkNvcmU6OklEQkN1cnNvckJhY2tlbmRJbXBsOjp2YWx1ZSk6
CisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvSURCSW5kZXhCYWNrZW5kSW1wbC5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpJREJJbmRleEJhY2tlbmRJbXBsOjpJbmRleFJlZmVyZW5jZWRWYWx1
ZVJldHJpZXZhbE9wZXJhdGlvbjo6cGVyZm9ybSk6CisgICAgICAgICogTW9kdWxlcy9pbmRleGVk
ZGIvSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJREJP
YmplY3RTdG9yZUJhY2tlbmRJbXBsOjpPYmplY3RTdG9yZVJldHJpZXZhbE9wZXJhdGlvbjo6cGVy
Zm9ybSk6CisgICAgICAgIChXZWJDb3JlOjpJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpPYmpl
Y3RTdG9yZVN0b3JhZ2VPcGVyYXRpb246OnBlcmZvcm0pOgorICAgICAgICAqIGJpbmRpbmdzL2pz
L1NlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5jcHA6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAg
KiBiaW5kaW5ncy9qcy9TZXJpYWxpemVkU2NyaXB0VmFsdWUuaDoKKyAgICAgICAgKiBiaW5kaW5n
cy92OC9TZXJpYWxpemVkU2NyaXB0VmFsdWUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U2VyaWFs
aXplZFNjcmlwdFZhbHVlOjpjcmVhdGVGcm9tV2lyZUJ5dGVzKToKKyAgICAgICAgKFdlYkNvcmUp
OgorICAgICAgICAoV2ViQ29yZTo6U2VyaWFsaXplZFNjcmlwdFZhbHVlOjp0b1dpcmVCeXRlcyk6
CisgICAgICAgICogYmluZGluZ3MvdjgvU2VyaWFsaXplZFNjcmlwdFZhbHVlLmg6CisgICAgICAg
IChTZXJpYWxpemVkU2NyaXB0VmFsdWUpOgorCiAyMDEyLTEyLTE0ICBNaWNoYWVsIFBydWV0dCAg
PG1pY2hhZWxANjhrLm9yZz4KIAogICAgICAgICBJbmRleGVkREI6IEltcGxlbWVudCBjdXN0b20g
YmluZGluZ3MgZm9yIHBhcnNpbmcgb3B0aW9ucwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy9pbmRleGVkZGIvSURCQmFja2luZ1N0b3JlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvaW5kZXhlZGRiL0lEQkJhY2tpbmdTdG9yZS5jcHAKaW5kZXggNGIxYTFhNy4uYjU3YzM5
MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCQmFja2lu
Z1N0b3JlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJCYWNr
aW5nU3RvcmUuY3BwCkBAIC03NjYsNyArNzY2LDcgQEAgYm9vbCBJREJCYWNraW5nU3RvcmU6OmRl
bGV0ZU9iamVjdFN0b3JlKElEQkJhY2tpbmdTdG9yZTo6VHJhbnNhY3Rpb24qIHRyYW5zYWN0aW8K
ICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotYm9vbCBJREJCYWNraW5nU3RvcmU6OmdldFJlY29yZChJ
REJCYWNraW5nU3RvcmU6OlRyYW5zYWN0aW9uKiB0cmFuc2FjdGlvbiwgaW50NjRfdCBkYXRhYmFz
ZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGNvbnN0IElEQktleSYga2V5LCBTdHJpbmcmIHJl
Y29yZCkKK2Jvb2wgSURCQmFja2luZ1N0b3JlOjpnZXRSZWNvcmQoSURCQmFja2luZ1N0b3JlOjpU
cmFuc2FjdGlvbiogdHJhbnNhY3Rpb24sIGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmpl
Y3RTdG9yZUlkLCBjb25zdCBJREJLZXkmIGtleSwgVmVjdG9yPHVpbnQ4X3Q+JiByZWNvcmQpCiB7
CiAgICAgSURCX1RSQUNFKCJJREJCYWNraW5nU3RvcmU6OmdldFJlY29yZCIpOwogICAgIExldmVs
REJUcmFuc2FjdGlvbiogbGV2ZWxEQlRyYW5zYWN0aW9uID0gSURCQmFja2luZ1N0b3JlOjpUcmFu
c2FjdGlvbjo6bGV2ZWxEQlRyYW5zYWN0aW9uRnJvbSh0cmFuc2FjdGlvbik7CkBAIC03NzQsMTAg
Kzc3NCwxMSBAQCBib29sIElEQkJhY2tpbmdTdG9yZTo6Z2V0UmVjb3JkKElEQkJhY2tpbmdTdG9y
ZTo6VHJhbnNhY3Rpb24qIHRyYW5zYWN0aW9uLCBpbnQ2NAogICAgIGNvbnN0IFZlY3RvcjxjaGFy
PiBsZXZlbGRiS2V5ID0gT2JqZWN0U3RvcmVEYXRhS2V5OjplbmNvZGUoZGF0YWJhc2VJZCwgb2Jq
ZWN0U3RvcmVJZCwga2V5KTsKICAgICBWZWN0b3I8Y2hhcj4gZGF0YTsKIAorICAgIHJlY29yZC5j
bGVhcigpOworCiAgICAgYm9vbCBmb3VuZCA9IGZhbHNlOwogICAgIGJvb2wgb2sgPSBsZXZlbERC
VHJhbnNhY3Rpb24tPnNhZmVHZXQobGV2ZWxkYktleSwgZGF0YSwgZm91bmQpOwogICAgIGlmICgh
b2spIHsKLSAgICAgICAgcmVjb3JkID0gU3RyaW5nKCk7CiAgICAgICAgIEludGVybmFsRXJyb3Io
SURCTGV2ZWxEQkJhY2tpbmdTdG9yZVJlYWRFcnJvckdldFJlY29yZCk7CiAgICAgICAgIHJldHVy
biBmYWxzZTsKICAgICB9CkBAIC03ODYsMTEgKzc4NywxMCBAQCBib29sIElEQkJhY2tpbmdTdG9y
ZTo6Z2V0UmVjb3JkKElEQkJhY2tpbmdTdG9yZTo6VHJhbnNhY3Rpb24qIHRyYW5zYWN0aW9uLCBp
bnQ2NAogICAgIGNvbnN0IGNoYXIqIHAgPSBkZWNvZGVWYXJJbnQoZGF0YS5iZWdpbigpLCBkYXRh
LmVuZCgpLCB2ZXJzaW9uKTsKICAgICBpZiAoIXApIHsKICAgICAgICAgSW50ZXJuYWxFcnJvcihJ
REJMZXZlbERCQmFja2luZ1N0b3JlUmVhZEVycm9yR2V0UmVjb3JkKTsKLSAgICAgICAgcmVjb3Jk
ID0gU3RyaW5nKCk7CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAKLSAgICByZWNvcmQg
PSBkZWNvZGVTdHJpbmcocCwgZGF0YS5lbmQoKSk7CisgICAgcmVjb3JkLmFwcGVuZFJhbmdlKHAs
IHN0YXRpY19jYXN0PGNvbnN0IGNoYXIqPihkYXRhLmVuZCgpKSk7CiAgICAgcmV0dXJuIHRydWU7
CiB9CiAKQEAgLTgyMCw3ICs4MjAsNyBAQCBXQVJOX1VOVVNFRF9SRVRVUk4gc3RhdGljIGJvb2wg
Z2V0TmV3VmVyc2lvbk51bWJlcihMZXZlbERCVHJhbnNhY3Rpb24qIHRyYW5zYWN0aQogICAgIHJl
dHVybiB0cnVlOwogfQogCi1ib29sIElEQkJhY2tpbmdTdG9yZTo6cHV0UmVjb3JkKElEQkJhY2tp
bmdTdG9yZTo6VHJhbnNhY3Rpb24qIHRyYW5zYWN0aW9uLCBpbnQ2NF90IGRhdGFiYXNlSWQsIGlu
dDY0X3Qgb2JqZWN0U3RvcmVJZCwgY29uc3QgSURCS2V5JiBrZXksIGNvbnN0IFN0cmluZyYgdmFs
dWUsIFJlY29yZElkZW50aWZpZXIqIHJlY29yZElkZW50aWZpZXIpCitib29sIElEQkJhY2tpbmdT
dG9yZTo6cHV0UmVjb3JkKElEQkJhY2tpbmdTdG9yZTo6VHJhbnNhY3Rpb24qIHRyYW5zYWN0aW9u
LCBpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgY29uc3QgSURCS2V5
JiBrZXksIGNvbnN0IFZlY3Rvcjx1aW50OF90PiYgdmFsdWUsIFJlY29yZElkZW50aWZpZXIqIHJl
Y29yZElkZW50aWZpZXIpCiB7CiAgICAgSURCX1RSQUNFKCJJREJCYWNraW5nU3RvcmU6OnB1dFJl
Y29yZCIpOwogICAgIEFTU0VSVChrZXkuaXNWYWxpZCgpKTsKQEAgLTgzNCw3ICs4MzQsNyBAQCBi
b29sIElEQkJhY2tpbmdTdG9yZTo6cHV0UmVjb3JkKElEQkJhY2tpbmdTdG9yZTo6VHJhbnNhY3Rp
b24qIHRyYW5zYWN0aW9uLCBpbnQ2NAogCiAgICAgVmVjdG9yPGNoYXI+IHY7CiAgICAgdi5hcHBl
bmQoZW5jb2RlVmFySW50KHZlcnNpb24pKTsKLSAgICB2LmFwcGVuZChlbmNvZGVTdHJpbmcodmFs
dWUpKTsKKyAgICB2LmFwcGVuZFZlY3Rvcih2YWx1ZSk7CiAKICAgICBsZXZlbERCVHJhbnNhY3Rp
b24tPnB1dChvYmplY3RTdG9yZWRhdGFLZXksIHYpOwogCkBAIC0xMzg5LDcgKzEzODksNyBAQCBw
dWJsaWM6CiAgICAgfQogCiAgICAgLy8gSURCQmFja2luZ1N0b3JlOjpDdXJzb3IKLSAgICB2aXJ0
dWFsIFN0cmluZyB2YWx1ZSgpIGNvbnN0IHsgQVNTRVJUX05PVF9SRUFDSEVEKCk7IHJldHVybiBT
dHJpbmcoKTsgfQorICAgIHZpcnR1YWwgY29uc3QgVmVjdG9yPHVpbnQ4X3Q+KiB2YWx1ZSgpIGNv
bnN0IHsgQVNTRVJUX05PVF9SRUFDSEVEKCk7IHJldHVybiAwOyB9CiAgICAgdmlydHVhbCBib29s
IGxvYWRDdXJyZW50Um93KCk7CiAKIHByaXZhdGU6CkBAIC0xNDAyLDcgKzE0MDIsNiBAQCBwcml2
YXRlOgogICAgICAgICA6IElEQkJhY2tpbmdTdG9yZTo6Q3Vyc29yKG90aGVyKQogICAgIHsKICAg
ICB9Ci0KIH07CiAKIGJvb2wgT2JqZWN0U3RvcmVLZXlDdXJzb3JJbXBsOjpsb2FkQ3VycmVudFJv
dygpCkBAIC0xNDQ1LDcgKzE0NDQsNyBAQCBwdWJsaWM6CiAgICAgfQogCiAgICAgLy8gSURCQmFj
a2luZ1N0b3JlOjpDdXJzb3IKLSAgICB2aXJ0dWFsIFN0cmluZyB2YWx1ZSgpIGNvbnN0IHsgcmV0
dXJuIG1fY3VycmVudFZhbHVlOyB9CisgICAgdmlydHVhbCBjb25zdCBWZWN0b3I8dWludDhfdD4q
IHZhbHVlKCkgY29uc3QgeyByZXR1cm4gJm1fY3VycmVudFZhbHVlOyB9CiAgICAgdmlydHVhbCBi
b29sIGxvYWRDdXJyZW50Um93KCk7CiAKIHByaXZhdGU6CkBAIC0xNDYwLDcgKzE0NTksNyBAQCBw
cml2YXRlOgogICAgIHsKICAgICB9CiAKLSAgICBTdHJpbmcgbV9jdXJyZW50VmFsdWU7CisgICAg
VmVjdG9yPHVpbnQ4X3Q+IG1fY3VycmVudFZhbHVlOwogfTsKIAogYm9vbCBPYmplY3RTdG9yZUN1
cnNvckltcGw6OmxvYWRDdXJyZW50Um93KCkKQEAgLTE0ODcsNyArMTQ4Niw4IEBAIGJvb2wgT2Jq
ZWN0U3RvcmVDdXJzb3JJbXBsOjpsb2FkQ3VycmVudFJvdygpCiAgICAgLy8gRklYTUU6IFRoaXMg
cmUtZW5jb2RlcyB3aGF0IHdhcyBqdXN0IGRlY29kZWQ7IHRyeSBhbmQgb3B0aW1pemUuCiAgICAg
bV9yZWNvcmRJZGVudGlmaWVyLnJlc2V0KGVuY29kZUlEQktleSgqbV9jdXJyZW50S2V5KSwgdmVy
c2lvbik7CiAKLSAgICBtX2N1cnJlbnRWYWx1ZSA9IGRlY29kZVN0cmluZyh2YWx1ZVBvc2l0aW9u
LCBtX2l0ZXJhdG9yLT52YWx1ZSgpLmVuZCgpKTsKKyAgICBtX2N1cnJlbnRWYWx1ZS5jbGVhcigp
OworICAgIG1fY3VycmVudFZhbHVlLmFwcGVuZFJhbmdlKHZhbHVlUG9zaXRpb24sIHN0YXRpY19j
YXN0PGNvbnN0IGNoYXIqPihtX2l0ZXJhdG9yLT52YWx1ZSgpLmVuZCgpKSk7CiAKICAgICByZXR1
cm4gdHJ1ZTsKIH0KQEAgLTE1MDUsNyArMTUwNSw3IEBAIHB1YmxpYzoKICAgICB9CiAKICAgICAv
LyBJREJCYWNraW5nU3RvcmU6OkN1cnNvcgotICAgIHZpcnR1YWwgU3RyaW5nIHZhbHVlKCkgY29u
c3QgeyBBU1NFUlRfTk9UX1JFQUNIRUQoKTsgcmV0dXJuIFN0cmluZygpOyB9CisgICAgdmlydHVh
bCBjb25zdCBWZWN0b3I8dWludDhfdD4qIHZhbHVlKCkgY29uc3QgeyBBU1NFUlRfTk9UX1JFQUNI
RUQoKTsgcmV0dXJuIDA7IH0KICAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8SURCS2V5PiBwcmltYXJ5
S2V5KCkgY29uc3QgeyByZXR1cm4gbV9wcmltYXJ5S2V5OyB9CiAgICAgdmlydHVhbCBjb25zdCBJ
REJCYWNraW5nU3RvcmU6OlJlY29yZElkZW50aWZpZXImIHJlY29yZElkZW50aWZpZXIoKSBjb25z
dCB7IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOyByZXR1cm4gbV9yZWNvcmRJZGVudGlmaWVyOyB9CiAg
ICAgdmlydHVhbCBib29sIGxvYWRDdXJyZW50Um93KCk7CkBAIC0xNTg0LDcgKzE1ODQsNyBAQCBw
dWJsaWM6CiAgICAgfQogCiAgICAgLy8gSURCQmFja2luZ1N0b3JlOjpDdXJzb3IKLSAgICB2aXJ0
dWFsIFN0cmluZyB2YWx1ZSgpIGNvbnN0IHsgcmV0dXJuIG1fdmFsdWU7IH0KKyAgICB2aXJ0dWFs
IGNvbnN0IFZlY3Rvcjx1aW50OF90PiogdmFsdWUoKSBjb25zdCB7IHJldHVybiAmbV9jdXJyZW50
VmFsdWU7IH0KICAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8SURCS2V5PiBwcmltYXJ5S2V5KCkgY29u
c3QgeyByZXR1cm4gbV9wcmltYXJ5S2V5OyB9CiAgICAgdmlydHVhbCBjb25zdCBJREJCYWNraW5n
U3RvcmU6OlJlY29yZElkZW50aWZpZXImIHJlY29yZElkZW50aWZpZXIoKSBjb25zdCB7IEFTU0VS
VF9OT1RfUkVBQ0hFRCgpOyByZXR1cm4gbV9yZWNvcmRJZGVudGlmaWVyOyB9CiAgICAgYm9vbCBs
b2FkQ3VycmVudFJvdygpOwpAQCAtMTU5OCwxMyArMTU5OCwxMyBAQCBwcml2YXRlOgogICAgIElu
ZGV4Q3Vyc29ySW1wbChjb25zdCBJbmRleEN1cnNvckltcGwqIG90aGVyKQogICAgICAgICA6IElE
QkJhY2tpbmdTdG9yZTo6Q3Vyc29yKG90aGVyKQogICAgICAgICAsIG1fcHJpbWFyeUtleShvdGhl
ci0+bV9wcmltYXJ5S2V5KQotICAgICAgICAsIG1fdmFsdWUob3RoZXItPm1fdmFsdWUpCisgICAg
ICAgICwgbV9jdXJyZW50VmFsdWUob3RoZXItPm1fY3VycmVudFZhbHVlKQogICAgICAgICAsIG1f
cHJpbWFyeUxldmVsREJLZXkob3RoZXItPm1fcHJpbWFyeUxldmVsREJLZXkpCiAgICAgewogICAg
IH0KIAogICAgIFJlZlB0cjxJREJLZXk+IG1fcHJpbWFyeUtleTsKLSAgICBTdHJpbmcgbV92YWx1
ZTsKKyAgICBWZWN0b3I8dWludDhfdD4gbV9jdXJyZW50VmFsdWU7CiAgICAgVmVjdG9yPGNoYXI+
IG1fcHJpbWFyeUxldmVsREJLZXk7CiB9OwogCkBAIC0xNjUzLDcgKzE2NTMsOCBAQCBib29sIElu
ZGV4Q3Vyc29ySW1wbDo6bG9hZEN1cnJlbnRSb3coKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAg
ICAgfQogCi0gICAgbV92YWx1ZSA9IGRlY29kZVN0cmluZyh0LCByZXN1bHQuZW5kKCkpOworICAg
IG1fY3VycmVudFZhbHVlLmNsZWFyKCk7CisgICAgbV9jdXJyZW50VmFsdWUuYXBwZW5kUmFuZ2Uo
dCwgc3RhdGljX2Nhc3Q8Y29uc3QgY2hhcio+KHJlc3VsdC5lbmQoKSkpOwogICAgIHJldHVybiB0
cnVlOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9J
REJCYWNraW5nU3RvcmUuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkJh
Y2tpbmdTdG9yZS5oCmluZGV4IDVkMWFhY2MuLjFlMDVjOTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkJhY2tpbmdTdG9yZS5oCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkJhY2tpbmdTdG9yZS5oCkBAIC03Nyw4ICs3Nyw4
IEBAIHB1YmxpYzoKICAgICAgICAgaW50NjRfdCBtX3ZlcnNpb247CiAgICAgfTsKIAotICAgIHZp
cnR1YWwgYm9vbCBnZXRSZWNvcmQoSURCQmFja2luZ1N0b3JlOjpUcmFuc2FjdGlvbiosIGludDY0
X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBjb25zdCBJREJLZXkmLCBTdHJp
bmcmIHJlY29yZCkgV0FSTl9VTlVTRURfUkVUVVJOOwotICAgIHZpcnR1YWwgYm9vbCBwdXRSZWNv
cmQoSURCQmFja2luZ1N0b3JlOjpUcmFuc2FjdGlvbiosIGludDY0X3QgZGF0YWJhc2VJZCwgaW50
NjRfdCBvYmplY3RTdG9yZUlkLCBjb25zdCBJREJLZXkmLCBjb25zdCBTdHJpbmcmIHZhbHVlLCBS
ZWNvcmRJZGVudGlmaWVyKikgV0FSTl9VTlVTRURfUkVUVVJOOworICAgIHZpcnR1YWwgYm9vbCBn
ZXRSZWNvcmQoSURCQmFja2luZ1N0b3JlOjpUcmFuc2FjdGlvbiosIGludDY0X3QgZGF0YWJhc2VJ
ZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBjb25zdCBJREJLZXkmLCBWZWN0b3I8dWludDhfdD4m
IHJlY29yZCkgV0FSTl9VTlVTRURfUkVUVVJOOworICAgIHZpcnR1YWwgYm9vbCBwdXRSZWNvcmQo
SURCQmFja2luZ1N0b3JlOjpUcmFuc2FjdGlvbiosIGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRf
dCBvYmplY3RTdG9yZUlkLCBjb25zdCBJREJLZXkmLCBjb25zdCBWZWN0b3I8dWludDhfdD4mIHZh
bHVlLCBSZWNvcmRJZGVudGlmaWVyKikgV0FSTl9VTlVTRURfUkVUVVJOOwogICAgIHZpcnR1YWwg
dm9pZCBjbGVhck9iamVjdFN0b3JlKElEQkJhY2tpbmdTdG9yZTo6VHJhbnNhY3Rpb24qLCBpbnQ2
NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCk7CiAgICAgdmlydHVhbCB2b2lk
IGRlbGV0ZVJlY29yZChJREJCYWNraW5nU3RvcmU6OlRyYW5zYWN0aW9uKiwgaW50NjRfdCBkYXRh
YmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGNvbnN0IFJlY29yZElkZW50aWZpZXImKTsK
ICAgICB2aXJ0dWFsIGJvb2wgZ2V0S2V5R2VuZXJhdG9yQ3VycmVudE51bWJlcihJREJCYWNraW5n
U3RvcmU6OlRyYW5zYWN0aW9uKiwgaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0
b3JlSWQsIGludDY0X3QmIGN1cnJlbnROdW1iZXIpIFdBUk5fVU5VU0VEX1JFVFVSTjsKQEAgLTEx
NSw3ICsxMTUsNyBAQCBwdWJsaWM6CiAKICAgICAgICAgdmlydHVhbCBQYXNzUmVmUHRyPEN1cnNv
cj4gY2xvbmUoKSA9IDA7CiAgICAgICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxJREJLZXk+IHByaW1h
cnlLZXkoKSBjb25zdCB7IHJldHVybiBtX2N1cnJlbnRLZXk7IH0KLSAgICAgICAgdmlydHVhbCBT
dHJpbmcgdmFsdWUoKSBjb25zdCA9IDA7CisgICAgICAgIHZpcnR1YWwgY29uc3QgVmVjdG9yPHVp
bnQ4X3Q+KiB2YWx1ZSgpIGNvbnN0ID0gMDsKICAgICAgICAgdmlydHVhbCBjb25zdCBSZWNvcmRJ
ZGVudGlmaWVyJiByZWNvcmRJZGVudGlmaWVyKCkgY29uc3QgeyByZXR1cm4gbV9yZWNvcmRJZGVu
dGlmaWVyOyB9CiAgICAgICAgIHZpcnR1YWwgfkN1cnNvcigpIHsgfQogICAgICAgICB2aXJ0dWFs
IGJvb2wgbG9hZEN1cnJlbnRSb3coKSA9IDA7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL2luZGV4ZWRkYi9JREJDdXJzb3JCYWNrZW5kSW1wbC5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJDdXJzb3JCYWNrZW5kSW1wbC5jcHAKaW5kZXggZDI3NTg4
My4uNDVlMmE1MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIv
SURCQ3Vyc29yQmFja2VuZEltcGwuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5k
ZXhlZGRiL0lEQkN1cnNvckJhY2tlbmRJbXBsLmNwcApAQCAtMjA5LDE0ICsyMDksMTQgQEAgdm9p
ZCBJREJDdXJzb3JCYWNrZW5kSW1wbDo6Q3Vyc29yUHJlZmV0Y2hJdGVyYXRpb25PcGVyYXRpb246
OnBlcmZvcm0oSURCVHJhbnNhY3QKICAgICAgICAgZm91bmRQcmltYXJ5S2V5cy5hcHBlbmQobV9j
dXJzb3ItPm1fY3Vyc29yLT5wcmltYXJ5S2V5KCkpOwogCiAgICAgICAgIGlmIChtX2N1cnNvci0+
bV9jdXJzb3JUeXBlICE9IElEQkN1cnNvckJhY2tlbmRJbnRlcmZhY2U6OkluZGV4S2V5Q3Vyc29y
KQotICAgICAgICAgICAgZm91bmRWYWx1ZXMuYXBwZW5kKFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTo6
Y3JlYXRlRnJvbVdpcmUobV9jdXJzb3ItPm1fY3Vyc29yLT52YWx1ZSgpKSk7CisgICAgICAgICAg
ICBmb3VuZFZhbHVlcy5hcHBlbmQoU2VyaWFsaXplZFNjcmlwdFZhbHVlOjpjcmVhdGVGcm9tV2ly
ZUJ5dGVzKCptX2N1cnNvci0+bV9jdXJzb3ItPnZhbHVlKCkpKTsKICAgICAgICAgZWxzZQogICAg
ICAgICAgICAgZm91bmRWYWx1ZXMuYXBwZW5kKFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTo6Y3JlYXRl
KCkpOwogCiAgICAgICAgIHNpemVFc3RpbWF0ZSArPSBtX2N1cnNvci0+bV9jdXJzb3ItPmtleSgp
LT5zaXplRXN0aW1hdGUoKTsKICAgICAgICAgc2l6ZUVzdGltYXRlICs9IG1fY3Vyc29yLT5tX2N1
cnNvci0+cHJpbWFyeUtleSgpLT5zaXplRXN0aW1hdGUoKTsKICAgICAgICAgaWYgKG1fY3Vyc29y
LT5tX2N1cnNvclR5cGUgIT0gSURCQ3Vyc29yQmFja2VuZEludGVyZmFjZTo6SW5kZXhLZXlDdXJz
b3IpCi0gICAgICAgICAgICBzaXplRXN0aW1hdGUgKz0gbV9jdXJzb3ItPm1fY3Vyc29yLT52YWx1
ZSgpLmxlbmd0aCgpICogc2l6ZW9mKFVDaGFyKTsKKyAgICAgICAgICAgIHNpemVFc3RpbWF0ZSAr
PSBtX2N1cnNvci0+bV9jdXJzb3ItPnZhbHVlKCktPnNpemUoKTsKIAogICAgICAgICBpZiAoc2l6
ZUVzdGltYXRlID4gbWF4U2l6ZUVzdGltYXRlKQogICAgICAgICAgICAgYnJlYWs7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJDdXJzb3JCYWNrZW5kSW1w
bC5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCQ3Vyc29yQmFja2VuZElt
cGwuaAppbmRleCAwYzYwMDM0Li44ODBjY2VkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL2luZGV4ZWRkYi9JREJDdXJzb3JCYWNrZW5kSW1wbC5oCisrKyBiL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkN1cnNvckJhY2tlbmRJbXBsLmgKQEAgLTY3LDcgKzY3
LDcgQEAgcHVibGljOgogCiAgICAgUGFzc1JlZlB0cjxJREJLZXk+IGtleSgpIGNvbnN0IHsgcmV0
dXJuIG1fY3Vyc29yLT5rZXkoKTsgfQogICAgIFBhc3NSZWZQdHI8SURCS2V5PiBwcmltYXJ5S2V5
KCkgY29uc3QgeyByZXR1cm4gbV9jdXJzb3ItPnByaW1hcnlLZXkoKTsgfQotICAgIFBhc3NSZWZQ
dHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiB2YWx1ZSgpIGNvbnN0IHsgcmV0dXJuIChtX2N1cnNv
clR5cGUgPT0gSW5kZXhLZXlDdXJzb3IpID8gMCA6IFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTo6Y3Jl
YXRlRnJvbVdpcmUobV9jdXJzb3ItPnZhbHVlKCkpOyB9CisgICAgUGFzc1JlZlB0cjxTZXJpYWxp
emVkU2NyaXB0VmFsdWU+IHZhbHVlKCkgY29uc3QgeyByZXR1cm4gKG1fY3Vyc29yVHlwZSA9PSBJ
bmRleEtleUN1cnNvcikgPyAwIDogU2VyaWFsaXplZFNjcmlwdFZhbHVlOjpjcmVhdGVGcm9tV2ly
ZUJ5dGVzKCptX2N1cnNvci0+dmFsdWUoKSk7IH0KICAgICB2b2lkIGNsb3NlKCk7CiAKIHByaXZh
dGU6CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJJbmRl
eEJhY2tlbmRJbXBsLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQklu
ZGV4QmFja2VuZEltcGwuY3BwCmluZGV4IDkxZWU4ZjAuLjc0YWI1OTAgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkluZGV4QmFja2VuZEltcGwuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkluZGV4QmFja2VuZEltcGwu
Y3BwCkBAIC0yMzcsMjIgKzIzNywyMiBAQCB2b2lkIElEQkluZGV4QmFja2VuZEltcGw6OkluZGV4
UmVmZXJlbmNlZFZhbHVlUmV0cmlldmFsT3BlcmF0aW9uOjpwZXJmb3JtKElEQlRyYQogICAgICAg
ICByZXR1cm47CiAgICAgfQogCi0gICAgU3RyaW5nIHZhbHVlOworICAgIFZlY3Rvcjx1aW50OF90
PiB2YWx1ZTsKICAgICBvayA9IG1faW5kZXgtPmJhY2tpbmdTdG9yZSgpLT5nZXRSZWNvcmQodHJh
bnNhY3Rpb24tPmJhY2tpbmdTdG9yZVRyYW5zYWN0aW9uKCksIG1faW5kZXgtPmRhdGFiYXNlSWQo
KSwgbV9pbmRleC0+bV9vYmplY3RTdG9yZUJhY2tlbmQtPmlkKCksICpwcmltYXJ5S2V5LCB2YWx1
ZSk7CiAgICAgaWYgKCFvaykgewogICAgICAgICBtX2NhbGxiYWNrcy0+b25FcnJvcihJREJEYXRh
YmFzZUVycm9yOjpjcmVhdGUoSURCRGF0YWJhc2VFeGNlcHRpb246OlVua25vd25FcnJvciwgIklu
dGVybmFsIGVycm9yIGluIGdldFJlY29yZC4iKSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAK
LSAgICBpZiAodmFsdWUuaXNOdWxsKCkpIHsKKyAgICBpZiAodmFsdWUuaXNFbXB0eSgpKSB7CiAg
ICAgICAgIG1fY2FsbGJhY2tzLT5vblN1Y2Nlc3MoKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0K
ICAgICBpZiAobV9pbmRleC0+bV9vYmplY3RTdG9yZUJhY2tlbmQtPmF1dG9JbmNyZW1lbnQoKSAm
JiAhbV9pbmRleC0+bV9vYmplY3RTdG9yZUJhY2tlbmQtPmtleVBhdGgoKS5pc051bGwoKSkgewot
ICAgICAgICBtX2NhbGxiYWNrcy0+b25TdWNjZXNzKFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTo6Y3Jl
YXRlRnJvbVdpcmUodmFsdWUpLCBwcmltYXJ5S2V5LCBtX2luZGV4LT5tX29iamVjdFN0b3JlQmFj
a2VuZC0+a2V5UGF0aCgpKTsKKyAgICAgICAgbV9jYWxsYmFja3MtPm9uU3VjY2VzcyhTZXJpYWxp
emVkU2NyaXB0VmFsdWU6OmNyZWF0ZUZyb21XaXJlQnl0ZXModmFsdWUpLCBwcmltYXJ5S2V5LCBt
X2luZGV4LT5tX29iamVjdFN0b3JlQmFja2VuZC0+a2V5UGF0aCgpKTsKICAgICAgICAgcmV0dXJu
OwogICAgIH0KLSAgICBtX2NhbGxiYWNrcy0+b25TdWNjZXNzKFNlcmlhbGl6ZWRTY3JpcHRWYWx1
ZTo6Y3JlYXRlRnJvbVdpcmUodmFsdWUpKTsKKyAgICBtX2NhbGxiYWNrcy0+b25TdWNjZXNzKFNl
cmlhbGl6ZWRTY3JpcHRWYWx1ZTo6Y3JlYXRlRnJvbVdpcmVCeXRlcyh2YWx1ZSkpOwogfQogCiAK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQk9iamVjdFN0
b3JlQmFja2VuZEltcGwuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURC
T2JqZWN0U3RvcmVCYWNrZW5kSW1wbC5jcHAKaW5kZXggMGMyOGIxNS4uMThkMjZjZiAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCT2JqZWN0U3RvcmVCYWNr
ZW5kSW1wbC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCT2Jq
ZWN0U3RvcmVCYWNrZW5kSW1wbC5jcHAKQEAgLTMwOCwyMiArMzA4LDIyIEBAIHZvaWQgSURCT2Jq
ZWN0U3RvcmVCYWNrZW5kSW1wbDo6T2JqZWN0U3RvcmVSZXRyaWV2YWxPcGVyYXRpb246OnBlcmZv
cm0oSURCVHJhbnNhCiAgICAgICAgIGtleSA9IGJhY2tpbmdTdG9yZUN1cnNvci0+a2V5KCk7CiAg
ICAgfQogCi0gICAgU3RyaW5nIHdpcmVEYXRhOworICAgIFZlY3Rvcjx1aW50OF90PiB3aXJlRGF0
YTsKICAgICBib29sIG9rID0gbV9vYmplY3RTdG9yZS0+YmFja2luZ1N0b3JlKCktPmdldFJlY29y
ZCh0cmFuc2FjdGlvbi0+YmFja2luZ1N0b3JlVHJhbnNhY3Rpb24oKSwgbV9vYmplY3RTdG9yZS0+
ZGF0YWJhc2VJZCgpLCBtX29iamVjdFN0b3JlLT5pZCgpLCAqa2V5LCB3aXJlRGF0YSk7CiAgICAg
aWYgKCFvaykgewogICAgICAgICBtX2NhbGxiYWNrcy0+b25FcnJvcihJREJEYXRhYmFzZUVycm9y
OjpjcmVhdGUoSURCRGF0YWJhc2VFeGNlcHRpb246OlVua25vd25FcnJvciwgIkludGVybmFsIGVy
cm9yIGluIGdldFJlY29yZC4iKSk7CiAgICAgICAgIHJldHVybjsKICAgICB9Ci0gICAgaWYgKHdp
cmVEYXRhLmlzTnVsbCgpKSB7CisgICAgaWYgKHdpcmVEYXRhLmlzRW1wdHkoKSkgewogICAgICAg
ICBtX2NhbGxiYWNrcy0+b25TdWNjZXNzKCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKICAg
ICBpZiAobV9vYmplY3RTdG9yZS0+YXV0b0luY3JlbWVudCgpICYmICFtX29iamVjdFN0b3JlLT5r
ZXlQYXRoKCkuaXNOdWxsKCkpIHsKLSAgICAgICAgbV9jYWxsYmFja3MtPm9uU3VjY2VzcyhTZXJp
YWxpemVkU2NyaXB0VmFsdWU6OmNyZWF0ZUZyb21XaXJlKHdpcmVEYXRhKSwga2V5LCBtX29iamVj
dFN0b3JlLT5rZXlQYXRoKCkpOworICAgICAgICBtX2NhbGxiYWNrcy0+b25TdWNjZXNzKFNlcmlh
bGl6ZWRTY3JpcHRWYWx1ZTo6Y3JlYXRlRnJvbVdpcmVCeXRlcyh3aXJlRGF0YSksIGtleSwgbV9v
YmplY3RTdG9yZS0+a2V5UGF0aCgpKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KLSAgICBtX2Nh
bGxiYWNrcy0+b25TdWNjZXNzKFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTo6Y3JlYXRlRnJvbVdpcmUo
d2lyZURhdGEpKTsKKyAgICBtX2NhbGxiYWNrcy0+b25TdWNjZXNzKFNlcmlhbGl6ZWRTY3JpcHRW
YWx1ZTo6Y3JlYXRlRnJvbVdpcmVCeXRlcyh3aXJlRGF0YSkpOwogfQogCiB2b2lkIElEQk9iamVj
dFN0b3JlQmFja2VuZEltcGw6OnB1dChQYXNzUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4g
dmFsdWUsIFBhc3NSZWZQdHI8SURCS2V5PiBrZXksIFB1dE1vZGUgcHV0TW9kZSwgUGFzc1JlZlB0
cjxJREJDYWxsYmFja3M+IHBycENhbGxiYWNrcywgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJm
YWNlKiB0cmFuc2FjdGlvblB0ciwgY29uc3QgVmVjdG9yPGludDY0X3Q+JiBpbmRleElkcywgY29u
c3QgVmVjdG9yPEluZGV4S2V5cz4mIGluZGV4S2V5cykKQEAgLTU2MCw3ICs1NjAsNyBAQCB2b2lk
IElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6Ok9iamVjdFN0b3JlU3RvcmFnZU9wZXJhdGlvbjo6
cGVyZm9ybShJREJUcmFuc2FjdAogCiAgICAgLy8gQmVmb3JlIHRoaXMgcG9pbnQsIGRvbid0IGRv
IGFueSBtdXRhdGlvbi4gIEFmdGVyIHRoaXMgcG9pbnQsIHJvbGxiYWNrIHRoZSB0cmFuc2FjdGlv
biBpbiBjYXNlIG9mIGVycm9yLgogCi0gICAgYmFja2luZ1N0b3JlU3VjY2VzcyA9IG1fb2JqZWN0
U3RvcmUtPmJhY2tpbmdTdG9yZSgpLT5wdXRSZWNvcmQodHJhbnNhY3Rpb24tPmJhY2tpbmdTdG9y
ZVRyYW5zYWN0aW9uKCksIG1fb2JqZWN0U3RvcmUtPmRhdGFiYXNlSWQoKSwgbV9vYmplY3RTdG9y
ZS0+aWQoKSwgKm1fa2V5LCBtX3ZhbHVlLT50b1dpcmVTdHJpbmcoKSwgJnJlY29yZElkZW50aWZp
ZXIpOworICAgIGJhY2tpbmdTdG9yZVN1Y2Nlc3MgPSBtX29iamVjdFN0b3JlLT5iYWNraW5nU3Rv
cmUoKS0+cHV0UmVjb3JkKHRyYW5zYWN0aW9uLT5iYWNraW5nU3RvcmVUcmFuc2FjdGlvbigpLCBt
X29iamVjdFN0b3JlLT5kYXRhYmFzZUlkKCksIG1fb2JqZWN0U3RvcmUtPmlkKCksICptX2tleSwg
bV92YWx1ZS0+dG9XaXJlQnl0ZXMoKSwgJnJlY29yZElkZW50aWZpZXIpOwogICAgIGlmICghYmFj
a2luZ1N0b3JlU3VjY2VzcykgewogICAgICAgICBtX2NhbGxiYWNrcy0+b25FcnJvcihJREJEYXRh
YmFzZUVycm9yOjpjcmVhdGUoSURCRGF0YWJhc2VFeGNlcHRpb246OlVua25vd25FcnJvciwgIklu
dGVybmFsIGVycm9yOiBiYWNraW5nIHN0b3JlIGVycm9yIHBlcmZvcm1pbmcgcHV0L2FkZC4iKSk7
CiAgICAgICAgIHJldHVybjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pz
L1NlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9T
ZXJpYWxpemVkU2NyaXB0VmFsdWUuY3BwCmluZGV4IDhhMDI4NDYuLjFhNmMwMDkgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1NlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvU2VyaWFsaXplZFNjcmlwdFZhbHVlLmNw
cApAQCAtMTAwMywxOCArMTAwMyw2IEBAIHR5cGVkZWYgVmVjdG9yPFdURjo6QXJyYXlCdWZmZXJD
b250ZW50cz4gQXJyYXlCdWZmZXJDb250ZW50c0FycmF5OwogCiBjbGFzcyBDbG9uZURlc2VyaWFs
aXplciA6IENsb25lQmFzZSB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFN0cmluZyB0b1dpcmVTdHJp
bmcoY29uc3QgVmVjdG9yPHVuc2lnbmVkIGNoYXI+JiB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIGNv
bnN0IHVpbnQ4X3QqIHN0YXJ0ID0gdmFsdWUuYmVnaW4oKTsKLSAgICAgICAgY29uc3QgdWludDhf
dCogZW5kID0gdmFsdWUuZW5kKCk7Ci0gICAgICAgIGNvbnN0IHVpbnQzMl90IGxlbmd0aCA9IHZh
bHVlLnNpemUoKSAvIHNpemVvZihVQ2hhcik7Ci0gICAgICAgIFN0cmluZyBzdHI7Ci0gICAgICAg
IGlmICghQ2xvbmVEZXNlcmlhbGl6ZXI6OnJlYWRTdHJpbmcoc3RhcnQsIGVuZCwgc3RyLCBsZW5n
dGgpKQotICAgICAgICAgICAgcmV0dXJuIFN0cmluZygpOwotCi0gICAgICAgIHJldHVybiBTdHJp
bmcoc3RyLmltcGwoKSk7Ci0gICAgfQotCiAgICAgc3RhdGljIFN0cmluZyBkZXNlcmlhbGl6ZVN0
cmluZyhjb25zdCBWZWN0b3I8dWludDhfdD4mIGJ1ZmZlcikKICAgICB7CiAgICAgICAgIGNvbnN0
IHVpbnQ4X3QqIHB0ciA9IGJ1ZmZlci5iZWdpbigpOwpAQCAtMTg1MywxOSArMTg0MSw2IEBAIEpT
VmFsdWUgU2VyaWFsaXplZFNjcmlwdFZhbHVlOjpkZXNlcmlhbGl6ZShKU0M6OkV4ZWNTdGF0ZSog
ZXhlYywgSlNDOjpKU0dsb2JhbE9iCiB9CiAjZW5kaWYKIAotU3RyaW5nIFNlcmlhbGl6ZWRTY3Jp
cHRWYWx1ZTo6dG9XaXJlU3RyaW5nKCkgY29uc3QKLXsKLSAgICByZXR1cm4gQ2xvbmVEZXNlcmlh
bGl6ZXI6OnRvV2lyZVN0cmluZyhtX2RhdGEpOwotfQotCi1QYXNzUmVmUHRyPFNlcmlhbGl6ZWRT
Y3JpcHRWYWx1ZT4gU2VyaWFsaXplZFNjcmlwdFZhbHVlOjpjcmVhdGVGcm9tV2lyZShjb25zdCBT
dHJpbmcmIHZhbHVlKQotewotICAgIFZlY3Rvcjx1aW50OF90PiBidWZmZXI7Ci0gICAgaWYgKCF3
cml0ZUxpdHRsZUVuZGlhbihidWZmZXIsIHZhbHVlLmltcGwoKS0+Y2hhcmFjdGVycygpLCB2YWx1
ZS5sZW5ndGgoKSkpCi0gICAgICAgIHJldHVybiAwOwotICAgIHJldHVybiBhZG9wdFJlZihuZXcg
U2VyaWFsaXplZFNjcmlwdFZhbHVlKGJ1ZmZlcikpOwotfQotCiBQYXNzUmVmUHRyPFNlcmlhbGl6
ZWRTY3JpcHRWYWx1ZT4gU2VyaWFsaXplZFNjcmlwdFZhbHVlOjpjcmVhdGUoSlNDb250ZXh0UmVm
IG9yaWdpbkNvbnRleHQsIEpTVmFsdWVSZWYgYXBpVmFsdWUsIAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1lc3NhZ2VQb3J0
QXJyYXkqIG1lc3NhZ2VQb3J0cywgQXJyYXlCdWZmZXJBcnJheSogYXJyYXlCdWZmZXJzLAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIEpTVmFsdWVSZWYqIGV4Y2VwdGlvbikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL2pzL1NlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5oIGIvU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvanMvU2VyaWFsaXplZFNjcmlwdFZhbHVlLmgKaW5kZXggODA5MTg1My4uY2NkM2U2YiAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvU2VyaWFsaXplZFNjcmlwdFZhbHVl
LmgKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvU2VyaWFsaXplZFNjcmlwdFZhbHVl
LmgKQEAgLTEwNCw4ICsxMDQsMTIgQEAgcHVibGljOgogICAgIEpTQzo6SlNWYWx1ZSBkZXNlcmlh
bGl6ZShKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6SlNHbG9iYWxPYmplY3QqKTsKICNlbmRpZgogCi0g
ICAgc3RhdGljIFBhc3NSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiBjcmVhdGVGcm9tV2ly
ZShjb25zdCBTdHJpbmcmIGRhdGEpOwotICAgIFN0cmluZyB0b1dpcmVTdHJpbmcoKSBjb25zdDsK
KyAgICBzdGF0aWMgUGFzc1JlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IGNyZWF0ZUZyb21X
aXJlQnl0ZXMoY29uc3QgVmVjdG9yPHVpbnQ4X3Q+JiBkYXRhKQorICAgIHsKKyAgICAgICAgVmVj
dG9yPHVpbnQ4X3Q+IGJ5dGVzKGRhdGEpOworICAgICAgICByZXR1cm4gYWRvcHQoYnl0ZXMpOwor
ICAgIH0KKyAgICBjb25zdCBWZWN0b3I8dWludDhfdD4mIHRvV2lyZUJ5dGVzKCkgY29uc3QgeyBy
ZXR1cm4gbV9kYXRhOyB9CiAKICAgICB+U2VyaWFsaXplZFNjcmlwdFZhbHVlKCk7CiAKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1NlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9TZXJpYWxpemVkU2NyaXB0VmFsdWUuY3Bw
CmluZGV4IDkxZjhlZjAuLjg5NjQxZTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL3Y4L1NlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvdjgvU2VyaWFsaXplZFNjcmlwdFZhbHVlLmNwcApAQCAtNjQsNiArNjQsNyBAQAogI2lu
Y2x1ZGUgPHd0Zi9BcnJheUJ1ZmZlci5oPgogI2luY2x1ZGUgPHd0Zi9BcnJheUJ1ZmZlclZpZXcu
aD4KICNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgorI2luY2x1ZGUgPHd0Zi9CeXRlT3JkZXIu
aD4KICNpbmNsdWRlIDx3dGYvRmxvYXQzMkFycmF5Lmg+CiAjaW5jbHVkZSA8d3RmL0Zsb2F0NjRB
cnJheS5oPgogI2luY2x1ZGUgPHd0Zi9JbnQxNkFycmF5Lmg+CkBAIC0yMjQ5LDYgKzIyNTAsMjAg
QEAgUGFzc1JlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IFNlcmlhbGl6ZWRTY3JpcHRWYWx1
ZTo6Y3JlYXRlRnJvbVdpcmUoY29uc3QgU3QKICAgICByZXR1cm4gYWRvcHRSZWYobmV3IFNlcmlh
bGl6ZWRTY3JpcHRWYWx1ZShkYXRhKSk7CiB9CiAKK1Bhc3NSZWZQdHI8U2VyaWFsaXplZFNjcmlw
dFZhbHVlPiBTZXJpYWxpemVkU2NyaXB0VmFsdWU6OmNyZWF0ZUZyb21XaXJlQnl0ZXMoY29uc3Qg
VmVjdG9yPHVpbnQ4X3Q+JiBkYXRhKQoreworICAgIC8vIERlY29kZSB3aXJlIGRhdGEgZnJvbSBi
aWcgZW5kaWFuIHRvIGhvc3QgYnl0ZSBvcmRlci4KKyAgICBBU1NFUlQoIShkYXRhLnNpemUoKSAl
IHNpemVvZihVQ2hhcikpKTsKKyAgICBzaXplX3QgbGVuZ3RoID0gZGF0YS5zaXplKCkgLyBzaXpl
b2YoVUNoYXIpOworICAgIFZlY3RvcjxVQ2hhcj4gYnVmZmVyKGxlbmd0aCk7CisgICAgY29uc3Qg
VUNoYXIqIHNyYyA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgVUNoYXIqPihkYXRhLmRhdGEoKSk7
CisgICAgVUNoYXIqIGRzdCA9IGJ1ZmZlci5kYXRhKCk7CisgICAgZm9yIChzaXplX3QgaSA9IDA7
IGkgPCBsZW5ndGg7IGkrKykKKyAgICAgICAgZHN0W2ldID0gbnRvaHMoc3JjW2ldKTsKKworICAg
IHJldHVybiBjcmVhdGVGcm9tV2lyZShTdHJpbmc6OmFkb3B0KGJ1ZmZlcikpOworfQorCiBQYXNz
UmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4gU2VyaWFsaXplZFNjcmlwdFZhbHVlOjpjcmVh
dGUoY29uc3QgU3RyaW5nJiBkYXRhLCB2ODo6SXNvbGF0ZSogaXNvbGF0ZSkKIHsKICAgICBXcml0
ZXIgd3JpdGVyKGlzb2xhdGUpOwpAQCAtMjI5Nyw2ICsyMzEyLDIwIEBAIFBhc3NSZWZQdHI8U2Vy
aWFsaXplZFNjcmlwdFZhbHVlPiBTZXJpYWxpemVkU2NyaXB0VmFsdWU6Om51bWJlclZhbHVlKGRv
dWJsZSB2YWx1CiAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBTZXJpYWxpemVkU2NyaXB0VmFsdWUo
d2lyZURhdGEpKTsKIH0KIAorVmVjdG9yPHVpbnQ4X3Q+IFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTo6
dG9XaXJlQnl0ZXMoKSBjb25zdAoreworICAgIC8vIENvbnZlcnQgc2VyaWFsaXplZCBzdHJpbmcg
dG8gYmlnIGVuZGlhbiB3aXJlIGRhdGEuCisgICAgc2l6ZV90IGxlbmd0aCA9IG1fZGF0YS5sZW5n
dGgoKTsKKyAgICBWZWN0b3I8dWludDhfdD4gcmVzdWx0KGxlbmd0aCAqIHNpemVvZihVQ2hhcikp
OworCisgICAgY29uc3QgVUNoYXIqIHNyYyA9IG1fZGF0YS5jaGFyYWN0ZXJzKCk7CisgICAgVUNo
YXIqIGRzdCA9IHJlaW50ZXJwcmV0X2Nhc3Q8VUNoYXIqPihyZXN1bHQuZGF0YSgpKTsKKyAgICBm
b3IgKHNpemVfdCBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKQorICAgICAgICBkc3RbaV0gPSBodG9u
cyhzcmNbaV0pOworCisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwogUGFzc1JlZlB0cjxTZXJpYWxp
emVkU2NyaXB0VmFsdWU+IFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTo6cmVsZWFzZSgpCiB7CiAgICAg
UmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4gcmVzdWx0ID0gYWRvcHRSZWYobmV3IFNlcmlh
bGl6ZWRTY3JpcHRWYWx1ZShtX2RhdGEpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL3Y4L1NlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5oIGIvU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvdjgvU2VyaWFsaXplZFNjcmlwdFZhbHVlLmgKaW5kZXggNjllYThkOC4uZDI3Nzk4ZiAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvU2VyaWFsaXplZFNjcmlwdFZhbHVl
LmgKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvU2VyaWFsaXplZFNjcmlwdFZhbHVl
LmgKQEAgLTU3LDYgKzU3LDcgQEAgcHVibGljOgogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wmIGRpZFRocm93LCB2ODo6SXNvbGF0ZSogPSAw
KTsKICAgICBzdGF0aWMgUGFzc1JlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IGNyZWF0ZSh2
ODo6SGFuZGxlPHY4OjpWYWx1ZT4sIHY4OjpJc29sYXRlKiA9IDApOwogICAgIHN0YXRpYyBQYXNz
UmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4gY3JlYXRlRnJvbVdpcmUoY29uc3QgU3RyaW5n
JiBkYXRhKTsKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IGNy
ZWF0ZUZyb21XaXJlQnl0ZXMoY29uc3QgVmVjdG9yPHVpbnQ4X3Q+JiBkYXRhKTsKICAgICBzdGF0
aWMgUGFzc1JlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IGNyZWF0ZShjb25zdCBTdHJpbmcm
IGRhdGEsIHY4OjpJc29sYXRlKiA9IDApOwogICAgIHN0YXRpYyBQYXNzUmVmUHRyPFNlcmlhbGl6
ZWRTY3JpcHRWYWx1ZT4gY3JlYXRlKCk7CiAKQEAgLTcwLDYgKzcxLDcgQEAgcHVibGljOgogICAg
IFBhc3NSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiByZWxlYXNlKCk7CiAKICAgICBTdHJp
bmcgdG9XaXJlU3RyaW5nKCkgY29uc3QgeyByZXR1cm4gbV9kYXRhOyB9CisgICAgVmVjdG9yPHVp
bnQ4X3Q+IHRvV2lyZUJ5dGVzKCkgY29uc3Q7CiAKICAgICAvLyBEZXNlcmlhbGl6ZXMgdGhlIHZh
bHVlIChpbiB0aGUgY3VycmVudCBjb250ZXh0KS4gUmV0dXJucyBhIG51bGwgdmFsdWUgaW4KICAg
ICAvLyBjYXNlIG9mIGZhaWx1cmUuCi0tIAoxLjcuOS41Cgo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>179678</attachid>
            <date>2012-12-16 18:21:05 -0800</date>
            <delta_ts>2012-12-17 16:00:52 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>idb-wire-bytes.patch</filename>
            <type>text/plain</type>
            <size>23632</size>
            <attacher name="Michael Pruett">michael</attacher>
            
              <data encoding="base64">RnJvbTogTWljaGFlbCBQcnVldHQgPG1pY2hhZWxANjhrLm9yZz4KRGF0ZTogU3VuLCAxNiBEZWMg
MjAxMiAxODoxODowMyAtMDgwMApTdWJqZWN0OiBJbmRleGVkREI6IERvbid0IHVzZSBzdHJpbmdz
IHRvIHJlcHJlc2VudCBzZXJpYWxpemVkIHZhbHVlcwoKLS0tCiBTb3VyY2UvV2ViQ29yZS9DaGFu
Z2VMb2cgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgNDggKysrKysrKysrKysrKysrKysr
KysKIC4uLi9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkJhY2tpbmdTdG9yZS5jcHAgIHwg
ICAzMyArKysrKysrLS0tLS0tLQogU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURC
QmFja2luZ1N0b3JlLmggfCAgICA2ICstLQogLi4uL01vZHVsZXMvaW5kZXhlZGRiL0lEQkN1cnNv
ckJhY2tlbmRJbXBsLmNwcCAgICAgfCAgICA0ICstCiAuLi4vTW9kdWxlcy9pbmRleGVkZGIvSURC
Q3Vyc29yQmFja2VuZEltcGwuaCAgICAgICB8ICAgIDIgKy0KIC4uLi9Nb2R1bGVzL2luZGV4ZWRk
Yi9JREJJbmRleEJhY2tlbmRJbXBsLmNwcCAgICAgIHwgICAgOCArKy0tCiAuLi4vaW5kZXhlZGRi
L0lEQk9iamVjdFN0b3JlQmFja2VuZEltcGwuY3BwICAgICAgICB8ICAgMTAgKystLQogLi4uL1dl
YkNvcmUvYmluZGluZ3MvanMvU2VyaWFsaXplZFNjcmlwdFZhbHVlLmNwcCAgfCAgIDMwICsrLS0t
LS0tLS0tLQogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvU2VyaWFsaXplZFNjcmlwdFZhbHVl
LmggfCAgICA4ICsrKy0KIC4uLi9XZWJDb3JlL2JpbmRpbmdzL3Y4L1NlcmlhbGl6ZWRTY3JpcHRW
YWx1ZS5jcHAgIHwgICAyOSArKysrKysrKysrKysKIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4
L1NlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5oIHwgICAgMiArCiAxMSBmaWxlcyBjaGFuZ2VkLCAxMjIg
aW5zZXJ0aW9ucygrKSwgNTggZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvQ2hhbmdlTG9nIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCmluZGV4IDg5NzBhYjMuLjI1
MDExN2QgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZworKysgYi9Tb3VyY2Uv
V2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSw1MSBAQAorMjAxMi0xMi0xNiAgTWljaGFlbCBQ
cnVldHQgIDxtaWNoYWVsQDY4ay5vcmc+CisKKyAgICAgICAgSW5kZXhlZERCOiBEb24ndCB1c2Ug
c3RyaW5ncyB0byByZXByZXNlbnQgc2VyaWFsaXplZCB2YWx1ZXMKKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEwNDM1NAorCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFVzZSBWZWN0b3I8dWludDhfdD4gcmF0aGVy
IHRoYW4gU3RyaW5nIHRvIHJlcHJlc2VudCBzZXJpYWxpemVkIHZhbHVlcworICAgICAgICBpbiBJ
bmRleGVkREIuIFRoaXMgY2hhbmdlIGlzIG5lY2Vzc2FyeSB0byBpbXBsZW1lbnQgSW5kZXhlZERC
IGZvciBKU0MuCisKKyAgICAgICAgVGVzdHM6IHN0b3JhZ2UvaW5kZXhlZGRiLyoKKworICAgICAg
ICAqIE1vZHVsZXMvaW5kZXhlZGRiL0lEQkJhY2tpbmdTdG9yZS5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpJREJCYWNraW5nU3RvcmU6OmdldFJlY29yZCk6CisgICAgICAgIChXZWJDb3JlOjpJREJC
YWNraW5nU3RvcmU6OnB1dFJlY29yZCk6CisgICAgICAgIChXZWJDb3JlOjpPYmplY3RTdG9yZUtl
eUN1cnNvckltcGw6OnZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6Ok9iamVjdFN0b3JlS2V5Q3Vy
c29ySW1wbDo6T2JqZWN0U3RvcmVLZXlDdXJzb3JJbXBsKToKKyAgICAgICAgKFdlYkNvcmU6Ok9i
amVjdFN0b3JlQ3Vyc29ySW1wbDo6dmFsdWUpOgorICAgICAgICAoT2JqZWN0U3RvcmVDdXJzb3JJ
bXBsKToKKyAgICAgICAgKFdlYkNvcmU6Ok9iamVjdFN0b3JlQ3Vyc29ySW1wbDo6bG9hZEN1cnJl
bnRSb3cpOgorICAgICAgICAoV2ViQ29yZTo6SW5kZXhLZXlDdXJzb3JJbXBsOjp2YWx1ZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpJbmRleEN1cnNvckltcGw6OnZhbHVlKToKKyAgICAgICAgKFdlYkNv
cmU6OkluZGV4Q3Vyc29ySW1wbDo6SW5kZXhDdXJzb3JJbXBsKToKKyAgICAgICAgKEluZGV4Q3Vy
c29ySW1wbCk6CisgICAgICAgIChXZWJDb3JlOjpJbmRleEN1cnNvckltcGw6OmxvYWRDdXJyZW50
Um93KToKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9JREJCYWNraW5nU3RvcmUuaDoKKyAg
ICAgICAgKElEQkJhY2tpbmdTdG9yZSk6CisgICAgICAgIChDdXJzb3IpOgorICAgICAgICAqIE1v
ZHVsZXMvaW5kZXhlZGRiL0lEQkN1cnNvckJhY2tlbmRJbXBsLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OklEQkN1cnNvckJhY2tlbmRJbXBsOjpDdXJzb3JQcmVmZXRjaEl0ZXJhdGlvbk9wZXJhdGlv
bjo6cGVyZm9ybSk6CisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvSURCQ3Vyc29yQmFja2Vu
ZEltcGwuaDoKKyAgICAgICAgKFdlYkNvcmU6OklEQkN1cnNvckJhY2tlbmRJbXBsOjp2YWx1ZSk6
CisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvSURCSW5kZXhCYWNrZW5kSW1wbC5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpJREJJbmRleEJhY2tlbmRJbXBsOjpJbmRleFJlZmVyZW5jZWRWYWx1
ZVJldHJpZXZhbE9wZXJhdGlvbjo6cGVyZm9ybSk6CisgICAgICAgICogTW9kdWxlcy9pbmRleGVk
ZGIvSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJREJP
YmplY3RTdG9yZUJhY2tlbmRJbXBsOjpPYmplY3RTdG9yZVJldHJpZXZhbE9wZXJhdGlvbjo6cGVy
Zm9ybSk6CisgICAgICAgIChXZWJDb3JlOjpJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpPYmpl
Y3RTdG9yZVN0b3JhZ2VPcGVyYXRpb246OnBlcmZvcm0pOgorICAgICAgICAqIGJpbmRpbmdzL2pz
L1NlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTZXJpYWxpemVk
U2NyaXB0VmFsdWU6OlNlcmlhbGl6ZWRTY3JpcHRWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlKToK
KyAgICAgICAgKiBiaW5kaW5ncy9qcy9TZXJpYWxpemVkU2NyaXB0VmFsdWUuaDoKKyAgICAgICAg
KiBiaW5kaW5ncy92OC9TZXJpYWxpemVkU2NyaXB0VmFsdWUuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6U2VyaWFsaXplZFNjcmlwdFZhbHVlOjpjcmVhdGVGcm9tV2lyZUJ5dGVzKToKKyAgICAgICAg
KFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6U2VyaWFsaXplZFNjcmlwdFZhbHVlOjp0b1dp
cmVCeXRlcyk6CisgICAgICAgICogYmluZGluZ3MvdjgvU2VyaWFsaXplZFNjcmlwdFZhbHVlLmg6
CisgICAgICAgIChTZXJpYWxpemVkU2NyaXB0VmFsdWUpOgorCiAyMDEyLTEyLTE0ICBNaWNoYWVs
IFBydWV0dCAgPG1pY2hhZWxANjhrLm9yZz4KIAogICAgICAgICBJbmRleGVkREI6IEltcGxlbWVu
dCBjdXN0b20gYmluZGluZ3MgZm9yIHBhcnNpbmcgb3B0aW9ucwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCQmFja2luZ1N0b3JlLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkJhY2tpbmdTdG9yZS5jcHAKaW5kZXggNGIxYTFh
Ny4uNTQwMmVjZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIv
SURCQmFja2luZ1N0b3JlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRk
Yi9JREJCYWNraW5nU3RvcmUuY3BwCkBAIC03NjYsNyArNzY2LDcgQEAgYm9vbCBJREJCYWNraW5n
U3RvcmU6OmRlbGV0ZU9iamVjdFN0b3JlKElEQkJhY2tpbmdTdG9yZTo6VHJhbnNhY3Rpb24qIHRy
YW5zYWN0aW8KICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotYm9vbCBJREJCYWNraW5nU3RvcmU6Omdl
dFJlY29yZChJREJCYWNraW5nU3RvcmU6OlRyYW5zYWN0aW9uKiB0cmFuc2FjdGlvbiwgaW50NjRf
dCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGNvbnN0IElEQktleSYga2V5LCBT
dHJpbmcmIHJlY29yZCkKK2Jvb2wgSURCQmFja2luZ1N0b3JlOjpnZXRSZWNvcmQoSURCQmFja2lu
Z1N0b3JlOjpUcmFuc2FjdGlvbiogdHJhbnNhY3Rpb24sIGludDY0X3QgZGF0YWJhc2VJZCwgaW50
NjRfdCBvYmplY3RTdG9yZUlkLCBjb25zdCBJREJLZXkmIGtleSwgVmVjdG9yPHVpbnQ4X3Q+JiBy
ZWNvcmQpCiB7CiAgICAgSURCX1RSQUNFKCJJREJCYWNraW5nU3RvcmU6OmdldFJlY29yZCIpOwog
ICAgIExldmVsREJUcmFuc2FjdGlvbiogbGV2ZWxEQlRyYW5zYWN0aW9uID0gSURCQmFja2luZ1N0
b3JlOjpUcmFuc2FjdGlvbjo6bGV2ZWxEQlRyYW5zYWN0aW9uRnJvbSh0cmFuc2FjdGlvbik7CkBA
IC03NzQsMTAgKzc3NCwxMSBAQCBib29sIElEQkJhY2tpbmdTdG9yZTo6Z2V0UmVjb3JkKElEQkJh
Y2tpbmdTdG9yZTo6VHJhbnNhY3Rpb24qIHRyYW5zYWN0aW9uLCBpbnQ2NAogICAgIGNvbnN0IFZl
Y3RvcjxjaGFyPiBsZXZlbGRiS2V5ID0gT2JqZWN0U3RvcmVEYXRhS2V5OjplbmNvZGUoZGF0YWJh
c2VJZCwgb2JqZWN0U3RvcmVJZCwga2V5KTsKICAgICBWZWN0b3I8Y2hhcj4gZGF0YTsKIAorICAg
IHJlY29yZC5jbGVhcigpOworCiAgICAgYm9vbCBmb3VuZCA9IGZhbHNlOwogICAgIGJvb2wgb2sg
PSBsZXZlbERCVHJhbnNhY3Rpb24tPnNhZmVHZXQobGV2ZWxkYktleSwgZGF0YSwgZm91bmQpOwog
ICAgIGlmICghb2spIHsKLSAgICAgICAgcmVjb3JkID0gU3RyaW5nKCk7CiAgICAgICAgIEludGVy
bmFsRXJyb3IoSURCTGV2ZWxEQkJhY2tpbmdTdG9yZVJlYWRFcnJvckdldFJlY29yZCk7CiAgICAg
ICAgIHJldHVybiBmYWxzZTsKICAgICB9CkBAIC03ODYsMTEgKzc4NywxMCBAQCBib29sIElEQkJh
Y2tpbmdTdG9yZTo6Z2V0UmVjb3JkKElEQkJhY2tpbmdTdG9yZTo6VHJhbnNhY3Rpb24qIHRyYW5z
YWN0aW9uLCBpbnQ2NAogICAgIGNvbnN0IGNoYXIqIHAgPSBkZWNvZGVWYXJJbnQoZGF0YS5iZWdp
bigpLCBkYXRhLmVuZCgpLCB2ZXJzaW9uKTsKICAgICBpZiAoIXApIHsKICAgICAgICAgSW50ZXJu
YWxFcnJvcihJREJMZXZlbERCQmFja2luZ1N0b3JlUmVhZEVycm9yR2V0UmVjb3JkKTsKLSAgICAg
ICAgcmVjb3JkID0gU3RyaW5nKCk7CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAKLSAg
ICByZWNvcmQgPSBkZWNvZGVTdHJpbmcocCwgZGF0YS5lbmQoKSk7CisgICAgcmVjb3JkLmFwcGVu
ZFJhbmdlKHAsIHN0YXRpY19jYXN0PGNvbnN0IGNoYXIqPihkYXRhLmVuZCgpKSk7CiAgICAgcmV0
dXJuIHRydWU7CiB9CiAKQEAgLTgyMCw3ICs4MjAsNyBAQCBXQVJOX1VOVVNFRF9SRVRVUk4gc3Rh
dGljIGJvb2wgZ2V0TmV3VmVyc2lvbk51bWJlcihMZXZlbERCVHJhbnNhY3Rpb24qIHRyYW5zYWN0
aQogICAgIHJldHVybiB0cnVlOwogfQogCi1ib29sIElEQkJhY2tpbmdTdG9yZTo6cHV0UmVjb3Jk
KElEQkJhY2tpbmdTdG9yZTo6VHJhbnNhY3Rpb24qIHRyYW5zYWN0aW9uLCBpbnQ2NF90IGRhdGFi
YXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgY29uc3QgSURCS2V5JiBrZXksIGNvbnN0IFN0
cmluZyYgdmFsdWUsIFJlY29yZElkZW50aWZpZXIqIHJlY29yZElkZW50aWZpZXIpCitib29sIElE
QkJhY2tpbmdTdG9yZTo6cHV0UmVjb3JkKElEQkJhY2tpbmdTdG9yZTo6VHJhbnNhY3Rpb24qIHRy
YW5zYWN0aW9uLCBpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgY29u
c3QgSURCS2V5JiBrZXksIGNvbnN0IFZlY3Rvcjx1aW50OF90PiYgdmFsdWUsIFJlY29yZElkZW50
aWZpZXIqIHJlY29yZElkZW50aWZpZXIpCiB7CiAgICAgSURCX1RSQUNFKCJJREJCYWNraW5nU3Rv
cmU6OnB1dFJlY29yZCIpOwogICAgIEFTU0VSVChrZXkuaXNWYWxpZCgpKTsKQEAgLTgzNCw3ICs4
MzQsNyBAQCBib29sIElEQkJhY2tpbmdTdG9yZTo6cHV0UmVjb3JkKElEQkJhY2tpbmdTdG9yZTo6
VHJhbnNhY3Rpb24qIHRyYW5zYWN0aW9uLCBpbnQ2NAogCiAgICAgVmVjdG9yPGNoYXI+IHY7CiAg
ICAgdi5hcHBlbmQoZW5jb2RlVmFySW50KHZlcnNpb24pKTsKLSAgICB2LmFwcGVuZChlbmNvZGVT
dHJpbmcodmFsdWUpKTsKKyAgICB2LmFwcGVuZFZlY3Rvcih2YWx1ZSk7CiAKICAgICBsZXZlbERC
VHJhbnNhY3Rpb24tPnB1dChvYmplY3RTdG9yZWRhdGFLZXksIHYpOwogCkBAIC0xMzg5LDcgKzEz
ODksNyBAQCBwdWJsaWM6CiAgICAgfQogCiAgICAgLy8gSURCQmFja2luZ1N0b3JlOjpDdXJzb3IK
LSAgICB2aXJ0dWFsIFN0cmluZyB2YWx1ZSgpIGNvbnN0IHsgQVNTRVJUX05PVF9SRUFDSEVEKCk7
IHJldHVybiBTdHJpbmcoKTsgfQorICAgIHZpcnR1YWwgY29uc3QgVmVjdG9yPHVpbnQ4X3Q+JiB2
YWx1ZSgpIGNvbnN0IHsgQVNTRVJUX05PVF9SRUFDSEVEKCk7IHJldHVybiAqbmV3IFZlY3Rvcjx1
aW50OF90PigpOyB9CiAgICAgdmlydHVhbCBib29sIGxvYWRDdXJyZW50Um93KCk7CiAKIHByaXZh
dGU6CkBAIC0xNDAyLDcgKzE0MDIsNiBAQCBwcml2YXRlOgogICAgICAgICA6IElEQkJhY2tpbmdT
dG9yZTo6Q3Vyc29yKG90aGVyKQogICAgIHsKICAgICB9Ci0KIH07CiAKIGJvb2wgT2JqZWN0U3Rv
cmVLZXlDdXJzb3JJbXBsOjpsb2FkQ3VycmVudFJvdygpCkBAIC0xNDQ1LDcgKzE0NDQsNyBAQCBw
dWJsaWM6CiAgICAgfQogCiAgICAgLy8gSURCQmFja2luZ1N0b3JlOjpDdXJzb3IKLSAgICB2aXJ0
dWFsIFN0cmluZyB2YWx1ZSgpIGNvbnN0IHsgcmV0dXJuIG1fY3VycmVudFZhbHVlOyB9CisgICAg
dmlydHVhbCBjb25zdCBWZWN0b3I8dWludDhfdD4mIHZhbHVlKCkgY29uc3QgeyByZXR1cm4gbV9j
dXJyZW50VmFsdWU7IH0KICAgICB2aXJ0dWFsIGJvb2wgbG9hZEN1cnJlbnRSb3coKTsKIAogcHJp
dmF0ZToKQEAgLTE0NjAsNyArMTQ1OSw3IEBAIHByaXZhdGU6CiAgICAgewogICAgIH0KIAotICAg
IFN0cmluZyBtX2N1cnJlbnRWYWx1ZTsKKyAgICBWZWN0b3I8dWludDhfdD4gbV9jdXJyZW50VmFs
dWU7CiB9OwogCiBib29sIE9iamVjdFN0b3JlQ3Vyc29ySW1wbDo6bG9hZEN1cnJlbnRSb3coKQpA
QCAtMTQ4Nyw3ICsxNDg2LDggQEAgYm9vbCBPYmplY3RTdG9yZUN1cnNvckltcGw6OmxvYWRDdXJy
ZW50Um93KCkKICAgICAvLyBGSVhNRTogVGhpcyByZS1lbmNvZGVzIHdoYXQgd2FzIGp1c3QgZGVj
b2RlZDsgdHJ5IGFuZCBvcHRpbWl6ZS4KICAgICBtX3JlY29yZElkZW50aWZpZXIucmVzZXQoZW5j
b2RlSURCS2V5KCptX2N1cnJlbnRLZXkpLCB2ZXJzaW9uKTsKIAotICAgIG1fY3VycmVudFZhbHVl
ID0gZGVjb2RlU3RyaW5nKHZhbHVlUG9zaXRpb24sIG1faXRlcmF0b3ItPnZhbHVlKCkuZW5kKCkp
OworICAgIG1fY3VycmVudFZhbHVlLmNsZWFyKCk7CisgICAgbV9jdXJyZW50VmFsdWUuYXBwZW5k
UmFuZ2UodmFsdWVQb3NpdGlvbiwgc3RhdGljX2Nhc3Q8Y29uc3QgY2hhcio+KG1faXRlcmF0b3It
PnZhbHVlKCkuZW5kKCkpKTsKIAogICAgIHJldHVybiB0cnVlOwogfQpAQCAtMTUwNSw3ICsxNTA1
LDcgQEAgcHVibGljOgogICAgIH0KIAogICAgIC8vIElEQkJhY2tpbmdTdG9yZTo6Q3Vyc29yCi0g
ICAgdmlydHVhbCBTdHJpbmcgdmFsdWUoKSBjb25zdCB7IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOyBy
ZXR1cm4gU3RyaW5nKCk7IH0KKyAgICB2aXJ0dWFsIGNvbnN0IFZlY3Rvcjx1aW50OF90PiYgdmFs
dWUoKSBjb25zdCB7IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOyByZXR1cm4gKm5ldyBWZWN0b3I8dWlu
dDhfdD4oKTsgfQogICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxJREJLZXk+IHByaW1hcnlLZXkoKSBj
b25zdCB7IHJldHVybiBtX3ByaW1hcnlLZXk7IH0KICAgICB2aXJ0dWFsIGNvbnN0IElEQkJhY2tp
bmdTdG9yZTo6UmVjb3JkSWRlbnRpZmllciYgcmVjb3JkSWRlbnRpZmllcigpIGNvbnN0IHsgQVNT
RVJUX05PVF9SRUFDSEVEKCk7IHJldHVybiBtX3JlY29yZElkZW50aWZpZXI7IH0KICAgICB2aXJ0
dWFsIGJvb2wgbG9hZEN1cnJlbnRSb3coKTsKQEAgLTE1ODQsNyArMTU4NCw3IEBAIHB1YmxpYzoK
ICAgICB9CiAKICAgICAvLyBJREJCYWNraW5nU3RvcmU6OkN1cnNvcgotICAgIHZpcnR1YWwgU3Ry
aW5nIHZhbHVlKCkgY29uc3QgeyByZXR1cm4gbV92YWx1ZTsgfQorICAgIHZpcnR1YWwgY29uc3Qg
VmVjdG9yPHVpbnQ4X3Q+JiB2YWx1ZSgpIGNvbnN0IHsgcmV0dXJuIG1fY3VycmVudFZhbHVlOyB9
CiAgICAgdmlydHVhbCBQYXNzUmVmUHRyPElEQktleT4gcHJpbWFyeUtleSgpIGNvbnN0IHsgcmV0
dXJuIG1fcHJpbWFyeUtleTsgfQogICAgIHZpcnR1YWwgY29uc3QgSURCQmFja2luZ1N0b3JlOjpS
ZWNvcmRJZGVudGlmaWVyJiByZWNvcmRJZGVudGlmaWVyKCkgY29uc3QgeyBBU1NFUlRfTk9UX1JF
QUNIRUQoKTsgcmV0dXJuIG1fcmVjb3JkSWRlbnRpZmllcjsgfQogICAgIGJvb2wgbG9hZEN1cnJl
bnRSb3coKTsKQEAgLTE1OTgsMTMgKzE1OTgsMTMgQEAgcHJpdmF0ZToKICAgICBJbmRleEN1cnNv
ckltcGwoY29uc3QgSW5kZXhDdXJzb3JJbXBsKiBvdGhlcikKICAgICAgICAgOiBJREJCYWNraW5n
U3RvcmU6OkN1cnNvcihvdGhlcikKICAgICAgICAgLCBtX3ByaW1hcnlLZXkob3RoZXItPm1fcHJp
bWFyeUtleSkKLSAgICAgICAgLCBtX3ZhbHVlKG90aGVyLT5tX3ZhbHVlKQorICAgICAgICAsIG1f
Y3VycmVudFZhbHVlKG90aGVyLT5tX2N1cnJlbnRWYWx1ZSkKICAgICAgICAgLCBtX3ByaW1hcnlM
ZXZlbERCS2V5KG90aGVyLT5tX3ByaW1hcnlMZXZlbERCS2V5KQogICAgIHsKICAgICB9CiAKICAg
ICBSZWZQdHI8SURCS2V5PiBtX3ByaW1hcnlLZXk7Ci0gICAgU3RyaW5nIG1fdmFsdWU7CisgICAg
VmVjdG9yPHVpbnQ4X3Q+IG1fY3VycmVudFZhbHVlOwogICAgIFZlY3RvcjxjaGFyPiBtX3ByaW1h
cnlMZXZlbERCS2V5OwogfTsKIApAQCAtMTY1Myw3ICsxNjUzLDggQEAgYm9vbCBJbmRleEN1cnNv
ckltcGw6OmxvYWRDdXJyZW50Um93KCkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIAot
ICAgIG1fdmFsdWUgPSBkZWNvZGVTdHJpbmcodCwgcmVzdWx0LmVuZCgpKTsKKyAgICBtX2N1cnJl
bnRWYWx1ZS5jbGVhcigpOworICAgIG1fY3VycmVudFZhbHVlLmFwcGVuZFJhbmdlKHQsIHN0YXRp
Y19jYXN0PGNvbnN0IGNoYXIqPihyZXN1bHQuZW5kKCkpKTsKICAgICByZXR1cm4gdHJ1ZTsKIH0K
IApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCQmFja2lu
Z1N0b3JlLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJCYWNraW5nU3Rv
cmUuaAppbmRleCA1ZDFhYWNjLi4yZjk5Y2EzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL2luZGV4ZWRkYi9JREJCYWNraW5nU3RvcmUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL2luZGV4ZWRkYi9JREJCYWNraW5nU3RvcmUuaApAQCAtNzcsOCArNzcsOCBAQCBwdWJs
aWM6CiAgICAgICAgIGludDY0X3QgbV92ZXJzaW9uOwogICAgIH07CiAKLSAgICB2aXJ0dWFsIGJv
b2wgZ2V0UmVjb3JkKElEQkJhY2tpbmdTdG9yZTo6VHJhbnNhY3Rpb24qLCBpbnQ2NF90IGRhdGFi
YXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgY29uc3QgSURCS2V5JiwgU3RyaW5nJiByZWNv
cmQpIFdBUk5fVU5VU0VEX1JFVFVSTjsKLSAgICB2aXJ0dWFsIGJvb2wgcHV0UmVjb3JkKElEQkJh
Y2tpbmdTdG9yZTo6VHJhbnNhY3Rpb24qLCBpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2Jq
ZWN0U3RvcmVJZCwgY29uc3QgSURCS2V5JiwgY29uc3QgU3RyaW5nJiB2YWx1ZSwgUmVjb3JkSWRl
bnRpZmllciopIFdBUk5fVU5VU0VEX1JFVFVSTjsKKyAgICB2aXJ0dWFsIGJvb2wgZ2V0UmVjb3Jk
KElEQkJhY2tpbmdTdG9yZTo6VHJhbnNhY3Rpb24qLCBpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0
X3Qgb2JqZWN0U3RvcmVJZCwgY29uc3QgSURCS2V5JiwgVmVjdG9yPHVpbnQ4X3Q+JiByZWNvcmQp
IFdBUk5fVU5VU0VEX1JFVFVSTjsKKyAgICB2aXJ0dWFsIGJvb2wgcHV0UmVjb3JkKElEQkJhY2tp
bmdTdG9yZTo6VHJhbnNhY3Rpb24qLCBpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0
U3RvcmVJZCwgY29uc3QgSURCS2V5JiwgY29uc3QgVmVjdG9yPHVpbnQ4X3Q+JiB2YWx1ZSwgUmVj
b3JkSWRlbnRpZmllciopIFdBUk5fVU5VU0VEX1JFVFVSTjsKICAgICB2aXJ0dWFsIHZvaWQgY2xl
YXJPYmplY3RTdG9yZShJREJCYWNraW5nU3RvcmU6OlRyYW5zYWN0aW9uKiwgaW50NjRfdCBkYXRh
YmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQpOwogICAgIHZpcnR1YWwgdm9pZCBkZWxldGVS
ZWNvcmQoSURCQmFja2luZ1N0b3JlOjpUcmFuc2FjdGlvbiosIGludDY0X3QgZGF0YWJhc2VJZCwg
aW50NjRfdCBvYmplY3RTdG9yZUlkLCBjb25zdCBSZWNvcmRJZGVudGlmaWVyJik7CiAgICAgdmly
dHVhbCBib29sIGdldEtleUdlbmVyYXRvckN1cnJlbnROdW1iZXIoSURCQmFja2luZ1N0b3JlOjpU
cmFuc2FjdGlvbiosIGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBp
bnQ2NF90JiBjdXJyZW50TnVtYmVyKSBXQVJOX1VOVVNFRF9SRVRVUk47CkBAIC0xMTUsNyArMTE1
LDcgQEAgcHVibGljOgogCiAgICAgICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxDdXJzb3I+IGNsb25l
KCkgPSAwOwogICAgICAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8SURCS2V5PiBwcmltYXJ5S2V5KCkg
Y29uc3QgeyByZXR1cm4gbV9jdXJyZW50S2V5OyB9Ci0gICAgICAgIHZpcnR1YWwgU3RyaW5nIHZh
bHVlKCkgY29uc3QgPSAwOworICAgICAgICB2aXJ0dWFsIGNvbnN0IFZlY3Rvcjx1aW50OF90PiYg
dmFsdWUoKSBjb25zdCA9IDA7CiAgICAgICAgIHZpcnR1YWwgY29uc3QgUmVjb3JkSWRlbnRpZmll
ciYgcmVjb3JkSWRlbnRpZmllcigpIGNvbnN0IHsgcmV0dXJuIG1fcmVjb3JkSWRlbnRpZmllcjsg
fQogICAgICAgICB2aXJ0dWFsIH5DdXJzb3IoKSB7IH0KICAgICAgICAgdmlydHVhbCBib29sIGxv
YWRDdXJyZW50Um93KCkgPSAwOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9p
bmRleGVkZGIvSURCQ3Vyc29yQmFja2VuZEltcGwuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy9pbmRleGVkZGIvSURCQ3Vyc29yQmFja2VuZEltcGwuY3BwCmluZGV4IGQyNzU4ODMuLjJjNDZi
MWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkN1cnNv
ckJhY2tlbmRJbXBsLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9J
REJDdXJzb3JCYWNrZW5kSW1wbC5jcHAKQEAgLTIwOSwxNCArMjA5LDE0IEBAIHZvaWQgSURCQ3Vy
c29yQmFja2VuZEltcGw6OkN1cnNvclByZWZldGNoSXRlcmF0aW9uT3BlcmF0aW9uOjpwZXJmb3Jt
KElEQlRyYW5zYWN0CiAgICAgICAgIGZvdW5kUHJpbWFyeUtleXMuYXBwZW5kKG1fY3Vyc29yLT5t
X2N1cnNvci0+cHJpbWFyeUtleSgpKTsKIAogICAgICAgICBpZiAobV9jdXJzb3ItPm1fY3Vyc29y
VHlwZSAhPSBJREJDdXJzb3JCYWNrZW5kSW50ZXJmYWNlOjpJbmRleEtleUN1cnNvcikKLSAgICAg
ICAgICAgIGZvdW5kVmFsdWVzLmFwcGVuZChTZXJpYWxpemVkU2NyaXB0VmFsdWU6OmNyZWF0ZUZy
b21XaXJlKG1fY3Vyc29yLT5tX2N1cnNvci0+dmFsdWUoKSkpOworICAgICAgICAgICAgZm91bmRW
YWx1ZXMuYXBwZW5kKFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTo6Y3JlYXRlRnJvbVdpcmVCeXRlcyht
X2N1cnNvci0+bV9jdXJzb3ItPnZhbHVlKCkpKTsKICAgICAgICAgZWxzZQogICAgICAgICAgICAg
Zm91bmRWYWx1ZXMuYXBwZW5kKFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTo6Y3JlYXRlKCkpOwogCiAg
ICAgICAgIHNpemVFc3RpbWF0ZSArPSBtX2N1cnNvci0+bV9jdXJzb3ItPmtleSgpLT5zaXplRXN0
aW1hdGUoKTsKICAgICAgICAgc2l6ZUVzdGltYXRlICs9IG1fY3Vyc29yLT5tX2N1cnNvci0+cHJp
bWFyeUtleSgpLT5zaXplRXN0aW1hdGUoKTsKICAgICAgICAgaWYgKG1fY3Vyc29yLT5tX2N1cnNv
clR5cGUgIT0gSURCQ3Vyc29yQmFja2VuZEludGVyZmFjZTo6SW5kZXhLZXlDdXJzb3IpCi0gICAg
ICAgICAgICBzaXplRXN0aW1hdGUgKz0gbV9jdXJzb3ItPm1fY3Vyc29yLT52YWx1ZSgpLmxlbmd0
aCgpICogc2l6ZW9mKFVDaGFyKTsKKyAgICAgICAgICAgIHNpemVFc3RpbWF0ZSArPSBtX2N1cnNv
ci0+bV9jdXJzb3ItPnZhbHVlKCkuc2l6ZSgpOwogCiAgICAgICAgIGlmIChzaXplRXN0aW1hdGUg
PiBtYXhTaXplRXN0aW1hdGUpCiAgICAgICAgICAgICBicmVhazsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkN1cnNvckJhY2tlbmRJbXBsLmggYi9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJDdXJzb3JCYWNrZW5kSW1wbC5oCmluZGV4
IDBjNjAwMzQuLjg3YWMxNzggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5k
ZXhlZGRiL0lEQkN1cnNvckJhY2tlbmRJbXBsLmgKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy9pbmRleGVkZGIvSURCQ3Vyc29yQmFja2VuZEltcGwuaApAQCAtNjcsNyArNjcsNyBAQCBwdWJs
aWM6CiAKICAgICBQYXNzUmVmUHRyPElEQktleT4ga2V5KCkgY29uc3QgeyByZXR1cm4gbV9jdXJz
b3ItPmtleSgpOyB9CiAgICAgUGFzc1JlZlB0cjxJREJLZXk+IHByaW1hcnlLZXkoKSBjb25zdCB7
IHJldHVybiBtX2N1cnNvci0+cHJpbWFyeUtleSgpOyB9Ci0gICAgUGFzc1JlZlB0cjxTZXJpYWxp
emVkU2NyaXB0VmFsdWU+IHZhbHVlKCkgY29uc3QgeyByZXR1cm4gKG1fY3Vyc29yVHlwZSA9PSBJ
bmRleEtleUN1cnNvcikgPyAwIDogU2VyaWFsaXplZFNjcmlwdFZhbHVlOjpjcmVhdGVGcm9tV2ly
ZShtX2N1cnNvci0+dmFsdWUoKSk7IH0KKyAgICBQYXNzUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRW
YWx1ZT4gdmFsdWUoKSBjb25zdCB7IHJldHVybiAobV9jdXJzb3JUeXBlID09IEluZGV4S2V5Q3Vy
c29yKSA/IDAgOiBTZXJpYWxpemVkU2NyaXB0VmFsdWU6OmNyZWF0ZUZyb21XaXJlQnl0ZXMobV9j
dXJzb3ItPnZhbHVlKCkpOyB9CiAgICAgdm9pZCBjbG9zZSgpOwogCiBwcml2YXRlOgpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCSW5kZXhCYWNrZW5kSW1w
bC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJJbmRleEJhY2tlbmRJ
bXBsLmNwcAppbmRleCA5MWVlOGYwLi43NGFiNTkwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJJbmRleEJhY2tlbmRJbXBsLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJJbmRleEJhY2tlbmRJbXBsLmNwcApAQCAtMjM3
LDIyICsyMzcsMjIgQEAgdm9pZCBJREJJbmRleEJhY2tlbmRJbXBsOjpJbmRleFJlZmVyZW5jZWRW
YWx1ZVJldHJpZXZhbE9wZXJhdGlvbjo6cGVyZm9ybShJREJUcmEKICAgICAgICAgcmV0dXJuOwog
ICAgIH0KIAotICAgIFN0cmluZyB2YWx1ZTsKKyAgICBWZWN0b3I8dWludDhfdD4gdmFsdWU7CiAg
ICAgb2sgPSBtX2luZGV4LT5iYWNraW5nU3RvcmUoKS0+Z2V0UmVjb3JkKHRyYW5zYWN0aW9uLT5i
YWNraW5nU3RvcmVUcmFuc2FjdGlvbigpLCBtX2luZGV4LT5kYXRhYmFzZUlkKCksIG1faW5kZXgt
Pm1fb2JqZWN0U3RvcmVCYWNrZW5kLT5pZCgpLCAqcHJpbWFyeUtleSwgdmFsdWUpOwogICAgIGlm
ICghb2spIHsKICAgICAgICAgbV9jYWxsYmFja3MtPm9uRXJyb3IoSURCRGF0YWJhc2VFcnJvcjo6
Y3JlYXRlKElEQkRhdGFiYXNlRXhjZXB0aW9uOjpVbmtub3duRXJyb3IsICJJbnRlcm5hbCBlcnJv
ciBpbiBnZXRSZWNvcmQuIikpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgaWYgKHZh
bHVlLmlzTnVsbCgpKSB7CisgICAgaWYgKHZhbHVlLmlzRW1wdHkoKSkgewogICAgICAgICBtX2Nh
bGxiYWNrcy0+b25TdWNjZXNzKCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgaWYgKG1f
aW5kZXgtPm1fb2JqZWN0U3RvcmVCYWNrZW5kLT5hdXRvSW5jcmVtZW50KCkgJiYgIW1faW5kZXgt
Pm1fb2JqZWN0U3RvcmVCYWNrZW5kLT5rZXlQYXRoKCkuaXNOdWxsKCkpIHsKLSAgICAgICAgbV9j
YWxsYmFja3MtPm9uU3VjY2VzcyhTZXJpYWxpemVkU2NyaXB0VmFsdWU6OmNyZWF0ZUZyb21XaXJl
KHZhbHVlKSwgcHJpbWFyeUtleSwgbV9pbmRleC0+bV9vYmplY3RTdG9yZUJhY2tlbmQtPmtleVBh
dGgoKSk7CisgICAgICAgIG1fY2FsbGJhY2tzLT5vblN1Y2Nlc3MoU2VyaWFsaXplZFNjcmlwdFZh
bHVlOjpjcmVhdGVGcm9tV2lyZUJ5dGVzKHZhbHVlKSwgcHJpbWFyeUtleSwgbV9pbmRleC0+bV9v
YmplY3RTdG9yZUJhY2tlbmQtPmtleVBhdGgoKSk7CiAgICAgICAgIHJldHVybjsKICAgICB9Ci0g
ICAgbV9jYWxsYmFja3MtPm9uU3VjY2VzcyhTZXJpYWxpemVkU2NyaXB0VmFsdWU6OmNyZWF0ZUZy
b21XaXJlKHZhbHVlKSk7CisgICAgbV9jYWxsYmFja3MtPm9uU3VjY2VzcyhTZXJpYWxpemVkU2Ny
aXB0VmFsdWU6OmNyZWF0ZUZyb21XaXJlQnl0ZXModmFsdWUpKTsKIH0KIAogCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJPYmplY3RTdG9yZUJhY2tlbmRJ
bXBsLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQk9iamVjdFN0b3Jl
QmFja2VuZEltcGwuY3BwCmluZGV4IDBjMjhiMTUuLjE4ZDI2Y2YgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQk9iamVjdFN0b3JlQmFja2VuZEltcGwuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQk9iamVjdFN0b3JlQmFj
a2VuZEltcGwuY3BwCkBAIC0zMDgsMjIgKzMwOCwyMiBAQCB2b2lkIElEQk9iamVjdFN0b3JlQmFj
a2VuZEltcGw6Ok9iamVjdFN0b3JlUmV0cmlldmFsT3BlcmF0aW9uOjpwZXJmb3JtKElEQlRyYW5z
YQogICAgICAgICBrZXkgPSBiYWNraW5nU3RvcmVDdXJzb3ItPmtleSgpOwogICAgIH0KIAotICAg
IFN0cmluZyB3aXJlRGF0YTsKKyAgICBWZWN0b3I8dWludDhfdD4gd2lyZURhdGE7CiAgICAgYm9v
bCBvayA9IG1fb2JqZWN0U3RvcmUtPmJhY2tpbmdTdG9yZSgpLT5nZXRSZWNvcmQodHJhbnNhY3Rp
b24tPmJhY2tpbmdTdG9yZVRyYW5zYWN0aW9uKCksIG1fb2JqZWN0U3RvcmUtPmRhdGFiYXNlSWQo
KSwgbV9vYmplY3RTdG9yZS0+aWQoKSwgKmtleSwgd2lyZURhdGEpOwogICAgIGlmICghb2spIHsK
ICAgICAgICAgbV9jYWxsYmFja3MtPm9uRXJyb3IoSURCRGF0YWJhc2VFcnJvcjo6Y3JlYXRlKElE
QkRhdGFiYXNlRXhjZXB0aW9uOjpVbmtub3duRXJyb3IsICJJbnRlcm5hbCBlcnJvciBpbiBnZXRS
ZWNvcmQuIikpOwogICAgICAgICByZXR1cm47CiAgICAgfQotICAgIGlmICh3aXJlRGF0YS5pc051
bGwoKSkgeworICAgIGlmICh3aXJlRGF0YS5pc0VtcHR5KCkpIHsKICAgICAgICAgbV9jYWxsYmFj
a3MtPm9uU3VjY2VzcygpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCiAgICAgaWYgKG1fb2Jq
ZWN0U3RvcmUtPmF1dG9JbmNyZW1lbnQoKSAmJiAhbV9vYmplY3RTdG9yZS0+a2V5UGF0aCgpLmlz
TnVsbCgpKSB7Ci0gICAgICAgIG1fY2FsbGJhY2tzLT5vblN1Y2Nlc3MoU2VyaWFsaXplZFNjcmlw
dFZhbHVlOjpjcmVhdGVGcm9tV2lyZSh3aXJlRGF0YSksIGtleSwgbV9vYmplY3RTdG9yZS0+a2V5
UGF0aCgpKTsKKyAgICAgICAgbV9jYWxsYmFja3MtPm9uU3VjY2VzcyhTZXJpYWxpemVkU2NyaXB0
VmFsdWU6OmNyZWF0ZUZyb21XaXJlQnl0ZXMod2lyZURhdGEpLCBrZXksIG1fb2JqZWN0U3RvcmUt
PmtleVBhdGgoKSk7CiAgICAgICAgIHJldHVybjsKICAgICB9Ci0gICAgbV9jYWxsYmFja3MtPm9u
U3VjY2VzcyhTZXJpYWxpemVkU2NyaXB0VmFsdWU6OmNyZWF0ZUZyb21XaXJlKHdpcmVEYXRhKSk7
CisgICAgbV9jYWxsYmFja3MtPm9uU3VjY2VzcyhTZXJpYWxpemVkU2NyaXB0VmFsdWU6OmNyZWF0
ZUZyb21XaXJlQnl0ZXMod2lyZURhdGEpKTsKIH0KIAogdm9pZCBJREJPYmplY3RTdG9yZUJhY2tl
bmRJbXBsOjpwdXQoUGFzc1JlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IHZhbHVlLCBQYXNz
UmVmUHRyPElEQktleT4ga2V5LCBQdXRNb2RlIHB1dE1vZGUsIFBhc3NSZWZQdHI8SURCQ2FsbGJh
Y2tzPiBwcnBDYWxsYmFja3MsIElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZSogdHJhbnNh
Y3Rpb25QdHIsIGNvbnN0IFZlY3RvcjxpbnQ2NF90PiYgaW5kZXhJZHMsIGNvbnN0IFZlY3RvcjxJ
bmRleEtleXM+JiBpbmRleEtleXMpCkBAIC01NjAsNyArNTYwLDcgQEAgdm9pZCBJREJPYmplY3RT
dG9yZUJhY2tlbmRJbXBsOjpPYmplY3RTdG9yZVN0b3JhZ2VPcGVyYXRpb246OnBlcmZvcm0oSURC
VHJhbnNhY3QKIAogICAgIC8vIEJlZm9yZSB0aGlzIHBvaW50LCBkb24ndCBkbyBhbnkgbXV0YXRp
b24uICBBZnRlciB0aGlzIHBvaW50LCByb2xsYmFjayB0aGUgdHJhbnNhY3Rpb24gaW4gY2FzZSBv
ZiBlcnJvci4KIAotICAgIGJhY2tpbmdTdG9yZVN1Y2Nlc3MgPSBtX29iamVjdFN0b3JlLT5iYWNr
aW5nU3RvcmUoKS0+cHV0UmVjb3JkKHRyYW5zYWN0aW9uLT5iYWNraW5nU3RvcmVUcmFuc2FjdGlv
bigpLCBtX29iamVjdFN0b3JlLT5kYXRhYmFzZUlkKCksIG1fb2JqZWN0U3RvcmUtPmlkKCksICpt
X2tleSwgbV92YWx1ZS0+dG9XaXJlU3RyaW5nKCksICZyZWNvcmRJZGVudGlmaWVyKTsKKyAgICBi
YWNraW5nU3RvcmVTdWNjZXNzID0gbV9vYmplY3RTdG9yZS0+YmFja2luZ1N0b3JlKCktPnB1dFJl
Y29yZCh0cmFuc2FjdGlvbi0+YmFja2luZ1N0b3JlVHJhbnNhY3Rpb24oKSwgbV9vYmplY3RTdG9y
ZS0+ZGF0YWJhc2VJZCgpLCBtX29iamVjdFN0b3JlLT5pZCgpLCAqbV9rZXksIG1fdmFsdWUtPnRv
V2lyZUJ5dGVzKCksICZyZWNvcmRJZGVudGlmaWVyKTsKICAgICBpZiAoIWJhY2tpbmdTdG9yZVN1
Y2Nlc3MpIHsKICAgICAgICAgbV9jYWxsYmFja3MtPm9uRXJyb3IoSURCRGF0YWJhc2VFcnJvcjo6
Y3JlYXRlKElEQkRhdGFiYXNlRXhjZXB0aW9uOjpVbmtub3duRXJyb3IsICJJbnRlcm5hbCBlcnJv
cjogYmFja2luZyBzdG9yZSBlcnJvciBwZXJmb3JtaW5nIHB1dC9hZGQuIikpOwogICAgICAgICBy
ZXR1cm47CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9TZXJpYWxpemVk
U2NyaXB0VmFsdWUuY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvU2VyaWFsaXplZFNj
cmlwdFZhbHVlLmNwcAppbmRleCA4YTAyODQ2Li42MDZkMjgwIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9qcy9TZXJpYWxpemVkU2NyaXB0VmFsdWUuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1NlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5jcHAKQEAgLTEwMDMs
MTggKzEwMDMsNiBAQCB0eXBlZGVmIFZlY3RvcjxXVEY6OkFycmF5QnVmZmVyQ29udGVudHM+IEFy
cmF5QnVmZmVyQ29udGVudHNBcnJheTsKIAogY2xhc3MgQ2xvbmVEZXNlcmlhbGl6ZXIgOiBDbG9u
ZUJhc2UgewogcHVibGljOgotICAgIHN0YXRpYyBTdHJpbmcgdG9XaXJlU3RyaW5nKGNvbnN0IFZl
Y3Rvcjx1bnNpZ25lZCBjaGFyPiYgdmFsdWUpCi0gICAgewotICAgICAgICBjb25zdCB1aW50OF90
KiBzdGFydCA9IHZhbHVlLmJlZ2luKCk7Ci0gICAgICAgIGNvbnN0IHVpbnQ4X3QqIGVuZCA9IHZh
bHVlLmVuZCgpOwotICAgICAgICBjb25zdCB1aW50MzJfdCBsZW5ndGggPSB2YWx1ZS5zaXplKCkg
LyBzaXplb2YoVUNoYXIpOwotICAgICAgICBTdHJpbmcgc3RyOwotICAgICAgICBpZiAoIUNsb25l
RGVzZXJpYWxpemVyOjpyZWFkU3RyaW5nKHN0YXJ0LCBlbmQsIHN0ciwgbGVuZ3RoKSkKLSAgICAg
ICAgICAgIHJldHVybiBTdHJpbmcoKTsKLQotICAgICAgICByZXR1cm4gU3RyaW5nKHN0ci5pbXBs
KCkpOwotICAgIH0KLQogICAgIHN0YXRpYyBTdHJpbmcgZGVzZXJpYWxpemVTdHJpbmcoY29uc3Qg
VmVjdG9yPHVpbnQ4X3Q+JiBidWZmZXIpCiAgICAgewogICAgICAgICBjb25zdCB1aW50OF90KiBw
dHIgPSBidWZmZXIuYmVnaW4oKTsKQEAgLTE3NTAsNiArMTczOCwxMSBAQCBTZXJpYWxpemVkU2Ny
aXB0VmFsdWU6On5TZXJpYWxpemVkU2NyaXB0VmFsdWUoKQogewogfQogCitTZXJpYWxpemVkU2Ny
aXB0VmFsdWU6OlNlcmlhbGl6ZWRTY3JpcHRWYWx1ZShjb25zdCBWZWN0b3I8dWludDhfdD4mIGJ1
ZmZlcikKKyAgICA6IG1fZGF0YShidWZmZXIpCit7Cit9CisKIFNlcmlhbGl6ZWRTY3JpcHRWYWx1
ZTo6U2VyaWFsaXplZFNjcmlwdFZhbHVlKFZlY3Rvcjx1aW50OF90PiYgYnVmZmVyKQogewogICAg
IG1fZGF0YS5zd2FwKGJ1ZmZlcik7CkBAIC0xODUzLDE5ICsxODQ2LDYgQEAgSlNWYWx1ZSBTZXJp
YWxpemVkU2NyaXB0VmFsdWU6OmRlc2VyaWFsaXplKEpTQzo6RXhlY1N0YXRlKiBleGVjLCBKU0M6
OkpTR2xvYmFsT2IKIH0KICNlbmRpZgogCi1TdHJpbmcgU2VyaWFsaXplZFNjcmlwdFZhbHVlOjp0
b1dpcmVTdHJpbmcoKSBjb25zdAotewotICAgIHJldHVybiBDbG9uZURlc2VyaWFsaXplcjo6dG9X
aXJlU3RyaW5nKG1fZGF0YSk7Ci19Ci0KLVBhc3NSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVl
PiBTZXJpYWxpemVkU2NyaXB0VmFsdWU6OmNyZWF0ZUZyb21XaXJlKGNvbnN0IFN0cmluZyYgdmFs
dWUpCi17Ci0gICAgVmVjdG9yPHVpbnQ4X3Q+IGJ1ZmZlcjsKLSAgICBpZiAoIXdyaXRlTGl0dGxl
RW5kaWFuKGJ1ZmZlciwgdmFsdWUuaW1wbCgpLT5jaGFyYWN0ZXJzKCksIHZhbHVlLmxlbmd0aCgp
KSkKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBTZXJpYWxpemVk
U2NyaXB0VmFsdWUoYnVmZmVyKSk7Ci19Ci0KIFBhc3NSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZh
bHVlPiBTZXJpYWxpemVkU2NyaXB0VmFsdWU6OmNyZWF0ZShKU0NvbnRleHRSZWYgb3JpZ2luQ29u
dGV4dCwgSlNWYWx1ZVJlZiBhcGlWYWx1ZSwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTWVzc2FnZVBvcnRBcnJheSogbWVz
c2FnZVBvcnRzLCBBcnJheUJ1ZmZlckFycmF5KiBhcnJheUJ1ZmZlcnMsCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSlNWYWx1
ZVJlZiogZXhjZXB0aW9uKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMv
U2VyaWFsaXplZFNjcmlwdFZhbHVlLmggYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9TZXJp
YWxpemVkU2NyaXB0VmFsdWUuaAppbmRleCA4MDkxODUzLi5hNjg3MTdkIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9TZXJpYWxpemVkU2NyaXB0VmFsdWUuaAorKysgYi9T
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9TZXJpYWxpemVkU2NyaXB0VmFsdWUuaApAQCAtMTA0
LDggKzEwNCwxMSBAQCBwdWJsaWM6CiAgICAgSlNDOjpKU1ZhbHVlIGRlc2VyaWFsaXplKEpTQzo6
RXhlY1N0YXRlKiwgSlNDOjpKU0dsb2JhbE9iamVjdCopOwogI2VuZGlmCiAKLSAgICBzdGF0aWMg
UGFzc1JlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IGNyZWF0ZUZyb21XaXJlKGNvbnN0IFN0
cmluZyYgZGF0YSk7Ci0gICAgU3RyaW5nIHRvV2lyZVN0cmluZygpIGNvbnN0OworICAgIHN0YXRp
YyBQYXNzUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4gY3JlYXRlRnJvbVdpcmVCeXRlcyhj
b25zdCBWZWN0b3I8dWludDhfdD4mIGRhdGEpCisgICAgeworICAgICAgICByZXR1cm4gYWRvcHRS
ZWYobmV3IFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZShkYXRhKSk7CisgICAgfQorICAgIGNvbnN0IFZl
Y3Rvcjx1aW50OF90PiYgdG9XaXJlQnl0ZXMoKSBjb25zdCB7IHJldHVybiBtX2RhdGE7IH0KIAog
ICAgIH5TZXJpYWxpemVkU2NyaXB0VmFsdWUoKTsKIApAQCAtMTE1LDYgKzExOCw3IEBAIHByaXZh
dGU6CiAgICAgc3RhdGljIGJvb2wgc2VyaWFsaXphdGlvbkRpZENvbXBsZXRlU3VjY2Vzc2Z1bGx5
KFNlcmlhbGl6YXRpb25SZXR1cm5Db2RlKTsKICAgICBzdGF0aWMgUGFzc093blB0cjxBcnJheUJ1
ZmZlckNvbnRlbnRzQXJyYXk+IHRyYW5zZmVyQXJyYXlCdWZmZXJzKEFycmF5QnVmZmVyQXJyYXkm
LCBTZXJpYWxpemF0aW9uUmV0dXJuQ29kZSYpOwogCisgICAgU2VyaWFsaXplZFNjcmlwdFZhbHVl
KGNvbnN0IFZlY3Rvcjx1bnNpZ25lZCBjaGFyPiYpOwogICAgIFNlcmlhbGl6ZWRTY3JpcHRWYWx1
ZShWZWN0b3I8dW5zaWduZWQgY2hhcj4mKTsKICAgICBTZXJpYWxpemVkU2NyaXB0VmFsdWUoVmVj
dG9yPHVuc2lnbmVkIGNoYXI+JiwgVmVjdG9yPFN0cmluZz4mIGJsb2JVUkxzKTsKICAgICBTZXJp
YWxpemVkU2NyaXB0VmFsdWUoVmVjdG9yPHVuc2lnbmVkIGNoYXI+JiwgVmVjdG9yPFN0cmluZz4m
IGJsb2JVUkxzLCBQYXNzT3duUHRyPEFycmF5QnVmZmVyQ29udGVudHNBcnJheT4pOwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvU2VyaWFsaXplZFNjcmlwdFZhbHVlLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1NlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5jcHAK
aW5kZXggOTFmOGVmMC4uODk2NDFlNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvdjgvU2VyaWFsaXplZFNjcmlwdFZhbHVlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy92OC9TZXJpYWxpemVkU2NyaXB0VmFsdWUuY3BwCkBAIC02NCw2ICs2NCw3IEBACiAjaW5j
bHVkZSA8d3RmL0FycmF5QnVmZmVyLmg+CiAjaW5jbHVkZSA8d3RmL0FycmF5QnVmZmVyVmlldy5o
PgogI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+CisjaW5jbHVkZSA8d3RmL0J5dGVPcmRlci5o
PgogI2luY2x1ZGUgPHd0Zi9GbG9hdDMyQXJyYXkuaD4KICNpbmNsdWRlIDx3dGYvRmxvYXQ2NEFy
cmF5Lmg+CiAjaW5jbHVkZSA8d3RmL0ludDE2QXJyYXkuaD4KQEAgLTIyNDksNiArMjI1MCwyMCBA
QCBQYXNzUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4gU2VyaWFsaXplZFNjcmlwdFZhbHVl
OjpjcmVhdGVGcm9tV2lyZShjb25zdCBTdAogICAgIHJldHVybiBhZG9wdFJlZihuZXcgU2VyaWFs
aXplZFNjcmlwdFZhbHVlKGRhdGEpKTsKIH0KIAorUGFzc1JlZlB0cjxTZXJpYWxpemVkU2NyaXB0
VmFsdWU+IFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTo6Y3JlYXRlRnJvbVdpcmVCeXRlcyhjb25zdCBW
ZWN0b3I8dWludDhfdD4mIGRhdGEpCit7CisgICAgLy8gRGVjb2RlIHdpcmUgZGF0YSBmcm9tIGJp
ZyBlbmRpYW4gdG8gaG9zdCBieXRlIG9yZGVyLgorICAgIEFTU0VSVCghKGRhdGEuc2l6ZSgpICUg
c2l6ZW9mKFVDaGFyKSkpOworICAgIHNpemVfdCBsZW5ndGggPSBkYXRhLnNpemUoKSAvIHNpemVv
ZihVQ2hhcik7CisgICAgVmVjdG9yPFVDaGFyPiBidWZmZXIobGVuZ3RoKTsKKyAgICBjb25zdCBV
Q2hhciogc3JjID0gcmVpbnRlcnByZXRfY2FzdDxjb25zdCBVQ2hhcio+KGRhdGEuZGF0YSgpKTsK
KyAgICBVQ2hhciogZHN0ID0gYnVmZmVyLmRhdGEoKTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsg
aSA8IGxlbmd0aDsgaSsrKQorICAgICAgICBkc3RbaV0gPSBudG9ocyhzcmNbaV0pOworCisgICAg
cmV0dXJuIGNyZWF0ZUZyb21XaXJlKFN0cmluZzo6YWRvcHQoYnVmZmVyKSk7Cit9CisKIFBhc3NS
ZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiBTZXJpYWxpemVkU2NyaXB0VmFsdWU6OmNyZWF0
ZShjb25zdCBTdHJpbmcmIGRhdGEsIHY4OjpJc29sYXRlKiBpc29sYXRlKQogewogICAgIFdyaXRl
ciB3cml0ZXIoaXNvbGF0ZSk7CkBAIC0yMjk3LDYgKzIzMTIsMjAgQEAgUGFzc1JlZlB0cjxTZXJp
YWxpemVkU2NyaXB0VmFsdWU+IFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTo6bnVtYmVyVmFsdWUoZG91
YmxlIHZhbHUKICAgICByZXR1cm4gYWRvcHRSZWYobmV3IFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZSh3
aXJlRGF0YSkpOwogfQogCitWZWN0b3I8dWludDhfdD4gU2VyaWFsaXplZFNjcmlwdFZhbHVlOjp0
b1dpcmVCeXRlcygpIGNvbnN0Cit7CisgICAgLy8gQ29udmVydCBzZXJpYWxpemVkIHN0cmluZyB0
byBiaWcgZW5kaWFuIHdpcmUgZGF0YS4KKyAgICBzaXplX3QgbGVuZ3RoID0gbV9kYXRhLmxlbmd0
aCgpOworICAgIFZlY3Rvcjx1aW50OF90PiByZXN1bHQobGVuZ3RoICogc2l6ZW9mKFVDaGFyKSk7
CisKKyAgICBjb25zdCBVQ2hhciogc3JjID0gbV9kYXRhLmNoYXJhY3RlcnMoKTsKKyAgICBVQ2hh
ciogZHN0ID0gcmVpbnRlcnByZXRfY2FzdDxVQ2hhcio+KHJlc3VsdC5kYXRhKCkpOworICAgIGZv
ciAoc2l6ZV90IGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspCisgICAgICAgIGRzdFtpXSA9IGh0b25z
KHNyY1tpXSk7CisKKyAgICByZXR1cm4gcmVzdWx0OworfQorCiBQYXNzUmVmUHRyPFNlcmlhbGl6
ZWRTY3JpcHRWYWx1ZT4gU2VyaWFsaXplZFNjcmlwdFZhbHVlOjpyZWxlYXNlKCkKIHsKICAgICBS
ZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiByZXN1bHQgPSBhZG9wdFJlZihuZXcgU2VyaWFs
aXplZFNjcmlwdFZhbHVlKG1fZGF0YSkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvdjgvU2VyaWFsaXplZFNjcmlwdFZhbHVlLmggYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy92OC9TZXJpYWxpemVkU2NyaXB0VmFsdWUuaAppbmRleCA2OWVhOGQ4Li5kMjc3OThmIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9TZXJpYWxpemVkU2NyaXB0VmFsdWUu
aAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9TZXJpYWxpemVkU2NyaXB0VmFsdWUu
aApAQCAtNTcsNiArNTcsNyBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCYgZGlkVGhyb3csIHY4OjpJc29sYXRlKiA9IDAp
OwogICAgIHN0YXRpYyBQYXNzUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4gY3JlYXRlKHY4
OjpIYW5kbGU8djg6OlZhbHVlPiwgdjg6Oklzb2xhdGUqID0gMCk7CiAgICAgc3RhdGljIFBhc3NS
ZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiBjcmVhdGVGcm9tV2lyZShjb25zdCBTdHJpbmcm
IGRhdGEpOworICAgIHN0YXRpYyBQYXNzUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4gY3Jl
YXRlRnJvbVdpcmVCeXRlcyhjb25zdCBWZWN0b3I8dWludDhfdD4mIGRhdGEpOwogICAgIHN0YXRp
YyBQYXNzUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4gY3JlYXRlKGNvbnN0IFN0cmluZyYg
ZGF0YSwgdjg6Oklzb2xhdGUqID0gMCk7CiAgICAgc3RhdGljIFBhc3NSZWZQdHI8U2VyaWFsaXpl
ZFNjcmlwdFZhbHVlPiBjcmVhdGUoKTsKIApAQCAtNzAsNiArNzEsNyBAQCBwdWJsaWM6CiAgICAg
UGFzc1JlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IHJlbGVhc2UoKTsKIAogICAgIFN0cmlu
ZyB0b1dpcmVTdHJpbmcoKSBjb25zdCB7IHJldHVybiBtX2RhdGE7IH0KKyAgICBWZWN0b3I8dWlu
dDhfdD4gdG9XaXJlQnl0ZXMoKSBjb25zdDsKIAogICAgIC8vIERlc2VyaWFsaXplcyB0aGUgdmFs
dWUgKGluIHRoZSBjdXJyZW50IGNvbnRleHQpLiBSZXR1cm5zIGEgbnVsbCB2YWx1ZSBpbgogICAg
IC8vIGNhc2Ugb2YgZmFpbHVyZS4KLS0gCjEuNy45LjUKCg==
</data>

          </attachment>
      

    </bug>

</bugzilla>