<?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>120385</bug_id>
          
          <creation_ts>2013-08-27 17:11:00 -0700</creation_ts>
          <short_desc>Simplify and clean SpaceSplitString</short_desc>
          <delta_ts>2013-08-28 15:28:18 -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>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Benjamin Poulain">benjamin</reporter>
          <assigned_to name="Benjamin Poulain">benjamin</assigned_to>
          <cc>commit-queue</cc>
    
    <cc>darin</cc>
    
    <cc>esprehn+autocc</cc>
    
    <cc>kangil.han</cc>
    
    <cc>rniwa</cc>
    
    <cc>sam</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>921742</commentid>
    <comment_count>0</comment_count>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2013-08-27 17:11:00 -0700</bug_when>
    <thetext>Simplify and clean SpaceSplitString</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>921746</commentid>
    <comment_count>1</comment_count>
      <attachid>209824</attachid>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2013-08-27 17:16:16 -0700</bug_when>
    <thetext>Created attachment 209824
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>921767</commentid>
    <comment_count>2</comment_count>
      <attachid>209824</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2013-08-27 18:05:58 -0700</bug_when>
    <thetext>Comment on attachment 209824
Patch

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

&gt; Source/WebCore/dom/SpaceSplitString.cpp:32
&gt; +COMPILE_ASSERT(!(sizeof(SpaceSplitStringData) % sizeof(void*)), SpaceSplitStringDataTailIsAlignedToWordSize);

sizeof(uint_ptr)

&gt; Source/WebCore/dom/SpaceSplitString.cpp:93
&gt; +    unsigned otherSize = other.m_size;

Maybe we should assert that other.m_size is non-zero?

&gt; Source/WebCore/dom/SpaceSplitString.cpp:97
&gt; +        const AtomicString&amp; name = other[i];
&gt; +        if (!contains(name))

No need for the temporary.

&gt; Source/WebCore/dom/SpaceSplitString.cpp:106
&gt; +    static const unsigned typicalNumberOfSpaceSplitString = 100;

Maybe we should comment how you got this number.

&gt; Source/WebCore/dom/SpaceSplitString.cpp:173
&gt; +class TokenCounterProcessor {
&gt; +public:
&gt; +    TokenCounterProcessor() : m_tokenCount(0) { }

Maybe it&apos;s better to call this TokenCounter?  That way, counter will stand out.

&gt; Source/WebCore/dom/SpaceSplitString.cpp:188
&gt; +class TokenInitializerProcessor {

TokenAtomicStringInitializer?

&gt; Source/WebCore/dom/SpaceSplitString.cpp:235
&gt; +    new (NotNull, spaceSplitStringData) SpaceSplitStringData(keyString, tokenCount);
&gt; +    AtomicString* tokenArrayStart = spaceSplitStringData-&gt;tokenArrayStart();
&gt; +    TokenInitializerProcessor tokenInitializer(tokenArrayStart);
&gt; +    tokenizeSpaceSplitString(tokenInitializer, keyString);
&gt; +    ASSERT(tokenInitializer.nextMemoryBucket() - tokenArrayStart == tokenCount);
&gt; +    ASSERT(reinterpret_cast&lt;const char*&gt;(tokenInitializer.nextMemoryBucket()) == (reinterpret_cast&lt;const char*&gt;(spaceSplitStringData) + sizeToAllocate));

Maybe we should extract this part as a function?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>921771</commentid>
    <comment_count>3</comment_count>
      <attachid>209824</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2013-08-27 18:10:22 -0700</bug_when>
    <thetext>Comment on attachment 209824
Patch

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

&gt; Source/WebCore/dom/SpaceSplitString.cpp:-178
&gt; -    if (inputString.isNull()) {
&gt; -        clear();
&gt; +    if (inputString.isNull())
&gt;          return;
&gt; -    }

Why the behavior change? Now passing in a null string results in no change!?

&gt; Source/WebCore/dom/SpaceSplitString.cpp:125
&gt; +        string = string.string().foldCase();

Do we really want to make an AtomicString out of the string in this case? What’s the benefit?

&gt;&gt; Source/WebCore/dom/SpaceSplitString.cpp:188
&gt;&gt; +class TokenInitializerProcessor {
&gt; 
&gt; TokenAtomicStringInitializer?

Should mark this non-copyable.

&gt; Source/WebCore/dom/SpaceSplitString.cpp:225
&gt; +    RELEASE_ASSERT(tokenCount &lt; ((std::numeric_limits&lt;unsigned&gt;::max() - sizeof(SpaceSplitStringData)) / sizeof(AtomicString)));

I would have omitted the parentheses here.

&gt;&gt; Source/WebCore/dom/SpaceSplitString.cpp:235
&gt;&gt; +    ASSERT(reinterpret_cast&lt;const char*&gt;(tokenInitializer.nextMemoryBucket()) == (reinterpret_cast&lt;const char*&gt;(spaceSplitStringData) + sizeToAllocate));
&gt; 
&gt; Maybe we should extract this part as a function?

I would have omitted the parentheses here.

&gt; Source/WebCore/dom/SpaceSplitString.h:-30
&gt; -    class SpaceSplitStringData : public RefCounted&lt;SpaceSplitStringData&gt; {

Could you land the indenting change separately first? I can’t see the diff because the reinventing makes it look like every line changed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>921816</commentid>
    <comment_count>4</comment_count>
      <attachid>209842</attachid>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2013-08-27 20:55:57 -0700</bug_when>
    <thetext>Created attachment 209842
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>921819</commentid>
    <comment_count>5</comment_count>
      <attachid>209843</attachid>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2013-08-27 21:01:44 -0700</bug_when>
    <thetext>Created attachment 209843
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>921820</commentid>
    <comment_count>6</comment_count>
      <attachid>209843</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2013-08-27 21:07:58 -0700</bug_when>
    <thetext>Comment on attachment 209843
Patch

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

&gt; Source/WebCore/dom/SpaceSplitString.cpp:240
&gt; +    new (NotNull, spaceSplitStringData) SpaceSplitStringData(keyString, tokenCount);
&gt; +    AtomicString* tokenArrayStart = spaceSplitStringData-&gt;tokenArrayStart();
&gt; +    TokenAtomicStringInitializer tokenInitializer(tokenArrayStart);
&gt; +    tokenizeSpaceSplitString(tokenInitializer, keyString);
&gt; +    ASSERT(tokenInitializer.nextMemoryBucket() - tokenArrayStart == tokenCount);
&gt; +    ASSERT(reinterpret_cast&lt;const char*&gt;(tokenInitializer.nextMemoryBucket()) == reinterpret_cast&lt;const char*&gt;(spaceSplitStringData) + sizeToAllocate);

I would really like to split this into a tiny inline function.

&gt; Source/WebCore/dom/SpaceSplitString.h:67
&gt; +        ASSERT(isMainThread());

We should also assert that m_refCount is non-zero here.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>922216</commentid>
    <comment_count>7</comment_count>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2013-08-28 15:28:18 -0700</bug_when>
    <thetext>Committed r154780: &lt;http://trac.webkit.org/changeset/154780&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>209824</attachid>
            <date>2013-08-27 17:16:16 -0700</date>
            <delta_ts>2013-08-27 20:55:55 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-120385-20130827171615.patch</filename>
            <type>text/plain</type>
            <size>21872</size>
            <attacher name="Benjamin Poulain">benjamin</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE1NDcxNSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDU2IEBACisyMDEzLTA4LTI3ICBCZW5qYW1p
biBQb3VsYWluICA8YnBvdWxhaW5AYXBwbGUuY29tPgorCisgICAgICAgIFNpbXBsaWZ5IGFuZCBj
bGVhbiBTcGFjZVNwbGl0U3RyaW5nCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0xMjAzODUKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMh
KS4KKworICAgICAgICBDbGVhbiB1cCBvZiBTcGFjZVNwbGl0U3RyaW5nIGZvbGxvd2luZyB0aGUg
Y2xlYW5pbmcgb2YgdGhlIERPTVRva2VuTGlzdCBoaWVyYXJjaHkuCisgICAgICAgIFRoaXMgYnJp
bmdzIHRoZSBmb2xsb3dpbmc6CisgICAgICAgIC0gRml4IHRoZSBjb2Rpbmcgc3R5bGUgb2YgdGhl
IGhlYWRlci4KKyAgICAgICAgLSBSZW1vdmUgdGhlIGNvbmNlcHRzIG9mIGVtcHR5IGFuZCBudWxs
LiBUaGUgbGlzdCBjYW4gbm93IGJlIGVtcHR5IG9yIGhhdmUgc29tZXRoaW5nLgorICAgICAgICAg
IFRoZXJlIGlzIG5vIG51bGwgc3RhdGUuCisgICAgICAgIC0gUHV0IHRoZSB0b2tlbnMgZGlyZWN0
bHkgZm9sbG93aW5nIFNwYWNlU3BsaXRTdHJpbmdEYXRhIGluc3RlYWQgb2YgdXNpbmcgYSBWZWN0
b3IgaW4gYmV0d2Vlbi4KKworICAgICAgICAqIFdlYkNvcmUuZXhwLmluOgorICAgICAgICAqIGRv
bS9FbGVtZW50RGF0YS5oOgorICAgICAgICAoV2ViQ29yZTo6RWxlbWVudERhdGE6Omhhc0NsYXNz
KToKKyAgICAgICAgKiBkb20vU3BhY2VTcGxpdFN0cmluZy5jcHA6CisgICAgICAgIChXZWJDb3Jl
Ojp0b2tlbml6ZVNwYWNlU3BsaXRTdHJpbmcpOgorICAgICAgICAoV2ViQ29yZTo6U3BhY2VTcGxp
dFN0cmluZ0RhdGE6OmNvbnRhaW5zQWxsKToKKyAgICAgICAgKFdlYkNvcmU6OlNwYWNlU3BsaXRT
dHJpbmc6OnNldCk6CisgICAgICAgIChXZWJDb3JlOjpTcGFjZVNwbGl0U3RyaW5nOjpzcGFjZVNw
bGl0U3RyaW5nQ29udGFpbnNWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpUb2tlbkNvdW50ZXJQ
cm9jZXNzb3I6OlRva2VuQ291bnRlclByb2Nlc3Nvcik6CisgICAgICAgIChXZWJDb3JlOjpUb2tl
bkNvdW50ZXJQcm9jZXNzb3I6OnByb2Nlc3NUb2tlbik6CisgICAgICAgIChXZWJDb3JlOjpUb2tl
bkNvdW50ZXJQcm9jZXNzb3I6OnRva2VuQ291bnQpOgorICAgICAgICAoV2ViQ29yZTo6VG9rZW5J
bml0aWFsaXplclByb2Nlc3Nvcjo6VG9rZW5Jbml0aWFsaXplclByb2Nlc3Nvcik6CisgICAgICAg
IChXZWJDb3JlOjpUb2tlbkluaXRpYWxpemVyUHJvY2Vzc29yOjpwcm9jZXNzVG9rZW4pOgorICAg
ICAgICAoV2ViQ29yZTo6VG9rZW5Jbml0aWFsaXplclByb2Nlc3Nvcjo6bmV4dE1lbW9yeUJ1Y2tl
dCk6CisgICAgICAgIChXZWJDb3JlOjpTcGFjZVNwbGl0U3RyaW5nRGF0YTo6Y3JlYXRlKToKKyAg
ICAgICAgKFdlYkNvcmU6OlNwYWNlU3BsaXRTdHJpbmdEYXRhOjpkZXN0cm95KToKKyAgICAgICAg
KiBkb20vU3BhY2VTcGxpdFN0cmluZy5oOgorICAgICAgICAoV2ViQ29yZTo6U3BhY2VTcGxpdFN0
cmluZ0RhdGE6OmNvbnRhaW5zKToKKyAgICAgICAgKFdlYkNvcmU6OlNwYWNlU3BsaXRTdHJpbmdE
YXRhOjpzaXplKToKKyAgICAgICAgKFdlYkNvcmU6OlNwYWNlU3BsaXRTdHJpbmdEYXRhOjpvcGVy
YXRvcltdKToKKyAgICAgICAgKFdlYkNvcmU6OlNwYWNlU3BsaXRTdHJpbmdEYXRhOjpyZWYpOgor
ICAgICAgICAoV2ViQ29yZTo6U3BhY2VTcGxpdFN0cmluZ0RhdGE6OmRlcmVmKToKKyAgICAgICAg
KFdlYkNvcmU6OlNwYWNlU3BsaXRTdHJpbmdEYXRhOjpTcGFjZVNwbGl0U3RyaW5nRGF0YSk6Cisg
ICAgICAgIChXZWJDb3JlOjpTcGFjZVNwbGl0U3RyaW5nRGF0YTo6flNwYWNlU3BsaXRTdHJpbmdE
YXRhKToKKyAgICAgICAgKFdlYkNvcmU6OlNwYWNlU3BsaXRTdHJpbmdEYXRhOjp0b2tlbkFycmF5
U3RhcnQpOgorICAgICAgICAoV2ViQ29yZTo6U3BhY2VTcGxpdFN0cmluZzo6U3BhY2VTcGxpdFN0
cmluZyk6CisgICAgICAgIChXZWJDb3JlOjpTcGFjZVNwbGl0U3RyaW5nOjpvcGVyYXRvciE9KToK
KyAgICAgICAgKFdlYkNvcmU6OlNwYWNlU3BsaXRTdHJpbmc6OmNsZWFyKToKKyAgICAgICAgKFdl
YkNvcmU6OlNwYWNlU3BsaXRTdHJpbmc6OmNvbnRhaW5zKToKKyAgICAgICAgKFdlYkNvcmU6OlNw
YWNlU3BsaXRTdHJpbmc6OmNvbnRhaW5zQWxsKToKKyAgICAgICAgKFdlYkNvcmU6OlNwYWNlU3Bs
aXRTdHJpbmc6OnNpemUpOgorICAgICAgICAoV2ViQ29yZTo6U3BhY2VTcGxpdFN0cmluZzo6aXNF
bXB0eSk6CisgICAgICAgIChXZWJDb3JlOjpTcGFjZVNwbGl0U3RyaW5nOjpvcGVyYXRvcltdKToK
KyAgICAgICAgKFdlYkNvcmU6OlNwYWNlU3BsaXRTdHJpbmc6OnNwYWNlU3BsaXRTdHJpbmdDb250
YWluc1ZhbHVlKToKKyAgICAgICAgKiBodG1sL0NsYXNzTGlzdC5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpDbGFzc0xpc3Q6OmNsYXNzTmFtZXMpOgorICAgICAgICAqIHBhZ2UvRXZlbnRIYW5kbGVy
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmZpbmREcm9wWm9uZSk6CisKIDIwMTMtMDgtMjcgIEFu
ZHJlYXMgS2xpbmcgIDxha2xpbmdAYXBwbGUuY29tPgogCiAgICAgICAgIE1ha2UgaXQgbGVzcyBh
d2t3YXJkIHRvIGNoZWNrIGlmIGEgRnJhbWUgaXMgdGhlIG1haW4gRnJhbWUuCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9XZWJDb3JlLmV4cC5pbgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9X
ZWJDb3JlLmV4cC5pbgkocmV2aXNpb24gMTU0NzE0KQorKysgU291cmNlL1dlYkNvcmUvV2ViQ29y
ZS5leHAuaW4JKHdvcmtpbmcgY29weSkKQEAgLTY5MSw3ICs2OTEsNiBAQCBfX1pON1dlYkNvcmUy
MFJlc291cmNlUmVzcG9uc2VCYXNlMjRzZXRFCiBfX1pON1dlYkNvcmUyMFJlc291cmNlUmVzcG9u
c2VCYXNlNnNldFVSTEVSS05TXzRLVVJMRQogX19aTjdXZWJDb3JlMjBSZXNvdXJjZVJlc3BvbnNl
QmFzZUMyRXYKIF9fWk43V2ViQ29yZTIwUmVzb3VyY2VSZXNwb25zZUJhc2VDMkVSS05TXzRLVVJM
RVJLTjNXVEY2U3RyaW5nRXhTN19TN18KLV9fWk43V2ViQ29yZTIwU3BhY2VTcGxpdFN0cmluZ0Rh
dGFEMUV2CiBfX1pON1dlYkNvcmUyMFVzZXJHZXN0dXJlSW5kaWNhdG9yN3Nfc3RhdGVFCiBfX1pO
N1dlYkNvcmUyMFVzZXJHZXN0dXJlSW5kaWNhdG9yQzFFTlNfMjZQcm9jZXNzaW5nVXNlckdlc3R1
cmVTdGF0ZUUKIF9fWk43V2ViQ29yZTIwVXNlckdlc3R1cmVJbmRpY2F0b3JEMUV2CkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9kb20vRWxlbWVudERhdGEuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9kb20vRWxlbWVudERhdGEuaAkocmV2aXNpb24gMTU0NzE0KQorKysgU291cmNlL1dlYkNv
cmUvZG9tL0VsZW1lbnREYXRhLmgJKHdvcmtpbmcgY29weSkKQEAgLTY2LDcgKzY2LDcgQEAgcHVi
bGljOgogICAgIHVuc2lnbmVkIGZpbmRBdHRyaWJ1dGVJbmRleEJ5TmFtZUZvckF0dHJpYnV0ZU5v
ZGUoY29uc3QgQXR0ciosIGJvb2wgc2hvdWxkSWdub3JlQXR0cmlidXRlQ2FzZSA9IGZhbHNlKSBj
b25zdDsKIAogICAgIGJvb2wgaGFzSUQoKSBjb25zdCB7IHJldHVybiAhbV9pZEZvclN0eWxlUmVz
b2x1dGlvbi5pc051bGwoKTsgfQotICAgIGJvb2wgaGFzQ2xhc3MoKSBjb25zdCB7IHJldHVybiAh
bV9jbGFzc05hbWVzLmlzTnVsbCgpOyB9CisgICAgYm9vbCBoYXNDbGFzcygpIGNvbnN0IHsgcmV0
dXJuICFtX2NsYXNzTmFtZXMuaXNFbXB0eSgpOyB9CiAgICAgYm9vbCBoYXNOYW1lKCkgY29uc3Qg
eyByZXR1cm4gbV9oYXNOYW1lQXR0cmlidXRlOyB9CiAKICAgICBib29sIGlzRXF1aXZhbGVudChj
b25zdCBFbGVtZW50RGF0YSogb3RoZXIpIGNvbnN0OwpJbmRleDogU291cmNlL1dlYkNvcmUvZG9t
L1NwYWNlU3BsaXRTdHJpbmcuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9T
cGFjZVNwbGl0U3RyaW5nLmNwcAkocmV2aXNpb24gMTU0NzE0KQorKysgU291cmNlL1dlYkNvcmUv
ZG9tL1NwYWNlU3BsaXRTdHJpbmcuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNywxMCArMjcsMTAg
QEAKICNpbmNsdWRlIDx3dGYvdGV4dC9BdG9taWNTdHJpbmdIYXNoLmg+CiAjaW5jbHVkZSA8d3Rm
L3RleHQvU3RyaW5nQnVpbGRlci5oPgogCi11c2luZyBuYW1lc3BhY2UgV1RGOwotCiBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAKK0NPTVBJTEVfQVNTRVJUKCEoc2l6ZW9mKFNwYWNlU3BsaXRTdHJpbmdE
YXRhKSAlIHNpemVvZih2b2lkKikpLCBTcGFjZVNwbGl0U3RyaW5nRGF0YVRhaWxJc0FsaWduZWRU
b1dvcmRTaXplKTsKKwogdGVtcGxhdGUgPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+CiBzdGF0aWMg
aW5saW5lIGJvb2wgaGFzTm9uQVNDSUlPclVwcGVyKGNvbnN0IENoYXJhY3RlclR5cGUqIGNoYXJh
Y3RlcnMsIHVuc2lnbmVkIGxlbmd0aCkKIHsKQEAgLTczLDMxICs3MywxNiBAQCBzdGF0aWMgaW5s
aW5lIHZvaWQgdG9rZW5pemVTcGFjZVNwbGl0U3RyCiAgICAgfQogfQogCi1jbGFzcyBBcHBlbmRU
b2tlblRvVmVjdG9yVG9rZW5Qcm9jZXNzb3IgewotcHVibGljOgotICAgIEFwcGVuZFRva2VuVG9W
ZWN0b3JUb2tlblByb2Nlc3NvcihWZWN0b3I8QXRvbWljU3RyaW5nLCA0PiYgdmVjdG9yKSA6IG1f
dmVjdG9yKHZlY3RvcikgeyB9Ci0KLSAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgQ2hhcmFjdGVyVHlw
ZT4KLSAgICBib29sIHByb2Nlc3NUb2tlbihjb25zdCBDaGFyYWN0ZXJUeXBlKiBjaGFyYWN0ZXJz
LCB1bnNpZ25lZCBsZW5ndGgpCi0gICAgewotICAgICAgICBtX3ZlY3Rvci5hcHBlbmQoQXRvbWlj
U3RyaW5nKGNoYXJhY3RlcnMsIGxlbmd0aCkpOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9
Ci1wcml2YXRlOgotICAgIFZlY3RvcjxBdG9taWNTdHJpbmcsIDQ+JiBtX3ZlY3RvcjsKLX07Ci0K
LXZvaWQgU3BhY2VTcGxpdFN0cmluZ0RhdGE6OmNyZWF0ZVZlY3Rvcihjb25zdCBTdHJpbmcmIHN0
cmluZykKK3RlbXBsYXRlPHR5cGVuYW1lIFRva2VuUHJvY2Vzc29yPgorc3RhdGljIGlubGluZSB2
b2lkIHRva2VuaXplU3BhY2VTcGxpdFN0cmluZyhUb2tlblByb2Nlc3NvciYgdG9rZW5Qcm9jZXNz
b3IsIGNvbnN0IFN0cmluZyYgc3RyaW5nKQogewotICAgIHVuc2lnbmVkIGxlbmd0aCA9IHN0cmlu
Zy5sZW5ndGgoKTsKLQotICAgIEFwcGVuZFRva2VuVG9WZWN0b3JUb2tlblByb2Nlc3NvciB0b2tl
blByb2Nlc3NvcihtX3ZlY3Rvcik7Ci0gICAgaWYgKHN0cmluZy5pczhCaXQoKSkgewotICAgICAg
ICB0b2tlbml6ZVNwYWNlU3BsaXRTdHJpbmcodG9rZW5Qcm9jZXNzb3IsIHN0cmluZy5jaGFyYWN0
ZXJzOCgpLCBsZW5ndGgpOwotICAgICAgICByZXR1cm47Ci0gICAgfQorICAgIEFTU0VSVCghc3Ry
aW5nLmlzTnVsbCgpKTsKIAotICAgIHRva2VuaXplU3BhY2VTcGxpdFN0cmluZyh0b2tlblByb2Nl
c3Nvciwgc3RyaW5nLmNoYXJhY3RlcnMxNigpLCBsZW5ndGgpOworICAgIGNvbnN0IFN0cmluZ0lt
cGwqIHN0cmluZ0ltcGwgPSBzdHJpbmcuaW1wbCgpOworICAgIGlmIChzdHJpbmdJbXBsLT5pczhC
aXQoKSkKKyAgICAgICAgdG9rZW5pemVTcGFjZVNwbGl0U3RyaW5nKHRva2VuUHJvY2Vzc29yLCBz
dHJpbmdJbXBsLT5jaGFyYWN0ZXJzOCgpLCBzdHJpbmdJbXBsLT5sZW5ndGgoKSk7CisgICAgZWxz
ZQorICAgICAgICB0b2tlbml6ZVNwYWNlU3BsaXRTdHJpbmcodG9rZW5Qcm9jZXNzb3IsIHN0cmlu
Z0ltcGwtPmNoYXJhY3RlcnMxNigpLCBzdHJpbmdJbXBsLT5sZW5ndGgoKSk7CiB9CiAKIGJvb2wg
U3BhY2VTcGxpdFN0cmluZ0RhdGE6OmNvbnRhaW5zQWxsKFNwYWNlU3BsaXRTdHJpbmdEYXRhJiBv
dGhlcikKQEAgLTEwNSw2NCArOTAsMjQgQEAgYm9vbCBTcGFjZVNwbGl0U3RyaW5nRGF0YTo6Y29u
dGFpbnNBbGwoUwogICAgIGlmICh0aGlzID09ICZvdGhlcikKICAgICAgICAgcmV0dXJuIHRydWU7
CiAKLSAgICBzaXplX3QgdGhpc1NpemUgPSBtX3ZlY3Rvci5zaXplKCk7Ci0gICAgc2l6ZV90IG90
aGVyU2l6ZSA9IG90aGVyLm1fdmVjdG9yLnNpemUoKTsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsg
aSA8IG90aGVyU2l6ZTsgKytpKSB7Ci0gICAgICAgIGNvbnN0IEF0b21pY1N0cmluZyYgbmFtZSA9
IG90aGVyLm1fdmVjdG9yW2ldOwotICAgICAgICBzaXplX3QgajsKLSAgICAgICAgZm9yIChqID0g
MDsgaiA8IHRoaXNTaXplOyArK2opIHsKLSAgICAgICAgICAgIGlmIChtX3ZlY3RvcltqXSA9PSBu
YW1lKQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGlmIChqID09
IHRoaXNTaXplKQorICAgIHVuc2lnbmVkIG90aGVyU2l6ZSA9IG90aGVyLm1fc2l6ZTsKKyAgICB1
bnNpZ25lZCBpID0gMDsKKyAgICBkbyB7CisgICAgICAgIGNvbnN0IEF0b21pY1N0cmluZyYgbmFt
ZSA9IG90aGVyW2ldOworICAgICAgICBpZiAoIWNvbnRhaW5zKG5hbWUpKQogICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOwotICAgIH0KKyAgICAgICAgKytpOworICAgIH0gd2hpbGUgKGkgPCBvdGhl
clNpemUpOwogICAgIHJldHVybiB0cnVlOwogfQogCi12b2lkIFNwYWNlU3BsaXRTdHJpbmdEYXRh
OjphZGQoY29uc3QgQXRvbWljU3RyaW5nJiBzdHJpbmcpCi17Ci0gICAgQVNTRVJUKGhhc09uZVJl
ZigpKTsKLSAgICBBU1NFUlQoIWNvbnRhaW5zKHN0cmluZykpOwotICAgIG1fdmVjdG9yLmFwcGVu
ZChzdHJpbmcpOwotfQotCi12b2lkIFNwYWNlU3BsaXRTdHJpbmdEYXRhOjpyZW1vdmUodW5zaWdu
ZWQgaW5kZXgpCi17Ci0gICAgQVNTRVJUKGhhc09uZVJlZigpKTsKLSAgICBtX3ZlY3Rvci5yZW1v
dmUoaW5kZXgpOwotfQotCi12b2lkIFNwYWNlU3BsaXRTdHJpbmc6OmFkZChjb25zdCBBdG9taWNT
dHJpbmcmIHN0cmluZykKLXsKLSAgICAvLyBGSVhNRTogYWRkKCkgZG9lcyBub3QgYWxsb3cgZHVw
bGljYXRlcyBidXQgY3JlYXRlVmVjdG9yKCkgZG9lcy4KLSAgICBpZiAoY29udGFpbnMoc3RyaW5n
KSkKLSAgICAgICAgcmV0dXJuOwotICAgIGVuc3VyZVVuaXF1ZSgpOwotICAgIGlmIChtX2RhdGEp
Ci0gICAgICAgIG1fZGF0YS0+YWRkKHN0cmluZyk7Ci19Ci0KLWJvb2wgU3BhY2VTcGxpdFN0cmlu
Zzo6cmVtb3ZlKGNvbnN0IEF0b21pY1N0cmluZyYgc3RyaW5nKQorc3RydWN0IFNwYWNlU3BsaXRT
dHJpbmdEYXRhTWFwS2V5VHJhaXQgOiBwdWJsaWMgSGFzaFRyYWl0czxBdG9taWNTdHJpbmc+CiB7
Ci0gICAgaWYgKCFtX2RhdGEpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB1bnNpZ25lZCBp
ID0gMDsKLSAgICBib29sIGNoYW5nZWQgPSBmYWxzZTsKLSAgICB3aGlsZSAoaSA8IG1fZGF0YS0+
c2l6ZSgpKSB7Ci0gICAgICAgIGlmICgoKm1fZGF0YSlbaV0gPT0gc3RyaW5nKSB7Ci0gICAgICAg
ICAgICBpZiAoIWNoYW5nZWQpCi0gICAgICAgICAgICAgICAgZW5zdXJlVW5pcXVlKCk7Ci0gICAg
ICAgICAgICBtX2RhdGEtPnJlbW92ZShpKTsKLSAgICAgICAgICAgIGNoYW5nZWQgPSB0cnVlOwot
ICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIH0KLSAgICAgICAgKytpOwotICAgIH0KLSAg
ICByZXR1cm4gY2hhbmdlZDsKLX0KKyAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgdHlwaWNhbE51
bWJlck9mU3BhY2VTcGxpdFN0cmluZyA9IDEwMDsKKyAgICBzdGF0aWMgY29uc3QgaW50IG1pbmlt
dW1UYWJsZVNpemUgPSBXVEY6Okhhc2hUYWJsZUNhcGFjaXR5Rm9yU2l6ZTx0eXBpY2FsTnVtYmVy
T2ZTcGFjZVNwbGl0U3RyaW5nPjo6dmFsdWU7Cit9OwogCi10eXBlZGVmIEhhc2hNYXA8QXRvbWlj
U3RyaW5nLCBTcGFjZVNwbGl0U3RyaW5nRGF0YSo+IFNwYWNlU3BsaXRTdHJpbmdEYXRhTWFwOwor
dHlwZWRlZiBIYXNoTWFwPEF0b21pY1N0cmluZywgU3BhY2VTcGxpdFN0cmluZ0RhdGEqLCBEZWZh
dWx0SGFzaDxBdG9taWNTdHJpbmc+OjpIYXNoLCBTcGFjZVNwbGl0U3RyaW5nRGF0YU1hcEtleVRy
YWl0PiBTcGFjZVNwbGl0U3RyaW5nRGF0YU1hcDsKIAogc3RhdGljIFNwYWNlU3BsaXRTdHJpbmdE
YXRhTWFwJiBzaGFyZWREYXRhTWFwKCkKIHsKQEAgLTE3MiwxNCArMTE3LDEyIEBAIHN0YXRpYyBT
cGFjZVNwbGl0U3RyaW5nRGF0YU1hcCYgc2hhcmVkRGEKIAogdm9pZCBTcGFjZVNwbGl0U3RyaW5n
OjpzZXQoY29uc3QgQXRvbWljU3RyaW5nJiBpbnB1dFN0cmluZywgYm9vbCBzaG91bGRGb2xkQ2Fz
ZSkKIHsKLSAgICBpZiAoaW5wdXRTdHJpbmcuaXNOdWxsKCkpIHsKLSAgICAgICAgY2xlYXIoKTsK
KyAgICBpZiAoaW5wdXRTdHJpbmcuaXNOdWxsKCkpCiAgICAgICAgIHJldHVybjsKLSAgICB9CiAK
LSAgICBTdHJpbmcgc3RyaW5nKGlucHV0U3RyaW5nLnN0cmluZygpKTsKKyAgICBBdG9taWNTdHJp
bmcgc3RyaW5nKGlucHV0U3RyaW5nKTsKICAgICBpZiAoc2hvdWxkRm9sZENhc2UgJiYgaGFzTm9u
QVNDSUlPclVwcGVyKHN0cmluZykpCi0gICAgICAgIHN0cmluZyA9IHN0cmluZy5mb2xkQ2FzZSgp
OworICAgICAgICBzdHJpbmcgPSBzdHJpbmcuc3RyaW5nKCkuZm9sZENhc2UoKTsKIAogICAgIG1f
ZGF0YSA9IFNwYWNlU3BsaXRTdHJpbmdEYXRhOjpjcmVhdGUoc3RyaW5nKTsKIH0KQEAgLTIyMSw0
OCArMTY0LDEwMCBAQCBib29sIFNwYWNlU3BsaXRTdHJpbmc6OnNwYWNlU3BsaXRTdHJpbmdDCiAg
ICAgICAgIHN0cmluZyA9IHN0cmluZy5mb2xkQ2FzZSgpOwogCiAgICAgVG9rZW5Jc0VxdWFsVG9D
U3RyaW5nVG9rZW5Qcm9jZXNzb3IgdG9rZW5Qcm9jZXNzb3IodmFsdWUsIHZhbHVlTGVuZ3RoKTsK
LSAgICB1bnNpZ25lZCBsZW5ndGggPSBzdHJpbmcubGVuZ3RoKCk7Ci0gICAgaWYgKHN0cmluZy5p
czhCaXQoKSkKLSAgICAgICAgdG9rZW5pemVTcGFjZVNwbGl0U3RyaW5nKHRva2VuUHJvY2Vzc29y
LCBzdHJpbmcuY2hhcmFjdGVyczgoKSwgbGVuZ3RoKTsKLSAgICBlbHNlCi0gICAgICAgIHRva2Vu
aXplU3BhY2VTcGxpdFN0cmluZyh0b2tlblByb2Nlc3Nvciwgc3RyaW5nLmNoYXJhY3RlcnMxNigp
LCBsZW5ndGgpOworICAgIHRva2VuaXplU3BhY2VTcGxpdFN0cmluZyh0b2tlblByb2Nlc3Nvciwg
c3RyaW5nKTsKICAgICByZXR1cm4gdG9rZW5Qcm9jZXNzb3IucmVmZXJlbmNlU3RyaW5nV2FzRm91
bmQoKTsKIH0KIAotU3BhY2VTcGxpdFN0cmluZ0RhdGE6On5TcGFjZVNwbGl0U3RyaW5nRGF0YSgp
Ci17Ci0gICAgaWYgKCFtX2tleVN0cmluZy5pc051bGwoKSkKLSAgICAgICAgc2hhcmVkRGF0YU1h
cCgpLnJlbW92ZShtX2tleVN0cmluZyk7Ci19CitjbGFzcyBUb2tlbkNvdW50ZXJQcm9jZXNzb3Ig
eworcHVibGljOgorICAgIFRva2VuQ291bnRlclByb2Nlc3NvcigpIDogbV90b2tlbkNvdW50KDAp
IHsgfQogCi1QYXNzUmVmUHRyPFNwYWNlU3BsaXRTdHJpbmdEYXRhPiBTcGFjZVNwbGl0U3RyaW5n
RGF0YTo6Y3JlYXRlKGNvbnN0IEF0b21pY1N0cmluZyYgc3RyaW5nKQotewotICAgIFNwYWNlU3Bs
aXRTdHJpbmdEYXRhKiYgZGF0YSA9IHNoYXJlZERhdGFNYXAoKS5hZGQoc3RyaW5nLCAwKS5pdGVy
YXRvci0+dmFsdWU7Ci0gICAgaWYgKCFkYXRhKSB7Ci0gICAgICAgIGRhdGEgPSBuZXcgU3BhY2VT
cGxpdFN0cmluZ0RhdGEoc3RyaW5nKTsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKGRhdGEpOwor
ICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPgorICAgIGJvb2wgcHJvY2Vzc1Rv
a2VuKGNvbnN0IENoYXJhY3RlclR5cGUqLCB1bnNpZ25lZCkKKyAgICB7CisgICAgICAgICsrbV90
b2tlbkNvdW50OworICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9Ci0gICAgcmV0dXJuIGRhdGE7
Ci19CiAKLVBhc3NSZWZQdHI8U3BhY2VTcGxpdFN0cmluZ0RhdGE+IFNwYWNlU3BsaXRTdHJpbmdE
YXRhOjpjcmVhdGVVbmlxdWUoY29uc3QgU3BhY2VTcGxpdFN0cmluZ0RhdGEmIG90aGVyKQotewot
ICAgIHJldHVybiBhZG9wdFJlZihuZXcgU3BhY2VTcGxpdFN0cmluZ0RhdGEob3RoZXIpKTsKLX0K
KyAgICB1bnNpZ25lZCB0b2tlbkNvdW50KCkgY29uc3QgeyByZXR1cm4gbV90b2tlbkNvdW50OyB9
CisKK3ByaXZhdGU6CisgICAgdW5zaWduZWQgbV90b2tlbkNvdW50OworfTsKKworY2xhc3MgVG9r
ZW5Jbml0aWFsaXplclByb2Nlc3NvciB7CitwdWJsaWM6CisgICAgVG9rZW5Jbml0aWFsaXplclBy
b2Nlc3NvcihBdG9taWNTdHJpbmcqIG1lbW9yeSkgOiBtX21lbW9yeUJ1Y2tldChtZW1vcnkpIHsg
fQorCisgICAgdGVtcGxhdGUgPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+CisgICAgYm9vbCBwcm9j
ZXNzVG9rZW4oY29uc3QgQ2hhcmFjdGVyVHlwZSogY2hhcmFjdGVycywgdW5zaWduZWQgbGVuZ3Ro
KQorICAgIHsKKyAgICAgICAgbmV3IChOb3ROdWxsLCBtX21lbW9yeUJ1Y2tldCkgQXRvbWljU3Ry
aW5nKGNoYXJhY3RlcnMsIGxlbmd0aCk7CisgICAgICAgICsrbV9tZW1vcnlCdWNrZXQ7CisgICAg
ICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIGNvbnN0IEF0b21pY1N0cmluZyogbmV4dE1l
bW9yeUJ1Y2tldCgpIGNvbnN0IHsgcmV0dXJuIG1fbWVtb3J5QnVja2V0OyB9Citwcml2YXRlOgor
ICAgIEF0b21pY1N0cmluZyogbV9tZW1vcnlCdWNrZXQ7Cit9OwogCi1TcGFjZVNwbGl0U3RyaW5n
RGF0YTo6U3BhY2VTcGxpdFN0cmluZ0RhdGEoY29uc3QgQXRvbWljU3RyaW5nJiBzdHJpbmcpCi0g
ICAgOiBtX2tleVN0cmluZyhzdHJpbmcpCitQYXNzUmVmUHRyPFNwYWNlU3BsaXRTdHJpbmdEYXRh
PiBTcGFjZVNwbGl0U3RyaW5nRGF0YTo6Y3JlYXRlKGNvbnN0IEF0b21pY1N0cmluZyYga2V5U3Ry
aW5nKQogewotICAgIEFTU0VSVCghc3RyaW5nLmlzTnVsbCgpKTsKLSAgICBjcmVhdGVWZWN0b3Io
c3RyaW5nKTsKKyAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOworICAgIEFTU0VSVCgha2V5U3Ry
aW5nLmlzTnVsbCgpKTsKKworICAgIFNwYWNlU3BsaXRTdHJpbmdEYXRhTWFwJiBzcGFjZVNwbGl0
U3RyaW5nRGF0YUNhY2hlID0gc2hhcmVkRGF0YU1hcCgpOworICAgIFNwYWNlU3BsaXRTdHJpbmdE
YXRhTWFwOjppdGVyYXRvciBpdGVyYXRvciA9IHNwYWNlU3BsaXRTdHJpbmdEYXRhQ2FjaGUuZmlu
ZChrZXlTdHJpbmcpOworICAgIGlmIChpdGVyYXRvciAhPSBzcGFjZVNwbGl0U3RyaW5nRGF0YUNh
Y2hlLmVuZCgpKQorICAgICAgICByZXR1cm4gaXRlcmF0b3ItPnZhbHVlOworCisgICAgLy8gTm90
aGluZyBpbiB0aGUgY2FjaGU/IExldCdzIGNyZWF0ZSBhIG5ldyBTcGFjZVNwbGl0U3RyaW5nRGF0
YSBpZiB0aGUgaW5wdXQgaGFzIHNvbWV0aGluZyB1c2VmdWwuCisgICAgLy8gMSkgV2UgZmluZCB0
aGUgbnVtYmVyIG9mIHN0cmluZ3MgaW4gdGhlIGlucHV0IHRvIGtub3cgaG93IG11Y2ggc2l6ZSB3
ZSBuZWVkIHRvIGFsbG9jYXRlLgorICAgIFRva2VuQ291bnRlclByb2Nlc3NvciB0b2tlbkNvdW50
ZXI7CisgICAgdG9rZW5pemVTcGFjZVNwbGl0U3RyaW5nKHRva2VuQ291bnRlciwga2V5U3RyaW5n
KTsKKyAgICB1bnNpZ25lZCB0b2tlbkNvdW50ID0gdG9rZW5Db3VudGVyLnRva2VuQ291bnQoKTsK
KworICAgIGlmICghdG9rZW5Db3VudCkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICAv
LyAyKSBXZSBhbGxvY2F0ZSBlbm91Z2ggc3BhY2UgZm9yIHRoZSBTcGFjZVNwbGl0U3RyaW5nRGF0
YSBhbmQgaXRzIHRva2Vucy4KKyAgICBSRUxFQVNFX0FTU0VSVCh0b2tlbkNvdW50IDwgKChzdGQ6
Om51bWVyaWNfbGltaXRzPHVuc2lnbmVkPjo6bWF4KCkgLSBzaXplb2YoU3BhY2VTcGxpdFN0cmlu
Z0RhdGEpKSAvIHNpemVvZihBdG9taWNTdHJpbmcpKSk7CisgICAgdW5zaWduZWQgc2l6ZVRvQWxs
b2NhdGUgPSBzaXplb2YoU3BhY2VTcGxpdFN0cmluZ0RhdGEpICsgdG9rZW5Db3VudCAqIHNpemVv
ZihBdG9taWNTdHJpbmcpOworICAgIFNwYWNlU3BsaXRTdHJpbmdEYXRhKiBzcGFjZVNwbGl0U3Ry
aW5nRGF0YSA9IHN0YXRpY19jYXN0PFNwYWNlU3BsaXRTdHJpbmdEYXRhKj4oZmFzdE1hbGxvYyhz
aXplVG9BbGxvY2F0ZSkpOworCisgICAgLy8gMykgV2UgaW5pdGlhbGl6ZSB0aGUgbmV3IG9iamVj
dCB3aXRoIHRoZSBpbnB1dCBhbmQgdGhlIHRva2Vucy4KKyAgICBuZXcgKE5vdE51bGwsIHNwYWNl
U3BsaXRTdHJpbmdEYXRhKSBTcGFjZVNwbGl0U3RyaW5nRGF0YShrZXlTdHJpbmcsIHRva2VuQ291
bnQpOworICAgIEF0b21pY1N0cmluZyogdG9rZW5BcnJheVN0YXJ0ID0gc3BhY2VTcGxpdFN0cmlu
Z0RhdGEtPnRva2VuQXJyYXlTdGFydCgpOworICAgIFRva2VuSW5pdGlhbGl6ZXJQcm9jZXNzb3Ig
dG9rZW5Jbml0aWFsaXplcih0b2tlbkFycmF5U3RhcnQpOworICAgIHRva2VuaXplU3BhY2VTcGxp
dFN0cmluZyh0b2tlbkluaXRpYWxpemVyLCBrZXlTdHJpbmcpOworICAgIEFTU0VSVCh0b2tlbklu
aXRpYWxpemVyLm5leHRNZW1vcnlCdWNrZXQoKSAtIHRva2VuQXJyYXlTdGFydCA9PSB0b2tlbkNv
dW50KTsKKyAgICBBU1NFUlQocmVpbnRlcnByZXRfY2FzdDxjb25zdCBjaGFyKj4odG9rZW5Jbml0
aWFsaXplci5uZXh0TWVtb3J5QnVja2V0KCkpID09IChyZWludGVycHJldF9jYXN0PGNvbnN0IGNo
YXIqPihzcGFjZVNwbGl0U3RyaW5nRGF0YSkgKyBzaXplVG9BbGxvY2F0ZSkpOworCisgICAgc3Bh
Y2VTcGxpdFN0cmluZ0RhdGFDYWNoZS5hZGQoa2V5U3RyaW5nLCBzcGFjZVNwbGl0U3RyaW5nRGF0
YSk7CisKKyAgICByZXR1cm4gYWRvcHRSZWYoc3BhY2VTcGxpdFN0cmluZ0RhdGEpOwogfQogCi1T
cGFjZVNwbGl0U3RyaW5nRGF0YTo6U3BhY2VTcGxpdFN0cmluZ0RhdGEoY29uc3QgU3BhY2VTcGxp
dFN0cmluZ0RhdGEmIG90aGVyKQotICAgIDogUmVmQ291bnRlZDxTcGFjZVNwbGl0U3RyaW5nRGF0
YT4oKQotICAgICwgbV92ZWN0b3Iob3RoZXIubV92ZWN0b3IpCisKK3ZvaWQgU3BhY2VTcGxpdFN0
cmluZ0RhdGE6OmRlc3Ryb3koU3BhY2VTcGxpdFN0cmluZ0RhdGEqIHNwYWNlU3BsaXRTdHJpbmcp
CiB7Ci0gICAgLy8gTm90ZSB0aGF0IHdlIGRvbid0IGNvcHkgbV9rZXlTdHJpbmcgdG8gaW5kaWNh
dGUgdG8gdGhlIGRlc3RydWN0b3IgdGhhdCB0aGVyZSdzIG5vdGhpbmcKLSAgICAvLyB0byBiZSBy
ZW1vdmVkIGZyb20gdGhlIHNoYXJlZERhdGFNYXAoKS4KKyAgICBBU1NFUlQoaXNNYWluVGhyZWFk
KCkpOworCisgICAgaWYgKCFzcGFjZVNwbGl0U3RyaW5nLT5tX2tleVN0cmluZy5pc051bGwoKSkK
KyAgICAgICAgc2hhcmVkRGF0YU1hcCgpLnJlbW92ZShzcGFjZVNwbGl0U3RyaW5nLT5tX2tleVN0
cmluZyk7CisKKyAgICB1bnNpZ25lZCBpID0gMDsKKyAgICB1bnNpZ25lZCBzaXplID0gc3BhY2VT
cGxpdFN0cmluZy0+c2l6ZSgpOworICAgIGNvbnN0IEF0b21pY1N0cmluZyogZGF0YSA9IHNwYWNl
U3BsaXRTdHJpbmctPnRva2VuQXJyYXlTdGFydCgpOworICAgIGRvIHsKKyAgICAgICAgZGF0YVtp
XS5+QXRvbWljU3RyaW5nKCk7CisgICAgICAgICsraTsKKyAgICB9IHdoaWxlIChpIDwgc2l6ZSk7
CisKKyAgICBzcGFjZVNwbGl0U3RyaW5nLT5+U3BhY2VTcGxpdFN0cmluZ0RhdGEoKTsKKworICAg
IGZhc3RGcmVlKHNwYWNlU3BsaXRTdHJpbmcpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vU3BhY2VTcGxpdFN0cmluZy5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9TcGFjZVNwbGl0U3RyaW5nLmgJKHJldmlzaW9uIDE1NDcx
NCkKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9TcGFjZVNwbGl0U3RyaW5nLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA3LCAyMDA4LCAyMDEw
LCAyMDExLCAyMDEyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdo
dCAoQykgMjAwNywgMjAwOCwgMjAxMCwgMjAxMSwgMjAxMiwgMjAxMyBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlv
dSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJt
cyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTIxLDg1ICsyMSwxMDkgQEAK
ICNpZm5kZWYgU3BhY2VTcGxpdFN0cmluZ19oCiAjZGVmaW5lIFNwYWNlU3BsaXRTdHJpbmdfaAog
Ci0jaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KLSNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+Cisj
aW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KKyNpbmNsdWRlIDx3dGYvTWFpblRocmVhZC5oPgor
I2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L0F0b21pY1N0
cmluZy5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLSAgICBjbGFzcyBTcGFjZVNwbGl0U3Ry
aW5nRGF0YSA6IHB1YmxpYyBSZWZDb3VudGVkPFNwYWNlU3BsaXRTdHJpbmdEYXRhPiB7Ci0gICAg
cHVibGljOgotICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxTcGFjZVNwbGl0U3RyaW5nRGF0YT4g
Y3JlYXRlKGNvbnN0IEF0b21pY1N0cmluZyYpOwotICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxT
cGFjZVNwbGl0U3RyaW5nRGF0YT4gY3JlYXRlVW5pcXVlKGNvbnN0IFNwYWNlU3BsaXRTdHJpbmdE
YXRhJik7Ci0KLSAgICAgICAgflNwYWNlU3BsaXRTdHJpbmdEYXRhKCk7Ci0KLSAgICAgICAgYm9v
bCBjb250YWlucyhjb25zdCBBdG9taWNTdHJpbmcmIHN0cmluZykKLSAgICAgICAgewotICAgICAg
ICAgICAgc2l6ZV90IHNpemUgPSBtX3ZlY3Rvci5zaXplKCk7Ci0gICAgICAgICAgICBmb3IgKHNp
emVfdCBpID0gMDsgaSA8IHNpemU7ICsraSkgewotICAgICAgICAgICAgICAgIGlmIChtX3ZlY3Rv
cltpXSA9PSBzdHJpbmcpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAg
ICAgICAgfQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworY2xhc3MgU3BhY2VTcGxpdFN0cmlu
Z0RhdGEgeworICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKFNwYWNlU3BsaXRTdHJpbmdEYXRhKTsK
KyAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUGFzc1Jl
ZlB0cjxTcGFjZVNwbGl0U3RyaW5nRGF0YT4gY3JlYXRlKGNvbnN0IEF0b21pY1N0cmluZyYpOwor
CisgICAgYm9vbCBjb250YWlucyhjb25zdCBBdG9taWNTdHJpbmcmIHN0cmluZykKKyAgICB7Cisg
ICAgICAgIGNvbnN0IEF0b21pY1N0cmluZyogZGF0YSA9IHRva2VuQXJyYXlTdGFydCgpOworICAg
ICAgICB1bnNpZ25lZCBpID0gMDsKKyAgICAgICAgZG8geworICAgICAgICAgICAgaWYgKGRhdGFb
aV0gPT0gc3RyaW5nKQorICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAgICAg
KytpOworICAgICAgICB9IHdoaWxlIChpIDwgbV9zaXplKTsKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgIH0KKworICAgIGJvb2wgY29udGFpbnNBbGwoU3BhY2VTcGxpdFN0cmluZ0RhdGEmKTsK
KworICAgIHVuc2lnbmVkIHNpemUoKSBjb25zdCB7IHJldHVybiBtX3NpemU7IH0KKyAgICBjb25z
dCBBdG9taWNTdHJpbmcmIG9wZXJhdG9yW10oc2l6ZV90IGkpCisgICAgeworICAgICAgICBSRUxF
QVNFX0FTU0VSVChpIDwgbV9zaXplKTsKKyAgICAgICAgcmV0dXJuIHRva2VuQXJyYXlTdGFydCgp
W2ldOworICAgIH0KKworICAgIGlubGluZSB2b2lkIHJlZigpCisgICAgeworICAgICAgICBBU1NF
UlQoaXNNYWluVGhyZWFkKCkpOworICAgICAgICBBU1NFUlQobV9yZWZDb3VudCk7CisgICAgICAg
ICsrbV9yZWZDb3VudDsKKyAgICB9CisKKyAgICBpbmxpbmUgdm9pZCBkZXJlZigpCisgICAgewor
ICAgICAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOworICAgICAgICB1bnNpZ25lZCB0ZW1wUmVm
Q291bnQgPSBtX3JlZkNvdW50IC0gMTsKKyAgICAgICAgaWYgKCF0ZW1wUmVmQ291bnQpIHsKKyAg
ICAgICAgICAgIFNwYWNlU3BsaXRTdHJpbmdEYXRhOjpkZXN0cm95KHRoaXMpOworICAgICAgICAg
ICAgcmV0dXJuOwogICAgICAgICB9CisgICAgICAgIG1fcmVmQ291bnQgPSB0ZW1wUmVmQ291bnQ7
CisgICAgfQogCi0gICAgICAgIGJvb2wgY29udGFpbnNBbGwoU3BhY2VTcGxpdFN0cmluZ0RhdGEm
KTsKLQotICAgICAgICB2b2lkIGFkZChjb25zdCBBdG9taWNTdHJpbmcmKTsKLSAgICAgICAgdm9p
ZCByZW1vdmUodW5zaWduZWQgaW5kZXgpOwotCi0gICAgICAgIGJvb2wgaXNVbmlxdWUoKSBjb25z
dCB7IHJldHVybiBtX2tleVN0cmluZy5pc051bGwoKTsgfSAKLSAgICAgICAgc2l6ZV90IHNpemUo
KSBjb25zdCB7IHJldHVybiBtX3ZlY3Rvci5zaXplKCk7IH0KLSAgICAgICAgY29uc3QgQXRvbWlj
U3RyaW5nJiBvcGVyYXRvcltdKHNpemVfdCBpKSB7IEFTU0VSVF9XSVRIX1NFQ1VSSVRZX0lNUExJ
Q0FUSU9OKGkgPCBzaXplKCkpOyByZXR1cm4gbV92ZWN0b3JbaV07IH0KLQotICAgIHByaXZhdGU6
Ci0gICAgICAgIGV4cGxpY2l0IFNwYWNlU3BsaXRTdHJpbmdEYXRhKGNvbnN0IEF0b21pY1N0cmlu
ZyYpOwotICAgICAgICBleHBsaWNpdCBTcGFjZVNwbGl0U3RyaW5nRGF0YShjb25zdCBTcGFjZVNw
bGl0U3RyaW5nRGF0YSYpOwotCi0gICAgICAgIHZvaWQgY3JlYXRlVmVjdG9yKGNvbnN0IFN0cmlu
ZyYpOwotICAgICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4KLSAgICAgICAg
aW5saW5lIHZvaWQgY3JlYXRlVmVjdG9yKGNvbnN0IENoYXJhY3RlclR5cGUqLCB1bnNpZ25lZCk7
Ci0KLSAgICAgICAgQXRvbWljU3RyaW5nIG1fa2V5U3RyaW5nOwotICAgICAgICBWZWN0b3I8QXRv
bWljU3RyaW5nLCA0PiBtX3ZlY3RvcjsKLSAgICB9OwotCi0gICAgY2xhc3MgU3BhY2VTcGxpdFN0
cmluZyB7Ci0gICAgcHVibGljOgotICAgICAgICBTcGFjZVNwbGl0U3RyaW5nKCkgeyB9Ci0gICAg
ICAgIFNwYWNlU3BsaXRTdHJpbmcoY29uc3QgQXRvbWljU3RyaW5nJiBzdHJpbmcsIGJvb2wgc2hv
dWxkRm9sZENhc2UpIHsgc2V0KHN0cmluZywgc2hvdWxkRm9sZENhc2UpOyB9Ci0KLSAgICAgICAg
Ym9vbCBvcGVyYXRvciE9KGNvbnN0IFNwYWNlU3BsaXRTdHJpbmcmIG90aGVyKSBjb25zdCB7IHJl
dHVybiBtX2RhdGEgIT0gb3RoZXIubV9kYXRhOyB9Ci0KLSAgICAgICAgdm9pZCBzZXQoY29uc3Qg
QXRvbWljU3RyaW5nJiwgYm9vbCBzaG91bGRGb2xkQ2FzZSk7Ci0gICAgICAgIHZvaWQgY2xlYXIo
KSB7IG1fZGF0YS5jbGVhcigpOyB9Ci0KLSAgICAgICAgYm9vbCBjb250YWlucyhjb25zdCBBdG9t
aWNTdHJpbmcmIHN0cmluZykgY29uc3QgeyByZXR1cm4gbV9kYXRhICYmIG1fZGF0YS0+Y29udGFp
bnMoc3RyaW5nKTsgfQotICAgICAgICBib29sIGNvbnRhaW5zQWxsKGNvbnN0IFNwYWNlU3BsaXRT
dHJpbmcmIG5hbWVzKSBjb25zdCB7IHJldHVybiAhbmFtZXMubV9kYXRhIHx8IChtX2RhdGEgJiYg
bV9kYXRhLT5jb250YWluc0FsbCgqbmFtZXMubV9kYXRhKSk7IH0KLSAgICAgICAgdm9pZCBhZGQo
Y29uc3QgQXRvbWljU3RyaW5nJik7Ci0gICAgICAgIGJvb2wgcmVtb3ZlKGNvbnN0IEF0b21pY1N0
cmluZyYpOwotCi0gICAgICAgIHNpemVfdCBzaXplKCkgY29uc3QgeyByZXR1cm4gbV9kYXRhID8g
bV9kYXRhLT5zaXplKCkgOiAwOyB9Ci0gICAgICAgIGJvb2wgaXNOdWxsKCkgY29uc3QgeyByZXR1
cm4gIW1fZGF0YTsgfQotICAgICAgICBjb25zdCBBdG9taWNTdHJpbmcmIG9wZXJhdG9yW10oc2l6
ZV90IGkpIGNvbnN0IHsgQVNTRVJUX1dJVEhfU0VDVVJJVFlfSU1QTElDQVRJT04oaSA8IHNpemUo
KSk7IHJldHVybiAoKm1fZGF0YSlbaV07IH0KLQotICAgICAgICBzdGF0aWMgYm9vbCBzcGFjZVNw
bGl0U3RyaW5nQ29udGFpbnNWYWx1ZShjb25zdCBTdHJpbmcmIHNwYWNlU3BsaXRTdHJpbmcsIGNv
bnN0IGNoYXIqIHZhbHVlLCB1bnNpZ25lZCBsZW5ndGgsIGJvb2wgc2hvdWxkRm9sZENhc2UpOwot
ICAgICAgICB0ZW1wbGF0ZTxzaXplX3QgbGVuZ3RoPgotICAgICAgICBzdGF0aWMgYm9vbCBzcGFj
ZVNwbGl0U3RyaW5nQ29udGFpbnNWYWx1ZShjb25zdCBTdHJpbmcmIHNwYWNlU3BsaXRTdHJpbmcs
IGNvbnN0IGNoYXIgKCZ2YWx1ZSlbbGVuZ3RoXSwgYm9vbCBzaG91bGRGb2xkQ2FzZSkKLSAgICAg
ICAgewotICAgICAgICAgICAgcmV0dXJuIHNwYWNlU3BsaXRTdHJpbmdDb250YWluc1ZhbHVlKHNw
YWNlU3BsaXRTdHJpbmcsIHZhbHVlLCBsZW5ndGggLSAxLCBzaG91bGRGb2xkQ2FzZSk7Ci0gICAg
ICAgIH0KLQotICAgIHByaXZhdGU6Ci0gICAgICAgIHZvaWQgZW5zdXJlVW5pcXVlKCkKLSAgICAg
ICAgewotICAgICAgICAgICAgaWYgKG1fZGF0YSAmJiAhbV9kYXRhLT5pc1VuaXF1ZSgpKQotICAg
ICAgICAgICAgICAgIG1fZGF0YSA9IFNwYWNlU3BsaXRTdHJpbmdEYXRhOjpjcmVhdGVVbmlxdWUo
Km1fZGF0YSk7Ci0gICAgICAgIH0KLQotICAgICAgICBSZWZQdHI8U3BhY2VTcGxpdFN0cmluZ0Rh
dGE+IG1fZGF0YTsKLSAgICB9OworcHJpdmF0ZToKKyAgICBTcGFjZVNwbGl0U3RyaW5nRGF0YShj
b25zdCBBdG9taWNTdHJpbmcmIHN0cmluZywgdW5zaWduZWQgc2l6ZSkKKyAgICAgICAgOiBtX2tl
eVN0cmluZyhzdHJpbmcpCisgICAgICAgICwgbV9yZWZDb3VudCgxKQorICAgICAgICAsIG1fc2l6
ZShzaXplKQorICAgIHsKKyAgICAgICAgQVNTRVJUKCFzdHJpbmcuaXNFbXB0eSgpKTsKKyAgICAg
ICAgQVNTRVJUX1dJVEhfTUVTU0FHRShtX3NpemUsICJTcGFjZVNwbGl0U3RyaW5nRGF0YSBzaG91
bGQgbmV2ZXIgYmUgZW1wdHkgYnkgZGVmaW5pdGlvbi4gVGhlcmUgaXMgbm8gZGlmZmVyZW5jZSBi
ZXR3ZWVuIGVtcHR5IGFuZCBudWxsLiIpOworICAgIH0KKworICAgIGlubGluZSB+U3BhY2VTcGxp
dFN0cmluZ0RhdGEoKSB7IH0KKyAgICBzdGF0aWMgdm9pZCBkZXN0cm95KFNwYWNlU3BsaXRTdHJp
bmdEYXRhKik7CisKKyAgICBBdG9taWNTdHJpbmcqIHRva2VuQXJyYXlTdGFydCgpIHsgcmV0dXJu
IHJlaW50ZXJwcmV0X2Nhc3Q8QXRvbWljU3RyaW5nKj4odGhpcyArIDEpOyB9CisKKyAgICBBdG9t
aWNTdHJpbmcgbV9rZXlTdHJpbmc7CisgICAgdW5zaWduZWQgbV9yZWZDb3VudDsKKyAgICB1bnNp
Z25lZCBtX3NpemU7Cit9OworCitjbGFzcyBTcGFjZVNwbGl0U3RyaW5nIHsKK3B1YmxpYzoKKyAg
ICBTcGFjZVNwbGl0U3RyaW5nKCkgeyB9CisgICAgU3BhY2VTcGxpdFN0cmluZyhjb25zdCBBdG9t
aWNTdHJpbmcmIHN0cmluZywgYm9vbCBzaG91bGRGb2xkQ2FzZSkgeyBzZXQoc3RyaW5nLCBzaG91
bGRGb2xkQ2FzZSk7IH0KKworICAgIGJvb2wgb3BlcmF0b3IhPShjb25zdCBTcGFjZVNwbGl0U3Ry
aW5nJiBvdGhlcikgY29uc3QgeyByZXR1cm4gbV9kYXRhICE9IG90aGVyLm1fZGF0YTsgfQorCisg
ICAgdm9pZCBzZXQoY29uc3QgQXRvbWljU3RyaW5nJiwgYm9vbCBzaG91bGRGb2xkQ2FzZSk7Cisg
ICAgdm9pZCBjbGVhcigpIHsgbV9kYXRhLmNsZWFyKCk7IH0KKworICAgIGJvb2wgY29udGFpbnMo
Y29uc3QgQXRvbWljU3RyaW5nJiBzdHJpbmcpIGNvbnN0IHsgcmV0dXJuIG1fZGF0YSAmJiBtX2Rh
dGEtPmNvbnRhaW5zKHN0cmluZyk7IH0KKyAgICBib29sIGNvbnRhaW5zQWxsKGNvbnN0IFNwYWNl
U3BsaXRTdHJpbmcmIG5hbWVzKSBjb25zdCB7IHJldHVybiAhbmFtZXMubV9kYXRhIHx8IChtX2Rh
dGEgJiYgbV9kYXRhLT5jb250YWluc0FsbCgqbmFtZXMubV9kYXRhKSk7IH0KKworICAgIHNpemVf
dCBzaXplKCkgY29uc3QgeyByZXR1cm4gbV9kYXRhID8gbV9kYXRhLT5zaXplKCkgOiAwOyB9Cisg
ICAgYm9vbCBpc0VtcHR5KCkgY29uc3QgeyByZXR1cm4gIW1fZGF0YTsgfQorICAgIGNvbnN0IEF0
b21pY1N0cmluZyYgb3BlcmF0b3JbXShzaXplX3QgaSkgY29uc3QKKyAgICB7CisgICAgICAgIEFT
U0VSVF9XSVRIX1NFQ1VSSVRZX0lNUExJQ0FUSU9OKG1fZGF0YSk7CisgICAgICAgIHJldHVybiAo
Km1fZGF0YSlbaV07CisgICAgfQorCisgICAgc3RhdGljIGJvb2wgc3BhY2VTcGxpdFN0cmluZ0Nv
bnRhaW5zVmFsdWUoY29uc3QgU3RyaW5nJiBzcGFjZVNwbGl0U3RyaW5nLCBjb25zdCBjaGFyKiB2
YWx1ZSwgdW5zaWduZWQgbGVuZ3RoLCBib29sIHNob3VsZEZvbGRDYXNlKTsKKyAgICB0ZW1wbGF0
ZTxzaXplX3QgbGVuZ3RoPgorICAgIHN0YXRpYyBib29sIHNwYWNlU3BsaXRTdHJpbmdDb250YWlu
c1ZhbHVlKGNvbnN0IFN0cmluZyYgc3BhY2VTcGxpdFN0cmluZywgY29uc3QgY2hhciAoJnZhbHVl
KVtsZW5ndGhdLCBib29sIHNob3VsZEZvbGRDYXNlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHNw
YWNlU3BsaXRTdHJpbmdDb250YWluc1ZhbHVlKHNwYWNlU3BsaXRTdHJpbmcsIHZhbHVlLCBsZW5n
dGggLSAxLCBzaG91bGRGb2xkQ2FzZSk7CisgICAgfQorCitwcml2YXRlOgorICAgIFJlZlB0cjxT
cGFjZVNwbGl0U3RyaW5nRGF0YT4gbV9kYXRhOworfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL0NsYXNzTGlzdC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvaHRtbC9DbGFzc0xpc3QuY3BwCShyZXZpc2lvbiAxNTQ3MTQpCisr
KyBTb3VyY2UvV2ViQ29yZS9odG1sL0NsYXNzTGlzdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTgz
LDcgKzgzLDcgQEAgY29uc3QgU3BhY2VTcGxpdFN0cmluZyYgQ2xhc3NMaXN0OjpjbGFzcwogewog
ICAgIEFTU0VSVChtX2VsZW1lbnQtPmhhc0NsYXNzKCkpOwogICAgIGlmIChtX2VsZW1lbnQtPmRv
Y3VtZW50KCktPmluUXVpcmtzTW9kZSgpKSB7Ci0gICAgICAgIGlmICghbV9jbGFzc05hbWVzRm9y
UXVpcmtzTW9kZS5zaXplKCkpCisgICAgICAgIGlmIChtX2NsYXNzTmFtZXNGb3JRdWlya3NNb2Rl
LmlzRW1wdHkoKSkKICAgICAgICAgICAgIG1fY2xhc3NOYW1lc0ZvclF1aXJrc01vZGUuc2V0KHZh
bHVlKCksIGZhbHNlKTsKICAgICAgICAgcmV0dXJuIG1fY2xhc3NOYW1lc0ZvclF1aXJrc01vZGU7
CiAgICAgfQpJbmRleDogU291cmNlL1dlYkNvcmUvcGFnZS9FdmVudEhhbmRsZXIuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2UvRXZlbnRIYW5kbGVyLmNwcAkocmV2aXNpb24g
MTU0NzE0KQorKysgU291cmNlL1dlYkNvcmUvcGFnZS9FdmVudEhhbmRsZXIuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0yMDc0LDcgKzIwNzQsNyBAQCBzdGF0aWMgYm9vbCBmaW5kRHJvcFpvbmUoTm9k
ZSogdGFyZ2V0LCBDCiAgICAgICAgIGRyb3Bab25lU3RyLm1ha2VMb3dlcigpOwogICAgICAgICAK
ICAgICAgICAgU3BhY2VTcGxpdFN0cmluZyBrZXl3b3Jkcyhkcm9wWm9uZVN0ciwgZmFsc2UpOwot
ICAgICAgICBpZiAoa2V5d29yZHMuaXNOdWxsKCkpCisgICAgICAgIGlmIChrZXl3b3Jkcy5pc0Vt
cHR5KCkpCiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgCiAgICAgICAgIERyYWdPcGVy
YXRpb24gZHJhZ09wZXJhdGlvbiA9IERyYWdPcGVyYXRpb25Ob25lOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>209842</attachid>
            <date>2013-08-27 20:55:57 -0700</date>
            <delta_ts>2013-08-27 21:01:41 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-120385-20130827205557.patch</filename>
            <type>text/plain</type>
            <size>19443</size>
            <attacher name="Benjamin Poulain">benjamin</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE1NDcyMCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDQ4IEBACisyMDEzLTA4LTI3ICBCZW5qYW1p
biBQb3VsYWluICA8YmVuamFtaW5Ad2Via2l0Lm9yZz4KKworICAgICAgICBTaW1wbGlmeSBhbmQg
Y2xlYW4gU3BhY2VTcGxpdFN0cmluZworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MTIwMzg1CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCisKKyAgICAgICAgQ2xlYW4gdXAgb2YgU3BhY2VTcGxpdFN0cmluZyBmb2xsb3dpbmcgdGhl
IGNsZWFuaW5nIG9mIHRoZSBET01Ub2tlbkxpc3QgaGllcmFyY2h5LgorICAgICAgICAtIFJlbW92
ZSB0aGUgY29uY2VwdHMgb2YgZW1wdHkgYW5kIG51bGwuIFRoZSBsaXN0IGNhbiBub3cgYmUgZW1w
dHkgb3IgaGF2ZSBzb21ldGhpbmcuCisgICAgICAgICAgVGhlcmUgaXMgbm8gbnVsbCBzdGF0ZS4K
KyAgICAgICAgLSBQdXQgdGhlIHRva2VucyBkaXJlY3RseSBmb2xsb3dpbmcgU3BhY2VTcGxpdFN0
cmluZ0RhdGEgaW5zdGVhZCBvZiB1c2luZyBhIFZlY3RvciBpbiBiZXR3ZWVuLgorCisgICAgICAg
ICogV2ViQ29yZS5leHAuaW46CisgICAgICAgICogZG9tL0VsZW1lbnREYXRhLmg6CisgICAgICAg
IChXZWJDb3JlOjpFbGVtZW50RGF0YTo6aGFzQ2xhc3MpOgorICAgICAgICAqIGRvbS9TcGFjZVNw
bGl0U3RyaW5nLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnRva2VuaXplU3BhY2VTcGxpdFN0cmlu
Zyk6CisgICAgICAgIChXZWJDb3JlOjpTcGFjZVNwbGl0U3RyaW5nRGF0YTo6Y29udGFpbnNBbGwp
OgorICAgICAgICAoV2ViQ29yZTo6U3BhY2VTcGxpdFN0cmluZzo6c2V0KToKKyAgICAgICAgKFdl
YkNvcmU6OlNwYWNlU3BsaXRTdHJpbmc6OnNwYWNlU3BsaXRTdHJpbmdDb250YWluc1ZhbHVlKToK
KyAgICAgICAgKFdlYkNvcmU6OlRva2VuQ291bnRlcjo6VG9rZW5Db3VudGVyKToKKyAgICAgICAg
KFdlYkNvcmU6OlRva2VuQ291bnRlcjo6cHJvY2Vzc1Rva2VuKToKKyAgICAgICAgKFdlYkNvcmU6
OlRva2VuQ291bnRlcjo6dG9rZW5Db3VudCk6CisgICAgICAgIChXZWJDb3JlOjpUb2tlbkF0b21p
Y1N0cmluZ0luaXRpYWxpemVyOjpUb2tlbkF0b21pY1N0cmluZ0luaXRpYWxpemVyKToKKyAgICAg
ICAgKFdlYkNvcmU6OlRva2VuQXRvbWljU3RyaW5nSW5pdGlhbGl6ZXI6OnByb2Nlc3NUb2tlbik6
CisgICAgICAgIChXZWJDb3JlOjpUb2tlbkF0b21pY1N0cmluZ0luaXRpYWxpemVyOjpuZXh0TWVt
b3J5QnVja2V0KToKKyAgICAgICAgKFdlYkNvcmU6OlNwYWNlU3BsaXRTdHJpbmdEYXRhOjpjcmVh
dGUpOgorICAgICAgICAoV2ViQ29yZTo6U3BhY2VTcGxpdFN0cmluZ0RhdGE6OmRlc3Ryb3kpOgor
ICAgICAgICAqIGRvbS9TcGFjZVNwbGl0U3RyaW5nLmg6CisgICAgICAgIChXZWJDb3JlOjpTcGFj
ZVNwbGl0U3RyaW5nRGF0YTo6Y29udGFpbnMpOgorICAgICAgICAoV2ViQ29yZTo6U3BhY2VTcGxp
dFN0cmluZ0RhdGE6OnNpemUpOgorICAgICAgICAoV2ViQ29yZTo6U3BhY2VTcGxpdFN0cmluZ0Rh
dGE6Om9wZXJhdG9yW10pOgorICAgICAgICAoV2ViQ29yZTo6U3BhY2VTcGxpdFN0cmluZ0RhdGE6
OnJlZik6CisgICAgICAgIChXZWJDb3JlOjpTcGFjZVNwbGl0U3RyaW5nRGF0YTo6ZGVyZWYpOgor
ICAgICAgICAoV2ViQ29yZTo6U3BhY2VTcGxpdFN0cmluZ0RhdGE6OlNwYWNlU3BsaXRTdHJpbmdE
YXRhKToKKyAgICAgICAgKFdlYkNvcmU6OlNwYWNlU3BsaXRTdHJpbmdEYXRhOjp+U3BhY2VTcGxp
dFN0cmluZ0RhdGEpOgorICAgICAgICAoV2ViQ29yZTo6U3BhY2VTcGxpdFN0cmluZ0RhdGE6OnRv
a2VuQXJyYXlTdGFydCk6CisgICAgICAgIChXZWJDb3JlOjpTcGFjZVNwbGl0U3RyaW5nOjpjb250
YWluc0FsbCk6CisgICAgICAgIChXZWJDb3JlOjpTcGFjZVNwbGl0U3RyaW5nOjppc0VtcHR5KToK
KyAgICAgICAgKFdlYkNvcmU6OlNwYWNlU3BsaXRTdHJpbmc6Om9wZXJhdG9yW10pOgorICAgICAg
ICAqIGh0bWwvQ2xhc3NMaXN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNsYXNzTGlzdDo6Y2xh
c3NOYW1lcyk6CisgICAgICAgICogcGFnZS9FdmVudEhhbmRsZXIuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6ZmluZERyb3Bab25lKToKKwogMjAxMy0wOC0yNyAgQmVuamFtaW4gUG91bGFpbiAgPGJl
bmphbWluQHdlYmtpdC5vcmc+CiAKICAgICAgICAgRml4IHRoZSBpbmRlbnRhdGlvbiBvZiBTcGFj
ZVNwbGl0U3RyaW5nCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmV4cC5pbgo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmV4cC5pbgkocmV2aXNpb24gMTU0NzE4KQor
KysgU291cmNlL1dlYkNvcmUvV2ViQ29yZS5leHAuaW4JKHdvcmtpbmcgY29weSkKQEAgLTY5MSw3
ICs2OTEsNiBAQCBfX1pON1dlYkNvcmUyMFJlc291cmNlUmVzcG9uc2VCYXNlMjRzZXRFCiBfX1pO
N1dlYkNvcmUyMFJlc291cmNlUmVzcG9uc2VCYXNlNnNldFVSTEVSS05TXzRLVVJMRQogX19aTjdX
ZWJDb3JlMjBSZXNvdXJjZVJlc3BvbnNlQmFzZUMyRXYKIF9fWk43V2ViQ29yZTIwUmVzb3VyY2VS
ZXNwb25zZUJhc2VDMkVSS05TXzRLVVJMRVJLTjNXVEY2U3RyaW5nRXhTN19TN18KLV9fWk43V2Vi
Q29yZTIwU3BhY2VTcGxpdFN0cmluZ0RhdGFEMUV2CiBfX1pON1dlYkNvcmUyMFVzZXJHZXN0dXJl
SW5kaWNhdG9yN3Nfc3RhdGVFCiBfX1pON1dlYkNvcmUyMFVzZXJHZXN0dXJlSW5kaWNhdG9yQzFF
TlNfMjZQcm9jZXNzaW5nVXNlckdlc3R1cmVTdGF0ZUUKIF9fWk43V2ViQ29yZTIwVXNlckdlc3R1
cmVJbmRpY2F0b3JEMUV2CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vRWxlbWVudERhdGEuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vRWxlbWVudERhdGEuaAkocmV2aXNpb24g
MTU0NzE4KQorKysgU291cmNlL1dlYkNvcmUvZG9tL0VsZW1lbnREYXRhLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTY2LDcgKzY2LDcgQEAgcHVibGljOgogICAgIHVuc2lnbmVkIGZpbmRBdHRyaWJ1dGVJ
bmRleEJ5TmFtZUZvckF0dHJpYnV0ZU5vZGUoY29uc3QgQXR0ciosIGJvb2wgc2hvdWxkSWdub3Jl
QXR0cmlidXRlQ2FzZSA9IGZhbHNlKSBjb25zdDsKIAogICAgIGJvb2wgaGFzSUQoKSBjb25zdCB7
IHJldHVybiAhbV9pZEZvclN0eWxlUmVzb2x1dGlvbi5pc051bGwoKTsgfQotICAgIGJvb2wgaGFz
Q2xhc3MoKSBjb25zdCB7IHJldHVybiAhbV9jbGFzc05hbWVzLmlzTnVsbCgpOyB9CisgICAgYm9v
bCBoYXNDbGFzcygpIGNvbnN0IHsgcmV0dXJuICFtX2NsYXNzTmFtZXMuaXNFbXB0eSgpOyB9CiAg
ICAgYm9vbCBoYXNOYW1lKCkgY29uc3QgeyByZXR1cm4gbV9oYXNOYW1lQXR0cmlidXRlOyB9CiAK
ICAgICBib29sIGlzRXF1aXZhbGVudChjb25zdCBFbGVtZW50RGF0YSogb3RoZXIpIGNvbnN0OwpJ
bmRleDogU291cmNlL1dlYkNvcmUvZG9tL1NwYWNlU3BsaXRTdHJpbmcuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9TcGFjZVNwbGl0U3RyaW5nLmNwcAkocmV2aXNpb24gMTU0
NzE4KQorKysgU291cmNlL1dlYkNvcmUvZG9tL1NwYWNlU3BsaXRTdHJpbmcuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0yNywxMCArMjcsMTAgQEAKICNpbmNsdWRlIDx3dGYvdGV4dC9BdG9taWNTdHJp
bmdIYXNoLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nQnVpbGRlci5oPgogCi11c2luZyBu
YW1lc3BhY2UgV1RGOwotCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKK0NPTVBJTEVfQVNTRVJUKCEo
c2l6ZW9mKFNwYWNlU3BsaXRTdHJpbmdEYXRhKSAlIHNpemVvZih1aW50cHRyX3QpKSwgU3BhY2VT
cGxpdFN0cmluZ0RhdGFUYWlsSXNBbGlnbmVkVG9Xb3JkU2l6ZSk7CisKIHRlbXBsYXRlIDx0eXBl
bmFtZSBDaGFyYWN0ZXJUeXBlPgogc3RhdGljIGlubGluZSBib29sIGhhc05vbkFTQ0lJT3JVcHBl
cihjb25zdCBDaGFyYWN0ZXJUeXBlKiBjaGFyYWN0ZXJzLCB1bnNpZ25lZCBsZW5ndGgpCiB7CkBA
IC03MywzMSArNzMsMTYgQEAgc3RhdGljIGlubGluZSB2b2lkIHRva2VuaXplU3BhY2VTcGxpdFN0
cgogICAgIH0KIH0KIAotY2xhc3MgQXBwZW5kVG9rZW5Ub1ZlY3RvclRva2VuUHJvY2Vzc29yIHsK
LXB1YmxpYzoKLSAgICBBcHBlbmRUb2tlblRvVmVjdG9yVG9rZW5Qcm9jZXNzb3IoVmVjdG9yPEF0
b21pY1N0cmluZywgND4mIHZlY3RvcikgOiBtX3ZlY3Rvcih2ZWN0b3IpIHsgfQotCi0gICAgdGVt
cGxhdGUgPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+Ci0gICAgYm9vbCBwcm9jZXNzVG9rZW4oY29u
c3QgQ2hhcmFjdGVyVHlwZSogY2hhcmFjdGVycywgdW5zaWduZWQgbGVuZ3RoKQotICAgIHsKLSAg
ICAgICAgbV92ZWN0b3IuYXBwZW5kKEF0b21pY1N0cmluZyhjaGFyYWN0ZXJzLCBsZW5ndGgpKTsK
LSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotcHJpdmF0ZToKLSAgICBWZWN0b3I8QXRvbWlj
U3RyaW5nLCA0PiYgbV92ZWN0b3I7Ci19OwotCi12b2lkIFNwYWNlU3BsaXRTdHJpbmdEYXRhOjpj
cmVhdGVWZWN0b3IoY29uc3QgU3RyaW5nJiBzdHJpbmcpCit0ZW1wbGF0ZTx0eXBlbmFtZSBUb2tl
blByb2Nlc3Nvcj4KK3N0YXRpYyBpbmxpbmUgdm9pZCB0b2tlbml6ZVNwYWNlU3BsaXRTdHJpbmco
VG9rZW5Qcm9jZXNzb3ImIHRva2VuUHJvY2Vzc29yLCBjb25zdCBTdHJpbmcmIHN0cmluZykKIHsK
LSAgICB1bnNpZ25lZCBsZW5ndGggPSBzdHJpbmcubGVuZ3RoKCk7Ci0KLSAgICBBcHBlbmRUb2tl
blRvVmVjdG9yVG9rZW5Qcm9jZXNzb3IgdG9rZW5Qcm9jZXNzb3IobV92ZWN0b3IpOwotICAgIGlm
IChzdHJpbmcuaXM4Qml0KCkpIHsKLSAgICAgICAgdG9rZW5pemVTcGFjZVNwbGl0U3RyaW5nKHRv
a2VuUHJvY2Vzc29yLCBzdHJpbmcuY2hhcmFjdGVyczgoKSwgbGVuZ3RoKTsKLSAgICAgICAgcmV0
dXJuOwotICAgIH0KKyAgICBBU1NFUlQoIXN0cmluZy5pc051bGwoKSk7CiAKLSAgICB0b2tlbml6
ZVNwYWNlU3BsaXRTdHJpbmcodG9rZW5Qcm9jZXNzb3IsIHN0cmluZy5jaGFyYWN0ZXJzMTYoKSwg
bGVuZ3RoKTsKKyAgICBjb25zdCBTdHJpbmdJbXBsKiBzdHJpbmdJbXBsID0gc3RyaW5nLmltcGwo
KTsKKyAgICBpZiAoc3RyaW5nSW1wbC0+aXM4Qml0KCkpCisgICAgICAgIHRva2VuaXplU3BhY2VT
cGxpdFN0cmluZyh0b2tlblByb2Nlc3Nvciwgc3RyaW5nSW1wbC0+Y2hhcmFjdGVyczgoKSwgc3Ry
aW5nSW1wbC0+bGVuZ3RoKCkpOworICAgIGVsc2UKKyAgICAgICAgdG9rZW5pemVTcGFjZVNwbGl0
U3RyaW5nKHRva2VuUHJvY2Vzc29yLCBzdHJpbmdJbXBsLT5jaGFyYWN0ZXJzMTYoKSwgc3RyaW5n
SW1wbC0+bGVuZ3RoKCkpOwogfQogCiBib29sIFNwYWNlU3BsaXRTdHJpbmdEYXRhOjpjb250YWlu
c0FsbChTcGFjZVNwbGl0U3RyaW5nRGF0YSYgb3RoZXIpCkBAIC0xMDUsNjQgKzkwLDI1IEBAIGJv
b2wgU3BhY2VTcGxpdFN0cmluZ0RhdGE6OmNvbnRhaW5zQWxsKFMKICAgICBpZiAodGhpcyA9PSAm
b3RoZXIpCiAgICAgICAgIHJldHVybiB0cnVlOwogCi0gICAgc2l6ZV90IHRoaXNTaXplID0gbV92
ZWN0b3Iuc2l6ZSgpOwotICAgIHNpemVfdCBvdGhlclNpemUgPSBvdGhlci5tX3ZlY3Rvci5zaXpl
KCk7Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBvdGhlclNpemU7ICsraSkgewotICAgICAg
ICBjb25zdCBBdG9taWNTdHJpbmcmIG5hbWUgPSBvdGhlci5tX3ZlY3RvcltpXTsKLSAgICAgICAg
c2l6ZV90IGo7Ci0gICAgICAgIGZvciAoaiA9IDA7IGogPCB0aGlzU2l6ZTsgKytqKSB7Ci0gICAg
ICAgICAgICBpZiAobV92ZWN0b3Jbal0gPT0gbmFtZSkKLSAgICAgICAgICAgICAgICBicmVhazsK
LSAgICAgICAgfQotICAgICAgICBpZiAoaiA9PSB0aGlzU2l6ZSkKKyAgICB1bnNpZ25lZCBvdGhl
clNpemUgPSBvdGhlci5tX3NpemU7CisgICAgdW5zaWduZWQgaSA9IDA7CisgICAgZG8geworICAg
ICAgICBpZiAoIWNvbnRhaW5zKG90aGVyW2ldKSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
LSAgICB9CisgICAgICAgICsraTsKKyAgICB9IHdoaWxlIChpIDwgb3RoZXJTaXplKTsKICAgICBy
ZXR1cm4gdHJ1ZTsKIH0KIAotdm9pZCBTcGFjZVNwbGl0U3RyaW5nRGF0YTo6YWRkKGNvbnN0IEF0
b21pY1N0cmluZyYgc3RyaW5nKQorc3RydWN0IFNwYWNlU3BsaXRTdHJpbmdEYXRhTWFwS2V5VHJh
aXQgOiBwdWJsaWMgSGFzaFRyYWl0czxBdG9taWNTdHJpbmc+CiB7Ci0gICAgQVNTRVJUKGhhc09u
ZVJlZigpKTsKLSAgICBBU1NFUlQoIWNvbnRhaW5zKHN0cmluZykpOwotICAgIG1fdmVjdG9yLmFw
cGVuZChzdHJpbmcpOwotfQotCi12b2lkIFNwYWNlU3BsaXRTdHJpbmdEYXRhOjpyZW1vdmUodW5z
aWduZWQgaW5kZXgpCi17Ci0gICAgQVNTRVJUKGhhc09uZVJlZigpKTsKLSAgICBtX3ZlY3Rvci5y
ZW1vdmUoaW5kZXgpOwotfQotCi12b2lkIFNwYWNlU3BsaXRTdHJpbmc6OmFkZChjb25zdCBBdG9t
aWNTdHJpbmcmIHN0cmluZykKLXsKLSAgICAvLyBGSVhNRTogYWRkKCkgZG9lcyBub3QgYWxsb3cg
ZHVwbGljYXRlcyBidXQgY3JlYXRlVmVjdG9yKCkgZG9lcy4KLSAgICBpZiAoY29udGFpbnMoc3Ry
aW5nKSkKLSAgICAgICAgcmV0dXJuOwotICAgIGVuc3VyZVVuaXF1ZSgpOwotICAgIGlmIChtX2Rh
dGEpCi0gICAgICAgIG1fZGF0YS0+YWRkKHN0cmluZyk7Ci19Ci0KLWJvb2wgU3BhY2VTcGxpdFN0
cmluZzo6cmVtb3ZlKGNvbnN0IEF0b21pY1N0cmluZyYgc3RyaW5nKQotewotICAgIGlmICghbV9k
YXRhKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgdW5zaWduZWQgaSA9IDA7Ci0gICAgYm9v
bCBjaGFuZ2VkID0gZmFsc2U7Ci0gICAgd2hpbGUgKGkgPCBtX2RhdGEtPnNpemUoKSkgewotICAg
ICAgICBpZiAoKCptX2RhdGEpW2ldID09IHN0cmluZykgewotICAgICAgICAgICAgaWYgKCFjaGFu
Z2VkKQotICAgICAgICAgICAgICAgIGVuc3VyZVVuaXF1ZSgpOwotICAgICAgICAgICAgbV9kYXRh
LT5yZW1vdmUoaSk7Ci0gICAgICAgICAgICBjaGFuZ2VkID0gdHJ1ZTsKLSAgICAgICAgICAgIGNv
bnRpbnVlOwotICAgICAgICB9Ci0gICAgICAgICsraTsKLSAgICB9Ci0gICAgcmV0dXJuIGNoYW5n
ZWQ7Ci19CisgICAgLy8gVGhlIG51bWJlciAyMDAgZm9yIHR5cGljYWxOdW1iZXJPZlNwYWNlU3Bs
aXRTdHJpbmcgd2FzIGJhc2VkIG9uIHRoZSB0eXBpY2FsIG51bWJlciBvZiB1bmlxdWUgY2xhc3Mg
bmFtZXMKKyAgICAvLyBvbiB0eXBpY2FsIHdlYnNpdGVzIG9uIEF1Z3VzdCAyMDEzLgorICAgIHN0
YXRpYyBjb25zdCB1bnNpZ25lZCB0eXBpY2FsTnVtYmVyT2ZTcGFjZVNwbGl0U3RyaW5nID0gMjAw
OworICAgIHN0YXRpYyBjb25zdCBpbnQgbWluaW11bVRhYmxlU2l6ZSA9IFdURjo6SGFzaFRhYmxl
Q2FwYWNpdHlGb3JTaXplPHR5cGljYWxOdW1iZXJPZlNwYWNlU3BsaXRTdHJpbmc+Ojp2YWx1ZTsK
K307CiAKLXR5cGVkZWYgSGFzaE1hcDxBdG9taWNTdHJpbmcsIFNwYWNlU3BsaXRTdHJpbmdEYXRh
Kj4gU3BhY2VTcGxpdFN0cmluZ0RhdGFNYXA7Cit0eXBlZGVmIEhhc2hNYXA8QXRvbWljU3RyaW5n
LCBTcGFjZVNwbGl0U3RyaW5nRGF0YSosIERlZmF1bHRIYXNoPEF0b21pY1N0cmluZz46Okhhc2gs
IFNwYWNlU3BsaXRTdHJpbmdEYXRhTWFwS2V5VHJhaXQ+IFNwYWNlU3BsaXRTdHJpbmdEYXRhTWFw
OwogCiBzdGF0aWMgU3BhY2VTcGxpdFN0cmluZ0RhdGFNYXAmIHNoYXJlZERhdGFNYXAoKQogewpA
QCAtMTcyLDE0ICsxMTgsMTIgQEAgc3RhdGljIFNwYWNlU3BsaXRTdHJpbmdEYXRhTWFwJiBzaGFy
ZWREYQogCiB2b2lkIFNwYWNlU3BsaXRTdHJpbmc6OnNldChjb25zdCBBdG9taWNTdHJpbmcmIGlu
cHV0U3RyaW5nLCBib29sIHNob3VsZEZvbGRDYXNlKQogewotICAgIGlmIChpbnB1dFN0cmluZy5p
c051bGwoKSkgeworICAgIGlmIChpbnB1dFN0cmluZy5pc051bGwoKSkKICAgICAgICAgY2xlYXIo
KTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KIAotICAgIFN0cmluZyBzdHJpbmcoaW5wdXRTdHJp
bmcuc3RyaW5nKCkpOworICAgIEF0b21pY1N0cmluZyBzdHJpbmcoaW5wdXRTdHJpbmcpOwogICAg
IGlmIChzaG91bGRGb2xkQ2FzZSAmJiBoYXNOb25BU0NJSU9yVXBwZXIoc3RyaW5nKSkKLSAgICAg
ICAgc3RyaW5nID0gc3RyaW5nLmZvbGRDYXNlKCk7CisgICAgICAgIHN0cmluZyA9IHN0cmluZy5z
dHJpbmcoKS5mb2xkQ2FzZSgpOwogCiAgICAgbV9kYXRhID0gU3BhY2VTcGxpdFN0cmluZ0RhdGE6
OmNyZWF0ZShzdHJpbmcpOwogfQpAQCAtMjIxLDQ4ICsxNjUsMTAyIEBAIGJvb2wgU3BhY2VTcGxp
dFN0cmluZzo6c3BhY2VTcGxpdFN0cmluZ0MKICAgICAgICAgc3RyaW5nID0gc3RyaW5nLmZvbGRD
YXNlKCk7CiAKICAgICBUb2tlbklzRXF1YWxUb0NTdHJpbmdUb2tlblByb2Nlc3NvciB0b2tlblBy
b2Nlc3Nvcih2YWx1ZSwgdmFsdWVMZW5ndGgpOwotICAgIHVuc2lnbmVkIGxlbmd0aCA9IHN0cmlu
Zy5sZW5ndGgoKTsKLSAgICBpZiAoc3RyaW5nLmlzOEJpdCgpKQotICAgICAgICB0b2tlbml6ZVNw
YWNlU3BsaXRTdHJpbmcodG9rZW5Qcm9jZXNzb3IsIHN0cmluZy5jaGFyYWN0ZXJzOCgpLCBsZW5n
dGgpOwotICAgIGVsc2UKLSAgICAgICAgdG9rZW5pemVTcGFjZVNwbGl0U3RyaW5nKHRva2VuUHJv
Y2Vzc29yLCBzdHJpbmcuY2hhcmFjdGVyczE2KCksIGxlbmd0aCk7CisgICAgdG9rZW5pemVTcGFj
ZVNwbGl0U3RyaW5nKHRva2VuUHJvY2Vzc29yLCBzdHJpbmcpOwogICAgIHJldHVybiB0b2tlblBy
b2Nlc3Nvci5yZWZlcmVuY2VTdHJpbmdXYXNGb3VuZCgpOwogfQogCi1TcGFjZVNwbGl0U3RyaW5n
RGF0YTo6flNwYWNlU3BsaXRTdHJpbmdEYXRhKCkKLXsKLSAgICBpZiAoIW1fa2V5U3RyaW5nLmlz
TnVsbCgpKQotICAgICAgICBzaGFyZWREYXRhTWFwKCkucmVtb3ZlKG1fa2V5U3RyaW5nKTsKLX0K
K2NsYXNzIFRva2VuQ291bnRlciB7CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoVG9rZW5Db3Vu
dGVyKTsKK3B1YmxpYzoKKyAgICBUb2tlbkNvdW50ZXIoKSA6IG1fdG9rZW5Db3VudCgwKSB7IH0K
IAotUGFzc1JlZlB0cjxTcGFjZVNwbGl0U3RyaW5nRGF0YT4gU3BhY2VTcGxpdFN0cmluZ0RhdGE6
OmNyZWF0ZShjb25zdCBBdG9taWNTdHJpbmcmIHN0cmluZykKLXsKLSAgICBTcGFjZVNwbGl0U3Ry
aW5nRGF0YSomIGRhdGEgPSBzaGFyZWREYXRhTWFwKCkuYWRkKHN0cmluZywgMCkuaXRlcmF0b3It
PnZhbHVlOwotICAgIGlmICghZGF0YSkgewotICAgICAgICBkYXRhID0gbmV3IFNwYWNlU3BsaXRT
dHJpbmdEYXRhKHN0cmluZyk7Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZihkYXRhKTsKKyAgICB0
ZW1wbGF0ZSA8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4KKyAgICBib29sIHByb2Nlc3NUb2tlbihj
b25zdCBDaGFyYWN0ZXJUeXBlKiwgdW5zaWduZWQpCisgICAgeworICAgICAgICArK21fdG9rZW5D
b3VudDsKKyAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQotICAgIHJldHVybiBkYXRhOwotfQog
Ci1QYXNzUmVmUHRyPFNwYWNlU3BsaXRTdHJpbmdEYXRhPiBTcGFjZVNwbGl0U3RyaW5nRGF0YTo6
Y3JlYXRlVW5pcXVlKGNvbnN0IFNwYWNlU3BsaXRTdHJpbmdEYXRhJiBvdGhlcikKLXsKLSAgICBy
ZXR1cm4gYWRvcHRSZWYobmV3IFNwYWNlU3BsaXRTdHJpbmdEYXRhKG90aGVyKSk7Ci19CisgICAg
dW5zaWduZWQgdG9rZW5Db3VudCgpIGNvbnN0IHsgcmV0dXJuIG1fdG9rZW5Db3VudDsgfQorCitw
cml2YXRlOgorICAgIHVuc2lnbmVkIG1fdG9rZW5Db3VudDsKK307CisKK2NsYXNzIFRva2VuQXRv
bWljU3RyaW5nSW5pdGlhbGl6ZXIgeworICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKFRva2VuQXRv
bWljU3RyaW5nSW5pdGlhbGl6ZXIpOworcHVibGljOgorICAgIFRva2VuQXRvbWljU3RyaW5nSW5p
dGlhbGl6ZXIoQXRvbWljU3RyaW5nKiBtZW1vcnkpIDogbV9tZW1vcnlCdWNrZXQobWVtb3J5KSB7
IH0KIAotU3BhY2VTcGxpdFN0cmluZ0RhdGE6OlNwYWNlU3BsaXRTdHJpbmdEYXRhKGNvbnN0IEF0
b21pY1N0cmluZyYgc3RyaW5nKQotICAgIDogbV9rZXlTdHJpbmcoc3RyaW5nKQorICAgIHRlbXBs
YXRlIDx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPgorICAgIGJvb2wgcHJvY2Vzc1Rva2VuKGNvbnN0
IENoYXJhY3RlclR5cGUqIGNoYXJhY3RlcnMsIHVuc2lnbmVkIGxlbmd0aCkKKyAgICB7CisgICAg
ICAgIG5ldyAoTm90TnVsbCwgbV9tZW1vcnlCdWNrZXQpIEF0b21pY1N0cmluZyhjaGFyYWN0ZXJz
LCBsZW5ndGgpOworICAgICAgICArK21fbWVtb3J5QnVja2V0OworICAgICAgICByZXR1cm4gdHJ1
ZTsKKyAgICB9CisKKyAgICBjb25zdCBBdG9taWNTdHJpbmcqIG5leHRNZW1vcnlCdWNrZXQoKSBj
b25zdCB7IHJldHVybiBtX21lbW9yeUJ1Y2tldDsgfQorcHJpdmF0ZToKKyAgICBBdG9taWNTdHJp
bmcqIG1fbWVtb3J5QnVja2V0OworfTsKKworUGFzc1JlZlB0cjxTcGFjZVNwbGl0U3RyaW5nRGF0
YT4gU3BhY2VTcGxpdFN0cmluZ0RhdGE6OmNyZWF0ZShjb25zdCBBdG9taWNTdHJpbmcmIGtleVN0
cmluZykKIHsKLSAgICBBU1NFUlQoIXN0cmluZy5pc051bGwoKSk7Ci0gICAgY3JlYXRlVmVjdG9y
KHN0cmluZyk7CisgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKKyAgICBBU1NFUlQoIWtleVN0
cmluZy5pc051bGwoKSk7CisKKyAgICBTcGFjZVNwbGl0U3RyaW5nRGF0YU1hcCYgc3BhY2VTcGxp
dFN0cmluZ0RhdGFDYWNoZSA9IHNoYXJlZERhdGFNYXAoKTsKKyAgICBTcGFjZVNwbGl0U3RyaW5n
RGF0YU1hcDo6aXRlcmF0b3IgaXRlcmF0b3IgPSBzcGFjZVNwbGl0U3RyaW5nRGF0YUNhY2hlLmZp
bmQoa2V5U3RyaW5nKTsKKyAgICBpZiAoaXRlcmF0b3IgIT0gc3BhY2VTcGxpdFN0cmluZ0RhdGFD
YWNoZS5lbmQoKSkKKyAgICAgICAgcmV0dXJuIGl0ZXJhdG9yLT52YWx1ZTsKKworICAgIC8vIE5v
dGhpbmcgaW4gdGhlIGNhY2hlPyBMZXQncyBjcmVhdGUgYSBuZXcgU3BhY2VTcGxpdFN0cmluZ0Rh
dGEgaWYgdGhlIGlucHV0IGhhcyBzb21ldGhpbmcgdXNlZnVsLgorICAgIC8vIDEpIFdlIGZpbmQg
dGhlIG51bWJlciBvZiBzdHJpbmdzIGluIHRoZSBpbnB1dCB0byBrbm93IGhvdyBtdWNoIHNpemUg
d2UgbmVlZCB0byBhbGxvY2F0ZS4KKyAgICBUb2tlbkNvdW50ZXIgdG9rZW5Db3VudGVyOworICAg
IHRva2VuaXplU3BhY2VTcGxpdFN0cmluZyh0b2tlbkNvdW50ZXIsIGtleVN0cmluZyk7CisgICAg
dW5zaWduZWQgdG9rZW5Db3VudCA9IHRva2VuQ291bnRlci50b2tlbkNvdW50KCk7CisKKyAgICBp
ZiAoIXRva2VuQ291bnQpCisgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgLy8gMikgV2Ug
YWxsb2NhdGUgZW5vdWdoIHNwYWNlIGZvciB0aGUgU3BhY2VTcGxpdFN0cmluZ0RhdGEgYW5kIGl0
cyB0b2tlbnMuCisgICAgUkVMRUFTRV9BU1NFUlQodG9rZW5Db3VudCA8IChzdGQ6Om51bWVyaWNf
bGltaXRzPHVuc2lnbmVkPjo6bWF4KCkgLSBzaXplb2YoU3BhY2VTcGxpdFN0cmluZ0RhdGEpKSAv
IHNpemVvZihBdG9taWNTdHJpbmcpKTsKKyAgICB1bnNpZ25lZCBzaXplVG9BbGxvY2F0ZSA9IHNp
emVvZihTcGFjZVNwbGl0U3RyaW5nRGF0YSkgKyB0b2tlbkNvdW50ICogc2l6ZW9mKEF0b21pY1N0
cmluZyk7CisgICAgU3BhY2VTcGxpdFN0cmluZ0RhdGEqIHNwYWNlU3BsaXRTdHJpbmdEYXRhID0g
c3RhdGljX2Nhc3Q8U3BhY2VTcGxpdFN0cmluZ0RhdGEqPihmYXN0TWFsbG9jKHNpemVUb0FsbG9j
YXRlKSk7CisKKyAgICAvLyAzKSBXZSBpbml0aWFsaXplIHRoZSBuZXcgb2JqZWN0IHdpdGggdGhl
IGlucHV0IGFuZCB0aGUgdG9rZW5zLgorICAgIG5ldyAoTm90TnVsbCwgc3BhY2VTcGxpdFN0cmlu
Z0RhdGEpIFNwYWNlU3BsaXRTdHJpbmdEYXRhKGtleVN0cmluZywgdG9rZW5Db3VudCk7CisgICAg
QXRvbWljU3RyaW5nKiB0b2tlbkFycmF5U3RhcnQgPSBzcGFjZVNwbGl0U3RyaW5nRGF0YS0+dG9r
ZW5BcnJheVN0YXJ0KCk7CisgICAgVG9rZW5BdG9taWNTdHJpbmdJbml0aWFsaXplciB0b2tlbklu
aXRpYWxpemVyKHRva2VuQXJyYXlTdGFydCk7CisgICAgdG9rZW5pemVTcGFjZVNwbGl0U3RyaW5n
KHRva2VuSW5pdGlhbGl6ZXIsIGtleVN0cmluZyk7CisgICAgQVNTRVJUKHRva2VuSW5pdGlhbGl6
ZXIubmV4dE1lbW9yeUJ1Y2tldCgpIC0gdG9rZW5BcnJheVN0YXJ0ID09IHRva2VuQ291bnQpOwor
ICAgIEFTU0VSVChyZWludGVycHJldF9jYXN0PGNvbnN0IGNoYXIqPih0b2tlbkluaXRpYWxpemVy
Lm5leHRNZW1vcnlCdWNrZXQoKSkgPT0gcmVpbnRlcnByZXRfY2FzdDxjb25zdCBjaGFyKj4oc3Bh
Y2VTcGxpdFN0cmluZ0RhdGEpICsgc2l6ZVRvQWxsb2NhdGUpOworCisgICAgc3BhY2VTcGxpdFN0
cmluZ0RhdGFDYWNoZS5hZGQoa2V5U3RyaW5nLCBzcGFjZVNwbGl0U3RyaW5nRGF0YSk7CisKKyAg
ICByZXR1cm4gYWRvcHRSZWYoc3BhY2VTcGxpdFN0cmluZ0RhdGEpOwogfQogCi1TcGFjZVNwbGl0
U3RyaW5nRGF0YTo6U3BhY2VTcGxpdFN0cmluZ0RhdGEoY29uc3QgU3BhY2VTcGxpdFN0cmluZ0Rh
dGEmIG90aGVyKQotICAgIDogUmVmQ291bnRlZDxTcGFjZVNwbGl0U3RyaW5nRGF0YT4oKQotICAg
ICwgbV92ZWN0b3Iob3RoZXIubV92ZWN0b3IpCisKK3ZvaWQgU3BhY2VTcGxpdFN0cmluZ0RhdGE6
OmRlc3Ryb3koU3BhY2VTcGxpdFN0cmluZ0RhdGEqIHNwYWNlU3BsaXRTdHJpbmcpCiB7Ci0gICAg
Ly8gTm90ZSB0aGF0IHdlIGRvbid0IGNvcHkgbV9rZXlTdHJpbmcgdG8gaW5kaWNhdGUgdG8gdGhl
IGRlc3RydWN0b3IgdGhhdCB0aGVyZSdzIG5vdGhpbmcKLSAgICAvLyB0byBiZSByZW1vdmVkIGZy
b20gdGhlIHNoYXJlZERhdGFNYXAoKS4KKyAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOworCisg
ICAgaWYgKCFzcGFjZVNwbGl0U3RyaW5nLT5tX2tleVN0cmluZy5pc051bGwoKSkKKyAgICAgICAg
c2hhcmVkRGF0YU1hcCgpLnJlbW92ZShzcGFjZVNwbGl0U3RyaW5nLT5tX2tleVN0cmluZyk7CisK
KyAgICB1bnNpZ25lZCBpID0gMDsKKyAgICB1bnNpZ25lZCBzaXplID0gc3BhY2VTcGxpdFN0cmlu
Zy0+c2l6ZSgpOworICAgIGNvbnN0IEF0b21pY1N0cmluZyogZGF0YSA9IHNwYWNlU3BsaXRTdHJp
bmctPnRva2VuQXJyYXlTdGFydCgpOworICAgIGRvIHsKKyAgICAgICAgZGF0YVtpXS5+QXRvbWlj
U3RyaW5nKCk7CisgICAgICAgICsraTsKKyAgICB9IHdoaWxlIChpIDwgc2l6ZSk7CisKKyAgICBz
cGFjZVNwbGl0U3RyaW5nLT5+U3BhY2VTcGxpdFN0cmluZ0RhdGEoKTsKKworICAgIGZhc3RGcmVl
KHNwYWNlU3BsaXRTdHJpbmcpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9kb20vU3BhY2VTcGxpdFN0cmluZy5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL2RvbS9TcGFjZVNwbGl0U3RyaW5nLmgJKHJldmlzaW9uIDE1NDcxOSkKKysrIFNv
dXJjZS9XZWJDb3JlL2RvbS9TcGFjZVNwbGl0U3RyaW5nLmgJKHdvcmtpbmcgY29weSkKQEAgLTEs
NSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA3LCAyMDA4LCAyMDEwLCAyMDExLCAy
MDEyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAw
NywgMjAwOCwgMjAxMCwgMjAxMSwgMjAxMiwgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCiAgKgogICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVk
aXN0cmlidXRlIGl0IGFuZC9vcgogICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUg
R05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTIxLDQ4ICsyMSw3NiBAQAogI2lmbmRlZiBT
cGFjZVNwbGl0U3RyaW5nX2gKICNkZWZpbmUgU3BhY2VTcGxpdFN0cmluZ19oCiAKLSNpbmNsdWRl
IDx3dGYvUmVmQ291bnRlZC5oPgotI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKyNpbmNsdWRlIDx3
dGYvQXNzZXJ0aW9ucy5oPgorI2luY2x1ZGUgPHd0Zi9NYWluVGhyZWFkLmg+CisjaW5jbHVkZSA8
d3RmL05vbmNvcHlhYmxlLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvQXRvbWljU3RyaW5nLmg+CiAK
IG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotY2xhc3MgU3BhY2VTcGxpdFN0cmluZ0RhdGEgOiBwdWJs
aWMgUmVmQ291bnRlZDxTcGFjZVNwbGl0U3RyaW5nRGF0YT4geworY2xhc3MgU3BhY2VTcGxpdFN0
cmluZ0RhdGEgeworICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKFNwYWNlU3BsaXRTdHJpbmdEYXRh
KTsKKyAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKIHB1YmxpYzoKICAgICBzdGF0aWMgUGFz
c1JlZlB0cjxTcGFjZVNwbGl0U3RyaW5nRGF0YT4gY3JlYXRlKGNvbnN0IEF0b21pY1N0cmluZyYp
OwotICAgIHN0YXRpYyBQYXNzUmVmUHRyPFNwYWNlU3BsaXRTdHJpbmdEYXRhPiBjcmVhdGVVbmlx
dWUoY29uc3QgU3BhY2VTcGxpdFN0cmluZ0RhdGEmKTsKLQotICAgIH5TcGFjZVNwbGl0U3RyaW5n
RGF0YSgpOwogCiAgICAgYm9vbCBjb250YWlucyhjb25zdCBBdG9taWNTdHJpbmcmIHN0cmluZykK
ICAgICB7Ci0gICAgICAgIHNpemVfdCBzaXplID0gbV92ZWN0b3Iuc2l6ZSgpOwotICAgICAgICBm
b3IgKHNpemVfdCBpID0gMDsgaSA8IHNpemU7ICsraSkgewotICAgICAgICAgICAgaWYgKG1fdmVj
dG9yW2ldID09IHN0cmluZykKKyAgICAgICAgY29uc3QgQXRvbWljU3RyaW5nKiBkYXRhID0gdG9r
ZW5BcnJheVN0YXJ0KCk7CisgICAgICAgIHVuc2lnbmVkIGkgPSAwOworICAgICAgICBkbyB7Cisg
ICAgICAgICAgICBpZiAoZGF0YVtpXSA9PSBzdHJpbmcpCiAgICAgICAgICAgICAgICAgcmV0dXJu
IHRydWU7Ci0gICAgICAgIH0KKyAgICAgICAgICAgICsraTsKKyAgICAgICAgfSB3aGlsZSAoaSA8
IG1fc2l6ZSk7CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAKICAgICBib29sIGNvbnRh
aW5zQWxsKFNwYWNlU3BsaXRTdHJpbmdEYXRhJik7CiAKLSAgICB2b2lkIGFkZChjb25zdCBBdG9t
aWNTdHJpbmcmKTsKLSAgICB2b2lkIHJlbW92ZSh1bnNpZ25lZCBpbmRleCk7CisgICAgdW5zaWdu
ZWQgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fc2l6ZTsgfQorICAgIGNvbnN0IEF0b21pY1N0cmlu
ZyYgb3BlcmF0b3JbXShzaXplX3QgaSkKKyAgICB7CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKGkg
PCBtX3NpemUpOworICAgICAgICByZXR1cm4gdG9rZW5BcnJheVN0YXJ0KClbaV07CisgICAgfQog
Ci0gICAgYm9vbCBpc1VuaXF1ZSgpIGNvbnN0IHsgcmV0dXJuIG1fa2V5U3RyaW5nLmlzTnVsbCgp
OyB9IAotICAgIHNpemVfdCBzaXplKCkgY29uc3QgeyByZXR1cm4gbV92ZWN0b3Iuc2l6ZSgpOyB9
Ci0gICAgY29uc3QgQXRvbWljU3RyaW5nJiBvcGVyYXRvcltdKHNpemVfdCBpKSB7IEFTU0VSVF9X
SVRIX1NFQ1VSSVRZX0lNUExJQ0FUSU9OKGkgPCBzaXplKCkpOyByZXR1cm4gbV92ZWN0b3JbaV07
IH0KKyAgICBpbmxpbmUgdm9pZCByZWYoKQorICAgIHsKKyAgICAgICAgQVNTRVJUKGlzTWFpblRo
cmVhZCgpKTsKKyAgICAgICAgQVNTRVJUKG1fcmVmQ291bnQpOworICAgICAgICArK21fcmVmQ291
bnQ7CisgICAgfQorCisgICAgaW5saW5lIHZvaWQgZGVyZWYoKQorICAgIHsKKyAgICAgICAgQVNT
RVJUKGlzTWFpblRocmVhZCgpKTsKKyAgICAgICAgdW5zaWduZWQgdGVtcFJlZkNvdW50ID0gbV9y
ZWZDb3VudCAtIDE7CisgICAgICAgIGlmICghdGVtcFJlZkNvdW50KSB7CisgICAgICAgICAgICBT
cGFjZVNwbGl0U3RyaW5nRGF0YTo6ZGVzdHJveSh0aGlzKTsKKyAgICAgICAgICAgIHJldHVybjsK
KyAgICAgICAgfQorICAgICAgICBtX3JlZkNvdW50ID0gdGVtcFJlZkNvdW50OworICAgIH0KIAog
cHJpdmF0ZToKLSAgICBleHBsaWNpdCBTcGFjZVNwbGl0U3RyaW5nRGF0YShjb25zdCBBdG9taWNT
dHJpbmcmKTsKLSAgICBleHBsaWNpdCBTcGFjZVNwbGl0U3RyaW5nRGF0YShjb25zdCBTcGFjZVNw
bGl0U3RyaW5nRGF0YSYpOworICAgIFNwYWNlU3BsaXRTdHJpbmdEYXRhKGNvbnN0IEF0b21pY1N0
cmluZyYgc3RyaW5nLCB1bnNpZ25lZCBzaXplKQorICAgICAgICA6IG1fa2V5U3RyaW5nKHN0cmlu
ZykKKyAgICAgICAgLCBtX3JlZkNvdW50KDEpCisgICAgICAgICwgbV9zaXplKHNpemUpCisgICAg
eworICAgICAgICBBU1NFUlQoIXN0cmluZy5pc0VtcHR5KCkpOworICAgICAgICBBU1NFUlRfV0lU
SF9NRVNTQUdFKG1fc2l6ZSwgIlNwYWNlU3BsaXRTdHJpbmdEYXRhIHNob3VsZCBuZXZlciBiZSBl
bXB0eSBieSBkZWZpbml0aW9uLiBUaGVyZSBpcyBubyBkaWZmZXJlbmNlIGJldHdlZW4gZW1wdHkg
YW5kIG51bGwuIik7CisgICAgfQorCisgICAgaW5saW5lIH5TcGFjZVNwbGl0U3RyaW5nRGF0YSgp
IHsgfQorICAgIHN0YXRpYyB2b2lkIGRlc3Ryb3koU3BhY2VTcGxpdFN0cmluZ0RhdGEqKTsKIAot
ICAgIHZvaWQgY3JlYXRlVmVjdG9yKGNvbnN0IFN0cmluZyYpOwotICAgIHRlbXBsYXRlIDx0eXBl
bmFtZSBDaGFyYWN0ZXJUeXBlPgotICAgIGlubGluZSB2b2lkIGNyZWF0ZVZlY3Rvcihjb25zdCBD
aGFyYWN0ZXJUeXBlKiwgdW5zaWduZWQpOworICAgIEF0b21pY1N0cmluZyogdG9rZW5BcnJheVN0
YXJ0KCkgeyByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxBdG9taWNTdHJpbmcqPih0aGlzICsgMSk7
IH0KIAogICAgIEF0b21pY1N0cmluZyBtX2tleVN0cmluZzsKLSAgICBWZWN0b3I8QXRvbWljU3Ry
aW5nLCA0PiBtX3ZlY3RvcjsKKyAgICB1bnNpZ25lZCBtX3JlZkNvdW50OworICAgIHVuc2lnbmVk
IG1fc2l6ZTsKIH07CiAKIGNsYXNzIFNwYWNlU3BsaXRTdHJpbmcgewpAQCAtNzcsMTIgKzEwNSwx
NCBAQCBwdWJsaWM6CiAKICAgICBib29sIGNvbnRhaW5zKGNvbnN0IEF0b21pY1N0cmluZyYgc3Ry
aW5nKSBjb25zdCB7IHJldHVybiBtX2RhdGEgJiYgbV9kYXRhLT5jb250YWlucyhzdHJpbmcpOyB9
CiAgICAgYm9vbCBjb250YWluc0FsbChjb25zdCBTcGFjZVNwbGl0U3RyaW5nJiBuYW1lcykgY29u
c3QgeyByZXR1cm4gIW5hbWVzLm1fZGF0YSB8fCAobV9kYXRhICYmIG1fZGF0YS0+Y29udGFpbnNB
bGwoKm5hbWVzLm1fZGF0YSkpOyB9Ci0gICAgdm9pZCBhZGQoY29uc3QgQXRvbWljU3RyaW5nJik7
Ci0gICAgYm9vbCByZW1vdmUoY29uc3QgQXRvbWljU3RyaW5nJik7CiAKICAgICBzaXplX3Qgc2l6
ZSgpIGNvbnN0IHsgcmV0dXJuIG1fZGF0YSA/IG1fZGF0YS0+c2l6ZSgpIDogMDsgfQotICAgIGJv
b2wgaXNOdWxsKCkgY29uc3QgeyByZXR1cm4gIW1fZGF0YTsgfQotICAgIGNvbnN0IEF0b21pY1N0
cmluZyYgb3BlcmF0b3JbXShzaXplX3QgaSkgY29uc3QgeyBBU1NFUlRfV0lUSF9TRUNVUklUWV9J
TVBMSUNBVElPTihpIDwgc2l6ZSgpKTsgcmV0dXJuICgqbV9kYXRhKVtpXTsgfQorICAgIGJvb2wg
aXNFbXB0eSgpIGNvbnN0IHsgcmV0dXJuICFtX2RhdGE7IH0KKyAgICBjb25zdCBBdG9taWNTdHJp
bmcmIG9wZXJhdG9yW10oc2l6ZV90IGkpIGNvbnN0CisgICAgeworICAgICAgICBBU1NFUlRfV0lU
SF9TRUNVUklUWV9JTVBMSUNBVElPTihtX2RhdGEpOworICAgICAgICByZXR1cm4gKCptX2RhdGEp
W2ldOworICAgIH0KIAogICAgIHN0YXRpYyBib29sIHNwYWNlU3BsaXRTdHJpbmdDb250YWluc1Zh
bHVlKGNvbnN0IFN0cmluZyYgc3BhY2VTcGxpdFN0cmluZywgY29uc3QgY2hhciogdmFsdWUsIHVu
c2lnbmVkIGxlbmd0aCwgYm9vbCBzaG91bGRGb2xkQ2FzZSk7CiAgICAgdGVtcGxhdGU8c2l6ZV90
IGxlbmd0aD4KQEAgLTkyLDExICsxMjIsNiBAQCBwdWJsaWM6CiAgICAgfQogCiBwcml2YXRlOgot
ICAgIHZvaWQgZW5zdXJlVW5pcXVlKCkKLSAgICB7Ci0gICAgICAgIGlmIChtX2RhdGEgJiYgIW1f
ZGF0YS0+aXNVbmlxdWUoKSkKLSAgICAgICAgICAgIG1fZGF0YSA9IFNwYWNlU3BsaXRTdHJpbmdE
YXRhOjpjcmVhdGVVbmlxdWUoKm1fZGF0YSk7Ci0gICAgfQogCiAgICAgUmVmUHRyPFNwYWNlU3Bs
aXRTdHJpbmdEYXRhPiBtX2RhdGE7CiB9OwpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9DbGFz
c0xpc3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvQ2xhc3NMaXN0LmNw
cAkocmV2aXNpb24gMTU0NzE4KQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9DbGFzc0xpc3QuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC04Myw3ICs4Myw3IEBAIGNvbnN0IFNwYWNlU3BsaXRTdHJpbmcm
IENsYXNzTGlzdDo6Y2xhc3MKIHsKICAgICBBU1NFUlQobV9lbGVtZW50LT5oYXNDbGFzcygpKTsK
ICAgICBpZiAobV9lbGVtZW50LT5kb2N1bWVudCgpLT5pblF1aXJrc01vZGUoKSkgewotICAgICAg
ICBpZiAoIW1fY2xhc3NOYW1lc0ZvclF1aXJrc01vZGUuc2l6ZSgpKQorICAgICAgICBpZiAobV9j
bGFzc05hbWVzRm9yUXVpcmtzTW9kZS5pc0VtcHR5KCkpCiAgICAgICAgICAgICBtX2NsYXNzTmFt
ZXNGb3JRdWlya3NNb2RlLnNldCh2YWx1ZSgpLCBmYWxzZSk7CiAgICAgICAgIHJldHVybiBtX2Ns
YXNzTmFtZXNGb3JRdWlya3NNb2RlOwogICAgIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2Uv
RXZlbnRIYW5kbGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdlL0V2ZW50
SGFuZGxlci5jcHAJKHJldmlzaW9uIDE1NDcxOCkKKysrIFNvdXJjZS9XZWJDb3JlL3BhZ2UvRXZl
bnRIYW5kbGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjA3NCw3ICsyMDc0LDcgQEAgc3RhdGlj
IGJvb2wgZmluZERyb3Bab25lKE5vZGUqIHRhcmdldCwgQwogICAgICAgICBkcm9wWm9uZVN0ci5t
YWtlTG93ZXIoKTsKICAgICAgICAgCiAgICAgICAgIFNwYWNlU3BsaXRTdHJpbmcga2V5d29yZHMo
ZHJvcFpvbmVTdHIsIGZhbHNlKTsKLSAgICAgICAgaWYgKGtleXdvcmRzLmlzTnVsbCgpKQorICAg
ICAgICBpZiAoa2V5d29yZHMuaXNFbXB0eSgpKQogICAgICAgICAgICAgY29udGludWU7CiAgICAg
ICAgIAogICAgICAgICBEcmFnT3BlcmF0aW9uIGRyYWdPcGVyYXRpb24gPSBEcmFnT3BlcmF0aW9u
Tm9uZTsK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>209843</attachid>
            <date>2013-08-27 21:01:44 -0700</date>
            <delta_ts>2013-08-27 21:07:58 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-120385-20130827210143.patch</filename>
            <type>text/plain</type>
            <size>19272</size>
            <attacher name="Benjamin Poulain">benjamin</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE1NDcyMCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDQ4IEBACisyMDEzLTA4LTI3ICBCZW5qYW1p
biBQb3VsYWluICA8YmVuamFtaW5Ad2Via2l0Lm9yZz4KKworICAgICAgICBTaW1wbGlmeSBhbmQg
Y2xlYW4gU3BhY2VTcGxpdFN0cmluZworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MTIwMzg1CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCisKKyAgICAgICAgQ2xlYW4gdXAgb2YgU3BhY2VTcGxpdFN0cmluZyBmb2xsb3dpbmcgdGhl
IGNsZWFuaW5nIG9mIHRoZSBET01Ub2tlbkxpc3QgaGllcmFyY2h5LgorICAgICAgICAtIFJlbW92
ZSB0aGUgY29uY2VwdHMgb2YgZW1wdHkgYW5kIG51bGwuIFRoZSBsaXN0IGNhbiBub3cgYmUgZW1w
dHkgb3IgaGF2ZSBzb21ldGhpbmcuCisgICAgICAgICAgVGhlcmUgaXMgbm8gbnVsbCBzdGF0ZS4K
KyAgICAgICAgLSBQdXQgdGhlIHRva2VucyBkaXJlY3RseSBmb2xsb3dpbmcgU3BhY2VTcGxpdFN0
cmluZ0RhdGEgaW5zdGVhZCBvZiB1c2luZyBhIFZlY3RvciBpbiBiZXR3ZWVuLgorCisgICAgICAg
ICogV2ViQ29yZS5leHAuaW46CisgICAgICAgICogZG9tL0VsZW1lbnREYXRhLmg6CisgICAgICAg
IChXZWJDb3JlOjpFbGVtZW50RGF0YTo6aGFzQ2xhc3MpOgorICAgICAgICAqIGRvbS9TcGFjZVNw
bGl0U3RyaW5nLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnRva2VuaXplU3BhY2VTcGxpdFN0cmlu
Zyk6CisgICAgICAgIChXZWJDb3JlOjpTcGFjZVNwbGl0U3RyaW5nRGF0YTo6Y29udGFpbnNBbGwp
OgorICAgICAgICAoV2ViQ29yZTo6U3BhY2VTcGxpdFN0cmluZzo6c2V0KToKKyAgICAgICAgKFdl
YkNvcmU6OlNwYWNlU3BsaXRTdHJpbmc6OnNwYWNlU3BsaXRTdHJpbmdDb250YWluc1ZhbHVlKToK
KyAgICAgICAgKFdlYkNvcmU6OlRva2VuQ291bnRlcjo6VG9rZW5Db3VudGVyKToKKyAgICAgICAg
KFdlYkNvcmU6OlRva2VuQ291bnRlcjo6cHJvY2Vzc1Rva2VuKToKKyAgICAgICAgKFdlYkNvcmU6
OlRva2VuQ291bnRlcjo6dG9rZW5Db3VudCk6CisgICAgICAgIChXZWJDb3JlOjpUb2tlbkF0b21p
Y1N0cmluZ0luaXRpYWxpemVyOjpUb2tlbkF0b21pY1N0cmluZ0luaXRpYWxpemVyKToKKyAgICAg
ICAgKFdlYkNvcmU6OlRva2VuQXRvbWljU3RyaW5nSW5pdGlhbGl6ZXI6OnByb2Nlc3NUb2tlbik6
CisgICAgICAgIChXZWJDb3JlOjpUb2tlbkF0b21pY1N0cmluZ0luaXRpYWxpemVyOjpuZXh0TWVt
b3J5QnVja2V0KToKKyAgICAgICAgKFdlYkNvcmU6OlNwYWNlU3BsaXRTdHJpbmdEYXRhOjpjcmVh
dGUpOgorICAgICAgICAoV2ViQ29yZTo6U3BhY2VTcGxpdFN0cmluZ0RhdGE6OmRlc3Ryb3kpOgor
ICAgICAgICAqIGRvbS9TcGFjZVNwbGl0U3RyaW5nLmg6CisgICAgICAgIChXZWJDb3JlOjpTcGFj
ZVNwbGl0U3RyaW5nRGF0YTo6Y29udGFpbnMpOgorICAgICAgICAoV2ViQ29yZTo6U3BhY2VTcGxp
dFN0cmluZ0RhdGE6OnNpemUpOgorICAgICAgICAoV2ViQ29yZTo6U3BhY2VTcGxpdFN0cmluZ0Rh
dGE6Om9wZXJhdG9yW10pOgorICAgICAgICAoV2ViQ29yZTo6U3BhY2VTcGxpdFN0cmluZ0RhdGE6
OnJlZik6CisgICAgICAgIChXZWJDb3JlOjpTcGFjZVNwbGl0U3RyaW5nRGF0YTo6ZGVyZWYpOgor
ICAgICAgICAoV2ViQ29yZTo6U3BhY2VTcGxpdFN0cmluZ0RhdGE6OlNwYWNlU3BsaXRTdHJpbmdE
YXRhKToKKyAgICAgICAgKFdlYkNvcmU6OlNwYWNlU3BsaXRTdHJpbmdEYXRhOjp+U3BhY2VTcGxp
dFN0cmluZ0RhdGEpOgorICAgICAgICAoV2ViQ29yZTo6U3BhY2VTcGxpdFN0cmluZ0RhdGE6OnRv
a2VuQXJyYXlTdGFydCk6CisgICAgICAgIChXZWJDb3JlOjpTcGFjZVNwbGl0U3RyaW5nOjpjb250
YWluc0FsbCk6CisgICAgICAgIChXZWJDb3JlOjpTcGFjZVNwbGl0U3RyaW5nOjppc0VtcHR5KToK
KyAgICAgICAgKFdlYkNvcmU6OlNwYWNlU3BsaXRTdHJpbmc6Om9wZXJhdG9yW10pOgorICAgICAg
ICAqIGh0bWwvQ2xhc3NMaXN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNsYXNzTGlzdDo6Y2xh
c3NOYW1lcyk6CisgICAgICAgICogcGFnZS9FdmVudEhhbmRsZXIuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6ZmluZERyb3Bab25lKToKKwogMjAxMy0wOC0yNyAgQmVuamFtaW4gUG91bGFpbiAgPGJl
bmphbWluQHdlYmtpdC5vcmc+CiAKICAgICAgICAgRml4IHRoZSBpbmRlbnRhdGlvbiBvZiBTcGFj
ZVNwbGl0U3RyaW5nCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmV4cC5pbgo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmV4cC5pbgkocmV2aXNpb24gMTU0NzIwKQor
KysgU291cmNlL1dlYkNvcmUvV2ViQ29yZS5leHAuaW4JKHdvcmtpbmcgY29weSkKQEAgLTY5MSw3
ICs2OTEsNiBAQCBfX1pON1dlYkNvcmUyMFJlc291cmNlUmVzcG9uc2VCYXNlMjRzZXRFCiBfX1pO
N1dlYkNvcmUyMFJlc291cmNlUmVzcG9uc2VCYXNlNnNldFVSTEVSS05TXzRLVVJMRQogX19aTjdX
ZWJDb3JlMjBSZXNvdXJjZVJlc3BvbnNlQmFzZUMyRXYKIF9fWk43V2ViQ29yZTIwUmVzb3VyY2VS
ZXNwb25zZUJhc2VDMkVSS05TXzRLVVJMRVJLTjNXVEY2U3RyaW5nRXhTN19TN18KLV9fWk43V2Vi
Q29yZTIwU3BhY2VTcGxpdFN0cmluZ0RhdGFEMUV2CiBfX1pON1dlYkNvcmUyMFVzZXJHZXN0dXJl
SW5kaWNhdG9yN3Nfc3RhdGVFCiBfX1pON1dlYkNvcmUyMFVzZXJHZXN0dXJlSW5kaWNhdG9yQzFF
TlNfMjZQcm9jZXNzaW5nVXNlckdlc3R1cmVTdGF0ZUUKIF9fWk43V2ViQ29yZTIwVXNlckdlc3R1
cmVJbmRpY2F0b3JEMUV2CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vRWxlbWVudERhdGEuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vRWxlbWVudERhdGEuaAkocmV2aXNpb24g
MTU0NzIwKQorKysgU291cmNlL1dlYkNvcmUvZG9tL0VsZW1lbnREYXRhLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTY2LDcgKzY2LDcgQEAgcHVibGljOgogICAgIHVuc2lnbmVkIGZpbmRBdHRyaWJ1dGVJ
bmRleEJ5TmFtZUZvckF0dHJpYnV0ZU5vZGUoY29uc3QgQXR0ciosIGJvb2wgc2hvdWxkSWdub3Jl
QXR0cmlidXRlQ2FzZSA9IGZhbHNlKSBjb25zdDsKIAogICAgIGJvb2wgaGFzSUQoKSBjb25zdCB7
IHJldHVybiAhbV9pZEZvclN0eWxlUmVzb2x1dGlvbi5pc051bGwoKTsgfQotICAgIGJvb2wgaGFz
Q2xhc3MoKSBjb25zdCB7IHJldHVybiAhbV9jbGFzc05hbWVzLmlzTnVsbCgpOyB9CisgICAgYm9v
bCBoYXNDbGFzcygpIGNvbnN0IHsgcmV0dXJuICFtX2NsYXNzTmFtZXMuaXNFbXB0eSgpOyB9CiAg
ICAgYm9vbCBoYXNOYW1lKCkgY29uc3QgeyByZXR1cm4gbV9oYXNOYW1lQXR0cmlidXRlOyB9CiAK
ICAgICBib29sIGlzRXF1aXZhbGVudChjb25zdCBFbGVtZW50RGF0YSogb3RoZXIpIGNvbnN0OwpJ
bmRleDogU291cmNlL1dlYkNvcmUvZG9tL1NwYWNlU3BsaXRTdHJpbmcuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9TcGFjZVNwbGl0U3RyaW5nLmNwcAkocmV2aXNpb24gMTU0
NzIwKQorKysgU291cmNlL1dlYkNvcmUvZG9tL1NwYWNlU3BsaXRTdHJpbmcuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0yNywxMCArMjcsMTAgQEAKICNpbmNsdWRlIDx3dGYvdGV4dC9BdG9taWNTdHJp
bmdIYXNoLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nQnVpbGRlci5oPgogCi11c2luZyBu
YW1lc3BhY2UgV1RGOwotCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKK0NPTVBJTEVfQVNTRVJUKCEo
c2l6ZW9mKFNwYWNlU3BsaXRTdHJpbmdEYXRhKSAlIHNpemVvZih1aW50cHRyX3QpKSwgU3BhY2VT
cGxpdFN0cmluZ0RhdGFUYWlsSXNBbGlnbmVkVG9Xb3JkU2l6ZSk7CisKIHRlbXBsYXRlIDx0eXBl
bmFtZSBDaGFyYWN0ZXJUeXBlPgogc3RhdGljIGlubGluZSBib29sIGhhc05vbkFTQ0lJT3JVcHBl
cihjb25zdCBDaGFyYWN0ZXJUeXBlKiBjaGFyYWN0ZXJzLCB1bnNpZ25lZCBsZW5ndGgpCiB7CkBA
IC03MywzMSArNzMsMTYgQEAgc3RhdGljIGlubGluZSB2b2lkIHRva2VuaXplU3BhY2VTcGxpdFN0
cgogICAgIH0KIH0KIAotY2xhc3MgQXBwZW5kVG9rZW5Ub1ZlY3RvclRva2VuUHJvY2Vzc29yIHsK
LXB1YmxpYzoKLSAgICBBcHBlbmRUb2tlblRvVmVjdG9yVG9rZW5Qcm9jZXNzb3IoVmVjdG9yPEF0
b21pY1N0cmluZywgND4mIHZlY3RvcikgOiBtX3ZlY3Rvcih2ZWN0b3IpIHsgfQotCi0gICAgdGVt
cGxhdGUgPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+Ci0gICAgYm9vbCBwcm9jZXNzVG9rZW4oY29u
c3QgQ2hhcmFjdGVyVHlwZSogY2hhcmFjdGVycywgdW5zaWduZWQgbGVuZ3RoKQotICAgIHsKLSAg
ICAgICAgbV92ZWN0b3IuYXBwZW5kKEF0b21pY1N0cmluZyhjaGFyYWN0ZXJzLCBsZW5ndGgpKTsK
LSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotcHJpdmF0ZToKLSAgICBWZWN0b3I8QXRvbWlj
U3RyaW5nLCA0PiYgbV92ZWN0b3I7Ci19OwotCi12b2lkIFNwYWNlU3BsaXRTdHJpbmdEYXRhOjpj
cmVhdGVWZWN0b3IoY29uc3QgU3RyaW5nJiBzdHJpbmcpCit0ZW1wbGF0ZTx0eXBlbmFtZSBUb2tl
blByb2Nlc3Nvcj4KK3N0YXRpYyBpbmxpbmUgdm9pZCB0b2tlbml6ZVNwYWNlU3BsaXRTdHJpbmco
VG9rZW5Qcm9jZXNzb3ImIHRva2VuUHJvY2Vzc29yLCBjb25zdCBTdHJpbmcmIHN0cmluZykKIHsK
LSAgICB1bnNpZ25lZCBsZW5ndGggPSBzdHJpbmcubGVuZ3RoKCk7Ci0KLSAgICBBcHBlbmRUb2tl
blRvVmVjdG9yVG9rZW5Qcm9jZXNzb3IgdG9rZW5Qcm9jZXNzb3IobV92ZWN0b3IpOwotICAgIGlm
IChzdHJpbmcuaXM4Qml0KCkpIHsKLSAgICAgICAgdG9rZW5pemVTcGFjZVNwbGl0U3RyaW5nKHRv
a2VuUHJvY2Vzc29yLCBzdHJpbmcuY2hhcmFjdGVyczgoKSwgbGVuZ3RoKTsKLSAgICAgICAgcmV0
dXJuOwotICAgIH0KKyAgICBBU1NFUlQoIXN0cmluZy5pc051bGwoKSk7CiAKLSAgICB0b2tlbml6
ZVNwYWNlU3BsaXRTdHJpbmcodG9rZW5Qcm9jZXNzb3IsIHN0cmluZy5jaGFyYWN0ZXJzMTYoKSwg
bGVuZ3RoKTsKKyAgICBjb25zdCBTdHJpbmdJbXBsKiBzdHJpbmdJbXBsID0gc3RyaW5nLmltcGwo
KTsKKyAgICBpZiAoc3RyaW5nSW1wbC0+aXM4Qml0KCkpCisgICAgICAgIHRva2VuaXplU3BhY2VT
cGxpdFN0cmluZyh0b2tlblByb2Nlc3Nvciwgc3RyaW5nSW1wbC0+Y2hhcmFjdGVyczgoKSwgc3Ry
aW5nSW1wbC0+bGVuZ3RoKCkpOworICAgIGVsc2UKKyAgICAgICAgdG9rZW5pemVTcGFjZVNwbGl0
U3RyaW5nKHRva2VuUHJvY2Vzc29yLCBzdHJpbmdJbXBsLT5jaGFyYWN0ZXJzMTYoKSwgc3RyaW5n
SW1wbC0+bGVuZ3RoKCkpOwogfQogCiBib29sIFNwYWNlU3BsaXRTdHJpbmdEYXRhOjpjb250YWlu
c0FsbChTcGFjZVNwbGl0U3RyaW5nRGF0YSYgb3RoZXIpCkBAIC0xMDUsNjQgKzkwLDI1IEBAIGJv
b2wgU3BhY2VTcGxpdFN0cmluZ0RhdGE6OmNvbnRhaW5zQWxsKFMKICAgICBpZiAodGhpcyA9PSAm
b3RoZXIpCiAgICAgICAgIHJldHVybiB0cnVlOwogCi0gICAgc2l6ZV90IHRoaXNTaXplID0gbV92
ZWN0b3Iuc2l6ZSgpOwotICAgIHNpemVfdCBvdGhlclNpemUgPSBvdGhlci5tX3ZlY3Rvci5zaXpl
KCk7Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBvdGhlclNpemU7ICsraSkgewotICAgICAg
ICBjb25zdCBBdG9taWNTdHJpbmcmIG5hbWUgPSBvdGhlci5tX3ZlY3RvcltpXTsKLSAgICAgICAg
c2l6ZV90IGo7Ci0gICAgICAgIGZvciAoaiA9IDA7IGogPCB0aGlzU2l6ZTsgKytqKSB7Ci0gICAg
ICAgICAgICBpZiAobV92ZWN0b3Jbal0gPT0gbmFtZSkKLSAgICAgICAgICAgICAgICBicmVhazsK
LSAgICAgICAgfQotICAgICAgICBpZiAoaiA9PSB0aGlzU2l6ZSkKKyAgICB1bnNpZ25lZCBvdGhl
clNpemUgPSBvdGhlci5tX3NpemU7CisgICAgdW5zaWduZWQgaSA9IDA7CisgICAgZG8geworICAg
ICAgICBpZiAoIWNvbnRhaW5zKG90aGVyW2ldKSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
LSAgICB9CisgICAgICAgICsraTsKKyAgICB9IHdoaWxlIChpIDwgb3RoZXJTaXplKTsKICAgICBy
ZXR1cm4gdHJ1ZTsKIH0KIAotdm9pZCBTcGFjZVNwbGl0U3RyaW5nRGF0YTo6YWRkKGNvbnN0IEF0
b21pY1N0cmluZyYgc3RyaW5nKQotewotICAgIEFTU0VSVChoYXNPbmVSZWYoKSk7Ci0gICAgQVNT
RVJUKCFjb250YWlucyhzdHJpbmcpKTsKLSAgICBtX3ZlY3Rvci5hcHBlbmQoc3RyaW5nKTsKLX0K
LQotdm9pZCBTcGFjZVNwbGl0U3RyaW5nRGF0YTo6cmVtb3ZlKHVuc2lnbmVkIGluZGV4KQotewot
ICAgIEFTU0VSVChoYXNPbmVSZWYoKSk7Ci0gICAgbV92ZWN0b3IucmVtb3ZlKGluZGV4KTsKLX0K
LQotdm9pZCBTcGFjZVNwbGl0U3RyaW5nOjphZGQoY29uc3QgQXRvbWljU3RyaW5nJiBzdHJpbmcp
Ci17Ci0gICAgLy8gRklYTUU6IGFkZCgpIGRvZXMgbm90IGFsbG93IGR1cGxpY2F0ZXMgYnV0IGNy
ZWF0ZVZlY3RvcigpIGRvZXMuCi0gICAgaWYgKGNvbnRhaW5zKHN0cmluZykpCi0gICAgICAgIHJl
dHVybjsKLSAgICBlbnN1cmVVbmlxdWUoKTsKLSAgICBpZiAobV9kYXRhKQotICAgICAgICBtX2Rh
dGEtPmFkZChzdHJpbmcpOwotfQotCi1ib29sIFNwYWNlU3BsaXRTdHJpbmc6OnJlbW92ZShjb25z
dCBBdG9taWNTdHJpbmcmIHN0cmluZykKK3N0cnVjdCBTcGFjZVNwbGl0U3RyaW5nRGF0YU1hcEtl
eVRyYWl0IDogcHVibGljIEhhc2hUcmFpdHM8QXRvbWljU3RyaW5nPgogewotICAgIGlmICghbV9k
YXRhKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgdW5zaWduZWQgaSA9IDA7Ci0gICAgYm9v
bCBjaGFuZ2VkID0gZmFsc2U7Ci0gICAgd2hpbGUgKGkgPCBtX2RhdGEtPnNpemUoKSkgewotICAg
ICAgICBpZiAoKCptX2RhdGEpW2ldID09IHN0cmluZykgewotICAgICAgICAgICAgaWYgKCFjaGFu
Z2VkKQotICAgICAgICAgICAgICAgIGVuc3VyZVVuaXF1ZSgpOwotICAgICAgICAgICAgbV9kYXRh
LT5yZW1vdmUoaSk7Ci0gICAgICAgICAgICBjaGFuZ2VkID0gdHJ1ZTsKLSAgICAgICAgICAgIGNv
bnRpbnVlOwotICAgICAgICB9Ci0gICAgICAgICsraTsKLSAgICB9Ci0gICAgcmV0dXJuIGNoYW5n
ZWQ7Ci19CisgICAgLy8gVGhlIG51bWJlciAyMDAgZm9yIHR5cGljYWxOdW1iZXJPZlNwYWNlU3Bs
aXRTdHJpbmcgd2FzIGJhc2VkIG9uIHRoZSB0eXBpY2FsIG51bWJlciBvZiB1bmlxdWUgY2xhc3Mg
bmFtZXMKKyAgICAvLyBvbiB0eXBpY2FsIHdlYnNpdGVzIG9uIEF1Z3VzdCAyMDEzLgorICAgIHN0
YXRpYyBjb25zdCB1bnNpZ25lZCB0eXBpY2FsTnVtYmVyT2ZTcGFjZVNwbGl0U3RyaW5nID0gMjAw
OworICAgIHN0YXRpYyBjb25zdCBpbnQgbWluaW11bVRhYmxlU2l6ZSA9IFdURjo6SGFzaFRhYmxl
Q2FwYWNpdHlGb3JTaXplPHR5cGljYWxOdW1iZXJPZlNwYWNlU3BsaXRTdHJpbmc+Ojp2YWx1ZTsK
K307CiAKLXR5cGVkZWYgSGFzaE1hcDxBdG9taWNTdHJpbmcsIFNwYWNlU3BsaXRTdHJpbmdEYXRh
Kj4gU3BhY2VTcGxpdFN0cmluZ0RhdGFNYXA7Cit0eXBlZGVmIEhhc2hNYXA8QXRvbWljU3RyaW5n
LCBTcGFjZVNwbGl0U3RyaW5nRGF0YSosIERlZmF1bHRIYXNoPEF0b21pY1N0cmluZz46Okhhc2gs
IFNwYWNlU3BsaXRTdHJpbmdEYXRhTWFwS2V5VHJhaXQ+IFNwYWNlU3BsaXRTdHJpbmdEYXRhTWFw
OwogCiBzdGF0aWMgU3BhY2VTcGxpdFN0cmluZ0RhdGFNYXAmIHNoYXJlZERhdGFNYXAoKQogewpA
QCAtMTc3LDkgKzEyMyw5IEBAIHZvaWQgU3BhY2VTcGxpdFN0cmluZzo6c2V0KGNvbnN0IEF0b21p
Y1MKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIFN0cmluZyBzdHJpbmcoaW5wdXRTdHJp
bmcuc3RyaW5nKCkpOworICAgIEF0b21pY1N0cmluZyBzdHJpbmcoaW5wdXRTdHJpbmcpOwogICAg
IGlmIChzaG91bGRGb2xkQ2FzZSAmJiBoYXNOb25BU0NJSU9yVXBwZXIoc3RyaW5nKSkKLSAgICAg
ICAgc3RyaW5nID0gc3RyaW5nLmZvbGRDYXNlKCk7CisgICAgICAgIHN0cmluZyA9IHN0cmluZy5z
dHJpbmcoKS5mb2xkQ2FzZSgpOwogCiAgICAgbV9kYXRhID0gU3BhY2VTcGxpdFN0cmluZ0RhdGE6
OmNyZWF0ZShzdHJpbmcpOwogfQpAQCAtMjIxLDQ4ICsxNjcsMTAyIEBAIGJvb2wgU3BhY2VTcGxp
dFN0cmluZzo6c3BhY2VTcGxpdFN0cmluZ0MKICAgICAgICAgc3RyaW5nID0gc3RyaW5nLmZvbGRD
YXNlKCk7CiAKICAgICBUb2tlbklzRXF1YWxUb0NTdHJpbmdUb2tlblByb2Nlc3NvciB0b2tlblBy
b2Nlc3Nvcih2YWx1ZSwgdmFsdWVMZW5ndGgpOwotICAgIHVuc2lnbmVkIGxlbmd0aCA9IHN0cmlu
Zy5sZW5ndGgoKTsKLSAgICBpZiAoc3RyaW5nLmlzOEJpdCgpKQotICAgICAgICB0b2tlbml6ZVNw
YWNlU3BsaXRTdHJpbmcodG9rZW5Qcm9jZXNzb3IsIHN0cmluZy5jaGFyYWN0ZXJzOCgpLCBsZW5n
dGgpOwotICAgIGVsc2UKLSAgICAgICAgdG9rZW5pemVTcGFjZVNwbGl0U3RyaW5nKHRva2VuUHJv
Y2Vzc29yLCBzdHJpbmcuY2hhcmFjdGVyczE2KCksIGxlbmd0aCk7CisgICAgdG9rZW5pemVTcGFj
ZVNwbGl0U3RyaW5nKHRva2VuUHJvY2Vzc29yLCBzdHJpbmcpOwogICAgIHJldHVybiB0b2tlblBy
b2Nlc3Nvci5yZWZlcmVuY2VTdHJpbmdXYXNGb3VuZCgpOwogfQogCi1TcGFjZVNwbGl0U3RyaW5n
RGF0YTo6flNwYWNlU3BsaXRTdHJpbmdEYXRhKCkKLXsKLSAgICBpZiAoIW1fa2V5U3RyaW5nLmlz
TnVsbCgpKQotICAgICAgICBzaGFyZWREYXRhTWFwKCkucmVtb3ZlKG1fa2V5U3RyaW5nKTsKLX0K
K2NsYXNzIFRva2VuQ291bnRlciB7CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoVG9rZW5Db3Vu
dGVyKTsKK3B1YmxpYzoKKyAgICBUb2tlbkNvdW50ZXIoKSA6IG1fdG9rZW5Db3VudCgwKSB7IH0K
IAotUGFzc1JlZlB0cjxTcGFjZVNwbGl0U3RyaW5nRGF0YT4gU3BhY2VTcGxpdFN0cmluZ0RhdGE6
OmNyZWF0ZShjb25zdCBBdG9taWNTdHJpbmcmIHN0cmluZykKLXsKLSAgICBTcGFjZVNwbGl0U3Ry
aW5nRGF0YSomIGRhdGEgPSBzaGFyZWREYXRhTWFwKCkuYWRkKHN0cmluZywgMCkuaXRlcmF0b3It
PnZhbHVlOwotICAgIGlmICghZGF0YSkgewotICAgICAgICBkYXRhID0gbmV3IFNwYWNlU3BsaXRT
dHJpbmdEYXRhKHN0cmluZyk7Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZihkYXRhKTsKKyAgICB0
ZW1wbGF0ZSA8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4KKyAgICBib29sIHByb2Nlc3NUb2tlbihj
b25zdCBDaGFyYWN0ZXJUeXBlKiwgdW5zaWduZWQpCisgICAgeworICAgICAgICArK21fdG9rZW5D
b3VudDsKKyAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQotICAgIHJldHVybiBkYXRhOwotfQog
Ci1QYXNzUmVmUHRyPFNwYWNlU3BsaXRTdHJpbmdEYXRhPiBTcGFjZVNwbGl0U3RyaW5nRGF0YTo6
Y3JlYXRlVW5pcXVlKGNvbnN0IFNwYWNlU3BsaXRTdHJpbmdEYXRhJiBvdGhlcikKLXsKLSAgICBy
ZXR1cm4gYWRvcHRSZWYobmV3IFNwYWNlU3BsaXRTdHJpbmdEYXRhKG90aGVyKSk7Ci19CisgICAg
dW5zaWduZWQgdG9rZW5Db3VudCgpIGNvbnN0IHsgcmV0dXJuIG1fdG9rZW5Db3VudDsgfQorCitw
cml2YXRlOgorICAgIHVuc2lnbmVkIG1fdG9rZW5Db3VudDsKK307CisKK2NsYXNzIFRva2VuQXRv
bWljU3RyaW5nSW5pdGlhbGl6ZXIgeworICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKFRva2VuQXRv
bWljU3RyaW5nSW5pdGlhbGl6ZXIpOworcHVibGljOgorICAgIFRva2VuQXRvbWljU3RyaW5nSW5p
dGlhbGl6ZXIoQXRvbWljU3RyaW5nKiBtZW1vcnkpIDogbV9tZW1vcnlCdWNrZXQobWVtb3J5KSB7
IH0KIAotU3BhY2VTcGxpdFN0cmluZ0RhdGE6OlNwYWNlU3BsaXRTdHJpbmdEYXRhKGNvbnN0IEF0
b21pY1N0cmluZyYgc3RyaW5nKQotICAgIDogbV9rZXlTdHJpbmcoc3RyaW5nKQorICAgIHRlbXBs
YXRlIDx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPgorICAgIGJvb2wgcHJvY2Vzc1Rva2VuKGNvbnN0
IENoYXJhY3RlclR5cGUqIGNoYXJhY3RlcnMsIHVuc2lnbmVkIGxlbmd0aCkKKyAgICB7CisgICAg
ICAgIG5ldyAoTm90TnVsbCwgbV9tZW1vcnlCdWNrZXQpIEF0b21pY1N0cmluZyhjaGFyYWN0ZXJz
LCBsZW5ndGgpOworICAgICAgICArK21fbWVtb3J5QnVja2V0OworICAgICAgICByZXR1cm4gdHJ1
ZTsKKyAgICB9CisKKyAgICBjb25zdCBBdG9taWNTdHJpbmcqIG5leHRNZW1vcnlCdWNrZXQoKSBj
b25zdCB7IHJldHVybiBtX21lbW9yeUJ1Y2tldDsgfQorcHJpdmF0ZToKKyAgICBBdG9taWNTdHJp
bmcqIG1fbWVtb3J5QnVja2V0OworfTsKKworUGFzc1JlZlB0cjxTcGFjZVNwbGl0U3RyaW5nRGF0
YT4gU3BhY2VTcGxpdFN0cmluZ0RhdGE6OmNyZWF0ZShjb25zdCBBdG9taWNTdHJpbmcmIGtleVN0
cmluZykKIHsKLSAgICBBU1NFUlQoIXN0cmluZy5pc051bGwoKSk7Ci0gICAgY3JlYXRlVmVjdG9y
KHN0cmluZyk7CisgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKKyAgICBBU1NFUlQoIWtleVN0
cmluZy5pc051bGwoKSk7CisKKyAgICBTcGFjZVNwbGl0U3RyaW5nRGF0YU1hcCYgc3BhY2VTcGxp
dFN0cmluZ0RhdGFDYWNoZSA9IHNoYXJlZERhdGFNYXAoKTsKKyAgICBTcGFjZVNwbGl0U3RyaW5n
RGF0YU1hcDo6aXRlcmF0b3IgaXRlcmF0b3IgPSBzcGFjZVNwbGl0U3RyaW5nRGF0YUNhY2hlLmZp
bmQoa2V5U3RyaW5nKTsKKyAgICBpZiAoaXRlcmF0b3IgIT0gc3BhY2VTcGxpdFN0cmluZ0RhdGFD
YWNoZS5lbmQoKSkKKyAgICAgICAgcmV0dXJuIGl0ZXJhdG9yLT52YWx1ZTsKKworICAgIC8vIE5v
dGhpbmcgaW4gdGhlIGNhY2hlPyBMZXQncyBjcmVhdGUgYSBuZXcgU3BhY2VTcGxpdFN0cmluZ0Rh
dGEgaWYgdGhlIGlucHV0IGhhcyBzb21ldGhpbmcgdXNlZnVsLgorICAgIC8vIDEpIFdlIGZpbmQg
dGhlIG51bWJlciBvZiBzdHJpbmdzIGluIHRoZSBpbnB1dCB0byBrbm93IGhvdyBtdWNoIHNpemUg
d2UgbmVlZCB0byBhbGxvY2F0ZS4KKyAgICBUb2tlbkNvdW50ZXIgdG9rZW5Db3VudGVyOworICAg
IHRva2VuaXplU3BhY2VTcGxpdFN0cmluZyh0b2tlbkNvdW50ZXIsIGtleVN0cmluZyk7CisgICAg
dW5zaWduZWQgdG9rZW5Db3VudCA9IHRva2VuQ291bnRlci50b2tlbkNvdW50KCk7CisKKyAgICBp
ZiAoIXRva2VuQ291bnQpCisgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgLy8gMikgV2Ug
YWxsb2NhdGUgZW5vdWdoIHNwYWNlIGZvciB0aGUgU3BhY2VTcGxpdFN0cmluZ0RhdGEgYW5kIGl0
cyB0b2tlbnMuCisgICAgUkVMRUFTRV9BU1NFUlQodG9rZW5Db3VudCA8IChzdGQ6Om51bWVyaWNf
bGltaXRzPHVuc2lnbmVkPjo6bWF4KCkgLSBzaXplb2YoU3BhY2VTcGxpdFN0cmluZ0RhdGEpKSAv
IHNpemVvZihBdG9taWNTdHJpbmcpKTsKKyAgICB1bnNpZ25lZCBzaXplVG9BbGxvY2F0ZSA9IHNp
emVvZihTcGFjZVNwbGl0U3RyaW5nRGF0YSkgKyB0b2tlbkNvdW50ICogc2l6ZW9mKEF0b21pY1N0
cmluZyk7CisgICAgU3BhY2VTcGxpdFN0cmluZ0RhdGEqIHNwYWNlU3BsaXRTdHJpbmdEYXRhID0g
c3RhdGljX2Nhc3Q8U3BhY2VTcGxpdFN0cmluZ0RhdGEqPihmYXN0TWFsbG9jKHNpemVUb0FsbG9j
YXRlKSk7CisKKyAgICAvLyAzKSBXZSBpbml0aWFsaXplIHRoZSBuZXcgb2JqZWN0IHdpdGggdGhl
IGlucHV0IGFuZCB0aGUgdG9rZW5zLgorICAgIG5ldyAoTm90TnVsbCwgc3BhY2VTcGxpdFN0cmlu
Z0RhdGEpIFNwYWNlU3BsaXRTdHJpbmdEYXRhKGtleVN0cmluZywgdG9rZW5Db3VudCk7CisgICAg
QXRvbWljU3RyaW5nKiB0b2tlbkFycmF5U3RhcnQgPSBzcGFjZVNwbGl0U3RyaW5nRGF0YS0+dG9r
ZW5BcnJheVN0YXJ0KCk7CisgICAgVG9rZW5BdG9taWNTdHJpbmdJbml0aWFsaXplciB0b2tlbklu
aXRpYWxpemVyKHRva2VuQXJyYXlTdGFydCk7CisgICAgdG9rZW5pemVTcGFjZVNwbGl0U3RyaW5n
KHRva2VuSW5pdGlhbGl6ZXIsIGtleVN0cmluZyk7CisgICAgQVNTRVJUKHRva2VuSW5pdGlhbGl6
ZXIubmV4dE1lbW9yeUJ1Y2tldCgpIC0gdG9rZW5BcnJheVN0YXJ0ID09IHRva2VuQ291bnQpOwor
ICAgIEFTU0VSVChyZWludGVycHJldF9jYXN0PGNvbnN0IGNoYXIqPih0b2tlbkluaXRpYWxpemVy
Lm5leHRNZW1vcnlCdWNrZXQoKSkgPT0gcmVpbnRlcnByZXRfY2FzdDxjb25zdCBjaGFyKj4oc3Bh
Y2VTcGxpdFN0cmluZ0RhdGEpICsgc2l6ZVRvQWxsb2NhdGUpOworCisgICAgc3BhY2VTcGxpdFN0
cmluZ0RhdGFDYWNoZS5hZGQoa2V5U3RyaW5nLCBzcGFjZVNwbGl0U3RyaW5nRGF0YSk7CisKKyAg
ICByZXR1cm4gYWRvcHRSZWYoc3BhY2VTcGxpdFN0cmluZ0RhdGEpOwogfQogCi1TcGFjZVNwbGl0
U3RyaW5nRGF0YTo6U3BhY2VTcGxpdFN0cmluZ0RhdGEoY29uc3QgU3BhY2VTcGxpdFN0cmluZ0Rh
dGEmIG90aGVyKQotICAgIDogUmVmQ291bnRlZDxTcGFjZVNwbGl0U3RyaW5nRGF0YT4oKQotICAg
ICwgbV92ZWN0b3Iob3RoZXIubV92ZWN0b3IpCisKK3ZvaWQgU3BhY2VTcGxpdFN0cmluZ0RhdGE6
OmRlc3Ryb3koU3BhY2VTcGxpdFN0cmluZ0RhdGEqIHNwYWNlU3BsaXRTdHJpbmcpCiB7Ci0gICAg
Ly8gTm90ZSB0aGF0IHdlIGRvbid0IGNvcHkgbV9rZXlTdHJpbmcgdG8gaW5kaWNhdGUgdG8gdGhl
IGRlc3RydWN0b3IgdGhhdCB0aGVyZSdzIG5vdGhpbmcKLSAgICAvLyB0byBiZSByZW1vdmVkIGZy
b20gdGhlIHNoYXJlZERhdGFNYXAoKS4KKyAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOworCisg
ICAgaWYgKCFzcGFjZVNwbGl0U3RyaW5nLT5tX2tleVN0cmluZy5pc051bGwoKSkKKyAgICAgICAg
c2hhcmVkRGF0YU1hcCgpLnJlbW92ZShzcGFjZVNwbGl0U3RyaW5nLT5tX2tleVN0cmluZyk7CisK
KyAgICB1bnNpZ25lZCBpID0gMDsKKyAgICB1bnNpZ25lZCBzaXplID0gc3BhY2VTcGxpdFN0cmlu
Zy0+c2l6ZSgpOworICAgIGNvbnN0IEF0b21pY1N0cmluZyogZGF0YSA9IHNwYWNlU3BsaXRTdHJp
bmctPnRva2VuQXJyYXlTdGFydCgpOworICAgIGRvIHsKKyAgICAgICAgZGF0YVtpXS5+QXRvbWlj
U3RyaW5nKCk7CisgICAgICAgICsraTsKKyAgICB9IHdoaWxlIChpIDwgc2l6ZSk7CisKKyAgICBz
cGFjZVNwbGl0U3RyaW5nLT5+U3BhY2VTcGxpdFN0cmluZ0RhdGEoKTsKKworICAgIGZhc3RGcmVl
KHNwYWNlU3BsaXRTdHJpbmcpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9kb20vU3BhY2VTcGxpdFN0cmluZy5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL2RvbS9TcGFjZVNwbGl0U3RyaW5nLmgJKHJldmlzaW9uIDE1NDcyMCkKKysrIFNv
dXJjZS9XZWJDb3JlL2RvbS9TcGFjZVNwbGl0U3RyaW5nLmgJKHdvcmtpbmcgY29weSkKQEAgLTEs
NSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA3LCAyMDA4LCAyMDEwLCAyMDExLCAy
MDEyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAw
NywgMjAwOCwgMjAxMCwgMjAxMSwgMjAxMiwgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCiAgKgogICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVk
aXN0cmlidXRlIGl0IGFuZC9vcgogICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUg
R05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTIxLDQ4ICsyMSw3NiBAQAogI2lmbmRlZiBT
cGFjZVNwbGl0U3RyaW5nX2gKICNkZWZpbmUgU3BhY2VTcGxpdFN0cmluZ19oCiAKLSNpbmNsdWRl
IDx3dGYvUmVmQ291bnRlZC5oPgotI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKyNpbmNsdWRlIDx3
dGYvQXNzZXJ0aW9ucy5oPgorI2luY2x1ZGUgPHd0Zi9NYWluVGhyZWFkLmg+CisjaW5jbHVkZSA8
d3RmL05vbmNvcHlhYmxlLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvQXRvbWljU3RyaW5nLmg+CiAK
IG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotY2xhc3MgU3BhY2VTcGxpdFN0cmluZ0RhdGEgOiBwdWJs
aWMgUmVmQ291bnRlZDxTcGFjZVNwbGl0U3RyaW5nRGF0YT4geworY2xhc3MgU3BhY2VTcGxpdFN0
cmluZ0RhdGEgeworICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKFNwYWNlU3BsaXRTdHJpbmdEYXRh
KTsKKyAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKIHB1YmxpYzoKICAgICBzdGF0aWMgUGFz
c1JlZlB0cjxTcGFjZVNwbGl0U3RyaW5nRGF0YT4gY3JlYXRlKGNvbnN0IEF0b21pY1N0cmluZyYp
OwotICAgIHN0YXRpYyBQYXNzUmVmUHRyPFNwYWNlU3BsaXRTdHJpbmdEYXRhPiBjcmVhdGVVbmlx
dWUoY29uc3QgU3BhY2VTcGxpdFN0cmluZ0RhdGEmKTsKLQotICAgIH5TcGFjZVNwbGl0U3RyaW5n
RGF0YSgpOwogCiAgICAgYm9vbCBjb250YWlucyhjb25zdCBBdG9taWNTdHJpbmcmIHN0cmluZykK
ICAgICB7Ci0gICAgICAgIHNpemVfdCBzaXplID0gbV92ZWN0b3Iuc2l6ZSgpOwotICAgICAgICBm
b3IgKHNpemVfdCBpID0gMDsgaSA8IHNpemU7ICsraSkgewotICAgICAgICAgICAgaWYgKG1fdmVj
dG9yW2ldID09IHN0cmluZykKKyAgICAgICAgY29uc3QgQXRvbWljU3RyaW5nKiBkYXRhID0gdG9r
ZW5BcnJheVN0YXJ0KCk7CisgICAgICAgIHVuc2lnbmVkIGkgPSAwOworICAgICAgICBkbyB7Cisg
ICAgICAgICAgICBpZiAoZGF0YVtpXSA9PSBzdHJpbmcpCiAgICAgICAgICAgICAgICAgcmV0dXJu
IHRydWU7Ci0gICAgICAgIH0KKyAgICAgICAgICAgICsraTsKKyAgICAgICAgfSB3aGlsZSAoaSA8
IG1fc2l6ZSk7CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAKICAgICBib29sIGNvbnRh
aW5zQWxsKFNwYWNlU3BsaXRTdHJpbmdEYXRhJik7CiAKLSAgICB2b2lkIGFkZChjb25zdCBBdG9t
aWNTdHJpbmcmKTsKLSAgICB2b2lkIHJlbW92ZSh1bnNpZ25lZCBpbmRleCk7CisgICAgdW5zaWdu
ZWQgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fc2l6ZTsgfQorICAgIGNvbnN0IEF0b21pY1N0cmlu
ZyYgb3BlcmF0b3JbXShzaXplX3QgaSkKKyAgICB7CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKGkg
PCBtX3NpemUpOworICAgICAgICByZXR1cm4gdG9rZW5BcnJheVN0YXJ0KClbaV07CisgICAgfQog
Ci0gICAgYm9vbCBpc1VuaXF1ZSgpIGNvbnN0IHsgcmV0dXJuIG1fa2V5U3RyaW5nLmlzTnVsbCgp
OyB9IAotICAgIHNpemVfdCBzaXplKCkgY29uc3QgeyByZXR1cm4gbV92ZWN0b3Iuc2l6ZSgpOyB9
Ci0gICAgY29uc3QgQXRvbWljU3RyaW5nJiBvcGVyYXRvcltdKHNpemVfdCBpKSB7IEFTU0VSVF9X
SVRIX1NFQ1VSSVRZX0lNUExJQ0FUSU9OKGkgPCBzaXplKCkpOyByZXR1cm4gbV92ZWN0b3JbaV07
IH0KKyAgICBpbmxpbmUgdm9pZCByZWYoKQorICAgIHsKKyAgICAgICAgQVNTRVJUKGlzTWFpblRo
cmVhZCgpKTsKKyAgICAgICAgQVNTRVJUKG1fcmVmQ291bnQpOworICAgICAgICArK21fcmVmQ291
bnQ7CisgICAgfQorCisgICAgaW5saW5lIHZvaWQgZGVyZWYoKQorICAgIHsKKyAgICAgICAgQVNT
RVJUKGlzTWFpblRocmVhZCgpKTsKKyAgICAgICAgdW5zaWduZWQgdGVtcFJlZkNvdW50ID0gbV9y
ZWZDb3VudCAtIDE7CisgICAgICAgIGlmICghdGVtcFJlZkNvdW50KSB7CisgICAgICAgICAgICBT
cGFjZVNwbGl0U3RyaW5nRGF0YTo6ZGVzdHJveSh0aGlzKTsKKyAgICAgICAgICAgIHJldHVybjsK
KyAgICAgICAgfQorICAgICAgICBtX3JlZkNvdW50ID0gdGVtcFJlZkNvdW50OworICAgIH0KIAog
cHJpdmF0ZToKLSAgICBleHBsaWNpdCBTcGFjZVNwbGl0U3RyaW5nRGF0YShjb25zdCBBdG9taWNT
dHJpbmcmKTsKLSAgICBleHBsaWNpdCBTcGFjZVNwbGl0U3RyaW5nRGF0YShjb25zdCBTcGFjZVNw
bGl0U3RyaW5nRGF0YSYpOworICAgIFNwYWNlU3BsaXRTdHJpbmdEYXRhKGNvbnN0IEF0b21pY1N0
cmluZyYgc3RyaW5nLCB1bnNpZ25lZCBzaXplKQorICAgICAgICA6IG1fa2V5U3RyaW5nKHN0cmlu
ZykKKyAgICAgICAgLCBtX3JlZkNvdW50KDEpCisgICAgICAgICwgbV9zaXplKHNpemUpCisgICAg
eworICAgICAgICBBU1NFUlQoIXN0cmluZy5pc0VtcHR5KCkpOworICAgICAgICBBU1NFUlRfV0lU
SF9NRVNTQUdFKG1fc2l6ZSwgIlNwYWNlU3BsaXRTdHJpbmdEYXRhIHNob3VsZCBuZXZlciBiZSBl
bXB0eSBieSBkZWZpbml0aW9uLiBUaGVyZSBpcyBubyBkaWZmZXJlbmNlIGJldHdlZW4gZW1wdHkg
YW5kIG51bGwuIik7CisgICAgfQorCisgICAgaW5saW5lIH5TcGFjZVNwbGl0U3RyaW5nRGF0YSgp
IHsgfQorICAgIHN0YXRpYyB2b2lkIGRlc3Ryb3koU3BhY2VTcGxpdFN0cmluZ0RhdGEqKTsKIAot
ICAgIHZvaWQgY3JlYXRlVmVjdG9yKGNvbnN0IFN0cmluZyYpOwotICAgIHRlbXBsYXRlIDx0eXBl
bmFtZSBDaGFyYWN0ZXJUeXBlPgotICAgIGlubGluZSB2b2lkIGNyZWF0ZVZlY3Rvcihjb25zdCBD
aGFyYWN0ZXJUeXBlKiwgdW5zaWduZWQpOworICAgIEF0b21pY1N0cmluZyogdG9rZW5BcnJheVN0
YXJ0KCkgeyByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxBdG9taWNTdHJpbmcqPih0aGlzICsgMSk7
IH0KIAogICAgIEF0b21pY1N0cmluZyBtX2tleVN0cmluZzsKLSAgICBWZWN0b3I8QXRvbWljU3Ry
aW5nLCA0PiBtX3ZlY3RvcjsKKyAgICB1bnNpZ25lZCBtX3JlZkNvdW50OworICAgIHVuc2lnbmVk
IG1fc2l6ZTsKIH07CiAKIGNsYXNzIFNwYWNlU3BsaXRTdHJpbmcgewpAQCAtNzcsMTIgKzEwNSwx
NCBAQCBwdWJsaWM6CiAKICAgICBib29sIGNvbnRhaW5zKGNvbnN0IEF0b21pY1N0cmluZyYgc3Ry
aW5nKSBjb25zdCB7IHJldHVybiBtX2RhdGEgJiYgbV9kYXRhLT5jb250YWlucyhzdHJpbmcpOyB9
CiAgICAgYm9vbCBjb250YWluc0FsbChjb25zdCBTcGFjZVNwbGl0U3RyaW5nJiBuYW1lcykgY29u
c3QgeyByZXR1cm4gIW5hbWVzLm1fZGF0YSB8fCAobV9kYXRhICYmIG1fZGF0YS0+Y29udGFpbnNB
bGwoKm5hbWVzLm1fZGF0YSkpOyB9Ci0gICAgdm9pZCBhZGQoY29uc3QgQXRvbWljU3RyaW5nJik7
Ci0gICAgYm9vbCByZW1vdmUoY29uc3QgQXRvbWljU3RyaW5nJik7CiAKICAgICBzaXplX3Qgc2l6
ZSgpIGNvbnN0IHsgcmV0dXJuIG1fZGF0YSA/IG1fZGF0YS0+c2l6ZSgpIDogMDsgfQotICAgIGJv
b2wgaXNOdWxsKCkgY29uc3QgeyByZXR1cm4gIW1fZGF0YTsgfQotICAgIGNvbnN0IEF0b21pY1N0
cmluZyYgb3BlcmF0b3JbXShzaXplX3QgaSkgY29uc3QgeyBBU1NFUlRfV0lUSF9TRUNVUklUWV9J
TVBMSUNBVElPTihpIDwgc2l6ZSgpKTsgcmV0dXJuICgqbV9kYXRhKVtpXTsgfQorICAgIGJvb2wg
aXNFbXB0eSgpIGNvbnN0IHsgcmV0dXJuICFtX2RhdGE7IH0KKyAgICBjb25zdCBBdG9taWNTdHJp
bmcmIG9wZXJhdG9yW10oc2l6ZV90IGkpIGNvbnN0CisgICAgeworICAgICAgICBBU1NFUlRfV0lU
SF9TRUNVUklUWV9JTVBMSUNBVElPTihtX2RhdGEpOworICAgICAgICByZXR1cm4gKCptX2RhdGEp
W2ldOworICAgIH0KIAogICAgIHN0YXRpYyBib29sIHNwYWNlU3BsaXRTdHJpbmdDb250YWluc1Zh
bHVlKGNvbnN0IFN0cmluZyYgc3BhY2VTcGxpdFN0cmluZywgY29uc3QgY2hhciogdmFsdWUsIHVu
c2lnbmVkIGxlbmd0aCwgYm9vbCBzaG91bGRGb2xkQ2FzZSk7CiAgICAgdGVtcGxhdGU8c2l6ZV90
IGxlbmd0aD4KQEAgLTkyLDExICsxMjIsNiBAQCBwdWJsaWM6CiAgICAgfQogCiBwcml2YXRlOgot
ICAgIHZvaWQgZW5zdXJlVW5pcXVlKCkKLSAgICB7Ci0gICAgICAgIGlmIChtX2RhdGEgJiYgIW1f
ZGF0YS0+aXNVbmlxdWUoKSkKLSAgICAgICAgICAgIG1fZGF0YSA9IFNwYWNlU3BsaXRTdHJpbmdE
YXRhOjpjcmVhdGVVbmlxdWUoKm1fZGF0YSk7Ci0gICAgfQogCiAgICAgUmVmUHRyPFNwYWNlU3Bs
aXRTdHJpbmdEYXRhPiBtX2RhdGE7CiB9OwpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9DbGFz
c0xpc3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvQ2xhc3NMaXN0LmNw
cAkocmV2aXNpb24gMTU0NzIwKQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9DbGFzc0xpc3QuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC04Myw3ICs4Myw3IEBAIGNvbnN0IFNwYWNlU3BsaXRTdHJpbmcm
IENsYXNzTGlzdDo6Y2xhc3MKIHsKICAgICBBU1NFUlQobV9lbGVtZW50LT5oYXNDbGFzcygpKTsK
ICAgICBpZiAobV9lbGVtZW50LT5kb2N1bWVudCgpLT5pblF1aXJrc01vZGUoKSkgewotICAgICAg
ICBpZiAoIW1fY2xhc3NOYW1lc0ZvclF1aXJrc01vZGUuc2l6ZSgpKQorICAgICAgICBpZiAobV9j
bGFzc05hbWVzRm9yUXVpcmtzTW9kZS5pc0VtcHR5KCkpCiAgICAgICAgICAgICBtX2NsYXNzTmFt
ZXNGb3JRdWlya3NNb2RlLnNldCh2YWx1ZSgpLCBmYWxzZSk7CiAgICAgICAgIHJldHVybiBtX2Ns
YXNzTmFtZXNGb3JRdWlya3NNb2RlOwogICAgIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2Uv
RXZlbnRIYW5kbGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdlL0V2ZW50
SGFuZGxlci5jcHAJKHJldmlzaW9uIDE1NDcyMCkKKysrIFNvdXJjZS9XZWJDb3JlL3BhZ2UvRXZl
bnRIYW5kbGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjA3NCw3ICsyMDc0LDcgQEAgc3RhdGlj
IGJvb2wgZmluZERyb3Bab25lKE5vZGUqIHRhcmdldCwgQwogICAgICAgICBkcm9wWm9uZVN0ci5t
YWtlTG93ZXIoKTsKICAgICAgICAgCiAgICAgICAgIFNwYWNlU3BsaXRTdHJpbmcga2V5d29yZHMo
ZHJvcFpvbmVTdHIsIGZhbHNlKTsKLSAgICAgICAgaWYgKGtleXdvcmRzLmlzTnVsbCgpKQorICAg
ICAgICBpZiAoa2V5d29yZHMuaXNFbXB0eSgpKQogICAgICAgICAgICAgY29udGludWU7CiAgICAg
ICAgIAogICAgICAgICBEcmFnT3BlcmF0aW9uIGRyYWdPcGVyYXRpb24gPSBEcmFnT3BlcmF0aW9u
Tm9uZTsK
</data>
<flag name="review"
          id="231894"
          type_id="1"
          status="+"
          setter="rniwa"
    />
          </attachment>
      

    </bug>

</bugzilla>