<?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>42976</bug_id>
          
          <creation_ts>2010-07-26 09:01:24 -0700</creation_ts>
          <short_desc>Implement IDBKeyPath parser.</short_desc>
          <delta_ts>2010-08-16 05:45:23 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Other</rep_platform>
          <op_sys>OS X 10.5</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>43276</blocked>
          <everconfirmed>0</everconfirmed>
          <reporter name="Marcus Bulach">bulach</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>andreip</cc>
    
    <cc>bulach</cc>
    
    <cc>cevans</cc>
    
    <cc>jorlow</cc>
    
    <cc>skylined</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>256059</commentid>
    <comment_count>0</comment_count>
    <who name="Marcus Bulach">bulach</who>
    <bug_when>2010-07-26 09:01:24 -0700</bug_when>
    <thetext>Implement IDBKeyPath parser.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>256062</commentid>
    <comment_count>1</comment_count>
      <attachid>62579</attachid>
    <who name="Marcus Bulach">bulach</who>
    <bug_when>2010-07-26 09:04:14 -0700</bug_when>
    <thetext>Created attachment 62579
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>256069</commentid>
    <comment_count>2</comment_count>
      <attachid>62579</attachid>
    <who name="Jeremy Orlow">jorlow</who>
    <bug_when>2010-07-26 09:39:10 -0700</bug_when>
    <thetext>Comment on attachment 62579
Patch

WebCore/storage/IndexedDatabaseRequest.idl:36
 +          // FIXME: IDBKeyPath is public only to allow testing.
FIXMEs should have an action...i.e. delete as soon as we can because it&apos;s only here for testing...fix elsewhere.

LayoutTests/storage/indexeddb/idb-keypath-expected.txt:17
 +  indexedDB.makeKeyPath(&apos;a[34][20].foo[2].bar&apos;)
maybe insert a newline via &quot;debug(&apos;&apos;);&quot; between test cases? (here and elsewhere)



LayoutTests/storage/indexeddb/script-tests/idb-keypath.js:9
 +      for (;keyPath.hasNext(); keyPath.next(), ++i) {
space before keyPath...but why not put the var i = 0 in there?



WebCore/storage/IDBKeyPath.cpp:50
 +      Token token;
What does this do?

WebCore/storage/IDBKeyPath.cpp:63
 +  void IDBKeyPath::next()
I guess this next interface stuff makes sense in terms of easily testing (without building a lot of infrastructure that&apos;s just going to go away) but for the real implementation, I don&apos;t see why we don&apos;t just give a pointer to the raw array + size check.  This stuff seems overly complicated.

WebCore/storage/IDBKeyPath.cpp:173
 +      return (c &gt;= &apos;a&apos; &amp;&amp; c &lt;= &apos;z&apos;) || (c &gt;= &apos;A&apos; &amp;&amp; c &lt;= &apos;Z&apos;);
this is a subset of javascript identifiers




Do we really want to support array syntax within keyRanges?  Also, what do we do when we see malformed keyPaths?  Right now it seems we try our best to parse them, but I don&apos;t think this is the right behavior.  I think we should raise an exception on parse errors.  (The create function should return 0 and the caller would raise.)  All of this really needs to be specced out tho.

Haven&apos;t looked at the parser or tokenizer in detail yet.  To be honest, it feels a little heavyweight for our needs, but I&apos;m guessing it&apos;ll pay off in the long run.  We&apos;ll probably want multiple eyes looking at it though...since it&apos;d be one of the easier ways to introduce security issues, I&apos;d think.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>256153</commentid>
    <comment_count>3</comment_count>
      <attachid>62593</attachid>
    <who name="Marcus Bulach">bulach</who>
    <bug_when>2010-07-26 12:08:09 -0700</bug_when>
    <thetext>Created attachment 62593
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>256171</commentid>
    <comment_count>4</comment_count>
    <who name="Marcus Bulach">bulach</who>
    <bug_when>2010-07-26 12:33:09 -0700</bug_when>
    <thetext>thanks for the comments so far, Jeremy!

brief background / reasoning:
1. not sure whether or not we&apos;ll support arrays, but it seems that if we support named properties, we should support indexed values as well.
2. the reason for a separate class is only to expose for tests, since we have no way to exercise this code (yet).
3. just passing the array with a known struct will be fine, the API is mostly exposed for tests. however, the basic concept would still be the same: I think it&apos;d be nice to have the &quot;SerializedScriptValueExtractor&quot; just traverse some kind of structure: get a name or index, de-serialize, repeat.. having this separation would allow us to decouple the the extractor from the parser.

(In reply to comment #2)
&gt; (From update of attachment 62579 [details])
&gt; WebCore/storage/IndexedDatabaseRequest.idl:36
&gt;  +          // FIXME: IDBKeyPath is public only to allow testing.
&gt; FIXMEs should have an action...i.e. delete as soon as we can because it&apos;s only here for testing...fix elsewhere.
Done.

&gt; 
&gt; LayoutTests/storage/indexeddb/idb-keypath-expected.txt:17
&gt;  +  indexedDB.makeKeyPath(&apos;a[34][20].foo[2].bar&apos;)
&gt; maybe insert a newline via &quot;debug(&apos;&apos;);&quot; between test cases? (here and elsewhere)
Done in the &quot;check&quot; function above.

&gt; 
&gt; 
&gt; 
&gt; LayoutTests/storage/indexeddb/script-tests/idb-keypath.js:9
&gt;  +      for (;keyPath.hasNext(); keyPath.next(), ++i) {
&gt; space before keyPath...but why not put the var i = 0 in there?
done.

&gt; 
&gt; 
&gt; 
&gt; WebCore/storage/IDBKeyPath.cpp:50
&gt;  +      Token token;
&gt; What does this do?
duh, leftover. removed.

&gt; 
&gt; WebCore/storage/IDBKeyPath.cpp:63
&gt;  +  void IDBKeyPath::next()
&gt; I guess this next interface stuff makes sense in terms of easily testing (without building a lot of infrastructure that&apos;s just going to go away) but for the real implementation, I don&apos;t see why we don&apos;t just give a pointer to the raw array + size check.  This stuff seems overly complicated.

Agreed. See above.

&gt; 
&gt; WebCore/storage/IDBKeyPath.cpp:173
&gt;  +      return (c &gt;= &apos;a&apos; &amp;&amp; c &lt;= &apos;z&apos;) || (c &gt;= &apos;A&apos; &amp;&amp; c &lt;= &apos;Z&apos;);
&gt; this is a subset of javascript identifiers
Not yet done, I&apos;ll try to find the authoritative list of identifiers.


&gt; 
&gt; 
&gt; 
&gt; 
&gt; Do we really want to support array syntax within keyRanges?  Also, what do we do when we see malformed keyPaths?  Right now it seems we try our best to parse them, but I don&apos;t think this is the right behavior.  I think we should raise an exception on parse errors.  (The create function should return 0 and the caller would raise.)  All of this really needs to be specced out tho.

Indeed. The keyPath is not yet fully specced, so I&apos;m flying a bit blind here.
However, I think the main purpose of decoupling the &quot;SerializedScriptValueExtractor&quot; from the &quot;KeyPathParser&quot; is a &quot;Good Thing&quot;, and will allow us to move to a point where the &quot;Extractor&quot;s (both JSC and V8) don&apos;t care about what a KeyPath is, as long as it provides an iterator of property names / indexes.
thoughts?

ahn, I also exposed a &quot;parserError&quot;, the caller can do whatever we decide (either throw an exception, ignore, use what was able to parse, ...)

&gt; 
&gt; Haven&apos;t looked at the parser or tokenizer in detail yet.  To be honest, it feels a little heavyweight for our needs, but I&apos;m guessing it&apos;ll pay off in the long run.  We&apos;ll probably want multiple eyes looking at it though...since it&apos;d be one of the easier ways to introduce security issues, I&apos;d think.

as mentioned somewhere else, there are two parts that worry me:
1. parsing the keypath (this bit).
2. extracting the value of a serializedscriptvalue..

both will work on unsafe, external data, and the more eyes (and tests!) we get the better.
feel free to add anyone else to this bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>256544</commentid>
    <comment_count>5</comment_count>
    <who name="Jeremy Orlow">jorlow</who>
    <bug_when>2010-07-27 06:32:05 -0700</bug_when>
    <thetext>(In reply to comment #4)
&gt; thanks for the comments so far, Jeremy!
&gt; 
&gt; brief background / reasoning:
&gt; 1. not sure whether or not we&apos;ll support arrays, but it seems that if we support named properties, we should support indexed values as well.
&gt; 2. the reason for a separate class is only to expose for tests, since we have no way to exercise this code (yet).
&gt; 3. just passing the array with a known struct will be fine, the API is mostly exposed for tests. however, the basic concept would still be the same: I think it&apos;d be nice to have the &quot;SerializedScriptValueExtractor&quot; just traverse some kind of structure: get a name or index, de-serialize, repeat.. having this separation would allow us to decouple the the extractor from the parser.

I agree they should be separate.  But is there any possible way we can make the &quot;deserialize&quot; code within SerializedScriptValue use the same extractor?

&gt; (In reply to comment #2)
&gt; &gt; (From update of attachment 62579 [details] [details])
&gt; &gt; WebCore/storage/IndexedDatabaseRequest.idl:36
&gt; &gt;  +          // FIXME: IDBKeyPath is public only to allow testing.
&gt; &gt; FIXMEs should have an action...i.e. delete as soon as we can because it&apos;s only here for testing...fix elsewhere.
&gt; Done.
&gt; 
&gt; &gt; 
&gt; &gt; LayoutTests/storage/indexeddb/idb-keypath-expected.txt:17
&gt; &gt;  +  indexedDB.makeKeyPath(&apos;a[34][20].foo[2].bar&apos;)
&gt; &gt; maybe insert a newline via &quot;debug(&apos;&apos;);&quot; between test cases? (here and elsewhere)
&gt; Done in the &quot;check&quot; function above.
&gt; 
&gt; &gt; 
&gt; &gt; 
&gt; &gt; 
&gt; &gt; LayoutTests/storage/indexeddb/script-tests/idb-keypath.js:9
&gt; &gt;  +      for (;keyPath.hasNext(); keyPath.next(), ++i) {
&gt; &gt; space before keyPath...but why not put the var i = 0 in there?
&gt; done.
&gt; 
&gt; &gt; 
&gt; &gt; 
&gt; &gt; 
&gt; &gt; WebCore/storage/IDBKeyPath.cpp:50
&gt; &gt;  +      Token token;
&gt; &gt; What does this do?
&gt; duh, leftover. removed.
&gt; 
&gt; &gt; 
&gt; &gt; WebCore/storage/IDBKeyPath.cpp:63
&gt; &gt;  +  void IDBKeyPath::next()
&gt; &gt; I guess this next interface stuff makes sense in terms of easily testing (without building a lot of infrastructure that&apos;s just going to go away) but for the real implementation, I don&apos;t see why we don&apos;t just give a pointer to the raw array + size check.  This stuff seems overly complicated.
&gt; 
&gt; Agreed. See above.
&gt; 
&gt; &gt; 
&gt; &gt; WebCore/storage/IDBKeyPath.cpp:173
&gt; &gt;  +      return (c &gt;= &apos;a&apos; &amp;&amp; c &lt;= &apos;z&apos;) || (c &gt;= &apos;A&apos; &amp;&amp; c &lt;= &apos;Z&apos;);
&gt; &gt; this is a subset of javascript identifiers
&gt; Not yet done, I&apos;ll try to find the authoritative list of identifiers.
&gt; 
&gt; 
&gt; &gt; 
&gt; &gt; 
&gt; &gt; 
&gt; &gt; 
&gt; &gt; Do we really want to support array syntax within keyRanges?  Also, what do we do when we see malformed keyPaths?  Right now it seems we try our best to parse them, but I don&apos;t think this is the right behavior.  I think we should raise an exception on parse errors.  (The create function should return 0 and the caller would raise.)  All of this really needs to be specced out tho.
&gt; 
&gt; Indeed. The keyPath is not yet fully specced, so I&apos;m flying a bit blind here.
&gt; However, I think the main purpose of decoupling the &quot;SerializedScriptValueExtractor&quot; from the &quot;KeyPathParser&quot; is a &quot;Good Thing&quot;, and will allow us to move to a point where the &quot;Extractor&quot;s (both JSC and V8) don&apos;t care about what a KeyPath is, as long as it provides an iterator of property names / indexes.
&gt; thoughts?
&gt; 
&gt; ahn, I also exposed a &quot;parserError&quot;, the caller can do whatever we decide (either throw an exception, ignore, use what was able to parse, ...)

But if there&apos;s an error, should we even return an object?
 
&gt; &gt; 
&gt; &gt; Haven&apos;t looked at the parser or tokenizer in detail yet.  To be honest, it feels a little heavyweight for our needs, but I&apos;m guessing it&apos;ll pay off in the long run.  We&apos;ll probably want multiple eyes looking at it though...since it&apos;d be one of the easier ways to introduce security issues, I&apos;d think.
&gt; 
&gt; as mentioned somewhere else, there are two parts that worry me:
&gt; 1. parsing the keypath (this bit).
&gt; 2. extracting the value of a serializedscriptvalue..
&gt; 
&gt; both will work on unsafe, external data, and the more eyes (and tests!) we get the better.
&gt; feel free to add anyone else to this bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>256576</commentid>
    <comment_count>6</comment_count>
    <who name="Andrei Popescu">andreip</who>
    <bug_when>2010-07-27 07:37:36 -0700</bug_when>
    <thetext>&gt; indexedDB.makeKeyPath(&apos;foo.bar.zoo&apos;)

Hmm, makeKeyPath() is not a method that exists in the spec. Rather than extending the indexedDB object with methods that are intended solely for testing, perhaps we should add a couple of methods to LayoutTestController instead?

&gt; module storage {
&gt;     // FIXME: IDBKeyPath is public only to allow testing, remove as soon as we have more comprehensive &gt; test infrastructure for IndexedDB. 
&gt;     interface [
&gt;         Conditional=INDEXED_DATABASE
&gt;     ] IDBKeyPath {

Oh, I see. Looking around, I cannot find any precedent for this. So maybe it&apos;s better to have a LTC method that returns true / false depending on whether the input is a valid keypath and was successfully parsed or not? I realize this doesn&apos;t allow as extensive testing, but I am not sure it&apos;s ok to add non-standard interfaces for testing, either.

&gt;168     else
&gt; 169        state = Start;

Here we are in an array, after the right bracket and we jump to the Start state, which allows an identifier. Does this mean that the following sequence will parse successfully?

identifier[100]anotherIdentifier

Looks great, otherwise!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>256618</commentid>
    <comment_count>7</comment_count>
      <attachid>62593</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2010-07-27 08:33:35 -0700</bug_when>
    <thetext>Comment on attachment 62593
Patch

WebCore/storage/IDBKeyPath.cpp:193
 +      return (c &gt;= &apos;a&apos; &amp;&amp; c &lt;= &apos;z&apos;) || (c &gt;= &apos;A&apos; &amp;&amp; c &lt;= &apos;Z&apos;);
Should we use the version of this function in ASCIITypes.h?

WebCore/storage/IDBKeyPath.cpp:203
 +          token.start = token.end = m_ptr;
Please don&apos;t use this form of assignment.

WebCore/storage/IDBKeyPath.cpp:206
 +      ASSERT(m_ptr &lt;= m_end);
Should this be m_ptr &lt; m_end ?

WebCore/storage/IDBKeyPath.cpp:237
 +      return TokError;
I&apos;d move this into the default case, but that&apos;s just a stylistic point.

WebCore/storage/IDBKeyPath.cpp:242
 +      const UChar* runStart = m_ptr;
I&apos;d just call that &quot;start&quot;

WebCore/storage/IDBKeyPath.cpp:249
 +      token.stringToken = builder.toString();
Why are we using a string builder here?  The append is outside the loop.

WebCore/storage/IDBKeyPath.cpp:265
 +          return TokError;
so 01 only tokenizes the &quot;0&quot; and leaves the 1.  I presume that&apos;s what you mean.

WebCore/storage/IDBKeyPath.cpp:271
 +      for (i = 0; i &lt; token.end - token.start; i++) {
Please break &quot;token.end - token.start&quot; out as a length variable since you&apos;re using it more than once.

WebCore/storage/IDBKeyPath.cpp:275
 +      buffer[i] = 0;
Yuck.  This seems error prone.  I can see that it&apos;s correct, but just computing the int directly seems way easier.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>256668</commentid>
    <comment_count>8</comment_count>
      <attachid>62703</attachid>
    <who name="Marcus Bulach">bulach</who>
    <bug_when>2010-07-27 09:59:12 -0700</bug_when>
    <thetext>Created attachment 62703
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>256684</commentid>
    <comment_count>9</comment_count>
    <who name="Marcus Bulach">bulach</who>
    <bug_when>2010-07-27 10:33:14 -0700</bug_when>
    <thetext>thanks everyone!
this is not yet final: I&apos;ll remove the IDLs and add support via TestShell / DRT wrappers soon, but would appreciate if you could take another look at the parser?

replies inline:

jorlow:
(In reply to comment #5)
&gt; (In reply to comment #4)
&gt; &gt; thanks for the comments so far, Jeremy!
&gt; &gt; 
&gt; &gt; brief background / reasoning:
&gt; &gt; 1. not sure whether or not we&apos;ll support arrays, but it seems that if we support named properties, we should support indexed values as well.
&gt; &gt; 2. the reason for a separate class is only to expose for tests, since we have no way to exercise this code (yet).
&gt; &gt; 3. just passing the array with a known struct will be fine, the API is mostly exposed for tests. however, the basic concept would still be the same: I think it&apos;d be nice to have the &quot;SerializedScriptValueExtractor&quot; just traverse some kind of structure: get a name or index, de-serialize, repeat.. having this separation would allow us to decouple the the extractor from the parser.
&gt; 
&gt; I agree they should be separate.  But is there any possible way we can make the &quot;deserialize&quot; code within SerializedScriptValue use the same extractor?

yep, this is going to be the second step.
either:
1. homogeneize the SerializedScriptValue interfaces to provide something like
&quot;getNamedPropertyValue()&quot; and &quot;getIndexedPropertyValue()&quot; so that the extractor doesn&apos;t care if it&apos;s talking to V8 or JSC.

2. pass this array (or iterator) of identifiers, and let the SerializedScriptValues deal with it.

I&apos;m not there yet to decide, but would like to go with (1) rather than (2)..

&gt; &gt; Indeed. The keyPath is not yet fully specced, so I&apos;m flying a bit blind here.
&gt; &gt; However, I think the main purpose of decoupling the &quot;SerializedScriptValueExtractor&quot; from the &quot;KeyPathParser&quot; is a &quot;Good Thing&quot;, and will allow us to move to a point where the &quot;Extractor&quot;s (both JSC and V8) don&apos;t care about what a KeyPath is, as long as it provides an iterator of property names / indexes.
&gt; &gt; thoughts?
&gt; &gt; 
&gt; &gt; ahn, I also exposed a &quot;parserError&quot;, the caller can do whatever we decide (either throw an exception, ignore, use what was able to parse, ...)
&gt; 
&gt; But if there&apos;s an error, should we even return an object?

this is pending decision on the spec.

also: I fixed the JS identifiers.

andreip:

(In reply to comment #6)
&gt; &gt; indexedDB.makeKeyPath(&apos;foo.bar.zoo&apos;)
&gt; 
&gt; Hmm, makeKeyPath() is not a method that exists in the spec. Rather than extending the indexedDB object with methods that are intended solely for testing, perhaps we should add a couple of methods to LayoutTestController instead?
  
yep, I&apos;ll do this shortly (need to create WebKit wrappers, etc..)
but meanwhile, could you please take another look at the parsing bits?
I hope the next patches will only add the wrappers and not touch the logic.

&gt; 
&gt; &gt; module storage {
&gt; &gt;     // FIXME: IDBKeyPath is public only to allow testing, remove as soon as we have more comprehensive &gt; test infrastructure for IndexedDB. 
&gt; &gt;     interface [
&gt; &gt;         Conditional=INDEXED_DATABASE
&gt; &gt;     ] IDBKeyPath {
&gt; 
&gt; Oh, I see. Looking around, I cannot find any precedent for this. So maybe it&apos;s better to have a LTC method that returns true / false depending on whether the input is a valid keypath and was successfully parsed or not? I realize this doesn&apos;t allow as extensive testing, but I am not sure it&apos;s ok to add non-standard interfaces for testing, either.
&gt; 
&gt; &gt;168     else
&gt; &gt; 169        state = Start;
&gt; 
&gt; Here we are in an array, after the right bracket and we jump to the Start state, which allows an identifier. Does this mean that the following sequence will parse successfully?
&gt; 
&gt; identifier[100]anotherIdentifier

good point, added test case.

&gt; 
&gt; Looks great, otherwise!
thanks!


abarth:

(In reply to comment #7)
&gt; (From update of attachment 62593 [details])
&gt; WebCore/storage/IDBKeyPath.cpp:193
&gt;  +      return (c &gt;= &apos;a&apos; &amp;&amp; c &lt;= &apos;z&apos;) || (c &gt;= &apos;A&apos; &amp;&amp; c &lt;= &apos;Z&apos;);
&gt; Should we use the version of this function in ASCIITypes.h?
done.

&gt; 
&gt; WebCore/storage/IDBKeyPath.cpp:203
&gt;  +          token.start = token.end = m_ptr;
&gt; Please don&apos;t use this form of assignment.
fixed.

&gt; 
&gt; WebCore/storage/IDBKeyPath.cpp:206
&gt;  +      ASSERT(m_ptr &lt;= m_end);
&gt; Should this be m_ptr &lt; m_end ?
done.

&gt; 
&gt; WebCore/storage/IDBKeyPath.cpp:237
&gt;  +      return TokError;
&gt; I&apos;d move this into the default case, but that&apos;s just a stylistic point.
not sure I understood this..

&gt; 
&gt; WebCore/storage/IDBKeyPath.cpp:242
&gt;  +      const UChar* runStart = m_ptr;
&gt; I&apos;d just call that &quot;start&quot;
done.

&gt; 
&gt; WebCore/storage/IDBKeyPath.cpp:249
&gt;  +      token.stringToken = builder.toString();
&gt; Why are we using a string builder here?  The append is outside the loop.
left over, using String directly.

&gt; 
&gt; WebCore/storage/IDBKeyPath.cpp:265
&gt;  +          return TokError;
&gt; so 01 only tokenizes the &quot;0&quot; and leaves the 1.  I presume that&apos;s what you mean.
it was an error, added a test case and fixed.

&gt; 
&gt; WebCore/storage/IDBKeyPath.cpp:271
&gt;  +      for (i = 0; i &lt; token.end - token.start; i++) {
&gt; Please break &quot;token.end - token.start&quot; out as a length variable since you&apos;re using it more than once.
see below.
  
&gt; 
&gt; WebCore/storage/IDBKeyPath.cpp:275
&gt;  +      buffer[i] = 0;
&gt; Yuck.  This seems error prone.  I can see that it&apos;s correct, but just computing the int directly seems way easier.
I completely changed it to use to String::toIntStrict(), looks much simpler and safer now.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>257174</commentid>
    <comment_count>10</comment_count>
      <attachid>62830</attachid>
    <who name="Marcus Bulach">bulach</who>
    <bug_when>2010-07-28 08:32:24 -0700</bug_when>
    <thetext>Created attachment 62830
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>257176</commentid>
    <comment_count>11</comment_count>
    <who name="Marcus Bulach">bulach</who>
    <bug_when>2010-07-28 08:34:39 -0700</bug_when>
    <thetext>Hi,

I completely removed the IDL and (un)related methods, so now IDBKeyPath is not accessible via javascript.
I added a unit test, and as soon as IndexedDatabase starts using it, we&apos;ll be able to have more comprehensive and cross-platform LayoutTests.

Another look, please?

Thanks!

(In reply to comment #10)
&gt; Created an attachment (id=62830) [details]
&gt; Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>258761</commentid>
    <comment_count>12</comment_count>
    <who name="Andrei Popescu">andreip</who>
    <bug_when>2010-08-02 03:08:19 -0700</bug_when>
    <thetext>&gt; void IDBKeyPath::parse()
&gt; (...)
&gt;  case Array : {
&gt; (...)
&gt; m_lexer.next();
 &gt; token = m_lexer.currentToken();

Same question here as in 42976: You are only checking for dot or left bracket. But what if tokEnd follows? Seems like you&apos;re returning ParserErrorAfterArray in that case?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>258770</commentid>
    <comment_count>13</comment_count>
      <attachid>63186</attachid>
    <who name="Marcus Bulach">bulach</who>
    <bug_when>2010-08-02 03:58:30 -0700</bug_when>
    <thetext>Created attachment 63186
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>258771</commentid>
    <comment_count>14</comment_count>
    <who name="Marcus Bulach">bulach</who>
    <bug_when>2010-08-02 04:03:06 -0700</bug_when>
    <thetext>(In reply to comment #12)
&gt; &gt; void IDBKeyPath::parse()
&gt; &gt; (...)
&gt; &gt;  case Array : {
&gt; &gt; (...)
&gt; &gt; m_lexer.next();
&gt;  &gt; token = m_lexer.currentToken();
&gt; 
&gt; Same question here as in 42976: You are only checking for dot or left bracket. But what if tokEnd follows? Seems like you&apos;re returning ParserErrorAfterArray in that case?

yes, good point.
fixed in the latest patch, and also tidy up with the following rule:
1. added an &quot;End&quot; state.
2. on any given state, there&apos;s a set of &quot;state changes&quot; depending on the condition.
3. if there&apos;s an error, it returns.

I also added a couple of test for this case as well.

hopefully this simplifies the state transitions, but I&apos;d surely appreciate more eyes looking into it. another look, please?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>258772</commentid>
    <comment_count>15</comment_count>
    <who name="Andrei Popescu">andreip</who>
    <bug_when>2010-08-02 04:08:31 -0700</bug_when>
    <thetext>LGTM</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>260187</commentid>
    <comment_count>16</comment_count>
      <attachid>63487</attachid>
    <who name="Marcus Bulach">bulach</who>
    <bug_when>2010-08-04 13:26:45 -0700</bug_when>
    <thetext>Created attachment 63487
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>260195</commentid>
    <comment_count>17</comment_count>
      <attachid>63489</attachid>
    <who name="Marcus Bulach">bulach</who>
    <bug_when>2010-08-04 13:42:06 -0700</bug_when>
    <thetext>Created attachment 63489
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>260484</commentid>
    <comment_count>18</comment_count>
    <who name="Marcus Bulach">bulach</who>
    <bug_when>2010-08-05 02:29:48 -0700</bug_when>
    <thetext>replying Jeremy&apos;s comments from https://bugs.webkit.org/show_bug.cgi?id=43276
the major change is that I removed the class and instead there&apos;s a function that returns a vector of IDBKeyPathElements.
plus some other clean ups. more below.
another look please?


(In reply to comment #11)
&gt; (From update of attachment 63313 [details])
&gt; WebCore/storage/IDBKeyPath.cpp:101
&gt;  +              if (token == TokIdentifier)
&gt; Use a switch?
hmm, it doesn&apos;t seem it&apos;d make it any more readable.

&gt; 
&gt; WebCore/storage/IDBKeyPath.cpp:46
&gt;  +      , m_currentToken(0)
&gt; Use the enum value
this is gone.

&gt; 
&gt; WebCore/storage/IDBKeyPath.cpp:58
&gt;  +      return m_currentToken &lt; m_tokens.size();
&gt; I guess I&apos;d suggest just converting over all this hasNext/next stuff to just returning the raw vector.  I don&apos;t feel strongly, but I just don&apos;t see much of a point of creating this interface.

removed the class, converted to a single function that returns a vector of elements.

&gt; 
&gt; WebCore/storage/IDBKeyPath.cpp:70
&gt;  +          return &quot;&quot;;
&gt; Maybe you should just let it crash?  I.e. not do bounds checking?
obsolete.

&gt; 
&gt; WebCore/storage/IDBKeyPath.cpp:90
&gt;  +      return m_parserError;
&gt; Maybe all the methods should be ASSERTing that a parse error never happened?
the function now returns an error, it may be better to let the caller decide what to do with it?

&gt; 
&gt; WebCore/storage/IDBKeyPath.cpp:103
&gt;  +              else if (token == TokLBracket)
&gt; I&apos;d lean towards spelling these all the way out.
Done.

&gt; 
&gt; WebCore/storage/IDBKeyPath.cpp:116
&gt;  +              Token idbToken;
&gt; these 2 token variable names are confusing.  The idb doesn&apos;t make it any less so.  Maybe &apos;outputToken&apos; or something?
There&apos;s now a TokenType (with the names spelled out as above), and IDBKeyPathElement, let me know if it&apos;s any clearer.

&gt; 
&gt; 
&gt; 
&gt; general note: you should talk to the guy who does fuzzers (skylined..?) and see if we can get some coverage on this
indeed! once we agree on the implementation, I&apos;ll add more people to it.

&gt; 
&gt; also, could we just do this more simply?  for example, in python pseudo code I could do this:
&gt; 
&gt; tokens = []
&gt; if (path == &quot;&quot;):
&gt;   return []
&gt; for (component in path.split(&quot;.&quot;)):
&gt;   if (component ~= /^([a-zA-Z0-9_]+)\[([0-9]+)\]$/):
&gt;     tokens.append($1, $2)
&gt;   else if (component ~= /^([a-zA-Z0-9_]+)$/):
&gt;     tokens.append($1, null)
&gt;   else:
&gt;     return error
&gt; return tokens
&gt; And that&apos;d be about it.  Do we have any sort of regex support build into WebKit already?  The split would be pretty easy to do as well.  I&apos;m just concerned that we&apos;re jumping the gun with all of this complexity.
&gt; 
&gt; Anyhow...

I don&apos;t think this would be much simpler.. We&apos;d still need to get the numbers out of the indices.
There&apos;s the n-ary array case &quot;foo[3][4]&quot;, etc.. seems that this single-pass parser might be simpler in the end?

&gt; 
&gt; 
&gt; WebCore/storage/IDBKeyPath.cpp:145
&gt;  +              ASSERT(token.type == TokNumber);
&gt; this seems mildly redundant, but I&apos;m ok with it
&gt; 
&gt; WebCore/storage/IDBKeyPath.cpp:163
&gt;  +                  state = Array;
&gt; but this is an invalid state!

not really. it&apos;s perfectly possible to have n-ary array, i.e., &quot;foo[3][9][5].age&quot;. ValidKeyPath1 test exercises this.

&gt; 
&gt; WebCore/storage/IDBKeyPath.cpp:147
&gt;  +              idbToken.hasIndex = true;
&gt; maybe assert it was false?
obsolete.

&gt; 
&gt; WebCore/storage/IDBKeyPath.cpp:190
&gt;  +  
&gt; default:
&gt;   raise error
as above, perhaps the caller should decide?

&gt; 
&gt; WebCore/storage/IDBKeyPath.cpp:99
&gt;  +          case Start : {
&gt; maybe pull this out of the state machine?
done.

&gt; 
&gt; WebCore/storage/IDBKeyPath.cpp:278
&gt;  +          return TokError;
&gt; I&apos;d just do an m_ptr &gt;= m_end first and then return...then no need for an else
done.

&gt; 
&gt; WebCore/storage/IDBKeyPath.cpp:292
&gt;  +      return TokError;
&gt; same again...test the error condition and return rather than putting everythign in a block
done.

&gt; 
&gt; WebCore/storage/IDBKeyPath.cpp:252
&gt;  +      if (m_ptr &lt; m_end &amp;&amp; isSafeIdentifierStartCharacter(*m_ptr))
&gt; ditto
done.

&gt; 
&gt; WebCore/storage/IDBKeyPath.h:84
&gt;  +      class Lexer {
&gt; Why does this need to be defined here?
moved to the cpp file.

&gt; 
&gt; WebCore/storage/IDBKeyPath.h:116
&gt;  +          const UChar* m_ptr;
&gt; should this be called m_cursor?
hmm, cursor and idb is a combination already in use..
isn&apos;t ptr clear?

&gt; 
&gt; WebCore/storage/IDBKeyPath.h:100
&gt;  +          TokenType next()
&gt; these could all be on one line
removed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>260582</commentid>
    <comment_count>19</comment_count>
      <attachid>63489</attachid>
    <who name="Jeremy Orlow">jorlow</who>
    <bug_when>2010-08-05 07:00:13 -0700</bug_when>
    <thetext>Comment on attachment 63489
Patch

get rid of the indexeddatabaserequest stuff</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>260775</commentid>
    <comment_count>20</comment_count>
      <attachid>63618</attachid>
    <who name="Marcus Bulach">bulach</who>
    <bug_when>2010-08-05 12:33:22 -0700</bug_when>
    <thetext>Created attachment 63618
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>260776</commentid>
    <comment_count>21</comment_count>
    <who name="Marcus Bulach">bulach</who>
    <bug_when>2010-08-05 12:33:57 -0700</bug_when>
    <thetext>(In reply to comment #19)
&gt; (From update of attachment 63489 [details])
&gt; get rid of the indexeddatabaserequest stuff

done, it should now contain only the parser and associated tests.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>263283</commentid>
    <comment_count>22</comment_count>
      <attachid>64124</attachid>
    <who name="Marcus Bulach">bulach</who>
    <bug_when>2010-08-11 09:29:45 -0700</bug_when>
    <thetext>Created attachment 64124
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>263287</commentid>
    <comment_count>23</comment_count>
    <who name="Marcus Bulach">bulach</who>
    <bug_when>2010-08-11 09:32:29 -0700</bug_when>
    <thetext>Fixed some minor comments as a result of https://bugs.webkit.org/show_bug.cgi?id=43276

skylined: your name was mentioned as a possible reviewer, would you mind help us here?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>263605</commentid>
    <comment_count>24</comment_count>
      <attachid>64124</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2010-08-11 22:39:51 -0700</bug_when>
    <thetext>Comment on attachment 64124
Patch

WebCore/storage/IDBKeyPath.cpp:58
 +        return m_currentTokenType;
Bad indent.  You can also put this all on one line.  Why does the name of the access not match the name of the member variable?

WebCore/storage/IDBKeyPath.cpp:67
 +      const IDBKeyPathElement&amp; currentElement()
Also can be on one line.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>263742</commentid>
    <comment_count>25</comment_count>
      <attachid>64214</attachid>
    <who name="Marcus Bulach">bulach</who>
    <bug_when>2010-08-12 05:44:04 -0700</bug_when>
    <thetext>Created attachment 64214
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>263746</commentid>
    <comment_count>26</comment_count>
    <who name="Jeremy Orlow">jorlow</who>
    <bug_when>2010-08-12 05:46:49 -0700</bug_when>
    <thetext>you gotten an r+ so unless you&apos;ve made non-trivial changes, just commit.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>263757</commentid>
    <comment_count>27</comment_count>
    <who name="Marcus Bulach">bulach</who>
    <bug_when>2010-08-12 05:56:33 -0700</bug_when>
    <thetext>thanks Adam! all comments addressed.

Chris: jorlow suggested adding you as a reviewer for this patch, would you mind taking a look at it?

quick background: this patch parses an &quot;IDBKeyPath&quot; (part of indexed database). an &quot;IDBKeyPath&quot; basically specifies an expression that can be applied to an object in order to extract a property, say &quot;items[3].age&quot; would be applied to an object to obtain the age of the third element in items array of said object.

for completeness, the whole chain besides patch contains:
the &quot;extractor&quot; bit, i.e., given parsed key path and an object, returns the key.
https://bugs.webkit.org/show_bug.cgi?id=43276

the utility process (sandbox) that will run this code in the chromium side:
http://codereview.chromium.org/3043037/show

please, ping me if you need more information about this.

(In reply to comment #24)
&gt; (From update of attachment 64124 [details])
&gt; WebCore/storage/IDBKeyPath.cpp:58
&gt;  +        return m_currentTokenType;
&gt; Bad indent.  You can also put this all on one line.  Why does the name of the access not match the name of the member variable?
Done.

&gt; 
&gt; WebCore/storage/IDBKeyPath.cpp:67
&gt;  +      const IDBKeyPathElement&amp; currentElement()
&gt; Also can be on one line.
Done.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>264085</commentid>
    <comment_count>28</comment_count>
    <who name="Chris Evans">cevans</who>
    <bug_when>2010-08-12 16:54:03 -0700</bug_when>
    <thetext>Looks like a lot of care has been taken; thanks.
What about:
+    int number = numberAsString.toIntStrict(&amp;ok);

Does toIntStrict() permit negatives? If so, is that desired and should it be rejected?

What about a crazy large int? Should that be rejected out of hand here or does that check belong at a different level?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>264239</commentid>
    <comment_count>29</comment_count>
    <who name="Jeremy Orlow">jorlow</who>
    <bug_when>2010-08-13 01:36:59 -0700</bug_when>
    <thetext>Crazy large int sounds like a good test case, btw.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>264258</commentid>
    <comment_count>30</comment_count>
      <attachid>64214</attachid>
    <who name="Jeremy Orlow">jorlow</who>
    <bug_when>2010-08-13 02:31:42 -0700</bug_when>
    <thetext>Comment on attachment 64214
Patch

Please address Evan&apos;s comments.  I&apos;ll take one more quick skim through and rubber stamp it then.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>264365</commentid>
    <comment_count>31</comment_count>
      <attachid>64340</attachid>
    <who name="Marcus Bulach">bulach</who>
    <bug_when>2010-08-13 08:11:34 -0700</bug_when>
    <thetext>Created attachment 64340
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>264367</commentid>
    <comment_count>32</comment_count>
    <who name="Marcus Bulach">bulach</who>
    <bug_when>2010-08-13 08:16:12 -0700</bug_when>
    <thetext>thanks for the quick reply chris! comments addressed, more inline:

(In reply to comment #28)
&gt; Looks like a lot of care has been taken; thanks.
&gt; What about:
&gt; +    int number = numberAsString.toIntStrict(&amp;ok);
&gt; 
&gt; Does toIntStrict() permit negatives? If so, is that desired and should it be rejected?

good point! made it unsigned, and using toUIntStrict.

&gt; 
&gt; What about a crazy large int? Should that be rejected out of hand here or does that check belong at a different level?
added a test for it (toUIntStrict fails for larger-than-int). also, you&apos;re correct: higher level (https://bugs.webkit.org/show_bug.cgi?id=43276) tests for the value being available in the array, it never de-references as-is.

another quick look please?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>264486</commentid>
    <comment_count>33</comment_count>
    <who name="Chris Evans">cevans</who>
    <bug_when>2010-08-13 13:35:40 -0700</bug_when>
    <thetext>LGTM</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>264792</commentid>
    <comment_count>34</comment_count>
      <attachid>64340</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2010-08-14 23:10:32 -0700</bug_when>
    <thetext>Comment on attachment 64340
Patch

Thanks for getting a thorough review.  It looks like everyone&apos;s comments have been addressed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>265045</commentid>
    <comment_count>35</comment_count>
    <who name="Marcus Bulach">bulach</who>
    <bug_when>2010-08-16 05:45:23 -0700</bug_when>
    <thetext>Committed r65417: &lt;http://trac.webkit.org/changeset/65417&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>62579</attachid>
            <date>2010-07-26 09:04:14 -0700</date>
            <delta_ts>2010-07-26 12:08:04 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-42976-20100726170411.patch</filename>
            <type>text/plain</type>
            <size>25618</size>
            <attacher name="Marcus Bulach">bulach</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxv
ZwppbmRleCAyZjhjNzM0MTNjZWRlYzE2ZTZhOGQwYzkwOGI0YzNlYTJlYzJiZjk4Li4wNzQyMWNh
YzhhMjg3MDQ1MDBkYzhhYzM1OGZkNjJkNDI4MzQ4NTcxIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0
cy9DaGFuZ2VMb2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDUgKzEsMTkgQEAK
IDIwMTAtMDctMjYgIE1hcmN1cyBCdWxhY2ggIDxidWxhY2hAY2hyb21pdW0ub3JnPgogCisgICAg
ICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEltcGxlbWVudCBJREJL
ZXlQYXRoIHBhcnNlci4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTQyOTc2CisKKyAgICAgICAgKiBzdG9yYWdlL2luZGV4ZWRkYi9pZGIta2V5cGF0aC1l
eHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIHN0b3JhZ2UvaW5kZXhlZGRiL2lkYi1rZXlw
YXRoLmh0bWw6IEFkZGVkLgorICAgICAgICAqIHN0b3JhZ2UvaW5kZXhlZGRiL3NjcmlwdC10ZXN0
cy9pZGIta2V5cGF0aC5qczogQWRkZWQuCisgICAgICAgIChjaGVja0tleVBhdGgpOgorICAgICAg
ICAoZXhwZWN0ZWRSZXN1bHQpOgorICAgICAgICAodGVzdCk6CisKKzIwMTAtMDctMjYgIE1hcmN1
cyBCdWxhY2ggIDxidWxhY2hAY2hyb21pdW0ub3JnPgorCiAgICAgICAgIFVucmV2aWV3ZWQuICBB
ZGQgY2hyb21pdW0gZXhwZWN0YXRpb25zIGZvciBmYWlsaW5nIHRlc3RzLgogCiAgICAgICAgIHRh
Ymxlcy9tb3ppbGxhL290aGVyL3NsYXNobG9nby5odG1sIGZhaWxzIGFmdGVyIHI2Mzk5NApkaWZm
IC0tZ2l0IGEvTGF5b3V0VGVzdHMvc3RvcmFnZS9pbmRleGVkZGIvaWRiLWtleXBhdGgtZXhwZWN0
ZWQudHh0IGIvTGF5b3V0VGVzdHMvc3RvcmFnZS9pbmRleGVkZGIvaWRiLWtleXBhdGgtZXhwZWN0
ZWQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAuLjkzZjIxZGRmYmQxNjQ0YjM3YTIyZWZhZjFmMjZlNjZjNjQ2YjQ3
MWMKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9zdG9yYWdlL2luZGV4ZWRkYi9pZGIt
a2V5cGF0aC1leHBlY3RlZC50eHQKQEAgLTAsMCArMSw3NSBAQAorVGVzdCBJbmRleGVkREIncyBL
ZXlQYXRoLgorCitPbiBzdWNjZXNzLCB5b3Ugd2lsbCBzZWUgYSBzZXJpZXMgb2YgIlBBU1MiIG1l
c3NhZ2VzLCBmb2xsb3dlZCBieSAiVEVTVCBDT01QTEVURSIuCisKKworaW5kZXhlZERCLm1ha2VL
ZXlQYXRoKCdmb28uYmFyLnpvbycpCitQQVNTIGtleVBhdGguaWRlbnRpZmllciBpcyAiZm9vIgor
UEFTUyBrZXlQYXRoLmhhc0luZGV4IGlzIGZhbHNlCitQQVNTIGtleVBhdGguaW5kZXhWYWx1ZSBp
cyAwCitQQVNTIGtleVBhdGguaWRlbnRpZmllciBpcyAiYmFyIgorUEFTUyBrZXlQYXRoLmhhc0lu
ZGV4IGlzIGZhbHNlCitQQVNTIGtleVBhdGguaW5kZXhWYWx1ZSBpcyAwCitQQVNTIGtleVBhdGgu
aWRlbnRpZmllciBpcyAiem9vIgorUEFTUyBrZXlQYXRoLmhhc0luZGV4IGlzIGZhbHNlCitQQVNT
IGtleVBhdGguaW5kZXhWYWx1ZSBpcyAwCitQQVNTIDMgaXMgMworaW5kZXhlZERCLm1ha2VLZXlQ
YXRoKCdhWzM0XVsyMF0uZm9vWzJdLmJhcicpCitQQVNTIGtleVBhdGguaWRlbnRpZmllciBpcyAi
YSIKK1BBU1Mga2V5UGF0aC5oYXNJbmRleCBpcyBmYWxzZQorUEFTUyBrZXlQYXRoLmluZGV4VmFs
dWUgaXMgMAorUEFTUyBrZXlQYXRoLmlkZW50aWZpZXIgaXMgIiIKK1BBU1Mga2V5UGF0aC5oYXNJ
bmRleCBpcyB0cnVlCitQQVNTIGtleVBhdGguaW5kZXhWYWx1ZSBpcyAzNAorUEFTUyBrZXlQYXRo
LmlkZW50aWZpZXIgaXMgIiIKK1BBU1Mga2V5UGF0aC5oYXNJbmRleCBpcyB0cnVlCitQQVNTIGtl
eVBhdGguaW5kZXhWYWx1ZSBpcyAyMAorUEFTUyBrZXlQYXRoLmlkZW50aWZpZXIgaXMgImZvbyIK
K1BBU1Mga2V5UGF0aC5oYXNJbmRleCBpcyBmYWxzZQorUEFTUyBrZXlQYXRoLmluZGV4VmFsdWUg
aXMgMAorUEFTUyBrZXlQYXRoLmlkZW50aWZpZXIgaXMgIiIKK1BBU1Mga2V5UGF0aC5oYXNJbmRl
eCBpcyB0cnVlCitQQVNTIGtleVBhdGguaW5kZXhWYWx1ZSBpcyAyCitQQVNTIGtleVBhdGguaWRl
bnRpZmllciBpcyAiYmFyIgorUEFTUyBrZXlQYXRoLmhhc0luZGV4IGlzIGZhbHNlCitQQVNTIGtl
eVBhdGguaW5kZXhWYWx1ZSBpcyAwCitQQVNTIDYgaXMgNgoraW5kZXhlZERCLm1ha2VLZXlQYXRo
KCdhWyAzNCBdLlpvb1syXQkuYycpCitQQVNTIGtleVBhdGguaWRlbnRpZmllciBpcyAiYSIKK1BB
U1Mga2V5UGF0aC5oYXNJbmRleCBpcyBmYWxzZQorUEFTUyBrZXlQYXRoLmluZGV4VmFsdWUgaXMg
MAorUEFTUyBrZXlQYXRoLmlkZW50aWZpZXIgaXMgIiIKK1BBU1Mga2V5UGF0aC5oYXNJbmRleCBp
cyB0cnVlCitQQVNTIGtleVBhdGguaW5kZXhWYWx1ZSBpcyAzNAorUEFTUyBrZXlQYXRoLmlkZW50
aWZpZXIgaXMgIlpvbyIKK1BBU1Mga2V5UGF0aC5oYXNJbmRleCBpcyBmYWxzZQorUEFTUyBrZXlQ
YXRoLmluZGV4VmFsdWUgaXMgMAorUEFTUyBrZXlQYXRoLmlkZW50aWZpZXIgaXMgIiIKK1BBU1Mg
a2V5UGF0aC5oYXNJbmRleCBpcyB0cnVlCitQQVNTIGtleVBhdGguaW5kZXhWYWx1ZSBpcyAyCitQ
QVNTIGtleVBhdGguaWRlbnRpZmllciBpcyAiYyIKK1BBU1Mga2V5UGF0aC5oYXNJbmRleCBpcyBm
YWxzZQorUEFTUyBrZXlQYXRoLmluZGV4VmFsdWUgaXMgMAorUEFTUyA1IGlzIDUKK2luZGV4ZWRE
Qi5tYWtlS2V5UGF0aCgnYVtbMzRdXS5iWzJdLmMnKQorUEFTUyBrZXlQYXRoLmlkZW50aWZpZXIg
aXMgImEiCitQQVNTIGtleVBhdGguaGFzSW5kZXggaXMgZmFsc2UKK1BBU1Mga2V5UGF0aC5pbmRl
eFZhbHVlIGlzIDAKK1BBU1MgMSBpcyAxCitpbmRleGVkREIubWFrZUtleVBhdGgoJ2FbWzM0XS5i
WzJdLmMnKQorUEFTUyBrZXlQYXRoLmlkZW50aWZpZXIgaXMgImEiCitQQVNTIGtleVBhdGguaGFz
SW5kZXggaXMgZmFsc2UKK1BBU1Mga2V5UGF0aC5pbmRleFZhbHVlIGlzIDAKK1BBU1MgMSBpcyAx
CitpbmRleGVkREIubWFrZUtleVBhdGgoJ2FbWzM0LmJbMl0uYycpCitQQVNTIGtleVBhdGguaWRl
bnRpZmllciBpcyAiYSIKK1BBU1Mga2V5UGF0aC5oYXNJbmRleCBpcyBmYWxzZQorUEFTUyBrZXlQ
YXRoLmluZGV4VmFsdWUgaXMgMAorUEFTUyAxIGlzIDEKK2luZGV4ZWREQi5tYWtlS2V5UGF0aCgn
K2FbMzRdLmJbMl0uYycpCitQQVNTIDAgaXMgMAoraW5kZXhlZERCLm1ha2VLZXlQYXRoKCclYVsz
NF0uYlsyXS5jJykKK1BBU1MgMCBpcyAwCitQQVNTIHN1Y2Nlc3NmdWxseVBhcnNlZCBpcyB0cnVl
CisKK1RFU1QgQ09NUExFVEUKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3N0b3JhZ2UvaW5kZXhl
ZGRiL2lkYi1rZXlwYXRoLmh0bWwgYi9MYXlvdXRUZXN0cy9zdG9yYWdlL2luZGV4ZWRkYi9pZGIt
a2V5cGF0aC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjJiMjQ3ODdkOTRhN2MxNWYzYjBlYmZkNTU0N2IxMzY0
OGM0MjY2MDAKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9zdG9yYWdlL2luZGV4ZWRk
Yi9pZGIta2V5cGF0aC5odG1sCkBAIC0wLDAgKzEsMTMgQEAKKzxodG1sPgorPGhlYWQ+Cis8bGlu
ayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Ii4uLy4uL2Zhc3QvanMvcmVzb3VyY2VzL2pzLXRlc3Qt
c3R5bGUuY3NzIj4KKzxzY3JpcHQgc3JjPSIuLi8uLi9mYXN0L2pzL3Jlc291cmNlcy9qcy10ZXN0
LXByZS5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iLi4vLi4vZmFzdC9qcy9yZXNvdXJjZXMv
anMtdGVzdC1wb3N0LWZ1bmN0aW9uLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSJyZXNvdXJj
ZXMvc2hhcmVkLmpzIj48L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5PgorPHAgaWQ9ImRlc2NyaXB0
aW9uIj48L3A+Cis8ZGl2IGlkPSJjb25zb2xlIj48L2Rpdj4KKzxzY3JpcHQgc3JjPSJzY3JpcHQt
dGVzdHMvaWRiLWtleXBhdGguanMiPjwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgpkaWZmIC0t
Z2l0IGEvTGF5b3V0VGVzdHMvc3RvcmFnZS9pbmRleGVkZGIvc2NyaXB0LXRlc3RzL2lkYi1rZXlw
YXRoLmpzIGIvTGF5b3V0VGVzdHMvc3RvcmFnZS9pbmRleGVkZGIvc2NyaXB0LXRlc3RzL2lkYi1r
ZXlwYXRoLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAuLjJkYjBlZjlhNDViZTEwMmYwNDE4ZGY4M2Q5NThjZmY1MmQ0
ZDExYjIKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9zdG9yYWdlL2luZGV4ZWRkYi9z
Y3JpcHQtdGVzdHMvaWRiLWtleXBhdGguanMKQEAgLTAsMCArMSw0NyBAQAorZGVzY3JpcHRpb24o
IlRlc3QgSW5kZXhlZERCJ3MgS2V5UGF0aC4iKTsKK2lmICh3aW5kb3cubGF5b3V0VGVzdENvbnRy
b2xsZXIpCisgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIud2FpdFVudGlsRG9uZSgpOworCitmdW5j
dGlvbiBjaGVja0tleVBhdGgoa2V5UGF0aFZhbHVlLCB0b2tlbnMpCit7CisgICAga2V5UGF0aCA9
IGV2YWxBbmRMb2coImluZGV4ZWREQi5tYWtlS2V5UGF0aCgnIiArIGtleVBhdGhWYWx1ZSArICIn
KSIpOworICAgIHZhciBpID0gMDsKKyAgICBmb3IgKDtrZXlQYXRoLmhhc05leHQoKTsga2V5UGF0
aC5uZXh0KCksICsraSkgeworICAgICAgICBleHBlY3RlZCA9IHRva2VuczsKKyAgICAgICAgc2hv
dWxkQmVFcXVhbFRvU3RyaW5nKCJrZXlQYXRoLmlkZW50aWZpZXIiLCB0b2tlbnNbaV0uaWRlbnRp
Zmllcik7CisgICAgICAgIHNob3VsZEJlKCJrZXlQYXRoLmhhc0luZGV4IiwgIiIgKyBleHBlY3Rl
ZFtpXS5oYXNJbmRleCk7CisgICAgICAgIHNob3VsZEJlKCJrZXlQYXRoLmluZGV4VmFsdWUiLCAi
IiArIHRva2Vuc1tpXS5pbmRleFZhbHVlKTsKKyAgICB9CisgICAgc2hvdWxkQmUoIiIgKyBpLCAi
IiArIHRva2Vucy5sZW5ndGgpOworfQorCitmdW5jdGlvbiBleHBlY3RlZFJlc3VsdChleHBlY3Rl
ZElkZW50aWZpZXIsIGV4cGVjdGVkSGFzSW5kZXgsIGV4cGVjdGVkaW5kZXhWYWx1ZSkKK3sKKyAg
ICByZXR1cm4ge2lkZW50aWZpZXI6IGV4cGVjdGVkSWRlbnRpZmllciwgaGFzSW5kZXg6IGV4cGVj
dGVkSGFzSW5kZXgsIGluZGV4VmFsdWU6IGV4cGVjdGVkaW5kZXhWYWx1ZX07Cit9CisKK2Z1bmN0
aW9uIHRlc3QoKQoreworICAgIGNoZWNrS2V5UGF0aCgiZm9vLmJhci56b28iLCBbZXhwZWN0ZWRS
ZXN1bHQoImZvbyIsIGZhbHNlLCAwKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGV4cGVjdGVkUmVzdWx0KCJiYXIiLCBmYWxzZSwgMCksCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBleHBlY3RlZFJlc3VsdCgiem9vIiwgZmFsc2UsIDApXSk7CisgICAgY2hlY2tL
ZXlQYXRoKCJhWzM0XVsyMF0uZm9vWzJdLmJhciIsIFtleHBlY3RlZFJlc3VsdCgiYSIsIGZhbHNl
LCAwKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4cGVjdGVk
UmVzdWx0KCIiLCB0cnVlLCAzNCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBleHBlY3RlZFJlc3VsdCgiIiwgdHJ1ZSwgMjApLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgZXhwZWN0ZWRSZXN1bHQoImZvbyIsIGZhbHNlLCAwKSwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4cGVjdGVkUmVzdWx0
KCIiLCB0cnVlLCAyKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGV4cGVjdGVkUmVzdWx0KCJiYXIiLCBmYWxzZSwgMCldKTsKKyAgICBjaGVja0tleVBhdGgoImFb
IDM0IF0uWm9vWzJdXHQuYyIsIFtleHBlY3RlZFJlc3VsdCgiYSIsIGZhbHNlLCAwKSwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHBlY3RlZFJlc3VsdCgiIiwgdHJ1
ZSwgMzQpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4cGVjdGVk
UmVzdWx0KCJab28iLCBmYWxzZSwgMCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgZXhwZWN0ZWRSZXN1bHQoIiIsIHRydWUsIDIpLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGV4cGVjdGVkUmVzdWx0KCJjIiwgZmFsc2UsIDApXSk7Cisg
ICAgY2hlY2tLZXlQYXRoKCJhW1szNF1dLmJbMl0uYyIsIFtleHBlY3RlZFJlc3VsdCgiYSIsIGZh
bHNlLCAwKV0pOworICAgIGNoZWNrS2V5UGF0aCgiYVtbMzRdLmJbMl0uYyIsIFtleHBlY3RlZFJl
c3VsdCgiYSIsIGZhbHNlLCAwKV0pOworICAgIGNoZWNrS2V5UGF0aCgiYVtbMzQuYlsyXS5jIiwg
W2V4cGVjdGVkUmVzdWx0KCJhIiwgZmFsc2UsIDApXSk7CisgICAgY2hlY2tLZXlQYXRoKCIrYVsz
NF0uYlsyXS5jIiwgW10pOworICAgIGNoZWNrS2V5UGF0aCgiJWFbMzRdLmJbMl0uYyIsIFtdKTsK
KyAgICBkb25lKCk7Cit9CisKK3Rlc3QoKTsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9n
IGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZTI2ZDE4NTRhOWEzMzBhNTA3Mjg2MzNiOGU1NWQw
N2ZlYjk0NWY2ZC4uNzE5NTA0YTRiYjRhMGFjNGY4YzU1Nzc1ZTVhODdhNmYyOGNmZmMzMSAxMDA2
NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSw0MyBAQAorMjAxMC0wNy0yNiAgTWFyY3VzIEJ1bGFjaCAgPGJ1bGFjaEBjaHJvbWl1bS5v
cmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgSW1w
bGVtZW50IElEQktleVBhdGggcGFyc2VyLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9NDI5NzYKKworICAgICAgICBUZXN0OiBzdG9yYWdlL2luZGV4ZWRk
Yi9pZGIta2V5cGF0aC5odG1sCisKKyAgICAgICAgSURCS2V5UGF0aCBpcyBhbiBpbnRlcm5hbCBj
bGFzcywgZXhwb3NlZCBvbmx5IGZvciB0ZXN0cy4KKyAgICAgICAgSXQnbGwgYWxsb3cgaW5kZXhl
ZCBkYXRhYmFzZSBpbXBsZW1lbnRhdGlvbiB0byB0cmF2ZXJzZSBhIGdpdmVuIGtleSBwYXRoIGFu
ZCBvYnRhaW4gdGhlIGNvcnJlc3BvbmRpbmcgcHJvcGVydGllcworICAgICAgICBmcm9tIGEgU2Vy
aWFsaXplZFNjcmlwdFZhbHVlLgorCisgICAgICAgICogV2ViQ29yZS5neXBpOgorICAgICAgICAq
IHN0b3JhZ2UvSURCS2V5UGF0aC5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6SURCS2V5
UGF0aDo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OklEQktleVBhdGg6OklEQktleVBhdGgp
OgorICAgICAgICAoV2ViQ29yZTo6SURCS2V5UGF0aDo6fklEQktleVBhdGgpOgorICAgICAgICAo
V2ViQ29yZTo6SURCS2V5UGF0aDo6aGFzTmV4dCk6CisgICAgICAgIChXZWJDb3JlOjpJREJLZXlQ
YXRoOjpuZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OklEQktleVBhdGg6OmlkZW50aWZpZXIpOgor
ICAgICAgICAoV2ViQ29yZTo6SURCS2V5UGF0aDo6aGFzSW5kZXgpOgorICAgICAgICAoV2ViQ29y
ZTo6SURCS2V5UGF0aDo6aW5kZXhWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpJREJLZXlQYXRo
OjpwYXJzZSk6CisgICAgICAgIChXZWJDb3JlOjppc1NhZmVJZGVudGlmaWVyQ2hhcmFjdGVyKToK
KyAgICAgICAgKFdlYkNvcmU6OklEQktleVBhdGg6OkxleGVyOjpsZXgpOgorICAgICAgICAoV2Vi
Q29yZTo6SURCS2V5UGF0aDo6TGV4ZXI6OmxleElkZW50aWZpZXIpOgorICAgICAgICAoV2ViQ29y
ZTo6SURCS2V5UGF0aDo6TGV4ZXI6OmxleE51bWJlcik6CisgICAgICAgICogc3RvcmFnZS9JREJL
ZXlQYXRoLmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6SURCS2V5UGF0aDo6VG9rZW46OlRv
a2VuKToKKyAgICAgICAgKFdlYkNvcmU6OklEQktleVBhdGg6Oik6CisgICAgICAgIChXZWJDb3Jl
OjpJREJLZXlQYXRoOjpMZXhlcjo6TGV4ZXIpOgorICAgICAgICAoV2ViQ29yZTo6SURCS2V5UGF0
aDo6TGV4ZXI6Om5leHQpOgorICAgICAgICAoV2ViQ29yZTo6SURCS2V5UGF0aDo6TGV4ZXI6OmN1
cnJlbnRUb2tlbik6CisgICAgICAgICogc3RvcmFnZS9JREJLZXlQYXRoLmlkbDogQWRkZWQuCisg
ICAgICAgICogc3RvcmFnZS9JbmRleGVkRGF0YWJhc2VSZXF1ZXN0LmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OkluZGV4ZWREYXRhYmFzZVJlcXVlc3Q6Om1ha2VLZXlQYXRoKToKKyAgICAgICAgKiBz
dG9yYWdlL0luZGV4ZWREYXRhYmFzZVJlcXVlc3QuaDoKKyAgICAgICAgKiBzdG9yYWdlL0luZGV4
ZWREYXRhYmFzZVJlcXVlc3QuaWRsOgorCiAyMDEwLTA3LTI2ICBTYXRpc2ggU2FtcGF0aCAgPHNh
dGlzaEBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgU3RldmUgQmxvY2suCmRp
ZmYgLS1naXQgYS9XZWJDb3JlL1dlYkNvcmUuZ3lwaSBiL1dlYkNvcmUvV2ViQ29yZS5neXBpCmlu
ZGV4IGY1M2Y0NTYxN2EwZDU4ZWU3MjE5ZDY1ZjQ1ZjBhY2RkMTliM2JhNzcuLjFlZDVlMDFmYzc0
YWFhNWI2ZmY3OGZjMzZkODVmNDI3NjllNmY1OGQgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvV2ViQ29y
ZS5neXBpCisrKyBiL1dlYkNvcmUvV2ViQ29yZS5neXBpCkBAIC0yMzksNiArMjM5LDcgQEAKICAg
ICAgICAgICAgICdzdG9yYWdlL0lEQkV2ZW50LmlkbCcsCiAgICAgICAgICAgICAnc3RvcmFnZS9J
REJJbmRleFJlcXVlc3QuaWRsJywKICAgICAgICAgICAgICdzdG9yYWdlL0lEQktleS5pZGwnLAor
ICAgICAgICAgICAgJ3N0b3JhZ2UvSURCS2V5UGF0aC5pZGwnLAogICAgICAgICAgICAgJ3N0b3Jh
Z2UvSURCS2V5UmFuZ2UuaWRsJywKICAgICAgICAgICAgICdzdG9yYWdlL0lEQk9iamVjdFN0b3Jl
UmVxdWVzdC5pZGwnLAogICAgICAgICAgICAgJ3N0b3JhZ2UvSURCUmVxdWVzdC5pZGwnLApAQCAt
MzQ3OCw2ICszNDc5LDggQEAKICAgICAgICAgICAgICdzdG9yYWdlL0lEQkluZGV4UmVxdWVzdC5o
JywKICAgICAgICAgICAgICdzdG9yYWdlL0lEQktleS5jcHAnLAogICAgICAgICAgICAgJ3N0b3Jh
Z2UvSURCS2V5LmgnLAorICAgICAgICAgICAgJ3N0b3JhZ2UvSURCS2V5UGF0aC5jcHAnLAorICAg
ICAgICAgICAgJ3N0b3JhZ2UvSURCS2V5UGF0aC5oJywKICAgICAgICAgICAgICdzdG9yYWdlL0lE
QktleVJhbmdlLmNwcCcsCiAgICAgICAgICAgICAnc3RvcmFnZS9JREJLZXlSYW5nZS5oJywKICAg
ICAgICAgICAgICdzdG9yYWdlL0lEQktleVRyZWUuaCcsCmRpZmYgLS1naXQgYS9XZWJDb3JlL3N0
b3JhZ2UvSURCS2V5UGF0aC5jcHAgYi9XZWJDb3JlL3N0b3JhZ2UvSURCS2V5UGF0aC5jcHAKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMC4uMzQ3NWM5NzgzMGJjZTk0MmEwMzJmNGIzZDBlODgwNDM5NGM5NDFlZgotLS0gL2Rl
di9udWxsCisrKyBiL1dlYkNvcmUvc3RvcmFnZS9JREJLZXlQYXRoLmNwcApAQCAtMCwwICsxLDI2
NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoK
KyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJJREJLZXlQYXRoLmgi
CisKKyNpbmNsdWRlICJTdHJpbmdCdWlsZGVyLmgiCisjaW5jbHVkZSA8d3RmL0FTQ0lJQ1R5cGUu
aD4KKyNpbmNsdWRlIDx3dGYvZHRvYS5oPgorCisjaWYgRU5BQkxFKElOREVYRURfREFUQUJBU0Up
CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworUGFzc1JlZlB0cjxJREJLZXlQYXRoPiBJREJLZXlQ
YXRoOjpjcmVhdGUoY29uc3QgU3RyaW5nJiBrZXlQYXRoKQoreworICAgIFJlZlB0cjxJREJLZXlQ
YXRoPiBpZGJLZXlQYXRoID0gYWRvcHRSZWYobmV3IElEQktleVBhdGgoa2V5UGF0aCkpOworICAg
IGlkYktleVBhdGgtPnBhcnNlKCk7CisgICAgcmV0dXJuIGlkYktleVBhdGgucmVsZWFzZSgpOwor
fQorCitJREJLZXlQYXRoOjpJREJLZXlQYXRoKGNvbnN0IFN0cmluZyYga2V5UGF0aCkKKyAgICA6
IG1fa2V5UGF0aChrZXlQYXRoKQorICAgICwgbV9jdXJyZW50VG9rZW4oMCkKKyAgICAsIG1fbGV4
ZXIoa2V5UGF0aCkKK3sKKyAgICBtX2xleGVyLm5leHQoKTsKKyAgICBUb2tlbiB0b2tlbjsKKyAg
ICB0b2tlbi5pZGVudGlmaWVyID0ga2V5UGF0aDsKK30KKworSURCS2V5UGF0aDo6fklEQktleVBh
dGgoKQoreworfQorCitib29sIElEQktleVBhdGg6Omhhc05leHQoKQoreworICAgIHJldHVybiBt
X2N1cnJlbnRUb2tlbiA8IG1fdG9rZW5zLnNpemUoKTsKK30KKwordm9pZCBJREJLZXlQYXRoOjpu
ZXh0KCkKK3sKKyAgICBpZiAobV9jdXJyZW50VG9rZW4gPCBtX3Rva2Vucy5zaXplKCkpCisgICAg
ICAgICsrbV9jdXJyZW50VG9rZW47Cit9CisKK1N0cmluZyBJREJLZXlQYXRoOjppZGVudGlmaWVy
KCkKK3sKKyAgICBpZiAobV9jdXJyZW50VG9rZW4gPj0gbV90b2tlbnMuc2l6ZSgpKQorICAgICAg
ICByZXR1cm4gIiI7CisgICAgcmV0dXJuIG1fdG9rZW5zW21fY3VycmVudFRva2VuXS5pZGVudGlm
aWVyOworfQorCitib29sIElEQktleVBhdGg6Omhhc0luZGV4KCkgY29uc3QKK3sKKyAgICBpZiAo
bV9jdXJyZW50VG9rZW4gPj0gbV90b2tlbnMuc2l6ZSgpKQorICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgcmV0dXJuIG1fdG9rZW5zW21fY3VycmVudFRva2VuXS5oYXNJbmRleDsKK30KKworaW50
IElEQktleVBhdGg6OmluZGV4VmFsdWUoKSBjb25zdAoreworICAgIGlmIChtX2N1cnJlbnRUb2tl
biA+PSBtX3Rva2Vucy5zaXplKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICByZXR1cm4g
bV90b2tlbnNbbV9jdXJyZW50VG9rZW5dLmluZGV4VmFsdWU7Cit9CisKK3ZvaWQgSURCS2V5UGF0
aDo6cGFyc2UoKQoreworICAgIFBhcnNlclN0YXRlIHN0YXRlID0gU3RhcnQ7CisKKyAgICB3aGls
ZSAoMSkgeworICAgICAgICBzd2l0Y2ggKHN0YXRlKSB7CisgICAgICAgIGNhc2UgU3RhcnQgOiB7
CisgICAgICAgICAgICBUb2tlblR5cGUgdG9rZW4gPSBtX2xleGVyLmN1cnJlbnRUb2tlbigpLnR5
cGU7CisgICAgICAgICAgICBpZiAodG9rZW4gPT0gVG9rSWRlbnRpZmllcikgeworICAgICAgICAg
ICAgICAgIHN0YXRlID0gSWRlbnRpZmllcjsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIGlmICh0b2tlbiA9PSBUb2tMQnJhY2tldCkgeworICAgICAg
ICAgICAgICAgIHN0YXRlID0gQXJyYXk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
ICAgICB9CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBJZGVu
dGlmaWVyIDogeworICAgICAgICAgICAgTGV4ZXI6OlBhcnNlclRva2VuIHRva2VuID0gbV9sZXhl
ci5jdXJyZW50VG9rZW4oKTsKKyAgICAgICAgICAgIEFTU0VSVCh0b2tlbi50eXBlID09IFRva0lk
ZW50aWZpZXIpOworICAgICAgICAgICAgVG9rZW4gaWRiVG9rZW47CisgICAgICAgICAgICBpZGJU
b2tlbi5pZGVudGlmaWVyID0gdG9rZW4uc3RyaW5nVG9rZW47CisgICAgICAgICAgICBtX3Rva2Vu
cy5hcHBlbmQoaWRiVG9rZW4pOworCisgICAgICAgICAgICBtX2xleGVyLm5leHQoKTsKKyAgICAg
ICAgICAgIHRva2VuID0gbV9sZXhlci5jdXJyZW50VG9rZW4oKTsKKyAgICAgICAgICAgIGlmICh0
b2tlbi50eXBlID09IFRva0RvdCkgeworICAgICAgICAgICAgICAgIHN0YXRlID0gRG90OworICAg
ICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKHRva2Vu
LnR5cGUgPT0gVG9rTEJyYWNrZXQpIHsKKyAgICAgICAgICAgICAgICBzdGF0ZSA9IEFycmF5Owor
ICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJu
OworICAgICAgICB9CisgICAgICAgIGNhc2UgQXJyYXkgOiB7CisgICAgICAgICAgICBMZXhlcjo6
UGFyc2VyVG9rZW4gdG9rZW4gPSBtX2xleGVyLmN1cnJlbnRUb2tlbigpOworICAgICAgICAgICAg
QVNTRVJUKHRva2VuLnR5cGUgPT0gVG9rTEJyYWNrZXQpOworCisgICAgICAgICAgICBtX2xleGVy
Lm5leHQoKTsKKyAgICAgICAgICAgIHRva2VuID0gbV9sZXhlci5jdXJyZW50VG9rZW4oKTsKKyAg
ICAgICAgICAgIGlmICh0b2tlbi50eXBlICE9IFRva051bWJlcikKKyAgICAgICAgICAgICAgICBy
ZXR1cm47CisKKyAgICAgICAgICAgIEFTU0VSVCh0b2tlbi50eXBlID09IFRva051bWJlcik7Cisg
ICAgICAgICAgICBUb2tlbiBpZGJUb2tlbjsKKyAgICAgICAgICAgIGlkYlRva2VuLmhhc0luZGV4
ID0gdHJ1ZTsKKyAgICAgICAgICAgIGlkYlRva2VuLmluZGV4VmFsdWUgPSB0b2tlbi5udW1iZXJU
b2tlbjsKKyAgICAgICAgICAgIG1fdG9rZW5zLmFwcGVuZChpZGJUb2tlbik7CisKKyAgICAgICAg
ICAgIG1fbGV4ZXIubmV4dCgpOworICAgICAgICAgICAgdG9rZW4gPSBtX2xleGVyLmN1cnJlbnRU
b2tlbigpOworICAgICAgICAgICAgaWYgKHRva2VuLnR5cGUgIT0gVG9rUkJyYWNrZXQpCisgICAg
ICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgICAgICBtX2xleGVyLm5leHQoKTsKKyAgICAg
ICAgICAgIHRva2VuID0gbV9sZXhlci5jdXJyZW50VG9rZW4oKTsKKyAgICAgICAgICAgIGlmICh0
b2tlbi50eXBlID09IFRva0RvdCkKKyAgICAgICAgICAgICAgICBzdGF0ZSA9IERvdDsKKyAgICAg
ICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBzdGF0ZSA9IFN0YXJ0OworICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBjYXNlIERvdDogeworICAgICAgICAgICAgTGV4
ZXI6OlBhcnNlclRva2VuIHRva2VuID0gbV9sZXhlci5jdXJyZW50VG9rZW4oKTsKKyAgICAgICAg
ICAgIEFTU0VSVCh0b2tlbi50eXBlID09IFRva0RvdCk7CisKKyAgICAgICAgICAgIG1fbGV4ZXIu
bmV4dCgpOworICAgICAgICAgICAgdG9rZW4gPSBtX2xleGVyLmN1cnJlbnRUb2tlbigpOworICAg
ICAgICAgICAgaWYgKHRva2VuLnR5cGUgIT0gVG9rSWRlbnRpZmllcikKKyAgICAgICAgICAgICAg
ICByZXR1cm47CisKKyAgICAgICAgICAgIHN0YXRlID0gSWRlbnRpZmllcjsKKyAgICAgICAgfQor
ICAgICAgICB9CisgICAgfQorfQorCitzdGF0aWMgaW5saW5lIGJvb2wgaXNTYWZlSWRlbnRpZmll
ckNoYXJhY3RlcihVQ2hhciBjKQoreworICAgIHJldHVybiAoYyA+PSAnYScgJiYgYyA8PSAneicp
IHx8IChjID49ICdBJyAmJiBjIDw9ICdaJyk7Cit9CisKK0lEQktleVBhdGg6OlRva2VuVHlwZSBJ
REJLZXlQYXRoOjpMZXhlcjo6bGV4KFBhcnNlclRva2VuJiB0b2tlbikKK3sKKyAgICB3aGlsZSAo
bV9wdHIgPCBtX2VuZCAmJiBpc0FTQ0lJU3BhY2UoKm1fcHRyKSkKKyAgICAgICAgKyttX3B0cjsK
KworICAgIGlmIChtX3B0ciA+PSBtX2VuZCkgeworICAgICAgICB0b2tlbi50eXBlID0gVG9rRW5k
OworICAgICAgICB0b2tlbi5zdGFydCA9IHRva2VuLmVuZCA9IG1fcHRyOworICAgICAgICByZXR1
cm4gVG9rRW5kOworICAgIH0KKyAgICBBU1NFUlQobV9wdHIgPD0gbV9lbmQpOworICAgIHRva2Vu
LnR5cGUgPSBUb2tFcnJvcjsKKyAgICB0b2tlbi5zdGFydCA9IG1fcHRyOworICAgIHN3aXRjaCAo
Km1fcHRyKSB7CisgICAgY2FzZSAnWyc6CisgICAgICAgIHRva2VuLnR5cGUgPSBUb2tMQnJhY2tl
dDsKKyAgICAgICAgdG9rZW4uZW5kID0gKyttX3B0cjsKKyAgICAgICAgcmV0dXJuIFRva0xCcmFj
a2V0OworICAgIGNhc2UgJ10nOgorICAgICAgICB0b2tlbi50eXBlID0gVG9rUkJyYWNrZXQ7Cisg
ICAgICAgIHRva2VuLmVuZCA9ICsrbV9wdHI7CisgICAgICAgIHJldHVybiBUb2tSQnJhY2tldDsK
KyAgICBjYXNlICcuJzoKKyAgICAgICAgdG9rZW4udHlwZSA9IFRva0RvdDsKKyAgICAgICAgdG9r
ZW4uZW5kID0gKyttX3B0cjsKKyAgICAgICAgcmV0dXJuIFRva0RvdDsKKyAgICBjYXNlICcwJzoK
KyAgICBjYXNlICcxJzoKKyAgICBjYXNlICcyJzoKKyAgICBjYXNlICczJzoKKyAgICBjYXNlICc0
JzoKKyAgICBjYXNlICc1JzoKKyAgICBjYXNlICc2JzoKKyAgICBjYXNlICc3JzoKKyAgICBjYXNl
ICc4JzoKKyAgICBjYXNlICc5JzoKKyAgICAgICAgcmV0dXJuIGxleE51bWJlcih0b2tlbik7Cisg
ICAgZGVmYXVsdDoKKyAgICAgICAgaWYgKGlzU2FmZUlkZW50aWZpZXJDaGFyYWN0ZXIoKm1fcHRy
KSkKKyAgICAgICAgICAgIHJldHVybiBsZXhJZGVudGlmaWVyKHRva2VuKTsKKyAgICB9CisgICAg
cmV0dXJuIFRva0Vycm9yOworfQorCitJREJLZXlQYXRoOjpUb2tlblR5cGUgSURCS2V5UGF0aDo6
TGV4ZXI6OmxleElkZW50aWZpZXIoUGFyc2VyVG9rZW4mIHRva2VuKQoreworICAgIGNvbnN0IFVD
aGFyKiBydW5TdGFydCA9IG1fcHRyOworICAgIFN0cmluZ0J1aWxkZXIgYnVpbGRlcjsKKyAgICB3
aGlsZSAobV9wdHIgPCBtX2VuZCAmJiBpc1NhZmVJZGVudGlmaWVyQ2hhcmFjdGVyKCptX3B0cikp
CisgICAgICAgICsrbV9wdHI7CisgICAgaWYgKHJ1blN0YXJ0IDwgbV9wdHIpCisgICAgICAgIGJ1
aWxkZXIuYXBwZW5kKFN0cmluZyhydW5TdGFydCwgbV9wdHIgLSBydW5TdGFydCkpOworCisgICAg
dG9rZW4uc3RyaW5nVG9rZW4gPSBidWlsZGVyLnRvU3RyaW5nKCk7CisgICAgdG9rZW4udHlwZSA9
IFRva0lkZW50aWZpZXI7CisgICAgdG9rZW4uZW5kID0gbV9wdHI7CisgICAgcmV0dXJuIFRva0lk
ZW50aWZpZXI7Cit9CisKK0lEQktleVBhdGg6OlRva2VuVHlwZSBJREJLZXlQYXRoOjpMZXhlcjo6
bGV4TnVtYmVyKFBhcnNlclRva2VuJiB0b2tlbikKK3sKKyAgICBpZiAobV9wdHIgPCBtX2VuZCAm
JiAqbV9wdHIgPT0gJzAnKSAvLyAwCisgICAgICAgICsrbV9wdHI7CisgICAgZWxzZSBpZiAobV9w
dHIgPCBtX2VuZCAmJiAqbV9wdHIgPj0gJzEnICYmICptX3B0ciA8PSAnOScpIHsgLy8gWzEtOV0K
KyAgICAgICAgKyttX3B0cjsKKyAgICAgICAgLy8gWzAtOV0qCisgICAgICAgIHdoaWxlIChtX3B0
ciA8IG1fZW5kICYmIGlzQVNDSUlEaWdpdCgqbV9wdHIpKQorICAgICAgICAgICAgKyttX3B0cjsK
KyAgICB9IGVsc2UKKyAgICAgICAgcmV0dXJuIFRva0Vycm9yOworCisgICAgdG9rZW4udHlwZSA9
IFRva051bWJlcjsKKyAgICB0b2tlbi5lbmQgPSBtX3B0cjsKKyAgICBWZWN0b3I8Y2hhciwgNjQ+
IGJ1ZmZlcih0b2tlbi5lbmQgLSB0b2tlbi5zdGFydCArIDEpOworICAgIGludCBpOworICAgIGZv
ciAoaSA9IDA7IGkgPCB0b2tlbi5lbmQgLSB0b2tlbi5zdGFydDsgaSsrKSB7CisgICAgICAgIEFT
U0VSVChzdGF0aWNfY2FzdDxjaGFyPih0b2tlbi5zdGFydFtpXSkgPT0gdG9rZW4uc3RhcnRbaV0p
OworICAgICAgICBidWZmZXJbaV0gPSBzdGF0aWNfY2FzdDxjaGFyPih0b2tlbi5zdGFydFtpXSk7
CisgICAgfQorICAgIGJ1ZmZlcltpXSA9IDA7CisgICAgY2hhciogZW5kOworICAgIHRva2VuLm51
bWJlclRva2VuID0gV1RGOjpzdHJ0b2QoYnVmZmVyLmRhdGEoKSwgJmVuZCk7CisgICAgQVNTRVJU
KGJ1ZmZlci5kYXRhKCkgKyAodG9rZW4uZW5kIC0gdG9rZW4uc3RhcnQpID09IGVuZCk7CisgICAg
cmV0dXJuIFRva051bWJlcjsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYg
Ly8gRU5BQkxFKElOREVYRURfREFUQUJBU0UpCmRpZmYgLS1naXQgYS9XZWJDb3JlL3N0b3JhZ2Uv
SURCS2V5UGF0aC5oIGIvV2ViQ29yZS9zdG9yYWdlL0lEQktleVBhdGguaApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5l
YmNkNDVlODg3YTU4NzM4MDQ2YjNmYzZlMGRjNTYxMjY3NTYyYzUzCi0tLSAvZGV2L251bGwKKysr
IGIvV2ViQ29yZS9zdG9yYWdlL0lEQktleVBhdGguaApAQCAtMCwwICsxLDEyMiBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuICBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
QU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVE
CisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBP
TiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisK
KyNpZm5kZWYgSURCS2V5UGF0aF9oCisjZGVmaW5lIElEQktleVBhdGhfaAorCisjaWYgRU5BQkxF
KElOREVYRURfREFUQUJBU0UpCisKKyNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgorI2luY2x1
ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorI2luY2x1ZGUg
PHd0Zi90ZXh0L1dURlN0cmluZy5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIElE
QktleVBhdGggOiBwdWJsaWMgUmVmQ291bnRlZDxJREJLZXlQYXRoPiB7CitwdWJsaWM6CisgICAg
c3RhdGljIFBhc3NSZWZQdHI8SURCS2V5UGF0aD4gY3JlYXRlKGNvbnN0IFN0cmluZyYpOworICAg
IH5JREJLZXlQYXRoKCk7CisKKyAgICBib29sIGhhc05leHQoKTsKKyAgICB2b2lkIG5leHQoKTsK
KyAgICBTdHJpbmcgaWRlbnRpZmllcigpOworICAgIGJvb2wgaGFzSW5kZXgoKSBjb25zdDsKKyAg
ICBpbnQgaW5kZXhWYWx1ZSgpIGNvbnN0OworCitwcml2YXRlOgorICAgIHN0cnVjdCBUb2tlbiB7
CisgICAgICAgIFN0cmluZyBpZGVudGlmaWVyOworICAgICAgICBib29sIGhhc0luZGV4OworICAg
ICAgICBpbnQgaW5kZXhWYWx1ZTsKKyAgICAgICAgVG9rZW4oKSA6IGhhc0luZGV4KGZhbHNlKSwg
aW5kZXhWYWx1ZSgwKSB7fQorICAgIH07CisgICAgZXhwbGljaXQgSURCS2V5UGF0aChjb25zdCBT
dHJpbmcmKTsKKworICAgIFN0cmluZyBtX2tleVBhdGg7CisgICAgVmVjdG9yPFRva2VuPiBtX3Rv
a2VuczsKKyAgICBpbnQgbV9jdXJyZW50VG9rZW47CisKKyAgICAvLyBUaGlzIGlzIGEgc2ltcGxp
ZmllZCBwYXJzZXIgbG9vc2VseSBiYXNlZCBvbiBMaXRlcmFsUGFyc2VyLgorICAgIC8vIEFuIElE
QktleVBhdGggaXMgZGVmaW5lZCBhcyBhIHNlcXVlbmNlIG9mOgorICAgIC8vIGlkZW50aWZpZXJB
ey5pZGVudGlmaWVyQntbbnVtZXJpY192YWx1ZV19CisgICAgLy8gd2hlcmUgInt9IiByZXByZXNl
bnRzIGFuIG9wdGlvbmFsIHBhcnQKKyAgICAvLyBUaGUgYmFzaWMgc3RhdGUgbWFjaGluZSBpczoK
KyAgICAvLyBTdGFydCA9PiB7SWRlbnRpZmllciwgQXJyYXl9CisgICAgLy8gSWRlbnRpZmllciA9
PiB7RG90LCBBcnJheX0KKyAgICAvLyBBcnJheSA9PiB7U3RhcnQsIERvdH0KKyAgICAvLyBEb3Qg
PT4ge0lkZW50aWZpZXJ9CisgICAgLy8gSXQgYmFpbHMgb3V0IGFzIHNvb24gYXMgaXQgZmluZHMg
YW4gZXJyb3IsIGJ1dCBkb2Vzbid0IGRpc2NhcmQgdGhlIGJpdHMgaXQgbWFuYWdlZCB0byBwYXJz
ZS4KKyAgICBlbnVtIFBhcnNlclN0YXRlIHsgIFN0YXJ0LCBJZGVudGlmaWVyLCBBcnJheSwgRG90
IH07CisgICAgZW51bSBUb2tlblR5cGUgeyBUb2tMQnJhY2tldCwgVG9rUkJyYWNrZXQsCisgICAg
ICAgICAgICAgICAgICAgICBUb2tJZGVudGlmaWVyLCBUb2tOdW1iZXIsCisgICAgICAgICAgICAg
ICAgICAgICBUb2tEb3QsIFRva0VuZCwgVG9rRXJyb3IgfTsKKworICAgIHZvaWQgcGFyc2UoKTsK
KworICAgIGNsYXNzIExleGVyIHsKKyAgICBwdWJsaWM6CisgICAgICAgIHN0cnVjdCBQYXJzZXJU
b2tlbiB7CisgICAgICAgICAgICBUb2tlblR5cGUgdHlwZTsKKyAgICAgICAgICAgIGNvbnN0IFVD
aGFyKiBzdGFydDsKKyAgICAgICAgICAgIGNvbnN0IFVDaGFyKiBlbmQ7CisgICAgICAgICAgICBT
dHJpbmcgc3RyaW5nVG9rZW47CisgICAgICAgICAgICBkb3VibGUgbnVtYmVyVG9rZW47CisgICAg
ICAgIH07CisgICAgICAgIGV4cGxpY2l0IExleGVyKGNvbnN0IFN0cmluZyYgcykKKyAgICAgICAg
ICAgIDogbV9zdHJpbmcocykKKyAgICAgICAgICAgICwgbV9wdHIocy5jaGFyYWN0ZXJzKCkpCisg
ICAgICAgICAgICAsIG1fZW5kKHMuY2hhcmFjdGVycygpICsgcy5sZW5ndGgoKSkKKyAgICAgICAg
eworICAgICAgICB9CisKKyAgICAgICAgVG9rZW5UeXBlIG5leHQoKQorICAgICAgICB7CisgICAg
ICAgICAgICByZXR1cm4gbGV4KG1fY3VycmVudFRva2VuKTsKKyAgICAgICAgfQorCisgICAgICAg
IGNvbnN0IFBhcnNlclRva2VuJiBjdXJyZW50VG9rZW4oKQorICAgICAgICB7CisgICAgICAgICAg
ICByZXR1cm4gbV9jdXJyZW50VG9rZW47CisgICAgICAgIH0KKworICAgIHByaXZhdGU6CisgICAg
ICAgIFRva2VuVHlwZSBsZXgoUGFyc2VyVG9rZW4mKTsKKyAgICAgICAgVG9rZW5UeXBlIGxleElk
ZW50aWZpZXIoUGFyc2VyVG9rZW4mKTsKKyAgICAgICAgVG9rZW5UeXBlIGxleE51bWJlcihQYXJz
ZXJUb2tlbiYpOworICAgICAgICBQYXJzZXJUb2tlbiBtX2N1cnJlbnRUb2tlbjsKKyAgICAgICAg
U3RyaW5nIG1fc3RyaW5nOworICAgICAgICBjb25zdCBVQ2hhciogbV9wdHI7CisgICAgICAgIGNv
bnN0IFVDaGFyKiBtX2VuZDsKKyAgICAgfTsKKworICAgIExleGVyIG1fbGV4ZXI7Cit9OworCit9
IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZgorCisjZW5kaWYgLy8gSURCS2V5UGF0aF9o
CmRpZmYgLS1naXQgYS9XZWJDb3JlL3N0b3JhZ2UvSURCS2V5UGF0aC5pZGwgYi9XZWJDb3JlL3N0
b3JhZ2UvSURCS2V5UGF0aC5pZGwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMGNiZTI5NmQzZGFjOWU3NDk2Mjc2MTE2
YmJkNzRlZjMxNTQyZDI4ZgotLS0gL2Rldi9udWxsCisrKyBiL1dlYkNvcmUvc3RvcmFnZS9JREJL
ZXlQYXRoLmlkbApAQCAtMCwwICsxLDM4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwIEdv
b2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAi
QVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAq
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworbW9kdWxlIHN0b3JhZ2UgeworCisg
ICAgaW50ZXJmYWNlIFsKKyAgICAgICAgQ29uZGl0aW9uYWw9SU5ERVhFRF9EQVRBQkFTRQorICAg
IF0gSURCS2V5UGF0aCB7CisgICAgICAgIGJvb2xlYW4gaGFzTmV4dCgpOworICAgICAgICB2b2lk
IG5leHQoKTsKKyAgICAgICAgcmVhZG9ubHkgYXR0cmlidXRlIERPTVN0cmluZyBpZGVudGlmaWVy
OworICAgICAgICByZWFkb25seSBhdHRyaWJ1dGUgYm9vbGVhbiBoYXNJbmRleDsKKyAgICAgICAg
cmVhZG9ubHkgYXR0cmlidXRlIGludCBpbmRleFZhbHVlOworICAgIH07CisKK30KZGlmZiAtLWdp
dCBhL1dlYkNvcmUvc3RvcmFnZS9JbmRleGVkRGF0YWJhc2VSZXF1ZXN0LmNwcCBiL1dlYkNvcmUv
c3RvcmFnZS9JbmRleGVkRGF0YWJhc2VSZXF1ZXN0LmNwcAppbmRleCA0NWFlMWJkMzAwODcxY2I0
MmZjYTMzNzk4Y2M1NmY0ZjhmZDgxNjE5Li5lYjYzYmQ5NTliYmUxNzI1NzFlYTVhYjlmYjg1ZGZi
MzBmYWI2NTIxIDEwMDY0NAotLS0gYS9XZWJDb3JlL3N0b3JhZ2UvSW5kZXhlZERhdGFiYXNlUmVx
dWVzdC5jcHAKKysrIGIvV2ViQ29yZS9zdG9yYWdlL0luZGV4ZWREYXRhYmFzZVJlcXVlc3QuY3Bw
CkBAIC0zMyw2ICszMyw3IEBACiAjaW5jbHVkZSAiRXhjZXB0aW9uQ29kZS5oIgogI2luY2x1ZGUg
IkZyYW1lLmgiCiAjaW5jbHVkZSAiSURCRGF0YWJhc2UuaCIKKyNpbmNsdWRlICJJREJLZXlQYXRo
LmgiCiAjaW5jbHVkZSAiSURCS2V5UmFuZ2UuaCIKICNpbmNsdWRlICJJREJSZXF1ZXN0LmgiCiAj
aW5jbHVkZSAiSW5kZXhlZERhdGFiYXNlLmgiCkBAIC05MSw2ICs5MiwxMSBAQCBQYXNzUmVmUHRy
PElEQktleVJhbmdlPiBJbmRleGVkRGF0YWJhc2VSZXF1ZXN0OjptYWtlQm91bmRLZXlSYW5nZShQ
YXNzUmVmUHRyPFNlcgogICAgIHJldHVybiBJREJLZXlSYW5nZTo6Y3JlYXRlKGxlZnQsIHJpZ2h0
LCBmbGFncyk7CiB9CiAKK1Bhc3NSZWZQdHI8SURCS2V5UGF0aD4gSW5kZXhlZERhdGFiYXNlUmVx
dWVzdDo6bWFrZUtleVBhdGgoY29uc3QgU3RyaW5nJiBrZXlQYXRoKQoreworICAgIHJldHVybiBJ
REJLZXlQYXRoOjpjcmVhdGUoa2V5UGF0aCk7Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
IAogI2VuZGlmIC8vIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQpkaWZmIC0tZ2l0IGEvV2ViQ29y
ZS9zdG9yYWdlL0luZGV4ZWREYXRhYmFzZVJlcXVlc3QuaCBiL1dlYkNvcmUvc3RvcmFnZS9JbmRl
eGVkRGF0YWJhc2VSZXF1ZXN0LmgKaW5kZXggZjUwNWQ5ZDcyY2RhZjY2NTRiMDMyYTAyM2M1ZTZk
NzI2ZTlkMTc4ZC4uNGZhNjU2ZjA4NmU0NDRmNmIxOGZkMjliODA4MTdkYjY4NDgzMzAxOCAxMDA2
NDQKLS0tIGEvV2ViQ29yZS9zdG9yYWdlL0luZGV4ZWREYXRhYmFzZVJlcXVlc3QuaAorKysgYi9X
ZWJDb3JlL3N0b3JhZ2UvSW5kZXhlZERhdGFiYXNlUmVxdWVzdC5oCkBAIC00MCw2ICs0MCw3IEBA
CiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIElEQkFueTsKK2NsYXNzIElEQktleVBhdGg7
CiBjbGFzcyBJREJLZXlSYW5nZTsKIGNsYXNzIElEQlJlcXVlc3Q7CiBjbGFzcyBJbmRleGVkRGF0
YWJhc2U7CkBAIC02MCw2ICs2MSw4IEBAIHB1YmxpYzoKICAgICBQYXNzUmVmUHRyPElEQktleVJh
bmdlPiBtYWtlUmlnaHRCb3VuZEtleVJhbmdlKFBhc3NSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZh
bHVlPiBib3VuZCwgYm9vbCBvcGVuID0gZmFsc2UpOwogICAgIFBhc3NSZWZQdHI8SURCS2V5UmFu
Z2U+IG1ha2VCb3VuZEtleVJhbmdlKFBhc3NSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiBs
ZWZ0LCBQYXNzUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4gcmlnaHQsIGJvb2wgb3Blbkxl
ZnQgPSBmYWxzZSwgYm9vbCBvcGVuUmlnaHQgPSBmYWxzZSk7CiAKKyAgICAvLyBGSVhNRTogSURC
S2V5UGF0aCBpcyBwdWJsaWMgb25seSB0byBhbGxvdyB0ZXN0aW5nLgorICAgIFBhc3NSZWZQdHI8
SURCS2V5UGF0aD4gbWFrZUtleVBhdGgoY29uc3QgU3RyaW5nJik7CiBwcml2YXRlOgogICAgIElu
ZGV4ZWREYXRhYmFzZVJlcXVlc3QoSW5kZXhlZERhdGFiYXNlKik7CiAKZGlmZiAtLWdpdCBhL1dl
YkNvcmUvc3RvcmFnZS9JbmRleGVkRGF0YWJhc2VSZXF1ZXN0LmlkbCBiL1dlYkNvcmUvc3RvcmFn
ZS9JbmRleGVkRGF0YWJhc2VSZXF1ZXN0LmlkbAppbmRleCA1MDJlODA0YmI2NWJkNmJmODMyMzM0
ZmY1MDg2OGM5M2VjYzNhZjhkLi4xYjYzMDA0NGMzZGRjNGJmYTNiZDYzNDdjNTIzNTU3MmE3OWZm
NmUzIDEwMDY0NAotLS0gYS9XZWJDb3JlL3N0b3JhZ2UvSW5kZXhlZERhdGFiYXNlUmVxdWVzdC5p
ZGwKKysrIGIvV2ViQ29yZS9zdG9yYWdlL0luZGV4ZWREYXRhYmFzZVJlcXVlc3QuaWRsCkBAIC0z
Myw2ICszMyw4IEBAIG1vZHVsZSBzdG9yYWdlIHsKICAgICAgICAgSURCS2V5UmFuZ2UgbWFrZUxl
ZnRCb3VuZEtleVJhbmdlKGluIFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZSBib3VuZCwgaW4gW09wdGlv
bmFsXSBib29sZWFuIG9wZW4pOwogICAgICAgICBJREJLZXlSYW5nZSBtYWtlUmlnaHRCb3VuZEtl
eVJhbmdlKGluIFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZSBib3VuZCwgaW4gW09wdGlvbmFsXSBib29s
ZWFuIG9wZW4pOwogICAgICAgICBJREJLZXlSYW5nZSBtYWtlQm91bmRLZXlSYW5nZShpbiBTZXJp
YWxpemVkU2NyaXB0VmFsdWUgbGVmdCwgaW4gU2VyaWFsaXplZFNjcmlwdFZhbHVlIHJpZ2h0LCBp
biBbT3B0aW9uYWxdIGJvb2xlYW4gb3BlbkxlZnQsIGluIFtPcHRpb25hbF0gYm9vbGVhbiBvcGVu
UmlnaHQpOworICAgICAgICAvLyBGSVhNRTogSURCS2V5UGF0aCBpcyBwdWJsaWMgb25seSB0byBh
bGxvdyB0ZXN0aW5nLgorICAgICAgICBJREJLZXlQYXRoIG1ha2VLZXlQYXRoKGluIERPTVN0cmlu
ZyBrZXlQYXRoKTsKICAgICB9OwogCiB9Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>62593</attachid>
            <date>2010-07-26 12:08:09 -0700</date>
            <delta_ts>2010-07-27 09:59:06 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-42976-20100726200807.patch</filename>
            <type>text/plain</type>
            <size>27898</size>
            <attacher name="Marcus Bulach">bulach</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxv
ZwppbmRleCAyZjhjNzM0MTNjZWRlYzE2ZTZhOGQwYzkwOGI0YzNlYTJlYzJiZjk4Li4wNzQyMWNh
YzhhMjg3MDQ1MDBkYzhhYzM1OGZkNjJkNDI4MzQ4NTcxIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0
cy9DaGFuZ2VMb2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDUgKzEsMTkgQEAK
IDIwMTAtMDctMjYgIE1hcmN1cyBCdWxhY2ggIDxidWxhY2hAY2hyb21pdW0ub3JnPgogCisgICAg
ICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEltcGxlbWVudCBJREJL
ZXlQYXRoIHBhcnNlci4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTQyOTc2CisKKyAgICAgICAgKiBzdG9yYWdlL2luZGV4ZWRkYi9pZGIta2V5cGF0aC1l
eHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIHN0b3JhZ2UvaW5kZXhlZGRiL2lkYi1rZXlw
YXRoLmh0bWw6IEFkZGVkLgorICAgICAgICAqIHN0b3JhZ2UvaW5kZXhlZGRiL3NjcmlwdC10ZXN0
cy9pZGIta2V5cGF0aC5qczogQWRkZWQuCisgICAgICAgIChjaGVja0tleVBhdGgpOgorICAgICAg
ICAoZXhwZWN0ZWRSZXN1bHQpOgorICAgICAgICAodGVzdCk6CisKKzIwMTAtMDctMjYgIE1hcmN1
cyBCdWxhY2ggIDxidWxhY2hAY2hyb21pdW0ub3JnPgorCiAgICAgICAgIFVucmV2aWV3ZWQuICBB
ZGQgY2hyb21pdW0gZXhwZWN0YXRpb25zIGZvciBmYWlsaW5nIHRlc3RzLgogCiAgICAgICAgIHRh
Ymxlcy9tb3ppbGxhL290aGVyL3NsYXNobG9nby5odG1sIGZhaWxzIGFmdGVyIHI2Mzk5NApkaWZm
IC0tZ2l0IGEvTGF5b3V0VGVzdHMvc3RvcmFnZS9pbmRleGVkZGIvaWRiLWtleXBhdGgtZXhwZWN0
ZWQudHh0IGIvTGF5b3V0VGVzdHMvc3RvcmFnZS9pbmRleGVkZGIvaWRiLWtleXBhdGgtZXhwZWN0
ZWQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAuLjI3M2MwN2Y4MDdkNDIwZjIxNDYxNjRhMzlhMTU5ZTc2NDc2YjY0
Y2MKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9zdG9yYWdlL2luZGV4ZWRkYi9pZGIt
a2V5cGF0aC1leHBlY3RlZC50eHQKQEAgLTAsMCArMSwxMTIgQEAKK1Rlc3QgSW5kZXhlZERCJ3Mg
S2V5UGF0aC4KKworT24gc3VjY2VzcywgeW91IHdpbGwgc2VlIGEgc2VyaWVzIG9mICJQQVNTIiBt
ZXNzYWdlcywgZm9sbG93ZWQgYnkgIlRFU1QgQ09NUExFVEUiLgorCisKK0NoZWNraW5nIGZvby5i
YXIuem9vCitpbmRleGVkREIubWFrZUtleVBhdGgoJ2Zvby5iYXIuem9vJykKK1BBU1Mga2V5UGF0
aC5pZGVudGlmaWVyIGlzICJmb28iCitQQVNTIGtleVBhdGguaGFzSW5kZXggaXMgZmFsc2UKK1BB
U1Mga2V5UGF0aC5pbmRleFZhbHVlIGlzIDAKK1BBU1Mga2V5UGF0aC5pZGVudGlmaWVyIGlzICJi
YXIiCitQQVNTIGtleVBhdGguaGFzSW5kZXggaXMgZmFsc2UKK1BBU1Mga2V5UGF0aC5pbmRleFZh
bHVlIGlzIDAKK1BBU1Mga2V5UGF0aC5pZGVudGlmaWVyIGlzICJ6b28iCitQQVNTIGtleVBhdGgu
aGFzSW5kZXggaXMgZmFsc2UKK1BBU1Mga2V5UGF0aC5pbmRleFZhbHVlIGlzIDAKK1BBU1MgMyBp
cyAzCisKK0NoZWNraW5nIGFbMzRdWzIwXS5mb29bMl0uYmFyCitpbmRleGVkREIubWFrZUtleVBh
dGgoJ2FbMzRdWzIwXS5mb29bMl0uYmFyJykKK1BBU1Mga2V5UGF0aC5pZGVudGlmaWVyIGlzICJh
IgorUEFTUyBrZXlQYXRoLmhhc0luZGV4IGlzIGZhbHNlCitQQVNTIGtleVBhdGguaW5kZXhWYWx1
ZSBpcyAwCitQQVNTIGtleVBhdGguaWRlbnRpZmllciBpcyAiIgorUEFTUyBrZXlQYXRoLmhhc0lu
ZGV4IGlzIHRydWUKK1BBU1Mga2V5UGF0aC5pbmRleFZhbHVlIGlzIDM0CitQQVNTIGtleVBhdGgu
aWRlbnRpZmllciBpcyAiIgorUEFTUyBrZXlQYXRoLmhhc0luZGV4IGlzIHRydWUKK1BBU1Mga2V5
UGF0aC5pbmRleFZhbHVlIGlzIDIwCitQQVNTIGtleVBhdGguaWRlbnRpZmllciBpcyAiZm9vIgor
UEFTUyBrZXlQYXRoLmhhc0luZGV4IGlzIGZhbHNlCitQQVNTIGtleVBhdGguaW5kZXhWYWx1ZSBp
cyAwCitQQVNTIGtleVBhdGguaWRlbnRpZmllciBpcyAiIgorUEFTUyBrZXlQYXRoLmhhc0luZGV4
IGlzIHRydWUKK1BBU1Mga2V5UGF0aC5pbmRleFZhbHVlIGlzIDIKK1BBU1Mga2V5UGF0aC5pZGVu
dGlmaWVyIGlzICJiYXIiCitQQVNTIGtleVBhdGguaGFzSW5kZXggaXMgZmFsc2UKK1BBU1Mga2V5
UGF0aC5pbmRleFZhbHVlIGlzIDAKK1BBU1MgNiBpcyA2CisKK0NoZWNraW5nIGFbIDM0IF0uWm9v
WzJdIC5jCitpbmRleGVkREIubWFrZUtleVBhdGgoJ2FbIDM0IF0uWm9vWzJdIC5jJykKK1BBU1Mg
a2V5UGF0aC5pZGVudGlmaWVyIGlzICJhIgorUEFTUyBrZXlQYXRoLmhhc0luZGV4IGlzIGZhbHNl
CitQQVNTIGtleVBhdGguaW5kZXhWYWx1ZSBpcyAwCitQQVNTIGtleVBhdGguaWRlbnRpZmllciBp
cyAiIgorUEFTUyBrZXlQYXRoLmhhc0luZGV4IGlzIHRydWUKK1BBU1Mga2V5UGF0aC5pbmRleFZh
bHVlIGlzIDM0CitQQVNTIGtleVBhdGguaWRlbnRpZmllciBpcyAiWm9vIgorUEFTUyBrZXlQYXRo
Lmhhc0luZGV4IGlzIGZhbHNlCitQQVNTIGtleVBhdGguaW5kZXhWYWx1ZSBpcyAwCitQQVNTIGtl
eVBhdGguaWRlbnRpZmllciBpcyAiIgorUEFTUyBrZXlQYXRoLmhhc0luZGV4IGlzIHRydWUKK1BB
U1Mga2V5UGF0aC5pbmRleFZhbHVlIGlzIDIKK1BBU1Mga2V5UGF0aC5pZGVudGlmaWVyIGlzICJj
IgorUEFTUyBrZXlQYXRoLmhhc0luZGV4IGlzIGZhbHNlCitQQVNTIGtleVBhdGguaW5kZXhWYWx1
ZSBpcyAwCitQQVNTIDUgaXMgNQorCitDaGVja2luZyBhW1szNF1dLmJbMl0uYworaW5kZXhlZERC
Lm1ha2VLZXlQYXRoKCdhW1szNF1dLmJbMl0uYycpCitQQVNTIGtleVBhdGguaWRlbnRpZmllciBp
cyAiYSIKK1BBU1Mga2V5UGF0aC5oYXNJbmRleCBpcyBmYWxzZQorUEFTUyBrZXlQYXRoLmluZGV4
VmFsdWUgaXMgMAorUEFTUyAxIGlzIDEKK1BBU1Mga2V5UGF0aC5wYXJzZXJFcnJvciBpcyAzCisK
K0NoZWNraW5nIGFbWzM0XS5iWzJdLmMKK2luZGV4ZWREQi5tYWtlS2V5UGF0aCgnYVtbMzRdLmJb
Ml0uYycpCitQQVNTIGtleVBhdGguaWRlbnRpZmllciBpcyAiYSIKK1BBU1Mga2V5UGF0aC5oYXNJ
bmRleCBpcyBmYWxzZQorUEFTUyBrZXlQYXRoLmluZGV4VmFsdWUgaXMgMAorUEFTUyAxIGlzIDEK
K1BBU1Mga2V5UGF0aC5wYXJzZXJFcnJvciBpcyAzCisKK0NoZWNraW5nIGFbWzM0LmJbMl0uYwor
aW5kZXhlZERCLm1ha2VLZXlQYXRoKCdhW1szNC5iWzJdLmMnKQorUEFTUyBrZXlQYXRoLmlkZW50
aWZpZXIgaXMgImEiCitQQVNTIGtleVBhdGguaGFzSW5kZXggaXMgZmFsc2UKK1BBU1Mga2V5UGF0
aC5pbmRleFZhbHVlIGlzIDAKK1BBU1MgMSBpcyAxCitQQVNTIGtleVBhdGgucGFyc2VyRXJyb3Ig
aXMgMworCitDaGVja2luZyArYVszNF0uYlsyXS5jCitpbmRleGVkREIubWFrZUtleVBhdGgoJyth
WzM0XS5iWzJdLmMnKQorUEFTUyAwIGlzIDAKK1BBU1Mga2V5UGF0aC5wYXJzZXJFcnJvciBpcyAx
CisKK0NoZWNraW5nICVhWzM0XS5iWzJdLmMKK2luZGV4ZWREQi5tYWtlS2V5UGF0aCgnJWFbMzRd
LmJbMl0uYycpCitQQVNTIDAgaXMgMAorUEFTUyBrZXlQYXRoLnBhcnNlckVycm9yIGlzIDEKKwor
Q2hlY2tpbmcgYXtbMzRdfS5iWzJdLmMKK2luZGV4ZWREQi5tYWtlS2V5UGF0aCgnYXtbMzRdfS5i
WzJdLmMnKQorUEFTUyBrZXlQYXRoLmlkZW50aWZpZXIgaXMgImEiCitQQVNTIGtleVBhdGguaGFz
SW5kZXggaXMgZmFsc2UKK1BBU1Mga2V5UGF0aC5pbmRleFZhbHVlIGlzIDAKK1BBU1MgMSBpcyAx
CitQQVNTIGtleVBhdGgucGFyc2VyRXJyb3IgaXMgMgorCitDaGVja2luZyBhLi5iWzJdLmMKK2lu
ZGV4ZWREQi5tYWtlS2V5UGF0aCgnYS4uYlsyXS5jJykKK1BBU1Mga2V5UGF0aC5pZGVudGlmaWVy
IGlzICJhIgorUEFTUyBrZXlQYXRoLmhhc0luZGV4IGlzIGZhbHNlCitQQVNTIGtleVBhdGguaW5k
ZXhWYWx1ZSBpcyAwCitQQVNTIDEgaXMgMQorUEFTUyBrZXlQYXRoLnBhcnNlckVycm9yIGlzIDQK
KworUEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQorCitURVNUIENPTVBMRVRFCmRpZmYg
LS1naXQgYS9MYXlvdXRUZXN0cy9zdG9yYWdlL2luZGV4ZWRkYi9pZGIta2V5cGF0aC5odG1sIGIv
TGF5b3V0VGVzdHMvc3RvcmFnZS9pbmRleGVkZGIvaWRiLWtleXBhdGguaHRtbApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Li4yYjI0Nzg3ZDk0YTdjMTVmM2IwZWJmZDU1NDdiMTM2NDhjNDI2NjAwCi0tLSAvZGV2L251bGwK
KysrIGIvTGF5b3V0VGVzdHMvc3RvcmFnZS9pbmRleGVkZGIvaWRiLWtleXBhdGguaHRtbApAQCAt
MCwwICsxLDEzIEBACis8aHRtbD4KKzxoZWFkPgorPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVm
PSIuLi8uLi9mYXN0L2pzL3Jlc291cmNlcy9qcy10ZXN0LXN0eWxlLmNzcyI+Cis8c2NyaXB0IHNy
Yz0iLi4vLi4vZmFzdC9qcy9yZXNvdXJjZXMvanMtdGVzdC1wcmUuanMiPjwvc2NyaXB0PgorPHNj
cmlwdCBzcmM9Ii4uLy4uL2Zhc3QvanMvcmVzb3VyY2VzL2pzLXRlc3QtcG9zdC1mdW5jdGlvbi5q
cyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0icmVzb3VyY2VzL3NoYXJlZC5qcyI+PC9zY3JpcHQ+
Cis8L2hlYWQ+Cis8Ym9keT4KKzxwIGlkPSJkZXNjcmlwdGlvbiI+PC9wPgorPGRpdiBpZD0iY29u
c29sZSI+PC9kaXY+Cis8c2NyaXB0IHNyYz0ic2NyaXB0LXRlc3RzL2lkYi1rZXlwYXRoLmpzIj48
L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3N0b3Jh
Z2UvaW5kZXhlZGRiL3NjcmlwdC10ZXN0cy9pZGIta2V5cGF0aC5qcyBiL0xheW91dFRlc3RzL3N0
b3JhZ2UvaW5kZXhlZGRiL3NjcmlwdC10ZXN0cy9pZGIta2V5cGF0aC5qcwpuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi41
YWFmNDM3OTA1NmU0ODQwOTVmYmQ1ZTdiYWU3ZGNiMGQ5ZGE3MGY0Ci0tLSAvZGV2L251bGwKKysr
IGIvTGF5b3V0VGVzdHMvc3RvcmFnZS9pbmRleGVkZGIvc2NyaXB0LXRlc3RzL2lkYi1rZXlwYXRo
LmpzCkBAIC0wLDAgKzEsNTIgQEAKK2Rlc2NyaXB0aW9uKCJUZXN0IEluZGV4ZWREQidzIEtleVBh
dGguIik7CitpZiAod2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKQorICAgIGxheW91dFRlc3RD
b250cm9sbGVyLndhaXRVbnRpbERvbmUoKTsKKworZnVuY3Rpb24gY2hlY2tLZXlQYXRoKGtleVBh
dGhWYWx1ZSwgdG9rZW5zLCBwYXJzZXJFcnJvcikKK3sKKyAgICBkZWJ1ZygiQ2hlY2tpbmcgIiAr
IGtleVBhdGhWYWx1ZSk7CisgICAga2V5UGF0aCA9IGV2YWxBbmRMb2coImluZGV4ZWREQi5tYWtl
S2V5UGF0aCgnIiArIGtleVBhdGhWYWx1ZSArICInKSIpOworICAgIGZvciAodmFyIGkgPSAwOyBr
ZXlQYXRoLmhhc05leHQoKTsga2V5UGF0aC5uZXh0KCksICsraSkgeworICAgICAgICBleHBlY3Rl
ZCA9IHRva2VuczsKKyAgICAgICAgc2hvdWxkQmVFcXVhbFRvU3RyaW5nKCJrZXlQYXRoLmlkZW50
aWZpZXIiLCB0b2tlbnNbaV0uaWRlbnRpZmllcik7CisgICAgICAgIHNob3VsZEJlKCJrZXlQYXRo
Lmhhc0luZGV4IiwgIiIgKyBleHBlY3RlZFtpXS5oYXNJbmRleCk7CisgICAgICAgIHNob3VsZEJl
KCJrZXlQYXRoLmluZGV4VmFsdWUiLCAiIiArIHRva2Vuc1tpXS5pbmRleFZhbHVlKTsKKyAgICB9
CisgICAgc2hvdWxkQmUoIiIgKyBpLCAiIiArIHRva2Vucy5sZW5ndGgpOworICAgIGlmIChwYXJz
ZXJFcnJvciAhPSB1bmRlZmluZWQpCisgICAgICAgIHNob3VsZEJlKCJrZXlQYXRoLnBhcnNlckVy
cm9yIiwgIiIgKyBwYXJzZXJFcnJvcik7CisgICAgZGVidWcoIiIpOworfQorCitmdW5jdGlvbiBl
eHBlY3RlZFJlc3VsdChleHBlY3RlZElkZW50aWZpZXIsIGV4cGVjdGVkSGFzSW5kZXgsIGV4cGVj
dGVkaW5kZXhWYWx1ZSkKK3sKKyAgICByZXR1cm4ge2lkZW50aWZpZXI6IGV4cGVjdGVkSWRlbnRp
ZmllciwgaGFzSW5kZXg6IGV4cGVjdGVkSGFzSW5kZXgsIGluZGV4VmFsdWU6IGV4cGVjdGVkaW5k
ZXhWYWx1ZX07Cit9CisKK2Z1bmN0aW9uIHRlc3QoKQoreworICAgIGNoZWNrS2V5UGF0aCgiZm9v
LmJhci56b28iLCBbZXhwZWN0ZWRSZXN1bHQoImZvbyIsIGZhbHNlLCAwKSwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGV4cGVjdGVkUmVzdWx0KCJiYXIiLCBmYWxzZSwgMCksCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHBlY3RlZFJlc3VsdCgiem9vIiwgZmFs
c2UsIDApXSk7CisgICAgY2hlY2tLZXlQYXRoKCJhWzM0XVsyMF0uZm9vWzJdLmJhciIsIFtleHBl
Y3RlZFJlc3VsdCgiYSIsIGZhbHNlLCAwKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGV4cGVjdGVkUmVzdWx0KCIiLCB0cnVlLCAzNCksCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHBlY3RlZFJlc3VsdCgiIiwgdHJ1ZSwgMjAp
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhwZWN0ZWRSZXN1
bHQoImZvbyIsIGZhbHNlLCAwKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGV4cGVjdGVkUmVzdWx0KCIiLCB0cnVlLCAyKSwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGV4cGVjdGVkUmVzdWx0KCJiYXIiLCBmYWxzZSwgMCldKTsK
KyAgICBjaGVja0tleVBhdGgoImFbIDM0IF0uWm9vWzJdXHQuYyIsIFtleHBlY3RlZFJlc3VsdCgi
YSIsIGZhbHNlLCAwKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBl
eHBlY3RlZFJlc3VsdCgiIiwgdHJ1ZSwgMzQpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGV4cGVjdGVkUmVzdWx0KCJab28iLCBmYWxzZSwgMCksCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhwZWN0ZWRSZXN1bHQoIiIsIHRydWUsIDIp
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4cGVjdGVkUmVzdWx0
KCJjIiwgZmFsc2UsIDApXSk7CisgICAgY2hlY2tLZXlQYXRoKCJhW1szNF1dLmJbMl0uYyIsIFtl
eHBlY3RlZFJlc3VsdCgiYSIsIGZhbHNlLCAwKV0sIDMpOworICAgIGNoZWNrS2V5UGF0aCgiYVtb
MzRdLmJbMl0uYyIsIFtleHBlY3RlZFJlc3VsdCgiYSIsIGZhbHNlLCAwKV0sIDMpOworICAgIGNo
ZWNrS2V5UGF0aCgiYVtbMzQuYlsyXS5jIiwgW2V4cGVjdGVkUmVzdWx0KCJhIiwgZmFsc2UsIDAp
XSwgMyk7CisgICAgY2hlY2tLZXlQYXRoKCIrYVszNF0uYlsyXS5jIiwgW10sIDEpOworICAgIGNo
ZWNrS2V5UGF0aCgiJWFbMzRdLmJbMl0uYyIsIFtdLCAxKTsKKyAgICBjaGVja0tleVBhdGgoImF7
WzM0XX0uYlsyXS5jIiwgW2V4cGVjdGVkUmVzdWx0KCJhIiwgZmFsc2UsIDApXSwgMik7CisgICAg
Y2hlY2tLZXlQYXRoKCJhLi5iWzJdLmMiLCBbZXhwZWN0ZWRSZXN1bHQoImEiLCBmYWxzZSwgMCld
LCA0KTsKKyAgICBkb25lKCk7Cit9CisKK3Rlc3QoKTsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hh
bmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMGE4N2UwMTBmNjMxZWRhZDdhMzM4MDQ0
ZDczMTFmZjE0M2EwNjhiMC4uMDk3MWVkY2IzOGM3ZDZiM2EwN2I1NGZmYjFlMzhhNmQ2NmYyYjY5
MCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2ViQ29yZS9DaGFuZ2VMb2cK
QEAgLTEsMyArMSw0MyBAQAorMjAxMC0wNy0yNiAgTWFyY3VzIEJ1bGFjaCAgPGJ1bGFjaEBjaHJv
bWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAg
ICAgSW1wbGVtZW50IElEQktleVBhdGggcGFyc2VyLgorICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDI5NzYKKworICAgICAgICBUZXN0OiBzdG9yYWdlL2lu
ZGV4ZWRkYi9pZGIta2V5cGF0aC5odG1sCisKKyAgICAgICAgSURCS2V5UGF0aCBpcyBhbiBpbnRl
cm5hbCBjbGFzcywgZXhwb3NlZCBvbmx5IGZvciB0ZXN0cy4KKyAgICAgICAgSXQnbGwgYWxsb3cg
aW5kZXhlZCBkYXRhYmFzZSBpbXBsZW1lbnRhdGlvbiB0byB0cmF2ZXJzZSBhIGdpdmVuIGtleSBw
YXRoIGFuZCBvYnRhaW4gdGhlIGNvcnJlc3BvbmRpbmcgcHJvcGVydGllcworICAgICAgICBmcm9t
IGEgU2VyaWFsaXplZFNjcmlwdFZhbHVlLgorCisgICAgICAgICogV2ViQ29yZS5neXBpOgorICAg
ICAgICAqIHN0b3JhZ2UvSURCS2V5UGF0aC5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6
SURCS2V5UGF0aDo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OklEQktleVBhdGg6OklEQktl
eVBhdGgpOgorICAgICAgICAoV2ViQ29yZTo6SURCS2V5UGF0aDo6fklEQktleVBhdGgpOgorICAg
ICAgICAoV2ViQ29yZTo6SURCS2V5UGF0aDo6aGFzTmV4dCk6CisgICAgICAgIChXZWJDb3JlOjpJ
REJLZXlQYXRoOjpuZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OklEQktleVBhdGg6OmlkZW50aWZp
ZXIpOgorICAgICAgICAoV2ViQ29yZTo6SURCS2V5UGF0aDo6aGFzSW5kZXgpOgorICAgICAgICAo
V2ViQ29yZTo6SURCS2V5UGF0aDo6aW5kZXhWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpJREJL
ZXlQYXRoOjpwYXJzZSk6CisgICAgICAgIChXZWJDb3JlOjppc1NhZmVJZGVudGlmaWVyQ2hhcmFj
dGVyKToKKyAgICAgICAgKFdlYkNvcmU6OklEQktleVBhdGg6OkxleGVyOjpsZXgpOgorICAgICAg
ICAoV2ViQ29yZTo6SURCS2V5UGF0aDo6TGV4ZXI6OmxleElkZW50aWZpZXIpOgorICAgICAgICAo
V2ViQ29yZTo6SURCS2V5UGF0aDo6TGV4ZXI6OmxleE51bWJlcik6CisgICAgICAgICogc3RvcmFn
ZS9JREJLZXlQYXRoLmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6SURCS2V5UGF0aDo6VG9r
ZW46OlRva2VuKToKKyAgICAgICAgKFdlYkNvcmU6OklEQktleVBhdGg6Oik6CisgICAgICAgIChX
ZWJDb3JlOjpJREJLZXlQYXRoOjpMZXhlcjo6TGV4ZXIpOgorICAgICAgICAoV2ViQ29yZTo6SURC
S2V5UGF0aDo6TGV4ZXI6Om5leHQpOgorICAgICAgICAoV2ViQ29yZTo6SURCS2V5UGF0aDo6TGV4
ZXI6OmN1cnJlbnRUb2tlbik6CisgICAgICAgICogc3RvcmFnZS9JREJLZXlQYXRoLmlkbDogQWRk
ZWQuCisgICAgICAgICogc3RvcmFnZS9JbmRleGVkRGF0YWJhc2VSZXF1ZXN0LmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkluZGV4ZWREYXRhYmFzZVJlcXVlc3Q6Om1ha2VLZXlQYXRoKToKKyAgICAg
ICAgKiBzdG9yYWdlL0luZGV4ZWREYXRhYmFzZVJlcXVlc3QuaDoKKyAgICAgICAgKiBzdG9yYWdl
L0luZGV4ZWREYXRhYmFzZVJlcXVlc3QuaWRsOgorCiAyMDEwLTA3LTI2ICBNYXJrIFJvd2UgIDxt
cm93ZUBhcHBsZS5jb20+CiAKICAgICAgICAgRml4IGFuICNpZiBpbiBXZWJDb3JlLmV4cC5pbiB0
byBjb3JyZWN0bHkgZGV0ZWN0IHdoZXRoZXIgU1ZHIGZpbHRlcnMgYXJlIGVuYWJsZWQuCmRpZmYg
LS1naXQgYS9XZWJDb3JlL1dlYkNvcmUuZ3lwaSBiL1dlYkNvcmUvV2ViQ29yZS5neXBpCmluZGV4
IDllMjQ2NDFhMTcxODIzZmE0Yzc1ZjhlMmU5YWIzZTBhNGZiZGFiM2MuLjhiYjQ0MTQ3ZWQwZWNj
YWI5ZmViZTY0N2Y5NzRkZGMzNWM1ZWJkMjQgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvV2ViQ29yZS5n
eXBpCisrKyBiL1dlYkNvcmUvV2ViQ29yZS5neXBpCkBAIC0yMzksNiArMjM5LDcgQEAKICAgICAg
ICAgICAgICdzdG9yYWdlL0lEQkV2ZW50LmlkbCcsCiAgICAgICAgICAgICAnc3RvcmFnZS9JREJJ
bmRleFJlcXVlc3QuaWRsJywKICAgICAgICAgICAgICdzdG9yYWdlL0lEQktleS5pZGwnLAorICAg
ICAgICAgICAgJ3N0b3JhZ2UvSURCS2V5UGF0aC5pZGwnLAogICAgICAgICAgICAgJ3N0b3JhZ2Uv
SURCS2V5UmFuZ2UuaWRsJywKICAgICAgICAgICAgICdzdG9yYWdlL0lEQk9iamVjdFN0b3JlUmVx
dWVzdC5pZGwnLAogICAgICAgICAgICAgJ3N0b3JhZ2UvSURCUmVxdWVzdC5pZGwnLApAQCAtMzQ4
Miw2ICszNDgzLDggQEAKICAgICAgICAgICAgICdzdG9yYWdlL0lEQkluZGV4UmVxdWVzdC5oJywK
ICAgICAgICAgICAgICdzdG9yYWdlL0lEQktleS5jcHAnLAogICAgICAgICAgICAgJ3N0b3JhZ2Uv
SURCS2V5LmgnLAorICAgICAgICAgICAgJ3N0b3JhZ2UvSURCS2V5UGF0aC5jcHAnLAorICAgICAg
ICAgICAgJ3N0b3JhZ2UvSURCS2V5UGF0aC5oJywKICAgICAgICAgICAgICdzdG9yYWdlL0lEQktl
eVJhbmdlLmNwcCcsCiAgICAgICAgICAgICAnc3RvcmFnZS9JREJLZXlSYW5nZS5oJywKICAgICAg
ICAgICAgICdzdG9yYWdlL0lEQktleVRyZWUuaCcsCmRpZmYgLS1naXQgYS9XZWJDb3JlL3N0b3Jh
Z2UvSURCS2V5UGF0aC5jcHAgYi9XZWJDb3JlL3N0b3JhZ2UvSURCS2V5UGF0aC5jcHAKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMC4uYWFkMGY2YzNkNjViZTI2MzUyYWJhZjQ4ZWViNTlkNWZhMTBjM2ZkMgotLS0gL2Rldi9u
dWxsCisrKyBiL1dlYkNvcmUvc3RvcmFnZS9JREJLZXlQYXRoLmNwcApAQCAtMCwwICsxLDI4NCBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAq
IDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJJREJLZXlQYXRoLmgiCisK
KyNpbmNsdWRlICJTdHJpbmdCdWlsZGVyLmgiCisjaW5jbHVkZSA8d3RmL0FTQ0lJQ1R5cGUuaD4K
KyNpbmNsdWRlIDx3dGYvZHRvYS5oPgorCisjaWYgRU5BQkxFKElOREVYRURfREFUQUJBU0UpCisK
K25hbWVzcGFjZSBXZWJDb3JlIHsKKworUGFzc1JlZlB0cjxJREJLZXlQYXRoPiBJREJLZXlQYXRo
OjpjcmVhdGUoY29uc3QgU3RyaW5nJiBrZXlQYXRoKQoreworICAgIFJlZlB0cjxJREJLZXlQYXRo
PiBpZGJLZXlQYXRoID0gYWRvcHRSZWYobmV3IElEQktleVBhdGgoa2V5UGF0aCkpOworICAgIGlk
YktleVBhdGgtPnBhcnNlKCk7CisgICAgcmV0dXJuIGlkYktleVBhdGgucmVsZWFzZSgpOworfQor
CitJREJLZXlQYXRoOjpJREJLZXlQYXRoKGNvbnN0IFN0cmluZyYga2V5UGF0aCkKKyAgICA6IG1f
a2V5UGF0aChrZXlQYXRoKQorICAgICwgbV9jdXJyZW50VG9rZW4oMCkKKyAgICAsIG1fbGV4ZXIo
a2V5UGF0aCkKK3sKKyAgICBtX2xleGVyLm5leHQoKTsKK30KKworSURCS2V5UGF0aDo6fklEQktl
eVBhdGgoKQoreworfQorCitib29sIElEQktleVBhdGg6Omhhc05leHQoKQoreworICAgIHJldHVy
biBtX2N1cnJlbnRUb2tlbiA8IG1fdG9rZW5zLnNpemUoKTsKK30KKwordm9pZCBJREJLZXlQYXRo
OjpuZXh0KCkKK3sKKyAgICBpZiAobV9jdXJyZW50VG9rZW4gPCBtX3Rva2Vucy5zaXplKCkpCisg
ICAgICAgICsrbV9jdXJyZW50VG9rZW47Cit9CisKK1N0cmluZyBJREJLZXlQYXRoOjppZGVudGlm
aWVyKCkKK3sKKyAgICBpZiAobV9jdXJyZW50VG9rZW4gPj0gbV90b2tlbnMuc2l6ZSgpKQorICAg
ICAgICByZXR1cm4gIiI7CisgICAgcmV0dXJuIG1fdG9rZW5zW21fY3VycmVudFRva2VuXS5pZGVu
dGlmaWVyOworfQorCitib29sIElEQktleVBhdGg6Omhhc0luZGV4KCkgY29uc3QKK3sKKyAgICBp
ZiAobV9jdXJyZW50VG9rZW4gPj0gbV90b2tlbnMuc2l6ZSgpKQorICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgcmV0dXJuIG1fdG9rZW5zW21fY3VycmVudFRva2VuXS5oYXNJbmRleDsKK30KKwor
aW50IElEQktleVBhdGg6OmluZGV4VmFsdWUoKSBjb25zdAoreworICAgIGlmIChtX2N1cnJlbnRU
b2tlbiA+PSBtX3Rva2Vucy5zaXplKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICByZXR1
cm4gbV90b2tlbnNbbV9jdXJyZW50VG9rZW5dLmluZGV4VmFsdWU7Cit9CisKK2ludCBJREJLZXlQ
YXRoOjpwYXJzZXJFcnJvcigpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fcGFyc2VyRXJyb3I7Cit9
CisKK3ZvaWQgSURCS2V5UGF0aDo6cGFyc2UoKQoreworICAgIFBhcnNlclN0YXRlIHN0YXRlID0g
U3RhcnQ7CisKKyAgICB3aGlsZSAoMSkgeworICAgICAgICBzd2l0Y2ggKHN0YXRlKSB7CisgICAg
ICAgIGNhc2UgU3RhcnQgOiB7CisgICAgICAgICAgICBUb2tlblR5cGUgdG9rZW4gPSBtX2xleGVy
LmN1cnJlbnRUb2tlbigpLnR5cGU7CisgICAgICAgICAgICBpZiAodG9rZW4gPT0gVG9rSWRlbnRp
ZmllcikgeworICAgICAgICAgICAgICAgIHN0YXRlID0gSWRlbnRpZmllcjsKKyAgICAgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmICh0b2tlbiA9PSBUb2tM
QnJhY2tldCkgeworICAgICAgICAgICAgICAgIHN0YXRlID0gQXJyYXk7CisgICAgICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAodG9rZW4gPT0gVG9rRW5k
KSB7CisgICAgICAgICAgICAgICAgbV9wYXJzZXJFcnJvciA9IFBhcnNlRXJyb3JOb25lOworICAg
ICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIG1fcGFyc2Vy
RXJyb3IgPSBQYXJzZUVycm9yU3RhcnQ7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0K
KyAgICAgICAgY2FzZSBJZGVudGlmaWVyIDogeworICAgICAgICAgICAgTGV4ZXI6OlBhcnNlclRv
a2VuIHRva2VuID0gbV9sZXhlci5jdXJyZW50VG9rZW4oKTsKKyAgICAgICAgICAgIEFTU0VSVCh0
b2tlbi50eXBlID09IFRva0lkZW50aWZpZXIpOworICAgICAgICAgICAgVG9rZW4gaWRiVG9rZW47
CisgICAgICAgICAgICBpZGJUb2tlbi5pZGVudGlmaWVyID0gdG9rZW4uc3RyaW5nVG9rZW47Cisg
ICAgICAgICAgICBtX3Rva2Vucy5hcHBlbmQoaWRiVG9rZW4pOworCisgICAgICAgICAgICBtX2xl
eGVyLm5leHQoKTsKKyAgICAgICAgICAgIHRva2VuID0gbV9sZXhlci5jdXJyZW50VG9rZW4oKTsK
KyAgICAgICAgICAgIGlmICh0b2tlbi50eXBlID09IFRva0RvdCkgeworICAgICAgICAgICAgICAg
IHN0YXRlID0gRG90OworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAg
ICAgICAgICAgaWYgKHRva2VuLnR5cGUgPT0gVG9rTEJyYWNrZXQpIHsKKyAgICAgICAgICAgICAg
ICBzdGF0ZSA9IEFycmF5OworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQor
ICAgICAgICAgICAgaWYgKHRva2VuLnR5cGUgPT0gVG9rRW5kKSB7CisgICAgICAgICAgICAgICAg
bV9wYXJzZXJFcnJvciA9IFBhcnNlRXJyb3JOb25lOworICAgICAgICAgICAgICAgIHJldHVybjsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIG1fcGFyc2VyRXJyb3IgPSBQYXJzZUVycm9ySWRl
bnRpZmllcjsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICBjYXNlIEFy
cmF5IDogeworICAgICAgICAgICAgTGV4ZXI6OlBhcnNlclRva2VuIHRva2VuID0gbV9sZXhlci5j
dXJyZW50VG9rZW4oKTsKKyAgICAgICAgICAgIEFTU0VSVCh0b2tlbi50eXBlID09IFRva0xCcmFj
a2V0KTsKKworICAgICAgICAgICAgbV9sZXhlci5uZXh0KCk7CisgICAgICAgICAgICB0b2tlbiA9
IG1fbGV4ZXIuY3VycmVudFRva2VuKCk7CisgICAgICAgICAgICBpZiAodG9rZW4udHlwZSAhPSBU
b2tOdW1iZXIpIHsKKyAgICAgICAgICAgICAgICBtX3BhcnNlckVycm9yID0gUGFyc2VFcnJvckFy
cmF5SW5kZXg7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorCisgICAg
ICAgICAgICBBU1NFUlQodG9rZW4udHlwZSA9PSBUb2tOdW1iZXIpOworICAgICAgICAgICAgVG9r
ZW4gaWRiVG9rZW47CisgICAgICAgICAgICBpZGJUb2tlbi5oYXNJbmRleCA9IHRydWU7CisgICAg
ICAgICAgICBpZGJUb2tlbi5pbmRleFZhbHVlID0gdG9rZW4ubnVtYmVyVG9rZW47CisgICAgICAg
ICAgICBtX3Rva2Vucy5hcHBlbmQoaWRiVG9rZW4pOworCisgICAgICAgICAgICBtX2xleGVyLm5l
eHQoKTsKKyAgICAgICAgICAgIHRva2VuID0gbV9sZXhlci5jdXJyZW50VG9rZW4oKTsKKyAgICAg
ICAgICAgIGlmICh0b2tlbi50eXBlICE9IFRva1JCcmFja2V0KSB7CisgICAgICAgICAgICAgICAg
bV9wYXJzZXJFcnJvciA9IFBhcnNlRXJyb3JBcnJheUluZGV4OworICAgICAgICAgICAgICAgIHJl
dHVybjsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgbV9sZXhlci5uZXh0KCk7CisgICAg
ICAgICAgICB0b2tlbiA9IG1fbGV4ZXIuY3VycmVudFRva2VuKCk7CisgICAgICAgICAgICBpZiAo
dG9rZW4udHlwZSA9PSBUb2tEb3QpCisgICAgICAgICAgICAgICAgc3RhdGUgPSBEb3Q7CisgICAg
ICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgc3RhdGUgPSBTdGFydDsKKyAgICAgICAgICAg
IGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgY2FzZSBEb3Q6IHsKKyAgICAgICAgICAgIExl
eGVyOjpQYXJzZXJUb2tlbiB0b2tlbiA9IG1fbGV4ZXIuY3VycmVudFRva2VuKCk7CisgICAgICAg
ICAgICBBU1NFUlQodG9rZW4udHlwZSA9PSBUb2tEb3QpOworCisgICAgICAgICAgICBtX2xleGVy
Lm5leHQoKTsKKyAgICAgICAgICAgIHRva2VuID0gbV9sZXhlci5jdXJyZW50VG9rZW4oKTsKKyAg
ICAgICAgICAgIGlmICh0b2tlbi50eXBlICE9IFRva0lkZW50aWZpZXIpIHsKKyAgICAgICAgICAg
ICAgICBtX3BhcnNlckVycm9yID0gUGFyc2VFcnJvckRvdDsKKyAgICAgICAgICAgICAgICByZXR1
cm47CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHN0YXRlID0gSWRlbnRpZmllcjsKKyAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIH0KKyAgICB9Cit9CisKK3N0YXRp
YyBpbmxpbmUgYm9vbCBpc1NhZmVJZGVudGlmaWVyQ2hhcmFjdGVyKFVDaGFyIGMpCit7CisgICAg
cmV0dXJuIChjID49ICdhJyAmJiBjIDw9ICd6JykgfHwgKGMgPj0gJ0EnICYmIGMgPD0gJ1onKTsK
K30KKworSURCS2V5UGF0aDo6VG9rZW5UeXBlIElEQktleVBhdGg6OkxleGVyOjpsZXgoUGFyc2Vy
VG9rZW4mIHRva2VuKQoreworICAgIHdoaWxlIChtX3B0ciA8IG1fZW5kICYmIGlzQVNDSUlTcGFj
ZSgqbV9wdHIpKQorICAgICAgICArK21fcHRyOworCisgICAgaWYgKG1fcHRyID49IG1fZW5kKSB7
CisgICAgICAgIHRva2VuLnR5cGUgPSBUb2tFbmQ7CisgICAgICAgIHRva2VuLnN0YXJ0ID0gdG9r
ZW4uZW5kID0gbV9wdHI7CisgICAgICAgIHJldHVybiBUb2tFbmQ7CisgICAgfQorICAgIEFTU0VS
VChtX3B0ciA8PSBtX2VuZCk7CisgICAgdG9rZW4udHlwZSA9IFRva0Vycm9yOworICAgIHRva2Vu
LnN0YXJ0ID0gbV9wdHI7CisgICAgc3dpdGNoICgqbV9wdHIpIHsKKyAgICBjYXNlICdbJzoKKyAg
ICAgICAgdG9rZW4udHlwZSA9IFRva0xCcmFja2V0OworICAgICAgICB0b2tlbi5lbmQgPSArK21f
cHRyOworICAgICAgICByZXR1cm4gVG9rTEJyYWNrZXQ7CisgICAgY2FzZSAnXSc6CisgICAgICAg
IHRva2VuLnR5cGUgPSBUb2tSQnJhY2tldDsKKyAgICAgICAgdG9rZW4uZW5kID0gKyttX3B0cjsK
KyAgICAgICAgcmV0dXJuIFRva1JCcmFja2V0OworICAgIGNhc2UgJy4nOgorICAgICAgICB0b2tl
bi50eXBlID0gVG9rRG90OworICAgICAgICB0b2tlbi5lbmQgPSArK21fcHRyOworICAgICAgICBy
ZXR1cm4gVG9rRG90OworICAgIGNhc2UgJzAnOgorICAgIGNhc2UgJzEnOgorICAgIGNhc2UgJzIn
OgorICAgIGNhc2UgJzMnOgorICAgIGNhc2UgJzQnOgorICAgIGNhc2UgJzUnOgorICAgIGNhc2Ug
JzYnOgorICAgIGNhc2UgJzcnOgorICAgIGNhc2UgJzgnOgorICAgIGNhc2UgJzknOgorICAgICAg
ICByZXR1cm4gbGV4TnVtYmVyKHRva2VuKTsKKyAgICBkZWZhdWx0OgorICAgICAgICBpZiAoaXNT
YWZlSWRlbnRpZmllckNoYXJhY3RlcigqbV9wdHIpKQorICAgICAgICAgICAgcmV0dXJuIGxleElk
ZW50aWZpZXIodG9rZW4pOworICAgIH0KKyAgICByZXR1cm4gVG9rRXJyb3I7Cit9CisKK0lEQktl
eVBhdGg6OlRva2VuVHlwZSBJREJLZXlQYXRoOjpMZXhlcjo6bGV4SWRlbnRpZmllcihQYXJzZXJU
b2tlbiYgdG9rZW4pCit7CisgICAgY29uc3QgVUNoYXIqIHJ1blN0YXJ0ID0gbV9wdHI7CisgICAg
U3RyaW5nQnVpbGRlciBidWlsZGVyOworICAgIHdoaWxlIChtX3B0ciA8IG1fZW5kICYmIGlzU2Fm
ZUlkZW50aWZpZXJDaGFyYWN0ZXIoKm1fcHRyKSkKKyAgICAgICAgKyttX3B0cjsKKyAgICBpZiAo
cnVuU3RhcnQgPCBtX3B0cikKKyAgICAgICAgYnVpbGRlci5hcHBlbmQoU3RyaW5nKHJ1blN0YXJ0
LCBtX3B0ciAtIHJ1blN0YXJ0KSk7CisKKyAgICB0b2tlbi5zdHJpbmdUb2tlbiA9IGJ1aWxkZXIu
dG9TdHJpbmcoKTsKKyAgICB0b2tlbi50eXBlID0gVG9rSWRlbnRpZmllcjsKKyAgICB0b2tlbi5l
bmQgPSBtX3B0cjsKKyAgICByZXR1cm4gVG9rSWRlbnRpZmllcjsKK30KKworSURCS2V5UGF0aDo6
VG9rZW5UeXBlIElEQktleVBhdGg6OkxleGVyOjpsZXhOdW1iZXIoUGFyc2VyVG9rZW4mIHRva2Vu
KQoreworICAgIGlmIChtX3B0ciA8IG1fZW5kICYmICptX3B0ciA9PSAnMCcpIC8vIDAKKyAgICAg
ICAgKyttX3B0cjsKKyAgICBlbHNlIGlmIChtX3B0ciA8IG1fZW5kICYmICptX3B0ciA+PSAnMScg
JiYgKm1fcHRyIDw9ICc5JykgeyAvLyBbMS05XQorICAgICAgICArK21fcHRyOworICAgICAgICAv
LyBbMC05XSoKKyAgICAgICAgd2hpbGUgKG1fcHRyIDwgbV9lbmQgJiYgaXNBU0NJSURpZ2l0KCpt
X3B0cikpCisgICAgICAgICAgICArK21fcHRyOworICAgIH0gZWxzZQorICAgICAgICByZXR1cm4g
VG9rRXJyb3I7CisKKyAgICB0b2tlbi50eXBlID0gVG9rTnVtYmVyOworICAgIHRva2VuLmVuZCA9
IG1fcHRyOworICAgIFZlY3RvcjxjaGFyLCA2ND4gYnVmZmVyKHRva2VuLmVuZCAtIHRva2VuLnN0
YXJ0ICsgMSk7CisgICAgaW50IGk7CisgICAgZm9yIChpID0gMDsgaSA8IHRva2VuLmVuZCAtIHRv
a2VuLnN0YXJ0OyBpKyspIHsKKyAgICAgICAgQVNTRVJUKHN0YXRpY19jYXN0PGNoYXI+KHRva2Vu
LnN0YXJ0W2ldKSA9PSB0b2tlbi5zdGFydFtpXSk7CisgICAgICAgIGJ1ZmZlcltpXSA9IHN0YXRp
Y19jYXN0PGNoYXI+KHRva2VuLnN0YXJ0W2ldKTsKKyAgICB9CisgICAgYnVmZmVyW2ldID0gMDsK
KyAgICBjaGFyKiBlbmQ7CisgICAgdG9rZW4ubnVtYmVyVG9rZW4gPSBXVEY6OnN0cnRvZChidWZm
ZXIuZGF0YSgpLCAmZW5kKTsKKyAgICBBU1NFUlQoYnVmZmVyLmRhdGEoKSArICh0b2tlbi5lbmQg
LSB0b2tlbi5zdGFydCkgPT0gZW5kKTsKKyAgICByZXR1cm4gVG9rTnVtYmVyOworfQorCit9IC8v
IG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkK
ZGlmZiAtLWdpdCBhL1dlYkNvcmUvc3RvcmFnZS9JREJLZXlQYXRoLmggYi9XZWJDb3JlL3N0b3Jh
Z2UvSURCS2V5UGF0aC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjI2NTMyNzMyZDI2ODMzOGM3YmQ3MGIyYWQ5NTBh
ZDE0NDRmODI2ODYKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJDb3JlL3N0b3JhZ2UvSURCS2V5UGF0
aC5oCkBAIC0wLDAgKzEsMTI3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMi
IEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBJREJLZXlQYXRoX2gKKyNkZWZp
bmUgSURCS2V5UGF0aF9oCisKKyNpZiBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKKworI2luY2x1
ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CisjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KKyNpbmNs
dWRlIDx3dGYvVmVjdG9yLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CisKK25h
bWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgSURCS2V5UGF0aCA6IHB1YmxpYyBSZWZDb3VudGVk
PElEQktleVBhdGg+IHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxJREJLZXlQYXRo
PiBjcmVhdGUoY29uc3QgU3RyaW5nJik7CisgICAgfklEQktleVBhdGgoKTsKKworICAgIGJvb2wg
aGFzTmV4dCgpOworICAgIHZvaWQgbmV4dCgpOworICAgIFN0cmluZyBpZGVudGlmaWVyKCk7Cisg
ICAgYm9vbCBoYXNJbmRleCgpIGNvbnN0OworICAgIGludCBpbmRleFZhbHVlKCkgY29uc3Q7CisK
KyAgICBpbnQgcGFyc2VyRXJyb3IoKSBjb25zdDsKKworcHJpdmF0ZToKKyAgICBzdHJ1Y3QgVG9r
ZW4geworICAgICAgICBTdHJpbmcgaWRlbnRpZmllcjsKKyAgICAgICAgYm9vbCBoYXNJbmRleDsK
KyAgICAgICAgaW50IGluZGV4VmFsdWU7CisgICAgICAgIFRva2VuKCkgOiBoYXNJbmRleChmYWxz
ZSksIGluZGV4VmFsdWUoMCkge30KKyAgICB9OworICAgIGV4cGxpY2l0IElEQktleVBhdGgoY29u
c3QgU3RyaW5nJik7CisKKyAgICBTdHJpbmcgbV9rZXlQYXRoOworICAgIFZlY3RvcjxUb2tlbj4g
bV90b2tlbnM7CisgICAgaW50IG1fY3VycmVudFRva2VuOworICAgIGludCBtX3BhcnNlckVycm9y
OworCisgICAgLy8gVGhpcyBpcyBhIHNpbXBsaWZpZWQgcGFyc2VyIGxvb3NlbHkgYmFzZWQgb24g
TGl0ZXJhbFBhcnNlci4KKyAgICAvLyBBbiBJREJLZXlQYXRoIGlzIGRlZmluZWQgYXMgYSBzZXF1
ZW5jZSBvZjoKKyAgICAvLyBpZGVudGlmaWVyQXsuaWRlbnRpZmllckJ7W251bWVyaWNfdmFsdWVd
fQorICAgIC8vIHdoZXJlICJ7fSIgcmVwcmVzZW50cyBhbiBvcHRpb25hbCBwYXJ0CisgICAgLy8g
VGhlIGJhc2ljIHN0YXRlIG1hY2hpbmUgaXM6CisgICAgLy8gU3RhcnQgPT4ge0lkZW50aWZpZXIs
IEFycmF5fQorICAgIC8vIElkZW50aWZpZXIgPT4ge0RvdCwgQXJyYXl9CisgICAgLy8gQXJyYXkg
PT4ge1N0YXJ0LCBEb3R9CisgICAgLy8gRG90ID0+IHtJZGVudGlmaWVyfQorICAgIC8vIEl0IGJh
aWxzIG91dCBhcyBzb29uIGFzIGl0IGZpbmRzIGFuIGVycm9yLCBidXQgZG9lc24ndCBkaXNjYXJk
IHRoZSBiaXRzIGl0IG1hbmFnZWQgdG8gcGFyc2UuCisgICAgZW51bSBQYXJzZXJTdGF0ZSB7ICBT
dGFydCwgSWRlbnRpZmllciwgQXJyYXksIERvdCB9OworICAgIGVudW0gVG9rZW5UeXBlIHsgVG9r
TEJyYWNrZXQsIFRva1JCcmFja2V0LAorICAgICAgICAgICAgICAgICAgICAgVG9rSWRlbnRpZmll
ciwgVG9rTnVtYmVyLAorICAgICAgICAgICAgICAgICAgICAgVG9rRG90LCBUb2tFbmQsIFRva0Vy
cm9yIH07CisgICAgZW51bSBQYXJzZUVycm9yIHsgUGFyc2VFcnJvck5vbmUsIFBhcnNlRXJyb3JT
dGFydCwgUGFyc2VFcnJvcklkZW50aWZpZXIsCisgICAgICAgICAgICAgICAgICAgICAgUGFyc2VF
cnJvckFycmF5SW5kZXgsIFBhcnNlRXJyb3JEb3R9OworCisgICAgdm9pZCBwYXJzZSgpOworCisg
ICAgY2xhc3MgTGV4ZXIgeworICAgIHB1YmxpYzoKKyAgICAgICAgc3RydWN0IFBhcnNlclRva2Vu
IHsKKyAgICAgICAgICAgIFRva2VuVHlwZSB0eXBlOworICAgICAgICAgICAgY29uc3QgVUNoYXIq
IHN0YXJ0OworICAgICAgICAgICAgY29uc3QgVUNoYXIqIGVuZDsKKyAgICAgICAgICAgIFN0cmlu
ZyBzdHJpbmdUb2tlbjsKKyAgICAgICAgICAgIGRvdWJsZSBudW1iZXJUb2tlbjsKKyAgICAgICAg
fTsKKyAgICAgICAgZXhwbGljaXQgTGV4ZXIoY29uc3QgU3RyaW5nJiBzKQorICAgICAgICAgICAg
OiBtX3N0cmluZyhzKQorICAgICAgICAgICAgLCBtX3B0cihzLmNoYXJhY3RlcnMoKSkKKyAgICAg
ICAgICAgICwgbV9lbmQocy5jaGFyYWN0ZXJzKCkgKyBzLmxlbmd0aCgpKQorICAgICAgICB7Cisg
ICAgICAgIH0KKworICAgICAgICBUb2tlblR5cGUgbmV4dCgpCisgICAgICAgIHsKKyAgICAgICAg
ICAgIHJldHVybiBsZXgobV9jdXJyZW50VG9rZW4pOworICAgICAgICB9CisKKyAgICAgICAgY29u
c3QgUGFyc2VyVG9rZW4mIGN1cnJlbnRUb2tlbigpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJl
dHVybiBtX2N1cnJlbnRUb2tlbjsKKyAgICAgICAgfQorCisgICAgcHJpdmF0ZToKKyAgICAgICAg
VG9rZW5UeXBlIGxleChQYXJzZXJUb2tlbiYpOworICAgICAgICBUb2tlblR5cGUgbGV4SWRlbnRp
ZmllcihQYXJzZXJUb2tlbiYpOworICAgICAgICBUb2tlblR5cGUgbGV4TnVtYmVyKFBhcnNlclRv
a2VuJik7CisgICAgICAgIFBhcnNlclRva2VuIG1fY3VycmVudFRva2VuOworICAgICAgICBTdHJp
bmcgbV9zdHJpbmc7CisgICAgICAgIGNvbnN0IFVDaGFyKiBtX3B0cjsKKyAgICAgICAgY29uc3Qg
VUNoYXIqIG1fZW5kOworICAgICB9OworCisgICAgTGV4ZXIgbV9sZXhlcjsKK307CisKK30gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmCisKKyNlbmRpZiAvLyBJREJLZXlQYXRoX2gKZGlm
ZiAtLWdpdCBhL1dlYkNvcmUvc3RvcmFnZS9JREJLZXlQYXRoLmlkbCBiL1dlYkNvcmUvc3RvcmFn
ZS9JREJLZXlQYXRoLmlkbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5hMDNlN2IxN2U3MjEzMjkzOTJmNzdhNTMwNDE1
Mzk2OGEyNmE5ZTA3Ci0tLSAvZGV2L251bGwKKysrIGIvV2ViQ29yZS9zdG9yYWdlL0lEQktleVBh
dGguaWRsCkBAIC0wLDAgKzEsMzkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJ
UyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCittb2R1bGUgc3RvcmFnZSB7CisgICAgLy8g
RklYTUU6IElEQktleVBhdGggaXMgcHVibGljIG9ubHkgdG8gYWxsb3cgdGVzdGluZywgcmVtb3Zl
IGFzIHNvb24gYXMgd2UgaGF2ZSBtb3JlIGNvbXByZWhlbnNpdmUgdGVzdCBpbmZyYXN0cnVjdHVy
ZSBmb3IgSW5kZXhlZERCLiAKKyAgICBpbnRlcmZhY2UgWworICAgICAgICBDb25kaXRpb25hbD1J
TkRFWEVEX0RBVEFCQVNFCisgICAgXSBJREJLZXlQYXRoIHsKKyAgICAgICAgYm9vbGVhbiBoYXNO
ZXh0KCk7CisgICAgICAgIHZvaWQgbmV4dCgpOworICAgICAgICByZWFkb25seSBhdHRyaWJ1dGUg
RE9NU3RyaW5nIGlkZW50aWZpZXI7CisgICAgICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBib29sZWFu
IGhhc0luZGV4OworICAgICAgICByZWFkb25seSBhdHRyaWJ1dGUgaW50IGluZGV4VmFsdWU7Cisg
ICAgICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBpbnQgcGFyc2VyRXJyb3I7CisgICAgfTsKKworfQpk
aWZmIC0tZ2l0IGEvV2ViQ29yZS9zdG9yYWdlL0luZGV4ZWREYXRhYmFzZVJlcXVlc3QuY3BwIGIv
V2ViQ29yZS9zdG9yYWdlL0luZGV4ZWREYXRhYmFzZVJlcXVlc3QuY3BwCmluZGV4IDQ1YWUxYmQz
MDA4NzFjYjQyZmNhMzM3OThjYzU2ZjRmOGZkODE2MTkuLmViNjNiZDk1OWJiZTE3MjU3MWVhNWFi
OWZiODVkZmIzMGZhYjY1MjEgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvc3RvcmFnZS9JbmRleGVkRGF0
YWJhc2VSZXF1ZXN0LmNwcAorKysgYi9XZWJDb3JlL3N0b3JhZ2UvSW5kZXhlZERhdGFiYXNlUmVx
dWVzdC5jcHAKQEAgLTMzLDYgKzMzLDcgQEAKICNpbmNsdWRlICJFeGNlcHRpb25Db2RlLmgiCiAj
aW5jbHVkZSAiRnJhbWUuaCIKICNpbmNsdWRlICJJREJEYXRhYmFzZS5oIgorI2luY2x1ZGUgIklE
QktleVBhdGguaCIKICNpbmNsdWRlICJJREJLZXlSYW5nZS5oIgogI2luY2x1ZGUgIklEQlJlcXVl
c3QuaCIKICNpbmNsdWRlICJJbmRleGVkRGF0YWJhc2UuaCIKQEAgLTkxLDYgKzkyLDExIEBAIFBh
c3NSZWZQdHI8SURCS2V5UmFuZ2U+IEluZGV4ZWREYXRhYmFzZVJlcXVlc3Q6Om1ha2VCb3VuZEtl
eVJhbmdlKFBhc3NSZWZQdHI8U2VyCiAgICAgcmV0dXJuIElEQktleVJhbmdlOjpjcmVhdGUobGVm
dCwgcmlnaHQsIGZsYWdzKTsKIH0KIAorUGFzc1JlZlB0cjxJREJLZXlQYXRoPiBJbmRleGVkRGF0
YWJhc2VSZXF1ZXN0OjptYWtlS2V5UGF0aChjb25zdCBTdHJpbmcmIGtleVBhdGgpCit7CisgICAg
cmV0dXJuIElEQktleVBhdGg6OmNyZWF0ZShrZXlQYXRoKTsKK30KKwogfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQogCiAjZW5kaWYgLy8gRU5BQkxFKElOREVYRURfREFUQUJBU0UpCmRpZmYgLS1naXQg
YS9XZWJDb3JlL3N0b3JhZ2UvSW5kZXhlZERhdGFiYXNlUmVxdWVzdC5oIGIvV2ViQ29yZS9zdG9y
YWdlL0luZGV4ZWREYXRhYmFzZVJlcXVlc3QuaAppbmRleCBmNTA1ZDlkNzJjZGFmNjY1NGIwMzJh
MDIzYzVlNmQ3MjZlOWQxNzhkLi4yZTY2NzgxZjU2MzBmYWQ0OTg0OGFjODFjMDQxNGUzZmZkMzRl
MGFkIDEwMDY0NAotLS0gYS9XZWJDb3JlL3N0b3JhZ2UvSW5kZXhlZERhdGFiYXNlUmVxdWVzdC5o
CisrKyBiL1dlYkNvcmUvc3RvcmFnZS9JbmRleGVkRGF0YWJhc2VSZXF1ZXN0LmgKQEAgLTQwLDYg
KzQwLDcgQEAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgSURCQW55OworY2xhc3MgSURC
S2V5UGF0aDsKIGNsYXNzIElEQktleVJhbmdlOwogY2xhc3MgSURCUmVxdWVzdDsKIGNsYXNzIElu
ZGV4ZWREYXRhYmFzZTsKQEAgLTYwLDYgKzYxLDkgQEAgcHVibGljOgogICAgIFBhc3NSZWZQdHI8
SURCS2V5UmFuZ2U+IG1ha2VSaWdodEJvdW5kS2V5UmFuZ2UoUGFzc1JlZlB0cjxTZXJpYWxpemVk
U2NyaXB0VmFsdWU+IGJvdW5kLCBib29sIG9wZW4gPSBmYWxzZSk7CiAgICAgUGFzc1JlZlB0cjxJ
REJLZXlSYW5nZT4gbWFrZUJvdW5kS2V5UmFuZ2UoUGFzc1JlZlB0cjxTZXJpYWxpemVkU2NyaXB0
VmFsdWU+IGxlZnQsIFBhc3NSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiByaWdodCwgYm9v
bCBvcGVuTGVmdCA9IGZhbHNlLCBib29sIG9wZW5SaWdodCA9IGZhbHNlKTsKIAorICAgIC8vIEZJ
WE1FOiBJREJLZXlQYXRoIGlzIHB1YmxpYyBvbmx5IHRvIGFsbG93IHRlc3RpbmcsIHJlbW92ZSBh
cyBzb29uIGFzIHdlIGhhdmUgbW9yZSBjb21wcmVoZW5zaXZlIHRlc3QgaW5mcmFzdHJ1Y3R1cmUg
Zm9yIEluZGV4ZWREQi4KKyAgICBQYXNzUmVmUHRyPElEQktleVBhdGg+IG1ha2VLZXlQYXRoKGNv
bnN0IFN0cmluZyYpOworCiBwcml2YXRlOgogICAgIEluZGV4ZWREYXRhYmFzZVJlcXVlc3QoSW5k
ZXhlZERhdGFiYXNlKik7CiAKZGlmZiAtLWdpdCBhL1dlYkNvcmUvc3RvcmFnZS9JbmRleGVkRGF0
YWJhc2VSZXF1ZXN0LmlkbCBiL1dlYkNvcmUvc3RvcmFnZS9JbmRleGVkRGF0YWJhc2VSZXF1ZXN0
LmlkbAppbmRleCA1MDJlODA0YmI2NWJkNmJmODMyMzM0ZmY1MDg2OGM5M2VjYzNhZjhkLi45Y2Vj
MjA5YjlmZDUwNmJiZmM3ZjU1ZDQwOTYwM2FmYzBmZTUzN2JlIDEwMDY0NAotLS0gYS9XZWJDb3Jl
L3N0b3JhZ2UvSW5kZXhlZERhdGFiYXNlUmVxdWVzdC5pZGwKKysrIGIvV2ViQ29yZS9zdG9yYWdl
L0luZGV4ZWREYXRhYmFzZVJlcXVlc3QuaWRsCkBAIC0zMyw2ICszMyw4IEBAIG1vZHVsZSBzdG9y
YWdlIHsKICAgICAgICAgSURCS2V5UmFuZ2UgbWFrZUxlZnRCb3VuZEtleVJhbmdlKGluIFNlcmlh
bGl6ZWRTY3JpcHRWYWx1ZSBib3VuZCwgaW4gW09wdGlvbmFsXSBib29sZWFuIG9wZW4pOwogICAg
ICAgICBJREJLZXlSYW5nZSBtYWtlUmlnaHRCb3VuZEtleVJhbmdlKGluIFNlcmlhbGl6ZWRTY3Jp
cHRWYWx1ZSBib3VuZCwgaW4gW09wdGlvbmFsXSBib29sZWFuIG9wZW4pOwogICAgICAgICBJREJL
ZXlSYW5nZSBtYWtlQm91bmRLZXlSYW5nZShpbiBTZXJpYWxpemVkU2NyaXB0VmFsdWUgbGVmdCwg
aW4gU2VyaWFsaXplZFNjcmlwdFZhbHVlIHJpZ2h0LCBpbiBbT3B0aW9uYWxdIGJvb2xlYW4gb3Bl
bkxlZnQsIGluIFtPcHRpb25hbF0gYm9vbGVhbiBvcGVuUmlnaHQpOworICAgICAgICAvLyBGSVhN
RTogSURCS2V5UGF0aCBpcyBwdWJsaWMgb25seSB0byBhbGxvdyB0ZXN0aW5nLCByZW1vdmUgYXMg
c29vbiBhcyB3ZSBoYXZlIG1vcmUgY29tcHJlaGVuc2l2ZSB0ZXN0IGluZnJhc3RydWN0dXJlIGZv
ciBJbmRleGVkREIuIAorICAgICAgICBJREJLZXlQYXRoIG1ha2VLZXlQYXRoKGluIERPTVN0cmlu
ZyBrZXlQYXRoKTsKICAgICB9OwogCiB9Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>62703</attachid>
            <date>2010-07-27 09:59:12 -0700</date>
            <delta_ts>2010-07-28 08:32:16 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-42976-20100727175909.patch</filename>
            <type>text/plain</type>
            <size>28012</size>
            <attacher name="Marcus Bulach">bulach</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxv
ZwppbmRleCAyM2VlOTBjMGU3YjkzZWI2OTg3NjJkZGIwM2RlMGMwNWNlNDA3NmFmLi5lYmJmZjYy
NTViMTlhMzQ5MzcyZDg4YTBjMTEwODFhZmMxYzVmNmE2IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0
cy9DaGFuZ2VMb2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTcgQEAK
KzIwMTAtMDctMjYgIE1hcmN1cyBCdWxhY2ggIDxidWxhY2hAY2hyb21pdW0ub3JnPgorCisgICAg
ICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEltcGxlbWVudCBJREJL
ZXlQYXRoIHBhcnNlci4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTQyOTc2CisKKyAgICAgICAgKiBzdG9yYWdlL2luZGV4ZWRkYi9pZGIta2V5cGF0aC1l
eHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIHN0b3JhZ2UvaW5kZXhlZGRiL2lkYi1rZXlw
YXRoLmh0bWw6IEFkZGVkLgorICAgICAgICAqIHN0b3JhZ2UvaW5kZXhlZGRiL3NjcmlwdC10ZXN0
cy9pZGIta2V5cGF0aC5qczogQWRkZWQuCisgICAgICAgIChjaGVja0tleVBhdGgpOgorICAgICAg
ICAoZXhwZWN0ZWRSZXN1bHQpOgorICAgICAgICAodGVzdCk6CisKIDIwMTAtMDctMjcgIFN0ZXZl
IEJsb2NrICA8c3RldmVibG9ja0Bnb29nbGUuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IEpl
cmVteSBPcmxvdy4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3N0b3JhZ2UvaW5kZXhlZGRiL2lk
Yi1rZXlwYXRoLWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL3N0b3JhZ2UvaW5kZXhlZGRiL2lk
Yi1rZXlwYXRoLWV4cGVjdGVkLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4yNzNjMDdmODA3ZDQyMGYyMTQ2MTY0
YTM5YTE1OWU3NjQ3NmI2NGNjCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvc3RvcmFn
ZS9pbmRleGVkZGIvaWRiLWtleXBhdGgtZXhwZWN0ZWQudHh0CkBAIC0wLDAgKzEsMTEyIEBACitU
ZXN0IEluZGV4ZWREQidzIEtleVBhdGguCisKK09uIHN1Y2Nlc3MsIHlvdSB3aWxsIHNlZSBhIHNl
cmllcyBvZiAiUEFTUyIgbWVzc2FnZXMsIGZvbGxvd2VkIGJ5ICJURVNUIENPTVBMRVRFIi4KKwor
CitDaGVja2luZyBmb28uYmFyLnpvbworaW5kZXhlZERCLm1ha2VLZXlQYXRoKCdmb28uYmFyLnpv
bycpCitQQVNTIGtleVBhdGguaWRlbnRpZmllciBpcyAiZm9vIgorUEFTUyBrZXlQYXRoLmhhc0lu
ZGV4IGlzIGZhbHNlCitQQVNTIGtleVBhdGguaW5kZXhWYWx1ZSBpcyAwCitQQVNTIGtleVBhdGgu
aWRlbnRpZmllciBpcyAiYmFyIgorUEFTUyBrZXlQYXRoLmhhc0luZGV4IGlzIGZhbHNlCitQQVNT
IGtleVBhdGguaW5kZXhWYWx1ZSBpcyAwCitQQVNTIGtleVBhdGguaWRlbnRpZmllciBpcyAiem9v
IgorUEFTUyBrZXlQYXRoLmhhc0luZGV4IGlzIGZhbHNlCitQQVNTIGtleVBhdGguaW5kZXhWYWx1
ZSBpcyAwCitQQVNTIDMgaXMgMworCitDaGVja2luZyBhWzM0XVsyMF0uZm9vWzJdLmJhcgoraW5k
ZXhlZERCLm1ha2VLZXlQYXRoKCdhWzM0XVsyMF0uZm9vWzJdLmJhcicpCitQQVNTIGtleVBhdGgu
aWRlbnRpZmllciBpcyAiYSIKK1BBU1Mga2V5UGF0aC5oYXNJbmRleCBpcyBmYWxzZQorUEFTUyBr
ZXlQYXRoLmluZGV4VmFsdWUgaXMgMAorUEFTUyBrZXlQYXRoLmlkZW50aWZpZXIgaXMgIiIKK1BB
U1Mga2V5UGF0aC5oYXNJbmRleCBpcyB0cnVlCitQQVNTIGtleVBhdGguaW5kZXhWYWx1ZSBpcyAz
NAorUEFTUyBrZXlQYXRoLmlkZW50aWZpZXIgaXMgIiIKK1BBU1Mga2V5UGF0aC5oYXNJbmRleCBp
cyB0cnVlCitQQVNTIGtleVBhdGguaW5kZXhWYWx1ZSBpcyAyMAorUEFTUyBrZXlQYXRoLmlkZW50
aWZpZXIgaXMgImZvbyIKK1BBU1Mga2V5UGF0aC5oYXNJbmRleCBpcyBmYWxzZQorUEFTUyBrZXlQ
YXRoLmluZGV4VmFsdWUgaXMgMAorUEFTUyBrZXlQYXRoLmlkZW50aWZpZXIgaXMgIiIKK1BBU1Mg
a2V5UGF0aC5oYXNJbmRleCBpcyB0cnVlCitQQVNTIGtleVBhdGguaW5kZXhWYWx1ZSBpcyAyCitQ
QVNTIGtleVBhdGguaWRlbnRpZmllciBpcyAiYmFyIgorUEFTUyBrZXlQYXRoLmhhc0luZGV4IGlz
IGZhbHNlCitQQVNTIGtleVBhdGguaW5kZXhWYWx1ZSBpcyAwCitQQVNTIDYgaXMgNgorCitDaGVj
a2luZyBhWyAzNCBdLlpvb1syXSAuYworaW5kZXhlZERCLm1ha2VLZXlQYXRoKCdhWyAzNCBdLlpv
b1syXSAuYycpCitQQVNTIGtleVBhdGguaWRlbnRpZmllciBpcyAiYSIKK1BBU1Mga2V5UGF0aC5o
YXNJbmRleCBpcyBmYWxzZQorUEFTUyBrZXlQYXRoLmluZGV4VmFsdWUgaXMgMAorUEFTUyBrZXlQ
YXRoLmlkZW50aWZpZXIgaXMgIiIKK1BBU1Mga2V5UGF0aC5oYXNJbmRleCBpcyB0cnVlCitQQVNT
IGtleVBhdGguaW5kZXhWYWx1ZSBpcyAzNAorUEFTUyBrZXlQYXRoLmlkZW50aWZpZXIgaXMgIlpv
byIKK1BBU1Mga2V5UGF0aC5oYXNJbmRleCBpcyBmYWxzZQorUEFTUyBrZXlQYXRoLmluZGV4VmFs
dWUgaXMgMAorUEFTUyBrZXlQYXRoLmlkZW50aWZpZXIgaXMgIiIKK1BBU1Mga2V5UGF0aC5oYXNJ
bmRleCBpcyB0cnVlCitQQVNTIGtleVBhdGguaW5kZXhWYWx1ZSBpcyAyCitQQVNTIGtleVBhdGgu
aWRlbnRpZmllciBpcyAiYyIKK1BBU1Mga2V5UGF0aC5oYXNJbmRleCBpcyBmYWxzZQorUEFTUyBr
ZXlQYXRoLmluZGV4VmFsdWUgaXMgMAorUEFTUyA1IGlzIDUKKworQ2hlY2tpbmcgYVtbMzRdXS5i
WzJdLmMKK2luZGV4ZWREQi5tYWtlS2V5UGF0aCgnYVtbMzRdXS5iWzJdLmMnKQorUEFTUyBrZXlQ
YXRoLmlkZW50aWZpZXIgaXMgImEiCitQQVNTIGtleVBhdGguaGFzSW5kZXggaXMgZmFsc2UKK1BB
U1Mga2V5UGF0aC5pbmRleFZhbHVlIGlzIDAKK1BBU1MgMSBpcyAxCitQQVNTIGtleVBhdGgucGFy
c2VyRXJyb3IgaXMgMworCitDaGVja2luZyBhW1szNF0uYlsyXS5jCitpbmRleGVkREIubWFrZUtl
eVBhdGgoJ2FbWzM0XS5iWzJdLmMnKQorUEFTUyBrZXlQYXRoLmlkZW50aWZpZXIgaXMgImEiCitQ
QVNTIGtleVBhdGguaGFzSW5kZXggaXMgZmFsc2UKK1BBU1Mga2V5UGF0aC5pbmRleFZhbHVlIGlz
IDAKK1BBU1MgMSBpcyAxCitQQVNTIGtleVBhdGgucGFyc2VyRXJyb3IgaXMgMworCitDaGVja2lu
ZyBhW1szNC5iWzJdLmMKK2luZGV4ZWREQi5tYWtlS2V5UGF0aCgnYVtbMzQuYlsyXS5jJykKK1BB
U1Mga2V5UGF0aC5pZGVudGlmaWVyIGlzICJhIgorUEFTUyBrZXlQYXRoLmhhc0luZGV4IGlzIGZh
bHNlCitQQVNTIGtleVBhdGguaW5kZXhWYWx1ZSBpcyAwCitQQVNTIDEgaXMgMQorUEFTUyBrZXlQ
YXRoLnBhcnNlckVycm9yIGlzIDMKKworQ2hlY2tpbmcgK2FbMzRdLmJbMl0uYworaW5kZXhlZERC
Lm1ha2VLZXlQYXRoKCcrYVszNF0uYlsyXS5jJykKK1BBU1MgMCBpcyAwCitQQVNTIGtleVBhdGgu
cGFyc2VyRXJyb3IgaXMgMQorCitDaGVja2luZyAlYVszNF0uYlsyXS5jCitpbmRleGVkREIubWFr
ZUtleVBhdGgoJyVhWzM0XS5iWzJdLmMnKQorUEFTUyAwIGlzIDAKK1BBU1Mga2V5UGF0aC5wYXJz
ZXJFcnJvciBpcyAxCisKK0NoZWNraW5nIGF7WzM0XX0uYlsyXS5jCitpbmRleGVkREIubWFrZUtl
eVBhdGgoJ2F7WzM0XX0uYlsyXS5jJykKK1BBU1Mga2V5UGF0aC5pZGVudGlmaWVyIGlzICJhIgor
UEFTUyBrZXlQYXRoLmhhc0luZGV4IGlzIGZhbHNlCitQQVNTIGtleVBhdGguaW5kZXhWYWx1ZSBp
cyAwCitQQVNTIDEgaXMgMQorUEFTUyBrZXlQYXRoLnBhcnNlckVycm9yIGlzIDIKKworQ2hlY2tp
bmcgYS4uYlsyXS5jCitpbmRleGVkREIubWFrZUtleVBhdGgoJ2EuLmJbMl0uYycpCitQQVNTIGtl
eVBhdGguaWRlbnRpZmllciBpcyAiYSIKK1BBU1Mga2V5UGF0aC5oYXNJbmRleCBpcyBmYWxzZQor
UEFTUyBrZXlQYXRoLmluZGV4VmFsdWUgaXMgMAorUEFTUyAxIGlzIDEKK1BBU1Mga2V5UGF0aC5w
YXJzZXJFcnJvciBpcyA0CisKK1BBU1Mgc3VjY2Vzc2Z1bGx5UGFyc2VkIGlzIHRydWUKKworVEVT
VCBDT01QTEVURQpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvc3RvcmFnZS9pbmRleGVkZGIvaWRi
LWtleXBhdGguaHRtbCBiL0xheW91dFRlc3RzL3N0b3JhZ2UvaW5kZXhlZGRiL2lkYi1rZXlwYXRo
Lmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMC4uMmIyNDc4N2Q5NGE3YzE1ZjNiMGViZmQ1NTQ3YjEzNjQ4YzQyNjYw
MAotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL3N0b3JhZ2UvaW5kZXhlZGRiL2lkYi1r
ZXlwYXRoLmh0bWwKQEAgLTAsMCArMSwxMyBAQAorPGh0bWw+Cis8aGVhZD4KKzxsaW5rIHJlbD0i
c3R5bGVzaGVldCIgaHJlZj0iLi4vLi4vZmFzdC9qcy9yZXNvdXJjZXMvanMtdGVzdC1zdHlsZS5j
c3MiPgorPHNjcmlwdCBzcmM9Ii4uLy4uL2Zhc3QvanMvcmVzb3VyY2VzL2pzLXRlc3QtcHJlLmpz
Ij48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIuLi8uLi9mYXN0L2pzL3Jlc291cmNlcy9qcy10ZXN0
LXBvc3QtZnVuY3Rpb24uanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9InJlc291cmNlcy9zaGFy
ZWQuanMiPjwvc2NyaXB0PgorPC9oZWFkPgorPGJvZHk+Cis8cCBpZD0iZGVzY3JpcHRpb24iPjwv
cD4KKzxkaXYgaWQ9ImNvbnNvbGUiPjwvZGl2PgorPHNjcmlwdCBzcmM9InNjcmlwdC10ZXN0cy9p
ZGIta2V5cGF0aC5qcyI+PC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9M
YXlvdXRUZXN0cy9zdG9yYWdlL2luZGV4ZWRkYi9zY3JpcHQtdGVzdHMvaWRiLWtleXBhdGguanMg
Yi9MYXlvdXRUZXN0cy9zdG9yYWdlL2luZGV4ZWRkYi9zY3JpcHQtdGVzdHMvaWRiLWtleXBhdGgu
anMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMC4uNDgwYmNkMjI2Mzc3OWU2NjU3OTcwMWQ0ZGFlYjk2YjRjN2I4MDYyZAot
LS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL3N0b3JhZ2UvaW5kZXhlZGRiL3NjcmlwdC10
ZXN0cy9pZGIta2V5cGF0aC5qcwpAQCAtMCwwICsxLDU1IEBACitkZXNjcmlwdGlvbigiVGVzdCBJ
bmRleGVkREIncyBLZXlQYXRoLiIpOworaWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikK
KyAgICBsYXlvdXRUZXN0Q29udHJvbGxlci53YWl0VW50aWxEb25lKCk7CisKK2Z1bmN0aW9uIGNo
ZWNrS2V5UGF0aChrZXlQYXRoVmFsdWUsIHRva2VucywgcGFyc2VyRXJyb3IpCit7CisgICAgZGVi
dWcoIkNoZWNraW5nICIgKyBrZXlQYXRoVmFsdWUpOworICAgIGtleVBhdGggPSBldmFsQW5kTG9n
KCJpbmRleGVkREIubWFrZUtleVBhdGgoJyIgKyBrZXlQYXRoVmFsdWUgKyAiJykiKTsKKyAgICBm
b3IgKHZhciBpID0gMDsga2V5UGF0aC5oYXNOZXh0KCk7IGtleVBhdGgubmV4dCgpLCArK2kpIHsK
KyAgICAgICAgZXhwZWN0ZWQgPSB0b2tlbnM7CisgICAgICAgIHNob3VsZEJlRXF1YWxUb1N0cmlu
Zygia2V5UGF0aC5pZGVudGlmaWVyIiwgdG9rZW5zW2ldLmlkZW50aWZpZXIpOworICAgICAgICBz
aG91bGRCZSgia2V5UGF0aC5oYXNJbmRleCIsICIiICsgZXhwZWN0ZWRbaV0uaGFzSW5kZXgpOwor
ICAgICAgICBzaG91bGRCZSgia2V5UGF0aC5pbmRleFZhbHVlIiwgIiIgKyB0b2tlbnNbaV0uaW5k
ZXhWYWx1ZSk7CisgICAgfQorICAgIHNob3VsZEJlKCIiICsgaSwgIiIgKyB0b2tlbnMubGVuZ3Ro
KTsKKyAgICBpZiAocGFyc2VyRXJyb3IgIT0gdW5kZWZpbmVkKQorICAgICAgICBzaG91bGRCZSgi
a2V5UGF0aC5wYXJzZXJFcnJvciIsICIiICsgcGFyc2VyRXJyb3IpOworICAgIGRlYnVnKCIiKTsK
K30KKworZnVuY3Rpb24gZXhwZWN0ZWRSZXN1bHQoZXhwZWN0ZWRJZGVudGlmaWVyLCBleHBlY3Rl
ZEhhc0luZGV4LCBleHBlY3RlZGluZGV4VmFsdWUpCit7CisgICAgcmV0dXJuIHtpZGVudGlmaWVy
OiBleHBlY3RlZElkZW50aWZpZXIsIGhhc0luZGV4OiBleHBlY3RlZEhhc0luZGV4LCBpbmRleFZh
bHVlOiBleHBlY3RlZGluZGV4VmFsdWV9OworfQorCitmdW5jdGlvbiB0ZXN0KCkKK3sKKyAgICBj
aGVja0tleVBhdGgoImZvby5iYXIuem9vIiwgW2V4cGVjdGVkUmVzdWx0KCJmb28iLCBmYWxzZSwg
MCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHBlY3RlZFJlc3VsdCgiYmFy
IiwgZmFsc2UsIDApLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhwZWN0ZWRS
ZXN1bHQoInpvbyIsIGZhbHNlLCAwKV0pOworICAgIGNoZWNrS2V5UGF0aCgiYVszNF1bMjBdLmZv
b1syXS5iYXIiLCBbZXhwZWN0ZWRSZXN1bHQoImEiLCBmYWxzZSwgMCksCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHBlY3RlZFJlc3VsdCgiIiwgdHJ1ZSwgMzQp
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhwZWN0ZWRSZXN1
bHQoIiIsIHRydWUsIDIwKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGV4cGVjdGVkUmVzdWx0KCJmb28iLCBmYWxzZSwgMCksCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBleHBlY3RlZFJlc3VsdCgiIiwgdHJ1ZSwgMiksCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHBlY3RlZFJlc3VsdCgiYmFy
IiwgZmFsc2UsIDApXSk7CisgICAgY2hlY2tLZXlQYXRoKCJhWyAzNCBdLlpvb19bMDIzXVx0Ll9j
IiwgW2V4cGVjdGVkUmVzdWx0KCJhIiwgZmFsc2UsIDApLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBleHBlY3RlZFJlc3VsdCgiIiwgdHJ1ZSwgMzQpLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHBlY3RlZFJlc3VsdCgi
Wm9vXyIsIGZhbHNlLCAwKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgZXhwZWN0ZWRSZXN1bHQoIiIsIHRydWUsIDIzKSwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgZXhwZWN0ZWRSZXN1bHQoIl9jIiwgZmFsc2UsIDApXSk7
CisgICAgY2hlY2tLZXlQYXRoKCJhW1szNF1dLmJbMl0uYyIsIFtleHBlY3RlZFJlc3VsdCgiYSIs
IGZhbHNlLCAwKV0sIDMpOworICAgIGNoZWNrS2V5UGF0aCgiYVtbMzRdLmJbMl0uYyIsIFtleHBl
Y3RlZFJlc3VsdCgiYSIsIGZhbHNlLCAwKV0sIDMpOworICAgIGNoZWNrS2V5UGF0aCgiYVtbMzQu
YlsyXS5jIiwgW2V4cGVjdGVkUmVzdWx0KCJhIiwgZmFsc2UsIDApXSwgMyk7CisgICAgY2hlY2tL
ZXlQYXRoKCIrYVszNF0uYlsyXS5jIiwgW10sIDEpOworICAgIGNoZWNrS2V5UGF0aCgiJWFbMzRd
LmJbMl0uYyIsIFtdLCAxKTsKKyAgICBjaGVja0tleVBhdGgoImF7WzM0XX0uYlsyXS5jIiwgW2V4
cGVjdGVkUmVzdWx0KCJhIiwgZmFsc2UsIDApXSwgMik7CisgICAgY2hlY2tLZXlQYXRoKCJhLi5i
WzJdLmMiLCBbZXhwZWN0ZWRSZXN1bHQoImEiLCBmYWxzZSwgMCldLCA1KTsKKyAgICBjaGVja0tl
eVBhdGgoImFbMzRdYi5mb29bMl0uYmFyIiwgW2V4cGVjdGVkUmVzdWx0KCJhIiwgZmFsc2UsIDAp
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhwZWN0ZWRSZXN1bHQo
IiIsIHRydWUsIDM0KV0sIDQpOworICAgIHN1Y2Nlc3NmdWxseVBhcnNlZCA9IHRydWU7CisgICAg
ZG9uZSgpOworfQorCit0ZXN0KCk7CmRpZmYgLS1naXQgYS9XZWJDb3JlL0NoYW5nZUxvZyBiL1dl
YkNvcmUvQ2hhbmdlTG9nCmluZGV4IDEzMDQyMDE2ZDBiYTE1ZjM1NTU2OTg3MmMxMjhjNDgzZTk1
MGFmOWQuLjk0YWM2NmQ4MjZlZDVkYzExYTkwZDQ5NzQ0ODFhMzQ3YmNlYjg0ZTggMTAwNjQ0Ci0t
LSBhL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEs
NDMgQEAKKzIwMTAtMDctMjYgIE1hcmN1cyBCdWxhY2ggIDxidWxhY2hAY2hyb21pdW0ub3JnPgor
CisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEltcGxlbWVu
dCBJREJLZXlQYXRoIHBhcnNlci4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTQyOTc2CisKKyAgICAgICAgVGVzdDogc3RvcmFnZS9pbmRleGVkZGIvaWRi
LWtleXBhdGguaHRtbAorCisgICAgICAgIElEQktleVBhdGggaXMgYW4gaW50ZXJuYWwgY2xhc3Ms
IGV4cG9zZWQgb25seSBmb3IgdGVzdHMuCisgICAgICAgIEl0J2xsIGFsbG93IGluZGV4ZWQgZGF0
YWJhc2UgaW1wbGVtZW50YXRpb24gdG8gdHJhdmVyc2UgYSBnaXZlbiBrZXkgcGF0aCBhbmQgb2J0
YWluIHRoZSBjb3JyZXNwb25kaW5nIHByb3BlcnRpZXMKKyAgICAgICAgZnJvbSBhIFNlcmlhbGl6
ZWRTY3JpcHRWYWx1ZS4KKworICAgICAgICAqIFdlYkNvcmUuZ3lwaToKKyAgICAgICAgKiBzdG9y
YWdlL0lEQktleVBhdGguY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OklEQktleVBhdGg6
OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpJREJLZXlQYXRoOjpJREJLZXlQYXRoKToKKyAg
ICAgICAgKFdlYkNvcmU6OklEQktleVBhdGg6On5JREJLZXlQYXRoKToKKyAgICAgICAgKFdlYkNv
cmU6OklEQktleVBhdGg6Omhhc05leHQpOgorICAgICAgICAoV2ViQ29yZTo6SURCS2V5UGF0aDo6
bmV4dCk6CisgICAgICAgIChXZWJDb3JlOjpJREJLZXlQYXRoOjppZGVudGlmaWVyKToKKyAgICAg
ICAgKFdlYkNvcmU6OklEQktleVBhdGg6Omhhc0luZGV4KToKKyAgICAgICAgKFdlYkNvcmU6OklE
QktleVBhdGg6OmluZGV4VmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6SURCS2V5UGF0aDo6cGFy
c2UpOgorICAgICAgICAoV2ViQ29yZTo6aXNTYWZlSWRlbnRpZmllckNoYXJhY3Rlcik6CisgICAg
ICAgIChXZWJDb3JlOjpJREJLZXlQYXRoOjpMZXhlcjo6bGV4KToKKyAgICAgICAgKFdlYkNvcmU6
OklEQktleVBhdGg6OkxleGVyOjpsZXhJZGVudGlmaWVyKToKKyAgICAgICAgKFdlYkNvcmU6OklE
QktleVBhdGg6OkxleGVyOjpsZXhOdW1iZXIpOgorICAgICAgICAqIHN0b3JhZ2UvSURCS2V5UGF0
aC5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OklEQktleVBhdGg6OlRva2VuOjpUb2tlbik6
CisgICAgICAgIChXZWJDb3JlOjpJREJLZXlQYXRoOjopOgorICAgICAgICAoV2ViQ29yZTo6SURC
S2V5UGF0aDo6TGV4ZXI6OkxleGVyKToKKyAgICAgICAgKFdlYkNvcmU6OklEQktleVBhdGg6Okxl
eGVyOjpuZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OklEQktleVBhdGg6OkxleGVyOjpjdXJyZW50
VG9rZW4pOgorICAgICAgICAqIHN0b3JhZ2UvSURCS2V5UGF0aC5pZGw6IEFkZGVkLgorICAgICAg
ICAqIHN0b3JhZ2UvSW5kZXhlZERhdGFiYXNlUmVxdWVzdC5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpJbmRleGVkRGF0YWJhc2VSZXF1ZXN0OjptYWtlS2V5UGF0aCk6CisgICAgICAgICogc3RvcmFn
ZS9JbmRleGVkRGF0YWJhc2VSZXF1ZXN0Lmg6CisgICAgICAgICogc3RvcmFnZS9JbmRleGVkRGF0
YWJhc2VSZXF1ZXN0LmlkbDoKKwogMjAxMC0wNy0yNyAgU3RldmUgQmxvY2sgIDxzdGV2ZWJsb2Nr
QGdvb2dsZS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgSmVyZW15IE9ybG93LgpkaWZmIC0t
Z2l0IGEvV2ViQ29yZS9XZWJDb3JlLmd5cGkgYi9XZWJDb3JlL1dlYkNvcmUuZ3lwaQppbmRleCBh
YWZiMjIyZWEyZDZkMmM1MjkzOTdhNTQ0YWI5YTBkZTJkMDg0ODNmLi44MjAyOWY0MzY1ODI0Yzkw
YWVmZGVlY2Y2YzY5ZWNjNWU0ODg1NjNmIDEwMDY0NAotLS0gYS9XZWJDb3JlL1dlYkNvcmUuZ3lw
aQorKysgYi9XZWJDb3JlL1dlYkNvcmUuZ3lwaQpAQCAtMjM4LDYgKzIzOCw3IEBACiAgICAgICAg
ICAgICAnc3RvcmFnZS9JREJFdmVudC5pZGwnLAogICAgICAgICAgICAgJ3N0b3JhZ2UvSURCSW5k
ZXhSZXF1ZXN0LmlkbCcsCiAgICAgICAgICAgICAnc3RvcmFnZS9JREJLZXkuaWRsJywKKyAgICAg
ICAgICAgICdzdG9yYWdlL0lEQktleVBhdGguaWRsJywKICAgICAgICAgICAgICdzdG9yYWdlL0lE
QktleVJhbmdlLmlkbCcsCiAgICAgICAgICAgICAnc3RvcmFnZS9JREJPYmplY3RTdG9yZVJlcXVl
c3QuaWRsJywKICAgICAgICAgICAgICdzdG9yYWdlL0lEQlJlcXVlc3QuaWRsJywKQEAgLTM0ODEs
NiArMzQ4Miw4IEBACiAgICAgICAgICAgICAnc3RvcmFnZS9JREJJbmRleFJlcXVlc3QuaCcsCiAg
ICAgICAgICAgICAnc3RvcmFnZS9JREJLZXkuY3BwJywKICAgICAgICAgICAgICdzdG9yYWdlL0lE
QktleS5oJywKKyAgICAgICAgICAgICdzdG9yYWdlL0lEQktleVBhdGguY3BwJywKKyAgICAgICAg
ICAgICdzdG9yYWdlL0lEQktleVBhdGguaCcsCiAgICAgICAgICAgICAnc3RvcmFnZS9JREJLZXlS
YW5nZS5jcHAnLAogICAgICAgICAgICAgJ3N0b3JhZ2UvSURCS2V5UmFuZ2UuaCcsCiAgICAgICAg
ICAgICAnc3RvcmFnZS9JREJLZXlUcmVlLmgnLApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9zdG9yYWdl
L0lEQktleVBhdGguY3BwIGIvV2ViQ29yZS9zdG9yYWdlL0lEQktleVBhdGguY3BwCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAuLjU2YjAxNWE0Mjg2NmU5MDgwMDQ2Yzc0ZGQ0MDdhNTVhNmQ3NDA1YTMKLS0tIC9kZXYvbnVs
bAorKysgYi9XZWJDb3JlL3N0b3JhZ2UvSURCS2V5UGF0aC5jcHAKQEAgLTAsMCArMSwyOTggQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAx
LiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUg
SU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiSURCS2V5UGF0aC5oIgorCisj
aW5jbHVkZSAiU3RyaW5nQnVpbGRlci5oIgorI2luY2x1ZGUgPHd0Zi9BU0NJSUNUeXBlLmg+Cisj
aW5jbHVkZSA8d3RmL2R0b2EuaD4KKworI2lmIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQorCitu
YW1lc3BhY2UgV2ViQ29yZSB7CisKK1Bhc3NSZWZQdHI8SURCS2V5UGF0aD4gSURCS2V5UGF0aDo6
Y3JlYXRlKGNvbnN0IFN0cmluZyYga2V5UGF0aCkKK3sKKyAgICBSZWZQdHI8SURCS2V5UGF0aD4g
aWRiS2V5UGF0aCA9IGFkb3B0UmVmKG5ldyBJREJLZXlQYXRoKGtleVBhdGgpKTsKKyAgICBpZGJL
ZXlQYXRoLT5wYXJzZSgpOworICAgIHJldHVybiBpZGJLZXlQYXRoLnJlbGVhc2UoKTsKK30KKwor
SURCS2V5UGF0aDo6SURCS2V5UGF0aChjb25zdCBTdHJpbmcmIGtleVBhdGgpCisgICAgOiBtX2tl
eVBhdGgoa2V5UGF0aCkKKyAgICAsIG1fY3VycmVudFRva2VuKDApCisgICAgLCBtX2xleGVyKGtl
eVBhdGgpCit7CisgICAgbV9sZXhlci5uZXh0KCk7Cit9CisKK0lEQktleVBhdGg6On5JREJLZXlQ
YXRoKCkKK3sKK30KKworYm9vbCBJREJLZXlQYXRoOjpoYXNOZXh0KCkKK3sKKyAgICByZXR1cm4g
bV9jdXJyZW50VG9rZW4gPCBtX3Rva2Vucy5zaXplKCk7Cit9CisKK3ZvaWQgSURCS2V5UGF0aDo6
bmV4dCgpCit7CisgICAgaWYgKG1fY3VycmVudFRva2VuIDwgbV90b2tlbnMuc2l6ZSgpKQorICAg
ICAgICArK21fY3VycmVudFRva2VuOworfQorCitTdHJpbmcgSURCS2V5UGF0aDo6aWRlbnRpZmll
cigpCit7CisgICAgaWYgKG1fY3VycmVudFRva2VuID49IG1fdG9rZW5zLnNpemUoKSkKKyAgICAg
ICAgcmV0dXJuICIiOworICAgIHJldHVybiBtX3Rva2Vuc1ttX2N1cnJlbnRUb2tlbl0uaWRlbnRp
ZmllcjsKK30KKworYm9vbCBJREJLZXlQYXRoOjpoYXNJbmRleCgpIGNvbnN0Cit7CisgICAgaWYg
KG1fY3VycmVudFRva2VuID49IG1fdG9rZW5zLnNpemUoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgIHJldHVybiBtX3Rva2Vuc1ttX2N1cnJlbnRUb2tlbl0uaGFzSW5kZXg7Cit9CisKK2lu
dCBJREJLZXlQYXRoOjppbmRleFZhbHVlKCkgY29uc3QKK3sKKyAgICBpZiAobV9jdXJyZW50VG9r
ZW4gPj0gbV90b2tlbnMuc2l6ZSgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgcmV0dXJu
IG1fdG9rZW5zW21fY3VycmVudFRva2VuXS5pbmRleFZhbHVlOworfQorCitpbnQgSURCS2V5UGF0
aDo6cGFyc2VyRXJyb3IoKSBjb25zdAoreworICAgIHJldHVybiBtX3BhcnNlckVycm9yOworfQor
Cit2b2lkIElEQktleVBhdGg6OnBhcnNlKCkKK3sKKyAgICBQYXJzZXJTdGF0ZSBzdGF0ZSA9IFN0
YXJ0OworCisgICAgd2hpbGUgKDEpIHsKKyAgICAgICAgc3dpdGNoIChzdGF0ZSkgeworICAgICAg
ICBjYXNlIFN0YXJ0IDogeworICAgICAgICAgICAgVG9rZW5UeXBlIHRva2VuID0gbV9sZXhlci5j
dXJyZW50VG9rZW4oKS50eXBlOworICAgICAgICAgICAgaWYgKHRva2VuID09IFRva0lkZW50aWZp
ZXIpIHsKKyAgICAgICAgICAgICAgICBzdGF0ZSA9IElkZW50aWZpZXI7CisgICAgICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAodG9rZW4gPT0gVG9rTEJy
YWNrZXQpIHsKKyAgICAgICAgICAgICAgICBzdGF0ZSA9IEFycmF5OworICAgICAgICAgICAgICAg
IGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKHRva2VuID09IFRva0VuZCkg
eworICAgICAgICAgICAgICAgIG1fcGFyc2VyRXJyb3IgPSBQYXJzZUVycm9yTm9uZTsKKyAgICAg
ICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisgICAgICAgICAgICBtX3BhcnNlckVy
cm9yID0gUGFyc2VFcnJvclN0YXJ0OworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9Cisg
ICAgICAgIGNhc2UgSWRlbnRpZmllciA6IHsKKyAgICAgICAgICAgIExleGVyOjpQYXJzZXJUb2tl
biB0b2tlbiA9IG1fbGV4ZXIuY3VycmVudFRva2VuKCk7CisgICAgICAgICAgICBBU1NFUlQodG9r
ZW4udHlwZSA9PSBUb2tJZGVudGlmaWVyKTsKKyAgICAgICAgICAgIFRva2VuIGlkYlRva2VuOwor
ICAgICAgICAgICAgaWRiVG9rZW4uaWRlbnRpZmllciA9IHRva2VuLnN0cmluZ1Rva2VuOworICAg
ICAgICAgICAgbV90b2tlbnMuYXBwZW5kKGlkYlRva2VuKTsKKworICAgICAgICAgICAgbV9sZXhl
ci5uZXh0KCk7CisgICAgICAgICAgICB0b2tlbiA9IG1fbGV4ZXIuY3VycmVudFRva2VuKCk7Cisg
ICAgICAgICAgICBpZiAodG9rZW4udHlwZSA9PSBUb2tEb3QpIHsKKyAgICAgICAgICAgICAgICBz
dGF0ZSA9IERvdDsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIGlmICh0b2tlbi50eXBlID09IFRva0xCcmFja2V0KSB7CisgICAgICAgICAgICAgICAg
c3RhdGUgPSBBcnJheTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIGlmICh0b2tlbi50eXBlID09IFRva0VuZCkgeworICAgICAgICAgICAgICAgIG1f
cGFyc2VyRXJyb3IgPSBQYXJzZUVycm9yTm9uZTsKKyAgICAgICAgICAgICAgICByZXR1cm47Cisg
ICAgICAgICAgICB9CisgICAgICAgICAgICBtX3BhcnNlckVycm9yID0gUGFyc2VFcnJvcklkZW50
aWZpZXI7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBBcnJh
eSA6IHsKKyAgICAgICAgICAgIExleGVyOjpQYXJzZXJUb2tlbiB0b2tlbiA9IG1fbGV4ZXIuY3Vy
cmVudFRva2VuKCk7CisgICAgICAgICAgICBBU1NFUlQodG9rZW4udHlwZSA9PSBUb2tMQnJhY2tl
dCk7CisKKyAgICAgICAgICAgIG1fbGV4ZXIubmV4dCgpOworICAgICAgICAgICAgdG9rZW4gPSBt
X2xleGVyLmN1cnJlbnRUb2tlbigpOworICAgICAgICAgICAgaWYgKHRva2VuLnR5cGUgIT0gVG9r
TnVtYmVyKSB7CisgICAgICAgICAgICAgICAgbV9wYXJzZXJFcnJvciA9IFBhcnNlRXJyb3JBcnJh
eUluZGV4OworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKworICAgICAg
ICAgICAgQVNTRVJUKHRva2VuLnR5cGUgPT0gVG9rTnVtYmVyKTsKKyAgICAgICAgICAgIFRva2Vu
IGlkYlRva2VuOworICAgICAgICAgICAgaWRiVG9rZW4uaGFzSW5kZXggPSB0cnVlOworICAgICAg
ICAgICAgaWRiVG9rZW4uaW5kZXhWYWx1ZSA9IHRva2VuLm51bWJlclRva2VuOworICAgICAgICAg
ICAgbV90b2tlbnMuYXBwZW5kKGlkYlRva2VuKTsKKworICAgICAgICAgICAgbV9sZXhlci5uZXh0
KCk7CisgICAgICAgICAgICB0b2tlbiA9IG1fbGV4ZXIuY3VycmVudFRva2VuKCk7CisgICAgICAg
ICAgICBpZiAodG9rZW4udHlwZSAhPSBUb2tSQnJhY2tldCkgeworICAgICAgICAgICAgICAgIG1f
cGFyc2VyRXJyb3IgPSBQYXJzZUVycm9yQXJyYXlJbmRleDsKKyAgICAgICAgICAgICAgICByZXR1
cm47CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIG1fbGV4ZXIubmV4dCgpOworICAgICAg
ICAgICAgdG9rZW4gPSBtX2xleGVyLmN1cnJlbnRUb2tlbigpOworICAgICAgICAgICAgaWYgKHRv
a2VuLnR5cGUgPT0gVG9rRG90KQorICAgICAgICAgICAgICAgIHN0YXRlID0gRG90OworICAgICAg
ICAgICAgZWxzZSBpZiAodG9rZW4udHlwZSA9PSBUb2tMQnJhY2tldCkKKyAgICAgICAgICAgICAg
ICBzdGF0ZSA9IEFycmF5OworICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgbV9w
YXJzZXJFcnJvciA9IFBhcnNlckVycm9yQWZ0ZXJBcnJheTsKKyAgICAgICAgICAgICAgICByZXR1
cm47CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAg
ICAgICAgY2FzZSBEb3Q6IHsKKyAgICAgICAgICAgIExleGVyOjpQYXJzZXJUb2tlbiB0b2tlbiA9
IG1fbGV4ZXIuY3VycmVudFRva2VuKCk7CisgICAgICAgICAgICBBU1NFUlQodG9rZW4udHlwZSA9
PSBUb2tEb3QpOworCisgICAgICAgICAgICBtX2xleGVyLm5leHQoKTsKKyAgICAgICAgICAgIHRv
a2VuID0gbV9sZXhlci5jdXJyZW50VG9rZW4oKTsKKyAgICAgICAgICAgIGlmICh0b2tlbi50eXBl
ICE9IFRva0lkZW50aWZpZXIpIHsKKyAgICAgICAgICAgICAgICBtX3BhcnNlckVycm9yID0gUGFy
c2VFcnJvckRvdDsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisKKyAg
ICAgICAgICAgIHN0YXRlID0gSWRlbnRpZmllcjsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICB9CisgICAgICAgIH0KKyAgICB9Cit9CisKK0lEQktleVBhdGg6OlRva2VuVHlwZSBJREJLZXlQ
YXRoOjpMZXhlcjo6bGV4KFBhcnNlclRva2VuJiB0b2tlbikKK3sKKyAgICB3aGlsZSAobV9wdHIg
PCBtX2VuZCAmJiBpc0FTQ0lJU3BhY2UoKm1fcHRyKSkKKyAgICAgICAgKyttX3B0cjsKKworICAg
IGlmIChtX3B0ciA+PSBtX2VuZCkgeworICAgICAgICB0b2tlbi50eXBlID0gVG9rRW5kOworICAg
ICAgICB0b2tlbi5zdGFydCA9IG1fcHRyOworICAgICAgICB0b2tlbi5lbmQgPSBtX3B0cjsKKyAg
ICAgICAgcmV0dXJuIFRva0VuZDsKKyAgICB9CisgICAgQVNTRVJUKG1fcHRyIDwgbV9lbmQpOwor
ICAgIHRva2VuLnR5cGUgPSBUb2tFcnJvcjsKKyAgICB0b2tlbi5zdGFydCA9IG1fcHRyOworICAg
IHN3aXRjaCAoKm1fcHRyKSB7CisgICAgY2FzZSAnWyc6CisgICAgICAgIHRva2VuLnR5cGUgPSBU
b2tMQnJhY2tldDsKKyAgICAgICAgdG9rZW4uZW5kID0gKyttX3B0cjsKKyAgICAgICAgcmV0dXJu
IFRva0xCcmFja2V0OworICAgIGNhc2UgJ10nOgorICAgICAgICB0b2tlbi50eXBlID0gVG9rUkJy
YWNrZXQ7CisgICAgICAgIHRva2VuLmVuZCA9ICsrbV9wdHI7CisgICAgICAgIHJldHVybiBUb2tS
QnJhY2tldDsKKyAgICBjYXNlICcuJzoKKyAgICAgICAgdG9rZW4udHlwZSA9IFRva0RvdDsKKyAg
ICAgICAgdG9rZW4uZW5kID0gKyttX3B0cjsKKyAgICAgICAgcmV0dXJuIFRva0RvdDsKKyAgICBj
YXNlICcwJzoKKyAgICBjYXNlICcxJzoKKyAgICBjYXNlICcyJzoKKyAgICBjYXNlICczJzoKKyAg
ICBjYXNlICc0JzoKKyAgICBjYXNlICc1JzoKKyAgICBjYXNlICc2JzoKKyAgICBjYXNlICc3JzoK
KyAgICBjYXNlICc4JzoKKyAgICBjYXNlICc5JzoKKyAgICAgICAgcmV0dXJuIGxleE51bWJlcih0
b2tlbik7CisgICAgZGVmYXVsdDoKKyAgICAgICAgcmV0dXJuIGxleElkZW50aWZpZXIodG9rZW4p
OworICAgIH0KKyAgICByZXR1cm4gVG9rRXJyb3I7Cit9CisKK3N0YXRpYyBpbmxpbmUgYm9vbCBp
c1NhZmVJZGVudGlmaWVyU3RhcnRDaGFyYWN0ZXIoVUNoYXIgYykKK3sKKyAgICByZXR1cm4gaXNB
U0NJSUFscGhhKGMpIHx8IChjID09ICdfJykgfHwgKGMgPT0gJyQnKTsKK30KKworc3RhdGljIGlu
bGluZSBib29sIGlzU2FmZUlkZW50aWZpZXJDaGFyYWN0ZXIoVUNoYXIgYykKK3sKKyAgICByZXR1
cm4gaXNBU0NJSUFscGhhbnVtZXJpYyhjKSB8fCAoYyA9PSAnXycpIHx8IChjID09ICckJyk7Cit9
CisKK0lEQktleVBhdGg6OlRva2VuVHlwZSBJREJLZXlQYXRoOjpMZXhlcjo6bGV4SWRlbnRpZmll
cihQYXJzZXJUb2tlbiYgdG9rZW4pCit7CisgICAgY29uc3QgVUNoYXIqIHN0YXJ0ID0gbV9wdHI7
CisgICAgaWYgKG1fcHRyIDwgbV9lbmQgJiYgaXNTYWZlSWRlbnRpZmllclN0YXJ0Q2hhcmFjdGVy
KCptX3B0cikpCisgICAgICAgICsrbV9wdHI7CisgICAgZWxzZQorICAgICAgICByZXR1cm4gVG9r
RXJyb3I7CisKKyAgICB3aGlsZSAobV9wdHIgPCBtX2VuZCAmJiBpc1NhZmVJZGVudGlmaWVyQ2hh
cmFjdGVyKCptX3B0cikpCisgICAgICAgICsrbV9wdHI7CisKKyAgICBTdHJpbmcgaWRlbnRpZmll
cjsKKyAgICBpZiAoc3RhcnQgPCBtX3B0cikKKyAgICAgICAgaWRlbnRpZmllciA9IFN0cmluZyhz
dGFydCwgbV9wdHIgLSBzdGFydCk7CisKKyAgICB0b2tlbi5zdHJpbmdUb2tlbiA9IGlkZW50aWZp
ZXI7CisgICAgdG9rZW4udHlwZSA9IFRva0lkZW50aWZpZXI7CisgICAgdG9rZW4uZW5kID0gbV9w
dHI7CisgICAgcmV0dXJuIFRva0lkZW50aWZpZXI7Cit9CisKK0lEQktleVBhdGg6OlRva2VuVHlw
ZSBJREJLZXlQYXRoOjpMZXhlcjo6bGV4TnVtYmVyKFBhcnNlclRva2VuJiB0b2tlbikKK3sKKyAg
ICBjb25zdCBVQ2hhciogc3RhcnQgPSBtX3B0cjsKKyAgICBpZiAobV9wdHIgPCBtX2VuZCkgewor
ICAgICAgICAvLyBbMC05XSoKKyAgICAgICAgd2hpbGUgKG1fcHRyIDwgbV9lbmQgJiYgaXNBU0NJ
SURpZ2l0KCptX3B0cikpCisgICAgICAgICAgICArK21fcHRyOworICAgIH0gZWxzZQorICAgICAg
ICByZXR1cm4gVG9rRXJyb3I7CisKKyAgICBTdHJpbmcgbnVtYmVyQXNTdHJpbmc7CisgICAgaWYg
KHN0YXJ0IDwgbV9wdHIpIHsKKyAgICAgICAgbnVtYmVyQXNTdHJpbmcgPSBTdHJpbmcoc3RhcnQs
IG1fcHRyIC0gc3RhcnQpOworICAgICAgICBib29sIG9rID0gZmFsc2U7CisgICAgICAgIGludCBu
dW1iZXIgPSBudW1iZXJBc1N0cmluZy50b0ludFN0cmljdCgmb2spOworICAgICAgICBpZiAoIW9r
KQorICAgICAgICAgICAgcmV0dXJuIFRva0Vycm9yOworICAgICAgICB0b2tlbi50eXBlID0gVG9r
TnVtYmVyOworICAgICAgICB0b2tlbi5udW1iZXJUb2tlbiA9IG51bWJlcjsKKyAgICAgICAgdG9r
ZW4uZW5kID0gbV9wdHI7CisgICAgICAgIHJldHVybiBUb2tOdW1iZXI7CisgICAgfQorICAgIHJl
dHVybiBUb2tFcnJvcjsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8g
RU5BQkxFKElOREVYRURfREFUQUJBU0UpCmRpZmYgLS1naXQgYS9XZWJDb3JlL3N0b3JhZ2UvSURC
S2V5UGF0aC5oIGIvV2ViQ29yZS9zdG9yYWdlL0lEQktleVBhdGguaApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi43Mzdh
Y2M5ZThhMjIwNjA0MTliMDkyYjcyMTZmNWU0YWM4ZDQ3MDhkCi0tLSAvZGV2L251bGwKKysrIGIv
V2ViQ29yZS9zdG9yYWdlL0lEQktleVBhdGguaApAQCAtMCwwICsxLDEyNyBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5E
IElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisg
KiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBP
UiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNp
Zm5kZWYgSURCS2V5UGF0aF9oCisjZGVmaW5lIElEQktleVBhdGhfaAorCisjaWYgRU5BQkxFKElO
REVYRURfREFUQUJBU0UpCisKKyNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgorI2luY2x1ZGUg
PHd0Zi9SZWZDb3VudGVkLmg+CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorI2luY2x1ZGUgPHd0
Zi90ZXh0L1dURlN0cmluZy5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIElEQktl
eVBhdGggOiBwdWJsaWMgUmVmQ291bnRlZDxJREJLZXlQYXRoPiB7CitwdWJsaWM6CisgICAgc3Rh
dGljIFBhc3NSZWZQdHI8SURCS2V5UGF0aD4gY3JlYXRlKGNvbnN0IFN0cmluZyYpOworICAgIH5J
REJLZXlQYXRoKCk7CisKKyAgICBib29sIGhhc05leHQoKTsKKyAgICB2b2lkIG5leHQoKTsKKyAg
ICBTdHJpbmcgaWRlbnRpZmllcigpOworICAgIGJvb2wgaGFzSW5kZXgoKSBjb25zdDsKKyAgICBp
bnQgaW5kZXhWYWx1ZSgpIGNvbnN0OworCisgICAgaW50IHBhcnNlckVycm9yKCkgY29uc3Q7CisK
K3ByaXZhdGU6CisgICAgc3RydWN0IFRva2VuIHsKKyAgICAgICAgU3RyaW5nIGlkZW50aWZpZXI7
CisgICAgICAgIGJvb2wgaGFzSW5kZXg7CisgICAgICAgIGludCBpbmRleFZhbHVlOworICAgICAg
ICBUb2tlbigpIDogaGFzSW5kZXgoZmFsc2UpLCBpbmRleFZhbHVlKDApIHt9CisgICAgfTsKKyAg
ICBleHBsaWNpdCBJREJLZXlQYXRoKGNvbnN0IFN0cmluZyYpOworCisgICAgU3RyaW5nIG1fa2V5
UGF0aDsKKyAgICBWZWN0b3I8VG9rZW4+IG1fdG9rZW5zOworICAgIGludCBtX2N1cnJlbnRUb2tl
bjsKKyAgICBpbnQgbV9wYXJzZXJFcnJvcjsKKworICAgIC8vIFRoaXMgaXMgYSBzaW1wbGlmaWVk
IHBhcnNlciBsb29zZWx5IGJhc2VkIG9uIExpdGVyYWxQYXJzZXIuCisgICAgLy8gQW4gSURCS2V5
UGF0aCBpcyBkZWZpbmVkIGFzIGEgc2VxdWVuY2Ugb2Y6CisgICAgLy8gaWRlbnRpZmllckF7Lmlk
ZW50aWZpZXJCe1tudW1lcmljX3ZhbHVlXX0KKyAgICAvLyB3aGVyZSAie30iIHJlcHJlc2VudHMg
YW4gb3B0aW9uYWwgcGFydAorICAgIC8vIFRoZSBiYXNpYyBzdGF0ZSBtYWNoaW5lIGlzOgorICAg
IC8vIFN0YXJ0ID0+IHtJZGVudGlmaWVyLCBBcnJheX0KKyAgICAvLyBJZGVudGlmaWVyID0+IHtE
b3QsIEFycmF5fQorICAgIC8vIEFycmF5ID0+IHtTdGFydCwgRG90fQorICAgIC8vIERvdCA9PiB7
SWRlbnRpZmllcn0KKyAgICAvLyBJdCBiYWlscyBvdXQgYXMgc29vbiBhcyBpdCBmaW5kcyBhbiBl
cnJvciwgYnV0IGRvZXNuJ3QgZGlzY2FyZCB0aGUgYml0cyBpdCBtYW5hZ2VkIHRvIHBhcnNlLgor
ICAgIGVudW0gUGFyc2VyU3RhdGUgeyAgU3RhcnQsIElkZW50aWZpZXIsIEFycmF5LCBEb3QgfTsK
KyAgICBlbnVtIFRva2VuVHlwZSB7IFRva0xCcmFja2V0LCBUb2tSQnJhY2tldCwKKyAgICAgICAg
ICAgICAgICAgICAgIFRva0lkZW50aWZpZXIsIFRva051bWJlciwKKyAgICAgICAgICAgICAgICAg
ICAgIFRva0RvdCwgVG9rRW5kLCBUb2tFcnJvciB9OworICAgIGVudW0gUGFyc2VFcnJvciB7IFBh
cnNlRXJyb3JOb25lLCBQYXJzZUVycm9yU3RhcnQsIFBhcnNlRXJyb3JJZGVudGlmaWVyLAorICAg
ICAgICAgICAgICAgICAgICAgIFBhcnNlRXJyb3JBcnJheUluZGV4LCBQYXJzZXJFcnJvckFmdGVy
QXJyYXksIFBhcnNlRXJyb3JEb3R9OworCisgICAgdm9pZCBwYXJzZSgpOworCisgICAgY2xhc3Mg
TGV4ZXIgeworICAgIHB1YmxpYzoKKyAgICAgICAgc3RydWN0IFBhcnNlclRva2VuIHsKKyAgICAg
ICAgICAgIFRva2VuVHlwZSB0eXBlOworICAgICAgICAgICAgY29uc3QgVUNoYXIqIHN0YXJ0Owor
ICAgICAgICAgICAgY29uc3QgVUNoYXIqIGVuZDsKKyAgICAgICAgICAgIFN0cmluZyBzdHJpbmdU
b2tlbjsKKyAgICAgICAgICAgIGRvdWJsZSBudW1iZXJUb2tlbjsKKyAgICAgICAgfTsKKyAgICAg
ICAgZXhwbGljaXQgTGV4ZXIoY29uc3QgU3RyaW5nJiBzKQorICAgICAgICAgICAgOiBtX3N0cmlu
ZyhzKQorICAgICAgICAgICAgLCBtX3B0cihzLmNoYXJhY3RlcnMoKSkKKyAgICAgICAgICAgICwg
bV9lbmQocy5jaGFyYWN0ZXJzKCkgKyBzLmxlbmd0aCgpKQorICAgICAgICB7CisgICAgICAgIH0K
KworICAgICAgICBUb2tlblR5cGUgbmV4dCgpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVy
biBsZXgobV9jdXJyZW50VG9rZW4pOworICAgICAgICB9CisKKyAgICAgICAgY29uc3QgUGFyc2Vy
VG9rZW4mIGN1cnJlbnRUb2tlbigpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBtX2N1
cnJlbnRUb2tlbjsKKyAgICAgICAgfQorCisgICAgcHJpdmF0ZToKKyAgICAgICAgVG9rZW5UeXBl
IGxleChQYXJzZXJUb2tlbiYpOworICAgICAgICBUb2tlblR5cGUgbGV4SWRlbnRpZmllcihQYXJz
ZXJUb2tlbiYpOworICAgICAgICBUb2tlblR5cGUgbGV4TnVtYmVyKFBhcnNlclRva2VuJik7Cisg
ICAgICAgIFBhcnNlclRva2VuIG1fY3VycmVudFRva2VuOworICAgICAgICBTdHJpbmcgbV9zdHJp
bmc7CisgICAgICAgIGNvbnN0IFVDaGFyKiBtX3B0cjsKKyAgICAgICAgY29uc3QgVUNoYXIqIG1f
ZW5kOworICAgICB9OworCisgICAgTGV4ZXIgbV9sZXhlcjsKK307CisKK30gLy8gbmFtZXNwYWNl
IFdlYkNvcmUKKworI2VuZGlmCisKKyNlbmRpZiAvLyBJREJLZXlQYXRoX2gKZGlmZiAtLWdpdCBh
L1dlYkNvcmUvc3RvcmFnZS9JREJLZXlQYXRoLmlkbCBiL1dlYkNvcmUvc3RvcmFnZS9JREJLZXlQ
YXRoLmlkbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwLi5hMDNlN2IxN2U3MjEzMjkzOTJmNzdhNTMwNDE1Mzk2OGEyNmE5
ZTA3Ci0tLSAvZGV2L251bGwKKysrIGIvV2ViQ29yZS9zdG9yYWdlL0lEQktleVBhdGguaWRsCkBA
IC0wLDAgKzEsMzkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFO
WQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP
RgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKyAqLworCittb2R1bGUgc3RvcmFnZSB7CisgICAgLy8gRklYTUU6IElE
QktleVBhdGggaXMgcHVibGljIG9ubHkgdG8gYWxsb3cgdGVzdGluZywgcmVtb3ZlIGFzIHNvb24g
YXMgd2UgaGF2ZSBtb3JlIGNvbXByZWhlbnNpdmUgdGVzdCBpbmZyYXN0cnVjdHVyZSBmb3IgSW5k
ZXhlZERCLiAKKyAgICBpbnRlcmZhY2UgWworICAgICAgICBDb25kaXRpb25hbD1JTkRFWEVEX0RB
VEFCQVNFCisgICAgXSBJREJLZXlQYXRoIHsKKyAgICAgICAgYm9vbGVhbiBoYXNOZXh0KCk7Cisg
ICAgICAgIHZvaWQgbmV4dCgpOworICAgICAgICByZWFkb25seSBhdHRyaWJ1dGUgRE9NU3RyaW5n
IGlkZW50aWZpZXI7CisgICAgICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBib29sZWFuIGhhc0luZGV4
OworICAgICAgICByZWFkb25seSBhdHRyaWJ1dGUgaW50IGluZGV4VmFsdWU7CisgICAgICAgIHJl
YWRvbmx5IGF0dHJpYnV0ZSBpbnQgcGFyc2VyRXJyb3I7CisgICAgfTsKKworfQpkaWZmIC0tZ2l0
IGEvV2ViQ29yZS9zdG9yYWdlL0luZGV4ZWREYXRhYmFzZVJlcXVlc3QuY3BwIGIvV2ViQ29yZS9z
dG9yYWdlL0luZGV4ZWREYXRhYmFzZVJlcXVlc3QuY3BwCmluZGV4IDdmM2FiNWE3NWUxNGMzOTIz
NmMxNDNlOGFjZmZhNjM5NTMwZTM2NTMuLjUyZTY5OTIzODNmZDBmYmEwNmYyZmNmMGM0YmMxMDdk
NDUzM2I1ZTYgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvc3RvcmFnZS9JbmRleGVkRGF0YWJhc2VSZXF1
ZXN0LmNwcAorKysgYi9XZWJDb3JlL3N0b3JhZ2UvSW5kZXhlZERhdGFiYXNlUmVxdWVzdC5jcHAK
QEAgLTMzLDYgKzMzLDcgQEAKICNpbmNsdWRlICJFeGNlcHRpb25Db2RlLmgiCiAjaW5jbHVkZSAi
RnJhbWUuaCIKICNpbmNsdWRlICJJREJEYXRhYmFzZS5oIgorI2luY2x1ZGUgIklEQktleVBhdGgu
aCIKICNpbmNsdWRlICJJREJLZXlSYW5nZS5oIgogI2luY2x1ZGUgIklEQlJlcXVlc3QuaCIKICNp
bmNsdWRlICJJbmRleGVkRGF0YWJhc2UuaCIKQEAgLTkxLDYgKzkyLDExIEBAIFBhc3NSZWZQdHI8
SURCS2V5UmFuZ2U+IEluZGV4ZWREYXRhYmFzZVJlcXVlc3Q6Om1ha2VCb3VuZEtleVJhbmdlKFBh
c3NSZWZQdHI8SURCCiAgICAgcmV0dXJuIElEQktleVJhbmdlOjpjcmVhdGUobGVmdCwgcmlnaHQs
IGZsYWdzKTsKIH0KIAorUGFzc1JlZlB0cjxJREJLZXlQYXRoPiBJbmRleGVkRGF0YWJhc2VSZXF1
ZXN0OjptYWtlS2V5UGF0aChjb25zdCBTdHJpbmcmIGtleVBhdGgpCit7CisgICAgcmV0dXJuIElE
QktleVBhdGg6OmNyZWF0ZShrZXlQYXRoKTsKK30KKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQog
CiAjZW5kaWYgLy8gRU5BQkxFKElOREVYRURfREFUQUJBU0UpCmRpZmYgLS1naXQgYS9XZWJDb3Jl
L3N0b3JhZ2UvSW5kZXhlZERhdGFiYXNlUmVxdWVzdC5oIGIvV2ViQ29yZS9zdG9yYWdlL0luZGV4
ZWREYXRhYmFzZVJlcXVlc3QuaAppbmRleCBkZTAxYjM1ZjY4YjQwNDA0ZDA0ZGVkMWFkNjJjMGU4
ODgxMTE1OWNkLi4yZjBmOWYxMWNlZGFmY2M4N2ZlMWMyYzI4ZmM5OWM2ZTYxYjVmMjk5IDEwMDY0
NAotLS0gYS9XZWJDb3JlL3N0b3JhZ2UvSW5kZXhlZERhdGFiYXNlUmVxdWVzdC5oCisrKyBiL1dl
YkNvcmUvc3RvcmFnZS9JbmRleGVkRGF0YWJhc2VSZXF1ZXN0LmgKQEAgLTQwLDYgKzQwLDcgQEAK
IG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgSURCS2V5OworY2xhc3MgSURCS2V5UGF0aDsK
IGNsYXNzIElEQktleVJhbmdlOwogY2xhc3MgSURCUmVxdWVzdDsKIGNsYXNzIEluZGV4ZWREYXRh
YmFzZTsKQEAgLTU5LDYgKzYwLDkgQEAgcHVibGljOgogICAgIFBhc3NSZWZQdHI8SURCS2V5UmFu
Z2U+IG1ha2VSaWdodEJvdW5kS2V5UmFuZ2UoUGFzc1JlZlB0cjxJREJLZXk+IGJvdW5kLCBib29s
IG9wZW4gPSBmYWxzZSk7CiAgICAgUGFzc1JlZlB0cjxJREJLZXlSYW5nZT4gbWFrZUJvdW5kS2V5
UmFuZ2UoUGFzc1JlZlB0cjxJREJLZXk+IGxlZnQsIFBhc3NSZWZQdHI8SURCS2V5PiByaWdodCwg
Ym9vbCBvcGVuTGVmdCA9IGZhbHNlLCBib29sIG9wZW5SaWdodCA9IGZhbHNlKTsKIAorICAgIC8v
IEZJWE1FOiBJREJLZXlQYXRoIGlzIHB1YmxpYyBvbmx5IHRvIGFsbG93IHRlc3RpbmcsIHJlbW92
ZSBhcyBzb29uIGFzIHdlIGhhdmUgbW9yZSBjb21wcmVoZW5zaXZlIHRlc3QgaW5mcmFzdHJ1Y3R1
cmUgZm9yIEluZGV4ZWREQi4KKyAgICBQYXNzUmVmUHRyPElEQktleVBhdGg+IG1ha2VLZXlQYXRo
KGNvbnN0IFN0cmluZyYpOworCiBwcml2YXRlOgogICAgIEluZGV4ZWREYXRhYmFzZVJlcXVlc3Qo
SW5kZXhlZERhdGFiYXNlKik7CiAKZGlmZiAtLWdpdCBhL1dlYkNvcmUvc3RvcmFnZS9JbmRleGVk
RGF0YWJhc2VSZXF1ZXN0LmlkbCBiL1dlYkNvcmUvc3RvcmFnZS9JbmRleGVkRGF0YWJhc2VSZXF1
ZXN0LmlkbAppbmRleCBhMzI0OWMwNjcyNTJmYTIzOWZmYmU2M2JkM2UzOGMzNWJmOTE3NDJhLi42
MTA2MjAyZjVlZTQ4OTc5NDRiNDMyMzE3MTVjN2M0NzA1MDczZTEzIDEwMDY0NAotLS0gYS9XZWJD
b3JlL3N0b3JhZ2UvSW5kZXhlZERhdGFiYXNlUmVxdWVzdC5pZGwKKysrIGIvV2ViQ29yZS9zdG9y
YWdlL0luZGV4ZWREYXRhYmFzZVJlcXVlc3QuaWRsCkBAIC0zMyw2ICszMyw4IEBAIG1vZHVsZSBz
dG9yYWdlIHsKICAgICAgICAgSURCS2V5UmFuZ2UgbWFrZUxlZnRCb3VuZEtleVJhbmdlKGluIElE
QktleSBib3VuZCwgaW4gW09wdGlvbmFsXSBib29sZWFuIG9wZW4pOwogICAgICAgICBJREJLZXlS
YW5nZSBtYWtlUmlnaHRCb3VuZEtleVJhbmdlKGluIElEQktleSBib3VuZCwgaW4gW09wdGlvbmFs
XSBib29sZWFuIG9wZW4pOwogICAgICAgICBJREJLZXlSYW5nZSBtYWtlQm91bmRLZXlSYW5nZShp
biBJREJLZXkgbGVmdCwgaW4gSURCS2V5IHJpZ2h0LCBpbiBbT3B0aW9uYWxdIGJvb2xlYW4gb3Bl
bkxlZnQsIGluIFtPcHRpb25hbF0gYm9vbGVhbiBvcGVuUmlnaHQpOworICAgICAgICAvLyBGSVhN
RTogSURCS2V5UGF0aCBpcyBwdWJsaWMgb25seSB0byBhbGxvdyB0ZXN0aW5nLCByZW1vdmUgYXMg
c29vbiBhcyB3ZSBoYXZlIG1vcmUgY29tcHJlaGVuc2l2ZSB0ZXN0IGluZnJhc3RydWN0dXJlIGZv
ciBJbmRleGVkREIuIAorICAgICAgICBJREJLZXlQYXRoIG1ha2VLZXlQYXRoKGluIERPTVN0cmlu
ZyBrZXlQYXRoKTsKICAgICB9OwogCiB9Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>62830</attachid>
            <date>2010-07-28 08:32:24 -0700</date>
            <delta_ts>2010-08-02 03:58:25 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-42976-20100728163221.patch</filename>
            <type>text/plain</type>
            <size>22238</size>
            <attacher name="Marcus Bulach">bulach</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
MjgyYjcxM2E0MzNlMDNkMWRmYzJiNzM5NWI1OWVkZTUwMzcxZWYxNy4uMGE3NDVmZTBkOGViODYx
NWFkMDI2ODM1OWNjMzRmNDBjZWUyNDMxNCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cK
KysrIGIvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwzOCBAQAorMjAxMC0wNy0yOCAgTWFy
Y3VzIEJ1bGFjaCAgPGJ1bGFjaEBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
Tk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgSW1wbGVtZW50IElEQktleVBhdGggcGFyc2VyLgor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDI5NzYKKwor
ICAgICAgICBJREJLZXlQYXRoIGlzIGFuIGludGVybmFsIGNsYXNzLCBleHBvc2VkIG9ubHkgZm9y
IHVuaXQgdGVzdHMgZm9yIG5vdy4KKyAgICAgICAgSXQnbGwgYWxsb3cgaW5kZXhlZCBkYXRhYmFz
ZSBpbXBsZW1lbnRhdGlvbiB0byB0cmF2ZXJzZSBhIGdpdmVuIGtleSBwYXRoIGFuZCBvYnRhaW4g
dGhlIGNvcnJlc3BvbmRpbmcgcHJvcGVydGllcworICAgICAgICBmcm9tIGEgU2VyaWFsaXplZFNj
cmlwdFZhbHVlLgorCisgICAgICAgICogV2ViQ29yZS5neXBpOgorICAgICAgICAqIHN0b3JhZ2Uv
SURCS2V5UGF0aC5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6SURCS2V5UGF0aDo6Y3Jl
YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OklEQktleVBhdGg6OklEQktleVBhdGgpOgorICAgICAg
ICAoV2ViQ29yZTo6SURCS2V5UGF0aDo6fklEQktleVBhdGgpOgorICAgICAgICAoV2ViQ29yZTo6
SURCS2V5UGF0aDo6aGFzTmV4dCk6CisgICAgICAgIChXZWJDb3JlOjpJREJLZXlQYXRoOjpuZXh0
KToKKyAgICAgICAgKFdlYkNvcmU6OklEQktleVBhdGg6OmlkZW50aWZpZXIpOgorICAgICAgICAo
V2ViQ29yZTo6SURCS2V5UGF0aDo6aGFzSW5kZXgpOgorICAgICAgICAoV2ViQ29yZTo6SURCS2V5
UGF0aDo6aW5kZXhWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpJREJLZXlQYXRoOjpwYXJzZXJF
cnJvcik6CisgICAgICAgIChXZWJDb3JlOjpJREJLZXlQYXRoOjpwYXJzZSk6CisgICAgICAgIChX
ZWJDb3JlOjpJREJLZXlQYXRoOjpMZXhlcjo6bGV4KToKKyAgICAgICAgKFdlYkNvcmU6OmlzU2Fm
ZUlkZW50aWZpZXJTdGFydENoYXJhY3Rlcik6CisgICAgICAgIChXZWJDb3JlOjppc1NhZmVJZGVu
dGlmaWVyQ2hhcmFjdGVyKToKKyAgICAgICAgKFdlYkNvcmU6OklEQktleVBhdGg6OkxleGVyOjps
ZXhJZGVudGlmaWVyKToKKyAgICAgICAgKFdlYkNvcmU6OklEQktleVBhdGg6OkxleGVyOjpsZXhO
dW1iZXIpOgorICAgICAgICAqIHN0b3JhZ2UvSURCS2V5UGF0aC5oOiBBZGRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OklEQktleVBhdGg6OlRva2VuOjpUb2tlbik6CisgICAgICAgIChXZWJDb3JlOjpJ
REJLZXlQYXRoOjopOgorICAgICAgICAoV2ViQ29yZTo6SURCS2V5UGF0aDo6TGV4ZXI6OkxleGVy
KToKKyAgICAgICAgKFdlYkNvcmU6OklEQktleVBhdGg6OkxleGVyOjpuZXh0KToKKyAgICAgICAg
KFdlYkNvcmU6OklEQktleVBhdGg6OkxleGVyOjpjdXJyZW50VG9rZW4pOgorCiAyMDEwLTA3LTI4
ICBOaWtvbGFzIFppbW1lcm1hbm4gIDxuemltbWVybWFubkByaW0uY29tPgogCiAgICAgICAgIFJl
dmlld2VkIGJ5IERpcmsgU2NodWx6ZS4KZGlmZiAtLWdpdCBhL1dlYkNvcmUvV2ViQ29yZS5neXBp
IGIvV2ViQ29yZS9XZWJDb3JlLmd5cGkKaW5kZXggNjk4ZTMwMjU2YmI3ZmJkZTczMjY2MGIxYWFl
MDZhOGEzMjY0YThmMi4uYjhiMDNjZDZkMzA2NjVmYTYzZWE3MDhkYzM0ZjMzYzgxZGI5OGJiNyAx
MDA2NDQKLS0tIGEvV2ViQ29yZS9XZWJDb3JlLmd5cGkKKysrIGIvV2ViQ29yZS9XZWJDb3JlLmd5
cGkKQEAgLTM0ODksNiArMzQ4OSw4IEBACiAgICAgICAgICAgICAnc3RvcmFnZS9JREJJbmRleFJl
cXVlc3QuaCcsCiAgICAgICAgICAgICAnc3RvcmFnZS9JREJLZXkuY3BwJywKICAgICAgICAgICAg
ICdzdG9yYWdlL0lEQktleS5oJywKKyAgICAgICAgICAgICdzdG9yYWdlL0lEQktleVBhdGguY3Bw
JywKKyAgICAgICAgICAgICdzdG9yYWdlL0lEQktleVBhdGguaCcsCiAgICAgICAgICAgICAnc3Rv
cmFnZS9JREJLZXlSYW5nZS5jcHAnLAogICAgICAgICAgICAgJ3N0b3JhZ2UvSURCS2V5UmFuZ2Uu
aCcsCiAgICAgICAgICAgICAnc3RvcmFnZS9JREJLZXlUcmVlLmgnLApkaWZmIC0tZ2l0IGEvV2Vi
Q29yZS9zdG9yYWdlL0lEQktleVBhdGguY3BwIGIvV2ViQ29yZS9zdG9yYWdlL0lEQktleVBhdGgu
Y3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAuLjU2YjAxNWE0Mjg2NmU5MDgwMDQ2Yzc0ZGQ0MDdhNTVhNmQ3NDA1YTMK
LS0tIC9kZXYvbnVsbAorKysgYi9XZWJDb3JlL3N0b3JhZ2UvSURCS2V5UGF0aC5jcHAKQEAgLTAs
MCArMSwyOTggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQor
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgor
ICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiSURCS2V5
UGF0aC5oIgorCisjaW5jbHVkZSAiU3RyaW5nQnVpbGRlci5oIgorI2luY2x1ZGUgPHd0Zi9BU0NJ
SUNUeXBlLmg+CisjaW5jbHVkZSA8d3RmL2R0b2EuaD4KKworI2lmIEVOQUJMRShJTkRFWEVEX0RB
VEFCQVNFKQorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK1Bhc3NSZWZQdHI8SURCS2V5UGF0aD4g
SURCS2V5UGF0aDo6Y3JlYXRlKGNvbnN0IFN0cmluZyYga2V5UGF0aCkKK3sKKyAgICBSZWZQdHI8
SURCS2V5UGF0aD4gaWRiS2V5UGF0aCA9IGFkb3B0UmVmKG5ldyBJREJLZXlQYXRoKGtleVBhdGgp
KTsKKyAgICBpZGJLZXlQYXRoLT5wYXJzZSgpOworICAgIHJldHVybiBpZGJLZXlQYXRoLnJlbGVh
c2UoKTsKK30KKworSURCS2V5UGF0aDo6SURCS2V5UGF0aChjb25zdCBTdHJpbmcmIGtleVBhdGgp
CisgICAgOiBtX2tleVBhdGgoa2V5UGF0aCkKKyAgICAsIG1fY3VycmVudFRva2VuKDApCisgICAg
LCBtX2xleGVyKGtleVBhdGgpCit7CisgICAgbV9sZXhlci5uZXh0KCk7Cit9CisKK0lEQktleVBh
dGg6On5JREJLZXlQYXRoKCkKK3sKK30KKworYm9vbCBJREJLZXlQYXRoOjpoYXNOZXh0KCkKK3sK
KyAgICByZXR1cm4gbV9jdXJyZW50VG9rZW4gPCBtX3Rva2Vucy5zaXplKCk7Cit9CisKK3ZvaWQg
SURCS2V5UGF0aDo6bmV4dCgpCit7CisgICAgaWYgKG1fY3VycmVudFRva2VuIDwgbV90b2tlbnMu
c2l6ZSgpKQorICAgICAgICArK21fY3VycmVudFRva2VuOworfQorCitTdHJpbmcgSURCS2V5UGF0
aDo6aWRlbnRpZmllcigpCit7CisgICAgaWYgKG1fY3VycmVudFRva2VuID49IG1fdG9rZW5zLnNp
emUoKSkKKyAgICAgICAgcmV0dXJuICIiOworICAgIHJldHVybiBtX3Rva2Vuc1ttX2N1cnJlbnRU
b2tlbl0uaWRlbnRpZmllcjsKK30KKworYm9vbCBJREJLZXlQYXRoOjpoYXNJbmRleCgpIGNvbnN0
Cit7CisgICAgaWYgKG1fY3VycmVudFRva2VuID49IG1fdG9rZW5zLnNpemUoKSkKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgIHJldHVybiBtX3Rva2Vuc1ttX2N1cnJlbnRUb2tlbl0uaGFzSW5k
ZXg7Cit9CisKK2ludCBJREJLZXlQYXRoOjppbmRleFZhbHVlKCkgY29uc3QKK3sKKyAgICBpZiAo
bV9jdXJyZW50VG9rZW4gPj0gbV90b2tlbnMuc2l6ZSgpKQorICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgcmV0dXJuIG1fdG9rZW5zW21fY3VycmVudFRva2VuXS5pbmRleFZhbHVlOworfQorCitp
bnQgSURCS2V5UGF0aDo6cGFyc2VyRXJyb3IoKSBjb25zdAoreworICAgIHJldHVybiBtX3BhcnNl
ckVycm9yOworfQorCit2b2lkIElEQktleVBhdGg6OnBhcnNlKCkKK3sKKyAgICBQYXJzZXJTdGF0
ZSBzdGF0ZSA9IFN0YXJ0OworCisgICAgd2hpbGUgKDEpIHsKKyAgICAgICAgc3dpdGNoIChzdGF0
ZSkgeworICAgICAgICBjYXNlIFN0YXJ0IDogeworICAgICAgICAgICAgVG9rZW5UeXBlIHRva2Vu
ID0gbV9sZXhlci5jdXJyZW50VG9rZW4oKS50eXBlOworICAgICAgICAgICAgaWYgKHRva2VuID09
IFRva0lkZW50aWZpZXIpIHsKKyAgICAgICAgICAgICAgICBzdGF0ZSA9IElkZW50aWZpZXI7Cisg
ICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAodG9r
ZW4gPT0gVG9rTEJyYWNrZXQpIHsKKyAgICAgICAgICAgICAgICBzdGF0ZSA9IEFycmF5OworICAg
ICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKHRva2Vu
ID09IFRva0VuZCkgeworICAgICAgICAgICAgICAgIG1fcGFyc2VyRXJyb3IgPSBQYXJzZUVycm9y
Tm9uZTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisgICAgICAgICAg
ICBtX3BhcnNlckVycm9yID0gUGFyc2VFcnJvclN0YXJ0OworICAgICAgICAgICAgcmV0dXJuOwor
ICAgICAgICB9CisgICAgICAgIGNhc2UgSWRlbnRpZmllciA6IHsKKyAgICAgICAgICAgIExleGVy
OjpQYXJzZXJUb2tlbiB0b2tlbiA9IG1fbGV4ZXIuY3VycmVudFRva2VuKCk7CisgICAgICAgICAg
ICBBU1NFUlQodG9rZW4udHlwZSA9PSBUb2tJZGVudGlmaWVyKTsKKyAgICAgICAgICAgIFRva2Vu
IGlkYlRva2VuOworICAgICAgICAgICAgaWRiVG9rZW4uaWRlbnRpZmllciA9IHRva2VuLnN0cmlu
Z1Rva2VuOworICAgICAgICAgICAgbV90b2tlbnMuYXBwZW5kKGlkYlRva2VuKTsKKworICAgICAg
ICAgICAgbV9sZXhlci5uZXh0KCk7CisgICAgICAgICAgICB0b2tlbiA9IG1fbGV4ZXIuY3VycmVu
dFRva2VuKCk7CisgICAgICAgICAgICBpZiAodG9rZW4udHlwZSA9PSBUb2tEb3QpIHsKKyAgICAg
ICAgICAgICAgICBzdGF0ZSA9IERvdDsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIGlmICh0b2tlbi50eXBlID09IFRva0xCcmFja2V0KSB7CisgICAg
ICAgICAgICAgICAgc3RhdGUgPSBBcnJheTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIGlmICh0b2tlbi50eXBlID09IFRva0VuZCkgeworICAgICAg
ICAgICAgICAgIG1fcGFyc2VyRXJyb3IgPSBQYXJzZUVycm9yTm9uZTsKKyAgICAgICAgICAgICAg
ICByZXR1cm47CisgICAgICAgICAgICB9CisgICAgICAgICAgICBtX3BhcnNlckVycm9yID0gUGFy
c2VFcnJvcklkZW50aWZpZXI7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAg
ICAgY2FzZSBBcnJheSA6IHsKKyAgICAgICAgICAgIExleGVyOjpQYXJzZXJUb2tlbiB0b2tlbiA9
IG1fbGV4ZXIuY3VycmVudFRva2VuKCk7CisgICAgICAgICAgICBBU1NFUlQodG9rZW4udHlwZSA9
PSBUb2tMQnJhY2tldCk7CisKKyAgICAgICAgICAgIG1fbGV4ZXIubmV4dCgpOworICAgICAgICAg
ICAgdG9rZW4gPSBtX2xleGVyLmN1cnJlbnRUb2tlbigpOworICAgICAgICAgICAgaWYgKHRva2Vu
LnR5cGUgIT0gVG9rTnVtYmVyKSB7CisgICAgICAgICAgICAgICAgbV9wYXJzZXJFcnJvciA9IFBh
cnNlRXJyb3JBcnJheUluZGV4OworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAg
IH0KKworICAgICAgICAgICAgQVNTRVJUKHRva2VuLnR5cGUgPT0gVG9rTnVtYmVyKTsKKyAgICAg
ICAgICAgIFRva2VuIGlkYlRva2VuOworICAgICAgICAgICAgaWRiVG9rZW4uaGFzSW5kZXggPSB0
cnVlOworICAgICAgICAgICAgaWRiVG9rZW4uaW5kZXhWYWx1ZSA9IHRva2VuLm51bWJlclRva2Vu
OworICAgICAgICAgICAgbV90b2tlbnMuYXBwZW5kKGlkYlRva2VuKTsKKworICAgICAgICAgICAg
bV9sZXhlci5uZXh0KCk7CisgICAgICAgICAgICB0b2tlbiA9IG1fbGV4ZXIuY3VycmVudFRva2Vu
KCk7CisgICAgICAgICAgICBpZiAodG9rZW4udHlwZSAhPSBUb2tSQnJhY2tldCkgeworICAgICAg
ICAgICAgICAgIG1fcGFyc2VyRXJyb3IgPSBQYXJzZUVycm9yQXJyYXlJbmRleDsKKyAgICAgICAg
ICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIG1fbGV4ZXIubmV4
dCgpOworICAgICAgICAgICAgdG9rZW4gPSBtX2xleGVyLmN1cnJlbnRUb2tlbigpOworICAgICAg
ICAgICAgaWYgKHRva2VuLnR5cGUgPT0gVG9rRG90KQorICAgICAgICAgICAgICAgIHN0YXRlID0g
RG90OworICAgICAgICAgICAgZWxzZSBpZiAodG9rZW4udHlwZSA9PSBUb2tMQnJhY2tldCkKKyAg
ICAgICAgICAgICAgICBzdGF0ZSA9IEFycmF5OworICAgICAgICAgICAgZWxzZSB7CisgICAgICAg
ICAgICAgICAgbV9wYXJzZXJFcnJvciA9IFBhcnNlckVycm9yQWZ0ZXJBcnJheTsKKyAgICAgICAg
ICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICB9CisKKyAgICAgICAgY2FzZSBEb3Q6IHsKKyAgICAgICAgICAgIExleGVyOjpQYXJzZXJU
b2tlbiB0b2tlbiA9IG1fbGV4ZXIuY3VycmVudFRva2VuKCk7CisgICAgICAgICAgICBBU1NFUlQo
dG9rZW4udHlwZSA9PSBUb2tEb3QpOworCisgICAgICAgICAgICBtX2xleGVyLm5leHQoKTsKKyAg
ICAgICAgICAgIHRva2VuID0gbV9sZXhlci5jdXJyZW50VG9rZW4oKTsKKyAgICAgICAgICAgIGlm
ICh0b2tlbi50eXBlICE9IFRva0lkZW50aWZpZXIpIHsKKyAgICAgICAgICAgICAgICBtX3BhcnNl
ckVycm9yID0gUGFyc2VFcnJvckRvdDsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAg
ICAgICB9CisKKyAgICAgICAgICAgIHN0YXRlID0gSWRlbnRpZmllcjsKKyAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICB9CisgICAgICAgIH0KKyAgICB9Cit9CisKK0lEQktleVBhdGg6OlRva2Vu
VHlwZSBJREJLZXlQYXRoOjpMZXhlcjo6bGV4KFBhcnNlclRva2VuJiB0b2tlbikKK3sKKyAgICB3
aGlsZSAobV9wdHIgPCBtX2VuZCAmJiBpc0FTQ0lJU3BhY2UoKm1fcHRyKSkKKyAgICAgICAgKytt
X3B0cjsKKworICAgIGlmIChtX3B0ciA+PSBtX2VuZCkgeworICAgICAgICB0b2tlbi50eXBlID0g
VG9rRW5kOworICAgICAgICB0b2tlbi5zdGFydCA9IG1fcHRyOworICAgICAgICB0b2tlbi5lbmQg
PSBtX3B0cjsKKyAgICAgICAgcmV0dXJuIFRva0VuZDsKKyAgICB9CisgICAgQVNTRVJUKG1fcHRy
IDwgbV9lbmQpOworICAgIHRva2VuLnR5cGUgPSBUb2tFcnJvcjsKKyAgICB0b2tlbi5zdGFydCA9
IG1fcHRyOworICAgIHN3aXRjaCAoKm1fcHRyKSB7CisgICAgY2FzZSAnWyc6CisgICAgICAgIHRv
a2VuLnR5cGUgPSBUb2tMQnJhY2tldDsKKyAgICAgICAgdG9rZW4uZW5kID0gKyttX3B0cjsKKyAg
ICAgICAgcmV0dXJuIFRva0xCcmFja2V0OworICAgIGNhc2UgJ10nOgorICAgICAgICB0b2tlbi50
eXBlID0gVG9rUkJyYWNrZXQ7CisgICAgICAgIHRva2VuLmVuZCA9ICsrbV9wdHI7CisgICAgICAg
IHJldHVybiBUb2tSQnJhY2tldDsKKyAgICBjYXNlICcuJzoKKyAgICAgICAgdG9rZW4udHlwZSA9
IFRva0RvdDsKKyAgICAgICAgdG9rZW4uZW5kID0gKyttX3B0cjsKKyAgICAgICAgcmV0dXJuIFRv
a0RvdDsKKyAgICBjYXNlICcwJzoKKyAgICBjYXNlICcxJzoKKyAgICBjYXNlICcyJzoKKyAgICBj
YXNlICczJzoKKyAgICBjYXNlICc0JzoKKyAgICBjYXNlICc1JzoKKyAgICBjYXNlICc2JzoKKyAg
ICBjYXNlICc3JzoKKyAgICBjYXNlICc4JzoKKyAgICBjYXNlICc5JzoKKyAgICAgICAgcmV0dXJu
IGxleE51bWJlcih0b2tlbik7CisgICAgZGVmYXVsdDoKKyAgICAgICAgcmV0dXJuIGxleElkZW50
aWZpZXIodG9rZW4pOworICAgIH0KKyAgICByZXR1cm4gVG9rRXJyb3I7Cit9CisKK3N0YXRpYyBp
bmxpbmUgYm9vbCBpc1NhZmVJZGVudGlmaWVyU3RhcnRDaGFyYWN0ZXIoVUNoYXIgYykKK3sKKyAg
ICByZXR1cm4gaXNBU0NJSUFscGhhKGMpIHx8IChjID09ICdfJykgfHwgKGMgPT0gJyQnKTsKK30K
Kworc3RhdGljIGlubGluZSBib29sIGlzU2FmZUlkZW50aWZpZXJDaGFyYWN0ZXIoVUNoYXIgYykK
K3sKKyAgICByZXR1cm4gaXNBU0NJSUFscGhhbnVtZXJpYyhjKSB8fCAoYyA9PSAnXycpIHx8IChj
ID09ICckJyk7Cit9CisKK0lEQktleVBhdGg6OlRva2VuVHlwZSBJREJLZXlQYXRoOjpMZXhlcjo6
bGV4SWRlbnRpZmllcihQYXJzZXJUb2tlbiYgdG9rZW4pCit7CisgICAgY29uc3QgVUNoYXIqIHN0
YXJ0ID0gbV9wdHI7CisgICAgaWYgKG1fcHRyIDwgbV9lbmQgJiYgaXNTYWZlSWRlbnRpZmllclN0
YXJ0Q2hhcmFjdGVyKCptX3B0cikpCisgICAgICAgICsrbV9wdHI7CisgICAgZWxzZQorICAgICAg
ICByZXR1cm4gVG9rRXJyb3I7CisKKyAgICB3aGlsZSAobV9wdHIgPCBtX2VuZCAmJiBpc1NhZmVJ
ZGVudGlmaWVyQ2hhcmFjdGVyKCptX3B0cikpCisgICAgICAgICsrbV9wdHI7CisKKyAgICBTdHJp
bmcgaWRlbnRpZmllcjsKKyAgICBpZiAoc3RhcnQgPCBtX3B0cikKKyAgICAgICAgaWRlbnRpZmll
ciA9IFN0cmluZyhzdGFydCwgbV9wdHIgLSBzdGFydCk7CisKKyAgICB0b2tlbi5zdHJpbmdUb2tl
biA9IGlkZW50aWZpZXI7CisgICAgdG9rZW4udHlwZSA9IFRva0lkZW50aWZpZXI7CisgICAgdG9r
ZW4uZW5kID0gbV9wdHI7CisgICAgcmV0dXJuIFRva0lkZW50aWZpZXI7Cit9CisKK0lEQktleVBh
dGg6OlRva2VuVHlwZSBJREJLZXlQYXRoOjpMZXhlcjo6bGV4TnVtYmVyKFBhcnNlclRva2VuJiB0
b2tlbikKK3sKKyAgICBjb25zdCBVQ2hhciogc3RhcnQgPSBtX3B0cjsKKyAgICBpZiAobV9wdHIg
PCBtX2VuZCkgeworICAgICAgICAvLyBbMC05XSoKKyAgICAgICAgd2hpbGUgKG1fcHRyIDwgbV9l
bmQgJiYgaXNBU0NJSURpZ2l0KCptX3B0cikpCisgICAgICAgICAgICArK21fcHRyOworICAgIH0g
ZWxzZQorICAgICAgICByZXR1cm4gVG9rRXJyb3I7CisKKyAgICBTdHJpbmcgbnVtYmVyQXNTdHJp
bmc7CisgICAgaWYgKHN0YXJ0IDwgbV9wdHIpIHsKKyAgICAgICAgbnVtYmVyQXNTdHJpbmcgPSBT
dHJpbmcoc3RhcnQsIG1fcHRyIC0gc3RhcnQpOworICAgICAgICBib29sIG9rID0gZmFsc2U7Cisg
ICAgICAgIGludCBudW1iZXIgPSBudW1iZXJBc1N0cmluZy50b0ludFN0cmljdCgmb2spOworICAg
ICAgICBpZiAoIW9rKQorICAgICAgICAgICAgcmV0dXJuIFRva0Vycm9yOworICAgICAgICB0b2tl
bi50eXBlID0gVG9rTnVtYmVyOworICAgICAgICB0b2tlbi5udW1iZXJUb2tlbiA9IG51bWJlcjsK
KyAgICAgICAgdG9rZW4uZW5kID0gbV9wdHI7CisgICAgICAgIHJldHVybiBUb2tOdW1iZXI7Cisg
ICAgfQorICAgIHJldHVybiBUb2tFcnJvcjsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQor
CisjZW5kaWYgLy8gRU5BQkxFKElOREVYRURfREFUQUJBU0UpCmRpZmYgLS1naXQgYS9XZWJDb3Jl
L3N0b3JhZ2UvSURCS2V5UGF0aC5oIGIvV2ViQ29yZS9zdG9yYWdlL0lEQktleVBhdGguaApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwLi43MzdhY2M5ZThhMjIwNjA0MTliMDkyYjcyMTZmNWU0YWM4ZDQ3MDhkCi0tLSAvZGV2
L251bGwKKysrIGIvV2ViQ29yZS9zdG9yYWdlL0lEQktleVBhdGguaApAQCAtMCwwICsxLDEyNyBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAq
IDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorICovCisKKyNpZm5kZWYgSURCS2V5UGF0aF9oCisjZGVmaW5lIElEQktleVBhdGhfaAorCisj
aWYgRU5BQkxFKElOREVYRURfREFUQUJBU0UpCisKKyNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5o
PgorI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgor
I2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisK
K2NsYXNzIElEQktleVBhdGggOiBwdWJsaWMgUmVmQ291bnRlZDxJREJLZXlQYXRoPiB7CitwdWJs
aWM6CisgICAgc3RhdGljIFBhc3NSZWZQdHI8SURCS2V5UGF0aD4gY3JlYXRlKGNvbnN0IFN0cmlu
ZyYpOworICAgIH5JREJLZXlQYXRoKCk7CisKKyAgICBib29sIGhhc05leHQoKTsKKyAgICB2b2lk
IG5leHQoKTsKKyAgICBTdHJpbmcgaWRlbnRpZmllcigpOworICAgIGJvb2wgaGFzSW5kZXgoKSBj
b25zdDsKKyAgICBpbnQgaW5kZXhWYWx1ZSgpIGNvbnN0OworCisgICAgaW50IHBhcnNlckVycm9y
KCkgY29uc3Q7CisKK3ByaXZhdGU6CisgICAgc3RydWN0IFRva2VuIHsKKyAgICAgICAgU3RyaW5n
IGlkZW50aWZpZXI7CisgICAgICAgIGJvb2wgaGFzSW5kZXg7CisgICAgICAgIGludCBpbmRleFZh
bHVlOworICAgICAgICBUb2tlbigpIDogaGFzSW5kZXgoZmFsc2UpLCBpbmRleFZhbHVlKDApIHt9
CisgICAgfTsKKyAgICBleHBsaWNpdCBJREJLZXlQYXRoKGNvbnN0IFN0cmluZyYpOworCisgICAg
U3RyaW5nIG1fa2V5UGF0aDsKKyAgICBWZWN0b3I8VG9rZW4+IG1fdG9rZW5zOworICAgIGludCBt
X2N1cnJlbnRUb2tlbjsKKyAgICBpbnQgbV9wYXJzZXJFcnJvcjsKKworICAgIC8vIFRoaXMgaXMg
YSBzaW1wbGlmaWVkIHBhcnNlciBsb29zZWx5IGJhc2VkIG9uIExpdGVyYWxQYXJzZXIuCisgICAg
Ly8gQW4gSURCS2V5UGF0aCBpcyBkZWZpbmVkIGFzIGEgc2VxdWVuY2Ugb2Y6CisgICAgLy8gaWRl
bnRpZmllckF7LmlkZW50aWZpZXJCe1tudW1lcmljX3ZhbHVlXX0KKyAgICAvLyB3aGVyZSAie30i
IHJlcHJlc2VudHMgYW4gb3B0aW9uYWwgcGFydAorICAgIC8vIFRoZSBiYXNpYyBzdGF0ZSBtYWNo
aW5lIGlzOgorICAgIC8vIFN0YXJ0ID0+IHtJZGVudGlmaWVyLCBBcnJheX0KKyAgICAvLyBJZGVu
dGlmaWVyID0+IHtEb3QsIEFycmF5fQorICAgIC8vIEFycmF5ID0+IHtTdGFydCwgRG90fQorICAg
IC8vIERvdCA9PiB7SWRlbnRpZmllcn0KKyAgICAvLyBJdCBiYWlscyBvdXQgYXMgc29vbiBhcyBp
dCBmaW5kcyBhbiBlcnJvciwgYnV0IGRvZXNuJ3QgZGlzY2FyZCB0aGUgYml0cyBpdCBtYW5hZ2Vk
IHRvIHBhcnNlLgorICAgIGVudW0gUGFyc2VyU3RhdGUgeyAgU3RhcnQsIElkZW50aWZpZXIsIEFy
cmF5LCBEb3QgfTsKKyAgICBlbnVtIFRva2VuVHlwZSB7IFRva0xCcmFja2V0LCBUb2tSQnJhY2tl
dCwKKyAgICAgICAgICAgICAgICAgICAgIFRva0lkZW50aWZpZXIsIFRva051bWJlciwKKyAgICAg
ICAgICAgICAgICAgICAgIFRva0RvdCwgVG9rRW5kLCBUb2tFcnJvciB9OworICAgIGVudW0gUGFy
c2VFcnJvciB7IFBhcnNlRXJyb3JOb25lLCBQYXJzZUVycm9yU3RhcnQsIFBhcnNlRXJyb3JJZGVu
dGlmaWVyLAorICAgICAgICAgICAgICAgICAgICAgIFBhcnNlRXJyb3JBcnJheUluZGV4LCBQYXJz
ZXJFcnJvckFmdGVyQXJyYXksIFBhcnNlRXJyb3JEb3R9OworCisgICAgdm9pZCBwYXJzZSgpOwor
CisgICAgY2xhc3MgTGV4ZXIgeworICAgIHB1YmxpYzoKKyAgICAgICAgc3RydWN0IFBhcnNlclRv
a2VuIHsKKyAgICAgICAgICAgIFRva2VuVHlwZSB0eXBlOworICAgICAgICAgICAgY29uc3QgVUNo
YXIqIHN0YXJ0OworICAgICAgICAgICAgY29uc3QgVUNoYXIqIGVuZDsKKyAgICAgICAgICAgIFN0
cmluZyBzdHJpbmdUb2tlbjsKKyAgICAgICAgICAgIGRvdWJsZSBudW1iZXJUb2tlbjsKKyAgICAg
ICAgfTsKKyAgICAgICAgZXhwbGljaXQgTGV4ZXIoY29uc3QgU3RyaW5nJiBzKQorICAgICAgICAg
ICAgOiBtX3N0cmluZyhzKQorICAgICAgICAgICAgLCBtX3B0cihzLmNoYXJhY3RlcnMoKSkKKyAg
ICAgICAgICAgICwgbV9lbmQocy5jaGFyYWN0ZXJzKCkgKyBzLmxlbmd0aCgpKQorICAgICAgICB7
CisgICAgICAgIH0KKworICAgICAgICBUb2tlblR5cGUgbmV4dCgpCisgICAgICAgIHsKKyAgICAg
ICAgICAgIHJldHVybiBsZXgobV9jdXJyZW50VG9rZW4pOworICAgICAgICB9CisKKyAgICAgICAg
Y29uc3QgUGFyc2VyVG9rZW4mIGN1cnJlbnRUb2tlbigpCisgICAgICAgIHsKKyAgICAgICAgICAg
IHJldHVybiBtX2N1cnJlbnRUb2tlbjsKKyAgICAgICAgfQorCisgICAgcHJpdmF0ZToKKyAgICAg
ICAgVG9rZW5UeXBlIGxleChQYXJzZXJUb2tlbiYpOworICAgICAgICBUb2tlblR5cGUgbGV4SWRl
bnRpZmllcihQYXJzZXJUb2tlbiYpOworICAgICAgICBUb2tlblR5cGUgbGV4TnVtYmVyKFBhcnNl
clRva2VuJik7CisgICAgICAgIFBhcnNlclRva2VuIG1fY3VycmVudFRva2VuOworICAgICAgICBT
dHJpbmcgbV9zdHJpbmc7CisgICAgICAgIGNvbnN0IFVDaGFyKiBtX3B0cjsKKyAgICAgICAgY29u
c3QgVUNoYXIqIG1fZW5kOworICAgICB9OworCisgICAgTGV4ZXIgbV9sZXhlcjsKK307CisKK30g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmCisKKyNlbmRpZiAvLyBJREJLZXlQYXRoX2gK
ZGlmZiAtLWdpdCBhL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cgYi9XZWJLaXQvY2hyb21pdW0v
Q2hhbmdlTG9nCmluZGV4IDc2MjdhODg3NWUzMmQ1NWUxMzQzNThhNzQwNDMzYzAxYzMwMjU1MDIu
LjMyYThjMGExNzBhZmVjYmFlMjljMGQyMTg4ZGU2NTA0Y2IzYTMzNWUgMTAwNjQ0Ci0tLSBhL1dl
YktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKKysrIGIvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwpA
QCAtMSwzICsxLDIwIEBACisyMDEwLTA3LTI4ICBNYXJjdXMgQnVsYWNoICA8YnVsYWNoQGNocm9t
aXVtLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICBJbXBsZW1lbnQgSURCS2V5UGF0aCBwYXJzZXIuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD00Mjk3NgorCisgICAgICAgIElEQktleVBhdGggaXMgYW4g
aW50ZXJuYWwgY2xhc3MsIGV4cG9zZWQgb25seSBmb3IgdW5pdCB0ZXN0cyBmb3Igbm93LgorICAg
ICAgICBJdCdsbCBhbGxvdyBpbmRleGVkIGRhdGFiYXNlIGltcGxlbWVudGF0aW9uIHRvIHRyYXZl
cnNlIGEgZ2l2ZW4ga2V5IHBhdGggYW5kIG9idGFpbiB0aGUgY29ycmVzcG9uZGluZyBwcm9wZXJ0
aWVzCisgICAgICAgIGZyb20gYSBTZXJpYWxpemVkU2NyaXB0VmFsdWUuCisKKyAgICAgICAgKiBX
ZWJLaXQuZ3lwOgorICAgICAgICAqIHRlc3RzL0lEQktleVBhdGhUZXN0LmNwcDogQWRkZWQuCisg
ICAgICAgIChXZWJDb3JlOjpFeHBlY3RlZFRva2VuOjpFeHBlY3RlZFRva2VuKToKKyAgICAgICAg
KFdlYkNvcmU6OmNoZWNrS2V5UGF0aCk6CisgICAgICAgIChXZWJDb3JlOjpURVNUKToKKwogMjAx
MC0wNy0yNyAgS2ludWtvIFlhc3VkYSAgPGtpbnVrb0BjaHJvbWl1bS5vcmc+CiAKICAgICAgICAg
UmV2aWV3ZWQgYnkgT2phbiBWYWZhaS4KZGlmZiAtLWdpdCBhL1dlYktpdC9jaHJvbWl1bS9XZWJL
aXQuZ3lwIGIvV2ViS2l0L2Nocm9taXVtL1dlYktpdC5neXAKaW5kZXggOTdlZmRkY2I1NzEzZDMx
ZGJmYTM2ZGJjYjEyNGYwYzE4MDIwMGZhMy4uMWUzYzkyZDIxMzVmYzZkYTlmYTM0MGRhNDc3YzU4
NGM1ZjU3ODcxYSAxMDA2NDQKLS0tIGEvV2ViS2l0L2Nocm9taXVtL1dlYktpdC5neXAKKysrIGIv
V2ViS2l0L2Nocm9taXVtL1dlYktpdC5neXAKQEAgLTcwMyw2ICs3MDMsNyBAQAogICAgICAgICAg
ICAgICAgICAgICBdLAogICAgICAgICAgICAgICAgICAgICAnc291cmNlcyc6IFsKICAgICAgICAg
ICAgICAgICAgICAgICAgICd0ZXN0cy9EcmFnSW1hZ2VUZXN0LmNwcCcsCisgICAgICAgICAgICAg
ICAgICAgICAgICAndGVzdHMvSURCS2V5UGF0aFRlc3QuY3BwJywKICAgICAgICAgICAgICAgICAg
ICAgICAgICd0ZXN0cy9LZXlib2FyZFRlc3QuY3BwJywKICAgICAgICAgICAgICAgICAgICAgICAg
ICd0ZXN0cy9LVVJMVGVzdC5jcHAnLAogICAgICAgICAgICAgICAgICAgICAgICAgJ3Rlc3RzL1J1
bkFsbFRlc3RzLmNwcCcsCmRpZmYgLS1naXQgYS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvSURCS2V5
UGF0aFRlc3QuY3BwIGIvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0lEQktleVBhdGhUZXN0LmNwcApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwLi40Y2E4ZjNhNmM0ZjM0MWZlMjZlN2UxMTgxNjZkMWM3MWI3OTk2MDIwCi0tLSAv
ZGV2L251bGwKKysrIGIvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0lEQktleVBhdGhUZXN0LmNwcApA
QCAtMCwwICsxLDE2NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQg
QU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICog
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJJ
REJLZXlQYXRoLmgiCisKKyNpbmNsdWRlIDxndGVzdC9ndGVzdC5oPgorI2luY2x1ZGUgPHd0Zi9W
ZWN0b3IuaD4KKworI2lmIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQorCit1c2luZyBuYW1lc3Bh
Y2UgV2ViQ29yZTsKKworbmFtZXNwYWNlIHsKKworc3RydWN0IEV4cGVjdGVkVG9rZW4geworICAg
IFN0cmluZyBpZGVudGlmaWVyOworICAgIGJvb2wgaGFzSW5kZXg7CisgICAgaW50IGluZGV4VmFs
dWU7CisgICAgRXhwZWN0ZWRUb2tlbihjb25zdCBTdHJpbmcmIHBJZGVudGlmaWVyLCBib29sIHBI
YXNJbmRleCwgIGludCBwSW5kZXhWYWx1ZSkKKyAgICB7CisgICAgICAgIGlkZW50aWZpZXIgPSBw
SWRlbnRpZmllcjsKKyAgICAgICAgaGFzSW5kZXggPSBwSGFzSW5kZXg7CisgICAgICAgIGluZGV4
VmFsdWUgPSBwSW5kZXhWYWx1ZTsKKyAgICB9Cit9OworCit2b2lkIGNoZWNrS2V5UGF0aChjb25z
dCBTdHJpbmcmIGtleVBhdGgsIGNvbnN0IFZlY3RvcjxFeHBlY3RlZFRva2VuPiYgZXhwZWN0ZWQs
IGludCBwYXJzZXJFcnJvcikKK3sKKworICAgIFJlZlB0cjxJREJLZXlQYXRoPiBpZGJLZXlQYXRo
ID0gSURCS2V5UGF0aDo6Y3JlYXRlKGtleVBhdGgpOworICAgIGludCBpID0gMDsKKyAgICBmb3Ig
KGkgPSAwOyBpZGJLZXlQYXRoLT5oYXNOZXh0KCk7IGlkYktleVBhdGgtPm5leHQoKSwgKytpKSB7
CisgICAgICAgIEFTU0VSVF9UUlVFKGkgPCBleHBlY3RlZC5zaXplKCkpOworICAgICAgICBFWFBF
Q1RfVFJVRShleHBlY3RlZFtpXS5pZGVudGlmaWVyID09IGlkYktleVBhdGgtPmlkZW50aWZpZXIo
KSkgPDwgaTsKKyAgICAgICAgRVhQRUNUX0VRKGV4cGVjdGVkW2ldLmhhc0luZGV4LCBpZGJLZXlQ
YXRoLT5oYXNJbmRleCgpKSA8PCBpOworICAgICAgICBFWFBFQ1RfRVEoZXhwZWN0ZWRbaV0uaW5k
ZXhWYWx1ZSwgaWRiS2V5UGF0aC0+aW5kZXhWYWx1ZSgpKSA8PCBpOworICAgIH0KKyAgICBFWFBF
Q1RfRVEoaSwgZXhwZWN0ZWQuc2l6ZSgpKTsKKyAgICBFWFBFQ1RfRVEocGFyc2VyRXJyb3IsIGlk
YktleVBhdGgtPnBhcnNlckVycm9yKCkpOworfQorCitURVNUKElEQktleVBhdGhUZXN0LCBWYWxp
ZEtleVBhdGgwKQoreworICAgIFZlY3RvcjxFeHBlY3RlZFRva2VuPiBleHBlY3RlZDsKKyAgICBT
dHJpbmcga2V5UGF0aCgiZm9vLmJhci56b28iKTsKKyAgICBleHBlY3RlZC5hcHBlbmQoRXhwZWN0
ZWRUb2tlbigiZm9vIiwgZmFsc2UsIDApKTsKKyAgICBleHBlY3RlZC5hcHBlbmQoRXhwZWN0ZWRU
b2tlbigiYmFyIiwgZmFsc2UsIDApKTsKKyAgICBleHBlY3RlZC5hcHBlbmQoRXhwZWN0ZWRUb2tl
bigiem9vIiwgZmFsc2UsIDApKTsKKyAgICBjaGVja0tleVBhdGgoa2V5UGF0aCwgZXhwZWN0ZWQs
IDApOworfQorCitURVNUKElEQktleVBhdGhUZXN0LCBWYWxpZEtleVBhdGgxKQoreworICAgIFZl
Y3RvcjxFeHBlY3RlZFRva2VuPiBleHBlY3RlZDsKKyAgICBTdHJpbmcga2V5UGF0aCgiYVszNF1b
MjBdLmZvb1syXS5iYXIiKTsKKyAgICBleHBlY3RlZC5hcHBlbmQoRXhwZWN0ZWRUb2tlbigiYSIs
IGZhbHNlLCAwKSk7CisgICAgZXhwZWN0ZWQuYXBwZW5kKEV4cGVjdGVkVG9rZW4oU3RyaW5nKCks
IHRydWUsIDM0KSk7CisgICAgZXhwZWN0ZWQuYXBwZW5kKEV4cGVjdGVkVG9rZW4oU3RyaW5nKCks
IHRydWUsIDIwKSk7CisgICAgZXhwZWN0ZWQuYXBwZW5kKEV4cGVjdGVkVG9rZW4oImZvbyIsIGZh
bHNlLCAwKSk7CisgICAgZXhwZWN0ZWQuYXBwZW5kKEV4cGVjdGVkVG9rZW4oU3RyaW5nKCksIHRy
dWUsIDIpKTsKKyAgICBleHBlY3RlZC5hcHBlbmQoRXhwZWN0ZWRUb2tlbigiYmFyIiwgZmFsc2Us
IDApKTsKKyAgICBjaGVja0tleVBhdGgoa2V5UGF0aCwgZXhwZWN0ZWQsIDApOworfQorCitURVNU
KElEQktleVBhdGhUZXN0LCBWYWxpZEtleVBhdGgyKQoreworICAgIFZlY3RvcjxFeHBlY3RlZFRv
a2VuPiBleHBlY3RlZDsKKyAgICBTdHJpbmcga2V5UGF0aCgiZm9vWyAzNCBdLlpvb19bMDAwMjNd
XHQuX2MiKTsKKyAgICBleHBlY3RlZC5hcHBlbmQoRXhwZWN0ZWRUb2tlbigiZm9vIiwgZmFsc2Us
IDApKTsKKyAgICBleHBlY3RlZC5hcHBlbmQoRXhwZWN0ZWRUb2tlbihTdHJpbmcoKSwgdHJ1ZSwg
MzQpKTsKKyAgICBleHBlY3RlZC5hcHBlbmQoRXhwZWN0ZWRUb2tlbigiWm9vXyIsIGZhbHNlLCAw
KSk7CisgICAgZXhwZWN0ZWQuYXBwZW5kKEV4cGVjdGVkVG9rZW4oU3RyaW5nKCksIHRydWUsIDIz
KSk7CisgICAgZXhwZWN0ZWQuYXBwZW5kKEV4cGVjdGVkVG9rZW4oIl9jIiwgZmFsc2UsIDApKTsK
KyAgICBjaGVja0tleVBhdGgoa2V5UGF0aCwgZXhwZWN0ZWQsIDApOworfQorCitURVNUKElEQktl
eVBhdGhUZXN0LCBJbnZhbGlkS2V5UGF0aDIpCit7CisgICAgVmVjdG9yPEV4cGVjdGVkVG9rZW4+
IGV4cGVjdGVkOworICAgIFN0cmluZyBrZXlQYXRoKCJhW1szNF1dLmJbMl0uYyIpOworICAgIGV4
cGVjdGVkLmFwcGVuZChFeHBlY3RlZFRva2VuKCJhIiwgZmFsc2UsIDApKTsKKyAgICBjaGVja0tl
eVBhdGgoa2V5UGF0aCwgZXhwZWN0ZWQsIDMpOworfQorCitURVNUKElEQktleVBhdGhUZXN0LCBJ
bnZhbGlkS2V5UGF0aDMpCit7CisgICAgVmVjdG9yPEV4cGVjdGVkVG9rZW4+IGV4cGVjdGVkOwor
ICAgIFN0cmluZyBrZXlQYXRoKCJhW1szNF0uYlsyXS5jIik7CisgICAgZXhwZWN0ZWQuYXBwZW5k
KEV4cGVjdGVkVG9rZW4oImEiLCBmYWxzZSwgMCkpOworICAgIGNoZWNrS2V5UGF0aChrZXlQYXRo
LCBleHBlY3RlZCwgMyk7Cit9CisKK1RFU1QoSURCS2V5UGF0aFRlc3QsIEludmFsaWRLZXlQYXRo
NSkKK3sKKyAgICBWZWN0b3I8RXhwZWN0ZWRUb2tlbj4gZXhwZWN0ZWQ7CisgICAgU3RyaW5nIGtl
eVBhdGgoImFbWzM0LmJbMl0uYyIpOworICAgIGV4cGVjdGVkLmFwcGVuZChFeHBlY3RlZFRva2Vu
KCJhIiwgZmFsc2UsIDApKTsKKyAgICBjaGVja0tleVBhdGgoa2V5UGF0aCwgZXhwZWN0ZWQsIDMp
OworfQorCitURVNUKElEQktleVBhdGhUZXN0LCBJbnZhbGlkS2V5UGF0aDYpCit7CisgICAgVmVj
dG9yPEV4cGVjdGVkVG9rZW4+IGV4cGVjdGVkOworICAgIFN0cmluZyBrZXlQYXRoKCIrYVszNF0u
YlsyXS5jIik7CisgICAgY2hlY2tLZXlQYXRoKGtleVBhdGgsIGV4cGVjdGVkLCAxKTsKK30KKwor
VEVTVChJREJLZXlQYXRoVGVzdCwgSW52YWxpZEtleVBhdGg3KQoreworICAgIFZlY3RvcjxFeHBl
Y3RlZFRva2VuPiBleHBlY3RlZDsKKyAgICBTdHJpbmcga2V5UGF0aCgiJWFbMzRdLmJbMl0uYyIp
OworICAgIGNoZWNrS2V5UGF0aChrZXlQYXRoLCBleHBlY3RlZCwgMSk7Cit9CisKK1RFU1QoSURC
S2V5UGF0aFRlc3QsIEludmFsaWRLZXlQYXRoOCkKK3sKKyAgICBWZWN0b3I8RXhwZWN0ZWRUb2tl
bj4gZXhwZWN0ZWQ7CisgICAgU3RyaW5nIGtleVBhdGgoImF7WzM0XX0uYlsyXS5jIik7CisgICAg
ZXhwZWN0ZWQuYXBwZW5kKEV4cGVjdGVkVG9rZW4oImEiLCBmYWxzZSwgMCkpOworICAgIGNoZWNr
S2V5UGF0aChrZXlQYXRoLCBleHBlY3RlZCwgMik7Cit9CisKK1RFU1QoSURCS2V5UGF0aFRlc3Qs
IEludmFsaWRLZXlQYXRoOSkKK3sKKyAgICBWZWN0b3I8RXhwZWN0ZWRUb2tlbj4gZXhwZWN0ZWQ7
CisgICAgU3RyaW5nIGtleVBhdGgoImEuLmJbMl0uYyIpOworICAgIGV4cGVjdGVkLmFwcGVuZChF
eHBlY3RlZFRva2VuKCJhIiwgZmFsc2UsIDApKTsKKyAgICBjaGVja0tleVBhdGgoa2V5UGF0aCwg
ZXhwZWN0ZWQsIDUpOworfQorCitURVNUKElEQktleVBhdGhUZXN0LCBJbnZhbGlkS2V5UGF0aDEw
KQoreworICAgIFZlY3RvcjxFeHBlY3RlZFRva2VuPiBleHBlY3RlZDsKKyAgICBTdHJpbmcga2V5
UGF0aCgiYVszNF1iLmZvb1syXS5iYXIiKTsKKyAgICBleHBlY3RlZC5hcHBlbmQoRXhwZWN0ZWRU
b2tlbigiYSIsIGZhbHNlLCAwKSk7CisgICAgZXhwZWN0ZWQuYXBwZW5kKEV4cGVjdGVkVG9rZW4o
U3RyaW5nKCksIHRydWUsIDM0KSk7CisgICAgY2hlY2tLZXlQYXRoKGtleVBhdGgsIGV4cGVjdGVk
LCA0KTsKK30KKworfSAvLyBuYW1lc3BhY2UKKworI2VuZGlmIC8vIEVOQUJMRShJTkRFWEVEX0RB
VEFCQVNFKQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>63186</attachid>
            <date>2010-08-02 03:58:30 -0700</date>
            <delta_ts>2010-08-04 13:26:39 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-42976-20100802115828.patch</filename>
            <type>text/plain</type>
            <size>30645</size>
            <attacher name="Marcus Bulach">bulach</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
NTM2YjQyMjdmMjBkMjAwNWVhYWI2Yzg5MWZiNzQ0NWE2ZmE0NmE0ZS4uN2RkNjdhYzA5ZGMwYWMz
NzI2OWE4NTNhYTMwNWQyYjM4MzhkODZlYSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cK
KysrIGIvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwzOCBAQAorMjAxMC0wNy0yOCAgTWFy
Y3VzIEJ1bGFjaCAgPGJ1bGFjaEBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
Tk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgSW1wbGVtZW50IElEQktleVBhdGggcGFyc2VyLgor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDI5NzYKKwor
ICAgICAgICBJREJLZXlQYXRoIGlzIGFuIGludGVybmFsIGNsYXNzLCBleHBvc2VkIG9ubHkgZm9y
IHVuaXQgdGVzdHMgZm9yIG5vdy4KKyAgICAgICAgSXQnbGwgYWxsb3cgaW5kZXhlZCBkYXRhYmFz
ZSBpbXBsZW1lbnRhdGlvbiB0byB0cmF2ZXJzZSBhIGdpdmVuIGtleSBwYXRoIGFuZCBvYnRhaW4g
dGhlIGNvcnJlc3BvbmRpbmcgcHJvcGVydGllcworICAgICAgICBmcm9tIGEgU2VyaWFsaXplZFNj
cmlwdFZhbHVlLgorCisgICAgICAgICogV2ViQ29yZS5neXBpOgorICAgICAgICAqIHN0b3JhZ2Uv
SURCS2V5UGF0aC5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6SURCS2V5UGF0aDo6Y3Jl
YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OklEQktleVBhdGg6OklEQktleVBhdGgpOgorICAgICAg
ICAoV2ViQ29yZTo6SURCS2V5UGF0aDo6fklEQktleVBhdGgpOgorICAgICAgICAoV2ViQ29yZTo6
SURCS2V5UGF0aDo6aGFzTmV4dCk6CisgICAgICAgIChXZWJDb3JlOjpJREJLZXlQYXRoOjpuZXh0
KToKKyAgICAgICAgKFdlYkNvcmU6OklEQktleVBhdGg6OmlkZW50aWZpZXIpOgorICAgICAgICAo
V2ViQ29yZTo6SURCS2V5UGF0aDo6aGFzSW5kZXgpOgorICAgICAgICAoV2ViQ29yZTo6SURCS2V5
UGF0aDo6aW5kZXhWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpJREJLZXlQYXRoOjpwYXJzZXJF
cnJvcik6CisgICAgICAgIChXZWJDb3JlOjpJREJLZXlQYXRoOjpwYXJzZSk6CisgICAgICAgIChX
ZWJDb3JlOjpJREJLZXlQYXRoOjpMZXhlcjo6bGV4KToKKyAgICAgICAgKFdlYkNvcmU6OmlzU2Fm
ZUlkZW50aWZpZXJTdGFydENoYXJhY3Rlcik6CisgICAgICAgIChXZWJDb3JlOjppc1NhZmVJZGVu
dGlmaWVyQ2hhcmFjdGVyKToKKyAgICAgICAgKFdlYkNvcmU6OklEQktleVBhdGg6OkxleGVyOjps
ZXhJZGVudGlmaWVyKToKKyAgICAgICAgKFdlYkNvcmU6OklEQktleVBhdGg6OkxleGVyOjpsZXhO
dW1iZXIpOgorICAgICAgICAqIHN0b3JhZ2UvSURCS2V5UGF0aC5oOiBBZGRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OklEQktleVBhdGg6OlRva2VuOjpUb2tlbik6CisgICAgICAgIChXZWJDb3JlOjpJ
REJLZXlQYXRoOjopOgorICAgICAgICAoV2ViQ29yZTo6SURCS2V5UGF0aDo6TGV4ZXI6OkxleGVy
KToKKyAgICAgICAgKFdlYkNvcmU6OklEQktleVBhdGg6OkxleGVyOjpuZXh0KToKKyAgICAgICAg
KFdlYkNvcmU6OklEQktleVBhdGg6OkxleGVyOjpjdXJyZW50VG9rZW4pOgorCiAyMDEwLTA4LTAx
ICBOaWtvbGFzIFppbW1lcm1hbm4gIDxuemltbWVybWFubkByaW0uY29tPgogCiAgICAgICAgIFJl
dmlld2VkIGJ5IERpcmsgU2NodWx6ZS4KZGlmZiAtLWdpdCBhL1dlYkNvcmUvV2ViQ29yZS5neXBp
IGIvV2ViQ29yZS9XZWJDb3JlLmd5cGkKaW5kZXggN2JiZmZlMjMwMDcwMjA1YTI2NGJjY2ExNDA0
NzFlMmUxOTQyNGNkYi4uYTg5YWJlZGU3NjMzMGZjZTRmNjdmMTcxMDAxNWQ5NzA2Y2E2MDQ4ZiAx
MDA2NDQKLS0tIGEvV2ViQ29yZS9XZWJDb3JlLmd5cGkKKysrIGIvV2ViQ29yZS9XZWJDb3JlLmd5
cGkKQEAgLTM1MTksNiArMzUxOSw4IEBACiAgICAgICAgICAgICAnc3RvcmFnZS9JREJJbmRleEJh
Y2tlbmRJbXBsLmgnLAogICAgICAgICAgICAgJ3N0b3JhZ2UvSURCS2V5LmNwcCcsCiAgICAgICAg
ICAgICAnc3RvcmFnZS9JREJLZXkuaCcsCisgICAgICAgICAgICAnc3RvcmFnZS9JREJLZXlQYXRo
LmNwcCcsCisgICAgICAgICAgICAnc3RvcmFnZS9JREJLZXlQYXRoLmgnLAogICAgICAgICAgICAg
J3N0b3JhZ2UvSURCS2V5UmFuZ2UuY3BwJywKICAgICAgICAgICAgICdzdG9yYWdlL0lEQktleVJh
bmdlLmgnLAogICAgICAgICAgICAgJ3N0b3JhZ2UvSURCS2V5VHJlZS5oJywKZGlmZiAtLWdpdCBh
L1dlYkNvcmUvc3RvcmFnZS9JREJLZXlQYXRoLmNwcCBiL1dlYkNvcmUvc3RvcmFnZS9JREJLZXlQ
YXRoLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwLi5mYTdlOTBhNzE1MDM5NTk1MGE4NGMxMGIwMzU5ZjFjMTEzNWEz
ZjQ3Ci0tLSAvZGV2L251bGwKKysrIGIvV2ViQ29yZS9zdG9yYWdlL0lEQktleVBhdGguY3BwCkBA
IC0wLDAgKzEsMjk3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBB
TlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBM
T1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Ug
T0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIklE
QktleVBhdGguaCIKKworI2luY2x1ZGUgIlN0cmluZ0J1aWxkZXIuaCIKKyNpbmNsdWRlIDx3dGYv
QVNDSUlDVHlwZS5oPgorI2luY2x1ZGUgPHd0Zi9kdG9hLmg+CisKKyNpZiBFTkFCTEUoSU5ERVhF
RF9EQVRBQkFTRSkKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitQYXNzUmVmUHRyPElEQktleVBh
dGg+IElEQktleVBhdGg6OmNyZWF0ZShjb25zdCBTdHJpbmcmIGtleVBhdGgpCit7CisgICAgUmVm
UHRyPElEQktleVBhdGg+IGlkYktleVBhdGggPSBhZG9wdFJlZihuZXcgSURCS2V5UGF0aChrZXlQ
YXRoKSk7CisgICAgaWRiS2V5UGF0aC0+cGFyc2UoKTsKKyAgICByZXR1cm4gaWRiS2V5UGF0aC5y
ZWxlYXNlKCk7Cit9CisKK0lEQktleVBhdGg6OklEQktleVBhdGgoY29uc3QgU3RyaW5nJiBrZXlQ
YXRoKQorICAgIDogbV9rZXlQYXRoKGtleVBhdGgpCisgICAgLCBtX2N1cnJlbnRUb2tlbigwKQor
ICAgICwgbV9sZXhlcihrZXlQYXRoKQoreworICAgIG1fbGV4ZXIubmV4dCgpOworfQorCitJREJL
ZXlQYXRoOjp+SURCS2V5UGF0aCgpCit7Cit9CisKK2Jvb2wgSURCS2V5UGF0aDo6aGFzTmV4dCgp
Cit7CisgICAgcmV0dXJuIG1fY3VycmVudFRva2VuIDwgbV90b2tlbnMuc2l6ZSgpOworfQorCit2
b2lkIElEQktleVBhdGg6Om5leHQoKQoreworICAgIGlmIChtX2N1cnJlbnRUb2tlbiA8IG1fdG9r
ZW5zLnNpemUoKSkKKyAgICAgICAgKyttX2N1cnJlbnRUb2tlbjsKK30KKworU3RyaW5nIElEQktl
eVBhdGg6OmlkZW50aWZpZXIoKQoreworICAgIGlmIChtX2N1cnJlbnRUb2tlbiA+PSBtX3Rva2Vu
cy5zaXplKCkpCisgICAgICAgIHJldHVybiAiIjsKKyAgICByZXR1cm4gbV90b2tlbnNbbV9jdXJy
ZW50VG9rZW5dLmlkZW50aWZpZXI7Cit9CisKK2Jvb2wgSURCS2V5UGF0aDo6aGFzSW5kZXgoKSBj
b25zdAoreworICAgIGlmIChtX2N1cnJlbnRUb2tlbiA+PSBtX3Rva2Vucy5zaXplKCkpCisgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICByZXR1cm4gbV90b2tlbnNbbV9jdXJyZW50VG9rZW5dLmhh
c0luZGV4OworfQorCitpbnQgSURCS2V5UGF0aDo6aW5kZXhWYWx1ZSgpIGNvbnN0Cit7CisgICAg
aWYgKG1fY3VycmVudFRva2VuID49IG1fdG9rZW5zLnNpemUoKSkKKyAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgIHJldHVybiBtX3Rva2Vuc1ttX2N1cnJlbnRUb2tlbl0uaW5kZXhWYWx1ZTsKK30K
KworaW50IElEQktleVBhdGg6OnBhcnNlckVycm9yKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9w
YXJzZXJFcnJvcjsKK30KKwordm9pZCBJREJLZXlQYXRoOjpwYXJzZSgpCit7CisgICAgUGFyc2Vy
U3RhdGUgc3RhdGUgPSBTdGFydDsKKworICAgIHdoaWxlICgxKSB7CisgICAgICAgIHN3aXRjaCAo
c3RhdGUpIHsKKyAgICAgICAgY2FzZSBTdGFydCA6IHsKKyAgICAgICAgICAgIFRva2VuVHlwZSB0
b2tlbiA9IG1fbGV4ZXIuY3VycmVudFRva2VuKCkudHlwZTsKKyAgICAgICAgICAgIGlmICh0b2tl
biA9PSBUb2tJZGVudGlmaWVyKQorICAgICAgICAgICAgICAgIHN0YXRlID0gSWRlbnRpZmllcjsK
KyAgICAgICAgICAgIGVsc2UgaWYgKHRva2VuID09IFRva0xCcmFja2V0KQorICAgICAgICAgICAg
ICAgIHN0YXRlID0gQXJyYXk7CisgICAgICAgICAgICBlbHNlIGlmICh0b2tlbiA9PSBUb2tFbmQp
CisgICAgICAgICAgICAgICAgc3RhdGUgPSBFbmQ7CisgICAgICAgICAgICBlbHNlIHsKKyAgICAg
ICAgICAgICAgbV9wYXJzZXJFcnJvciA9IFBhcnNlRXJyb3JTdGFydDsKKyAgICAgICAgICAgICAg
cmV0dXJuOworICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAg
ICAgICAgY2FzZSBJZGVudGlmaWVyIDogeworICAgICAgICAgICAgTGV4ZXI6OlBhcnNlclRva2Vu
IHRva2VuID0gbV9sZXhlci5jdXJyZW50VG9rZW4oKTsKKyAgICAgICAgICAgIEFTU0VSVCh0b2tl
bi50eXBlID09IFRva0lkZW50aWZpZXIpOworICAgICAgICAgICAgVG9rZW4gaWRiVG9rZW47Cisg
ICAgICAgICAgICBpZGJUb2tlbi5pZGVudGlmaWVyID0gdG9rZW4uc3RyaW5nVG9rZW47CisgICAg
ICAgICAgICBtX3Rva2Vucy5hcHBlbmQoaWRiVG9rZW4pOworCisgICAgICAgICAgICBtX2xleGVy
Lm5leHQoKTsKKyAgICAgICAgICAgIHRva2VuID0gbV9sZXhlci5jdXJyZW50VG9rZW4oKTsKKyAg
ICAgICAgICAgIGlmICh0b2tlbi50eXBlID09IFRva0RvdCkKKyAgICAgICAgICAgICAgICBzdGF0
ZSA9IERvdDsKKyAgICAgICAgICAgIGVsc2UgaWYgKHRva2VuLnR5cGUgPT0gVG9rTEJyYWNrZXQp
CisgICAgICAgICAgICAgICAgc3RhdGUgPSBBcnJheTsKKyAgICAgICAgICAgIGVsc2UgaWYgKHRv
a2VuLnR5cGUgPT0gVG9rRW5kKQorICAgICAgICAgICAgICAgIHN0YXRlID0gRW5kOworICAgICAg
ICAgICAgZWxzZSB7CisgICAgICAgICAgICAgIG1fcGFyc2VyRXJyb3IgPSBQYXJzZUVycm9ySWRl
bnRpZmllcjsKKyAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBBcnJheSA6IHsKKyAgICAgICAgICAg
IExleGVyOjpQYXJzZXJUb2tlbiB0b2tlbiA9IG1fbGV4ZXIuY3VycmVudFRva2VuKCk7CisgICAg
ICAgICAgICBBU1NFUlQodG9rZW4udHlwZSA9PSBUb2tMQnJhY2tldCk7CisKKyAgICAgICAgICAg
IG1fbGV4ZXIubmV4dCgpOworICAgICAgICAgICAgdG9rZW4gPSBtX2xleGVyLmN1cnJlbnRUb2tl
bigpOworICAgICAgICAgICAgaWYgKHRva2VuLnR5cGUgIT0gVG9rTnVtYmVyKSB7CisgICAgICAg
ICAgICAgICAgbV9wYXJzZXJFcnJvciA9IFBhcnNlRXJyb3JBcnJheUluZGV4OworICAgICAgICAg
ICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgQVNTRVJUKHRva2Vu
LnR5cGUgPT0gVG9rTnVtYmVyKTsKKyAgICAgICAgICAgIFRva2VuIGlkYlRva2VuOworICAgICAg
ICAgICAgaWRiVG9rZW4uaGFzSW5kZXggPSB0cnVlOworICAgICAgICAgICAgaWRiVG9rZW4uaW5k
ZXhWYWx1ZSA9IHRva2VuLm51bWJlclRva2VuOworICAgICAgICAgICAgbV90b2tlbnMuYXBwZW5k
KGlkYlRva2VuKTsKKworICAgICAgICAgICAgbV9sZXhlci5uZXh0KCk7CisgICAgICAgICAgICB0
b2tlbiA9IG1fbGV4ZXIuY3VycmVudFRva2VuKCk7CisgICAgICAgICAgICBpZiAodG9rZW4udHlw
ZSAhPSBUb2tSQnJhY2tldCkgeworICAgICAgICAgICAgICAgIG1fcGFyc2VyRXJyb3IgPSBQYXJz
ZUVycm9yQXJyYXlJbmRleDsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9
CisKKyAgICAgICAgICAgIG1fbGV4ZXIubmV4dCgpOworICAgICAgICAgICAgdG9rZW4gPSBtX2xl
eGVyLmN1cnJlbnRUb2tlbigpOworICAgICAgICAgICAgaWYgKHRva2VuLnR5cGUgPT0gVG9rRG90
KQorICAgICAgICAgICAgICAgIHN0YXRlID0gRG90OworICAgICAgICAgICAgZWxzZSBpZiAodG9r
ZW4udHlwZSA9PSBUb2tMQnJhY2tldCkKKyAgICAgICAgICAgICAgICBzdGF0ZSA9IEFycmF5Owor
ICAgICAgICAgICAgZWxzZSBpZiAodG9rZW4udHlwZSA9PSBUb2tFbmQpCisgICAgICAgICAgICAg
ICAgc3RhdGUgPSBFbmQ7CisgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICBtX3Bh
cnNlckVycm9yID0gUGFyc2VyRXJyb3JBZnRlckFycmF5OworICAgICAgICAgICAgICAgIHJldHVy
bjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAg
IGNhc2UgRG90OiB7CisgICAgICAgICAgICBMZXhlcjo6UGFyc2VyVG9rZW4gdG9rZW4gPSBtX2xl
eGVyLmN1cnJlbnRUb2tlbigpOworICAgICAgICAgICAgQVNTRVJUKHRva2VuLnR5cGUgPT0gVG9r
RG90KTsKKworICAgICAgICAgICAgbV9sZXhlci5uZXh0KCk7CisgICAgICAgICAgICB0b2tlbiA9
IG1fbGV4ZXIuY3VycmVudFRva2VuKCk7CisgICAgICAgICAgICBpZiAodG9rZW4udHlwZSAhPSBU
b2tJZGVudGlmaWVyKSB7CisgICAgICAgICAgICAgICAgbV9wYXJzZXJFcnJvciA9IFBhcnNlRXJy
b3JEb3Q7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorCisgICAgICAg
ICAgICBzdGF0ZSA9IElkZW50aWZpZXI7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQor
ICAgICAgICBjYXNlIEVuZDogeworICAgICAgICAgICAgbV9wYXJzZXJFcnJvciA9IFBhcnNlRXJy
b3JOb25lOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgfQorICAg
IH0KK30KKworSURCS2V5UGF0aDo6VG9rZW5UeXBlIElEQktleVBhdGg6OkxleGVyOjpsZXgoUGFy
c2VyVG9rZW4mIHRva2VuKQoreworICAgIHdoaWxlIChtX3B0ciA8IG1fZW5kICYmIGlzQVNDSUlT
cGFjZSgqbV9wdHIpKQorICAgICAgICArK21fcHRyOworCisgICAgaWYgKG1fcHRyID49IG1fZW5k
KSB7CisgICAgICAgIHRva2VuLnR5cGUgPSBUb2tFbmQ7CisgICAgICAgIHRva2VuLnN0YXJ0ID0g
bV9wdHI7CisgICAgICAgIHRva2VuLmVuZCA9IG1fcHRyOworICAgICAgICByZXR1cm4gVG9rRW5k
OworICAgIH0KKyAgICBBU1NFUlQobV9wdHIgPCBtX2VuZCk7CisgICAgdG9rZW4udHlwZSA9IFRv
a0Vycm9yOworICAgIHRva2VuLnN0YXJ0ID0gbV9wdHI7CisgICAgc3dpdGNoICgqbV9wdHIpIHsK
KyAgICBjYXNlICdbJzoKKyAgICAgICAgdG9rZW4udHlwZSA9IFRva0xCcmFja2V0OworICAgICAg
ICB0b2tlbi5lbmQgPSArK21fcHRyOworICAgICAgICByZXR1cm4gVG9rTEJyYWNrZXQ7CisgICAg
Y2FzZSAnXSc6CisgICAgICAgIHRva2VuLnR5cGUgPSBUb2tSQnJhY2tldDsKKyAgICAgICAgdG9r
ZW4uZW5kID0gKyttX3B0cjsKKyAgICAgICAgcmV0dXJuIFRva1JCcmFja2V0OworICAgIGNhc2Ug
Jy4nOgorICAgICAgICB0b2tlbi50eXBlID0gVG9rRG90OworICAgICAgICB0b2tlbi5lbmQgPSAr
K21fcHRyOworICAgICAgICByZXR1cm4gVG9rRG90OworICAgIGNhc2UgJzAnOgorICAgIGNhc2Ug
JzEnOgorICAgIGNhc2UgJzInOgorICAgIGNhc2UgJzMnOgorICAgIGNhc2UgJzQnOgorICAgIGNh
c2UgJzUnOgorICAgIGNhc2UgJzYnOgorICAgIGNhc2UgJzcnOgorICAgIGNhc2UgJzgnOgorICAg
IGNhc2UgJzknOgorICAgICAgICByZXR1cm4gbGV4TnVtYmVyKHRva2VuKTsKKyAgICBkZWZhdWx0
OgorICAgICAgICByZXR1cm4gbGV4SWRlbnRpZmllcih0b2tlbik7CisgICAgfQorICAgIHJldHVy
biBUb2tFcnJvcjsKK30KKworc3RhdGljIGlubGluZSBib29sIGlzU2FmZUlkZW50aWZpZXJTdGFy
dENoYXJhY3RlcihVQ2hhciBjKQoreworICAgIHJldHVybiBpc0FTQ0lJQWxwaGEoYykgfHwgKGMg
PT0gJ18nKSB8fCAoYyA9PSAnJCcpOworfQorCitzdGF0aWMgaW5saW5lIGJvb2wgaXNTYWZlSWRl
bnRpZmllckNoYXJhY3RlcihVQ2hhciBjKQoreworICAgIHJldHVybiBpc0FTQ0lJQWxwaGFudW1l
cmljKGMpIHx8IChjID09ICdfJykgfHwgKGMgPT0gJyQnKTsKK30KKworSURCS2V5UGF0aDo6VG9r
ZW5UeXBlIElEQktleVBhdGg6OkxleGVyOjpsZXhJZGVudGlmaWVyKFBhcnNlclRva2VuJiB0b2tl
bikKK3sKKyAgICBjb25zdCBVQ2hhciogc3RhcnQgPSBtX3B0cjsKKyAgICBpZiAobV9wdHIgPCBt
X2VuZCAmJiBpc1NhZmVJZGVudGlmaWVyU3RhcnRDaGFyYWN0ZXIoKm1fcHRyKSkKKyAgICAgICAg
KyttX3B0cjsKKyAgICBlbHNlCisgICAgICAgIHJldHVybiBUb2tFcnJvcjsKKworICAgIHdoaWxl
IChtX3B0ciA8IG1fZW5kICYmIGlzU2FmZUlkZW50aWZpZXJDaGFyYWN0ZXIoKm1fcHRyKSkKKyAg
ICAgICAgKyttX3B0cjsKKworICAgIFN0cmluZyBpZGVudGlmaWVyOworICAgIGlmIChzdGFydCA8
IG1fcHRyKQorICAgICAgICBpZGVudGlmaWVyID0gU3RyaW5nKHN0YXJ0LCBtX3B0ciAtIHN0YXJ0
KTsKKworICAgIHRva2VuLnN0cmluZ1Rva2VuID0gaWRlbnRpZmllcjsKKyAgICB0b2tlbi50eXBl
ID0gVG9rSWRlbnRpZmllcjsKKyAgICB0b2tlbi5lbmQgPSBtX3B0cjsKKyAgICByZXR1cm4gVG9r
SWRlbnRpZmllcjsKK30KKworSURCS2V5UGF0aDo6VG9rZW5UeXBlIElEQktleVBhdGg6OkxleGVy
OjpsZXhOdW1iZXIoUGFyc2VyVG9rZW4mIHRva2VuKQoreworICAgIGNvbnN0IFVDaGFyKiBzdGFy
dCA9IG1fcHRyOworICAgIGlmIChtX3B0ciA8IG1fZW5kKSB7CisgICAgICAgIC8vIFswLTldKgor
ICAgICAgICB3aGlsZSAobV9wdHIgPCBtX2VuZCAmJiBpc0FTQ0lJRGlnaXQoKm1fcHRyKSkKKyAg
ICAgICAgICAgICsrbV9wdHI7CisgICAgfSBlbHNlCisgICAgICAgIHJldHVybiBUb2tFcnJvcjsK
KworICAgIFN0cmluZyBudW1iZXJBc1N0cmluZzsKKyAgICBpZiAoc3RhcnQgPCBtX3B0cikgewor
ICAgICAgICBudW1iZXJBc1N0cmluZyA9IFN0cmluZyhzdGFydCwgbV9wdHIgLSBzdGFydCk7Cisg
ICAgICAgIGJvb2wgb2sgPSBmYWxzZTsKKyAgICAgICAgaW50IG51bWJlciA9IG51bWJlckFzU3Ry
aW5nLnRvSW50U3RyaWN0KCZvayk7CisgICAgICAgIGlmICghb2spCisgICAgICAgICAgICByZXR1
cm4gVG9rRXJyb3I7CisgICAgICAgIHRva2VuLnR5cGUgPSBUb2tOdW1iZXI7CisgICAgICAgIHRv
a2VuLm51bWJlclRva2VuID0gbnVtYmVyOworICAgICAgICB0b2tlbi5lbmQgPSBtX3B0cjsKKyAg
ICAgICAgcmV0dXJuIFRva051bWJlcjsKKyAgICB9CisgICAgcmV0dXJuIFRva0Vycm9yOworfQor
Cit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoSU5ERVhFRF9EQVRB
QkFTRSkKZGlmZiAtLWdpdCBhL1dlYkNvcmUvc3RvcmFnZS9JREJLZXlQYXRoLmggYi9XZWJDb3Jl
L3N0b3JhZ2UvSURCS2V5UGF0aC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmExNWRjMTBmYTc5NTQzODg5ODRlYzc1
YjU1NzlhOWY2NzFkMjBkNjAKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJDb3JlL3N0b3JhZ2UvSURC
S2V5UGF0aC5oCkBAIC0wLDAgKzEsMTI3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwIEdv
b2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAi
QVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAq
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBJREJLZXlQYXRoX2gK
KyNkZWZpbmUgSURCS2V5UGF0aF9oCisKKyNpZiBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKKwor
I2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CisjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4K
KyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+
CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgSURCS2V5UGF0aCA6IHB1YmxpYyBSZWZD
b3VudGVkPElEQktleVBhdGg+IHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxJREJL
ZXlQYXRoPiBjcmVhdGUoY29uc3QgU3RyaW5nJik7CisgICAgfklEQktleVBhdGgoKTsKKworICAg
IGJvb2wgaGFzTmV4dCgpOworICAgIHZvaWQgbmV4dCgpOworICAgIFN0cmluZyBpZGVudGlmaWVy
KCk7CisgICAgYm9vbCBoYXNJbmRleCgpIGNvbnN0OworICAgIGludCBpbmRleFZhbHVlKCkgY29u
c3Q7CisKKyAgICBpbnQgcGFyc2VyRXJyb3IoKSBjb25zdDsKKworcHJpdmF0ZToKKyAgICBzdHJ1
Y3QgVG9rZW4geworICAgICAgICBTdHJpbmcgaWRlbnRpZmllcjsKKyAgICAgICAgYm9vbCBoYXNJ
bmRleDsKKyAgICAgICAgaW50IGluZGV4VmFsdWU7CisgICAgICAgIFRva2VuKCkgOiBoYXNJbmRl
eChmYWxzZSksIGluZGV4VmFsdWUoMCkge30KKyAgICB9OworICAgIGV4cGxpY2l0IElEQktleVBh
dGgoY29uc3QgU3RyaW5nJik7CisKKyAgICBTdHJpbmcgbV9rZXlQYXRoOworICAgIFZlY3RvcjxU
b2tlbj4gbV90b2tlbnM7CisgICAgaW50IG1fY3VycmVudFRva2VuOworICAgIGludCBtX3BhcnNl
ckVycm9yOworCisgICAgLy8gVGhpcyBpcyBhIHNpbXBsaWZpZWQgcGFyc2VyIGxvb3NlbHkgYmFz
ZWQgb24gTGl0ZXJhbFBhcnNlci4KKyAgICAvLyBBbiBJREJLZXlQYXRoIGlzIGRlZmluZWQgYXMg
YSBzZXF1ZW5jZSBvZjoKKyAgICAvLyBpZGVudGlmaWVyQXsuaWRlbnRpZmllckJ7W251bWVyaWNf
dmFsdWVdfQorICAgIC8vIHdoZXJlICJ7fSIgcmVwcmVzZW50cyBhbiBvcHRpb25hbCBwYXJ0Cisg
ICAgLy8gVGhlIGJhc2ljIHN0YXRlIG1hY2hpbmUgaXM6CisgICAgLy8gU3RhcnQgPT4ge0lkZW50
aWZpZXIsIEFycmF5fQorICAgIC8vIElkZW50aWZpZXIgPT4ge0RvdCwgQXJyYXksIEVuZH0KKyAg
ICAvLyBBcnJheSA9PiB7U3RhcnQsIERvdCwgRW5kfQorICAgIC8vIERvdCA9PiB7SWRlbnRpZmll
cn0KKyAgICAvLyBJdCBiYWlscyBvdXQgYXMgc29vbiBhcyBpdCBmaW5kcyBhbiBlcnJvciwgYnV0
IGRvZXNuJ3QgZGlzY2FyZCB0aGUgYml0cyBpdCBtYW5hZ2VkIHRvIHBhcnNlLgorICAgIGVudW0g
UGFyc2VyU3RhdGUgeyAgU3RhcnQsIElkZW50aWZpZXIsIEFycmF5LCBEb3QsIEVuZCB9OworICAg
IGVudW0gVG9rZW5UeXBlIHsgVG9rTEJyYWNrZXQsIFRva1JCcmFja2V0LAorICAgICAgICAgICAg
ICAgICAgICAgVG9rSWRlbnRpZmllciwgVG9rTnVtYmVyLAorICAgICAgICAgICAgICAgICAgICAg
VG9rRG90LCBUb2tFbmQsIFRva0Vycm9yIH07CisgICAgZW51bSBQYXJzZUVycm9yIHsgUGFyc2VF
cnJvck5vbmUsIFBhcnNlRXJyb3JTdGFydCwgUGFyc2VFcnJvcklkZW50aWZpZXIsCisgICAgICAg
ICAgICAgICAgICAgICAgUGFyc2VFcnJvckFycmF5SW5kZXgsIFBhcnNlckVycm9yQWZ0ZXJBcnJh
eSwgUGFyc2VFcnJvckRvdH07CisKKyAgICB2b2lkIHBhcnNlKCk7CisKKyAgICBjbGFzcyBMZXhl
ciB7CisgICAgcHVibGljOgorICAgICAgICBzdHJ1Y3QgUGFyc2VyVG9rZW4geworICAgICAgICAg
ICAgVG9rZW5UeXBlIHR5cGU7CisgICAgICAgICAgICBjb25zdCBVQ2hhciogc3RhcnQ7CisgICAg
ICAgICAgICBjb25zdCBVQ2hhciogZW5kOworICAgICAgICAgICAgU3RyaW5nIHN0cmluZ1Rva2Vu
OworICAgICAgICAgICAgZG91YmxlIG51bWJlclRva2VuOworICAgICAgICB9OworICAgICAgICBl
eHBsaWNpdCBMZXhlcihjb25zdCBTdHJpbmcmIHMpCisgICAgICAgICAgICA6IG1fc3RyaW5nKHMp
CisgICAgICAgICAgICAsIG1fcHRyKHMuY2hhcmFjdGVycygpKQorICAgICAgICAgICAgLCBtX2Vu
ZChzLmNoYXJhY3RlcnMoKSArIHMubGVuZ3RoKCkpCisgICAgICAgIHsKKyAgICAgICAgfQorCisg
ICAgICAgIFRva2VuVHlwZSBuZXh0KCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGxl
eChtX2N1cnJlbnRUb2tlbik7CisgICAgICAgIH0KKworICAgICAgICBjb25zdCBQYXJzZXJUb2tl
biYgY3VycmVudFRva2VuKCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIG1fY3VycmVu
dFRva2VuOworICAgICAgICB9CisKKyAgICBwcml2YXRlOgorICAgICAgICBUb2tlblR5cGUgbGV4
KFBhcnNlclRva2VuJik7CisgICAgICAgIFRva2VuVHlwZSBsZXhJZGVudGlmaWVyKFBhcnNlclRv
a2VuJik7CisgICAgICAgIFRva2VuVHlwZSBsZXhOdW1iZXIoUGFyc2VyVG9rZW4mKTsKKyAgICAg
ICAgUGFyc2VyVG9rZW4gbV9jdXJyZW50VG9rZW47CisgICAgICAgIFN0cmluZyBtX3N0cmluZzsK
KyAgICAgICAgY29uc3QgVUNoYXIqIG1fcHRyOworICAgICAgICBjb25zdCBVQ2hhciogbV9lbmQ7
CisgICAgIH07CisKKyAgICBMZXhlciBtX2xleGVyOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQorCisjZW5kaWYKKworI2VuZGlmIC8vIElEQktleVBhdGhfaApkaWZmIC0tZ2l0IGEvV2Vi
Q29yZS9zdG9yYWdlL0luZGV4ZWREYXRhYmFzZVJlcXVlc3QuY3BwIGIvV2ViQ29yZS9zdG9yYWdl
L0luZGV4ZWREYXRhYmFzZVJlcXVlc3QuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmMxYzU1MTU3N2YxMDEyZmY0
YTIyY2QzMDBhYjY2YjgzMWViNGEwNjgKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJDb3JlL3N0b3Jh
Z2UvSW5kZXhlZERhdGFiYXNlUmVxdWVzdC5jcHAKQEAgLTAsMCArMSw3MyBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICogMy4gIE5laXRoZXIgdGhlIG5hbWUgb2YgQXBwbGUgQ29tcHV0ZXIsIElu
Yy4gKCJBcHBsZSIpIG5vciB0aGUgbmFtZXMgb2YKKyAqICAgICBpdHMgY29udHJpYnV0b3JzIG1h
eSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCisgKiAgICAg
ZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNz
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBD
T05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBV
UlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMg
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICog
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRl
ICJjb25maWcuaCIKKyNpbmNsdWRlICJJbmRleGVkRGF0YWJhc2VSZXF1ZXN0LmgiCisKKyNpbmNs
dWRlICJEb2N1bWVudC5oIgorI2luY2x1ZGUgIkV4Y2VwdGlvbkNvZGUuaCIKKyNpbmNsdWRlICJG
cmFtZS5oIgorI2luY2x1ZGUgIklEQkRhdGFiYXNlLmgiCisjaW5jbHVkZSAiSURCS2V5UmFuZ2Uu
aCIKKyNpbmNsdWRlICJJREJSZXF1ZXN0LmgiCisjaW5jbHVkZSAiSW5kZXhlZERhdGFiYXNlLmgi
CisKKyNpZiBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKKworbmFtZXNwYWNlIFdlYkNvcmUgewor
CitJbmRleGVkRGF0YWJhc2VSZXF1ZXN0OjpJbmRleGVkRGF0YWJhc2VSZXF1ZXN0KEluZGV4ZWRE
YXRhYmFzZSogaW5kZXhlZERhdGFiYXNlKQorICAgIDogbV9pbmRleGVkRGF0YWJhc2UoaW5kZXhl
ZERhdGFiYXNlKQoreworICAgIC8vIFdlIHBhc3MgYSByZWZlcmVuY2UgdG8gdGhpcyBvYmplY3Qg
YmVmb3JlIGl0IGNhbiBiZSBhZG9wdGVkLgorICAgIHJlbGF4QWRvcHRpb25SZXF1aXJlbWVudCgp
OworfQorCitJbmRleGVkRGF0YWJhc2VSZXF1ZXN0Ojp+SW5kZXhlZERhdGFiYXNlUmVxdWVzdCgp
Cit7Cit9CisKK1Bhc3NSZWZQdHI8SURCUmVxdWVzdD4gSW5kZXhlZERhdGFiYXNlUmVxdWVzdDo6
b3BlbihTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBjb25zdCBTdHJpbmcmIG5hbWUs
IGNvbnN0IFN0cmluZyYgZGVzY3JpcHRpb24pCit7CisgICAgaWYgKCFjb250ZXh0LT5pc0RvY3Vt
ZW50KCkpIHsKKyAgICAgICAgLy8gRklYTUU6IG1ha2UgdGhpcyB3b3JrIHdpdGggd29ya2Vycy4K
KyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorCisgICAgRG9jdW1lbnQqIGRvY3VtZW50ID0gc3Rh
dGljX2Nhc3Q8RG9jdW1lbnQqPihjb250ZXh0KTsKKyAgICBpZiAoIWRvY3VtZW50LT5mcmFtZSgp
KQorICAgICAgICByZXR1cm4gMDsKKworICAgIFJlZlB0cjxJREJSZXF1ZXN0PiByZXF1ZXN0ID0g
SURCUmVxdWVzdDo6Y3JlYXRlKGRvY3VtZW50LCBJREJBbnk6OmNyZWF0ZSh0aGlzKSk7CisgICAg
bV9pbmRleGVkRGF0YWJhc2UtPm9wZW4obmFtZSwgZGVzY3JpcHRpb24sIHJlcXVlc3QsIGRvY3Vt
ZW50LT5zZWN1cml0eU9yaWdpbigpLCBkb2N1bWVudC0+ZnJhbWUoKSk7CisgICAgcmV0dXJuIHJl
cXVlc3Q7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShJ
TkRFWEVEX0RBVEFCQVNFKQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9zdG9yYWdlL0luZGV4ZWREYXRh
YmFzZVJlcXVlc3QuaCBiL1dlYkNvcmUvc3RvcmFnZS9JbmRleGVkRGF0YWJhc2VSZXF1ZXN0LmgK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMC4uNTdmOGE3ODViYzliMGE2YzlkYjgyMjU5ZGEyNGMzOTliZGU5M2VkZgotLS0g
L2Rldi9udWxsCisrKyBiL1dlYkNvcmUvc3RvcmFnZS9JbmRleGVkRGF0YWJhc2VSZXF1ZXN0LmgK
QEAgLTAsMCArMSw2OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogMy4gIE5laXRoZXIgdGhl
IG5hbWUgb2YgQXBwbGUgQ29tcHV0ZXIsIEluYy4gKCJBcHBsZSIpIG5vciB0aGUgbmFtZXMgb2YK
KyAqICAgICBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90
ZSBwcm9kdWN0cyBkZXJpdmVkCisgKiAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3Bl
Y2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisg
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
CisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisg
KiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICovCisjaWZuZGVmIEluZGV4ZWREYXRhYmFzZVJlcXVlc3RfaAorI2RlZmlu
ZSBJbmRleGVkRGF0YWJhc2VSZXF1ZXN0X2gKKworI2luY2x1ZGUgIkV4Y2VwdGlvbkNvZGUuaCIK
KyNpbmNsdWRlICJJbmRleGVkRGF0YWJhc2UuaCIKKyNpbmNsdWRlICJQbGF0Zm9ybVN0cmluZy5o
IgorI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CisjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQu
aD4KKyNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CisKKyNpZiBFTkFCTEUoSU5ERVhFRF9EQVRBQkFT
RSkKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBJREJLZXk7CitjbGFzcyBJREJLZXlS
YW5nZTsKK2NsYXNzIElEQlJlcXVlc3Q7CitjbGFzcyBJbmRleGVkRGF0YWJhc2U7CitjbGFzcyBT
Y3JpcHRFeGVjdXRpb25Db250ZXh0OworCitjbGFzcyBJbmRleGVkRGF0YWJhc2VSZXF1ZXN0IDog
cHVibGljIFJlZkNvdW50ZWQ8SW5kZXhlZERhdGFiYXNlUmVxdWVzdD4geworcHVibGljOgorICAg
IHN0YXRpYyBQYXNzUmVmUHRyPEluZGV4ZWREYXRhYmFzZVJlcXVlc3Q+IGNyZWF0ZShJbmRleGVk
RGF0YWJhc2UqIGluZGV4ZWREYXRhYmFzZSkKKyAgICB7CisgICAgICAgIHJldHVybiBhZG9wdFJl
ZihuZXcgSW5kZXhlZERhdGFiYXNlUmVxdWVzdChpbmRleGVkRGF0YWJhc2UpKTsKKyAgICB9Cisg
ICAgfkluZGV4ZWREYXRhYmFzZVJlcXVlc3QoKTsKKworICAgIFBhc3NSZWZQdHI8SURCUmVxdWVz
dD4gb3BlbihTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgY29uc3QgU3RyaW5nJiBuYW1lLCBjb25z
dCBTdHJpbmcmIGRlc2NyaXB0aW9uKTsKKworcHJpdmF0ZToKKyAgICBJbmRleGVkRGF0YWJhc2VS
ZXF1ZXN0KEluZGV4ZWREYXRhYmFzZSopOworCisgICAgUmVmUHRyPEluZGV4ZWREYXRhYmFzZT4g
bV9pbmRleGVkRGF0YWJhc2U7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRp
ZgorCisjZW5kaWYgLy8gSW5kZXhlZERhdGFiYXNlUmVxdWVzdF9oCisKZGlmZiAtLWdpdCBhL1dl
YkNvcmUvc3RvcmFnZS9JbmRleGVkRGF0YWJhc2VSZXF1ZXN0LmlkbCBiL1dlYkNvcmUvc3RvcmFn
ZS9JbmRleGVkRGF0YWJhc2VSZXF1ZXN0LmlkbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5lNmVlNDQ2Mjc4Zjc5NTU0
MThmZjgzNWRhMjM4ZjkxYTk5MGYxMTY4Ci0tLSAvZGV2L251bGwKKysrIGIvV2ViQ29yZS9zdG9y
YWdlL0luZGV4ZWREYXRhYmFzZVJlcXVlc3QuaWRsCkBAIC0wLDAgKzEsMzQgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFO
RCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAor
ICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
T1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04g
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCitt
b2R1bGUgc3RvcmFnZSB7CisKKyAgICBpbnRlcmZhY2UgWworICAgICAgICBDb25kaXRpb25hbD1J
TkRFWEVEX0RBVEFCQVNFCisgICAgXSBJbmRleGVkRGF0YWJhc2VSZXF1ZXN0IHsKKyAgICAgICAg
W0NhbGxXaXRoPVNjcmlwdEV4ZWN1dGlvbkNvbnRleHRdIElEQlJlcXVlc3Qgb3BlbihpbiBET01T
dHJpbmcgbmFtZSwgaW4gRE9NU3RyaW5nIGRlc2NyaXB0aW9uKTsKKyAgICB9OworCit9CmRpZmYg
LS1naXQgYS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nIGIvV2ViS2l0L2Nocm9taXVtL0NoYW5n
ZUxvZwppbmRleCBhMzg5NTI1NDQyMzk3N2RiZjU2ZjFjMWE0ZDNhMDYxYjM2NzQ0MzViLi5jMzM3
OWFjOTZiNTIxMzhjZWE4OWM5MmY1MTU4MDA0ODRjZjk1MTYzIDEwMDY0NAotLS0gYS9XZWJLaXQv
Y2hyb21pdW0vQ2hhbmdlTG9nCisrKyBiL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwyMCBAQAorMjAxMC0wNy0yOCAgTWFyY3VzIEJ1bGFjaCAgPGJ1bGFjaEBjaHJvbWl1bS5v
cmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgSW1w
bGVtZW50IElEQktleVBhdGggcGFyc2VyLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9NDI5NzYKKworICAgICAgICBJREJLZXlQYXRoIGlzIGFuIGludGVy
bmFsIGNsYXNzLCBleHBvc2VkIG9ubHkgZm9yIHVuaXQgdGVzdHMgZm9yIG5vdy4KKyAgICAgICAg
SXQnbGwgYWxsb3cgaW5kZXhlZCBkYXRhYmFzZSBpbXBsZW1lbnRhdGlvbiB0byB0cmF2ZXJzZSBh
IGdpdmVuIGtleSBwYXRoIGFuZCBvYnRhaW4gdGhlIGNvcnJlc3BvbmRpbmcgcHJvcGVydGllcwor
ICAgICAgICBmcm9tIGEgU2VyaWFsaXplZFNjcmlwdFZhbHVlLgorCisgICAgICAgICogV2ViS2l0
Lmd5cDoKKyAgICAgICAgKiB0ZXN0cy9JREJLZXlQYXRoVGVzdC5jcHA6IEFkZGVkLgorICAgICAg
ICAoV2ViQ29yZTo6RXhwZWN0ZWRUb2tlbjo6RXhwZWN0ZWRUb2tlbik6CisgICAgICAgIChXZWJD
b3JlOjpjaGVja0tleVBhdGgpOgorICAgICAgICAoV2ViQ29yZTo6VEVTVCk6CisKIDIwMTAtMDct
MjcgIEx1aXogQWdvc3RpbmkgIDxsdWl6LmFnb3N0aW5pQG9wZW5ib3NzYS5vcmc+CiAKICAgICAg
ICAgUmV2aWV3ZWQgYnkgRGFyaW4gRmlzaGVyLgpkaWZmIC0tZ2l0IGEvV2ViS2l0L2Nocm9taXVt
L1dlYktpdC5neXAgYi9XZWJLaXQvY2hyb21pdW0vV2ViS2l0Lmd5cAppbmRleCAwMTM4NTU0Yzc0
NzIwYTAxN2Y2YWE0MzgyNWNkYjliNmY4NDVmZWFhLi4wMGM2ODkwNzFjZjY2OWUwZjRmYTNjMTY1
ZjVjNjRiNzI2ODg1ODNmIDEwMDY0NAotLS0gYS9XZWJLaXQvY2hyb21pdW0vV2ViS2l0Lmd5cAor
KysgYi9XZWJLaXQvY2hyb21pdW0vV2ViS2l0Lmd5cApAQCAtNzAzLDYgKzcwMyw3IEBACiAgICAg
ICAgICAgICAgICAgICAgIF0sCiAgICAgICAgICAgICAgICAgICAgICdzb3VyY2VzJzogWwogICAg
ICAgICAgICAgICAgICAgICAgICAgJ3Rlc3RzL0RyYWdJbWFnZVRlc3QuY3BwJywKKyAgICAgICAg
ICAgICAgICAgICAgICAgICd0ZXN0cy9JREJLZXlQYXRoVGVzdC5jcHAnLAogICAgICAgICAgICAg
ICAgICAgICAgICAgJ3Rlc3RzL0tleWJvYXJkVGVzdC5jcHAnLAogICAgICAgICAgICAgICAgICAg
ICAgICAgJ3Rlc3RzL0tVUkxUZXN0LmNwcCcsCiAgICAgICAgICAgICAgICAgICAgICAgICAndGVz
dHMvUnVuQWxsVGVzdHMuY3BwJywKZGlmZiAtLWdpdCBhL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9J
REJLZXlQYXRoVGVzdC5jcHAgYi9XZWJLaXQvY2hyb21pdW0vdGVzdHMvSURCS2V5UGF0aFRlc3Qu
Y3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAuLjIzMTNjMWMzNGE1NjFjNzg5ZmFkNDhhNTdmYTliODI4YTYwZDZlN2QK
LS0tIC9kZXYvbnVsbAorKysgYi9XZWJLaXQvY2hyb21pdW0vdGVzdHMvSURCS2V5UGF0aFRlc3Qu
Y3BwCkBAIC0wLDAgKzEsMTgyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMi
IEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1
ZGUgIklEQktleVBhdGguaCIKKworI2luY2x1ZGUgPGd0ZXN0L2d0ZXN0Lmg+CisjaW5jbHVkZSA8
d3RmL1ZlY3Rvci5oPgorCisjaWYgRU5BQkxFKElOREVYRURfREFUQUJBU0UpCisKK3VzaW5nIG5h
bWVzcGFjZSBXZWJDb3JlOworCituYW1lc3BhY2UgeworCitzdHJ1Y3QgRXhwZWN0ZWRUb2tlbiB7
CisgICAgU3RyaW5nIGlkZW50aWZpZXI7CisgICAgYm9vbCBoYXNJbmRleDsKKyAgICBpbnQgaW5k
ZXhWYWx1ZTsKKyAgICBFeHBlY3RlZFRva2VuKGNvbnN0IFN0cmluZyYgcElkZW50aWZpZXIsIGJv
b2wgcEhhc0luZGV4LCAgaW50IHBJbmRleFZhbHVlKQorICAgIHsKKyAgICAgICAgaWRlbnRpZmll
ciA9IHBJZGVudGlmaWVyOworICAgICAgICBoYXNJbmRleCA9IHBIYXNJbmRleDsKKyAgICAgICAg
aW5kZXhWYWx1ZSA9IHBJbmRleFZhbHVlOworICAgIH0KK307CisKK3ZvaWQgY2hlY2tLZXlQYXRo
KGNvbnN0IFN0cmluZyYga2V5UGF0aCwgY29uc3QgVmVjdG9yPEV4cGVjdGVkVG9rZW4+JiBleHBl
Y3RlZCwgaW50IHBhcnNlckVycm9yKQoreworCisgICAgUmVmUHRyPElEQktleVBhdGg+IGlkYktl
eVBhdGggPSBJREJLZXlQYXRoOjpjcmVhdGUoa2V5UGF0aCk7CisgICAgaW50IGkgPSAwOworICAg
IGZvciAoaSA9IDA7IGlkYktleVBhdGgtPmhhc05leHQoKTsgaWRiS2V5UGF0aC0+bmV4dCgpLCAr
K2kpIHsKKyAgICAgICAgQVNTRVJUX1RSVUUoaSA8IGV4cGVjdGVkLnNpemUoKSk7CisgICAgICAg
IEVYUEVDVF9UUlVFKGV4cGVjdGVkW2ldLmlkZW50aWZpZXIgPT0gaWRiS2V5UGF0aC0+aWRlbnRp
ZmllcigpKSA8PCBpOworICAgICAgICBFWFBFQ1RfRVEoZXhwZWN0ZWRbaV0uaGFzSW5kZXgsIGlk
YktleVBhdGgtPmhhc0luZGV4KCkpIDw8IGk7CisgICAgICAgIEVYUEVDVF9FUShleHBlY3RlZFtp
XS5pbmRleFZhbHVlLCBpZGJLZXlQYXRoLT5pbmRleFZhbHVlKCkpIDw8IGk7CisgICAgfQorICAg
IEVYUEVDVF9FUShpLCBleHBlY3RlZC5zaXplKCkpOworICAgIEVYUEVDVF9FUShwYXJzZXJFcnJv
ciwgaWRiS2V5UGF0aC0+cGFyc2VyRXJyb3IoKSk7Cit9CisKK1RFU1QoSURCS2V5UGF0aFRlc3Qs
IFZhbGlkS2V5UGF0aDApCit7CisgICAgVmVjdG9yPEV4cGVjdGVkVG9rZW4+IGV4cGVjdGVkOwor
ICAgIFN0cmluZyBrZXlQYXRoKCJmb28uYmFyLnpvbyIpOworICAgIGV4cGVjdGVkLmFwcGVuZChF
eHBlY3RlZFRva2VuKCJmb28iLCBmYWxzZSwgMCkpOworICAgIGV4cGVjdGVkLmFwcGVuZChFeHBl
Y3RlZFRva2VuKCJiYXIiLCBmYWxzZSwgMCkpOworICAgIGV4cGVjdGVkLmFwcGVuZChFeHBlY3Rl
ZFRva2VuKCJ6b28iLCBmYWxzZSwgMCkpOworICAgIGNoZWNrS2V5UGF0aChrZXlQYXRoLCBleHBl
Y3RlZCwgMCk7Cit9CisKK1RFU1QoSURCS2V5UGF0aFRlc3QsIFZhbGlkS2V5UGF0aDEpCit7Cisg
ICAgVmVjdG9yPEV4cGVjdGVkVG9rZW4+IGV4cGVjdGVkOworICAgIFN0cmluZyBrZXlQYXRoKCJh
WzM0XVsyMF0uZm9vWzJdLmJhciIpOworICAgIGV4cGVjdGVkLmFwcGVuZChFeHBlY3RlZFRva2Vu
KCJhIiwgZmFsc2UsIDApKTsKKyAgICBleHBlY3RlZC5hcHBlbmQoRXhwZWN0ZWRUb2tlbihTdHJp
bmcoKSwgdHJ1ZSwgMzQpKTsKKyAgICBleHBlY3RlZC5hcHBlbmQoRXhwZWN0ZWRUb2tlbihTdHJp
bmcoKSwgdHJ1ZSwgMjApKTsKKyAgICBleHBlY3RlZC5hcHBlbmQoRXhwZWN0ZWRUb2tlbigiZm9v
IiwgZmFsc2UsIDApKTsKKyAgICBleHBlY3RlZC5hcHBlbmQoRXhwZWN0ZWRUb2tlbihTdHJpbmco
KSwgdHJ1ZSwgMikpOworICAgIGV4cGVjdGVkLmFwcGVuZChFeHBlY3RlZFRva2VuKCJiYXIiLCBm
YWxzZSwgMCkpOworICAgIGNoZWNrS2V5UGF0aChrZXlQYXRoLCBleHBlY3RlZCwgMCk7Cit9CisK
K1RFU1QoSURCS2V5UGF0aFRlc3QsIFZhbGlkS2V5UGF0aDIpCit7CisgICAgVmVjdG9yPEV4cGVj
dGVkVG9rZW4+IGV4cGVjdGVkOworICAgIFN0cmluZyBrZXlQYXRoKCJmb29bIDM0IF0uWm9vX1sw
MDAyM11cdC5fYyIpOworICAgIGV4cGVjdGVkLmFwcGVuZChFeHBlY3RlZFRva2VuKCJmb28iLCBm
YWxzZSwgMCkpOworICAgIGV4cGVjdGVkLmFwcGVuZChFeHBlY3RlZFRva2VuKFN0cmluZygpLCB0
cnVlLCAzNCkpOworICAgIGV4cGVjdGVkLmFwcGVuZChFeHBlY3RlZFRva2VuKCJab29fIiwgZmFs
c2UsIDApKTsKKyAgICBleHBlY3RlZC5hcHBlbmQoRXhwZWN0ZWRUb2tlbihTdHJpbmcoKSwgdHJ1
ZSwgMjMpKTsKKyAgICBleHBlY3RlZC5hcHBlbmQoRXhwZWN0ZWRUb2tlbigiX2MiLCBmYWxzZSwg
MCkpOworICAgIGNoZWNrS2V5UGF0aChrZXlQYXRoLCBleHBlY3RlZCwgMCk7Cit9CisKK1RFU1Qo
SURCS2V5UGF0aFRlc3QsIFZhbGlkS2V5UGF0aDMpCit7CisgICAgVmVjdG9yPEV4cGVjdGVkVG9r
ZW4+IGV4cGVjdGVkOworICAgIFN0cmluZyBrZXlQYXRoKCJmb29bIDM0IF0iKTsKKyAgICBleHBl
Y3RlZC5hcHBlbmQoRXhwZWN0ZWRUb2tlbigiZm9vIiwgZmFsc2UsIDApKTsKKyAgICBleHBlY3Rl
ZC5hcHBlbmQoRXhwZWN0ZWRUb2tlbihTdHJpbmcoKSwgdHJ1ZSwgMzQpKTsKKyAgICBjaGVja0tl
eVBhdGgoa2V5UGF0aCwgZXhwZWN0ZWQsIDApOworfQorCitURVNUKElEQktleVBhdGhUZXN0LCBW
YWxpZEtleVBhdGg0KQoreworICAgIFZlY3RvcjxFeHBlY3RlZFRva2VuPiBleHBlY3RlZDsKKyAg
ICBTdHJpbmcga2V5UGF0aCgiWyAzNCBdIik7CisgICAgZXhwZWN0ZWQuYXBwZW5kKEV4cGVjdGVk
VG9rZW4oU3RyaW5nKCksIHRydWUsIDM0KSk7CisgICAgY2hlY2tLZXlQYXRoKGtleVBhdGgsIGV4
cGVjdGVkLCAwKTsKK30KKworVEVTVChJREJLZXlQYXRoVGVzdCwgSW52YWxpZEtleVBhdGgyKQor
eworICAgIFZlY3RvcjxFeHBlY3RlZFRva2VuPiBleHBlY3RlZDsKKyAgICBTdHJpbmcga2V5UGF0
aCgiYVtbMzRdXS5iWzJdLmMiKTsKKyAgICBleHBlY3RlZC5hcHBlbmQoRXhwZWN0ZWRUb2tlbigi
YSIsIGZhbHNlLCAwKSk7CisgICAgY2hlY2tLZXlQYXRoKGtleVBhdGgsIGV4cGVjdGVkLCAzKTsK
K30KKworVEVTVChJREJLZXlQYXRoVGVzdCwgSW52YWxpZEtleVBhdGgzKQoreworICAgIFZlY3Rv
cjxFeHBlY3RlZFRva2VuPiBleHBlY3RlZDsKKyAgICBTdHJpbmcga2V5UGF0aCgiYVtbMzRdLmJb
Ml0uYyIpOworICAgIGV4cGVjdGVkLmFwcGVuZChFeHBlY3RlZFRva2VuKCJhIiwgZmFsc2UsIDAp
KTsKKyAgICBjaGVja0tleVBhdGgoa2V5UGF0aCwgZXhwZWN0ZWQsIDMpOworfQorCitURVNUKElE
QktleVBhdGhUZXN0LCBJbnZhbGlkS2V5UGF0aDUpCit7CisgICAgVmVjdG9yPEV4cGVjdGVkVG9r
ZW4+IGV4cGVjdGVkOworICAgIFN0cmluZyBrZXlQYXRoKCJhW1szNC5iWzJdLmMiKTsKKyAgICBl
eHBlY3RlZC5hcHBlbmQoRXhwZWN0ZWRUb2tlbigiYSIsIGZhbHNlLCAwKSk7CisgICAgY2hlY2tL
ZXlQYXRoKGtleVBhdGgsIGV4cGVjdGVkLCAzKTsKK30KKworVEVTVChJREJLZXlQYXRoVGVzdCwg
SW52YWxpZEtleVBhdGg2KQoreworICAgIFZlY3RvcjxFeHBlY3RlZFRva2VuPiBleHBlY3RlZDsK
KyAgICBTdHJpbmcga2V5UGF0aCgiK2FbMzRdLmJbMl0uYyIpOworICAgIGNoZWNrS2V5UGF0aChr
ZXlQYXRoLCBleHBlY3RlZCwgMSk7Cit9CisKK1RFU1QoSURCS2V5UGF0aFRlc3QsIEludmFsaWRL
ZXlQYXRoNykKK3sKKyAgICBWZWN0b3I8RXhwZWN0ZWRUb2tlbj4gZXhwZWN0ZWQ7CisgICAgU3Ry
aW5nIGtleVBhdGgoIiVhWzM0XS5iWzJdLmMiKTsKKyAgICBjaGVja0tleVBhdGgoa2V5UGF0aCwg
ZXhwZWN0ZWQsIDEpOworfQorCitURVNUKElEQktleVBhdGhUZXN0LCBJbnZhbGlkS2V5UGF0aDgp
Cit7CisgICAgVmVjdG9yPEV4cGVjdGVkVG9rZW4+IGV4cGVjdGVkOworICAgIFN0cmluZyBrZXlQ
YXRoKCJhe1szNF19LmJbMl0uYyIpOworICAgIGV4cGVjdGVkLmFwcGVuZChFeHBlY3RlZFRva2Vu
KCJhIiwgZmFsc2UsIDApKTsKKyAgICBjaGVja0tleVBhdGgoa2V5UGF0aCwgZXhwZWN0ZWQsIDIp
OworfQorCitURVNUKElEQktleVBhdGhUZXN0LCBJbnZhbGlkS2V5UGF0aDkpCit7CisgICAgVmVj
dG9yPEV4cGVjdGVkVG9rZW4+IGV4cGVjdGVkOworICAgIFN0cmluZyBrZXlQYXRoKCJhLi5iWzJd
LmMiKTsKKyAgICBleHBlY3RlZC5hcHBlbmQoRXhwZWN0ZWRUb2tlbigiYSIsIGZhbHNlLCAwKSk7
CisgICAgY2hlY2tLZXlQYXRoKGtleVBhdGgsIGV4cGVjdGVkLCA1KTsKK30KKworVEVTVChJREJL
ZXlQYXRoVGVzdCwgSW52YWxpZEtleVBhdGgxMCkKK3sKKyAgICBWZWN0b3I8RXhwZWN0ZWRUb2tl
bj4gZXhwZWN0ZWQ7CisgICAgU3RyaW5nIGtleVBhdGgoImFbMzRdYi5mb29bMl0uYmFyIik7Cisg
ICAgZXhwZWN0ZWQuYXBwZW5kKEV4cGVjdGVkVG9rZW4oImEiLCBmYWxzZSwgMCkpOworICAgIGV4
cGVjdGVkLmFwcGVuZChFeHBlY3RlZFRva2VuKFN0cmluZygpLCB0cnVlLCAzNCkpOworICAgIGNo
ZWNrS2V5UGF0aChrZXlQYXRoLCBleHBlY3RlZCwgNCk7Cit9CisKK30gLy8gbmFtZXNwYWNlCisK
KyNlbmRpZiAvLyBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>63487</attachid>
            <date>2010-08-04 13:26:45 -0700</date>
            <delta_ts>2010-08-04 13:42:00 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-42976-20100804212642.patch</filename>
            <type>text/plain</type>
            <size>29572</size>
            <attacher name="Marcus Bulach">bulach</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
YzVjZmE0NzZjYWUwYWQxZTM3NDhiZTg5Y2M2ODM3ZDYxODVkNmM0NS4uNmEwYTNhMTZhNjI1ZTE0
YmIwYmE3NTIxYTM5MmQwNzQ4NmQ4YTFjZSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cK
KysrIGIvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwzOCBAQAorMjAxMC0wNy0yOCAgTWFy
Y3VzIEJ1bGFjaCAgPGJ1bGFjaEBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
Tk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgSW1wbGVtZW50IElEQktleVBhdGggcGFyc2VyLgor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDI5NzYKKwor
ICAgICAgICBJREJLZXlQYXRoIGlzIGFuIGludGVybmFsIGNsYXNzLCBleHBvc2VkIG9ubHkgZm9y
IHVuaXQgdGVzdHMgZm9yIG5vdy4KKyAgICAgICAgSXQnbGwgYWxsb3cgaW5kZXhlZCBkYXRhYmFz
ZSBpbXBsZW1lbnRhdGlvbiB0byB0cmF2ZXJzZSBhIGdpdmVuIGtleSBwYXRoIGFuZCBvYnRhaW4g
dGhlIGNvcnJlc3BvbmRpbmcgcHJvcGVydGllcworICAgICAgICBmcm9tIGEgU2VyaWFsaXplZFNj
cmlwdFZhbHVlLgorCisgICAgICAgICogV2ViQ29yZS5neXBpOgorICAgICAgICAqIHN0b3JhZ2Uv
SURCS2V5UGF0aC5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6SURCS2V5UGF0aDo6Y3Jl
YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OklEQktleVBhdGg6OklEQktleVBhdGgpOgorICAgICAg
ICAoV2ViQ29yZTo6SURCS2V5UGF0aDo6fklEQktleVBhdGgpOgorICAgICAgICAoV2ViQ29yZTo6
SURCS2V5UGF0aDo6aGFzTmV4dCk6CisgICAgICAgIChXZWJDb3JlOjpJREJLZXlQYXRoOjpuZXh0
KToKKyAgICAgICAgKFdlYkNvcmU6OklEQktleVBhdGg6OmlkZW50aWZpZXIpOgorICAgICAgICAo
V2ViQ29yZTo6SURCS2V5UGF0aDo6aGFzSW5kZXgpOgorICAgICAgICAoV2ViQ29yZTo6SURCS2V5
UGF0aDo6aW5kZXhWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpJREJLZXlQYXRoOjpwYXJzZXJF
cnJvcik6CisgICAgICAgIChXZWJDb3JlOjpJREJLZXlQYXRoOjpwYXJzZSk6CisgICAgICAgIChX
ZWJDb3JlOjpJREJLZXlQYXRoOjpMZXhlcjo6bGV4KToKKyAgICAgICAgKFdlYkNvcmU6OmlzU2Fm
ZUlkZW50aWZpZXJTdGFydENoYXJhY3Rlcik6CisgICAgICAgIChXZWJDb3JlOjppc1NhZmVJZGVu
dGlmaWVyQ2hhcmFjdGVyKToKKyAgICAgICAgKFdlYkNvcmU6OklEQktleVBhdGg6OkxleGVyOjps
ZXhJZGVudGlmaWVyKToKKyAgICAgICAgKFdlYkNvcmU6OklEQktleVBhdGg6OkxleGVyOjpsZXhO
dW1iZXIpOgorICAgICAgICAqIHN0b3JhZ2UvSURCS2V5UGF0aC5oOiBBZGRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OklEQktleVBhdGg6OlRva2VuOjpUb2tlbik6CisgICAgICAgIChXZWJDb3JlOjpJ
REJLZXlQYXRoOjopOgorICAgICAgICAoV2ViQ29yZTo6SURCS2V5UGF0aDo6TGV4ZXI6OkxleGVy
KToKKyAgICAgICAgKFdlYkNvcmU6OklEQktleVBhdGg6OkxleGVyOjpuZXh0KToKKyAgICAgICAg
KFdlYkNvcmU6OklEQktleVBhdGg6OkxleGVyOjpjdXJyZW50VG9rZW4pOgorCiAyMDEwLTA4LTAz
ICBBbmRyZWkgUG9wZXNjdSAgPGFuZHJlaXBAZ29vZ2xlLmNvbT4KIAogICAgICAgICBVbnJldmll
d2VkLCBidWlsZCBmaXguCmRpZmYgLS1naXQgYS9XZWJDb3JlL1dlYkNvcmUuZ3lwaSBiL1dlYkNv
cmUvV2ViQ29yZS5neXBpCmluZGV4IDlmMzZjOWQ5YTU4MWVjYWQxMmE5MGJjNTRjNmNlYTM5MTc1
MWYzNmMuLmQwMzEwMzE4Mzk3MDczYTUzNzllNWQyZjc5MGFkYWI5Yzc3ZGQzMmMgMTAwNjQ0Ci0t
LSBhL1dlYkNvcmUvV2ViQ29yZS5neXBpCisrKyBiL1dlYkNvcmUvV2ViQ29yZS5neXBpCkBAIC0z
NTIxLDYgKzM1MjEsOCBAQAogICAgICAgICAgICAgJ3N0b3JhZ2UvSURCSW5kZXhCYWNrZW5kSW1w
bC5oJywKICAgICAgICAgICAgICdzdG9yYWdlL0lEQktleS5jcHAnLAogICAgICAgICAgICAgJ3N0
b3JhZ2UvSURCS2V5LmgnLAorICAgICAgICAgICAgJ3N0b3JhZ2UvSURCS2V5UGF0aC5jcHAnLAor
ICAgICAgICAgICAgJ3N0b3JhZ2UvSURCS2V5UGF0aC5oJywKICAgICAgICAgICAgICdzdG9yYWdl
L0lEQktleVJhbmdlLmNwcCcsCiAgICAgICAgICAgICAnc3RvcmFnZS9JREJLZXlSYW5nZS5oJywK
ICAgICAgICAgICAgICdzdG9yYWdlL0lEQktleVRyZWUuaCcsCmRpZmYgLS1naXQgYS9XZWJDb3Jl
L3N0b3JhZ2UvSURCS2V5UGF0aC5jcHAgYi9XZWJDb3JlL3N0b3JhZ2UvSURCS2V5UGF0aC5jcHAK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMC4uMDUxNmM0MGRlODA3ZTMwN2VjNmMzZDk0OTU5NDZmNzUyMzU2NTIxNQotLS0g
L2Rldi9udWxsCisrKyBiL1dlYkNvcmUvc3RvcmFnZS9JREJLZXlQYXRoLmNwcApAQCAtMCwwICsx
LDI3OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisg
KiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJJREJLZXlQYXRo
LmgiCisKKyNpZiBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKKworI2luY2x1ZGUgPHd0Zi9BU0NJ
SUNUeXBlLmg+CisjaW5jbHVkZSA8d3RmL2R0b2EuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgewor
CitjbGFzcyBJREJLZXlQYXRoTGV4ZXIgeworcHVibGljOgorICAgIGVudW0gVG9rZW5UeXBlIHsK
KyAgICAgICAgVG9rZW5MZWZ0QnJhY2tldCwKKyAgICAgICAgVG9rZW5SaWdodEJyYWNrZXQsCisg
ICAgICAgIFRva2VuSWRlbnRpZmllciwKKyAgICAgICAgVG9rZW5OdW1iZXIsCisgICAgICAgIFRv
a2VuRG90LAorICAgICAgICBUb2tlbkVuZCwKKyAgICAgICAgVG9rZW5FcnJvcgorICAgIH07CisK
KyAgICBleHBsaWNpdCBJREJLZXlQYXRoTGV4ZXIoY29uc3QgU3RyaW5nJiBzKQorICAgICAgICA6
IG1fc3RyaW5nKHMpCisgICAgICAgICwgbV9wdHIocy5jaGFyYWN0ZXJzKCkpCisgICAgICAgICwg
bV9lbmQocy5jaGFyYWN0ZXJzKCkgKyBzLmxlbmd0aCgpKQorICAgICAgICAsIG1fY3VycmVudFRv
a2VuVHlwZShUb2tlbkVycm9yKQorICAgIHsKKyAgICB9CisKKyAgICBUb2tlblR5cGUgY3VycmVu
dCgpIGNvbnN0CisgICAgeworICAgICAgcmV0dXJuIG1fY3VycmVudFRva2VuVHlwZTsKKyAgICB9
CisKKyAgICBUb2tlblR5cGUgbmV4dCgpCisgICAgeworICAgICAgICBtX2N1cnJlbnRUb2tlblR5
cGUgPSBsZXgobV9jdXJyZW50RWxlbWVudCk7CisgICAgICAgIHJldHVybiBtX2N1cnJlbnRUb2tl
blR5cGU7CisgICAgfQorCisgICAgY29uc3QgSURCS2V5UGF0aEVsZW1lbnQmIGN1cnJlbnRFbGVt
ZW50KCkKKyAgICB7CisgICAgICAgIHJldHVybiBtX2N1cnJlbnRFbGVtZW50OworICAgIH0KKwor
cHJpdmF0ZToKKyAgICBUb2tlblR5cGUgbGV4KElEQktleVBhdGhFbGVtZW50Jik7CisgICAgVG9r
ZW5UeXBlIGxleElkZW50aWZpZXIoSURCS2V5UGF0aEVsZW1lbnQmKTsKKyAgICBUb2tlblR5cGUg
bGV4TnVtYmVyKElEQktleVBhdGhFbGVtZW50Jik7CisgICAgSURCS2V5UGF0aEVsZW1lbnQgbV9j
dXJyZW50RWxlbWVudDsKKyAgICBTdHJpbmcgbV9zdHJpbmc7CisgICAgY29uc3QgVUNoYXIqIG1f
cHRyOworICAgIGNvbnN0IFVDaGFyKiBtX2VuZDsKKyAgICBUb2tlblR5cGUgbV9jdXJyZW50VG9r
ZW5UeXBlOworfTsKKworSURCS2V5UGF0aExleGVyOjpUb2tlblR5cGUgSURCS2V5UGF0aExleGVy
OjpsZXgoSURCS2V5UGF0aEVsZW1lbnQmIGVsZW1lbnQpCit7CisgICAgd2hpbGUgKG1fcHRyIDwg
bV9lbmQgJiYgaXNBU0NJSVNwYWNlKCptX3B0cikpCisgICAgICAgICsrbV9wdHI7CisKKyAgICBp
ZiAobV9wdHIgPj0gbV9lbmQpCisgICAgICAgIHJldHVybiBUb2tlbkVuZDsKKworICAgIEFTU0VS
VChtX3B0ciA8IG1fZW5kKTsKKyAgICBzd2l0Y2ggKCptX3B0cikgeworICAgIGNhc2UgJ1snOgor
ICAgICAgICArK21fcHRyOworICAgICAgICByZXR1cm4gVG9rZW5MZWZ0QnJhY2tldDsKKyAgICBj
YXNlICddJzoKKyAgICAgICAgKyttX3B0cjsKKyAgICAgICAgcmV0dXJuIFRva2VuUmlnaHRCcmFj
a2V0OworICAgIGNhc2UgJy4nOgorICAgICAgICArK21fcHRyOworICAgICAgICByZXR1cm4gVG9r
ZW5Eb3Q7CisgICAgY2FzZSAnMCc6CisgICAgY2FzZSAnMSc6CisgICAgY2FzZSAnMic6CisgICAg
Y2FzZSAnMyc6CisgICAgY2FzZSAnNCc6CisgICAgY2FzZSAnNSc6CisgICAgY2FzZSAnNic6Cisg
ICAgY2FzZSAnNyc6CisgICAgY2FzZSAnOCc6CisgICAgY2FzZSAnOSc6CisgICAgICAgIHJldHVy
biBsZXhOdW1iZXIoZWxlbWVudCk7CisgICAgZGVmYXVsdDoKKyAgICAgICAgcmV0dXJuIGxleElk
ZW50aWZpZXIoZWxlbWVudCk7CisgICAgfQorICAgIHJldHVybiBUb2tlbkVycm9yOworfQorCitz
dGF0aWMgaW5saW5lIGJvb2wgaXNTYWZlSWRlbnRpZmllclN0YXJ0Q2hhcmFjdGVyKFVDaGFyIGMp
Cit7CisgICAgcmV0dXJuIGlzQVNDSUlBbHBoYShjKSB8fCAoYyA9PSAnXycpIHx8IChjID09ICck
Jyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgYm9vbCBpc1NhZmVJZGVudGlmaWVyQ2hhcmFjdGVyKFVD
aGFyIGMpCit7CisgICAgcmV0dXJuIGlzQVNDSUlBbHBoYW51bWVyaWMoYykgfHwgKGMgPT0gJ18n
KSB8fCAoYyA9PSAnJCcpOworfQorCitJREJLZXlQYXRoTGV4ZXI6OlRva2VuVHlwZSBJREJLZXlQ
YXRoTGV4ZXI6OmxleElkZW50aWZpZXIoSURCS2V5UGF0aEVsZW1lbnQmIGVsZW1lbnQpCit7Cisg
ICAgY29uc3QgVUNoYXIqIHN0YXJ0ID0gbV9wdHI7CisgICAgaWYgKG1fcHRyIDwgbV9lbmQgJiYg
aXNTYWZlSWRlbnRpZmllclN0YXJ0Q2hhcmFjdGVyKCptX3B0cikpCisgICAgICAgICsrbV9wdHI7
CisgICAgZWxzZQorICAgICAgICByZXR1cm4gVG9rZW5FcnJvcjsKKworICAgIHdoaWxlIChtX3B0
ciA8IG1fZW5kICYmIGlzU2FmZUlkZW50aWZpZXJDaGFyYWN0ZXIoKm1fcHRyKSkKKyAgICAgICAg
KyttX3B0cjsKKworICAgIGVsZW1lbnQudHlwZSA9IElEQktleVBhdGhFbGVtZW50OjpJc05hbWVk
OworICAgIGVsZW1lbnQuaWRlbnRpZmllciA9IFN0cmluZyhzdGFydCwgbV9wdHIgLSBzdGFydCk7
CisgICAgcmV0dXJuIFRva2VuSWRlbnRpZmllcjsKK30KKworSURCS2V5UGF0aExleGVyOjpUb2tl
blR5cGUgSURCS2V5UGF0aExleGVyOjpsZXhOdW1iZXIoSURCS2V5UGF0aEVsZW1lbnQmIGVsZW1l
bnQpCit7CisgICAgaWYgKG1fcHRyID49IG1fZW5kKQorICAgICAgICByZXR1cm4gVG9rZW5FcnJv
cjsKKworICAgIGNvbnN0IFVDaGFyKiBzdGFydCA9IG1fcHRyOworICAgIC8vIFswLTldKgorICAg
IHdoaWxlIChtX3B0ciA8IG1fZW5kICYmIGlzQVNDSUlEaWdpdCgqbV9wdHIpKQorICAgICAgICAr
K21fcHRyOworCisgICAgU3RyaW5nIG51bWJlckFzU3RyaW5nOworICAgIG51bWJlckFzU3RyaW5n
ID0gU3RyaW5nKHN0YXJ0LCBtX3B0ciAtIHN0YXJ0KTsKKyAgICBib29sIG9rID0gZmFsc2U7Cisg
ICAgaW50IG51bWJlciA9IG51bWJlckFzU3RyaW5nLnRvSW50U3RyaWN0KCZvayk7CisgICAgaWYg
KCFvaykKKyAgICAgICAgcmV0dXJuIFRva2VuRXJyb3I7CisKKyAgICBlbGVtZW50LnR5cGUgPSBJ
REJLZXlQYXRoRWxlbWVudDo6SXNJbmRleGVkOworICAgIGVsZW1lbnQuaW5kZXggPSBudW1iZXI7
CisgICAgcmV0dXJuIFRva2VuTnVtYmVyOworfQorCit2b2lkIElEQlBhcnNlS2V5UGF0aChjb25z
dCBTdHJpbmcmIGtleVBhdGgsIFZlY3RvcjxJREJLZXlQYXRoRWxlbWVudD4qIGVsZW1lbnRzLCBJ
REJLZXlQYXRoUGFyc2VFcnJvciogZXJyb3IpCit7CisgICAgLy8gVGhpcyBpcyBhIHNpbXBsaWZp
ZWQgcGFyc2VyIGxvb3NlbHkgYmFzZWQgb24gTGl0ZXJhbFBhcnNlci4KKyAgICAvLyBBbiBJREJL
ZXlQYXRoIGlzIGRlZmluZWQgYXMgYSBzZXF1ZW5jZSBvZjoKKyAgICAvLyBpZGVudGlmaWVyQXsu
aWRlbnRpZmllckJ7W251bWVyaWNfdmFsdWVdfQorICAgIC8vIHdoZXJlICJ7fSIgcmVwcmVzZW50
cyBhbiBvcHRpb25hbCBwYXJ0CisgICAgLy8gVGhlIGJhc2ljIHN0YXRlIG1hY2hpbmUgaXM6Cisg
ICAgLy8gU3RhcnQgPT4ge0lkZW50aWZpZXIsIEFycmF5fQorICAgIC8vIElkZW50aWZpZXIgPT4g
e0RvdCwgQXJyYXksIEVuZH0KKyAgICAvLyBBcnJheSA9PiB7U3RhcnQsIERvdCwgRW5kfQorICAg
IC8vIERvdCA9PiB7SWRlbnRpZmllcn0KKyAgICAvLyBJdCBiYWlscyBvdXQgYXMgc29vbiBhcyBp
dCBmaW5kcyBhbiBlcnJvciwgYnV0IGRvZXNuJ3QgZGlzY2FyZCB0aGUgYml0cyBpdCBtYW5hZ2Vk
IHRvIHBhcnNlLgorICAgIGVudW0gUGFyc2VyU3RhdGUgeyBTdGFydCwgSWRlbnRpZmllciwgQXJy
YXksIERvdCwgRW5kIH07CisKKyAgICBJREJLZXlQYXRoTGV4ZXIgbGV4ZXIoa2V5UGF0aCk7Cisg
ICAgbGV4ZXIubmV4dCgpOworICAgIFBhcnNlclN0YXRlIHN0YXRlID0gU3RhcnQ7CisKKyAgICB3
aGlsZSAoMSkgeworICAgICAgICBzd2l0Y2ggKHN0YXRlKSB7CisgICAgICAgIGNhc2UgU3RhcnQg
OiB7CisgICAgICAgICAgICBJREJLZXlQYXRoTGV4ZXI6OlRva2VuVHlwZSB0b2tlblR5cGUgPSBs
ZXhlci5jdXJyZW50KCk7CisgICAgICAgICAgICBpZiAodG9rZW5UeXBlID09IElEQktleVBhdGhM
ZXhlcjo6VG9rZW5JZGVudGlmaWVyKQorICAgICAgICAgICAgICAgIHN0YXRlID0gSWRlbnRpZmll
cjsKKyAgICAgICAgICAgIGVsc2UgaWYgKHRva2VuVHlwZSA9PSBJREJLZXlQYXRoTGV4ZXI6OlRv
a2VuTGVmdEJyYWNrZXQpCisgICAgICAgICAgICAgICAgc3RhdGUgPSBBcnJheTsKKyAgICAgICAg
ICAgIGVsc2UgaWYgKHRva2VuVHlwZSA9PSBJREJLZXlQYXRoTGV4ZXI6OlRva2VuRW5kKQorICAg
ICAgICAgICAgICAgIHN0YXRlID0gRW5kOworICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAg
ICAgICplcnJvciA9IElEQktleVBhdGhQYXJzZUVycm9yU3RhcnQ7CisgICAgICAgICAgICAgIHJl
dHVybjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAg
ICAgIGNhc2UgSWRlbnRpZmllciA6IHsKKyAgICAgICAgICAgIElEQktleVBhdGhMZXhlcjo6VG9r
ZW5UeXBlIHRva2VuVHlwZSA9IGxleGVyLmN1cnJlbnQoKTsKKyAgICAgICAgICAgIEFTU0VSVCh0
b2tlblR5cGUgPT0gSURCS2V5UGF0aExleGVyOjpUb2tlbklkZW50aWZpZXIpOworCisgICAgICAg
ICAgICBJREJLZXlQYXRoRWxlbWVudCBlbGVtZW50ID0gbGV4ZXIuY3VycmVudEVsZW1lbnQoKTsK
KyAgICAgICAgICAgIEFTU0VSVChlbGVtZW50LnR5cGUgPT0gSURCS2V5UGF0aEVsZW1lbnQ6Oklz
TmFtZWQpOworICAgICAgICAgICAgZWxlbWVudHMtPmFwcGVuZChlbGVtZW50KTsKKworICAgICAg
ICAgICAgdG9rZW5UeXBlID0gbGV4ZXIubmV4dCgpOworICAgICAgICAgICAgaWYgKHRva2VuVHlw
ZSA9PSBJREJLZXlQYXRoTGV4ZXI6OlRva2VuRG90KQorICAgICAgICAgICAgICAgIHN0YXRlID0g
RG90OworICAgICAgICAgICAgZWxzZSBpZiAodG9rZW5UeXBlID09IElEQktleVBhdGhMZXhlcjo6
VG9rZW5MZWZ0QnJhY2tldCkKKyAgICAgICAgICAgICAgICBzdGF0ZSA9IEFycmF5OworICAgICAg
ICAgICAgZWxzZSBpZiAodG9rZW5UeXBlID09IElEQktleVBhdGhMZXhlcjo6VG9rZW5FbmQpCisg
ICAgICAgICAgICAgICAgc3RhdGUgPSBFbmQ7CisgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAg
ICAgICAgICAqZXJyb3IgPSBJREJLZXlQYXRoUGFyc2VFcnJvcklkZW50aWZpZXI7CisgICAgICAg
ICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgIH0KKyAgICAgICAgY2FzZSBBcnJheSA6IHsKKyAgICAgICAgICAgIElEQktleVBhdGhMZXhl
cjo6VG9rZW5UeXBlIHRva2VuVHlwZSA9IGxleGVyLmN1cnJlbnQoKTsKKyAgICAgICAgICAgIEFT
U0VSVCh0b2tlblR5cGUgPT0gSURCS2V5UGF0aExleGVyOjpUb2tlbkxlZnRCcmFja2V0KTsKKwor
ICAgICAgICAgICAgdG9rZW5UeXBlID0gbGV4ZXIubmV4dCgpOworICAgICAgICAgICAgaWYgKHRv
a2VuVHlwZSAhPSBJREJLZXlQYXRoTGV4ZXI6OlRva2VuTnVtYmVyKSB7CisgICAgICAgICAgICAg
ICAgKmVycm9yID0gSURCS2V5UGF0aFBhcnNlRXJyb3JBcnJheUluZGV4OworICAgICAgICAgICAg
ICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgQVNTRVJUKHRva2VuVHlw
ZSA9PSBJREJLZXlQYXRoTGV4ZXI6OlRva2VuTnVtYmVyKTsKKyAgICAgICAgICAgIElEQktleVBh
dGhFbGVtZW50IGVsZW1lbnQgPSBsZXhlci5jdXJyZW50RWxlbWVudCgpOworICAgICAgICAgICAg
QVNTRVJUKGVsZW1lbnQudHlwZSA9PSBJREJLZXlQYXRoRWxlbWVudDo6SXNJbmRleGVkKTsKKyAg
ICAgICAgICAgIGVsZW1lbnRzLT5hcHBlbmQoZWxlbWVudCk7CisKKyAgICAgICAgICAgIHRva2Vu
VHlwZSA9IGxleGVyLm5leHQoKTsKKyAgICAgICAgICAgIGlmICh0b2tlblR5cGUgIT0gSURCS2V5
UGF0aExleGVyOjpUb2tlblJpZ2h0QnJhY2tldCkgeworICAgICAgICAgICAgICAgICplcnJvciA9
IElEQktleVBhdGhQYXJzZUVycm9yQXJyYXlJbmRleDsKKyAgICAgICAgICAgICAgICByZXR1cm47
CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHRva2VuVHlwZSA9IGxleGVyLm5leHQoKTsK
KyAgICAgICAgICAgIGlmICh0b2tlblR5cGUgPT0gSURCS2V5UGF0aExleGVyOjpUb2tlbkRvdCkK
KyAgICAgICAgICAgICAgICBzdGF0ZSA9IERvdDsKKyAgICAgICAgICAgIGVsc2UgaWYgKHRva2Vu
VHlwZSA9PSBJREJLZXlQYXRoTGV4ZXI6OlRva2VuTGVmdEJyYWNrZXQpCisgICAgICAgICAgICAg
ICAgc3RhdGUgPSBBcnJheTsKKyAgICAgICAgICAgIGVsc2UgaWYgKHRva2VuVHlwZSA9PSBJREJL
ZXlQYXRoTGV4ZXI6OlRva2VuRW5kKQorICAgICAgICAgICAgICAgIHN0YXRlID0gRW5kOworICAg
ICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgKmVycm9yID0gSURCS2V5UGF0aFBhcnNl
RXJyb3JBZnRlckFycmF5OworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGNhc2UgRG90OiB7CisgICAg
ICAgICAgICBJREJLZXlQYXRoTGV4ZXI6OlRva2VuVHlwZSB0b2tlblR5cGUgPSBsZXhlci5jdXJy
ZW50KCk7CisgICAgICAgICAgICBBU1NFUlQodG9rZW5UeXBlID09IElEQktleVBhdGhMZXhlcjo6
VG9rZW5Eb3QpOworCisgICAgICAgICAgICB0b2tlblR5cGUgPSBsZXhlci5uZXh0KCk7CisgICAg
ICAgICAgICBpZiAodG9rZW5UeXBlICE9IElEQktleVBhdGhMZXhlcjo6VG9rZW5JZGVudGlmaWVy
KSB7CisgICAgICAgICAgICAgICAgKmVycm9yID0gSURCS2V5UGF0aFBhcnNlRXJyb3JEb3Q7Cisg
ICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBzdGF0
ZSA9IElkZW50aWZpZXI7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBj
YXNlIEVuZDogeworICAgICAgICAgICAgKmVycm9yID0gSURCS2V5UGF0aFBhcnNlRXJyb3JOb25l
OworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIH0KKyAgICB9Cit9CisK
K30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShJTkRFWEVEX0RBVEFC
QVNFKQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9zdG9yYWdlL0lEQktleVBhdGguaCBiL1dlYkNvcmUv
c3RvcmFnZS9JREJLZXlQYXRoLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZGEwNzEyOTc5NDczZTgwODA1YzNlODY1
ODQ4YTQ2ZDRiY2FiZjJhYwotLS0gL2Rldi9udWxsCisrKyBiL1dlYkNvcmUvc3RvcmFnZS9JREJL
ZXlQYXRoLmgKQEAgLTAsMCArMSw2NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBHb29n
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFT
IElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgSURCS2V5UGF0aF9oCisj
ZGVmaW5lIElEQktleVBhdGhfaAorCisjaWYgRU5BQkxFKElOREVYRURfREFUQUJBU0UpCisKKyNp
bmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgorI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+Cisj
aW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgor
CituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3N0cnVjdCBJREJLZXlQYXRoRWxlbWVudCB7CisgICAg
ZW51bSBUeXBlIHsKKyAgICAgICAgSXNJbmRleGVkLAorICAgICAgICBJc05hbWVkLAorICAgIH07
CisKKyAgICBUeXBlIHR5cGU7CisgICAgaW50IGluZGV4OworICAgIFN0cmluZyBpZGVudGlmaWVy
OworfTsKKworZW51bSBJREJLZXlQYXRoUGFyc2VFcnJvciB7CisgICAgSURCS2V5UGF0aFBhcnNl
RXJyb3JOb25lLAorICAgIElEQktleVBhdGhQYXJzZUVycm9yU3RhcnQsCisgICAgSURCS2V5UGF0
aFBhcnNlRXJyb3JJZGVudGlmaWVyLAorICAgIElEQktleVBhdGhQYXJzZUVycm9yQXJyYXlJbmRl
eCwKKyAgICBJREJLZXlQYXRoUGFyc2VFcnJvckFmdGVyQXJyYXksCisgICAgSURCS2V5UGF0aFBh
cnNlRXJyb3JEb3QsCit9OworCit2b2lkIElEQlBhcnNlS2V5UGF0aChjb25zdCBTdHJpbmcmLCBW
ZWN0b3I8SURCS2V5UGF0aEVsZW1lbnQ+KiwgSURCS2V5UGF0aFBhcnNlRXJyb3IqKTsKKworfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYKKworI2VuZGlmIC8vIElEQktleVBhdGhfaApk
aWZmIC0tZ2l0IGEvV2ViQ29yZS9zdG9yYWdlL0luZGV4ZWREYXRhYmFzZVJlcXVlc3QuY3BwIGIv
V2ViQ29yZS9zdG9yYWdlL0luZGV4ZWREYXRhYmFzZVJlcXVlc3QuY3BwCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmMx
YzU1MTU3N2YxMDEyZmY0YTIyY2QzMDBhYjY2YjgzMWViNGEwNjgKLS0tIC9kZXYvbnVsbAorKysg
Yi9XZWJDb3JlL3N0b3JhZ2UvSW5kZXhlZERhdGFiYXNlUmVxdWVzdC5jcHAKQEAgLTAsMCArMSw3
MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoK
KyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogMy4gIE5laXRoZXIgdGhlIG5hbWUgb2YgQXBw
bGUgQ29tcHV0ZXIsIEluYy4gKCJBcHBsZSIpIG5vciB0aGUgbmFtZXMgb2YKKyAqICAgICBpdHMg
Y29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBk
ZXJpdmVkCisgKiAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Ig
d3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJ
TVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
CisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor
ICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJJbmRleGVkRGF0YWJhc2VSZXF1
ZXN0LmgiCisKKyNpbmNsdWRlICJEb2N1bWVudC5oIgorI2luY2x1ZGUgIkV4Y2VwdGlvbkNvZGUu
aCIKKyNpbmNsdWRlICJGcmFtZS5oIgorI2luY2x1ZGUgIklEQkRhdGFiYXNlLmgiCisjaW5jbHVk
ZSAiSURCS2V5UmFuZ2UuaCIKKyNpbmNsdWRlICJJREJSZXF1ZXN0LmgiCisjaW5jbHVkZSAiSW5k
ZXhlZERhdGFiYXNlLmgiCisKKyNpZiBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKKworbmFtZXNw
YWNlIFdlYkNvcmUgeworCitJbmRleGVkRGF0YWJhc2VSZXF1ZXN0OjpJbmRleGVkRGF0YWJhc2VS
ZXF1ZXN0KEluZGV4ZWREYXRhYmFzZSogaW5kZXhlZERhdGFiYXNlKQorICAgIDogbV9pbmRleGVk
RGF0YWJhc2UoaW5kZXhlZERhdGFiYXNlKQoreworICAgIC8vIFdlIHBhc3MgYSByZWZlcmVuY2Ug
dG8gdGhpcyBvYmplY3QgYmVmb3JlIGl0IGNhbiBiZSBhZG9wdGVkLgorICAgIHJlbGF4QWRvcHRp
b25SZXF1aXJlbWVudCgpOworfQorCitJbmRleGVkRGF0YWJhc2VSZXF1ZXN0Ojp+SW5kZXhlZERh
dGFiYXNlUmVxdWVzdCgpCit7Cit9CisKK1Bhc3NSZWZQdHI8SURCUmVxdWVzdD4gSW5kZXhlZERh
dGFiYXNlUmVxdWVzdDo6b3BlbihTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBjb25z
dCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cmluZyYgZGVzY3JpcHRpb24pCit7CisgICAgaWYgKCFj
b250ZXh0LT5pc0RvY3VtZW50KCkpIHsKKyAgICAgICAgLy8gRklYTUU6IG1ha2UgdGhpcyB3b3Jr
IHdpdGggd29ya2Vycy4KKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorCisgICAgRG9jdW1lbnQq
IGRvY3VtZW50ID0gc3RhdGljX2Nhc3Q8RG9jdW1lbnQqPihjb250ZXh0KTsKKyAgICBpZiAoIWRv
Y3VtZW50LT5mcmFtZSgpKQorICAgICAgICByZXR1cm4gMDsKKworICAgIFJlZlB0cjxJREJSZXF1
ZXN0PiByZXF1ZXN0ID0gSURCUmVxdWVzdDo6Y3JlYXRlKGRvY3VtZW50LCBJREJBbnk6OmNyZWF0
ZSh0aGlzKSk7CisgICAgbV9pbmRleGVkRGF0YWJhc2UtPm9wZW4obmFtZSwgZGVzY3JpcHRpb24s
IHJlcXVlc3QsIGRvY3VtZW50LT5zZWN1cml0eU9yaWdpbigpLCBkb2N1bWVudC0+ZnJhbWUoKSk7
CisgICAgcmV0dXJuIHJlcXVlc3Q7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2Vu
ZGlmIC8vIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9zdG9y
YWdlL0luZGV4ZWREYXRhYmFzZVJlcXVlc3QuaCBiL1dlYkNvcmUvc3RvcmFnZS9JbmRleGVkRGF0
YWJhc2VSZXF1ZXN0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNTdmOGE3ODViYzliMGE2YzlkYjgyMjU5ZGEyNGMz
OTliZGU5M2VkZgotLS0gL2Rldi9udWxsCisrKyBiL1dlYkNvcmUvc3RvcmFnZS9JbmRleGVkRGF0
YWJhc2VSZXF1ZXN0LmgKQEAgLTAsMCArMSw2OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
MCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICog
My4gIE5laXRoZXIgdGhlIG5hbWUgb2YgQXBwbGUgQ29tcHV0ZXIsIEluYy4gKCJBcHBsZSIpIG5v
ciB0aGUgbmFtZXMgb2YKKyAqICAgICBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVu
ZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCisgKiAgICAgZnJvbSB0aGlzIHNvZnR3
YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFT
IElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisjaWZuZGVmIEluZGV4ZWREYXRhYmFzZVJl
cXVlc3RfaAorI2RlZmluZSBJbmRleGVkRGF0YWJhc2VSZXF1ZXN0X2gKKworI2luY2x1ZGUgIkV4
Y2VwdGlvbkNvZGUuaCIKKyNpbmNsdWRlICJJbmRleGVkRGF0YWJhc2UuaCIKKyNpbmNsdWRlICJQ
bGF0Zm9ybVN0cmluZy5oIgorI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CisjaW5jbHVkZSA8
d3RmL1JlZkNvdW50ZWQuaD4KKyNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CisKKyNpZiBFTkFCTEUo
SU5ERVhFRF9EQVRBQkFTRSkKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBJREJLZXk7
CitjbGFzcyBJREJLZXlSYW5nZTsKK2NsYXNzIElEQlJlcXVlc3Q7CitjbGFzcyBJbmRleGVkRGF0
YWJhc2U7CitjbGFzcyBTY3JpcHRFeGVjdXRpb25Db250ZXh0OworCitjbGFzcyBJbmRleGVkRGF0
YWJhc2VSZXF1ZXN0IDogcHVibGljIFJlZkNvdW50ZWQ8SW5kZXhlZERhdGFiYXNlUmVxdWVzdD4g
eworcHVibGljOgorICAgIHN0YXRpYyBQYXNzUmVmUHRyPEluZGV4ZWREYXRhYmFzZVJlcXVlc3Q+
IGNyZWF0ZShJbmRleGVkRGF0YWJhc2UqIGluZGV4ZWREYXRhYmFzZSkKKyAgICB7CisgICAgICAg
IHJldHVybiBhZG9wdFJlZihuZXcgSW5kZXhlZERhdGFiYXNlUmVxdWVzdChpbmRleGVkRGF0YWJh
c2UpKTsKKyAgICB9CisgICAgfkluZGV4ZWREYXRhYmFzZVJlcXVlc3QoKTsKKworICAgIFBhc3NS
ZWZQdHI8SURCUmVxdWVzdD4gb3BlbihTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgY29uc3QgU3Ry
aW5nJiBuYW1lLCBjb25zdCBTdHJpbmcmIGRlc2NyaXB0aW9uKTsKKworcHJpdmF0ZToKKyAgICBJ
bmRleGVkRGF0YWJhc2VSZXF1ZXN0KEluZGV4ZWREYXRhYmFzZSopOworCisgICAgUmVmUHRyPElu
ZGV4ZWREYXRhYmFzZT4gbV9pbmRleGVkRGF0YWJhc2U7Cit9OworCit9IC8vIG5hbWVzcGFjZSBX
ZWJDb3JlCisKKyNlbmRpZgorCisjZW5kaWYgLy8gSW5kZXhlZERhdGFiYXNlUmVxdWVzdF9oCisK
ZGlmZiAtLWdpdCBhL1dlYkNvcmUvc3RvcmFnZS9JbmRleGVkRGF0YWJhc2VSZXF1ZXN0LmlkbCBi
L1dlYkNvcmUvc3RvcmFnZS9JbmRleGVkRGF0YWJhc2VSZXF1ZXN0LmlkbApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5l
NmVlNDQ2Mjc4Zjc5NTU0MThmZjgzNWRhMjM4ZjkxYTk5MGYxMTY4Ci0tLSAvZGV2L251bGwKKysr
IGIvV2ViQ29yZS9zdG9yYWdlL0luZGV4ZWREYXRhYmFzZVJlcXVlc3QuaWRsCkBAIC0wLDAgKzEs
MzQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
CisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICog
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKyAqLworCittb2R1bGUgc3RvcmFnZSB7CisKKyAgICBpbnRlcmZhY2UgWworICAgICAg
ICBDb25kaXRpb25hbD1JTkRFWEVEX0RBVEFCQVNFCisgICAgXSBJbmRleGVkRGF0YWJhc2VSZXF1
ZXN0IHsKKyAgICAgICAgW0NhbGxXaXRoPVNjcmlwdEV4ZWN1dGlvbkNvbnRleHRdIElEQlJlcXVl
c3Qgb3BlbihpbiBET01TdHJpbmcgbmFtZSwgaW4gRE9NU3RyaW5nIGRlc2NyaXB0aW9uKTsKKyAg
ICB9OworCit9CmRpZmYgLS1naXQgYS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nIGIvV2ViS2l0
L2Nocm9taXVtL0NoYW5nZUxvZwppbmRleCA1OGJhMjdkYTU1YTJmOGRkY2Y0ODQ4M2RhOGRjN2Nm
MjA1MmNjY2I2Li5mNWU4OTUzMDA2ODU4ODlkZmMzYWMxNmNkNDZlYTM4ZDJjMmYxZDQwIDEwMDY0
NAotLS0gYS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCisrKyBiL1dlYktpdC9jaHJvbWl1bS9D
aGFuZ2VMb2cKQEAgLTEsMyArMSwyMCBAQAorMjAxMC0wNy0yOCAgTWFyY3VzIEJ1bGFjaCAgPGJ1
bGFjaEBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgSW1wbGVtZW50IElEQktleVBhdGggcGFyc2VyLgorICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDI5NzYKKworICAgICAgICBJREJLZXlQ
YXRoIGlzIGFuIGludGVybmFsIGNsYXNzLCBleHBvc2VkIG9ubHkgZm9yIHVuaXQgdGVzdHMgZm9y
IG5vdy4KKyAgICAgICAgSXQnbGwgYWxsb3cgaW5kZXhlZCBkYXRhYmFzZSBpbXBsZW1lbnRhdGlv
biB0byB0cmF2ZXJzZSBhIGdpdmVuIGtleSBwYXRoIGFuZCBvYnRhaW4gdGhlIGNvcnJlc3BvbmRp
bmcgcHJvcGVydGllcworICAgICAgICBmcm9tIGEgU2VyaWFsaXplZFNjcmlwdFZhbHVlLgorCisg
ICAgICAgICogV2ViS2l0Lmd5cDoKKyAgICAgICAgKiB0ZXN0cy9JREJLZXlQYXRoVGVzdC5jcHA6
IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6RXhwZWN0ZWRUb2tlbjo6RXhwZWN0ZWRUb2tlbik6
CisgICAgICAgIChXZWJDb3JlOjpjaGVja0tleVBhdGgpOgorICAgICAgICAoV2ViQ29yZTo6VEVT
VCk6CisKIDIwMTAtMDctMzAgIEFuZHJlaSBQb3Blc2N1ICA8YW5kcmVpcEBkaGNwLTE3Mi0xNi0x
NC0xMi5sb24uY29ycC5nb29nbGUuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IEplcmVteSBP
cmxvdy4KZGlmZiAtLWdpdCBhL1dlYktpdC9jaHJvbWl1bS9XZWJLaXQuZ3lwIGIvV2ViS2l0L2No
cm9taXVtL1dlYktpdC5neXAKaW5kZXggOWRhODVjZDdjYTM4YzUwNzI3ODEzMTU4MDdlYzM5NWNk
YjViZDI0NC4uZDc5ZDRkOTgyYTdlMGUyMjQ2NjNkMzEwMmZkYjg0ZTIyMzg4NGMzNyAxMDA2NDQK
LS0tIGEvV2ViS2l0L2Nocm9taXVtL1dlYktpdC5neXAKKysrIGIvV2ViS2l0L2Nocm9taXVtL1dl
YktpdC5neXAKQEAgLTY5Myw2ICs2OTMsNyBAQAogICAgICAgICAgICAgICAgICAgICBdLAogICAg
ICAgICAgICAgICAgICAgICAnc291cmNlcyc6IFsKICAgICAgICAgICAgICAgICAgICAgICAgICd0
ZXN0cy9EcmFnSW1hZ2VUZXN0LmNwcCcsCisgICAgICAgICAgICAgICAgICAgICAgICAndGVzdHMv
SURCS2V5UGF0aFRlc3QuY3BwJywKICAgICAgICAgICAgICAgICAgICAgICAgICd0ZXN0cy9LZXli
b2FyZFRlc3QuY3BwJywKICAgICAgICAgICAgICAgICAgICAgICAgICd0ZXN0cy9LVVJMVGVzdC5j
cHAnLAogICAgICAgICAgICAgICAgICAgICAgICAgJ3Rlc3RzL1J1bkFsbFRlc3RzLmNwcCcsCmRp
ZmYgLS1naXQgYS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvSURCS2V5UGF0aFRlc3QuY3BwIGIvV2Vi
S2l0L2Nocm9taXVtL3Rlc3RzL0lEQktleVBhdGhUZXN0LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi43YmY4NWMy
NTQ4MDQ1NzVkMGEzMmU4MTUzMDE0NWI1MzA4NGQ3OTE5Ci0tLSAvZGV2L251bGwKKysrIGIvV2Vi
S2l0L2Nocm9taXVtL3Rlc3RzL0lEQktleVBhdGhUZXN0LmNwcApAQCAtMCwwICsxLDE4OSBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEu
ICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJ
TVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
CisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor
ICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJJREJLZXlQYXRoLmgiCisKKyNp
bmNsdWRlIDxndGVzdC9ndGVzdC5oPgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKworI2lmIEVO
QUJMRShJTkRFWEVEX0RBVEFCQVNFKQorCit1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKKworbmFt
ZXNwYWNlIHsKKworSURCS2V5UGF0aEVsZW1lbnQgRXhwZWN0ZWRUb2tlbihjb25zdCBTdHJpbmcm
IGlkZW50aWZpZXIsIGJvb2wgaXNJbmRleGVkLCBpbnQgaW5kZXgpCit7CisgICAgSURCS2V5UGF0
aEVsZW1lbnQgZXhwZWN0ZWQ7CisgICAgaWYgKGlzSW5kZXhlZCkgeworICAgICAgICBleHBlY3Rl
ZC50eXBlID0gSURCS2V5UGF0aEVsZW1lbnQ6OklzSW5kZXhlZDsKKyAgICAgICAgZXhwZWN0ZWQu
aW5kZXggPSBpbmRleDsKKyAgICB9IGVsc2UgeworICAgICAgICBleHBlY3RlZC50eXBlID0gSURC
S2V5UGF0aEVsZW1lbnQ6OklzTmFtZWQ7CisgICAgICAgIGV4cGVjdGVkLmlkZW50aWZpZXIgPSBp
ZGVudGlmaWVyOworICAgIH0KKyAgICByZXR1cm4gZXhwZWN0ZWQ7Cit9CisKK3ZvaWQgY2hlY2tL
ZXlQYXRoKGNvbnN0IFN0cmluZyYga2V5UGF0aCwgY29uc3QgVmVjdG9yPElEQktleVBhdGhFbGVt
ZW50PiYgZXhwZWN0ZWQsIGludCBwYXJzZXJFcnJvcikKK3sKKworICAgIElEQktleVBhdGhQYXJz
ZUVycm9yIGVycm9yOworICAgIFZlY3RvcjxJREJLZXlQYXRoRWxlbWVudD4gaWRiS2V5UGF0aEVs
ZW1lbnRzOworICAgIElEQlBhcnNlS2V5UGF0aChrZXlQYXRoLCAmaWRiS2V5UGF0aEVsZW1lbnRz
LCAmZXJyb3IpOworICAgIEFTU0VSVF9FUShwYXJzZXJFcnJvciwgZXJyb3IpOworICAgIGlmIChl
cnJvciAhPSBJREJLZXlQYXRoUGFyc2VFcnJvck5vbmUpCisgICAgICAgIHJldHVybjsKKyAgICBB
U1NFUlRfRVEoZXhwZWN0ZWQuc2l6ZSgpLCBpZGJLZXlQYXRoRWxlbWVudHMuc2l6ZSgpKTsKKyAg
ICBmb3IgKGludCBpID0gMDsgaSA8IGV4cGVjdGVkLnNpemUoKTsgKytpKSB7CisgICAgICAgIEFT
U0VSVF9UUlVFKGV4cGVjdGVkW2ldLnR5cGUgPT0gaWRiS2V5UGF0aEVsZW1lbnRzW2ldLnR5cGUp
IDw8IGk7CisgICAgICAgIGlmIChleHBlY3RlZFtpXS50eXBlID09IElEQktleVBhdGhFbGVtZW50
OjpJc0luZGV4ZWQpCisgICAgICAgICAgQVNTRVJUX0VRKGV4cGVjdGVkW2ldLmluZGV4LCBpZGJL
ZXlQYXRoRWxlbWVudHNbaV0uaW5kZXgpIDw8IGk7CisgICAgICAgIGVsc2UgaWYgKGV4cGVjdGVk
W2ldLnR5cGUgPT0gSURCS2V5UGF0aEVsZW1lbnQ6OklzTmFtZWQpCisgICAgICAgICAgQVNTRVJU
X1RSVUUoZXhwZWN0ZWRbaV0uaWRlbnRpZmllciA9PSBpZGJLZXlQYXRoRWxlbWVudHNbaV0uaWRl
bnRpZmllcikgPDwgaTsKKyAgICAgICAgZWxzZQorICAgICAgICAgIEFTU0VSVF9UUlVFKGZhbHNl
KSA8PCAiSW52YWxpZCBJREJLZXlQYXRoRWxlbWVudCB0eXBlIjsKKyAgICB9Cit9CisKK1RFU1Qo
SURCS2V5UGF0aFRlc3QsIFZhbGlkS2V5UGF0aDApCit7CisgICAgVmVjdG9yPElEQktleVBhdGhF
bGVtZW50PiBleHBlY3RlZDsKKyAgICBTdHJpbmcga2V5UGF0aCgiZm9vLmJhci56b28iKTsKKyAg
ICBleHBlY3RlZC5hcHBlbmQoRXhwZWN0ZWRUb2tlbigiZm9vIiwgZmFsc2UsIDApKTsKKyAgICBl
eHBlY3RlZC5hcHBlbmQoRXhwZWN0ZWRUb2tlbigiYmFyIiwgZmFsc2UsIDApKTsKKyAgICBleHBl
Y3RlZC5hcHBlbmQoRXhwZWN0ZWRUb2tlbigiem9vIiwgZmFsc2UsIDApKTsKKyAgICBjaGVja0tl
eVBhdGgoa2V5UGF0aCwgZXhwZWN0ZWQsIDApOworfQorCitURVNUKElEQktleVBhdGhUZXN0LCBW
YWxpZEtleVBhdGgxKQoreworICAgIFZlY3RvcjxJREJLZXlQYXRoRWxlbWVudD4gZXhwZWN0ZWQ7
CisgICAgU3RyaW5nIGtleVBhdGgoImFbMzRdWzIwXS5mb29bMl0uYmFyIik7CisgICAgZXhwZWN0
ZWQuYXBwZW5kKEV4cGVjdGVkVG9rZW4oImEiLCBmYWxzZSwgMCkpOworICAgIGV4cGVjdGVkLmFw
cGVuZChFeHBlY3RlZFRva2VuKFN0cmluZygpLCB0cnVlLCAzNCkpOworICAgIGV4cGVjdGVkLmFw
cGVuZChFeHBlY3RlZFRva2VuKFN0cmluZygpLCB0cnVlLCAyMCkpOworICAgIGV4cGVjdGVkLmFw
cGVuZChFeHBlY3RlZFRva2VuKCJmb28iLCBmYWxzZSwgMCkpOworICAgIGV4cGVjdGVkLmFwcGVu
ZChFeHBlY3RlZFRva2VuKFN0cmluZygpLCB0cnVlLCAyKSk7CisgICAgZXhwZWN0ZWQuYXBwZW5k
KEV4cGVjdGVkVG9rZW4oImJhciIsIGZhbHNlLCAwKSk7CisgICAgY2hlY2tLZXlQYXRoKGtleVBh
dGgsIGV4cGVjdGVkLCAwKTsKK30KKworVEVTVChJREJLZXlQYXRoVGVzdCwgVmFsaWRLZXlQYXRo
MikKK3sKKyAgICBWZWN0b3I8SURCS2V5UGF0aEVsZW1lbnQ+IGV4cGVjdGVkOworICAgIFN0cmlu
ZyBrZXlQYXRoKCJmb29bIDM0IF0uWm9vX1swMDAyM11cdC5fYyIpOworICAgIGV4cGVjdGVkLmFw
cGVuZChFeHBlY3RlZFRva2VuKCJmb28iLCBmYWxzZSwgMCkpOworICAgIGV4cGVjdGVkLmFwcGVu
ZChFeHBlY3RlZFRva2VuKFN0cmluZygpLCB0cnVlLCAzNCkpOworICAgIGV4cGVjdGVkLmFwcGVu
ZChFeHBlY3RlZFRva2VuKCJab29fIiwgZmFsc2UsIDApKTsKKyAgICBleHBlY3RlZC5hcHBlbmQo
RXhwZWN0ZWRUb2tlbihTdHJpbmcoKSwgdHJ1ZSwgMjMpKTsKKyAgICBleHBlY3RlZC5hcHBlbmQo
RXhwZWN0ZWRUb2tlbigiX2MiLCBmYWxzZSwgMCkpOworICAgIGNoZWNrS2V5UGF0aChrZXlQYXRo
LCBleHBlY3RlZCwgMCk7Cit9CisKK1RFU1QoSURCS2V5UGF0aFRlc3QsIFZhbGlkS2V5UGF0aDMp
Cit7CisgICAgVmVjdG9yPElEQktleVBhdGhFbGVtZW50PiBleHBlY3RlZDsKKyAgICBTdHJpbmcg
a2V5UGF0aCgiZm9vWyAzNCBdIik7CisgICAgZXhwZWN0ZWQuYXBwZW5kKEV4cGVjdGVkVG9rZW4o
ImZvbyIsIGZhbHNlLCAwKSk7CisgICAgZXhwZWN0ZWQuYXBwZW5kKEV4cGVjdGVkVG9rZW4oU3Ry
aW5nKCksIHRydWUsIDM0KSk7CisgICAgY2hlY2tLZXlQYXRoKGtleVBhdGgsIGV4cGVjdGVkLCAw
KTsKK30KKworVEVTVChJREJLZXlQYXRoVGVzdCwgVmFsaWRLZXlQYXRoNCkKK3sKKyAgICBWZWN0
b3I8SURCS2V5UGF0aEVsZW1lbnQ+IGV4cGVjdGVkOworICAgIFN0cmluZyBrZXlQYXRoKCJbIDM0
IF0iKTsKKyAgICBleHBlY3RlZC5hcHBlbmQoRXhwZWN0ZWRUb2tlbihTdHJpbmcoKSwgdHJ1ZSwg
MzQpKTsKKyAgICBjaGVja0tleVBhdGgoa2V5UGF0aCwgZXhwZWN0ZWQsIDApOworfQorCitURVNU
KElEQktleVBhdGhUZXN0LCBJbnZhbGlkS2V5UGF0aDIpCit7CisgICAgVmVjdG9yPElEQktleVBh
dGhFbGVtZW50PiBleHBlY3RlZDsKKyAgICBTdHJpbmcga2V5UGF0aCgiYVtbMzRdXS5iWzJdLmMi
KTsKKyAgICBleHBlY3RlZC5hcHBlbmQoRXhwZWN0ZWRUb2tlbigiYSIsIGZhbHNlLCAwKSk7Cisg
ICAgY2hlY2tLZXlQYXRoKGtleVBhdGgsIGV4cGVjdGVkLCAzKTsKK30KKworVEVTVChJREJLZXlQ
YXRoVGVzdCwgSW52YWxpZEtleVBhdGgzKQoreworICAgIFZlY3RvcjxJREJLZXlQYXRoRWxlbWVu
dD4gZXhwZWN0ZWQ7CisgICAgU3RyaW5nIGtleVBhdGgoImFbWzM0XS5iWzJdLmMiKTsKKyAgICBl
eHBlY3RlZC5hcHBlbmQoRXhwZWN0ZWRUb2tlbigiYSIsIGZhbHNlLCAwKSk7CisgICAgY2hlY2tL
ZXlQYXRoKGtleVBhdGgsIGV4cGVjdGVkLCAzKTsKK30KKworVEVTVChJREJLZXlQYXRoVGVzdCwg
SW52YWxpZEtleVBhdGg1KQoreworICAgIFZlY3RvcjxJREJLZXlQYXRoRWxlbWVudD4gZXhwZWN0
ZWQ7CisgICAgU3RyaW5nIGtleVBhdGgoImFbWzM0LmJbMl0uYyIpOworICAgIGV4cGVjdGVkLmFw
cGVuZChFeHBlY3RlZFRva2VuKCJhIiwgZmFsc2UsIDApKTsKKyAgICBjaGVja0tleVBhdGgoa2V5
UGF0aCwgZXhwZWN0ZWQsIDMpOworfQorCitURVNUKElEQktleVBhdGhUZXN0LCBJbnZhbGlkS2V5
UGF0aDYpCit7CisgICAgVmVjdG9yPElEQktleVBhdGhFbGVtZW50PiBleHBlY3RlZDsKKyAgICBT
dHJpbmcga2V5UGF0aCgiK2FbMzRdLmJbMl0uYyIpOworICAgIGNoZWNrS2V5UGF0aChrZXlQYXRo
LCBleHBlY3RlZCwgMSk7Cit9CisKK1RFU1QoSURCS2V5UGF0aFRlc3QsIEludmFsaWRLZXlQYXRo
NykKK3sKKyAgICBWZWN0b3I8SURCS2V5UGF0aEVsZW1lbnQ+IGV4cGVjdGVkOworICAgIFN0cmlu
ZyBrZXlQYXRoKCIlYVszNF0uYlsyXS5jIik7CisgICAgY2hlY2tLZXlQYXRoKGtleVBhdGgsIGV4
cGVjdGVkLCAxKTsKK30KKworVEVTVChJREJLZXlQYXRoVGVzdCwgSW52YWxpZEtleVBhdGg4KQor
eworICAgIFZlY3RvcjxJREJLZXlQYXRoRWxlbWVudD4gZXhwZWN0ZWQ7CisgICAgU3RyaW5nIGtl
eVBhdGgoImF7WzM0XX0uYlsyXS5jIik7CisgICAgZXhwZWN0ZWQuYXBwZW5kKEV4cGVjdGVkVG9r
ZW4oImEiLCBmYWxzZSwgMCkpOworICAgIGNoZWNrS2V5UGF0aChrZXlQYXRoLCBleHBlY3RlZCwg
Mik7Cit9CisKK1RFU1QoSURCS2V5UGF0aFRlc3QsIEludmFsaWRLZXlQYXRoOSkKK3sKKyAgICBW
ZWN0b3I8SURCS2V5UGF0aEVsZW1lbnQ+IGV4cGVjdGVkOworICAgIFN0cmluZyBrZXlQYXRoKCJh
Li5iWzJdLmMiKTsKKyAgICBleHBlY3RlZC5hcHBlbmQoRXhwZWN0ZWRUb2tlbigiYSIsIGZhbHNl
LCAwKSk7CisgICAgY2hlY2tLZXlQYXRoKGtleVBhdGgsIGV4cGVjdGVkLCA1KTsKK30KKworVEVT
VChJREJLZXlQYXRoVGVzdCwgSW52YWxpZEtleVBhdGgxMCkKK3sKKyAgICBWZWN0b3I8SURCS2V5
UGF0aEVsZW1lbnQ+IGV4cGVjdGVkOworICAgIFN0cmluZyBrZXlQYXRoKCJhWzM0XWIuZm9vWzJd
LmJhciIpOworICAgIGV4cGVjdGVkLmFwcGVuZChFeHBlY3RlZFRva2VuKCJhIiwgZmFsc2UsIDAp
KTsKKyAgICBleHBlY3RlZC5hcHBlbmQoRXhwZWN0ZWRUb2tlbihTdHJpbmcoKSwgdHJ1ZSwgMzQp
KTsKKyAgICBjaGVja0tleVBhdGgoa2V5UGF0aCwgZXhwZWN0ZWQsIDQpOworfQorCit9IC8vIG5h
bWVzcGFjZQorCisjZW5kaWYgLy8gRU5BQkxFKElOREVYRURfREFUQUJBU0UpCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>63489</attachid>
            <date>2010-08-04 13:42:06 -0700</date>
            <delta_ts>2010-08-05 12:33:17 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-42976-20100804214204.patch</filename>
            <type>text/plain</type>
            <size>29396</size>
            <attacher name="Marcus Bulach">bulach</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
YzVjZmE0NzZjYWUwYWQxZTM3NDhiZTg5Y2M2ODM3ZDYxODVkNmM0NS4uNmEwYTNhMTZhNjI1ZTE0
YmIwYmE3NTIxYTM5MmQwNzQ4NmQ4YTFjZSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cK
KysrIGIvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwzOCBAQAorMjAxMC0wNy0yOCAgTWFy
Y3VzIEJ1bGFjaCAgPGJ1bGFjaEBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
Tk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgSW1wbGVtZW50IElEQktleVBhdGggcGFyc2VyLgor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDI5NzYKKwor
ICAgICAgICBJREJLZXlQYXRoIGlzIGFuIGludGVybmFsIGNsYXNzLCBleHBvc2VkIG9ubHkgZm9y
IHVuaXQgdGVzdHMgZm9yIG5vdy4KKyAgICAgICAgSXQnbGwgYWxsb3cgaW5kZXhlZCBkYXRhYmFz
ZSBpbXBsZW1lbnRhdGlvbiB0byB0cmF2ZXJzZSBhIGdpdmVuIGtleSBwYXRoIGFuZCBvYnRhaW4g
dGhlIGNvcnJlc3BvbmRpbmcgcHJvcGVydGllcworICAgICAgICBmcm9tIGEgU2VyaWFsaXplZFNj
cmlwdFZhbHVlLgorCisgICAgICAgICogV2ViQ29yZS5neXBpOgorICAgICAgICAqIHN0b3JhZ2Uv
SURCS2V5UGF0aC5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6SURCS2V5UGF0aDo6Y3Jl
YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OklEQktleVBhdGg6OklEQktleVBhdGgpOgorICAgICAg
ICAoV2ViQ29yZTo6SURCS2V5UGF0aDo6fklEQktleVBhdGgpOgorICAgICAgICAoV2ViQ29yZTo6
SURCS2V5UGF0aDo6aGFzTmV4dCk6CisgICAgICAgIChXZWJDb3JlOjpJREJLZXlQYXRoOjpuZXh0
KToKKyAgICAgICAgKFdlYkNvcmU6OklEQktleVBhdGg6OmlkZW50aWZpZXIpOgorICAgICAgICAo
V2ViQ29yZTo6SURCS2V5UGF0aDo6aGFzSW5kZXgpOgorICAgICAgICAoV2ViQ29yZTo6SURCS2V5
UGF0aDo6aW5kZXhWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpJREJLZXlQYXRoOjpwYXJzZXJF
cnJvcik6CisgICAgICAgIChXZWJDb3JlOjpJREJLZXlQYXRoOjpwYXJzZSk6CisgICAgICAgIChX
ZWJDb3JlOjpJREJLZXlQYXRoOjpMZXhlcjo6bGV4KToKKyAgICAgICAgKFdlYkNvcmU6OmlzU2Fm
ZUlkZW50aWZpZXJTdGFydENoYXJhY3Rlcik6CisgICAgICAgIChXZWJDb3JlOjppc1NhZmVJZGVu
dGlmaWVyQ2hhcmFjdGVyKToKKyAgICAgICAgKFdlYkNvcmU6OklEQktleVBhdGg6OkxleGVyOjps
ZXhJZGVudGlmaWVyKToKKyAgICAgICAgKFdlYkNvcmU6OklEQktleVBhdGg6OkxleGVyOjpsZXhO
dW1iZXIpOgorICAgICAgICAqIHN0b3JhZ2UvSURCS2V5UGF0aC5oOiBBZGRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OklEQktleVBhdGg6OlRva2VuOjpUb2tlbik6CisgICAgICAgIChXZWJDb3JlOjpJ
REJLZXlQYXRoOjopOgorICAgICAgICAoV2ViQ29yZTo6SURCS2V5UGF0aDo6TGV4ZXI6OkxleGVy
KToKKyAgICAgICAgKFdlYkNvcmU6OklEQktleVBhdGg6OkxleGVyOjpuZXh0KToKKyAgICAgICAg
KFdlYkNvcmU6OklEQktleVBhdGg6OkxleGVyOjpjdXJyZW50VG9rZW4pOgorCiAyMDEwLTA4LTAz
ICBBbmRyZWkgUG9wZXNjdSAgPGFuZHJlaXBAZ29vZ2xlLmNvbT4KIAogICAgICAgICBVbnJldmll
d2VkLCBidWlsZCBmaXguCmRpZmYgLS1naXQgYS9XZWJDb3JlL1dlYkNvcmUuZ3lwaSBiL1dlYkNv
cmUvV2ViQ29yZS5neXBpCmluZGV4IDlmMzZjOWQ5YTU4MWVjYWQxMmE5MGJjNTRjNmNlYTM5MTc1
MWYzNmMuLmQwMzEwMzE4Mzk3MDczYTUzNzllNWQyZjc5MGFkYWI5Yzc3ZGQzMmMgMTAwNjQ0Ci0t
LSBhL1dlYkNvcmUvV2ViQ29yZS5neXBpCisrKyBiL1dlYkNvcmUvV2ViQ29yZS5neXBpCkBAIC0z
NTIxLDYgKzM1MjEsOCBAQAogICAgICAgICAgICAgJ3N0b3JhZ2UvSURCSW5kZXhCYWNrZW5kSW1w
bC5oJywKICAgICAgICAgICAgICdzdG9yYWdlL0lEQktleS5jcHAnLAogICAgICAgICAgICAgJ3N0
b3JhZ2UvSURCS2V5LmgnLAorICAgICAgICAgICAgJ3N0b3JhZ2UvSURCS2V5UGF0aC5jcHAnLAor
ICAgICAgICAgICAgJ3N0b3JhZ2UvSURCS2V5UGF0aC5oJywKICAgICAgICAgICAgICdzdG9yYWdl
L0lEQktleVJhbmdlLmNwcCcsCiAgICAgICAgICAgICAnc3RvcmFnZS9JREJLZXlSYW5nZS5oJywK
ICAgICAgICAgICAgICdzdG9yYWdlL0lEQktleVRyZWUuaCcsCmRpZmYgLS1naXQgYS9XZWJDb3Jl
L3N0b3JhZ2UvSURCS2V5UGF0aC5jcHAgYi9XZWJDb3JlL3N0b3JhZ2UvSURCS2V5UGF0aC5jcHAK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMC4uMzQ2NzY2ZjJkZjBhNDVhYmVhNTFiYTk5MWQxYWI3ZWUyMWYwYmE4NQotLS0g
L2Rldi9udWxsCisrKyBiL1dlYkNvcmUvc3RvcmFnZS9JREJLZXlQYXRoLmNwcApAQCAtMCwwICsx
LDI3NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisg
KiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJJREJLZXlQYXRo
LmgiCisKKyNpZiBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKKworI2luY2x1ZGUgPHd0Zi9BU0NJ
SUNUeXBlLmg+CisjaW5jbHVkZSA8d3RmL2R0b2EuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgewor
CitjbGFzcyBJREJLZXlQYXRoTGV4ZXIgeworcHVibGljOgorICAgIGVudW0gVG9rZW5UeXBlIHsK
KyAgICAgICAgVG9rZW5MZWZ0QnJhY2tldCwKKyAgICAgICAgVG9rZW5SaWdodEJyYWNrZXQsCisg
ICAgICAgIFRva2VuSWRlbnRpZmllciwKKyAgICAgICAgVG9rZW5OdW1iZXIsCisgICAgICAgIFRv
a2VuRG90LAorICAgICAgICBUb2tlbkVuZCwKKyAgICAgICAgVG9rZW5FcnJvcgorICAgIH07CisK
KyAgICBleHBsaWNpdCBJREJLZXlQYXRoTGV4ZXIoY29uc3QgU3RyaW5nJiBzKQorICAgICAgICA6
IG1fc3RyaW5nKHMpCisgICAgICAgICwgbV9wdHIocy5jaGFyYWN0ZXJzKCkpCisgICAgICAgICwg
bV9lbmQocy5jaGFyYWN0ZXJzKCkgKyBzLmxlbmd0aCgpKQorICAgICAgICAsIG1fY3VycmVudFRv
a2VuVHlwZShUb2tlbkVycm9yKQorICAgIHsKKyAgICB9CisKKyAgICBUb2tlblR5cGUgY3VycmVu
dCgpIGNvbnN0CisgICAgeworICAgICAgcmV0dXJuIG1fY3VycmVudFRva2VuVHlwZTsKKyAgICB9
CisKKyAgICBUb2tlblR5cGUgbmV4dCgpCisgICAgeworICAgICAgICBtX2N1cnJlbnRUb2tlblR5
cGUgPSBsZXgobV9jdXJyZW50RWxlbWVudCk7CisgICAgICAgIHJldHVybiBtX2N1cnJlbnRUb2tl
blR5cGU7CisgICAgfQorCisgICAgY29uc3QgSURCS2V5UGF0aEVsZW1lbnQmIGN1cnJlbnRFbGVt
ZW50KCkKKyAgICB7CisgICAgICAgIHJldHVybiBtX2N1cnJlbnRFbGVtZW50OworICAgIH0KKwor
cHJpdmF0ZToKKyAgICBUb2tlblR5cGUgbGV4KElEQktleVBhdGhFbGVtZW50Jik7CisgICAgVG9r
ZW5UeXBlIGxleElkZW50aWZpZXIoSURCS2V5UGF0aEVsZW1lbnQmKTsKKyAgICBUb2tlblR5cGUg
bGV4TnVtYmVyKElEQktleVBhdGhFbGVtZW50Jik7CisgICAgSURCS2V5UGF0aEVsZW1lbnQgbV9j
dXJyZW50RWxlbWVudDsKKyAgICBTdHJpbmcgbV9zdHJpbmc7CisgICAgY29uc3QgVUNoYXIqIG1f
cHRyOworICAgIGNvbnN0IFVDaGFyKiBtX2VuZDsKKyAgICBUb2tlblR5cGUgbV9jdXJyZW50VG9r
ZW5UeXBlOworfTsKKworSURCS2V5UGF0aExleGVyOjpUb2tlblR5cGUgSURCS2V5UGF0aExleGVy
OjpsZXgoSURCS2V5UGF0aEVsZW1lbnQmIGVsZW1lbnQpCit7CisgICAgd2hpbGUgKG1fcHRyIDwg
bV9lbmQgJiYgaXNBU0NJSVNwYWNlKCptX3B0cikpCisgICAgICAgICsrbV9wdHI7CisKKyAgICBp
ZiAobV9wdHIgPj0gbV9lbmQpCisgICAgICAgIHJldHVybiBUb2tlbkVuZDsKKworICAgIEFTU0VS
VChtX3B0ciA8IG1fZW5kKTsKKyAgICBzd2l0Y2ggKCptX3B0cikgeworICAgIGNhc2UgJ1snOgor
ICAgICAgICArK21fcHRyOworICAgICAgICByZXR1cm4gVG9rZW5MZWZ0QnJhY2tldDsKKyAgICBj
YXNlICddJzoKKyAgICAgICAgKyttX3B0cjsKKyAgICAgICAgcmV0dXJuIFRva2VuUmlnaHRCcmFj
a2V0OworICAgIGNhc2UgJy4nOgorICAgICAgICArK21fcHRyOworICAgICAgICByZXR1cm4gVG9r
ZW5Eb3Q7CisgICAgY2FzZSAnMCc6CisgICAgY2FzZSAnMSc6CisgICAgY2FzZSAnMic6CisgICAg
Y2FzZSAnMyc6CisgICAgY2FzZSAnNCc6CisgICAgY2FzZSAnNSc6CisgICAgY2FzZSAnNic6Cisg
ICAgY2FzZSAnNyc6CisgICAgY2FzZSAnOCc6CisgICAgY2FzZSAnOSc6CisgICAgICAgIHJldHVy
biBsZXhOdW1iZXIoZWxlbWVudCk7CisgICAgZGVmYXVsdDoKKyAgICAgICAgcmV0dXJuIGxleElk
ZW50aWZpZXIoZWxlbWVudCk7CisgICAgfQorICAgIHJldHVybiBUb2tlbkVycm9yOworfQorCitz
dGF0aWMgaW5saW5lIGJvb2wgaXNTYWZlSWRlbnRpZmllclN0YXJ0Q2hhcmFjdGVyKFVDaGFyIGMp
Cit7CisgICAgcmV0dXJuIGlzQVNDSUlBbHBoYShjKSB8fCAoYyA9PSAnXycpIHx8IChjID09ICck
Jyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgYm9vbCBpc1NhZmVJZGVudGlmaWVyQ2hhcmFjdGVyKFVD
aGFyIGMpCit7CisgICAgcmV0dXJuIGlzQVNDSUlBbHBoYW51bWVyaWMoYykgfHwgKGMgPT0gJ18n
KSB8fCAoYyA9PSAnJCcpOworfQorCitJREJLZXlQYXRoTGV4ZXI6OlRva2VuVHlwZSBJREJLZXlQ
YXRoTGV4ZXI6OmxleElkZW50aWZpZXIoSURCS2V5UGF0aEVsZW1lbnQmIGVsZW1lbnQpCit7Cisg
ICAgY29uc3QgVUNoYXIqIHN0YXJ0ID0gbV9wdHI7CisgICAgaWYgKG1fcHRyIDwgbV9lbmQgJiYg
aXNTYWZlSWRlbnRpZmllclN0YXJ0Q2hhcmFjdGVyKCptX3B0cikpCisgICAgICAgICsrbV9wdHI7
CisgICAgZWxzZQorICAgICAgICByZXR1cm4gVG9rZW5FcnJvcjsKKworICAgIHdoaWxlIChtX3B0
ciA8IG1fZW5kICYmIGlzU2FmZUlkZW50aWZpZXJDaGFyYWN0ZXIoKm1fcHRyKSkKKyAgICAgICAg
KyttX3B0cjsKKworICAgIGVsZW1lbnQudHlwZSA9IElEQktleVBhdGhFbGVtZW50OjpJc05hbWVk
OworICAgIGVsZW1lbnQuaWRlbnRpZmllciA9IFN0cmluZyhzdGFydCwgbV9wdHIgLSBzdGFydCk7
CisgICAgcmV0dXJuIFRva2VuSWRlbnRpZmllcjsKK30KKworSURCS2V5UGF0aExleGVyOjpUb2tl
blR5cGUgSURCS2V5UGF0aExleGVyOjpsZXhOdW1iZXIoSURCS2V5UGF0aEVsZW1lbnQmIGVsZW1l
bnQpCit7CisgICAgaWYgKG1fcHRyID49IG1fZW5kKQorICAgICAgICByZXR1cm4gVG9rZW5FcnJv
cjsKKworICAgIGNvbnN0IFVDaGFyKiBzdGFydCA9IG1fcHRyOworICAgIC8vIFswLTldKgorICAg
IHdoaWxlIChtX3B0ciA8IG1fZW5kICYmIGlzQVNDSUlEaWdpdCgqbV9wdHIpKQorICAgICAgICAr
K21fcHRyOworCisgICAgU3RyaW5nIG51bWJlckFzU3RyaW5nOworICAgIG51bWJlckFzU3RyaW5n
ID0gU3RyaW5nKHN0YXJ0LCBtX3B0ciAtIHN0YXJ0KTsKKyAgICBib29sIG9rID0gZmFsc2U7Cisg
ICAgaW50IG51bWJlciA9IG51bWJlckFzU3RyaW5nLnRvSW50U3RyaWN0KCZvayk7CisgICAgaWYg
KCFvaykKKyAgICAgICAgcmV0dXJuIFRva2VuRXJyb3I7CisKKyAgICBlbGVtZW50LnR5cGUgPSBJ
REJLZXlQYXRoRWxlbWVudDo6SXNJbmRleGVkOworICAgIGVsZW1lbnQuaW5kZXggPSBudW1iZXI7
CisgICAgcmV0dXJuIFRva2VuTnVtYmVyOworfQorCit2b2lkIElEQlBhcnNlS2V5UGF0aChjb25z
dCBTdHJpbmcmIGtleVBhdGgsIFZlY3RvcjxJREJLZXlQYXRoRWxlbWVudD4qIGVsZW1lbnRzLCBJ
REJLZXlQYXRoUGFyc2VFcnJvciogZXJyb3IpCit7CisgICAgLy8gVGhpcyBpcyBhIHNpbXBsaWZp
ZWQgcGFyc2VyIGxvb3NlbHkgYmFzZWQgb24gTGl0ZXJhbFBhcnNlci4KKyAgICAvLyBBbiBJREJL
ZXlQYXRoIGlzIGRlZmluZWQgYXMgYSBzZXF1ZW5jZSBvZjoKKyAgICAvLyBpZGVudGlmaWVyQXsu
aWRlbnRpZmllckJ7W251bWVyaWNfdmFsdWVdfQorICAgIC8vIHdoZXJlICJ7fSIgcmVwcmVzZW50
cyBhbiBvcHRpb25hbCBwYXJ0CisgICAgLy8gVGhlIGJhc2ljIHN0YXRlIG1hY2hpbmUgaXM6Cisg
ICAgLy8gU3RhcnQgPT4ge0lkZW50aWZpZXIsIEFycmF5fQorICAgIC8vIElkZW50aWZpZXIgPT4g
e0RvdCwgQXJyYXksIEVuZH0KKyAgICAvLyBBcnJheSA9PiB7U3RhcnQsIERvdCwgRW5kfQorICAg
IC8vIERvdCA9PiB7SWRlbnRpZmllcn0KKyAgICAvLyBJdCBiYWlscyBvdXQgYXMgc29vbiBhcyBp
dCBmaW5kcyBhbiBlcnJvciwgYnV0IGRvZXNuJ3QgZGlzY2FyZCB0aGUgYml0cyBpdCBtYW5hZ2Vk
IHRvIHBhcnNlLgorICAgIGVudW0gUGFyc2VyU3RhdGUgeyBJZGVudGlmaWVyLCBBcnJheSwgRG90
LCBFbmQgfTsKKworICAgIElEQktleVBhdGhMZXhlciBsZXhlcihrZXlQYXRoKTsKKyAgICBJREJL
ZXlQYXRoTGV4ZXI6OlRva2VuVHlwZSB0b2tlblR5cGUgPSBsZXhlci5uZXh0KCk7CisgICAgUGFy
c2VyU3RhdGUgc3RhdGU7CisgICAgaWYgKHRva2VuVHlwZSA9PSBJREJLZXlQYXRoTGV4ZXI6OlRv
a2VuSWRlbnRpZmllcikKKyAgICAgICAgc3RhdGUgPSBJZGVudGlmaWVyOworICAgIGVsc2UgaWYg
KHRva2VuVHlwZSA9PSBJREJLZXlQYXRoTGV4ZXI6OlRva2VuTGVmdEJyYWNrZXQpCisgICAgICAg
IHN0YXRlID0gQXJyYXk7CisgICAgZWxzZSBpZiAodG9rZW5UeXBlID09IElEQktleVBhdGhMZXhl
cjo6VG9rZW5FbmQpCisgICAgICAgIHN0YXRlID0gRW5kOworICAgIGVsc2UgeworICAgICAgICAq
ZXJyb3IgPSBJREJLZXlQYXRoUGFyc2VFcnJvclN0YXJ0OworICAgICAgICByZXR1cm47CisgICAg
fQorCisgICAgd2hpbGUgKDEpIHsKKyAgICAgICAgc3dpdGNoIChzdGF0ZSkgeworICAgICAgICBj
YXNlIElkZW50aWZpZXIgOiB7CisgICAgICAgICAgICBJREJLZXlQYXRoTGV4ZXI6OlRva2VuVHlw
ZSB0b2tlblR5cGUgPSBsZXhlci5jdXJyZW50KCk7CisgICAgICAgICAgICBBU1NFUlQodG9rZW5U
eXBlID09IElEQktleVBhdGhMZXhlcjo6VG9rZW5JZGVudGlmaWVyKTsKKworICAgICAgICAgICAg
SURCS2V5UGF0aEVsZW1lbnQgZWxlbWVudCA9IGxleGVyLmN1cnJlbnRFbGVtZW50KCk7CisgICAg
ICAgICAgICBBU1NFUlQoZWxlbWVudC50eXBlID09IElEQktleVBhdGhFbGVtZW50OjpJc05hbWVk
KTsKKyAgICAgICAgICAgIGVsZW1lbnRzLT5hcHBlbmQoZWxlbWVudCk7CisKKyAgICAgICAgICAg
IHRva2VuVHlwZSA9IGxleGVyLm5leHQoKTsKKyAgICAgICAgICAgIGlmICh0b2tlblR5cGUgPT0g
SURCS2V5UGF0aExleGVyOjpUb2tlbkRvdCkKKyAgICAgICAgICAgICAgICBzdGF0ZSA9IERvdDsK
KyAgICAgICAgICAgIGVsc2UgaWYgKHRva2VuVHlwZSA9PSBJREJLZXlQYXRoTGV4ZXI6OlRva2Vu
TGVmdEJyYWNrZXQpCisgICAgICAgICAgICAgICAgc3RhdGUgPSBBcnJheTsKKyAgICAgICAgICAg
IGVsc2UgaWYgKHRva2VuVHlwZSA9PSBJREJLZXlQYXRoTGV4ZXI6OlRva2VuRW5kKQorICAgICAg
ICAgICAgICAgIHN0YXRlID0gRW5kOworICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAg
ICAgKmVycm9yID0gSURCS2V5UGF0aFBhcnNlRXJyb3JJZGVudGlmaWVyOworICAgICAgICAgICAg
ICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9
CisgICAgICAgIGNhc2UgQXJyYXkgOiB7CisgICAgICAgICAgICBJREJLZXlQYXRoTGV4ZXI6OlRv
a2VuVHlwZSB0b2tlblR5cGUgPSBsZXhlci5jdXJyZW50KCk7CisgICAgICAgICAgICBBU1NFUlQo
dG9rZW5UeXBlID09IElEQktleVBhdGhMZXhlcjo6VG9rZW5MZWZ0QnJhY2tldCk7CisKKyAgICAg
ICAgICAgIHRva2VuVHlwZSA9IGxleGVyLm5leHQoKTsKKyAgICAgICAgICAgIGlmICh0b2tlblR5
cGUgIT0gSURCS2V5UGF0aExleGVyOjpUb2tlbk51bWJlcikgeworICAgICAgICAgICAgICAgICpl
cnJvciA9IElEQktleVBhdGhQYXJzZUVycm9yQXJyYXlJbmRleDsKKyAgICAgICAgICAgICAgICBy
ZXR1cm47CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIEFTU0VSVCh0b2tlblR5cGUgPT0g
SURCS2V5UGF0aExleGVyOjpUb2tlbk51bWJlcik7CisgICAgICAgICAgICBJREJLZXlQYXRoRWxl
bWVudCBlbGVtZW50ID0gbGV4ZXIuY3VycmVudEVsZW1lbnQoKTsKKyAgICAgICAgICAgIEFTU0VS
VChlbGVtZW50LnR5cGUgPT0gSURCS2V5UGF0aEVsZW1lbnQ6OklzSW5kZXhlZCk7CisgICAgICAg
ICAgICBlbGVtZW50cy0+YXBwZW5kKGVsZW1lbnQpOworCisgICAgICAgICAgICB0b2tlblR5cGUg
PSBsZXhlci5uZXh0KCk7CisgICAgICAgICAgICBpZiAodG9rZW5UeXBlICE9IElEQktleVBhdGhM
ZXhlcjo6VG9rZW5SaWdodEJyYWNrZXQpIHsKKyAgICAgICAgICAgICAgICAqZXJyb3IgPSBJREJL
ZXlQYXRoUGFyc2VFcnJvckFycmF5SW5kZXg7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAg
ICAgICAgICAgfQorCisgICAgICAgICAgICB0b2tlblR5cGUgPSBsZXhlci5uZXh0KCk7CisgICAg
ICAgICAgICBpZiAodG9rZW5UeXBlID09IElEQktleVBhdGhMZXhlcjo6VG9rZW5Eb3QpCisgICAg
ICAgICAgICAgICAgc3RhdGUgPSBEb3Q7CisgICAgICAgICAgICBlbHNlIGlmICh0b2tlblR5cGUg
PT0gSURCS2V5UGF0aExleGVyOjpUb2tlbkxlZnRCcmFja2V0KQorICAgICAgICAgICAgICAgIHN0
YXRlID0gQXJyYXk7CisgICAgICAgICAgICBlbHNlIGlmICh0b2tlblR5cGUgPT0gSURCS2V5UGF0
aExleGVyOjpUb2tlbkVuZCkKKyAgICAgICAgICAgICAgICBzdGF0ZSA9IEVuZDsKKyAgICAgICAg
ICAgIGVsc2UgeworICAgICAgICAgICAgICAgICplcnJvciA9IElEQktleVBhdGhQYXJzZUVycm9y
QWZ0ZXJBcnJheTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBjYXNlIERvdDogeworICAgICAgICAg
ICAgSURCS2V5UGF0aExleGVyOjpUb2tlblR5cGUgdG9rZW5UeXBlID0gbGV4ZXIuY3VycmVudCgp
OworICAgICAgICAgICAgQVNTRVJUKHRva2VuVHlwZSA9PSBJREJLZXlQYXRoTGV4ZXI6OlRva2Vu
RG90KTsKKworICAgICAgICAgICAgdG9rZW5UeXBlID0gbGV4ZXIubmV4dCgpOworICAgICAgICAg
ICAgaWYgKHRva2VuVHlwZSAhPSBJREJLZXlQYXRoTGV4ZXI6OlRva2VuSWRlbnRpZmllcikgewor
ICAgICAgICAgICAgICAgICplcnJvciA9IElEQktleVBhdGhQYXJzZUVycm9yRG90OworICAgICAg
ICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgc3RhdGUgPSBJ
ZGVudGlmaWVyOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBF
bmQ6IHsKKyAgICAgICAgICAgICplcnJvciA9IElEQktleVBhdGhQYXJzZUVycm9yTm9uZTsKKyAg
ICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICB9CisgICAgfQorfQorCit9IC8v
IG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkK
ZGlmZiAtLWdpdCBhL1dlYkNvcmUvc3RvcmFnZS9JREJLZXlQYXRoLmggYi9XZWJDb3JlL3N0b3Jh
Z2UvSURCS2V5UGF0aC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmRhMDcxMjk3OTQ3M2U4MDgwNWMzZTg2NTg0OGE0
NmQ0YmNhYmYyYWMKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJDb3JlL3N0b3JhZ2UvSURCS2V5UGF0
aC5oCkBAIC0wLDAgKzEsNjQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIg
QU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsK
KyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIElEQktleVBhdGhfaAorI2RlZmlu
ZSBJREJLZXlQYXRoX2gKKworI2lmIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQorCisjaW5jbHVk
ZSA8d3RmL1Bhc3NSZWZQdHIuaD4KKyNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgorI2luY2x1
ZGUgPHd0Zi9WZWN0b3IuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KKworbmFt
ZXNwYWNlIFdlYkNvcmUgeworCitzdHJ1Y3QgSURCS2V5UGF0aEVsZW1lbnQgeworICAgIGVudW0g
VHlwZSB7CisgICAgICAgIElzSW5kZXhlZCwKKyAgICAgICAgSXNOYW1lZCwKKyAgICB9OworCisg
ICAgVHlwZSB0eXBlOworICAgIGludCBpbmRleDsKKyAgICBTdHJpbmcgaWRlbnRpZmllcjsKK307
CisKK2VudW0gSURCS2V5UGF0aFBhcnNlRXJyb3IgeworICAgIElEQktleVBhdGhQYXJzZUVycm9y
Tm9uZSwKKyAgICBJREJLZXlQYXRoUGFyc2VFcnJvclN0YXJ0LAorICAgIElEQktleVBhdGhQYXJz
ZUVycm9ySWRlbnRpZmllciwKKyAgICBJREJLZXlQYXRoUGFyc2VFcnJvckFycmF5SW5kZXgsCisg
ICAgSURCS2V5UGF0aFBhcnNlRXJyb3JBZnRlckFycmF5LAorICAgIElEQktleVBhdGhQYXJzZUVy
cm9yRG90LAorfTsKKwordm9pZCBJREJQYXJzZUtleVBhdGgoY29uc3QgU3RyaW5nJiwgVmVjdG9y
PElEQktleVBhdGhFbGVtZW50PiosIElEQktleVBhdGhQYXJzZUVycm9yKik7CisKK30gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmCisKKyNlbmRpZiAvLyBJREJLZXlQYXRoX2gKZGlmZiAt
LWdpdCBhL1dlYkNvcmUvc3RvcmFnZS9JbmRleGVkRGF0YWJhc2VSZXF1ZXN0LmNwcCBiL1dlYkNv
cmUvc3RvcmFnZS9JbmRleGVkRGF0YWJhc2VSZXF1ZXN0LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5jMWM1NTE1
NzdmMTAxMmZmNGEyMmNkMzAwYWI2NmI4MzFlYjRhMDY4Ci0tLSAvZGV2L251bGwKKysrIGIvV2Vi
Q29yZS9zdG9yYWdlL0luZGV4ZWREYXRhYmFzZVJlcXVlc3QuY3BwCkBAIC0wLDAgKzEsNzMgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAx
LiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDMuICBOZWl0aGVyIHRoZSBuYW1lIG9mIEFwcGxlIENv
bXB1dGVyLCBJbmMuICgiQXBwbGUiKSBub3IgdGhlIG5hbWVzIG9mCisgKiAgICAgaXRzIGNvbnRy
aWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZl
ZAorICogICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0
ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElF
RAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICog
T04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLwor
CisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiSW5kZXhlZERhdGFiYXNlUmVxdWVzdC5o
IgorCisjaW5jbHVkZSAiRG9jdW1lbnQuaCIKKyNpbmNsdWRlICJFeGNlcHRpb25Db2RlLmgiCisj
aW5jbHVkZSAiRnJhbWUuaCIKKyNpbmNsdWRlICJJREJEYXRhYmFzZS5oIgorI2luY2x1ZGUgIklE
QktleVJhbmdlLmgiCisjaW5jbHVkZSAiSURCUmVxdWVzdC5oIgorI2luY2x1ZGUgIkluZGV4ZWRE
YXRhYmFzZS5oIgorCisjaWYgRU5BQkxFKElOREVYRURfREFUQUJBU0UpCisKK25hbWVzcGFjZSBX
ZWJDb3JlIHsKKworSW5kZXhlZERhdGFiYXNlUmVxdWVzdDo6SW5kZXhlZERhdGFiYXNlUmVxdWVz
dChJbmRleGVkRGF0YWJhc2UqIGluZGV4ZWREYXRhYmFzZSkKKyAgICA6IG1faW5kZXhlZERhdGFi
YXNlKGluZGV4ZWREYXRhYmFzZSkKK3sKKyAgICAvLyBXZSBwYXNzIGEgcmVmZXJlbmNlIHRvIHRo
aXMgb2JqZWN0IGJlZm9yZSBpdCBjYW4gYmUgYWRvcHRlZC4KKyAgICByZWxheEFkb3B0aW9uUmVx
dWlyZW1lbnQoKTsKK30KKworSW5kZXhlZERhdGFiYXNlUmVxdWVzdDo6fkluZGV4ZWREYXRhYmFz
ZVJlcXVlc3QoKQoreworfQorCitQYXNzUmVmUHRyPElEQlJlcXVlc3Q+IEluZGV4ZWREYXRhYmFz
ZVJlcXVlc3Q6Om9wZW4oU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwgY29uc3QgU3Ry
aW5nJiBuYW1lLCBjb25zdCBTdHJpbmcmIGRlc2NyaXB0aW9uKQoreworICAgIGlmICghY29udGV4
dC0+aXNEb2N1bWVudCgpKSB7CisgICAgICAgIC8vIEZJWE1FOiBtYWtlIHRoaXMgd29yayB3aXRo
IHdvcmtlcnMuCisgICAgICAgIHJldHVybiAwOworICAgIH0KKworICAgIERvY3VtZW50KiBkb2N1
bWVudCA9IHN0YXRpY19jYXN0PERvY3VtZW50Kj4oY29udGV4dCk7CisgICAgaWYgKCFkb2N1bWVu
dC0+ZnJhbWUoKSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBSZWZQdHI8SURCUmVxdWVzdD4g
cmVxdWVzdCA9IElEQlJlcXVlc3Q6OmNyZWF0ZShkb2N1bWVudCwgSURCQW55OjpjcmVhdGUodGhp
cykpOworICAgIG1faW5kZXhlZERhdGFiYXNlLT5vcGVuKG5hbWUsIGRlc2NyaXB0aW9uLCByZXF1
ZXN0LCBkb2N1bWVudC0+c2VjdXJpdHlPcmlnaW4oKSwgZG9jdW1lbnQtPmZyYW1lKCkpOworICAg
IHJldHVybiByZXF1ZXN0OworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAv
LyBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKZGlmZiAtLWdpdCBhL1dlYkNvcmUvc3RvcmFnZS9J
bmRleGVkRGF0YWJhc2VSZXF1ZXN0LmggYi9XZWJDb3JlL3N0b3JhZ2UvSW5kZXhlZERhdGFiYXNl
UmVxdWVzdC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAuLjU3ZjhhNzg1YmM5YjBhNmM5ZGI4MjI1OWRhMjRjMzk5YmRl
OTNlZGYKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJDb3JlL3N0b3JhZ2UvSW5kZXhlZERhdGFiYXNl
UmVxdWVzdC5oCkBAIC0wLDAgKzEsNjkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29v
Z2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAg
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDMuICBO
ZWl0aGVyIHRoZSBuYW1lIG9mIEFwcGxlIENvbXB1dGVyLCBJbmMuICgiQXBwbGUiKSBub3IgdGhl
IG5hbWVzIG9mCisgKiAgICAgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNl
IG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAorICogICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3
aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIg
QU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsK
KyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworI2lmbmRlZiBJbmRleGVkRGF0YWJhc2VSZXF1ZXN0
X2gKKyNkZWZpbmUgSW5kZXhlZERhdGFiYXNlUmVxdWVzdF9oCisKKyNpbmNsdWRlICJFeGNlcHRp
b25Db2RlLmgiCisjaW5jbHVkZSAiSW5kZXhlZERhdGFiYXNlLmgiCisjaW5jbHVkZSAiUGxhdGZv
cm1TdHJpbmcuaCIKKyNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgorI2luY2x1ZGUgPHd0Zi9S
ZWZDb3VudGVkLmg+CisjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgorCisjaWYgRU5BQkxFKElOREVY
RURfREFUQUJBU0UpCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgSURCS2V5OworY2xh
c3MgSURCS2V5UmFuZ2U7CitjbGFzcyBJREJSZXF1ZXN0OworY2xhc3MgSW5kZXhlZERhdGFiYXNl
OworY2xhc3MgU2NyaXB0RXhlY3V0aW9uQ29udGV4dDsKKworY2xhc3MgSW5kZXhlZERhdGFiYXNl
UmVxdWVzdCA6IHB1YmxpYyBSZWZDb3VudGVkPEluZGV4ZWREYXRhYmFzZVJlcXVlc3Q+IHsKK3B1
YmxpYzoKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxJbmRleGVkRGF0YWJhc2VSZXF1ZXN0PiBjcmVh
dGUoSW5kZXhlZERhdGFiYXNlKiBpbmRleGVkRGF0YWJhc2UpCisgICAgeworICAgICAgICByZXR1
cm4gYWRvcHRSZWYobmV3IEluZGV4ZWREYXRhYmFzZVJlcXVlc3QoaW5kZXhlZERhdGFiYXNlKSk7
CisgICAgfQorICAgIH5JbmRleGVkRGF0YWJhc2VSZXF1ZXN0KCk7CisKKyAgICBQYXNzUmVmUHRy
PElEQlJlcXVlc3Q+IG9wZW4oU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIGNvbnN0IFN0cmluZyYg
bmFtZSwgY29uc3QgU3RyaW5nJiBkZXNjcmlwdGlvbik7CisKK3ByaXZhdGU6CisgICAgSW5kZXhl
ZERhdGFiYXNlUmVxdWVzdChJbmRleGVkRGF0YWJhc2UqKTsKKworICAgIFJlZlB0cjxJbmRleGVk
RGF0YWJhc2U+IG1faW5kZXhlZERhdGFiYXNlOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQorCisjZW5kaWYKKworI2VuZGlmIC8vIEluZGV4ZWREYXRhYmFzZVJlcXVlc3RfaAorCmRpZmYg
LS1naXQgYS9XZWJDb3JlL3N0b3JhZ2UvSW5kZXhlZERhdGFiYXNlUmVxdWVzdC5pZGwgYi9XZWJD
b3JlL3N0b3JhZ2UvSW5kZXhlZERhdGFiYXNlUmVxdWVzdC5pZGwKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZTZlZTQ0
NjI3OGY3OTU1NDE4ZmY4MzVkYTIzOGY5MWE5OTBmMTE2OAotLS0gL2Rldi9udWxsCisrKyBiL1dl
YkNvcmUvc3RvcmFnZS9JbmRleGVkRGF0YWJhc2VSZXF1ZXN0LmlkbApAQCAtMCwwICsxLDM0IEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICog
MS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
IElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisgKi8KKworbW9kdWxlIHN0b3JhZ2UgeworCisgICAgaW50ZXJmYWNlIFsKKyAgICAgICAgQ29u
ZGl0aW9uYWw9SU5ERVhFRF9EQVRBQkFTRQorICAgIF0gSW5kZXhlZERhdGFiYXNlUmVxdWVzdCB7
CisgICAgICAgIFtDYWxsV2l0aD1TY3JpcHRFeGVjdXRpb25Db250ZXh0XSBJREJSZXF1ZXN0IG9w
ZW4oaW4gRE9NU3RyaW5nIG5hbWUsIGluIERPTVN0cmluZyBkZXNjcmlwdGlvbik7CisgICAgfTsK
KworfQpkaWZmIC0tZ2l0IGEvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZyBiL1dlYktpdC9jaHJv
bWl1bS9DaGFuZ2VMb2cKaW5kZXggNThiYTI3ZGE1NWEyZjhkZGNmNDg0ODNkYThkYzdjZjIwNTJj
Y2NiNi4uZjVlODk1MzAwNjg1ODg5ZGZjM2FjMTZjZDQ2ZWEzOGQyYzJmMWQ0MCAxMDA2NDQKLS0t
IGEvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZworKysgYi9XZWJLaXQvY2hyb21pdW0vQ2hhbmdl
TG9nCkBAIC0xLDMgKzEsMjAgQEAKKzIwMTAtMDctMjggIE1hcmN1cyBCdWxhY2ggIDxidWxhY2hA
Y2hyb21pdW0ub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisg
ICAgICAgIEltcGxlbWVudCBJREJLZXlQYXRoIHBhcnNlci4KKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQyOTc2CisKKyAgICAgICAgSURCS2V5UGF0aCBp
cyBhbiBpbnRlcm5hbCBjbGFzcywgZXhwb3NlZCBvbmx5IGZvciB1bml0IHRlc3RzIGZvciBub3cu
CisgICAgICAgIEl0J2xsIGFsbG93IGluZGV4ZWQgZGF0YWJhc2UgaW1wbGVtZW50YXRpb24gdG8g
dHJhdmVyc2UgYSBnaXZlbiBrZXkgcGF0aCBhbmQgb2J0YWluIHRoZSBjb3JyZXNwb25kaW5nIHBy
b3BlcnRpZXMKKyAgICAgICAgZnJvbSBhIFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZS4KKworICAgICAg
ICAqIFdlYktpdC5neXA6CisgICAgICAgICogdGVzdHMvSURCS2V5UGF0aFRlc3QuY3BwOiBBZGRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OkV4cGVjdGVkVG9rZW46OkV4cGVjdGVkVG9rZW4pOgorICAg
ICAgICAoV2ViQ29yZTo6Y2hlY2tLZXlQYXRoKToKKyAgICAgICAgKFdlYkNvcmU6OlRFU1QpOgor
CiAyMDEwLTA3LTMwICBBbmRyZWkgUG9wZXNjdSAgPGFuZHJlaXBAZGhjcC0xNzItMTYtMTQtMTIu
bG9uLmNvcnAuZ29vZ2xlLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBKZXJlbXkgT3Jsb3cu
CmRpZmYgLS1naXQgYS9XZWJLaXQvY2hyb21pdW0vV2ViS2l0Lmd5cCBiL1dlYktpdC9jaHJvbWl1
bS9XZWJLaXQuZ3lwCmluZGV4IDlkYTg1Y2Q3Y2EzOGM1MDcyNzgxMzE1ODA3ZWMzOTVjZGI1YmQy
NDQuLmQ3OWQ0ZDk4MmE3ZTBlMjI0NjYzZDMxMDJmZGI4NGUyMjM4ODRjMzcgMTAwNjQ0Ci0tLSBh
L1dlYktpdC9jaHJvbWl1bS9XZWJLaXQuZ3lwCisrKyBiL1dlYktpdC9jaHJvbWl1bS9XZWJLaXQu
Z3lwCkBAIC02OTMsNiArNjkzLDcgQEAKICAgICAgICAgICAgICAgICAgICAgXSwKICAgICAgICAg
ICAgICAgICAgICAgJ3NvdXJjZXMnOiBbCiAgICAgICAgICAgICAgICAgICAgICAgICAndGVzdHMv
RHJhZ0ltYWdlVGVzdC5jcHAnLAorICAgICAgICAgICAgICAgICAgICAgICAgJ3Rlc3RzL0lEQktl
eVBhdGhUZXN0LmNwcCcsCiAgICAgICAgICAgICAgICAgICAgICAgICAndGVzdHMvS2V5Ym9hcmRU
ZXN0LmNwcCcsCiAgICAgICAgICAgICAgICAgICAgICAgICAndGVzdHMvS1VSTFRlc3QuY3BwJywK
ICAgICAgICAgICAgICAgICAgICAgICAgICd0ZXN0cy9SdW5BbGxUZXN0cy5jcHAnLApkaWZmIC0t
Z2l0IGEvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0lEQktleVBhdGhUZXN0LmNwcCBiL1dlYktpdC9j
aHJvbWl1bS90ZXN0cy9JREJLZXlQYXRoVGVzdC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uN2JmODVjMjU0ODA0
NTc1ZDBhMzJlODE1MzAxNDViNTMwODRkNzkxOQotLS0gL2Rldi9udWxsCisrKyBiL1dlYktpdC9j
aHJvbWl1bS90ZXN0cy9JREJLZXlQYXRoVGVzdC5jcHAKQEAgLTAsMCArMSwxODkgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElF
RAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICog
T04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLwor
CisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiSURCS2V5UGF0aC5oIgorCisjaW5jbHVk
ZSA8Z3Rlc3QvZ3Rlc3QuaD4KKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisKKyNpZiBFTkFCTEUo
SU5ERVhFRF9EQVRBQkFTRSkKKwordXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CisKK25hbWVzcGFj
ZSB7CisKK0lEQktleVBhdGhFbGVtZW50IEV4cGVjdGVkVG9rZW4oY29uc3QgU3RyaW5nJiBpZGVu
dGlmaWVyLCBib29sIGlzSW5kZXhlZCwgaW50IGluZGV4KQoreworICAgIElEQktleVBhdGhFbGVt
ZW50IGV4cGVjdGVkOworICAgIGlmIChpc0luZGV4ZWQpIHsKKyAgICAgICAgZXhwZWN0ZWQudHlw
ZSA9IElEQktleVBhdGhFbGVtZW50OjpJc0luZGV4ZWQ7CisgICAgICAgIGV4cGVjdGVkLmluZGV4
ID0gaW5kZXg7CisgICAgfSBlbHNlIHsKKyAgICAgICAgZXhwZWN0ZWQudHlwZSA9IElEQktleVBh
dGhFbGVtZW50OjpJc05hbWVkOworICAgICAgICBleHBlY3RlZC5pZGVudGlmaWVyID0gaWRlbnRp
ZmllcjsKKyAgICB9CisgICAgcmV0dXJuIGV4cGVjdGVkOworfQorCit2b2lkIGNoZWNrS2V5UGF0
aChjb25zdCBTdHJpbmcmIGtleVBhdGgsIGNvbnN0IFZlY3RvcjxJREJLZXlQYXRoRWxlbWVudD4m
IGV4cGVjdGVkLCBpbnQgcGFyc2VyRXJyb3IpCit7CisKKyAgICBJREJLZXlQYXRoUGFyc2VFcnJv
ciBlcnJvcjsKKyAgICBWZWN0b3I8SURCS2V5UGF0aEVsZW1lbnQ+IGlkYktleVBhdGhFbGVtZW50
czsKKyAgICBJREJQYXJzZUtleVBhdGgoa2V5UGF0aCwgJmlkYktleVBhdGhFbGVtZW50cywgJmVy
cm9yKTsKKyAgICBBU1NFUlRfRVEocGFyc2VyRXJyb3IsIGVycm9yKTsKKyAgICBpZiAoZXJyb3Ig
IT0gSURCS2V5UGF0aFBhcnNlRXJyb3JOb25lKQorICAgICAgICByZXR1cm47CisgICAgQVNTRVJU
X0VRKGV4cGVjdGVkLnNpemUoKSwgaWRiS2V5UGF0aEVsZW1lbnRzLnNpemUoKSk7CisgICAgZm9y
IChpbnQgaSA9IDA7IGkgPCBleHBlY3RlZC5zaXplKCk7ICsraSkgeworICAgICAgICBBU1NFUlRf
VFJVRShleHBlY3RlZFtpXS50eXBlID09IGlkYktleVBhdGhFbGVtZW50c1tpXS50eXBlKSA8PCBp
OworICAgICAgICBpZiAoZXhwZWN0ZWRbaV0udHlwZSA9PSBJREJLZXlQYXRoRWxlbWVudDo6SXNJ
bmRleGVkKQorICAgICAgICAgIEFTU0VSVF9FUShleHBlY3RlZFtpXS5pbmRleCwgaWRiS2V5UGF0
aEVsZW1lbnRzW2ldLmluZGV4KSA8PCBpOworICAgICAgICBlbHNlIGlmIChleHBlY3RlZFtpXS50
eXBlID09IElEQktleVBhdGhFbGVtZW50OjpJc05hbWVkKQorICAgICAgICAgIEFTU0VSVF9UUlVF
KGV4cGVjdGVkW2ldLmlkZW50aWZpZXIgPT0gaWRiS2V5UGF0aEVsZW1lbnRzW2ldLmlkZW50aWZp
ZXIpIDw8IGk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICBBU1NFUlRfVFJVRShmYWxzZSkgPDwg
IkludmFsaWQgSURCS2V5UGF0aEVsZW1lbnQgdHlwZSI7CisgICAgfQorfQorCitURVNUKElEQktl
eVBhdGhUZXN0LCBWYWxpZEtleVBhdGgwKQoreworICAgIFZlY3RvcjxJREJLZXlQYXRoRWxlbWVu
dD4gZXhwZWN0ZWQ7CisgICAgU3RyaW5nIGtleVBhdGgoImZvby5iYXIuem9vIik7CisgICAgZXhw
ZWN0ZWQuYXBwZW5kKEV4cGVjdGVkVG9rZW4oImZvbyIsIGZhbHNlLCAwKSk7CisgICAgZXhwZWN0
ZWQuYXBwZW5kKEV4cGVjdGVkVG9rZW4oImJhciIsIGZhbHNlLCAwKSk7CisgICAgZXhwZWN0ZWQu
YXBwZW5kKEV4cGVjdGVkVG9rZW4oInpvbyIsIGZhbHNlLCAwKSk7CisgICAgY2hlY2tLZXlQYXRo
KGtleVBhdGgsIGV4cGVjdGVkLCAwKTsKK30KKworVEVTVChJREJLZXlQYXRoVGVzdCwgVmFsaWRL
ZXlQYXRoMSkKK3sKKyAgICBWZWN0b3I8SURCS2V5UGF0aEVsZW1lbnQ+IGV4cGVjdGVkOworICAg
IFN0cmluZyBrZXlQYXRoKCJhWzM0XVsyMF0uZm9vWzJdLmJhciIpOworICAgIGV4cGVjdGVkLmFw
cGVuZChFeHBlY3RlZFRva2VuKCJhIiwgZmFsc2UsIDApKTsKKyAgICBleHBlY3RlZC5hcHBlbmQo
RXhwZWN0ZWRUb2tlbihTdHJpbmcoKSwgdHJ1ZSwgMzQpKTsKKyAgICBleHBlY3RlZC5hcHBlbmQo
RXhwZWN0ZWRUb2tlbihTdHJpbmcoKSwgdHJ1ZSwgMjApKTsKKyAgICBleHBlY3RlZC5hcHBlbmQo
RXhwZWN0ZWRUb2tlbigiZm9vIiwgZmFsc2UsIDApKTsKKyAgICBleHBlY3RlZC5hcHBlbmQoRXhw
ZWN0ZWRUb2tlbihTdHJpbmcoKSwgdHJ1ZSwgMikpOworICAgIGV4cGVjdGVkLmFwcGVuZChFeHBl
Y3RlZFRva2VuKCJiYXIiLCBmYWxzZSwgMCkpOworICAgIGNoZWNrS2V5UGF0aChrZXlQYXRoLCBl
eHBlY3RlZCwgMCk7Cit9CisKK1RFU1QoSURCS2V5UGF0aFRlc3QsIFZhbGlkS2V5UGF0aDIpCit7
CisgICAgVmVjdG9yPElEQktleVBhdGhFbGVtZW50PiBleHBlY3RlZDsKKyAgICBTdHJpbmcga2V5
UGF0aCgiZm9vWyAzNCBdLlpvb19bMDAwMjNdXHQuX2MiKTsKKyAgICBleHBlY3RlZC5hcHBlbmQo
RXhwZWN0ZWRUb2tlbigiZm9vIiwgZmFsc2UsIDApKTsKKyAgICBleHBlY3RlZC5hcHBlbmQoRXhw
ZWN0ZWRUb2tlbihTdHJpbmcoKSwgdHJ1ZSwgMzQpKTsKKyAgICBleHBlY3RlZC5hcHBlbmQoRXhw
ZWN0ZWRUb2tlbigiWm9vXyIsIGZhbHNlLCAwKSk7CisgICAgZXhwZWN0ZWQuYXBwZW5kKEV4cGVj
dGVkVG9rZW4oU3RyaW5nKCksIHRydWUsIDIzKSk7CisgICAgZXhwZWN0ZWQuYXBwZW5kKEV4cGVj
dGVkVG9rZW4oIl9jIiwgZmFsc2UsIDApKTsKKyAgICBjaGVja0tleVBhdGgoa2V5UGF0aCwgZXhw
ZWN0ZWQsIDApOworfQorCitURVNUKElEQktleVBhdGhUZXN0LCBWYWxpZEtleVBhdGgzKQorewor
ICAgIFZlY3RvcjxJREJLZXlQYXRoRWxlbWVudD4gZXhwZWN0ZWQ7CisgICAgU3RyaW5nIGtleVBh
dGgoImZvb1sgMzQgXSIpOworICAgIGV4cGVjdGVkLmFwcGVuZChFeHBlY3RlZFRva2VuKCJmb28i
LCBmYWxzZSwgMCkpOworICAgIGV4cGVjdGVkLmFwcGVuZChFeHBlY3RlZFRva2VuKFN0cmluZygp
LCB0cnVlLCAzNCkpOworICAgIGNoZWNrS2V5UGF0aChrZXlQYXRoLCBleHBlY3RlZCwgMCk7Cit9
CisKK1RFU1QoSURCS2V5UGF0aFRlc3QsIFZhbGlkS2V5UGF0aDQpCit7CisgICAgVmVjdG9yPElE
QktleVBhdGhFbGVtZW50PiBleHBlY3RlZDsKKyAgICBTdHJpbmcga2V5UGF0aCgiWyAzNCBdIik7
CisgICAgZXhwZWN0ZWQuYXBwZW5kKEV4cGVjdGVkVG9rZW4oU3RyaW5nKCksIHRydWUsIDM0KSk7
CisgICAgY2hlY2tLZXlQYXRoKGtleVBhdGgsIGV4cGVjdGVkLCAwKTsKK30KKworVEVTVChJREJL
ZXlQYXRoVGVzdCwgSW52YWxpZEtleVBhdGgyKQoreworICAgIFZlY3RvcjxJREJLZXlQYXRoRWxl
bWVudD4gZXhwZWN0ZWQ7CisgICAgU3RyaW5nIGtleVBhdGgoImFbWzM0XV0uYlsyXS5jIik7Cisg
ICAgZXhwZWN0ZWQuYXBwZW5kKEV4cGVjdGVkVG9rZW4oImEiLCBmYWxzZSwgMCkpOworICAgIGNo
ZWNrS2V5UGF0aChrZXlQYXRoLCBleHBlY3RlZCwgMyk7Cit9CisKK1RFU1QoSURCS2V5UGF0aFRl
c3QsIEludmFsaWRLZXlQYXRoMykKK3sKKyAgICBWZWN0b3I8SURCS2V5UGF0aEVsZW1lbnQ+IGV4
cGVjdGVkOworICAgIFN0cmluZyBrZXlQYXRoKCJhW1szNF0uYlsyXS5jIik7CisgICAgZXhwZWN0
ZWQuYXBwZW5kKEV4cGVjdGVkVG9rZW4oImEiLCBmYWxzZSwgMCkpOworICAgIGNoZWNrS2V5UGF0
aChrZXlQYXRoLCBleHBlY3RlZCwgMyk7Cit9CisKK1RFU1QoSURCS2V5UGF0aFRlc3QsIEludmFs
aWRLZXlQYXRoNSkKK3sKKyAgICBWZWN0b3I8SURCS2V5UGF0aEVsZW1lbnQ+IGV4cGVjdGVkOwor
ICAgIFN0cmluZyBrZXlQYXRoKCJhW1szNC5iWzJdLmMiKTsKKyAgICBleHBlY3RlZC5hcHBlbmQo
RXhwZWN0ZWRUb2tlbigiYSIsIGZhbHNlLCAwKSk7CisgICAgY2hlY2tLZXlQYXRoKGtleVBhdGgs
IGV4cGVjdGVkLCAzKTsKK30KKworVEVTVChJREJLZXlQYXRoVGVzdCwgSW52YWxpZEtleVBhdGg2
KQoreworICAgIFZlY3RvcjxJREJLZXlQYXRoRWxlbWVudD4gZXhwZWN0ZWQ7CisgICAgU3RyaW5n
IGtleVBhdGgoIithWzM0XS5iWzJdLmMiKTsKKyAgICBjaGVja0tleVBhdGgoa2V5UGF0aCwgZXhw
ZWN0ZWQsIDEpOworfQorCitURVNUKElEQktleVBhdGhUZXN0LCBJbnZhbGlkS2V5UGF0aDcpCit7
CisgICAgVmVjdG9yPElEQktleVBhdGhFbGVtZW50PiBleHBlY3RlZDsKKyAgICBTdHJpbmcga2V5
UGF0aCgiJWFbMzRdLmJbMl0uYyIpOworICAgIGNoZWNrS2V5UGF0aChrZXlQYXRoLCBleHBlY3Rl
ZCwgMSk7Cit9CisKK1RFU1QoSURCS2V5UGF0aFRlc3QsIEludmFsaWRLZXlQYXRoOCkKK3sKKyAg
ICBWZWN0b3I8SURCS2V5UGF0aEVsZW1lbnQ+IGV4cGVjdGVkOworICAgIFN0cmluZyBrZXlQYXRo
KCJhe1szNF19LmJbMl0uYyIpOworICAgIGV4cGVjdGVkLmFwcGVuZChFeHBlY3RlZFRva2VuKCJh
IiwgZmFsc2UsIDApKTsKKyAgICBjaGVja0tleVBhdGgoa2V5UGF0aCwgZXhwZWN0ZWQsIDIpOwor
fQorCitURVNUKElEQktleVBhdGhUZXN0LCBJbnZhbGlkS2V5UGF0aDkpCit7CisgICAgVmVjdG9y
PElEQktleVBhdGhFbGVtZW50PiBleHBlY3RlZDsKKyAgICBTdHJpbmcga2V5UGF0aCgiYS4uYlsy
XS5jIik7CisgICAgZXhwZWN0ZWQuYXBwZW5kKEV4cGVjdGVkVG9rZW4oImEiLCBmYWxzZSwgMCkp
OworICAgIGNoZWNrS2V5UGF0aChrZXlQYXRoLCBleHBlY3RlZCwgNSk7Cit9CisKK1RFU1QoSURC
S2V5UGF0aFRlc3QsIEludmFsaWRLZXlQYXRoMTApCit7CisgICAgVmVjdG9yPElEQktleVBhdGhF
bGVtZW50PiBleHBlY3RlZDsKKyAgICBTdHJpbmcga2V5UGF0aCgiYVszNF1iLmZvb1syXS5iYXIi
KTsKKyAgICBleHBlY3RlZC5hcHBlbmQoRXhwZWN0ZWRUb2tlbigiYSIsIGZhbHNlLCAwKSk7Cisg
ICAgZXhwZWN0ZWQuYXBwZW5kKEV4cGVjdGVkVG9rZW4oU3RyaW5nKCksIHRydWUsIDM0KSk7Cisg
ICAgY2hlY2tLZXlQYXRoKGtleVBhdGgsIGV4cGVjdGVkLCA0KTsKK30KKworfSAvLyBuYW1lc3Bh
Y2UKKworI2VuZGlmIC8vIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>63618</attachid>
            <date>2010-08-05 12:33:22 -0700</date>
            <delta_ts>2010-08-11 09:29:39 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-42976-20100805203320.patch</filename>
            <type>text/plain</type>
            <size>21512</size>
            <attacher name="Marcus Bulach">bulach</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
NjlhZTg5MDE4OGUyMTlkYTk3ZDBkYzgzNDNkZTdlZDFiMmIxNWM3NS4uMmU4YjNkNTg1ZjE3ZDBl
NTNlZjI0NWJkNDEzMjJmODEwNDBkNDZiMiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cK
KysrIGIvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwzOCBAQAorMjAxMC0wNy0yOCAgTWFy
Y3VzIEJ1bGFjaCAgPGJ1bGFjaEBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
Tk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgSW1wbGVtZW50IElEQktleVBhdGggcGFyc2VyLgor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDI5NzYKKwor
ICAgICAgICBJREJLZXlQYXRoIGlzIGFuIGludGVybmFsIGNsYXNzLCBleHBvc2VkIG9ubHkgZm9y
IHVuaXQgdGVzdHMgZm9yIG5vdy4KKyAgICAgICAgSXQnbGwgYWxsb3cgaW5kZXhlZCBkYXRhYmFz
ZSBpbXBsZW1lbnRhdGlvbiB0byB0cmF2ZXJzZSBhIGdpdmVuIGtleSBwYXRoIGFuZCBvYnRhaW4g
dGhlIGNvcnJlc3BvbmRpbmcgcHJvcGVydGllcworICAgICAgICBmcm9tIGEgU2VyaWFsaXplZFNj
cmlwdFZhbHVlLgorCisgICAgICAgICogV2ViQ29yZS5neXBpOgorICAgICAgICAqIHN0b3JhZ2Uv
SURCS2V5UGF0aC5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6SURCS2V5UGF0aDo6Y3Jl
YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OklEQktleVBhdGg6OklEQktleVBhdGgpOgorICAgICAg
ICAoV2ViQ29yZTo6SURCS2V5UGF0aDo6fklEQktleVBhdGgpOgorICAgICAgICAoV2ViQ29yZTo6
SURCS2V5UGF0aDo6aGFzTmV4dCk6CisgICAgICAgIChXZWJDb3JlOjpJREJLZXlQYXRoOjpuZXh0
KToKKyAgICAgICAgKFdlYkNvcmU6OklEQktleVBhdGg6OmlkZW50aWZpZXIpOgorICAgICAgICAo
V2ViQ29yZTo6SURCS2V5UGF0aDo6aGFzSW5kZXgpOgorICAgICAgICAoV2ViQ29yZTo6SURCS2V5
UGF0aDo6aW5kZXhWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpJREJLZXlQYXRoOjpwYXJzZXJF
cnJvcik6CisgICAgICAgIChXZWJDb3JlOjpJREJLZXlQYXRoOjpwYXJzZSk6CisgICAgICAgIChX
ZWJDb3JlOjpJREJLZXlQYXRoOjpMZXhlcjo6bGV4KToKKyAgICAgICAgKFdlYkNvcmU6OmlzU2Fm
ZUlkZW50aWZpZXJTdGFydENoYXJhY3Rlcik6CisgICAgICAgIChXZWJDb3JlOjppc1NhZmVJZGVu
dGlmaWVyQ2hhcmFjdGVyKToKKyAgICAgICAgKFdlYkNvcmU6OklEQktleVBhdGg6OkxleGVyOjps
ZXhJZGVudGlmaWVyKToKKyAgICAgICAgKFdlYkNvcmU6OklEQktleVBhdGg6OkxleGVyOjpsZXhO
dW1iZXIpOgorICAgICAgICAqIHN0b3JhZ2UvSURCS2V5UGF0aC5oOiBBZGRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OklEQktleVBhdGg6OlRva2VuOjpUb2tlbik6CisgICAgICAgIChXZWJDb3JlOjpJ
REJLZXlQYXRoOjopOgorICAgICAgICAoV2ViQ29yZTo6SURCS2V5UGF0aDo6TGV4ZXI6OkxleGVy
KToKKyAgICAgICAgKFdlYkNvcmU6OklEQktleVBhdGg6OkxleGVyOjpuZXh0KToKKyAgICAgICAg
KFdlYkNvcmU6OklEQktleVBhdGg6OkxleGVyOjpjdXJyZW50VG9rZW4pOgorCiAyMDEwLTA4LTA1
ICBGcmFuw6dvaXMgU2F1c3NldCAgPHNhdXNzZXRAZ21haWwuY29tPgogCiAgICAgICAgIFJldmll
d2VkIGJ5IEtlbm5ldGggUm9oZGUgQ2hyaXN0aWFuc2VuLgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9X
ZWJDb3JlLmd5cGkgYi9XZWJDb3JlL1dlYkNvcmUuZ3lwaQppbmRleCBiZTQ1ODVjNTQxN2Y0Yjcx
OTdlMzQ3ZjIwMjE1MDEzMTUwMTEyNjk5Li5mNjkxOTNhMzc3Yzc5OTRkYmRjZThhNGNmNWUwZjlk
Zjk3MWVhN2I0IDEwMDY0NAotLS0gYS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQorKysgYi9XZWJDb3Jl
L1dlYkNvcmUuZ3lwaQpAQCAtMzUxNyw2ICszNTE3LDggQEAKICAgICAgICAgICAgICdzdG9yYWdl
L0lEQkluZGV4QmFja2VuZEltcGwuaCcsCiAgICAgICAgICAgICAnc3RvcmFnZS9JREJLZXkuY3Bw
JywKICAgICAgICAgICAgICdzdG9yYWdlL0lEQktleS5oJywKKyAgICAgICAgICAgICdzdG9yYWdl
L0lEQktleVBhdGguY3BwJywKKyAgICAgICAgICAgICdzdG9yYWdlL0lEQktleVBhdGguaCcsCiAg
ICAgICAgICAgICAnc3RvcmFnZS9JREJLZXlSYW5nZS5jcHAnLAogICAgICAgICAgICAgJ3N0b3Jh
Z2UvSURCS2V5UmFuZ2UuaCcsCiAgICAgICAgICAgICAnc3RvcmFnZS9JREJLZXlUcmVlLmgnLApk
aWZmIC0tZ2l0IGEvV2ViQ29yZS9zdG9yYWdlL0lEQktleVBhdGguY3BwIGIvV2ViQ29yZS9zdG9y
YWdlL0lEQktleVBhdGguY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjM0Njc2NmYyZGYwYTQ1YWJlYTUxYmE5OTFk
MWFiN2VlMjFmMGJhODUKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJDb3JlL3N0b3JhZ2UvSURCS2V5
UGF0aC5jcHAKQEAgLTAsMCArMSwyNzUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29v
Z2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAg
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJB
UyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICog
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisj
aW5jbHVkZSAiSURCS2V5UGF0aC5oIgorCisjaWYgRU5BQkxFKElOREVYRURfREFUQUJBU0UpCisK
KyNpbmNsdWRlIDx3dGYvQVNDSUlDVHlwZS5oPgorI2luY2x1ZGUgPHd0Zi9kdG9hLmg+CisKK25h
bWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgSURCS2V5UGF0aExleGVyIHsKK3B1YmxpYzoKKyAg
ICBlbnVtIFRva2VuVHlwZSB7CisgICAgICAgIFRva2VuTGVmdEJyYWNrZXQsCisgICAgICAgIFRv
a2VuUmlnaHRCcmFja2V0LAorICAgICAgICBUb2tlbklkZW50aWZpZXIsCisgICAgICAgIFRva2Vu
TnVtYmVyLAorICAgICAgICBUb2tlbkRvdCwKKyAgICAgICAgVG9rZW5FbmQsCisgICAgICAgIFRv
a2VuRXJyb3IKKyAgICB9OworCisgICAgZXhwbGljaXQgSURCS2V5UGF0aExleGVyKGNvbnN0IFN0
cmluZyYgcykKKyAgICAgICAgOiBtX3N0cmluZyhzKQorICAgICAgICAsIG1fcHRyKHMuY2hhcmFj
dGVycygpKQorICAgICAgICAsIG1fZW5kKHMuY2hhcmFjdGVycygpICsgcy5sZW5ndGgoKSkKKyAg
ICAgICAgLCBtX2N1cnJlbnRUb2tlblR5cGUoVG9rZW5FcnJvcikKKyAgICB7CisgICAgfQorCisg
ICAgVG9rZW5UeXBlIGN1cnJlbnQoKSBjb25zdAorICAgIHsKKyAgICAgIHJldHVybiBtX2N1cnJl
bnRUb2tlblR5cGU7CisgICAgfQorCisgICAgVG9rZW5UeXBlIG5leHQoKQorICAgIHsKKyAgICAg
ICAgbV9jdXJyZW50VG9rZW5UeXBlID0gbGV4KG1fY3VycmVudEVsZW1lbnQpOworICAgICAgICBy
ZXR1cm4gbV9jdXJyZW50VG9rZW5UeXBlOworICAgIH0KKworICAgIGNvbnN0IElEQktleVBhdGhF
bGVtZW50JiBjdXJyZW50RWxlbWVudCgpCisgICAgeworICAgICAgICByZXR1cm4gbV9jdXJyZW50
RWxlbWVudDsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgVG9rZW5UeXBlIGxleChJREJLZXlQYXRo
RWxlbWVudCYpOworICAgIFRva2VuVHlwZSBsZXhJZGVudGlmaWVyKElEQktleVBhdGhFbGVtZW50
Jik7CisgICAgVG9rZW5UeXBlIGxleE51bWJlcihJREJLZXlQYXRoRWxlbWVudCYpOworICAgIElE
QktleVBhdGhFbGVtZW50IG1fY3VycmVudEVsZW1lbnQ7CisgICAgU3RyaW5nIG1fc3RyaW5nOwor
ICAgIGNvbnN0IFVDaGFyKiBtX3B0cjsKKyAgICBjb25zdCBVQ2hhciogbV9lbmQ7CisgICAgVG9r
ZW5UeXBlIG1fY3VycmVudFRva2VuVHlwZTsKK307CisKK0lEQktleVBhdGhMZXhlcjo6VG9rZW5U
eXBlIElEQktleVBhdGhMZXhlcjo6bGV4KElEQktleVBhdGhFbGVtZW50JiBlbGVtZW50KQorewor
ICAgIHdoaWxlIChtX3B0ciA8IG1fZW5kICYmIGlzQVNDSUlTcGFjZSgqbV9wdHIpKQorICAgICAg
ICArK21fcHRyOworCisgICAgaWYgKG1fcHRyID49IG1fZW5kKQorICAgICAgICByZXR1cm4gVG9r
ZW5FbmQ7CisKKyAgICBBU1NFUlQobV9wdHIgPCBtX2VuZCk7CisgICAgc3dpdGNoICgqbV9wdHIp
IHsKKyAgICBjYXNlICdbJzoKKyAgICAgICAgKyttX3B0cjsKKyAgICAgICAgcmV0dXJuIFRva2Vu
TGVmdEJyYWNrZXQ7CisgICAgY2FzZSAnXSc6CisgICAgICAgICsrbV9wdHI7CisgICAgICAgIHJl
dHVybiBUb2tlblJpZ2h0QnJhY2tldDsKKyAgICBjYXNlICcuJzoKKyAgICAgICAgKyttX3B0cjsK
KyAgICAgICAgcmV0dXJuIFRva2VuRG90OworICAgIGNhc2UgJzAnOgorICAgIGNhc2UgJzEnOgor
ICAgIGNhc2UgJzInOgorICAgIGNhc2UgJzMnOgorICAgIGNhc2UgJzQnOgorICAgIGNhc2UgJzUn
OgorICAgIGNhc2UgJzYnOgorICAgIGNhc2UgJzcnOgorICAgIGNhc2UgJzgnOgorICAgIGNhc2Ug
JzknOgorICAgICAgICByZXR1cm4gbGV4TnVtYmVyKGVsZW1lbnQpOworICAgIGRlZmF1bHQ6Cisg
ICAgICAgIHJldHVybiBsZXhJZGVudGlmaWVyKGVsZW1lbnQpOworICAgIH0KKyAgICByZXR1cm4g
VG9rZW5FcnJvcjsKK30KKworc3RhdGljIGlubGluZSBib29sIGlzU2FmZUlkZW50aWZpZXJTdGFy
dENoYXJhY3RlcihVQ2hhciBjKQoreworICAgIHJldHVybiBpc0FTQ0lJQWxwaGEoYykgfHwgKGMg
PT0gJ18nKSB8fCAoYyA9PSAnJCcpOworfQorCitzdGF0aWMgaW5saW5lIGJvb2wgaXNTYWZlSWRl
bnRpZmllckNoYXJhY3RlcihVQ2hhciBjKQoreworICAgIHJldHVybiBpc0FTQ0lJQWxwaGFudW1l
cmljKGMpIHx8IChjID09ICdfJykgfHwgKGMgPT0gJyQnKTsKK30KKworSURCS2V5UGF0aExleGVy
OjpUb2tlblR5cGUgSURCS2V5UGF0aExleGVyOjpsZXhJZGVudGlmaWVyKElEQktleVBhdGhFbGVt
ZW50JiBlbGVtZW50KQoreworICAgIGNvbnN0IFVDaGFyKiBzdGFydCA9IG1fcHRyOworICAgIGlm
IChtX3B0ciA8IG1fZW5kICYmIGlzU2FmZUlkZW50aWZpZXJTdGFydENoYXJhY3RlcigqbV9wdHIp
KQorICAgICAgICArK21fcHRyOworICAgIGVsc2UKKyAgICAgICAgcmV0dXJuIFRva2VuRXJyb3I7
CisKKyAgICB3aGlsZSAobV9wdHIgPCBtX2VuZCAmJiBpc1NhZmVJZGVudGlmaWVyQ2hhcmFjdGVy
KCptX3B0cikpCisgICAgICAgICsrbV9wdHI7CisKKyAgICBlbGVtZW50LnR5cGUgPSBJREJLZXlQ
YXRoRWxlbWVudDo6SXNOYW1lZDsKKyAgICBlbGVtZW50LmlkZW50aWZpZXIgPSBTdHJpbmcoc3Rh
cnQsIG1fcHRyIC0gc3RhcnQpOworICAgIHJldHVybiBUb2tlbklkZW50aWZpZXI7Cit9CisKK0lE
QktleVBhdGhMZXhlcjo6VG9rZW5UeXBlIElEQktleVBhdGhMZXhlcjo6bGV4TnVtYmVyKElEQktl
eVBhdGhFbGVtZW50JiBlbGVtZW50KQoreworICAgIGlmIChtX3B0ciA+PSBtX2VuZCkKKyAgICAg
ICAgcmV0dXJuIFRva2VuRXJyb3I7CisKKyAgICBjb25zdCBVQ2hhciogc3RhcnQgPSBtX3B0cjsK
KyAgICAvLyBbMC05XSoKKyAgICB3aGlsZSAobV9wdHIgPCBtX2VuZCAmJiBpc0FTQ0lJRGlnaXQo
Km1fcHRyKSkKKyAgICAgICAgKyttX3B0cjsKKworICAgIFN0cmluZyBudW1iZXJBc1N0cmluZzsK
KyAgICBudW1iZXJBc1N0cmluZyA9IFN0cmluZyhzdGFydCwgbV9wdHIgLSBzdGFydCk7CisgICAg
Ym9vbCBvayA9IGZhbHNlOworICAgIGludCBudW1iZXIgPSBudW1iZXJBc1N0cmluZy50b0ludFN0
cmljdCgmb2spOworICAgIGlmICghb2spCisgICAgICAgIHJldHVybiBUb2tlbkVycm9yOworCisg
ICAgZWxlbWVudC50eXBlID0gSURCS2V5UGF0aEVsZW1lbnQ6OklzSW5kZXhlZDsKKyAgICBlbGVt
ZW50LmluZGV4ID0gbnVtYmVyOworICAgIHJldHVybiBUb2tlbk51bWJlcjsKK30KKwordm9pZCBJ
REJQYXJzZUtleVBhdGgoY29uc3QgU3RyaW5nJiBrZXlQYXRoLCBWZWN0b3I8SURCS2V5UGF0aEVs
ZW1lbnQ+KiBlbGVtZW50cywgSURCS2V5UGF0aFBhcnNlRXJyb3IqIGVycm9yKQoreworICAgIC8v
IFRoaXMgaXMgYSBzaW1wbGlmaWVkIHBhcnNlciBsb29zZWx5IGJhc2VkIG9uIExpdGVyYWxQYXJz
ZXIuCisgICAgLy8gQW4gSURCS2V5UGF0aCBpcyBkZWZpbmVkIGFzIGEgc2VxdWVuY2Ugb2Y6Cisg
ICAgLy8gaWRlbnRpZmllckF7LmlkZW50aWZpZXJCe1tudW1lcmljX3ZhbHVlXX0KKyAgICAvLyB3
aGVyZSAie30iIHJlcHJlc2VudHMgYW4gb3B0aW9uYWwgcGFydAorICAgIC8vIFRoZSBiYXNpYyBz
dGF0ZSBtYWNoaW5lIGlzOgorICAgIC8vIFN0YXJ0ID0+IHtJZGVudGlmaWVyLCBBcnJheX0KKyAg
ICAvLyBJZGVudGlmaWVyID0+IHtEb3QsIEFycmF5LCBFbmR9CisgICAgLy8gQXJyYXkgPT4ge1N0
YXJ0LCBEb3QsIEVuZH0KKyAgICAvLyBEb3QgPT4ge0lkZW50aWZpZXJ9CisgICAgLy8gSXQgYmFp
bHMgb3V0IGFzIHNvb24gYXMgaXQgZmluZHMgYW4gZXJyb3IsIGJ1dCBkb2Vzbid0IGRpc2NhcmQg
dGhlIGJpdHMgaXQgbWFuYWdlZCB0byBwYXJzZS4KKyAgICBlbnVtIFBhcnNlclN0YXRlIHsgSWRl
bnRpZmllciwgQXJyYXksIERvdCwgRW5kIH07CisKKyAgICBJREJLZXlQYXRoTGV4ZXIgbGV4ZXIo
a2V5UGF0aCk7CisgICAgSURCS2V5UGF0aExleGVyOjpUb2tlblR5cGUgdG9rZW5UeXBlID0gbGV4
ZXIubmV4dCgpOworICAgIFBhcnNlclN0YXRlIHN0YXRlOworICAgIGlmICh0b2tlblR5cGUgPT0g
SURCS2V5UGF0aExleGVyOjpUb2tlbklkZW50aWZpZXIpCisgICAgICAgIHN0YXRlID0gSWRlbnRp
ZmllcjsKKyAgICBlbHNlIGlmICh0b2tlblR5cGUgPT0gSURCS2V5UGF0aExleGVyOjpUb2tlbkxl
ZnRCcmFja2V0KQorICAgICAgICBzdGF0ZSA9IEFycmF5OworICAgIGVsc2UgaWYgKHRva2VuVHlw
ZSA9PSBJREJLZXlQYXRoTGV4ZXI6OlRva2VuRW5kKQorICAgICAgICBzdGF0ZSA9IEVuZDsKKyAg
ICBlbHNlIHsKKyAgICAgICAgKmVycm9yID0gSURCS2V5UGF0aFBhcnNlRXJyb3JTdGFydDsKKyAg
ICAgICAgcmV0dXJuOworICAgIH0KKworICAgIHdoaWxlICgxKSB7CisgICAgICAgIHN3aXRjaCAo
c3RhdGUpIHsKKyAgICAgICAgY2FzZSBJZGVudGlmaWVyIDogeworICAgICAgICAgICAgSURCS2V5
UGF0aExleGVyOjpUb2tlblR5cGUgdG9rZW5UeXBlID0gbGV4ZXIuY3VycmVudCgpOworICAgICAg
ICAgICAgQVNTRVJUKHRva2VuVHlwZSA9PSBJREJLZXlQYXRoTGV4ZXI6OlRva2VuSWRlbnRpZmll
cik7CisKKyAgICAgICAgICAgIElEQktleVBhdGhFbGVtZW50IGVsZW1lbnQgPSBsZXhlci5jdXJy
ZW50RWxlbWVudCgpOworICAgICAgICAgICAgQVNTRVJUKGVsZW1lbnQudHlwZSA9PSBJREJLZXlQ
YXRoRWxlbWVudDo6SXNOYW1lZCk7CisgICAgICAgICAgICBlbGVtZW50cy0+YXBwZW5kKGVsZW1l
bnQpOworCisgICAgICAgICAgICB0b2tlblR5cGUgPSBsZXhlci5uZXh0KCk7CisgICAgICAgICAg
ICBpZiAodG9rZW5UeXBlID09IElEQktleVBhdGhMZXhlcjo6VG9rZW5Eb3QpCisgICAgICAgICAg
ICAgICAgc3RhdGUgPSBEb3Q7CisgICAgICAgICAgICBlbHNlIGlmICh0b2tlblR5cGUgPT0gSURC
S2V5UGF0aExleGVyOjpUb2tlbkxlZnRCcmFja2V0KQorICAgICAgICAgICAgICAgIHN0YXRlID0g
QXJyYXk7CisgICAgICAgICAgICBlbHNlIGlmICh0b2tlblR5cGUgPT0gSURCS2V5UGF0aExleGVy
OjpUb2tlbkVuZCkKKyAgICAgICAgICAgICAgICBzdGF0ZSA9IEVuZDsKKyAgICAgICAgICAgIGVs
c2UgeworICAgICAgICAgICAgICAgICplcnJvciA9IElEQktleVBhdGhQYXJzZUVycm9ySWRlbnRp
ZmllcjsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBjYXNlIEFycmF5IDogeworICAgICAgICAgICAg
SURCS2V5UGF0aExleGVyOjpUb2tlblR5cGUgdG9rZW5UeXBlID0gbGV4ZXIuY3VycmVudCgpOwor
ICAgICAgICAgICAgQVNTRVJUKHRva2VuVHlwZSA9PSBJREJLZXlQYXRoTGV4ZXI6OlRva2VuTGVm
dEJyYWNrZXQpOworCisgICAgICAgICAgICB0b2tlblR5cGUgPSBsZXhlci5uZXh0KCk7CisgICAg
ICAgICAgICBpZiAodG9rZW5UeXBlICE9IElEQktleVBhdGhMZXhlcjo6VG9rZW5OdW1iZXIpIHsK
KyAgICAgICAgICAgICAgICAqZXJyb3IgPSBJREJLZXlQYXRoUGFyc2VFcnJvckFycmF5SW5kZXg7
CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBB
U1NFUlQodG9rZW5UeXBlID09IElEQktleVBhdGhMZXhlcjo6VG9rZW5OdW1iZXIpOworICAgICAg
ICAgICAgSURCS2V5UGF0aEVsZW1lbnQgZWxlbWVudCA9IGxleGVyLmN1cnJlbnRFbGVtZW50KCk7
CisgICAgICAgICAgICBBU1NFUlQoZWxlbWVudC50eXBlID09IElEQktleVBhdGhFbGVtZW50OjpJ
c0luZGV4ZWQpOworICAgICAgICAgICAgZWxlbWVudHMtPmFwcGVuZChlbGVtZW50KTsKKworICAg
ICAgICAgICAgdG9rZW5UeXBlID0gbGV4ZXIubmV4dCgpOworICAgICAgICAgICAgaWYgKHRva2Vu
VHlwZSAhPSBJREJLZXlQYXRoTGV4ZXI6OlRva2VuUmlnaHRCcmFja2V0KSB7CisgICAgICAgICAg
ICAgICAgKmVycm9yID0gSURCS2V5UGF0aFBhcnNlRXJyb3JBcnJheUluZGV4OworICAgICAgICAg
ICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgdG9rZW5UeXBlID0g
bGV4ZXIubmV4dCgpOworICAgICAgICAgICAgaWYgKHRva2VuVHlwZSA9PSBJREJLZXlQYXRoTGV4
ZXI6OlRva2VuRG90KQorICAgICAgICAgICAgICAgIHN0YXRlID0gRG90OworICAgICAgICAgICAg
ZWxzZSBpZiAodG9rZW5UeXBlID09IElEQktleVBhdGhMZXhlcjo6VG9rZW5MZWZ0QnJhY2tldCkK
KyAgICAgICAgICAgICAgICBzdGF0ZSA9IEFycmF5OworICAgICAgICAgICAgZWxzZSBpZiAodG9r
ZW5UeXBlID09IElEQktleVBhdGhMZXhlcjo6VG9rZW5FbmQpCisgICAgICAgICAgICAgICAgc3Rh
dGUgPSBFbmQ7CisgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICAqZXJyb3IgPSBJ
REJLZXlQYXRoUGFyc2VFcnJvckFmdGVyQXJyYXk7CisgICAgICAgICAgICAgICAgcmV0dXJuOwor
ICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgY2Fz
ZSBEb3Q6IHsKKyAgICAgICAgICAgIElEQktleVBhdGhMZXhlcjo6VG9rZW5UeXBlIHRva2VuVHlw
ZSA9IGxleGVyLmN1cnJlbnQoKTsKKyAgICAgICAgICAgIEFTU0VSVCh0b2tlblR5cGUgPT0gSURC
S2V5UGF0aExleGVyOjpUb2tlbkRvdCk7CisKKyAgICAgICAgICAgIHRva2VuVHlwZSA9IGxleGVy
Lm5leHQoKTsKKyAgICAgICAgICAgIGlmICh0b2tlblR5cGUgIT0gSURCS2V5UGF0aExleGVyOjpU
b2tlbklkZW50aWZpZXIpIHsKKyAgICAgICAgICAgICAgICAqZXJyb3IgPSBJREJLZXlQYXRoUGFy
c2VFcnJvckRvdDsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisKKyAg
ICAgICAgICAgIHN0YXRlID0gSWRlbnRpZmllcjsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICB9CisgICAgICAgIGNhc2UgRW5kOiB7CisgICAgICAgICAgICAqZXJyb3IgPSBJREJLZXlQYXRo
UGFyc2VFcnJvck5vbmU7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAg
fQorICAgIH0KK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxF
KElOREVYRURfREFUQUJBU0UpCmRpZmYgLS1naXQgYS9XZWJDb3JlL3N0b3JhZ2UvSURCS2V5UGF0
aC5oIGIvV2ViQ29yZS9zdG9yYWdlL0lEQktleVBhdGguaApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5kYTA3MTI5Nzk0
NzNlODA4MDVjM2U4NjU4NDhhNDZkNGJjYWJmMmFjCi0tLSAvZGV2L251bGwKKysrIGIvV2ViQ29y
ZS9zdG9yYWdlL0lEQktleVBhdGguaApAQCAtMCwwICsxLDY0IEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENP
TlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVS
UE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBJ
REJLZXlQYXRoX2gKKyNkZWZpbmUgSURCS2V5UGF0aF9oCisKKyNpZiBFTkFCTEUoSU5ERVhFRF9E
QVRBQkFTRSkKKworI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CisjaW5jbHVkZSA8d3RmL1Jl
ZkNvdW50ZWQuaD4KKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisjaW5jbHVkZSA8d3RmL3RleHQv
V1RGU3RyaW5nLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworc3RydWN0IElEQktleVBhdGhF
bGVtZW50IHsKKyAgICBlbnVtIFR5cGUgeworICAgICAgICBJc0luZGV4ZWQsCisgICAgICAgIElz
TmFtZWQsCisgICAgfTsKKworICAgIFR5cGUgdHlwZTsKKyAgICBpbnQgaW5kZXg7CisgICAgU3Ry
aW5nIGlkZW50aWZpZXI7Cit9OworCitlbnVtIElEQktleVBhdGhQYXJzZUVycm9yIHsKKyAgICBJ
REJLZXlQYXRoUGFyc2VFcnJvck5vbmUsCisgICAgSURCS2V5UGF0aFBhcnNlRXJyb3JTdGFydCwK
KyAgICBJREJLZXlQYXRoUGFyc2VFcnJvcklkZW50aWZpZXIsCisgICAgSURCS2V5UGF0aFBhcnNl
RXJyb3JBcnJheUluZGV4LAorICAgIElEQktleVBhdGhQYXJzZUVycm9yQWZ0ZXJBcnJheSwKKyAg
ICBJREJLZXlQYXRoUGFyc2VFcnJvckRvdCwKK307CisKK3ZvaWQgSURCUGFyc2VLZXlQYXRoKGNv
bnN0IFN0cmluZyYsIFZlY3RvcjxJREJLZXlQYXRoRWxlbWVudD4qLCBJREJLZXlQYXRoUGFyc2VF
cnJvciopOworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZgorCisjZW5kaWYgLy8g
SURCS2V5UGF0aF9oCmRpZmYgLS1naXQgYS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nIGIvV2Vi
S2l0L2Nocm9taXVtL0NoYW5nZUxvZwppbmRleCAyZmViMDgxZDE4YTgzYWNiODYwNDg0NzI3NzNm
ZGYyODU2MTc5ZTZhLi42MzNkMjZiZGMyNGYyNWE4NTQ4ZDM2MWMwMzYyOWEyZDA5NjJjMTMwIDEw
MDY0NAotLS0gYS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCisrKyBiL1dlYktpdC9jaHJvbWl1
bS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyMCBAQAorMjAxMC0wNy0yOCAgTWFyY3VzIEJ1bGFjaCAg
PGJ1bGFjaEBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCisKKyAgICAgICAgSW1wbGVtZW50IElEQktleVBhdGggcGFyc2VyLgorICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDI5NzYKKworICAgICAgICBJREJL
ZXlQYXRoIGlzIGFuIGludGVybmFsIGNsYXNzLCBleHBvc2VkIG9ubHkgZm9yIHVuaXQgdGVzdHMg
Zm9yIG5vdy4KKyAgICAgICAgSXQnbGwgYWxsb3cgaW5kZXhlZCBkYXRhYmFzZSBpbXBsZW1lbnRh
dGlvbiB0byB0cmF2ZXJzZSBhIGdpdmVuIGtleSBwYXRoIGFuZCBvYnRhaW4gdGhlIGNvcnJlc3Bv
bmRpbmcgcHJvcGVydGllcworICAgICAgICBmcm9tIGEgU2VyaWFsaXplZFNjcmlwdFZhbHVlLgor
CisgICAgICAgICogV2ViS2l0Lmd5cDoKKyAgICAgICAgKiB0ZXN0cy9JREJLZXlQYXRoVGVzdC5j
cHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6RXhwZWN0ZWRUb2tlbjo6RXhwZWN0ZWRUb2tl
bik6CisgICAgICAgIChXZWJDb3JlOjpjaGVja0tleVBhdGgpOgorICAgICAgICAoV2ViQ29yZTo6
VEVTVCk6CisKIDIwMTAtMDgtMDUgIFNhdGlzaCBTYW1wYXRoICA8c2F0aXNoQGNocm9taXVtLm9y
Zz4KIAogICAgICAgICBSZXZpZXdlZCBieSBKZXJlbXkgT3Jsb3cuCmRpZmYgLS1naXQgYS9XZWJL
aXQvY2hyb21pdW0vV2ViS2l0Lmd5cCBiL1dlYktpdC9jaHJvbWl1bS9XZWJLaXQuZ3lwCmluZGV4
IGQ2YWYzZmZkZDk2MDE1ZTE0N2NlMzIzOWE3NWRkZTdkN2IyOTYzYTQuLjUyYzBkYTZjMmY3NTc5
NGMyOWE5MDgxZjlkZTU0YzlkNWFiYTI4N2QgMTAwNjQ0Ci0tLSBhL1dlYktpdC9jaHJvbWl1bS9X
ZWJLaXQuZ3lwCisrKyBiL1dlYktpdC9jaHJvbWl1bS9XZWJLaXQuZ3lwCkBAIC02OTYsNiArNjk2
LDcgQEAKICAgICAgICAgICAgICAgICAgICAgXSwKICAgICAgICAgICAgICAgICAgICAgJ3NvdXJj
ZXMnOiBbCiAgICAgICAgICAgICAgICAgICAgICAgICAndGVzdHMvRHJhZ0ltYWdlVGVzdC5jcHAn
LAorICAgICAgICAgICAgICAgICAgICAgICAgJ3Rlc3RzL0lEQktleVBhdGhUZXN0LmNwcCcsCiAg
ICAgICAgICAgICAgICAgICAgICAgICAndGVzdHMvS2V5Ym9hcmRUZXN0LmNwcCcsCiAgICAgICAg
ICAgICAgICAgICAgICAgICAndGVzdHMvS1VSTFRlc3QuY3BwJywKICAgICAgICAgICAgICAgICAg
ICAgICAgICd0ZXN0cy9SdW5BbGxUZXN0cy5jcHAnLApkaWZmIC0tZ2l0IGEvV2ViS2l0L2Nocm9t
aXVtL3Rlc3RzL0lEQktleVBhdGhUZXN0LmNwcCBiL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9JREJL
ZXlQYXRoVGVzdC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uN2JmODVjMjU0ODA0NTc1ZDBhMzJlODE1MzAxNDVi
NTMwODRkNzkxOQotLS0gL2Rldi9udWxsCisrKyBiL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9JREJL
ZXlQYXRoVGVzdC5jcHAKQEAgLTAsMCArMSwxODkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVU
T1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFS
RQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
KyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmln
LmgiCisjaW5jbHVkZSAiSURCS2V5UGF0aC5oIgorCisjaW5jbHVkZSA8Z3Rlc3QvZ3Rlc3QuaD4K
KyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisKKyNpZiBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkK
KwordXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CisKK25hbWVzcGFjZSB7CisKK0lEQktleVBhdGhF
bGVtZW50IEV4cGVjdGVkVG9rZW4oY29uc3QgU3RyaW5nJiBpZGVudGlmaWVyLCBib29sIGlzSW5k
ZXhlZCwgaW50IGluZGV4KQoreworICAgIElEQktleVBhdGhFbGVtZW50IGV4cGVjdGVkOworICAg
IGlmIChpc0luZGV4ZWQpIHsKKyAgICAgICAgZXhwZWN0ZWQudHlwZSA9IElEQktleVBhdGhFbGVt
ZW50OjpJc0luZGV4ZWQ7CisgICAgICAgIGV4cGVjdGVkLmluZGV4ID0gaW5kZXg7CisgICAgfSBl
bHNlIHsKKyAgICAgICAgZXhwZWN0ZWQudHlwZSA9IElEQktleVBhdGhFbGVtZW50OjpJc05hbWVk
OworICAgICAgICBleHBlY3RlZC5pZGVudGlmaWVyID0gaWRlbnRpZmllcjsKKyAgICB9CisgICAg
cmV0dXJuIGV4cGVjdGVkOworfQorCit2b2lkIGNoZWNrS2V5UGF0aChjb25zdCBTdHJpbmcmIGtl
eVBhdGgsIGNvbnN0IFZlY3RvcjxJREJLZXlQYXRoRWxlbWVudD4mIGV4cGVjdGVkLCBpbnQgcGFy
c2VyRXJyb3IpCit7CisKKyAgICBJREJLZXlQYXRoUGFyc2VFcnJvciBlcnJvcjsKKyAgICBWZWN0
b3I8SURCS2V5UGF0aEVsZW1lbnQ+IGlkYktleVBhdGhFbGVtZW50czsKKyAgICBJREJQYXJzZUtl
eVBhdGgoa2V5UGF0aCwgJmlkYktleVBhdGhFbGVtZW50cywgJmVycm9yKTsKKyAgICBBU1NFUlRf
RVEocGFyc2VyRXJyb3IsIGVycm9yKTsKKyAgICBpZiAoZXJyb3IgIT0gSURCS2V5UGF0aFBhcnNl
RXJyb3JOb25lKQorICAgICAgICByZXR1cm47CisgICAgQVNTRVJUX0VRKGV4cGVjdGVkLnNpemUo
KSwgaWRiS2V5UGF0aEVsZW1lbnRzLnNpemUoKSk7CisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBl
eHBlY3RlZC5zaXplKCk7ICsraSkgeworICAgICAgICBBU1NFUlRfVFJVRShleHBlY3RlZFtpXS50
eXBlID09IGlkYktleVBhdGhFbGVtZW50c1tpXS50eXBlKSA8PCBpOworICAgICAgICBpZiAoZXhw
ZWN0ZWRbaV0udHlwZSA9PSBJREJLZXlQYXRoRWxlbWVudDo6SXNJbmRleGVkKQorICAgICAgICAg
IEFTU0VSVF9FUShleHBlY3RlZFtpXS5pbmRleCwgaWRiS2V5UGF0aEVsZW1lbnRzW2ldLmluZGV4
KSA8PCBpOworICAgICAgICBlbHNlIGlmIChleHBlY3RlZFtpXS50eXBlID09IElEQktleVBhdGhF
bGVtZW50OjpJc05hbWVkKQorICAgICAgICAgIEFTU0VSVF9UUlVFKGV4cGVjdGVkW2ldLmlkZW50
aWZpZXIgPT0gaWRiS2V5UGF0aEVsZW1lbnRzW2ldLmlkZW50aWZpZXIpIDw8IGk7CisgICAgICAg
IGVsc2UKKyAgICAgICAgICBBU1NFUlRfVFJVRShmYWxzZSkgPDwgIkludmFsaWQgSURCS2V5UGF0
aEVsZW1lbnQgdHlwZSI7CisgICAgfQorfQorCitURVNUKElEQktleVBhdGhUZXN0LCBWYWxpZEtl
eVBhdGgwKQoreworICAgIFZlY3RvcjxJREJLZXlQYXRoRWxlbWVudD4gZXhwZWN0ZWQ7CisgICAg
U3RyaW5nIGtleVBhdGgoImZvby5iYXIuem9vIik7CisgICAgZXhwZWN0ZWQuYXBwZW5kKEV4cGVj
dGVkVG9rZW4oImZvbyIsIGZhbHNlLCAwKSk7CisgICAgZXhwZWN0ZWQuYXBwZW5kKEV4cGVjdGVk
VG9rZW4oImJhciIsIGZhbHNlLCAwKSk7CisgICAgZXhwZWN0ZWQuYXBwZW5kKEV4cGVjdGVkVG9r
ZW4oInpvbyIsIGZhbHNlLCAwKSk7CisgICAgY2hlY2tLZXlQYXRoKGtleVBhdGgsIGV4cGVjdGVk
LCAwKTsKK30KKworVEVTVChJREJLZXlQYXRoVGVzdCwgVmFsaWRLZXlQYXRoMSkKK3sKKyAgICBW
ZWN0b3I8SURCS2V5UGF0aEVsZW1lbnQ+IGV4cGVjdGVkOworICAgIFN0cmluZyBrZXlQYXRoKCJh
WzM0XVsyMF0uZm9vWzJdLmJhciIpOworICAgIGV4cGVjdGVkLmFwcGVuZChFeHBlY3RlZFRva2Vu
KCJhIiwgZmFsc2UsIDApKTsKKyAgICBleHBlY3RlZC5hcHBlbmQoRXhwZWN0ZWRUb2tlbihTdHJp
bmcoKSwgdHJ1ZSwgMzQpKTsKKyAgICBleHBlY3RlZC5hcHBlbmQoRXhwZWN0ZWRUb2tlbihTdHJp
bmcoKSwgdHJ1ZSwgMjApKTsKKyAgICBleHBlY3RlZC5hcHBlbmQoRXhwZWN0ZWRUb2tlbigiZm9v
IiwgZmFsc2UsIDApKTsKKyAgICBleHBlY3RlZC5hcHBlbmQoRXhwZWN0ZWRUb2tlbihTdHJpbmco
KSwgdHJ1ZSwgMikpOworICAgIGV4cGVjdGVkLmFwcGVuZChFeHBlY3RlZFRva2VuKCJiYXIiLCBm
YWxzZSwgMCkpOworICAgIGNoZWNrS2V5UGF0aChrZXlQYXRoLCBleHBlY3RlZCwgMCk7Cit9CisK
K1RFU1QoSURCS2V5UGF0aFRlc3QsIFZhbGlkS2V5UGF0aDIpCit7CisgICAgVmVjdG9yPElEQktl
eVBhdGhFbGVtZW50PiBleHBlY3RlZDsKKyAgICBTdHJpbmcga2V5UGF0aCgiZm9vWyAzNCBdLlpv
b19bMDAwMjNdXHQuX2MiKTsKKyAgICBleHBlY3RlZC5hcHBlbmQoRXhwZWN0ZWRUb2tlbigiZm9v
IiwgZmFsc2UsIDApKTsKKyAgICBleHBlY3RlZC5hcHBlbmQoRXhwZWN0ZWRUb2tlbihTdHJpbmco
KSwgdHJ1ZSwgMzQpKTsKKyAgICBleHBlY3RlZC5hcHBlbmQoRXhwZWN0ZWRUb2tlbigiWm9vXyIs
IGZhbHNlLCAwKSk7CisgICAgZXhwZWN0ZWQuYXBwZW5kKEV4cGVjdGVkVG9rZW4oU3RyaW5nKCks
IHRydWUsIDIzKSk7CisgICAgZXhwZWN0ZWQuYXBwZW5kKEV4cGVjdGVkVG9rZW4oIl9jIiwgZmFs
c2UsIDApKTsKKyAgICBjaGVja0tleVBhdGgoa2V5UGF0aCwgZXhwZWN0ZWQsIDApOworfQorCitU
RVNUKElEQktleVBhdGhUZXN0LCBWYWxpZEtleVBhdGgzKQoreworICAgIFZlY3RvcjxJREJLZXlQ
YXRoRWxlbWVudD4gZXhwZWN0ZWQ7CisgICAgU3RyaW5nIGtleVBhdGgoImZvb1sgMzQgXSIpOwor
ICAgIGV4cGVjdGVkLmFwcGVuZChFeHBlY3RlZFRva2VuKCJmb28iLCBmYWxzZSwgMCkpOworICAg
IGV4cGVjdGVkLmFwcGVuZChFeHBlY3RlZFRva2VuKFN0cmluZygpLCB0cnVlLCAzNCkpOworICAg
IGNoZWNrS2V5UGF0aChrZXlQYXRoLCBleHBlY3RlZCwgMCk7Cit9CisKK1RFU1QoSURCS2V5UGF0
aFRlc3QsIFZhbGlkS2V5UGF0aDQpCit7CisgICAgVmVjdG9yPElEQktleVBhdGhFbGVtZW50PiBl
eHBlY3RlZDsKKyAgICBTdHJpbmcga2V5UGF0aCgiWyAzNCBdIik7CisgICAgZXhwZWN0ZWQuYXBw
ZW5kKEV4cGVjdGVkVG9rZW4oU3RyaW5nKCksIHRydWUsIDM0KSk7CisgICAgY2hlY2tLZXlQYXRo
KGtleVBhdGgsIGV4cGVjdGVkLCAwKTsKK30KKworVEVTVChJREJLZXlQYXRoVGVzdCwgSW52YWxp
ZEtleVBhdGgyKQoreworICAgIFZlY3RvcjxJREJLZXlQYXRoRWxlbWVudD4gZXhwZWN0ZWQ7Cisg
ICAgU3RyaW5nIGtleVBhdGgoImFbWzM0XV0uYlsyXS5jIik7CisgICAgZXhwZWN0ZWQuYXBwZW5k
KEV4cGVjdGVkVG9rZW4oImEiLCBmYWxzZSwgMCkpOworICAgIGNoZWNrS2V5UGF0aChrZXlQYXRo
LCBleHBlY3RlZCwgMyk7Cit9CisKK1RFU1QoSURCS2V5UGF0aFRlc3QsIEludmFsaWRLZXlQYXRo
MykKK3sKKyAgICBWZWN0b3I8SURCS2V5UGF0aEVsZW1lbnQ+IGV4cGVjdGVkOworICAgIFN0cmlu
ZyBrZXlQYXRoKCJhW1szNF0uYlsyXS5jIik7CisgICAgZXhwZWN0ZWQuYXBwZW5kKEV4cGVjdGVk
VG9rZW4oImEiLCBmYWxzZSwgMCkpOworICAgIGNoZWNrS2V5UGF0aChrZXlQYXRoLCBleHBlY3Rl
ZCwgMyk7Cit9CisKK1RFU1QoSURCS2V5UGF0aFRlc3QsIEludmFsaWRLZXlQYXRoNSkKK3sKKyAg
ICBWZWN0b3I8SURCS2V5UGF0aEVsZW1lbnQ+IGV4cGVjdGVkOworICAgIFN0cmluZyBrZXlQYXRo
KCJhW1szNC5iWzJdLmMiKTsKKyAgICBleHBlY3RlZC5hcHBlbmQoRXhwZWN0ZWRUb2tlbigiYSIs
IGZhbHNlLCAwKSk7CisgICAgY2hlY2tLZXlQYXRoKGtleVBhdGgsIGV4cGVjdGVkLCAzKTsKK30K
KworVEVTVChJREJLZXlQYXRoVGVzdCwgSW52YWxpZEtleVBhdGg2KQoreworICAgIFZlY3RvcjxJ
REJLZXlQYXRoRWxlbWVudD4gZXhwZWN0ZWQ7CisgICAgU3RyaW5nIGtleVBhdGgoIithWzM0XS5i
WzJdLmMiKTsKKyAgICBjaGVja0tleVBhdGgoa2V5UGF0aCwgZXhwZWN0ZWQsIDEpOworfQorCitU
RVNUKElEQktleVBhdGhUZXN0LCBJbnZhbGlkS2V5UGF0aDcpCit7CisgICAgVmVjdG9yPElEQktl
eVBhdGhFbGVtZW50PiBleHBlY3RlZDsKKyAgICBTdHJpbmcga2V5UGF0aCgiJWFbMzRdLmJbMl0u
YyIpOworICAgIGNoZWNrS2V5UGF0aChrZXlQYXRoLCBleHBlY3RlZCwgMSk7Cit9CisKK1RFU1Qo
SURCS2V5UGF0aFRlc3QsIEludmFsaWRLZXlQYXRoOCkKK3sKKyAgICBWZWN0b3I8SURCS2V5UGF0
aEVsZW1lbnQ+IGV4cGVjdGVkOworICAgIFN0cmluZyBrZXlQYXRoKCJhe1szNF19LmJbMl0uYyIp
OworICAgIGV4cGVjdGVkLmFwcGVuZChFeHBlY3RlZFRva2VuKCJhIiwgZmFsc2UsIDApKTsKKyAg
ICBjaGVja0tleVBhdGgoa2V5UGF0aCwgZXhwZWN0ZWQsIDIpOworfQorCitURVNUKElEQktleVBh
dGhUZXN0LCBJbnZhbGlkS2V5UGF0aDkpCit7CisgICAgVmVjdG9yPElEQktleVBhdGhFbGVtZW50
PiBleHBlY3RlZDsKKyAgICBTdHJpbmcga2V5UGF0aCgiYS4uYlsyXS5jIik7CisgICAgZXhwZWN0
ZWQuYXBwZW5kKEV4cGVjdGVkVG9rZW4oImEiLCBmYWxzZSwgMCkpOworICAgIGNoZWNrS2V5UGF0
aChrZXlQYXRoLCBleHBlY3RlZCwgNSk7Cit9CisKK1RFU1QoSURCS2V5UGF0aFRlc3QsIEludmFs
aWRLZXlQYXRoMTApCit7CisgICAgVmVjdG9yPElEQktleVBhdGhFbGVtZW50PiBleHBlY3RlZDsK
KyAgICBTdHJpbmcga2V5UGF0aCgiYVszNF1iLmZvb1syXS5iYXIiKTsKKyAgICBleHBlY3RlZC5h
cHBlbmQoRXhwZWN0ZWRUb2tlbigiYSIsIGZhbHNlLCAwKSk7CisgICAgZXhwZWN0ZWQuYXBwZW5k
KEV4cGVjdGVkVG9rZW4oU3RyaW5nKCksIHRydWUsIDM0KSk7CisgICAgY2hlY2tLZXlQYXRoKGtl
eVBhdGgsIGV4cGVjdGVkLCA0KTsKK30KKworfSAvLyBuYW1lc3BhY2UKKworI2VuZGlmIC8vIEVO
QUJMRShJTkRFWEVEX0RBVEFCQVNFKQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>64124</attachid>
            <date>2010-08-11 09:29:45 -0700</date>
            <delta_ts>2010-08-12 05:43:58 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-42976-20100811172943.patch</filename>
            <type>text/plain</type>
            <size>21523</size>
            <attacher name="Marcus Bulach">bulach</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
MWNmMjc4MGIzMWI1ZTU0ZTMwZDNhMWIyZTUyNTg5ZGE0OWEzN2EyMi4uMmQzZTEwZGUwMjkyZDdm
NjFlMjg0OGM4ZTQwOTkxY2EzNmJkMjEyNiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cK
KysrIGIvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwzOCBAQAorMjAxMC0wNy0yOCAgTWFy
Y3VzIEJ1bGFjaCAgPGJ1bGFjaEBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
Tk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgSW1wbGVtZW50IElEQktleVBhdGggcGFyc2VyLgor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDI5NzYKKwor
ICAgICAgICBJREJLZXlQYXRoIGlzIGFuIGludGVybmFsIGNsYXNzLCBleHBvc2VkIG9ubHkgZm9y
IHVuaXQgdGVzdHMgZm9yIG5vdy4KKyAgICAgICAgSXQnbGwgYWxsb3cgaW5kZXhlZCBkYXRhYmFz
ZSBpbXBsZW1lbnRhdGlvbiB0byB0cmF2ZXJzZSBhIGdpdmVuIGtleSBwYXRoIGFuZCBvYnRhaW4g
dGhlIGNvcnJlc3BvbmRpbmcgcHJvcGVydGllcworICAgICAgICBmcm9tIGEgU2VyaWFsaXplZFNj
cmlwdFZhbHVlLgorCisgICAgICAgICogV2ViQ29yZS5neXBpOgorICAgICAgICAqIHN0b3JhZ2Uv
SURCS2V5UGF0aC5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6SURCS2V5UGF0aDo6Y3Jl
YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OklEQktleVBhdGg6OklEQktleVBhdGgpOgorICAgICAg
ICAoV2ViQ29yZTo6SURCS2V5UGF0aDo6fklEQktleVBhdGgpOgorICAgICAgICAoV2ViQ29yZTo6
SURCS2V5UGF0aDo6aGFzTmV4dCk6CisgICAgICAgIChXZWJDb3JlOjpJREJLZXlQYXRoOjpuZXh0
KToKKyAgICAgICAgKFdlYkNvcmU6OklEQktleVBhdGg6OmlkZW50aWZpZXIpOgorICAgICAgICAo
V2ViQ29yZTo6SURCS2V5UGF0aDo6aGFzSW5kZXgpOgorICAgICAgICAoV2ViQ29yZTo6SURCS2V5
UGF0aDo6aW5kZXhWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpJREJLZXlQYXRoOjpwYXJzZXJF
cnJvcik6CisgICAgICAgIChXZWJDb3JlOjpJREJLZXlQYXRoOjpwYXJzZSk6CisgICAgICAgIChX
ZWJDb3JlOjpJREJLZXlQYXRoOjpMZXhlcjo6bGV4KToKKyAgICAgICAgKFdlYkNvcmU6OmlzU2Fm
ZUlkZW50aWZpZXJTdGFydENoYXJhY3Rlcik6CisgICAgICAgIChXZWJDb3JlOjppc1NhZmVJZGVu
dGlmaWVyQ2hhcmFjdGVyKToKKyAgICAgICAgKFdlYkNvcmU6OklEQktleVBhdGg6OkxleGVyOjps
ZXhJZGVudGlmaWVyKToKKyAgICAgICAgKFdlYkNvcmU6OklEQktleVBhdGg6OkxleGVyOjpsZXhO
dW1iZXIpOgorICAgICAgICAqIHN0b3JhZ2UvSURCS2V5UGF0aC5oOiBBZGRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OklEQktleVBhdGg6OlRva2VuOjpUb2tlbik6CisgICAgICAgIChXZWJDb3JlOjpJ
REJLZXlQYXRoOjopOgorICAgICAgICAoV2ViQ29yZTo6SURCS2V5UGF0aDo6TGV4ZXI6OkxleGVy
KToKKyAgICAgICAgKFdlYkNvcmU6OklEQktleVBhdGg6OkxleGVyOjpuZXh0KToKKyAgICAgICAg
KFdlYkNvcmU6OklEQktleVBhdGg6OkxleGVyOjpjdXJyZW50VG9rZW4pOgorCiAyMDEwLTA4LTEx
ICBGdW1pdG9zaGkgVWthaSAgPHVrYWlAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFVucmV2aWV3
ZWQgYnVpbGQgZml4IG9mIExlb3BhcmQgSW50ZWwgRGVidWcgKEJ1aWxkKQpkaWZmIC0tZ2l0IGEv
V2ViQ29yZS9XZWJDb3JlLmd5cGkgYi9XZWJDb3JlL1dlYkNvcmUuZ3lwaQppbmRleCBhMGMyZDE0
MGFjNmJiZmQ3M2Y3NTVjMzc5MDAzYzA3MjE5ZTUwYjAzLi40ZTdlYWY3NWVjMTQ3NmM4NjNjNWM0
YTU5ZTBiZmQ3Yzc1MWJmYjUwIDEwMDY0NAotLS0gYS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQorKysg
Yi9XZWJDb3JlL1dlYkNvcmUuZ3lwaQpAQCAtMzU0NCw2ICszNTQ0LDggQEAKICAgICAgICAgICAg
ICdzdG9yYWdlL0lEQkluZGV4QmFja2VuZEltcGwuaCcsCiAgICAgICAgICAgICAnc3RvcmFnZS9J
REJLZXkuY3BwJywKICAgICAgICAgICAgICdzdG9yYWdlL0lEQktleS5oJywKKyAgICAgICAgICAg
ICdzdG9yYWdlL0lEQktleVBhdGguY3BwJywKKyAgICAgICAgICAgICdzdG9yYWdlL0lEQktleVBh
dGguaCcsCiAgICAgICAgICAgICAnc3RvcmFnZS9JREJLZXlSYW5nZS5jcHAnLAogICAgICAgICAg
ICAgJ3N0b3JhZ2UvSURCS2V5UmFuZ2UuaCcsCiAgICAgICAgICAgICAnc3RvcmFnZS9JREJLZXlU
cmVlLmgnLApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9zdG9yYWdlL0lEQktleVBhdGguY3BwIGIvV2Vi
Q29yZS9zdG9yYWdlL0lEQktleVBhdGguY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmNjOTc1NDViMDdlYWE5NDU3
NmRjYThmMDgzODNlMDJiOWEzOGJjMzMKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJDb3JlL3N0b3Jh
Z2UvSURCS2V5UGF0aC5jcHAKQEAgLTAsMCArMSwyNzUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJ
QlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NF
IEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29u
ZmlnLmgiCisjaW5jbHVkZSAiSURCS2V5UGF0aC5oIgorCisjaWYgRU5BQkxFKElOREVYRURfREFU
QUJBU0UpCisKKyNpbmNsdWRlIDx3dGYvQVNDSUlDVHlwZS5oPgorI2luY2x1ZGUgPHd0Zi9kdG9h
Lmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgSURCS2V5UGF0aExleGVyIHsKK3B1
YmxpYzoKKyAgICBlbnVtIFRva2VuVHlwZSB7CisgICAgICAgIFRva2VuTGVmdEJyYWNrZXQsCisg
ICAgICAgIFRva2VuUmlnaHRCcmFja2V0LAorICAgICAgICBUb2tlbklkZW50aWZpZXIsCisgICAg
ICAgIFRva2VuTnVtYmVyLAorICAgICAgICBUb2tlbkRvdCwKKyAgICAgICAgVG9rZW5FbmQsCisg
ICAgICAgIFRva2VuRXJyb3IKKyAgICB9OworCisgICAgZXhwbGljaXQgSURCS2V5UGF0aExleGVy
KGNvbnN0IFN0cmluZyYgcykKKyAgICAgICAgOiBtX3N0cmluZyhzKQorICAgICAgICAsIG1fcHRy
KHMuY2hhcmFjdGVycygpKQorICAgICAgICAsIG1fZW5kKHMuY2hhcmFjdGVycygpICsgcy5sZW5n
dGgoKSkKKyAgICAgICAgLCBtX2N1cnJlbnRUb2tlblR5cGUoVG9rZW5FcnJvcikKKyAgICB7Cisg
ICAgfQorCisgICAgVG9rZW5UeXBlIGN1cnJlbnQoKSBjb25zdAorICAgIHsKKyAgICAgIHJldHVy
biBtX2N1cnJlbnRUb2tlblR5cGU7CisgICAgfQorCisgICAgVG9rZW5UeXBlIG5leHQoKQorICAg
IHsKKyAgICAgICAgbV9jdXJyZW50VG9rZW5UeXBlID0gbGV4KG1fY3VycmVudEVsZW1lbnQpOwor
ICAgICAgICByZXR1cm4gbV9jdXJyZW50VG9rZW5UeXBlOworICAgIH0KKworICAgIGNvbnN0IElE
QktleVBhdGhFbGVtZW50JiBjdXJyZW50RWxlbWVudCgpCisgICAgeworICAgICAgICByZXR1cm4g
bV9jdXJyZW50RWxlbWVudDsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgVG9rZW5UeXBlIGxleChJ
REJLZXlQYXRoRWxlbWVudCYpOworICAgIFRva2VuVHlwZSBsZXhJZGVudGlmaWVyKElEQktleVBh
dGhFbGVtZW50Jik7CisgICAgVG9rZW5UeXBlIGxleE51bWJlcihJREJLZXlQYXRoRWxlbWVudCYp
OworICAgIElEQktleVBhdGhFbGVtZW50IG1fY3VycmVudEVsZW1lbnQ7CisgICAgU3RyaW5nIG1f
c3RyaW5nOworICAgIGNvbnN0IFVDaGFyKiBtX3B0cjsKKyAgICBjb25zdCBVQ2hhciogbV9lbmQ7
CisgICAgVG9rZW5UeXBlIG1fY3VycmVudFRva2VuVHlwZTsKK307CisKK0lEQktleVBhdGhMZXhl
cjo6VG9rZW5UeXBlIElEQktleVBhdGhMZXhlcjo6bGV4KElEQktleVBhdGhFbGVtZW50JiBlbGVt
ZW50KQoreworICAgIHdoaWxlIChtX3B0ciA8IG1fZW5kICYmIGlzQVNDSUlTcGFjZSgqbV9wdHIp
KQorICAgICAgICArK21fcHRyOworCisgICAgaWYgKG1fcHRyID49IG1fZW5kKQorICAgICAgICBy
ZXR1cm4gVG9rZW5FbmQ7CisKKyAgICBBU1NFUlQobV9wdHIgPCBtX2VuZCk7CisgICAgc3dpdGNo
ICgqbV9wdHIpIHsKKyAgICBjYXNlICdbJzoKKyAgICAgICAgKyttX3B0cjsKKyAgICAgICAgcmV0
dXJuIFRva2VuTGVmdEJyYWNrZXQ7CisgICAgY2FzZSAnXSc6CisgICAgICAgICsrbV9wdHI7Cisg
ICAgICAgIHJldHVybiBUb2tlblJpZ2h0QnJhY2tldDsKKyAgICBjYXNlICcuJzoKKyAgICAgICAg
KyttX3B0cjsKKyAgICAgICAgcmV0dXJuIFRva2VuRG90OworICAgIGNhc2UgJzAnOgorICAgIGNh
c2UgJzEnOgorICAgIGNhc2UgJzInOgorICAgIGNhc2UgJzMnOgorICAgIGNhc2UgJzQnOgorICAg
IGNhc2UgJzUnOgorICAgIGNhc2UgJzYnOgorICAgIGNhc2UgJzcnOgorICAgIGNhc2UgJzgnOgor
ICAgIGNhc2UgJzknOgorICAgICAgICByZXR1cm4gbGV4TnVtYmVyKGVsZW1lbnQpOworICAgIGRl
ZmF1bHQ6CisgICAgICAgIHJldHVybiBsZXhJZGVudGlmaWVyKGVsZW1lbnQpOworICAgIH0KKyAg
ICByZXR1cm4gVG9rZW5FcnJvcjsKK30KKworc3RhdGljIGlubGluZSBib29sIGlzU2FmZUlkZW50
aWZpZXJTdGFydENoYXJhY3RlcihVQ2hhciBjKQoreworICAgIHJldHVybiBpc0FTQ0lJQWxwaGEo
YykgfHwgKGMgPT0gJ18nKSB8fCAoYyA9PSAnJCcpOworfQorCitzdGF0aWMgaW5saW5lIGJvb2wg
aXNTYWZlSWRlbnRpZmllckNoYXJhY3RlcihVQ2hhciBjKQoreworICAgIHJldHVybiBpc0FTQ0lJ
QWxwaGFudW1lcmljKGMpIHx8IChjID09ICdfJykgfHwgKGMgPT0gJyQnKTsKK30KKworSURCS2V5
UGF0aExleGVyOjpUb2tlblR5cGUgSURCS2V5UGF0aExleGVyOjpsZXhJZGVudGlmaWVyKElEQktl
eVBhdGhFbGVtZW50JiBlbGVtZW50KQoreworICAgIGNvbnN0IFVDaGFyKiBzdGFydCA9IG1fcHRy
OworICAgIGlmIChtX3B0ciA8IG1fZW5kICYmIGlzU2FmZUlkZW50aWZpZXJTdGFydENoYXJhY3Rl
cigqbV9wdHIpKQorICAgICAgICArK21fcHRyOworICAgIGVsc2UKKyAgICAgICAgcmV0dXJuIFRv
a2VuRXJyb3I7CisKKyAgICB3aGlsZSAobV9wdHIgPCBtX2VuZCAmJiBpc1NhZmVJZGVudGlmaWVy
Q2hhcmFjdGVyKCptX3B0cikpCisgICAgICAgICsrbV9wdHI7CisKKyAgICBlbGVtZW50LnR5cGUg
PSBJREJLZXlQYXRoRWxlbWVudDo6SXNOYW1lZDsKKyAgICBlbGVtZW50LmlkZW50aWZpZXIgPSBT
dHJpbmcoc3RhcnQsIG1fcHRyIC0gc3RhcnQpOworICAgIHJldHVybiBUb2tlbklkZW50aWZpZXI7
Cit9CisKK0lEQktleVBhdGhMZXhlcjo6VG9rZW5UeXBlIElEQktleVBhdGhMZXhlcjo6bGV4TnVt
YmVyKElEQktleVBhdGhFbGVtZW50JiBlbGVtZW50KQoreworICAgIGlmIChtX3B0ciA+PSBtX2Vu
ZCkKKyAgICAgICAgcmV0dXJuIFRva2VuRXJyb3I7CisKKyAgICBjb25zdCBVQ2hhciogc3RhcnQg
PSBtX3B0cjsKKyAgICAvLyBbMC05XSoKKyAgICB3aGlsZSAobV9wdHIgPCBtX2VuZCAmJiBpc0FT
Q0lJRGlnaXQoKm1fcHRyKSkKKyAgICAgICAgKyttX3B0cjsKKworICAgIFN0cmluZyBudW1iZXJB
c1N0cmluZzsKKyAgICBudW1iZXJBc1N0cmluZyA9IFN0cmluZyhzdGFydCwgbV9wdHIgLSBzdGFy
dCk7CisgICAgYm9vbCBvayA9IGZhbHNlOworICAgIGludCBudW1iZXIgPSBudW1iZXJBc1N0cmlu
Zy50b0ludFN0cmljdCgmb2spOworICAgIGlmICghb2spCisgICAgICAgIHJldHVybiBUb2tlbkVy
cm9yOworCisgICAgZWxlbWVudC50eXBlID0gSURCS2V5UGF0aEVsZW1lbnQ6OklzSW5kZXhlZDsK
KyAgICBlbGVtZW50LmluZGV4ID0gbnVtYmVyOworICAgIHJldHVybiBUb2tlbk51bWJlcjsKK30K
Kwordm9pZCBJREJQYXJzZUtleVBhdGgoY29uc3QgU3RyaW5nJiBrZXlQYXRoLCBWZWN0b3I8SURC
S2V5UGF0aEVsZW1lbnQ+JiBlbGVtZW50cywgSURCS2V5UGF0aFBhcnNlRXJyb3ImIGVycm9yKQor
eworICAgIC8vIFRoaXMgaXMgYSBzaW1wbGlmaWVkIHBhcnNlciBsb29zZWx5IGJhc2VkIG9uIExp
dGVyYWxQYXJzZXIuCisgICAgLy8gQW4gSURCS2V5UGF0aCBpcyBkZWZpbmVkIGFzIGEgc2VxdWVu
Y2Ugb2Y6CisgICAgLy8gaWRlbnRpZmllckF7LmlkZW50aWZpZXJCe1tudW1lcmljX3ZhbHVlXX0K
KyAgICAvLyB3aGVyZSAie30iIHJlcHJlc2VudHMgYW4gb3B0aW9uYWwgcGFydAorICAgIC8vIFRo
ZSBiYXNpYyBzdGF0ZSBtYWNoaW5lIGlzOgorICAgIC8vIFN0YXJ0ID0+IHtJZGVudGlmaWVyLCBB
cnJheX0KKyAgICAvLyBJZGVudGlmaWVyID0+IHtEb3QsIEFycmF5LCBFbmR9CisgICAgLy8gQXJy
YXkgPT4ge1N0YXJ0LCBEb3QsIEVuZH0KKyAgICAvLyBEb3QgPT4ge0lkZW50aWZpZXJ9CisgICAg
Ly8gSXQgYmFpbHMgb3V0IGFzIHNvb24gYXMgaXQgZmluZHMgYW4gZXJyb3IsIGJ1dCBkb2Vzbid0
IGRpc2NhcmQgdGhlIGJpdHMgaXQgbWFuYWdlZCB0byBwYXJzZS4KKyAgICBlbnVtIFBhcnNlclN0
YXRlIHsgSWRlbnRpZmllciwgQXJyYXksIERvdCwgRW5kIH07CisKKyAgICBJREJLZXlQYXRoTGV4
ZXIgbGV4ZXIoa2V5UGF0aCk7CisgICAgSURCS2V5UGF0aExleGVyOjpUb2tlblR5cGUgdG9rZW5U
eXBlID0gbGV4ZXIubmV4dCgpOworICAgIFBhcnNlclN0YXRlIHN0YXRlOworICAgIGlmICh0b2tl
blR5cGUgPT0gSURCS2V5UGF0aExleGVyOjpUb2tlbklkZW50aWZpZXIpCisgICAgICAgIHN0YXRl
ID0gSWRlbnRpZmllcjsKKyAgICBlbHNlIGlmICh0b2tlblR5cGUgPT0gSURCS2V5UGF0aExleGVy
OjpUb2tlbkxlZnRCcmFja2V0KQorICAgICAgICBzdGF0ZSA9IEFycmF5OworICAgIGVsc2UgaWYg
KHRva2VuVHlwZSA9PSBJREJLZXlQYXRoTGV4ZXI6OlRva2VuRW5kKQorICAgICAgICBzdGF0ZSA9
IEVuZDsKKyAgICBlbHNlIHsKKyAgICAgICAgZXJyb3IgPSBJREJLZXlQYXRoUGFyc2VFcnJvclN0
YXJ0OworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgd2hpbGUgKDEpIHsKKyAgICAgICAg
c3dpdGNoIChzdGF0ZSkgeworICAgICAgICBjYXNlIElkZW50aWZpZXIgOiB7CisgICAgICAgICAg
ICBJREJLZXlQYXRoTGV4ZXI6OlRva2VuVHlwZSB0b2tlblR5cGUgPSBsZXhlci5jdXJyZW50KCk7
CisgICAgICAgICAgICBBU1NFUlQodG9rZW5UeXBlID09IElEQktleVBhdGhMZXhlcjo6VG9rZW5J
ZGVudGlmaWVyKTsKKworICAgICAgICAgICAgSURCS2V5UGF0aEVsZW1lbnQgZWxlbWVudCA9IGxl
eGVyLmN1cnJlbnRFbGVtZW50KCk7CisgICAgICAgICAgICBBU1NFUlQoZWxlbWVudC50eXBlID09
IElEQktleVBhdGhFbGVtZW50OjpJc05hbWVkKTsKKyAgICAgICAgICAgIGVsZW1lbnRzLmFwcGVu
ZChlbGVtZW50KTsKKworICAgICAgICAgICAgdG9rZW5UeXBlID0gbGV4ZXIubmV4dCgpOworICAg
ICAgICAgICAgaWYgKHRva2VuVHlwZSA9PSBJREJLZXlQYXRoTGV4ZXI6OlRva2VuRG90KQorICAg
ICAgICAgICAgICAgIHN0YXRlID0gRG90OworICAgICAgICAgICAgZWxzZSBpZiAodG9rZW5UeXBl
ID09IElEQktleVBhdGhMZXhlcjo6VG9rZW5MZWZ0QnJhY2tldCkKKyAgICAgICAgICAgICAgICBz
dGF0ZSA9IEFycmF5OworICAgICAgICAgICAgZWxzZSBpZiAodG9rZW5UeXBlID09IElEQktleVBh
dGhMZXhlcjo6VG9rZW5FbmQpCisgICAgICAgICAgICAgICAgc3RhdGUgPSBFbmQ7CisgICAgICAg
ICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICBlcnJvciA9IElEQktleVBhdGhQYXJzZUVycm9y
SWRlbnRpZmllcjsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBjYXNlIEFycmF5IDogeworICAgICAg
ICAgICAgSURCS2V5UGF0aExleGVyOjpUb2tlblR5cGUgdG9rZW5UeXBlID0gbGV4ZXIuY3VycmVu
dCgpOworICAgICAgICAgICAgQVNTRVJUKHRva2VuVHlwZSA9PSBJREJLZXlQYXRoTGV4ZXI6OlRv
a2VuTGVmdEJyYWNrZXQpOworCisgICAgICAgICAgICB0b2tlblR5cGUgPSBsZXhlci5uZXh0KCk7
CisgICAgICAgICAgICBpZiAodG9rZW5UeXBlICE9IElEQktleVBhdGhMZXhlcjo6VG9rZW5OdW1i
ZXIpIHsKKyAgICAgICAgICAgICAgICBlcnJvciA9IElEQktleVBhdGhQYXJzZUVycm9yQXJyYXlJ
bmRleDsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisKKyAgICAgICAg
ICAgIEFTU0VSVCh0b2tlblR5cGUgPT0gSURCS2V5UGF0aExleGVyOjpUb2tlbk51bWJlcik7Cisg
ICAgICAgICAgICBJREJLZXlQYXRoRWxlbWVudCBlbGVtZW50ID0gbGV4ZXIuY3VycmVudEVsZW1l
bnQoKTsKKyAgICAgICAgICAgIEFTU0VSVChlbGVtZW50LnR5cGUgPT0gSURCS2V5UGF0aEVsZW1l
bnQ6OklzSW5kZXhlZCk7CisgICAgICAgICAgICBlbGVtZW50cy5hcHBlbmQoZWxlbWVudCk7CisK
KyAgICAgICAgICAgIHRva2VuVHlwZSA9IGxleGVyLm5leHQoKTsKKyAgICAgICAgICAgIGlmICh0
b2tlblR5cGUgIT0gSURCS2V5UGF0aExleGVyOjpUb2tlblJpZ2h0QnJhY2tldCkgeworICAgICAg
ICAgICAgICAgIGVycm9yID0gSURCS2V5UGF0aFBhcnNlRXJyb3JBcnJheUluZGV4OworICAgICAg
ICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgdG9rZW5UeXBl
ID0gbGV4ZXIubmV4dCgpOworICAgICAgICAgICAgaWYgKHRva2VuVHlwZSA9PSBJREJLZXlQYXRo
TGV4ZXI6OlRva2VuRG90KQorICAgICAgICAgICAgICAgIHN0YXRlID0gRG90OworICAgICAgICAg
ICAgZWxzZSBpZiAodG9rZW5UeXBlID09IElEQktleVBhdGhMZXhlcjo6VG9rZW5MZWZ0QnJhY2tl
dCkKKyAgICAgICAgICAgICAgICBzdGF0ZSA9IEFycmF5OworICAgICAgICAgICAgZWxzZSBpZiAo
dG9rZW5UeXBlID09IElEQktleVBhdGhMZXhlcjo6VG9rZW5FbmQpCisgICAgICAgICAgICAgICAg
c3RhdGUgPSBFbmQ7CisgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICBlcnJvciA9
IElEQktleVBhdGhQYXJzZUVycm9yQWZ0ZXJBcnJheTsKKyAgICAgICAgICAgICAgICByZXR1cm47
CisgICAgICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBj
YXNlIERvdDogeworICAgICAgICAgICAgSURCS2V5UGF0aExleGVyOjpUb2tlblR5cGUgdG9rZW5U
eXBlID0gbGV4ZXIuY3VycmVudCgpOworICAgICAgICAgICAgQVNTRVJUKHRva2VuVHlwZSA9PSBJ
REJLZXlQYXRoTGV4ZXI6OlRva2VuRG90KTsKKworICAgICAgICAgICAgdG9rZW5UeXBlID0gbGV4
ZXIubmV4dCgpOworICAgICAgICAgICAgaWYgKHRva2VuVHlwZSAhPSBJREJLZXlQYXRoTGV4ZXI6
OlRva2VuSWRlbnRpZmllcikgeworICAgICAgICAgICAgICAgIGVycm9yID0gSURCS2V5UGF0aFBh
cnNlRXJyb3JEb3Q7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorCisg
ICAgICAgICAgICBzdGF0ZSA9IElkZW50aWZpZXI7CisgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgfQorICAgICAgICBjYXNlIEVuZDogeworICAgICAgICAgICAgZXJyb3IgPSBJREJLZXlQYXRo
UGFyc2VFcnJvck5vbmU7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAg
fQorICAgIH0KK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxF
KElOREVYRURfREFUQUJBU0UpCmRpZmYgLS1naXQgYS9XZWJDb3JlL3N0b3JhZ2UvSURCS2V5UGF0
aC5oIGIvV2ViQ29yZS9zdG9yYWdlL0lEQktleVBhdGguaApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi44NDlmMDc2YTE1
YjI3YTY2OGI5ZDU2MGJiYTQxOTM2MDZjODM3MWM3Ci0tLSAvZGV2L251bGwKKysrIGIvV2ViQ29y
ZS9zdG9yYWdlL0lEQktleVBhdGguaApAQCAtMCwwICsxLDY0IEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENP
TlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVS
UE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBJ
REJLZXlQYXRoX2gKKyNkZWZpbmUgSURCS2V5UGF0aF9oCisKKyNpZiBFTkFCTEUoSU5ERVhFRF9E
QVRBQkFTRSkKKworI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CisjaW5jbHVkZSA8d3RmL1Jl
ZkNvdW50ZWQuaD4KKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisjaW5jbHVkZSA8d3RmL3RleHQv
V1RGU3RyaW5nLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworc3RydWN0IElEQktleVBhdGhF
bGVtZW50IHsKKyAgICBlbnVtIFR5cGUgeworICAgICAgICBJc0luZGV4ZWQsCisgICAgICAgIElz
TmFtZWQsCisgICAgfTsKKworICAgIFR5cGUgdHlwZTsKKyAgICBpbnQgaW5kZXg7CisgICAgU3Ry
aW5nIGlkZW50aWZpZXI7Cit9OworCitlbnVtIElEQktleVBhdGhQYXJzZUVycm9yIHsKKyAgICBJ
REJLZXlQYXRoUGFyc2VFcnJvck5vbmUsCisgICAgSURCS2V5UGF0aFBhcnNlRXJyb3JTdGFydCwK
KyAgICBJREJLZXlQYXRoUGFyc2VFcnJvcklkZW50aWZpZXIsCisgICAgSURCS2V5UGF0aFBhcnNl
RXJyb3JBcnJheUluZGV4LAorICAgIElEQktleVBhdGhQYXJzZUVycm9yQWZ0ZXJBcnJheSwKKyAg
ICBJREJLZXlQYXRoUGFyc2VFcnJvckRvdCwKK307CisKK3ZvaWQgSURCUGFyc2VLZXlQYXRoKGNv
bnN0IFN0cmluZyYsIFZlY3RvcjxJREJLZXlQYXRoRWxlbWVudD4mLCBJREJLZXlQYXRoUGFyc2VF
cnJvciYpOworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZgorCisjZW5kaWYgLy8g
SURCS2V5UGF0aF9oCmRpZmYgLS1naXQgYS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nIGIvV2Vi
S2l0L2Nocm9taXVtL0NoYW5nZUxvZwppbmRleCBlNGExZGFlOTc1NDIxMjUwZjMxMDJjNDBlMmE1
MTFkNjYzYTEwNjUyLi5kMTg1MDczYTEyZWU4NzY4MGUyNDBjNTkyY2I3ZDIzMjU3ZDA5MjM1IDEw
MDY0NAotLS0gYS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCisrKyBiL1dlYktpdC9jaHJvbWl1
bS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyMCBAQAorMjAxMC0wNy0yOCAgTWFyY3VzIEJ1bGFjaCAg
PGJ1bGFjaEBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCisKKyAgICAgICAgSW1wbGVtZW50IElEQktleVBhdGggcGFyc2VyLgorICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDI5NzYKKworICAgICAgICBJREJL
ZXlQYXRoIGlzIGFuIGludGVybmFsIGNsYXNzLCBleHBvc2VkIG9ubHkgZm9yIHVuaXQgdGVzdHMg
Zm9yIG5vdy4KKyAgICAgICAgSXQnbGwgYWxsb3cgaW5kZXhlZCBkYXRhYmFzZSBpbXBsZW1lbnRh
dGlvbiB0byB0cmF2ZXJzZSBhIGdpdmVuIGtleSBwYXRoIGFuZCBvYnRhaW4gdGhlIGNvcnJlc3Bv
bmRpbmcgcHJvcGVydGllcworICAgICAgICBmcm9tIGEgU2VyaWFsaXplZFNjcmlwdFZhbHVlLgor
CisgICAgICAgICogV2ViS2l0Lmd5cDoKKyAgICAgICAgKiB0ZXN0cy9JREJLZXlQYXRoVGVzdC5j
cHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6RXhwZWN0ZWRUb2tlbjo6RXhwZWN0ZWRUb2tl
bik6CisgICAgICAgIChXZWJDb3JlOjpjaGVja0tleVBhdGgpOgorICAgICAgICAoV2ViQ29yZTo6
VEVTVCk6CisKIDIwMTAtMDgtMTEgIFl1cnkgU2VtaWtoYXRza3kgIDx5dXJ5c0BjaHJvbWl1bS5v
cmc+CiAKICAgICAgICAgVW5yZXZpZXdlZC4gQ2hyb21pdW0gYnVpbGQgZml4LgpkaWZmIC0tZ2l0
IGEvV2ViS2l0L2Nocm9taXVtL1dlYktpdC5neXAgYi9XZWJLaXQvY2hyb21pdW0vV2ViS2l0Lmd5
cAppbmRleCBmMzQzNTVkZDg4MzMyZDE3NWI3NDkxN2FkNjdkMjU4ZDgwMjIxNDZkLi4xZTMxNDJj
NzVmYWZjMjdhY2ExNWNkOTE5N2M4MGYyYmZlNDllYWJlIDEwMDY0NAotLS0gYS9XZWJLaXQvY2hy
b21pdW0vV2ViS2l0Lmd5cAorKysgYi9XZWJLaXQvY2hyb21pdW0vV2ViS2l0Lmd5cApAQCAtNzAz
LDYgKzcwMyw3IEBACiAgICAgICAgICAgICAgICAgICAgIF0sCiAgICAgICAgICAgICAgICAgICAg
ICdzb3VyY2VzJzogWwogICAgICAgICAgICAgICAgICAgICAgICAgJ3Rlc3RzL0RyYWdJbWFnZVRl
c3QuY3BwJywKKyAgICAgICAgICAgICAgICAgICAgICAgICd0ZXN0cy9JREJLZXlQYXRoVGVzdC5j
cHAnLAogICAgICAgICAgICAgICAgICAgICAgICAgJ3Rlc3RzL0tleWJvYXJkVGVzdC5jcHAnLAog
ICAgICAgICAgICAgICAgICAgICAgICAgJ3Rlc3RzL0tVUkxUZXN0LmNwcCcsCiAgICAgICAgICAg
ICAgICAgICAgICAgICAndGVzdHMvUnVuQWxsVGVzdHMuY3BwJywKZGlmZiAtLWdpdCBhL1dlYktp
dC9jaHJvbWl1bS90ZXN0cy9JREJLZXlQYXRoVGVzdC5jcHAgYi9XZWJLaXQvY2hyb21pdW0vdGVz
dHMvSURCS2V5UGF0aFRlc3QuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjYwMGE5YWE4Njg5YzRkNWNmNTJmNWY2
NmY5ZGM2ZDI3MTU4ZWNlZGUKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJLaXQvY2hyb21pdW0vdGVz
dHMvSURCS2V5UGF0aFRlc3QuY3BwCkBAIC0wLDAgKzEsMTg5IEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENP
TlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVS
UE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUg
ImNvbmZpZy5oIgorI2luY2x1ZGUgIklEQktleVBhdGguaCIKKworI2luY2x1ZGUgPGd0ZXN0L2d0
ZXN0Lmg+CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorCisjaWYgRU5BQkxFKElOREVYRURfREFU
QUJBU0UpCisKK3VzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOworCituYW1lc3BhY2UgeworCitJREJL
ZXlQYXRoRWxlbWVudCBFeHBlY3RlZFRva2VuKGNvbnN0IFN0cmluZyYgaWRlbnRpZmllciwgYm9v
bCBpc0luZGV4ZWQsIGludCBpbmRleCkKK3sKKyAgICBJREJLZXlQYXRoRWxlbWVudCBleHBlY3Rl
ZDsKKyAgICBpZiAoaXNJbmRleGVkKSB7CisgICAgICAgIGV4cGVjdGVkLnR5cGUgPSBJREJLZXlQ
YXRoRWxlbWVudDo6SXNJbmRleGVkOworICAgICAgICBleHBlY3RlZC5pbmRleCA9IGluZGV4Owor
ICAgIH0gZWxzZSB7CisgICAgICAgIGV4cGVjdGVkLnR5cGUgPSBJREJLZXlQYXRoRWxlbWVudDo6
SXNOYW1lZDsKKyAgICAgICAgZXhwZWN0ZWQuaWRlbnRpZmllciA9IGlkZW50aWZpZXI7CisgICAg
fQorICAgIHJldHVybiBleHBlY3RlZDsKK30KKwordm9pZCBjaGVja0tleVBhdGgoY29uc3QgU3Ry
aW5nJiBrZXlQYXRoLCBjb25zdCBWZWN0b3I8SURCS2V5UGF0aEVsZW1lbnQ+JiBleHBlY3RlZCwg
aW50IHBhcnNlckVycm9yKQoreworCisgICAgSURCS2V5UGF0aFBhcnNlRXJyb3IgZXJyb3I7Cisg
ICAgVmVjdG9yPElEQktleVBhdGhFbGVtZW50PiBpZGJLZXlQYXRoRWxlbWVudHM7CisgICAgSURC
UGFyc2VLZXlQYXRoKGtleVBhdGgsIGlkYktleVBhdGhFbGVtZW50cywgZXJyb3IpOworICAgIEFT
U0VSVF9FUShwYXJzZXJFcnJvciwgZXJyb3IpOworICAgIGlmIChlcnJvciAhPSBJREJLZXlQYXRo
UGFyc2VFcnJvck5vbmUpCisgICAgICAgIHJldHVybjsKKyAgICBBU1NFUlRfRVEoZXhwZWN0ZWQu
c2l6ZSgpLCBpZGJLZXlQYXRoRWxlbWVudHMuc2l6ZSgpKTsKKyAgICBmb3IgKGludCBpID0gMDsg
aSA8IGV4cGVjdGVkLnNpemUoKTsgKytpKSB7CisgICAgICAgIEFTU0VSVF9UUlVFKGV4cGVjdGVk
W2ldLnR5cGUgPT0gaWRiS2V5UGF0aEVsZW1lbnRzW2ldLnR5cGUpIDw8IGk7CisgICAgICAgIGlm
IChleHBlY3RlZFtpXS50eXBlID09IElEQktleVBhdGhFbGVtZW50OjpJc0luZGV4ZWQpCisgICAg
ICAgICAgICBBU1NFUlRfRVEoZXhwZWN0ZWRbaV0uaW5kZXgsIGlkYktleVBhdGhFbGVtZW50c1tp
XS5pbmRleCkgPDwgaTsKKyAgICAgICAgZWxzZSBpZiAoZXhwZWN0ZWRbaV0udHlwZSA9PSBJREJL
ZXlQYXRoRWxlbWVudDo6SXNOYW1lZCkKKyAgICAgICAgICAgIEFTU0VSVF9UUlVFKGV4cGVjdGVk
W2ldLmlkZW50aWZpZXIgPT0gaWRiS2V5UGF0aEVsZW1lbnRzW2ldLmlkZW50aWZpZXIpIDw8IGk7
CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIEFTU0VSVF9UUlVFKGZhbHNlKSA8PCAiSW52YWxp
ZCBJREJLZXlQYXRoRWxlbWVudCB0eXBlIjsKKyAgICB9Cit9CisKK1RFU1QoSURCS2V5UGF0aFRl
c3QsIFZhbGlkS2V5UGF0aDApCit7CisgICAgVmVjdG9yPElEQktleVBhdGhFbGVtZW50PiBleHBl
Y3RlZDsKKyAgICBTdHJpbmcga2V5UGF0aCgiZm9vLmJhci56b28iKTsKKyAgICBleHBlY3RlZC5h
cHBlbmQoRXhwZWN0ZWRUb2tlbigiZm9vIiwgZmFsc2UsIDApKTsKKyAgICBleHBlY3RlZC5hcHBl
bmQoRXhwZWN0ZWRUb2tlbigiYmFyIiwgZmFsc2UsIDApKTsKKyAgICBleHBlY3RlZC5hcHBlbmQo
RXhwZWN0ZWRUb2tlbigiem9vIiwgZmFsc2UsIDApKTsKKyAgICBjaGVja0tleVBhdGgoa2V5UGF0
aCwgZXhwZWN0ZWQsIDApOworfQorCitURVNUKElEQktleVBhdGhUZXN0LCBWYWxpZEtleVBhdGgx
KQoreworICAgIFZlY3RvcjxJREJLZXlQYXRoRWxlbWVudD4gZXhwZWN0ZWQ7CisgICAgU3RyaW5n
IGtleVBhdGgoImFbMzRdWzIwXS5mb29bMl0uYmFyIik7CisgICAgZXhwZWN0ZWQuYXBwZW5kKEV4
cGVjdGVkVG9rZW4oImEiLCBmYWxzZSwgMCkpOworICAgIGV4cGVjdGVkLmFwcGVuZChFeHBlY3Rl
ZFRva2VuKFN0cmluZygpLCB0cnVlLCAzNCkpOworICAgIGV4cGVjdGVkLmFwcGVuZChFeHBlY3Rl
ZFRva2VuKFN0cmluZygpLCB0cnVlLCAyMCkpOworICAgIGV4cGVjdGVkLmFwcGVuZChFeHBlY3Rl
ZFRva2VuKCJmb28iLCBmYWxzZSwgMCkpOworICAgIGV4cGVjdGVkLmFwcGVuZChFeHBlY3RlZFRv
a2VuKFN0cmluZygpLCB0cnVlLCAyKSk7CisgICAgZXhwZWN0ZWQuYXBwZW5kKEV4cGVjdGVkVG9r
ZW4oImJhciIsIGZhbHNlLCAwKSk7CisgICAgY2hlY2tLZXlQYXRoKGtleVBhdGgsIGV4cGVjdGVk
LCAwKTsKK30KKworVEVTVChJREJLZXlQYXRoVGVzdCwgVmFsaWRLZXlQYXRoMikKK3sKKyAgICBW
ZWN0b3I8SURCS2V5UGF0aEVsZW1lbnQ+IGV4cGVjdGVkOworICAgIFN0cmluZyBrZXlQYXRoKCJm
b29bIDM0IF0uWm9vX1swMDAyM11cdC5fYyIpOworICAgIGV4cGVjdGVkLmFwcGVuZChFeHBlY3Rl
ZFRva2VuKCJmb28iLCBmYWxzZSwgMCkpOworICAgIGV4cGVjdGVkLmFwcGVuZChFeHBlY3RlZFRv
a2VuKFN0cmluZygpLCB0cnVlLCAzNCkpOworICAgIGV4cGVjdGVkLmFwcGVuZChFeHBlY3RlZFRv
a2VuKCJab29fIiwgZmFsc2UsIDApKTsKKyAgICBleHBlY3RlZC5hcHBlbmQoRXhwZWN0ZWRUb2tl
bihTdHJpbmcoKSwgdHJ1ZSwgMjMpKTsKKyAgICBleHBlY3RlZC5hcHBlbmQoRXhwZWN0ZWRUb2tl
bigiX2MiLCBmYWxzZSwgMCkpOworICAgIGNoZWNrS2V5UGF0aChrZXlQYXRoLCBleHBlY3RlZCwg
MCk7Cit9CisKK1RFU1QoSURCS2V5UGF0aFRlc3QsIFZhbGlkS2V5UGF0aDMpCit7CisgICAgVmVj
dG9yPElEQktleVBhdGhFbGVtZW50PiBleHBlY3RlZDsKKyAgICBTdHJpbmcga2V5UGF0aCgiZm9v
WyAzNCBdIik7CisgICAgZXhwZWN0ZWQuYXBwZW5kKEV4cGVjdGVkVG9rZW4oImZvbyIsIGZhbHNl
LCAwKSk7CisgICAgZXhwZWN0ZWQuYXBwZW5kKEV4cGVjdGVkVG9rZW4oU3RyaW5nKCksIHRydWUs
IDM0KSk7CisgICAgY2hlY2tLZXlQYXRoKGtleVBhdGgsIGV4cGVjdGVkLCAwKTsKK30KKworVEVT
VChJREJLZXlQYXRoVGVzdCwgVmFsaWRLZXlQYXRoNCkKK3sKKyAgICBWZWN0b3I8SURCS2V5UGF0
aEVsZW1lbnQ+IGV4cGVjdGVkOworICAgIFN0cmluZyBrZXlQYXRoKCJbIDM0IF0iKTsKKyAgICBl
eHBlY3RlZC5hcHBlbmQoRXhwZWN0ZWRUb2tlbihTdHJpbmcoKSwgdHJ1ZSwgMzQpKTsKKyAgICBj
aGVja0tleVBhdGgoa2V5UGF0aCwgZXhwZWN0ZWQsIDApOworfQorCitURVNUKElEQktleVBhdGhU
ZXN0LCBJbnZhbGlkS2V5UGF0aDIpCit7CisgICAgVmVjdG9yPElEQktleVBhdGhFbGVtZW50PiBl
eHBlY3RlZDsKKyAgICBTdHJpbmcga2V5UGF0aCgiYVtbMzRdXS5iWzJdLmMiKTsKKyAgICBleHBl
Y3RlZC5hcHBlbmQoRXhwZWN0ZWRUb2tlbigiYSIsIGZhbHNlLCAwKSk7CisgICAgY2hlY2tLZXlQ
YXRoKGtleVBhdGgsIGV4cGVjdGVkLCAzKTsKK30KKworVEVTVChJREJLZXlQYXRoVGVzdCwgSW52
YWxpZEtleVBhdGgzKQoreworICAgIFZlY3RvcjxJREJLZXlQYXRoRWxlbWVudD4gZXhwZWN0ZWQ7
CisgICAgU3RyaW5nIGtleVBhdGgoImFbWzM0XS5iWzJdLmMiKTsKKyAgICBleHBlY3RlZC5hcHBl
bmQoRXhwZWN0ZWRUb2tlbigiYSIsIGZhbHNlLCAwKSk7CisgICAgY2hlY2tLZXlQYXRoKGtleVBh
dGgsIGV4cGVjdGVkLCAzKTsKK30KKworVEVTVChJREJLZXlQYXRoVGVzdCwgSW52YWxpZEtleVBh
dGg1KQoreworICAgIFZlY3RvcjxJREJLZXlQYXRoRWxlbWVudD4gZXhwZWN0ZWQ7CisgICAgU3Ry
aW5nIGtleVBhdGgoImFbWzM0LmJbMl0uYyIpOworICAgIGV4cGVjdGVkLmFwcGVuZChFeHBlY3Rl
ZFRva2VuKCJhIiwgZmFsc2UsIDApKTsKKyAgICBjaGVja0tleVBhdGgoa2V5UGF0aCwgZXhwZWN0
ZWQsIDMpOworfQorCitURVNUKElEQktleVBhdGhUZXN0LCBJbnZhbGlkS2V5UGF0aDYpCit7Cisg
ICAgVmVjdG9yPElEQktleVBhdGhFbGVtZW50PiBleHBlY3RlZDsKKyAgICBTdHJpbmcga2V5UGF0
aCgiK2FbMzRdLmJbMl0uYyIpOworICAgIGNoZWNrS2V5UGF0aChrZXlQYXRoLCBleHBlY3RlZCwg
MSk7Cit9CisKK1RFU1QoSURCS2V5UGF0aFRlc3QsIEludmFsaWRLZXlQYXRoNykKK3sKKyAgICBW
ZWN0b3I8SURCS2V5UGF0aEVsZW1lbnQ+IGV4cGVjdGVkOworICAgIFN0cmluZyBrZXlQYXRoKCIl
YVszNF0uYlsyXS5jIik7CisgICAgY2hlY2tLZXlQYXRoKGtleVBhdGgsIGV4cGVjdGVkLCAxKTsK
K30KKworVEVTVChJREJLZXlQYXRoVGVzdCwgSW52YWxpZEtleVBhdGg4KQoreworICAgIFZlY3Rv
cjxJREJLZXlQYXRoRWxlbWVudD4gZXhwZWN0ZWQ7CisgICAgU3RyaW5nIGtleVBhdGgoImF7WzM0
XX0uYlsyXS5jIik7CisgICAgZXhwZWN0ZWQuYXBwZW5kKEV4cGVjdGVkVG9rZW4oImEiLCBmYWxz
ZSwgMCkpOworICAgIGNoZWNrS2V5UGF0aChrZXlQYXRoLCBleHBlY3RlZCwgMik7Cit9CisKK1RF
U1QoSURCS2V5UGF0aFRlc3QsIEludmFsaWRLZXlQYXRoOSkKK3sKKyAgICBWZWN0b3I8SURCS2V5
UGF0aEVsZW1lbnQ+IGV4cGVjdGVkOworICAgIFN0cmluZyBrZXlQYXRoKCJhLi5iWzJdLmMiKTsK
KyAgICBleHBlY3RlZC5hcHBlbmQoRXhwZWN0ZWRUb2tlbigiYSIsIGZhbHNlLCAwKSk7CisgICAg
Y2hlY2tLZXlQYXRoKGtleVBhdGgsIGV4cGVjdGVkLCA1KTsKK30KKworVEVTVChJREJLZXlQYXRo
VGVzdCwgSW52YWxpZEtleVBhdGgxMCkKK3sKKyAgICBWZWN0b3I8SURCS2V5UGF0aEVsZW1lbnQ+
IGV4cGVjdGVkOworICAgIFN0cmluZyBrZXlQYXRoKCJhWzM0XWIuZm9vWzJdLmJhciIpOworICAg
IGV4cGVjdGVkLmFwcGVuZChFeHBlY3RlZFRva2VuKCJhIiwgZmFsc2UsIDApKTsKKyAgICBleHBl
Y3RlZC5hcHBlbmQoRXhwZWN0ZWRUb2tlbihTdHJpbmcoKSwgdHJ1ZSwgMzQpKTsKKyAgICBjaGVj
a0tleVBhdGgoa2V5UGF0aCwgZXhwZWN0ZWQsIDQpOworfQorCit9IC8vIG5hbWVzcGFjZQorCisj
ZW5kaWYgLy8gRU5BQkxFKElOREVYRURfREFUQUJBU0UpCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>64214</attachid>
            <date>2010-08-12 05:44:04 -0700</date>
            <delta_ts>2010-08-13 08:11:26 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-42976-20100812134402.patch</filename>
            <type>text/plain</type>
            <size>21553</size>
            <attacher name="Marcus Bulach">bulach</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
NmYwM2JjOGZjOGRlMDIwZjkzYzc1MWI0NDhkMTBhOWQ1YzZmNmIzOC4uMTFiYzNkYzcyMzBiNTY1
MTZhYWNhMzM2NzkwODlmYjJmZThiMmE1NyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cK
KysrIGIvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwzOCBAQAorMjAxMC0wNy0yOCAgTWFy
Y3VzIEJ1bGFjaCAgPGJ1bGFjaEBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
Tk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgSW1wbGVtZW50IElEQktleVBhdGggcGFyc2VyLgor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDI5NzYKKwor
ICAgICAgICBJREJLZXlQYXRoIGlzIGFuIGludGVybmFsIGNsYXNzLCBleHBvc2VkIG9ubHkgZm9y
IHVuaXQgdGVzdHMgZm9yIG5vdy4KKyAgICAgICAgSXQnbGwgYWxsb3cgaW5kZXhlZCBkYXRhYmFz
ZSBpbXBsZW1lbnRhdGlvbiB0byB0cmF2ZXJzZSBhIGdpdmVuIGtleSBwYXRoIGFuZCBvYnRhaW4g
dGhlIGNvcnJlc3BvbmRpbmcgcHJvcGVydGllcworICAgICAgICBmcm9tIGEgU2VyaWFsaXplZFNj
cmlwdFZhbHVlLgorCisgICAgICAgICogV2ViQ29yZS5neXBpOgorICAgICAgICAqIHN0b3JhZ2Uv
SURCS2V5UGF0aC5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6SURCS2V5UGF0aDo6Y3Jl
YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OklEQktleVBhdGg6OklEQktleVBhdGgpOgorICAgICAg
ICAoV2ViQ29yZTo6SURCS2V5UGF0aDo6fklEQktleVBhdGgpOgorICAgICAgICAoV2ViQ29yZTo6
SURCS2V5UGF0aDo6aGFzTmV4dCk6CisgICAgICAgIChXZWJDb3JlOjpJREJLZXlQYXRoOjpuZXh0
KToKKyAgICAgICAgKFdlYkNvcmU6OklEQktleVBhdGg6OmlkZW50aWZpZXIpOgorICAgICAgICAo
V2ViQ29yZTo6SURCS2V5UGF0aDo6aGFzSW5kZXgpOgorICAgICAgICAoV2ViQ29yZTo6SURCS2V5
UGF0aDo6aW5kZXhWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpJREJLZXlQYXRoOjpwYXJzZXJF
cnJvcik6CisgICAgICAgIChXZWJDb3JlOjpJREJLZXlQYXRoOjpwYXJzZSk6CisgICAgICAgIChX
ZWJDb3JlOjpJREJLZXlQYXRoOjpMZXhlcjo6bGV4KToKKyAgICAgICAgKFdlYkNvcmU6OmlzU2Fm
ZUlkZW50aWZpZXJTdGFydENoYXJhY3Rlcik6CisgICAgICAgIChXZWJDb3JlOjppc1NhZmVJZGVu
dGlmaWVyQ2hhcmFjdGVyKToKKyAgICAgICAgKFdlYkNvcmU6OklEQktleVBhdGg6OkxleGVyOjps
ZXhJZGVudGlmaWVyKToKKyAgICAgICAgKFdlYkNvcmU6OklEQktleVBhdGg6OkxleGVyOjpsZXhO
dW1iZXIpOgorICAgICAgICAqIHN0b3JhZ2UvSURCS2V5UGF0aC5oOiBBZGRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OklEQktleVBhdGg6OlRva2VuOjpUb2tlbik6CisgICAgICAgIChXZWJDb3JlOjpJ
REJLZXlQYXRoOjopOgorICAgICAgICAoV2ViQ29yZTo6SURCS2V5UGF0aDo6TGV4ZXI6OkxleGVy
KToKKyAgICAgICAgKFdlYkNvcmU6OklEQktleVBhdGg6OkxleGVyOjpuZXh0KToKKyAgICAgICAg
KFdlYkNvcmU6OklEQktleVBhdGg6OkxleGVyOjpjdXJyZW50VG9rZW4pOgorCiAyMDEwLTA4LTEy
ICBKZXJlbXkgT3Jsb3cgIDxqb3Jsb3dAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFJldmVydCBm
b3Igbm93CmRpZmYgLS1naXQgYS9XZWJDb3JlL1dlYkNvcmUuZ3lwaSBiL1dlYkNvcmUvV2ViQ29y
ZS5neXBpCmluZGV4IDU4ZWUyYTk2OTc3YzkxOWQ4ODljOTFlOWQyYmViNTA5ZTVhNmZiNWUuLmZk
ZWRjNmQzZjkyMmY1ZmMwNTJiMTBlNDVjNDdmZjJkZTdjZWEwMTcgMTAwNjQ0Ci0tLSBhL1dlYkNv
cmUvV2ViQ29yZS5neXBpCisrKyBiL1dlYkNvcmUvV2ViQ29yZS5neXBpCkBAIC0zNTQyLDYgKzM1
NDIsOCBAQAogICAgICAgICAgICAgJ3N0b3JhZ2UvSURCSW5kZXhCYWNrZW5kSW1wbC5oJywKICAg
ICAgICAgICAgICdzdG9yYWdlL0lEQktleS5jcHAnLAogICAgICAgICAgICAgJ3N0b3JhZ2UvSURC
S2V5LmgnLAorICAgICAgICAgICAgJ3N0b3JhZ2UvSURCS2V5UGF0aC5jcHAnLAorICAgICAgICAg
ICAgJ3N0b3JhZ2UvSURCS2V5UGF0aC5oJywKICAgICAgICAgICAgICdzdG9yYWdlL0lEQktleVJh
bmdlLmNwcCcsCiAgICAgICAgICAgICAnc3RvcmFnZS9JREJLZXlSYW5nZS5oJywKICAgICAgICAg
ICAgICdzdG9yYWdlL0lEQktleVRyZWUuaCcsCmRpZmYgLS1naXQgYS9XZWJDb3JlL3N0b3JhZ2Uv
SURCS2V5UGF0aC5jcHAgYi9XZWJDb3JlL3N0b3JhZ2UvSURCS2V5UGF0aC5jcHAKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MC4uOTUyNzUwNzQ5NjlhMWIxMTE1YjkwMTgwNGUzYzE1ZTY0ZmY4OWY0YgotLS0gL2Rldi9udWxs
CisrKyBiL1dlYkNvcmUvc3RvcmFnZS9JREJLZXlQYXRoLmNwcApAQCAtMCwwICsxLDI2OSBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEu
ICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJ
TVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
CisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor
ICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJJREJLZXlQYXRoLmgiCisKKyNp
ZiBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKKworI2luY2x1ZGUgPHd0Zi9BU0NJSUNUeXBlLmg+
CisjaW5jbHVkZSA8d3RmL2R0b2EuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBJ
REJLZXlQYXRoTGV4ZXIgeworcHVibGljOgorICAgIGVudW0gVG9rZW5UeXBlIHsKKyAgICAgICAg
VG9rZW5MZWZ0QnJhY2tldCwKKyAgICAgICAgVG9rZW5SaWdodEJyYWNrZXQsCisgICAgICAgIFRv
a2VuSWRlbnRpZmllciwKKyAgICAgICAgVG9rZW5OdW1iZXIsCisgICAgICAgIFRva2VuRG90LAor
ICAgICAgICBUb2tlbkVuZCwKKyAgICAgICAgVG9rZW5FcnJvcgorICAgIH07CisKKyAgICBleHBs
aWNpdCBJREJLZXlQYXRoTGV4ZXIoY29uc3QgU3RyaW5nJiBzKQorICAgICAgICA6IG1fc3RyaW5n
KHMpCisgICAgICAgICwgbV9wdHIocy5jaGFyYWN0ZXJzKCkpCisgICAgICAgICwgbV9lbmQocy5j
aGFyYWN0ZXJzKCkgKyBzLmxlbmd0aCgpKQorICAgICAgICAsIG1fY3VycmVudFRva2VuVHlwZShU
b2tlbkVycm9yKQorICAgIHsKKyAgICB9CisKKyAgICBUb2tlblR5cGUgY3VycmVudFRva2VuVHlw
ZSgpIGNvbnN0IHsgcmV0dXJuIG1fY3VycmVudFRva2VuVHlwZTsgfQorCisgICAgVG9rZW5UeXBl
IG5leHRUb2tlblR5cGUoKQorICAgIHsKKyAgICAgICAgbV9jdXJyZW50VG9rZW5UeXBlID0gbGV4
KG1fY3VycmVudEVsZW1lbnQpOworICAgICAgICByZXR1cm4gbV9jdXJyZW50VG9rZW5UeXBlOwor
ICAgIH0KKworICAgIGNvbnN0IElEQktleVBhdGhFbGVtZW50JiBjdXJyZW50RWxlbWVudCgpIHsg
cmV0dXJuIG1fY3VycmVudEVsZW1lbnQ7IH0KKworcHJpdmF0ZToKKyAgICBUb2tlblR5cGUgbGV4
KElEQktleVBhdGhFbGVtZW50Jik7CisgICAgVG9rZW5UeXBlIGxleElkZW50aWZpZXIoSURCS2V5
UGF0aEVsZW1lbnQmKTsKKyAgICBUb2tlblR5cGUgbGV4TnVtYmVyKElEQktleVBhdGhFbGVtZW50
Jik7CisgICAgSURCS2V5UGF0aEVsZW1lbnQgbV9jdXJyZW50RWxlbWVudDsKKyAgICBTdHJpbmcg
bV9zdHJpbmc7CisgICAgY29uc3QgVUNoYXIqIG1fcHRyOworICAgIGNvbnN0IFVDaGFyKiBtX2Vu
ZDsKKyAgICBUb2tlblR5cGUgbV9jdXJyZW50VG9rZW5UeXBlOworfTsKKworSURCS2V5UGF0aExl
eGVyOjpUb2tlblR5cGUgSURCS2V5UGF0aExleGVyOjpsZXgoSURCS2V5UGF0aEVsZW1lbnQmIGVs
ZW1lbnQpCit7CisgICAgd2hpbGUgKG1fcHRyIDwgbV9lbmQgJiYgaXNBU0NJSVNwYWNlKCptX3B0
cikpCisgICAgICAgICsrbV9wdHI7CisKKyAgICBpZiAobV9wdHIgPj0gbV9lbmQpCisgICAgICAg
IHJldHVybiBUb2tlbkVuZDsKKworICAgIEFTU0VSVChtX3B0ciA8IG1fZW5kKTsKKyAgICBzd2l0
Y2ggKCptX3B0cikgeworICAgIGNhc2UgJ1snOgorICAgICAgICArK21fcHRyOworICAgICAgICBy
ZXR1cm4gVG9rZW5MZWZ0QnJhY2tldDsKKyAgICBjYXNlICddJzoKKyAgICAgICAgKyttX3B0cjsK
KyAgICAgICAgcmV0dXJuIFRva2VuUmlnaHRCcmFja2V0OworICAgIGNhc2UgJy4nOgorICAgICAg
ICArK21fcHRyOworICAgICAgICByZXR1cm4gVG9rZW5Eb3Q7CisgICAgY2FzZSAnMCc6CisgICAg
Y2FzZSAnMSc6CisgICAgY2FzZSAnMic6CisgICAgY2FzZSAnMyc6CisgICAgY2FzZSAnNCc6Cisg
ICAgY2FzZSAnNSc6CisgICAgY2FzZSAnNic6CisgICAgY2FzZSAnNyc6CisgICAgY2FzZSAnOCc6
CisgICAgY2FzZSAnOSc6CisgICAgICAgIHJldHVybiBsZXhOdW1iZXIoZWxlbWVudCk7CisgICAg
ZGVmYXVsdDoKKyAgICAgICAgcmV0dXJuIGxleElkZW50aWZpZXIoZWxlbWVudCk7CisgICAgfQor
ICAgIHJldHVybiBUb2tlbkVycm9yOworfQorCitzdGF0aWMgaW5saW5lIGJvb2wgaXNTYWZlSWRl
bnRpZmllclN0YXJ0Q2hhcmFjdGVyKFVDaGFyIGMpCit7CisgICAgcmV0dXJuIGlzQVNDSUlBbHBo
YShjKSB8fCAoYyA9PSAnXycpIHx8IChjID09ICckJyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgYm9v
bCBpc1NhZmVJZGVudGlmaWVyQ2hhcmFjdGVyKFVDaGFyIGMpCit7CisgICAgcmV0dXJuIGlzQVND
SUlBbHBoYW51bWVyaWMoYykgfHwgKGMgPT0gJ18nKSB8fCAoYyA9PSAnJCcpOworfQorCitJREJL
ZXlQYXRoTGV4ZXI6OlRva2VuVHlwZSBJREJLZXlQYXRoTGV4ZXI6OmxleElkZW50aWZpZXIoSURC
S2V5UGF0aEVsZW1lbnQmIGVsZW1lbnQpCit7CisgICAgY29uc3QgVUNoYXIqIHN0YXJ0ID0gbV9w
dHI7CisgICAgaWYgKG1fcHRyIDwgbV9lbmQgJiYgaXNTYWZlSWRlbnRpZmllclN0YXJ0Q2hhcmFj
dGVyKCptX3B0cikpCisgICAgICAgICsrbV9wdHI7CisgICAgZWxzZQorICAgICAgICByZXR1cm4g
VG9rZW5FcnJvcjsKKworICAgIHdoaWxlIChtX3B0ciA8IG1fZW5kICYmIGlzU2FmZUlkZW50aWZp
ZXJDaGFyYWN0ZXIoKm1fcHRyKSkKKyAgICAgICAgKyttX3B0cjsKKworICAgIGVsZW1lbnQudHlw
ZSA9IElEQktleVBhdGhFbGVtZW50OjpJc05hbWVkOworICAgIGVsZW1lbnQuaWRlbnRpZmllciA9
IFN0cmluZyhzdGFydCwgbV9wdHIgLSBzdGFydCk7CisgICAgcmV0dXJuIFRva2VuSWRlbnRpZmll
cjsKK30KKworSURCS2V5UGF0aExleGVyOjpUb2tlblR5cGUgSURCS2V5UGF0aExleGVyOjpsZXhO
dW1iZXIoSURCS2V5UGF0aEVsZW1lbnQmIGVsZW1lbnQpCit7CisgICAgaWYgKG1fcHRyID49IG1f
ZW5kKQorICAgICAgICByZXR1cm4gVG9rZW5FcnJvcjsKKworICAgIGNvbnN0IFVDaGFyKiBzdGFy
dCA9IG1fcHRyOworICAgIC8vIFswLTldKgorICAgIHdoaWxlIChtX3B0ciA8IG1fZW5kICYmIGlz
QVNDSUlEaWdpdCgqbV9wdHIpKQorICAgICAgICArK21fcHRyOworCisgICAgU3RyaW5nIG51bWJl
ckFzU3RyaW5nOworICAgIG51bWJlckFzU3RyaW5nID0gU3RyaW5nKHN0YXJ0LCBtX3B0ciAtIHN0
YXJ0KTsKKyAgICBib29sIG9rID0gZmFsc2U7CisgICAgaW50IG51bWJlciA9IG51bWJlckFzU3Ry
aW5nLnRvSW50U3RyaWN0KCZvayk7CisgICAgaWYgKCFvaykKKyAgICAgICAgcmV0dXJuIFRva2Vu
RXJyb3I7CisKKyAgICBlbGVtZW50LnR5cGUgPSBJREJLZXlQYXRoRWxlbWVudDo6SXNJbmRleGVk
OworICAgIGVsZW1lbnQuaW5kZXggPSBudW1iZXI7CisgICAgcmV0dXJuIFRva2VuTnVtYmVyOwor
fQorCit2b2lkIElEQlBhcnNlS2V5UGF0aChjb25zdCBTdHJpbmcmIGtleVBhdGgsIFZlY3RvcjxJ
REJLZXlQYXRoRWxlbWVudD4mIGVsZW1lbnRzLCBJREJLZXlQYXRoUGFyc2VFcnJvciYgZXJyb3Ip
Cit7CisgICAgLy8gVGhpcyBpcyBhIHNpbXBsaWZpZWQgcGFyc2VyIGxvb3NlbHkgYmFzZWQgb24g
TGl0ZXJhbFBhcnNlci4KKyAgICAvLyBBbiBJREJLZXlQYXRoIGlzIGRlZmluZWQgYXMgYSBzZXF1
ZW5jZSBvZjoKKyAgICAvLyBpZGVudGlmaWVyQXsuaWRlbnRpZmllckJ7W251bWVyaWNfdmFsdWVd
fQorICAgIC8vIHdoZXJlICJ7fSIgcmVwcmVzZW50cyBhbiBvcHRpb25hbCBwYXJ0CisgICAgLy8g
VGhlIGJhc2ljIHN0YXRlIG1hY2hpbmUgaXM6CisgICAgLy8gU3RhcnQgPT4ge0lkZW50aWZpZXIs
IEFycmF5fQorICAgIC8vIElkZW50aWZpZXIgPT4ge0RvdCwgQXJyYXksIEVuZH0KKyAgICAvLyBB
cnJheSA9PiB7U3RhcnQsIERvdCwgRW5kfQorICAgIC8vIERvdCA9PiB7SWRlbnRpZmllcn0KKyAg
ICAvLyBJdCBiYWlscyBvdXQgYXMgc29vbiBhcyBpdCBmaW5kcyBhbiBlcnJvciwgYnV0IGRvZXNu
J3QgZGlzY2FyZCB0aGUgYml0cyBpdCBtYW5hZ2VkIHRvIHBhcnNlLgorICAgIGVudW0gUGFyc2Vy
U3RhdGUgeyBJZGVudGlmaWVyLCBBcnJheSwgRG90LCBFbmQgfTsKKworICAgIElEQktleVBhdGhM
ZXhlciBsZXhlcihrZXlQYXRoKTsKKyAgICBJREJLZXlQYXRoTGV4ZXI6OlRva2VuVHlwZSB0b2tl
blR5cGUgPSBsZXhlci5uZXh0VG9rZW5UeXBlKCk7CisgICAgUGFyc2VyU3RhdGUgc3RhdGU7Cisg
ICAgaWYgKHRva2VuVHlwZSA9PSBJREJLZXlQYXRoTGV4ZXI6OlRva2VuSWRlbnRpZmllcikKKyAg
ICAgICAgc3RhdGUgPSBJZGVudGlmaWVyOworICAgIGVsc2UgaWYgKHRva2VuVHlwZSA9PSBJREJL
ZXlQYXRoTGV4ZXI6OlRva2VuTGVmdEJyYWNrZXQpCisgICAgICAgIHN0YXRlID0gQXJyYXk7Cisg
ICAgZWxzZSBpZiAodG9rZW5UeXBlID09IElEQktleVBhdGhMZXhlcjo6VG9rZW5FbmQpCisgICAg
ICAgIHN0YXRlID0gRW5kOworICAgIGVsc2UgeworICAgICAgICBlcnJvciA9IElEQktleVBhdGhQ
YXJzZUVycm9yU3RhcnQ7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICB3aGlsZSAoMSkg
eworICAgICAgICBzd2l0Y2ggKHN0YXRlKSB7CisgICAgICAgIGNhc2UgSWRlbnRpZmllciA6IHsK
KyAgICAgICAgICAgIElEQktleVBhdGhMZXhlcjo6VG9rZW5UeXBlIHRva2VuVHlwZSA9IGxleGVy
LmN1cnJlbnRUb2tlblR5cGUoKTsKKyAgICAgICAgICAgIEFTU0VSVCh0b2tlblR5cGUgPT0gSURC
S2V5UGF0aExleGVyOjpUb2tlbklkZW50aWZpZXIpOworCisgICAgICAgICAgICBJREJLZXlQYXRo
RWxlbWVudCBlbGVtZW50ID0gbGV4ZXIuY3VycmVudEVsZW1lbnQoKTsKKyAgICAgICAgICAgIEFT
U0VSVChlbGVtZW50LnR5cGUgPT0gSURCS2V5UGF0aEVsZW1lbnQ6OklzTmFtZWQpOworICAgICAg
ICAgICAgZWxlbWVudHMuYXBwZW5kKGVsZW1lbnQpOworCisgICAgICAgICAgICB0b2tlblR5cGUg
PSBsZXhlci5uZXh0VG9rZW5UeXBlKCk7CisgICAgICAgICAgICBpZiAodG9rZW5UeXBlID09IElE
QktleVBhdGhMZXhlcjo6VG9rZW5Eb3QpCisgICAgICAgICAgICAgICAgc3RhdGUgPSBEb3Q7Cisg
ICAgICAgICAgICBlbHNlIGlmICh0b2tlblR5cGUgPT0gSURCS2V5UGF0aExleGVyOjpUb2tlbkxl
ZnRCcmFja2V0KQorICAgICAgICAgICAgICAgIHN0YXRlID0gQXJyYXk7CisgICAgICAgICAgICBl
bHNlIGlmICh0b2tlblR5cGUgPT0gSURCS2V5UGF0aExleGVyOjpUb2tlbkVuZCkKKyAgICAgICAg
ICAgICAgICBzdGF0ZSA9IEVuZDsKKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAg
IGVycm9yID0gSURCS2V5UGF0aFBhcnNlRXJyb3JJZGVudGlmaWVyOworICAgICAgICAgICAgICAg
IHJldHVybjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9Cisg
ICAgICAgIGNhc2UgQXJyYXkgOiB7CisgICAgICAgICAgICBJREJLZXlQYXRoTGV4ZXI6OlRva2Vu
VHlwZSB0b2tlblR5cGUgPSBsZXhlci5jdXJyZW50VG9rZW5UeXBlKCk7CisgICAgICAgICAgICBB
U1NFUlQodG9rZW5UeXBlID09IElEQktleVBhdGhMZXhlcjo6VG9rZW5MZWZ0QnJhY2tldCk7CisK
KyAgICAgICAgICAgIHRva2VuVHlwZSA9IGxleGVyLm5leHRUb2tlblR5cGUoKTsKKyAgICAgICAg
ICAgIGlmICh0b2tlblR5cGUgIT0gSURCS2V5UGF0aExleGVyOjpUb2tlbk51bWJlcikgeworICAg
ICAgICAgICAgICAgIGVycm9yID0gSURCS2V5UGF0aFBhcnNlRXJyb3JBcnJheUluZGV4OworICAg
ICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgQVNTRVJU
KHRva2VuVHlwZSA9PSBJREJLZXlQYXRoTGV4ZXI6OlRva2VuTnVtYmVyKTsKKyAgICAgICAgICAg
IElEQktleVBhdGhFbGVtZW50IGVsZW1lbnQgPSBsZXhlci5jdXJyZW50RWxlbWVudCgpOworICAg
ICAgICAgICAgQVNTRVJUKGVsZW1lbnQudHlwZSA9PSBJREJLZXlQYXRoRWxlbWVudDo6SXNJbmRl
eGVkKTsKKyAgICAgICAgICAgIGVsZW1lbnRzLmFwcGVuZChlbGVtZW50KTsKKworICAgICAgICAg
ICAgdG9rZW5UeXBlID0gbGV4ZXIubmV4dFRva2VuVHlwZSgpOworICAgICAgICAgICAgaWYgKHRv
a2VuVHlwZSAhPSBJREJLZXlQYXRoTGV4ZXI6OlRva2VuUmlnaHRCcmFja2V0KSB7CisgICAgICAg
ICAgICAgICAgZXJyb3IgPSBJREJLZXlQYXRoUGFyc2VFcnJvckFycmF5SW5kZXg7CisgICAgICAg
ICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICB0b2tlblR5cGUg
PSBsZXhlci5uZXh0VG9rZW5UeXBlKCk7CisgICAgICAgICAgICBpZiAodG9rZW5UeXBlID09IElE
QktleVBhdGhMZXhlcjo6VG9rZW5Eb3QpCisgICAgICAgICAgICAgICAgc3RhdGUgPSBEb3Q7Cisg
ICAgICAgICAgICBlbHNlIGlmICh0b2tlblR5cGUgPT0gSURCS2V5UGF0aExleGVyOjpUb2tlbkxl
ZnRCcmFja2V0KQorICAgICAgICAgICAgICAgIHN0YXRlID0gQXJyYXk7CisgICAgICAgICAgICBl
bHNlIGlmICh0b2tlblR5cGUgPT0gSURCS2V5UGF0aExleGVyOjpUb2tlbkVuZCkKKyAgICAgICAg
ICAgICAgICBzdGF0ZSA9IEVuZDsKKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAg
IGVycm9yID0gSURCS2V5UGF0aFBhcnNlRXJyb3JBZnRlckFycmF5OworICAgICAgICAgICAgICAg
IHJldHVybjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9Cisg
ICAgICAgIGNhc2UgRG90OiB7CisgICAgICAgICAgICBJREJLZXlQYXRoTGV4ZXI6OlRva2VuVHlw
ZSB0b2tlblR5cGUgPSBsZXhlci5jdXJyZW50VG9rZW5UeXBlKCk7CisgICAgICAgICAgICBBU1NF
UlQodG9rZW5UeXBlID09IElEQktleVBhdGhMZXhlcjo6VG9rZW5Eb3QpOworCisgICAgICAgICAg
ICB0b2tlblR5cGUgPSBsZXhlci5uZXh0VG9rZW5UeXBlKCk7CisgICAgICAgICAgICBpZiAodG9r
ZW5UeXBlICE9IElEQktleVBhdGhMZXhlcjo6VG9rZW5JZGVudGlmaWVyKSB7CisgICAgICAgICAg
ICAgICAgZXJyb3IgPSBJREJLZXlQYXRoUGFyc2VFcnJvckRvdDsKKyAgICAgICAgICAgICAgICBy
ZXR1cm47CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHN0YXRlID0gSWRlbnRpZmllcjsK
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGNhc2UgRW5kOiB7CisgICAg
ICAgICAgICBlcnJvciA9IElEQktleVBhdGhQYXJzZUVycm9yTm9uZTsKKyAgICAgICAgICAgIHJl
dHVybjsKKyAgICAgICAgfQorICAgICAgICB9CisgICAgfQorfQorCit9IC8vIG5hbWVzcGFjZSBX
ZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKZGlmZiAtLWdpdCBh
L1dlYkNvcmUvc3RvcmFnZS9JREJLZXlQYXRoLmggYi9XZWJDb3JlL3N0b3JhZ2UvSURCS2V5UGF0
aC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAuLjg0OWYwNzZhMTViMjdhNjY4YjlkNTYwYmJhNDE5MzYwNmM4MzcxYzcK
LS0tIC9kZXYvbnVsbAorKysgYi9XZWJDb3JlL3N0b3JhZ2UvSURCS2V5UGF0aC5oCkBAIC0wLDAg
KzEsNjQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQor
ICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0Yg
VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICog
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKyAqLworCisjaWZuZGVmIElEQktleVBhdGhfaAorI2RlZmluZSBJREJLZXlQYXRo
X2gKKworI2lmIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQorCisjaW5jbHVkZSA8d3RmL1Bhc3NS
ZWZQdHIuaD4KKyNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgorI2luY2x1ZGUgPHd0Zi9WZWN0
b3IuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KKworbmFtZXNwYWNlIFdlYkNv
cmUgeworCitzdHJ1Y3QgSURCS2V5UGF0aEVsZW1lbnQgeworICAgIGVudW0gVHlwZSB7CisgICAg
ICAgIElzSW5kZXhlZCwKKyAgICAgICAgSXNOYW1lZCwKKyAgICB9OworCisgICAgVHlwZSB0eXBl
OworICAgIGludCBpbmRleDsKKyAgICBTdHJpbmcgaWRlbnRpZmllcjsKK307CisKK2VudW0gSURC
S2V5UGF0aFBhcnNlRXJyb3IgeworICAgIElEQktleVBhdGhQYXJzZUVycm9yTm9uZSwKKyAgICBJ
REJLZXlQYXRoUGFyc2VFcnJvclN0YXJ0LAorICAgIElEQktleVBhdGhQYXJzZUVycm9ySWRlbnRp
ZmllciwKKyAgICBJREJLZXlQYXRoUGFyc2VFcnJvckFycmF5SW5kZXgsCisgICAgSURCS2V5UGF0
aFBhcnNlRXJyb3JBZnRlckFycmF5LAorICAgIElEQktleVBhdGhQYXJzZUVycm9yRG90LAorfTsK
Kwordm9pZCBJREJQYXJzZUtleVBhdGgoY29uc3QgU3RyaW5nJiwgVmVjdG9yPElEQktleVBhdGhF
bGVtZW50PiYsIElEQktleVBhdGhQYXJzZUVycm9yJik7CisKK30gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKKworI2VuZGlmCisKKyNlbmRpZiAvLyBJREJLZXlQYXRoX2gKZGlmZiAtLWdpdCBhL1dlYktp
dC9jaHJvbWl1bS9DaGFuZ2VMb2cgYi9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCmluZGV4IGVi
MjQ2Njg0OTZkOGM1YWUzNmFlZjliOWNhMDc1ZTg1ODEwOTc0OGQuLjkzMzllYjVhYWE5OWRmZDYx
MTYwZGY3MzIyZTY1YmQ2Yjk4YzI4MWUgMTAwNjQ0Ci0tLSBhL1dlYktpdC9jaHJvbWl1bS9DaGFu
Z2VMb2cKKysrIGIvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwpAQCAtMSwzICsxLDIwIEBACisy
MDEwLTA3LTI4ICBNYXJjdXMgQnVsYWNoICA8YnVsYWNoQGNocm9taXVtLm9yZz4KKworICAgICAg
ICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBJbXBsZW1lbnQgSURCS2V5
UGF0aCBwYXJzZXIuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD00Mjk3NgorCisgICAgICAgIElEQktleVBhdGggaXMgYW4gaW50ZXJuYWwgY2xhc3MsIGV4
cG9zZWQgb25seSBmb3IgdW5pdCB0ZXN0cyBmb3Igbm93LgorICAgICAgICBJdCdsbCBhbGxvdyBp
bmRleGVkIGRhdGFiYXNlIGltcGxlbWVudGF0aW9uIHRvIHRyYXZlcnNlIGEgZ2l2ZW4ga2V5IHBh
dGggYW5kIG9idGFpbiB0aGUgY29ycmVzcG9uZGluZyBwcm9wZXJ0aWVzCisgICAgICAgIGZyb20g
YSBTZXJpYWxpemVkU2NyaXB0VmFsdWUuCisKKyAgICAgICAgKiBXZWJLaXQuZ3lwOgorICAgICAg
ICAqIHRlc3RzL0lEQktleVBhdGhUZXN0LmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpF
eHBlY3RlZFRva2VuOjpFeHBlY3RlZFRva2VuKToKKyAgICAgICAgKFdlYkNvcmU6OmNoZWNrS2V5
UGF0aCk6CisgICAgICAgIChXZWJDb3JlOjpURVNUKToKKwogMjAxMC0wOC0xMiAgU2hlcmlmZiBC
b3QgIDx3ZWJraXQucmV2aWV3LmJvdEBnbWFpbC5jb20+CiAKICAgICAgICAgVW5yZXZpZXdlZCwg
cm9sbGluZyBvdXQgcjY1MjIxLgpkaWZmIC0tZ2l0IGEvV2ViS2l0L2Nocm9taXVtL1dlYktpdC5n
eXAgYi9XZWJLaXQvY2hyb21pdW0vV2ViS2l0Lmd5cAppbmRleCAxMjNhZWQ1OThlYzFmODUwN2Jh
MjhjOGQxNGNmOTRlODUzY2Q3MjQxLi5hMDRkMWViMjkyMWNjOTI3ODJkMDg5OGFmYWRmODNlNWE1
OWYxYWNjIDEwMDY0NAotLS0gYS9XZWJLaXQvY2hyb21pdW0vV2ViS2l0Lmd5cAorKysgYi9XZWJL
aXQvY2hyb21pdW0vV2ViS2l0Lmd5cApAQCAtNzAzLDYgKzcwMyw3IEBACiAgICAgICAgICAgICAg
ICAgICAgIF0sCiAgICAgICAgICAgICAgICAgICAgICdzb3VyY2VzJzogWwogICAgICAgICAgICAg
ICAgICAgICAgICAgJ3Rlc3RzL0RyYWdJbWFnZVRlc3QuY3BwJywKKyAgICAgICAgICAgICAgICAg
ICAgICAgICd0ZXN0cy9JREJLZXlQYXRoVGVzdC5jcHAnLAogICAgICAgICAgICAgICAgICAgICAg
ICAgJ3Rlc3RzL0tleWJvYXJkVGVzdC5jcHAnLAogICAgICAgICAgICAgICAgICAgICAgICAgJ3Rl
c3RzL0tVUkxUZXN0LmNwcCcsCiAgICAgICAgICAgICAgICAgICAgICAgICAndGVzdHMvUnVuQWxs
VGVzdHMuY3BwJywKZGlmZiAtLWdpdCBhL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9JREJLZXlQYXRo
VGVzdC5jcHAgYi9XZWJLaXQvY2hyb21pdW0vdGVzdHMvSURCS2V5UGF0aFRlc3QuY3BwCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAuLjYwMGE5YWE4Njg5YzRkNWNmNTJmNWY2NmY5ZGM2ZDI3MTU4ZWNlZGUKLS0tIC9kZXYv
bnVsbAorKysgYi9XZWJLaXQvY2hyb21pdW0vdGVzdHMvSURCS2V5UGF0aFRlc3QuY3BwCkBAIC0w
LDAgKzEsMTg5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkK
KyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YK
KyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIklEQktl
eVBhdGguaCIKKworI2luY2x1ZGUgPGd0ZXN0L2d0ZXN0Lmg+CisjaW5jbHVkZSA8d3RmL1ZlY3Rv
ci5oPgorCisjaWYgRU5BQkxFKElOREVYRURfREFUQUJBU0UpCisKK3VzaW5nIG5hbWVzcGFjZSBX
ZWJDb3JlOworCituYW1lc3BhY2UgeworCitJREJLZXlQYXRoRWxlbWVudCBFeHBlY3RlZFRva2Vu
KGNvbnN0IFN0cmluZyYgaWRlbnRpZmllciwgYm9vbCBpc0luZGV4ZWQsIGludCBpbmRleCkKK3sK
KyAgICBJREJLZXlQYXRoRWxlbWVudCBleHBlY3RlZDsKKyAgICBpZiAoaXNJbmRleGVkKSB7Cisg
ICAgICAgIGV4cGVjdGVkLnR5cGUgPSBJREJLZXlQYXRoRWxlbWVudDo6SXNJbmRleGVkOworICAg
ICAgICBleHBlY3RlZC5pbmRleCA9IGluZGV4OworICAgIH0gZWxzZSB7CisgICAgICAgIGV4cGVj
dGVkLnR5cGUgPSBJREJLZXlQYXRoRWxlbWVudDo6SXNOYW1lZDsKKyAgICAgICAgZXhwZWN0ZWQu
aWRlbnRpZmllciA9IGlkZW50aWZpZXI7CisgICAgfQorICAgIHJldHVybiBleHBlY3RlZDsKK30K
Kwordm9pZCBjaGVja0tleVBhdGgoY29uc3QgU3RyaW5nJiBrZXlQYXRoLCBjb25zdCBWZWN0b3I8
SURCS2V5UGF0aEVsZW1lbnQ+JiBleHBlY3RlZCwgaW50IHBhcnNlckVycm9yKQoreworCisgICAg
SURCS2V5UGF0aFBhcnNlRXJyb3IgZXJyb3I7CisgICAgVmVjdG9yPElEQktleVBhdGhFbGVtZW50
PiBpZGJLZXlQYXRoRWxlbWVudHM7CisgICAgSURCUGFyc2VLZXlQYXRoKGtleVBhdGgsIGlkYktl
eVBhdGhFbGVtZW50cywgZXJyb3IpOworICAgIEFTU0VSVF9FUShwYXJzZXJFcnJvciwgZXJyb3Ip
OworICAgIGlmIChlcnJvciAhPSBJREJLZXlQYXRoUGFyc2VFcnJvck5vbmUpCisgICAgICAgIHJl
dHVybjsKKyAgICBBU1NFUlRfRVEoZXhwZWN0ZWQuc2l6ZSgpLCBpZGJLZXlQYXRoRWxlbWVudHMu
c2l6ZSgpKTsKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IGV4cGVjdGVkLnNpemUoKTsgKytpKSB7
CisgICAgICAgIEFTU0VSVF9UUlVFKGV4cGVjdGVkW2ldLnR5cGUgPT0gaWRiS2V5UGF0aEVsZW1l
bnRzW2ldLnR5cGUpIDw8IGk7CisgICAgICAgIGlmIChleHBlY3RlZFtpXS50eXBlID09IElEQktl
eVBhdGhFbGVtZW50OjpJc0luZGV4ZWQpCisgICAgICAgICAgICBBU1NFUlRfRVEoZXhwZWN0ZWRb
aV0uaW5kZXgsIGlkYktleVBhdGhFbGVtZW50c1tpXS5pbmRleCkgPDwgaTsKKyAgICAgICAgZWxz
ZSBpZiAoZXhwZWN0ZWRbaV0udHlwZSA9PSBJREJLZXlQYXRoRWxlbWVudDo6SXNOYW1lZCkKKyAg
ICAgICAgICAgIEFTU0VSVF9UUlVFKGV4cGVjdGVkW2ldLmlkZW50aWZpZXIgPT0gaWRiS2V5UGF0
aEVsZW1lbnRzW2ldLmlkZW50aWZpZXIpIDw8IGk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAg
IEFTU0VSVF9UUlVFKGZhbHNlKSA8PCAiSW52YWxpZCBJREJLZXlQYXRoRWxlbWVudCB0eXBlIjsK
KyAgICB9Cit9CisKK1RFU1QoSURCS2V5UGF0aFRlc3QsIFZhbGlkS2V5UGF0aDApCit7CisgICAg
VmVjdG9yPElEQktleVBhdGhFbGVtZW50PiBleHBlY3RlZDsKKyAgICBTdHJpbmcga2V5UGF0aCgi
Zm9vLmJhci56b28iKTsKKyAgICBleHBlY3RlZC5hcHBlbmQoRXhwZWN0ZWRUb2tlbigiZm9vIiwg
ZmFsc2UsIDApKTsKKyAgICBleHBlY3RlZC5hcHBlbmQoRXhwZWN0ZWRUb2tlbigiYmFyIiwgZmFs
c2UsIDApKTsKKyAgICBleHBlY3RlZC5hcHBlbmQoRXhwZWN0ZWRUb2tlbigiem9vIiwgZmFsc2Us
IDApKTsKKyAgICBjaGVja0tleVBhdGgoa2V5UGF0aCwgZXhwZWN0ZWQsIDApOworfQorCitURVNU
KElEQktleVBhdGhUZXN0LCBWYWxpZEtleVBhdGgxKQoreworICAgIFZlY3RvcjxJREJLZXlQYXRo
RWxlbWVudD4gZXhwZWN0ZWQ7CisgICAgU3RyaW5nIGtleVBhdGgoImFbMzRdWzIwXS5mb29bMl0u
YmFyIik7CisgICAgZXhwZWN0ZWQuYXBwZW5kKEV4cGVjdGVkVG9rZW4oImEiLCBmYWxzZSwgMCkp
OworICAgIGV4cGVjdGVkLmFwcGVuZChFeHBlY3RlZFRva2VuKFN0cmluZygpLCB0cnVlLCAzNCkp
OworICAgIGV4cGVjdGVkLmFwcGVuZChFeHBlY3RlZFRva2VuKFN0cmluZygpLCB0cnVlLCAyMCkp
OworICAgIGV4cGVjdGVkLmFwcGVuZChFeHBlY3RlZFRva2VuKCJmb28iLCBmYWxzZSwgMCkpOwor
ICAgIGV4cGVjdGVkLmFwcGVuZChFeHBlY3RlZFRva2VuKFN0cmluZygpLCB0cnVlLCAyKSk7Cisg
ICAgZXhwZWN0ZWQuYXBwZW5kKEV4cGVjdGVkVG9rZW4oImJhciIsIGZhbHNlLCAwKSk7CisgICAg
Y2hlY2tLZXlQYXRoKGtleVBhdGgsIGV4cGVjdGVkLCAwKTsKK30KKworVEVTVChJREJLZXlQYXRo
VGVzdCwgVmFsaWRLZXlQYXRoMikKK3sKKyAgICBWZWN0b3I8SURCS2V5UGF0aEVsZW1lbnQ+IGV4
cGVjdGVkOworICAgIFN0cmluZyBrZXlQYXRoKCJmb29bIDM0IF0uWm9vX1swMDAyM11cdC5fYyIp
OworICAgIGV4cGVjdGVkLmFwcGVuZChFeHBlY3RlZFRva2VuKCJmb28iLCBmYWxzZSwgMCkpOwor
ICAgIGV4cGVjdGVkLmFwcGVuZChFeHBlY3RlZFRva2VuKFN0cmluZygpLCB0cnVlLCAzNCkpOwor
ICAgIGV4cGVjdGVkLmFwcGVuZChFeHBlY3RlZFRva2VuKCJab29fIiwgZmFsc2UsIDApKTsKKyAg
ICBleHBlY3RlZC5hcHBlbmQoRXhwZWN0ZWRUb2tlbihTdHJpbmcoKSwgdHJ1ZSwgMjMpKTsKKyAg
ICBleHBlY3RlZC5hcHBlbmQoRXhwZWN0ZWRUb2tlbigiX2MiLCBmYWxzZSwgMCkpOworICAgIGNo
ZWNrS2V5UGF0aChrZXlQYXRoLCBleHBlY3RlZCwgMCk7Cit9CisKK1RFU1QoSURCS2V5UGF0aFRl
c3QsIFZhbGlkS2V5UGF0aDMpCit7CisgICAgVmVjdG9yPElEQktleVBhdGhFbGVtZW50PiBleHBl
Y3RlZDsKKyAgICBTdHJpbmcga2V5UGF0aCgiZm9vWyAzNCBdIik7CisgICAgZXhwZWN0ZWQuYXBw
ZW5kKEV4cGVjdGVkVG9rZW4oImZvbyIsIGZhbHNlLCAwKSk7CisgICAgZXhwZWN0ZWQuYXBwZW5k
KEV4cGVjdGVkVG9rZW4oU3RyaW5nKCksIHRydWUsIDM0KSk7CisgICAgY2hlY2tLZXlQYXRoKGtl
eVBhdGgsIGV4cGVjdGVkLCAwKTsKK30KKworVEVTVChJREJLZXlQYXRoVGVzdCwgVmFsaWRLZXlQ
YXRoNCkKK3sKKyAgICBWZWN0b3I8SURCS2V5UGF0aEVsZW1lbnQ+IGV4cGVjdGVkOworICAgIFN0
cmluZyBrZXlQYXRoKCJbIDM0IF0iKTsKKyAgICBleHBlY3RlZC5hcHBlbmQoRXhwZWN0ZWRUb2tl
bihTdHJpbmcoKSwgdHJ1ZSwgMzQpKTsKKyAgICBjaGVja0tleVBhdGgoa2V5UGF0aCwgZXhwZWN0
ZWQsIDApOworfQorCitURVNUKElEQktleVBhdGhUZXN0LCBJbnZhbGlkS2V5UGF0aDIpCit7Cisg
ICAgVmVjdG9yPElEQktleVBhdGhFbGVtZW50PiBleHBlY3RlZDsKKyAgICBTdHJpbmcga2V5UGF0
aCgiYVtbMzRdXS5iWzJdLmMiKTsKKyAgICBleHBlY3RlZC5hcHBlbmQoRXhwZWN0ZWRUb2tlbigi
YSIsIGZhbHNlLCAwKSk7CisgICAgY2hlY2tLZXlQYXRoKGtleVBhdGgsIGV4cGVjdGVkLCAzKTsK
K30KKworVEVTVChJREJLZXlQYXRoVGVzdCwgSW52YWxpZEtleVBhdGgzKQoreworICAgIFZlY3Rv
cjxJREJLZXlQYXRoRWxlbWVudD4gZXhwZWN0ZWQ7CisgICAgU3RyaW5nIGtleVBhdGgoImFbWzM0
XS5iWzJdLmMiKTsKKyAgICBleHBlY3RlZC5hcHBlbmQoRXhwZWN0ZWRUb2tlbigiYSIsIGZhbHNl
LCAwKSk7CisgICAgY2hlY2tLZXlQYXRoKGtleVBhdGgsIGV4cGVjdGVkLCAzKTsKK30KKworVEVT
VChJREJLZXlQYXRoVGVzdCwgSW52YWxpZEtleVBhdGg1KQoreworICAgIFZlY3RvcjxJREJLZXlQ
YXRoRWxlbWVudD4gZXhwZWN0ZWQ7CisgICAgU3RyaW5nIGtleVBhdGgoImFbWzM0LmJbMl0uYyIp
OworICAgIGV4cGVjdGVkLmFwcGVuZChFeHBlY3RlZFRva2VuKCJhIiwgZmFsc2UsIDApKTsKKyAg
ICBjaGVja0tleVBhdGgoa2V5UGF0aCwgZXhwZWN0ZWQsIDMpOworfQorCitURVNUKElEQktleVBh
dGhUZXN0LCBJbnZhbGlkS2V5UGF0aDYpCit7CisgICAgVmVjdG9yPElEQktleVBhdGhFbGVtZW50
PiBleHBlY3RlZDsKKyAgICBTdHJpbmcga2V5UGF0aCgiK2FbMzRdLmJbMl0uYyIpOworICAgIGNo
ZWNrS2V5UGF0aChrZXlQYXRoLCBleHBlY3RlZCwgMSk7Cit9CisKK1RFU1QoSURCS2V5UGF0aFRl
c3QsIEludmFsaWRLZXlQYXRoNykKK3sKKyAgICBWZWN0b3I8SURCS2V5UGF0aEVsZW1lbnQ+IGV4
cGVjdGVkOworICAgIFN0cmluZyBrZXlQYXRoKCIlYVszNF0uYlsyXS5jIik7CisgICAgY2hlY2tL
ZXlQYXRoKGtleVBhdGgsIGV4cGVjdGVkLCAxKTsKK30KKworVEVTVChJREJLZXlQYXRoVGVzdCwg
SW52YWxpZEtleVBhdGg4KQoreworICAgIFZlY3RvcjxJREJLZXlQYXRoRWxlbWVudD4gZXhwZWN0
ZWQ7CisgICAgU3RyaW5nIGtleVBhdGgoImF7WzM0XX0uYlsyXS5jIik7CisgICAgZXhwZWN0ZWQu
YXBwZW5kKEV4cGVjdGVkVG9rZW4oImEiLCBmYWxzZSwgMCkpOworICAgIGNoZWNrS2V5UGF0aChr
ZXlQYXRoLCBleHBlY3RlZCwgMik7Cit9CisKK1RFU1QoSURCS2V5UGF0aFRlc3QsIEludmFsaWRL
ZXlQYXRoOSkKK3sKKyAgICBWZWN0b3I8SURCS2V5UGF0aEVsZW1lbnQ+IGV4cGVjdGVkOworICAg
IFN0cmluZyBrZXlQYXRoKCJhLi5iWzJdLmMiKTsKKyAgICBleHBlY3RlZC5hcHBlbmQoRXhwZWN0
ZWRUb2tlbigiYSIsIGZhbHNlLCAwKSk7CisgICAgY2hlY2tLZXlQYXRoKGtleVBhdGgsIGV4cGVj
dGVkLCA1KTsKK30KKworVEVTVChJREJLZXlQYXRoVGVzdCwgSW52YWxpZEtleVBhdGgxMCkKK3sK
KyAgICBWZWN0b3I8SURCS2V5UGF0aEVsZW1lbnQ+IGV4cGVjdGVkOworICAgIFN0cmluZyBrZXlQ
YXRoKCJhWzM0XWIuZm9vWzJdLmJhciIpOworICAgIGV4cGVjdGVkLmFwcGVuZChFeHBlY3RlZFRv
a2VuKCJhIiwgZmFsc2UsIDApKTsKKyAgICBleHBlY3RlZC5hcHBlbmQoRXhwZWN0ZWRUb2tlbihT
dHJpbmcoKSwgdHJ1ZSwgMzQpKTsKKyAgICBjaGVja0tleVBhdGgoa2V5UGF0aCwgZXhwZWN0ZWQs
IDQpOworfQorCit9IC8vIG5hbWVzcGFjZQorCisjZW5kaWYgLy8gRU5BQkxFKElOREVYRURfREFU
QUJBU0UpCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>64340</attachid>
            <date>2010-08-13 08:11:34 -0700</date>
            <delta_ts>2010-08-14 23:10:32 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-42976-20100813161131.patch</filename>
            <type>text/plain</type>
            <size>22024</size>
            <attacher name="Marcus Bulach">bulach</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
ZGQ2ODliYWZjM2E1YTIwNGY5Mjk2OTkwNjE3YzVjOTBkOWI4NDRiZC4uNTY2YTZlYTE4ZGRhYzY0
N2JiYzU3ZTZmYzc3YjEyZDg5YzJiN2ZjNiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cK
KysrIGIvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwzOCBAQAorMjAxMC0wNy0yOCAgTWFy
Y3VzIEJ1bGFjaCAgPGJ1bGFjaEBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
Tk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgSW1wbGVtZW50IElEQktleVBhdGggcGFyc2VyLgor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDI5NzYKKwor
ICAgICAgICBJREJLZXlQYXRoIGlzIGFuIGludGVybmFsIGNsYXNzLCBleHBvc2VkIG9ubHkgZm9y
IHVuaXQgdGVzdHMgZm9yIG5vdy4KKyAgICAgICAgSXQnbGwgYWxsb3cgaW5kZXhlZCBkYXRhYmFz
ZSBpbXBsZW1lbnRhdGlvbiB0byB0cmF2ZXJzZSBhIGdpdmVuIGtleSBwYXRoIGFuZCBvYnRhaW4g
dGhlIGNvcnJlc3BvbmRpbmcgcHJvcGVydGllcworICAgICAgICBmcm9tIGEgU2VyaWFsaXplZFNj
cmlwdFZhbHVlLgorCisgICAgICAgICogV2ViQ29yZS5neXBpOgorICAgICAgICAqIHN0b3JhZ2Uv
SURCS2V5UGF0aC5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6SURCS2V5UGF0aDo6Y3Jl
YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OklEQktleVBhdGg6OklEQktleVBhdGgpOgorICAgICAg
ICAoV2ViQ29yZTo6SURCS2V5UGF0aDo6fklEQktleVBhdGgpOgorICAgICAgICAoV2ViQ29yZTo6
SURCS2V5UGF0aDo6aGFzTmV4dCk6CisgICAgICAgIChXZWJDb3JlOjpJREJLZXlQYXRoOjpuZXh0
KToKKyAgICAgICAgKFdlYkNvcmU6OklEQktleVBhdGg6OmlkZW50aWZpZXIpOgorICAgICAgICAo
V2ViQ29yZTo6SURCS2V5UGF0aDo6aGFzSW5kZXgpOgorICAgICAgICAoV2ViQ29yZTo6SURCS2V5
UGF0aDo6aW5kZXhWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpJREJLZXlQYXRoOjpwYXJzZXJF
cnJvcik6CisgICAgICAgIChXZWJDb3JlOjpJREJLZXlQYXRoOjpwYXJzZSk6CisgICAgICAgIChX
ZWJDb3JlOjpJREJLZXlQYXRoOjpMZXhlcjo6bGV4KToKKyAgICAgICAgKFdlYkNvcmU6OmlzU2Fm
ZUlkZW50aWZpZXJTdGFydENoYXJhY3Rlcik6CisgICAgICAgIChXZWJDb3JlOjppc1NhZmVJZGVu
dGlmaWVyQ2hhcmFjdGVyKToKKyAgICAgICAgKFdlYkNvcmU6OklEQktleVBhdGg6OkxleGVyOjps
ZXhJZGVudGlmaWVyKToKKyAgICAgICAgKFdlYkNvcmU6OklEQktleVBhdGg6OkxleGVyOjpsZXhO
dW1iZXIpOgorICAgICAgICAqIHN0b3JhZ2UvSURCS2V5UGF0aC5oOiBBZGRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OklEQktleVBhdGg6OlRva2VuOjpUb2tlbik6CisgICAgICAgIChXZWJDb3JlOjpJ
REJLZXlQYXRoOjopOgorICAgICAgICAoV2ViQ29yZTo6SURCS2V5UGF0aDo6TGV4ZXI6OkxleGVy
KToKKyAgICAgICAgKFdlYkNvcmU6OklEQktleVBhdGg6OkxleGVyOjpuZXh0KToKKyAgICAgICAg
KFdlYkNvcmU6OklEQktleVBhdGg6OkxleGVyOjpjdXJyZW50VG9rZW4pOgorCiAyMDEwLTA4LTEz
ICBEaXJrIFNjaHVsemUgIDxrcml0QHdlYmtpdC5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkg
Tmlrb2xhcyBaaW1tZXJtYW5uLgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9XZWJDb3JlLmd5cGkgYi9X
ZWJDb3JlL1dlYkNvcmUuZ3lwaQppbmRleCA2OWYzZjk5N2I3MjAwOGQzMTdmMTA4MmFiOTY5OTcy
YTdmM2MwNTAzLi4yMjI4YjI1MjgwMGUyODVjZDdmNjNkZmRkYmM1M2M2YzZkNTNhYTMyIDEwMDY0
NAotLS0gYS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQorKysgYi9XZWJDb3JlL1dlYkNvcmUuZ3lwaQpA
QCAtMzU0NCw2ICszNTQ0LDggQEAKICAgICAgICAgICAgICdzdG9yYWdlL0lEQkluZGV4QmFja2Vu
ZEltcGwuaCcsCiAgICAgICAgICAgICAnc3RvcmFnZS9JREJLZXkuY3BwJywKICAgICAgICAgICAg
ICdzdG9yYWdlL0lEQktleS5oJywKKyAgICAgICAgICAgICdzdG9yYWdlL0lEQktleVBhdGguY3Bw
JywKKyAgICAgICAgICAgICdzdG9yYWdlL0lEQktleVBhdGguaCcsCiAgICAgICAgICAgICAnc3Rv
cmFnZS9JREJLZXlSYW5nZS5jcHAnLAogICAgICAgICAgICAgJ3N0b3JhZ2UvSURCS2V5UmFuZ2Uu
aCcsCiAgICAgICAgICAgICAnc3RvcmFnZS9JREJLZXlUcmVlLmgnLApkaWZmIC0tZ2l0IGEvV2Vi
Q29yZS9zdG9yYWdlL0lEQktleVBhdGguY3BwIGIvV2ViQ29yZS9zdG9yYWdlL0lEQktleVBhdGgu
Y3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAuLjg4MzNkYTA2ODkwOGExN2Y1OWRhZmYyYzdmY2IyY2I2NGU1YTdlNDgK
LS0tIC9kZXYvbnVsbAorKysgYi9XZWJDb3JlL3N0b3JhZ2UvSURCS2V5UGF0aC5jcHAKQEAgLTAs
MCArMSwyNjkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQor
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgor
ICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiSURCS2V5
UGF0aC5oIgorCisjaWYgRU5BQkxFKElOREVYRURfREFUQUJBU0UpCisKKyNpbmNsdWRlIDx3dGYv
QVNDSUlDVHlwZS5oPgorI2luY2x1ZGUgPHd0Zi9kdG9hLmg+CisKK25hbWVzcGFjZSBXZWJDb3Jl
IHsKKworY2xhc3MgSURCS2V5UGF0aExleGVyIHsKK3B1YmxpYzoKKyAgICBlbnVtIFRva2VuVHlw
ZSB7CisgICAgICAgIFRva2VuTGVmdEJyYWNrZXQsCisgICAgICAgIFRva2VuUmlnaHRCcmFja2V0
LAorICAgICAgICBUb2tlbklkZW50aWZpZXIsCisgICAgICAgIFRva2VuTnVtYmVyLAorICAgICAg
ICBUb2tlbkRvdCwKKyAgICAgICAgVG9rZW5FbmQsCisgICAgICAgIFRva2VuRXJyb3IKKyAgICB9
OworCisgICAgZXhwbGljaXQgSURCS2V5UGF0aExleGVyKGNvbnN0IFN0cmluZyYgcykKKyAgICAg
ICAgOiBtX3N0cmluZyhzKQorICAgICAgICAsIG1fcHRyKHMuY2hhcmFjdGVycygpKQorICAgICAg
ICAsIG1fZW5kKHMuY2hhcmFjdGVycygpICsgcy5sZW5ndGgoKSkKKyAgICAgICAgLCBtX2N1cnJl
bnRUb2tlblR5cGUoVG9rZW5FcnJvcikKKyAgICB7CisgICAgfQorCisgICAgVG9rZW5UeXBlIGN1
cnJlbnRUb2tlblR5cGUoKSBjb25zdCB7IHJldHVybiBtX2N1cnJlbnRUb2tlblR5cGU7IH0KKwor
ICAgIFRva2VuVHlwZSBuZXh0VG9rZW5UeXBlKCkKKyAgICB7CisgICAgICAgIG1fY3VycmVudFRv
a2VuVHlwZSA9IGxleChtX2N1cnJlbnRFbGVtZW50KTsKKyAgICAgICAgcmV0dXJuIG1fY3VycmVu
dFRva2VuVHlwZTsKKyAgICB9CisKKyAgICBjb25zdCBJREJLZXlQYXRoRWxlbWVudCYgY3VycmVu
dEVsZW1lbnQoKSB7IHJldHVybiBtX2N1cnJlbnRFbGVtZW50OyB9CisKK3ByaXZhdGU6CisgICAg
VG9rZW5UeXBlIGxleChJREJLZXlQYXRoRWxlbWVudCYpOworICAgIFRva2VuVHlwZSBsZXhJZGVu
dGlmaWVyKElEQktleVBhdGhFbGVtZW50Jik7CisgICAgVG9rZW5UeXBlIGxleE51bWJlcihJREJL
ZXlQYXRoRWxlbWVudCYpOworICAgIElEQktleVBhdGhFbGVtZW50IG1fY3VycmVudEVsZW1lbnQ7
CisgICAgU3RyaW5nIG1fc3RyaW5nOworICAgIGNvbnN0IFVDaGFyKiBtX3B0cjsKKyAgICBjb25z
dCBVQ2hhciogbV9lbmQ7CisgICAgVG9rZW5UeXBlIG1fY3VycmVudFRva2VuVHlwZTsKK307CisK
K0lEQktleVBhdGhMZXhlcjo6VG9rZW5UeXBlIElEQktleVBhdGhMZXhlcjo6bGV4KElEQktleVBh
dGhFbGVtZW50JiBlbGVtZW50KQoreworICAgIHdoaWxlIChtX3B0ciA8IG1fZW5kICYmIGlzQVND
SUlTcGFjZSgqbV9wdHIpKQorICAgICAgICArK21fcHRyOworCisgICAgaWYgKG1fcHRyID49IG1f
ZW5kKQorICAgICAgICByZXR1cm4gVG9rZW5FbmQ7CisKKyAgICBBU1NFUlQobV9wdHIgPCBtX2Vu
ZCk7CisgICAgc3dpdGNoICgqbV9wdHIpIHsKKyAgICBjYXNlICdbJzoKKyAgICAgICAgKyttX3B0
cjsKKyAgICAgICAgcmV0dXJuIFRva2VuTGVmdEJyYWNrZXQ7CisgICAgY2FzZSAnXSc6CisgICAg
ICAgICsrbV9wdHI7CisgICAgICAgIHJldHVybiBUb2tlblJpZ2h0QnJhY2tldDsKKyAgICBjYXNl
ICcuJzoKKyAgICAgICAgKyttX3B0cjsKKyAgICAgICAgcmV0dXJuIFRva2VuRG90OworICAgIGNh
c2UgJzAnOgorICAgIGNhc2UgJzEnOgorICAgIGNhc2UgJzInOgorICAgIGNhc2UgJzMnOgorICAg
IGNhc2UgJzQnOgorICAgIGNhc2UgJzUnOgorICAgIGNhc2UgJzYnOgorICAgIGNhc2UgJzcnOgor
ICAgIGNhc2UgJzgnOgorICAgIGNhc2UgJzknOgorICAgICAgICByZXR1cm4gbGV4TnVtYmVyKGVs
ZW1lbnQpOworICAgIGRlZmF1bHQ6CisgICAgICAgIHJldHVybiBsZXhJZGVudGlmaWVyKGVsZW1l
bnQpOworICAgIH0KKyAgICByZXR1cm4gVG9rZW5FcnJvcjsKK30KKworc3RhdGljIGlubGluZSBi
b29sIGlzU2FmZUlkZW50aWZpZXJTdGFydENoYXJhY3RlcihVQ2hhciBjKQoreworICAgIHJldHVy
biBpc0FTQ0lJQWxwaGEoYykgfHwgKGMgPT0gJ18nKSB8fCAoYyA9PSAnJCcpOworfQorCitzdGF0
aWMgaW5saW5lIGJvb2wgaXNTYWZlSWRlbnRpZmllckNoYXJhY3RlcihVQ2hhciBjKQoreworICAg
IHJldHVybiBpc0FTQ0lJQWxwaGFudW1lcmljKGMpIHx8IChjID09ICdfJykgfHwgKGMgPT0gJyQn
KTsKK30KKworSURCS2V5UGF0aExleGVyOjpUb2tlblR5cGUgSURCS2V5UGF0aExleGVyOjpsZXhJ
ZGVudGlmaWVyKElEQktleVBhdGhFbGVtZW50JiBlbGVtZW50KQoreworICAgIGNvbnN0IFVDaGFy
KiBzdGFydCA9IG1fcHRyOworICAgIGlmIChtX3B0ciA8IG1fZW5kICYmIGlzU2FmZUlkZW50aWZp
ZXJTdGFydENoYXJhY3RlcigqbV9wdHIpKQorICAgICAgICArK21fcHRyOworICAgIGVsc2UKKyAg
ICAgICAgcmV0dXJuIFRva2VuRXJyb3I7CisKKyAgICB3aGlsZSAobV9wdHIgPCBtX2VuZCAmJiBp
c1NhZmVJZGVudGlmaWVyQ2hhcmFjdGVyKCptX3B0cikpCisgICAgICAgICsrbV9wdHI7CisKKyAg
ICBlbGVtZW50LnR5cGUgPSBJREJLZXlQYXRoRWxlbWVudDo6SXNOYW1lZDsKKyAgICBlbGVtZW50
LmlkZW50aWZpZXIgPSBTdHJpbmcoc3RhcnQsIG1fcHRyIC0gc3RhcnQpOworICAgIHJldHVybiBU
b2tlbklkZW50aWZpZXI7Cit9CisKK0lEQktleVBhdGhMZXhlcjo6VG9rZW5UeXBlIElEQktleVBh
dGhMZXhlcjo6bGV4TnVtYmVyKElEQktleVBhdGhFbGVtZW50JiBlbGVtZW50KQoreworICAgIGlm
IChtX3B0ciA+PSBtX2VuZCkKKyAgICAgICAgcmV0dXJuIFRva2VuRXJyb3I7CisKKyAgICBjb25z
dCBVQ2hhciogc3RhcnQgPSBtX3B0cjsKKyAgICAvLyBbMC05XSoKKyAgICB3aGlsZSAobV9wdHIg
PCBtX2VuZCAmJiBpc0FTQ0lJRGlnaXQoKm1fcHRyKSkKKyAgICAgICAgKyttX3B0cjsKKworICAg
IFN0cmluZyBudW1iZXJBc1N0cmluZzsKKyAgICBudW1iZXJBc1N0cmluZyA9IFN0cmluZyhzdGFy
dCwgbV9wdHIgLSBzdGFydCk7CisgICAgYm9vbCBvayA9IGZhbHNlOworICAgIHVuc2lnbmVkIG51
bWJlciA9IG51bWJlckFzU3RyaW5nLnRvVUludFN0cmljdCgmb2spOworICAgIGlmICghb2spCisg
ICAgICAgIHJldHVybiBUb2tlbkVycm9yOworCisgICAgZWxlbWVudC50eXBlID0gSURCS2V5UGF0
aEVsZW1lbnQ6OklzSW5kZXhlZDsKKyAgICBlbGVtZW50LmluZGV4ID0gbnVtYmVyOworICAgIHJl
dHVybiBUb2tlbk51bWJlcjsKK30KKwordm9pZCBJREJQYXJzZUtleVBhdGgoY29uc3QgU3RyaW5n
JiBrZXlQYXRoLCBWZWN0b3I8SURCS2V5UGF0aEVsZW1lbnQ+JiBlbGVtZW50cywgSURCS2V5UGF0
aFBhcnNlRXJyb3ImIGVycm9yKQoreworICAgIC8vIFRoaXMgaXMgYSBzaW1wbGlmaWVkIHBhcnNl
ciBsb29zZWx5IGJhc2VkIG9uIExpdGVyYWxQYXJzZXIuCisgICAgLy8gQW4gSURCS2V5UGF0aCBp
cyBkZWZpbmVkIGFzIGEgc2VxdWVuY2Ugb2Y6CisgICAgLy8gaWRlbnRpZmllckF7LmlkZW50aWZp
ZXJCe1tudW1lcmljX3ZhbHVlXX0KKyAgICAvLyB3aGVyZSAie30iIHJlcHJlc2VudHMgYW4gb3B0
aW9uYWwgcGFydAorICAgIC8vIFRoZSBiYXNpYyBzdGF0ZSBtYWNoaW5lIGlzOgorICAgIC8vIFN0
YXJ0ID0+IHtJZGVudGlmaWVyLCBBcnJheX0KKyAgICAvLyBJZGVudGlmaWVyID0+IHtEb3QsIEFy
cmF5LCBFbmR9CisgICAgLy8gQXJyYXkgPT4ge1N0YXJ0LCBEb3QsIEVuZH0KKyAgICAvLyBEb3Qg
PT4ge0lkZW50aWZpZXJ9CisgICAgLy8gSXQgYmFpbHMgb3V0IGFzIHNvb24gYXMgaXQgZmluZHMg
YW4gZXJyb3IsIGJ1dCBkb2Vzbid0IGRpc2NhcmQgdGhlIGJpdHMgaXQgbWFuYWdlZCB0byBwYXJz
ZS4KKyAgICBlbnVtIFBhcnNlclN0YXRlIHsgSWRlbnRpZmllciwgQXJyYXksIERvdCwgRW5kIH07
CisKKyAgICBJREJLZXlQYXRoTGV4ZXIgbGV4ZXIoa2V5UGF0aCk7CisgICAgSURCS2V5UGF0aExl
eGVyOjpUb2tlblR5cGUgdG9rZW5UeXBlID0gbGV4ZXIubmV4dFRva2VuVHlwZSgpOworICAgIFBh
cnNlclN0YXRlIHN0YXRlOworICAgIGlmICh0b2tlblR5cGUgPT0gSURCS2V5UGF0aExleGVyOjpU
b2tlbklkZW50aWZpZXIpCisgICAgICAgIHN0YXRlID0gSWRlbnRpZmllcjsKKyAgICBlbHNlIGlm
ICh0b2tlblR5cGUgPT0gSURCS2V5UGF0aExleGVyOjpUb2tlbkxlZnRCcmFja2V0KQorICAgICAg
ICBzdGF0ZSA9IEFycmF5OworICAgIGVsc2UgaWYgKHRva2VuVHlwZSA9PSBJREJLZXlQYXRoTGV4
ZXI6OlRva2VuRW5kKQorICAgICAgICBzdGF0ZSA9IEVuZDsKKyAgICBlbHNlIHsKKyAgICAgICAg
ZXJyb3IgPSBJREJLZXlQYXRoUGFyc2VFcnJvclN0YXJ0OworICAgICAgICByZXR1cm47CisgICAg
fQorCisgICAgd2hpbGUgKDEpIHsKKyAgICAgICAgc3dpdGNoIChzdGF0ZSkgeworICAgICAgICBj
YXNlIElkZW50aWZpZXIgOiB7CisgICAgICAgICAgICBJREJLZXlQYXRoTGV4ZXI6OlRva2VuVHlw
ZSB0b2tlblR5cGUgPSBsZXhlci5jdXJyZW50VG9rZW5UeXBlKCk7CisgICAgICAgICAgICBBU1NF
UlQodG9rZW5UeXBlID09IElEQktleVBhdGhMZXhlcjo6VG9rZW5JZGVudGlmaWVyKTsKKworICAg
ICAgICAgICAgSURCS2V5UGF0aEVsZW1lbnQgZWxlbWVudCA9IGxleGVyLmN1cnJlbnRFbGVtZW50
KCk7CisgICAgICAgICAgICBBU1NFUlQoZWxlbWVudC50eXBlID09IElEQktleVBhdGhFbGVtZW50
OjpJc05hbWVkKTsKKyAgICAgICAgICAgIGVsZW1lbnRzLmFwcGVuZChlbGVtZW50KTsKKworICAg
ICAgICAgICAgdG9rZW5UeXBlID0gbGV4ZXIubmV4dFRva2VuVHlwZSgpOworICAgICAgICAgICAg
aWYgKHRva2VuVHlwZSA9PSBJREJLZXlQYXRoTGV4ZXI6OlRva2VuRG90KQorICAgICAgICAgICAg
ICAgIHN0YXRlID0gRG90OworICAgICAgICAgICAgZWxzZSBpZiAodG9rZW5UeXBlID09IElEQktl
eVBhdGhMZXhlcjo6VG9rZW5MZWZ0QnJhY2tldCkKKyAgICAgICAgICAgICAgICBzdGF0ZSA9IEFy
cmF5OworICAgICAgICAgICAgZWxzZSBpZiAodG9rZW5UeXBlID09IElEQktleVBhdGhMZXhlcjo6
VG9rZW5FbmQpCisgICAgICAgICAgICAgICAgc3RhdGUgPSBFbmQ7CisgICAgICAgICAgICBlbHNl
IHsKKyAgICAgICAgICAgICAgICBlcnJvciA9IElEQktleVBhdGhQYXJzZUVycm9ySWRlbnRpZmll
cjsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgfQorICAgICAgICBjYXNlIEFycmF5IDogeworICAgICAgICAgICAgSURC
S2V5UGF0aExleGVyOjpUb2tlblR5cGUgdG9rZW5UeXBlID0gbGV4ZXIuY3VycmVudFRva2VuVHlw
ZSgpOworICAgICAgICAgICAgQVNTRVJUKHRva2VuVHlwZSA9PSBJREJLZXlQYXRoTGV4ZXI6OlRv
a2VuTGVmdEJyYWNrZXQpOworCisgICAgICAgICAgICB0b2tlblR5cGUgPSBsZXhlci5uZXh0VG9r
ZW5UeXBlKCk7CisgICAgICAgICAgICBpZiAodG9rZW5UeXBlICE9IElEQktleVBhdGhMZXhlcjo6
VG9rZW5OdW1iZXIpIHsKKyAgICAgICAgICAgICAgICBlcnJvciA9IElEQktleVBhdGhQYXJzZUVy
cm9yQXJyYXlJbmRleDsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisK
KyAgICAgICAgICAgIEFTU0VSVCh0b2tlblR5cGUgPT0gSURCS2V5UGF0aExleGVyOjpUb2tlbk51
bWJlcik7CisgICAgICAgICAgICBJREJLZXlQYXRoRWxlbWVudCBlbGVtZW50ID0gbGV4ZXIuY3Vy
cmVudEVsZW1lbnQoKTsKKyAgICAgICAgICAgIEFTU0VSVChlbGVtZW50LnR5cGUgPT0gSURCS2V5
UGF0aEVsZW1lbnQ6OklzSW5kZXhlZCk7CisgICAgICAgICAgICBlbGVtZW50cy5hcHBlbmQoZWxl
bWVudCk7CisKKyAgICAgICAgICAgIHRva2VuVHlwZSA9IGxleGVyLm5leHRUb2tlblR5cGUoKTsK
KyAgICAgICAgICAgIGlmICh0b2tlblR5cGUgIT0gSURCS2V5UGF0aExleGVyOjpUb2tlblJpZ2h0
QnJhY2tldCkgeworICAgICAgICAgICAgICAgIGVycm9yID0gSURCS2V5UGF0aFBhcnNlRXJyb3JB
cnJheUluZGV4OworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKworICAg
ICAgICAgICAgdG9rZW5UeXBlID0gbGV4ZXIubmV4dFRva2VuVHlwZSgpOworICAgICAgICAgICAg
aWYgKHRva2VuVHlwZSA9PSBJREJLZXlQYXRoTGV4ZXI6OlRva2VuRG90KQorICAgICAgICAgICAg
ICAgIHN0YXRlID0gRG90OworICAgICAgICAgICAgZWxzZSBpZiAodG9rZW5UeXBlID09IElEQktl
eVBhdGhMZXhlcjo6VG9rZW5MZWZ0QnJhY2tldCkKKyAgICAgICAgICAgICAgICBzdGF0ZSA9IEFy
cmF5OworICAgICAgICAgICAgZWxzZSBpZiAodG9rZW5UeXBlID09IElEQktleVBhdGhMZXhlcjo6
VG9rZW5FbmQpCisgICAgICAgICAgICAgICAgc3RhdGUgPSBFbmQ7CisgICAgICAgICAgICBlbHNl
IHsKKyAgICAgICAgICAgICAgICBlcnJvciA9IElEQktleVBhdGhQYXJzZUVycm9yQWZ0ZXJBcnJh
eTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgfQorICAgICAgICBjYXNlIERvdDogeworICAgICAgICAgICAgSURCS2V5
UGF0aExleGVyOjpUb2tlblR5cGUgdG9rZW5UeXBlID0gbGV4ZXIuY3VycmVudFRva2VuVHlwZSgp
OworICAgICAgICAgICAgQVNTRVJUKHRva2VuVHlwZSA9PSBJREJLZXlQYXRoTGV4ZXI6OlRva2Vu
RG90KTsKKworICAgICAgICAgICAgdG9rZW5UeXBlID0gbGV4ZXIubmV4dFRva2VuVHlwZSgpOwor
ICAgICAgICAgICAgaWYgKHRva2VuVHlwZSAhPSBJREJLZXlQYXRoTGV4ZXI6OlRva2VuSWRlbnRp
ZmllcikgeworICAgICAgICAgICAgICAgIGVycm9yID0gSURCS2V5UGF0aFBhcnNlRXJyb3JEb3Q7
CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBz
dGF0ZSA9IElkZW50aWZpZXI7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAg
ICBjYXNlIEVuZDogeworICAgICAgICAgICAgZXJyb3IgPSBJREJLZXlQYXRoUGFyc2VFcnJvck5v
bmU7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KK30K
KworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxFKElOREVYRURfREFU
QUJBU0UpCmRpZmYgLS1naXQgYS9XZWJDb3JlL3N0b3JhZ2UvSURCS2V5UGF0aC5oIGIvV2ViQ29y
ZS9zdG9yYWdlL0lEQktleVBhdGguaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi43Nzg3OTgwY2U5ZDUzZjQ4YTE1ZWM2
NzNmNmYwYzc3MTlkMjUwMjY3Ci0tLSAvZGV2L251bGwKKysrIGIvV2ViQ29yZS9zdG9yYWdlL0lE
QktleVBhdGguaApAQCAtMCwwICsxLDY0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwIEdv
b2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAi
QVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAq
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBJREJLZXlQYXRoX2gK
KyNkZWZpbmUgSURCS2V5UGF0aF9oCisKKyNpZiBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKKwor
I2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CisjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4K
KyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+
CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworc3RydWN0IElEQktleVBhdGhFbGVtZW50IHsKKyAg
ICBlbnVtIFR5cGUgeworICAgICAgICBJc0luZGV4ZWQsCisgICAgICAgIElzTmFtZWQsCisgICAg
fTsKKworICAgIFR5cGUgdHlwZTsKKyAgICB1bnNpZ25lZCBpbmRleDsKKyAgICBTdHJpbmcgaWRl
bnRpZmllcjsKK307CisKK2VudW0gSURCS2V5UGF0aFBhcnNlRXJyb3IgeworICAgIElEQktleVBh
dGhQYXJzZUVycm9yTm9uZSwKKyAgICBJREJLZXlQYXRoUGFyc2VFcnJvclN0YXJ0LAorICAgIElE
QktleVBhdGhQYXJzZUVycm9ySWRlbnRpZmllciwKKyAgICBJREJLZXlQYXRoUGFyc2VFcnJvckFy
cmF5SW5kZXgsCisgICAgSURCS2V5UGF0aFBhcnNlRXJyb3JBZnRlckFycmF5LAorICAgIElEQktl
eVBhdGhQYXJzZUVycm9yRG90LAorfTsKKwordm9pZCBJREJQYXJzZUtleVBhdGgoY29uc3QgU3Ry
aW5nJiwgVmVjdG9yPElEQktleVBhdGhFbGVtZW50PiYsIElEQktleVBhdGhQYXJzZUVycm9yJik7
CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmCisKKyNlbmRpZiAvLyBJREJLZXlQ
YXRoX2gKZGlmZiAtLWdpdCBhL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cgYi9XZWJLaXQvY2hy
b21pdW0vQ2hhbmdlTG9nCmluZGV4IDJhZDEzNmIxZjE4YTVmN2EyN2QyOGM3ZThiODA1ZDA4MGVh
NWE0ZmQuLjRmMDY2N2VmYjNjNjRmOTdhMWIyYzUzNjk2NjZiZTUwMDI3ZjRlNWMgMTAwNjQ0Ci0t
LSBhL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKKysrIGIvV2ViS2l0L2Nocm9taXVtL0NoYW5n
ZUxvZwpAQCAtMSwzICsxLDIwIEBACisyMDEwLTA3LTI4ICBNYXJjdXMgQnVsYWNoICA8YnVsYWNo
QGNocm9taXVtLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKwor
ICAgICAgICBJbXBsZW1lbnQgSURCS2V5UGF0aCBwYXJzZXIuCisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD00Mjk3NgorCisgICAgICAgIElEQktleVBhdGgg
aXMgYW4gaW50ZXJuYWwgY2xhc3MsIGV4cG9zZWQgb25seSBmb3IgdW5pdCB0ZXN0cyBmb3Igbm93
LgorICAgICAgICBJdCdsbCBhbGxvdyBpbmRleGVkIGRhdGFiYXNlIGltcGxlbWVudGF0aW9uIHRv
IHRyYXZlcnNlIGEgZ2l2ZW4ga2V5IHBhdGggYW5kIG9idGFpbiB0aGUgY29ycmVzcG9uZGluZyBw
cm9wZXJ0aWVzCisgICAgICAgIGZyb20gYSBTZXJpYWxpemVkU2NyaXB0VmFsdWUuCisKKyAgICAg
ICAgKiBXZWJLaXQuZ3lwOgorICAgICAgICAqIHRlc3RzL0lEQktleVBhdGhUZXN0LmNwcDogQWRk
ZWQuCisgICAgICAgIChXZWJDb3JlOjpFeHBlY3RlZFRva2VuOjpFeHBlY3RlZFRva2VuKToKKyAg
ICAgICAgKFdlYkNvcmU6OmNoZWNrS2V5UGF0aCk6CisgICAgICAgIChXZWJDb3JlOjpURVNUKToK
KwogMjAxMC0wOC0xMiAgWXVyeSBTZW1pa2hhdHNreSAgPHl1cnlzQGNocm9taXVtLm9yZz4KIAog
ICAgICAgICBSZXZpZXdlZCBieSBQYXZlbCBGZWxkbWFuLgpkaWZmIC0tZ2l0IGEvV2ViS2l0L2No
cm9taXVtL1dlYktpdC5neXAgYi9XZWJLaXQvY2hyb21pdW0vV2ViS2l0Lmd5cAppbmRleCAxMjNh
ZWQ1OThlYzFmODUwN2JhMjhjOGQxNGNmOTRlODUzY2Q3MjQxLi5hMDRkMWViMjkyMWNjOTI3ODJk
MDg5OGFmYWRmODNlNWE1OWYxYWNjIDEwMDY0NAotLS0gYS9XZWJLaXQvY2hyb21pdW0vV2ViS2l0
Lmd5cAorKysgYi9XZWJLaXQvY2hyb21pdW0vV2ViS2l0Lmd5cApAQCAtNzAzLDYgKzcwMyw3IEBA
CiAgICAgICAgICAgICAgICAgICAgIF0sCiAgICAgICAgICAgICAgICAgICAgICdzb3VyY2VzJzog
WwogICAgICAgICAgICAgICAgICAgICAgICAgJ3Rlc3RzL0RyYWdJbWFnZVRlc3QuY3BwJywKKyAg
ICAgICAgICAgICAgICAgICAgICAgICd0ZXN0cy9JREJLZXlQYXRoVGVzdC5jcHAnLAogICAgICAg
ICAgICAgICAgICAgICAgICAgJ3Rlc3RzL0tleWJvYXJkVGVzdC5jcHAnLAogICAgICAgICAgICAg
ICAgICAgICAgICAgJ3Rlc3RzL0tVUkxUZXN0LmNwcCcsCiAgICAgICAgICAgICAgICAgICAgICAg
ICAndGVzdHMvUnVuQWxsVGVzdHMuY3BwJywKZGlmZiAtLWdpdCBhL1dlYktpdC9jaHJvbWl1bS90
ZXN0cy9JREJLZXlQYXRoVGVzdC5jcHAgYi9XZWJLaXQvY2hyb21pdW0vdGVzdHMvSURCS2V5UGF0
aFRlc3QuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAuLmFjMTBmNGY5NzIwY2M4OTIwMmUxNGQ0NjRjZDU0ZTIyYzdi
NzMxMGUKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJLaXQvY2hyb21pdW0vdGVzdHMvSURCS2V5UGF0
aFRlc3QuY3BwCkBAIC0wLDAgKzEsMjA1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwIEdv
b2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAi
QVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAq
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgor
I2luY2x1ZGUgIklEQktleVBhdGguaCIKKworI2luY2x1ZGUgPGd0ZXN0L2d0ZXN0Lmg+CisjaW5j
bHVkZSA8d3RmL1ZlY3Rvci5oPgorCisjaWYgRU5BQkxFKElOREVYRURfREFUQUJBU0UpCisKK3Vz
aW5nIG5hbWVzcGFjZSBXZWJDb3JlOworCituYW1lc3BhY2UgeworCitJREJLZXlQYXRoRWxlbWVu
dCBFeHBlY3RlZFRva2VuKGNvbnN0IFN0cmluZyYgaWRlbnRpZmllciwgYm9vbCBpc0luZGV4ZWQs
IGludCBpbmRleCkKK3sKKyAgICBJREJLZXlQYXRoRWxlbWVudCBleHBlY3RlZDsKKyAgICBpZiAo
aXNJbmRleGVkKSB7CisgICAgICAgIGV4cGVjdGVkLnR5cGUgPSBJREJLZXlQYXRoRWxlbWVudDo6
SXNJbmRleGVkOworICAgICAgICBleHBlY3RlZC5pbmRleCA9IGluZGV4OworICAgIH0gZWxzZSB7
CisgICAgICAgIGV4cGVjdGVkLnR5cGUgPSBJREJLZXlQYXRoRWxlbWVudDo6SXNOYW1lZDsKKyAg
ICAgICAgZXhwZWN0ZWQuaWRlbnRpZmllciA9IGlkZW50aWZpZXI7CisgICAgfQorICAgIHJldHVy
biBleHBlY3RlZDsKK30KKwordm9pZCBjaGVja0tleVBhdGgoY29uc3QgU3RyaW5nJiBrZXlQYXRo
LCBjb25zdCBWZWN0b3I8SURCS2V5UGF0aEVsZW1lbnQ+JiBleHBlY3RlZCwgaW50IHBhcnNlckVy
cm9yKQoreworCisgICAgSURCS2V5UGF0aFBhcnNlRXJyb3IgZXJyb3I7CisgICAgVmVjdG9yPElE
QktleVBhdGhFbGVtZW50PiBpZGJLZXlQYXRoRWxlbWVudHM7CisgICAgSURCUGFyc2VLZXlQYXRo
KGtleVBhdGgsIGlkYktleVBhdGhFbGVtZW50cywgZXJyb3IpOworICAgIEFTU0VSVF9FUShwYXJz
ZXJFcnJvciwgZXJyb3IpOworICAgIGlmIChlcnJvciAhPSBJREJLZXlQYXRoUGFyc2VFcnJvck5v
bmUpCisgICAgICAgIHJldHVybjsKKyAgICBBU1NFUlRfRVEoZXhwZWN0ZWQuc2l6ZSgpLCBpZGJL
ZXlQYXRoRWxlbWVudHMuc2l6ZSgpKTsKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IGV4cGVjdGVk
LnNpemUoKTsgKytpKSB7CisgICAgICAgIEFTU0VSVF9UUlVFKGV4cGVjdGVkW2ldLnR5cGUgPT0g
aWRiS2V5UGF0aEVsZW1lbnRzW2ldLnR5cGUpIDw8IGk7CisgICAgICAgIGlmIChleHBlY3RlZFtp
XS50eXBlID09IElEQktleVBhdGhFbGVtZW50OjpJc0luZGV4ZWQpCisgICAgICAgICAgICBBU1NF
UlRfRVEoZXhwZWN0ZWRbaV0uaW5kZXgsIGlkYktleVBhdGhFbGVtZW50c1tpXS5pbmRleCkgPDwg
aTsKKyAgICAgICAgZWxzZSBpZiAoZXhwZWN0ZWRbaV0udHlwZSA9PSBJREJLZXlQYXRoRWxlbWVu
dDo6SXNOYW1lZCkKKyAgICAgICAgICAgIEFTU0VSVF9UUlVFKGV4cGVjdGVkW2ldLmlkZW50aWZp
ZXIgPT0gaWRiS2V5UGF0aEVsZW1lbnRzW2ldLmlkZW50aWZpZXIpIDw8IGk7CisgICAgICAgIGVs
c2UKKyAgICAgICAgICAgIEFTU0VSVF9UUlVFKGZhbHNlKSA8PCAiSW52YWxpZCBJREJLZXlQYXRo
RWxlbWVudCB0eXBlIjsKKyAgICB9Cit9CisKK1RFU1QoSURCS2V5UGF0aFRlc3QsIFZhbGlkS2V5
UGF0aDApCit7CisgICAgVmVjdG9yPElEQktleVBhdGhFbGVtZW50PiBleHBlY3RlZDsKKyAgICBT
dHJpbmcga2V5UGF0aCgiZm9vLmJhci56b28iKTsKKyAgICBleHBlY3RlZC5hcHBlbmQoRXhwZWN0
ZWRUb2tlbigiZm9vIiwgZmFsc2UsIDApKTsKKyAgICBleHBlY3RlZC5hcHBlbmQoRXhwZWN0ZWRU
b2tlbigiYmFyIiwgZmFsc2UsIDApKTsKKyAgICBleHBlY3RlZC5hcHBlbmQoRXhwZWN0ZWRUb2tl
bigiem9vIiwgZmFsc2UsIDApKTsKKyAgICBjaGVja0tleVBhdGgoa2V5UGF0aCwgZXhwZWN0ZWQs
IDApOworfQorCitURVNUKElEQktleVBhdGhUZXN0LCBWYWxpZEtleVBhdGgxKQoreworICAgIFZl
Y3RvcjxJREJLZXlQYXRoRWxlbWVudD4gZXhwZWN0ZWQ7CisgICAgU3RyaW5nIGtleVBhdGgoImFb
MzRdWzIwXS5mb29bMl0uYmFyIik7CisgICAgZXhwZWN0ZWQuYXBwZW5kKEV4cGVjdGVkVG9rZW4o
ImEiLCBmYWxzZSwgMCkpOworICAgIGV4cGVjdGVkLmFwcGVuZChFeHBlY3RlZFRva2VuKFN0cmlu
ZygpLCB0cnVlLCAzNCkpOworICAgIGV4cGVjdGVkLmFwcGVuZChFeHBlY3RlZFRva2VuKFN0cmlu
ZygpLCB0cnVlLCAyMCkpOworICAgIGV4cGVjdGVkLmFwcGVuZChFeHBlY3RlZFRva2VuKCJmb28i
LCBmYWxzZSwgMCkpOworICAgIGV4cGVjdGVkLmFwcGVuZChFeHBlY3RlZFRva2VuKFN0cmluZygp
LCB0cnVlLCAyKSk7CisgICAgZXhwZWN0ZWQuYXBwZW5kKEV4cGVjdGVkVG9rZW4oImJhciIsIGZh
bHNlLCAwKSk7CisgICAgY2hlY2tLZXlQYXRoKGtleVBhdGgsIGV4cGVjdGVkLCAwKTsKK30KKwor
VEVTVChJREJLZXlQYXRoVGVzdCwgVmFsaWRLZXlQYXRoMikKK3sKKyAgICBWZWN0b3I8SURCS2V5
UGF0aEVsZW1lbnQ+IGV4cGVjdGVkOworICAgIFN0cmluZyBrZXlQYXRoKCJmb29bIDM0IF0uWm9v
X1swMDAyM11cdC5fYyIpOworICAgIGV4cGVjdGVkLmFwcGVuZChFeHBlY3RlZFRva2VuKCJmb28i
LCBmYWxzZSwgMCkpOworICAgIGV4cGVjdGVkLmFwcGVuZChFeHBlY3RlZFRva2VuKFN0cmluZygp
LCB0cnVlLCAzNCkpOworICAgIGV4cGVjdGVkLmFwcGVuZChFeHBlY3RlZFRva2VuKCJab29fIiwg
ZmFsc2UsIDApKTsKKyAgICBleHBlY3RlZC5hcHBlbmQoRXhwZWN0ZWRUb2tlbihTdHJpbmcoKSwg
dHJ1ZSwgMjMpKTsKKyAgICBleHBlY3RlZC5hcHBlbmQoRXhwZWN0ZWRUb2tlbigiX2MiLCBmYWxz
ZSwgMCkpOworICAgIGNoZWNrS2V5UGF0aChrZXlQYXRoLCBleHBlY3RlZCwgMCk7Cit9CisKK1RF
U1QoSURCS2V5UGF0aFRlc3QsIFZhbGlkS2V5UGF0aDMpCit7CisgICAgVmVjdG9yPElEQktleVBh
dGhFbGVtZW50PiBleHBlY3RlZDsKKyAgICBTdHJpbmcga2V5UGF0aCgiZm9vWyAzNCBdIik7Cisg
ICAgZXhwZWN0ZWQuYXBwZW5kKEV4cGVjdGVkVG9rZW4oImZvbyIsIGZhbHNlLCAwKSk7CisgICAg
ZXhwZWN0ZWQuYXBwZW5kKEV4cGVjdGVkVG9rZW4oU3RyaW5nKCksIHRydWUsIDM0KSk7CisgICAg
Y2hlY2tLZXlQYXRoKGtleVBhdGgsIGV4cGVjdGVkLCAwKTsKK30KKworVEVTVChJREJLZXlQYXRo
VGVzdCwgVmFsaWRLZXlQYXRoNCkKK3sKKyAgICBWZWN0b3I8SURCS2V5UGF0aEVsZW1lbnQ+IGV4
cGVjdGVkOworICAgIFN0cmluZyBrZXlQYXRoKCJbIDM0IF0iKTsKKyAgICBleHBlY3RlZC5hcHBl
bmQoRXhwZWN0ZWRUb2tlbihTdHJpbmcoKSwgdHJ1ZSwgMzQpKTsKKyAgICBjaGVja0tleVBhdGgo
a2V5UGF0aCwgZXhwZWN0ZWQsIDApOworfQorCitURVNUKElEQktleVBhdGhUZXN0LCBJbnZhbGlk
S2V5UGF0aDIpCit7CisgICAgVmVjdG9yPElEQktleVBhdGhFbGVtZW50PiBleHBlY3RlZDsKKyAg
ICBTdHJpbmcga2V5UGF0aCgiYVtbMzRdXS5iWzJdLmMiKTsKKyAgICBleHBlY3RlZC5hcHBlbmQo
RXhwZWN0ZWRUb2tlbigiYSIsIGZhbHNlLCAwKSk7CisgICAgY2hlY2tLZXlQYXRoKGtleVBhdGgs
IGV4cGVjdGVkLCAzKTsKK30KKworVEVTVChJREJLZXlQYXRoVGVzdCwgSW52YWxpZEtleVBhdGgz
KQoreworICAgIFZlY3RvcjxJREJLZXlQYXRoRWxlbWVudD4gZXhwZWN0ZWQ7CisgICAgU3RyaW5n
IGtleVBhdGgoImFbWzM0XS5iWzJdLmMiKTsKKyAgICBleHBlY3RlZC5hcHBlbmQoRXhwZWN0ZWRU
b2tlbigiYSIsIGZhbHNlLCAwKSk7CisgICAgY2hlY2tLZXlQYXRoKGtleVBhdGgsIGV4cGVjdGVk
LCAzKTsKK30KKworVEVTVChJREJLZXlQYXRoVGVzdCwgSW52YWxpZEtleVBhdGg1KQoreworICAg
IFZlY3RvcjxJREJLZXlQYXRoRWxlbWVudD4gZXhwZWN0ZWQ7CisgICAgU3RyaW5nIGtleVBhdGgo
ImFbWzM0LmJbMl0uYyIpOworICAgIGV4cGVjdGVkLmFwcGVuZChFeHBlY3RlZFRva2VuKCJhIiwg
ZmFsc2UsIDApKTsKKyAgICBjaGVja0tleVBhdGgoa2V5UGF0aCwgZXhwZWN0ZWQsIDMpOworfQor
CitURVNUKElEQktleVBhdGhUZXN0LCBJbnZhbGlkS2V5UGF0aDYpCit7CisgICAgVmVjdG9yPElE
QktleVBhdGhFbGVtZW50PiBleHBlY3RlZDsKKyAgICBTdHJpbmcga2V5UGF0aCgiK2FbMzRdLmJb
Ml0uYyIpOworICAgIGNoZWNrS2V5UGF0aChrZXlQYXRoLCBleHBlY3RlZCwgMSk7Cit9CisKK1RF
U1QoSURCS2V5UGF0aFRlc3QsIEludmFsaWRLZXlQYXRoNykKK3sKKyAgICBWZWN0b3I8SURCS2V5
UGF0aEVsZW1lbnQ+IGV4cGVjdGVkOworICAgIFN0cmluZyBrZXlQYXRoKCIlYVszNF0uYlsyXS5j
Iik7CisgICAgY2hlY2tLZXlQYXRoKGtleVBhdGgsIGV4cGVjdGVkLCAxKTsKK30KKworVEVTVChJ
REJLZXlQYXRoVGVzdCwgSW52YWxpZEtleVBhdGg4KQoreworICAgIFZlY3RvcjxJREJLZXlQYXRo
RWxlbWVudD4gZXhwZWN0ZWQ7CisgICAgU3RyaW5nIGtleVBhdGgoImF7WzM0XX0uYlsyXS5jIik7
CisgICAgZXhwZWN0ZWQuYXBwZW5kKEV4cGVjdGVkVG9rZW4oImEiLCBmYWxzZSwgMCkpOworICAg
IGNoZWNrS2V5UGF0aChrZXlQYXRoLCBleHBlY3RlZCwgMik7Cit9CisKK1RFU1QoSURCS2V5UGF0
aFRlc3QsIEludmFsaWRLZXlQYXRoOSkKK3sKKyAgICBWZWN0b3I8SURCS2V5UGF0aEVsZW1lbnQ+
IGV4cGVjdGVkOworICAgIFN0cmluZyBrZXlQYXRoKCJhLi5iWzJdLmMiKTsKKyAgICBleHBlY3Rl
ZC5hcHBlbmQoRXhwZWN0ZWRUb2tlbigiYSIsIGZhbHNlLCAwKSk7CisgICAgY2hlY2tLZXlQYXRo
KGtleVBhdGgsIGV4cGVjdGVkLCA1KTsKK30KKworVEVTVChJREJLZXlQYXRoVGVzdCwgSW52YWxp
ZEtleVBhdGgxMCkKK3sKKyAgICBWZWN0b3I8SURCS2V5UGF0aEVsZW1lbnQ+IGV4cGVjdGVkOwor
ICAgIFN0cmluZyBrZXlQYXRoKCJhWzM0XWIuZm9vWzJdLmJhciIpOworICAgIGV4cGVjdGVkLmFw
cGVuZChFeHBlY3RlZFRva2VuKCJhIiwgZmFsc2UsIDApKTsKKyAgICBleHBlY3RlZC5hcHBlbmQo
RXhwZWN0ZWRUb2tlbihTdHJpbmcoKSwgdHJ1ZSwgMzQpKTsKKyAgICBjaGVja0tleVBhdGgoa2V5
UGF0aCwgZXhwZWN0ZWQsIDQpOworfQorCitURVNUKElEQktleVBhdGhUZXN0LCBJbnZhbGlkS2V5
UGF0aDExKQoreworICAgIFZlY3RvcjxJREJLZXlQYXRoRWxlbWVudD4gZXhwZWN0ZWQ7CisgICAg
U3RyaW5nIGtleVBhdGgoImFbLTFdIik7CisgICAgZXhwZWN0ZWQuYXBwZW5kKEV4cGVjdGVkVG9r
ZW4oImEiLCBmYWxzZSwgMCkpOworICAgIGNoZWNrS2V5UGF0aChrZXlQYXRoLCBleHBlY3RlZCwg
Myk7Cit9CisKK1RFU1QoSURCS2V5UGF0aFRlc3QsIEludmFsaWRLZXlQYXRoMTIpCit7CisgICAg
VmVjdG9yPElEQktleVBhdGhFbGVtZW50PiBleHBlY3RlZDsKKyAgICBTdHJpbmcga2V5UGF0aCgi
YVs5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5XSIpOworICAgIGV4cGVjdGVkLmFw
cGVuZChFeHBlY3RlZFRva2VuKCJhIiwgZmFsc2UsIDApKTsKKyAgICBjaGVja0tleVBhdGgoa2V5
UGF0aCwgZXhwZWN0ZWQsIDMpOworfQorCit9IC8vIG5hbWVzcGFjZQorCisjZW5kaWYgLy8gRU5B
QkxFKElOREVYRURfREFUQUJBU0UpCg==
</data>
<flag name="review"
          id="52886"
          type_id="1"
          status="+"
          setter="abarth"
    />
          </attachment>
      

    </bug>

</bugzilla>