<?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>75010</bug_id>
          
          <creation_ts>2011-12-21 08:38:29 -0800</creation_ts>
          <short_desc>[Qt] Avoid string operations in mobile theme&apos;s caching mechanism</short_desc>
          <delta_ts>2012-03-02 07:37:52 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Pierre Rossi">pierre.rossi</reporter>
          <assigned_to name="Pierre Rossi">pierre.rossi</assigned_to>
          <cc>hausmann</cc>
    
    <cc>kenneth</cc>
    
    <cc>menard</cc>
    
    <cc>ossy</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>525273</commentid>
    <comment_count>0</comment_count>
    <who name="Pierre Rossi">pierre.rossi</who>
    <bug_when>2011-12-21 08:38:29 -0800</bug_when>
    <thetext>[Qt] Avoid string operations in mobile theme&apos;s caching mechanism</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>525274</commentid>
    <comment_count>1</comment_count>
      <attachid>120181</attachid>
    <who name="Pierre Rossi">pierre.rossi</who>
    <bug_when>2011-12-21 08:49:11 -0800</bug_when>
    <thetext>Created attachment 120181
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>525277</commentid>
    <comment_count>2</comment_count>
      <attachid>120181</attachid>
    <who name="Kenneth Rohde Christiansen">kenneth</who>
    <bug_when>2011-12-21 09:02:47 -0800</bug_when>
    <thetext>Comment on attachment 120181
Patch

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

We talked on irc... so here are only a few style comments

&gt; Source/WebCore/platform/qt/RenderThemeQtMobile.cpp:175
&gt; +void StylePainterMobile::insertInCache(const KeyIdentifier&amp; keyId, const QPixmap&amp; pixmap)

into?

&gt; Source/WebCore/platform/qt/RenderThemeQtMobile.cpp:468
&gt; +    id.width =imageSize.width();

missing space

&gt; Source/WebCore/platform/qt/RenderThemeQtMobile.h:96
&gt; +        , trait1(false)
&gt; +        , trait2(false)

why not just 0 :-)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>528568</commentid>
    <comment_count>3</comment_count>
      <attachid>120181</attachid>
    <who name="Alexis Menard (darktears)">menard</who>
    <bug_when>2012-01-02 12:51:07 -0800</bug_when>
    <thetext>Comment on attachment 120181
Patch

I like it. It is assured to be faster than string manipulation.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>529122</commentid>
    <comment_count>4</comment_count>
      <attachid>121011</attachid>
    <who name="Pierre Rossi">pierre.rossi</who>
    <bug_when>2012-01-03 15:53:46 -0800</bug_when>
    <thetext>Created attachment 121011
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>529395</commentid>
    <comment_count>5</comment_count>
      <attachid>121011</attachid>
    <who name="Simon Hausmann">hausmann</who>
    <bug_when>2012-01-04 00:49:48 -0800</bug_when>
    <thetext>Comment on attachment 121011
Patch

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

&gt; Source/WebCore/platform/qt/RenderThemeQtMobile.cpp:175
&gt; +    static CacheKey emptyKey;
&gt; +    CacheKey key = cacheKeys.value(keyId, emptyKey);
&gt; +    if (key == emptyKey)
&gt; +        return false;
&gt; +    const bool ret = QPixmapCache::find(key, result);
&gt; +    if (!ret)
&gt; +        cacheKeys.remove(keyId);
&gt; +    return ret;

I would prefer something along these lines:

QHash&lt;KeyIdentifier, CacheKey&gt;::Iterator it = cacheKeys.find(keyId);
if (it == cacheKeys.end())
    return false;

bool ret = QPixmapCache::find(*it, result);
if (!ret)
    cacheKeys.erase(it);

instead of the empty key &quot;hack&quot;.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>529466</commentid>
    <comment_count>6</comment_count>
      <attachid>121100</attachid>
    <who name="Pierre Rossi">pierre.rossi</who>
    <bug_when>2012-01-04 04:42:48 -0800</bug_when>
    <thetext>Created attachment 121100
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>530320</commentid>
    <comment_count>7</comment_count>
      <attachid>121100</attachid>
    <who name="Kenneth Rohde Christiansen">kenneth</who>
    <bug_when>2012-01-05 08:45:01 -0800</bug_when>
    <thetext>Comment on attachment 121100
Patch

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

&gt; Source/WebCore/platform/qt/RenderThemeQtMobile.cpp:180
&gt; +    const int size = pixmap.width() * pixmap.height() * pixmap.depth() / 8192;

8192 seems magical.. comment?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>532182</commentid>
    <comment_count>8</comment_count>
    <who name="Pierre Rossi">pierre.rossi</who>
    <bug_when>2012-01-09 07:14:57 -0800</bug_when>
    <thetext>(In reply to comment #7)
&gt; (From update of attachment 121100 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=121100&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/platform/qt/RenderThemeQtMobile.cpp:180
&gt; &gt; +    const int size = pixmap.width() * pixmap.height() * pixmap.depth() / 8192;
&gt; 
&gt; 8192 seems magical.. comment?

It&apos;s just to convert from bits to kilobytes. Does that really call for another comment ?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>534715</commentid>
    <comment_count>9</comment_count>
      <attachid>122205</attachid>
    <who name="Pierre Rossi">pierre.rossi</who>
    <bug_when>2012-01-12 03:31:45 -0800</bug_when>
    <thetext>Created attachment 122205
Patch

Made the KB conversion  more explicit (hopefully).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>534866</commentid>
    <comment_count>10</comment_count>
      <attachid>122205</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-01-12 08:33:29 -0800</bug_when>
    <thetext>Comment on attachment 122205
Patch

Clearing flags on attachment: 122205

Committed r104828: &lt;http://trac.webkit.org/changeset/104828&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>534867</commentid>
    <comment_count>11</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-01-12 08:33:35 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>534874</commentid>
    <comment_count>12</comment_count>
      <attachid>122205</attachid>
    <who name="Csaba Osztrogonác">ossy</who>
    <bug_when>2012-01-12 08:43:09 -0800</bug_when>
    <thetext>Comment on attachment 122205
Patch

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

&gt; Source/WebCore/platform/qt/RenderThemeQtMobile.cpp:341
&gt; +        ASSERT(innerSize &gt; padding.toSize());
&gt; +        const QSizeF innerSize = size - padding;

These lines should be changed. :)
That&apos;s why it broke debug build. Fix landed in http://trac.webkit.org/changeset/104830</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>534881</commentid>
    <comment_count>13</comment_count>
    <who name="Csaba Osztrogonác">ossy</who>
    <bug_when>2012-01-12 08:50:13 -0800</bug_when>
    <thetext>Build is still broken. :-/

../../../../Source/WebCore/platform/qt/RenderThemeQtMobile.cpp: In member function ‘QPixmap WebCore::StylePainterMobile::findComboButton(const QSize&amp;, bool, bool) const’:
../../../../Source/WebCore/platform/qt/RenderThemeQtMobile.cpp:341: error: no match for ‘operator&gt;’ in ‘innerSize &gt; padding.QSizeF::toSize()’
/usr/local/Trolltech/Qt-4.8.0/include/QtCore/qchar.h:393: note: candidates are: bool operator&gt;(QChar, QChar)
/usr/local/Trolltech/Qt-4.8.0/include/QtCore/qbytearray.h:551: note:                 bool operator&gt;(const QByteArray&amp;, const QByteArray&amp;)
/usr/local/Trolltech/Qt-4.8.0/include/QtCore/qbytearray.h:553: note:                 bool operator&gt;(const QByteArray&amp;, const char*)
/usr/local/Trolltech/Qt-4.8.0/include/QtCore/qbytearray.h:555: note:                 bool operator&gt;(const char*, const QByteArray&amp;)
/usr/local/Trolltech/Qt-4.8.0/include/QtCore/qstring.h:942: note:                 bool operator&gt;(const char*, const QString&amp;)
/usr/local/Trolltech/Qt-4.8.0/include/QtCore/qstring.h:955: note:                 bool operator&gt;(const char*, const QLatin1String&amp;)
/usr/local/Trolltech/Qt-4.8.0/include/QtCore/qstring.h:970: note:                 bool operator&gt;(const QLatin1String&amp;, const QLatin1String&amp;)
/usr/local/Trolltech/Qt-4.8.0/include/QtCore/qstring.h:1221: note:                 bool operator&gt;(const QStringRef&amp;, const QStringRef&amp;)

Guys, could you fix it?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>569645</commentid>
    <comment_count>14</comment_count>
    <who name="Pierre Rossi">pierre.rossi</who>
    <bug_when>2012-03-02 07:37:52 -0800</bug_when>
    <thetext>I Should have closed that when landing r104834.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>120181</attachid>
            <date>2011-12-21 08:49:11 -0800</date>
            <delta_ts>2012-01-03 15:53:38 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-75010-20111221174908.patch</filename>
            <type>text/plain</type>
            <size>14762</size>
            <attacher name="Pierre Rossi">pierre.rossi</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTAzNDA5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMWMxOTIxZDU2ZjRhNjJi
NGE0OTQzMTgzZGVmYmJmYWE3M2ZjMTc5MC4uMjE1NjJjZjQyOWJlZjQ3MzMwMDQ2NmM4Y2Q4MTBl
ZGFjN2FiYjQ0ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDMzIEBACisyMDExLTEyLTIxICBQaWVy
cmUgUm9zc2kgIDxwaWVycmUucm9zc2lAZ21haWwuY29tPgorCisgICAgICAgIFtRdF0gQXZvaWQg
c3RyaW5nIG9wZXJhdGlvbnMgaW4gbW9iaWxlIHRoZW1lJ3MgY2FjaGluZyBtZWNoYW5pc20KKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTc1MDEwCisKKyAg
ICAgICAgVGhlIHN0cmluZyBvcGVyYXRpb25zIGNvbnN0YW50bHkgcGVyZm9ybWVkIGluIHRoZSBt
b2JpbGUgdGhlbWUKKyAgICAgICAgdG8gZmV0Y2ggb3IgcHV0IGNvbnRyb2xzIGluIHRoZSBwaXht
YXAgY2FjaGUgY2FuIGJlIHByZXR0eSBleHBlbnNpdmUuCisgICAgICAgIFRoZSBuZXcgbWVjaGFu
aXNtIGhhcm5lc3NlcyB0aGUgUVBpeG1hcENhY2hlOjpLZXkgQVBJIGluc3RlYWQuCisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgTm8gbmV3IHRlc3RzLCBp
bnRlcm5hbCByZWZhY3RvcmluZy4KKworICAgICAgICAqIHBsYXRmb3JtL3F0L1JlbmRlclRoZW1l
UXRNb2JpbGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6cUhhc2gpOgorICAgICAgICAoV2ViQ29y
ZTo6U3R5bGVQYWludGVyTW9iaWxlOjpmaW5kQ2FjaGVkQ29udHJvbCk6CisgICAgICAgIChXZWJD
b3JlOjpTdHlsZVBhaW50ZXJNb2JpbGU6Omluc2VydEluQ2FjaGUpOgorICAgICAgICAoV2ViQ29y
ZTo6U3R5bGVQYWludGVyTW9iaWxlOjpmaW5kQ2hlY2tCb3gpOgorICAgICAgICAoV2ViQ29yZTo6
U3R5bGVQYWludGVyTW9iaWxlOjpkcmF3UmFkaW8pOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVQ
YWludGVyTW9iaWxlOjpmaW5kUmFkaW8pOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVQYWludGVy
TW9iaWxlOjpmaW5kQ29tYm9CdXR0b24pOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVQYWludGVy
TW9iaWxlOjpmaW5kTGluZUVkaXQpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVQYWludGVyTW9i
aWxlOjpmaW5kUHVzaEJ1dHRvbik6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVBhaW50ZXJNb2Jp
bGU6OmRyYXdQcm9ncmVzcyk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVBhaW50ZXJNb2JpbGU6
OmRyYXdTbGlkZXJUaHVtYik6CisgICAgICAgICogcGxhdGZvcm0vcXQvUmVuZGVyVGhlbWVRdE1v
YmlsZS5oOgorICAgICAgICAoV2ViQ29yZTo6S2V5SWRlbnRpZmllcjo6S2V5SWRlbnRpZmllcik6
CisgICAgICAgIChXZWJDb3JlOjpLZXlJZGVudGlmaWVyOjpvcGVyYXRvcj09KToKKyAgICAgICAg
KFdlYkNvcmU6OlN0eWxlUGFpbnRlck1vYmlsZTo6Y2FjaGVLZXlzKToKKwogMjAxMS0xMi0xMiAg
UGF2ZWwgUG9kaXZpbG92ICA8cG9kaXZpbG92QGNocm9taXVtLm9yZz4KIAogICAgICAgICBXZWIg
SW5zcGVjdG9yOiBmaXggc291cmNlIG1hcCB1cmwgcmVzb2x2aW5nLgpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vcXQvUmVuZGVyVGhlbWVRdE1vYmlsZS5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9xdC9SZW5kZXJUaGVtZVF0TW9iaWxlLmNwcAppbmRleCBjYTQ3Y2Y5
M2RhMDRjMzk1OGRjMWI0YzkyNDM3Yzc2NDNjYmQwZGFjLi4xNjk1YTUzM2Q4MjRkNGExMzM3NzNh
YjAxYmY5MTg5NWIwMDk2NmE0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9x
dC9SZW5kZXJUaGVtZVF0TW9iaWxlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9x
dC9SZW5kZXJUaGVtZVF0TW9iaWxlLmNwcApAQCAtODAsNiArODAsMTYgQEAgc3RhdGljIGNvbnN0
IFFDb2xvciBoaWdobGlnaHRDb2xvcigxNiwgMTI4LCAyMjEpOwogc3RhdGljIGNvbnN0IFFDb2xv
ciBidXR0b25HcmFkaWVudEJvdHRvbSgyNDUsIDI0NSwgMjQ1KTsKIHN0YXRpYyBjb25zdCBRQ29s
b3Igc2hhZG93Q29sb3IoODAsIDgwLCA4MCwgMTYwKTsKIAordWludCBxSGFzaChjb25zdCBLZXlJ
ZGVudGlmaWVyJiBpZCkKK3sKKyAgICBjb25zdCBxdWludDMyIHZhbHVlID0gaWQudHJhaXQxICsg
KGlkLnRyYWl0MiA8PCAxKSArICh1aW50KGlkLnR5cGUpIDw8IDIpICsgKGlkLmhlaWdodCA8PCA1
KSArIChpZC53aWR0aCA8PCAxNCkgKyAoaWQudHJhaXQzIDw8IDI1KTsKKyAgICBjb25zdCB1bnNp
Z25lZCBjaGFyKiBwID0gcmVpbnRlcnByZXRfY2FzdDxjb25zdCB1bnNpZ25lZCBjaGFyKj4oJnZh
bHVlKTsKKyAgICB1aW50IGhhc2ggPSAwOworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgNDsgKytp
KQorICAgICAgICBoYXNoIF49IChoYXNoIDw8IDUpICsgKGhhc2ggPj4gMikgKyBwW2ldOworICAg
IHJldHVybiBoYXNoOworfQorCiBzdGF0aWMgdm9pZCBkcmF3Q29udHJvbEJhY2tncm91bmQoUVBh
aW50ZXIqIHBhaW50ZXIsIGNvbnN0IFFQZW4mIHBlbiwgY29uc3QgUVJlY3QmIHJlY3QsIGNvbnN0
IFFCcnVzaCYgYnJ1c2gpCiB7CiAgICAgUVBlbiBvbGRQZW4gPSBwYWludGVyLT5wZW4oKTsKQEAg
LTE1MCw2ICsxNjAsMjMgQEAgU3R5bGVQYWludGVyTW9iaWxlOjp+U3R5bGVQYWludGVyTW9iaWxl
KCkKICAgICBwYWludGVyLT5zZXRSZW5kZXJIaW50cyhRUGFpbnRlcjo6U21vb3RoUGl4bWFwVHJh
bnNmb3JtLCBtX3ByZXZpb3VzU21vb3RoUGl4bWFwVHJhbnNmb3JtKTsKIH0KIAorYm9vbCBTdHls
ZVBhaW50ZXJNb2JpbGU6OmZpbmRDYWNoZWRDb250cm9sKGNvbnN0IEtleUlkZW50aWZpZXImIGtl
eUlkLCBRUGl4bWFwKiByZXN1bHQpCit7CisgICAgc3RhdGljIENhY2hlS2V5IGVtcHR5S2V5Owor
ICAgIENhY2hlS2V5IGtleSA9IGNhY2hlS2V5cygpLnZhbHVlKGtleUlkLCBlbXB0eUtleSk7Cisg
ICAgaWYgKGtleSA9PSBlbXB0eUtleSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGNvbnN0
IGJvb2wgcmV0ID0gUVBpeG1hcENhY2hlOjpmaW5kKGtleSwgcmVzdWx0KTsKKyAgICBpZiAoIXJl
dCkKKyAgICAgICAgY2FjaGVLZXlzKCkucmVtb3ZlKGtleUlkKTsKKyAgICByZXR1cm4gcmV0Owor
fQorCit2b2lkIFN0eWxlUGFpbnRlck1vYmlsZTo6aW5zZXJ0SW5DYWNoZShjb25zdCBLZXlJZGVu
dGlmaWVyJiBrZXlJZCwgY29uc3QgUVBpeG1hcCYgcGl4bWFwKQoreworICAgIGNhY2hlS2V5cygp
Lmluc2VydChrZXlJZCwgUVBpeG1hcENhY2hlOjppbnNlcnQocGl4bWFwKSk7Cit9CisKIHZvaWQg
U3R5bGVQYWludGVyTW9iaWxlOjpkcmF3Q2hlY2thYmxlQmFja2dyb3VuZChRUGFpbnRlciogcGFp
bnRlciwgY29uc3QgUVJlY3QmIHJlY3QsIGJvb2wgY2hlY2tlZCwgYm9vbCBlbmFibGVkKSBjb25z
dAogewogICAgIFFCcnVzaCBicnVzaDsKQEAgLTE5NiwxMCArMjIzLDEyIEBAIFFQaXhtYXAgU3R5
bGVQYWludGVyTW9iaWxlOjpmaW5kQ2hlY2tCb3goY29uc3QgUVNpemUmIHNpemUsIGJvb2wgY2hl
Y2tlZCwgYm9vbCBlCiB7CiAgICAgQVNTRVJUKHNpemUud2lkdGgoKSA9PSBzaXplLmhlaWdodCgp
KTsKICAgICBRUGl4bWFwIHJlc3VsdDsKLSAgICBzdGF0aWMgY29uc3QgUVN0cmluZyBwcmVmaXgg
PSBRTGF0aW4xU3RyaW5nKCIkcXQtd2Via2l0LW1vYmlsZS10aGVtZS1jaGVja2JveC0iKTsKLSAg
ICBRU3RyaW5nIGtleSA9IHByZWZpeCArIFFTdHJpbmc6Om51bWJlcihzaXplLndpZHRoKCkpICsg
UUxhdGluMVN0cmluZygiLSIpICsgKGVuYWJsZWQgPyBRTGF0aW4xU3RyaW5nKCJvbiIpIDogUUxh
dGluMVN0cmluZygib2ZmIikpCi0gICAgICAgICAgICAgICAgICArIChjaGVja2VkID8gUUxhdGlu
MVN0cmluZygiLWNoZWNrZWQiKSA6IFFTdHJpbmcoKSk7Ci0gICAgaWYgKCFRUGl4bWFwQ2FjaGU6
OmZpbmQoa2V5LCByZXN1bHQpKSB7CisgICAgS2V5SWRlbnRpZmllciBpZDsKKyAgICBpZC50eXBl
ID0gS2V5SWRlbnRpZmllcjo6Q2hlY2tCb3g7CisgICAgaWQuaGVpZ2h0ID0gc2l6ZS5oZWlnaHQo
KTsKKyAgICBpZC50cmFpdDEgPSBlbmFibGVkOworICAgIGlkLnRyYWl0MiA9IGNoZWNrZWQ7Cisg
ICAgaWYgKCFmaW5kQ2FjaGVkQ29udHJvbChpZCwgJnJlc3VsdCkpIHsKICAgICAgICAgcmVzdWx0
ID0gUVBpeG1hcChzaXplKTsKICAgICAgICAgcmVzdWx0LmZpbGwoUXQ6OnRyYW5zcGFyZW50KTsK
ICAgICAgICAgUVBhaW50ZXIgY2FjaGVQYWludGVyKCZyZXN1bHQpOwpAQCAtMjA3LDE0ICsyMzYs
MTMgQEAgUVBpeG1hcCBTdHlsZVBhaW50ZXJNb2JpbGU6OmZpbmRDaGVja0JveChjb25zdCBRU2l6
ZSYgc2l6ZSwgYm9vbCBjaGVja2VkLCBib29sIGUKICAgICAgICAgZHJhd0NoZWNrYWJsZUJhY2tn
cm91bmQoJmNhY2hlUGFpbnRlciwgcmVjdCwgY2hlY2tlZCwgZW5hYmxlZCk7CiAgICAgICAgIGlm
IChjaGVja2VkIHx8ICFlbmFibGVkKQogICAgICAgICAgICAgZHJhd0NoZWNrZXIoJmNhY2hlUGFp
bnRlciwgcmVjdCwgZW5hYmxlZCA/IFF0Ojp3aGl0ZSA6IFF0OjpncmF5KTsKLSAgICAgICAgUVBp
eG1hcENhY2hlOjppbnNlcnQoa2V5LCByZXN1bHQpOworICAgICAgICBpbnNlcnRJbkNhY2hlKGlk
LCByZXN1bHQpOwogICAgIH0KICAgICByZXR1cm4gcmVzdWx0OwogfQogCiB2b2lkIFN0eWxlUGFp
bnRlck1vYmlsZTo6ZHJhd1JhZGlvKFFQYWludGVyKiBwYWludGVyLCBjb25zdCBRU2l6ZSYgc2l6
ZSwgYm9vbCBjaGVja2VkLCBib29sIGVuYWJsZWQpIGNvbnN0CiB7Ci0gICAgQVNTRVJUKHNpemUu
d2lkdGgoKSA9PSBzaXplLmhlaWdodCgpKTsKICAgICBRUmVjdCByZWN0KFFQb2ludCgwLCAwKSwg
c2l6ZSk7CiAKICAgICBkcmF3Q2hlY2thYmxlQmFja2dyb3VuZChwYWludGVyLCByZWN0LCBjaGVj
a2VkLCBlbmFibGVkKTsKQEAgLTIyNSwxNiArMjUzLDE5IEBAIHZvaWQgU3R5bGVQYWludGVyTW9i
aWxlOjpkcmF3UmFkaW8oUVBhaW50ZXIqIHBhaW50ZXIsIGNvbnN0IFFTaXplJiBzaXplLCBib29s
IGNoCiAKIFFQaXhtYXAgU3R5bGVQYWludGVyTW9iaWxlOjpmaW5kUmFkaW8oY29uc3QgUVNpemUm
IHNpemUsIGJvb2wgY2hlY2tlZCwgYm9vbCBlbmFibGVkKSBjb25zdAogeworICAgIEFTU0VSVChz
aXplLndpZHRoKCkgPT0gc2l6ZS5oZWlnaHQoKSk7CiAgICAgUVBpeG1hcCByZXN1bHQ7Ci0gICAg
c3RhdGljIGNvbnN0IFFTdHJpbmcgcHJlZml4ID0gUUxhdGluMVN0cmluZygiJHF0LXdlYmtpdC1t
b2JpbGUtdGhlbWUtcmFkaW8tIik7Ci0gICAgUVN0cmluZyBrZXkgPSBwcmVmaXggKyBRU3RyaW5n
OjpudW1iZXIoc2l6ZS53aWR0aCgpKSArIFFMYXRpbjFTdHJpbmcoIi0iKSArIChlbmFibGVkID8g
UUxhdGluMVN0cmluZygib24iKSA6IFFMYXRpbjFTdHJpbmcoIm9mZiIpKQotICAgICAgICAgICAg
ICAgICAgKyAoY2hlY2tlZCA/IFFMYXRpbjFTdHJpbmcoIi1jaGVja2VkIikgOiBRU3RyaW5nKCkp
OwotICAgIGlmICghUVBpeG1hcENhY2hlOjpmaW5kKGtleSwgcmVzdWx0KSkgeworICAgIEtleUlk
ZW50aWZpZXIgaWQ7CisgICAgaWQudHlwZSA9IEtleUlkZW50aWZpZXI6OlJhZGlvOworICAgIGlk
LmhlaWdodCA9IHNpemUuaGVpZ2h0KCk7CisgICAgaWQudHJhaXQxID0gZW5hYmxlZDsKKyAgICBp
ZC50cmFpdDIgPSBjaGVja2VkOworICAgIGlmICghZmluZENhY2hlZENvbnRyb2woaWQsICZyZXN1
bHQpKSB7CiAgICAgICAgIHJlc3VsdCA9IFFQaXhtYXAoc2l6ZSk7CiAgICAgICAgIHJlc3VsdC5m
aWxsKFF0Ojp0cmFuc3BhcmVudCk7CiAgICAgICAgIFFQYWludGVyIGNhY2hlUGFpbnRlcigmcmVz
dWx0KTsKICAgICAgICAgZHJhd1JhZGlvKCZjYWNoZVBhaW50ZXIsIHNpemUsIGNoZWNrZWQsIGVu
YWJsZWQpOwotICAgICAgICBRUGl4bWFwQ2FjaGU6Omluc2VydChrZXksIHJlc3VsdCk7CisgICAg
ICAgIGluc2VydEluQ2FjaGUoaWQsIHJlc3VsdCk7CiAgICAgfQogICAgIHJldHVybiByZXN1bHQ7
CiB9CkBAIC0yODYsMTMgKzMxNywxNSBAQCBRUGl4bWFwIFN0eWxlUGFpbnRlck1vYmlsZTo6Zmlu
ZENvbWJvQnV0dG9uKGNvbnN0IFFTaXplJiBzaXplLCBib29sIG11bHRpcGxlLCBibwogewogICAg
IGlmIChzaXplLmlzTnVsbCgpKQogICAgICAgICByZXR1cm4gUVBpeG1hcCgpOwotICAgIHN0YXRp
YyBjb25zdCBRU3RyaW5nIHByZWZpeCA9IFFMYXRpbjFTdHJpbmcoIiRxdC13ZWJraXQtbW9iaWxl
LXRoZW1lLWNvbWJvLSIpOwogICAgIFFQaXhtYXAgcmVzdWx0OwotICAgIFFTdHJpbmcga2V5ID0g
cHJlZml4ICsgKG11bHRpcGxlID8gUUxhdGluMVN0cmluZygibXVsdGlwbGUtIikgOiBRTGF0aW4x
U3RyaW5nKCJzaW1wbGUtIikpCi0gICAgICAgICsgUVN0cmluZzo6bnVtYmVyKHNpemUud2lkdGgo
KSkgKyBRTGF0aW4xU3RyaW5nKCItIikgKyBRU3RyaW5nOjpudW1iZXIoc2l6ZS5oZWlnaHQoKSkK
LSAgICAgICAgKyBRTGF0aW4xU3RyaW5nKCItIikgKyAoZW5hYmxlZCA/IFFMYXRpbjFTdHJpbmco
Im9uIikgOiBRTGF0aW4xU3RyaW5nKCJvZmYiKSk7Ci0KLSAgICBpZiAoIVFQaXhtYXBDYWNoZTo6
ZmluZChrZXksIHJlc3VsdCkpIHsKKyAgICBLZXlJZGVudGlmaWVyIGlkOworICAgIGlkLnR5cGUg
PSBLZXlJZGVudGlmaWVyOjpDb21ib0J1dHRvbjsKKyAgICBpZC53aWR0aCA9IHNpemUud2lkdGgo
KTsKKyAgICBpZC5oZWlnaHQgPSBzaXplLmhlaWdodCgpOworICAgIGlkLnRyYWl0MSA9IG11bHRp
cGxlOworICAgIGlkLnRyYWl0MiA9IGVuYWJsZWQ7CisKKyAgICBpZiAoIWZpbmRDYWNoZWRDb250
cm9sKGlkLCAmcmVzdWx0KSkgewogICAgICAgICByZXN1bHQgPSBRUGl4bWFwKHNpemUpOwogICAg
ICAgICByZXN1bHQuZmlsbChRdDo6dHJhbnNwYXJlbnQpOwogICAgICAgICBRUGFpbnRlciBjYWNo
ZVBhaW50ZXIoJnJlc3VsdCk7CkBAIC0zMDAsNyArMzMzLDcgQEAgUVBpeG1hcCBTdHlsZVBhaW50
ZXJNb2JpbGU6OmZpbmRDb21ib0J1dHRvbihjb25zdCBRU2l6ZSYgc2l6ZSwgYm9vbCBtdWx0aXBs
ZSwgYm8KICAgICAgICAgICAgIGRyYXdNdWx0aXBsZUNvbWJvQnV0dG9uKCZjYWNoZVBhaW50ZXIs
IHNpemUsIGVuYWJsZWQgPyBkYXJrQ29sb3IgOiBRdDo6bGlnaHRHcmF5KTsKICAgICAgICAgZWxz
ZQogICAgICAgICAgICAgZHJhd1NpbXBsZUNvbWJvQnV0dG9uKCZjYWNoZVBhaW50ZXIsIHNpemUs
IGVuYWJsZWQgPyBkYXJrQ29sb3IgOiBRdDo6bGlnaHRHcmF5KTsKLSAgICAgICAgUVBpeG1hcENh
Y2hlOjppbnNlcnQoa2V5LCByZXN1bHQpOworICAgICAgICBpbnNlcnRJbkNhY2hlKGlkLCByZXN1
bHQpOwogICAgIH0KICAgICByZXR1cm4gcmVzdWx0OwogfQpAQCAtMzE3LDEwICszNTAsMTMgQEAg
dm9pZCBTdHlsZVBhaW50ZXJNb2JpbGU6OmRyYXdMaW5lRWRpdChjb25zdCBRUmVjdCYgcmVjdCwg
Ym9vbCBmb2N1c2VkLCBib29sIGVuYWIKIFFQaXhtYXAgU3R5bGVQYWludGVyTW9iaWxlOjpmaW5k
TGluZUVkaXQoY29uc3QgUVNpemUgJiBzaXplLCBib29sIGZvY3VzZWQpIGNvbnN0CiB7CiAgICAg
UVBpeG1hcCByZXN1bHQ7Ci0gICAgc3RhdGljIGNvbnN0IFFTdHJpbmcgcHJlZml4ID0gUUxhdGlu
MVN0cmluZygiJHF0LXdlYmtpdC1tb2JpbGUtdGhlbWUtbGluZUVkaXQtIik7Ci0gICAgUVN0cmlu
ZyBrZXkgPSBwcmVmaXggKyBRU3RyaW5nOjpudW1iZXIoc2l6ZS53aWR0aCgpKSArIFFMYXRpbjFT
dHJpbmcoIngiKSArIFFTdHJpbmc6Om51bWJlcihzaXplLmhlaWdodCgpKQotICAgICAgICAgICAg
ICAgICAgICAgICsgKGZvY3VzZWQgPyBRTGF0aW4xU3RyaW5nKCItZm9jdXNlZCIpIDogUVN0cmlu
ZygpKTsKLSAgICBpZiAoIVFQaXhtYXBDYWNoZTo6ZmluZChrZXksIHJlc3VsdCkpIHsKKyAgICBL
ZXlJZGVudGlmaWVyIGlkOworICAgIGlkLnR5cGUgPSBLZXlJZGVudGlmaWVyOjpMaW5lRWRpdDsK
KyAgICBpZC53aWR0aCA9IHNpemUud2lkdGgoKTsKKyAgICBpZC5oZWlnaHQgPSBzaXplLmhlaWdo
dCgpOworICAgIGlkLnRyYWl0MSA9IGZvY3VzZWQ7CisKKyAgICBpZiAoIWZpbmRDYWNoZWRDb250
cm9sKGlkLCAmcmVzdWx0KSkgewogICAgICAgICBjb25zdCBpbnQgZm9jdXNGcmFtZSA9IHBhaW50
ZXJTY2FsZShwYWludGVyKTsKICAgICAgICAgcmVzdWx0ID0gUVBpeG1hcChzaXplICsgUVNpemUo
MiAqIGZvY3VzRnJhbWUsIDIgKiBmb2N1c0ZyYW1lKSk7CiAgICAgICAgIHJlc3VsdC5maWxsKFF0
Ojp0cmFuc3BhcmVudCk7CkBAIC0zMzIsNyArMzY4LDcgQEAgUVBpeG1hcCBTdHlsZVBhaW50ZXJN
b2JpbGU6OmZpbmRMaW5lRWRpdChjb25zdCBRU2l6ZSAmIHNpemUsIGJvb2wgZm9jdXNlZCkgY29u
c3QKICAgICAgICAgICAgIFFQZW4gZm9jdXNQZW4oaGlnaGxpZ2h0Q29sb3IsIGZvY3VzRnJhbWUs
IFF0OjpTb2xpZExpbmUsIFF0OjpSb3VuZENhcCwgUXQ6OlJvdW5kSm9pbik7CiAgICAgICAgICAg
ICBkcmF3Q29udHJvbEJhY2tncm91bmQoJmNhY2hlUGFpbnRlciwgZm9jdXNQZW4sIHJlY3QsIFF0
OjpOb0JydXNoKTsKICAgICAgICAgfQotICAgICAgICBRUGl4bWFwQ2FjaGU6Omluc2VydChrZXks
IHJlc3VsdCk7CisgICAgICAgIGluc2VydEluQ2FjaGUoaWQsIHJlc3VsdCk7CiAgICAgfQogICAg
IHJldHVybiByZXN1bHQ7CiB9CkBAIC0zNjYsMTAgKzQwMiwxMyBAQCB2b2lkIFN0eWxlUGFpbnRl
ck1vYmlsZTo6ZHJhd1B1c2hCdXR0b24oY29uc3QgUVJlY3QmIHJlY3QsIGJvb2wgc3Vua2VuLCBi
b29sIGVuYQogUVBpeG1hcCBTdHlsZVBhaW50ZXJNb2JpbGU6OmZpbmRQdXNoQnV0dG9uKGNvbnN0
IFFTaXplJiBzaXplLCBib29sIHN1bmtlbiwgYm9vbCBlbmFibGVkKSBjb25zdAogewogICAgIFFQ
aXhtYXAgcmVzdWx0OwotICAgIHN0YXRpYyBjb25zdCBRU3RyaW5nIHByZWZpeCA9IFFMYXRpbjFT
dHJpbmcoIiRxdC13ZWJraXQtbW9iaWxlLXRoZW1lLXB1c2hCdXR0b24tIik7Ci0gICAgUVN0cmlu
ZyBrZXkgPSBwcmVmaXggKyBRU3RyaW5nOjpudW1iZXIoc2l6ZS53aWR0aCgpKSArIFFMYXRpbjFT
dHJpbmcoIngiKSArIFFTdHJpbmc6Om51bWJlcihzaXplLmhlaWdodCgpKQotICAgICAgICAgICAg
ICAgICAgICAgICsgKHN1bmtlbiA/IFFMYXRpbjFTdHJpbmcoIi1zdW5rZW4iKSA6IFFTdHJpbmco
KSkgKyAoZW5hYmxlZCA/IFFMYXRpbjFTdHJpbmcoIi1vbiIpIDogUVN0cmluZygpKTsKLSAgICBp
ZiAoIVFQaXhtYXBDYWNoZTo6ZmluZChrZXksIHJlc3VsdCkpIHsKKyAgICBLZXlJZGVudGlmaWVy
IGlkOworICAgIGlkLnR5cGUgPSBLZXlJZGVudGlmaWVyOjpQdXNoQnV0dG9uOworICAgIGlkLndp
ZHRoID0gc2l6ZS53aWR0aCgpOworICAgIGlkLmhlaWdodCA9IHNpemUuaGVpZ2h0KCk7CisgICAg
aWQudHJhaXQxID0gc3Vua2VuOworICAgIGlkLnRyYWl0MiA9IGVuYWJsZWQ7CisgICAgaWYgKCFm
aW5kQ2FjaGVkQ29udHJvbChpZCwgJnJlc3VsdCkpIHsKICAgICAgICAgY29uc3QgcXJlYWwgZHJv
cFNoYWRvd1NpemUgPSBwYWludGVyU2NhbGUocGFpbnRlcik7CiAgICAgICAgIHJlc3VsdCA9IFFQ
aXhtYXAoc2l6ZSk7CiAgICAgICAgIHJlc3VsdC5maWxsKFF0Ojp0cmFuc3BhcmVudCk7CkBAIC0z
OTYsNyArNDM1LDcgQEAgUVBpeG1hcCBTdHlsZVBhaW50ZXJNb2JpbGU6OmZpbmRQdXNoQnV0dG9u
KGNvbnN0IFFTaXplJiBzaXplLCBib29sIHN1bmtlbiwgYm9vbAogICAgICAgICAgICAgYnJ1c2gg
PSBsaW5lYXJHcmFkaWVudDsKICAgICAgICAgfQogICAgICAgICBkcmF3Q29udHJvbEJhY2tncm91
bmQoJmNhY2hlUGFpbnRlciwgYm9yZGVyUGVuKHBhaW50ZXIpLCByZWN0LCBicnVzaCk7Ci0gICAg
ICAgIFFQaXhtYXBDYWNoZTo6aW5zZXJ0KGtleSwgcmVzdWx0KTsKKyAgICAgICAgaW5zZXJ0SW5D
YWNoZShpZCwgcmVzdWx0KTsKICAgICB9CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KQEAgLTQxOSwx
NiArNDU4LDE5IEBAIHZvaWQgU3R5bGVQYWludGVyTW9iaWxlOjpkcmF3Q29tYm9Cb3goY29uc3Qg
UVJlY3QmIHJlY3QsIGJvb2wgbXVsdGlwbGUsIGJvb2wgZW5hCiAKIHZvaWQgU3R5bGVQYWludGVy
TW9iaWxlOjpkcmF3UHJvZ3Jlc3MoY29uc3QgUVJlY3QmIHJlY3QsIGRvdWJsZSBwcm9ncmVzcywg
Ym9vbCBsZWZ0VG9SaWdodCwgYm9vbCBhbmltYXRlZCkgY29uc3QKIHsKLSAgICBzdGF0aWMgY29u
c3QgUVN0cmluZyBwcmVmaXggPSBRTGF0aW4xU3RyaW5nKCIkcXQtd2Via2l0LW1vYmlsZS10aGVt
ZS1wcm9ncmVzcy0iKTsKICAgICBjb25zdCBpbnQgYm9yZGVyID0gcmVjdC5oZWlnaHQoKSAvIDQ7
CiAgICAgY29uc3QgUVJlY3QgdGFyZ2V0UmVjdCA9IHJlY3QuYWRqdXN0ZWQoMCwgYm9yZGVyLCAw
LCAtYm9yZGVyKTsKIAogICAgIFFQaXhtYXAgcmVzdWx0OwogICAgIGNvbnN0IFFTaXplIGltYWdl
U2l6ZSA9IHNpemVGb3JQYWludGVyU2NhbGUodGFyZ2V0UmVjdCk7Ci0gICAgUVN0cmluZyBrZXkg
PSBwcmVmaXggKyBRU3RyaW5nOjpudW1iZXIoaW1hZ2VTaXplLndpZHRoKCkpICsgUUxhdGluMVN0
cmluZygiLSIpICsgUVN0cmluZzo6bnVtYmVyKGltYWdlU2l6ZS5oZWlnaHQoKSkKLSAgICAgICAg
ICAgICsgUUxhdGluMVN0cmluZygiLSIpICsgUVN0cmluZzo6bnVtYmVyKHByb2dyZXNzLCAnZics
IDMpICsgKGFuaW1hdGVkPyBRTGF0aW4xU3RyaW5nKCItYW5pbSIpIDogUVN0cmluZygpKQotICAg
ICAgICAgICAgICAgICAgICAgICAgICsgKCghYW5pbWF0ZWQgJiYgIWxlZnRUb1JpZ2h0KSA/IFFM
YXRpbjFTdHJpbmcoIi1ydGwiKSA6IFFTdHJpbmcoKSk7Ci0gICAgaWYgKCFRUGl4bWFwQ2FjaGU6
OmZpbmQoa2V5LCByZXN1bHQpKSB7CisgICAgS2V5SWRlbnRpZmllciBpZDsKKyAgICBpZC50eXBl
ID0gS2V5SWRlbnRpZmllcjo6UHJvZ3Jlc3M7CisgICAgaWQud2lkdGggPWltYWdlU2l6ZS53aWR0
aCgpOworICAgIGlkLmhlaWdodCA9IGltYWdlU2l6ZS5oZWlnaHQoKTsKKyAgICBpZC50cmFpdDEg
PSBhbmltYXRlZDsKKyAgICBpZC50cmFpdDIgPSAoIWFuaW1hdGVkICYmICFsZWZ0VG9SaWdodCk7
CisgICAgaWQudHJhaXQzID0gcHJvZ3Jlc3MgKiAxMDA7CisgICAgaWYgKCFmaW5kQ2FjaGVkQ29u
dHJvbChpZCwgJnJlc3VsdCkpIHsKICAgICAgICAgaWYgKGltYWdlU2l6ZS5pc051bGwoKSkKICAg
ICAgICAgICAgIHJldHVybjsKICAgICAgICAgcmVzdWx0ID0gUVBpeG1hcChpbWFnZVNpemUpOwpA
QCAtNDYzLDI1ICs1MDUsMjggQEAgdm9pZCBTdHlsZVBhaW50ZXJNb2JpbGU6OmRyYXdQcm9ncmVz
cyhjb25zdCBRUmVjdCYgcmVjdCwgZG91YmxlIHByb2dyZXNzLCBib29sIGwKICAgICAgICAgICAg
IHJhZGl1cyA9IHJhZGl1c0ZhY3RvciAqIHByb2dyZXNzUmVjdC5oZWlnaHQoKTsKICAgICAgICAg
ICAgIHBhaW50ZXIuZHJhd1JvdW5kZWRSZWN0KHByb2dyZXNzUmVjdCwgcmFkaXVzLCByYWRpdXMp
OwogICAgICAgICB9Ci0gICAgICAgIFFQaXhtYXBDYWNoZTo6aW5zZXJ0KGtleSwgcmVzdWx0KTsK
KyAgICAgICAgaW5zZXJ0SW5DYWNoZShpZCwgcmVzdWx0KTsKICAgICB9CiAgICAgcGFpbnRlci0+
ZHJhd1BpeG1hcCh0YXJnZXRSZWN0LCByZXN1bHQpOwogfQogCiB2b2lkIFN0eWxlUGFpbnRlck1v
YmlsZTo6ZHJhd1NsaWRlclRodW1iKGNvbnN0IFFSZWN0ICYgcmVjdCwgYm9vbCBwcmVzc2VkKSBj
b25zdAogewotICAgIHN0YXRpYyBjb25zdCBRU3RyaW5nIHByZWZpeCA9IFFMYXRpbjFTdHJpbmco
IiRxdC13ZWJraXQtbW9iaWxlLXRoZW1lLXNsaWRlci10aHVtYi0iKTsKICAgICBRUGl4bWFwIHJl
c3VsdDsKICAgICBjb25zdCBRU2l6ZSBzaXplID0gc2l6ZUZvclBhaW50ZXJTY2FsZShyZWN0KTsK
LSAgICBjb25zdCBRU3RyaW5nIGtleSA9IHByZWZpeCArIFFTdHJpbmc6Om51bWJlcihzaXplLndp
ZHRoKCkpOwotICAgIGlmICghUVBpeG1hcENhY2hlOjpmaW5kKGtleSwgJnJlc3VsdCkpIHsKKyAg
ICBLZXlJZGVudGlmaWVyIGlkOworICAgIGlkLnR5cGUgPSBLZXlJZGVudGlmaWVyOjpTbGlkZXJU
aHVtYjsKKyAgICBpZC53aWR0aCA9IHNpemUud2lkdGgoKTsKKyAgICBpZC5oZWlnaHQgPSBzaXpl
LmhlaWdodCgpOworICAgIGlkLnRyYWl0MSA9IHByZXNzZWQ7CisgICAgaWYgKCFmaW5kQ2FjaGVk
Q29udHJvbChpZCwgJnJlc3VsdCkpIHsKICAgICAgICAgaWYgKHNpemUuaXNOdWxsKCkpCiAgICAg
ICAgICAgICByZXR1cm47CiAgICAgICAgIHJlc3VsdCA9IFFQaXhtYXAoc2l6ZSk7CiAgICAgICAg
IHJlc3VsdC5maWxsKFF0Ojp0cmFuc3BhcmVudCk7CiAgICAgICAgIFFQYWludGVyIGNhY2hlUGFp
bnRlcigmcmVzdWx0KTsKICAgICAgICAgZHJhd0NvbnRyb2xCYWNrZ3JvdW5kKCZjYWNoZVBhaW50
ZXIsIGJvcmRlclBlbihwYWludGVyKSwgUVJlY3QoUVBvaW50KDAsIDApLCBzaXplKSwgcHJlc3Nl
ZD8gUXQ6OmxpZ2h0R3JheSA6IGJ1dHRvbkdyYWRpZW50Qm90dG9tKTsKLSAgICAgICAgUVBpeG1h
cENhY2hlOjppbnNlcnQoa2V5LCByZXN1bHQpOworICAgICAgICBpbnNlcnRJbkNhY2hlKGlkLCBy
ZXN1bHQpOwogICAgIH0KICAgICBwYWludGVyLT5kcmF3UGl4bWFwKHJlY3QsIHJlc3VsdCk7CiB9
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9xdC9SZW5kZXJUaGVtZVF0TW9i
aWxlLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9xdC9SZW5kZXJUaGVtZVF0TW9iaWxlLmgK
aW5kZXggOWU5YjgxNDNlY2ZlYjBmNjY5OGVkZDBiMTIxZTFmYTMyY2ZmNDExMC4uMzliNzk2MTVh
N2I0YzdjYjBmMTMzZjBiY2QxMzAyYjI3ZDRjZDhiZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vcXQvUmVuZGVyVGhlbWVRdE1vYmlsZS5oCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL3F0L1JlbmRlclRoZW1lUXRNb2JpbGUuaApAQCAtMjUsMTMgKzI1LDE2IEBACiAj
aW5jbHVkZSAiUmVuZGVyVGhlbWVRdC5oIgogCiAjaW5jbHVkZSA8UUJydXNoPgorI2luY2x1ZGUg
PFFIYXNoPgorI2luY2x1ZGUgPFFQaXhtYXBDYWNoZT4KIAogUVRfQkVHSU5fTkFNRVNQQUNFCiBj
bGFzcyBRQ29sb3I7Ci1jbGFzcyBRUGl4bWFwOwogY2xhc3MgUVNpemU7CiBRVF9FTkRfTkFNRVNQ
QUNFCiAKK3R5cGVkZWYgUVBpeG1hcENhY2hlOjpLZXkgQ2FjaGVLZXk7CisKIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKIAogY2xhc3MgUmVuZGVyVGhlbWVRdE1vYmlsZSA6IHB1YmxpYyBSZW5kZXJUaGVt
ZVF0IHsKQEAgLTgzLDYgKzg2LDQ0IEBAIHByaXZhdGU6CiAgICAgdm9pZCBzZXRQYWxldHRlRnJv
bVBhZ2VDbGllbnRJZkV4aXN0cyhRUGFsZXR0ZSYpIGNvbnN0OwogfTsKIAorc3RydWN0IEtleUlk
ZW50aWZpZXIgeworCisgICAgS2V5SWRlbnRpZmllcigpCisgICAgICAgIDogdHlwZShVbmRlZmlu
ZWQpCisgICAgICAgICwgd2lkdGgoMCkKKyAgICAgICAgLCBoZWlnaHQoMCkKKyAgICAgICAgLCB0
cmFpdDEoZmFsc2UpCisgICAgICAgICwgdHJhaXQyKGZhbHNlKQorICAgICAgICAsIHRyYWl0Mygw
KQorICAgIHsKKyAgICB9CisKKyAgICBlbnVtIENvbnRyb2xUeXBlIHsKKyAgICAgICAgVW5kZWZp
bmVkLAorICAgICAgICBDaGVja0JveCwKKyAgICAgICAgUmFkaW8sCisgICAgICAgIENvbWJvQnV0
dG9uLAorICAgICAgICBMaW5lRWRpdCwKKyAgICAgICAgUHVzaEJ1dHRvbiwKKyAgICAgICAgUHJv
Z3Jlc3MsCisgICAgICAgIFNsaWRlclRodW1iCisgICAgfTsKKworICAgIENvbnRyb2xUeXBlIHR5
cGUgOiAzOworICAgIHVpbnQgd2lkdGggOiAxMTsKKyAgICB1aW50IGhlaWdodCA6IDk7CisgICAg
dWludCB0cmFpdDEgOiAxOworICAgIHVpbnQgdHJhaXQyIDogMTsKKyAgICB1aW50IHRyYWl0MyA6
IDc7CisKKyAgICBpbmxpbmUgYm9vbCBvcGVyYXRvcj09KGNvbnN0IEtleUlkZW50aWZpZXImIG90
aGVyKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuICh0eXBlID09IG90aGVyLnR5cGUgJiYg
d2lkdGggPT0gb3RoZXIud2lkdGgKKyAgICAgICAgICAgICAgICAmJiBoZWlnaHQgPT0gb3RoZXIu
aGVpZ2h0ICYmIHRyYWl0MSA9PSBvdGhlci50cmFpdDEKKyAgICAgICAgICAgICAgICAmJiB0cmFp
dDIgPT0gb3RoZXIudHJhaXQyICYmIHRyYWl0MyA9PSBvdGhlci50cmFpdDMpOworICAgIH0KK307
CisKIGNsYXNzIFN0eWxlUGFpbnRlck1vYmlsZSA6IHB1YmxpYyBTdHlsZVBhaW50ZXIgewogCiBw
dWJsaWM6CkBAIC0xMTUsOSArMTU2LDE3IEBAIHByaXZhdGU6CiAKICAgICBRU2l6ZSBzaXplRm9y
UGFpbnRlclNjYWxlKGNvbnN0IFFSZWN0JikgY29uc3Q7CiAKKyAgICBzdGF0aWMgYm9vbCBmaW5k
Q2FjaGVkQ29udHJvbChjb25zdCBLZXlJZGVudGlmaWVyJiwgUVBpeG1hcCopOworICAgIHN0YXRp
YyB2b2lkIGluc2VydEluQ2FjaGUoY29uc3QgS2V5SWRlbnRpZmllciYsIGNvbnN0IFFQaXhtYXAm
KTsKKworICAgIHN0YXRpYyBRSGFzaDxLZXlJZGVudGlmaWVyLCBDYWNoZUtleT4gY2FjaGVLZXlz
KCkKKyAgICB7CisgICAgICAgIHN0YXRpYyBRSGFzaDxLZXlJZGVudGlmaWVyLCBDYWNoZUtleT4g
a2V5czsKKyAgICAgICAgcmV0dXJuIGtleXM7CisgICAgfQogICAgIGJvb2wgbV9wcmV2aW91c1Nt
b290aFBpeG1hcFRyYW5zZm9ybTsKIAotICAgIFFfRElTQUJMRV9DT1BZKFN0eWxlUGFpbnRlck1v
YmlsZSk7CisgICAgUV9ESVNBQkxFX0NPUFkoU3R5bGVQYWludGVyTW9iaWxlKQogfTsKIAogfQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>121011</attachid>
            <date>2012-01-03 15:53:46 -0800</date>
            <delta_ts>2012-01-04 04:42:41 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-75010-20120104005343.patch</filename>
            <type>text/plain</type>
            <size>21593</size>
            <attacher name="Pierre Rossi">pierre.rossi</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTAzNDY3CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMDU1MjE2NWFiMjZjMTc0
ZmMzNjkyY2QxYzdlMmU3ODA1OWM2NGI0Yy4uN2QzNDVjYmU3ODU0NmUwYTBhY2RmNjU1MGUyZmRj
ZDFlOWE2MTZjMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDM4IEBACisyMDExLTEyLTIxICBQaWVy
cmUgUm9zc2kgIDxwaWVycmUucm9zc2lAZ21haWwuY29tPgorCisgICAgICAgIFtRdF0gQXZvaWQg
c3RyaW5nIG9wZXJhdGlvbnMgaW4gbW9iaWxlIHRoZW1lJ3MgY2FjaGluZyBtZWNoYW5pc20KKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTc1MDEwCisKKyAg
ICAgICAgVGhlIHN0cmluZyBvcGVyYXRpb25zIGNvbnN0YW50bHkgcGVyZm9ybWVkIGluIHRoZSBt
b2JpbGUgdGhlbWUKKyAgICAgICAgdG8gZmV0Y2ggb3IgcHV0IGNvbnRyb2xzIGluIHRoZSBwaXht
YXAgY2FjaGUgY2FuIGJlIHByZXR0eSBleHBlbnNpdmUuCisgICAgICAgIFRoZSBuZXcgbWVjaGFu
aXNtIGhhcm5lc3NlcyB0aGUgUVBpeG1hcENhY2hlOjpLZXkgQVBJIGluc3RlYWQuCisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgTm8gbmV3IHRlc3RzLCBp
bnRlcm5hbCByZWZhY3RvcmluZy4KKworICAgICAgICAqIHBsYXRmb3JtL3F0L1JlbmRlclRoZW1l
UXRNb2JpbGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6cUhhc2gpOgorICAgICAgICAoV2ViQ29y
ZTo6U3R5bGVQYWludGVyTW9iaWxlOjpmaW5kQ2FjaGVkQ29udHJvbCk6CisgICAgICAgIChXZWJD
b3JlOjpTdHlsZVBhaW50ZXJNb2JpbGU6Omluc2VydEludG9DYWNoZSk6CisgICAgICAgIChXZWJD
b3JlOjpTdHlsZVBhaW50ZXJNb2JpbGU6OmZpbmRDaGVja0JveCk6CisgICAgICAgIChXZWJDb3Jl
OjpTdHlsZVBhaW50ZXJNb2JpbGU6OmRyYXdSYWRpbyk6CisgICAgICAgIChXZWJDb3JlOjpTdHls
ZVBhaW50ZXJNb2JpbGU6OmZpbmRSYWRpbyk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVBhaW50
ZXJNb2JpbGU6OmRyYXdNdWx0aXBsZUNvbWJvQnV0dG9uKToKKyAgICAgICAgKFdlYkNvcmU6OlN0
eWxlUGFpbnRlck1vYmlsZTo6ZHJhd1NpbXBsZUNvbWJvQnV0dG9uKToKKyAgICAgICAgKFdlYkNv
cmU6OlN0eWxlUGFpbnRlck1vYmlsZTo6Z2V0QnV0dG9uSW1hZ2VTaXplKToKKyAgICAgICAgKFdl
YkNvcmU6OlN0eWxlUGFpbnRlck1vYmlsZTo6ZmluZENvbWJvQnV0dG9uKToKKyAgICAgICAgKFdl
YkNvcmU6OlN0eWxlUGFpbnRlck1vYmlsZTo6ZmluZExpbmVFZGl0KToKKyAgICAgICAgKFdlYkNv
cmU6OlN0eWxlUGFpbnRlck1vYmlsZTo6ZmluZFB1c2hCdXR0b24pOgorICAgICAgICAoV2ViQ29y
ZTo6U3R5bGVQYWludGVyTW9iaWxlOjpkcmF3Q29tYm9Cb3gpOgorICAgICAgICAoV2ViQ29yZTo6
U3R5bGVQYWludGVyTW9iaWxlOjpkcmF3UHJvZ3Jlc3MpOgorICAgICAgICAoV2ViQ29yZTo6U3R5
bGVQYWludGVyTW9iaWxlOjpkcmF3U2xpZGVyVGh1bWIpOgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyVGhlbWVRdE1vYmlsZTo6cGFpbnRUZXh0RmllbGQpOgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyVGhlbWVRdE1vYmlsZTo6cGFpbnRNZW51TGlzdCk6CisgICAgICAgICogcGxhdGZvcm0vcXQv
UmVuZGVyVGhlbWVRdE1vYmlsZS5oOgorICAgICAgICAoV2ViQ29yZTo6S2V5SWRlbnRpZmllcjo6
S2V5SWRlbnRpZmllcik6CisgICAgICAgIChXZWJDb3JlOjpLZXlJZGVudGlmaWVyOjpvcGVyYXRv
cj09KToKKwogMjAxMS0xMi0yMSAgRmxvcmluIE1hbGl0YSAgPGZtYWxpdGFAZ29vZ2xlLmNvbT4K
IAogICAgICAgICBJbXByb3BlciBoYW5kbGluZyBvZiBmb3JlaWdub2JqZWN0cyBuZXN0ZWQgaW4g
c3ZnIGdyb3VwcwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vcXQvUmVuZGVy
VGhlbWVRdE1vYmlsZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9xdC9SZW5kZXJUaGVt
ZVF0TW9iaWxlLmNwcAppbmRleCBjYTQ3Y2Y5M2RhMDRjMzk1OGRjMWI0YzkyNDM3Yzc2NDNjYmQw
ZGFjLi42YjcyYzUxNzQ0M2Q3NWM4YmM2OGM4MjI4OTFjMWZkYTY0YWEwMDlkIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9xdC9SZW5kZXJUaGVtZVF0TW9iaWxlLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9xdC9SZW5kZXJUaGVtZVF0TW9iaWxlLmNwcApAQCAt
NjMsNiArNjMsNyBAQCBzdGF0aWMgY29uc3QgaW50IHJhZGlvV2lkdGggPSAyMTsKIHN0YXRpYyBj
b25zdCBpbnQgc2xpZGVyU2l6ZSA9IDE5Owogc3RhdGljIGNvbnN0IGludCBidXR0b25IZWlnaHRS
YXRpbyA9IDEuNTsKIAorc3RhdGljIGNvbnN0IGZsb2F0IG11bHRpcGxlQ29tYm9Eb3RzT2Zmc2V0
RmFjdG9yID0gMS44Owogc3RhdGljIGNvbnN0IGZsb2F0IGJ1dHRvblBhZGRpbmdMZWZ0ID0gMTg7
CiBzdGF0aWMgY29uc3QgZmxvYXQgYnV0dG9uUGFkZGluZ1JpZ2h0ID0gMTg7CiBzdGF0aWMgY29u
c3QgZmxvYXQgYnV0dG9uUGFkZGluZ1RvcCA9IDI7CkBAIC04MCw2ICs4MSwxOCBAQCBzdGF0aWMg
Y29uc3QgUUNvbG9yIGhpZ2hsaWdodENvbG9yKDE2LCAxMjgsIDIyMSk7CiBzdGF0aWMgY29uc3Qg
UUNvbG9yIGJ1dHRvbkdyYWRpZW50Qm90dG9tKDI0NSwgMjQ1LCAyNDUpOwogc3RhdGljIGNvbnN0
IFFDb2xvciBzaGFkb3dDb2xvcig4MCwgODAsIDgwLCAxNjApOwogCitzdGF0aWMgUUhhc2g8S2V5
SWRlbnRpZmllciwgQ2FjaGVLZXk+IGNhY2hlS2V5czsKKwordWludCBxSGFzaChjb25zdCBLZXlJ
ZGVudGlmaWVyJiBpZCkKK3sKKyAgICBjb25zdCBxdWludDMyIHZhbHVlID0gaWQudHJhaXQxICsg
KGlkLnRyYWl0MiA8PCAxKSArICh1aW50KGlkLnR5cGUpIDw8IDIpICsgKGlkLmhlaWdodCA8PCA1
KSArIChpZC53aWR0aCA8PCAxNCkgKyAoaWQudHJhaXQzIDw8IDI1KTsKKyAgICBjb25zdCB1bnNp
Z25lZCBjaGFyKiBwID0gcmVpbnRlcnByZXRfY2FzdDxjb25zdCB1bnNpZ25lZCBjaGFyKj4oJnZh
bHVlKTsKKyAgICB1aW50IGhhc2ggPSAwOworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgNDsgKytp
KQorICAgICAgICBoYXNoIF49IChoYXNoIDw8IDUpICsgKGhhc2ggPj4gMikgKyBwW2ldOworICAg
IHJldHVybiBoYXNoOworfQorCiBzdGF0aWMgdm9pZCBkcmF3Q29udHJvbEJhY2tncm91bmQoUVBh
aW50ZXIqIHBhaW50ZXIsIGNvbnN0IFFQZW4mIHBlbiwgY29uc3QgUVJlY3QmIHJlY3QsIGNvbnN0
IFFCcnVzaCYgYnJ1c2gpCiB7CiAgICAgUVBlbiBvbGRQZW4gPSBwYWludGVyLT5wZW4oKTsKQEAg
LTE1MCw2ICsxNjMsMjggQEAgU3R5bGVQYWludGVyTW9iaWxlOjp+U3R5bGVQYWludGVyTW9iaWxl
KCkKICAgICBwYWludGVyLT5zZXRSZW5kZXJIaW50cyhRUGFpbnRlcjo6U21vb3RoUGl4bWFwVHJh
bnNmb3JtLCBtX3ByZXZpb3VzU21vb3RoUGl4bWFwVHJhbnNmb3JtKTsKIH0KIAorYm9vbCBTdHls
ZVBhaW50ZXJNb2JpbGU6OmZpbmRDYWNoZWRDb250cm9sKGNvbnN0IEtleUlkZW50aWZpZXImIGtl
eUlkLCBRUGl4bWFwKiByZXN1bHQpCit7CisgICAgc3RhdGljIENhY2hlS2V5IGVtcHR5S2V5Owor
ICAgIENhY2hlS2V5IGtleSA9IGNhY2hlS2V5cy52YWx1ZShrZXlJZCwgZW1wdHlLZXkpOworICAg
IGlmIChrZXkgPT0gZW1wdHlLZXkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBjb25zdCBi
b29sIHJldCA9IFFQaXhtYXBDYWNoZTo6ZmluZChrZXksIHJlc3VsdCk7CisgICAgaWYgKCFyZXQp
CisgICAgICAgIGNhY2hlS2V5cy5yZW1vdmUoa2V5SWQpOworICAgIHJldHVybiByZXQ7Cit9CisK
K3ZvaWQgU3R5bGVQYWludGVyTW9iaWxlOjppbnNlcnRJbnRvQ2FjaGUoY29uc3QgS2V5SWRlbnRp
ZmllciYga2V5SWQsIGNvbnN0IFFQaXhtYXAmIHBpeG1hcCkKK3sKKyAgICBBU1NFUlQoa2V5SWQu
dHlwZSk7CisgICAgY29uc3QgaW50IHNpemUgPSBwaXhtYXAud2lkdGgoKSAqIHBpeG1hcC5oZWln
aHQoKSAqIHBpeG1hcC5kZXB0aCgpIC8gODE5MjsKKyAgICAvLyBEb24ndCBjYWNoZSBwaXhtYXBz
IG92ZXIgNTEyIEtCOworICAgIGlmIChzaXplID4gNTEyKQorICAgICAgICByZXR1cm47CisgICAg
Y2FjaGVLZXlzLmluc2VydChrZXlJZCwgUVBpeG1hcENhY2hlOjppbnNlcnQocGl4bWFwKSk7Cit9
CisKIHZvaWQgU3R5bGVQYWludGVyTW9iaWxlOjpkcmF3Q2hlY2thYmxlQmFja2dyb3VuZChRUGFp
bnRlciogcGFpbnRlciwgY29uc3QgUVJlY3QmIHJlY3QsIGJvb2wgY2hlY2tlZCwgYm9vbCBlbmFi
bGVkKSBjb25zdAogewogICAgIFFCcnVzaCBicnVzaDsKQEAgLTE5NiwxMCArMjMxLDEyIEBAIFFQ
aXhtYXAgU3R5bGVQYWludGVyTW9iaWxlOjpmaW5kQ2hlY2tCb3goY29uc3QgUVNpemUmIHNpemUs
IGJvb2wgY2hlY2tlZCwgYm9vbCBlCiB7CiAgICAgQVNTRVJUKHNpemUud2lkdGgoKSA9PSBzaXpl
LmhlaWdodCgpKTsKICAgICBRUGl4bWFwIHJlc3VsdDsKLSAgICBzdGF0aWMgY29uc3QgUVN0cmlu
ZyBwcmVmaXggPSBRTGF0aW4xU3RyaW5nKCIkcXQtd2Via2l0LW1vYmlsZS10aGVtZS1jaGVja2Jv
eC0iKTsKLSAgICBRU3RyaW5nIGtleSA9IHByZWZpeCArIFFTdHJpbmc6Om51bWJlcihzaXplLndp
ZHRoKCkpICsgUUxhdGluMVN0cmluZygiLSIpICsgKGVuYWJsZWQgPyBRTGF0aW4xU3RyaW5nKCJv
biIpIDogUUxhdGluMVN0cmluZygib2ZmIikpCi0gICAgICAgICAgICAgICAgICArIChjaGVja2Vk
ID8gUUxhdGluMVN0cmluZygiLWNoZWNrZWQiKSA6IFFTdHJpbmcoKSk7Ci0gICAgaWYgKCFRUGl4
bWFwQ2FjaGU6OmZpbmQoa2V5LCByZXN1bHQpKSB7CisgICAgS2V5SWRlbnRpZmllciBpZDsKKyAg
ICBpZC50eXBlID0gS2V5SWRlbnRpZmllcjo6Q2hlY2tCb3g7CisgICAgaWQuaGVpZ2h0ID0gc2l6
ZS5oZWlnaHQoKTsKKyAgICBpZC50cmFpdDEgPSBlbmFibGVkOworICAgIGlkLnRyYWl0MiA9IGNo
ZWNrZWQ7CisgICAgaWYgKCFmaW5kQ2FjaGVkQ29udHJvbChpZCwgJnJlc3VsdCkpIHsKICAgICAg
ICAgcmVzdWx0ID0gUVBpeG1hcChzaXplKTsKICAgICAgICAgcmVzdWx0LmZpbGwoUXQ6OnRyYW5z
cGFyZW50KTsKICAgICAgICAgUVBhaW50ZXIgY2FjaGVQYWludGVyKCZyZXN1bHQpOwpAQCAtMjA3
LDE0ICsyNDQsMTMgQEAgUVBpeG1hcCBTdHlsZVBhaW50ZXJNb2JpbGU6OmZpbmRDaGVja0JveChj
b25zdCBRU2l6ZSYgc2l6ZSwgYm9vbCBjaGVja2VkLCBib29sIGUKICAgICAgICAgZHJhd0NoZWNr
YWJsZUJhY2tncm91bmQoJmNhY2hlUGFpbnRlciwgcmVjdCwgY2hlY2tlZCwgZW5hYmxlZCk7CiAg
ICAgICAgIGlmIChjaGVja2VkIHx8ICFlbmFibGVkKQogICAgICAgICAgICAgZHJhd0NoZWNrZXIo
JmNhY2hlUGFpbnRlciwgcmVjdCwgZW5hYmxlZCA/IFF0Ojp3aGl0ZSA6IFF0OjpncmF5KTsKLSAg
ICAgICAgUVBpeG1hcENhY2hlOjppbnNlcnQoa2V5LCByZXN1bHQpOworICAgICAgICBpbnNlcnRJ
bnRvQ2FjaGUoaWQsIHJlc3VsdCk7CiAgICAgfQogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKIHZv
aWQgU3R5bGVQYWludGVyTW9iaWxlOjpkcmF3UmFkaW8oUVBhaW50ZXIqIHBhaW50ZXIsIGNvbnN0
IFFTaXplJiBzaXplLCBib29sIGNoZWNrZWQsIGJvb2wgZW5hYmxlZCkgY29uc3QKIHsKLSAgICBB
U1NFUlQoc2l6ZS53aWR0aCgpID09IHNpemUuaGVpZ2h0KCkpOwogICAgIFFSZWN0IHJlY3QoUVBv
aW50KDAsIDApLCBzaXplKTsKIAogICAgIGRyYXdDaGVja2FibGVCYWNrZ3JvdW5kKHBhaW50ZXIs
IHJlY3QsIGNoZWNrZWQsIGVuYWJsZWQpOwpAQCAtMjI1LDIxICsyNjEsMjQgQEAgdm9pZCBTdHls
ZVBhaW50ZXJNb2JpbGU6OmRyYXdSYWRpbyhRUGFpbnRlciogcGFpbnRlciwgY29uc3QgUVNpemUm
IHNpemUsIGJvb2wgY2gKIAogUVBpeG1hcCBTdHlsZVBhaW50ZXJNb2JpbGU6OmZpbmRSYWRpbyhj
b25zdCBRU2l6ZSYgc2l6ZSwgYm9vbCBjaGVja2VkLCBib29sIGVuYWJsZWQpIGNvbnN0CiB7Cisg
ICAgQVNTRVJUKHNpemUud2lkdGgoKSA9PSBzaXplLmhlaWdodCgpKTsKICAgICBRUGl4bWFwIHJl
c3VsdDsKLSAgICBzdGF0aWMgY29uc3QgUVN0cmluZyBwcmVmaXggPSBRTGF0aW4xU3RyaW5nKCIk
cXQtd2Via2l0LW1vYmlsZS10aGVtZS1yYWRpby0iKTsKLSAgICBRU3RyaW5nIGtleSA9IHByZWZp
eCArIFFTdHJpbmc6Om51bWJlcihzaXplLndpZHRoKCkpICsgUUxhdGluMVN0cmluZygiLSIpICsg
KGVuYWJsZWQgPyBRTGF0aW4xU3RyaW5nKCJvbiIpIDogUUxhdGluMVN0cmluZygib2ZmIikpCi0g
ICAgICAgICAgICAgICAgICArIChjaGVja2VkID8gUUxhdGluMVN0cmluZygiLWNoZWNrZWQiKSA6
IFFTdHJpbmcoKSk7Ci0gICAgaWYgKCFRUGl4bWFwQ2FjaGU6OmZpbmQoa2V5LCByZXN1bHQpKSB7
CisgICAgS2V5SWRlbnRpZmllciBpZDsKKyAgICBpZC50eXBlID0gS2V5SWRlbnRpZmllcjo6UmFk
aW87CisgICAgaWQuaGVpZ2h0ID0gc2l6ZS5oZWlnaHQoKTsKKyAgICBpZC50cmFpdDEgPSBlbmFi
bGVkOworICAgIGlkLnRyYWl0MiA9IGNoZWNrZWQ7CisgICAgaWYgKCFmaW5kQ2FjaGVkQ29udHJv
bChpZCwgJnJlc3VsdCkpIHsKICAgICAgICAgcmVzdWx0ID0gUVBpeG1hcChzaXplKTsKICAgICAg
ICAgcmVzdWx0LmZpbGwoUXQ6OnRyYW5zcGFyZW50KTsKICAgICAgICAgUVBhaW50ZXIgY2FjaGVQ
YWludGVyKCZyZXN1bHQpOwogICAgICAgICBkcmF3UmFkaW8oJmNhY2hlUGFpbnRlciwgc2l6ZSwg
Y2hlY2tlZCwgZW5hYmxlZCk7Ci0gICAgICAgIFFQaXhtYXBDYWNoZTo6aW5zZXJ0KGtleSwgcmVz
dWx0KTsKKyAgICAgICAgaW5zZXJ0SW50b0NhY2hlKGlkLCByZXN1bHQpOwogICAgIH0KICAgICBy
ZXR1cm4gcmVzdWx0OwogfQogCi12b2lkIFN0eWxlUGFpbnRlck1vYmlsZTo6ZHJhd011bHRpcGxl
Q29tYm9CdXR0b24oUVBhaW50ZXIqIHBhaW50ZXIsIGNvbnN0IFFTaXplJiBzaXplLCBjb25zdCBR
Q29sb3ImIGNvbG9yKSBjb25zdAordm9pZCBTdHlsZVBhaW50ZXJNb2JpbGU6OmRyYXdNdWx0aXBs
ZUNvbWJvQnV0dG9uKFFQYWludGVyKiBwYWludGVyLCBjb25zdCBRU2l6ZUYmIHNpemUsIGNvbnN0
IFFDb2xvciYgY29sb3IpIGNvbnN0CiB7CiAgICAgY29uc3QgcXJlYWwgZG90RGlhbWV0ZXIgPSBz
aXplLmhlaWdodCgpOwogICAgIGNvbnN0IHFyZWFsIGRvdFJhZGlpID0gZG90RGlhbWV0ZXIgLyAy
OwpAQCAtMjQ4LDU5ICsyODcsNjYgQEAgdm9pZCBTdHlsZVBhaW50ZXJNb2JpbGU6OmRyYXdNdWx0
aXBsZUNvbWJvQnV0dG9uKFFQYWludGVyKiBwYWludGVyLCBjb25zdCBRU2l6ZSYKICAgICBwYWlu
dGVyLT5zZXRQZW4oY29sb3IpOwogICAgIHBhaW50ZXItPnNldEJydXNoKGNvbG9yKTsKIAotICAg
IGNvbnN0IHFyZWFsIG9mZnNldEZhY3RvciA9IDEuODsKICAgICBmb3IgKGludCBpID0gMDsgaSA8
IDM7ICsraSkgewotICAgICAgICBRUG9pbnRGIGNlbnRlcihvZmZzZXRGYWN0b3IgKiBkb3RSYWRp
aSArIGkgKiBvZmZzZXRGYWN0b3IgKiBkb3REaWFtZXRlciwgZG90UmFkaWkpOworICAgICAgICBR
UG9pbnRGIGNlbnRlcihkb3RSYWRpaSArIGkgKiBtdWx0aXBsZUNvbWJvRG90c09mZnNldEZhY3Rv
ciAqIGRvdERpYW1ldGVyLCBkb3RSYWRpaSk7CiAgICAgICAgIHBhaW50ZXItPmRyYXdFbGxpcHNl
KGNlbnRlciwgZG90UmFkaWksIGRvdFJhZGlpKTsKICAgICB9CiB9CiAKLXZvaWQgU3R5bGVQYWlu
dGVyTW9iaWxlOjpkcmF3U2ltcGxlQ29tYm9CdXR0b24oUVBhaW50ZXIqIHBhaW50ZXIsIGNvbnN0
IFFTaXplJiBzaXplLCBjb25zdCBRQ29sb3ImIGNvbG9yKSBjb25zdAordm9pZCBTdHlsZVBhaW50
ZXJNb2JpbGU6OmRyYXdTaW1wbGVDb21ib0J1dHRvbihRUGFpbnRlciogcGFpbnRlciwgY29uc3Qg
UVNpemVGJiBzaXplLCBjb25zdCBRQ29sb3ImIGNvbG9yKSBjb25zdAogewotICAgIGNvbnN0IGlu
dCBnYXAgPSAoc2l6ZS5oZWlnaHQoKSAtIDEpIC8gNTsKLSAgICBjb25zdCBpbnQgYXJyb3dIZWln
aHQgPSAyICogZ2FwOwotICAgIGNvbnN0IGludCByaWdodCA9IGFycm93SGVpZ2h0ICogMjsKLSAg
ICBjb25zdCBpbnQgYm90dG9tQmFzZWxpbmUgPSBhcnJvd0hlaWdodCArIGdhcCArIDE7Ci0gICAg
UVBvbHlnb24gdXBBcnJvdywgZG93bkFycm93OwotICAgIHVwQXJyb3cgPDwgUVBvaW50KDAsIGFy
cm93SGVpZ2h0KSA8PCBRUG9pbnQoYXJyb3dIZWlnaHQsIDApIDw8IFFQb2ludChyaWdodCwgYXJy
b3dIZWlnaHQpOwotICAgIGRvd25BcnJvdyA8PCBRUG9pbnQoMCwgYm90dG9tQmFzZWxpbmUpIDw8
IFFQb2ludChhcnJvd0hlaWdodCwgYm90dG9tQmFzZWxpbmUgKyBhcnJvd0hlaWdodCkKLSAgICAg
ICAgICAgICAgPDwgUVBvaW50KHJpZ2h0LCBib3R0b21CYXNlbGluZSk7CisgICAgY29uc3QgcXJl
YWwgZ2FwID0gc2l6ZS5oZWlnaHQoKSAvIDUuMDsKKyAgICBjb25zdCBxcmVhbCBhcnJvd0hlaWdo
dCA9IChzaXplLmhlaWdodCgpIC0gZ2FwKSAvIDIuMDsKKyAgICBjb25zdCBxcmVhbCByaWdodCA9
IGFycm93SGVpZ2h0ICogMjsKKyAgICBjb25zdCBxcmVhbCBib3R0b21CYXNlbGluZSA9IHNpemUu
aGVpZ2h0KCkgLSBhcnJvd0hlaWdodDsKKyAgICBRUG9seWdvbkYgdXBBcnJvdywgZG93bkFycm93
OworICAgIHVwQXJyb3cgPDwgUVBvaW50RigwLCBhcnJvd0hlaWdodCkgPDwgUVBvaW50RihhcnJv
d0hlaWdodCwgMCkgPDwgUVBvaW50RihyaWdodCwgYXJyb3dIZWlnaHQpOworICAgIGRvd25BcnJv
dyA8PCBRUG9pbnRGKDAsIGJvdHRvbUJhc2VsaW5lKSA8PCBRUG9pbnRGKGFycm93SGVpZ2h0LCBi
b3R0b21CYXNlbGluZSArIGFycm93SGVpZ2h0KQorICAgICAgICAgICAgICA8PCBRUG9pbnRGKHJp
Z2h0LCBib3R0b21CYXNlbGluZSk7CiAKLSAgICBwYWludGVyLT5zZXRQZW4oY29sb3IpOworICAg
IHBhaW50ZXItPnNldFBlbihRdDo6Tm9QZW4pOwogICAgIHBhaW50ZXItPnNldEJydXNoKGNvbG9y
KTsKICAgICBwYWludGVyLT5kcmF3UG9seWdvbih1cEFycm93KTsKICAgICBwYWludGVyLT5kcmF3
UG9seWdvbihkb3duQXJyb3cpOwogfQogCi1RU2l6ZSBTdHlsZVBhaW50ZXJNb2JpbGU6OmdldEJ1
dHRvbkltYWdlU2l6ZShpbnQgYnV0dG9uSGVpZ2h0LCBib29sIG11bHRpcGxlKSBjb25zdAorUVNp
emVGIFN0eWxlUGFpbnRlck1vYmlsZTo6Z2V0QnV0dG9uSW1hZ2VTaXplKGludCBidXR0b25IZWln
aHQsIGJvb2wgbXVsdGlwbGUpIGNvbnN0CiB7CiAgICAgaWYgKG11bHRpcGxlKQotICAgICAgICBy
ZXR1cm4gUVNpemUoYnV0dG9uSGVpZ2h0IC8gMiwgYnV0dG9uSGVpZ2h0IC8gMTApOworICAgICAg
ICByZXR1cm4gUVNpemVGKHFyZWFsKDIgKyBidXR0b25IZWlnaHQgKiAzICogbXVsdGlwbGVDb21i
b0RvdHNPZmZzZXRGYWN0b3IvIDEwLjApCisgICAgICAgICAgICAgICAgICAgICAgLCBxcmVhbCgy
ICsgYnV0dG9uSGVpZ2h0IC8gMTAuMCkpOwogCi0gICAgY29uc3QgaW50IGhlaWdodCA9IGJ1dHRv
bkhlaWdodCAvIDIuNTsKLSAgICBjb25zdCBpbnQgd2lkdGggPSA0ICogaGVpZ2h0IC8gNTsKLSAg
ICByZXR1cm4gUVNpemUod2lkdGgsIGhlaWdodCk7CisgICAgY29uc3QgcXJlYWwgaGVpZ2h0ID0g
YnV0dG9uSGVpZ2h0IC8gMi41OworICAgIGNvbnN0IHFyZWFsIHdpZHRoID0gNCAqIGhlaWdodCAv
IDUuMDsKKyAgICByZXR1cm4gUVNpemVGKDIgKyB3aWR0aCwgMiArIGhlaWdodCk7CiB9CiAKIFFQ
aXhtYXAgU3R5bGVQYWludGVyTW9iaWxlOjpmaW5kQ29tYm9CdXR0b24oY29uc3QgUVNpemUmIHNp
emUsIGJvb2wgbXVsdGlwbGUsIGJvb2wgZW5hYmxlZCkgY29uc3QKIHsKICAgICBpZiAoc2l6ZS5p
c051bGwoKSkKICAgICAgICAgcmV0dXJuIFFQaXhtYXAoKTsKLSAgICBzdGF0aWMgY29uc3QgUVN0
cmluZyBwcmVmaXggPSBRTGF0aW4xU3RyaW5nKCIkcXQtd2Via2l0LW1vYmlsZS10aGVtZS1jb21i
by0iKTsKICAgICBRUGl4bWFwIHJlc3VsdDsKLSAgICBRU3RyaW5nIGtleSA9IHByZWZpeCArICht
dWx0aXBsZSA/IFFMYXRpbjFTdHJpbmcoIm11bHRpcGxlLSIpIDogUUxhdGluMVN0cmluZygic2lt
cGxlLSIpKQotICAgICAgICArIFFTdHJpbmc6Om51bWJlcihzaXplLndpZHRoKCkpICsgUUxhdGlu
MVN0cmluZygiLSIpICsgUVN0cmluZzo6bnVtYmVyKHNpemUuaGVpZ2h0KCkpCi0gICAgICAgICsg
UUxhdGluMVN0cmluZygiLSIpICsgKGVuYWJsZWQgPyBRTGF0aW4xU3RyaW5nKCJvbiIpIDogUUxh
dGluMVN0cmluZygib2ZmIikpOwotCi0gICAgaWYgKCFRUGl4bWFwQ2FjaGU6OmZpbmQoa2V5LCBy
ZXN1bHQpKSB7CisgICAgS2V5SWRlbnRpZmllciBpZDsKKyAgICBpZC50eXBlID0gS2V5SWRlbnRp
Zmllcjo6Q29tYm9CdXR0b247CisgICAgaWQud2lkdGggPSBzaXplLndpZHRoKCk7CisgICAgaWQu
aGVpZ2h0ID0gc2l6ZS5oZWlnaHQoKTsKKyAgICBpZC50cmFpdDEgPSBtdWx0aXBsZTsKKyAgICBp
ZC50cmFpdDIgPSBlbmFibGVkOworCisgICAgaWYgKCFmaW5kQ2FjaGVkQ29udHJvbChpZCwgJnJl
c3VsdCkpIHsKICAgICAgICAgcmVzdWx0ID0gUVBpeG1hcChzaXplKTsKKyAgICAgICAgY29uc3Qg
cXJlYWwgYm9yZGVyID0gcGFpbnRlclNjYWxlKHBhaW50ZXIpOworICAgICAgICBjb25zdCBRU2l6
ZUYgcGFkZGluZygyICogYm9yZGVyLCAyICogYm9yZGVyKTsKKyAgICAgICAgQVNTRVJUKGlubmVy
U2l6ZSA+IHBhZGRpbmcudG9TaXplKCkpOworICAgICAgICBjb25zdCBRU2l6ZUYgaW5uZXJTaXpl
ID0gc2l6ZSAtIHBhZGRpbmc7CiAgICAgICAgIHJlc3VsdC5maWxsKFF0Ojp0cmFuc3BhcmVudCk7
CiAgICAgICAgIFFQYWludGVyIGNhY2hlUGFpbnRlcigmcmVzdWx0KTsKKyAgICAgICAgY2FjaGVQ
YWludGVyLnRyYW5zbGF0ZShib3JkZXIsIGJvcmRlcik7CiAgICAgICAgIGlmIChtdWx0aXBsZSkK
LSAgICAgICAgICAgIGRyYXdNdWx0aXBsZUNvbWJvQnV0dG9uKCZjYWNoZVBhaW50ZXIsIHNpemUs
IGVuYWJsZWQgPyBkYXJrQ29sb3IgOiBRdDo6bGlnaHRHcmF5KTsKKyAgICAgICAgICAgIGRyYXdN
dWx0aXBsZUNvbWJvQnV0dG9uKCZjYWNoZVBhaW50ZXIsIGlubmVyU2l6ZSwgZW5hYmxlZCA/IGRh
cmtDb2xvciA6IFF0OjpsaWdodEdyYXkpOwogICAgICAgICBlbHNlCi0gICAgICAgICAgICBkcmF3
U2ltcGxlQ29tYm9CdXR0b24oJmNhY2hlUGFpbnRlciwgc2l6ZSwgZW5hYmxlZCA/IGRhcmtDb2xv
ciA6IFF0OjpsaWdodEdyYXkpOwotICAgICAgICBRUGl4bWFwQ2FjaGU6Omluc2VydChrZXksIHJl
c3VsdCk7CisgICAgICAgICAgICBkcmF3U2ltcGxlQ29tYm9CdXR0b24oJmNhY2hlUGFpbnRlciwg
aW5uZXJTaXplLCBlbmFibGVkID8gZGFya0NvbG9yIDogUXQ6OmxpZ2h0R3JheSk7CisgICAgICAg
IGluc2VydEludG9DYWNoZShpZCwgcmVzdWx0KTsKICAgICB9CiAgICAgcmV0dXJuIHJlc3VsdDsK
IH0KQEAgLTMxNywxMCArMzYzLDEzIEBAIHZvaWQgU3R5bGVQYWludGVyTW9iaWxlOjpkcmF3TGlu
ZUVkaXQoY29uc3QgUVJlY3QmIHJlY3QsIGJvb2wgZm9jdXNlZCwgYm9vbCBlbmFiCiBRUGl4bWFw
IFN0eWxlUGFpbnRlck1vYmlsZTo6ZmluZExpbmVFZGl0KGNvbnN0IFFTaXplICYgc2l6ZSwgYm9v
bCBmb2N1c2VkKSBjb25zdAogewogICAgIFFQaXhtYXAgcmVzdWx0OwotICAgIHN0YXRpYyBjb25z
dCBRU3RyaW5nIHByZWZpeCA9IFFMYXRpbjFTdHJpbmcoIiRxdC13ZWJraXQtbW9iaWxlLXRoZW1l
LWxpbmVFZGl0LSIpOwotICAgIFFTdHJpbmcga2V5ID0gcHJlZml4ICsgUVN0cmluZzo6bnVtYmVy
KHNpemUud2lkdGgoKSkgKyBRTGF0aW4xU3RyaW5nKCJ4IikgKyBRU3RyaW5nOjpudW1iZXIoc2l6
ZS5oZWlnaHQoKSkKLSAgICAgICAgICAgICAgICAgICAgICArIChmb2N1c2VkID8gUUxhdGluMVN0
cmluZygiLWZvY3VzZWQiKSA6IFFTdHJpbmcoKSk7Ci0gICAgaWYgKCFRUGl4bWFwQ2FjaGU6OmZp
bmQoa2V5LCByZXN1bHQpKSB7CisgICAgS2V5SWRlbnRpZmllciBpZDsKKyAgICBpZC50eXBlID0g
S2V5SWRlbnRpZmllcjo6TGluZUVkaXQ7CisgICAgaWQud2lkdGggPSBzaXplLndpZHRoKCk7Cisg
ICAgaWQuaGVpZ2h0ID0gc2l6ZS5oZWlnaHQoKTsKKyAgICBpZC50cmFpdDEgPSBmb2N1c2VkOwor
CisgICAgaWYgKCFmaW5kQ2FjaGVkQ29udHJvbChpZCwgJnJlc3VsdCkpIHsKICAgICAgICAgY29u
c3QgaW50IGZvY3VzRnJhbWUgPSBwYWludGVyU2NhbGUocGFpbnRlcik7CiAgICAgICAgIHJlc3Vs
dCA9IFFQaXhtYXAoc2l6ZSArIFFTaXplKDIgKiBmb2N1c0ZyYW1lLCAyICogZm9jdXNGcmFtZSkp
OwogICAgICAgICByZXN1bHQuZmlsbChRdDo6dHJhbnNwYXJlbnQpOwpAQCAtMzMyLDcgKzM4MSw3
IEBAIFFQaXhtYXAgU3R5bGVQYWludGVyTW9iaWxlOjpmaW5kTGluZUVkaXQoY29uc3QgUVNpemUg
JiBzaXplLCBib29sIGZvY3VzZWQpIGNvbnN0CiAgICAgICAgICAgICBRUGVuIGZvY3VzUGVuKGhp
Z2hsaWdodENvbG9yLCBmb2N1c0ZyYW1lLCBRdDo6U29saWRMaW5lLCBRdDo6Um91bmRDYXAsIFF0
OjpSb3VuZEpvaW4pOwogICAgICAgICAgICAgZHJhd0NvbnRyb2xCYWNrZ3JvdW5kKCZjYWNoZVBh
aW50ZXIsIGZvY3VzUGVuLCByZWN0LCBRdDo6Tm9CcnVzaCk7CiAgICAgICAgIH0KLSAgICAgICAg
UVBpeG1hcENhY2hlOjppbnNlcnQoa2V5LCByZXN1bHQpOworICAgICAgICBpbnNlcnRJbnRvQ2Fj
aGUoaWQsIHJlc3VsdCk7CiAgICAgfQogICAgIHJldHVybiByZXN1bHQ7CiB9CkBAIC0zNjYsMTAg
KzQxNSwxMyBAQCB2b2lkIFN0eWxlUGFpbnRlck1vYmlsZTo6ZHJhd1B1c2hCdXR0b24oY29uc3Qg
UVJlY3QmIHJlY3QsIGJvb2wgc3Vua2VuLCBib29sIGVuYQogUVBpeG1hcCBTdHlsZVBhaW50ZXJN
b2JpbGU6OmZpbmRQdXNoQnV0dG9uKGNvbnN0IFFTaXplJiBzaXplLCBib29sIHN1bmtlbiwgYm9v
bCBlbmFibGVkKSBjb25zdAogewogICAgIFFQaXhtYXAgcmVzdWx0OwotICAgIHN0YXRpYyBjb25z
dCBRU3RyaW5nIHByZWZpeCA9IFFMYXRpbjFTdHJpbmcoIiRxdC13ZWJraXQtbW9iaWxlLXRoZW1l
LXB1c2hCdXR0b24tIik7Ci0gICAgUVN0cmluZyBrZXkgPSBwcmVmaXggKyBRU3RyaW5nOjpudW1i
ZXIoc2l6ZS53aWR0aCgpKSArIFFMYXRpbjFTdHJpbmcoIngiKSArIFFTdHJpbmc6Om51bWJlcihz
aXplLmhlaWdodCgpKQotICAgICAgICAgICAgICAgICAgICAgICsgKHN1bmtlbiA/IFFMYXRpbjFT
dHJpbmcoIi1zdW5rZW4iKSA6IFFTdHJpbmcoKSkgKyAoZW5hYmxlZCA/IFFMYXRpbjFTdHJpbmco
Ii1vbiIpIDogUVN0cmluZygpKTsKLSAgICBpZiAoIVFQaXhtYXBDYWNoZTo6ZmluZChrZXksIHJl
c3VsdCkpIHsKKyAgICBLZXlJZGVudGlmaWVyIGlkOworICAgIGlkLnR5cGUgPSBLZXlJZGVudGlm
aWVyOjpQdXNoQnV0dG9uOworICAgIGlkLndpZHRoID0gc2l6ZS53aWR0aCgpOworICAgIGlkLmhl
aWdodCA9IHNpemUuaGVpZ2h0KCk7CisgICAgaWQudHJhaXQxID0gc3Vua2VuOworICAgIGlkLnRy
YWl0MiA9IGVuYWJsZWQ7CisgICAgaWYgKCFmaW5kQ2FjaGVkQ29udHJvbChpZCwgJnJlc3VsdCkp
IHsKICAgICAgICAgY29uc3QgcXJlYWwgZHJvcFNoYWRvd1NpemUgPSBwYWludGVyU2NhbGUocGFp
bnRlcik7CiAgICAgICAgIHJlc3VsdCA9IFFQaXhtYXAoc2l6ZSk7CiAgICAgICAgIHJlc3VsdC5m
aWxsKFF0Ojp0cmFuc3BhcmVudCk7CkBAIC0zOTYsNyArNDQ4LDcgQEAgUVBpeG1hcCBTdHlsZVBh
aW50ZXJNb2JpbGU6OmZpbmRQdXNoQnV0dG9uKGNvbnN0IFFTaXplJiBzaXplLCBib29sIHN1bmtl
biwgYm9vbAogICAgICAgICAgICAgYnJ1c2ggPSBsaW5lYXJHcmFkaWVudDsKICAgICAgICAgfQog
ICAgICAgICBkcmF3Q29udHJvbEJhY2tncm91bmQoJmNhY2hlUGFpbnRlciwgYm9yZGVyUGVuKHBh
aW50ZXIpLCByZWN0LCBicnVzaCk7Ci0gICAgICAgIFFQaXhtYXBDYWNoZTo6aW5zZXJ0KGtleSwg
cmVzdWx0KTsKKyAgICAgICAgaW5zZXJ0SW50b0NhY2hlKGlkLCByZXN1bHQpOwogICAgIH0KICAg
ICByZXR1cm4gcmVzdWx0OwogfQpAQCAtNDA3LDI4ICs0NTksMzEgQEAgdm9pZCBTdHlsZVBhaW50
ZXJNb2JpbGU6OmRyYXdDb21ib0JveChjb25zdCBRUmVjdCYgcmVjdCwgYm9vbCBtdWx0aXBsZSwg
Ym9vbCBlbmEKICAgICBpZiAocHVzaEJ1dHRvbi5pc051bGwoKSkKICAgICAgICAgcmV0dXJuOwog
ICAgIHBhaW50ZXItPmRyYXdQaXhtYXAocmVjdCwgcHVzaEJ1dHRvbik7Ci0gICAgUVJlY3QgdGFy
Z2V0UmVjdChRUG9pbnQoMCwgMCksIGdldEJ1dHRvbkltYWdlU2l6ZShyZWN0LmhlaWdodCgpIC0g
MSwgbXVsdGlwbGUpKTsKLSAgICBjb25zdCBRUG9pbnQgYnV0dG9uQ2VudGVyKHJlY3QucmlnaHQo
KSAtIGFycm93Qm94V2lkdGggLyAyLCByZWN0LmhlaWdodCgpIC8gMiAtIDEpOworICAgIFFSZWN0
RiB0YXJnZXRSZWN0KFFQb2ludEYoMCwgMCksIGdldEJ1dHRvbkltYWdlU2l6ZShyZWN0LmhlaWdo
dCgpIC0gMSwgbXVsdGlwbGUpKTsKKyAgICBjb25zdCBRUG9pbnRGIGJ1dHRvbkNlbnRlcihyZWN0
LnJpZ2h0KCkgLSBhcnJvd0JveFdpZHRoIC8gMiwgcmVjdC50b3AoKSArIChyZWN0LmhlaWdodCgp
IC0gMSkgLyAyKTsKICAgICB0YXJnZXRSZWN0Lm1vdmVDZW50ZXIoYnV0dG9uQ2VudGVyKTsKLSAg
ICBRUGl4bWFwIHBpYyA9IGZpbmRDb21ib0J1dHRvbihzaXplRm9yUGFpbnRlclNjYWxlKHRhcmdl
dFJlY3QpLCBtdWx0aXBsZSwgZW5hYmxlZCk7CisgICAgUVBpeG1hcCBwaWMgPSBmaW5kQ29tYm9C
dXR0b24oc2l6ZUZvclBhaW50ZXJTY2FsZSh0YXJnZXRSZWN0LnRvUmVjdCgpKSwgbXVsdGlwbGUs
IGVuYWJsZWQpOwogICAgIGlmIChwaWMuaXNOdWxsKCkpCiAgICAgICAgIHJldHVybjsKIAotICAg
IHBhaW50ZXItPmRyYXdQaXhtYXAodGFyZ2V0UmVjdCwgcGljKTsKKyAgICBwYWludGVyLT5kcmF3
UGl4bWFwKHRhcmdldFJlY3QudG9SZWN0KCksIHBpYyk7CiB9CiAKIHZvaWQgU3R5bGVQYWludGVy
TW9iaWxlOjpkcmF3UHJvZ3Jlc3MoY29uc3QgUVJlY3QmIHJlY3QsIGRvdWJsZSBwcm9ncmVzcywg
Ym9vbCBsZWZ0VG9SaWdodCwgYm9vbCBhbmltYXRlZCkgY29uc3QKIHsKLSAgICBzdGF0aWMgY29u
c3QgUVN0cmluZyBwcmVmaXggPSBRTGF0aW4xU3RyaW5nKCIkcXQtd2Via2l0LW1vYmlsZS10aGVt
ZS1wcm9ncmVzcy0iKTsKICAgICBjb25zdCBpbnQgYm9yZGVyID0gcmVjdC5oZWlnaHQoKSAvIDQ7
CiAgICAgY29uc3QgUVJlY3QgdGFyZ2V0UmVjdCA9IHJlY3QuYWRqdXN0ZWQoMCwgYm9yZGVyLCAw
LCAtYm9yZGVyKTsKIAogICAgIFFQaXhtYXAgcmVzdWx0OwogICAgIGNvbnN0IFFTaXplIGltYWdl
U2l6ZSA9IHNpemVGb3JQYWludGVyU2NhbGUodGFyZ2V0UmVjdCk7Ci0gICAgUVN0cmluZyBrZXkg
PSBwcmVmaXggKyBRU3RyaW5nOjpudW1iZXIoaW1hZ2VTaXplLndpZHRoKCkpICsgUUxhdGluMVN0
cmluZygiLSIpICsgUVN0cmluZzo6bnVtYmVyKGltYWdlU2l6ZS5oZWlnaHQoKSkKLSAgICAgICAg
ICAgICsgUUxhdGluMVN0cmluZygiLSIpICsgUVN0cmluZzo6bnVtYmVyKHByb2dyZXNzLCAnZics
IDMpICsgKGFuaW1hdGVkPyBRTGF0aW4xU3RyaW5nKCItYW5pbSIpIDogUVN0cmluZygpKQotICAg
ICAgICAgICAgICAgICAgICAgICAgICsgKCghYW5pbWF0ZWQgJiYgIWxlZnRUb1JpZ2h0KSA/IFFM
YXRpbjFTdHJpbmcoIi1ydGwiKSA6IFFTdHJpbmcoKSk7Ci0gICAgaWYgKCFRUGl4bWFwQ2FjaGU6
OmZpbmQoa2V5LCByZXN1bHQpKSB7CisgICAgS2V5SWRlbnRpZmllciBpZDsKKyAgICBpZC50eXBl
ID0gS2V5SWRlbnRpZmllcjo6UHJvZ3Jlc3M7CisgICAgaWQud2lkdGggPSBpbWFnZVNpemUud2lk
dGgoKTsKKyAgICBpZC5oZWlnaHQgPSBpbWFnZVNpemUuaGVpZ2h0KCk7CisgICAgaWQudHJhaXQx
ID0gYW5pbWF0ZWQ7CisgICAgaWQudHJhaXQyID0gKCFhbmltYXRlZCAmJiAhbGVmdFRvUmlnaHQp
OworICAgIGlkLnRyYWl0MyA9IHByb2dyZXNzICogMTAwOworICAgIGlmICghZmluZENhY2hlZENv
bnRyb2woaWQsICZyZXN1bHQpKSB7CiAgICAgICAgIGlmIChpbWFnZVNpemUuaXNOdWxsKCkpCiAg
ICAgICAgICAgICByZXR1cm47CiAgICAgICAgIHJlc3VsdCA9IFFQaXhtYXAoaW1hZ2VTaXplKTsK
QEAgLTQ2MywyNSArNTE4LDI4IEBAIHZvaWQgU3R5bGVQYWludGVyTW9iaWxlOjpkcmF3UHJvZ3Jl
c3MoY29uc3QgUVJlY3QmIHJlY3QsIGRvdWJsZSBwcm9ncmVzcywgYm9vbCBsCiAgICAgICAgICAg
ICByYWRpdXMgPSByYWRpdXNGYWN0b3IgKiBwcm9ncmVzc1JlY3QuaGVpZ2h0KCk7CiAgICAgICAg
ICAgICBwYWludGVyLmRyYXdSb3VuZGVkUmVjdChwcm9ncmVzc1JlY3QsIHJhZGl1cywgcmFkaXVz
KTsKICAgICAgICAgfQotICAgICAgICBRUGl4bWFwQ2FjaGU6Omluc2VydChrZXksIHJlc3VsdCk7
CisgICAgICAgIGluc2VydEludG9DYWNoZShpZCwgcmVzdWx0KTsKICAgICB9CiAgICAgcGFpbnRl
ci0+ZHJhd1BpeG1hcCh0YXJnZXRSZWN0LCByZXN1bHQpOwogfQogCiB2b2lkIFN0eWxlUGFpbnRl
ck1vYmlsZTo6ZHJhd1NsaWRlclRodW1iKGNvbnN0IFFSZWN0ICYgcmVjdCwgYm9vbCBwcmVzc2Vk
KSBjb25zdAogewotICAgIHN0YXRpYyBjb25zdCBRU3RyaW5nIHByZWZpeCA9IFFMYXRpbjFTdHJp
bmcoIiRxdC13ZWJraXQtbW9iaWxlLXRoZW1lLXNsaWRlci10aHVtYi0iKTsKICAgICBRUGl4bWFw
IHJlc3VsdDsKICAgICBjb25zdCBRU2l6ZSBzaXplID0gc2l6ZUZvclBhaW50ZXJTY2FsZShyZWN0
KTsKLSAgICBjb25zdCBRU3RyaW5nIGtleSA9IHByZWZpeCArIFFTdHJpbmc6Om51bWJlcihzaXpl
LndpZHRoKCkpOwotICAgIGlmICghUVBpeG1hcENhY2hlOjpmaW5kKGtleSwgJnJlc3VsdCkpIHsK
KyAgICBLZXlJZGVudGlmaWVyIGlkOworICAgIGlkLnR5cGUgPSBLZXlJZGVudGlmaWVyOjpTbGlk
ZXJUaHVtYjsKKyAgICBpZC53aWR0aCA9IHNpemUud2lkdGgoKTsKKyAgICBpZC5oZWlnaHQgPSBz
aXplLmhlaWdodCgpOworICAgIGlkLnRyYWl0MSA9IHByZXNzZWQ7CisgICAgaWYgKCFmaW5kQ2Fj
aGVkQ29udHJvbChpZCwgJnJlc3VsdCkpIHsKICAgICAgICAgaWYgKHNpemUuaXNOdWxsKCkpCiAg
ICAgICAgICAgICByZXR1cm47CiAgICAgICAgIHJlc3VsdCA9IFFQaXhtYXAoc2l6ZSk7CiAgICAg
ICAgIHJlc3VsdC5maWxsKFF0Ojp0cmFuc3BhcmVudCk7CiAgICAgICAgIFFQYWludGVyIGNhY2hl
UGFpbnRlcigmcmVzdWx0KTsKICAgICAgICAgZHJhd0NvbnRyb2xCYWNrZ3JvdW5kKCZjYWNoZVBh
aW50ZXIsIGJvcmRlclBlbihwYWludGVyKSwgUVJlY3QoUVBvaW50KDAsIDApLCBzaXplKSwgcHJl
c3NlZD8gUXQ6OmxpZ2h0R3JheSA6IGJ1dHRvbkdyYWRpZW50Qm90dG9tKTsKLSAgICAgICAgUVBp
eG1hcENhY2hlOjppbnNlcnQoa2V5LCByZXN1bHQpOworICAgICAgICBpbnNlcnRJbnRvQ2FjaGUo
aWQsIHJlc3VsdCk7CiAgICAgfQogICAgIHBhaW50ZXItPmRyYXdQaXhtYXAocmVjdCwgcmVzdWx0
KTsKIH0KQEAgLTY2MSw2ICs3MTksOCBAQCBib29sIFJlbmRlclRoZW1lUXRNb2JpbGU6OnBhaW50
VGV4dEZpZWxkKFJlbmRlck9iamVjdCogbywgY29uc3QgUGFpbnRJbmZvJiBpLCBjbwogCiAgICAg
Ly8gTm93IHBhaW50IHRoZSB0ZXh0IGZpZWxkLgogICAgIGlmIChhcHBlYXJhbmNlID09IFRleHRB
cmVhUGFydCkgeworICAgICAgICBjb25zdCBib29sIHByZXZpb3VzQW50aWFsaWFzaW5nID0gcC5w
YWludGVyLT50ZXN0UmVuZGVySGludChRUGFpbnRlcjo6QW50aWFsaWFzaW5nKTsKKyAgICAgICAg
cC5wYWludGVyLT5zZXRSZW5kZXJIaW50KFFQYWludGVyOjpBbnRpYWxpYXNpbmcpOwogICAgICAg
ICBwLnBhaW50ZXItPnNldFBlbihib3JkZXJQZW4oKSk7CiAgICAgICAgIHAucGFpbnRlci0+c2V0
QnJ1c2goUXQ6OndoaXRlKTsKICAgICAgICAgY29uc3QgaW50IHJhZGl1cyA9IGNoZWNrQm94V2lk
dGggKiByYWRpdXNGYWN0b3I7CkBAIC02NzIsNyArNzMyLDcgQEAgYm9vbCBSZW5kZXJUaGVtZVF0
TW9iaWxlOjpwYWludFRleHRGaWVsZChSZW5kZXJPYmplY3QqIG8sIGNvbnN0IFBhaW50SW5mbyYg
aSwgY28KICAgICAgICAgICAgIHAucGFpbnRlci0+c2V0QnJ1c2goUXQ6Ok5vQnJ1c2gpOwogICAg
ICAgICAgICAgcC5wYWludGVyLT5kcmF3Um91bmRlZFJlY3QociwgcmFkaXVzLCByYWRpdXMpOwog
ICAgICAgICB9Ci0KKyAgICAgICAgcC5wYWludGVyLT5zZXRSZW5kZXJIaW50KFFQYWludGVyOjpB
bnRpYWxpYXNpbmcsIHByZXZpb3VzQW50aWFsaWFzaW5nKTsKICAgICB9IGVsc2UKICAgICAgICAg
cC5kcmF3TGluZUVkaXQociwgaXNGb2N1c2VkKG8pLCBpc0VuYWJsZWQobykpOwogICAgIHJldHVy
biBmYWxzZTsKQEAgLTcwMiwxMiArNzYyLDcgQEAgYm9vbCBSZW5kZXJUaGVtZVF0TW9iaWxlOjpw
YWludE1lbnVMaXN0KFJlbmRlck9iamVjdCogbywgY29uc3QgUGFpbnRJbmZvJiBpLCBjb24KICAg
ICBpZiAoIXAuaXNWYWxpZCgpKQogICAgICAgICByZXR1cm4gdHJ1ZTsKIAotICAgIGNvbnN0IFFQ
b2ludCB0b3BMZWZ0ID0gci5sb2NhdGlvbigpOwotICAgIHAucGFpbnRlci0+dHJhbnNsYXRlKHRv
cExlZnQpOwotICAgIGNvbnN0IFFSZWN0IHJlY3QoUVBvaW50KDAsIDApLCByLnNpemUoKSk7Ci0K
LSAgICBwLmRyYXdDb21ib0JveChyZWN0LCBjaGVja011bHRpcGxlKG8pLCBpc0VuYWJsZWQobykp
OwotICAgIHAucGFpbnRlci0+dHJhbnNsYXRlKC10b3BMZWZ0KTsKKyAgICBwLmRyYXdDb21ib0Jv
eChyLCBjaGVja011bHRpcGxlKG8pLCBpc0VuYWJsZWQobykpOwogICAgIHJldHVybiBmYWxzZTsK
IH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vcXQvUmVuZGVyVGhlbWVR
dE1vYmlsZS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vcXQvUmVuZGVyVGhlbWVRdE1vYmls
ZS5oCmluZGV4IDllOWI4MTQzZWNmZWIwZjY2OThlZGQwYjEyMWUxZmEzMmNmZjQxMTAuLmM1N2Ex
ODAyOWUyZTkxYWU5MzE5NDc4MDY4ZWE2YTEwMzk0NTI5MmQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL3F0L1JlbmRlclRoZW1lUXRNb2JpbGUuaAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9xdC9SZW5kZXJUaGVtZVF0TW9iaWxlLmgKQEAgLTI1LDEzICsyNSwxNiBA
QAogI2luY2x1ZGUgIlJlbmRlclRoZW1lUXQuaCIKIAogI2luY2x1ZGUgPFFCcnVzaD4KKyNpbmNs
dWRlIDxRSGFzaD4KKyNpbmNsdWRlIDxRUGl4bWFwQ2FjaGU+CiAKIFFUX0JFR0lOX05BTUVTUEFD
RQogY2xhc3MgUUNvbG9yOwotY2xhc3MgUVBpeG1hcDsKIGNsYXNzIFFTaXplOwogUVRfRU5EX05B
TUVTUEFDRQogCit0eXBlZGVmIFFQaXhtYXBDYWNoZTo6S2V5IENhY2hlS2V5OworCiBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAKIGNsYXNzIFJlbmRlclRoZW1lUXRNb2JpbGUgOiBwdWJsaWMgUmVuZGVy
VGhlbWVRdCB7CkBAIC04Myw2ICs4Niw0NCBAQCBwcml2YXRlOgogICAgIHZvaWQgc2V0UGFsZXR0
ZUZyb21QYWdlQ2xpZW50SWZFeGlzdHMoUVBhbGV0dGUmKSBjb25zdDsKIH07CiAKK3N0cnVjdCBL
ZXlJZGVudGlmaWVyIHsKKworICAgIEtleUlkZW50aWZpZXIoKQorICAgICAgICA6IHR5cGUoVW5k
ZWZpbmVkKQorICAgICAgICAsIHdpZHRoKDApCisgICAgICAgICwgaGVpZ2h0KDApCisgICAgICAg
ICwgdHJhaXQxKDApCisgICAgICAgICwgdHJhaXQyKDApCisgICAgICAgICwgdHJhaXQzKDApCisg
ICAgeworICAgIH0KKworICAgIGVudW0gQ29udHJvbFR5cGUgeworICAgICAgICBVbmRlZmluZWQs
CisgICAgICAgIENoZWNrQm94LAorICAgICAgICBSYWRpbywKKyAgICAgICAgQ29tYm9CdXR0b24s
CisgICAgICAgIExpbmVFZGl0LAorICAgICAgICBQdXNoQnV0dG9uLAorICAgICAgICBQcm9ncmVz
cywKKyAgICAgICAgU2xpZGVyVGh1bWIKKyAgICB9OworCisgICAgQ29udHJvbFR5cGUgdHlwZSA6
IDM7CisgICAgdWludCB3aWR0aCA6IDExOworICAgIHVpbnQgaGVpZ2h0IDogOTsKKyAgICB1aW50
IHRyYWl0MSA6IDE7CisgICAgdWludCB0cmFpdDIgOiAxOworICAgIHVpbnQgdHJhaXQzIDogNzsK
KworICAgIGlubGluZSBib29sIG9wZXJhdG9yPT0oY29uc3QgS2V5SWRlbnRpZmllciYgb3RoZXIp
IGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gKHR5cGUgPT0gb3RoZXIudHlwZSAmJiB3aWR0
aCA9PSBvdGhlci53aWR0aAorICAgICAgICAgICAgICAgICYmIGhlaWdodCA9PSBvdGhlci5oZWln
aHQgJiYgdHJhaXQxID09IG90aGVyLnRyYWl0MQorICAgICAgICAgICAgICAgICYmIHRyYWl0MiA9
PSBvdGhlci50cmFpdDIgJiYgdHJhaXQzID09IG90aGVyLnRyYWl0Myk7CisgICAgfQorfTsKKwog
Y2xhc3MgU3R5bGVQYWludGVyTW9iaWxlIDogcHVibGljIFN0eWxlUGFpbnRlciB7CiAKIHB1Ymxp
YzoKQEAgLTEwNSw5ICsxNDYsOSBAQCBwcml2YXRlOgogICAgIHZvaWQgZHJhd1JhZGlvKFFQYWlu
dGVyKiwgY29uc3QgUVNpemUmLCBib29sIGNoZWNrZWQsIGJvb2wgZW5hYmxlZCkgY29uc3Q7CiAg
ICAgUVBpeG1hcCBmaW5kUmFkaW8oY29uc3QgUVNpemUmLCBib29sIGNoZWNrZWQsIGJvb2wgZW5h
YmxlZCkgY29uc3Q7CiAKLSAgICBRU2l6ZSBnZXRCdXR0b25JbWFnZVNpemUoaW50ICwgYm9vbCBt
dWx0aXBsZSkgY29uc3Q7Ci0gICAgdm9pZCBkcmF3U2ltcGxlQ29tYm9CdXR0b24oUVBhaW50ZXIq
LCBjb25zdCBRU2l6ZSYsIGNvbnN0IFFDb2xvciYpIGNvbnN0OwotICAgIHZvaWQgZHJhd011bHRp
cGxlQ29tYm9CdXR0b24oUVBhaW50ZXIqLCBjb25zdCBRU2l6ZSYsIGNvbnN0IFFDb2xvciYpIGNv
bnN0OworICAgIFFTaXplRiBnZXRCdXR0b25JbWFnZVNpemUoaW50ICwgYm9vbCBtdWx0aXBsZSkg
Y29uc3Q7CisgICAgdm9pZCBkcmF3U2ltcGxlQ29tYm9CdXR0b24oUVBhaW50ZXIqLCBjb25zdCBR
U2l6ZUYmLCBjb25zdCBRQ29sb3ImKSBjb25zdDsKKyAgICB2b2lkIGRyYXdNdWx0aXBsZUNvbWJv
QnV0dG9uKFFQYWludGVyKiwgY29uc3QgUVNpemVGJiwgY29uc3QgUUNvbG9yJikgY29uc3Q7CiAg
ICAgUVBpeG1hcCBmaW5kQ29tYm9CdXR0b24oY29uc3QgUVNpemUmLCBib29sIG11bHRpcGxlLCBi
b29sIGVuYWJsZWQpIGNvbnN0OwogCiAgICAgUVBpeG1hcCBmaW5kTGluZUVkaXQoY29uc3QgUVNp
emUmLCBib29sIGZvY3VzZWQpIGNvbnN0OwpAQCAtMTE1LDkgKzE1NiwxMiBAQCBwcml2YXRlOgog
CiAgICAgUVNpemUgc2l6ZUZvclBhaW50ZXJTY2FsZShjb25zdCBRUmVjdCYpIGNvbnN0OwogCisg
ICAgc3RhdGljIGJvb2wgZmluZENhY2hlZENvbnRyb2woY29uc3QgS2V5SWRlbnRpZmllciYsIFFQ
aXhtYXAqKTsKKyAgICBzdGF0aWMgdm9pZCBpbnNlcnRJbnRvQ2FjaGUoY29uc3QgS2V5SWRlbnRp
ZmllciYsIGNvbnN0IFFQaXhtYXAmKTsKKwogICAgIGJvb2wgbV9wcmV2aW91c1Ntb290aFBpeG1h
cFRyYW5zZm9ybTsKIAotICAgIFFfRElTQUJMRV9DT1BZKFN0eWxlUGFpbnRlck1vYmlsZSk7Cisg
ICAgUV9ESVNBQkxFX0NPUFkoU3R5bGVQYWludGVyTW9iaWxlKQogfTsKIAogfQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>121100</attachid>
            <date>2012-01-04 04:42:48 -0800</date>
            <delta_ts>2012-01-12 03:31:36 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-75010-20120104134337.patch</filename>
            <type>text/plain</type>
            <size>21577</size>
            <attacher name="Pierre Rossi">pierre.rossi</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTA0MDI1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMjcwYjU5ZTlhMzI4NThl
ZDc1MTY1M2FhZDQxNGExYjcwMGU3NGVmMi4uMjI3NzM1ZjJmMTUyZTI3YTllZjY0NjJkYTA3Yjhm
OTI4ZjRjOGY4NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDM4IEBACisyMDEyLTAxLTA0ICBQaWVy
cmUgUm9zc2kgIDxwaWVycmUucm9zc2lAZ21haWwuY29tPgorCisgICAgICAgIFtRdF0gQXZvaWQg
c3RyaW5nIG9wZXJhdGlvbnMgaW4gbW9iaWxlIHRoZW1lJ3MgY2FjaGluZyBtZWNoYW5pc20KKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTc1MDEwCisKKyAg
ICAgICAgVGhlIHN0cmluZyBvcGVyYXRpb25zIGNvbnN0YW50bHkgcGVyZm9ybWVkIGluIHRoZSBt
b2JpbGUgdGhlbWUKKyAgICAgICAgdG8gZmV0Y2ggb3IgcHV0IGNvbnRyb2xzIGluIHRoZSBwaXht
YXAgY2FjaGUgY2FuIGJlIHByZXR0eSBleHBlbnNpdmUuCisgICAgICAgIFRoZSBuZXcgbWVjaGFu
aXNtIGhhcm5lc3NlcyB0aGUgUVBpeG1hcENhY2hlOjpLZXkgQVBJIGluc3RlYWQuCisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgTm8gbmV3IHRlc3RzLCBp
bnRlcm5hbCByZWZhY3RvcmluZy4KKworICAgICAgICAqIHBsYXRmb3JtL3F0L1JlbmRlclRoZW1l
UXRNb2JpbGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6cUhhc2gpOgorICAgICAgICAoV2ViQ29y
ZTo6U3R5bGVQYWludGVyTW9iaWxlOjpmaW5kQ2FjaGVkQ29udHJvbCk6CisgICAgICAgIChXZWJD
b3JlOjpTdHlsZVBhaW50ZXJNb2JpbGU6Omluc2VydEludG9DYWNoZSk6CisgICAgICAgIChXZWJD
b3JlOjpTdHlsZVBhaW50ZXJNb2JpbGU6OmZpbmRDaGVja0JveCk6CisgICAgICAgIChXZWJDb3Jl
OjpTdHlsZVBhaW50ZXJNb2JpbGU6OmRyYXdSYWRpbyk6CisgICAgICAgIChXZWJDb3JlOjpTdHls
ZVBhaW50ZXJNb2JpbGU6OmZpbmRSYWRpbyk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVBhaW50
ZXJNb2JpbGU6OmRyYXdNdWx0aXBsZUNvbWJvQnV0dG9uKToKKyAgICAgICAgKFdlYkNvcmU6OlN0
eWxlUGFpbnRlck1vYmlsZTo6ZHJhd1NpbXBsZUNvbWJvQnV0dG9uKToKKyAgICAgICAgKFdlYkNv
cmU6OlN0eWxlUGFpbnRlck1vYmlsZTo6Z2V0QnV0dG9uSW1hZ2VTaXplKToKKyAgICAgICAgKFdl
YkNvcmU6OlN0eWxlUGFpbnRlck1vYmlsZTo6ZmluZENvbWJvQnV0dG9uKToKKyAgICAgICAgKFdl
YkNvcmU6OlN0eWxlUGFpbnRlck1vYmlsZTo6ZmluZExpbmVFZGl0KToKKyAgICAgICAgKFdlYkNv
cmU6OlN0eWxlUGFpbnRlck1vYmlsZTo6ZmluZFB1c2hCdXR0b24pOgorICAgICAgICAoV2ViQ29y
ZTo6U3R5bGVQYWludGVyTW9iaWxlOjpkcmF3Q29tYm9Cb3gpOgorICAgICAgICAoV2ViQ29yZTo6
U3R5bGVQYWludGVyTW9iaWxlOjpkcmF3UHJvZ3Jlc3MpOgorICAgICAgICAoV2ViQ29yZTo6U3R5
bGVQYWludGVyTW9iaWxlOjpkcmF3U2xpZGVyVGh1bWIpOgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyVGhlbWVRdE1vYmlsZTo6cGFpbnRUZXh0RmllbGQpOgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyVGhlbWVRdE1vYmlsZTo6cGFpbnRNZW51TGlzdCk6CisgICAgICAgICogcGxhdGZvcm0vcXQv
UmVuZGVyVGhlbWVRdE1vYmlsZS5oOgorICAgICAgICAoV2ViQ29yZTo6S2V5SWRlbnRpZmllcjo6
S2V5SWRlbnRpZmllcik6CisgICAgICAgIChXZWJDb3JlOjpLZXlJZGVudGlmaWVyOjpvcGVyYXRv
cj09KToKKwogMjAxMi0wMS0wMyAgQWRhbSBCYXJ0aCAgPGFiYXJ0aEB3ZWJraXQub3JnPgogCiAg
ICAgICAgIEhUTUxDb25zdHJ1Y3Rpb25TaXRlOjphdHRhY2ggc2hvdWxkbid0IHJldHVybiBhIHZh
bHVlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9xdC9SZW5kZXJUaGVtZVF0
TW9iaWxlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3F0L1JlbmRlclRoZW1lUXRNb2Jp
bGUuY3BwCmluZGV4IGNhNDdjZjkzZGEwNGMzOTU4ZGMxYjRjOTI0MzdjNzY0M2NiZDBkYWMuLjgz
N2RkMGU5YmRlNDU2OWIxZGVkOWY3NjZlODI5YjZiZjI0Y2ZlYjggMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL3F0L1JlbmRlclRoZW1lUXRNb2JpbGUuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL3F0L1JlbmRlclRoZW1lUXRNb2JpbGUuY3BwCkBAIC02Myw2ICs2
Myw3IEBAIHN0YXRpYyBjb25zdCBpbnQgcmFkaW9XaWR0aCA9IDIxOwogc3RhdGljIGNvbnN0IGlu
dCBzbGlkZXJTaXplID0gMTk7CiBzdGF0aWMgY29uc3QgaW50IGJ1dHRvbkhlaWdodFJhdGlvID0g
MS41OwogCitzdGF0aWMgY29uc3QgZmxvYXQgbXVsdGlwbGVDb21ib0RvdHNPZmZzZXRGYWN0b3Ig
PSAxLjg7CiBzdGF0aWMgY29uc3QgZmxvYXQgYnV0dG9uUGFkZGluZ0xlZnQgPSAxODsKIHN0YXRp
YyBjb25zdCBmbG9hdCBidXR0b25QYWRkaW5nUmlnaHQgPSAxODsKIHN0YXRpYyBjb25zdCBmbG9h
dCBidXR0b25QYWRkaW5nVG9wID0gMjsKQEAgLTgwLDYgKzgxLDE4IEBAIHN0YXRpYyBjb25zdCBR
Q29sb3IgaGlnaGxpZ2h0Q29sb3IoMTYsIDEyOCwgMjIxKTsKIHN0YXRpYyBjb25zdCBRQ29sb3Ig
YnV0dG9uR3JhZGllbnRCb3R0b20oMjQ1LCAyNDUsIDI0NSk7CiBzdGF0aWMgY29uc3QgUUNvbG9y
IHNoYWRvd0NvbG9yKDgwLCA4MCwgODAsIDE2MCk7CiAKK3N0YXRpYyBRSGFzaDxLZXlJZGVudGlm
aWVyLCBDYWNoZUtleT4gY2FjaGVLZXlzOworCit1aW50IHFIYXNoKGNvbnN0IEtleUlkZW50aWZp
ZXImIGlkKQoreworICAgIGNvbnN0IHF1aW50MzIgdmFsdWUgPSBpZC50cmFpdDEgKyAoaWQudHJh
aXQyIDw8IDEpICsgKHVpbnQoaWQudHlwZSkgPDwgMikgKyAoaWQuaGVpZ2h0IDw8IDUpICsgKGlk
LndpZHRoIDw8IDE0KSArIChpZC50cmFpdDMgPDwgMjUpOworICAgIGNvbnN0IHVuc2lnbmVkIGNo
YXIqIHAgPSByZWludGVycHJldF9jYXN0PGNvbnN0IHVuc2lnbmVkIGNoYXIqPigmdmFsdWUpOwor
ICAgIHVpbnQgaGFzaCA9IDA7CisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCA0OyArK2kpCisgICAg
ICAgIGhhc2ggXj0gKGhhc2ggPDwgNSkgKyAoaGFzaCA+PiAyKSArIHBbaV07CisgICAgcmV0dXJu
IGhhc2g7Cit9CisKIHN0YXRpYyB2b2lkIGRyYXdDb250cm9sQmFja2dyb3VuZChRUGFpbnRlciog
cGFpbnRlciwgY29uc3QgUVBlbiYgcGVuLCBjb25zdCBRUmVjdCYgcmVjdCwgY29uc3QgUUJydXNo
JiBicnVzaCkKIHsKICAgICBRUGVuIG9sZFBlbiA9IHBhaW50ZXItPnBlbigpOwpAQCAtMTUwLDYg
KzE2MywyNyBAQCBTdHlsZVBhaW50ZXJNb2JpbGU6On5TdHlsZVBhaW50ZXJNb2JpbGUoKQogICAg
IHBhaW50ZXItPnNldFJlbmRlckhpbnRzKFFQYWludGVyOjpTbW9vdGhQaXhtYXBUcmFuc2Zvcm0s
IG1fcHJldmlvdXNTbW9vdGhQaXhtYXBUcmFuc2Zvcm0pOwogfQogCitib29sIFN0eWxlUGFpbnRl
ck1vYmlsZTo6ZmluZENhY2hlZENvbnRyb2woY29uc3QgS2V5SWRlbnRpZmllciYga2V5SWQsIFFQ
aXhtYXAqIHJlc3VsdCkKK3sKKyAgICBRSGFzaDxLZXlJZGVudGlmaWVyLCBDYWNoZUtleT46Okl0
ZXJhdG9yIGl0ID0gY2FjaGVLZXlzLmZpbmQoa2V5SWQpOworICAgIGlmIChpdCA9PSBjYWNoZUtl
eXMuZW5kKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBjb25zdCBib29sIHJldCA9IFFQ
aXhtYXBDYWNoZTo6ZmluZCgqaXQsIHJlc3VsdCk7CisgICAgaWYgKCFyZXQpCisgICAgICAgIGNh
Y2hlS2V5cy5lcmFzZShpdCk7CisgICAgcmV0dXJuIHJldDsKK30KKwordm9pZCBTdHlsZVBhaW50
ZXJNb2JpbGU6Omluc2VydEludG9DYWNoZShjb25zdCBLZXlJZGVudGlmaWVyJiBrZXlJZCwgY29u
c3QgUVBpeG1hcCYgcGl4bWFwKQoreworICAgIEFTU0VSVChrZXlJZC50eXBlKTsKKyAgICBjb25z
dCBpbnQgc2l6ZSA9IHBpeG1hcC53aWR0aCgpICogcGl4bWFwLmhlaWdodCgpICogcGl4bWFwLmRl
cHRoKCkgLyA4MTkyOworICAgIC8vIERvbid0IGNhY2hlIHBpeG1hcHMgb3ZlciA1MTIgS0I7Cisg
ICAgaWYgKHNpemUgPiA1MTIpCisgICAgICAgIHJldHVybjsKKyAgICBjYWNoZUtleXMuaW5zZXJ0
KGtleUlkLCBRUGl4bWFwQ2FjaGU6Omluc2VydChwaXhtYXApKTsKK30KKwogdm9pZCBTdHlsZVBh
aW50ZXJNb2JpbGU6OmRyYXdDaGVja2FibGVCYWNrZ3JvdW5kKFFQYWludGVyKiBwYWludGVyLCBj
b25zdCBRUmVjdCYgcmVjdCwgYm9vbCBjaGVja2VkLCBib29sIGVuYWJsZWQpIGNvbnN0CiB7CiAg
ICAgUUJydXNoIGJydXNoOwpAQCAtMTk2LDEwICsyMzAsMTIgQEAgUVBpeG1hcCBTdHlsZVBhaW50
ZXJNb2JpbGU6OmZpbmRDaGVja0JveChjb25zdCBRU2l6ZSYgc2l6ZSwgYm9vbCBjaGVja2VkLCBi
b29sIGUKIHsKICAgICBBU1NFUlQoc2l6ZS53aWR0aCgpID09IHNpemUuaGVpZ2h0KCkpOwogICAg
IFFQaXhtYXAgcmVzdWx0OwotICAgIHN0YXRpYyBjb25zdCBRU3RyaW5nIHByZWZpeCA9IFFMYXRp
bjFTdHJpbmcoIiRxdC13ZWJraXQtbW9iaWxlLXRoZW1lLWNoZWNrYm94LSIpOwotICAgIFFTdHJp
bmcga2V5ID0gcHJlZml4ICsgUVN0cmluZzo6bnVtYmVyKHNpemUud2lkdGgoKSkgKyBRTGF0aW4x
U3RyaW5nKCItIikgKyAoZW5hYmxlZCA/IFFMYXRpbjFTdHJpbmcoIm9uIikgOiBRTGF0aW4xU3Ry
aW5nKCJvZmYiKSkKLSAgICAgICAgICAgICAgICAgICsgKGNoZWNrZWQgPyBRTGF0aW4xU3RyaW5n
KCItY2hlY2tlZCIpIDogUVN0cmluZygpKTsKLSAgICBpZiAoIVFQaXhtYXBDYWNoZTo6ZmluZChr
ZXksIHJlc3VsdCkpIHsKKyAgICBLZXlJZGVudGlmaWVyIGlkOworICAgIGlkLnR5cGUgPSBLZXlJ
ZGVudGlmaWVyOjpDaGVja0JveDsKKyAgICBpZC5oZWlnaHQgPSBzaXplLmhlaWdodCgpOworICAg
IGlkLnRyYWl0MSA9IGVuYWJsZWQ7CisgICAgaWQudHJhaXQyID0gY2hlY2tlZDsKKyAgICBpZiAo
IWZpbmRDYWNoZWRDb250cm9sKGlkLCAmcmVzdWx0KSkgewogICAgICAgICByZXN1bHQgPSBRUGl4
bWFwKHNpemUpOwogICAgICAgICByZXN1bHQuZmlsbChRdDo6dHJhbnNwYXJlbnQpOwogICAgICAg
ICBRUGFpbnRlciBjYWNoZVBhaW50ZXIoJnJlc3VsdCk7CkBAIC0yMDcsMTQgKzI0MywxMyBAQCBR
UGl4bWFwIFN0eWxlUGFpbnRlck1vYmlsZTo6ZmluZENoZWNrQm94KGNvbnN0IFFTaXplJiBzaXpl
LCBib29sIGNoZWNrZWQsIGJvb2wgZQogICAgICAgICBkcmF3Q2hlY2thYmxlQmFja2dyb3VuZCgm
Y2FjaGVQYWludGVyLCByZWN0LCBjaGVja2VkLCBlbmFibGVkKTsKICAgICAgICAgaWYgKGNoZWNr
ZWQgfHwgIWVuYWJsZWQpCiAgICAgICAgICAgICBkcmF3Q2hlY2tlcigmY2FjaGVQYWludGVyLCBy
ZWN0LCBlbmFibGVkID8gUXQ6OndoaXRlIDogUXQ6OmdyYXkpOwotICAgICAgICBRUGl4bWFwQ2Fj
aGU6Omluc2VydChrZXksIHJlc3VsdCk7CisgICAgICAgIGluc2VydEludG9DYWNoZShpZCwgcmVz
dWx0KTsKICAgICB9CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAogdm9pZCBTdHlsZVBhaW50ZXJN
b2JpbGU6OmRyYXdSYWRpbyhRUGFpbnRlciogcGFpbnRlciwgY29uc3QgUVNpemUmIHNpemUsIGJv
b2wgY2hlY2tlZCwgYm9vbCBlbmFibGVkKSBjb25zdAogewotICAgIEFTU0VSVChzaXplLndpZHRo
KCkgPT0gc2l6ZS5oZWlnaHQoKSk7CiAgICAgUVJlY3QgcmVjdChRUG9pbnQoMCwgMCksIHNpemUp
OwogCiAgICAgZHJhd0NoZWNrYWJsZUJhY2tncm91bmQocGFpbnRlciwgcmVjdCwgY2hlY2tlZCwg
ZW5hYmxlZCk7CkBAIC0yMjUsMjEgKzI2MCwyNCBAQCB2b2lkIFN0eWxlUGFpbnRlck1vYmlsZTo6
ZHJhd1JhZGlvKFFQYWludGVyKiBwYWludGVyLCBjb25zdCBRU2l6ZSYgc2l6ZSwgYm9vbCBjaAog
CiBRUGl4bWFwIFN0eWxlUGFpbnRlck1vYmlsZTo6ZmluZFJhZGlvKGNvbnN0IFFTaXplJiBzaXpl
LCBib29sIGNoZWNrZWQsIGJvb2wgZW5hYmxlZCkgY29uc3QKIHsKKyAgICBBU1NFUlQoc2l6ZS53
aWR0aCgpID09IHNpemUuaGVpZ2h0KCkpOwogICAgIFFQaXhtYXAgcmVzdWx0OwotICAgIHN0YXRp
YyBjb25zdCBRU3RyaW5nIHByZWZpeCA9IFFMYXRpbjFTdHJpbmcoIiRxdC13ZWJraXQtbW9iaWxl
LXRoZW1lLXJhZGlvLSIpOwotICAgIFFTdHJpbmcga2V5ID0gcHJlZml4ICsgUVN0cmluZzo6bnVt
YmVyKHNpemUud2lkdGgoKSkgKyBRTGF0aW4xU3RyaW5nKCItIikgKyAoZW5hYmxlZCA/IFFMYXRp
bjFTdHJpbmcoIm9uIikgOiBRTGF0aW4xU3RyaW5nKCJvZmYiKSkKLSAgICAgICAgICAgICAgICAg
ICsgKGNoZWNrZWQgPyBRTGF0aW4xU3RyaW5nKCItY2hlY2tlZCIpIDogUVN0cmluZygpKTsKLSAg
ICBpZiAoIVFQaXhtYXBDYWNoZTo6ZmluZChrZXksIHJlc3VsdCkpIHsKKyAgICBLZXlJZGVudGlm
aWVyIGlkOworICAgIGlkLnR5cGUgPSBLZXlJZGVudGlmaWVyOjpSYWRpbzsKKyAgICBpZC5oZWln
aHQgPSBzaXplLmhlaWdodCgpOworICAgIGlkLnRyYWl0MSA9IGVuYWJsZWQ7CisgICAgaWQudHJh
aXQyID0gY2hlY2tlZDsKKyAgICBpZiAoIWZpbmRDYWNoZWRDb250cm9sKGlkLCAmcmVzdWx0KSkg
ewogICAgICAgICByZXN1bHQgPSBRUGl4bWFwKHNpemUpOwogICAgICAgICByZXN1bHQuZmlsbChR
dDo6dHJhbnNwYXJlbnQpOwogICAgICAgICBRUGFpbnRlciBjYWNoZVBhaW50ZXIoJnJlc3VsdCk7
CiAgICAgICAgIGRyYXdSYWRpbygmY2FjaGVQYWludGVyLCBzaXplLCBjaGVja2VkLCBlbmFibGVk
KTsKLSAgICAgICAgUVBpeG1hcENhY2hlOjppbnNlcnQoa2V5LCByZXN1bHQpOworICAgICAgICBp
bnNlcnRJbnRvQ2FjaGUoaWQsIHJlc3VsdCk7CiAgICAgfQogICAgIHJldHVybiByZXN1bHQ7CiB9
CiAKLXZvaWQgU3R5bGVQYWludGVyTW9iaWxlOjpkcmF3TXVsdGlwbGVDb21ib0J1dHRvbihRUGFp
bnRlciogcGFpbnRlciwgY29uc3QgUVNpemUmIHNpemUsIGNvbnN0IFFDb2xvciYgY29sb3IpIGNv
bnN0Cit2b2lkIFN0eWxlUGFpbnRlck1vYmlsZTo6ZHJhd011bHRpcGxlQ29tYm9CdXR0b24oUVBh
aW50ZXIqIHBhaW50ZXIsIGNvbnN0IFFTaXplRiYgc2l6ZSwgY29uc3QgUUNvbG9yJiBjb2xvcikg
Y29uc3QKIHsKICAgICBjb25zdCBxcmVhbCBkb3REaWFtZXRlciA9IHNpemUuaGVpZ2h0KCk7CiAg
ICAgY29uc3QgcXJlYWwgZG90UmFkaWkgPSBkb3REaWFtZXRlciAvIDI7CkBAIC0yNDgsNTkgKzI4
Niw2NiBAQCB2b2lkIFN0eWxlUGFpbnRlck1vYmlsZTo6ZHJhd011bHRpcGxlQ29tYm9CdXR0b24o
UVBhaW50ZXIqIHBhaW50ZXIsIGNvbnN0IFFTaXplJgogICAgIHBhaW50ZXItPnNldFBlbihjb2xv
cik7CiAgICAgcGFpbnRlci0+c2V0QnJ1c2goY29sb3IpOwogCi0gICAgY29uc3QgcXJlYWwgb2Zm
c2V0RmFjdG9yID0gMS44OwogICAgIGZvciAoaW50IGkgPSAwOyBpIDwgMzsgKytpKSB7Ci0gICAg
ICAgIFFQb2ludEYgY2VudGVyKG9mZnNldEZhY3RvciAqIGRvdFJhZGlpICsgaSAqIG9mZnNldEZh
Y3RvciAqIGRvdERpYW1ldGVyLCBkb3RSYWRpaSk7CisgICAgICAgIFFQb2ludEYgY2VudGVyKGRv
dFJhZGlpICsgaSAqIG11bHRpcGxlQ29tYm9Eb3RzT2Zmc2V0RmFjdG9yICogZG90RGlhbWV0ZXIs
IGRvdFJhZGlpKTsKICAgICAgICAgcGFpbnRlci0+ZHJhd0VsbGlwc2UoY2VudGVyLCBkb3RSYWRp
aSwgZG90UmFkaWkpOwogICAgIH0KIH0KIAotdm9pZCBTdHlsZVBhaW50ZXJNb2JpbGU6OmRyYXdT
aW1wbGVDb21ib0J1dHRvbihRUGFpbnRlciogcGFpbnRlciwgY29uc3QgUVNpemUmIHNpemUsIGNv
bnN0IFFDb2xvciYgY29sb3IpIGNvbnN0Cit2b2lkIFN0eWxlUGFpbnRlck1vYmlsZTo6ZHJhd1Np
bXBsZUNvbWJvQnV0dG9uKFFQYWludGVyKiBwYWludGVyLCBjb25zdCBRU2l6ZUYmIHNpemUsIGNv
bnN0IFFDb2xvciYgY29sb3IpIGNvbnN0CiB7Ci0gICAgY29uc3QgaW50IGdhcCA9IChzaXplLmhl
aWdodCgpIC0gMSkgLyA1OwotICAgIGNvbnN0IGludCBhcnJvd0hlaWdodCA9IDIgKiBnYXA7Ci0g
ICAgY29uc3QgaW50IHJpZ2h0ID0gYXJyb3dIZWlnaHQgKiAyOwotICAgIGNvbnN0IGludCBib3R0
b21CYXNlbGluZSA9IGFycm93SGVpZ2h0ICsgZ2FwICsgMTsKLSAgICBRUG9seWdvbiB1cEFycm93
LCBkb3duQXJyb3c7Ci0gICAgdXBBcnJvdyA8PCBRUG9pbnQoMCwgYXJyb3dIZWlnaHQpIDw8IFFQ
b2ludChhcnJvd0hlaWdodCwgMCkgPDwgUVBvaW50KHJpZ2h0LCBhcnJvd0hlaWdodCk7Ci0gICAg
ZG93bkFycm93IDw8IFFQb2ludCgwLCBib3R0b21CYXNlbGluZSkgPDwgUVBvaW50KGFycm93SGVp
Z2h0LCBib3R0b21CYXNlbGluZSArIGFycm93SGVpZ2h0KQotICAgICAgICAgICAgICA8PCBRUG9p
bnQocmlnaHQsIGJvdHRvbUJhc2VsaW5lKTsKKyAgICBjb25zdCBxcmVhbCBnYXAgPSBzaXplLmhl
aWdodCgpIC8gNS4wOworICAgIGNvbnN0IHFyZWFsIGFycm93SGVpZ2h0ID0gKHNpemUuaGVpZ2h0
KCkgLSBnYXApIC8gMi4wOworICAgIGNvbnN0IHFyZWFsIHJpZ2h0ID0gYXJyb3dIZWlnaHQgKiAy
OworICAgIGNvbnN0IHFyZWFsIGJvdHRvbUJhc2VsaW5lID0gc2l6ZS5oZWlnaHQoKSAtIGFycm93
SGVpZ2h0OworICAgIFFQb2x5Z29uRiB1cEFycm93LCBkb3duQXJyb3c7CisgICAgdXBBcnJvdyA8
PCBRUG9pbnRGKDAsIGFycm93SGVpZ2h0KSA8PCBRUG9pbnRGKGFycm93SGVpZ2h0LCAwKSA8PCBR
UG9pbnRGKHJpZ2h0LCBhcnJvd0hlaWdodCk7CisgICAgZG93bkFycm93IDw8IFFQb2ludEYoMCwg
Ym90dG9tQmFzZWxpbmUpIDw8IFFQb2ludEYoYXJyb3dIZWlnaHQsIGJvdHRvbUJhc2VsaW5lICsg
YXJyb3dIZWlnaHQpCisgICAgICAgICAgICAgIDw8IFFQb2ludEYocmlnaHQsIGJvdHRvbUJhc2Vs
aW5lKTsKIAotICAgIHBhaW50ZXItPnNldFBlbihjb2xvcik7CisgICAgcGFpbnRlci0+c2V0UGVu
KFF0OjpOb1Blbik7CiAgICAgcGFpbnRlci0+c2V0QnJ1c2goY29sb3IpOwogICAgIHBhaW50ZXIt
PmRyYXdQb2x5Z29uKHVwQXJyb3cpOwogICAgIHBhaW50ZXItPmRyYXdQb2x5Z29uKGRvd25BcnJv
dyk7CiB9CiAKLVFTaXplIFN0eWxlUGFpbnRlck1vYmlsZTo6Z2V0QnV0dG9uSW1hZ2VTaXplKGlu
dCBidXR0b25IZWlnaHQsIGJvb2wgbXVsdGlwbGUpIGNvbnN0CitRU2l6ZUYgU3R5bGVQYWludGVy
TW9iaWxlOjpnZXRCdXR0b25JbWFnZVNpemUoaW50IGJ1dHRvbkhlaWdodCwgYm9vbCBtdWx0aXBs
ZSkgY29uc3QKIHsKICAgICBpZiAobXVsdGlwbGUpCi0gICAgICAgIHJldHVybiBRU2l6ZShidXR0
b25IZWlnaHQgLyAyLCBidXR0b25IZWlnaHQgLyAxMCk7CisgICAgICAgIHJldHVybiBRU2l6ZUYo
cXJlYWwoMiArIGJ1dHRvbkhlaWdodCAqIDMgKiBtdWx0aXBsZUNvbWJvRG90c09mZnNldEZhY3Rv
ci8gMTAuMCkKKyAgICAgICAgICAgICAgICAgICAgICAsIHFyZWFsKDIgKyBidXR0b25IZWlnaHQg
LyAxMC4wKSk7CiAKLSAgICBjb25zdCBpbnQgaGVpZ2h0ID0gYnV0dG9uSGVpZ2h0IC8gMi41Owot
ICAgIGNvbnN0IGludCB3aWR0aCA9IDQgKiBoZWlnaHQgLyA1OwotICAgIHJldHVybiBRU2l6ZSh3
aWR0aCwgaGVpZ2h0KTsKKyAgICBjb25zdCBxcmVhbCBoZWlnaHQgPSBidXR0b25IZWlnaHQgLyAy
LjU7CisgICAgY29uc3QgcXJlYWwgd2lkdGggPSA0ICogaGVpZ2h0IC8gNS4wOworICAgIHJldHVy
biBRU2l6ZUYoMiArIHdpZHRoLCAyICsgaGVpZ2h0KTsKIH0KIAogUVBpeG1hcCBTdHlsZVBhaW50
ZXJNb2JpbGU6OmZpbmRDb21ib0J1dHRvbihjb25zdCBRU2l6ZSYgc2l6ZSwgYm9vbCBtdWx0aXBs
ZSwgYm9vbCBlbmFibGVkKSBjb25zdAogewogICAgIGlmIChzaXplLmlzTnVsbCgpKQogICAgICAg
ICByZXR1cm4gUVBpeG1hcCgpOwotICAgIHN0YXRpYyBjb25zdCBRU3RyaW5nIHByZWZpeCA9IFFM
YXRpbjFTdHJpbmcoIiRxdC13ZWJraXQtbW9iaWxlLXRoZW1lLWNvbWJvLSIpOwogICAgIFFQaXht
YXAgcmVzdWx0OwotICAgIFFTdHJpbmcga2V5ID0gcHJlZml4ICsgKG11bHRpcGxlID8gUUxhdGlu
MVN0cmluZygibXVsdGlwbGUtIikgOiBRTGF0aW4xU3RyaW5nKCJzaW1wbGUtIikpCi0gICAgICAg
ICsgUVN0cmluZzo6bnVtYmVyKHNpemUud2lkdGgoKSkgKyBRTGF0aW4xU3RyaW5nKCItIikgKyBR
U3RyaW5nOjpudW1iZXIoc2l6ZS5oZWlnaHQoKSkKLSAgICAgICAgKyBRTGF0aW4xU3RyaW5nKCIt
IikgKyAoZW5hYmxlZCA/IFFMYXRpbjFTdHJpbmcoIm9uIikgOiBRTGF0aW4xU3RyaW5nKCJvZmYi
KSk7Ci0KLSAgICBpZiAoIVFQaXhtYXBDYWNoZTo6ZmluZChrZXksIHJlc3VsdCkpIHsKKyAgICBL
ZXlJZGVudGlmaWVyIGlkOworICAgIGlkLnR5cGUgPSBLZXlJZGVudGlmaWVyOjpDb21ib0J1dHRv
bjsKKyAgICBpZC53aWR0aCA9IHNpemUud2lkdGgoKTsKKyAgICBpZC5oZWlnaHQgPSBzaXplLmhl
aWdodCgpOworICAgIGlkLnRyYWl0MSA9IG11bHRpcGxlOworICAgIGlkLnRyYWl0MiA9IGVuYWJs
ZWQ7CisKKyAgICBpZiAoIWZpbmRDYWNoZWRDb250cm9sKGlkLCAmcmVzdWx0KSkgewogICAgICAg
ICByZXN1bHQgPSBRUGl4bWFwKHNpemUpOworICAgICAgICBjb25zdCBxcmVhbCBib3JkZXIgPSBw
YWludGVyU2NhbGUocGFpbnRlcik7CisgICAgICAgIGNvbnN0IFFTaXplRiBwYWRkaW5nKDIgKiBi
b3JkZXIsIDIgKiBib3JkZXIpOworICAgICAgICBBU1NFUlQoaW5uZXJTaXplID4gcGFkZGluZy50
b1NpemUoKSk7CisgICAgICAgIGNvbnN0IFFTaXplRiBpbm5lclNpemUgPSBzaXplIC0gcGFkZGlu
ZzsKICAgICAgICAgcmVzdWx0LmZpbGwoUXQ6OnRyYW5zcGFyZW50KTsKICAgICAgICAgUVBhaW50
ZXIgY2FjaGVQYWludGVyKCZyZXN1bHQpOworICAgICAgICBjYWNoZVBhaW50ZXIudHJhbnNsYXRl
KGJvcmRlciwgYm9yZGVyKTsKICAgICAgICAgaWYgKG11bHRpcGxlKQotICAgICAgICAgICAgZHJh
d011bHRpcGxlQ29tYm9CdXR0b24oJmNhY2hlUGFpbnRlciwgc2l6ZSwgZW5hYmxlZCA/IGRhcmtD
b2xvciA6IFF0OjpsaWdodEdyYXkpOworICAgICAgICAgICAgZHJhd011bHRpcGxlQ29tYm9CdXR0
b24oJmNhY2hlUGFpbnRlciwgaW5uZXJTaXplLCBlbmFibGVkID8gZGFya0NvbG9yIDogUXQ6Omxp
Z2h0R3JheSk7CiAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIGRyYXdTaW1wbGVDb21ib0J1dHRv
bigmY2FjaGVQYWludGVyLCBzaXplLCBlbmFibGVkID8gZGFya0NvbG9yIDogUXQ6OmxpZ2h0R3Jh
eSk7Ci0gICAgICAgIFFQaXhtYXBDYWNoZTo6aW5zZXJ0KGtleSwgcmVzdWx0KTsKKyAgICAgICAg
ICAgIGRyYXdTaW1wbGVDb21ib0J1dHRvbigmY2FjaGVQYWludGVyLCBpbm5lclNpemUsIGVuYWJs
ZWQgPyBkYXJrQ29sb3IgOiBRdDo6bGlnaHRHcmF5KTsKKyAgICAgICAgaW5zZXJ0SW50b0NhY2hl
KGlkLCByZXN1bHQpOwogICAgIH0KICAgICByZXR1cm4gcmVzdWx0OwogfQpAQCAtMzE3LDEwICsz
NjIsMTMgQEAgdm9pZCBTdHlsZVBhaW50ZXJNb2JpbGU6OmRyYXdMaW5lRWRpdChjb25zdCBRUmVj
dCYgcmVjdCwgYm9vbCBmb2N1c2VkLCBib29sIGVuYWIKIFFQaXhtYXAgU3R5bGVQYWludGVyTW9i
aWxlOjpmaW5kTGluZUVkaXQoY29uc3QgUVNpemUgJiBzaXplLCBib29sIGZvY3VzZWQpIGNvbnN0
CiB7CiAgICAgUVBpeG1hcCByZXN1bHQ7Ci0gICAgc3RhdGljIGNvbnN0IFFTdHJpbmcgcHJlZml4
ID0gUUxhdGluMVN0cmluZygiJHF0LXdlYmtpdC1tb2JpbGUtdGhlbWUtbGluZUVkaXQtIik7Ci0g
ICAgUVN0cmluZyBrZXkgPSBwcmVmaXggKyBRU3RyaW5nOjpudW1iZXIoc2l6ZS53aWR0aCgpKSAr
IFFMYXRpbjFTdHJpbmcoIngiKSArIFFTdHJpbmc6Om51bWJlcihzaXplLmhlaWdodCgpKQotICAg
ICAgICAgICAgICAgICAgICAgICsgKGZvY3VzZWQgPyBRTGF0aW4xU3RyaW5nKCItZm9jdXNlZCIp
IDogUVN0cmluZygpKTsKLSAgICBpZiAoIVFQaXhtYXBDYWNoZTo6ZmluZChrZXksIHJlc3VsdCkp
IHsKKyAgICBLZXlJZGVudGlmaWVyIGlkOworICAgIGlkLnR5cGUgPSBLZXlJZGVudGlmaWVyOjpM
aW5lRWRpdDsKKyAgICBpZC53aWR0aCA9IHNpemUud2lkdGgoKTsKKyAgICBpZC5oZWlnaHQgPSBz
aXplLmhlaWdodCgpOworICAgIGlkLnRyYWl0MSA9IGZvY3VzZWQ7CisKKyAgICBpZiAoIWZpbmRD
YWNoZWRDb250cm9sKGlkLCAmcmVzdWx0KSkgewogICAgICAgICBjb25zdCBpbnQgZm9jdXNGcmFt
ZSA9IHBhaW50ZXJTY2FsZShwYWludGVyKTsKICAgICAgICAgcmVzdWx0ID0gUVBpeG1hcChzaXpl
ICsgUVNpemUoMiAqIGZvY3VzRnJhbWUsIDIgKiBmb2N1c0ZyYW1lKSk7CiAgICAgICAgIHJlc3Vs
dC5maWxsKFF0Ojp0cmFuc3BhcmVudCk7CkBAIC0zMzIsNyArMzgwLDcgQEAgUVBpeG1hcCBTdHls
ZVBhaW50ZXJNb2JpbGU6OmZpbmRMaW5lRWRpdChjb25zdCBRU2l6ZSAmIHNpemUsIGJvb2wgZm9j
dXNlZCkgY29uc3QKICAgICAgICAgICAgIFFQZW4gZm9jdXNQZW4oaGlnaGxpZ2h0Q29sb3IsIGZv
Y3VzRnJhbWUsIFF0OjpTb2xpZExpbmUsIFF0OjpSb3VuZENhcCwgUXQ6OlJvdW5kSm9pbik7CiAg
ICAgICAgICAgICBkcmF3Q29udHJvbEJhY2tncm91bmQoJmNhY2hlUGFpbnRlciwgZm9jdXNQZW4s
IHJlY3QsIFF0OjpOb0JydXNoKTsKICAgICAgICAgfQotICAgICAgICBRUGl4bWFwQ2FjaGU6Omlu
c2VydChrZXksIHJlc3VsdCk7CisgICAgICAgIGluc2VydEludG9DYWNoZShpZCwgcmVzdWx0KTsK
ICAgICB9CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KQEAgLTM2NiwxMCArNDE0LDEzIEBAIHZvaWQg
U3R5bGVQYWludGVyTW9iaWxlOjpkcmF3UHVzaEJ1dHRvbihjb25zdCBRUmVjdCYgcmVjdCwgYm9v
bCBzdW5rZW4sIGJvb2wgZW5hCiBRUGl4bWFwIFN0eWxlUGFpbnRlck1vYmlsZTo6ZmluZFB1c2hC
dXR0b24oY29uc3QgUVNpemUmIHNpemUsIGJvb2wgc3Vua2VuLCBib29sIGVuYWJsZWQpIGNvbnN0
CiB7CiAgICAgUVBpeG1hcCByZXN1bHQ7Ci0gICAgc3RhdGljIGNvbnN0IFFTdHJpbmcgcHJlZml4
ID0gUUxhdGluMVN0cmluZygiJHF0LXdlYmtpdC1tb2JpbGUtdGhlbWUtcHVzaEJ1dHRvbi0iKTsK
LSAgICBRU3RyaW5nIGtleSA9IHByZWZpeCArIFFTdHJpbmc6Om51bWJlcihzaXplLndpZHRoKCkp
ICsgUUxhdGluMVN0cmluZygieCIpICsgUVN0cmluZzo6bnVtYmVyKHNpemUuaGVpZ2h0KCkpCi0g
ICAgICAgICAgICAgICAgICAgICAgKyAoc3Vua2VuID8gUUxhdGluMVN0cmluZygiLXN1bmtlbiIp
IDogUVN0cmluZygpKSArIChlbmFibGVkID8gUUxhdGluMVN0cmluZygiLW9uIikgOiBRU3RyaW5n
KCkpOwotICAgIGlmICghUVBpeG1hcENhY2hlOjpmaW5kKGtleSwgcmVzdWx0KSkgeworICAgIEtl
eUlkZW50aWZpZXIgaWQ7CisgICAgaWQudHlwZSA9IEtleUlkZW50aWZpZXI6OlB1c2hCdXR0b247
CisgICAgaWQud2lkdGggPSBzaXplLndpZHRoKCk7CisgICAgaWQuaGVpZ2h0ID0gc2l6ZS5oZWln
aHQoKTsKKyAgICBpZC50cmFpdDEgPSBzdW5rZW47CisgICAgaWQudHJhaXQyID0gZW5hYmxlZDsK
KyAgICBpZiAoIWZpbmRDYWNoZWRDb250cm9sKGlkLCAmcmVzdWx0KSkgewogICAgICAgICBjb25z
dCBxcmVhbCBkcm9wU2hhZG93U2l6ZSA9IHBhaW50ZXJTY2FsZShwYWludGVyKTsKICAgICAgICAg
cmVzdWx0ID0gUVBpeG1hcChzaXplKTsKICAgICAgICAgcmVzdWx0LmZpbGwoUXQ6OnRyYW5zcGFy
ZW50KTsKQEAgLTM5Niw3ICs0NDcsNyBAQCBRUGl4bWFwIFN0eWxlUGFpbnRlck1vYmlsZTo6Zmlu
ZFB1c2hCdXR0b24oY29uc3QgUVNpemUmIHNpemUsIGJvb2wgc3Vua2VuLCBib29sCiAgICAgICAg
ICAgICBicnVzaCA9IGxpbmVhckdyYWRpZW50OwogICAgICAgICB9CiAgICAgICAgIGRyYXdDb250
cm9sQmFja2dyb3VuZCgmY2FjaGVQYWludGVyLCBib3JkZXJQZW4ocGFpbnRlciksIHJlY3QsIGJy
dXNoKTsKLSAgICAgICAgUVBpeG1hcENhY2hlOjppbnNlcnQoa2V5LCByZXN1bHQpOworICAgICAg
ICBpbnNlcnRJbnRvQ2FjaGUoaWQsIHJlc3VsdCk7CiAgICAgfQogICAgIHJldHVybiByZXN1bHQ7
CiB9CkBAIC00MDcsMjggKzQ1OCwzMSBAQCB2b2lkIFN0eWxlUGFpbnRlck1vYmlsZTo6ZHJhd0Nv
bWJvQm94KGNvbnN0IFFSZWN0JiByZWN0LCBib29sIG11bHRpcGxlLCBib29sIGVuYQogICAgIGlm
IChwdXNoQnV0dG9uLmlzTnVsbCgpKQogICAgICAgICByZXR1cm47CiAgICAgcGFpbnRlci0+ZHJh
d1BpeG1hcChyZWN0LCBwdXNoQnV0dG9uKTsKLSAgICBRUmVjdCB0YXJnZXRSZWN0KFFQb2ludCgw
LCAwKSwgZ2V0QnV0dG9uSW1hZ2VTaXplKHJlY3QuaGVpZ2h0KCkgLSAxLCBtdWx0aXBsZSkpOwot
ICAgIGNvbnN0IFFQb2ludCBidXR0b25DZW50ZXIocmVjdC5yaWdodCgpIC0gYXJyb3dCb3hXaWR0
aCAvIDIsIHJlY3QuaGVpZ2h0KCkgLyAyIC0gMSk7CisgICAgUVJlY3RGIHRhcmdldFJlY3QoUVBv
aW50RigwLCAwKSwgZ2V0QnV0dG9uSW1hZ2VTaXplKHJlY3QuaGVpZ2h0KCkgLSAxLCBtdWx0aXBs
ZSkpOworICAgIGNvbnN0IFFQb2ludEYgYnV0dG9uQ2VudGVyKHJlY3QucmlnaHQoKSAtIGFycm93
Qm94V2lkdGggLyAyLCByZWN0LnRvcCgpICsgKHJlY3QuaGVpZ2h0KCkgLSAxKSAvIDIpOwogICAg
IHRhcmdldFJlY3QubW92ZUNlbnRlcihidXR0b25DZW50ZXIpOwotICAgIFFQaXhtYXAgcGljID0g
ZmluZENvbWJvQnV0dG9uKHNpemVGb3JQYWludGVyU2NhbGUodGFyZ2V0UmVjdCksIG11bHRpcGxl
LCBlbmFibGVkKTsKKyAgICBRUGl4bWFwIHBpYyA9IGZpbmRDb21ib0J1dHRvbihzaXplRm9yUGFp
bnRlclNjYWxlKHRhcmdldFJlY3QudG9SZWN0KCkpLCBtdWx0aXBsZSwgZW5hYmxlZCk7CiAgICAg
aWYgKHBpYy5pc051bGwoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgcGFpbnRlci0+ZHJhd1Bp
eG1hcCh0YXJnZXRSZWN0LCBwaWMpOworICAgIHBhaW50ZXItPmRyYXdQaXhtYXAodGFyZ2V0UmVj
dC50b1JlY3QoKSwgcGljKTsKIH0KIAogdm9pZCBTdHlsZVBhaW50ZXJNb2JpbGU6OmRyYXdQcm9n
cmVzcyhjb25zdCBRUmVjdCYgcmVjdCwgZG91YmxlIHByb2dyZXNzLCBib29sIGxlZnRUb1JpZ2h0
LCBib29sIGFuaW1hdGVkKSBjb25zdAogewotICAgIHN0YXRpYyBjb25zdCBRU3RyaW5nIHByZWZp
eCA9IFFMYXRpbjFTdHJpbmcoIiRxdC13ZWJraXQtbW9iaWxlLXRoZW1lLXByb2dyZXNzLSIpOwog
ICAgIGNvbnN0IGludCBib3JkZXIgPSByZWN0LmhlaWdodCgpIC8gNDsKICAgICBjb25zdCBRUmVj
dCB0YXJnZXRSZWN0ID0gcmVjdC5hZGp1c3RlZCgwLCBib3JkZXIsIDAsIC1ib3JkZXIpOwogCiAg
ICAgUVBpeG1hcCByZXN1bHQ7CiAgICAgY29uc3QgUVNpemUgaW1hZ2VTaXplID0gc2l6ZUZvclBh
aW50ZXJTY2FsZSh0YXJnZXRSZWN0KTsKLSAgICBRU3RyaW5nIGtleSA9IHByZWZpeCArIFFTdHJp
bmc6Om51bWJlcihpbWFnZVNpemUud2lkdGgoKSkgKyBRTGF0aW4xU3RyaW5nKCItIikgKyBRU3Ry
aW5nOjpudW1iZXIoaW1hZ2VTaXplLmhlaWdodCgpKQotICAgICAgICAgICAgKyBRTGF0aW4xU3Ry
aW5nKCItIikgKyBRU3RyaW5nOjpudW1iZXIocHJvZ3Jlc3MsICdmJywgMykgKyAoYW5pbWF0ZWQ/
IFFMYXRpbjFTdHJpbmcoIi1hbmltIikgOiBRU3RyaW5nKCkpCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgKyAoKCFhbmltYXRlZCAmJiAhbGVmdFRvUmlnaHQpID8gUUxhdGluMVN0cmluZygiLXJ0
bCIpIDogUVN0cmluZygpKTsKLSAgICBpZiAoIVFQaXhtYXBDYWNoZTo6ZmluZChrZXksIHJlc3Vs
dCkpIHsKKyAgICBLZXlJZGVudGlmaWVyIGlkOworICAgIGlkLnR5cGUgPSBLZXlJZGVudGlmaWVy
OjpQcm9ncmVzczsKKyAgICBpZC53aWR0aCA9IGltYWdlU2l6ZS53aWR0aCgpOworICAgIGlkLmhl
aWdodCA9IGltYWdlU2l6ZS5oZWlnaHQoKTsKKyAgICBpZC50cmFpdDEgPSBhbmltYXRlZDsKKyAg
ICBpZC50cmFpdDIgPSAoIWFuaW1hdGVkICYmICFsZWZ0VG9SaWdodCk7CisgICAgaWQudHJhaXQz
ID0gcHJvZ3Jlc3MgKiAxMDA7CisgICAgaWYgKCFmaW5kQ2FjaGVkQ29udHJvbChpZCwgJnJlc3Vs
dCkpIHsKICAgICAgICAgaWYgKGltYWdlU2l6ZS5pc051bGwoKSkKICAgICAgICAgICAgIHJldHVy
bjsKICAgICAgICAgcmVzdWx0ID0gUVBpeG1hcChpbWFnZVNpemUpOwpAQCAtNDYzLDI1ICs1MTcs
MjggQEAgdm9pZCBTdHlsZVBhaW50ZXJNb2JpbGU6OmRyYXdQcm9ncmVzcyhjb25zdCBRUmVjdCYg
cmVjdCwgZG91YmxlIHByb2dyZXNzLCBib29sIGwKICAgICAgICAgICAgIHJhZGl1cyA9IHJhZGl1
c0ZhY3RvciAqIHByb2dyZXNzUmVjdC5oZWlnaHQoKTsKICAgICAgICAgICAgIHBhaW50ZXIuZHJh
d1JvdW5kZWRSZWN0KHByb2dyZXNzUmVjdCwgcmFkaXVzLCByYWRpdXMpOwogICAgICAgICB9Ci0g
ICAgICAgIFFQaXhtYXBDYWNoZTo6aW5zZXJ0KGtleSwgcmVzdWx0KTsKKyAgICAgICAgaW5zZXJ0
SW50b0NhY2hlKGlkLCByZXN1bHQpOwogICAgIH0KICAgICBwYWludGVyLT5kcmF3UGl4bWFwKHRh
cmdldFJlY3QsIHJlc3VsdCk7CiB9CiAKIHZvaWQgU3R5bGVQYWludGVyTW9iaWxlOjpkcmF3U2xp
ZGVyVGh1bWIoY29uc3QgUVJlY3QgJiByZWN0LCBib29sIHByZXNzZWQpIGNvbnN0CiB7Ci0gICAg
c3RhdGljIGNvbnN0IFFTdHJpbmcgcHJlZml4ID0gUUxhdGluMVN0cmluZygiJHF0LXdlYmtpdC1t
b2JpbGUtdGhlbWUtc2xpZGVyLXRodW1iLSIpOwogICAgIFFQaXhtYXAgcmVzdWx0OwogICAgIGNv
bnN0IFFTaXplIHNpemUgPSBzaXplRm9yUGFpbnRlclNjYWxlKHJlY3QpOwotICAgIGNvbnN0IFFT
dHJpbmcga2V5ID0gcHJlZml4ICsgUVN0cmluZzo6bnVtYmVyKHNpemUud2lkdGgoKSk7Ci0gICAg
aWYgKCFRUGl4bWFwQ2FjaGU6OmZpbmQoa2V5LCAmcmVzdWx0KSkgeworICAgIEtleUlkZW50aWZp
ZXIgaWQ7CisgICAgaWQudHlwZSA9IEtleUlkZW50aWZpZXI6OlNsaWRlclRodW1iOworICAgIGlk
LndpZHRoID0gc2l6ZS53aWR0aCgpOworICAgIGlkLmhlaWdodCA9IHNpemUuaGVpZ2h0KCk7Cisg
ICAgaWQudHJhaXQxID0gcHJlc3NlZDsKKyAgICBpZiAoIWZpbmRDYWNoZWRDb250cm9sKGlkLCAm
cmVzdWx0KSkgewogICAgICAgICBpZiAoc2l6ZS5pc051bGwoKSkKICAgICAgICAgICAgIHJldHVy
bjsKICAgICAgICAgcmVzdWx0ID0gUVBpeG1hcChzaXplKTsKICAgICAgICAgcmVzdWx0LmZpbGwo
UXQ6OnRyYW5zcGFyZW50KTsKICAgICAgICAgUVBhaW50ZXIgY2FjaGVQYWludGVyKCZyZXN1bHQp
OwogICAgICAgICBkcmF3Q29udHJvbEJhY2tncm91bmQoJmNhY2hlUGFpbnRlciwgYm9yZGVyUGVu
KHBhaW50ZXIpLCBRUmVjdChRUG9pbnQoMCwgMCksIHNpemUpLCBwcmVzc2VkPyBRdDo6bGlnaHRH
cmF5IDogYnV0dG9uR3JhZGllbnRCb3R0b20pOwotICAgICAgICBRUGl4bWFwQ2FjaGU6Omluc2Vy
dChrZXksIHJlc3VsdCk7CisgICAgICAgIGluc2VydEludG9DYWNoZShpZCwgcmVzdWx0KTsKICAg
ICB9CiAgICAgcGFpbnRlci0+ZHJhd1BpeG1hcChyZWN0LCByZXN1bHQpOwogfQpAQCAtNjYxLDYg
KzcxOCw4IEBAIGJvb2wgUmVuZGVyVGhlbWVRdE1vYmlsZTo6cGFpbnRUZXh0RmllbGQoUmVuZGVy
T2JqZWN0KiBvLCBjb25zdCBQYWludEluZm8mIGksIGNvCiAKICAgICAvLyBOb3cgcGFpbnQgdGhl
IHRleHQgZmllbGQuCiAgICAgaWYgKGFwcGVhcmFuY2UgPT0gVGV4dEFyZWFQYXJ0KSB7CisgICAg
ICAgIGNvbnN0IGJvb2wgcHJldmlvdXNBbnRpYWxpYXNpbmcgPSBwLnBhaW50ZXItPnRlc3RSZW5k
ZXJIaW50KFFQYWludGVyOjpBbnRpYWxpYXNpbmcpOworICAgICAgICBwLnBhaW50ZXItPnNldFJl
bmRlckhpbnQoUVBhaW50ZXI6OkFudGlhbGlhc2luZyk7CiAgICAgICAgIHAucGFpbnRlci0+c2V0
UGVuKGJvcmRlclBlbigpKTsKICAgICAgICAgcC5wYWludGVyLT5zZXRCcnVzaChRdDo6d2hpdGUp
OwogICAgICAgICBjb25zdCBpbnQgcmFkaXVzID0gY2hlY2tCb3hXaWR0aCAqIHJhZGl1c0ZhY3Rv
cjsKQEAgLTY3Miw3ICs3MzEsNyBAQCBib29sIFJlbmRlclRoZW1lUXRNb2JpbGU6OnBhaW50VGV4
dEZpZWxkKFJlbmRlck9iamVjdCogbywgY29uc3QgUGFpbnRJbmZvJiBpLCBjbwogICAgICAgICAg
ICAgcC5wYWludGVyLT5zZXRCcnVzaChRdDo6Tm9CcnVzaCk7CiAgICAgICAgICAgICBwLnBhaW50
ZXItPmRyYXdSb3VuZGVkUmVjdChyLCByYWRpdXMsIHJhZGl1cyk7CiAgICAgICAgIH0KLQorICAg
ICAgICBwLnBhaW50ZXItPnNldFJlbmRlckhpbnQoUVBhaW50ZXI6OkFudGlhbGlhc2luZywgcHJl
dmlvdXNBbnRpYWxpYXNpbmcpOwogICAgIH0gZWxzZQogICAgICAgICBwLmRyYXdMaW5lRWRpdChy
LCBpc0ZvY3VzZWQobyksIGlzRW5hYmxlZChvKSk7CiAgICAgcmV0dXJuIGZhbHNlOwpAQCAtNzAy
LDEyICs3NjEsNyBAQCBib29sIFJlbmRlclRoZW1lUXRNb2JpbGU6OnBhaW50TWVudUxpc3QoUmVu
ZGVyT2JqZWN0KiBvLCBjb25zdCBQYWludEluZm8mIGksIGNvbgogICAgIGlmICghcC5pc1ZhbGlk
KCkpCiAgICAgICAgIHJldHVybiB0cnVlOwogCi0gICAgY29uc3QgUVBvaW50IHRvcExlZnQgPSBy
LmxvY2F0aW9uKCk7Ci0gICAgcC5wYWludGVyLT50cmFuc2xhdGUodG9wTGVmdCk7Ci0gICAgY29u
c3QgUVJlY3QgcmVjdChRUG9pbnQoMCwgMCksIHIuc2l6ZSgpKTsKLQotICAgIHAuZHJhd0NvbWJv
Qm94KHJlY3QsIGNoZWNrTXVsdGlwbGUobyksIGlzRW5hYmxlZChvKSk7Ci0gICAgcC5wYWludGVy
LT50cmFuc2xhdGUoLXRvcExlZnQpOworICAgIHAuZHJhd0NvbWJvQm94KHIsIGNoZWNrTXVsdGlw
bGUobyksIGlzRW5hYmxlZChvKSk7CiAgICAgcmV0dXJuIGZhbHNlOwogfQogCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9xdC9SZW5kZXJUaGVtZVF0TW9iaWxlLmggYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9xdC9SZW5kZXJUaGVtZVF0TW9iaWxlLmgKaW5kZXggOWU5Yjgx
NDNlY2ZlYjBmNjY5OGVkZDBiMTIxZTFmYTMyY2ZmNDExMC4uYzU3YTE4MDI5ZTJlOTFhZTkzMTk0
NzgwNjhlYTZhMTAzOTQ1MjkyZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
cXQvUmVuZGVyVGhlbWVRdE1vYmlsZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3F0
L1JlbmRlclRoZW1lUXRNb2JpbGUuaApAQCAtMjUsMTMgKzI1LDE2IEBACiAjaW5jbHVkZSAiUmVu
ZGVyVGhlbWVRdC5oIgogCiAjaW5jbHVkZSA8UUJydXNoPgorI2luY2x1ZGUgPFFIYXNoPgorI2lu
Y2x1ZGUgPFFQaXhtYXBDYWNoZT4KIAogUVRfQkVHSU5fTkFNRVNQQUNFCiBjbGFzcyBRQ29sb3I7
Ci1jbGFzcyBRUGl4bWFwOwogY2xhc3MgUVNpemU7CiBRVF9FTkRfTkFNRVNQQUNFCiAKK3R5cGVk
ZWYgUVBpeG1hcENhY2hlOjpLZXkgQ2FjaGVLZXk7CisKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAog
Y2xhc3MgUmVuZGVyVGhlbWVRdE1vYmlsZSA6IHB1YmxpYyBSZW5kZXJUaGVtZVF0IHsKQEAgLTgz
LDYgKzg2LDQ0IEBAIHByaXZhdGU6CiAgICAgdm9pZCBzZXRQYWxldHRlRnJvbVBhZ2VDbGllbnRJ
ZkV4aXN0cyhRUGFsZXR0ZSYpIGNvbnN0OwogfTsKIAorc3RydWN0IEtleUlkZW50aWZpZXIgewor
CisgICAgS2V5SWRlbnRpZmllcigpCisgICAgICAgIDogdHlwZShVbmRlZmluZWQpCisgICAgICAg
ICwgd2lkdGgoMCkKKyAgICAgICAgLCBoZWlnaHQoMCkKKyAgICAgICAgLCB0cmFpdDEoMCkKKyAg
ICAgICAgLCB0cmFpdDIoMCkKKyAgICAgICAgLCB0cmFpdDMoMCkKKyAgICB7CisgICAgfQorCisg
ICAgZW51bSBDb250cm9sVHlwZSB7CisgICAgICAgIFVuZGVmaW5lZCwKKyAgICAgICAgQ2hlY2tC
b3gsCisgICAgICAgIFJhZGlvLAorICAgICAgICBDb21ib0J1dHRvbiwKKyAgICAgICAgTGluZUVk
aXQsCisgICAgICAgIFB1c2hCdXR0b24sCisgICAgICAgIFByb2dyZXNzLAorICAgICAgICBTbGlk
ZXJUaHVtYgorICAgIH07CisKKyAgICBDb250cm9sVHlwZSB0eXBlIDogMzsKKyAgICB1aW50IHdp
ZHRoIDogMTE7CisgICAgdWludCBoZWlnaHQgOiA5OworICAgIHVpbnQgdHJhaXQxIDogMTsKKyAg
ICB1aW50IHRyYWl0MiA6IDE7CisgICAgdWludCB0cmFpdDMgOiA3OworCisgICAgaW5saW5lIGJv
b2wgb3BlcmF0b3I9PShjb25zdCBLZXlJZGVudGlmaWVyJiBvdGhlcikgY29uc3QKKyAgICB7Cisg
ICAgICAgIHJldHVybiAodHlwZSA9PSBvdGhlci50eXBlICYmIHdpZHRoID09IG90aGVyLndpZHRo
CisgICAgICAgICAgICAgICAgJiYgaGVpZ2h0ID09IG90aGVyLmhlaWdodCAmJiB0cmFpdDEgPT0g
b3RoZXIudHJhaXQxCisgICAgICAgICAgICAgICAgJiYgdHJhaXQyID09IG90aGVyLnRyYWl0MiAm
JiB0cmFpdDMgPT0gb3RoZXIudHJhaXQzKTsKKyAgICB9Cit9OworCiBjbGFzcyBTdHlsZVBhaW50
ZXJNb2JpbGUgOiBwdWJsaWMgU3R5bGVQYWludGVyIHsKIAogcHVibGljOgpAQCAtMTA1LDkgKzE0
Niw5IEBAIHByaXZhdGU6CiAgICAgdm9pZCBkcmF3UmFkaW8oUVBhaW50ZXIqLCBjb25zdCBRU2l6
ZSYsIGJvb2wgY2hlY2tlZCwgYm9vbCBlbmFibGVkKSBjb25zdDsKICAgICBRUGl4bWFwIGZpbmRS
YWRpbyhjb25zdCBRU2l6ZSYsIGJvb2wgY2hlY2tlZCwgYm9vbCBlbmFibGVkKSBjb25zdDsKIAot
ICAgIFFTaXplIGdldEJ1dHRvbkltYWdlU2l6ZShpbnQgLCBib29sIG11bHRpcGxlKSBjb25zdDsK
LSAgICB2b2lkIGRyYXdTaW1wbGVDb21ib0J1dHRvbihRUGFpbnRlciosIGNvbnN0IFFTaXplJiwg
Y29uc3QgUUNvbG9yJikgY29uc3Q7Ci0gICAgdm9pZCBkcmF3TXVsdGlwbGVDb21ib0J1dHRvbihR
UGFpbnRlciosIGNvbnN0IFFTaXplJiwgY29uc3QgUUNvbG9yJikgY29uc3Q7CisgICAgUVNpemVG
IGdldEJ1dHRvbkltYWdlU2l6ZShpbnQgLCBib29sIG11bHRpcGxlKSBjb25zdDsKKyAgICB2b2lk
IGRyYXdTaW1wbGVDb21ib0J1dHRvbihRUGFpbnRlciosIGNvbnN0IFFTaXplRiYsIGNvbnN0IFFD
b2xvciYpIGNvbnN0OworICAgIHZvaWQgZHJhd011bHRpcGxlQ29tYm9CdXR0b24oUVBhaW50ZXIq
LCBjb25zdCBRU2l6ZUYmLCBjb25zdCBRQ29sb3ImKSBjb25zdDsKICAgICBRUGl4bWFwIGZpbmRD
b21ib0J1dHRvbihjb25zdCBRU2l6ZSYsIGJvb2wgbXVsdGlwbGUsIGJvb2wgZW5hYmxlZCkgY29u
c3Q7CiAKICAgICBRUGl4bWFwIGZpbmRMaW5lRWRpdChjb25zdCBRU2l6ZSYsIGJvb2wgZm9jdXNl
ZCkgY29uc3Q7CkBAIC0xMTUsOSArMTU2LDEyIEBAIHByaXZhdGU6CiAKICAgICBRU2l6ZSBzaXpl
Rm9yUGFpbnRlclNjYWxlKGNvbnN0IFFSZWN0JikgY29uc3Q7CiAKKyAgICBzdGF0aWMgYm9vbCBm
aW5kQ2FjaGVkQ29udHJvbChjb25zdCBLZXlJZGVudGlmaWVyJiwgUVBpeG1hcCopOworICAgIHN0
YXRpYyB2b2lkIGluc2VydEludG9DYWNoZShjb25zdCBLZXlJZGVudGlmaWVyJiwgY29uc3QgUVBp
eG1hcCYpOworCiAgICAgYm9vbCBtX3ByZXZpb3VzU21vb3RoUGl4bWFwVHJhbnNmb3JtOwogCi0g
ICAgUV9ESVNBQkxFX0NPUFkoU3R5bGVQYWludGVyTW9iaWxlKTsKKyAgICBRX0RJU0FCTEVfQ09Q
WShTdHlsZVBhaW50ZXJNb2JpbGUpCiB9OwogCiB9Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>122205</attachid>
            <date>2012-01-12 03:31:45 -0800</date>
            <delta_ts>2012-01-12 08:43:09 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-75010-20120112123142.patch</filename>
            <type>text/plain</type>
            <size>21621</size>
            <attacher name="Pierre Rossi">pierre.rossi</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTA0NzY0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMzBhN2Q3ZDUyZThkMGFh
YjVkYmYwYjhlMjI1NWIxYTJjMmU5NjQxYi4uMTUxMzU1YmNmMzJmOGQ2NDgyNzM0MWVhZDkzMWRl
YTJjMTA1NjQ3MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDM4IEBACisyMDExLTEyLTIxICBQaWVy
cmUgUm9zc2kgIDxwaWVycmUucm9zc2lAZ21haWwuY29tPgorCisgICAgICAgIFtRdF0gQXZvaWQg
c3RyaW5nIG9wZXJhdGlvbnMgaW4gbW9iaWxlIHRoZW1lJ3MgY2FjaGluZyBtZWNoYW5pc20KKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTc1MDEwCisKKyAg
ICAgICAgVGhlIHN0cmluZyBvcGVyYXRpb25zIGNvbnN0YW50bHkgcGVyZm9ybWVkIGluIHRoZSBt
b2JpbGUgdGhlbWUKKyAgICAgICAgdG8gZmV0Y2ggb3IgcHV0IGNvbnRyb2xzIGluIHRoZSBwaXht
YXAgY2FjaGUgY2FuIGJlIHByZXR0eSBleHBlbnNpdmUuCisgICAgICAgIFRoZSBuZXcgbWVjaGFu
aXNtIGhhcm5lc3NlcyB0aGUgUVBpeG1hcENhY2hlOjpLZXkgQVBJIGluc3RlYWQuCisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgTm8gbmV3IHRlc3RzLCBp
bnRlcm5hbCByZWZhY3RvcmluZy4KKworICAgICAgICAqIHBsYXRmb3JtL3F0L1JlbmRlclRoZW1l
UXRNb2JpbGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6cUhhc2gpOgorICAgICAgICAoV2ViQ29y
ZTo6U3R5bGVQYWludGVyTW9iaWxlOjpmaW5kQ2FjaGVkQ29udHJvbCk6CisgICAgICAgIChXZWJD
b3JlOjpTdHlsZVBhaW50ZXJNb2JpbGU6Omluc2VydEludG9DYWNoZSk6CisgICAgICAgIChXZWJD
b3JlOjpTdHlsZVBhaW50ZXJNb2JpbGU6OmZpbmRDaGVja0JveCk6CisgICAgICAgIChXZWJDb3Jl
OjpTdHlsZVBhaW50ZXJNb2JpbGU6OmRyYXdSYWRpbyk6CisgICAgICAgIChXZWJDb3JlOjpTdHls
ZVBhaW50ZXJNb2JpbGU6OmZpbmRSYWRpbyk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVBhaW50
ZXJNb2JpbGU6OmRyYXdNdWx0aXBsZUNvbWJvQnV0dG9uKToKKyAgICAgICAgKFdlYkNvcmU6OlN0
eWxlUGFpbnRlck1vYmlsZTo6ZHJhd1NpbXBsZUNvbWJvQnV0dG9uKToKKyAgICAgICAgKFdlYkNv
cmU6OlN0eWxlUGFpbnRlck1vYmlsZTo6Z2V0QnV0dG9uSW1hZ2VTaXplKToKKyAgICAgICAgKFdl
YkNvcmU6OlN0eWxlUGFpbnRlck1vYmlsZTo6ZmluZENvbWJvQnV0dG9uKToKKyAgICAgICAgKFdl
YkNvcmU6OlN0eWxlUGFpbnRlck1vYmlsZTo6ZmluZExpbmVFZGl0KToKKyAgICAgICAgKFdlYkNv
cmU6OlN0eWxlUGFpbnRlck1vYmlsZTo6ZmluZFB1c2hCdXR0b24pOgorICAgICAgICAoV2ViQ29y
ZTo6U3R5bGVQYWludGVyTW9iaWxlOjpkcmF3Q29tYm9Cb3gpOgorICAgICAgICAoV2ViQ29yZTo6
U3R5bGVQYWludGVyTW9iaWxlOjpkcmF3UHJvZ3Jlc3MpOgorICAgICAgICAoV2ViQ29yZTo6U3R5
bGVQYWludGVyTW9iaWxlOjpkcmF3U2xpZGVyVGh1bWIpOgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyVGhlbWVRdE1vYmlsZTo6cGFpbnRUZXh0RmllbGQpOgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyVGhlbWVRdE1vYmlsZTo6cGFpbnRNZW51TGlzdCk6CisgICAgICAgICogcGxhdGZvcm0vcXQv
UmVuZGVyVGhlbWVRdE1vYmlsZS5oOgorICAgICAgICAoV2ViQ29yZTo6S2V5SWRlbnRpZmllcjo6
S2V5SWRlbnRpZmllcik6CisgICAgICAgIChXZWJDb3JlOjpLZXlJZGVudGlmaWVyOjpvcGVyYXRv
cj09KToKKwogMjAxMS0xMi0yMSAgU2hhdyBBbmR5ICA8YW5keS5zaGF3QGRpZ2lhLmNvbT4KIAog
ICAgICAgICBGaXggYnVpbGQgaXNzdWUgb24gV2luZG93cyB3aGVuIFF0IGlzIGNvbmZpZ3VyZWQg
d2l0aCAtbHRjZwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vcXQvUmVuZGVy
VGhlbWVRdE1vYmlsZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9xdC9SZW5kZXJUaGVt
ZVF0TW9iaWxlLmNwcAppbmRleCBjYTQ3Y2Y5M2RhMDRjMzk1OGRjMWI0YzkyNDM3Yzc2NDNjYmQw
ZGFjLi44NWYxYjVkMDY2NjBjMGExYTE0OTkyYWM1YjRjNzI2OWZhNjlkM2Q2IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9xdC9SZW5kZXJUaGVtZVF0TW9iaWxlLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9xdC9SZW5kZXJUaGVtZVF0TW9iaWxlLmNwcApAQCAt
NjMsNiArNjMsNyBAQCBzdGF0aWMgY29uc3QgaW50IHJhZGlvV2lkdGggPSAyMTsKIHN0YXRpYyBj
b25zdCBpbnQgc2xpZGVyU2l6ZSA9IDE5Owogc3RhdGljIGNvbnN0IGludCBidXR0b25IZWlnaHRS
YXRpbyA9IDEuNTsKIAorc3RhdGljIGNvbnN0IGZsb2F0IG11bHRpcGxlQ29tYm9Eb3RzT2Zmc2V0
RmFjdG9yID0gMS44Owogc3RhdGljIGNvbnN0IGZsb2F0IGJ1dHRvblBhZGRpbmdMZWZ0ID0gMTg7
CiBzdGF0aWMgY29uc3QgZmxvYXQgYnV0dG9uUGFkZGluZ1JpZ2h0ID0gMTg7CiBzdGF0aWMgY29u
c3QgZmxvYXQgYnV0dG9uUGFkZGluZ1RvcCA9IDI7CkBAIC04MCw2ICs4MSwxOCBAQCBzdGF0aWMg
Y29uc3QgUUNvbG9yIGhpZ2hsaWdodENvbG9yKDE2LCAxMjgsIDIyMSk7CiBzdGF0aWMgY29uc3Qg
UUNvbG9yIGJ1dHRvbkdyYWRpZW50Qm90dG9tKDI0NSwgMjQ1LCAyNDUpOwogc3RhdGljIGNvbnN0
IFFDb2xvciBzaGFkb3dDb2xvcig4MCwgODAsIDgwLCAxNjApOwogCitzdGF0aWMgUUhhc2g8S2V5
SWRlbnRpZmllciwgQ2FjaGVLZXk+IGNhY2hlS2V5czsKKwordWludCBxSGFzaChjb25zdCBLZXlJ
ZGVudGlmaWVyJiBpZCkKK3sKKyAgICBjb25zdCBxdWludDMyIHZhbHVlID0gaWQudHJhaXQxICsg
KGlkLnRyYWl0MiA8PCAxKSArICh1aW50KGlkLnR5cGUpIDw8IDIpICsgKGlkLmhlaWdodCA8PCA1
KSArIChpZC53aWR0aCA8PCAxNCkgKyAoaWQudHJhaXQzIDw8IDI1KTsKKyAgICBjb25zdCB1bnNp
Z25lZCBjaGFyKiBwID0gcmVpbnRlcnByZXRfY2FzdDxjb25zdCB1bnNpZ25lZCBjaGFyKj4oJnZh
bHVlKTsKKyAgICB1aW50IGhhc2ggPSAwOworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgNDsgKytp
KQorICAgICAgICBoYXNoIF49IChoYXNoIDw8IDUpICsgKGhhc2ggPj4gMikgKyBwW2ldOworICAg
IHJldHVybiBoYXNoOworfQorCiBzdGF0aWMgdm9pZCBkcmF3Q29udHJvbEJhY2tncm91bmQoUVBh
aW50ZXIqIHBhaW50ZXIsIGNvbnN0IFFQZW4mIHBlbiwgY29uc3QgUVJlY3QmIHJlY3QsIGNvbnN0
IFFCcnVzaCYgYnJ1c2gpCiB7CiAgICAgUVBlbiBvbGRQZW4gPSBwYWludGVyLT5wZW4oKTsKQEAg
LTE1MCw2ICsxNjMsMjggQEAgU3R5bGVQYWludGVyTW9iaWxlOjp+U3R5bGVQYWludGVyTW9iaWxl
KCkKICAgICBwYWludGVyLT5zZXRSZW5kZXJIaW50cyhRUGFpbnRlcjo6U21vb3RoUGl4bWFwVHJh
bnNmb3JtLCBtX3ByZXZpb3VzU21vb3RoUGl4bWFwVHJhbnNmb3JtKTsKIH0KIAorYm9vbCBTdHls
ZVBhaW50ZXJNb2JpbGU6OmZpbmRDYWNoZWRDb250cm9sKGNvbnN0IEtleUlkZW50aWZpZXImIGtl
eUlkLCBRUGl4bWFwKiByZXN1bHQpCit7CisgICAgc3RhdGljIENhY2hlS2V5IGVtcHR5S2V5Owor
ICAgIENhY2hlS2V5IGtleSA9IGNhY2hlS2V5cy52YWx1ZShrZXlJZCwgZW1wdHlLZXkpOworICAg
IGlmIChrZXkgPT0gZW1wdHlLZXkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBjb25zdCBi
b29sIHJldCA9IFFQaXhtYXBDYWNoZTo6ZmluZChrZXksIHJlc3VsdCk7CisgICAgaWYgKCFyZXQp
CisgICAgICAgIGNhY2hlS2V5cy5yZW1vdmUoa2V5SWQpOworICAgIHJldHVybiByZXQ7Cit9CisK
K3ZvaWQgU3R5bGVQYWludGVyTW9iaWxlOjppbnNlcnRJbnRvQ2FjaGUoY29uc3QgS2V5SWRlbnRp
ZmllciYga2V5SWQsIGNvbnN0IFFQaXhtYXAmIHBpeG1hcCkKK3sKKyAgICBBU1NFUlQoa2V5SWQu
dHlwZSk7CisgICAgY29uc3QgaW50IHNpemVJbktpbG9CeXRlcyA9IHBpeG1hcC53aWR0aCgpICog
cGl4bWFwLmhlaWdodCgpICogcGl4bWFwLmRlcHRoKCkgLyAoOCAqIDEwMjQpOworICAgIC8vIERv
bid0IGNhY2hlIHBpeG1hcHMgb3ZlciA1MTIgS0I7CisgICAgaWYgKHNpemVJbktpbG9CeXRlcyA+
IDUxMikKKyAgICAgICAgcmV0dXJuOworICAgIGNhY2hlS2V5cy5pbnNlcnQoa2V5SWQsIFFQaXht
YXBDYWNoZTo6aW5zZXJ0KHBpeG1hcCkpOworfQorCiB2b2lkIFN0eWxlUGFpbnRlck1vYmlsZTo6
ZHJhd0NoZWNrYWJsZUJhY2tncm91bmQoUVBhaW50ZXIqIHBhaW50ZXIsIGNvbnN0IFFSZWN0JiBy
ZWN0LCBib29sIGNoZWNrZWQsIGJvb2wgZW5hYmxlZCkgY29uc3QKIHsKICAgICBRQnJ1c2ggYnJ1
c2g7CkBAIC0xOTYsMTAgKzIzMSwxMiBAQCBRUGl4bWFwIFN0eWxlUGFpbnRlck1vYmlsZTo6Zmlu
ZENoZWNrQm94KGNvbnN0IFFTaXplJiBzaXplLCBib29sIGNoZWNrZWQsIGJvb2wgZQogewogICAg
IEFTU0VSVChzaXplLndpZHRoKCkgPT0gc2l6ZS5oZWlnaHQoKSk7CiAgICAgUVBpeG1hcCByZXN1
bHQ7Ci0gICAgc3RhdGljIGNvbnN0IFFTdHJpbmcgcHJlZml4ID0gUUxhdGluMVN0cmluZygiJHF0
LXdlYmtpdC1tb2JpbGUtdGhlbWUtY2hlY2tib3gtIik7Ci0gICAgUVN0cmluZyBrZXkgPSBwcmVm
aXggKyBRU3RyaW5nOjpudW1iZXIoc2l6ZS53aWR0aCgpKSArIFFMYXRpbjFTdHJpbmcoIi0iKSAr
IChlbmFibGVkID8gUUxhdGluMVN0cmluZygib24iKSA6IFFMYXRpbjFTdHJpbmcoIm9mZiIpKQot
ICAgICAgICAgICAgICAgICAgKyAoY2hlY2tlZCA/IFFMYXRpbjFTdHJpbmcoIi1jaGVja2VkIikg
OiBRU3RyaW5nKCkpOwotICAgIGlmICghUVBpeG1hcENhY2hlOjpmaW5kKGtleSwgcmVzdWx0KSkg
eworICAgIEtleUlkZW50aWZpZXIgaWQ7CisgICAgaWQudHlwZSA9IEtleUlkZW50aWZpZXI6OkNo
ZWNrQm94OworICAgIGlkLmhlaWdodCA9IHNpemUuaGVpZ2h0KCk7CisgICAgaWQudHJhaXQxID0g
ZW5hYmxlZDsKKyAgICBpZC50cmFpdDIgPSBjaGVja2VkOworICAgIGlmICghZmluZENhY2hlZENv
bnRyb2woaWQsICZyZXN1bHQpKSB7CiAgICAgICAgIHJlc3VsdCA9IFFQaXhtYXAoc2l6ZSk7CiAg
ICAgICAgIHJlc3VsdC5maWxsKFF0Ojp0cmFuc3BhcmVudCk7CiAgICAgICAgIFFQYWludGVyIGNh
Y2hlUGFpbnRlcigmcmVzdWx0KTsKQEAgLTIwNywxNCArMjQ0LDEzIEBAIFFQaXhtYXAgU3R5bGVQ
YWludGVyTW9iaWxlOjpmaW5kQ2hlY2tCb3goY29uc3QgUVNpemUmIHNpemUsIGJvb2wgY2hlY2tl
ZCwgYm9vbCBlCiAgICAgICAgIGRyYXdDaGVja2FibGVCYWNrZ3JvdW5kKCZjYWNoZVBhaW50ZXIs
IHJlY3QsIGNoZWNrZWQsIGVuYWJsZWQpOwogICAgICAgICBpZiAoY2hlY2tlZCB8fCAhZW5hYmxl
ZCkKICAgICAgICAgICAgIGRyYXdDaGVja2VyKCZjYWNoZVBhaW50ZXIsIHJlY3QsIGVuYWJsZWQg
PyBRdDo6d2hpdGUgOiBRdDo6Z3JheSk7Ci0gICAgICAgIFFQaXhtYXBDYWNoZTo6aW5zZXJ0KGtl
eSwgcmVzdWx0KTsKKyAgICAgICAgaW5zZXJ0SW50b0NhY2hlKGlkLCByZXN1bHQpOwogICAgIH0K
ICAgICByZXR1cm4gcmVzdWx0OwogfQogCiB2b2lkIFN0eWxlUGFpbnRlck1vYmlsZTo6ZHJhd1Jh
ZGlvKFFQYWludGVyKiBwYWludGVyLCBjb25zdCBRU2l6ZSYgc2l6ZSwgYm9vbCBjaGVja2VkLCBi
b29sIGVuYWJsZWQpIGNvbnN0CiB7Ci0gICAgQVNTRVJUKHNpemUud2lkdGgoKSA9PSBzaXplLmhl
aWdodCgpKTsKICAgICBRUmVjdCByZWN0KFFQb2ludCgwLCAwKSwgc2l6ZSk7CiAKICAgICBkcmF3
Q2hlY2thYmxlQmFja2dyb3VuZChwYWludGVyLCByZWN0LCBjaGVja2VkLCBlbmFibGVkKTsKQEAg
LTIyNSwyMSArMjYxLDI0IEBAIHZvaWQgU3R5bGVQYWludGVyTW9iaWxlOjpkcmF3UmFkaW8oUVBh
aW50ZXIqIHBhaW50ZXIsIGNvbnN0IFFTaXplJiBzaXplLCBib29sIGNoCiAKIFFQaXhtYXAgU3R5
bGVQYWludGVyTW9iaWxlOjpmaW5kUmFkaW8oY29uc3QgUVNpemUmIHNpemUsIGJvb2wgY2hlY2tl
ZCwgYm9vbCBlbmFibGVkKSBjb25zdAogeworICAgIEFTU0VSVChzaXplLndpZHRoKCkgPT0gc2l6
ZS5oZWlnaHQoKSk7CiAgICAgUVBpeG1hcCByZXN1bHQ7Ci0gICAgc3RhdGljIGNvbnN0IFFTdHJp
bmcgcHJlZml4ID0gUUxhdGluMVN0cmluZygiJHF0LXdlYmtpdC1tb2JpbGUtdGhlbWUtcmFkaW8t
Iik7Ci0gICAgUVN0cmluZyBrZXkgPSBwcmVmaXggKyBRU3RyaW5nOjpudW1iZXIoc2l6ZS53aWR0
aCgpKSArIFFMYXRpbjFTdHJpbmcoIi0iKSArIChlbmFibGVkID8gUUxhdGluMVN0cmluZygib24i
KSA6IFFMYXRpbjFTdHJpbmcoIm9mZiIpKQotICAgICAgICAgICAgICAgICAgKyAoY2hlY2tlZCA/
IFFMYXRpbjFTdHJpbmcoIi1jaGVja2VkIikgOiBRU3RyaW5nKCkpOwotICAgIGlmICghUVBpeG1h
cENhY2hlOjpmaW5kKGtleSwgcmVzdWx0KSkgeworICAgIEtleUlkZW50aWZpZXIgaWQ7CisgICAg
aWQudHlwZSA9IEtleUlkZW50aWZpZXI6OlJhZGlvOworICAgIGlkLmhlaWdodCA9IHNpemUuaGVp
Z2h0KCk7CisgICAgaWQudHJhaXQxID0gZW5hYmxlZDsKKyAgICBpZC50cmFpdDIgPSBjaGVja2Vk
OworICAgIGlmICghZmluZENhY2hlZENvbnRyb2woaWQsICZyZXN1bHQpKSB7CiAgICAgICAgIHJl
c3VsdCA9IFFQaXhtYXAoc2l6ZSk7CiAgICAgICAgIHJlc3VsdC5maWxsKFF0Ojp0cmFuc3BhcmVu
dCk7CiAgICAgICAgIFFQYWludGVyIGNhY2hlUGFpbnRlcigmcmVzdWx0KTsKICAgICAgICAgZHJh
d1JhZGlvKCZjYWNoZVBhaW50ZXIsIHNpemUsIGNoZWNrZWQsIGVuYWJsZWQpOwotICAgICAgICBR
UGl4bWFwQ2FjaGU6Omluc2VydChrZXksIHJlc3VsdCk7CisgICAgICAgIGluc2VydEludG9DYWNo
ZShpZCwgcmVzdWx0KTsKICAgICB9CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotdm9pZCBTdHls
ZVBhaW50ZXJNb2JpbGU6OmRyYXdNdWx0aXBsZUNvbWJvQnV0dG9uKFFQYWludGVyKiBwYWludGVy
LCBjb25zdCBRU2l6ZSYgc2l6ZSwgY29uc3QgUUNvbG9yJiBjb2xvcikgY29uc3QKK3ZvaWQgU3R5
bGVQYWludGVyTW9iaWxlOjpkcmF3TXVsdGlwbGVDb21ib0J1dHRvbihRUGFpbnRlciogcGFpbnRl
ciwgY29uc3QgUVNpemVGJiBzaXplLCBjb25zdCBRQ29sb3ImIGNvbG9yKSBjb25zdAogewogICAg
IGNvbnN0IHFyZWFsIGRvdERpYW1ldGVyID0gc2l6ZS5oZWlnaHQoKTsKICAgICBjb25zdCBxcmVh
bCBkb3RSYWRpaSA9IGRvdERpYW1ldGVyIC8gMjsKQEAgLTI0OCw1OSArMjg3LDY2IEBAIHZvaWQg
U3R5bGVQYWludGVyTW9iaWxlOjpkcmF3TXVsdGlwbGVDb21ib0J1dHRvbihRUGFpbnRlciogcGFp
bnRlciwgY29uc3QgUVNpemUmCiAgICAgcGFpbnRlci0+c2V0UGVuKGNvbG9yKTsKICAgICBwYWlu
dGVyLT5zZXRCcnVzaChjb2xvcik7CiAKLSAgICBjb25zdCBxcmVhbCBvZmZzZXRGYWN0b3IgPSAx
Ljg7CiAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCAzOyArK2kpIHsKLSAgICAgICAgUVBvaW50RiBj
ZW50ZXIob2Zmc2V0RmFjdG9yICogZG90UmFkaWkgKyBpICogb2Zmc2V0RmFjdG9yICogZG90RGlh
bWV0ZXIsIGRvdFJhZGlpKTsKKyAgICAgICAgUVBvaW50RiBjZW50ZXIoZG90UmFkaWkgKyBpICog
bXVsdGlwbGVDb21ib0RvdHNPZmZzZXRGYWN0b3IgKiBkb3REaWFtZXRlciwgZG90UmFkaWkpOwog
ICAgICAgICBwYWludGVyLT5kcmF3RWxsaXBzZShjZW50ZXIsIGRvdFJhZGlpLCBkb3RSYWRpaSk7
CiAgICAgfQogfQogCi12b2lkIFN0eWxlUGFpbnRlck1vYmlsZTo6ZHJhd1NpbXBsZUNvbWJvQnV0
dG9uKFFQYWludGVyKiBwYWludGVyLCBjb25zdCBRU2l6ZSYgc2l6ZSwgY29uc3QgUUNvbG9yJiBj
b2xvcikgY29uc3QKK3ZvaWQgU3R5bGVQYWludGVyTW9iaWxlOjpkcmF3U2ltcGxlQ29tYm9CdXR0
b24oUVBhaW50ZXIqIHBhaW50ZXIsIGNvbnN0IFFTaXplRiYgc2l6ZSwgY29uc3QgUUNvbG9yJiBj
b2xvcikgY29uc3QKIHsKLSAgICBjb25zdCBpbnQgZ2FwID0gKHNpemUuaGVpZ2h0KCkgLSAxKSAv
IDU7Ci0gICAgY29uc3QgaW50IGFycm93SGVpZ2h0ID0gMiAqIGdhcDsKLSAgICBjb25zdCBpbnQg
cmlnaHQgPSBhcnJvd0hlaWdodCAqIDI7Ci0gICAgY29uc3QgaW50IGJvdHRvbUJhc2VsaW5lID0g
YXJyb3dIZWlnaHQgKyBnYXAgKyAxOwotICAgIFFQb2x5Z29uIHVwQXJyb3csIGRvd25BcnJvdzsK
LSAgICB1cEFycm93IDw8IFFQb2ludCgwLCBhcnJvd0hlaWdodCkgPDwgUVBvaW50KGFycm93SGVp
Z2h0LCAwKSA8PCBRUG9pbnQocmlnaHQsIGFycm93SGVpZ2h0KTsKLSAgICBkb3duQXJyb3cgPDwg
UVBvaW50KDAsIGJvdHRvbUJhc2VsaW5lKSA8PCBRUG9pbnQoYXJyb3dIZWlnaHQsIGJvdHRvbUJh
c2VsaW5lICsgYXJyb3dIZWlnaHQpCi0gICAgICAgICAgICAgIDw8IFFQb2ludChyaWdodCwgYm90
dG9tQmFzZWxpbmUpOworICAgIGNvbnN0IHFyZWFsIGdhcCA9IHNpemUuaGVpZ2h0KCkgLyA1LjA7
CisgICAgY29uc3QgcXJlYWwgYXJyb3dIZWlnaHQgPSAoc2l6ZS5oZWlnaHQoKSAtIGdhcCkgLyAy
LjA7CisgICAgY29uc3QgcXJlYWwgcmlnaHQgPSBhcnJvd0hlaWdodCAqIDI7CisgICAgY29uc3Qg
cXJlYWwgYm90dG9tQmFzZWxpbmUgPSBzaXplLmhlaWdodCgpIC0gYXJyb3dIZWlnaHQ7CisgICAg
UVBvbHlnb25GIHVwQXJyb3csIGRvd25BcnJvdzsKKyAgICB1cEFycm93IDw8IFFQb2ludEYoMCwg
YXJyb3dIZWlnaHQpIDw8IFFQb2ludEYoYXJyb3dIZWlnaHQsIDApIDw8IFFQb2ludEYocmlnaHQs
IGFycm93SGVpZ2h0KTsKKyAgICBkb3duQXJyb3cgPDwgUVBvaW50RigwLCBib3R0b21CYXNlbGlu
ZSkgPDwgUVBvaW50RihhcnJvd0hlaWdodCwgYm90dG9tQmFzZWxpbmUgKyBhcnJvd0hlaWdodCkK
KyAgICAgICAgICAgICAgPDwgUVBvaW50RihyaWdodCwgYm90dG9tQmFzZWxpbmUpOwogCi0gICAg
cGFpbnRlci0+c2V0UGVuKGNvbG9yKTsKKyAgICBwYWludGVyLT5zZXRQZW4oUXQ6Ok5vUGVuKTsK
ICAgICBwYWludGVyLT5zZXRCcnVzaChjb2xvcik7CiAgICAgcGFpbnRlci0+ZHJhd1BvbHlnb24o
dXBBcnJvdyk7CiAgICAgcGFpbnRlci0+ZHJhd1BvbHlnb24oZG93bkFycm93KTsKIH0KIAotUVNp
emUgU3R5bGVQYWludGVyTW9iaWxlOjpnZXRCdXR0b25JbWFnZVNpemUoaW50IGJ1dHRvbkhlaWdo
dCwgYm9vbCBtdWx0aXBsZSkgY29uc3QKK1FTaXplRiBTdHlsZVBhaW50ZXJNb2JpbGU6OmdldEJ1
dHRvbkltYWdlU2l6ZShpbnQgYnV0dG9uSGVpZ2h0LCBib29sIG11bHRpcGxlKSBjb25zdAogewog
ICAgIGlmIChtdWx0aXBsZSkKLSAgICAgICAgcmV0dXJuIFFTaXplKGJ1dHRvbkhlaWdodCAvIDIs
IGJ1dHRvbkhlaWdodCAvIDEwKTsKKyAgICAgICAgcmV0dXJuIFFTaXplRihxcmVhbCgyICsgYnV0
dG9uSGVpZ2h0ICogMyAqIG11bHRpcGxlQ29tYm9Eb3RzT2Zmc2V0RmFjdG9yLyAxMC4wKQorICAg
ICAgICAgICAgICAgICAgICAgICwgcXJlYWwoMiArIGJ1dHRvbkhlaWdodCAvIDEwLjApKTsKIAot
ICAgIGNvbnN0IGludCBoZWlnaHQgPSBidXR0b25IZWlnaHQgLyAyLjU7Ci0gICAgY29uc3QgaW50
IHdpZHRoID0gNCAqIGhlaWdodCAvIDU7Ci0gICAgcmV0dXJuIFFTaXplKHdpZHRoLCBoZWlnaHQp
OworICAgIGNvbnN0IHFyZWFsIGhlaWdodCA9IGJ1dHRvbkhlaWdodCAvIDIuNTsKKyAgICBjb25z
dCBxcmVhbCB3aWR0aCA9IDQgKiBoZWlnaHQgLyA1LjA7CisgICAgcmV0dXJuIFFTaXplRigyICsg
d2lkdGgsIDIgKyBoZWlnaHQpOwogfQogCiBRUGl4bWFwIFN0eWxlUGFpbnRlck1vYmlsZTo6Zmlu
ZENvbWJvQnV0dG9uKGNvbnN0IFFTaXplJiBzaXplLCBib29sIG11bHRpcGxlLCBib29sIGVuYWJs
ZWQpIGNvbnN0CiB7CiAgICAgaWYgKHNpemUuaXNOdWxsKCkpCiAgICAgICAgIHJldHVybiBRUGl4
bWFwKCk7Ci0gICAgc3RhdGljIGNvbnN0IFFTdHJpbmcgcHJlZml4ID0gUUxhdGluMVN0cmluZygi
JHF0LXdlYmtpdC1tb2JpbGUtdGhlbWUtY29tYm8tIik7CiAgICAgUVBpeG1hcCByZXN1bHQ7Ci0g
ICAgUVN0cmluZyBrZXkgPSBwcmVmaXggKyAobXVsdGlwbGUgPyBRTGF0aW4xU3RyaW5nKCJtdWx0
aXBsZS0iKSA6IFFMYXRpbjFTdHJpbmcoInNpbXBsZS0iKSkKLSAgICAgICAgKyBRU3RyaW5nOjpu
dW1iZXIoc2l6ZS53aWR0aCgpKSArIFFMYXRpbjFTdHJpbmcoIi0iKSArIFFTdHJpbmc6Om51bWJl
cihzaXplLmhlaWdodCgpKQotICAgICAgICArIFFMYXRpbjFTdHJpbmcoIi0iKSArIChlbmFibGVk
ID8gUUxhdGluMVN0cmluZygib24iKSA6IFFMYXRpbjFTdHJpbmcoIm9mZiIpKTsKLQotICAgIGlm
ICghUVBpeG1hcENhY2hlOjpmaW5kKGtleSwgcmVzdWx0KSkgeworICAgIEtleUlkZW50aWZpZXIg
aWQ7CisgICAgaWQudHlwZSA9IEtleUlkZW50aWZpZXI6OkNvbWJvQnV0dG9uOworICAgIGlkLndp
ZHRoID0gc2l6ZS53aWR0aCgpOworICAgIGlkLmhlaWdodCA9IHNpemUuaGVpZ2h0KCk7CisgICAg
aWQudHJhaXQxID0gbXVsdGlwbGU7CisgICAgaWQudHJhaXQyID0gZW5hYmxlZDsKKworICAgIGlm
ICghZmluZENhY2hlZENvbnRyb2woaWQsICZyZXN1bHQpKSB7CiAgICAgICAgIHJlc3VsdCA9IFFQ
aXhtYXAoc2l6ZSk7CisgICAgICAgIGNvbnN0IHFyZWFsIGJvcmRlciA9IHBhaW50ZXJTY2FsZShw
YWludGVyKTsKKyAgICAgICAgY29uc3QgUVNpemVGIHBhZGRpbmcoMiAqIGJvcmRlciwgMiAqIGJv
cmRlcik7CisgICAgICAgIEFTU0VSVChpbm5lclNpemUgPiBwYWRkaW5nLnRvU2l6ZSgpKTsKKyAg
ICAgICAgY29uc3QgUVNpemVGIGlubmVyU2l6ZSA9IHNpemUgLSBwYWRkaW5nOwogICAgICAgICBy
ZXN1bHQuZmlsbChRdDo6dHJhbnNwYXJlbnQpOwogICAgICAgICBRUGFpbnRlciBjYWNoZVBhaW50
ZXIoJnJlc3VsdCk7CisgICAgICAgIGNhY2hlUGFpbnRlci50cmFuc2xhdGUoYm9yZGVyLCBib3Jk
ZXIpOwogICAgICAgICBpZiAobXVsdGlwbGUpCi0gICAgICAgICAgICBkcmF3TXVsdGlwbGVDb21i
b0J1dHRvbigmY2FjaGVQYWludGVyLCBzaXplLCBlbmFibGVkID8gZGFya0NvbG9yIDogUXQ6Omxp
Z2h0R3JheSk7CisgICAgICAgICAgICBkcmF3TXVsdGlwbGVDb21ib0J1dHRvbigmY2FjaGVQYWlu
dGVyLCBpbm5lclNpemUsIGVuYWJsZWQgPyBkYXJrQ29sb3IgOiBRdDo6bGlnaHRHcmF5KTsKICAg
ICAgICAgZWxzZQotICAgICAgICAgICAgZHJhd1NpbXBsZUNvbWJvQnV0dG9uKCZjYWNoZVBhaW50
ZXIsIHNpemUsIGVuYWJsZWQgPyBkYXJrQ29sb3IgOiBRdDo6bGlnaHRHcmF5KTsKLSAgICAgICAg
UVBpeG1hcENhY2hlOjppbnNlcnQoa2V5LCByZXN1bHQpOworICAgICAgICAgICAgZHJhd1NpbXBs
ZUNvbWJvQnV0dG9uKCZjYWNoZVBhaW50ZXIsIGlubmVyU2l6ZSwgZW5hYmxlZCA/IGRhcmtDb2xv
ciA6IFF0OjpsaWdodEdyYXkpOworICAgICAgICBpbnNlcnRJbnRvQ2FjaGUoaWQsIHJlc3VsdCk7
CiAgICAgfQogICAgIHJldHVybiByZXN1bHQ7CiB9CkBAIC0zMTcsMTAgKzM2MywxMyBAQCB2b2lk
IFN0eWxlUGFpbnRlck1vYmlsZTo6ZHJhd0xpbmVFZGl0KGNvbnN0IFFSZWN0JiByZWN0LCBib29s
IGZvY3VzZWQsIGJvb2wgZW5hYgogUVBpeG1hcCBTdHlsZVBhaW50ZXJNb2JpbGU6OmZpbmRMaW5l
RWRpdChjb25zdCBRU2l6ZSAmIHNpemUsIGJvb2wgZm9jdXNlZCkgY29uc3QKIHsKICAgICBRUGl4
bWFwIHJlc3VsdDsKLSAgICBzdGF0aWMgY29uc3QgUVN0cmluZyBwcmVmaXggPSBRTGF0aW4xU3Ry
aW5nKCIkcXQtd2Via2l0LW1vYmlsZS10aGVtZS1saW5lRWRpdC0iKTsKLSAgICBRU3RyaW5nIGtl
eSA9IHByZWZpeCArIFFTdHJpbmc6Om51bWJlcihzaXplLndpZHRoKCkpICsgUUxhdGluMVN0cmlu
ZygieCIpICsgUVN0cmluZzo6bnVtYmVyKHNpemUuaGVpZ2h0KCkpCi0gICAgICAgICAgICAgICAg
ICAgICAgKyAoZm9jdXNlZCA/IFFMYXRpbjFTdHJpbmcoIi1mb2N1c2VkIikgOiBRU3RyaW5nKCkp
OwotICAgIGlmICghUVBpeG1hcENhY2hlOjpmaW5kKGtleSwgcmVzdWx0KSkgeworICAgIEtleUlk
ZW50aWZpZXIgaWQ7CisgICAgaWQudHlwZSA9IEtleUlkZW50aWZpZXI6OkxpbmVFZGl0OworICAg
IGlkLndpZHRoID0gc2l6ZS53aWR0aCgpOworICAgIGlkLmhlaWdodCA9IHNpemUuaGVpZ2h0KCk7
CisgICAgaWQudHJhaXQxID0gZm9jdXNlZDsKKworICAgIGlmICghZmluZENhY2hlZENvbnRyb2wo
aWQsICZyZXN1bHQpKSB7CiAgICAgICAgIGNvbnN0IGludCBmb2N1c0ZyYW1lID0gcGFpbnRlclNj
YWxlKHBhaW50ZXIpOwogICAgICAgICByZXN1bHQgPSBRUGl4bWFwKHNpemUgKyBRU2l6ZSgyICog
Zm9jdXNGcmFtZSwgMiAqIGZvY3VzRnJhbWUpKTsKICAgICAgICAgcmVzdWx0LmZpbGwoUXQ6OnRy
YW5zcGFyZW50KTsKQEAgLTMzMiw3ICszODEsNyBAQCBRUGl4bWFwIFN0eWxlUGFpbnRlck1vYmls
ZTo6ZmluZExpbmVFZGl0KGNvbnN0IFFTaXplICYgc2l6ZSwgYm9vbCBmb2N1c2VkKSBjb25zdAog
ICAgICAgICAgICAgUVBlbiBmb2N1c1BlbihoaWdobGlnaHRDb2xvciwgZm9jdXNGcmFtZSwgUXQ6
OlNvbGlkTGluZSwgUXQ6OlJvdW5kQ2FwLCBRdDo6Um91bmRKb2luKTsKICAgICAgICAgICAgIGRy
YXdDb250cm9sQmFja2dyb3VuZCgmY2FjaGVQYWludGVyLCBmb2N1c1BlbiwgcmVjdCwgUXQ6Ok5v
QnJ1c2gpOwogICAgICAgICB9Ci0gICAgICAgIFFQaXhtYXBDYWNoZTo6aW5zZXJ0KGtleSwgcmVz
dWx0KTsKKyAgICAgICAgaW5zZXJ0SW50b0NhY2hlKGlkLCByZXN1bHQpOwogICAgIH0KICAgICBy
ZXR1cm4gcmVzdWx0OwogfQpAQCAtMzY2LDEwICs0MTUsMTMgQEAgdm9pZCBTdHlsZVBhaW50ZXJN
b2JpbGU6OmRyYXdQdXNoQnV0dG9uKGNvbnN0IFFSZWN0JiByZWN0LCBib29sIHN1bmtlbiwgYm9v
bCBlbmEKIFFQaXhtYXAgU3R5bGVQYWludGVyTW9iaWxlOjpmaW5kUHVzaEJ1dHRvbihjb25zdCBR
U2l6ZSYgc2l6ZSwgYm9vbCBzdW5rZW4sIGJvb2wgZW5hYmxlZCkgY29uc3QKIHsKICAgICBRUGl4
bWFwIHJlc3VsdDsKLSAgICBzdGF0aWMgY29uc3QgUVN0cmluZyBwcmVmaXggPSBRTGF0aW4xU3Ry
aW5nKCIkcXQtd2Via2l0LW1vYmlsZS10aGVtZS1wdXNoQnV0dG9uLSIpOwotICAgIFFTdHJpbmcg
a2V5ID0gcHJlZml4ICsgUVN0cmluZzo6bnVtYmVyKHNpemUud2lkdGgoKSkgKyBRTGF0aW4xU3Ry
aW5nKCJ4IikgKyBRU3RyaW5nOjpudW1iZXIoc2l6ZS5oZWlnaHQoKSkKLSAgICAgICAgICAgICAg
ICAgICAgICArIChzdW5rZW4gPyBRTGF0aW4xU3RyaW5nKCItc3Vua2VuIikgOiBRU3RyaW5nKCkp
ICsgKGVuYWJsZWQgPyBRTGF0aW4xU3RyaW5nKCItb24iKSA6IFFTdHJpbmcoKSk7Ci0gICAgaWYg
KCFRUGl4bWFwQ2FjaGU6OmZpbmQoa2V5LCByZXN1bHQpKSB7CisgICAgS2V5SWRlbnRpZmllciBp
ZDsKKyAgICBpZC50eXBlID0gS2V5SWRlbnRpZmllcjo6UHVzaEJ1dHRvbjsKKyAgICBpZC53aWR0
aCA9IHNpemUud2lkdGgoKTsKKyAgICBpZC5oZWlnaHQgPSBzaXplLmhlaWdodCgpOworICAgIGlk
LnRyYWl0MSA9IHN1bmtlbjsKKyAgICBpZC50cmFpdDIgPSBlbmFibGVkOworICAgIGlmICghZmlu
ZENhY2hlZENvbnRyb2woaWQsICZyZXN1bHQpKSB7CiAgICAgICAgIGNvbnN0IHFyZWFsIGRyb3BT
aGFkb3dTaXplID0gcGFpbnRlclNjYWxlKHBhaW50ZXIpOwogICAgICAgICByZXN1bHQgPSBRUGl4
bWFwKHNpemUpOwogICAgICAgICByZXN1bHQuZmlsbChRdDo6dHJhbnNwYXJlbnQpOwpAQCAtMzk2
LDcgKzQ0OCw3IEBAIFFQaXhtYXAgU3R5bGVQYWludGVyTW9iaWxlOjpmaW5kUHVzaEJ1dHRvbihj
b25zdCBRU2l6ZSYgc2l6ZSwgYm9vbCBzdW5rZW4sIGJvb2wKICAgICAgICAgICAgIGJydXNoID0g
bGluZWFyR3JhZGllbnQ7CiAgICAgICAgIH0KICAgICAgICAgZHJhd0NvbnRyb2xCYWNrZ3JvdW5k
KCZjYWNoZVBhaW50ZXIsIGJvcmRlclBlbihwYWludGVyKSwgcmVjdCwgYnJ1c2gpOwotICAgICAg
ICBRUGl4bWFwQ2FjaGU6Omluc2VydChrZXksIHJlc3VsdCk7CisgICAgICAgIGluc2VydEludG9D
YWNoZShpZCwgcmVzdWx0KTsKICAgICB9CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KQEAgLTQwNywy
OCArNDU5LDMxIEBAIHZvaWQgU3R5bGVQYWludGVyTW9iaWxlOjpkcmF3Q29tYm9Cb3goY29uc3Qg
UVJlY3QmIHJlY3QsIGJvb2wgbXVsdGlwbGUsIGJvb2wgZW5hCiAgICAgaWYgKHB1c2hCdXR0b24u
aXNOdWxsKCkpCiAgICAgICAgIHJldHVybjsKICAgICBwYWludGVyLT5kcmF3UGl4bWFwKHJlY3Qs
IHB1c2hCdXR0b24pOwotICAgIFFSZWN0IHRhcmdldFJlY3QoUVBvaW50KDAsIDApLCBnZXRCdXR0
b25JbWFnZVNpemUocmVjdC5oZWlnaHQoKSAtIDEsIG11bHRpcGxlKSk7Ci0gICAgY29uc3QgUVBv
aW50IGJ1dHRvbkNlbnRlcihyZWN0LnJpZ2h0KCkgLSBhcnJvd0JveFdpZHRoIC8gMiwgcmVjdC5o
ZWlnaHQoKSAvIDIgLSAxKTsKKyAgICBRUmVjdEYgdGFyZ2V0UmVjdChRUG9pbnRGKDAsIDApLCBn
ZXRCdXR0b25JbWFnZVNpemUocmVjdC5oZWlnaHQoKSAtIDEsIG11bHRpcGxlKSk7CisgICAgY29u
c3QgUVBvaW50RiBidXR0b25DZW50ZXIocmVjdC5yaWdodCgpIC0gYXJyb3dCb3hXaWR0aCAvIDIs
IHJlY3QudG9wKCkgKyAocmVjdC5oZWlnaHQoKSAtIDEpIC8gMik7CiAgICAgdGFyZ2V0UmVjdC5t
b3ZlQ2VudGVyKGJ1dHRvbkNlbnRlcik7Ci0gICAgUVBpeG1hcCBwaWMgPSBmaW5kQ29tYm9CdXR0
b24oc2l6ZUZvclBhaW50ZXJTY2FsZSh0YXJnZXRSZWN0KSwgbXVsdGlwbGUsIGVuYWJsZWQpOwor
ICAgIFFQaXhtYXAgcGljID0gZmluZENvbWJvQnV0dG9uKHNpemVGb3JQYWludGVyU2NhbGUodGFy
Z2V0UmVjdC50b1JlY3QoKSksIG11bHRpcGxlLCBlbmFibGVkKTsKICAgICBpZiAocGljLmlzTnVs
bCgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBwYWludGVyLT5kcmF3UGl4bWFwKHRhcmdldFJl
Y3QsIHBpYyk7CisgICAgcGFpbnRlci0+ZHJhd1BpeG1hcCh0YXJnZXRSZWN0LnRvUmVjdCgpLCBw
aWMpOwogfQogCiB2b2lkIFN0eWxlUGFpbnRlck1vYmlsZTo6ZHJhd1Byb2dyZXNzKGNvbnN0IFFS
ZWN0JiByZWN0LCBkb3VibGUgcHJvZ3Jlc3MsIGJvb2wgbGVmdFRvUmlnaHQsIGJvb2wgYW5pbWF0
ZWQpIGNvbnN0CiB7Ci0gICAgc3RhdGljIGNvbnN0IFFTdHJpbmcgcHJlZml4ID0gUUxhdGluMVN0
cmluZygiJHF0LXdlYmtpdC1tb2JpbGUtdGhlbWUtcHJvZ3Jlc3MtIik7CiAgICAgY29uc3QgaW50
IGJvcmRlciA9IHJlY3QuaGVpZ2h0KCkgLyA0OwogICAgIGNvbnN0IFFSZWN0IHRhcmdldFJlY3Qg
PSByZWN0LmFkanVzdGVkKDAsIGJvcmRlciwgMCwgLWJvcmRlcik7CiAKICAgICBRUGl4bWFwIHJl
c3VsdDsKICAgICBjb25zdCBRU2l6ZSBpbWFnZVNpemUgPSBzaXplRm9yUGFpbnRlclNjYWxlKHRh
cmdldFJlY3QpOwotICAgIFFTdHJpbmcga2V5ID0gcHJlZml4ICsgUVN0cmluZzo6bnVtYmVyKGlt
YWdlU2l6ZS53aWR0aCgpKSArIFFMYXRpbjFTdHJpbmcoIi0iKSArIFFTdHJpbmc6Om51bWJlcihp
bWFnZVNpemUuaGVpZ2h0KCkpCi0gICAgICAgICAgICArIFFMYXRpbjFTdHJpbmcoIi0iKSArIFFT
dHJpbmc6Om51bWJlcihwcm9ncmVzcywgJ2YnLCAzKSArIChhbmltYXRlZD8gUUxhdGluMVN0cmlu
ZygiLWFuaW0iKSA6IFFTdHJpbmcoKSkKLSAgICAgICAgICAgICAgICAgICAgICAgICArICgoIWFu
aW1hdGVkICYmICFsZWZ0VG9SaWdodCkgPyBRTGF0aW4xU3RyaW5nKCItcnRsIikgOiBRU3RyaW5n
KCkpOwotICAgIGlmICghUVBpeG1hcENhY2hlOjpmaW5kKGtleSwgcmVzdWx0KSkgeworICAgIEtl
eUlkZW50aWZpZXIgaWQ7CisgICAgaWQudHlwZSA9IEtleUlkZW50aWZpZXI6OlByb2dyZXNzOwor
ICAgIGlkLndpZHRoID0gaW1hZ2VTaXplLndpZHRoKCk7CisgICAgaWQuaGVpZ2h0ID0gaW1hZ2VT
aXplLmhlaWdodCgpOworICAgIGlkLnRyYWl0MSA9IGFuaW1hdGVkOworICAgIGlkLnRyYWl0MiA9
ICghYW5pbWF0ZWQgJiYgIWxlZnRUb1JpZ2h0KTsKKyAgICBpZC50cmFpdDMgPSBwcm9ncmVzcyAq
IDEwMDsKKyAgICBpZiAoIWZpbmRDYWNoZWRDb250cm9sKGlkLCAmcmVzdWx0KSkgewogICAgICAg
ICBpZiAoaW1hZ2VTaXplLmlzTnVsbCgpKQogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICBy
ZXN1bHQgPSBRUGl4bWFwKGltYWdlU2l6ZSk7CkBAIC00NjMsMjUgKzUxOCwyOCBAQCB2b2lkIFN0
eWxlUGFpbnRlck1vYmlsZTo6ZHJhd1Byb2dyZXNzKGNvbnN0IFFSZWN0JiByZWN0LCBkb3VibGUg
cHJvZ3Jlc3MsIGJvb2wgbAogICAgICAgICAgICAgcmFkaXVzID0gcmFkaXVzRmFjdG9yICogcHJv
Z3Jlc3NSZWN0LmhlaWdodCgpOwogICAgICAgICAgICAgcGFpbnRlci5kcmF3Um91bmRlZFJlY3Qo
cHJvZ3Jlc3NSZWN0LCByYWRpdXMsIHJhZGl1cyk7CiAgICAgICAgIH0KLSAgICAgICAgUVBpeG1h
cENhY2hlOjppbnNlcnQoa2V5LCByZXN1bHQpOworICAgICAgICBpbnNlcnRJbnRvQ2FjaGUoaWQs
IHJlc3VsdCk7CiAgICAgfQogICAgIHBhaW50ZXItPmRyYXdQaXhtYXAodGFyZ2V0UmVjdCwgcmVz
dWx0KTsKIH0KIAogdm9pZCBTdHlsZVBhaW50ZXJNb2JpbGU6OmRyYXdTbGlkZXJUaHVtYihjb25z
dCBRUmVjdCAmIHJlY3QsIGJvb2wgcHJlc3NlZCkgY29uc3QKIHsKLSAgICBzdGF0aWMgY29uc3Qg
UVN0cmluZyBwcmVmaXggPSBRTGF0aW4xU3RyaW5nKCIkcXQtd2Via2l0LW1vYmlsZS10aGVtZS1z
bGlkZXItdGh1bWItIik7CiAgICAgUVBpeG1hcCByZXN1bHQ7CiAgICAgY29uc3QgUVNpemUgc2l6
ZSA9IHNpemVGb3JQYWludGVyU2NhbGUocmVjdCk7Ci0gICAgY29uc3QgUVN0cmluZyBrZXkgPSBw
cmVmaXggKyBRU3RyaW5nOjpudW1iZXIoc2l6ZS53aWR0aCgpKTsKLSAgICBpZiAoIVFQaXhtYXBD
YWNoZTo6ZmluZChrZXksICZyZXN1bHQpKSB7CisgICAgS2V5SWRlbnRpZmllciBpZDsKKyAgICBp
ZC50eXBlID0gS2V5SWRlbnRpZmllcjo6U2xpZGVyVGh1bWI7CisgICAgaWQud2lkdGggPSBzaXpl
LndpZHRoKCk7CisgICAgaWQuaGVpZ2h0ID0gc2l6ZS5oZWlnaHQoKTsKKyAgICBpZC50cmFpdDEg
PSBwcmVzc2VkOworICAgIGlmICghZmluZENhY2hlZENvbnRyb2woaWQsICZyZXN1bHQpKSB7CiAg
ICAgICAgIGlmIChzaXplLmlzTnVsbCgpKQogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICBy
ZXN1bHQgPSBRUGl4bWFwKHNpemUpOwogICAgICAgICByZXN1bHQuZmlsbChRdDo6dHJhbnNwYXJl
bnQpOwogICAgICAgICBRUGFpbnRlciBjYWNoZVBhaW50ZXIoJnJlc3VsdCk7CiAgICAgICAgIGRy
YXdDb250cm9sQmFja2dyb3VuZCgmY2FjaGVQYWludGVyLCBib3JkZXJQZW4ocGFpbnRlciksIFFS
ZWN0KFFQb2ludCgwLCAwKSwgc2l6ZSksIHByZXNzZWQ/IFF0OjpsaWdodEdyYXkgOiBidXR0b25H
cmFkaWVudEJvdHRvbSk7Ci0gICAgICAgIFFQaXhtYXBDYWNoZTo6aW5zZXJ0KGtleSwgcmVzdWx0
KTsKKyAgICAgICAgaW5zZXJ0SW50b0NhY2hlKGlkLCByZXN1bHQpOwogICAgIH0KICAgICBwYWlu
dGVyLT5kcmF3UGl4bWFwKHJlY3QsIHJlc3VsdCk7CiB9CkBAIC02NjEsNiArNzE5LDggQEAgYm9v
bCBSZW5kZXJUaGVtZVF0TW9iaWxlOjpwYWludFRleHRGaWVsZChSZW5kZXJPYmplY3QqIG8sIGNv
bnN0IFBhaW50SW5mbyYgaSwgY28KIAogICAgIC8vIE5vdyBwYWludCB0aGUgdGV4dCBmaWVsZC4K
ICAgICBpZiAoYXBwZWFyYW5jZSA9PSBUZXh0QXJlYVBhcnQpIHsKKyAgICAgICAgY29uc3QgYm9v
bCBwcmV2aW91c0FudGlhbGlhc2luZyA9IHAucGFpbnRlci0+dGVzdFJlbmRlckhpbnQoUVBhaW50
ZXI6OkFudGlhbGlhc2luZyk7CisgICAgICAgIHAucGFpbnRlci0+c2V0UmVuZGVySGludChRUGFp
bnRlcjo6QW50aWFsaWFzaW5nKTsKICAgICAgICAgcC5wYWludGVyLT5zZXRQZW4oYm9yZGVyUGVu
KCkpOwogICAgICAgICBwLnBhaW50ZXItPnNldEJydXNoKFF0Ojp3aGl0ZSk7CiAgICAgICAgIGNv
bnN0IGludCByYWRpdXMgPSBjaGVja0JveFdpZHRoICogcmFkaXVzRmFjdG9yOwpAQCAtNjcyLDcg
KzczMiw3IEBAIGJvb2wgUmVuZGVyVGhlbWVRdE1vYmlsZTo6cGFpbnRUZXh0RmllbGQoUmVuZGVy
T2JqZWN0KiBvLCBjb25zdCBQYWludEluZm8mIGksIGNvCiAgICAgICAgICAgICBwLnBhaW50ZXIt
PnNldEJydXNoKFF0OjpOb0JydXNoKTsKICAgICAgICAgICAgIHAucGFpbnRlci0+ZHJhd1JvdW5k
ZWRSZWN0KHIsIHJhZGl1cywgcmFkaXVzKTsKICAgICAgICAgfQotCisgICAgICAgIHAucGFpbnRl
ci0+c2V0UmVuZGVySGludChRUGFpbnRlcjo6QW50aWFsaWFzaW5nLCBwcmV2aW91c0FudGlhbGlh
c2luZyk7CiAgICAgfSBlbHNlCiAgICAgICAgIHAuZHJhd0xpbmVFZGl0KHIsIGlzRm9jdXNlZChv
KSwgaXNFbmFibGVkKG8pKTsKICAgICByZXR1cm4gZmFsc2U7CkBAIC03MDIsMTIgKzc2Miw3IEBA
IGJvb2wgUmVuZGVyVGhlbWVRdE1vYmlsZTo6cGFpbnRNZW51TGlzdChSZW5kZXJPYmplY3QqIG8s
IGNvbnN0IFBhaW50SW5mbyYgaSwgY29uCiAgICAgaWYgKCFwLmlzVmFsaWQoKSkKICAgICAgICAg
cmV0dXJuIHRydWU7CiAKLSAgICBjb25zdCBRUG9pbnQgdG9wTGVmdCA9IHIubG9jYXRpb24oKTsK
LSAgICBwLnBhaW50ZXItPnRyYW5zbGF0ZSh0b3BMZWZ0KTsKLSAgICBjb25zdCBRUmVjdCByZWN0
KFFQb2ludCgwLCAwKSwgci5zaXplKCkpOwotCi0gICAgcC5kcmF3Q29tYm9Cb3gocmVjdCwgY2hl
Y2tNdWx0aXBsZShvKSwgaXNFbmFibGVkKG8pKTsKLSAgICBwLnBhaW50ZXItPnRyYW5zbGF0ZSgt
dG9wTGVmdCk7CisgICAgcC5kcmF3Q29tYm9Cb3gociwgY2hlY2tNdWx0aXBsZShvKSwgaXNFbmFi
bGVkKG8pKTsKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL3F0L1JlbmRlclRoZW1lUXRNb2JpbGUuaCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL3F0L1JlbmRlclRoZW1lUXRNb2JpbGUuaAppbmRleCA5ZTliODE0M2VjZmViMGY2Njk4
ZWRkMGIxMjFlMWZhMzJjZmY0MTEwLi5jNTdhMTgwMjllMmU5MWFlOTMxOTQ3ODA2OGVhNmExMDM5
NDUyOTJkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9xdC9SZW5kZXJUaGVt
ZVF0TW9iaWxlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vcXQvUmVuZGVyVGhlbWVR
dE1vYmlsZS5oCkBAIC0yNSwxMyArMjUsMTYgQEAKICNpbmNsdWRlICJSZW5kZXJUaGVtZVF0Lmgi
CiAKICNpbmNsdWRlIDxRQnJ1c2g+CisjaW5jbHVkZSA8UUhhc2g+CisjaW5jbHVkZSA8UVBpeG1h
cENhY2hlPgogCiBRVF9CRUdJTl9OQU1FU1BBQ0UKIGNsYXNzIFFDb2xvcjsKLWNsYXNzIFFQaXht
YXA7CiBjbGFzcyBRU2l6ZTsKIFFUX0VORF9OQU1FU1BBQ0UKIAordHlwZWRlZiBRUGl4bWFwQ2Fj
aGU6OktleSBDYWNoZUtleTsKKwogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBSZW5kZXJU
aGVtZVF0TW9iaWxlIDogcHVibGljIFJlbmRlclRoZW1lUXQgewpAQCAtODMsNiArODYsNDQgQEAg
cHJpdmF0ZToKICAgICB2b2lkIHNldFBhbGV0dGVGcm9tUGFnZUNsaWVudElmRXhpc3RzKFFQYWxl
dHRlJikgY29uc3Q7CiB9OwogCitzdHJ1Y3QgS2V5SWRlbnRpZmllciB7CisKKyAgICBLZXlJZGVu
dGlmaWVyKCkKKyAgICAgICAgOiB0eXBlKFVuZGVmaW5lZCkKKyAgICAgICAgLCB3aWR0aCgwKQor
ICAgICAgICAsIGhlaWdodCgwKQorICAgICAgICAsIHRyYWl0MSgwKQorICAgICAgICAsIHRyYWl0
MigwKQorICAgICAgICAsIHRyYWl0MygwKQorICAgIHsKKyAgICB9CisKKyAgICBlbnVtIENvbnRy
b2xUeXBlIHsKKyAgICAgICAgVW5kZWZpbmVkLAorICAgICAgICBDaGVja0JveCwKKyAgICAgICAg
UmFkaW8sCisgICAgICAgIENvbWJvQnV0dG9uLAorICAgICAgICBMaW5lRWRpdCwKKyAgICAgICAg
UHVzaEJ1dHRvbiwKKyAgICAgICAgUHJvZ3Jlc3MsCisgICAgICAgIFNsaWRlclRodW1iCisgICAg
fTsKKworICAgIENvbnRyb2xUeXBlIHR5cGUgOiAzOworICAgIHVpbnQgd2lkdGggOiAxMTsKKyAg
ICB1aW50IGhlaWdodCA6IDk7CisgICAgdWludCB0cmFpdDEgOiAxOworICAgIHVpbnQgdHJhaXQy
IDogMTsKKyAgICB1aW50IHRyYWl0MyA6IDc7CisKKyAgICBpbmxpbmUgYm9vbCBvcGVyYXRvcj09
KGNvbnN0IEtleUlkZW50aWZpZXImIG90aGVyKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJu
ICh0eXBlID09IG90aGVyLnR5cGUgJiYgd2lkdGggPT0gb3RoZXIud2lkdGgKKyAgICAgICAgICAg
ICAgICAmJiBoZWlnaHQgPT0gb3RoZXIuaGVpZ2h0ICYmIHRyYWl0MSA9PSBvdGhlci50cmFpdDEK
KyAgICAgICAgICAgICAgICAmJiB0cmFpdDIgPT0gb3RoZXIudHJhaXQyICYmIHRyYWl0MyA9PSBv
dGhlci50cmFpdDMpOworICAgIH0KK307CisKIGNsYXNzIFN0eWxlUGFpbnRlck1vYmlsZSA6IHB1
YmxpYyBTdHlsZVBhaW50ZXIgewogCiBwdWJsaWM6CkBAIC0xMDUsOSArMTQ2LDkgQEAgcHJpdmF0
ZToKICAgICB2b2lkIGRyYXdSYWRpbyhRUGFpbnRlciosIGNvbnN0IFFTaXplJiwgYm9vbCBjaGVj
a2VkLCBib29sIGVuYWJsZWQpIGNvbnN0OwogICAgIFFQaXhtYXAgZmluZFJhZGlvKGNvbnN0IFFT
aXplJiwgYm9vbCBjaGVja2VkLCBib29sIGVuYWJsZWQpIGNvbnN0OwogCi0gICAgUVNpemUgZ2V0
QnV0dG9uSW1hZ2VTaXplKGludCAsIGJvb2wgbXVsdGlwbGUpIGNvbnN0OwotICAgIHZvaWQgZHJh
d1NpbXBsZUNvbWJvQnV0dG9uKFFQYWludGVyKiwgY29uc3QgUVNpemUmLCBjb25zdCBRQ29sb3Im
KSBjb25zdDsKLSAgICB2b2lkIGRyYXdNdWx0aXBsZUNvbWJvQnV0dG9uKFFQYWludGVyKiwgY29u
c3QgUVNpemUmLCBjb25zdCBRQ29sb3ImKSBjb25zdDsKKyAgICBRU2l6ZUYgZ2V0QnV0dG9uSW1h
Z2VTaXplKGludCAsIGJvb2wgbXVsdGlwbGUpIGNvbnN0OworICAgIHZvaWQgZHJhd1NpbXBsZUNv
bWJvQnV0dG9uKFFQYWludGVyKiwgY29uc3QgUVNpemVGJiwgY29uc3QgUUNvbG9yJikgY29uc3Q7
CisgICAgdm9pZCBkcmF3TXVsdGlwbGVDb21ib0J1dHRvbihRUGFpbnRlciosIGNvbnN0IFFTaXpl
RiYsIGNvbnN0IFFDb2xvciYpIGNvbnN0OwogICAgIFFQaXhtYXAgZmluZENvbWJvQnV0dG9uKGNv
bnN0IFFTaXplJiwgYm9vbCBtdWx0aXBsZSwgYm9vbCBlbmFibGVkKSBjb25zdDsKIAogICAgIFFQ
aXhtYXAgZmluZExpbmVFZGl0KGNvbnN0IFFTaXplJiwgYm9vbCBmb2N1c2VkKSBjb25zdDsKQEAg
LTExNSw5ICsxNTYsMTIgQEAgcHJpdmF0ZToKIAogICAgIFFTaXplIHNpemVGb3JQYWludGVyU2Nh
bGUoY29uc3QgUVJlY3QmKSBjb25zdDsKIAorICAgIHN0YXRpYyBib29sIGZpbmRDYWNoZWRDb250
cm9sKGNvbnN0IEtleUlkZW50aWZpZXImLCBRUGl4bWFwKik7CisgICAgc3RhdGljIHZvaWQgaW5z
ZXJ0SW50b0NhY2hlKGNvbnN0IEtleUlkZW50aWZpZXImLCBjb25zdCBRUGl4bWFwJik7CisKICAg
ICBib29sIG1fcHJldmlvdXNTbW9vdGhQaXhtYXBUcmFuc2Zvcm07CiAKLSAgICBRX0RJU0FCTEVf
Q09QWShTdHlsZVBhaW50ZXJNb2JpbGUpOworICAgIFFfRElTQUJMRV9DT1BZKFN0eWxlUGFpbnRl
ck1vYmlsZSkKIH07CiAKIH0K
</data>

          </attachment>
      

    </bug>

</bugzilla>